From db2d841e282c3f9200597eaa8e34467fba1bd92f Mon Sep 17 00:00:00 2001 From: sifnoc Date: Wed, 22 Nov 2023 18:06:29 +0000 Subject: [PATCH 01/32] feat: initial orchestrator struct with simple test code --- .gitignore | 1 + Cargo.lock | 15 +- Cargo.toml | 7 +- README.md | 23 +- bin/mini_tree_server.rs | 34 +- docker-compose.yml | 12 + scripts/test_sending_entry.sh | 25 + src/aggregation_merkle_sum_tree.rs | 11 +- src/data/entry_2_11_1.csv | 2049 +++++ src/data/entry_2_11_2.csv | 2049 +++++ src/data/entry_2_11_3.csv | 2049 +++++ src/data/entry_2_11_4.csv | 2049 +++++ src/data/entry_2_13.csv | 8193 +++++++++++++++++ src/executor/mod.rs | 136 + src/executor/spawner.rs | 9 + src/lib.rs | 26 +- .../csv/entry_16.csv} | 0 src/orchestrator/csv/entry_16_1.csv | 17 + src/{data => orchestrator/csv}/entry_16_2.csv | 0 src/{data => orchestrator/csv}/entry_16_3.csv | 0 src/orchestrator/entry_csv_parser.rs | 47 + src/orchestrator/mod.rs | 5 + src/orchestrator/orchestrator.rs | 177 + 23 files changed, 16893 insertions(+), 41 deletions(-) create mode 100644 docker-compose.yml create mode 100644 src/data/entry_2_11_1.csv create mode 100644 src/data/entry_2_11_2.csv create mode 100644 src/data/entry_2_11_3.csv create mode 100644 src/data/entry_2_11_4.csv create mode 100644 src/data/entry_2_13.csv create mode 100644 src/executor/mod.rs create mode 100644 src/executor/spawner.rs rename src/{data/entry_16_1.csv => orchestrator/csv/entry_16.csv} (100%) create mode 100644 src/orchestrator/csv/entry_16_1.csv rename src/{data => orchestrator/csv}/entry_16_2.csv (100%) rename src/{data => orchestrator/csv}/entry_16_3.csv (100%) create mode 100644 src/orchestrator/entry_csv_parser.rs create mode 100644 src/orchestrator/mod.rs create mode 100644 src/orchestrator/orchestrator.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..714de26 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/src/data diff --git a/Cargo.lock b/Cargo.lock index f432263..0dd29e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -525,9 +525,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856" dependencies = [ "libc", ] @@ -1924,9 +1924,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -3931,9 +3931,12 @@ version = "0.1.0" dependencies = [ "axum", "const_env", + "csv", + "futures", "halo2_proofs", "num-bigint 0.4.4", "rand 0.8.5", + "reqwest", "serde", "serde_json", "summa-backend", @@ -3943,7 +3946,7 @@ dependencies = [ [[package]] name = "summa-backend" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8ab0b07587ced37d341266a73c187bb22e03560e" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#e26303f15efce9d4dbf60e2c99916081b87d5891" dependencies = [ "base64 0.13.1", "bincode", @@ -3963,7 +3966,7 @@ dependencies = [ [[package]] name = "summa-solvency" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8ab0b07587ced37d341266a73c187bb22e03560e" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#e26303f15efce9d4dbf60e2c99916081b87d5891" dependencies = [ "ark-std", "csv", diff --git a/Cargo.toml b/Cargo.toml index 7883a98..315a395 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,10 +11,13 @@ const_env = "0.1.2" num-bigint = "0.4.4" serde = { version = "1.0.192", features = ["derive"] } serde_json = "1.0.108" -summa-backend = { git = "https://github.com/summa-dev/summa-solvency", branch = "v1-improvements-and-consolidation", version = "0.1.0" } +summa-backend = { git = "https://github.com/summa-dev/summa-solvency", branch = "v1-for-summa-aggregation", version = "0.1.0" } halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2", tag = "v2023_04_20"} tokio = { version = "1.34.0", features = ["full"] } -rand = "0.8" +reqwest = "0.11.22" +csv = "1.3.0" +rand = "0.8.5" +futures = "0.3.29" [[bin]] name = "mini-tree-server" diff --git a/README.md b/README.md index d00879f..37cddbb 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,28 @@ # Summa Aggregation +For demonstration, We only run `Executor` instead of `Orchestrator` what we planned to implemented in here.` + ## Orchestrator -WIP +The orchestrator is not yet implemented. In a real-world scenario, the orchestrator will spawn multiple `Executors`. + +The Executors' roles include loading `csv` files and sending data, which is converted from csv file as json type, to the Worker, which runs the `MiniTreeGenerator` in a Docker container. + +## Demo + +The demonstration compares the performance of processing large entries with a single machine (container) against processing smaller, chunked entries with four machines (containers). To run multiple `Workers`, use: + +``` +$ docker-compose up -d --scale mini-tree=4 +``` + +Note That, Each worker container is assigned 1 CPU core and 128MB RAM for comparison. + +And you can see the comparison result with this command: + +``` +cargo run --bin summa-aggregation +``` ## Mini Tree Generator @@ -86,4 +106,3 @@ WIP "is_sorted": false } ``` - diff --git a/bin/mini_tree_server.rs b/bin/mini_tree_server.rs index 709e4d2..cd2ad49 100644 --- a/bin/mini_tree_server.rs +++ b/bin/mini_tree_server.rs @@ -2,30 +2,9 @@ use axum::{extract::Json, http::StatusCode, response::IntoResponse, routing::pos use const_env::from_env; use num_bigint::BigUint; use std::net::SocketAddr; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonNode { - pub hash: String, - pub balances: Vec, -} -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonEntry { - balances: Vec, - username: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonMerkleSumTree { - root: JsonNode, - nodes: Vec>, - depth: usize, - entries: Vec, - is_sorted: bool, -} +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; +use summa_aggregation::{JsonEntry, JsonMerkleSumTree, JsonNode}; #[from_env] const N_ASSETS: usize = 2; @@ -38,7 +17,7 @@ async fn main() { let app = Router::new().route("/", post(create_mst)); // Define the address to serve on - let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); // TODO: assign ports from env variable + let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); // Start the server axum::Server::bind(&addr) @@ -69,8 +48,15 @@ async fn create_mst( }) .collect::>>(); + let entries_length = entries.len(); + let starting_time = std::time::Instant::now(); // Create `MerkleSumTree` from `parsed_entries` let tree = MerkleSumTree::::from_entries(entries, false).unwrap(); + println!( + "Time to create tree({} entries): {}ms", + entries_length, + starting_time.elapsed().as_millis() + ); // Convert `MerkleSumTree` to `JsonMerkleSumTree` let json_tree = JsonMerkleSumTree { diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e01f183 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.8' + +services: + mini-tree: + image: sifnoc/summa-aggregation:latest + deploy: + resources: + limits: + cpus: '1.0' + memory: 128M + ports: + - "4000-4003:4000" diff --git a/scripts/test_sending_entry.sh b/scripts/test_sending_entry.sh index 3e13652..c06224e 100644 --- a/scripts/test_sending_entry.sh +++ b/scripts/test_sending_entry.sh @@ -11,12 +11,37 @@ fi # The curl command with the variable PORT curl -X POST http://localhost:$PORT/ \ + -vvv \ -H "Content-Type: application/json" \ -d '[ { "balances": ["11888", "41163"], "username": "dxGaEAii" }, + { + "balances": ["67823", "18651"], + "username": "MBlfbBGI" + }, + { + "balances": ["11888", "41163"], + "username": "dxGaEAii" + }, + { + "balances": ["67823", "18651"], + "username": "MBlfbBGI" + }, + { + "balances": ["11888", "41163"], + "username": "dxGaEAii" + }, + { + "balances": ["67823", "18651"], + "username": "MBlfbBGI" + }, + { + "balances": ["11888", "41163"], + "username": "dxGaEAii" + }, { "balances": ["67823", "18651"], "username": "MBlfbBGI" diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 5eacc4c..8a37dc8 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -14,7 +14,7 @@ use summa_backend::merkle_sum_tree::{Entry, MerkleProof, MerkleSumTree, Node, Tr /// * `N_BYTES`: Range in which each node balance should lie #[derive(Debug, Clone)] pub struct AggregationMerkleSumTree { - root: Node, + pub root: Node, nodes: Vec>>, depth: usize, mini_trees: Vec>, @@ -178,7 +178,6 @@ impl AggregationMerkleSumTree::new("src/data/entry_16_1.csv").unwrap(); + MerkleSumTree::::new("src/orchestrator/csv/entry_16_1.csv").unwrap(); let mini_tree_2 = - MerkleSumTree::::new("src/data/entry_16_2.csv").unwrap(); + MerkleSumTree::::new("src/orchestrator/csv/entry_16_2.csv").unwrap(); let aggregation_mst = AggregationMerkleSumTree::::new(vec![ mini_tree_1.clone(), @@ -240,10 +239,10 @@ mod test { // create new mini merkle sum trees. The accumulated balance for each mini tree is in the expected range // note that the accumulated balance of the tree generated from entry_16_3 is just in the expected range for 1 unit let merkle_sum_tree_1 = - MerkleSumTree::::new("src/data/entry_16_1.csv").unwrap(); + MerkleSumTree::::new("src/orchestrator/csv/entry_16_1.csv").unwrap(); let merkle_sum_tree_2 = - MerkleSumTree::::new("src/data/entry_16_.csv").unwrap(); + MerkleSumTree::::new("src/orchestrator/csv/entry_16_2.csv").unwrap(); // When creating the aggregation merkle sum tree, the accumulated balance of the two mini trees is not in the expected range, an error is thrown let result = AggregationMerkleSumTree::::new(vec![ diff --git a/src/data/entry_2_11_1.csv b/src/data/entry_2_11_1.csv new file mode 100644 index 0000000..8726e31 --- /dev/null +++ b/src/data/entry_2_11_1.csv @@ -0,0 +1,2049 @@ +username;balances +hyyxMolk;56592,89426 +RQNrweLF;29280,24324 +LzSloDzM;26199,79099 +wxcPsmpL;79720,33845 +xzZdIKUo;59691,6650 +VmSVPdku;21784,9048 +dyDYdELg;61832,11523 +pjmcnARI;37628,6750 +qTQKUYpi;37355,67581 +WSriSgFF;78290,77081 +dKOqhBtG;12860,5535 +otokbzRq;15132,51034 +cqqaFiGb;62380,75518 +WQDXGyRF;15015,9240 +MtcXHTlO;30374,8416 +IJkULMfY;45754,53550 +EzsVTNYp;14588,78716 +HQMXTJAb;79052,39036 +AukYFZtv;64791,47222 +kKJRMOaD;8897,55164 +UHsLudwH;26351,23259 +lprmQTsv;75863,73322 +FjvkdakE;41184,71526 +HnhgCjsi;19615,15764 +DijkKPJD;86092,80115 +SsMxRWLj;50004,48296 +fbzyMOas;19281,34997 +RXqPmWTO;31149,72837 +FIxfYKSs;78689,27446 +WywkOJBN;48430,2592 +TdEtQaoI;8503,78815 +alVcjzfI;25761,74841 +IxFYLxPO;16414,72575 +qUZCWcQq;41680,42483 +MmNhooXz;38606,50784 +OKIYxmzJ;46164,1937 +tNsdAVxm;33487,55645 +llNaGLZx;1264,30160 +LZxhdFoH;53021,70285 +TUBjpfHb;13811,58771 +oyLIBVuY;82416,51710 +fvHfSAuZ;41977,12157 +TcoPMJXu;51395,5803 +yYiZYHyh;70049,2459 +yurqwnJZ;40203,3407 +FrBqbZQN;83260,8413 +OMVRmCZt;6051,78455 +QKxZNiqp;66680,42326 +OCZNAeCD;76896,84729 +EkJdyBDs;42381,8072 +nTGjNyVp;48454,26635 +EofhmGMj;58598,49681 +xdpdNXDV;14801,4422 +BqYRmSWA;42794,23120 +naRiLRGI;78826,75240 +qJoxkyZT;71960,11922 +RvbufHVR;16814,43395 +PsMvNiBe;33720,6756 +hBNEnfPC;12817,1707 +vopmVAMM;5174,67321 +BpAcXwIi;75309,34550 +BzljTHzi;50607,27132 +ZJDhiGCV;53645,68677 +lcNMGIBo;80804,21066 +MXTktqTQ;56071,58191 +iRJVdeck;57250,16266 +uGCLvGfS;47027,57825 +czMbQCbc;45321,81770 +bzjLViqY;1355,75452 +cWZpByTk;66351,77880 +dLCgsmKj;78911,78070 +fPdAPXtD;14524,79239 +tZMbFphy;41684,58391 +SNuLWiWX;17334,81555 +JhzUJxmh;81722,88377 +bgPuhqVL;38273,83399 +EvTLprge;67560,82837 +zdcUunZs;64064,61768 +PGTSjjum;19547,87103 +ndoUIyYo;80863,54299 +GmOwyaME;50258,87368 +DwmraTgB;24851,53804 +DxTRkzHx;69935,32797 +nFyRxggE;30321,89855 +wqeYpALk;52397,24003 +laDhVvoo;34280,51155 +TloisARe;14703,54709 +NDqXAXtL;4907,67047 +oIIwObqp;85204,31512 +onJBpqZg;78595,73871 +Pdhzppay;28443,4660 +tHjkwjMC;76891,47522 +zzeBJMPX;59526,51688 +IrBQopuW;42031,53269 +QngKYlrU;19060,30924 +lMoasANf;60630,24420 +ceZEqAzg;64810,85515 +ZEvJNzMY;38986,63012 +OwhBrgQN;12575,29311 +ZtfJVXBm;72920,88371 +yRuOaFSk;63444,60717 +FEMuLrku;44020,78845 +YufePVAx;50275,65926 +kpAdTnRA;52793,66723 +nWKMrWFO;7447,58051 +drPNBbdw;85241,28419 +vfgpfTfP;85963,40492 +LZBszGLL;36294,83213 +RZNNTuOd;89668,23764 +JIlfDhPm;21018,51419 +zkDUqqUf;31868,26004 +VXCYBZFl;12255,27154 +CtguEfna;21326,75089 +AyOsYTnA;8846,76900 +ZOlpdUBo;19391,86381 +HxlhUKzm;10062,8592 +iczvrtjq;30095,60740 +iXOIcwmf;30742,2984 +QJORLbFF;3024,63525 +JcRrhola;28586,67737 +PFEVwqTL;50261,55301 +RZcirCrl;80385,59036 +PpzIMNxO;11964,13444 +ZyFingrC;12130,70593 +ppBuZmpg;27160,79591 +ywyHRKvy;35349,20206 +LLxxJboe;18872,22667 +hRxqikmL;11007,25359 +WkZcrYED;70475,64609 +POdQnQjw;43281,51121 +MATKNqhZ;54032,46502 +NYVSTWdX;63066,50385 +PDVyHcAK;54818,38623 +AfRZgSkG;19053,47757 +qtLrxYue;82024,81643 +fxFeQQgV;46499,15159 +HytinyUS;28308,62355 +VzuNXtrz;23835,34167 +vfnIXnoY;57137,78960 +XWfZvXcV;28402,43739 +tVBERLNR;63596,21718 +KKQvyrGi;26045,60799 +uaxVLUQb;50047,15586 +vNIQdvRF;56466,83682 +mEZiUlhE;37018,5450 +RXEpgGsE;76972,41803 +lflKCbEm;88624,76572 +fZNFBxPi;44188,6866 +GgOBvfHe;4278,50200 +UvmBdCIk;83689,13498 +NRlExbIe;26769,63140 +XdSgaRXi;36261,38593 +gYMRXMNR;29460,72165 +ducmdzVM;30779,34829 +PkNaYwGf;56364,44273 +xXAeCmdo;44870,20795 +CEPuFiVd;85792,30787 +YJEJFYVd;71390,87635 +nUcsIRLQ;20326,84872 +POHLILKJ;85523,14117 +yHMKxCvp;1071,3554 +fpXvDKUd;4570,9432 +aTVSaKzf;2359,3160 +OpTiiNVn;3712,10793 +nEWTwgOs;52236,23289 +ZNrbSAUF;64315,4972 +geaAqUYa;2582,6366 +jtweSsVa;53968,23950 +KAKkBWAK;61624,25341 +gNOnTDes;63143,72939 +BJgYpiMB;61796,32270 +eUbTDdtr;42346,31603 +XLMcsDzW;15343,66567 +dScTrKIX;68155,26827 +LDerFKmb;82163,49721 +bhFYTcsK;12490,44421 +OJtUftKr;81067,82460 +aetfsrCx;79842,61398 +sNhHYItV;52088,17812 +LTIfELpI;34728,58292 +csgjvbet;69401,45467 +huSimdic;7077,56007 +jdWaboBP;34481,76305 +frhwldYe;48032,69462 +fiONMAKz;29933,57809 +lZkeqfLF;69334,15271 +FakuYZCL;8135,9366 +ofLYYQSG;28212,31427 +PgGPODSa;21749,52614 +GMblOJnz;76724,72831 +tsBEfXqe;63210,50321 +bwNzHVAg;49516,20030 +EebTaKYi;55072,5841 +SApFkhVP;63752,7468 +RCLtrrjF;26023,75010 +imNIJqSI;26444,7588 +yNrSCbjV;71712,70621 +aBczybvV;20321,50454 +WjsOFRVA;76655,35034 +LMTpStCx;17308,69772 +adxPZzoW;73409,75317 +UGDfqHhn;30133,44818 +QqHCcJLI;32849,23744 +WsWeTrHj;54265,17285 +zLGauAGg;86745,80681 +JIGncltc;44229,42723 +hKnnlfqf;49998,82070 +tsbqAbPR;80423,26825 +ogPXDfSj;26064,54979 +QfOOIkAb;70787,41641 +opSmDQdF;27707,72644 +bSueUGZS;79852,7078 +PQbKLepD;24165,26102 +PQeMVFaL;17056,31957 +apKjbLQL;75712,53516 +jKAEbfCH;6225,7805 +WrSLlMjo;4121,53925 +MuKzohAI;71910,2153 +yjlnpLcC;33490,1240 +NaHVTMKP;78382,26042 +mSmQOKEV;58920,77909 +mVFWUIWC;24690,67157 +hbqycSkV;13951,31263 +PmNeDLre;73357,71289 +RBSyhGVe;40447,35082 +eCrwEICC;15032,53475 +vwfKXmBW;13054,33712 +mQLRYKyG;49796,41188 +slLJTulU;2175,26386 +bIWeegFy;38262,83941 +lVgkfCBZ;31452,36075 +WZsXwlXK;42494,51916 +qoNrcUgc;14370,19263 +LctJcmrk;70483,24821 +HMscIuQJ;15697,1836 +lPIxBYFy;80780,33391 +SOMyhYpF;29204,1286 +wEKxNjPa;81105,5529 +ueilNPtd;30266,47454 +ofLXaPkC;19254,11545 +hPGfQswC;34928,59465 +sUhgskeY;89104,45062 +mqTDwFEQ;49436,60720 +lCuRilTX;36736,40879 +qMYpOLEM;6140,15847 +GsWnilYx;32570,75965 +wogIdbin;85071,70573 +vyuCmaFr;54647,80929 +foPuxxqU;88133,6077 +oLsghaKH;34416,3060 +NxlFAUHJ;72497,73162 +LJHZjcXg;84981,19050 +dDBFRJWx;15792,7574 +dLbTUYTX;52666,56833 +cpPDhgwZ;50165,77876 +RNobjbvG;7508,64344 +SoWYQfna;55016,89625 +xXrndDoy;11891,47563 +YeXWwDVf;2401,81318 +ueVMMCOG;4521,48661 +ukhryUKx;24526,79640 +BcDtGMjz;57942,55532 +NWtiaXmN;7491,72369 +IMmfaYxn;53867,26113 +vtcvePHC;58297,86543 +kyqVArAs;36728,75730 +SFgmOmxq;51811,50256 +GIbsXXQJ;83856,21162 +hlRqsRNG;30954,52507 +kcmoRVmQ;44059,8657 +aDGynqkb;6670,81479 +UGWydlZY;70844,38937 +WKbRQVVd;17803,1521 +VBKWXxCU;56390,50983 +iCccPvzP;69440,19409 +XBUpfrAg;31269,25667 +ReBViZcB;46286,71490 +bBxFXWgE;84732,28075 +IoPaNrPC;37237,55055 +LkAxuKwj;88470,42987 +mFrLzUWt;64810,80815 +XtLVRfRo;44398,11331 +FIokdgpm;18513,13032 +EEfNtyqz;34071,32985 +MjVRdswV;38035,72637 +SWwQVDci;72344,2579 +CwaUbsAe;41568,26269 +JCSiqCjG;1364,37322 +LbdDptYW;58121,59942 +WWhzVAZE;10567,47583 +tgtZhpal;52502,89901 +BQDLFgfb;54401,83162 +igzNODNA;9221,17210 +LfAwDqEj;88013,6449 +UeKMQQqa;37624,18836 +YRWrZWlb;50744,84206 +sUsbydEX;55238,12913 +VZWFJkHD;45434,49003 +TWRGXpHM;12459,35893 +sngekHGm;69473,10086 +xxuqMPCt;17787,21503 +xFdviMTG;49920,53554 +qAafyeGr;4205,37261 +HVNuZFgb;48076,39148 +gQKgvbEN;28814,75930 +LaNWAXRC;42769,27532 +SFEzcnkj;51405,14754 +iJtsSBjR;85228,75429 +nwEoyyok;60301,13257 +ZeJNlqCO;22582,74331 +bKDxuaPN;67214,56220 +VpUJrlCw;65978,29309 +iUiHvMFO;39702,84965 +knWmTAvX;13233,77168 +EgTYkhov;39647,17761 +pLwkfVEI;70849,84786 +cPrxFNpE;56567,25825 +DndzwxsX;40735,69850 +ZezmbqAY;33701,43873 +NrglllWH;35538,68603 +FdKfzVOj;19651,66136 +oAAuPNsW;1856,30166 +dVNdfzLI;71713,17280 +yBnFjxjT;11002,15757 +preiCwYe;76358,28698 +DujqlNRq;60047,76426 +puynebdE;30083,68049 +ZAvgAVAL;71610,48693 +HbsXMmmP;30046,17415 +MLerdTuH;51011,58206 +hTPahMPx;12322,45099 +kMQuSagY;64704,27048 +HAHniRQA;48749,87071 +HCOhAyST;51821,6747 +NrsbtNtH;68968,82444 +JVhfwjCE;51395,8621 +hUMyzNwE;63141,85730 +CezMDiuv;53355,82272 +xXeixNhU;69873,4102 +RJaQVDEv;78543,19331 +TguFnMQF;29424,43743 +NbDSYsRn;52227,70084 +nyCHCFYr;34591,64424 +cDzpJmEk;71643,40682 +cNhyrJcw;42716,3985 +yhgsCZoY;62107,68264 +UQKrqmol;85143,58483 +cYBvjPxI;89681,42011 +YeZKQUke;8800,66096 +diqEONKw;10972,15527 +eiXuOrjv;39396,25015 +ROArdcMg;50063,67604 +pZIjSFYg;6692,35414 +AlsVxBbL;48989,46557 +BCmiLifr;39695,25733 +qqPdygch;80547,46110 +yRFjgjer;18248,69221 +VuPSuTSN;28290,20751 +iEXhlYLz;35961,14784 +MGXcDopM;3778,50654 +bFStpRjQ;7833,1281 +PBdFbsDN;50122,71224 +KFBYhFDh;36110,60726 +VfmtspqC;32100,73226 +DGUanwuG;30175,31074 +uEEemXKD;66581,36480 +fwxquwdD;49334,40503 +WPTSURdN;76779,1376 +dfFNOMVN;47435,60668 +spdzSmjU;27969,73251 +OsDGdGCF;33529,20045 +jbGndWHS;65218,1161 +AMVANjWg;77030,72530 +KgBbTiPi;12804,21115 +gHJfbmsH;10541,69207 +CwoEBGfA;66011,36277 +xwvvVoTl;52111,48092 +EYxCPKSL;49577,13624 +gOTyzCnZ;73294,45505 +JuPQgyCn;58869,9551 +oKkTbMHa;28431,86656 +aFGixwpr;12711,22510 +dnuRamLR;37771,22505 +OdrkNFMt;67612,22326 +yDttjSKe;17050,81440 +gJnieIKt;22914,34053 +cFCxnNjL;88245,59561 +byNHsnBl;67691,2127 +QDbyztJi;64855,67148 +WwKTbCct;21129,38652 +EHqWfzrk;1752,14890 +UHXRyjub;10352,21637 +eDvRDfGi;4629,53130 +ZOQcQkFh;88376,9537 +yJUBAgha;2113,60675 +NqUKdOyM;15013,60203 +qsMmjPgU;32368,26853 +ufoDJlFB;40313,26885 +ZXmbSrvK;28743,13604 +yFneVuDv;79899,89644 +CshSRUjp;66307,44978 +NYrNCxeC;54871,84669 +dSBnSWIu;17467,39317 +dfrsiHeC;65362,7001 +lmupkTVJ;15268,70068 +CVnqhIdd;53492,19787 +EZjdvkvo;32636,10702 +BPKoBOPR;9612,28602 +hsnFAnLJ;79073,81565 +qpNQbDrU;51282,28839 +uNEXZaTB;29624,80518 +ibZCCuwX;78665,61472 +MgcTCtGq;74079,52349 +GMjzqgAn;66098,48448 +sflsOcAX;39641,36569 +ajQMrzOw;69567,33757 +UiAhQtiL;79092,56855 +WwWnJRIO;36038,89832 +GpcKLPeG;32838,14107 +qBlkckDu;80708,68224 +dslgIPxY;32898,38356 +LzrXmdgx;49421,74292 +VhgPIWsX;71256,5929 +LMfSMHrl;13268,43838 +ZZEmNWHz;78497,86283 +ocYXNAJd;55889,53313 +tnxLFOTg;32842,13503 +HzPqulwg;23592,20833 +QgMMyfXG;1176,73704 +XowNMfPU;17528,51275 +fRoFcGvU;82733,21132 +RRVSFDZX;31924,18440 +StHemxPa;39480,86487 +dlLpoJFm;59784,53290 +zKkqGHOl;73537,46674 +vcpfcxVi;63515,17867 +tCTVBHcJ;30419,2257 +OrcUjSEs;79621,40543 +XklDsKii;24820,87103 +zTQUrDbq;89787,31538 +ZmEantqV;79678,24495 +GwJMSNcx;45745,82975 +YWpHQenP;30030,85081 +kxWHCDIy;57146,5353 +lgbabnKO;1615,80507 +kZjVvIoY;16830,12312 +iHVSZcNj;37977,77968 +JFpNGNeO;36423,33684 +sBiSopFo;55025,42118 +JVqpuyWV;55933,2070 +tyZkYqfe;77964,48739 +NfVjQdkZ;53306,68056 +yStDMJIX;86319,70171 +lIYwufFC;35011,27236 +RLOLdayL;66426,27358 +UKcusvmM;71361,52842 +bUqsiXRV;22908,20993 +IpVuJqdB;53366,28320 +nRCqDBIm;40608,20700 +CWQnhuAj;70347,1028 +ayILmPlk;89009,72097 +jQxIwynx;37057,85496 +pLWXzqOs;81525,31450 +tpHFBJKv;43420,31512 +rsUxcNAF;80386,8987 +gyWRsjdI;36391,7455 +XrdBazez;13584,3659 +WaqiYELp;30973,85097 +GQdYirJp;15152,40888 +wDSAfiPD;57213,32349 +UOiPmjam;25474,16717 +MfDZYhsS;57929,36137 +PYRhHZtt;44821,50978 +PCJbAuVO;57177,59646 +PqLqDHZc;27801,24916 +oOfdMlQv;1704,42536 +ZoZgrlRN;72707,89203 +xxoaSMiz;72799,13290 +kdhxdeGn;12376,76292 +GBJWWWVV;13872,69844 +vbnWufVF;72616,86276 +IYlDOuaF;18911,43643 +ODhKaUVf;6908,67984 +tsJSlCLp;9443,54799 +prFCVuls;20375,59553 +HBMbXngV;18501,89516 +xtivWnte;76630,58715 +dBjZYTvd;54953,16842 +vQytitFe;43055,67859 +lJzGuhmq;61716,65217 +epMQgEgY;35345,82824 +FnwxKrMP;74424,82201 +UwUVVxIy;7714,35969 +zEliRwFR;39436,54213 +WfgufOfC;2334,54694 +vcLIVDNe;46600,13970 +rkFvfagi;53833,65802 +NXfAmMTL;18323,58275 +ydFEAFlO;30007,65796 +gDZbEkfe;77520,1353 +siZmTItL;88101,69707 +ZmJsfuIK;78293,29144 +XSmLTGvB;61011,81752 +VakYJarH;8507,52159 +gLMfBHwh;66311,18468 +eLehaxwh;74517,80222 +jrDXUspb;37716,80294 +jojQjQAg;76953,13563 +KDGtYnvG;75338,64612 +kRsFKZfw;3452,73460 +hNTgDZkE;61193,12222 +ZQemYqEJ;59804,50421 +LEdxcSyh;8598,38363 +txonOCCP;83737,66734 +bPROZeER;79450,40268 +geOpXVUH;24837,68410 +AUKBMKqs;54618,61741 +LdurvBSy;70763,7730 +mvrJMUlW;26640,31198 +vOnfVbiR;82773,50404 +HMNnYAWc;32621,24047 +Ufadvkso;70056,32342 +rifIEgig;27795,40568 +SNrZPQcR;45949,74583 +DiyRUBVy;58697,36981 +kFbpcrvn;53710,85438 +RyQNWkjO;29549,82723 +QwbIZhka;48463,41804 +lOZtlMSB;38461,52859 +hPspxJdt;51560,54106 +drCOHUJb;56028,56950 +HYKCledI;60070,39291 +wuwujaaX;17709,10111 +drIoRxom;37044,88436 +RbMqjPyK;35559,17876 +OOHmxjYR;32370,71799 +IYRvzHtk;56624,10879 +LlyyWfPk;67052,33843 +oZZxVBwD;84312,88890 +psjxiTBv;39161,82319 +NtlzBsUu;85396,89886 +AVCeOrtA;73932,52500 +HdpZIDxg;42511,53885 +UkIEWzuI;45813,30771 +VcbEpeXm;51653,84188 +QWzryvvU;71988,21116 +rRwLErQq;51008,31432 +UnSlwfrX;48822,19958 +nNAuDlpL;12368,30084 +hgQQkijY;23923,40688 +haSvOFAy;64015,29453 +MUlWUbYW;85239,83267 +wgxKOGxu;54145,59552 +dOALuIlZ;3106,73942 +vWyuuNAR;89985,77300 +PPrVtUar;33406,26739 +OOGjLRcI;34190,50565 +LQgcytIm;84358,78927 +WCYKcrbR;81725,9643 +LXthZPCI;76393,84576 +SkaSDFtU;55388,58715 +KEiSqDsR;8219,18909 +IKqZmlZj;47629,3424 +YrNzVdnV;57126,68365 +ywXZkXvV;37106,51130 +SXhzblcv;34684,34583 +mfhznJNN;3506,19601 +HNtGJXfy;30359,27790 +ShpULPDq;84666,34531 +IfFahIdf;44063,86282 +LLtFOJFx;85577,86134 +jDpBGpUo;14611,89635 +XqkZaMNY;87176,27511 +lfabpeIf;44197,55159 +HLDXKthJ;38952,82561 +GBmkRLTO;23183,55212 +WocytYRF;8902,89057 +liEZawjS;3706,37491 +vMNsoDmm;37370,66376 +vRfUoCpz;11388,32973 +sfWBBJws;55651,39639 +qQNcuMVx;71425,88649 +ifVOjAOp;32205,15490 +ArhAWkUV;76229,3855 +mUxteMbz;58627,85761 +jQWFSHlT;67150,77152 +BcyEEFmB;58744,35645 +IhbkDldz;20085,68211 +DvTaDmjW;73423,58494 +sRvHneBc;37324,50311 +cBjDjffa;31622,65057 +UlXRtyjN;9378,39093 +LNCVecOm;5097,87612 +hWKKBvtt;51431,59617 +DpwtbTeI;30669,74076 +pXSVsnKr;19070,77098 +SApSAguP;39258,70943 +JRpmFLKa;13709,22107 +joNojzMq;9466,60413 +YNXDTytJ;49300,82245 +EwCecmvr;59306,26740 +FAAVrTJE;69272,10854 +lhTuLTXQ;82742,71992 +DnZGPLEn;16599,61068 +utUUHCPn;87861,21430 +ockjeVWL;62143,21619 +YRFdWyDf;76928,27712 +wRfCeqYb;4096,37868 +SnKdhYRG;89864,87682 +mWsjUYak;44303,14173 +vraNMHne;70513,59388 +qOYjjNWq;52038,24160 +zsXgEOfl;77010,22157 +xvGfHfrY;89826,14989 +fWuhiMxA;61567,39639 +ZqyyoVIw;74132,33046 +kmrwHZSX;8968,1116 +PGzfhASc;59035,34319 +bLXAaOYK;47096,35609 +xSZBFvxA;76466,89145 +OZLcfCKP;53607,72371 +pHaPGanr;30295,63686 +gDoAnwqC;80030,12568 +gVHSPLMc;52613,2187 +yupvLyIo;60761,43084 +KnjnJvFt;2550,15609 +pNcEKgeH;32098,29433 +SrXzDOcK;30816,84313 +SYarhwiS;4982,76976 +nSNCGpJf;8369,46664 +nMBNDDgI;57484,60511 +DVENZfUd;53341,32767 +ZRewvSnj;29912,2825 +KBpZBxoh;2865,34297 +oBTIKHal;81786,61982 +BKrMgupa;34542,52408 +TLsMOpoc;74106,13497 +LXSofTXN;32656,82425 +CoTqNKMJ;83391,73357 +XGDYMcTf;30568,48103 +tFUXcgEF;61827,88118 +VzcQRLyx;26154,46733 +SCKiMbDz;58603,80242 +xCbDfZqa;8688,87510 +ufPhJTDS;5512,28575 +iMMuZvds;83342,54140 +kAGTEhQD;19380,86951 +aeGsuhPa;25243,65352 +itCgIlUY;75679,70273 +HeMlnUgN;4015,46470 +pmlCjsqo;2879,40249 +pjRppbqA;88296,32868 +tKzoFfSv;53641,69392 +xGpPbsXi;17348,80097 +aqUBSFqu;20570,7597 +OJFJVUPT;6480,34445 +VIffnUFZ;24432,74583 +vfVJgsEv;25022,56781 +evcvnFIr;75942,25479 +mXFzKPGt;61000,54083 +qvQxrIxg;36987,62655 +NrtSNfcu;10228,33763 +cJCSkgnv;88449,48546 +niTDutms;73337,36278 +obTUfAGl;18391,2987 +IRwXBBoi;66456,33377 +sJBKmbNn;67879,24541 +PQgTowCn;44228,65159 +nYwdHTnl;4056,74554 +TlgmnUqJ;7213,37584 +nWnDXvsQ;21647,78001 +OWBeAqCi;17326,3534 +zHvlOewd;8385,62356 +pkSdmiVq;15349,10051 +jaFEPGBP;21171,86590 +nkkBALPP;2609,80949 +XUDkzVTi;71098,15528 +SSuqoXTa;88226,6082 +wWtutZEF;31896,55649 +DuaufPuu;12047,71060 +TbbPkcAS;22886,68680 +JQfmvnSf;69846,14128 +HaeOMsQY;61146,68488 +ZAiVeOnx;7001,72483 +PPzVyeNc;49882,29067 +rrjzzMrZ;10494,61907 +jUtusnwZ;63310,64297 +WLTUzgTw;73394,85403 +SkBsvDGq;35598,29491 +avRZqggu;86527,54754 +NRiHafnl;10876,87658 +zNOYeOdR;22524,80108 +KFZCjRhM;62320,16633 +HhMbYvGl;82770,30030 +WqDJaFmI;44193,56502 +liHSNcmj;73288,72826 +leGpVsJO;61369,14822 +fLkODduJ;61813,6778 +GwGJkwmE;18430,76310 +dqhcaSYG;7023,10549 +dTjrYJOl;2983,80699 +YYIexVMm;20300,68989 +vwzSEBOM;63856,73915 +YKcKtNcF;35116,84870 +CHXnINtP;39977,65682 +sPpiApMX;65199,13055 +PQjUTOpC;43118,39845 +mhOBpNKi;79220,48643 +wMTlcCSY;63845,24391 +YQEsUvqC;46800,34737 +AQxEZBaE;51233,45701 +GzupHCPy;70258,45943 +QwaihjnL;26719,41376 +vLhnrdxM;18913,87230 +XrnPKWAc;31243,82506 +iNxcTGcU;78320,77055 +iwpDjuVw;23785,52293 +LFcQXxmO;63703,45803 +sZykDzlP;33648,20192 +MvhiEJAl;26567,36653 +ZeYJqWPn;87900,17836 +peaKTSXc;80772,65618 +QUviHvhT;36454,55582 +YvGUTApC;43201,52366 +dzWexeTD;27048,12599 +iDXTfvwI;15057,50116 +YHDkkfek;14414,84472 +hzzDmVgF;31368,5654 +wIRyxziP;76845,89373 +wIRPcgfT;89789,77432 +orRCdleu;58945,80247 +IpchKRQe;44603,25538 +XHNtWamD;15189,4616 +OalQuUIc;4435,67223 +MOHBcsAA;55832,10118 +TkBfMqfx;86917,50955 +FQGGefve;5440,85874 +VIfkOqFj;19398,54794 +qNyifnII;44931,26684 +TTQrzuAE;4664,89892 +RrknfJbq;26773,49212 +CFPHfbhD;7040,22766 +ZGCKYtCT;12991,12354 +JCEHJDOE;22995,41211 +xxkuuCtR;72436,5735 +Inagoyto;69835,58849 +NEeutKPF;58056,71990 +sbsGDtBS;39777,72822 +VWfdTOst;39791,41950 +fzTzxdPI;36503,52980 +XURdeINT;77081,6025 +ltjxDNaq;43716,58214 +VfyZLhKn;41830,7552 +ruzNOQbZ;31665,58053 +gyUdJOSB;44623,66660 +thRUbrqc;62570,51069 +THcecdPg;20487,60817 +RaaIVxmn;13033,9026 +RxYCHTag;56226,85781 +ZcsvvElL;34649,10379 +TayuTrIM;72614,3984 +UBwbyByt;13526,54849 +DNzLTCrU;87369,67978 +kVrUAYWp;52235,88317 +EwrrNrUG;42660,12376 +FBSRxZnX;24544,76014 +RQecKflI;23911,55429 +lWiNyMeC;65319,38541 +YDkKmlrS;50150,87228 +QSUpBKIt;53500,44788 +OVckJlWU;14529,54174 +VJPDCkcY;84837,59504 +gNtrXSPe;4624,78529 +xQbyNSSw;2317,32058 +DKQZaoBP;43007,14177 +NBDZuHqI;9903,70111 +QKmFILBJ;65581,37889 +xtROmcmi;85714,45004 +vIfnXTGI;19881,37827 +XdhOXJVm;48789,39870 +lvpJeNoi;85422,1246 +VsSgqObz;82368,3331 +mtgpfpNj;28918,86939 +ithOGlOB;67234,63204 +zSXQuOsA;34716,42694 +uShbXkEn;63368,76131 +dDzVwBiQ;56664,23487 +ztKMKxFI;58104,84014 +NURKFysn;6357,50769 +gaZGsnVo;24480,9252 +mfBtaBni;65178,33685 +kVUvpXxm;30810,8485 +UNslILpN;50368,66315 +gWhGdiON;39810,81821 +eAqyHvll;50654,13065 +lTnnrqIa;59817,49663 +aLjUnyoS;73274,18580 +FeLrkUIf;32297,33086 +SXbgdFCt;67616,68163 +dKszKMQt;65845,52125 +iHGgmvxG;74374,81384 +IJHPOWSI;83884,59498 +jlHuEtRo;75625,66806 +DeQIOCML;7680,22322 +ItMUDxQR;42928,68434 +sBoLcyQy;56428,83943 +isrEuuGH;14137,74904 +zERVypQz;16668,88447 +GJyPDxLv;21703,65646 +uFLLeHVy;36901,66475 +JKEQComA;12619,38987 +pnOeDRao;79266,40698 +QGMGgmhX;39046,68096 +xrbupMbv;59820,18181 +SMOvKgIm;7482,59759 +BHcVKImF;84609,49590 +YoQZxunq;88046,29203 +JuLHaJBr;15937,66607 +OLZqgfHG;62212,86012 +oDxndptn;4433,22950 +RQCKasFi;58074,45684 +jDfccLkY;28323,56475 +bXIehiGi;69260,53465 +mjyGFWxU;51006,14775 +ZEEdNEgG;20028,56498 +qCTHOpGH;71784,30021 +WSwVfBEH;37715,26664 +EVzJfVsp;58312,70795 +osOvfckZ;71983,51791 +TtqfOvki;86782,44435 +unaOguHe;2428,57497 +xjgHYWlT;17966,54829 +oogUNPes;80954,24371 +hXKqkaHK;24870,84072 +eSIxasHs;21538,49631 +YSKKwNuH;56849,32770 +ivGAnqph;64272,40489 +zwDlQlpy;10709,41939 +NLRLIxJM;84741,12319 +LfVxpCfF;27391,5298 +CvUWZjKp;27753,76159 +XNBimPaR;32722,40241 +qTGnSIKN;63036,63223 +gVqPYojY;86659,74034 +pWKbrBmw;66731,55333 +uzArpdBZ;64399,19139 +bBzCXhBk;50786,11451 +WKQAZyfT;61347,54527 +muKfqjra;37570,44350 +unTtKeqH;72452,38782 +WFCDEsGN;82663,15295 +fXjBjIGz;71432,10013 +eNknpbPf;41692,38374 +jEmBMsKb;49606,30016 +rJbHhRrK;65044,23626 +duIoqnaz;86474,83084 +yASZSTit;54563,77228 +LBMbAGuk;15097,31790 +KNchlJyS;64409,19340 +gtzDYBQr;24598,66284 +kUpYqsli;21009,37523 +gemLCBCa;39183,7677 +sHUhyqqD;47647,17670 +hwLHXCWy;37436,22263 +EMbLatka;25500,63691 +RctLiVDd;57886,86008 +PbBnpmZG;82341,80584 +crCjjZbw;61370,19182 +RcNmpAxk;32897,85769 +vWaMXEaA;65574,27844 +mKcEvfxw;37659,59060 +mYjHjOYU;9126,18559 +TEndRhwS;40421,29424 +WkjvPVTr;6334,23428 +eRTPfapP;7167,47956 +CXtzEnph;18925,78963 +ZiTjEldu;12742,65872 +zXThmABp;63883,13198 +LiUZEeaF;86092,24221 +SOnAwmyY;10430,36920 +eAXmkMhu;82046,85204 +RCThrdBd;65096,4800 +InjPqSJz;42633,78360 +JvqNyRnV;78540,12756 +RqQCxqRZ;81120,3250 +uXphibUI;22726,40911 +UPyqUndh;16541,66812 +pTTeiThN;4743,86139 +kWtHMETh;15302,3596 +QbxRuYBT;39872,69704 +aHZSSHYW;36841,83035 +VhBEgmwy;83103,28050 +KuDeBYjw;81854,54601 +kGerIaKO;52351,28094 +OmhdjDVN;26719,79745 +HNLVbgbc;60597,11101 +dGDoIgEY;36027,56663 +JXcLyXVB;24232,38792 +mOufhxXg;23845,78510 +wofRZUFr;65757,18587 +TnYdGSXw;83715,85222 +xwOsWfkh;44209,85428 +TeGefVCI;77747,39283 +nPNPsImi;46966,56359 +zeKjDTXq;7401,56660 +UKyfpmbj;56841,22336 +XKCaGiJj;55366,77004 +zupckUze;1303,32519 +XvtwUpgo;61048,29267 +aptsZGqu;71091,8749 +mBUqPPVr;24537,87622 +gumpCywt;38887,19914 +jeyaiOFC;63012,62260 +VBQMkeAr;35809,14413 +FThnqwJF;42588,81361 +RMpLjjev;68583,85742 +xCDCuXHs;25314,25085 +YZXkXEyM;47872,49595 +pOhHwGYu;11470,82878 +JCisjmsl;21814,8867 +lWetaesO;50185,5455 +ribdQrax;5152,69996 +izvRaCUA;67431,63631 +rlreFipr;37571,55979 +vsyeEBuI;30364,36234 +VuHcodBa;3086,52140 +SVgExiRL;72957,60245 +bFqPBWEl;44006,45390 +utCmCyUa;7999,53063 +KPPlRSKI;20274,51680 +ZBVpacML;49814,73964 +FInijXIs;53482,37780 +UOStwCtX;27147,25489 +iKAMQAHK;31269,76576 +POvIUmay;15640,78105 +AWJqZmNV;46968,69002 +ETVJDaZw;70455,65377 +YDyKNRXu;85066,26996 +HhMiPDJc;83303,60461 +YYwdnKQJ;78772,21599 +qxhaSNhy;5304,63044 +BWkOtiOR;62466,67960 +SzQhfSPZ;1085,29502 +VgYIQOPc;84852,58595 +FCTNwwpw;14946,62315 +AeJQHIbs;77470,27575 +dyAzUZZW;68156,22541 +cqoMoIiw;51187,23714 +XagJGsgG;49015,2357 +OhorLMHn;72707,69761 +ZqsqgtUS;58738,51702 +SAmtONmc;28267,54448 +aMFazbwt;23740,78499 +GRgoDkdE;40575,13922 +GxisFwdC;16204,33156 +EAOyiwTi;10155,39725 +frxqiDGX;76516,27126 +YcSTcxYN;11314,33502 +Gyzdnfyf;26275,62857 +ywaeMfVI;24060,1922 +TjeLUvRU;1627,87308 +GcBvStEy;70954,62235 +PSXvmrwO;9284,76561 +vorzwjPx;2664,70751 +DyBjNFUm;35784,4467 +QrpxZFeQ;64636,74101 +jUqHccKF;71730,8183 +vRKKkPBM;69260,71327 +fuitrvWn;24994,68034 +snZIXcEb;44654,30924 +EPbokyPh;6409,10271 +yLjigQUw;27247,66673 +pnEAAuUu;74589,32931 +XfWWyFSX;21804,7129 +jAdnVhDi;67226,72217 +qbJDzvdE;65110,72066 +mXDYUzUU;22344,62123 +juLSHtJD;2437,52271 +sxYlsuDW;55911,89800 +IwVRHIMD;32451,86478 +EqnZyLTg;69157,82311 +cPhMfkEB;32883,10938 +wsTSaVoL;72783,68895 +NhKvAGBY;81919,58125 +MVrpoQjB;54421,27487 +EAgBajqu;32593,84388 +OYhytTIY;51583,56332 +IILFRqXf;21059,54278 +JGLAIOYg;62865,38627 +CtCsHShH;28944,31349 +xjwXbFMJ;72022,27110 +hAUaHKTN;86762,73774 +VnIFQbLd;29003,55186 +oZKJQaLK;58396,76174 +hiQVAYXf;65541,28264 +ceqaJguI;4748,89059 +PNcRgAZE;41475,8680 +MbOLkLXA;46572,33480 +EPDKDDVv;12531,2607 +zloJIGeK;31088,49463 +UurBtvFR;2285,32017 +wuJYxLad;53345,65670 +YvExiaII;47415,13237 +lbdBDGeH;22073,26494 +UTjWjTlk;70013,18815 +tukemoRL;17931,74074 +iArDrRWm;40553,35090 +EjzssCNo;48836,88638 +pCCIKXvO;14173,79999 +vxiKGqYC;36996,71968 +CfrTBEVH;19300,3783 +kftliaMy;60562,67371 +CZJXYCiu;89923,29416 +plBEkaQx;52427,10750 +MFDqbhsQ;88879,68268 +lQSYlTzU;65959,73019 +RywPCRNQ;74458,78099 +wuJdeDdX;6812,70133 +RtTznyWu;52683,19012 +cvnpGOFA;64950,65107 +MIblzDwD;12254,51833 +wxrSDaxo;15806,9606 +cACEdIff;55759,24778 +XhPzSApd;34552,78282 +HryAGALc;71007,26428 +wbooWjJT;30589,37255 +QHwagWTl;22792,10122 +mzdbZxwH;57656,27607 +pswZasxe;5648,89166 +BgdoMkod;6507,56328 +BZZdGaEx;43368,41279 +xtEnhloi;29195,22436 +qJMhKYKb;9000,70872 +bavqPwcz;69659,58514 +plUxgSgz;6703,24654 +oDSFLjJI;41896,8335 +vkDMYbWm;80336,15373 +SBiDMVYn;8947,36588 +IWbfNRFP;3605,42233 +oqotPlpe;44531,62918 +ZidGxgYv;56195,74092 +qgXKzMtp;68429,25720 +YRPYuXty;66986,31881 +WhrXKKzn;72633,1765 +UahNbMNd;63715,17804 +dZCSIbVl;87597,25271 +jasPbAan;21136,23145 +EAVbIdco;41564,53074 +HncMePFL;78419,22413 +UZijLbDD;81711,52026 +omyExiAM;14049,10490 +zxGlJfim;36801,16146 +YHMxhVKn;34162,45492 +mjWShWsg;64477,20531 +fiVhgheQ;6261,2133 +oIVxPojK;37673,65012 +TzupmktU;47125,82131 +uYJChRTp;27129,74587 +cQPNHlwH;64760,63989 +CzMPEefn;64238,1610 +wPEJWRcS;66773,46350 +PnbpMABm;44382,2495 +vpESfzZg;46358,87493 +xuWGijGk;21105,84716 +OdCTTxlM;26603,69643 +FLdquxJo;59919,1460 +clmCXizL;43218,63344 +kESxKwth;31018,7108 +TDeOFIWO;55059,52777 +FRAfWoxA;37979,61473 +wakLwOKX;34084,70188 +GoHdPfkc;83507,46617 +LrQmNQtS;35344,19633 +qWXfIUNI;79297,79255 +SdpgwfFL;45684,30776 +RFvElQUc;27601,68312 +wntRuvYF;50923,18154 +bXcBlMWv;2532,53081 +UdZyDvgA;50123,9531 +aOqizLBr;47416,41526 +WjzDclgp;1188,60394 +uUkmDFlk;88950,22365 +VECNTusB;87414,52460 +GAhJqbvT;84914,33155 +FolYOQXG;19976,65586 +HTbfZUOP;69566,32002 +DmshOAqP;11457,84384 +GylErYjo;82136,43151 +hcXCfjBn;58355,57964 +EjWkyrWj;61113,80885 +MnkStphN;43847,68859 +dfiFnAgZ;30795,18143 +lzLJTzuw;36022,9070 +ZBmMwvZt;67439,38176 +JebiNiQm;55286,13419 +WDPlKESN;77172,69029 +vbrykGmx;46947,6751 +PJOkYOWj;13890,19847 +PhNAYeKy;69292,15333 +dMiYNfoj;47619,12507 +LFYSMQyx;52891,76777 +bftgqozA;26040,39476 +LylUBGwU;8396,19524 +OwQOVDID;88542,67414 +EiNtbwuR;43116,17520 +bPuHaSDa;14161,42064 +kQpTqyPj;26950,11599 +AkfgUkwH;41698,5125 +lYUgMyPx;40710,1741 +tPVsLANN;38600,61081 +nGGRNxAK;46631,76683 +xaVFAaCC;8467,9898 +TVsbiHfR;46651,29807 +ApSHDTBh;73424,45685 +lxjuaxMX;8473,78422 +IaPhnzdb;80470,22004 +bOiKWnSG;27490,47975 +CrIeBgnu;52826,11267 +HQExoYuD;74243,83977 +GeOqcXnj;4520,70285 +PCQgtCHb;2168,38908 +KCWLwKSV;80843,26975 +iBigjErl;49342,49005 +ftyGXVkV;57629,63037 +dnWMXOpw;55350,88282 +EXjeFouR;65805,2944 +sUTkquma;59909,57633 +IsFbiqVy;72577,51576 +agXEsFxW;68223,23095 +FZqFHhiP;51142,83753 +wKpAUZaZ;2656,87121 +fbVgysXm;39009,78173 +PuMrZJpP;26733,9910 +NyWHUBJx;4790,44014 +VZcVWsAM;27064,65126 +pTyIaYhr;78419,77706 +uReBvtgb;17086,76966 +ijVIhFfk;18312,60791 +PaMYGWxG;46159,56638 +KeeOgxWL;67841,69109 +GZGnzpms;69330,24737 +ZPXePzZG;89448,56080 +ndMObxsN;43265,12885 +NvGgioKy;30547,17025 +LWzrcERB;68468,79853 +plJINgpD;16104,33761 +DMycUjqg;55445,39758 +wzUXiQaY;67036,82007 +IXfjshSy;59192,40121 +ZaNECXDn;21377,5802 +TpfNWnSW;5871,13712 +EvYoFWYU;49116,56614 +dDVfqZgj;11108,46122 +LhdedXqz;31108,65746 +DzIscXGk;39508,53294 +wKNddkRZ;20759,46448 +RLUisaCj;34206,62987 +pLoLdDJG;22590,64930 +jXnjnoqw;71828,21548 +rbDlxHhN;48193,83195 +hxKoDgem;34268,66566 +MlgJlbSc;32120,73585 +uCDUiJUe;35243,39344 +PXDRgnIJ;89268,69550 +MSLrSRJN;77277,41539 +GWxJInzU;25367,40789 +QbzCIPRc;42972,31074 +lzAqonPw;69938,69545 +AumsqUVa;52159,89690 +ZZSEQaSU;40508,13621 +HjmuzXNn;67209,4524 +MEPtmPNe;2209,72717 +NsDibCyw;69284,7157 +LyBVkjWp;7355,42088 +rGdJyWGL;71571,87141 +zdkKpUxu;10065,31873 +SDNDuSkQ;11076,79984 +tWAWDeCS;80191,22071 +WgmRfQHq;54118,38990 +DsBsndWg;36924,33476 +LQeugaAY;16647,78316 +UpaVbEtm;78362,82746 +XJWglEjj;19340,84615 +bkkdRQop;15828,54250 +WZrVEhRS;26675,88823 +fkISQjio;57566,24940 +lQxXXoIu;65948,69881 +SpUVUfjz;62248,68747 +ChEvljPV;78562,87166 +YNKDrdJw;77723,36897 +tjzrhaoC;51902,58971 +LdopvNgM;6896,51798 +aNKboJRh;41709,21095 +HTHBVyUP;27754,60394 +YElLPwAV;80573,34974 +GdFFpQgo;60080,85564 +bCCxnSai;19185,34820 +mypTbTQM;62799,41118 +ABdNNuzm;77677,42138 +wEwANpgi;37199,56082 +AWsCGOXn;32357,42883 +tnwEYQpc;11924,60194 +EFiTrgVr;22362,27798 +WUcRpICD;61125,5686 +zWyLESuD;81494,82490 +BEKSyFev;67204,10654 +BxcbioQv;75110,42174 +bIyMDotu;13199,74333 +yrujVFbB;19676,60006 +ISQOdRPw;76474,45583 +evWTHbbu;32232,5070 +kkWQbAVM;33503,43757 +yjVyAwbO;78647,42200 +ijxmoYOC;80860,70547 +suropmzL;55827,21475 +usOmNOkG;76312,1766 +EmlrooWf;6974,77378 +HzqPHOXj;17875,9785 +mSUNxoEe;38241,41362 +rQzhEIJu;18227,18044 +fSQjpSRh;48751,86807 +zVkHQJJG;33975,62636 +aTUcszFX;82032,63860 +hYVWnJxM;26019,14075 +DfrByTJX;78185,26201 +WgKVOHES;36403,82932 +GxZTjyyO;10027,45056 +XiunKUll;66409,8732 +DAuyMeIV;47796,7461 +fYCqFhOi;71924,41209 +WcehkQrK;57064,27824 +PWLQBTJu;72469,79725 +LbLZihsv;29604,7189 +hTUJewkZ;63039,45678 +kbfqsBXx;19388,82561 +kMWMiAiH;4392,28029 +igbWEVLG;1647,8590 +wunzxKBl;78962,27149 +SpFgYUZn;67046,2235 +rHhhvZKM;40345,19358 +EefXjUtK;3263,11822 +tVKXteEa;86781,9518 +AdvmlIDZ;11396,60259 +kwJmGOgc;18036,58998 +kCkGCeDM;67424,76779 +cGgCUtEu;16449,20986 +axHZVxkL;39430,42809 +YdxroVOC;66203,31722 +YgTPNDZE;13765,29433 +cHDATjZs;85306,1088 +UtEGQNCQ;42349,56414 +dzXQWqan;49211,62000 +sgdVMTMs;84909,66891 +PApDADwb;3111,51416 +AcpaaDFf;72634,49342 +QlDfYjgs;88399,62256 +aHNLcCsh;26964,62786 +seHXcxZg;56040,79958 +zzbsTnUX;28118,42494 +OehyCzXm;10691,28768 +ZypYBeky;12551,5653 +qHzzRZEA;43781,40938 +BUkaFATz;75469,15001 +MOcCstSy;39171,10209 +MdFRnvVe;51840,65112 +vAwokcMt;20821,52206 +RLwuKUuP;71709,8299 +UXDSEaZE;30132,82426 +buknBcoL;12027,66909 +JljsajkV;12847,16970 +uFZKhQON;4438,83041 +zviMbpJD;75590,45230 +ZgcXxILR;85090,57185 +beXwhyjc;26710,45733 +okrFquWQ;12342,39410 +WtogmTpq;2628,12391 +NNHcrDWX;14231,29166 +LBvnhzvf;1623,82005 +xLEOMeBy;13440,59291 +XgyhQVNF;18156,32001 +SFtNLXBe;9364,65743 +RPxGAEhy;6884,26550 +SRgkqGzj;44722,39271 +BpWDhpSJ;26039,1264 +dmzIwQLv;46647,44975 +JqjyhGqB;25475,9878 +VhGvmmaQ;65363,56025 +wrAlSYxa;51229,70054 +KyWEpRtC;9758,39204 +KuXWNOpE;85030,3443 +IUzCwTtd;3641,46679 +GlvlsRvf;2808,32579 +inUfOssb;76591,88553 +SIwJKGgU;72846,28586 +soXlshdQ;1855,77173 +KMPqxfnx;35211,68738 +UoPnaNtY;67819,84967 +Aibnbfgj;34461,41054 +TSVXGOtu;56530,4747 +QiXnbejC;42928,4844 +CmiwNiVD;82369,66172 +rWASiWVE;12842,64835 +xUjJPxDg;17006,85291 +ETDdgrUS;42447,77057 +sQmSzBeB;77214,29408 +cJdhLvda;46457,32885 +cFJfcotq;42372,34941 +lEAfiGKN;17969,26358 +HRBzWmKJ;64751,19466 +gsxdKyAU;83496,8848 +foXUuzGe;66117,70548 +ZKxGFTnz;62676,41271 +EnPHnEHx;27082,28135 +XsMKnERI;78964,36286 +qayvqUEI;80856,35756 +oHcnSzBB;50429,19814 +XFAgOCiN;13988,44636 +BDHKqFEU;26733,85772 +hGpjAVSs;63421,81270 +jAFjNwdH;83521,23986 +TGHZczEi;67536,55133 +PxESHxif;85994,57272 +vPQuOUPT;32135,68416 +TryTtfhX;39447,46997 +NUyTUwHg;56026,46274 +DeUzwUdS;83175,50652 +fmNoXfEn;44795,83417 +HyMzTjEm;30787,38929 +ZstGmThc;12912,23579 +gdleUHQy;48374,15729 +vuuSheHc;25723,12394 +cHmJswfK;8738,30749 +fuXKmNYK;61288,64661 +wUACYGPY;17219,15045 +dkNaXZRi;77837,47055 +dzYgSUrp;85329,56029 +UCOPwMzJ;76074,86535 +cRIlHGmm;41657,10889 +PFVcYfAW;17846,39807 +siHjxSzf;34799,72824 +klEueeuY;68081,41088 +fANSqHmc;34396,77124 +ZkCDeXnb;59657,71220 +TecLhkNU;42868,35524 +iLhWdzFF;56978,8719 +YDSYSxpw;89184,1996 +RKwFPLXw;8298,81362 +ZJIbRSBe;54369,30390 +ThruTpUg;85317,47087 +tONJxtky;75444,39373 +WRiNgyDQ;33004,45489 +vlpcQctr;63128,83243 +GoyeaPrL;64581,53511 +pBpXxQeZ;58727,31973 +SbLUxaOz;20394,82639 +ntFZkcME;8424,60710 +FTdGNZvf;85729,86139 +kdcNIABH;76598,89856 +aewDgbMv;50903,25155 +OlWqzoNC;19002,85886 +WjwNLKJQ;32256,41604 +IAODWupk;85349,56007 +LoQJaKgQ;83839,54246 +EnyvqRga;5090,88980 +QQbWzxZS;81490,49053 +tPeBTvAN;33479,74193 +cwCTuivM;45147,20997 +WZebODAD;34604,74361 +SJOWkFGa;40459,29910 +stoBrvlF;85130,76378 +Jhnoczys;23963,65052 +jDZtIUCS;73495,9884 +bhePLFHN;33866,13531 +xDwykmfv;79864,88852 +eJFUHRYY;18525,21805 +onyobSpL;71351,72040 +XbNxExuS;3472,28976 +FdBqujZO;82628,71569 +BuzFOnwA;32556,67419 +vdOGGxKC;17896,19369 +UWjicAHQ;3348,25339 +HPgVFsNI;87009,47877 +xOvQZHEo;33249,59737 +rlkvchtU;7295,87405 +PYWrnliS;23479,72653 +sjwYIQYK;81707,50794 +ApkEIvPu;31980,33230 +VFHoNziL;26134,60946 +QWeVHVsg;76011,75448 +ZYAbScgp;59653,16648 +RJMjDYrZ;67461,58444 +qDRjjURK;23374,1449 +SQIIGQSz;30606,64622 +UZSbAqHj;5452,23382 +sgNVtOfH;30715,18590 +FsFnoVwd;50044,3657 +GmRAUZaB;45899,86715 +HxDNZhFi;12552,88930 +jQaFZtRG;36104,39088 +snaMVUNr;73915,5047 +UIjQeRXS;16686,1650 +PflhoLdO;17912,24708 +ommoEwMW;82286,34922 +vRUBlKiL;11622,60032 +PnJmAPix;21544,63417 +ESIBmLHF;67593,49640 +FliowBBy;75960,58741 +jWkhlFGN;15243,55289 +rXbHFPZk;69671,5138 +SBvErZRW;87640,27859 +zwIIopUY;7733,84086 +TFRJZvsy;29020,65967 +tBgpXjRW;20419,51753 +rVWsyBEt;63350,12303 +MqANILgT;69890,79079 +QoUhlRXC;71086,73901 +EGmtlBrd;45256,8736 +tkgWpsBe;89690,33613 +siZJcRNs;52659,49065 +PMCxHcsQ;20455,69332 +zbGiJjnn;56389,5497 +kVzGywDn;23099,58678 +TYhVRGRV;18395,45819 +FUMPSFPN;42702,6421 +Uzlnifif;50561,89294 +feZSTpcq;34429,7040 +lmmPlHAN;26927,7048 +nKTLdjlt;70982,55946 +ETCReZRc;21743,62603 +ZuasCETW;89697,30686 +PmYyAPOJ;42087,18683 +BzExEgdO;26124,73460 +XywHtlIo;72543,31341 +jKgPplfs;53373,52261 +fSKkVkwh;82922,16996 +OkXrDbzw;67636,36170 +fjrrVwVD;41256,78762 +epiHIMle;42854,4241 +LeIlsOYl;85030,4446 +tZLkfCUQ;77066,49065 +faqDlgye;80628,18348 +GslMheCP;76292,76113 +vxUuZoPq;43765,67257 +SFwJZBtr;79574,19858 +kXroGPKQ;41381,52864 +ikKSPfPz;39282,74283 +YmXiOCuq;71517,56641 +YrXcziTJ;84739,43565 +oQZboIDY;25058,26494 +raLttgHo;60669,44720 +rjPoOuRJ;81854,36902 +cvLigfvQ;85203,8356 +YrbnRbco;89007,83202 +oLmTuEXz;47633,76885 +ZOLGsXKG;86604,52766 +rhEJBamV;71452,16618 +MzrUWxYS;69737,42696 +iuAINpeP;50916,65196 +dTpahlCH;20469,57480 +AuyCCozk;33855,19908 +XGqbKitk;39381,67675 +lMIQerdb;39195,85098 +PMmAxiJN;81826,72838 +KaDRQQIc;11352,13721 +ueSllTaf;17189,18778 +RKrwsByS;70020,38864 +USisHxqF;9156,65544 +dMiXdCHK;84291,58127 +jDbDOFxN;9873,40856 +LBkDRjlR;66289,15117 +pbguvPgx;37623,12355 +AOWFuxhX;15080,48549 +ntaCWmeG;15879,50865 +KARONNuY;1691,13938 +IbEovUym;74537,56089 +tCxGLOIh;31462,40064 +xkHHjIsf;35021,65965 +vugwCyfb;84997,9756 +dQkddywx;23542,39304 +sxIVJRqH;35127,23090 +FnBgxRmz;62385,12808 +PANkANqj;25722,6645 +JNSZSMGx;37341,43313 +CCKJorpG;74527,66498 +eOOHILnp;38094,23382 +SJIsmRef;74549,67990 +ngYHEMtG;89752,49227 +lvnjsLax;41897,41140 +GJuSYERF;14753,35478 +qrrVIpoX;83905,3817 +IoPqmXpj;19443,74693 +ktKLZoqv;39411,41495 +TMIIBFms;65884,3182 +hWphRkUr;38321,70847 +DqARBkpQ;30460,27482 +OKvDduPC;24626,51008 +gfqBOWnf;23400,70651 +tnkKmWCR;82546,13614 +gPyuQRhK;83134,89446 +SHBVUUPp;27843,52348 +RwHEEyQm;15825,60413 +tRglmGyG;62108,75194 +lJYvqVDR;11729,31219 +HcSJOXql;59480,17659 +QmJMijlS;33242,80937 +flFvATCy;40839,79979 +dEDxWwpz;34827,55693 +LhIUwQwu;36882,75144 +aFDhkAFc;85567,11370 +lWVTUfjS;5754,78873 +iZIGIqTG;53876,4097 +tmPqvNYL;85909,33173 +TvmkoSKg;69085,6847 +RZIfXnnP;80613,80195 +vZmhkTWR;33196,17337 +NNLWNmij;87457,11530 +uMVitQBV;78824,87590 +dArCvCrd;89599,77776 +vZKTMzYU;72511,83543 +IRkgjgst;6545,30473 +izpgmjeE;2533,33688 +UKYiHQJt;89585,45764 +TlDuWWav;27619,31031 +MbmIyTvG;64299,72649 +vLkKJWUW;83467,50803 +kFURfBYs;57816,50319 +rQJTjqfs;31011,13066 +TgKsKhAJ;1118,69020 +XuoicCgz;1507,24005 +YvWAQHlz;32418,46990 +tdlQuROn;31738,27281 +MJrRxXZk;42775,5428 +DYKWHPZt;78839,42966 +lzGAVBoO;64456,45370 +mLJglplD;41786,84440 +VULajWqv;68898,72625 +bhTmxKSH;49176,56894 +vxgUlqfS;52752,12688 +wyZUbDOT;30131,57292 +cyWIpvvH;52706,79992 +ODYfblWz;46532,82725 +JTBQoCta;42143,30858 +vbacrrTl;84410,9915 +AStuoFKk;80298,1844 +YZOZoazN;6510,64292 +LYDwyfMW;89275,66126 +bLvmfKdO;23021,23489 +vJDjweDx;43365,58454 +McISGaTe;42018,55324 +FDkqFbnZ;66763,42044 +szmjeTpF;18810,67792 +hWTESLoa;21906,62160 +JAVAzSfz;84218,63809 +WQtkcXcV;69005,71560 +qlUaMqaE;47160,73738 +nJPQnQEZ;36997,37282 +eRWGYscP;68342,1226 +ejKCSMZn;3653,27849 +xpPGCfeW;30259,53984 +SUvDzpze;68081,80235 +CWHbKOUV;76358,17789 +unDyIuPP;29775,39775 +cInPuyWT;63544,15739 +BAPiJXYO;80605,76105 +XSNonBMZ;54502,66320 +ctBHRrQj;37068,65416 +PSFHGUZe;59057,32574 +LAvnnNip;86677,81348 +MhfEVcEl;7035,44110 +pwunMuxZ;46004,18885 +KBVewXAr;77720,75037 +lwpRbFUv;26789,14438 +JxrtSOxs;15205,64712 +AePrmtQd;5771,20111 +QUqamsZz;77791,74164 +zvAUrbqv;4956,29235 +ansMEMQP;87150,64157 +dUhlKMpw;63177,28029 +lLDZxnSg;81277,75345 +VzWmCxJf;20019,78506 +fMLGYqpw;22895,8183 +ybLOFADU;78137,74077 +kmpDgoGa;81920,69528 +kLWEoRdH;45304,70827 +xbLIehKb;22155,22087 +MlzILIPM;60075,41214 +SQRBTUqQ;25643,79165 +lUpndLzy;49639,51754 +ZbnhqqaR;49446,40888 +znoITUQa;57462,25983 +twHtnJvB;79079,8984 +zDMpMfBL;72214,69955 +sMcxrtgE;20551,77976 +UOnbIBvQ;41083,63343 +FltszyhO;83927,50134 +UVmFuEfY;40359,71873 +cLUkegmD;24264,13155 +jwGvQrvU;36741,68352 +ANytXtAl;87954,29323 +QhSAYdWB;87520,39573 +EDHieWZm;69111,61071 +TlFTSsTZ;75129,78653 +fPfaaIOK;41347,20714 +GFKoLcbQ;44692,18455 +DSujxTvu;17100,26205 +ezqUhoWO;68459,86440 +eAEZSWjr;27712,79224 +wCjdGbVf;62093,81222 +VXElCjLm;15111,41430 +GYSigBZB;54273,12509 +wBlqBPja;48204,55171 +YyiKmsjO;15740,23328 +pYGCpuMJ;47445,36125 +jKrcNvqy;10243,4245 +PUJvnYtS;38799,25727 +YprGWfBf;14263,83668 +SylyUarw;45849,34399 +prbSrPIW;50835,57254 +MaTfpEik;27415,69645 +YydewKJC;35273,18603 +LxuDZiXo;1070,72924 +InrUfkpQ;77495,80636 +pbDQZKXU;48281,25877 +hMEASLAB;27890,82137 +ejXTGBiu;87967,61910 +BysOOweV;64118,70906 +ngweZVQQ;39365,81963 +LsfeopfJ;56271,32235 +MVpoqsLx;72712,48131 +OmwUCDnL;68333,47902 +LalzpxiM;42144,65495 +sfaSZfPv;46059,66342 +aKWQHyCC;29726,12346 +OoTHonrA;69324,58447 +GAaUcMvX;66219,50653 +cttNRKmB;77707,79811 +fuYrTNZd;31823,37231 +ifJkTwdI;33742,38955 +sPGupMSf;73595,3473 +BuJXZNBp;83619,66014 +GNYWzeLy;31125,71569 +UrynhtnT;40561,67705 +EFOknsGE;57782,36762 +vQerpsXk;8121,79205 +yDOyCBRt;76354,41800 +RcJnHVvD;81872,69229 +ZKVjSAIu;79069,45998 +eNqulCQf;31417,67244 +FsOVPKPS;11710,89600 +mUKjbBUc;76137,60493 +OnnMBZkO;38246,57400 +EWMQtGPf;15502,18646 +RVCaGqZh;10081,54430 +KdSKSngK;8997,87182 +GDuKHkZZ;30938,10806 +ISyEPgrZ;41254,31447 +dbCIoGaO;2781,31021 +YspJuvCW;3565,14274 +bmYhnRHj;68158,57491 +opSSDCGE;68079,65519 +xuxjuvCg;33486,14455 +yrOFvTbQ;19699,15811 +icxzIFiA;84776,24243 +inSnvHpR;49536,12748 +XeNxvYZf;68227,28376 +UdOKDxdK;73189,89970 +qrGJcZZW;56699,30211 +xJFlPwDK;7905,27237 +QZMjRQoN;19291,66000 +LCctlsas;31918,85478 +hDxpYexy;24885,6428 +Wodmeswh;28338,45718 +gLplnqqN;28765,13607 +rElXqCLf;42345,64611 +eFlviYQD;58741,19729 +bBkVcuTI;57637,42451 +UCaMwPLV;48326,54763 +BlPRFtZp;54737,53906 +zoyKTyIa;64425,16564 +GdRMGqEp;36192,14108 +gGprBuZK;59636,11032 +WrkfxgOz;59460,40499 +rurqmtZx;35628,59581 +JAgQKuuk;73108,1069 +TKqVZUgP;22847,58773 +XzssBIUl;35104,44091 +xdFpyHsb;77890,39860 +OHcgZHYe;80554,73241 +BedVKxnd;61103,29407 +IrGzTfjX;74143,52005 +VaWkTJsZ;86056,3133 +GOngjNDs;34749,11312 +rGUBYANv;19473,13540 +KXylUYAM;52364,45213 +QZGGHrSw;40605,84793 +EpBLcTzx;56391,71412 +nQVVSdpJ;20713,31156 +GsSNoHsl;64555,57386 +WBgkRzmd;86505,46651 +aqsCNJoG;24383,17931 +kGXLqDKK;76033,77341 +EYDEELKa;75285,32092 +CqcslQkh;35598,85353 +FqIFTWHJ;12504,4313 +frtLjCTl;26247,48576 +NHijFiim;82679,21557 +CEawzHWn;78327,72824 +tTghRtwt;46796,80999 +FJRlmnsN;65551,49005 +ioSmzcjM;50541,6626 +CUaZYZGX;64536,36312 +LUdWuBmN;51968,40341 +CVJbYQQF;39891,36024 +uuIgAllT;80818,49306 +pgmxOOCv;14717,25182 +QnfiJLZe;14596,44256 +FejIwjjg;41313,72496 +jtpZYKVk;37675,84568 +PbHOfDWp;13085,32406 +riVRLwuV;84432,69554 +wpCwZqfc;79581,72804 +VAMZrvPs;4806,44151 +urqGIwFU;75841,78879 +kKXTxRhl;85137,67939 +IbkFNFjc;44250,67693 +jixkcfKt;4099,41058 +XPlrFBeS;4590,28423 +LjuUzeMW;33914,15255 +tzlJmkaD;22169,16674 +ibaOYmpj;37102,50691 +NGgpKmMb;44689,13543 +deoAscIX;63299,22357 +ANXpWJvO;38058,34087 +fcZjwiTw;75159,62053 +yzpblcDO;43461,73242 +fgwmulhE;25723,8981 +BdnvFDUW;34476,6792 +nqzCTZeM;27998,34673 +dMXphrCG;72795,89758 +tjufOCtp;25940,57956 +DZUcvXYT;41509,2004 +KulPdiwn;35473,1554 +KNGSuaFL;78518,86029 +aMcvKWcA;15224,71201 +meZmgMLN;47941,31186 +PCLGzLEQ;81221,69861 +fBcBBvXe;47847,54579 +NZVvvVjz;62967,4545 +HplohJKa;71082,57974 +mFubzuAg;44354,84771 +gLgveUyV;29844,55662 +KuOrIjhg;30773,8452 +DPYWnVEu;72445,45957 +QBnNoLIS;57652,72830 +dRZaQcyX;76953,3049 +KrVfBTlH;70629,71979 +fApHHUdW;33249,58192 +BVTZAAKf;28873,83589 +GIOjDvrm;42826,87873 +fSKLgrRl;33649,26328 +buMiadvI;45321,69143 +ZBYOGvGs;48864,84172 +FHkmIpMc;35081,41824 +QwlbksiN;79719,58647 +ZlDbOMgO;17868,15978 +zRVqUQql;37470,45806 +CwmwqzKa;34562,77949 +ppvQRgpN;83295,89775 +efSmvmGn;68267,9218 +hXrfKrus;10070,24432 +bvXrvYVA;6853,86470 +UsHlsFOb;78783,33060 +wJhIHbTk;89493,11049 +aDAVnJEc;23677,71144 +BshPMWNR;42464,17640 +grXqkCDD;71303,27480 +WYHkaTrq;72056,18341 +aNowSQRp;5077,52359 +hbZdJMoj;32483,40205 +YbbKtErl;15252,58456 +pasRrrvB;15372,13997 +hNrSAIpK;58247,66460 +TNjEHuVt;67332,63514 +nhUqqIkS;48731,66635 +uNvYvcAL;68693,57622 +ZGVrAseN;74624,75910 +mmYtVbkx;19771,22840 +KIrvBVkx;77667,28084 +PQcvVCrU;32316,73747 +YYeOEtxY;4554,34054 +jxBAYyVy;6259,19288 +oLjqqtEk;85919,52727 +ItBGvcLb;4422,50377 +gsBmIBKC;1215,11876 +ayckMkRD;43375,61950 +QdeeSzER;55281,21991 +dzzVUWyl;85546,87673 +kciKzZfs;56015,82657 +ovKLVvvD;15494,4789 +JmvCbYfJ;53690,3349 +TWWOWvFh;35053,9411 +pJvsYIlK;37555,21033 +HbrkKJrc;51194,66541 +gveSaKLL;86673,16579 +xEKAbsVi;47686,56984 +KQNYyKNu;56814,50741 +Cscjhmmu;28239,75206 +DnCJDGPU;3974,2911 +JqPlvtSI;63168,34753 +BDETngmu;72305,87489 +GUGgmvHk;16298,45269 +sFlZfsXt;4491,23155 +ZVjlRVxN;26968,3758 +MiShdQmb;43027,54514 +stHUVzHX;47717,61021 +QJFPoBvD;35894,63739 +sgNHyNrR;2547,10322 +KTGKKNKp;8762,85579 +wEUbHCdR;20877,45220 +hsqQPNqn;55410,67524 +lSPWnTsQ;71367,4242 +sgQnoLGy;28182,37649 +TXNlXTLb;21889,59635 +ApLCeeUK;49698,68251 +svEHyTkq;74789,13932 +xpPcnHdm;33652,50800 +vsqOdZdh;61069,37624 +cSNuDeaH;5670,14304 +lSOzqgPW;44748,23215 +lZUszIVH;41787,1214 +SJhCZbCw;74875,15812 +vdyjqJkS;53848,4765 +LUFyYntn;80326,67682 +sRUCPrsX;37613,9753 +gwBTyMcl;73643,35567 +DimyfsDY;71187,83042 +QbyffTpi;80315,79570 +HqRslJkZ;62919,74150 +QvNNEArF;71739,40063 +qwRNsDpy;87946,64660 +SnZApmhh;66256,42363 +HXTBaLnO;33804,12426 +EqeFuIsy;85912,6001 +wgLWsgBC;25954,85998 +MbllVqvh;16751,17260 +VbEXVNuP;33336,67639 +XAWGcuTe;2888,80484 +MolqqcWG;54825,84399 +XhsIkzYs;34906,24922 +QLvUIhTb;46901,11040 +FuCinTTt;50902,34938 +CiwiCqCu;30949,64202 +BeZLpaGU;70608,6281 +kbiMieoG;63887,47464 +elhIbFsQ;67130,82665 +OEzPtIfu;47267,66152 +GQKUNOob;56632,42671 +gyCROSkg;58127,7111 +jHIqWhmz;79166,38494 +oaFgFkyq;23413,74475 +uzeSuYFc;10940,28453 +qGaMlsXx;89993,85786 +frPPxTOh;14894,22678 +JldImgFz;57223,7265 +iQCSiIgf;9950,2375 +KYaVzrTB;78075,84782 +XqSsJPsx;38822,61904 +apeAznDE;3462,74986 +DPsXuzEp;50844,10487 +uVnUxmJH;33415,34433 +THwctCtl;75292,86208 +HaQxoWXq;79972,11928 +QMsFMubY;88343,9396 +ZYLYXodh;11826,83176 +amKOCGss;13032,43081 +qKomCGzj;62123,72943 +jCjFTSTC;38303,88869 +QLwSfVLN;66139,84891 +xZrqoIeo;76965,28130 +KzrEQGjX;45652,34505 +TlkcjWkc;68307,17469 +DYRmQJFl;82610,56417 +BxTpLrNQ;19464,64605 +EXckNYQr;31621,31298 +JPugqAIZ;45638,85412 +prvaRPSQ;66727,75949 +tCUWJQWs;35185,1338 +zoePXjBc;54595,61582 +DSBICbZC;67192,11086 +XHsmrYVZ;21891,36734 +lhDUdFEs;83609,20117 +beIjJros;3985,39279 +tjioqfOu;26003,85257 +annjDNWa;60578,23445 +RhvNAEbN;19483,88144 +BViIfnan;67542,28546 +cWNsgHts;78367,3798 +PBogcntH;16565,38748 +BLyjBsuu;42060,68539 +ECVUCgll;84552,59055 +LbUygUZG;49247,41464 +AfpCTyxC;78779,30608 +EyuYVmvX;81157,16065 +uYaAfMFU;19756,66318 +VuiDiVos;38533,6614 +BzWNqCMQ;18051,54504 +daVOZCeS;34749,68853 +yInZuEvL;39197,54105 +rttVoJGw;8579,65555 +NgROXCBZ;27868,70751 +uaYiYBch;4124,61421 +XLefcCCH;10671,42849 +FCzqYsFq;75612,83091 +tvoXjujJ;28396,33654 +xrCEoUFj;40680,17226 +oLRdOXKj;42860,76226 +toJDwvcK;51182,30493 +yzrDKrKW;76667,12268 +eUGtTvMo;78880,20508 +mOaSUJXT;51201,20563 +xdstBRbN;60765,52627 +wfLQZzBu;24659,76285 +eXvOgmuT;12560,15437 +jTwOZhrd;53893,49207 +NVULSQrC;38404,61035 +bYzkKDHh;76713,80551 +LThpiSrj;17898,43795 +kFDRfRLH;39057,52311 +zyJmrUfH;23369,51933 +QRUTnVOx;62542,57592 +GjWNvzsL;79715,21475 +ndhHZlsu;80875,68404 +VTOUcFYa;63073,41366 +fXRtPjYa;62641,65533 +sDbeeszl;19158,83565 +URRRaSrx;7097,76041 +MdYNaSke;44572,58478 +rpRYSpJu;84147,80819 +oEVNqmDp;61585,72646 +RdtWZwBv;45708,36214 +MibxAeLq;1268,24517 +jYnVLcWq;64811,46653 +YuHbtaCh;85381,57700 +AfugdVCR;82122,39410 +tEUzhuDt;23726,78905 +EpDxPiFV;25792,46070 +iBcmtpPs;27728,82315 +sZnIFACG;14756,21598 +UtcobmbD;44242,85268 +cXKkEzJl;17844,9025 +tjntbhpv;14836,45617 +iEthuHlv;67094,63728 +iPwvVAMe;10809,69279 +tEBFLgLL;65108,15399 +ntjBXKLk;50458,21109 +fmVMBbyS;86325,78904 +gzJODMdp;79312,39075 +jgcPZmZJ;22379,35985 +PmCfrrKE;12795,65356 +uzKOaGiP;44727,86487 +xPGfQuJu;57341,19063 +YiYgbKcE;70949,83818 +TpybzSzY;2745,24507 +vpAwXRFo;33132,53724 +HzVqpzFo;34399,80306 +WHttAcVQ;19973,62898 +pynsKSzX;78015,3841 +rpGuuStz;19387,26429 +PVKNayzL;15259,83144 +yaakCYfw;15342,40616 +wlqCuJlA;18719,30686 +eFSJaAzU;23615,77469 +RVvjeqss;41704,66972 +bWGoqEFy;22048,74405 +pHyGjmUF;49215,15708 +TAsuVGFf;74289,43215 +LffCEmYZ;28072,21769 +cgbkixPN;69663,71139 +pzZmlYPa;6615,29657 +OzqYgCHT;73347,16769 +KJCgSllu;45133,27972 +TESKmWnv;61929,5985 +tZTaCjmk;8454,38816 +OboZFmfk;61491,26958 +ZwvtqHVh;34821,49605 +lZWbhxEg;19112,79994 +BhVxpRAo;33998,22298 +xjNLbETh;62232,9410 +jwYyQkFG;68051,47786 +hSZBeahp;76579,68523 +tidkFIpk;40881,19211 +IcbbulXU;4568,36194 +BqHaSVUY;84148,34006 +qkErqwUt;6559,34208 +aAcvxrmO;25659,44714 +nzAzvhda;72234,28335 +fGnQbqGN;51156,28492 +LTWSioIf;14122,78874 +nMHsSWEj;21370,27846 +PwJhCalz;40447,80445 +cKjoIvUh;13076,64584 +kGjTJNhk;57827,30287 +sGoxUUiS;81361,28322 +NESYczmB;41569,46337 +MQROwWjb;33677,87500 +ZTiSfEEh;16415,25621 +EAzaWlGs;3409,88807 +OLDDFgHN;11976,40312 +bfInuVVM;47340,83159 +nbfTTGAw;28632,75608 +YhjKHJNS;15120,16661 +WKhgcOSq;14546,73442 +uUuRPUkS;29375,86920 +TrfVQmuC;77323,41764 +SvVXWkBD;75706,1739 +InbIOyxf;65230,17217 +RMLiJuLY;41948,42379 +RcrMWnAF;1987,15252 +XsChbkaF;64935,21582 +vkszMaXU;76675,5199 +bIYNDLIY;18652,78334 +hGWxrpFm;64078,61604 +XaDTuDfS;58728,84520 +vATwAlrP;47187,51081 +qusXzjyT;81231,61408 +ajTEftEp;12470,34841 +tbsvMNQh;86440,63873 +zYRDqlEu;37575,58288 +UQEVnule;19560,63228 +nEzwONzs;49899,77058 +LQwTcNgc;89289,5366 +zXHIPeBA;53336,65840 +AUPZJvUW;4279,32935 +QgOjtUJa;81708,72758 +hpqeBlAD;9063,55773 +VWutfzdO;79524,20348 +LYXJMnFw;55017,32910 +KAeguITw;64203,37621 +DVZWgXfN;70133,25025 +EkuIpork;84933,19925 +NFKTBemO;83526,6825 +miVVugos;29344,28655 +tdHEiTor;16312,50302 +fTHSqJUN;6113,11725 +zyQehSAO;87542,59328 +BUNgxOIE;43051,45465 +XRRPUjCB;87747,43056 +QusNHaVV;69453,14607 diff --git a/src/data/entry_2_11_2.csv b/src/data/entry_2_11_2.csv new file mode 100644 index 0000000..d9754da --- /dev/null +++ b/src/data/entry_2_11_2.csv @@ -0,0 +1,2049 @@ +username;balances +lglMrPoM;33870,23015 +GrijUcnq;73012,61113 +hloSYwxc;18774,69943 +mtETRTjs;70508,30391 +uBQhGuqv;58066,70109 +QEeYspWc;59322,39233 +EmfNEhLL;47904,19482 +BXXmcBtT;65838,9138 +honkwMvD;82670,62710 +ZjsFusXB;28546,79048 +SIuwpHEQ;22659,60646 +QVEIlrqA;22388,4140 +BbQCVxSN;33736,12400 +KtgOZiJj;80324,15546 +RMQltILr;28386,35915 +XVbVnjEv;66427,69723 +oeGGnrYR;35835,84042 +ejupiEFM;86810,83807 +vajsIbej;30557,20459 +GrWjjGOL;30842,77792 +oKNOYBpX;18633,24895 +ixjRQuAK;16211,5239 +OOhPbUqu;1929,53028 +qLVRVrqx;22088,65863 +sIBXHJAN;74440,2212 +fsFsNwNX;21470,39054 +hizUuXZO;81973,48929 +elGeOAHJ;76579,11484 +yqBFqaeL;46473,29590 +LsfWLzua;34018,67679 +DFNfPMjm;70889,46818 +HxCNuBDI;53157,86637 +BYcyPoro;37135,60890 +FsQoVkyq;16162,85501 +FeAKSJZZ;50764,7156 +axqDkvzP;5593,77589 +IjusYhpL;53488,89394 +HbXOJWav;14146,7752 +rLWvUbHa;64456,56138 +RzPDuDuy;34357,77644 +XBJjRvaC;73791,66351 +eOJCYGRk;42887,25022 +nUUDKruv;74613,79591 +lhFjdOKZ;51630,36960 +cNyFdzcn;19846,41255 +ktuMFFfM;30950,44485 +GgIJnpTv;17442,18594 +yrtQqJxe;55711,51546 +FAIsDWct;60247,35994 +NwJFNyrS;37631,67672 +oDoSuaWH;65322,88178 +NokUyNlT;5488,84182 +YZZaKvWA;26703,38991 +bOErPVIQ;27695,87159 +DsDDwiSo;7895,16326 +SiHWlWeL;20519,76885 +mGrdVtuu;58516,88406 +CcdVDWYf;26045,30122 +mbtFPzUi;47686,20880 +exyBuzHU;31432,33009 +FSAtNOyf;89088,71340 +tEdBZIyk;49807,74193 +OMFdLAAL;45994,22961 +mafBqZGY;37513,47474 +HzrtIMwj;64550,83584 +TWXnnORN;36221,68989 +dNxgeYOk;43652,11537 +wNYaiuug;65875,80350 +OfCeSRbx;69312,35987 +jMoBtOvv;25360,44392 +uwLqapWP;68291,4799 +SGzucnHz;68341,28890 +XvfVxsdQ;2319,37649 +DzGJsVmp;89997,5756 +iUFTvclw;37899,77845 +rndpRUqw;20937,53901 +ZirRrKXn;28328,54852 +HtbzCDlF;27111,1953 +dEmFCGpb;3742,67983 +eVSeRGfy;57906,2786 +eekQGEqQ;10901,3149 +XCICyfrW;33019,79242 +dQeiSieL;51314,61300 +ShYaoqrs;63873,71039 +DvCwGSPT;57236,67562 +cyxaMVwr;45772,16049 +mNDLjPof;53862,82983 +tsxsFRZj;33959,83532 +TqieWdMj;52572,87615 +GFIFbgTJ;71283,26452 +yrTtxBYG;21927,25551 +FFhDDCMN;69744,57428 +XpFHTHiG;78420,23805 +fiqGWwHM;31940,73159 +XnUXKLlB;34488,79525 +hlVplaTS;10439,71727 +LFdlghfN;12967,3523 +tNlKJpMt;69477,36661 +fuIlZwne;42673,79724 +Btegpkbi;27398,79551 +cscoBCMu;53682,13376 +NDMynnLo;13966,45282 +DVpAxRQe;47097,64838 +fsGNGttH;67408,17197 +ahdneLaf;46119,24304 +YNbWiFgB;63707,2452 +agbVHIZs;1530,82395 +snwpqlva;45165,51362 +QRvaiHgr;8757,69488 +gMOZiSPg;3568,12628 +zVbruKCZ;71834,54884 +yfzFjZbk;4954,4002 +vbPXNnCv;5414,27227 +urYLXHPB;67888,56755 +tFnsMnNs;57959,14667 +vJxmgPKM;57075,51675 +CiSeoTKM;33122,82270 +zoFCutAC;7055,77826 +dZRwfLLO;86721,24380 +hnKYmNUV;15157,25905 +xkVgQDhI;40562,57623 +guODexkD;26325,59567 +JYoPRLOY;23896,54822 +qukiPvBk;35342,37028 +xvQXpAUa;67178,14578 +YxTEVWLq;30734,3320 +eHAKVqfh;39993,16104 +HRmrtiyp;76730,24430 +ZRriyOrz;46714,78813 +GUqhbavY;25451,21203 +owQqVxTI;69526,70754 +vdoIcFOB;23883,30260 +jFXVWukb;87634,71041 +PfSrzKLA;3978,35123 +XNiODPeX;52628,72214 +RTqiRQqC;43011,60641 +PBfbMrdC;49004,82823 +CJjbCvzH;22082,52544 +QFMyuFBg;39626,73732 +HzDcrIjO;61029,63103 +GdaRJukm;33238,18174 +HtntECyB;33926,17310 +yJgEmweN;88913,17211 +LgfidFxn;45441,41505 +bRHqfFlx;26068,85975 +EApVskkh;26955,68957 +ZMKOrSnH;78564,55167 +KJKUURzK;75782,25374 +ZmKDkrLi;47584,76830 +QbbBeTrH;19237,42468 +behAiFRr;87725,66528 +LIRDIRdU;36487,68149 +JnnBlngG;63519,3008 +RaSyvyHp;17628,45590 +dPAZOrHQ;22970,11394 +eJNaaAuV;56042,45497 +KTxdtbIe;22663,66848 +xvSrYOXT;4653,21369 +VBttaqcI;13705,15852 +HaMjiZoD;40622,9014 +SLHPMMap;52115,87356 +tJMJeRTK;63947,48287 +ErewWKxH;15755,14055 +tRgxzPTE;47472,86897 +rktpgLmK;26130,86602 +QiukUoPu;28278,39019 +eHcnYNVy;23191,4994 +rtnyEVla;9620,6911 +qCUVHrmc;54594,61903 +GytkvdPc;29885,52540 +KVjZBcMM;66094,1859 +UCFSXxJO;68979,63847 +CpYXtDSG;62400,76821 +UwnqxLWX;10408,82520 +eNycUGCK;28154,82494 +lSORqSSD;43432,42370 +yhAVzBup;47531,79672 +QLGfeGEt;82681,39555 +EzoJmurz;6084,9669 +uiHtfpJb;48410,7759 +emwbaJYe;83159,73041 +wDrYGIHj;28664,23520 +OfKBNxBj;30005,14179 +QSlMxMzx;68558,52332 +oaJDIsCQ;70007,60383 +fCozvRrP;79185,62554 +PTXSlMBp;36007,16730 +llsyMtWy;87652,40820 +qTSfCFtL;38447,68310 +fEyZiEGs;6320,3034 +GIovHujc;75035,89062 +suCwWdrX;29015,1407 +BoiwMWHn;55655,5782 +VozLZaGJ;52723,65702 +HBHCtJJB;78485,20520 +DGJXKYFT;54532,18838 +pmeXyLAn;45764,34639 +mczxAgKu;47776,41764 +Hkhiyvsj;25393,52588 +buvPptvy;55628,72981 +VSDCqzsi;47473,55866 +JxaiMvrl;14510,46617 +FYjPMTKY;7819,2656 +irrtiQAs;77341,80493 +WPVJQqGA;44039,23788 +pCVPHuwN;38075,19535 +EjnyQlXd;16561,76532 +OgDCYycB;83979,25580 +mqaHcthv;55929,70559 +QbYdlUOC;83954,51620 +wjuBecHe;40478,39765 +ZlWgQhPm;14718,15963 +KpoGdHuf;75229,78876 +IEkdzYVO;75102,72477 +ZXqAomqb;31283,30654 +TIWBIJjl;64079,79460 +MYqQlBvO;59198,30915 +oqlQbeqA;8313,5399 +acODGylf;9834,72161 +bYotbYUI;1651,68091 +WFhACIvE;2159,86279 +NCyNAXgC;78512,30884 +ePeWjksn;62394,4300 +GtCSEHgl;57395,12951 +fNWYnVEZ;35666,70610 +iBRUskEV;83186,56077 +ODNJKqWF;83472,88016 +WLkXyRGe;74302,42771 +IUYltdnB;12063,50135 +LZQPRdFA;28680,53188 +DAIcluAF;34376,65689 +vFVgmbju;67284,9338 +YnNLxreV;89262,13734 +CeaKuKSY;49568,17219 +xkvXTuKa;70609,46856 +VmhxSLqm;73261,28030 +qHqlVOAk;56694,80137 +yCVaSkuP;44252,88472 +YcqBYljO;31077,26250 +rfMVxsGP;43810,82408 +twwYwCAc;42299,33422 +ZgZNIDqe;44372,1373 +fNZWWQQW;80073,34861 +ijqiojMb;46140,43610 +foLVlTki;28315,46103 +hYwShteQ;70976,62739 +nyZiBqXX;4755,21641 +RelGOQiH;12597,80196 +nqKGXBld;21114,28225 +YcyPgrZQ;52998,40044 +ObpSkTfA;87750,26184 +OGOpoHdT;14394,30234 +fBusuOTc;30395,71129 +yUKZvOpu;70451,28773 +oICPHfAN;33827,8477 +bNcFJGzf;84124,6606 +KzLSMNPi;83305,25718 +vEWsxkRt;40990,46748 +EPJddwhF;60617,66789 +dloKJdrs;61942,36040 +XbRCwulj;88486,24007 +yvisbUJH;33724,23433 +CwMeaZAi;1962,26382 +OrsopGPn;42141,17579 +LreQjRLj;44606,59387 +JqnXPwpR;29770,13376 +pJCYTyEH;51818,80258 +ocsgJMQM;40018,50202 +nddhEyYY;21103,25625 +IWOLuvJs;83555,51018 +zzwqMSiM;22434,69703 +GKIevCrr;5920,31387 +ZghQYvnh;25455,23241 +udqbgHEA;32205,31746 +CrWghEwZ;81775,64370 +CbFfKZio;7707,41248 +iPLupfYT;87344,78303 +uMTwszAH;74106,9740 +rctyfZCA;51553,88031 +udikGhrC;60803,65005 +zfBdzFli;86444,27997 +NnLurjel;27966,60000 +gMEKlvLv;1808,57925 +eHmOzYSX;39870,35520 +KPftSquk;15928,37893 +ZihrASbI;79984,58365 +atpFWVDR;88257,65350 +RNBwNNmm;59620,85950 +GkJnSMlP;44073,70233 +MEjEXMYa;14933,57156 +IPstSmGz;5726,8030 +nmIcZAwO;32252,51697 +sxgfpNcc;45311,84585 +FqlfjQto;61736,29822 +EfGOJumW;19004,68552 +YdRwXTGG;2795,79926 +hyHoTEOg;44874,31315 +PSOyjeFb;43376,69160 +gUeTnLSB;77584,48672 +VhCbLkxG;82624,20852 +SdbPsllS;17354,27933 +szRtYXlh;72132,87154 +qufCgFUP;13464,22480 +xNYawjBQ;49557,56589 +nKgTTNDo;79994,16028 +ReNmpCyI;46422,49046 +kWpMulfs;84827,86331 +bWEkYjwY;81885,53374 +iTtAzGQt;58349,85696 +QktkVTWq;74521,86530 +vffjYdBR;85791,14159 +kiaqXPDs;49236,66618 +EFIFYeyR;20790,13070 +ritzRIrk;43355,58631 +JCjthUED;84407,29679 +MoHasWdB;60725,1521 +UrNaLaFd;86922,85706 +WRJURdLC;64008,32315 +XTADvumJ;3156,22789 +aZPZxfbd;40803,18242 +ClCDlvJl;57869,17464 +lLNfPXSr;58921,70287 +FBpSMAgk;12709,22472 +ordWxcgk;19578,86540 +yKSEjYtr;70493,26864 +HGiNyecp;67183,14196 +iuuAFspW;31460,38810 +hdHbSQqL;80670,78571 +kPoCctCv;83995,12981 +OMecLOQj;16233,33481 +sxkmaVyf;46045,49754 +UXWpIOBo;52675,30497 +hKnCLkCj;80656,17009 +oNhNDQTb;89512,80788 +FIBakoqt;23637,71756 +ikNKDdft;65247,44640 +LMoQhbBC;70907,18225 +YkPPNNaJ;14826,18723 +rSCihOUa;12165,23225 +qSRRciMM;14182,58223 +fZzwDQaP;1068,61452 +JgQxXnTy;7093,60038 +KfKauHHf;9214,67915 +tbiJgLJZ;81504,41463 +YuTdEeuf;8517,24552 +mqihlOVm;8762,43699 +rcLnKoTN;48383,1170 +KoxGXJGq;46346,70566 +yNYwmznT;15231,26337 +HAqJVXFb;63739,54320 +hlrHduWD;5549,52542 +CMxWhShw;57395,7392 +YineBBXN;71257,20298 +EKwEworK;54738,44443 +LXKIyIUo;17347,22233 +RGecpATn;37479,19200 +myIUmhBu;59357,81234 +VsLNxxcv;40276,28899 +ZEsaFQNE;48053,23968 +RbOunkBH;53545,35638 +GmIjQuNl;36646,79403 +vEfftoix;24157,61712 +AExWSWOs;63922,71611 +NfDiGhub;22137,85573 +cbuMKWXY;61288,79660 +gbzlMRFa;64725,73660 +RfnDtxDE;52312,33037 +xjTINSQK;25807,21038 +pDfEcfZa;41010,52545 +ZouJQblB;51126,55716 +bAnRxeIu;84111,8673 +XPNxEVhn;82998,56455 +gopJDFGn;29134,7857 +qRTULzpy;60166,54301 +zbNTdjCb;2158,71385 +qAhitNnY;8170,73980 +rNSXTYEs;32290,73574 +gKLUavZU;53756,69502 +QxiEmiSz;24684,64570 +TUdTKfIO;44815,20733 +fruqBiiW;58441,14617 +bMbvjPLh;58655,10102 +sAPFpVvO;31678,5248 +BLwqAGUu;8758,87659 +hteOOWvJ;13821,43368 +mIvfuWHG;64400,2387 +bAZliawv;43969,55035 +GhmWdrrg;45792,39334 +skpDpRrV;36490,31302 +EsyzrHuG;79290,6201 +ghdLUKyK;40832,38612 +tFlsrjQQ;7481,11660 +syBJFoav;44436,68771 +NnVKqTMz;62842,38338 +gmZFUcNh;82538,8635 +NjPXyAYb;67738,5734 +fdMXTIsT;12072,54247 +FHhVRBER;7861,34476 +lfNQTHJl;4905,37292 +vFyaEBMz;37663,40220 +SXfotJHC;33905,57447 +aqoNmmwV;22268,65752 +OMeKZqcX;14748,27048 +tOpNCNuc;76217,56684 +YMqATCgP;84058,21781 +icZFeqys;53917,86019 +jVQTXqcK;55182,79050 +gIPsrIlc;76447,44047 +hDgVOTsX;23511,13943 +zlHexogS;51833,83150 +fMhyXVqI;32151,12274 +NYlhifnt;25705,84353 +IeAdIlsU;8392,14518 +ssCCqCfI;17281,70742 +CKUmDbHG;7599,88777 +vgxBBVPI;86538,83557 +HOirMzaP;29881,8219 +escitoKj;69915,70659 +zGguQtfM;43106,66032 +JdDygFLn;45395,28304 +coxKwQGV;29237,81554 +gqeYImPA;61854,29390 +MTkLYEks;8307,87038 +lhJjCAlL;89076,9433 +lwBxalLR;59957,3577 +iPjLGtIN;80682,71735 +EKfcmUWF;46031,84074 +KLeYwfEo;56134,7484 +KtrgFzqh;6447,31535 +IByjNGIZ;33748,86773 +gtOUMDPp;12612,41489 +OUUozMmi;35611,70914 +eCFYMdPO;42699,33806 +AdyBArlx;30967,27580 +VLxWDnov;18442,4723 +TDXOqZXV;83051,61021 +RpPVQhUn;41557,39767 +TDJNlYLu;31647,66472 +VlpuqhxM;55495,54809 +zdaqNQvX;31650,58471 +wvfCaNer;21652,75933 +GxmvNUCY;49853,82769 +QKsNqZda;48653,62214 +UXmUDRFb;22075,61265 +OBIBKEpG;32057,39021 +jrHxSrCb;44755,62708 +WVhqoYeT;66360,79751 +oBdnkBTf;42346,43201 +MItMKtML;60346,11725 +ImhKEWQT;17677,27319 +hhCUFRZg;60737,28892 +sCeElZoi;30524,45276 +aZsKOZhh;31087,21315 +fpcNUcZF;2240,35890 +FGFgrZMG;33724,22982 +bIWDnChQ;86543,89462 +lcojvtIQ;34629,16145 +moOYmnon;34688,46273 +AwhVpsIq;63834,67078 +rePWYDZD;6896,32163 +GpqXvuaV;77851,77657 +vFOGVRgO;48757,61907 +viWPCYgc;42466,51686 +PMKCFJtu;11454,67207 +gYojBUuJ;77468,30163 +yoWeIGlH;3659,25530 +MGSGcpmC;37108,15361 +gQeMOhty;29445,5376 +gonrEYFJ;6215,81131 +xuPLfnVJ;88698,27350 +kgCSBaBN;51710,37545 +kiUjRGCJ;84295,69330 +XXGxlgZH;76927,49039 +EWxZtPjh;62355,22327 +ozewUjHj;17314,8709 +coQUwzWA;22743,36150 +pSBHHEay;77097,80702 +BuaepafD;54086,25672 +uVdILUrU;12150,14402 +QxIaVRqM;5939,61782 +LOjkzQMH;6921,39189 +uQdSPEfF;14944,48538 +OtFdWBZB;72920,33384 +IycnrfIq;61708,30462 +YaIXGXqL;75698,12658 +mZMqkdgO;32987,24346 +HzSZQyHc;25514,80552 +LpEilENi;64923,87853 +cUjrLZvx;88991,19760 +eyIkpcLk;25352,39306 +cohLxHDd;47136,57770 +nZeVeeCT;19388,52710 +AKUmddQI;14753,57541 +GgXVIucP;62041,31516 +qKQKlXxR;56282,67452 +WwyjDGzV;86069,19729 +ZahoKlRQ;70173,70416 +zBGLwieG;21609,52043 +XGmgtIDo;38688,66330 +yUFqlUno;6969,74634 +nzBvXsuH;17499,53548 +SopbcZQB;27556,34565 +ZWhBoBzE;19585,50914 +IhzZfzWK;89117,79536 +wulWElEE;11776,25258 +ANzxKELP;4989,19348 +LgYLDqIa;74283,23079 +YULwFNSt;54744,32945 +NuXOEjag;81254,21942 +YHTxqRPu;73143,6062 +JYGKfWVZ;83753,82795 +uwaXdbGK;71103,20152 +LYUTnZjG;1439,59119 +FImogGwX;66837,29864 +CYAhjWrY;84901,43963 +cpDnBGAo;51987,74158 +EEzvPMpH;2203,89442 +OQgXhFhc;86958,17586 +zhVpeynR;79168,40461 +TBoqzNnx;6616,4299 +ahSCKXga;33778,1097 +OCxJZEel;46311,52588 +hbEGrXpQ;48803,65026 +HrhZfmkM;27699,60619 +AczxREga;4078,50455 +WewUpgTc;60223,40857 +YBKbiAnM;2590,10502 +AvlBOxWQ;64451,89772 +xTIbbldT;55903,66437 +VUnODIaW;29625,17631 +DETYuBVJ;58013,13108 +JvUKdYlh;26650,51086 +SjlLACqR;37377,11131 +woamNdGX;72415,68013 +ShRfuNeN;59190,72505 +aZrlEdpN;78657,49925 +xuRBtpTb;4936,89708 +YVZKPLkb;87650,26885 +QQnNFEbP;30994,26978 +fjTsmwSS;47745,88680 +SjtXkcMh;23779,67109 +xwZkKHIv;21204,17985 +bqyeFbPW;41327,27320 +JoepidYk;78907,36519 +wjvVnHNw;35114,56084 +KubCgFBo;75370,43150 +xRObWryq;80794,29169 +aAerYNhJ;14409,58105 +PuQudMkV;38882,1706 +PoKIczAg;20245,13048 +ujOLBCKn;33385,69792 +qiAFZUfH;5689,76856 +ssdyrJhc;67517,26678 +ldxbJNNn;53035,88108 +oFxkevdI;3663,12587 +fSlvSyhX;75256,65091 +jMGvJDzl;1392,53825 +XtkcXzMf;31492,46396 +ziEZmMZV;31029,67107 +sVgkaTis;87332,26145 +pPQISWZZ;58566,49152 +zKWlUZnz;21779,26959 +BvrirrGK;10373,23349 +bgPrNUwo;2299,6750 +NFwdsnzW;72328,7857 +RjVJvwqm;18207,3903 +SnVkVpBA;78182,33425 +dQAggdpE;36730,75620 +XsdOzmYP;50686,32256 +ZngdCvIa;15259,52404 +OHMsVStP;20543,3262 +tTkHVPCz;1135,47619 +xsIujjua;18967,72709 +sHOsnsPK;82679,5845 +soLlgAQf;81893,77944 +nZgANhvA;86251,20724 +quQRTDtO;87650,82244 +ZddShGLZ;79843,84459 +TmBWGgzo;78691,54560 +bhrSDKCD;18787,71534 +HiDxsZaQ;83012,15370 +VoBkwDGk;74054,70397 +HFkoytln;60379,64182 +aaoXROxh;44630,14621 +lOpsGIRs;28690,41546 +mSWlCyur;4077,48276 +bnIjWSzY;52237,67223 +MPHnxigr;66737,52431 +kAhYOFXR;56048,44389 +EmvfrbtN;19448,52878 +UHEsYLLB;54205,57590 +AzNGRdTF;15786,36337 +lnpAguKW;19688,62683 +ssoRDTGj;78046,69893 +GLNqofHz;3445,37804 +pJVtRCbq;20044,36520 +jlvobpAK;9958,30854 +WvmyaRbc;21008,8596 +iKfZLEKr;87638,16214 +REttwdxk;46529,31441 +ADniPMyW;7552,85326 +xPAOiKpj;42775,61454 +ceZUWWQK;84803,29886 +qlthXrng;84065,59021 +MrHBXmgi;4030,56037 +MtqJakyf;85688,7695 +pOenRsSo;32616,71424 +lAntljEi;29163,63818 +TATpcLPD;65488,34802 +MlpLPyQO;1957,54858 +RQxzqicE;75851,27567 +cYSrtlzo;41559,76512 +tnQyfEKT;83901,67117 +ziNSElDu;62735,1078 +VtzqSQQx;88776,76801 +yZcurjsF;18884,75315 +hrDFRzjZ;43657,82914 +gpoqcovz;30930,2494 +rOmnTjvS;80345,75102 +exKCXURA;88706,76333 +FfDXcjxK;82188,19877 +QSuhCTcL;22425,45632 +NPQSEVFw;19869,50269 +YyUruDVF;56090,85866 +HgZwacCL;35627,7720 +TqAtSjjh;34405,44183 +SrVfvoma;26805,76526 +bCZTjeNU;41937,61135 +rIiTwyyE;63883,4194 +xVYhqvnQ;42598,33413 +rQVxkkru;12214,19799 +KJHmKtfS;33934,83745 +MildkrTB;52384,81421 +qnLNsoRk;23391,48846 +dZWMSLNi;84832,15623 +fwMtUrcG;38286,27508 +NLqBzqmt;52763,3006 +OqAutxHj;8803,55190 +YgayffpP;86676,16248 +idFTdmSE;64222,79333 +oKodMRuw;72331,7663 +ctVDFDDT;31651,32847 +zFPInmNc;41878,2014 +CfYvKPrD;71863,87994 +GHaqFHFW;64456,81881 +CuAlhNrH;17825,12156 +RNiIlAiI;24084,40459 +pfunnkYQ;40913,60424 +IrzbgRWA;57834,38938 +CResdsYi;60698,20548 +OtuscGku;25128,70818 +GrzuZvap;62697,68435 +EZkkGseL;69602,53362 +myzjdDdE;27867,33562 +gEGQkxCb;35167,31587 +NdHGDqjE;27839,28368 +flkWPVSJ;24782,19289 +EXnSqEMJ;49487,71964 +UexVDGaQ;4456,36023 +gTEsVoRH;73037,47814 +dWIvegXv;28737,17178 +fbaWRRoM;73458,9767 +ScVZqvSj;71285,2444 +DLDCYKgf;46599,71763 +pmwKosqV;54491,31207 +ZUncfzBs;74375,28286 +BbXIBhDs;67831,52188 +ruePXjZc;36388,10060 +gSKrCIgJ;73030,3220 +lewiKlRX;58697,64320 +toZVXNhi;89413,30581 +BEopdeFG;81155,86204 +TLrpJmJz;81700,42923 +osXetfqe;34594,62604 +wKyxnHTS;31188,84299 +mthtIbtC;16486,71681 +oRIYPvdE;35890,45610 +CbFvvOzq;20907,76452 +RttzdRvt;47253,62168 +MfIncuLZ;85877,22342 +UXBfefRs;6645,84704 +SKqlEmGW;65133,43836 +pIPNeOFh;75001,58548 +GjKrLXuc;32223,53246 +jYibHSXY;82287,3019 +vmPwKBIw;10134,44652 +bLfPiJyC;21753,57418 +HDPAqHpW;60686,63678 +XdtlzLJO;14569,62431 +mONZnkJS;12468,29695 +bKGxNzeT;87962,50660 +MWVMAKPx;68140,62967 +zRmrqfGs;31313,85069 +gLBaqUuI;56178,44141 +hYkWkCHC;72183,13346 +xIWbaQhr;11008,31785 +mzMJzOSK;34788,71102 +znOPzdnH;76721,53949 +FtKNQTiX;70301,71436 +hdcYegjL;64251,44061 +uJIgmJcE;14164,28832 +lKOweyha;82695,61727 +qqiJzQqK;71003,81045 +OURiNXkc;26137,51013 +SpuDbnPK;73786,81074 +XRgpHdGK;35856,59217 +rqApuYFY;59450,14632 +dtyUwWif;34652,77912 +pOgIPRcj;37254,25122 +CmrqOfLt;32610,87939 +rUAniMfa;10401,3289 +boItwcsP;21523,13337 +fceLkZYX;1338,70723 +MtZARTQX;60106,47788 +AFUVcvbG;17079,86320 +IFiWFqcq;21636,45131 +ktrRzFRZ;57840,85871 +lyhwuDuZ;6380,85940 +UCAMKOYc;36828,57404 +GIwVhpWJ;66685,81301 +CLZiJOCE;77445,48898 +clnNMkzN;32510,23176 +xfnOXUJD;59190,78369 +jSQDuVYl;76823,75639 +ViALNGdE;54769,84582 +DomuggTT;28070,70634 +koqFXnja;53410,71417 +rbfgEgAx;5231,15016 +dTGicuki;72409,24136 +RMwpcIfS;2846,5285 +dlGuIPqH;17590,12266 +PVozmHfY;72864,61467 +twNpQWui;50371,26567 +mWoISmuo;67467,8687 +GshwJsWY;41415,51191 +VPAMFJVk;1439,39896 +OxwkspVH;31604,21975 +nKXsjdnj;84585,57441 +tFQUUpdi;22825,82562 +RKGumjjF;19960,61619 +ukUSoBRA;84151,41093 +tVNUcshb;53023,49928 +jCoxVRKY;41850,66488 +YhOtSjiN;14951,52727 +qMXzefYb;12748,80159 +ckjsicyM;31231,57970 +rKPbjvMW;47830,84326 +XFHgzXkt;37678,39074 +vklLNepL;32865,55576 +DBDEMpTX;25517,68155 +wBbmcJnE;45424,36590 +JCGlWhTJ;75247,67418 +xxSGASlZ;42491,88754 +eWLOwbUp;32340,21293 +ZijzOzpK;60512,20983 +OUGLkleQ;22064,47379 +hRpWjKDG;37731,44678 +KMsFszYI;29493,41343 +dAFyBRsA;82078,27047 +FXYhgYhh;11696,48208 +JNjSTGSO;69864,2731 +LbLohGHo;19690,56971 +cvXGvRzz;24404,27916 +kzUUwTsE;78253,30961 +WJBykMQY;69426,35330 +CzelQxPD;27887,26662 +FXMHfMwx;71482,49840 +IFIkiPRY;79843,52699 +Wcgmbtrm;5894,53428 +MAyokvIi;45983,38353 +RGXrzRQU;76326,48015 +NUHOnQTS;9773,59984 +plwtRPiX;67056,37899 +aIRRgYMN;56986,20681 +snfOeCCO;81461,51013 +PfFoyptR;49675,11055 +JPlFGYNg;63586,68910 +iAlOAfDY;72136,38053 +xjmLMweE;67614,3246 +JRYXIfHu;2087,60375 +vfcdngma;83891,42910 +vHsrEFFC;87172,40212 +fLpZlOaV;24637,17996 +xKUBJpQL;80635,86714 +dWgVJsut;63113,86712 +frmNvNUN;51576,80145 +XPuWIPbh;85906,16508 +NfdmgfJr;50142,59021 +srmsgMMW;74167,3501 +hHsRNAPH;79783,63666 +yZFEiIKk;20251,28023 +AfTqLtXa;26645,16132 +iTdpaDTV;28153,86246 +cPGZordr;2052,69375 +cdwirhrD;67844,37285 +MmBPUlrI;17649,64144 +VPupaoMj;19574,65864 +pxJyhDjM;75437,25044 +zgdwsFow;49497,83133 +ZjkzgIsi;87728,31323 +VsvpQdxo;49696,73789 +OvQnhfVL;67173,9586 +yfMwkkCO;9929,78696 +mimnpUFK;1677,64826 +IkCEJRBL;42248,75527 +ukDKNSkj;22919,60128 +vUXhNeDP;1247,73991 +dGGLuvMz;32895,21857 +rUBFouve;14349,77684 +wdhYUTxA;15181,46878 +kVVxBUxr;3461,26203 +wkYmRYYj;17164,40077 +XLNiFnkT;87993,62752 +DQPSKLSV;84265,37652 +ZXVsLOmu;77429,7589 +hxcOfalm;74213,83717 +vDVAQeBa;78818,40558 +gxnSGxHL;73321,81908 +CbIoixsD;47586,49694 +LRXcIldk;77036,28170 +IcswJiWf;2656,23556 +UoCghjpH;43766,12962 +dYasshBr;78143,78734 +bfCmAflt;32217,89026 +kPRPGEDl;29413,31371 +ibBBhcjo;68286,64354 +uuUYvpTy;59865,60098 +vJNRbOEQ;49118,80905 +FHtxabHJ;52799,81688 +yOzCtoxR;34892,74597 +QASlnqfG;83425,4871 +SDzfzRiH;47815,43679 +XVoviIVf;88074,27207 +aslTKEhF;46475,81167 +nChrlHpw;54426,38699 +emJryEtC;80962,37794 +zKEWWIpO;41827,78806 +RlaKpijR;83756,61244 +RPCsQAyf;69765,7159 +hwxNBnAZ;41619,87040 +EicdlutV;26419,20308 +hQJSTXlZ;1105,52168 +JASBOQWE;49809,39903 +ybWoeduQ;66550,22624 +JJLKfRRB;1487,5624 +viaySokg;80123,72730 +zMgXMvvT;14654,15331 +aWwIPElQ;46520,42162 +qmMOmPfp;61520,63534 +wLjyDxFw;43726,43427 +FaOYxyQC;10220,33846 +ibUhUhRs;63867,51547 +nETyjqLj;63030,47431 +jpLTAiTk;51748,68876 +AzPhXjVw;37768,5390 +OqKkaACi;29113,88820 +jupzwKFJ;67879,4969 +XNHSSLPs;64523,48111 +ZsPSdYLq;69966,34654 +DOTUhFcT;28502,68951 +hVLMWufN;40698,43276 +eYBBuWdN;48066,40254 +PfJLaOOC;27265,2835 +CthRecCs;69712,29642 +zOQBpIYZ;47441,56254 +zsqoEhcw;48551,80304 +nfTtIPnc;60713,11505 +XrrlSVmZ;28223,38465 +fxZuYeXj;17486,77649 +hZsehmHF;38016,15243 +QbrTZSDJ;68883,42270 +LEjoiiOG;53300,34326 +vUlOoAyE;45704,70626 +MxmqsmPj;68811,31130 +VwhCmbNT;7862,77696 +USHPKlFe;15035,1865 +iGFVsWfM;15303,37777 +VjuAQMSa;46679,24717 +tSGQepom;15300,14709 +CQaUTfyw;86773,11077 +eiEqDzeB;51230,21160 +DVMfdEHv;33624,79852 +XhmqRWkg;79318,40651 +kCggqQsf;1734,71258 +wUkTcxwq;19492,77539 +WMvxwYRj;66763,35175 +CtglCKeX;45661,87615 +lynVkrMH;59061,79048 +wzlIBmoN;49866,17992 +dVmnUmen;58055,63313 +eINQalru;27399,42178 +dQMLDjiY;3558,20005 +vrQUcuVP;3327,77086 +fdYJhHiT;4774,34735 +KmZfBwhr;67432,50496 +AUNBMhBC;30263,86984 +RVwDDPOV;26251,25409 +vBGDbYmB;51914,11463 +ZOUkuZRm;45389,74729 +jxgmuUKm;58350,57552 +zQHYGMTz;51819,52808 +NEcrjzqu;38398,62132 +izPYGSaJ;8050,28095 +fCVrRVho;32374,86784 +DbvuAkrd;6220,45439 +rmENLNJz;14820,2324 +MhckqcRZ;51665,89107 +YlDGKLul;49139,71028 +wuMMFUuU;59165,60733 +JxYzAySS;18876,10947 +MUcUNuPz;35471,42531 +kcLQmoNY;44987,39911 +UkXeUweF;50040,10693 +LceFhozD;13961,29761 +VlXrpetj;22828,78778 +nAINWWQl;74121,44976 +kzAgvmfk;38773,62163 +bGNpHZUk;56498,17097 +hTcqLFXp;3934,4841 +eqSJWdgR;88431,73805 +vBjENYXR;88899,15160 +zGuiHyQw;89730,76837 +sQmzTRef;28044,79564 +dpjKrgtx;23788,64911 +qhSZeDwx;23885,63506 +RQcKvwvq;20103,74812 +eteiHxIO;48865,53643 +axAAaXAM;84647,89189 +PWLxZcRc;41801,49436 +hEtBwjey;70981,14950 +DZRTHkaY;44717,8209 +yXjvvjeC;69036,66341 +eAHGHzsc;23229,20832 +JJhZUfTq;12306,6488 +zUNVpYWb;49574,38744 +kIccOfUN;2778,46760 +ZgbzrwoV;11625,18014 +eOQbMmqu;73173,6273 +xWJVPzZJ;64303,70540 +OqqXUWEO;41594,64550 +hRscNwNq;55578,47696 +nAKREIUV;36434,59574 +wTNqKVre;34832,39514 +PllZvLYJ;84453,24355 +AujpOOiy;28647,23596 +CTPaIcZx;47699,65699 +ZEUDyTlN;39165,87571 +TBaZQXKc;33744,43693 +bXYnVRYV;58160,1083 +XWjACiJl;85091,76509 +WBounwwp;53898,27157 +QYCMitFq;83563,84957 +yZsfIDmY;53879,68805 +pvlHdnYw;80434,54340 +OrlFKOcY;34997,88618 +KHPpWDIq;39745,24126 +ZDrzNZHT;24710,20973 +qplkzQoN;51243,86496 +rnBSxwwa;28845,49817 +WHFTXnrr;27892,69235 +OvpvDFNQ;7366,37937 +tEkQNuEZ;26374,6943 +gzxIbuJp;50491,20172 +PAqswkRy;70107,54218 +XlRiMBRR;57257,14691 +mKfwbqdw;5967,27603 +wIlSibiY;8392,27579 +pVVqUXAO;85227,3234 +DzFuCpYp;75812,6194 +JhOxkyiR;74294,14319 +qIlPgAqX;26297,88868 +aBBkuXFl;71466,74318 +AWDLwqsF;66856,15321 +RJGoNGbm;36826,70269 +KdpqKcjL;4368,86824 +xoqwuyex;25902,41679 +stFcJHvt;1750,88514 +jTUaTnPx;61826,28609 +PuqSfiMe;50267,10109 +xHPLXZgs;45610,14429 +YMTtjGnd;40538,24225 +dSvIzmIK;58818,43987 +ozBUJXdJ;77577,52095 +MvOxFpKk;69055,7902 +kANiQKZr;28587,88307 +BIZdRhyS;8213,50667 +kYcmmVpo;77946,83884 +RaaNmWny;1512,33860 +KyneuBBU;76948,78006 +rPTMBwTi;5684,87356 +MOqBTkVC;78148,57322 +YuWVvTRQ;70477,67771 +BcyVfaSH;57583,6046 +RXzIwckl;29560,71598 +uwzfRQgS;72079,67805 +BpRkhEcT;68122,65930 +DIBMflyt;56766,28611 +NBomkZYL;79274,3618 +zFZLFGnQ;3517,72364 +WdNgDEVT;67073,9821 +lqxLCFPQ;10342,89809 +oBnJWLmb;83763,31020 +pFqTCdzq;52500,48210 +SSJLFbGV;72179,74288 +BzlliIhJ;25291,15343 +wJTSTHbi;81998,23235 +AgRCfsXe;78014,7383 +WsXGMRSb;79341,80780 +tqulQCuH;76824,66114 +FRnDtUxu;18332,85989 +HxyoiqKV;17079,80469 +HulNcnfX;51511,66289 +mNlINqKw;83873,37501 +BHdnsQwW;12493,42322 +vxzGYfcF;42706,66068 +SYMfiLWS;58341,10745 +TFoLEZvf;60571,13355 +CRMBmDYh;89083,80834 +IbXmYkGh;36750,71368 +BzHWVsmo;63586,43844 +uYoujrLS;79263,4691 +SasOgjNk;71686,67552 +TirElLJe;84511,79582 +yavODRhb;65087,54281 +EkqqIBIj;46785,41993 +WjOydKpq;27523,84988 +GdXAZTwh;69343,50585 +mMsRNoNH;54544,12576 +LlgLQycJ;15257,34506 +ZfHzjABH;74602,60074 +DBgCcvhK;76793,45677 +bjRQBAzE;11685,88757 +eNayYhLV;77574,52484 +MVkAxgYk;64178,60439 +MBTpAOdV;44835,33214 +XzNiTFHR;45143,78980 +VNRrmUcV;47543,88183 +MiEhpaVw;2443,41685 +VobuesqA;50251,29076 +fJHbEGlY;11197,27404 +vFVQBKFW;81833,8382 +umMHEEJz;89361,7705 +xuUvmpmU;37958,60358 +BgEHtuNX;34579,3953 +oXGabNdJ;36930,68201 +RJNpVypx;62664,12641 +uAhEfASr;50673,71129 +kWfwzhQw;64991,1816 +pOESFilW;30382,85406 +cRCdQIZA;18910,17350 +hlMleAPS;64371,9159 +SDQdHpqc;60817,7501 +hJToizYO;20414,57124 +iOnQrIEk;12462,87496 +OetVGJvJ;80612,63882 +ybkHiERd;42059,88259 +WRdSKhMa;46965,33736 +yZMOgPsg;13039,85025 +fwPCEzaZ;12641,89597 +ylApASFd;29517,50633 +tSZPaVbq;77127,43792 +SzHUQaGB;85655,68703 +zjYRMQzl;47778,3080 +gFJobXBj;47002,31532 +fajoMMRF;55604,72850 +XGGdDzqo;39973,66523 +WBVqKqit;74145,10851 +QBpjQPKL;13328,34020 +xAEgEDer;45889,9355 +lEcbAqad;14891,19543 +zunhBNlE;58915,79901 +PLSXKLgB;58659,33312 +NEJqIsCH;77030,63717 +kQyhOikV;34470,31381 +hLJPtHCw;18650,79013 +jAXuMRHL;31402,85818 +bPiTdVbS;80141,81626 +rBuzBqjy;46919,39375 +SVyQSsEu;15541,30861 +iZchqvbO;44450,51786 +mwuUviwe;5778,60798 +XMLaionN;54795,23202 +vSIUVnya;48893,29380 +rRNdfAKW;13293,64240 +lYfmiefm;74246,19860 +KfVXRjAU;56074,52962 +aktLCDKS;48426,59948 +lqPOJuRp;38461,25515 +RtRGKtOY;89469,46505 +HLrZRnRg;86610,42710 +gtgVDJsv;34845,7345 +JIECcrKv;25484,44535 +KnuFizoc;25023,10333 +WYZlEAKE;23968,55039 +QjANQenU;38304,34919 +RrVtZnqY;57419,6630 +nCVZKhfI;79019,44004 +NkDXjcIy;16897,3309 +odbmdlez;48187,12006 +jHqBjXTL;37703,75889 +YvxLFGLw;42539,76762 +DxlGIUTi;32656,42261 +SPeDbfgp;73908,33076 +UKKuDjkj;32806,66092 +TGrRGtXT;68330,39619 +TCLtJGrW;66981,13446 +nxVQbluY;13345,19953 +pALWChyc;13366,51233 +froRMbwO;74013,28629 +KviKsfkC;82116,54626 +MVHVEGyQ;88821,81393 +QvYgGELw;10788,39292 +CILUPwJy;73693,71900 +eQKOEDYZ;71723,21095 +ltjjCkPh;53172,10547 +soiUyMnl;14001,19640 +UYFrTPEs;76798,47609 +kLfhwVHI;85513,71722 +FcdmpseC;4841,71988 +lHclXeRJ;60712,62134 +DIoxuNPa;61819,88642 +XqwPDfGn;75147,33685 +ZjLhWkuC;80343,81407 +OpHnDmQv;70997,32132 +IcBETXqH;24765,24521 +WlXcTmcb;4116,25460 +hqamXBZY;2941,7409 +IbgprIxa;69656,65886 +dUlYyQAe;45282,24476 +nwLpJrkh;66493,62141 +esaaDjFN;49716,81227 +jrepTYQW;71936,3924 +zqEVOvqd;11847,76114 +kpRSBSUe;64445,42447 +JTozxXGN;71205,55775 +jqGpjuzQ;44381,82085 +gAeNbdfv;61123,64204 +LwePSwbQ;67591,34057 +xgRwNtKE;65050,16956 +JNYFIBbp;25679,36237 +qfePuiim;63908,40180 +CtEozZTP;17096,66944 +HVuoVXeG;39260,61141 +bZXHsLMh;7074,86060 +saSXWLJf;19776,68636 +WJGQEsex;41212,5636 +CPQxTJoj;54020,6078 +rxWtFHHJ;14015,43655 +Gwverlqx;13393,3864 +HKSVizLh;21121,6276 +HTGFPuNk;57930,66994 +NatfRyoW;72713,89421 +gaNjXsOR;19694,29707 +JuaXYGVi;24290,63503 +PqFklGZG;14052,34182 +nzLsPzff;22506,70828 +nGVnpuAG;50966,52176 +cLWylkvN;18830,66998 +qRRRHCyS;22394,4756 +RURhtKbd;37040,46943 +DKqHKYPs;46455,10831 +gPYOABoE;42901,15951 +ebRVTMgX;12187,37204 +gPgzwyHc;30882,26777 +EjFxkJVn;41724,61918 +zXyadhhV;54994,1441 +idAzNTtP;62376,21439 +YFcwRUfz;89082,55721 +CThbOJPl;25662,1928 +ibDXjevp;89757,9080 +XwfxcGxx;69095,40409 +XBqtfluz;87064,34540 +WkYSaIgw;14236,79273 +WhqaOLDa;88544,73811 +BcosoSnY;46699,15644 +avMBMZet;37553,30914 +yexeSOje;16354,52934 +jjfwHjkP;53545,22092 +AbjGOyvL;76597,54949 +UrCQjmOk;72005,28909 +CFwtRbFw;83265,54425 +mwjIGyLl;45347,41542 +rYrCENyu;1138,2617 +VuBJKtYX;73932,45308 +gGfGUTfL;64328,14650 +glAIrMFB;57798,21023 +pIlreIDk;37211,59560 +oKmxRsBr;14967,42842 +kirFFSkz;12511,88269 +hfyZEvPN;60388,78846 +IfSWUYzD;71981,67586 +CCgInVwm;12757,55707 +sTHBmyUI;40654,30738 +faRRwxeJ;33638,68655 +zCBDRPFG;8604,19336 +BRLsEzSq;85408,73243 +mMzDJQsh;63374,38713 +KHanDuWG;66196,18731 +FkgUoqqi;67779,52853 +TorqoRqQ;46664,89156 +ZeFgvUSN;44808,65195 +hPWhCGUZ;66526,20646 +nFWcPaPf;14169,62767 +DaxbnmeN;7505,59466 +cJdHGssT;10890,4589 +uKnpAeyy;73082,23333 +ZKvLJCKu;48414,13305 +amxPQhCz;6209,50230 +CODHzgfy;30061,81182 +JxkMGvQK;16680,36271 +cZeaGvHQ;55959,59362 +owmYYZZT;6237,26799 +CelpugfM;22022,83772 +vHKjSesT;78676,39074 +EhVJumiZ;74753,36624 +LVomYjzn;74601,64437 +CxFitngd;61178,20988 +xKUWhfVq;33162,72307 +KyDwRqAT;35038,86374 +UAlqJXIN;59290,54142 +aNTyoigN;25469,82272 +PHYfCqEW;49107,49246 +lCLzCqej;35547,42067 +XSrCcYlJ;22467,6985 +vJnhMevU;17085,79439 +hpLShuYd;39570,31071 +LrzXYQUo;52920,47395 +jKEtISsR;18757,80653 +YUbcjxmy;52810,89190 +NLzpIgXS;39256,78241 +MVqrHmDA;35726,42699 +MDWtjIIj;82614,84574 +RtomWoCD;69334,36757 +DZweijkj;84113,77280 +OZLGMXgi;69812,16194 +etQCzbXb;66889,12630 +CdZKXiqv;39065,52137 +oRgBGPlT;14975,12535 +BjOtlvFk;55101,26132 +IobnnyYo;27992,84081 +ajjeSEHI;38281,29945 +fGGYilaa;10431,49016 +xgfeSeFE;69699,20701 +dDbbhLJp;40192,12055 +KfLzZYGk;2290,38946 +gpBOdPpU;32363,59265 +qmXCdyqb;11624,66701 +fVWZmuuK;26093,50434 +qvRTMJcB;35512,3132 +IiXbHAvb;33187,74640 +laRIDAOU;73115,12201 +rBjeOTwc;34008,86329 +rnEfjDLs;12002,73166 +qqwcRBzw;79386,42219 +HRCKfjiu;81845,12482 +cVnnQbeH;87546,28781 +DuBsUkeU;10524,74791 +dQkrjPfH;16502,50239 +MDRKkCbM;48795,35066 +RKVGXaug;15476,75198 +uLwtFUdS;84552,16797 +ZOECFncX;85959,46634 +lNTVuoWb;4998,20111 +IpugLYob;49939,32106 +Syirtrus;13344,75817 +duPwORLh;87025,56573 +VNWLcIFf;26597,5312 +bRcsjwjy;59047,70238 +GYLWQLRZ;39664,14969 +UIntIxBD;59631,18977 +QITatEoM;42179,18365 +jkeXaLWM;74807,18166 +jiUZmJIE;74901,80102 +xwPkZgIW;37588,4605 +eCRwRLGj;73848,70782 +lZzXdIft;59162,43318 +diNjkzTJ;23256,77572 +SqRuxFes;18813,18374 +lqWgjMpt;6722,38019 +BwHoTWhC;17146,77466 +WolVgzBi;43718,36401 +lnciqNIw;66009,49697 +xscZFuFN;70770,6393 +JuGwlqLU;79181,51323 +dPUqbLmz;69678,61936 +JPjZsKdh;25826,78936 +Tzfmqykf;49282,22411 +HSdoLfox;52185,57510 +whSaCAcP;51383,27998 +LdoHtpgN;46515,22450 +mOKkbnkz;55630,55285 +iQlgSLBF;13736,25464 +jXSKmJfg;52132,17013 +oMwLIMOH;38279,18831 +nYnTbQjp;54188,66690 +NpBufHJh;2273,10676 +kfdFBfCl;60101,24124 +uzgwLUpl;72230,1248 +BhzXpYEr;66638,80695 +ptyohZHN;54054,48083 +vPzZrCpL;42305,22857 +PDGjwsVO;69131,54408 +VgMQFYuf;18635,4238 +ucHUuPUM;49231,85793 +GhzUWWKb;10478,54642 +XqFyRUrE;17070,81244 +LyxCnHur;8141,3488 +BwmXoQxC;77121,53451 +EHZvPFbN;39726,24649 +ujuYjoyd;20076,86609 +hVQPcAfp;88668,70202 +CNtjBsGv;73883,64115 +fAiuHjAW;56907,76015 +qKtohLfo;32281,39141 +kEISCQLd;5734,79665 +ARSvifWx;18765,21034 +vGvZrmNk;32107,62244 +JILYLIpw;17619,15886 +FGNGGiYx;73928,71674 +IgoIbWOz;26765,17680 +zpXfiJsy;63321,11277 +lwZiEwmq;38379,61639 +uwxvBfQL;62668,10592 +IxNESQiM;84397,6538 +uPAMqLws;36814,12380 +LwFRNzBV;40722,18552 +MfxcQDHn;88029,20688 +HvELQrHj;45712,14412 +bCeGilmC;56861,86513 +pFdgxxqf;24102,82419 +uJXCvTAA;34485,79764 +dAiznQiZ;80315,84903 +nwkpSflj;43292,59869 +kDvGeEhV;63442,32913 +CjgFYcpC;59067,81714 +VXnAZaXH;62308,53810 +seVETHbW;81156,33791 +eMAbYynG;39815,87106 +HKMnkKnr;15206,50616 +KGHIMLad;41354,13379 +IwUVUxxl;42956,36210 +wEZMAKPC;85120,81209 +BQIkYrQI;81822,10456 +kmWHMeGY;79747,25037 +JrqwQIwH;8238,81411 +jtGyvQDs;65557,78526 +ADDgOBPQ;32951,69178 +uOlKCgJB;9194,78577 +khbVfyyj;54268,24031 +TJBcjcpg;68393,64331 +YIoRGNSi;23192,69066 +hRewfobg;83128,30824 +bJQBCYOK;48422,86674 +SCroYpUj;7993,9998 +lcfinfXa;61952,55543 +wDzriJsp;50785,80188 +GkuHzNyN;86522,52759 +eyRKPYzD;17430,10067 +qkOIRbzH;48157,18104 +QTtutqVp;61042,22415 +VFRQJbyG;57493,32993 +TdaHYBuh;54394,55273 +iAWuMmZn;41748,58513 +kNOAoChM;89197,60039 +RelUaLdz;37066,74466 +ClXtKufu;30581,79605 +KDonPDWh;11880,42502 +SjRzZzUP;61544,73911 +goweVAZI;46625,24450 +nAqqgiuQ;43450,44002 +spcDObhH;23165,61392 +ypRBpbJk;4613,60058 +liCJufaf;88578,46017 +RsyGrqrV;53291,25271 +MwJMjgwC;55056,80265 +jzKrqerC;18374,47986 +NKzTvtry;52150,33017 +oIzhvxAH;12429,23837 +AfrQavEX;66997,13875 +EFcWKLaS;43684,27560 +BEsxiFKZ;71771,7987 +BnvcvhZM;14046,76164 +jvfhqRwA;3634,81082 +thmNyNas;58026,13513 +GdUzTqxt;39025,41997 +QcMgdSiT;29913,1231 +rJUwGilc;87673,12880 +GSrwHqWg;29747,6135 +AwsRehqB;8393,31871 +MppyvcYm;72192,29231 +PGBawmNJ;30694,17285 +OdgmOhKI;59028,65991 +dkERsIEe;12349,49846 +AmyMyBsT;38390,63979 +jxtGJDli;88795,48614 +bvzFvFSr;82021,61004 +IkBBcWJM;2465,86077 +fVBYrsWD;54806,31822 +PAvNFxRF;3678,74152 +vBdYuJmh;52813,45544 +SOkxDfBO;1366,47973 +HsEuzDrO;48481,75953 +ImrYeaLD;58785,19815 +sJAMjWrN;17572,89879 +eugvgqnL;74876,1937 +rufdUAlN;17669,12253 +aoOOwjeW;79660,10550 +cWGrqHKx;17678,89481 +gtQOpiLE;70861,80878 +lujGEmWI;22956,40259 +xREEeOQH;53428,57834 +Eiouowqr;46231,78170 +nwhbfdKG;64290,80031 +HjRBtswh;86107,85441 +ykQzKgjc;49055,79204 +PPKAwYdc;66085,63814 +TtxUDuBs;65502,77213 +ZlpFJoQO;22547,13894 +LHzOFfVo;48762,56073 +GnpSfYuL;14485,57427 +JRVpPCIv;29511,58880 +BvmQBImc;26621,1089 +uammdvki;20477,49438 +qWbzTSQz;36807,42015 +QAJziYzQ;43854,51417 +OMtUYbnv;80922,38250 +VWWXPXls;72614,40029 +GecgfwOV;1903,80393 +IWnxvTys;13962,42833 +eGReymcO;17321,73159 +xaJKxLTa;8377,36392 +aHKVoGSc;10520,81820 +VFexUXDP;81389,60215 +lYUbhGxi;9304,30946 +xuJHhSpL;43258,87173 +yhSUZqhh;16823,67256 +wgXvWdUW;56478,39480 +AcdAVvEb;50817,73959 +CHXXYiqj;22334,28701 +gCGuosQB;8778,45698 +BNLghgWv;61615,40342 +QjBUrwrZ;1842,84049 +FZUXTSXf;38894,59630 +CEFNoJKY;44836,71848 +FwwFyyHL;28367,71297 +rVTzleWS;39249,86646 +ZgicOHJF;5779,6742 +vowzKaux;12324,5696 +bJRZZyMw;79196,10534 +AYBfQNyN;25692,25184 +rsmrHKeD;50599,85501 +sMFjAFuU;22516,11923 +Knvnxvua;67837,13481 +lXLrpoLb;38178,84888 +hneAconj;42912,74612 +FTKfaXAl;9709,79244 +niuQoPZM;36192,49108 +zJgLYBTD;28670,66274 +qWBIFOxr;42258,49618 +JeVuSuWr;41735,37479 +AXHaZrbM;69162,26593 +iDyENTtc;46041,28989 +ZdtBPsAV;66307,14791 +daqzKAtu;73766,19698 +otHdPcsK;12157,89267 +SdtEBRUN;76714,60960 +lXAqluUy;72850,21550 +UKsKFjgX;72559,34861 +qHLYhmVe;48798,57131 +dYqvPWgp;3476,58555 +cpFeAiYm;87010,72068 +pCMtwCZS;30533,86380 +UthsuhWD;54705,70701 +mrwXxphU;50699,10941 +ufVxiVBB;45994,39331 +LJkQFZKz;37520,51570 +hxsURfiY;58692,68160 +ADOYtfHf;2755,27731 +XmxAPYup;21570,66569 +rlUmLxCa;70985,8654 +gVuayMRl;51444,80244 +LfCDRthW;75837,54380 +eKBuUOtk;25371,39031 +CFWUDzVE;36242,23039 +ULQEemfW;29579,46957 +CZVUvJDu;60175,75933 +RZwusYhy;61981,26716 +pwgoEcAv;12343,7612 +lWmyIJtG;81941,64673 +bpUGPFLA;83346,31659 +sYMMJByk;49911,85926 +JCoKRgeG;10368,81365 +wjfSpgOL;24542,89991 +OBNFlNJe;63457,21796 +ovIznqRX;19558,72454 +iSMMBlJH;40949,73836 +bfXdGTuy;60142,65749 +bJnmbwzX;70626,45018 +IbRLRJYL;37562,18006 +HmXnCMxf;22983,2106 +AisodweF;87221,81107 +RDqqpzcs;9083,72689 +FJiwhnMC;64751,56014 +QesZISKA;41618,32638 +PQSaiWCK;56576,33905 +kVZunWGK;54842,65108 +SHxOQKdA;84024,41334 +ZgeLQueU;47757,22987 +kmYFvxZU;18509,82636 +IyOzckSP;58754,14426 +IZjIHxNh;38244,55970 +bKwmGTcl;17521,1093 +ALblhhEH;70294,16326 +ugTVBOij;1996,55066 +CSPjBSIx;70523,26894 +jmsWVala;55124,43214 +xTnTGRmB;43004,46143 +oiaAubck;49088,30431 +uQyjOoJe;32230,8260 +bJGgfqKQ;83526,87310 +WKEqUvvm;54479,79120 +TEIrFKwh;51304,45624 +lIVBXvOq;7095,41211 +ChCpFmzF;9518,41949 +seDeDnzk;28479,45071 +iORxRakq;28193,57851 +czVgvmSB;72173,56227 +nOPszQzY;42245,6061 +xcSHkKuw;88054,43444 +SUcLtlsP;78969,80909 +fUrqlExs;74804,45876 +ZhgnInjM;16218,76288 +PigCvrDB;3356,83981 +FfudZSVo;17589,36989 +KmxyuAeZ;78245,53115 +oEpruBqc;63385,37959 +KymzbKHg;69439,21303 +DTgUdZDQ;60554,81295 +WQJLEyUO;59628,42075 +zmWvSskC;62166,2102 +goIcGufq;75757,7490 +URTeyabs;12157,31115 +jLExXdYc;33892,87322 +duuqMkfr;43259,41568 +OTdHpEwL;16426,58010 +hLpylDAJ;53121,62494 +bEqxLbOr;86217,14122 +HFAiWPvk;81586,69863 +gWpdrnXT;79184,58126 +FxqMcZdf;11506,48653 +ufLJEkAc;33931,89487 +kfmCSrhL;12611,68540 +bmsHvNoW;12521,72297 +YbiwGSxS;35632,79779 +gwmTLgkZ;16187,55898 +UJBdciQq;52769,8047 +GHwygyid;68947,72956 +HIwSpRQj;61727,89942 +DlJmiAMB;30196,30578 +zwpOSHuB;11689,84185 +ewlJiVjK;16426,78509 +UsCpQXda;72733,89241 +pRKBpGWL;82867,73735 +iPEMQxtv;46613,33117 +MsmsEbeX;48597,52297 +teexbpMl;78402,48602 +HzLgTfkp;1498,38591 +SgyofqbC;60539,58086 +HOpmuzah;59241,71600 +GxPqGHyh;8098,73682 +rjyBfrhc;32800,58976 +xbqxXkcD;13903,48634 +kkEWOPVO;71938,54589 +xPjkRmBp;41089,35040 +zCQOAtgZ;21530,4376 +LuvxmSRW;56593,1370 +bCaVyFzm;57536,5031 +KdivxUEP;21192,56687 +djNXsOQD;41784,51088 +MrCeyulm;66560,7019 +cVXAFpUa;53456,15878 +hdaajCqU;65634,3890 +XaymysGa;35356,82944 +uCLjcLVe;89071,17184 +XnFYvntX;9325,12202 +wpfLcnUa;20659,17078 +GWHmBkiF;58308,55597 +ssHvhKOR;60217,37640 +xuIwZAEQ;56329,11935 +nTvZbquJ;8797,67206 +zJqviZeT;12250,29573 +YGHzFIXp;59157,8801 +JUvaiwuN;33812,32783 +oyCpVQhz;53510,41771 +MRGIqHJO;10897,8404 +xCwtSmuv;70170,47462 +gNGNuUdA;59370,27185 +GIvPYfQx;85232,5803 +UjqJoPsj;27393,24647 +XUtrApen;3997,2429 +tBrNRxUG;39820,52842 +hdthZKNW;70841,40464 +LoGzLTQc;51417,65677 +firRLvhG;16436,78708 +TgUfYwNu;21714,58859 +DaorNbvO;46792,6849 +OSwOKfTZ;75756,17009 +wpMUBuFL;25466,62682 +EdGtqGyD;35170,26545 +sSxFWhym;40195,65233 +kmHCMOfI;7354,36185 +ninIVYEg;71907,48776 +QYLNVXyT;28299,27905 +msWdiExw;85898,44780 +CInrmITb;77623,86138 +njIwhxHf;67109,30619 +PumGqkfH;62204,69743 +OMYAcqYD;70186,55616 +QmJvAnFG;84799,89679 +vPMAQfYj;79105,33733 +QZOwNtiq;6700,64930 +DjeUjewd;7449,85831 +NpAZdiTp;73982,37708 +nMNAwWWP;88568,83443 +xSJPhHfT;3196,18959 +NFJqEamD;25000,84452 +oNfTAXoh;80388,70277 +tLDZlLtM;40703,26579 +qypjgKVW;73200,9493 +cdtnKiJc;46129,43240 +bcVNAnYA;87514,88152 +WwsYTxSL;51363,79310 +cNGQfIYy;42275,3543 +QjAcyBnp;27592,80834 +zMsgTDRP;51464,35744 +EerGJCYe;67277,24059 +qcXUqBkp;29818,30051 +qKWUYCfL;82582,85006 +vGDTtmCp;68563,11287 +SDJTpPnV;39620,47513 +vDhmXEMs;69708,4666 +fLHbdptJ;3771,6819 +BjWxxkCq;44210,64310 +ORSKaTwP;41163,43691 +sCfamSPL;18415,86626 +OMYUVscN;59943,76649 +szJpSbOS;26470,31476 +fJdIHEoD;10637,81121 +YUVNsvxr;53884,39996 +YXMsmXPy;36807,80794 +aLbDfmbM;85728,45323 +RErvXILO;38971,27547 +pLHiXOcH;86911,61653 +pJJQdsqk;30957,29857 +dPBHVnJh;2959,57195 +jXsayoXq;11793,56403 +dFnqzxUG;23551,70438 +tYjxXPHg;51684,51041 +QcxjoqAD;64866,57981 +NhgykGjq;10584,62713 +iFAzoZrx;50047,87467 +DOJlFQzm;81791,9244 +crnCtzOl;44937,30955 +mfDSchzJ;54419,60809 +DuXFAzwk;42403,22741 +SyDGQQCy;68031,57433 +DWztANGo;41768,23132 +RrxAXflH;68307,18609 +sXoMSOUb;74690,11228 +TkxaUrCJ;59888,37982 +ZLreLurZ;60607,82202 +rZSIodbr;20450,73948 +cCMiUezt;3092,40970 +AtBlfdSk;71988,78760 +cnxGUiKj;19012,66693 +jauaSGJU;89599,39972 +OoKQiYaK;78172,47278 +wmXExxeE;56423,8903 +zbWYLoIF;69962,58429 +bPvRqYxg;78702,37312 +bEuVgiqG;82975,31675 +zYwhaIeR;50601,58781 +JONIDPLp;58037,11944 +XClnqqzW;66049,74367 +MAGbpQSI;67395,28046 +SPpwyoeE;73554,27365 +yVaWQHAK;1220,12085 +IBBPgseW;55754,66957 +QcAGTzGQ;27411,75519 +YNETKfzd;40280,31350 +frhroKPb;81880,65918 +OiKSZIJm;55809,47910 +sCXVuMIi;61233,55447 +CKJzUeeO;39177,15270 +jrPyqFSW;78819,12683 +PnkuFFvy;47375,56161 +SJzgSdbL;6111,70437 +tNOtrZab;7751,44916 +OqArbYgF;59725,49451 +dMJwKTKs;50176,44608 +lRgIsGlX;8175,61493 +BzOeYeIA;67403,43192 +dvsumRgE;80115,63410 +mJBdLKti;54099,24928 +EYBjuTTs;26989,82621 +gOeRcgIX;49589,70124 +nEgMkLda;14166,40455 +CksablJo;26315,26178 +ZQXzPpDe;76814,34886 +vyTTGtxD;77983,40940 +afbGnZhH;27439,20147 +hknuVpoB;86758,60824 +CxlgqUCD;70734,30844 +JUNicOmq;12072,61017 +buAhQNtp;73056,26838 +fnbphTKm;15595,26901 +xKZpahNJ;18700,66428 +cBUWmwGF;37462,65220 +nWdzloRH;41886,32424 +vTmffDhm;42208,41548 +JZmnuzfe;65716,44499 +GRRckRfk;68835,77017 +HFsqfKlP;64410,21807 +ehznYaiX;53096,36400 +eauYeufw;22800,84235 +EFwkpYFD;86188,85150 +CeLmEXAJ;10444,62804 +BuOCMMOI;59452,26088 +ImlJujnP;36306,79847 +uFBkWLGl;2253,58012 +GPVeSWHD;73043,15750 +SIWnpOrU;76733,78740 +HVXZbtqS;5964,40242 +ZzDiJgrM;69666,28911 +FkIKJzJA;39447,72722 +VimKBudh;34487,69198 +KEWHDWqc;48989,2176 +mRmZBPwg;77969,15422 +CXNgwcOg;52461,40994 +XMQvavNK;89121,25295 +eAdfeyzV;30377,60021 +IRhEFLUT;78594,21765 +slfENYJR;67655,76579 +LVPwJcPY;9863,44980 +tVkWIzbu;31714,64797 +IjgjfemQ;24575,5029 +oWwMRwLO;88488,30939 +ByQLuzYv;66207,1041 +BbYegAQg;48943,27352 +USufGBtN;7398,83903 +lBtIOSbf;38920,54702 +etTyfQts;48646,76112 +GpDuHlLw;10286,44694 +FZYCRcvJ;1320,5575 +NiyAARsw;30594,68940 +FOmZGBfU;33953,4766 +urSGtaor;21020,1465 +WTyKRgnx;83501,40016 +VlWOxbZV;18061,72973 +HfGZcKjK;16854,64583 +orANTmKN;30216,44053 +wptqUmUH;59592,10017 +buwoZlZi;10366,42164 +XtWqzeVg;45582,59670 +PrcCIKcn;69841,89565 +jJSRJuRF;72418,74200 +QGYTaLCC;61439,55733 +TqfrySzQ;68537,41324 +uVWyFOrH;55611,3049 +VNkQvbtv;3629,74792 +TpNjQMEu;17915,48424 +NThPLuSG;40498,70881 +BVjlVqTY;72142,35118 +cyLdLOsB;58232,11226 +lNavSViK;2041,45244 +MJZGmSDO;76159,10156 +JucTeeFw;35764,75867 +cYtJuwnc;63095,78592 +jFWHlTIM;54482,18258 +wUfljIMM;52794,23789 +evhFZXyF;89634,40116 +BTTmqxcg;40691,85048 +SeKSCkrb;29258,80489 +PowbMOIX;34859,54784 +yzMrfXup;18070,82246 +dKfVTbdL;64840,13606 +aVDSMJWv;58818,26224 +cFwiOoGD;63558,45119 +SkTHEkuG;33729,40517 +QVsDxUhE;60891,31651 +uNroYPTU;34983,65550 +aqMpbqjS;56196,89424 +sCeXMHJI;37214,81024 +qXmOeDDK;63869,64991 +NUhKTpRB;1148,59110 +AcoxGXJt;10329,41021 +dwFLTdKL;45475,64582 +oyPmczDP;9812,19770 +xUZWVQvN;42461,22704 +alCpMxHb;52124,86398 +sdGjDHUE;70338,29146 +eTYthgDA;7631,60954 +qIvYYEjl;53740,17899 +oOvqvxsY;55374,1680 +kJgcvKUs;50303,11833 +lNTwVJVZ;73408,77094 +MQsSmunU;76059,59380 +HlvhMshn;29103,25084 +zleVVXDB;34570,21996 +cyWTEeEp;58083,36121 +VqPbTavi;29135,49972 +UpLIjdHl;79457,20433 +UEkmyMPO;40934,65117 +rcXaUghl;31395,36867 +uBREDZRU;2800,43816 +FMPpxWvf;75099,53361 +QOIPaEtR;13816,16394 +CRqbcYwJ;82270,79046 +WPZiNtmT;25374,63470 +nCTbTYHx;84130,87984 +TvGMHkJW;75431,64237 +CATWwOfK;40811,47352 +RrOxJQgJ;10661,54750 +ubOlwAQB;32601,4788 +FBVdirsK;13797,70475 +VFtxCoUQ;19092,86435 +eXjfxNGD;1106,89981 +bkJcgCfc;13851,21418 +IReYedDY;61074,34310 +TlqmjJez;36496,10852 +bWxfedVL;5917,17949 +oRHrenkS;28493,25575 +UsQNmIKx;19497,12244 +GzKCdsYq;40646,38476 +RCKRPDOI;71246,29341 +TithRRqf;69508,52110 +DIDfBYhz;59650,41400 +LeJMpSAF;88303,81965 +KloabAUy;72455,50185 +Ewnqrdmm;75290,26963 +pebDtskl;36823,26894 +eoEQQWeZ;27540,45049 +QursXtea;33888,22922 +miBzQbmf;75472,85726 +wKWqwsOO;42173,43751 +VDFHonBS;14209,69148 +OECzcJki;41067,10376 +tytsibiv;85579,16537 +rgrKEILf;22277,73305 +xxbJgzYw;9477,81898 +UAmXliEM;49780,25505 +uWxvNLUi;6416,9615 +KYZUQAAH;52733,55159 +QJiYtkSW;50086,19787 +HNeKwVxQ;24627,34338 +HiAVkKME;72023,85476 +uuDdIcwB;62507,46993 +CxfwYIJB;49974,59603 +vNWbdquK;63357,11900 +ZNXtmxvU;77630,82898 +WJaoOGpX;56914,87780 +VbjokPKB;63897,30625 +GgDxQXaq;3226,27828 +wHoutGOO;11474,32418 +KTMNxlDM;37650,31117 +qlYXjWzP;48121,7612 +fuWppiqd;57166,34414 +zbwfpsji;64600,17799 +SnKyjmjx;87715,41286 +PWhYERWo;13847,3913 +oQSbplYq;46607,4382 +OpbMcfeQ;55675,40584 +JtNnkZVa;41913,25077 +aGRkqipn;42274,87103 +wpGmfvON;35057,79561 +QWbljIJN;53691,50160 +KSzTcRtV;37563,21213 +umMLepOs;50146,3022 +CzYwWanG;87426,62691 +NEWmqChW;23871,40997 +hAdzJYOc;83128,78557 +mfzKcHRq;33239,24442 +QjyWLhIz;8519,51966 +tBItbbzK;34169,52893 +QuqtzTkH;38397,9830 +NqoUBHXN;62803,62861 +IEXxZhKd;6614,40262 +DBRGXFap;76455,25021 +hfdKRIIQ;62901,45351 +NLlxuHTo;88971,70430 +CGKxAWsY;82406,18089 +zBOwhoua;87201,82466 +nkTBJtRB;24278,32616 +dppaOTnJ;82416,10972 +iEGfDSCp;83162,44447 +oUBIXYLe;82123,80623 +XzgNRurJ;1205,86360 +fZAsgqUY;70338,35683 +eZmIYKTA;61726,59479 +uukgkCwD;49035,58367 +pTxQUhzL;43352,27604 +xuUDHEhs;74788,18950 +wBiAvNZe;49621,39259 +umzpBHje;31999,27630 +yzyfogeL;89244,5875 +ZvPSmXFd;3167,39780 +sBiLecUf;11623,30388 +rCHEwdJn;26458,71928 +QxVYMzop;83984,1531 +BqktyfHJ;4791,2887 +rJyjDNXo;79060,55058 +QuIRrjJp;20298,55714 +mdPkRiAi;19613,80004 +XensvvYL;84352,70555 +ZsYtQKfC;76299,38317 +gapzONtU;8396,63917 +FyzNiihC;57316,15742 +dYHQDHpK;57747,79219 +EGVUijwk;27390,24585 +sgSmakUD;16297,46149 +ISaHHoLB;72110,29173 +SlXdXLGV;20109,15695 +CkbMCwkV;58763,32737 +XZqxiXKk;57673,25097 +aHoBCrck;11243,80392 +IQBIKrRi;79445,3519 +wnffRlvr;63544,16123 +bZFElcWn;77968,75105 +BAiGhwbE;30425,10869 +NeELMjcO;89500,16257 +JpnStUjB;13085,30817 +gbDPgYDS;56688,38411 +lQMGqLUv;24792,59255 +MdtbidOb;50303,73375 +TcdTnHOl;89322,58173 +wOljDjWp;31620,60272 +pOuEYDzS;73978,6295 +dkooEynB;36134,5732 +fKCGahOg;15664,56968 +JaVGFBKE;21149,5139 +ZJfBcelv;5731,72772 +cXrkbrjk;16712,41103 +iUvgjmDO;36963,18272 +figCJhYd;45466,7446 +brYzCYYq;74587,16109 +tMzTFfBi;3134,46808 +PwgSgvpx;88666,35760 +EKaikCDQ;55308,51646 +GPSrMnig;49797,87636 +CQtUdpjK;82035,46246 +JamFiAsn;54928,56746 +ndwcRkND;55927,89506 +jVohVTsU;82939,78483 +OiQetLvf;78997,25174 +BSOWdWlP;30882,31334 +RMgakqEx;84428,77435 +TtlfVrHe;81017,1548 +PMbcCyVO;11543,67208 +BeeYKuCp;18622,23093 +uEpbYJNX;68744,19835 +GgiLAQWF;52667,21956 +yvvBDKuW;5587,48855 +EPoBjggP;39487,59315 +xQyjVXfs;70645,19661 +rOIoLoNV;88203,44630 +dobtNLin;40606,38975 +xYScDUqV;12932,46487 +AkCAKYZt;64728,11737 +BdeIbmSV;8507,58215 +TNscLiii;30886,42927 +eCrmBjtp;84867,12484 +RNVeJuWi;21036,1178 +XlFuvBOU;1318,14456 +ccKlgUuy;47080,61282 +epUuFNHi;23753,32394 +OHzKvMRM;85219,33056 +lwrhcTtr;35654,39278 +DxhBBjpH;50398,75848 +SuTPQNgi;56606,46456 +PqvjAZAL;11664,56966 +lYEPIYJl;24747,8806 +rPWuVqDV;89023,39721 +TQNPzsIE;12539,62874 +GlEaSYVJ;50677,85189 +zGruBpFc;28663,88095 +JrPfzklb;39042,23257 +cgdRkeWZ;75952,79952 +yLnqnLAC;11577,44463 +ylDIPTTs;44605,47216 +ugqMsitD;38293,20704 +XoZtYtaQ;56032,9380 +OLjipPWt;23039,62267 +rnbkDtos;53987,4024 +FzvMkjHl;46586,46949 +NOtrRYKl;88071,77336 +OcgqLZZx;44009,85880 +drgQLjTX;66553,45374 +qKBAxnwJ;1686,18816 +GSSXApvS;6628,9442 +lJHIDKai;14622,66358 +wSHYjhkp;49009,39729 +QQDfzFns;25510,82444 +lNjhsjik;9562,73742 +TZijiqOY;66369,70692 +AUltCmsQ;9252,86585 +hRVrFCOC;43545,40941 +iCMjDTTC;89560,61788 +RKNIcAnB;56109,51937 +tPuKZGUc;78037,52737 +EPgpMLvN;85165,55584 +PmesSBJs;36545,87367 +IOFGILpu;7857,32705 +sBBBXEEF;21191,49091 +pIJcvKid;43708,33567 +tYlyIJQF;15092,56011 +RRkAlshF;18469,40604 +qgvompdm;16921,30782 +msjLFOvE;82472,60844 +hcSmhJvo;30671,34462 +kNneUYSL;24973,1265 +brtwbBWJ;23782,52520 +daBAIjqs;75744,1213 +BBblEbNy;57839,4418 +YBQrorIc;31898,13699 +XGXjXrul;4117,19096 +llKHsufH;17133,8696 +wRhGQebt;67415,58543 +AZnoqEjG;49944,35934 +cvncKJXW;50558,38511 +jrnNURfo;66181,65817 +pOHjBeBs;81147,3791 +pzotDsQB;86353,35922 +NDFwjfnC;75816,21721 +otxFyUQp;24207,55387 +yAWcowdJ;26507,47164 +QJKEOQsg;6287,7607 +TUMEyzlp;68688,59454 +OtEHFebJ;6075,28808 +ZDRczZFq;33807,78632 +ZMPNJIbx;60906,60280 +PLBgiXUw;45565,33085 +AbqZmMrv;12730,73442 +GlWhwmoM;86641,8256 +laTVxJfd;23567,67979 +EsKZornJ;7485,49666 +SteDcEod;68691,26105 +qUKBWnSR;79454,5545 +pPIlgpaw;40951,4861 diff --git a/src/data/entry_2_11_3.csv b/src/data/entry_2_11_3.csv new file mode 100644 index 0000000..45ed74b --- /dev/null +++ b/src/data/entry_2_11_3.csv @@ -0,0 +1,2049 @@ +username;balances +qidXiLxh;35081,3561 +zgxqojCl;48751,48114 +BVRUraNQ;22038,58649 +gRGaMHrX;33140,44510 +zCtuNgvg;45631,84407 +kybPVxXf;70446,74346 +meiGoLEY;22525,57506 +NqsWTeQe;86761,10191 +mBJVdPgG;24199,11709 +KlvRRrZJ;77233,40971 +KoZwHsPx;51374,81717 +xzxiEVSa;44067,33554 +aMdMdZaU;57423,67938 +NnTronJO;80189,28175 +CwejEwNu;26675,36281 +vjLvOpNm;16024,3287 +osvZsVUF;65811,24439 +QKPAQOSe;19408,39129 +bkRcwUyH;35978,49493 +sMKmbaEo;14110,20093 +qEQIjhor;82212,81139 +mkjjdieq;69829,47888 +jlrXTnwb;57880,29929 +AcsXoZbe;64246,69372 +gtFPCoVz;89887,57552 +ikIWfExU;52813,2533 +pIWQKTlh;61986,32409 +JiqKSFLX;72661,72838 +TcEneOqq;44793,70479 +dKaJtjFw;20805,25082 +rtiLaAlD;68822,11316 +cdFwmHTK;12903,73627 +NxWGmMHK;13375,67225 +AvzqUwOD;3710,67711 +nnjidTzm;13546,32719 +IzhlkIBa;87236,18641 +pniFaYsT;83826,64856 +fSlcKhkN;1829,21467 +qlaixBdg;23401,49222 +YaQWjSRw;1659,35480 +hIvWvoSz;21331,17461 +qQxGwLLy;37301,54605 +llXoNUIu;45172,3330 +iGXHzeCt;27269,82608 +HqaRdOrF;21620,78754 +pEDavibp;10905,60219 +JePLgnky;79859,19884 +rnJIsREZ;51173,19931 +cRlSosWm;43425,7085 +CctCKJSg;87166,22582 +wImbOiDb;24638,48184 +FsTEDJLz;60813,38933 +rnwaVhaM;83432,8880 +SnUFSwWP;86935,84805 +MlxNxvuF;1057,44404 +NHAFEGmb;6639,43394 +rzIFKrCx;70061,50697 +xfnTQxTn;54115,22233 +jMQogVAo;70140,48979 +vnNXsLLU;66622,29861 +OnBpTvMU;49900,6568 +PGHocWfP;81273,85395 +cFsuzQtx;71845,24865 +eDeMOOgo;6884,75595 +JWSqCCKy;9049,29369 +PfsaUGYW;43625,65045 +mfPuLAvc;75814,85587 +yONEjUVb;44591,50557 +fgABwvTX;38066,36509 +wcQeSjBA;58236,72074 +ZbZiAGkX;49713,87703 +GncxsYiy;1084,38850 +heKOndiu;12158,47603 +yjkiNAAw;73221,78924 +qEoFrzxw;12337,69999 +UoodDiaq;5473,58055 +GcbKzVSe;12003,23527 +KekldAMB;67665,47338 +fKLxBIjg;3024,6842 +NTBRydVk;25735,26479 +nomVqUDc;25363,65120 +SfYIMgiT;38288,42166 +CLhfoYYA;85842,11950 +upRSFOSf;44737,40466 +EpkCZwwV;71721,15415 +JJVmJopQ;62036,35669 +vXVfLxDp;45260,12331 +diwJJLTq;39570,77391 +whwQYOvv;43124,63970 +LDfCaKJT;69655,72727 +BCCscKeS;21053,57421 +uNUdbUxL;44323,69790 +MGkcqMsn;7413,23677 +fpYyYIak;33592,23188 +qAQpgbfj;68531,25308 +kFdGRZEf;48410,32314 +uHIAZccD;19677,76265 +FLSigbYY;48761,76375 +wyJbbukY;11487,55420 +HcXsMKSb;36657,82017 +IzABqZGz;54465,51554 +QTwVslrm;37081,14983 +YuXKfeTp;68068,22846 +BJQJSkqc;13264,45145 +DOuAwvwV;34907,57043 +qVfINyBp;55216,85139 +DkdpVoYO;54976,68893 +CwepTXbk;8423,54161 +QwjcpyIu;79998,85922 +rQXXNSqt;44687,58307 +kOBhOUOQ;81820,52176 +sSnUOsnZ;77259,80328 +EOojByHw;24709,65425 +EdJYbgAz;70649,52449 +ATyvWGGO;70892,20135 +DRNNisgY;68627,54929 +WafeJIcw;9576,39335 +MtsNkYcM;72377,34095 +xgOcrmvu;48485,10214 +mrhXRTSe;82254,37900 +vOAfuoPx;10442,41901 +MRXXvZof;48074,32391 +UnFJElZu;17547,86633 +EejdCjRl;49205,41741 +RODCAxYy;82187,86933 +BKwnDJbk;38404,80409 +BMxFjNoH;82702,36325 +UORkbmin;17337,69846 +MfccSbnX;63266,60920 +vOnmSGtV;32504,73162 +XwLKrwKW;16363,55177 +NEuIpJjl;72475,25243 +FkHgfNNd;81297,55851 +QvoCpjhV;65222,21180 +kuuDYdhf;17209,83348 +tkijnmcX;11864,54607 +rneRbPyb;65872,61720 +EcdZUEfU;62295,70108 +bekUkTWR;52938,4541 +ZmTIgdxG;84876,29704 +JwqbFuEa;83275,87282 +WZHbEoca;53738,81473 +HbeUhStV;6864,76128 +WmGPSIlZ;70618,87698 +xaBLukaT;85264,20716 +nsfQCHeg;89673,35056 +xdRgRrJh;41989,3147 +WrrTpGdB;55636,39490 +VHpQzYmL;45430,24590 +BpZGStvW;16565,1909 +fKFlcfPp;51781,86522 +edkCXMAt;29613,53305 +lseOpjTY;42064,77252 +RvrTTgJA;15426,8429 +VfXszjbt;18834,13195 +gkBouyfx;57406,15755 +llPBPMRt;26004,62471 +lxKbnAfT;60934,49885 +lwREjHXF;27452,66912 +SsAMFIEu;60691,9231 +pHkTdQVb;38493,65512 +rByXDiwl;70398,44783 +AJimpLdN;87338,59690 +NcCYYysV;37468,76900 +BcJynqRh;6181,17922 +alNSwdOQ;76169,85947 +yXirUqOd;87025,24291 +qPGUxiby;1725,5805 +PdweIAXO;6291,27528 +cGOEcfpf;87675,63768 +kCZbdyVl;63951,13315 +zlQLSZlG;56629,62436 +TJYnrcDS;60435,38630 +KsQdWoFc;75255,79771 +aMciqsxM;85965,75899 +uVmlDdjh;43582,40486 +cYRMJkUU;46332,62386 +EVyPycIc;83056,11394 +sETVFqkx;6852,35642 +FAFkZIkj;14898,86585 +qxyOtcio;15235,53852 +xvvBxZkr;52225,63108 +xVImyXtZ;14046,21191 +XsUysLvi;13651,32565 +VYAZgPMk;23198,41955 +ODZUrRia;29146,27900 +IgkrGjZj;3108,89617 +SxEEkCtR;72135,48495 +KXtreRAV;22461,38309 +pbtEXSyD;81413,25093 +ERjsMajh;33272,61356 +ahCVPtLW;61821,8878 +cfLnzrEL;54742,73085 +LobfhXTX;36285,34557 +lGSFiNle;38005,9771 +BoICbVSf;54853,65623 +FpDbBexB;54024,15291 +mdLiVEWP;51223,63558 +dtDTwQHr;17264,65047 +lDFOxmMV;63237,63110 +UXxcjlYR;55871,80149 +VlHtmNWs;69504,15367 +knwFZlPv;61338,35961 +EeMOkZnr;63533,31278 +GOCcMpWO;15523,74599 +ilHaYdfZ;30866,43568 +BFMNHawJ;34970,48476 +hAbYgWZb;11722,61424 +ADMjwktt;52426,5720 +vkMIwhae;73864,81723 +XQyQejBu;33708,69278 +SAnvjJEw;72259,16333 +AZVNOvrp;80078,44018 +tkVZNtfS;36135,52900 +VscFIbfS;35767,43946 +isTzusnR;83654,64579 +akkgZNKe;64233,30901 +FuHpsclr;43777,47114 +EttfDcTg;69676,32419 +YTHeKxvX;42921,38747 +EcGwLQSd;72303,19125 +uUIxWOtR;48393,59269 +IcGycNEQ;80781,17492 +KnEkfVcH;87936,88066 +JsKNAHQr;13006,28647 +etJvcSOx;16278,46431 +eJDxiJxE;75569,35894 +VhQaZYSg;51860,62769 +YIcuEjvt;29244,30341 +QIpUWuqD;41577,6845 +DpvStYVS;50892,57730 +gryTxczH;69878,64204 +yjDcYCfS;50084,66343 +GdBshoAK;7543,76791 +ZYSEcQtR;32672,53869 +FBfiGWVR;28706,10138 +TSohtSEm;10226,76187 +clFrIUAe;38033,89761 +CRZAQGkU;69070,24698 +YNDcQuRP;23242,2201 +uaYTTWqP;77603,87107 +MFREbJIi;18774,79044 +VkVeNOug;17667,23006 +ZQgJfObi;22197,4112 +uyUvWcOL;67086,58121 +FqzKYaek;39024,30593 +aMbmAjcw;26568,16170 +QSvprgHd;86046,70761 +XlKMgaQq;59727,24441 +dTQWkSGi;21580,82386 +ZZyZoWBi;82958,21586 +NmyfBUWQ;73602,30757 +Gpedlwdd;11320,33324 +zAGOSMuy;51223,84319 +TeuSVeLA;68288,33458 +bRBzGNUA;82125,75085 +fhUKulCs;60813,13975 +BUlzbrzc;89750,61593 +ZsBYZpLr;20661,74385 +KRobvsoC;60459,54173 +pUDLtdKS;47984,88840 +yRCXIekm;18120,67947 +dmSHHUCL;69775,60087 +dfBjcIQT;33274,21014 +DAeaHAgA;7225,56790 +QdbnOHkp;66386,43166 +dhtUYJQa;79675,64270 +ONvrZAev;21096,22478 +hMvjNKpY;76983,24348 +xEPiyOIj;19811,69463 +bLSikGhy;63841,5575 +omezhYRI;52628,2541 +yiqPVzKN;44503,78728 +PFFsdqBN;42461,10204 +bMXqROFE;25156,64776 +ktJLxSSd;33217,79165 +RJgQruBs;79919,67551 +zIgMGZUI;87876,31086 +WXHkEQAO;62281,1089 +bWxtLlCj;64503,59511 +YjYKTAJA;85730,67082 +XHrvylZU;44520,87297 +qreSosOR;36328,45207 +xFDCikYO;39061,54548 +abixtaHM;18245,14625 +iCtkwZXC;86407,4402 +GQMAwFNu;11050,83840 +yxnnkqWp;60593,42512 +KLMiCrIq;42355,10341 +PaTkJXRw;13726,20973 +PBFlhinq;62927,75209 +ocVbWUcy;48717,45403 +ExvqxxGb;40418,24639 +twyoQBIy;10661,43530 +KSnyOWEo;7531,24488 +vgPqQTBS;37740,56864 +MApMYOuS;13217,37320 +NovoUQfR;69439,13104 +qQQVephX;32600,76086 +FPGMKXrZ;18470,68695 +eWjGKsYF;87827,4930 +zzjNlrnc;80103,59056 +VcDOGBEh;16591,5345 +UKhvzZpn;28717,3794 +aLWcRtou;34975,59717 +SsfrCpvu;25832,75645 +htOjQpke;37716,7252 +IePJQiQB;50727,70165 +RkJOjQLG;66665,5357 +oVHjAHfK;17011,63825 +UwSTHgnF;51086,75119 +fzMQjpse;62679,58455 +qdIvOViz;68032,56699 +BOMzcBHn;42276,76358 +YiGvOVVq;62111,9078 +TREEZTmm;18228,88271 +zxnXbige;48358,76148 +YJhFJhsB;64703,63004 +IjdUCEnl;68919,82322 +ktpbfHzb;50139,11718 +YnYuSIbm;4253,19263 +BluUTSGD;11218,10548 +uqVYCsKy;32678,31210 +UodARLep;73187,39060 +CGzcftbr;14708,83524 +cwXAXjFO;34330,76143 +AXiRxqZY;56949,28581 +UcyWifHj;83179,66072 +GAYtEdPY;78295,61669 +nufVrOLU;64822,10455 +FdqqWSmw;7065,75042 +BWBqORMK;1209,29382 +ueEjoTmK;64882,50098 +aPPaQfbG;42863,55765 +NKxaSOgc;13823,54581 +AfygqnDY;80122,13488 +mcFwYYFz;46471,48561 +gnpFgkMk;78687,21171 +dYfXYpKb;54749,41472 +rxLltbmw;30668,46867 +AnAeLMzU;48527,35698 +dbposRVp;64897,26040 +lNFBuSUy;60022,25135 +HfurRdEN;7871,73213 +avuynAHZ;1458,4878 +xposKUYT;57960,62801 +mkfboKDF;65565,15682 +SWxnroRg;69259,42837 +lSsfEQMu;87677,15130 +BtZVHEyI;44973,48527 +cxkObaSU;88268,55963 +TLTOdIfa;56890,29851 +nWcrjzQm;85010,43952 +OZDxMahe;25680,40131 +todNgasO;31017,57461 +zpNomZtu;50276,20532 +CZMUaJLg;15159,67552 +kzmNYwyU;75466,3283 +jdfStqAs;85089,71754 +ltadNvAP;71093,9689 +KnhwiyIg;2753,34408 +avOvaLbm;45546,60485 +ImvzgVuO;7032,67292 +bgqnwYDr;53182,10820 +EFajBDCi;35131,48783 +LxYHFfeD;46689,68839 +KdhVFGTG;69796,85477 +dNprqpsZ;4863,6367 +evBssfUc;76800,41138 +CbuStnlK;28876,85914 +uDlAPGin;49185,74834 +KzIFxTSE;63802,88910 +OfoDnyjK;78177,10557 +gEyCMivm;26981,11267 +gCSieghd;67817,15013 +oLhXxvVJ;65699,34070 +mhDZzudw;6165,88143 +GjVYKhqg;89309,49018 +cMmaKVrl;42175,50985 +PRDBAWmc;47004,17411 +YZZARQnw;27090,18574 +VUaTKjPr;51789,88180 +tzbuTNtv;68271,39156 +cWZZZjIx;65334,1455 +ijaUyFKo;71948,60189 +gyYnCzrz;87907,43622 +qdecPQTe;30375,51453 +HmtaMNlH;39003,3679 +JKRiggEU;55596,5986 +nrePohHb;84204,10089 +TVtvLoCm;55808,33073 +dRQqtIvQ;23003,16706 +fSkBhLyF;82882,22418 +kainsEzo;86226,3638 +PbFKCXaf;63720,51992 +RKrwDiqe;7957,12675 +wQmuHyvk;51801,63966 +jDDIuiUT;39745,16612 +wymahTnx;31201,53820 +psXkuHBx;64539,55899 +MXztydcl;59539,77105 +wQMANHai;70954,46616 +QoEpUzlf;40278,81175 +GkeiwEDX;48163,44969 +qnDhwuSK;82775,41377 +rYmOFDYY;50080,88316 +eQpgxOEr;36585,15890 +LOvunKjM;39336,53605 +jDVuPrEJ;5065,4602 +jEwJHoYZ;21308,2015 +kzJdmpkh;1505,59318 +XKTvyeyr;40720,30717 +TUOeWGks;44134,25618 +OrRVKFLx;31699,20386 +jGuFHUOT;1304,83703 +XzlKrtrM;76845,25136 +SpsBmXDG;5871,56535 +DBnGaOcE;61398,62017 +khLMQQnO;55653,17367 +qQiKuyCY;77070,31371 +owyqRsfu;8642,26437 +SNtsySOd;82741,62980 +jxUyIJmK;32979,20914 +fRDacBkq;49976,55947 +oQsMpZdZ;33884,64705 +fZQzBJrp;55614,61083 +yMHkawwo;84138,17059 +jORqaytS;48626,67555 +RQcweeHp;30692,17092 +QiLtJJEC;24537,28927 +UCqvpoEO;12201,40845 +oFgECSXo;55250,6305 +hNOOSppG;10334,74709 +WQFocxUk;25703,48631 +eeVXaAhS;26616,45140 +TwkaLGaJ;39345,58497 +HUCvQNOC;47852,26906 +FgUTexoS;53715,26718 +paDVPTKu;71793,34854 +aqVYMkuB;74531,42278 +cGGUXtrx;48820,47239 +zkEFgovp;88381,50836 +iSebofnX;30420,66657 +TKTrvavC;63216,72151 +jryjrHLi;33000,65026 +ReFElXpr;38551,46044 +JHKuvUTb;75149,69903 +ISJYwoih;19011,62283 +FDrphRNt;14170,47331 +eAkzsgUG;31391,74110 +qutonjqk;79390,16646 +JgYIjNex;74678,73557 +MAgSiidZ;77425,69672 +BoInskOl;2847,24918 +KbzPsasW;58309,18761 +TuGDAVaa;11958,84858 +NagkDdMY;33462,46305 +CtyABSsK;35470,50453 +ieifgjEX;71651,52781 +XzaBixXz;45880,66372 +ILzknjzw;74255,35338 +QRYlWWYh;54010,9341 +cLBfpEjr;55318,80140 +uFURJekW;37384,29350 +zUolAgMy;28341,41195 +sQwGpHFK;1490,39291 +abHHSdKT;83865,39548 +fVHjehze;79826,14156 +uOtLebdb;53764,88151 +VpdfemrH;62863,82593 +yBJDVxjW;40219,43115 +HiYWpYVm;27393,35963 +vuHaVmrg;83852,71224 +XYmZchxL;9398,14177 +NuRyfaAu;26285,17116 +NQuefGHK;63986,23009 +dyERtaPq;3750,86712 +GspRTGXg;87156,62001 +iqkDpUQU;16475,48026 +MZiHcBvw;81314,31960 +EvCjREDe;50000,39170 +gxgwNKbQ;63993,46513 +IPgMnRpr;80906,77057 +mGfvbCoP;57789,77652 +nqSQgFiP;70471,59378 +gmTvskZh;20731,47980 +rOsjYIwt;11650,75312 +FqTiGOZJ;78388,3670 +KLsGHvRY;73416,51526 +YKNHJMPj;17179,36863 +LIYHQWkW;26369,59230 +BMDBjdFG;15463,29813 +vCgdVUxX;56983,60618 +ETQtpXET;87669,28403 +xkRgtXXU;35984,67665 +AiTyCLim;54145,64633 +leQlSyBy;70734,51443 +dpoyAsjj;41518,82084 +eMkOZvKZ;86383,25212 +wJpFfsGn;13043,83448 +hMuPODMp;8346,56603 +mWLqHtIX;17491,75912 +vPHtJoyM;65261,15113 +NBFeMQMV;88617,17731 +MnHwVDsL;49235,52199 +JjKvPcNx;80186,34813 +DZelSZhe;61099,51455 +zVWdTGYr;59634,30830 +ifIXnLGY;3971,41273 +bDOWNuqP;33466,84796 +PkzGbDMT;58570,33266 +wcqoRibS;38843,26816 +gaYGcDCJ;62600,27259 +MVOVPFYj;2296,40195 +QOruAEmO;14430,86189 +eAcoekEY;30581,88006 +LIXBwyXE;61408,46205 +smhJbRFS;75990,30511 +tCmFLRUZ;44105,25319 +PDPodTpu;65066,40651 +fUZKIxLp;25877,1596 +suUvTZvu;36673,44588 +FdneSATN;71297,64115 +POPAocdg;55825,33348 +CauIkvxR;73452,16884 +INLRZAQM;46912,66572 +hBDIZGXC;45419,43454 +dbOWDcnG;3194,66965 +sUjZSRhp;72764,45783 +DqxrBudm;73029,9404 +dRtuDupV;63800,7479 +RhYpRFAT;10207,64452 +uBPGdkrU;20230,47172 +SrZxsken;45126,82072 +VSARoYGb;68027,52436 +dseWLUYn;4124,43339 +iboRglNx;45957,21179 +DVCCUQxx;13181,64171 +JGImSuPe;76788,64118 +jRhZDdBr;11849,88510 +bfnPhuIc;42717,12646 +MMDrnFTA;54000,86872 +zMlAsRAj;61145,87413 +SBpsicxF;72019,85823 +hrlzyZEC;24089,27808 +FurZOqJL;55060,1799 +YenFaqqg;46677,10736 +QEQTvvzo;66691,89302 +MXEhKBWC;10774,47304 +ZfFmPBHu;58933,65181 +bgbhgPOu;80443,1635 +gJNBgims;41383,67735 +ZXgzBXxp;23841,60301 +XJGLVjvO;64637,62430 +vHIMWOZC;89005,38003 +MsQrAgyq;87566,88860 +AEFQJVZS;16479,42492 +NrcbuFXe;8517,39500 +sDlRwcgc;6687,23730 +oLHlUJPE;66828,19574 +ocOrSCYc;32562,79344 +dWdfHnJY;12196,59477 +shokRzPM;73063,3549 +RgydCmjY;36036,77562 +Pejplugi;29232,41802 +ddMnwavS;24940,37973 +zkiEJhfd;52848,80800 +EmpHixxw;21388,11449 +KEfLUqLO;34635,69004 +RiEOhIqH;76589,49002 +HNhFbNuQ;21229,15231 +ILcvUEeB;32671,31851 +QoCHajup;44340,77447 +vqgsDuMv;57338,84583 +gdjYnwnn;19587,3839 +tdGQnKMf;60296,49048 +PnKECCVu;6766,83451 +zGIqenHW;51577,66901 +YNjRjsyM;34732,25657 +LHkluFMZ;5131,15701 +ZFxTOtqm;83988,41909 +hdRKSzYV;6066,74688 +pScSVeJr;35551,79535 +gVgVbWmW;73543,46809 +bfOTePIl;36729,58503 +HIlLmRZR;89854,49357 +BlAbMaPj;49083,83103 +zcPIxtWm;70258,37484 +hoQThDbx;17986,51777 +TyagNtiM;81528,47723 +HUoLwkGp;46568,10509 +KIqkepLt;74931,8610 +WLluSYnW;89767,84177 +zzIxJXwC;42460,32575 +ldjgBxCd;57647,77569 +lkTQhfIA;50552,43108 +ArvfJqEA;75775,20010 +KEGQomHM;2997,61479 +FMnYppPF;23652,17392 +HvafQYhC;7601,60776 +dDLdbGyE;27056,12930 +OhyRouBy;83440,76412 +BkLbThls;18146,29225 +htLDtYXg;44908,16994 +DWjZMvxZ;27360,10301 +enmvhkLK;76883,84676 +kPKWNkJz;20680,6532 +wkoBtDyV;63001,27553 +RHhFvpgK;72754,76491 +hvXaGkQC;32794,13153 +umcCwuNe;55669,32045 +GUOzfXPw;46859,64716 +xKoZFPNl;64078,2484 +XGKPmCCB;34440,81120 +ttVHBqda;37914,85982 +YwQLfoUC;30354,65286 +quzjTnLW;22846,38828 +xUzVraVq;47455,53366 +OVZxsnTl;48428,59573 +cHrXjebd;15522,86328 +qAjCDMdb;59633,42979 +VvkUuRBm;43722,63425 +VyvrOMkd;48089,28508 +wMlyBHyE;24840,10353 +ZsHRilut;18031,89703 +WRZliHUp;83893,45531 +vmwCxZuN;71169,86162 +XVhusDfp;69675,57576 +dTIzhCZd;5740,65021 +PhWHyfgd;59214,48344 +couPnAQF;74190,77639 +FnCtaDVZ;40095,69349 +ucBNWmoK;82409,82228 +TdJnmAcK;19469,51084 +TEhHAUQH;11853,44379 +qqFxrQHL;86297,73794 +ysmKWUNP;16150,83118 +YAHZUDkK;32324,80671 +ELWLhwwE;87340,4634 +JvXnyziS;82458,40974 +sskSCQxU;37828,78575 +yTxzwYcX;49852,13623 +xLTftiNs;57045,15325 +xmwJvjgF;86865,27977 +fVeYvWrT;55089,62890 +lcqRNEBP;54450,83333 +GQPNnaIb;14744,48164 +dsaUlFpp;76493,89968 +WFrQsYYp;50035,2418 +mfnTXPiR;24807,9287 +sELbMcuO;70956,78613 +iHLajRmC;40580,80263 +RdVqHBrD;49146,81177 +WzxOAirM;73922,57419 +AGPhVNQW;23202,7591 +ckOIiGNx;61322,77414 +AqzPTlaJ;68626,82750 +XmDiKBwG;80928,77470 +MPHPeJKP;25782,76342 +JFUTfmMt;80917,57376 +QOpadIfo;5376,13512 +OBhPqcDD;49608,84593 +SGosHrKF;16615,2012 +KDiheqxE;40250,27415 +llAttZNL;18420,65119 +oXossmin;76882,42956 +CvFPlSri;48272,44574 +UnIHrOVJ;5548,77590 +CWzNgBNA;67860,42323 +CIplSIcu;9279,81357 +vQWmbMqY;82395,26718 +TKgUdnIM;85838,44922 +jeHQewEj;76742,85762 +UGsdIFhi;46163,4628 +YACvJNvF;49566,73676 +VKFAAQQM;14471,11280 +NRMmzwuU;68415,11940 +eMvzdkck;44398,13958 +bDixvzxP;23742,50756 +JmjCsszv;65961,35296 +JKxiVijf;22003,27018 +zklVBDjI;17071,12273 +YQsVUUqa;17916,86793 +zdVQSBNQ;9294,87300 +iIBTClOW;79155,87119 +AzpVtyjP;22613,38077 +ZcbWnIQv;45039,26019 +qhTVPKFq;71935,15774 +RpuzmDCk;32636,59062 +AFLFmdZk;45492,3674 +lBfUfazT;35984,84301 +fcsjyWhb;53180,78679 +VFfJwTrK;78213,34165 +yErjagvN;10938,35126 +pbFslezh;63210,89531 +xkydDIVw;68050,42349 +IsyhwDCo;17315,19831 +zicKNduq;72587,20460 +sBDnQEjB;20409,87743 +VvKVusjL;15030,1363 +eFBVezBY;6658,70837 +IDYZfUPh;8960,85937 +csmWCkPv;11085,27513 +gugbYeLV;5877,2346 +jfgexOla;8403,39550 +sKNUbrDp;23755,77891 +iIfryInN;13783,41412 +GAlqBYtl;43552,68135 +uSZrApjt;30912,4443 +kakaZipM;13499,51704 +NQzRIWFW;4770,72880 +VzhGCfiY;37766,35946 +ybYtaFqb;44223,13108 +CuEoqSVf;82335,86554 +VldSGGUv;45980,80978 +rGFTiLyo;20009,57029 +lVsTFxee;86908,48006 +QukdusrX;55085,25694 +rOvzpPlw;37649,33342 +lPOnSGLf;7915,65640 +yiHMWfMc;4410,48326 +nKCyQXDS;25765,30977 +qajxCpiH;12537,65940 +tusvaxuW;64054,16198 +ipWPtNQo;44374,25267 +cKHjHgIT;16080,40472 +qHMukKGY;73017,73164 +dmaJknKW;55360,77442 +HtYzXkyd;62809,78257 +ecIDugqA;70448,81067 +dtmlWSOg;31909,23382 +fFEXtKFI;79053,33712 +jSnQWDiY;3751,82337 +nHnSNbfN;75334,15731 +NPNZOvQJ;68187,21082 +lXHXvKuQ;23053,70609 +DHGFfnjc;39383,84560 +vPfLBbcQ;23669,63357 +FCWENCfj;47630,75307 +gCuznNvH;49913,74397 +iGNMnApC;82408,37419 +BThvgFXF;7781,28458 +rFkRkpXz;2132,23733 +xowMjUyk;9358,81490 +GeMWdRNr;2128,71460 +IcNYIWLS;49578,62310 +TbvbUPSt;28530,32290 +OBFMLOYE;74048,39965 +DGmWGYrl;87680,19115 +EAHcPMKD;25865,48944 +faQozmis;76489,88497 +CjSTCxLv;65707,77633 +SnsGNnXF;76519,88386 +RGxYmXts;35139,68185 +txRiydRl;25236,36404 +CVlhVPlP;35175,41406 +zszDsXsw;74766,24997 +ByWTdfas;61951,86093 +WRCGUuMb;51228,18413 +hWiCAWMM;75790,16656 +jfpcJqsX;80059,82212 +FAeBoCVo;35861,88415 +lkhDTDFI;35331,59544 +UehqARMm;77906,25812 +OAyukEbi;86803,26076 +yGZVNIoQ;87537,18246 +cmhFEMvy;10444,61111 +FOxJvmWT;43183,54427 +IYAUUepB;75745,6569 +UagGEsEf;16360,24249 +DrjImfKV;88731,66671 +nwufwuYr;38639,17879 +FEJpattu;31980,9111 +ombtUNqx;50658,19836 +yZqWbsJv;37634,29519 +YmrdgOTB;52528,79386 +dZyozdMQ;21013,41514 +ODGrscpI;74680,9354 +FvGvRqUG;28762,8456 +filAfzOI;56310,80270 +bkeBFaJf;37076,11936 +kWeORsIm;34983,67826 +OfyBksiA;8212,83600 +qDFzjLdM;35819,67985 +GTwChdwM;12603,20329 +EIcfgRCC;11316,25280 +RvekDhSb;16967,37722 +tlmLpOkW;84459,77119 +oYlWGZcq;33214,35305 +PrpZMRQq;30974,15768 +NXOFoshz;8114,17789 +pqgzIJtF;49877,5279 +JAbcrQlA;87745,8663 +dwIiUGmx;2982,42124 +CAVrBTPP;1045,36924 +oGuxGUmQ;20769,10833 +zLuGprJA;23146,58086 +qwnjdeSF;52996,37032 +JyxSzGWL;44762,58538 +UfMQhiXs;37216,9791 +jiSNQnVg;17553,49461 +rBjOalvv;51076,35428 +oLMRujuh;52830,33521 +Psmwxgsy;17581,83123 +RgOmVGln;51322,84786 +UArcGRmF;21441,45938 +emVZEbUj;70356,86104 +pyyAsWRo;87399,34343 +TTgSJeVR;14921,28491 +VhACrKrB;28318,47724 +tnognpGQ;75485,67278 +OMppckLG;41302,22273 +STrvKMhu;54536,43858 +oMJCEeZY;58731,27972 +dCMomBpY;71383,84555 +iOJTWXai;6629,5546 +RyIOynLN;50100,6708 +LyNbiTrN;68710,36307 +XZqrRCjD;68808,32712 +zAJnzumw;79326,41590 +ZpNDdVYo;88224,28561 +NOpgTlaB;87996,84245 +IEDQBTqr;16973,32402 +SNKwlfzz;64406,26555 +cFuWgiIR;74754,28089 +tBnLGhWU;26226,24265 +bwSCVIZn;60379,7890 +UtazUsjE;59128,42787 +euChsrUQ;10894,72797 +CVzUtCho;51327,59253 +nNSIuMrs;10899,85963 +dtNJQxQh;35269,32077 +forzMNMw;78559,80787 +waZhwGwy;16381,34682 +icgpxUad;60246,81765 +tSJgrtZF;19647,89014 +aACUldvT;6930,39081 +zMPvepqn;19506,16652 +pzvicvFa;4697,61152 +gyiqLebG;48008,49168 +BQYuUuAR;7964,54413 +CjDeikZU;12008,29352 +hSknIyqX;39281,3986 +bBGdLZRo;70831,14412 +kUVsbXai;63936,57089 +XfwoFsrn;72509,72260 +mORMdPRq;70863,77027 +mMSIFTPF;76668,73339 +AHEOgNpK;49150,6605 +wUIHwuWI;60538,69952 +xDqmuUbC;16351,9526 +PUpWcsXh;7206,87197 +JpmFWwUN;69241,86452 +vhpJCLsM;53667,33894 +faZozlCK;50515,45863 +ndJwKNtw;15397,12903 +ZDbjqzwv;87114,71287 +IBcsdEPK;28504,25289 +vRUXKWly;6192,69680 +gWxTQsVl;11505,60311 +ZreTzVCE;53546,78199 +rJICGEMr;88785,67762 +kdbeeBLo;85297,9991 +goohHXlz;34726,42523 +puDUzinU;82902,9208 +GcnZdaUX;12791,78150 +MIpZsKiH;16682,4024 +qoyXcDmS;22539,28285 +fKCheDaf;68228,35243 +vpSmbMpt;54734,60213 +Akhxwqjr;63636,6959 +RwlyxAdz;54399,61049 +QCqVsXTX;33864,17381 +UShbanmf;41604,32763 +hJYVRhva;23449,18016 +VvwzFmwT;89143,54505 +xenylihT;10783,50522 +LqvCyxmk;3971,69141 +cJSftlsP;84640,61647 +jgDnJjGV;61002,33004 +wevoTpEt;81394,13272 +PdpykuEQ;84436,87933 +WEISvOQP;10788,73331 +yQfEWSLz;55145,26890 +PbMVLiPX;58332,30762 +tzkwRpkN;42816,1610 +efyhozqY;80573,3594 +UZgBbpyq;9218,59783 +UCXrBDJf;74218,69851 +jxOYZdKS;17311,13526 +lPnqWsyW;36802,39657 +wYepNpix;70241,77536 +egRrIJyx;89557,4258 +NVkrWbuw;30323,28725 +PhOOXxNt;77485,16448 +YSHUxNrO;82472,58354 +RMzVyMwU;73067,49788 +ETtIKrOW;10722,66334 +nPhGqLdp;79472,66878 +yLzQLzvL;75974,60603 +wiPosPCT;23831,15255 +mCwGSUUF;71755,83231 +HkrrYHld;47808,60847 +bmlzVJxd;40400,27725 +DpqmaPIQ;73857,29248 +tWbfqAWH;49879,42549 +OecKZjhU;4565,67511 +mTpMTzEH;15305,84686 +XqeTkgNP;72488,14862 +JhoYFHAF;45777,41917 +NJtAUbum;10275,40561 +tEgdhwrV;37752,34748 +hjAGSjMo;28425,62185 +stXDdTmk;23691,41782 +sXljnGvr;86096,26822 +LAzoVtbb;16779,9716 +gnzkGnid;75251,36717 +IYrBkkRr;60236,44488 +KBuxfRVy;51913,44137 +CZgSlyZk;24391,71439 +cNODQFem;83192,38414 +iYruoPCA;2320,1136 +RqDQUYqy;30577,19546 +siGuLhGy;46203,52748 +VLyPJoXx;3754,79770 +KWfOtYmF;72199,81515 +PoPYApmx;28432,13508 +NdreglcU;5298,31780 +RmkFTqeu;69621,31112 +GConjGoi;33776,73993 +zfETBZDY;79356,14285 +dsWuWzme;39423,18284 +OOdRHnwV;21891,86976 +LFnVszrU;38512,59719 +TAMLrVkv;50306,78332 +KlSXwboP;16196,41836 +QLUqCVqu;46954,70050 +HKEZVWVd;50710,39402 +UckXxAja;15221,80616 +VrshsMfc;69998,6697 +NXDxoyBU;34072,4706 +ebpBdLKU;10531,16921 +NCGjrXQI;40975,24963 +SMLCELAc;52981,55880 +HNnXwDMW;45966,38545 +QwanIifB;64988,24088 +IIoTVZhR;15483,81398 +vPwUXNkU;9661,27347 +GYZgWsOE;88814,40817 +PCwXnojM;14603,8949 +JIFhPSqj;39534,76002 +VBPVIQly;11032,37468 +ATKmAQYK;33954,51525 +nFSCocPu;41874,55531 +ijecXOfh;12008,11079 +KbNjlEam;49667,18416 +xAnGKhmn;3897,62941 +KMaiNoVQ;61777,86623 +srpIKpsA;75383,55748 +lDzfDWPz;21622,25918 +qdMBTaoX;32352,14635 +ojtCKQeE;53173,12584 +PgKKeIyY;32301,65867 +mjMXWGra;20315,3209 +tMLdMNff;79730,71918 +pylIBeTF;55175,1738 +JHcHuCWy;28267,81870 +QNbBZJxP;18831,24136 +wgaYJVpw;62289,6337 +KSUyZHvy;62523,89354 +ZDiWEtpn;45852,79413 +otqYJNXU;25966,22634 +IgxPpPin;56798,45893 +JClrAUwf;33125,22026 +kfPyxMoy;74856,11349 +HivBFnvc;82774,81502 +JKQhGwUX;56386,13126 +JwNEkPvE;24570,70681 +OqiXmpbZ;9842,75058 +JckunKTl;41117,71630 +xZKtUUul;68368,45155 +MZAXTMco;33787,36898 +QmZLkwDs;31042,51939 +tdKzSFlj;53448,44912 +UVzXDlbI;83386,76572 +oHPQwbWj;36151,68230 +QnpPeYCj;44956,41175 +dhEROeVj;70822,67725 +cIHHdAEn;37160,73875 +PRiZXoSQ;59150,35901 +wUvwlRIA;67387,64600 +SYQXzsTG;52249,38173 +vddTnzVd;17159,57825 +uxwCzMHq;57772,16075 +yflmvDbS;14737,50056 +OrjHSZFY;32104,60866 +ZJaZuNGs;11988,30920 +ArjfXVfw;5274,3760 +ZaDDyRmj;40136,74642 +npRGzMJs;47305,21922 +OIvRMcYc;33927,78101 +VzGkRCYV;39869,68672 +OAzkulbt;49338,48307 +fgWPJXWr;5455,12524 +AmYovEAM;16084,48729 +ddqkwTKf;75294,37072 +nuAEpfXc;13276,82760 +XJEUhiPg;7549,19956 +DlLBSBtn;46642,60546 +RnPnXYFG;30916,19038 +CUaSuLft;26405,59374 +mklYKFjF;59353,88644 +yxQhvLkE;37619,79827 +ThWZzYqo;78213,49822 +PEPvQcHD;29957,65557 +rpZcgUbO;84342,52157 +HdiWvhDH;14517,3149 +SclYuoKx;79511,70209 +fNfiOzdl;14527,45769 +MxVmlRnW;32807,42735 +dyQsBIDi;57341,88630 +MYRYhiKJ;30702,44019 +SuAwEQre;44218,1195 +SuloTMXy;35941,22738 +URmKmaRy;67904,87900 +NpAguikr;74786,7744 +VOEdMQKY;74183,25702 +TZscrwSS;3598,31563 +CjOLSKhk;66735,26806 +orcDzHLJ;37260,84456 +HnALEQEd;80312,5084 +IWzcBFQW;8508,82338 +YwNRaMjD;67450,23625 +hpnnLxNo;21630,29915 +HlxmETzN;77410,47702 +TKwZZHkp;82482,10415 +bfTGHdoA;79748,57303 +qCvAPqjh;13694,18404 +RPxytlcN;31757,86403 +mTAIHApd;12482,55509 +RYhPdKAX;40167,75589 +JjeFRmOq;9124,71750 +DdSdOijV;66778,13181 +fTkRehlj;71559,28315 +KmBwboXL;31395,83709 +XKfemAcn;9495,29518 +aPIDqpbr;22302,86422 +WZOJAgkT;20336,12634 +zfobHCDw;26564,84532 +EoURUlVB;39865,86304 +TrJnYwKh;18579,87707 +NbTbSqud;25741,20178 +zrTTjTAg;46988,3072 +dvPrWFqa;79589,9887 +klXERbRH;5839,5866 +rofZpJaH;72010,15616 +cHMMHYRv;81018,72344 +DfMBfMmx;59958,32739 +pvwlJCDG;31626,24141 +NdENcqKh;61288,84950 +XQmWfMFY;8509,46831 +QdZYlYhc;17439,37640 +APKfllmD;85761,26751 +TEBFSnNV;29702,51942 +OsATMstI;58618,23701 +JwFHdnQS;31234,26836 +kocrlEGz;41737,30442 +cBFIsAUO;40462,57912 +iaxDAngo;40699,4300 +OrKqckKF;45737,2195 +CxJRuVUj;73746,34486 +SpACLZab;11896,52646 +mLVDTdHy;50390,33002 +mjmPUbfS;5944,54648 +mJhEUopS;19474,4646 +RMXlzFuT;76767,64740 +oTLcmrYm;37441,80045 +cjcrZvdi;36414,5990 +rTpLIDzr;70847,86621 +XfLSAEZD;53167,16530 +nDVSkOdm;34874,12689 +ujQmYbvl;51009,61151 +SkgWdqmG;74530,32449 +sZmCrtEj;78098,43882 +gUGOUfIl;26172,59836 +tRTGeWHC;22385,78827 +mEVrMEQZ;2996,67729 +bxLwXocz;14315,15217 +wtolGvvQ;26051,36326 +SwQwkTHs;43577,9141 +RACcqusg;79853,37722 +lrtvMaws;44827,86952 +XKKdxsVC;44878,26781 +ClwCaOtS;69640,4781 +KGlsNVCL;55255,24839 +zAmDugmk;85417,89443 +ZlZeKzQA;33373,66135 +nuaJTvqg;11484,80987 +sgMEuGLJ;3333,41254 +zZeWLUQx;60664,19057 +mUxaBgUf;22940,68739 +lLMvRecI;80583,9610 +GmFfpZhd;12409,29921 +CRGkmyie;7718,23055 +lqVmpLYi;83729,7063 +orhdeKGg;61415,51816 +cThIMOAp;28002,36348 +lgvZluLG;13916,81262 +nYgEKFjy;23461,46100 +zCNCZckc;29896,84417 +cWTuMaVH;15283,50985 +awhtGBFf;46740,46000 +zUISutuZ;83593,69878 +ikbGPOzZ;41796,64952 +zaQGkkrZ;86976,49019 +abKIrlPP;37046,57263 +ztiWGmzC;52042,30032 +RucRRjgS;70728,34181 +tfqWnpaC;70353,16752 +fhDsuGHL;52549,4237 +pMHspLcW;29323,65447 +GUVVplRk;67695,28641 +XcUVQvFE;12947,47855 +RnweELBi;15505,42866 +negamfjZ;64298,32282 +rvhFomma;72902,31232 +aErKUzSP;31809,60701 +zPVHOKuX;11702,33106 +cIjBAuLp;50625,5139 +JzMUsWLl;53852,5571 +wfUIeufG;12727,75661 +qPOqlRfO;60346,57453 +feOOuxGl;85706,63104 +BqIkxBEN;43238,56408 +zDNqAQJC;48285,67194 +OaYmcdQN;46765,25859 +wjGXZBUG;31311,10089 +PGTfRLYR;39716,53191 +BcGKIOYF;12849,1439 +UlUZMNqj;82550,16372 +knaRuOxp;9511,11211 +nTvJLJhZ;69278,38932 +gQmBQTcI;60278,34417 +cMChFojW;25971,24461 +KJNPhKCM;20559,35337 +alxqjOsZ;34567,30701 +ZywNKHpD;63526,44981 +hZDgHOel;19198,68045 +szaUOJCn;35956,30694 +MFxaHkHo;46786,38460 +DiqUqmHp;32867,13640 +jJfRYAFq;58430,52428 +MprJdbQq;62916,23758 +PyzjcguU;80729,15359 +vTtLaKJq;33466,48877 +PmPaPNPe;4946,26955 +qNQoMEXn;84167,46713 +oBKVFvHh;17341,18109 +RLkeftQR;12708,9507 +jfFzzYsf;79540,22912 +SOVNXIMF;82978,50275 +ljfLkMXL;59804,35609 +FYIMNxnG;16024,10110 +COYfKqWv;8444,19292 +LVNtHXdj;69295,46510 +FpmuQvFk;64720,77449 +xGlcpPlu;41216,21227 +mAeTwNBU;77263,83862 +naXFOCri;24309,53005 +tbqQPddZ;85090,21510 +tYqsuycP;47377,61469 +tpVryrRx;13659,48944 +HeEiAOXC;40420,6725 +uwTXZHmm;27277,30493 +TdbjRSzE;61598,10305 +poZzdBqG;19412,53453 +sRmxBvOg;25235,27727 +denzcLIl;70912,10299 +GzKVcNvS;74543,60956 +urtlNUbW;84025,27274 +BEZlvWKG;65719,21338 +KFwTxmbZ;59286,1017 +eMJgFPTL;28523,33676 +GPJMSspu;89529,2711 +TwPYvvuq;34149,75744 +goXxwSpU;19333,46788 +ndISIemK;33441,46376 +jElezaAX;30999,55424 +zSdimQmP;11799,71283 +TMeYepUV;10076,81685 +aZgseJtX;70428,50567 +AWKGDzMV;66893,5276 +dIRZeVrw;23004,9716 +WHayMMtx;53062,62382 +fhDRCnfo;5840,8512 +cnYobxWj;44886,5189 +YOoTnLbF;18072,12776 +ItEgRGIb;23229,15088 +RSNslZvk;31866,32730 +KuQQyyuQ;8073,37467 +XLxbpsDu;50510,1092 +sKJBUcrM;56975,48794 +OqBhPegC;33607,70527 +JiMaoHsD;40471,59473 +cifajdMj;75808,87939 +HqkRHlYZ;14681,29252 +jiaAmiMU;59031,54643 +ZxfdmEPC;81208,21213 +WokRBEmB;27645,30827 +QAIGKZJd;45783,22424 +PBIehoAE;46728,32773 +SfrZYEUK;22345,73390 +zcRSEadE;75524,2302 +XARTUQxO;51907,70664 +smyOPBkD;60743,10990 +ufBbkhMD;60762,84890 +gMLaWtMk;79828,46994 +QvOCuxcO;47299,36257 +TAIvMsAn;40875,76223 +BjgFhrYz;79124,73621 +vWjQxUOc;82116,40161 +cVJIxZwp;65151,16601 +qxGUaHcE;49475,49717 +cgrbsvYv;75292,43846 +jBGbsMet;50577,61385 +OYnSuKKb;86744,27509 +szVJtNJM;5479,18840 +ZIndWQLt;37975,39562 +HoqwneUZ;86543,49533 +qRNGjNeg;10653,59228 +oxVjdgne;55990,3762 +OaJXQZhs;76356,3917 +QOVDUMlm;32694,21014 +VePAUMLd;69391,19540 +toGsryyb;50759,12887 +iYYwrcFS;10765,82292 +GMRIGHjx;80698,52067 +rHbhJwyn;41385,53060 +TsoMshfo;53367,50792 +hhZstZvu;80434,78512 +bRkgViTu;19508,74135 +MujfiRaX;23566,4574 +gnnOXMvX;3592,82958 +VcVAyIch;74483,22077 +ziaNFpfp;55996,9052 +tOYKUeZf;20368,88790 +kdWjsMTU;23053,61445 +gjYjejXW;43393,49109 +bxtQVhZI;66387,69286 +rgiIcOBm;38033,52421 +bHsXXPKy;73420,25743 +EQQGxZli;67846,17479 +FyrEVjSw;29196,18075 +dOyUUVVl;22834,21072 +hBmnHYPe;9042,71314 +qsqZmDrY;20783,16935 +ODqqHHgd;31160,33755 +gXWTsxfD;36613,33408 +AkJtAPeU;87833,88338 +VuIyEuMM;65998,18936 +wiruZRAq;50122,88472 +eAVnhQQw;46082,63157 +OClCRomL;19353,43871 +UAOvPBFy;13047,30097 +rkGOYvnl;47787,4599 +Sffijrpj;6030,49025 +QmBHNXEg;6434,35051 +sPBQBrxh;17534,17784 +yyCvbXRg;71295,24916 +BWQZVGCt;67789,71664 +tzPxSFjN;15381,41967 +ApGApKqC;36507,11149 +luxpprti;48534,61428 +DTBOGsSG;56894,52684 +mxtqzFlS;33453,60103 +JwVrCwkm;65305,89760 +oDnYOweP;81956,15694 +peEWvfDJ;58765,75556 +SKguqdJU;42812,76173 +zrllNPwQ;86500,43394 +BiINPjrD;7613,68268 +ahvypMAj;29365,48714 +KfLboAqU;57331,42664 +xByThmEN;35634,88047 +hSRPYWci;2026,49579 +HWdRvdml;24692,20328 +aAhAOexh;73526,25530 +juIdBPGm;10929,26068 +GDuGUGFH;39020,65781 +bBPwfYrl;71880,58837 +VQcrSilr;73835,40688 +gFugFACU;66946,54031 +mcraHrBf;41074,33504 +jJBTHnOK;74129,79562 +SIfBmVoP;13250,42441 +Emzivckq;58707,89803 +tqZklIai;57899,72849 +kohngCEl;40184,35072 +wcEcWsqe;34148,63763 +kLwpVaQn;37811,31983 +iGrJdvEi;50003,16355 +zJXPpSLS;24032,5348 +vOrUeSYT;13498,33152 +GCuSxxWH;24639,6134 +qTnRyNBM;14502,5099 +suMyoBPZ;46142,16657 +abdoQlSt;76486,82901 +etbCUGEM;14813,8601 +CXJkVnSy;26043,25996 +MsEAAtLW;76520,19799 +kuMYmbLk;50970,68243 +SpPOLdtx;74652,52238 +GyrdlJBq;47972,67220 +FGnooswH;73563,72791 +KMjfjawm;88592,41270 +bPMHquuL;50539,71403 +WXpBtNDe;89671,81561 +FhBWrqbk;65172,56566 +ztlsZSjd;4726,67737 +gBzlQDfg;70186,8073 +mTyKWTLq;78022,42226 +DiGrYpwm;57122,29436 +LelKhDam;20142,76949 +FVKDmBAA;83070,83345 +WDFFoQnB;49345,1354 +KfaRatvu;38037,70775 +NEmjTXdi;36079,56998 +gSNQRMDk;15047,21398 +INiUWFUx;40321,26041 +QeNNMKSA;44143,24563 +GgFddVhV;64666,31237 +eioNIpgc;12730,28923 +BxkCrYpb;4315,64011 +dTXQzwAi;46811,38434 +LDJUSWpj;50481,30049 +dBMPMZNa;29293,50005 +QvoeXbIh;20530,24380 +vvZmnSMD;26805,45656 +AUNVcbVF;25558,75678 +XJrnxbGX;36932,39149 +cSQeQbkS;23949,66357 +RUVVJHlG;37477,13750 +uUseXDIh;64348,31304 +CLFWaMtT;50325,55354 +ZnWPLyex;76460,12717 +oufchKJP;53272,43264 +iwtlJJbl;2262,50481 +LnxfXyEJ;30333,75245 +ppHQLPCU;86722,13508 +QPueQrvQ;55089,79284 +TwuAOBoQ;43002,33104 +DyUdXNQm;4447,40815 +AUzSAEwi;53369,50624 +mOollaMO;44722,37180 +wkoKaYoL;19310,38628 +dxriGUay;13461,48287 +QpNxvfRl;50920,21287 +kkJlZqpy;17513,16595 +vAeVKEGn;63145,31712 +BrrXCNce;27017,54620 +OGUxWXcj;84324,5522 +AAyYlkXX;35204,5704 +UIsiYJWx;68329,44388 +vqMlZqQt;43531,22919 +WMpaYwTX;47720,41618 +anRmbkDx;31461,67238 +BTLlRmkL;7662,14338 +oPmCGxyo;14733,53318 +QFUrISfo;79858,6234 +rHcvUQbW;61036,4017 +cONdXukD;7797,88140 +qPIdGztJ;42139,3841 +rZxsyRSA;76991,87816 +QBgWnviy;58863,89175 +JenqknGC;12909,88376 +EXwQHTse;40044,21214 +qtoUbJsU;11975,7852 +AvksBMZB;74732,87330 +CkGWauDX;29225,28657 +GlrgkdDI;40839,13022 +wozqxWmk;80218,15325 +FLZJERhY;69325,60912 +iPWzkCXi;75020,89331 +RPxnzTFK;8220,54192 +MVANtzcj;35606,30575 +qqHpKYvN;57509,38358 +IEAIwsIB;25823,84164 +joiIfHbx;7981,15835 +nHOgNVMt;15533,42832 +HBuQgAMF;6325,9795 +tCTkSrED;33203,20321 +SkauVpRM;87554,15393 +BXWpfXNv;88915,87319 +BoLzmolF;70611,23071 +zdpSrFAI;69268,49441 +zynzcrfE;2308,35166 +AMciXAxr;11790,59281 +EfoKsBvD;73779,8495 +KezfmViA;76016,61050 +rXZLQgsn;53501,12474 +UmMzmzFj;4967,26267 +cgGjuzia;84224,42476 +mebjBBrk;58620,55662 +SptuzAnn;19417,45325 +ZuRMjRur;25136,1766 +WPagHKys;4129,13248 +TfFKAcgj;46392,85799 +gKNDigbu;70175,73796 +VELPBZWA;65816,56427 +OwfvRhmC;87956,31984 +YMsNoRJs;59883,24759 +YUwLaWOD;60021,47321 +ivAnCpFK;42435,11957 +VyiCYFtO;33145,8375 +UKbpYcrv;30121,68768 +zQWRRqLa;66963,85026 +igeTLHDL;33011,25559 +NfmJXNXf;86607,26540 +YDskNNhZ;52137,10150 +RyLZoeAM;12111,37068 +dHNuhLhp;26214,63102 +ShPaTHzo;89762,29449 +dbNsEcts;56827,48354 +iOXmdJYG;8899,59310 +nuqLznee;58013,71648 +TGMmDUfk;24051,87046 +XMAyGHGz;66556,9521 +YlJswkta;55783,45046 +DCEWgonf;61571,33027 +JauYIRiV;51388,44173 +sjRmYwKo;53193,13983 +bbkHjipk;40145,85550 +nwTlwnbH;41913,51986 +eLlBkvph;30618,27657 +wcIllwQB;16080,87479 +HBncBKxd;39595,41678 +YBTggCOr;89916,25333 +MBCQKbhO;8743,66563 +MgFZGUaD;79158,74491 +dhpJkhNm;28095,13782 +msvJwqFw;15795,42791 +evFugNjB;38764,87754 +tFSODFlv;34348,88373 +NBxpRfTM;14806,81235 +ssLINmBv;16886,9379 +VFVpoDXn;61547,57006 +qsojPiQT;48510,42913 +xUOoBoSe;27298,67956 +fRZVexsa;67570,60997 +ODgRiPTs;37238,83033 +WbGNArzW;79759,35798 +ZkUoTjBc;16968,23086 +BdmUWrMb;13299,25978 +xoDKfXmu;77626,14775 +QDdPHGJJ;21846,60782 +HmVMLdJL;44968,12207 +XUbtgHgV;55873,2271 +KfDAXZAY;65889,8533 +mlIKsAkN;49795,72969 +ceuFkqKt;44342,1997 +zfqqhVKn;62418,56032 +LZdxhRwk;84015,39728 +yGnVqUAK;67333,63878 +fpWmdhAS;29957,1199 +dfbkRESC;29155,50313 +PQNNKwui;47473,26771 +FEbDftFZ;75865,63935 +MSLqlyFb;5847,75451 +hQlecVmL;51186,70371 +laGSVrsO;37204,8741 +RrdcswjU;50473,58473 +ptnZpBrV;27884,24772 +xVUDhtxs;5565,50365 +JBHKobDH;46617,53280 +SbimDtXb;20365,65887 +uzmxsNLI;6062,9997 +ddzzXvKG;52458,69157 +FpAuXJwH;31430,1314 +IvGtTtUP;57797,86196 +rLWDPMzV;27892,26455 +KjatpKro;69883,13297 +PgywjDWR;14407,33772 +oegEjXLu;35663,83231 +giEqnGbW;17699,84591 +oPydJrZb;53791,60697 +iUjVbPKw;68545,4509 +nQlEFcvp;60508,89298 +XOLEWxRr;66870,32222 +lTpqGyzO;2195,75961 +CBwUNgWb;17431,52469 +IREQnsHG;1802,78651 +UlEKeKFa;54962,89937 +bUWSvWYj;74922,40915 +CiCbyPut;46906,82542 +ogKRpIEv;13811,3746 +ihAlvCtn;65643,42708 +JgibesdY;78284,82970 +dspVIFIw;41770,70167 +jbxGVdsR;72019,18320 +uRUTNMRk;14584,86143 +eJnOENcI;59326,38610 +nWdfiJOM;19718,40421 +eGOlxrLQ;14571,55028 +NcFbjXfF;45200,57092 +xhTrldlp;87676,62700 +mflScQqC;57696,54765 +tKPXDjdm;46892,34939 +dggLFUNR;11624,47285 +OJEVUDSN;62312,5960 +Gbragiik;4107,55604 +MObpAtPb;46083,87217 +ZhRUgFvt;2511,46782 +QozaIaHF;18082,87785 +LofeLVXY;6323,53743 +ksIfwbrD;51063,19969 +YdqFTIKc;35855,51154 +rFZurMHc;54409,88634 +FcDsUDjF;77212,89209 +xmMVeDzK;52620,54103 +ODINrUhQ;71092,80096 +XCHiMzLT;29983,38935 +Xnwdgajp;60876,8721 +gFTNcIQP;71829,47369 +LUYyfpXD;49110,34951 +rgoYUquP;15707,82243 +ZqafHDyO;82289,27872 +gnFMPKRk;88522,62793 +gUYVgJaT;14000,24893 +wmtunwAp;69401,60330 +fTEgOFkw;49998,14575 +AxwNZolG;52347,43474 +lhVAERlS;55192,29521 +OBAHkUPY;86992,72122 +NKSSefuu;10597,80976 +QFrjXNSC;9907,39963 +TQsCFhYl;66086,3097 +ZVqtaQpH;73209,78346 +MIuegGff;37161,67348 +xeQCxXWC;71277,49616 +nbVXomLX;37689,72958 +AgVMoeRg;31505,53769 +mHWcEChg;56255,5876 +jhsUzpVV;41379,47039 +dzGxsJtB;11847,7655 +wHNlbDph;46602,2266 +kWEXmILD;47780,50783 +uvUNxTjs;24405,61769 +AqwFBjfg;21998,23276 +AJxKkaeq;39835,20651 +jmArrWaB;28271,43186 +WOsywoia;27951,12675 +uAYxibFg;42829,64937 +RpMUpdlx;86784,73361 +ObzwNdoP;10320,69063 +vGhccFqY;58878,9332 +fjUaOfag;68399,16687 +NbImlTfS;74946,38352 +hIvIacQX;1204,62018 +wmXqRUaR;8679,43853 +MVrInpey;51347,30397 +PklggEhC;16468,89779 +fiiwyKzF;50235,83931 +NVLTFvsR;45597,18987 +BTVGbRSQ;62269,25714 +dpwJJxuR;78396,60042 +krcsTVdD;58331,7245 +TMDgdBYH;31526,75384 +ahdbqDdu;31556,34477 +KjUtUqTV;30714,64215 +NGtUBToR;69751,7083 +OxpoSnXi;79569,43390 +rSxTRUcl;67666,70655 +AntUlDKS;9715,80317 +BiTqVard;24022,81017 +tPReGJwi;15754,63733 +WLQkotjJ;18001,24437 +TXivxKOb;51045,2252 +lCZWqnMn;50404,55360 +cYPUrWCD;11403,89315 +IZIywkVp;67186,70005 +xqTYpTub;84042,33595 +EWKtuRoL;22380,12898 +crdKKfmi;25730,30781 +BhsaAkSE;25531,65027 +eqHnXZdb;34006,13640 +pAZJzmKQ;35778,87840 +EgxferrT;19618,75658 +XeialqPV;75321,10747 +aecgLwvi;5001,47116 +LDAXRsxy;59141,12605 +RuiRaNdy;87912,17602 +KxpkHKGs;30128,16262 +EsYQeVXo;40909,24087 +rirVYiRH;81045,15903 +EFdoZuae;55090,5584 +VwunWaBJ;60699,52570 +eODMAQpb;19768,16185 +EoNNrdcQ;32468,1034 +xEBWuTJJ;29702,38465 +XGyQhLTM;54123,8376 +TfeRubVo;43201,8746 +zWDvOYlE;5042,77105 +JIcXeGSq;57128,42246 +ZiNgRISt;81194,33214 +FozKPRwy;60662,26160 +dMyrqdrj;55266,29478 +usvRDRwY;61126,24798 +NAFUGVue;22902,89895 +ZWgCaCKF;5158,83444 +lvFJprny;83095,12279 +vEwbLnYI;72908,21042 +KRGsoCQT;26685,21756 +XTXbWfAb;47049,71704 +qvBukipE;22575,85466 +QJlpqLjE;35104,17115 +DWPOXfnN;59226,8416 +kSXZAugc;77345,21723 +MHRKpYBX;17136,59138 +rdwtxRFw;32140,68166 +qVYmgJYn;36208,61149 +NrtqQyht;63054,74183 +rdyLLBkJ;51755,75581 +ZBMSkGGo;3911,56468 +cChasfLR;23905,59154 +MZKqhbue;81758,83364 +OlpHqVnZ;22500,54904 +PJHnveEi;1129,23988 +PybCswBU;72280,61733 +TUOwfwEm;89184,59200 +OpBAjlnH;71089,9071 +maxqJeBl;48795,61550 +vnTIanBC;76220,62647 +SMuNnQJX;52122,79661 +deySSAFC;37158,41525 +zbpaRKYA;89884,19011 +agoKNwzP;89520,57711 +sriGrrIw;72823,86140 +xoPsmgDZ;44758,54302 +NEdzmYnW;73572,20550 +SXcLnjqx;36029,43267 +dNtmjWpl;51797,2058 +WvjzSdIP;86759,84150 +xlhBFQjq;22894,14644 +eljYYsHL;51114,8741 +rDMgQrHd;29807,79455 +cNkPSJgr;51368,20413 +RjTGHBgt;12567,67673 +IBHAvMHQ;28729,40444 +cyuxUYsk;41156,47200 +xOrXYqyy;86059,78262 +LVcYVHZP;78647,72704 +mXDVPNcY;75431,61290 +tDfpNWkO;13385,12850 +zXBicJqC;82661,26716 +tzzKUmoq;41097,47997 +XOXhinLl;69214,66047 +lRULYQDs;51513,35176 +zCdIKzTX;65556,69993 +eUkSRNkJ;28969,66916 +VkULomlj;65946,63605 +POAmIfXD;84373,35588 +fEiYiOWO;59498,20059 +PYxPRAvJ;7709,15935 +AfkVVMPP;5234,3494 +gZjfZcxm;36104,66339 +dQKIbGya;33306,35735 +kmnWVzOj;53419,57494 +ykrFsmdH;69991,87105 +uprDXLMT;62991,82533 +MfZedeeA;62223,22390 +MTVBVbQG;46401,53191 +iKHpnnYZ;1347,86005 +nBMtUZER;25960,36069 +meiHIFEt;82926,56862 +DkoWZdqB;28275,58945 +CTNPhIaF;3942,19954 +UZjaAdTP;77901,35371 +eNUtNCop;64311,33866 +TweToKrA;30738,50557 +GNOqIvhj;58471,89026 +GonbfVPa;73326,5131 +cWZPAZSg;47972,76500 +nGgeMWdx;83802,45256 +udaXLUca;24640,49230 +QkWSBQSV;1592,61218 +FNbCdyGr;87762,33616 +IaKsknGz;58446,28172 +FigfBKev;74172,72116 +tKhxiZfB;38609,1917 +mlHtMsDE;54928,72737 +uBSXXMYx;89493,15253 +wxHrgZmR;38511,57495 +iNUZYron;35140,33185 +yYTHYQZv;18775,8960 +AJgVYiDr;26317,65046 +pySdrjLQ;43753,50415 +JCMMbllf;41920,13889 +pxOfUdJQ;62230,70380 +jsJECLBw;6628,68176 +qCAlgXNk;84547,35945 +TdIDIjIZ;67990,36510 +UCHUToqI;60910,33370 +jgZFFqEd;1478,35912 +BiRHkyxo;62881,33747 +ZAehNgFu;83499,62621 +WXZGGUwz;26386,28338 +MMhKIGTn;8299,33761 +LJSWnVCh;19664,44562 +aNOwfJxV;24588,84161 +eHkOYkVn;10760,61805 +pFVNMbwP;32426,72227 +YqOSCBOA;75136,74673 +EOBrINKr;18696,52460 +KphuSwsf;64244,75777 +ILRZstnQ;67657,41884 +ORFDlcgU;14846,13322 +yxcJRWLq;66067,75159 +FFsrKiFB;67862,19727 +wLrtqrvy;49028,76141 +WrqpqTLa;11547,30806 +iKBkrSLq;82563,13375 +kKvcbwJQ;3068,26182 +fRnGZrAr;54080,27444 +WgnannUQ;37147,66013 +TLzKAhbq;22642,47919 +ZuwLzCnr;40023,51218 +vFGrETcA;57283,19243 +KCqnoWIV;9932,51027 +SZTAFKwQ;57487,26630 +VkOnLkcY;49015,86789 +vPnaLKvq;24546,61720 +BaMqRrHC;50468,32204 +rZgavmMf;19270,60000 +IfQoxvqZ;32360,87519 +iNyZOLHE;13746,88030 +qfPiNnwv;27152,86525 +rIMZRBhS;75561,7519 +qNPYaUAa;24041,50690 +OXkfUByb;69838,51968 +xHMzwSqJ;32246,86186 +NtWpWpOZ;14235,36170 +HYAAgxEi;40376,80722 +jQnwvczv;3045,85002 +nGccjrBo;41791,84545 +qyRkBUWy;28428,2339 +tKUBJBHI;83584,38801 +ajYPYrLt;23484,9787 +cCTWBDVQ;51482,62533 +yaPiZrcx;86231,7341 +QAUIekvz;86598,35815 +kuNvjFuS;15646,36364 +zFxCmdrl;47308,63383 +LXFezIMm;60808,70962 +lHvhKZME;18761,21589 +zupBMloB;36556,84362 +KaBMyvuG;6398,68754 +SfpPYvbo;20160,51332 +fwvodNiG;38666,83773 +VPKcZVFQ;28919,46327 +BiTCkhsl;75302,39867 +QtIfJdtY;32418,12162 +vgnMmSIM;51335,21063 +XTjNemuK;55566,59868 +cNRdxvBg;39137,29646 +WSfrDPrm;4416,57325 +hesaCGDy;20313,53062 +UCuptRRg;26038,71486 +HFUvPiIv;76820,78286 +pJXOTGJF;34981,62291 +jEGtxUJd;69092,8688 +ETgQgHmq;31322,41670 +kmkmGsaN;76155,71078 +LJvjusQo;26696,18798 +jXiUSLPQ;80470,85530 +KFUjvDEh;54785,75805 +weiPCjte;2438,27377 +qXszqMGa;85844,11366 +AEoixEjo;68707,5268 +EWBdytfY;48001,38814 +rJByegNh;69678,35815 +ufVAqUMT;9633,79432 +Ggefueob;4529,7438 +GsLkdlMq;22818,72100 +UhunwyOu;7502,55972 +JcWoPNZa;59133,5726 +AtWSEcZm;87612,27718 +vKPVmnyV;27823,63995 +mSfznIeB;48486,53515 +iVJuPdrn;35294,65080 +MFXywpnb;74459,53839 +HpmRydSI;68057,77912 +eccJQPSL;17791,41586 +fLldRyru;26260,5226 +SSMpymdC;18099,83876 +qPbLWoAz;82281,24444 +iJXpbjDe;82737,46575 +egXswbtp;29164,28031 +uaEEyZlH;9272,31772 +iJgiDBmi;27212,43648 +DCvNytlK;36636,70350 +JURacNRv;85540,68857 +pKfffPRQ;27579,9448 +zPhSphBK;21923,49278 +ONgbYRiH;33833,76944 +hiIpFcoJ;58856,58976 +zxLoJNFY;17396,65350 +CbSlUwiG;65917,27718 +oilBRbCl;85633,2134 +rdffRNco;53834,2472 +vhZEBYvl;39301,33218 +hQaGaDrd;59065,29189 +toEMEkhV;70531,9585 +lfBhqmDs;57611,63912 +NJurrHIs;79291,30089 +XmXFigQh;28505,53055 +FDAHnHHe;30134,79525 +KhDaoCnP;61240,46531 +oPPjnjMn;70305,60839 +FMYqnKuH;77037,16479 +iEYilurc;50294,14753 +knfFAsJn;10053,36912 +zCKTQWCM;68424,52725 +oHWwCBjQ;64208,53667 +GYSXvmVe;27603,68885 +CMCWeaEN;75255,60771 +zcAgXAdN;86708,35381 +XpFsdZVh;61110,81742 +KVotwILb;67033,40886 +wdIKqzMp;44539,28559 +gMSGhRjt;85140,47989 +YcHCrJFc;69254,54813 +iFrftCTw;19953,19388 +qRPCoIVI;74504,30384 +fQJBxMoI;10942,35409 +zciRjSwl;24121,65183 +zGKWizQs;8412,18821 +BZkociSL;5063,3100 +tOoxUrys;3855,66034 +TOwJRpUp;31178,6769 +VHAiWwPy;19257,38105 +DGNHBMsD;22521,84205 +SVkjnCSq;6868,83122 +vXVCVYAi;27528,6838 +vuGjYGRH;61287,17496 +tyRgPErt;63988,66268 +hjxYlveO;73000,57966 +EnXTkuRF;27902,62027 +soByvbcJ;45740,30056 +dfKIUiKv;42022,12687 +tQeCqxsQ;75935,89899 +jHIEVdbI;70724,41489 +AkBaAnSW;45031,22522 +KUPYJUTD;72211,48405 +BTfMNDnU;75839,40806 +QNVdFgFL;28940,63306 +pJQsUZEM;31285,86028 +vbRCqAcW;29049,46182 +dhURCSNN;55312,50298 +mtFpJzwK;64336,30511 +eNLqLigQ;85435,70307 +acvpsigm;89455,38754 +ZKmHjuFr;44799,43955 +QeMXBecC;56387,29406 +ydWDBaGS;17359,1174 +xhWVENtl;20602,67784 +crnywqst;50901,3203 +ZUOjBmhw;52421,89340 +ZPmTAqSg;66564,22960 +eddbYXmO;38103,18576 +wrmczjzj;75613,25552 +zRWceagH;12454,29115 +UhoJLQmj;5780,33112 +jShtbWtA;74899,51108 +tHEnlVnP;6824,65459 +xyzTmWRc;75590,46800 +EloBmDZU;50672,45442 +OlmnXtih;42176,36365 +OzOmgSCv;81514,30921 +LoKMBFhx;23202,22880 +MQuDlyuX;79704,89267 +KFDBbWXA;57654,34153 +pRrsSUcZ;38816,13039 +RAKWZqfn;57106,87392 +rzUkinOq;51732,80625 +HFBOIhCo;47427,27895 +agBKraGK;10396,10561 +PXdjXkHq;58345,88461 +yXosCgQb;17640,47264 +YtPZHeJP;43784,86891 +cdKYLMlF;44104,46887 +BqvparoL;62688,67776 +fjXyNZSd;14913,36443 +ueWkFYZR;30948,6607 +UgIahOsz;41954,77532 +rECiEktK;54695,72568 +oCwYwupJ;11813,69340 +dAexPcFL;6113,9426 +EbhrEyxg;82092,39241 +UjzRTQmE;14596,41306 +tIOFElNV;40753,43086 +wnSxFRnM;9062,39619 +LlEuNQXQ;23617,80118 +iIGcqYUb;15273,16576 +aYMTEixS;40850,32755 +hLpILRji;51392,35390 +wqMcSulw;36550,86959 +hOnxOamp;69221,76955 +vXoBWjJS;88380,8469 +OHksbGxl;53131,16493 +TgNefoUp;83393,22802 +wQlRTgGp;11139,5519 +nLKBkBfP;83835,85839 +zUtMkiIe;11641,68116 +BQCjxhJF;52220,73745 +nCFRWumU;55700,11422 +VPsHOjzv;7538,81764 +CjCOpxHA;28431,53335 +RWQMCIqc;44772,21993 +UudAkMcr;64166,45320 +KIcuvouI;23587,21317 +vPluHAFa;53932,8650 +DdOrrsBS;42162,39969 +KZZHRKDx;86610,39678 +oEzovsyS;61890,41685 +fovYTIap;45513,31049 +qbcPzcrm;48718,57348 +LwClwjQb;16346,54386 +gScxvCjc;1424,18339 +RALkYGsz;83374,78384 +vAJVGZTb;14368,59056 +oNDsCbbM;33946,48186 +HTdCdBVM;88572,62521 +aXVZPxHA;59170,62154 +bNUjeljL;60080,15346 +nunjAJDb;50805,75674 +nsBgeeGC;88872,40438 +PIrnrHqm;37742,51451 +ZPydioFe;46437,56987 +oMmMsQPY;70054,37003 +FwySfhsb;71454,74649 +wYhfBioM;77147,66635 +evmCgzgQ;36596,26400 +yQsmNTwx;30090,4137 +fGgWJytz;85022,73779 +SZTbFiFX;54983,29940 +NqGVlWPd;59810,57664 +oYeYJtNy;76524,55960 +orJfDJdw;60468,21964 +IBDiCRyr;27011,23245 +YojXKptC;3868,50910 +QqBrDEPx;58816,61473 +PCqOIMZE;86664,80600 +XkAvCkcb;26666,62216 +cSMKIVgt;84377,30472 +ZtFAnzEO;85090,73540 +CvlXxTow;75993,66841 +OBNImfkg;77111,21774 +HxgIsNbC;47788,63902 +WcfzNyAJ;22641,44894 +kbqijYNh;82307,46111 +HSFJknWR;76085,52580 +JmjgOlVC;41691,26844 +bIfIjtft;11018,32782 +vSBDcjfg;55969,53257 +vsOyFrmg;39662,56652 +IvWCTqYk;39808,74609 +DcUdfCHI;40464,24813 +GQBafqtk;53810,6155 +olQKcBOS;79106,28168 +LoIWdjgt;17264,57856 +yiFzJrWK;73354,45333 +rNzamgPk;85001,70193 +IQhMLTxU;37177,86275 +DgAbfMhG;51022,27615 +jbCXizYo;34087,40622 +DNjVYEML;37855,25338 +NulCFqln;87442,89414 +wIYWEKLC;10878,78658 +WlEQGamB;14558,8641 +zIzzQDLw;72264,5988 +EQWZDoDK;65426,36391 +JMhaYcAA;25754,10177 +pYzEHpkc;16750,62255 +TjsIzwtA;13575,61374 +XfuPGMhP;18749,34059 +zEXNXcSs;16099,63389 +LThhTriB;15694,61165 +DgsaEWaW;59296,77856 +eDpcrCIS;56315,62048 +SfmvteHb;83175,58642 +SHIqyTOX;54916,49465 +YALiAhkc;75819,67759 +scdriJvt;9745,29389 +eTIKBVRX;13508,20799 +bZnpjjCA;61393,25887 +ReaLTjuf;81617,58576 +VOZEhTTb;41175,58660 +qXhObmNE;64244,51978 +znRVSWbW;17746,73577 +vTtWgwnK;63447,88943 +ZGcNYpcJ;37232,9611 +XCmtTrQs;6176,57830 +NLPpNpNw;69265,74495 +KjhIblJt;29142,50259 +VfXdJChA;46024,20568 +opARlVrR;20359,80505 +IDFXhSmg;20031,70054 +DJzVodgy;5430,79016 +GJZcLyGd;21377,20082 +yWvwrWik;48874,32328 +PPmugCBc;17083,59153 +kGisQEXc;11550,89413 +JVhVofDw;73448,26220 +qIveQzzw;75144,48681 +ORBRCbwq;54962,66234 +jeqcMiqR;22538,86229 +vBUTuppL;25646,45991 +iZEexhgi;29585,40923 +xXaQliYP;58058,17803 +VfrPmURB;36329,55653 +HNrizSnN;77127,53497 +ZLLSYtND;13562,38552 +UNsGjeIl;53443,86521 +pVbkBwVK;2754,67035 +snVdmfEB;32600,69861 +VGtSGyLf;6146,66766 +lgrkYdKv;26456,67689 +VldOKbUe;16739,63928 +DBCalfii;20090,34754 +ikNLfGqD;10532,52109 +USdvOLnf;51283,83198 +LKgVnXZw;43223,28607 +hrcTJsNm;56594,42137 +JQsZwQnw;77841,88960 +Raacjgnz;44166,49959 +HoWNpVHm;7660,35286 +CubdpriL;44903,41620 +ctlwhvXr;21307,38316 +vkvhGjhQ;42890,55772 +IaPKlTbo;85781,60453 +LFxuMcnH;30667,17773 +GZmjswPf;60748,68020 +RFuJnDJE;63044,14467 +vwKPkdAv;64779,16574 +eztNPhwa;17057,79948 +ZlZpMpDd;19694,81290 +pRIUDiUK;45537,44011 +vUYtzHUF;32764,66443 diff --git a/src/data/entry_2_11_4.csv b/src/data/entry_2_11_4.csv new file mode 100644 index 0000000..06b8d45 --- /dev/null +++ b/src/data/entry_2_11_4.csv @@ -0,0 +1,2049 @@ +username;balances +bUabBKmL;21062,85834 +qqZPoaap;5475,50220 +SUIayglo;33657,6957 +nuLIHAdS;8144,32953 +kldzWprZ;83177,35965 +VrVyOuZP;61732,87222 +kEgjGiJE;55096,79372 +njSqvvLe;46755,37282 +YRcHlpkw;86797,72393 +vQUtgbym;87870,70214 +SwKsAMXi;71962,67520 +agniEDPW;13658,1115 +kRCZEXhq;39406,4310 +AcijqnaM;76090,12479 +CncCCXbP;73423,38622 +vnMnFldX;25232,53171 +AKXqNFxd;80609,82214 +pZeEYiGF;63185,14116 +szIKVlPa;20351,5025 +mOPcyvlI;54001,45669 +bsZBTvSq;7982,82724 +lkKlNXdy;78492,4445 +PdENbuqF;28182,66544 +ItIkmLva;61302,85659 +ufjHNjVI;52864,83306 +QCVXfske;42969,77772 +WbQocFiP;59281,24490 +urufbkGd;64575,76763 +skfTUTYk;39339,16750 +ARLKSRzF;15100,45519 +uUbElxAY;61344,71346 +qPMAZSvP;53548,47111 +IXnrjxgd;45497,7412 +ZAdPSqAN;6254,62969 +AQDnFlJF;52805,48781 +wbUYXNuJ;85671,58226 +SSZJmlqU;25084,9004 +ZDMKDDyy;6270,54677 +EWUScrOM;18346,84112 +UNXCSMji;57668,59658 +vrbqptpe;15101,69350 +zKtJmksD;15781,49818 +drAMNKDD;49072,13913 +XKAPktNJ;61484,8024 +ZkKLYcJd;50643,70199 +THirNIGx;12825,21095 +czeCNwwF;50967,51282 +QCmvNeiP;77914,28748 +tMTevGnb;74505,89294 +JRUFVLeG;42616,3148 +LhujXjOM;56654,71141 +HDGVXfhv;7818,37798 +avPLbhIc;82679,42493 +khnuJNuh;18347,38984 +TtXZWSbH;51580,85048 +tIjNGRuR;81604,17417 +WEGFVmvG;52918,37864 +evUVPSnn;75112,17469 +KEvllLBI;6468,55551 +gCuSBSqm;23646,35052 +unxVhArX;7023,4398 +oJyjOiMZ;65322,72163 +ssEEnBPg;16210,86452 +DOBkMARt;18228,37297 +ebSyfJOP;13290,17582 +JXonNaeN;45680,87282 +DxOxHEVP;43902,63425 +gXFhLsEO;63807,61929 +nzcbwnHl;6023,13403 +lFgaKojc;12430,83562 +KFCtaJfb;40166,76228 +AFZXnGbZ;79527,48031 +iMoUWvhl;42143,71393 +mfMVZPas;27462,82717 +fFmrZCAs;22897,73644 +whKloJHc;49396,15276 +YjambwsF;57183,79359 +QFQNxRJw;62700,59585 +iZzkZqgP;1059,89841 +sqPeztKo;3341,3453 +mGFeEFbV;13865,81372 +jjeJWrUo;38107,87228 +bLlZujjb;65085,10454 +DJgJErKy;31133,61229 +QjdhdmTJ;7799,17448 +wSmQukqz;85290,12671 +QBvRRfqp;29680,74746 +pdiLkxcM;26226,72667 +nPllwwvP;9033,30820 +WmHDPIlb;65295,6923 +uoQNHkeU;50049,64503 +NEMscaNp;6186,8968 +dGUaOYBR;15262,77825 +PjHUfyGA;29314,11091 +TmBpKJOd;56523,8086 +iUnYDhel;3070,51594 +rkezdEnN;8342,45770 +hKRdUILV;57723,19034 +UdEJvvTJ;69343,53324 +IwAZIzUf;75380,69648 +JgqUOleh;54804,55440 +oSRJSkrh;39572,14515 +cVRgOrjK;37469,26259 +JTvrwjzw;52378,79078 +eVjhQCHw;46207,66893 +OOlcQBLt;5598,23576 +vPvLOeek;39523,27071 +OyHGgxGH;72920,45174 +EMKZFFRS;71915,36784 +HMOvdIVv;49133,2156 +LegLddmK;35137,54965 +VXHrUpsg;87636,22207 +DeCMGTVF;13464,77078 +TlrAUQDj;78270,48747 +DcjkaIig;13661,87314 +svUGZPGt;5601,32795 +FlGfVKMs;50441,77176 +yPoPmqFI;20772,79987 +fRcPDIgz;73169,11506 +oJUvJMaO;18044,15205 +NwRdIjPl;14679,33213 +eieNHTMS;33508,28807 +HWNLQJby;38705,4254 +EKXzaVcy;37478,80158 +oiDZqgdd;9669,59577 +XFlMaSgh;86247,22464 +xvuqupBM;69516,39982 +HsvuCQEY;68201,21436 +HAKfCisN;4414,69215 +lMUThoBe;41681,57221 +NuCqphfX;47119,9663 +EjHpSSVf;53586,53066 +LaKbzSrQ;28328,64803 +PTHGOrjj;80399,19740 +uhLxCnNf;5383,86008 +LwuLgbRd;82459,87542 +NmohhCLt;55102,79427 +MTwsBYJC;62315,57700 +GawAqWJF;73765,62142 +wQNgeBbt;5192,38087 +hlVbctqY;73416,67737 +YJWWEWCE;40401,18343 +NLaQHAKN;65313,32382 +nWXIiCqL;36627,48999 +HxMGcWUX;88951,28432 +qSpAYmaB;67546,66951 +NKSUCuEP;27831,75485 +CBKUfmMi;88888,50224 +yJoKLwXZ;66444,48851 +UPNNsUxe;26725,19250 +ENhzUZeh;19759,23351 +LfwerFrJ;15198,52287 +SSWvbAAL;71519,80464 +UlgUgOtf;27937,47648 +DPXqCsNM;20092,25876 +WbKpPDYV;50079,43193 +fnrJGgUl;51437,65582 +elswopqL;29377,5966 +bvGViOXh;8394,85833 +QbdKDRlP;32161,85459 +tSrJkKNi;32023,5922 +WBKTRiUQ;3601,37085 +CeDGbhjr;77567,15735 +CLoXwZgs;69167,45124 +ZJqXhQod;69144,58554 +BoaEgDGj;12548,66436 +JXwmjyXK;24407,24935 +gRWXsRqq;11196,63462 +UECHgyOS;12834,26841 +VkFmbbxW;70074,14413 +bMavxdrh;23114,69110 +WNzgmZXC;28162,6509 +flwtMmKW;22420,88677 +tupIoCLM;40706,33665 +vGxqtYUy;17603,17762 +nxgmiclj;1445,78488 +NKrqlEwb;80892,48281 +wHLFqyjk;89101,17197 +vqMFvGhc;18589,36299 +MDQBSZVw;42593,40214 +pxbgfEoC;52605,44850 +dCehjehD;9784,39216 +gsRhmEjZ;12528,34774 +QVerRyCq;27106,89297 +kbXYmnoC;71860,48832 +HwzcDaYv;52123,22943 +AIHbKkxy;65626,43177 +QpZDSCxe;50765,45070 +elcGmiqi;89402,83943 +wnQuVCPj;86432,18852 +gJbuHyxf;40977,23871 +bpDkwQkM;5127,55989 +dzrPiIDK;30548,18336 +OvyzojGj;70394,75186 +fGtkhzHy;29005,12936 +BnxJQVrX;67019,13686 +HyTaMgtz;79856,75256 +vjggLYLS;34917,10788 +EZjwjWjn;76756,27044 +nPiltbEg;84124,11256 +URxhdYPW;29766,67689 +NYSNLORO;52813,67154 +EmBDpggG;69346,79106 +bQCbDYIu;56044,18915 +enAgUWzr;68266,38531 +LJZWDBBi;77016,74592 +OetVmAlM;81272,5308 +reFyVCne;10209,21093 +EgQszrJZ;84295,22353 +FPDvtrkb;37317,84542 +ueoVVnYJ;51686,69873 +xZYptHXp;43202,11376 +qWaFLIny;75537,9377 +xzHUlNxO;71784,76746 +EByKnZII;48311,63275 +dxnsxObM;14728,44883 +lKkUPVpM;55301,32074 +frOvooav;81123,31513 +wokECRfA;35100,85038 +OEhrxPUk;76380,69452 +rWvmxNSW;22145,20951 +rbBEDPGm;64895,24245 +PoQWjSwM;49973,48637 +YprBvLnY;33874,85667 +ENoptFeJ;70505,80343 +oJdRbOUp;66511,61549 +vmEGFleZ;57874,77505 +NQUcQsRR;88683,49997 +YdGDmNYT;64960,48278 +igPIZNCh;11750,28273 +WJUuCXyI;35371,83228 +GfoHHnbq;40041,79598 +FrTLacPM;32810,65344 +JRnSCxtQ;2120,23176 +jfQtItDy;29090,61816 +RWWLSGdS;73558,21067 +iMLxUqoB;81154,12807 +UAVXAkNE;53727,58525 +vLkXSIhL;12792,45893 +VIBNMdub;7872,81384 +axKcqDJS;61653,63545 +pWQNbDWI;21155,58994 +wjGwHWGv;86159,47198 +mKuusLBr;49025,66456 +khknXCMA;27524,1673 +snUljgfX;6622,57647 +LLPjlUKd;41834,53140 +MfEuYsOl;18537,15358 +fdcEAlJL;44364,31738 +UXLLywOk;1173,42615 +gBEHBzgn;72167,52616 +hdjJjIVH;63307,70851 +pgqayHAc;6416,21949 +RBNSiVVD;1968,29042 +PhmywZwN;59278,1818 +nyvjQVQH;81902,7033 +NPBhKhmR;41581,21961 +YvFiRlih;65228,75073 +GIetXhjV;86875,63413 +PfAxNvgs;75697,84568 +mzdaNUdK;25189,7418 +FJBGFJYx;74623,63056 +ttiMehTr;50250,42806 +hJDzmtXK;15905,61367 +TvAEdHFY;54029,19260 +dcpxFvVz;76838,29142 +PIWoYHli;59128,83857 +IJQlRvtV;86478,12245 +DTzWaRUH;34057,18917 +CwVUJWbt;20970,35378 +SMFKfzkf;35512,27977 +FkqZufnv;8476,60938 +RyYkNIvJ;16954,1427 +FakTwJen;69137,64238 +lZGuIoQL;22050,33370 +jOBcowan;60028,54777 +KieFWvrB;39978,32431 +HVMCpUwW;56034,38566 +KBaFkVIY;65997,21551 +FyoHadUa;36508,4429 +LSbJksfw;10673,66301 +AjnpgfJR;19833,53379 +TlMWWqqv;9023,86765 +oozWBNsm;66064,12896 +abfZwobJ;82250,69514 +VGFBCDds;59364,9735 +rWLnLdkB;41709,79776 +nRtoumFw;80243,24539 +bAqfoETC;83324,46504 +pkBOxsZF;49649,4777 +yRSsPIef;84315,69240 +sYeVTpcY;17318,49367 +XPoJckBn;86008,84238 +fgjQepSI;47525,74504 +CPNXRQZQ;51732,26531 +uWKZvtol;34732,62677 +ObPGMyRk;32271,23706 +xQIbFJuG;55724,37607 +DPkRQJNq;48286,44353 +lMIQhqiL;54701,13432 +DMeqTwGU;48740,9367 +HgMoyWbK;69213,26512 +HUwIyVaH;46477,10513 +UXYmqxAF;17950,51413 +QSbLywhX;69469,43706 +QeTKtfuP;84715,53516 +eReHABtE;65854,40446 +pLrvLrJs;21693,44896 +tonpoHQq;87036,30779 +xLopZhIA;29554,72006 +wFUevyHl;34864,23385 +InjNtNlL;14346,76199 +KDzkGasm;7410,79172 +SQvhyujF;20065,84072 +LqzWiHmk;69567,72010 +izkCwKQh;18844,12613 +kOjIOHAR;38344,67855 +sCzIjBEV;76356,56230 +cauGCwTx;41530,43614 +RVUOzbZq;81949,13728 +csayWQXh;1382,56829 +kfQFakiP;57166,73528 +qwubUCIB;63966,73829 +hrMgHTDB;46046,17219 +OtnBuEZq;31365,65920 +hXOcTRge;60575,28442 +rgMyTSjU;38809,59901 +BGmMbZhI;83859,80055 +rcSTOGHi;21943,48100 +EuryikoB;87338,16688 +wRUXLgVk;15895,42595 +jDxbGTMl;30841,4728 +fMpuNjjB;45075,82655 +jueXKhnX;87706,24100 +FiWwlnyb;19270,50830 +eyEdxPpj;39231,60917 +HFtRyUgb;10818,3924 +FucEeObW;59264,27578 +jxYrusRg;22058,83141 +bizkbyJf;55413,31050 +RDifOItx;15950,78957 +YVTnyIip;87384,29602 +depbPJQI;40810,29026 +hUaMLNyq;69195,50821 +MbaAbJdb;35768,42706 +uYNrHlSd;37111,5771 +LCavqUMr;27092,61326 +UsowJbHl;5766,72588 +WkXCpbwb;22463,5393 +MaZMEKuw;57826,12128 +tZDXyhBh;53732,44242 +ysWLITQc;61851,52402 +KwqtQIrG;67049,10192 +LoIQEewC;79348,79590 +KixuJrtk;22244,7158 +FDpqAOJg;19943,16093 +zkelwSKi;27493,22500 +JHojSBAz;42315,64469 +TuqnGBDE;22993,3120 +MNVEULpZ;68410,2276 +lfUhoCVz;58315,82625 +XGhTAkvA;28358,42756 +yAVvyhHl;18704,17580 +bSPbNinr;61912,35466 +XqlwnHha;87732,42168 +egLcWZqw;46904,23167 +odTneuWB;1899,59815 +IIomqdLC;87188,63134 +QRZPAxQN;3089,68518 +jSiiEmyM;10871,68029 +LzaSEWMg;9097,73174 +LFOWMzLx;27458,44038 +WjnfalqO;15028,71974 +flgduQqW;60790,27858 +DJouNpUx;71742,29106 +ttlIjASp;67917,51931 +tGMsUfhK;45348,83994 +AHnGxeRD;9288,75815 +pRlELZUR;13262,45228 +zkErcagb;25131,40172 +bApSKMBK;24551,46860 +hhaxpPpF;18512,36606 +AGGhuPXi;52067,55077 +rcucYjWX;9036,40805 +lFxBIyZW;58908,29988 +AdtQgpGQ;85827,72884 +mfUheATl;63961,79656 +CBaytZRi;32432,41059 +cDzyUQUH;19385,17141 +CaptVLgV;78157,7552 +QGlgWuEL;54658,65439 +KNBWmCIQ;82116,10718 +HZgvynPg;39611,85098 +nUOeEOlo;33944,84345 +AwzexBwI;33560,1185 +TqfLEeBD;63585,83861 +ITZschtU;44233,47328 +pezOmjKC;83849,39796 +hbQqYPgb;2949,42621 +LdInLAjn;65949,84522 +fRYTvXCk;72378,82975 +HneurJJO;60259,75098 +lrmZhCEs;51755,65399 +mDAjKInr;77539,33854 +ZUbRSWrF;13584,79921 +WxUCydkj;73961,76587 +RecaxHom;72349,60397 +yXRDWSVe;16119,50620 +Jerewxkd;82236,80852 +vfdphPVf;70789,20418 +KRqZsEDc;81475,87803 +CJZGiKZi;40257,48462 +vqzGzshU;72485,21297 +eptHiPIJ;73260,9868 +LIwqDyJk;10904,60410 +uKLtbkIt;57561,23587 +EjTbUqBm;74711,50648 +nseZTwWQ;80450,75107 +GtYxSVXM;27583,6981 +DISEYJzy;16380,40491 +evlecnbh;89427,30184 +NPXNCWBf;70672,39060 +kpfbmePA;58748,14954 +NfgPWYZD;41095,86228 +qyYTHkJR;8214,36224 +EldGRYUd;86007,62434 +VbjgqwmD;60064,50981 +oLrUEkWN;11843,65981 +TqwESvVS;61042,62196 +vpxyDvqf;45163,53837 +QJuGzKVP;8821,30270 +NWdvSazI;2526,80371 +iuuUUUIQ;19072,73252 +Npqihiie;82215,53633 +MHOYhOts;49520,78253 +ZItIRaSg;59097,72592 +hPkvvilk;53780,22958 +XavxpUOH;40967,38565 +WEoBeigv;18152,37830 +XUGBluLM;29256,16089 +LxhHYiGj;59924,2782 +hxxYawyJ;70814,54036 +nBZcdKlQ;37344,23639 +WScxzGvj;49817,20169 +UXKLmMOe;66108,81918 +yPgjdNxI;57214,33739 +zgLwiZcd;30614,89610 +eBaRqrMh;79115,58461 +kMQgmVLV;79706,57620 +wxCwOaJG;75670,56485 +IJCPOhCY;57182,32317 +EKWsgLBu;17023,7359 +TfEIuamY;15910,29498 +ENpauOfi;24762,60871 +ChRozGtD;14563,85046 +YjGmsJhp;85138,64704 +GkiFTIpC;32214,27106 +zLKoOlHc;7689,65616 +lgDtAnqH;12011,5618 +HPgeubwN;65879,52071 +nNZLiIrk;48132,59380 +nWSJSHpf;36164,62736 +YyBIULem;54345,41676 +FCHwybwS;59086,33964 +QfwTsRlg;25078,65189 +xtWZcsms;71491,64074 +vVZTyotg;50943,60674 +ERbqWiQx;20394,29323 +QfYlLTgE;88483,41690 +whjdjASc;56710,44064 +VFecfeTD;45562,43812 +HgnZhJKV;4285,86880 +CvEgFzNl;56354,56003 +AAsNjubu;13323,84749 +kRabCITP;55756,21853 +eSNmdVXT;33595,22624 +LwpBnkfC;17802,75126 +aiwdEwLW;9073,2984 +rqpuBdsF;80258,31579 +STwYFrmg;16533,2906 +pYgcGKBg;63227,76208 +MxveeYPq;6348,35463 +nvnSXfVg;25384,52595 +BuSxjhYY;40226,82143 +MPoIyefu;14952,54666 +hUStXpyX;26228,64073 +UmYbnpZG;66575,19232 +xndebzCd;19961,75166 +WXRQDAcA;67194,34496 +ijnwfliL;65989,66218 +kJCwtBmx;83500,12458 +XgAyjKks;22210,50719 +ZXEosbBZ;13734,12279 +cgbsGIGh;3925,22007 +RLypJdqS;79618,88327 +EkPrDUDz;46101,81631 +PmLMgXOF;26504,62816 +ZJXgyeJh;1949,81062 +VrfZAoVL;29536,35131 +WxOGEZeJ;82358,16219 +TbRJxxdN;15551,73106 +jhDQBUhV;21287,73111 +EnvfKaDt;70154,80491 +eylOltUn;50771,1209 +uADigdVv;49867,62398 +XSYmPfts;29369,33568 +xcdznZbz;49813,22809 +aAUIIZel;68444,12698 +jpEopcln;9829,82618 +iLNywBcC;68225,11386 +HxiLjInr;75958,41767 +brpNNLQQ;38095,17876 +QRFDXtUI;61320,11565 +oUafXqNQ;38186,39980 +ZogdluEx;14893,30797 +KgapQQgl;85220,46868 +LfahVCXo;79364,49647 +cQMizpCS;17326,77341 +JbLznsbu;73951,77131 +BbiStDmB;10147,64035 +zKFKeTUs;79455,69887 +quKaSMpV;5664,38652 +cZrdziAA;73184,10734 +TsmvlPOs;78994,2458 +vgQJPAwj;54046,16182 +PicfHxBB;82725,23855 +wBiHznXI;37110,37954 +vVjLjgeF;16265,30737 +IGtkjFUs;17987,83643 +WgTeczXt;79465,67226 +kxRbdKFw;37394,65211 +kpkEnrkV;68720,71294 +LmiiZSCt;14233,39724 +WDLhOMMT;1179,57776 +KBqxtEAw;48629,21011 +BIyyvfOE;86561,87357 +cEwkNoVU;21901,24799 +nEnJHBmg;17646,78508 +FioCWbYq;66334,4343 +CNYcxeYD;72764,28943 +ibhEYlGY;56135,69420 +MsHbdSDk;18820,13477 +vHVHsUbW;51021,24169 +oXchdMYx;48011,27239 +vQqwMsTQ;88605,62702 +rRzKKSCZ;21707,54850 +qXkqAHZg;37119,44324 +UDcQmiqg;47146,37044 +YKenftaA;69430,18072 +IdtIAZJn;23732,66377 +PHcfhfSX;27208,20483 +uDwyYLoL;7860,49991 +EBMeSsWk;29813,38298 +AetzFwaW;60284,80415 +FRglNzbw;66895,88080 +KcrttqeS;64360,44444 +zWMrxPEn;19499,22889 +ZvabScpd;41467,39326 +JlUYjUTB;32926,66064 +qZbDannW;44804,14289 +BnUUgUhj;27703,52314 +yIMvyITV;74249,30995 +xRvqNgdM;14235,7277 +KYlAUINH;82782,47872 +FqJhhQRY;76665,49226 +eRVzdxCo;78892,86144 +XoXAbsmU;45125,70527 +pKdmoTqK;73969,49649 +setdBNTa;23415,16269 +YwUgDkiR;50417,6441 +zfHSXCmS;45210,6697 +bOXZPJjG;48952,20686 +xgjQbgVU;53694,80803 +golxBcIu;56957,78683 +JVRYmHOZ;85747,79030 +GWEVSHCP;6353,65364 +ZhhAYcEA;8375,67445 +zsJUbeKk;89713,83026 +NeXXklRg;85860,86245 +wZPkEhMY;60202,19903 +nouPxerL;50310,78329 +oGRtPwJa;64472,20844 +xSNdNNll;5373,6625 +uLxJakBn;51380,53347 +LrdWFcSJ;11857,42812 +dtnstESF;20989,45616 +UTUYabDq;41490,56120 +VDdifCeg;79380,41446 +cmQovLbE;14910,31998 +JjyoPXZo;14501,17265 +knisMvbI;44208,31859 +MOYRPJKc;23593,64371 +TiKtHjfl;58768,27827 +rhItlEPM;27866,63712 +ZwQTlDag;46709,4237 +VGBEtCfO;40604,19459 +RYyjWRDQ;35141,81642 +CCsPqSHO;36267,6700 +yIfIRjqo;4815,12641 +bLnpkipv;51520,6852 +FISafMBk;59741,84607 +mVsjelcM;44920,23982 +cJTEtpaE;38993,40791 +pGBvTEal;43392,40213 +KzWKaUxE;68938,40928 +cRZHXhPx;61073,54746 +oRdzBfie;5592,2699 +mSeWFDdC;38668,20336 +CMCldHMs;20468,33162 +JsqFGchD;8989,40815 +WfWYtTAZ;14396,27422 +utLWzbet;64700,89607 +lLxrJksW;18889,68298 +owWXWxMC;45875,21259 +kIYUleic;59699,60635 +AenFEfEF;46891,17067 +SSfwOsHA;18848,42106 +Uedbneqa;38879,12060 +ERrCdQrb;72548,35992 +YLMjPYny;2842,28229 +bSjvvNWA;78267,19642 +IOEWXYPu;37681,52187 +GJxnRzwN;19986,25607 +XnoQexTa;68504,73831 +OYJvUeBD;27648,70068 +gYYnsZmT;54429,15261 +ntAetqUJ;40339,9866 +vsnXokyT;82211,23545 +RFXOYxqZ;28058,76604 +EZgcohYj;27974,11368 +KNwPEpub;62234,76897 +uwggdLfI;49374,8445 +JsmEJwxl;64748,65954 +XrKAfVCg;86592,76889 +rCKtKeNM;60895,54416 +nLkDlGbc;11222,52625 +pgsHzoDs;81002,71482 +PXHJDYGJ;43905,17471 +TXQBmOOY;21112,53978 +KepvKIkp;65976,69423 +YWaGoLGE;10881,45948 +NBZYpNpv;39129,16225 +mPfOxYvZ;63001,66447 +zmmLzwfX;52618,60608 +EJWYmNVG;73990,38800 +ItTzQKLs;75727,40907 +lnsaieZa;9849,76738 +hRroXiMW;81562,48332 +HMovTEBL;79103,6914 +HePcKliu;6402,60124 +HQeMlCfs;40643,4427 +KUIoWVmg;68466,9172 +ySPRRXRQ;51927,18572 +EjkYNbvB;65154,80270 +fIOiOFmt;58030,68550 +YyzqMAON;86519,84699 +TRCazsCN;53863,80568 +hFTSAlmr;44396,41741 +jPvpuuGR;55760,13045 +ltIvShxY;33317,82601 +mYqJNTmJ;84572,78954 +yQXzAlcP;20286,21107 +NeRLMvZe;66294,27944 +EgBoQNWV;32510,19383 +kcxUEWuX;52401,12918 +hTtuSAhO;75674,33890 +fQVUMHsT;72839,55732 +imyfNuPi;6587,23312 +mlzqXgKg;5404,37492 +niQnFQbb;74127,42769 +xnBiXRaV;67290,6430 +TmhNfbuI;79234,25136 +ArkYjWYK;62806,55280 +RGWctZgM;39417,63489 +GaaSDnYm;19125,89283 +FteVWxRy;46058,9502 +wfLBZztP;72463,39378 +NVBNyKak;7678,20450 +FMvDRkaS;22733,33686 +gbSCIlPU;64421,6815 +eDHurNKv;39623,82875 +gmDoIZaa;34296,1527 +oVfFYRdb;42036,32325 +EajjpWYR;45921,48349 +BQqnADRe;44182,59127 +BHsgMYAT;52705,17678 +IWeKqJPc;8837,81892 +oLXDnIqF;1214,87575 +VOfdfLGV;83599,6756 +YFqiiYwn;36863,66022 +iktAJNmS;24635,46837 +xdjJpDWh;45348,48064 +LEogTFUO;72721,72022 +fQrevdsi;84530,17258 +jcUFTZSx;32584,29734 +ffAtBsDb;25596,20166 +PVSspOjW;2511,39063 +deShoDxr;65041,57212 +PndexXbc;56547,23900 +ERBXKmeR;40773,33555 +WCzwYQge;6152,87611 +CGbErpDO;32811,29186 +OmXlVQUM;37215,65684 +tLcmWVoz;13125,72478 +lJSwjLRA;45819,88005 +iiktKptf;11016,23992 +OfcXomwo;51442,32753 +SjCbUGXW;32673,57573 +INwGiXNF;38727,82480 +bQobXZMC;80479,75867 +idFDfKED;68616,80942 +OQTWnsat;55363,5945 +poBMOYzZ;6884,85931 +ZlYqgFUN;40862,8368 +OZumjgjU;40463,73443 +zUxITbZW;8677,26870 +ANlqEkeC;25639,52163 +mveGqYmF;37587,6120 +EfWRtUOq;30132,88683 +YWZjMwxY;13659,13149 +MBmHHZaW;65079,44557 +CnnYxOxD;15504,62132 +GVzvuNhX;1193,12265 +GkpOdCrP;70098,81588 +ILaZAchP;38723,89905 +GLFemdYo;82890,81734 +yqsdcwyE;50740,56145 +IPtqiGDI;31754,64421 +VahssnEa;26694,39685 +DMlPKxfB;22298,49309 +qySWRHVC;8391,76722 +YoOObwmu;65752,17553 +uvdTedHb;10549,60288 +gUWTWhOy;26614,82509 +XvKHIPSg;43511,75151 +WEvCcBWL;54912,68858 +MvfHscgn;23949,15979 +UqsEQQNH;20192,18017 +tuESDJYI;41428,22035 +LQSevxTq;58552,12253 +RaProWxj;21932,3869 +kaCxnwuY;17521,86101 +xKRclgSf;36112,66369 +wKjVZriF;24182,42954 +pAkIqmDm;2867,22835 +qjjXlfNe;5612,62637 +TPQEjlis;21475,2671 +rvzGvnBQ;23291,38568 +BhjByRjR;7023,80168 +aTMurdAf;8378,45675 +HFRnfSAb;32297,31091 +eSeqMwHf;30105,46017 +NJAzJJyA;30318,63005 +fcnINsMF;22376,73654 +rhgoBTqs;51991,82839 +hPKYwjpp;54818,20326 +yUEupoDP;74464,60289 +ZrOwYlOg;9742,73591 +wRZNvMhR;40689,86970 +ZBXUGSMP;4127,27709 +ovawArYi;14426,10419 +PwvECBOV;19278,14411 +sciNOFwk;35484,44705 +mJYffZRZ;35080,20471 +MkGmihKX;33267,66321 +mQdZKDUA;74715,74824 +bRCfXhIW;30923,48633 +MwjQFFHd;50448,3790 +NztErWTY;21948,32825 +SddmdBvx;36329,64356 +QvtEepjq;56982,46784 +QWbFRtno;87432,26668 +meuyBatp;30498,72185 +LaXTjqxp;36435,41558 +aHIccfnR;1475,1272 +OGmdPWUg;50383,4518 +UsEanFrN;67262,50681 +IOPlRnZR;86096,26337 +JuJEkwmY;35654,48952 +rHtPCeMr;63744,46057 +yeVtPFmn;23752,43116 +BfASDwdj;72745,15456 +LHckblYo;56604,45611 +spiJNRFJ;41326,66563 +imnjsELG;11958,25256 +RAwiCPMY;27973,18717 +bBnHdLts;9672,42048 +RQeCIJrq;84076,2523 +MvvMGdTW;81273,56482 +MkGuGyhW;24089,82285 +xtSPhTyf;34939,19209 +MjtzbsSI;7457,79702 +QFNbyxSd;20983,86638 +jqqmEtkE;48425,67632 +lSfeslmM;29615,21753 +sBqLnrVN;23364,22722 +VnyYrkUN;55008,89484 +gVwWhJZW;51326,4766 +VbyGuTmn;21812,72419 +qJcUuJbl;67973,27112 +hLTREJIC;56893,88520 +ySGUZqSy;51172,52909 +zNeEnyrT;42459,84036 +azoNCAha;42137,19981 +mQmDnfDm;59230,15420 +dLPSbdzq;58449,89474 +aypraWNp;7071,52491 +IZZJZfGF;23302,40167 +PjVvsuHy;39031,49517 +tvgpAfmM;27422,34652 +gCSbCsgJ;80738,5342 +JYqCqVKr;38443,79291 +pDaaSoPW;36817,31845 +nkVsDfCA;17363,62322 +ljmwFcWQ;4323,20519 +UFvoLdFx;8628,36953 +ANSYXpSb;17763,25160 +erSeXmdN;82653,29886 +IzQtrLKH;27765,51585 +uYrSxZlQ;8023,66492 +jiQFbGyL;19497,59322 +ZNixjtqc;41905,52461 +okqkJFut;78722,69841 +nGtbdCTd;11439,32615 +uuWtxCVX;59062,53024 +VJsddPdW;82261,42793 +EJsymjLP;51084,41198 +JcCtISTV;47995,82547 +JigpPlGn;49520,88984 +GZLTGOnQ;40669,13580 +EnQYGsEw;58065,24694 +PLkedsbW;3833,23089 +mmtQjFQn;49140,49413 +ZlbmNQcb;29293,3533 +SlgnuFdv;48763,1129 +TrFnCsdD;24557,18644 +qWUvrejf;14157,51667 +YFLAOREK;3322,20834 +UOTqxKwf;29905,48876 +YDblDVOc;15028,58046 +TWWZlavX;63856,46277 +DeKOGdHD;41981,9553 +FLtITUUo;17413,49941 +ELWCCGNP;46522,80478 +pJfPooin;86781,47458 +CfVbMSMk;81338,67901 +RrSuDGsi;65580,2214 +hCYMpIrR;80742,2608 +ceAfMXco;37043,6927 +VKQuwWOF;35820,83149 +odMkBdWy;31897,67763 +JMsoTJUr;58018,8655 +BqAHiERA;78277,31785 +nQpsfLyG;2836,85080 +oUMWtsFQ;8834,18772 +hFICLpPn;14830,29837 +hcVjsurw;19674,29045 +OWWeqFzv;66005,62602 +AwZgzMeS;15878,56891 +nsLMYnCG;55307,32016 +QGCvhObD;28594,71920 +ZWneTcZZ;40496,27921 +vkmiyeXr;33074,32868 +ziBhkaRK;22730,45332 +LEyAfeHp;47256,30114 +InVrUPqS;36221,81816 +bsLQtpOB;30504,30271 +hFJJiDTQ;53096,68012 +RnTaqBrF;25602,57768 +OfvAmfWq;57222,57348 +XToxMhLR;20370,24387 +ihQIbyRv;26201,76799 +ZBGuxTNV;48380,62888 +jNvlMXfu;40721,57393 +ceOiJpNX;49945,78250 +wiTwCfdS;53303,70069 +KmmrfXfa;12789,58179 +BTxekuJB;66870,11729 +ofXTopVV;79941,52399 +YzQiYWeA;53889,51681 +wfCdxAzM;22338,60097 +HbWeiehE;66585,84529 +NXuuCwHI;60915,4317 +yxjlbkxD;73282,58599 +YXiUTSoQ;22411,50785 +kkhIsVDw;5674,89902 +EQHGbuiX;78995,81494 +aEMuwrJJ;21824,28033 +XbmqzKOt;58920,32495 +iPDPcEBO;55416,24803 +OgQLWycs;23439,64398 +zPGtIsgR;5133,33340 +HfjgUMNt;80611,22115 +hROdXnqY;37400,28377 +vMxCIKLn;51378,23403 +uDPAwWyt;53288,20134 +EnQABEVu;6076,65838 +LhSIKoVL;75317,70943 +MIyVAMbX;20984,17925 +FEHiMKrL;59593,51530 +pMokEmGi;71856,19582 +iiDdelxq;23646,77595 +yfCtwFQL;18348,18841 +dMBNiDSk;17081,53375 +KvAWWHfJ;76627,83963 +avasLQTD;68261,31405 +oFCwEUbf;20935,30816 +pVgrJXwt;86268,17358 +YDlyoMxa;17925,32240 +CiihQviH;24688,45881 +AdXgEwfI;73015,25947 +guWcOhvX;28885,57233 +yxtYspCH;6637,26749 +dmfmHdkd;19278,58731 +nxyyPenf;65307,73622 +RjGqGYUt;17971,34417 +RPbyJAfO;72772,42596 +EpcyaonA;41317,15850 +dFFizlKq;71351,15869 +DfDCWRkA;50543,75751 +tKspVuNc;45091,75446 +FydiJJuO;89782,74292 +aNJDLKAw;26877,84783 +kWFbbwYO;13727,11227 +JmDEXJtA;82686,1477 +RvxbxDEX;17049,56255 +cQLLfuEj;43109,48357 +saodyjIl;83366,87188 +WjfFkhPS;18818,59146 +rowMMvRl;37337,19929 +PTWVMxnd;40492,48165 +VJbWwFiQ;83045,31874 +KPWcQdnt;84477,22059 +jPIdnPqC;44126,44611 +jmxuBHPl;54261,75431 +xwxRaxXh;12810,51185 +txAdzQyg;36304,87722 +KiuiNyya;57161,14449 +KCAIzuDm;77381,83874 +eCokoQks;67235,33366 +QNCSsjOq;70505,42724 +gWBbdnbn;60622,75938 +jMhXAKuP;43971,67576 +stZfNZeC;64767,9135 +lxsBjngr;42030,46563 +CUZwMEHo;26554,48537 +eDTnqfzP;19088,74129 +XOOfkeUP;38143,10487 +EZdSNsxS;59517,13466 +eJbsxmJR;8246,29550 +wXUxwDmD;31051,69617 +HQHqiicV;64353,16114 +FZBCXGiF;7679,21355 +DdxRIEju;76971,9004 +nGtCUxHg;19189,33647 +skPKjphl;9249,29631 +aveTTdqK;21602,89827 +bmJvdaQa;83269,37922 +AQChFJXW;21019,83080 +DBUaaKKN;14957,77437 +hQQXDVsd;70225,86360 +wPnJYPKF;87715,32394 +nkBxweDS;46778,4937 +xvjwsTzM;70501,25285 +ORLSzblP;19128,78732 +mMXGjszV;28802,55131 +qYuofWVW;1572,22760 +DSKWiiYb;5611,81501 +fczpGJMQ;19756,43501 +HqrbFpQp;62236,84961 +sWuygWzc;33845,36662 +OGCbneUw;68250,70647 +rTNxBBCm;62234,55486 +FFReqqfX;12447,2876 +sjRrWpOX;71158,11041 +dDitfPsh;21950,47900 +gyVgSlUx;4414,21306 +nLFjShph;25950,65550 +NOEWhwpe;42770,35930 +FrlDxewV;68599,20492 +aCnsbylD;58658,88663 +IQRLNABG;40631,79960 +jrGjWVor;6295,88230 +LnFQSzKZ;77234,51744 +sLWfsUzM;87929,47392 +iAKkdaJf;41484,38469 +LoumNqCv;10365,82700 +sYvQyKgw;27549,23475 +nrxBsBGz;81364,6427 +yutFQBrm;23006,53046 +jJnJwaTD;23173,50242 +AoofnqDF;46825,83257 +hIFrdCFY;71820,6295 +zUtlUQHz;15173,48669 +fyMvfxan;56440,83331 +QhoLDSYe;35972,15742 +ZJZxDlpK;7573,63891 +FESNpeBm;70721,17028 +zRUfllBr;28109,30246 +poxjKlgW;22895,31247 +TsqEWGMV;4083,44310 +LftvMcSl;83745,29551 +sicsYsdu;7053,47835 +RWQdFbxC;75995,71932 +vCfDDbUN;37986,77176 +LIvhrMNK;8459,47505 +PfYnJtoQ;73200,88769 +eLThcNPs;15426,71458 +JqXPzSFw;84924,53391 +ARpsvFrI;12679,63814 +eErHuTwF;23346,11862 +OUtCzPHc;53365,80483 +IyKxBhHu;81138,15546 +gHWlGaNA;42198,71378 +buOpWdne;79932,30264 +dXuauLlx;79151,19205 +EpCyPZhA;30310,74482 +MCmlLCLd;52801,61918 +kpXSLzVZ;6196,25239 +lLLGeRqe;12654,31409 +xUIQdEiE;74688,57252 +hwFFKmsQ;43029,5370 +oxDWQUxD;53205,11417 +RHNEmIDH;15283,79209 +offGpcTp;79858,7982 +wdcXIWFH;13318,18265 +cPddLnOX;27323,25261 +zbhduniX;17011,77149 +nkKAgLNx;65026,6704 +TfyxACnz;86591,32692 +FXtqFLHY;56419,26345 +mOWNuMQu;72360,58155 +ygJqRebO;56684,89884 +hpHQEoPx;65586,11630 +RiyKcvSL;22511,38535 +LQiZwoCW;1187,64105 +eWbjiyKI;78486,40115 +PuXLBoVi;76047,46395 +KbGvtPew;82854,78153 +YsJsdxHo;34058,47917 +LsjcEYvv;36515,45157 +idSEAjJu;17125,6062 +LuoHBfbj;46060,76801 +qqYcvQkP;24886,34077 +uNfWrKRv;4739,4810 +KemwMgpj;38232,69989 +tFURABtW;41277,86048 +iLRhOnws;19415,59221 +PjIldYgf;14376,60250 +TMIEmTDD;38470,78274 +EdqHOHpw;38354,62113 +qKwAxgCP;5262,28006 +UiLkjyhi;70751,8294 +OIjpWPkn;65362,32289 +OyoynopS;38586,16825 +JpoOmESE;84269,28693 +nlczutCP;65991,86800 +kOpQdNlT;40599,11533 +nRYPjNVn;83247,5523 +kpNtqKBh;85325,15716 +zMwNKNXf;16685,58857 +phVuODuj;21837,30011 +zzMpFaEa;11632,82125 +KYDWgiSG;52851,73023 +BhwVIney;12272,46661 +sctWJUtD;15506,20188 +fRdmhEre;60670,2700 +KOoxXeLG;58028,70786 +YVgCvpaV;42574,12652 +mQRdYRBz;79478,34713 +jpmpoeHv;52995,45387 +UpOJOAYz;89923,83246 +RfoAbEaQ;5225,41822 +McRJvFkb;17200,60223 +ljJhJtOg;85224,13286 +RWRabjRq;16181,74232 +zleZOUpB;24486,81858 +VMZnlXOp;64138,34987 +dfWhMBXY;17887,69492 +awKeHqjO;67570,61651 +HrhCzEOJ;31476,69692 +eNhXmoYL;27002,10927 +dqFUdOuZ;67006,75667 +DMBxEzLk;81238,42854 +ehfunJfa;85470,39926 +mbIACGpA;27606,12629 +FHErjMpg;64836,39854 +ZhntDeZu;52992,40225 +koARDWPq;30608,23026 +aFMtgNzE;8451,11621 +TFoMZWyc;37164,25937 +fvUAjJQj;60840,22594 +TDCGweGT;26138,14174 +zQqreTGq;51853,67114 +qfqVmlNB;80540,57284 +CZuWWEjH;57179,18141 +uTbGTsxz;76797,71731 +KJzxvkBj;43286,71301 +sejBEefo;73945,13937 +OdHnkofW;57772,62220 +zpFpXdOy;88380,48654 +CsSpLDeO;10768,39067 +GirbMusX;80792,66493 +hZVebCFc;53326,79255 +MimMJPIy;60891,2668 +LCpMdRxp;3899,16671 +ZEOoLkdp;73320,84832 +CcOzTpJO;78570,26747 +aywsTeOd;45837,24778 +ezIEfjOk;62418,42909 +zjdirHqX;72639,81824 +fmTpbStQ;52747,80620 +ZwCpVEAG;5981,56163 +wkFdKoNQ;26921,52646 +qLvVgRBo;19795,31158 +dOFsfxuZ;29133,51178 +TXQeYQFr;62070,17647 +TCiKfgGW;3668,42324 +HCDAtYlb;38671,35286 +fjWLQPRH;72959,30461 +CLvqNbXy;41395,50599 +wGmiaAYH;28545,38615 +OgVkCXdJ;55229,87668 +nxjaqfcq;87962,38201 +MiBTPZSl;60766,38200 +HGHkbuIT;61976,17265 +VTeHGxDx;35457,82503 +qShYDJHA;5840,20255 +JkVLdQMG;39646,10290 +uSrXsiCT;20501,54161 +VzggfhoG;62704,48304 +ESqcLPvC;37312,1304 +ScyROAls;26714,31112 +IflTTFMm;53636,44408 +UIVpkSPI;41767,84306 +tqydxPIN;89031,72612 +XotVqxnz;10588,41168 +jofVMyEi;41254,51737 +WGzhmnPr;29833,34900 +lHaBKNYZ;5381,52391 +RmTxghnf;86854,23250 +iBtVFiFZ;37643,87977 +mciXTLov;38579,5578 +MSbIYyqi;65303,6398 +gOQXiuef;19239,20948 +FswclgsZ;42493,35535 +mKnSxRdF;22469,31412 +EZskyDsS;30552,65329 +qfdlcERq;72593,37644 +SqiiKnTj;34601,55381 +FCEnqVqp;85437,41331 +INhwXqtT;56257,69849 +qYBMpBJN;62284,18518 +nXSoHWky;38520,45981 +XjstrzrR;32921,26066 +GgNVhRzF;13630,29304 +gfnnzEyA;74985,18116 +WpvnnhSS;71966,84133 +GvtjEYnG;51878,16128 +hiBUHBoe;64356,38882 +uFHTzRvE;76911,49488 +yYxkunxo;20664,29044 +pLXPZfHV;86521,52197 +EilSsSFk;84632,19822 +wUNkNxon;32322,28394 +spDNQUUZ;20606,3276 +jDmVZldU;37995,47273 +hTuXUqPM;3931,5749 +rapBCJpc;75065,15491 +acvmgKda;9895,55158 +BOsMBzEl;25080,83549 +gSlJhOSi;80030,12118 +HgnVDTbd;70084,37459 +nxchTNxA;85707,31909 +plhWQQOd;52536,13099 +CAQcnzbV;10399,24611 +IoVxvTTt;40031,54827 +fQGzJMwr;2561,13600 +opsCvaoY;10871,27197 +stnnzlyk;20155,75515 +ODVhntcc;63795,52579 +fPOKjnaG;42449,44018 +UgXzjVas;29198,55364 +uHnHqOVB;85917,61432 +GECDqKnX;88618,82517 +KSdQGQPM;75127,49389 +mgCtgYWp;32291,22293 +uCftBpuV;46670,85238 +DASmoVjQ;35840,87082 +mSryaeMP;22938,80485 +JfcNhgCj;18849,39476 +ZPknPjTC;81604,25869 +zYjqIUYz;81220,33473 +DDXivtfr;62545,13643 +yrlkknTI;27466,18878 +qmhLTsHn;8060,69503 +VAcPXOYi;72802,35482 +AFprKLoa;22649,7458 +hOULQwMA;41928,66500 +GqrxjjLY;8719,5969 +xsNMbikg;4997,5458 +AfSLAXzf;52650,73227 +wCQXcKdF;42882,5777 +VmQqVOSR;15601,33060 +TMVlvdxw;58033,47227 +UZKuJwDm;32268,16309 +IPewMfHF;53412,16112 +GyiMaFLl;84354,39442 +otzWmcmu;14788,70781 +xiFxYYXH;16856,87800 +RYPsOumk;40908,8770 +AFLZkAEi;65413,68475 +MqDxGwuX;22789,35607 +oSqkwxem;19306,83948 +LxvezILC;71679,3688 +xrVkMaXI;42290,53607 +YxOtouBg;77667,42478 +uaEQNMYd;26240,38219 +SBlYpWmr;79706,71762 +daLVOyJX;18996,70949 +ZldoyZsP;75688,28188 +OslrrZrk;30339,83589 +oywFlGYE;52943,71124 +EVLiZdlp;60961,47826 +MdXMWxYu;53324,68236 +MbVxZukH;29384,78484 +fzUgneUc;85481,5882 +taqxIKyR;43770,67244 +fmOblBOA;15811,67715 +NMcueIHz;60404,19688 +pzlZvXnX;1070,65726 +WuVgSkzq;34817,61189 +qNzNOTqT;45411,57044 +yZOiTDUv;18799,36385 +iTXzQpDR;30241,60265 +fhrngiRk;60952,3714 +hQUUiaSF;74992,48325 +CslcOiBa;40581,65547 +cXtPXgyp;34756,54201 +dKKWcfxT;80230,17292 +FFSGnYve;35670,80901 +gDmamCEj;65859,25930 +NBFoZKOv;67526,1308 +QBRjLEcF;79859,81659 +OVEzlRJi;62432,28217 +pgdCjMrb;38277,41810 +QOiZKnrD;56847,39231 +tCbtlula;79393,46446 +aXTJuukI;16834,31822 +JkTZbYWo;53718,34348 +irNrXxew;70835,14376 +tGLGuCXU;39744,61663 +xqOYjPBQ;68695,27565 +HzOClpLl;65244,25191 +HUVWYQZt;86199,54179 +eznIkfLm;78165,45694 +lQGfeZyx;61565,69917 +FISEojGg;4584,60441 +PonzAXiD;20482,67359 +RGJJcctO;5105,40581 +FWyLJQFs;42389,89520 +GUkfJSfr;86550,59050 +ZvoUCAPk;71409,67884 +hiLjtkAj;59959,17912 +plFROYWd;50808,75804 +inUoNYww;83588,52321 +UEARrqcq;89893,9018 +PATpHBUG;58071,42814 +sdXtMNMz;44188,13857 +IhdSueqS;61034,67164 +lpyPGYwM;10255,6297 +mPtlTdQl;16026,70589 +FMAGyVZL;48945,9941 +wEjoxhPp;64956,66536 +lUWvHceV;48692,86448 +seQhlLRH;47169,15114 +zlUfitVb;20793,34941 +IkNNOtcp;47535,13613 +XRHpIJZe;4054,52027 +weqjxqtJ;51752,61355 +nEXkgviS;30335,13032 +qonsdzfz;11690,27574 +wKHinULk;54909,1124 +xxXKPiQg;41934,76463 +wACjItdP;69017,83127 +zkfHbsNt;48891,8357 +FLcifWGa;30352,5779 +XNrqfstY;25252,1895 +vbLgrmYu;5472,75246 +aLAgHjyn;31492,68175 +RHIMKWvK;47925,83484 +tzkrciiF;57868,53806 +tKcbxXbB;73037,29021 +AEgehQyZ;14121,62533 +GzWAnndn;47381,16635 +mtXKpACb;73825,10348 +ydlCiYaC;34743,33777 +psIpbLyk;34062,54558 +tlKtnMtu;56963,82736 +OLZASOfZ;54932,55796 +xiqKJJNo;40195,19026 +TZhJOGep;7335,72735 +gxecasxU;47841,32528 +YRVygvUg;17641,35768 +CenPebQN;19911,77665 +pZjaBcqS;81970,4000 +ZLngKeVH;4534,7455 +jnYdpodg;14618,57203 +ypYvJccT;44865,9490 +KvSSrnMe;46780,65866 +fQFYauJL;29885,84074 +OwWLpqhH;24422,39959 +rbFZiEIn;85406,89360 +cFQOBhbM;21616,75049 +mKwwfaOJ;4700,24863 +xAFuCkGg;47205,58277 +NyVkeTTb;88455,79783 +LQZOdIcx;68547,2243 +wTooqSjz;67002,78095 +fNSfBACB;25407,30943 +VrbKJmwB;86702,88678 +xcgsmAJV;11490,10940 +QQpITtVo;57794,88501 +QggPOtHD;83874,63859 +yNfzsiBh;60169,28172 +jylSODaA;9608,50082 +vAbBHZNB;5169,39299 +PuwPVmHh;18108,11251 +zwZvpNOY;87217,62206 +JicQcxiP;28676,45763 +akVGPBwZ;29956,30452 +cYFkmxsL;51345,59744 +aqqQcfdj;4197,5184 +LphrtlNL;21446,81413 +qhExOktd;39395,75185 +oxjYegmW;50035,66719 +AuuRbfIP;40285,83471 +IpgVXyDX;85201,67449 +TzVTBsZH;49319,8184 +GfcUtQNf;40835,30637 +pIBUvilU;42859,87769 +STiPYeoh;87658,69346 +PCzMDdsF;87816,73846 +tEPbwueT;76945,15784 +wwEQogoq;14841,26331 +SKJQktZf;87565,28393 +qZNqbKjq;76935,43454 +QyztfgxY;68524,85655 +ozzxHKlw;19901,67097 +UNHoaFOZ;10590,78924 +QZTquPQS;32711,45390 +vjPRiTIH;3017,33112 +GlnLuVvF;47537,30493 +xySsEzmz;8870,75042 +ybCTaTyN;11219,30413 +auAeHLGU;41575,38683 +XIHaOKaB;58871,12407 +FyLFFaTR;74479,49681 +UitglIJa;35634,19161 +OqUwCMTC;22366,48472 +mQzjCaCT;26556,48144 +RNDoDLBN;22276,64826 +ODxOPshu;6539,51435 +EPfLTVOk;57414,85134 +uvBWDkdH;5057,86515 +RJaUpoDc;60470,21461 +pvVyezIA;42430,32633 +rOHTDqoU;56355,86746 +oniWvplE;24950,79809 +ITCbZahG;17301,53121 +OcyrUbpk;9944,24639 +ueKpXPOh;50207,56452 +dppmNkbT;87053,6208 +bYQQYaSw;23448,31050 +YKnskOOl;63754,10292 +QlakaiWq;35798,79887 +FdMmsqyT;7068,30610 +sSujcWzW;11081,79138 +NBHxKTBt;55275,39615 +lvzVjZhz;29047,66612 +aDptJZEt;11566,9558 +spAHoAgZ;41435,13804 +JaxXSEMr;44792,43618 +JWAhhhJr;32464,78118 +obdSecPQ;37095,19961 +wkQhsamz;45770,32288 +WbZBioyi;64000,53928 +mQFisHuQ;28091,6259 +JQxpnhKI;17687,82323 +AjGjKLQH;6737,82769 +TuTwbyPJ;75739,12053 +DkjMTIqi;88023,44891 +AwebUhxf;55255,20785 +hDrBQxDq;72517,68207 +XNsLUeYf;62143,39152 +CHpKyjYD;42199,38955 +ezTKOmRr;25053,81300 +MBXgjLtr;35371,73465 +rosvdqFq;40463,85294 +rCMyUUIo;57037,88084 +sROOoKxX;29557,3841 +DjMCCWrD;30739,76210 +RsSMXWBm;6177,26508 +hexIAJQi;31975,54405 +mwECDtUj;81344,18009 +BUOIpXxY;4789,67250 +tWinoXvB;63823,42959 +CuCIEkGa;2802,16032 +jCfjoLQu;28682,75264 +PeDsWfXa;65457,31211 +RJPGEcQr;25534,79162 +OQwsEKzp;5580,79733 +QotTdiTp;59077,50791 +YmBpOYPC;35970,70715 +TJhjUcmy;48600,39700 +KSuimZyU;77100,50163 +avvMlJMb;39410,22542 +VMCrOgmR;33449,10049 +YgzhXOug;66208,1732 +FNLCbtJT;10018,63222 +mgQguGkN;49136,3471 +dDqtyuUd;26616,25663 +qfhDuxvy;11813,45445 +qQBbWmoa;26858,85859 +XJGFhHpZ;16933,5830 +ULlcOXji;79461,69877 +vVnBwUhM;32517,40471 +PTlYGLTr;32766,26277 +UqAlCXGi;47218,82337 +jhuWFXmb;82563,11121 +IkJAOWoV;14778,17963 +kiZemxDr;14938,82097 +bDbujyDR;58562,5079 +QZXCZQLl;52644,13399 +qniTzCiD;79856,72689 +ABGmNVUB;79438,73441 +nMlxdXQP;2656,83355 +HkfOqIQa;52133,44564 +pKqjeOTy;62702,85851 +qVgYaeCv;30360,18323 +mJHnxLyz;8975,38216 +aCCHeAzp;7936,65746 +zzvbaPTK;45898,76289 +wmQRYBfW;79658,68863 +XKofIbkw;76517,42838 +rVzZzgcf;15618,28358 +LKNVNZnf;34737,10170 +CRjpCYvl;37299,56498 +XqJxiemW;26774,73882 +efwESGla;83422,32613 +XCueUZtZ;68257,55373 +fhpsihyp;19084,69188 +kUfwVptu;12817,77718 +aJyojkQL;14678,87837 +kZLTVQjq;38245,31469 +HAcOQmgw;49459,67035 +CrSWTbPP;41072,77830 +uWbEjwgi;77462,34867 +BGDCjwlw;35732,8130 +ughlmtwe;23632,47142 +SxqNBWAM;15533,56266 +OUcOSWkL;17467,21651 +arUxdUUo;40408,44335 +VefWERry;8660,82014 +kplrWpTg;33365,19385 +fQSfgbdu;74331,81582 +pJTWAibH;10001,32916 +CobFqOKg;25550,25714 +yRTJmnuI;12170,45919 +kwPmFlhp;59494,72766 +etvbRknp;8667,71854 +BISwvRMG;64616,8925 +FbbNjpST;62654,34323 +qHCaswfD;81694,48532 +OqdKcndU;3202,61075 +UMlKQyWM;45154,71287 +DvdqiaRW;53874,28000 +wfxcLSKy;71690,48569 +aBPdpcEk;2848,37100 +JPxtDSkE;38058,86289 +PlVHPhFv;27392,5259 +mKzryeap;65333,27795 +TcLjOmWu;31622,52023 +DSQUdTZq;34382,89831 +BMlhHosp;8730,79347 +MGDDXEky;67513,57448 +yxHtyjXw;60420,83131 +OHiniZSV;3046,5045 +hXyvoqXB;28124,60675 +hqgXbszP;63587,71786 +ZQkJQkvq;25529,28919 +vftBSfEQ;39683,68685 +byTZAOIb;19334,44507 +tXAcHHPa;51064,76804 +cUmmNGkE;13792,85742 +WOuoLFsD;26452,21075 +AJuCrPCL;48071,69946 +STyRrKHD;71575,48350 +rlaUKJQz;59876,11554 +HJmbQhki;30002,48927 +hyJPnFXM;76119,14709 +ZldRZJWI;4263,51536 +cljftAuG;76147,88072 +ueDejGtk;4124,22559 +KKBJYOVQ;46372,55946 +mvtsZmGL;45008,25134 +wlXHoeEW;3752,72215 +jqqzEZbl;36871,63015 +cLlZAoTQ;81839,3186 +jlCHAyxA;12967,32179 +ZDRoWzrf;25711,32105 +LOWViZBu;82601,23500 +NaihZcYU;77194,43065 +FichkpaK;86369,86186 +HfOqmWCb;35529,20385 +gfrEcVot;43399,7838 +MQcHSCkW;30862,23785 +HkgGZkjx;89976,66579 +RhZAiogf;74358,85414 +QclhXZaV;76385,75410 +BAjGZAoJ;23952,83656 +cmJFTBHO;86006,82877 +zgEHFgRT;12608,84645 +WmwDVBvs;24121,82681 +mSUcMiUI;57922,20877 +bavRZiNa;55176,63094 +pNNCGZtH;89063,12696 +WipkxtlB;2999,11181 +noWGUiQT;23624,28599 +yGoACHzR;3192,77877 +eOlGcmRF;86063,60329 +xvDOAKUO;59520,4585 +BkwZrQil;16860,59134 +naDzBiSk;15992,22990 +fgCBtquB;8060,41136 +HEoekdwU;77176,9023 +ZXObvHzd;19971,35302 +fBUEfRcP;35277,68991 +UYotmMCI;70469,71338 +udWaAjHf;78035,16057 +KcCbbElx;82855,69099 +IOvxgViV;2053,69221 +qMQfGQlu;70585,80436 +jHlTCQsK;8171,55512 +kCleKklc;60184,89729 +vpgNjIJj;52583,47208 +soiIXjzH;79851,88569 +owzYFCpn;35101,83489 +WbwlsdOk;27506,22420 +eeBoUxAz;86311,34590 +BeGZQkGo;70673,18035 +gTFsEZTb;56503,85895 +uhSClNol;58568,27668 +NPGysdUv;36586,64746 +qsxbqVIy;32450,17202 +NBKqkMWD;62772,16731 +majnJlsG;27478,16096 +xbSfqIPe;13708,56208 +SGYJRrNd;36763,30632 +yaYBMxYh;42301,17761 +HYGOfGTC;6752,11295 +rtcalUMy;21452,35079 +MtMTneLZ;15459,58539 +duXirBYh;80666,48709 +uxbPoqfO;55272,13690 +cPsjOkcx;1585,67919 +pDnTRDod;70924,15473 +GqLuEGMM;50491,16906 +dpGqMCnz;19618,22714 +itaxQmaQ;75078,41198 +cqAOkTJQ;21603,69518 +nKmIKhNA;51317,11991 +DWewwRdW;58870,48498 +UHxyZaSM;44772,3965 +gxmWEdKQ;10244,77700 +iMpqVhQr;36512,26296 +xsVsjcNU;45282,79556 +ZwbVLUyz;23802,68823 +gOANJmBd;55277,85570 +VlEJIZbj;79432,56003 +vJnSrNSw;9900,65954 +KYxEPEYf;85179,60528 +BQZjIFph;61674,20078 +hVHPpWhv;88480,26003 +edSsWixH;10595,28660 +MceGwlKG;53138,11335 +IxLYdMOz;15367,60211 +uTCXSdCh;34460,65588 +eBFnBVKn;53265,57198 +AiiGOvCd;79291,21769 +AqWKLCee;80779,12378 +xEfsNeXx;26297,29379 +hPSDgRZr;58084,69205 +dcKpjYDo;13482,34443 +VreYMwfx;6427,36417 +eKiayBJn;28327,42653 +jBHzkWxi;78148,11567 +GnRdcYAs;69052,6328 +GQEcFdeU;71085,64352 +kXBLHWFk;88342,72341 +TihKPlwT;37724,21505 +WIrBaSyy;58762,23124 +qHPaKebR;70075,74037 +tArcFKTf;50560,64005 +iypuXDOu;7694,82940 +RYgogfKe;43403,67730 +xHGHSbOx;44846,30284 +WjpFdCUF;83064,41194 +uAWNHpRs;60323,87083 +DXfKpbBV;3452,30160 +gPWwmBMT;15704,13715 +vplHziLk;87327,15092 +FHwACirZ;45466,32252 +BPYoiyDY;18395,68000 +KOgzWbXe;2804,61318 +TiueSHus;53327,4484 +CmLckfGA;29614,80024 +jTODhgrh;77859,5192 +FuWTKjza;54722,75136 +tHxkFfzt;58357,88628 +vnQnIxuM;4775,86998 +qcfIZPOL;82872,86937 +TZdoZPAj;29686,81477 +RvPmtDJd;86435,49744 +sFRkdqJf;9008,31575 +tgEVNavX;30933,19339 +fRLwATcT;29051,53649 +IiybNxyL;5964,77048 +iCllMxUk;8224,20702 +bhynDYJn;7001,3849 +PgRexaWs;59007,27500 +MNMCuanh;15278,24688 +eScRnfaI;4258,63234 +JSJYDwNW;60525,52793 +MdtzGVVZ;44864,21705 +kSnUOTKi;29736,13309 +asMNFiHQ;38467,14346 +zBXhrtbM;1336,75506 +nfQSoRkb;24811,50946 +xBglrapJ;12464,22676 +PXQzeIEF;86602,38274 +IatGujay;21209,58094 +cOZDhscj;49552,89545 +cOfMzRrz;24184,54885 +KSzRNqxQ;58786,63612 +arKlyQxD;30347,84157 +wfBgBuZC;79947,58129 +ekABJtLE;41065,34999 +dillXore;64877,36686 +VlUBMKWc;70614,9285 +rrZLSGEY;3604,27477 +WOQwfOHJ;26094,7199 +YJHPlgwl;4217,85370 +blLfYMiF;23771,15996 +tCaQyAvH;47829,42836 +UuTvYrpC;13916,5561 +dONbCUCV;38685,86102 +kdNUTAHb;43477,71321 +gGvbEjfM;48910,41583 +ofwgssjY;4594,32302 +zvZxMdrG;5241,79653 +sTtMZfcH;66037,65934 +NMHZIXcN;49788,37712 +RSghcAbw;87975,74127 +PXFgRtCN;80091,61178 +LtUMAMLQ;62284,23465 +dHTipdQQ;80734,62207 +lZmLzkWW;31777,3704 +qMdTbpJw;57135,87502 +QCJfwyrj;24961,58993 +QyieIFXj;54615,78782 +aGZrqVBy;75644,50715 +mXMgvyjl;7886,85555 +NIMHZbvJ;44469,79130 +yQWBCPEq;45257,68477 +LkIuhXDK;57641,13983 +Qfqxfeul;73426,41310 +RHORzpgV;26721,45928 +xxrXkTJQ;70112,31821 +EMLqAfyg;56497,61850 +qiRYrNET;8402,54972 +bEnhSLAq;12063,37907 +BOCwokvR;71404,37787 +GiMUhgcb;35071,76464 +QrZrTCYa;46846,76936 +oDrbAOtf;72867,12553 +UvEQgrPn;57160,57766 +hYgBqbmN;54297,58390 +XtXWyzFr;79527,30032 +xZkQIVXY;59625,45820 +mEjZTOzF;85203,85929 +zdBhiAUM;82737,52398 +iVVxtdjb;57039,75639 +YuliQSUD;73554,28955 +XlJOmSji;28844,82271 +pmlusBCM;6446,65672 +QPTyXkoA;51770,71148 +RUIUKxRy;36045,72158 +KbJCTfyg;12509,14878 +BPGzzDQb;47050,59168 +icSJatMo;64472,68152 +ymYfHLYs;80575,75763 +pGvITLIu;79916,20590 +YeIurAXT;76243,84942 +kSwFtfDT;42342,73993 +tCrVObTh;28226,19380 +XSJftCmd;80017,61008 +bYFGqVVB;64941,82458 +JtZjlPqs;72175,53460 +vnMljCYj;80682,4492 +sPaetFyh;20462,42867 +mJkYHQWl;59732,4272 +AQCVMGvO;25223,8073 +RWoMOOCf;18325,28139 +XnozvVsl;70178,64184 +GucZqOpS;56180,62556 +LUyFCXpc;67406,4395 +sMVnsgoy;13480,64495 +RcsmaDrg;51968,59745 +nRVvasdg;67433,41752 +afZvbvrG;88922,1454 +fpyNnGZx;33385,53608 +ZCVLRTeg;87314,22601 +kOdtZUbO;55611,62266 +MwiIXZGl;84232,58204 +RpOhABIi;70916,15781 +IQbLbnRM;6553,1091 +qqNIvKtR;13179,81543 +dtEqQhWG;48157,8551 +KNYFTXgH;23168,16116 +AqriiULg;19445,47246 +NGFXRGgc;34241,15259 +jtdRfAwj;64198,51679 +zCcOfWCm;84417,71551 +IpWrSpTs;27322,33210 +AvOzZMID;9541,82686 +UMANBxXF;42030,40262 +sMnIeXLg;49586,41593 +jzcYLVIA;27953,24713 +gJdAPsKC;22920,77123 +qSQOMHhd;62573,74808 +jixRjTHQ;17471,38003 +dIMHjabt;61230,79633 +URWoCvWC;60683,73680 +wGPtLbKn;80068,46835 +VWnvLoHN;53359,24523 +egmbXtpU;6706,34126 +cgLKTQHQ;76481,40648 +LGSQYFiR;84700,41901 +suZlrlFk;2139,15473 +KDmlKGXy;84329,32439 +VgJwwSwN;12113,49070 +xqwEzAtj;30105,74330 +ddljhTGF;24804,81214 +zBmnwKeH;80272,78998 +QUIpMBxo;77331,73262 +vgiefjhK;68450,7899 +QnLCRMKL;63277,46503 +ZUGSfjeK;52046,74393 +CDfUqQpU;45865,52554 +qYVEWXKS;63091,7151 +WXeRJOPQ;75899,29262 +CydCDCUp;1250,88952 +nuOJZhBv;63899,58582 +ZaOpxbyH;11110,7353 +RABqdkMs;11471,35248 +dBFlRLXm;52510,71416 +KGIbALkv;9502,80304 +UfAlEKlI;31554,58240 +LnHgQwmC;18496,20945 +wDZrWunq;49823,68369 +FryTaRVu;5233,86527 +vWJsleEX;19209,55852 +RebZawil;79897,45341 +xWmUjouw;11418,76139 +yxlFiwzC;48317,84304 +CUmisMlT;61091,78906 +TQLcYlDh;13133,24470 +wTHFFpIj;13589,20595 +ppqsYjVo;20768,28708 +rGVQHNZB;76313,10389 +MLgEDcwj;56100,86643 +aEFyEnlq;57410,32584 +mBpLrgTi;46079,12662 +kMlPEFgT;83257,43443 +NUzedGiS;83896,51014 +eTJKccVD;87051,35636 +LWOoiPhu;60966,53306 +iJdYaOgB;69825,50830 +osgHzVPl;21056,29488 +dwZaTIJb;11868,84572 +fUUjAsXn;89288,33219 +kdZrJPaW;29487,14326 +yLXfvdxQ;68595,41540 +yUEwjHNf;89880,10266 +gbLCjUiX;82978,25296 +xXXhTEqb;22433,67467 +GzTjLLru;21940,55186 +oIXwERjE;32230,78992 +TTCbvpOZ;57289,39067 +CNtVKOBV;83276,83179 +whcFlxSY;24565,19130 +RsTOWhbQ;5423,49806 +mTDUOYMs;28219,88407 +DbXZhvcf;42247,82376 +WvxsioDq;17308,45656 +JfnBKkFU;23142,73864 +CIBOOkLv;13549,10841 +ZvyAmHHZ;75875,14176 +wmHVJibv;2233,86401 +MCfPyrXd;71194,31195 +HnNJpRHB;36862,36887 +EIrNaVNZ;3052,58146 +nUNHgJwP;17275,28604 +kAINMBrP;50387,6963 +WGucQsUM;2463,22964 +lzaGYdHs;62516,43630 +ixNJyTth;20563,44338 +OPHsToOX;16155,4393 +OuGDZqMw;41599,82645 +aEfwlPKV;49334,49954 +oXbUFIBv;47456,82624 +GdKpqKDk;57917,23370 +sZTQTVUy;51650,28023 +RLAXgWeo;2913,44885 +bATZVyjt;65412,77991 +IXTAYPpz;86498,22571 +EJGedWvX;89677,46874 +gJBTGOwJ;18782,66300 +EQmNQNlY;66695,77942 +wThBzNLD;6145,13703 +CyBDXjCl;54642,68949 +PlKvITvP;17139,88574 +KpeABhyY;85526,19741 +hovlPRzp;69805,87035 +seYkxLCk;72124,47346 +pOFlXvui;26784,11033 +ZHgrZviT;26953,19442 +fRFYwSRB;78902,68949 +tCKTxPfD;21029,88277 +atguYYVm;43057,30969 +fUngutZJ;59695,37941 +yKJYbogl;45335,64980 +FqaXXaia;34948,56148 +BEqPLXFA;66350,43909 +ZgTrlwMK;55508,20297 +hFQcZwOq;11778,76349 +sgDMBPoc;14895,22794 +uomZZZjH;14022,38558 +EAAPFZxf;20978,29954 +rIGQFPxT;23004,68398 +ZSaXUikZ;38102,76216 +ixArfazY;36138,63807 +RQurfqxV;65216,86127 +wSUnFyNv;29345,60509 +WQzVXtqF;5330,54033 +COytjYOp;48624,44254 +BEXVpdgV;6202,27517 +qQnTdFoQ;77208,22672 +NwEZiALk;22400,26507 +TdAYEOSZ;19392,72959 +OoNWPdAV;70541,64335 +SgzhCGfs;6441,76408 +rvgmFvZK;86228,72729 +WMBoVTHf;35283,32827 +IAJMExnO;16807,39085 +ZZCLMtpZ;89346,50184 +eKJOkuXT;59440,79815 +TBtqabAe;11640,34979 +qdHUDKtl;46011,64007 +rXqlMtbD;10008,74378 +AnjzidvJ;87837,61643 +ozoYTPgu;49436,61061 +aYdBbtzc;11812,12261 +ywTZUBHi;48551,54798 +YMbxdQFv;50423,70582 +KkpBMtZE;39735,84236 +hLRYdkKz;37463,10376 +FadfXmHm;46051,56247 +BSimRXsc;34128,4874 +WwVfagbS;33189,64309 +fIMTlruf;78851,11419 +wwLrnKrD;27703,31865 +soDVYFek;36426,24111 +jrvPJFTq;78948,7703 +bkWoydFI;84131,58016 +qjWVJlKl;37649,8172 +UmKsFLzW;84668,72315 +BCsWlzcs;78452,56690 +ezCwnvmu;33342,34207 +ylusrKdV;79327,54684 +JlYrDbSZ;84745,41122 +eUMkNptK;82364,68759 +VXAFPZcE;26239,84193 +qzebxpDb;44352,75343 +Awlmepqk;59798,58391 +gQVCujIl;56656,68683 +qNYkSrPb;31062,26997 +PKDOQKXI;89626,66050 +UOYgMhrP;76648,8433 +UBsqufaD;14899,35511 +WadfewmP;58444,51828 +baYChuBI;45773,49580 +DhQCqzXe;5836,52667 +YegLFucY;78526,28778 +QqCVHSaN;28443,6564 +ASxktPWZ;13667,20570 +YPevuwoO;18948,65844 +DueVjoAL;54373,69195 +nxgiTSDJ;9747,89829 +NcfzhLWb;11955,23404 +hJPLxpMj;76541,17812 +wpvifCOl;44830,1485 +bjVQeSpT;82109,79513 +QtCYxOmd;30730,56286 +vPWsRLjk;55573,67551 +nihhjDVg;87391,59133 +loNTAbJO;58795,77096 +tAiWHVqq;62187,66049 +xGIbBfJX;75878,31379 +gwWdcQKH;34307,27308 +VKXWglju;65787,57586 +ehqWKWsv;63719,48545 +VQVSkfPe;25810,28314 +sTNjGgoY;81150,70876 +SBtCtTSD;2072,85197 +zyhErpKl;20764,75113 +nAhJcRMY;26064,24379 +Xwwptgwo;62064,29651 +XfMaLLCb;74976,62762 +PjDzwaoL;84900,16534 +htmybfBU;69013,85785 +dOeubQfM;59275,22915 +JRcINtiX;20821,6255 +MsmvUcwx;55552,78680 +dFbyzwfZ;86448,58823 +MUocNxcz;37399,19312 +BxoKDvXG;15238,88126 +AUJuOEPu;28393,12446 +EgCClBTi;38298,89798 +gbQKyfem;48555,24149 +amZjyAWF;17222,72254 +CWdbBJAj;33399,20972 +jnNuTHUF;24544,54451 +MqrmaeRm;18239,82458 +weKnkpcD;67625,80165 +vCAughQj;75553,45593 +TWPhybuV;4250,12703 +XtBkaUpy;80390,12151 +jBRksrpO;75424,8762 +yRvPoJmr;44290,8501 +FNDFyTeT;12919,2916 +ktbXRehN;85088,10878 +JVRmbTEU;16443,9327 +YJutSpVj;50109,77216 +VtNYanGs;37611,35028 +QTMddyDR;64662,30753 +ehCUjUZF;49923,71116 +AYMnWczG;75851,26340 +ZgQVmfbm;25758,43968 +wxJjHKTt;73689,44320 +flbxmrqk;57977,9276 +CloqOKUu;54218,52787 +CMnUoCfx;44671,38199 +YxhtAfAv;1799,4565 +pevxopsS;15241,79332 +EEkyEdXO;31959,4992 +mQCmrosd;39405,82165 +QSIonkpO;35266,12794 +rJzkEmsE;64940,61822 +EyywzWVl;56565,78607 +mNIoDhuQ;43551,58911 +kTLUVqxU;15981,62105 +MJOUQLPT;11564,82849 +nTbJsoKg;8721,23731 +tGfccgTy;5461,83365 +DsnmoQxN;17676,22601 +HlFyGZBy;62508,18037 +FLmwqjWG;27217,5449 +SOVyYKJf;10765,52062 +VMEgMFXB;63765,53311 +YDXpqHYq;71062,66245 +HXpuIMbO;51240,31631 +CgaETaWz;32748,37447 +LzKeBILY;44186,14259 +DHgDJhIM;43865,70131 +NxtxhzLC;51763,82376 +miwQkwYk;85047,28131 +IuyJRxTB;79220,73485 +QmKQEnRr;61799,30826 +WdizshYR;30096,71349 +TPrIIXhB;41801,43660 +TYdtEvvb;2967,75434 +IJyyePMa;64156,88728 +RGnZDWtQ;77482,40507 +yumXuDdy;54710,63270 +iqoJOitd;49648,45925 +BeIMpGVu;49595,31683 +OsazjNae;24996,13508 +qENJiewi;46099,76267 +AghJAogJ;49775,39880 +oNvgppXp;87750,45326 +VrDBfPKo;1869,58564 +EleuqPta;39167,82098 +ddzwuThX;20137,6704 +ySoDCyOP;37541,75661 +teEsFPBI;62078,57469 +SKvVqNng;78476,74685 +uzXrioTx;34849,18046 +bUhzFtfe;14349,51446 +GzWAOIzg;4495,77410 +OpQSclIg;23164,62157 +sYnMOEvv;89500,81077 +INhBjuOl;75677,35995 +XMrTrJjo;16643,83915 +UzkNRLKz;32197,85986 +tYKJDhbS;86823,39587 +EzErGpEj;22227,59852 +LTBNCIIu;11061,65030 +YuUvkpcx;46951,5456 +jcozIwHj;27588,8543 +lUvmATba;65795,23505 +iIwYDcbj;56697,89188 +ShrzeONO;44491,41573 +NCGfkDzt;44438,70929 +nemPZsOM;80514,72817 +lKQszVPC;52430,59552 +ShLOdBvm;69563,49215 +aahGCeBM;76852,53040 +sWJcffCS;76043,73017 +FONzHREz;2935,5090 +CxhIWAgr;61137,11041 +YDJByNrE;13505,2467 +CmHqqIkz;28953,25830 +EznpXCOp;60681,14567 +vYFRCxna;17674,86928 +zufPmPzU;74658,42254 +iLrKkcID;22634,60034 +SJqEJQGu;56277,30766 +iUVkKXWu;79777,18858 +Dfhybxge;76281,71443 +RmKlQHsu;85203,21884 +VXKEkYtf;45301,32514 +pEcxpjaR;17343,39290 +hEtwEFPe;27090,19383 +twCzMiQs;44359,67889 +CYyinbNr;52587,35874 +sYxXkIBm;74543,47782 diff --git a/src/data/entry_2_13.csv b/src/data/entry_2_13.csv new file mode 100644 index 0000000..eb7e731 --- /dev/null +++ b/src/data/entry_2_13.csv @@ -0,0 +1,8193 @@ +username;balances +hyyxMolk;56592,89426 +RQNrweLF;29280,24324 +LzSloDzM;26199,79099 +wxcPsmpL;79720,33845 +xzZdIKUo;59691,6650 +VmSVPdku;21784,9048 +dyDYdELg;61832,11523 +pjmcnARI;37628,6750 +qTQKUYpi;37355,67581 +WSriSgFF;78290,77081 +dKOqhBtG;12860,5535 +otokbzRq;15132,51034 +cqqaFiGb;62380,75518 +WQDXGyRF;15015,9240 +MtcXHTlO;30374,8416 +IJkULMfY;45754,53550 +EzsVTNYp;14588,78716 +HQMXTJAb;79052,39036 +AukYFZtv;64791,47222 +kKJRMOaD;8897,55164 +UHsLudwH;26351,23259 +lprmQTsv;75863,73322 +FjvkdakE;41184,71526 +HnhgCjsi;19615,15764 +DijkKPJD;86092,80115 +SsMxRWLj;50004,48296 +fbzyMOas;19281,34997 +RXqPmWTO;31149,72837 +FIxfYKSs;78689,27446 +WywkOJBN;48430,2592 +TdEtQaoI;8503,78815 +alVcjzfI;25761,74841 +IxFYLxPO;16414,72575 +qUZCWcQq;41680,42483 +MmNhooXz;38606,50784 +OKIYxmzJ;46164,1937 +tNsdAVxm;33487,55645 +llNaGLZx;1264,30160 +LZxhdFoH;53021,70285 +TUBjpfHb;13811,58771 +oyLIBVuY;82416,51710 +fvHfSAuZ;41977,12157 +TcoPMJXu;51395,5803 +yYiZYHyh;70049,2459 +yurqwnJZ;40203,3407 +FrBqbZQN;83260,8413 +OMVRmCZt;6051,78455 +QKxZNiqp;66680,42326 +OCZNAeCD;76896,84729 +EkJdyBDs;42381,8072 +nTGjNyVp;48454,26635 +EofhmGMj;58598,49681 +xdpdNXDV;14801,4422 +BqYRmSWA;42794,23120 +naRiLRGI;78826,75240 +qJoxkyZT;71960,11922 +RvbufHVR;16814,43395 +PsMvNiBe;33720,6756 +hBNEnfPC;12817,1707 +vopmVAMM;5174,67321 +BpAcXwIi;75309,34550 +BzljTHzi;50607,27132 +ZJDhiGCV;53645,68677 +lcNMGIBo;80804,21066 +MXTktqTQ;56071,58191 +iRJVdeck;57250,16266 +uGCLvGfS;47027,57825 +czMbQCbc;45321,81770 +bzjLViqY;1355,75452 +cWZpByTk;66351,77880 +dLCgsmKj;78911,78070 +fPdAPXtD;14524,79239 +tZMbFphy;41684,58391 +SNuLWiWX;17334,81555 +JhzUJxmh;81722,88377 +bgPuhqVL;38273,83399 +EvTLprge;67560,82837 +zdcUunZs;64064,61768 +PGTSjjum;19547,87103 +ndoUIyYo;80863,54299 +GmOwyaME;50258,87368 +DwmraTgB;24851,53804 +DxTRkzHx;69935,32797 +nFyRxggE;30321,89855 +wqeYpALk;52397,24003 +laDhVvoo;34280,51155 +TloisARe;14703,54709 +NDqXAXtL;4907,67047 +oIIwObqp;85204,31512 +onJBpqZg;78595,73871 +Pdhzppay;28443,4660 +tHjkwjMC;76891,47522 +zzeBJMPX;59526,51688 +IrBQopuW;42031,53269 +QngKYlrU;19060,30924 +lMoasANf;60630,24420 +ceZEqAzg;64810,85515 +ZEvJNzMY;38986,63012 +OwhBrgQN;12575,29311 +ZtfJVXBm;72920,88371 +yRuOaFSk;63444,60717 +FEMuLrku;44020,78845 +YufePVAx;50275,65926 +kpAdTnRA;52793,66723 +nWKMrWFO;7447,58051 +drPNBbdw;85241,28419 +vfgpfTfP;85963,40492 +LZBszGLL;36294,83213 +RZNNTuOd;89668,23764 +JIlfDhPm;21018,51419 +zkDUqqUf;31868,26004 +VXCYBZFl;12255,27154 +CtguEfna;21326,75089 +AyOsYTnA;8846,76900 +ZOlpdUBo;19391,86381 +HxlhUKzm;10062,8592 +iczvrtjq;30095,60740 +iXOIcwmf;30742,2984 +QJORLbFF;3024,63525 +JcRrhola;28586,67737 +PFEVwqTL;50261,55301 +RZcirCrl;80385,59036 +PpzIMNxO;11964,13444 +ZyFingrC;12130,70593 +ppBuZmpg;27160,79591 +ywyHRKvy;35349,20206 +LLxxJboe;18872,22667 +hRxqikmL;11007,25359 +WkZcrYED;70475,64609 +POdQnQjw;43281,51121 +MATKNqhZ;54032,46502 +NYVSTWdX;63066,50385 +PDVyHcAK;54818,38623 +AfRZgSkG;19053,47757 +qtLrxYue;82024,81643 +fxFeQQgV;46499,15159 +HytinyUS;28308,62355 +VzuNXtrz;23835,34167 +vfnIXnoY;57137,78960 +XWfZvXcV;28402,43739 +tVBERLNR;63596,21718 +KKQvyrGi;26045,60799 +uaxVLUQb;50047,15586 +vNIQdvRF;56466,83682 +mEZiUlhE;37018,5450 +RXEpgGsE;76972,41803 +lflKCbEm;88624,76572 +fZNFBxPi;44188,6866 +GgOBvfHe;4278,50200 +UvmBdCIk;83689,13498 +NRlExbIe;26769,63140 +XdSgaRXi;36261,38593 +gYMRXMNR;29460,72165 +ducmdzVM;30779,34829 +PkNaYwGf;56364,44273 +xXAeCmdo;44870,20795 +CEPuFiVd;85792,30787 +YJEJFYVd;71390,87635 +nUcsIRLQ;20326,84872 +POHLILKJ;85523,14117 +yHMKxCvp;1071,3554 +fpXvDKUd;4570,9432 +aTVSaKzf;2359,3160 +OpTiiNVn;3712,10793 +nEWTwgOs;52236,23289 +ZNrbSAUF;64315,4972 +geaAqUYa;2582,6366 +jtweSsVa;53968,23950 +KAKkBWAK;61624,25341 +gNOnTDes;63143,72939 +BJgYpiMB;61796,32270 +eUbTDdtr;42346,31603 +XLMcsDzW;15343,66567 +dScTrKIX;68155,26827 +LDerFKmb;82163,49721 +bhFYTcsK;12490,44421 +OJtUftKr;81067,82460 +aetfsrCx;79842,61398 +sNhHYItV;52088,17812 +LTIfELpI;34728,58292 +csgjvbet;69401,45467 +huSimdic;7077,56007 +jdWaboBP;34481,76305 +frhwldYe;48032,69462 +fiONMAKz;29933,57809 +lZkeqfLF;69334,15271 +FakuYZCL;8135,9366 +ofLYYQSG;28212,31427 +PgGPODSa;21749,52614 +GMblOJnz;76724,72831 +tsBEfXqe;63210,50321 +bwNzHVAg;49516,20030 +EebTaKYi;55072,5841 +SApFkhVP;63752,7468 +RCLtrrjF;26023,75010 +imNIJqSI;26444,7588 +yNrSCbjV;71712,70621 +aBczybvV;20321,50454 +WjsOFRVA;76655,35034 +LMTpStCx;17308,69772 +adxPZzoW;73409,75317 +UGDfqHhn;30133,44818 +QqHCcJLI;32849,23744 +WsWeTrHj;54265,17285 +zLGauAGg;86745,80681 +JIGncltc;44229,42723 +hKnnlfqf;49998,82070 +tsbqAbPR;80423,26825 +ogPXDfSj;26064,54979 +QfOOIkAb;70787,41641 +opSmDQdF;27707,72644 +bSueUGZS;79852,7078 +PQbKLepD;24165,26102 +PQeMVFaL;17056,31957 +apKjbLQL;75712,53516 +jKAEbfCH;6225,7805 +WrSLlMjo;4121,53925 +MuKzohAI;71910,2153 +yjlnpLcC;33490,1240 +NaHVTMKP;78382,26042 +mSmQOKEV;58920,77909 +mVFWUIWC;24690,67157 +hbqycSkV;13951,31263 +PmNeDLre;73357,71289 +RBSyhGVe;40447,35082 +eCrwEICC;15032,53475 +vwfKXmBW;13054,33712 +mQLRYKyG;49796,41188 +slLJTulU;2175,26386 +bIWeegFy;38262,83941 +lVgkfCBZ;31452,36075 +WZsXwlXK;42494,51916 +qoNrcUgc;14370,19263 +LctJcmrk;70483,24821 +HMscIuQJ;15697,1836 +lPIxBYFy;80780,33391 +SOMyhYpF;29204,1286 +wEKxNjPa;81105,5529 +ueilNPtd;30266,47454 +ofLXaPkC;19254,11545 +hPGfQswC;34928,59465 +sUhgskeY;89104,45062 +mqTDwFEQ;49436,60720 +lCuRilTX;36736,40879 +qMYpOLEM;6140,15847 +GsWnilYx;32570,75965 +wogIdbin;85071,70573 +vyuCmaFr;54647,80929 +foPuxxqU;88133,6077 +oLsghaKH;34416,3060 +NxlFAUHJ;72497,73162 +LJHZjcXg;84981,19050 +dDBFRJWx;15792,7574 +dLbTUYTX;52666,56833 +cpPDhgwZ;50165,77876 +RNobjbvG;7508,64344 +SoWYQfna;55016,89625 +xXrndDoy;11891,47563 +YeXWwDVf;2401,81318 +ueVMMCOG;4521,48661 +ukhryUKx;24526,79640 +BcDtGMjz;57942,55532 +NWtiaXmN;7491,72369 +IMmfaYxn;53867,26113 +vtcvePHC;58297,86543 +kyqVArAs;36728,75730 +SFgmOmxq;51811,50256 +GIbsXXQJ;83856,21162 +hlRqsRNG;30954,52507 +kcmoRVmQ;44059,8657 +aDGynqkb;6670,81479 +UGWydlZY;70844,38937 +WKbRQVVd;17803,1521 +VBKWXxCU;56390,50983 +iCccPvzP;69440,19409 +XBUpfrAg;31269,25667 +ReBViZcB;46286,71490 +bBxFXWgE;84732,28075 +IoPaNrPC;37237,55055 +LkAxuKwj;88470,42987 +mFrLzUWt;64810,80815 +XtLVRfRo;44398,11331 +FIokdgpm;18513,13032 +EEfNtyqz;34071,32985 +MjVRdswV;38035,72637 +SWwQVDci;72344,2579 +CwaUbsAe;41568,26269 +JCSiqCjG;1364,37322 +LbdDptYW;58121,59942 +WWhzVAZE;10567,47583 +tgtZhpal;52502,89901 +BQDLFgfb;54401,83162 +igzNODNA;9221,17210 +LfAwDqEj;88013,6449 +UeKMQQqa;37624,18836 +YRWrZWlb;50744,84206 +sUsbydEX;55238,12913 +VZWFJkHD;45434,49003 +TWRGXpHM;12459,35893 +sngekHGm;69473,10086 +xxuqMPCt;17787,21503 +xFdviMTG;49920,53554 +qAafyeGr;4205,37261 +HVNuZFgb;48076,39148 +gQKgvbEN;28814,75930 +LaNWAXRC;42769,27532 +SFEzcnkj;51405,14754 +iJtsSBjR;85228,75429 +nwEoyyok;60301,13257 +ZeJNlqCO;22582,74331 +bKDxuaPN;67214,56220 +VpUJrlCw;65978,29309 +iUiHvMFO;39702,84965 +knWmTAvX;13233,77168 +EgTYkhov;39647,17761 +pLwkfVEI;70849,84786 +cPrxFNpE;56567,25825 +DndzwxsX;40735,69850 +ZezmbqAY;33701,43873 +NrglllWH;35538,68603 +FdKfzVOj;19651,66136 +oAAuPNsW;1856,30166 +dVNdfzLI;71713,17280 +yBnFjxjT;11002,15757 +preiCwYe;76358,28698 +DujqlNRq;60047,76426 +puynebdE;30083,68049 +ZAvgAVAL;71610,48693 +HbsXMmmP;30046,17415 +MLerdTuH;51011,58206 +hTPahMPx;12322,45099 +kMQuSagY;64704,27048 +HAHniRQA;48749,87071 +HCOhAyST;51821,6747 +NrsbtNtH;68968,82444 +JVhfwjCE;51395,8621 +hUMyzNwE;63141,85730 +CezMDiuv;53355,82272 +xXeixNhU;69873,4102 +RJaQVDEv;78543,19331 +TguFnMQF;29424,43743 +NbDSYsRn;52227,70084 +nyCHCFYr;34591,64424 +cDzpJmEk;71643,40682 +cNhyrJcw;42716,3985 +yhgsCZoY;62107,68264 +UQKrqmol;85143,58483 +cYBvjPxI;89681,42011 +YeZKQUke;8800,66096 +diqEONKw;10972,15527 +eiXuOrjv;39396,25015 +ROArdcMg;50063,67604 +pZIjSFYg;6692,35414 +AlsVxBbL;48989,46557 +BCmiLifr;39695,25733 +qqPdygch;80547,46110 +yRFjgjer;18248,69221 +VuPSuTSN;28290,20751 +iEXhlYLz;35961,14784 +MGXcDopM;3778,50654 +bFStpRjQ;7833,1281 +PBdFbsDN;50122,71224 +KFBYhFDh;36110,60726 +VfmtspqC;32100,73226 +DGUanwuG;30175,31074 +uEEemXKD;66581,36480 +fwxquwdD;49334,40503 +WPTSURdN;76779,1376 +dfFNOMVN;47435,60668 +spdzSmjU;27969,73251 +OsDGdGCF;33529,20045 +jbGndWHS;65218,1161 +AMVANjWg;77030,72530 +KgBbTiPi;12804,21115 +gHJfbmsH;10541,69207 +CwoEBGfA;66011,36277 +xwvvVoTl;52111,48092 +EYxCPKSL;49577,13624 +gOTyzCnZ;73294,45505 +JuPQgyCn;58869,9551 +oKkTbMHa;28431,86656 +aFGixwpr;12711,22510 +dnuRamLR;37771,22505 +OdrkNFMt;67612,22326 +yDttjSKe;17050,81440 +gJnieIKt;22914,34053 +cFCxnNjL;88245,59561 +byNHsnBl;67691,2127 +QDbyztJi;64855,67148 +WwKTbCct;21129,38652 +EHqWfzrk;1752,14890 +UHXRyjub;10352,21637 +eDvRDfGi;4629,53130 +ZOQcQkFh;88376,9537 +yJUBAgha;2113,60675 +NqUKdOyM;15013,60203 +qsMmjPgU;32368,26853 +ufoDJlFB;40313,26885 +ZXmbSrvK;28743,13604 +yFneVuDv;79899,89644 +CshSRUjp;66307,44978 +NYrNCxeC;54871,84669 +dSBnSWIu;17467,39317 +dfrsiHeC;65362,7001 +lmupkTVJ;15268,70068 +CVnqhIdd;53492,19787 +EZjdvkvo;32636,10702 +BPKoBOPR;9612,28602 +hsnFAnLJ;79073,81565 +qpNQbDrU;51282,28839 +uNEXZaTB;29624,80518 +ibZCCuwX;78665,61472 +MgcTCtGq;74079,52349 +GMjzqgAn;66098,48448 +sflsOcAX;39641,36569 +ajQMrzOw;69567,33757 +UiAhQtiL;79092,56855 +WwWnJRIO;36038,89832 +GpcKLPeG;32838,14107 +qBlkckDu;80708,68224 +dslgIPxY;32898,38356 +LzrXmdgx;49421,74292 +VhgPIWsX;71256,5929 +LMfSMHrl;13268,43838 +ZZEmNWHz;78497,86283 +ocYXNAJd;55889,53313 +tnxLFOTg;32842,13503 +HzPqulwg;23592,20833 +QgMMyfXG;1176,73704 +XowNMfPU;17528,51275 +fRoFcGvU;82733,21132 +RRVSFDZX;31924,18440 +StHemxPa;39480,86487 +dlLpoJFm;59784,53290 +zKkqGHOl;73537,46674 +vcpfcxVi;63515,17867 +tCTVBHcJ;30419,2257 +OrcUjSEs;79621,40543 +XklDsKii;24820,87103 +zTQUrDbq;89787,31538 +ZmEantqV;79678,24495 +GwJMSNcx;45745,82975 +YWpHQenP;30030,85081 +kxWHCDIy;57146,5353 +lgbabnKO;1615,80507 +kZjVvIoY;16830,12312 +iHVSZcNj;37977,77968 +JFpNGNeO;36423,33684 +sBiSopFo;55025,42118 +JVqpuyWV;55933,2070 +tyZkYqfe;77964,48739 +NfVjQdkZ;53306,68056 +yStDMJIX;86319,70171 +lIYwufFC;35011,27236 +RLOLdayL;66426,27358 +UKcusvmM;71361,52842 +bUqsiXRV;22908,20993 +IpVuJqdB;53366,28320 +nRCqDBIm;40608,20700 +CWQnhuAj;70347,1028 +ayILmPlk;89009,72097 +jQxIwynx;37057,85496 +pLWXzqOs;81525,31450 +tpHFBJKv;43420,31512 +rsUxcNAF;80386,8987 +gyWRsjdI;36391,7455 +XrdBazez;13584,3659 +WaqiYELp;30973,85097 +GQdYirJp;15152,40888 +wDSAfiPD;57213,32349 +UOiPmjam;25474,16717 +MfDZYhsS;57929,36137 +PYRhHZtt;44821,50978 +PCJbAuVO;57177,59646 +PqLqDHZc;27801,24916 +oOfdMlQv;1704,42536 +ZoZgrlRN;72707,89203 +xxoaSMiz;72799,13290 +kdhxdeGn;12376,76292 +GBJWWWVV;13872,69844 +vbnWufVF;72616,86276 +IYlDOuaF;18911,43643 +ODhKaUVf;6908,67984 +tsJSlCLp;9443,54799 +prFCVuls;20375,59553 +HBMbXngV;18501,89516 +xtivWnte;76630,58715 +dBjZYTvd;54953,16842 +vQytitFe;43055,67859 +lJzGuhmq;61716,65217 +epMQgEgY;35345,82824 +FnwxKrMP;74424,82201 +UwUVVxIy;7714,35969 +zEliRwFR;39436,54213 +WfgufOfC;2334,54694 +vcLIVDNe;46600,13970 +rkFvfagi;53833,65802 +NXfAmMTL;18323,58275 +ydFEAFlO;30007,65796 +gDZbEkfe;77520,1353 +siZmTItL;88101,69707 +ZmJsfuIK;78293,29144 +XSmLTGvB;61011,81752 +VakYJarH;8507,52159 +gLMfBHwh;66311,18468 +eLehaxwh;74517,80222 +jrDXUspb;37716,80294 +jojQjQAg;76953,13563 +KDGtYnvG;75338,64612 +kRsFKZfw;3452,73460 +hNTgDZkE;61193,12222 +ZQemYqEJ;59804,50421 +LEdxcSyh;8598,38363 +txonOCCP;83737,66734 +bPROZeER;79450,40268 +geOpXVUH;24837,68410 +AUKBMKqs;54618,61741 +LdurvBSy;70763,7730 +mvrJMUlW;26640,31198 +vOnfVbiR;82773,50404 +HMNnYAWc;32621,24047 +Ufadvkso;70056,32342 +rifIEgig;27795,40568 +SNrZPQcR;45949,74583 +DiyRUBVy;58697,36981 +kFbpcrvn;53710,85438 +RyQNWkjO;29549,82723 +QwbIZhka;48463,41804 +lOZtlMSB;38461,52859 +hPspxJdt;51560,54106 +drCOHUJb;56028,56950 +HYKCledI;60070,39291 +wuwujaaX;17709,10111 +drIoRxom;37044,88436 +RbMqjPyK;35559,17876 +OOHmxjYR;32370,71799 +IYRvzHtk;56624,10879 +LlyyWfPk;67052,33843 +oZZxVBwD;84312,88890 +psjxiTBv;39161,82319 +NtlzBsUu;85396,89886 +AVCeOrtA;73932,52500 +HdpZIDxg;42511,53885 +UkIEWzuI;45813,30771 +VcbEpeXm;51653,84188 +QWzryvvU;71988,21116 +rRwLErQq;51008,31432 +UnSlwfrX;48822,19958 +nNAuDlpL;12368,30084 +hgQQkijY;23923,40688 +haSvOFAy;64015,29453 +MUlWUbYW;85239,83267 +wgxKOGxu;54145,59552 +dOALuIlZ;3106,73942 +vWyuuNAR;89985,77300 +PPrVtUar;33406,26739 +OOGjLRcI;34190,50565 +LQgcytIm;84358,78927 +WCYKcrbR;81725,9643 +LXthZPCI;76393,84576 +SkaSDFtU;55388,58715 +KEiSqDsR;8219,18909 +IKqZmlZj;47629,3424 +YrNzVdnV;57126,68365 +ywXZkXvV;37106,51130 +SXhzblcv;34684,34583 +mfhznJNN;3506,19601 +HNtGJXfy;30359,27790 +ShpULPDq;84666,34531 +IfFahIdf;44063,86282 +LLtFOJFx;85577,86134 +jDpBGpUo;14611,89635 +XqkZaMNY;87176,27511 +lfabpeIf;44197,55159 +HLDXKthJ;38952,82561 +GBmkRLTO;23183,55212 +WocytYRF;8902,89057 +liEZawjS;3706,37491 +vMNsoDmm;37370,66376 +vRfUoCpz;11388,32973 +sfWBBJws;55651,39639 +qQNcuMVx;71425,88649 +ifVOjAOp;32205,15490 +ArhAWkUV;76229,3855 +mUxteMbz;58627,85761 +jQWFSHlT;67150,77152 +BcyEEFmB;58744,35645 +IhbkDldz;20085,68211 +DvTaDmjW;73423,58494 +sRvHneBc;37324,50311 +cBjDjffa;31622,65057 +UlXRtyjN;9378,39093 +LNCVecOm;5097,87612 +hWKKBvtt;51431,59617 +DpwtbTeI;30669,74076 +pXSVsnKr;19070,77098 +SApSAguP;39258,70943 +JRpmFLKa;13709,22107 +joNojzMq;9466,60413 +YNXDTytJ;49300,82245 +EwCecmvr;59306,26740 +FAAVrTJE;69272,10854 +lhTuLTXQ;82742,71992 +DnZGPLEn;16599,61068 +utUUHCPn;87861,21430 +ockjeVWL;62143,21619 +YRFdWyDf;76928,27712 +wRfCeqYb;4096,37868 +SnKdhYRG;89864,87682 +mWsjUYak;44303,14173 +vraNMHne;70513,59388 +qOYjjNWq;52038,24160 +zsXgEOfl;77010,22157 +xvGfHfrY;89826,14989 +fWuhiMxA;61567,39639 +ZqyyoVIw;74132,33046 +kmrwHZSX;8968,1116 +PGzfhASc;59035,34319 +bLXAaOYK;47096,35609 +xSZBFvxA;76466,89145 +OZLcfCKP;53607,72371 +pHaPGanr;30295,63686 +gDoAnwqC;80030,12568 +gVHSPLMc;52613,2187 +yupvLyIo;60761,43084 +KnjnJvFt;2550,15609 +pNcEKgeH;32098,29433 +SrXzDOcK;30816,84313 +SYarhwiS;4982,76976 +nSNCGpJf;8369,46664 +nMBNDDgI;57484,60511 +DVENZfUd;53341,32767 +ZRewvSnj;29912,2825 +KBpZBxoh;2865,34297 +oBTIKHal;81786,61982 +BKrMgupa;34542,52408 +TLsMOpoc;74106,13497 +LXSofTXN;32656,82425 +CoTqNKMJ;83391,73357 +XGDYMcTf;30568,48103 +tFUXcgEF;61827,88118 +VzcQRLyx;26154,46733 +SCKiMbDz;58603,80242 +xCbDfZqa;8688,87510 +ufPhJTDS;5512,28575 +iMMuZvds;83342,54140 +kAGTEhQD;19380,86951 +aeGsuhPa;25243,65352 +itCgIlUY;75679,70273 +HeMlnUgN;4015,46470 +pmlCjsqo;2879,40249 +pjRppbqA;88296,32868 +tKzoFfSv;53641,69392 +xGpPbsXi;17348,80097 +aqUBSFqu;20570,7597 +OJFJVUPT;6480,34445 +VIffnUFZ;24432,74583 +vfVJgsEv;25022,56781 +evcvnFIr;75942,25479 +mXFzKPGt;61000,54083 +qvQxrIxg;36987,62655 +NrtSNfcu;10228,33763 +cJCSkgnv;88449,48546 +niTDutms;73337,36278 +obTUfAGl;18391,2987 +IRwXBBoi;66456,33377 +sJBKmbNn;67879,24541 +PQgTowCn;44228,65159 +nYwdHTnl;4056,74554 +TlgmnUqJ;7213,37584 +nWnDXvsQ;21647,78001 +OWBeAqCi;17326,3534 +zHvlOewd;8385,62356 +pkSdmiVq;15349,10051 +jaFEPGBP;21171,86590 +nkkBALPP;2609,80949 +XUDkzVTi;71098,15528 +SSuqoXTa;88226,6082 +wWtutZEF;31896,55649 +DuaufPuu;12047,71060 +TbbPkcAS;22886,68680 +JQfmvnSf;69846,14128 +HaeOMsQY;61146,68488 +ZAiVeOnx;7001,72483 +PPzVyeNc;49882,29067 +rrjzzMrZ;10494,61907 +jUtusnwZ;63310,64297 +WLTUzgTw;73394,85403 +SkBsvDGq;35598,29491 +avRZqggu;86527,54754 +NRiHafnl;10876,87658 +zNOYeOdR;22524,80108 +KFZCjRhM;62320,16633 +HhMbYvGl;82770,30030 +WqDJaFmI;44193,56502 +liHSNcmj;73288,72826 +leGpVsJO;61369,14822 +fLkODduJ;61813,6778 +GwGJkwmE;18430,76310 +dqhcaSYG;7023,10549 +dTjrYJOl;2983,80699 +YYIexVMm;20300,68989 +vwzSEBOM;63856,73915 +YKcKtNcF;35116,84870 +CHXnINtP;39977,65682 +sPpiApMX;65199,13055 +PQjUTOpC;43118,39845 +mhOBpNKi;79220,48643 +wMTlcCSY;63845,24391 +YQEsUvqC;46800,34737 +AQxEZBaE;51233,45701 +GzupHCPy;70258,45943 +QwaihjnL;26719,41376 +vLhnrdxM;18913,87230 +XrnPKWAc;31243,82506 +iNxcTGcU;78320,77055 +iwpDjuVw;23785,52293 +LFcQXxmO;63703,45803 +sZykDzlP;33648,20192 +MvhiEJAl;26567,36653 +ZeYJqWPn;87900,17836 +peaKTSXc;80772,65618 +QUviHvhT;36454,55582 +YvGUTApC;43201,52366 +dzWexeTD;27048,12599 +iDXTfvwI;15057,50116 +YHDkkfek;14414,84472 +hzzDmVgF;31368,5654 +wIRyxziP;76845,89373 +wIRPcgfT;89789,77432 +orRCdleu;58945,80247 +IpchKRQe;44603,25538 +XHNtWamD;15189,4616 +OalQuUIc;4435,67223 +MOHBcsAA;55832,10118 +TkBfMqfx;86917,50955 +FQGGefve;5440,85874 +VIfkOqFj;19398,54794 +qNyifnII;44931,26684 +TTQrzuAE;4664,89892 +RrknfJbq;26773,49212 +CFPHfbhD;7040,22766 +ZGCKYtCT;12991,12354 +JCEHJDOE;22995,41211 +xxkuuCtR;72436,5735 +Inagoyto;69835,58849 +NEeutKPF;58056,71990 +sbsGDtBS;39777,72822 +VWfdTOst;39791,41950 +fzTzxdPI;36503,52980 +XURdeINT;77081,6025 +ltjxDNaq;43716,58214 +VfyZLhKn;41830,7552 +ruzNOQbZ;31665,58053 +gyUdJOSB;44623,66660 +thRUbrqc;62570,51069 +THcecdPg;20487,60817 +RaaIVxmn;13033,9026 +RxYCHTag;56226,85781 +ZcsvvElL;34649,10379 +TayuTrIM;72614,3984 +UBwbyByt;13526,54849 +DNzLTCrU;87369,67978 +kVrUAYWp;52235,88317 +EwrrNrUG;42660,12376 +FBSRxZnX;24544,76014 +RQecKflI;23911,55429 +lWiNyMeC;65319,38541 +YDkKmlrS;50150,87228 +QSUpBKIt;53500,44788 +OVckJlWU;14529,54174 +VJPDCkcY;84837,59504 +gNtrXSPe;4624,78529 +xQbyNSSw;2317,32058 +DKQZaoBP;43007,14177 +NBDZuHqI;9903,70111 +QKmFILBJ;65581,37889 +xtROmcmi;85714,45004 +vIfnXTGI;19881,37827 +XdhOXJVm;48789,39870 +lvpJeNoi;85422,1246 +VsSgqObz;82368,3331 +mtgpfpNj;28918,86939 +ithOGlOB;67234,63204 +zSXQuOsA;34716,42694 +uShbXkEn;63368,76131 +dDzVwBiQ;56664,23487 +ztKMKxFI;58104,84014 +NURKFysn;6357,50769 +gaZGsnVo;24480,9252 +mfBtaBni;65178,33685 +kVUvpXxm;30810,8485 +UNslILpN;50368,66315 +gWhGdiON;39810,81821 +eAqyHvll;50654,13065 +lTnnrqIa;59817,49663 +aLjUnyoS;73274,18580 +FeLrkUIf;32297,33086 +SXbgdFCt;67616,68163 +dKszKMQt;65845,52125 +iHGgmvxG;74374,81384 +IJHPOWSI;83884,59498 +jlHuEtRo;75625,66806 +DeQIOCML;7680,22322 +ItMUDxQR;42928,68434 +sBoLcyQy;56428,83943 +isrEuuGH;14137,74904 +zERVypQz;16668,88447 +GJyPDxLv;21703,65646 +uFLLeHVy;36901,66475 +JKEQComA;12619,38987 +pnOeDRao;79266,40698 +QGMGgmhX;39046,68096 +xrbupMbv;59820,18181 +SMOvKgIm;7482,59759 +BHcVKImF;84609,49590 +YoQZxunq;88046,29203 +JuLHaJBr;15937,66607 +OLZqgfHG;62212,86012 +oDxndptn;4433,22950 +RQCKasFi;58074,45684 +jDfccLkY;28323,56475 +bXIehiGi;69260,53465 +mjyGFWxU;51006,14775 +ZEEdNEgG;20028,56498 +qCTHOpGH;71784,30021 +WSwVfBEH;37715,26664 +EVzJfVsp;58312,70795 +osOvfckZ;71983,51791 +TtqfOvki;86782,44435 +unaOguHe;2428,57497 +xjgHYWlT;17966,54829 +oogUNPes;80954,24371 +hXKqkaHK;24870,84072 +eSIxasHs;21538,49631 +YSKKwNuH;56849,32770 +ivGAnqph;64272,40489 +zwDlQlpy;10709,41939 +NLRLIxJM;84741,12319 +LfVxpCfF;27391,5298 +CvUWZjKp;27753,76159 +XNBimPaR;32722,40241 +qTGnSIKN;63036,63223 +gVqPYojY;86659,74034 +pWKbrBmw;66731,55333 +uzArpdBZ;64399,19139 +bBzCXhBk;50786,11451 +WKQAZyfT;61347,54527 +muKfqjra;37570,44350 +unTtKeqH;72452,38782 +WFCDEsGN;82663,15295 +fXjBjIGz;71432,10013 +eNknpbPf;41692,38374 +jEmBMsKb;49606,30016 +rJbHhRrK;65044,23626 +duIoqnaz;86474,83084 +yASZSTit;54563,77228 +LBMbAGuk;15097,31790 +KNchlJyS;64409,19340 +gtzDYBQr;24598,66284 +kUpYqsli;21009,37523 +gemLCBCa;39183,7677 +sHUhyqqD;47647,17670 +hwLHXCWy;37436,22263 +EMbLatka;25500,63691 +RctLiVDd;57886,86008 +PbBnpmZG;82341,80584 +crCjjZbw;61370,19182 +RcNmpAxk;32897,85769 +vWaMXEaA;65574,27844 +mKcEvfxw;37659,59060 +mYjHjOYU;9126,18559 +TEndRhwS;40421,29424 +WkjvPVTr;6334,23428 +eRTPfapP;7167,47956 +CXtzEnph;18925,78963 +ZiTjEldu;12742,65872 +zXThmABp;63883,13198 +LiUZEeaF;86092,24221 +SOnAwmyY;10430,36920 +eAXmkMhu;82046,85204 +RCThrdBd;65096,4800 +InjPqSJz;42633,78360 +JvqNyRnV;78540,12756 +RqQCxqRZ;81120,3250 +uXphibUI;22726,40911 +UPyqUndh;16541,66812 +pTTeiThN;4743,86139 +kWtHMETh;15302,3596 +QbxRuYBT;39872,69704 +aHZSSHYW;36841,83035 +VhBEgmwy;83103,28050 +KuDeBYjw;81854,54601 +kGerIaKO;52351,28094 +OmhdjDVN;26719,79745 +HNLVbgbc;60597,11101 +dGDoIgEY;36027,56663 +JXcLyXVB;24232,38792 +mOufhxXg;23845,78510 +wofRZUFr;65757,18587 +TnYdGSXw;83715,85222 +xwOsWfkh;44209,85428 +TeGefVCI;77747,39283 +nPNPsImi;46966,56359 +zeKjDTXq;7401,56660 +UKyfpmbj;56841,22336 +XKCaGiJj;55366,77004 +zupckUze;1303,32519 +XvtwUpgo;61048,29267 +aptsZGqu;71091,8749 +mBUqPPVr;24537,87622 +gumpCywt;38887,19914 +jeyaiOFC;63012,62260 +VBQMkeAr;35809,14413 +FThnqwJF;42588,81361 +RMpLjjev;68583,85742 +xCDCuXHs;25314,25085 +YZXkXEyM;47872,49595 +pOhHwGYu;11470,82878 +JCisjmsl;21814,8867 +lWetaesO;50185,5455 +ribdQrax;5152,69996 +izvRaCUA;67431,63631 +rlreFipr;37571,55979 +vsyeEBuI;30364,36234 +VuHcodBa;3086,52140 +SVgExiRL;72957,60245 +bFqPBWEl;44006,45390 +utCmCyUa;7999,53063 +KPPlRSKI;20274,51680 +ZBVpacML;49814,73964 +FInijXIs;53482,37780 +UOStwCtX;27147,25489 +iKAMQAHK;31269,76576 +POvIUmay;15640,78105 +AWJqZmNV;46968,69002 +ETVJDaZw;70455,65377 +YDyKNRXu;85066,26996 +HhMiPDJc;83303,60461 +YYwdnKQJ;78772,21599 +qxhaSNhy;5304,63044 +BWkOtiOR;62466,67960 +SzQhfSPZ;1085,29502 +VgYIQOPc;84852,58595 +FCTNwwpw;14946,62315 +AeJQHIbs;77470,27575 +dyAzUZZW;68156,22541 +cqoMoIiw;51187,23714 +XagJGsgG;49015,2357 +OhorLMHn;72707,69761 +ZqsqgtUS;58738,51702 +SAmtONmc;28267,54448 +aMFazbwt;23740,78499 +GRgoDkdE;40575,13922 +GxisFwdC;16204,33156 +EAOyiwTi;10155,39725 +frxqiDGX;76516,27126 +YcSTcxYN;11314,33502 +Gyzdnfyf;26275,62857 +ywaeMfVI;24060,1922 +TjeLUvRU;1627,87308 +GcBvStEy;70954,62235 +PSXvmrwO;9284,76561 +vorzwjPx;2664,70751 +DyBjNFUm;35784,4467 +QrpxZFeQ;64636,74101 +jUqHccKF;71730,8183 +vRKKkPBM;69260,71327 +fuitrvWn;24994,68034 +snZIXcEb;44654,30924 +EPbokyPh;6409,10271 +yLjigQUw;27247,66673 +pnEAAuUu;74589,32931 +XfWWyFSX;21804,7129 +jAdnVhDi;67226,72217 +qbJDzvdE;65110,72066 +mXDYUzUU;22344,62123 +juLSHtJD;2437,52271 +sxYlsuDW;55911,89800 +IwVRHIMD;32451,86478 +EqnZyLTg;69157,82311 +cPhMfkEB;32883,10938 +wsTSaVoL;72783,68895 +NhKvAGBY;81919,58125 +MVrpoQjB;54421,27487 +EAgBajqu;32593,84388 +OYhytTIY;51583,56332 +IILFRqXf;21059,54278 +JGLAIOYg;62865,38627 +CtCsHShH;28944,31349 +xjwXbFMJ;72022,27110 +hAUaHKTN;86762,73774 +VnIFQbLd;29003,55186 +oZKJQaLK;58396,76174 +hiQVAYXf;65541,28264 +ceqaJguI;4748,89059 +PNcRgAZE;41475,8680 +MbOLkLXA;46572,33480 +EPDKDDVv;12531,2607 +zloJIGeK;31088,49463 +UurBtvFR;2285,32017 +wuJYxLad;53345,65670 +YvExiaII;47415,13237 +lbdBDGeH;22073,26494 +UTjWjTlk;70013,18815 +tukemoRL;17931,74074 +iArDrRWm;40553,35090 +EjzssCNo;48836,88638 +pCCIKXvO;14173,79999 +vxiKGqYC;36996,71968 +CfrTBEVH;19300,3783 +kftliaMy;60562,67371 +CZJXYCiu;89923,29416 +plBEkaQx;52427,10750 +MFDqbhsQ;88879,68268 +lQSYlTzU;65959,73019 +RywPCRNQ;74458,78099 +wuJdeDdX;6812,70133 +RtTznyWu;52683,19012 +cvnpGOFA;64950,65107 +MIblzDwD;12254,51833 +wxrSDaxo;15806,9606 +cACEdIff;55759,24778 +XhPzSApd;34552,78282 +HryAGALc;71007,26428 +wbooWjJT;30589,37255 +QHwagWTl;22792,10122 +mzdbZxwH;57656,27607 +pswZasxe;5648,89166 +BgdoMkod;6507,56328 +BZZdGaEx;43368,41279 +xtEnhloi;29195,22436 +qJMhKYKb;9000,70872 +bavqPwcz;69659,58514 +plUxgSgz;6703,24654 +oDSFLjJI;41896,8335 +vkDMYbWm;80336,15373 +SBiDMVYn;8947,36588 +IWbfNRFP;3605,42233 +oqotPlpe;44531,62918 +ZidGxgYv;56195,74092 +qgXKzMtp;68429,25720 +YRPYuXty;66986,31881 +WhrXKKzn;72633,1765 +UahNbMNd;63715,17804 +dZCSIbVl;87597,25271 +jasPbAan;21136,23145 +EAVbIdco;41564,53074 +HncMePFL;78419,22413 +UZijLbDD;81711,52026 +omyExiAM;14049,10490 +zxGlJfim;36801,16146 +YHMxhVKn;34162,45492 +mjWShWsg;64477,20531 +fiVhgheQ;6261,2133 +oIVxPojK;37673,65012 +TzupmktU;47125,82131 +uYJChRTp;27129,74587 +cQPNHlwH;64760,63989 +CzMPEefn;64238,1610 +wPEJWRcS;66773,46350 +PnbpMABm;44382,2495 +vpESfzZg;46358,87493 +xuWGijGk;21105,84716 +OdCTTxlM;26603,69643 +FLdquxJo;59919,1460 +clmCXizL;43218,63344 +kESxKwth;31018,7108 +TDeOFIWO;55059,52777 +FRAfWoxA;37979,61473 +wakLwOKX;34084,70188 +GoHdPfkc;83507,46617 +LrQmNQtS;35344,19633 +qWXfIUNI;79297,79255 +SdpgwfFL;45684,30776 +RFvElQUc;27601,68312 +wntRuvYF;50923,18154 +bXcBlMWv;2532,53081 +UdZyDvgA;50123,9531 +aOqizLBr;47416,41526 +WjzDclgp;1188,60394 +uUkmDFlk;88950,22365 +VECNTusB;87414,52460 +GAhJqbvT;84914,33155 +FolYOQXG;19976,65586 +HTbfZUOP;69566,32002 +DmshOAqP;11457,84384 +GylErYjo;82136,43151 +hcXCfjBn;58355,57964 +EjWkyrWj;61113,80885 +MnkStphN;43847,68859 +dfiFnAgZ;30795,18143 +lzLJTzuw;36022,9070 +ZBmMwvZt;67439,38176 +JebiNiQm;55286,13419 +WDPlKESN;77172,69029 +vbrykGmx;46947,6751 +PJOkYOWj;13890,19847 +PhNAYeKy;69292,15333 +dMiYNfoj;47619,12507 +LFYSMQyx;52891,76777 +bftgqozA;26040,39476 +LylUBGwU;8396,19524 +OwQOVDID;88542,67414 +EiNtbwuR;43116,17520 +bPuHaSDa;14161,42064 +kQpTqyPj;26950,11599 +AkfgUkwH;41698,5125 +lYUgMyPx;40710,1741 +tPVsLANN;38600,61081 +nGGRNxAK;46631,76683 +xaVFAaCC;8467,9898 +TVsbiHfR;46651,29807 +ApSHDTBh;73424,45685 +lxjuaxMX;8473,78422 +IaPhnzdb;80470,22004 +bOiKWnSG;27490,47975 +CrIeBgnu;52826,11267 +HQExoYuD;74243,83977 +GeOqcXnj;4520,70285 +PCQgtCHb;2168,38908 +KCWLwKSV;80843,26975 +iBigjErl;49342,49005 +ftyGXVkV;57629,63037 +dnWMXOpw;55350,88282 +EXjeFouR;65805,2944 +sUTkquma;59909,57633 +IsFbiqVy;72577,51576 +agXEsFxW;68223,23095 +FZqFHhiP;51142,83753 +wKpAUZaZ;2656,87121 +fbVgysXm;39009,78173 +PuMrZJpP;26733,9910 +NyWHUBJx;4790,44014 +VZcVWsAM;27064,65126 +pTyIaYhr;78419,77706 +uReBvtgb;17086,76966 +ijVIhFfk;18312,60791 +PaMYGWxG;46159,56638 +KeeOgxWL;67841,69109 +GZGnzpms;69330,24737 +ZPXePzZG;89448,56080 +ndMObxsN;43265,12885 +NvGgioKy;30547,17025 +LWzrcERB;68468,79853 +plJINgpD;16104,33761 +DMycUjqg;55445,39758 +wzUXiQaY;67036,82007 +IXfjshSy;59192,40121 +ZaNECXDn;21377,5802 +TpfNWnSW;5871,13712 +EvYoFWYU;49116,56614 +dDVfqZgj;11108,46122 +LhdedXqz;31108,65746 +DzIscXGk;39508,53294 +wKNddkRZ;20759,46448 +RLUisaCj;34206,62987 +pLoLdDJG;22590,64930 +jXnjnoqw;71828,21548 +rbDlxHhN;48193,83195 +hxKoDgem;34268,66566 +MlgJlbSc;32120,73585 +uCDUiJUe;35243,39344 +PXDRgnIJ;89268,69550 +MSLrSRJN;77277,41539 +GWxJInzU;25367,40789 +QbzCIPRc;42972,31074 +lzAqonPw;69938,69545 +AumsqUVa;52159,89690 +ZZSEQaSU;40508,13621 +HjmuzXNn;67209,4524 +MEPtmPNe;2209,72717 +NsDibCyw;69284,7157 +LyBVkjWp;7355,42088 +rGdJyWGL;71571,87141 +zdkKpUxu;10065,31873 +SDNDuSkQ;11076,79984 +tWAWDeCS;80191,22071 +WgmRfQHq;54118,38990 +DsBsndWg;36924,33476 +LQeugaAY;16647,78316 +UpaVbEtm;78362,82746 +XJWglEjj;19340,84615 +bkkdRQop;15828,54250 +WZrVEhRS;26675,88823 +fkISQjio;57566,24940 +lQxXXoIu;65948,69881 +SpUVUfjz;62248,68747 +ChEvljPV;78562,87166 +YNKDrdJw;77723,36897 +tjzrhaoC;51902,58971 +LdopvNgM;6896,51798 +aNKboJRh;41709,21095 +HTHBVyUP;27754,60394 +YElLPwAV;80573,34974 +GdFFpQgo;60080,85564 +bCCxnSai;19185,34820 +mypTbTQM;62799,41118 +ABdNNuzm;77677,42138 +wEwANpgi;37199,56082 +AWsCGOXn;32357,42883 +tnwEYQpc;11924,60194 +EFiTrgVr;22362,27798 +WUcRpICD;61125,5686 +zWyLESuD;81494,82490 +BEKSyFev;67204,10654 +BxcbioQv;75110,42174 +bIyMDotu;13199,74333 +yrujVFbB;19676,60006 +ISQOdRPw;76474,45583 +evWTHbbu;32232,5070 +kkWQbAVM;33503,43757 +yjVyAwbO;78647,42200 +ijxmoYOC;80860,70547 +suropmzL;55827,21475 +usOmNOkG;76312,1766 +EmlrooWf;6974,77378 +HzqPHOXj;17875,9785 +mSUNxoEe;38241,41362 +rQzhEIJu;18227,18044 +fSQjpSRh;48751,86807 +zVkHQJJG;33975,62636 +aTUcszFX;82032,63860 +hYVWnJxM;26019,14075 +DfrByTJX;78185,26201 +WgKVOHES;36403,82932 +GxZTjyyO;10027,45056 +XiunKUll;66409,8732 +DAuyMeIV;47796,7461 +fYCqFhOi;71924,41209 +WcehkQrK;57064,27824 +PWLQBTJu;72469,79725 +LbLZihsv;29604,7189 +hTUJewkZ;63039,45678 +kbfqsBXx;19388,82561 +kMWMiAiH;4392,28029 +igbWEVLG;1647,8590 +wunzxKBl;78962,27149 +SpFgYUZn;67046,2235 +rHhhvZKM;40345,19358 +EefXjUtK;3263,11822 +tVKXteEa;86781,9518 +AdvmlIDZ;11396,60259 +kwJmGOgc;18036,58998 +kCkGCeDM;67424,76779 +cGgCUtEu;16449,20986 +axHZVxkL;39430,42809 +YdxroVOC;66203,31722 +YgTPNDZE;13765,29433 +cHDATjZs;85306,1088 +UtEGQNCQ;42349,56414 +dzXQWqan;49211,62000 +sgdVMTMs;84909,66891 +PApDADwb;3111,51416 +AcpaaDFf;72634,49342 +QlDfYjgs;88399,62256 +aHNLcCsh;26964,62786 +seHXcxZg;56040,79958 +zzbsTnUX;28118,42494 +OehyCzXm;10691,28768 +ZypYBeky;12551,5653 +qHzzRZEA;43781,40938 +BUkaFATz;75469,15001 +MOcCstSy;39171,10209 +MdFRnvVe;51840,65112 +vAwokcMt;20821,52206 +RLwuKUuP;71709,8299 +UXDSEaZE;30132,82426 +buknBcoL;12027,66909 +JljsajkV;12847,16970 +uFZKhQON;4438,83041 +zviMbpJD;75590,45230 +ZgcXxILR;85090,57185 +beXwhyjc;26710,45733 +okrFquWQ;12342,39410 +WtogmTpq;2628,12391 +NNHcrDWX;14231,29166 +LBvnhzvf;1623,82005 +xLEOMeBy;13440,59291 +XgyhQVNF;18156,32001 +SFtNLXBe;9364,65743 +RPxGAEhy;6884,26550 +SRgkqGzj;44722,39271 +BpWDhpSJ;26039,1264 +dmzIwQLv;46647,44975 +JqjyhGqB;25475,9878 +VhGvmmaQ;65363,56025 +wrAlSYxa;51229,70054 +KyWEpRtC;9758,39204 +KuXWNOpE;85030,3443 +IUzCwTtd;3641,46679 +GlvlsRvf;2808,32579 +inUfOssb;76591,88553 +SIwJKGgU;72846,28586 +soXlshdQ;1855,77173 +KMPqxfnx;35211,68738 +UoPnaNtY;67819,84967 +Aibnbfgj;34461,41054 +TSVXGOtu;56530,4747 +QiXnbejC;42928,4844 +CmiwNiVD;82369,66172 +rWASiWVE;12842,64835 +xUjJPxDg;17006,85291 +ETDdgrUS;42447,77057 +sQmSzBeB;77214,29408 +cJdhLvda;46457,32885 +cFJfcotq;42372,34941 +lEAfiGKN;17969,26358 +HRBzWmKJ;64751,19466 +gsxdKyAU;83496,8848 +foXUuzGe;66117,70548 +ZKxGFTnz;62676,41271 +EnPHnEHx;27082,28135 +XsMKnERI;78964,36286 +qayvqUEI;80856,35756 +oHcnSzBB;50429,19814 +XFAgOCiN;13988,44636 +BDHKqFEU;26733,85772 +hGpjAVSs;63421,81270 +jAFjNwdH;83521,23986 +TGHZczEi;67536,55133 +PxESHxif;85994,57272 +vPQuOUPT;32135,68416 +TryTtfhX;39447,46997 +NUyTUwHg;56026,46274 +DeUzwUdS;83175,50652 +fmNoXfEn;44795,83417 +HyMzTjEm;30787,38929 +ZstGmThc;12912,23579 +gdleUHQy;48374,15729 +vuuSheHc;25723,12394 +cHmJswfK;8738,30749 +fuXKmNYK;61288,64661 +wUACYGPY;17219,15045 +dkNaXZRi;77837,47055 +dzYgSUrp;85329,56029 +UCOPwMzJ;76074,86535 +cRIlHGmm;41657,10889 +PFVcYfAW;17846,39807 +siHjxSzf;34799,72824 +klEueeuY;68081,41088 +fANSqHmc;34396,77124 +ZkCDeXnb;59657,71220 +TecLhkNU;42868,35524 +iLhWdzFF;56978,8719 +YDSYSxpw;89184,1996 +RKwFPLXw;8298,81362 +ZJIbRSBe;54369,30390 +ThruTpUg;85317,47087 +tONJxtky;75444,39373 +WRiNgyDQ;33004,45489 +vlpcQctr;63128,83243 +GoyeaPrL;64581,53511 +pBpXxQeZ;58727,31973 +SbLUxaOz;20394,82639 +ntFZkcME;8424,60710 +FTdGNZvf;85729,86139 +kdcNIABH;76598,89856 +aewDgbMv;50903,25155 +OlWqzoNC;19002,85886 +WjwNLKJQ;32256,41604 +IAODWupk;85349,56007 +LoQJaKgQ;83839,54246 +EnyvqRga;5090,88980 +QQbWzxZS;81490,49053 +tPeBTvAN;33479,74193 +cwCTuivM;45147,20997 +WZebODAD;34604,74361 +SJOWkFGa;40459,29910 +stoBrvlF;85130,76378 +Jhnoczys;23963,65052 +jDZtIUCS;73495,9884 +bhePLFHN;33866,13531 +xDwykmfv;79864,88852 +eJFUHRYY;18525,21805 +onyobSpL;71351,72040 +XbNxExuS;3472,28976 +FdBqujZO;82628,71569 +BuzFOnwA;32556,67419 +vdOGGxKC;17896,19369 +UWjicAHQ;3348,25339 +HPgVFsNI;87009,47877 +xOvQZHEo;33249,59737 +rlkvchtU;7295,87405 +PYWrnliS;23479,72653 +sjwYIQYK;81707,50794 +ApkEIvPu;31980,33230 +VFHoNziL;26134,60946 +QWeVHVsg;76011,75448 +ZYAbScgp;59653,16648 +RJMjDYrZ;67461,58444 +qDRjjURK;23374,1449 +SQIIGQSz;30606,64622 +UZSbAqHj;5452,23382 +sgNVtOfH;30715,18590 +FsFnoVwd;50044,3657 +GmRAUZaB;45899,86715 +HxDNZhFi;12552,88930 +jQaFZtRG;36104,39088 +snaMVUNr;73915,5047 +UIjQeRXS;16686,1650 +PflhoLdO;17912,24708 +ommoEwMW;82286,34922 +vRUBlKiL;11622,60032 +PnJmAPix;21544,63417 +ESIBmLHF;67593,49640 +FliowBBy;75960,58741 +jWkhlFGN;15243,55289 +rXbHFPZk;69671,5138 +SBvErZRW;87640,27859 +zwIIopUY;7733,84086 +TFRJZvsy;29020,65967 +tBgpXjRW;20419,51753 +rVWsyBEt;63350,12303 +MqANILgT;69890,79079 +QoUhlRXC;71086,73901 +EGmtlBrd;45256,8736 +tkgWpsBe;89690,33613 +siZJcRNs;52659,49065 +PMCxHcsQ;20455,69332 +zbGiJjnn;56389,5497 +kVzGywDn;23099,58678 +TYhVRGRV;18395,45819 +FUMPSFPN;42702,6421 +Uzlnifif;50561,89294 +feZSTpcq;34429,7040 +lmmPlHAN;26927,7048 +nKTLdjlt;70982,55946 +ETCReZRc;21743,62603 +ZuasCETW;89697,30686 +PmYyAPOJ;42087,18683 +BzExEgdO;26124,73460 +XywHtlIo;72543,31341 +jKgPplfs;53373,52261 +fSKkVkwh;82922,16996 +OkXrDbzw;67636,36170 +fjrrVwVD;41256,78762 +epiHIMle;42854,4241 +LeIlsOYl;85030,4446 +tZLkfCUQ;77066,49065 +faqDlgye;80628,18348 +GslMheCP;76292,76113 +vxUuZoPq;43765,67257 +SFwJZBtr;79574,19858 +kXroGPKQ;41381,52864 +ikKSPfPz;39282,74283 +YmXiOCuq;71517,56641 +YrXcziTJ;84739,43565 +oQZboIDY;25058,26494 +raLttgHo;60669,44720 +rjPoOuRJ;81854,36902 +cvLigfvQ;85203,8356 +YrbnRbco;89007,83202 +oLmTuEXz;47633,76885 +ZOLGsXKG;86604,52766 +rhEJBamV;71452,16618 +MzrUWxYS;69737,42696 +iuAINpeP;50916,65196 +dTpahlCH;20469,57480 +AuyCCozk;33855,19908 +XGqbKitk;39381,67675 +lMIQerdb;39195,85098 +PMmAxiJN;81826,72838 +KaDRQQIc;11352,13721 +ueSllTaf;17189,18778 +RKrwsByS;70020,38864 +USisHxqF;9156,65544 +dMiXdCHK;84291,58127 +jDbDOFxN;9873,40856 +LBkDRjlR;66289,15117 +pbguvPgx;37623,12355 +AOWFuxhX;15080,48549 +ntaCWmeG;15879,50865 +KARONNuY;1691,13938 +IbEovUym;74537,56089 +tCxGLOIh;31462,40064 +xkHHjIsf;35021,65965 +vugwCyfb;84997,9756 +dQkddywx;23542,39304 +sxIVJRqH;35127,23090 +FnBgxRmz;62385,12808 +PANkANqj;25722,6645 +JNSZSMGx;37341,43313 +CCKJorpG;74527,66498 +eOOHILnp;38094,23382 +SJIsmRef;74549,67990 +ngYHEMtG;89752,49227 +lvnjsLax;41897,41140 +GJuSYERF;14753,35478 +qrrVIpoX;83905,3817 +IoPqmXpj;19443,74693 +ktKLZoqv;39411,41495 +TMIIBFms;65884,3182 +hWphRkUr;38321,70847 +DqARBkpQ;30460,27482 +OKvDduPC;24626,51008 +gfqBOWnf;23400,70651 +tnkKmWCR;82546,13614 +gPyuQRhK;83134,89446 +SHBVUUPp;27843,52348 +RwHEEyQm;15825,60413 +tRglmGyG;62108,75194 +lJYvqVDR;11729,31219 +HcSJOXql;59480,17659 +QmJMijlS;33242,80937 +flFvATCy;40839,79979 +dEDxWwpz;34827,55693 +LhIUwQwu;36882,75144 +aFDhkAFc;85567,11370 +lWVTUfjS;5754,78873 +iZIGIqTG;53876,4097 +tmPqvNYL;85909,33173 +TvmkoSKg;69085,6847 +RZIfXnnP;80613,80195 +vZmhkTWR;33196,17337 +NNLWNmij;87457,11530 +uMVitQBV;78824,87590 +dArCvCrd;89599,77776 +vZKTMzYU;72511,83543 +IRkgjgst;6545,30473 +izpgmjeE;2533,33688 +UKYiHQJt;89585,45764 +TlDuWWav;27619,31031 +MbmIyTvG;64299,72649 +vLkKJWUW;83467,50803 +kFURfBYs;57816,50319 +rQJTjqfs;31011,13066 +TgKsKhAJ;1118,69020 +XuoicCgz;1507,24005 +YvWAQHlz;32418,46990 +tdlQuROn;31738,27281 +MJrRxXZk;42775,5428 +DYKWHPZt;78839,42966 +lzGAVBoO;64456,45370 +mLJglplD;41786,84440 +VULajWqv;68898,72625 +bhTmxKSH;49176,56894 +vxgUlqfS;52752,12688 +wyZUbDOT;30131,57292 +cyWIpvvH;52706,79992 +ODYfblWz;46532,82725 +JTBQoCta;42143,30858 +vbacrrTl;84410,9915 +AStuoFKk;80298,1844 +YZOZoazN;6510,64292 +LYDwyfMW;89275,66126 +bLvmfKdO;23021,23489 +vJDjweDx;43365,58454 +McISGaTe;42018,55324 +FDkqFbnZ;66763,42044 +szmjeTpF;18810,67792 +hWTESLoa;21906,62160 +JAVAzSfz;84218,63809 +WQtkcXcV;69005,71560 +qlUaMqaE;47160,73738 +nJPQnQEZ;36997,37282 +eRWGYscP;68342,1226 +ejKCSMZn;3653,27849 +xpPGCfeW;30259,53984 +SUvDzpze;68081,80235 +CWHbKOUV;76358,17789 +unDyIuPP;29775,39775 +cInPuyWT;63544,15739 +BAPiJXYO;80605,76105 +XSNonBMZ;54502,66320 +ctBHRrQj;37068,65416 +PSFHGUZe;59057,32574 +LAvnnNip;86677,81348 +MhfEVcEl;7035,44110 +pwunMuxZ;46004,18885 +KBVewXAr;77720,75037 +lwpRbFUv;26789,14438 +JxrtSOxs;15205,64712 +AePrmtQd;5771,20111 +QUqamsZz;77791,74164 +zvAUrbqv;4956,29235 +ansMEMQP;87150,64157 +dUhlKMpw;63177,28029 +lLDZxnSg;81277,75345 +VzWmCxJf;20019,78506 +fMLGYqpw;22895,8183 +ybLOFADU;78137,74077 +kmpDgoGa;81920,69528 +kLWEoRdH;45304,70827 +xbLIehKb;22155,22087 +MlzILIPM;60075,41214 +SQRBTUqQ;25643,79165 +lUpndLzy;49639,51754 +ZbnhqqaR;49446,40888 +znoITUQa;57462,25983 +twHtnJvB;79079,8984 +zDMpMfBL;72214,69955 +sMcxrtgE;20551,77976 +UOnbIBvQ;41083,63343 +FltszyhO;83927,50134 +UVmFuEfY;40359,71873 +cLUkegmD;24264,13155 +jwGvQrvU;36741,68352 +ANytXtAl;87954,29323 +QhSAYdWB;87520,39573 +EDHieWZm;69111,61071 +TlFTSsTZ;75129,78653 +fPfaaIOK;41347,20714 +GFKoLcbQ;44692,18455 +DSujxTvu;17100,26205 +ezqUhoWO;68459,86440 +eAEZSWjr;27712,79224 +wCjdGbVf;62093,81222 +VXElCjLm;15111,41430 +GYSigBZB;54273,12509 +wBlqBPja;48204,55171 +YyiKmsjO;15740,23328 +pYGCpuMJ;47445,36125 +jKrcNvqy;10243,4245 +PUJvnYtS;38799,25727 +YprGWfBf;14263,83668 +SylyUarw;45849,34399 +prbSrPIW;50835,57254 +MaTfpEik;27415,69645 +YydewKJC;35273,18603 +LxuDZiXo;1070,72924 +InrUfkpQ;77495,80636 +pbDQZKXU;48281,25877 +hMEASLAB;27890,82137 +ejXTGBiu;87967,61910 +BysOOweV;64118,70906 +ngweZVQQ;39365,81963 +LsfeopfJ;56271,32235 +MVpoqsLx;72712,48131 +OmwUCDnL;68333,47902 +LalzpxiM;42144,65495 +sfaSZfPv;46059,66342 +aKWQHyCC;29726,12346 +OoTHonrA;69324,58447 +GAaUcMvX;66219,50653 +cttNRKmB;77707,79811 +fuYrTNZd;31823,37231 +ifJkTwdI;33742,38955 +sPGupMSf;73595,3473 +BuJXZNBp;83619,66014 +GNYWzeLy;31125,71569 +UrynhtnT;40561,67705 +EFOknsGE;57782,36762 +vQerpsXk;8121,79205 +yDOyCBRt;76354,41800 +RcJnHVvD;81872,69229 +ZKVjSAIu;79069,45998 +eNqulCQf;31417,67244 +FsOVPKPS;11710,89600 +mUKjbBUc;76137,60493 +OnnMBZkO;38246,57400 +EWMQtGPf;15502,18646 +RVCaGqZh;10081,54430 +KdSKSngK;8997,87182 +GDuKHkZZ;30938,10806 +ISyEPgrZ;41254,31447 +dbCIoGaO;2781,31021 +YspJuvCW;3565,14274 +bmYhnRHj;68158,57491 +opSSDCGE;68079,65519 +xuxjuvCg;33486,14455 +yrOFvTbQ;19699,15811 +icxzIFiA;84776,24243 +inSnvHpR;49536,12748 +XeNxvYZf;68227,28376 +UdOKDxdK;73189,89970 +qrGJcZZW;56699,30211 +xJFlPwDK;7905,27237 +QZMjRQoN;19291,66000 +LCctlsas;31918,85478 +hDxpYexy;24885,6428 +Wodmeswh;28338,45718 +gLplnqqN;28765,13607 +rElXqCLf;42345,64611 +eFlviYQD;58741,19729 +bBkVcuTI;57637,42451 +UCaMwPLV;48326,54763 +BlPRFtZp;54737,53906 +zoyKTyIa;64425,16564 +GdRMGqEp;36192,14108 +gGprBuZK;59636,11032 +WrkfxgOz;59460,40499 +rurqmtZx;35628,59581 +JAgQKuuk;73108,1069 +TKqVZUgP;22847,58773 +XzssBIUl;35104,44091 +xdFpyHsb;77890,39860 +OHcgZHYe;80554,73241 +BedVKxnd;61103,29407 +IrGzTfjX;74143,52005 +VaWkTJsZ;86056,3133 +GOngjNDs;34749,11312 +rGUBYANv;19473,13540 +KXylUYAM;52364,45213 +QZGGHrSw;40605,84793 +EpBLcTzx;56391,71412 +nQVVSdpJ;20713,31156 +GsSNoHsl;64555,57386 +WBgkRzmd;86505,46651 +aqsCNJoG;24383,17931 +kGXLqDKK;76033,77341 +EYDEELKa;75285,32092 +CqcslQkh;35598,85353 +FqIFTWHJ;12504,4313 +frtLjCTl;26247,48576 +NHijFiim;82679,21557 +CEawzHWn;78327,72824 +tTghRtwt;46796,80999 +FJRlmnsN;65551,49005 +ioSmzcjM;50541,6626 +CUaZYZGX;64536,36312 +LUdWuBmN;51968,40341 +CVJbYQQF;39891,36024 +uuIgAllT;80818,49306 +pgmxOOCv;14717,25182 +QnfiJLZe;14596,44256 +FejIwjjg;41313,72496 +jtpZYKVk;37675,84568 +PbHOfDWp;13085,32406 +riVRLwuV;84432,69554 +wpCwZqfc;79581,72804 +VAMZrvPs;4806,44151 +urqGIwFU;75841,78879 +kKXTxRhl;85137,67939 +IbkFNFjc;44250,67693 +jixkcfKt;4099,41058 +XPlrFBeS;4590,28423 +LjuUzeMW;33914,15255 +tzlJmkaD;22169,16674 +ibaOYmpj;37102,50691 +NGgpKmMb;44689,13543 +deoAscIX;63299,22357 +ANXpWJvO;38058,34087 +fcZjwiTw;75159,62053 +yzpblcDO;43461,73242 +fgwmulhE;25723,8981 +BdnvFDUW;34476,6792 +nqzCTZeM;27998,34673 +dMXphrCG;72795,89758 +tjufOCtp;25940,57956 +DZUcvXYT;41509,2004 +KulPdiwn;35473,1554 +KNGSuaFL;78518,86029 +aMcvKWcA;15224,71201 +meZmgMLN;47941,31186 +PCLGzLEQ;81221,69861 +fBcBBvXe;47847,54579 +NZVvvVjz;62967,4545 +HplohJKa;71082,57974 +mFubzuAg;44354,84771 +gLgveUyV;29844,55662 +KuOrIjhg;30773,8452 +DPYWnVEu;72445,45957 +QBnNoLIS;57652,72830 +dRZaQcyX;76953,3049 +KrVfBTlH;70629,71979 +fApHHUdW;33249,58192 +BVTZAAKf;28873,83589 +GIOjDvrm;42826,87873 +fSKLgrRl;33649,26328 +buMiadvI;45321,69143 +ZBYOGvGs;48864,84172 +FHkmIpMc;35081,41824 +QwlbksiN;79719,58647 +ZlDbOMgO;17868,15978 +zRVqUQql;37470,45806 +CwmwqzKa;34562,77949 +ppvQRgpN;83295,89775 +efSmvmGn;68267,9218 +hXrfKrus;10070,24432 +bvXrvYVA;6853,86470 +UsHlsFOb;78783,33060 +wJhIHbTk;89493,11049 +aDAVnJEc;23677,71144 +BshPMWNR;42464,17640 +grXqkCDD;71303,27480 +WYHkaTrq;72056,18341 +aNowSQRp;5077,52359 +hbZdJMoj;32483,40205 +YbbKtErl;15252,58456 +pasRrrvB;15372,13997 +hNrSAIpK;58247,66460 +TNjEHuVt;67332,63514 +nhUqqIkS;48731,66635 +uNvYvcAL;68693,57622 +ZGVrAseN;74624,75910 +mmYtVbkx;19771,22840 +KIrvBVkx;77667,28084 +PQcvVCrU;32316,73747 +YYeOEtxY;4554,34054 +jxBAYyVy;6259,19288 +oLjqqtEk;85919,52727 +ItBGvcLb;4422,50377 +gsBmIBKC;1215,11876 +ayckMkRD;43375,61950 +QdeeSzER;55281,21991 +dzzVUWyl;85546,87673 +kciKzZfs;56015,82657 +ovKLVvvD;15494,4789 +JmvCbYfJ;53690,3349 +TWWOWvFh;35053,9411 +pJvsYIlK;37555,21033 +HbrkKJrc;51194,66541 +gveSaKLL;86673,16579 +xEKAbsVi;47686,56984 +KQNYyKNu;56814,50741 +Cscjhmmu;28239,75206 +DnCJDGPU;3974,2911 +JqPlvtSI;63168,34753 +BDETngmu;72305,87489 +GUGgmvHk;16298,45269 +sFlZfsXt;4491,23155 +ZVjlRVxN;26968,3758 +MiShdQmb;43027,54514 +stHUVzHX;47717,61021 +QJFPoBvD;35894,63739 +sgNHyNrR;2547,10322 +KTGKKNKp;8762,85579 +wEUbHCdR;20877,45220 +hsqQPNqn;55410,67524 +lSPWnTsQ;71367,4242 +sgQnoLGy;28182,37649 +TXNlXTLb;21889,59635 +ApLCeeUK;49698,68251 +svEHyTkq;74789,13932 +xpPcnHdm;33652,50800 +vsqOdZdh;61069,37624 +cSNuDeaH;5670,14304 +lSOzqgPW;44748,23215 +lZUszIVH;41787,1214 +SJhCZbCw;74875,15812 +vdyjqJkS;53848,4765 +LUFyYntn;80326,67682 +sRUCPrsX;37613,9753 +gwBTyMcl;73643,35567 +DimyfsDY;71187,83042 +QbyffTpi;80315,79570 +HqRslJkZ;62919,74150 +QvNNEArF;71739,40063 +qwRNsDpy;87946,64660 +SnZApmhh;66256,42363 +HXTBaLnO;33804,12426 +EqeFuIsy;85912,6001 +wgLWsgBC;25954,85998 +MbllVqvh;16751,17260 +VbEXVNuP;33336,67639 +XAWGcuTe;2888,80484 +MolqqcWG;54825,84399 +XhsIkzYs;34906,24922 +QLvUIhTb;46901,11040 +FuCinTTt;50902,34938 +CiwiCqCu;30949,64202 +BeZLpaGU;70608,6281 +kbiMieoG;63887,47464 +elhIbFsQ;67130,82665 +OEzPtIfu;47267,66152 +GQKUNOob;56632,42671 +gyCROSkg;58127,7111 +jHIqWhmz;79166,38494 +oaFgFkyq;23413,74475 +uzeSuYFc;10940,28453 +qGaMlsXx;89993,85786 +frPPxTOh;14894,22678 +JldImgFz;57223,7265 +iQCSiIgf;9950,2375 +KYaVzrTB;78075,84782 +XqSsJPsx;38822,61904 +apeAznDE;3462,74986 +DPsXuzEp;50844,10487 +uVnUxmJH;33415,34433 +THwctCtl;75292,86208 +HaQxoWXq;79972,11928 +QMsFMubY;88343,9396 +ZYLYXodh;11826,83176 +amKOCGss;13032,43081 +qKomCGzj;62123,72943 +jCjFTSTC;38303,88869 +QLwSfVLN;66139,84891 +xZrqoIeo;76965,28130 +KzrEQGjX;45652,34505 +TlkcjWkc;68307,17469 +DYRmQJFl;82610,56417 +BxTpLrNQ;19464,64605 +EXckNYQr;31621,31298 +JPugqAIZ;45638,85412 +prvaRPSQ;66727,75949 +tCUWJQWs;35185,1338 +zoePXjBc;54595,61582 +DSBICbZC;67192,11086 +XHsmrYVZ;21891,36734 +lhDUdFEs;83609,20117 +beIjJros;3985,39279 +tjioqfOu;26003,85257 +annjDNWa;60578,23445 +RhvNAEbN;19483,88144 +BViIfnan;67542,28546 +cWNsgHts;78367,3798 +PBogcntH;16565,38748 +BLyjBsuu;42060,68539 +ECVUCgll;84552,59055 +LbUygUZG;49247,41464 +AfpCTyxC;78779,30608 +EyuYVmvX;81157,16065 +uYaAfMFU;19756,66318 +VuiDiVos;38533,6614 +BzWNqCMQ;18051,54504 +daVOZCeS;34749,68853 +yInZuEvL;39197,54105 +rttVoJGw;8579,65555 +NgROXCBZ;27868,70751 +uaYiYBch;4124,61421 +XLefcCCH;10671,42849 +FCzqYsFq;75612,83091 +tvoXjujJ;28396,33654 +xrCEoUFj;40680,17226 +oLRdOXKj;42860,76226 +toJDwvcK;51182,30493 +yzrDKrKW;76667,12268 +eUGtTvMo;78880,20508 +mOaSUJXT;51201,20563 +xdstBRbN;60765,52627 +wfLQZzBu;24659,76285 +eXvOgmuT;12560,15437 +jTwOZhrd;53893,49207 +NVULSQrC;38404,61035 +bYzkKDHh;76713,80551 +LThpiSrj;17898,43795 +kFDRfRLH;39057,52311 +zyJmrUfH;23369,51933 +QRUTnVOx;62542,57592 +GjWNvzsL;79715,21475 +ndhHZlsu;80875,68404 +VTOUcFYa;63073,41366 +fXRtPjYa;62641,65533 +sDbeeszl;19158,83565 +URRRaSrx;7097,76041 +MdYNaSke;44572,58478 +rpRYSpJu;84147,80819 +oEVNqmDp;61585,72646 +RdtWZwBv;45708,36214 +MibxAeLq;1268,24517 +jYnVLcWq;64811,46653 +YuHbtaCh;85381,57700 +AfugdVCR;82122,39410 +tEUzhuDt;23726,78905 +EpDxPiFV;25792,46070 +iBcmtpPs;27728,82315 +sZnIFACG;14756,21598 +UtcobmbD;44242,85268 +cXKkEzJl;17844,9025 +tjntbhpv;14836,45617 +iEthuHlv;67094,63728 +iPwvVAMe;10809,69279 +tEBFLgLL;65108,15399 +ntjBXKLk;50458,21109 +fmVMBbyS;86325,78904 +gzJODMdp;79312,39075 +jgcPZmZJ;22379,35985 +PmCfrrKE;12795,65356 +uzKOaGiP;44727,86487 +xPGfQuJu;57341,19063 +YiYgbKcE;70949,83818 +TpybzSzY;2745,24507 +vpAwXRFo;33132,53724 +HzVqpzFo;34399,80306 +WHttAcVQ;19973,62898 +pynsKSzX;78015,3841 +rpGuuStz;19387,26429 +PVKNayzL;15259,83144 +yaakCYfw;15342,40616 +wlqCuJlA;18719,30686 +eFSJaAzU;23615,77469 +RVvjeqss;41704,66972 +bWGoqEFy;22048,74405 +pHyGjmUF;49215,15708 +TAsuVGFf;74289,43215 +LffCEmYZ;28072,21769 +cgbkixPN;69663,71139 +pzZmlYPa;6615,29657 +OzqYgCHT;73347,16769 +KJCgSllu;45133,27972 +TESKmWnv;61929,5985 +tZTaCjmk;8454,38816 +OboZFmfk;61491,26958 +ZwvtqHVh;34821,49605 +lZWbhxEg;19112,79994 +BhVxpRAo;33998,22298 +xjNLbETh;62232,9410 +jwYyQkFG;68051,47786 +hSZBeahp;76579,68523 +tidkFIpk;40881,19211 +IcbbulXU;4568,36194 +BqHaSVUY;84148,34006 +qkErqwUt;6559,34208 +aAcvxrmO;25659,44714 +nzAzvhda;72234,28335 +fGnQbqGN;51156,28492 +LTWSioIf;14122,78874 +nMHsSWEj;21370,27846 +PwJhCalz;40447,80445 +cKjoIvUh;13076,64584 +kGjTJNhk;57827,30287 +sGoxUUiS;81361,28322 +NESYczmB;41569,46337 +MQROwWjb;33677,87500 +ZTiSfEEh;16415,25621 +EAzaWlGs;3409,88807 +OLDDFgHN;11976,40312 +bfInuVVM;47340,83159 +nbfTTGAw;28632,75608 +YhjKHJNS;15120,16661 +WKhgcOSq;14546,73442 +uUuRPUkS;29375,86920 +TrfVQmuC;77323,41764 +SvVXWkBD;75706,1739 +InbIOyxf;65230,17217 +RMLiJuLY;41948,42379 +RcrMWnAF;1987,15252 +XsChbkaF;64935,21582 +vkszMaXU;76675,5199 +bIYNDLIY;18652,78334 +hGWxrpFm;64078,61604 +XaDTuDfS;58728,84520 +vATwAlrP;47187,51081 +qusXzjyT;81231,61408 +ajTEftEp;12470,34841 +tbsvMNQh;86440,63873 +zYRDqlEu;37575,58288 +UQEVnule;19560,63228 +nEzwONzs;49899,77058 +LQwTcNgc;89289,5366 +zXHIPeBA;53336,65840 +AUPZJvUW;4279,32935 +QgOjtUJa;81708,72758 +hpqeBlAD;9063,55773 +VWutfzdO;79524,20348 +LYXJMnFw;55017,32910 +KAeguITw;64203,37621 +DVZWgXfN;70133,25025 +EkuIpork;84933,19925 +NFKTBemO;83526,6825 +miVVugos;29344,28655 +tdHEiTor;16312,50302 +fTHSqJUN;6113,11725 +zyQehSAO;87542,59328 +BUNgxOIE;43051,45465 +XRRPUjCB;87747,43056 +QusNHaVV;69453,14607 +lglMrPoM;33870,23015 +GrijUcnq;73012,61113 +hloSYwxc;18774,69943 +mtETRTjs;70508,30391 +uBQhGuqv;58066,70109 +QEeYspWc;59322,39233 +EmfNEhLL;47904,19482 +BXXmcBtT;65838,9138 +honkwMvD;82670,62710 +ZjsFusXB;28546,79048 +SIuwpHEQ;22659,60646 +QVEIlrqA;22388,4140 +BbQCVxSN;33736,12400 +KtgOZiJj;80324,15546 +RMQltILr;28386,35915 +XVbVnjEv;66427,69723 +oeGGnrYR;35835,84042 +ejupiEFM;86810,83807 +vajsIbej;30557,20459 +GrWjjGOL;30842,77792 +oKNOYBpX;18633,24895 +ixjRQuAK;16211,5239 +OOhPbUqu;1929,53028 +qLVRVrqx;22088,65863 +sIBXHJAN;74440,2212 +fsFsNwNX;21470,39054 +hizUuXZO;81973,48929 +elGeOAHJ;76579,11484 +yqBFqaeL;46473,29590 +LsfWLzua;34018,67679 +DFNfPMjm;70889,46818 +HxCNuBDI;53157,86637 +BYcyPoro;37135,60890 +FsQoVkyq;16162,85501 +FeAKSJZZ;50764,7156 +axqDkvzP;5593,77589 +IjusYhpL;53488,89394 +HbXOJWav;14146,7752 +rLWvUbHa;64456,56138 +RzPDuDuy;34357,77644 +XBJjRvaC;73791,66351 +eOJCYGRk;42887,25022 +nUUDKruv;74613,79591 +lhFjdOKZ;51630,36960 +cNyFdzcn;19846,41255 +ktuMFFfM;30950,44485 +GgIJnpTv;17442,18594 +yrtQqJxe;55711,51546 +FAIsDWct;60247,35994 +NwJFNyrS;37631,67672 +oDoSuaWH;65322,88178 +NokUyNlT;5488,84182 +YZZaKvWA;26703,38991 +bOErPVIQ;27695,87159 +DsDDwiSo;7895,16326 +SiHWlWeL;20519,76885 +mGrdVtuu;58516,88406 +CcdVDWYf;26045,30122 +mbtFPzUi;47686,20880 +exyBuzHU;31432,33009 +FSAtNOyf;89088,71340 +tEdBZIyk;49807,74193 +OMFdLAAL;45994,22961 +mafBqZGY;37513,47474 +HzrtIMwj;64550,83584 +TWXnnORN;36221,68989 +dNxgeYOk;43652,11537 +wNYaiuug;65875,80350 +OfCeSRbx;69312,35987 +jMoBtOvv;25360,44392 +uwLqapWP;68291,4799 +SGzucnHz;68341,28890 +XvfVxsdQ;2319,37649 +DzGJsVmp;89997,5756 +iUFTvclw;37899,77845 +rndpRUqw;20937,53901 +ZirRrKXn;28328,54852 +HtbzCDlF;27111,1953 +dEmFCGpb;3742,67983 +eVSeRGfy;57906,2786 +eekQGEqQ;10901,3149 +XCICyfrW;33019,79242 +dQeiSieL;51314,61300 +ShYaoqrs;63873,71039 +DvCwGSPT;57236,67562 +cyxaMVwr;45772,16049 +mNDLjPof;53862,82983 +tsxsFRZj;33959,83532 +TqieWdMj;52572,87615 +GFIFbgTJ;71283,26452 +yrTtxBYG;21927,25551 +FFhDDCMN;69744,57428 +XpFHTHiG;78420,23805 +fiqGWwHM;31940,73159 +XnUXKLlB;34488,79525 +hlVplaTS;10439,71727 +LFdlghfN;12967,3523 +tNlKJpMt;69477,36661 +fuIlZwne;42673,79724 +Btegpkbi;27398,79551 +cscoBCMu;53682,13376 +NDMynnLo;13966,45282 +DVpAxRQe;47097,64838 +fsGNGttH;67408,17197 +ahdneLaf;46119,24304 +YNbWiFgB;63707,2452 +agbVHIZs;1530,82395 +snwpqlva;45165,51362 +QRvaiHgr;8757,69488 +gMOZiSPg;3568,12628 +zVbruKCZ;71834,54884 +yfzFjZbk;4954,4002 +vbPXNnCv;5414,27227 +urYLXHPB;67888,56755 +tFnsMnNs;57959,14667 +vJxmgPKM;57075,51675 +CiSeoTKM;33122,82270 +zoFCutAC;7055,77826 +dZRwfLLO;86721,24380 +hnKYmNUV;15157,25905 +xkVgQDhI;40562,57623 +guODexkD;26325,59567 +JYoPRLOY;23896,54822 +qukiPvBk;35342,37028 +xvQXpAUa;67178,14578 +YxTEVWLq;30734,3320 +eHAKVqfh;39993,16104 +HRmrtiyp;76730,24430 +ZRriyOrz;46714,78813 +GUqhbavY;25451,21203 +owQqVxTI;69526,70754 +vdoIcFOB;23883,30260 +jFXVWukb;87634,71041 +PfSrzKLA;3978,35123 +XNiODPeX;52628,72214 +RTqiRQqC;43011,60641 +PBfbMrdC;49004,82823 +CJjbCvzH;22082,52544 +QFMyuFBg;39626,73732 +HzDcrIjO;61029,63103 +GdaRJukm;33238,18174 +HtntECyB;33926,17310 +yJgEmweN;88913,17211 +LgfidFxn;45441,41505 +bRHqfFlx;26068,85975 +EApVskkh;26955,68957 +ZMKOrSnH;78564,55167 +KJKUURzK;75782,25374 +ZmKDkrLi;47584,76830 +QbbBeTrH;19237,42468 +behAiFRr;87725,66528 +LIRDIRdU;36487,68149 +JnnBlngG;63519,3008 +RaSyvyHp;17628,45590 +dPAZOrHQ;22970,11394 +eJNaaAuV;56042,45497 +KTxdtbIe;22663,66848 +xvSrYOXT;4653,21369 +VBttaqcI;13705,15852 +HaMjiZoD;40622,9014 +SLHPMMap;52115,87356 +tJMJeRTK;63947,48287 +ErewWKxH;15755,14055 +tRgxzPTE;47472,86897 +rktpgLmK;26130,86602 +QiukUoPu;28278,39019 +eHcnYNVy;23191,4994 +rtnyEVla;9620,6911 +qCUVHrmc;54594,61903 +GytkvdPc;29885,52540 +KVjZBcMM;66094,1859 +UCFSXxJO;68979,63847 +CpYXtDSG;62400,76821 +UwnqxLWX;10408,82520 +eNycUGCK;28154,82494 +lSORqSSD;43432,42370 +yhAVzBup;47531,79672 +QLGfeGEt;82681,39555 +EzoJmurz;6084,9669 +uiHtfpJb;48410,7759 +emwbaJYe;83159,73041 +wDrYGIHj;28664,23520 +OfKBNxBj;30005,14179 +QSlMxMzx;68558,52332 +oaJDIsCQ;70007,60383 +fCozvRrP;79185,62554 +PTXSlMBp;36007,16730 +llsyMtWy;87652,40820 +qTSfCFtL;38447,68310 +fEyZiEGs;6320,3034 +GIovHujc;75035,89062 +suCwWdrX;29015,1407 +BoiwMWHn;55655,5782 +VozLZaGJ;52723,65702 +HBHCtJJB;78485,20520 +DGJXKYFT;54532,18838 +pmeXyLAn;45764,34639 +mczxAgKu;47776,41764 +Hkhiyvsj;25393,52588 +buvPptvy;55628,72981 +VSDCqzsi;47473,55866 +JxaiMvrl;14510,46617 +FYjPMTKY;7819,2656 +irrtiQAs;77341,80493 +WPVJQqGA;44039,23788 +pCVPHuwN;38075,19535 +EjnyQlXd;16561,76532 +OgDCYycB;83979,25580 +mqaHcthv;55929,70559 +QbYdlUOC;83954,51620 +wjuBecHe;40478,39765 +ZlWgQhPm;14718,15963 +KpoGdHuf;75229,78876 +IEkdzYVO;75102,72477 +ZXqAomqb;31283,30654 +TIWBIJjl;64079,79460 +MYqQlBvO;59198,30915 +oqlQbeqA;8313,5399 +acODGylf;9834,72161 +bYotbYUI;1651,68091 +WFhACIvE;2159,86279 +NCyNAXgC;78512,30884 +ePeWjksn;62394,4300 +GtCSEHgl;57395,12951 +fNWYnVEZ;35666,70610 +iBRUskEV;83186,56077 +ODNJKqWF;83472,88016 +WLkXyRGe;74302,42771 +IUYltdnB;12063,50135 +LZQPRdFA;28680,53188 +DAIcluAF;34376,65689 +vFVgmbju;67284,9338 +YnNLxreV;89262,13734 +CeaKuKSY;49568,17219 +xkvXTuKa;70609,46856 +VmhxSLqm;73261,28030 +qHqlVOAk;56694,80137 +yCVaSkuP;44252,88472 +YcqBYljO;31077,26250 +rfMVxsGP;43810,82408 +twwYwCAc;42299,33422 +ZgZNIDqe;44372,1373 +fNZWWQQW;80073,34861 +ijqiojMb;46140,43610 +foLVlTki;28315,46103 +hYwShteQ;70976,62739 +nyZiBqXX;4755,21641 +RelGOQiH;12597,80196 +nqKGXBld;21114,28225 +YcyPgrZQ;52998,40044 +ObpSkTfA;87750,26184 +OGOpoHdT;14394,30234 +fBusuOTc;30395,71129 +yUKZvOpu;70451,28773 +oICPHfAN;33827,8477 +bNcFJGzf;84124,6606 +KzLSMNPi;83305,25718 +vEWsxkRt;40990,46748 +EPJddwhF;60617,66789 +dloKJdrs;61942,36040 +XbRCwulj;88486,24007 +yvisbUJH;33724,23433 +CwMeaZAi;1962,26382 +OrsopGPn;42141,17579 +LreQjRLj;44606,59387 +JqnXPwpR;29770,13376 +pJCYTyEH;51818,80258 +ocsgJMQM;40018,50202 +nddhEyYY;21103,25625 +IWOLuvJs;83555,51018 +zzwqMSiM;22434,69703 +GKIevCrr;5920,31387 +ZghQYvnh;25455,23241 +udqbgHEA;32205,31746 +CrWghEwZ;81775,64370 +CbFfKZio;7707,41248 +iPLupfYT;87344,78303 +uMTwszAH;74106,9740 +rctyfZCA;51553,88031 +udikGhrC;60803,65005 +zfBdzFli;86444,27997 +NnLurjel;27966,60000 +gMEKlvLv;1808,57925 +eHmOzYSX;39870,35520 +KPftSquk;15928,37893 +ZihrASbI;79984,58365 +atpFWVDR;88257,65350 +RNBwNNmm;59620,85950 +GkJnSMlP;44073,70233 +MEjEXMYa;14933,57156 +IPstSmGz;5726,8030 +nmIcZAwO;32252,51697 +sxgfpNcc;45311,84585 +FqlfjQto;61736,29822 +EfGOJumW;19004,68552 +YdRwXTGG;2795,79926 +hyHoTEOg;44874,31315 +PSOyjeFb;43376,69160 +gUeTnLSB;77584,48672 +VhCbLkxG;82624,20852 +SdbPsllS;17354,27933 +szRtYXlh;72132,87154 +qufCgFUP;13464,22480 +xNYawjBQ;49557,56589 +nKgTTNDo;79994,16028 +ReNmpCyI;46422,49046 +kWpMulfs;84827,86331 +bWEkYjwY;81885,53374 +iTtAzGQt;58349,85696 +QktkVTWq;74521,86530 +vffjYdBR;85791,14159 +kiaqXPDs;49236,66618 +EFIFYeyR;20790,13070 +ritzRIrk;43355,58631 +JCjthUED;84407,29679 +MoHasWdB;60725,1521 +UrNaLaFd;86922,85706 +WRJURdLC;64008,32315 +XTADvumJ;3156,22789 +aZPZxfbd;40803,18242 +ClCDlvJl;57869,17464 +lLNfPXSr;58921,70287 +FBpSMAgk;12709,22472 +ordWxcgk;19578,86540 +yKSEjYtr;70493,26864 +HGiNyecp;67183,14196 +iuuAFspW;31460,38810 +hdHbSQqL;80670,78571 +kPoCctCv;83995,12981 +OMecLOQj;16233,33481 +sxkmaVyf;46045,49754 +UXWpIOBo;52675,30497 +hKnCLkCj;80656,17009 +oNhNDQTb;89512,80788 +FIBakoqt;23637,71756 +ikNKDdft;65247,44640 +LMoQhbBC;70907,18225 +YkPPNNaJ;14826,18723 +rSCihOUa;12165,23225 +qSRRciMM;14182,58223 +fZzwDQaP;1068,61452 +JgQxXnTy;7093,60038 +KfKauHHf;9214,67915 +tbiJgLJZ;81504,41463 +YuTdEeuf;8517,24552 +mqihlOVm;8762,43699 +rcLnKoTN;48383,1170 +KoxGXJGq;46346,70566 +yNYwmznT;15231,26337 +HAqJVXFb;63739,54320 +hlrHduWD;5549,52542 +CMxWhShw;57395,7392 +YineBBXN;71257,20298 +EKwEworK;54738,44443 +LXKIyIUo;17347,22233 +RGecpATn;37479,19200 +myIUmhBu;59357,81234 +VsLNxxcv;40276,28899 +ZEsaFQNE;48053,23968 +RbOunkBH;53545,35638 +GmIjQuNl;36646,79403 +vEfftoix;24157,61712 +AExWSWOs;63922,71611 +NfDiGhub;22137,85573 +cbuMKWXY;61288,79660 +gbzlMRFa;64725,73660 +RfnDtxDE;52312,33037 +xjTINSQK;25807,21038 +pDfEcfZa;41010,52545 +ZouJQblB;51126,55716 +bAnRxeIu;84111,8673 +XPNxEVhn;82998,56455 +gopJDFGn;29134,7857 +qRTULzpy;60166,54301 +zbNTdjCb;2158,71385 +qAhitNnY;8170,73980 +rNSXTYEs;32290,73574 +gKLUavZU;53756,69502 +QxiEmiSz;24684,64570 +TUdTKfIO;44815,20733 +fruqBiiW;58441,14617 +bMbvjPLh;58655,10102 +sAPFpVvO;31678,5248 +BLwqAGUu;8758,87659 +hteOOWvJ;13821,43368 +mIvfuWHG;64400,2387 +bAZliawv;43969,55035 +GhmWdrrg;45792,39334 +skpDpRrV;36490,31302 +EsyzrHuG;79290,6201 +ghdLUKyK;40832,38612 +tFlsrjQQ;7481,11660 +syBJFoav;44436,68771 +NnVKqTMz;62842,38338 +gmZFUcNh;82538,8635 +NjPXyAYb;67738,5734 +fdMXTIsT;12072,54247 +FHhVRBER;7861,34476 +lfNQTHJl;4905,37292 +vFyaEBMz;37663,40220 +SXfotJHC;33905,57447 +aqoNmmwV;22268,65752 +OMeKZqcX;14748,27048 +tOpNCNuc;76217,56684 +YMqATCgP;84058,21781 +icZFeqys;53917,86019 +jVQTXqcK;55182,79050 +gIPsrIlc;76447,44047 +hDgVOTsX;23511,13943 +zlHexogS;51833,83150 +fMhyXVqI;32151,12274 +NYlhifnt;25705,84353 +IeAdIlsU;8392,14518 +ssCCqCfI;17281,70742 +CKUmDbHG;7599,88777 +vgxBBVPI;86538,83557 +HOirMzaP;29881,8219 +escitoKj;69915,70659 +zGguQtfM;43106,66032 +JdDygFLn;45395,28304 +coxKwQGV;29237,81554 +gqeYImPA;61854,29390 +MTkLYEks;8307,87038 +lhJjCAlL;89076,9433 +lwBxalLR;59957,3577 +iPjLGtIN;80682,71735 +EKfcmUWF;46031,84074 +KLeYwfEo;56134,7484 +KtrgFzqh;6447,31535 +IByjNGIZ;33748,86773 +gtOUMDPp;12612,41489 +OUUozMmi;35611,70914 +eCFYMdPO;42699,33806 +AdyBArlx;30967,27580 +VLxWDnov;18442,4723 +TDXOqZXV;83051,61021 +RpPVQhUn;41557,39767 +TDJNlYLu;31647,66472 +VlpuqhxM;55495,54809 +zdaqNQvX;31650,58471 +wvfCaNer;21652,75933 +GxmvNUCY;49853,82769 +QKsNqZda;48653,62214 +UXmUDRFb;22075,61265 +OBIBKEpG;32057,39021 +jrHxSrCb;44755,62708 +WVhqoYeT;66360,79751 +oBdnkBTf;42346,43201 +MItMKtML;60346,11725 +ImhKEWQT;17677,27319 +hhCUFRZg;60737,28892 +sCeElZoi;30524,45276 +aZsKOZhh;31087,21315 +fpcNUcZF;2240,35890 +FGFgrZMG;33724,22982 +bIWDnChQ;86543,89462 +lcojvtIQ;34629,16145 +moOYmnon;34688,46273 +AwhVpsIq;63834,67078 +rePWYDZD;6896,32163 +GpqXvuaV;77851,77657 +vFOGVRgO;48757,61907 +viWPCYgc;42466,51686 +PMKCFJtu;11454,67207 +gYojBUuJ;77468,30163 +yoWeIGlH;3659,25530 +MGSGcpmC;37108,15361 +gQeMOhty;29445,5376 +gonrEYFJ;6215,81131 +xuPLfnVJ;88698,27350 +kgCSBaBN;51710,37545 +kiUjRGCJ;84295,69330 +XXGxlgZH;76927,49039 +EWxZtPjh;62355,22327 +ozewUjHj;17314,8709 +coQUwzWA;22743,36150 +pSBHHEay;77097,80702 +BuaepafD;54086,25672 +uVdILUrU;12150,14402 +QxIaVRqM;5939,61782 +LOjkzQMH;6921,39189 +uQdSPEfF;14944,48538 +OtFdWBZB;72920,33384 +IycnrfIq;61708,30462 +YaIXGXqL;75698,12658 +mZMqkdgO;32987,24346 +HzSZQyHc;25514,80552 +LpEilENi;64923,87853 +cUjrLZvx;88991,19760 +eyIkpcLk;25352,39306 +cohLxHDd;47136,57770 +nZeVeeCT;19388,52710 +AKUmddQI;14753,57541 +GgXVIucP;62041,31516 +qKQKlXxR;56282,67452 +WwyjDGzV;86069,19729 +ZahoKlRQ;70173,70416 +zBGLwieG;21609,52043 +XGmgtIDo;38688,66330 +yUFqlUno;6969,74634 +nzBvXsuH;17499,53548 +SopbcZQB;27556,34565 +ZWhBoBzE;19585,50914 +IhzZfzWK;89117,79536 +wulWElEE;11776,25258 +ANzxKELP;4989,19348 +LgYLDqIa;74283,23079 +YULwFNSt;54744,32945 +NuXOEjag;81254,21942 +YHTxqRPu;73143,6062 +JYGKfWVZ;83753,82795 +uwaXdbGK;71103,20152 +LYUTnZjG;1439,59119 +FImogGwX;66837,29864 +CYAhjWrY;84901,43963 +cpDnBGAo;51987,74158 +EEzvPMpH;2203,89442 +OQgXhFhc;86958,17586 +zhVpeynR;79168,40461 +TBoqzNnx;6616,4299 +ahSCKXga;33778,1097 +OCxJZEel;46311,52588 +hbEGrXpQ;48803,65026 +HrhZfmkM;27699,60619 +AczxREga;4078,50455 +WewUpgTc;60223,40857 +YBKbiAnM;2590,10502 +AvlBOxWQ;64451,89772 +xTIbbldT;55903,66437 +VUnODIaW;29625,17631 +DETYuBVJ;58013,13108 +JvUKdYlh;26650,51086 +SjlLACqR;37377,11131 +woamNdGX;72415,68013 +ShRfuNeN;59190,72505 +aZrlEdpN;78657,49925 +xuRBtpTb;4936,89708 +YVZKPLkb;87650,26885 +QQnNFEbP;30994,26978 +fjTsmwSS;47745,88680 +SjtXkcMh;23779,67109 +xwZkKHIv;21204,17985 +bqyeFbPW;41327,27320 +JoepidYk;78907,36519 +wjvVnHNw;35114,56084 +KubCgFBo;75370,43150 +xRObWryq;80794,29169 +aAerYNhJ;14409,58105 +PuQudMkV;38882,1706 +PoKIczAg;20245,13048 +ujOLBCKn;33385,69792 +qiAFZUfH;5689,76856 +ssdyrJhc;67517,26678 +ldxbJNNn;53035,88108 +oFxkevdI;3663,12587 +fSlvSyhX;75256,65091 +jMGvJDzl;1392,53825 +XtkcXzMf;31492,46396 +ziEZmMZV;31029,67107 +sVgkaTis;87332,26145 +pPQISWZZ;58566,49152 +zKWlUZnz;21779,26959 +BvrirrGK;10373,23349 +bgPrNUwo;2299,6750 +NFwdsnzW;72328,7857 +RjVJvwqm;18207,3903 +SnVkVpBA;78182,33425 +dQAggdpE;36730,75620 +XsdOzmYP;50686,32256 +ZngdCvIa;15259,52404 +OHMsVStP;20543,3262 +tTkHVPCz;1135,47619 +xsIujjua;18967,72709 +sHOsnsPK;82679,5845 +soLlgAQf;81893,77944 +nZgANhvA;86251,20724 +quQRTDtO;87650,82244 +ZddShGLZ;79843,84459 +TmBWGgzo;78691,54560 +bhrSDKCD;18787,71534 +HiDxsZaQ;83012,15370 +VoBkwDGk;74054,70397 +HFkoytln;60379,64182 +aaoXROxh;44630,14621 +lOpsGIRs;28690,41546 +mSWlCyur;4077,48276 +bnIjWSzY;52237,67223 +MPHnxigr;66737,52431 +kAhYOFXR;56048,44389 +EmvfrbtN;19448,52878 +UHEsYLLB;54205,57590 +AzNGRdTF;15786,36337 +lnpAguKW;19688,62683 +ssoRDTGj;78046,69893 +GLNqofHz;3445,37804 +pJVtRCbq;20044,36520 +jlvobpAK;9958,30854 +WvmyaRbc;21008,8596 +iKfZLEKr;87638,16214 +REttwdxk;46529,31441 +ADniPMyW;7552,85326 +xPAOiKpj;42775,61454 +ceZUWWQK;84803,29886 +qlthXrng;84065,59021 +MrHBXmgi;4030,56037 +MtqJakyf;85688,7695 +pOenRsSo;32616,71424 +lAntljEi;29163,63818 +TATpcLPD;65488,34802 +MlpLPyQO;1957,54858 +RQxzqicE;75851,27567 +cYSrtlzo;41559,76512 +tnQyfEKT;83901,67117 +ziNSElDu;62735,1078 +VtzqSQQx;88776,76801 +yZcurjsF;18884,75315 +hrDFRzjZ;43657,82914 +gpoqcovz;30930,2494 +rOmnTjvS;80345,75102 +exKCXURA;88706,76333 +FfDXcjxK;82188,19877 +QSuhCTcL;22425,45632 +NPQSEVFw;19869,50269 +YyUruDVF;56090,85866 +HgZwacCL;35627,7720 +TqAtSjjh;34405,44183 +SrVfvoma;26805,76526 +bCZTjeNU;41937,61135 +rIiTwyyE;63883,4194 +xVYhqvnQ;42598,33413 +rQVxkkru;12214,19799 +KJHmKtfS;33934,83745 +MildkrTB;52384,81421 +qnLNsoRk;23391,48846 +dZWMSLNi;84832,15623 +fwMtUrcG;38286,27508 +NLqBzqmt;52763,3006 +OqAutxHj;8803,55190 +YgayffpP;86676,16248 +idFTdmSE;64222,79333 +oKodMRuw;72331,7663 +ctVDFDDT;31651,32847 +zFPInmNc;41878,2014 +CfYvKPrD;71863,87994 +GHaqFHFW;64456,81881 +CuAlhNrH;17825,12156 +RNiIlAiI;24084,40459 +pfunnkYQ;40913,60424 +IrzbgRWA;57834,38938 +CResdsYi;60698,20548 +OtuscGku;25128,70818 +GrzuZvap;62697,68435 +EZkkGseL;69602,53362 +myzjdDdE;27867,33562 +gEGQkxCb;35167,31587 +NdHGDqjE;27839,28368 +flkWPVSJ;24782,19289 +EXnSqEMJ;49487,71964 +UexVDGaQ;4456,36023 +gTEsVoRH;73037,47814 +dWIvegXv;28737,17178 +fbaWRRoM;73458,9767 +ScVZqvSj;71285,2444 +DLDCYKgf;46599,71763 +pmwKosqV;54491,31207 +ZUncfzBs;74375,28286 +BbXIBhDs;67831,52188 +ruePXjZc;36388,10060 +gSKrCIgJ;73030,3220 +lewiKlRX;58697,64320 +toZVXNhi;89413,30581 +BEopdeFG;81155,86204 +TLrpJmJz;81700,42923 +osXetfqe;34594,62604 +wKyxnHTS;31188,84299 +mthtIbtC;16486,71681 +oRIYPvdE;35890,45610 +CbFvvOzq;20907,76452 +RttzdRvt;47253,62168 +MfIncuLZ;85877,22342 +UXBfefRs;6645,84704 +SKqlEmGW;65133,43836 +pIPNeOFh;75001,58548 +GjKrLXuc;32223,53246 +jYibHSXY;82287,3019 +vmPwKBIw;10134,44652 +bLfPiJyC;21753,57418 +HDPAqHpW;60686,63678 +XdtlzLJO;14569,62431 +mONZnkJS;12468,29695 +bKGxNzeT;87962,50660 +MWVMAKPx;68140,62967 +zRmrqfGs;31313,85069 +gLBaqUuI;56178,44141 +hYkWkCHC;72183,13346 +xIWbaQhr;11008,31785 +mzMJzOSK;34788,71102 +znOPzdnH;76721,53949 +FtKNQTiX;70301,71436 +hdcYegjL;64251,44061 +uJIgmJcE;14164,28832 +lKOweyha;82695,61727 +qqiJzQqK;71003,81045 +OURiNXkc;26137,51013 +SpuDbnPK;73786,81074 +XRgpHdGK;35856,59217 +rqApuYFY;59450,14632 +dtyUwWif;34652,77912 +pOgIPRcj;37254,25122 +CmrqOfLt;32610,87939 +rUAniMfa;10401,3289 +boItwcsP;21523,13337 +fceLkZYX;1338,70723 +MtZARTQX;60106,47788 +AFUVcvbG;17079,86320 +IFiWFqcq;21636,45131 +ktrRzFRZ;57840,85871 +lyhwuDuZ;6380,85940 +UCAMKOYc;36828,57404 +GIwVhpWJ;66685,81301 +CLZiJOCE;77445,48898 +clnNMkzN;32510,23176 +xfnOXUJD;59190,78369 +jSQDuVYl;76823,75639 +ViALNGdE;54769,84582 +DomuggTT;28070,70634 +koqFXnja;53410,71417 +rbfgEgAx;5231,15016 +dTGicuki;72409,24136 +RMwpcIfS;2846,5285 +dlGuIPqH;17590,12266 +PVozmHfY;72864,61467 +twNpQWui;50371,26567 +mWoISmuo;67467,8687 +GshwJsWY;41415,51191 +VPAMFJVk;1439,39896 +OxwkspVH;31604,21975 +nKXsjdnj;84585,57441 +tFQUUpdi;22825,82562 +RKGumjjF;19960,61619 +ukUSoBRA;84151,41093 +tVNUcshb;53023,49928 +jCoxVRKY;41850,66488 +YhOtSjiN;14951,52727 +qMXzefYb;12748,80159 +ckjsicyM;31231,57970 +rKPbjvMW;47830,84326 +XFHgzXkt;37678,39074 +vklLNepL;32865,55576 +DBDEMpTX;25517,68155 +wBbmcJnE;45424,36590 +JCGlWhTJ;75247,67418 +xxSGASlZ;42491,88754 +eWLOwbUp;32340,21293 +ZijzOzpK;60512,20983 +OUGLkleQ;22064,47379 +hRpWjKDG;37731,44678 +KMsFszYI;29493,41343 +dAFyBRsA;82078,27047 +FXYhgYhh;11696,48208 +JNjSTGSO;69864,2731 +LbLohGHo;19690,56971 +cvXGvRzz;24404,27916 +kzUUwTsE;78253,30961 +WJBykMQY;69426,35330 +CzelQxPD;27887,26662 +FXMHfMwx;71482,49840 +IFIkiPRY;79843,52699 +Wcgmbtrm;5894,53428 +MAyokvIi;45983,38353 +RGXrzRQU;76326,48015 +NUHOnQTS;9773,59984 +plwtRPiX;67056,37899 +aIRRgYMN;56986,20681 +snfOeCCO;81461,51013 +PfFoyptR;49675,11055 +JPlFGYNg;63586,68910 +iAlOAfDY;72136,38053 +xjmLMweE;67614,3246 +JRYXIfHu;2087,60375 +vfcdngma;83891,42910 +vHsrEFFC;87172,40212 +fLpZlOaV;24637,17996 +xKUBJpQL;80635,86714 +dWgVJsut;63113,86712 +frmNvNUN;51576,80145 +XPuWIPbh;85906,16508 +NfdmgfJr;50142,59021 +srmsgMMW;74167,3501 +hHsRNAPH;79783,63666 +yZFEiIKk;20251,28023 +AfTqLtXa;26645,16132 +iTdpaDTV;28153,86246 +cPGZordr;2052,69375 +cdwirhrD;67844,37285 +MmBPUlrI;17649,64144 +VPupaoMj;19574,65864 +pxJyhDjM;75437,25044 +zgdwsFow;49497,83133 +ZjkzgIsi;87728,31323 +VsvpQdxo;49696,73789 +OvQnhfVL;67173,9586 +yfMwkkCO;9929,78696 +mimnpUFK;1677,64826 +IkCEJRBL;42248,75527 +ukDKNSkj;22919,60128 +vUXhNeDP;1247,73991 +dGGLuvMz;32895,21857 +rUBFouve;14349,77684 +wdhYUTxA;15181,46878 +kVVxBUxr;3461,26203 +wkYmRYYj;17164,40077 +XLNiFnkT;87993,62752 +DQPSKLSV;84265,37652 +ZXVsLOmu;77429,7589 +hxcOfalm;74213,83717 +vDVAQeBa;78818,40558 +gxnSGxHL;73321,81908 +CbIoixsD;47586,49694 +LRXcIldk;77036,28170 +IcswJiWf;2656,23556 +UoCghjpH;43766,12962 +dYasshBr;78143,78734 +bfCmAflt;32217,89026 +kPRPGEDl;29413,31371 +ibBBhcjo;68286,64354 +uuUYvpTy;59865,60098 +vJNRbOEQ;49118,80905 +FHtxabHJ;52799,81688 +yOzCtoxR;34892,74597 +QASlnqfG;83425,4871 +SDzfzRiH;47815,43679 +XVoviIVf;88074,27207 +aslTKEhF;46475,81167 +nChrlHpw;54426,38699 +emJryEtC;80962,37794 +zKEWWIpO;41827,78806 +RlaKpijR;83756,61244 +RPCsQAyf;69765,7159 +hwxNBnAZ;41619,87040 +EicdlutV;26419,20308 +hQJSTXlZ;1105,52168 +JASBOQWE;49809,39903 +ybWoeduQ;66550,22624 +JJLKfRRB;1487,5624 +viaySokg;80123,72730 +zMgXMvvT;14654,15331 +aWwIPElQ;46520,42162 +qmMOmPfp;61520,63534 +wLjyDxFw;43726,43427 +FaOYxyQC;10220,33846 +ibUhUhRs;63867,51547 +nETyjqLj;63030,47431 +jpLTAiTk;51748,68876 +AzPhXjVw;37768,5390 +OqKkaACi;29113,88820 +jupzwKFJ;67879,4969 +XNHSSLPs;64523,48111 +ZsPSdYLq;69966,34654 +DOTUhFcT;28502,68951 +hVLMWufN;40698,43276 +eYBBuWdN;48066,40254 +PfJLaOOC;27265,2835 +CthRecCs;69712,29642 +zOQBpIYZ;47441,56254 +zsqoEhcw;48551,80304 +nfTtIPnc;60713,11505 +XrrlSVmZ;28223,38465 +fxZuYeXj;17486,77649 +hZsehmHF;38016,15243 +QbrTZSDJ;68883,42270 +LEjoiiOG;53300,34326 +vUlOoAyE;45704,70626 +MxmqsmPj;68811,31130 +VwhCmbNT;7862,77696 +USHPKlFe;15035,1865 +iGFVsWfM;15303,37777 +VjuAQMSa;46679,24717 +tSGQepom;15300,14709 +CQaUTfyw;86773,11077 +eiEqDzeB;51230,21160 +DVMfdEHv;33624,79852 +XhmqRWkg;79318,40651 +kCggqQsf;1734,71258 +wUkTcxwq;19492,77539 +WMvxwYRj;66763,35175 +CtglCKeX;45661,87615 +lynVkrMH;59061,79048 +wzlIBmoN;49866,17992 +dVmnUmen;58055,63313 +eINQalru;27399,42178 +dQMLDjiY;3558,20005 +vrQUcuVP;3327,77086 +fdYJhHiT;4774,34735 +KmZfBwhr;67432,50496 +AUNBMhBC;30263,86984 +RVwDDPOV;26251,25409 +vBGDbYmB;51914,11463 +ZOUkuZRm;45389,74729 +jxgmuUKm;58350,57552 +zQHYGMTz;51819,52808 +NEcrjzqu;38398,62132 +izPYGSaJ;8050,28095 +fCVrRVho;32374,86784 +DbvuAkrd;6220,45439 +rmENLNJz;14820,2324 +MhckqcRZ;51665,89107 +YlDGKLul;49139,71028 +wuMMFUuU;59165,60733 +JxYzAySS;18876,10947 +MUcUNuPz;35471,42531 +kcLQmoNY;44987,39911 +UkXeUweF;50040,10693 +LceFhozD;13961,29761 +VlXrpetj;22828,78778 +nAINWWQl;74121,44976 +kzAgvmfk;38773,62163 +bGNpHZUk;56498,17097 +hTcqLFXp;3934,4841 +eqSJWdgR;88431,73805 +vBjENYXR;88899,15160 +zGuiHyQw;89730,76837 +sQmzTRef;28044,79564 +dpjKrgtx;23788,64911 +qhSZeDwx;23885,63506 +RQcKvwvq;20103,74812 +eteiHxIO;48865,53643 +axAAaXAM;84647,89189 +PWLxZcRc;41801,49436 +hEtBwjey;70981,14950 +DZRTHkaY;44717,8209 +yXjvvjeC;69036,66341 +eAHGHzsc;23229,20832 +JJhZUfTq;12306,6488 +zUNVpYWb;49574,38744 +kIccOfUN;2778,46760 +ZgbzrwoV;11625,18014 +eOQbMmqu;73173,6273 +xWJVPzZJ;64303,70540 +OqqXUWEO;41594,64550 +hRscNwNq;55578,47696 +nAKREIUV;36434,59574 +wTNqKVre;34832,39514 +PllZvLYJ;84453,24355 +AujpOOiy;28647,23596 +CTPaIcZx;47699,65699 +ZEUDyTlN;39165,87571 +TBaZQXKc;33744,43693 +bXYnVRYV;58160,1083 +XWjACiJl;85091,76509 +WBounwwp;53898,27157 +QYCMitFq;83563,84957 +yZsfIDmY;53879,68805 +pvlHdnYw;80434,54340 +OrlFKOcY;34997,88618 +KHPpWDIq;39745,24126 +ZDrzNZHT;24710,20973 +qplkzQoN;51243,86496 +rnBSxwwa;28845,49817 +WHFTXnrr;27892,69235 +OvpvDFNQ;7366,37937 +tEkQNuEZ;26374,6943 +gzxIbuJp;50491,20172 +PAqswkRy;70107,54218 +XlRiMBRR;57257,14691 +mKfwbqdw;5967,27603 +wIlSibiY;8392,27579 +pVVqUXAO;85227,3234 +DzFuCpYp;75812,6194 +JhOxkyiR;74294,14319 +qIlPgAqX;26297,88868 +aBBkuXFl;71466,74318 +AWDLwqsF;66856,15321 +RJGoNGbm;36826,70269 +KdpqKcjL;4368,86824 +xoqwuyex;25902,41679 +stFcJHvt;1750,88514 +jTUaTnPx;61826,28609 +PuqSfiMe;50267,10109 +xHPLXZgs;45610,14429 +YMTtjGnd;40538,24225 +dSvIzmIK;58818,43987 +ozBUJXdJ;77577,52095 +MvOxFpKk;69055,7902 +kANiQKZr;28587,88307 +BIZdRhyS;8213,50667 +kYcmmVpo;77946,83884 +RaaNmWny;1512,33860 +KyneuBBU;76948,78006 +rPTMBwTi;5684,87356 +MOqBTkVC;78148,57322 +YuWVvTRQ;70477,67771 +BcyVfaSH;57583,6046 +RXzIwckl;29560,71598 +uwzfRQgS;72079,67805 +BpRkhEcT;68122,65930 +DIBMflyt;56766,28611 +NBomkZYL;79274,3618 +zFZLFGnQ;3517,72364 +WdNgDEVT;67073,9821 +lqxLCFPQ;10342,89809 +oBnJWLmb;83763,31020 +pFqTCdzq;52500,48210 +SSJLFbGV;72179,74288 +BzlliIhJ;25291,15343 +wJTSTHbi;81998,23235 +AgRCfsXe;78014,7383 +WsXGMRSb;79341,80780 +tqulQCuH;76824,66114 +FRnDtUxu;18332,85989 +HxyoiqKV;17079,80469 +HulNcnfX;51511,66289 +mNlINqKw;83873,37501 +BHdnsQwW;12493,42322 +vxzGYfcF;42706,66068 +SYMfiLWS;58341,10745 +TFoLEZvf;60571,13355 +CRMBmDYh;89083,80834 +IbXmYkGh;36750,71368 +BzHWVsmo;63586,43844 +uYoujrLS;79263,4691 +SasOgjNk;71686,67552 +TirElLJe;84511,79582 +yavODRhb;65087,54281 +EkqqIBIj;46785,41993 +WjOydKpq;27523,84988 +GdXAZTwh;69343,50585 +mMsRNoNH;54544,12576 +LlgLQycJ;15257,34506 +ZfHzjABH;74602,60074 +DBgCcvhK;76793,45677 +bjRQBAzE;11685,88757 +eNayYhLV;77574,52484 +MVkAxgYk;64178,60439 +MBTpAOdV;44835,33214 +XzNiTFHR;45143,78980 +VNRrmUcV;47543,88183 +MiEhpaVw;2443,41685 +VobuesqA;50251,29076 +fJHbEGlY;11197,27404 +vFVQBKFW;81833,8382 +umMHEEJz;89361,7705 +xuUvmpmU;37958,60358 +BgEHtuNX;34579,3953 +oXGabNdJ;36930,68201 +RJNpVypx;62664,12641 +uAhEfASr;50673,71129 +kWfwzhQw;64991,1816 +pOESFilW;30382,85406 +cRCdQIZA;18910,17350 +hlMleAPS;64371,9159 +SDQdHpqc;60817,7501 +hJToizYO;20414,57124 +iOnQrIEk;12462,87496 +OetVGJvJ;80612,63882 +ybkHiERd;42059,88259 +WRdSKhMa;46965,33736 +yZMOgPsg;13039,85025 +fwPCEzaZ;12641,89597 +ylApASFd;29517,50633 +tSZPaVbq;77127,43792 +SzHUQaGB;85655,68703 +zjYRMQzl;47778,3080 +gFJobXBj;47002,31532 +fajoMMRF;55604,72850 +XGGdDzqo;39973,66523 +WBVqKqit;74145,10851 +QBpjQPKL;13328,34020 +xAEgEDer;45889,9355 +lEcbAqad;14891,19543 +zunhBNlE;58915,79901 +PLSXKLgB;58659,33312 +NEJqIsCH;77030,63717 +kQyhOikV;34470,31381 +hLJPtHCw;18650,79013 +jAXuMRHL;31402,85818 +bPiTdVbS;80141,81626 +rBuzBqjy;46919,39375 +SVyQSsEu;15541,30861 +iZchqvbO;44450,51786 +mwuUviwe;5778,60798 +XMLaionN;54795,23202 +vSIUVnya;48893,29380 +rRNdfAKW;13293,64240 +lYfmiefm;74246,19860 +KfVXRjAU;56074,52962 +aktLCDKS;48426,59948 +lqPOJuRp;38461,25515 +RtRGKtOY;89469,46505 +HLrZRnRg;86610,42710 +gtgVDJsv;34845,7345 +JIECcrKv;25484,44535 +KnuFizoc;25023,10333 +WYZlEAKE;23968,55039 +QjANQenU;38304,34919 +RrVtZnqY;57419,6630 +nCVZKhfI;79019,44004 +NkDXjcIy;16897,3309 +odbmdlez;48187,12006 +jHqBjXTL;37703,75889 +YvxLFGLw;42539,76762 +DxlGIUTi;32656,42261 +SPeDbfgp;73908,33076 +UKKuDjkj;32806,66092 +TGrRGtXT;68330,39619 +TCLtJGrW;66981,13446 +nxVQbluY;13345,19953 +pALWChyc;13366,51233 +froRMbwO;74013,28629 +KviKsfkC;82116,54626 +MVHVEGyQ;88821,81393 +QvYgGELw;10788,39292 +CILUPwJy;73693,71900 +eQKOEDYZ;71723,21095 +ltjjCkPh;53172,10547 +soiUyMnl;14001,19640 +UYFrTPEs;76798,47609 +kLfhwVHI;85513,71722 +FcdmpseC;4841,71988 +lHclXeRJ;60712,62134 +DIoxuNPa;61819,88642 +XqwPDfGn;75147,33685 +ZjLhWkuC;80343,81407 +OpHnDmQv;70997,32132 +IcBETXqH;24765,24521 +WlXcTmcb;4116,25460 +hqamXBZY;2941,7409 +IbgprIxa;69656,65886 +dUlYyQAe;45282,24476 +nwLpJrkh;66493,62141 +esaaDjFN;49716,81227 +jrepTYQW;71936,3924 +zqEVOvqd;11847,76114 +kpRSBSUe;64445,42447 +JTozxXGN;71205,55775 +jqGpjuzQ;44381,82085 +gAeNbdfv;61123,64204 +LwePSwbQ;67591,34057 +xgRwNtKE;65050,16956 +JNYFIBbp;25679,36237 +qfePuiim;63908,40180 +CtEozZTP;17096,66944 +HVuoVXeG;39260,61141 +bZXHsLMh;7074,86060 +saSXWLJf;19776,68636 +WJGQEsex;41212,5636 +CPQxTJoj;54020,6078 +rxWtFHHJ;14015,43655 +Gwverlqx;13393,3864 +HKSVizLh;21121,6276 +HTGFPuNk;57930,66994 +NatfRyoW;72713,89421 +gaNjXsOR;19694,29707 +JuaXYGVi;24290,63503 +PqFklGZG;14052,34182 +nzLsPzff;22506,70828 +nGVnpuAG;50966,52176 +cLWylkvN;18830,66998 +qRRRHCyS;22394,4756 +RURhtKbd;37040,46943 +DKqHKYPs;46455,10831 +gPYOABoE;42901,15951 +ebRVTMgX;12187,37204 +gPgzwyHc;30882,26777 +EjFxkJVn;41724,61918 +zXyadhhV;54994,1441 +idAzNTtP;62376,21439 +YFcwRUfz;89082,55721 +CThbOJPl;25662,1928 +ibDXjevp;89757,9080 +XwfxcGxx;69095,40409 +XBqtfluz;87064,34540 +WkYSaIgw;14236,79273 +WhqaOLDa;88544,73811 +BcosoSnY;46699,15644 +avMBMZet;37553,30914 +yexeSOje;16354,52934 +jjfwHjkP;53545,22092 +AbjGOyvL;76597,54949 +UrCQjmOk;72005,28909 +CFwtRbFw;83265,54425 +mwjIGyLl;45347,41542 +rYrCENyu;1138,2617 +VuBJKtYX;73932,45308 +gGfGUTfL;64328,14650 +glAIrMFB;57798,21023 +pIlreIDk;37211,59560 +oKmxRsBr;14967,42842 +kirFFSkz;12511,88269 +hfyZEvPN;60388,78846 +IfSWUYzD;71981,67586 +CCgInVwm;12757,55707 +sTHBmyUI;40654,30738 +faRRwxeJ;33638,68655 +zCBDRPFG;8604,19336 +BRLsEzSq;85408,73243 +mMzDJQsh;63374,38713 +KHanDuWG;66196,18731 +FkgUoqqi;67779,52853 +TorqoRqQ;46664,89156 +ZeFgvUSN;44808,65195 +hPWhCGUZ;66526,20646 +nFWcPaPf;14169,62767 +DaxbnmeN;7505,59466 +cJdHGssT;10890,4589 +uKnpAeyy;73082,23333 +ZKvLJCKu;48414,13305 +amxPQhCz;6209,50230 +CODHzgfy;30061,81182 +JxkMGvQK;16680,36271 +cZeaGvHQ;55959,59362 +owmYYZZT;6237,26799 +CelpugfM;22022,83772 +vHKjSesT;78676,39074 +EhVJumiZ;74753,36624 +LVomYjzn;74601,64437 +CxFitngd;61178,20988 +xKUWhfVq;33162,72307 +KyDwRqAT;35038,86374 +UAlqJXIN;59290,54142 +aNTyoigN;25469,82272 +PHYfCqEW;49107,49246 +lCLzCqej;35547,42067 +XSrCcYlJ;22467,6985 +vJnhMevU;17085,79439 +hpLShuYd;39570,31071 +LrzXYQUo;52920,47395 +jKEtISsR;18757,80653 +YUbcjxmy;52810,89190 +NLzpIgXS;39256,78241 +MVqrHmDA;35726,42699 +MDWtjIIj;82614,84574 +RtomWoCD;69334,36757 +DZweijkj;84113,77280 +OZLGMXgi;69812,16194 +etQCzbXb;66889,12630 +CdZKXiqv;39065,52137 +oRgBGPlT;14975,12535 +BjOtlvFk;55101,26132 +IobnnyYo;27992,84081 +ajjeSEHI;38281,29945 +fGGYilaa;10431,49016 +xgfeSeFE;69699,20701 +dDbbhLJp;40192,12055 +KfLzZYGk;2290,38946 +gpBOdPpU;32363,59265 +qmXCdyqb;11624,66701 +fVWZmuuK;26093,50434 +qvRTMJcB;35512,3132 +IiXbHAvb;33187,74640 +laRIDAOU;73115,12201 +rBjeOTwc;34008,86329 +rnEfjDLs;12002,73166 +qqwcRBzw;79386,42219 +HRCKfjiu;81845,12482 +cVnnQbeH;87546,28781 +DuBsUkeU;10524,74791 +dQkrjPfH;16502,50239 +MDRKkCbM;48795,35066 +RKVGXaug;15476,75198 +uLwtFUdS;84552,16797 +ZOECFncX;85959,46634 +lNTVuoWb;4998,20111 +IpugLYob;49939,32106 +Syirtrus;13344,75817 +duPwORLh;87025,56573 +VNWLcIFf;26597,5312 +bRcsjwjy;59047,70238 +GYLWQLRZ;39664,14969 +UIntIxBD;59631,18977 +QITatEoM;42179,18365 +jkeXaLWM;74807,18166 +jiUZmJIE;74901,80102 +xwPkZgIW;37588,4605 +eCRwRLGj;73848,70782 +lZzXdIft;59162,43318 +diNjkzTJ;23256,77572 +SqRuxFes;18813,18374 +lqWgjMpt;6722,38019 +BwHoTWhC;17146,77466 +WolVgzBi;43718,36401 +lnciqNIw;66009,49697 +xscZFuFN;70770,6393 +JuGwlqLU;79181,51323 +dPUqbLmz;69678,61936 +JPjZsKdh;25826,78936 +Tzfmqykf;49282,22411 +HSdoLfox;52185,57510 +whSaCAcP;51383,27998 +LdoHtpgN;46515,22450 +mOKkbnkz;55630,55285 +iQlgSLBF;13736,25464 +jXSKmJfg;52132,17013 +oMwLIMOH;38279,18831 +nYnTbQjp;54188,66690 +NpBufHJh;2273,10676 +kfdFBfCl;60101,24124 +uzgwLUpl;72230,1248 +BhzXpYEr;66638,80695 +ptyohZHN;54054,48083 +vPzZrCpL;42305,22857 +PDGjwsVO;69131,54408 +VgMQFYuf;18635,4238 +ucHUuPUM;49231,85793 +GhzUWWKb;10478,54642 +XqFyRUrE;17070,81244 +LyxCnHur;8141,3488 +BwmXoQxC;77121,53451 +EHZvPFbN;39726,24649 +ujuYjoyd;20076,86609 +hVQPcAfp;88668,70202 +CNtjBsGv;73883,64115 +fAiuHjAW;56907,76015 +qKtohLfo;32281,39141 +kEISCQLd;5734,79665 +ARSvifWx;18765,21034 +vGvZrmNk;32107,62244 +JILYLIpw;17619,15886 +FGNGGiYx;73928,71674 +IgoIbWOz;26765,17680 +zpXfiJsy;63321,11277 +lwZiEwmq;38379,61639 +uwxvBfQL;62668,10592 +IxNESQiM;84397,6538 +uPAMqLws;36814,12380 +LwFRNzBV;40722,18552 +MfxcQDHn;88029,20688 +HvELQrHj;45712,14412 +bCeGilmC;56861,86513 +pFdgxxqf;24102,82419 +uJXCvTAA;34485,79764 +dAiznQiZ;80315,84903 +nwkpSflj;43292,59869 +kDvGeEhV;63442,32913 +CjgFYcpC;59067,81714 +VXnAZaXH;62308,53810 +seVETHbW;81156,33791 +eMAbYynG;39815,87106 +HKMnkKnr;15206,50616 +KGHIMLad;41354,13379 +IwUVUxxl;42956,36210 +wEZMAKPC;85120,81209 +BQIkYrQI;81822,10456 +kmWHMeGY;79747,25037 +JrqwQIwH;8238,81411 +jtGyvQDs;65557,78526 +ADDgOBPQ;32951,69178 +uOlKCgJB;9194,78577 +khbVfyyj;54268,24031 +TJBcjcpg;68393,64331 +YIoRGNSi;23192,69066 +hRewfobg;83128,30824 +bJQBCYOK;48422,86674 +SCroYpUj;7993,9998 +lcfinfXa;61952,55543 +wDzriJsp;50785,80188 +GkuHzNyN;86522,52759 +eyRKPYzD;17430,10067 +qkOIRbzH;48157,18104 +QTtutqVp;61042,22415 +VFRQJbyG;57493,32993 +TdaHYBuh;54394,55273 +iAWuMmZn;41748,58513 +kNOAoChM;89197,60039 +RelUaLdz;37066,74466 +ClXtKufu;30581,79605 +KDonPDWh;11880,42502 +SjRzZzUP;61544,73911 +goweVAZI;46625,24450 +nAqqgiuQ;43450,44002 +spcDObhH;23165,61392 +ypRBpbJk;4613,60058 +liCJufaf;88578,46017 +RsyGrqrV;53291,25271 +MwJMjgwC;55056,80265 +jzKrqerC;18374,47986 +NKzTvtry;52150,33017 +oIzhvxAH;12429,23837 +AfrQavEX;66997,13875 +EFcWKLaS;43684,27560 +BEsxiFKZ;71771,7987 +BnvcvhZM;14046,76164 +jvfhqRwA;3634,81082 +thmNyNas;58026,13513 +GdUzTqxt;39025,41997 +QcMgdSiT;29913,1231 +rJUwGilc;87673,12880 +GSrwHqWg;29747,6135 +AwsRehqB;8393,31871 +MppyvcYm;72192,29231 +PGBawmNJ;30694,17285 +OdgmOhKI;59028,65991 +dkERsIEe;12349,49846 +AmyMyBsT;38390,63979 +jxtGJDli;88795,48614 +bvzFvFSr;82021,61004 +IkBBcWJM;2465,86077 +fVBYrsWD;54806,31822 +PAvNFxRF;3678,74152 +vBdYuJmh;52813,45544 +SOkxDfBO;1366,47973 +HsEuzDrO;48481,75953 +ImrYeaLD;58785,19815 +sJAMjWrN;17572,89879 +eugvgqnL;74876,1937 +rufdUAlN;17669,12253 +aoOOwjeW;79660,10550 +cWGrqHKx;17678,89481 +gtQOpiLE;70861,80878 +lujGEmWI;22956,40259 +xREEeOQH;53428,57834 +Eiouowqr;46231,78170 +nwhbfdKG;64290,80031 +HjRBtswh;86107,85441 +ykQzKgjc;49055,79204 +PPKAwYdc;66085,63814 +TtxUDuBs;65502,77213 +ZlpFJoQO;22547,13894 +LHzOFfVo;48762,56073 +GnpSfYuL;14485,57427 +JRVpPCIv;29511,58880 +BvmQBImc;26621,1089 +uammdvki;20477,49438 +qWbzTSQz;36807,42015 +QAJziYzQ;43854,51417 +OMtUYbnv;80922,38250 +VWWXPXls;72614,40029 +GecgfwOV;1903,80393 +IWnxvTys;13962,42833 +eGReymcO;17321,73159 +xaJKxLTa;8377,36392 +aHKVoGSc;10520,81820 +VFexUXDP;81389,60215 +lYUbhGxi;9304,30946 +xuJHhSpL;43258,87173 +yhSUZqhh;16823,67256 +wgXvWdUW;56478,39480 +AcdAVvEb;50817,73959 +CHXXYiqj;22334,28701 +gCGuosQB;8778,45698 +BNLghgWv;61615,40342 +QjBUrwrZ;1842,84049 +FZUXTSXf;38894,59630 +CEFNoJKY;44836,71848 +FwwFyyHL;28367,71297 +rVTzleWS;39249,86646 +ZgicOHJF;5779,6742 +vowzKaux;12324,5696 +bJRZZyMw;79196,10534 +AYBfQNyN;25692,25184 +rsmrHKeD;50599,85501 +sMFjAFuU;22516,11923 +Knvnxvua;67837,13481 +lXLrpoLb;38178,84888 +hneAconj;42912,74612 +FTKfaXAl;9709,79244 +niuQoPZM;36192,49108 +zJgLYBTD;28670,66274 +qWBIFOxr;42258,49618 +JeVuSuWr;41735,37479 +AXHaZrbM;69162,26593 +iDyENTtc;46041,28989 +ZdtBPsAV;66307,14791 +daqzKAtu;73766,19698 +otHdPcsK;12157,89267 +SdtEBRUN;76714,60960 +lXAqluUy;72850,21550 +UKsKFjgX;72559,34861 +qHLYhmVe;48798,57131 +dYqvPWgp;3476,58555 +cpFeAiYm;87010,72068 +pCMtwCZS;30533,86380 +UthsuhWD;54705,70701 +mrwXxphU;50699,10941 +ufVxiVBB;45994,39331 +LJkQFZKz;37520,51570 +hxsURfiY;58692,68160 +ADOYtfHf;2755,27731 +XmxAPYup;21570,66569 +rlUmLxCa;70985,8654 +gVuayMRl;51444,80244 +LfCDRthW;75837,54380 +eKBuUOtk;25371,39031 +CFWUDzVE;36242,23039 +ULQEemfW;29579,46957 +CZVUvJDu;60175,75933 +RZwusYhy;61981,26716 +pwgoEcAv;12343,7612 +lWmyIJtG;81941,64673 +bpUGPFLA;83346,31659 +sYMMJByk;49911,85926 +JCoKRgeG;10368,81365 +wjfSpgOL;24542,89991 +OBNFlNJe;63457,21796 +ovIznqRX;19558,72454 +iSMMBlJH;40949,73836 +bfXdGTuy;60142,65749 +bJnmbwzX;70626,45018 +IbRLRJYL;37562,18006 +HmXnCMxf;22983,2106 +AisodweF;87221,81107 +RDqqpzcs;9083,72689 +FJiwhnMC;64751,56014 +QesZISKA;41618,32638 +PQSaiWCK;56576,33905 +kVZunWGK;54842,65108 +SHxOQKdA;84024,41334 +ZgeLQueU;47757,22987 +kmYFvxZU;18509,82636 +IyOzckSP;58754,14426 +IZjIHxNh;38244,55970 +bKwmGTcl;17521,1093 +ALblhhEH;70294,16326 +ugTVBOij;1996,55066 +CSPjBSIx;70523,26894 +jmsWVala;55124,43214 +xTnTGRmB;43004,46143 +oiaAubck;49088,30431 +uQyjOoJe;32230,8260 +bJGgfqKQ;83526,87310 +WKEqUvvm;54479,79120 +TEIrFKwh;51304,45624 +lIVBXvOq;7095,41211 +ChCpFmzF;9518,41949 +seDeDnzk;28479,45071 +iORxRakq;28193,57851 +czVgvmSB;72173,56227 +nOPszQzY;42245,6061 +xcSHkKuw;88054,43444 +SUcLtlsP;78969,80909 +fUrqlExs;74804,45876 +ZhgnInjM;16218,76288 +PigCvrDB;3356,83981 +FfudZSVo;17589,36989 +KmxyuAeZ;78245,53115 +oEpruBqc;63385,37959 +KymzbKHg;69439,21303 +DTgUdZDQ;60554,81295 +WQJLEyUO;59628,42075 +zmWvSskC;62166,2102 +goIcGufq;75757,7490 +URTeyabs;12157,31115 +jLExXdYc;33892,87322 +duuqMkfr;43259,41568 +OTdHpEwL;16426,58010 +hLpylDAJ;53121,62494 +bEqxLbOr;86217,14122 +HFAiWPvk;81586,69863 +gWpdrnXT;79184,58126 +FxqMcZdf;11506,48653 +ufLJEkAc;33931,89487 +kfmCSrhL;12611,68540 +bmsHvNoW;12521,72297 +YbiwGSxS;35632,79779 +gwmTLgkZ;16187,55898 +UJBdciQq;52769,8047 +GHwygyid;68947,72956 +HIwSpRQj;61727,89942 +DlJmiAMB;30196,30578 +zwpOSHuB;11689,84185 +ewlJiVjK;16426,78509 +UsCpQXda;72733,89241 +pRKBpGWL;82867,73735 +iPEMQxtv;46613,33117 +MsmsEbeX;48597,52297 +teexbpMl;78402,48602 +HzLgTfkp;1498,38591 +SgyofqbC;60539,58086 +HOpmuzah;59241,71600 +GxPqGHyh;8098,73682 +rjyBfrhc;32800,58976 +xbqxXkcD;13903,48634 +kkEWOPVO;71938,54589 +xPjkRmBp;41089,35040 +zCQOAtgZ;21530,4376 +LuvxmSRW;56593,1370 +bCaVyFzm;57536,5031 +KdivxUEP;21192,56687 +djNXsOQD;41784,51088 +MrCeyulm;66560,7019 +cVXAFpUa;53456,15878 +hdaajCqU;65634,3890 +XaymysGa;35356,82944 +uCLjcLVe;89071,17184 +XnFYvntX;9325,12202 +wpfLcnUa;20659,17078 +GWHmBkiF;58308,55597 +ssHvhKOR;60217,37640 +xuIwZAEQ;56329,11935 +nTvZbquJ;8797,67206 +zJqviZeT;12250,29573 +YGHzFIXp;59157,8801 +JUvaiwuN;33812,32783 +oyCpVQhz;53510,41771 +MRGIqHJO;10897,8404 +xCwtSmuv;70170,47462 +gNGNuUdA;59370,27185 +GIvPYfQx;85232,5803 +UjqJoPsj;27393,24647 +XUtrApen;3997,2429 +tBrNRxUG;39820,52842 +hdthZKNW;70841,40464 +LoGzLTQc;51417,65677 +firRLvhG;16436,78708 +TgUfYwNu;21714,58859 +DaorNbvO;46792,6849 +OSwOKfTZ;75756,17009 +wpMUBuFL;25466,62682 +EdGtqGyD;35170,26545 +sSxFWhym;40195,65233 +kmHCMOfI;7354,36185 +ninIVYEg;71907,48776 +QYLNVXyT;28299,27905 +msWdiExw;85898,44780 +CInrmITb;77623,86138 +njIwhxHf;67109,30619 +PumGqkfH;62204,69743 +OMYAcqYD;70186,55616 +QmJvAnFG;84799,89679 +vPMAQfYj;79105,33733 +QZOwNtiq;6700,64930 +DjeUjewd;7449,85831 +NpAZdiTp;73982,37708 +nMNAwWWP;88568,83443 +xSJPhHfT;3196,18959 +NFJqEamD;25000,84452 +oNfTAXoh;80388,70277 +tLDZlLtM;40703,26579 +qypjgKVW;73200,9493 +cdtnKiJc;46129,43240 +bcVNAnYA;87514,88152 +WwsYTxSL;51363,79310 +cNGQfIYy;42275,3543 +QjAcyBnp;27592,80834 +zMsgTDRP;51464,35744 +EerGJCYe;67277,24059 +qcXUqBkp;29818,30051 +qKWUYCfL;82582,85006 +vGDTtmCp;68563,11287 +SDJTpPnV;39620,47513 +vDhmXEMs;69708,4666 +fLHbdptJ;3771,6819 +BjWxxkCq;44210,64310 +ORSKaTwP;41163,43691 +sCfamSPL;18415,86626 +OMYUVscN;59943,76649 +szJpSbOS;26470,31476 +fJdIHEoD;10637,81121 +YUVNsvxr;53884,39996 +YXMsmXPy;36807,80794 +aLbDfmbM;85728,45323 +RErvXILO;38971,27547 +pLHiXOcH;86911,61653 +pJJQdsqk;30957,29857 +dPBHVnJh;2959,57195 +jXsayoXq;11793,56403 +dFnqzxUG;23551,70438 +tYjxXPHg;51684,51041 +QcxjoqAD;64866,57981 +NhgykGjq;10584,62713 +iFAzoZrx;50047,87467 +DOJlFQzm;81791,9244 +crnCtzOl;44937,30955 +mfDSchzJ;54419,60809 +DuXFAzwk;42403,22741 +SyDGQQCy;68031,57433 +DWztANGo;41768,23132 +RrxAXflH;68307,18609 +sXoMSOUb;74690,11228 +TkxaUrCJ;59888,37982 +ZLreLurZ;60607,82202 +rZSIodbr;20450,73948 +cCMiUezt;3092,40970 +AtBlfdSk;71988,78760 +cnxGUiKj;19012,66693 +jauaSGJU;89599,39972 +OoKQiYaK;78172,47278 +wmXExxeE;56423,8903 +zbWYLoIF;69962,58429 +bPvRqYxg;78702,37312 +bEuVgiqG;82975,31675 +zYwhaIeR;50601,58781 +JONIDPLp;58037,11944 +XClnqqzW;66049,74367 +MAGbpQSI;67395,28046 +SPpwyoeE;73554,27365 +yVaWQHAK;1220,12085 +IBBPgseW;55754,66957 +QcAGTzGQ;27411,75519 +YNETKfzd;40280,31350 +frhroKPb;81880,65918 +OiKSZIJm;55809,47910 +sCXVuMIi;61233,55447 +CKJzUeeO;39177,15270 +jrPyqFSW;78819,12683 +PnkuFFvy;47375,56161 +SJzgSdbL;6111,70437 +tNOtrZab;7751,44916 +OqArbYgF;59725,49451 +dMJwKTKs;50176,44608 +lRgIsGlX;8175,61493 +BzOeYeIA;67403,43192 +dvsumRgE;80115,63410 +mJBdLKti;54099,24928 +EYBjuTTs;26989,82621 +gOeRcgIX;49589,70124 +nEgMkLda;14166,40455 +CksablJo;26315,26178 +ZQXzPpDe;76814,34886 +vyTTGtxD;77983,40940 +afbGnZhH;27439,20147 +hknuVpoB;86758,60824 +CxlgqUCD;70734,30844 +JUNicOmq;12072,61017 +buAhQNtp;73056,26838 +fnbphTKm;15595,26901 +xKZpahNJ;18700,66428 +cBUWmwGF;37462,65220 +nWdzloRH;41886,32424 +vTmffDhm;42208,41548 +JZmnuzfe;65716,44499 +GRRckRfk;68835,77017 +HFsqfKlP;64410,21807 +ehznYaiX;53096,36400 +eauYeufw;22800,84235 +EFwkpYFD;86188,85150 +CeLmEXAJ;10444,62804 +BuOCMMOI;59452,26088 +ImlJujnP;36306,79847 +uFBkWLGl;2253,58012 +GPVeSWHD;73043,15750 +SIWnpOrU;76733,78740 +HVXZbtqS;5964,40242 +ZzDiJgrM;69666,28911 +FkIKJzJA;39447,72722 +VimKBudh;34487,69198 +KEWHDWqc;48989,2176 +mRmZBPwg;77969,15422 +CXNgwcOg;52461,40994 +XMQvavNK;89121,25295 +eAdfeyzV;30377,60021 +IRhEFLUT;78594,21765 +slfENYJR;67655,76579 +LVPwJcPY;9863,44980 +tVkWIzbu;31714,64797 +IjgjfemQ;24575,5029 +oWwMRwLO;88488,30939 +ByQLuzYv;66207,1041 +BbYegAQg;48943,27352 +USufGBtN;7398,83903 +lBtIOSbf;38920,54702 +etTyfQts;48646,76112 +GpDuHlLw;10286,44694 +FZYCRcvJ;1320,5575 +NiyAARsw;30594,68940 +FOmZGBfU;33953,4766 +urSGtaor;21020,1465 +WTyKRgnx;83501,40016 +VlWOxbZV;18061,72973 +HfGZcKjK;16854,64583 +orANTmKN;30216,44053 +wptqUmUH;59592,10017 +buwoZlZi;10366,42164 +XtWqzeVg;45582,59670 +PrcCIKcn;69841,89565 +jJSRJuRF;72418,74200 +QGYTaLCC;61439,55733 +TqfrySzQ;68537,41324 +uVWyFOrH;55611,3049 +VNkQvbtv;3629,74792 +TpNjQMEu;17915,48424 +NThPLuSG;40498,70881 +BVjlVqTY;72142,35118 +cyLdLOsB;58232,11226 +lNavSViK;2041,45244 +MJZGmSDO;76159,10156 +JucTeeFw;35764,75867 +cYtJuwnc;63095,78592 +jFWHlTIM;54482,18258 +wUfljIMM;52794,23789 +evhFZXyF;89634,40116 +BTTmqxcg;40691,85048 +SeKSCkrb;29258,80489 +PowbMOIX;34859,54784 +yzMrfXup;18070,82246 +dKfVTbdL;64840,13606 +aVDSMJWv;58818,26224 +cFwiOoGD;63558,45119 +SkTHEkuG;33729,40517 +QVsDxUhE;60891,31651 +uNroYPTU;34983,65550 +aqMpbqjS;56196,89424 +sCeXMHJI;37214,81024 +qXmOeDDK;63869,64991 +NUhKTpRB;1148,59110 +AcoxGXJt;10329,41021 +dwFLTdKL;45475,64582 +oyPmczDP;9812,19770 +xUZWVQvN;42461,22704 +alCpMxHb;52124,86398 +sdGjDHUE;70338,29146 +eTYthgDA;7631,60954 +qIvYYEjl;53740,17899 +oOvqvxsY;55374,1680 +kJgcvKUs;50303,11833 +lNTwVJVZ;73408,77094 +MQsSmunU;76059,59380 +HlvhMshn;29103,25084 +zleVVXDB;34570,21996 +cyWTEeEp;58083,36121 +VqPbTavi;29135,49972 +UpLIjdHl;79457,20433 +UEkmyMPO;40934,65117 +rcXaUghl;31395,36867 +uBREDZRU;2800,43816 +FMPpxWvf;75099,53361 +QOIPaEtR;13816,16394 +CRqbcYwJ;82270,79046 +WPZiNtmT;25374,63470 +nCTbTYHx;84130,87984 +TvGMHkJW;75431,64237 +CATWwOfK;40811,47352 +RrOxJQgJ;10661,54750 +ubOlwAQB;32601,4788 +FBVdirsK;13797,70475 +VFtxCoUQ;19092,86435 +eXjfxNGD;1106,89981 +bkJcgCfc;13851,21418 +IReYedDY;61074,34310 +TlqmjJez;36496,10852 +bWxfedVL;5917,17949 +oRHrenkS;28493,25575 +UsQNmIKx;19497,12244 +GzKCdsYq;40646,38476 +RCKRPDOI;71246,29341 +TithRRqf;69508,52110 +DIDfBYhz;59650,41400 +LeJMpSAF;88303,81965 +KloabAUy;72455,50185 +Ewnqrdmm;75290,26963 +pebDtskl;36823,26894 +eoEQQWeZ;27540,45049 +QursXtea;33888,22922 +miBzQbmf;75472,85726 +wKWqwsOO;42173,43751 +VDFHonBS;14209,69148 +OECzcJki;41067,10376 +tytsibiv;85579,16537 +rgrKEILf;22277,73305 +xxbJgzYw;9477,81898 +UAmXliEM;49780,25505 +uWxvNLUi;6416,9615 +KYZUQAAH;52733,55159 +QJiYtkSW;50086,19787 +HNeKwVxQ;24627,34338 +HiAVkKME;72023,85476 +uuDdIcwB;62507,46993 +CxfwYIJB;49974,59603 +vNWbdquK;63357,11900 +ZNXtmxvU;77630,82898 +WJaoOGpX;56914,87780 +VbjokPKB;63897,30625 +GgDxQXaq;3226,27828 +wHoutGOO;11474,32418 +KTMNxlDM;37650,31117 +qlYXjWzP;48121,7612 +fuWppiqd;57166,34414 +zbwfpsji;64600,17799 +SnKyjmjx;87715,41286 +PWhYERWo;13847,3913 +oQSbplYq;46607,4382 +OpbMcfeQ;55675,40584 +JtNnkZVa;41913,25077 +aGRkqipn;42274,87103 +wpGmfvON;35057,79561 +QWbljIJN;53691,50160 +KSzTcRtV;37563,21213 +umMLepOs;50146,3022 +CzYwWanG;87426,62691 +NEWmqChW;23871,40997 +hAdzJYOc;83128,78557 +mfzKcHRq;33239,24442 +QjyWLhIz;8519,51966 +tBItbbzK;34169,52893 +QuqtzTkH;38397,9830 +NqoUBHXN;62803,62861 +IEXxZhKd;6614,40262 +DBRGXFap;76455,25021 +hfdKRIIQ;62901,45351 +NLlxuHTo;88971,70430 +CGKxAWsY;82406,18089 +zBOwhoua;87201,82466 +nkTBJtRB;24278,32616 +dppaOTnJ;82416,10972 +iEGfDSCp;83162,44447 +oUBIXYLe;82123,80623 +XzgNRurJ;1205,86360 +fZAsgqUY;70338,35683 +eZmIYKTA;61726,59479 +uukgkCwD;49035,58367 +pTxQUhzL;43352,27604 +xuUDHEhs;74788,18950 +wBiAvNZe;49621,39259 +umzpBHje;31999,27630 +yzyfogeL;89244,5875 +ZvPSmXFd;3167,39780 +sBiLecUf;11623,30388 +rCHEwdJn;26458,71928 +QxVYMzop;83984,1531 +BqktyfHJ;4791,2887 +rJyjDNXo;79060,55058 +QuIRrjJp;20298,55714 +mdPkRiAi;19613,80004 +XensvvYL;84352,70555 +ZsYtQKfC;76299,38317 +gapzONtU;8396,63917 +FyzNiihC;57316,15742 +dYHQDHpK;57747,79219 +EGVUijwk;27390,24585 +sgSmakUD;16297,46149 +ISaHHoLB;72110,29173 +SlXdXLGV;20109,15695 +CkbMCwkV;58763,32737 +XZqxiXKk;57673,25097 +aHoBCrck;11243,80392 +IQBIKrRi;79445,3519 +wnffRlvr;63544,16123 +bZFElcWn;77968,75105 +BAiGhwbE;30425,10869 +NeELMjcO;89500,16257 +JpnStUjB;13085,30817 +gbDPgYDS;56688,38411 +lQMGqLUv;24792,59255 +MdtbidOb;50303,73375 +TcdTnHOl;89322,58173 +wOljDjWp;31620,60272 +pOuEYDzS;73978,6295 +dkooEynB;36134,5732 +fKCGahOg;15664,56968 +JaVGFBKE;21149,5139 +ZJfBcelv;5731,72772 +cXrkbrjk;16712,41103 +iUvgjmDO;36963,18272 +figCJhYd;45466,7446 +brYzCYYq;74587,16109 +tMzTFfBi;3134,46808 +PwgSgvpx;88666,35760 +EKaikCDQ;55308,51646 +GPSrMnig;49797,87636 +CQtUdpjK;82035,46246 +JamFiAsn;54928,56746 +ndwcRkND;55927,89506 +jVohVTsU;82939,78483 +OiQetLvf;78997,25174 +BSOWdWlP;30882,31334 +RMgakqEx;84428,77435 +TtlfVrHe;81017,1548 +PMbcCyVO;11543,67208 +BeeYKuCp;18622,23093 +uEpbYJNX;68744,19835 +GgiLAQWF;52667,21956 +yvvBDKuW;5587,48855 +EPoBjggP;39487,59315 +xQyjVXfs;70645,19661 +rOIoLoNV;88203,44630 +dobtNLin;40606,38975 +xYScDUqV;12932,46487 +AkCAKYZt;64728,11737 +BdeIbmSV;8507,58215 +TNscLiii;30886,42927 +eCrmBjtp;84867,12484 +RNVeJuWi;21036,1178 +XlFuvBOU;1318,14456 +ccKlgUuy;47080,61282 +epUuFNHi;23753,32394 +OHzKvMRM;85219,33056 +lwrhcTtr;35654,39278 +DxhBBjpH;50398,75848 +SuTPQNgi;56606,46456 +PqvjAZAL;11664,56966 +lYEPIYJl;24747,8806 +rPWuVqDV;89023,39721 +TQNPzsIE;12539,62874 +GlEaSYVJ;50677,85189 +zGruBpFc;28663,88095 +JrPfzklb;39042,23257 +cgdRkeWZ;75952,79952 +yLnqnLAC;11577,44463 +ylDIPTTs;44605,47216 +ugqMsitD;38293,20704 +XoZtYtaQ;56032,9380 +OLjipPWt;23039,62267 +rnbkDtos;53987,4024 +FzvMkjHl;46586,46949 +NOtrRYKl;88071,77336 +OcgqLZZx;44009,85880 +drgQLjTX;66553,45374 +qKBAxnwJ;1686,18816 +GSSXApvS;6628,9442 +lJHIDKai;14622,66358 +wSHYjhkp;49009,39729 +QQDfzFns;25510,82444 +lNjhsjik;9562,73742 +TZijiqOY;66369,70692 +AUltCmsQ;9252,86585 +hRVrFCOC;43545,40941 +iCMjDTTC;89560,61788 +RKNIcAnB;56109,51937 +tPuKZGUc;78037,52737 +EPgpMLvN;85165,55584 +PmesSBJs;36545,87367 +IOFGILpu;7857,32705 +sBBBXEEF;21191,49091 +pIJcvKid;43708,33567 +tYlyIJQF;15092,56011 +RRkAlshF;18469,40604 +qgvompdm;16921,30782 +msjLFOvE;82472,60844 +hcSmhJvo;30671,34462 +kNneUYSL;24973,1265 +brtwbBWJ;23782,52520 +daBAIjqs;75744,1213 +BBblEbNy;57839,4418 +YBQrorIc;31898,13699 +XGXjXrul;4117,19096 +llKHsufH;17133,8696 +wRhGQebt;67415,58543 +AZnoqEjG;49944,35934 +cvncKJXW;50558,38511 +jrnNURfo;66181,65817 +pOHjBeBs;81147,3791 +pzotDsQB;86353,35922 +NDFwjfnC;75816,21721 +otxFyUQp;24207,55387 +yAWcowdJ;26507,47164 +QJKEOQsg;6287,7607 +TUMEyzlp;68688,59454 +OtEHFebJ;6075,28808 +ZDRczZFq;33807,78632 +ZMPNJIbx;60906,60280 +PLBgiXUw;45565,33085 +AbqZmMrv;12730,73442 +GlWhwmoM;86641,8256 +laTVxJfd;23567,67979 +EsKZornJ;7485,49666 +SteDcEod;68691,26105 +qUKBWnSR;79454,5545 +pPIlgpaw;40951,4861 +qidXiLxh;35081,3561 +zgxqojCl;48751,48114 +BVRUraNQ;22038,58649 +gRGaMHrX;33140,44510 +zCtuNgvg;45631,84407 +kybPVxXf;70446,74346 +meiGoLEY;22525,57506 +NqsWTeQe;86761,10191 +mBJVdPgG;24199,11709 +KlvRRrZJ;77233,40971 +KoZwHsPx;51374,81717 +xzxiEVSa;44067,33554 +aMdMdZaU;57423,67938 +NnTronJO;80189,28175 +CwejEwNu;26675,36281 +vjLvOpNm;16024,3287 +osvZsVUF;65811,24439 +QKPAQOSe;19408,39129 +bkRcwUyH;35978,49493 +sMKmbaEo;14110,20093 +qEQIjhor;82212,81139 +mkjjdieq;69829,47888 +jlrXTnwb;57880,29929 +AcsXoZbe;64246,69372 +gtFPCoVz;89887,57552 +ikIWfExU;52813,2533 +pIWQKTlh;61986,32409 +JiqKSFLX;72661,72838 +TcEneOqq;44793,70479 +dKaJtjFw;20805,25082 +rtiLaAlD;68822,11316 +cdFwmHTK;12903,73627 +NxWGmMHK;13375,67225 +AvzqUwOD;3710,67711 +nnjidTzm;13546,32719 +IzhlkIBa;87236,18641 +pniFaYsT;83826,64856 +fSlcKhkN;1829,21467 +qlaixBdg;23401,49222 +YaQWjSRw;1659,35480 +hIvWvoSz;21331,17461 +qQxGwLLy;37301,54605 +llXoNUIu;45172,3330 +iGXHzeCt;27269,82608 +HqaRdOrF;21620,78754 +pEDavibp;10905,60219 +JePLgnky;79859,19884 +rnJIsREZ;51173,19931 +cRlSosWm;43425,7085 +CctCKJSg;87166,22582 +wImbOiDb;24638,48184 +FsTEDJLz;60813,38933 +rnwaVhaM;83432,8880 +SnUFSwWP;86935,84805 +MlxNxvuF;1057,44404 +NHAFEGmb;6639,43394 +rzIFKrCx;70061,50697 +xfnTQxTn;54115,22233 +jMQogVAo;70140,48979 +vnNXsLLU;66622,29861 +OnBpTvMU;49900,6568 +PGHocWfP;81273,85395 +cFsuzQtx;71845,24865 +eDeMOOgo;6884,75595 +JWSqCCKy;9049,29369 +PfsaUGYW;43625,65045 +mfPuLAvc;75814,85587 +yONEjUVb;44591,50557 +fgABwvTX;38066,36509 +wcQeSjBA;58236,72074 +ZbZiAGkX;49713,87703 +GncxsYiy;1084,38850 +heKOndiu;12158,47603 +yjkiNAAw;73221,78924 +qEoFrzxw;12337,69999 +UoodDiaq;5473,58055 +GcbKzVSe;12003,23527 +KekldAMB;67665,47338 +fKLxBIjg;3024,6842 +NTBRydVk;25735,26479 +nomVqUDc;25363,65120 +SfYIMgiT;38288,42166 +CLhfoYYA;85842,11950 +upRSFOSf;44737,40466 +EpkCZwwV;71721,15415 +JJVmJopQ;62036,35669 +vXVfLxDp;45260,12331 +diwJJLTq;39570,77391 +whwQYOvv;43124,63970 +LDfCaKJT;69655,72727 +BCCscKeS;21053,57421 +uNUdbUxL;44323,69790 +MGkcqMsn;7413,23677 +fpYyYIak;33592,23188 +qAQpgbfj;68531,25308 +kFdGRZEf;48410,32314 +uHIAZccD;19677,76265 +FLSigbYY;48761,76375 +wyJbbukY;11487,55420 +HcXsMKSb;36657,82017 +IzABqZGz;54465,51554 +QTwVslrm;37081,14983 +YuXKfeTp;68068,22846 +BJQJSkqc;13264,45145 +DOuAwvwV;34907,57043 +qVfINyBp;55216,85139 +DkdpVoYO;54976,68893 +CwepTXbk;8423,54161 +QwjcpyIu;79998,85922 +rQXXNSqt;44687,58307 +kOBhOUOQ;81820,52176 +sSnUOsnZ;77259,80328 +EOojByHw;24709,65425 +EdJYbgAz;70649,52449 +ATyvWGGO;70892,20135 +DRNNisgY;68627,54929 +WafeJIcw;9576,39335 +MtsNkYcM;72377,34095 +xgOcrmvu;48485,10214 +mrhXRTSe;82254,37900 +vOAfuoPx;10442,41901 +MRXXvZof;48074,32391 +UnFJElZu;17547,86633 +EejdCjRl;49205,41741 +RODCAxYy;82187,86933 +BKwnDJbk;38404,80409 +BMxFjNoH;82702,36325 +UORkbmin;17337,69846 +MfccSbnX;63266,60920 +vOnmSGtV;32504,73162 +XwLKrwKW;16363,55177 +NEuIpJjl;72475,25243 +FkHgfNNd;81297,55851 +QvoCpjhV;65222,21180 +kuuDYdhf;17209,83348 +tkijnmcX;11864,54607 +rneRbPyb;65872,61720 +EcdZUEfU;62295,70108 +bekUkTWR;52938,4541 +ZmTIgdxG;84876,29704 +JwqbFuEa;83275,87282 +WZHbEoca;53738,81473 +HbeUhStV;6864,76128 +WmGPSIlZ;70618,87698 +xaBLukaT;85264,20716 +nsfQCHeg;89673,35056 +xdRgRrJh;41989,3147 +WrrTpGdB;55636,39490 +VHpQzYmL;45430,24590 +BpZGStvW;16565,1909 +fKFlcfPp;51781,86522 +edkCXMAt;29613,53305 +lseOpjTY;42064,77252 +RvrTTgJA;15426,8429 +VfXszjbt;18834,13195 +gkBouyfx;57406,15755 +llPBPMRt;26004,62471 +lxKbnAfT;60934,49885 +lwREjHXF;27452,66912 +SsAMFIEu;60691,9231 +pHkTdQVb;38493,65512 +rByXDiwl;70398,44783 +AJimpLdN;87338,59690 +NcCYYysV;37468,76900 +BcJynqRh;6181,17922 +alNSwdOQ;76169,85947 +yXirUqOd;87025,24291 +qPGUxiby;1725,5805 +PdweIAXO;6291,27528 +cGOEcfpf;87675,63768 +kCZbdyVl;63951,13315 +zlQLSZlG;56629,62436 +TJYnrcDS;60435,38630 +KsQdWoFc;75255,79771 +aMciqsxM;85965,75899 +uVmlDdjh;43582,40486 +cYRMJkUU;46332,62386 +EVyPycIc;83056,11394 +sETVFqkx;6852,35642 +FAFkZIkj;14898,86585 +qxyOtcio;15235,53852 +xvvBxZkr;52225,63108 +xVImyXtZ;14046,21191 +XsUysLvi;13651,32565 +VYAZgPMk;23198,41955 +ODZUrRia;29146,27900 +IgkrGjZj;3108,89617 +SxEEkCtR;72135,48495 +KXtreRAV;22461,38309 +pbtEXSyD;81413,25093 +ERjsMajh;33272,61356 +ahCVPtLW;61821,8878 +cfLnzrEL;54742,73085 +LobfhXTX;36285,34557 +lGSFiNle;38005,9771 +BoICbVSf;54853,65623 +FpDbBexB;54024,15291 +mdLiVEWP;51223,63558 +dtDTwQHr;17264,65047 +lDFOxmMV;63237,63110 +UXxcjlYR;55871,80149 +VlHtmNWs;69504,15367 +knwFZlPv;61338,35961 +EeMOkZnr;63533,31278 +GOCcMpWO;15523,74599 +ilHaYdfZ;30866,43568 +BFMNHawJ;34970,48476 +hAbYgWZb;11722,61424 +ADMjwktt;52426,5720 +vkMIwhae;73864,81723 +XQyQejBu;33708,69278 +SAnvjJEw;72259,16333 +AZVNOvrp;80078,44018 +tkVZNtfS;36135,52900 +VscFIbfS;35767,43946 +isTzusnR;83654,64579 +akkgZNKe;64233,30901 +FuHpsclr;43777,47114 +EttfDcTg;69676,32419 +YTHeKxvX;42921,38747 +EcGwLQSd;72303,19125 +uUIxWOtR;48393,59269 +IcGycNEQ;80781,17492 +KnEkfVcH;87936,88066 +JsKNAHQr;13006,28647 +etJvcSOx;16278,46431 +eJDxiJxE;75569,35894 +VhQaZYSg;51860,62769 +YIcuEjvt;29244,30341 +QIpUWuqD;41577,6845 +DpvStYVS;50892,57730 +gryTxczH;69878,64204 +yjDcYCfS;50084,66343 +GdBshoAK;7543,76791 +ZYSEcQtR;32672,53869 +FBfiGWVR;28706,10138 +TSohtSEm;10226,76187 +clFrIUAe;38033,89761 +CRZAQGkU;69070,24698 +YNDcQuRP;23242,2201 +uaYTTWqP;77603,87107 +MFREbJIi;18774,79044 +VkVeNOug;17667,23006 +ZQgJfObi;22197,4112 +uyUvWcOL;67086,58121 +FqzKYaek;39024,30593 +aMbmAjcw;26568,16170 +QSvprgHd;86046,70761 +XlKMgaQq;59727,24441 +dTQWkSGi;21580,82386 +ZZyZoWBi;82958,21586 +NmyfBUWQ;73602,30757 +Gpedlwdd;11320,33324 +zAGOSMuy;51223,84319 +TeuSVeLA;68288,33458 +bRBzGNUA;82125,75085 +fhUKulCs;60813,13975 +BUlzbrzc;89750,61593 +ZsBYZpLr;20661,74385 +KRobvsoC;60459,54173 +pUDLtdKS;47984,88840 +yRCXIekm;18120,67947 +dmSHHUCL;69775,60087 +dfBjcIQT;33274,21014 +DAeaHAgA;7225,56790 +QdbnOHkp;66386,43166 +dhtUYJQa;79675,64270 +ONvrZAev;21096,22478 +hMvjNKpY;76983,24348 +xEPiyOIj;19811,69463 +bLSikGhy;63841,5575 +omezhYRI;52628,2541 +yiqPVzKN;44503,78728 +PFFsdqBN;42461,10204 +bMXqROFE;25156,64776 +ktJLxSSd;33217,79165 +RJgQruBs;79919,67551 +zIgMGZUI;87876,31086 +WXHkEQAO;62281,1089 +bWxtLlCj;64503,59511 +YjYKTAJA;85730,67082 +XHrvylZU;44520,87297 +qreSosOR;36328,45207 +xFDCikYO;39061,54548 +abixtaHM;18245,14625 +iCtkwZXC;86407,4402 +GQMAwFNu;11050,83840 +yxnnkqWp;60593,42512 +KLMiCrIq;42355,10341 +PaTkJXRw;13726,20973 +PBFlhinq;62927,75209 +ocVbWUcy;48717,45403 +ExvqxxGb;40418,24639 +twyoQBIy;10661,43530 +KSnyOWEo;7531,24488 +vgPqQTBS;37740,56864 +MApMYOuS;13217,37320 +NovoUQfR;69439,13104 +qQQVephX;32600,76086 +FPGMKXrZ;18470,68695 +eWjGKsYF;87827,4930 +zzjNlrnc;80103,59056 +VcDOGBEh;16591,5345 +UKhvzZpn;28717,3794 +aLWcRtou;34975,59717 +SsfrCpvu;25832,75645 +htOjQpke;37716,7252 +IePJQiQB;50727,70165 +RkJOjQLG;66665,5357 +oVHjAHfK;17011,63825 +UwSTHgnF;51086,75119 +fzMQjpse;62679,58455 +qdIvOViz;68032,56699 +BOMzcBHn;42276,76358 +YiGvOVVq;62111,9078 +TREEZTmm;18228,88271 +zxnXbige;48358,76148 +YJhFJhsB;64703,63004 +IjdUCEnl;68919,82322 +ktpbfHzb;50139,11718 +YnYuSIbm;4253,19263 +BluUTSGD;11218,10548 +uqVYCsKy;32678,31210 +UodARLep;73187,39060 +CGzcftbr;14708,83524 +cwXAXjFO;34330,76143 +AXiRxqZY;56949,28581 +UcyWifHj;83179,66072 +GAYtEdPY;78295,61669 +nufVrOLU;64822,10455 +FdqqWSmw;7065,75042 +BWBqORMK;1209,29382 +ueEjoTmK;64882,50098 +aPPaQfbG;42863,55765 +NKxaSOgc;13823,54581 +AfygqnDY;80122,13488 +mcFwYYFz;46471,48561 +gnpFgkMk;78687,21171 +dYfXYpKb;54749,41472 +rxLltbmw;30668,46867 +AnAeLMzU;48527,35698 +dbposRVp;64897,26040 +lNFBuSUy;60022,25135 +HfurRdEN;7871,73213 +avuynAHZ;1458,4878 +xposKUYT;57960,62801 +mkfboKDF;65565,15682 +SWxnroRg;69259,42837 +lSsfEQMu;87677,15130 +BtZVHEyI;44973,48527 +cxkObaSU;88268,55963 +TLTOdIfa;56890,29851 +nWcrjzQm;85010,43952 +OZDxMahe;25680,40131 +todNgasO;31017,57461 +zpNomZtu;50276,20532 +CZMUaJLg;15159,67552 +kzmNYwyU;75466,3283 +jdfStqAs;85089,71754 +ltadNvAP;71093,9689 +KnhwiyIg;2753,34408 +avOvaLbm;45546,60485 +ImvzgVuO;7032,67292 +bgqnwYDr;53182,10820 +EFajBDCi;35131,48783 +LxYHFfeD;46689,68839 +KdhVFGTG;69796,85477 +dNprqpsZ;4863,6367 +evBssfUc;76800,41138 +CbuStnlK;28876,85914 +uDlAPGin;49185,74834 +KzIFxTSE;63802,88910 +OfoDnyjK;78177,10557 +gEyCMivm;26981,11267 +gCSieghd;67817,15013 +oLhXxvVJ;65699,34070 +mhDZzudw;6165,88143 +GjVYKhqg;89309,49018 +cMmaKVrl;42175,50985 +PRDBAWmc;47004,17411 +YZZARQnw;27090,18574 +VUaTKjPr;51789,88180 +tzbuTNtv;68271,39156 +cWZZZjIx;65334,1455 +ijaUyFKo;71948,60189 +gyYnCzrz;87907,43622 +qdecPQTe;30375,51453 +HmtaMNlH;39003,3679 +JKRiggEU;55596,5986 +nrePohHb;84204,10089 +TVtvLoCm;55808,33073 +dRQqtIvQ;23003,16706 +fSkBhLyF;82882,22418 +kainsEzo;86226,3638 +PbFKCXaf;63720,51992 +RKrwDiqe;7957,12675 +wQmuHyvk;51801,63966 +jDDIuiUT;39745,16612 +wymahTnx;31201,53820 +psXkuHBx;64539,55899 +MXztydcl;59539,77105 +wQMANHai;70954,46616 +QoEpUzlf;40278,81175 +GkeiwEDX;48163,44969 +qnDhwuSK;82775,41377 +rYmOFDYY;50080,88316 +eQpgxOEr;36585,15890 +LOvunKjM;39336,53605 +jDVuPrEJ;5065,4602 +jEwJHoYZ;21308,2015 +kzJdmpkh;1505,59318 +XKTvyeyr;40720,30717 +TUOeWGks;44134,25618 +OrRVKFLx;31699,20386 +jGuFHUOT;1304,83703 +XzlKrtrM;76845,25136 +SpsBmXDG;5871,56535 +DBnGaOcE;61398,62017 +khLMQQnO;55653,17367 +qQiKuyCY;77070,31371 +owyqRsfu;8642,26437 +SNtsySOd;82741,62980 +jxUyIJmK;32979,20914 +fRDacBkq;49976,55947 +oQsMpZdZ;33884,64705 +fZQzBJrp;55614,61083 +yMHkawwo;84138,17059 +jORqaytS;48626,67555 +RQcweeHp;30692,17092 +QiLtJJEC;24537,28927 +UCqvpoEO;12201,40845 +oFgECSXo;55250,6305 +hNOOSppG;10334,74709 +WQFocxUk;25703,48631 +eeVXaAhS;26616,45140 +TwkaLGaJ;39345,58497 +HUCvQNOC;47852,26906 +FgUTexoS;53715,26718 +paDVPTKu;71793,34854 +aqVYMkuB;74531,42278 +cGGUXtrx;48820,47239 +zkEFgovp;88381,50836 +iSebofnX;30420,66657 +TKTrvavC;63216,72151 +jryjrHLi;33000,65026 +ReFElXpr;38551,46044 +JHKuvUTb;75149,69903 +ISJYwoih;19011,62283 +FDrphRNt;14170,47331 +eAkzsgUG;31391,74110 +qutonjqk;79390,16646 +JgYIjNex;74678,73557 +MAgSiidZ;77425,69672 +BoInskOl;2847,24918 +KbzPsasW;58309,18761 +TuGDAVaa;11958,84858 +NagkDdMY;33462,46305 +CtyABSsK;35470,50453 +ieifgjEX;71651,52781 +XzaBixXz;45880,66372 +ILzknjzw;74255,35338 +QRYlWWYh;54010,9341 +cLBfpEjr;55318,80140 +uFURJekW;37384,29350 +zUolAgMy;28341,41195 +sQwGpHFK;1490,39291 +abHHSdKT;83865,39548 +fVHjehze;79826,14156 +uOtLebdb;53764,88151 +VpdfemrH;62863,82593 +yBJDVxjW;40219,43115 +HiYWpYVm;27393,35963 +vuHaVmrg;83852,71224 +XYmZchxL;9398,14177 +NuRyfaAu;26285,17116 +NQuefGHK;63986,23009 +dyERtaPq;3750,86712 +GspRTGXg;87156,62001 +iqkDpUQU;16475,48026 +MZiHcBvw;81314,31960 +EvCjREDe;50000,39170 +gxgwNKbQ;63993,46513 +IPgMnRpr;80906,77057 +mGfvbCoP;57789,77652 +nqSQgFiP;70471,59378 +gmTvskZh;20731,47980 +rOsjYIwt;11650,75312 +FqTiGOZJ;78388,3670 +KLsGHvRY;73416,51526 +YKNHJMPj;17179,36863 +LIYHQWkW;26369,59230 +BMDBjdFG;15463,29813 +vCgdVUxX;56983,60618 +ETQtpXET;87669,28403 +xkRgtXXU;35984,67665 +AiTyCLim;54145,64633 +leQlSyBy;70734,51443 +dpoyAsjj;41518,82084 +eMkOZvKZ;86383,25212 +wJpFfsGn;13043,83448 +hMuPODMp;8346,56603 +mWLqHtIX;17491,75912 +vPHtJoyM;65261,15113 +NBFeMQMV;88617,17731 +MnHwVDsL;49235,52199 +JjKvPcNx;80186,34813 +DZelSZhe;61099,51455 +zVWdTGYr;59634,30830 +ifIXnLGY;3971,41273 +bDOWNuqP;33466,84796 +PkzGbDMT;58570,33266 +wcqoRibS;38843,26816 +gaYGcDCJ;62600,27259 +MVOVPFYj;2296,40195 +QOruAEmO;14430,86189 +eAcoekEY;30581,88006 +LIXBwyXE;61408,46205 +smhJbRFS;75990,30511 +tCmFLRUZ;44105,25319 +PDPodTpu;65066,40651 +fUZKIxLp;25877,1596 +suUvTZvu;36673,44588 +FdneSATN;71297,64115 +POPAocdg;55825,33348 +CauIkvxR;73452,16884 +INLRZAQM;46912,66572 +hBDIZGXC;45419,43454 +dbOWDcnG;3194,66965 +sUjZSRhp;72764,45783 +DqxrBudm;73029,9404 +dRtuDupV;63800,7479 +RhYpRFAT;10207,64452 +uBPGdkrU;20230,47172 +SrZxsken;45126,82072 +VSARoYGb;68027,52436 +dseWLUYn;4124,43339 +iboRglNx;45957,21179 +DVCCUQxx;13181,64171 +JGImSuPe;76788,64118 +jRhZDdBr;11849,88510 +bfnPhuIc;42717,12646 +MMDrnFTA;54000,86872 +zMlAsRAj;61145,87413 +SBpsicxF;72019,85823 +hrlzyZEC;24089,27808 +FurZOqJL;55060,1799 +YenFaqqg;46677,10736 +QEQTvvzo;66691,89302 +MXEhKBWC;10774,47304 +ZfFmPBHu;58933,65181 +bgbhgPOu;80443,1635 +gJNBgims;41383,67735 +ZXgzBXxp;23841,60301 +XJGLVjvO;64637,62430 +vHIMWOZC;89005,38003 +MsQrAgyq;87566,88860 +AEFQJVZS;16479,42492 +NrcbuFXe;8517,39500 +sDlRwcgc;6687,23730 +oLHlUJPE;66828,19574 +ocOrSCYc;32562,79344 +dWdfHnJY;12196,59477 +shokRzPM;73063,3549 +RgydCmjY;36036,77562 +Pejplugi;29232,41802 +ddMnwavS;24940,37973 +zkiEJhfd;52848,80800 +EmpHixxw;21388,11449 +KEfLUqLO;34635,69004 +RiEOhIqH;76589,49002 +HNhFbNuQ;21229,15231 +ILcvUEeB;32671,31851 +QoCHajup;44340,77447 +vqgsDuMv;57338,84583 +gdjYnwnn;19587,3839 +tdGQnKMf;60296,49048 +PnKECCVu;6766,83451 +zGIqenHW;51577,66901 +YNjRjsyM;34732,25657 +LHkluFMZ;5131,15701 +ZFxTOtqm;83988,41909 +hdRKSzYV;6066,74688 +pScSVeJr;35551,79535 +gVgVbWmW;73543,46809 +bfOTePIl;36729,58503 +HIlLmRZR;89854,49357 +BlAbMaPj;49083,83103 +zcPIxtWm;70258,37484 +hoQThDbx;17986,51777 +TyagNtiM;81528,47723 +HUoLwkGp;46568,10509 +KIqkepLt;74931,8610 +WLluSYnW;89767,84177 +zzIxJXwC;42460,32575 +ldjgBxCd;57647,77569 +lkTQhfIA;50552,43108 +ArvfJqEA;75775,20010 +KEGQomHM;2997,61479 +FMnYppPF;23652,17392 +HvafQYhC;7601,60776 +dDLdbGyE;27056,12930 +OhyRouBy;83440,76412 +BkLbThls;18146,29225 +htLDtYXg;44908,16994 +DWjZMvxZ;27360,10301 +enmvhkLK;76883,84676 +kPKWNkJz;20680,6532 +wkoBtDyV;63001,27553 +RHhFvpgK;72754,76491 +hvXaGkQC;32794,13153 +umcCwuNe;55669,32045 +GUOzfXPw;46859,64716 +xKoZFPNl;64078,2484 +XGKPmCCB;34440,81120 +ttVHBqda;37914,85982 +YwQLfoUC;30354,65286 +quzjTnLW;22846,38828 +xUzVraVq;47455,53366 +OVZxsnTl;48428,59573 +cHrXjebd;15522,86328 +qAjCDMdb;59633,42979 +VvkUuRBm;43722,63425 +VyvrOMkd;48089,28508 +wMlyBHyE;24840,10353 +ZsHRilut;18031,89703 +WRZliHUp;83893,45531 +vmwCxZuN;71169,86162 +XVhusDfp;69675,57576 +dTIzhCZd;5740,65021 +PhWHyfgd;59214,48344 +couPnAQF;74190,77639 +FnCtaDVZ;40095,69349 +ucBNWmoK;82409,82228 +TdJnmAcK;19469,51084 +TEhHAUQH;11853,44379 +qqFxrQHL;86297,73794 +ysmKWUNP;16150,83118 +YAHZUDkK;32324,80671 +ELWLhwwE;87340,4634 +JvXnyziS;82458,40974 +sskSCQxU;37828,78575 +yTxzwYcX;49852,13623 +xLTftiNs;57045,15325 +xmwJvjgF;86865,27977 +fVeYvWrT;55089,62890 +lcqRNEBP;54450,83333 +GQPNnaIb;14744,48164 +dsaUlFpp;76493,89968 +WFrQsYYp;50035,2418 +mfnTXPiR;24807,9287 +sELbMcuO;70956,78613 +iHLajRmC;40580,80263 +RdVqHBrD;49146,81177 +WzxOAirM;73922,57419 +AGPhVNQW;23202,7591 +ckOIiGNx;61322,77414 +AqzPTlaJ;68626,82750 +XmDiKBwG;80928,77470 +MPHPeJKP;25782,76342 +JFUTfmMt;80917,57376 +QOpadIfo;5376,13512 +OBhPqcDD;49608,84593 +SGosHrKF;16615,2012 +KDiheqxE;40250,27415 +llAttZNL;18420,65119 +oXossmin;76882,42956 +CvFPlSri;48272,44574 +UnIHrOVJ;5548,77590 +CWzNgBNA;67860,42323 +CIplSIcu;9279,81357 +vQWmbMqY;82395,26718 +TKgUdnIM;85838,44922 +jeHQewEj;76742,85762 +UGsdIFhi;46163,4628 +YACvJNvF;49566,73676 +VKFAAQQM;14471,11280 +NRMmzwuU;68415,11940 +eMvzdkck;44398,13958 +bDixvzxP;23742,50756 +JmjCsszv;65961,35296 +JKxiVijf;22003,27018 +zklVBDjI;17071,12273 +YQsVUUqa;17916,86793 +zdVQSBNQ;9294,87300 +iIBTClOW;79155,87119 +AzpVtyjP;22613,38077 +ZcbWnIQv;45039,26019 +qhTVPKFq;71935,15774 +RpuzmDCk;32636,59062 +AFLFmdZk;45492,3674 +lBfUfazT;35984,84301 +fcsjyWhb;53180,78679 +VFfJwTrK;78213,34165 +yErjagvN;10938,35126 +pbFslezh;63210,89531 +xkydDIVw;68050,42349 +IsyhwDCo;17315,19831 +zicKNduq;72587,20460 +sBDnQEjB;20409,87743 +VvKVusjL;15030,1363 +eFBVezBY;6658,70837 +IDYZfUPh;8960,85937 +csmWCkPv;11085,27513 +gugbYeLV;5877,2346 +jfgexOla;8403,39550 +sKNUbrDp;23755,77891 +iIfryInN;13783,41412 +GAlqBYtl;43552,68135 +uSZrApjt;30912,4443 +kakaZipM;13499,51704 +NQzRIWFW;4770,72880 +VzhGCfiY;37766,35946 +ybYtaFqb;44223,13108 +CuEoqSVf;82335,86554 +VldSGGUv;45980,80978 +rGFTiLyo;20009,57029 +lVsTFxee;86908,48006 +QukdusrX;55085,25694 +rOvzpPlw;37649,33342 +lPOnSGLf;7915,65640 +yiHMWfMc;4410,48326 +nKCyQXDS;25765,30977 +qajxCpiH;12537,65940 +tusvaxuW;64054,16198 +ipWPtNQo;44374,25267 +cKHjHgIT;16080,40472 +qHMukKGY;73017,73164 +dmaJknKW;55360,77442 +HtYzXkyd;62809,78257 +ecIDugqA;70448,81067 +dtmlWSOg;31909,23382 +fFEXtKFI;79053,33712 +jSnQWDiY;3751,82337 +nHnSNbfN;75334,15731 +NPNZOvQJ;68187,21082 +lXHXvKuQ;23053,70609 +DHGFfnjc;39383,84560 +vPfLBbcQ;23669,63357 +FCWENCfj;47630,75307 +gCuznNvH;49913,74397 +iGNMnApC;82408,37419 +BThvgFXF;7781,28458 +rFkRkpXz;2132,23733 +xowMjUyk;9358,81490 +GeMWdRNr;2128,71460 +IcNYIWLS;49578,62310 +TbvbUPSt;28530,32290 +OBFMLOYE;74048,39965 +DGmWGYrl;87680,19115 +EAHcPMKD;25865,48944 +faQozmis;76489,88497 +CjSTCxLv;65707,77633 +SnsGNnXF;76519,88386 +RGxYmXts;35139,68185 +txRiydRl;25236,36404 +CVlhVPlP;35175,41406 +zszDsXsw;74766,24997 +ByWTdfas;61951,86093 +WRCGUuMb;51228,18413 +hWiCAWMM;75790,16656 +jfpcJqsX;80059,82212 +FAeBoCVo;35861,88415 +lkhDTDFI;35331,59544 +UehqARMm;77906,25812 +OAyukEbi;86803,26076 +yGZVNIoQ;87537,18246 +cmhFEMvy;10444,61111 +FOxJvmWT;43183,54427 +IYAUUepB;75745,6569 +UagGEsEf;16360,24249 +DrjImfKV;88731,66671 +nwufwuYr;38639,17879 +FEJpattu;31980,9111 +ombtUNqx;50658,19836 +yZqWbsJv;37634,29519 +YmrdgOTB;52528,79386 +dZyozdMQ;21013,41514 +ODGrscpI;74680,9354 +FvGvRqUG;28762,8456 +filAfzOI;56310,80270 +bkeBFaJf;37076,11936 +kWeORsIm;34983,67826 +OfyBksiA;8212,83600 +qDFzjLdM;35819,67985 +GTwChdwM;12603,20329 +EIcfgRCC;11316,25280 +RvekDhSb;16967,37722 +tlmLpOkW;84459,77119 +oYlWGZcq;33214,35305 +PrpZMRQq;30974,15768 +NXOFoshz;8114,17789 +pqgzIJtF;49877,5279 +JAbcrQlA;87745,8663 +dwIiUGmx;2982,42124 +CAVrBTPP;1045,36924 +oGuxGUmQ;20769,10833 +zLuGprJA;23146,58086 +qwnjdeSF;52996,37032 +JyxSzGWL;44762,58538 +UfMQhiXs;37216,9791 +jiSNQnVg;17553,49461 +rBjOalvv;51076,35428 +oLMRujuh;52830,33521 +Psmwxgsy;17581,83123 +RgOmVGln;51322,84786 +UArcGRmF;21441,45938 +emVZEbUj;70356,86104 +pyyAsWRo;87399,34343 +TTgSJeVR;14921,28491 +VhACrKrB;28318,47724 +tnognpGQ;75485,67278 +OMppckLG;41302,22273 +STrvKMhu;54536,43858 +oMJCEeZY;58731,27972 +dCMomBpY;71383,84555 +iOJTWXai;6629,5546 +RyIOynLN;50100,6708 +LyNbiTrN;68710,36307 +XZqrRCjD;68808,32712 +zAJnzumw;79326,41590 +ZpNDdVYo;88224,28561 +NOpgTlaB;87996,84245 +IEDQBTqr;16973,32402 +SNKwlfzz;64406,26555 +cFuWgiIR;74754,28089 +tBnLGhWU;26226,24265 +bwSCVIZn;60379,7890 +UtazUsjE;59128,42787 +euChsrUQ;10894,72797 +CVzUtCho;51327,59253 +nNSIuMrs;10899,85963 +dtNJQxQh;35269,32077 +forzMNMw;78559,80787 +waZhwGwy;16381,34682 +icgpxUad;60246,81765 +tSJgrtZF;19647,89014 +aACUldvT;6930,39081 +zMPvepqn;19506,16652 +pzvicvFa;4697,61152 +gyiqLebG;48008,49168 +BQYuUuAR;7964,54413 +CjDeikZU;12008,29352 +hSknIyqX;39281,3986 +bBGdLZRo;70831,14412 +kUVsbXai;63936,57089 +XfwoFsrn;72509,72260 +mORMdPRq;70863,77027 +mMSIFTPF;76668,73339 +AHEOgNpK;49150,6605 +wUIHwuWI;60538,69952 +xDqmuUbC;16351,9526 +PUpWcsXh;7206,87197 +JpmFWwUN;69241,86452 +vhpJCLsM;53667,33894 +faZozlCK;50515,45863 +ndJwKNtw;15397,12903 +ZDbjqzwv;87114,71287 +IBcsdEPK;28504,25289 +vRUXKWly;6192,69680 +gWxTQsVl;11505,60311 +ZreTzVCE;53546,78199 +rJICGEMr;88785,67762 +kdbeeBLo;85297,9991 +goohHXlz;34726,42523 +puDUzinU;82902,9208 +GcnZdaUX;12791,78150 +MIpZsKiH;16682,4024 +qoyXcDmS;22539,28285 +fKCheDaf;68228,35243 +vpSmbMpt;54734,60213 +Akhxwqjr;63636,6959 +RwlyxAdz;54399,61049 +QCqVsXTX;33864,17381 +UShbanmf;41604,32763 +hJYVRhva;23449,18016 +VvwzFmwT;89143,54505 +xenylihT;10783,50522 +LqvCyxmk;3971,69141 +cJSftlsP;84640,61647 +jgDnJjGV;61002,33004 +wevoTpEt;81394,13272 +PdpykuEQ;84436,87933 +WEISvOQP;10788,73331 +yQfEWSLz;55145,26890 +PbMVLiPX;58332,30762 +tzkwRpkN;42816,1610 +efyhozqY;80573,3594 +UZgBbpyq;9218,59783 +UCXrBDJf;74218,69851 +jxOYZdKS;17311,13526 +lPnqWsyW;36802,39657 +wYepNpix;70241,77536 +egRrIJyx;89557,4258 +NVkrWbuw;30323,28725 +PhOOXxNt;77485,16448 +YSHUxNrO;82472,58354 +RMzVyMwU;73067,49788 +ETtIKrOW;10722,66334 +nPhGqLdp;79472,66878 +yLzQLzvL;75974,60603 +wiPosPCT;23831,15255 +mCwGSUUF;71755,83231 +HkrrYHld;47808,60847 +bmlzVJxd;40400,27725 +DpqmaPIQ;73857,29248 +tWbfqAWH;49879,42549 +OecKZjhU;4565,67511 +mTpMTzEH;15305,84686 +XqeTkgNP;72488,14862 +JhoYFHAF;45777,41917 +NJtAUbum;10275,40561 +tEgdhwrV;37752,34748 +hjAGSjMo;28425,62185 +stXDdTmk;23691,41782 +sXljnGvr;86096,26822 +LAzoVtbb;16779,9716 +gnzkGnid;75251,36717 +IYrBkkRr;60236,44488 +KBuxfRVy;51913,44137 +CZgSlyZk;24391,71439 +cNODQFem;83192,38414 +iYruoPCA;2320,1136 +RqDQUYqy;30577,19546 +siGuLhGy;46203,52748 +VLyPJoXx;3754,79770 +KWfOtYmF;72199,81515 +PoPYApmx;28432,13508 +NdreglcU;5298,31780 +RmkFTqeu;69621,31112 +GConjGoi;33776,73993 +zfETBZDY;79356,14285 +dsWuWzme;39423,18284 +OOdRHnwV;21891,86976 +LFnVszrU;38512,59719 +TAMLrVkv;50306,78332 +KlSXwboP;16196,41836 +QLUqCVqu;46954,70050 +HKEZVWVd;50710,39402 +UckXxAja;15221,80616 +VrshsMfc;69998,6697 +NXDxoyBU;34072,4706 +ebpBdLKU;10531,16921 +NCGjrXQI;40975,24963 +SMLCELAc;52981,55880 +HNnXwDMW;45966,38545 +QwanIifB;64988,24088 +IIoTVZhR;15483,81398 +vPwUXNkU;9661,27347 +GYZgWsOE;88814,40817 +PCwXnojM;14603,8949 +JIFhPSqj;39534,76002 +VBPVIQly;11032,37468 +ATKmAQYK;33954,51525 +nFSCocPu;41874,55531 +ijecXOfh;12008,11079 +KbNjlEam;49667,18416 +xAnGKhmn;3897,62941 +KMaiNoVQ;61777,86623 +srpIKpsA;75383,55748 +lDzfDWPz;21622,25918 +qdMBTaoX;32352,14635 +ojtCKQeE;53173,12584 +PgKKeIyY;32301,65867 +mjMXWGra;20315,3209 +tMLdMNff;79730,71918 +pylIBeTF;55175,1738 +JHcHuCWy;28267,81870 +QNbBZJxP;18831,24136 +wgaYJVpw;62289,6337 +KSUyZHvy;62523,89354 +ZDiWEtpn;45852,79413 +otqYJNXU;25966,22634 +IgxPpPin;56798,45893 +JClrAUwf;33125,22026 +kfPyxMoy;74856,11349 +HivBFnvc;82774,81502 +JKQhGwUX;56386,13126 +JwNEkPvE;24570,70681 +OqiXmpbZ;9842,75058 +JckunKTl;41117,71630 +xZKtUUul;68368,45155 +MZAXTMco;33787,36898 +QmZLkwDs;31042,51939 +tdKzSFlj;53448,44912 +UVzXDlbI;83386,76572 +oHPQwbWj;36151,68230 +QnpPeYCj;44956,41175 +dhEROeVj;70822,67725 +cIHHdAEn;37160,73875 +PRiZXoSQ;59150,35901 +wUvwlRIA;67387,64600 +SYQXzsTG;52249,38173 +vddTnzVd;17159,57825 +uxwCzMHq;57772,16075 +yflmvDbS;14737,50056 +OrjHSZFY;32104,60866 +ZJaZuNGs;11988,30920 +ArjfXVfw;5274,3760 +ZaDDyRmj;40136,74642 +npRGzMJs;47305,21922 +OIvRMcYc;33927,78101 +VzGkRCYV;39869,68672 +OAzkulbt;49338,48307 +fgWPJXWr;5455,12524 +AmYovEAM;16084,48729 +ddqkwTKf;75294,37072 +nuAEpfXc;13276,82760 +XJEUhiPg;7549,19956 +DlLBSBtn;46642,60546 +RnPnXYFG;30916,19038 +CUaSuLft;26405,59374 +mklYKFjF;59353,88644 +yxQhvLkE;37619,79827 +ThWZzYqo;78213,49822 +PEPvQcHD;29957,65557 +rpZcgUbO;84342,52157 +HdiWvhDH;14517,3149 +SclYuoKx;79511,70209 +fNfiOzdl;14527,45769 +MxVmlRnW;32807,42735 +dyQsBIDi;57341,88630 +MYRYhiKJ;30702,44019 +SuAwEQre;44218,1195 +SuloTMXy;35941,22738 +URmKmaRy;67904,87900 +NpAguikr;74786,7744 +VOEdMQKY;74183,25702 +TZscrwSS;3598,31563 +CjOLSKhk;66735,26806 +orcDzHLJ;37260,84456 +HnALEQEd;80312,5084 +IWzcBFQW;8508,82338 +YwNRaMjD;67450,23625 +hpnnLxNo;21630,29915 +HlxmETzN;77410,47702 +TKwZZHkp;82482,10415 +bfTGHdoA;79748,57303 +qCvAPqjh;13694,18404 +RPxytlcN;31757,86403 +mTAIHApd;12482,55509 +RYhPdKAX;40167,75589 +JjeFRmOq;9124,71750 +DdSdOijV;66778,13181 +fTkRehlj;71559,28315 +KmBwboXL;31395,83709 +XKfemAcn;9495,29518 +aPIDqpbr;22302,86422 +WZOJAgkT;20336,12634 +zfobHCDw;26564,84532 +EoURUlVB;39865,86304 +TrJnYwKh;18579,87707 +NbTbSqud;25741,20178 +zrTTjTAg;46988,3072 +dvPrWFqa;79589,9887 +klXERbRH;5839,5866 +rofZpJaH;72010,15616 +cHMMHYRv;81018,72344 +DfMBfMmx;59958,32739 +pvwlJCDG;31626,24141 +NdENcqKh;61288,84950 +XQmWfMFY;8509,46831 +QdZYlYhc;17439,37640 +APKfllmD;85761,26751 +TEBFSnNV;29702,51942 +OsATMstI;58618,23701 +JwFHdnQS;31234,26836 +kocrlEGz;41737,30442 +cBFIsAUO;40462,57912 +iaxDAngo;40699,4300 +OrKqckKF;45737,2195 +CxJRuVUj;73746,34486 +SpACLZab;11896,52646 +mLVDTdHy;50390,33002 +mjmPUbfS;5944,54648 +mJhEUopS;19474,4646 +RMXlzFuT;76767,64740 +oTLcmrYm;37441,80045 +cjcrZvdi;36414,5990 +rTpLIDzr;70847,86621 +XfLSAEZD;53167,16530 +nDVSkOdm;34874,12689 +ujQmYbvl;51009,61151 +SkgWdqmG;74530,32449 +sZmCrtEj;78098,43882 +gUGOUfIl;26172,59836 +tRTGeWHC;22385,78827 +mEVrMEQZ;2996,67729 +bxLwXocz;14315,15217 +wtolGvvQ;26051,36326 +SwQwkTHs;43577,9141 +RACcqusg;79853,37722 +lrtvMaws;44827,86952 +XKKdxsVC;44878,26781 +ClwCaOtS;69640,4781 +KGlsNVCL;55255,24839 +zAmDugmk;85417,89443 +ZlZeKzQA;33373,66135 +nuaJTvqg;11484,80987 +sgMEuGLJ;3333,41254 +zZeWLUQx;60664,19057 +mUxaBgUf;22940,68739 +lLMvRecI;80583,9610 +GmFfpZhd;12409,29921 +CRGkmyie;7718,23055 +lqVmpLYi;83729,7063 +orhdeKGg;61415,51816 +cThIMOAp;28002,36348 +lgvZluLG;13916,81262 +nYgEKFjy;23461,46100 +zCNCZckc;29896,84417 +cWTuMaVH;15283,50985 +awhtGBFf;46740,46000 +zUISutuZ;83593,69878 +ikbGPOzZ;41796,64952 +zaQGkkrZ;86976,49019 +abKIrlPP;37046,57263 +ztiWGmzC;52042,30032 +RucRRjgS;70728,34181 +tfqWnpaC;70353,16752 +fhDsuGHL;52549,4237 +pMHspLcW;29323,65447 +GUVVplRk;67695,28641 +XcUVQvFE;12947,47855 +RnweELBi;15505,42866 +negamfjZ;64298,32282 +rvhFomma;72902,31232 +aErKUzSP;31809,60701 +zPVHOKuX;11702,33106 +cIjBAuLp;50625,5139 +JzMUsWLl;53852,5571 +wfUIeufG;12727,75661 +qPOqlRfO;60346,57453 +feOOuxGl;85706,63104 +BqIkxBEN;43238,56408 +zDNqAQJC;48285,67194 +OaYmcdQN;46765,25859 +wjGXZBUG;31311,10089 +PGTfRLYR;39716,53191 +BcGKIOYF;12849,1439 +UlUZMNqj;82550,16372 +knaRuOxp;9511,11211 +nTvJLJhZ;69278,38932 +gQmBQTcI;60278,34417 +cMChFojW;25971,24461 +KJNPhKCM;20559,35337 +alxqjOsZ;34567,30701 +ZywNKHpD;63526,44981 +hZDgHOel;19198,68045 +szaUOJCn;35956,30694 +MFxaHkHo;46786,38460 +DiqUqmHp;32867,13640 +jJfRYAFq;58430,52428 +MprJdbQq;62916,23758 +PyzjcguU;80729,15359 +vTtLaKJq;33466,48877 +PmPaPNPe;4946,26955 +qNQoMEXn;84167,46713 +oBKVFvHh;17341,18109 +RLkeftQR;12708,9507 +jfFzzYsf;79540,22912 +SOVNXIMF;82978,50275 +ljfLkMXL;59804,35609 +FYIMNxnG;16024,10110 +COYfKqWv;8444,19292 +LVNtHXdj;69295,46510 +FpmuQvFk;64720,77449 +xGlcpPlu;41216,21227 +mAeTwNBU;77263,83862 +naXFOCri;24309,53005 +tbqQPddZ;85090,21510 +tYqsuycP;47377,61469 +tpVryrRx;13659,48944 +HeEiAOXC;40420,6725 +uwTXZHmm;27277,30493 +TdbjRSzE;61598,10305 +poZzdBqG;19412,53453 +sRmxBvOg;25235,27727 +denzcLIl;70912,10299 +GzKVcNvS;74543,60956 +urtlNUbW;84025,27274 +BEZlvWKG;65719,21338 +KFwTxmbZ;59286,1017 +eMJgFPTL;28523,33676 +GPJMSspu;89529,2711 +TwPYvvuq;34149,75744 +goXxwSpU;19333,46788 +ndISIemK;33441,46376 +jElezaAX;30999,55424 +zSdimQmP;11799,71283 +TMeYepUV;10076,81685 +aZgseJtX;70428,50567 +AWKGDzMV;66893,5276 +dIRZeVrw;23004,9716 +WHayMMtx;53062,62382 +fhDRCnfo;5840,8512 +cnYobxWj;44886,5189 +YOoTnLbF;18072,12776 +ItEgRGIb;23229,15088 +RSNslZvk;31866,32730 +KuQQyyuQ;8073,37467 +XLxbpsDu;50510,1092 +sKJBUcrM;56975,48794 +OqBhPegC;33607,70527 +JiMaoHsD;40471,59473 +cifajdMj;75808,87939 +HqkRHlYZ;14681,29252 +jiaAmiMU;59031,54643 +ZxfdmEPC;81208,21213 +WokRBEmB;27645,30827 +QAIGKZJd;45783,22424 +PBIehoAE;46728,32773 +SfrZYEUK;22345,73390 +zcRSEadE;75524,2302 +XARTUQxO;51907,70664 +smyOPBkD;60743,10990 +ufBbkhMD;60762,84890 +gMLaWtMk;79828,46994 +QvOCuxcO;47299,36257 +TAIvMsAn;40875,76223 +BjgFhrYz;79124,73621 +vWjQxUOc;82116,40161 +cVJIxZwp;65151,16601 +qxGUaHcE;49475,49717 +cgrbsvYv;75292,43846 +jBGbsMet;50577,61385 +OYnSuKKb;86744,27509 +szVJtNJM;5479,18840 +ZIndWQLt;37975,39562 +HoqwneUZ;86543,49533 +qRNGjNeg;10653,59228 +oxVjdgne;55990,3762 +OaJXQZhs;76356,3917 +QOVDUMlm;32694,21014 +VePAUMLd;69391,19540 +toGsryyb;50759,12887 +iYYwrcFS;10765,82292 +GMRIGHjx;80698,52067 +rHbhJwyn;41385,53060 +TsoMshfo;53367,50792 +hhZstZvu;80434,78512 +bRkgViTu;19508,74135 +MujfiRaX;23566,4574 +gnnOXMvX;3592,82958 +VcVAyIch;74483,22077 +ziaNFpfp;55996,9052 +tOYKUeZf;20368,88790 +kdWjsMTU;23053,61445 +gjYjejXW;43393,49109 +bxtQVhZI;66387,69286 +rgiIcOBm;38033,52421 +bHsXXPKy;73420,25743 +EQQGxZli;67846,17479 +FyrEVjSw;29196,18075 +dOyUUVVl;22834,21072 +hBmnHYPe;9042,71314 +qsqZmDrY;20783,16935 +ODqqHHgd;31160,33755 +gXWTsxfD;36613,33408 +AkJtAPeU;87833,88338 +VuIyEuMM;65998,18936 +wiruZRAq;50122,88472 +eAVnhQQw;46082,63157 +OClCRomL;19353,43871 +UAOvPBFy;13047,30097 +rkGOYvnl;47787,4599 +Sffijrpj;6030,49025 +QmBHNXEg;6434,35051 +sPBQBrxh;17534,17784 +yyCvbXRg;71295,24916 +BWQZVGCt;67789,71664 +tzPxSFjN;15381,41967 +ApGApKqC;36507,11149 +luxpprti;48534,61428 +DTBOGsSG;56894,52684 +mxtqzFlS;33453,60103 +JwVrCwkm;65305,89760 +oDnYOweP;81956,15694 +peEWvfDJ;58765,75556 +SKguqdJU;42812,76173 +zrllNPwQ;86500,43394 +BiINPjrD;7613,68268 +ahvypMAj;29365,48714 +KfLboAqU;57331,42664 +xByThmEN;35634,88047 +hSRPYWci;2026,49579 +HWdRvdml;24692,20328 +aAhAOexh;73526,25530 +juIdBPGm;10929,26068 +GDuGUGFH;39020,65781 +bBPwfYrl;71880,58837 +VQcrSilr;73835,40688 +gFugFACU;66946,54031 +mcraHrBf;41074,33504 +jJBTHnOK;74129,79562 +SIfBmVoP;13250,42441 +Emzivckq;58707,89803 +tqZklIai;57899,72849 +kohngCEl;40184,35072 +wcEcWsqe;34148,63763 +kLwpVaQn;37811,31983 +iGrJdvEi;50003,16355 +zJXPpSLS;24032,5348 +vOrUeSYT;13498,33152 +GCuSxxWH;24639,6134 +qTnRyNBM;14502,5099 +suMyoBPZ;46142,16657 +abdoQlSt;76486,82901 +etbCUGEM;14813,8601 +CXJkVnSy;26043,25996 +MsEAAtLW;76520,19799 +kuMYmbLk;50970,68243 +SpPOLdtx;74652,52238 +GyrdlJBq;47972,67220 +FGnooswH;73563,72791 +KMjfjawm;88592,41270 +bPMHquuL;50539,71403 +WXpBtNDe;89671,81561 +FhBWrqbk;65172,56566 +ztlsZSjd;4726,67737 +gBzlQDfg;70186,8073 +mTyKWTLq;78022,42226 +DiGrYpwm;57122,29436 +LelKhDam;20142,76949 +FVKDmBAA;83070,83345 +WDFFoQnB;49345,1354 +KfaRatvu;38037,70775 +NEmjTXdi;36079,56998 +gSNQRMDk;15047,21398 +INiUWFUx;40321,26041 +QeNNMKSA;44143,24563 +GgFddVhV;64666,31237 +eioNIpgc;12730,28923 +BxkCrYpb;4315,64011 +dTXQzwAi;46811,38434 +LDJUSWpj;50481,30049 +dBMPMZNa;29293,50005 +QvoeXbIh;20530,24380 +vvZmnSMD;26805,45656 +AUNVcbVF;25558,75678 +XJrnxbGX;36932,39149 +cSQeQbkS;23949,66357 +RUVVJHlG;37477,13750 +uUseXDIh;64348,31304 +CLFWaMtT;50325,55354 +ZnWPLyex;76460,12717 +oufchKJP;53272,43264 +iwtlJJbl;2262,50481 +LnxfXyEJ;30333,75245 +ppHQLPCU;86722,13508 +QPueQrvQ;55089,79284 +TwuAOBoQ;43002,33104 +DyUdXNQm;4447,40815 +AUzSAEwi;53369,50624 +mOollaMO;44722,37180 +wkoKaYoL;19310,38628 +dxriGUay;13461,48287 +QpNxvfRl;50920,21287 +kkJlZqpy;17513,16595 +vAeVKEGn;63145,31712 +BrrXCNce;27017,54620 +OGUxWXcj;84324,5522 +AAyYlkXX;35204,5704 +UIsiYJWx;68329,44388 +vqMlZqQt;43531,22919 +WMpaYwTX;47720,41618 +anRmbkDx;31461,67238 +BTLlRmkL;7662,14338 +oPmCGxyo;14733,53318 +QFUrISfo;79858,6234 +rHcvUQbW;61036,4017 +cONdXukD;7797,88140 +qPIdGztJ;42139,3841 +rZxsyRSA;76991,87816 +QBgWnviy;58863,89175 +JenqknGC;12909,88376 +EXwQHTse;40044,21214 +qtoUbJsU;11975,7852 +AvksBMZB;74732,87330 +CkGWauDX;29225,28657 +GlrgkdDI;40839,13022 +wozqxWmk;80218,15325 +FLZJERhY;69325,60912 +iPWzkCXi;75020,89331 +RPxnzTFK;8220,54192 +MVANtzcj;35606,30575 +qqHpKYvN;57509,38358 +IEAIwsIB;25823,84164 +joiIfHbx;7981,15835 +nHOgNVMt;15533,42832 +HBuQgAMF;6325,9795 +tCTkSrED;33203,20321 +SkauVpRM;87554,15393 +BXWpfXNv;88915,87319 +BoLzmolF;70611,23071 +zdpSrFAI;69268,49441 +zynzcrfE;2308,35166 +AMciXAxr;11790,59281 +EfoKsBvD;73779,8495 +KezfmViA;76016,61050 +rXZLQgsn;53501,12474 +UmMzmzFj;4967,26267 +cgGjuzia;84224,42476 +mebjBBrk;58620,55662 +SptuzAnn;19417,45325 +ZuRMjRur;25136,1766 +WPagHKys;4129,13248 +TfFKAcgj;46392,85799 +gKNDigbu;70175,73796 +VELPBZWA;65816,56427 +OwfvRhmC;87956,31984 +YMsNoRJs;59883,24759 +YUwLaWOD;60021,47321 +ivAnCpFK;42435,11957 +VyiCYFtO;33145,8375 +UKbpYcrv;30121,68768 +zQWRRqLa;66963,85026 +igeTLHDL;33011,25559 +NfmJXNXf;86607,26540 +YDskNNhZ;52137,10150 +RyLZoeAM;12111,37068 +dHNuhLhp;26214,63102 +ShPaTHzo;89762,29449 +dbNsEcts;56827,48354 +iOXmdJYG;8899,59310 +nuqLznee;58013,71648 +TGMmDUfk;24051,87046 +XMAyGHGz;66556,9521 +YlJswkta;55783,45046 +DCEWgonf;61571,33027 +JauYIRiV;51388,44173 +sjRmYwKo;53193,13983 +bbkHjipk;40145,85550 +nwTlwnbH;41913,51986 +eLlBkvph;30618,27657 +wcIllwQB;16080,87479 +HBncBKxd;39595,41678 +YBTggCOr;89916,25333 +MBCQKbhO;8743,66563 +MgFZGUaD;79158,74491 +dhpJkhNm;28095,13782 +msvJwqFw;15795,42791 +evFugNjB;38764,87754 +tFSODFlv;34348,88373 +NBxpRfTM;14806,81235 +ssLINmBv;16886,9379 +VFVpoDXn;61547,57006 +qsojPiQT;48510,42913 +xUOoBoSe;27298,67956 +fRZVexsa;67570,60997 +ODgRiPTs;37238,83033 +WbGNArzW;79759,35798 +ZkUoTjBc;16968,23086 +BdmUWrMb;13299,25978 +xoDKfXmu;77626,14775 +QDdPHGJJ;21846,60782 +HmVMLdJL;44968,12207 +XUbtgHgV;55873,2271 +KfDAXZAY;65889,8533 +mlIKsAkN;49795,72969 +ceuFkqKt;44342,1997 +zfqqhVKn;62418,56032 +LZdxhRwk;84015,39728 +yGnVqUAK;67333,63878 +fpWmdhAS;29957,1199 +dfbkRESC;29155,50313 +PQNNKwui;47473,26771 +FEbDftFZ;75865,63935 +MSLqlyFb;5847,75451 +hQlecVmL;51186,70371 +laGSVrsO;37204,8741 +RrdcswjU;50473,58473 +ptnZpBrV;27884,24772 +xVUDhtxs;5565,50365 +JBHKobDH;46617,53280 +SbimDtXb;20365,65887 +uzmxsNLI;6062,9997 +ddzzXvKG;52458,69157 +FpAuXJwH;31430,1314 +IvGtTtUP;57797,86196 +rLWDPMzV;27892,26455 +KjatpKro;69883,13297 +PgywjDWR;14407,33772 +oegEjXLu;35663,83231 +giEqnGbW;17699,84591 +oPydJrZb;53791,60697 +iUjVbPKw;68545,4509 +nQlEFcvp;60508,89298 +XOLEWxRr;66870,32222 +lTpqGyzO;2195,75961 +CBwUNgWb;17431,52469 +IREQnsHG;1802,78651 +UlEKeKFa;54962,89937 +bUWSvWYj;74922,40915 +CiCbyPut;46906,82542 +ogKRpIEv;13811,3746 +ihAlvCtn;65643,42708 +JgibesdY;78284,82970 +dspVIFIw;41770,70167 +jbxGVdsR;72019,18320 +uRUTNMRk;14584,86143 +eJnOENcI;59326,38610 +nWdfiJOM;19718,40421 +eGOlxrLQ;14571,55028 +NcFbjXfF;45200,57092 +xhTrldlp;87676,62700 +mflScQqC;57696,54765 +tKPXDjdm;46892,34939 +dggLFUNR;11624,47285 +OJEVUDSN;62312,5960 +Gbragiik;4107,55604 +MObpAtPb;46083,87217 +ZhRUgFvt;2511,46782 +QozaIaHF;18082,87785 +LofeLVXY;6323,53743 +ksIfwbrD;51063,19969 +YdqFTIKc;35855,51154 +rFZurMHc;54409,88634 +FcDsUDjF;77212,89209 +xmMVeDzK;52620,54103 +ODINrUhQ;71092,80096 +XCHiMzLT;29983,38935 +Xnwdgajp;60876,8721 +gFTNcIQP;71829,47369 +LUYyfpXD;49110,34951 +rgoYUquP;15707,82243 +ZqafHDyO;82289,27872 +gnFMPKRk;88522,62793 +gUYVgJaT;14000,24893 +wmtunwAp;69401,60330 +fTEgOFkw;49998,14575 +AxwNZolG;52347,43474 +lhVAERlS;55192,29521 +OBAHkUPY;86992,72122 +NKSSefuu;10597,80976 +QFrjXNSC;9907,39963 +TQsCFhYl;66086,3097 +ZVqtaQpH;73209,78346 +MIuegGff;37161,67348 +xeQCxXWC;71277,49616 +nbVXomLX;37689,72958 +AgVMoeRg;31505,53769 +mHWcEChg;56255,5876 +jhsUzpVV;41379,47039 +dzGxsJtB;11847,7655 +wHNlbDph;46602,2266 +kWEXmILD;47780,50783 +uvUNxTjs;24405,61769 +AqwFBjfg;21998,23276 +AJxKkaeq;39835,20651 +jmArrWaB;28271,43186 +WOsywoia;27951,12675 +uAYxibFg;42829,64937 +RpMUpdlx;86784,73361 +ObzwNdoP;10320,69063 +vGhccFqY;58878,9332 +fjUaOfag;68399,16687 +NbImlTfS;74946,38352 +hIvIacQX;1204,62018 +wmXqRUaR;8679,43853 +MVrInpey;51347,30397 +PklggEhC;16468,89779 +fiiwyKzF;50235,83931 +NVLTFvsR;45597,18987 +BTVGbRSQ;62269,25714 +dpwJJxuR;78396,60042 +krcsTVdD;58331,7245 +TMDgdBYH;31526,75384 +ahdbqDdu;31556,34477 +KjUtUqTV;30714,64215 +NGtUBToR;69751,7083 +OxpoSnXi;79569,43390 +rSxTRUcl;67666,70655 +AntUlDKS;9715,80317 +BiTqVard;24022,81017 +tPReGJwi;15754,63733 +WLQkotjJ;18001,24437 +TXivxKOb;51045,2252 +lCZWqnMn;50404,55360 +cYPUrWCD;11403,89315 +IZIywkVp;67186,70005 +xqTYpTub;84042,33595 +EWKtuRoL;22380,12898 +crdKKfmi;25730,30781 +BhsaAkSE;25531,65027 +eqHnXZdb;34006,13640 +pAZJzmKQ;35778,87840 +EgxferrT;19618,75658 +XeialqPV;75321,10747 +aecgLwvi;5001,47116 +LDAXRsxy;59141,12605 +RuiRaNdy;87912,17602 +KxpkHKGs;30128,16262 +EsYQeVXo;40909,24087 +rirVYiRH;81045,15903 +EFdoZuae;55090,5584 +VwunWaBJ;60699,52570 +eODMAQpb;19768,16185 +EoNNrdcQ;32468,1034 +xEBWuTJJ;29702,38465 +XGyQhLTM;54123,8376 +TfeRubVo;43201,8746 +zWDvOYlE;5042,77105 +JIcXeGSq;57128,42246 +ZiNgRISt;81194,33214 +FozKPRwy;60662,26160 +dMyrqdrj;55266,29478 +usvRDRwY;61126,24798 +NAFUGVue;22902,89895 +ZWgCaCKF;5158,83444 +lvFJprny;83095,12279 +vEwbLnYI;72908,21042 +KRGsoCQT;26685,21756 +XTXbWfAb;47049,71704 +qvBukipE;22575,85466 +QJlpqLjE;35104,17115 +DWPOXfnN;59226,8416 +kSXZAugc;77345,21723 +MHRKpYBX;17136,59138 +rdwtxRFw;32140,68166 +qVYmgJYn;36208,61149 +NrtqQyht;63054,74183 +rdyLLBkJ;51755,75581 +ZBMSkGGo;3911,56468 +cChasfLR;23905,59154 +MZKqhbue;81758,83364 +OlpHqVnZ;22500,54904 +PJHnveEi;1129,23988 +PybCswBU;72280,61733 +TUOwfwEm;89184,59200 +OpBAjlnH;71089,9071 +maxqJeBl;48795,61550 +vnTIanBC;76220,62647 +SMuNnQJX;52122,79661 +deySSAFC;37158,41525 +zbpaRKYA;89884,19011 +agoKNwzP;89520,57711 +sriGrrIw;72823,86140 +xoPsmgDZ;44758,54302 +NEdzmYnW;73572,20550 +SXcLnjqx;36029,43267 +dNtmjWpl;51797,2058 +WvjzSdIP;86759,84150 +xlhBFQjq;22894,14644 +eljYYsHL;51114,8741 +rDMgQrHd;29807,79455 +cNkPSJgr;51368,20413 +RjTGHBgt;12567,67673 +IBHAvMHQ;28729,40444 +cyuxUYsk;41156,47200 +xOrXYqyy;86059,78262 +LVcYVHZP;78647,72704 +mXDVPNcY;75431,61290 +tDfpNWkO;13385,12850 +zXBicJqC;82661,26716 +tzzKUmoq;41097,47997 +XOXhinLl;69214,66047 +lRULYQDs;51513,35176 +zCdIKzTX;65556,69993 +eUkSRNkJ;28969,66916 +VkULomlj;65946,63605 +POAmIfXD;84373,35588 +fEiYiOWO;59498,20059 +PYxPRAvJ;7709,15935 +AfkVVMPP;5234,3494 +gZjfZcxm;36104,66339 +dQKIbGya;33306,35735 +kmnWVzOj;53419,57494 +ykrFsmdH;69991,87105 +uprDXLMT;62991,82533 +MfZedeeA;62223,22390 +MTVBVbQG;46401,53191 +iKHpnnYZ;1347,86005 +nBMtUZER;25960,36069 +meiHIFEt;82926,56862 +DkoWZdqB;28275,58945 +CTNPhIaF;3942,19954 +UZjaAdTP;77901,35371 +eNUtNCop;64311,33866 +TweToKrA;30738,50557 +GNOqIvhj;58471,89026 +GonbfVPa;73326,5131 +cWZPAZSg;47972,76500 +nGgeMWdx;83802,45256 +udaXLUca;24640,49230 +QkWSBQSV;1592,61218 +FNbCdyGr;87762,33616 +IaKsknGz;58446,28172 +FigfBKev;74172,72116 +tKhxiZfB;38609,1917 +mlHtMsDE;54928,72737 +uBSXXMYx;89493,15253 +wxHrgZmR;38511,57495 +iNUZYron;35140,33185 +yYTHYQZv;18775,8960 +AJgVYiDr;26317,65046 +pySdrjLQ;43753,50415 +JCMMbllf;41920,13889 +pxOfUdJQ;62230,70380 +jsJECLBw;6628,68176 +qCAlgXNk;84547,35945 +TdIDIjIZ;67990,36510 +UCHUToqI;60910,33370 +jgZFFqEd;1478,35912 +BiRHkyxo;62881,33747 +ZAehNgFu;83499,62621 +WXZGGUwz;26386,28338 +MMhKIGTn;8299,33761 +LJSWnVCh;19664,44562 +aNOwfJxV;24588,84161 +eHkOYkVn;10760,61805 +pFVNMbwP;32426,72227 +YqOSCBOA;75136,74673 +EOBrINKr;18696,52460 +KphuSwsf;64244,75777 +ILRZstnQ;67657,41884 +ORFDlcgU;14846,13322 +yxcJRWLq;66067,75159 +FFsrKiFB;67862,19727 +wLrtqrvy;49028,76141 +WrqpqTLa;11547,30806 +iKBkrSLq;82563,13375 +kKvcbwJQ;3068,26182 +fRnGZrAr;54080,27444 +WgnannUQ;37147,66013 +TLzKAhbq;22642,47919 +ZuwLzCnr;40023,51218 +vFGrETcA;57283,19243 +KCqnoWIV;9932,51027 +SZTAFKwQ;57487,26630 +VkOnLkcY;49015,86789 +vPnaLKvq;24546,61720 +BaMqRrHC;50468,32204 +rZgavmMf;19270,60000 +IfQoxvqZ;32360,87519 +iNyZOLHE;13746,88030 +qfPiNnwv;27152,86525 +rIMZRBhS;75561,7519 +qNPYaUAa;24041,50690 +OXkfUByb;69838,51968 +xHMzwSqJ;32246,86186 +NtWpWpOZ;14235,36170 +HYAAgxEi;40376,80722 +jQnwvczv;3045,85002 +nGccjrBo;41791,84545 +qyRkBUWy;28428,2339 +tKUBJBHI;83584,38801 +ajYPYrLt;23484,9787 +cCTWBDVQ;51482,62533 +yaPiZrcx;86231,7341 +QAUIekvz;86598,35815 +kuNvjFuS;15646,36364 +zFxCmdrl;47308,63383 +LXFezIMm;60808,70962 +lHvhKZME;18761,21589 +zupBMloB;36556,84362 +KaBMyvuG;6398,68754 +SfpPYvbo;20160,51332 +fwvodNiG;38666,83773 +VPKcZVFQ;28919,46327 +BiTCkhsl;75302,39867 +QtIfJdtY;32418,12162 +vgnMmSIM;51335,21063 +XTjNemuK;55566,59868 +cNRdxvBg;39137,29646 +WSfrDPrm;4416,57325 +hesaCGDy;20313,53062 +UCuptRRg;26038,71486 +HFUvPiIv;76820,78286 +pJXOTGJF;34981,62291 +jEGtxUJd;69092,8688 +ETgQgHmq;31322,41670 +kmkmGsaN;76155,71078 +LJvjusQo;26696,18798 +jXiUSLPQ;80470,85530 +KFUjvDEh;54785,75805 +weiPCjte;2438,27377 +qXszqMGa;85844,11366 +AEoixEjo;68707,5268 +EWBdytfY;48001,38814 +rJByegNh;69678,35815 +ufVAqUMT;9633,79432 +Ggefueob;4529,7438 +GsLkdlMq;22818,72100 +UhunwyOu;7502,55972 +JcWoPNZa;59133,5726 +AtWSEcZm;87612,27718 +vKPVmnyV;27823,63995 +mSfznIeB;48486,53515 +iVJuPdrn;35294,65080 +MFXywpnb;74459,53839 +HpmRydSI;68057,77912 +eccJQPSL;17791,41586 +fLldRyru;26260,5226 +SSMpymdC;18099,83876 +qPbLWoAz;82281,24444 +iJXpbjDe;82737,46575 +egXswbtp;29164,28031 +uaEEyZlH;9272,31772 +iJgiDBmi;27212,43648 +DCvNytlK;36636,70350 +JURacNRv;85540,68857 +pKfffPRQ;27579,9448 +zPhSphBK;21923,49278 +ONgbYRiH;33833,76944 +hiIpFcoJ;58856,58976 +zxLoJNFY;17396,65350 +CbSlUwiG;65917,27718 +oilBRbCl;85633,2134 +rdffRNco;53834,2472 +vhZEBYvl;39301,33218 +hQaGaDrd;59065,29189 +toEMEkhV;70531,9585 +lfBhqmDs;57611,63912 +NJurrHIs;79291,30089 +XmXFigQh;28505,53055 +FDAHnHHe;30134,79525 +KhDaoCnP;61240,46531 +oPPjnjMn;70305,60839 +FMYqnKuH;77037,16479 +iEYilurc;50294,14753 +knfFAsJn;10053,36912 +zCKTQWCM;68424,52725 +oHWwCBjQ;64208,53667 +GYSXvmVe;27603,68885 +CMCWeaEN;75255,60771 +zcAgXAdN;86708,35381 +XpFsdZVh;61110,81742 +KVotwILb;67033,40886 +wdIKqzMp;44539,28559 +gMSGhRjt;85140,47989 +YcHCrJFc;69254,54813 +iFrftCTw;19953,19388 +qRPCoIVI;74504,30384 +fQJBxMoI;10942,35409 +zciRjSwl;24121,65183 +zGKWizQs;8412,18821 +BZkociSL;5063,3100 +tOoxUrys;3855,66034 +TOwJRpUp;31178,6769 +VHAiWwPy;19257,38105 +DGNHBMsD;22521,84205 +SVkjnCSq;6868,83122 +vXVCVYAi;27528,6838 +vuGjYGRH;61287,17496 +tyRgPErt;63988,66268 +hjxYlveO;73000,57966 +EnXTkuRF;27902,62027 +soByvbcJ;45740,30056 +dfKIUiKv;42022,12687 +tQeCqxsQ;75935,89899 +jHIEVdbI;70724,41489 +AkBaAnSW;45031,22522 +KUPYJUTD;72211,48405 +BTfMNDnU;75839,40806 +QNVdFgFL;28940,63306 +pJQsUZEM;31285,86028 +vbRCqAcW;29049,46182 +dhURCSNN;55312,50298 +mtFpJzwK;64336,30511 +eNLqLigQ;85435,70307 +acvpsigm;89455,38754 +ZKmHjuFr;44799,43955 +QeMXBecC;56387,29406 +ydWDBaGS;17359,1174 +xhWVENtl;20602,67784 +crnywqst;50901,3203 +ZUOjBmhw;52421,89340 +ZPmTAqSg;66564,22960 +eddbYXmO;38103,18576 +wrmczjzj;75613,25552 +zRWceagH;12454,29115 +UhoJLQmj;5780,33112 +jShtbWtA;74899,51108 +tHEnlVnP;6824,65459 +xyzTmWRc;75590,46800 +EloBmDZU;50672,45442 +OlmnXtih;42176,36365 +OzOmgSCv;81514,30921 +LoKMBFhx;23202,22880 +MQuDlyuX;79704,89267 +KFDBbWXA;57654,34153 +pRrsSUcZ;38816,13039 +RAKWZqfn;57106,87392 +rzUkinOq;51732,80625 +HFBOIhCo;47427,27895 +agBKraGK;10396,10561 +PXdjXkHq;58345,88461 +yXosCgQb;17640,47264 +YtPZHeJP;43784,86891 +cdKYLMlF;44104,46887 +BqvparoL;62688,67776 +fjXyNZSd;14913,36443 +ueWkFYZR;30948,6607 +UgIahOsz;41954,77532 +rECiEktK;54695,72568 +oCwYwupJ;11813,69340 +dAexPcFL;6113,9426 +EbhrEyxg;82092,39241 +UjzRTQmE;14596,41306 +tIOFElNV;40753,43086 +wnSxFRnM;9062,39619 +LlEuNQXQ;23617,80118 +iIGcqYUb;15273,16576 +aYMTEixS;40850,32755 +hLpILRji;51392,35390 +wqMcSulw;36550,86959 +hOnxOamp;69221,76955 +vXoBWjJS;88380,8469 +OHksbGxl;53131,16493 +TgNefoUp;83393,22802 +wQlRTgGp;11139,5519 +nLKBkBfP;83835,85839 +zUtMkiIe;11641,68116 +BQCjxhJF;52220,73745 +nCFRWumU;55700,11422 +VPsHOjzv;7538,81764 +CjCOpxHA;28431,53335 +RWQMCIqc;44772,21993 +UudAkMcr;64166,45320 +KIcuvouI;23587,21317 +vPluHAFa;53932,8650 +DdOrrsBS;42162,39969 +KZZHRKDx;86610,39678 +oEzovsyS;61890,41685 +fovYTIap;45513,31049 +qbcPzcrm;48718,57348 +LwClwjQb;16346,54386 +gScxvCjc;1424,18339 +RALkYGsz;83374,78384 +vAJVGZTb;14368,59056 +oNDsCbbM;33946,48186 +HTdCdBVM;88572,62521 +aXVZPxHA;59170,62154 +bNUjeljL;60080,15346 +nunjAJDb;50805,75674 +nsBgeeGC;88872,40438 +PIrnrHqm;37742,51451 +ZPydioFe;46437,56987 +oMmMsQPY;70054,37003 +FwySfhsb;71454,74649 +wYhfBioM;77147,66635 +evmCgzgQ;36596,26400 +yQsmNTwx;30090,4137 +fGgWJytz;85022,73779 +SZTbFiFX;54983,29940 +NqGVlWPd;59810,57664 +oYeYJtNy;76524,55960 +orJfDJdw;60468,21964 +IBDiCRyr;27011,23245 +YojXKptC;3868,50910 +QqBrDEPx;58816,61473 +PCqOIMZE;86664,80600 +XkAvCkcb;26666,62216 +cSMKIVgt;84377,30472 +ZtFAnzEO;85090,73540 +CvlXxTow;75993,66841 +OBNImfkg;77111,21774 +HxgIsNbC;47788,63902 +WcfzNyAJ;22641,44894 +kbqijYNh;82307,46111 +HSFJknWR;76085,52580 +JmjgOlVC;41691,26844 +bIfIjtft;11018,32782 +vSBDcjfg;55969,53257 +vsOyFrmg;39662,56652 +IvWCTqYk;39808,74609 +DcUdfCHI;40464,24813 +GQBafqtk;53810,6155 +olQKcBOS;79106,28168 +LoIWdjgt;17264,57856 +yiFzJrWK;73354,45333 +rNzamgPk;85001,70193 +IQhMLTxU;37177,86275 +DgAbfMhG;51022,27615 +jbCXizYo;34087,40622 +DNjVYEML;37855,25338 +NulCFqln;87442,89414 +wIYWEKLC;10878,78658 +WlEQGamB;14558,8641 +zIzzQDLw;72264,5988 +EQWZDoDK;65426,36391 +JMhaYcAA;25754,10177 +pYzEHpkc;16750,62255 +TjsIzwtA;13575,61374 +XfuPGMhP;18749,34059 +zEXNXcSs;16099,63389 +LThhTriB;15694,61165 +DgsaEWaW;59296,77856 +eDpcrCIS;56315,62048 +SfmvteHb;83175,58642 +SHIqyTOX;54916,49465 +YALiAhkc;75819,67759 +scdriJvt;9745,29389 +eTIKBVRX;13508,20799 +bZnpjjCA;61393,25887 +ReaLTjuf;81617,58576 +VOZEhTTb;41175,58660 +qXhObmNE;64244,51978 +znRVSWbW;17746,73577 +vTtWgwnK;63447,88943 +ZGcNYpcJ;37232,9611 +XCmtTrQs;6176,57830 +NLPpNpNw;69265,74495 +KjhIblJt;29142,50259 +VfXdJChA;46024,20568 +opARlVrR;20359,80505 +IDFXhSmg;20031,70054 +DJzVodgy;5430,79016 +GJZcLyGd;21377,20082 +yWvwrWik;48874,32328 +PPmugCBc;17083,59153 +kGisQEXc;11550,89413 +JVhVofDw;73448,26220 +qIveQzzw;75144,48681 +ORBRCbwq;54962,66234 +jeqcMiqR;22538,86229 +vBUTuppL;25646,45991 +iZEexhgi;29585,40923 +xXaQliYP;58058,17803 +VfrPmURB;36329,55653 +HNrizSnN;77127,53497 +ZLLSYtND;13562,38552 +UNsGjeIl;53443,86521 +pVbkBwVK;2754,67035 +snVdmfEB;32600,69861 +VGtSGyLf;6146,66766 +lgrkYdKv;26456,67689 +VldOKbUe;16739,63928 +DBCalfii;20090,34754 +ikNLfGqD;10532,52109 +USdvOLnf;51283,83198 +LKgVnXZw;43223,28607 +hrcTJsNm;56594,42137 +JQsZwQnw;77841,88960 +Raacjgnz;44166,49959 +HoWNpVHm;7660,35286 +CubdpriL;44903,41620 +ctlwhvXr;21307,38316 +vkvhGjhQ;42890,55772 +IaPKlTbo;85781,60453 +LFxuMcnH;30667,17773 +GZmjswPf;60748,68020 +RFuJnDJE;63044,14467 +vwKPkdAv;64779,16574 +eztNPhwa;17057,79948 +ZlZpMpDd;19694,81290 +pRIUDiUK;45537,44011 +vUYtzHUF;32764,66443 +bUabBKmL;21062,85834 +qqZPoaap;5475,50220 +SUIayglo;33657,6957 +nuLIHAdS;8144,32953 +kldzWprZ;83177,35965 +VrVyOuZP;61732,87222 +kEgjGiJE;55096,79372 +njSqvvLe;46755,37282 +YRcHlpkw;86797,72393 +vQUtgbym;87870,70214 +SwKsAMXi;71962,67520 +agniEDPW;13658,1115 +kRCZEXhq;39406,4310 +AcijqnaM;76090,12479 +CncCCXbP;73423,38622 +vnMnFldX;25232,53171 +AKXqNFxd;80609,82214 +pZeEYiGF;63185,14116 +szIKVlPa;20351,5025 +mOPcyvlI;54001,45669 +bsZBTvSq;7982,82724 +lkKlNXdy;78492,4445 +PdENbuqF;28182,66544 +ItIkmLva;61302,85659 +ufjHNjVI;52864,83306 +QCVXfske;42969,77772 +WbQocFiP;59281,24490 +urufbkGd;64575,76763 +skfTUTYk;39339,16750 +ARLKSRzF;15100,45519 +uUbElxAY;61344,71346 +qPMAZSvP;53548,47111 +IXnrjxgd;45497,7412 +ZAdPSqAN;6254,62969 +AQDnFlJF;52805,48781 +wbUYXNuJ;85671,58226 +SSZJmlqU;25084,9004 +ZDMKDDyy;6270,54677 +EWUScrOM;18346,84112 +UNXCSMji;57668,59658 +vrbqptpe;15101,69350 +zKtJmksD;15781,49818 +drAMNKDD;49072,13913 +XKAPktNJ;61484,8024 +ZkKLYcJd;50643,70199 +THirNIGx;12825,21095 +czeCNwwF;50967,51282 +QCmvNeiP;77914,28748 +tMTevGnb;74505,89294 +JRUFVLeG;42616,3148 +LhujXjOM;56654,71141 +HDGVXfhv;7818,37798 +avPLbhIc;82679,42493 +khnuJNuh;18347,38984 +TtXZWSbH;51580,85048 +tIjNGRuR;81604,17417 +WEGFVmvG;52918,37864 +evUVPSnn;75112,17469 +KEvllLBI;6468,55551 +gCuSBSqm;23646,35052 +unxVhArX;7023,4398 +oJyjOiMZ;65322,72163 +ssEEnBPg;16210,86452 +DOBkMARt;18228,37297 +ebSyfJOP;13290,17582 +JXonNaeN;45680,87282 +DxOxHEVP;43902,63425 +gXFhLsEO;63807,61929 +nzcbwnHl;6023,13403 +lFgaKojc;12430,83562 +KFCtaJfb;40166,76228 +AFZXnGbZ;79527,48031 +iMoUWvhl;42143,71393 +mfMVZPas;27462,82717 +fFmrZCAs;22897,73644 +whKloJHc;49396,15276 +YjambwsF;57183,79359 +QFQNxRJw;62700,59585 +iZzkZqgP;1059,89841 +sqPeztKo;3341,3453 +mGFeEFbV;13865,81372 +jjeJWrUo;38107,87228 +bLlZujjb;65085,10454 +DJgJErKy;31133,61229 +QjdhdmTJ;7799,17448 +wSmQukqz;85290,12671 +QBvRRfqp;29680,74746 +pdiLkxcM;26226,72667 +nPllwwvP;9033,30820 +WmHDPIlb;65295,6923 +uoQNHkeU;50049,64503 +NEMscaNp;6186,8968 +dGUaOYBR;15262,77825 +PjHUfyGA;29314,11091 +TmBpKJOd;56523,8086 +iUnYDhel;3070,51594 +rkezdEnN;8342,45770 +hKRdUILV;57723,19034 +UdEJvvTJ;69343,53324 +IwAZIzUf;75380,69648 +JgqUOleh;54804,55440 +oSRJSkrh;39572,14515 +cVRgOrjK;37469,26259 +JTvrwjzw;52378,79078 +eVjhQCHw;46207,66893 +OOlcQBLt;5598,23576 +vPvLOeek;39523,27071 +OyHGgxGH;72920,45174 +EMKZFFRS;71915,36784 +HMOvdIVv;49133,2156 +LegLddmK;35137,54965 +VXHrUpsg;87636,22207 +DeCMGTVF;13464,77078 +TlrAUQDj;78270,48747 +DcjkaIig;13661,87314 +svUGZPGt;5601,32795 +FlGfVKMs;50441,77176 +yPoPmqFI;20772,79987 +fRcPDIgz;73169,11506 +oJUvJMaO;18044,15205 +NwRdIjPl;14679,33213 +eieNHTMS;33508,28807 +HWNLQJby;38705,4254 +EKXzaVcy;37478,80158 +oiDZqgdd;9669,59577 +XFlMaSgh;86247,22464 +xvuqupBM;69516,39982 +HsvuCQEY;68201,21436 +HAKfCisN;4414,69215 +lMUThoBe;41681,57221 +NuCqphfX;47119,9663 +EjHpSSVf;53586,53066 +LaKbzSrQ;28328,64803 +PTHGOrjj;80399,19740 +uhLxCnNf;5383,86008 +LwuLgbRd;82459,87542 +NmohhCLt;55102,79427 +MTwsBYJC;62315,57700 +GawAqWJF;73765,62142 +wQNgeBbt;5192,38087 +hlVbctqY;73416,67737 +YJWWEWCE;40401,18343 +NLaQHAKN;65313,32382 +nWXIiCqL;36627,48999 +HxMGcWUX;88951,28432 +qSpAYmaB;67546,66951 +NKSUCuEP;27831,75485 +CBKUfmMi;88888,50224 +yJoKLwXZ;66444,48851 +UPNNsUxe;26725,19250 +ENhzUZeh;19759,23351 +LfwerFrJ;15198,52287 +SSWvbAAL;71519,80464 +UlgUgOtf;27937,47648 +DPXqCsNM;20092,25876 +WbKpPDYV;50079,43193 +fnrJGgUl;51437,65582 +elswopqL;29377,5966 +bvGViOXh;8394,85833 +QbdKDRlP;32161,85459 +tSrJkKNi;32023,5922 +WBKTRiUQ;3601,37085 +CeDGbhjr;77567,15735 +CLoXwZgs;69167,45124 +ZJqXhQod;69144,58554 +BoaEgDGj;12548,66436 +JXwmjyXK;24407,24935 +gRWXsRqq;11196,63462 +UECHgyOS;12834,26841 +VkFmbbxW;70074,14413 +bMavxdrh;23114,69110 +WNzgmZXC;28162,6509 +flwtMmKW;22420,88677 +tupIoCLM;40706,33665 +vGxqtYUy;17603,17762 +nxgmiclj;1445,78488 +NKrqlEwb;80892,48281 +wHLFqyjk;89101,17197 +vqMFvGhc;18589,36299 +MDQBSZVw;42593,40214 +pxbgfEoC;52605,44850 +dCehjehD;9784,39216 +gsRhmEjZ;12528,34774 +QVerRyCq;27106,89297 +kbXYmnoC;71860,48832 +HwzcDaYv;52123,22943 +AIHbKkxy;65626,43177 +QpZDSCxe;50765,45070 +elcGmiqi;89402,83943 +wnQuVCPj;86432,18852 +gJbuHyxf;40977,23871 +bpDkwQkM;5127,55989 +dzrPiIDK;30548,18336 +OvyzojGj;70394,75186 +fGtkhzHy;29005,12936 +BnxJQVrX;67019,13686 +HyTaMgtz;79856,75256 +vjggLYLS;34917,10788 +EZjwjWjn;76756,27044 +nPiltbEg;84124,11256 +URxhdYPW;29766,67689 +NYSNLORO;52813,67154 +EmBDpggG;69346,79106 +bQCbDYIu;56044,18915 +enAgUWzr;68266,38531 +LJZWDBBi;77016,74592 +OetVmAlM;81272,5308 +reFyVCne;10209,21093 +EgQszrJZ;84295,22353 +FPDvtrkb;37317,84542 +ueoVVnYJ;51686,69873 +xZYptHXp;43202,11376 +qWaFLIny;75537,9377 +xzHUlNxO;71784,76746 +EByKnZII;48311,63275 +dxnsxObM;14728,44883 +lKkUPVpM;55301,32074 +frOvooav;81123,31513 +wokECRfA;35100,85038 +OEhrxPUk;76380,69452 +rWvmxNSW;22145,20951 +rbBEDPGm;64895,24245 +PoQWjSwM;49973,48637 +YprBvLnY;33874,85667 +ENoptFeJ;70505,80343 +oJdRbOUp;66511,61549 +vmEGFleZ;57874,77505 +NQUcQsRR;88683,49997 +YdGDmNYT;64960,48278 +igPIZNCh;11750,28273 +WJUuCXyI;35371,83228 +GfoHHnbq;40041,79598 +FrTLacPM;32810,65344 +JRnSCxtQ;2120,23176 +jfQtItDy;29090,61816 +RWWLSGdS;73558,21067 +iMLxUqoB;81154,12807 +UAVXAkNE;53727,58525 +vLkXSIhL;12792,45893 +VIBNMdub;7872,81384 +axKcqDJS;61653,63545 +pWQNbDWI;21155,58994 +wjGwHWGv;86159,47198 +mKuusLBr;49025,66456 +khknXCMA;27524,1673 +snUljgfX;6622,57647 +LLPjlUKd;41834,53140 +MfEuYsOl;18537,15358 +fdcEAlJL;44364,31738 +UXLLywOk;1173,42615 +gBEHBzgn;72167,52616 +hdjJjIVH;63307,70851 +pgqayHAc;6416,21949 +RBNSiVVD;1968,29042 +PhmywZwN;59278,1818 +nyvjQVQH;81902,7033 +NPBhKhmR;41581,21961 +YvFiRlih;65228,75073 +GIetXhjV;86875,63413 +PfAxNvgs;75697,84568 +mzdaNUdK;25189,7418 +FJBGFJYx;74623,63056 +ttiMehTr;50250,42806 +hJDzmtXK;15905,61367 +TvAEdHFY;54029,19260 +dcpxFvVz;76838,29142 +PIWoYHli;59128,83857 +IJQlRvtV;86478,12245 +DTzWaRUH;34057,18917 +CwVUJWbt;20970,35378 +SMFKfzkf;35512,27977 +FkqZufnv;8476,60938 +RyYkNIvJ;16954,1427 +FakTwJen;69137,64238 +lZGuIoQL;22050,33370 +jOBcowan;60028,54777 +KieFWvrB;39978,32431 +HVMCpUwW;56034,38566 +KBaFkVIY;65997,21551 +FyoHadUa;36508,4429 +LSbJksfw;10673,66301 +AjnpgfJR;19833,53379 +TlMWWqqv;9023,86765 +oozWBNsm;66064,12896 +abfZwobJ;82250,69514 +VGFBCDds;59364,9735 +rWLnLdkB;41709,79776 +nRtoumFw;80243,24539 +bAqfoETC;83324,46504 +pkBOxsZF;49649,4777 +yRSsPIef;84315,69240 +sYeVTpcY;17318,49367 +XPoJckBn;86008,84238 +fgjQepSI;47525,74504 +CPNXRQZQ;51732,26531 +uWKZvtol;34732,62677 +ObPGMyRk;32271,23706 +xQIbFJuG;55724,37607 +DPkRQJNq;48286,44353 +lMIQhqiL;54701,13432 +DMeqTwGU;48740,9367 +HgMoyWbK;69213,26512 +HUwIyVaH;46477,10513 +UXYmqxAF;17950,51413 +QSbLywhX;69469,43706 +QeTKtfuP;84715,53516 +eReHABtE;65854,40446 +pLrvLrJs;21693,44896 +tonpoHQq;87036,30779 +xLopZhIA;29554,72006 +wFUevyHl;34864,23385 +InjNtNlL;14346,76199 +KDzkGasm;7410,79172 +SQvhyujF;20065,84072 +LqzWiHmk;69567,72010 +izkCwKQh;18844,12613 +kOjIOHAR;38344,67855 +sCzIjBEV;76356,56230 +cauGCwTx;41530,43614 +RVUOzbZq;81949,13728 +csayWQXh;1382,56829 +kfQFakiP;57166,73528 +qwubUCIB;63966,73829 +hrMgHTDB;46046,17219 +OtnBuEZq;31365,65920 +hXOcTRge;60575,28442 +rgMyTSjU;38809,59901 +BGmMbZhI;83859,80055 +rcSTOGHi;21943,48100 +EuryikoB;87338,16688 +wRUXLgVk;15895,42595 +jDxbGTMl;30841,4728 +fMpuNjjB;45075,82655 +jueXKhnX;87706,24100 +FiWwlnyb;19270,50830 +eyEdxPpj;39231,60917 +HFtRyUgb;10818,3924 +FucEeObW;59264,27578 +jxYrusRg;22058,83141 +bizkbyJf;55413,31050 +RDifOItx;15950,78957 +YVTnyIip;87384,29602 +depbPJQI;40810,29026 +hUaMLNyq;69195,50821 +MbaAbJdb;35768,42706 +uYNrHlSd;37111,5771 +LCavqUMr;27092,61326 +UsowJbHl;5766,72588 +WkXCpbwb;22463,5393 +MaZMEKuw;57826,12128 +tZDXyhBh;53732,44242 +ysWLITQc;61851,52402 +KwqtQIrG;67049,10192 +LoIQEewC;79348,79590 +KixuJrtk;22244,7158 +FDpqAOJg;19943,16093 +zkelwSKi;27493,22500 +JHojSBAz;42315,64469 +TuqnGBDE;22993,3120 +MNVEULpZ;68410,2276 +lfUhoCVz;58315,82625 +XGhTAkvA;28358,42756 +yAVvyhHl;18704,17580 +bSPbNinr;61912,35466 +XqlwnHha;87732,42168 +egLcWZqw;46904,23167 +odTneuWB;1899,59815 +IIomqdLC;87188,63134 +QRZPAxQN;3089,68518 +jSiiEmyM;10871,68029 +LzaSEWMg;9097,73174 +LFOWMzLx;27458,44038 +WjnfalqO;15028,71974 +flgduQqW;60790,27858 +DJouNpUx;71742,29106 +ttlIjASp;67917,51931 +tGMsUfhK;45348,83994 +AHnGxeRD;9288,75815 +pRlELZUR;13262,45228 +zkErcagb;25131,40172 +bApSKMBK;24551,46860 +hhaxpPpF;18512,36606 +AGGhuPXi;52067,55077 +rcucYjWX;9036,40805 +lFxBIyZW;58908,29988 +AdtQgpGQ;85827,72884 +mfUheATl;63961,79656 +CBaytZRi;32432,41059 +cDzyUQUH;19385,17141 +CaptVLgV;78157,7552 +QGlgWuEL;54658,65439 +KNBWmCIQ;82116,10718 +HZgvynPg;39611,85098 +nUOeEOlo;33944,84345 +AwzexBwI;33560,1185 +TqfLEeBD;63585,83861 +ITZschtU;44233,47328 +pezOmjKC;83849,39796 +hbQqYPgb;2949,42621 +LdInLAjn;65949,84522 +fRYTvXCk;72378,82975 +HneurJJO;60259,75098 +lrmZhCEs;51755,65399 +mDAjKInr;77539,33854 +ZUbRSWrF;13584,79921 +WxUCydkj;73961,76587 +RecaxHom;72349,60397 +yXRDWSVe;16119,50620 +Jerewxkd;82236,80852 +vfdphPVf;70789,20418 +KRqZsEDc;81475,87803 +CJZGiKZi;40257,48462 +vqzGzshU;72485,21297 +eptHiPIJ;73260,9868 +LIwqDyJk;10904,60410 +uKLtbkIt;57561,23587 +EjTbUqBm;74711,50648 +nseZTwWQ;80450,75107 +GtYxSVXM;27583,6981 +DISEYJzy;16380,40491 +evlecnbh;89427,30184 +NPXNCWBf;70672,39060 +kpfbmePA;58748,14954 +NfgPWYZD;41095,86228 +qyYTHkJR;8214,36224 +EldGRYUd;86007,62434 +VbjgqwmD;60064,50981 +oLrUEkWN;11843,65981 +TqwESvVS;61042,62196 +vpxyDvqf;45163,53837 +QJuGzKVP;8821,30270 +NWdvSazI;2526,80371 +iuuUUUIQ;19072,73252 +Npqihiie;82215,53633 +MHOYhOts;49520,78253 +ZItIRaSg;59097,72592 +hPkvvilk;53780,22958 +XavxpUOH;40967,38565 +WEoBeigv;18152,37830 +XUGBluLM;29256,16089 +LxhHYiGj;59924,2782 +hxxYawyJ;70814,54036 +nBZcdKlQ;37344,23639 +WScxzGvj;49817,20169 +UXKLmMOe;66108,81918 +yPgjdNxI;57214,33739 +zgLwiZcd;30614,89610 +eBaRqrMh;79115,58461 +kMQgmVLV;79706,57620 +wxCwOaJG;75670,56485 +IJCPOhCY;57182,32317 +EKWsgLBu;17023,7359 +TfEIuamY;15910,29498 +ENpauOfi;24762,60871 +ChRozGtD;14563,85046 +YjGmsJhp;85138,64704 +GkiFTIpC;32214,27106 +zLKoOlHc;7689,65616 +lgDtAnqH;12011,5618 +HPgeubwN;65879,52071 +nNZLiIrk;48132,59380 +nWSJSHpf;36164,62736 +YyBIULem;54345,41676 +FCHwybwS;59086,33964 +QfwTsRlg;25078,65189 +xtWZcsms;71491,64074 +vVZTyotg;50943,60674 +ERbqWiQx;20394,29323 +QfYlLTgE;88483,41690 +whjdjASc;56710,44064 +VFecfeTD;45562,43812 +HgnZhJKV;4285,86880 +CvEgFzNl;56354,56003 +AAsNjubu;13323,84749 +kRabCITP;55756,21853 +eSNmdVXT;33595,22624 +LwpBnkfC;17802,75126 +aiwdEwLW;9073,2984 +rqpuBdsF;80258,31579 +STwYFrmg;16533,2906 +pYgcGKBg;63227,76208 +MxveeYPq;6348,35463 +nvnSXfVg;25384,52595 +BuSxjhYY;40226,82143 +MPoIyefu;14952,54666 +hUStXpyX;26228,64073 +UmYbnpZG;66575,19232 +xndebzCd;19961,75166 +WXRQDAcA;67194,34496 +ijnwfliL;65989,66218 +kJCwtBmx;83500,12458 +XgAyjKks;22210,50719 +ZXEosbBZ;13734,12279 +cgbsGIGh;3925,22007 +RLypJdqS;79618,88327 +EkPrDUDz;46101,81631 +PmLMgXOF;26504,62816 +ZJXgyeJh;1949,81062 +VrfZAoVL;29536,35131 +WxOGEZeJ;82358,16219 +TbRJxxdN;15551,73106 +jhDQBUhV;21287,73111 +EnvfKaDt;70154,80491 +eylOltUn;50771,1209 +uADigdVv;49867,62398 +XSYmPfts;29369,33568 +xcdznZbz;49813,22809 +aAUIIZel;68444,12698 +jpEopcln;9829,82618 +iLNywBcC;68225,11386 +HxiLjInr;75958,41767 +brpNNLQQ;38095,17876 +QRFDXtUI;61320,11565 +oUafXqNQ;38186,39980 +ZogdluEx;14893,30797 +KgapQQgl;85220,46868 +LfahVCXo;79364,49647 +cQMizpCS;17326,77341 +JbLznsbu;73951,77131 +BbiStDmB;10147,64035 +zKFKeTUs;79455,69887 +quKaSMpV;5664,38652 +cZrdziAA;73184,10734 +TsmvlPOs;78994,2458 +vgQJPAwj;54046,16182 +PicfHxBB;82725,23855 +wBiHznXI;37110,37954 +vVjLjgeF;16265,30737 +IGtkjFUs;17987,83643 +WgTeczXt;79465,67226 +kxRbdKFw;37394,65211 +kpkEnrkV;68720,71294 +LmiiZSCt;14233,39724 +WDLhOMMT;1179,57776 +KBqxtEAw;48629,21011 +BIyyvfOE;86561,87357 +cEwkNoVU;21901,24799 +nEnJHBmg;17646,78508 +FioCWbYq;66334,4343 +CNYcxeYD;72764,28943 +ibhEYlGY;56135,69420 +MsHbdSDk;18820,13477 +vHVHsUbW;51021,24169 +oXchdMYx;48011,27239 +vQqwMsTQ;88605,62702 +rRzKKSCZ;21707,54850 +qXkqAHZg;37119,44324 +UDcQmiqg;47146,37044 +YKenftaA;69430,18072 +IdtIAZJn;23732,66377 +PHcfhfSX;27208,20483 +uDwyYLoL;7860,49991 +EBMeSsWk;29813,38298 +AetzFwaW;60284,80415 +FRglNzbw;66895,88080 +KcrttqeS;64360,44444 +zWMrxPEn;19499,22889 +ZvabScpd;41467,39326 +JlUYjUTB;32926,66064 +qZbDannW;44804,14289 +BnUUgUhj;27703,52314 +yIMvyITV;74249,30995 +xRvqNgdM;14235,7277 +KYlAUINH;82782,47872 +FqJhhQRY;76665,49226 +eRVzdxCo;78892,86144 +XoXAbsmU;45125,70527 +pKdmoTqK;73969,49649 +setdBNTa;23415,16269 +YwUgDkiR;50417,6441 +zfHSXCmS;45210,6697 +bOXZPJjG;48952,20686 +xgjQbgVU;53694,80803 +golxBcIu;56957,78683 +JVRYmHOZ;85747,79030 +GWEVSHCP;6353,65364 +ZhhAYcEA;8375,67445 +zsJUbeKk;89713,83026 +NeXXklRg;85860,86245 +wZPkEhMY;60202,19903 +nouPxerL;50310,78329 +oGRtPwJa;64472,20844 +xSNdNNll;5373,6625 +uLxJakBn;51380,53347 +LrdWFcSJ;11857,42812 +dtnstESF;20989,45616 +UTUYabDq;41490,56120 +VDdifCeg;79380,41446 +cmQovLbE;14910,31998 +JjyoPXZo;14501,17265 +knisMvbI;44208,31859 +MOYRPJKc;23593,64371 +TiKtHjfl;58768,27827 +rhItlEPM;27866,63712 +ZwQTlDag;46709,4237 +VGBEtCfO;40604,19459 +RYyjWRDQ;35141,81642 +CCsPqSHO;36267,6700 +yIfIRjqo;4815,12641 +bLnpkipv;51520,6852 +FISafMBk;59741,84607 +mVsjelcM;44920,23982 +cJTEtpaE;38993,40791 +pGBvTEal;43392,40213 +KzWKaUxE;68938,40928 +cRZHXhPx;61073,54746 +oRdzBfie;5592,2699 +mSeWFDdC;38668,20336 +CMCldHMs;20468,33162 +JsqFGchD;8989,40815 +WfWYtTAZ;14396,27422 +utLWzbet;64700,89607 +lLxrJksW;18889,68298 +owWXWxMC;45875,21259 +kIYUleic;59699,60635 +AenFEfEF;46891,17067 +SSfwOsHA;18848,42106 +Uedbneqa;38879,12060 +ERrCdQrb;72548,35992 +YLMjPYny;2842,28229 +bSjvvNWA;78267,19642 +IOEWXYPu;37681,52187 +GJxnRzwN;19986,25607 +XnoQexTa;68504,73831 +OYJvUeBD;27648,70068 +gYYnsZmT;54429,15261 +ntAetqUJ;40339,9866 +vsnXokyT;82211,23545 +RFXOYxqZ;28058,76604 +EZgcohYj;27974,11368 +KNwPEpub;62234,76897 +uwggdLfI;49374,8445 +JsmEJwxl;64748,65954 +XrKAfVCg;86592,76889 +rCKtKeNM;60895,54416 +nLkDlGbc;11222,52625 +pgsHzoDs;81002,71482 +PXHJDYGJ;43905,17471 +TXQBmOOY;21112,53978 +KepvKIkp;65976,69423 +YWaGoLGE;10881,45948 +NBZYpNpv;39129,16225 +mPfOxYvZ;63001,66447 +zmmLzwfX;52618,60608 +EJWYmNVG;73990,38800 +ItTzQKLs;75727,40907 +lnsaieZa;9849,76738 +hRroXiMW;81562,48332 +HMovTEBL;79103,6914 +HePcKliu;6402,60124 +HQeMlCfs;40643,4427 +KUIoWVmg;68466,9172 +ySPRRXRQ;51927,18572 +EjkYNbvB;65154,80270 +fIOiOFmt;58030,68550 +YyzqMAON;86519,84699 +TRCazsCN;53863,80568 +hFTSAlmr;44396,41741 +jPvpuuGR;55760,13045 +ltIvShxY;33317,82601 +mYqJNTmJ;84572,78954 +yQXzAlcP;20286,21107 +NeRLMvZe;66294,27944 +EgBoQNWV;32510,19383 +kcxUEWuX;52401,12918 +hTtuSAhO;75674,33890 +fQVUMHsT;72839,55732 +imyfNuPi;6587,23312 +mlzqXgKg;5404,37492 +niQnFQbb;74127,42769 +xnBiXRaV;67290,6430 +TmhNfbuI;79234,25136 +ArkYjWYK;62806,55280 +RGWctZgM;39417,63489 +GaaSDnYm;19125,89283 +FteVWxRy;46058,9502 +wfLBZztP;72463,39378 +NVBNyKak;7678,20450 +FMvDRkaS;22733,33686 +gbSCIlPU;64421,6815 +eDHurNKv;39623,82875 +gmDoIZaa;34296,1527 +oVfFYRdb;42036,32325 +EajjpWYR;45921,48349 +BQqnADRe;44182,59127 +BHsgMYAT;52705,17678 +IWeKqJPc;8837,81892 +oLXDnIqF;1214,87575 +VOfdfLGV;83599,6756 +YFqiiYwn;36863,66022 +iktAJNmS;24635,46837 +xdjJpDWh;45348,48064 +LEogTFUO;72721,72022 +fQrevdsi;84530,17258 +jcUFTZSx;32584,29734 +ffAtBsDb;25596,20166 +PVSspOjW;2511,39063 +deShoDxr;65041,57212 +PndexXbc;56547,23900 +ERBXKmeR;40773,33555 +WCzwYQge;6152,87611 +CGbErpDO;32811,29186 +OmXlVQUM;37215,65684 +tLcmWVoz;13125,72478 +lJSwjLRA;45819,88005 +iiktKptf;11016,23992 +OfcXomwo;51442,32753 +SjCbUGXW;32673,57573 +INwGiXNF;38727,82480 +bQobXZMC;80479,75867 +idFDfKED;68616,80942 +OQTWnsat;55363,5945 +poBMOYzZ;6884,85931 +ZlYqgFUN;40862,8368 +OZumjgjU;40463,73443 +zUxITbZW;8677,26870 +ANlqEkeC;25639,52163 +mveGqYmF;37587,6120 +EfWRtUOq;30132,88683 +YWZjMwxY;13659,13149 +MBmHHZaW;65079,44557 +CnnYxOxD;15504,62132 +GVzvuNhX;1193,12265 +GkpOdCrP;70098,81588 +ILaZAchP;38723,89905 +GLFemdYo;82890,81734 +yqsdcwyE;50740,56145 +IPtqiGDI;31754,64421 +VahssnEa;26694,39685 +DMlPKxfB;22298,49309 +qySWRHVC;8391,76722 +YoOObwmu;65752,17553 +uvdTedHb;10549,60288 +gUWTWhOy;26614,82509 +XvKHIPSg;43511,75151 +WEvCcBWL;54912,68858 +MvfHscgn;23949,15979 +UqsEQQNH;20192,18017 +tuESDJYI;41428,22035 +LQSevxTq;58552,12253 +RaProWxj;21932,3869 +kaCxnwuY;17521,86101 +xKRclgSf;36112,66369 +wKjVZriF;24182,42954 +pAkIqmDm;2867,22835 +qjjXlfNe;5612,62637 +TPQEjlis;21475,2671 +rvzGvnBQ;23291,38568 +BhjByRjR;7023,80168 +aTMurdAf;8378,45675 +HFRnfSAb;32297,31091 +eSeqMwHf;30105,46017 +NJAzJJyA;30318,63005 +fcnINsMF;22376,73654 +rhgoBTqs;51991,82839 +hPKYwjpp;54818,20326 +yUEupoDP;74464,60289 +ZrOwYlOg;9742,73591 +wRZNvMhR;40689,86970 +ZBXUGSMP;4127,27709 +ovawArYi;14426,10419 +PwvECBOV;19278,14411 +sciNOFwk;35484,44705 +mJYffZRZ;35080,20471 +MkGmihKX;33267,66321 +mQdZKDUA;74715,74824 +bRCfXhIW;30923,48633 +MwjQFFHd;50448,3790 +NztErWTY;21948,32825 +SddmdBvx;36329,64356 +QvtEepjq;56982,46784 +QWbFRtno;87432,26668 +meuyBatp;30498,72185 +LaXTjqxp;36435,41558 +aHIccfnR;1475,1272 +OGmdPWUg;50383,4518 +UsEanFrN;67262,50681 +IOPlRnZR;86096,26337 +JuJEkwmY;35654,48952 +rHtPCeMr;63744,46057 +yeVtPFmn;23752,43116 +BfASDwdj;72745,15456 +LHckblYo;56604,45611 +spiJNRFJ;41326,66563 +imnjsELG;11958,25256 +RAwiCPMY;27973,18717 +bBnHdLts;9672,42048 +RQeCIJrq;84076,2523 +MvvMGdTW;81273,56482 +MkGuGyhW;24089,82285 +xtSPhTyf;34939,19209 +MjtzbsSI;7457,79702 +QFNbyxSd;20983,86638 +jqqmEtkE;48425,67632 +lSfeslmM;29615,21753 +sBqLnrVN;23364,22722 +VnyYrkUN;55008,89484 +gVwWhJZW;51326,4766 +VbyGuTmn;21812,72419 +qJcUuJbl;67973,27112 +hLTREJIC;56893,88520 +ySGUZqSy;51172,52909 +zNeEnyrT;42459,84036 +azoNCAha;42137,19981 +mQmDnfDm;59230,15420 +dLPSbdzq;58449,89474 +aypraWNp;7071,52491 +IZZJZfGF;23302,40167 +PjVvsuHy;39031,49517 +tvgpAfmM;27422,34652 +gCSbCsgJ;80738,5342 +JYqCqVKr;38443,79291 +pDaaSoPW;36817,31845 +nkVsDfCA;17363,62322 +ljmwFcWQ;4323,20519 +UFvoLdFx;8628,36953 +ANSYXpSb;17763,25160 +erSeXmdN;82653,29886 +IzQtrLKH;27765,51585 +uYrSxZlQ;8023,66492 +jiQFbGyL;19497,59322 +ZNixjtqc;41905,52461 +okqkJFut;78722,69841 +nGtbdCTd;11439,32615 +uuWtxCVX;59062,53024 +VJsddPdW;82261,42793 +EJsymjLP;51084,41198 +JcCtISTV;47995,82547 +JigpPlGn;49520,88984 +GZLTGOnQ;40669,13580 +EnQYGsEw;58065,24694 +PLkedsbW;3833,23089 +mmtQjFQn;49140,49413 +ZlbmNQcb;29293,3533 +SlgnuFdv;48763,1129 +TrFnCsdD;24557,18644 +qWUvrejf;14157,51667 +YFLAOREK;3322,20834 +UOTqxKwf;29905,48876 +YDblDVOc;15028,58046 +TWWZlavX;63856,46277 +DeKOGdHD;41981,9553 +FLtITUUo;17413,49941 +ELWCCGNP;46522,80478 +pJfPooin;86781,47458 +CfVbMSMk;81338,67901 +RrSuDGsi;65580,2214 +hCYMpIrR;80742,2608 +ceAfMXco;37043,6927 +VKQuwWOF;35820,83149 +odMkBdWy;31897,67763 +JMsoTJUr;58018,8655 +BqAHiERA;78277,31785 +nQpsfLyG;2836,85080 +oUMWtsFQ;8834,18772 +hFICLpPn;14830,29837 +hcVjsurw;19674,29045 +OWWeqFzv;66005,62602 +AwZgzMeS;15878,56891 +nsLMYnCG;55307,32016 +QGCvhObD;28594,71920 +ZWneTcZZ;40496,27921 +vkmiyeXr;33074,32868 +ziBhkaRK;22730,45332 +LEyAfeHp;47256,30114 +InVrUPqS;36221,81816 +bsLQtpOB;30504,30271 +hFJJiDTQ;53096,68012 +RnTaqBrF;25602,57768 +OfvAmfWq;57222,57348 +XToxMhLR;20370,24387 +ihQIbyRv;26201,76799 +ZBGuxTNV;48380,62888 +jNvlMXfu;40721,57393 +ceOiJpNX;49945,78250 +wiTwCfdS;53303,70069 +KmmrfXfa;12789,58179 +BTxekuJB;66870,11729 +ofXTopVV;79941,52399 +YzQiYWeA;53889,51681 +wfCdxAzM;22338,60097 +HbWeiehE;66585,84529 +NXuuCwHI;60915,4317 +yxjlbkxD;73282,58599 +YXiUTSoQ;22411,50785 +kkhIsVDw;5674,89902 +EQHGbuiX;78995,81494 +aEMuwrJJ;21824,28033 +XbmqzKOt;58920,32495 +iPDPcEBO;55416,24803 +OgQLWycs;23439,64398 +zPGtIsgR;5133,33340 +HfjgUMNt;80611,22115 +hROdXnqY;37400,28377 +vMxCIKLn;51378,23403 +uDPAwWyt;53288,20134 +EnQABEVu;6076,65838 +LhSIKoVL;75317,70943 +MIyVAMbX;20984,17925 +FEHiMKrL;59593,51530 +pMokEmGi;71856,19582 +iiDdelxq;23646,77595 +yfCtwFQL;18348,18841 +dMBNiDSk;17081,53375 +KvAWWHfJ;76627,83963 +avasLQTD;68261,31405 +oFCwEUbf;20935,30816 +pVgrJXwt;86268,17358 +YDlyoMxa;17925,32240 +CiihQviH;24688,45881 +AdXgEwfI;73015,25947 +guWcOhvX;28885,57233 +yxtYspCH;6637,26749 +dmfmHdkd;19278,58731 +nxyyPenf;65307,73622 +RjGqGYUt;17971,34417 +RPbyJAfO;72772,42596 +EpcyaonA;41317,15850 +dFFizlKq;71351,15869 +DfDCWRkA;50543,75751 +tKspVuNc;45091,75446 +FydiJJuO;89782,74292 +aNJDLKAw;26877,84783 +kWFbbwYO;13727,11227 +JmDEXJtA;82686,1477 +RvxbxDEX;17049,56255 +cQLLfuEj;43109,48357 +saodyjIl;83366,87188 +WjfFkhPS;18818,59146 +rowMMvRl;37337,19929 +PTWVMxnd;40492,48165 +VJbWwFiQ;83045,31874 +KPWcQdnt;84477,22059 +jPIdnPqC;44126,44611 +jmxuBHPl;54261,75431 +xwxRaxXh;12810,51185 +txAdzQyg;36304,87722 +KiuiNyya;57161,14449 +KCAIzuDm;77381,83874 +eCokoQks;67235,33366 +QNCSsjOq;70505,42724 +gWBbdnbn;60622,75938 +jMhXAKuP;43971,67576 +stZfNZeC;64767,9135 +lxsBjngr;42030,46563 +CUZwMEHo;26554,48537 +eDTnqfzP;19088,74129 +XOOfkeUP;38143,10487 +EZdSNsxS;59517,13466 +eJbsxmJR;8246,29550 +wXUxwDmD;31051,69617 +HQHqiicV;64353,16114 +FZBCXGiF;7679,21355 +DdxRIEju;76971,9004 +nGtCUxHg;19189,33647 +skPKjphl;9249,29631 +aveTTdqK;21602,89827 +bmJvdaQa;83269,37922 +AQChFJXW;21019,83080 +DBUaaKKN;14957,77437 +hQQXDVsd;70225,86360 +wPnJYPKF;87715,32394 +nkBxweDS;46778,4937 +xvjwsTzM;70501,25285 +ORLSzblP;19128,78732 +mMXGjszV;28802,55131 +qYuofWVW;1572,22760 +DSKWiiYb;5611,81501 +fczpGJMQ;19756,43501 +HqrbFpQp;62236,84961 +sWuygWzc;33845,36662 +OGCbneUw;68250,70647 +rTNxBBCm;62234,55486 +FFReqqfX;12447,2876 +sjRrWpOX;71158,11041 +dDitfPsh;21950,47900 +gyVgSlUx;4414,21306 +nLFjShph;25950,65550 +NOEWhwpe;42770,35930 +FrlDxewV;68599,20492 +aCnsbylD;58658,88663 +IQRLNABG;40631,79960 +jrGjWVor;6295,88230 +LnFQSzKZ;77234,51744 +sLWfsUzM;87929,47392 +iAKkdaJf;41484,38469 +LoumNqCv;10365,82700 +sYvQyKgw;27549,23475 +nrxBsBGz;81364,6427 +yutFQBrm;23006,53046 +jJnJwaTD;23173,50242 +AoofnqDF;46825,83257 +hIFrdCFY;71820,6295 +zUtlUQHz;15173,48669 +fyMvfxan;56440,83331 +QhoLDSYe;35972,15742 +ZJZxDlpK;7573,63891 +FESNpeBm;70721,17028 +zRUfllBr;28109,30246 +poxjKlgW;22895,31247 +TsqEWGMV;4083,44310 +LftvMcSl;83745,29551 +sicsYsdu;7053,47835 +RWQdFbxC;75995,71932 +vCfDDbUN;37986,77176 +LIvhrMNK;8459,47505 +PfYnJtoQ;73200,88769 +eLThcNPs;15426,71458 +JqXPzSFw;84924,53391 +ARpsvFrI;12679,63814 +eErHuTwF;23346,11862 +OUtCzPHc;53365,80483 +IyKxBhHu;81138,15546 +gHWlGaNA;42198,71378 +buOpWdne;79932,30264 +dXuauLlx;79151,19205 +EpCyPZhA;30310,74482 +MCmlLCLd;52801,61918 +kpXSLzVZ;6196,25239 +lLLGeRqe;12654,31409 +xUIQdEiE;74688,57252 +hwFFKmsQ;43029,5370 +oxDWQUxD;53205,11417 +RHNEmIDH;15283,79209 +offGpcTp;79858,7982 +wdcXIWFH;13318,18265 +cPddLnOX;27323,25261 +zbhduniX;17011,77149 +nkKAgLNx;65026,6704 +TfyxACnz;86591,32692 +FXtqFLHY;56419,26345 +mOWNuMQu;72360,58155 +ygJqRebO;56684,89884 +hpHQEoPx;65586,11630 +RiyKcvSL;22511,38535 +LQiZwoCW;1187,64105 +eWbjiyKI;78486,40115 +PuXLBoVi;76047,46395 +KbGvtPew;82854,78153 +YsJsdxHo;34058,47917 +LsjcEYvv;36515,45157 +idSEAjJu;17125,6062 +LuoHBfbj;46060,76801 +qqYcvQkP;24886,34077 +uNfWrKRv;4739,4810 +KemwMgpj;38232,69989 +tFURABtW;41277,86048 +iLRhOnws;19415,59221 +PjIldYgf;14376,60250 +TMIEmTDD;38470,78274 +EdqHOHpw;38354,62113 +qKwAxgCP;5262,28006 +UiLkjyhi;70751,8294 +OIjpWPkn;65362,32289 +OyoynopS;38586,16825 +JpoOmESE;84269,28693 +nlczutCP;65991,86800 +kOpQdNlT;40599,11533 +nRYPjNVn;83247,5523 +kpNtqKBh;85325,15716 +zMwNKNXf;16685,58857 +phVuODuj;21837,30011 +zzMpFaEa;11632,82125 +KYDWgiSG;52851,73023 +BhwVIney;12272,46661 +sctWJUtD;15506,20188 +fRdmhEre;60670,2700 +KOoxXeLG;58028,70786 +YVgCvpaV;42574,12652 +mQRdYRBz;79478,34713 +jpmpoeHv;52995,45387 +UpOJOAYz;89923,83246 +RfoAbEaQ;5225,41822 +McRJvFkb;17200,60223 +ljJhJtOg;85224,13286 +RWRabjRq;16181,74232 +zleZOUpB;24486,81858 +VMZnlXOp;64138,34987 +dfWhMBXY;17887,69492 +awKeHqjO;67570,61651 +HrhCzEOJ;31476,69692 +eNhXmoYL;27002,10927 +dqFUdOuZ;67006,75667 +DMBxEzLk;81238,42854 +ehfunJfa;85470,39926 +mbIACGpA;27606,12629 +FHErjMpg;64836,39854 +ZhntDeZu;52992,40225 +koARDWPq;30608,23026 +aFMtgNzE;8451,11621 +TFoMZWyc;37164,25937 +fvUAjJQj;60840,22594 +TDCGweGT;26138,14174 +zQqreTGq;51853,67114 +qfqVmlNB;80540,57284 +CZuWWEjH;57179,18141 +uTbGTsxz;76797,71731 +KJzxvkBj;43286,71301 +sejBEefo;73945,13937 +OdHnkofW;57772,62220 +zpFpXdOy;88380,48654 +CsSpLDeO;10768,39067 +GirbMusX;80792,66493 +hZVebCFc;53326,79255 +MimMJPIy;60891,2668 +LCpMdRxp;3899,16671 +ZEOoLkdp;73320,84832 +CcOzTpJO;78570,26747 +aywsTeOd;45837,24778 +ezIEfjOk;62418,42909 +zjdirHqX;72639,81824 +fmTpbStQ;52747,80620 +ZwCpVEAG;5981,56163 +wkFdKoNQ;26921,52646 +qLvVgRBo;19795,31158 +dOFsfxuZ;29133,51178 +TXQeYQFr;62070,17647 +TCiKfgGW;3668,42324 +HCDAtYlb;38671,35286 +fjWLQPRH;72959,30461 +CLvqNbXy;41395,50599 +wGmiaAYH;28545,38615 +OgVkCXdJ;55229,87668 +nxjaqfcq;87962,38201 +MiBTPZSl;60766,38200 +HGHkbuIT;61976,17265 +VTeHGxDx;35457,82503 +qShYDJHA;5840,20255 +JkVLdQMG;39646,10290 +uSrXsiCT;20501,54161 +VzggfhoG;62704,48304 +ESqcLPvC;37312,1304 +ScyROAls;26714,31112 +IflTTFMm;53636,44408 +UIVpkSPI;41767,84306 +tqydxPIN;89031,72612 +XotVqxnz;10588,41168 +jofVMyEi;41254,51737 +WGzhmnPr;29833,34900 +lHaBKNYZ;5381,52391 +RmTxghnf;86854,23250 +iBtVFiFZ;37643,87977 +mciXTLov;38579,5578 +MSbIYyqi;65303,6398 +gOQXiuef;19239,20948 +FswclgsZ;42493,35535 +mKnSxRdF;22469,31412 +EZskyDsS;30552,65329 +qfdlcERq;72593,37644 +SqiiKnTj;34601,55381 +FCEnqVqp;85437,41331 +INhwXqtT;56257,69849 +qYBMpBJN;62284,18518 +nXSoHWky;38520,45981 +XjstrzrR;32921,26066 +GgNVhRzF;13630,29304 +gfnnzEyA;74985,18116 +WpvnnhSS;71966,84133 +GvtjEYnG;51878,16128 +hiBUHBoe;64356,38882 +uFHTzRvE;76911,49488 +yYxkunxo;20664,29044 +pLXPZfHV;86521,52197 +EilSsSFk;84632,19822 +wUNkNxon;32322,28394 +spDNQUUZ;20606,3276 +jDmVZldU;37995,47273 +hTuXUqPM;3931,5749 +rapBCJpc;75065,15491 +acvmgKda;9895,55158 +BOsMBzEl;25080,83549 +gSlJhOSi;80030,12118 +HgnVDTbd;70084,37459 +nxchTNxA;85707,31909 +plhWQQOd;52536,13099 +CAQcnzbV;10399,24611 +IoVxvTTt;40031,54827 +fQGzJMwr;2561,13600 +opsCvaoY;10871,27197 +stnnzlyk;20155,75515 +ODVhntcc;63795,52579 +fPOKjnaG;42449,44018 +UgXzjVas;29198,55364 +uHnHqOVB;85917,61432 +GECDqKnX;88618,82517 +KSdQGQPM;75127,49389 +mgCtgYWp;32291,22293 +uCftBpuV;46670,85238 +DASmoVjQ;35840,87082 +mSryaeMP;22938,80485 +JfcNhgCj;18849,39476 +ZPknPjTC;81604,25869 +zYjqIUYz;81220,33473 +DDXivtfr;62545,13643 +yrlkknTI;27466,18878 +qmhLTsHn;8060,69503 +VAcPXOYi;72802,35482 +AFprKLoa;22649,7458 +hOULQwMA;41928,66500 +GqrxjjLY;8719,5969 +xsNMbikg;4997,5458 +AfSLAXzf;52650,73227 +wCQXcKdF;42882,5777 +VmQqVOSR;15601,33060 +TMVlvdxw;58033,47227 +UZKuJwDm;32268,16309 +IPewMfHF;53412,16112 +GyiMaFLl;84354,39442 +otzWmcmu;14788,70781 +xiFxYYXH;16856,87800 +RYPsOumk;40908,8770 +AFLZkAEi;65413,68475 +MqDxGwuX;22789,35607 +oSqkwxem;19306,83948 +LxvezILC;71679,3688 +xrVkMaXI;42290,53607 +YxOtouBg;77667,42478 +uaEQNMYd;26240,38219 +SBlYpWmr;79706,71762 +daLVOyJX;18996,70949 +ZldoyZsP;75688,28188 +OslrrZrk;30339,83589 +oywFlGYE;52943,71124 +EVLiZdlp;60961,47826 +MdXMWxYu;53324,68236 +MbVxZukH;29384,78484 +fzUgneUc;85481,5882 +taqxIKyR;43770,67244 +fmOblBOA;15811,67715 +NMcueIHz;60404,19688 +pzlZvXnX;1070,65726 +WuVgSkzq;34817,61189 +qNzNOTqT;45411,57044 +yZOiTDUv;18799,36385 +iTXzQpDR;30241,60265 +fhrngiRk;60952,3714 +hQUUiaSF;74992,48325 +CslcOiBa;40581,65547 +cXtPXgyp;34756,54201 +dKKWcfxT;80230,17292 +FFSGnYve;35670,80901 +gDmamCEj;65859,25930 +NBFoZKOv;67526,1308 +QBRjLEcF;79859,81659 +OVEzlRJi;62432,28217 +pgdCjMrb;38277,41810 +QOiZKnrD;56847,39231 +tCbtlula;79393,46446 +aXTJuukI;16834,31822 +JkTZbYWo;53718,34348 +irNrXxew;70835,14376 +tGLGuCXU;39744,61663 +xqOYjPBQ;68695,27565 +HzOClpLl;65244,25191 +HUVWYQZt;86199,54179 +eznIkfLm;78165,45694 +lQGfeZyx;61565,69917 +FISEojGg;4584,60441 +PonzAXiD;20482,67359 +RGJJcctO;5105,40581 +FWyLJQFs;42389,89520 +GUkfJSfr;86550,59050 +ZvoUCAPk;71409,67884 +hiLjtkAj;59959,17912 +plFROYWd;50808,75804 +inUoNYww;83588,52321 +UEARrqcq;89893,9018 +PATpHBUG;58071,42814 +sdXtMNMz;44188,13857 +IhdSueqS;61034,67164 +lpyPGYwM;10255,6297 +mPtlTdQl;16026,70589 +FMAGyVZL;48945,9941 +wEjoxhPp;64956,66536 +lUWvHceV;48692,86448 +seQhlLRH;47169,15114 +zlUfitVb;20793,34941 +IkNNOtcp;47535,13613 +XRHpIJZe;4054,52027 +weqjxqtJ;51752,61355 +nEXkgviS;30335,13032 +qonsdzfz;11690,27574 +wKHinULk;54909,1124 +xxXKPiQg;41934,76463 +wACjItdP;69017,83127 +zkfHbsNt;48891,8357 +FLcifWGa;30352,5779 +XNrqfstY;25252,1895 +vbLgrmYu;5472,75246 +aLAgHjyn;31492,68175 +RHIMKWvK;47925,83484 +tzkrciiF;57868,53806 +tKcbxXbB;73037,29021 +AEgehQyZ;14121,62533 +GzWAnndn;47381,16635 +mtXKpACb;73825,10348 +ydlCiYaC;34743,33777 +psIpbLyk;34062,54558 +tlKtnMtu;56963,82736 +OLZASOfZ;54932,55796 +xiqKJJNo;40195,19026 +TZhJOGep;7335,72735 +gxecasxU;47841,32528 +YRVygvUg;17641,35768 +CenPebQN;19911,77665 +pZjaBcqS;81970,4000 +ZLngKeVH;4534,7455 +jnYdpodg;14618,57203 +ypYvJccT;44865,9490 +KvSSrnMe;46780,65866 +fQFYauJL;29885,84074 +OwWLpqhH;24422,39959 +rbFZiEIn;85406,89360 +cFQOBhbM;21616,75049 +mKwwfaOJ;4700,24863 +xAFuCkGg;47205,58277 +NyVkeTTb;88455,79783 +LQZOdIcx;68547,2243 +wTooqSjz;67002,78095 +fNSfBACB;25407,30943 +VrbKJmwB;86702,88678 +xcgsmAJV;11490,10940 +QQpITtVo;57794,88501 +QggPOtHD;83874,63859 +yNfzsiBh;60169,28172 +jylSODaA;9608,50082 +vAbBHZNB;5169,39299 +PuwPVmHh;18108,11251 +zwZvpNOY;87217,62206 +JicQcxiP;28676,45763 +akVGPBwZ;29956,30452 +cYFkmxsL;51345,59744 +aqqQcfdj;4197,5184 +LphrtlNL;21446,81413 +qhExOktd;39395,75185 +oxjYegmW;50035,66719 +AuuRbfIP;40285,83471 +IpgVXyDX;85201,67449 +TzVTBsZH;49319,8184 +GfcUtQNf;40835,30637 +pIBUvilU;42859,87769 +STiPYeoh;87658,69346 +PCzMDdsF;87816,73846 +tEPbwueT;76945,15784 +wwEQogoq;14841,26331 +SKJQktZf;87565,28393 +qZNqbKjq;76935,43454 +QyztfgxY;68524,85655 +ozzxHKlw;19901,67097 +UNHoaFOZ;10590,78924 +QZTquPQS;32711,45390 +vjPRiTIH;3017,33112 +GlnLuVvF;47537,30493 +xySsEzmz;8870,75042 +ybCTaTyN;11219,30413 +auAeHLGU;41575,38683 +XIHaOKaB;58871,12407 +FyLFFaTR;74479,49681 +UitglIJa;35634,19161 +OqUwCMTC;22366,48472 +mQzjCaCT;26556,48144 +RNDoDLBN;22276,64826 +ODxOPshu;6539,51435 +EPfLTVOk;57414,85134 +uvBWDkdH;5057,86515 +RJaUpoDc;60470,21461 +pvVyezIA;42430,32633 +rOHTDqoU;56355,86746 +oniWvplE;24950,79809 +ITCbZahG;17301,53121 +OcyrUbpk;9944,24639 +ueKpXPOh;50207,56452 +dppmNkbT;87053,6208 +bYQQYaSw;23448,31050 +YKnskOOl;63754,10292 +QlakaiWq;35798,79887 +FdMmsqyT;7068,30610 +sSujcWzW;11081,79138 +NBHxKTBt;55275,39615 +lvzVjZhz;29047,66612 +aDptJZEt;11566,9558 +spAHoAgZ;41435,13804 +JaxXSEMr;44792,43618 +JWAhhhJr;32464,78118 +obdSecPQ;37095,19961 +wkQhsamz;45770,32288 +WbZBioyi;64000,53928 +mQFisHuQ;28091,6259 +JQxpnhKI;17687,82323 +AjGjKLQH;6737,82769 +TuTwbyPJ;75739,12053 +DkjMTIqi;88023,44891 +AwebUhxf;55255,20785 +hDrBQxDq;72517,68207 +XNsLUeYf;62143,39152 +CHpKyjYD;42199,38955 +ezTKOmRr;25053,81300 +MBXgjLtr;35371,73465 +rosvdqFq;40463,85294 +rCMyUUIo;57037,88084 +sROOoKxX;29557,3841 +DjMCCWrD;30739,76210 +RsSMXWBm;6177,26508 +hexIAJQi;31975,54405 +mwECDtUj;81344,18009 +BUOIpXxY;4789,67250 +tWinoXvB;63823,42959 +CuCIEkGa;2802,16032 +jCfjoLQu;28682,75264 +PeDsWfXa;65457,31211 +RJPGEcQr;25534,79162 +OQwsEKzp;5580,79733 +QotTdiTp;59077,50791 +YmBpOYPC;35970,70715 +TJhjUcmy;48600,39700 +KSuimZyU;77100,50163 +avvMlJMb;39410,22542 +VMCrOgmR;33449,10049 +YgzhXOug;66208,1732 +FNLCbtJT;10018,63222 +mgQguGkN;49136,3471 +dDqtyuUd;26616,25663 +qfhDuxvy;11813,45445 +qQBbWmoa;26858,85859 +XJGFhHpZ;16933,5830 +ULlcOXji;79461,69877 +vVnBwUhM;32517,40471 +PTlYGLTr;32766,26277 +UqAlCXGi;47218,82337 +jhuWFXmb;82563,11121 +IkJAOWoV;14778,17963 +kiZemxDr;14938,82097 +bDbujyDR;58562,5079 +QZXCZQLl;52644,13399 +qniTzCiD;79856,72689 +ABGmNVUB;79438,73441 +nMlxdXQP;2656,83355 +HkfOqIQa;52133,44564 +pKqjeOTy;62702,85851 +qVgYaeCv;30360,18323 +mJHnxLyz;8975,38216 +aCCHeAzp;7936,65746 +zzvbaPTK;45898,76289 +wmQRYBfW;79658,68863 +XKofIbkw;76517,42838 +rVzZzgcf;15618,28358 +LKNVNZnf;34737,10170 +CRjpCYvl;37299,56498 +XqJxiemW;26774,73882 +efwESGla;83422,32613 +XCueUZtZ;68257,55373 +fhpsihyp;19084,69188 +kUfwVptu;12817,77718 +aJyojkQL;14678,87837 +kZLTVQjq;38245,31469 +HAcOQmgw;49459,67035 +CrSWTbPP;41072,77830 +uWbEjwgi;77462,34867 +BGDCjwlw;35732,8130 +ughlmtwe;23632,47142 +SxqNBWAM;15533,56266 +OUcOSWkL;17467,21651 +arUxdUUo;40408,44335 +VefWERry;8660,82014 +kplrWpTg;33365,19385 +fQSfgbdu;74331,81582 +pJTWAibH;10001,32916 +CobFqOKg;25550,25714 +yRTJmnuI;12170,45919 +kwPmFlhp;59494,72766 +etvbRknp;8667,71854 +BISwvRMG;64616,8925 +FbbNjpST;62654,34323 +qHCaswfD;81694,48532 +OqdKcndU;3202,61075 +UMlKQyWM;45154,71287 +DvdqiaRW;53874,28000 +wfxcLSKy;71690,48569 +aBPdpcEk;2848,37100 +JPxtDSkE;38058,86289 +PlVHPhFv;27392,5259 +mKzryeap;65333,27795 +TcLjOmWu;31622,52023 +DSQUdTZq;34382,89831 +BMlhHosp;8730,79347 +MGDDXEky;67513,57448 +yxHtyjXw;60420,83131 +OHiniZSV;3046,5045 +hXyvoqXB;28124,60675 +hqgXbszP;63587,71786 +ZQkJQkvq;25529,28919 +vftBSfEQ;39683,68685 +byTZAOIb;19334,44507 +tXAcHHPa;51064,76804 +cUmmNGkE;13792,85742 +WOuoLFsD;26452,21075 +AJuCrPCL;48071,69946 +STyRrKHD;71575,48350 +rlaUKJQz;59876,11554 +HJmbQhki;30002,48927 +hyJPnFXM;76119,14709 +ZldRZJWI;4263,51536 +cljftAuG;76147,88072 +ueDejGtk;4124,22559 +KKBJYOVQ;46372,55946 +mvtsZmGL;45008,25134 +wlXHoeEW;3752,72215 +jqqzEZbl;36871,63015 +cLlZAoTQ;81839,3186 +jlCHAyxA;12967,32179 +ZDRoWzrf;25711,32105 +LOWViZBu;82601,23500 +NaihZcYU;77194,43065 +FichkpaK;86369,86186 +HfOqmWCb;35529,20385 +gfrEcVot;43399,7838 +MQcHSCkW;30862,23785 +HkgGZkjx;89976,66579 +RhZAiogf;74358,85414 +QclhXZaV;76385,75410 +BAjGZAoJ;23952,83656 +cmJFTBHO;86006,82877 +zgEHFgRT;12608,84645 +WmwDVBvs;24121,82681 +mSUcMiUI;57922,20877 +bavRZiNa;55176,63094 +pNNCGZtH;89063,12696 +WipkxtlB;2999,11181 +noWGUiQT;23624,28599 +yGoACHzR;3192,77877 +eOlGcmRF;86063,60329 +xvDOAKUO;59520,4585 +BkwZrQil;16860,59134 +naDzBiSk;15992,22990 +fgCBtquB;8060,41136 +HEoekdwU;77176,9023 +ZXObvHzd;19971,35302 +fBUEfRcP;35277,68991 +UYotmMCI;70469,71338 +udWaAjHf;78035,16057 +KcCbbElx;82855,69099 +IOvxgViV;2053,69221 +qMQfGQlu;70585,80436 +jHlTCQsK;8171,55512 +kCleKklc;60184,89729 +vpgNjIJj;52583,47208 +soiIXjzH;79851,88569 +owzYFCpn;35101,83489 +WbwlsdOk;27506,22420 +eeBoUxAz;86311,34590 +BeGZQkGo;70673,18035 +gTFsEZTb;56503,85895 +uhSClNol;58568,27668 +NPGysdUv;36586,64746 +qsxbqVIy;32450,17202 +NBKqkMWD;62772,16731 +majnJlsG;27478,16096 +xbSfqIPe;13708,56208 +SGYJRrNd;36763,30632 +yaYBMxYh;42301,17761 +HYGOfGTC;6752,11295 +rtcalUMy;21452,35079 +MtMTneLZ;15459,58539 +duXirBYh;80666,48709 +uxbPoqfO;55272,13690 +cPsjOkcx;1585,67919 +pDnTRDod;70924,15473 +GqLuEGMM;50491,16906 +dpGqMCnz;19618,22714 +itaxQmaQ;75078,41198 +cqAOkTJQ;21603,69518 +nKmIKhNA;51317,11991 +DWewwRdW;58870,48498 +UHxyZaSM;44772,3965 +gxmWEdKQ;10244,77700 +iMpqVhQr;36512,26296 +xsVsjcNU;45282,79556 +ZwbVLUyz;23802,68823 +gOANJmBd;55277,85570 +VlEJIZbj;79432,56003 +vJnSrNSw;9900,65954 +KYxEPEYf;85179,60528 +BQZjIFph;61674,20078 +hVHPpWhv;88480,26003 +edSsWixH;10595,28660 +MceGwlKG;53138,11335 +IxLYdMOz;15367,60211 +uTCXSdCh;34460,65588 +eBFnBVKn;53265,57198 +AiiGOvCd;79291,21769 +AqWKLCee;80779,12378 +xEfsNeXx;26297,29379 +hPSDgRZr;58084,69205 +dcKpjYDo;13482,34443 +VreYMwfx;6427,36417 +eKiayBJn;28327,42653 +jBHzkWxi;78148,11567 +GnRdcYAs;69052,6328 +GQEcFdeU;71085,64352 +kXBLHWFk;88342,72341 +TihKPlwT;37724,21505 +WIrBaSyy;58762,23124 +qHPaKebR;70075,74037 +tArcFKTf;50560,64005 +iypuXDOu;7694,82940 +RYgogfKe;43403,67730 +xHGHSbOx;44846,30284 +WjpFdCUF;83064,41194 +uAWNHpRs;60323,87083 +DXfKpbBV;3452,30160 +gPWwmBMT;15704,13715 +vplHziLk;87327,15092 +FHwACirZ;45466,32252 +BPYoiyDY;18395,68000 +KOgzWbXe;2804,61318 +TiueSHus;53327,4484 +CmLckfGA;29614,80024 +jTODhgrh;77859,5192 +FuWTKjza;54722,75136 +tHxkFfzt;58357,88628 +vnQnIxuM;4775,86998 +qcfIZPOL;82872,86937 +TZdoZPAj;29686,81477 +RvPmtDJd;86435,49744 +sFRkdqJf;9008,31575 +tgEVNavX;30933,19339 +fRLwATcT;29051,53649 +IiybNxyL;5964,77048 +iCllMxUk;8224,20702 +bhynDYJn;7001,3849 +PgRexaWs;59007,27500 +MNMCuanh;15278,24688 +eScRnfaI;4258,63234 +JSJYDwNW;60525,52793 +MdtzGVVZ;44864,21705 +kSnUOTKi;29736,13309 +asMNFiHQ;38467,14346 +zBXhrtbM;1336,75506 +nfQSoRkb;24811,50946 +xBglrapJ;12464,22676 +PXQzeIEF;86602,38274 +IatGujay;21209,58094 +cOZDhscj;49552,89545 +cOfMzRrz;24184,54885 +KSzRNqxQ;58786,63612 +arKlyQxD;30347,84157 +wfBgBuZC;79947,58129 +ekABJtLE;41065,34999 +dillXore;64877,36686 +VlUBMKWc;70614,9285 +rrZLSGEY;3604,27477 +WOQwfOHJ;26094,7199 +YJHPlgwl;4217,85370 +blLfYMiF;23771,15996 +tCaQyAvH;47829,42836 +UuTvYrpC;13916,5561 +dONbCUCV;38685,86102 +kdNUTAHb;43477,71321 +gGvbEjfM;48910,41583 +ofwgssjY;4594,32302 +zvZxMdrG;5241,79653 +sTtMZfcH;66037,65934 +NMHZIXcN;49788,37712 +RSghcAbw;87975,74127 +PXFgRtCN;80091,61178 +LtUMAMLQ;62284,23465 +dHTipdQQ;80734,62207 +lZmLzkWW;31777,3704 +qMdTbpJw;57135,87502 +QCJfwyrj;24961,58993 +QyieIFXj;54615,78782 +aGZrqVBy;75644,50715 +mXMgvyjl;7886,85555 +NIMHZbvJ;44469,79130 +yQWBCPEq;45257,68477 +LkIuhXDK;57641,13983 +Qfqxfeul;73426,41310 +RHORzpgV;26721,45928 +xxrXkTJQ;70112,31821 +EMLqAfyg;56497,61850 +qiRYrNET;8402,54972 +bEnhSLAq;12063,37907 +BOCwokvR;71404,37787 +GiMUhgcb;35071,76464 +QrZrTCYa;46846,76936 +oDrbAOtf;72867,12553 +UvEQgrPn;57160,57766 +hYgBqbmN;54297,58390 +XtXWyzFr;79527,30032 +xZkQIVXY;59625,45820 +mEjZTOzF;85203,85929 +zdBhiAUM;82737,52398 +iVVxtdjb;57039,75639 +YuliQSUD;73554,28955 +XlJOmSji;28844,82271 +pmlusBCM;6446,65672 +QPTyXkoA;51770,71148 +RUIUKxRy;36045,72158 +KbJCTfyg;12509,14878 +BPGzzDQb;47050,59168 +icSJatMo;64472,68152 +ymYfHLYs;80575,75763 +pGvITLIu;79916,20590 +YeIurAXT;76243,84942 +kSwFtfDT;42342,73993 +tCrVObTh;28226,19380 +XSJftCmd;80017,61008 +bYFGqVVB;64941,82458 +JtZjlPqs;72175,53460 +vnMljCYj;80682,4492 +sPaetFyh;20462,42867 +mJkYHQWl;59732,4272 +AQCVMGvO;25223,8073 +RWoMOOCf;18325,28139 +XnozvVsl;70178,64184 +GucZqOpS;56180,62556 +LUyFCXpc;67406,4395 +sMVnsgoy;13480,64495 +RcsmaDrg;51968,59745 +nRVvasdg;67433,41752 +afZvbvrG;88922,1454 +fpyNnGZx;33385,53608 +ZCVLRTeg;87314,22601 +kOdtZUbO;55611,62266 +MwiIXZGl;84232,58204 +RpOhABIi;70916,15781 +IQbLbnRM;6553,1091 +qqNIvKtR;13179,81543 +dtEqQhWG;48157,8551 +KNYFTXgH;23168,16116 +AqriiULg;19445,47246 +NGFXRGgc;34241,15259 +jtdRfAwj;64198,51679 +zCcOfWCm;84417,71551 +IpWrSpTs;27322,33210 +AvOzZMID;9541,82686 +UMANBxXF;42030,40262 +sMnIeXLg;49586,41593 +jzcYLVIA;27953,24713 +gJdAPsKC;22920,77123 +qSQOMHhd;62573,74808 +jixRjTHQ;17471,38003 +dIMHjabt;61230,79633 +URWoCvWC;60683,73680 +wGPtLbKn;80068,46835 +VWnvLoHN;53359,24523 +egmbXtpU;6706,34126 +cgLKTQHQ;76481,40648 +LGSQYFiR;84700,41901 +suZlrlFk;2139,15473 +KDmlKGXy;84329,32439 +VgJwwSwN;12113,49070 +xqwEzAtj;30105,74330 +ddljhTGF;24804,81214 +zBmnwKeH;80272,78998 +QUIpMBxo;77331,73262 +vgiefjhK;68450,7899 +QnLCRMKL;63277,46503 +ZUGSfjeK;52046,74393 +CDfUqQpU;45865,52554 +qYVEWXKS;63091,7151 +WXeRJOPQ;75899,29262 +CydCDCUp;1250,88952 +nuOJZhBv;63899,58582 +ZaOpxbyH;11110,7353 +RABqdkMs;11471,35248 +dBFlRLXm;52510,71416 +KGIbALkv;9502,80304 +UfAlEKlI;31554,58240 +LnHgQwmC;18496,20945 +wDZrWunq;49823,68369 +FryTaRVu;5233,86527 +vWJsleEX;19209,55852 +RebZawil;79897,45341 +xWmUjouw;11418,76139 +yxlFiwzC;48317,84304 +CUmisMlT;61091,78906 +TQLcYlDh;13133,24470 +wTHFFpIj;13589,20595 +ppqsYjVo;20768,28708 +rGVQHNZB;76313,10389 +MLgEDcwj;56100,86643 +aEFyEnlq;57410,32584 +mBpLrgTi;46079,12662 +kMlPEFgT;83257,43443 +NUzedGiS;83896,51014 +eTJKccVD;87051,35636 +LWOoiPhu;60966,53306 +iJdYaOgB;69825,50830 +osgHzVPl;21056,29488 +dwZaTIJb;11868,84572 +fUUjAsXn;89288,33219 +kdZrJPaW;29487,14326 +yLXfvdxQ;68595,41540 +yUEwjHNf;89880,10266 +gbLCjUiX;82978,25296 +xXXhTEqb;22433,67467 +GzTjLLru;21940,55186 +oIXwERjE;32230,78992 +TTCbvpOZ;57289,39067 +CNtVKOBV;83276,83179 +whcFlxSY;24565,19130 +RsTOWhbQ;5423,49806 +mTDUOYMs;28219,88407 +DbXZhvcf;42247,82376 +WvxsioDq;17308,45656 +JfnBKkFU;23142,73864 +CIBOOkLv;13549,10841 +ZvyAmHHZ;75875,14176 +wmHVJibv;2233,86401 +MCfPyrXd;71194,31195 +HnNJpRHB;36862,36887 +EIrNaVNZ;3052,58146 +nUNHgJwP;17275,28604 +kAINMBrP;50387,6963 +WGucQsUM;2463,22964 +lzaGYdHs;62516,43630 +ixNJyTth;20563,44338 +OPHsToOX;16155,4393 +OuGDZqMw;41599,82645 +aEfwlPKV;49334,49954 +oXbUFIBv;47456,82624 +GdKpqKDk;57917,23370 +sZTQTVUy;51650,28023 +RLAXgWeo;2913,44885 +bATZVyjt;65412,77991 +IXTAYPpz;86498,22571 +EJGedWvX;89677,46874 +gJBTGOwJ;18782,66300 +EQmNQNlY;66695,77942 +wThBzNLD;6145,13703 +CyBDXjCl;54642,68949 +PlKvITvP;17139,88574 +KpeABhyY;85526,19741 +hovlPRzp;69805,87035 +seYkxLCk;72124,47346 +pOFlXvui;26784,11033 +ZHgrZviT;26953,19442 +fRFYwSRB;78902,68949 +tCKTxPfD;21029,88277 +atguYYVm;43057,30969 +fUngutZJ;59695,37941 +yKJYbogl;45335,64980 +FqaXXaia;34948,56148 +BEqPLXFA;66350,43909 +ZgTrlwMK;55508,20297 +hFQcZwOq;11778,76349 +sgDMBPoc;14895,22794 +uomZZZjH;14022,38558 +EAAPFZxf;20978,29954 +rIGQFPxT;23004,68398 +ZSaXUikZ;38102,76216 +ixArfazY;36138,63807 +RQurfqxV;65216,86127 +wSUnFyNv;29345,60509 +WQzVXtqF;5330,54033 +COytjYOp;48624,44254 +BEXVpdgV;6202,27517 +qQnTdFoQ;77208,22672 +NwEZiALk;22400,26507 +TdAYEOSZ;19392,72959 +OoNWPdAV;70541,64335 +SgzhCGfs;6441,76408 +rvgmFvZK;86228,72729 +WMBoVTHf;35283,32827 +IAJMExnO;16807,39085 +ZZCLMtpZ;89346,50184 +eKJOkuXT;59440,79815 +TBtqabAe;11640,34979 +qdHUDKtl;46011,64007 +rXqlMtbD;10008,74378 +AnjzidvJ;87837,61643 +ozoYTPgu;49436,61061 +aYdBbtzc;11812,12261 +ywTZUBHi;48551,54798 +YMbxdQFv;50423,70582 +KkpBMtZE;39735,84236 +hLRYdkKz;37463,10376 +FadfXmHm;46051,56247 +BSimRXsc;34128,4874 +WwVfagbS;33189,64309 +fIMTlruf;78851,11419 +wwLrnKrD;27703,31865 +soDVYFek;36426,24111 +jrvPJFTq;78948,7703 +bkWoydFI;84131,58016 +qjWVJlKl;37649,8172 +UmKsFLzW;84668,72315 +BCsWlzcs;78452,56690 +ezCwnvmu;33342,34207 +ylusrKdV;79327,54684 +JlYrDbSZ;84745,41122 +eUMkNptK;82364,68759 +VXAFPZcE;26239,84193 +qzebxpDb;44352,75343 +Awlmepqk;59798,58391 +gQVCujIl;56656,68683 +qNYkSrPb;31062,26997 +PKDOQKXI;89626,66050 +UOYgMhrP;76648,8433 +UBsqufaD;14899,35511 +WadfewmP;58444,51828 +baYChuBI;45773,49580 +DhQCqzXe;5836,52667 +YegLFucY;78526,28778 +QqCVHSaN;28443,6564 +ASxktPWZ;13667,20570 +YPevuwoO;18948,65844 +DueVjoAL;54373,69195 +nxgiTSDJ;9747,89829 +NcfzhLWb;11955,23404 +hJPLxpMj;76541,17812 +wpvifCOl;44830,1485 +bjVQeSpT;82109,79513 +QtCYxOmd;30730,56286 +vPWsRLjk;55573,67551 +nihhjDVg;87391,59133 +loNTAbJO;58795,77096 +tAiWHVqq;62187,66049 +xGIbBfJX;75878,31379 +gwWdcQKH;34307,27308 +VKXWglju;65787,57586 +ehqWKWsv;63719,48545 +VQVSkfPe;25810,28314 +sTNjGgoY;81150,70876 +SBtCtTSD;2072,85197 +zyhErpKl;20764,75113 +nAhJcRMY;26064,24379 +Xwwptgwo;62064,29651 +XfMaLLCb;74976,62762 +PjDzwaoL;84900,16534 +htmybfBU;69013,85785 +dOeubQfM;59275,22915 +JRcINtiX;20821,6255 +MsmvUcwx;55552,78680 +dFbyzwfZ;86448,58823 +MUocNxcz;37399,19312 +BxoKDvXG;15238,88126 +AUJuOEPu;28393,12446 +EgCClBTi;38298,89798 +gbQKyfem;48555,24149 +amZjyAWF;17222,72254 +CWdbBJAj;33399,20972 +jnNuTHUF;24544,54451 +MqrmaeRm;18239,82458 +weKnkpcD;67625,80165 +vCAughQj;75553,45593 +TWPhybuV;4250,12703 +XtBkaUpy;80390,12151 +jBRksrpO;75424,8762 +yRvPoJmr;44290,8501 +FNDFyTeT;12919,2916 +ktbXRehN;85088,10878 +JVRmbTEU;16443,9327 +YJutSpVj;50109,77216 +VtNYanGs;37611,35028 +QTMddyDR;64662,30753 +ehCUjUZF;49923,71116 +AYMnWczG;75851,26340 +ZgQVmfbm;25758,43968 +wxJjHKTt;73689,44320 +flbxmrqk;57977,9276 +CloqOKUu;54218,52787 +CMnUoCfx;44671,38199 +YxhtAfAv;1799,4565 +pevxopsS;15241,79332 +EEkyEdXO;31959,4992 +mQCmrosd;39405,82165 +QSIonkpO;35266,12794 +rJzkEmsE;64940,61822 +EyywzWVl;56565,78607 +mNIoDhuQ;43551,58911 +kTLUVqxU;15981,62105 +MJOUQLPT;11564,82849 +nTbJsoKg;8721,23731 +tGfccgTy;5461,83365 +DsnmoQxN;17676,22601 +HlFyGZBy;62508,18037 +FLmwqjWG;27217,5449 +SOVyYKJf;10765,52062 +VMEgMFXB;63765,53311 +YDXpqHYq;71062,66245 +HXpuIMbO;51240,31631 +CgaETaWz;32748,37447 +LzKeBILY;44186,14259 +DHgDJhIM;43865,70131 +NxtxhzLC;51763,82376 +miwQkwYk;85047,28131 +IuyJRxTB;79220,73485 +QmKQEnRr;61799,30826 +WdizshYR;30096,71349 +TPrIIXhB;41801,43660 +TYdtEvvb;2967,75434 +IJyyePMa;64156,88728 +RGnZDWtQ;77482,40507 +yumXuDdy;54710,63270 +iqoJOitd;49648,45925 +BeIMpGVu;49595,31683 +OsazjNae;24996,13508 +qENJiewi;46099,76267 +AghJAogJ;49775,39880 +oNvgppXp;87750,45326 +VrDBfPKo;1869,58564 +EleuqPta;39167,82098 +ddzwuThX;20137,6704 +ySoDCyOP;37541,75661 +teEsFPBI;62078,57469 +SKvVqNng;78476,74685 +uzXrioTx;34849,18046 +bUhzFtfe;14349,51446 +GzWAOIzg;4495,77410 +OpQSclIg;23164,62157 +sYnMOEvv;89500,81077 +INhBjuOl;75677,35995 +XMrTrJjo;16643,83915 +UzkNRLKz;32197,85986 +tYKJDhbS;86823,39587 +EzErGpEj;22227,59852 +LTBNCIIu;11061,65030 +YuUvkpcx;46951,5456 +jcozIwHj;27588,8543 +lUvmATba;65795,23505 +iIwYDcbj;56697,89188 +ShrzeONO;44491,41573 +NCGfkDzt;44438,70929 +nemPZsOM;80514,72817 +lKQszVPC;52430,59552 +ShLOdBvm;69563,49215 +aahGCeBM;76852,53040 +sWJcffCS;76043,73017 +FONzHREz;2935,5090 +CxhIWAgr;61137,11041 +YDJByNrE;13505,2467 +CmHqqIkz;28953,25830 +EznpXCOp;60681,14567 +vYFRCxna;17674,86928 +zufPmPzU;74658,42254 +iLrKkcID;22634,60034 +SJqEJQGu;56277,30766 +iUVkKXWu;79777,18858 +Dfhybxge;76281,71443 +RmKlQHsu;85203,21884 +VXKEkYtf;45301,32514 +pEcxpjaR;17343,39290 +hEtwEFPe;27090,19383 +twCzMiQs;44359,67889 +CYyinbNr;52587,35874 +sYxXkIBm;74543,47782 diff --git a/src/executor/mod.rs b/src/executor/mod.rs new file mode 100644 index 0000000..7a2e31e --- /dev/null +++ b/src/executor/mod.rs @@ -0,0 +1,136 @@ +use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; +use num_bigint::BigUint; +use reqwest::Client; +use std::error::Error; + +use super::{JsonEntry, JsonMerkleSumTree, JsonNode}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; + +mod spawner; +pub use spawner::ExecutorSpawner; + +pub enum Status { + Busy, + Idle, +} + +#[derive(Clone)] +pub struct Executor { + client: Client, + url: String, +} + +impl Executor { + pub fn new(url: String) -> Self { + Executor { + client: Client::new(), + url, + } + } + + fn parse_fp_from_hex(hex_str: &str) -> Fp { + let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); + Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() + } + + fn convert_json_to_node(json_node: JsonNode) -> Node { + let hash = Self::parse_fp_from_hex(&json_node.hash); + let balances = json_node + .balances + .iter() + .map(|balance| Self::parse_fp_from_hex(balance)) + .collect::>() + .try_into() + .expect("Incorrect number of balances"); + + Node { hash, balances } + } + + pub async fn generate_tree( + &self, + json_entries: Vec, + ) -> Result, Box> { + // Parse the response body into a MerkleSumTree + let json_tree = self + .client + .post(&self.url) + .json(&json_entries) + .send() + .await? + .json::() + .await?; + + let entries = json_entries + .iter() + .map(|entry| { + let mut balances: [BigUint; N_ASSETS] = + std::array::from_fn(|_| BigUint::from(0u32)); + entry.balances.iter().enumerate().for_each(|(i, balance)| { + balances[i] = balance.parse::().unwrap(); + }); + + Entry::::new(entry.username.clone(), balances).unwrap() + }) + .collect::>>(); + + // Convert JsonMerkleSumTree to MerkleSumTree + let tree = MerkleSumTree:: { + root: Self::convert_json_to_node(json_tree.root), + nodes: json_tree + .nodes + .iter() + .map(|nodes| { + nodes + .iter() + .map(|node| Self::convert_json_to_node(node.clone())) + .collect() + }) + .collect(), + depth: json_tree.depth, + entries, + is_sorted: false, // TODO: fix this + }; + + Ok(tree) + } +} + +#[cfg(test)] +mod test { + use futures::future; + use std::error::Error; + + use super::super::orchestrator::entry_parser; + use super::Executor; + + #[tokio::test] + async fn test_executor() -> Result<(), Box> { + let executor = Executor::new("http://localhost:4000".to_string()); + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; + + assert_eq!( + format!("{:?}", merkle_tree.root.hash), + "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" + ); + Ok(()) + } + + #[tokio::test] + async fn test_executor_block() -> Result<(), Box> { + let executor = Executor::new("http://localhost:4000".to_string()); + + // Parse two csv files + let entries_1 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_1.csv").unwrap(); + let entries_2 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_2.csv").unwrap(); + + let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); + let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); + + let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; + + assert_eq!(all_tree.len(), 2); + + Ok(()) + } +} diff --git a/src/executor/spawner.rs b/src/executor/spawner.rs new file mode 100644 index 0000000..d9a1378 --- /dev/null +++ b/src/executor/spawner.rs @@ -0,0 +1,9 @@ +use crate::executor::Executor; + +pub trait ExecutorSpawner { + fn spawn_executor(&self) -> Executor; + + fn terminate_executor(&self, executor: Executor) { + drop(executor); + } +} diff --git a/src/lib.rs b/src/lib.rs index cc00c82..7408617 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,27 @@ #![feature(generic_const_exprs)] - pub mod aggregation_merkle_sum_tree; +pub mod executor; +pub mod orchestrator; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonNode { + pub hash: String, + pub balances: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonEntry { + pub balances: Vec, + pub username: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonMerkleSumTree { + pub root: JsonNode, + pub nodes: Vec>, + pub depth: usize, + pub entries: Vec, + pub is_sorted: bool, +} diff --git a/src/data/entry_16_1.csv b/src/orchestrator/csv/entry_16.csv similarity index 100% rename from src/data/entry_16_1.csv rename to src/orchestrator/csv/entry_16.csv diff --git a/src/orchestrator/csv/entry_16_1.csv b/src/orchestrator/csv/entry_16_1.csv new file mode 100644 index 0000000..228b1db --- /dev/null +++ b/src/orchestrator/csv/entry_16_1.csv @@ -0,0 +1,17 @@ +username;balances +dxGaEAii;11888,41163 +MBlfbBGI;67823,18651 +lAhWlEWZ;18651,2087 +nuZweYtO;22073,55683 +gbdSwiuY;34897,83296 +RZNneNuP;83296,16881 +YsscHXkp;31699,35479 +RkLzkDun;2087,79731 +HlQlnEYI;30605,11888 +RqkZOFYe;16881,14874 +NjCSRAfD;41163,67823 +pHniJMQY;14874,22073 +dOGIMzKR;10032,10032 +HfMDmNLp;55683,34897 +xPLKzCBl;79731,30605 +AtwIxZHo;35479,31699 diff --git a/src/data/entry_16_2.csv b/src/orchestrator/csv/entry_16_2.csv similarity index 100% rename from src/data/entry_16_2.csv rename to src/orchestrator/csv/entry_16_2.csv diff --git a/src/data/entry_16_3.csv b/src/orchestrator/csv/entry_16_3.csv similarity index 100% rename from src/data/entry_16_3.csv rename to src/orchestrator/csv/entry_16_3.csv diff --git a/src/orchestrator/entry_csv_parser.rs b/src/orchestrator/entry_csv_parser.rs new file mode 100644 index 0000000..d28a4c8 --- /dev/null +++ b/src/orchestrator/entry_csv_parser.rs @@ -0,0 +1,47 @@ +use serde::Deserialize; +use std::{error::Error, fs::File, path::Path}; + +use super::super::JsonEntry; + +// From summa_solvency package +#[derive(Debug, Deserialize)] +struct CSVEntry { + username: String, + balances: String, +} + +/// Parses a CSV file stored at path into a vector of Entries +pub fn entry_parser, const N_ASSETS: usize, const N_BYTES: usize>( + path: P, +) -> Result, Box> { + let mut json_entries = Vec::::new(); + let file = File::open(path)?; + let mut rdr = csv::ReaderBuilder::new() + .delimiter(b';') // The fields are separated by a semicolon + .from_reader(file); + + for result in rdr.deserialize() { + let record: CSVEntry = result?; + + let entry = JsonEntry { + username: record.username, + balances: record.balances.split(',').map(|b| b.to_string()).collect(), + }; + + json_entries.push(entry); + } + + Ok(json_entries) +} + +#[cfg(test)] +mod test { + use super::entry_parser; + + #[test] + fn test_entries_parser() { + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + + assert_eq!(16, entries.len()); + } +} diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs new file mode 100644 index 0000000..c0adc21 --- /dev/null +++ b/src/orchestrator/mod.rs @@ -0,0 +1,5 @@ +mod entry_csv_parser; +mod orchestrator; + +pub use entry_csv_parser::entry_parser; +pub use orchestrator::Orchestrator; diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs new file mode 100644 index 0000000..99dcac4 --- /dev/null +++ b/src/orchestrator/orchestrator.rs @@ -0,0 +1,177 @@ +use std::cmp::min; +use tokio::sync::mpsc; + +use super::entry_csv_parser::entry_parser; +use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; +use crate::executor::ExecutorSpawner; + +pub struct Orchestrator { + // executors: Vec>, // TODO: Should it be thread safe + executor_spawner: Box, + entry_csvs: Vec, +} + +impl Orchestrator { + fn new(spawner: Box, entry_csvs: Vec) -> Self { + Self { + // executors: spawner.spawn_executor(number_executor), + executor_spawner: spawner, + entry_csvs, + } + } + + // Calculate the range of tasks to be assigned to a executor. + // + // * `executor_index` - The index of the executor. + // * `total_executors` - The total number of executor. + // + // A tuple representing the start and end indices of the tasks assigned to the executor + fn calculate_task_range( + &self, + executor_index: usize, + total_executors: usize, + ) -> (usize, usize) { + let total_tasks = self.entry_csvs.len(); + let base_tasks_per_executor = total_tasks / total_executors; + let extra_tasks = total_tasks % total_executors; + + let start = executor_index * base_tasks_per_executor + min(executor_index, extra_tasks); + let end = + (executor_index + 1) * base_tasks_per_executor + min(executor_index + 1, extra_tasks); + + (start, min(end, total_tasks)) + } + + async fn create_aggregation_mst( + self, + number_executor: usize, + ) -> Result, Box> + where + [usize; N_ASSETS + 1]: Sized, + [usize; 2 * (1 + N_ASSETS)]: Sized, + { + let entries_per_executor = self.entry_csvs.len() / number_executor; + + // Declare channels for internal communication + let mut executors = Vec::new(); + let mut result_collectors = Vec::new(); + + let actual_number_of_workers = min(number_executor, self.entry_csvs.len()); + for i in 0..actual_number_of_workers { + let (entries_tx, mut entries_rx) = mpsc::channel(32); + let (tree_tx, tree_rx) = mpsc::channel(32); + let executor = self.executor_spawner.spawn_executor(); + result_collectors.push((i, tree_rx)); + + // Spawn executors that process entries + executors.push(tokio::spawn(async move { + while let Some(task) = entries_rx.recv().await { + let processed_task = executor + .generate_tree::(task) + .await + .unwrap(); + if tree_tx.send(processed_task).await.is_err() { + break; + } + } + })); + + // Distribute path of entry csv files to executors + let (start, end) = self.calculate_task_range(i, number_executor); + let entry_csvs_slice = self.entry_csvs[start..end].to_vec(); // Clone only the necessary slice + + tokio::spawn(async move { + for task in entry_csvs_slice.iter() { + let entries = entry_parser::<_, N_ASSETS, N_BYTES>(task).unwrap(); + if entries_tx.send(entries).await.is_err() { + break; + } + } + }); + } + + // Collect results from executors + let mut all_tree_responses = Vec::new(); + for (index, mut result_rx) in result_collectors { + let executor_results = tokio::spawn(async move { + let mut trees = Vec::new(); + while let Some(result) = result_rx.recv().await { + trees.push(result); + } + (index, trees) + }); + all_tree_responses.push(executor_results); + } + + // Wait for all workers to finish + for executor in executors { + let _ = executor.await; + } + + // Aggregate results from all workers in order + let mut aggregated_tree_results = vec![None; self.entry_csvs.len()]; + for result in all_tree_responses { + let (index, worker_results) = result.await.unwrap(); + let start = index * entries_per_executor; + for (i, res) in worker_results.iter().enumerate() { + aggregated_tree_results[start + i] = Some(res.clone()); + } + } + + // TODO: make sure the number of flattened data is correct + let all_merkle_sum_tree = aggregated_tree_results.into_iter().flatten().collect(); + + AggregationMerkleSumTree::new(all_merkle_sum_tree) + } +} + +#[cfg(test)] +mod test { + use std::error::Error; + use std::sync::atomic::{AtomicUsize, Ordering}; + + use super::Orchestrator; + use crate::executor::{Executor, ExecutorSpawner}; + + #[tokio::test] + async fn test_predefiend_simple_spawner() -> Result<(), Box> { + // This is temporary until we have a better way to test this + struct Spawner { + port_counter: AtomicUsize + } + + impl Spawner { + pub fn new(start_port: usize) -> Self { + Spawner { + port_counter: AtomicUsize::new(start_port), + } + } + } + + impl ExecutorSpawner for Spawner { + fn spawn_executor(&self) -> Executor { + let port = self.port_counter.fetch_add(1, Ordering::SeqCst); + Executor::new(format!("http://localhost:{}", port)) + } + + fn terminate_executor(&self, executor: Executor) { + drop(executor); + } + } + + let spawner = Spawner::new(4000); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await?; + + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + Ok(()) + } +} From 280a8fdd44aafd4a334734e5f88e140a2c1a4a28 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 23 Nov 2023 15:52:11 +0000 Subject: [PATCH 02/32] feat: orchestrator, executor and executor spawner --- Cargo.lock | 135 ++++++++++++++++++++++++++ Cargo.toml | 1 + README.md | 140 +++++++++++++++++++++++---- bin/mini_tree_server.rs | 4 +- docker-compose.yml | 19 ++-- src/executor/container_spawner.rs | 156 ++++++++++++++++++++++++++++++ src/executor/executor.rs | 138 ++++++++++++++++++++++++++ src/executor/mod.rs | 141 ++------------------------- src/executor/service_spawner.rs | 69 +++++++++++++ src/executor/spawner.rs | 8 +- src/orchestrator/orchestrator.rs | 110 +++++++++------------ 11 files changed, 693 insertions(+), 228 deletions(-) create mode 100644 src/executor/container_spawner.rs create mode 100644 src/executor/executor.rs create mode 100644 src/executor/service_spawner.rs diff --git a/Cargo.lock b/Cargo.lock index 0dd29e8..f2f07ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,6 +114,21 @@ dependencies = [ "syn 2.0.39", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.75" @@ -454,6 +469,46 @@ dependencies = [ "subtle", ] +[[package]] +name = "bollard" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03db470b3c0213c47e978da93200259a1eb4dae2e5512cba9955e2b540a6fc6" +dependencies = [ + "base64 0.21.5", + "bollard-stubs", + "bytes", + "futures-core", + "futures-util", + "hex", + "http", + "hyper", + "hyperlocal", + "log", + "pin-project-lite", + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "serde_urlencoded", + "thiserror", + "tokio", + "tokio-util", + "url", + "winapi", +] + +[[package]] +name = "bollard-stubs" +version = "1.43.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58071e8fd9ec1e930efd28e3a90c1251015872a2ce49f81f36421b86466932e" +dependencies = [ + "serde", + "serde_repr", + "serde_with", +] + [[package]] name = "bs58" version = "0.5.0" @@ -544,7 +599,11 @@ version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ + "android-tzdata", + "iana-time-zone", "num-traits", + "serde", + "windows-targets", ] [[package]] @@ -829,6 +888,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -1993,6 +2053,42 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "hyperlocal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" +dependencies = [ + "futures-util", + "hex", + "hyper", + "pin-project", + "tokio", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "idna" version = "0.4.0" @@ -2055,6 +2151,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -2065,6 +2162,7 @@ checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown 0.14.2", + "serde", ] [[package]] @@ -3638,6 +3736,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "serde_spanned" version = "0.6.4" @@ -3659,6 +3768,22 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" +dependencies = [ + "base64 0.21.5", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.1.0", + "serde", + "serde_json", + "time", +] + [[package]] name = "sha2" version = "0.10.8" @@ -3930,6 +4055,7 @@ name = "summa-aggregation" version = "0.1.0" dependencies = [ "axum", + "bollard", "const_env", "csv", "futures", @@ -4592,6 +4718,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index 315a395..0ec124f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ reqwest = "0.11.22" csv = "1.3.0" rand = "0.8.5" futures = "0.3.29" +bollard = "0.15.0" [[bin]] name = "mini-tree-server" diff --git a/README.md b/README.md index 37cddbb..740db67 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,132 @@ # Summa Aggregation -For demonstration, We only run `Executor` instead of `Orchestrator` what we planned to implemented in here.` +Summa Aggregation is focused on optimizing the generation of Merkle sum trees, a task identified as the primary time-consuming process in Summa benchmarks. Our goal is to significantly reduce the time required to generate these trees by leveraging parallelization across multiple machines. + +The system features `AggregationMerkleSumTree`, a specialized component designed for the efficient construction of complete trees from smaller, aggregated structures known as `mini-trees`. This approach not only speeds up the tree-building process but also enhances scalability and performance in large-scale data environments. ## Orchestrator -The orchestrator is not yet implemented. In a real-world scenario, the orchestrator will spawn multiple `Executors`. +The Orchestrator component will manage the orchestration of multiple `Executors`. Its primary role will be to dynamically allocate tasks and manage the data workflow among the `Executors`. + +## Executor and ExecutorSpawner + +The `Executor` plays a crucial role in the data processing pipeline. It is responsible for receiving parsed data entries and processing them through the `mini-tree-generator`. +Each `Executor` operates alongside a `mini-tree-generator`, accessed via a URL spawned in a container by the `ExecutorSpawner`. + +The `ExecutorSpawner` is a trait that initializes and manages these `Executors`. It handles the creation of `Executor` instances and manages the worker, `mini-tree-generator`, which is linked with the `Executor`. + +### Executor Workflow + +- `Executors` receive data entries, parsed from CSV files. +- They send these entries to the `mini-tree-generator` service. +- The `mini-tree-generator` processes these entries and returns the results as tree structures. +- `Executors` then collect and forward these results for further aggregation or processing. + +## Orchestrating on Swarm + +Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability in distributed systems like Summa Aggregation. + +For more details about Docker Swarm mode, refer to the [official documentation](https://docs.docker.com/engine/swarm/). + +### Preparing Docker Swarm Mode + +You can initialize your Docker environment in Swarm mode, which is essential for managing a cluster of Docker nodes as a single virtual system. + +1. **Activate Swarm Mode on the Main Machine**: + + Run the following command to initialize Swarm mode: + + ```bash + Main $ docker swarm init + ``` + + This command will output information about the Swarm, including a join token. + +2. **Join Worker Nodes to the Swarm**: + + Use the join token provided by the main machine to add worker nodes to the swarm. On each worker node, run like: + + ```bash + Worker_1 $ docker swarm join --token :2377 + ``` + + Replace `` with the actual token and `` with the IP address of your main machine. + +3. **Verify Node Status**: + + To confirm that the nodes are successfully joined to the swarm, check the node status on the main machine: + + ```bash + Main $ docker node ls + ``` + + You should see a list of all nodes in the swarm, including their status, roles, and other details like this: -The Executors' roles include loading `csv` files and sending data, which is converted from csv file as json type, to the Worker, which runs the `MiniTreeGenerator` in a Docker container. + ```bash + ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION + kby50cicvqd5d95o9pgt4puo9 * main Ready Active Leader 20.10.12 + 2adikgxr2l1zp9oqo4kowvw7n worker_1 Ready Active 20.10.12 + dz2z2v7o06h6gazmjlspyr5c8 worker_2 Ready Active 20.10.12 + ```` -## Demo + You are ready to scaling! -The demonstration compares the performance of processing large entries with a single machine (container) against processing smaller, chunked entries with four machines (containers). To run multiple `Workers`, use: +### Scaling Worker -``` -$ docker-compose up -d --scale mini-tree=4 -``` +To scale the service, follow these steps: -Note That, Each worker container is assigned 1 CPU core and 128MB RAM for comparison. +1. Deploy the Stack: -And you can see the comparison result with this command: + First, deploy your stack using the `docker-compose.yml` file if you haven't already: -``` -cargo run --bin summa-aggregation -``` + ```bash + Main $ docker stack deploy -c docker-compose.yml summa_aggregation + ``` + +2. Scale the Service: + + Use the docker service scale command to adjust the number of replicas (instances) of your mini-tree service. + For example, to scale up to 5 instances, run: + + ```bash + Main $ docker service scale summa_aggregation_mini-tree=5 + ``` + + Since each instance has access to all of the worker's resources, it would be appropriate to set the scale number based on the number of workers. + +3. Verify the Scaling: + + Check that the service has been scaled properly with: + + ```bash + Main $ docker service ls + ``` + + This command shows the number of replicas running for each service in the swarm. + +Scaling allows you to adjust the number of service instances to meet your processing needs, enhancing the system's capability to handle increased loads or to improve redundancy and availability. + +This section provides clear instructions on how to scale the `mini-tree-generator` service using Docker Compose and CLI commands. + +### ServiceSpawner and Orchestrator + +In Summa Aggregation, we have implemented two types of spawners for the `Orchestrator`: the `container spawner` and the `service spawner`. These spawners are instrumental in managing the deployment and operation of our processing units, whether they are individual containers or services within a Docker Swarm environment. + +- **Container Spawner**: + The `container spawner` operates in local Docker environments. It is primarily used for development and testing purposes, This spawner is ideal for situations where simplicity and ease of setup are key, such as during initial development phases or for running unit tests. + +- **Service Spawner**: + The `service spawner` is designed to work with Docker Swarm environments. It is suitable for production deployments, where the system needs to scale across multiple machines or nodes. This spawner leverages Docker Swarm's orchestration capabilities to manage services, ensuring that they are reliably deployed, scaled, and maintained across the swarm. + +While both spawners manage Docker containers, the key difference lies in their operational context. The `container spawner` handles individual containers directly, making it straightforward but less scalable. On the other hand, the `service spawner` interacts with Docker Swarm to manage groups of containers as services, offering more robust scalability and resilience, crucial for handling larger workloads or distributed systems. ## Mini Tree Generator - Build the Image To build the image, run the following command: - ``` + + ```bash docker build . -t summa-aggregation/mini-tree ``` @@ -37,19 +134,22 @@ cargo run --bin summa-aggregation Use the command below to start the Mini Tree Generator container: - ``` + ```bash docker run -d -p 4000:4000 --name mini-tree-generator summa-aggretaion/mini-tree ``` - Test with a Script To test, execute the provided script that send two `Entry` data to server: - ``` + + ```bash bash ./scripts/test_sending_entry.sh ``` - Upon successful execution, you will receive a response similar to the following - (JSON output is prettified for clarity): + Upon successful execution, you will receive a response similar to the following +
+ Response Json! + ```Json { "root": { @@ -106,3 +206,7 @@ cargo run --bin summa-aggregation "is_sorted": false } ``` + + this JSON output is prettified for clarity + +
diff --git a/bin/mini_tree_server.rs b/bin/mini_tree_server.rs index cd2ad49..b818857 100644 --- a/bin/mini_tree_server.rs +++ b/bin/mini_tree_server.rs @@ -3,8 +3,8 @@ use const_env::from_env; use num_bigint::BigUint; use std::net::SocketAddr; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; use summa_aggregation::{JsonEntry, JsonMerkleSumTree, JsonNode}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; #[from_env] const N_ASSETS: usize = 2; @@ -75,7 +75,7 @@ async fn create_mst( username: entry.username().to_string(), }) .collect(), - is_sorted: false, // TODO: assign from request data + is_sorted: false, // Always false because sorted entries inside minitree is meaningless }; Ok((StatusCode::OK, Json(json_tree))) diff --git a/docker-compose.yml b/docker-compose.yml index e01f183..0df2410 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,11 +2,16 @@ version: '3.8' services: mini-tree: - image: sifnoc/summa-aggregation:latest - deploy: - resources: - limits: - cpus: '1.0' - memory: 128M + image: sifnoc/summa-aggregation:mini-tree-v0.1 ports: - - "4000-4003:4000" + - "4000-8000:4000" # To be sure the exposed ports are not used by other services + deploy: + placement: + constraints: + - node.role == worker + networks: + - summa_aggregation_network + +networks: + summa_aggregation_network: + driver: overlay diff --git a/src/executor/container_spawner.rs b/src/executor/container_spawner.rs new file mode 100644 index 0000000..1fa24db --- /dev/null +++ b/src/executor/container_spawner.rs @@ -0,0 +1,156 @@ +use bollard::{ + container::{ + self, Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions, + }, + service::ContainerInspectResponse, + Docker, +}; +use std::{ + default::Default, + error::Error, + future::Future, + pin::Pin, + sync::atomic::{AtomicUsize, Ordering}, +}; +use tokio; +use tokio::sync::oneshot; + +use crate::executor::{Executor, ExecutorSpawner}; + +pub struct ContainerSpawner { + docker: Docker, + worker_counter: AtomicUsize, + image_name: String, + container_name: String, +} + +impl ContainerSpawner { + pub fn new(image_name: String, container_name: String) -> Self { + ContainerSpawner { + docker: Docker::connect_with_local_defaults().unwrap(), + worker_counter: AtomicUsize::new(0), + image_name, + container_name, + } + } + + // Create a Docker instance connected to the local Docker daemon. + pub async fn create_container( + docker: Docker, + image_name: String, + container_name: String, + id: usize, + ) -> Result> { + let container_name = format!("{}_{}", container_name, id); + + let config = Config { + image: Some(image_name), + ..Default::default() + }; + + // Create the container. + let create_container_options = CreateContainerOptions { + name: container_name.clone(), + platform: None, + }; + + docker + .create_container(Some(create_container_options), config.clone()) + .await?; + + docker + .start_container( + &container_name.clone(), + None::>, + ) + .await?; + + let container_info: ContainerInspectResponse = + docker.inspect_container(&container_name, None).await?; + + Ok(container_info) + } +} + +impl ExecutorSpawner for ContainerSpawner { + fn spawn_executor(&self) -> Pin + Send>> { + // Using channel that onetime use, `oneshot`, to send container information + let (tx, rx) = oneshot::channel(); + + // These variables has to be cloned because it is moved into the async block + let docker_clone = self.docker.clone(); + let image_name = self.image_name.clone(); + let container_name = self.container_name.clone(); + let id = self.worker_counter.fetch_add(1, Ordering::SeqCst); + tokio::spawn(async move { + if let Ok(container_info) = + ContainerSpawner::create_container(docker_clone, image_name, container_name, id) + .await + { + let _ = tx.send(container_info); + } + }); + + // Return a Future that resolves to Executor + Box::pin(async move { + let container_info = rx.await.expect("Failed to receive worker URL"); + let worker_url = format!( + "http://{}:4000", // this port is not exposed to the host + container_info.network_settings.unwrap().ip_address.unwrap() + ); + Executor::new(worker_url, container_info.name) + }) + } + + fn terminate_executors(&self) -> Pin + Send>> { + let docker_clone = self.docker.clone(); + + let container_name = self.container_name.clone(); + let worker_counter = self.worker_counter.load(Ordering::SeqCst).clone(); + Box::pin(async move { + // Remove the container + let remove_options = RemoveContainerOptions { + force: true, // Force the removal of the container + ..Default::default() + }; + + for i in 0..worker_counter { + let container_name = format!("{}_{}", container_name, i); + if let Err(e) = docker_clone + .remove_container(&container_name, Some(remove_options.clone())) + .await + { + eprintln!("Error removing container: {}", e); + } + } + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::atomic::AtomicUsize; + + #[tokio::test] + async fn test_executor_spawner() { + let spawner = ContainerSpawner { + docker: Docker::connect_with_local_defaults().unwrap(), + worker_counter: AtomicUsize::new(0), + image_name: "summa-aggregation".to_string(), // Should exist on local registry + container_name: "mini_tree_generator".to_string(), + }; + + // Spawn 2 executors + let executor_1 = spawner.spawn_executor().await; + let executor_2 = spawner.spawn_executor().await; + + // Sleep 2 seconds for the container to be ready + tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; + assert!(!executor_1.get_url().is_empty()); + assert!(!executor_2.get_url().is_empty()); + + // Teardown + spawner.terminate_executors().await; + } +} diff --git a/src/executor/executor.rs b/src/executor/executor.rs new file mode 100644 index 0000000..8d70c97 --- /dev/null +++ b/src/executor/executor.rs @@ -0,0 +1,138 @@ +use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; +use num_bigint::BigUint; +use reqwest::Client; +use std::error::Error; + +use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; + +#[derive(Clone)] +pub struct Executor { + client: Client, + url: String, + id: Option, +} + +impl Executor { + pub fn new(url: String, id: Option) -> Self { + Executor { + client: Client::new(), + url, + id, + } + } + + pub fn get_url(&self) -> String { + self.url.clone() + } + + pub fn get_name(&self) -> Option { + self.id.clone() + } + + fn parse_fp_from_hex(hex_str: &str) -> Fp { + let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); + Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() + } + + fn convert_json_to_node(json_node: JsonNode) -> Node { + let hash = Self::parse_fp_from_hex(&json_node.hash); + let balances = json_node + .balances + .iter() + .map(|balance| Self::parse_fp_from_hex(balance)) + .collect::>() + .try_into() + .expect("Incorrect number of balances"); + + Node { hash, balances } + } + + pub async fn generate_tree( + &self, + json_entries: Vec, + ) -> Result, Box> { + // Parse the response body into a MerkleSumTree + let json_tree = self + .client + .post(&self.url) + .json(&json_entries) + .send() + .await? + .json::() + .await?; + + let entries = json_entries + .iter() + .map(|entry| { + let mut balances: [BigUint; N_ASSETS] = + std::array::from_fn(|_| BigUint::from(0u32)); + entry.balances.iter().enumerate().for_each(|(i, balance)| { + balances[i] = balance.parse::().unwrap(); + }); + + Entry::::new(entry.username.clone(), balances).unwrap() + }) + .collect::>>(); + + // Convert JsonMerkleSumTree to MerkleSumTree + let tree = MerkleSumTree:: { + root: Self::convert_json_to_node(json_tree.root), + nodes: json_tree + .nodes + .iter() + .map(|nodes| { + nodes + .iter() + .map(|node| Self::convert_json_to_node(node.clone())) + .collect() + }) + .collect(), + depth: json_tree.depth, + entries, + is_sorted: false, + }; + + Ok(tree) + } +} + +#[cfg(test)] +mod test { + use futures::future; + use std::error::Error; + + use super::Executor; + use crate::orchestrator::entry_parser; + + #[tokio::test] + async fn test_executor() -> Result<(), Box> { + let executor = Executor::new("http://localhost:4000".to_string(), None); + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; + + assert_eq!( + format!("{:?}", merkle_tree.root.hash), + "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" + ); + Ok(()) + } + + #[tokio::test] + async fn test_executor_block() -> Result<(), Box> { + let executor = Executor::new("http://localhost:4000".to_string(), None); + + // Parse two csv files + let entries_1 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_1.csv").unwrap(); + let entries_2 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_2.csv").unwrap(); + + let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); + let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); + + let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; + + assert_eq!(all_tree.len(), 2); + + Ok(()) + } +} diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 7a2e31e..f8bd01a 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -1,136 +1,9 @@ -use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; -use num_bigint::BigUint; -use reqwest::Client; -use std::error::Error; - -use super::{JsonEntry, JsonMerkleSumTree, JsonNode}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; - +mod container_spawner; +mod executor; +mod service_spawner; mod spawner; -pub use spawner::ExecutorSpawner; - -pub enum Status { - Busy, - Idle, -} - -#[derive(Clone)] -pub struct Executor { - client: Client, - url: String, -} - -impl Executor { - pub fn new(url: String) -> Self { - Executor { - client: Client::new(), - url, - } - } - - fn parse_fp_from_hex(hex_str: &str) -> Fp { - let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); - Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() - } - - fn convert_json_to_node(json_node: JsonNode) -> Node { - let hash = Self::parse_fp_from_hex(&json_node.hash); - let balances = json_node - .balances - .iter() - .map(|balance| Self::parse_fp_from_hex(balance)) - .collect::>() - .try_into() - .expect("Incorrect number of balances"); - - Node { hash, balances } - } - - pub async fn generate_tree( - &self, - json_entries: Vec, - ) -> Result, Box> { - // Parse the response body into a MerkleSumTree - let json_tree = self - .client - .post(&self.url) - .json(&json_entries) - .send() - .await? - .json::() - .await?; - - let entries = json_entries - .iter() - .map(|entry| { - let mut balances: [BigUint; N_ASSETS] = - std::array::from_fn(|_| BigUint::from(0u32)); - entry.balances.iter().enumerate().for_each(|(i, balance)| { - balances[i] = balance.parse::().unwrap(); - }); - - Entry::::new(entry.username.clone(), balances).unwrap() - }) - .collect::>>(); - // Convert JsonMerkleSumTree to MerkleSumTree - let tree = MerkleSumTree:: { - root: Self::convert_json_to_node(json_tree.root), - nodes: json_tree - .nodes - .iter() - .map(|nodes| { - nodes - .iter() - .map(|node| Self::convert_json_to_node(node.clone())) - .collect() - }) - .collect(), - depth: json_tree.depth, - entries, - is_sorted: false, // TODO: fix this - }; - - Ok(tree) - } -} - -#[cfg(test)] -mod test { - use futures::future; - use std::error::Error; - - use super::super::orchestrator::entry_parser; - use super::Executor; - - #[tokio::test] - async fn test_executor() -> Result<(), Box> { - let executor = Executor::new("http://localhost:4000".to_string()); - let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; - - assert_eq!( - format!("{:?}", merkle_tree.root.hash), - "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" - ); - Ok(()) - } - - #[tokio::test] - async fn test_executor_block() -> Result<(), Box> { - let executor = Executor::new("http://localhost:4000".to_string()); - - // Parse two csv files - let entries_1 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_1.csv").unwrap(); - let entries_2 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_2.csv").unwrap(); - - let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); - let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); - - let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; - - assert_eq!(all_tree.len(), 2); - - Ok(()) - } -} +pub use container_spawner::ContainerSpawner; +pub use executor::Executor; +pub use service_spawner::ServiceSpawner; +pub use spawner::ExecutorSpawner; diff --git a/src/executor/service_spawner.rs b/src/executor/service_spawner.rs new file mode 100644 index 0000000..442720a --- /dev/null +++ b/src/executor/service_spawner.rs @@ -0,0 +1,69 @@ +use bollard::Docker; +use std::{ + future::Future, + pin::Pin, + sync::atomic::{AtomicUsize, Ordering}, +}; + +use crate::executor::{Executor, ExecutorSpawner}; + +// TODO: the ServiceSpawner can control services on swarm networks using docker API. +pub struct ServiceSpawner { + docker: Docker, + request_counter: AtomicUsize, + starting_port: u16, + service_name: String, +} + +impl ServiceSpawner { + pub fn new(service_name: String, starting_port: u16) -> Self { + ServiceSpawner { + docker: Docker::connect_with_local_defaults().unwrap(), + request_counter: AtomicUsize::new(0), + starting_port, + service_name, + } + } +} + +impl ExecutorSpawner for ServiceSpawner { + fn spawn_executor(&self) -> Pin + Send>> { + // Return a Future that resolves to Executor + let worker_port = + self.starting_port + self.request_counter.fetch_add(1, Ordering::SeqCst) as u16; + + Box::pin(async move { + let worker_url = format!("http://localhost:{}", worker_port); + Executor::new(worker_url, None) + }) + } + + fn terminate_executors(&self) -> Pin + Send>> { + Box::pin(async move { + // Nothing to do if no executors are running + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::atomic::AtomicUsize; + + #[tokio::test] + async fn test_service_spawner() { + let spawner = ServiceSpawner { + docker: Docker::connect_with_local_defaults().unwrap(), + request_counter: AtomicUsize::new(0), + starting_port: 4000, + service_name: "test_service".to_string(), + }; + + // Spawn 2 executors + let executor_1 = spawner.spawn_executor().await; + let executor_2 = spawner.spawn_executor().await; + + assert_eq!("http://localhost:4000", executor_1.get_url()); + assert_eq!("http://localhost:4001", executor_2.get_url()); + } +} diff --git a/src/executor/spawner.rs b/src/executor/spawner.rs index d9a1378..120e117 100644 --- a/src/executor/spawner.rs +++ b/src/executor/spawner.rs @@ -1,9 +1,9 @@ +use std::{future::Future, pin::Pin}; + use crate::executor::Executor; pub trait ExecutorSpawner { - fn spawn_executor(&self) -> Executor; + fn spawn_executor(&self) -> Pin + Send>>; - fn terminate_executor(&self, executor: Executor) { - drop(executor); - } + fn terminate_executors(&self) -> Pin + Send>>; } diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 99dcac4..377d6e1 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -6,16 +6,14 @@ use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; use crate::executor::ExecutorSpawner; pub struct Orchestrator { - // executors: Vec>, // TODO: Should it be thread safe executor_spawner: Box, entry_csvs: Vec, } impl Orchestrator { - fn new(spawner: Box, entry_csvs: Vec) -> Self { + fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { Self { - // executors: spawner.spawn_executor(number_executor), - executor_spawner: spawner, + executor_spawner, entry_csvs, } } @@ -25,7 +23,7 @@ impl Orchestrator Orchestrator Orchestrator Orchestrator Orchestrator(task).unwrap(); + for file_path in entry_csvs_slice.iter() { + let entries = entry_parser::<_, N_ASSETS, N_BYTES>(file_path).unwrap(); if entries_tx.send(entries).await.is_err() { break; } @@ -90,7 +116,14 @@ impl Orchestrator Orchestrator Result<(), Box> { - // This is temporary until we have a better way to test this - struct Spawner { - port_counter: AtomicUsize - } - - impl Spawner { - pub fn new(start_port: usize) -> Self { - Spawner { - port_counter: AtomicUsize::new(start_port), - } - } - } - - impl ExecutorSpawner for Spawner { - fn spawn_executor(&self) -> Executor { - let port = self.port_counter.fetch_add(1, Ordering::SeqCst); - Executor::new(format!("http://localhost:{}", port)) - } - - fn terminate_executor(&self, executor: Executor) { - drop(executor); - } - } - - let spawner = Spawner::new(4000); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await?; - - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - Ok(()) - } -} From c6ddf8947b51bdbf77100e5882c16dff86f5ebaa Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 24 Nov 2023 07:41:04 +0000 Subject: [PATCH 03/32] feat: added basic test cases --- README.md | 10 ++++++++++ src/executor/container_spawner.rs | 2 +- src/executor/executor.rs | 20 +++++++++++++++++--- src/orchestrator/orchestrator.rs | 30 ++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 740db67..5ddb970 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,16 @@ In Summa Aggregation, we have implemented two types of spawners for the `Orchest While both spawners manage Docker containers, the key difference lies in their operational context. The `container spawner` handles individual containers directly, making it straightforward but less scalable. On the other hand, the `service spawner` interacts with Docker Swarm to manage groups of containers as services, offering more robust scalability and resilience, crucial for handling larger workloads or distributed systems. +## Test + +Before start to test, you have to build `mini-tree-generator` image as name of "summa-aggregation". + +You can build image with this command: + +```bash +$ docker build . -t summa-aggregation +``` + ## Mini Tree Generator - Build the Image diff --git a/src/executor/container_spawner.rs b/src/executor/container_spawner.rs index 1fa24db..4a02554 100644 --- a/src/executor/container_spawner.rs +++ b/src/executor/container_spawner.rs @@ -1,6 +1,6 @@ use bollard::{ container::{ - self, Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions, + Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions, }, service::ContainerInspectResponse, Docker, diff --git a/src/executor/executor.rs b/src/executor/executor.rs index 8d70c97..e73698a 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -100,14 +100,23 @@ impl Executor { #[cfg(test)] mod test { use futures::future; - use std::error::Error; + use std::{error::Error, sync::atomic::AtomicUsize}; + use bollard::Docker; use super::Executor; use crate::orchestrator::entry_parser; + use crate::executor::ContainerSpawner; + use crate::executor::spawner::ExecutorSpawner; #[tokio::test] async fn test_executor() -> Result<(), Box> { - let executor = Executor::new("http://localhost:4000".to_string(), None); + let spawner = ContainerSpawner::new( + "summa-aggregation".to_string(), + "mini_tree_generator".to_string(), + ); + + let executor = spawner.spawn_executor().await; + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; @@ -120,7 +129,12 @@ mod test { #[tokio::test] async fn test_executor_block() -> Result<(), Box> { - let executor = Executor::new("http://localhost:4000".to_string(), None); + let spawner = ContainerSpawner::new( + "summa-aggregation".to_string(), + "mini_tree_generator".to_string(), + ); + + let executor = spawner.spawn_executor().await; // Parse two csv files let entries_1 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_1.csv").unwrap(); diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 377d6e1..38777ee 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -159,3 +159,33 @@ impl Orchestrator Result<(), Box> { + let spawner = ContainerSpawner::new( + "summa-aggregation".to_string(), + "mini_tree_generator".to_string(), + ); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await?; + + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + Ok(()) + } +} From 5cdb550b855dde1a475976c0d6a09596b7efc7c3 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 24 Nov 2023 07:43:17 +0000 Subject: [PATCH 04/32] chore: remove unused csv files --- src/data/entry_2_11_1.csv | 2049 ---------- src/data/entry_2_11_2.csv | 2049 ---------- src/data/entry_2_11_3.csv | 2049 ---------- src/data/entry_2_11_4.csv | 2049 ---------- src/data/entry_2_13.csv | 8193 ------------------------------------- 5 files changed, 16389 deletions(-) delete mode 100644 src/data/entry_2_11_1.csv delete mode 100644 src/data/entry_2_11_2.csv delete mode 100644 src/data/entry_2_11_3.csv delete mode 100644 src/data/entry_2_11_4.csv delete mode 100644 src/data/entry_2_13.csv diff --git a/src/data/entry_2_11_1.csv b/src/data/entry_2_11_1.csv deleted file mode 100644 index 8726e31..0000000 --- a/src/data/entry_2_11_1.csv +++ /dev/null @@ -1,2049 +0,0 @@ -username;balances -hyyxMolk;56592,89426 -RQNrweLF;29280,24324 -LzSloDzM;26199,79099 -wxcPsmpL;79720,33845 -xzZdIKUo;59691,6650 -VmSVPdku;21784,9048 -dyDYdELg;61832,11523 -pjmcnARI;37628,6750 -qTQKUYpi;37355,67581 -WSriSgFF;78290,77081 -dKOqhBtG;12860,5535 -otokbzRq;15132,51034 -cqqaFiGb;62380,75518 -WQDXGyRF;15015,9240 -MtcXHTlO;30374,8416 -IJkULMfY;45754,53550 -EzsVTNYp;14588,78716 -HQMXTJAb;79052,39036 -AukYFZtv;64791,47222 -kKJRMOaD;8897,55164 -UHsLudwH;26351,23259 -lprmQTsv;75863,73322 -FjvkdakE;41184,71526 -HnhgCjsi;19615,15764 -DijkKPJD;86092,80115 -SsMxRWLj;50004,48296 -fbzyMOas;19281,34997 -RXqPmWTO;31149,72837 -FIxfYKSs;78689,27446 -WywkOJBN;48430,2592 -TdEtQaoI;8503,78815 -alVcjzfI;25761,74841 -IxFYLxPO;16414,72575 -qUZCWcQq;41680,42483 -MmNhooXz;38606,50784 -OKIYxmzJ;46164,1937 -tNsdAVxm;33487,55645 -llNaGLZx;1264,30160 -LZxhdFoH;53021,70285 -TUBjpfHb;13811,58771 -oyLIBVuY;82416,51710 -fvHfSAuZ;41977,12157 -TcoPMJXu;51395,5803 -yYiZYHyh;70049,2459 -yurqwnJZ;40203,3407 -FrBqbZQN;83260,8413 -OMVRmCZt;6051,78455 -QKxZNiqp;66680,42326 -OCZNAeCD;76896,84729 -EkJdyBDs;42381,8072 -nTGjNyVp;48454,26635 -EofhmGMj;58598,49681 -xdpdNXDV;14801,4422 -BqYRmSWA;42794,23120 -naRiLRGI;78826,75240 -qJoxkyZT;71960,11922 -RvbufHVR;16814,43395 -PsMvNiBe;33720,6756 -hBNEnfPC;12817,1707 -vopmVAMM;5174,67321 -BpAcXwIi;75309,34550 -BzljTHzi;50607,27132 -ZJDhiGCV;53645,68677 -lcNMGIBo;80804,21066 -MXTktqTQ;56071,58191 -iRJVdeck;57250,16266 -uGCLvGfS;47027,57825 -czMbQCbc;45321,81770 -bzjLViqY;1355,75452 -cWZpByTk;66351,77880 -dLCgsmKj;78911,78070 -fPdAPXtD;14524,79239 -tZMbFphy;41684,58391 -SNuLWiWX;17334,81555 -JhzUJxmh;81722,88377 -bgPuhqVL;38273,83399 -EvTLprge;67560,82837 -zdcUunZs;64064,61768 -PGTSjjum;19547,87103 -ndoUIyYo;80863,54299 -GmOwyaME;50258,87368 -DwmraTgB;24851,53804 -DxTRkzHx;69935,32797 -nFyRxggE;30321,89855 -wqeYpALk;52397,24003 -laDhVvoo;34280,51155 -TloisARe;14703,54709 -NDqXAXtL;4907,67047 -oIIwObqp;85204,31512 -onJBpqZg;78595,73871 -Pdhzppay;28443,4660 -tHjkwjMC;76891,47522 -zzeBJMPX;59526,51688 -IrBQopuW;42031,53269 -QngKYlrU;19060,30924 -lMoasANf;60630,24420 -ceZEqAzg;64810,85515 -ZEvJNzMY;38986,63012 -OwhBrgQN;12575,29311 -ZtfJVXBm;72920,88371 -yRuOaFSk;63444,60717 -FEMuLrku;44020,78845 -YufePVAx;50275,65926 -kpAdTnRA;52793,66723 -nWKMrWFO;7447,58051 -drPNBbdw;85241,28419 -vfgpfTfP;85963,40492 -LZBszGLL;36294,83213 -RZNNTuOd;89668,23764 -JIlfDhPm;21018,51419 -zkDUqqUf;31868,26004 -VXCYBZFl;12255,27154 -CtguEfna;21326,75089 -AyOsYTnA;8846,76900 -ZOlpdUBo;19391,86381 -HxlhUKzm;10062,8592 -iczvrtjq;30095,60740 -iXOIcwmf;30742,2984 -QJORLbFF;3024,63525 -JcRrhola;28586,67737 -PFEVwqTL;50261,55301 -RZcirCrl;80385,59036 -PpzIMNxO;11964,13444 -ZyFingrC;12130,70593 -ppBuZmpg;27160,79591 -ywyHRKvy;35349,20206 -LLxxJboe;18872,22667 -hRxqikmL;11007,25359 -WkZcrYED;70475,64609 -POdQnQjw;43281,51121 -MATKNqhZ;54032,46502 -NYVSTWdX;63066,50385 -PDVyHcAK;54818,38623 -AfRZgSkG;19053,47757 -qtLrxYue;82024,81643 -fxFeQQgV;46499,15159 -HytinyUS;28308,62355 -VzuNXtrz;23835,34167 -vfnIXnoY;57137,78960 -XWfZvXcV;28402,43739 -tVBERLNR;63596,21718 -KKQvyrGi;26045,60799 -uaxVLUQb;50047,15586 -vNIQdvRF;56466,83682 -mEZiUlhE;37018,5450 -RXEpgGsE;76972,41803 -lflKCbEm;88624,76572 -fZNFBxPi;44188,6866 -GgOBvfHe;4278,50200 -UvmBdCIk;83689,13498 -NRlExbIe;26769,63140 -XdSgaRXi;36261,38593 -gYMRXMNR;29460,72165 -ducmdzVM;30779,34829 -PkNaYwGf;56364,44273 -xXAeCmdo;44870,20795 -CEPuFiVd;85792,30787 -YJEJFYVd;71390,87635 -nUcsIRLQ;20326,84872 -POHLILKJ;85523,14117 -yHMKxCvp;1071,3554 -fpXvDKUd;4570,9432 -aTVSaKzf;2359,3160 -OpTiiNVn;3712,10793 -nEWTwgOs;52236,23289 -ZNrbSAUF;64315,4972 -geaAqUYa;2582,6366 -jtweSsVa;53968,23950 -KAKkBWAK;61624,25341 -gNOnTDes;63143,72939 -BJgYpiMB;61796,32270 -eUbTDdtr;42346,31603 -XLMcsDzW;15343,66567 -dScTrKIX;68155,26827 -LDerFKmb;82163,49721 -bhFYTcsK;12490,44421 -OJtUftKr;81067,82460 -aetfsrCx;79842,61398 -sNhHYItV;52088,17812 -LTIfELpI;34728,58292 -csgjvbet;69401,45467 -huSimdic;7077,56007 -jdWaboBP;34481,76305 -frhwldYe;48032,69462 -fiONMAKz;29933,57809 -lZkeqfLF;69334,15271 -FakuYZCL;8135,9366 -ofLYYQSG;28212,31427 -PgGPODSa;21749,52614 -GMblOJnz;76724,72831 -tsBEfXqe;63210,50321 -bwNzHVAg;49516,20030 -EebTaKYi;55072,5841 -SApFkhVP;63752,7468 -RCLtrrjF;26023,75010 -imNIJqSI;26444,7588 -yNrSCbjV;71712,70621 -aBczybvV;20321,50454 -WjsOFRVA;76655,35034 -LMTpStCx;17308,69772 -adxPZzoW;73409,75317 -UGDfqHhn;30133,44818 -QqHCcJLI;32849,23744 -WsWeTrHj;54265,17285 -zLGauAGg;86745,80681 -JIGncltc;44229,42723 -hKnnlfqf;49998,82070 -tsbqAbPR;80423,26825 -ogPXDfSj;26064,54979 -QfOOIkAb;70787,41641 -opSmDQdF;27707,72644 -bSueUGZS;79852,7078 -PQbKLepD;24165,26102 -PQeMVFaL;17056,31957 -apKjbLQL;75712,53516 -jKAEbfCH;6225,7805 -WrSLlMjo;4121,53925 -MuKzohAI;71910,2153 -yjlnpLcC;33490,1240 -NaHVTMKP;78382,26042 -mSmQOKEV;58920,77909 -mVFWUIWC;24690,67157 -hbqycSkV;13951,31263 -PmNeDLre;73357,71289 -RBSyhGVe;40447,35082 -eCrwEICC;15032,53475 -vwfKXmBW;13054,33712 -mQLRYKyG;49796,41188 -slLJTulU;2175,26386 -bIWeegFy;38262,83941 -lVgkfCBZ;31452,36075 -WZsXwlXK;42494,51916 -qoNrcUgc;14370,19263 -LctJcmrk;70483,24821 -HMscIuQJ;15697,1836 -lPIxBYFy;80780,33391 -SOMyhYpF;29204,1286 -wEKxNjPa;81105,5529 -ueilNPtd;30266,47454 -ofLXaPkC;19254,11545 -hPGfQswC;34928,59465 -sUhgskeY;89104,45062 -mqTDwFEQ;49436,60720 -lCuRilTX;36736,40879 -qMYpOLEM;6140,15847 -GsWnilYx;32570,75965 -wogIdbin;85071,70573 -vyuCmaFr;54647,80929 -foPuxxqU;88133,6077 -oLsghaKH;34416,3060 -NxlFAUHJ;72497,73162 -LJHZjcXg;84981,19050 -dDBFRJWx;15792,7574 -dLbTUYTX;52666,56833 -cpPDhgwZ;50165,77876 -RNobjbvG;7508,64344 -SoWYQfna;55016,89625 -xXrndDoy;11891,47563 -YeXWwDVf;2401,81318 -ueVMMCOG;4521,48661 -ukhryUKx;24526,79640 -BcDtGMjz;57942,55532 -NWtiaXmN;7491,72369 -IMmfaYxn;53867,26113 -vtcvePHC;58297,86543 -kyqVArAs;36728,75730 -SFgmOmxq;51811,50256 -GIbsXXQJ;83856,21162 -hlRqsRNG;30954,52507 -kcmoRVmQ;44059,8657 -aDGynqkb;6670,81479 -UGWydlZY;70844,38937 -WKbRQVVd;17803,1521 -VBKWXxCU;56390,50983 -iCccPvzP;69440,19409 -XBUpfrAg;31269,25667 -ReBViZcB;46286,71490 -bBxFXWgE;84732,28075 -IoPaNrPC;37237,55055 -LkAxuKwj;88470,42987 -mFrLzUWt;64810,80815 -XtLVRfRo;44398,11331 -FIokdgpm;18513,13032 -EEfNtyqz;34071,32985 -MjVRdswV;38035,72637 -SWwQVDci;72344,2579 -CwaUbsAe;41568,26269 -JCSiqCjG;1364,37322 -LbdDptYW;58121,59942 -WWhzVAZE;10567,47583 -tgtZhpal;52502,89901 -BQDLFgfb;54401,83162 -igzNODNA;9221,17210 -LfAwDqEj;88013,6449 -UeKMQQqa;37624,18836 -YRWrZWlb;50744,84206 -sUsbydEX;55238,12913 -VZWFJkHD;45434,49003 -TWRGXpHM;12459,35893 -sngekHGm;69473,10086 -xxuqMPCt;17787,21503 -xFdviMTG;49920,53554 -qAafyeGr;4205,37261 -HVNuZFgb;48076,39148 -gQKgvbEN;28814,75930 -LaNWAXRC;42769,27532 -SFEzcnkj;51405,14754 -iJtsSBjR;85228,75429 -nwEoyyok;60301,13257 -ZeJNlqCO;22582,74331 -bKDxuaPN;67214,56220 -VpUJrlCw;65978,29309 -iUiHvMFO;39702,84965 -knWmTAvX;13233,77168 -EgTYkhov;39647,17761 -pLwkfVEI;70849,84786 -cPrxFNpE;56567,25825 -DndzwxsX;40735,69850 -ZezmbqAY;33701,43873 -NrglllWH;35538,68603 -FdKfzVOj;19651,66136 -oAAuPNsW;1856,30166 -dVNdfzLI;71713,17280 -yBnFjxjT;11002,15757 -preiCwYe;76358,28698 -DujqlNRq;60047,76426 -puynebdE;30083,68049 -ZAvgAVAL;71610,48693 -HbsXMmmP;30046,17415 -MLerdTuH;51011,58206 -hTPahMPx;12322,45099 -kMQuSagY;64704,27048 -HAHniRQA;48749,87071 -HCOhAyST;51821,6747 -NrsbtNtH;68968,82444 -JVhfwjCE;51395,8621 -hUMyzNwE;63141,85730 -CezMDiuv;53355,82272 -xXeixNhU;69873,4102 -RJaQVDEv;78543,19331 -TguFnMQF;29424,43743 -NbDSYsRn;52227,70084 -nyCHCFYr;34591,64424 -cDzpJmEk;71643,40682 -cNhyrJcw;42716,3985 -yhgsCZoY;62107,68264 -UQKrqmol;85143,58483 -cYBvjPxI;89681,42011 -YeZKQUke;8800,66096 -diqEONKw;10972,15527 -eiXuOrjv;39396,25015 -ROArdcMg;50063,67604 -pZIjSFYg;6692,35414 -AlsVxBbL;48989,46557 -BCmiLifr;39695,25733 -qqPdygch;80547,46110 -yRFjgjer;18248,69221 -VuPSuTSN;28290,20751 -iEXhlYLz;35961,14784 -MGXcDopM;3778,50654 -bFStpRjQ;7833,1281 -PBdFbsDN;50122,71224 -KFBYhFDh;36110,60726 -VfmtspqC;32100,73226 -DGUanwuG;30175,31074 -uEEemXKD;66581,36480 -fwxquwdD;49334,40503 -WPTSURdN;76779,1376 -dfFNOMVN;47435,60668 -spdzSmjU;27969,73251 -OsDGdGCF;33529,20045 -jbGndWHS;65218,1161 -AMVANjWg;77030,72530 -KgBbTiPi;12804,21115 -gHJfbmsH;10541,69207 -CwoEBGfA;66011,36277 -xwvvVoTl;52111,48092 -EYxCPKSL;49577,13624 -gOTyzCnZ;73294,45505 -JuPQgyCn;58869,9551 -oKkTbMHa;28431,86656 -aFGixwpr;12711,22510 -dnuRamLR;37771,22505 -OdrkNFMt;67612,22326 -yDttjSKe;17050,81440 -gJnieIKt;22914,34053 -cFCxnNjL;88245,59561 -byNHsnBl;67691,2127 -QDbyztJi;64855,67148 -WwKTbCct;21129,38652 -EHqWfzrk;1752,14890 -UHXRyjub;10352,21637 -eDvRDfGi;4629,53130 -ZOQcQkFh;88376,9537 -yJUBAgha;2113,60675 -NqUKdOyM;15013,60203 -qsMmjPgU;32368,26853 -ufoDJlFB;40313,26885 -ZXmbSrvK;28743,13604 -yFneVuDv;79899,89644 -CshSRUjp;66307,44978 -NYrNCxeC;54871,84669 -dSBnSWIu;17467,39317 -dfrsiHeC;65362,7001 -lmupkTVJ;15268,70068 -CVnqhIdd;53492,19787 -EZjdvkvo;32636,10702 -BPKoBOPR;9612,28602 -hsnFAnLJ;79073,81565 -qpNQbDrU;51282,28839 -uNEXZaTB;29624,80518 -ibZCCuwX;78665,61472 -MgcTCtGq;74079,52349 -GMjzqgAn;66098,48448 -sflsOcAX;39641,36569 -ajQMrzOw;69567,33757 -UiAhQtiL;79092,56855 -WwWnJRIO;36038,89832 -GpcKLPeG;32838,14107 -qBlkckDu;80708,68224 -dslgIPxY;32898,38356 -LzrXmdgx;49421,74292 -VhgPIWsX;71256,5929 -LMfSMHrl;13268,43838 -ZZEmNWHz;78497,86283 -ocYXNAJd;55889,53313 -tnxLFOTg;32842,13503 -HzPqulwg;23592,20833 -QgMMyfXG;1176,73704 -XowNMfPU;17528,51275 -fRoFcGvU;82733,21132 -RRVSFDZX;31924,18440 -StHemxPa;39480,86487 -dlLpoJFm;59784,53290 -zKkqGHOl;73537,46674 -vcpfcxVi;63515,17867 -tCTVBHcJ;30419,2257 -OrcUjSEs;79621,40543 -XklDsKii;24820,87103 -zTQUrDbq;89787,31538 -ZmEantqV;79678,24495 -GwJMSNcx;45745,82975 -YWpHQenP;30030,85081 -kxWHCDIy;57146,5353 -lgbabnKO;1615,80507 -kZjVvIoY;16830,12312 -iHVSZcNj;37977,77968 -JFpNGNeO;36423,33684 -sBiSopFo;55025,42118 -JVqpuyWV;55933,2070 -tyZkYqfe;77964,48739 -NfVjQdkZ;53306,68056 -yStDMJIX;86319,70171 -lIYwufFC;35011,27236 -RLOLdayL;66426,27358 -UKcusvmM;71361,52842 -bUqsiXRV;22908,20993 -IpVuJqdB;53366,28320 -nRCqDBIm;40608,20700 -CWQnhuAj;70347,1028 -ayILmPlk;89009,72097 -jQxIwynx;37057,85496 -pLWXzqOs;81525,31450 -tpHFBJKv;43420,31512 -rsUxcNAF;80386,8987 -gyWRsjdI;36391,7455 -XrdBazez;13584,3659 -WaqiYELp;30973,85097 -GQdYirJp;15152,40888 -wDSAfiPD;57213,32349 -UOiPmjam;25474,16717 -MfDZYhsS;57929,36137 -PYRhHZtt;44821,50978 -PCJbAuVO;57177,59646 -PqLqDHZc;27801,24916 -oOfdMlQv;1704,42536 -ZoZgrlRN;72707,89203 -xxoaSMiz;72799,13290 -kdhxdeGn;12376,76292 -GBJWWWVV;13872,69844 -vbnWufVF;72616,86276 -IYlDOuaF;18911,43643 -ODhKaUVf;6908,67984 -tsJSlCLp;9443,54799 -prFCVuls;20375,59553 -HBMbXngV;18501,89516 -xtivWnte;76630,58715 -dBjZYTvd;54953,16842 -vQytitFe;43055,67859 -lJzGuhmq;61716,65217 -epMQgEgY;35345,82824 -FnwxKrMP;74424,82201 -UwUVVxIy;7714,35969 -zEliRwFR;39436,54213 -WfgufOfC;2334,54694 -vcLIVDNe;46600,13970 -rkFvfagi;53833,65802 -NXfAmMTL;18323,58275 -ydFEAFlO;30007,65796 -gDZbEkfe;77520,1353 -siZmTItL;88101,69707 -ZmJsfuIK;78293,29144 -XSmLTGvB;61011,81752 -VakYJarH;8507,52159 -gLMfBHwh;66311,18468 -eLehaxwh;74517,80222 -jrDXUspb;37716,80294 -jojQjQAg;76953,13563 -KDGtYnvG;75338,64612 -kRsFKZfw;3452,73460 -hNTgDZkE;61193,12222 -ZQemYqEJ;59804,50421 -LEdxcSyh;8598,38363 -txonOCCP;83737,66734 -bPROZeER;79450,40268 -geOpXVUH;24837,68410 -AUKBMKqs;54618,61741 -LdurvBSy;70763,7730 -mvrJMUlW;26640,31198 -vOnfVbiR;82773,50404 -HMNnYAWc;32621,24047 -Ufadvkso;70056,32342 -rifIEgig;27795,40568 -SNrZPQcR;45949,74583 -DiyRUBVy;58697,36981 -kFbpcrvn;53710,85438 -RyQNWkjO;29549,82723 -QwbIZhka;48463,41804 -lOZtlMSB;38461,52859 -hPspxJdt;51560,54106 -drCOHUJb;56028,56950 -HYKCledI;60070,39291 -wuwujaaX;17709,10111 -drIoRxom;37044,88436 -RbMqjPyK;35559,17876 -OOHmxjYR;32370,71799 -IYRvzHtk;56624,10879 -LlyyWfPk;67052,33843 -oZZxVBwD;84312,88890 -psjxiTBv;39161,82319 -NtlzBsUu;85396,89886 -AVCeOrtA;73932,52500 -HdpZIDxg;42511,53885 -UkIEWzuI;45813,30771 -VcbEpeXm;51653,84188 -QWzryvvU;71988,21116 -rRwLErQq;51008,31432 -UnSlwfrX;48822,19958 -nNAuDlpL;12368,30084 -hgQQkijY;23923,40688 -haSvOFAy;64015,29453 -MUlWUbYW;85239,83267 -wgxKOGxu;54145,59552 -dOALuIlZ;3106,73942 -vWyuuNAR;89985,77300 -PPrVtUar;33406,26739 -OOGjLRcI;34190,50565 -LQgcytIm;84358,78927 -WCYKcrbR;81725,9643 -LXthZPCI;76393,84576 -SkaSDFtU;55388,58715 -KEiSqDsR;8219,18909 -IKqZmlZj;47629,3424 -YrNzVdnV;57126,68365 -ywXZkXvV;37106,51130 -SXhzblcv;34684,34583 -mfhznJNN;3506,19601 -HNtGJXfy;30359,27790 -ShpULPDq;84666,34531 -IfFahIdf;44063,86282 -LLtFOJFx;85577,86134 -jDpBGpUo;14611,89635 -XqkZaMNY;87176,27511 -lfabpeIf;44197,55159 -HLDXKthJ;38952,82561 -GBmkRLTO;23183,55212 -WocytYRF;8902,89057 -liEZawjS;3706,37491 -vMNsoDmm;37370,66376 -vRfUoCpz;11388,32973 -sfWBBJws;55651,39639 -qQNcuMVx;71425,88649 -ifVOjAOp;32205,15490 -ArhAWkUV;76229,3855 -mUxteMbz;58627,85761 -jQWFSHlT;67150,77152 -BcyEEFmB;58744,35645 -IhbkDldz;20085,68211 -DvTaDmjW;73423,58494 -sRvHneBc;37324,50311 -cBjDjffa;31622,65057 -UlXRtyjN;9378,39093 -LNCVecOm;5097,87612 -hWKKBvtt;51431,59617 -DpwtbTeI;30669,74076 -pXSVsnKr;19070,77098 -SApSAguP;39258,70943 -JRpmFLKa;13709,22107 -joNojzMq;9466,60413 -YNXDTytJ;49300,82245 -EwCecmvr;59306,26740 -FAAVrTJE;69272,10854 -lhTuLTXQ;82742,71992 -DnZGPLEn;16599,61068 -utUUHCPn;87861,21430 -ockjeVWL;62143,21619 -YRFdWyDf;76928,27712 -wRfCeqYb;4096,37868 -SnKdhYRG;89864,87682 -mWsjUYak;44303,14173 -vraNMHne;70513,59388 -qOYjjNWq;52038,24160 -zsXgEOfl;77010,22157 -xvGfHfrY;89826,14989 -fWuhiMxA;61567,39639 -ZqyyoVIw;74132,33046 -kmrwHZSX;8968,1116 -PGzfhASc;59035,34319 -bLXAaOYK;47096,35609 -xSZBFvxA;76466,89145 -OZLcfCKP;53607,72371 -pHaPGanr;30295,63686 -gDoAnwqC;80030,12568 -gVHSPLMc;52613,2187 -yupvLyIo;60761,43084 -KnjnJvFt;2550,15609 -pNcEKgeH;32098,29433 -SrXzDOcK;30816,84313 -SYarhwiS;4982,76976 -nSNCGpJf;8369,46664 -nMBNDDgI;57484,60511 -DVENZfUd;53341,32767 -ZRewvSnj;29912,2825 -KBpZBxoh;2865,34297 -oBTIKHal;81786,61982 -BKrMgupa;34542,52408 -TLsMOpoc;74106,13497 -LXSofTXN;32656,82425 -CoTqNKMJ;83391,73357 -XGDYMcTf;30568,48103 -tFUXcgEF;61827,88118 -VzcQRLyx;26154,46733 -SCKiMbDz;58603,80242 -xCbDfZqa;8688,87510 -ufPhJTDS;5512,28575 -iMMuZvds;83342,54140 -kAGTEhQD;19380,86951 -aeGsuhPa;25243,65352 -itCgIlUY;75679,70273 -HeMlnUgN;4015,46470 -pmlCjsqo;2879,40249 -pjRppbqA;88296,32868 -tKzoFfSv;53641,69392 -xGpPbsXi;17348,80097 -aqUBSFqu;20570,7597 -OJFJVUPT;6480,34445 -VIffnUFZ;24432,74583 -vfVJgsEv;25022,56781 -evcvnFIr;75942,25479 -mXFzKPGt;61000,54083 -qvQxrIxg;36987,62655 -NrtSNfcu;10228,33763 -cJCSkgnv;88449,48546 -niTDutms;73337,36278 -obTUfAGl;18391,2987 -IRwXBBoi;66456,33377 -sJBKmbNn;67879,24541 -PQgTowCn;44228,65159 -nYwdHTnl;4056,74554 -TlgmnUqJ;7213,37584 -nWnDXvsQ;21647,78001 -OWBeAqCi;17326,3534 -zHvlOewd;8385,62356 -pkSdmiVq;15349,10051 -jaFEPGBP;21171,86590 -nkkBALPP;2609,80949 -XUDkzVTi;71098,15528 -SSuqoXTa;88226,6082 -wWtutZEF;31896,55649 -DuaufPuu;12047,71060 -TbbPkcAS;22886,68680 -JQfmvnSf;69846,14128 -HaeOMsQY;61146,68488 -ZAiVeOnx;7001,72483 -PPzVyeNc;49882,29067 -rrjzzMrZ;10494,61907 -jUtusnwZ;63310,64297 -WLTUzgTw;73394,85403 -SkBsvDGq;35598,29491 -avRZqggu;86527,54754 -NRiHafnl;10876,87658 -zNOYeOdR;22524,80108 -KFZCjRhM;62320,16633 -HhMbYvGl;82770,30030 -WqDJaFmI;44193,56502 -liHSNcmj;73288,72826 -leGpVsJO;61369,14822 -fLkODduJ;61813,6778 -GwGJkwmE;18430,76310 -dqhcaSYG;7023,10549 -dTjrYJOl;2983,80699 -YYIexVMm;20300,68989 -vwzSEBOM;63856,73915 -YKcKtNcF;35116,84870 -CHXnINtP;39977,65682 -sPpiApMX;65199,13055 -PQjUTOpC;43118,39845 -mhOBpNKi;79220,48643 -wMTlcCSY;63845,24391 -YQEsUvqC;46800,34737 -AQxEZBaE;51233,45701 -GzupHCPy;70258,45943 -QwaihjnL;26719,41376 -vLhnrdxM;18913,87230 -XrnPKWAc;31243,82506 -iNxcTGcU;78320,77055 -iwpDjuVw;23785,52293 -LFcQXxmO;63703,45803 -sZykDzlP;33648,20192 -MvhiEJAl;26567,36653 -ZeYJqWPn;87900,17836 -peaKTSXc;80772,65618 -QUviHvhT;36454,55582 -YvGUTApC;43201,52366 -dzWexeTD;27048,12599 -iDXTfvwI;15057,50116 -YHDkkfek;14414,84472 -hzzDmVgF;31368,5654 -wIRyxziP;76845,89373 -wIRPcgfT;89789,77432 -orRCdleu;58945,80247 -IpchKRQe;44603,25538 -XHNtWamD;15189,4616 -OalQuUIc;4435,67223 -MOHBcsAA;55832,10118 -TkBfMqfx;86917,50955 -FQGGefve;5440,85874 -VIfkOqFj;19398,54794 -qNyifnII;44931,26684 -TTQrzuAE;4664,89892 -RrknfJbq;26773,49212 -CFPHfbhD;7040,22766 -ZGCKYtCT;12991,12354 -JCEHJDOE;22995,41211 -xxkuuCtR;72436,5735 -Inagoyto;69835,58849 -NEeutKPF;58056,71990 -sbsGDtBS;39777,72822 -VWfdTOst;39791,41950 -fzTzxdPI;36503,52980 -XURdeINT;77081,6025 -ltjxDNaq;43716,58214 -VfyZLhKn;41830,7552 -ruzNOQbZ;31665,58053 -gyUdJOSB;44623,66660 -thRUbrqc;62570,51069 -THcecdPg;20487,60817 -RaaIVxmn;13033,9026 -RxYCHTag;56226,85781 -ZcsvvElL;34649,10379 -TayuTrIM;72614,3984 -UBwbyByt;13526,54849 -DNzLTCrU;87369,67978 -kVrUAYWp;52235,88317 -EwrrNrUG;42660,12376 -FBSRxZnX;24544,76014 -RQecKflI;23911,55429 -lWiNyMeC;65319,38541 -YDkKmlrS;50150,87228 -QSUpBKIt;53500,44788 -OVckJlWU;14529,54174 -VJPDCkcY;84837,59504 -gNtrXSPe;4624,78529 -xQbyNSSw;2317,32058 -DKQZaoBP;43007,14177 -NBDZuHqI;9903,70111 -QKmFILBJ;65581,37889 -xtROmcmi;85714,45004 -vIfnXTGI;19881,37827 -XdhOXJVm;48789,39870 -lvpJeNoi;85422,1246 -VsSgqObz;82368,3331 -mtgpfpNj;28918,86939 -ithOGlOB;67234,63204 -zSXQuOsA;34716,42694 -uShbXkEn;63368,76131 -dDzVwBiQ;56664,23487 -ztKMKxFI;58104,84014 -NURKFysn;6357,50769 -gaZGsnVo;24480,9252 -mfBtaBni;65178,33685 -kVUvpXxm;30810,8485 -UNslILpN;50368,66315 -gWhGdiON;39810,81821 -eAqyHvll;50654,13065 -lTnnrqIa;59817,49663 -aLjUnyoS;73274,18580 -FeLrkUIf;32297,33086 -SXbgdFCt;67616,68163 -dKszKMQt;65845,52125 -iHGgmvxG;74374,81384 -IJHPOWSI;83884,59498 -jlHuEtRo;75625,66806 -DeQIOCML;7680,22322 -ItMUDxQR;42928,68434 -sBoLcyQy;56428,83943 -isrEuuGH;14137,74904 -zERVypQz;16668,88447 -GJyPDxLv;21703,65646 -uFLLeHVy;36901,66475 -JKEQComA;12619,38987 -pnOeDRao;79266,40698 -QGMGgmhX;39046,68096 -xrbupMbv;59820,18181 -SMOvKgIm;7482,59759 -BHcVKImF;84609,49590 -YoQZxunq;88046,29203 -JuLHaJBr;15937,66607 -OLZqgfHG;62212,86012 -oDxndptn;4433,22950 -RQCKasFi;58074,45684 -jDfccLkY;28323,56475 -bXIehiGi;69260,53465 -mjyGFWxU;51006,14775 -ZEEdNEgG;20028,56498 -qCTHOpGH;71784,30021 -WSwVfBEH;37715,26664 -EVzJfVsp;58312,70795 -osOvfckZ;71983,51791 -TtqfOvki;86782,44435 -unaOguHe;2428,57497 -xjgHYWlT;17966,54829 -oogUNPes;80954,24371 -hXKqkaHK;24870,84072 -eSIxasHs;21538,49631 -YSKKwNuH;56849,32770 -ivGAnqph;64272,40489 -zwDlQlpy;10709,41939 -NLRLIxJM;84741,12319 -LfVxpCfF;27391,5298 -CvUWZjKp;27753,76159 -XNBimPaR;32722,40241 -qTGnSIKN;63036,63223 -gVqPYojY;86659,74034 -pWKbrBmw;66731,55333 -uzArpdBZ;64399,19139 -bBzCXhBk;50786,11451 -WKQAZyfT;61347,54527 -muKfqjra;37570,44350 -unTtKeqH;72452,38782 -WFCDEsGN;82663,15295 -fXjBjIGz;71432,10013 -eNknpbPf;41692,38374 -jEmBMsKb;49606,30016 -rJbHhRrK;65044,23626 -duIoqnaz;86474,83084 -yASZSTit;54563,77228 -LBMbAGuk;15097,31790 -KNchlJyS;64409,19340 -gtzDYBQr;24598,66284 -kUpYqsli;21009,37523 -gemLCBCa;39183,7677 -sHUhyqqD;47647,17670 -hwLHXCWy;37436,22263 -EMbLatka;25500,63691 -RctLiVDd;57886,86008 -PbBnpmZG;82341,80584 -crCjjZbw;61370,19182 -RcNmpAxk;32897,85769 -vWaMXEaA;65574,27844 -mKcEvfxw;37659,59060 -mYjHjOYU;9126,18559 -TEndRhwS;40421,29424 -WkjvPVTr;6334,23428 -eRTPfapP;7167,47956 -CXtzEnph;18925,78963 -ZiTjEldu;12742,65872 -zXThmABp;63883,13198 -LiUZEeaF;86092,24221 -SOnAwmyY;10430,36920 -eAXmkMhu;82046,85204 -RCThrdBd;65096,4800 -InjPqSJz;42633,78360 -JvqNyRnV;78540,12756 -RqQCxqRZ;81120,3250 -uXphibUI;22726,40911 -UPyqUndh;16541,66812 -pTTeiThN;4743,86139 -kWtHMETh;15302,3596 -QbxRuYBT;39872,69704 -aHZSSHYW;36841,83035 -VhBEgmwy;83103,28050 -KuDeBYjw;81854,54601 -kGerIaKO;52351,28094 -OmhdjDVN;26719,79745 -HNLVbgbc;60597,11101 -dGDoIgEY;36027,56663 -JXcLyXVB;24232,38792 -mOufhxXg;23845,78510 -wofRZUFr;65757,18587 -TnYdGSXw;83715,85222 -xwOsWfkh;44209,85428 -TeGefVCI;77747,39283 -nPNPsImi;46966,56359 -zeKjDTXq;7401,56660 -UKyfpmbj;56841,22336 -XKCaGiJj;55366,77004 -zupckUze;1303,32519 -XvtwUpgo;61048,29267 -aptsZGqu;71091,8749 -mBUqPPVr;24537,87622 -gumpCywt;38887,19914 -jeyaiOFC;63012,62260 -VBQMkeAr;35809,14413 -FThnqwJF;42588,81361 -RMpLjjev;68583,85742 -xCDCuXHs;25314,25085 -YZXkXEyM;47872,49595 -pOhHwGYu;11470,82878 -JCisjmsl;21814,8867 -lWetaesO;50185,5455 -ribdQrax;5152,69996 -izvRaCUA;67431,63631 -rlreFipr;37571,55979 -vsyeEBuI;30364,36234 -VuHcodBa;3086,52140 -SVgExiRL;72957,60245 -bFqPBWEl;44006,45390 -utCmCyUa;7999,53063 -KPPlRSKI;20274,51680 -ZBVpacML;49814,73964 -FInijXIs;53482,37780 -UOStwCtX;27147,25489 -iKAMQAHK;31269,76576 -POvIUmay;15640,78105 -AWJqZmNV;46968,69002 -ETVJDaZw;70455,65377 -YDyKNRXu;85066,26996 -HhMiPDJc;83303,60461 -YYwdnKQJ;78772,21599 -qxhaSNhy;5304,63044 -BWkOtiOR;62466,67960 -SzQhfSPZ;1085,29502 -VgYIQOPc;84852,58595 -FCTNwwpw;14946,62315 -AeJQHIbs;77470,27575 -dyAzUZZW;68156,22541 -cqoMoIiw;51187,23714 -XagJGsgG;49015,2357 -OhorLMHn;72707,69761 -ZqsqgtUS;58738,51702 -SAmtONmc;28267,54448 -aMFazbwt;23740,78499 -GRgoDkdE;40575,13922 -GxisFwdC;16204,33156 -EAOyiwTi;10155,39725 -frxqiDGX;76516,27126 -YcSTcxYN;11314,33502 -Gyzdnfyf;26275,62857 -ywaeMfVI;24060,1922 -TjeLUvRU;1627,87308 -GcBvStEy;70954,62235 -PSXvmrwO;9284,76561 -vorzwjPx;2664,70751 -DyBjNFUm;35784,4467 -QrpxZFeQ;64636,74101 -jUqHccKF;71730,8183 -vRKKkPBM;69260,71327 -fuitrvWn;24994,68034 -snZIXcEb;44654,30924 -EPbokyPh;6409,10271 -yLjigQUw;27247,66673 -pnEAAuUu;74589,32931 -XfWWyFSX;21804,7129 -jAdnVhDi;67226,72217 -qbJDzvdE;65110,72066 -mXDYUzUU;22344,62123 -juLSHtJD;2437,52271 -sxYlsuDW;55911,89800 -IwVRHIMD;32451,86478 -EqnZyLTg;69157,82311 -cPhMfkEB;32883,10938 -wsTSaVoL;72783,68895 -NhKvAGBY;81919,58125 -MVrpoQjB;54421,27487 -EAgBajqu;32593,84388 -OYhytTIY;51583,56332 -IILFRqXf;21059,54278 -JGLAIOYg;62865,38627 -CtCsHShH;28944,31349 -xjwXbFMJ;72022,27110 -hAUaHKTN;86762,73774 -VnIFQbLd;29003,55186 -oZKJQaLK;58396,76174 -hiQVAYXf;65541,28264 -ceqaJguI;4748,89059 -PNcRgAZE;41475,8680 -MbOLkLXA;46572,33480 -EPDKDDVv;12531,2607 -zloJIGeK;31088,49463 -UurBtvFR;2285,32017 -wuJYxLad;53345,65670 -YvExiaII;47415,13237 -lbdBDGeH;22073,26494 -UTjWjTlk;70013,18815 -tukemoRL;17931,74074 -iArDrRWm;40553,35090 -EjzssCNo;48836,88638 -pCCIKXvO;14173,79999 -vxiKGqYC;36996,71968 -CfrTBEVH;19300,3783 -kftliaMy;60562,67371 -CZJXYCiu;89923,29416 -plBEkaQx;52427,10750 -MFDqbhsQ;88879,68268 -lQSYlTzU;65959,73019 -RywPCRNQ;74458,78099 -wuJdeDdX;6812,70133 -RtTznyWu;52683,19012 -cvnpGOFA;64950,65107 -MIblzDwD;12254,51833 -wxrSDaxo;15806,9606 -cACEdIff;55759,24778 -XhPzSApd;34552,78282 -HryAGALc;71007,26428 -wbooWjJT;30589,37255 -QHwagWTl;22792,10122 -mzdbZxwH;57656,27607 -pswZasxe;5648,89166 -BgdoMkod;6507,56328 -BZZdGaEx;43368,41279 -xtEnhloi;29195,22436 -qJMhKYKb;9000,70872 -bavqPwcz;69659,58514 -plUxgSgz;6703,24654 -oDSFLjJI;41896,8335 -vkDMYbWm;80336,15373 -SBiDMVYn;8947,36588 -IWbfNRFP;3605,42233 -oqotPlpe;44531,62918 -ZidGxgYv;56195,74092 -qgXKzMtp;68429,25720 -YRPYuXty;66986,31881 -WhrXKKzn;72633,1765 -UahNbMNd;63715,17804 -dZCSIbVl;87597,25271 -jasPbAan;21136,23145 -EAVbIdco;41564,53074 -HncMePFL;78419,22413 -UZijLbDD;81711,52026 -omyExiAM;14049,10490 -zxGlJfim;36801,16146 -YHMxhVKn;34162,45492 -mjWShWsg;64477,20531 -fiVhgheQ;6261,2133 -oIVxPojK;37673,65012 -TzupmktU;47125,82131 -uYJChRTp;27129,74587 -cQPNHlwH;64760,63989 -CzMPEefn;64238,1610 -wPEJWRcS;66773,46350 -PnbpMABm;44382,2495 -vpESfzZg;46358,87493 -xuWGijGk;21105,84716 -OdCTTxlM;26603,69643 -FLdquxJo;59919,1460 -clmCXizL;43218,63344 -kESxKwth;31018,7108 -TDeOFIWO;55059,52777 -FRAfWoxA;37979,61473 -wakLwOKX;34084,70188 -GoHdPfkc;83507,46617 -LrQmNQtS;35344,19633 -qWXfIUNI;79297,79255 -SdpgwfFL;45684,30776 -RFvElQUc;27601,68312 -wntRuvYF;50923,18154 -bXcBlMWv;2532,53081 -UdZyDvgA;50123,9531 -aOqizLBr;47416,41526 -WjzDclgp;1188,60394 -uUkmDFlk;88950,22365 -VECNTusB;87414,52460 -GAhJqbvT;84914,33155 -FolYOQXG;19976,65586 -HTbfZUOP;69566,32002 -DmshOAqP;11457,84384 -GylErYjo;82136,43151 -hcXCfjBn;58355,57964 -EjWkyrWj;61113,80885 -MnkStphN;43847,68859 -dfiFnAgZ;30795,18143 -lzLJTzuw;36022,9070 -ZBmMwvZt;67439,38176 -JebiNiQm;55286,13419 -WDPlKESN;77172,69029 -vbrykGmx;46947,6751 -PJOkYOWj;13890,19847 -PhNAYeKy;69292,15333 -dMiYNfoj;47619,12507 -LFYSMQyx;52891,76777 -bftgqozA;26040,39476 -LylUBGwU;8396,19524 -OwQOVDID;88542,67414 -EiNtbwuR;43116,17520 -bPuHaSDa;14161,42064 -kQpTqyPj;26950,11599 -AkfgUkwH;41698,5125 -lYUgMyPx;40710,1741 -tPVsLANN;38600,61081 -nGGRNxAK;46631,76683 -xaVFAaCC;8467,9898 -TVsbiHfR;46651,29807 -ApSHDTBh;73424,45685 -lxjuaxMX;8473,78422 -IaPhnzdb;80470,22004 -bOiKWnSG;27490,47975 -CrIeBgnu;52826,11267 -HQExoYuD;74243,83977 -GeOqcXnj;4520,70285 -PCQgtCHb;2168,38908 -KCWLwKSV;80843,26975 -iBigjErl;49342,49005 -ftyGXVkV;57629,63037 -dnWMXOpw;55350,88282 -EXjeFouR;65805,2944 -sUTkquma;59909,57633 -IsFbiqVy;72577,51576 -agXEsFxW;68223,23095 -FZqFHhiP;51142,83753 -wKpAUZaZ;2656,87121 -fbVgysXm;39009,78173 -PuMrZJpP;26733,9910 -NyWHUBJx;4790,44014 -VZcVWsAM;27064,65126 -pTyIaYhr;78419,77706 -uReBvtgb;17086,76966 -ijVIhFfk;18312,60791 -PaMYGWxG;46159,56638 -KeeOgxWL;67841,69109 -GZGnzpms;69330,24737 -ZPXePzZG;89448,56080 -ndMObxsN;43265,12885 -NvGgioKy;30547,17025 -LWzrcERB;68468,79853 -plJINgpD;16104,33761 -DMycUjqg;55445,39758 -wzUXiQaY;67036,82007 -IXfjshSy;59192,40121 -ZaNECXDn;21377,5802 -TpfNWnSW;5871,13712 -EvYoFWYU;49116,56614 -dDVfqZgj;11108,46122 -LhdedXqz;31108,65746 -DzIscXGk;39508,53294 -wKNddkRZ;20759,46448 -RLUisaCj;34206,62987 -pLoLdDJG;22590,64930 -jXnjnoqw;71828,21548 -rbDlxHhN;48193,83195 -hxKoDgem;34268,66566 -MlgJlbSc;32120,73585 -uCDUiJUe;35243,39344 -PXDRgnIJ;89268,69550 -MSLrSRJN;77277,41539 -GWxJInzU;25367,40789 -QbzCIPRc;42972,31074 -lzAqonPw;69938,69545 -AumsqUVa;52159,89690 -ZZSEQaSU;40508,13621 -HjmuzXNn;67209,4524 -MEPtmPNe;2209,72717 -NsDibCyw;69284,7157 -LyBVkjWp;7355,42088 -rGdJyWGL;71571,87141 -zdkKpUxu;10065,31873 -SDNDuSkQ;11076,79984 -tWAWDeCS;80191,22071 -WgmRfQHq;54118,38990 -DsBsndWg;36924,33476 -LQeugaAY;16647,78316 -UpaVbEtm;78362,82746 -XJWglEjj;19340,84615 -bkkdRQop;15828,54250 -WZrVEhRS;26675,88823 -fkISQjio;57566,24940 -lQxXXoIu;65948,69881 -SpUVUfjz;62248,68747 -ChEvljPV;78562,87166 -YNKDrdJw;77723,36897 -tjzrhaoC;51902,58971 -LdopvNgM;6896,51798 -aNKboJRh;41709,21095 -HTHBVyUP;27754,60394 -YElLPwAV;80573,34974 -GdFFpQgo;60080,85564 -bCCxnSai;19185,34820 -mypTbTQM;62799,41118 -ABdNNuzm;77677,42138 -wEwANpgi;37199,56082 -AWsCGOXn;32357,42883 -tnwEYQpc;11924,60194 -EFiTrgVr;22362,27798 -WUcRpICD;61125,5686 -zWyLESuD;81494,82490 -BEKSyFev;67204,10654 -BxcbioQv;75110,42174 -bIyMDotu;13199,74333 -yrujVFbB;19676,60006 -ISQOdRPw;76474,45583 -evWTHbbu;32232,5070 -kkWQbAVM;33503,43757 -yjVyAwbO;78647,42200 -ijxmoYOC;80860,70547 -suropmzL;55827,21475 -usOmNOkG;76312,1766 -EmlrooWf;6974,77378 -HzqPHOXj;17875,9785 -mSUNxoEe;38241,41362 -rQzhEIJu;18227,18044 -fSQjpSRh;48751,86807 -zVkHQJJG;33975,62636 -aTUcszFX;82032,63860 -hYVWnJxM;26019,14075 -DfrByTJX;78185,26201 -WgKVOHES;36403,82932 -GxZTjyyO;10027,45056 -XiunKUll;66409,8732 -DAuyMeIV;47796,7461 -fYCqFhOi;71924,41209 -WcehkQrK;57064,27824 -PWLQBTJu;72469,79725 -LbLZihsv;29604,7189 -hTUJewkZ;63039,45678 -kbfqsBXx;19388,82561 -kMWMiAiH;4392,28029 -igbWEVLG;1647,8590 -wunzxKBl;78962,27149 -SpFgYUZn;67046,2235 -rHhhvZKM;40345,19358 -EefXjUtK;3263,11822 -tVKXteEa;86781,9518 -AdvmlIDZ;11396,60259 -kwJmGOgc;18036,58998 -kCkGCeDM;67424,76779 -cGgCUtEu;16449,20986 -axHZVxkL;39430,42809 -YdxroVOC;66203,31722 -YgTPNDZE;13765,29433 -cHDATjZs;85306,1088 -UtEGQNCQ;42349,56414 -dzXQWqan;49211,62000 -sgdVMTMs;84909,66891 -PApDADwb;3111,51416 -AcpaaDFf;72634,49342 -QlDfYjgs;88399,62256 -aHNLcCsh;26964,62786 -seHXcxZg;56040,79958 -zzbsTnUX;28118,42494 -OehyCzXm;10691,28768 -ZypYBeky;12551,5653 -qHzzRZEA;43781,40938 -BUkaFATz;75469,15001 -MOcCstSy;39171,10209 -MdFRnvVe;51840,65112 -vAwokcMt;20821,52206 -RLwuKUuP;71709,8299 -UXDSEaZE;30132,82426 -buknBcoL;12027,66909 -JljsajkV;12847,16970 -uFZKhQON;4438,83041 -zviMbpJD;75590,45230 -ZgcXxILR;85090,57185 -beXwhyjc;26710,45733 -okrFquWQ;12342,39410 -WtogmTpq;2628,12391 -NNHcrDWX;14231,29166 -LBvnhzvf;1623,82005 -xLEOMeBy;13440,59291 -XgyhQVNF;18156,32001 -SFtNLXBe;9364,65743 -RPxGAEhy;6884,26550 -SRgkqGzj;44722,39271 -BpWDhpSJ;26039,1264 -dmzIwQLv;46647,44975 -JqjyhGqB;25475,9878 -VhGvmmaQ;65363,56025 -wrAlSYxa;51229,70054 -KyWEpRtC;9758,39204 -KuXWNOpE;85030,3443 -IUzCwTtd;3641,46679 -GlvlsRvf;2808,32579 -inUfOssb;76591,88553 -SIwJKGgU;72846,28586 -soXlshdQ;1855,77173 -KMPqxfnx;35211,68738 -UoPnaNtY;67819,84967 -Aibnbfgj;34461,41054 -TSVXGOtu;56530,4747 -QiXnbejC;42928,4844 -CmiwNiVD;82369,66172 -rWASiWVE;12842,64835 -xUjJPxDg;17006,85291 -ETDdgrUS;42447,77057 -sQmSzBeB;77214,29408 -cJdhLvda;46457,32885 -cFJfcotq;42372,34941 -lEAfiGKN;17969,26358 -HRBzWmKJ;64751,19466 -gsxdKyAU;83496,8848 -foXUuzGe;66117,70548 -ZKxGFTnz;62676,41271 -EnPHnEHx;27082,28135 -XsMKnERI;78964,36286 -qayvqUEI;80856,35756 -oHcnSzBB;50429,19814 -XFAgOCiN;13988,44636 -BDHKqFEU;26733,85772 -hGpjAVSs;63421,81270 -jAFjNwdH;83521,23986 -TGHZczEi;67536,55133 -PxESHxif;85994,57272 -vPQuOUPT;32135,68416 -TryTtfhX;39447,46997 -NUyTUwHg;56026,46274 -DeUzwUdS;83175,50652 -fmNoXfEn;44795,83417 -HyMzTjEm;30787,38929 -ZstGmThc;12912,23579 -gdleUHQy;48374,15729 -vuuSheHc;25723,12394 -cHmJswfK;8738,30749 -fuXKmNYK;61288,64661 -wUACYGPY;17219,15045 -dkNaXZRi;77837,47055 -dzYgSUrp;85329,56029 -UCOPwMzJ;76074,86535 -cRIlHGmm;41657,10889 -PFVcYfAW;17846,39807 -siHjxSzf;34799,72824 -klEueeuY;68081,41088 -fANSqHmc;34396,77124 -ZkCDeXnb;59657,71220 -TecLhkNU;42868,35524 -iLhWdzFF;56978,8719 -YDSYSxpw;89184,1996 -RKwFPLXw;8298,81362 -ZJIbRSBe;54369,30390 -ThruTpUg;85317,47087 -tONJxtky;75444,39373 -WRiNgyDQ;33004,45489 -vlpcQctr;63128,83243 -GoyeaPrL;64581,53511 -pBpXxQeZ;58727,31973 -SbLUxaOz;20394,82639 -ntFZkcME;8424,60710 -FTdGNZvf;85729,86139 -kdcNIABH;76598,89856 -aewDgbMv;50903,25155 -OlWqzoNC;19002,85886 -WjwNLKJQ;32256,41604 -IAODWupk;85349,56007 -LoQJaKgQ;83839,54246 -EnyvqRga;5090,88980 -QQbWzxZS;81490,49053 -tPeBTvAN;33479,74193 -cwCTuivM;45147,20997 -WZebODAD;34604,74361 -SJOWkFGa;40459,29910 -stoBrvlF;85130,76378 -Jhnoczys;23963,65052 -jDZtIUCS;73495,9884 -bhePLFHN;33866,13531 -xDwykmfv;79864,88852 -eJFUHRYY;18525,21805 -onyobSpL;71351,72040 -XbNxExuS;3472,28976 -FdBqujZO;82628,71569 -BuzFOnwA;32556,67419 -vdOGGxKC;17896,19369 -UWjicAHQ;3348,25339 -HPgVFsNI;87009,47877 -xOvQZHEo;33249,59737 -rlkvchtU;7295,87405 -PYWrnliS;23479,72653 -sjwYIQYK;81707,50794 -ApkEIvPu;31980,33230 -VFHoNziL;26134,60946 -QWeVHVsg;76011,75448 -ZYAbScgp;59653,16648 -RJMjDYrZ;67461,58444 -qDRjjURK;23374,1449 -SQIIGQSz;30606,64622 -UZSbAqHj;5452,23382 -sgNVtOfH;30715,18590 -FsFnoVwd;50044,3657 -GmRAUZaB;45899,86715 -HxDNZhFi;12552,88930 -jQaFZtRG;36104,39088 -snaMVUNr;73915,5047 -UIjQeRXS;16686,1650 -PflhoLdO;17912,24708 -ommoEwMW;82286,34922 -vRUBlKiL;11622,60032 -PnJmAPix;21544,63417 -ESIBmLHF;67593,49640 -FliowBBy;75960,58741 -jWkhlFGN;15243,55289 -rXbHFPZk;69671,5138 -SBvErZRW;87640,27859 -zwIIopUY;7733,84086 -TFRJZvsy;29020,65967 -tBgpXjRW;20419,51753 -rVWsyBEt;63350,12303 -MqANILgT;69890,79079 -QoUhlRXC;71086,73901 -EGmtlBrd;45256,8736 -tkgWpsBe;89690,33613 -siZJcRNs;52659,49065 -PMCxHcsQ;20455,69332 -zbGiJjnn;56389,5497 -kVzGywDn;23099,58678 -TYhVRGRV;18395,45819 -FUMPSFPN;42702,6421 -Uzlnifif;50561,89294 -feZSTpcq;34429,7040 -lmmPlHAN;26927,7048 -nKTLdjlt;70982,55946 -ETCReZRc;21743,62603 -ZuasCETW;89697,30686 -PmYyAPOJ;42087,18683 -BzExEgdO;26124,73460 -XywHtlIo;72543,31341 -jKgPplfs;53373,52261 -fSKkVkwh;82922,16996 -OkXrDbzw;67636,36170 -fjrrVwVD;41256,78762 -epiHIMle;42854,4241 -LeIlsOYl;85030,4446 -tZLkfCUQ;77066,49065 -faqDlgye;80628,18348 -GslMheCP;76292,76113 -vxUuZoPq;43765,67257 -SFwJZBtr;79574,19858 -kXroGPKQ;41381,52864 -ikKSPfPz;39282,74283 -YmXiOCuq;71517,56641 -YrXcziTJ;84739,43565 -oQZboIDY;25058,26494 -raLttgHo;60669,44720 -rjPoOuRJ;81854,36902 -cvLigfvQ;85203,8356 -YrbnRbco;89007,83202 -oLmTuEXz;47633,76885 -ZOLGsXKG;86604,52766 -rhEJBamV;71452,16618 -MzrUWxYS;69737,42696 -iuAINpeP;50916,65196 -dTpahlCH;20469,57480 -AuyCCozk;33855,19908 -XGqbKitk;39381,67675 -lMIQerdb;39195,85098 -PMmAxiJN;81826,72838 -KaDRQQIc;11352,13721 -ueSllTaf;17189,18778 -RKrwsByS;70020,38864 -USisHxqF;9156,65544 -dMiXdCHK;84291,58127 -jDbDOFxN;9873,40856 -LBkDRjlR;66289,15117 -pbguvPgx;37623,12355 -AOWFuxhX;15080,48549 -ntaCWmeG;15879,50865 -KARONNuY;1691,13938 -IbEovUym;74537,56089 -tCxGLOIh;31462,40064 -xkHHjIsf;35021,65965 -vugwCyfb;84997,9756 -dQkddywx;23542,39304 -sxIVJRqH;35127,23090 -FnBgxRmz;62385,12808 -PANkANqj;25722,6645 -JNSZSMGx;37341,43313 -CCKJorpG;74527,66498 -eOOHILnp;38094,23382 -SJIsmRef;74549,67990 -ngYHEMtG;89752,49227 -lvnjsLax;41897,41140 -GJuSYERF;14753,35478 -qrrVIpoX;83905,3817 -IoPqmXpj;19443,74693 -ktKLZoqv;39411,41495 -TMIIBFms;65884,3182 -hWphRkUr;38321,70847 -DqARBkpQ;30460,27482 -OKvDduPC;24626,51008 -gfqBOWnf;23400,70651 -tnkKmWCR;82546,13614 -gPyuQRhK;83134,89446 -SHBVUUPp;27843,52348 -RwHEEyQm;15825,60413 -tRglmGyG;62108,75194 -lJYvqVDR;11729,31219 -HcSJOXql;59480,17659 -QmJMijlS;33242,80937 -flFvATCy;40839,79979 -dEDxWwpz;34827,55693 -LhIUwQwu;36882,75144 -aFDhkAFc;85567,11370 -lWVTUfjS;5754,78873 -iZIGIqTG;53876,4097 -tmPqvNYL;85909,33173 -TvmkoSKg;69085,6847 -RZIfXnnP;80613,80195 -vZmhkTWR;33196,17337 -NNLWNmij;87457,11530 -uMVitQBV;78824,87590 -dArCvCrd;89599,77776 -vZKTMzYU;72511,83543 -IRkgjgst;6545,30473 -izpgmjeE;2533,33688 -UKYiHQJt;89585,45764 -TlDuWWav;27619,31031 -MbmIyTvG;64299,72649 -vLkKJWUW;83467,50803 -kFURfBYs;57816,50319 -rQJTjqfs;31011,13066 -TgKsKhAJ;1118,69020 -XuoicCgz;1507,24005 -YvWAQHlz;32418,46990 -tdlQuROn;31738,27281 -MJrRxXZk;42775,5428 -DYKWHPZt;78839,42966 -lzGAVBoO;64456,45370 -mLJglplD;41786,84440 -VULajWqv;68898,72625 -bhTmxKSH;49176,56894 -vxgUlqfS;52752,12688 -wyZUbDOT;30131,57292 -cyWIpvvH;52706,79992 -ODYfblWz;46532,82725 -JTBQoCta;42143,30858 -vbacrrTl;84410,9915 -AStuoFKk;80298,1844 -YZOZoazN;6510,64292 -LYDwyfMW;89275,66126 -bLvmfKdO;23021,23489 -vJDjweDx;43365,58454 -McISGaTe;42018,55324 -FDkqFbnZ;66763,42044 -szmjeTpF;18810,67792 -hWTESLoa;21906,62160 -JAVAzSfz;84218,63809 -WQtkcXcV;69005,71560 -qlUaMqaE;47160,73738 -nJPQnQEZ;36997,37282 -eRWGYscP;68342,1226 -ejKCSMZn;3653,27849 -xpPGCfeW;30259,53984 -SUvDzpze;68081,80235 -CWHbKOUV;76358,17789 -unDyIuPP;29775,39775 -cInPuyWT;63544,15739 -BAPiJXYO;80605,76105 -XSNonBMZ;54502,66320 -ctBHRrQj;37068,65416 -PSFHGUZe;59057,32574 -LAvnnNip;86677,81348 -MhfEVcEl;7035,44110 -pwunMuxZ;46004,18885 -KBVewXAr;77720,75037 -lwpRbFUv;26789,14438 -JxrtSOxs;15205,64712 -AePrmtQd;5771,20111 -QUqamsZz;77791,74164 -zvAUrbqv;4956,29235 -ansMEMQP;87150,64157 -dUhlKMpw;63177,28029 -lLDZxnSg;81277,75345 -VzWmCxJf;20019,78506 -fMLGYqpw;22895,8183 -ybLOFADU;78137,74077 -kmpDgoGa;81920,69528 -kLWEoRdH;45304,70827 -xbLIehKb;22155,22087 -MlzILIPM;60075,41214 -SQRBTUqQ;25643,79165 -lUpndLzy;49639,51754 -ZbnhqqaR;49446,40888 -znoITUQa;57462,25983 -twHtnJvB;79079,8984 -zDMpMfBL;72214,69955 -sMcxrtgE;20551,77976 -UOnbIBvQ;41083,63343 -FltszyhO;83927,50134 -UVmFuEfY;40359,71873 -cLUkegmD;24264,13155 -jwGvQrvU;36741,68352 -ANytXtAl;87954,29323 -QhSAYdWB;87520,39573 -EDHieWZm;69111,61071 -TlFTSsTZ;75129,78653 -fPfaaIOK;41347,20714 -GFKoLcbQ;44692,18455 -DSujxTvu;17100,26205 -ezqUhoWO;68459,86440 -eAEZSWjr;27712,79224 -wCjdGbVf;62093,81222 -VXElCjLm;15111,41430 -GYSigBZB;54273,12509 -wBlqBPja;48204,55171 -YyiKmsjO;15740,23328 -pYGCpuMJ;47445,36125 -jKrcNvqy;10243,4245 -PUJvnYtS;38799,25727 -YprGWfBf;14263,83668 -SylyUarw;45849,34399 -prbSrPIW;50835,57254 -MaTfpEik;27415,69645 -YydewKJC;35273,18603 -LxuDZiXo;1070,72924 -InrUfkpQ;77495,80636 -pbDQZKXU;48281,25877 -hMEASLAB;27890,82137 -ejXTGBiu;87967,61910 -BysOOweV;64118,70906 -ngweZVQQ;39365,81963 -LsfeopfJ;56271,32235 -MVpoqsLx;72712,48131 -OmwUCDnL;68333,47902 -LalzpxiM;42144,65495 -sfaSZfPv;46059,66342 -aKWQHyCC;29726,12346 -OoTHonrA;69324,58447 -GAaUcMvX;66219,50653 -cttNRKmB;77707,79811 -fuYrTNZd;31823,37231 -ifJkTwdI;33742,38955 -sPGupMSf;73595,3473 -BuJXZNBp;83619,66014 -GNYWzeLy;31125,71569 -UrynhtnT;40561,67705 -EFOknsGE;57782,36762 -vQerpsXk;8121,79205 -yDOyCBRt;76354,41800 -RcJnHVvD;81872,69229 -ZKVjSAIu;79069,45998 -eNqulCQf;31417,67244 -FsOVPKPS;11710,89600 -mUKjbBUc;76137,60493 -OnnMBZkO;38246,57400 -EWMQtGPf;15502,18646 -RVCaGqZh;10081,54430 -KdSKSngK;8997,87182 -GDuKHkZZ;30938,10806 -ISyEPgrZ;41254,31447 -dbCIoGaO;2781,31021 -YspJuvCW;3565,14274 -bmYhnRHj;68158,57491 -opSSDCGE;68079,65519 -xuxjuvCg;33486,14455 -yrOFvTbQ;19699,15811 -icxzIFiA;84776,24243 -inSnvHpR;49536,12748 -XeNxvYZf;68227,28376 -UdOKDxdK;73189,89970 -qrGJcZZW;56699,30211 -xJFlPwDK;7905,27237 -QZMjRQoN;19291,66000 -LCctlsas;31918,85478 -hDxpYexy;24885,6428 -Wodmeswh;28338,45718 -gLplnqqN;28765,13607 -rElXqCLf;42345,64611 -eFlviYQD;58741,19729 -bBkVcuTI;57637,42451 -UCaMwPLV;48326,54763 -BlPRFtZp;54737,53906 -zoyKTyIa;64425,16564 -GdRMGqEp;36192,14108 -gGprBuZK;59636,11032 -WrkfxgOz;59460,40499 -rurqmtZx;35628,59581 -JAgQKuuk;73108,1069 -TKqVZUgP;22847,58773 -XzssBIUl;35104,44091 -xdFpyHsb;77890,39860 -OHcgZHYe;80554,73241 -BedVKxnd;61103,29407 -IrGzTfjX;74143,52005 -VaWkTJsZ;86056,3133 -GOngjNDs;34749,11312 -rGUBYANv;19473,13540 -KXylUYAM;52364,45213 -QZGGHrSw;40605,84793 -EpBLcTzx;56391,71412 -nQVVSdpJ;20713,31156 -GsSNoHsl;64555,57386 -WBgkRzmd;86505,46651 -aqsCNJoG;24383,17931 -kGXLqDKK;76033,77341 -EYDEELKa;75285,32092 -CqcslQkh;35598,85353 -FqIFTWHJ;12504,4313 -frtLjCTl;26247,48576 -NHijFiim;82679,21557 -CEawzHWn;78327,72824 -tTghRtwt;46796,80999 -FJRlmnsN;65551,49005 -ioSmzcjM;50541,6626 -CUaZYZGX;64536,36312 -LUdWuBmN;51968,40341 -CVJbYQQF;39891,36024 -uuIgAllT;80818,49306 -pgmxOOCv;14717,25182 -QnfiJLZe;14596,44256 -FejIwjjg;41313,72496 -jtpZYKVk;37675,84568 -PbHOfDWp;13085,32406 -riVRLwuV;84432,69554 -wpCwZqfc;79581,72804 -VAMZrvPs;4806,44151 -urqGIwFU;75841,78879 -kKXTxRhl;85137,67939 -IbkFNFjc;44250,67693 -jixkcfKt;4099,41058 -XPlrFBeS;4590,28423 -LjuUzeMW;33914,15255 -tzlJmkaD;22169,16674 -ibaOYmpj;37102,50691 -NGgpKmMb;44689,13543 -deoAscIX;63299,22357 -ANXpWJvO;38058,34087 -fcZjwiTw;75159,62053 -yzpblcDO;43461,73242 -fgwmulhE;25723,8981 -BdnvFDUW;34476,6792 -nqzCTZeM;27998,34673 -dMXphrCG;72795,89758 -tjufOCtp;25940,57956 -DZUcvXYT;41509,2004 -KulPdiwn;35473,1554 -KNGSuaFL;78518,86029 -aMcvKWcA;15224,71201 -meZmgMLN;47941,31186 -PCLGzLEQ;81221,69861 -fBcBBvXe;47847,54579 -NZVvvVjz;62967,4545 -HplohJKa;71082,57974 -mFubzuAg;44354,84771 -gLgveUyV;29844,55662 -KuOrIjhg;30773,8452 -DPYWnVEu;72445,45957 -QBnNoLIS;57652,72830 -dRZaQcyX;76953,3049 -KrVfBTlH;70629,71979 -fApHHUdW;33249,58192 -BVTZAAKf;28873,83589 -GIOjDvrm;42826,87873 -fSKLgrRl;33649,26328 -buMiadvI;45321,69143 -ZBYOGvGs;48864,84172 -FHkmIpMc;35081,41824 -QwlbksiN;79719,58647 -ZlDbOMgO;17868,15978 -zRVqUQql;37470,45806 -CwmwqzKa;34562,77949 -ppvQRgpN;83295,89775 -efSmvmGn;68267,9218 -hXrfKrus;10070,24432 -bvXrvYVA;6853,86470 -UsHlsFOb;78783,33060 -wJhIHbTk;89493,11049 -aDAVnJEc;23677,71144 -BshPMWNR;42464,17640 -grXqkCDD;71303,27480 -WYHkaTrq;72056,18341 -aNowSQRp;5077,52359 -hbZdJMoj;32483,40205 -YbbKtErl;15252,58456 -pasRrrvB;15372,13997 -hNrSAIpK;58247,66460 -TNjEHuVt;67332,63514 -nhUqqIkS;48731,66635 -uNvYvcAL;68693,57622 -ZGVrAseN;74624,75910 -mmYtVbkx;19771,22840 -KIrvBVkx;77667,28084 -PQcvVCrU;32316,73747 -YYeOEtxY;4554,34054 -jxBAYyVy;6259,19288 -oLjqqtEk;85919,52727 -ItBGvcLb;4422,50377 -gsBmIBKC;1215,11876 -ayckMkRD;43375,61950 -QdeeSzER;55281,21991 -dzzVUWyl;85546,87673 -kciKzZfs;56015,82657 -ovKLVvvD;15494,4789 -JmvCbYfJ;53690,3349 -TWWOWvFh;35053,9411 -pJvsYIlK;37555,21033 -HbrkKJrc;51194,66541 -gveSaKLL;86673,16579 -xEKAbsVi;47686,56984 -KQNYyKNu;56814,50741 -Cscjhmmu;28239,75206 -DnCJDGPU;3974,2911 -JqPlvtSI;63168,34753 -BDETngmu;72305,87489 -GUGgmvHk;16298,45269 -sFlZfsXt;4491,23155 -ZVjlRVxN;26968,3758 -MiShdQmb;43027,54514 -stHUVzHX;47717,61021 -QJFPoBvD;35894,63739 -sgNHyNrR;2547,10322 -KTGKKNKp;8762,85579 -wEUbHCdR;20877,45220 -hsqQPNqn;55410,67524 -lSPWnTsQ;71367,4242 -sgQnoLGy;28182,37649 -TXNlXTLb;21889,59635 -ApLCeeUK;49698,68251 -svEHyTkq;74789,13932 -xpPcnHdm;33652,50800 -vsqOdZdh;61069,37624 -cSNuDeaH;5670,14304 -lSOzqgPW;44748,23215 -lZUszIVH;41787,1214 -SJhCZbCw;74875,15812 -vdyjqJkS;53848,4765 -LUFyYntn;80326,67682 -sRUCPrsX;37613,9753 -gwBTyMcl;73643,35567 -DimyfsDY;71187,83042 -QbyffTpi;80315,79570 -HqRslJkZ;62919,74150 -QvNNEArF;71739,40063 -qwRNsDpy;87946,64660 -SnZApmhh;66256,42363 -HXTBaLnO;33804,12426 -EqeFuIsy;85912,6001 -wgLWsgBC;25954,85998 -MbllVqvh;16751,17260 -VbEXVNuP;33336,67639 -XAWGcuTe;2888,80484 -MolqqcWG;54825,84399 -XhsIkzYs;34906,24922 -QLvUIhTb;46901,11040 -FuCinTTt;50902,34938 -CiwiCqCu;30949,64202 -BeZLpaGU;70608,6281 -kbiMieoG;63887,47464 -elhIbFsQ;67130,82665 -OEzPtIfu;47267,66152 -GQKUNOob;56632,42671 -gyCROSkg;58127,7111 -jHIqWhmz;79166,38494 -oaFgFkyq;23413,74475 -uzeSuYFc;10940,28453 -qGaMlsXx;89993,85786 -frPPxTOh;14894,22678 -JldImgFz;57223,7265 -iQCSiIgf;9950,2375 -KYaVzrTB;78075,84782 -XqSsJPsx;38822,61904 -apeAznDE;3462,74986 -DPsXuzEp;50844,10487 -uVnUxmJH;33415,34433 -THwctCtl;75292,86208 -HaQxoWXq;79972,11928 -QMsFMubY;88343,9396 -ZYLYXodh;11826,83176 -amKOCGss;13032,43081 -qKomCGzj;62123,72943 -jCjFTSTC;38303,88869 -QLwSfVLN;66139,84891 -xZrqoIeo;76965,28130 -KzrEQGjX;45652,34505 -TlkcjWkc;68307,17469 -DYRmQJFl;82610,56417 -BxTpLrNQ;19464,64605 -EXckNYQr;31621,31298 -JPugqAIZ;45638,85412 -prvaRPSQ;66727,75949 -tCUWJQWs;35185,1338 -zoePXjBc;54595,61582 -DSBICbZC;67192,11086 -XHsmrYVZ;21891,36734 -lhDUdFEs;83609,20117 -beIjJros;3985,39279 -tjioqfOu;26003,85257 -annjDNWa;60578,23445 -RhvNAEbN;19483,88144 -BViIfnan;67542,28546 -cWNsgHts;78367,3798 -PBogcntH;16565,38748 -BLyjBsuu;42060,68539 -ECVUCgll;84552,59055 -LbUygUZG;49247,41464 -AfpCTyxC;78779,30608 -EyuYVmvX;81157,16065 -uYaAfMFU;19756,66318 -VuiDiVos;38533,6614 -BzWNqCMQ;18051,54504 -daVOZCeS;34749,68853 -yInZuEvL;39197,54105 -rttVoJGw;8579,65555 -NgROXCBZ;27868,70751 -uaYiYBch;4124,61421 -XLefcCCH;10671,42849 -FCzqYsFq;75612,83091 -tvoXjujJ;28396,33654 -xrCEoUFj;40680,17226 -oLRdOXKj;42860,76226 -toJDwvcK;51182,30493 -yzrDKrKW;76667,12268 -eUGtTvMo;78880,20508 -mOaSUJXT;51201,20563 -xdstBRbN;60765,52627 -wfLQZzBu;24659,76285 -eXvOgmuT;12560,15437 -jTwOZhrd;53893,49207 -NVULSQrC;38404,61035 -bYzkKDHh;76713,80551 -LThpiSrj;17898,43795 -kFDRfRLH;39057,52311 -zyJmrUfH;23369,51933 -QRUTnVOx;62542,57592 -GjWNvzsL;79715,21475 -ndhHZlsu;80875,68404 -VTOUcFYa;63073,41366 -fXRtPjYa;62641,65533 -sDbeeszl;19158,83565 -URRRaSrx;7097,76041 -MdYNaSke;44572,58478 -rpRYSpJu;84147,80819 -oEVNqmDp;61585,72646 -RdtWZwBv;45708,36214 -MibxAeLq;1268,24517 -jYnVLcWq;64811,46653 -YuHbtaCh;85381,57700 -AfugdVCR;82122,39410 -tEUzhuDt;23726,78905 -EpDxPiFV;25792,46070 -iBcmtpPs;27728,82315 -sZnIFACG;14756,21598 -UtcobmbD;44242,85268 -cXKkEzJl;17844,9025 -tjntbhpv;14836,45617 -iEthuHlv;67094,63728 -iPwvVAMe;10809,69279 -tEBFLgLL;65108,15399 -ntjBXKLk;50458,21109 -fmVMBbyS;86325,78904 -gzJODMdp;79312,39075 -jgcPZmZJ;22379,35985 -PmCfrrKE;12795,65356 -uzKOaGiP;44727,86487 -xPGfQuJu;57341,19063 -YiYgbKcE;70949,83818 -TpybzSzY;2745,24507 -vpAwXRFo;33132,53724 -HzVqpzFo;34399,80306 -WHttAcVQ;19973,62898 -pynsKSzX;78015,3841 -rpGuuStz;19387,26429 -PVKNayzL;15259,83144 -yaakCYfw;15342,40616 -wlqCuJlA;18719,30686 -eFSJaAzU;23615,77469 -RVvjeqss;41704,66972 -bWGoqEFy;22048,74405 -pHyGjmUF;49215,15708 -TAsuVGFf;74289,43215 -LffCEmYZ;28072,21769 -cgbkixPN;69663,71139 -pzZmlYPa;6615,29657 -OzqYgCHT;73347,16769 -KJCgSllu;45133,27972 -TESKmWnv;61929,5985 -tZTaCjmk;8454,38816 -OboZFmfk;61491,26958 -ZwvtqHVh;34821,49605 -lZWbhxEg;19112,79994 -BhVxpRAo;33998,22298 -xjNLbETh;62232,9410 -jwYyQkFG;68051,47786 -hSZBeahp;76579,68523 -tidkFIpk;40881,19211 -IcbbulXU;4568,36194 -BqHaSVUY;84148,34006 -qkErqwUt;6559,34208 -aAcvxrmO;25659,44714 -nzAzvhda;72234,28335 -fGnQbqGN;51156,28492 -LTWSioIf;14122,78874 -nMHsSWEj;21370,27846 -PwJhCalz;40447,80445 -cKjoIvUh;13076,64584 -kGjTJNhk;57827,30287 -sGoxUUiS;81361,28322 -NESYczmB;41569,46337 -MQROwWjb;33677,87500 -ZTiSfEEh;16415,25621 -EAzaWlGs;3409,88807 -OLDDFgHN;11976,40312 -bfInuVVM;47340,83159 -nbfTTGAw;28632,75608 -YhjKHJNS;15120,16661 -WKhgcOSq;14546,73442 -uUuRPUkS;29375,86920 -TrfVQmuC;77323,41764 -SvVXWkBD;75706,1739 -InbIOyxf;65230,17217 -RMLiJuLY;41948,42379 -RcrMWnAF;1987,15252 -XsChbkaF;64935,21582 -vkszMaXU;76675,5199 -bIYNDLIY;18652,78334 -hGWxrpFm;64078,61604 -XaDTuDfS;58728,84520 -vATwAlrP;47187,51081 -qusXzjyT;81231,61408 -ajTEftEp;12470,34841 -tbsvMNQh;86440,63873 -zYRDqlEu;37575,58288 -UQEVnule;19560,63228 -nEzwONzs;49899,77058 -LQwTcNgc;89289,5366 -zXHIPeBA;53336,65840 -AUPZJvUW;4279,32935 -QgOjtUJa;81708,72758 -hpqeBlAD;9063,55773 -VWutfzdO;79524,20348 -LYXJMnFw;55017,32910 -KAeguITw;64203,37621 -DVZWgXfN;70133,25025 -EkuIpork;84933,19925 -NFKTBemO;83526,6825 -miVVugos;29344,28655 -tdHEiTor;16312,50302 -fTHSqJUN;6113,11725 -zyQehSAO;87542,59328 -BUNgxOIE;43051,45465 -XRRPUjCB;87747,43056 -QusNHaVV;69453,14607 diff --git a/src/data/entry_2_11_2.csv b/src/data/entry_2_11_2.csv deleted file mode 100644 index d9754da..0000000 --- a/src/data/entry_2_11_2.csv +++ /dev/null @@ -1,2049 +0,0 @@ -username;balances -lglMrPoM;33870,23015 -GrijUcnq;73012,61113 -hloSYwxc;18774,69943 -mtETRTjs;70508,30391 -uBQhGuqv;58066,70109 -QEeYspWc;59322,39233 -EmfNEhLL;47904,19482 -BXXmcBtT;65838,9138 -honkwMvD;82670,62710 -ZjsFusXB;28546,79048 -SIuwpHEQ;22659,60646 -QVEIlrqA;22388,4140 -BbQCVxSN;33736,12400 -KtgOZiJj;80324,15546 -RMQltILr;28386,35915 -XVbVnjEv;66427,69723 -oeGGnrYR;35835,84042 -ejupiEFM;86810,83807 -vajsIbej;30557,20459 -GrWjjGOL;30842,77792 -oKNOYBpX;18633,24895 -ixjRQuAK;16211,5239 -OOhPbUqu;1929,53028 -qLVRVrqx;22088,65863 -sIBXHJAN;74440,2212 -fsFsNwNX;21470,39054 -hizUuXZO;81973,48929 -elGeOAHJ;76579,11484 -yqBFqaeL;46473,29590 -LsfWLzua;34018,67679 -DFNfPMjm;70889,46818 -HxCNuBDI;53157,86637 -BYcyPoro;37135,60890 -FsQoVkyq;16162,85501 -FeAKSJZZ;50764,7156 -axqDkvzP;5593,77589 -IjusYhpL;53488,89394 -HbXOJWav;14146,7752 -rLWvUbHa;64456,56138 -RzPDuDuy;34357,77644 -XBJjRvaC;73791,66351 -eOJCYGRk;42887,25022 -nUUDKruv;74613,79591 -lhFjdOKZ;51630,36960 -cNyFdzcn;19846,41255 -ktuMFFfM;30950,44485 -GgIJnpTv;17442,18594 -yrtQqJxe;55711,51546 -FAIsDWct;60247,35994 -NwJFNyrS;37631,67672 -oDoSuaWH;65322,88178 -NokUyNlT;5488,84182 -YZZaKvWA;26703,38991 -bOErPVIQ;27695,87159 -DsDDwiSo;7895,16326 -SiHWlWeL;20519,76885 -mGrdVtuu;58516,88406 -CcdVDWYf;26045,30122 -mbtFPzUi;47686,20880 -exyBuzHU;31432,33009 -FSAtNOyf;89088,71340 -tEdBZIyk;49807,74193 -OMFdLAAL;45994,22961 -mafBqZGY;37513,47474 -HzrtIMwj;64550,83584 -TWXnnORN;36221,68989 -dNxgeYOk;43652,11537 -wNYaiuug;65875,80350 -OfCeSRbx;69312,35987 -jMoBtOvv;25360,44392 -uwLqapWP;68291,4799 -SGzucnHz;68341,28890 -XvfVxsdQ;2319,37649 -DzGJsVmp;89997,5756 -iUFTvclw;37899,77845 -rndpRUqw;20937,53901 -ZirRrKXn;28328,54852 -HtbzCDlF;27111,1953 -dEmFCGpb;3742,67983 -eVSeRGfy;57906,2786 -eekQGEqQ;10901,3149 -XCICyfrW;33019,79242 -dQeiSieL;51314,61300 -ShYaoqrs;63873,71039 -DvCwGSPT;57236,67562 -cyxaMVwr;45772,16049 -mNDLjPof;53862,82983 -tsxsFRZj;33959,83532 -TqieWdMj;52572,87615 -GFIFbgTJ;71283,26452 -yrTtxBYG;21927,25551 -FFhDDCMN;69744,57428 -XpFHTHiG;78420,23805 -fiqGWwHM;31940,73159 -XnUXKLlB;34488,79525 -hlVplaTS;10439,71727 -LFdlghfN;12967,3523 -tNlKJpMt;69477,36661 -fuIlZwne;42673,79724 -Btegpkbi;27398,79551 -cscoBCMu;53682,13376 -NDMynnLo;13966,45282 -DVpAxRQe;47097,64838 -fsGNGttH;67408,17197 -ahdneLaf;46119,24304 -YNbWiFgB;63707,2452 -agbVHIZs;1530,82395 -snwpqlva;45165,51362 -QRvaiHgr;8757,69488 -gMOZiSPg;3568,12628 -zVbruKCZ;71834,54884 -yfzFjZbk;4954,4002 -vbPXNnCv;5414,27227 -urYLXHPB;67888,56755 -tFnsMnNs;57959,14667 -vJxmgPKM;57075,51675 -CiSeoTKM;33122,82270 -zoFCutAC;7055,77826 -dZRwfLLO;86721,24380 -hnKYmNUV;15157,25905 -xkVgQDhI;40562,57623 -guODexkD;26325,59567 -JYoPRLOY;23896,54822 -qukiPvBk;35342,37028 -xvQXpAUa;67178,14578 -YxTEVWLq;30734,3320 -eHAKVqfh;39993,16104 -HRmrtiyp;76730,24430 -ZRriyOrz;46714,78813 -GUqhbavY;25451,21203 -owQqVxTI;69526,70754 -vdoIcFOB;23883,30260 -jFXVWukb;87634,71041 -PfSrzKLA;3978,35123 -XNiODPeX;52628,72214 -RTqiRQqC;43011,60641 -PBfbMrdC;49004,82823 -CJjbCvzH;22082,52544 -QFMyuFBg;39626,73732 -HzDcrIjO;61029,63103 -GdaRJukm;33238,18174 -HtntECyB;33926,17310 -yJgEmweN;88913,17211 -LgfidFxn;45441,41505 -bRHqfFlx;26068,85975 -EApVskkh;26955,68957 -ZMKOrSnH;78564,55167 -KJKUURzK;75782,25374 -ZmKDkrLi;47584,76830 -QbbBeTrH;19237,42468 -behAiFRr;87725,66528 -LIRDIRdU;36487,68149 -JnnBlngG;63519,3008 -RaSyvyHp;17628,45590 -dPAZOrHQ;22970,11394 -eJNaaAuV;56042,45497 -KTxdtbIe;22663,66848 -xvSrYOXT;4653,21369 -VBttaqcI;13705,15852 -HaMjiZoD;40622,9014 -SLHPMMap;52115,87356 -tJMJeRTK;63947,48287 -ErewWKxH;15755,14055 -tRgxzPTE;47472,86897 -rktpgLmK;26130,86602 -QiukUoPu;28278,39019 -eHcnYNVy;23191,4994 -rtnyEVla;9620,6911 -qCUVHrmc;54594,61903 -GytkvdPc;29885,52540 -KVjZBcMM;66094,1859 -UCFSXxJO;68979,63847 -CpYXtDSG;62400,76821 -UwnqxLWX;10408,82520 -eNycUGCK;28154,82494 -lSORqSSD;43432,42370 -yhAVzBup;47531,79672 -QLGfeGEt;82681,39555 -EzoJmurz;6084,9669 -uiHtfpJb;48410,7759 -emwbaJYe;83159,73041 -wDrYGIHj;28664,23520 -OfKBNxBj;30005,14179 -QSlMxMzx;68558,52332 -oaJDIsCQ;70007,60383 -fCozvRrP;79185,62554 -PTXSlMBp;36007,16730 -llsyMtWy;87652,40820 -qTSfCFtL;38447,68310 -fEyZiEGs;6320,3034 -GIovHujc;75035,89062 -suCwWdrX;29015,1407 -BoiwMWHn;55655,5782 -VozLZaGJ;52723,65702 -HBHCtJJB;78485,20520 -DGJXKYFT;54532,18838 -pmeXyLAn;45764,34639 -mczxAgKu;47776,41764 -Hkhiyvsj;25393,52588 -buvPptvy;55628,72981 -VSDCqzsi;47473,55866 -JxaiMvrl;14510,46617 -FYjPMTKY;7819,2656 -irrtiQAs;77341,80493 -WPVJQqGA;44039,23788 -pCVPHuwN;38075,19535 -EjnyQlXd;16561,76532 -OgDCYycB;83979,25580 -mqaHcthv;55929,70559 -QbYdlUOC;83954,51620 -wjuBecHe;40478,39765 -ZlWgQhPm;14718,15963 -KpoGdHuf;75229,78876 -IEkdzYVO;75102,72477 -ZXqAomqb;31283,30654 -TIWBIJjl;64079,79460 -MYqQlBvO;59198,30915 -oqlQbeqA;8313,5399 -acODGylf;9834,72161 -bYotbYUI;1651,68091 -WFhACIvE;2159,86279 -NCyNAXgC;78512,30884 -ePeWjksn;62394,4300 -GtCSEHgl;57395,12951 -fNWYnVEZ;35666,70610 -iBRUskEV;83186,56077 -ODNJKqWF;83472,88016 -WLkXyRGe;74302,42771 -IUYltdnB;12063,50135 -LZQPRdFA;28680,53188 -DAIcluAF;34376,65689 -vFVgmbju;67284,9338 -YnNLxreV;89262,13734 -CeaKuKSY;49568,17219 -xkvXTuKa;70609,46856 -VmhxSLqm;73261,28030 -qHqlVOAk;56694,80137 -yCVaSkuP;44252,88472 -YcqBYljO;31077,26250 -rfMVxsGP;43810,82408 -twwYwCAc;42299,33422 -ZgZNIDqe;44372,1373 -fNZWWQQW;80073,34861 -ijqiojMb;46140,43610 -foLVlTki;28315,46103 -hYwShteQ;70976,62739 -nyZiBqXX;4755,21641 -RelGOQiH;12597,80196 -nqKGXBld;21114,28225 -YcyPgrZQ;52998,40044 -ObpSkTfA;87750,26184 -OGOpoHdT;14394,30234 -fBusuOTc;30395,71129 -yUKZvOpu;70451,28773 -oICPHfAN;33827,8477 -bNcFJGzf;84124,6606 -KzLSMNPi;83305,25718 -vEWsxkRt;40990,46748 -EPJddwhF;60617,66789 -dloKJdrs;61942,36040 -XbRCwulj;88486,24007 -yvisbUJH;33724,23433 -CwMeaZAi;1962,26382 -OrsopGPn;42141,17579 -LreQjRLj;44606,59387 -JqnXPwpR;29770,13376 -pJCYTyEH;51818,80258 -ocsgJMQM;40018,50202 -nddhEyYY;21103,25625 -IWOLuvJs;83555,51018 -zzwqMSiM;22434,69703 -GKIevCrr;5920,31387 -ZghQYvnh;25455,23241 -udqbgHEA;32205,31746 -CrWghEwZ;81775,64370 -CbFfKZio;7707,41248 -iPLupfYT;87344,78303 -uMTwszAH;74106,9740 -rctyfZCA;51553,88031 -udikGhrC;60803,65005 -zfBdzFli;86444,27997 -NnLurjel;27966,60000 -gMEKlvLv;1808,57925 -eHmOzYSX;39870,35520 -KPftSquk;15928,37893 -ZihrASbI;79984,58365 -atpFWVDR;88257,65350 -RNBwNNmm;59620,85950 -GkJnSMlP;44073,70233 -MEjEXMYa;14933,57156 -IPstSmGz;5726,8030 -nmIcZAwO;32252,51697 -sxgfpNcc;45311,84585 -FqlfjQto;61736,29822 -EfGOJumW;19004,68552 -YdRwXTGG;2795,79926 -hyHoTEOg;44874,31315 -PSOyjeFb;43376,69160 -gUeTnLSB;77584,48672 -VhCbLkxG;82624,20852 -SdbPsllS;17354,27933 -szRtYXlh;72132,87154 -qufCgFUP;13464,22480 -xNYawjBQ;49557,56589 -nKgTTNDo;79994,16028 -ReNmpCyI;46422,49046 -kWpMulfs;84827,86331 -bWEkYjwY;81885,53374 -iTtAzGQt;58349,85696 -QktkVTWq;74521,86530 -vffjYdBR;85791,14159 -kiaqXPDs;49236,66618 -EFIFYeyR;20790,13070 -ritzRIrk;43355,58631 -JCjthUED;84407,29679 -MoHasWdB;60725,1521 -UrNaLaFd;86922,85706 -WRJURdLC;64008,32315 -XTADvumJ;3156,22789 -aZPZxfbd;40803,18242 -ClCDlvJl;57869,17464 -lLNfPXSr;58921,70287 -FBpSMAgk;12709,22472 -ordWxcgk;19578,86540 -yKSEjYtr;70493,26864 -HGiNyecp;67183,14196 -iuuAFspW;31460,38810 -hdHbSQqL;80670,78571 -kPoCctCv;83995,12981 -OMecLOQj;16233,33481 -sxkmaVyf;46045,49754 -UXWpIOBo;52675,30497 -hKnCLkCj;80656,17009 -oNhNDQTb;89512,80788 -FIBakoqt;23637,71756 -ikNKDdft;65247,44640 -LMoQhbBC;70907,18225 -YkPPNNaJ;14826,18723 -rSCihOUa;12165,23225 -qSRRciMM;14182,58223 -fZzwDQaP;1068,61452 -JgQxXnTy;7093,60038 -KfKauHHf;9214,67915 -tbiJgLJZ;81504,41463 -YuTdEeuf;8517,24552 -mqihlOVm;8762,43699 -rcLnKoTN;48383,1170 -KoxGXJGq;46346,70566 -yNYwmznT;15231,26337 -HAqJVXFb;63739,54320 -hlrHduWD;5549,52542 -CMxWhShw;57395,7392 -YineBBXN;71257,20298 -EKwEworK;54738,44443 -LXKIyIUo;17347,22233 -RGecpATn;37479,19200 -myIUmhBu;59357,81234 -VsLNxxcv;40276,28899 -ZEsaFQNE;48053,23968 -RbOunkBH;53545,35638 -GmIjQuNl;36646,79403 -vEfftoix;24157,61712 -AExWSWOs;63922,71611 -NfDiGhub;22137,85573 -cbuMKWXY;61288,79660 -gbzlMRFa;64725,73660 -RfnDtxDE;52312,33037 -xjTINSQK;25807,21038 -pDfEcfZa;41010,52545 -ZouJQblB;51126,55716 -bAnRxeIu;84111,8673 -XPNxEVhn;82998,56455 -gopJDFGn;29134,7857 -qRTULzpy;60166,54301 -zbNTdjCb;2158,71385 -qAhitNnY;8170,73980 -rNSXTYEs;32290,73574 -gKLUavZU;53756,69502 -QxiEmiSz;24684,64570 -TUdTKfIO;44815,20733 -fruqBiiW;58441,14617 -bMbvjPLh;58655,10102 -sAPFpVvO;31678,5248 -BLwqAGUu;8758,87659 -hteOOWvJ;13821,43368 -mIvfuWHG;64400,2387 -bAZliawv;43969,55035 -GhmWdrrg;45792,39334 -skpDpRrV;36490,31302 -EsyzrHuG;79290,6201 -ghdLUKyK;40832,38612 -tFlsrjQQ;7481,11660 -syBJFoav;44436,68771 -NnVKqTMz;62842,38338 -gmZFUcNh;82538,8635 -NjPXyAYb;67738,5734 -fdMXTIsT;12072,54247 -FHhVRBER;7861,34476 -lfNQTHJl;4905,37292 -vFyaEBMz;37663,40220 -SXfotJHC;33905,57447 -aqoNmmwV;22268,65752 -OMeKZqcX;14748,27048 -tOpNCNuc;76217,56684 -YMqATCgP;84058,21781 -icZFeqys;53917,86019 -jVQTXqcK;55182,79050 -gIPsrIlc;76447,44047 -hDgVOTsX;23511,13943 -zlHexogS;51833,83150 -fMhyXVqI;32151,12274 -NYlhifnt;25705,84353 -IeAdIlsU;8392,14518 -ssCCqCfI;17281,70742 -CKUmDbHG;7599,88777 -vgxBBVPI;86538,83557 -HOirMzaP;29881,8219 -escitoKj;69915,70659 -zGguQtfM;43106,66032 -JdDygFLn;45395,28304 -coxKwQGV;29237,81554 -gqeYImPA;61854,29390 -MTkLYEks;8307,87038 -lhJjCAlL;89076,9433 -lwBxalLR;59957,3577 -iPjLGtIN;80682,71735 -EKfcmUWF;46031,84074 -KLeYwfEo;56134,7484 -KtrgFzqh;6447,31535 -IByjNGIZ;33748,86773 -gtOUMDPp;12612,41489 -OUUozMmi;35611,70914 -eCFYMdPO;42699,33806 -AdyBArlx;30967,27580 -VLxWDnov;18442,4723 -TDXOqZXV;83051,61021 -RpPVQhUn;41557,39767 -TDJNlYLu;31647,66472 -VlpuqhxM;55495,54809 -zdaqNQvX;31650,58471 -wvfCaNer;21652,75933 -GxmvNUCY;49853,82769 -QKsNqZda;48653,62214 -UXmUDRFb;22075,61265 -OBIBKEpG;32057,39021 -jrHxSrCb;44755,62708 -WVhqoYeT;66360,79751 -oBdnkBTf;42346,43201 -MItMKtML;60346,11725 -ImhKEWQT;17677,27319 -hhCUFRZg;60737,28892 -sCeElZoi;30524,45276 -aZsKOZhh;31087,21315 -fpcNUcZF;2240,35890 -FGFgrZMG;33724,22982 -bIWDnChQ;86543,89462 -lcojvtIQ;34629,16145 -moOYmnon;34688,46273 -AwhVpsIq;63834,67078 -rePWYDZD;6896,32163 -GpqXvuaV;77851,77657 -vFOGVRgO;48757,61907 -viWPCYgc;42466,51686 -PMKCFJtu;11454,67207 -gYojBUuJ;77468,30163 -yoWeIGlH;3659,25530 -MGSGcpmC;37108,15361 -gQeMOhty;29445,5376 -gonrEYFJ;6215,81131 -xuPLfnVJ;88698,27350 -kgCSBaBN;51710,37545 -kiUjRGCJ;84295,69330 -XXGxlgZH;76927,49039 -EWxZtPjh;62355,22327 -ozewUjHj;17314,8709 -coQUwzWA;22743,36150 -pSBHHEay;77097,80702 -BuaepafD;54086,25672 -uVdILUrU;12150,14402 -QxIaVRqM;5939,61782 -LOjkzQMH;6921,39189 -uQdSPEfF;14944,48538 -OtFdWBZB;72920,33384 -IycnrfIq;61708,30462 -YaIXGXqL;75698,12658 -mZMqkdgO;32987,24346 -HzSZQyHc;25514,80552 -LpEilENi;64923,87853 -cUjrLZvx;88991,19760 -eyIkpcLk;25352,39306 -cohLxHDd;47136,57770 -nZeVeeCT;19388,52710 -AKUmddQI;14753,57541 -GgXVIucP;62041,31516 -qKQKlXxR;56282,67452 -WwyjDGzV;86069,19729 -ZahoKlRQ;70173,70416 -zBGLwieG;21609,52043 -XGmgtIDo;38688,66330 -yUFqlUno;6969,74634 -nzBvXsuH;17499,53548 -SopbcZQB;27556,34565 -ZWhBoBzE;19585,50914 -IhzZfzWK;89117,79536 -wulWElEE;11776,25258 -ANzxKELP;4989,19348 -LgYLDqIa;74283,23079 -YULwFNSt;54744,32945 -NuXOEjag;81254,21942 -YHTxqRPu;73143,6062 -JYGKfWVZ;83753,82795 -uwaXdbGK;71103,20152 -LYUTnZjG;1439,59119 -FImogGwX;66837,29864 -CYAhjWrY;84901,43963 -cpDnBGAo;51987,74158 -EEzvPMpH;2203,89442 -OQgXhFhc;86958,17586 -zhVpeynR;79168,40461 -TBoqzNnx;6616,4299 -ahSCKXga;33778,1097 -OCxJZEel;46311,52588 -hbEGrXpQ;48803,65026 -HrhZfmkM;27699,60619 -AczxREga;4078,50455 -WewUpgTc;60223,40857 -YBKbiAnM;2590,10502 -AvlBOxWQ;64451,89772 -xTIbbldT;55903,66437 -VUnODIaW;29625,17631 -DETYuBVJ;58013,13108 -JvUKdYlh;26650,51086 -SjlLACqR;37377,11131 -woamNdGX;72415,68013 -ShRfuNeN;59190,72505 -aZrlEdpN;78657,49925 -xuRBtpTb;4936,89708 -YVZKPLkb;87650,26885 -QQnNFEbP;30994,26978 -fjTsmwSS;47745,88680 -SjtXkcMh;23779,67109 -xwZkKHIv;21204,17985 -bqyeFbPW;41327,27320 -JoepidYk;78907,36519 -wjvVnHNw;35114,56084 -KubCgFBo;75370,43150 -xRObWryq;80794,29169 -aAerYNhJ;14409,58105 -PuQudMkV;38882,1706 -PoKIczAg;20245,13048 -ujOLBCKn;33385,69792 -qiAFZUfH;5689,76856 -ssdyrJhc;67517,26678 -ldxbJNNn;53035,88108 -oFxkevdI;3663,12587 -fSlvSyhX;75256,65091 -jMGvJDzl;1392,53825 -XtkcXzMf;31492,46396 -ziEZmMZV;31029,67107 -sVgkaTis;87332,26145 -pPQISWZZ;58566,49152 -zKWlUZnz;21779,26959 -BvrirrGK;10373,23349 -bgPrNUwo;2299,6750 -NFwdsnzW;72328,7857 -RjVJvwqm;18207,3903 -SnVkVpBA;78182,33425 -dQAggdpE;36730,75620 -XsdOzmYP;50686,32256 -ZngdCvIa;15259,52404 -OHMsVStP;20543,3262 -tTkHVPCz;1135,47619 -xsIujjua;18967,72709 -sHOsnsPK;82679,5845 -soLlgAQf;81893,77944 -nZgANhvA;86251,20724 -quQRTDtO;87650,82244 -ZddShGLZ;79843,84459 -TmBWGgzo;78691,54560 -bhrSDKCD;18787,71534 -HiDxsZaQ;83012,15370 -VoBkwDGk;74054,70397 -HFkoytln;60379,64182 -aaoXROxh;44630,14621 -lOpsGIRs;28690,41546 -mSWlCyur;4077,48276 -bnIjWSzY;52237,67223 -MPHnxigr;66737,52431 -kAhYOFXR;56048,44389 -EmvfrbtN;19448,52878 -UHEsYLLB;54205,57590 -AzNGRdTF;15786,36337 -lnpAguKW;19688,62683 -ssoRDTGj;78046,69893 -GLNqofHz;3445,37804 -pJVtRCbq;20044,36520 -jlvobpAK;9958,30854 -WvmyaRbc;21008,8596 -iKfZLEKr;87638,16214 -REttwdxk;46529,31441 -ADniPMyW;7552,85326 -xPAOiKpj;42775,61454 -ceZUWWQK;84803,29886 -qlthXrng;84065,59021 -MrHBXmgi;4030,56037 -MtqJakyf;85688,7695 -pOenRsSo;32616,71424 -lAntljEi;29163,63818 -TATpcLPD;65488,34802 -MlpLPyQO;1957,54858 -RQxzqicE;75851,27567 -cYSrtlzo;41559,76512 -tnQyfEKT;83901,67117 -ziNSElDu;62735,1078 -VtzqSQQx;88776,76801 -yZcurjsF;18884,75315 -hrDFRzjZ;43657,82914 -gpoqcovz;30930,2494 -rOmnTjvS;80345,75102 -exKCXURA;88706,76333 -FfDXcjxK;82188,19877 -QSuhCTcL;22425,45632 -NPQSEVFw;19869,50269 -YyUruDVF;56090,85866 -HgZwacCL;35627,7720 -TqAtSjjh;34405,44183 -SrVfvoma;26805,76526 -bCZTjeNU;41937,61135 -rIiTwyyE;63883,4194 -xVYhqvnQ;42598,33413 -rQVxkkru;12214,19799 -KJHmKtfS;33934,83745 -MildkrTB;52384,81421 -qnLNsoRk;23391,48846 -dZWMSLNi;84832,15623 -fwMtUrcG;38286,27508 -NLqBzqmt;52763,3006 -OqAutxHj;8803,55190 -YgayffpP;86676,16248 -idFTdmSE;64222,79333 -oKodMRuw;72331,7663 -ctVDFDDT;31651,32847 -zFPInmNc;41878,2014 -CfYvKPrD;71863,87994 -GHaqFHFW;64456,81881 -CuAlhNrH;17825,12156 -RNiIlAiI;24084,40459 -pfunnkYQ;40913,60424 -IrzbgRWA;57834,38938 -CResdsYi;60698,20548 -OtuscGku;25128,70818 -GrzuZvap;62697,68435 -EZkkGseL;69602,53362 -myzjdDdE;27867,33562 -gEGQkxCb;35167,31587 -NdHGDqjE;27839,28368 -flkWPVSJ;24782,19289 -EXnSqEMJ;49487,71964 -UexVDGaQ;4456,36023 -gTEsVoRH;73037,47814 -dWIvegXv;28737,17178 -fbaWRRoM;73458,9767 -ScVZqvSj;71285,2444 -DLDCYKgf;46599,71763 -pmwKosqV;54491,31207 -ZUncfzBs;74375,28286 -BbXIBhDs;67831,52188 -ruePXjZc;36388,10060 -gSKrCIgJ;73030,3220 -lewiKlRX;58697,64320 -toZVXNhi;89413,30581 -BEopdeFG;81155,86204 -TLrpJmJz;81700,42923 -osXetfqe;34594,62604 -wKyxnHTS;31188,84299 -mthtIbtC;16486,71681 -oRIYPvdE;35890,45610 -CbFvvOzq;20907,76452 -RttzdRvt;47253,62168 -MfIncuLZ;85877,22342 -UXBfefRs;6645,84704 -SKqlEmGW;65133,43836 -pIPNeOFh;75001,58548 -GjKrLXuc;32223,53246 -jYibHSXY;82287,3019 -vmPwKBIw;10134,44652 -bLfPiJyC;21753,57418 -HDPAqHpW;60686,63678 -XdtlzLJO;14569,62431 -mONZnkJS;12468,29695 -bKGxNzeT;87962,50660 -MWVMAKPx;68140,62967 -zRmrqfGs;31313,85069 -gLBaqUuI;56178,44141 -hYkWkCHC;72183,13346 -xIWbaQhr;11008,31785 -mzMJzOSK;34788,71102 -znOPzdnH;76721,53949 -FtKNQTiX;70301,71436 -hdcYegjL;64251,44061 -uJIgmJcE;14164,28832 -lKOweyha;82695,61727 -qqiJzQqK;71003,81045 -OURiNXkc;26137,51013 -SpuDbnPK;73786,81074 -XRgpHdGK;35856,59217 -rqApuYFY;59450,14632 -dtyUwWif;34652,77912 -pOgIPRcj;37254,25122 -CmrqOfLt;32610,87939 -rUAniMfa;10401,3289 -boItwcsP;21523,13337 -fceLkZYX;1338,70723 -MtZARTQX;60106,47788 -AFUVcvbG;17079,86320 -IFiWFqcq;21636,45131 -ktrRzFRZ;57840,85871 -lyhwuDuZ;6380,85940 -UCAMKOYc;36828,57404 -GIwVhpWJ;66685,81301 -CLZiJOCE;77445,48898 -clnNMkzN;32510,23176 -xfnOXUJD;59190,78369 -jSQDuVYl;76823,75639 -ViALNGdE;54769,84582 -DomuggTT;28070,70634 -koqFXnja;53410,71417 -rbfgEgAx;5231,15016 -dTGicuki;72409,24136 -RMwpcIfS;2846,5285 -dlGuIPqH;17590,12266 -PVozmHfY;72864,61467 -twNpQWui;50371,26567 -mWoISmuo;67467,8687 -GshwJsWY;41415,51191 -VPAMFJVk;1439,39896 -OxwkspVH;31604,21975 -nKXsjdnj;84585,57441 -tFQUUpdi;22825,82562 -RKGumjjF;19960,61619 -ukUSoBRA;84151,41093 -tVNUcshb;53023,49928 -jCoxVRKY;41850,66488 -YhOtSjiN;14951,52727 -qMXzefYb;12748,80159 -ckjsicyM;31231,57970 -rKPbjvMW;47830,84326 -XFHgzXkt;37678,39074 -vklLNepL;32865,55576 -DBDEMpTX;25517,68155 -wBbmcJnE;45424,36590 -JCGlWhTJ;75247,67418 -xxSGASlZ;42491,88754 -eWLOwbUp;32340,21293 -ZijzOzpK;60512,20983 -OUGLkleQ;22064,47379 -hRpWjKDG;37731,44678 -KMsFszYI;29493,41343 -dAFyBRsA;82078,27047 -FXYhgYhh;11696,48208 -JNjSTGSO;69864,2731 -LbLohGHo;19690,56971 -cvXGvRzz;24404,27916 -kzUUwTsE;78253,30961 -WJBykMQY;69426,35330 -CzelQxPD;27887,26662 -FXMHfMwx;71482,49840 -IFIkiPRY;79843,52699 -Wcgmbtrm;5894,53428 -MAyokvIi;45983,38353 -RGXrzRQU;76326,48015 -NUHOnQTS;9773,59984 -plwtRPiX;67056,37899 -aIRRgYMN;56986,20681 -snfOeCCO;81461,51013 -PfFoyptR;49675,11055 -JPlFGYNg;63586,68910 -iAlOAfDY;72136,38053 -xjmLMweE;67614,3246 -JRYXIfHu;2087,60375 -vfcdngma;83891,42910 -vHsrEFFC;87172,40212 -fLpZlOaV;24637,17996 -xKUBJpQL;80635,86714 -dWgVJsut;63113,86712 -frmNvNUN;51576,80145 -XPuWIPbh;85906,16508 -NfdmgfJr;50142,59021 -srmsgMMW;74167,3501 -hHsRNAPH;79783,63666 -yZFEiIKk;20251,28023 -AfTqLtXa;26645,16132 -iTdpaDTV;28153,86246 -cPGZordr;2052,69375 -cdwirhrD;67844,37285 -MmBPUlrI;17649,64144 -VPupaoMj;19574,65864 -pxJyhDjM;75437,25044 -zgdwsFow;49497,83133 -ZjkzgIsi;87728,31323 -VsvpQdxo;49696,73789 -OvQnhfVL;67173,9586 -yfMwkkCO;9929,78696 -mimnpUFK;1677,64826 -IkCEJRBL;42248,75527 -ukDKNSkj;22919,60128 -vUXhNeDP;1247,73991 -dGGLuvMz;32895,21857 -rUBFouve;14349,77684 -wdhYUTxA;15181,46878 -kVVxBUxr;3461,26203 -wkYmRYYj;17164,40077 -XLNiFnkT;87993,62752 -DQPSKLSV;84265,37652 -ZXVsLOmu;77429,7589 -hxcOfalm;74213,83717 -vDVAQeBa;78818,40558 -gxnSGxHL;73321,81908 -CbIoixsD;47586,49694 -LRXcIldk;77036,28170 -IcswJiWf;2656,23556 -UoCghjpH;43766,12962 -dYasshBr;78143,78734 -bfCmAflt;32217,89026 -kPRPGEDl;29413,31371 -ibBBhcjo;68286,64354 -uuUYvpTy;59865,60098 -vJNRbOEQ;49118,80905 -FHtxabHJ;52799,81688 -yOzCtoxR;34892,74597 -QASlnqfG;83425,4871 -SDzfzRiH;47815,43679 -XVoviIVf;88074,27207 -aslTKEhF;46475,81167 -nChrlHpw;54426,38699 -emJryEtC;80962,37794 -zKEWWIpO;41827,78806 -RlaKpijR;83756,61244 -RPCsQAyf;69765,7159 -hwxNBnAZ;41619,87040 -EicdlutV;26419,20308 -hQJSTXlZ;1105,52168 -JASBOQWE;49809,39903 -ybWoeduQ;66550,22624 -JJLKfRRB;1487,5624 -viaySokg;80123,72730 -zMgXMvvT;14654,15331 -aWwIPElQ;46520,42162 -qmMOmPfp;61520,63534 -wLjyDxFw;43726,43427 -FaOYxyQC;10220,33846 -ibUhUhRs;63867,51547 -nETyjqLj;63030,47431 -jpLTAiTk;51748,68876 -AzPhXjVw;37768,5390 -OqKkaACi;29113,88820 -jupzwKFJ;67879,4969 -XNHSSLPs;64523,48111 -ZsPSdYLq;69966,34654 -DOTUhFcT;28502,68951 -hVLMWufN;40698,43276 -eYBBuWdN;48066,40254 -PfJLaOOC;27265,2835 -CthRecCs;69712,29642 -zOQBpIYZ;47441,56254 -zsqoEhcw;48551,80304 -nfTtIPnc;60713,11505 -XrrlSVmZ;28223,38465 -fxZuYeXj;17486,77649 -hZsehmHF;38016,15243 -QbrTZSDJ;68883,42270 -LEjoiiOG;53300,34326 -vUlOoAyE;45704,70626 -MxmqsmPj;68811,31130 -VwhCmbNT;7862,77696 -USHPKlFe;15035,1865 -iGFVsWfM;15303,37777 -VjuAQMSa;46679,24717 -tSGQepom;15300,14709 -CQaUTfyw;86773,11077 -eiEqDzeB;51230,21160 -DVMfdEHv;33624,79852 -XhmqRWkg;79318,40651 -kCggqQsf;1734,71258 -wUkTcxwq;19492,77539 -WMvxwYRj;66763,35175 -CtglCKeX;45661,87615 -lynVkrMH;59061,79048 -wzlIBmoN;49866,17992 -dVmnUmen;58055,63313 -eINQalru;27399,42178 -dQMLDjiY;3558,20005 -vrQUcuVP;3327,77086 -fdYJhHiT;4774,34735 -KmZfBwhr;67432,50496 -AUNBMhBC;30263,86984 -RVwDDPOV;26251,25409 -vBGDbYmB;51914,11463 -ZOUkuZRm;45389,74729 -jxgmuUKm;58350,57552 -zQHYGMTz;51819,52808 -NEcrjzqu;38398,62132 -izPYGSaJ;8050,28095 -fCVrRVho;32374,86784 -DbvuAkrd;6220,45439 -rmENLNJz;14820,2324 -MhckqcRZ;51665,89107 -YlDGKLul;49139,71028 -wuMMFUuU;59165,60733 -JxYzAySS;18876,10947 -MUcUNuPz;35471,42531 -kcLQmoNY;44987,39911 -UkXeUweF;50040,10693 -LceFhozD;13961,29761 -VlXrpetj;22828,78778 -nAINWWQl;74121,44976 -kzAgvmfk;38773,62163 -bGNpHZUk;56498,17097 -hTcqLFXp;3934,4841 -eqSJWdgR;88431,73805 -vBjENYXR;88899,15160 -zGuiHyQw;89730,76837 -sQmzTRef;28044,79564 -dpjKrgtx;23788,64911 -qhSZeDwx;23885,63506 -RQcKvwvq;20103,74812 -eteiHxIO;48865,53643 -axAAaXAM;84647,89189 -PWLxZcRc;41801,49436 -hEtBwjey;70981,14950 -DZRTHkaY;44717,8209 -yXjvvjeC;69036,66341 -eAHGHzsc;23229,20832 -JJhZUfTq;12306,6488 -zUNVpYWb;49574,38744 -kIccOfUN;2778,46760 -ZgbzrwoV;11625,18014 -eOQbMmqu;73173,6273 -xWJVPzZJ;64303,70540 -OqqXUWEO;41594,64550 -hRscNwNq;55578,47696 -nAKREIUV;36434,59574 -wTNqKVre;34832,39514 -PllZvLYJ;84453,24355 -AujpOOiy;28647,23596 -CTPaIcZx;47699,65699 -ZEUDyTlN;39165,87571 -TBaZQXKc;33744,43693 -bXYnVRYV;58160,1083 -XWjACiJl;85091,76509 -WBounwwp;53898,27157 -QYCMitFq;83563,84957 -yZsfIDmY;53879,68805 -pvlHdnYw;80434,54340 -OrlFKOcY;34997,88618 -KHPpWDIq;39745,24126 -ZDrzNZHT;24710,20973 -qplkzQoN;51243,86496 -rnBSxwwa;28845,49817 -WHFTXnrr;27892,69235 -OvpvDFNQ;7366,37937 -tEkQNuEZ;26374,6943 -gzxIbuJp;50491,20172 -PAqswkRy;70107,54218 -XlRiMBRR;57257,14691 -mKfwbqdw;5967,27603 -wIlSibiY;8392,27579 -pVVqUXAO;85227,3234 -DzFuCpYp;75812,6194 -JhOxkyiR;74294,14319 -qIlPgAqX;26297,88868 -aBBkuXFl;71466,74318 -AWDLwqsF;66856,15321 -RJGoNGbm;36826,70269 -KdpqKcjL;4368,86824 -xoqwuyex;25902,41679 -stFcJHvt;1750,88514 -jTUaTnPx;61826,28609 -PuqSfiMe;50267,10109 -xHPLXZgs;45610,14429 -YMTtjGnd;40538,24225 -dSvIzmIK;58818,43987 -ozBUJXdJ;77577,52095 -MvOxFpKk;69055,7902 -kANiQKZr;28587,88307 -BIZdRhyS;8213,50667 -kYcmmVpo;77946,83884 -RaaNmWny;1512,33860 -KyneuBBU;76948,78006 -rPTMBwTi;5684,87356 -MOqBTkVC;78148,57322 -YuWVvTRQ;70477,67771 -BcyVfaSH;57583,6046 -RXzIwckl;29560,71598 -uwzfRQgS;72079,67805 -BpRkhEcT;68122,65930 -DIBMflyt;56766,28611 -NBomkZYL;79274,3618 -zFZLFGnQ;3517,72364 -WdNgDEVT;67073,9821 -lqxLCFPQ;10342,89809 -oBnJWLmb;83763,31020 -pFqTCdzq;52500,48210 -SSJLFbGV;72179,74288 -BzlliIhJ;25291,15343 -wJTSTHbi;81998,23235 -AgRCfsXe;78014,7383 -WsXGMRSb;79341,80780 -tqulQCuH;76824,66114 -FRnDtUxu;18332,85989 -HxyoiqKV;17079,80469 -HulNcnfX;51511,66289 -mNlINqKw;83873,37501 -BHdnsQwW;12493,42322 -vxzGYfcF;42706,66068 -SYMfiLWS;58341,10745 -TFoLEZvf;60571,13355 -CRMBmDYh;89083,80834 -IbXmYkGh;36750,71368 -BzHWVsmo;63586,43844 -uYoujrLS;79263,4691 -SasOgjNk;71686,67552 -TirElLJe;84511,79582 -yavODRhb;65087,54281 -EkqqIBIj;46785,41993 -WjOydKpq;27523,84988 -GdXAZTwh;69343,50585 -mMsRNoNH;54544,12576 -LlgLQycJ;15257,34506 -ZfHzjABH;74602,60074 -DBgCcvhK;76793,45677 -bjRQBAzE;11685,88757 -eNayYhLV;77574,52484 -MVkAxgYk;64178,60439 -MBTpAOdV;44835,33214 -XzNiTFHR;45143,78980 -VNRrmUcV;47543,88183 -MiEhpaVw;2443,41685 -VobuesqA;50251,29076 -fJHbEGlY;11197,27404 -vFVQBKFW;81833,8382 -umMHEEJz;89361,7705 -xuUvmpmU;37958,60358 -BgEHtuNX;34579,3953 -oXGabNdJ;36930,68201 -RJNpVypx;62664,12641 -uAhEfASr;50673,71129 -kWfwzhQw;64991,1816 -pOESFilW;30382,85406 -cRCdQIZA;18910,17350 -hlMleAPS;64371,9159 -SDQdHpqc;60817,7501 -hJToizYO;20414,57124 -iOnQrIEk;12462,87496 -OetVGJvJ;80612,63882 -ybkHiERd;42059,88259 -WRdSKhMa;46965,33736 -yZMOgPsg;13039,85025 -fwPCEzaZ;12641,89597 -ylApASFd;29517,50633 -tSZPaVbq;77127,43792 -SzHUQaGB;85655,68703 -zjYRMQzl;47778,3080 -gFJobXBj;47002,31532 -fajoMMRF;55604,72850 -XGGdDzqo;39973,66523 -WBVqKqit;74145,10851 -QBpjQPKL;13328,34020 -xAEgEDer;45889,9355 -lEcbAqad;14891,19543 -zunhBNlE;58915,79901 -PLSXKLgB;58659,33312 -NEJqIsCH;77030,63717 -kQyhOikV;34470,31381 -hLJPtHCw;18650,79013 -jAXuMRHL;31402,85818 -bPiTdVbS;80141,81626 -rBuzBqjy;46919,39375 -SVyQSsEu;15541,30861 -iZchqvbO;44450,51786 -mwuUviwe;5778,60798 -XMLaionN;54795,23202 -vSIUVnya;48893,29380 -rRNdfAKW;13293,64240 -lYfmiefm;74246,19860 -KfVXRjAU;56074,52962 -aktLCDKS;48426,59948 -lqPOJuRp;38461,25515 -RtRGKtOY;89469,46505 -HLrZRnRg;86610,42710 -gtgVDJsv;34845,7345 -JIECcrKv;25484,44535 -KnuFizoc;25023,10333 -WYZlEAKE;23968,55039 -QjANQenU;38304,34919 -RrVtZnqY;57419,6630 -nCVZKhfI;79019,44004 -NkDXjcIy;16897,3309 -odbmdlez;48187,12006 -jHqBjXTL;37703,75889 -YvxLFGLw;42539,76762 -DxlGIUTi;32656,42261 -SPeDbfgp;73908,33076 -UKKuDjkj;32806,66092 -TGrRGtXT;68330,39619 -TCLtJGrW;66981,13446 -nxVQbluY;13345,19953 -pALWChyc;13366,51233 -froRMbwO;74013,28629 -KviKsfkC;82116,54626 -MVHVEGyQ;88821,81393 -QvYgGELw;10788,39292 -CILUPwJy;73693,71900 -eQKOEDYZ;71723,21095 -ltjjCkPh;53172,10547 -soiUyMnl;14001,19640 -UYFrTPEs;76798,47609 -kLfhwVHI;85513,71722 -FcdmpseC;4841,71988 -lHclXeRJ;60712,62134 -DIoxuNPa;61819,88642 -XqwPDfGn;75147,33685 -ZjLhWkuC;80343,81407 -OpHnDmQv;70997,32132 -IcBETXqH;24765,24521 -WlXcTmcb;4116,25460 -hqamXBZY;2941,7409 -IbgprIxa;69656,65886 -dUlYyQAe;45282,24476 -nwLpJrkh;66493,62141 -esaaDjFN;49716,81227 -jrepTYQW;71936,3924 -zqEVOvqd;11847,76114 -kpRSBSUe;64445,42447 -JTozxXGN;71205,55775 -jqGpjuzQ;44381,82085 -gAeNbdfv;61123,64204 -LwePSwbQ;67591,34057 -xgRwNtKE;65050,16956 -JNYFIBbp;25679,36237 -qfePuiim;63908,40180 -CtEozZTP;17096,66944 -HVuoVXeG;39260,61141 -bZXHsLMh;7074,86060 -saSXWLJf;19776,68636 -WJGQEsex;41212,5636 -CPQxTJoj;54020,6078 -rxWtFHHJ;14015,43655 -Gwverlqx;13393,3864 -HKSVizLh;21121,6276 -HTGFPuNk;57930,66994 -NatfRyoW;72713,89421 -gaNjXsOR;19694,29707 -JuaXYGVi;24290,63503 -PqFklGZG;14052,34182 -nzLsPzff;22506,70828 -nGVnpuAG;50966,52176 -cLWylkvN;18830,66998 -qRRRHCyS;22394,4756 -RURhtKbd;37040,46943 -DKqHKYPs;46455,10831 -gPYOABoE;42901,15951 -ebRVTMgX;12187,37204 -gPgzwyHc;30882,26777 -EjFxkJVn;41724,61918 -zXyadhhV;54994,1441 -idAzNTtP;62376,21439 -YFcwRUfz;89082,55721 -CThbOJPl;25662,1928 -ibDXjevp;89757,9080 -XwfxcGxx;69095,40409 -XBqtfluz;87064,34540 -WkYSaIgw;14236,79273 -WhqaOLDa;88544,73811 -BcosoSnY;46699,15644 -avMBMZet;37553,30914 -yexeSOje;16354,52934 -jjfwHjkP;53545,22092 -AbjGOyvL;76597,54949 -UrCQjmOk;72005,28909 -CFwtRbFw;83265,54425 -mwjIGyLl;45347,41542 -rYrCENyu;1138,2617 -VuBJKtYX;73932,45308 -gGfGUTfL;64328,14650 -glAIrMFB;57798,21023 -pIlreIDk;37211,59560 -oKmxRsBr;14967,42842 -kirFFSkz;12511,88269 -hfyZEvPN;60388,78846 -IfSWUYzD;71981,67586 -CCgInVwm;12757,55707 -sTHBmyUI;40654,30738 -faRRwxeJ;33638,68655 -zCBDRPFG;8604,19336 -BRLsEzSq;85408,73243 -mMzDJQsh;63374,38713 -KHanDuWG;66196,18731 -FkgUoqqi;67779,52853 -TorqoRqQ;46664,89156 -ZeFgvUSN;44808,65195 -hPWhCGUZ;66526,20646 -nFWcPaPf;14169,62767 -DaxbnmeN;7505,59466 -cJdHGssT;10890,4589 -uKnpAeyy;73082,23333 -ZKvLJCKu;48414,13305 -amxPQhCz;6209,50230 -CODHzgfy;30061,81182 -JxkMGvQK;16680,36271 -cZeaGvHQ;55959,59362 -owmYYZZT;6237,26799 -CelpugfM;22022,83772 -vHKjSesT;78676,39074 -EhVJumiZ;74753,36624 -LVomYjzn;74601,64437 -CxFitngd;61178,20988 -xKUWhfVq;33162,72307 -KyDwRqAT;35038,86374 -UAlqJXIN;59290,54142 -aNTyoigN;25469,82272 -PHYfCqEW;49107,49246 -lCLzCqej;35547,42067 -XSrCcYlJ;22467,6985 -vJnhMevU;17085,79439 -hpLShuYd;39570,31071 -LrzXYQUo;52920,47395 -jKEtISsR;18757,80653 -YUbcjxmy;52810,89190 -NLzpIgXS;39256,78241 -MVqrHmDA;35726,42699 -MDWtjIIj;82614,84574 -RtomWoCD;69334,36757 -DZweijkj;84113,77280 -OZLGMXgi;69812,16194 -etQCzbXb;66889,12630 -CdZKXiqv;39065,52137 -oRgBGPlT;14975,12535 -BjOtlvFk;55101,26132 -IobnnyYo;27992,84081 -ajjeSEHI;38281,29945 -fGGYilaa;10431,49016 -xgfeSeFE;69699,20701 -dDbbhLJp;40192,12055 -KfLzZYGk;2290,38946 -gpBOdPpU;32363,59265 -qmXCdyqb;11624,66701 -fVWZmuuK;26093,50434 -qvRTMJcB;35512,3132 -IiXbHAvb;33187,74640 -laRIDAOU;73115,12201 -rBjeOTwc;34008,86329 -rnEfjDLs;12002,73166 -qqwcRBzw;79386,42219 -HRCKfjiu;81845,12482 -cVnnQbeH;87546,28781 -DuBsUkeU;10524,74791 -dQkrjPfH;16502,50239 -MDRKkCbM;48795,35066 -RKVGXaug;15476,75198 -uLwtFUdS;84552,16797 -ZOECFncX;85959,46634 -lNTVuoWb;4998,20111 -IpugLYob;49939,32106 -Syirtrus;13344,75817 -duPwORLh;87025,56573 -VNWLcIFf;26597,5312 -bRcsjwjy;59047,70238 -GYLWQLRZ;39664,14969 -UIntIxBD;59631,18977 -QITatEoM;42179,18365 -jkeXaLWM;74807,18166 -jiUZmJIE;74901,80102 -xwPkZgIW;37588,4605 -eCRwRLGj;73848,70782 -lZzXdIft;59162,43318 -diNjkzTJ;23256,77572 -SqRuxFes;18813,18374 -lqWgjMpt;6722,38019 -BwHoTWhC;17146,77466 -WolVgzBi;43718,36401 -lnciqNIw;66009,49697 -xscZFuFN;70770,6393 -JuGwlqLU;79181,51323 -dPUqbLmz;69678,61936 -JPjZsKdh;25826,78936 -Tzfmqykf;49282,22411 -HSdoLfox;52185,57510 -whSaCAcP;51383,27998 -LdoHtpgN;46515,22450 -mOKkbnkz;55630,55285 -iQlgSLBF;13736,25464 -jXSKmJfg;52132,17013 -oMwLIMOH;38279,18831 -nYnTbQjp;54188,66690 -NpBufHJh;2273,10676 -kfdFBfCl;60101,24124 -uzgwLUpl;72230,1248 -BhzXpYEr;66638,80695 -ptyohZHN;54054,48083 -vPzZrCpL;42305,22857 -PDGjwsVO;69131,54408 -VgMQFYuf;18635,4238 -ucHUuPUM;49231,85793 -GhzUWWKb;10478,54642 -XqFyRUrE;17070,81244 -LyxCnHur;8141,3488 -BwmXoQxC;77121,53451 -EHZvPFbN;39726,24649 -ujuYjoyd;20076,86609 -hVQPcAfp;88668,70202 -CNtjBsGv;73883,64115 -fAiuHjAW;56907,76015 -qKtohLfo;32281,39141 -kEISCQLd;5734,79665 -ARSvifWx;18765,21034 -vGvZrmNk;32107,62244 -JILYLIpw;17619,15886 -FGNGGiYx;73928,71674 -IgoIbWOz;26765,17680 -zpXfiJsy;63321,11277 -lwZiEwmq;38379,61639 -uwxvBfQL;62668,10592 -IxNESQiM;84397,6538 -uPAMqLws;36814,12380 -LwFRNzBV;40722,18552 -MfxcQDHn;88029,20688 -HvELQrHj;45712,14412 -bCeGilmC;56861,86513 -pFdgxxqf;24102,82419 -uJXCvTAA;34485,79764 -dAiznQiZ;80315,84903 -nwkpSflj;43292,59869 -kDvGeEhV;63442,32913 -CjgFYcpC;59067,81714 -VXnAZaXH;62308,53810 -seVETHbW;81156,33791 -eMAbYynG;39815,87106 -HKMnkKnr;15206,50616 -KGHIMLad;41354,13379 -IwUVUxxl;42956,36210 -wEZMAKPC;85120,81209 -BQIkYrQI;81822,10456 -kmWHMeGY;79747,25037 -JrqwQIwH;8238,81411 -jtGyvQDs;65557,78526 -ADDgOBPQ;32951,69178 -uOlKCgJB;9194,78577 -khbVfyyj;54268,24031 -TJBcjcpg;68393,64331 -YIoRGNSi;23192,69066 -hRewfobg;83128,30824 -bJQBCYOK;48422,86674 -SCroYpUj;7993,9998 -lcfinfXa;61952,55543 -wDzriJsp;50785,80188 -GkuHzNyN;86522,52759 -eyRKPYzD;17430,10067 -qkOIRbzH;48157,18104 -QTtutqVp;61042,22415 -VFRQJbyG;57493,32993 -TdaHYBuh;54394,55273 -iAWuMmZn;41748,58513 -kNOAoChM;89197,60039 -RelUaLdz;37066,74466 -ClXtKufu;30581,79605 -KDonPDWh;11880,42502 -SjRzZzUP;61544,73911 -goweVAZI;46625,24450 -nAqqgiuQ;43450,44002 -spcDObhH;23165,61392 -ypRBpbJk;4613,60058 -liCJufaf;88578,46017 -RsyGrqrV;53291,25271 -MwJMjgwC;55056,80265 -jzKrqerC;18374,47986 -NKzTvtry;52150,33017 -oIzhvxAH;12429,23837 -AfrQavEX;66997,13875 -EFcWKLaS;43684,27560 -BEsxiFKZ;71771,7987 -BnvcvhZM;14046,76164 -jvfhqRwA;3634,81082 -thmNyNas;58026,13513 -GdUzTqxt;39025,41997 -QcMgdSiT;29913,1231 -rJUwGilc;87673,12880 -GSrwHqWg;29747,6135 -AwsRehqB;8393,31871 -MppyvcYm;72192,29231 -PGBawmNJ;30694,17285 -OdgmOhKI;59028,65991 -dkERsIEe;12349,49846 -AmyMyBsT;38390,63979 -jxtGJDli;88795,48614 -bvzFvFSr;82021,61004 -IkBBcWJM;2465,86077 -fVBYrsWD;54806,31822 -PAvNFxRF;3678,74152 -vBdYuJmh;52813,45544 -SOkxDfBO;1366,47973 -HsEuzDrO;48481,75953 -ImrYeaLD;58785,19815 -sJAMjWrN;17572,89879 -eugvgqnL;74876,1937 -rufdUAlN;17669,12253 -aoOOwjeW;79660,10550 -cWGrqHKx;17678,89481 -gtQOpiLE;70861,80878 -lujGEmWI;22956,40259 -xREEeOQH;53428,57834 -Eiouowqr;46231,78170 -nwhbfdKG;64290,80031 -HjRBtswh;86107,85441 -ykQzKgjc;49055,79204 -PPKAwYdc;66085,63814 -TtxUDuBs;65502,77213 -ZlpFJoQO;22547,13894 -LHzOFfVo;48762,56073 -GnpSfYuL;14485,57427 -JRVpPCIv;29511,58880 -BvmQBImc;26621,1089 -uammdvki;20477,49438 -qWbzTSQz;36807,42015 -QAJziYzQ;43854,51417 -OMtUYbnv;80922,38250 -VWWXPXls;72614,40029 -GecgfwOV;1903,80393 -IWnxvTys;13962,42833 -eGReymcO;17321,73159 -xaJKxLTa;8377,36392 -aHKVoGSc;10520,81820 -VFexUXDP;81389,60215 -lYUbhGxi;9304,30946 -xuJHhSpL;43258,87173 -yhSUZqhh;16823,67256 -wgXvWdUW;56478,39480 -AcdAVvEb;50817,73959 -CHXXYiqj;22334,28701 -gCGuosQB;8778,45698 -BNLghgWv;61615,40342 -QjBUrwrZ;1842,84049 -FZUXTSXf;38894,59630 -CEFNoJKY;44836,71848 -FwwFyyHL;28367,71297 -rVTzleWS;39249,86646 -ZgicOHJF;5779,6742 -vowzKaux;12324,5696 -bJRZZyMw;79196,10534 -AYBfQNyN;25692,25184 -rsmrHKeD;50599,85501 -sMFjAFuU;22516,11923 -Knvnxvua;67837,13481 -lXLrpoLb;38178,84888 -hneAconj;42912,74612 -FTKfaXAl;9709,79244 -niuQoPZM;36192,49108 -zJgLYBTD;28670,66274 -qWBIFOxr;42258,49618 -JeVuSuWr;41735,37479 -AXHaZrbM;69162,26593 -iDyENTtc;46041,28989 -ZdtBPsAV;66307,14791 -daqzKAtu;73766,19698 -otHdPcsK;12157,89267 -SdtEBRUN;76714,60960 -lXAqluUy;72850,21550 -UKsKFjgX;72559,34861 -qHLYhmVe;48798,57131 -dYqvPWgp;3476,58555 -cpFeAiYm;87010,72068 -pCMtwCZS;30533,86380 -UthsuhWD;54705,70701 -mrwXxphU;50699,10941 -ufVxiVBB;45994,39331 -LJkQFZKz;37520,51570 -hxsURfiY;58692,68160 -ADOYtfHf;2755,27731 -XmxAPYup;21570,66569 -rlUmLxCa;70985,8654 -gVuayMRl;51444,80244 -LfCDRthW;75837,54380 -eKBuUOtk;25371,39031 -CFWUDzVE;36242,23039 -ULQEemfW;29579,46957 -CZVUvJDu;60175,75933 -RZwusYhy;61981,26716 -pwgoEcAv;12343,7612 -lWmyIJtG;81941,64673 -bpUGPFLA;83346,31659 -sYMMJByk;49911,85926 -JCoKRgeG;10368,81365 -wjfSpgOL;24542,89991 -OBNFlNJe;63457,21796 -ovIznqRX;19558,72454 -iSMMBlJH;40949,73836 -bfXdGTuy;60142,65749 -bJnmbwzX;70626,45018 -IbRLRJYL;37562,18006 -HmXnCMxf;22983,2106 -AisodweF;87221,81107 -RDqqpzcs;9083,72689 -FJiwhnMC;64751,56014 -QesZISKA;41618,32638 -PQSaiWCK;56576,33905 -kVZunWGK;54842,65108 -SHxOQKdA;84024,41334 -ZgeLQueU;47757,22987 -kmYFvxZU;18509,82636 -IyOzckSP;58754,14426 -IZjIHxNh;38244,55970 -bKwmGTcl;17521,1093 -ALblhhEH;70294,16326 -ugTVBOij;1996,55066 -CSPjBSIx;70523,26894 -jmsWVala;55124,43214 -xTnTGRmB;43004,46143 -oiaAubck;49088,30431 -uQyjOoJe;32230,8260 -bJGgfqKQ;83526,87310 -WKEqUvvm;54479,79120 -TEIrFKwh;51304,45624 -lIVBXvOq;7095,41211 -ChCpFmzF;9518,41949 -seDeDnzk;28479,45071 -iORxRakq;28193,57851 -czVgvmSB;72173,56227 -nOPszQzY;42245,6061 -xcSHkKuw;88054,43444 -SUcLtlsP;78969,80909 -fUrqlExs;74804,45876 -ZhgnInjM;16218,76288 -PigCvrDB;3356,83981 -FfudZSVo;17589,36989 -KmxyuAeZ;78245,53115 -oEpruBqc;63385,37959 -KymzbKHg;69439,21303 -DTgUdZDQ;60554,81295 -WQJLEyUO;59628,42075 -zmWvSskC;62166,2102 -goIcGufq;75757,7490 -URTeyabs;12157,31115 -jLExXdYc;33892,87322 -duuqMkfr;43259,41568 -OTdHpEwL;16426,58010 -hLpylDAJ;53121,62494 -bEqxLbOr;86217,14122 -HFAiWPvk;81586,69863 -gWpdrnXT;79184,58126 -FxqMcZdf;11506,48653 -ufLJEkAc;33931,89487 -kfmCSrhL;12611,68540 -bmsHvNoW;12521,72297 -YbiwGSxS;35632,79779 -gwmTLgkZ;16187,55898 -UJBdciQq;52769,8047 -GHwygyid;68947,72956 -HIwSpRQj;61727,89942 -DlJmiAMB;30196,30578 -zwpOSHuB;11689,84185 -ewlJiVjK;16426,78509 -UsCpQXda;72733,89241 -pRKBpGWL;82867,73735 -iPEMQxtv;46613,33117 -MsmsEbeX;48597,52297 -teexbpMl;78402,48602 -HzLgTfkp;1498,38591 -SgyofqbC;60539,58086 -HOpmuzah;59241,71600 -GxPqGHyh;8098,73682 -rjyBfrhc;32800,58976 -xbqxXkcD;13903,48634 -kkEWOPVO;71938,54589 -xPjkRmBp;41089,35040 -zCQOAtgZ;21530,4376 -LuvxmSRW;56593,1370 -bCaVyFzm;57536,5031 -KdivxUEP;21192,56687 -djNXsOQD;41784,51088 -MrCeyulm;66560,7019 -cVXAFpUa;53456,15878 -hdaajCqU;65634,3890 -XaymysGa;35356,82944 -uCLjcLVe;89071,17184 -XnFYvntX;9325,12202 -wpfLcnUa;20659,17078 -GWHmBkiF;58308,55597 -ssHvhKOR;60217,37640 -xuIwZAEQ;56329,11935 -nTvZbquJ;8797,67206 -zJqviZeT;12250,29573 -YGHzFIXp;59157,8801 -JUvaiwuN;33812,32783 -oyCpVQhz;53510,41771 -MRGIqHJO;10897,8404 -xCwtSmuv;70170,47462 -gNGNuUdA;59370,27185 -GIvPYfQx;85232,5803 -UjqJoPsj;27393,24647 -XUtrApen;3997,2429 -tBrNRxUG;39820,52842 -hdthZKNW;70841,40464 -LoGzLTQc;51417,65677 -firRLvhG;16436,78708 -TgUfYwNu;21714,58859 -DaorNbvO;46792,6849 -OSwOKfTZ;75756,17009 -wpMUBuFL;25466,62682 -EdGtqGyD;35170,26545 -sSxFWhym;40195,65233 -kmHCMOfI;7354,36185 -ninIVYEg;71907,48776 -QYLNVXyT;28299,27905 -msWdiExw;85898,44780 -CInrmITb;77623,86138 -njIwhxHf;67109,30619 -PumGqkfH;62204,69743 -OMYAcqYD;70186,55616 -QmJvAnFG;84799,89679 -vPMAQfYj;79105,33733 -QZOwNtiq;6700,64930 -DjeUjewd;7449,85831 -NpAZdiTp;73982,37708 -nMNAwWWP;88568,83443 -xSJPhHfT;3196,18959 -NFJqEamD;25000,84452 -oNfTAXoh;80388,70277 -tLDZlLtM;40703,26579 -qypjgKVW;73200,9493 -cdtnKiJc;46129,43240 -bcVNAnYA;87514,88152 -WwsYTxSL;51363,79310 -cNGQfIYy;42275,3543 -QjAcyBnp;27592,80834 -zMsgTDRP;51464,35744 -EerGJCYe;67277,24059 -qcXUqBkp;29818,30051 -qKWUYCfL;82582,85006 -vGDTtmCp;68563,11287 -SDJTpPnV;39620,47513 -vDhmXEMs;69708,4666 -fLHbdptJ;3771,6819 -BjWxxkCq;44210,64310 -ORSKaTwP;41163,43691 -sCfamSPL;18415,86626 -OMYUVscN;59943,76649 -szJpSbOS;26470,31476 -fJdIHEoD;10637,81121 -YUVNsvxr;53884,39996 -YXMsmXPy;36807,80794 -aLbDfmbM;85728,45323 -RErvXILO;38971,27547 -pLHiXOcH;86911,61653 -pJJQdsqk;30957,29857 -dPBHVnJh;2959,57195 -jXsayoXq;11793,56403 -dFnqzxUG;23551,70438 -tYjxXPHg;51684,51041 -QcxjoqAD;64866,57981 -NhgykGjq;10584,62713 -iFAzoZrx;50047,87467 -DOJlFQzm;81791,9244 -crnCtzOl;44937,30955 -mfDSchzJ;54419,60809 -DuXFAzwk;42403,22741 -SyDGQQCy;68031,57433 -DWztANGo;41768,23132 -RrxAXflH;68307,18609 -sXoMSOUb;74690,11228 -TkxaUrCJ;59888,37982 -ZLreLurZ;60607,82202 -rZSIodbr;20450,73948 -cCMiUezt;3092,40970 -AtBlfdSk;71988,78760 -cnxGUiKj;19012,66693 -jauaSGJU;89599,39972 -OoKQiYaK;78172,47278 -wmXExxeE;56423,8903 -zbWYLoIF;69962,58429 -bPvRqYxg;78702,37312 -bEuVgiqG;82975,31675 -zYwhaIeR;50601,58781 -JONIDPLp;58037,11944 -XClnqqzW;66049,74367 -MAGbpQSI;67395,28046 -SPpwyoeE;73554,27365 -yVaWQHAK;1220,12085 -IBBPgseW;55754,66957 -QcAGTzGQ;27411,75519 -YNETKfzd;40280,31350 -frhroKPb;81880,65918 -OiKSZIJm;55809,47910 -sCXVuMIi;61233,55447 -CKJzUeeO;39177,15270 -jrPyqFSW;78819,12683 -PnkuFFvy;47375,56161 -SJzgSdbL;6111,70437 -tNOtrZab;7751,44916 -OqArbYgF;59725,49451 -dMJwKTKs;50176,44608 -lRgIsGlX;8175,61493 -BzOeYeIA;67403,43192 -dvsumRgE;80115,63410 -mJBdLKti;54099,24928 -EYBjuTTs;26989,82621 -gOeRcgIX;49589,70124 -nEgMkLda;14166,40455 -CksablJo;26315,26178 -ZQXzPpDe;76814,34886 -vyTTGtxD;77983,40940 -afbGnZhH;27439,20147 -hknuVpoB;86758,60824 -CxlgqUCD;70734,30844 -JUNicOmq;12072,61017 -buAhQNtp;73056,26838 -fnbphTKm;15595,26901 -xKZpahNJ;18700,66428 -cBUWmwGF;37462,65220 -nWdzloRH;41886,32424 -vTmffDhm;42208,41548 -JZmnuzfe;65716,44499 -GRRckRfk;68835,77017 -HFsqfKlP;64410,21807 -ehznYaiX;53096,36400 -eauYeufw;22800,84235 -EFwkpYFD;86188,85150 -CeLmEXAJ;10444,62804 -BuOCMMOI;59452,26088 -ImlJujnP;36306,79847 -uFBkWLGl;2253,58012 -GPVeSWHD;73043,15750 -SIWnpOrU;76733,78740 -HVXZbtqS;5964,40242 -ZzDiJgrM;69666,28911 -FkIKJzJA;39447,72722 -VimKBudh;34487,69198 -KEWHDWqc;48989,2176 -mRmZBPwg;77969,15422 -CXNgwcOg;52461,40994 -XMQvavNK;89121,25295 -eAdfeyzV;30377,60021 -IRhEFLUT;78594,21765 -slfENYJR;67655,76579 -LVPwJcPY;9863,44980 -tVkWIzbu;31714,64797 -IjgjfemQ;24575,5029 -oWwMRwLO;88488,30939 -ByQLuzYv;66207,1041 -BbYegAQg;48943,27352 -USufGBtN;7398,83903 -lBtIOSbf;38920,54702 -etTyfQts;48646,76112 -GpDuHlLw;10286,44694 -FZYCRcvJ;1320,5575 -NiyAARsw;30594,68940 -FOmZGBfU;33953,4766 -urSGtaor;21020,1465 -WTyKRgnx;83501,40016 -VlWOxbZV;18061,72973 -HfGZcKjK;16854,64583 -orANTmKN;30216,44053 -wptqUmUH;59592,10017 -buwoZlZi;10366,42164 -XtWqzeVg;45582,59670 -PrcCIKcn;69841,89565 -jJSRJuRF;72418,74200 -QGYTaLCC;61439,55733 -TqfrySzQ;68537,41324 -uVWyFOrH;55611,3049 -VNkQvbtv;3629,74792 -TpNjQMEu;17915,48424 -NThPLuSG;40498,70881 -BVjlVqTY;72142,35118 -cyLdLOsB;58232,11226 -lNavSViK;2041,45244 -MJZGmSDO;76159,10156 -JucTeeFw;35764,75867 -cYtJuwnc;63095,78592 -jFWHlTIM;54482,18258 -wUfljIMM;52794,23789 -evhFZXyF;89634,40116 -BTTmqxcg;40691,85048 -SeKSCkrb;29258,80489 -PowbMOIX;34859,54784 -yzMrfXup;18070,82246 -dKfVTbdL;64840,13606 -aVDSMJWv;58818,26224 -cFwiOoGD;63558,45119 -SkTHEkuG;33729,40517 -QVsDxUhE;60891,31651 -uNroYPTU;34983,65550 -aqMpbqjS;56196,89424 -sCeXMHJI;37214,81024 -qXmOeDDK;63869,64991 -NUhKTpRB;1148,59110 -AcoxGXJt;10329,41021 -dwFLTdKL;45475,64582 -oyPmczDP;9812,19770 -xUZWVQvN;42461,22704 -alCpMxHb;52124,86398 -sdGjDHUE;70338,29146 -eTYthgDA;7631,60954 -qIvYYEjl;53740,17899 -oOvqvxsY;55374,1680 -kJgcvKUs;50303,11833 -lNTwVJVZ;73408,77094 -MQsSmunU;76059,59380 -HlvhMshn;29103,25084 -zleVVXDB;34570,21996 -cyWTEeEp;58083,36121 -VqPbTavi;29135,49972 -UpLIjdHl;79457,20433 -UEkmyMPO;40934,65117 -rcXaUghl;31395,36867 -uBREDZRU;2800,43816 -FMPpxWvf;75099,53361 -QOIPaEtR;13816,16394 -CRqbcYwJ;82270,79046 -WPZiNtmT;25374,63470 -nCTbTYHx;84130,87984 -TvGMHkJW;75431,64237 -CATWwOfK;40811,47352 -RrOxJQgJ;10661,54750 -ubOlwAQB;32601,4788 -FBVdirsK;13797,70475 -VFtxCoUQ;19092,86435 -eXjfxNGD;1106,89981 -bkJcgCfc;13851,21418 -IReYedDY;61074,34310 -TlqmjJez;36496,10852 -bWxfedVL;5917,17949 -oRHrenkS;28493,25575 -UsQNmIKx;19497,12244 -GzKCdsYq;40646,38476 -RCKRPDOI;71246,29341 -TithRRqf;69508,52110 -DIDfBYhz;59650,41400 -LeJMpSAF;88303,81965 -KloabAUy;72455,50185 -Ewnqrdmm;75290,26963 -pebDtskl;36823,26894 -eoEQQWeZ;27540,45049 -QursXtea;33888,22922 -miBzQbmf;75472,85726 -wKWqwsOO;42173,43751 -VDFHonBS;14209,69148 -OECzcJki;41067,10376 -tytsibiv;85579,16537 -rgrKEILf;22277,73305 -xxbJgzYw;9477,81898 -UAmXliEM;49780,25505 -uWxvNLUi;6416,9615 -KYZUQAAH;52733,55159 -QJiYtkSW;50086,19787 -HNeKwVxQ;24627,34338 -HiAVkKME;72023,85476 -uuDdIcwB;62507,46993 -CxfwYIJB;49974,59603 -vNWbdquK;63357,11900 -ZNXtmxvU;77630,82898 -WJaoOGpX;56914,87780 -VbjokPKB;63897,30625 -GgDxQXaq;3226,27828 -wHoutGOO;11474,32418 -KTMNxlDM;37650,31117 -qlYXjWzP;48121,7612 -fuWppiqd;57166,34414 -zbwfpsji;64600,17799 -SnKyjmjx;87715,41286 -PWhYERWo;13847,3913 -oQSbplYq;46607,4382 -OpbMcfeQ;55675,40584 -JtNnkZVa;41913,25077 -aGRkqipn;42274,87103 -wpGmfvON;35057,79561 -QWbljIJN;53691,50160 -KSzTcRtV;37563,21213 -umMLepOs;50146,3022 -CzYwWanG;87426,62691 -NEWmqChW;23871,40997 -hAdzJYOc;83128,78557 -mfzKcHRq;33239,24442 -QjyWLhIz;8519,51966 -tBItbbzK;34169,52893 -QuqtzTkH;38397,9830 -NqoUBHXN;62803,62861 -IEXxZhKd;6614,40262 -DBRGXFap;76455,25021 -hfdKRIIQ;62901,45351 -NLlxuHTo;88971,70430 -CGKxAWsY;82406,18089 -zBOwhoua;87201,82466 -nkTBJtRB;24278,32616 -dppaOTnJ;82416,10972 -iEGfDSCp;83162,44447 -oUBIXYLe;82123,80623 -XzgNRurJ;1205,86360 -fZAsgqUY;70338,35683 -eZmIYKTA;61726,59479 -uukgkCwD;49035,58367 -pTxQUhzL;43352,27604 -xuUDHEhs;74788,18950 -wBiAvNZe;49621,39259 -umzpBHje;31999,27630 -yzyfogeL;89244,5875 -ZvPSmXFd;3167,39780 -sBiLecUf;11623,30388 -rCHEwdJn;26458,71928 -QxVYMzop;83984,1531 -BqktyfHJ;4791,2887 -rJyjDNXo;79060,55058 -QuIRrjJp;20298,55714 -mdPkRiAi;19613,80004 -XensvvYL;84352,70555 -ZsYtQKfC;76299,38317 -gapzONtU;8396,63917 -FyzNiihC;57316,15742 -dYHQDHpK;57747,79219 -EGVUijwk;27390,24585 -sgSmakUD;16297,46149 -ISaHHoLB;72110,29173 -SlXdXLGV;20109,15695 -CkbMCwkV;58763,32737 -XZqxiXKk;57673,25097 -aHoBCrck;11243,80392 -IQBIKrRi;79445,3519 -wnffRlvr;63544,16123 -bZFElcWn;77968,75105 -BAiGhwbE;30425,10869 -NeELMjcO;89500,16257 -JpnStUjB;13085,30817 -gbDPgYDS;56688,38411 -lQMGqLUv;24792,59255 -MdtbidOb;50303,73375 -TcdTnHOl;89322,58173 -wOljDjWp;31620,60272 -pOuEYDzS;73978,6295 -dkooEynB;36134,5732 -fKCGahOg;15664,56968 -JaVGFBKE;21149,5139 -ZJfBcelv;5731,72772 -cXrkbrjk;16712,41103 -iUvgjmDO;36963,18272 -figCJhYd;45466,7446 -brYzCYYq;74587,16109 -tMzTFfBi;3134,46808 -PwgSgvpx;88666,35760 -EKaikCDQ;55308,51646 -GPSrMnig;49797,87636 -CQtUdpjK;82035,46246 -JamFiAsn;54928,56746 -ndwcRkND;55927,89506 -jVohVTsU;82939,78483 -OiQetLvf;78997,25174 -BSOWdWlP;30882,31334 -RMgakqEx;84428,77435 -TtlfVrHe;81017,1548 -PMbcCyVO;11543,67208 -BeeYKuCp;18622,23093 -uEpbYJNX;68744,19835 -GgiLAQWF;52667,21956 -yvvBDKuW;5587,48855 -EPoBjggP;39487,59315 -xQyjVXfs;70645,19661 -rOIoLoNV;88203,44630 -dobtNLin;40606,38975 -xYScDUqV;12932,46487 -AkCAKYZt;64728,11737 -BdeIbmSV;8507,58215 -TNscLiii;30886,42927 -eCrmBjtp;84867,12484 -RNVeJuWi;21036,1178 -XlFuvBOU;1318,14456 -ccKlgUuy;47080,61282 -epUuFNHi;23753,32394 -OHzKvMRM;85219,33056 -lwrhcTtr;35654,39278 -DxhBBjpH;50398,75848 -SuTPQNgi;56606,46456 -PqvjAZAL;11664,56966 -lYEPIYJl;24747,8806 -rPWuVqDV;89023,39721 -TQNPzsIE;12539,62874 -GlEaSYVJ;50677,85189 -zGruBpFc;28663,88095 -JrPfzklb;39042,23257 -cgdRkeWZ;75952,79952 -yLnqnLAC;11577,44463 -ylDIPTTs;44605,47216 -ugqMsitD;38293,20704 -XoZtYtaQ;56032,9380 -OLjipPWt;23039,62267 -rnbkDtos;53987,4024 -FzvMkjHl;46586,46949 -NOtrRYKl;88071,77336 -OcgqLZZx;44009,85880 -drgQLjTX;66553,45374 -qKBAxnwJ;1686,18816 -GSSXApvS;6628,9442 -lJHIDKai;14622,66358 -wSHYjhkp;49009,39729 -QQDfzFns;25510,82444 -lNjhsjik;9562,73742 -TZijiqOY;66369,70692 -AUltCmsQ;9252,86585 -hRVrFCOC;43545,40941 -iCMjDTTC;89560,61788 -RKNIcAnB;56109,51937 -tPuKZGUc;78037,52737 -EPgpMLvN;85165,55584 -PmesSBJs;36545,87367 -IOFGILpu;7857,32705 -sBBBXEEF;21191,49091 -pIJcvKid;43708,33567 -tYlyIJQF;15092,56011 -RRkAlshF;18469,40604 -qgvompdm;16921,30782 -msjLFOvE;82472,60844 -hcSmhJvo;30671,34462 -kNneUYSL;24973,1265 -brtwbBWJ;23782,52520 -daBAIjqs;75744,1213 -BBblEbNy;57839,4418 -YBQrorIc;31898,13699 -XGXjXrul;4117,19096 -llKHsufH;17133,8696 -wRhGQebt;67415,58543 -AZnoqEjG;49944,35934 -cvncKJXW;50558,38511 -jrnNURfo;66181,65817 -pOHjBeBs;81147,3791 -pzotDsQB;86353,35922 -NDFwjfnC;75816,21721 -otxFyUQp;24207,55387 -yAWcowdJ;26507,47164 -QJKEOQsg;6287,7607 -TUMEyzlp;68688,59454 -OtEHFebJ;6075,28808 -ZDRczZFq;33807,78632 -ZMPNJIbx;60906,60280 -PLBgiXUw;45565,33085 -AbqZmMrv;12730,73442 -GlWhwmoM;86641,8256 -laTVxJfd;23567,67979 -EsKZornJ;7485,49666 -SteDcEod;68691,26105 -qUKBWnSR;79454,5545 -pPIlgpaw;40951,4861 diff --git a/src/data/entry_2_11_3.csv b/src/data/entry_2_11_3.csv deleted file mode 100644 index 45ed74b..0000000 --- a/src/data/entry_2_11_3.csv +++ /dev/null @@ -1,2049 +0,0 @@ -username;balances -qidXiLxh;35081,3561 -zgxqojCl;48751,48114 -BVRUraNQ;22038,58649 -gRGaMHrX;33140,44510 -zCtuNgvg;45631,84407 -kybPVxXf;70446,74346 -meiGoLEY;22525,57506 -NqsWTeQe;86761,10191 -mBJVdPgG;24199,11709 -KlvRRrZJ;77233,40971 -KoZwHsPx;51374,81717 -xzxiEVSa;44067,33554 -aMdMdZaU;57423,67938 -NnTronJO;80189,28175 -CwejEwNu;26675,36281 -vjLvOpNm;16024,3287 -osvZsVUF;65811,24439 -QKPAQOSe;19408,39129 -bkRcwUyH;35978,49493 -sMKmbaEo;14110,20093 -qEQIjhor;82212,81139 -mkjjdieq;69829,47888 -jlrXTnwb;57880,29929 -AcsXoZbe;64246,69372 -gtFPCoVz;89887,57552 -ikIWfExU;52813,2533 -pIWQKTlh;61986,32409 -JiqKSFLX;72661,72838 -TcEneOqq;44793,70479 -dKaJtjFw;20805,25082 -rtiLaAlD;68822,11316 -cdFwmHTK;12903,73627 -NxWGmMHK;13375,67225 -AvzqUwOD;3710,67711 -nnjidTzm;13546,32719 -IzhlkIBa;87236,18641 -pniFaYsT;83826,64856 -fSlcKhkN;1829,21467 -qlaixBdg;23401,49222 -YaQWjSRw;1659,35480 -hIvWvoSz;21331,17461 -qQxGwLLy;37301,54605 -llXoNUIu;45172,3330 -iGXHzeCt;27269,82608 -HqaRdOrF;21620,78754 -pEDavibp;10905,60219 -JePLgnky;79859,19884 -rnJIsREZ;51173,19931 -cRlSosWm;43425,7085 -CctCKJSg;87166,22582 -wImbOiDb;24638,48184 -FsTEDJLz;60813,38933 -rnwaVhaM;83432,8880 -SnUFSwWP;86935,84805 -MlxNxvuF;1057,44404 -NHAFEGmb;6639,43394 -rzIFKrCx;70061,50697 -xfnTQxTn;54115,22233 -jMQogVAo;70140,48979 -vnNXsLLU;66622,29861 -OnBpTvMU;49900,6568 -PGHocWfP;81273,85395 -cFsuzQtx;71845,24865 -eDeMOOgo;6884,75595 -JWSqCCKy;9049,29369 -PfsaUGYW;43625,65045 -mfPuLAvc;75814,85587 -yONEjUVb;44591,50557 -fgABwvTX;38066,36509 -wcQeSjBA;58236,72074 -ZbZiAGkX;49713,87703 -GncxsYiy;1084,38850 -heKOndiu;12158,47603 -yjkiNAAw;73221,78924 -qEoFrzxw;12337,69999 -UoodDiaq;5473,58055 -GcbKzVSe;12003,23527 -KekldAMB;67665,47338 -fKLxBIjg;3024,6842 -NTBRydVk;25735,26479 -nomVqUDc;25363,65120 -SfYIMgiT;38288,42166 -CLhfoYYA;85842,11950 -upRSFOSf;44737,40466 -EpkCZwwV;71721,15415 -JJVmJopQ;62036,35669 -vXVfLxDp;45260,12331 -diwJJLTq;39570,77391 -whwQYOvv;43124,63970 -LDfCaKJT;69655,72727 -BCCscKeS;21053,57421 -uNUdbUxL;44323,69790 -MGkcqMsn;7413,23677 -fpYyYIak;33592,23188 -qAQpgbfj;68531,25308 -kFdGRZEf;48410,32314 -uHIAZccD;19677,76265 -FLSigbYY;48761,76375 -wyJbbukY;11487,55420 -HcXsMKSb;36657,82017 -IzABqZGz;54465,51554 -QTwVslrm;37081,14983 -YuXKfeTp;68068,22846 -BJQJSkqc;13264,45145 -DOuAwvwV;34907,57043 -qVfINyBp;55216,85139 -DkdpVoYO;54976,68893 -CwepTXbk;8423,54161 -QwjcpyIu;79998,85922 -rQXXNSqt;44687,58307 -kOBhOUOQ;81820,52176 -sSnUOsnZ;77259,80328 -EOojByHw;24709,65425 -EdJYbgAz;70649,52449 -ATyvWGGO;70892,20135 -DRNNisgY;68627,54929 -WafeJIcw;9576,39335 -MtsNkYcM;72377,34095 -xgOcrmvu;48485,10214 -mrhXRTSe;82254,37900 -vOAfuoPx;10442,41901 -MRXXvZof;48074,32391 -UnFJElZu;17547,86633 -EejdCjRl;49205,41741 -RODCAxYy;82187,86933 -BKwnDJbk;38404,80409 -BMxFjNoH;82702,36325 -UORkbmin;17337,69846 -MfccSbnX;63266,60920 -vOnmSGtV;32504,73162 -XwLKrwKW;16363,55177 -NEuIpJjl;72475,25243 -FkHgfNNd;81297,55851 -QvoCpjhV;65222,21180 -kuuDYdhf;17209,83348 -tkijnmcX;11864,54607 -rneRbPyb;65872,61720 -EcdZUEfU;62295,70108 -bekUkTWR;52938,4541 -ZmTIgdxG;84876,29704 -JwqbFuEa;83275,87282 -WZHbEoca;53738,81473 -HbeUhStV;6864,76128 -WmGPSIlZ;70618,87698 -xaBLukaT;85264,20716 -nsfQCHeg;89673,35056 -xdRgRrJh;41989,3147 -WrrTpGdB;55636,39490 -VHpQzYmL;45430,24590 -BpZGStvW;16565,1909 -fKFlcfPp;51781,86522 -edkCXMAt;29613,53305 -lseOpjTY;42064,77252 -RvrTTgJA;15426,8429 -VfXszjbt;18834,13195 -gkBouyfx;57406,15755 -llPBPMRt;26004,62471 -lxKbnAfT;60934,49885 -lwREjHXF;27452,66912 -SsAMFIEu;60691,9231 -pHkTdQVb;38493,65512 -rByXDiwl;70398,44783 -AJimpLdN;87338,59690 -NcCYYysV;37468,76900 -BcJynqRh;6181,17922 -alNSwdOQ;76169,85947 -yXirUqOd;87025,24291 -qPGUxiby;1725,5805 -PdweIAXO;6291,27528 -cGOEcfpf;87675,63768 -kCZbdyVl;63951,13315 -zlQLSZlG;56629,62436 -TJYnrcDS;60435,38630 -KsQdWoFc;75255,79771 -aMciqsxM;85965,75899 -uVmlDdjh;43582,40486 -cYRMJkUU;46332,62386 -EVyPycIc;83056,11394 -sETVFqkx;6852,35642 -FAFkZIkj;14898,86585 -qxyOtcio;15235,53852 -xvvBxZkr;52225,63108 -xVImyXtZ;14046,21191 -XsUysLvi;13651,32565 -VYAZgPMk;23198,41955 -ODZUrRia;29146,27900 -IgkrGjZj;3108,89617 -SxEEkCtR;72135,48495 -KXtreRAV;22461,38309 -pbtEXSyD;81413,25093 -ERjsMajh;33272,61356 -ahCVPtLW;61821,8878 -cfLnzrEL;54742,73085 -LobfhXTX;36285,34557 -lGSFiNle;38005,9771 -BoICbVSf;54853,65623 -FpDbBexB;54024,15291 -mdLiVEWP;51223,63558 -dtDTwQHr;17264,65047 -lDFOxmMV;63237,63110 -UXxcjlYR;55871,80149 -VlHtmNWs;69504,15367 -knwFZlPv;61338,35961 -EeMOkZnr;63533,31278 -GOCcMpWO;15523,74599 -ilHaYdfZ;30866,43568 -BFMNHawJ;34970,48476 -hAbYgWZb;11722,61424 -ADMjwktt;52426,5720 -vkMIwhae;73864,81723 -XQyQejBu;33708,69278 -SAnvjJEw;72259,16333 -AZVNOvrp;80078,44018 -tkVZNtfS;36135,52900 -VscFIbfS;35767,43946 -isTzusnR;83654,64579 -akkgZNKe;64233,30901 -FuHpsclr;43777,47114 -EttfDcTg;69676,32419 -YTHeKxvX;42921,38747 -EcGwLQSd;72303,19125 -uUIxWOtR;48393,59269 -IcGycNEQ;80781,17492 -KnEkfVcH;87936,88066 -JsKNAHQr;13006,28647 -etJvcSOx;16278,46431 -eJDxiJxE;75569,35894 -VhQaZYSg;51860,62769 -YIcuEjvt;29244,30341 -QIpUWuqD;41577,6845 -DpvStYVS;50892,57730 -gryTxczH;69878,64204 -yjDcYCfS;50084,66343 -GdBshoAK;7543,76791 -ZYSEcQtR;32672,53869 -FBfiGWVR;28706,10138 -TSohtSEm;10226,76187 -clFrIUAe;38033,89761 -CRZAQGkU;69070,24698 -YNDcQuRP;23242,2201 -uaYTTWqP;77603,87107 -MFREbJIi;18774,79044 -VkVeNOug;17667,23006 -ZQgJfObi;22197,4112 -uyUvWcOL;67086,58121 -FqzKYaek;39024,30593 -aMbmAjcw;26568,16170 -QSvprgHd;86046,70761 -XlKMgaQq;59727,24441 -dTQWkSGi;21580,82386 -ZZyZoWBi;82958,21586 -NmyfBUWQ;73602,30757 -Gpedlwdd;11320,33324 -zAGOSMuy;51223,84319 -TeuSVeLA;68288,33458 -bRBzGNUA;82125,75085 -fhUKulCs;60813,13975 -BUlzbrzc;89750,61593 -ZsBYZpLr;20661,74385 -KRobvsoC;60459,54173 -pUDLtdKS;47984,88840 -yRCXIekm;18120,67947 -dmSHHUCL;69775,60087 -dfBjcIQT;33274,21014 -DAeaHAgA;7225,56790 -QdbnOHkp;66386,43166 -dhtUYJQa;79675,64270 -ONvrZAev;21096,22478 -hMvjNKpY;76983,24348 -xEPiyOIj;19811,69463 -bLSikGhy;63841,5575 -omezhYRI;52628,2541 -yiqPVzKN;44503,78728 -PFFsdqBN;42461,10204 -bMXqROFE;25156,64776 -ktJLxSSd;33217,79165 -RJgQruBs;79919,67551 -zIgMGZUI;87876,31086 -WXHkEQAO;62281,1089 -bWxtLlCj;64503,59511 -YjYKTAJA;85730,67082 -XHrvylZU;44520,87297 -qreSosOR;36328,45207 -xFDCikYO;39061,54548 -abixtaHM;18245,14625 -iCtkwZXC;86407,4402 -GQMAwFNu;11050,83840 -yxnnkqWp;60593,42512 -KLMiCrIq;42355,10341 -PaTkJXRw;13726,20973 -PBFlhinq;62927,75209 -ocVbWUcy;48717,45403 -ExvqxxGb;40418,24639 -twyoQBIy;10661,43530 -KSnyOWEo;7531,24488 -vgPqQTBS;37740,56864 -MApMYOuS;13217,37320 -NovoUQfR;69439,13104 -qQQVephX;32600,76086 -FPGMKXrZ;18470,68695 -eWjGKsYF;87827,4930 -zzjNlrnc;80103,59056 -VcDOGBEh;16591,5345 -UKhvzZpn;28717,3794 -aLWcRtou;34975,59717 -SsfrCpvu;25832,75645 -htOjQpke;37716,7252 -IePJQiQB;50727,70165 -RkJOjQLG;66665,5357 -oVHjAHfK;17011,63825 -UwSTHgnF;51086,75119 -fzMQjpse;62679,58455 -qdIvOViz;68032,56699 -BOMzcBHn;42276,76358 -YiGvOVVq;62111,9078 -TREEZTmm;18228,88271 -zxnXbige;48358,76148 -YJhFJhsB;64703,63004 -IjdUCEnl;68919,82322 -ktpbfHzb;50139,11718 -YnYuSIbm;4253,19263 -BluUTSGD;11218,10548 -uqVYCsKy;32678,31210 -UodARLep;73187,39060 -CGzcftbr;14708,83524 -cwXAXjFO;34330,76143 -AXiRxqZY;56949,28581 -UcyWifHj;83179,66072 -GAYtEdPY;78295,61669 -nufVrOLU;64822,10455 -FdqqWSmw;7065,75042 -BWBqORMK;1209,29382 -ueEjoTmK;64882,50098 -aPPaQfbG;42863,55765 -NKxaSOgc;13823,54581 -AfygqnDY;80122,13488 -mcFwYYFz;46471,48561 -gnpFgkMk;78687,21171 -dYfXYpKb;54749,41472 -rxLltbmw;30668,46867 -AnAeLMzU;48527,35698 -dbposRVp;64897,26040 -lNFBuSUy;60022,25135 -HfurRdEN;7871,73213 -avuynAHZ;1458,4878 -xposKUYT;57960,62801 -mkfboKDF;65565,15682 -SWxnroRg;69259,42837 -lSsfEQMu;87677,15130 -BtZVHEyI;44973,48527 -cxkObaSU;88268,55963 -TLTOdIfa;56890,29851 -nWcrjzQm;85010,43952 -OZDxMahe;25680,40131 -todNgasO;31017,57461 -zpNomZtu;50276,20532 -CZMUaJLg;15159,67552 -kzmNYwyU;75466,3283 -jdfStqAs;85089,71754 -ltadNvAP;71093,9689 -KnhwiyIg;2753,34408 -avOvaLbm;45546,60485 -ImvzgVuO;7032,67292 -bgqnwYDr;53182,10820 -EFajBDCi;35131,48783 -LxYHFfeD;46689,68839 -KdhVFGTG;69796,85477 -dNprqpsZ;4863,6367 -evBssfUc;76800,41138 -CbuStnlK;28876,85914 -uDlAPGin;49185,74834 -KzIFxTSE;63802,88910 -OfoDnyjK;78177,10557 -gEyCMivm;26981,11267 -gCSieghd;67817,15013 -oLhXxvVJ;65699,34070 -mhDZzudw;6165,88143 -GjVYKhqg;89309,49018 -cMmaKVrl;42175,50985 -PRDBAWmc;47004,17411 -YZZARQnw;27090,18574 -VUaTKjPr;51789,88180 -tzbuTNtv;68271,39156 -cWZZZjIx;65334,1455 -ijaUyFKo;71948,60189 -gyYnCzrz;87907,43622 -qdecPQTe;30375,51453 -HmtaMNlH;39003,3679 -JKRiggEU;55596,5986 -nrePohHb;84204,10089 -TVtvLoCm;55808,33073 -dRQqtIvQ;23003,16706 -fSkBhLyF;82882,22418 -kainsEzo;86226,3638 -PbFKCXaf;63720,51992 -RKrwDiqe;7957,12675 -wQmuHyvk;51801,63966 -jDDIuiUT;39745,16612 -wymahTnx;31201,53820 -psXkuHBx;64539,55899 -MXztydcl;59539,77105 -wQMANHai;70954,46616 -QoEpUzlf;40278,81175 -GkeiwEDX;48163,44969 -qnDhwuSK;82775,41377 -rYmOFDYY;50080,88316 -eQpgxOEr;36585,15890 -LOvunKjM;39336,53605 -jDVuPrEJ;5065,4602 -jEwJHoYZ;21308,2015 -kzJdmpkh;1505,59318 -XKTvyeyr;40720,30717 -TUOeWGks;44134,25618 -OrRVKFLx;31699,20386 -jGuFHUOT;1304,83703 -XzlKrtrM;76845,25136 -SpsBmXDG;5871,56535 -DBnGaOcE;61398,62017 -khLMQQnO;55653,17367 -qQiKuyCY;77070,31371 -owyqRsfu;8642,26437 -SNtsySOd;82741,62980 -jxUyIJmK;32979,20914 -fRDacBkq;49976,55947 -oQsMpZdZ;33884,64705 -fZQzBJrp;55614,61083 -yMHkawwo;84138,17059 -jORqaytS;48626,67555 -RQcweeHp;30692,17092 -QiLtJJEC;24537,28927 -UCqvpoEO;12201,40845 -oFgECSXo;55250,6305 -hNOOSppG;10334,74709 -WQFocxUk;25703,48631 -eeVXaAhS;26616,45140 -TwkaLGaJ;39345,58497 -HUCvQNOC;47852,26906 -FgUTexoS;53715,26718 -paDVPTKu;71793,34854 -aqVYMkuB;74531,42278 -cGGUXtrx;48820,47239 -zkEFgovp;88381,50836 -iSebofnX;30420,66657 -TKTrvavC;63216,72151 -jryjrHLi;33000,65026 -ReFElXpr;38551,46044 -JHKuvUTb;75149,69903 -ISJYwoih;19011,62283 -FDrphRNt;14170,47331 -eAkzsgUG;31391,74110 -qutonjqk;79390,16646 -JgYIjNex;74678,73557 -MAgSiidZ;77425,69672 -BoInskOl;2847,24918 -KbzPsasW;58309,18761 -TuGDAVaa;11958,84858 -NagkDdMY;33462,46305 -CtyABSsK;35470,50453 -ieifgjEX;71651,52781 -XzaBixXz;45880,66372 -ILzknjzw;74255,35338 -QRYlWWYh;54010,9341 -cLBfpEjr;55318,80140 -uFURJekW;37384,29350 -zUolAgMy;28341,41195 -sQwGpHFK;1490,39291 -abHHSdKT;83865,39548 -fVHjehze;79826,14156 -uOtLebdb;53764,88151 -VpdfemrH;62863,82593 -yBJDVxjW;40219,43115 -HiYWpYVm;27393,35963 -vuHaVmrg;83852,71224 -XYmZchxL;9398,14177 -NuRyfaAu;26285,17116 -NQuefGHK;63986,23009 -dyERtaPq;3750,86712 -GspRTGXg;87156,62001 -iqkDpUQU;16475,48026 -MZiHcBvw;81314,31960 -EvCjREDe;50000,39170 -gxgwNKbQ;63993,46513 -IPgMnRpr;80906,77057 -mGfvbCoP;57789,77652 -nqSQgFiP;70471,59378 -gmTvskZh;20731,47980 -rOsjYIwt;11650,75312 -FqTiGOZJ;78388,3670 -KLsGHvRY;73416,51526 -YKNHJMPj;17179,36863 -LIYHQWkW;26369,59230 -BMDBjdFG;15463,29813 -vCgdVUxX;56983,60618 -ETQtpXET;87669,28403 -xkRgtXXU;35984,67665 -AiTyCLim;54145,64633 -leQlSyBy;70734,51443 -dpoyAsjj;41518,82084 -eMkOZvKZ;86383,25212 -wJpFfsGn;13043,83448 -hMuPODMp;8346,56603 -mWLqHtIX;17491,75912 -vPHtJoyM;65261,15113 -NBFeMQMV;88617,17731 -MnHwVDsL;49235,52199 -JjKvPcNx;80186,34813 -DZelSZhe;61099,51455 -zVWdTGYr;59634,30830 -ifIXnLGY;3971,41273 -bDOWNuqP;33466,84796 -PkzGbDMT;58570,33266 -wcqoRibS;38843,26816 -gaYGcDCJ;62600,27259 -MVOVPFYj;2296,40195 -QOruAEmO;14430,86189 -eAcoekEY;30581,88006 -LIXBwyXE;61408,46205 -smhJbRFS;75990,30511 -tCmFLRUZ;44105,25319 -PDPodTpu;65066,40651 -fUZKIxLp;25877,1596 -suUvTZvu;36673,44588 -FdneSATN;71297,64115 -POPAocdg;55825,33348 -CauIkvxR;73452,16884 -INLRZAQM;46912,66572 -hBDIZGXC;45419,43454 -dbOWDcnG;3194,66965 -sUjZSRhp;72764,45783 -DqxrBudm;73029,9404 -dRtuDupV;63800,7479 -RhYpRFAT;10207,64452 -uBPGdkrU;20230,47172 -SrZxsken;45126,82072 -VSARoYGb;68027,52436 -dseWLUYn;4124,43339 -iboRglNx;45957,21179 -DVCCUQxx;13181,64171 -JGImSuPe;76788,64118 -jRhZDdBr;11849,88510 -bfnPhuIc;42717,12646 -MMDrnFTA;54000,86872 -zMlAsRAj;61145,87413 -SBpsicxF;72019,85823 -hrlzyZEC;24089,27808 -FurZOqJL;55060,1799 -YenFaqqg;46677,10736 -QEQTvvzo;66691,89302 -MXEhKBWC;10774,47304 -ZfFmPBHu;58933,65181 -bgbhgPOu;80443,1635 -gJNBgims;41383,67735 -ZXgzBXxp;23841,60301 -XJGLVjvO;64637,62430 -vHIMWOZC;89005,38003 -MsQrAgyq;87566,88860 -AEFQJVZS;16479,42492 -NrcbuFXe;8517,39500 -sDlRwcgc;6687,23730 -oLHlUJPE;66828,19574 -ocOrSCYc;32562,79344 -dWdfHnJY;12196,59477 -shokRzPM;73063,3549 -RgydCmjY;36036,77562 -Pejplugi;29232,41802 -ddMnwavS;24940,37973 -zkiEJhfd;52848,80800 -EmpHixxw;21388,11449 -KEfLUqLO;34635,69004 -RiEOhIqH;76589,49002 -HNhFbNuQ;21229,15231 -ILcvUEeB;32671,31851 -QoCHajup;44340,77447 -vqgsDuMv;57338,84583 -gdjYnwnn;19587,3839 -tdGQnKMf;60296,49048 -PnKECCVu;6766,83451 -zGIqenHW;51577,66901 -YNjRjsyM;34732,25657 -LHkluFMZ;5131,15701 -ZFxTOtqm;83988,41909 -hdRKSzYV;6066,74688 -pScSVeJr;35551,79535 -gVgVbWmW;73543,46809 -bfOTePIl;36729,58503 -HIlLmRZR;89854,49357 -BlAbMaPj;49083,83103 -zcPIxtWm;70258,37484 -hoQThDbx;17986,51777 -TyagNtiM;81528,47723 -HUoLwkGp;46568,10509 -KIqkepLt;74931,8610 -WLluSYnW;89767,84177 -zzIxJXwC;42460,32575 -ldjgBxCd;57647,77569 -lkTQhfIA;50552,43108 -ArvfJqEA;75775,20010 -KEGQomHM;2997,61479 -FMnYppPF;23652,17392 -HvafQYhC;7601,60776 -dDLdbGyE;27056,12930 -OhyRouBy;83440,76412 -BkLbThls;18146,29225 -htLDtYXg;44908,16994 -DWjZMvxZ;27360,10301 -enmvhkLK;76883,84676 -kPKWNkJz;20680,6532 -wkoBtDyV;63001,27553 -RHhFvpgK;72754,76491 -hvXaGkQC;32794,13153 -umcCwuNe;55669,32045 -GUOzfXPw;46859,64716 -xKoZFPNl;64078,2484 -XGKPmCCB;34440,81120 -ttVHBqda;37914,85982 -YwQLfoUC;30354,65286 -quzjTnLW;22846,38828 -xUzVraVq;47455,53366 -OVZxsnTl;48428,59573 -cHrXjebd;15522,86328 -qAjCDMdb;59633,42979 -VvkUuRBm;43722,63425 -VyvrOMkd;48089,28508 -wMlyBHyE;24840,10353 -ZsHRilut;18031,89703 -WRZliHUp;83893,45531 -vmwCxZuN;71169,86162 -XVhusDfp;69675,57576 -dTIzhCZd;5740,65021 -PhWHyfgd;59214,48344 -couPnAQF;74190,77639 -FnCtaDVZ;40095,69349 -ucBNWmoK;82409,82228 -TdJnmAcK;19469,51084 -TEhHAUQH;11853,44379 -qqFxrQHL;86297,73794 -ysmKWUNP;16150,83118 -YAHZUDkK;32324,80671 -ELWLhwwE;87340,4634 -JvXnyziS;82458,40974 -sskSCQxU;37828,78575 -yTxzwYcX;49852,13623 -xLTftiNs;57045,15325 -xmwJvjgF;86865,27977 -fVeYvWrT;55089,62890 -lcqRNEBP;54450,83333 -GQPNnaIb;14744,48164 -dsaUlFpp;76493,89968 -WFrQsYYp;50035,2418 -mfnTXPiR;24807,9287 -sELbMcuO;70956,78613 -iHLajRmC;40580,80263 -RdVqHBrD;49146,81177 -WzxOAirM;73922,57419 -AGPhVNQW;23202,7591 -ckOIiGNx;61322,77414 -AqzPTlaJ;68626,82750 -XmDiKBwG;80928,77470 -MPHPeJKP;25782,76342 -JFUTfmMt;80917,57376 -QOpadIfo;5376,13512 -OBhPqcDD;49608,84593 -SGosHrKF;16615,2012 -KDiheqxE;40250,27415 -llAttZNL;18420,65119 -oXossmin;76882,42956 -CvFPlSri;48272,44574 -UnIHrOVJ;5548,77590 -CWzNgBNA;67860,42323 -CIplSIcu;9279,81357 -vQWmbMqY;82395,26718 -TKgUdnIM;85838,44922 -jeHQewEj;76742,85762 -UGsdIFhi;46163,4628 -YACvJNvF;49566,73676 -VKFAAQQM;14471,11280 -NRMmzwuU;68415,11940 -eMvzdkck;44398,13958 -bDixvzxP;23742,50756 -JmjCsszv;65961,35296 -JKxiVijf;22003,27018 -zklVBDjI;17071,12273 -YQsVUUqa;17916,86793 -zdVQSBNQ;9294,87300 -iIBTClOW;79155,87119 -AzpVtyjP;22613,38077 -ZcbWnIQv;45039,26019 -qhTVPKFq;71935,15774 -RpuzmDCk;32636,59062 -AFLFmdZk;45492,3674 -lBfUfazT;35984,84301 -fcsjyWhb;53180,78679 -VFfJwTrK;78213,34165 -yErjagvN;10938,35126 -pbFslezh;63210,89531 -xkydDIVw;68050,42349 -IsyhwDCo;17315,19831 -zicKNduq;72587,20460 -sBDnQEjB;20409,87743 -VvKVusjL;15030,1363 -eFBVezBY;6658,70837 -IDYZfUPh;8960,85937 -csmWCkPv;11085,27513 -gugbYeLV;5877,2346 -jfgexOla;8403,39550 -sKNUbrDp;23755,77891 -iIfryInN;13783,41412 -GAlqBYtl;43552,68135 -uSZrApjt;30912,4443 -kakaZipM;13499,51704 -NQzRIWFW;4770,72880 -VzhGCfiY;37766,35946 -ybYtaFqb;44223,13108 -CuEoqSVf;82335,86554 -VldSGGUv;45980,80978 -rGFTiLyo;20009,57029 -lVsTFxee;86908,48006 -QukdusrX;55085,25694 -rOvzpPlw;37649,33342 -lPOnSGLf;7915,65640 -yiHMWfMc;4410,48326 -nKCyQXDS;25765,30977 -qajxCpiH;12537,65940 -tusvaxuW;64054,16198 -ipWPtNQo;44374,25267 -cKHjHgIT;16080,40472 -qHMukKGY;73017,73164 -dmaJknKW;55360,77442 -HtYzXkyd;62809,78257 -ecIDugqA;70448,81067 -dtmlWSOg;31909,23382 -fFEXtKFI;79053,33712 -jSnQWDiY;3751,82337 -nHnSNbfN;75334,15731 -NPNZOvQJ;68187,21082 -lXHXvKuQ;23053,70609 -DHGFfnjc;39383,84560 -vPfLBbcQ;23669,63357 -FCWENCfj;47630,75307 -gCuznNvH;49913,74397 -iGNMnApC;82408,37419 -BThvgFXF;7781,28458 -rFkRkpXz;2132,23733 -xowMjUyk;9358,81490 -GeMWdRNr;2128,71460 -IcNYIWLS;49578,62310 -TbvbUPSt;28530,32290 -OBFMLOYE;74048,39965 -DGmWGYrl;87680,19115 -EAHcPMKD;25865,48944 -faQozmis;76489,88497 -CjSTCxLv;65707,77633 -SnsGNnXF;76519,88386 -RGxYmXts;35139,68185 -txRiydRl;25236,36404 -CVlhVPlP;35175,41406 -zszDsXsw;74766,24997 -ByWTdfas;61951,86093 -WRCGUuMb;51228,18413 -hWiCAWMM;75790,16656 -jfpcJqsX;80059,82212 -FAeBoCVo;35861,88415 -lkhDTDFI;35331,59544 -UehqARMm;77906,25812 -OAyukEbi;86803,26076 -yGZVNIoQ;87537,18246 -cmhFEMvy;10444,61111 -FOxJvmWT;43183,54427 -IYAUUepB;75745,6569 -UagGEsEf;16360,24249 -DrjImfKV;88731,66671 -nwufwuYr;38639,17879 -FEJpattu;31980,9111 -ombtUNqx;50658,19836 -yZqWbsJv;37634,29519 -YmrdgOTB;52528,79386 -dZyozdMQ;21013,41514 -ODGrscpI;74680,9354 -FvGvRqUG;28762,8456 -filAfzOI;56310,80270 -bkeBFaJf;37076,11936 -kWeORsIm;34983,67826 -OfyBksiA;8212,83600 -qDFzjLdM;35819,67985 -GTwChdwM;12603,20329 -EIcfgRCC;11316,25280 -RvekDhSb;16967,37722 -tlmLpOkW;84459,77119 -oYlWGZcq;33214,35305 -PrpZMRQq;30974,15768 -NXOFoshz;8114,17789 -pqgzIJtF;49877,5279 -JAbcrQlA;87745,8663 -dwIiUGmx;2982,42124 -CAVrBTPP;1045,36924 -oGuxGUmQ;20769,10833 -zLuGprJA;23146,58086 -qwnjdeSF;52996,37032 -JyxSzGWL;44762,58538 -UfMQhiXs;37216,9791 -jiSNQnVg;17553,49461 -rBjOalvv;51076,35428 -oLMRujuh;52830,33521 -Psmwxgsy;17581,83123 -RgOmVGln;51322,84786 -UArcGRmF;21441,45938 -emVZEbUj;70356,86104 -pyyAsWRo;87399,34343 -TTgSJeVR;14921,28491 -VhACrKrB;28318,47724 -tnognpGQ;75485,67278 -OMppckLG;41302,22273 -STrvKMhu;54536,43858 -oMJCEeZY;58731,27972 -dCMomBpY;71383,84555 -iOJTWXai;6629,5546 -RyIOynLN;50100,6708 -LyNbiTrN;68710,36307 -XZqrRCjD;68808,32712 -zAJnzumw;79326,41590 -ZpNDdVYo;88224,28561 -NOpgTlaB;87996,84245 -IEDQBTqr;16973,32402 -SNKwlfzz;64406,26555 -cFuWgiIR;74754,28089 -tBnLGhWU;26226,24265 -bwSCVIZn;60379,7890 -UtazUsjE;59128,42787 -euChsrUQ;10894,72797 -CVzUtCho;51327,59253 -nNSIuMrs;10899,85963 -dtNJQxQh;35269,32077 -forzMNMw;78559,80787 -waZhwGwy;16381,34682 -icgpxUad;60246,81765 -tSJgrtZF;19647,89014 -aACUldvT;6930,39081 -zMPvepqn;19506,16652 -pzvicvFa;4697,61152 -gyiqLebG;48008,49168 -BQYuUuAR;7964,54413 -CjDeikZU;12008,29352 -hSknIyqX;39281,3986 -bBGdLZRo;70831,14412 -kUVsbXai;63936,57089 -XfwoFsrn;72509,72260 -mORMdPRq;70863,77027 -mMSIFTPF;76668,73339 -AHEOgNpK;49150,6605 -wUIHwuWI;60538,69952 -xDqmuUbC;16351,9526 -PUpWcsXh;7206,87197 -JpmFWwUN;69241,86452 -vhpJCLsM;53667,33894 -faZozlCK;50515,45863 -ndJwKNtw;15397,12903 -ZDbjqzwv;87114,71287 -IBcsdEPK;28504,25289 -vRUXKWly;6192,69680 -gWxTQsVl;11505,60311 -ZreTzVCE;53546,78199 -rJICGEMr;88785,67762 -kdbeeBLo;85297,9991 -goohHXlz;34726,42523 -puDUzinU;82902,9208 -GcnZdaUX;12791,78150 -MIpZsKiH;16682,4024 -qoyXcDmS;22539,28285 -fKCheDaf;68228,35243 -vpSmbMpt;54734,60213 -Akhxwqjr;63636,6959 -RwlyxAdz;54399,61049 -QCqVsXTX;33864,17381 -UShbanmf;41604,32763 -hJYVRhva;23449,18016 -VvwzFmwT;89143,54505 -xenylihT;10783,50522 -LqvCyxmk;3971,69141 -cJSftlsP;84640,61647 -jgDnJjGV;61002,33004 -wevoTpEt;81394,13272 -PdpykuEQ;84436,87933 -WEISvOQP;10788,73331 -yQfEWSLz;55145,26890 -PbMVLiPX;58332,30762 -tzkwRpkN;42816,1610 -efyhozqY;80573,3594 -UZgBbpyq;9218,59783 -UCXrBDJf;74218,69851 -jxOYZdKS;17311,13526 -lPnqWsyW;36802,39657 -wYepNpix;70241,77536 -egRrIJyx;89557,4258 -NVkrWbuw;30323,28725 -PhOOXxNt;77485,16448 -YSHUxNrO;82472,58354 -RMzVyMwU;73067,49788 -ETtIKrOW;10722,66334 -nPhGqLdp;79472,66878 -yLzQLzvL;75974,60603 -wiPosPCT;23831,15255 -mCwGSUUF;71755,83231 -HkrrYHld;47808,60847 -bmlzVJxd;40400,27725 -DpqmaPIQ;73857,29248 -tWbfqAWH;49879,42549 -OecKZjhU;4565,67511 -mTpMTzEH;15305,84686 -XqeTkgNP;72488,14862 -JhoYFHAF;45777,41917 -NJtAUbum;10275,40561 -tEgdhwrV;37752,34748 -hjAGSjMo;28425,62185 -stXDdTmk;23691,41782 -sXljnGvr;86096,26822 -LAzoVtbb;16779,9716 -gnzkGnid;75251,36717 -IYrBkkRr;60236,44488 -KBuxfRVy;51913,44137 -CZgSlyZk;24391,71439 -cNODQFem;83192,38414 -iYruoPCA;2320,1136 -RqDQUYqy;30577,19546 -siGuLhGy;46203,52748 -VLyPJoXx;3754,79770 -KWfOtYmF;72199,81515 -PoPYApmx;28432,13508 -NdreglcU;5298,31780 -RmkFTqeu;69621,31112 -GConjGoi;33776,73993 -zfETBZDY;79356,14285 -dsWuWzme;39423,18284 -OOdRHnwV;21891,86976 -LFnVszrU;38512,59719 -TAMLrVkv;50306,78332 -KlSXwboP;16196,41836 -QLUqCVqu;46954,70050 -HKEZVWVd;50710,39402 -UckXxAja;15221,80616 -VrshsMfc;69998,6697 -NXDxoyBU;34072,4706 -ebpBdLKU;10531,16921 -NCGjrXQI;40975,24963 -SMLCELAc;52981,55880 -HNnXwDMW;45966,38545 -QwanIifB;64988,24088 -IIoTVZhR;15483,81398 -vPwUXNkU;9661,27347 -GYZgWsOE;88814,40817 -PCwXnojM;14603,8949 -JIFhPSqj;39534,76002 -VBPVIQly;11032,37468 -ATKmAQYK;33954,51525 -nFSCocPu;41874,55531 -ijecXOfh;12008,11079 -KbNjlEam;49667,18416 -xAnGKhmn;3897,62941 -KMaiNoVQ;61777,86623 -srpIKpsA;75383,55748 -lDzfDWPz;21622,25918 -qdMBTaoX;32352,14635 -ojtCKQeE;53173,12584 -PgKKeIyY;32301,65867 -mjMXWGra;20315,3209 -tMLdMNff;79730,71918 -pylIBeTF;55175,1738 -JHcHuCWy;28267,81870 -QNbBZJxP;18831,24136 -wgaYJVpw;62289,6337 -KSUyZHvy;62523,89354 -ZDiWEtpn;45852,79413 -otqYJNXU;25966,22634 -IgxPpPin;56798,45893 -JClrAUwf;33125,22026 -kfPyxMoy;74856,11349 -HivBFnvc;82774,81502 -JKQhGwUX;56386,13126 -JwNEkPvE;24570,70681 -OqiXmpbZ;9842,75058 -JckunKTl;41117,71630 -xZKtUUul;68368,45155 -MZAXTMco;33787,36898 -QmZLkwDs;31042,51939 -tdKzSFlj;53448,44912 -UVzXDlbI;83386,76572 -oHPQwbWj;36151,68230 -QnpPeYCj;44956,41175 -dhEROeVj;70822,67725 -cIHHdAEn;37160,73875 -PRiZXoSQ;59150,35901 -wUvwlRIA;67387,64600 -SYQXzsTG;52249,38173 -vddTnzVd;17159,57825 -uxwCzMHq;57772,16075 -yflmvDbS;14737,50056 -OrjHSZFY;32104,60866 -ZJaZuNGs;11988,30920 -ArjfXVfw;5274,3760 -ZaDDyRmj;40136,74642 -npRGzMJs;47305,21922 -OIvRMcYc;33927,78101 -VzGkRCYV;39869,68672 -OAzkulbt;49338,48307 -fgWPJXWr;5455,12524 -AmYovEAM;16084,48729 -ddqkwTKf;75294,37072 -nuAEpfXc;13276,82760 -XJEUhiPg;7549,19956 -DlLBSBtn;46642,60546 -RnPnXYFG;30916,19038 -CUaSuLft;26405,59374 -mklYKFjF;59353,88644 -yxQhvLkE;37619,79827 -ThWZzYqo;78213,49822 -PEPvQcHD;29957,65557 -rpZcgUbO;84342,52157 -HdiWvhDH;14517,3149 -SclYuoKx;79511,70209 -fNfiOzdl;14527,45769 -MxVmlRnW;32807,42735 -dyQsBIDi;57341,88630 -MYRYhiKJ;30702,44019 -SuAwEQre;44218,1195 -SuloTMXy;35941,22738 -URmKmaRy;67904,87900 -NpAguikr;74786,7744 -VOEdMQKY;74183,25702 -TZscrwSS;3598,31563 -CjOLSKhk;66735,26806 -orcDzHLJ;37260,84456 -HnALEQEd;80312,5084 -IWzcBFQW;8508,82338 -YwNRaMjD;67450,23625 -hpnnLxNo;21630,29915 -HlxmETzN;77410,47702 -TKwZZHkp;82482,10415 -bfTGHdoA;79748,57303 -qCvAPqjh;13694,18404 -RPxytlcN;31757,86403 -mTAIHApd;12482,55509 -RYhPdKAX;40167,75589 -JjeFRmOq;9124,71750 -DdSdOijV;66778,13181 -fTkRehlj;71559,28315 -KmBwboXL;31395,83709 -XKfemAcn;9495,29518 -aPIDqpbr;22302,86422 -WZOJAgkT;20336,12634 -zfobHCDw;26564,84532 -EoURUlVB;39865,86304 -TrJnYwKh;18579,87707 -NbTbSqud;25741,20178 -zrTTjTAg;46988,3072 -dvPrWFqa;79589,9887 -klXERbRH;5839,5866 -rofZpJaH;72010,15616 -cHMMHYRv;81018,72344 -DfMBfMmx;59958,32739 -pvwlJCDG;31626,24141 -NdENcqKh;61288,84950 -XQmWfMFY;8509,46831 -QdZYlYhc;17439,37640 -APKfllmD;85761,26751 -TEBFSnNV;29702,51942 -OsATMstI;58618,23701 -JwFHdnQS;31234,26836 -kocrlEGz;41737,30442 -cBFIsAUO;40462,57912 -iaxDAngo;40699,4300 -OrKqckKF;45737,2195 -CxJRuVUj;73746,34486 -SpACLZab;11896,52646 -mLVDTdHy;50390,33002 -mjmPUbfS;5944,54648 -mJhEUopS;19474,4646 -RMXlzFuT;76767,64740 -oTLcmrYm;37441,80045 -cjcrZvdi;36414,5990 -rTpLIDzr;70847,86621 -XfLSAEZD;53167,16530 -nDVSkOdm;34874,12689 -ujQmYbvl;51009,61151 -SkgWdqmG;74530,32449 -sZmCrtEj;78098,43882 -gUGOUfIl;26172,59836 -tRTGeWHC;22385,78827 -mEVrMEQZ;2996,67729 -bxLwXocz;14315,15217 -wtolGvvQ;26051,36326 -SwQwkTHs;43577,9141 -RACcqusg;79853,37722 -lrtvMaws;44827,86952 -XKKdxsVC;44878,26781 -ClwCaOtS;69640,4781 -KGlsNVCL;55255,24839 -zAmDugmk;85417,89443 -ZlZeKzQA;33373,66135 -nuaJTvqg;11484,80987 -sgMEuGLJ;3333,41254 -zZeWLUQx;60664,19057 -mUxaBgUf;22940,68739 -lLMvRecI;80583,9610 -GmFfpZhd;12409,29921 -CRGkmyie;7718,23055 -lqVmpLYi;83729,7063 -orhdeKGg;61415,51816 -cThIMOAp;28002,36348 -lgvZluLG;13916,81262 -nYgEKFjy;23461,46100 -zCNCZckc;29896,84417 -cWTuMaVH;15283,50985 -awhtGBFf;46740,46000 -zUISutuZ;83593,69878 -ikbGPOzZ;41796,64952 -zaQGkkrZ;86976,49019 -abKIrlPP;37046,57263 -ztiWGmzC;52042,30032 -RucRRjgS;70728,34181 -tfqWnpaC;70353,16752 -fhDsuGHL;52549,4237 -pMHspLcW;29323,65447 -GUVVplRk;67695,28641 -XcUVQvFE;12947,47855 -RnweELBi;15505,42866 -negamfjZ;64298,32282 -rvhFomma;72902,31232 -aErKUzSP;31809,60701 -zPVHOKuX;11702,33106 -cIjBAuLp;50625,5139 -JzMUsWLl;53852,5571 -wfUIeufG;12727,75661 -qPOqlRfO;60346,57453 -feOOuxGl;85706,63104 -BqIkxBEN;43238,56408 -zDNqAQJC;48285,67194 -OaYmcdQN;46765,25859 -wjGXZBUG;31311,10089 -PGTfRLYR;39716,53191 -BcGKIOYF;12849,1439 -UlUZMNqj;82550,16372 -knaRuOxp;9511,11211 -nTvJLJhZ;69278,38932 -gQmBQTcI;60278,34417 -cMChFojW;25971,24461 -KJNPhKCM;20559,35337 -alxqjOsZ;34567,30701 -ZywNKHpD;63526,44981 -hZDgHOel;19198,68045 -szaUOJCn;35956,30694 -MFxaHkHo;46786,38460 -DiqUqmHp;32867,13640 -jJfRYAFq;58430,52428 -MprJdbQq;62916,23758 -PyzjcguU;80729,15359 -vTtLaKJq;33466,48877 -PmPaPNPe;4946,26955 -qNQoMEXn;84167,46713 -oBKVFvHh;17341,18109 -RLkeftQR;12708,9507 -jfFzzYsf;79540,22912 -SOVNXIMF;82978,50275 -ljfLkMXL;59804,35609 -FYIMNxnG;16024,10110 -COYfKqWv;8444,19292 -LVNtHXdj;69295,46510 -FpmuQvFk;64720,77449 -xGlcpPlu;41216,21227 -mAeTwNBU;77263,83862 -naXFOCri;24309,53005 -tbqQPddZ;85090,21510 -tYqsuycP;47377,61469 -tpVryrRx;13659,48944 -HeEiAOXC;40420,6725 -uwTXZHmm;27277,30493 -TdbjRSzE;61598,10305 -poZzdBqG;19412,53453 -sRmxBvOg;25235,27727 -denzcLIl;70912,10299 -GzKVcNvS;74543,60956 -urtlNUbW;84025,27274 -BEZlvWKG;65719,21338 -KFwTxmbZ;59286,1017 -eMJgFPTL;28523,33676 -GPJMSspu;89529,2711 -TwPYvvuq;34149,75744 -goXxwSpU;19333,46788 -ndISIemK;33441,46376 -jElezaAX;30999,55424 -zSdimQmP;11799,71283 -TMeYepUV;10076,81685 -aZgseJtX;70428,50567 -AWKGDzMV;66893,5276 -dIRZeVrw;23004,9716 -WHayMMtx;53062,62382 -fhDRCnfo;5840,8512 -cnYobxWj;44886,5189 -YOoTnLbF;18072,12776 -ItEgRGIb;23229,15088 -RSNslZvk;31866,32730 -KuQQyyuQ;8073,37467 -XLxbpsDu;50510,1092 -sKJBUcrM;56975,48794 -OqBhPegC;33607,70527 -JiMaoHsD;40471,59473 -cifajdMj;75808,87939 -HqkRHlYZ;14681,29252 -jiaAmiMU;59031,54643 -ZxfdmEPC;81208,21213 -WokRBEmB;27645,30827 -QAIGKZJd;45783,22424 -PBIehoAE;46728,32773 -SfrZYEUK;22345,73390 -zcRSEadE;75524,2302 -XARTUQxO;51907,70664 -smyOPBkD;60743,10990 -ufBbkhMD;60762,84890 -gMLaWtMk;79828,46994 -QvOCuxcO;47299,36257 -TAIvMsAn;40875,76223 -BjgFhrYz;79124,73621 -vWjQxUOc;82116,40161 -cVJIxZwp;65151,16601 -qxGUaHcE;49475,49717 -cgrbsvYv;75292,43846 -jBGbsMet;50577,61385 -OYnSuKKb;86744,27509 -szVJtNJM;5479,18840 -ZIndWQLt;37975,39562 -HoqwneUZ;86543,49533 -qRNGjNeg;10653,59228 -oxVjdgne;55990,3762 -OaJXQZhs;76356,3917 -QOVDUMlm;32694,21014 -VePAUMLd;69391,19540 -toGsryyb;50759,12887 -iYYwrcFS;10765,82292 -GMRIGHjx;80698,52067 -rHbhJwyn;41385,53060 -TsoMshfo;53367,50792 -hhZstZvu;80434,78512 -bRkgViTu;19508,74135 -MujfiRaX;23566,4574 -gnnOXMvX;3592,82958 -VcVAyIch;74483,22077 -ziaNFpfp;55996,9052 -tOYKUeZf;20368,88790 -kdWjsMTU;23053,61445 -gjYjejXW;43393,49109 -bxtQVhZI;66387,69286 -rgiIcOBm;38033,52421 -bHsXXPKy;73420,25743 -EQQGxZli;67846,17479 -FyrEVjSw;29196,18075 -dOyUUVVl;22834,21072 -hBmnHYPe;9042,71314 -qsqZmDrY;20783,16935 -ODqqHHgd;31160,33755 -gXWTsxfD;36613,33408 -AkJtAPeU;87833,88338 -VuIyEuMM;65998,18936 -wiruZRAq;50122,88472 -eAVnhQQw;46082,63157 -OClCRomL;19353,43871 -UAOvPBFy;13047,30097 -rkGOYvnl;47787,4599 -Sffijrpj;6030,49025 -QmBHNXEg;6434,35051 -sPBQBrxh;17534,17784 -yyCvbXRg;71295,24916 -BWQZVGCt;67789,71664 -tzPxSFjN;15381,41967 -ApGApKqC;36507,11149 -luxpprti;48534,61428 -DTBOGsSG;56894,52684 -mxtqzFlS;33453,60103 -JwVrCwkm;65305,89760 -oDnYOweP;81956,15694 -peEWvfDJ;58765,75556 -SKguqdJU;42812,76173 -zrllNPwQ;86500,43394 -BiINPjrD;7613,68268 -ahvypMAj;29365,48714 -KfLboAqU;57331,42664 -xByThmEN;35634,88047 -hSRPYWci;2026,49579 -HWdRvdml;24692,20328 -aAhAOexh;73526,25530 -juIdBPGm;10929,26068 -GDuGUGFH;39020,65781 -bBPwfYrl;71880,58837 -VQcrSilr;73835,40688 -gFugFACU;66946,54031 -mcraHrBf;41074,33504 -jJBTHnOK;74129,79562 -SIfBmVoP;13250,42441 -Emzivckq;58707,89803 -tqZklIai;57899,72849 -kohngCEl;40184,35072 -wcEcWsqe;34148,63763 -kLwpVaQn;37811,31983 -iGrJdvEi;50003,16355 -zJXPpSLS;24032,5348 -vOrUeSYT;13498,33152 -GCuSxxWH;24639,6134 -qTnRyNBM;14502,5099 -suMyoBPZ;46142,16657 -abdoQlSt;76486,82901 -etbCUGEM;14813,8601 -CXJkVnSy;26043,25996 -MsEAAtLW;76520,19799 -kuMYmbLk;50970,68243 -SpPOLdtx;74652,52238 -GyrdlJBq;47972,67220 -FGnooswH;73563,72791 -KMjfjawm;88592,41270 -bPMHquuL;50539,71403 -WXpBtNDe;89671,81561 -FhBWrqbk;65172,56566 -ztlsZSjd;4726,67737 -gBzlQDfg;70186,8073 -mTyKWTLq;78022,42226 -DiGrYpwm;57122,29436 -LelKhDam;20142,76949 -FVKDmBAA;83070,83345 -WDFFoQnB;49345,1354 -KfaRatvu;38037,70775 -NEmjTXdi;36079,56998 -gSNQRMDk;15047,21398 -INiUWFUx;40321,26041 -QeNNMKSA;44143,24563 -GgFddVhV;64666,31237 -eioNIpgc;12730,28923 -BxkCrYpb;4315,64011 -dTXQzwAi;46811,38434 -LDJUSWpj;50481,30049 -dBMPMZNa;29293,50005 -QvoeXbIh;20530,24380 -vvZmnSMD;26805,45656 -AUNVcbVF;25558,75678 -XJrnxbGX;36932,39149 -cSQeQbkS;23949,66357 -RUVVJHlG;37477,13750 -uUseXDIh;64348,31304 -CLFWaMtT;50325,55354 -ZnWPLyex;76460,12717 -oufchKJP;53272,43264 -iwtlJJbl;2262,50481 -LnxfXyEJ;30333,75245 -ppHQLPCU;86722,13508 -QPueQrvQ;55089,79284 -TwuAOBoQ;43002,33104 -DyUdXNQm;4447,40815 -AUzSAEwi;53369,50624 -mOollaMO;44722,37180 -wkoKaYoL;19310,38628 -dxriGUay;13461,48287 -QpNxvfRl;50920,21287 -kkJlZqpy;17513,16595 -vAeVKEGn;63145,31712 -BrrXCNce;27017,54620 -OGUxWXcj;84324,5522 -AAyYlkXX;35204,5704 -UIsiYJWx;68329,44388 -vqMlZqQt;43531,22919 -WMpaYwTX;47720,41618 -anRmbkDx;31461,67238 -BTLlRmkL;7662,14338 -oPmCGxyo;14733,53318 -QFUrISfo;79858,6234 -rHcvUQbW;61036,4017 -cONdXukD;7797,88140 -qPIdGztJ;42139,3841 -rZxsyRSA;76991,87816 -QBgWnviy;58863,89175 -JenqknGC;12909,88376 -EXwQHTse;40044,21214 -qtoUbJsU;11975,7852 -AvksBMZB;74732,87330 -CkGWauDX;29225,28657 -GlrgkdDI;40839,13022 -wozqxWmk;80218,15325 -FLZJERhY;69325,60912 -iPWzkCXi;75020,89331 -RPxnzTFK;8220,54192 -MVANtzcj;35606,30575 -qqHpKYvN;57509,38358 -IEAIwsIB;25823,84164 -joiIfHbx;7981,15835 -nHOgNVMt;15533,42832 -HBuQgAMF;6325,9795 -tCTkSrED;33203,20321 -SkauVpRM;87554,15393 -BXWpfXNv;88915,87319 -BoLzmolF;70611,23071 -zdpSrFAI;69268,49441 -zynzcrfE;2308,35166 -AMciXAxr;11790,59281 -EfoKsBvD;73779,8495 -KezfmViA;76016,61050 -rXZLQgsn;53501,12474 -UmMzmzFj;4967,26267 -cgGjuzia;84224,42476 -mebjBBrk;58620,55662 -SptuzAnn;19417,45325 -ZuRMjRur;25136,1766 -WPagHKys;4129,13248 -TfFKAcgj;46392,85799 -gKNDigbu;70175,73796 -VELPBZWA;65816,56427 -OwfvRhmC;87956,31984 -YMsNoRJs;59883,24759 -YUwLaWOD;60021,47321 -ivAnCpFK;42435,11957 -VyiCYFtO;33145,8375 -UKbpYcrv;30121,68768 -zQWRRqLa;66963,85026 -igeTLHDL;33011,25559 -NfmJXNXf;86607,26540 -YDskNNhZ;52137,10150 -RyLZoeAM;12111,37068 -dHNuhLhp;26214,63102 -ShPaTHzo;89762,29449 -dbNsEcts;56827,48354 -iOXmdJYG;8899,59310 -nuqLznee;58013,71648 -TGMmDUfk;24051,87046 -XMAyGHGz;66556,9521 -YlJswkta;55783,45046 -DCEWgonf;61571,33027 -JauYIRiV;51388,44173 -sjRmYwKo;53193,13983 -bbkHjipk;40145,85550 -nwTlwnbH;41913,51986 -eLlBkvph;30618,27657 -wcIllwQB;16080,87479 -HBncBKxd;39595,41678 -YBTggCOr;89916,25333 -MBCQKbhO;8743,66563 -MgFZGUaD;79158,74491 -dhpJkhNm;28095,13782 -msvJwqFw;15795,42791 -evFugNjB;38764,87754 -tFSODFlv;34348,88373 -NBxpRfTM;14806,81235 -ssLINmBv;16886,9379 -VFVpoDXn;61547,57006 -qsojPiQT;48510,42913 -xUOoBoSe;27298,67956 -fRZVexsa;67570,60997 -ODgRiPTs;37238,83033 -WbGNArzW;79759,35798 -ZkUoTjBc;16968,23086 -BdmUWrMb;13299,25978 -xoDKfXmu;77626,14775 -QDdPHGJJ;21846,60782 -HmVMLdJL;44968,12207 -XUbtgHgV;55873,2271 -KfDAXZAY;65889,8533 -mlIKsAkN;49795,72969 -ceuFkqKt;44342,1997 -zfqqhVKn;62418,56032 -LZdxhRwk;84015,39728 -yGnVqUAK;67333,63878 -fpWmdhAS;29957,1199 -dfbkRESC;29155,50313 -PQNNKwui;47473,26771 -FEbDftFZ;75865,63935 -MSLqlyFb;5847,75451 -hQlecVmL;51186,70371 -laGSVrsO;37204,8741 -RrdcswjU;50473,58473 -ptnZpBrV;27884,24772 -xVUDhtxs;5565,50365 -JBHKobDH;46617,53280 -SbimDtXb;20365,65887 -uzmxsNLI;6062,9997 -ddzzXvKG;52458,69157 -FpAuXJwH;31430,1314 -IvGtTtUP;57797,86196 -rLWDPMzV;27892,26455 -KjatpKro;69883,13297 -PgywjDWR;14407,33772 -oegEjXLu;35663,83231 -giEqnGbW;17699,84591 -oPydJrZb;53791,60697 -iUjVbPKw;68545,4509 -nQlEFcvp;60508,89298 -XOLEWxRr;66870,32222 -lTpqGyzO;2195,75961 -CBwUNgWb;17431,52469 -IREQnsHG;1802,78651 -UlEKeKFa;54962,89937 -bUWSvWYj;74922,40915 -CiCbyPut;46906,82542 -ogKRpIEv;13811,3746 -ihAlvCtn;65643,42708 -JgibesdY;78284,82970 -dspVIFIw;41770,70167 -jbxGVdsR;72019,18320 -uRUTNMRk;14584,86143 -eJnOENcI;59326,38610 -nWdfiJOM;19718,40421 -eGOlxrLQ;14571,55028 -NcFbjXfF;45200,57092 -xhTrldlp;87676,62700 -mflScQqC;57696,54765 -tKPXDjdm;46892,34939 -dggLFUNR;11624,47285 -OJEVUDSN;62312,5960 -Gbragiik;4107,55604 -MObpAtPb;46083,87217 -ZhRUgFvt;2511,46782 -QozaIaHF;18082,87785 -LofeLVXY;6323,53743 -ksIfwbrD;51063,19969 -YdqFTIKc;35855,51154 -rFZurMHc;54409,88634 -FcDsUDjF;77212,89209 -xmMVeDzK;52620,54103 -ODINrUhQ;71092,80096 -XCHiMzLT;29983,38935 -Xnwdgajp;60876,8721 -gFTNcIQP;71829,47369 -LUYyfpXD;49110,34951 -rgoYUquP;15707,82243 -ZqafHDyO;82289,27872 -gnFMPKRk;88522,62793 -gUYVgJaT;14000,24893 -wmtunwAp;69401,60330 -fTEgOFkw;49998,14575 -AxwNZolG;52347,43474 -lhVAERlS;55192,29521 -OBAHkUPY;86992,72122 -NKSSefuu;10597,80976 -QFrjXNSC;9907,39963 -TQsCFhYl;66086,3097 -ZVqtaQpH;73209,78346 -MIuegGff;37161,67348 -xeQCxXWC;71277,49616 -nbVXomLX;37689,72958 -AgVMoeRg;31505,53769 -mHWcEChg;56255,5876 -jhsUzpVV;41379,47039 -dzGxsJtB;11847,7655 -wHNlbDph;46602,2266 -kWEXmILD;47780,50783 -uvUNxTjs;24405,61769 -AqwFBjfg;21998,23276 -AJxKkaeq;39835,20651 -jmArrWaB;28271,43186 -WOsywoia;27951,12675 -uAYxibFg;42829,64937 -RpMUpdlx;86784,73361 -ObzwNdoP;10320,69063 -vGhccFqY;58878,9332 -fjUaOfag;68399,16687 -NbImlTfS;74946,38352 -hIvIacQX;1204,62018 -wmXqRUaR;8679,43853 -MVrInpey;51347,30397 -PklggEhC;16468,89779 -fiiwyKzF;50235,83931 -NVLTFvsR;45597,18987 -BTVGbRSQ;62269,25714 -dpwJJxuR;78396,60042 -krcsTVdD;58331,7245 -TMDgdBYH;31526,75384 -ahdbqDdu;31556,34477 -KjUtUqTV;30714,64215 -NGtUBToR;69751,7083 -OxpoSnXi;79569,43390 -rSxTRUcl;67666,70655 -AntUlDKS;9715,80317 -BiTqVard;24022,81017 -tPReGJwi;15754,63733 -WLQkotjJ;18001,24437 -TXivxKOb;51045,2252 -lCZWqnMn;50404,55360 -cYPUrWCD;11403,89315 -IZIywkVp;67186,70005 -xqTYpTub;84042,33595 -EWKtuRoL;22380,12898 -crdKKfmi;25730,30781 -BhsaAkSE;25531,65027 -eqHnXZdb;34006,13640 -pAZJzmKQ;35778,87840 -EgxferrT;19618,75658 -XeialqPV;75321,10747 -aecgLwvi;5001,47116 -LDAXRsxy;59141,12605 -RuiRaNdy;87912,17602 -KxpkHKGs;30128,16262 -EsYQeVXo;40909,24087 -rirVYiRH;81045,15903 -EFdoZuae;55090,5584 -VwunWaBJ;60699,52570 -eODMAQpb;19768,16185 -EoNNrdcQ;32468,1034 -xEBWuTJJ;29702,38465 -XGyQhLTM;54123,8376 -TfeRubVo;43201,8746 -zWDvOYlE;5042,77105 -JIcXeGSq;57128,42246 -ZiNgRISt;81194,33214 -FozKPRwy;60662,26160 -dMyrqdrj;55266,29478 -usvRDRwY;61126,24798 -NAFUGVue;22902,89895 -ZWgCaCKF;5158,83444 -lvFJprny;83095,12279 -vEwbLnYI;72908,21042 -KRGsoCQT;26685,21756 -XTXbWfAb;47049,71704 -qvBukipE;22575,85466 -QJlpqLjE;35104,17115 -DWPOXfnN;59226,8416 -kSXZAugc;77345,21723 -MHRKpYBX;17136,59138 -rdwtxRFw;32140,68166 -qVYmgJYn;36208,61149 -NrtqQyht;63054,74183 -rdyLLBkJ;51755,75581 -ZBMSkGGo;3911,56468 -cChasfLR;23905,59154 -MZKqhbue;81758,83364 -OlpHqVnZ;22500,54904 -PJHnveEi;1129,23988 -PybCswBU;72280,61733 -TUOwfwEm;89184,59200 -OpBAjlnH;71089,9071 -maxqJeBl;48795,61550 -vnTIanBC;76220,62647 -SMuNnQJX;52122,79661 -deySSAFC;37158,41525 -zbpaRKYA;89884,19011 -agoKNwzP;89520,57711 -sriGrrIw;72823,86140 -xoPsmgDZ;44758,54302 -NEdzmYnW;73572,20550 -SXcLnjqx;36029,43267 -dNtmjWpl;51797,2058 -WvjzSdIP;86759,84150 -xlhBFQjq;22894,14644 -eljYYsHL;51114,8741 -rDMgQrHd;29807,79455 -cNkPSJgr;51368,20413 -RjTGHBgt;12567,67673 -IBHAvMHQ;28729,40444 -cyuxUYsk;41156,47200 -xOrXYqyy;86059,78262 -LVcYVHZP;78647,72704 -mXDVPNcY;75431,61290 -tDfpNWkO;13385,12850 -zXBicJqC;82661,26716 -tzzKUmoq;41097,47997 -XOXhinLl;69214,66047 -lRULYQDs;51513,35176 -zCdIKzTX;65556,69993 -eUkSRNkJ;28969,66916 -VkULomlj;65946,63605 -POAmIfXD;84373,35588 -fEiYiOWO;59498,20059 -PYxPRAvJ;7709,15935 -AfkVVMPP;5234,3494 -gZjfZcxm;36104,66339 -dQKIbGya;33306,35735 -kmnWVzOj;53419,57494 -ykrFsmdH;69991,87105 -uprDXLMT;62991,82533 -MfZedeeA;62223,22390 -MTVBVbQG;46401,53191 -iKHpnnYZ;1347,86005 -nBMtUZER;25960,36069 -meiHIFEt;82926,56862 -DkoWZdqB;28275,58945 -CTNPhIaF;3942,19954 -UZjaAdTP;77901,35371 -eNUtNCop;64311,33866 -TweToKrA;30738,50557 -GNOqIvhj;58471,89026 -GonbfVPa;73326,5131 -cWZPAZSg;47972,76500 -nGgeMWdx;83802,45256 -udaXLUca;24640,49230 -QkWSBQSV;1592,61218 -FNbCdyGr;87762,33616 -IaKsknGz;58446,28172 -FigfBKev;74172,72116 -tKhxiZfB;38609,1917 -mlHtMsDE;54928,72737 -uBSXXMYx;89493,15253 -wxHrgZmR;38511,57495 -iNUZYron;35140,33185 -yYTHYQZv;18775,8960 -AJgVYiDr;26317,65046 -pySdrjLQ;43753,50415 -JCMMbllf;41920,13889 -pxOfUdJQ;62230,70380 -jsJECLBw;6628,68176 -qCAlgXNk;84547,35945 -TdIDIjIZ;67990,36510 -UCHUToqI;60910,33370 -jgZFFqEd;1478,35912 -BiRHkyxo;62881,33747 -ZAehNgFu;83499,62621 -WXZGGUwz;26386,28338 -MMhKIGTn;8299,33761 -LJSWnVCh;19664,44562 -aNOwfJxV;24588,84161 -eHkOYkVn;10760,61805 -pFVNMbwP;32426,72227 -YqOSCBOA;75136,74673 -EOBrINKr;18696,52460 -KphuSwsf;64244,75777 -ILRZstnQ;67657,41884 -ORFDlcgU;14846,13322 -yxcJRWLq;66067,75159 -FFsrKiFB;67862,19727 -wLrtqrvy;49028,76141 -WrqpqTLa;11547,30806 -iKBkrSLq;82563,13375 -kKvcbwJQ;3068,26182 -fRnGZrAr;54080,27444 -WgnannUQ;37147,66013 -TLzKAhbq;22642,47919 -ZuwLzCnr;40023,51218 -vFGrETcA;57283,19243 -KCqnoWIV;9932,51027 -SZTAFKwQ;57487,26630 -VkOnLkcY;49015,86789 -vPnaLKvq;24546,61720 -BaMqRrHC;50468,32204 -rZgavmMf;19270,60000 -IfQoxvqZ;32360,87519 -iNyZOLHE;13746,88030 -qfPiNnwv;27152,86525 -rIMZRBhS;75561,7519 -qNPYaUAa;24041,50690 -OXkfUByb;69838,51968 -xHMzwSqJ;32246,86186 -NtWpWpOZ;14235,36170 -HYAAgxEi;40376,80722 -jQnwvczv;3045,85002 -nGccjrBo;41791,84545 -qyRkBUWy;28428,2339 -tKUBJBHI;83584,38801 -ajYPYrLt;23484,9787 -cCTWBDVQ;51482,62533 -yaPiZrcx;86231,7341 -QAUIekvz;86598,35815 -kuNvjFuS;15646,36364 -zFxCmdrl;47308,63383 -LXFezIMm;60808,70962 -lHvhKZME;18761,21589 -zupBMloB;36556,84362 -KaBMyvuG;6398,68754 -SfpPYvbo;20160,51332 -fwvodNiG;38666,83773 -VPKcZVFQ;28919,46327 -BiTCkhsl;75302,39867 -QtIfJdtY;32418,12162 -vgnMmSIM;51335,21063 -XTjNemuK;55566,59868 -cNRdxvBg;39137,29646 -WSfrDPrm;4416,57325 -hesaCGDy;20313,53062 -UCuptRRg;26038,71486 -HFUvPiIv;76820,78286 -pJXOTGJF;34981,62291 -jEGtxUJd;69092,8688 -ETgQgHmq;31322,41670 -kmkmGsaN;76155,71078 -LJvjusQo;26696,18798 -jXiUSLPQ;80470,85530 -KFUjvDEh;54785,75805 -weiPCjte;2438,27377 -qXszqMGa;85844,11366 -AEoixEjo;68707,5268 -EWBdytfY;48001,38814 -rJByegNh;69678,35815 -ufVAqUMT;9633,79432 -Ggefueob;4529,7438 -GsLkdlMq;22818,72100 -UhunwyOu;7502,55972 -JcWoPNZa;59133,5726 -AtWSEcZm;87612,27718 -vKPVmnyV;27823,63995 -mSfznIeB;48486,53515 -iVJuPdrn;35294,65080 -MFXywpnb;74459,53839 -HpmRydSI;68057,77912 -eccJQPSL;17791,41586 -fLldRyru;26260,5226 -SSMpymdC;18099,83876 -qPbLWoAz;82281,24444 -iJXpbjDe;82737,46575 -egXswbtp;29164,28031 -uaEEyZlH;9272,31772 -iJgiDBmi;27212,43648 -DCvNytlK;36636,70350 -JURacNRv;85540,68857 -pKfffPRQ;27579,9448 -zPhSphBK;21923,49278 -ONgbYRiH;33833,76944 -hiIpFcoJ;58856,58976 -zxLoJNFY;17396,65350 -CbSlUwiG;65917,27718 -oilBRbCl;85633,2134 -rdffRNco;53834,2472 -vhZEBYvl;39301,33218 -hQaGaDrd;59065,29189 -toEMEkhV;70531,9585 -lfBhqmDs;57611,63912 -NJurrHIs;79291,30089 -XmXFigQh;28505,53055 -FDAHnHHe;30134,79525 -KhDaoCnP;61240,46531 -oPPjnjMn;70305,60839 -FMYqnKuH;77037,16479 -iEYilurc;50294,14753 -knfFAsJn;10053,36912 -zCKTQWCM;68424,52725 -oHWwCBjQ;64208,53667 -GYSXvmVe;27603,68885 -CMCWeaEN;75255,60771 -zcAgXAdN;86708,35381 -XpFsdZVh;61110,81742 -KVotwILb;67033,40886 -wdIKqzMp;44539,28559 -gMSGhRjt;85140,47989 -YcHCrJFc;69254,54813 -iFrftCTw;19953,19388 -qRPCoIVI;74504,30384 -fQJBxMoI;10942,35409 -zciRjSwl;24121,65183 -zGKWizQs;8412,18821 -BZkociSL;5063,3100 -tOoxUrys;3855,66034 -TOwJRpUp;31178,6769 -VHAiWwPy;19257,38105 -DGNHBMsD;22521,84205 -SVkjnCSq;6868,83122 -vXVCVYAi;27528,6838 -vuGjYGRH;61287,17496 -tyRgPErt;63988,66268 -hjxYlveO;73000,57966 -EnXTkuRF;27902,62027 -soByvbcJ;45740,30056 -dfKIUiKv;42022,12687 -tQeCqxsQ;75935,89899 -jHIEVdbI;70724,41489 -AkBaAnSW;45031,22522 -KUPYJUTD;72211,48405 -BTfMNDnU;75839,40806 -QNVdFgFL;28940,63306 -pJQsUZEM;31285,86028 -vbRCqAcW;29049,46182 -dhURCSNN;55312,50298 -mtFpJzwK;64336,30511 -eNLqLigQ;85435,70307 -acvpsigm;89455,38754 -ZKmHjuFr;44799,43955 -QeMXBecC;56387,29406 -ydWDBaGS;17359,1174 -xhWVENtl;20602,67784 -crnywqst;50901,3203 -ZUOjBmhw;52421,89340 -ZPmTAqSg;66564,22960 -eddbYXmO;38103,18576 -wrmczjzj;75613,25552 -zRWceagH;12454,29115 -UhoJLQmj;5780,33112 -jShtbWtA;74899,51108 -tHEnlVnP;6824,65459 -xyzTmWRc;75590,46800 -EloBmDZU;50672,45442 -OlmnXtih;42176,36365 -OzOmgSCv;81514,30921 -LoKMBFhx;23202,22880 -MQuDlyuX;79704,89267 -KFDBbWXA;57654,34153 -pRrsSUcZ;38816,13039 -RAKWZqfn;57106,87392 -rzUkinOq;51732,80625 -HFBOIhCo;47427,27895 -agBKraGK;10396,10561 -PXdjXkHq;58345,88461 -yXosCgQb;17640,47264 -YtPZHeJP;43784,86891 -cdKYLMlF;44104,46887 -BqvparoL;62688,67776 -fjXyNZSd;14913,36443 -ueWkFYZR;30948,6607 -UgIahOsz;41954,77532 -rECiEktK;54695,72568 -oCwYwupJ;11813,69340 -dAexPcFL;6113,9426 -EbhrEyxg;82092,39241 -UjzRTQmE;14596,41306 -tIOFElNV;40753,43086 -wnSxFRnM;9062,39619 -LlEuNQXQ;23617,80118 -iIGcqYUb;15273,16576 -aYMTEixS;40850,32755 -hLpILRji;51392,35390 -wqMcSulw;36550,86959 -hOnxOamp;69221,76955 -vXoBWjJS;88380,8469 -OHksbGxl;53131,16493 -TgNefoUp;83393,22802 -wQlRTgGp;11139,5519 -nLKBkBfP;83835,85839 -zUtMkiIe;11641,68116 -BQCjxhJF;52220,73745 -nCFRWumU;55700,11422 -VPsHOjzv;7538,81764 -CjCOpxHA;28431,53335 -RWQMCIqc;44772,21993 -UudAkMcr;64166,45320 -KIcuvouI;23587,21317 -vPluHAFa;53932,8650 -DdOrrsBS;42162,39969 -KZZHRKDx;86610,39678 -oEzovsyS;61890,41685 -fovYTIap;45513,31049 -qbcPzcrm;48718,57348 -LwClwjQb;16346,54386 -gScxvCjc;1424,18339 -RALkYGsz;83374,78384 -vAJVGZTb;14368,59056 -oNDsCbbM;33946,48186 -HTdCdBVM;88572,62521 -aXVZPxHA;59170,62154 -bNUjeljL;60080,15346 -nunjAJDb;50805,75674 -nsBgeeGC;88872,40438 -PIrnrHqm;37742,51451 -ZPydioFe;46437,56987 -oMmMsQPY;70054,37003 -FwySfhsb;71454,74649 -wYhfBioM;77147,66635 -evmCgzgQ;36596,26400 -yQsmNTwx;30090,4137 -fGgWJytz;85022,73779 -SZTbFiFX;54983,29940 -NqGVlWPd;59810,57664 -oYeYJtNy;76524,55960 -orJfDJdw;60468,21964 -IBDiCRyr;27011,23245 -YojXKptC;3868,50910 -QqBrDEPx;58816,61473 -PCqOIMZE;86664,80600 -XkAvCkcb;26666,62216 -cSMKIVgt;84377,30472 -ZtFAnzEO;85090,73540 -CvlXxTow;75993,66841 -OBNImfkg;77111,21774 -HxgIsNbC;47788,63902 -WcfzNyAJ;22641,44894 -kbqijYNh;82307,46111 -HSFJknWR;76085,52580 -JmjgOlVC;41691,26844 -bIfIjtft;11018,32782 -vSBDcjfg;55969,53257 -vsOyFrmg;39662,56652 -IvWCTqYk;39808,74609 -DcUdfCHI;40464,24813 -GQBafqtk;53810,6155 -olQKcBOS;79106,28168 -LoIWdjgt;17264,57856 -yiFzJrWK;73354,45333 -rNzamgPk;85001,70193 -IQhMLTxU;37177,86275 -DgAbfMhG;51022,27615 -jbCXizYo;34087,40622 -DNjVYEML;37855,25338 -NulCFqln;87442,89414 -wIYWEKLC;10878,78658 -WlEQGamB;14558,8641 -zIzzQDLw;72264,5988 -EQWZDoDK;65426,36391 -JMhaYcAA;25754,10177 -pYzEHpkc;16750,62255 -TjsIzwtA;13575,61374 -XfuPGMhP;18749,34059 -zEXNXcSs;16099,63389 -LThhTriB;15694,61165 -DgsaEWaW;59296,77856 -eDpcrCIS;56315,62048 -SfmvteHb;83175,58642 -SHIqyTOX;54916,49465 -YALiAhkc;75819,67759 -scdriJvt;9745,29389 -eTIKBVRX;13508,20799 -bZnpjjCA;61393,25887 -ReaLTjuf;81617,58576 -VOZEhTTb;41175,58660 -qXhObmNE;64244,51978 -znRVSWbW;17746,73577 -vTtWgwnK;63447,88943 -ZGcNYpcJ;37232,9611 -XCmtTrQs;6176,57830 -NLPpNpNw;69265,74495 -KjhIblJt;29142,50259 -VfXdJChA;46024,20568 -opARlVrR;20359,80505 -IDFXhSmg;20031,70054 -DJzVodgy;5430,79016 -GJZcLyGd;21377,20082 -yWvwrWik;48874,32328 -PPmugCBc;17083,59153 -kGisQEXc;11550,89413 -JVhVofDw;73448,26220 -qIveQzzw;75144,48681 -ORBRCbwq;54962,66234 -jeqcMiqR;22538,86229 -vBUTuppL;25646,45991 -iZEexhgi;29585,40923 -xXaQliYP;58058,17803 -VfrPmURB;36329,55653 -HNrizSnN;77127,53497 -ZLLSYtND;13562,38552 -UNsGjeIl;53443,86521 -pVbkBwVK;2754,67035 -snVdmfEB;32600,69861 -VGtSGyLf;6146,66766 -lgrkYdKv;26456,67689 -VldOKbUe;16739,63928 -DBCalfii;20090,34754 -ikNLfGqD;10532,52109 -USdvOLnf;51283,83198 -LKgVnXZw;43223,28607 -hrcTJsNm;56594,42137 -JQsZwQnw;77841,88960 -Raacjgnz;44166,49959 -HoWNpVHm;7660,35286 -CubdpriL;44903,41620 -ctlwhvXr;21307,38316 -vkvhGjhQ;42890,55772 -IaPKlTbo;85781,60453 -LFxuMcnH;30667,17773 -GZmjswPf;60748,68020 -RFuJnDJE;63044,14467 -vwKPkdAv;64779,16574 -eztNPhwa;17057,79948 -ZlZpMpDd;19694,81290 -pRIUDiUK;45537,44011 -vUYtzHUF;32764,66443 diff --git a/src/data/entry_2_11_4.csv b/src/data/entry_2_11_4.csv deleted file mode 100644 index 06b8d45..0000000 --- a/src/data/entry_2_11_4.csv +++ /dev/null @@ -1,2049 +0,0 @@ -username;balances -bUabBKmL;21062,85834 -qqZPoaap;5475,50220 -SUIayglo;33657,6957 -nuLIHAdS;8144,32953 -kldzWprZ;83177,35965 -VrVyOuZP;61732,87222 -kEgjGiJE;55096,79372 -njSqvvLe;46755,37282 -YRcHlpkw;86797,72393 -vQUtgbym;87870,70214 -SwKsAMXi;71962,67520 -agniEDPW;13658,1115 -kRCZEXhq;39406,4310 -AcijqnaM;76090,12479 -CncCCXbP;73423,38622 -vnMnFldX;25232,53171 -AKXqNFxd;80609,82214 -pZeEYiGF;63185,14116 -szIKVlPa;20351,5025 -mOPcyvlI;54001,45669 -bsZBTvSq;7982,82724 -lkKlNXdy;78492,4445 -PdENbuqF;28182,66544 -ItIkmLva;61302,85659 -ufjHNjVI;52864,83306 -QCVXfske;42969,77772 -WbQocFiP;59281,24490 -urufbkGd;64575,76763 -skfTUTYk;39339,16750 -ARLKSRzF;15100,45519 -uUbElxAY;61344,71346 -qPMAZSvP;53548,47111 -IXnrjxgd;45497,7412 -ZAdPSqAN;6254,62969 -AQDnFlJF;52805,48781 -wbUYXNuJ;85671,58226 -SSZJmlqU;25084,9004 -ZDMKDDyy;6270,54677 -EWUScrOM;18346,84112 -UNXCSMji;57668,59658 -vrbqptpe;15101,69350 -zKtJmksD;15781,49818 -drAMNKDD;49072,13913 -XKAPktNJ;61484,8024 -ZkKLYcJd;50643,70199 -THirNIGx;12825,21095 -czeCNwwF;50967,51282 -QCmvNeiP;77914,28748 -tMTevGnb;74505,89294 -JRUFVLeG;42616,3148 -LhujXjOM;56654,71141 -HDGVXfhv;7818,37798 -avPLbhIc;82679,42493 -khnuJNuh;18347,38984 -TtXZWSbH;51580,85048 -tIjNGRuR;81604,17417 -WEGFVmvG;52918,37864 -evUVPSnn;75112,17469 -KEvllLBI;6468,55551 -gCuSBSqm;23646,35052 -unxVhArX;7023,4398 -oJyjOiMZ;65322,72163 -ssEEnBPg;16210,86452 -DOBkMARt;18228,37297 -ebSyfJOP;13290,17582 -JXonNaeN;45680,87282 -DxOxHEVP;43902,63425 -gXFhLsEO;63807,61929 -nzcbwnHl;6023,13403 -lFgaKojc;12430,83562 -KFCtaJfb;40166,76228 -AFZXnGbZ;79527,48031 -iMoUWvhl;42143,71393 -mfMVZPas;27462,82717 -fFmrZCAs;22897,73644 -whKloJHc;49396,15276 -YjambwsF;57183,79359 -QFQNxRJw;62700,59585 -iZzkZqgP;1059,89841 -sqPeztKo;3341,3453 -mGFeEFbV;13865,81372 -jjeJWrUo;38107,87228 -bLlZujjb;65085,10454 -DJgJErKy;31133,61229 -QjdhdmTJ;7799,17448 -wSmQukqz;85290,12671 -QBvRRfqp;29680,74746 -pdiLkxcM;26226,72667 -nPllwwvP;9033,30820 -WmHDPIlb;65295,6923 -uoQNHkeU;50049,64503 -NEMscaNp;6186,8968 -dGUaOYBR;15262,77825 -PjHUfyGA;29314,11091 -TmBpKJOd;56523,8086 -iUnYDhel;3070,51594 -rkezdEnN;8342,45770 -hKRdUILV;57723,19034 -UdEJvvTJ;69343,53324 -IwAZIzUf;75380,69648 -JgqUOleh;54804,55440 -oSRJSkrh;39572,14515 -cVRgOrjK;37469,26259 -JTvrwjzw;52378,79078 -eVjhQCHw;46207,66893 -OOlcQBLt;5598,23576 -vPvLOeek;39523,27071 -OyHGgxGH;72920,45174 -EMKZFFRS;71915,36784 -HMOvdIVv;49133,2156 -LegLddmK;35137,54965 -VXHrUpsg;87636,22207 -DeCMGTVF;13464,77078 -TlrAUQDj;78270,48747 -DcjkaIig;13661,87314 -svUGZPGt;5601,32795 -FlGfVKMs;50441,77176 -yPoPmqFI;20772,79987 -fRcPDIgz;73169,11506 -oJUvJMaO;18044,15205 -NwRdIjPl;14679,33213 -eieNHTMS;33508,28807 -HWNLQJby;38705,4254 -EKXzaVcy;37478,80158 -oiDZqgdd;9669,59577 -XFlMaSgh;86247,22464 -xvuqupBM;69516,39982 -HsvuCQEY;68201,21436 -HAKfCisN;4414,69215 -lMUThoBe;41681,57221 -NuCqphfX;47119,9663 -EjHpSSVf;53586,53066 -LaKbzSrQ;28328,64803 -PTHGOrjj;80399,19740 -uhLxCnNf;5383,86008 -LwuLgbRd;82459,87542 -NmohhCLt;55102,79427 -MTwsBYJC;62315,57700 -GawAqWJF;73765,62142 -wQNgeBbt;5192,38087 -hlVbctqY;73416,67737 -YJWWEWCE;40401,18343 -NLaQHAKN;65313,32382 -nWXIiCqL;36627,48999 -HxMGcWUX;88951,28432 -qSpAYmaB;67546,66951 -NKSUCuEP;27831,75485 -CBKUfmMi;88888,50224 -yJoKLwXZ;66444,48851 -UPNNsUxe;26725,19250 -ENhzUZeh;19759,23351 -LfwerFrJ;15198,52287 -SSWvbAAL;71519,80464 -UlgUgOtf;27937,47648 -DPXqCsNM;20092,25876 -WbKpPDYV;50079,43193 -fnrJGgUl;51437,65582 -elswopqL;29377,5966 -bvGViOXh;8394,85833 -QbdKDRlP;32161,85459 -tSrJkKNi;32023,5922 -WBKTRiUQ;3601,37085 -CeDGbhjr;77567,15735 -CLoXwZgs;69167,45124 -ZJqXhQod;69144,58554 -BoaEgDGj;12548,66436 -JXwmjyXK;24407,24935 -gRWXsRqq;11196,63462 -UECHgyOS;12834,26841 -VkFmbbxW;70074,14413 -bMavxdrh;23114,69110 -WNzgmZXC;28162,6509 -flwtMmKW;22420,88677 -tupIoCLM;40706,33665 -vGxqtYUy;17603,17762 -nxgmiclj;1445,78488 -NKrqlEwb;80892,48281 -wHLFqyjk;89101,17197 -vqMFvGhc;18589,36299 -MDQBSZVw;42593,40214 -pxbgfEoC;52605,44850 -dCehjehD;9784,39216 -gsRhmEjZ;12528,34774 -QVerRyCq;27106,89297 -kbXYmnoC;71860,48832 -HwzcDaYv;52123,22943 -AIHbKkxy;65626,43177 -QpZDSCxe;50765,45070 -elcGmiqi;89402,83943 -wnQuVCPj;86432,18852 -gJbuHyxf;40977,23871 -bpDkwQkM;5127,55989 -dzrPiIDK;30548,18336 -OvyzojGj;70394,75186 -fGtkhzHy;29005,12936 -BnxJQVrX;67019,13686 -HyTaMgtz;79856,75256 -vjggLYLS;34917,10788 -EZjwjWjn;76756,27044 -nPiltbEg;84124,11256 -URxhdYPW;29766,67689 -NYSNLORO;52813,67154 -EmBDpggG;69346,79106 -bQCbDYIu;56044,18915 -enAgUWzr;68266,38531 -LJZWDBBi;77016,74592 -OetVmAlM;81272,5308 -reFyVCne;10209,21093 -EgQszrJZ;84295,22353 -FPDvtrkb;37317,84542 -ueoVVnYJ;51686,69873 -xZYptHXp;43202,11376 -qWaFLIny;75537,9377 -xzHUlNxO;71784,76746 -EByKnZII;48311,63275 -dxnsxObM;14728,44883 -lKkUPVpM;55301,32074 -frOvooav;81123,31513 -wokECRfA;35100,85038 -OEhrxPUk;76380,69452 -rWvmxNSW;22145,20951 -rbBEDPGm;64895,24245 -PoQWjSwM;49973,48637 -YprBvLnY;33874,85667 -ENoptFeJ;70505,80343 -oJdRbOUp;66511,61549 -vmEGFleZ;57874,77505 -NQUcQsRR;88683,49997 -YdGDmNYT;64960,48278 -igPIZNCh;11750,28273 -WJUuCXyI;35371,83228 -GfoHHnbq;40041,79598 -FrTLacPM;32810,65344 -JRnSCxtQ;2120,23176 -jfQtItDy;29090,61816 -RWWLSGdS;73558,21067 -iMLxUqoB;81154,12807 -UAVXAkNE;53727,58525 -vLkXSIhL;12792,45893 -VIBNMdub;7872,81384 -axKcqDJS;61653,63545 -pWQNbDWI;21155,58994 -wjGwHWGv;86159,47198 -mKuusLBr;49025,66456 -khknXCMA;27524,1673 -snUljgfX;6622,57647 -LLPjlUKd;41834,53140 -MfEuYsOl;18537,15358 -fdcEAlJL;44364,31738 -UXLLywOk;1173,42615 -gBEHBzgn;72167,52616 -hdjJjIVH;63307,70851 -pgqayHAc;6416,21949 -RBNSiVVD;1968,29042 -PhmywZwN;59278,1818 -nyvjQVQH;81902,7033 -NPBhKhmR;41581,21961 -YvFiRlih;65228,75073 -GIetXhjV;86875,63413 -PfAxNvgs;75697,84568 -mzdaNUdK;25189,7418 -FJBGFJYx;74623,63056 -ttiMehTr;50250,42806 -hJDzmtXK;15905,61367 -TvAEdHFY;54029,19260 -dcpxFvVz;76838,29142 -PIWoYHli;59128,83857 -IJQlRvtV;86478,12245 -DTzWaRUH;34057,18917 -CwVUJWbt;20970,35378 -SMFKfzkf;35512,27977 -FkqZufnv;8476,60938 -RyYkNIvJ;16954,1427 -FakTwJen;69137,64238 -lZGuIoQL;22050,33370 -jOBcowan;60028,54777 -KieFWvrB;39978,32431 -HVMCpUwW;56034,38566 -KBaFkVIY;65997,21551 -FyoHadUa;36508,4429 -LSbJksfw;10673,66301 -AjnpgfJR;19833,53379 -TlMWWqqv;9023,86765 -oozWBNsm;66064,12896 -abfZwobJ;82250,69514 -VGFBCDds;59364,9735 -rWLnLdkB;41709,79776 -nRtoumFw;80243,24539 -bAqfoETC;83324,46504 -pkBOxsZF;49649,4777 -yRSsPIef;84315,69240 -sYeVTpcY;17318,49367 -XPoJckBn;86008,84238 -fgjQepSI;47525,74504 -CPNXRQZQ;51732,26531 -uWKZvtol;34732,62677 -ObPGMyRk;32271,23706 -xQIbFJuG;55724,37607 -DPkRQJNq;48286,44353 -lMIQhqiL;54701,13432 -DMeqTwGU;48740,9367 -HgMoyWbK;69213,26512 -HUwIyVaH;46477,10513 -UXYmqxAF;17950,51413 -QSbLywhX;69469,43706 -QeTKtfuP;84715,53516 -eReHABtE;65854,40446 -pLrvLrJs;21693,44896 -tonpoHQq;87036,30779 -xLopZhIA;29554,72006 -wFUevyHl;34864,23385 -InjNtNlL;14346,76199 -KDzkGasm;7410,79172 -SQvhyujF;20065,84072 -LqzWiHmk;69567,72010 -izkCwKQh;18844,12613 -kOjIOHAR;38344,67855 -sCzIjBEV;76356,56230 -cauGCwTx;41530,43614 -RVUOzbZq;81949,13728 -csayWQXh;1382,56829 -kfQFakiP;57166,73528 -qwubUCIB;63966,73829 -hrMgHTDB;46046,17219 -OtnBuEZq;31365,65920 -hXOcTRge;60575,28442 -rgMyTSjU;38809,59901 -BGmMbZhI;83859,80055 -rcSTOGHi;21943,48100 -EuryikoB;87338,16688 -wRUXLgVk;15895,42595 -jDxbGTMl;30841,4728 -fMpuNjjB;45075,82655 -jueXKhnX;87706,24100 -FiWwlnyb;19270,50830 -eyEdxPpj;39231,60917 -HFtRyUgb;10818,3924 -FucEeObW;59264,27578 -jxYrusRg;22058,83141 -bizkbyJf;55413,31050 -RDifOItx;15950,78957 -YVTnyIip;87384,29602 -depbPJQI;40810,29026 -hUaMLNyq;69195,50821 -MbaAbJdb;35768,42706 -uYNrHlSd;37111,5771 -LCavqUMr;27092,61326 -UsowJbHl;5766,72588 -WkXCpbwb;22463,5393 -MaZMEKuw;57826,12128 -tZDXyhBh;53732,44242 -ysWLITQc;61851,52402 -KwqtQIrG;67049,10192 -LoIQEewC;79348,79590 -KixuJrtk;22244,7158 -FDpqAOJg;19943,16093 -zkelwSKi;27493,22500 -JHojSBAz;42315,64469 -TuqnGBDE;22993,3120 -MNVEULpZ;68410,2276 -lfUhoCVz;58315,82625 -XGhTAkvA;28358,42756 -yAVvyhHl;18704,17580 -bSPbNinr;61912,35466 -XqlwnHha;87732,42168 -egLcWZqw;46904,23167 -odTneuWB;1899,59815 -IIomqdLC;87188,63134 -QRZPAxQN;3089,68518 -jSiiEmyM;10871,68029 -LzaSEWMg;9097,73174 -LFOWMzLx;27458,44038 -WjnfalqO;15028,71974 -flgduQqW;60790,27858 -DJouNpUx;71742,29106 -ttlIjASp;67917,51931 -tGMsUfhK;45348,83994 -AHnGxeRD;9288,75815 -pRlELZUR;13262,45228 -zkErcagb;25131,40172 -bApSKMBK;24551,46860 -hhaxpPpF;18512,36606 -AGGhuPXi;52067,55077 -rcucYjWX;9036,40805 -lFxBIyZW;58908,29988 -AdtQgpGQ;85827,72884 -mfUheATl;63961,79656 -CBaytZRi;32432,41059 -cDzyUQUH;19385,17141 -CaptVLgV;78157,7552 -QGlgWuEL;54658,65439 -KNBWmCIQ;82116,10718 -HZgvynPg;39611,85098 -nUOeEOlo;33944,84345 -AwzexBwI;33560,1185 -TqfLEeBD;63585,83861 -ITZschtU;44233,47328 -pezOmjKC;83849,39796 -hbQqYPgb;2949,42621 -LdInLAjn;65949,84522 -fRYTvXCk;72378,82975 -HneurJJO;60259,75098 -lrmZhCEs;51755,65399 -mDAjKInr;77539,33854 -ZUbRSWrF;13584,79921 -WxUCydkj;73961,76587 -RecaxHom;72349,60397 -yXRDWSVe;16119,50620 -Jerewxkd;82236,80852 -vfdphPVf;70789,20418 -KRqZsEDc;81475,87803 -CJZGiKZi;40257,48462 -vqzGzshU;72485,21297 -eptHiPIJ;73260,9868 -LIwqDyJk;10904,60410 -uKLtbkIt;57561,23587 -EjTbUqBm;74711,50648 -nseZTwWQ;80450,75107 -GtYxSVXM;27583,6981 -DISEYJzy;16380,40491 -evlecnbh;89427,30184 -NPXNCWBf;70672,39060 -kpfbmePA;58748,14954 -NfgPWYZD;41095,86228 -qyYTHkJR;8214,36224 -EldGRYUd;86007,62434 -VbjgqwmD;60064,50981 -oLrUEkWN;11843,65981 -TqwESvVS;61042,62196 -vpxyDvqf;45163,53837 -QJuGzKVP;8821,30270 -NWdvSazI;2526,80371 -iuuUUUIQ;19072,73252 -Npqihiie;82215,53633 -MHOYhOts;49520,78253 -ZItIRaSg;59097,72592 -hPkvvilk;53780,22958 -XavxpUOH;40967,38565 -WEoBeigv;18152,37830 -XUGBluLM;29256,16089 -LxhHYiGj;59924,2782 -hxxYawyJ;70814,54036 -nBZcdKlQ;37344,23639 -WScxzGvj;49817,20169 -UXKLmMOe;66108,81918 -yPgjdNxI;57214,33739 -zgLwiZcd;30614,89610 -eBaRqrMh;79115,58461 -kMQgmVLV;79706,57620 -wxCwOaJG;75670,56485 -IJCPOhCY;57182,32317 -EKWsgLBu;17023,7359 -TfEIuamY;15910,29498 -ENpauOfi;24762,60871 -ChRozGtD;14563,85046 -YjGmsJhp;85138,64704 -GkiFTIpC;32214,27106 -zLKoOlHc;7689,65616 -lgDtAnqH;12011,5618 -HPgeubwN;65879,52071 -nNZLiIrk;48132,59380 -nWSJSHpf;36164,62736 -YyBIULem;54345,41676 -FCHwybwS;59086,33964 -QfwTsRlg;25078,65189 -xtWZcsms;71491,64074 -vVZTyotg;50943,60674 -ERbqWiQx;20394,29323 -QfYlLTgE;88483,41690 -whjdjASc;56710,44064 -VFecfeTD;45562,43812 -HgnZhJKV;4285,86880 -CvEgFzNl;56354,56003 -AAsNjubu;13323,84749 -kRabCITP;55756,21853 -eSNmdVXT;33595,22624 -LwpBnkfC;17802,75126 -aiwdEwLW;9073,2984 -rqpuBdsF;80258,31579 -STwYFrmg;16533,2906 -pYgcGKBg;63227,76208 -MxveeYPq;6348,35463 -nvnSXfVg;25384,52595 -BuSxjhYY;40226,82143 -MPoIyefu;14952,54666 -hUStXpyX;26228,64073 -UmYbnpZG;66575,19232 -xndebzCd;19961,75166 -WXRQDAcA;67194,34496 -ijnwfliL;65989,66218 -kJCwtBmx;83500,12458 -XgAyjKks;22210,50719 -ZXEosbBZ;13734,12279 -cgbsGIGh;3925,22007 -RLypJdqS;79618,88327 -EkPrDUDz;46101,81631 -PmLMgXOF;26504,62816 -ZJXgyeJh;1949,81062 -VrfZAoVL;29536,35131 -WxOGEZeJ;82358,16219 -TbRJxxdN;15551,73106 -jhDQBUhV;21287,73111 -EnvfKaDt;70154,80491 -eylOltUn;50771,1209 -uADigdVv;49867,62398 -XSYmPfts;29369,33568 -xcdznZbz;49813,22809 -aAUIIZel;68444,12698 -jpEopcln;9829,82618 -iLNywBcC;68225,11386 -HxiLjInr;75958,41767 -brpNNLQQ;38095,17876 -QRFDXtUI;61320,11565 -oUafXqNQ;38186,39980 -ZogdluEx;14893,30797 -KgapQQgl;85220,46868 -LfahVCXo;79364,49647 -cQMizpCS;17326,77341 -JbLznsbu;73951,77131 -BbiStDmB;10147,64035 -zKFKeTUs;79455,69887 -quKaSMpV;5664,38652 -cZrdziAA;73184,10734 -TsmvlPOs;78994,2458 -vgQJPAwj;54046,16182 -PicfHxBB;82725,23855 -wBiHznXI;37110,37954 -vVjLjgeF;16265,30737 -IGtkjFUs;17987,83643 -WgTeczXt;79465,67226 -kxRbdKFw;37394,65211 -kpkEnrkV;68720,71294 -LmiiZSCt;14233,39724 -WDLhOMMT;1179,57776 -KBqxtEAw;48629,21011 -BIyyvfOE;86561,87357 -cEwkNoVU;21901,24799 -nEnJHBmg;17646,78508 -FioCWbYq;66334,4343 -CNYcxeYD;72764,28943 -ibhEYlGY;56135,69420 -MsHbdSDk;18820,13477 -vHVHsUbW;51021,24169 -oXchdMYx;48011,27239 -vQqwMsTQ;88605,62702 -rRzKKSCZ;21707,54850 -qXkqAHZg;37119,44324 -UDcQmiqg;47146,37044 -YKenftaA;69430,18072 -IdtIAZJn;23732,66377 -PHcfhfSX;27208,20483 -uDwyYLoL;7860,49991 -EBMeSsWk;29813,38298 -AetzFwaW;60284,80415 -FRglNzbw;66895,88080 -KcrttqeS;64360,44444 -zWMrxPEn;19499,22889 -ZvabScpd;41467,39326 -JlUYjUTB;32926,66064 -qZbDannW;44804,14289 -BnUUgUhj;27703,52314 -yIMvyITV;74249,30995 -xRvqNgdM;14235,7277 -KYlAUINH;82782,47872 -FqJhhQRY;76665,49226 -eRVzdxCo;78892,86144 -XoXAbsmU;45125,70527 -pKdmoTqK;73969,49649 -setdBNTa;23415,16269 -YwUgDkiR;50417,6441 -zfHSXCmS;45210,6697 -bOXZPJjG;48952,20686 -xgjQbgVU;53694,80803 -golxBcIu;56957,78683 -JVRYmHOZ;85747,79030 -GWEVSHCP;6353,65364 -ZhhAYcEA;8375,67445 -zsJUbeKk;89713,83026 -NeXXklRg;85860,86245 -wZPkEhMY;60202,19903 -nouPxerL;50310,78329 -oGRtPwJa;64472,20844 -xSNdNNll;5373,6625 -uLxJakBn;51380,53347 -LrdWFcSJ;11857,42812 -dtnstESF;20989,45616 -UTUYabDq;41490,56120 -VDdifCeg;79380,41446 -cmQovLbE;14910,31998 -JjyoPXZo;14501,17265 -knisMvbI;44208,31859 -MOYRPJKc;23593,64371 -TiKtHjfl;58768,27827 -rhItlEPM;27866,63712 -ZwQTlDag;46709,4237 -VGBEtCfO;40604,19459 -RYyjWRDQ;35141,81642 -CCsPqSHO;36267,6700 -yIfIRjqo;4815,12641 -bLnpkipv;51520,6852 -FISafMBk;59741,84607 -mVsjelcM;44920,23982 -cJTEtpaE;38993,40791 -pGBvTEal;43392,40213 -KzWKaUxE;68938,40928 -cRZHXhPx;61073,54746 -oRdzBfie;5592,2699 -mSeWFDdC;38668,20336 -CMCldHMs;20468,33162 -JsqFGchD;8989,40815 -WfWYtTAZ;14396,27422 -utLWzbet;64700,89607 -lLxrJksW;18889,68298 -owWXWxMC;45875,21259 -kIYUleic;59699,60635 -AenFEfEF;46891,17067 -SSfwOsHA;18848,42106 -Uedbneqa;38879,12060 -ERrCdQrb;72548,35992 -YLMjPYny;2842,28229 -bSjvvNWA;78267,19642 -IOEWXYPu;37681,52187 -GJxnRzwN;19986,25607 -XnoQexTa;68504,73831 -OYJvUeBD;27648,70068 -gYYnsZmT;54429,15261 -ntAetqUJ;40339,9866 -vsnXokyT;82211,23545 -RFXOYxqZ;28058,76604 -EZgcohYj;27974,11368 -KNwPEpub;62234,76897 -uwggdLfI;49374,8445 -JsmEJwxl;64748,65954 -XrKAfVCg;86592,76889 -rCKtKeNM;60895,54416 -nLkDlGbc;11222,52625 -pgsHzoDs;81002,71482 -PXHJDYGJ;43905,17471 -TXQBmOOY;21112,53978 -KepvKIkp;65976,69423 -YWaGoLGE;10881,45948 -NBZYpNpv;39129,16225 -mPfOxYvZ;63001,66447 -zmmLzwfX;52618,60608 -EJWYmNVG;73990,38800 -ItTzQKLs;75727,40907 -lnsaieZa;9849,76738 -hRroXiMW;81562,48332 -HMovTEBL;79103,6914 -HePcKliu;6402,60124 -HQeMlCfs;40643,4427 -KUIoWVmg;68466,9172 -ySPRRXRQ;51927,18572 -EjkYNbvB;65154,80270 -fIOiOFmt;58030,68550 -YyzqMAON;86519,84699 -TRCazsCN;53863,80568 -hFTSAlmr;44396,41741 -jPvpuuGR;55760,13045 -ltIvShxY;33317,82601 -mYqJNTmJ;84572,78954 -yQXzAlcP;20286,21107 -NeRLMvZe;66294,27944 -EgBoQNWV;32510,19383 -kcxUEWuX;52401,12918 -hTtuSAhO;75674,33890 -fQVUMHsT;72839,55732 -imyfNuPi;6587,23312 -mlzqXgKg;5404,37492 -niQnFQbb;74127,42769 -xnBiXRaV;67290,6430 -TmhNfbuI;79234,25136 -ArkYjWYK;62806,55280 -RGWctZgM;39417,63489 -GaaSDnYm;19125,89283 -FteVWxRy;46058,9502 -wfLBZztP;72463,39378 -NVBNyKak;7678,20450 -FMvDRkaS;22733,33686 -gbSCIlPU;64421,6815 -eDHurNKv;39623,82875 -gmDoIZaa;34296,1527 -oVfFYRdb;42036,32325 -EajjpWYR;45921,48349 -BQqnADRe;44182,59127 -BHsgMYAT;52705,17678 -IWeKqJPc;8837,81892 -oLXDnIqF;1214,87575 -VOfdfLGV;83599,6756 -YFqiiYwn;36863,66022 -iktAJNmS;24635,46837 -xdjJpDWh;45348,48064 -LEogTFUO;72721,72022 -fQrevdsi;84530,17258 -jcUFTZSx;32584,29734 -ffAtBsDb;25596,20166 -PVSspOjW;2511,39063 -deShoDxr;65041,57212 -PndexXbc;56547,23900 -ERBXKmeR;40773,33555 -WCzwYQge;6152,87611 -CGbErpDO;32811,29186 -OmXlVQUM;37215,65684 -tLcmWVoz;13125,72478 -lJSwjLRA;45819,88005 -iiktKptf;11016,23992 -OfcXomwo;51442,32753 -SjCbUGXW;32673,57573 -INwGiXNF;38727,82480 -bQobXZMC;80479,75867 -idFDfKED;68616,80942 -OQTWnsat;55363,5945 -poBMOYzZ;6884,85931 -ZlYqgFUN;40862,8368 -OZumjgjU;40463,73443 -zUxITbZW;8677,26870 -ANlqEkeC;25639,52163 -mveGqYmF;37587,6120 -EfWRtUOq;30132,88683 -YWZjMwxY;13659,13149 -MBmHHZaW;65079,44557 -CnnYxOxD;15504,62132 -GVzvuNhX;1193,12265 -GkpOdCrP;70098,81588 -ILaZAchP;38723,89905 -GLFemdYo;82890,81734 -yqsdcwyE;50740,56145 -IPtqiGDI;31754,64421 -VahssnEa;26694,39685 -DMlPKxfB;22298,49309 -qySWRHVC;8391,76722 -YoOObwmu;65752,17553 -uvdTedHb;10549,60288 -gUWTWhOy;26614,82509 -XvKHIPSg;43511,75151 -WEvCcBWL;54912,68858 -MvfHscgn;23949,15979 -UqsEQQNH;20192,18017 -tuESDJYI;41428,22035 -LQSevxTq;58552,12253 -RaProWxj;21932,3869 -kaCxnwuY;17521,86101 -xKRclgSf;36112,66369 -wKjVZriF;24182,42954 -pAkIqmDm;2867,22835 -qjjXlfNe;5612,62637 -TPQEjlis;21475,2671 -rvzGvnBQ;23291,38568 -BhjByRjR;7023,80168 -aTMurdAf;8378,45675 -HFRnfSAb;32297,31091 -eSeqMwHf;30105,46017 -NJAzJJyA;30318,63005 -fcnINsMF;22376,73654 -rhgoBTqs;51991,82839 -hPKYwjpp;54818,20326 -yUEupoDP;74464,60289 -ZrOwYlOg;9742,73591 -wRZNvMhR;40689,86970 -ZBXUGSMP;4127,27709 -ovawArYi;14426,10419 -PwvECBOV;19278,14411 -sciNOFwk;35484,44705 -mJYffZRZ;35080,20471 -MkGmihKX;33267,66321 -mQdZKDUA;74715,74824 -bRCfXhIW;30923,48633 -MwjQFFHd;50448,3790 -NztErWTY;21948,32825 -SddmdBvx;36329,64356 -QvtEepjq;56982,46784 -QWbFRtno;87432,26668 -meuyBatp;30498,72185 -LaXTjqxp;36435,41558 -aHIccfnR;1475,1272 -OGmdPWUg;50383,4518 -UsEanFrN;67262,50681 -IOPlRnZR;86096,26337 -JuJEkwmY;35654,48952 -rHtPCeMr;63744,46057 -yeVtPFmn;23752,43116 -BfASDwdj;72745,15456 -LHckblYo;56604,45611 -spiJNRFJ;41326,66563 -imnjsELG;11958,25256 -RAwiCPMY;27973,18717 -bBnHdLts;9672,42048 -RQeCIJrq;84076,2523 -MvvMGdTW;81273,56482 -MkGuGyhW;24089,82285 -xtSPhTyf;34939,19209 -MjtzbsSI;7457,79702 -QFNbyxSd;20983,86638 -jqqmEtkE;48425,67632 -lSfeslmM;29615,21753 -sBqLnrVN;23364,22722 -VnyYrkUN;55008,89484 -gVwWhJZW;51326,4766 -VbyGuTmn;21812,72419 -qJcUuJbl;67973,27112 -hLTREJIC;56893,88520 -ySGUZqSy;51172,52909 -zNeEnyrT;42459,84036 -azoNCAha;42137,19981 -mQmDnfDm;59230,15420 -dLPSbdzq;58449,89474 -aypraWNp;7071,52491 -IZZJZfGF;23302,40167 -PjVvsuHy;39031,49517 -tvgpAfmM;27422,34652 -gCSbCsgJ;80738,5342 -JYqCqVKr;38443,79291 -pDaaSoPW;36817,31845 -nkVsDfCA;17363,62322 -ljmwFcWQ;4323,20519 -UFvoLdFx;8628,36953 -ANSYXpSb;17763,25160 -erSeXmdN;82653,29886 -IzQtrLKH;27765,51585 -uYrSxZlQ;8023,66492 -jiQFbGyL;19497,59322 -ZNixjtqc;41905,52461 -okqkJFut;78722,69841 -nGtbdCTd;11439,32615 -uuWtxCVX;59062,53024 -VJsddPdW;82261,42793 -EJsymjLP;51084,41198 -JcCtISTV;47995,82547 -JigpPlGn;49520,88984 -GZLTGOnQ;40669,13580 -EnQYGsEw;58065,24694 -PLkedsbW;3833,23089 -mmtQjFQn;49140,49413 -ZlbmNQcb;29293,3533 -SlgnuFdv;48763,1129 -TrFnCsdD;24557,18644 -qWUvrejf;14157,51667 -YFLAOREK;3322,20834 -UOTqxKwf;29905,48876 -YDblDVOc;15028,58046 -TWWZlavX;63856,46277 -DeKOGdHD;41981,9553 -FLtITUUo;17413,49941 -ELWCCGNP;46522,80478 -pJfPooin;86781,47458 -CfVbMSMk;81338,67901 -RrSuDGsi;65580,2214 -hCYMpIrR;80742,2608 -ceAfMXco;37043,6927 -VKQuwWOF;35820,83149 -odMkBdWy;31897,67763 -JMsoTJUr;58018,8655 -BqAHiERA;78277,31785 -nQpsfLyG;2836,85080 -oUMWtsFQ;8834,18772 -hFICLpPn;14830,29837 -hcVjsurw;19674,29045 -OWWeqFzv;66005,62602 -AwZgzMeS;15878,56891 -nsLMYnCG;55307,32016 -QGCvhObD;28594,71920 -ZWneTcZZ;40496,27921 -vkmiyeXr;33074,32868 -ziBhkaRK;22730,45332 -LEyAfeHp;47256,30114 -InVrUPqS;36221,81816 -bsLQtpOB;30504,30271 -hFJJiDTQ;53096,68012 -RnTaqBrF;25602,57768 -OfvAmfWq;57222,57348 -XToxMhLR;20370,24387 -ihQIbyRv;26201,76799 -ZBGuxTNV;48380,62888 -jNvlMXfu;40721,57393 -ceOiJpNX;49945,78250 -wiTwCfdS;53303,70069 -KmmrfXfa;12789,58179 -BTxekuJB;66870,11729 -ofXTopVV;79941,52399 -YzQiYWeA;53889,51681 -wfCdxAzM;22338,60097 -HbWeiehE;66585,84529 -NXuuCwHI;60915,4317 -yxjlbkxD;73282,58599 -YXiUTSoQ;22411,50785 -kkhIsVDw;5674,89902 -EQHGbuiX;78995,81494 -aEMuwrJJ;21824,28033 -XbmqzKOt;58920,32495 -iPDPcEBO;55416,24803 -OgQLWycs;23439,64398 -zPGtIsgR;5133,33340 -HfjgUMNt;80611,22115 -hROdXnqY;37400,28377 -vMxCIKLn;51378,23403 -uDPAwWyt;53288,20134 -EnQABEVu;6076,65838 -LhSIKoVL;75317,70943 -MIyVAMbX;20984,17925 -FEHiMKrL;59593,51530 -pMokEmGi;71856,19582 -iiDdelxq;23646,77595 -yfCtwFQL;18348,18841 -dMBNiDSk;17081,53375 -KvAWWHfJ;76627,83963 -avasLQTD;68261,31405 -oFCwEUbf;20935,30816 -pVgrJXwt;86268,17358 -YDlyoMxa;17925,32240 -CiihQviH;24688,45881 -AdXgEwfI;73015,25947 -guWcOhvX;28885,57233 -yxtYspCH;6637,26749 -dmfmHdkd;19278,58731 -nxyyPenf;65307,73622 -RjGqGYUt;17971,34417 -RPbyJAfO;72772,42596 -EpcyaonA;41317,15850 -dFFizlKq;71351,15869 -DfDCWRkA;50543,75751 -tKspVuNc;45091,75446 -FydiJJuO;89782,74292 -aNJDLKAw;26877,84783 -kWFbbwYO;13727,11227 -JmDEXJtA;82686,1477 -RvxbxDEX;17049,56255 -cQLLfuEj;43109,48357 -saodyjIl;83366,87188 -WjfFkhPS;18818,59146 -rowMMvRl;37337,19929 -PTWVMxnd;40492,48165 -VJbWwFiQ;83045,31874 -KPWcQdnt;84477,22059 -jPIdnPqC;44126,44611 -jmxuBHPl;54261,75431 -xwxRaxXh;12810,51185 -txAdzQyg;36304,87722 -KiuiNyya;57161,14449 -KCAIzuDm;77381,83874 -eCokoQks;67235,33366 -QNCSsjOq;70505,42724 -gWBbdnbn;60622,75938 -jMhXAKuP;43971,67576 -stZfNZeC;64767,9135 -lxsBjngr;42030,46563 -CUZwMEHo;26554,48537 -eDTnqfzP;19088,74129 -XOOfkeUP;38143,10487 -EZdSNsxS;59517,13466 -eJbsxmJR;8246,29550 -wXUxwDmD;31051,69617 -HQHqiicV;64353,16114 -FZBCXGiF;7679,21355 -DdxRIEju;76971,9004 -nGtCUxHg;19189,33647 -skPKjphl;9249,29631 -aveTTdqK;21602,89827 -bmJvdaQa;83269,37922 -AQChFJXW;21019,83080 -DBUaaKKN;14957,77437 -hQQXDVsd;70225,86360 -wPnJYPKF;87715,32394 -nkBxweDS;46778,4937 -xvjwsTzM;70501,25285 -ORLSzblP;19128,78732 -mMXGjszV;28802,55131 -qYuofWVW;1572,22760 -DSKWiiYb;5611,81501 -fczpGJMQ;19756,43501 -HqrbFpQp;62236,84961 -sWuygWzc;33845,36662 -OGCbneUw;68250,70647 -rTNxBBCm;62234,55486 -FFReqqfX;12447,2876 -sjRrWpOX;71158,11041 -dDitfPsh;21950,47900 -gyVgSlUx;4414,21306 -nLFjShph;25950,65550 -NOEWhwpe;42770,35930 -FrlDxewV;68599,20492 -aCnsbylD;58658,88663 -IQRLNABG;40631,79960 -jrGjWVor;6295,88230 -LnFQSzKZ;77234,51744 -sLWfsUzM;87929,47392 -iAKkdaJf;41484,38469 -LoumNqCv;10365,82700 -sYvQyKgw;27549,23475 -nrxBsBGz;81364,6427 -yutFQBrm;23006,53046 -jJnJwaTD;23173,50242 -AoofnqDF;46825,83257 -hIFrdCFY;71820,6295 -zUtlUQHz;15173,48669 -fyMvfxan;56440,83331 -QhoLDSYe;35972,15742 -ZJZxDlpK;7573,63891 -FESNpeBm;70721,17028 -zRUfllBr;28109,30246 -poxjKlgW;22895,31247 -TsqEWGMV;4083,44310 -LftvMcSl;83745,29551 -sicsYsdu;7053,47835 -RWQdFbxC;75995,71932 -vCfDDbUN;37986,77176 -LIvhrMNK;8459,47505 -PfYnJtoQ;73200,88769 -eLThcNPs;15426,71458 -JqXPzSFw;84924,53391 -ARpsvFrI;12679,63814 -eErHuTwF;23346,11862 -OUtCzPHc;53365,80483 -IyKxBhHu;81138,15546 -gHWlGaNA;42198,71378 -buOpWdne;79932,30264 -dXuauLlx;79151,19205 -EpCyPZhA;30310,74482 -MCmlLCLd;52801,61918 -kpXSLzVZ;6196,25239 -lLLGeRqe;12654,31409 -xUIQdEiE;74688,57252 -hwFFKmsQ;43029,5370 -oxDWQUxD;53205,11417 -RHNEmIDH;15283,79209 -offGpcTp;79858,7982 -wdcXIWFH;13318,18265 -cPddLnOX;27323,25261 -zbhduniX;17011,77149 -nkKAgLNx;65026,6704 -TfyxACnz;86591,32692 -FXtqFLHY;56419,26345 -mOWNuMQu;72360,58155 -ygJqRebO;56684,89884 -hpHQEoPx;65586,11630 -RiyKcvSL;22511,38535 -LQiZwoCW;1187,64105 -eWbjiyKI;78486,40115 -PuXLBoVi;76047,46395 -KbGvtPew;82854,78153 -YsJsdxHo;34058,47917 -LsjcEYvv;36515,45157 -idSEAjJu;17125,6062 -LuoHBfbj;46060,76801 -qqYcvQkP;24886,34077 -uNfWrKRv;4739,4810 -KemwMgpj;38232,69989 -tFURABtW;41277,86048 -iLRhOnws;19415,59221 -PjIldYgf;14376,60250 -TMIEmTDD;38470,78274 -EdqHOHpw;38354,62113 -qKwAxgCP;5262,28006 -UiLkjyhi;70751,8294 -OIjpWPkn;65362,32289 -OyoynopS;38586,16825 -JpoOmESE;84269,28693 -nlczutCP;65991,86800 -kOpQdNlT;40599,11533 -nRYPjNVn;83247,5523 -kpNtqKBh;85325,15716 -zMwNKNXf;16685,58857 -phVuODuj;21837,30011 -zzMpFaEa;11632,82125 -KYDWgiSG;52851,73023 -BhwVIney;12272,46661 -sctWJUtD;15506,20188 -fRdmhEre;60670,2700 -KOoxXeLG;58028,70786 -YVgCvpaV;42574,12652 -mQRdYRBz;79478,34713 -jpmpoeHv;52995,45387 -UpOJOAYz;89923,83246 -RfoAbEaQ;5225,41822 -McRJvFkb;17200,60223 -ljJhJtOg;85224,13286 -RWRabjRq;16181,74232 -zleZOUpB;24486,81858 -VMZnlXOp;64138,34987 -dfWhMBXY;17887,69492 -awKeHqjO;67570,61651 -HrhCzEOJ;31476,69692 -eNhXmoYL;27002,10927 -dqFUdOuZ;67006,75667 -DMBxEzLk;81238,42854 -ehfunJfa;85470,39926 -mbIACGpA;27606,12629 -FHErjMpg;64836,39854 -ZhntDeZu;52992,40225 -koARDWPq;30608,23026 -aFMtgNzE;8451,11621 -TFoMZWyc;37164,25937 -fvUAjJQj;60840,22594 -TDCGweGT;26138,14174 -zQqreTGq;51853,67114 -qfqVmlNB;80540,57284 -CZuWWEjH;57179,18141 -uTbGTsxz;76797,71731 -KJzxvkBj;43286,71301 -sejBEefo;73945,13937 -OdHnkofW;57772,62220 -zpFpXdOy;88380,48654 -CsSpLDeO;10768,39067 -GirbMusX;80792,66493 -hZVebCFc;53326,79255 -MimMJPIy;60891,2668 -LCpMdRxp;3899,16671 -ZEOoLkdp;73320,84832 -CcOzTpJO;78570,26747 -aywsTeOd;45837,24778 -ezIEfjOk;62418,42909 -zjdirHqX;72639,81824 -fmTpbStQ;52747,80620 -ZwCpVEAG;5981,56163 -wkFdKoNQ;26921,52646 -qLvVgRBo;19795,31158 -dOFsfxuZ;29133,51178 -TXQeYQFr;62070,17647 -TCiKfgGW;3668,42324 -HCDAtYlb;38671,35286 -fjWLQPRH;72959,30461 -CLvqNbXy;41395,50599 -wGmiaAYH;28545,38615 -OgVkCXdJ;55229,87668 -nxjaqfcq;87962,38201 -MiBTPZSl;60766,38200 -HGHkbuIT;61976,17265 -VTeHGxDx;35457,82503 -qShYDJHA;5840,20255 -JkVLdQMG;39646,10290 -uSrXsiCT;20501,54161 -VzggfhoG;62704,48304 -ESqcLPvC;37312,1304 -ScyROAls;26714,31112 -IflTTFMm;53636,44408 -UIVpkSPI;41767,84306 -tqydxPIN;89031,72612 -XotVqxnz;10588,41168 -jofVMyEi;41254,51737 -WGzhmnPr;29833,34900 -lHaBKNYZ;5381,52391 -RmTxghnf;86854,23250 -iBtVFiFZ;37643,87977 -mciXTLov;38579,5578 -MSbIYyqi;65303,6398 -gOQXiuef;19239,20948 -FswclgsZ;42493,35535 -mKnSxRdF;22469,31412 -EZskyDsS;30552,65329 -qfdlcERq;72593,37644 -SqiiKnTj;34601,55381 -FCEnqVqp;85437,41331 -INhwXqtT;56257,69849 -qYBMpBJN;62284,18518 -nXSoHWky;38520,45981 -XjstrzrR;32921,26066 -GgNVhRzF;13630,29304 -gfnnzEyA;74985,18116 -WpvnnhSS;71966,84133 -GvtjEYnG;51878,16128 -hiBUHBoe;64356,38882 -uFHTzRvE;76911,49488 -yYxkunxo;20664,29044 -pLXPZfHV;86521,52197 -EilSsSFk;84632,19822 -wUNkNxon;32322,28394 -spDNQUUZ;20606,3276 -jDmVZldU;37995,47273 -hTuXUqPM;3931,5749 -rapBCJpc;75065,15491 -acvmgKda;9895,55158 -BOsMBzEl;25080,83549 -gSlJhOSi;80030,12118 -HgnVDTbd;70084,37459 -nxchTNxA;85707,31909 -plhWQQOd;52536,13099 -CAQcnzbV;10399,24611 -IoVxvTTt;40031,54827 -fQGzJMwr;2561,13600 -opsCvaoY;10871,27197 -stnnzlyk;20155,75515 -ODVhntcc;63795,52579 -fPOKjnaG;42449,44018 -UgXzjVas;29198,55364 -uHnHqOVB;85917,61432 -GECDqKnX;88618,82517 -KSdQGQPM;75127,49389 -mgCtgYWp;32291,22293 -uCftBpuV;46670,85238 -DASmoVjQ;35840,87082 -mSryaeMP;22938,80485 -JfcNhgCj;18849,39476 -ZPknPjTC;81604,25869 -zYjqIUYz;81220,33473 -DDXivtfr;62545,13643 -yrlkknTI;27466,18878 -qmhLTsHn;8060,69503 -VAcPXOYi;72802,35482 -AFprKLoa;22649,7458 -hOULQwMA;41928,66500 -GqrxjjLY;8719,5969 -xsNMbikg;4997,5458 -AfSLAXzf;52650,73227 -wCQXcKdF;42882,5777 -VmQqVOSR;15601,33060 -TMVlvdxw;58033,47227 -UZKuJwDm;32268,16309 -IPewMfHF;53412,16112 -GyiMaFLl;84354,39442 -otzWmcmu;14788,70781 -xiFxYYXH;16856,87800 -RYPsOumk;40908,8770 -AFLZkAEi;65413,68475 -MqDxGwuX;22789,35607 -oSqkwxem;19306,83948 -LxvezILC;71679,3688 -xrVkMaXI;42290,53607 -YxOtouBg;77667,42478 -uaEQNMYd;26240,38219 -SBlYpWmr;79706,71762 -daLVOyJX;18996,70949 -ZldoyZsP;75688,28188 -OslrrZrk;30339,83589 -oywFlGYE;52943,71124 -EVLiZdlp;60961,47826 -MdXMWxYu;53324,68236 -MbVxZukH;29384,78484 -fzUgneUc;85481,5882 -taqxIKyR;43770,67244 -fmOblBOA;15811,67715 -NMcueIHz;60404,19688 -pzlZvXnX;1070,65726 -WuVgSkzq;34817,61189 -qNzNOTqT;45411,57044 -yZOiTDUv;18799,36385 -iTXzQpDR;30241,60265 -fhrngiRk;60952,3714 -hQUUiaSF;74992,48325 -CslcOiBa;40581,65547 -cXtPXgyp;34756,54201 -dKKWcfxT;80230,17292 -FFSGnYve;35670,80901 -gDmamCEj;65859,25930 -NBFoZKOv;67526,1308 -QBRjLEcF;79859,81659 -OVEzlRJi;62432,28217 -pgdCjMrb;38277,41810 -QOiZKnrD;56847,39231 -tCbtlula;79393,46446 -aXTJuukI;16834,31822 -JkTZbYWo;53718,34348 -irNrXxew;70835,14376 -tGLGuCXU;39744,61663 -xqOYjPBQ;68695,27565 -HzOClpLl;65244,25191 -HUVWYQZt;86199,54179 -eznIkfLm;78165,45694 -lQGfeZyx;61565,69917 -FISEojGg;4584,60441 -PonzAXiD;20482,67359 -RGJJcctO;5105,40581 -FWyLJQFs;42389,89520 -GUkfJSfr;86550,59050 -ZvoUCAPk;71409,67884 -hiLjtkAj;59959,17912 -plFROYWd;50808,75804 -inUoNYww;83588,52321 -UEARrqcq;89893,9018 -PATpHBUG;58071,42814 -sdXtMNMz;44188,13857 -IhdSueqS;61034,67164 -lpyPGYwM;10255,6297 -mPtlTdQl;16026,70589 -FMAGyVZL;48945,9941 -wEjoxhPp;64956,66536 -lUWvHceV;48692,86448 -seQhlLRH;47169,15114 -zlUfitVb;20793,34941 -IkNNOtcp;47535,13613 -XRHpIJZe;4054,52027 -weqjxqtJ;51752,61355 -nEXkgviS;30335,13032 -qonsdzfz;11690,27574 -wKHinULk;54909,1124 -xxXKPiQg;41934,76463 -wACjItdP;69017,83127 -zkfHbsNt;48891,8357 -FLcifWGa;30352,5779 -XNrqfstY;25252,1895 -vbLgrmYu;5472,75246 -aLAgHjyn;31492,68175 -RHIMKWvK;47925,83484 -tzkrciiF;57868,53806 -tKcbxXbB;73037,29021 -AEgehQyZ;14121,62533 -GzWAnndn;47381,16635 -mtXKpACb;73825,10348 -ydlCiYaC;34743,33777 -psIpbLyk;34062,54558 -tlKtnMtu;56963,82736 -OLZASOfZ;54932,55796 -xiqKJJNo;40195,19026 -TZhJOGep;7335,72735 -gxecasxU;47841,32528 -YRVygvUg;17641,35768 -CenPebQN;19911,77665 -pZjaBcqS;81970,4000 -ZLngKeVH;4534,7455 -jnYdpodg;14618,57203 -ypYvJccT;44865,9490 -KvSSrnMe;46780,65866 -fQFYauJL;29885,84074 -OwWLpqhH;24422,39959 -rbFZiEIn;85406,89360 -cFQOBhbM;21616,75049 -mKwwfaOJ;4700,24863 -xAFuCkGg;47205,58277 -NyVkeTTb;88455,79783 -LQZOdIcx;68547,2243 -wTooqSjz;67002,78095 -fNSfBACB;25407,30943 -VrbKJmwB;86702,88678 -xcgsmAJV;11490,10940 -QQpITtVo;57794,88501 -QggPOtHD;83874,63859 -yNfzsiBh;60169,28172 -jylSODaA;9608,50082 -vAbBHZNB;5169,39299 -PuwPVmHh;18108,11251 -zwZvpNOY;87217,62206 -JicQcxiP;28676,45763 -akVGPBwZ;29956,30452 -cYFkmxsL;51345,59744 -aqqQcfdj;4197,5184 -LphrtlNL;21446,81413 -qhExOktd;39395,75185 -oxjYegmW;50035,66719 -AuuRbfIP;40285,83471 -IpgVXyDX;85201,67449 -TzVTBsZH;49319,8184 -GfcUtQNf;40835,30637 -pIBUvilU;42859,87769 -STiPYeoh;87658,69346 -PCzMDdsF;87816,73846 -tEPbwueT;76945,15784 -wwEQogoq;14841,26331 -SKJQktZf;87565,28393 -qZNqbKjq;76935,43454 -QyztfgxY;68524,85655 -ozzxHKlw;19901,67097 -UNHoaFOZ;10590,78924 -QZTquPQS;32711,45390 -vjPRiTIH;3017,33112 -GlnLuVvF;47537,30493 -xySsEzmz;8870,75042 -ybCTaTyN;11219,30413 -auAeHLGU;41575,38683 -XIHaOKaB;58871,12407 -FyLFFaTR;74479,49681 -UitglIJa;35634,19161 -OqUwCMTC;22366,48472 -mQzjCaCT;26556,48144 -RNDoDLBN;22276,64826 -ODxOPshu;6539,51435 -EPfLTVOk;57414,85134 -uvBWDkdH;5057,86515 -RJaUpoDc;60470,21461 -pvVyezIA;42430,32633 -rOHTDqoU;56355,86746 -oniWvplE;24950,79809 -ITCbZahG;17301,53121 -OcyrUbpk;9944,24639 -ueKpXPOh;50207,56452 -dppmNkbT;87053,6208 -bYQQYaSw;23448,31050 -YKnskOOl;63754,10292 -QlakaiWq;35798,79887 -FdMmsqyT;7068,30610 -sSujcWzW;11081,79138 -NBHxKTBt;55275,39615 -lvzVjZhz;29047,66612 -aDptJZEt;11566,9558 -spAHoAgZ;41435,13804 -JaxXSEMr;44792,43618 -JWAhhhJr;32464,78118 -obdSecPQ;37095,19961 -wkQhsamz;45770,32288 -WbZBioyi;64000,53928 -mQFisHuQ;28091,6259 -JQxpnhKI;17687,82323 -AjGjKLQH;6737,82769 -TuTwbyPJ;75739,12053 -DkjMTIqi;88023,44891 -AwebUhxf;55255,20785 -hDrBQxDq;72517,68207 -XNsLUeYf;62143,39152 -CHpKyjYD;42199,38955 -ezTKOmRr;25053,81300 -MBXgjLtr;35371,73465 -rosvdqFq;40463,85294 -rCMyUUIo;57037,88084 -sROOoKxX;29557,3841 -DjMCCWrD;30739,76210 -RsSMXWBm;6177,26508 -hexIAJQi;31975,54405 -mwECDtUj;81344,18009 -BUOIpXxY;4789,67250 -tWinoXvB;63823,42959 -CuCIEkGa;2802,16032 -jCfjoLQu;28682,75264 -PeDsWfXa;65457,31211 -RJPGEcQr;25534,79162 -OQwsEKzp;5580,79733 -QotTdiTp;59077,50791 -YmBpOYPC;35970,70715 -TJhjUcmy;48600,39700 -KSuimZyU;77100,50163 -avvMlJMb;39410,22542 -VMCrOgmR;33449,10049 -YgzhXOug;66208,1732 -FNLCbtJT;10018,63222 -mgQguGkN;49136,3471 -dDqtyuUd;26616,25663 -qfhDuxvy;11813,45445 -qQBbWmoa;26858,85859 -XJGFhHpZ;16933,5830 -ULlcOXji;79461,69877 -vVnBwUhM;32517,40471 -PTlYGLTr;32766,26277 -UqAlCXGi;47218,82337 -jhuWFXmb;82563,11121 -IkJAOWoV;14778,17963 -kiZemxDr;14938,82097 -bDbujyDR;58562,5079 -QZXCZQLl;52644,13399 -qniTzCiD;79856,72689 -ABGmNVUB;79438,73441 -nMlxdXQP;2656,83355 -HkfOqIQa;52133,44564 -pKqjeOTy;62702,85851 -qVgYaeCv;30360,18323 -mJHnxLyz;8975,38216 -aCCHeAzp;7936,65746 -zzvbaPTK;45898,76289 -wmQRYBfW;79658,68863 -XKofIbkw;76517,42838 -rVzZzgcf;15618,28358 -LKNVNZnf;34737,10170 -CRjpCYvl;37299,56498 -XqJxiemW;26774,73882 -efwESGla;83422,32613 -XCueUZtZ;68257,55373 -fhpsihyp;19084,69188 -kUfwVptu;12817,77718 -aJyojkQL;14678,87837 -kZLTVQjq;38245,31469 -HAcOQmgw;49459,67035 -CrSWTbPP;41072,77830 -uWbEjwgi;77462,34867 -BGDCjwlw;35732,8130 -ughlmtwe;23632,47142 -SxqNBWAM;15533,56266 -OUcOSWkL;17467,21651 -arUxdUUo;40408,44335 -VefWERry;8660,82014 -kplrWpTg;33365,19385 -fQSfgbdu;74331,81582 -pJTWAibH;10001,32916 -CobFqOKg;25550,25714 -yRTJmnuI;12170,45919 -kwPmFlhp;59494,72766 -etvbRknp;8667,71854 -BISwvRMG;64616,8925 -FbbNjpST;62654,34323 -qHCaswfD;81694,48532 -OqdKcndU;3202,61075 -UMlKQyWM;45154,71287 -DvdqiaRW;53874,28000 -wfxcLSKy;71690,48569 -aBPdpcEk;2848,37100 -JPxtDSkE;38058,86289 -PlVHPhFv;27392,5259 -mKzryeap;65333,27795 -TcLjOmWu;31622,52023 -DSQUdTZq;34382,89831 -BMlhHosp;8730,79347 -MGDDXEky;67513,57448 -yxHtyjXw;60420,83131 -OHiniZSV;3046,5045 -hXyvoqXB;28124,60675 -hqgXbszP;63587,71786 -ZQkJQkvq;25529,28919 -vftBSfEQ;39683,68685 -byTZAOIb;19334,44507 -tXAcHHPa;51064,76804 -cUmmNGkE;13792,85742 -WOuoLFsD;26452,21075 -AJuCrPCL;48071,69946 -STyRrKHD;71575,48350 -rlaUKJQz;59876,11554 -HJmbQhki;30002,48927 -hyJPnFXM;76119,14709 -ZldRZJWI;4263,51536 -cljftAuG;76147,88072 -ueDejGtk;4124,22559 -KKBJYOVQ;46372,55946 -mvtsZmGL;45008,25134 -wlXHoeEW;3752,72215 -jqqzEZbl;36871,63015 -cLlZAoTQ;81839,3186 -jlCHAyxA;12967,32179 -ZDRoWzrf;25711,32105 -LOWViZBu;82601,23500 -NaihZcYU;77194,43065 -FichkpaK;86369,86186 -HfOqmWCb;35529,20385 -gfrEcVot;43399,7838 -MQcHSCkW;30862,23785 -HkgGZkjx;89976,66579 -RhZAiogf;74358,85414 -QclhXZaV;76385,75410 -BAjGZAoJ;23952,83656 -cmJFTBHO;86006,82877 -zgEHFgRT;12608,84645 -WmwDVBvs;24121,82681 -mSUcMiUI;57922,20877 -bavRZiNa;55176,63094 -pNNCGZtH;89063,12696 -WipkxtlB;2999,11181 -noWGUiQT;23624,28599 -yGoACHzR;3192,77877 -eOlGcmRF;86063,60329 -xvDOAKUO;59520,4585 -BkwZrQil;16860,59134 -naDzBiSk;15992,22990 -fgCBtquB;8060,41136 -HEoekdwU;77176,9023 -ZXObvHzd;19971,35302 -fBUEfRcP;35277,68991 -UYotmMCI;70469,71338 -udWaAjHf;78035,16057 -KcCbbElx;82855,69099 -IOvxgViV;2053,69221 -qMQfGQlu;70585,80436 -jHlTCQsK;8171,55512 -kCleKklc;60184,89729 -vpgNjIJj;52583,47208 -soiIXjzH;79851,88569 -owzYFCpn;35101,83489 -WbwlsdOk;27506,22420 -eeBoUxAz;86311,34590 -BeGZQkGo;70673,18035 -gTFsEZTb;56503,85895 -uhSClNol;58568,27668 -NPGysdUv;36586,64746 -qsxbqVIy;32450,17202 -NBKqkMWD;62772,16731 -majnJlsG;27478,16096 -xbSfqIPe;13708,56208 -SGYJRrNd;36763,30632 -yaYBMxYh;42301,17761 -HYGOfGTC;6752,11295 -rtcalUMy;21452,35079 -MtMTneLZ;15459,58539 -duXirBYh;80666,48709 -uxbPoqfO;55272,13690 -cPsjOkcx;1585,67919 -pDnTRDod;70924,15473 -GqLuEGMM;50491,16906 -dpGqMCnz;19618,22714 -itaxQmaQ;75078,41198 -cqAOkTJQ;21603,69518 -nKmIKhNA;51317,11991 -DWewwRdW;58870,48498 -UHxyZaSM;44772,3965 -gxmWEdKQ;10244,77700 -iMpqVhQr;36512,26296 -xsVsjcNU;45282,79556 -ZwbVLUyz;23802,68823 -gOANJmBd;55277,85570 -VlEJIZbj;79432,56003 -vJnSrNSw;9900,65954 -KYxEPEYf;85179,60528 -BQZjIFph;61674,20078 -hVHPpWhv;88480,26003 -edSsWixH;10595,28660 -MceGwlKG;53138,11335 -IxLYdMOz;15367,60211 -uTCXSdCh;34460,65588 -eBFnBVKn;53265,57198 -AiiGOvCd;79291,21769 -AqWKLCee;80779,12378 -xEfsNeXx;26297,29379 -hPSDgRZr;58084,69205 -dcKpjYDo;13482,34443 -VreYMwfx;6427,36417 -eKiayBJn;28327,42653 -jBHzkWxi;78148,11567 -GnRdcYAs;69052,6328 -GQEcFdeU;71085,64352 -kXBLHWFk;88342,72341 -TihKPlwT;37724,21505 -WIrBaSyy;58762,23124 -qHPaKebR;70075,74037 -tArcFKTf;50560,64005 -iypuXDOu;7694,82940 -RYgogfKe;43403,67730 -xHGHSbOx;44846,30284 -WjpFdCUF;83064,41194 -uAWNHpRs;60323,87083 -DXfKpbBV;3452,30160 -gPWwmBMT;15704,13715 -vplHziLk;87327,15092 -FHwACirZ;45466,32252 -BPYoiyDY;18395,68000 -KOgzWbXe;2804,61318 -TiueSHus;53327,4484 -CmLckfGA;29614,80024 -jTODhgrh;77859,5192 -FuWTKjza;54722,75136 -tHxkFfzt;58357,88628 -vnQnIxuM;4775,86998 -qcfIZPOL;82872,86937 -TZdoZPAj;29686,81477 -RvPmtDJd;86435,49744 -sFRkdqJf;9008,31575 -tgEVNavX;30933,19339 -fRLwATcT;29051,53649 -IiybNxyL;5964,77048 -iCllMxUk;8224,20702 -bhynDYJn;7001,3849 -PgRexaWs;59007,27500 -MNMCuanh;15278,24688 -eScRnfaI;4258,63234 -JSJYDwNW;60525,52793 -MdtzGVVZ;44864,21705 -kSnUOTKi;29736,13309 -asMNFiHQ;38467,14346 -zBXhrtbM;1336,75506 -nfQSoRkb;24811,50946 -xBglrapJ;12464,22676 -PXQzeIEF;86602,38274 -IatGujay;21209,58094 -cOZDhscj;49552,89545 -cOfMzRrz;24184,54885 -KSzRNqxQ;58786,63612 -arKlyQxD;30347,84157 -wfBgBuZC;79947,58129 -ekABJtLE;41065,34999 -dillXore;64877,36686 -VlUBMKWc;70614,9285 -rrZLSGEY;3604,27477 -WOQwfOHJ;26094,7199 -YJHPlgwl;4217,85370 -blLfYMiF;23771,15996 -tCaQyAvH;47829,42836 -UuTvYrpC;13916,5561 -dONbCUCV;38685,86102 -kdNUTAHb;43477,71321 -gGvbEjfM;48910,41583 -ofwgssjY;4594,32302 -zvZxMdrG;5241,79653 -sTtMZfcH;66037,65934 -NMHZIXcN;49788,37712 -RSghcAbw;87975,74127 -PXFgRtCN;80091,61178 -LtUMAMLQ;62284,23465 -dHTipdQQ;80734,62207 -lZmLzkWW;31777,3704 -qMdTbpJw;57135,87502 -QCJfwyrj;24961,58993 -QyieIFXj;54615,78782 -aGZrqVBy;75644,50715 -mXMgvyjl;7886,85555 -NIMHZbvJ;44469,79130 -yQWBCPEq;45257,68477 -LkIuhXDK;57641,13983 -Qfqxfeul;73426,41310 -RHORzpgV;26721,45928 -xxrXkTJQ;70112,31821 -EMLqAfyg;56497,61850 -qiRYrNET;8402,54972 -bEnhSLAq;12063,37907 -BOCwokvR;71404,37787 -GiMUhgcb;35071,76464 -QrZrTCYa;46846,76936 -oDrbAOtf;72867,12553 -UvEQgrPn;57160,57766 -hYgBqbmN;54297,58390 -XtXWyzFr;79527,30032 -xZkQIVXY;59625,45820 -mEjZTOzF;85203,85929 -zdBhiAUM;82737,52398 -iVVxtdjb;57039,75639 -YuliQSUD;73554,28955 -XlJOmSji;28844,82271 -pmlusBCM;6446,65672 -QPTyXkoA;51770,71148 -RUIUKxRy;36045,72158 -KbJCTfyg;12509,14878 -BPGzzDQb;47050,59168 -icSJatMo;64472,68152 -ymYfHLYs;80575,75763 -pGvITLIu;79916,20590 -YeIurAXT;76243,84942 -kSwFtfDT;42342,73993 -tCrVObTh;28226,19380 -XSJftCmd;80017,61008 -bYFGqVVB;64941,82458 -JtZjlPqs;72175,53460 -vnMljCYj;80682,4492 -sPaetFyh;20462,42867 -mJkYHQWl;59732,4272 -AQCVMGvO;25223,8073 -RWoMOOCf;18325,28139 -XnozvVsl;70178,64184 -GucZqOpS;56180,62556 -LUyFCXpc;67406,4395 -sMVnsgoy;13480,64495 -RcsmaDrg;51968,59745 -nRVvasdg;67433,41752 -afZvbvrG;88922,1454 -fpyNnGZx;33385,53608 -ZCVLRTeg;87314,22601 -kOdtZUbO;55611,62266 -MwiIXZGl;84232,58204 -RpOhABIi;70916,15781 -IQbLbnRM;6553,1091 -qqNIvKtR;13179,81543 -dtEqQhWG;48157,8551 -KNYFTXgH;23168,16116 -AqriiULg;19445,47246 -NGFXRGgc;34241,15259 -jtdRfAwj;64198,51679 -zCcOfWCm;84417,71551 -IpWrSpTs;27322,33210 -AvOzZMID;9541,82686 -UMANBxXF;42030,40262 -sMnIeXLg;49586,41593 -jzcYLVIA;27953,24713 -gJdAPsKC;22920,77123 -qSQOMHhd;62573,74808 -jixRjTHQ;17471,38003 -dIMHjabt;61230,79633 -URWoCvWC;60683,73680 -wGPtLbKn;80068,46835 -VWnvLoHN;53359,24523 -egmbXtpU;6706,34126 -cgLKTQHQ;76481,40648 -LGSQYFiR;84700,41901 -suZlrlFk;2139,15473 -KDmlKGXy;84329,32439 -VgJwwSwN;12113,49070 -xqwEzAtj;30105,74330 -ddljhTGF;24804,81214 -zBmnwKeH;80272,78998 -QUIpMBxo;77331,73262 -vgiefjhK;68450,7899 -QnLCRMKL;63277,46503 -ZUGSfjeK;52046,74393 -CDfUqQpU;45865,52554 -qYVEWXKS;63091,7151 -WXeRJOPQ;75899,29262 -CydCDCUp;1250,88952 -nuOJZhBv;63899,58582 -ZaOpxbyH;11110,7353 -RABqdkMs;11471,35248 -dBFlRLXm;52510,71416 -KGIbALkv;9502,80304 -UfAlEKlI;31554,58240 -LnHgQwmC;18496,20945 -wDZrWunq;49823,68369 -FryTaRVu;5233,86527 -vWJsleEX;19209,55852 -RebZawil;79897,45341 -xWmUjouw;11418,76139 -yxlFiwzC;48317,84304 -CUmisMlT;61091,78906 -TQLcYlDh;13133,24470 -wTHFFpIj;13589,20595 -ppqsYjVo;20768,28708 -rGVQHNZB;76313,10389 -MLgEDcwj;56100,86643 -aEFyEnlq;57410,32584 -mBpLrgTi;46079,12662 -kMlPEFgT;83257,43443 -NUzedGiS;83896,51014 -eTJKccVD;87051,35636 -LWOoiPhu;60966,53306 -iJdYaOgB;69825,50830 -osgHzVPl;21056,29488 -dwZaTIJb;11868,84572 -fUUjAsXn;89288,33219 -kdZrJPaW;29487,14326 -yLXfvdxQ;68595,41540 -yUEwjHNf;89880,10266 -gbLCjUiX;82978,25296 -xXXhTEqb;22433,67467 -GzTjLLru;21940,55186 -oIXwERjE;32230,78992 -TTCbvpOZ;57289,39067 -CNtVKOBV;83276,83179 -whcFlxSY;24565,19130 -RsTOWhbQ;5423,49806 -mTDUOYMs;28219,88407 -DbXZhvcf;42247,82376 -WvxsioDq;17308,45656 -JfnBKkFU;23142,73864 -CIBOOkLv;13549,10841 -ZvyAmHHZ;75875,14176 -wmHVJibv;2233,86401 -MCfPyrXd;71194,31195 -HnNJpRHB;36862,36887 -EIrNaVNZ;3052,58146 -nUNHgJwP;17275,28604 -kAINMBrP;50387,6963 -WGucQsUM;2463,22964 -lzaGYdHs;62516,43630 -ixNJyTth;20563,44338 -OPHsToOX;16155,4393 -OuGDZqMw;41599,82645 -aEfwlPKV;49334,49954 -oXbUFIBv;47456,82624 -GdKpqKDk;57917,23370 -sZTQTVUy;51650,28023 -RLAXgWeo;2913,44885 -bATZVyjt;65412,77991 -IXTAYPpz;86498,22571 -EJGedWvX;89677,46874 -gJBTGOwJ;18782,66300 -EQmNQNlY;66695,77942 -wThBzNLD;6145,13703 -CyBDXjCl;54642,68949 -PlKvITvP;17139,88574 -KpeABhyY;85526,19741 -hovlPRzp;69805,87035 -seYkxLCk;72124,47346 -pOFlXvui;26784,11033 -ZHgrZviT;26953,19442 -fRFYwSRB;78902,68949 -tCKTxPfD;21029,88277 -atguYYVm;43057,30969 -fUngutZJ;59695,37941 -yKJYbogl;45335,64980 -FqaXXaia;34948,56148 -BEqPLXFA;66350,43909 -ZgTrlwMK;55508,20297 -hFQcZwOq;11778,76349 -sgDMBPoc;14895,22794 -uomZZZjH;14022,38558 -EAAPFZxf;20978,29954 -rIGQFPxT;23004,68398 -ZSaXUikZ;38102,76216 -ixArfazY;36138,63807 -RQurfqxV;65216,86127 -wSUnFyNv;29345,60509 -WQzVXtqF;5330,54033 -COytjYOp;48624,44254 -BEXVpdgV;6202,27517 -qQnTdFoQ;77208,22672 -NwEZiALk;22400,26507 -TdAYEOSZ;19392,72959 -OoNWPdAV;70541,64335 -SgzhCGfs;6441,76408 -rvgmFvZK;86228,72729 -WMBoVTHf;35283,32827 -IAJMExnO;16807,39085 -ZZCLMtpZ;89346,50184 -eKJOkuXT;59440,79815 -TBtqabAe;11640,34979 -qdHUDKtl;46011,64007 -rXqlMtbD;10008,74378 -AnjzidvJ;87837,61643 -ozoYTPgu;49436,61061 -aYdBbtzc;11812,12261 -ywTZUBHi;48551,54798 -YMbxdQFv;50423,70582 -KkpBMtZE;39735,84236 -hLRYdkKz;37463,10376 -FadfXmHm;46051,56247 -BSimRXsc;34128,4874 -WwVfagbS;33189,64309 -fIMTlruf;78851,11419 -wwLrnKrD;27703,31865 -soDVYFek;36426,24111 -jrvPJFTq;78948,7703 -bkWoydFI;84131,58016 -qjWVJlKl;37649,8172 -UmKsFLzW;84668,72315 -BCsWlzcs;78452,56690 -ezCwnvmu;33342,34207 -ylusrKdV;79327,54684 -JlYrDbSZ;84745,41122 -eUMkNptK;82364,68759 -VXAFPZcE;26239,84193 -qzebxpDb;44352,75343 -Awlmepqk;59798,58391 -gQVCujIl;56656,68683 -qNYkSrPb;31062,26997 -PKDOQKXI;89626,66050 -UOYgMhrP;76648,8433 -UBsqufaD;14899,35511 -WadfewmP;58444,51828 -baYChuBI;45773,49580 -DhQCqzXe;5836,52667 -YegLFucY;78526,28778 -QqCVHSaN;28443,6564 -ASxktPWZ;13667,20570 -YPevuwoO;18948,65844 -DueVjoAL;54373,69195 -nxgiTSDJ;9747,89829 -NcfzhLWb;11955,23404 -hJPLxpMj;76541,17812 -wpvifCOl;44830,1485 -bjVQeSpT;82109,79513 -QtCYxOmd;30730,56286 -vPWsRLjk;55573,67551 -nihhjDVg;87391,59133 -loNTAbJO;58795,77096 -tAiWHVqq;62187,66049 -xGIbBfJX;75878,31379 -gwWdcQKH;34307,27308 -VKXWglju;65787,57586 -ehqWKWsv;63719,48545 -VQVSkfPe;25810,28314 -sTNjGgoY;81150,70876 -SBtCtTSD;2072,85197 -zyhErpKl;20764,75113 -nAhJcRMY;26064,24379 -Xwwptgwo;62064,29651 -XfMaLLCb;74976,62762 -PjDzwaoL;84900,16534 -htmybfBU;69013,85785 -dOeubQfM;59275,22915 -JRcINtiX;20821,6255 -MsmvUcwx;55552,78680 -dFbyzwfZ;86448,58823 -MUocNxcz;37399,19312 -BxoKDvXG;15238,88126 -AUJuOEPu;28393,12446 -EgCClBTi;38298,89798 -gbQKyfem;48555,24149 -amZjyAWF;17222,72254 -CWdbBJAj;33399,20972 -jnNuTHUF;24544,54451 -MqrmaeRm;18239,82458 -weKnkpcD;67625,80165 -vCAughQj;75553,45593 -TWPhybuV;4250,12703 -XtBkaUpy;80390,12151 -jBRksrpO;75424,8762 -yRvPoJmr;44290,8501 -FNDFyTeT;12919,2916 -ktbXRehN;85088,10878 -JVRmbTEU;16443,9327 -YJutSpVj;50109,77216 -VtNYanGs;37611,35028 -QTMddyDR;64662,30753 -ehCUjUZF;49923,71116 -AYMnWczG;75851,26340 -ZgQVmfbm;25758,43968 -wxJjHKTt;73689,44320 -flbxmrqk;57977,9276 -CloqOKUu;54218,52787 -CMnUoCfx;44671,38199 -YxhtAfAv;1799,4565 -pevxopsS;15241,79332 -EEkyEdXO;31959,4992 -mQCmrosd;39405,82165 -QSIonkpO;35266,12794 -rJzkEmsE;64940,61822 -EyywzWVl;56565,78607 -mNIoDhuQ;43551,58911 -kTLUVqxU;15981,62105 -MJOUQLPT;11564,82849 -nTbJsoKg;8721,23731 -tGfccgTy;5461,83365 -DsnmoQxN;17676,22601 -HlFyGZBy;62508,18037 -FLmwqjWG;27217,5449 -SOVyYKJf;10765,52062 -VMEgMFXB;63765,53311 -YDXpqHYq;71062,66245 -HXpuIMbO;51240,31631 -CgaETaWz;32748,37447 -LzKeBILY;44186,14259 -DHgDJhIM;43865,70131 -NxtxhzLC;51763,82376 -miwQkwYk;85047,28131 -IuyJRxTB;79220,73485 -QmKQEnRr;61799,30826 -WdizshYR;30096,71349 -TPrIIXhB;41801,43660 -TYdtEvvb;2967,75434 -IJyyePMa;64156,88728 -RGnZDWtQ;77482,40507 -yumXuDdy;54710,63270 -iqoJOitd;49648,45925 -BeIMpGVu;49595,31683 -OsazjNae;24996,13508 -qENJiewi;46099,76267 -AghJAogJ;49775,39880 -oNvgppXp;87750,45326 -VrDBfPKo;1869,58564 -EleuqPta;39167,82098 -ddzwuThX;20137,6704 -ySoDCyOP;37541,75661 -teEsFPBI;62078,57469 -SKvVqNng;78476,74685 -uzXrioTx;34849,18046 -bUhzFtfe;14349,51446 -GzWAOIzg;4495,77410 -OpQSclIg;23164,62157 -sYnMOEvv;89500,81077 -INhBjuOl;75677,35995 -XMrTrJjo;16643,83915 -UzkNRLKz;32197,85986 -tYKJDhbS;86823,39587 -EzErGpEj;22227,59852 -LTBNCIIu;11061,65030 -YuUvkpcx;46951,5456 -jcozIwHj;27588,8543 -lUvmATba;65795,23505 -iIwYDcbj;56697,89188 -ShrzeONO;44491,41573 -NCGfkDzt;44438,70929 -nemPZsOM;80514,72817 -lKQszVPC;52430,59552 -ShLOdBvm;69563,49215 -aahGCeBM;76852,53040 -sWJcffCS;76043,73017 -FONzHREz;2935,5090 -CxhIWAgr;61137,11041 -YDJByNrE;13505,2467 -CmHqqIkz;28953,25830 -EznpXCOp;60681,14567 -vYFRCxna;17674,86928 -zufPmPzU;74658,42254 -iLrKkcID;22634,60034 -SJqEJQGu;56277,30766 -iUVkKXWu;79777,18858 -Dfhybxge;76281,71443 -RmKlQHsu;85203,21884 -VXKEkYtf;45301,32514 -pEcxpjaR;17343,39290 -hEtwEFPe;27090,19383 -twCzMiQs;44359,67889 -CYyinbNr;52587,35874 -sYxXkIBm;74543,47782 diff --git a/src/data/entry_2_13.csv b/src/data/entry_2_13.csv deleted file mode 100644 index eb7e731..0000000 --- a/src/data/entry_2_13.csv +++ /dev/null @@ -1,8193 +0,0 @@ -username;balances -hyyxMolk;56592,89426 -RQNrweLF;29280,24324 -LzSloDzM;26199,79099 -wxcPsmpL;79720,33845 -xzZdIKUo;59691,6650 -VmSVPdku;21784,9048 -dyDYdELg;61832,11523 -pjmcnARI;37628,6750 -qTQKUYpi;37355,67581 -WSriSgFF;78290,77081 -dKOqhBtG;12860,5535 -otokbzRq;15132,51034 -cqqaFiGb;62380,75518 -WQDXGyRF;15015,9240 -MtcXHTlO;30374,8416 -IJkULMfY;45754,53550 -EzsVTNYp;14588,78716 -HQMXTJAb;79052,39036 -AukYFZtv;64791,47222 -kKJRMOaD;8897,55164 -UHsLudwH;26351,23259 -lprmQTsv;75863,73322 -FjvkdakE;41184,71526 -HnhgCjsi;19615,15764 -DijkKPJD;86092,80115 -SsMxRWLj;50004,48296 -fbzyMOas;19281,34997 -RXqPmWTO;31149,72837 -FIxfYKSs;78689,27446 -WywkOJBN;48430,2592 -TdEtQaoI;8503,78815 -alVcjzfI;25761,74841 -IxFYLxPO;16414,72575 -qUZCWcQq;41680,42483 -MmNhooXz;38606,50784 -OKIYxmzJ;46164,1937 -tNsdAVxm;33487,55645 -llNaGLZx;1264,30160 -LZxhdFoH;53021,70285 -TUBjpfHb;13811,58771 -oyLIBVuY;82416,51710 -fvHfSAuZ;41977,12157 -TcoPMJXu;51395,5803 -yYiZYHyh;70049,2459 -yurqwnJZ;40203,3407 -FrBqbZQN;83260,8413 -OMVRmCZt;6051,78455 -QKxZNiqp;66680,42326 -OCZNAeCD;76896,84729 -EkJdyBDs;42381,8072 -nTGjNyVp;48454,26635 -EofhmGMj;58598,49681 -xdpdNXDV;14801,4422 -BqYRmSWA;42794,23120 -naRiLRGI;78826,75240 -qJoxkyZT;71960,11922 -RvbufHVR;16814,43395 -PsMvNiBe;33720,6756 -hBNEnfPC;12817,1707 -vopmVAMM;5174,67321 -BpAcXwIi;75309,34550 -BzljTHzi;50607,27132 -ZJDhiGCV;53645,68677 -lcNMGIBo;80804,21066 -MXTktqTQ;56071,58191 -iRJVdeck;57250,16266 -uGCLvGfS;47027,57825 -czMbQCbc;45321,81770 -bzjLViqY;1355,75452 -cWZpByTk;66351,77880 -dLCgsmKj;78911,78070 -fPdAPXtD;14524,79239 -tZMbFphy;41684,58391 -SNuLWiWX;17334,81555 -JhzUJxmh;81722,88377 -bgPuhqVL;38273,83399 -EvTLprge;67560,82837 -zdcUunZs;64064,61768 -PGTSjjum;19547,87103 -ndoUIyYo;80863,54299 -GmOwyaME;50258,87368 -DwmraTgB;24851,53804 -DxTRkzHx;69935,32797 -nFyRxggE;30321,89855 -wqeYpALk;52397,24003 -laDhVvoo;34280,51155 -TloisARe;14703,54709 -NDqXAXtL;4907,67047 -oIIwObqp;85204,31512 -onJBpqZg;78595,73871 -Pdhzppay;28443,4660 -tHjkwjMC;76891,47522 -zzeBJMPX;59526,51688 -IrBQopuW;42031,53269 -QngKYlrU;19060,30924 -lMoasANf;60630,24420 -ceZEqAzg;64810,85515 -ZEvJNzMY;38986,63012 -OwhBrgQN;12575,29311 -ZtfJVXBm;72920,88371 -yRuOaFSk;63444,60717 -FEMuLrku;44020,78845 -YufePVAx;50275,65926 -kpAdTnRA;52793,66723 -nWKMrWFO;7447,58051 -drPNBbdw;85241,28419 -vfgpfTfP;85963,40492 -LZBszGLL;36294,83213 -RZNNTuOd;89668,23764 -JIlfDhPm;21018,51419 -zkDUqqUf;31868,26004 -VXCYBZFl;12255,27154 -CtguEfna;21326,75089 -AyOsYTnA;8846,76900 -ZOlpdUBo;19391,86381 -HxlhUKzm;10062,8592 -iczvrtjq;30095,60740 -iXOIcwmf;30742,2984 -QJORLbFF;3024,63525 -JcRrhola;28586,67737 -PFEVwqTL;50261,55301 -RZcirCrl;80385,59036 -PpzIMNxO;11964,13444 -ZyFingrC;12130,70593 -ppBuZmpg;27160,79591 -ywyHRKvy;35349,20206 -LLxxJboe;18872,22667 -hRxqikmL;11007,25359 -WkZcrYED;70475,64609 -POdQnQjw;43281,51121 -MATKNqhZ;54032,46502 -NYVSTWdX;63066,50385 -PDVyHcAK;54818,38623 -AfRZgSkG;19053,47757 -qtLrxYue;82024,81643 -fxFeQQgV;46499,15159 -HytinyUS;28308,62355 -VzuNXtrz;23835,34167 -vfnIXnoY;57137,78960 -XWfZvXcV;28402,43739 -tVBERLNR;63596,21718 -KKQvyrGi;26045,60799 -uaxVLUQb;50047,15586 -vNIQdvRF;56466,83682 -mEZiUlhE;37018,5450 -RXEpgGsE;76972,41803 -lflKCbEm;88624,76572 -fZNFBxPi;44188,6866 -GgOBvfHe;4278,50200 -UvmBdCIk;83689,13498 -NRlExbIe;26769,63140 -XdSgaRXi;36261,38593 -gYMRXMNR;29460,72165 -ducmdzVM;30779,34829 -PkNaYwGf;56364,44273 -xXAeCmdo;44870,20795 -CEPuFiVd;85792,30787 -YJEJFYVd;71390,87635 -nUcsIRLQ;20326,84872 -POHLILKJ;85523,14117 -yHMKxCvp;1071,3554 -fpXvDKUd;4570,9432 -aTVSaKzf;2359,3160 -OpTiiNVn;3712,10793 -nEWTwgOs;52236,23289 -ZNrbSAUF;64315,4972 -geaAqUYa;2582,6366 -jtweSsVa;53968,23950 -KAKkBWAK;61624,25341 -gNOnTDes;63143,72939 -BJgYpiMB;61796,32270 -eUbTDdtr;42346,31603 -XLMcsDzW;15343,66567 -dScTrKIX;68155,26827 -LDerFKmb;82163,49721 -bhFYTcsK;12490,44421 -OJtUftKr;81067,82460 -aetfsrCx;79842,61398 -sNhHYItV;52088,17812 -LTIfELpI;34728,58292 -csgjvbet;69401,45467 -huSimdic;7077,56007 -jdWaboBP;34481,76305 -frhwldYe;48032,69462 -fiONMAKz;29933,57809 -lZkeqfLF;69334,15271 -FakuYZCL;8135,9366 -ofLYYQSG;28212,31427 -PgGPODSa;21749,52614 -GMblOJnz;76724,72831 -tsBEfXqe;63210,50321 -bwNzHVAg;49516,20030 -EebTaKYi;55072,5841 -SApFkhVP;63752,7468 -RCLtrrjF;26023,75010 -imNIJqSI;26444,7588 -yNrSCbjV;71712,70621 -aBczybvV;20321,50454 -WjsOFRVA;76655,35034 -LMTpStCx;17308,69772 -adxPZzoW;73409,75317 -UGDfqHhn;30133,44818 -QqHCcJLI;32849,23744 -WsWeTrHj;54265,17285 -zLGauAGg;86745,80681 -JIGncltc;44229,42723 -hKnnlfqf;49998,82070 -tsbqAbPR;80423,26825 -ogPXDfSj;26064,54979 -QfOOIkAb;70787,41641 -opSmDQdF;27707,72644 -bSueUGZS;79852,7078 -PQbKLepD;24165,26102 -PQeMVFaL;17056,31957 -apKjbLQL;75712,53516 -jKAEbfCH;6225,7805 -WrSLlMjo;4121,53925 -MuKzohAI;71910,2153 -yjlnpLcC;33490,1240 -NaHVTMKP;78382,26042 -mSmQOKEV;58920,77909 -mVFWUIWC;24690,67157 -hbqycSkV;13951,31263 -PmNeDLre;73357,71289 -RBSyhGVe;40447,35082 -eCrwEICC;15032,53475 -vwfKXmBW;13054,33712 -mQLRYKyG;49796,41188 -slLJTulU;2175,26386 -bIWeegFy;38262,83941 -lVgkfCBZ;31452,36075 -WZsXwlXK;42494,51916 -qoNrcUgc;14370,19263 -LctJcmrk;70483,24821 -HMscIuQJ;15697,1836 -lPIxBYFy;80780,33391 -SOMyhYpF;29204,1286 -wEKxNjPa;81105,5529 -ueilNPtd;30266,47454 -ofLXaPkC;19254,11545 -hPGfQswC;34928,59465 -sUhgskeY;89104,45062 -mqTDwFEQ;49436,60720 -lCuRilTX;36736,40879 -qMYpOLEM;6140,15847 -GsWnilYx;32570,75965 -wogIdbin;85071,70573 -vyuCmaFr;54647,80929 -foPuxxqU;88133,6077 -oLsghaKH;34416,3060 -NxlFAUHJ;72497,73162 -LJHZjcXg;84981,19050 -dDBFRJWx;15792,7574 -dLbTUYTX;52666,56833 -cpPDhgwZ;50165,77876 -RNobjbvG;7508,64344 -SoWYQfna;55016,89625 -xXrndDoy;11891,47563 -YeXWwDVf;2401,81318 -ueVMMCOG;4521,48661 -ukhryUKx;24526,79640 -BcDtGMjz;57942,55532 -NWtiaXmN;7491,72369 -IMmfaYxn;53867,26113 -vtcvePHC;58297,86543 -kyqVArAs;36728,75730 -SFgmOmxq;51811,50256 -GIbsXXQJ;83856,21162 -hlRqsRNG;30954,52507 -kcmoRVmQ;44059,8657 -aDGynqkb;6670,81479 -UGWydlZY;70844,38937 -WKbRQVVd;17803,1521 -VBKWXxCU;56390,50983 -iCccPvzP;69440,19409 -XBUpfrAg;31269,25667 -ReBViZcB;46286,71490 -bBxFXWgE;84732,28075 -IoPaNrPC;37237,55055 -LkAxuKwj;88470,42987 -mFrLzUWt;64810,80815 -XtLVRfRo;44398,11331 -FIokdgpm;18513,13032 -EEfNtyqz;34071,32985 -MjVRdswV;38035,72637 -SWwQVDci;72344,2579 -CwaUbsAe;41568,26269 -JCSiqCjG;1364,37322 -LbdDptYW;58121,59942 -WWhzVAZE;10567,47583 -tgtZhpal;52502,89901 -BQDLFgfb;54401,83162 -igzNODNA;9221,17210 -LfAwDqEj;88013,6449 -UeKMQQqa;37624,18836 -YRWrZWlb;50744,84206 -sUsbydEX;55238,12913 -VZWFJkHD;45434,49003 -TWRGXpHM;12459,35893 -sngekHGm;69473,10086 -xxuqMPCt;17787,21503 -xFdviMTG;49920,53554 -qAafyeGr;4205,37261 -HVNuZFgb;48076,39148 -gQKgvbEN;28814,75930 -LaNWAXRC;42769,27532 -SFEzcnkj;51405,14754 -iJtsSBjR;85228,75429 -nwEoyyok;60301,13257 -ZeJNlqCO;22582,74331 -bKDxuaPN;67214,56220 -VpUJrlCw;65978,29309 -iUiHvMFO;39702,84965 -knWmTAvX;13233,77168 -EgTYkhov;39647,17761 -pLwkfVEI;70849,84786 -cPrxFNpE;56567,25825 -DndzwxsX;40735,69850 -ZezmbqAY;33701,43873 -NrglllWH;35538,68603 -FdKfzVOj;19651,66136 -oAAuPNsW;1856,30166 -dVNdfzLI;71713,17280 -yBnFjxjT;11002,15757 -preiCwYe;76358,28698 -DujqlNRq;60047,76426 -puynebdE;30083,68049 -ZAvgAVAL;71610,48693 -HbsXMmmP;30046,17415 -MLerdTuH;51011,58206 -hTPahMPx;12322,45099 -kMQuSagY;64704,27048 -HAHniRQA;48749,87071 -HCOhAyST;51821,6747 -NrsbtNtH;68968,82444 -JVhfwjCE;51395,8621 -hUMyzNwE;63141,85730 -CezMDiuv;53355,82272 -xXeixNhU;69873,4102 -RJaQVDEv;78543,19331 -TguFnMQF;29424,43743 -NbDSYsRn;52227,70084 -nyCHCFYr;34591,64424 -cDzpJmEk;71643,40682 -cNhyrJcw;42716,3985 -yhgsCZoY;62107,68264 -UQKrqmol;85143,58483 -cYBvjPxI;89681,42011 -YeZKQUke;8800,66096 -diqEONKw;10972,15527 -eiXuOrjv;39396,25015 -ROArdcMg;50063,67604 -pZIjSFYg;6692,35414 -AlsVxBbL;48989,46557 -BCmiLifr;39695,25733 -qqPdygch;80547,46110 -yRFjgjer;18248,69221 -VuPSuTSN;28290,20751 -iEXhlYLz;35961,14784 -MGXcDopM;3778,50654 -bFStpRjQ;7833,1281 -PBdFbsDN;50122,71224 -KFBYhFDh;36110,60726 -VfmtspqC;32100,73226 -DGUanwuG;30175,31074 -uEEemXKD;66581,36480 -fwxquwdD;49334,40503 -WPTSURdN;76779,1376 -dfFNOMVN;47435,60668 -spdzSmjU;27969,73251 -OsDGdGCF;33529,20045 -jbGndWHS;65218,1161 -AMVANjWg;77030,72530 -KgBbTiPi;12804,21115 -gHJfbmsH;10541,69207 -CwoEBGfA;66011,36277 -xwvvVoTl;52111,48092 -EYxCPKSL;49577,13624 -gOTyzCnZ;73294,45505 -JuPQgyCn;58869,9551 -oKkTbMHa;28431,86656 -aFGixwpr;12711,22510 -dnuRamLR;37771,22505 -OdrkNFMt;67612,22326 -yDttjSKe;17050,81440 -gJnieIKt;22914,34053 -cFCxnNjL;88245,59561 -byNHsnBl;67691,2127 -QDbyztJi;64855,67148 -WwKTbCct;21129,38652 -EHqWfzrk;1752,14890 -UHXRyjub;10352,21637 -eDvRDfGi;4629,53130 -ZOQcQkFh;88376,9537 -yJUBAgha;2113,60675 -NqUKdOyM;15013,60203 -qsMmjPgU;32368,26853 -ufoDJlFB;40313,26885 -ZXmbSrvK;28743,13604 -yFneVuDv;79899,89644 -CshSRUjp;66307,44978 -NYrNCxeC;54871,84669 -dSBnSWIu;17467,39317 -dfrsiHeC;65362,7001 -lmupkTVJ;15268,70068 -CVnqhIdd;53492,19787 -EZjdvkvo;32636,10702 -BPKoBOPR;9612,28602 -hsnFAnLJ;79073,81565 -qpNQbDrU;51282,28839 -uNEXZaTB;29624,80518 -ibZCCuwX;78665,61472 -MgcTCtGq;74079,52349 -GMjzqgAn;66098,48448 -sflsOcAX;39641,36569 -ajQMrzOw;69567,33757 -UiAhQtiL;79092,56855 -WwWnJRIO;36038,89832 -GpcKLPeG;32838,14107 -qBlkckDu;80708,68224 -dslgIPxY;32898,38356 -LzrXmdgx;49421,74292 -VhgPIWsX;71256,5929 -LMfSMHrl;13268,43838 -ZZEmNWHz;78497,86283 -ocYXNAJd;55889,53313 -tnxLFOTg;32842,13503 -HzPqulwg;23592,20833 -QgMMyfXG;1176,73704 -XowNMfPU;17528,51275 -fRoFcGvU;82733,21132 -RRVSFDZX;31924,18440 -StHemxPa;39480,86487 -dlLpoJFm;59784,53290 -zKkqGHOl;73537,46674 -vcpfcxVi;63515,17867 -tCTVBHcJ;30419,2257 -OrcUjSEs;79621,40543 -XklDsKii;24820,87103 -zTQUrDbq;89787,31538 -ZmEantqV;79678,24495 -GwJMSNcx;45745,82975 -YWpHQenP;30030,85081 -kxWHCDIy;57146,5353 -lgbabnKO;1615,80507 -kZjVvIoY;16830,12312 -iHVSZcNj;37977,77968 -JFpNGNeO;36423,33684 -sBiSopFo;55025,42118 -JVqpuyWV;55933,2070 -tyZkYqfe;77964,48739 -NfVjQdkZ;53306,68056 -yStDMJIX;86319,70171 -lIYwufFC;35011,27236 -RLOLdayL;66426,27358 -UKcusvmM;71361,52842 -bUqsiXRV;22908,20993 -IpVuJqdB;53366,28320 -nRCqDBIm;40608,20700 -CWQnhuAj;70347,1028 -ayILmPlk;89009,72097 -jQxIwynx;37057,85496 -pLWXzqOs;81525,31450 -tpHFBJKv;43420,31512 -rsUxcNAF;80386,8987 -gyWRsjdI;36391,7455 -XrdBazez;13584,3659 -WaqiYELp;30973,85097 -GQdYirJp;15152,40888 -wDSAfiPD;57213,32349 -UOiPmjam;25474,16717 -MfDZYhsS;57929,36137 -PYRhHZtt;44821,50978 -PCJbAuVO;57177,59646 -PqLqDHZc;27801,24916 -oOfdMlQv;1704,42536 -ZoZgrlRN;72707,89203 -xxoaSMiz;72799,13290 -kdhxdeGn;12376,76292 -GBJWWWVV;13872,69844 -vbnWufVF;72616,86276 -IYlDOuaF;18911,43643 -ODhKaUVf;6908,67984 -tsJSlCLp;9443,54799 -prFCVuls;20375,59553 -HBMbXngV;18501,89516 -xtivWnte;76630,58715 -dBjZYTvd;54953,16842 -vQytitFe;43055,67859 -lJzGuhmq;61716,65217 -epMQgEgY;35345,82824 -FnwxKrMP;74424,82201 -UwUVVxIy;7714,35969 -zEliRwFR;39436,54213 -WfgufOfC;2334,54694 -vcLIVDNe;46600,13970 -rkFvfagi;53833,65802 -NXfAmMTL;18323,58275 -ydFEAFlO;30007,65796 -gDZbEkfe;77520,1353 -siZmTItL;88101,69707 -ZmJsfuIK;78293,29144 -XSmLTGvB;61011,81752 -VakYJarH;8507,52159 -gLMfBHwh;66311,18468 -eLehaxwh;74517,80222 -jrDXUspb;37716,80294 -jojQjQAg;76953,13563 -KDGtYnvG;75338,64612 -kRsFKZfw;3452,73460 -hNTgDZkE;61193,12222 -ZQemYqEJ;59804,50421 -LEdxcSyh;8598,38363 -txonOCCP;83737,66734 -bPROZeER;79450,40268 -geOpXVUH;24837,68410 -AUKBMKqs;54618,61741 -LdurvBSy;70763,7730 -mvrJMUlW;26640,31198 -vOnfVbiR;82773,50404 -HMNnYAWc;32621,24047 -Ufadvkso;70056,32342 -rifIEgig;27795,40568 -SNrZPQcR;45949,74583 -DiyRUBVy;58697,36981 -kFbpcrvn;53710,85438 -RyQNWkjO;29549,82723 -QwbIZhka;48463,41804 -lOZtlMSB;38461,52859 -hPspxJdt;51560,54106 -drCOHUJb;56028,56950 -HYKCledI;60070,39291 -wuwujaaX;17709,10111 -drIoRxom;37044,88436 -RbMqjPyK;35559,17876 -OOHmxjYR;32370,71799 -IYRvzHtk;56624,10879 -LlyyWfPk;67052,33843 -oZZxVBwD;84312,88890 -psjxiTBv;39161,82319 -NtlzBsUu;85396,89886 -AVCeOrtA;73932,52500 -HdpZIDxg;42511,53885 -UkIEWzuI;45813,30771 -VcbEpeXm;51653,84188 -QWzryvvU;71988,21116 -rRwLErQq;51008,31432 -UnSlwfrX;48822,19958 -nNAuDlpL;12368,30084 -hgQQkijY;23923,40688 -haSvOFAy;64015,29453 -MUlWUbYW;85239,83267 -wgxKOGxu;54145,59552 -dOALuIlZ;3106,73942 -vWyuuNAR;89985,77300 -PPrVtUar;33406,26739 -OOGjLRcI;34190,50565 -LQgcytIm;84358,78927 -WCYKcrbR;81725,9643 -LXthZPCI;76393,84576 -SkaSDFtU;55388,58715 -KEiSqDsR;8219,18909 -IKqZmlZj;47629,3424 -YrNzVdnV;57126,68365 -ywXZkXvV;37106,51130 -SXhzblcv;34684,34583 -mfhznJNN;3506,19601 -HNtGJXfy;30359,27790 -ShpULPDq;84666,34531 -IfFahIdf;44063,86282 -LLtFOJFx;85577,86134 -jDpBGpUo;14611,89635 -XqkZaMNY;87176,27511 -lfabpeIf;44197,55159 -HLDXKthJ;38952,82561 -GBmkRLTO;23183,55212 -WocytYRF;8902,89057 -liEZawjS;3706,37491 -vMNsoDmm;37370,66376 -vRfUoCpz;11388,32973 -sfWBBJws;55651,39639 -qQNcuMVx;71425,88649 -ifVOjAOp;32205,15490 -ArhAWkUV;76229,3855 -mUxteMbz;58627,85761 -jQWFSHlT;67150,77152 -BcyEEFmB;58744,35645 -IhbkDldz;20085,68211 -DvTaDmjW;73423,58494 -sRvHneBc;37324,50311 -cBjDjffa;31622,65057 -UlXRtyjN;9378,39093 -LNCVecOm;5097,87612 -hWKKBvtt;51431,59617 -DpwtbTeI;30669,74076 -pXSVsnKr;19070,77098 -SApSAguP;39258,70943 -JRpmFLKa;13709,22107 -joNojzMq;9466,60413 -YNXDTytJ;49300,82245 -EwCecmvr;59306,26740 -FAAVrTJE;69272,10854 -lhTuLTXQ;82742,71992 -DnZGPLEn;16599,61068 -utUUHCPn;87861,21430 -ockjeVWL;62143,21619 -YRFdWyDf;76928,27712 -wRfCeqYb;4096,37868 -SnKdhYRG;89864,87682 -mWsjUYak;44303,14173 -vraNMHne;70513,59388 -qOYjjNWq;52038,24160 -zsXgEOfl;77010,22157 -xvGfHfrY;89826,14989 -fWuhiMxA;61567,39639 -ZqyyoVIw;74132,33046 -kmrwHZSX;8968,1116 -PGzfhASc;59035,34319 -bLXAaOYK;47096,35609 -xSZBFvxA;76466,89145 -OZLcfCKP;53607,72371 -pHaPGanr;30295,63686 -gDoAnwqC;80030,12568 -gVHSPLMc;52613,2187 -yupvLyIo;60761,43084 -KnjnJvFt;2550,15609 -pNcEKgeH;32098,29433 -SrXzDOcK;30816,84313 -SYarhwiS;4982,76976 -nSNCGpJf;8369,46664 -nMBNDDgI;57484,60511 -DVENZfUd;53341,32767 -ZRewvSnj;29912,2825 -KBpZBxoh;2865,34297 -oBTIKHal;81786,61982 -BKrMgupa;34542,52408 -TLsMOpoc;74106,13497 -LXSofTXN;32656,82425 -CoTqNKMJ;83391,73357 -XGDYMcTf;30568,48103 -tFUXcgEF;61827,88118 -VzcQRLyx;26154,46733 -SCKiMbDz;58603,80242 -xCbDfZqa;8688,87510 -ufPhJTDS;5512,28575 -iMMuZvds;83342,54140 -kAGTEhQD;19380,86951 -aeGsuhPa;25243,65352 -itCgIlUY;75679,70273 -HeMlnUgN;4015,46470 -pmlCjsqo;2879,40249 -pjRppbqA;88296,32868 -tKzoFfSv;53641,69392 -xGpPbsXi;17348,80097 -aqUBSFqu;20570,7597 -OJFJVUPT;6480,34445 -VIffnUFZ;24432,74583 -vfVJgsEv;25022,56781 -evcvnFIr;75942,25479 -mXFzKPGt;61000,54083 -qvQxrIxg;36987,62655 -NrtSNfcu;10228,33763 -cJCSkgnv;88449,48546 -niTDutms;73337,36278 -obTUfAGl;18391,2987 -IRwXBBoi;66456,33377 -sJBKmbNn;67879,24541 -PQgTowCn;44228,65159 -nYwdHTnl;4056,74554 -TlgmnUqJ;7213,37584 -nWnDXvsQ;21647,78001 -OWBeAqCi;17326,3534 -zHvlOewd;8385,62356 -pkSdmiVq;15349,10051 -jaFEPGBP;21171,86590 -nkkBALPP;2609,80949 -XUDkzVTi;71098,15528 -SSuqoXTa;88226,6082 -wWtutZEF;31896,55649 -DuaufPuu;12047,71060 -TbbPkcAS;22886,68680 -JQfmvnSf;69846,14128 -HaeOMsQY;61146,68488 -ZAiVeOnx;7001,72483 -PPzVyeNc;49882,29067 -rrjzzMrZ;10494,61907 -jUtusnwZ;63310,64297 -WLTUzgTw;73394,85403 -SkBsvDGq;35598,29491 -avRZqggu;86527,54754 -NRiHafnl;10876,87658 -zNOYeOdR;22524,80108 -KFZCjRhM;62320,16633 -HhMbYvGl;82770,30030 -WqDJaFmI;44193,56502 -liHSNcmj;73288,72826 -leGpVsJO;61369,14822 -fLkODduJ;61813,6778 -GwGJkwmE;18430,76310 -dqhcaSYG;7023,10549 -dTjrYJOl;2983,80699 -YYIexVMm;20300,68989 -vwzSEBOM;63856,73915 -YKcKtNcF;35116,84870 -CHXnINtP;39977,65682 -sPpiApMX;65199,13055 -PQjUTOpC;43118,39845 -mhOBpNKi;79220,48643 -wMTlcCSY;63845,24391 -YQEsUvqC;46800,34737 -AQxEZBaE;51233,45701 -GzupHCPy;70258,45943 -QwaihjnL;26719,41376 -vLhnrdxM;18913,87230 -XrnPKWAc;31243,82506 -iNxcTGcU;78320,77055 -iwpDjuVw;23785,52293 -LFcQXxmO;63703,45803 -sZykDzlP;33648,20192 -MvhiEJAl;26567,36653 -ZeYJqWPn;87900,17836 -peaKTSXc;80772,65618 -QUviHvhT;36454,55582 -YvGUTApC;43201,52366 -dzWexeTD;27048,12599 -iDXTfvwI;15057,50116 -YHDkkfek;14414,84472 -hzzDmVgF;31368,5654 -wIRyxziP;76845,89373 -wIRPcgfT;89789,77432 -orRCdleu;58945,80247 -IpchKRQe;44603,25538 -XHNtWamD;15189,4616 -OalQuUIc;4435,67223 -MOHBcsAA;55832,10118 -TkBfMqfx;86917,50955 -FQGGefve;5440,85874 -VIfkOqFj;19398,54794 -qNyifnII;44931,26684 -TTQrzuAE;4664,89892 -RrknfJbq;26773,49212 -CFPHfbhD;7040,22766 -ZGCKYtCT;12991,12354 -JCEHJDOE;22995,41211 -xxkuuCtR;72436,5735 -Inagoyto;69835,58849 -NEeutKPF;58056,71990 -sbsGDtBS;39777,72822 -VWfdTOst;39791,41950 -fzTzxdPI;36503,52980 -XURdeINT;77081,6025 -ltjxDNaq;43716,58214 -VfyZLhKn;41830,7552 -ruzNOQbZ;31665,58053 -gyUdJOSB;44623,66660 -thRUbrqc;62570,51069 -THcecdPg;20487,60817 -RaaIVxmn;13033,9026 -RxYCHTag;56226,85781 -ZcsvvElL;34649,10379 -TayuTrIM;72614,3984 -UBwbyByt;13526,54849 -DNzLTCrU;87369,67978 -kVrUAYWp;52235,88317 -EwrrNrUG;42660,12376 -FBSRxZnX;24544,76014 -RQecKflI;23911,55429 -lWiNyMeC;65319,38541 -YDkKmlrS;50150,87228 -QSUpBKIt;53500,44788 -OVckJlWU;14529,54174 -VJPDCkcY;84837,59504 -gNtrXSPe;4624,78529 -xQbyNSSw;2317,32058 -DKQZaoBP;43007,14177 -NBDZuHqI;9903,70111 -QKmFILBJ;65581,37889 -xtROmcmi;85714,45004 -vIfnXTGI;19881,37827 -XdhOXJVm;48789,39870 -lvpJeNoi;85422,1246 -VsSgqObz;82368,3331 -mtgpfpNj;28918,86939 -ithOGlOB;67234,63204 -zSXQuOsA;34716,42694 -uShbXkEn;63368,76131 -dDzVwBiQ;56664,23487 -ztKMKxFI;58104,84014 -NURKFysn;6357,50769 -gaZGsnVo;24480,9252 -mfBtaBni;65178,33685 -kVUvpXxm;30810,8485 -UNslILpN;50368,66315 -gWhGdiON;39810,81821 -eAqyHvll;50654,13065 -lTnnrqIa;59817,49663 -aLjUnyoS;73274,18580 -FeLrkUIf;32297,33086 -SXbgdFCt;67616,68163 -dKszKMQt;65845,52125 -iHGgmvxG;74374,81384 -IJHPOWSI;83884,59498 -jlHuEtRo;75625,66806 -DeQIOCML;7680,22322 -ItMUDxQR;42928,68434 -sBoLcyQy;56428,83943 -isrEuuGH;14137,74904 -zERVypQz;16668,88447 -GJyPDxLv;21703,65646 -uFLLeHVy;36901,66475 -JKEQComA;12619,38987 -pnOeDRao;79266,40698 -QGMGgmhX;39046,68096 -xrbupMbv;59820,18181 -SMOvKgIm;7482,59759 -BHcVKImF;84609,49590 -YoQZxunq;88046,29203 -JuLHaJBr;15937,66607 -OLZqgfHG;62212,86012 -oDxndptn;4433,22950 -RQCKasFi;58074,45684 -jDfccLkY;28323,56475 -bXIehiGi;69260,53465 -mjyGFWxU;51006,14775 -ZEEdNEgG;20028,56498 -qCTHOpGH;71784,30021 -WSwVfBEH;37715,26664 -EVzJfVsp;58312,70795 -osOvfckZ;71983,51791 -TtqfOvki;86782,44435 -unaOguHe;2428,57497 -xjgHYWlT;17966,54829 -oogUNPes;80954,24371 -hXKqkaHK;24870,84072 -eSIxasHs;21538,49631 -YSKKwNuH;56849,32770 -ivGAnqph;64272,40489 -zwDlQlpy;10709,41939 -NLRLIxJM;84741,12319 -LfVxpCfF;27391,5298 -CvUWZjKp;27753,76159 -XNBimPaR;32722,40241 -qTGnSIKN;63036,63223 -gVqPYojY;86659,74034 -pWKbrBmw;66731,55333 -uzArpdBZ;64399,19139 -bBzCXhBk;50786,11451 -WKQAZyfT;61347,54527 -muKfqjra;37570,44350 -unTtKeqH;72452,38782 -WFCDEsGN;82663,15295 -fXjBjIGz;71432,10013 -eNknpbPf;41692,38374 -jEmBMsKb;49606,30016 -rJbHhRrK;65044,23626 -duIoqnaz;86474,83084 -yASZSTit;54563,77228 -LBMbAGuk;15097,31790 -KNchlJyS;64409,19340 -gtzDYBQr;24598,66284 -kUpYqsli;21009,37523 -gemLCBCa;39183,7677 -sHUhyqqD;47647,17670 -hwLHXCWy;37436,22263 -EMbLatka;25500,63691 -RctLiVDd;57886,86008 -PbBnpmZG;82341,80584 -crCjjZbw;61370,19182 -RcNmpAxk;32897,85769 -vWaMXEaA;65574,27844 -mKcEvfxw;37659,59060 -mYjHjOYU;9126,18559 -TEndRhwS;40421,29424 -WkjvPVTr;6334,23428 -eRTPfapP;7167,47956 -CXtzEnph;18925,78963 -ZiTjEldu;12742,65872 -zXThmABp;63883,13198 -LiUZEeaF;86092,24221 -SOnAwmyY;10430,36920 -eAXmkMhu;82046,85204 -RCThrdBd;65096,4800 -InjPqSJz;42633,78360 -JvqNyRnV;78540,12756 -RqQCxqRZ;81120,3250 -uXphibUI;22726,40911 -UPyqUndh;16541,66812 -pTTeiThN;4743,86139 -kWtHMETh;15302,3596 -QbxRuYBT;39872,69704 -aHZSSHYW;36841,83035 -VhBEgmwy;83103,28050 -KuDeBYjw;81854,54601 -kGerIaKO;52351,28094 -OmhdjDVN;26719,79745 -HNLVbgbc;60597,11101 -dGDoIgEY;36027,56663 -JXcLyXVB;24232,38792 -mOufhxXg;23845,78510 -wofRZUFr;65757,18587 -TnYdGSXw;83715,85222 -xwOsWfkh;44209,85428 -TeGefVCI;77747,39283 -nPNPsImi;46966,56359 -zeKjDTXq;7401,56660 -UKyfpmbj;56841,22336 -XKCaGiJj;55366,77004 -zupckUze;1303,32519 -XvtwUpgo;61048,29267 -aptsZGqu;71091,8749 -mBUqPPVr;24537,87622 -gumpCywt;38887,19914 -jeyaiOFC;63012,62260 -VBQMkeAr;35809,14413 -FThnqwJF;42588,81361 -RMpLjjev;68583,85742 -xCDCuXHs;25314,25085 -YZXkXEyM;47872,49595 -pOhHwGYu;11470,82878 -JCisjmsl;21814,8867 -lWetaesO;50185,5455 -ribdQrax;5152,69996 -izvRaCUA;67431,63631 -rlreFipr;37571,55979 -vsyeEBuI;30364,36234 -VuHcodBa;3086,52140 -SVgExiRL;72957,60245 -bFqPBWEl;44006,45390 -utCmCyUa;7999,53063 -KPPlRSKI;20274,51680 -ZBVpacML;49814,73964 -FInijXIs;53482,37780 -UOStwCtX;27147,25489 -iKAMQAHK;31269,76576 -POvIUmay;15640,78105 -AWJqZmNV;46968,69002 -ETVJDaZw;70455,65377 -YDyKNRXu;85066,26996 -HhMiPDJc;83303,60461 -YYwdnKQJ;78772,21599 -qxhaSNhy;5304,63044 -BWkOtiOR;62466,67960 -SzQhfSPZ;1085,29502 -VgYIQOPc;84852,58595 -FCTNwwpw;14946,62315 -AeJQHIbs;77470,27575 -dyAzUZZW;68156,22541 -cqoMoIiw;51187,23714 -XagJGsgG;49015,2357 -OhorLMHn;72707,69761 -ZqsqgtUS;58738,51702 -SAmtONmc;28267,54448 -aMFazbwt;23740,78499 -GRgoDkdE;40575,13922 -GxisFwdC;16204,33156 -EAOyiwTi;10155,39725 -frxqiDGX;76516,27126 -YcSTcxYN;11314,33502 -Gyzdnfyf;26275,62857 -ywaeMfVI;24060,1922 -TjeLUvRU;1627,87308 -GcBvStEy;70954,62235 -PSXvmrwO;9284,76561 -vorzwjPx;2664,70751 -DyBjNFUm;35784,4467 -QrpxZFeQ;64636,74101 -jUqHccKF;71730,8183 -vRKKkPBM;69260,71327 -fuitrvWn;24994,68034 -snZIXcEb;44654,30924 -EPbokyPh;6409,10271 -yLjigQUw;27247,66673 -pnEAAuUu;74589,32931 -XfWWyFSX;21804,7129 -jAdnVhDi;67226,72217 -qbJDzvdE;65110,72066 -mXDYUzUU;22344,62123 -juLSHtJD;2437,52271 -sxYlsuDW;55911,89800 -IwVRHIMD;32451,86478 -EqnZyLTg;69157,82311 -cPhMfkEB;32883,10938 -wsTSaVoL;72783,68895 -NhKvAGBY;81919,58125 -MVrpoQjB;54421,27487 -EAgBajqu;32593,84388 -OYhytTIY;51583,56332 -IILFRqXf;21059,54278 -JGLAIOYg;62865,38627 -CtCsHShH;28944,31349 -xjwXbFMJ;72022,27110 -hAUaHKTN;86762,73774 -VnIFQbLd;29003,55186 -oZKJQaLK;58396,76174 -hiQVAYXf;65541,28264 -ceqaJguI;4748,89059 -PNcRgAZE;41475,8680 -MbOLkLXA;46572,33480 -EPDKDDVv;12531,2607 -zloJIGeK;31088,49463 -UurBtvFR;2285,32017 -wuJYxLad;53345,65670 -YvExiaII;47415,13237 -lbdBDGeH;22073,26494 -UTjWjTlk;70013,18815 -tukemoRL;17931,74074 -iArDrRWm;40553,35090 -EjzssCNo;48836,88638 -pCCIKXvO;14173,79999 -vxiKGqYC;36996,71968 -CfrTBEVH;19300,3783 -kftliaMy;60562,67371 -CZJXYCiu;89923,29416 -plBEkaQx;52427,10750 -MFDqbhsQ;88879,68268 -lQSYlTzU;65959,73019 -RywPCRNQ;74458,78099 -wuJdeDdX;6812,70133 -RtTznyWu;52683,19012 -cvnpGOFA;64950,65107 -MIblzDwD;12254,51833 -wxrSDaxo;15806,9606 -cACEdIff;55759,24778 -XhPzSApd;34552,78282 -HryAGALc;71007,26428 -wbooWjJT;30589,37255 -QHwagWTl;22792,10122 -mzdbZxwH;57656,27607 -pswZasxe;5648,89166 -BgdoMkod;6507,56328 -BZZdGaEx;43368,41279 -xtEnhloi;29195,22436 -qJMhKYKb;9000,70872 -bavqPwcz;69659,58514 -plUxgSgz;6703,24654 -oDSFLjJI;41896,8335 -vkDMYbWm;80336,15373 -SBiDMVYn;8947,36588 -IWbfNRFP;3605,42233 -oqotPlpe;44531,62918 -ZidGxgYv;56195,74092 -qgXKzMtp;68429,25720 -YRPYuXty;66986,31881 -WhrXKKzn;72633,1765 -UahNbMNd;63715,17804 -dZCSIbVl;87597,25271 -jasPbAan;21136,23145 -EAVbIdco;41564,53074 -HncMePFL;78419,22413 -UZijLbDD;81711,52026 -omyExiAM;14049,10490 -zxGlJfim;36801,16146 -YHMxhVKn;34162,45492 -mjWShWsg;64477,20531 -fiVhgheQ;6261,2133 -oIVxPojK;37673,65012 -TzupmktU;47125,82131 -uYJChRTp;27129,74587 -cQPNHlwH;64760,63989 -CzMPEefn;64238,1610 -wPEJWRcS;66773,46350 -PnbpMABm;44382,2495 -vpESfzZg;46358,87493 -xuWGijGk;21105,84716 -OdCTTxlM;26603,69643 -FLdquxJo;59919,1460 -clmCXizL;43218,63344 -kESxKwth;31018,7108 -TDeOFIWO;55059,52777 -FRAfWoxA;37979,61473 -wakLwOKX;34084,70188 -GoHdPfkc;83507,46617 -LrQmNQtS;35344,19633 -qWXfIUNI;79297,79255 -SdpgwfFL;45684,30776 -RFvElQUc;27601,68312 -wntRuvYF;50923,18154 -bXcBlMWv;2532,53081 -UdZyDvgA;50123,9531 -aOqizLBr;47416,41526 -WjzDclgp;1188,60394 -uUkmDFlk;88950,22365 -VECNTusB;87414,52460 -GAhJqbvT;84914,33155 -FolYOQXG;19976,65586 -HTbfZUOP;69566,32002 -DmshOAqP;11457,84384 -GylErYjo;82136,43151 -hcXCfjBn;58355,57964 -EjWkyrWj;61113,80885 -MnkStphN;43847,68859 -dfiFnAgZ;30795,18143 -lzLJTzuw;36022,9070 -ZBmMwvZt;67439,38176 -JebiNiQm;55286,13419 -WDPlKESN;77172,69029 -vbrykGmx;46947,6751 -PJOkYOWj;13890,19847 -PhNAYeKy;69292,15333 -dMiYNfoj;47619,12507 -LFYSMQyx;52891,76777 -bftgqozA;26040,39476 -LylUBGwU;8396,19524 -OwQOVDID;88542,67414 -EiNtbwuR;43116,17520 -bPuHaSDa;14161,42064 -kQpTqyPj;26950,11599 -AkfgUkwH;41698,5125 -lYUgMyPx;40710,1741 -tPVsLANN;38600,61081 -nGGRNxAK;46631,76683 -xaVFAaCC;8467,9898 -TVsbiHfR;46651,29807 -ApSHDTBh;73424,45685 -lxjuaxMX;8473,78422 -IaPhnzdb;80470,22004 -bOiKWnSG;27490,47975 -CrIeBgnu;52826,11267 -HQExoYuD;74243,83977 -GeOqcXnj;4520,70285 -PCQgtCHb;2168,38908 -KCWLwKSV;80843,26975 -iBigjErl;49342,49005 -ftyGXVkV;57629,63037 -dnWMXOpw;55350,88282 -EXjeFouR;65805,2944 -sUTkquma;59909,57633 -IsFbiqVy;72577,51576 -agXEsFxW;68223,23095 -FZqFHhiP;51142,83753 -wKpAUZaZ;2656,87121 -fbVgysXm;39009,78173 -PuMrZJpP;26733,9910 -NyWHUBJx;4790,44014 -VZcVWsAM;27064,65126 -pTyIaYhr;78419,77706 -uReBvtgb;17086,76966 -ijVIhFfk;18312,60791 -PaMYGWxG;46159,56638 -KeeOgxWL;67841,69109 -GZGnzpms;69330,24737 -ZPXePzZG;89448,56080 -ndMObxsN;43265,12885 -NvGgioKy;30547,17025 -LWzrcERB;68468,79853 -plJINgpD;16104,33761 -DMycUjqg;55445,39758 -wzUXiQaY;67036,82007 -IXfjshSy;59192,40121 -ZaNECXDn;21377,5802 -TpfNWnSW;5871,13712 -EvYoFWYU;49116,56614 -dDVfqZgj;11108,46122 -LhdedXqz;31108,65746 -DzIscXGk;39508,53294 -wKNddkRZ;20759,46448 -RLUisaCj;34206,62987 -pLoLdDJG;22590,64930 -jXnjnoqw;71828,21548 -rbDlxHhN;48193,83195 -hxKoDgem;34268,66566 -MlgJlbSc;32120,73585 -uCDUiJUe;35243,39344 -PXDRgnIJ;89268,69550 -MSLrSRJN;77277,41539 -GWxJInzU;25367,40789 -QbzCIPRc;42972,31074 -lzAqonPw;69938,69545 -AumsqUVa;52159,89690 -ZZSEQaSU;40508,13621 -HjmuzXNn;67209,4524 -MEPtmPNe;2209,72717 -NsDibCyw;69284,7157 -LyBVkjWp;7355,42088 -rGdJyWGL;71571,87141 -zdkKpUxu;10065,31873 -SDNDuSkQ;11076,79984 -tWAWDeCS;80191,22071 -WgmRfQHq;54118,38990 -DsBsndWg;36924,33476 -LQeugaAY;16647,78316 -UpaVbEtm;78362,82746 -XJWglEjj;19340,84615 -bkkdRQop;15828,54250 -WZrVEhRS;26675,88823 -fkISQjio;57566,24940 -lQxXXoIu;65948,69881 -SpUVUfjz;62248,68747 -ChEvljPV;78562,87166 -YNKDrdJw;77723,36897 -tjzrhaoC;51902,58971 -LdopvNgM;6896,51798 -aNKboJRh;41709,21095 -HTHBVyUP;27754,60394 -YElLPwAV;80573,34974 -GdFFpQgo;60080,85564 -bCCxnSai;19185,34820 -mypTbTQM;62799,41118 -ABdNNuzm;77677,42138 -wEwANpgi;37199,56082 -AWsCGOXn;32357,42883 -tnwEYQpc;11924,60194 -EFiTrgVr;22362,27798 -WUcRpICD;61125,5686 -zWyLESuD;81494,82490 -BEKSyFev;67204,10654 -BxcbioQv;75110,42174 -bIyMDotu;13199,74333 -yrujVFbB;19676,60006 -ISQOdRPw;76474,45583 -evWTHbbu;32232,5070 -kkWQbAVM;33503,43757 -yjVyAwbO;78647,42200 -ijxmoYOC;80860,70547 -suropmzL;55827,21475 -usOmNOkG;76312,1766 -EmlrooWf;6974,77378 -HzqPHOXj;17875,9785 -mSUNxoEe;38241,41362 -rQzhEIJu;18227,18044 -fSQjpSRh;48751,86807 -zVkHQJJG;33975,62636 -aTUcszFX;82032,63860 -hYVWnJxM;26019,14075 -DfrByTJX;78185,26201 -WgKVOHES;36403,82932 -GxZTjyyO;10027,45056 -XiunKUll;66409,8732 -DAuyMeIV;47796,7461 -fYCqFhOi;71924,41209 -WcehkQrK;57064,27824 -PWLQBTJu;72469,79725 -LbLZihsv;29604,7189 -hTUJewkZ;63039,45678 -kbfqsBXx;19388,82561 -kMWMiAiH;4392,28029 -igbWEVLG;1647,8590 -wunzxKBl;78962,27149 -SpFgYUZn;67046,2235 -rHhhvZKM;40345,19358 -EefXjUtK;3263,11822 -tVKXteEa;86781,9518 -AdvmlIDZ;11396,60259 -kwJmGOgc;18036,58998 -kCkGCeDM;67424,76779 -cGgCUtEu;16449,20986 -axHZVxkL;39430,42809 -YdxroVOC;66203,31722 -YgTPNDZE;13765,29433 -cHDATjZs;85306,1088 -UtEGQNCQ;42349,56414 -dzXQWqan;49211,62000 -sgdVMTMs;84909,66891 -PApDADwb;3111,51416 -AcpaaDFf;72634,49342 -QlDfYjgs;88399,62256 -aHNLcCsh;26964,62786 -seHXcxZg;56040,79958 -zzbsTnUX;28118,42494 -OehyCzXm;10691,28768 -ZypYBeky;12551,5653 -qHzzRZEA;43781,40938 -BUkaFATz;75469,15001 -MOcCstSy;39171,10209 -MdFRnvVe;51840,65112 -vAwokcMt;20821,52206 -RLwuKUuP;71709,8299 -UXDSEaZE;30132,82426 -buknBcoL;12027,66909 -JljsajkV;12847,16970 -uFZKhQON;4438,83041 -zviMbpJD;75590,45230 -ZgcXxILR;85090,57185 -beXwhyjc;26710,45733 -okrFquWQ;12342,39410 -WtogmTpq;2628,12391 -NNHcrDWX;14231,29166 -LBvnhzvf;1623,82005 -xLEOMeBy;13440,59291 -XgyhQVNF;18156,32001 -SFtNLXBe;9364,65743 -RPxGAEhy;6884,26550 -SRgkqGzj;44722,39271 -BpWDhpSJ;26039,1264 -dmzIwQLv;46647,44975 -JqjyhGqB;25475,9878 -VhGvmmaQ;65363,56025 -wrAlSYxa;51229,70054 -KyWEpRtC;9758,39204 -KuXWNOpE;85030,3443 -IUzCwTtd;3641,46679 -GlvlsRvf;2808,32579 -inUfOssb;76591,88553 -SIwJKGgU;72846,28586 -soXlshdQ;1855,77173 -KMPqxfnx;35211,68738 -UoPnaNtY;67819,84967 -Aibnbfgj;34461,41054 -TSVXGOtu;56530,4747 -QiXnbejC;42928,4844 -CmiwNiVD;82369,66172 -rWASiWVE;12842,64835 -xUjJPxDg;17006,85291 -ETDdgrUS;42447,77057 -sQmSzBeB;77214,29408 -cJdhLvda;46457,32885 -cFJfcotq;42372,34941 -lEAfiGKN;17969,26358 -HRBzWmKJ;64751,19466 -gsxdKyAU;83496,8848 -foXUuzGe;66117,70548 -ZKxGFTnz;62676,41271 -EnPHnEHx;27082,28135 -XsMKnERI;78964,36286 -qayvqUEI;80856,35756 -oHcnSzBB;50429,19814 -XFAgOCiN;13988,44636 -BDHKqFEU;26733,85772 -hGpjAVSs;63421,81270 -jAFjNwdH;83521,23986 -TGHZczEi;67536,55133 -PxESHxif;85994,57272 -vPQuOUPT;32135,68416 -TryTtfhX;39447,46997 -NUyTUwHg;56026,46274 -DeUzwUdS;83175,50652 -fmNoXfEn;44795,83417 -HyMzTjEm;30787,38929 -ZstGmThc;12912,23579 -gdleUHQy;48374,15729 -vuuSheHc;25723,12394 -cHmJswfK;8738,30749 -fuXKmNYK;61288,64661 -wUACYGPY;17219,15045 -dkNaXZRi;77837,47055 -dzYgSUrp;85329,56029 -UCOPwMzJ;76074,86535 -cRIlHGmm;41657,10889 -PFVcYfAW;17846,39807 -siHjxSzf;34799,72824 -klEueeuY;68081,41088 -fANSqHmc;34396,77124 -ZkCDeXnb;59657,71220 -TecLhkNU;42868,35524 -iLhWdzFF;56978,8719 -YDSYSxpw;89184,1996 -RKwFPLXw;8298,81362 -ZJIbRSBe;54369,30390 -ThruTpUg;85317,47087 -tONJxtky;75444,39373 -WRiNgyDQ;33004,45489 -vlpcQctr;63128,83243 -GoyeaPrL;64581,53511 -pBpXxQeZ;58727,31973 -SbLUxaOz;20394,82639 -ntFZkcME;8424,60710 -FTdGNZvf;85729,86139 -kdcNIABH;76598,89856 -aewDgbMv;50903,25155 -OlWqzoNC;19002,85886 -WjwNLKJQ;32256,41604 -IAODWupk;85349,56007 -LoQJaKgQ;83839,54246 -EnyvqRga;5090,88980 -QQbWzxZS;81490,49053 -tPeBTvAN;33479,74193 -cwCTuivM;45147,20997 -WZebODAD;34604,74361 -SJOWkFGa;40459,29910 -stoBrvlF;85130,76378 -Jhnoczys;23963,65052 -jDZtIUCS;73495,9884 -bhePLFHN;33866,13531 -xDwykmfv;79864,88852 -eJFUHRYY;18525,21805 -onyobSpL;71351,72040 -XbNxExuS;3472,28976 -FdBqujZO;82628,71569 -BuzFOnwA;32556,67419 -vdOGGxKC;17896,19369 -UWjicAHQ;3348,25339 -HPgVFsNI;87009,47877 -xOvQZHEo;33249,59737 -rlkvchtU;7295,87405 -PYWrnliS;23479,72653 -sjwYIQYK;81707,50794 -ApkEIvPu;31980,33230 -VFHoNziL;26134,60946 -QWeVHVsg;76011,75448 -ZYAbScgp;59653,16648 -RJMjDYrZ;67461,58444 -qDRjjURK;23374,1449 -SQIIGQSz;30606,64622 -UZSbAqHj;5452,23382 -sgNVtOfH;30715,18590 -FsFnoVwd;50044,3657 -GmRAUZaB;45899,86715 -HxDNZhFi;12552,88930 -jQaFZtRG;36104,39088 -snaMVUNr;73915,5047 -UIjQeRXS;16686,1650 -PflhoLdO;17912,24708 -ommoEwMW;82286,34922 -vRUBlKiL;11622,60032 -PnJmAPix;21544,63417 -ESIBmLHF;67593,49640 -FliowBBy;75960,58741 -jWkhlFGN;15243,55289 -rXbHFPZk;69671,5138 -SBvErZRW;87640,27859 -zwIIopUY;7733,84086 -TFRJZvsy;29020,65967 -tBgpXjRW;20419,51753 -rVWsyBEt;63350,12303 -MqANILgT;69890,79079 -QoUhlRXC;71086,73901 -EGmtlBrd;45256,8736 -tkgWpsBe;89690,33613 -siZJcRNs;52659,49065 -PMCxHcsQ;20455,69332 -zbGiJjnn;56389,5497 -kVzGywDn;23099,58678 -TYhVRGRV;18395,45819 -FUMPSFPN;42702,6421 -Uzlnifif;50561,89294 -feZSTpcq;34429,7040 -lmmPlHAN;26927,7048 -nKTLdjlt;70982,55946 -ETCReZRc;21743,62603 -ZuasCETW;89697,30686 -PmYyAPOJ;42087,18683 -BzExEgdO;26124,73460 -XywHtlIo;72543,31341 -jKgPplfs;53373,52261 -fSKkVkwh;82922,16996 -OkXrDbzw;67636,36170 -fjrrVwVD;41256,78762 -epiHIMle;42854,4241 -LeIlsOYl;85030,4446 -tZLkfCUQ;77066,49065 -faqDlgye;80628,18348 -GslMheCP;76292,76113 -vxUuZoPq;43765,67257 -SFwJZBtr;79574,19858 -kXroGPKQ;41381,52864 -ikKSPfPz;39282,74283 -YmXiOCuq;71517,56641 -YrXcziTJ;84739,43565 -oQZboIDY;25058,26494 -raLttgHo;60669,44720 -rjPoOuRJ;81854,36902 -cvLigfvQ;85203,8356 -YrbnRbco;89007,83202 -oLmTuEXz;47633,76885 -ZOLGsXKG;86604,52766 -rhEJBamV;71452,16618 -MzrUWxYS;69737,42696 -iuAINpeP;50916,65196 -dTpahlCH;20469,57480 -AuyCCozk;33855,19908 -XGqbKitk;39381,67675 -lMIQerdb;39195,85098 -PMmAxiJN;81826,72838 -KaDRQQIc;11352,13721 -ueSllTaf;17189,18778 -RKrwsByS;70020,38864 -USisHxqF;9156,65544 -dMiXdCHK;84291,58127 -jDbDOFxN;9873,40856 -LBkDRjlR;66289,15117 -pbguvPgx;37623,12355 -AOWFuxhX;15080,48549 -ntaCWmeG;15879,50865 -KARONNuY;1691,13938 -IbEovUym;74537,56089 -tCxGLOIh;31462,40064 -xkHHjIsf;35021,65965 -vugwCyfb;84997,9756 -dQkddywx;23542,39304 -sxIVJRqH;35127,23090 -FnBgxRmz;62385,12808 -PANkANqj;25722,6645 -JNSZSMGx;37341,43313 -CCKJorpG;74527,66498 -eOOHILnp;38094,23382 -SJIsmRef;74549,67990 -ngYHEMtG;89752,49227 -lvnjsLax;41897,41140 -GJuSYERF;14753,35478 -qrrVIpoX;83905,3817 -IoPqmXpj;19443,74693 -ktKLZoqv;39411,41495 -TMIIBFms;65884,3182 -hWphRkUr;38321,70847 -DqARBkpQ;30460,27482 -OKvDduPC;24626,51008 -gfqBOWnf;23400,70651 -tnkKmWCR;82546,13614 -gPyuQRhK;83134,89446 -SHBVUUPp;27843,52348 -RwHEEyQm;15825,60413 -tRglmGyG;62108,75194 -lJYvqVDR;11729,31219 -HcSJOXql;59480,17659 -QmJMijlS;33242,80937 -flFvATCy;40839,79979 -dEDxWwpz;34827,55693 -LhIUwQwu;36882,75144 -aFDhkAFc;85567,11370 -lWVTUfjS;5754,78873 -iZIGIqTG;53876,4097 -tmPqvNYL;85909,33173 -TvmkoSKg;69085,6847 -RZIfXnnP;80613,80195 -vZmhkTWR;33196,17337 -NNLWNmij;87457,11530 -uMVitQBV;78824,87590 -dArCvCrd;89599,77776 -vZKTMzYU;72511,83543 -IRkgjgst;6545,30473 -izpgmjeE;2533,33688 -UKYiHQJt;89585,45764 -TlDuWWav;27619,31031 -MbmIyTvG;64299,72649 -vLkKJWUW;83467,50803 -kFURfBYs;57816,50319 -rQJTjqfs;31011,13066 -TgKsKhAJ;1118,69020 -XuoicCgz;1507,24005 -YvWAQHlz;32418,46990 -tdlQuROn;31738,27281 -MJrRxXZk;42775,5428 -DYKWHPZt;78839,42966 -lzGAVBoO;64456,45370 -mLJglplD;41786,84440 -VULajWqv;68898,72625 -bhTmxKSH;49176,56894 -vxgUlqfS;52752,12688 -wyZUbDOT;30131,57292 -cyWIpvvH;52706,79992 -ODYfblWz;46532,82725 -JTBQoCta;42143,30858 -vbacrrTl;84410,9915 -AStuoFKk;80298,1844 -YZOZoazN;6510,64292 -LYDwyfMW;89275,66126 -bLvmfKdO;23021,23489 -vJDjweDx;43365,58454 -McISGaTe;42018,55324 -FDkqFbnZ;66763,42044 -szmjeTpF;18810,67792 -hWTESLoa;21906,62160 -JAVAzSfz;84218,63809 -WQtkcXcV;69005,71560 -qlUaMqaE;47160,73738 -nJPQnQEZ;36997,37282 -eRWGYscP;68342,1226 -ejKCSMZn;3653,27849 -xpPGCfeW;30259,53984 -SUvDzpze;68081,80235 -CWHbKOUV;76358,17789 -unDyIuPP;29775,39775 -cInPuyWT;63544,15739 -BAPiJXYO;80605,76105 -XSNonBMZ;54502,66320 -ctBHRrQj;37068,65416 -PSFHGUZe;59057,32574 -LAvnnNip;86677,81348 -MhfEVcEl;7035,44110 -pwunMuxZ;46004,18885 -KBVewXAr;77720,75037 -lwpRbFUv;26789,14438 -JxrtSOxs;15205,64712 -AePrmtQd;5771,20111 -QUqamsZz;77791,74164 -zvAUrbqv;4956,29235 -ansMEMQP;87150,64157 -dUhlKMpw;63177,28029 -lLDZxnSg;81277,75345 -VzWmCxJf;20019,78506 -fMLGYqpw;22895,8183 -ybLOFADU;78137,74077 -kmpDgoGa;81920,69528 -kLWEoRdH;45304,70827 -xbLIehKb;22155,22087 -MlzILIPM;60075,41214 -SQRBTUqQ;25643,79165 -lUpndLzy;49639,51754 -ZbnhqqaR;49446,40888 -znoITUQa;57462,25983 -twHtnJvB;79079,8984 -zDMpMfBL;72214,69955 -sMcxrtgE;20551,77976 -UOnbIBvQ;41083,63343 -FltszyhO;83927,50134 -UVmFuEfY;40359,71873 -cLUkegmD;24264,13155 -jwGvQrvU;36741,68352 -ANytXtAl;87954,29323 -QhSAYdWB;87520,39573 -EDHieWZm;69111,61071 -TlFTSsTZ;75129,78653 -fPfaaIOK;41347,20714 -GFKoLcbQ;44692,18455 -DSujxTvu;17100,26205 -ezqUhoWO;68459,86440 -eAEZSWjr;27712,79224 -wCjdGbVf;62093,81222 -VXElCjLm;15111,41430 -GYSigBZB;54273,12509 -wBlqBPja;48204,55171 -YyiKmsjO;15740,23328 -pYGCpuMJ;47445,36125 -jKrcNvqy;10243,4245 -PUJvnYtS;38799,25727 -YprGWfBf;14263,83668 -SylyUarw;45849,34399 -prbSrPIW;50835,57254 -MaTfpEik;27415,69645 -YydewKJC;35273,18603 -LxuDZiXo;1070,72924 -InrUfkpQ;77495,80636 -pbDQZKXU;48281,25877 -hMEASLAB;27890,82137 -ejXTGBiu;87967,61910 -BysOOweV;64118,70906 -ngweZVQQ;39365,81963 -LsfeopfJ;56271,32235 -MVpoqsLx;72712,48131 -OmwUCDnL;68333,47902 -LalzpxiM;42144,65495 -sfaSZfPv;46059,66342 -aKWQHyCC;29726,12346 -OoTHonrA;69324,58447 -GAaUcMvX;66219,50653 -cttNRKmB;77707,79811 -fuYrTNZd;31823,37231 -ifJkTwdI;33742,38955 -sPGupMSf;73595,3473 -BuJXZNBp;83619,66014 -GNYWzeLy;31125,71569 -UrynhtnT;40561,67705 -EFOknsGE;57782,36762 -vQerpsXk;8121,79205 -yDOyCBRt;76354,41800 -RcJnHVvD;81872,69229 -ZKVjSAIu;79069,45998 -eNqulCQf;31417,67244 -FsOVPKPS;11710,89600 -mUKjbBUc;76137,60493 -OnnMBZkO;38246,57400 -EWMQtGPf;15502,18646 -RVCaGqZh;10081,54430 -KdSKSngK;8997,87182 -GDuKHkZZ;30938,10806 -ISyEPgrZ;41254,31447 -dbCIoGaO;2781,31021 -YspJuvCW;3565,14274 -bmYhnRHj;68158,57491 -opSSDCGE;68079,65519 -xuxjuvCg;33486,14455 -yrOFvTbQ;19699,15811 -icxzIFiA;84776,24243 -inSnvHpR;49536,12748 -XeNxvYZf;68227,28376 -UdOKDxdK;73189,89970 -qrGJcZZW;56699,30211 -xJFlPwDK;7905,27237 -QZMjRQoN;19291,66000 -LCctlsas;31918,85478 -hDxpYexy;24885,6428 -Wodmeswh;28338,45718 -gLplnqqN;28765,13607 -rElXqCLf;42345,64611 -eFlviYQD;58741,19729 -bBkVcuTI;57637,42451 -UCaMwPLV;48326,54763 -BlPRFtZp;54737,53906 -zoyKTyIa;64425,16564 -GdRMGqEp;36192,14108 -gGprBuZK;59636,11032 -WrkfxgOz;59460,40499 -rurqmtZx;35628,59581 -JAgQKuuk;73108,1069 -TKqVZUgP;22847,58773 -XzssBIUl;35104,44091 -xdFpyHsb;77890,39860 -OHcgZHYe;80554,73241 -BedVKxnd;61103,29407 -IrGzTfjX;74143,52005 -VaWkTJsZ;86056,3133 -GOngjNDs;34749,11312 -rGUBYANv;19473,13540 -KXylUYAM;52364,45213 -QZGGHrSw;40605,84793 -EpBLcTzx;56391,71412 -nQVVSdpJ;20713,31156 -GsSNoHsl;64555,57386 -WBgkRzmd;86505,46651 -aqsCNJoG;24383,17931 -kGXLqDKK;76033,77341 -EYDEELKa;75285,32092 -CqcslQkh;35598,85353 -FqIFTWHJ;12504,4313 -frtLjCTl;26247,48576 -NHijFiim;82679,21557 -CEawzHWn;78327,72824 -tTghRtwt;46796,80999 -FJRlmnsN;65551,49005 -ioSmzcjM;50541,6626 -CUaZYZGX;64536,36312 -LUdWuBmN;51968,40341 -CVJbYQQF;39891,36024 -uuIgAllT;80818,49306 -pgmxOOCv;14717,25182 -QnfiJLZe;14596,44256 -FejIwjjg;41313,72496 -jtpZYKVk;37675,84568 -PbHOfDWp;13085,32406 -riVRLwuV;84432,69554 -wpCwZqfc;79581,72804 -VAMZrvPs;4806,44151 -urqGIwFU;75841,78879 -kKXTxRhl;85137,67939 -IbkFNFjc;44250,67693 -jixkcfKt;4099,41058 -XPlrFBeS;4590,28423 -LjuUzeMW;33914,15255 -tzlJmkaD;22169,16674 -ibaOYmpj;37102,50691 -NGgpKmMb;44689,13543 -deoAscIX;63299,22357 -ANXpWJvO;38058,34087 -fcZjwiTw;75159,62053 -yzpblcDO;43461,73242 -fgwmulhE;25723,8981 -BdnvFDUW;34476,6792 -nqzCTZeM;27998,34673 -dMXphrCG;72795,89758 -tjufOCtp;25940,57956 -DZUcvXYT;41509,2004 -KulPdiwn;35473,1554 -KNGSuaFL;78518,86029 -aMcvKWcA;15224,71201 -meZmgMLN;47941,31186 -PCLGzLEQ;81221,69861 -fBcBBvXe;47847,54579 -NZVvvVjz;62967,4545 -HplohJKa;71082,57974 -mFubzuAg;44354,84771 -gLgveUyV;29844,55662 -KuOrIjhg;30773,8452 -DPYWnVEu;72445,45957 -QBnNoLIS;57652,72830 -dRZaQcyX;76953,3049 -KrVfBTlH;70629,71979 -fApHHUdW;33249,58192 -BVTZAAKf;28873,83589 -GIOjDvrm;42826,87873 -fSKLgrRl;33649,26328 -buMiadvI;45321,69143 -ZBYOGvGs;48864,84172 -FHkmIpMc;35081,41824 -QwlbksiN;79719,58647 -ZlDbOMgO;17868,15978 -zRVqUQql;37470,45806 -CwmwqzKa;34562,77949 -ppvQRgpN;83295,89775 -efSmvmGn;68267,9218 -hXrfKrus;10070,24432 -bvXrvYVA;6853,86470 -UsHlsFOb;78783,33060 -wJhIHbTk;89493,11049 -aDAVnJEc;23677,71144 -BshPMWNR;42464,17640 -grXqkCDD;71303,27480 -WYHkaTrq;72056,18341 -aNowSQRp;5077,52359 -hbZdJMoj;32483,40205 -YbbKtErl;15252,58456 -pasRrrvB;15372,13997 -hNrSAIpK;58247,66460 -TNjEHuVt;67332,63514 -nhUqqIkS;48731,66635 -uNvYvcAL;68693,57622 -ZGVrAseN;74624,75910 -mmYtVbkx;19771,22840 -KIrvBVkx;77667,28084 -PQcvVCrU;32316,73747 -YYeOEtxY;4554,34054 -jxBAYyVy;6259,19288 -oLjqqtEk;85919,52727 -ItBGvcLb;4422,50377 -gsBmIBKC;1215,11876 -ayckMkRD;43375,61950 -QdeeSzER;55281,21991 -dzzVUWyl;85546,87673 -kciKzZfs;56015,82657 -ovKLVvvD;15494,4789 -JmvCbYfJ;53690,3349 -TWWOWvFh;35053,9411 -pJvsYIlK;37555,21033 -HbrkKJrc;51194,66541 -gveSaKLL;86673,16579 -xEKAbsVi;47686,56984 -KQNYyKNu;56814,50741 -Cscjhmmu;28239,75206 -DnCJDGPU;3974,2911 -JqPlvtSI;63168,34753 -BDETngmu;72305,87489 -GUGgmvHk;16298,45269 -sFlZfsXt;4491,23155 -ZVjlRVxN;26968,3758 -MiShdQmb;43027,54514 -stHUVzHX;47717,61021 -QJFPoBvD;35894,63739 -sgNHyNrR;2547,10322 -KTGKKNKp;8762,85579 -wEUbHCdR;20877,45220 -hsqQPNqn;55410,67524 -lSPWnTsQ;71367,4242 -sgQnoLGy;28182,37649 -TXNlXTLb;21889,59635 -ApLCeeUK;49698,68251 -svEHyTkq;74789,13932 -xpPcnHdm;33652,50800 -vsqOdZdh;61069,37624 -cSNuDeaH;5670,14304 -lSOzqgPW;44748,23215 -lZUszIVH;41787,1214 -SJhCZbCw;74875,15812 -vdyjqJkS;53848,4765 -LUFyYntn;80326,67682 -sRUCPrsX;37613,9753 -gwBTyMcl;73643,35567 -DimyfsDY;71187,83042 -QbyffTpi;80315,79570 -HqRslJkZ;62919,74150 -QvNNEArF;71739,40063 -qwRNsDpy;87946,64660 -SnZApmhh;66256,42363 -HXTBaLnO;33804,12426 -EqeFuIsy;85912,6001 -wgLWsgBC;25954,85998 -MbllVqvh;16751,17260 -VbEXVNuP;33336,67639 -XAWGcuTe;2888,80484 -MolqqcWG;54825,84399 -XhsIkzYs;34906,24922 -QLvUIhTb;46901,11040 -FuCinTTt;50902,34938 -CiwiCqCu;30949,64202 -BeZLpaGU;70608,6281 -kbiMieoG;63887,47464 -elhIbFsQ;67130,82665 -OEzPtIfu;47267,66152 -GQKUNOob;56632,42671 -gyCROSkg;58127,7111 -jHIqWhmz;79166,38494 -oaFgFkyq;23413,74475 -uzeSuYFc;10940,28453 -qGaMlsXx;89993,85786 -frPPxTOh;14894,22678 -JldImgFz;57223,7265 -iQCSiIgf;9950,2375 -KYaVzrTB;78075,84782 -XqSsJPsx;38822,61904 -apeAznDE;3462,74986 -DPsXuzEp;50844,10487 -uVnUxmJH;33415,34433 -THwctCtl;75292,86208 -HaQxoWXq;79972,11928 -QMsFMubY;88343,9396 -ZYLYXodh;11826,83176 -amKOCGss;13032,43081 -qKomCGzj;62123,72943 -jCjFTSTC;38303,88869 -QLwSfVLN;66139,84891 -xZrqoIeo;76965,28130 -KzrEQGjX;45652,34505 -TlkcjWkc;68307,17469 -DYRmQJFl;82610,56417 -BxTpLrNQ;19464,64605 -EXckNYQr;31621,31298 -JPugqAIZ;45638,85412 -prvaRPSQ;66727,75949 -tCUWJQWs;35185,1338 -zoePXjBc;54595,61582 -DSBICbZC;67192,11086 -XHsmrYVZ;21891,36734 -lhDUdFEs;83609,20117 -beIjJros;3985,39279 -tjioqfOu;26003,85257 -annjDNWa;60578,23445 -RhvNAEbN;19483,88144 -BViIfnan;67542,28546 -cWNsgHts;78367,3798 -PBogcntH;16565,38748 -BLyjBsuu;42060,68539 -ECVUCgll;84552,59055 -LbUygUZG;49247,41464 -AfpCTyxC;78779,30608 -EyuYVmvX;81157,16065 -uYaAfMFU;19756,66318 -VuiDiVos;38533,6614 -BzWNqCMQ;18051,54504 -daVOZCeS;34749,68853 -yInZuEvL;39197,54105 -rttVoJGw;8579,65555 -NgROXCBZ;27868,70751 -uaYiYBch;4124,61421 -XLefcCCH;10671,42849 -FCzqYsFq;75612,83091 -tvoXjujJ;28396,33654 -xrCEoUFj;40680,17226 -oLRdOXKj;42860,76226 -toJDwvcK;51182,30493 -yzrDKrKW;76667,12268 -eUGtTvMo;78880,20508 -mOaSUJXT;51201,20563 -xdstBRbN;60765,52627 -wfLQZzBu;24659,76285 -eXvOgmuT;12560,15437 -jTwOZhrd;53893,49207 -NVULSQrC;38404,61035 -bYzkKDHh;76713,80551 -LThpiSrj;17898,43795 -kFDRfRLH;39057,52311 -zyJmrUfH;23369,51933 -QRUTnVOx;62542,57592 -GjWNvzsL;79715,21475 -ndhHZlsu;80875,68404 -VTOUcFYa;63073,41366 -fXRtPjYa;62641,65533 -sDbeeszl;19158,83565 -URRRaSrx;7097,76041 -MdYNaSke;44572,58478 -rpRYSpJu;84147,80819 -oEVNqmDp;61585,72646 -RdtWZwBv;45708,36214 -MibxAeLq;1268,24517 -jYnVLcWq;64811,46653 -YuHbtaCh;85381,57700 -AfugdVCR;82122,39410 -tEUzhuDt;23726,78905 -EpDxPiFV;25792,46070 -iBcmtpPs;27728,82315 -sZnIFACG;14756,21598 -UtcobmbD;44242,85268 -cXKkEzJl;17844,9025 -tjntbhpv;14836,45617 -iEthuHlv;67094,63728 -iPwvVAMe;10809,69279 -tEBFLgLL;65108,15399 -ntjBXKLk;50458,21109 -fmVMBbyS;86325,78904 -gzJODMdp;79312,39075 -jgcPZmZJ;22379,35985 -PmCfrrKE;12795,65356 -uzKOaGiP;44727,86487 -xPGfQuJu;57341,19063 -YiYgbKcE;70949,83818 -TpybzSzY;2745,24507 -vpAwXRFo;33132,53724 -HzVqpzFo;34399,80306 -WHttAcVQ;19973,62898 -pynsKSzX;78015,3841 -rpGuuStz;19387,26429 -PVKNayzL;15259,83144 -yaakCYfw;15342,40616 -wlqCuJlA;18719,30686 -eFSJaAzU;23615,77469 -RVvjeqss;41704,66972 -bWGoqEFy;22048,74405 -pHyGjmUF;49215,15708 -TAsuVGFf;74289,43215 -LffCEmYZ;28072,21769 -cgbkixPN;69663,71139 -pzZmlYPa;6615,29657 -OzqYgCHT;73347,16769 -KJCgSllu;45133,27972 -TESKmWnv;61929,5985 -tZTaCjmk;8454,38816 -OboZFmfk;61491,26958 -ZwvtqHVh;34821,49605 -lZWbhxEg;19112,79994 -BhVxpRAo;33998,22298 -xjNLbETh;62232,9410 -jwYyQkFG;68051,47786 -hSZBeahp;76579,68523 -tidkFIpk;40881,19211 -IcbbulXU;4568,36194 -BqHaSVUY;84148,34006 -qkErqwUt;6559,34208 -aAcvxrmO;25659,44714 -nzAzvhda;72234,28335 -fGnQbqGN;51156,28492 -LTWSioIf;14122,78874 -nMHsSWEj;21370,27846 -PwJhCalz;40447,80445 -cKjoIvUh;13076,64584 -kGjTJNhk;57827,30287 -sGoxUUiS;81361,28322 -NESYczmB;41569,46337 -MQROwWjb;33677,87500 -ZTiSfEEh;16415,25621 -EAzaWlGs;3409,88807 -OLDDFgHN;11976,40312 -bfInuVVM;47340,83159 -nbfTTGAw;28632,75608 -YhjKHJNS;15120,16661 -WKhgcOSq;14546,73442 -uUuRPUkS;29375,86920 -TrfVQmuC;77323,41764 -SvVXWkBD;75706,1739 -InbIOyxf;65230,17217 -RMLiJuLY;41948,42379 -RcrMWnAF;1987,15252 -XsChbkaF;64935,21582 -vkszMaXU;76675,5199 -bIYNDLIY;18652,78334 -hGWxrpFm;64078,61604 -XaDTuDfS;58728,84520 -vATwAlrP;47187,51081 -qusXzjyT;81231,61408 -ajTEftEp;12470,34841 -tbsvMNQh;86440,63873 -zYRDqlEu;37575,58288 -UQEVnule;19560,63228 -nEzwONzs;49899,77058 -LQwTcNgc;89289,5366 -zXHIPeBA;53336,65840 -AUPZJvUW;4279,32935 -QgOjtUJa;81708,72758 -hpqeBlAD;9063,55773 -VWutfzdO;79524,20348 -LYXJMnFw;55017,32910 -KAeguITw;64203,37621 -DVZWgXfN;70133,25025 -EkuIpork;84933,19925 -NFKTBemO;83526,6825 -miVVugos;29344,28655 -tdHEiTor;16312,50302 -fTHSqJUN;6113,11725 -zyQehSAO;87542,59328 -BUNgxOIE;43051,45465 -XRRPUjCB;87747,43056 -QusNHaVV;69453,14607 -lglMrPoM;33870,23015 -GrijUcnq;73012,61113 -hloSYwxc;18774,69943 -mtETRTjs;70508,30391 -uBQhGuqv;58066,70109 -QEeYspWc;59322,39233 -EmfNEhLL;47904,19482 -BXXmcBtT;65838,9138 -honkwMvD;82670,62710 -ZjsFusXB;28546,79048 -SIuwpHEQ;22659,60646 -QVEIlrqA;22388,4140 -BbQCVxSN;33736,12400 -KtgOZiJj;80324,15546 -RMQltILr;28386,35915 -XVbVnjEv;66427,69723 -oeGGnrYR;35835,84042 -ejupiEFM;86810,83807 -vajsIbej;30557,20459 -GrWjjGOL;30842,77792 -oKNOYBpX;18633,24895 -ixjRQuAK;16211,5239 -OOhPbUqu;1929,53028 -qLVRVrqx;22088,65863 -sIBXHJAN;74440,2212 -fsFsNwNX;21470,39054 -hizUuXZO;81973,48929 -elGeOAHJ;76579,11484 -yqBFqaeL;46473,29590 -LsfWLzua;34018,67679 -DFNfPMjm;70889,46818 -HxCNuBDI;53157,86637 -BYcyPoro;37135,60890 -FsQoVkyq;16162,85501 -FeAKSJZZ;50764,7156 -axqDkvzP;5593,77589 -IjusYhpL;53488,89394 -HbXOJWav;14146,7752 -rLWvUbHa;64456,56138 -RzPDuDuy;34357,77644 -XBJjRvaC;73791,66351 -eOJCYGRk;42887,25022 -nUUDKruv;74613,79591 -lhFjdOKZ;51630,36960 -cNyFdzcn;19846,41255 -ktuMFFfM;30950,44485 -GgIJnpTv;17442,18594 -yrtQqJxe;55711,51546 -FAIsDWct;60247,35994 -NwJFNyrS;37631,67672 -oDoSuaWH;65322,88178 -NokUyNlT;5488,84182 -YZZaKvWA;26703,38991 -bOErPVIQ;27695,87159 -DsDDwiSo;7895,16326 -SiHWlWeL;20519,76885 -mGrdVtuu;58516,88406 -CcdVDWYf;26045,30122 -mbtFPzUi;47686,20880 -exyBuzHU;31432,33009 -FSAtNOyf;89088,71340 -tEdBZIyk;49807,74193 -OMFdLAAL;45994,22961 -mafBqZGY;37513,47474 -HzrtIMwj;64550,83584 -TWXnnORN;36221,68989 -dNxgeYOk;43652,11537 -wNYaiuug;65875,80350 -OfCeSRbx;69312,35987 -jMoBtOvv;25360,44392 -uwLqapWP;68291,4799 -SGzucnHz;68341,28890 -XvfVxsdQ;2319,37649 -DzGJsVmp;89997,5756 -iUFTvclw;37899,77845 -rndpRUqw;20937,53901 -ZirRrKXn;28328,54852 -HtbzCDlF;27111,1953 -dEmFCGpb;3742,67983 -eVSeRGfy;57906,2786 -eekQGEqQ;10901,3149 -XCICyfrW;33019,79242 -dQeiSieL;51314,61300 -ShYaoqrs;63873,71039 -DvCwGSPT;57236,67562 -cyxaMVwr;45772,16049 -mNDLjPof;53862,82983 -tsxsFRZj;33959,83532 -TqieWdMj;52572,87615 -GFIFbgTJ;71283,26452 -yrTtxBYG;21927,25551 -FFhDDCMN;69744,57428 -XpFHTHiG;78420,23805 -fiqGWwHM;31940,73159 -XnUXKLlB;34488,79525 -hlVplaTS;10439,71727 -LFdlghfN;12967,3523 -tNlKJpMt;69477,36661 -fuIlZwne;42673,79724 -Btegpkbi;27398,79551 -cscoBCMu;53682,13376 -NDMynnLo;13966,45282 -DVpAxRQe;47097,64838 -fsGNGttH;67408,17197 -ahdneLaf;46119,24304 -YNbWiFgB;63707,2452 -agbVHIZs;1530,82395 -snwpqlva;45165,51362 -QRvaiHgr;8757,69488 -gMOZiSPg;3568,12628 -zVbruKCZ;71834,54884 -yfzFjZbk;4954,4002 -vbPXNnCv;5414,27227 -urYLXHPB;67888,56755 -tFnsMnNs;57959,14667 -vJxmgPKM;57075,51675 -CiSeoTKM;33122,82270 -zoFCutAC;7055,77826 -dZRwfLLO;86721,24380 -hnKYmNUV;15157,25905 -xkVgQDhI;40562,57623 -guODexkD;26325,59567 -JYoPRLOY;23896,54822 -qukiPvBk;35342,37028 -xvQXpAUa;67178,14578 -YxTEVWLq;30734,3320 -eHAKVqfh;39993,16104 -HRmrtiyp;76730,24430 -ZRriyOrz;46714,78813 -GUqhbavY;25451,21203 -owQqVxTI;69526,70754 -vdoIcFOB;23883,30260 -jFXVWukb;87634,71041 -PfSrzKLA;3978,35123 -XNiODPeX;52628,72214 -RTqiRQqC;43011,60641 -PBfbMrdC;49004,82823 -CJjbCvzH;22082,52544 -QFMyuFBg;39626,73732 -HzDcrIjO;61029,63103 -GdaRJukm;33238,18174 -HtntECyB;33926,17310 -yJgEmweN;88913,17211 -LgfidFxn;45441,41505 -bRHqfFlx;26068,85975 -EApVskkh;26955,68957 -ZMKOrSnH;78564,55167 -KJKUURzK;75782,25374 -ZmKDkrLi;47584,76830 -QbbBeTrH;19237,42468 -behAiFRr;87725,66528 -LIRDIRdU;36487,68149 -JnnBlngG;63519,3008 -RaSyvyHp;17628,45590 -dPAZOrHQ;22970,11394 -eJNaaAuV;56042,45497 -KTxdtbIe;22663,66848 -xvSrYOXT;4653,21369 -VBttaqcI;13705,15852 -HaMjiZoD;40622,9014 -SLHPMMap;52115,87356 -tJMJeRTK;63947,48287 -ErewWKxH;15755,14055 -tRgxzPTE;47472,86897 -rktpgLmK;26130,86602 -QiukUoPu;28278,39019 -eHcnYNVy;23191,4994 -rtnyEVla;9620,6911 -qCUVHrmc;54594,61903 -GytkvdPc;29885,52540 -KVjZBcMM;66094,1859 -UCFSXxJO;68979,63847 -CpYXtDSG;62400,76821 -UwnqxLWX;10408,82520 -eNycUGCK;28154,82494 -lSORqSSD;43432,42370 -yhAVzBup;47531,79672 -QLGfeGEt;82681,39555 -EzoJmurz;6084,9669 -uiHtfpJb;48410,7759 -emwbaJYe;83159,73041 -wDrYGIHj;28664,23520 -OfKBNxBj;30005,14179 -QSlMxMzx;68558,52332 -oaJDIsCQ;70007,60383 -fCozvRrP;79185,62554 -PTXSlMBp;36007,16730 -llsyMtWy;87652,40820 -qTSfCFtL;38447,68310 -fEyZiEGs;6320,3034 -GIovHujc;75035,89062 -suCwWdrX;29015,1407 -BoiwMWHn;55655,5782 -VozLZaGJ;52723,65702 -HBHCtJJB;78485,20520 -DGJXKYFT;54532,18838 -pmeXyLAn;45764,34639 -mczxAgKu;47776,41764 -Hkhiyvsj;25393,52588 -buvPptvy;55628,72981 -VSDCqzsi;47473,55866 -JxaiMvrl;14510,46617 -FYjPMTKY;7819,2656 -irrtiQAs;77341,80493 -WPVJQqGA;44039,23788 -pCVPHuwN;38075,19535 -EjnyQlXd;16561,76532 -OgDCYycB;83979,25580 -mqaHcthv;55929,70559 -QbYdlUOC;83954,51620 -wjuBecHe;40478,39765 -ZlWgQhPm;14718,15963 -KpoGdHuf;75229,78876 -IEkdzYVO;75102,72477 -ZXqAomqb;31283,30654 -TIWBIJjl;64079,79460 -MYqQlBvO;59198,30915 -oqlQbeqA;8313,5399 -acODGylf;9834,72161 -bYotbYUI;1651,68091 -WFhACIvE;2159,86279 -NCyNAXgC;78512,30884 -ePeWjksn;62394,4300 -GtCSEHgl;57395,12951 -fNWYnVEZ;35666,70610 -iBRUskEV;83186,56077 -ODNJKqWF;83472,88016 -WLkXyRGe;74302,42771 -IUYltdnB;12063,50135 -LZQPRdFA;28680,53188 -DAIcluAF;34376,65689 -vFVgmbju;67284,9338 -YnNLxreV;89262,13734 -CeaKuKSY;49568,17219 -xkvXTuKa;70609,46856 -VmhxSLqm;73261,28030 -qHqlVOAk;56694,80137 -yCVaSkuP;44252,88472 -YcqBYljO;31077,26250 -rfMVxsGP;43810,82408 -twwYwCAc;42299,33422 -ZgZNIDqe;44372,1373 -fNZWWQQW;80073,34861 -ijqiojMb;46140,43610 -foLVlTki;28315,46103 -hYwShteQ;70976,62739 -nyZiBqXX;4755,21641 -RelGOQiH;12597,80196 -nqKGXBld;21114,28225 -YcyPgrZQ;52998,40044 -ObpSkTfA;87750,26184 -OGOpoHdT;14394,30234 -fBusuOTc;30395,71129 -yUKZvOpu;70451,28773 -oICPHfAN;33827,8477 -bNcFJGzf;84124,6606 -KzLSMNPi;83305,25718 -vEWsxkRt;40990,46748 -EPJddwhF;60617,66789 -dloKJdrs;61942,36040 -XbRCwulj;88486,24007 -yvisbUJH;33724,23433 -CwMeaZAi;1962,26382 -OrsopGPn;42141,17579 -LreQjRLj;44606,59387 -JqnXPwpR;29770,13376 -pJCYTyEH;51818,80258 -ocsgJMQM;40018,50202 -nddhEyYY;21103,25625 -IWOLuvJs;83555,51018 -zzwqMSiM;22434,69703 -GKIevCrr;5920,31387 -ZghQYvnh;25455,23241 -udqbgHEA;32205,31746 -CrWghEwZ;81775,64370 -CbFfKZio;7707,41248 -iPLupfYT;87344,78303 -uMTwszAH;74106,9740 -rctyfZCA;51553,88031 -udikGhrC;60803,65005 -zfBdzFli;86444,27997 -NnLurjel;27966,60000 -gMEKlvLv;1808,57925 -eHmOzYSX;39870,35520 -KPftSquk;15928,37893 -ZihrASbI;79984,58365 -atpFWVDR;88257,65350 -RNBwNNmm;59620,85950 -GkJnSMlP;44073,70233 -MEjEXMYa;14933,57156 -IPstSmGz;5726,8030 -nmIcZAwO;32252,51697 -sxgfpNcc;45311,84585 -FqlfjQto;61736,29822 -EfGOJumW;19004,68552 -YdRwXTGG;2795,79926 -hyHoTEOg;44874,31315 -PSOyjeFb;43376,69160 -gUeTnLSB;77584,48672 -VhCbLkxG;82624,20852 -SdbPsllS;17354,27933 -szRtYXlh;72132,87154 -qufCgFUP;13464,22480 -xNYawjBQ;49557,56589 -nKgTTNDo;79994,16028 -ReNmpCyI;46422,49046 -kWpMulfs;84827,86331 -bWEkYjwY;81885,53374 -iTtAzGQt;58349,85696 -QktkVTWq;74521,86530 -vffjYdBR;85791,14159 -kiaqXPDs;49236,66618 -EFIFYeyR;20790,13070 -ritzRIrk;43355,58631 -JCjthUED;84407,29679 -MoHasWdB;60725,1521 -UrNaLaFd;86922,85706 -WRJURdLC;64008,32315 -XTADvumJ;3156,22789 -aZPZxfbd;40803,18242 -ClCDlvJl;57869,17464 -lLNfPXSr;58921,70287 -FBpSMAgk;12709,22472 -ordWxcgk;19578,86540 -yKSEjYtr;70493,26864 -HGiNyecp;67183,14196 -iuuAFspW;31460,38810 -hdHbSQqL;80670,78571 -kPoCctCv;83995,12981 -OMecLOQj;16233,33481 -sxkmaVyf;46045,49754 -UXWpIOBo;52675,30497 -hKnCLkCj;80656,17009 -oNhNDQTb;89512,80788 -FIBakoqt;23637,71756 -ikNKDdft;65247,44640 -LMoQhbBC;70907,18225 -YkPPNNaJ;14826,18723 -rSCihOUa;12165,23225 -qSRRciMM;14182,58223 -fZzwDQaP;1068,61452 -JgQxXnTy;7093,60038 -KfKauHHf;9214,67915 -tbiJgLJZ;81504,41463 -YuTdEeuf;8517,24552 -mqihlOVm;8762,43699 -rcLnKoTN;48383,1170 -KoxGXJGq;46346,70566 -yNYwmznT;15231,26337 -HAqJVXFb;63739,54320 -hlrHduWD;5549,52542 -CMxWhShw;57395,7392 -YineBBXN;71257,20298 -EKwEworK;54738,44443 -LXKIyIUo;17347,22233 -RGecpATn;37479,19200 -myIUmhBu;59357,81234 -VsLNxxcv;40276,28899 -ZEsaFQNE;48053,23968 -RbOunkBH;53545,35638 -GmIjQuNl;36646,79403 -vEfftoix;24157,61712 -AExWSWOs;63922,71611 -NfDiGhub;22137,85573 -cbuMKWXY;61288,79660 -gbzlMRFa;64725,73660 -RfnDtxDE;52312,33037 -xjTINSQK;25807,21038 -pDfEcfZa;41010,52545 -ZouJQblB;51126,55716 -bAnRxeIu;84111,8673 -XPNxEVhn;82998,56455 -gopJDFGn;29134,7857 -qRTULzpy;60166,54301 -zbNTdjCb;2158,71385 -qAhitNnY;8170,73980 -rNSXTYEs;32290,73574 -gKLUavZU;53756,69502 -QxiEmiSz;24684,64570 -TUdTKfIO;44815,20733 -fruqBiiW;58441,14617 -bMbvjPLh;58655,10102 -sAPFpVvO;31678,5248 -BLwqAGUu;8758,87659 -hteOOWvJ;13821,43368 -mIvfuWHG;64400,2387 -bAZliawv;43969,55035 -GhmWdrrg;45792,39334 -skpDpRrV;36490,31302 -EsyzrHuG;79290,6201 -ghdLUKyK;40832,38612 -tFlsrjQQ;7481,11660 -syBJFoav;44436,68771 -NnVKqTMz;62842,38338 -gmZFUcNh;82538,8635 -NjPXyAYb;67738,5734 -fdMXTIsT;12072,54247 -FHhVRBER;7861,34476 -lfNQTHJl;4905,37292 -vFyaEBMz;37663,40220 -SXfotJHC;33905,57447 -aqoNmmwV;22268,65752 -OMeKZqcX;14748,27048 -tOpNCNuc;76217,56684 -YMqATCgP;84058,21781 -icZFeqys;53917,86019 -jVQTXqcK;55182,79050 -gIPsrIlc;76447,44047 -hDgVOTsX;23511,13943 -zlHexogS;51833,83150 -fMhyXVqI;32151,12274 -NYlhifnt;25705,84353 -IeAdIlsU;8392,14518 -ssCCqCfI;17281,70742 -CKUmDbHG;7599,88777 -vgxBBVPI;86538,83557 -HOirMzaP;29881,8219 -escitoKj;69915,70659 -zGguQtfM;43106,66032 -JdDygFLn;45395,28304 -coxKwQGV;29237,81554 -gqeYImPA;61854,29390 -MTkLYEks;8307,87038 -lhJjCAlL;89076,9433 -lwBxalLR;59957,3577 -iPjLGtIN;80682,71735 -EKfcmUWF;46031,84074 -KLeYwfEo;56134,7484 -KtrgFzqh;6447,31535 -IByjNGIZ;33748,86773 -gtOUMDPp;12612,41489 -OUUozMmi;35611,70914 -eCFYMdPO;42699,33806 -AdyBArlx;30967,27580 -VLxWDnov;18442,4723 -TDXOqZXV;83051,61021 -RpPVQhUn;41557,39767 -TDJNlYLu;31647,66472 -VlpuqhxM;55495,54809 -zdaqNQvX;31650,58471 -wvfCaNer;21652,75933 -GxmvNUCY;49853,82769 -QKsNqZda;48653,62214 -UXmUDRFb;22075,61265 -OBIBKEpG;32057,39021 -jrHxSrCb;44755,62708 -WVhqoYeT;66360,79751 -oBdnkBTf;42346,43201 -MItMKtML;60346,11725 -ImhKEWQT;17677,27319 -hhCUFRZg;60737,28892 -sCeElZoi;30524,45276 -aZsKOZhh;31087,21315 -fpcNUcZF;2240,35890 -FGFgrZMG;33724,22982 -bIWDnChQ;86543,89462 -lcojvtIQ;34629,16145 -moOYmnon;34688,46273 -AwhVpsIq;63834,67078 -rePWYDZD;6896,32163 -GpqXvuaV;77851,77657 -vFOGVRgO;48757,61907 -viWPCYgc;42466,51686 -PMKCFJtu;11454,67207 -gYojBUuJ;77468,30163 -yoWeIGlH;3659,25530 -MGSGcpmC;37108,15361 -gQeMOhty;29445,5376 -gonrEYFJ;6215,81131 -xuPLfnVJ;88698,27350 -kgCSBaBN;51710,37545 -kiUjRGCJ;84295,69330 -XXGxlgZH;76927,49039 -EWxZtPjh;62355,22327 -ozewUjHj;17314,8709 -coQUwzWA;22743,36150 -pSBHHEay;77097,80702 -BuaepafD;54086,25672 -uVdILUrU;12150,14402 -QxIaVRqM;5939,61782 -LOjkzQMH;6921,39189 -uQdSPEfF;14944,48538 -OtFdWBZB;72920,33384 -IycnrfIq;61708,30462 -YaIXGXqL;75698,12658 -mZMqkdgO;32987,24346 -HzSZQyHc;25514,80552 -LpEilENi;64923,87853 -cUjrLZvx;88991,19760 -eyIkpcLk;25352,39306 -cohLxHDd;47136,57770 -nZeVeeCT;19388,52710 -AKUmddQI;14753,57541 -GgXVIucP;62041,31516 -qKQKlXxR;56282,67452 -WwyjDGzV;86069,19729 -ZahoKlRQ;70173,70416 -zBGLwieG;21609,52043 -XGmgtIDo;38688,66330 -yUFqlUno;6969,74634 -nzBvXsuH;17499,53548 -SopbcZQB;27556,34565 -ZWhBoBzE;19585,50914 -IhzZfzWK;89117,79536 -wulWElEE;11776,25258 -ANzxKELP;4989,19348 -LgYLDqIa;74283,23079 -YULwFNSt;54744,32945 -NuXOEjag;81254,21942 -YHTxqRPu;73143,6062 -JYGKfWVZ;83753,82795 -uwaXdbGK;71103,20152 -LYUTnZjG;1439,59119 -FImogGwX;66837,29864 -CYAhjWrY;84901,43963 -cpDnBGAo;51987,74158 -EEzvPMpH;2203,89442 -OQgXhFhc;86958,17586 -zhVpeynR;79168,40461 -TBoqzNnx;6616,4299 -ahSCKXga;33778,1097 -OCxJZEel;46311,52588 -hbEGrXpQ;48803,65026 -HrhZfmkM;27699,60619 -AczxREga;4078,50455 -WewUpgTc;60223,40857 -YBKbiAnM;2590,10502 -AvlBOxWQ;64451,89772 -xTIbbldT;55903,66437 -VUnODIaW;29625,17631 -DETYuBVJ;58013,13108 -JvUKdYlh;26650,51086 -SjlLACqR;37377,11131 -woamNdGX;72415,68013 -ShRfuNeN;59190,72505 -aZrlEdpN;78657,49925 -xuRBtpTb;4936,89708 -YVZKPLkb;87650,26885 -QQnNFEbP;30994,26978 -fjTsmwSS;47745,88680 -SjtXkcMh;23779,67109 -xwZkKHIv;21204,17985 -bqyeFbPW;41327,27320 -JoepidYk;78907,36519 -wjvVnHNw;35114,56084 -KubCgFBo;75370,43150 -xRObWryq;80794,29169 -aAerYNhJ;14409,58105 -PuQudMkV;38882,1706 -PoKIczAg;20245,13048 -ujOLBCKn;33385,69792 -qiAFZUfH;5689,76856 -ssdyrJhc;67517,26678 -ldxbJNNn;53035,88108 -oFxkevdI;3663,12587 -fSlvSyhX;75256,65091 -jMGvJDzl;1392,53825 -XtkcXzMf;31492,46396 -ziEZmMZV;31029,67107 -sVgkaTis;87332,26145 -pPQISWZZ;58566,49152 -zKWlUZnz;21779,26959 -BvrirrGK;10373,23349 -bgPrNUwo;2299,6750 -NFwdsnzW;72328,7857 -RjVJvwqm;18207,3903 -SnVkVpBA;78182,33425 -dQAggdpE;36730,75620 -XsdOzmYP;50686,32256 -ZngdCvIa;15259,52404 -OHMsVStP;20543,3262 -tTkHVPCz;1135,47619 -xsIujjua;18967,72709 -sHOsnsPK;82679,5845 -soLlgAQf;81893,77944 -nZgANhvA;86251,20724 -quQRTDtO;87650,82244 -ZddShGLZ;79843,84459 -TmBWGgzo;78691,54560 -bhrSDKCD;18787,71534 -HiDxsZaQ;83012,15370 -VoBkwDGk;74054,70397 -HFkoytln;60379,64182 -aaoXROxh;44630,14621 -lOpsGIRs;28690,41546 -mSWlCyur;4077,48276 -bnIjWSzY;52237,67223 -MPHnxigr;66737,52431 -kAhYOFXR;56048,44389 -EmvfrbtN;19448,52878 -UHEsYLLB;54205,57590 -AzNGRdTF;15786,36337 -lnpAguKW;19688,62683 -ssoRDTGj;78046,69893 -GLNqofHz;3445,37804 -pJVtRCbq;20044,36520 -jlvobpAK;9958,30854 -WvmyaRbc;21008,8596 -iKfZLEKr;87638,16214 -REttwdxk;46529,31441 -ADniPMyW;7552,85326 -xPAOiKpj;42775,61454 -ceZUWWQK;84803,29886 -qlthXrng;84065,59021 -MrHBXmgi;4030,56037 -MtqJakyf;85688,7695 -pOenRsSo;32616,71424 -lAntljEi;29163,63818 -TATpcLPD;65488,34802 -MlpLPyQO;1957,54858 -RQxzqicE;75851,27567 -cYSrtlzo;41559,76512 -tnQyfEKT;83901,67117 -ziNSElDu;62735,1078 -VtzqSQQx;88776,76801 -yZcurjsF;18884,75315 -hrDFRzjZ;43657,82914 -gpoqcovz;30930,2494 -rOmnTjvS;80345,75102 -exKCXURA;88706,76333 -FfDXcjxK;82188,19877 -QSuhCTcL;22425,45632 -NPQSEVFw;19869,50269 -YyUruDVF;56090,85866 -HgZwacCL;35627,7720 -TqAtSjjh;34405,44183 -SrVfvoma;26805,76526 -bCZTjeNU;41937,61135 -rIiTwyyE;63883,4194 -xVYhqvnQ;42598,33413 -rQVxkkru;12214,19799 -KJHmKtfS;33934,83745 -MildkrTB;52384,81421 -qnLNsoRk;23391,48846 -dZWMSLNi;84832,15623 -fwMtUrcG;38286,27508 -NLqBzqmt;52763,3006 -OqAutxHj;8803,55190 -YgayffpP;86676,16248 -idFTdmSE;64222,79333 -oKodMRuw;72331,7663 -ctVDFDDT;31651,32847 -zFPInmNc;41878,2014 -CfYvKPrD;71863,87994 -GHaqFHFW;64456,81881 -CuAlhNrH;17825,12156 -RNiIlAiI;24084,40459 -pfunnkYQ;40913,60424 -IrzbgRWA;57834,38938 -CResdsYi;60698,20548 -OtuscGku;25128,70818 -GrzuZvap;62697,68435 -EZkkGseL;69602,53362 -myzjdDdE;27867,33562 -gEGQkxCb;35167,31587 -NdHGDqjE;27839,28368 -flkWPVSJ;24782,19289 -EXnSqEMJ;49487,71964 -UexVDGaQ;4456,36023 -gTEsVoRH;73037,47814 -dWIvegXv;28737,17178 -fbaWRRoM;73458,9767 -ScVZqvSj;71285,2444 -DLDCYKgf;46599,71763 -pmwKosqV;54491,31207 -ZUncfzBs;74375,28286 -BbXIBhDs;67831,52188 -ruePXjZc;36388,10060 -gSKrCIgJ;73030,3220 -lewiKlRX;58697,64320 -toZVXNhi;89413,30581 -BEopdeFG;81155,86204 -TLrpJmJz;81700,42923 -osXetfqe;34594,62604 -wKyxnHTS;31188,84299 -mthtIbtC;16486,71681 -oRIYPvdE;35890,45610 -CbFvvOzq;20907,76452 -RttzdRvt;47253,62168 -MfIncuLZ;85877,22342 -UXBfefRs;6645,84704 -SKqlEmGW;65133,43836 -pIPNeOFh;75001,58548 -GjKrLXuc;32223,53246 -jYibHSXY;82287,3019 -vmPwKBIw;10134,44652 -bLfPiJyC;21753,57418 -HDPAqHpW;60686,63678 -XdtlzLJO;14569,62431 -mONZnkJS;12468,29695 -bKGxNzeT;87962,50660 -MWVMAKPx;68140,62967 -zRmrqfGs;31313,85069 -gLBaqUuI;56178,44141 -hYkWkCHC;72183,13346 -xIWbaQhr;11008,31785 -mzMJzOSK;34788,71102 -znOPzdnH;76721,53949 -FtKNQTiX;70301,71436 -hdcYegjL;64251,44061 -uJIgmJcE;14164,28832 -lKOweyha;82695,61727 -qqiJzQqK;71003,81045 -OURiNXkc;26137,51013 -SpuDbnPK;73786,81074 -XRgpHdGK;35856,59217 -rqApuYFY;59450,14632 -dtyUwWif;34652,77912 -pOgIPRcj;37254,25122 -CmrqOfLt;32610,87939 -rUAniMfa;10401,3289 -boItwcsP;21523,13337 -fceLkZYX;1338,70723 -MtZARTQX;60106,47788 -AFUVcvbG;17079,86320 -IFiWFqcq;21636,45131 -ktrRzFRZ;57840,85871 -lyhwuDuZ;6380,85940 -UCAMKOYc;36828,57404 -GIwVhpWJ;66685,81301 -CLZiJOCE;77445,48898 -clnNMkzN;32510,23176 -xfnOXUJD;59190,78369 -jSQDuVYl;76823,75639 -ViALNGdE;54769,84582 -DomuggTT;28070,70634 -koqFXnja;53410,71417 -rbfgEgAx;5231,15016 -dTGicuki;72409,24136 -RMwpcIfS;2846,5285 -dlGuIPqH;17590,12266 -PVozmHfY;72864,61467 -twNpQWui;50371,26567 -mWoISmuo;67467,8687 -GshwJsWY;41415,51191 -VPAMFJVk;1439,39896 -OxwkspVH;31604,21975 -nKXsjdnj;84585,57441 -tFQUUpdi;22825,82562 -RKGumjjF;19960,61619 -ukUSoBRA;84151,41093 -tVNUcshb;53023,49928 -jCoxVRKY;41850,66488 -YhOtSjiN;14951,52727 -qMXzefYb;12748,80159 -ckjsicyM;31231,57970 -rKPbjvMW;47830,84326 -XFHgzXkt;37678,39074 -vklLNepL;32865,55576 -DBDEMpTX;25517,68155 -wBbmcJnE;45424,36590 -JCGlWhTJ;75247,67418 -xxSGASlZ;42491,88754 -eWLOwbUp;32340,21293 -ZijzOzpK;60512,20983 -OUGLkleQ;22064,47379 -hRpWjKDG;37731,44678 -KMsFszYI;29493,41343 -dAFyBRsA;82078,27047 -FXYhgYhh;11696,48208 -JNjSTGSO;69864,2731 -LbLohGHo;19690,56971 -cvXGvRzz;24404,27916 -kzUUwTsE;78253,30961 -WJBykMQY;69426,35330 -CzelQxPD;27887,26662 -FXMHfMwx;71482,49840 -IFIkiPRY;79843,52699 -Wcgmbtrm;5894,53428 -MAyokvIi;45983,38353 -RGXrzRQU;76326,48015 -NUHOnQTS;9773,59984 -plwtRPiX;67056,37899 -aIRRgYMN;56986,20681 -snfOeCCO;81461,51013 -PfFoyptR;49675,11055 -JPlFGYNg;63586,68910 -iAlOAfDY;72136,38053 -xjmLMweE;67614,3246 -JRYXIfHu;2087,60375 -vfcdngma;83891,42910 -vHsrEFFC;87172,40212 -fLpZlOaV;24637,17996 -xKUBJpQL;80635,86714 -dWgVJsut;63113,86712 -frmNvNUN;51576,80145 -XPuWIPbh;85906,16508 -NfdmgfJr;50142,59021 -srmsgMMW;74167,3501 -hHsRNAPH;79783,63666 -yZFEiIKk;20251,28023 -AfTqLtXa;26645,16132 -iTdpaDTV;28153,86246 -cPGZordr;2052,69375 -cdwirhrD;67844,37285 -MmBPUlrI;17649,64144 -VPupaoMj;19574,65864 -pxJyhDjM;75437,25044 -zgdwsFow;49497,83133 -ZjkzgIsi;87728,31323 -VsvpQdxo;49696,73789 -OvQnhfVL;67173,9586 -yfMwkkCO;9929,78696 -mimnpUFK;1677,64826 -IkCEJRBL;42248,75527 -ukDKNSkj;22919,60128 -vUXhNeDP;1247,73991 -dGGLuvMz;32895,21857 -rUBFouve;14349,77684 -wdhYUTxA;15181,46878 -kVVxBUxr;3461,26203 -wkYmRYYj;17164,40077 -XLNiFnkT;87993,62752 -DQPSKLSV;84265,37652 -ZXVsLOmu;77429,7589 -hxcOfalm;74213,83717 -vDVAQeBa;78818,40558 -gxnSGxHL;73321,81908 -CbIoixsD;47586,49694 -LRXcIldk;77036,28170 -IcswJiWf;2656,23556 -UoCghjpH;43766,12962 -dYasshBr;78143,78734 -bfCmAflt;32217,89026 -kPRPGEDl;29413,31371 -ibBBhcjo;68286,64354 -uuUYvpTy;59865,60098 -vJNRbOEQ;49118,80905 -FHtxabHJ;52799,81688 -yOzCtoxR;34892,74597 -QASlnqfG;83425,4871 -SDzfzRiH;47815,43679 -XVoviIVf;88074,27207 -aslTKEhF;46475,81167 -nChrlHpw;54426,38699 -emJryEtC;80962,37794 -zKEWWIpO;41827,78806 -RlaKpijR;83756,61244 -RPCsQAyf;69765,7159 -hwxNBnAZ;41619,87040 -EicdlutV;26419,20308 -hQJSTXlZ;1105,52168 -JASBOQWE;49809,39903 -ybWoeduQ;66550,22624 -JJLKfRRB;1487,5624 -viaySokg;80123,72730 -zMgXMvvT;14654,15331 -aWwIPElQ;46520,42162 -qmMOmPfp;61520,63534 -wLjyDxFw;43726,43427 -FaOYxyQC;10220,33846 -ibUhUhRs;63867,51547 -nETyjqLj;63030,47431 -jpLTAiTk;51748,68876 -AzPhXjVw;37768,5390 -OqKkaACi;29113,88820 -jupzwKFJ;67879,4969 -XNHSSLPs;64523,48111 -ZsPSdYLq;69966,34654 -DOTUhFcT;28502,68951 -hVLMWufN;40698,43276 -eYBBuWdN;48066,40254 -PfJLaOOC;27265,2835 -CthRecCs;69712,29642 -zOQBpIYZ;47441,56254 -zsqoEhcw;48551,80304 -nfTtIPnc;60713,11505 -XrrlSVmZ;28223,38465 -fxZuYeXj;17486,77649 -hZsehmHF;38016,15243 -QbrTZSDJ;68883,42270 -LEjoiiOG;53300,34326 -vUlOoAyE;45704,70626 -MxmqsmPj;68811,31130 -VwhCmbNT;7862,77696 -USHPKlFe;15035,1865 -iGFVsWfM;15303,37777 -VjuAQMSa;46679,24717 -tSGQepom;15300,14709 -CQaUTfyw;86773,11077 -eiEqDzeB;51230,21160 -DVMfdEHv;33624,79852 -XhmqRWkg;79318,40651 -kCggqQsf;1734,71258 -wUkTcxwq;19492,77539 -WMvxwYRj;66763,35175 -CtglCKeX;45661,87615 -lynVkrMH;59061,79048 -wzlIBmoN;49866,17992 -dVmnUmen;58055,63313 -eINQalru;27399,42178 -dQMLDjiY;3558,20005 -vrQUcuVP;3327,77086 -fdYJhHiT;4774,34735 -KmZfBwhr;67432,50496 -AUNBMhBC;30263,86984 -RVwDDPOV;26251,25409 -vBGDbYmB;51914,11463 -ZOUkuZRm;45389,74729 -jxgmuUKm;58350,57552 -zQHYGMTz;51819,52808 -NEcrjzqu;38398,62132 -izPYGSaJ;8050,28095 -fCVrRVho;32374,86784 -DbvuAkrd;6220,45439 -rmENLNJz;14820,2324 -MhckqcRZ;51665,89107 -YlDGKLul;49139,71028 -wuMMFUuU;59165,60733 -JxYzAySS;18876,10947 -MUcUNuPz;35471,42531 -kcLQmoNY;44987,39911 -UkXeUweF;50040,10693 -LceFhozD;13961,29761 -VlXrpetj;22828,78778 -nAINWWQl;74121,44976 -kzAgvmfk;38773,62163 -bGNpHZUk;56498,17097 -hTcqLFXp;3934,4841 -eqSJWdgR;88431,73805 -vBjENYXR;88899,15160 -zGuiHyQw;89730,76837 -sQmzTRef;28044,79564 -dpjKrgtx;23788,64911 -qhSZeDwx;23885,63506 -RQcKvwvq;20103,74812 -eteiHxIO;48865,53643 -axAAaXAM;84647,89189 -PWLxZcRc;41801,49436 -hEtBwjey;70981,14950 -DZRTHkaY;44717,8209 -yXjvvjeC;69036,66341 -eAHGHzsc;23229,20832 -JJhZUfTq;12306,6488 -zUNVpYWb;49574,38744 -kIccOfUN;2778,46760 -ZgbzrwoV;11625,18014 -eOQbMmqu;73173,6273 -xWJVPzZJ;64303,70540 -OqqXUWEO;41594,64550 -hRscNwNq;55578,47696 -nAKREIUV;36434,59574 -wTNqKVre;34832,39514 -PllZvLYJ;84453,24355 -AujpOOiy;28647,23596 -CTPaIcZx;47699,65699 -ZEUDyTlN;39165,87571 -TBaZQXKc;33744,43693 -bXYnVRYV;58160,1083 -XWjACiJl;85091,76509 -WBounwwp;53898,27157 -QYCMitFq;83563,84957 -yZsfIDmY;53879,68805 -pvlHdnYw;80434,54340 -OrlFKOcY;34997,88618 -KHPpWDIq;39745,24126 -ZDrzNZHT;24710,20973 -qplkzQoN;51243,86496 -rnBSxwwa;28845,49817 -WHFTXnrr;27892,69235 -OvpvDFNQ;7366,37937 -tEkQNuEZ;26374,6943 -gzxIbuJp;50491,20172 -PAqswkRy;70107,54218 -XlRiMBRR;57257,14691 -mKfwbqdw;5967,27603 -wIlSibiY;8392,27579 -pVVqUXAO;85227,3234 -DzFuCpYp;75812,6194 -JhOxkyiR;74294,14319 -qIlPgAqX;26297,88868 -aBBkuXFl;71466,74318 -AWDLwqsF;66856,15321 -RJGoNGbm;36826,70269 -KdpqKcjL;4368,86824 -xoqwuyex;25902,41679 -stFcJHvt;1750,88514 -jTUaTnPx;61826,28609 -PuqSfiMe;50267,10109 -xHPLXZgs;45610,14429 -YMTtjGnd;40538,24225 -dSvIzmIK;58818,43987 -ozBUJXdJ;77577,52095 -MvOxFpKk;69055,7902 -kANiQKZr;28587,88307 -BIZdRhyS;8213,50667 -kYcmmVpo;77946,83884 -RaaNmWny;1512,33860 -KyneuBBU;76948,78006 -rPTMBwTi;5684,87356 -MOqBTkVC;78148,57322 -YuWVvTRQ;70477,67771 -BcyVfaSH;57583,6046 -RXzIwckl;29560,71598 -uwzfRQgS;72079,67805 -BpRkhEcT;68122,65930 -DIBMflyt;56766,28611 -NBomkZYL;79274,3618 -zFZLFGnQ;3517,72364 -WdNgDEVT;67073,9821 -lqxLCFPQ;10342,89809 -oBnJWLmb;83763,31020 -pFqTCdzq;52500,48210 -SSJLFbGV;72179,74288 -BzlliIhJ;25291,15343 -wJTSTHbi;81998,23235 -AgRCfsXe;78014,7383 -WsXGMRSb;79341,80780 -tqulQCuH;76824,66114 -FRnDtUxu;18332,85989 -HxyoiqKV;17079,80469 -HulNcnfX;51511,66289 -mNlINqKw;83873,37501 -BHdnsQwW;12493,42322 -vxzGYfcF;42706,66068 -SYMfiLWS;58341,10745 -TFoLEZvf;60571,13355 -CRMBmDYh;89083,80834 -IbXmYkGh;36750,71368 -BzHWVsmo;63586,43844 -uYoujrLS;79263,4691 -SasOgjNk;71686,67552 -TirElLJe;84511,79582 -yavODRhb;65087,54281 -EkqqIBIj;46785,41993 -WjOydKpq;27523,84988 -GdXAZTwh;69343,50585 -mMsRNoNH;54544,12576 -LlgLQycJ;15257,34506 -ZfHzjABH;74602,60074 -DBgCcvhK;76793,45677 -bjRQBAzE;11685,88757 -eNayYhLV;77574,52484 -MVkAxgYk;64178,60439 -MBTpAOdV;44835,33214 -XzNiTFHR;45143,78980 -VNRrmUcV;47543,88183 -MiEhpaVw;2443,41685 -VobuesqA;50251,29076 -fJHbEGlY;11197,27404 -vFVQBKFW;81833,8382 -umMHEEJz;89361,7705 -xuUvmpmU;37958,60358 -BgEHtuNX;34579,3953 -oXGabNdJ;36930,68201 -RJNpVypx;62664,12641 -uAhEfASr;50673,71129 -kWfwzhQw;64991,1816 -pOESFilW;30382,85406 -cRCdQIZA;18910,17350 -hlMleAPS;64371,9159 -SDQdHpqc;60817,7501 -hJToizYO;20414,57124 -iOnQrIEk;12462,87496 -OetVGJvJ;80612,63882 -ybkHiERd;42059,88259 -WRdSKhMa;46965,33736 -yZMOgPsg;13039,85025 -fwPCEzaZ;12641,89597 -ylApASFd;29517,50633 -tSZPaVbq;77127,43792 -SzHUQaGB;85655,68703 -zjYRMQzl;47778,3080 -gFJobXBj;47002,31532 -fajoMMRF;55604,72850 -XGGdDzqo;39973,66523 -WBVqKqit;74145,10851 -QBpjQPKL;13328,34020 -xAEgEDer;45889,9355 -lEcbAqad;14891,19543 -zunhBNlE;58915,79901 -PLSXKLgB;58659,33312 -NEJqIsCH;77030,63717 -kQyhOikV;34470,31381 -hLJPtHCw;18650,79013 -jAXuMRHL;31402,85818 -bPiTdVbS;80141,81626 -rBuzBqjy;46919,39375 -SVyQSsEu;15541,30861 -iZchqvbO;44450,51786 -mwuUviwe;5778,60798 -XMLaionN;54795,23202 -vSIUVnya;48893,29380 -rRNdfAKW;13293,64240 -lYfmiefm;74246,19860 -KfVXRjAU;56074,52962 -aktLCDKS;48426,59948 -lqPOJuRp;38461,25515 -RtRGKtOY;89469,46505 -HLrZRnRg;86610,42710 -gtgVDJsv;34845,7345 -JIECcrKv;25484,44535 -KnuFizoc;25023,10333 -WYZlEAKE;23968,55039 -QjANQenU;38304,34919 -RrVtZnqY;57419,6630 -nCVZKhfI;79019,44004 -NkDXjcIy;16897,3309 -odbmdlez;48187,12006 -jHqBjXTL;37703,75889 -YvxLFGLw;42539,76762 -DxlGIUTi;32656,42261 -SPeDbfgp;73908,33076 -UKKuDjkj;32806,66092 -TGrRGtXT;68330,39619 -TCLtJGrW;66981,13446 -nxVQbluY;13345,19953 -pALWChyc;13366,51233 -froRMbwO;74013,28629 -KviKsfkC;82116,54626 -MVHVEGyQ;88821,81393 -QvYgGELw;10788,39292 -CILUPwJy;73693,71900 -eQKOEDYZ;71723,21095 -ltjjCkPh;53172,10547 -soiUyMnl;14001,19640 -UYFrTPEs;76798,47609 -kLfhwVHI;85513,71722 -FcdmpseC;4841,71988 -lHclXeRJ;60712,62134 -DIoxuNPa;61819,88642 -XqwPDfGn;75147,33685 -ZjLhWkuC;80343,81407 -OpHnDmQv;70997,32132 -IcBETXqH;24765,24521 -WlXcTmcb;4116,25460 -hqamXBZY;2941,7409 -IbgprIxa;69656,65886 -dUlYyQAe;45282,24476 -nwLpJrkh;66493,62141 -esaaDjFN;49716,81227 -jrepTYQW;71936,3924 -zqEVOvqd;11847,76114 -kpRSBSUe;64445,42447 -JTozxXGN;71205,55775 -jqGpjuzQ;44381,82085 -gAeNbdfv;61123,64204 -LwePSwbQ;67591,34057 -xgRwNtKE;65050,16956 -JNYFIBbp;25679,36237 -qfePuiim;63908,40180 -CtEozZTP;17096,66944 -HVuoVXeG;39260,61141 -bZXHsLMh;7074,86060 -saSXWLJf;19776,68636 -WJGQEsex;41212,5636 -CPQxTJoj;54020,6078 -rxWtFHHJ;14015,43655 -Gwverlqx;13393,3864 -HKSVizLh;21121,6276 -HTGFPuNk;57930,66994 -NatfRyoW;72713,89421 -gaNjXsOR;19694,29707 -JuaXYGVi;24290,63503 -PqFklGZG;14052,34182 -nzLsPzff;22506,70828 -nGVnpuAG;50966,52176 -cLWylkvN;18830,66998 -qRRRHCyS;22394,4756 -RURhtKbd;37040,46943 -DKqHKYPs;46455,10831 -gPYOABoE;42901,15951 -ebRVTMgX;12187,37204 -gPgzwyHc;30882,26777 -EjFxkJVn;41724,61918 -zXyadhhV;54994,1441 -idAzNTtP;62376,21439 -YFcwRUfz;89082,55721 -CThbOJPl;25662,1928 -ibDXjevp;89757,9080 -XwfxcGxx;69095,40409 -XBqtfluz;87064,34540 -WkYSaIgw;14236,79273 -WhqaOLDa;88544,73811 -BcosoSnY;46699,15644 -avMBMZet;37553,30914 -yexeSOje;16354,52934 -jjfwHjkP;53545,22092 -AbjGOyvL;76597,54949 -UrCQjmOk;72005,28909 -CFwtRbFw;83265,54425 -mwjIGyLl;45347,41542 -rYrCENyu;1138,2617 -VuBJKtYX;73932,45308 -gGfGUTfL;64328,14650 -glAIrMFB;57798,21023 -pIlreIDk;37211,59560 -oKmxRsBr;14967,42842 -kirFFSkz;12511,88269 -hfyZEvPN;60388,78846 -IfSWUYzD;71981,67586 -CCgInVwm;12757,55707 -sTHBmyUI;40654,30738 -faRRwxeJ;33638,68655 -zCBDRPFG;8604,19336 -BRLsEzSq;85408,73243 -mMzDJQsh;63374,38713 -KHanDuWG;66196,18731 -FkgUoqqi;67779,52853 -TorqoRqQ;46664,89156 -ZeFgvUSN;44808,65195 -hPWhCGUZ;66526,20646 -nFWcPaPf;14169,62767 -DaxbnmeN;7505,59466 -cJdHGssT;10890,4589 -uKnpAeyy;73082,23333 -ZKvLJCKu;48414,13305 -amxPQhCz;6209,50230 -CODHzgfy;30061,81182 -JxkMGvQK;16680,36271 -cZeaGvHQ;55959,59362 -owmYYZZT;6237,26799 -CelpugfM;22022,83772 -vHKjSesT;78676,39074 -EhVJumiZ;74753,36624 -LVomYjzn;74601,64437 -CxFitngd;61178,20988 -xKUWhfVq;33162,72307 -KyDwRqAT;35038,86374 -UAlqJXIN;59290,54142 -aNTyoigN;25469,82272 -PHYfCqEW;49107,49246 -lCLzCqej;35547,42067 -XSrCcYlJ;22467,6985 -vJnhMevU;17085,79439 -hpLShuYd;39570,31071 -LrzXYQUo;52920,47395 -jKEtISsR;18757,80653 -YUbcjxmy;52810,89190 -NLzpIgXS;39256,78241 -MVqrHmDA;35726,42699 -MDWtjIIj;82614,84574 -RtomWoCD;69334,36757 -DZweijkj;84113,77280 -OZLGMXgi;69812,16194 -etQCzbXb;66889,12630 -CdZKXiqv;39065,52137 -oRgBGPlT;14975,12535 -BjOtlvFk;55101,26132 -IobnnyYo;27992,84081 -ajjeSEHI;38281,29945 -fGGYilaa;10431,49016 -xgfeSeFE;69699,20701 -dDbbhLJp;40192,12055 -KfLzZYGk;2290,38946 -gpBOdPpU;32363,59265 -qmXCdyqb;11624,66701 -fVWZmuuK;26093,50434 -qvRTMJcB;35512,3132 -IiXbHAvb;33187,74640 -laRIDAOU;73115,12201 -rBjeOTwc;34008,86329 -rnEfjDLs;12002,73166 -qqwcRBzw;79386,42219 -HRCKfjiu;81845,12482 -cVnnQbeH;87546,28781 -DuBsUkeU;10524,74791 -dQkrjPfH;16502,50239 -MDRKkCbM;48795,35066 -RKVGXaug;15476,75198 -uLwtFUdS;84552,16797 -ZOECFncX;85959,46634 -lNTVuoWb;4998,20111 -IpugLYob;49939,32106 -Syirtrus;13344,75817 -duPwORLh;87025,56573 -VNWLcIFf;26597,5312 -bRcsjwjy;59047,70238 -GYLWQLRZ;39664,14969 -UIntIxBD;59631,18977 -QITatEoM;42179,18365 -jkeXaLWM;74807,18166 -jiUZmJIE;74901,80102 -xwPkZgIW;37588,4605 -eCRwRLGj;73848,70782 -lZzXdIft;59162,43318 -diNjkzTJ;23256,77572 -SqRuxFes;18813,18374 -lqWgjMpt;6722,38019 -BwHoTWhC;17146,77466 -WolVgzBi;43718,36401 -lnciqNIw;66009,49697 -xscZFuFN;70770,6393 -JuGwlqLU;79181,51323 -dPUqbLmz;69678,61936 -JPjZsKdh;25826,78936 -Tzfmqykf;49282,22411 -HSdoLfox;52185,57510 -whSaCAcP;51383,27998 -LdoHtpgN;46515,22450 -mOKkbnkz;55630,55285 -iQlgSLBF;13736,25464 -jXSKmJfg;52132,17013 -oMwLIMOH;38279,18831 -nYnTbQjp;54188,66690 -NpBufHJh;2273,10676 -kfdFBfCl;60101,24124 -uzgwLUpl;72230,1248 -BhzXpYEr;66638,80695 -ptyohZHN;54054,48083 -vPzZrCpL;42305,22857 -PDGjwsVO;69131,54408 -VgMQFYuf;18635,4238 -ucHUuPUM;49231,85793 -GhzUWWKb;10478,54642 -XqFyRUrE;17070,81244 -LyxCnHur;8141,3488 -BwmXoQxC;77121,53451 -EHZvPFbN;39726,24649 -ujuYjoyd;20076,86609 -hVQPcAfp;88668,70202 -CNtjBsGv;73883,64115 -fAiuHjAW;56907,76015 -qKtohLfo;32281,39141 -kEISCQLd;5734,79665 -ARSvifWx;18765,21034 -vGvZrmNk;32107,62244 -JILYLIpw;17619,15886 -FGNGGiYx;73928,71674 -IgoIbWOz;26765,17680 -zpXfiJsy;63321,11277 -lwZiEwmq;38379,61639 -uwxvBfQL;62668,10592 -IxNESQiM;84397,6538 -uPAMqLws;36814,12380 -LwFRNzBV;40722,18552 -MfxcQDHn;88029,20688 -HvELQrHj;45712,14412 -bCeGilmC;56861,86513 -pFdgxxqf;24102,82419 -uJXCvTAA;34485,79764 -dAiznQiZ;80315,84903 -nwkpSflj;43292,59869 -kDvGeEhV;63442,32913 -CjgFYcpC;59067,81714 -VXnAZaXH;62308,53810 -seVETHbW;81156,33791 -eMAbYynG;39815,87106 -HKMnkKnr;15206,50616 -KGHIMLad;41354,13379 -IwUVUxxl;42956,36210 -wEZMAKPC;85120,81209 -BQIkYrQI;81822,10456 -kmWHMeGY;79747,25037 -JrqwQIwH;8238,81411 -jtGyvQDs;65557,78526 -ADDgOBPQ;32951,69178 -uOlKCgJB;9194,78577 -khbVfyyj;54268,24031 -TJBcjcpg;68393,64331 -YIoRGNSi;23192,69066 -hRewfobg;83128,30824 -bJQBCYOK;48422,86674 -SCroYpUj;7993,9998 -lcfinfXa;61952,55543 -wDzriJsp;50785,80188 -GkuHzNyN;86522,52759 -eyRKPYzD;17430,10067 -qkOIRbzH;48157,18104 -QTtutqVp;61042,22415 -VFRQJbyG;57493,32993 -TdaHYBuh;54394,55273 -iAWuMmZn;41748,58513 -kNOAoChM;89197,60039 -RelUaLdz;37066,74466 -ClXtKufu;30581,79605 -KDonPDWh;11880,42502 -SjRzZzUP;61544,73911 -goweVAZI;46625,24450 -nAqqgiuQ;43450,44002 -spcDObhH;23165,61392 -ypRBpbJk;4613,60058 -liCJufaf;88578,46017 -RsyGrqrV;53291,25271 -MwJMjgwC;55056,80265 -jzKrqerC;18374,47986 -NKzTvtry;52150,33017 -oIzhvxAH;12429,23837 -AfrQavEX;66997,13875 -EFcWKLaS;43684,27560 -BEsxiFKZ;71771,7987 -BnvcvhZM;14046,76164 -jvfhqRwA;3634,81082 -thmNyNas;58026,13513 -GdUzTqxt;39025,41997 -QcMgdSiT;29913,1231 -rJUwGilc;87673,12880 -GSrwHqWg;29747,6135 -AwsRehqB;8393,31871 -MppyvcYm;72192,29231 -PGBawmNJ;30694,17285 -OdgmOhKI;59028,65991 -dkERsIEe;12349,49846 -AmyMyBsT;38390,63979 -jxtGJDli;88795,48614 -bvzFvFSr;82021,61004 -IkBBcWJM;2465,86077 -fVBYrsWD;54806,31822 -PAvNFxRF;3678,74152 -vBdYuJmh;52813,45544 -SOkxDfBO;1366,47973 -HsEuzDrO;48481,75953 -ImrYeaLD;58785,19815 -sJAMjWrN;17572,89879 -eugvgqnL;74876,1937 -rufdUAlN;17669,12253 -aoOOwjeW;79660,10550 -cWGrqHKx;17678,89481 -gtQOpiLE;70861,80878 -lujGEmWI;22956,40259 -xREEeOQH;53428,57834 -Eiouowqr;46231,78170 -nwhbfdKG;64290,80031 -HjRBtswh;86107,85441 -ykQzKgjc;49055,79204 -PPKAwYdc;66085,63814 -TtxUDuBs;65502,77213 -ZlpFJoQO;22547,13894 -LHzOFfVo;48762,56073 -GnpSfYuL;14485,57427 -JRVpPCIv;29511,58880 -BvmQBImc;26621,1089 -uammdvki;20477,49438 -qWbzTSQz;36807,42015 -QAJziYzQ;43854,51417 -OMtUYbnv;80922,38250 -VWWXPXls;72614,40029 -GecgfwOV;1903,80393 -IWnxvTys;13962,42833 -eGReymcO;17321,73159 -xaJKxLTa;8377,36392 -aHKVoGSc;10520,81820 -VFexUXDP;81389,60215 -lYUbhGxi;9304,30946 -xuJHhSpL;43258,87173 -yhSUZqhh;16823,67256 -wgXvWdUW;56478,39480 -AcdAVvEb;50817,73959 -CHXXYiqj;22334,28701 -gCGuosQB;8778,45698 -BNLghgWv;61615,40342 -QjBUrwrZ;1842,84049 -FZUXTSXf;38894,59630 -CEFNoJKY;44836,71848 -FwwFyyHL;28367,71297 -rVTzleWS;39249,86646 -ZgicOHJF;5779,6742 -vowzKaux;12324,5696 -bJRZZyMw;79196,10534 -AYBfQNyN;25692,25184 -rsmrHKeD;50599,85501 -sMFjAFuU;22516,11923 -Knvnxvua;67837,13481 -lXLrpoLb;38178,84888 -hneAconj;42912,74612 -FTKfaXAl;9709,79244 -niuQoPZM;36192,49108 -zJgLYBTD;28670,66274 -qWBIFOxr;42258,49618 -JeVuSuWr;41735,37479 -AXHaZrbM;69162,26593 -iDyENTtc;46041,28989 -ZdtBPsAV;66307,14791 -daqzKAtu;73766,19698 -otHdPcsK;12157,89267 -SdtEBRUN;76714,60960 -lXAqluUy;72850,21550 -UKsKFjgX;72559,34861 -qHLYhmVe;48798,57131 -dYqvPWgp;3476,58555 -cpFeAiYm;87010,72068 -pCMtwCZS;30533,86380 -UthsuhWD;54705,70701 -mrwXxphU;50699,10941 -ufVxiVBB;45994,39331 -LJkQFZKz;37520,51570 -hxsURfiY;58692,68160 -ADOYtfHf;2755,27731 -XmxAPYup;21570,66569 -rlUmLxCa;70985,8654 -gVuayMRl;51444,80244 -LfCDRthW;75837,54380 -eKBuUOtk;25371,39031 -CFWUDzVE;36242,23039 -ULQEemfW;29579,46957 -CZVUvJDu;60175,75933 -RZwusYhy;61981,26716 -pwgoEcAv;12343,7612 -lWmyIJtG;81941,64673 -bpUGPFLA;83346,31659 -sYMMJByk;49911,85926 -JCoKRgeG;10368,81365 -wjfSpgOL;24542,89991 -OBNFlNJe;63457,21796 -ovIznqRX;19558,72454 -iSMMBlJH;40949,73836 -bfXdGTuy;60142,65749 -bJnmbwzX;70626,45018 -IbRLRJYL;37562,18006 -HmXnCMxf;22983,2106 -AisodweF;87221,81107 -RDqqpzcs;9083,72689 -FJiwhnMC;64751,56014 -QesZISKA;41618,32638 -PQSaiWCK;56576,33905 -kVZunWGK;54842,65108 -SHxOQKdA;84024,41334 -ZgeLQueU;47757,22987 -kmYFvxZU;18509,82636 -IyOzckSP;58754,14426 -IZjIHxNh;38244,55970 -bKwmGTcl;17521,1093 -ALblhhEH;70294,16326 -ugTVBOij;1996,55066 -CSPjBSIx;70523,26894 -jmsWVala;55124,43214 -xTnTGRmB;43004,46143 -oiaAubck;49088,30431 -uQyjOoJe;32230,8260 -bJGgfqKQ;83526,87310 -WKEqUvvm;54479,79120 -TEIrFKwh;51304,45624 -lIVBXvOq;7095,41211 -ChCpFmzF;9518,41949 -seDeDnzk;28479,45071 -iORxRakq;28193,57851 -czVgvmSB;72173,56227 -nOPszQzY;42245,6061 -xcSHkKuw;88054,43444 -SUcLtlsP;78969,80909 -fUrqlExs;74804,45876 -ZhgnInjM;16218,76288 -PigCvrDB;3356,83981 -FfudZSVo;17589,36989 -KmxyuAeZ;78245,53115 -oEpruBqc;63385,37959 -KymzbKHg;69439,21303 -DTgUdZDQ;60554,81295 -WQJLEyUO;59628,42075 -zmWvSskC;62166,2102 -goIcGufq;75757,7490 -URTeyabs;12157,31115 -jLExXdYc;33892,87322 -duuqMkfr;43259,41568 -OTdHpEwL;16426,58010 -hLpylDAJ;53121,62494 -bEqxLbOr;86217,14122 -HFAiWPvk;81586,69863 -gWpdrnXT;79184,58126 -FxqMcZdf;11506,48653 -ufLJEkAc;33931,89487 -kfmCSrhL;12611,68540 -bmsHvNoW;12521,72297 -YbiwGSxS;35632,79779 -gwmTLgkZ;16187,55898 -UJBdciQq;52769,8047 -GHwygyid;68947,72956 -HIwSpRQj;61727,89942 -DlJmiAMB;30196,30578 -zwpOSHuB;11689,84185 -ewlJiVjK;16426,78509 -UsCpQXda;72733,89241 -pRKBpGWL;82867,73735 -iPEMQxtv;46613,33117 -MsmsEbeX;48597,52297 -teexbpMl;78402,48602 -HzLgTfkp;1498,38591 -SgyofqbC;60539,58086 -HOpmuzah;59241,71600 -GxPqGHyh;8098,73682 -rjyBfrhc;32800,58976 -xbqxXkcD;13903,48634 -kkEWOPVO;71938,54589 -xPjkRmBp;41089,35040 -zCQOAtgZ;21530,4376 -LuvxmSRW;56593,1370 -bCaVyFzm;57536,5031 -KdivxUEP;21192,56687 -djNXsOQD;41784,51088 -MrCeyulm;66560,7019 -cVXAFpUa;53456,15878 -hdaajCqU;65634,3890 -XaymysGa;35356,82944 -uCLjcLVe;89071,17184 -XnFYvntX;9325,12202 -wpfLcnUa;20659,17078 -GWHmBkiF;58308,55597 -ssHvhKOR;60217,37640 -xuIwZAEQ;56329,11935 -nTvZbquJ;8797,67206 -zJqviZeT;12250,29573 -YGHzFIXp;59157,8801 -JUvaiwuN;33812,32783 -oyCpVQhz;53510,41771 -MRGIqHJO;10897,8404 -xCwtSmuv;70170,47462 -gNGNuUdA;59370,27185 -GIvPYfQx;85232,5803 -UjqJoPsj;27393,24647 -XUtrApen;3997,2429 -tBrNRxUG;39820,52842 -hdthZKNW;70841,40464 -LoGzLTQc;51417,65677 -firRLvhG;16436,78708 -TgUfYwNu;21714,58859 -DaorNbvO;46792,6849 -OSwOKfTZ;75756,17009 -wpMUBuFL;25466,62682 -EdGtqGyD;35170,26545 -sSxFWhym;40195,65233 -kmHCMOfI;7354,36185 -ninIVYEg;71907,48776 -QYLNVXyT;28299,27905 -msWdiExw;85898,44780 -CInrmITb;77623,86138 -njIwhxHf;67109,30619 -PumGqkfH;62204,69743 -OMYAcqYD;70186,55616 -QmJvAnFG;84799,89679 -vPMAQfYj;79105,33733 -QZOwNtiq;6700,64930 -DjeUjewd;7449,85831 -NpAZdiTp;73982,37708 -nMNAwWWP;88568,83443 -xSJPhHfT;3196,18959 -NFJqEamD;25000,84452 -oNfTAXoh;80388,70277 -tLDZlLtM;40703,26579 -qypjgKVW;73200,9493 -cdtnKiJc;46129,43240 -bcVNAnYA;87514,88152 -WwsYTxSL;51363,79310 -cNGQfIYy;42275,3543 -QjAcyBnp;27592,80834 -zMsgTDRP;51464,35744 -EerGJCYe;67277,24059 -qcXUqBkp;29818,30051 -qKWUYCfL;82582,85006 -vGDTtmCp;68563,11287 -SDJTpPnV;39620,47513 -vDhmXEMs;69708,4666 -fLHbdptJ;3771,6819 -BjWxxkCq;44210,64310 -ORSKaTwP;41163,43691 -sCfamSPL;18415,86626 -OMYUVscN;59943,76649 -szJpSbOS;26470,31476 -fJdIHEoD;10637,81121 -YUVNsvxr;53884,39996 -YXMsmXPy;36807,80794 -aLbDfmbM;85728,45323 -RErvXILO;38971,27547 -pLHiXOcH;86911,61653 -pJJQdsqk;30957,29857 -dPBHVnJh;2959,57195 -jXsayoXq;11793,56403 -dFnqzxUG;23551,70438 -tYjxXPHg;51684,51041 -QcxjoqAD;64866,57981 -NhgykGjq;10584,62713 -iFAzoZrx;50047,87467 -DOJlFQzm;81791,9244 -crnCtzOl;44937,30955 -mfDSchzJ;54419,60809 -DuXFAzwk;42403,22741 -SyDGQQCy;68031,57433 -DWztANGo;41768,23132 -RrxAXflH;68307,18609 -sXoMSOUb;74690,11228 -TkxaUrCJ;59888,37982 -ZLreLurZ;60607,82202 -rZSIodbr;20450,73948 -cCMiUezt;3092,40970 -AtBlfdSk;71988,78760 -cnxGUiKj;19012,66693 -jauaSGJU;89599,39972 -OoKQiYaK;78172,47278 -wmXExxeE;56423,8903 -zbWYLoIF;69962,58429 -bPvRqYxg;78702,37312 -bEuVgiqG;82975,31675 -zYwhaIeR;50601,58781 -JONIDPLp;58037,11944 -XClnqqzW;66049,74367 -MAGbpQSI;67395,28046 -SPpwyoeE;73554,27365 -yVaWQHAK;1220,12085 -IBBPgseW;55754,66957 -QcAGTzGQ;27411,75519 -YNETKfzd;40280,31350 -frhroKPb;81880,65918 -OiKSZIJm;55809,47910 -sCXVuMIi;61233,55447 -CKJzUeeO;39177,15270 -jrPyqFSW;78819,12683 -PnkuFFvy;47375,56161 -SJzgSdbL;6111,70437 -tNOtrZab;7751,44916 -OqArbYgF;59725,49451 -dMJwKTKs;50176,44608 -lRgIsGlX;8175,61493 -BzOeYeIA;67403,43192 -dvsumRgE;80115,63410 -mJBdLKti;54099,24928 -EYBjuTTs;26989,82621 -gOeRcgIX;49589,70124 -nEgMkLda;14166,40455 -CksablJo;26315,26178 -ZQXzPpDe;76814,34886 -vyTTGtxD;77983,40940 -afbGnZhH;27439,20147 -hknuVpoB;86758,60824 -CxlgqUCD;70734,30844 -JUNicOmq;12072,61017 -buAhQNtp;73056,26838 -fnbphTKm;15595,26901 -xKZpahNJ;18700,66428 -cBUWmwGF;37462,65220 -nWdzloRH;41886,32424 -vTmffDhm;42208,41548 -JZmnuzfe;65716,44499 -GRRckRfk;68835,77017 -HFsqfKlP;64410,21807 -ehznYaiX;53096,36400 -eauYeufw;22800,84235 -EFwkpYFD;86188,85150 -CeLmEXAJ;10444,62804 -BuOCMMOI;59452,26088 -ImlJujnP;36306,79847 -uFBkWLGl;2253,58012 -GPVeSWHD;73043,15750 -SIWnpOrU;76733,78740 -HVXZbtqS;5964,40242 -ZzDiJgrM;69666,28911 -FkIKJzJA;39447,72722 -VimKBudh;34487,69198 -KEWHDWqc;48989,2176 -mRmZBPwg;77969,15422 -CXNgwcOg;52461,40994 -XMQvavNK;89121,25295 -eAdfeyzV;30377,60021 -IRhEFLUT;78594,21765 -slfENYJR;67655,76579 -LVPwJcPY;9863,44980 -tVkWIzbu;31714,64797 -IjgjfemQ;24575,5029 -oWwMRwLO;88488,30939 -ByQLuzYv;66207,1041 -BbYegAQg;48943,27352 -USufGBtN;7398,83903 -lBtIOSbf;38920,54702 -etTyfQts;48646,76112 -GpDuHlLw;10286,44694 -FZYCRcvJ;1320,5575 -NiyAARsw;30594,68940 -FOmZGBfU;33953,4766 -urSGtaor;21020,1465 -WTyKRgnx;83501,40016 -VlWOxbZV;18061,72973 -HfGZcKjK;16854,64583 -orANTmKN;30216,44053 -wptqUmUH;59592,10017 -buwoZlZi;10366,42164 -XtWqzeVg;45582,59670 -PrcCIKcn;69841,89565 -jJSRJuRF;72418,74200 -QGYTaLCC;61439,55733 -TqfrySzQ;68537,41324 -uVWyFOrH;55611,3049 -VNkQvbtv;3629,74792 -TpNjQMEu;17915,48424 -NThPLuSG;40498,70881 -BVjlVqTY;72142,35118 -cyLdLOsB;58232,11226 -lNavSViK;2041,45244 -MJZGmSDO;76159,10156 -JucTeeFw;35764,75867 -cYtJuwnc;63095,78592 -jFWHlTIM;54482,18258 -wUfljIMM;52794,23789 -evhFZXyF;89634,40116 -BTTmqxcg;40691,85048 -SeKSCkrb;29258,80489 -PowbMOIX;34859,54784 -yzMrfXup;18070,82246 -dKfVTbdL;64840,13606 -aVDSMJWv;58818,26224 -cFwiOoGD;63558,45119 -SkTHEkuG;33729,40517 -QVsDxUhE;60891,31651 -uNroYPTU;34983,65550 -aqMpbqjS;56196,89424 -sCeXMHJI;37214,81024 -qXmOeDDK;63869,64991 -NUhKTpRB;1148,59110 -AcoxGXJt;10329,41021 -dwFLTdKL;45475,64582 -oyPmczDP;9812,19770 -xUZWVQvN;42461,22704 -alCpMxHb;52124,86398 -sdGjDHUE;70338,29146 -eTYthgDA;7631,60954 -qIvYYEjl;53740,17899 -oOvqvxsY;55374,1680 -kJgcvKUs;50303,11833 -lNTwVJVZ;73408,77094 -MQsSmunU;76059,59380 -HlvhMshn;29103,25084 -zleVVXDB;34570,21996 -cyWTEeEp;58083,36121 -VqPbTavi;29135,49972 -UpLIjdHl;79457,20433 -UEkmyMPO;40934,65117 -rcXaUghl;31395,36867 -uBREDZRU;2800,43816 -FMPpxWvf;75099,53361 -QOIPaEtR;13816,16394 -CRqbcYwJ;82270,79046 -WPZiNtmT;25374,63470 -nCTbTYHx;84130,87984 -TvGMHkJW;75431,64237 -CATWwOfK;40811,47352 -RrOxJQgJ;10661,54750 -ubOlwAQB;32601,4788 -FBVdirsK;13797,70475 -VFtxCoUQ;19092,86435 -eXjfxNGD;1106,89981 -bkJcgCfc;13851,21418 -IReYedDY;61074,34310 -TlqmjJez;36496,10852 -bWxfedVL;5917,17949 -oRHrenkS;28493,25575 -UsQNmIKx;19497,12244 -GzKCdsYq;40646,38476 -RCKRPDOI;71246,29341 -TithRRqf;69508,52110 -DIDfBYhz;59650,41400 -LeJMpSAF;88303,81965 -KloabAUy;72455,50185 -Ewnqrdmm;75290,26963 -pebDtskl;36823,26894 -eoEQQWeZ;27540,45049 -QursXtea;33888,22922 -miBzQbmf;75472,85726 -wKWqwsOO;42173,43751 -VDFHonBS;14209,69148 -OECzcJki;41067,10376 -tytsibiv;85579,16537 -rgrKEILf;22277,73305 -xxbJgzYw;9477,81898 -UAmXliEM;49780,25505 -uWxvNLUi;6416,9615 -KYZUQAAH;52733,55159 -QJiYtkSW;50086,19787 -HNeKwVxQ;24627,34338 -HiAVkKME;72023,85476 -uuDdIcwB;62507,46993 -CxfwYIJB;49974,59603 -vNWbdquK;63357,11900 -ZNXtmxvU;77630,82898 -WJaoOGpX;56914,87780 -VbjokPKB;63897,30625 -GgDxQXaq;3226,27828 -wHoutGOO;11474,32418 -KTMNxlDM;37650,31117 -qlYXjWzP;48121,7612 -fuWppiqd;57166,34414 -zbwfpsji;64600,17799 -SnKyjmjx;87715,41286 -PWhYERWo;13847,3913 -oQSbplYq;46607,4382 -OpbMcfeQ;55675,40584 -JtNnkZVa;41913,25077 -aGRkqipn;42274,87103 -wpGmfvON;35057,79561 -QWbljIJN;53691,50160 -KSzTcRtV;37563,21213 -umMLepOs;50146,3022 -CzYwWanG;87426,62691 -NEWmqChW;23871,40997 -hAdzJYOc;83128,78557 -mfzKcHRq;33239,24442 -QjyWLhIz;8519,51966 -tBItbbzK;34169,52893 -QuqtzTkH;38397,9830 -NqoUBHXN;62803,62861 -IEXxZhKd;6614,40262 -DBRGXFap;76455,25021 -hfdKRIIQ;62901,45351 -NLlxuHTo;88971,70430 -CGKxAWsY;82406,18089 -zBOwhoua;87201,82466 -nkTBJtRB;24278,32616 -dppaOTnJ;82416,10972 -iEGfDSCp;83162,44447 -oUBIXYLe;82123,80623 -XzgNRurJ;1205,86360 -fZAsgqUY;70338,35683 -eZmIYKTA;61726,59479 -uukgkCwD;49035,58367 -pTxQUhzL;43352,27604 -xuUDHEhs;74788,18950 -wBiAvNZe;49621,39259 -umzpBHje;31999,27630 -yzyfogeL;89244,5875 -ZvPSmXFd;3167,39780 -sBiLecUf;11623,30388 -rCHEwdJn;26458,71928 -QxVYMzop;83984,1531 -BqktyfHJ;4791,2887 -rJyjDNXo;79060,55058 -QuIRrjJp;20298,55714 -mdPkRiAi;19613,80004 -XensvvYL;84352,70555 -ZsYtQKfC;76299,38317 -gapzONtU;8396,63917 -FyzNiihC;57316,15742 -dYHQDHpK;57747,79219 -EGVUijwk;27390,24585 -sgSmakUD;16297,46149 -ISaHHoLB;72110,29173 -SlXdXLGV;20109,15695 -CkbMCwkV;58763,32737 -XZqxiXKk;57673,25097 -aHoBCrck;11243,80392 -IQBIKrRi;79445,3519 -wnffRlvr;63544,16123 -bZFElcWn;77968,75105 -BAiGhwbE;30425,10869 -NeELMjcO;89500,16257 -JpnStUjB;13085,30817 -gbDPgYDS;56688,38411 -lQMGqLUv;24792,59255 -MdtbidOb;50303,73375 -TcdTnHOl;89322,58173 -wOljDjWp;31620,60272 -pOuEYDzS;73978,6295 -dkooEynB;36134,5732 -fKCGahOg;15664,56968 -JaVGFBKE;21149,5139 -ZJfBcelv;5731,72772 -cXrkbrjk;16712,41103 -iUvgjmDO;36963,18272 -figCJhYd;45466,7446 -brYzCYYq;74587,16109 -tMzTFfBi;3134,46808 -PwgSgvpx;88666,35760 -EKaikCDQ;55308,51646 -GPSrMnig;49797,87636 -CQtUdpjK;82035,46246 -JamFiAsn;54928,56746 -ndwcRkND;55927,89506 -jVohVTsU;82939,78483 -OiQetLvf;78997,25174 -BSOWdWlP;30882,31334 -RMgakqEx;84428,77435 -TtlfVrHe;81017,1548 -PMbcCyVO;11543,67208 -BeeYKuCp;18622,23093 -uEpbYJNX;68744,19835 -GgiLAQWF;52667,21956 -yvvBDKuW;5587,48855 -EPoBjggP;39487,59315 -xQyjVXfs;70645,19661 -rOIoLoNV;88203,44630 -dobtNLin;40606,38975 -xYScDUqV;12932,46487 -AkCAKYZt;64728,11737 -BdeIbmSV;8507,58215 -TNscLiii;30886,42927 -eCrmBjtp;84867,12484 -RNVeJuWi;21036,1178 -XlFuvBOU;1318,14456 -ccKlgUuy;47080,61282 -epUuFNHi;23753,32394 -OHzKvMRM;85219,33056 -lwrhcTtr;35654,39278 -DxhBBjpH;50398,75848 -SuTPQNgi;56606,46456 -PqvjAZAL;11664,56966 -lYEPIYJl;24747,8806 -rPWuVqDV;89023,39721 -TQNPzsIE;12539,62874 -GlEaSYVJ;50677,85189 -zGruBpFc;28663,88095 -JrPfzklb;39042,23257 -cgdRkeWZ;75952,79952 -yLnqnLAC;11577,44463 -ylDIPTTs;44605,47216 -ugqMsitD;38293,20704 -XoZtYtaQ;56032,9380 -OLjipPWt;23039,62267 -rnbkDtos;53987,4024 -FzvMkjHl;46586,46949 -NOtrRYKl;88071,77336 -OcgqLZZx;44009,85880 -drgQLjTX;66553,45374 -qKBAxnwJ;1686,18816 -GSSXApvS;6628,9442 -lJHIDKai;14622,66358 -wSHYjhkp;49009,39729 -QQDfzFns;25510,82444 -lNjhsjik;9562,73742 -TZijiqOY;66369,70692 -AUltCmsQ;9252,86585 -hRVrFCOC;43545,40941 -iCMjDTTC;89560,61788 -RKNIcAnB;56109,51937 -tPuKZGUc;78037,52737 -EPgpMLvN;85165,55584 -PmesSBJs;36545,87367 -IOFGILpu;7857,32705 -sBBBXEEF;21191,49091 -pIJcvKid;43708,33567 -tYlyIJQF;15092,56011 -RRkAlshF;18469,40604 -qgvompdm;16921,30782 -msjLFOvE;82472,60844 -hcSmhJvo;30671,34462 -kNneUYSL;24973,1265 -brtwbBWJ;23782,52520 -daBAIjqs;75744,1213 -BBblEbNy;57839,4418 -YBQrorIc;31898,13699 -XGXjXrul;4117,19096 -llKHsufH;17133,8696 -wRhGQebt;67415,58543 -AZnoqEjG;49944,35934 -cvncKJXW;50558,38511 -jrnNURfo;66181,65817 -pOHjBeBs;81147,3791 -pzotDsQB;86353,35922 -NDFwjfnC;75816,21721 -otxFyUQp;24207,55387 -yAWcowdJ;26507,47164 -QJKEOQsg;6287,7607 -TUMEyzlp;68688,59454 -OtEHFebJ;6075,28808 -ZDRczZFq;33807,78632 -ZMPNJIbx;60906,60280 -PLBgiXUw;45565,33085 -AbqZmMrv;12730,73442 -GlWhwmoM;86641,8256 -laTVxJfd;23567,67979 -EsKZornJ;7485,49666 -SteDcEod;68691,26105 -qUKBWnSR;79454,5545 -pPIlgpaw;40951,4861 -qidXiLxh;35081,3561 -zgxqojCl;48751,48114 -BVRUraNQ;22038,58649 -gRGaMHrX;33140,44510 -zCtuNgvg;45631,84407 -kybPVxXf;70446,74346 -meiGoLEY;22525,57506 -NqsWTeQe;86761,10191 -mBJVdPgG;24199,11709 -KlvRRrZJ;77233,40971 -KoZwHsPx;51374,81717 -xzxiEVSa;44067,33554 -aMdMdZaU;57423,67938 -NnTronJO;80189,28175 -CwejEwNu;26675,36281 -vjLvOpNm;16024,3287 -osvZsVUF;65811,24439 -QKPAQOSe;19408,39129 -bkRcwUyH;35978,49493 -sMKmbaEo;14110,20093 -qEQIjhor;82212,81139 -mkjjdieq;69829,47888 -jlrXTnwb;57880,29929 -AcsXoZbe;64246,69372 -gtFPCoVz;89887,57552 -ikIWfExU;52813,2533 -pIWQKTlh;61986,32409 -JiqKSFLX;72661,72838 -TcEneOqq;44793,70479 -dKaJtjFw;20805,25082 -rtiLaAlD;68822,11316 -cdFwmHTK;12903,73627 -NxWGmMHK;13375,67225 -AvzqUwOD;3710,67711 -nnjidTzm;13546,32719 -IzhlkIBa;87236,18641 -pniFaYsT;83826,64856 -fSlcKhkN;1829,21467 -qlaixBdg;23401,49222 -YaQWjSRw;1659,35480 -hIvWvoSz;21331,17461 -qQxGwLLy;37301,54605 -llXoNUIu;45172,3330 -iGXHzeCt;27269,82608 -HqaRdOrF;21620,78754 -pEDavibp;10905,60219 -JePLgnky;79859,19884 -rnJIsREZ;51173,19931 -cRlSosWm;43425,7085 -CctCKJSg;87166,22582 -wImbOiDb;24638,48184 -FsTEDJLz;60813,38933 -rnwaVhaM;83432,8880 -SnUFSwWP;86935,84805 -MlxNxvuF;1057,44404 -NHAFEGmb;6639,43394 -rzIFKrCx;70061,50697 -xfnTQxTn;54115,22233 -jMQogVAo;70140,48979 -vnNXsLLU;66622,29861 -OnBpTvMU;49900,6568 -PGHocWfP;81273,85395 -cFsuzQtx;71845,24865 -eDeMOOgo;6884,75595 -JWSqCCKy;9049,29369 -PfsaUGYW;43625,65045 -mfPuLAvc;75814,85587 -yONEjUVb;44591,50557 -fgABwvTX;38066,36509 -wcQeSjBA;58236,72074 -ZbZiAGkX;49713,87703 -GncxsYiy;1084,38850 -heKOndiu;12158,47603 -yjkiNAAw;73221,78924 -qEoFrzxw;12337,69999 -UoodDiaq;5473,58055 -GcbKzVSe;12003,23527 -KekldAMB;67665,47338 -fKLxBIjg;3024,6842 -NTBRydVk;25735,26479 -nomVqUDc;25363,65120 -SfYIMgiT;38288,42166 -CLhfoYYA;85842,11950 -upRSFOSf;44737,40466 -EpkCZwwV;71721,15415 -JJVmJopQ;62036,35669 -vXVfLxDp;45260,12331 -diwJJLTq;39570,77391 -whwQYOvv;43124,63970 -LDfCaKJT;69655,72727 -BCCscKeS;21053,57421 -uNUdbUxL;44323,69790 -MGkcqMsn;7413,23677 -fpYyYIak;33592,23188 -qAQpgbfj;68531,25308 -kFdGRZEf;48410,32314 -uHIAZccD;19677,76265 -FLSigbYY;48761,76375 -wyJbbukY;11487,55420 -HcXsMKSb;36657,82017 -IzABqZGz;54465,51554 -QTwVslrm;37081,14983 -YuXKfeTp;68068,22846 -BJQJSkqc;13264,45145 -DOuAwvwV;34907,57043 -qVfINyBp;55216,85139 -DkdpVoYO;54976,68893 -CwepTXbk;8423,54161 -QwjcpyIu;79998,85922 -rQXXNSqt;44687,58307 -kOBhOUOQ;81820,52176 -sSnUOsnZ;77259,80328 -EOojByHw;24709,65425 -EdJYbgAz;70649,52449 -ATyvWGGO;70892,20135 -DRNNisgY;68627,54929 -WafeJIcw;9576,39335 -MtsNkYcM;72377,34095 -xgOcrmvu;48485,10214 -mrhXRTSe;82254,37900 -vOAfuoPx;10442,41901 -MRXXvZof;48074,32391 -UnFJElZu;17547,86633 -EejdCjRl;49205,41741 -RODCAxYy;82187,86933 -BKwnDJbk;38404,80409 -BMxFjNoH;82702,36325 -UORkbmin;17337,69846 -MfccSbnX;63266,60920 -vOnmSGtV;32504,73162 -XwLKrwKW;16363,55177 -NEuIpJjl;72475,25243 -FkHgfNNd;81297,55851 -QvoCpjhV;65222,21180 -kuuDYdhf;17209,83348 -tkijnmcX;11864,54607 -rneRbPyb;65872,61720 -EcdZUEfU;62295,70108 -bekUkTWR;52938,4541 -ZmTIgdxG;84876,29704 -JwqbFuEa;83275,87282 -WZHbEoca;53738,81473 -HbeUhStV;6864,76128 -WmGPSIlZ;70618,87698 -xaBLukaT;85264,20716 -nsfQCHeg;89673,35056 -xdRgRrJh;41989,3147 -WrrTpGdB;55636,39490 -VHpQzYmL;45430,24590 -BpZGStvW;16565,1909 -fKFlcfPp;51781,86522 -edkCXMAt;29613,53305 -lseOpjTY;42064,77252 -RvrTTgJA;15426,8429 -VfXszjbt;18834,13195 -gkBouyfx;57406,15755 -llPBPMRt;26004,62471 -lxKbnAfT;60934,49885 -lwREjHXF;27452,66912 -SsAMFIEu;60691,9231 -pHkTdQVb;38493,65512 -rByXDiwl;70398,44783 -AJimpLdN;87338,59690 -NcCYYysV;37468,76900 -BcJynqRh;6181,17922 -alNSwdOQ;76169,85947 -yXirUqOd;87025,24291 -qPGUxiby;1725,5805 -PdweIAXO;6291,27528 -cGOEcfpf;87675,63768 -kCZbdyVl;63951,13315 -zlQLSZlG;56629,62436 -TJYnrcDS;60435,38630 -KsQdWoFc;75255,79771 -aMciqsxM;85965,75899 -uVmlDdjh;43582,40486 -cYRMJkUU;46332,62386 -EVyPycIc;83056,11394 -sETVFqkx;6852,35642 -FAFkZIkj;14898,86585 -qxyOtcio;15235,53852 -xvvBxZkr;52225,63108 -xVImyXtZ;14046,21191 -XsUysLvi;13651,32565 -VYAZgPMk;23198,41955 -ODZUrRia;29146,27900 -IgkrGjZj;3108,89617 -SxEEkCtR;72135,48495 -KXtreRAV;22461,38309 -pbtEXSyD;81413,25093 -ERjsMajh;33272,61356 -ahCVPtLW;61821,8878 -cfLnzrEL;54742,73085 -LobfhXTX;36285,34557 -lGSFiNle;38005,9771 -BoICbVSf;54853,65623 -FpDbBexB;54024,15291 -mdLiVEWP;51223,63558 -dtDTwQHr;17264,65047 -lDFOxmMV;63237,63110 -UXxcjlYR;55871,80149 -VlHtmNWs;69504,15367 -knwFZlPv;61338,35961 -EeMOkZnr;63533,31278 -GOCcMpWO;15523,74599 -ilHaYdfZ;30866,43568 -BFMNHawJ;34970,48476 -hAbYgWZb;11722,61424 -ADMjwktt;52426,5720 -vkMIwhae;73864,81723 -XQyQejBu;33708,69278 -SAnvjJEw;72259,16333 -AZVNOvrp;80078,44018 -tkVZNtfS;36135,52900 -VscFIbfS;35767,43946 -isTzusnR;83654,64579 -akkgZNKe;64233,30901 -FuHpsclr;43777,47114 -EttfDcTg;69676,32419 -YTHeKxvX;42921,38747 -EcGwLQSd;72303,19125 -uUIxWOtR;48393,59269 -IcGycNEQ;80781,17492 -KnEkfVcH;87936,88066 -JsKNAHQr;13006,28647 -etJvcSOx;16278,46431 -eJDxiJxE;75569,35894 -VhQaZYSg;51860,62769 -YIcuEjvt;29244,30341 -QIpUWuqD;41577,6845 -DpvStYVS;50892,57730 -gryTxczH;69878,64204 -yjDcYCfS;50084,66343 -GdBshoAK;7543,76791 -ZYSEcQtR;32672,53869 -FBfiGWVR;28706,10138 -TSohtSEm;10226,76187 -clFrIUAe;38033,89761 -CRZAQGkU;69070,24698 -YNDcQuRP;23242,2201 -uaYTTWqP;77603,87107 -MFREbJIi;18774,79044 -VkVeNOug;17667,23006 -ZQgJfObi;22197,4112 -uyUvWcOL;67086,58121 -FqzKYaek;39024,30593 -aMbmAjcw;26568,16170 -QSvprgHd;86046,70761 -XlKMgaQq;59727,24441 -dTQWkSGi;21580,82386 -ZZyZoWBi;82958,21586 -NmyfBUWQ;73602,30757 -Gpedlwdd;11320,33324 -zAGOSMuy;51223,84319 -TeuSVeLA;68288,33458 -bRBzGNUA;82125,75085 -fhUKulCs;60813,13975 -BUlzbrzc;89750,61593 -ZsBYZpLr;20661,74385 -KRobvsoC;60459,54173 -pUDLtdKS;47984,88840 -yRCXIekm;18120,67947 -dmSHHUCL;69775,60087 -dfBjcIQT;33274,21014 -DAeaHAgA;7225,56790 -QdbnOHkp;66386,43166 -dhtUYJQa;79675,64270 -ONvrZAev;21096,22478 -hMvjNKpY;76983,24348 -xEPiyOIj;19811,69463 -bLSikGhy;63841,5575 -omezhYRI;52628,2541 -yiqPVzKN;44503,78728 -PFFsdqBN;42461,10204 -bMXqROFE;25156,64776 -ktJLxSSd;33217,79165 -RJgQruBs;79919,67551 -zIgMGZUI;87876,31086 -WXHkEQAO;62281,1089 -bWxtLlCj;64503,59511 -YjYKTAJA;85730,67082 -XHrvylZU;44520,87297 -qreSosOR;36328,45207 -xFDCikYO;39061,54548 -abixtaHM;18245,14625 -iCtkwZXC;86407,4402 -GQMAwFNu;11050,83840 -yxnnkqWp;60593,42512 -KLMiCrIq;42355,10341 -PaTkJXRw;13726,20973 -PBFlhinq;62927,75209 -ocVbWUcy;48717,45403 -ExvqxxGb;40418,24639 -twyoQBIy;10661,43530 -KSnyOWEo;7531,24488 -vgPqQTBS;37740,56864 -MApMYOuS;13217,37320 -NovoUQfR;69439,13104 -qQQVephX;32600,76086 -FPGMKXrZ;18470,68695 -eWjGKsYF;87827,4930 -zzjNlrnc;80103,59056 -VcDOGBEh;16591,5345 -UKhvzZpn;28717,3794 -aLWcRtou;34975,59717 -SsfrCpvu;25832,75645 -htOjQpke;37716,7252 -IePJQiQB;50727,70165 -RkJOjQLG;66665,5357 -oVHjAHfK;17011,63825 -UwSTHgnF;51086,75119 -fzMQjpse;62679,58455 -qdIvOViz;68032,56699 -BOMzcBHn;42276,76358 -YiGvOVVq;62111,9078 -TREEZTmm;18228,88271 -zxnXbige;48358,76148 -YJhFJhsB;64703,63004 -IjdUCEnl;68919,82322 -ktpbfHzb;50139,11718 -YnYuSIbm;4253,19263 -BluUTSGD;11218,10548 -uqVYCsKy;32678,31210 -UodARLep;73187,39060 -CGzcftbr;14708,83524 -cwXAXjFO;34330,76143 -AXiRxqZY;56949,28581 -UcyWifHj;83179,66072 -GAYtEdPY;78295,61669 -nufVrOLU;64822,10455 -FdqqWSmw;7065,75042 -BWBqORMK;1209,29382 -ueEjoTmK;64882,50098 -aPPaQfbG;42863,55765 -NKxaSOgc;13823,54581 -AfygqnDY;80122,13488 -mcFwYYFz;46471,48561 -gnpFgkMk;78687,21171 -dYfXYpKb;54749,41472 -rxLltbmw;30668,46867 -AnAeLMzU;48527,35698 -dbposRVp;64897,26040 -lNFBuSUy;60022,25135 -HfurRdEN;7871,73213 -avuynAHZ;1458,4878 -xposKUYT;57960,62801 -mkfboKDF;65565,15682 -SWxnroRg;69259,42837 -lSsfEQMu;87677,15130 -BtZVHEyI;44973,48527 -cxkObaSU;88268,55963 -TLTOdIfa;56890,29851 -nWcrjzQm;85010,43952 -OZDxMahe;25680,40131 -todNgasO;31017,57461 -zpNomZtu;50276,20532 -CZMUaJLg;15159,67552 -kzmNYwyU;75466,3283 -jdfStqAs;85089,71754 -ltadNvAP;71093,9689 -KnhwiyIg;2753,34408 -avOvaLbm;45546,60485 -ImvzgVuO;7032,67292 -bgqnwYDr;53182,10820 -EFajBDCi;35131,48783 -LxYHFfeD;46689,68839 -KdhVFGTG;69796,85477 -dNprqpsZ;4863,6367 -evBssfUc;76800,41138 -CbuStnlK;28876,85914 -uDlAPGin;49185,74834 -KzIFxTSE;63802,88910 -OfoDnyjK;78177,10557 -gEyCMivm;26981,11267 -gCSieghd;67817,15013 -oLhXxvVJ;65699,34070 -mhDZzudw;6165,88143 -GjVYKhqg;89309,49018 -cMmaKVrl;42175,50985 -PRDBAWmc;47004,17411 -YZZARQnw;27090,18574 -VUaTKjPr;51789,88180 -tzbuTNtv;68271,39156 -cWZZZjIx;65334,1455 -ijaUyFKo;71948,60189 -gyYnCzrz;87907,43622 -qdecPQTe;30375,51453 -HmtaMNlH;39003,3679 -JKRiggEU;55596,5986 -nrePohHb;84204,10089 -TVtvLoCm;55808,33073 -dRQqtIvQ;23003,16706 -fSkBhLyF;82882,22418 -kainsEzo;86226,3638 -PbFKCXaf;63720,51992 -RKrwDiqe;7957,12675 -wQmuHyvk;51801,63966 -jDDIuiUT;39745,16612 -wymahTnx;31201,53820 -psXkuHBx;64539,55899 -MXztydcl;59539,77105 -wQMANHai;70954,46616 -QoEpUzlf;40278,81175 -GkeiwEDX;48163,44969 -qnDhwuSK;82775,41377 -rYmOFDYY;50080,88316 -eQpgxOEr;36585,15890 -LOvunKjM;39336,53605 -jDVuPrEJ;5065,4602 -jEwJHoYZ;21308,2015 -kzJdmpkh;1505,59318 -XKTvyeyr;40720,30717 -TUOeWGks;44134,25618 -OrRVKFLx;31699,20386 -jGuFHUOT;1304,83703 -XzlKrtrM;76845,25136 -SpsBmXDG;5871,56535 -DBnGaOcE;61398,62017 -khLMQQnO;55653,17367 -qQiKuyCY;77070,31371 -owyqRsfu;8642,26437 -SNtsySOd;82741,62980 -jxUyIJmK;32979,20914 -fRDacBkq;49976,55947 -oQsMpZdZ;33884,64705 -fZQzBJrp;55614,61083 -yMHkawwo;84138,17059 -jORqaytS;48626,67555 -RQcweeHp;30692,17092 -QiLtJJEC;24537,28927 -UCqvpoEO;12201,40845 -oFgECSXo;55250,6305 -hNOOSppG;10334,74709 -WQFocxUk;25703,48631 -eeVXaAhS;26616,45140 -TwkaLGaJ;39345,58497 -HUCvQNOC;47852,26906 -FgUTexoS;53715,26718 -paDVPTKu;71793,34854 -aqVYMkuB;74531,42278 -cGGUXtrx;48820,47239 -zkEFgovp;88381,50836 -iSebofnX;30420,66657 -TKTrvavC;63216,72151 -jryjrHLi;33000,65026 -ReFElXpr;38551,46044 -JHKuvUTb;75149,69903 -ISJYwoih;19011,62283 -FDrphRNt;14170,47331 -eAkzsgUG;31391,74110 -qutonjqk;79390,16646 -JgYIjNex;74678,73557 -MAgSiidZ;77425,69672 -BoInskOl;2847,24918 -KbzPsasW;58309,18761 -TuGDAVaa;11958,84858 -NagkDdMY;33462,46305 -CtyABSsK;35470,50453 -ieifgjEX;71651,52781 -XzaBixXz;45880,66372 -ILzknjzw;74255,35338 -QRYlWWYh;54010,9341 -cLBfpEjr;55318,80140 -uFURJekW;37384,29350 -zUolAgMy;28341,41195 -sQwGpHFK;1490,39291 -abHHSdKT;83865,39548 -fVHjehze;79826,14156 -uOtLebdb;53764,88151 -VpdfemrH;62863,82593 -yBJDVxjW;40219,43115 -HiYWpYVm;27393,35963 -vuHaVmrg;83852,71224 -XYmZchxL;9398,14177 -NuRyfaAu;26285,17116 -NQuefGHK;63986,23009 -dyERtaPq;3750,86712 -GspRTGXg;87156,62001 -iqkDpUQU;16475,48026 -MZiHcBvw;81314,31960 -EvCjREDe;50000,39170 -gxgwNKbQ;63993,46513 -IPgMnRpr;80906,77057 -mGfvbCoP;57789,77652 -nqSQgFiP;70471,59378 -gmTvskZh;20731,47980 -rOsjYIwt;11650,75312 -FqTiGOZJ;78388,3670 -KLsGHvRY;73416,51526 -YKNHJMPj;17179,36863 -LIYHQWkW;26369,59230 -BMDBjdFG;15463,29813 -vCgdVUxX;56983,60618 -ETQtpXET;87669,28403 -xkRgtXXU;35984,67665 -AiTyCLim;54145,64633 -leQlSyBy;70734,51443 -dpoyAsjj;41518,82084 -eMkOZvKZ;86383,25212 -wJpFfsGn;13043,83448 -hMuPODMp;8346,56603 -mWLqHtIX;17491,75912 -vPHtJoyM;65261,15113 -NBFeMQMV;88617,17731 -MnHwVDsL;49235,52199 -JjKvPcNx;80186,34813 -DZelSZhe;61099,51455 -zVWdTGYr;59634,30830 -ifIXnLGY;3971,41273 -bDOWNuqP;33466,84796 -PkzGbDMT;58570,33266 -wcqoRibS;38843,26816 -gaYGcDCJ;62600,27259 -MVOVPFYj;2296,40195 -QOruAEmO;14430,86189 -eAcoekEY;30581,88006 -LIXBwyXE;61408,46205 -smhJbRFS;75990,30511 -tCmFLRUZ;44105,25319 -PDPodTpu;65066,40651 -fUZKIxLp;25877,1596 -suUvTZvu;36673,44588 -FdneSATN;71297,64115 -POPAocdg;55825,33348 -CauIkvxR;73452,16884 -INLRZAQM;46912,66572 -hBDIZGXC;45419,43454 -dbOWDcnG;3194,66965 -sUjZSRhp;72764,45783 -DqxrBudm;73029,9404 -dRtuDupV;63800,7479 -RhYpRFAT;10207,64452 -uBPGdkrU;20230,47172 -SrZxsken;45126,82072 -VSARoYGb;68027,52436 -dseWLUYn;4124,43339 -iboRglNx;45957,21179 -DVCCUQxx;13181,64171 -JGImSuPe;76788,64118 -jRhZDdBr;11849,88510 -bfnPhuIc;42717,12646 -MMDrnFTA;54000,86872 -zMlAsRAj;61145,87413 -SBpsicxF;72019,85823 -hrlzyZEC;24089,27808 -FurZOqJL;55060,1799 -YenFaqqg;46677,10736 -QEQTvvzo;66691,89302 -MXEhKBWC;10774,47304 -ZfFmPBHu;58933,65181 -bgbhgPOu;80443,1635 -gJNBgims;41383,67735 -ZXgzBXxp;23841,60301 -XJGLVjvO;64637,62430 -vHIMWOZC;89005,38003 -MsQrAgyq;87566,88860 -AEFQJVZS;16479,42492 -NrcbuFXe;8517,39500 -sDlRwcgc;6687,23730 -oLHlUJPE;66828,19574 -ocOrSCYc;32562,79344 -dWdfHnJY;12196,59477 -shokRzPM;73063,3549 -RgydCmjY;36036,77562 -Pejplugi;29232,41802 -ddMnwavS;24940,37973 -zkiEJhfd;52848,80800 -EmpHixxw;21388,11449 -KEfLUqLO;34635,69004 -RiEOhIqH;76589,49002 -HNhFbNuQ;21229,15231 -ILcvUEeB;32671,31851 -QoCHajup;44340,77447 -vqgsDuMv;57338,84583 -gdjYnwnn;19587,3839 -tdGQnKMf;60296,49048 -PnKECCVu;6766,83451 -zGIqenHW;51577,66901 -YNjRjsyM;34732,25657 -LHkluFMZ;5131,15701 -ZFxTOtqm;83988,41909 -hdRKSzYV;6066,74688 -pScSVeJr;35551,79535 -gVgVbWmW;73543,46809 -bfOTePIl;36729,58503 -HIlLmRZR;89854,49357 -BlAbMaPj;49083,83103 -zcPIxtWm;70258,37484 -hoQThDbx;17986,51777 -TyagNtiM;81528,47723 -HUoLwkGp;46568,10509 -KIqkepLt;74931,8610 -WLluSYnW;89767,84177 -zzIxJXwC;42460,32575 -ldjgBxCd;57647,77569 -lkTQhfIA;50552,43108 -ArvfJqEA;75775,20010 -KEGQomHM;2997,61479 -FMnYppPF;23652,17392 -HvafQYhC;7601,60776 -dDLdbGyE;27056,12930 -OhyRouBy;83440,76412 -BkLbThls;18146,29225 -htLDtYXg;44908,16994 -DWjZMvxZ;27360,10301 -enmvhkLK;76883,84676 -kPKWNkJz;20680,6532 -wkoBtDyV;63001,27553 -RHhFvpgK;72754,76491 -hvXaGkQC;32794,13153 -umcCwuNe;55669,32045 -GUOzfXPw;46859,64716 -xKoZFPNl;64078,2484 -XGKPmCCB;34440,81120 -ttVHBqda;37914,85982 -YwQLfoUC;30354,65286 -quzjTnLW;22846,38828 -xUzVraVq;47455,53366 -OVZxsnTl;48428,59573 -cHrXjebd;15522,86328 -qAjCDMdb;59633,42979 -VvkUuRBm;43722,63425 -VyvrOMkd;48089,28508 -wMlyBHyE;24840,10353 -ZsHRilut;18031,89703 -WRZliHUp;83893,45531 -vmwCxZuN;71169,86162 -XVhusDfp;69675,57576 -dTIzhCZd;5740,65021 -PhWHyfgd;59214,48344 -couPnAQF;74190,77639 -FnCtaDVZ;40095,69349 -ucBNWmoK;82409,82228 -TdJnmAcK;19469,51084 -TEhHAUQH;11853,44379 -qqFxrQHL;86297,73794 -ysmKWUNP;16150,83118 -YAHZUDkK;32324,80671 -ELWLhwwE;87340,4634 -JvXnyziS;82458,40974 -sskSCQxU;37828,78575 -yTxzwYcX;49852,13623 -xLTftiNs;57045,15325 -xmwJvjgF;86865,27977 -fVeYvWrT;55089,62890 -lcqRNEBP;54450,83333 -GQPNnaIb;14744,48164 -dsaUlFpp;76493,89968 -WFrQsYYp;50035,2418 -mfnTXPiR;24807,9287 -sELbMcuO;70956,78613 -iHLajRmC;40580,80263 -RdVqHBrD;49146,81177 -WzxOAirM;73922,57419 -AGPhVNQW;23202,7591 -ckOIiGNx;61322,77414 -AqzPTlaJ;68626,82750 -XmDiKBwG;80928,77470 -MPHPeJKP;25782,76342 -JFUTfmMt;80917,57376 -QOpadIfo;5376,13512 -OBhPqcDD;49608,84593 -SGosHrKF;16615,2012 -KDiheqxE;40250,27415 -llAttZNL;18420,65119 -oXossmin;76882,42956 -CvFPlSri;48272,44574 -UnIHrOVJ;5548,77590 -CWzNgBNA;67860,42323 -CIplSIcu;9279,81357 -vQWmbMqY;82395,26718 -TKgUdnIM;85838,44922 -jeHQewEj;76742,85762 -UGsdIFhi;46163,4628 -YACvJNvF;49566,73676 -VKFAAQQM;14471,11280 -NRMmzwuU;68415,11940 -eMvzdkck;44398,13958 -bDixvzxP;23742,50756 -JmjCsszv;65961,35296 -JKxiVijf;22003,27018 -zklVBDjI;17071,12273 -YQsVUUqa;17916,86793 -zdVQSBNQ;9294,87300 -iIBTClOW;79155,87119 -AzpVtyjP;22613,38077 -ZcbWnIQv;45039,26019 -qhTVPKFq;71935,15774 -RpuzmDCk;32636,59062 -AFLFmdZk;45492,3674 -lBfUfazT;35984,84301 -fcsjyWhb;53180,78679 -VFfJwTrK;78213,34165 -yErjagvN;10938,35126 -pbFslezh;63210,89531 -xkydDIVw;68050,42349 -IsyhwDCo;17315,19831 -zicKNduq;72587,20460 -sBDnQEjB;20409,87743 -VvKVusjL;15030,1363 -eFBVezBY;6658,70837 -IDYZfUPh;8960,85937 -csmWCkPv;11085,27513 -gugbYeLV;5877,2346 -jfgexOla;8403,39550 -sKNUbrDp;23755,77891 -iIfryInN;13783,41412 -GAlqBYtl;43552,68135 -uSZrApjt;30912,4443 -kakaZipM;13499,51704 -NQzRIWFW;4770,72880 -VzhGCfiY;37766,35946 -ybYtaFqb;44223,13108 -CuEoqSVf;82335,86554 -VldSGGUv;45980,80978 -rGFTiLyo;20009,57029 -lVsTFxee;86908,48006 -QukdusrX;55085,25694 -rOvzpPlw;37649,33342 -lPOnSGLf;7915,65640 -yiHMWfMc;4410,48326 -nKCyQXDS;25765,30977 -qajxCpiH;12537,65940 -tusvaxuW;64054,16198 -ipWPtNQo;44374,25267 -cKHjHgIT;16080,40472 -qHMukKGY;73017,73164 -dmaJknKW;55360,77442 -HtYzXkyd;62809,78257 -ecIDugqA;70448,81067 -dtmlWSOg;31909,23382 -fFEXtKFI;79053,33712 -jSnQWDiY;3751,82337 -nHnSNbfN;75334,15731 -NPNZOvQJ;68187,21082 -lXHXvKuQ;23053,70609 -DHGFfnjc;39383,84560 -vPfLBbcQ;23669,63357 -FCWENCfj;47630,75307 -gCuznNvH;49913,74397 -iGNMnApC;82408,37419 -BThvgFXF;7781,28458 -rFkRkpXz;2132,23733 -xowMjUyk;9358,81490 -GeMWdRNr;2128,71460 -IcNYIWLS;49578,62310 -TbvbUPSt;28530,32290 -OBFMLOYE;74048,39965 -DGmWGYrl;87680,19115 -EAHcPMKD;25865,48944 -faQozmis;76489,88497 -CjSTCxLv;65707,77633 -SnsGNnXF;76519,88386 -RGxYmXts;35139,68185 -txRiydRl;25236,36404 -CVlhVPlP;35175,41406 -zszDsXsw;74766,24997 -ByWTdfas;61951,86093 -WRCGUuMb;51228,18413 -hWiCAWMM;75790,16656 -jfpcJqsX;80059,82212 -FAeBoCVo;35861,88415 -lkhDTDFI;35331,59544 -UehqARMm;77906,25812 -OAyukEbi;86803,26076 -yGZVNIoQ;87537,18246 -cmhFEMvy;10444,61111 -FOxJvmWT;43183,54427 -IYAUUepB;75745,6569 -UagGEsEf;16360,24249 -DrjImfKV;88731,66671 -nwufwuYr;38639,17879 -FEJpattu;31980,9111 -ombtUNqx;50658,19836 -yZqWbsJv;37634,29519 -YmrdgOTB;52528,79386 -dZyozdMQ;21013,41514 -ODGrscpI;74680,9354 -FvGvRqUG;28762,8456 -filAfzOI;56310,80270 -bkeBFaJf;37076,11936 -kWeORsIm;34983,67826 -OfyBksiA;8212,83600 -qDFzjLdM;35819,67985 -GTwChdwM;12603,20329 -EIcfgRCC;11316,25280 -RvekDhSb;16967,37722 -tlmLpOkW;84459,77119 -oYlWGZcq;33214,35305 -PrpZMRQq;30974,15768 -NXOFoshz;8114,17789 -pqgzIJtF;49877,5279 -JAbcrQlA;87745,8663 -dwIiUGmx;2982,42124 -CAVrBTPP;1045,36924 -oGuxGUmQ;20769,10833 -zLuGprJA;23146,58086 -qwnjdeSF;52996,37032 -JyxSzGWL;44762,58538 -UfMQhiXs;37216,9791 -jiSNQnVg;17553,49461 -rBjOalvv;51076,35428 -oLMRujuh;52830,33521 -Psmwxgsy;17581,83123 -RgOmVGln;51322,84786 -UArcGRmF;21441,45938 -emVZEbUj;70356,86104 -pyyAsWRo;87399,34343 -TTgSJeVR;14921,28491 -VhACrKrB;28318,47724 -tnognpGQ;75485,67278 -OMppckLG;41302,22273 -STrvKMhu;54536,43858 -oMJCEeZY;58731,27972 -dCMomBpY;71383,84555 -iOJTWXai;6629,5546 -RyIOynLN;50100,6708 -LyNbiTrN;68710,36307 -XZqrRCjD;68808,32712 -zAJnzumw;79326,41590 -ZpNDdVYo;88224,28561 -NOpgTlaB;87996,84245 -IEDQBTqr;16973,32402 -SNKwlfzz;64406,26555 -cFuWgiIR;74754,28089 -tBnLGhWU;26226,24265 -bwSCVIZn;60379,7890 -UtazUsjE;59128,42787 -euChsrUQ;10894,72797 -CVzUtCho;51327,59253 -nNSIuMrs;10899,85963 -dtNJQxQh;35269,32077 -forzMNMw;78559,80787 -waZhwGwy;16381,34682 -icgpxUad;60246,81765 -tSJgrtZF;19647,89014 -aACUldvT;6930,39081 -zMPvepqn;19506,16652 -pzvicvFa;4697,61152 -gyiqLebG;48008,49168 -BQYuUuAR;7964,54413 -CjDeikZU;12008,29352 -hSknIyqX;39281,3986 -bBGdLZRo;70831,14412 -kUVsbXai;63936,57089 -XfwoFsrn;72509,72260 -mORMdPRq;70863,77027 -mMSIFTPF;76668,73339 -AHEOgNpK;49150,6605 -wUIHwuWI;60538,69952 -xDqmuUbC;16351,9526 -PUpWcsXh;7206,87197 -JpmFWwUN;69241,86452 -vhpJCLsM;53667,33894 -faZozlCK;50515,45863 -ndJwKNtw;15397,12903 -ZDbjqzwv;87114,71287 -IBcsdEPK;28504,25289 -vRUXKWly;6192,69680 -gWxTQsVl;11505,60311 -ZreTzVCE;53546,78199 -rJICGEMr;88785,67762 -kdbeeBLo;85297,9991 -goohHXlz;34726,42523 -puDUzinU;82902,9208 -GcnZdaUX;12791,78150 -MIpZsKiH;16682,4024 -qoyXcDmS;22539,28285 -fKCheDaf;68228,35243 -vpSmbMpt;54734,60213 -Akhxwqjr;63636,6959 -RwlyxAdz;54399,61049 -QCqVsXTX;33864,17381 -UShbanmf;41604,32763 -hJYVRhva;23449,18016 -VvwzFmwT;89143,54505 -xenylihT;10783,50522 -LqvCyxmk;3971,69141 -cJSftlsP;84640,61647 -jgDnJjGV;61002,33004 -wevoTpEt;81394,13272 -PdpykuEQ;84436,87933 -WEISvOQP;10788,73331 -yQfEWSLz;55145,26890 -PbMVLiPX;58332,30762 -tzkwRpkN;42816,1610 -efyhozqY;80573,3594 -UZgBbpyq;9218,59783 -UCXrBDJf;74218,69851 -jxOYZdKS;17311,13526 -lPnqWsyW;36802,39657 -wYepNpix;70241,77536 -egRrIJyx;89557,4258 -NVkrWbuw;30323,28725 -PhOOXxNt;77485,16448 -YSHUxNrO;82472,58354 -RMzVyMwU;73067,49788 -ETtIKrOW;10722,66334 -nPhGqLdp;79472,66878 -yLzQLzvL;75974,60603 -wiPosPCT;23831,15255 -mCwGSUUF;71755,83231 -HkrrYHld;47808,60847 -bmlzVJxd;40400,27725 -DpqmaPIQ;73857,29248 -tWbfqAWH;49879,42549 -OecKZjhU;4565,67511 -mTpMTzEH;15305,84686 -XqeTkgNP;72488,14862 -JhoYFHAF;45777,41917 -NJtAUbum;10275,40561 -tEgdhwrV;37752,34748 -hjAGSjMo;28425,62185 -stXDdTmk;23691,41782 -sXljnGvr;86096,26822 -LAzoVtbb;16779,9716 -gnzkGnid;75251,36717 -IYrBkkRr;60236,44488 -KBuxfRVy;51913,44137 -CZgSlyZk;24391,71439 -cNODQFem;83192,38414 -iYruoPCA;2320,1136 -RqDQUYqy;30577,19546 -siGuLhGy;46203,52748 -VLyPJoXx;3754,79770 -KWfOtYmF;72199,81515 -PoPYApmx;28432,13508 -NdreglcU;5298,31780 -RmkFTqeu;69621,31112 -GConjGoi;33776,73993 -zfETBZDY;79356,14285 -dsWuWzme;39423,18284 -OOdRHnwV;21891,86976 -LFnVszrU;38512,59719 -TAMLrVkv;50306,78332 -KlSXwboP;16196,41836 -QLUqCVqu;46954,70050 -HKEZVWVd;50710,39402 -UckXxAja;15221,80616 -VrshsMfc;69998,6697 -NXDxoyBU;34072,4706 -ebpBdLKU;10531,16921 -NCGjrXQI;40975,24963 -SMLCELAc;52981,55880 -HNnXwDMW;45966,38545 -QwanIifB;64988,24088 -IIoTVZhR;15483,81398 -vPwUXNkU;9661,27347 -GYZgWsOE;88814,40817 -PCwXnojM;14603,8949 -JIFhPSqj;39534,76002 -VBPVIQly;11032,37468 -ATKmAQYK;33954,51525 -nFSCocPu;41874,55531 -ijecXOfh;12008,11079 -KbNjlEam;49667,18416 -xAnGKhmn;3897,62941 -KMaiNoVQ;61777,86623 -srpIKpsA;75383,55748 -lDzfDWPz;21622,25918 -qdMBTaoX;32352,14635 -ojtCKQeE;53173,12584 -PgKKeIyY;32301,65867 -mjMXWGra;20315,3209 -tMLdMNff;79730,71918 -pylIBeTF;55175,1738 -JHcHuCWy;28267,81870 -QNbBZJxP;18831,24136 -wgaYJVpw;62289,6337 -KSUyZHvy;62523,89354 -ZDiWEtpn;45852,79413 -otqYJNXU;25966,22634 -IgxPpPin;56798,45893 -JClrAUwf;33125,22026 -kfPyxMoy;74856,11349 -HivBFnvc;82774,81502 -JKQhGwUX;56386,13126 -JwNEkPvE;24570,70681 -OqiXmpbZ;9842,75058 -JckunKTl;41117,71630 -xZKtUUul;68368,45155 -MZAXTMco;33787,36898 -QmZLkwDs;31042,51939 -tdKzSFlj;53448,44912 -UVzXDlbI;83386,76572 -oHPQwbWj;36151,68230 -QnpPeYCj;44956,41175 -dhEROeVj;70822,67725 -cIHHdAEn;37160,73875 -PRiZXoSQ;59150,35901 -wUvwlRIA;67387,64600 -SYQXzsTG;52249,38173 -vddTnzVd;17159,57825 -uxwCzMHq;57772,16075 -yflmvDbS;14737,50056 -OrjHSZFY;32104,60866 -ZJaZuNGs;11988,30920 -ArjfXVfw;5274,3760 -ZaDDyRmj;40136,74642 -npRGzMJs;47305,21922 -OIvRMcYc;33927,78101 -VzGkRCYV;39869,68672 -OAzkulbt;49338,48307 -fgWPJXWr;5455,12524 -AmYovEAM;16084,48729 -ddqkwTKf;75294,37072 -nuAEpfXc;13276,82760 -XJEUhiPg;7549,19956 -DlLBSBtn;46642,60546 -RnPnXYFG;30916,19038 -CUaSuLft;26405,59374 -mklYKFjF;59353,88644 -yxQhvLkE;37619,79827 -ThWZzYqo;78213,49822 -PEPvQcHD;29957,65557 -rpZcgUbO;84342,52157 -HdiWvhDH;14517,3149 -SclYuoKx;79511,70209 -fNfiOzdl;14527,45769 -MxVmlRnW;32807,42735 -dyQsBIDi;57341,88630 -MYRYhiKJ;30702,44019 -SuAwEQre;44218,1195 -SuloTMXy;35941,22738 -URmKmaRy;67904,87900 -NpAguikr;74786,7744 -VOEdMQKY;74183,25702 -TZscrwSS;3598,31563 -CjOLSKhk;66735,26806 -orcDzHLJ;37260,84456 -HnALEQEd;80312,5084 -IWzcBFQW;8508,82338 -YwNRaMjD;67450,23625 -hpnnLxNo;21630,29915 -HlxmETzN;77410,47702 -TKwZZHkp;82482,10415 -bfTGHdoA;79748,57303 -qCvAPqjh;13694,18404 -RPxytlcN;31757,86403 -mTAIHApd;12482,55509 -RYhPdKAX;40167,75589 -JjeFRmOq;9124,71750 -DdSdOijV;66778,13181 -fTkRehlj;71559,28315 -KmBwboXL;31395,83709 -XKfemAcn;9495,29518 -aPIDqpbr;22302,86422 -WZOJAgkT;20336,12634 -zfobHCDw;26564,84532 -EoURUlVB;39865,86304 -TrJnYwKh;18579,87707 -NbTbSqud;25741,20178 -zrTTjTAg;46988,3072 -dvPrWFqa;79589,9887 -klXERbRH;5839,5866 -rofZpJaH;72010,15616 -cHMMHYRv;81018,72344 -DfMBfMmx;59958,32739 -pvwlJCDG;31626,24141 -NdENcqKh;61288,84950 -XQmWfMFY;8509,46831 -QdZYlYhc;17439,37640 -APKfllmD;85761,26751 -TEBFSnNV;29702,51942 -OsATMstI;58618,23701 -JwFHdnQS;31234,26836 -kocrlEGz;41737,30442 -cBFIsAUO;40462,57912 -iaxDAngo;40699,4300 -OrKqckKF;45737,2195 -CxJRuVUj;73746,34486 -SpACLZab;11896,52646 -mLVDTdHy;50390,33002 -mjmPUbfS;5944,54648 -mJhEUopS;19474,4646 -RMXlzFuT;76767,64740 -oTLcmrYm;37441,80045 -cjcrZvdi;36414,5990 -rTpLIDzr;70847,86621 -XfLSAEZD;53167,16530 -nDVSkOdm;34874,12689 -ujQmYbvl;51009,61151 -SkgWdqmG;74530,32449 -sZmCrtEj;78098,43882 -gUGOUfIl;26172,59836 -tRTGeWHC;22385,78827 -mEVrMEQZ;2996,67729 -bxLwXocz;14315,15217 -wtolGvvQ;26051,36326 -SwQwkTHs;43577,9141 -RACcqusg;79853,37722 -lrtvMaws;44827,86952 -XKKdxsVC;44878,26781 -ClwCaOtS;69640,4781 -KGlsNVCL;55255,24839 -zAmDugmk;85417,89443 -ZlZeKzQA;33373,66135 -nuaJTvqg;11484,80987 -sgMEuGLJ;3333,41254 -zZeWLUQx;60664,19057 -mUxaBgUf;22940,68739 -lLMvRecI;80583,9610 -GmFfpZhd;12409,29921 -CRGkmyie;7718,23055 -lqVmpLYi;83729,7063 -orhdeKGg;61415,51816 -cThIMOAp;28002,36348 -lgvZluLG;13916,81262 -nYgEKFjy;23461,46100 -zCNCZckc;29896,84417 -cWTuMaVH;15283,50985 -awhtGBFf;46740,46000 -zUISutuZ;83593,69878 -ikbGPOzZ;41796,64952 -zaQGkkrZ;86976,49019 -abKIrlPP;37046,57263 -ztiWGmzC;52042,30032 -RucRRjgS;70728,34181 -tfqWnpaC;70353,16752 -fhDsuGHL;52549,4237 -pMHspLcW;29323,65447 -GUVVplRk;67695,28641 -XcUVQvFE;12947,47855 -RnweELBi;15505,42866 -negamfjZ;64298,32282 -rvhFomma;72902,31232 -aErKUzSP;31809,60701 -zPVHOKuX;11702,33106 -cIjBAuLp;50625,5139 -JzMUsWLl;53852,5571 -wfUIeufG;12727,75661 -qPOqlRfO;60346,57453 -feOOuxGl;85706,63104 -BqIkxBEN;43238,56408 -zDNqAQJC;48285,67194 -OaYmcdQN;46765,25859 -wjGXZBUG;31311,10089 -PGTfRLYR;39716,53191 -BcGKIOYF;12849,1439 -UlUZMNqj;82550,16372 -knaRuOxp;9511,11211 -nTvJLJhZ;69278,38932 -gQmBQTcI;60278,34417 -cMChFojW;25971,24461 -KJNPhKCM;20559,35337 -alxqjOsZ;34567,30701 -ZywNKHpD;63526,44981 -hZDgHOel;19198,68045 -szaUOJCn;35956,30694 -MFxaHkHo;46786,38460 -DiqUqmHp;32867,13640 -jJfRYAFq;58430,52428 -MprJdbQq;62916,23758 -PyzjcguU;80729,15359 -vTtLaKJq;33466,48877 -PmPaPNPe;4946,26955 -qNQoMEXn;84167,46713 -oBKVFvHh;17341,18109 -RLkeftQR;12708,9507 -jfFzzYsf;79540,22912 -SOVNXIMF;82978,50275 -ljfLkMXL;59804,35609 -FYIMNxnG;16024,10110 -COYfKqWv;8444,19292 -LVNtHXdj;69295,46510 -FpmuQvFk;64720,77449 -xGlcpPlu;41216,21227 -mAeTwNBU;77263,83862 -naXFOCri;24309,53005 -tbqQPddZ;85090,21510 -tYqsuycP;47377,61469 -tpVryrRx;13659,48944 -HeEiAOXC;40420,6725 -uwTXZHmm;27277,30493 -TdbjRSzE;61598,10305 -poZzdBqG;19412,53453 -sRmxBvOg;25235,27727 -denzcLIl;70912,10299 -GzKVcNvS;74543,60956 -urtlNUbW;84025,27274 -BEZlvWKG;65719,21338 -KFwTxmbZ;59286,1017 -eMJgFPTL;28523,33676 -GPJMSspu;89529,2711 -TwPYvvuq;34149,75744 -goXxwSpU;19333,46788 -ndISIemK;33441,46376 -jElezaAX;30999,55424 -zSdimQmP;11799,71283 -TMeYepUV;10076,81685 -aZgseJtX;70428,50567 -AWKGDzMV;66893,5276 -dIRZeVrw;23004,9716 -WHayMMtx;53062,62382 -fhDRCnfo;5840,8512 -cnYobxWj;44886,5189 -YOoTnLbF;18072,12776 -ItEgRGIb;23229,15088 -RSNslZvk;31866,32730 -KuQQyyuQ;8073,37467 -XLxbpsDu;50510,1092 -sKJBUcrM;56975,48794 -OqBhPegC;33607,70527 -JiMaoHsD;40471,59473 -cifajdMj;75808,87939 -HqkRHlYZ;14681,29252 -jiaAmiMU;59031,54643 -ZxfdmEPC;81208,21213 -WokRBEmB;27645,30827 -QAIGKZJd;45783,22424 -PBIehoAE;46728,32773 -SfrZYEUK;22345,73390 -zcRSEadE;75524,2302 -XARTUQxO;51907,70664 -smyOPBkD;60743,10990 -ufBbkhMD;60762,84890 -gMLaWtMk;79828,46994 -QvOCuxcO;47299,36257 -TAIvMsAn;40875,76223 -BjgFhrYz;79124,73621 -vWjQxUOc;82116,40161 -cVJIxZwp;65151,16601 -qxGUaHcE;49475,49717 -cgrbsvYv;75292,43846 -jBGbsMet;50577,61385 -OYnSuKKb;86744,27509 -szVJtNJM;5479,18840 -ZIndWQLt;37975,39562 -HoqwneUZ;86543,49533 -qRNGjNeg;10653,59228 -oxVjdgne;55990,3762 -OaJXQZhs;76356,3917 -QOVDUMlm;32694,21014 -VePAUMLd;69391,19540 -toGsryyb;50759,12887 -iYYwrcFS;10765,82292 -GMRIGHjx;80698,52067 -rHbhJwyn;41385,53060 -TsoMshfo;53367,50792 -hhZstZvu;80434,78512 -bRkgViTu;19508,74135 -MujfiRaX;23566,4574 -gnnOXMvX;3592,82958 -VcVAyIch;74483,22077 -ziaNFpfp;55996,9052 -tOYKUeZf;20368,88790 -kdWjsMTU;23053,61445 -gjYjejXW;43393,49109 -bxtQVhZI;66387,69286 -rgiIcOBm;38033,52421 -bHsXXPKy;73420,25743 -EQQGxZli;67846,17479 -FyrEVjSw;29196,18075 -dOyUUVVl;22834,21072 -hBmnHYPe;9042,71314 -qsqZmDrY;20783,16935 -ODqqHHgd;31160,33755 -gXWTsxfD;36613,33408 -AkJtAPeU;87833,88338 -VuIyEuMM;65998,18936 -wiruZRAq;50122,88472 -eAVnhQQw;46082,63157 -OClCRomL;19353,43871 -UAOvPBFy;13047,30097 -rkGOYvnl;47787,4599 -Sffijrpj;6030,49025 -QmBHNXEg;6434,35051 -sPBQBrxh;17534,17784 -yyCvbXRg;71295,24916 -BWQZVGCt;67789,71664 -tzPxSFjN;15381,41967 -ApGApKqC;36507,11149 -luxpprti;48534,61428 -DTBOGsSG;56894,52684 -mxtqzFlS;33453,60103 -JwVrCwkm;65305,89760 -oDnYOweP;81956,15694 -peEWvfDJ;58765,75556 -SKguqdJU;42812,76173 -zrllNPwQ;86500,43394 -BiINPjrD;7613,68268 -ahvypMAj;29365,48714 -KfLboAqU;57331,42664 -xByThmEN;35634,88047 -hSRPYWci;2026,49579 -HWdRvdml;24692,20328 -aAhAOexh;73526,25530 -juIdBPGm;10929,26068 -GDuGUGFH;39020,65781 -bBPwfYrl;71880,58837 -VQcrSilr;73835,40688 -gFugFACU;66946,54031 -mcraHrBf;41074,33504 -jJBTHnOK;74129,79562 -SIfBmVoP;13250,42441 -Emzivckq;58707,89803 -tqZklIai;57899,72849 -kohngCEl;40184,35072 -wcEcWsqe;34148,63763 -kLwpVaQn;37811,31983 -iGrJdvEi;50003,16355 -zJXPpSLS;24032,5348 -vOrUeSYT;13498,33152 -GCuSxxWH;24639,6134 -qTnRyNBM;14502,5099 -suMyoBPZ;46142,16657 -abdoQlSt;76486,82901 -etbCUGEM;14813,8601 -CXJkVnSy;26043,25996 -MsEAAtLW;76520,19799 -kuMYmbLk;50970,68243 -SpPOLdtx;74652,52238 -GyrdlJBq;47972,67220 -FGnooswH;73563,72791 -KMjfjawm;88592,41270 -bPMHquuL;50539,71403 -WXpBtNDe;89671,81561 -FhBWrqbk;65172,56566 -ztlsZSjd;4726,67737 -gBzlQDfg;70186,8073 -mTyKWTLq;78022,42226 -DiGrYpwm;57122,29436 -LelKhDam;20142,76949 -FVKDmBAA;83070,83345 -WDFFoQnB;49345,1354 -KfaRatvu;38037,70775 -NEmjTXdi;36079,56998 -gSNQRMDk;15047,21398 -INiUWFUx;40321,26041 -QeNNMKSA;44143,24563 -GgFddVhV;64666,31237 -eioNIpgc;12730,28923 -BxkCrYpb;4315,64011 -dTXQzwAi;46811,38434 -LDJUSWpj;50481,30049 -dBMPMZNa;29293,50005 -QvoeXbIh;20530,24380 -vvZmnSMD;26805,45656 -AUNVcbVF;25558,75678 -XJrnxbGX;36932,39149 -cSQeQbkS;23949,66357 -RUVVJHlG;37477,13750 -uUseXDIh;64348,31304 -CLFWaMtT;50325,55354 -ZnWPLyex;76460,12717 -oufchKJP;53272,43264 -iwtlJJbl;2262,50481 -LnxfXyEJ;30333,75245 -ppHQLPCU;86722,13508 -QPueQrvQ;55089,79284 -TwuAOBoQ;43002,33104 -DyUdXNQm;4447,40815 -AUzSAEwi;53369,50624 -mOollaMO;44722,37180 -wkoKaYoL;19310,38628 -dxriGUay;13461,48287 -QpNxvfRl;50920,21287 -kkJlZqpy;17513,16595 -vAeVKEGn;63145,31712 -BrrXCNce;27017,54620 -OGUxWXcj;84324,5522 -AAyYlkXX;35204,5704 -UIsiYJWx;68329,44388 -vqMlZqQt;43531,22919 -WMpaYwTX;47720,41618 -anRmbkDx;31461,67238 -BTLlRmkL;7662,14338 -oPmCGxyo;14733,53318 -QFUrISfo;79858,6234 -rHcvUQbW;61036,4017 -cONdXukD;7797,88140 -qPIdGztJ;42139,3841 -rZxsyRSA;76991,87816 -QBgWnviy;58863,89175 -JenqknGC;12909,88376 -EXwQHTse;40044,21214 -qtoUbJsU;11975,7852 -AvksBMZB;74732,87330 -CkGWauDX;29225,28657 -GlrgkdDI;40839,13022 -wozqxWmk;80218,15325 -FLZJERhY;69325,60912 -iPWzkCXi;75020,89331 -RPxnzTFK;8220,54192 -MVANtzcj;35606,30575 -qqHpKYvN;57509,38358 -IEAIwsIB;25823,84164 -joiIfHbx;7981,15835 -nHOgNVMt;15533,42832 -HBuQgAMF;6325,9795 -tCTkSrED;33203,20321 -SkauVpRM;87554,15393 -BXWpfXNv;88915,87319 -BoLzmolF;70611,23071 -zdpSrFAI;69268,49441 -zynzcrfE;2308,35166 -AMciXAxr;11790,59281 -EfoKsBvD;73779,8495 -KezfmViA;76016,61050 -rXZLQgsn;53501,12474 -UmMzmzFj;4967,26267 -cgGjuzia;84224,42476 -mebjBBrk;58620,55662 -SptuzAnn;19417,45325 -ZuRMjRur;25136,1766 -WPagHKys;4129,13248 -TfFKAcgj;46392,85799 -gKNDigbu;70175,73796 -VELPBZWA;65816,56427 -OwfvRhmC;87956,31984 -YMsNoRJs;59883,24759 -YUwLaWOD;60021,47321 -ivAnCpFK;42435,11957 -VyiCYFtO;33145,8375 -UKbpYcrv;30121,68768 -zQWRRqLa;66963,85026 -igeTLHDL;33011,25559 -NfmJXNXf;86607,26540 -YDskNNhZ;52137,10150 -RyLZoeAM;12111,37068 -dHNuhLhp;26214,63102 -ShPaTHzo;89762,29449 -dbNsEcts;56827,48354 -iOXmdJYG;8899,59310 -nuqLznee;58013,71648 -TGMmDUfk;24051,87046 -XMAyGHGz;66556,9521 -YlJswkta;55783,45046 -DCEWgonf;61571,33027 -JauYIRiV;51388,44173 -sjRmYwKo;53193,13983 -bbkHjipk;40145,85550 -nwTlwnbH;41913,51986 -eLlBkvph;30618,27657 -wcIllwQB;16080,87479 -HBncBKxd;39595,41678 -YBTggCOr;89916,25333 -MBCQKbhO;8743,66563 -MgFZGUaD;79158,74491 -dhpJkhNm;28095,13782 -msvJwqFw;15795,42791 -evFugNjB;38764,87754 -tFSODFlv;34348,88373 -NBxpRfTM;14806,81235 -ssLINmBv;16886,9379 -VFVpoDXn;61547,57006 -qsojPiQT;48510,42913 -xUOoBoSe;27298,67956 -fRZVexsa;67570,60997 -ODgRiPTs;37238,83033 -WbGNArzW;79759,35798 -ZkUoTjBc;16968,23086 -BdmUWrMb;13299,25978 -xoDKfXmu;77626,14775 -QDdPHGJJ;21846,60782 -HmVMLdJL;44968,12207 -XUbtgHgV;55873,2271 -KfDAXZAY;65889,8533 -mlIKsAkN;49795,72969 -ceuFkqKt;44342,1997 -zfqqhVKn;62418,56032 -LZdxhRwk;84015,39728 -yGnVqUAK;67333,63878 -fpWmdhAS;29957,1199 -dfbkRESC;29155,50313 -PQNNKwui;47473,26771 -FEbDftFZ;75865,63935 -MSLqlyFb;5847,75451 -hQlecVmL;51186,70371 -laGSVrsO;37204,8741 -RrdcswjU;50473,58473 -ptnZpBrV;27884,24772 -xVUDhtxs;5565,50365 -JBHKobDH;46617,53280 -SbimDtXb;20365,65887 -uzmxsNLI;6062,9997 -ddzzXvKG;52458,69157 -FpAuXJwH;31430,1314 -IvGtTtUP;57797,86196 -rLWDPMzV;27892,26455 -KjatpKro;69883,13297 -PgywjDWR;14407,33772 -oegEjXLu;35663,83231 -giEqnGbW;17699,84591 -oPydJrZb;53791,60697 -iUjVbPKw;68545,4509 -nQlEFcvp;60508,89298 -XOLEWxRr;66870,32222 -lTpqGyzO;2195,75961 -CBwUNgWb;17431,52469 -IREQnsHG;1802,78651 -UlEKeKFa;54962,89937 -bUWSvWYj;74922,40915 -CiCbyPut;46906,82542 -ogKRpIEv;13811,3746 -ihAlvCtn;65643,42708 -JgibesdY;78284,82970 -dspVIFIw;41770,70167 -jbxGVdsR;72019,18320 -uRUTNMRk;14584,86143 -eJnOENcI;59326,38610 -nWdfiJOM;19718,40421 -eGOlxrLQ;14571,55028 -NcFbjXfF;45200,57092 -xhTrldlp;87676,62700 -mflScQqC;57696,54765 -tKPXDjdm;46892,34939 -dggLFUNR;11624,47285 -OJEVUDSN;62312,5960 -Gbragiik;4107,55604 -MObpAtPb;46083,87217 -ZhRUgFvt;2511,46782 -QozaIaHF;18082,87785 -LofeLVXY;6323,53743 -ksIfwbrD;51063,19969 -YdqFTIKc;35855,51154 -rFZurMHc;54409,88634 -FcDsUDjF;77212,89209 -xmMVeDzK;52620,54103 -ODINrUhQ;71092,80096 -XCHiMzLT;29983,38935 -Xnwdgajp;60876,8721 -gFTNcIQP;71829,47369 -LUYyfpXD;49110,34951 -rgoYUquP;15707,82243 -ZqafHDyO;82289,27872 -gnFMPKRk;88522,62793 -gUYVgJaT;14000,24893 -wmtunwAp;69401,60330 -fTEgOFkw;49998,14575 -AxwNZolG;52347,43474 -lhVAERlS;55192,29521 -OBAHkUPY;86992,72122 -NKSSefuu;10597,80976 -QFrjXNSC;9907,39963 -TQsCFhYl;66086,3097 -ZVqtaQpH;73209,78346 -MIuegGff;37161,67348 -xeQCxXWC;71277,49616 -nbVXomLX;37689,72958 -AgVMoeRg;31505,53769 -mHWcEChg;56255,5876 -jhsUzpVV;41379,47039 -dzGxsJtB;11847,7655 -wHNlbDph;46602,2266 -kWEXmILD;47780,50783 -uvUNxTjs;24405,61769 -AqwFBjfg;21998,23276 -AJxKkaeq;39835,20651 -jmArrWaB;28271,43186 -WOsywoia;27951,12675 -uAYxibFg;42829,64937 -RpMUpdlx;86784,73361 -ObzwNdoP;10320,69063 -vGhccFqY;58878,9332 -fjUaOfag;68399,16687 -NbImlTfS;74946,38352 -hIvIacQX;1204,62018 -wmXqRUaR;8679,43853 -MVrInpey;51347,30397 -PklggEhC;16468,89779 -fiiwyKzF;50235,83931 -NVLTFvsR;45597,18987 -BTVGbRSQ;62269,25714 -dpwJJxuR;78396,60042 -krcsTVdD;58331,7245 -TMDgdBYH;31526,75384 -ahdbqDdu;31556,34477 -KjUtUqTV;30714,64215 -NGtUBToR;69751,7083 -OxpoSnXi;79569,43390 -rSxTRUcl;67666,70655 -AntUlDKS;9715,80317 -BiTqVard;24022,81017 -tPReGJwi;15754,63733 -WLQkotjJ;18001,24437 -TXivxKOb;51045,2252 -lCZWqnMn;50404,55360 -cYPUrWCD;11403,89315 -IZIywkVp;67186,70005 -xqTYpTub;84042,33595 -EWKtuRoL;22380,12898 -crdKKfmi;25730,30781 -BhsaAkSE;25531,65027 -eqHnXZdb;34006,13640 -pAZJzmKQ;35778,87840 -EgxferrT;19618,75658 -XeialqPV;75321,10747 -aecgLwvi;5001,47116 -LDAXRsxy;59141,12605 -RuiRaNdy;87912,17602 -KxpkHKGs;30128,16262 -EsYQeVXo;40909,24087 -rirVYiRH;81045,15903 -EFdoZuae;55090,5584 -VwunWaBJ;60699,52570 -eODMAQpb;19768,16185 -EoNNrdcQ;32468,1034 -xEBWuTJJ;29702,38465 -XGyQhLTM;54123,8376 -TfeRubVo;43201,8746 -zWDvOYlE;5042,77105 -JIcXeGSq;57128,42246 -ZiNgRISt;81194,33214 -FozKPRwy;60662,26160 -dMyrqdrj;55266,29478 -usvRDRwY;61126,24798 -NAFUGVue;22902,89895 -ZWgCaCKF;5158,83444 -lvFJprny;83095,12279 -vEwbLnYI;72908,21042 -KRGsoCQT;26685,21756 -XTXbWfAb;47049,71704 -qvBukipE;22575,85466 -QJlpqLjE;35104,17115 -DWPOXfnN;59226,8416 -kSXZAugc;77345,21723 -MHRKpYBX;17136,59138 -rdwtxRFw;32140,68166 -qVYmgJYn;36208,61149 -NrtqQyht;63054,74183 -rdyLLBkJ;51755,75581 -ZBMSkGGo;3911,56468 -cChasfLR;23905,59154 -MZKqhbue;81758,83364 -OlpHqVnZ;22500,54904 -PJHnveEi;1129,23988 -PybCswBU;72280,61733 -TUOwfwEm;89184,59200 -OpBAjlnH;71089,9071 -maxqJeBl;48795,61550 -vnTIanBC;76220,62647 -SMuNnQJX;52122,79661 -deySSAFC;37158,41525 -zbpaRKYA;89884,19011 -agoKNwzP;89520,57711 -sriGrrIw;72823,86140 -xoPsmgDZ;44758,54302 -NEdzmYnW;73572,20550 -SXcLnjqx;36029,43267 -dNtmjWpl;51797,2058 -WvjzSdIP;86759,84150 -xlhBFQjq;22894,14644 -eljYYsHL;51114,8741 -rDMgQrHd;29807,79455 -cNkPSJgr;51368,20413 -RjTGHBgt;12567,67673 -IBHAvMHQ;28729,40444 -cyuxUYsk;41156,47200 -xOrXYqyy;86059,78262 -LVcYVHZP;78647,72704 -mXDVPNcY;75431,61290 -tDfpNWkO;13385,12850 -zXBicJqC;82661,26716 -tzzKUmoq;41097,47997 -XOXhinLl;69214,66047 -lRULYQDs;51513,35176 -zCdIKzTX;65556,69993 -eUkSRNkJ;28969,66916 -VkULomlj;65946,63605 -POAmIfXD;84373,35588 -fEiYiOWO;59498,20059 -PYxPRAvJ;7709,15935 -AfkVVMPP;5234,3494 -gZjfZcxm;36104,66339 -dQKIbGya;33306,35735 -kmnWVzOj;53419,57494 -ykrFsmdH;69991,87105 -uprDXLMT;62991,82533 -MfZedeeA;62223,22390 -MTVBVbQG;46401,53191 -iKHpnnYZ;1347,86005 -nBMtUZER;25960,36069 -meiHIFEt;82926,56862 -DkoWZdqB;28275,58945 -CTNPhIaF;3942,19954 -UZjaAdTP;77901,35371 -eNUtNCop;64311,33866 -TweToKrA;30738,50557 -GNOqIvhj;58471,89026 -GonbfVPa;73326,5131 -cWZPAZSg;47972,76500 -nGgeMWdx;83802,45256 -udaXLUca;24640,49230 -QkWSBQSV;1592,61218 -FNbCdyGr;87762,33616 -IaKsknGz;58446,28172 -FigfBKev;74172,72116 -tKhxiZfB;38609,1917 -mlHtMsDE;54928,72737 -uBSXXMYx;89493,15253 -wxHrgZmR;38511,57495 -iNUZYron;35140,33185 -yYTHYQZv;18775,8960 -AJgVYiDr;26317,65046 -pySdrjLQ;43753,50415 -JCMMbllf;41920,13889 -pxOfUdJQ;62230,70380 -jsJECLBw;6628,68176 -qCAlgXNk;84547,35945 -TdIDIjIZ;67990,36510 -UCHUToqI;60910,33370 -jgZFFqEd;1478,35912 -BiRHkyxo;62881,33747 -ZAehNgFu;83499,62621 -WXZGGUwz;26386,28338 -MMhKIGTn;8299,33761 -LJSWnVCh;19664,44562 -aNOwfJxV;24588,84161 -eHkOYkVn;10760,61805 -pFVNMbwP;32426,72227 -YqOSCBOA;75136,74673 -EOBrINKr;18696,52460 -KphuSwsf;64244,75777 -ILRZstnQ;67657,41884 -ORFDlcgU;14846,13322 -yxcJRWLq;66067,75159 -FFsrKiFB;67862,19727 -wLrtqrvy;49028,76141 -WrqpqTLa;11547,30806 -iKBkrSLq;82563,13375 -kKvcbwJQ;3068,26182 -fRnGZrAr;54080,27444 -WgnannUQ;37147,66013 -TLzKAhbq;22642,47919 -ZuwLzCnr;40023,51218 -vFGrETcA;57283,19243 -KCqnoWIV;9932,51027 -SZTAFKwQ;57487,26630 -VkOnLkcY;49015,86789 -vPnaLKvq;24546,61720 -BaMqRrHC;50468,32204 -rZgavmMf;19270,60000 -IfQoxvqZ;32360,87519 -iNyZOLHE;13746,88030 -qfPiNnwv;27152,86525 -rIMZRBhS;75561,7519 -qNPYaUAa;24041,50690 -OXkfUByb;69838,51968 -xHMzwSqJ;32246,86186 -NtWpWpOZ;14235,36170 -HYAAgxEi;40376,80722 -jQnwvczv;3045,85002 -nGccjrBo;41791,84545 -qyRkBUWy;28428,2339 -tKUBJBHI;83584,38801 -ajYPYrLt;23484,9787 -cCTWBDVQ;51482,62533 -yaPiZrcx;86231,7341 -QAUIekvz;86598,35815 -kuNvjFuS;15646,36364 -zFxCmdrl;47308,63383 -LXFezIMm;60808,70962 -lHvhKZME;18761,21589 -zupBMloB;36556,84362 -KaBMyvuG;6398,68754 -SfpPYvbo;20160,51332 -fwvodNiG;38666,83773 -VPKcZVFQ;28919,46327 -BiTCkhsl;75302,39867 -QtIfJdtY;32418,12162 -vgnMmSIM;51335,21063 -XTjNemuK;55566,59868 -cNRdxvBg;39137,29646 -WSfrDPrm;4416,57325 -hesaCGDy;20313,53062 -UCuptRRg;26038,71486 -HFUvPiIv;76820,78286 -pJXOTGJF;34981,62291 -jEGtxUJd;69092,8688 -ETgQgHmq;31322,41670 -kmkmGsaN;76155,71078 -LJvjusQo;26696,18798 -jXiUSLPQ;80470,85530 -KFUjvDEh;54785,75805 -weiPCjte;2438,27377 -qXszqMGa;85844,11366 -AEoixEjo;68707,5268 -EWBdytfY;48001,38814 -rJByegNh;69678,35815 -ufVAqUMT;9633,79432 -Ggefueob;4529,7438 -GsLkdlMq;22818,72100 -UhunwyOu;7502,55972 -JcWoPNZa;59133,5726 -AtWSEcZm;87612,27718 -vKPVmnyV;27823,63995 -mSfznIeB;48486,53515 -iVJuPdrn;35294,65080 -MFXywpnb;74459,53839 -HpmRydSI;68057,77912 -eccJQPSL;17791,41586 -fLldRyru;26260,5226 -SSMpymdC;18099,83876 -qPbLWoAz;82281,24444 -iJXpbjDe;82737,46575 -egXswbtp;29164,28031 -uaEEyZlH;9272,31772 -iJgiDBmi;27212,43648 -DCvNytlK;36636,70350 -JURacNRv;85540,68857 -pKfffPRQ;27579,9448 -zPhSphBK;21923,49278 -ONgbYRiH;33833,76944 -hiIpFcoJ;58856,58976 -zxLoJNFY;17396,65350 -CbSlUwiG;65917,27718 -oilBRbCl;85633,2134 -rdffRNco;53834,2472 -vhZEBYvl;39301,33218 -hQaGaDrd;59065,29189 -toEMEkhV;70531,9585 -lfBhqmDs;57611,63912 -NJurrHIs;79291,30089 -XmXFigQh;28505,53055 -FDAHnHHe;30134,79525 -KhDaoCnP;61240,46531 -oPPjnjMn;70305,60839 -FMYqnKuH;77037,16479 -iEYilurc;50294,14753 -knfFAsJn;10053,36912 -zCKTQWCM;68424,52725 -oHWwCBjQ;64208,53667 -GYSXvmVe;27603,68885 -CMCWeaEN;75255,60771 -zcAgXAdN;86708,35381 -XpFsdZVh;61110,81742 -KVotwILb;67033,40886 -wdIKqzMp;44539,28559 -gMSGhRjt;85140,47989 -YcHCrJFc;69254,54813 -iFrftCTw;19953,19388 -qRPCoIVI;74504,30384 -fQJBxMoI;10942,35409 -zciRjSwl;24121,65183 -zGKWizQs;8412,18821 -BZkociSL;5063,3100 -tOoxUrys;3855,66034 -TOwJRpUp;31178,6769 -VHAiWwPy;19257,38105 -DGNHBMsD;22521,84205 -SVkjnCSq;6868,83122 -vXVCVYAi;27528,6838 -vuGjYGRH;61287,17496 -tyRgPErt;63988,66268 -hjxYlveO;73000,57966 -EnXTkuRF;27902,62027 -soByvbcJ;45740,30056 -dfKIUiKv;42022,12687 -tQeCqxsQ;75935,89899 -jHIEVdbI;70724,41489 -AkBaAnSW;45031,22522 -KUPYJUTD;72211,48405 -BTfMNDnU;75839,40806 -QNVdFgFL;28940,63306 -pJQsUZEM;31285,86028 -vbRCqAcW;29049,46182 -dhURCSNN;55312,50298 -mtFpJzwK;64336,30511 -eNLqLigQ;85435,70307 -acvpsigm;89455,38754 -ZKmHjuFr;44799,43955 -QeMXBecC;56387,29406 -ydWDBaGS;17359,1174 -xhWVENtl;20602,67784 -crnywqst;50901,3203 -ZUOjBmhw;52421,89340 -ZPmTAqSg;66564,22960 -eddbYXmO;38103,18576 -wrmczjzj;75613,25552 -zRWceagH;12454,29115 -UhoJLQmj;5780,33112 -jShtbWtA;74899,51108 -tHEnlVnP;6824,65459 -xyzTmWRc;75590,46800 -EloBmDZU;50672,45442 -OlmnXtih;42176,36365 -OzOmgSCv;81514,30921 -LoKMBFhx;23202,22880 -MQuDlyuX;79704,89267 -KFDBbWXA;57654,34153 -pRrsSUcZ;38816,13039 -RAKWZqfn;57106,87392 -rzUkinOq;51732,80625 -HFBOIhCo;47427,27895 -agBKraGK;10396,10561 -PXdjXkHq;58345,88461 -yXosCgQb;17640,47264 -YtPZHeJP;43784,86891 -cdKYLMlF;44104,46887 -BqvparoL;62688,67776 -fjXyNZSd;14913,36443 -ueWkFYZR;30948,6607 -UgIahOsz;41954,77532 -rECiEktK;54695,72568 -oCwYwupJ;11813,69340 -dAexPcFL;6113,9426 -EbhrEyxg;82092,39241 -UjzRTQmE;14596,41306 -tIOFElNV;40753,43086 -wnSxFRnM;9062,39619 -LlEuNQXQ;23617,80118 -iIGcqYUb;15273,16576 -aYMTEixS;40850,32755 -hLpILRji;51392,35390 -wqMcSulw;36550,86959 -hOnxOamp;69221,76955 -vXoBWjJS;88380,8469 -OHksbGxl;53131,16493 -TgNefoUp;83393,22802 -wQlRTgGp;11139,5519 -nLKBkBfP;83835,85839 -zUtMkiIe;11641,68116 -BQCjxhJF;52220,73745 -nCFRWumU;55700,11422 -VPsHOjzv;7538,81764 -CjCOpxHA;28431,53335 -RWQMCIqc;44772,21993 -UudAkMcr;64166,45320 -KIcuvouI;23587,21317 -vPluHAFa;53932,8650 -DdOrrsBS;42162,39969 -KZZHRKDx;86610,39678 -oEzovsyS;61890,41685 -fovYTIap;45513,31049 -qbcPzcrm;48718,57348 -LwClwjQb;16346,54386 -gScxvCjc;1424,18339 -RALkYGsz;83374,78384 -vAJVGZTb;14368,59056 -oNDsCbbM;33946,48186 -HTdCdBVM;88572,62521 -aXVZPxHA;59170,62154 -bNUjeljL;60080,15346 -nunjAJDb;50805,75674 -nsBgeeGC;88872,40438 -PIrnrHqm;37742,51451 -ZPydioFe;46437,56987 -oMmMsQPY;70054,37003 -FwySfhsb;71454,74649 -wYhfBioM;77147,66635 -evmCgzgQ;36596,26400 -yQsmNTwx;30090,4137 -fGgWJytz;85022,73779 -SZTbFiFX;54983,29940 -NqGVlWPd;59810,57664 -oYeYJtNy;76524,55960 -orJfDJdw;60468,21964 -IBDiCRyr;27011,23245 -YojXKptC;3868,50910 -QqBrDEPx;58816,61473 -PCqOIMZE;86664,80600 -XkAvCkcb;26666,62216 -cSMKIVgt;84377,30472 -ZtFAnzEO;85090,73540 -CvlXxTow;75993,66841 -OBNImfkg;77111,21774 -HxgIsNbC;47788,63902 -WcfzNyAJ;22641,44894 -kbqijYNh;82307,46111 -HSFJknWR;76085,52580 -JmjgOlVC;41691,26844 -bIfIjtft;11018,32782 -vSBDcjfg;55969,53257 -vsOyFrmg;39662,56652 -IvWCTqYk;39808,74609 -DcUdfCHI;40464,24813 -GQBafqtk;53810,6155 -olQKcBOS;79106,28168 -LoIWdjgt;17264,57856 -yiFzJrWK;73354,45333 -rNzamgPk;85001,70193 -IQhMLTxU;37177,86275 -DgAbfMhG;51022,27615 -jbCXizYo;34087,40622 -DNjVYEML;37855,25338 -NulCFqln;87442,89414 -wIYWEKLC;10878,78658 -WlEQGamB;14558,8641 -zIzzQDLw;72264,5988 -EQWZDoDK;65426,36391 -JMhaYcAA;25754,10177 -pYzEHpkc;16750,62255 -TjsIzwtA;13575,61374 -XfuPGMhP;18749,34059 -zEXNXcSs;16099,63389 -LThhTriB;15694,61165 -DgsaEWaW;59296,77856 -eDpcrCIS;56315,62048 -SfmvteHb;83175,58642 -SHIqyTOX;54916,49465 -YALiAhkc;75819,67759 -scdriJvt;9745,29389 -eTIKBVRX;13508,20799 -bZnpjjCA;61393,25887 -ReaLTjuf;81617,58576 -VOZEhTTb;41175,58660 -qXhObmNE;64244,51978 -znRVSWbW;17746,73577 -vTtWgwnK;63447,88943 -ZGcNYpcJ;37232,9611 -XCmtTrQs;6176,57830 -NLPpNpNw;69265,74495 -KjhIblJt;29142,50259 -VfXdJChA;46024,20568 -opARlVrR;20359,80505 -IDFXhSmg;20031,70054 -DJzVodgy;5430,79016 -GJZcLyGd;21377,20082 -yWvwrWik;48874,32328 -PPmugCBc;17083,59153 -kGisQEXc;11550,89413 -JVhVofDw;73448,26220 -qIveQzzw;75144,48681 -ORBRCbwq;54962,66234 -jeqcMiqR;22538,86229 -vBUTuppL;25646,45991 -iZEexhgi;29585,40923 -xXaQliYP;58058,17803 -VfrPmURB;36329,55653 -HNrizSnN;77127,53497 -ZLLSYtND;13562,38552 -UNsGjeIl;53443,86521 -pVbkBwVK;2754,67035 -snVdmfEB;32600,69861 -VGtSGyLf;6146,66766 -lgrkYdKv;26456,67689 -VldOKbUe;16739,63928 -DBCalfii;20090,34754 -ikNLfGqD;10532,52109 -USdvOLnf;51283,83198 -LKgVnXZw;43223,28607 -hrcTJsNm;56594,42137 -JQsZwQnw;77841,88960 -Raacjgnz;44166,49959 -HoWNpVHm;7660,35286 -CubdpriL;44903,41620 -ctlwhvXr;21307,38316 -vkvhGjhQ;42890,55772 -IaPKlTbo;85781,60453 -LFxuMcnH;30667,17773 -GZmjswPf;60748,68020 -RFuJnDJE;63044,14467 -vwKPkdAv;64779,16574 -eztNPhwa;17057,79948 -ZlZpMpDd;19694,81290 -pRIUDiUK;45537,44011 -vUYtzHUF;32764,66443 -bUabBKmL;21062,85834 -qqZPoaap;5475,50220 -SUIayglo;33657,6957 -nuLIHAdS;8144,32953 -kldzWprZ;83177,35965 -VrVyOuZP;61732,87222 -kEgjGiJE;55096,79372 -njSqvvLe;46755,37282 -YRcHlpkw;86797,72393 -vQUtgbym;87870,70214 -SwKsAMXi;71962,67520 -agniEDPW;13658,1115 -kRCZEXhq;39406,4310 -AcijqnaM;76090,12479 -CncCCXbP;73423,38622 -vnMnFldX;25232,53171 -AKXqNFxd;80609,82214 -pZeEYiGF;63185,14116 -szIKVlPa;20351,5025 -mOPcyvlI;54001,45669 -bsZBTvSq;7982,82724 -lkKlNXdy;78492,4445 -PdENbuqF;28182,66544 -ItIkmLva;61302,85659 -ufjHNjVI;52864,83306 -QCVXfske;42969,77772 -WbQocFiP;59281,24490 -urufbkGd;64575,76763 -skfTUTYk;39339,16750 -ARLKSRzF;15100,45519 -uUbElxAY;61344,71346 -qPMAZSvP;53548,47111 -IXnrjxgd;45497,7412 -ZAdPSqAN;6254,62969 -AQDnFlJF;52805,48781 -wbUYXNuJ;85671,58226 -SSZJmlqU;25084,9004 -ZDMKDDyy;6270,54677 -EWUScrOM;18346,84112 -UNXCSMji;57668,59658 -vrbqptpe;15101,69350 -zKtJmksD;15781,49818 -drAMNKDD;49072,13913 -XKAPktNJ;61484,8024 -ZkKLYcJd;50643,70199 -THirNIGx;12825,21095 -czeCNwwF;50967,51282 -QCmvNeiP;77914,28748 -tMTevGnb;74505,89294 -JRUFVLeG;42616,3148 -LhujXjOM;56654,71141 -HDGVXfhv;7818,37798 -avPLbhIc;82679,42493 -khnuJNuh;18347,38984 -TtXZWSbH;51580,85048 -tIjNGRuR;81604,17417 -WEGFVmvG;52918,37864 -evUVPSnn;75112,17469 -KEvllLBI;6468,55551 -gCuSBSqm;23646,35052 -unxVhArX;7023,4398 -oJyjOiMZ;65322,72163 -ssEEnBPg;16210,86452 -DOBkMARt;18228,37297 -ebSyfJOP;13290,17582 -JXonNaeN;45680,87282 -DxOxHEVP;43902,63425 -gXFhLsEO;63807,61929 -nzcbwnHl;6023,13403 -lFgaKojc;12430,83562 -KFCtaJfb;40166,76228 -AFZXnGbZ;79527,48031 -iMoUWvhl;42143,71393 -mfMVZPas;27462,82717 -fFmrZCAs;22897,73644 -whKloJHc;49396,15276 -YjambwsF;57183,79359 -QFQNxRJw;62700,59585 -iZzkZqgP;1059,89841 -sqPeztKo;3341,3453 -mGFeEFbV;13865,81372 -jjeJWrUo;38107,87228 -bLlZujjb;65085,10454 -DJgJErKy;31133,61229 -QjdhdmTJ;7799,17448 -wSmQukqz;85290,12671 -QBvRRfqp;29680,74746 -pdiLkxcM;26226,72667 -nPllwwvP;9033,30820 -WmHDPIlb;65295,6923 -uoQNHkeU;50049,64503 -NEMscaNp;6186,8968 -dGUaOYBR;15262,77825 -PjHUfyGA;29314,11091 -TmBpKJOd;56523,8086 -iUnYDhel;3070,51594 -rkezdEnN;8342,45770 -hKRdUILV;57723,19034 -UdEJvvTJ;69343,53324 -IwAZIzUf;75380,69648 -JgqUOleh;54804,55440 -oSRJSkrh;39572,14515 -cVRgOrjK;37469,26259 -JTvrwjzw;52378,79078 -eVjhQCHw;46207,66893 -OOlcQBLt;5598,23576 -vPvLOeek;39523,27071 -OyHGgxGH;72920,45174 -EMKZFFRS;71915,36784 -HMOvdIVv;49133,2156 -LegLddmK;35137,54965 -VXHrUpsg;87636,22207 -DeCMGTVF;13464,77078 -TlrAUQDj;78270,48747 -DcjkaIig;13661,87314 -svUGZPGt;5601,32795 -FlGfVKMs;50441,77176 -yPoPmqFI;20772,79987 -fRcPDIgz;73169,11506 -oJUvJMaO;18044,15205 -NwRdIjPl;14679,33213 -eieNHTMS;33508,28807 -HWNLQJby;38705,4254 -EKXzaVcy;37478,80158 -oiDZqgdd;9669,59577 -XFlMaSgh;86247,22464 -xvuqupBM;69516,39982 -HsvuCQEY;68201,21436 -HAKfCisN;4414,69215 -lMUThoBe;41681,57221 -NuCqphfX;47119,9663 -EjHpSSVf;53586,53066 -LaKbzSrQ;28328,64803 -PTHGOrjj;80399,19740 -uhLxCnNf;5383,86008 -LwuLgbRd;82459,87542 -NmohhCLt;55102,79427 -MTwsBYJC;62315,57700 -GawAqWJF;73765,62142 -wQNgeBbt;5192,38087 -hlVbctqY;73416,67737 -YJWWEWCE;40401,18343 -NLaQHAKN;65313,32382 -nWXIiCqL;36627,48999 -HxMGcWUX;88951,28432 -qSpAYmaB;67546,66951 -NKSUCuEP;27831,75485 -CBKUfmMi;88888,50224 -yJoKLwXZ;66444,48851 -UPNNsUxe;26725,19250 -ENhzUZeh;19759,23351 -LfwerFrJ;15198,52287 -SSWvbAAL;71519,80464 -UlgUgOtf;27937,47648 -DPXqCsNM;20092,25876 -WbKpPDYV;50079,43193 -fnrJGgUl;51437,65582 -elswopqL;29377,5966 -bvGViOXh;8394,85833 -QbdKDRlP;32161,85459 -tSrJkKNi;32023,5922 -WBKTRiUQ;3601,37085 -CeDGbhjr;77567,15735 -CLoXwZgs;69167,45124 -ZJqXhQod;69144,58554 -BoaEgDGj;12548,66436 -JXwmjyXK;24407,24935 -gRWXsRqq;11196,63462 -UECHgyOS;12834,26841 -VkFmbbxW;70074,14413 -bMavxdrh;23114,69110 -WNzgmZXC;28162,6509 -flwtMmKW;22420,88677 -tupIoCLM;40706,33665 -vGxqtYUy;17603,17762 -nxgmiclj;1445,78488 -NKrqlEwb;80892,48281 -wHLFqyjk;89101,17197 -vqMFvGhc;18589,36299 -MDQBSZVw;42593,40214 -pxbgfEoC;52605,44850 -dCehjehD;9784,39216 -gsRhmEjZ;12528,34774 -QVerRyCq;27106,89297 -kbXYmnoC;71860,48832 -HwzcDaYv;52123,22943 -AIHbKkxy;65626,43177 -QpZDSCxe;50765,45070 -elcGmiqi;89402,83943 -wnQuVCPj;86432,18852 -gJbuHyxf;40977,23871 -bpDkwQkM;5127,55989 -dzrPiIDK;30548,18336 -OvyzojGj;70394,75186 -fGtkhzHy;29005,12936 -BnxJQVrX;67019,13686 -HyTaMgtz;79856,75256 -vjggLYLS;34917,10788 -EZjwjWjn;76756,27044 -nPiltbEg;84124,11256 -URxhdYPW;29766,67689 -NYSNLORO;52813,67154 -EmBDpggG;69346,79106 -bQCbDYIu;56044,18915 -enAgUWzr;68266,38531 -LJZWDBBi;77016,74592 -OetVmAlM;81272,5308 -reFyVCne;10209,21093 -EgQszrJZ;84295,22353 -FPDvtrkb;37317,84542 -ueoVVnYJ;51686,69873 -xZYptHXp;43202,11376 -qWaFLIny;75537,9377 -xzHUlNxO;71784,76746 -EByKnZII;48311,63275 -dxnsxObM;14728,44883 -lKkUPVpM;55301,32074 -frOvooav;81123,31513 -wokECRfA;35100,85038 -OEhrxPUk;76380,69452 -rWvmxNSW;22145,20951 -rbBEDPGm;64895,24245 -PoQWjSwM;49973,48637 -YprBvLnY;33874,85667 -ENoptFeJ;70505,80343 -oJdRbOUp;66511,61549 -vmEGFleZ;57874,77505 -NQUcQsRR;88683,49997 -YdGDmNYT;64960,48278 -igPIZNCh;11750,28273 -WJUuCXyI;35371,83228 -GfoHHnbq;40041,79598 -FrTLacPM;32810,65344 -JRnSCxtQ;2120,23176 -jfQtItDy;29090,61816 -RWWLSGdS;73558,21067 -iMLxUqoB;81154,12807 -UAVXAkNE;53727,58525 -vLkXSIhL;12792,45893 -VIBNMdub;7872,81384 -axKcqDJS;61653,63545 -pWQNbDWI;21155,58994 -wjGwHWGv;86159,47198 -mKuusLBr;49025,66456 -khknXCMA;27524,1673 -snUljgfX;6622,57647 -LLPjlUKd;41834,53140 -MfEuYsOl;18537,15358 -fdcEAlJL;44364,31738 -UXLLywOk;1173,42615 -gBEHBzgn;72167,52616 -hdjJjIVH;63307,70851 -pgqayHAc;6416,21949 -RBNSiVVD;1968,29042 -PhmywZwN;59278,1818 -nyvjQVQH;81902,7033 -NPBhKhmR;41581,21961 -YvFiRlih;65228,75073 -GIetXhjV;86875,63413 -PfAxNvgs;75697,84568 -mzdaNUdK;25189,7418 -FJBGFJYx;74623,63056 -ttiMehTr;50250,42806 -hJDzmtXK;15905,61367 -TvAEdHFY;54029,19260 -dcpxFvVz;76838,29142 -PIWoYHli;59128,83857 -IJQlRvtV;86478,12245 -DTzWaRUH;34057,18917 -CwVUJWbt;20970,35378 -SMFKfzkf;35512,27977 -FkqZufnv;8476,60938 -RyYkNIvJ;16954,1427 -FakTwJen;69137,64238 -lZGuIoQL;22050,33370 -jOBcowan;60028,54777 -KieFWvrB;39978,32431 -HVMCpUwW;56034,38566 -KBaFkVIY;65997,21551 -FyoHadUa;36508,4429 -LSbJksfw;10673,66301 -AjnpgfJR;19833,53379 -TlMWWqqv;9023,86765 -oozWBNsm;66064,12896 -abfZwobJ;82250,69514 -VGFBCDds;59364,9735 -rWLnLdkB;41709,79776 -nRtoumFw;80243,24539 -bAqfoETC;83324,46504 -pkBOxsZF;49649,4777 -yRSsPIef;84315,69240 -sYeVTpcY;17318,49367 -XPoJckBn;86008,84238 -fgjQepSI;47525,74504 -CPNXRQZQ;51732,26531 -uWKZvtol;34732,62677 -ObPGMyRk;32271,23706 -xQIbFJuG;55724,37607 -DPkRQJNq;48286,44353 -lMIQhqiL;54701,13432 -DMeqTwGU;48740,9367 -HgMoyWbK;69213,26512 -HUwIyVaH;46477,10513 -UXYmqxAF;17950,51413 -QSbLywhX;69469,43706 -QeTKtfuP;84715,53516 -eReHABtE;65854,40446 -pLrvLrJs;21693,44896 -tonpoHQq;87036,30779 -xLopZhIA;29554,72006 -wFUevyHl;34864,23385 -InjNtNlL;14346,76199 -KDzkGasm;7410,79172 -SQvhyujF;20065,84072 -LqzWiHmk;69567,72010 -izkCwKQh;18844,12613 -kOjIOHAR;38344,67855 -sCzIjBEV;76356,56230 -cauGCwTx;41530,43614 -RVUOzbZq;81949,13728 -csayWQXh;1382,56829 -kfQFakiP;57166,73528 -qwubUCIB;63966,73829 -hrMgHTDB;46046,17219 -OtnBuEZq;31365,65920 -hXOcTRge;60575,28442 -rgMyTSjU;38809,59901 -BGmMbZhI;83859,80055 -rcSTOGHi;21943,48100 -EuryikoB;87338,16688 -wRUXLgVk;15895,42595 -jDxbGTMl;30841,4728 -fMpuNjjB;45075,82655 -jueXKhnX;87706,24100 -FiWwlnyb;19270,50830 -eyEdxPpj;39231,60917 -HFtRyUgb;10818,3924 -FucEeObW;59264,27578 -jxYrusRg;22058,83141 -bizkbyJf;55413,31050 -RDifOItx;15950,78957 -YVTnyIip;87384,29602 -depbPJQI;40810,29026 -hUaMLNyq;69195,50821 -MbaAbJdb;35768,42706 -uYNrHlSd;37111,5771 -LCavqUMr;27092,61326 -UsowJbHl;5766,72588 -WkXCpbwb;22463,5393 -MaZMEKuw;57826,12128 -tZDXyhBh;53732,44242 -ysWLITQc;61851,52402 -KwqtQIrG;67049,10192 -LoIQEewC;79348,79590 -KixuJrtk;22244,7158 -FDpqAOJg;19943,16093 -zkelwSKi;27493,22500 -JHojSBAz;42315,64469 -TuqnGBDE;22993,3120 -MNVEULpZ;68410,2276 -lfUhoCVz;58315,82625 -XGhTAkvA;28358,42756 -yAVvyhHl;18704,17580 -bSPbNinr;61912,35466 -XqlwnHha;87732,42168 -egLcWZqw;46904,23167 -odTneuWB;1899,59815 -IIomqdLC;87188,63134 -QRZPAxQN;3089,68518 -jSiiEmyM;10871,68029 -LzaSEWMg;9097,73174 -LFOWMzLx;27458,44038 -WjnfalqO;15028,71974 -flgduQqW;60790,27858 -DJouNpUx;71742,29106 -ttlIjASp;67917,51931 -tGMsUfhK;45348,83994 -AHnGxeRD;9288,75815 -pRlELZUR;13262,45228 -zkErcagb;25131,40172 -bApSKMBK;24551,46860 -hhaxpPpF;18512,36606 -AGGhuPXi;52067,55077 -rcucYjWX;9036,40805 -lFxBIyZW;58908,29988 -AdtQgpGQ;85827,72884 -mfUheATl;63961,79656 -CBaytZRi;32432,41059 -cDzyUQUH;19385,17141 -CaptVLgV;78157,7552 -QGlgWuEL;54658,65439 -KNBWmCIQ;82116,10718 -HZgvynPg;39611,85098 -nUOeEOlo;33944,84345 -AwzexBwI;33560,1185 -TqfLEeBD;63585,83861 -ITZschtU;44233,47328 -pezOmjKC;83849,39796 -hbQqYPgb;2949,42621 -LdInLAjn;65949,84522 -fRYTvXCk;72378,82975 -HneurJJO;60259,75098 -lrmZhCEs;51755,65399 -mDAjKInr;77539,33854 -ZUbRSWrF;13584,79921 -WxUCydkj;73961,76587 -RecaxHom;72349,60397 -yXRDWSVe;16119,50620 -Jerewxkd;82236,80852 -vfdphPVf;70789,20418 -KRqZsEDc;81475,87803 -CJZGiKZi;40257,48462 -vqzGzshU;72485,21297 -eptHiPIJ;73260,9868 -LIwqDyJk;10904,60410 -uKLtbkIt;57561,23587 -EjTbUqBm;74711,50648 -nseZTwWQ;80450,75107 -GtYxSVXM;27583,6981 -DISEYJzy;16380,40491 -evlecnbh;89427,30184 -NPXNCWBf;70672,39060 -kpfbmePA;58748,14954 -NfgPWYZD;41095,86228 -qyYTHkJR;8214,36224 -EldGRYUd;86007,62434 -VbjgqwmD;60064,50981 -oLrUEkWN;11843,65981 -TqwESvVS;61042,62196 -vpxyDvqf;45163,53837 -QJuGzKVP;8821,30270 -NWdvSazI;2526,80371 -iuuUUUIQ;19072,73252 -Npqihiie;82215,53633 -MHOYhOts;49520,78253 -ZItIRaSg;59097,72592 -hPkvvilk;53780,22958 -XavxpUOH;40967,38565 -WEoBeigv;18152,37830 -XUGBluLM;29256,16089 -LxhHYiGj;59924,2782 -hxxYawyJ;70814,54036 -nBZcdKlQ;37344,23639 -WScxzGvj;49817,20169 -UXKLmMOe;66108,81918 -yPgjdNxI;57214,33739 -zgLwiZcd;30614,89610 -eBaRqrMh;79115,58461 -kMQgmVLV;79706,57620 -wxCwOaJG;75670,56485 -IJCPOhCY;57182,32317 -EKWsgLBu;17023,7359 -TfEIuamY;15910,29498 -ENpauOfi;24762,60871 -ChRozGtD;14563,85046 -YjGmsJhp;85138,64704 -GkiFTIpC;32214,27106 -zLKoOlHc;7689,65616 -lgDtAnqH;12011,5618 -HPgeubwN;65879,52071 -nNZLiIrk;48132,59380 -nWSJSHpf;36164,62736 -YyBIULem;54345,41676 -FCHwybwS;59086,33964 -QfwTsRlg;25078,65189 -xtWZcsms;71491,64074 -vVZTyotg;50943,60674 -ERbqWiQx;20394,29323 -QfYlLTgE;88483,41690 -whjdjASc;56710,44064 -VFecfeTD;45562,43812 -HgnZhJKV;4285,86880 -CvEgFzNl;56354,56003 -AAsNjubu;13323,84749 -kRabCITP;55756,21853 -eSNmdVXT;33595,22624 -LwpBnkfC;17802,75126 -aiwdEwLW;9073,2984 -rqpuBdsF;80258,31579 -STwYFrmg;16533,2906 -pYgcGKBg;63227,76208 -MxveeYPq;6348,35463 -nvnSXfVg;25384,52595 -BuSxjhYY;40226,82143 -MPoIyefu;14952,54666 -hUStXpyX;26228,64073 -UmYbnpZG;66575,19232 -xndebzCd;19961,75166 -WXRQDAcA;67194,34496 -ijnwfliL;65989,66218 -kJCwtBmx;83500,12458 -XgAyjKks;22210,50719 -ZXEosbBZ;13734,12279 -cgbsGIGh;3925,22007 -RLypJdqS;79618,88327 -EkPrDUDz;46101,81631 -PmLMgXOF;26504,62816 -ZJXgyeJh;1949,81062 -VrfZAoVL;29536,35131 -WxOGEZeJ;82358,16219 -TbRJxxdN;15551,73106 -jhDQBUhV;21287,73111 -EnvfKaDt;70154,80491 -eylOltUn;50771,1209 -uADigdVv;49867,62398 -XSYmPfts;29369,33568 -xcdznZbz;49813,22809 -aAUIIZel;68444,12698 -jpEopcln;9829,82618 -iLNywBcC;68225,11386 -HxiLjInr;75958,41767 -brpNNLQQ;38095,17876 -QRFDXtUI;61320,11565 -oUafXqNQ;38186,39980 -ZogdluEx;14893,30797 -KgapQQgl;85220,46868 -LfahVCXo;79364,49647 -cQMizpCS;17326,77341 -JbLznsbu;73951,77131 -BbiStDmB;10147,64035 -zKFKeTUs;79455,69887 -quKaSMpV;5664,38652 -cZrdziAA;73184,10734 -TsmvlPOs;78994,2458 -vgQJPAwj;54046,16182 -PicfHxBB;82725,23855 -wBiHznXI;37110,37954 -vVjLjgeF;16265,30737 -IGtkjFUs;17987,83643 -WgTeczXt;79465,67226 -kxRbdKFw;37394,65211 -kpkEnrkV;68720,71294 -LmiiZSCt;14233,39724 -WDLhOMMT;1179,57776 -KBqxtEAw;48629,21011 -BIyyvfOE;86561,87357 -cEwkNoVU;21901,24799 -nEnJHBmg;17646,78508 -FioCWbYq;66334,4343 -CNYcxeYD;72764,28943 -ibhEYlGY;56135,69420 -MsHbdSDk;18820,13477 -vHVHsUbW;51021,24169 -oXchdMYx;48011,27239 -vQqwMsTQ;88605,62702 -rRzKKSCZ;21707,54850 -qXkqAHZg;37119,44324 -UDcQmiqg;47146,37044 -YKenftaA;69430,18072 -IdtIAZJn;23732,66377 -PHcfhfSX;27208,20483 -uDwyYLoL;7860,49991 -EBMeSsWk;29813,38298 -AetzFwaW;60284,80415 -FRglNzbw;66895,88080 -KcrttqeS;64360,44444 -zWMrxPEn;19499,22889 -ZvabScpd;41467,39326 -JlUYjUTB;32926,66064 -qZbDannW;44804,14289 -BnUUgUhj;27703,52314 -yIMvyITV;74249,30995 -xRvqNgdM;14235,7277 -KYlAUINH;82782,47872 -FqJhhQRY;76665,49226 -eRVzdxCo;78892,86144 -XoXAbsmU;45125,70527 -pKdmoTqK;73969,49649 -setdBNTa;23415,16269 -YwUgDkiR;50417,6441 -zfHSXCmS;45210,6697 -bOXZPJjG;48952,20686 -xgjQbgVU;53694,80803 -golxBcIu;56957,78683 -JVRYmHOZ;85747,79030 -GWEVSHCP;6353,65364 -ZhhAYcEA;8375,67445 -zsJUbeKk;89713,83026 -NeXXklRg;85860,86245 -wZPkEhMY;60202,19903 -nouPxerL;50310,78329 -oGRtPwJa;64472,20844 -xSNdNNll;5373,6625 -uLxJakBn;51380,53347 -LrdWFcSJ;11857,42812 -dtnstESF;20989,45616 -UTUYabDq;41490,56120 -VDdifCeg;79380,41446 -cmQovLbE;14910,31998 -JjyoPXZo;14501,17265 -knisMvbI;44208,31859 -MOYRPJKc;23593,64371 -TiKtHjfl;58768,27827 -rhItlEPM;27866,63712 -ZwQTlDag;46709,4237 -VGBEtCfO;40604,19459 -RYyjWRDQ;35141,81642 -CCsPqSHO;36267,6700 -yIfIRjqo;4815,12641 -bLnpkipv;51520,6852 -FISafMBk;59741,84607 -mVsjelcM;44920,23982 -cJTEtpaE;38993,40791 -pGBvTEal;43392,40213 -KzWKaUxE;68938,40928 -cRZHXhPx;61073,54746 -oRdzBfie;5592,2699 -mSeWFDdC;38668,20336 -CMCldHMs;20468,33162 -JsqFGchD;8989,40815 -WfWYtTAZ;14396,27422 -utLWzbet;64700,89607 -lLxrJksW;18889,68298 -owWXWxMC;45875,21259 -kIYUleic;59699,60635 -AenFEfEF;46891,17067 -SSfwOsHA;18848,42106 -Uedbneqa;38879,12060 -ERrCdQrb;72548,35992 -YLMjPYny;2842,28229 -bSjvvNWA;78267,19642 -IOEWXYPu;37681,52187 -GJxnRzwN;19986,25607 -XnoQexTa;68504,73831 -OYJvUeBD;27648,70068 -gYYnsZmT;54429,15261 -ntAetqUJ;40339,9866 -vsnXokyT;82211,23545 -RFXOYxqZ;28058,76604 -EZgcohYj;27974,11368 -KNwPEpub;62234,76897 -uwggdLfI;49374,8445 -JsmEJwxl;64748,65954 -XrKAfVCg;86592,76889 -rCKtKeNM;60895,54416 -nLkDlGbc;11222,52625 -pgsHzoDs;81002,71482 -PXHJDYGJ;43905,17471 -TXQBmOOY;21112,53978 -KepvKIkp;65976,69423 -YWaGoLGE;10881,45948 -NBZYpNpv;39129,16225 -mPfOxYvZ;63001,66447 -zmmLzwfX;52618,60608 -EJWYmNVG;73990,38800 -ItTzQKLs;75727,40907 -lnsaieZa;9849,76738 -hRroXiMW;81562,48332 -HMovTEBL;79103,6914 -HePcKliu;6402,60124 -HQeMlCfs;40643,4427 -KUIoWVmg;68466,9172 -ySPRRXRQ;51927,18572 -EjkYNbvB;65154,80270 -fIOiOFmt;58030,68550 -YyzqMAON;86519,84699 -TRCazsCN;53863,80568 -hFTSAlmr;44396,41741 -jPvpuuGR;55760,13045 -ltIvShxY;33317,82601 -mYqJNTmJ;84572,78954 -yQXzAlcP;20286,21107 -NeRLMvZe;66294,27944 -EgBoQNWV;32510,19383 -kcxUEWuX;52401,12918 -hTtuSAhO;75674,33890 -fQVUMHsT;72839,55732 -imyfNuPi;6587,23312 -mlzqXgKg;5404,37492 -niQnFQbb;74127,42769 -xnBiXRaV;67290,6430 -TmhNfbuI;79234,25136 -ArkYjWYK;62806,55280 -RGWctZgM;39417,63489 -GaaSDnYm;19125,89283 -FteVWxRy;46058,9502 -wfLBZztP;72463,39378 -NVBNyKak;7678,20450 -FMvDRkaS;22733,33686 -gbSCIlPU;64421,6815 -eDHurNKv;39623,82875 -gmDoIZaa;34296,1527 -oVfFYRdb;42036,32325 -EajjpWYR;45921,48349 -BQqnADRe;44182,59127 -BHsgMYAT;52705,17678 -IWeKqJPc;8837,81892 -oLXDnIqF;1214,87575 -VOfdfLGV;83599,6756 -YFqiiYwn;36863,66022 -iktAJNmS;24635,46837 -xdjJpDWh;45348,48064 -LEogTFUO;72721,72022 -fQrevdsi;84530,17258 -jcUFTZSx;32584,29734 -ffAtBsDb;25596,20166 -PVSspOjW;2511,39063 -deShoDxr;65041,57212 -PndexXbc;56547,23900 -ERBXKmeR;40773,33555 -WCzwYQge;6152,87611 -CGbErpDO;32811,29186 -OmXlVQUM;37215,65684 -tLcmWVoz;13125,72478 -lJSwjLRA;45819,88005 -iiktKptf;11016,23992 -OfcXomwo;51442,32753 -SjCbUGXW;32673,57573 -INwGiXNF;38727,82480 -bQobXZMC;80479,75867 -idFDfKED;68616,80942 -OQTWnsat;55363,5945 -poBMOYzZ;6884,85931 -ZlYqgFUN;40862,8368 -OZumjgjU;40463,73443 -zUxITbZW;8677,26870 -ANlqEkeC;25639,52163 -mveGqYmF;37587,6120 -EfWRtUOq;30132,88683 -YWZjMwxY;13659,13149 -MBmHHZaW;65079,44557 -CnnYxOxD;15504,62132 -GVzvuNhX;1193,12265 -GkpOdCrP;70098,81588 -ILaZAchP;38723,89905 -GLFemdYo;82890,81734 -yqsdcwyE;50740,56145 -IPtqiGDI;31754,64421 -VahssnEa;26694,39685 -DMlPKxfB;22298,49309 -qySWRHVC;8391,76722 -YoOObwmu;65752,17553 -uvdTedHb;10549,60288 -gUWTWhOy;26614,82509 -XvKHIPSg;43511,75151 -WEvCcBWL;54912,68858 -MvfHscgn;23949,15979 -UqsEQQNH;20192,18017 -tuESDJYI;41428,22035 -LQSevxTq;58552,12253 -RaProWxj;21932,3869 -kaCxnwuY;17521,86101 -xKRclgSf;36112,66369 -wKjVZriF;24182,42954 -pAkIqmDm;2867,22835 -qjjXlfNe;5612,62637 -TPQEjlis;21475,2671 -rvzGvnBQ;23291,38568 -BhjByRjR;7023,80168 -aTMurdAf;8378,45675 -HFRnfSAb;32297,31091 -eSeqMwHf;30105,46017 -NJAzJJyA;30318,63005 -fcnINsMF;22376,73654 -rhgoBTqs;51991,82839 -hPKYwjpp;54818,20326 -yUEupoDP;74464,60289 -ZrOwYlOg;9742,73591 -wRZNvMhR;40689,86970 -ZBXUGSMP;4127,27709 -ovawArYi;14426,10419 -PwvECBOV;19278,14411 -sciNOFwk;35484,44705 -mJYffZRZ;35080,20471 -MkGmihKX;33267,66321 -mQdZKDUA;74715,74824 -bRCfXhIW;30923,48633 -MwjQFFHd;50448,3790 -NztErWTY;21948,32825 -SddmdBvx;36329,64356 -QvtEepjq;56982,46784 -QWbFRtno;87432,26668 -meuyBatp;30498,72185 -LaXTjqxp;36435,41558 -aHIccfnR;1475,1272 -OGmdPWUg;50383,4518 -UsEanFrN;67262,50681 -IOPlRnZR;86096,26337 -JuJEkwmY;35654,48952 -rHtPCeMr;63744,46057 -yeVtPFmn;23752,43116 -BfASDwdj;72745,15456 -LHckblYo;56604,45611 -spiJNRFJ;41326,66563 -imnjsELG;11958,25256 -RAwiCPMY;27973,18717 -bBnHdLts;9672,42048 -RQeCIJrq;84076,2523 -MvvMGdTW;81273,56482 -MkGuGyhW;24089,82285 -xtSPhTyf;34939,19209 -MjtzbsSI;7457,79702 -QFNbyxSd;20983,86638 -jqqmEtkE;48425,67632 -lSfeslmM;29615,21753 -sBqLnrVN;23364,22722 -VnyYrkUN;55008,89484 -gVwWhJZW;51326,4766 -VbyGuTmn;21812,72419 -qJcUuJbl;67973,27112 -hLTREJIC;56893,88520 -ySGUZqSy;51172,52909 -zNeEnyrT;42459,84036 -azoNCAha;42137,19981 -mQmDnfDm;59230,15420 -dLPSbdzq;58449,89474 -aypraWNp;7071,52491 -IZZJZfGF;23302,40167 -PjVvsuHy;39031,49517 -tvgpAfmM;27422,34652 -gCSbCsgJ;80738,5342 -JYqCqVKr;38443,79291 -pDaaSoPW;36817,31845 -nkVsDfCA;17363,62322 -ljmwFcWQ;4323,20519 -UFvoLdFx;8628,36953 -ANSYXpSb;17763,25160 -erSeXmdN;82653,29886 -IzQtrLKH;27765,51585 -uYrSxZlQ;8023,66492 -jiQFbGyL;19497,59322 -ZNixjtqc;41905,52461 -okqkJFut;78722,69841 -nGtbdCTd;11439,32615 -uuWtxCVX;59062,53024 -VJsddPdW;82261,42793 -EJsymjLP;51084,41198 -JcCtISTV;47995,82547 -JigpPlGn;49520,88984 -GZLTGOnQ;40669,13580 -EnQYGsEw;58065,24694 -PLkedsbW;3833,23089 -mmtQjFQn;49140,49413 -ZlbmNQcb;29293,3533 -SlgnuFdv;48763,1129 -TrFnCsdD;24557,18644 -qWUvrejf;14157,51667 -YFLAOREK;3322,20834 -UOTqxKwf;29905,48876 -YDblDVOc;15028,58046 -TWWZlavX;63856,46277 -DeKOGdHD;41981,9553 -FLtITUUo;17413,49941 -ELWCCGNP;46522,80478 -pJfPooin;86781,47458 -CfVbMSMk;81338,67901 -RrSuDGsi;65580,2214 -hCYMpIrR;80742,2608 -ceAfMXco;37043,6927 -VKQuwWOF;35820,83149 -odMkBdWy;31897,67763 -JMsoTJUr;58018,8655 -BqAHiERA;78277,31785 -nQpsfLyG;2836,85080 -oUMWtsFQ;8834,18772 -hFICLpPn;14830,29837 -hcVjsurw;19674,29045 -OWWeqFzv;66005,62602 -AwZgzMeS;15878,56891 -nsLMYnCG;55307,32016 -QGCvhObD;28594,71920 -ZWneTcZZ;40496,27921 -vkmiyeXr;33074,32868 -ziBhkaRK;22730,45332 -LEyAfeHp;47256,30114 -InVrUPqS;36221,81816 -bsLQtpOB;30504,30271 -hFJJiDTQ;53096,68012 -RnTaqBrF;25602,57768 -OfvAmfWq;57222,57348 -XToxMhLR;20370,24387 -ihQIbyRv;26201,76799 -ZBGuxTNV;48380,62888 -jNvlMXfu;40721,57393 -ceOiJpNX;49945,78250 -wiTwCfdS;53303,70069 -KmmrfXfa;12789,58179 -BTxekuJB;66870,11729 -ofXTopVV;79941,52399 -YzQiYWeA;53889,51681 -wfCdxAzM;22338,60097 -HbWeiehE;66585,84529 -NXuuCwHI;60915,4317 -yxjlbkxD;73282,58599 -YXiUTSoQ;22411,50785 -kkhIsVDw;5674,89902 -EQHGbuiX;78995,81494 -aEMuwrJJ;21824,28033 -XbmqzKOt;58920,32495 -iPDPcEBO;55416,24803 -OgQLWycs;23439,64398 -zPGtIsgR;5133,33340 -HfjgUMNt;80611,22115 -hROdXnqY;37400,28377 -vMxCIKLn;51378,23403 -uDPAwWyt;53288,20134 -EnQABEVu;6076,65838 -LhSIKoVL;75317,70943 -MIyVAMbX;20984,17925 -FEHiMKrL;59593,51530 -pMokEmGi;71856,19582 -iiDdelxq;23646,77595 -yfCtwFQL;18348,18841 -dMBNiDSk;17081,53375 -KvAWWHfJ;76627,83963 -avasLQTD;68261,31405 -oFCwEUbf;20935,30816 -pVgrJXwt;86268,17358 -YDlyoMxa;17925,32240 -CiihQviH;24688,45881 -AdXgEwfI;73015,25947 -guWcOhvX;28885,57233 -yxtYspCH;6637,26749 -dmfmHdkd;19278,58731 -nxyyPenf;65307,73622 -RjGqGYUt;17971,34417 -RPbyJAfO;72772,42596 -EpcyaonA;41317,15850 -dFFizlKq;71351,15869 -DfDCWRkA;50543,75751 -tKspVuNc;45091,75446 -FydiJJuO;89782,74292 -aNJDLKAw;26877,84783 -kWFbbwYO;13727,11227 -JmDEXJtA;82686,1477 -RvxbxDEX;17049,56255 -cQLLfuEj;43109,48357 -saodyjIl;83366,87188 -WjfFkhPS;18818,59146 -rowMMvRl;37337,19929 -PTWVMxnd;40492,48165 -VJbWwFiQ;83045,31874 -KPWcQdnt;84477,22059 -jPIdnPqC;44126,44611 -jmxuBHPl;54261,75431 -xwxRaxXh;12810,51185 -txAdzQyg;36304,87722 -KiuiNyya;57161,14449 -KCAIzuDm;77381,83874 -eCokoQks;67235,33366 -QNCSsjOq;70505,42724 -gWBbdnbn;60622,75938 -jMhXAKuP;43971,67576 -stZfNZeC;64767,9135 -lxsBjngr;42030,46563 -CUZwMEHo;26554,48537 -eDTnqfzP;19088,74129 -XOOfkeUP;38143,10487 -EZdSNsxS;59517,13466 -eJbsxmJR;8246,29550 -wXUxwDmD;31051,69617 -HQHqiicV;64353,16114 -FZBCXGiF;7679,21355 -DdxRIEju;76971,9004 -nGtCUxHg;19189,33647 -skPKjphl;9249,29631 -aveTTdqK;21602,89827 -bmJvdaQa;83269,37922 -AQChFJXW;21019,83080 -DBUaaKKN;14957,77437 -hQQXDVsd;70225,86360 -wPnJYPKF;87715,32394 -nkBxweDS;46778,4937 -xvjwsTzM;70501,25285 -ORLSzblP;19128,78732 -mMXGjszV;28802,55131 -qYuofWVW;1572,22760 -DSKWiiYb;5611,81501 -fczpGJMQ;19756,43501 -HqrbFpQp;62236,84961 -sWuygWzc;33845,36662 -OGCbneUw;68250,70647 -rTNxBBCm;62234,55486 -FFReqqfX;12447,2876 -sjRrWpOX;71158,11041 -dDitfPsh;21950,47900 -gyVgSlUx;4414,21306 -nLFjShph;25950,65550 -NOEWhwpe;42770,35930 -FrlDxewV;68599,20492 -aCnsbylD;58658,88663 -IQRLNABG;40631,79960 -jrGjWVor;6295,88230 -LnFQSzKZ;77234,51744 -sLWfsUzM;87929,47392 -iAKkdaJf;41484,38469 -LoumNqCv;10365,82700 -sYvQyKgw;27549,23475 -nrxBsBGz;81364,6427 -yutFQBrm;23006,53046 -jJnJwaTD;23173,50242 -AoofnqDF;46825,83257 -hIFrdCFY;71820,6295 -zUtlUQHz;15173,48669 -fyMvfxan;56440,83331 -QhoLDSYe;35972,15742 -ZJZxDlpK;7573,63891 -FESNpeBm;70721,17028 -zRUfllBr;28109,30246 -poxjKlgW;22895,31247 -TsqEWGMV;4083,44310 -LftvMcSl;83745,29551 -sicsYsdu;7053,47835 -RWQdFbxC;75995,71932 -vCfDDbUN;37986,77176 -LIvhrMNK;8459,47505 -PfYnJtoQ;73200,88769 -eLThcNPs;15426,71458 -JqXPzSFw;84924,53391 -ARpsvFrI;12679,63814 -eErHuTwF;23346,11862 -OUtCzPHc;53365,80483 -IyKxBhHu;81138,15546 -gHWlGaNA;42198,71378 -buOpWdne;79932,30264 -dXuauLlx;79151,19205 -EpCyPZhA;30310,74482 -MCmlLCLd;52801,61918 -kpXSLzVZ;6196,25239 -lLLGeRqe;12654,31409 -xUIQdEiE;74688,57252 -hwFFKmsQ;43029,5370 -oxDWQUxD;53205,11417 -RHNEmIDH;15283,79209 -offGpcTp;79858,7982 -wdcXIWFH;13318,18265 -cPddLnOX;27323,25261 -zbhduniX;17011,77149 -nkKAgLNx;65026,6704 -TfyxACnz;86591,32692 -FXtqFLHY;56419,26345 -mOWNuMQu;72360,58155 -ygJqRebO;56684,89884 -hpHQEoPx;65586,11630 -RiyKcvSL;22511,38535 -LQiZwoCW;1187,64105 -eWbjiyKI;78486,40115 -PuXLBoVi;76047,46395 -KbGvtPew;82854,78153 -YsJsdxHo;34058,47917 -LsjcEYvv;36515,45157 -idSEAjJu;17125,6062 -LuoHBfbj;46060,76801 -qqYcvQkP;24886,34077 -uNfWrKRv;4739,4810 -KemwMgpj;38232,69989 -tFURABtW;41277,86048 -iLRhOnws;19415,59221 -PjIldYgf;14376,60250 -TMIEmTDD;38470,78274 -EdqHOHpw;38354,62113 -qKwAxgCP;5262,28006 -UiLkjyhi;70751,8294 -OIjpWPkn;65362,32289 -OyoynopS;38586,16825 -JpoOmESE;84269,28693 -nlczutCP;65991,86800 -kOpQdNlT;40599,11533 -nRYPjNVn;83247,5523 -kpNtqKBh;85325,15716 -zMwNKNXf;16685,58857 -phVuODuj;21837,30011 -zzMpFaEa;11632,82125 -KYDWgiSG;52851,73023 -BhwVIney;12272,46661 -sctWJUtD;15506,20188 -fRdmhEre;60670,2700 -KOoxXeLG;58028,70786 -YVgCvpaV;42574,12652 -mQRdYRBz;79478,34713 -jpmpoeHv;52995,45387 -UpOJOAYz;89923,83246 -RfoAbEaQ;5225,41822 -McRJvFkb;17200,60223 -ljJhJtOg;85224,13286 -RWRabjRq;16181,74232 -zleZOUpB;24486,81858 -VMZnlXOp;64138,34987 -dfWhMBXY;17887,69492 -awKeHqjO;67570,61651 -HrhCzEOJ;31476,69692 -eNhXmoYL;27002,10927 -dqFUdOuZ;67006,75667 -DMBxEzLk;81238,42854 -ehfunJfa;85470,39926 -mbIACGpA;27606,12629 -FHErjMpg;64836,39854 -ZhntDeZu;52992,40225 -koARDWPq;30608,23026 -aFMtgNzE;8451,11621 -TFoMZWyc;37164,25937 -fvUAjJQj;60840,22594 -TDCGweGT;26138,14174 -zQqreTGq;51853,67114 -qfqVmlNB;80540,57284 -CZuWWEjH;57179,18141 -uTbGTsxz;76797,71731 -KJzxvkBj;43286,71301 -sejBEefo;73945,13937 -OdHnkofW;57772,62220 -zpFpXdOy;88380,48654 -CsSpLDeO;10768,39067 -GirbMusX;80792,66493 -hZVebCFc;53326,79255 -MimMJPIy;60891,2668 -LCpMdRxp;3899,16671 -ZEOoLkdp;73320,84832 -CcOzTpJO;78570,26747 -aywsTeOd;45837,24778 -ezIEfjOk;62418,42909 -zjdirHqX;72639,81824 -fmTpbStQ;52747,80620 -ZwCpVEAG;5981,56163 -wkFdKoNQ;26921,52646 -qLvVgRBo;19795,31158 -dOFsfxuZ;29133,51178 -TXQeYQFr;62070,17647 -TCiKfgGW;3668,42324 -HCDAtYlb;38671,35286 -fjWLQPRH;72959,30461 -CLvqNbXy;41395,50599 -wGmiaAYH;28545,38615 -OgVkCXdJ;55229,87668 -nxjaqfcq;87962,38201 -MiBTPZSl;60766,38200 -HGHkbuIT;61976,17265 -VTeHGxDx;35457,82503 -qShYDJHA;5840,20255 -JkVLdQMG;39646,10290 -uSrXsiCT;20501,54161 -VzggfhoG;62704,48304 -ESqcLPvC;37312,1304 -ScyROAls;26714,31112 -IflTTFMm;53636,44408 -UIVpkSPI;41767,84306 -tqydxPIN;89031,72612 -XotVqxnz;10588,41168 -jofVMyEi;41254,51737 -WGzhmnPr;29833,34900 -lHaBKNYZ;5381,52391 -RmTxghnf;86854,23250 -iBtVFiFZ;37643,87977 -mciXTLov;38579,5578 -MSbIYyqi;65303,6398 -gOQXiuef;19239,20948 -FswclgsZ;42493,35535 -mKnSxRdF;22469,31412 -EZskyDsS;30552,65329 -qfdlcERq;72593,37644 -SqiiKnTj;34601,55381 -FCEnqVqp;85437,41331 -INhwXqtT;56257,69849 -qYBMpBJN;62284,18518 -nXSoHWky;38520,45981 -XjstrzrR;32921,26066 -GgNVhRzF;13630,29304 -gfnnzEyA;74985,18116 -WpvnnhSS;71966,84133 -GvtjEYnG;51878,16128 -hiBUHBoe;64356,38882 -uFHTzRvE;76911,49488 -yYxkunxo;20664,29044 -pLXPZfHV;86521,52197 -EilSsSFk;84632,19822 -wUNkNxon;32322,28394 -spDNQUUZ;20606,3276 -jDmVZldU;37995,47273 -hTuXUqPM;3931,5749 -rapBCJpc;75065,15491 -acvmgKda;9895,55158 -BOsMBzEl;25080,83549 -gSlJhOSi;80030,12118 -HgnVDTbd;70084,37459 -nxchTNxA;85707,31909 -plhWQQOd;52536,13099 -CAQcnzbV;10399,24611 -IoVxvTTt;40031,54827 -fQGzJMwr;2561,13600 -opsCvaoY;10871,27197 -stnnzlyk;20155,75515 -ODVhntcc;63795,52579 -fPOKjnaG;42449,44018 -UgXzjVas;29198,55364 -uHnHqOVB;85917,61432 -GECDqKnX;88618,82517 -KSdQGQPM;75127,49389 -mgCtgYWp;32291,22293 -uCftBpuV;46670,85238 -DASmoVjQ;35840,87082 -mSryaeMP;22938,80485 -JfcNhgCj;18849,39476 -ZPknPjTC;81604,25869 -zYjqIUYz;81220,33473 -DDXivtfr;62545,13643 -yrlkknTI;27466,18878 -qmhLTsHn;8060,69503 -VAcPXOYi;72802,35482 -AFprKLoa;22649,7458 -hOULQwMA;41928,66500 -GqrxjjLY;8719,5969 -xsNMbikg;4997,5458 -AfSLAXzf;52650,73227 -wCQXcKdF;42882,5777 -VmQqVOSR;15601,33060 -TMVlvdxw;58033,47227 -UZKuJwDm;32268,16309 -IPewMfHF;53412,16112 -GyiMaFLl;84354,39442 -otzWmcmu;14788,70781 -xiFxYYXH;16856,87800 -RYPsOumk;40908,8770 -AFLZkAEi;65413,68475 -MqDxGwuX;22789,35607 -oSqkwxem;19306,83948 -LxvezILC;71679,3688 -xrVkMaXI;42290,53607 -YxOtouBg;77667,42478 -uaEQNMYd;26240,38219 -SBlYpWmr;79706,71762 -daLVOyJX;18996,70949 -ZldoyZsP;75688,28188 -OslrrZrk;30339,83589 -oywFlGYE;52943,71124 -EVLiZdlp;60961,47826 -MdXMWxYu;53324,68236 -MbVxZukH;29384,78484 -fzUgneUc;85481,5882 -taqxIKyR;43770,67244 -fmOblBOA;15811,67715 -NMcueIHz;60404,19688 -pzlZvXnX;1070,65726 -WuVgSkzq;34817,61189 -qNzNOTqT;45411,57044 -yZOiTDUv;18799,36385 -iTXzQpDR;30241,60265 -fhrngiRk;60952,3714 -hQUUiaSF;74992,48325 -CslcOiBa;40581,65547 -cXtPXgyp;34756,54201 -dKKWcfxT;80230,17292 -FFSGnYve;35670,80901 -gDmamCEj;65859,25930 -NBFoZKOv;67526,1308 -QBRjLEcF;79859,81659 -OVEzlRJi;62432,28217 -pgdCjMrb;38277,41810 -QOiZKnrD;56847,39231 -tCbtlula;79393,46446 -aXTJuukI;16834,31822 -JkTZbYWo;53718,34348 -irNrXxew;70835,14376 -tGLGuCXU;39744,61663 -xqOYjPBQ;68695,27565 -HzOClpLl;65244,25191 -HUVWYQZt;86199,54179 -eznIkfLm;78165,45694 -lQGfeZyx;61565,69917 -FISEojGg;4584,60441 -PonzAXiD;20482,67359 -RGJJcctO;5105,40581 -FWyLJQFs;42389,89520 -GUkfJSfr;86550,59050 -ZvoUCAPk;71409,67884 -hiLjtkAj;59959,17912 -plFROYWd;50808,75804 -inUoNYww;83588,52321 -UEARrqcq;89893,9018 -PATpHBUG;58071,42814 -sdXtMNMz;44188,13857 -IhdSueqS;61034,67164 -lpyPGYwM;10255,6297 -mPtlTdQl;16026,70589 -FMAGyVZL;48945,9941 -wEjoxhPp;64956,66536 -lUWvHceV;48692,86448 -seQhlLRH;47169,15114 -zlUfitVb;20793,34941 -IkNNOtcp;47535,13613 -XRHpIJZe;4054,52027 -weqjxqtJ;51752,61355 -nEXkgviS;30335,13032 -qonsdzfz;11690,27574 -wKHinULk;54909,1124 -xxXKPiQg;41934,76463 -wACjItdP;69017,83127 -zkfHbsNt;48891,8357 -FLcifWGa;30352,5779 -XNrqfstY;25252,1895 -vbLgrmYu;5472,75246 -aLAgHjyn;31492,68175 -RHIMKWvK;47925,83484 -tzkrciiF;57868,53806 -tKcbxXbB;73037,29021 -AEgehQyZ;14121,62533 -GzWAnndn;47381,16635 -mtXKpACb;73825,10348 -ydlCiYaC;34743,33777 -psIpbLyk;34062,54558 -tlKtnMtu;56963,82736 -OLZASOfZ;54932,55796 -xiqKJJNo;40195,19026 -TZhJOGep;7335,72735 -gxecasxU;47841,32528 -YRVygvUg;17641,35768 -CenPebQN;19911,77665 -pZjaBcqS;81970,4000 -ZLngKeVH;4534,7455 -jnYdpodg;14618,57203 -ypYvJccT;44865,9490 -KvSSrnMe;46780,65866 -fQFYauJL;29885,84074 -OwWLpqhH;24422,39959 -rbFZiEIn;85406,89360 -cFQOBhbM;21616,75049 -mKwwfaOJ;4700,24863 -xAFuCkGg;47205,58277 -NyVkeTTb;88455,79783 -LQZOdIcx;68547,2243 -wTooqSjz;67002,78095 -fNSfBACB;25407,30943 -VrbKJmwB;86702,88678 -xcgsmAJV;11490,10940 -QQpITtVo;57794,88501 -QggPOtHD;83874,63859 -yNfzsiBh;60169,28172 -jylSODaA;9608,50082 -vAbBHZNB;5169,39299 -PuwPVmHh;18108,11251 -zwZvpNOY;87217,62206 -JicQcxiP;28676,45763 -akVGPBwZ;29956,30452 -cYFkmxsL;51345,59744 -aqqQcfdj;4197,5184 -LphrtlNL;21446,81413 -qhExOktd;39395,75185 -oxjYegmW;50035,66719 -AuuRbfIP;40285,83471 -IpgVXyDX;85201,67449 -TzVTBsZH;49319,8184 -GfcUtQNf;40835,30637 -pIBUvilU;42859,87769 -STiPYeoh;87658,69346 -PCzMDdsF;87816,73846 -tEPbwueT;76945,15784 -wwEQogoq;14841,26331 -SKJQktZf;87565,28393 -qZNqbKjq;76935,43454 -QyztfgxY;68524,85655 -ozzxHKlw;19901,67097 -UNHoaFOZ;10590,78924 -QZTquPQS;32711,45390 -vjPRiTIH;3017,33112 -GlnLuVvF;47537,30493 -xySsEzmz;8870,75042 -ybCTaTyN;11219,30413 -auAeHLGU;41575,38683 -XIHaOKaB;58871,12407 -FyLFFaTR;74479,49681 -UitglIJa;35634,19161 -OqUwCMTC;22366,48472 -mQzjCaCT;26556,48144 -RNDoDLBN;22276,64826 -ODxOPshu;6539,51435 -EPfLTVOk;57414,85134 -uvBWDkdH;5057,86515 -RJaUpoDc;60470,21461 -pvVyezIA;42430,32633 -rOHTDqoU;56355,86746 -oniWvplE;24950,79809 -ITCbZahG;17301,53121 -OcyrUbpk;9944,24639 -ueKpXPOh;50207,56452 -dppmNkbT;87053,6208 -bYQQYaSw;23448,31050 -YKnskOOl;63754,10292 -QlakaiWq;35798,79887 -FdMmsqyT;7068,30610 -sSujcWzW;11081,79138 -NBHxKTBt;55275,39615 -lvzVjZhz;29047,66612 -aDptJZEt;11566,9558 -spAHoAgZ;41435,13804 -JaxXSEMr;44792,43618 -JWAhhhJr;32464,78118 -obdSecPQ;37095,19961 -wkQhsamz;45770,32288 -WbZBioyi;64000,53928 -mQFisHuQ;28091,6259 -JQxpnhKI;17687,82323 -AjGjKLQH;6737,82769 -TuTwbyPJ;75739,12053 -DkjMTIqi;88023,44891 -AwebUhxf;55255,20785 -hDrBQxDq;72517,68207 -XNsLUeYf;62143,39152 -CHpKyjYD;42199,38955 -ezTKOmRr;25053,81300 -MBXgjLtr;35371,73465 -rosvdqFq;40463,85294 -rCMyUUIo;57037,88084 -sROOoKxX;29557,3841 -DjMCCWrD;30739,76210 -RsSMXWBm;6177,26508 -hexIAJQi;31975,54405 -mwECDtUj;81344,18009 -BUOIpXxY;4789,67250 -tWinoXvB;63823,42959 -CuCIEkGa;2802,16032 -jCfjoLQu;28682,75264 -PeDsWfXa;65457,31211 -RJPGEcQr;25534,79162 -OQwsEKzp;5580,79733 -QotTdiTp;59077,50791 -YmBpOYPC;35970,70715 -TJhjUcmy;48600,39700 -KSuimZyU;77100,50163 -avvMlJMb;39410,22542 -VMCrOgmR;33449,10049 -YgzhXOug;66208,1732 -FNLCbtJT;10018,63222 -mgQguGkN;49136,3471 -dDqtyuUd;26616,25663 -qfhDuxvy;11813,45445 -qQBbWmoa;26858,85859 -XJGFhHpZ;16933,5830 -ULlcOXji;79461,69877 -vVnBwUhM;32517,40471 -PTlYGLTr;32766,26277 -UqAlCXGi;47218,82337 -jhuWFXmb;82563,11121 -IkJAOWoV;14778,17963 -kiZemxDr;14938,82097 -bDbujyDR;58562,5079 -QZXCZQLl;52644,13399 -qniTzCiD;79856,72689 -ABGmNVUB;79438,73441 -nMlxdXQP;2656,83355 -HkfOqIQa;52133,44564 -pKqjeOTy;62702,85851 -qVgYaeCv;30360,18323 -mJHnxLyz;8975,38216 -aCCHeAzp;7936,65746 -zzvbaPTK;45898,76289 -wmQRYBfW;79658,68863 -XKofIbkw;76517,42838 -rVzZzgcf;15618,28358 -LKNVNZnf;34737,10170 -CRjpCYvl;37299,56498 -XqJxiemW;26774,73882 -efwESGla;83422,32613 -XCueUZtZ;68257,55373 -fhpsihyp;19084,69188 -kUfwVptu;12817,77718 -aJyojkQL;14678,87837 -kZLTVQjq;38245,31469 -HAcOQmgw;49459,67035 -CrSWTbPP;41072,77830 -uWbEjwgi;77462,34867 -BGDCjwlw;35732,8130 -ughlmtwe;23632,47142 -SxqNBWAM;15533,56266 -OUcOSWkL;17467,21651 -arUxdUUo;40408,44335 -VefWERry;8660,82014 -kplrWpTg;33365,19385 -fQSfgbdu;74331,81582 -pJTWAibH;10001,32916 -CobFqOKg;25550,25714 -yRTJmnuI;12170,45919 -kwPmFlhp;59494,72766 -etvbRknp;8667,71854 -BISwvRMG;64616,8925 -FbbNjpST;62654,34323 -qHCaswfD;81694,48532 -OqdKcndU;3202,61075 -UMlKQyWM;45154,71287 -DvdqiaRW;53874,28000 -wfxcLSKy;71690,48569 -aBPdpcEk;2848,37100 -JPxtDSkE;38058,86289 -PlVHPhFv;27392,5259 -mKzryeap;65333,27795 -TcLjOmWu;31622,52023 -DSQUdTZq;34382,89831 -BMlhHosp;8730,79347 -MGDDXEky;67513,57448 -yxHtyjXw;60420,83131 -OHiniZSV;3046,5045 -hXyvoqXB;28124,60675 -hqgXbszP;63587,71786 -ZQkJQkvq;25529,28919 -vftBSfEQ;39683,68685 -byTZAOIb;19334,44507 -tXAcHHPa;51064,76804 -cUmmNGkE;13792,85742 -WOuoLFsD;26452,21075 -AJuCrPCL;48071,69946 -STyRrKHD;71575,48350 -rlaUKJQz;59876,11554 -HJmbQhki;30002,48927 -hyJPnFXM;76119,14709 -ZldRZJWI;4263,51536 -cljftAuG;76147,88072 -ueDejGtk;4124,22559 -KKBJYOVQ;46372,55946 -mvtsZmGL;45008,25134 -wlXHoeEW;3752,72215 -jqqzEZbl;36871,63015 -cLlZAoTQ;81839,3186 -jlCHAyxA;12967,32179 -ZDRoWzrf;25711,32105 -LOWViZBu;82601,23500 -NaihZcYU;77194,43065 -FichkpaK;86369,86186 -HfOqmWCb;35529,20385 -gfrEcVot;43399,7838 -MQcHSCkW;30862,23785 -HkgGZkjx;89976,66579 -RhZAiogf;74358,85414 -QclhXZaV;76385,75410 -BAjGZAoJ;23952,83656 -cmJFTBHO;86006,82877 -zgEHFgRT;12608,84645 -WmwDVBvs;24121,82681 -mSUcMiUI;57922,20877 -bavRZiNa;55176,63094 -pNNCGZtH;89063,12696 -WipkxtlB;2999,11181 -noWGUiQT;23624,28599 -yGoACHzR;3192,77877 -eOlGcmRF;86063,60329 -xvDOAKUO;59520,4585 -BkwZrQil;16860,59134 -naDzBiSk;15992,22990 -fgCBtquB;8060,41136 -HEoekdwU;77176,9023 -ZXObvHzd;19971,35302 -fBUEfRcP;35277,68991 -UYotmMCI;70469,71338 -udWaAjHf;78035,16057 -KcCbbElx;82855,69099 -IOvxgViV;2053,69221 -qMQfGQlu;70585,80436 -jHlTCQsK;8171,55512 -kCleKklc;60184,89729 -vpgNjIJj;52583,47208 -soiIXjzH;79851,88569 -owzYFCpn;35101,83489 -WbwlsdOk;27506,22420 -eeBoUxAz;86311,34590 -BeGZQkGo;70673,18035 -gTFsEZTb;56503,85895 -uhSClNol;58568,27668 -NPGysdUv;36586,64746 -qsxbqVIy;32450,17202 -NBKqkMWD;62772,16731 -majnJlsG;27478,16096 -xbSfqIPe;13708,56208 -SGYJRrNd;36763,30632 -yaYBMxYh;42301,17761 -HYGOfGTC;6752,11295 -rtcalUMy;21452,35079 -MtMTneLZ;15459,58539 -duXirBYh;80666,48709 -uxbPoqfO;55272,13690 -cPsjOkcx;1585,67919 -pDnTRDod;70924,15473 -GqLuEGMM;50491,16906 -dpGqMCnz;19618,22714 -itaxQmaQ;75078,41198 -cqAOkTJQ;21603,69518 -nKmIKhNA;51317,11991 -DWewwRdW;58870,48498 -UHxyZaSM;44772,3965 -gxmWEdKQ;10244,77700 -iMpqVhQr;36512,26296 -xsVsjcNU;45282,79556 -ZwbVLUyz;23802,68823 -gOANJmBd;55277,85570 -VlEJIZbj;79432,56003 -vJnSrNSw;9900,65954 -KYxEPEYf;85179,60528 -BQZjIFph;61674,20078 -hVHPpWhv;88480,26003 -edSsWixH;10595,28660 -MceGwlKG;53138,11335 -IxLYdMOz;15367,60211 -uTCXSdCh;34460,65588 -eBFnBVKn;53265,57198 -AiiGOvCd;79291,21769 -AqWKLCee;80779,12378 -xEfsNeXx;26297,29379 -hPSDgRZr;58084,69205 -dcKpjYDo;13482,34443 -VreYMwfx;6427,36417 -eKiayBJn;28327,42653 -jBHzkWxi;78148,11567 -GnRdcYAs;69052,6328 -GQEcFdeU;71085,64352 -kXBLHWFk;88342,72341 -TihKPlwT;37724,21505 -WIrBaSyy;58762,23124 -qHPaKebR;70075,74037 -tArcFKTf;50560,64005 -iypuXDOu;7694,82940 -RYgogfKe;43403,67730 -xHGHSbOx;44846,30284 -WjpFdCUF;83064,41194 -uAWNHpRs;60323,87083 -DXfKpbBV;3452,30160 -gPWwmBMT;15704,13715 -vplHziLk;87327,15092 -FHwACirZ;45466,32252 -BPYoiyDY;18395,68000 -KOgzWbXe;2804,61318 -TiueSHus;53327,4484 -CmLckfGA;29614,80024 -jTODhgrh;77859,5192 -FuWTKjza;54722,75136 -tHxkFfzt;58357,88628 -vnQnIxuM;4775,86998 -qcfIZPOL;82872,86937 -TZdoZPAj;29686,81477 -RvPmtDJd;86435,49744 -sFRkdqJf;9008,31575 -tgEVNavX;30933,19339 -fRLwATcT;29051,53649 -IiybNxyL;5964,77048 -iCllMxUk;8224,20702 -bhynDYJn;7001,3849 -PgRexaWs;59007,27500 -MNMCuanh;15278,24688 -eScRnfaI;4258,63234 -JSJYDwNW;60525,52793 -MdtzGVVZ;44864,21705 -kSnUOTKi;29736,13309 -asMNFiHQ;38467,14346 -zBXhrtbM;1336,75506 -nfQSoRkb;24811,50946 -xBglrapJ;12464,22676 -PXQzeIEF;86602,38274 -IatGujay;21209,58094 -cOZDhscj;49552,89545 -cOfMzRrz;24184,54885 -KSzRNqxQ;58786,63612 -arKlyQxD;30347,84157 -wfBgBuZC;79947,58129 -ekABJtLE;41065,34999 -dillXore;64877,36686 -VlUBMKWc;70614,9285 -rrZLSGEY;3604,27477 -WOQwfOHJ;26094,7199 -YJHPlgwl;4217,85370 -blLfYMiF;23771,15996 -tCaQyAvH;47829,42836 -UuTvYrpC;13916,5561 -dONbCUCV;38685,86102 -kdNUTAHb;43477,71321 -gGvbEjfM;48910,41583 -ofwgssjY;4594,32302 -zvZxMdrG;5241,79653 -sTtMZfcH;66037,65934 -NMHZIXcN;49788,37712 -RSghcAbw;87975,74127 -PXFgRtCN;80091,61178 -LtUMAMLQ;62284,23465 -dHTipdQQ;80734,62207 -lZmLzkWW;31777,3704 -qMdTbpJw;57135,87502 -QCJfwyrj;24961,58993 -QyieIFXj;54615,78782 -aGZrqVBy;75644,50715 -mXMgvyjl;7886,85555 -NIMHZbvJ;44469,79130 -yQWBCPEq;45257,68477 -LkIuhXDK;57641,13983 -Qfqxfeul;73426,41310 -RHORzpgV;26721,45928 -xxrXkTJQ;70112,31821 -EMLqAfyg;56497,61850 -qiRYrNET;8402,54972 -bEnhSLAq;12063,37907 -BOCwokvR;71404,37787 -GiMUhgcb;35071,76464 -QrZrTCYa;46846,76936 -oDrbAOtf;72867,12553 -UvEQgrPn;57160,57766 -hYgBqbmN;54297,58390 -XtXWyzFr;79527,30032 -xZkQIVXY;59625,45820 -mEjZTOzF;85203,85929 -zdBhiAUM;82737,52398 -iVVxtdjb;57039,75639 -YuliQSUD;73554,28955 -XlJOmSji;28844,82271 -pmlusBCM;6446,65672 -QPTyXkoA;51770,71148 -RUIUKxRy;36045,72158 -KbJCTfyg;12509,14878 -BPGzzDQb;47050,59168 -icSJatMo;64472,68152 -ymYfHLYs;80575,75763 -pGvITLIu;79916,20590 -YeIurAXT;76243,84942 -kSwFtfDT;42342,73993 -tCrVObTh;28226,19380 -XSJftCmd;80017,61008 -bYFGqVVB;64941,82458 -JtZjlPqs;72175,53460 -vnMljCYj;80682,4492 -sPaetFyh;20462,42867 -mJkYHQWl;59732,4272 -AQCVMGvO;25223,8073 -RWoMOOCf;18325,28139 -XnozvVsl;70178,64184 -GucZqOpS;56180,62556 -LUyFCXpc;67406,4395 -sMVnsgoy;13480,64495 -RcsmaDrg;51968,59745 -nRVvasdg;67433,41752 -afZvbvrG;88922,1454 -fpyNnGZx;33385,53608 -ZCVLRTeg;87314,22601 -kOdtZUbO;55611,62266 -MwiIXZGl;84232,58204 -RpOhABIi;70916,15781 -IQbLbnRM;6553,1091 -qqNIvKtR;13179,81543 -dtEqQhWG;48157,8551 -KNYFTXgH;23168,16116 -AqriiULg;19445,47246 -NGFXRGgc;34241,15259 -jtdRfAwj;64198,51679 -zCcOfWCm;84417,71551 -IpWrSpTs;27322,33210 -AvOzZMID;9541,82686 -UMANBxXF;42030,40262 -sMnIeXLg;49586,41593 -jzcYLVIA;27953,24713 -gJdAPsKC;22920,77123 -qSQOMHhd;62573,74808 -jixRjTHQ;17471,38003 -dIMHjabt;61230,79633 -URWoCvWC;60683,73680 -wGPtLbKn;80068,46835 -VWnvLoHN;53359,24523 -egmbXtpU;6706,34126 -cgLKTQHQ;76481,40648 -LGSQYFiR;84700,41901 -suZlrlFk;2139,15473 -KDmlKGXy;84329,32439 -VgJwwSwN;12113,49070 -xqwEzAtj;30105,74330 -ddljhTGF;24804,81214 -zBmnwKeH;80272,78998 -QUIpMBxo;77331,73262 -vgiefjhK;68450,7899 -QnLCRMKL;63277,46503 -ZUGSfjeK;52046,74393 -CDfUqQpU;45865,52554 -qYVEWXKS;63091,7151 -WXeRJOPQ;75899,29262 -CydCDCUp;1250,88952 -nuOJZhBv;63899,58582 -ZaOpxbyH;11110,7353 -RABqdkMs;11471,35248 -dBFlRLXm;52510,71416 -KGIbALkv;9502,80304 -UfAlEKlI;31554,58240 -LnHgQwmC;18496,20945 -wDZrWunq;49823,68369 -FryTaRVu;5233,86527 -vWJsleEX;19209,55852 -RebZawil;79897,45341 -xWmUjouw;11418,76139 -yxlFiwzC;48317,84304 -CUmisMlT;61091,78906 -TQLcYlDh;13133,24470 -wTHFFpIj;13589,20595 -ppqsYjVo;20768,28708 -rGVQHNZB;76313,10389 -MLgEDcwj;56100,86643 -aEFyEnlq;57410,32584 -mBpLrgTi;46079,12662 -kMlPEFgT;83257,43443 -NUzedGiS;83896,51014 -eTJKccVD;87051,35636 -LWOoiPhu;60966,53306 -iJdYaOgB;69825,50830 -osgHzVPl;21056,29488 -dwZaTIJb;11868,84572 -fUUjAsXn;89288,33219 -kdZrJPaW;29487,14326 -yLXfvdxQ;68595,41540 -yUEwjHNf;89880,10266 -gbLCjUiX;82978,25296 -xXXhTEqb;22433,67467 -GzTjLLru;21940,55186 -oIXwERjE;32230,78992 -TTCbvpOZ;57289,39067 -CNtVKOBV;83276,83179 -whcFlxSY;24565,19130 -RsTOWhbQ;5423,49806 -mTDUOYMs;28219,88407 -DbXZhvcf;42247,82376 -WvxsioDq;17308,45656 -JfnBKkFU;23142,73864 -CIBOOkLv;13549,10841 -ZvyAmHHZ;75875,14176 -wmHVJibv;2233,86401 -MCfPyrXd;71194,31195 -HnNJpRHB;36862,36887 -EIrNaVNZ;3052,58146 -nUNHgJwP;17275,28604 -kAINMBrP;50387,6963 -WGucQsUM;2463,22964 -lzaGYdHs;62516,43630 -ixNJyTth;20563,44338 -OPHsToOX;16155,4393 -OuGDZqMw;41599,82645 -aEfwlPKV;49334,49954 -oXbUFIBv;47456,82624 -GdKpqKDk;57917,23370 -sZTQTVUy;51650,28023 -RLAXgWeo;2913,44885 -bATZVyjt;65412,77991 -IXTAYPpz;86498,22571 -EJGedWvX;89677,46874 -gJBTGOwJ;18782,66300 -EQmNQNlY;66695,77942 -wThBzNLD;6145,13703 -CyBDXjCl;54642,68949 -PlKvITvP;17139,88574 -KpeABhyY;85526,19741 -hovlPRzp;69805,87035 -seYkxLCk;72124,47346 -pOFlXvui;26784,11033 -ZHgrZviT;26953,19442 -fRFYwSRB;78902,68949 -tCKTxPfD;21029,88277 -atguYYVm;43057,30969 -fUngutZJ;59695,37941 -yKJYbogl;45335,64980 -FqaXXaia;34948,56148 -BEqPLXFA;66350,43909 -ZgTrlwMK;55508,20297 -hFQcZwOq;11778,76349 -sgDMBPoc;14895,22794 -uomZZZjH;14022,38558 -EAAPFZxf;20978,29954 -rIGQFPxT;23004,68398 -ZSaXUikZ;38102,76216 -ixArfazY;36138,63807 -RQurfqxV;65216,86127 -wSUnFyNv;29345,60509 -WQzVXtqF;5330,54033 -COytjYOp;48624,44254 -BEXVpdgV;6202,27517 -qQnTdFoQ;77208,22672 -NwEZiALk;22400,26507 -TdAYEOSZ;19392,72959 -OoNWPdAV;70541,64335 -SgzhCGfs;6441,76408 -rvgmFvZK;86228,72729 -WMBoVTHf;35283,32827 -IAJMExnO;16807,39085 -ZZCLMtpZ;89346,50184 -eKJOkuXT;59440,79815 -TBtqabAe;11640,34979 -qdHUDKtl;46011,64007 -rXqlMtbD;10008,74378 -AnjzidvJ;87837,61643 -ozoYTPgu;49436,61061 -aYdBbtzc;11812,12261 -ywTZUBHi;48551,54798 -YMbxdQFv;50423,70582 -KkpBMtZE;39735,84236 -hLRYdkKz;37463,10376 -FadfXmHm;46051,56247 -BSimRXsc;34128,4874 -WwVfagbS;33189,64309 -fIMTlruf;78851,11419 -wwLrnKrD;27703,31865 -soDVYFek;36426,24111 -jrvPJFTq;78948,7703 -bkWoydFI;84131,58016 -qjWVJlKl;37649,8172 -UmKsFLzW;84668,72315 -BCsWlzcs;78452,56690 -ezCwnvmu;33342,34207 -ylusrKdV;79327,54684 -JlYrDbSZ;84745,41122 -eUMkNptK;82364,68759 -VXAFPZcE;26239,84193 -qzebxpDb;44352,75343 -Awlmepqk;59798,58391 -gQVCujIl;56656,68683 -qNYkSrPb;31062,26997 -PKDOQKXI;89626,66050 -UOYgMhrP;76648,8433 -UBsqufaD;14899,35511 -WadfewmP;58444,51828 -baYChuBI;45773,49580 -DhQCqzXe;5836,52667 -YegLFucY;78526,28778 -QqCVHSaN;28443,6564 -ASxktPWZ;13667,20570 -YPevuwoO;18948,65844 -DueVjoAL;54373,69195 -nxgiTSDJ;9747,89829 -NcfzhLWb;11955,23404 -hJPLxpMj;76541,17812 -wpvifCOl;44830,1485 -bjVQeSpT;82109,79513 -QtCYxOmd;30730,56286 -vPWsRLjk;55573,67551 -nihhjDVg;87391,59133 -loNTAbJO;58795,77096 -tAiWHVqq;62187,66049 -xGIbBfJX;75878,31379 -gwWdcQKH;34307,27308 -VKXWglju;65787,57586 -ehqWKWsv;63719,48545 -VQVSkfPe;25810,28314 -sTNjGgoY;81150,70876 -SBtCtTSD;2072,85197 -zyhErpKl;20764,75113 -nAhJcRMY;26064,24379 -Xwwptgwo;62064,29651 -XfMaLLCb;74976,62762 -PjDzwaoL;84900,16534 -htmybfBU;69013,85785 -dOeubQfM;59275,22915 -JRcINtiX;20821,6255 -MsmvUcwx;55552,78680 -dFbyzwfZ;86448,58823 -MUocNxcz;37399,19312 -BxoKDvXG;15238,88126 -AUJuOEPu;28393,12446 -EgCClBTi;38298,89798 -gbQKyfem;48555,24149 -amZjyAWF;17222,72254 -CWdbBJAj;33399,20972 -jnNuTHUF;24544,54451 -MqrmaeRm;18239,82458 -weKnkpcD;67625,80165 -vCAughQj;75553,45593 -TWPhybuV;4250,12703 -XtBkaUpy;80390,12151 -jBRksrpO;75424,8762 -yRvPoJmr;44290,8501 -FNDFyTeT;12919,2916 -ktbXRehN;85088,10878 -JVRmbTEU;16443,9327 -YJutSpVj;50109,77216 -VtNYanGs;37611,35028 -QTMddyDR;64662,30753 -ehCUjUZF;49923,71116 -AYMnWczG;75851,26340 -ZgQVmfbm;25758,43968 -wxJjHKTt;73689,44320 -flbxmrqk;57977,9276 -CloqOKUu;54218,52787 -CMnUoCfx;44671,38199 -YxhtAfAv;1799,4565 -pevxopsS;15241,79332 -EEkyEdXO;31959,4992 -mQCmrosd;39405,82165 -QSIonkpO;35266,12794 -rJzkEmsE;64940,61822 -EyywzWVl;56565,78607 -mNIoDhuQ;43551,58911 -kTLUVqxU;15981,62105 -MJOUQLPT;11564,82849 -nTbJsoKg;8721,23731 -tGfccgTy;5461,83365 -DsnmoQxN;17676,22601 -HlFyGZBy;62508,18037 -FLmwqjWG;27217,5449 -SOVyYKJf;10765,52062 -VMEgMFXB;63765,53311 -YDXpqHYq;71062,66245 -HXpuIMbO;51240,31631 -CgaETaWz;32748,37447 -LzKeBILY;44186,14259 -DHgDJhIM;43865,70131 -NxtxhzLC;51763,82376 -miwQkwYk;85047,28131 -IuyJRxTB;79220,73485 -QmKQEnRr;61799,30826 -WdizshYR;30096,71349 -TPrIIXhB;41801,43660 -TYdtEvvb;2967,75434 -IJyyePMa;64156,88728 -RGnZDWtQ;77482,40507 -yumXuDdy;54710,63270 -iqoJOitd;49648,45925 -BeIMpGVu;49595,31683 -OsazjNae;24996,13508 -qENJiewi;46099,76267 -AghJAogJ;49775,39880 -oNvgppXp;87750,45326 -VrDBfPKo;1869,58564 -EleuqPta;39167,82098 -ddzwuThX;20137,6704 -ySoDCyOP;37541,75661 -teEsFPBI;62078,57469 -SKvVqNng;78476,74685 -uzXrioTx;34849,18046 -bUhzFtfe;14349,51446 -GzWAOIzg;4495,77410 -OpQSclIg;23164,62157 -sYnMOEvv;89500,81077 -INhBjuOl;75677,35995 -XMrTrJjo;16643,83915 -UzkNRLKz;32197,85986 -tYKJDhbS;86823,39587 -EzErGpEj;22227,59852 -LTBNCIIu;11061,65030 -YuUvkpcx;46951,5456 -jcozIwHj;27588,8543 -lUvmATba;65795,23505 -iIwYDcbj;56697,89188 -ShrzeONO;44491,41573 -NCGfkDzt;44438,70929 -nemPZsOM;80514,72817 -lKQszVPC;52430,59552 -ShLOdBvm;69563,49215 -aahGCeBM;76852,53040 -sWJcffCS;76043,73017 -FONzHREz;2935,5090 -CxhIWAgr;61137,11041 -YDJByNrE;13505,2467 -CmHqqIkz;28953,25830 -EznpXCOp;60681,14567 -vYFRCxna;17674,86928 -zufPmPzU;74658,42254 -iLrKkcID;22634,60034 -SJqEJQGu;56277,30766 -iUVkKXWu;79777,18858 -Dfhybxge;76281,71443 -RmKlQHsu;85203,21884 -VXKEkYtf;45301,32514 -pEcxpjaR;17343,39290 -hEtwEFPe;27090,19383 -twCzMiQs;44359,67889 -CYyinbNr;52587,35874 -sYxXkIBm;74543,47782 From bf04d992abead5fbef78967afb91f80b27bd3386 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 24 Nov 2023 07:44:20 +0000 Subject: [PATCH 05/32] fix: use default csv file on test --- src/executor/executor.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/executor/executor.rs b/src/executor/executor.rs index e73698a..75c2e88 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -137,8 +137,8 @@ mod test { let executor = spawner.spawn_executor().await; // Parse two csv files - let entries_1 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_1.csv").unwrap(); - let entries_2 = entry_parser::<_, 2, 14>("./src/data/entry_2_11_2.csv").unwrap(); + let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); From ca237598300ff42a6cc79617d76815c4340b18a4 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 24 Nov 2023 09:37:45 +0000 Subject: [PATCH 06/32] fix: test cases --- README.md | 14 +++++++++++--- src/executor/executor.rs | 8 ++++++-- src/orchestrator/orchestrator.rs | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5ddb970..6defa5f 100644 --- a/README.md +++ b/README.md @@ -120,16 +120,24 @@ In Summa Aggregation, we have implemented two types of spawners for the `Orchest While both spawners manage Docker containers, the key difference lies in their operational context. The `container spawner` handles individual containers directly, making it straightforward but less scalable. On the other hand, the `service spawner` interacts with Docker Swarm to manage groups of containers as services, offering more robust scalability and resilience, crucial for handling larger workloads or distributed systems. -## Test +## Testing -Before start to test, you have to build `mini-tree-generator` image as name of "summa-aggregation". +Before starting the tests, you need to build the `mini-tree-generator` image and name it "summa-aggregation". -You can build image with this command: +Build the image with the following command: ```bash $ docker build . -t summa-aggregation ``` +Ensure that the `summa-aggregation:latest` image exists in your local registry. + +Then, you can run the tests using this command: + +```bash +$ cargo test +``` + ## Mini Tree Generator - Build the Image diff --git a/src/executor/executor.rs b/src/executor/executor.rs index 75c2e88..a548dc5 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -112,7 +112,7 @@ mod test { async fn test_executor() -> Result<(), Box> { let spawner = ContainerSpawner::new( "summa-aggregation".to_string(), - "mini_tree_generator".to_string(), + "excutor_test".to_string(), ); let executor = spawner.spawn_executor().await; @@ -120,6 +120,8 @@ mod test { let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; + spawner.terminate_executors().await; + assert_eq!( format!("{:?}", merkle_tree.root.hash), "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" @@ -131,7 +133,7 @@ mod test { async fn test_executor_block() -> Result<(), Box> { let spawner = ContainerSpawner::new( "summa-aggregation".to_string(), - "mini_tree_generator".to_string(), + "executor_block_test".to_string(), ); let executor = spawner.spawn_executor().await; @@ -145,6 +147,8 @@ mod test { let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; + spawner.terminate_executors().await; + assert_eq!(all_tree.len(), 2); Ok(()) diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 38777ee..66e36ca 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -166,13 +166,13 @@ mod test { use std::sync::atomic::{AtomicUsize, Ordering}; use super::Orchestrator; - use crate::executor::{Executor, ExecutorSpawner}; + use crate::executor::{Executor, ContainerSpawner}; #[tokio::test] async fn test_orchestrator() -> Result<(), Box> { let spawner = ContainerSpawner::new( "summa-aggregation".to_string(), - "mini_tree_generator".to_string(), + "orchestrator_test".to_string(), ); let orchestrator = Orchestrator::<2, 14>::new( From 4d1fee79aa4f9410fb3e4ec55c2401f9c3820135 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Sat, 25 Nov 2023 17:15:18 +0000 Subject: [PATCH 07/32] feat: error handling with cancellation --- Cargo.lock | 1 + Cargo.toml | 1 + README.md | 4 +- src/executor/container_spawner.rs | 4 +- src/executor/executor.rs | 27 ++-- src/orchestrator/entry_csv_parser.rs | 14 +- src/orchestrator/orchestrator.rs | 183 +++++++++++++++++++-------- 7 files changed, 162 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2f07ea..0e148f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4067,6 +4067,7 @@ dependencies = [ "serde_json", "summa-backend", "tokio", + "tokio-util", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 0ec124f..cfb254d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ csv = "1.3.0" rand = "0.8.5" futures = "0.3.29" bollard = "0.15.0" +tokio-util = "0.7.10" [[bin]] name = "mini-tree-server" diff --git a/README.md b/README.md index 6defa5f..956d79a 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ Before starting the tests, you need to build the `mini-tree-generator` image and Build the image with the following command: ```bash -$ docker build . -t summa-aggregation +docker build . -t summa-aggregation ``` Ensure that the `summa-aggregation:latest` image exists in your local registry. @@ -135,7 +135,7 @@ Ensure that the `summa-aggregation:latest` image exists in your local registry. Then, you can run the tests using this command: ```bash -$ cargo test +cargo test ``` ## Mini Tree Generator diff --git a/src/executor/container_spawner.rs b/src/executor/container_spawner.rs index 4a02554..b03726b 100644 --- a/src/executor/container_spawner.rs +++ b/src/executor/container_spawner.rs @@ -1,7 +1,5 @@ use bollard::{ - container::{ - Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions, - }, + container::{Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions}, service::ContainerInspectResponse, Docker, }; diff --git a/src/executor/executor.rs b/src/executor/executor.rs index a548dc5..f89e6de 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -51,16 +51,20 @@ impl Executor { pub async fn generate_tree( &self, json_entries: Vec, - ) -> Result, Box> { + ) -> Result, Box> { // Parse the response body into a MerkleSumTree let json_tree = self .client .post(&self.url) .json(&json_entries) .send() - .await? + .await + .map_err(|err| Box::new(err) as Box) + .unwrap() .json::() - .await?; + .await + .map_err(|err| Box::new(err) as Box) + .unwrap(); let entries = json_entries .iter() @@ -100,25 +104,22 @@ impl Executor { #[cfg(test)] mod test { use futures::future; - use std::{error::Error, sync::atomic::AtomicUsize}; + use std::error::Error; - use bollard::Docker; - use super::Executor; - use crate::orchestrator::entry_parser; - use crate::executor::ContainerSpawner; use crate::executor::spawner::ExecutorSpawner; + use crate::executor::ContainerSpawner; + use crate::orchestrator::entry_parser; + use bollard::Docker; #[tokio::test] async fn test_executor() -> Result<(), Box> { - let spawner = ContainerSpawner::new( - "summa-aggregation".to_string(), - "excutor_test".to_string(), - ); + let spawner = + ContainerSpawner::new("summa-aggregation".to_string(), "excutor_test".to_string()); let executor = spawner.spawn_executor().await; let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let merkle_tree = executor.generate_tree::<2, 14>(entries).await?; + let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); spawner.terminate_executors().await; diff --git a/src/orchestrator/entry_csv_parser.rs b/src/orchestrator/entry_csv_parser.rs index d28a4c8..ee99764 100644 --- a/src/orchestrator/entry_csv_parser.rs +++ b/src/orchestrator/entry_csv_parser.rs @@ -13,15 +13,23 @@ struct CSVEntry { /// Parses a CSV file stored at path into a vector of Entries pub fn entry_parser, const N_ASSETS: usize, const N_BYTES: usize>( path: P, -) -> Result, Box> { +) -> Result, Box> { let mut json_entries = Vec::::new(); - let file = File::open(path)?; + // let file = File::open(path)?; + let file = match File::open(path) { + Ok(f) => f, + Err(e) => return Err(Box::new(e) as Box), + }; + let mut rdr = csv::ReaderBuilder::new() .delimiter(b';') // The fields are separated by a semicolon .from_reader(file); for result in rdr.deserialize() { - let record: CSVEntry = result?; + let record: CSVEntry = match result { + Ok(r) => r, + Err(e) => return Err(Box::new(e) as Box), + }; let entry = JsonEntry { username: record.username, diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 66e36ca..246480b 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -1,5 +1,7 @@ -use std::cmp::min; +use futures::future::join_all; +use std::{cmp::min, error::Error}; use tokio::sync::mpsc; +use tokio_util::sync::CancellationToken; use super::entry_csv_parser::entry_parser; use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; @@ -42,7 +44,7 @@ impl Orchestrator Orchestrator Result, Box> + executor_count: usize, + ) -> Result, Box> where [usize; N_ASSETS + 1]: Sized, [usize; 2 * (1 + N_ASSETS)]: Sized, { - let entries_per_executor = self.entry_csvs.len() / number_executor; + let entries_per_executor = self.entry_csvs.len() / executor_count; - // Declare channels for internal communication - // One of the channels receives parsed data from entry parser to distribute tasks to executor - // while the other channel is used the executors that send a result of the tasks. let mut executors = Vec::new(); let mut result_collectors = Vec::new(); - let actual_number_of_workers = min(number_executor, self.entry_csvs.len()); - for i in 0..actual_number_of_workers { - let (entries_tx, mut entries_rx) = mpsc::channel(32); - let (tree_tx, tree_rx) = mpsc::channel(32); - let executor = self.executor_spawner.spawn_executor().await; - result_collectors.push((i, tree_rx)); + let channel_size = std::env::var("CHANNEL_SIZE") + .unwrap_or_default() + .parse::() + .unwrap_or(32); - // 2. Executor + let cancel_token = CancellationToken::new(); + let actual_number_of_workers = min(executor_count, self.entry_csvs.len()); + for i in 0..actual_number_of_workers { + // Declare channels for communication // - // Spawn executors that process entries with Worker. + // There are three channels are used inthis method. // - // - Receives 'entries' from [entries_rx] channel. - // - Processes 'entries' to build a tree (done by worker). - // - Sends the resulting 'tree' back via [tree_tx] channel. + // - A `entries_tx` receives parsed data from the entry parser to distribute tasks to executors. + // - A `tree_tx` channel is used by the executors to send the results of the tasks. + // - A `stop` channel is used to send a stop signal to all executors in case of an error, + // allowing for a coordinated shutdown or cancellation of tasks. // + let (entries_tx, mut entries_rx) = mpsc::channel(channel_size); + let (tree_tx, tree_rx) = mpsc::channel(channel_size); + + let executor = self.executor_spawner.spawn_executor().await; + result_collectors.push((i, tree_rx)); + + let cloned_cancel_token = cancel_token.clone(); executors.push(tokio::spawn(async move { - while let Some(task) = entries_rx.recv().await { - let processed_task = executor - .generate_tree::(task) - .await - .unwrap(); - if tree_tx.send(processed_task).await.is_err() { - break; - } - } + loop { + tokio::select! { + entries_data = entries_rx.recv() => { + // When the distribution thread is finished, the channel will be closed. + let entries = match entries_data { + Some(entries) => entries, + None => break, + }; + + let processed_task = match executor.generate_tree::(entries).await { + Ok(entries) => entries, + Err(e) => { + eprintln!("Executor_{:?}: error while processing entries {:?}", i, e); + cloned_cancel_token.cancel(); + break; + } + }; + if tree_tx.send(processed_task).await.is_err() { + eprintln!("Executor_{:?}: Error while sending tree result", i); + cloned_cancel_token.cancelled().await; + break; + } + }, + _ = cloned_cancel_token.cancelled() => { + eprintln!("Executor_{:?}: cancel signal received, terminating.", i); + break; + }, + } + } })); // 1. Distributing Tasks @@ -103,32 +131,53 @@ impl Orchestrator(file_path).unwrap(); - if entries_tx.send(entries).await.is_err() { - break; + let entries = match entry_parser::<_, N_ASSETS, N_BYTES>(file_path) { + Ok(entries) => entries, + Err(e) => { + eprintln!("Executor_{:?}: Error while processing file {:?}: {:?}", i, file_path, e); + // let _ = stop_tx_clone.send(()).unwrap(); + cloned_cancel_token.cancel(); + break; + } + }; + + tokio::select! { + _ = cloned_cancel_token.cancelled() => { + eprintln!("Executor_{:?}: cancel signal received, terminating distributor.", i); + break; + }, + send_entries = entries_tx.send(entries) => { + if let Err(e) = send_entries { + eprintln!("Executor_{:?}: Error while sending entries: {:?}", i, e); + break; + } + } } } + drop(entries_tx); }); } - // 3. Collectoing Results + // 3. Collecting Results // // Collect `tree` results from executors // // - Receives processed 'tree' from [tree_rx] channel. - // - Collects all 'tree' results into 'worker_results'. - // - Aggregates 'worker_results' into 'aggregated_tree_results'. + // - Collects all 'tree' results into 'all_tree_results'. + // - Aggregates 'all_tree_results' into 'ordered_tree_results'. // let mut all_tree_responses = Vec::new(); - for (index, mut result_rx) in result_collectors { + for (index, mut tree_rx) in result_collectors { let executor_results = tokio::spawn(async move { let mut trees = Vec::new(); - while let Some(result) = result_rx.recv().await { + while let Some(result) = tree_rx.recv().await { trees.push(result); } (index, trees) @@ -136,25 +185,22 @@ impl Orchestrator Orchestrator Result<(), Box> { + async fn test_normal_operation() { let spawner = ContainerSpawner::new( "summa-aggregation".to_string(), "orchestrator_test".to_string(), @@ -182,10 +228,45 @@ mod test { "./src/orchestrator/csv/entry_16.csv".to_string(), ], ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await?; + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + } + + #[tokio::test] + async fn test_single_worker() { + let spawner = ContainerSpawner::new( + "summa-aggregation".to_string(), + "orchestrator_single_worker_test".to_string(), + ); + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - Ok(()) + } + + #[tokio::test] + async fn test_none_exist_csv() { + let spawner = ContainerSpawner::new( + "summa-aggregation".to_string(), + "orchestrator_none_exist_test".to_string(), + ); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/no_exist.csv".to_string(), + ], + ); + let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(&0, one_mini_tree_result.depth()); } } From 3e39b105ff25c1ea2d7e99a187c6c59eff62a6c3 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Mon, 27 Nov 2023 11:12:17 +0000 Subject: [PATCH 08/32] feat: created mock spawner and added more test cases --- bin/mini_tree_server.rs | 67 +----------------- src/aggregation_merkle_sum_tree.rs | 4 ++ src/executor/executor.rs | 12 ++-- src/executor/mock_spawner.rs | 108 +++++++++++++++++++++++++++++ src/executor/mod.rs | 2 + src/lib.rs | 1 + src/mini_tree_generator.rs | 71 +++++++++++++++++++ src/orchestrator/orchestrator.rs | 42 ++++++----- 8 files changed, 218 insertions(+), 89 deletions(-) create mode 100644 src/executor/mock_spawner.rs create mode 100644 src/mini_tree_generator.rs diff --git a/bin/mini_tree_server.rs b/bin/mini_tree_server.rs index b818857..ee67b05 100644 --- a/bin/mini_tree_server.rs +++ b/bin/mini_tree_server.rs @@ -1,15 +1,7 @@ -use axum::{extract::Json, http::StatusCode, response::IntoResponse, routing::post, Router}; -use const_env::from_env; -use num_bigint::BigUint; +use axum::{routing::post, Router}; use std::net::SocketAddr; -use summa_aggregation::{JsonEntry, JsonMerkleSumTree, JsonNode}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; - -#[from_env] -const N_ASSETS: usize = 2; -#[from_env] -const N_BYTES: usize = 14; +use summa_aggregation::mini_tree_generator::create_mst; #[tokio::main] async fn main() { @@ -25,58 +17,3 @@ async fn main() { .await .unwrap(); } - -fn convert_node_to_json(node: &Node) -> JsonNode { - JsonNode { - hash: format!("{:?}", node.hash), - balances: node.balances.iter().map(|b| format!("{:?}", b)).collect(), - } -} - -async fn create_mst( - Json(json_entries): Json>, -) -> Result)> { - // Convert `JsonEntry` -> `Entry` - let entries = json_entries - .iter() - .map(|entry| { - let mut balances: [BigUint; N_ASSETS] = std::array::from_fn(|_| BigUint::from(0u32)); - entry.balances.iter().enumerate().for_each(|(i, balance)| { - balances[i] = balance.parse::().unwrap(); - }); - Entry::new(entry.username.clone(), balances).unwrap() - }) - .collect::>>(); - - let entries_length = entries.len(); - let starting_time = std::time::Instant::now(); - // Create `MerkleSumTree` from `parsed_entries` - let tree = MerkleSumTree::::from_entries(entries, false).unwrap(); - println!( - "Time to create tree({} entries): {}ms", - entries_length, - starting_time.elapsed().as_millis() - ); - - // Convert `MerkleSumTree` to `JsonMerkleSumTree` - let json_tree = JsonMerkleSumTree { - root: convert_node_to_json(&tree.root()), - nodes: tree - .nodes() - .iter() - .map(|layer| layer.iter().map(convert_node_to_json).collect()) - .collect(), - depth: tree.depth().clone(), - entries: tree - .entries() - .iter() - .map(|entry| JsonEntry { - balances: entry.balances().iter().map(|b| b.to_string()).collect(), - username: entry.username().to_string(), - }) - .collect(), - is_sorted: false, // Always false because sorted entries inside minitree is meaningless - }; - - Ok((StatusCode::OK, Json(json_tree))) -} diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 8a37dc8..db6d18a 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -103,6 +103,10 @@ impl AggregationMerkleSumTree, ) -> Result, Box> { - // Parse the response body into a MerkleSumTree - let json_tree = self + let response = self .client .post(&self.url) .json(&json_entries) .send() .await - .map_err(|err| Box::new(err) as Box) - .unwrap() + .map_err(|err| Box::new(err) as Box)?; + + let json_tree = response .json::() .await - .map_err(|err| Box::new(err) as Box) - .unwrap(); + .map_err(|err| Box::new(err) as Box)?; let entries = json_entries .iter() @@ -109,7 +108,6 @@ mod test { use crate::executor::spawner::ExecutorSpawner; use crate::executor::ContainerSpawner; use crate::orchestrator::entry_parser; - use bollard::Docker; #[tokio::test] async fn test_executor() -> Result<(), Box> { diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs new file mode 100644 index 0000000..c65e91c --- /dev/null +++ b/src/executor/mock_spawner.rs @@ -0,0 +1,108 @@ +use axum::{routing::post, Router}; +use std::{ + future::Future, + net::SocketAddr, + pin::Pin, + str::FromStr, + sync::atomic::{AtomicUsize, Ordering}, +}; +use tokio; +use tokio::sync::oneshot; + +use crate::executor::{Executor, ExecutorSpawner}; +use crate::mini_tree_generator::create_mst; + +pub struct MockSpawner { + urls: Option>, + worker_counter: AtomicUsize, +} + +impl MockSpawner { + pub fn new(urls: Option>) -> Self { + MockSpawner { + urls, + worker_counter: AtomicUsize::new(0), + } + } +} + +impl ExecutorSpawner for MockSpawner { + fn spawn_executor(&self) -> Pin + Send>> { + let (tx, rx) = oneshot::channel(); + + let id = self.worker_counter.fetch_add(1, Ordering::SeqCst); + + // If urls is not None, use the urls to spawn executors + if self.urls.is_some() && self.urls.as_ref().unwrap().len() > id { + let url = self.urls.as_ref().unwrap()[id].clone(); + let _ = tx.send(SocketAddr::from_str(&url).unwrap()); + + return Box::pin(async move { + let url = rx.await.expect("Failed to receive worker URL"); + let worker_url = format!("http://{}", url); + Executor::new(worker_url, None) + }); + } + + // if there is no url or already used all urls, spawn a new executor + tokio::spawn(async move { + let app = Router::new().route("/", post(create_mst)); + let addr = SocketAddr::from(([0, 0, 0, 0], 4000 + id as u16)); + + // send worker url to rx + let _ = tx.send(addr.clone()); + + // Start the server + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); + }); + + // Return a Future that resolves to Executor + Box::pin(async move { + // load currnet worker counter + let url = rx.await.expect("Failed to receive worker URL"); + let worker_url = format!("http://{}", url); + Executor::new(worker_url, None) + }) + } + + fn terminate_executors(&self) -> Pin + Send>> { + Box::pin(async move { + // Nothing to do if no executors are running + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn test_new_urls() { + let spawner = MockSpawner::new(None); + + // Spawn 2 executors + let executor_1 = spawner.spawn_executor().await; + let executor_2 = spawner.spawn_executor().await; + + // Sleep 2 seconds for the container to be ready + tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; + assert!(!executor_1.get_url().is_empty()); + assert!(!executor_2.get_url().is_empty()); + } + + #[tokio::test] + async fn test_with_given_url() { + let urls = vec!["127.0.0.1:7878".to_string()]; + let spawner = MockSpawner::new(Some(urls)); + + // Spawn 2 executors + let executor_1 = spawner.spawn_executor().await; + let executor_2 = spawner.spawn_executor().await; + + assert_eq!(executor_1.get_url(), "http://127.0.0.1:7878"); + assert_eq!(executor_2.get_url(), "http://0.0.0.0:4001"); + } +} diff --git a/src/executor/mod.rs b/src/executor/mod.rs index f8bd01a..9e23c5b 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -1,9 +1,11 @@ mod container_spawner; mod executor; +mod mock_spawner; mod service_spawner; mod spawner; pub use container_spawner::ContainerSpawner; pub use executor::Executor; +pub use mock_spawner::MockSpawner; pub use service_spawner::ServiceSpawner; pub use spawner::ExecutorSpawner; diff --git a/src/lib.rs b/src/lib.rs index 7408617..950d5b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ #![feature(generic_const_exprs)] pub mod aggregation_merkle_sum_tree; pub mod executor; +pub mod mini_tree_generator; pub mod orchestrator; use serde::{Deserialize, Serialize}; diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs new file mode 100644 index 0000000..e8d751b --- /dev/null +++ b/src/mini_tree_generator.rs @@ -0,0 +1,71 @@ +use axum::{extract::Json, http::StatusCode, response::IntoResponse}; +use const_env::from_env; +use num_bigint::BigUint; + +use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; + +#[from_env] +const N_ASSETS: usize = 2; +#[from_env] +const N_BYTES: usize = 14; + +fn convert_node_to_json(node: &Node) -> JsonNode { + JsonNode { + hash: format!("{:?}", node.hash), + balances: node.balances.iter().map(|b| format!("{:?}", b)).collect(), + } +} + +pub async fn create_mst( + Json(json_entries): Json>, +) -> Result)> { + // Convert `JsonEntry` -> `Entry` + let entries = json_entries + .iter() + .map(|entry| { + let mut balances: [BigUint; N_ASSETS] = std::array::from_fn(|_| BigUint::from(0u32)); + entry.balances.iter().enumerate().for_each(|(i, balance)| { + balances[i] = balance.parse::().unwrap(); + }); + Entry::new(entry.username.clone(), balances).unwrap() + }) + .collect::>>(); + + #[cfg(not(test))] + let entries_length = entries.len(); + #[cfg(not(test))] + let starting_time = std::time::Instant::now(); + + // Create `MerkleSumTree` from `parsed_entries` + let tree = MerkleSumTree::::from_entries(entries, false).unwrap(); + + #[cfg(not(test))] + println!( + "Time to create tree({} entries): {}ms", + entries_length, + starting_time.elapsed().as_millis() + ); + + // Convert `MerkleSumTree` to `JsonMerkleSumTree` + let json_tree = JsonMerkleSumTree { + root: convert_node_to_json(&tree.root()), + nodes: tree + .nodes() + .iter() + .map(|layer| layer.iter().map(convert_node_to_json).collect()) + .collect(), + depth: tree.depth().clone(), + entries: tree + .entries() + .iter() + .map(|entry| JsonEntry { + balances: entry.balances().iter().map(|b| b.to_string()).collect(), + username: entry.username().to_string(), + }) + .collect(), + is_sorted: false, // Always false because sorted entries inside minitree is meaningless + }; + + Ok((StatusCode::OK, Json(json_tree))) +} diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 246480b..251beeb 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -100,7 +100,6 @@ impl Orchestrator entries, None => break, }; - let processed_task = match executor.generate_tree::(entries).await { Ok(entries) => entries, Err(e) => { @@ -134,15 +133,16 @@ impl Orchestrator(file_path) { Ok(entries) => entries, Err(e) => { - eprintln!("Executor_{:?}: Error while processing file {:?}: {:?}", i, file_path, e); - // let _ = stop_tx_clone.send(()).unwrap(); + eprintln!( + "Executor_{:?}: Error while processing file {:?}: {:?}", + i, file_path, e + ); cloned_cancel_token.cancel(); break; } @@ -208,14 +208,12 @@ impl Orchestrator::new( Box::new(spawner), @@ -254,10 +249,7 @@ mod test { #[tokio::test] async fn test_none_exist_csv() { - let spawner = ContainerSpawner::new( - "summa-aggregation".to_string(), - "orchestrator_none_exist_test".to_string(), - ); + let spawner = MockSpawner::new(None); let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), @@ -269,4 +261,20 @@ mod test { let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); assert_eq!(&0, one_mini_tree_result.depth()); } + + #[tokio::test] + async fn test_none_exist_worker() { + let non_exist_worker_url = vec!["127.0.0.1:7878".to_string()]; + let spawner = MockSpawner::new(Some(non_exist_worker_url)); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); + assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); + } } From 089c744ced3bc2f3a8e16827c026abb73574bf0f Mon Sep 17 00:00:00 2001 From: sifnoc Date: Mon, 27 Nov 2023 11:29:55 +0000 Subject: [PATCH 09/32] chore: cancel when occur error --- src/orchestrator/orchestrator.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 251beeb..0c55f5d 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -110,7 +110,7 @@ impl Orchestrator Orchestrator { if let Err(e) = send_entries { eprintln!("Executor_{:?}: Error while sending entries: {:?}", i, e); + cloned_cancel_token.cancel(); break; } } From b1ffced8f72099b9192dd4f2f9e26e705299b727 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Tue, 28 Nov 2023 11:24:50 +0000 Subject: [PATCH 10/32] chore: Update README --- README.md | 177 +++++++++++++++++++++++++----------------------------- 1 file changed, 81 insertions(+), 96 deletions(-) diff --git a/README.md b/README.md index 956d79a..06a3556 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,49 @@ # Summa Aggregation -Summa Aggregation is focused on optimizing the generation of Merkle sum trees, a task identified as the primary time-consuming process in Summa benchmarks. Our goal is to significantly reduce the time required to generate these trees by leveraging parallelization across multiple machines. +Summa Aggregation is focused on optimizing the generation of Merkle sum tree, a task identified as the primary time-consuming process in Summa benchmarks. Our goal is to significantly reduce the time required to generate these tree by leveraging parallelization across multiple machines. -The system features `AggregationMerkleSumTree`, a specialized component designed for the efficient construction of complete trees from smaller, aggregated structures known as `mini-trees`. This approach not only speeds up the tree-building process but also enhances scalability and performance in large-scale data environments. +The system features `AggregationMerkleSumTree`, a specialized component designed for the efficient construction of complete tree from smaller, aggregated structures known as `mini-tree`. This approach not only speeds up the tree-building process but also enhances scalability and performance in large-scale data environments. ## Orchestrator -The Orchestrator component will manage the orchestration of multiple `Executors`. Its primary role will be to dynamically allocate tasks and manage the data workflow among the `Executors`. +The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of `Executors` and `Workers`, improving of tasks in the generation of Merkle sum tree. +Key functions of the `Orchestrator` include: -## Executor and ExecutorSpawner +- **Dynamic Executor Spawning**: The Orchestrator dynamically spawns `Executors` in numbers set by the user. Each `Executor` is then connected to a dedicated `Worker` for efficient task execution. -The `Executor` plays a crucial role in the data processing pipeline. It is responsible for receiving parsed data entries and processing them through the `mini-tree-generator`. -Each `Executor` operates alongside a `mini-tree-generator`, accessed via a URL spawned in a container by the `ExecutorSpawner`. +- **Task Management and Distribution**: It oversees the overall task flow, loading tasks and distributing them to `Executors`. -The `ExecutorSpawner` is a trait that initializes and manages these `Executors`. It handles the creation of `Executor` instances and manages the worker, `mini-tree-generator`, which is linked with the `Executor`. +- **Error Management and Pipeline Control**: The Orchestrator handles basic pipeline control and responds to errors by initiating the cancellation of all tasks. -### Executor Workflow +## Executor and Worker -- `Executors` receive data entries, parsed from CSV files. -- They send these entries to the `mini-tree-generator` service. -- The `mini-tree-generator` processes these entries and returns the results as tree structures. -- `Executors` then collect and forward these results for further aggregation or processing. +The `Executor` acts as a crucial intermediary between the `Orchestrator` and `Workers`, facilitating the data processing workflow. Spawned by the `Orchestrator`, each `Executor` operates in a one-to-one relationship with a `Worker`. The `Worker` is a server that can generate a merkle sum tree, internally called a `mini-tree`, by receiving entries data. The primary role of a `Worker` is to build these `mini-trees`, which are segments of the `AggregationMerkleSumTree`. + +Key aspects of the `Executor's` role include: + +- **Spawning and Connection**: `Executors` are dynamically spawned by the `Orchestrator` as part of the system's scalability. Each `Executor` is designed to connect with a `Worker` for task execution. + +- **Data Handling and Task Distribution**: A primary function of the `Executor` is to receive data entries, often parsed and prepared by the Orchestrator. Upon receiving these entries, the Executor is responsible for forwarding them to its connected `Worker`. + +- **Communication Bridge**: The `Executor` serves as a communication bridge within the data pipeline. It relays processed data, `mini-trees`, from Workers back to the Orchestrator. + +The `Worker` called in here, mostly point out the container that runs `mini-tree-generator` server. + +## ExecutorSpawner + +The `ExecutorSpawner` is responsible for initializing and terminating `Executors`. It manages the creation of `Executor` instances and `Workers`, with the latter serving as the `mini-tree-generator` accessible by the `Executor`. + +In the Summa-Aggregation, there are three types of `ExecutorSpawner`: + +- **MockSpawner**: Primarily used for testing, this spawner initializes `Executors` suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a server locally. + +- **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize `Executors` and `Workers` in local Docker environments. + +- **CloudSpawner**: Ideal for scenarios with access to cloud resources, this spawner functions same like to the `LocalSpawner`, but with `Workers` running in the cloud. + +While both `LocalSpawner` and `CloudSpawner` manage Docker containers, they differ in operational context. `LocalSpawner` handles individual containers directly, providing simplicity but limited scalability. In contrast, `CloudSpawner` employs Docker Swarm to manage containers as services, thereby offering enhanced scalability and resilience, crucial for larger workloads. + +The `ExecutorSpawner` is a trait with minimal requirements, specifically the Rust trait methods `spawn_executor` and `terminate_executor`. You can create your own spawner and use it with the Orchestrator. ## Orchestrating on Swarm @@ -69,11 +92,11 @@ You can initialize your Docker environment in Swarm mode, which is essential for dz2z2v7o06h6gazmjlspyr5c8 worker_2 Ready Active 20.10.12 ```` - You are ready to scaling! + You are ready to spawn more workers! -### Scaling Worker +### Spawning More Workers -To scale the service, follow these steps: +In Docker Swarm mode, containers are managed as services rather than by individual names. To spawn more workers, follow these steps: 1. Deploy the Stack: @@ -108,19 +131,7 @@ Scaling allows you to adjust the number of service instances to meet your proces This section provides clear instructions on how to scale the `mini-tree-generator` service using Docker Compose and CLI commands. -### ServiceSpawner and Orchestrator - -In Summa Aggregation, we have implemented two types of spawners for the `Orchestrator`: the `container spawner` and the `service spawner`. These spawners are instrumental in managing the deployment and operation of our processing units, whether they are individual containers or services within a Docker Swarm environment. - -- **Container Spawner**: - The `container spawner` operates in local Docker environments. It is primarily used for development and testing purposes, This spawner is ideal for situations where simplicity and ease of setup are key, such as during initial development phases or for running unit tests. - -- **Service Spawner**: - The `service spawner` is designed to work with Docker Swarm environments. It is suitable for production deployments, where the system needs to scale across multiple machines or nodes. This spawner leverages Docker Swarm's orchestration capabilities to manage services, ensuring that they are reliably deployed, scaled, and maintained across the swarm. - -While both spawners manage Docker containers, the key difference lies in their operational context. The `container spawner` handles individual containers directly, making it straightforward but less scalable. On the other hand, the `service spawner` interacts with Docker Swarm to manage groups of containers as services, offering more robust scalability and resilience, crucial for handling larger workloads or distributed systems. - -## Testing +## Test Before starting the tests, you need to build the `mini-tree-generator` image and name it "summa-aggregation". @@ -138,93 +149,67 @@ Then, you can run the tests using this command: cargo test ``` -## Mini Tree Generator - -- Build the Image - - To build the image, run the following command: - - ```bash - docker build . -t summa-aggregation/mini-tree - ``` +### Test Mini Tree Generator -- Run the `Mini Tree Generator Container` +You can manually test the `Mini Tree Generator` with running container. - Use the command below to start the Mini Tree Generator container: +First, Use the command below to start the Mini Tree Generator container: ```bash docker run -d -p 4000:4000 --name mini-tree-generator summa-aggretaion/mini-tree ``` -- Test with a Script - - To test, execute the provided script that send two `Entry` data to server: +Second, to send two entries to the `Mini Tree Generator`, use this script: ```bash bash ./scripts/test_sending_entry.sh ``` - Upon successful execution, you will receive a response similar to the following -
- Response Json! - - ```Json - { - "root": { - "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", - "balances": [ - "0x000000000000000000000000000000000000000000000000000000000001375f", - "0x000000000000000000000000000000000000000000000000000000000000e9a6" - ] - }, - "nodes": [ - [ - { - "hash": "0x0e113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", - "balances": [ - "0x0000000000000000000000000000000000000000000000000000000000002e70", - "0x000000000000000000000000000000000000000000000000000000000000a0cb" - ] - }, - { - "hash": "0x17ef9d8ee0e2c8470814651413b71009a607a020214f749687384a7b7a7eb67a", - "balances": [ - "0x00000000000000000000000000000000000000000000000000000000000108ef", - "0x00000000000000000000000000000000000000000000000000000000000048db" - ] - } - ], - [ - { - "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", - "balances": [ - "0x000000000000000000000000000000000000000000000000000000000001375f", - "0x000000000000000000000000000000000000000000000000000000000000e9a6" - ] - } - ] - ], - "depth": 1, - "entries": [ +Upon successful execution, you will receive a response similar to the following +
+Click View Response + +```Json +{ + "root": { + "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", + "balances": [ + "0x000000000000000000000000000000000000000000000000000000000001375f", + "0x000000000000000000000000000000000000000000000000000000000000e9a6" + ] + }, + "nodes": [ + [ { + "hash": "0x0e113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", "balances": [ - "11888", - "41163" - ], - "username": "dxGaEAii" + "0x0000000000000000000000000000000000000000000000000000000000002e70", + "0x000000000000000000000000000000000000000000000000000000000000a0cb" + ] }, { + "hash": "0x17ef9d8ee0e2c8470814651413b71009a607a020214f749687384a7b7a7eb67a", "balances": [ - "67823", - "18651" - ], - "username": "MBlfbBGI" + "0x00000000000000000000000000000000000000000000000000000000000108ef", + "0x00000000000000000000000000000000000000000000000000000000000048db" + ] } ], - "is_sorted": false - } - ``` + [ + { + "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", + "balances": [ + "0x000000000000000000000000000000000000000000000000000000000001375f", + "0x000000000000000000000000000000000000000000000000000000000000e9a6" + ] + } + ] + ], + "depth": 1, + "is_sorted": false +} +``` - this JSON output is prettified for clarity +this JSON output is prettified for clarity
From f13aa9f6bedbdd772ad30e39fdbf2383e530b2b4 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Tue, 28 Nov 2023 11:54:57 +0000 Subject: [PATCH 11/32] chore: renamed spanwers and small updates on README --- README.md | 3 +++ .../{service_spawner.rs => cloud_spawner.rs} | 12 ++++++------ src/executor/executor.rs | 6 +++--- .../{container_spawner.rs => local_spawner.rs} | 13 ++++++------- src/executor/mod.rs | 8 ++++---- src/orchestrator/orchestrator.rs | 4 ++-- 6 files changed, 24 insertions(+), 22 deletions(-) rename src/executor/{service_spawner.rs => cloud_spawner.rs} (88%) rename src/executor/{container_spawner.rs => local_spawner.rs} (94%) diff --git a/README.md b/README.md index 06a3556..e7498a7 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,9 @@ Then, you can run the tests using this command: cargo test ``` +Note that the Worker uses port 4000 as the default for its server. +Please ensure that this port is not already in use when you meet error. + ### Test Mini Tree Generator You can manually test the `Mini Tree Generator` with running container. diff --git a/src/executor/service_spawner.rs b/src/executor/cloud_spawner.rs similarity index 88% rename from src/executor/service_spawner.rs rename to src/executor/cloud_spawner.rs index 442720a..6f2f818 100644 --- a/src/executor/service_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -7,17 +7,17 @@ use std::{ use crate::executor::{Executor, ExecutorSpawner}; -// TODO: the ServiceSpawner can control services on swarm networks using docker API. -pub struct ServiceSpawner { +// TODO: the CouldSpawner can control services on swarm networks using docker API. +pub struct CouldSpawner { docker: Docker, request_counter: AtomicUsize, starting_port: u16, service_name: String, } -impl ServiceSpawner { +impl CouldSpawner { pub fn new(service_name: String, starting_port: u16) -> Self { - ServiceSpawner { + CouldSpawner { docker: Docker::connect_with_local_defaults().unwrap(), request_counter: AtomicUsize::new(0), starting_port, @@ -26,7 +26,7 @@ impl ServiceSpawner { } } -impl ExecutorSpawner for ServiceSpawner { +impl ExecutorSpawner for CouldSpawner { fn spawn_executor(&self) -> Pin + Send>> { // Return a Future that resolves to Executor let worker_port = @@ -52,7 +52,7 @@ mod tests { #[tokio::test] async fn test_service_spawner() { - let spawner = ServiceSpawner { + let spawner = CouldSpawner { docker: Docker::connect_with_local_defaults().unwrap(), request_counter: AtomicUsize::new(0), starting_port: 4000, diff --git a/src/executor/executor.rs b/src/executor/executor.rs index 50f7cbf..fff1cc0 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -106,13 +106,13 @@ mod test { use std::error::Error; use crate::executor::spawner::ExecutorSpawner; - use crate::executor::ContainerSpawner; + use crate::executor::LocalSpawner; use crate::orchestrator::entry_parser; #[tokio::test] async fn test_executor() -> Result<(), Box> { let spawner = - ContainerSpawner::new("summa-aggregation".to_string(), "excutor_test".to_string()); + LocalSpawner::new("summa-aggregation".to_string(), "excutor_test".to_string()); let executor = spawner.spawn_executor().await; @@ -130,7 +130,7 @@ mod test { #[tokio::test] async fn test_executor_block() -> Result<(), Box> { - let spawner = ContainerSpawner::new( + let spawner = LocalSpawner::new( "summa-aggregation".to_string(), "executor_block_test".to_string(), ); diff --git a/src/executor/container_spawner.rs b/src/executor/local_spawner.rs similarity index 94% rename from src/executor/container_spawner.rs rename to src/executor/local_spawner.rs index b03726b..a47a56c 100644 --- a/src/executor/container_spawner.rs +++ b/src/executor/local_spawner.rs @@ -15,16 +15,16 @@ use tokio::sync::oneshot; use crate::executor::{Executor, ExecutorSpawner}; -pub struct ContainerSpawner { +pub struct LocalSpawner { docker: Docker, worker_counter: AtomicUsize, image_name: String, container_name: String, } -impl ContainerSpawner { +impl LocalSpawner { pub fn new(image_name: String, container_name: String) -> Self { - ContainerSpawner { + LocalSpawner { docker: Docker::connect_with_local_defaults().unwrap(), worker_counter: AtomicUsize::new(0), image_name, @@ -70,7 +70,7 @@ impl ContainerSpawner { } } -impl ExecutorSpawner for ContainerSpawner { +impl ExecutorSpawner for LocalSpawner { fn spawn_executor(&self) -> Pin + Send>> { // Using channel that onetime use, `oneshot`, to send container information let (tx, rx) = oneshot::channel(); @@ -82,8 +82,7 @@ impl ExecutorSpawner for ContainerSpawner { let id = self.worker_counter.fetch_add(1, Ordering::SeqCst); tokio::spawn(async move { if let Ok(container_info) = - ContainerSpawner::create_container(docker_clone, image_name, container_name, id) - .await + LocalSpawner::create_container(docker_clone, image_name, container_name, id).await { let _ = tx.send(container_info); } @@ -132,7 +131,7 @@ mod tests { #[tokio::test] async fn test_executor_spawner() { - let spawner = ContainerSpawner { + let spawner = LocalSpawner { docker: Docker::connect_with_local_defaults().unwrap(), worker_counter: AtomicUsize::new(0), image_name: "summa-aggregation".to_string(), // Should exist on local registry diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 9e23c5b..0e18543 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -1,11 +1,11 @@ -mod container_spawner; +mod cloud_spawner; mod executor; +mod local_spawner; mod mock_spawner; -mod service_spawner; mod spawner; -pub use container_spawner::ContainerSpawner; +pub use cloud_spawner::CouldSpawner; pub use executor::Executor; +pub use local_spawner::LocalSpawner; pub use mock_spawner::MockSpawner; -pub use service_spawner::ServiceSpawner; pub use spawner::ExecutorSpawner; diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 0c55f5d..35d3f28 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -210,12 +210,12 @@ impl Orchestrator Date: Wed, 29 Nov 2023 07:37:37 +0000 Subject: [PATCH 12/32] fix: warnings; Update README --- README.md | 30 +-- src/aggregation_merkle_sum_tree.rs | 2 +- src/executor/executor.rs | 155 ---------------- src/executor/mock_spawner.rs | 14 +- src/executor/mod.rs | 105 ++++++++++- src/executor/test.rs | 47 +++++ src/orchestrator/mod.rs | 219 +++++++++++++++++++++- src/orchestrator/orchestrator.rs | 281 ----------------------------- src/orchestrator/test.rs | 72 ++++++++ 9 files changed, 467 insertions(+), 458 deletions(-) delete mode 100644 src/executor/executor.rs create mode 100644 src/executor/test.rs delete mode 100644 src/orchestrator/orchestrator.rs create mode 100644 src/orchestrator/test.rs diff --git a/README.md b/README.md index e7498a7..fe1666f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,18 @@ # Summa Aggregation -Summa Aggregation is focused on optimizing the generation of Merkle sum tree, a task identified as the primary time-consuming process in Summa benchmarks. Our goal is to significantly reduce the time required to generate these tree by leveraging parallelization across multiple machines. +Summa Aggregation is a scalable solution specifically designed to accelerate the process of building Merkle sum tree. -The system features `AggregationMerkleSumTree`, a specialized component designed for the efficient construction of complete tree from smaller, aggregated structures known as `mini-tree`. This approach not only speeds up the tree-building process but also enhances scalability and performance in large-scale data environments. +Our benchmarks in Summa Solvency revealed that constructing a merkle sum tree is a major time-consuming aspect of proof generation. + +The primary objective of Summa Aggregation is to enable efficient scaling in the construction of the tree by parallelization and distributed computation in multiple machines. + +For further optimization in Summa Aggregation, we introduced the `AggregationMerkleSumTree` component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. ## Orchestrator -The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of `Executors` and `Workers`, improving of tasks in the generation of Merkle sum tree. +The `Orchestrator` in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of `Executors` and `Workers`, improving of tasks in the generation of Merkle sum tree. +The final result of the `Orchestrator` is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the `Workers`. + Key functions of the `Orchestrator` include: - **Dynamic Executor Spawning**: The Orchestrator dynamically spawns `Executors` in numbers set by the user. Each `Executor` is then connected to a dedicated `Worker` for efficient task execution. @@ -15,9 +21,11 @@ Key functions of the `Orchestrator` include: - **Error Management and Pipeline Control**: The Orchestrator handles basic pipeline control and responds to errors by initiating the cancellation of all tasks. +- **Build AggregationMerkleSumTree**: Its final result is that evaluate `AggregationMerkleSumTree` by aggregating the mini-trees generated by the `Workers`. + ## Executor and Worker -The `Executor` acts as a crucial intermediary between the `Orchestrator` and `Workers`, facilitating the data processing workflow. Spawned by the `Orchestrator`, each `Executor` operates in a one-to-one relationship with a `Worker`. The `Worker` is a server that can generate a merkle sum tree, internally called a `mini-tree`, by receiving entries data. The primary role of a `Worker` is to build these `mini-trees`, which are segments of the `AggregationMerkleSumTree`. +The `Executor` acts as a crucial intermediary between the `Orchestrator` and `Workers`, facilitating the data processing workflow. Spawned by the `Orchestrator`, each `Executor` operates in a one-to-one relationship with a `Worker`. The `Worker` is a server that can generate a merkle sum tree, internally called a `mini-tree`, by receiving entries data. The primary role of a `Worker` is to build these `mini-tree`, which are segments of the `AggregationMerkleSumTree`. Key aspects of the `Executor's` role include: @@ -25,9 +33,9 @@ Key aspects of the `Executor's` role include: - **Data Handling and Task Distribution**: A primary function of the `Executor` is to receive data entries, often parsed and prepared by the Orchestrator. Upon receiving these entries, the Executor is responsible for forwarding them to its connected `Worker`. -- **Communication Bridge**: The `Executor` serves as a communication bridge within the data pipeline. It relays processed data, `mini-trees`, from Workers back to the Orchestrator. +- **Communication Bridge**: The `Executor` serves as a communication bridge within the data pipeline. It relays processed data, `mini-tree`, from Workers back to the Orchestrator. -The `Worker` called in here, mostly point out the container that runs `mini-tree-generator` server. +The `Worker` called in here, mostly point out a container that runs `mini-tree-server`. ## ExecutorSpawner @@ -65,9 +73,9 @@ You can initialize your Docker environment in Swarm mode, which is essential for This command will output information about the Swarm, including a join token. -2. **Join Worker Nodes to the Swarm**: +2. **Join Node to the Swarm**: - Use the join token provided by the main machine to add worker nodes to the swarm. On each worker node, run like: + Use the join token provided by the main machine to add nodes to the swarm. On each node, run like: ```bash Worker_1 $ docker swarm join --token :2377 @@ -75,7 +83,7 @@ You can initialize your Docker environment in Swarm mode, which is essential for Replace `` with the actual token and `` with the IP address of your main machine. -3. **Verify Node Status**: +3. **Check Node Status**: To confirm that the nodes are successfully joined to the swarm, check the node status on the main machine: @@ -96,6 +104,8 @@ You can initialize your Docker environment in Swarm mode, which is essential for ### Spawning More Workers +This section provides clear instructions on how to scale the `mini-tree-generator` service using Docker Compose and CLI commands. + In Docker Swarm mode, containers are managed as services rather than by individual names. To spawn more workers, follow these steps: 1. Deploy the Stack: @@ -129,8 +139,6 @@ In Docker Swarm mode, containers are managed as services rather than by individu Scaling allows you to adjust the number of service instances to meet your processing needs, enhancing the system's capability to handle increased loads or to improve redundancy and availability. -This section provides clear instructions on how to scale the `mini-tree-generator` service using Docker Compose and CLI commands. - ## Test Before starting the tests, you need to build the `mini-tree-generator` image and name it "summa-aggregation". diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index db6d18a..7389c64 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -14,7 +14,7 @@ use summa_backend::merkle_sum_tree::{Entry, MerkleProof, MerkleSumTree, Node, Tr /// * `N_BYTES`: Range in which each node balance should lie #[derive(Debug, Clone)] pub struct AggregationMerkleSumTree { - pub root: Node, + root: Node, nodes: Vec>>, depth: usize, mini_trees: Vec>, diff --git a/src/executor/executor.rs b/src/executor/executor.rs deleted file mode 100644 index fff1cc0..0000000 --- a/src/executor/executor.rs +++ /dev/null @@ -1,155 +0,0 @@ -use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; -use num_bigint::BigUint; -use reqwest::Client; -use std::error::Error; - -use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; - -#[derive(Clone)] -pub struct Executor { - client: Client, - url: String, - id: Option, -} - -impl Executor { - pub fn new(url: String, id: Option) -> Self { - Executor { - client: Client::new(), - url, - id, - } - } - - pub fn get_url(&self) -> String { - self.url.clone() - } - - pub fn get_name(&self) -> Option { - self.id.clone() - } - - fn parse_fp_from_hex(hex_str: &str) -> Fp { - let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); - Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() - } - - fn convert_json_to_node(json_node: JsonNode) -> Node { - let hash = Self::parse_fp_from_hex(&json_node.hash); - let balances = json_node - .balances - .iter() - .map(|balance| Self::parse_fp_from_hex(balance)) - .collect::>() - .try_into() - .expect("Incorrect number of balances"); - - Node { hash, balances } - } - - pub async fn generate_tree( - &self, - json_entries: Vec, - ) -> Result, Box> { - let response = self - .client - .post(&self.url) - .json(&json_entries) - .send() - .await - .map_err(|err| Box::new(err) as Box)?; - - let json_tree = response - .json::() - .await - .map_err(|err| Box::new(err) as Box)?; - - let entries = json_entries - .iter() - .map(|entry| { - let mut balances: [BigUint; N_ASSETS] = - std::array::from_fn(|_| BigUint::from(0u32)); - entry.balances.iter().enumerate().for_each(|(i, balance)| { - balances[i] = balance.parse::().unwrap(); - }); - - Entry::::new(entry.username.clone(), balances).unwrap() - }) - .collect::>>(); - - // Convert JsonMerkleSumTree to MerkleSumTree - let tree = MerkleSumTree:: { - root: Self::convert_json_to_node(json_tree.root), - nodes: json_tree - .nodes - .iter() - .map(|nodes| { - nodes - .iter() - .map(|node| Self::convert_json_to_node(node.clone())) - .collect() - }) - .collect(), - depth: json_tree.depth, - entries, - is_sorted: false, - }; - - Ok(tree) - } -} - -#[cfg(test)] -mod test { - use futures::future; - use std::error::Error; - - use crate::executor::spawner::ExecutorSpawner; - use crate::executor::LocalSpawner; - use crate::orchestrator::entry_parser; - - #[tokio::test] - async fn test_executor() -> Result<(), Box> { - let spawner = - LocalSpawner::new("summa-aggregation".to_string(), "excutor_test".to_string()); - - let executor = spawner.spawn_executor().await; - - let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); - - spawner.terminate_executors().await; - - assert_eq!( - format!("{:?}", merkle_tree.root.hash), - "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" - ); - Ok(()) - } - - #[tokio::test] - async fn test_executor_block() -> Result<(), Box> { - let spawner = LocalSpawner::new( - "summa-aggregation".to_string(), - "executor_block_test".to_string(), - ); - - let executor = spawner.spawn_executor().await; - - // Parse two csv files - let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - - let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); - let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); - - let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; - - spawner.terminate_executors().await; - - assert_eq!(all_tree.len(), 2); - - Ok(()) - } -} diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index c65e91c..4433ec7 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -1,4 +1,7 @@ -use axum::{routing::post, Router}; +use axum::{ + routing::post, + Router, +}; use std::{ future::Future, net::SocketAddr, @@ -46,17 +49,16 @@ impl ExecutorSpawner for MockSpawner { // if there is no url or already used all urls, spawn a new executor tokio::spawn(async move { - let app = Router::new().route("/", post(create_mst)); + let app = Router::new() + .route("/", post(create_mst)); + let addr = SocketAddr::from(([0, 0, 0, 0], 4000 + id as u16)); // send worker url to rx let _ = tx.send(addr.clone()); // Start the server - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + axum::Server::bind(&addr).serve(app.into_make_service()).await.unwrap(); }); // Return a Future that resolves to Executor diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 0e18543..ceca43a 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -1,11 +1,112 @@ mod cloud_spawner; -mod executor; mod local_spawner; mod mock_spawner; mod spawner; +mod test; pub use cloud_spawner::CouldSpawner; -pub use executor::Executor; pub use local_spawner::LocalSpawner; pub use mock_spawner::MockSpawner; pub use spawner::ExecutorSpawner; + +use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; +use num_bigint::BigUint; +use reqwest::Client; +use std::error::Error; + +use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; + +#[derive(Clone)] +pub struct Executor { + client: Client, + url: String, + id: Option, +} + +impl Executor { + pub fn new(url: String, id: Option) -> Self { + Executor { + client: Client::new(), + url, + id, + } + } + + pub fn get_url(&self) -> String { + self.url.clone() + } + + pub fn get_name(&self) -> Option { + self.id.clone() + } + + fn parse_fp_from_hex(hex_str: &str) -> Fp { + let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); + Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() + } + + fn convert_json_to_node(json_node: JsonNode) -> Node { + let hash = Self::parse_fp_from_hex(&json_node.hash); + let balances = json_node + .balances + .iter() + .map(|balance| Self::parse_fp_from_hex(balance)) + .collect::>() + .try_into() + .expect("Incorrect number of balances"); + + Node { hash, balances } + } + + pub async fn generate_tree( + &self, + json_entries: Vec, + ) -> Result, Box> { + let response = self + .client + .post(&self.url) + .json(&json_entries) + .send() + .await + .map_err(|err| Box::new(err) as Box)?; + + let json_tree = response + .json::() + .await + .map_err(|err| Box::new(err) as Box)?; + + let entries = json_entries + .iter() + .map(|entry| { + let mut balances: [BigUint; N_ASSETS] = + std::array::from_fn(|_| BigUint::from(0u32)); + entry.balances.iter().enumerate().for_each(|(i, balance)| { + balances[i] = balance.parse::().unwrap(); + }); + + Entry::::new(entry.username.clone(), balances).unwrap() + }) + .collect::>>(); + + // Convert JsonMerkleSumTree to MerkleSumTree + let tree = MerkleSumTree:: { + root: Self::convert_json_to_node(json_tree.root), + nodes: json_tree + .nodes + .iter() + .map(|nodes| { + nodes + .iter() + .map(|node| Self::convert_json_to_node(node.clone())) + .collect() + }) + .collect(), + depth: json_tree.depth, + entries, + is_sorted: false, + }; + + Ok(tree) + } +} diff --git a/src/executor/test.rs b/src/executor/test.rs new file mode 100644 index 0000000..b2cd792 --- /dev/null +++ b/src/executor/test.rs @@ -0,0 +1,47 @@ +#[cfg(test)] +mod test { + use futures::future; + use std::error::Error; + + use crate::executor::{spawner::ExecutorSpawner, MockSpawner}; + use crate::orchestrator::entry_parser; + + #[tokio::test] + async fn test_executor() -> Result<(), Box> { + let spawner = MockSpawner::new(None); + + let executor = spawner.spawn_executor().await; + + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); + + spawner.terminate_executors().await; + + assert_eq!( + format!("{:?}", merkle_tree.root.hash), + "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" + ); + Ok(()) + } + + #[tokio::test] + async fn test_executor_block() -> Result<(), Box> { + let spawner = MockSpawner::new(None); + let executor = spawner.spawn_executor().await; + + // Parse two csv files + let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + + let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); + let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); + + let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; + + spawner.terminate_executors().await; + + assert_eq!(all_tree.len(), 2); + + Ok(()) + } +} diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index c0adc21..04235e2 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -1,5 +1,220 @@ mod entry_csv_parser; -mod orchestrator; +mod test; pub use entry_csv_parser::entry_parser; -pub use orchestrator::Orchestrator; + +use futures::future::join_all; +use std::{cmp::min, error::Error}; +use tokio::sync::mpsc; +use tokio_util::sync::CancellationToken; + +use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; +use crate::executor::ExecutorSpawner; + +pub struct Orchestrator { + executor_spawner: Box, + entry_csvs: Vec, +} + +impl Orchestrator { + fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { + Self { + executor_spawner, + entry_csvs, + } + } + + // Calculate the range of tasks to be assigned to a executor. + // + // * `executor_index` - The index of the executor. + // * `total_executors` - The total number of executor. + // + // A tuple representing the start and end indices of the tasks assigned to the executor + fn calculate_task_range( + &self, + executor_index: usize, + total_executors: usize, + ) -> (usize, usize) { + let total_tasks = self.entry_csvs.len(); + let base_tasks_per_executor = total_tasks / total_executors; + let extra_tasks = total_tasks % total_executors; + + let start = executor_index * base_tasks_per_executor + min(executor_index, extra_tasks); + let end = + (executor_index + 1) * base_tasks_per_executor + min(executor_index + 1, extra_tasks); + + (start, min(end, total_tasks)) + } + + /// Processes a list of CSV files concurrently using executors and aggregates the results. + /// + /// * `executor_count` - The number of executors to use. + /// + /// Data flow + /// + /// 1. Splits the list of CSV files into segments based on the number of available executors. + /// 2. A distribution thread loads each CSV file, parses it into `entries`, and sends these to `entries_tx`. + /// 3. Each executor receives `entries` from `entries_rx`, requests tasks to Worker, and sends results back through `tree_tx`. + /// 4. The processed data from all executors, collected from `tree_rx`, is aggregated into an `AggregationMerkleSumTree`. + /// 6. After processing, executors are terminated to release resources. + /// + async fn create_aggregation_mst( + self, + executor_count: usize, + ) -> Result, Box> + where + [usize; N_ASSETS + 1]: Sized, + [usize; 2 * (1 + N_ASSETS)]: Sized, + { + let entries_per_executor = self.entry_csvs.len() / executor_count; + + let mut executors = Vec::new(); + let mut result_collectors = Vec::new(); + + let channel_size = std::env::var("CHANNEL_SIZE") + .unwrap_or_default() + .parse::() + .unwrap_or(32); + + let cancel_token = CancellationToken::new(); + let actual_number_of_workers = min(executor_count, self.entry_csvs.len()); + for i in 0..actual_number_of_workers { + // Declare channels for communication + // + // There are three channels are used inthis method. + // + // - A `entries_tx` receives parsed data from the entry parser to distribute tasks to executors. + // - A `tree_tx` channel is used by the executors to send the results of the tasks. + // - A `stop` channel is used to send a stop signal to all executors in case of an error, + // allowing for a coordinated shutdown or cancellation of tasks. + // + let (entries_tx, mut entries_rx) = mpsc::channel(channel_size); + let (tree_tx, tree_rx) = mpsc::channel(channel_size); + + // 2. Executor + // + // Spawn executors that process entries with Worker. + // + // - Receives 'entries' from [entries_rx] channel. + // - Processes 'entries' to build a tree (done by worker). + // - Sends the resulting 'tree' back via [tree_tx] channel. + // + let executor = self.executor_spawner.spawn_executor().await; + result_collectors.push((i, tree_rx)); + + let cloned_cancel_token = cancel_token.clone(); + executors.push(tokio::spawn(async move { + loop { + tokio::select! { + entries_data = entries_rx.recv() => { + // When the distribution thread is finished, the channel will be closed. + let entries = match entries_data { + Some(entries) => entries, + None => break, + }; + let processed_task = match executor.generate_tree::(entries).await { + Ok(entries) => entries, + Err(e) => { + eprintln!("Executor_{:?}: error while processing entries {:?}", i, e); + cloned_cancel_token.cancel(); + break; + } + }; + if tree_tx.send(processed_task).await.is_err() { + eprintln!("Executor_{:?}: Error while sending tree result", i); + cloned_cancel_token.cancel(); + break; + } + }, + _ = cloned_cancel_token.cancelled() => { + eprintln!("Executor_{:?}: cancel signal received, terminating.", i); + break; + }, + } + } + })); + + // 1. Distributing Tasks + // + // Spawn a distribution thread that distributes entries to executors + // + // - Loads CSV file from [csv_file_path]. + // - Parses CSV file into 'entries'. + // - Sends 'entries' to executors via [entries_tx] channel. + // + let (start, end) = self.calculate_task_range(i, executor_count); + let entry_csvs_slice = self.entry_csvs[start..end].to_vec(); // Clone only the necessary slice + + let cloned_cancel_token = cancel_token.clone(); + tokio::spawn(async move { + for file_path in entry_csvs_slice.iter() { + let entries = match entry_parser::<_, N_ASSETS, N_BYTES>(file_path) { + Ok(entries) => entries, + Err(e) => { + eprintln!( + "Executor_{:?}: Error while processing file {:?}: {:?}", + i, file_path, e + ); + cloned_cancel_token.cancel(); + break; + } + }; + + tokio::select! { + _ = cloned_cancel_token.cancelled() => { + eprintln!("Executor_{:?}: cancel signal received, terminating distributor.", i); + break; + }, + send_entries = entries_tx.send(entries) => { + if let Err(e) = send_entries { + eprintln!("Executor_{:?}: Error while sending entries: {:?}", i, e); + cloned_cancel_token.cancel(); + break; + } + } + } + } + drop(entries_tx); + }); + } + + // 3. Collecting Results + // + // Collect `tree` results from executors + // + // - Receives processed 'tree' from [tree_rx] channel. + // - Collects all 'tree' results into 'all_tree_results'. + // - Aggregates 'all_tree_results' into 'ordered_tree_results'. + // + let mut all_tree_responses = Vec::new(); + for (index, mut tree_rx) in result_collectors { + let executor_results = tokio::spawn(async move { + let mut trees = Vec::new(); + while let Some(result) = tree_rx.recv().await { + trees.push(result); + } + (index, trees) + }); + all_tree_responses.push(executor_results); + } + + let all_tree_results = join_all(all_tree_responses).await; + + // Aggregate results from all workers in order + let mut ordered_tree_results = vec![None; self.entry_csvs.len()]; + for result in all_tree_results { + let (index, worker_results) = result.unwrap(); + let start = index * entries_per_executor; + for (i, res) in worker_results.iter().enumerate() { + ordered_tree_results[start + i] = Some(res.clone()); + } + } + + // Terminate executors + self.executor_spawner.terminate_executors().await; + + let all_merkle_sum_tree = ordered_tree_results.into_iter().flatten().collect(); + + AggregationMerkleSumTree::new(all_merkle_sum_tree) + } +} diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs deleted file mode 100644 index 35d3f28..0000000 --- a/src/orchestrator/orchestrator.rs +++ /dev/null @@ -1,281 +0,0 @@ -use futures::future::join_all; -use std::{cmp::min, error::Error}; -use tokio::sync::mpsc; -use tokio_util::sync::CancellationToken; - -use super::entry_csv_parser::entry_parser; -use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; -use crate::executor::ExecutorSpawner; - -pub struct Orchestrator { - executor_spawner: Box, - entry_csvs: Vec, -} - -impl Orchestrator { - fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { - Self { - executor_spawner, - entry_csvs, - } - } - - // Calculate the range of tasks to be assigned to a executor. - // - // * `executor_index` - The index of the executor. - // * `total_executors` - The total number of executor. - // - // A tuple representing the start and end indices of the tasks assigned to the executor - fn calculate_task_range( - &self, - executor_index: usize, - total_executors: usize, - ) -> (usize, usize) { - let total_tasks = self.entry_csvs.len(); - let base_tasks_per_executor = total_tasks / total_executors; - let extra_tasks = total_tasks % total_executors; - - let start = executor_index * base_tasks_per_executor + min(executor_index, extra_tasks); - let end = - (executor_index + 1) * base_tasks_per_executor + min(executor_index + 1, extra_tasks); - - (start, min(end, total_tasks)) - } - - /// Processes a list of CSV files concurrently using executors and aggregates the results. - /// - /// * `executor_count` - The number of executors to use. - /// - /// Data flow - /// - /// 1. Splits the list of CSV files into segments based on the number of available executors. - /// 2. A distribution thread loads each CSV file, parses it into `entries`, and sends these to `entries_tx`. - /// 3. Each executor receives `entries` from `entries_rx`, requests tasks to Worker, and sends results back through `tree_tx`. - /// 4. The processed data from all executors, collected from `tree_rx`, is aggregated into an `AggregationMerkleSumTree`. - /// 6. After processing, executors are terminated to release resources. - /// - async fn create_aggregation_mst( - self, - executor_count: usize, - ) -> Result, Box> - where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, - { - let entries_per_executor = self.entry_csvs.len() / executor_count; - - let mut executors = Vec::new(); - let mut result_collectors = Vec::new(); - - let channel_size = std::env::var("CHANNEL_SIZE") - .unwrap_or_default() - .parse::() - .unwrap_or(32); - - let cancel_token = CancellationToken::new(); - let actual_number_of_workers = min(executor_count, self.entry_csvs.len()); - for i in 0..actual_number_of_workers { - // Declare channels for communication - // - // There are three channels are used inthis method. - // - // - A `entries_tx` receives parsed data from the entry parser to distribute tasks to executors. - // - A `tree_tx` channel is used by the executors to send the results of the tasks. - // - A `stop` channel is used to send a stop signal to all executors in case of an error, - // allowing for a coordinated shutdown or cancellation of tasks. - // - let (entries_tx, mut entries_rx) = mpsc::channel(channel_size); - let (tree_tx, tree_rx) = mpsc::channel(channel_size); - - let executor = self.executor_spawner.spawn_executor().await; - result_collectors.push((i, tree_rx)); - - let cloned_cancel_token = cancel_token.clone(); - executors.push(tokio::spawn(async move { - loop { - tokio::select! { - entries_data = entries_rx.recv() => { - // When the distribution thread is finished, the channel will be closed. - let entries = match entries_data { - Some(entries) => entries, - None => break, - }; - let processed_task = match executor.generate_tree::(entries).await { - Ok(entries) => entries, - Err(e) => { - eprintln!("Executor_{:?}: error while processing entries {:?}", i, e); - cloned_cancel_token.cancel(); - break; - } - }; - if tree_tx.send(processed_task).await.is_err() { - eprintln!("Executor_{:?}: Error while sending tree result", i); - cloned_cancel_token.cancel(); - break; - } - }, - _ = cloned_cancel_token.cancelled() => { - eprintln!("Executor_{:?}: cancel signal received, terminating.", i); - break; - }, - } - } - })); - - // 1. Distributing Tasks - // - // Spawn a distribution thread that distributes entries to executors - // - // - Loads CSV file from [csv_file_path]. - // - Parses CSV file into 'entries'. - // - Sends 'entries' to executors via [entries_tx] channel. - // - let (start, end) = self.calculate_task_range(i, executor_count); - let entry_csvs_slice = self.entry_csvs[start..end].to_vec(); // Clone only the necessary slice - - let cloned_cancel_token = cancel_token.clone(); - tokio::spawn(async move { - for file_path in entry_csvs_slice.iter() { - let entries = match entry_parser::<_, N_ASSETS, N_BYTES>(file_path) { - Ok(entries) => entries, - Err(e) => { - eprintln!( - "Executor_{:?}: Error while processing file {:?}: {:?}", - i, file_path, e - ); - cloned_cancel_token.cancel(); - break; - } - }; - - tokio::select! { - _ = cloned_cancel_token.cancelled() => { - eprintln!("Executor_{:?}: cancel signal received, terminating distributor.", i); - break; - }, - send_entries = entries_tx.send(entries) => { - if let Err(e) = send_entries { - eprintln!("Executor_{:?}: Error while sending entries: {:?}", i, e); - cloned_cancel_token.cancel(); - break; - } - } - } - } - drop(entries_tx); - }); - } - - // 3. Collecting Results - // - // Collect `tree` results from executors - // - // - Receives processed 'tree' from [tree_rx] channel. - // - Collects all 'tree' results into 'all_tree_results'. - // - Aggregates 'all_tree_results' into 'ordered_tree_results'. - // - let mut all_tree_responses = Vec::new(); - for (index, mut tree_rx) in result_collectors { - let executor_results = tokio::spawn(async move { - let mut trees = Vec::new(); - while let Some(result) = tree_rx.recv().await { - trees.push(result); - } - (index, trees) - }); - all_tree_responses.push(executor_results); - } - - let all_tree_results = join_all(all_tree_responses).await; - - // Aggregate results from all workers in order - let mut ordered_tree_results = vec![None; self.entry_csvs.len()]; - for result in all_tree_results { - let (index, worker_results) = result.unwrap(); - let start = index * entries_per_executor; - for (i, res) in worker_results.iter().enumerate() { - ordered_tree_results[start + i] = Some(res.clone()); - } - } - - // Terminate executors - self.executor_spawner.terminate_executors().await; - - let all_merkle_sum_tree = ordered_tree_results.into_iter().flatten().collect(); - - AggregationMerkleSumTree::new(all_merkle_sum_tree) - } -} - -#[cfg(test)] -mod test { - use super::Orchestrator; - use crate::executor::{LocalSpawner, MockSpawner}; - use summa_backend::merkle_sum_tree::Tree; - - #[tokio::test] - async fn test_with_containers() { - let spawner = LocalSpawner::new( - "summa-aggregation".to_string(), - "orchestrator_test".to_string(), - ); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } - - #[tokio::test] - async fn test_single_mock_worker() { - let spawner = MockSpawner::new(None); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } - - #[tokio::test] - async fn test_none_exist_csv() { - let spawner = MockSpawner::new(None); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/no_exist.csv".to_string(), - ], - ); - let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(&0, one_mini_tree_result.depth()); - } - - #[tokio::test] - async fn test_none_exist_worker() { - let non_exist_worker_url = vec!["127.0.0.1:7878".to_string()]; - let spawner = MockSpawner::new(Some(non_exist_worker_url)); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); - assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); - } -} diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs new file mode 100644 index 0000000..d939b56 --- /dev/null +++ b/src/orchestrator/test.rs @@ -0,0 +1,72 @@ +#[cfg(test)] +mod test { + use crate::executor::{LocalSpawner, MockSpawner}; + use crate::orchestrator::Orchestrator; + use summa_backend::merkle_sum_tree::Tree; + + #[tokio::test] + async fn test_with_containers() { + let spawner = LocalSpawner::new( + "summa-aggregation".to_string(), + "orchestrator_test".to_string(), + ); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + } + + #[tokio::test] + async fn test_single_mock_worker() { + let spawner = MockSpawner::new(None); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + } + + #[tokio::test] + async fn test_none_exist_csv() { + let spawner = MockSpawner::new(None); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/no_exist.csv".to_string(), + ], + ); + let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(&0, one_mini_tree_result.depth()); + } + + #[tokio::test] + async fn test_none_exist_worker() { + let non_exist_worker_url = vec!["127.0.0.1:7878".to_string()]; + let spawner = MockSpawner::new(Some(non_exist_worker_url)); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); + assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); + } +} From 74e0a50d4b8a1398d30062027439500dfb7da9b0 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Wed, 29 Nov 2023 16:01:11 +0000 Subject: [PATCH 13/32] chore: update README with diagram --- README.md | 42 ++++++++++++++++------------- orchestrator-diagram.png | Bin 0 -> 112609 bytes src/executor/mock_spawner.rs | 13 +++++---- src/executor/spawner.rs | 50 +++++++++++++++++++++++++++++++++++ src/orchestrator/mod.rs | 2 +- 5 files changed, 81 insertions(+), 26 deletions(-) create mode 100644 orchestrator-diagram.png diff --git a/README.md b/README.md index fe1666f..e7cd1ca 100644 --- a/README.md +++ b/README.md @@ -6,56 +6,62 @@ Our benchmarks in Summa Solvency revealed that constructing a merkle sum tree is The primary objective of Summa Aggregation is to enable efficient scaling in the construction of the tree by parallelization and distributed computation in multiple machines. -For further optimization in Summa Aggregation, we introduced the `AggregationMerkleSumTree` component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. +For further optimization in Summa Aggregation, we introduced the AggregationMerkleSumTree component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. ## Orchestrator -The `Orchestrator` in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of `Executors` and `Workers`, improving of tasks in the generation of Merkle sum tree. -The final result of the `Orchestrator` is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the `Workers`. +The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving of tasks in the generation of Merkle sum tree. +The final result of the Orchestrator is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the Workers. -Key functions of the `Orchestrator` include: +Key functions of the Orchestrator include: -- **Dynamic Executor Spawning**: The Orchestrator dynamically spawns `Executors` in numbers set by the user. Each `Executor` is then connected to a dedicated `Worker` for efficient task execution. +- **Dynamic Executor Spawning**: The Orchestrator dynamically spawns Executors in numbers set by the user. Each Executor is then connected to a dedicated Worker for efficient task execution. -- **Task Management and Distribution**: It oversees the overall task flow, loading tasks and distributing them to `Executors`. +- **Task Management and Distribution**: It oversees the overall task flow, loading tasks and distributing them to Executors. - **Error Management and Pipeline Control**: The Orchestrator handles basic pipeline control and responds to errors by initiating the cancellation of all tasks. -- **Build AggregationMerkleSumTree**: Its final result is that evaluate `AggregationMerkleSumTree` by aggregating the mini-trees generated by the `Workers`. +- **Build AggregationMerkleSumTree**: Its final result is that evaluate `AggregationMerkleSumTree` by aggregating the mini-trees generated by the Workers. ## Executor and Worker -The `Executor` acts as a crucial intermediary between the `Orchestrator` and `Workers`, facilitating the data processing workflow. Spawned by the `Orchestrator`, each `Executor` operates in a one-to-one relationship with a `Worker`. The `Worker` is a server that can generate a merkle sum tree, internally called a `mini-tree`, by receiving entries data. The primary role of a `Worker` is to build these `mini-tree`, which are segments of the `AggregationMerkleSumTree`. +The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. The Worker is a server that can generate a merkle sum tree, internally called a mini-tree, by receiving entries data. The primary role of a Worker is to build these mini-tree, which are segments of the AggregationMerkleSumTree. -Key aspects of the `Executor's` role include: +Key aspects of the Executor's role include: -- **Spawning and Connection**: `Executors` are dynamically spawned by the `Orchestrator` as part of the system's scalability. Each `Executor` is designed to connect with a `Worker` for task execution. +- **Spawning and Connection**: Executors are dynamically spawned by the Orchestrator as part of the system's scalability. Each Executor is designed to connect with a Worker for task execution. -- **Data Handling and Task Distribution**: A primary function of the `Executor` is to receive data entries, often parsed and prepared by the Orchestrator. Upon receiving these entries, the Executor is responsible for forwarding them to its connected `Worker`. +- **Data Handling and Task Distribution**: A primary function of the Executor is to receive data entries, often parsed and prepared by the Orchestrator. Upon receiving these entries, the Executor is responsible for forwarding them to its connected Worker. -- **Communication Bridge**: The `Executor` serves as a communication bridge within the data pipeline. It relays processed data, `mini-tree`, from Workers back to the Orchestrator. +- **Communication Bridge**: The Executor serves as a communication bridge within the data pipeline. It relays processed data, `mini-tree`, from Workers back to the Orchestrator. -The `Worker` called in here, mostly point out a container that runs `mini-tree-server`. +The Worker called in here, mostly point out a container that runs `mini-tree-server`. ## ExecutorSpawner -The `ExecutorSpawner` is responsible for initializing and terminating `Executors`. It manages the creation of `Executor` instances and `Workers`, with the latter serving as the `mini-tree-generator` accessible by the `Executor`. +The `ExecutorSpawner` is responsible for initializing and terminating Executors. It manages the creation of Executor instances and Workers, with the latter serving as the `mini-tree-generator` accessible by the Executor. In the Summa-Aggregation, there are three types of `ExecutorSpawner`: -- **MockSpawner**: Primarily used for testing, this spawner initializes `Executors` suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a server locally. +- **MockSpawner**: Primarily used for testing, this spawner initializes Executors suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a server locally. -- **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize `Executors` and `Workers` in local Docker environments. +- **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize Executors and Workers in local Docker environments. -- **CloudSpawner**: Ideal for scenarios with access to cloud resources, this spawner functions same like to the `LocalSpawner`, but with `Workers` running in the cloud. +- **CloudSpawner**: Ideal for scenarios with access to cloud resources, this spawner functions same like to the `LocalSpawner`, but with Workers running in the cloud. While both `LocalSpawner` and `CloudSpawner` manage Docker containers, they differ in operational context. `LocalSpawner` handles individual containers directly, providing simplicity but limited scalability. In contrast, `CloudSpawner` employs Docker Swarm to manage containers as services, thereby offering enhanced scalability and resilience, crucial for larger workloads. The `ExecutorSpawner` is a trait with minimal requirements, specifically the Rust trait methods `spawn_executor` and `terminate_executor`. You can create your own spawner and use it with the Orchestrator. +## Diagram of Parallel Merkle Sum Tree Construction + +The diagram illustrates a distributed approach to constructing the `AggregatedMerkleSumTree`, where an orchestrator delegates tasks to executors, which are then processed in parallel by workers. + +![diagram](/orchestrator-diagram.png) + ## Orchestrating on Swarm -Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability in distributed systems like Summa Aggregation. +Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability. For more details about Docker Swarm mode, refer to the [official documentation](https://docs.docker.com/engine/swarm/). diff --git a/orchestrator-diagram.png b/orchestrator-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1d092575bae8963dc80a6ca4e34f6beadac88968 GIT binary patch literal 112609 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%0Dt5Ln)NYhLcWJU&jglQHHVOKe5!{JI(*r=vzLJz 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 literal 0 HcmV?d00001 diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index 4433ec7..d67732b 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -1,7 +1,4 @@ -use axum::{ - routing::post, - Router, -}; +use axum::{routing::post, Router}; use std::{ future::Future, net::SocketAddr, @@ -49,8 +46,7 @@ impl ExecutorSpawner for MockSpawner { // if there is no url or already used all urls, spawn a new executor tokio::spawn(async move { - let app = Router::new() - .route("/", post(create_mst)); + let app = Router::new().route("/", post(create_mst)); let addr = SocketAddr::from(([0, 0, 0, 0], 4000 + id as u16)); @@ -58,7 +54,10 @@ impl ExecutorSpawner for MockSpawner { let _ = tx.send(addr.clone()); // Start the server - axum::Server::bind(&addr).serve(app.into_make_service()).await.unwrap(); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); }); // Return a Future that resolves to Executor diff --git a/src/executor/spawner.rs b/src/executor/spawner.rs index 120e117..4f482f0 100644 --- a/src/executor/spawner.rs +++ b/src/executor/spawner.rs @@ -3,7 +3,57 @@ use std::{future::Future, pin::Pin}; use crate::executor::Executor; pub trait ExecutorSpawner { + /// Spawns an executor asynchronously. + /// + /// This method initializes an Executor and returns a Future that resolves to the Executor. + /// + /// To achieve this asynchronously (outside of an async trait function), we use a one-time channel (`oneshot`) to deliver the variables to the Future. + /// + /// Internally, it performs the following codelines: + /// + /// 1. Uses a `oneshot` channel for sending the variables from the spawned async task. + /// ``` + /// let (tx, rx) = oneshot::channel(); + /// ``` + /// 2. Clones necessary variables (url, name and so on) to move them into the async block. + /// ``` + /// let url = self.url.clone(); + /// ``` + /// 3. Spawns an asynchronous task (`tokio::spawn`) that asynchronously creates a worker and sends back its information. + /// ``` + /// tokio::spawn(async move { + /// if let Ok(worker_info) = + /// Spawner::create_worker(url).await + /// { + /// let _ = tx.send(worker_info); + /// } + /// }); + /// Note that, the `create_worker` is typically declared in the `Spawner` struct that has `ExecutorSpawner` trait. + /// 4. Returns a Future that, upon completion, provides an Executor connected to the newly spawned worker. + /// ``` + /// Box::pin(async move { + /// let url = rx.await.expect("Failed to receive worker URL"); + /// Executor::new(url, None); + /// }); + /// ``` + /// + /// Returns: + /// - `Pin + Send>>`: A Future that, when awaited, yields an Executor instance and spawns a worker. + /// fn spawn_executor(&self) -> Pin + Send>>; + /// Terminates all spawned executors (and/or workers) asynchronously. + /// + /// This method is responsible for gracefully shutting down all active executors (and/or workers) by calling + /// To do this, the `Spawner` may needs some fields for storing some accessing point to the workers, which are spawned with the executors. + /// For deliver variables to Future results, use a channel like the pattern at `spawn_executor` + /// + /// The termination process typically involves: + /// - Iterating through all active Executors and workers. + /// - Invoking kind of `shutdown` on each executors and workers to initiate their shutdown. + /// - Awaiting the completion of all shutdown operations. + /// + /// Returns: + /// - `Pin + Send>>`: A Future that, when awaited, indicates that all executors (and/or workers) have been terminated. fn terminate_executors(&self) -> Pin + Send>>; } diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index 04235e2..b7b901f 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -96,7 +96,7 @@ impl Orchestrator Date: Thu, 30 Nov 2023 17:34:44 +0000 Subject: [PATCH 14/32] fix: refactor; updated README --- Orchestrator-diagram.png | Bin 0 -> 111722 bytes README.md | 41 +++++---- orchestrator-diagram.png | Bin 112609 -> 0 bytes src/executor/local_spawner.rs | 4 +- src/executor/mock_spawner.rs | 2 +- src/executor/mod.rs | 55 +----------- src/executor/spawner.rs | 100 ++++++++++----------- src/executor/test.rs | 1 - src/json_mst.rs | 124 +++++++++++++++++++++++++++ src/lib.rs | 24 +----- src/mini_tree_generator.rs | 39 +-------- src/orchestrator/entry_csv_parser.rs | 10 +-- src/orchestrator/mod.rs | 4 +- src/orchestrator/test.rs | 1 - 14 files changed, 216 insertions(+), 189 deletions(-) create mode 100644 Orchestrator-diagram.png delete mode 100644 orchestrator-diagram.png create mode 100644 src/json_mst.rs diff --git a/Orchestrator-diagram.png b/Orchestrator-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c807f6ba1f9259de5ce636f93c2d784cb44d9b GIT binary patch literal 111722 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index e7cd1ca..0966380 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ The primary objective of Summa Aggregation is to enable efficient scaling in the For further optimization in Summa Aggregation, we introduced the AggregationMerkleSumTree component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. +![diagram](/Orchestrator-diagram.png) + ## Orchestrator The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving of tasks in the generation of Merkle sum tree. @@ -39,11 +41,13 @@ The Worker called in here, mostly point out a container that runs `mini-tree-ser ## ExecutorSpawner -The `ExecutorSpawner` is responsible for initializing and terminating Executors. It manages the creation of Executor instances and Workers, with the latter serving as the `mini-tree-generator` accessible by the Executor. +The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances and Workers. The latter function as the `mini-tree-server`. It's important to note, however, that managing workers through the `ExecutorSpawner` is not mandatory. + +Note that managing workers through the `ExecutorSpawner` is not mandatory. In the Summa-Aggregation, there are three types of `ExecutorSpawner`: -- **MockSpawner**: Primarily used for testing, this spawner initializes Executors suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a server locally. +- **MockSpawner**: Primarily used for testing, this spawner initializes Executors suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a `mini-tree-server` locally. - **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize Executors and Workers in local Docker environments. @@ -57,8 +61,6 @@ The `ExecutorSpawner` is a trait with minimal requirements, specifically the Rus The diagram illustrates a distributed approach to constructing the `AggregatedMerkleSumTree`, where an orchestrator delegates tasks to executors, which are then processed in parallel by workers. -![diagram](/orchestrator-diagram.png) - ## Orchestrating on Swarm Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability. @@ -69,6 +71,8 @@ For more details about Docker Swarm mode, refer to the [official documentation]( You can initialize your Docker environment in Swarm mode, which is essential for managing a cluster of Docker nodes as a single virtual system. +Note that setting up Swarm mode may not work well depending on the OS, as network configurations differ across operating systems. + 1. **Activate Swarm Mode on the Main Machine**: Run the following command to initialize Swarm mode: @@ -110,9 +114,11 @@ You can initialize your Docker environment in Swarm mode, which is essential for ### Spawning More Workers -This section provides clear instructions on how to scale the `mini-tree-generator` service using Docker Compose and CLI commands. +You can spawning the or managing worker by `CloudSpanwer` without using Docker CLI command, which will explain in here. but Even well configured swarm network following previous section. It does not guarentee spawning worker as well. -In Docker Swarm mode, containers are managed as services rather than by individual names. To spawn more workers, follow these steps: +In this section, you can verify that you can create a 'mini-tree-server' on any node. Before introducing the specific instructions, it's important to understand that in Docker Swarm mode, containers are managed as services rather than by individual names. + +To spawn more workers, follow these steps: 1. Deploy the Stack: @@ -124,14 +130,17 @@ In Docker Swarm mode, containers are managed as services rather than by individu 2. Scale the Service: - Use the docker service scale command to adjust the number of replicas (instances) of your mini-tree service. - For example, to scale up to 5 instances, run: + Utilize the 'scale' sub-command within the Docker 'service' command to adjust the number of replicas (workers) for your mini-tree service. + + 'mini-tree' refers to the name of the service, which is configured in the 'docker-compose.yml' file. Think of the number of replicas as the number of workers. + + For example, to scale up to 5 workers, run: ```bash Main $ docker service scale summa_aggregation_mini-tree=5 ``` - Since each instance has access to all of the worker's resources, it would be appropriate to set the scale number based on the number of workers. + Since each worker has access to all of the node's resources, it would be appropriate to set the scale number based on the number of node. 3. Verify the Scaling: @@ -143,11 +152,11 @@ In Docker Swarm mode, containers are managed as services rather than by individu This command shows the number of replicas running for each service in the swarm. -Scaling allows you to adjust the number of service instances to meet your processing needs, enhancing the system's capability to handle increased loads or to improve redundancy and availability. +Scaling service allows you to adjust the number of workers more easily than spawning each worker individually. ## Test -Before starting the tests, you need to build the `mini-tree-generator` image and name it "summa-aggregation". +Before starting the tests, you need to build the `mini-tree-server` image and name it "summa-aggregation". Build the image with the following command: @@ -166,17 +175,17 @@ cargo test Note that the Worker uses port 4000 as the default for its server. Please ensure that this port is not already in use when you meet error. -### Test Mini Tree Generator +### Test Mini Tree Server -You can manually test the `Mini Tree Generator` with running container. +You can manually test the `Mini Tree Server` with running container. -First, Use the command below to start the Mini Tree Generator container: +First, Use the command below to start the Mini Tree Server container: ```bash - docker run -d -p 4000:4000 --name mini-tree-generator summa-aggretaion/mini-tree + docker run -d -p 4000:4000 --name mini-tree-server summa-aggretaion/mini-tree ``` -Second, to send two entries to the `Mini Tree Generator`, use this script: +Second, to send two entries to the `Mini Tree Server`, use this script: ```bash bash ./scripts/test_sending_entry.sh diff --git a/orchestrator-diagram.png b/orchestrator-diagram.png deleted file mode 100644 index 1d092575bae8963dc80a6ca4e34f6beadac88968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112609 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%0Dt5Ln)NYhLcWJU&jglQHHVOKe5!{JI(*r=vzLJz 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 diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index a47a56c..4f807a2 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -103,7 +103,7 @@ impl ExecutorSpawner for LocalSpawner { let docker_clone = self.docker.clone(); let container_name = self.container_name.clone(); - let worker_counter = self.worker_counter.load(Ordering::SeqCst).clone(); + let worker_counter = self.worker_counter.load(Ordering::SeqCst); Box::pin(async move { // Remove the container let remove_options = RemoveContainerOptions { @@ -114,7 +114,7 @@ impl ExecutorSpawner for LocalSpawner { for i in 0..worker_counter { let container_name = format!("{}_{}", container_name, i); if let Err(e) = docker_clone - .remove_container(&container_name, Some(remove_options.clone())) + .remove_container(&container_name, Some(remove_options)) .await { eprintln!("Error removing container: {}", e); diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index d67732b..a85d95c 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -51,7 +51,7 @@ impl ExecutorSpawner for MockSpawner { let addr = SocketAddr::from(([0, 0, 0, 0], 4000 + id as u16)); // send worker url to rx - let _ = tx.send(addr.clone()); + let _ = tx.send(addr); // Start the server axum::Server::bind(&addr) diff --git a/src/executor/mod.rs b/src/executor/mod.rs index ceca43a..3d1b030 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -9,13 +9,11 @@ pub use local_spawner::LocalSpawner; pub use mock_spawner::MockSpawner; pub use spawner::ExecutorSpawner; -use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; -use num_bigint::BigUint; use reqwest::Client; use std::error::Error; -use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node}; +use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; +use summa_backend::merkle_sum_tree::MerkleSumTree; #[derive(Clone)] pub struct Executor { @@ -41,24 +39,6 @@ impl Executor { self.id.clone() } - fn parse_fp_from_hex(hex_str: &str) -> Fp { - let bigint = BigUint::parse_bytes(&hex_str[2..].as_bytes(), 16).unwrap(); - Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() - } - - fn convert_json_to_node(json_node: JsonNode) -> Node { - let hash = Self::parse_fp_from_hex(&json_node.hash); - let balances = json_node - .balances - .iter() - .map(|balance| Self::parse_fp_from_hex(balance)) - .collect::>() - .try_into() - .expect("Incorrect number of balances"); - - Node { hash, balances } - } - pub async fn generate_tree( &self, json_entries: Vec, @@ -76,36 +56,7 @@ impl Executor { .await .map_err(|err| Box::new(err) as Box)?; - let entries = json_entries - .iter() - .map(|entry| { - let mut balances: [BigUint; N_ASSETS] = - std::array::from_fn(|_| BigUint::from(0u32)); - entry.balances.iter().enumerate().for_each(|(i, balance)| { - balances[i] = balance.parse::().unwrap(); - }); - - Entry::::new(entry.username.clone(), balances).unwrap() - }) - .collect::>>(); - - // Convert JsonMerkleSumTree to MerkleSumTree - let tree = MerkleSumTree:: { - root: Self::convert_json_to_node(json_tree.root), - nodes: json_tree - .nodes - .iter() - .map(|nodes| { - nodes - .iter() - .map(|node| Self::convert_json_to_node(node.clone())) - .collect() - }) - .collect(), - depth: json_tree.depth, - entries, - is_sorted: false, - }; + let tree = json_tree.to_mst(); Ok(tree) } diff --git a/src/executor/spawner.rs b/src/executor/spawner.rs index 4f482f0..fb5a38a 100644 --- a/src/executor/spawner.rs +++ b/src/executor/spawner.rs @@ -3,57 +3,57 @@ use std::{future::Future, pin::Pin}; use crate::executor::Executor; pub trait ExecutorSpawner { - /// Spawns an executor asynchronously. - /// - /// This method initializes an Executor and returns a Future that resolves to the Executor. - /// - /// To achieve this asynchronously (outside of an async trait function), we use a one-time channel (`oneshot`) to deliver the variables to the Future. - /// - /// Internally, it performs the following codelines: - /// - /// 1. Uses a `oneshot` channel for sending the variables from the spawned async task. - /// ``` - /// let (tx, rx) = oneshot::channel(); - /// ``` - /// 2. Clones necessary variables (url, name and so on) to move them into the async block. - /// ``` - /// let url = self.url.clone(); - /// ``` - /// 3. Spawns an asynchronous task (`tokio::spawn`) that asynchronously creates a worker and sends back its information. - /// ``` - /// tokio::spawn(async move { - /// if let Ok(worker_info) = - /// Spawner::create_worker(url).await - /// { - /// let _ = tx.send(worker_info); - /// } - /// }); - /// Note that, the `create_worker` is typically declared in the `Spawner` struct that has `ExecutorSpawner` trait. - /// 4. Returns a Future that, upon completion, provides an Executor connected to the newly spawned worker. - /// ``` - /// Box::pin(async move { - /// let url = rx.await.expect("Failed to receive worker URL"); - /// Executor::new(url, None); - /// }); - /// ``` - /// - /// Returns: - /// - `Pin + Send>>`: A Future that, when awaited, yields an Executor instance and spawns a worker. - /// + // Spawns an executor asynchronously. + // + // This method initializes an Executor and returns a Future that resolves to the Executor. + // + // To achieve this asynchronously (outside of an async trait function), we use a one-time channel ('oneshot`) to deliver the variables to the Future. + // + // Internally, it performs the following codelines: + // + // 1. Uses a 'oneshot'channel for sending the variables from the spawned async task. + // ``` + // let (tx, rx) = oneshot::channel(); + // ``` + // 2. Clones necessary variables (url, name and so on) to move them into the async block. + // ``` + // let url = self.url.clone(); + // ``` + // 3. Spawns an asynchronous task (`tokio::spawn`) that asynchronously creates a worker and sends back its information. + // ``` + // tokio::spawn(async move { + // if let Ok(worker_info) = + // Spawner::create_worker(url).await + // { + // let _ = tx.send(worker_info); + // } + // }); + // Note that, the "create_worker" is typically declared in the "Spawner" struct that has "ExecutorSpawner"trait. + // 4. Returns a Future that, upon completion, provides an Executor connected to the newly spawned worker. + // ``` + // Box::pin(async move { + // let url = rx.await.expect("Failed to receive worker URL"); + // Executor::new(url, None); + // }); + // ``` + // + // Returns: + // - `Pin + Send>>`: A Future that, when awaited, yields an Executor instance and spawns a worker. + // fn spawn_executor(&self) -> Pin + Send>>; - /// Terminates all spawned executors (and/or workers) asynchronously. - /// - /// This method is responsible for gracefully shutting down all active executors (and/or workers) by calling - /// To do this, the `Spawner` may needs some fields for storing some accessing point to the workers, which are spawned with the executors. - /// For deliver variables to Future results, use a channel like the pattern at `spawn_executor` - /// - /// The termination process typically involves: - /// - Iterating through all active Executors and workers. - /// - Invoking kind of `shutdown` on each executors and workers to initiate their shutdown. - /// - Awaiting the completion of all shutdown operations. - /// - /// Returns: - /// - `Pin + Send>>`: A Future that, when awaited, indicates that all executors (and/or workers) have been terminated. + // Terminates all spawned executors (and/or workers) asynchronously. + // + // This method is responsible for gracefully shutting down all active executors (and/or workers) by calling + // To do this, the "Spawner"may needs some fields for storing some accessing point to the workers, which are spawned with the executors. + // For deliver variables to Future results, use a channel like the pattern at 'spawn_executor'. + // + // The termination process typically involves: + // - Iterating through all active Executors and workers. + // - Invoking kind of 'shutdown'on each executors and workers to initiate their shutdown. + // - Awaiting the completion of all shutdown operations. + // + // Returns: + // - `Pin + Send>>`: A Future that, when awaited, indicates that all executors (and/or workers) have been terminated. fn terminate_executors(&self) -> Pin + Send>>; } diff --git a/src/executor/test.rs b/src/executor/test.rs index b2cd792..5279191 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -9,7 +9,6 @@ mod test { #[tokio::test] async fn test_executor() -> Result<(), Box> { let spawner = MockSpawner::new(None); - let executor = spawner.spawn_executor().await; let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); diff --git a/src/json_mst.rs b/src/json_mst.rs new file mode 100644 index 0000000..fdd059b --- /dev/null +++ b/src/json_mst.rs @@ -0,0 +1,124 @@ +use num_bigint::BigUint; +use serde::{Deserialize, Serialize}; + +use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; + +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonEntry { + pub username: String, + pub balances: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonNode { + pub hash: String, + pub balances: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonMerkleSumTree { + pub root: JsonNode, + pub nodes: Vec>, + pub depth: usize, + pub entries: Vec, + pub is_sorted: bool, +} + +pub fn convert_node_to_json(node: &Node) -> JsonNode { + JsonNode { + hash: format!("{:?}", node.hash), + balances: node.balances.iter().map(|b| format!("{:?}", b)).collect(), + } +} + +fn parse_fp_from_hex(hex_str: &str) -> Fp { + let bigint = BigUint::parse_bytes(hex_str[2..].as_bytes(), 16).unwrap(); + Fp::from_str_vartime(&bigint.to_str_radix(10)).unwrap() +} + +impl JsonEntry { + pub fn new(username: String, balances: Vec) -> Self { + JsonEntry { username, balances } + } + + pub fn to_entry(&self) -> Entry { + let mut balances: [BigUint; N_ASSETS] = std::array::from_fn(|_| BigUint::from(0u32)); + self.balances.iter().enumerate().for_each(|(i, balance)| { + balances[i] = balance.parse::().unwrap(); + }); + + Entry::::new(self.username.clone(), balances).unwrap() + } +} + +impl JsonNode { + pub fn to_node(&self) -> Node { + let hash = parse_fp_from_hex(&self.hash); + let balances = self + .balances + .iter() + .map(|balance| parse_fp_from_hex(balance)) + .collect::>() + .try_into() + .expect("Incorrect number of balances"); + + Node { hash, balances } + } +} + +impl JsonMerkleSumTree { + pub fn from_tree( + tree: MerkleSumTree, + ) -> Self { + let root = convert_node_to_json(tree.root()); + let nodes = tree + .nodes() + .iter() + .map(|node| node.iter().map(convert_node_to_json).collect()) + .collect(); + let entries = tree + .entries() + .iter() + .map(|entry| { + JsonEntry::new( + entry.username().to_string(), + entry.balances().iter().map(|b| b.to_string()).collect(), + ) + }) + .collect(); + + JsonMerkleSumTree { + root, + nodes, + depth: *tree.depth(), + entries, + is_sorted: tree.is_sorted, + } + } + + pub fn to_mst( + &self, + ) -> MerkleSumTree { + let root: Node = self.root.to_node::(); + let nodes = self + .nodes + .iter() + .map(|node| node.iter().map(|n| n.to_node()).collect()) + .collect(); + let entries = self + .entries + .iter() + .map(|entry| entry.to_entry::()) + .collect(); + + MerkleSumTree:: { + root, + nodes, + depth: self.depth, + entries, + is_sorted: self.is_sorted, + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 950d5b0..bd2a152 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,28 +1,6 @@ #![feature(generic_const_exprs)] pub mod aggregation_merkle_sum_tree; pub mod executor; +pub mod json_mst; pub mod mini_tree_generator; pub mod orchestrator; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonNode { - pub hash: String, - pub balances: Vec, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonEntry { - pub balances: Vec, - pub username: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct JsonMerkleSumTree { - pub root: JsonNode, - pub nodes: Vec>, - pub depth: usize, - pub entries: Vec, - pub is_sorted: bool, -} diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index e8d751b..6abbfbc 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -1,35 +1,21 @@ use axum::{extract::Json, http::StatusCode, response::IntoResponse}; use const_env::from_env; -use num_bigint::BigUint; -use crate::{JsonEntry, JsonMerkleSumTree, JsonNode}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; +use crate::json_mst::{convert_node_to_json, JsonEntry, JsonMerkleSumTree}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Tree}; #[from_env] const N_ASSETS: usize = 2; #[from_env] const N_BYTES: usize = 14; -fn convert_node_to_json(node: &Node) -> JsonNode { - JsonNode { - hash: format!("{:?}", node.hash), - balances: node.balances.iter().map(|b| format!("{:?}", b)).collect(), - } -} - pub async fn create_mst( Json(json_entries): Json>, ) -> Result)> { // Convert `JsonEntry` -> `Entry` let entries = json_entries .iter() - .map(|entry| { - let mut balances: [BigUint; N_ASSETS] = std::array::from_fn(|_| BigUint::from(0u32)); - entry.balances.iter().enumerate().for_each(|(i, balance)| { - balances[i] = balance.parse::().unwrap(); - }); - Entry::new(entry.username.clone(), balances).unwrap() - }) + .map(|entry| entry.to_entry()) .collect::>>(); #[cfg(not(test))] @@ -48,24 +34,7 @@ pub async fn create_mst( ); // Convert `MerkleSumTree` to `JsonMerkleSumTree` - let json_tree = JsonMerkleSumTree { - root: convert_node_to_json(&tree.root()), - nodes: tree - .nodes() - .iter() - .map(|layer| layer.iter().map(convert_node_to_json).collect()) - .collect(), - depth: tree.depth().clone(), - entries: tree - .entries() - .iter() - .map(|entry| JsonEntry { - balances: entry.balances().iter().map(|b| b.to_string()).collect(), - username: entry.username().to_string(), - }) - .collect(), - is_sorted: false, // Always false because sorted entries inside minitree is meaningless - }; + let json_tree = JsonMerkleSumTree::from_tree(tree); Ok((StatusCode::OK, Json(json_tree))) } diff --git a/src/orchestrator/entry_csv_parser.rs b/src/orchestrator/entry_csv_parser.rs index ee99764..bacf4ea 100644 --- a/src/orchestrator/entry_csv_parser.rs +++ b/src/orchestrator/entry_csv_parser.rs @@ -1,7 +1,7 @@ use serde::Deserialize; use std::{error::Error, fs::File, path::Path}; -use super::super::JsonEntry; +use crate::json_mst::JsonEntry; // From summa_solvency package #[derive(Debug, Deserialize)] @@ -31,10 +31,10 @@ pub fn entry_parser, const N_ASSETS: usize, const N_BYTES: usize> Err(e) => return Err(Box::new(e) as Box), }; - let entry = JsonEntry { - username: record.username, - balances: record.balances.split(',').map(|b| b.to_string()).collect(), - }; + let entry = JsonEntry::new( + record.username, + record.balances.split(',').map(|b| b.to_string()).collect(), + ); json_entries.push(entry); } diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index b7b901f..6999345 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -56,7 +56,7 @@ impl Orchestrator Orchestrator::new( Box::new(spawner), vec![ From 8634a91613473156447115c788358e84fbfc6fad Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 30 Nov 2023 18:00:28 +0000 Subject: [PATCH 15/32] fix: assign unused port on mock server --- src/executor/mock_spawner.rs | 23 ++++++++++++----------- src/mini_tree_generator.rs | 4 ++-- src/orchestrator/test.rs | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index a85d95c..c2680b9 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -48,16 +48,17 @@ impl ExecutorSpawner for MockSpawner { tokio::spawn(async move { let app = Router::new().route("/", post(create_mst)); - let addr = SocketAddr::from(([0, 0, 0, 0], 4000 + id as u16)); + // Bind to port 0 to let the OS choose a random port + let addr = SocketAddr::from(([127, 0, 0, 1], 0)); - // send worker url to rx - let _ = tx.send(addr); + let server = axum::Server::bind(&addr) + .serve(app.into_make_service()); - // Start the server - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + // Send worker url to rx + let _ = tx.send(server.local_addr()); + + // Start server + server.await.unwrap(); }); // Return a Future that resolves to Executor @@ -96,14 +97,14 @@ mod tests { #[tokio::test] async fn test_with_given_url() { - let urls = vec!["127.0.0.1:7878".to_string()]; + let urls = vec!["192.168.0.1:65535".to_string()]; let spawner = MockSpawner::new(Some(urls)); // Spawn 2 executors let executor_1 = spawner.spawn_executor().await; let executor_2 = spawner.spawn_executor().await; - assert_eq!(executor_1.get_url(), "http://127.0.0.1:7878"); - assert_eq!(executor_2.get_url(), "http://0.0.0.0:4001"); + assert_eq!(executor_1.get_url(), "http://192.168.0.1:65535"); + assert_ne!(executor_2.get_url(), "http://192.168.0.1:65535"); } } diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index 6abbfbc..df7f1b3 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -1,8 +1,8 @@ use axum::{extract::Json, http::StatusCode, response::IntoResponse}; use const_env::from_env; -use crate::json_mst::{convert_node_to_json, JsonEntry, JsonMerkleSumTree}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Tree}; +use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; +use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree}; #[from_env] const N_ASSETS: usize = 2; diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 644017d..4ccf383 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -55,7 +55,7 @@ mod test { #[tokio::test] async fn test_none_exist_worker() { - let non_exist_worker_url = vec!["127.0.0.1:7878".to_string()]; + let non_exist_worker_url = vec!["127.0.0.1:40".to_string()]; // unsignable port let spawner = MockSpawner::new(Some(non_exist_worker_url)); let orchestrator = Orchestrator::<2, 14>::new( From fc17fc7cb40f85556a5eb67b88ac4145772be726 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 1 Dec 2023 05:38:47 +0000 Subject: [PATCH 16/32] feat: finish cloud spawner --- Cargo.lock | 111 +++++++++++++++++++++++ Cargo.toml | 6 ++ docker-compose.yml | 13 +-- src/executor/cloud_spawner.rs | 161 ++++++++++++++++++++++++---------- src/executor/mock_spawner.rs | 6 +- src/executor/mod.rs | 2 +- 6 files changed, 242 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e148f1..f69f3f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -871,6 +871,41 @@ dependencies = [ "cipher", ] +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", +] + [[package]] name = "der" version = "0.7.8" @@ -891,6 +926,37 @@ dependencies = [ "serde", ] +[[package]] +name = "derive_builder" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -973,6 +1039,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "docker-compose-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e06f731bc05616203869650c1a4f2c12d97edc3eef58f8c6a51fe430d31ad8ba" +dependencies = [ + "derive_builder", + "indexmap 2.1.0", + "serde", + "serde_yaml", +] + [[package]] name = "dunce" version = "1.0.4" @@ -2089,6 +2167,12 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.4.0" @@ -3784,6 +3868,19 @@ dependencies = [ "time", ] +[[package]] +name = "serde_yaml" +version = "0.9.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" +dependencies = [ + "indexmap 2.1.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "sha2" version = "0.10.8" @@ -4009,6 +4106,12 @@ dependencies = [ "precomputed-hash", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strum" version = "0.25.0" @@ -4058,6 +4161,7 @@ dependencies = [ "bollard", "const_env", "csv", + "docker-compose-types", "futures", "halo2_proofs", "num-bigint 0.4.4", @@ -4065,6 +4169,7 @@ dependencies = [ "reqwest", "serde", "serde_json", + "serde_yaml", "summa-backend", "tokio", "tokio-util", @@ -4516,6 +4621,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "unsafe-libyaml" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" + [[package]] name = "untrusted" version = "0.7.1" diff --git a/Cargo.toml b/Cargo.toml index cfb254d..c071342 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,13 @@ rand = "0.8.5" futures = "0.3.29" bollard = "0.15.0" tokio-util = "0.7.10" +docker-compose-types = "0.6.1" +serde_yaml = "0.9.27" [[bin]] name = "mini-tree-server" path = "bin/mini_tree_server.rs" + +[[bin]] +name = "swarm" +path = "bin/docker-swarm.rs" diff --git a/docker-compose.yml b/docker-compose.yml index 0df2410..4cac8b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,20 @@ version: '3.8' services: - mini-tree: + mini_tree: image: sifnoc/summa-aggregation:mini-tree-v0.1 - ports: - - "4000-8000:4000" # To be sure the exposed ports are not used by other services + ports: # This does not effect to `CloudSpawner` configuration + - target: 4000 + - published: 4000 + protocol: tcp + mode: host deploy: placement: constraints: - node.role == worker networks: - - summa_aggregation_network + - mini_tree_net networks: - summa_aggregation_network: + mini_tree_net: driver: overlay diff --git a/src/executor/cloud_spawner.rs b/src/executor/cloud_spawner.rs index 6f2f818..6b8eb4f 100644 --- a/src/executor/cloud_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -1,69 +1,134 @@ -use bollard::Docker; -use std::{ - future::Future, - pin::Pin, - sync::atomic::{AtomicUsize, Ordering}, +use bollard::models::{ + EndpointSpec, NetworkAttachmentConfig, ServiceSpec, TaskSpec, TaskSpecContainerSpec, + TaskSpecPlacement, }; +use bollard::service::{EndpointPortConfig, ListServicesOptions, UpdateServiceOptions}; +use bollard::Docker; +use docker_compose_types::Compose; +use std::{future::Future, pin::Pin}; use crate::executor::{Executor, ExecutorSpawner}; // TODO: the CouldSpawner can control services on swarm networks using docker API. -pub struct CouldSpawner { +pub struct CloudSpawner { docker: Docker, - request_counter: AtomicUsize, - starting_port: u16, + service_id: String, service_name: String, + exposed_port: i64, } -impl CouldSpawner { - pub fn new(service_name: String, starting_port: u16) -> Self { - CouldSpawner { - docker: Docker::connect_with_local_defaults().unwrap(), - request_counter: AtomicUsize::new(0), - starting_port, - service_name, +impl CloudSpawner { + pub async fn new( + service_name: &str, + compose_path: &str, + exposed_port: i64, + ) -> Result> { + let file_payload = std::fs::read_to_string(compose_path).unwrap(); + let compose = match serde_yaml::from_str::(&file_payload) { + Ok(c) => c, + Err(e) => panic!("Failed to parse docker-compose file: {}", e), + }; + + // Retrieve spec in docker-compose file + let service = compose + .services + .0 + .get(service_name) + .unwrap() + .as_ref() + .unwrap(); + let image_name = service.image.as_ref().unwrap(); + let replicas = service.deploy.as_ref().unwrap().replicas.unwrap(); + let placement = service.deploy.as_ref().unwrap().placement.as_ref().unwrap(); + + let docker = bollard::Docker::connect_with_local_defaults().unwrap(); + + // Checking service exist + let services = docker + .list_services(None::>) + .await?; + + let mut found_exist_service = false; + let mut service_id = String::new(); + services.iter().for_each(|service| { + if service_name == service.spec.as_ref().unwrap().name.as_ref().unwrap() { + found_exist_service = true; + service_id = service.id.as_ref().unwrap().to_string(); + } + }); + + let service_spec = ServiceSpec { + name: Some(String::from(service_name)), + task_template: Some(TaskSpec { + placement: Some(TaskSpecPlacement { + constraints: Some(placement.constraints.clone()), + ..Default::default() + }), + container_spec: Some(TaskSpecContainerSpec { + image: Some(image_name.to_string()), + ..Default::default() + }), + networks: Some(vec![NetworkAttachmentConfig { + target: Some("summa_mini_tree_net".to_string()), + ..Default::default() + }]), + ..Default::default() + }), + endpoint_spec: Some(EndpointSpec { + ports: Some(vec![EndpointPortConfig { + target_port: Some(4000), + published_port: Some(exposed_port), + ..Default::default() + }]), + ..Default::default() + }), + ..Default::default() + }; + + if found_exist_service { + println!( + "Service {:?} already exists, Will use the service", + service_name + ); + let update_service_options = UpdateServiceOptions { + version: 1234, // TODO: version control + ..Default::default() + }; + let update_response = docker + .update_service(service_name, service_spec, update_service_options, None) + .await?; + update_response.warnings.iter().for_each(|warning| { + println!("warning: {:?}", warning); + }); + } else { + // Use service_spec with bollard to create the service + let service_response = docker.create_service(service_spec, None).await?; + service_id = service_response.id.ok_or("Failed to get service ID")?; + println!("Service {:?} created", service_name); } + + Ok(CloudSpawner { + docker: Docker::connect_with_local_defaults().unwrap(), + service_id, + service_name: service_name.to_string(), + exposed_port, + }) } } -impl ExecutorSpawner for CouldSpawner { +impl ExecutorSpawner for CloudSpawner { fn spawn_executor(&self) -> Pin + Send>> { - // Return a Future that resolves to Executor - let worker_port = - self.starting_port + self.request_counter.fetch_add(1, Ordering::SeqCst) as u16; - - Box::pin(async move { - let worker_url = format!("http://localhost:{}", worker_port); - Executor::new(worker_url, None) - }) + // The traffic is routed to the service by the swarm manager. + // So, All executor can use the same exposed endpoint for distributing task to multiple workers. + let endpoint = self.exposed_port; + Box::pin( + async move { Executor::new(format!("http://localhost:{}", endpoint), None) }, + ) } fn terminate_executors(&self) -> Pin + Send>> { Box::pin(async move { - // Nothing to do if no executors are running + // Nothing to do }) } } - -#[cfg(test)] -mod tests { - use super::*; - use std::sync::atomic::AtomicUsize; - - #[tokio::test] - async fn test_service_spawner() { - let spawner = CouldSpawner { - docker: Docker::connect_with_local_defaults().unwrap(), - request_counter: AtomicUsize::new(0), - starting_port: 4000, - service_name: "test_service".to_string(), - }; - - // Spawn 2 executors - let executor_1 = spawner.spawn_executor().await; - let executor_2 = spawner.spawn_executor().await; - - assert_eq!("http://localhost:4000", executor_1.get_url()); - assert_eq!("http://localhost:4001", executor_2.get_url()); - } -} diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index c2680b9..8d4676e 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -51,8 +51,7 @@ impl ExecutorSpawner for MockSpawner { // Bind to port 0 to let the OS choose a random port let addr = SocketAddr::from(([127, 0, 0, 1], 0)); - let server = axum::Server::bind(&addr) - .serve(app.into_make_service()); + let server = axum::Server::bind(&addr).serve(app.into_make_service()); // Send worker url to rx let _ = tx.send(server.local_addr()); @@ -90,7 +89,7 @@ mod tests { let executor_2 = spawner.spawn_executor().await; // Sleep 2 seconds for the container to be ready - tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; assert!(!executor_1.get_url().is_empty()); assert!(!executor_2.get_url().is_empty()); } @@ -104,6 +103,7 @@ mod tests { let executor_1 = spawner.spawn_executor().await; let executor_2 = spawner.spawn_executor().await; + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; assert_eq!(executor_1.get_url(), "http://192.168.0.1:65535"); assert_ne!(executor_2.get_url(), "http://192.168.0.1:65535"); } diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 3d1b030..0496838 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -4,7 +4,7 @@ mod mock_spawner; mod spawner; mod test; -pub use cloud_spawner::CouldSpawner; +pub use cloud_spawner::CloudSpawner; pub use local_spawner::LocalSpawner; pub use mock_spawner::MockSpawner; pub use spawner::ExecutorSpawner; From a049680cf453a4690399f4ce78cfff04d57c7a9d Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 1 Dec 2023 22:41:10 +0000 Subject: [PATCH 17/32] feat: added test case for CloudSpawner; Update README --- Cargo.lock | 91 --------------- Cargo.toml | 5 - README.md | 34 +++--- docker-compose.yml | 12 +- scripts/test_sending_entry.sh | 2 +- src/executor/cloud_spawner.rs | 203 ++++++++++++++++++++-------------- src/executor/mod.rs | 1 + src/executor/test.rs | 26 ++++- src/executor/utils.rs | 159 ++++++++++++++++++++++++++ src/orchestrator/test.rs | 62 +++++++---- 10 files changed, 371 insertions(+), 224 deletions(-) create mode 100644 src/executor/utils.rs diff --git a/Cargo.lock b/Cargo.lock index f69f3f6..475fabd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -871,41 +871,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - [[package]] name = "der" version = "0.7.8" @@ -926,37 +891,6 @@ dependencies = [ "serde", ] -[[package]] -name = "derive_builder" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder_macro" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" -dependencies = [ - "derive_builder_core", - "syn 1.0.109", -] - [[package]] name = "derive_more" version = "0.99.17" @@ -1039,18 +973,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "docker-compose-types" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e06f731bc05616203869650c1a4f2c12d97edc3eef58f8c6a51fe430d31ad8ba" -dependencies = [ - "derive_builder", - "indexmap 2.1.0", - "serde", - "serde_yaml", -] - [[package]] name = "dunce" version = "1.0.4" @@ -2167,12 +2089,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.4.0" @@ -4106,12 +4022,6 @@ dependencies = [ "precomputed-hash", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strum" version = "0.25.0" @@ -4161,7 +4071,6 @@ dependencies = [ "bollard", "const_env", "csv", - "docker-compose-types", "futures", "halo2_proofs", "num-bigint 0.4.4", diff --git a/Cargo.toml b/Cargo.toml index c071342..a0d5f95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,13 +20,8 @@ rand = "0.8.5" futures = "0.3.29" bollard = "0.15.0" tokio-util = "0.7.10" -docker-compose-types = "0.6.1" serde_yaml = "0.9.27" [[bin]] name = "mini-tree-server" path = "bin/mini_tree_server.rs" - -[[bin]] -name = "swarm" -path = "bin/docker-swarm.rs" diff --git a/README.md b/README.md index 0966380..6ccaed8 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,16 @@ The primary objective of Summa Aggregation is to enable efficient scaling in the For further optimization in Summa Aggregation, we introduced the AggregationMerkleSumTree component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. +## Diagram of Parallel Merkle Sum Tree Construction + +The diagram illustrates a distributed approach to constructing the `AggregatedMerkleSumTree`, where an orchestrator delegates tasks to executors, which are then processed in parallel by workers. The following sections will explain the roles of the Orchestrator, Executor, Worker and ExecutorSpawner. + ![diagram](/Orchestrator-diagram.png) ## Orchestrator The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving of tasks in the generation of Merkle sum tree. -The final result of the Orchestrator is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the Workers. +The final result of the Orchestrator is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the Workers. The Worker in here refers to a container running `mini-tree-server`. Key functions of the Orchestrator include: @@ -37,38 +41,32 @@ Key aspects of the Executor's role include: - **Communication Bridge**: The Executor serves as a communication bridge within the data pipeline. It relays processed data, `mini-tree`, from Workers back to the Orchestrator. -The Worker called in here, mostly point out a container that runs `mini-tree-server`. - ## ExecutorSpawner -The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances and Workers. The latter function as the `mini-tree-server`. It's important to note, however, that managing workers through the `ExecutorSpawner` is not mandatory. - -Note that managing workers through the `ExecutorSpawner` is not mandatory. +The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances and Workers. The latter function as the `mini-tree-server`. -In the Summa-Aggregation, there are three types of `ExecutorSpawner`: +In the Summa-Aggregation, there are three types of `ExecutorSpawner` provided: - **MockSpawner**: Primarily used for testing, this spawner initializes Executors suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a `mini-tree-server` locally. - **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize Executors and Workers in local Docker environments. -- **CloudSpawner**: Ideal for scenarios with access to cloud resources, this spawner functions same like to the `LocalSpawner`, but with Workers running in the cloud. +- **CloudSpawner**: Ideal for scenarios where cloud resources are accessed. This spawner functions similarly to the `LocalSpawner`, but it initializes workers on remote machines. In particular, it can be run on a Swarm network using the `docker-compose` file, which is a specific configuration for the Swarm network. Additionally, it can run using existing worker node URLs if the configuration file is not set. -While both `LocalSpawner` and `CloudSpawner` manage Docker containers, they differ in operational context. `LocalSpawner` handles individual containers directly, providing simplicity but limited scalability. In contrast, `CloudSpawner` employs Docker Swarm to manage containers as services, thereby offering enhanced scalability and resilience, crucial for larger workloads. +The Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability. For more details about Docker Swarm mode, refer to the [official documentation](https://docs.docker.com/engine/swarm/). -The `ExecutorSpawner` is a trait with minimal requirements, specifically the Rust trait methods `spawn_executor` and `terminate_executor`. You can create your own spawner and use it with the Orchestrator. +While both `LocalSpawner` and `CloudSpawner` manage Docker containers, they differ in operational context. `LocalSpawner` handles individual containers directly, providing simplicity but limited scalability. In contrast, `CloudSpawner` may employs Docker Swarm to manage containers as services, thereby offering enhanced scalability and resilience, crucial for larger workloads. -## Diagram of Parallel Merkle Sum Tree Construction - -The diagram illustrates a distributed approach to constructing the `AggregatedMerkleSumTree`, where an orchestrator delegates tasks to executors, which are then processed in parallel by workers. +It's important to note, however, that managing workers through these three type of `ExecutorSpawner`, is not mandatory. Technically, the `ExecutorSpawner` is a trait with minimal requirements for the Orchestrator, specifically the methods `spawn_executor` and `terminate_executor`. You can create your own spawner and use it with the Orchestrator. ## Orchestrating on Swarm -Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability. - -For more details about Docker Swarm mode, refer to the [official documentation](https://docs.docker.com/engine/swarm/). +For Summa-Aggregation purposes, you need to prepare a distributed environment where Workers can run on remote machines (referred to as 'Nodes'). An example of this is using Swarm, as mentioned in the previous section. This section will introduce how to set up Swarm mode and test it using Docker CLI. ### Preparing Docker Swarm Mode +In Summa-Aggregation, the `CloudSpawner` is designed to operate on Docker Swarm. It requires the URLs of Workers for initiation, which are the IP addresses of the Workers joining the Swarm network as per the instructions below. + You can initialize your Docker environment in Swarm mode, which is essential for managing a cluster of Docker nodes as a single virtual system. Note that setting up Swarm mode may not work well depending on the OS, as network configurations differ across operating systems. @@ -112,9 +110,9 @@ Note that setting up Swarm mode may not work well depending on the OS, as networ You are ready to spawn more workers! -### Spawning More Workers +### Spawning More Workers with CloudSpawner -You can spawning the or managing worker by `CloudSpanwer` without using Docker CLI command, which will explain in here. but Even well configured swarm network following previous section. It does not guarentee spawning worker as well. +You can spawning or managing worker by `CloudSpawner` without using Docker CLI command, which will explain in here. but Even well configured swarm network following previous section. It does not guarentee spawning worker as well. In this section, you can verify that you can create a 'mini-tree-server' on any node. Before introducing the specific instructions, it's important to understand that in Docker Swarm mode, containers are managed as services rather than by individual names. diff --git a/docker-compose.yml b/docker-compose.yml index 4cac8b1..62a96d1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,20 @@ version: '3.8' +# CloudSpawner only reads from the first element of lists services: mini_tree: image: sifnoc/summa-aggregation:mini-tree-v0.1 - ports: # This does not effect to `CloudSpawner` configuration - - target: 4000 + ports: - published: 4000 - protocol: tcp - mode: host + target: 4000 deploy: + replicas: 2 placement: constraints: - node.role == worker networks: - - mini_tree_net + - mini_tree networks: - mini_tree_net: + mini_tree: driver: overlay diff --git a/scripts/test_sending_entry.sh b/scripts/test_sending_entry.sh index c06224e..034378a 100644 --- a/scripts/test_sending_entry.sh +++ b/scripts/test_sending_entry.sh @@ -10,7 +10,7 @@ else fi # The curl command with the variable PORT -curl -X POST http://localhost:$PORT/ \ +curl -X POST http://localhost:$PORT \ -vvv \ -H "Content-Type: application/json" \ -d '[ diff --git a/src/executor/cloud_spawner.rs b/src/executor/cloud_spawner.rs index 6b8eb4f..65becc5 100644 --- a/src/executor/cloud_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -1,97 +1,116 @@ -use bollard::models::{ - EndpointSpec, NetworkAttachmentConfig, ServiceSpec, TaskSpec, TaskSpecContainerSpec, - TaskSpecPlacement, +use std::error::Error; +use std::sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, }; -use bollard::service::{EndpointPortConfig, ListServicesOptions, UpdateServiceOptions}; -use bollard::Docker; -use docker_compose_types::Compose; use std::{future::Future, pin::Pin}; +use bollard::network::ListNetworksOptions; +use bollard::service::{ListServicesOptions, UpdateServiceOptions}; +use tokio::sync::oneshot; + +use crate::executor::utils::get_specs_from_compose; use crate::executor::{Executor, ExecutorSpawner}; -// TODO: the CouldSpawner can control services on swarm networks using docker API. pub struct CloudSpawner { - docker: Docker, - service_id: String, - service_name: String, + service_info: Option<(String, String)>, + worker_counter: Arc, + worker_node_url: Vec, exposed_port: i64, } +/// `CloudSpawner` is responsible for managing the lifecycle of workers in a cloud environment. +/// +/// - Without `service_info`, `CloudSpawner` does not manage `Worker` instances directly. +/// This means it does not control or interact with Docker API for worker management. +/// - With `service_info`, `CloudSpawner` requires a `docker-compose` file. The `CloudSpawner` will +/// use the provided `service_info` to manage Docker services and networks, allowing dynamic scaling and orchestration of workers. impl CloudSpawner { - pub async fn new( - service_name: &str, - compose_path: &str, + pub fn new( + service_info: Option<(String, String)>, // If the user want to use docker-compose.yml for docker swarm + worker_node_url: Vec, exposed_port: i64, - ) -> Result> { - let file_payload = std::fs::read_to_string(compose_path).unwrap(); - let compose = match serde_yaml::from_str::(&file_payload) { - Ok(c) => c, - Err(e) => panic!("Failed to parse docker-compose file: {}", e), - }; - - // Retrieve spec in docker-compose file - let service = compose - .services - .0 - .get(service_name) - .unwrap() - .as_ref() - .unwrap(); - let image_name = service.image.as_ref().unwrap(); - let replicas = service.deploy.as_ref().unwrap().replicas.unwrap(); - let placement = service.deploy.as_ref().unwrap().placement.as_ref().unwrap(); + ) -> Self { + assert!(!worker_node_url.is_empty(), "Worker node url is empty"); + CloudSpawner { + service_info, + worker_counter: Arc::new(AtomicUsize::new(0)), + worker_node_url, + exposed_port, + } + } + async fn create_service(service_name: &str, compose_path: &str) -> Result<(), Box> { let docker = bollard::Docker::connect_with_local_defaults().unwrap(); - // Checking service exist + // Retrieve network options and service spec from docker-compose.yml + let (network_options, service_spec) = + get_specs_from_compose(service_name, compose_path).unwrap(); + + // Check network exist then create if not exist + let list_network = docker + .list_networks(None::>) + .await?; + + let mut found_target_network = false; + list_network.iter().for_each(|network| { + if service_name == *network.name.as_ref().unwrap() { + found_target_network = true; + } + }); + + if !found_target_network { + match docker.create_network(network_options).await { + Ok(result) => println!("Network created: {:?}", result), + Err(error) => eprintln!("Error creating network: {}", error), + } + } + + // Checking service exist then create if not exist let services = docker .list_services(None::>) .await?; let mut found_exist_service = false; - let mut service_id = String::new(); + let mut service_version = 0; + services.iter().for_each(|service| { - if service_name == service.spec.as_ref().unwrap().name.as_ref().unwrap() { + let retrieved_service_spec = service + .spec + .as_ref() + .ok_or::>("No spec in service on Docker".into()) + .unwrap(); + let retrieved_service_name = retrieved_service_spec + .name + .as_ref() + .ok_or::>("No name in service.spec on Docker".into()) + .unwrap(); + + if service_name == *retrieved_service_name { found_exist_service = true; - service_id = service.id.as_ref().unwrap().to_string(); + + // Update service version + let retrieved_service_version = service + .version + .as_ref() + .ok_or::>("No version in service on Docker".into()) + .unwrap(); + if let Some(exist_version) = retrieved_service_version.index { + service_version = exist_version + 1; + } } }); - let service_spec = ServiceSpec { - name: Some(String::from(service_name)), - task_template: Some(TaskSpec { - placement: Some(TaskSpecPlacement { - constraints: Some(placement.constraints.clone()), - ..Default::default() - }), - container_spec: Some(TaskSpecContainerSpec { - image: Some(image_name.to_string()), - ..Default::default() - }), - networks: Some(vec![NetworkAttachmentConfig { - target: Some("summa_mini_tree_net".to_string()), - ..Default::default() - }]), - ..Default::default() - }), - endpoint_spec: Some(EndpointSpec { - ports: Some(vec![EndpointPortConfig { - target_port: Some(4000), - published_port: Some(exposed_port), - ..Default::default() - }]), - ..Default::default() - }), - ..Default::default() - }; - - if found_exist_service { + if !found_exist_service { + docker.create_service(service_spec, None).await?; + println!("Service {:?} created", service_name); + } else { println!( "Service {:?} already exists, Will use the service", service_name ); let update_service_options = UpdateServiceOptions { - version: 1234, // TODO: version control + version: service_version, ..Default::default() }; let update_response = docker @@ -100,35 +119,55 @@ impl CloudSpawner { update_response.warnings.iter().for_each(|warning| { println!("warning: {:?}", warning); }); - } else { - // Use service_spec with bollard to create the service - let service_response = docker.create_service(service_spec, None).await?; - service_id = service_response.id.ok_or("Failed to get service ID")?; - println!("Service {:?} created", service_name); - } - - Ok(CloudSpawner { - docker: Docker::connect_with_local_defaults().unwrap(), - service_id, - service_name: service_name.to_string(), - exposed_port, - }) + }; + Ok(()) } } impl ExecutorSpawner for CloudSpawner { fn spawn_executor(&self) -> Pin + Send>> { + let (tx, rx) = oneshot::channel(); + + let current_worker_counter = self.worker_counter.load(Ordering::SeqCst); + + // Create service if the worker counter is 0, which means no executor is spawned. + if current_worker_counter == 0 && self.service_info.is_some() { + let (service_name, compose_path) = self.service_info.clone().unwrap(); + tokio::spawn(async move { + if let Err(e) = CloudSpawner::create_service(&service_name, &compose_path).await { + eprintln!("Error creating service: {}", e); + } else { + // Sleep for 5 seconds to wait for the service to be ready + std::thread::sleep(std::time::Duration::from_secs(5)); + let _ = tx.send(service_name.clone()); + println!("Service {} created", service_name); + } + }); + } + // The traffic is routed to the service by the swarm manager. // So, All executor can use the same exposed endpoint for distributing task to multiple workers. let endpoint = self.exposed_port; - Box::pin( - async move { Executor::new(format!("http://localhost:{}", endpoint), None) }, - ) + let node_url = self.worker_node_url[current_worker_counter].clone(); + let worker_counter = self.worker_counter.clone(); + Box::pin(async move { + if worker_counter.load(Ordering::SeqCst) == 0 { + let _ = rx.await; + } + worker_counter.fetch_add(1, Ordering::SeqCst); + Executor::new(format!("http://{}:{}", node_url, endpoint), None) + }) } fn terminate_executors(&self) -> Pin + Send>> { + let service_info = self.service_info.clone(); Box::pin(async move { - // Nothing to do + if let Some((service_name, _)) = service_info.clone() { + let docker = bollard::Docker::connect_with_local_defaults().unwrap(); + + docker.delete_service(&service_name).await.unwrap(); + docker.remove_network(&service_name).await.unwrap(); + } }) } } diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 0496838..c3978ec 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -3,6 +3,7 @@ mod local_spawner; mod mock_spawner; mod spawner; mod test; +mod utils; pub use cloud_spawner::CloudSpawner; pub use local_spawner::LocalSpawner; diff --git a/src/executor/test.rs b/src/executor/test.rs index 5279191..de74f53 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -3,9 +3,33 @@ mod test { use futures::future; use std::error::Error; - use crate::executor::{spawner::ExecutorSpawner, MockSpawner}; + use bollard::models::TaskSpecContainerSpec; + + use crate::executor::{spawner::ExecutorSpawner, utils::get_specs_from_compose, MockSpawner}; use crate::orchestrator::entry_parser; + #[test] + fn test_util_get_specs_from_compose() { + let (network_options, service_spec) = + get_specs_from_compose("mini_tree", "docker-compose.yml").unwrap(); + + let service_name = "mini_tree"; + assert_eq!(network_options.name, service_name); + assert_eq!(network_options.driver, "overlay"); + + assert_eq!(service_spec.name.unwrap(), service_name); + assert!(service_spec.mode.is_some()); + assert!(service_spec.task_template.is_some()); + assert!(service_spec.endpoint_spec.is_some()); + assert_eq!( + service_spec.task_template.unwrap().container_spec.unwrap(), + TaskSpecContainerSpec { + image: Some("sifnoc/summa-aggregation:mini-tree-v0.1".to_string()), + ..Default::default() + } + ); + } + #[tokio::test] async fn test_executor() -> Result<(), Box> { let spawner = MockSpawner::new(None); diff --git a/src/executor/utils.rs b/src/executor/utils.rs new file mode 100644 index 0000000..ecc0482 --- /dev/null +++ b/src/executor/utils.rs @@ -0,0 +1,159 @@ +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::error::Error; + +use bollard::models::{ + NetworkAttachmentConfig, ServiceSpec, ServiceSpecMode, ServiceSpecModeReplicated, TaskSpec, + TaskSpecContainerSpec, TaskSpecPlacement, +}; +use bollard::network::CreateNetworkOptions; +use bollard::service::{EndpointPortConfig, EndpointPortConfigPublishModeEnum, EndpointSpec}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct DockerCompose { + pub version: String, + pub services: HashMap, + pub networks: Option>, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Service { + pub image: String, + pub ports: Option>, + pub deploy: Option, + pub networks: Option>, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Port { + pub target: i64, + pub published: i64, + pub published_mode: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Deploy { + pub mode: Option, + pub placement: Option, + pub replicas: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Placement { + pub constraints: Option>, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Network { + driver: Option, +} + +// This helper function return `CreateNetworkOptions` and `ServiceSpec` from `docker-compose.yml` +pub fn get_specs_from_compose( + service_name: &str, + file_path: &str, +) -> Result<(CreateNetworkOptions, ServiceSpec), Box> { + let file_content = std::fs::read_to_string(file_path).expect("Unable to read file"); + let compose = serde_yaml::from_str::(&file_content)?; + + // Declare docker client & default labels + let mut labels = HashMap::new(); + labels.insert( + String::from("Summa"), + String::from("Dummy key / value for bollard"), + ); + + // Retrieve network options from docker-compose.yml + let mut network_options = CreateNetworkOptions::::default(); + compose + .networks + .ok_or("There is no network configuration") + .unwrap() + .iter() + .for_each(|(network_name, network)| { + if network_name == service_name { + network_options.name = network_name.to_string(); + network_options.driver = network.driver.clone().unwrap_or("overlay".to_string()); + network_options.labels = labels.clone(); + } + }); + + if network_options.name.is_empty() { + return Err(format!( + "Network name is empty, It may not exist network name: '{}' in docker-compose file", + service_name + ) + .into()); + } + + // Retrieve service spec from docker-compose.yml + let service_spec = match compose.services.get(service_name) { + Some(service) => { + // Parse these variables from docker-compose.yml + let ports = service.ports.as_ref().ok_or("There is no 'ports' field")?; + let endpoint_port_config = ports + .iter() + .map(|port| EndpointPortConfig { + target_port: Some(port.target), + published_port: Some(port.published), + publish_mode: Some(EndpointPortConfigPublishModeEnum::INGRESS), + ..Default::default() + }) + .collect::>(); + + let deploy = service + .deploy + .as_ref() + .ok_or("There is no 'deploy' field")?; + let parsed_replicas = deploy + .replicas + .ok_or("There is no 'replicas' under 'deploy' field")?; + let parsed_contraint = deploy + .placement + .as_ref() + .ok_or("There is no 'placement' field")? + .constraints + .as_ref() + .ok_or("There is no 'constraints' under 'placement' field")?; + + ServiceSpec { + name: Some(String::from(service_name)), + mode: Some(ServiceSpecMode { + replicated: Some(ServiceSpecModeReplicated { + replicas: Some(parsed_replicas), + }), + ..Default::default() + }), + task_template: Some(TaskSpec { + placement: Some(TaskSpecPlacement { + constraints: Some(parsed_contraint.to_owned()), + ..Default::default() + }), + container_spec: Some(TaskSpecContainerSpec { + image: Some(service.image.clone()), + ..Default::default() + }), + ..Default::default() + }), + endpoint_spec: Some(EndpointSpec { + mode: None, + ports: Some(endpoint_port_config), + }), + networks: Some(vec![NetworkAttachmentConfig { + target: Some(service_name.to_string()), + ..Default::default() + }]), + ..Default::default() + } + } + None => { + return Err(format!( + "Service name: '{}' not found in docker-compose file", + service_name + ) + .into()) + } + }; + + Ok((network_options, service_spec)) +} diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 4ccf383..4fcd908 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -1,28 +1,9 @@ #[cfg(test)] mod test { - use crate::executor::{LocalSpawner, MockSpawner}; + use crate::executor::{CloudSpawner, LocalSpawner, MockSpawner}; use crate::orchestrator::Orchestrator; use summa_backend::merkle_sum_tree::Tree; - #[tokio::test] - async fn test_with_containers() { - let spawner = LocalSpawner::new( - "summa-aggregation".to_string(), - "orchestrator_test".to_string(), - ); - - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } - #[tokio::test] async fn test_single_mock_worker() { let spawner = MockSpawner::new(None); @@ -68,4 +49,45 @@ mod test { let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); } + + #[cfg(feature = "docker")] + #[tokio::test] + async fn test_with_containers() { + let spawner = LocalSpawner::new( + "summa-aggregation".to_string(), + "orchestrator_test".to_string(), + ); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + } + + #[cfg(feature = "docker")] + #[tokio::test] + async fn test_with_swarm_service() { + let spawner = CloudSpawner::new( + Some(("mini_tree".to_string(), "docker-compose.yml".to_string())), + vec!["10.0.0.1".to_string(), "10.0.0.2".to_string()], + 4000, + ); + + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + } } From 118620293e61c2f11313f59f0ecfc3f50560e308 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Sun, 3 Dec 2023 13:47:46 +0000 Subject: [PATCH 18/32] feat: added aggregation example --- examples/aggregation_flow.rs | 59 ++++++++++++++++++++++++++++++++++++ src/orchestrator/mod.rs | 4 +-- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 examples/aggregation_flow.rs diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs new file mode 100644 index 0000000..1ec990f --- /dev/null +++ b/examples/aggregation_flow.rs @@ -0,0 +1,59 @@ +use std::error::Error; +use std::net::SocketAddr; +use axum::{routing::post, Router}; + +use summa_backend::{contracts::signer::{SummaSigner, AddressInput}, apis::round::Round, tests::initialize_test_env}; +use summa_aggregation::{executor::CloudSpawner, orchestrator::Orchestrator, mini_tree_generator::create_mst}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + // In this example, we will use local mini-tree server to generate mini-tree + let app = Router::new().route("/", post(create_mst)); + let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); + + // The CloudSpawner, when used with the Orchestrator, does not rely on a `docker-compose.yml` file or a `service_name` to create Workers. + // It solely utilizes the `worker_node_url`. Typically, in production environments, workers operate on remote nodes. + const LEVELS: usize = 2; + const N_ASSETS: usize = 2; + const N_BYTES: usize = 14; + + // For this demonstration, using the same URL address is acceptable. However, the number of URLs should match the number of executors. + let worker_node_urls = vec!["127.0.0.1".to_string(), "127.0.0.1".to_string()]; + let spawner = CloudSpawner::new(None, worker_node_urls, 4000); + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + // Number of Executor should be equal to number of worker_node_urls + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + + // The remaining steps are similar to the `summa-backend` example, specifically 'summa_solvency_flow'. + // For detailed information, refer to: https://github.com/summa-dev/summa-solvency/blob/master/backend/examples/summa_solvency_flow.rs + let (anvil, _, _, _, summa_contract) = initialize_test_env(None).await; + + let signer = SummaSigner::new( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + anvil.endpoint().as_str(), + AddressInput::Address(summa_contract.address()), + ).await?; + + // Once get the aggregation merkle sum tree, we can initialize the round. + let timestamp = 1u64; + let asset_csv = "examples/assets.csv"; + let params_path = "examples/hermez-raw-11"; + let round = Round::::new(&signer, Box::new(aggregation_merkle_sum_tree), asset_csv, params_path, timestamp).unwrap(); + + // Next, generate the proof of inclusion. + let inclusion_proof_of_user0 = round.get_proof_of_inclusion(0).unwrap(); + assert!(inclusion_proof_of_user0.get_public_inputs().len() > 0); // Check public input counts + + println!("Generated User 0 proof of inclusion"); + Ok(()) +} diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index 6999345..c0da829 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -17,7 +17,7 @@ pub struct Orchestrator { } impl Orchestrator { - fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { + pub fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { Self { executor_spawner, entry_csvs, @@ -58,7 +58,7 @@ impl Orchestrator Result, Box> From 4a4d71b619251382feb2e85b7992835221ecc2d6 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Mon, 4 Dec 2023 06:55:38 +0000 Subject: [PATCH 19/32] fix: clippy; feature flag to use nightly in example --- examples/aggregation_flow.rs | 25 ++++-- src/executor/test.rs | 136 ++++++++++++++--------------- src/orchestrator/test.rs | 163 +++++++++++++++++------------------ 3 files changed, 167 insertions(+), 157 deletions(-) diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index 1ec990f..0c618fe 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -1,9 +1,16 @@ +#![feature(generic_const_exprs)] +use axum::{routing::post, Router}; use std::error::Error; use std::net::SocketAddr; -use axum::{routing::post, Router}; -use summa_backend::{contracts::signer::{SummaSigner, AddressInput}, apis::round::Round, tests::initialize_test_env}; -use summa_aggregation::{executor::CloudSpawner, orchestrator::Orchestrator, mini_tree_generator::create_mst}; +use summa_aggregation::{ + executor::CloudSpawner, mini_tree_generator::create_mst, orchestrator::Orchestrator, +}; +use summa_backend::{ + apis::round::Round, + contracts::signer::{AddressInput, SummaSigner}, + tests::initialize_test_env, +}; #[tokio::main] async fn main() -> Result<(), Box> { @@ -42,13 +49,21 @@ async fn main() -> Result<(), Box> { "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", anvil.endpoint().as_str(), AddressInput::Address(summa_contract.address()), - ).await?; + ) + .await?; // Once get the aggregation merkle sum tree, we can initialize the round. let timestamp = 1u64; let asset_csv = "examples/assets.csv"; let params_path = "examples/hermez-raw-11"; - let round = Round::::new(&signer, Box::new(aggregation_merkle_sum_tree), asset_csv, params_path, timestamp).unwrap(); + let round = Round::::new( + &signer, + Box::new(aggregation_merkle_sum_tree), + asset_csv, + params_path, + timestamp, + ) + .unwrap(); // Next, generate the proof of inclusion. let inclusion_proof_of_user0 = round.get_proof_of_inclusion(0).unwrap(); diff --git a/src/executor/test.rs b/src/executor/test.rs index de74f53..c491437 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -1,70 +1,68 @@ -#[cfg(test)] -mod test { - use futures::future; - use std::error::Error; - - use bollard::models::TaskSpecContainerSpec; - - use crate::executor::{spawner::ExecutorSpawner, utils::get_specs_from_compose, MockSpawner}; - use crate::orchestrator::entry_parser; - - #[test] - fn test_util_get_specs_from_compose() { - let (network_options, service_spec) = - get_specs_from_compose("mini_tree", "docker-compose.yml").unwrap(); - - let service_name = "mini_tree"; - assert_eq!(network_options.name, service_name); - assert_eq!(network_options.driver, "overlay"); - - assert_eq!(service_spec.name.unwrap(), service_name); - assert!(service_spec.mode.is_some()); - assert!(service_spec.task_template.is_some()); - assert!(service_spec.endpoint_spec.is_some()); - assert_eq!( - service_spec.task_template.unwrap().container_spec.unwrap(), - TaskSpecContainerSpec { - image: Some("sifnoc/summa-aggregation:mini-tree-v0.1".to_string()), - ..Default::default() - } - ); - } - - #[tokio::test] - async fn test_executor() -> Result<(), Box> { - let spawner = MockSpawner::new(None); - let executor = spawner.spawn_executor().await; - - let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); - - spawner.terminate_executors().await; - - assert_eq!( - format!("{:?}", merkle_tree.root.hash), - "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" - ); - Ok(()) - } - - #[tokio::test] - async fn test_executor_block() -> Result<(), Box> { - let spawner = MockSpawner::new(None); - let executor = spawner.spawn_executor().await; - - // Parse two csv files - let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - - let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); - let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); - - let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; - - spawner.terminate_executors().await; - - assert_eq!(all_tree.len(), 2); - - Ok(()) - } + +use futures::future; +use std::error::Error; + +use bollard::models::TaskSpecContainerSpec; + +use crate::executor::{spawner::ExecutorSpawner, utils::get_specs_from_compose, MockSpawner}; +use crate::orchestrator::entry_parser; + +#[test] +fn test_util_get_specs_from_compose() { + let (network_options, service_spec) = + get_specs_from_compose("mini_tree", "docker-compose.yml").unwrap(); + + let service_name = "mini_tree"; + assert_eq!(network_options.name, service_name); + assert_eq!(network_options.driver, "overlay"); + + assert_eq!(service_spec.name.unwrap(), service_name); + assert!(service_spec.mode.is_some()); + assert!(service_spec.task_template.is_some()); + assert!(service_spec.endpoint_spec.is_some()); + assert_eq!( + service_spec.task_template.unwrap().container_spec.unwrap(), + TaskSpecContainerSpec { + image: Some("sifnoc/summa-aggregation:mini-tree-v0.1".to_string()), + ..Default::default() + } + ); +} + +#[tokio::test] +async fn test_executor() -> Result<(), Box> { + let spawner = MockSpawner::new(None); + let executor = spawner.spawn_executor().await; + + let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); + + spawner.terminate_executors().await; + + assert_eq!( + format!("{:?}", merkle_tree.root.hash), + "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" + ); + Ok(()) +} + +#[tokio::test] +async fn test_executor_block() -> Result<(), Box> { + let spawner = MockSpawner::new(None); + let executor = spawner.spawn_executor().await; + + // Parse two csv files + let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + + let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); + let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); + + let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; + + spawner.terminate_executors().await; + + assert_eq!(all_tree.len(), 2); + + Ok(()) } diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 4fcd908..0d58ba2 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -1,93 +1,90 @@ -#[cfg(test)] -mod test { - use crate::executor::{CloudSpawner, LocalSpawner, MockSpawner}; - use crate::orchestrator::Orchestrator; - use summa_backend::merkle_sum_tree::Tree; +use crate::executor::{CloudSpawner, LocalSpawner, MockSpawner}; +use crate::orchestrator::Orchestrator; +use summa_backend::merkle_sum_tree::Tree; - #[tokio::test] - async fn test_single_mock_worker() { - let spawner = MockSpawner::new(None); +#[tokio::test] +async fn test_single_mock_worker() { + let spawner = MockSpawner::new(None); - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); +} - #[tokio::test] - async fn test_none_exist_csv() { - let spawner = MockSpawner::new(None); - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/no_exist.csv".to_string(), - ], - ); - let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(&0, one_mini_tree_result.depth()); - } +#[tokio::test] +async fn test_none_exist_csv() { + let spawner = MockSpawner::new(None); + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/no_exist.csv".to_string(), + ], + ); + let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(&0, one_mini_tree_result.depth()); +} - #[tokio::test] - async fn test_none_exist_worker() { - let non_exist_worker_url = vec!["127.0.0.1:40".to_string()]; // unsignable port - let spawner = MockSpawner::new(Some(non_exist_worker_url)); +#[tokio::test] +async fn test_none_exist_worker() { + let non_exist_worker_url = vec!["127.0.0.1:40".to_string()]; // unsignable port + let spawner = MockSpawner::new(Some(non_exist_worker_url)); - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); - assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); - } + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); + assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); +} - #[cfg(feature = "docker")] - #[tokio::test] - async fn test_with_containers() { - let spawner = LocalSpawner::new( - "summa-aggregation".to_string(), - "orchestrator_test".to_string(), - ); +#[cfg(feature = "docker")] +#[tokio::test] +async fn test_with_containers() { + let spawner = LocalSpawner::new( + "summa-aggregation".to_string(), + "orchestrator_test".to_string(), + ); - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); +} - #[cfg(feature = "docker")] - #[tokio::test] - async fn test_with_swarm_service() { - let spawner = CloudSpawner::new( - Some(("mini_tree".to_string(), "docker-compose.yml".to_string())), - vec!["10.0.0.1".to_string(), "10.0.0.2".to_string()], - 4000, - ); +#[cfg(feature = "docker")] +#[tokio::test] +async fn test_with_swarm_service() { + let spawner = CloudSpawner::new( + Some(("mini_tree".to_string(), "docker-compose.yml".to_string())), + vec!["10.0.0.1".to_string(), "10.0.0.2".to_string()], + 4000, + ); - let orchestrator = Orchestrator::<2, 14>::new( - Box::new(spawner), - vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), - ], - ); - let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); - } + let orchestrator = Orchestrator::<2, 14>::new( + Box::new(spawner), + vec![ + "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16.csv".to_string(), + ], + ); + let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); } From f32fc8f80a4be8214b3d544851ea3bb2d3ff6baf Mon Sep 17 00:00:00 2001 From: sifnoc Date: Mon, 4 Dec 2023 14:42:21 +0000 Subject: [PATCH 20/32] fix: applied latest v1 improvement --- Cargo.lock | 419 ++++++++++++++++----------- README.md | 65 ----- bin/README.md | 68 +++++ examples/aggregation_flow.rs | 6 +- src/aggregation_merkle_sum_tree.rs | 131 +++++---- src/executor/mod.rs | 10 +- src/executor/test.rs | 41 ++- src/json_mst.rs | 60 ++-- src/mini_tree_generator.rs | 23 +- src/orchestrator/csv/entry_16.csv | 34 +-- src/orchestrator/csv/entry_16_1.csv | 34 +-- src/orchestrator/csv/entry_16_2.csv | 34 +-- src/orchestrator/csv/entry_16_3.csv | 34 +-- src/orchestrator/entry_csv_parser.rs | 55 ---- src/orchestrator/mod.rs | 39 ++- src/orchestrator/test.rs | 5 +- 16 files changed, 587 insertions(+), 471 deletions(-) create mode 100644 bin/README.md delete mode 100644 src/orchestrator/entry_csv_parser.rs diff --git a/Cargo.lock b/Cargo.lock index 475fabd..e800d3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -423,7 +423,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding", - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -432,7 +432,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -557,18 +557,18 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12024c4645c97566567129c204f65d5815a8c9aecf30fcbe682b2fe034996d36" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", @@ -580,9 +580,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.84" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "libc", ] @@ -603,7 +603,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -658,7 +658,7 @@ dependencies = [ "bech32", "bs58", "digest 0.10.7", - "generic-array", + "generic-array 0.14.7", "hex", "ripemd", "serde", @@ -676,7 +676,7 @@ checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" dependencies = [ "is-terminal", "lazy_static", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -738,9 +738,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -748,9 +748,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpufeatures" @@ -821,11 +821,11 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28f85c3514d2a6e64160359b45a3918c3b4178bcbf4ae5d03ab2d02e521c479a" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -837,7 +837,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "typenum", ] @@ -883,9 +883,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" dependencies = [ "powerfmt", "serde", @@ -916,7 +916,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -959,7 +959,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1022,9 +1022,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest 0.10.7", @@ -1042,15 +1042,15 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.6" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", "digest 0.10.7", "ff", - "generic-array", + "generic-array 0.14.7", "group", "pkcs8", "rand_core 0.6.4", @@ -1114,12 +1114,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1194,9 +1194,9 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad13497f6e0a24292fc7b408e30d22fe9dc262da1f40d7b542c3a44e7fc0476" +checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -1210,9 +1210,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" +checksum = "8c405f24ea3a517899ba7985385c43dc4a7eb1209af3b1e0a1a32d7dcc7f8d09" dependencies = [ "ethers-core", "once_cell", @@ -1222,9 +1222,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" +checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" dependencies = [ "const-hex", "ethers-contract-abigen", @@ -1241,9 +1241,9 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" +checksum = "51258120c6b47ea9d9bec0d90f9e8af71c977fbefbef8213c91bfed385fe45eb" dependencies = [ "Inflector", "const-hex", @@ -1263,9 +1263,9 @@ dependencies = [ [[package]] name = "ethers-contract-derive" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" +checksum = "936e7a0f1197cee2b62dc89f63eff3201dbf87c283ff7e18d86d38f83b845483" dependencies = [ "Inflector", "const-hex", @@ -1279,9 +1279,9 @@ dependencies = [ [[package]] name = "ethers-core" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +checksum = "2f03e0bdc216eeb9e355b90cf610ef6c5bb8aca631f97b5ae9980ce34ea7878d" dependencies = [ "arrayvec 0.7.4", "bytes", @@ -1290,7 +1290,7 @@ dependencies = [ "const-hex", "elliptic-curve", "ethabi", - "generic-array", + "generic-array 0.14.7", "k256", "num_enum", "once_cell", @@ -1309,10 +1309,11 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" +checksum = "abbac2c890bdbe0f1b8e549a53b00e2c4c1de86bb077c1094d1f38cdf9381a56" dependencies = [ + "chrono", "ethers-core", "ethers-solc", "reqwest", @@ -1325,15 +1326,14 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473f1ccd0c793871bbc248729fa8df7e6d2981d6226e4343e3bbaa9281074d5d" +checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" dependencies = [ "async-trait", "auto_impl", "ethers-contract", "ethers-core", - "ethers-etherscan", "ethers-providers", "ethers-signers", "futures-channel", @@ -1352,9 +1352,9 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" +checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" dependencies = [ "async-trait", "auto_impl", @@ -1388,9 +1388,9 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" +checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" dependencies = [ "async-trait", "coins-bip32", @@ -1407,9 +1407,9 @@ dependencies = [ [[package]] name = "ethers-solc" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" +checksum = "a64f710586d147864cff66540a6d64518b9ff37d73ef827fee430538265b595f" dependencies = [ "cfg-if", "const-hex", @@ -1438,29 +1438,29 @@ dependencies = [ [[package]] name = "execute" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d9a9ea4c04632c16bc5c71a2fcc63d308481f7fc67eb1a1ce6315c44a426ae" +checksum = "3a82608ee96ce76aeab659e9b8d3c2b787bffd223199af88c674923d861ada10" dependencies = [ "execute-command-macro", "execute-command-tokens", - "generic-array", + "generic-array 1.0.0", ] [[package]] name = "execute-command-macro" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5fbc65a0cf735106743f4c38c9a3671c1e734b5c2c20d21a3c93c696daa3157" +checksum = "90dec53d547564e911dc4ff3ecb726a64cf41a6fa01a2370ebc0d95175dd08bd" dependencies = [ "execute-command-macro-impl", ] [[package]] name = "execute-command-macro-impl" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55a9a55d1dab3b07854648d48e366f684aefe2ac78ae28cec3bf65e3cd53d9a3" +checksum = "ce8cd46a041ad005ab9c71263f9a0ff5b529eac0fe4cc9b4a20f4f0765d8cf4b" dependencies = [ "execute-command-tokens", "quote", @@ -1469,15 +1469,15 @@ dependencies = [ [[package]] name = "execute-command-tokens" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba569491c70ec8471e34aa7e9c0b9e82bb5d2464c0398442d17d3c4af814e5a" +checksum = "69dc321eb6be977f44674620ca3aa21703cb20ffbe560e1ae97da08401ffbcad" [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "80f656be11ddf91bd709454d15d5bd896fbaf4cc3314e69349e4d1569f5b46cd" dependencies = [ "indenter", "once_cell", @@ -1604,9 +1604,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1752,6 +1752,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "generic-array" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +dependencies = [ + "typenum", +] + [[package]] name = "getrandom" version = "0.2.11" @@ -1767,9 +1776,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -1804,9 +1813,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -1814,7 +1823,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", @@ -1914,9 +1923,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", "allocator-api2", @@ -1979,7 +1988,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2091,9 +2100,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2161,7 +2170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.14.3", "serde", ] @@ -2171,7 +2180,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -2210,7 +2219,7 @@ checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2257,9 +2266,9 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -2280,9 +2289,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" dependencies = [ "cfg-if", "ecdsa", @@ -2363,9 +2372,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "lock_api" @@ -2459,7 +2468,7 @@ checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2491,7 +2500,7 @@ dependencies = [ "blstrs", "byteorder", "ff", - "generic-array", + "generic-array 0.14.7", "itertools 0.8.2", "log", "pasta_curves", @@ -2542,7 +2551,7 @@ dependencies = [ "digest 0.10.7", "ff", "flate2", - "generic-array", + "generic-array 0.14.7", "getrandom", "halo2curves 0.1.0", "itertools 0.11.0", @@ -2741,9 +2750,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.59" +version = "0.10.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -2773,9 +2782,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.95" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" dependencies = [ "cc", "libc", @@ -2800,9 +2809,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec 0.7.4", "bitvec", @@ -2814,11 +2823,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 1.0.109", @@ -2844,7 +2853,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -2919,9 +2928,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -3148,9 +3157,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -3422,7 +3431,7 @@ dependencies = [ "bitflags 2.4.1", "bitvec", "enumn", - "hashbrown 0.14.2", + "hashbrown 0.14.3", "hex", ] @@ -3484,9 +3493,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "724fd11728a3804e9944b14cab63825024c40bf42f8af87c8b5d97c4bbacf426" +checksum = "608a5726529f2f0ef81b8fde9873c4bb829d6b5b5ca6be4d97345ddf0749c825" dependencies = [ "alloy-rlp", "proptest", @@ -3526,15 +3535,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a" dependencies = [ "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -3597,7 +3606,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -3626,7 +3635,7 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -3688,9 +3697,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] @@ -3706,9 +3715,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", @@ -3841,9 +3850,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -3885,7 +3894,7 @@ checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "snark-verifier" version = "0.1.1" -source = "git+https://github.com/privacy-scaling-explorations/snark-verifier#fedd7a8ffa44082c20a63e101484e0991ee7cce0" +source = "git+https://github.com/privacy-scaling-explorations/snark-verifier#9feead7d4dbad951e6aa1d572230b1c098ec8040" dependencies = [ "ecc", "halo2_proofs", @@ -3906,7 +3915,7 @@ dependencies = [ [[package]] name = "snark-verifier-sdk" version = "0.1.2" -source = "git+https://github.com/privacy-scaling-explorations/snark-verifier#fedd7a8ffa44082c20a63e101484e0991ee7cce0" +source = "git+https://github.com/privacy-scaling-explorations/snark-verifier#9feead7d4dbad951e6aa1d572230b1c098ec8040" dependencies = [ "ark-std", "bincode", @@ -3945,14 +3954,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "solang-parser" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" dependencies = [ "itertools 0.11.0", "lalrpop", @@ -3979,9 +3988,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -4087,7 +4096,7 @@ dependencies = [ [[package]] name = "summa-backend" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#e26303f15efce9d4dbf60e2c99916081b87d5891" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#19b1412218c69b63571d71dab6b11556f6041278" dependencies = [ "base64 0.13.1", "bincode", @@ -4096,6 +4105,7 @@ dependencies = [ "futures", "halo2_proofs", "num-bigint 0.4.4", + "num-traits", "reqwest", "serde", "serde_json", @@ -4107,7 +4117,7 @@ dependencies = [ [[package]] name = "summa-solvency" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#e26303f15efce9d4dbf60e2c99916081b87d5891" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#19b1412218c69b63571d71dab6b11556f6041278" dependencies = [ "ark-std", "csv", @@ -4197,7 +4207,7 @@ dependencies = [ "fastrand", "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4309,7 +4319,7 @@ dependencies = [ "signal-hook-registry", "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4349,14 +4359,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_edit 0.21.0", ] [[package]] @@ -4375,8 +4385,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.1.0", - "serde", - "serde_spanned", "toml_datetime", "winnow", ] @@ -4392,6 +4400,19 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -4544,9 +4565,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -4608,9 +4629,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if", "serde", @@ -4620,9 +4641,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", @@ -4635,9 +4656,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if", "js-sys", @@ -4647,9 +4668,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4657,9 +4678,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", @@ -4682,15 +4703,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -4745,7 +4766,7 @@ version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -4754,7 +4775,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -4763,13 +4793,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -4778,42 +4823,84 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" version = "0.5.19" @@ -4830,7 +4917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4879,18 +4966,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.25" +version = "0.7.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +checksum = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.25" +version = "0.7.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +checksum = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b" dependencies = [ "proc-macro2", "quote", @@ -4899,9 +4986,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] diff --git a/README.md b/README.md index 6ccaed8..fc19f70 100644 --- a/README.md +++ b/README.md @@ -172,68 +172,3 @@ cargo test Note that the Worker uses port 4000 as the default for its server. Please ensure that this port is not already in use when you meet error. - -### Test Mini Tree Server - -You can manually test the `Mini Tree Server` with running container. - -First, Use the command below to start the Mini Tree Server container: - - ```bash - docker run -d -p 4000:4000 --name mini-tree-server summa-aggretaion/mini-tree - ``` - -Second, to send two entries to the `Mini Tree Server`, use this script: - - ```bash - bash ./scripts/test_sending_entry.sh - ``` - -Upon successful execution, you will receive a response similar to the following -

-Click View Response - -```Json -{ - "root": { - "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", - "balances": [ - "0x000000000000000000000000000000000000000000000000000000000001375f", - "0x000000000000000000000000000000000000000000000000000000000000e9a6" - ] - }, - "nodes": [ - [ - { - "hash": "0x0e113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", - "balances": [ - "0x0000000000000000000000000000000000000000000000000000000000002e70", - "0x000000000000000000000000000000000000000000000000000000000000a0cb" - ] - }, - { - "hash": "0x17ef9d8ee0e2c8470814651413b71009a607a020214f749687384a7b7a7eb67a", - "balances": [ - "0x00000000000000000000000000000000000000000000000000000000000108ef", - "0x00000000000000000000000000000000000000000000000000000000000048db" - ] - } - ], - [ - { - "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", - "balances": [ - "0x000000000000000000000000000000000000000000000000000000000001375f", - "0x000000000000000000000000000000000000000000000000000000000000e9a6" - ] - } - ] - ], - "depth": 1, - "is_sorted": false -} -``` - -this JSON output is prettified for clarity - -
diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 0000000..a12f717 --- /dev/null +++ b/bin/README.md @@ -0,0 +1,68 @@ +# Mini Tree Server + +Mini tree server is wrapped + +### Test Mini Tree Server + +You can manually test the `Mini Tree Server` with running container. + +First, Use the command below to start the Mini Tree Server container: + + ```bash + docker run -d -p 4000:4000 --name mini-tree-server summa-aggretaion/mini-tree + ``` + +Second, to send two entries to the `Mini Tree Server`, use this script: + + ```bash + bash ./scripts/test_sending_entry.sh + ``` + +Upon successful execution, you will receive a response similar to the following +
+Click View Response + +```Json +{ + "root": { + "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", + "balances": [ + "0x000000000000000000000000000000000000000000000000000000000001375f", + "0x000000000000000000000000000000000000000000000000000000000000e9a6" + ] + }, + "nodes": [ + [ + { + "hash": "0x0e113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", + "balances": [ + "0x0000000000000000000000000000000000000000000000000000000000002e70", + "0x000000000000000000000000000000000000000000000000000000000000a0cb" + ] + }, + { + "hash": "0x17ef9d8ee0e2c8470814651413b71009a607a020214f749687384a7b7a7eb67a", + "balances": [ + "0x00000000000000000000000000000000000000000000000000000000000108ef", + "0x00000000000000000000000000000000000000000000000000000000000048db" + ] + } + ], + [ + { + "hash": "0x2a4a7ae82b45b3800bdcd6364409e7ba9cac3d4598c546bd48952c234b5d2fb9", + "balances": [ + "0x000000000000000000000000000000000000000000000000000000000001375f", + "0x000000000000000000000000000000000000000000000000000000000000e9a6" + ] + } + ] + ], + "depth": 1, + "is_sorted": false +} +``` + +this JSON output is prettified for clarity + +
diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index 0c618fe..43c3dba 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -25,7 +25,7 @@ async fn main() -> Result<(), Box> { // The CloudSpawner, when used with the Orchestrator, does not rely on a `docker-compose.yml` file or a `service_name` to create Workers. // It solely utilizes the `worker_node_url`. Typically, in production environments, workers operate on remote nodes. const LEVELS: usize = 2; - const N_ASSETS: usize = 2; + const N_CURRENCIES: usize = 2; const N_BYTES: usize = 14; // For this demonstration, using the same URL address is acceptable. However, the number of URLs should match the number of executors. @@ -54,12 +54,10 @@ async fn main() -> Result<(), Box> { // Once get the aggregation merkle sum tree, we can initialize the round. let timestamp = 1u64; - let asset_csv = "examples/assets.csv"; let params_path = "examples/hermez-raw-11"; - let round = Round::::new( + let round = Round::::new( &signer, Box::new(aggregation_merkle_sum_tree), - asset_csv, params_path, timestamp, ) diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 7389c64..7773db1 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -1,29 +1,33 @@ use halo2_proofs::halo2curves::bn256::Fr as Fp; use num_bigint::BigUint; +use std::error::Error; use summa_backend::merkle_sum_tree::utils::{build_merkle_tree_from_leaves, fp_to_big_uint}; -use summa_backend::merkle_sum_tree::{Entry, MerkleProof, MerkleSumTree, Node, Tree}; +use summa_backend::merkle_sum_tree::{ + Cryptocurrency, Entry, MerkleProof, MerkleSumTree, Node, Tree, +}; /// Aggregation Merkle Sum Tree Data Structure. /// -/// Starting from a set of "mini" Merkle Sum Trees of equal depth, N_ASSETS and N_BYTES, the Aggregation Merkle Sum Tree inherits the properties of a Merkle Sum Tree and adds the following: +/// Starting from a set of "mini" Merkle Sum Trees of equal depth, N_CURRENCIES and N_BYTES, the Aggregation Merkle Sum Tree inherits the properties of a Merkle Sum Tree and adds the following: /// * Each Leaf of the Aggregation Merkle Sum Tree is the root of a "mini" Merkle Sum Tree made of `hash` and `balances` /// /// # Type Parameters /// -/// * `N_ASSETS`: The number of assets for each user account +/// * `N_CURRENCIES`: The number of assets for each user account /// * `N_BYTES`: Range in which each node balance should lie #[derive(Debug, Clone)] -pub struct AggregationMerkleSumTree { - root: Node, - nodes: Vec>>, +pub struct AggregationMerkleSumTree { + root: Node, + nodes: Vec>>, depth: usize, - mini_trees: Vec>, + cryptocurrencies: Vec, + mini_trees: Vec>, } -impl Tree - for AggregationMerkleSumTree +impl Tree + for AggregationMerkleSumTree { - fn root(&self) -> &Node { + fn root(&self) -> &Node { &self.root } @@ -31,15 +35,23 @@ impl Tree &self.depth } - fn leaves(&self) -> &[Node] { + fn leaves(&self) -> &[Node] { &self.nodes[0] } - fn nodes(&self) -> &[Vec>] { + fn nodes(&self) -> &[Vec>] { &self.nodes } - fn get_entry(&self, user_index: usize) -> &Entry { + fn cryptocurrencies(&self) -> &[Cryptocurrency] { + &self.cryptocurrencies + } + + fn entries(&self) -> &[Entry] { + &self.mini_trees[0].entries() + } + + fn get_entry(&self, user_index: usize) -> &Entry { let (mini_tree_index, entry_index) = self.get_entry_location(user_index); // Retrieve the mini tree @@ -49,7 +61,14 @@ impl Tree mini_tree.get_entry(entry_index) } - fn generate_proof(&self, index: usize) -> Result, &'static str> { + fn generate_proof( + &self, + index: usize, + ) -> Result, Box> + where + [usize; N_CURRENCIES + 1]: Sized, + [usize; N_CURRENCIES + 2]: Sized, + { let (mini_tree_index, entry_index) = self.get_entry_location(index); // Retrieve the mini tree @@ -61,30 +80,28 @@ impl Tree // Build the rest of the proof (top_proof), namely from the root of the mini tree to the root of the aggregation tree let mut current_index = mini_tree_index; - let mut sibling_hashes = vec![Fp::from(0); self.depth]; - let mut sibling_sums = vec![[Fp::from(0); N_ASSETS]; self.depth]; + let mut sibling_middle_node_hash_preimages = Vec::new(); let mut path_indices = vec![Fp::from(0); self.depth]; for level in 0..self.depth { let position = current_index % 2; - let level_start_index = current_index - position; - let level_end_index = level_start_index + 2; - path_indices[level] = Fp::from(position as u64); + let sibling_index = current_index - position + (1 - position); - for i in level_start_index..level_end_index { - if i != current_index { - sibling_hashes[level] = self.nodes[level][i].hash; - sibling_sums[level] = self.nodes[level][i].balances; - } + if sibling_index < self.nodes[level].len() && level != 0 { + // Fetch hash preimage for sibling middle nodes + let sibling_node_preimage = + self.get_middle_node_hash_preimage(level, sibling_index)?; + sibling_middle_node_hash_preimages.push(sibling_node_preimage); } + current_index /= 2; } - // append the top_proof to the partial_proof - partial_proof.sibling_hashes.extend(sibling_hashes); - partial_proof.sibling_sums.extend(sibling_sums); partial_proof.path_indices.extend(path_indices); + partial_proof + .sibling_middle_node_hash_preimages + .extend(sibling_middle_node_hash_preimages); // replace the root of the partial proof with the root of the aggregation tree partial_proof.root = self.root.clone(); @@ -93,15 +110,18 @@ impl Tree } } -impl AggregationMerkleSumTree { +impl + AggregationMerkleSumTree +{ /// Builds a AggregationMerkleSumTree from a set of mini MerkleSumTrees /// The leaves of the AggregationMerkleSumTree are the roots of the mini MerkleSumTrees pub fn new( - mini_trees: Vec>, - ) -> Result> + mini_trees: Vec>, + cryptocurrencies: Vec, + ) -> Result, Box> where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, + [usize; N_CURRENCIES + 1]: Sized, + [usize; N_CURRENCIES + 2]: Sized, { if mini_trees.is_empty() { return Err("Empty mini tree inputs".into()); @@ -111,26 +131,16 @@ impl AggregationMerkleSumTree>, - ) -> Result, Box> - where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, - { // extract all the roots of the mini trees let roots = mini_trees .iter() .map(|x| x.root().clone()) - .collect::>>(); + .collect::>>(); let depth = (roots.len() as f64).log2().ceil() as usize; // Calculate the accumulated balances for each asset - let mut balances_acc: Vec = vec![Fp::from(0); N_ASSETS]; + let mut balances_acc: Vec = vec![Fp::from(0); N_CURRENCIES]; for root in &roots { for (i, balance) in root.balances.iter().enumerate() { @@ -158,11 +168,12 @@ impl AggregationMerkleSumTree &MerkleSumTree { + pub fn mini_tree(&self, tree_index: usize) -> &MerkleSumTree { &self.mini_trees[tree_index] } @@ -186,22 +197,24 @@ mod test { use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; - const N_ASSETS: usize = 2; + const N_CURRENCIES: usize = 2; const N_BYTES: usize = 8; #[test] fn test_aggregation_mst() { // create new mini merkle sum tree let mini_tree_1 = - MerkleSumTree::::new("src/orchestrator/csv/entry_16_1.csv").unwrap(); + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_1.csv") + .unwrap(); let mini_tree_2 = - MerkleSumTree::::new("src/orchestrator/csv/entry_16_2.csv").unwrap(); + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_2.csv") + .unwrap(); - let aggregation_mst = AggregationMerkleSumTree::::new(vec![ - mini_tree_1.clone(), - mini_tree_2.clone(), - ]) + let aggregation_mst = AggregationMerkleSumTree::::new( + vec![mini_tree_1.clone(), mini_tree_2.clone()], + mini_tree_1.cryptocurrencies().to_owned().to_vec(), + ) .unwrap(); // get root @@ -243,16 +256,18 @@ mod test { // create new mini merkle sum trees. The accumulated balance for each mini tree is in the expected range // note that the accumulated balance of the tree generated from entry_16_3 is just in the expected range for 1 unit let merkle_sum_tree_1 = - MerkleSumTree::::new("src/orchestrator/csv/entry_16_1.csv").unwrap(); + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_1.csv") + .unwrap(); let merkle_sum_tree_2 = - MerkleSumTree::::new("src/orchestrator/csv/entry_16_2.csv").unwrap(); + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_2.csv") + .unwrap(); // When creating the aggregation merkle sum tree, the accumulated balance of the two mini trees is not in the expected range, an error is thrown - let result = AggregationMerkleSumTree::::new(vec![ - merkle_sum_tree_1, - merkle_sum_tree_2.clone(), - ]); + let result = AggregationMerkleSumTree::::new( + vec![merkle_sum_tree_1, merkle_sum_tree_2.clone()], + merkle_sum_tree_2.cryptocurrencies().to_vec(), + ); if let Err(e) = result { assert_eq!( diff --git a/src/executor/mod.rs b/src/executor/mod.rs index c3978ec..f1ca432 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -40,10 +40,14 @@ impl Executor { self.id.clone() } - pub async fn generate_tree( + pub async fn generate_tree( &self, json_entries: Vec, - ) -> Result, Box> { + ) -> Result, Box> + where + [usize; N_CURRENCIES + 1]: Sized, + [usize; N_CURRENCIES + 2]: Sized, + { let response = self .client .post(&self.url) @@ -57,7 +61,7 @@ impl Executor { .await .map_err(|err| Box::new(err) as Box)?; - let tree = json_tree.to_mst(); + let tree = json_tree.to_mst().unwrap(); Ok(tree) } diff --git a/src/executor/test.rs b/src/executor/test.rs index c491437..3f5ce06 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -1,11 +1,12 @@ - +#![allow(unused_imports)] use futures::future; use std::error::Error; use bollard::models::TaskSpecContainerSpec; use crate::executor::{spawner::ExecutorSpawner, utils::get_specs_from_compose, MockSpawner}; -use crate::orchestrator::entry_parser; +use crate::json_mst::JsonEntry; +use summa_backend::merkle_sum_tree::utils::parse_csv_to_entries; #[test] fn test_util_get_specs_from_compose() { @@ -34,15 +35,17 @@ async fn test_executor() -> Result<(), Box> { let spawner = MockSpawner::new(None); let executor = spawner.spawn_executor().await; - let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let merkle_tree = executor.generate_tree::<2, 14>(entries).await.unwrap(); + let (_, entries) = + parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let json_entries = entries + .iter() + .map(JsonEntry::from_entry) + .collect::>(); + let merkle_sum_tree = executor.generate_tree::<2, 14>(json_entries).await.unwrap(); spawner.terminate_executors().await; - assert_eq!( - format!("{:?}", merkle_tree.root.hash), - "0x02e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" - ); + assert_eq!(merkle_sum_tree.index_of_username("dxGaEAii").unwrap(), 0); Ok(()) } @@ -52,11 +55,23 @@ async fn test_executor_block() -> Result<(), Box> { let executor = spawner.spawn_executor().await; // Parse two csv files - let entries_1 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let entries_2 = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - - let merkle_tree_1 = executor.generate_tree::<2, 14>(entries_1); - let merkle_tree_2 = executor.generate_tree::<2, 14>(entries_2); + let (_, entries_1) = + parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let (_, entries_2) = + parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + + // Convert entries to json_entries + let json_entries_1 = entries_1 + .iter() + .map(JsonEntry::from_entry) + .collect::>(); + let json_entries_2 = entries_2 + .iter() + .map(JsonEntry::from_entry) + .collect::>(); + + let merkle_tree_1 = executor.generate_tree::<2, 14>(json_entries_1); + let merkle_tree_2 = executor.generate_tree::<2, 14>(json_entries_2); let all_tree = future::join_all([merkle_tree_1, merkle_tree_2]).await; diff --git a/src/json_mst.rs b/src/json_mst.rs index fdd059b..ae703ef 100644 --- a/src/json_mst.rs +++ b/src/json_mst.rs @@ -1,9 +1,10 @@ use num_bigint::BigUint; use serde::{Deserialize, Serialize}; +use std::error::Error; use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree, Node, Tree}; +use summa_backend::merkle_sum_tree::{Cryptocurrency, Entry, MerkleSumTree, Node, Tree}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonEntry { @@ -26,7 +27,7 @@ pub struct JsonMerkleSumTree { pub is_sorted: bool, } -pub fn convert_node_to_json(node: &Node) -> JsonNode { +pub fn convert_node_to_json(node: &Node) -> JsonNode { JsonNode { hash: format!("{:?}", node.hash), balances: node.balances.iter().map(|b| format!("{:?}", b)).collect(), @@ -43,18 +44,29 @@ impl JsonEntry { JsonEntry { username, balances } } - pub fn to_entry(&self) -> Entry { - let mut balances: [BigUint; N_ASSETS] = std::array::from_fn(|_| BigUint::from(0u32)); + pub fn from_entry(entry: &Entry) -> Self { + JsonEntry::new( + entry.username().to_string(), + entry + .balances() + .iter() + .map(|balance| balance.to_string()) + .collect(), + ) + } + + pub fn to_entry(&self) -> Entry { + let mut balances: [BigUint; N_CURRENCIES] = std::array::from_fn(|_| BigUint::from(0u32)); self.balances.iter().enumerate().for_each(|(i, balance)| { balances[i] = balance.parse::().unwrap(); }); - Entry::::new(self.username.clone(), balances).unwrap() + Entry::::new(self.username.clone(), balances).unwrap() } } impl JsonNode { - pub fn to_node(&self) -> Node { + pub fn to_node(&self) -> Node { let hash = parse_fp_from_hex(&self.hash); let balances = self .balances @@ -69,8 +81,8 @@ impl JsonNode { } impl JsonMerkleSumTree { - pub fn from_tree( - tree: MerkleSumTree, + pub fn from_tree( + tree: MerkleSumTree, ) -> Self { let root = convert_node_to_json(tree.root()); let nodes = tree @@ -94,14 +106,18 @@ impl JsonMerkleSumTree { nodes, depth: *tree.depth(), entries, - is_sorted: tree.is_sorted, + is_sorted: false, } } - pub fn to_mst( + pub fn to_mst( &self, - ) -> MerkleSumTree { - let root: Node = self.root.to_node::(); + ) -> Result, Box> + where + [usize; N_CURRENCIES + 1]: Sized, + [usize; N_CURRENCIES + 2]: Sized, + { + let root: Node = self.root.to_node::(); let nodes = self .nodes .iter() @@ -110,15 +126,23 @@ impl JsonMerkleSumTree { let entries = self .entries .iter() - .map(|entry| entry.to_entry::()) + .map(|entry| entry.to_entry::()) .collect(); - - MerkleSumTree:: { + let cryptocurrencies = vec![ + Cryptocurrency { + name: "Dummy".to_string(), + chain: "ETH".to_string(), + }; + N_CURRENCIES + ]; + + MerkleSumTree::::new( root, nodes, - depth: self.depth, + self.depth, entries, - is_sorted: self.is_sorted, - } + cryptocurrencies, + self.is_sorted, + ) } } diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index df7f1b3..6309620 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -2,29 +2,38 @@ use axum::{extract::Json, http::StatusCode, response::IntoResponse}; use const_env::from_env; use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; -use summa_backend::merkle_sum_tree::{Entry, MerkleSumTree}; +use summa_backend::merkle_sum_tree::{Cryptocurrency, Entry, MerkleSumTree}; #[from_env] -const N_ASSETS: usize = 2; +const N_CURRENCIES: usize = 2; #[from_env] const N_BYTES: usize = 14; pub async fn create_mst( Json(json_entries): Json>, ) -> Result)> { - // Convert `JsonEntry` -> `Entry` + // Convert `JsonEntry` -> `Entry` let entries = json_entries .iter() .map(|entry| entry.to_entry()) - .collect::>>(); + .collect::>>(); + let crypcocurrencies = vec![ + Cryptocurrency { + name: "DUMMY".to_string(), + chain: "ETH".to_string(), + }; + N_CURRENCIES + ]; #[cfg(not(test))] let entries_length = entries.len(); #[cfg(not(test))] let starting_time = std::time::Instant::now(); - // Create `MerkleSumTree` from `parsed_entries` - let tree = MerkleSumTree::::from_entries(entries, false).unwrap(); + // Create `MerkleSumTree` from `parsed_entries` + let tree = + MerkleSumTree::::from_entries(entries, crypcocurrencies, false) + .unwrap(); #[cfg(not(test))] println!( @@ -33,7 +42,7 @@ pub async fn create_mst( starting_time.elapsed().as_millis() ); - // Convert `MerkleSumTree` to `JsonMerkleSumTree` + // Convert `MerkleSumTree` to `JsonMerkleSumTree` let json_tree = JsonMerkleSumTree::from_tree(tree); Ok((StatusCode::OK, Json(json_tree))) diff --git a/src/orchestrator/csv/entry_16.csv b/src/orchestrator/csv/entry_16.csv index 228b1db..83b2d1d 100644 --- a/src/orchestrator/csv/entry_16.csv +++ b/src/orchestrator/csv/entry_16.csv @@ -1,17 +1,17 @@ -username;balances -dxGaEAii;11888,41163 -MBlfbBGI;67823,18651 -lAhWlEWZ;18651,2087 -nuZweYtO;22073,55683 -gbdSwiuY;34897,83296 -RZNneNuP;83296,16881 -YsscHXkp;31699,35479 -RkLzkDun;2087,79731 -HlQlnEYI;30605,11888 -RqkZOFYe;16881,14874 -NjCSRAfD;41163,67823 -pHniJMQY;14874,22073 -dOGIMzKR;10032,10032 -HfMDmNLp;55683,34897 -xPLKzCBl;79731,30605 -AtwIxZHo;35479,31699 +username,balance_ETH_ETH,balance_USDT_ETH +dxGaEAii,11888,41163 +MBlfbBGI,67823,18651 +lAhWlEWZ,18651,2087 +nuZweYtO,22073,55683 +gbdSwiuY,34897,83296 +RZNneNuP,83296,16881 +YsscHXkp,31699,35479 +RkLzkDun,2087,79731 +HlQlnEYI,30605,11888 +RqkZOFYe,16881,14874 +NjCSRAfD,41163,67823 +pHniJMQY,14874,22073 +dOGIMzKR,10032,10032 +HfMDmNLp,55683,34897 +xPLKzCBl,79731,30605 +AtwIxZHo,35479,31699 diff --git a/src/orchestrator/csv/entry_16_1.csv b/src/orchestrator/csv/entry_16_1.csv index 228b1db..83b2d1d 100644 --- a/src/orchestrator/csv/entry_16_1.csv +++ b/src/orchestrator/csv/entry_16_1.csv @@ -1,17 +1,17 @@ -username;balances -dxGaEAii;11888,41163 -MBlfbBGI;67823,18651 -lAhWlEWZ;18651,2087 -nuZweYtO;22073,55683 -gbdSwiuY;34897,83296 -RZNneNuP;83296,16881 -YsscHXkp;31699,35479 -RkLzkDun;2087,79731 -HlQlnEYI;30605,11888 -RqkZOFYe;16881,14874 -NjCSRAfD;41163,67823 -pHniJMQY;14874,22073 -dOGIMzKR;10032,10032 -HfMDmNLp;55683,34897 -xPLKzCBl;79731,30605 -AtwIxZHo;35479,31699 +username,balance_ETH_ETH,balance_USDT_ETH +dxGaEAii,11888,41163 +MBlfbBGI,67823,18651 +lAhWlEWZ,18651,2087 +nuZweYtO,22073,55683 +gbdSwiuY,34897,83296 +RZNneNuP,83296,16881 +YsscHXkp,31699,35479 +RkLzkDun,2087,79731 +HlQlnEYI,30605,11888 +RqkZOFYe,16881,14874 +NjCSRAfD,41163,67823 +pHniJMQY,14874,22073 +dOGIMzKR,10032,10032 +HfMDmNLp,55683,34897 +xPLKzCBl,79731,30605 +AtwIxZHo,35479,31699 diff --git a/src/orchestrator/csv/entry_16_2.csv b/src/orchestrator/csv/entry_16_2.csv index b2183a2..273c579 100644 --- a/src/orchestrator/csv/entry_16_2.csv +++ b/src/orchestrator/csv/entry_16_2.csv @@ -1,17 +1,17 @@ -username;balances -aaGaEAaa;11888,41163 -bblfbBGI;67823,18651 -cchWlEWZ;18651,2087 -ddZweYtO;22073,55683 -eedSwiuY;34897,83296 -ffNneNuP;83296,16881 -ggscHXkp;31699,35479 -hhLzkDun;2087,79731 -iiQlnEYI;30605,11888 -llkZOFYe;16881,14874 -mmCSRAfD;41163,67823 -nnniJMQY;14874,22073 -ooGIMzKR;10032,10032 -ppMDmNLp;55683,34897 -qqLKzCBl;79731,30605 -rrwIxZHo;35479,31699 \ No newline at end of file +username,balance_ETH_ETH,balance_USDT_ETH +aaGaEAaa,11888,41163 +bblfbBGI,67823,18651 +cchWlEWZ,18651,2087 +ddZweYtO,22073,55683 +eedSwiuY,34897,83296 +ffNneNuP,83296,16881 +ggscHXkp,31699,35479 +hhLzkDun,2087,79731 +iiQlnEYI,30605,11888 +llkZOFYe,16881,14874 +mmCSRAfD,41163,67823 +nnniJMQY,14874,22073 +ooGIMzKR,10032,10032 +ppMDmNLp,55683,34897 +qqLKzCBl,79731,30605 +rrwIxZHo,35479,31699 diff --git a/src/orchestrator/csv/entry_16_3.csv b/src/orchestrator/csv/entry_16_3.csv index 49dc935..f55f626 100644 --- a/src/orchestrator/csv/entry_16_3.csv +++ b/src/orchestrator/csv/entry_16_3.csv @@ -1,17 +1,17 @@ -username;balances -dxGaEAii;18446744073709551615,0 -MBlfbBGI;0,18446744073709551615 -lAhWlEWZ;0,0 -nuZweYtO;0,0 -gbdSwiuY;0,0 -RZNneNuP;0,0 -YsscHXkp;0,0 -RkLzkDun;0,0 -HlQlnEYI;0,0 -RqkZOFYe;0,0 -NjCSRAfD;0,0 -pHniJMQY;0,0 -dOGIMzKR;0,0 -HfMDmNLp;0,0 -xPLKzCBl;0,0 -AtwIxZHo;0,0 +username,balance_ETH_ETH,balance_USDT_ETH +dxGaEAii,18446744073709551615,0 +MBlfbBGI,0,18446744073709551615 +lAhWlEWZ,0,0 +nuZweYtO,0,0 +gbdSwiuY,0,0 +RZNneNuP,0,0 +YsscHXkp,0,0 +RkLzkDun,0,0 +HlQlnEYI,0,0 +RqkZOFYe,0,0 +NjCSRAfD,0,0 +pHniJMQY,0,0 +dOGIMzKR,0,0 +HfMDmNLp,0,0 +xPLKzCBl,0,0 +AtwIxZHo,0,0 diff --git a/src/orchestrator/entry_csv_parser.rs b/src/orchestrator/entry_csv_parser.rs deleted file mode 100644 index bacf4ea..0000000 --- a/src/orchestrator/entry_csv_parser.rs +++ /dev/null @@ -1,55 +0,0 @@ -use serde::Deserialize; -use std::{error::Error, fs::File, path::Path}; - -use crate::json_mst::JsonEntry; - -// From summa_solvency package -#[derive(Debug, Deserialize)] -struct CSVEntry { - username: String, - balances: String, -} - -/// Parses a CSV file stored at path into a vector of Entries -pub fn entry_parser, const N_ASSETS: usize, const N_BYTES: usize>( - path: P, -) -> Result, Box> { - let mut json_entries = Vec::::new(); - // let file = File::open(path)?; - let file = match File::open(path) { - Ok(f) => f, - Err(e) => return Err(Box::new(e) as Box), - }; - - let mut rdr = csv::ReaderBuilder::new() - .delimiter(b';') // The fields are separated by a semicolon - .from_reader(file); - - for result in rdr.deserialize() { - let record: CSVEntry = match result { - Ok(r) => r, - Err(e) => return Err(Box::new(e) as Box), - }; - - let entry = JsonEntry::new( - record.username, - record.balances.split(',').map(|b| b.to_string()).collect(), - ); - - json_entries.push(entry); - } - - Ok(json_entries) -} - -#[cfg(test)] -mod test { - use super::entry_parser; - - #[test] - fn test_entries_parser() { - let entries = entry_parser::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - - assert_eq!(16, entries.len()); - } -} diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index c0da829..d985171 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -1,22 +1,21 @@ -mod entry_csv_parser; mod test; -pub use entry_csv_parser::entry_parser; - use futures::future::join_all; use std::{cmp::min, error::Error}; +use summa_backend::merkle_sum_tree::{utils::parse_csv_to_entries, Cryptocurrency}; use tokio::sync::mpsc; use tokio_util::sync::CancellationToken; use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; use crate::executor::ExecutorSpawner; +use crate::json_mst::JsonEntry; -pub struct Orchestrator { +pub struct Orchestrator { executor_spawner: Box, entry_csvs: Vec, } -impl Orchestrator { +impl Orchestrator { pub fn new(executor_spawner: Box, entry_csvs: Vec) -> Self { Self { executor_spawner, @@ -61,10 +60,10 @@ impl Orchestrator Result, Box> + ) -> Result, Box> where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, + [usize; N_CURRENCIES + 1]: Sized, + [usize; N_CURRENCIES + 2]: Sized, { let entries_per_executor = self.entry_csvs.len() / executor_count; @@ -110,7 +109,7 @@ impl Orchestrator entries, None => break, }; - let processed_task = match executor.generate_tree::(entries).await { + let processed_task = match executor.generate_tree::(entries).await { Ok(entries) => entries, Err(e) => { eprintln!("Executor_{:?}: error while processing entries {:?}", i, e); @@ -146,8 +145,12 @@ impl Orchestrator(file_path) { - Ok(entries) => entries, + let entries = match parse_csv_to_entries::<_, N_CURRENCIES, N_BYTES>(file_path) + { + Ok((_, entries)) => entries + .iter() + .map(JsonEntry::from_entry) + .collect::>(), Err(e) => { eprintln!( "Executor_{:?}: Error while processing file {:?}: {:?}", @@ -213,6 +216,18 @@ impl Orchestrator Date: Mon, 4 Dec 2023 16:55:02 +0000 Subject: [PATCH 21/32] fix: example; README --- README.md | 4 ++-- examples/aggregation_flow.rs | 23 +++++++++++++---------- examples/hermez-raw-11 | Bin 0 -> 262404 bytes src/mini_tree_generator.rs | 2 +- src/orchestrator/mod.rs | 6 +++--- 5 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 examples/hermez-raw-11 diff --git a/README.md b/README.md index fc19f70..61e8e08 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Key functions of the Orchestrator include: ## Executor and Worker -The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. The Worker is a server that can generate a merkle sum tree, internally called a mini-tree, by receiving entries data. The primary role of a Worker is to build these mini-tree, which are segments of the AggregationMerkleSumTree. +The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. A Worker in this context refers to a container that runs the `mini-tree-server`. Its primary function is to generate a segment of the AggregationMerkleSumTree, known as a `mini-tree`, by processing entry data. These mini-trees are then aggregated by the Orchestrator to form the complete AggregationMerkleSumTree. Key aspects of the Executor's role include: @@ -112,7 +112,7 @@ Note that setting up Swarm mode may not work well depending on the OS, as networ ### Spawning More Workers with CloudSpawner -You can spawning or managing worker by `CloudSpawner` without using Docker CLI command, which will explain in here. but Even well configured swarm network following previous section. It does not guarentee spawning worker as well. +You can spawning or managing worker by `CloudSpawner` without using Docker CLI command, which will explain in here. However, even with a well-configured swarm network in the previous section, workers may not be created properly in various reason. In this section, you can verify that you can create a 'mini-tree-server' on any node. Before introducing the specific instructions, it's important to understand that in Docker Swarm mode, containers are managed as services rather than by individual names. diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index 43c3dba..b2c93c9 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -14,13 +14,15 @@ use summa_backend::{ #[tokio::main] async fn main() -> Result<(), Box> { - // In this example, we will use local mini-tree server to generate mini-tree - let app = Router::new().route("/", post(create_mst)); - let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + // In this example, we will use local mini-tree server to generate mini-tree + tokio::spawn(async move { + let app = Router::new().route("/", post(create_mst)); + let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); + }); // The CloudSpawner, when used with the Orchestrator, does not rely on a `docker-compose.yml` file or a `service_name` to create Workers. // It solely utilizes the `worker_node_url`. Typically, in production environments, workers operate on remote nodes. @@ -31,13 +33,14 @@ async fn main() -> Result<(), Box> { // For this demonstration, using the same URL address is acceptable. However, the number of URLs should match the number of executors. let worker_node_urls = vec!["127.0.0.1".to_string(), "127.0.0.1".to_string()]; let spawner = CloudSpawner::new(None, worker_node_urls, 4000); - let orchestrator = Orchestrator::<2, 14>::new( + let orchestrator = Orchestrator::::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16_1.csv".to_string(), + "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); + // Number of Executor should be equal to number of worker_node_urls let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); diff --git a/examples/hermez-raw-11 b/examples/hermez-raw-11 new file mode 100644 index 0000000000000000000000000000000000000000..2205b7297824a5a183a80a1988d429d6848e486b GIT binary patch literal 262404 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

|WTpeNn*<=0S`2VFfYFnI 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 z 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

gB;i#1r?>tsogN}W&>t~OmK6FgRZLptcK<* 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

|D{W5sA8&6rFE!X5 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 literal 0 HcmV?d00001 diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index 6309620..3c21e4b 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -15,7 +15,7 @@ pub async fn create_mst( // Convert `JsonEntry` -> `Entry` let entries = json_entries .iter() - .map(|entry| entry.to_entry()) + .map(|json_entry| json_entry.to_entry()) .collect::>>(); let crypcocurrencies = vec![ Cryptocurrency { diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index d985171..b3c60ac 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -88,7 +88,7 @@ impl Orchestrator Orchestrator Orchestrator Date: Tue, 5 Dec 2023 10:34:44 +0000 Subject: [PATCH 22/32] fix: retrieving preimage from sibling mini tree on AggregationMerkleSumTree --- examples/aggregation_flow.rs | 2 +- src/aggregation_merkle_sum_tree.rs | 57 ++++++++++++++-- src/orchestrator/csv/entry_16_3.csv | 32 ++++----- src/orchestrator/csv/entry_16_4.csv | 17 +++++ src/orchestrator/csv/entry_16_no_overflow.csv | 17 +++++ src/orchestrator/csv/entry_64.csv | 65 +++++++++++++++++++ src/orchestrator/test.rs | 17 ++--- 7 files changed, 175 insertions(+), 32 deletions(-) create mode 100644 src/orchestrator/csv/entry_16_4.csv create mode 100644 src/orchestrator/csv/entry_16_no_overflow.csv create mode 100644 src/orchestrator/csv/entry_64.csv diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index b2c93c9..eb150f7 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -14,7 +14,7 @@ use summa_backend::{ #[tokio::main] async fn main() -> Result<(), Box> { - // In this example, we will use local mini-tree server to generate mini-tree + // In this example, we will use local mini-tree server to generate mini-tree tokio::spawn(async move { let app = Router::new().route("/", post(create_mst)); let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 7773db1..99df102 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -74,27 +74,40 @@ impl Tree::from_csv(&format!( + "src/orchestrator/csv/entry_16_{}.csv", + i + )) + .unwrap(); + mini_trees.push(mini_tree); + } + let cryptocurrencies = mini_trees[0].cryptocurrencies().to_owned().to_vec(); + let aggregation_mst = + AggregationMerkleSumTree::::new(mini_trees, cryptocurrencies) + .unwrap(); + + let aggregation_mst_root = aggregation_mst.root(); + + // The entry_64.csv file is the aggregation of entry_16_1, entry_16_2, entry_16_3, entry_16_4 + let single_merkle_sum_tree = + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_64.csv") + .unwrap(); + + assert_eq!( + aggregation_mst_root.hash, + single_merkle_sum_tree.root().hash + ); + } + #[test] fn test_aggregation_mst_overflow() { // create new mini merkle sum trees. The accumulated balance for each mini tree is in the expected range - // note that the accumulated balance of the tree generated from entry_16_3 is just in the expected range for 1 unit + // note that the accumulated balance of the tree generated from entry_16_4 is just in the expected range for 1 unit let merkle_sum_tree_1 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_1.csv") + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16.csv") .unwrap(); let merkle_sum_tree_2 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_2.csv") + MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_no_overflow.csv") .unwrap(); // When creating the aggregation merkle sum tree, the accumulated balance of the two mini trees is not in the expected range, an error is thrown diff --git a/src/orchestrator/csv/entry_16_3.csv b/src/orchestrator/csv/entry_16_3.csv index f55f626..a280358 100644 --- a/src/orchestrator/csv/entry_16_3.csv +++ b/src/orchestrator/csv/entry_16_3.csv @@ -1,17 +1,17 @@ username,balance_ETH_ETH,balance_USDT_ETH -dxGaEAii,18446744073709551615,0 -MBlfbBGI,0,18446744073709551615 -lAhWlEWZ,0,0 -nuZweYtO,0,0 -gbdSwiuY,0,0 -RZNneNuP,0,0 -YsscHXkp,0,0 -RkLzkDun,0,0 -HlQlnEYI,0,0 -RqkZOFYe,0,0 -NjCSRAfD,0,0 -pHniJMQY,0,0 -dOGIMzKR,0,0 -HfMDmNLp,0,0 -xPLKzCBl,0,0 -AtwIxZHo,0,0 +a1GaEAaa,11888,41163 +b2lfbBGI,67823,18651 +c3hWlEWZ,18651,2087 +d4ZweYtO,22073,55683 +e5dSwiuY,34897,83296 +f6NneNuP,83296,16881 +g7scHXkp,31699,35479 +h8LzkDun,2087,79731 +i9QlnEYI,30605,11888 +l0kZOFYe,16881,14874 +m1CSRAfD,41163,67823 +n2niJMQY,14874,22073 +o3GIMzKR,10032,10032 +p4MDmNLp,55683,34897 +q5LKzCBl,79731,30605 +r6wIxZHo,35479,31699 diff --git a/src/orchestrator/csv/entry_16_4.csv b/src/orchestrator/csv/entry_16_4.csv new file mode 100644 index 0000000..880e9b3 --- /dev/null +++ b/src/orchestrator/csv/entry_16_4.csv @@ -0,0 +1,17 @@ +username,balance_ETH_ETH,balance_USDT_ETH +a17aEAaa,11888,41163 +b28fbBGI,67823,18651 +c39WlEWZ,18651,2087 +d40weYtO,22073,55683 +e51SwiuY,34897,83296 +f62neNuP,83296,16881 +g73cHXkp,31699,35479 +h84zkDun,2087,79731 +i95lnEYI,30605,11888 +l06ZOFYe,16881,14874 +m17SRAfD,41163,67823 +n28iJMQY,14874,22073 +o39IMzKR,10032,10032 +p40DmNLp,55683,34897 +q51KzCBl,79731,30605 +r62IxZHo,35479,31699 diff --git a/src/orchestrator/csv/entry_16_no_overflow.csv b/src/orchestrator/csv/entry_16_no_overflow.csv new file mode 100644 index 0000000..f55f626 --- /dev/null +++ b/src/orchestrator/csv/entry_16_no_overflow.csv @@ -0,0 +1,17 @@ +username,balance_ETH_ETH,balance_USDT_ETH +dxGaEAii,18446744073709551615,0 +MBlfbBGI,0,18446744073709551615 +lAhWlEWZ,0,0 +nuZweYtO,0,0 +gbdSwiuY,0,0 +RZNneNuP,0,0 +YsscHXkp,0,0 +RkLzkDun,0,0 +HlQlnEYI,0,0 +RqkZOFYe,0,0 +NjCSRAfD,0,0 +pHniJMQY,0,0 +dOGIMzKR,0,0 +HfMDmNLp,0,0 +xPLKzCBl,0,0 +AtwIxZHo,0,0 diff --git a/src/orchestrator/csv/entry_64.csv b/src/orchestrator/csv/entry_64.csv new file mode 100644 index 0000000..56b7f39 --- /dev/null +++ b/src/orchestrator/csv/entry_64.csv @@ -0,0 +1,65 @@ +username,balance_ETH_ETH,balance_USDT_ETH +dxGaEAii,11888,41163 +MBlfbBGI,67823,18651 +lAhWlEWZ,18651,2087 +nuZweYtO,22073,55683 +gbdSwiuY,34897,83296 +RZNneNuP,83296,16881 +YsscHXkp,31699,35479 +RkLzkDun,2087,79731 +HlQlnEYI,30605,11888 +RqkZOFYe,16881,14874 +NjCSRAfD,41163,67823 +pHniJMQY,14874,22073 +dOGIMzKR,10032,10032 +HfMDmNLp,55683,34897 +xPLKzCBl,79731,30605 +AtwIxZHo,35479,31699 +aaGaEAaa,11888,41163 +bblfbBGI,67823,18651 +cchWlEWZ,18651,2087 +ddZweYtO,22073,55683 +eedSwiuY,34897,83296 +ffNneNuP,83296,16881 +ggscHXkp,31699,35479 +hhLzkDun,2087,79731 +iiQlnEYI,30605,11888 +llkZOFYe,16881,14874 +mmCSRAfD,41163,67823 +nnniJMQY,14874,22073 +ooGIMzKR,10032,10032 +ppMDmNLp,55683,34897 +qqLKzCBl,79731,30605 +rrwIxZHo,35479,31699 +a1GaEAaa,11888,41163 +b2lfbBGI,67823,18651 +c3hWlEWZ,18651,2087 +d4ZweYtO,22073,55683 +e5dSwiuY,34897,83296 +f6NneNuP,83296,16881 +g7scHXkp,31699,35479 +h8LzkDun,2087,79731 +i9QlnEYI,30605,11888 +l0kZOFYe,16881,14874 +m1CSRAfD,41163,67823 +n2niJMQY,14874,22073 +o3GIMzKR,10032,10032 +p4MDmNLp,55683,34897 +q5LKzCBl,79731,30605 +r6wIxZHo,35479,31699 +a17aEAaa,11888,41163 +b28fbBGI,67823,18651 +c39WlEWZ,18651,2087 +d40weYtO,22073,55683 +e51SwiuY,34897,83296 +f62neNuP,83296,16881 +g73cHXkp,31699,35479 +h84zkDun,2087,79731 +i95lnEYI,30605,11888 +l06ZOFYe,16881,14874 +m17SRAfD,41163,67823 +n28iJMQY,14874,22073 +o39IMzKR,10032,10032 +p40DmNLp,55683,34897 +q51KzCBl,79731,30605 +r62IxZHo,35479,31699 diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 73a8f0a..3113d0f 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -10,11 +10,12 @@ async fn test_single_mock_worker() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16_1.csv".to_string(), + "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries().len()); } @@ -41,8 +42,8 @@ async fn test_none_exist_worker() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16_1.csv".to_string(), + "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); @@ -60,8 +61,8 @@ async fn test_with_containers() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16_1.csv".to_string(), + "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); @@ -81,8 +82,8 @@ async fn test_with_swarm_service() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/entry_16.csv".to_string(), + "./src/orchestrator/csv/entry_16_1.csv".to_string(), + "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); From d6dd01e14bcbb08b779fef4510ed80d972efc835 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Tue, 5 Dec 2023 14:04:55 +0000 Subject: [PATCH 23/32] fix: example; updated README --- Cargo.toml | 4 ++ README.md | 90 ++++++++++++++++++++++++++---- docker-compose.yml | 2 +- examples/aggregation_flow.rs | 71 ++++++++++++++++------- src/aggregation_merkle_sum_tree.rs | 7 ++- src/executor/cloud_spawner.rs | 19 +++++-- src/executor/local_spawner.rs | 2 +- src/executor/test.rs | 2 +- src/orchestrator/test.rs | 10 ++-- 9 files changed, 160 insertions(+), 47 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a0d5f95..757d830 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,3 +25,7 @@ serde_yaml = "0.9.27" [[bin]] name = "mini-tree-server" path = "bin/mini_tree_server.rs" + +[features] +docker = [] +docker-swarm = [] diff --git a/README.md b/README.md index 61e8e08..19735c0 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The diagram illustrates a distributed approach to constructing the `AggregatedMe ## Orchestrator -The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving of tasks in the generation of Merkle sum tree. +The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving efficiency of tasks of building Merkle sum tree. The final result of the Orchestrator is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the Workers. The Worker in here refers to a container running `mini-tree-server`. Key functions of the Orchestrator include: @@ -31,7 +31,7 @@ Key functions of the Orchestrator include: ## Executor and Worker -The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. A Worker in this context refers to a container that runs the `mini-tree-server`. Its primary function is to generate a segment of the AggregationMerkleSumTree, known as a `mini-tree`, by processing entry data. These mini-trees are then aggregated by the Orchestrator to form the complete AggregationMerkleSumTree. +The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. Its primary function is to generate a segment of the AggregationMerkleSumTree, known as a `mini-tree`, by processing entry data. These mini-trees are then aggregated by the Orchestrator to form the complete AggregationMerkleSumTree. Key aspects of the Executor's role include: @@ -152,23 +152,91 @@ To spawn more workers, follow these steps: Scaling service allows you to adjust the number of workers more easily than spawning each worker individually. -## Test +## Running test -Before starting the tests, you need to build the `mini-tree-server` image and name it "summa-aggregation". +You can run the tests using following command: -Build the image with the following command: +```bash +cargo test --release +``` + +Note: The Worker will run locally and uses port 4000 as the default for its server. +Please ensure that this port is not already in use to avoid errors. + +## Running Additional Tests Involving Docker and Docker Swarm + +To run additional tests involving Docker and Docker Swarm mode, ensure that your Docker registry contains the "summadev/summa-aggregation-mini-tree" image. + +If you do not have this image, you can either build it or download it. + +### Building the docker image + +Build the image using the following command: + +```bash +docker build . -t summadev/summa-aggregation-mini-tree +``` + +### Downloading the Docker Image + +Alternatively, you can download the image from Docker Hub using the following command: + +```bash +docker pull summadev/summa-aggregation-mini-tree +``` + +Ensure that the "summadev/summa-aggregation-mini-tree" image exists in your local Docker registry. + +### Testing with LocalSpawner + +The following command runs an additional test case using the LocalSpawner, which spawns worker containers in the local Docker environment. This extra test case involves running two containers during the testing process: ```bash -docker build . -t summa-aggregation +cargo test --features docker ``` -Ensure that the `summa-aggregation:latest` image exists in your local registry. +### Testing with CloudSpawner -Then, you can run the tests using this command: +If your Docker environment is successfully running in Swarm mode, you can run an additional test case that spawns workers on Swarm nodes using the `CloudSpawner`. Before running this test, please refer to the section "Spawning More Workers with CloudSpawner" to check your Docker Swarm setup. ```bash -cargo test +cargo test --features docker-swarm ``` -Note that the Worker uses port 4000 as the default for its server. -Please ensure that this port is not already in use when you meet error. +Please ensure that your Docker Swarm has at least one node connected to the manager node. Also, verify that each worker node in the swarm has the "summadev/summa-aggregation-mini-tree" image in its Docker registry. If a node connected to the manager node does not have the image, it will not be able to spawn workers on that node. + +## Summa Aggregation Example + +This example demonstrates the setup and operation of a distributed environment using Summa Aggregation, including the initialization of round and generating inclusion proof. A notable aspect of this demonstration is how the AggregationMerkleSumTree can produce the generation of inclusion proofs, similarly to the MerkleSumTree. + +### 1. Setup Distributed Environment + +Custodians can leverage any cloud infrastructure to establish worker nodes. In this example, we use two local servers running mini-tree services as workers, rather than deploying worker containers on remote nodes. + +Key steps: + +- **Spawning Worker Nodes**: Two local servers are spawned, each running a mini-tree service. + +- **Worker URLs**: It is crucial to ensure the number of worker URLs matches the number of executors. In this example, we use `127.0.0.1:4000` and `127.0.0.1:4001`. + +### 2. Initialize the Round with Aggregation Merkle Sum Tree + +Initiating the round with an `AggregationMerkleSumTree` is a key step after setting up the distributed environment with worker nodes. This process involves the `Orchestrator` and the `Round`. + +- **Orchestrator and AggregationMerkleSumTree**: The `Orchestrator` is initialized with the `CloudSpawner` and paths to the CSV files containing entry data. It uses this information to generate the `AggregationMerkleSumTree`, which forms the basis for the round's operations. + +- **Round Initialization**: Subsequently, the `Round` is initialized using the aggregation merkle sum tree. The `Round` is integral for interactions with the Summa contract and relies on the setup performed by the `Orchestrator`. + +### 3. Interact with the Summa Contract and Generate Proof of Inclusion + +The actual example only shows the creation of an inclusion proof. + +For detailed information on interaction patterns similar to those in the `summa-backend` example, refer to the ['summa_solvency_flow'](https://github.com/summa-dev/summa-solvency/blob/master/backend/examples/summa_solvency_flow.rs). + +### Example Execution + +Run the example using the following command: + +```bash +cargo run --release --example aggregation_flow +``` diff --git a/docker-compose.yml b/docker-compose.yml index 62a96d1..6155cd4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.8' # CloudSpawner only reads from the first element of lists services: mini_tree: - image: sifnoc/summa-aggregation:mini-tree-v0.1 + image: summadev/summa-aggregation-mini-tree:latest ports: - published: 4000 target: 4000 diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index eb150f7..5e49ac8 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -14,7 +14,12 @@ use summa_backend::{ #[tokio::main] async fn main() -> Result<(), Box> { - // In this example, we will use local mini-tree server to generate mini-tree + // 1. Setup Distributed Environment + // + // Custodians can use any cloud infrastructure to set up worker nodes. + // In this example, instead of spawning worker containers on remote nodes, we will use two local servers running mini-tree services as workers. + + // Spawning Worker_1 tokio::spawn(async move { let app = Router::new().route("/", post(create_mst)); let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); @@ -24,14 +29,46 @@ async fn main() -> Result<(), Box> { .unwrap(); }); - // The CloudSpawner, when used with the Orchestrator, does not rely on a `docker-compose.yml` file or a `service_name` to create Workers. - // It solely utilizes the `worker_node_url`. Typically, in production environments, workers operate on remote nodes. - const LEVELS: usize = 2; + // Spawning Worker_2 + tokio::spawn(async move { + let app = Router::new().route("/", post(create_mst)); + let addr = SocketAddr::from(([0, 0, 0, 0], 4001)); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); + }); + + // We assume that custodians, when setting up their distributed environment, will obtain the URLs of worker nodes. + // In this example, we use two worker URLs corresponding to the workers spawned earlier. + // It is important to ensure that the number of URLs matches the number of executors. + let worker_node_urls = vec!["127.0.0.1:4000".to_string(), "127.0.0.1:4001".to_string()]; + + // To initiate the Round, a SummaSigner instance and its corresponding SummaContract instance are required. + // Here, we initialize the signer with a specified private key and the Summa contract's address. + let (anvil, _, _, _, summa_contract) = initialize_test_env(None).await; + let signer = SummaSigner::new( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + anvil.endpoint().as_str(), + AddressInput::Address(summa_contract.address()), + ) + .await?; + // Up to this point, the above code logic can be viewed as the Custodian's cloud infra structure setup process for Summa-Aggregation. + + // 2. Initialize the Round with Aggregtaion Merkle Sum Tree + // + // Setting parameters for the aggregation merkle sum tree: + // + // LEVELS: This defines the number of levels in the aggregation merkle sum tree, including the mini-tree level. + const LEVELS: usize = 5; + // N_CURRENCIES: Specifies the number of currencies in the entry data. const N_CURRENCIES: usize = 2; + // N_BYTES: Determines the maximum total balance allowed for each currency, calculated as 1 << (8 * 14) = 2^112. const N_BYTES: usize = 14; + // Note: These parameters should match those in the Summa contract. - // For this demonstration, using the same URL address is acceptable. However, the number of URLs should match the number of executors. - let worker_node_urls = vec!["127.0.0.1".to_string(), "127.0.0.1".to_string()]; + // CloudSpawner does not depend on a `docker-compose.yml` file or a `service_name` for creating workers. + // This implies that `service_info` is not necessary. When `service_info` is absent, CloudSpawner creates an Executor solely based on the `worker_node_url`. let spawner = CloudSpawner::new(None, worker_node_urls, 4000); let orchestrator = Orchestrator::::new( Box::new(spawner), @@ -41,21 +78,10 @@ async fn main() -> Result<(), Box> { ], ); - // Number of Executor should be equal to number of worker_node_urls + // The number of Executors must match the number of worker_node_urls. let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - // The remaining steps are similar to the `summa-backend` example, specifically 'summa_solvency_flow'. - // For detailed information, refer to: https://github.com/summa-dev/summa-solvency/blob/master/backend/examples/summa_solvency_flow.rs - let (anvil, _, _, _, summa_contract) = initialize_test_env(None).await; - - let signer = SummaSigner::new( - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - anvil.endpoint().as_str(), - AddressInput::Address(summa_contract.address()), - ) - .await?; - - // Once get the aggregation merkle sum tree, we can initialize the round. + // After obtaining the aggregation merkle sum tree, we proceed to initialize the round. let timestamp = 1u64; let params_path = "examples/hermez-raw-11"; let round = Round::::new( @@ -66,7 +92,12 @@ async fn main() -> Result<(), Box> { ) .unwrap(); - // Next, generate the proof of inclusion. + // 3. Interact with the Summa Contract and Generate Proof of Inclusion + // + // Interactions with the Summa contract, such as sending Commitment or AddressOwnership, are similar to those in the `summa-backend` example, particularly 'summa_solvency_flow'. + // For detailed information, refer to the example at: https://github.com/summa-dev/summa-solvency/blob/master/backend/examples/summa_solvency_flow.rs + // + // Here, we demonstrate generating the proof of inclusion for User 0. let inclusion_proof_of_user0 = round.get_proof_of_inclusion(0).unwrap(); assert!(inclusion_proof_of_user0.get_public_inputs().len() > 0); // Check public input counts diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 99df102..9880f73 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -302,9 +302,10 @@ mod test { MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16.csv") .unwrap(); - let merkle_sum_tree_2 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_no_overflow.csv") - .unwrap(); + let merkle_sum_tree_2 = MerkleSumTree::::from_csv( + "src/orchestrator/csv/entry_16_no_overflow.csv", + ) + .unwrap(); // When creating the aggregation merkle sum tree, the accumulated balance of the two mini trees is not in the expected range, an error is thrown let result = AggregationMerkleSumTree::::new( diff --git a/src/executor/cloud_spawner.rs b/src/executor/cloud_spawner.rs index 65becc5..6ebf196 100644 --- a/src/executor/cloud_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -16,7 +16,7 @@ pub struct CloudSpawner { service_info: Option<(String, String)>, worker_counter: Arc, worker_node_url: Vec, - exposed_port: i64, + default_port: i64, } /// `CloudSpawner` is responsible for managing the lifecycle of workers in a cloud environment. @@ -29,14 +29,14 @@ impl CloudSpawner { pub fn new( service_info: Option<(String, String)>, // If the user want to use docker-compose.yml for docker swarm worker_node_url: Vec, - exposed_port: i64, + default_port: i64, ) -> Self { assert!(!worker_node_url.is_empty(), "Worker node url is empty"); CloudSpawner { service_info, worker_counter: Arc::new(AtomicUsize::new(0)), worker_node_url, - exposed_port, + default_port, } } @@ -147,15 +147,24 @@ impl ExecutorSpawner for CloudSpawner { // The traffic is routed to the service by the swarm manager. // So, All executor can use the same exposed endpoint for distributing task to multiple workers. - let endpoint = self.exposed_port; + let port = self.default_port; let node_url = self.worker_node_url[current_worker_counter].clone(); let worker_counter = self.worker_counter.clone(); Box::pin(async move { if worker_counter.load(Ordering::SeqCst) == 0 { let _ = rx.await; } + // Check if the URL already contains a port + let has_port = node_url.split(':').last().unwrap().parse::().is_ok(); + + // Append the port if it's not there + let final_url = if has_port { + node_url.clone() + } else { + format!("{}:{}", node_url, port) + }; worker_counter.fetch_add(1, Ordering::SeqCst); - Executor::new(format!("http://{}:{}", node_url, endpoint), None) + Executor::new(format!("http://{}", final_url), None) }) } diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index 4f807a2..b5b59ae 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -134,7 +134,7 @@ mod tests { let spawner = LocalSpawner { docker: Docker::connect_with_local_defaults().unwrap(), worker_counter: AtomicUsize::new(0), - image_name: "summa-aggregation".to_string(), // Should exist on local registry + image_name: "summadev/summa-aggregation-mini-tree:latest".to_string(), // Should exist on local registry container_name: "mini_tree_generator".to_string(), }; diff --git a/src/executor/test.rs b/src/executor/test.rs index 3f5ce06..1c89835 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -24,7 +24,7 @@ fn test_util_get_specs_from_compose() { assert_eq!( service_spec.task_template.unwrap().container_spec.unwrap(), TaskSpecContainerSpec { - image: Some("sifnoc/summa-aggregation:mini-tree-v0.1".to_string()), + image: Some("summadev/summa-aggregation-mini-tree:latest".to_string()), ..Default::default() } ); diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 3113d0f..5977598 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -66,11 +66,11 @@ async fn test_with_containers() { ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); } -#[cfg(feature = "docker")] +#[cfg(feature = "docker-swarm")] #[tokio::test] async fn test_with_swarm_service() { let spawner = CloudSpawner::new( @@ -87,6 +87,6 @@ async fn test_with_swarm_service() { ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries.len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries.len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); } From 4b4e10e2c83faebcf94c1aa870b01f6a3778ebd9 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Wed, 6 Dec 2023 11:21:51 +0000 Subject: [PATCH 24/32] fix: more error handling; added retry on executor --- .github/workflows/rust.yml | 23 ++++++++++++++++++++ src/aggregation_merkle_sum_tree.rs | 3 ++- src/executor/local_spawner.rs | 27 ++++++++++++++++------- src/executor/mod.rs | 35 +++++++++++++++++++----------- src/orchestrator/mod.rs | 22 ++++++++++--------- src/orchestrator/test.rs | 28 ++++++++++++++++++------ 6 files changed, 99 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/rust.yml diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..f7ffac5 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,23 @@ +name: Aggregation Test + +on: + push: + branches: ["*"] + pull_request: + branches: ["*"] + +env: + CARGO_TERM_COLOR: always + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Pull mini-tree image + run: docker pull summadev/summa-aggregation-mini-tree:latest + + - name: Run tests + run: cargo test --features docker diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 9880f73..3a5abbb 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -48,7 +48,7 @@ impl Tree &[Entry] { - &self.mini_trees[0].entries() + self.mini_trees[0].entries() } fn get_entry(&self, user_index: usize) -> &Entry { @@ -97,6 +97,7 @@ impl Tree Self { + let docker = match env::var("DOCKER_HOST") { + // Read `DOCKER_HOST` environment variable as default + Ok(host) => Docker::connect_with_http_defaults() + .unwrap_or_else(|_| panic!("Failed to connect to {} for using Docker", host)), + _ => Docker::connect_with_local_defaults() + .unwrap_or_else(|_| panic!("Failed to connect to Docker")), + }; + LocalSpawner { - docker: Docker::connect_with_local_defaults().unwrap(), + docker, worker_counter: AtomicUsize::new(0), image_name, container_name, @@ -52,6 +61,8 @@ impl LocalSpawner { platform: None, }; + println!("docker-info: {:?}", docker.info().await?); + docker .create_container(Some(create_container_options), config.clone()) .await?; @@ -66,6 +77,8 @@ impl LocalSpawner { let container_info: ContainerInspectResponse = docker.inspect_container(&container_name, None).await?; + println!("container_info: {:?}", container_info); + Ok(container_info) } } @@ -124,19 +137,17 @@ impl ExecutorSpawner for LocalSpawner { } } +#[cfg(feature = "docker")] #[cfg(test)] mod tests { use super::*; - use std::sync::atomic::AtomicUsize; #[tokio::test] async fn test_executor_spawner() { - let spawner = LocalSpawner { - docker: Docker::connect_with_local_defaults().unwrap(), - worker_counter: AtomicUsize::new(0), - image_name: "summadev/summa-aggregation-mini-tree:latest".to_string(), // Should exist on local registry - container_name: "mini_tree_generator".to_string(), - }; + let spawner = LocalSpawner::new( + "summadev/summa-aggregation-mini-tree:latest".to_string(), + "executor_test".to_string(), + ); // Spawn 2 executors let executor_1 = spawner.spawn_executor().await; diff --git a/src/executor/mod.rs b/src/executor/mod.rs index f1ca432..cd986cd 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -12,6 +12,7 @@ pub use spawner::ExecutorSpawner; use reqwest::Client; use std::error::Error; +use tokio::time::{sleep, Duration}; use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; use summa_backend::merkle_sum_tree::MerkleSumTree; @@ -48,21 +49,29 @@ impl Executor { [usize; N_CURRENCIES + 1]: Sized, [usize; N_CURRENCIES + 2]: Sized, { - let response = self - .client - .post(&self.url) - .json(&json_entries) - .send() - .await - .map_err(|err| Box::new(err) as Box)?; + const MAX_RETRIES: u32 = 5; + const RETRY_DELAY: Duration = Duration::from_secs(1); - let json_tree = response - .json::() - .await - .map_err(|err| Box::new(err) as Box)?; + let mut attempts = 0; + loop { + attempts += 1; + let response = self.client.post(&self.url).json(&json_entries).send().await; - let tree = json_tree.to_mst().unwrap(); + match response { + Ok(response) => { + let json_tree = response + .json::() + .await + .map_err(|err| Box::new(err) as Box)?; - Ok(tree) + let tree = json_tree.to_mst().unwrap(); + return Ok(tree); + } + Err(_err) if attempts < MAX_RETRIES => { + sleep(RETRY_DELAY).await; + } + Err(err) => return Err(Box::new(err) as Box), + } + } } } diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index b3c60ac..5720e84 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -2,7 +2,7 @@ mod test; use futures::future::join_all; use std::{cmp::min, error::Error}; -use summa_backend::merkle_sum_tree::{utils::parse_csv_to_entries, Cryptocurrency}; +use summa_backend::merkle_sum_tree::{utils::parse_csv_to_entries, Cryptocurrency, MerkleSumTree}; use tokio::sync::mpsc; use tokio_util::sync::CancellationToken; @@ -87,7 +87,6 @@ impl Orchestrator Orchestrator> = + ordered_tree_results.into_iter().flatten().collect(); + + // Occur error if the number of mini_tree in 'all_merkle_sum_tree' is not equal to the number of entry_csvs. + if all_merkle_sum_tree.len() != self.entry_csvs.len() { + return Err("Mismatch in generated mini tree counts and given CSV counts".into()); + } AggregationMerkleSumTree::new( all_merkle_sum_tree, vec![ Cryptocurrency { - name: "BTC".to_string(), - chain: "mainnet".to_string(), - }, - Cryptocurrency { - name: "ETH".to_string(), - chain: "mainnet".to_string(), - }, + name: "DUMMY".to_string(), + chain: "ETH".to_string(), + }; + N_CURRENCIES ], ) } diff --git a/src/orchestrator/test.rs b/src/orchestrator/test.rs index 5977598..9a74c4e 100644 --- a/src/orchestrator/test.rs +++ b/src/orchestrator/test.rs @@ -30,8 +30,14 @@ async fn test_none_exist_csv() { "./src/orchestrator/csv/no_exist.csv".to_string(), ], ); - let one_mini_tree_result = orchestrator.create_aggregation_mst(2).await.unwrap(); - assert_eq!(&0, one_mini_tree_result.depth()); + match orchestrator.create_aggregation_mst(2).await { + Ok(_) => panic!("Expected an error"), + Err(e) => { + assert!(e + .to_string() + .contains("Mismatch in generated mini tree counts and given CSV counts")); + } + } } #[tokio::test] @@ -46,15 +52,22 @@ async fn test_none_exist_worker() { "./src/orchestrator/csv/entry_16_2.csv".to_string(), ], ); - let empty_mini_tree_error = orchestrator.create_aggregation_mst(2).await.unwrap_err(); - assert_eq!("Empty mini tree inputs", empty_mini_tree_error.to_string()); + + match orchestrator.create_aggregation_mst(2).await { + Ok(_) => panic!("Expected an error"), + Err(e) => { + assert!(e + .to_string() + .contains("Mismatch in generated mini tree counts and given CSV counts")); + } + } } #[cfg(feature = "docker")] #[tokio::test] async fn test_with_containers() { let spawner = LocalSpawner::new( - "summa-aggregation".to_string(), + "summadev/summa-aggregation-mini-tree:latest".to_string(), "orchestrator_test".to_string(), ); @@ -66,8 +79,9 @@ async fn test_with_containers() { ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries().len()); } #[cfg(feature = "docker-swarm")] @@ -88,5 +102,5 @@ async fn test_with_swarm_service() { ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); - assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(0).entries().len()); + assert_eq!(16, aggregation_merkle_sum_tree.mini_tree(1).entries().len()); } From f227c1fe2e1a1e2e09fe86c765520c289e62bda0 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Wed, 6 Dec 2023 17:37:04 +0000 Subject: [PATCH 25/32] chore: added description as in-line comments --- src/executor/mod.rs | 10 ++++ src/executor/spawner.rs | 105 ++++++++++++++++++++++------------------ src/orchestrator/mod.rs | 27 ++++++++--- 3 files changed, 88 insertions(+), 54 deletions(-) diff --git a/src/executor/mod.rs b/src/executor/mod.rs index cd986cd..e0e7870 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -17,6 +17,16 @@ use tokio::time::{sleep, Duration}; use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; use summa_backend::merkle_sum_tree::MerkleSumTree; +/// Executor role and functionality. +/// Acts as an intermediary between the Orchestrator and Workers, facilitating the data processing workflow. +/// Each Executor operates in a one-to-one relationship with a Worker, processing entry data into `mini-tree`. +/// +/// Key aspects of the Executor's role include: +/// - **Spawning and Connection**: Executors connect with Workers to execute tasks, enhancing the system's scalability. +/// - **Data Handling and Task Distribution**: Executors manage and distribute data entries, ensuring smooth workflow +/// - **Communication Bridge**: They facilitate communication within the data pipeline, relaying 'mini-tree' from Workers to the Orchestrator. +/// +/// Executors are dynamically spawned and connected to Workers for task execution. #[derive(Clone)] pub struct Executor { client: Client, diff --git a/src/executor/spawner.rs b/src/executor/spawner.rs index fb5a38a..64d5939 100644 --- a/src/executor/spawner.rs +++ b/src/executor/spawner.rs @@ -2,58 +2,69 @@ use std::{future::Future, pin::Pin}; use crate::executor::Executor; +/// ExecutorSpawner responsibility and types. +/// +/// Responsible for initializing and terminating Executors, serving as a management point for creating Executor instances and Workers. +/// +/// Types include: +/// - MockSpawner: For testing, runs `mini-tree-server` locally. +/// - LocalSpawner: Initializes Executors and Workers in local Docker environments. +/// - CloudSpawner: Optimized for cloud resources and Docker Swarm, manages containers as services for scalability. +/// +/// Note: ExecutorSpawner is a trait with key methods `spawn_executor` and `terminate_executor`. +/// pub trait ExecutorSpawner { - // Spawns an executor asynchronously. - // - // This method initializes an Executor and returns a Future that resolves to the Executor. - // - // To achieve this asynchronously (outside of an async trait function), we use a one-time channel ('oneshot`) to deliver the variables to the Future. - // - // Internally, it performs the following codelines: - // - // 1. Uses a 'oneshot'channel for sending the variables from the spawned async task. - // ``` - // let (tx, rx) = oneshot::channel(); - // ``` - // 2. Clones necessary variables (url, name and so on) to move them into the async block. - // ``` - // let url = self.url.clone(); - // ``` - // 3. Spawns an asynchronous task (`tokio::spawn`) that asynchronously creates a worker and sends back its information. - // ``` - // tokio::spawn(async move { - // if let Ok(worker_info) = - // Spawner::create_worker(url).await - // { - // let _ = tx.send(worker_info); - // } - // }); - // Note that, the "create_worker" is typically declared in the "Spawner" struct that has "ExecutorSpawner"trait. - // 4. Returns a Future that, upon completion, provides an Executor connected to the newly spawned worker. - // ``` - // Box::pin(async move { - // let url = rx.await.expect("Failed to receive worker URL"); - // Executor::new(url, None); - // }); - // ``` + /// Spawns an executor asynchronously. // + /// This method initializes an Executor and returns a Future that resolves to the Executor. + /// + /// To achieve this asynchronously (outside of an async trait function), we use a one-time channel ('oneshot`) to deliver the variables to the Future. + /// + /// Internally, it performs the following codelines: + /// + /// 1. Uses a 'oneshot'channel for sending the variables from the spawned async task. + /// ```ignore + /// let (tx, rx) = oneshot::channel(); + /// ``` + /// 2. Clones necessary variables (url, name and so on) to move them into the async block. + /// ```ignore + /// let url = self.url.clone(); + /// ``` + /// 3. Spawns an asynchronous task (`tokio::spawn`) that asynchronously creates a worker and sends back its information. + /// ```ignore + /// tokio::spawn(async move { + /// if let Ok(worker_info) = + /// Spawner::create_worker(url).await + /// { + /// let _ = tx.send(worker_info); + /// } + /// }); + /// Note that, the "create_worker" is typically declared in the "Spawner" struct that has "ExecutorSpawner"trait. + /// 4. Returns a Future that, upon completion, provides an Executor connected to the newly spawned worker. + /// ```ignore + /// Box::pin(async move { + /// let url = rx.await.expect("Failed to receive worker URL"); + /// Executor::new(url, None); + /// }); + /// ``` + /// + /// // Returns: - // - `Pin + Send>>`: A Future that, when awaited, yields an Executor instance and spawns a worker. - // + // - "Pin + Send>>": A Future that, when awaited, yields an Executor instance and spawns a worker. fn spawn_executor(&self) -> Pin + Send>>; - // Terminates all spawned executors (and/or workers) asynchronously. - // - // This method is responsible for gracefully shutting down all active executors (and/or workers) by calling - // To do this, the "Spawner"may needs some fields for storing some accessing point to the workers, which are spawned with the executors. - // For deliver variables to Future results, use a channel like the pattern at 'spawn_executor'. - // - // The termination process typically involves: - // - Iterating through all active Executors and workers. - // - Invoking kind of 'shutdown'on each executors and workers to initiate their shutdown. - // - Awaiting the completion of all shutdown operations. - // + /// Terminates all spawned executors (and/or workers) asynchronously. + /// + /// This method is responsible for gracefully shutting down all active executors (and/or workers) by calling + /// To do this, the "Spawner"may needs some fields for storing some accessing point to the workers, which are spawned with the executors. + /// For deliver variables to Future results, use a channel like the pattern at 'spawn_executor'. + /// + /// The termination process typically involves: + /// - Iterating through all active Executors and workers. + /// - Invoking kind of 'shutdown'on each executors and workers to initiate their shutdown. + /// - Awaiting the completion of all shutdown operations. + /// // Returns: - // - `Pin + Send>>`: A Future that, when awaited, indicates that all executors (and/or workers) have been terminated. + // - "Pin + Send>>": A Future that, when awaited, indicates that all executors (and/or workers) have been terminated. fn terminate_executors(&self) -> Pin + Send>>; } diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index 5720e84..e10daa2 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -10,6 +10,14 @@ use crate::aggregation_merkle_sum_tree::AggregationMerkleSumTree; use crate::executor::ExecutorSpawner; use crate::json_mst::JsonEntry; +/// The Orchestrator in Summa Aggregation +/// +/// It serves as the central management component, coordinating data processing activities +/// between Executors and Workers, thereby improving the efficiency of building the Merkle sum tree. +/// +/// Functions include dynamically spawning Executors, managing task distribution, +/// handling errors and pipeline control, and building the `AggregationMerkleSumTree` +/// by aggregating mini-trees constructed by the Workers. pub struct Orchestrator { executor_spawner: Box, entry_csvs: Vec, @@ -23,12 +31,13 @@ impl Orchestrator Orchestrator Date: Thu, 7 Dec 2023 08:13:21 +0000 Subject: [PATCH 26/32] fix: update README for mini tree server; removed some part on main README --- README.md | 2 +- bin/README.md | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 19735c0..3779a15 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Key aspects of the Executor's role include: ## ExecutorSpawner -The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances and Workers. The latter function as the `mini-tree-server`. +The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances. In the Summa-Aggregation, there are three types of `ExecutorSpawner` provided: diff --git a/bin/README.md b/bin/README.md index a12f717..3ee93be 100644 --- a/bin/README.md +++ b/bin/README.md @@ -1,24 +1,30 @@ # Mini Tree Server -Mini tree server is wrapped +Mini Tree Server is an Axum-based server that encapsulates the functionality of the Mini Tree Generator. -### Test Mini Tree Server +## Test Mini Tree Server -You can manually test the `Mini Tree Server` with running container. +First, to start the Mini Tree Server, use the command: -First, Use the command below to start the Mini Tree Server container: +```bash + cargo run --release --bin mini-tree-server +``` + +Alternatively, if you have the summa-aggregation-mini-tree image locally, can run the server with this command: ```bash - docker run -d -p 4000:4000 --name mini-tree-server summa-aggretaion/mini-tree + docker run -d -p 4000:4000 --name mini-tree-server-test summadev/summa-aggregation-mini-tree ``` -Second, to send two entries to the `Mini Tree Server`, use this script: +For details on obtaining the summadev/summa-aggregation-mini-tree image, please refer to the [Building Image](../README.md#building-the-docker-image) and [Downloading Image](../README.md#downloading-the-docker-image) sections in the README. + +Second, send two entries to the Mini Tree Server, execute the following script: ```bash bash ./scripts/test_sending_entry.sh ``` -Upon successful execution, you will receive a response similar to the following +Upon successful execution, you will receive a response similar to the following:

Click View Response @@ -66,3 +72,4 @@ Upon successful execution, you will receive a response similar to the following this JSON output is prettified for clarity
+ From c6ed94529d5f24b3015c7a28b968d48929aa8015 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 7 Dec 2023 09:07:11 +0000 Subject: [PATCH 27/32] chore: update README and added description as in-line --- README.md | 168 ++-------------------------------- src/executor/cloud_spawner.rs | 18 ++-- src/executor/local_spawner.rs | 5 + src/executor/mock_spawner.rs | 4 + src/mini_tree_generator.rs | 12 +++ 5 files changed, 42 insertions(+), 165 deletions(-) diff --git a/README.md b/README.md index 3779a15..21bbd86 100644 --- a/README.md +++ b/README.md @@ -1,160 +1,10 @@ # Summa Aggregation -Summa Aggregation is a scalable solution specifically designed to accelerate the process of building Merkle sum tree. - -Our benchmarks in Summa Solvency revealed that constructing a merkle sum tree is a major time-consuming aspect of proof generation. - -The primary objective of Summa Aggregation is to enable efficient scaling in the construction of the tree by parallelization and distributed computation in multiple machines. - -For further optimization in Summa Aggregation, we introduced the AggregationMerkleSumTree component. This component is designed for efficiently constructing large Merkle sum trees by utilizing smaller-sized Merkle sum tree. - -## Diagram of Parallel Merkle Sum Tree Construction - -The diagram illustrates a distributed approach to constructing the `AggregatedMerkleSumTree`, where an orchestrator delegates tasks to executors, which are then processed in parallel by workers. The following sections will explain the roles of the Orchestrator, Executor, Worker and ExecutorSpawner. - -![diagram](/Orchestrator-diagram.png) - -## Orchestrator - -The Orchestrator in the Summa Aggregation serves as the central management component, coordinating the data processing activities. It plays a pivotal role in coordinating the activities of Executors and Workers, improving efficiency of tasks of building Merkle sum tree. -The final result of the Orchestrator is the construction of the `AggregationMerkleSumTree`. This is achieved by aggregating the mini-trees constructed by the Workers. The Worker in here refers to a container running `mini-tree-server`. - -Key functions of the Orchestrator include: - -- **Dynamic Executor Spawning**: The Orchestrator dynamically spawns Executors in numbers set by the user. Each Executor is then connected to a dedicated Worker for efficient task execution. - -- **Task Management and Distribution**: It oversees the overall task flow, loading tasks and distributing them to Executors. - -- **Error Management and Pipeline Control**: The Orchestrator handles basic pipeline control and responds to errors by initiating the cancellation of all tasks. - -- **Build AggregationMerkleSumTree**: Its final result is that evaluate `AggregationMerkleSumTree` by aggregating the mini-trees generated by the Workers. - -## Executor and Worker - -The Executor acts as a crucial intermediary between the Orchestrator and Workers, facilitating the data processing workflow. Spawned by the Orchestrator, each Executor operates in a one-to-one relationship with a Worker. Its primary function is to generate a segment of the AggregationMerkleSumTree, known as a `mini-tree`, by processing entry data. These mini-trees are then aggregated by the Orchestrator to form the complete AggregationMerkleSumTree. - -Key aspects of the Executor's role include: - -- **Spawning and Connection**: Executors are dynamically spawned by the Orchestrator as part of the system's scalability. Each Executor is designed to connect with a Worker for task execution. - -- **Data Handling and Task Distribution**: A primary function of the Executor is to receive data entries, often parsed and prepared by the Orchestrator. Upon receiving these entries, the Executor is responsible for forwarding them to its connected Worker. - -- **Communication Bridge**: The Executor serves as a communication bridge within the data pipeline. It relays processed data, `mini-tree`, from Workers back to the Orchestrator. - -## ExecutorSpawner - -The `ExecutorSpawner` is responsible for initializing and terminating Executors. It can serve as the management point for creating `Executor` instances. - -In the Summa-Aggregation, there are three types of `ExecutorSpawner` provided: - -- **MockSpawner**: Primarily used for testing, this spawner initializes Executors suitable for various test scenarios, including negative test cases. The Worker spawned by this spawner runs a `mini-tree-server` locally. - -- **LocalSpawner**: It is close to actual use cases, this spawner enables users to initialize Executors and Workers in local Docker environments. - -- **CloudSpawner**: Ideal for scenarios where cloud resources are accessed. This spawner functions similarly to the `LocalSpawner`, but it initializes workers on remote machines. In particular, it can be run on a Swarm network using the `docker-compose` file, which is a specific configuration for the Swarm network. Additionally, it can run using existing worker node URLs if the configuration file is not set. - -The Docker Swarm transforms multiple Docker hosts into a single virtual host, providing crucial capabilities for high availability and scalability. For more details about Docker Swarm mode, refer to the [official documentation](https://docs.docker.com/engine/swarm/). - -While both `LocalSpawner` and `CloudSpawner` manage Docker containers, they differ in operational context. `LocalSpawner` handles individual containers directly, providing simplicity but limited scalability. In contrast, `CloudSpawner` may employs Docker Swarm to manage containers as services, thereby offering enhanced scalability and resilience, crucial for larger workloads. - -It's important to note, however, that managing workers through these three type of `ExecutorSpawner`, is not mandatory. Technically, the `ExecutorSpawner` is a trait with minimal requirements for the Orchestrator, specifically the methods `spawn_executor` and `terminate_executor`. You can create your own spawner and use it with the Orchestrator. - -## Orchestrating on Swarm - -For Summa-Aggregation purposes, you need to prepare a distributed environment where Workers can run on remote machines (referred to as 'Nodes'). An example of this is using Swarm, as mentioned in the previous section. This section will introduce how to set up Swarm mode and test it using Docker CLI. - -### Preparing Docker Swarm Mode - -In Summa-Aggregation, the `CloudSpawner` is designed to operate on Docker Swarm. It requires the URLs of Workers for initiation, which are the IP addresses of the Workers joining the Swarm network as per the instructions below. - -You can initialize your Docker environment in Swarm mode, which is essential for managing a cluster of Docker nodes as a single virtual system. - -Note that setting up Swarm mode may not work well depending on the OS, as network configurations differ across operating systems. - -1. **Activate Swarm Mode on the Main Machine**: - - Run the following command to initialize Swarm mode: - - ```bash - Main $ docker swarm init - ``` - - This command will output information about the Swarm, including a join token. - -2. **Join Node to the Swarm**: - - Use the join token provided by the main machine to add nodes to the swarm. On each node, run like: - - ```bash - Worker_1 $ docker swarm join --token :2377 - ``` - - Replace `` with the actual token and `` with the IP address of your main machine. - -3. **Check Node Status**: - - To confirm that the nodes are successfully joined to the swarm, check the node status on the main machine: - - ```bash - Main $ docker node ls - ``` - - You should see a list of all nodes in the swarm, including their status, roles, and other details like this: - - ```bash - ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION - kby50cicvqd5d95o9pgt4puo9 * main Ready Active Leader 20.10.12 - 2adikgxr2l1zp9oqo4kowvw7n worker_1 Ready Active 20.10.12 - dz2z2v7o06h6gazmjlspyr5c8 worker_2 Ready Active 20.10.12 - ```` - - You are ready to spawn more workers! - -### Spawning More Workers with CloudSpawner - -You can spawning or managing worker by `CloudSpawner` without using Docker CLI command, which will explain in here. However, even with a well-configured swarm network in the previous section, workers may not be created properly in various reason. - -In this section, you can verify that you can create a 'mini-tree-server' on any node. Before introducing the specific instructions, it's important to understand that in Docker Swarm mode, containers are managed as services rather than by individual names. - -To spawn more workers, follow these steps: - -1. Deploy the Stack: - - First, deploy your stack using the `docker-compose.yml` file if you haven't already: - - ```bash - Main $ docker stack deploy -c docker-compose.yml summa_aggregation - ``` - -2. Scale the Service: - - Utilize the 'scale' sub-command within the Docker 'service' command to adjust the number of replicas (workers) for your mini-tree service. - - 'mini-tree' refers to the name of the service, which is configured in the 'docker-compose.yml' file. Think of the number of replicas as the number of workers. - - For example, to scale up to 5 workers, run: - - ```bash - Main $ docker service scale summa_aggregation_mini-tree=5 - ``` - - Since each worker has access to all of the node's resources, it would be appropriate to set the scale number based on the number of node. - -3. Verify the Scaling: - - Check that the service has been scaled properly with: - - ```bash - Main $ docker service ls - ``` - - This command shows the number of replicas running for each service in the swarm. - -Scaling service allows you to adjust the number of workers more easily than spawning each worker individually. +Summa Aggregation is a scalable solution specifically designed to accelerate the process of building Merkle sum trees. It addresses the time-intensive challenge of constructing these trees by enabling efficient scaling through parallelization and distributed computation across multiple machines. ## Running test -You can run the tests using following command: +Tests can be run using the following command: ```bash cargo test --release @@ -165,9 +15,8 @@ Please ensure that this port is not already in use to avoid errors. ## Running Additional Tests Involving Docker and Docker Swarm -To run additional tests involving Docker and Docker Swarm mode, ensure that your Docker registry contains the "summadev/summa-aggregation-mini-tree" image. +For additional tests involving Docker and Docker Swarm mode, the presence of the "summadev/summa-aggregation-mini-tree" image in the local Docker registry is required. -If you do not have this image, you can either build it or download it. ### Building the docker image @@ -179,31 +28,32 @@ docker build . -t summadev/summa-aggregation-mini-tree ### Downloading the Docker Image -Alternatively, you can download the image from Docker Hub using the following command: +Alternatively, the image can be downloaded from Docker Hub: ```bash docker pull summadev/summa-aggregation-mini-tree ``` -Ensure that the "summadev/summa-aggregation-mini-tree" image exists in your local Docker registry. - ### Testing with LocalSpawner The following command runs an additional test case using the LocalSpawner, which spawns worker containers in the local Docker environment. This extra test case involves running two containers during the testing process: + ```bash cargo test --features docker ``` ### Testing with CloudSpawner -If your Docker environment is successfully running in Swarm mode, you can run an additional test case that spawns workers on Swarm nodes using the `CloudSpawner`. Before running this test, please refer to the section "Spawning More Workers with CloudSpawner" to check your Docker Swarm setup. +For Summa-Aggregation, it's necessary to prepare a distributed environment where Workers can operate on remote machines, referred to as 'Nodes'. For guidance on setting up swarm nodes, please see [Getting Started with swarm mode](https://docs.docker.com/engine/swarm/swarm-tutorial) + +When the Docker environment is running successfully in Swarm mode, an additional test case that spawns workers on Swarm nodes using the `CloudSpawner` can be run: ```bash cargo test --features docker-swarm ``` -Please ensure that your Docker Swarm has at least one node connected to the manager node. Also, verify that each worker node in the swarm has the "summadev/summa-aggregation-mini-tree" image in its Docker registry. If a node connected to the manager node does not have the image, it will not be able to spawn workers on that node. +It is critical to ensure that the Docker Swarm includes at least one node connected to the manager node. Additionally, each worker node in the swarm must have the "summadev/summa-aggregation-mini-tree" image in its Docker registry. Without this image on nodes connected to the manager node, spawning workers on that node is not possible. ## Summa Aggregation Example diff --git a/src/executor/cloud_spawner.rs b/src/executor/cloud_spawner.rs index 6ebf196..ccd8c60 100644 --- a/src/executor/cloud_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -19,12 +19,18 @@ pub struct CloudSpawner { default_port: i64, } -/// `CloudSpawner` is responsible for managing the lifecycle of workers in a cloud environment. -/// -/// - Without `service_info`, `CloudSpawner` does not manage `Worker` instances directly. -/// This means it does not control or interact with Docker API for worker management. -/// - With `service_info`, `CloudSpawner` requires a `docker-compose` file. The `CloudSpawner` will -/// use the provided `service_info` to manage Docker services and networks, allowing dynamic scaling and orchestration of workers. +/// CloudSpawner +/// +/// Designed for cloud-based resources and Docker Swarm, CloudSpawner is optimized for scalability and high availability. +/// While functioning similarly to LocalSpawner, it extends its capabilities by initializing workers on remote machines, making it particularly suitable for Swarm network setups. +/// +/// CloudSpawner can be utilized in two ways: +/// +/// - Without `service_info`, CloudSpawner does not directly manage Worker instances. +/// In this mode, it does not control or interact with the Docker API for worker management. +/// +/// - With `service_info`, CloudSpawner requires a `docker-compose` file. When provided with `service_info`, +/// it manages Docker services and networks, enabling dynamic scaling and orchestration of workers. impl CloudSpawner { pub fn new( service_info: Option<(String, String)>, // If the user want to use docker-compose.yml for docker swarm diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index 8e8af94..736a084 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -16,6 +16,11 @@ use tokio::sync::oneshot; use crate::executor::{Executor, ExecutorSpawner}; +/// LocalSpawner +/// +/// The LocalSpawner is tailored for use cases closer to actual deployment. It enables the initialization of Executors +/// and Workers within a local Docker environment. This spawner is ideal for development and testing phases, +/// where simplicity and direct control over the containers are beneficial. pub struct LocalSpawner { docker: Docker, worker_counter: AtomicUsize, diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index 8d4676e..7e78e76 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -12,6 +12,10 @@ use tokio::sync::oneshot; use crate::executor::{Executor, ExecutorSpawner}; use crate::mini_tree_generator::create_mst; +/// MockSpawner +/// +/// Primarily used for testing purposes, the MockSpawner initializes Executors suitable for various test scenarios, +/// including negative test cases. It runs the `mini-tree-server` locally, allowing for a controlled testing environment. pub struct MockSpawner { urls: Option>, worker_counter: AtomicUsize, diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index 3c21e4b..79900cd 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -9,6 +9,18 @@ const N_CURRENCIES: usize = 2; #[from_env] const N_BYTES: usize = 14; +/// Mini Tree Generator is designed to create Merkle Sum Trees using the Axum web framework. +/// It primarily handles HTTP requests to generate trees based on provided JSON entries. +/// +/// Constants: +/// - `N_CURRENCIES`: The number of cryptocurrencies involved. Set via environment variables. +/// - `N_BYTES`: The byte size for each entry. Set via environment variables. +/// +/// Functions: +/// - `create_mst`: An asynchronous function that processes incoming JSON requests to generate a Merkle Sum Tree. +/// It converts `JsonEntry` objects into `Entry` instances and then constructs the `MerkleSumTree`. +/// The function handles the conversion of the `MerkleSumTree` into a JSON format (`JsonMerkleSumTree`) for the response. +/// pub async fn create_mst( Json(json_entries): Json>, ) -> Result)> { From 726dbd7b10a46a37c3169e1a1b5df3ac0783181c Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 7 Dec 2023 09:22:18 +0000 Subject: [PATCH 28/32] fix: latest v1; minor changes on comments --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- README.md | 2 +- src/aggregation_merkle_sum_tree.rs | 8 ++++---- src/json_mst.rs | 2 +- src/mini_tree_generator.rs | 14 +++++++------- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e800d3b..3c1dc3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4096,7 +4096,7 @@ dependencies = [ [[package]] name = "summa-backend" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#19b1412218c69b63571d71dab6b11556f6041278" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8be1acce551c94a87c851f84c4b0a7d14595e01b" dependencies = [ "base64 0.13.1", "bincode", @@ -4117,7 +4117,7 @@ dependencies = [ [[package]] name = "summa-solvency" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-for-summa-aggregation#19b1412218c69b63571d71dab6b11556f6041278" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8be1acce551c94a87c851f84c4b0a7d14595e01b" dependencies = [ "ark-std", "csv", diff --git a/Cargo.toml b/Cargo.toml index 757d830..657c5ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ const_env = "0.1.2" num-bigint = "0.4.4" serde = { version = "1.0.192", features = ["derive"] } serde_json = "1.0.108" -summa-backend = { git = "https://github.com/summa-dev/summa-solvency", branch = "v1-for-summa-aggregation", version = "0.1.0" } +summa-backend = { git = "https://github.com/summa-dev/summa-solvency", branch = "v1-improvements-and-consolidation" } halo2_proofs = { git = "https://github.com/privacy-scaling-explorations/halo2", tag = "v2023_04_20"} tokio = { version = "1.34.0", features = ["full"] } reqwest = "0.11.22" diff --git a/README.md b/README.md index 21bbd86..d9d6549 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Summa Aggregation -Summa Aggregation is a scalable solution specifically designed to accelerate the process of building Merkle sum trees. It addresses the time-intensive challenge of constructing these trees by enabling efficient scaling through parallelization and distributed computation across multiple machines. +Summa Aggregation is a scalable solution specifically designed to accelerate the process of building Merkle sum tree. It addresses the time-intensive challenge of constructing these trees by enabling efficient scaling through parallelization and distributed computation across multiple machines. ## Running test diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 3a5abbb..586c290 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -8,7 +8,7 @@ use summa_backend::merkle_sum_tree::{ /// Aggregation Merkle Sum Tree Data Structure. /// -/// Starting from a set of "mini" Merkle Sum Trees of equal depth, N_CURRENCIES and N_BYTES, the Aggregation Merkle Sum Tree inherits the properties of a Merkle Sum Tree and adds the following: +/// Starting from a set of "mini" Merkle Sum Tree of equal depth, N_CURRENCIES and N_BYTES, the Aggregation Merkle Sum Tree inherits the properties of a Merkle Sum Tree and adds the following: /// * Each Leaf of the Aggregation Merkle Sum Tree is the root of a "mini" Merkle Sum Tree made of `hash` and `balances` /// /// # Type Parameters @@ -127,8 +127,8 @@ impl Tree AggregationMerkleSumTree { - /// Builds a AggregationMerkleSumTree from a set of mini MerkleSumTrees - /// The leaves of the AggregationMerkleSumTree are the roots of the mini MerkleSumTrees + /// Builds a AggregationMerkleSumTree from a set of mini MerkleSumTree + /// The leaves of the AggregationMerkleSumTree are the roots of the mini MerkleSumTree pub fn new( mini_trees: Vec>, cryptocurrencies: Vec, @@ -297,7 +297,7 @@ mod test { #[test] fn test_aggregation_mst_overflow() { - // create new mini merkle sum trees. The accumulated balance for each mini tree is in the expected range + // create new mini merkle sum tree. The accumulated balance for each mini tree is in the expected range // note that the accumulated balance of the tree generated from entry_16_4 is just in the expected range for 1 unit let merkle_sum_tree_1 = MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16.csv") diff --git a/src/json_mst.rs b/src/json_mst.rs index ae703ef..25e4ed9 100644 --- a/src/json_mst.rs +++ b/src/json_mst.rs @@ -136,7 +136,7 @@ impl JsonMerkleSumTree { N_CURRENCIES ]; - MerkleSumTree::::new( + MerkleSumTree::::from_params( root, nodes, self.depth, diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index 79900cd..286f280 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -4,13 +4,8 @@ use const_env::from_env; use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; use summa_backend::merkle_sum_tree::{Cryptocurrency, Entry, MerkleSumTree}; -#[from_env] -const N_CURRENCIES: usize = 2; -#[from_env] -const N_BYTES: usize = 14; - -/// Mini Tree Generator is designed to create Merkle Sum Trees using the Axum web framework. -/// It primarily handles HTTP requests to generate trees based on provided JSON entries. +/// Mini Tree Generator is designed to create Merkle Sum Tree using the Axum web framework. +/// It primarily handles HTTP requests to generate tree based on provided JSON entries. /// /// Constants: /// - `N_CURRENCIES`: The number of cryptocurrencies involved. Set via environment variables. @@ -21,6 +16,11 @@ const N_BYTES: usize = 14; /// It converts `JsonEntry` objects into `Entry` instances and then constructs the `MerkleSumTree`. /// The function handles the conversion of the `MerkleSumTree` into a JSON format (`JsonMerkleSumTree`) for the response. /// +#[from_env] +const N_CURRENCIES: usize = 2; +#[from_env] +const N_BYTES: usize = 14; + pub async fn create_mst( Json(json_entries): Json>, ) -> Result)> { From c8a2d7f0ae2411b5e44a86837bc43dda5256f6be Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 7 Dec 2023 12:15:53 +0000 Subject: [PATCH 29/32] chore: update README; move csv folder to root --- .gitignore | 1 - bin/README.md | 2 + {src/orchestrator/csv => csv}/entry_16.csv | 0 {src/orchestrator/csv => csv}/entry_16_1.csv | 0 {src/orchestrator/csv => csv}/entry_16_2.csv | 0 {src/orchestrator/csv => csv}/entry_16_3.csv | 0 {src/orchestrator/csv => csv}/entry_16_4.csv | 0 .../csv => csv}/entry_16_no_overflow.csv | 0 {src/orchestrator/csv => csv}/entry_64.csv | 0 examples/aggregation_flow.rs | 6 +-- src/aggregation_merkle_sum_tree.rs | 37 +++++-------------- src/executor/cloud_spawner.rs | 14 +++---- src/executor/local_spawner.rs | 10 ++--- src/executor/mock_spawner.rs | 2 +- src/executor/test.rs | 9 ++--- src/json_mst.rs | 27 ++++++++++++++ src/mini_tree_generator.rs | 2 +- src/orchestrator/mod.rs | 10 +++++ src/orchestrator/test.rs | 22 +++++------ 19 files changed, 77 insertions(+), 65 deletions(-) rename {src/orchestrator/csv => csv}/entry_16.csv (100%) rename {src/orchestrator/csv => csv}/entry_16_1.csv (100%) rename {src/orchestrator/csv => csv}/entry_16_2.csv (100%) rename {src/orchestrator/csv => csv}/entry_16_3.csv (100%) rename {src/orchestrator/csv => csv}/entry_16_4.csv (100%) rename {src/orchestrator/csv => csv}/entry_16_no_overflow.csv (100%) rename {src/orchestrator/csv => csv}/entry_64.csv (100%) diff --git a/.gitignore b/.gitignore index 714de26..ea8c4bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ /target -/src/data diff --git a/bin/README.md b/bin/README.md index 3ee93be..e252863 100644 --- a/bin/README.md +++ b/bin/README.md @@ -24,6 +24,8 @@ Second, send two entries to the Mini Tree Server, execute the following script: bash ./scripts/test_sending_entry.sh ``` +Note: Execute this command from the project's root folder to ensure proper functioning of scripts. + Upon successful execution, you will receive a response similar to the following:
Click View Response diff --git a/src/orchestrator/csv/entry_16.csv b/csv/entry_16.csv similarity index 100% rename from src/orchestrator/csv/entry_16.csv rename to csv/entry_16.csv diff --git a/src/orchestrator/csv/entry_16_1.csv b/csv/entry_16_1.csv similarity index 100% rename from src/orchestrator/csv/entry_16_1.csv rename to csv/entry_16_1.csv diff --git a/src/orchestrator/csv/entry_16_2.csv b/csv/entry_16_2.csv similarity index 100% rename from src/orchestrator/csv/entry_16_2.csv rename to csv/entry_16_2.csv diff --git a/src/orchestrator/csv/entry_16_3.csv b/csv/entry_16_3.csv similarity index 100% rename from src/orchestrator/csv/entry_16_3.csv rename to csv/entry_16_3.csv diff --git a/src/orchestrator/csv/entry_16_4.csv b/csv/entry_16_4.csv similarity index 100% rename from src/orchestrator/csv/entry_16_4.csv rename to csv/entry_16_4.csv diff --git a/src/orchestrator/csv/entry_16_no_overflow.csv b/csv/entry_16_no_overflow.csv similarity index 100% rename from src/orchestrator/csv/entry_16_no_overflow.csv rename to csv/entry_16_no_overflow.csv diff --git a/src/orchestrator/csv/entry_64.csv b/csv/entry_64.csv similarity index 100% rename from src/orchestrator/csv/entry_64.csv rename to csv/entry_64.csv diff --git a/examples/aggregation_flow.rs b/examples/aggregation_flow.rs index 5e49ac8..7a3ec44 100644 --- a/examples/aggregation_flow.rs +++ b/examples/aggregation_flow.rs @@ -73,8 +73,8 @@ async fn main() -> Result<(), Box> { let orchestrator = Orchestrator::::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16_1.csv".to_string(), - "./src/orchestrator/csv/entry_16_2.csv".to_string(), + "csv/entry_16_1.csv".to_string(), + "csv/entry_16_2.csv".to_string(), ], ); @@ -99,7 +99,7 @@ async fn main() -> Result<(), Box> { // // Here, we demonstrate generating the proof of inclusion for User 0. let inclusion_proof_of_user0 = round.get_proof_of_inclusion(0).unwrap(); - assert!(inclusion_proof_of_user0.get_public_inputs().len() > 0); // Check public input counts + assert!(!inclusion_proof_of_user0.get_public_inputs().is_empty()); // Check public input counts println!("Generated User 0 proof of inclusion"); Ok(()) diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 586c290..9dec788 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -1,7 +1,6 @@ use halo2_proofs::halo2curves::bn256::Fr as Fp; -use num_bigint::BigUint; use std::error::Error; -use summa_backend::merkle_sum_tree::utils::{build_merkle_tree_from_leaves, fp_to_big_uint}; +use summa_backend::merkle_sum_tree::utils::build_merkle_tree_from_leaves; use summa_backend::merkle_sum_tree::{ Cryptocurrency, Entry, MerkleProof, MerkleSumTree, Node, Tree, }; @@ -162,19 +161,6 @@ impl } } - // Iterate through the balance accumulator and throw error if any balance is not in range 0, 2 ^ (8 * N_BYTES): - for balance in &balances_acc { - // transform the balance to a BigUint - let balance_big_uint = fp_to_big_uint(*balance); - - if balance_big_uint >= BigUint::from(2_usize).pow(8 * N_BYTES as u32) { - return Err( - "Accumulated balance is not in the expected range, proof generation will fail!" - .into(), - ); - } - } - let mut nodes = vec![]; let root = build_merkle_tree_from_leaves(&roots, depth, &mut nodes)?; @@ -218,12 +204,10 @@ mod test { fn test_aggregation_mst() { // create new mini merkle sum tree let mini_tree_1 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_1.csv") - .unwrap(); + MerkleSumTree::::from_csv("csv/entry_16_1.csv").unwrap(); let mini_tree_2 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16_2.csv") - .unwrap(); + MerkleSumTree::::from_csv("csv/entry_16_2.csv").unwrap(); let aggregation_mst = AggregationMerkleSumTree::::new( vec![mini_tree_1.clone(), mini_tree_2.clone()], @@ -271,7 +255,7 @@ mod test { let mut mini_trees = Vec::new(); for i in 1..=4 { let mini_tree = MerkleSumTree::::from_csv(&format!( - "src/orchestrator/csv/entry_16_{}.csv", + "csv/entry_16_{}.csv", i )) .unwrap(); @@ -286,8 +270,7 @@ mod test { // The entry_64.csv file is the aggregation of entry_16_1, entry_16_2, entry_16_3, entry_16_4 let single_merkle_sum_tree = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_64.csv") - .unwrap(); + MerkleSumTree::::from_csv("csv/entry_64.csv").unwrap(); assert_eq!( aggregation_mst_root.hash, @@ -300,13 +283,11 @@ mod test { // create new mini merkle sum tree. The accumulated balance for each mini tree is in the expected range // note that the accumulated balance of the tree generated from entry_16_4 is just in the expected range for 1 unit let merkle_sum_tree_1 = - MerkleSumTree::::from_csv("src/orchestrator/csv/entry_16.csv") - .unwrap(); + MerkleSumTree::::from_csv("csv/entry_16.csv").unwrap(); - let merkle_sum_tree_2 = MerkleSumTree::::from_csv( - "src/orchestrator/csv/entry_16_no_overflow.csv", - ) - .unwrap(); + let merkle_sum_tree_2 = + MerkleSumTree::::from_csv("csv/entry_16_no_overflow.csv") + .unwrap(); // When creating the aggregation merkle sum tree, the accumulated balance of the two mini trees is not in the expected range, an error is thrown let result = AggregationMerkleSumTree::::new( diff --git a/src/executor/cloud_spawner.rs b/src/executor/cloud_spawner.rs index ccd8c60..d98d975 100644 --- a/src/executor/cloud_spawner.rs +++ b/src/executor/cloud_spawner.rs @@ -20,16 +20,16 @@ pub struct CloudSpawner { } /// CloudSpawner -/// -/// Designed for cloud-based resources and Docker Swarm, CloudSpawner is optimized for scalability and high availability. +/// +/// Designed for cloud-based resources and Docker Swarm, CloudSpawner is optimized for scalability and high availability. /// While functioning similarly to LocalSpawner, it extends its capabilities by initializing workers on remote machines, making it particularly suitable for Swarm network setups. -/// +/// /// CloudSpawner can be utilized in two ways: -/// -/// - Without `service_info`, CloudSpawner does not directly manage Worker instances. +/// +/// - Without `service_info`, CloudSpawner does not directly manage Worker instances. /// In this mode, it does not control or interact with the Docker API for worker management. -/// -/// - With `service_info`, CloudSpawner requires a `docker-compose` file. When provided with `service_info`, +/// +/// - With `service_info`, CloudSpawner requires a `docker-compose` file. When provided with `service_info`, /// it manages Docker services and networks, enabling dynamic scaling and orchestration of workers. impl CloudSpawner { pub fn new( diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index 736a084..7d12b72 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -17,9 +17,9 @@ use tokio::sync::oneshot; use crate::executor::{Executor, ExecutorSpawner}; /// LocalSpawner -/// -/// The LocalSpawner is tailored for use cases closer to actual deployment. It enables the initialization of Executors -/// and Workers within a local Docker environment. This spawner is ideal for development and testing phases, +/// +/// The LocalSpawner is to use cases closer to actual deployment. It enables the initialization of Executors +/// and Workers within a local Docker environment. This spawner is ideal for development and testing phases, /// where simplicity and direct control over the containers are beneficial. pub struct LocalSpawner { docker: Docker, @@ -66,8 +66,6 @@ impl LocalSpawner { platform: None, }; - println!("docker-info: {:?}", docker.info().await?); - docker .create_container(Some(create_container_options), config.clone()) .await?; @@ -82,8 +80,6 @@ impl LocalSpawner { let container_info: ContainerInspectResponse = docker.inspect_container(&container_name, None).await?; - println!("container_info: {:?}", container_info); - Ok(container_info) } } diff --git a/src/executor/mock_spawner.rs b/src/executor/mock_spawner.rs index 7e78e76..d94f0a8 100644 --- a/src/executor/mock_spawner.rs +++ b/src/executor/mock_spawner.rs @@ -13,7 +13,7 @@ use crate::executor::{Executor, ExecutorSpawner}; use crate::mini_tree_generator::create_mst; /// MockSpawner -/// +/// /// Primarily used for testing purposes, the MockSpawner initializes Executors suitable for various test scenarios, /// including negative test cases. It runs the `mini-tree-server` locally, allowing for a controlled testing environment. pub struct MockSpawner { diff --git a/src/executor/test.rs b/src/executor/test.rs index 1c89835..e415ff2 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -35,8 +35,7 @@ async fn test_executor() -> Result<(), Box> { let spawner = MockSpawner::new(None); let executor = spawner.spawn_executor().await; - let (_, entries) = - parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let (_, entries) = parse_csv_to_entries::<_, 2, 14>("csv/entry_16.csv").unwrap(); let json_entries = entries .iter() .map(JsonEntry::from_entry) @@ -55,10 +54,8 @@ async fn test_executor_block() -> Result<(), Box> { let executor = spawner.spawn_executor().await; // Parse two csv files - let (_, entries_1) = - parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); - let (_, entries_2) = - parse_csv_to_entries::<_, 2, 14>("./src/orchestrator/csv/entry_16.csv").unwrap(); + let (_, entries_1) = parse_csv_to_entries::<_, 2, 14>("csv/entry_16.csv").unwrap(); + let (_, entries_2) = parse_csv_to_entries::<_, 2, 14>("csv/entry_16.csv").unwrap(); // Convert entries to json_entries let json_entries_1 = entries_1 diff --git a/src/json_mst.rs b/src/json_mst.rs index 25e4ed9..82f4790 100644 --- a/src/json_mst.rs +++ b/src/json_mst.rs @@ -6,18 +6,27 @@ use halo2_proofs::halo2curves::{bn256::Fr as Fp, group::ff::PrimeField}; use summa_backend::merkle_sum_tree::{Cryptocurrency, Entry, MerkleSumTree, Node, Tree}; +/// JsonNode +/// Represents a entry in the Merkle Sum Tree in JSON format. +/// The balance in the Merkle Sum Tree was presented BigUint format, but in the JSON format, it is presented as a string. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonEntry { pub username: String, pub balances: Vec, } +/// JsonNode +/// Represents a node in the Merkle Sum Tree in JSON format. +/// The balance in the Merkle Sum Tree was presented BigUint format, but in the JSON format, it is presented as a string. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonNode { pub hash: String, pub balances: Vec, } +/// JsonMerkleSumTree +/// Represents the entire Merkle Sum Tree in JSON format. +/// It is used for transmitting tree data between the executor and mini-tree-server. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct JsonMerkleSumTree { pub root: JsonNode, @@ -44,6 +53,10 @@ impl JsonEntry { JsonEntry { username, balances } } + /// Converts an `Entry` to a `JsonEntry`. + /// + /// This method translates an `Entry` into its JSON format. + /// It is used by the Executor to send Entry data to the mini-tree-server in JSON format. pub fn from_entry(entry: &Entry) -> Self { JsonEntry::new( entry.username().to_string(), @@ -55,6 +68,10 @@ impl JsonEntry { ) } + /// Converts a `JsonEntry` back to an `Entry`. + /// + /// This method is utilized by the mini-tree-server when processing data received from the executor in JSON format. + /// It converts `JsonEntry` objects back to the `Entry` struct, facilitating the construction of the Merkle Sum Tree. pub fn to_entry(&self) -> Entry { let mut balances: [BigUint; N_CURRENCIES] = std::array::from_fn(|_| BigUint::from(0u32)); self.balances.iter().enumerate().for_each(|(i, balance)| { @@ -65,6 +82,7 @@ impl JsonEntry { } } +/// Converts a `JsonNode` back to a `Node` for reconstructing the Merkle Sum Tree from JSON data. impl JsonNode { pub fn to_node(&self) -> Node { let hash = parse_fp_from_hex(&self.hash); @@ -81,6 +99,10 @@ impl JsonNode { } impl JsonMerkleSumTree { + /// Converts a MerkleSumTree to its JSON representation. + /// + /// This function is essential for the mini-tree-server to send the Merkle Sum Tree results back to the executor in JSON format, + /// facilitating the translation of the tree structure into a universally readable JSON form. pub fn from_tree( tree: MerkleSumTree, ) -> Self { @@ -110,6 +132,11 @@ impl JsonMerkleSumTree { } } + /// Converts a JsonMerkleSumTree back to a MerkleSumTree. + /// + /// This function is crucial when handling data received in JSON format from the mini-tree-server. + /// It rebuilds the MerkleSumTree on the main machine using the `from_params` method. + /// This method is preferred over `from_entries` as the nodes are pre-computed by the mini-tree-server, thus the tree doesn't need to be recomputed from scratch. pub fn to_mst( &self, ) -> Result, Box> diff --git a/src/mini_tree_generator.rs b/src/mini_tree_generator.rs index 286f280..bfb84df 100644 --- a/src/mini_tree_generator.rs +++ b/src/mini_tree_generator.rs @@ -4,7 +4,7 @@ use const_env::from_env; use crate::json_mst::{JsonEntry, JsonMerkleSumTree}; use summa_backend::merkle_sum_tree::{Cryptocurrency, Entry, MerkleSumTree}; -/// Mini Tree Generator is designed to create Merkle Sum Tree using the Axum web framework. +/// Mini Tree Generator is designed to create Merkle Sum Tree using the Axum web framework. /// It primarily handles HTTP requests to generate tree based on provided JSON entries. /// /// Constants: diff --git a/src/orchestrator/mod.rs b/src/orchestrator/mod.rs index e10daa2..d2e9b05 100644 --- a/src/orchestrator/mod.rs +++ b/src/orchestrator/mod.rs @@ -37,7 +37,17 @@ impl Orchestrator::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16_1.csv".to_string(), - "./src/orchestrator/csv/entry_16_2.csv".to_string(), + "csv/entry_16_1.csv".to_string(), + "csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(1).await.unwrap(); @@ -26,8 +26,8 @@ async fn test_none_exist_csv() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16.csv".to_string(), - "./src/orchestrator/csv/no_exist.csv".to_string(), + "csv/entry_16.csv".to_string(), + "csv/no_exist.csv".to_string(), ], ); match orchestrator.create_aggregation_mst(2).await { @@ -48,8 +48,8 @@ async fn test_none_exist_worker() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16_1.csv".to_string(), - "./src/orchestrator/csv/entry_16_2.csv".to_string(), + "csv/entry_16_1.csv".to_string(), + "csv/entry_16_2.csv".to_string(), ], ); @@ -63,7 +63,7 @@ async fn test_none_exist_worker() { } } -#[cfg(feature = "docker")] +// #[cfg(feature = "docker")] #[tokio::test] async fn test_with_containers() { let spawner = LocalSpawner::new( @@ -74,8 +74,8 @@ async fn test_with_containers() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16_1.csv".to_string(), - "./src/orchestrator/csv/entry_16_2.csv".to_string(), + "csv/entry_16_1.csv".to_string(), + "csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); @@ -96,8 +96,8 @@ async fn test_with_swarm_service() { let orchestrator = Orchestrator::<2, 14>::new( Box::new(spawner), vec![ - "./src/orchestrator/csv/entry_16_1.csv".to_string(), - "./src/orchestrator/csv/entry_16_2.csv".to_string(), + "csv/entry_16_1.csv".to_string(), + "csv/entry_16_2.csv".to_string(), ], ); let aggregation_merkle_sum_tree = orchestrator.create_aggregation_mst(2).await.unwrap(); From 679ed56ee46d2dbe1f3d27e983833edece09494f Mon Sep 17 00:00:00 2001 From: sifnoc Date: Thu, 7 Dec 2023 13:57:15 +0000 Subject: [PATCH 30/32] fix: return a ref of empty array on un-intended fn on AggregationMerkleSumTree --- src/aggregation_merkle_sum_tree.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 9dec788..34a6c96 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -35,7 +35,7 @@ impl Tree &[Node] { - &self.nodes[0] + &[] } fn nodes(&self) -> &[Vec>] { @@ -47,7 +47,7 @@ impl Tree &[Entry] { - self.mini_trees[0].entries() + &[] } fn get_entry(&self, user_index: usize) -> &Entry { From b108d1b0ef1716c0637d55b84c5df0aabfbacc25 Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 8 Dec 2023 09:28:39 +0000 Subject: [PATCH 31/32] fix: the container now using unused port on host --- src/executor/local_spawner.rs | 73 +++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index 7d12b72..d32b8c4 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -1,15 +1,18 @@ use bollard::{ container::{Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions}, + models::{HostConfig, PortBinding}, service::ContainerInspectResponse, Docker, }; use std::{ + collections::HashMap, default::Default, env, error::Error, future::Future, + net::{SocketAddr, TcpListener, IpAddr}, pin::Pin, - sync::atomic::{AtomicUsize, Ordering}, + sync::atomic::{AtomicUsize, Ordering}, str::FromStr, }; use tokio; use tokio::sync::oneshot; @@ -46,17 +49,49 @@ impl LocalSpawner { } } + fn find_unused_port() -> Result { + // Bind to address with port 0. + // The OS will assign an available ephemeral port. + let listener = TcpListener::bind("127.0.0.1:0")?; + + // Retrieve the assigned port. + match listener.local_addr() { + Ok(SocketAddr::V4(addr)) => Ok(addr.port()), + Ok(SocketAddr::V6(addr)) => Ok(addr.port()), + Err(e) => Err(e), + } + } + // Create a Docker instance connected to the local Docker daemon. pub async fn create_container( docker: Docker, image_name: String, container_name: String, id: usize, + desirable_port: u16, ) -> Result> { let container_name = format!("{}_{}", container_name, id); + // Define port mapping (container_port -> host_port) + let port_bindings = { + let mut port_bindings = HashMap::new(); + port_bindings.insert( + "4000/tcp".to_string(), // Container port + Some(vec![PortBinding { + host_ip: Some(IpAddr::from_str("127.0.0.1").unwrap().to_string()), // Host IP + host_port: Some(desirable_port.to_string()), // Host port + }]), + ); + port_bindings + }; + let config = Config { image: Some(image_name), + exposed_ports: Some(HashMap::from([("4000/tcp".to_string(), HashMap::<(), ()>::new())])), // Expose the container port + host_config: Some(HostConfig { + port_bindings: Some(port_bindings), + ..Default::default() + }), ..Default::default() }; @@ -89,25 +124,39 @@ impl ExecutorSpawner for LocalSpawner { // Using channel that onetime use, `oneshot`, to send container information let (tx, rx) = oneshot::channel(); - // These variables has to be cloned because it is moved into the async block + // These variables has to be cloned because these are moved into the async block let docker_clone = self.docker.clone(); let image_name = self.image_name.clone(); let container_name = self.container_name.clone(); let id = self.worker_counter.fetch_add(1, Ordering::SeqCst); tokio::spawn(async move { - if let Ok(container_info) = - LocalSpawner::create_container(docker_clone, image_name, container_name, id).await - { - let _ = tx.send(container_info); + let desirable_port = LocalSpawner::find_unused_port().unwrap_or_default(); + let res = LocalSpawner::create_container( + docker_clone, + image_name, + container_name, + id, + desirable_port, + ) + .await; + match res { + Ok(container_info) => { + // the desirable_port is the port that is exposed to the host + let _ = tx.send((desirable_port, container_info)); + } + Err(e) => { + eprintln!("Error creating container: {}", e); + } } }); // Return a Future that resolves to Executor Box::pin(async move { - let container_info = rx.await.expect("Failed to receive worker URL"); + // the container_info also has exposed port as 'host_port` field but it looks ugly to use it + let (exposed_port, container_info) = rx.await.expect("Failed to receive worker URL"); let worker_url = format!( - "http://{}:4000", // this port is not exposed to the host - container_info.network_settings.unwrap().ip_address.unwrap() + "http://127.0.0.1:{}", // This port is exposed to the host + exposed_port ); Executor::new(worker_url, container_info.name) }) @@ -126,9 +175,9 @@ impl ExecutorSpawner for LocalSpawner { }; for i in 0..worker_counter { - let container_name = format!("{}_{}", container_name, i); + let container_name_with_id = format!("{}_{}", container_name, i); if let Err(e) = docker_clone - .remove_container(&container_name, Some(remove_options)) + .remove_container(&container_name_with_id, Some(remove_options)) .await { eprintln!("Error removing container: {}", e); @@ -138,7 +187,7 @@ impl ExecutorSpawner for LocalSpawner { } } -#[cfg(feature = "docker")] +// #[cfg(feature = "docker")] #[cfg(test)] mod tests { use super::*; From be9b8f2a1aadeb9d1c8157645e25a51e6e69e04d Mon Sep 17 00:00:00 2001 From: sifnoc Date: Fri, 8 Dec 2023 12:45:38 +0000 Subject: [PATCH 32/32] fix: applied latest v1-improvement; updated README; fixed minor --- Cargo.lock | 4 ++-- README.md | 4 +--- src/aggregation_merkle_sum_tree.rs | 8 -------- src/executor/local_spawner.rs | 2 +- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c1dc3f..fbf3065 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4096,7 +4096,7 @@ dependencies = [ [[package]] name = "summa-backend" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8be1acce551c94a87c851f84c4b0a7d14595e01b" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#89c228dee2c41b9592016789717446c71ff06bec" dependencies = [ "base64 0.13.1", "bincode", @@ -4117,7 +4117,7 @@ dependencies = [ [[package]] name = "summa-solvency" version = "0.1.0" -source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#8be1acce551c94a87c851f84c4b0a7d14595e01b" +source = "git+https://github.com/summa-dev/summa-solvency?branch=v1-improvements-and-consolidation#89c228dee2c41b9592016789717446c71ff06bec" dependencies = [ "ark-std", "csv", diff --git a/README.md b/README.md index d9d6549..065bc9a 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,7 @@ Please ensure that this port is not already in use to avoid errors. ## Running Additional Tests Involving Docker and Docker Swarm -For additional tests involving Docker and Docker Swarm mode, the presence of the "summadev/summa-aggregation-mini-tree" image in the local Docker registry is required. - +For additional tests involving Docker and Docker Swarm mode, the presence of the "summadev/summa-aggregation-mini-tree" image in the local Docker registry is required. Please refer to the [Mini Tree Server](bin/README.md) for more information about the mini tree. ### Building the docker image @@ -38,7 +37,6 @@ docker pull summadev/summa-aggregation-mini-tree The following command runs an additional test case using the LocalSpawner, which spawns worker containers in the local Docker environment. This extra test case involves running two containers during the testing process: - ```bash cargo test --features docker ``` diff --git a/src/aggregation_merkle_sum_tree.rs b/src/aggregation_merkle_sum_tree.rs index 34a6c96..0e4e884 100644 --- a/src/aggregation_merkle_sum_tree.rs +++ b/src/aggregation_merkle_sum_tree.rs @@ -34,10 +34,6 @@ impl Tree &[Node] { - &[] - } - fn nodes(&self) -> &[Vec>] { &self.nodes } @@ -46,10 +42,6 @@ impl Tree &[Entry] { - &[] - } - fn get_entry(&self, user_index: usize) -> &Entry { let (mini_tree_index, entry_index) = self.get_entry_location(user_index); diff --git a/src/executor/local_spawner.rs b/src/executor/local_spawner.rs index d32b8c4..0ace6fe 100644 --- a/src/executor/local_spawner.rs +++ b/src/executor/local_spawner.rs @@ -187,7 +187,7 @@ impl ExecutorSpawner for LocalSpawner { } } -// #[cfg(feature = "docker")] +#[cfg(feature = "docker")] #[cfg(test)] mod tests { use super::*;