From dc6ad33f017bb92968ff71f5171ff04e33f3c4d3 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Sun, 1 Dec 2024 21:56:49 +0000 Subject: [PATCH 01/51] version bumps --- Cargo.lock | 37 +++++++++++++++---------------------- Cargo.toml | 2 +- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34c53396..957611b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -56,9 +56,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "shlex", ] @@ -169,12 +169,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "home" version = "0.5.9" @@ -216,9 +210,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.166" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libredox" @@ -279,11 +273,10 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", "log", "wasi", @@ -292,9 +285,9 @@ dependencies = [ [[package]] name = "mlua" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae9546e4a268c309804e8bbb7526e31cbfdedca7cd60ac1b987d0b212e0d876" +checksum = "9ea43c3ffac2d0798bd7128815212dd78c98316b299b7a902dabef13dc7b6b8d" dependencies = [ "bstr", "either", @@ -306,9 +299,9 @@ dependencies = [ [[package]] name = "mlua-sys" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa6bf1a64f06848749b7e7727417f4ec2121599e2a10ef0a8a3888b0e9a5a0d" +checksum = "63a11d485edf0f3f04a508615d36c7d50d299cf61a7ee6d3e2530651e0a31771" dependencies = [ "cc", "cfg-if", @@ -340,7 +333,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ox" -version = "0.7.3" +version = "0.7.4" dependencies = [ "alinio", "base64", @@ -500,9 +493,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustix" @@ -608,9 +601,9 @@ checksum = "cc0db74f9ee706e039d031a560bd7d110c7022f016051b3d33eeff9583e3e67a" [[package]] name = "syn" -version = "2.0.89" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 667bb5d3..8f6f41f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ members = [ [package] name = "ox" -version = "0.7.3" +version = "0.7.4" edition = "2021" authors = ["Curlpipe <11898833+curlpipe@users.noreply.github.com>"] description = "A simple but flexible text editor." From 7aa380da5bb3062b9180ffee5222611e98a80ecb Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 00:33:02 +0000 Subject: [PATCH 02/51] Added very very early file tree logic (and made everything non-doc-safe) --- config/.oxrc | 4 + src/config/editor.rs | 252 +++++++++++++++++++++++-------------- src/editor/cursor.rs | 116 ++++++++++------- src/editor/documents.rs | 30 +++-- src/editor/editing.rs | 271 +++++++++++++++++++++++----------------- src/editor/filetree.rs | 52 ++++++++ src/editor/interface.rs | 22 ++-- src/editor/mod.rs | 159 +++++++++++------------ src/editor/mouse.rs | 229 ++++++++++++++++++--------------- src/editor/scanning.rs | 120 ++++++++++-------- src/main.rs | 4 +- 11 files changed, 751 insertions(+), 508 deletions(-) create mode 100644 src/editor/filetree.rs diff --git a/config/.oxrc b/config/.oxrc index 542eedbe..e162c703 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -276,6 +276,10 @@ event_mapping = { editor:macro_record_stop() editor:display_info("Macro recorded") end, + -- File Tree + ["ctrl_space"] = function() + editor:toggle_file_tree() + end, } -- Define user-defined commands diff --git a/src/config/editor.rs b/src/config/editor.rs index 95222945..c8f15622 100644 --- a/src/config/editor.rs +++ b/src/config/editor.rs @@ -24,7 +24,7 @@ impl LuaUserData for Editor { if let Some(doc) = editor.try_doc() { let loc = doc.cursor.selection_end; Ok(Some(LuaLoc { - x: editor.doc().character_idx(&loc), + x: doc.character_idx(&loc), y: loc.y + 1, })) } else { @@ -189,16 +189,21 @@ impl LuaUserData for Editor { Ok(()) }); methods.add_method_mut("remove_word", |_, editor, ()| { - let _ = editor.doc_mut().delete_word(); - editor.update_highlighter(); - editor.hl_edit(editor.doc().loc().y); + if let Some(doc) = editor.try_doc_mut() { + let _ = doc.delete_word(); + let y = doc.loc().y; + editor.update_highlighter(); + editor.hl_edit(y); + } Ok(()) }); // Cursor moving methods.add_method_mut("move_to", |_, editor, (x, y): (usize, usize)| { - let y = y.saturating_sub(1); - editor.doc_mut().move_to(&Loc { y, x }); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + let y = y.saturating_sub(1); + doc.move_to(&Loc { y, x }); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_up", |_, editor, ()| { @@ -222,33 +227,45 @@ impl LuaUserData for Editor { Ok(()) }); methods.add_method_mut("move_home", |_, editor, ()| { - editor.doc_mut().move_home(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_home(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_end", |_, editor, ()| { - editor.doc_mut().move_end(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_end(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_page_up", |_, editor, ()| { - editor.doc_mut().move_page_up(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_page_up(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_page_down", |_, editor, ()| { - editor.doc_mut().move_page_down(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_page_down(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_top", |_, editor, ()| { - editor.doc_mut().move_top(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_top(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_bottom", |_, editor, ()| { - editor.doc_mut().move_bottom(); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_bottom(); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_previous_word", |_, editor, ()| { @@ -262,21 +279,29 @@ impl LuaUserData for Editor { Ok(()) }); methods.add_method_mut("cursor_snap", |_, editor, ()| { - editor.doc_mut().old_cursor = editor.doc().loc().x; + if let Some(doc) = editor.try_doc_mut() { + doc.old_cursor = doc.loc().x; + } Ok(()) }); methods.add_method_mut("move_line_up", |_, editor, ()| { - let _ = editor.doc_mut().swap_line_up(); - editor.hl_edit(editor.doc().loc().y); - editor.hl_edit(editor.doc().loc().y + 1); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + let _ = doc.swap_line_up(); + let y = doc.loc().y; + editor.hl_edit(y); + editor.hl_edit(y + 1); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("move_line_down", |_, editor, ()| { - let _ = editor.doc_mut().swap_line_down(); - editor.hl_edit(editor.doc().loc().y.saturating_sub(1)); - editor.hl_edit(editor.doc().loc().y); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + let _ = doc.swap_line_down(); + let y = doc.loc().y; + editor.hl_edit(y.saturating_sub(1)); + editor.hl_edit(y); + editor.update_highlighter(); + } Ok(()) }); // Cursor selection and clipboard @@ -306,17 +331,23 @@ impl LuaUserData for Editor { Ok(()) }); methods.add_method_mut("select_to", |_, editor, (x, y): (usize, usize)| { - let y = y.saturating_sub(1); - editor.doc_mut().select_to(&Loc { y, x }); - editor.update_highlighter(); + if let Some(doc) = editor.try_doc_mut() { + let y = y.saturating_sub(1); + doc.select_to(&Loc { y, x }); + editor.update_highlighter(); + } Ok(()) }); methods.add_method_mut("cancel_selection", |_, editor, ()| { - editor.doc_mut().cancel_selection(); + if let Some(doc) = editor.try_doc_mut() { + doc.cancel_selection(); + } Ok(()) }); methods.add_method_mut("cursor_to_viewport", |_, editor, ()| { - editor.doc_mut().bring_cursor_in_viewport(); + if let Some(doc) = editor.try_doc_mut() { + doc.bring_cursor_in_viewport(); + } Ok(()) }); methods.add_method_mut("cut", |_, editor, ()| { @@ -341,72 +372,90 @@ impl LuaUserData for Editor { methods.add_method_mut( "insert_at", |_, editor, (text, x, y): (String, usize, usize)| { - editor.plugin_active = true; - let y = y.saturating_sub(1); - let location = editor.doc_mut().char_loc(); - editor.doc_mut().move_to(&Loc { y, x }); - for ch in text.chars() { - if let Err(err) = editor.character(ch) { - editor.feedback = Feedback::Error(err.to_string()); + if editor.try_doc().is_some() { + editor.plugin_active = true; + let y = y.saturating_sub(1); + let location = editor.try_doc().unwrap().char_loc(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_to(&Loc { y, x }); + } + for ch in text.chars() { + if let Err(err) = editor.character(ch) { + editor.feedback = Feedback::Error(err.to_string()); + } } + if let Some(doc) = editor.try_doc_mut() { + doc.move_to(&location); + } + editor.update_highlighter(); + editor.plugin_active = false; } - editor.doc_mut().move_to(&location); - editor.update_highlighter(); - editor.plugin_active = false; Ok(()) }, ); methods.add_method_mut("remove_at", |_, editor, (x, y): (usize, usize)| { - editor.plugin_active = true; - let y = y.saturating_sub(1); - let location = editor.doc_mut().char_loc(); - editor.doc_mut().move_to(&Loc { y, x }); - if let Err(err) = editor.delete() { - editor.feedback = Feedback::Error(err.to_string()); - } - editor.doc_mut().move_to(&location); - editor.update_highlighter(); - editor.plugin_active = false; - Ok(()) - }); - methods.add_method_mut("insert_line_at", |_, editor, (text, y): (String, usize)| { - editor.plugin_active = true; - let y = y.saturating_sub(1); - let location = editor.doc_mut().char_loc(); - if y < editor.doc().len_lines() { - editor.doc_mut().move_to_y(y); - editor.doc_mut().move_home(); - if let Err(err) = editor.enter() { - editor.feedback = Feedback::Error(err.to_string()); + if editor.try_doc().is_some() { + editor.plugin_active = true; + let y = y.saturating_sub(1); + let location = editor.try_doc().unwrap().char_loc(); + if let Some(doc) = editor.try_doc_mut() { + doc.move_to(&Loc { y, x }); } - editor.up(); - } else { - editor.doc_mut().move_bottom(); - if let Err(err) = editor.enter() { + if let Err(err) = editor.delete() { editor.feedback = Feedback::Error(err.to_string()); } + if let Some(doc) = editor.try_doc_mut() { + doc.move_to(&location); + } + editor.update_highlighter(); + editor.plugin_active = false; } - for ch in text.chars() { - if let Err(err) = editor.character(ch) { - editor.feedback = Feedback::Error(err.to_string()); + Ok(()) + }); + methods.add_method_mut("insert_line_at", |_, editor, (text, y): (String, usize)| { + if editor.try_doc().is_some() { + editor.plugin_active = true; + let y = y.saturating_sub(1); + let location = editor.try_doc().unwrap().char_loc(); + if let Some(doc) = editor.try_doc_mut() { + if y < doc.len_lines() { + doc.move_to_y(y); + doc.move_home(); + if let Err(err) = editor.enter() { + editor.feedback = Feedback::Error(err.to_string()); + } + editor.up(); + } else { + doc.move_bottom(); + if let Err(err) = editor.enter() { + editor.feedback = Feedback::Error(err.to_string()); + } + } + for ch in text.chars() { + if let Err(err) = editor.character(ch) { + editor.feedback = Feedback::Error(err.to_string()); + } + } } + editor.try_doc_mut().unwrap().move_to(&location); + editor.update_highlighter(); + editor.plugin_active = false; } - editor.doc_mut().move_to(&location); - editor.update_highlighter(); - editor.plugin_active = false; Ok(()) }); methods.add_method_mut("remove_line_at", |_, editor, y: usize| { - editor.plugin_active = true; - let y = y.saturating_sub(1); - let location = editor.doc_mut().char_loc(); - editor.doc_mut().move_to_y(y); - if let Err(err) = editor.delete_line() { - editor.feedback = Feedback::Error(err.to_string()); + if editor.try_doc().is_some() { + editor.plugin_active = true; + let y = y.saturating_sub(1); + let location = editor.try_doc().unwrap().char_loc(); + editor.try_doc_mut().unwrap().move_to_y(y); + if let Err(err) = editor.delete_line() { + editor.feedback = Feedback::Error(err.to_string()); + } + editor.try_doc_mut().unwrap().move_to(&location); + editor.update_highlighter(); + editor.plugin_active = false; } - editor.doc_mut().move_to(&location); - editor.update_highlighter(); - editor.plugin_active = false; Ok(()) }); methods.add_method_mut("get", |_, editor, ()| { @@ -639,32 +688,40 @@ impl LuaUserData for Editor { }); methods.add_method_mut("move_next_match", |_, editor, query: String| { editor.next_match(&query); - editor.doc_mut().cancel_selection(); + if let Some(doc) = editor.try_doc_mut() { + doc.cancel_selection(); + } editor.update_highlighter(); Ok(()) }); methods.add_method_mut("move_previous_match", |_, editor, query: String| { editor.prev_match(&query); - editor.doc_mut().cancel_selection(); + if let Some(doc) = editor.try_doc_mut() { + doc.cancel_selection(); + } editor.update_highlighter(); Ok(()) }); // Document state modification methods.add_method_mut("set_read_only", |_, editor, status: bool| { - editor.doc_mut().info.read_only = status; + if let Some(doc) = editor.try_doc_mut() { + doc.info.read_only = status; + } Ok(()) }); methods.add_method_mut("set_file_type", |_, editor, name: String| { - let doc = config!(editor.config, document); - if let Some(file_type) = doc.file_types.get_name(&name) { - let mut highlighter = file_type.get_highlighter(&editor.config, 4); - highlighter.run(&editor.doc().lines); - if let Some(file) = editor.files.get_mut(editor.ptr.clone()) { - file.highlighter = highlighter; - file.file_type = Some(file_type); + if let Some(actual_doc) = editor.try_doc() { + let doc = config!(editor.config, document); + if let Some(file_type) = doc.file_types.get_name(&name) { + let mut highlighter = file_type.get_highlighter(&editor.config, 4); + highlighter.run(&actual_doc.lines); + if let Some(file) = editor.files.get_mut(editor.ptr.clone()) { + file.highlighter = highlighter; + file.file_type = Some(file_type); + } + } else { + editor.feedback = Feedback::Error(format!("Invalid file type: {name}")); } - } else { - editor.feedback = Feedback::Error(format!("Invalid file type: {name}")); } Ok(()) }); @@ -690,6 +747,11 @@ impl LuaUserData for Editor { let _ = editor.render(lua); Ok(()) }); + // File Tree + methods.add_method_mut("toggle_file_tree", |_, editor, ()| { + editor.toggle_file_tree(); + Ok(()) + }); // Miscellaneous methods.add_method_mut("open_command_line", |_, editor, ()| { match editor.prompt("Command") { diff --git a/src/editor/cursor.rs b/src/editor/cursor.rs index 246279f4..516375bd 100644 --- a/src/editor/cursor.rs +++ b/src/editor/cursor.rs @@ -9,91 +9,113 @@ use super::Editor; impl Editor { /// Move the cursor up pub fn select_up(&mut self) { - self.doc_mut().select_up(); + if let Some(doc) = self.try_doc_mut() { + doc.select_up(); + } } /// Move the cursor down pub fn select_down(&mut self) { - self.doc_mut().select_down(); + if let Some(doc) = self.try_doc_mut() { + doc.select_down(); + } } /// Move the cursor left pub fn select_left(&mut self) { - let status = self.doc_mut().select_left(); - // Cursor wrapping if cursor hits the start of the line let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::StartOfLine && self.doc().loc().y != 0 && wrapping { - self.doc_mut().select_up(); - self.doc_mut().select_end(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.select_left(); + // Cursor wrapping if cursor hits the start of the line + if status == Status::StartOfLine && doc.loc().y != 0 && wrapping { + doc.select_up(); + doc.select_end(); + } } } /// Move the cursor right pub fn select_right(&mut self) { - let status = self.doc_mut().select_right(); - // Cursor wrapping if cursor hits the end of a line let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::EndOfLine && wrapping { - self.doc_mut().select_down(); - self.doc_mut().select_home(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.select_right(); + // Cursor wrapping if cursor hits the end of a line + if status == Status::EndOfLine && wrapping { + doc.select_down(); + doc.select_home(); + } } } /// Select the whole document pub fn select_all(&mut self) { - self.doc_mut().move_top(); - self.doc_mut().select_bottom(); + if let Some(doc) = self.try_doc_mut() { + doc.move_top(); + doc.select_bottom(); + } } /// Move the cursor up pub fn up(&mut self) { - self.doc_mut().move_up(); + if let Some(doc) = self.try_doc_mut() { + doc.move_up(); + } } /// Move the cursor down pub fn down(&mut self) { - self.doc_mut().move_down(); + if let Some(doc) = self.try_doc_mut() { + doc.move_down(); + } } /// Move the cursor left pub fn left(&mut self) { - let status = self.doc_mut().move_left(); - // Cursor wrapping if cursor hits the start of the line let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::StartOfLine && self.doc().loc().y != 0 && wrapping { - self.doc_mut().move_up(); - self.doc_mut().move_end(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.move_left(); + // Cursor wrapping if cursor hits the start of the line + if status == Status::StartOfLine && doc.loc().y != 0 && wrapping { + doc.move_up(); + doc.move_end(); + } } } /// Move the cursor right pub fn right(&mut self) { - let status = self.doc_mut().move_right(); - // Cursor wrapping if cursor hits the end of a line let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::EndOfLine && wrapping { - self.doc_mut().move_down(); - self.doc_mut().move_home(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.move_right(); + // Cursor wrapping if cursor hits the end of a line + if status == Status::EndOfLine && wrapping { + doc.move_down(); + doc.move_home(); + } } } /// Move the cursor to the previous word in the line pub fn prev_word(&mut self) { - let status = self.doc_mut().move_prev_word(); let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::StartOfLine && wrapping { - self.doc_mut().move_up(); - self.doc_mut().move_end(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.move_prev_word(); + if status == Status::StartOfLine && wrapping { + doc.move_up(); + doc.move_end(); + } } } /// Move the cursor to the next word in the line pub fn next_word(&mut self) { - let status = self.doc_mut().move_next_word(); let wrapping = config!(self.config, document).wrap_cursor; - if status == Status::EndOfLine && wrapping { - self.doc_mut().move_down(); - self.doc_mut().move_home(); + if let Some(doc) = self.try_doc_mut() { + let status = doc.move_next_word(); + if status == Status::EndOfLine && wrapping { + doc.move_down(); + doc.move_home(); + } } } } @@ -105,12 +127,14 @@ pub fn handle_multiple_cursors( lua: &Lua, original_loc: &Loc, ) -> Result<()> { + if ged!(&editor).try_doc().is_none() { + return Ok(()); + } let mut original_loc = *original_loc; // Cache the state of the document - let mut cursor = ged!(&editor).doc().cursor; - // For each secondary cursor, replay the key event + let mut cursor = ged!(&editor).try_doc().unwrap().cursor; + let mut secondary_cursors = ged!(&editor).try_doc().unwrap().secondary_cursors.clone(); ged!(mut &editor).macro_man.playing = true; - let mut secondary_cursors = ged!(&editor).doc().secondary_cursors.clone(); // Prevent interference adjust_other_cursors( &mut secondary_cursors, @@ -124,12 +148,12 @@ pub fn handle_multiple_cursors( while ptr < secondary_cursors.len() { // Move to the secondary cursor position let sec_cursor = secondary_cursors[ptr]; - ged!(mut &editor).doc_mut().move_to(&sec_cursor); + ged!(mut &editor).try_doc_mut().unwrap().move_to(&sec_cursor); // Replay the event - let old_loc = ged!(&editor).doc().char_loc(); + let old_loc = ged!(&editor).try_doc().unwrap().char_loc(); handle_event(editor, event, lua)?; // Prevent any interference - let char_loc = ged!(&editor).doc().char_loc(); + let char_loc = ged!(&editor).try_doc().unwrap().char_loc(); cursor.loc = adjust_other_cursors( &mut secondary_cursors, &old_loc, @@ -142,15 +166,15 @@ pub fn handle_multiple_cursors( // Move to the next secondary cursor ptr += 1; } - ged!(mut &editor).doc_mut().secondary_cursors = secondary_cursors; + ged!(mut &editor).try_doc_mut().unwrap().secondary_cursors = secondary_cursors; ged!(mut &editor).macro_man.playing = false; // Restore back to the state of the document beforehand // TODO: calculate char_ptr and old_cursor too - ged!(mut &editor).doc_mut().cursor = cursor; - let char_ptr = ged!(&editor).doc().character_idx(&cursor.loc); - ged!(mut &editor).doc_mut().char_ptr = char_ptr; - ged!(mut &editor).doc_mut().old_cursor = cursor.loc.x; - ged!(mut &editor).doc_mut().cancel_selection(); + ged!(mut &editor).try_doc_mut().unwrap().cursor = cursor; + let char_ptr = ged!(&editor).try_doc().unwrap().character_idx(&cursor.loc); + ged!(mut &editor).try_doc_mut().unwrap().char_ptr = char_ptr; + ged!(mut &editor).try_doc_mut().unwrap().old_cursor = cursor.loc.x; + ged!(mut &editor).try_doc_mut().unwrap().cancel_selection(); Ok(()) } diff --git a/src/editor/documents.rs b/src/editor/documents.rs index 4cea45bc..b9640a08 100644 --- a/src/editor/documents.rs +++ b/src/editor/documents.rs @@ -19,6 +19,8 @@ pub enum FileLayout { Atom(Vec, usize), /// Placeholder for an empty file split None, + /// Representing a file tree + FileTree, } impl Default for FileLayout { @@ -38,8 +40,8 @@ impl FileLayout { pub fn span(&self, idx: Vec, size: Size, at: Loc) -> Span { match self { Self::None => vec![], - // Atom: stretches from starting position through to end of it's container - Self::Atom(_, _) => vec![(idx, at.y..at.y + size.h, at.x..at.x + size.w)], + // Atom and file trees: stretch from starting position through to end of their containers + Self::Atom(_, _) | Self::FileTree => vec![(idx, at.y..at.y + size.h, at.x..at.x + size.w)], // SideBySide: distributes available container space to each sub-layout Self::SideBySide(layouts) => { let mut result = vec![]; @@ -153,7 +155,7 @@ impl FileLayout { /// Work out how many files are currently open pub fn len(&self) -> usize { match self { - Self::None => 0, + Self::None | Self::FileTree => 0, Self::Atom(containers, _) => containers.len(), Self::SideBySide(layouts) => layouts.iter().map(|(layout, _)| layout.len()).sum(), Self::TopToBottom(layouts) => layouts.iter().map(|(layout, _)| layout.len()).sum(), @@ -163,7 +165,7 @@ impl FileLayout { /// Find a file container location from it's path pub fn find(&self, idx: Vec, path: &str) -> Option<(Vec, usize)> { match self { - Self::None => None, + Self::None | Self::FileTree => None, Self::Atom(containers, _) => { // Scan this atom for any documents for (ptr, container) in containers.iter().enumerate() { @@ -193,7 +195,7 @@ impl FileLayout { /// Get the `FileLayout` at a certain index pub fn get_raw(&self, mut idx: Vec) -> Option<&FileLayout> { match self { - Self::None | Self::Atom(_, _) => Some(self), + Self::None | Self::Atom(_, _) | Self::FileTree => Some(self), Self::SideBySide(layouts) => { if idx.is_empty() { Some(self) @@ -219,7 +221,7 @@ impl FileLayout { Some(self) } else { match self { - Self::None | Self::Atom(_, _) => Some(self), + Self::None | Self::Atom(_, _) | Self::FileTree => Some(self), Self::SideBySide(layouts) => { let subidx = idx.remove(0); layouts.get_mut(subidx)?.0.get_raw_mut(idx) @@ -235,7 +237,7 @@ impl FileLayout { /// Get the `FileLayout` at a certain index pub fn set(&mut self, mut idx: Vec, fl: FileLayout) { match self { - Self::None | Self::Atom(_, _) => *self = fl, + Self::None | Self::Atom(_, _) | Self::FileTree => *self = fl, Self::SideBySide(layouts) | Self::TopToBottom(layouts) => { if idx.is_empty() { *self = fl; @@ -250,7 +252,7 @@ impl FileLayout { /// Given an index, find the file containers in the tree pub fn get_atom(&self, mut idx: Vec) -> Option<(&[FileContainer], usize)> { match self { - Self::None => None, + Self::None | Self::FileTree => None, Self::Atom(containers, ptr) => Some((containers, *ptr)), Self::SideBySide(layouts) => { let subidx = idx.remove(0); @@ -269,7 +271,7 @@ impl FileLayout { mut idx: Vec, ) -> Option<(&mut Vec, &mut usize)> { match self { - Self::None => None, + Self::None | Self::FileTree => None, Self::Atom(ref mut containers, ref mut ptr) => Some((containers, ptr)), Self::SideBySide(layouts) => { let subidx = idx.remove(0); @@ -302,7 +304,7 @@ impl FileLayout { /// In the currently active atom, move to a different document pub fn move_to(&mut self, mut idx: Vec, ptr: usize) { match self { - Self::None => (), + Self::None | Self::FileTree => (), Self::Atom(_, ref mut old_ptr) => *old_ptr = ptr, Self::SideBySide(layouts) | Self::TopToBottom(layouts) => { let subidx = idx.remove(0); @@ -329,7 +331,7 @@ impl FileLayout { // Determine behaviour based on parent if let Some(parent) = self.get_raw_mut(at_parent) { match parent { - Self::None | Self::Atom(_, _) => unreachable!(), + Self::None | Self::Atom(_, _) | Self::FileTree => unreachable!(), Self::SideBySide(layouts) | Self::TopToBottom(layouts) => { // Get the proportion of what we're removing let removed_prop = layouts[within_parent].1; @@ -353,7 +355,7 @@ impl FileLayout { /// Traverse the tree and return a list of indices to empty atoms pub fn empty_atoms(&self, at: Vec) -> Option> { match self { - Self::None => None, + Self::None | Self::FileTree => None, Self::Atom(fcs, _) => { if fcs.is_empty() { Some(at) @@ -407,6 +409,7 @@ impl FileLayout { new_ptr.push(0); Self::TopToBottom(vec![(fl, 0.5), (old_fl.clone(), 0.5)]) } + Self::FileTree => return at, }; self.set(at, new_fl); } @@ -423,6 +426,7 @@ impl FileLayout { new_ptr.push(1); Self::TopToBottom(vec![(old_fl.clone(), 0.5), (fl, 0.5)]) } + Self::FileTree => return at, }; self.set(at, new_fl); } @@ -439,6 +443,7 @@ impl FileLayout { new_ptr.push(0); Self::SideBySide(vec![(fl, 0.5), (old_fl.clone(), 0.5)]) } + Self::FileTree => return at, }; self.set(at, new_fl); } @@ -455,6 +460,7 @@ impl FileLayout { new_ptr.push(1); Self::SideBySide(vec![(old_fl.clone(), 0.5), (fl, 0.5)]) } + Self::FileTree => return at, }; self.set(at, new_fl); } diff --git a/src/editor/editing.rs b/src/editor/editing.rs index 32ea09d9..d49e2dc5 100644 --- a/src/editor/editing.rs +++ b/src/editor/editing.rs @@ -8,44 +8,50 @@ use super::Editor; impl Editor { /// Execute an edit event pub fn exe(&mut self, ev: Event) -> Result<()> { - let multi_cursors = self.doc().secondary_cursors.len() > 0; - if !(self.plugin_active || self.pasting || self.macro_man.playing || multi_cursors) { - let last_ev = self.doc().event_mgmt.last_event.as_ref(); - // If last event is present and the same as this one, commit - let event_type_differs = last_ev.map(|e1| e1.same_type(&ev)) != Some(true); - // If last event is present and on a different line from the previous, commit - let event_on_different_line = last_ev.map(|e| e.loc().y == ev.loc().y) != Some(true); - // Commit if necessary - if event_type_differs || event_on_different_line { - self.doc_mut().commit(); + if self.try_doc().is_some() { + let multi_cursors = !self.try_doc().unwrap().secondary_cursors.is_empty(); + if !(self.plugin_active || self.pasting || self.macro_man.playing || multi_cursors) { + let last_ev = self.try_doc().unwrap().event_mgmt.last_event.as_ref(); + // If last event is present and the same as this one, commit + let event_type_differs = last_ev.map(|e1| e1.same_type(&ev)) != Some(true); + // If last event is present and on a different line from the previous, commit + let event_on_different_line = last_ev.map(|e| e.loc().y == ev.loc().y) != Some(true); + // Commit if necessary + if event_type_differs || event_on_different_line { + self.try_doc_mut().unwrap().commit(); + } + } else if self.try_doc().unwrap().event_mgmt.history.is_empty() { + // If there is no initial commit and a plug-in changes things without commiting + // It can cause the initial state of the document to be lost + // This condition makes sure there is a copy to go back to if this is the case + self.try_doc_mut().unwrap().commit(); } - } else if self.doc().event_mgmt.history.is_empty() { - // If there is no initial commit and a plug-in changes things without commiting - // It can cause the initial state of the document to be lost - // This condition makes sure there is a copy to go back to if this is the case - self.doc_mut().commit(); + self.try_doc_mut().unwrap().exe(ev)?; } - self.doc_mut().exe(ev)?; Ok(()) } /// Insert a character into the document, creating a new row if editing /// on the last line of the document pub fn character(&mut self, ch: char) -> Result<()> { - if !self.doc().is_selection_empty() && !self.doc().info.read_only { - self.doc_mut().remove_selection(); - self.reload_highlight(); - } - self.new_row()?; - // Handle the character insertion - if ch == '\n' { - self.enter()?; - } else { - let loc = self.doc().char_loc(); - self.exe(Event::Insert(loc, ch.to_string()))?; - if let Some(file) = self.files.get_mut(self.ptr.clone()) { - if !file.doc.info.read_only { - file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + if self.try_doc().is_some() { + let doc = self.try_doc().unwrap(); + if !doc.is_selection_empty() && !doc.info.read_only { + self.try_doc_mut().unwrap().remove_selection(); + self.reload_highlight(); + } + self.new_row()?; + // Handle the character insertion + if ch == '\n' { + self.enter()?; + } else { + let doc = self.try_doc().unwrap(); + let loc = doc.char_loc(); + self.exe(Event::Insert(loc, ch.to_string()))?; + if let Some(file) = self.files.get_mut(self.ptr.clone()) { + if !file.doc.info.read_only { + file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + } } } } @@ -54,20 +60,22 @@ impl Editor { /// Handle the return key pub fn enter(&mut self) -> Result<()> { - // Perform the changes - if self.doc().loc().y == self.doc().len_lines() { - // Enter pressed on the empty line at the bottom of the document - self.new_row()?; - } else { - // Enter pressed in the start, middle or end of the line - let loc = self.doc().char_loc(); - self.exe(Event::SplitDown(loc))?; - if let Some(file) = self.files.get_mut(self.ptr.clone()) { - if !file.doc.info.read_only { - let line = &file.doc.lines[loc.y + 1]; - file.highlighter.insert_line(loc.y + 1, line); - let line = &file.doc.lines[loc.y]; - file.highlighter.edit(loc.y, line); + if let Some(doc) = self.try_doc_mut() { + // Perform the changes + if doc.loc().y == doc.len_lines() { + // Enter pressed on the empty line at the bottom of the document + self.new_row()?; + } else { + // Enter pressed in the start, middle or end of the line + let loc = doc.char_loc(); + self.exe(Event::SplitDown(loc))?; + if let Some(file) = self.files.get_mut(self.ptr.clone()) { + if !file.doc.info.read_only { + let line = &file.doc.lines[loc.y + 1]; + file.highlighter.insert_line(loc.y + 1, line); + let line = &file.doc.lines[loc.y]; + file.highlighter.edit(loc.y, line); + } } } } @@ -76,46 +84,51 @@ impl Editor { /// Handle the backspace key pub fn backspace(&mut self) -> Result<()> { - if !self.doc().is_selection_empty() && !self.doc().info.read_only { - // Removing a selection is significant and worth an undo commit - self.doc_mut().commit(); - self.doc_mut().remove_selection(); - self.reload_highlight(); - return Ok(()); - } - let mut c = self.doc().char_ptr; - let on_first_line = self.doc().loc().y == 0; - let out_of_range = self.doc().out_of_range(0, self.doc().loc().y).is_err(); - if c == 0 && !on_first_line && !out_of_range { - // Backspace was pressed on the start of the line, move line to the top - self.new_row()?; - let mut loc = self.doc().char_loc(); - let file = self.files.get_mut(self.ptr.clone()).unwrap(); - if !file.doc.info.read_only { - self.highlighter().remove_line(loc.y); + if self.try_doc().is_some() { + let doc = self.try_doc().unwrap(); + if !doc.is_selection_empty() && !doc.info.read_only { + // Removing a selection is significant and worth an undo commit + let doc = self.try_doc_mut().unwrap(); + doc.commit(); + doc.remove_selection(); + self.reload_highlight(); + return Ok(()); } - loc.y = loc.y.saturating_sub(1); - let file = self.files.get_mut(self.ptr.clone()).unwrap(); - loc.x = file.doc.line(loc.y).unwrap().chars().count(); - self.exe(Event::SpliceUp(loc))?; - let file = self.files.get_mut(self.ptr.clone()).unwrap(); - let line = &file.doc.lines[loc.y]; - if !file.doc.info.read_only { - file.highlighter.edit(loc.y, line); - } - } else if !(c == 0 && on_first_line) { - // Backspace was pressed in the middle of the line, delete the character - c = c.saturating_sub(1); - if let Some(line) = self.doc().line(self.doc().loc().y) { - if let Some(ch) = line.chars().nth(c) { - let loc = Loc { - x: c, - y: self.doc().loc().y, - }; - self.exe(Event::Delete(loc, ch.to_string()))?; - let file = self.files.get_mut(self.ptr.clone()).unwrap(); - if !file.doc.info.read_only { - file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + let doc = self.try_doc().unwrap(); + let mut c = doc.char_ptr; + let on_first_line = doc.loc().y == 0; + let out_of_range = doc.out_of_range(0, doc.loc().y).is_err(); + if c == 0 && !on_first_line && !out_of_range { + // Backspace was pressed on the start of the line, move line to the top + self.new_row()?; + let mut loc = self.try_doc().unwrap().char_loc(); + let file = self.files.get_mut(self.ptr.clone()).unwrap(); + if !file.doc.info.read_only { + self.highlighter().remove_line(loc.y); + } + loc.y = loc.y.saturating_sub(1); + let file = self.files.get_mut(self.ptr.clone()).unwrap(); + loc.x = file.doc.line(loc.y).unwrap().chars().count(); + self.exe(Event::SpliceUp(loc))?; + let file = self.files.get_mut(self.ptr.clone()).unwrap(); + let line = &file.doc.lines[loc.y]; + if !file.doc.info.read_only { + file.highlighter.edit(loc.y, line); + } + } else if !(c == 0 && on_first_line) { + // Backspace was pressed in the middle of the line, delete the character + c = c.saturating_sub(1); + if let Some(line) = doc.line(doc.loc().y) { + if let Some(ch) = line.chars().nth(c) { + let loc = Loc { + x: c, + y: doc.loc().y, + }; + self.exe(Event::Delete(loc, ch.to_string()))?; + let file = self.files.get_mut(self.ptr.clone()).unwrap(); + if !file.doc.info.read_only { + file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + } } } } @@ -125,17 +138,19 @@ impl Editor { /// Delete the character in place pub fn delete(&mut self) -> Result<()> { - let c = self.doc().char_ptr; - if let Some(line) = self.doc().line(self.doc().loc().y) { - if let Some(ch) = line.chars().nth(c) { - let loc = Loc { - x: c, - y: self.doc().loc().y, - }; - self.exe(Event::Delete(loc, ch.to_string()))?; - if let Some(file) = self.files.get_mut(self.ptr.clone()) { - if !file.doc.info.read_only { - file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + if let Some(doc) = self.try_doc() { + let c = doc.char_ptr; + if let Some(line) = doc.line(doc.loc().y) { + if let Some(ch) = line.chars().nth(c) { + let loc = Loc { + x: c, + y: doc.loc().y, + }; + self.exe(Event::Delete(loc, ch.to_string()))?; + if let Some(file) = self.files.get_mut(self.ptr.clone()) { + if !file.doc.info.read_only { + file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + } } } } @@ -145,10 +160,14 @@ impl Editor { /// Insert a new row at the end of the document if the cursor is on it fn new_row(&mut self) -> Result<()> { - if self.doc().loc().y == self.doc().len_lines() { - self.exe(Event::InsertLine(self.doc().loc().y, String::new()))?; - if !self.doc().info.read_only { - self.highlighter().append(""); + if self.try_doc().is_some() { + let doc = self.try_doc().unwrap(); + if doc.loc().y == doc.len_lines() { + self.exe(Event::InsertLine(doc.loc().y, String::new()))?; + let doc = self.try_doc().unwrap(); + if !doc.info.read_only { + self.highlighter().append(""); + } } } Ok(()) @@ -156,13 +175,17 @@ impl Editor { /// Delete the current line pub fn delete_line(&mut self) -> Result<()> { - // Delete the line - if self.doc().loc().y < self.doc().len_lines() { - let y = self.doc().loc().y; - let line = self.doc().line(y).unwrap(); - self.exe(Event::DeleteLine(y, line))?; - if !self.doc().info.read_only { - self.highlighter().remove_line(y); + if self.try_doc().is_some() { + // Delete the line + let doc = self.try_doc().unwrap(); + if doc.loc().y < doc.len_lines() { + let y = doc.loc().y; + let line = doc.line(y).unwrap(); + self.exe(Event::DeleteLine(y, line))?; + let doc = self.try_doc().unwrap(); + if !doc.info.read_only { + self.highlighter().remove_line(y); + } } } Ok(()) @@ -170,35 +193,47 @@ impl Editor { /// Perform redo action pub fn redo(&mut self) -> Result<()> { - let result = Ok(self.doc_mut().redo()?); - self.reload_highlight(); - result + if let Some(doc) = self.try_doc_mut() { + doc.redo()?; + self.reload_highlight(); + } + Ok(()) } /// Perform undo action pub fn undo(&mut self) -> Result<()> { - let result = Ok(self.doc_mut().undo()?); - self.reload_highlight(); - result + if let Some(doc) = self.try_doc_mut() { + doc.undo()?; + self.reload_highlight(); + } + Ok(()) } /// Copy the selected text pub fn copy(&mut self) -> Result<()> { - let selected_text = self.doc().selection_text(); - self.terminal.copy(&selected_text) + if let Some(doc) = self.try_doc() { + let selected_text = doc.selection_text(); + self.terminal.copy(&selected_text) + } else { + Ok(()) + } } /// Cut the selected text pub fn cut(&mut self) -> Result<()> { - self.copy()?; - self.doc_mut().remove_selection(); - self.reload_highlight(); + if self.try_doc().is_some() { + self.copy()?; + self.try_doc_mut().unwrap().remove_selection(); + self.reload_highlight(); + } Ok(()) } /// Shortcut to help rehighlight a line pub fn hl_edit(&mut self, y: usize) { - let line = self.doc().line(y).unwrap_or_default(); - self.highlighter().edit(y, &line); + if let Some(doc) = self.try_doc() { + let line = doc.line(y).unwrap_or_default(); + self.highlighter().edit(y, &line); + } } } diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs new file mode 100644 index 00000000..f9ed7034 --- /dev/null +++ b/src/editor/filetree.rs @@ -0,0 +1,52 @@ +/// Utilities for handling the file tree + +use crate::Editor; +use crate::editor::FileLayout; + +impl Editor { + /// Open the file tree + pub fn open_file_tree(&mut self) { + if !self.file_tree_is_open() { + // Wrap existing file layout in new file layout + self.files = FileLayout::SideBySide( + vec![ + (FileLayout::FileTree, 0.2), + (self.files.clone(), 0.8), + ] + ); + self.ptr = vec![0]; + } + } + + /// Close the file tree + pub fn close_file_tree(&mut self) { + if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { + // Locate where the file tree is + let ftp = layouts.iter().position(|(l, _)| matches!(l, FileLayout::FileTree)); + if let Some(at) = ftp { + // Delete the file tree + self.files.remove(vec![at]); + } + } + } + + /// Toggle the file tree + pub fn toggle_file_tree(&mut self) { + if self.file_tree_is_open() { + self.close_file_tree(); + } else { + self.open_file_tree(); + } + } + + /// Determine whether the file tree is open + pub fn file_tree_is_open(&self) -> bool { + if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { + layouts + .iter() + .any(|(layout, _)| matches!(layout, FileLayout::FileTree)) + } else { + false + } + } +} diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 3600499d..818285af 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -65,6 +65,7 @@ impl Editor { let mut accounted_for = 0; // Render each component of this line for (c, (fc, rows, range)) in fcs.iter().enumerate() { + let in_file_tree = matches!(self.files.get_raw(fc.to_owned()), Some(FileLayout::FileTree)); // Check if we have encountered an area of discontinuity in the line if range.start != accounted_for { // Discontinuity detected, fill with vertical bar! @@ -93,7 +94,10 @@ impl Editor { let length = range.end.saturating_sub(range.start); let height = rows.end.saturating_sub(rows.start); let rel_y = y.saturating_sub(rows.start); - if y == rows.start && tab_line_enabled { + if in_file_tree { + // Part of file tree! + result += &" ".repeat(length); + } else if y == rows.start && tab_line_enabled { // Tab line result += &self.render_tab_line(fc, lua, length)?; } else if y == rows.end.saturating_sub(1) { @@ -201,13 +205,15 @@ impl Editor { /// Function to calculate the cursor's position on screen pub fn cursor_position(&self) -> Option { - let Loc { x, y } = self.doc().cursor_loc_in_screen()?; - for (ptr, rows, cols) in &self.render_cache.span { - if ptr == &self.ptr { - return Some(Loc { - x: cols.start + x + self.dent(), - y: rows.start + y + self.push_down, - }); + if !matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)) { + let Loc { x, y } = self.try_doc().unwrap().cursor_loc_in_screen()?; + for (ptr, rows, cols) in &self.render_cache.span { + if ptr == &self.ptr { + return Some(Loc { + x: cols.start + x + self.dent(), + y: rows.start + y + self.push_down, + }); + } } } None diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 076c6456..46e630ba 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -19,6 +19,7 @@ use synoptic::Highlighter; mod cursor; mod documents; mod editing; +mod filetree; mod filetypes; mod interface; mod macros; @@ -252,45 +253,49 @@ impl Editor { /// save the document to the disk pub fn save(&mut self) -> Result<()> { - // Perform the save - self.doc_mut().save()?; - // All done - self.feedback = Feedback::Info("Document saved successfully".to_string()); + if let Some(doc) = self.try_doc_mut() { + // Perform the save + doc.save()?; + // All done + self.feedback = Feedback::Info("Document saved successfully".to_string()); + } Ok(()) } /// save the document to the disk at a specified path pub fn save_as(&mut self) -> Result<()> { - let file_name = self.prompt("Save as")?; - self.doc_mut().save_as(&file_name)?; - if self.doc().file_name.is_none() { - if let Some((files, _)) = self.files.get_atom_mut(self.ptr.clone()) { + if self.try_doc().is_some() { + let file_name = self.prompt("Save as")?; + self.try_doc_mut().unwrap().save_as(&file_name)?; + if self.try_doc().unwrap().file_name.is_none() { let tab_width = config!(self.config, document).tab_width; - let file = files.last_mut().unwrap(); - // Set the file name - file.doc.file_name = Some(file_name.clone()); - // Update the file type - file.file_type = config!(self.config, document) - .file_types - .identify(&mut file.doc); - // Reattach an appropriate highlighter - let highlighter = file - .file_type - .clone() - .map_or(Highlighter::new(tab_width), |t| { - t.get_highlighter(&self.config, tab_width) - }); - file.highlighter = highlighter; - file.highlighter.run(&file.doc.lines); - // Set up to date with disk - file.doc.event_mgmt.force_not_with_disk = false; - file.doc.event_mgmt.disk_write(&file.doc.take_snapshot()); + if let Some((files, _)) = self.files.get_atom_mut(self.ptr.clone()) { + let file = files.last_mut().unwrap(); + // Set the file name + file.doc.file_name = Some(file_name.clone()); + // Update the file type + file.file_type = config!(self.config, document) + .file_types + .identify(&mut file.doc); + // Reattach an appropriate highlighter + let highlighter = file + .file_type + .clone() + .map_or(Highlighter::new(tab_width), |t| { + t.get_highlighter(&self.config, tab_width) + }); + file.highlighter = highlighter; + file.highlighter.run(&file.doc.lines); + // Set up to date with disk + file.doc.event_mgmt.force_not_with_disk = false; + file.doc.event_mgmt.disk_write(&file.doc.take_snapshot()); + } } + // Commit events to event manager (for undo / redo) + self.try_doc_mut().unwrap().commit(); + // All done + self.feedback = Feedback::Info(format!("Document saved as {file_name} successfully")); } - // Commit events to event manager (for undo / redo) - self.doc_mut().commit(); - // All done - self.feedback = Feedback::Info(format!("Document saved as {file_name} successfully")); Ok(()) } @@ -351,10 +356,12 @@ impl Editor { /// Updates the current working directory of the editor pub fn update_cwd(&self) { - if let Some(name) = get_absolute_path(&self.doc().file_name.clone().unwrap_or_default()) { - let file = Path::new(&name); - if let Some(cwd) = file.parent() { - let _ = env::set_current_dir(cwd); + if let Some(doc) = self.try_doc() { + if let Some(name) = get_absolute_path(&doc.file_name.clone().unwrap_or_default()) { + let file = Path::new(&name); + if let Some(cwd) = file.parent() { + let _ = env::set_current_dir(cwd); + } } } } @@ -376,16 +383,6 @@ impl Editor { &mut self.files.get_atom_mut(self.ptr.clone()).unwrap().0[idx].doc } - /// Gets a reference to the current document - pub fn doc(&self) -> &Document { - &self.files.get(self.ptr.clone()).unwrap().doc - } - - /// Gets a mutable reference to the current document - pub fn doc_mut(&mut self) -> &mut Document { - &mut self.files.get_mut(self.ptr.clone()).unwrap().doc - } - /// Gets the number of documents currently open pub fn doc_len(&mut self) -> usize { self.files.get_atom(self.ptr.clone()).unwrap().0.len() @@ -435,24 +432,26 @@ impl Editor { /// Handle key event pub fn handle_key_event(&mut self, modifiers: KMod, code: KCode) -> Result<()> { - // Check period of inactivity - let end = Instant::now(); - let inactivity = end.duration_since(self.last_active).as_millis() as usize; - // Commit if over user-defined period of inactivity - if inactivity > config!(self.config, document).undo_period * 1000 { - self.doc_mut().commit(); - } - // Register this activity - self.last_active = Instant::now(); - // Editing - these key bindings can't be modified (only added to)! - match (modifiers, code) { - // Core key bindings (non-configurable behaviour) - (KMod::SHIFT | KMod::NONE, KCode::Char(ch)) => self.character(ch)?, - (KMod::NONE, KCode::Tab) => self.handle_tab()?, - (KMod::NONE, KCode::Backspace) => self.backspace()?, - (KMod::NONE, KCode::Delete) => self.delete()?, - (KMod::NONE, KCode::Enter) => self.enter()?, - _ => (), + if self.try_doc().is_some() { + // Check period of inactivity + let end = Instant::now(); + let inactivity = end.duration_since(self.last_active).as_millis() as usize; + // Commit if over user-defined period of inactivity + if inactivity > config!(self.config, document).undo_period * 1000 { + self.try_doc_mut().unwrap().commit(); + } + // Register this activity + self.last_active = Instant::now(); + // Editing - these key bindings can't be modified (only added to)! + match (modifiers, code) { + // Core key bindings (non-configurable behaviour) + (KMod::SHIFT | KMod::NONE, KCode::Char(ch)) => self.character(ch)?, + (KMod::NONE, KCode::Tab) => self.handle_tab()?, + (KMod::NONE, KCode::Backspace) => self.backspace()?, + (KMod::NONE, KCode::Delete) => self.delete()?, + (KMod::NONE, KCode::Enter) => self.enter()?, + _ => (), + } } Ok(()) } @@ -466,23 +465,25 @@ impl Editor { /// Handle paste pub fn handle_paste(&mut self, text: &str) -> Result<()> { - // If we're playing back a macro, use the last text the user copied - // (to prevent hard-coded pasting) - let text = if self.macro_man.playing { - self.terminal.last_copy.to_string() - } else { - text.to_string() - }; - // Save state before paste - self.doc_mut().commit(); - // Apply paste - self.pasting = true; - for ch in text.chars() { - self.character(ch)?; + if self.try_doc().is_some() { + // If we're playing back a macro, use the last text the user copied + // (to prevent hard-coded pasting) + let text = if self.macro_man.playing { + self.terminal.last_copy.to_string() + } else { + text.to_string() + }; + // Save state before paste + self.try_doc_mut().unwrap().commit(); + // Apply paste + self.pasting = true; + for ch in text.chars() { + self.character(ch)?; + } + self.pasting = false; + // Save state after paste + self.try_doc_mut().unwrap().commit(); } - self.pasting = false; - // Save state after paste - self.doc_mut().commit(); Ok(()) } diff --git a/src/editor/mouse.rs b/src/editor/mouse.rs index 16041df5..e1800910 100644 --- a/src/editor/mouse.rs +++ b/src/editor/mouse.rs @@ -34,48 +34,52 @@ impl Editor { if let Some((idx, rows, cols)) = at_idx { let idx = idx.clone(); // Calculate the current dent in this split - let doc_idx = self.files.get_atom(idx.clone()).unwrap().1; - let dent = self.dent_for(&idx, doc_idx); - // Split that user clicked in located - adjust event location - let clicked = Loc { - x: col.saturating_sub(cols.start), - y: row.saturating_sub(rows.start), - }; - // Work out where the user clicked - if clicked.y == 0 && tab_enabled { - // Clicked on tab line - let (tabs, _, offset) = - self.get_tab_parts(&idx, lua, cols.end.saturating_sub(cols.start)); - // Try to work out which tab we clicked on - let mut c = u16::try_from(clicked.x).unwrap_or(u16::MAX) + 2; - for (i, header) in tabs.iter().enumerate() { - let header_len = width(header, 4) + 1; - c = c.saturating_sub(u16::try_from(header_len).unwrap_or(u16::MAX)); - if c == 0 { - // This tab was clicked on - return MouseLocation::Tabs(idx.clone(), i + offset); + if let Some((_, doc_idx)) = self.files.get_atom(idx.clone()) { + let dent = self.dent_for(&idx, doc_idx); + // Split that user clicked in located - adjust event location + let clicked = Loc { + x: col.saturating_sub(cols.start), + y: row.saturating_sub(rows.start), + }; + // Work out where the user clicked + if clicked.y == 0 && tab_enabled { + // Clicked on tab line + let (tabs, _, offset) = + self.get_tab_parts(&idx, lua, cols.end.saturating_sub(cols.start)); + // Try to work out which tab we clicked on + let mut c = u16::try_from(clicked.x).unwrap_or(u16::MAX) + 2; + for (i, header) in tabs.iter().enumerate() { + let header_len = width(header, 4) + 1; + c = c.saturating_sub(u16::try_from(header_len).unwrap_or(u16::MAX)); + if c == 0 { + // This tab was clicked on + return MouseLocation::Tabs(idx.clone(), i + offset); + } } + // Did not click on a tab + MouseLocation::Out + } else if clicked.y == rows.end.saturating_sub(1) { + // Clicked on status line + MouseLocation::Out + } else if clicked.x < dent { + // Clicked on line numbers + MouseLocation::Out + } else if let Some((fcs, ptr)) = self.files.get_atom(idx.clone()) { + // Clicked on document + let offset = fcs[ptr].doc.offset; + MouseLocation::File( + idx.clone(), + Loc { + x: clicked.x.saturating_sub(dent) + offset.x, + y: clicked.y.saturating_sub(tab) + offset.y, + }, + ) + } else { + // We can't seem to get the atom for some reason, just default to Out + MouseLocation::Out } - // Did not click on a tab - MouseLocation::Out - } else if clicked.y == rows.end.saturating_sub(1) { - // Clicked on status line - MouseLocation::Out - } else if clicked.x < dent { - // Clicked on line numbers - MouseLocation::Out - } else if let Some((fcs, ptr)) = self.files.get_atom(idx.clone()) { - // Clicked on document - let offset = fcs[ptr].doc.offset; - MouseLocation::File( - idx.clone(), - Loc { - x: clicked.x.saturating_sub(dent) + offset.x, - y: clicked.y.saturating_sub(tab) + offset.y, - }, - ) } else { - // We can't seem to get the atom for some reason, just default to Out + // Pretty sure we just clicked on the file tree (split with no atom!) MouseLocation::Out } } else { @@ -104,10 +108,12 @@ impl Editor { match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { self.ptr.clone_from(&idx); - self.doc_mut().clear_cursors(); - loc.x = self.doc_mut().character_idx(&loc); - self.doc_mut().move_to(&loc); - self.doc_mut().old_cursor = self.doc().loc().x; + if let Some(doc) = self.try_doc_mut() { + doc.clear_cursors(); + loc.x = doc.character_idx(&loc); + doc.move_to(&loc); + doc.old_cursor = doc.loc().x; + } } MouseLocation::Tabs(idx, i) => { self.files.move_to(idx.clone(), i); @@ -121,18 +127,20 @@ impl Editor { // Select the current line if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { self.ptr.clone_from(&idx); - self.doc_mut().select_line_at(loc.y); - let line = self.doc().line(loc.y).unwrap_or_default(); - self.alt_click_state = Some(( - Loc { - x: 0, - y: self.doc().loc().y, - }, - Loc { - x: line.chars().count(), - y: self.doc().loc().y, - }, - )); + if let Some(doc) = self.try_doc_mut() { + doc.select_line_at(loc.y); + let line = doc.line(loc.y).unwrap_or_default(); + self.alt_click_state = Some(( + Loc { + x: 0, + y: doc.loc().y, + }, + Loc { + x: line.chars().count(), + y: doc.loc().y, + }, + )); + } } } MouseEventKind::Up(MouseButton::Right) => { @@ -149,22 +157,29 @@ impl Editor { MouseEventKind::Drag(MouseButton::Left) => { match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { - self.ptr.clone_from(&idx); - loc.x = self.doc_mut().character_idx(&loc); - if let Some((dbl_start, dbl_end)) = self.alt_click_state { - if loc.x > self.doc().cursor.selection_end.x { - // Find boundary of next word - let next = self.doc().next_word_close(loc); - self.doc_mut().move_to(&dbl_start); - self.doc_mut().select_to(&Loc { x: next, y: loc.y }); + if self.try_doc().is_some() { + self.ptr.clone_from(&idx); + let doc = self.try_doc().unwrap(); + loc.x = doc.character_idx(&loc); + if let Some((dbl_start, dbl_end)) = self.alt_click_state { + let doc = self.try_doc().unwrap(); + if loc.x > doc.cursor.selection_end.x { + // Find boundary of next word + let next = doc.next_word_close(loc); + let doc = self.try_doc_mut().unwrap(); + doc.move_to(&dbl_start); + doc.select_to(&Loc { x: next, y: loc.y }); + } else { + // Find boundary of previous word + let next = doc.prev_word_close(loc); + let doc = self.try_doc_mut().unwrap(); + doc.move_to(&dbl_end); + doc.select_to(&Loc { x: next, y: loc.y }); + } } else { - // Find boundary of previous word - let next = self.doc().prev_word_close(loc); - self.doc_mut().move_to(&dbl_end); - self.doc_mut().select_to(&Loc { x: next, y: loc.y }); + let doc = self.try_doc_mut().unwrap(); + doc.select_to(&loc); } - } else { - self.doc_mut().select_to(&loc); } } MouseLocation::Tabs(_, _) | MouseLocation::Out => (), @@ -173,22 +188,28 @@ impl Editor { MouseEventKind::Drag(MouseButton::Right) => { match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { - self.ptr.clone_from(&idx); - loc.x = self.doc_mut().character_idx(&loc); - if let Some((line_start, line_end)) = self.alt_click_state { - if loc.y > self.doc().cursor.selection_end.y { - let line = self.doc().line(loc.y).unwrap_or_default(); - self.doc_mut().move_to(&line_start); - self.doc_mut().select_to(&Loc { - x: line.chars().count(), - y: loc.y, - }); + if self.try_doc().is_some() { + self.ptr.clone_from(&idx); + let doc = self.try_doc_mut().unwrap(); + loc.x = doc.character_idx(&loc); + if let Some((line_start, line_end)) = self.alt_click_state { + let doc = self.try_doc().unwrap(); + if loc.y > doc.cursor.selection_end.y { + let line = doc.line(loc.y).unwrap_or_default(); + let doc = self.try_doc_mut().unwrap(); + doc.move_to(&line_start); + doc.select_to(&Loc { + x: line.chars().count(), + y: loc.y, + }); + } else { + let doc = self.try_doc_mut().unwrap(); + doc.move_to(&line_end); + doc.select_to(&Loc { x: 0, y: loc.y }); + } } else { - self.doc_mut().move_to(&line_end); - self.doc_mut().select_to(&Loc { x: 0, y: loc.y }); + self.try_doc_mut().unwrap().select_to(&loc); } - } else { - self.doc_mut().select_to(&loc); } } MouseLocation::Tabs(_, _) | MouseLocation::Out => (), @@ -196,23 +217,29 @@ impl Editor { } // Mouse scroll behaviour MouseEventKind::ScrollDown | MouseEventKind::ScrollUp => { + let scroll_amount = config!(self.config, terminal).scroll_amount; if let MouseLocation::File(idx, _) = self.find_mouse_location(lua, event) { self.ptr.clone_from(&idx); - let scroll_amount = config!(self.config, terminal).scroll_amount; - for _ in 0..scroll_amount { - if event.kind == MouseEventKind::ScrollDown { - self.doc_mut().scroll_down(); - } else { - self.doc_mut().scroll_up(); + if let Some(doc) = self.try_doc_mut() { + for _ in 0..scroll_amount { + if event.kind == MouseEventKind::ScrollDown { + doc.scroll_down(); + } else { + doc.scroll_up(); + } } } } } MouseEventKind::ScrollLeft => { - self.doc_mut().move_left(); + if let Some(doc) = self.try_doc_mut() { + doc.move_left(); + } } MouseEventKind::ScrollRight => { - self.doc_mut().move_right(); + if let Some(doc) = self.try_doc_mut() { + doc.move_right(); + } } _ => (), }, @@ -221,8 +248,10 @@ impl Editor { if let MouseEventKind::Down(MouseButton::Left) = event.kind { if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { self.ptr.clone_from(&idx); - self.doc_mut().new_cursor(loc); - self.doc_mut().commit(); + if let Some(doc) = self.try_doc_mut() { + doc.new_cursor(loc); + doc.commit(); + } } } } @@ -235,12 +264,14 @@ impl Editor { // Select the current word if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { self.ptr.clone_from(&idx); - self.doc_mut().select_word_at(&loc); - let mut selection = self.doc().cursor.selection_end; - let mut cursor = self.doc().cursor.loc; - selection.x = self.doc().character_idx(&selection); - cursor.x = self.doc().character_idx(&cursor); - self.alt_click_state = Some((selection, cursor)); + if let Some(doc) = self.try_doc_mut() { + doc.select_word_at(&loc); + let mut selection = doc.cursor.selection_end; + let mut cursor = doc.cursor.loc; + selection.x = doc.character_idx(&selection); + cursor.x = doc.character_idx(&cursor); + self.alt_click_state = Some((selection, cursor)); + } } } } diff --git a/src/editor/scanning.rs b/src/editor/scanning.rs index 09c9716e..02355f2d 100644 --- a/src/editor/scanning.rs +++ b/src/editor/scanning.rs @@ -15,8 +15,13 @@ use super::Editor; impl Editor { /// Use search feature pub fn search(&mut self, lua: &Lua) -> Result<()> { + // Block any non-documents from activating search + if self.try_doc().is_none() { + return Ok(()); + } + // Gather data let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); - let cache = self.doc().char_loc(); + let cache = self.try_doc().unwrap().char_loc(); // Prompt for a search term let mut target = String::new(); let mut done = false; @@ -51,20 +56,20 @@ impl Editor { (KMod::NONE, KCode::Enter) => done = true, // Cancel operation (KMod::NONE, KCode::Esc) => { - self.doc_mut().move_to(&cache); - self.doc_mut().cancel_selection(); + self.try_doc_mut().unwrap().move_to(&cache); + self.try_doc_mut().unwrap().cancel_selection(); return Err(OxError::Cancelled); } // Remove from the input string if the user presses backspace (KMod::NONE, KCode::Backspace) => { target.pop(); - self.doc_mut().move_to(&cache); + self.try_doc_mut().unwrap().move_to(&cache); self.next_match(&target); } // Add to the input string if the user presses a character (KMod::NONE | KMod::SHIFT, KCode::Char(c)) => { target.push(c); - self.doc_mut().move_to(&cache); + self.try_doc_mut().unwrap().move_to(&cache); self.next_match(&target); } _ => (), @@ -104,7 +109,7 @@ impl Editor { // On return or escape key, exit menu (KMod::NONE, KCode::Enter) => done = true, (KMod::NONE, KCode::Esc) => { - self.doc_mut().move_to(&cache); + self.try_doc_mut().unwrap().move_to(&cache); done = true; } // On left key, move to the previous match in the document @@ -116,41 +121,54 @@ impl Editor { } self.update_highlighter(); } - self.doc_mut().cancel_selection(); + self.try_doc_mut().unwrap().cancel_selection(); Ok(()) } /// Move to the next match pub fn next_match(&mut self, target: &str) -> Option { - let mtch = self.doc_mut().next_match(target, 1)?; - // Select match - self.doc_mut().cancel_selection(); - let mut move_to = mtch.loc; - move_to.x += mtch.text.chars().count(); - self.doc_mut().move_to(&move_to); - self.doc_mut().select_to(&mtch.loc); - // Update highlighting - self.update_highlighter(); - Some(mtch.text) + if let Some(doc) = self.try_doc_mut() { + let mtch = doc.next_match(target, 1)?; + // Select match + doc.cancel_selection(); + let mut move_to = mtch.loc; + move_to.x += mtch.text.chars().count(); + doc.move_to(&move_to); + doc.select_to(&mtch.loc); + // Update highlighting + self.update_highlighter(); + Some(mtch.text) + } else { + None + } } /// Move to the previous match pub fn prev_match(&mut self, target: &str) -> Option { - let mtch = self.doc_mut().prev_match(target)?; - self.doc_mut().move_to(&mtch.loc); - // Select match - self.doc_mut().cancel_selection(); - let mut move_to = mtch.loc; - move_to.x += mtch.text.chars().count(); - self.doc_mut().move_to(&move_to); - self.doc_mut().select_to(&mtch.loc); - // Update highlighting - self.update_highlighter(); - Some(mtch.text) + if let Some(doc) = self.try_doc_mut() { + let mtch = doc.prev_match(target)?; + doc.move_to(&mtch.loc); + // Select match + doc.cancel_selection(); + let mut move_to = mtch.loc; + move_to.x += mtch.text.chars().count(); + doc.move_to(&move_to); + doc.select_to(&mtch.loc); + // Update highlighting + self.update_highlighter(); + Some(mtch.text) + } else { + None + } } /// Use replace feature pub fn replace(&mut self, lua: &Lua) -> Result<()> { + // Block any non-documents from activating replace + if self.try_doc().is_none() { + return Ok(()); + } + // Gather data let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); // Request replace information let target = self.prompt("Replace")?; @@ -215,38 +233,42 @@ impl Editor { // Update syntax highlighter if necessary self.update_highlighter(); } - self.doc_mut().cancel_selection(); + self.try_doc_mut().unwrap().cancel_selection(); Ok(()) } /// Replace an instance in a document fn do_replace(&mut self, into: &str, text: &str) -> Result<()> { - // Commit events to event manager (for undo / redo) - self.doc_mut().commit(); - // Do the replacement - let loc = self.doc().char_loc(); - self.doc_mut().replace(loc, text, into)?; - self.doc_mut().move_to(&loc); - // Update syntax highlighter - self.update_highlighter(); - if let Some(file) = self.files.get_mut(self.ptr.clone()) { - file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + if let Some(doc) = self.try_doc_mut() { + // Commit events to event manager (for undo / redo) + doc.commit(); + // Do the replacement + let loc = doc.char_loc(); + doc.replace(loc, text, into)?; + doc.move_to(&loc); + // Update syntax highlighter + self.update_highlighter(); + if let Some(file) = self.files.get_mut(self.ptr.clone()) { + file.highlighter.edit(loc.y, &file.doc.lines[loc.y]); + } } Ok(()) } /// Replace all instances in a document fn do_replace_all(&mut self, target: &str, into: &str) { - // Commit events to event manager (for undo / redo) - self.doc_mut().commit(); - // Replace everything top to bottom - self.doc_mut().move_to(&Loc::at(0, 0)); - while let Some(mtch) = self.doc_mut().next_match(target, 1) { - drop(self.doc_mut().replace(mtch.loc, &mtch.text, into)); - self.update_highlighter(); - if let Some(file) = self.files.get_mut(self.ptr.clone()) { - file.highlighter - .edit(mtch.loc.y, &file.doc.lines[mtch.loc.y]); + if self.try_doc().is_some() { + // Commit events to event manager (for undo / redo) + self.try_doc_mut().unwrap().commit(); + // Replace everything top to bottom + self.try_doc_mut().unwrap().move_to(&Loc::at(0, 0)); + while let Some(mtch) = self.try_doc_mut().unwrap().next_match(target, 1) { + drop(self.try_doc_mut().unwrap().replace(mtch.loc, &mtch.text, into)); + self.update_highlighter(); + if let Some(file) = self.files.get_mut(self.ptr.clone()) { + file.highlighter + .edit(mtch.loc.y, &file.doc.lines[mtch.loc.y]); + } } } } diff --git a/src/main.rs b/src/main.rs index 8a5728cd..59614a59 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,7 +19,7 @@ use events::wait_for_event; use kaolinite::event::{Error as KError, Event}; use kaolinite::searching::Searcher; use kaolinite::utils::{file_or_dir, get_cwd}; -use kaolinite::Loc; +use kaolinite::{Document, Loc}; use mlua::Error::{RuntimeError, SyntaxError}; use mlua::{AnyUserData, FromLua, Lua, Value}; use std::io::ErrorKind; @@ -184,7 +184,7 @@ fn run(cli: &CommandLineInterface) -> Result<()> { let event = wait_for_event(&editor, &lua)?; // Handle the event - let original_loc = ged!(&editor).doc().char_loc(); + let original_loc = ged!(&editor).try_doc().map(Document::char_loc).unwrap_or_default(); handle_event(&editor, &event, &lua)?; // Handle multi cursors From def1fc7dd832d22ab4cf5a1259d1b002e8bdb1d7 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 00:35:00 +0000 Subject: [PATCH 03/51] rustfmt --- src/editor/cursor.rs | 5 ++++- src/editor/documents.rs | 4 +++- src/editor/editing.rs | 3 ++- src/editor/filetree.rs | 17 ++++++++--------- src/editor/interface.rs | 11 +++++++++-- src/editor/scanning.rs | 6 +++++- src/main.rs | 5 ++++- 7 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/editor/cursor.rs b/src/editor/cursor.rs index 516375bd..e742b4a9 100644 --- a/src/editor/cursor.rs +++ b/src/editor/cursor.rs @@ -148,7 +148,10 @@ pub fn handle_multiple_cursors( while ptr < secondary_cursors.len() { // Move to the secondary cursor position let sec_cursor = secondary_cursors[ptr]; - ged!(mut &editor).try_doc_mut().unwrap().move_to(&sec_cursor); + ged!(mut &editor) + .try_doc_mut() + .unwrap() + .move_to(&sec_cursor); // Replay the event let old_loc = ged!(&editor).try_doc().unwrap().char_loc(); handle_event(editor, event, lua)?; diff --git a/src/editor/documents.rs b/src/editor/documents.rs index b9640a08..ee74a33e 100644 --- a/src/editor/documents.rs +++ b/src/editor/documents.rs @@ -41,7 +41,9 @@ impl FileLayout { match self { Self::None => vec![], // Atom and file trees: stretch from starting position through to end of their containers - Self::Atom(_, _) | Self::FileTree => vec![(idx, at.y..at.y + size.h, at.x..at.x + size.w)], + Self::Atom(_, _) | Self::FileTree => { + vec![(idx, at.y..at.y + size.h, at.x..at.x + size.w)] + } // SideBySide: distributes available container space to each sub-layout Self::SideBySide(layouts) => { let mut result = vec![]; diff --git a/src/editor/editing.rs b/src/editor/editing.rs index d49e2dc5..3391b741 100644 --- a/src/editor/editing.rs +++ b/src/editor/editing.rs @@ -15,7 +15,8 @@ impl Editor { // If last event is present and the same as this one, commit let event_type_differs = last_ev.map(|e1| e1.same_type(&ev)) != Some(true); // If last event is present and on a different line from the previous, commit - let event_on_different_line = last_ev.map(|e| e.loc().y == ev.loc().y) != Some(true); + let event_on_different_line = + last_ev.map(|e| e.loc().y == ev.loc().y) != Some(true); // Commit if necessary if event_type_differs || event_on_different_line { self.try_doc_mut().unwrap().commit(); diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index f9ed7034..ab5d0b70 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,19 +1,16 @@ +use crate::editor::FileLayout; /// Utilities for handling the file tree - use crate::Editor; -use crate::editor::FileLayout; impl Editor { /// Open the file tree pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { // Wrap existing file layout in new file layout - self.files = FileLayout::SideBySide( - vec![ - (FileLayout::FileTree, 0.2), - (self.files.clone(), 0.8), - ] - ); + self.files = FileLayout::SideBySide(vec![ + (FileLayout::FileTree, 0.2), + (self.files.clone(), 0.8), + ]); self.ptr = vec![0]; } } @@ -22,7 +19,9 @@ impl Editor { pub fn close_file_tree(&mut self) { if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { // Locate where the file tree is - let ftp = layouts.iter().position(|(l, _)| matches!(l, FileLayout::FileTree)); + let ftp = layouts + .iter() + .position(|(l, _)| matches!(l, FileLayout::FileTree)); if let Some(at) = ftp { // Delete the file tree self.files.remove(vec![at]); diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 818285af..c33f04af 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -65,7 +65,10 @@ impl Editor { let mut accounted_for = 0; // Render each component of this line for (c, (fc, rows, range)) in fcs.iter().enumerate() { - let in_file_tree = matches!(self.files.get_raw(fc.to_owned()), Some(FileLayout::FileTree)); + let in_file_tree = matches!( + self.files.get_raw(fc.to_owned()), + Some(FileLayout::FileTree) + ); // Check if we have encountered an area of discontinuity in the line if range.start != accounted_for { // Discontinuity detected, fill with vertical bar! @@ -205,7 +208,11 @@ impl Editor { /// Function to calculate the cursor's position on screen pub fn cursor_position(&self) -> Option { - if !matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)) { + let in_file_tree = matches!( + self.files.get_raw(self.ptr.clone()), + Some(FileLayout::FileTree) + ); + if !in_file_tree { let Loc { x, y } = self.try_doc().unwrap().cursor_loc_in_screen()?; for (ptr, rows, cols) in &self.render_cache.span { if ptr == &self.ptr { diff --git a/src/editor/scanning.rs b/src/editor/scanning.rs index 02355f2d..0e6b455a 100644 --- a/src/editor/scanning.rs +++ b/src/editor/scanning.rs @@ -263,7 +263,11 @@ impl Editor { // Replace everything top to bottom self.try_doc_mut().unwrap().move_to(&Loc::at(0, 0)); while let Some(mtch) = self.try_doc_mut().unwrap().next_match(target, 1) { - drop(self.try_doc_mut().unwrap().replace(mtch.loc, &mtch.text, into)); + drop( + self.try_doc_mut() + .unwrap() + .replace(mtch.loc, &mtch.text, into), + ); self.update_highlighter(); if let Some(file) = self.files.get_mut(self.ptr.clone()) { file.highlighter diff --git a/src/main.rs b/src/main.rs index 59614a59..c397ff55 100644 --- a/src/main.rs +++ b/src/main.rs @@ -184,7 +184,10 @@ fn run(cli: &CommandLineInterface) -> Result<()> { let event = wait_for_event(&editor, &lua)?; // Handle the event - let original_loc = ged!(&editor).try_doc().map(Document::char_loc).unwrap_or_default(); + let original_loc = ged!(&editor) + .try_doc() + .map(Document::char_loc) + .unwrap_or_default(); handle_event(&editor, &event, &lua)?; // Handle multi cursors From badf50e3a3e5e104741beff5f7bced5a3683015e Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:22:36 +0000 Subject: [PATCH 04/51] Gave file tree a background and prevented some plug-in errors --- plugins/autoindent.lua | 15 ++++++++++----- plugins/pairs.lua | 6 +++++- src/editor/interface.rs | 8 +++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/plugins/autoindent.lua b/plugins/autoindent.lua index 62416de8..8c709407 100644 --- a/plugins/autoindent.lua +++ b/plugins/autoindent.lua @@ -1,5 +1,5 @@ --[[ -Auto Indent v0.12 +Auto Indent v0.13 Helps you when programming by guessing where indentation should go and then automatically applying these guesses as you program @@ -119,6 +119,7 @@ end -- Get how indented a line is at a certain y index function autoindent:get_indent(y) + if y == nil then return nil end local line = editor:get_line_at(y) return #(line:match("^\t+") or "") + #(line:match("^ +") or "") / document.tab_width end @@ -181,14 +182,18 @@ for i = 32, 126 do if char ~= "*" then -- Keep track of whether the line was previously dedenting beforehand event_mapping["before:" .. char] = function() - was_dedenting = autoindent:causes_dedent(editor.cursor.y) + if editor.cursor ~= nil then + was_dedenting = autoindent:causes_dedent(editor.cursor.y) + end end -- Trigger dedent checking event_mapping[char] = function() -- Dedent where appropriate - if autoindent:causes_dedent(editor.cursor.y) and not was_dedenting then - local new_level = autoindent:get_indent(editor.cursor.y) - 1 - autoindent:set_indent(editor.cursor.y, new_level) + if editor.cursor ~= nil then + if autoindent:causes_dedent(editor.cursor.y) and not was_dedenting then + local new_level = autoindent:get_indent(editor.cursor.y) - 1 + autoindent:set_indent(editor.cursor.y, new_level) + end end end end diff --git a/plugins/pairs.lua b/plugins/pairs.lua index 499d9eee..3d5820e3 100644 --- a/plugins/pairs.lua +++ b/plugins/pairs.lua @@ -1,5 +1,5 @@ --[[ -Bracket Pairs v0.6 +Bracket Pairs v0.7 Automatically insert and delete brackets and quotes where appropriate Also helps when you want to pad out brackets and quotes with whitespace @@ -19,6 +19,7 @@ autopairs.just_paired = { x = nil, y = nil } -- Determine whether we are currently inside a pair function autopairs:in_pair() + if editor.cursor == nil then return false end -- Get first candidate for a pair local first if editor.cursor.x == 0 then @@ -61,6 +62,7 @@ for i, str in ipairs(autopairs.pairings) do if start_pair == end_pair then -- Handle hybrid start_pair and end_pair event_mapping[start_pair] = function() + if editor.cursor == nil then return end -- Check if there is a matching start pair local at_char = ' ' if editor.cursor.x > 1 then @@ -85,6 +87,7 @@ for i, str in ipairs(autopairs.pairings) do else -- Handle traditional pairs event_mapping[end_pair] = function() + if editor.cursor == nil then return end -- Check if there is a matching start pair local at_char = editor:get_character_at(editor.cursor.x - 2, editor.cursor.y) local potential_dupe = at_char == start_pair @@ -100,6 +103,7 @@ for i, str in ipairs(autopairs.pairings) do end end event_mapping[start_pair] = function() + if editor.cursor == nil then return end autopairs.just_paired = editor.cursor editor:insert(end_pair) editor:move_left() diff --git a/src/editor/interface.rs b/src/editor/interface.rs index c33f04af..cccc26aa 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -99,7 +99,7 @@ impl Editor { let rel_y = y.saturating_sub(rows.start); if in_file_tree { // Part of file tree! - result += &" ".repeat(length); + result += &self.render_file_tree(length)?; } else if y == rows.start && tab_line_enabled { // Tab line result += &self.render_tab_line(fc, lua, length)?; @@ -535,6 +535,12 @@ impl Editor { Ok(content) } + fn render_file_tree(&mut self, length: usize) -> Result { + let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); + let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); + Ok(format!("{editor_bg}{editor_fg}{}", " ".repeat(length))) + } + /// Display a prompt in the document pub fn prompt>(&mut self, prompt: S) -> Result { let prompt = prompt.into(); From 5da441830931ebcddf419fb8692340b531b6fd2d Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 13:36:12 +0000 Subject: [PATCH 05/51] File tree will no longer clog up tree and cause crashes --- src/editor/filetree.rs | 23 +++++++++++++++++++---- src/editor/interface.rs | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index ab5d0b70..59330487 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -4,13 +4,28 @@ use crate::Editor; impl Editor { /// Open the file tree + #[allow(clippy::cast_precision_loss)] pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { // Wrap existing file layout in new file layout - self.files = FileLayout::SideBySide(vec![ - (FileLayout::FileTree, 0.2), - (self.files.clone(), 0.8), - ]); + if let FileLayout::SideBySide(ref mut layouts) = &mut self.files { + // Shrink existing splits + let redistribute = 0.2 / layouts.len() as f64; + for (_, prop) in &mut *layouts { + if *prop >= redistribute { + *prop -= redistribute; + } else { + *prop = 0.0; + } + } + // Insert file tree + layouts.insert(0, (FileLayout::FileTree, 0.2)); + } else { + self.files = FileLayout::SideBySide(vec![ + (FileLayout::FileTree, 0.2), + (self.files.clone(), 0.8), + ]); + } self.ptr = vec![0]; } } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index cccc26aa..12fba02b 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -535,6 +535,8 @@ impl Editor { Ok(content) } + /// Render a line in the file tree + #[allow(clippy::similar_names)] fn render_file_tree(&mut self, length: usize) -> Result { let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); From 2139a93aeb930c2df08f97ec1b3ce27878850a16 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:10:21 +0000 Subject: [PATCH 06/51] Added file tree backend --- src/editor/filetree.rs | 148 ++++++++++++++++++++++++++++++++++++++++- src/error.rs | 1 + 2 files changed, 147 insertions(+), 2 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 59330487..91baa356 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,150 @@ -use crate::editor::FileLayout; /// Utilities for handling the file tree -use crate::Editor; + +use crate::editor::FileLayout; +use crate::{Editor, Result, OxError}; +use std::path::{Path, PathBuf}; + +#[derive(Debug)] +pub enum FileTree { + /// Represents a file + File { + path: String + }, + /// Represents a directory + Dir { + path: String, + /// NOTE: when files is None, it means it has been unexpanded + /// directories lazily expand, only when the user requests them to be opened + files: Option>, + }, +} + +impl FileTree { + /// Build a file tree from a directory + pub fn build(dir: &str) -> Result { + // Ensure we have the absolute path + let root = std::fs::canonicalize(dir)?; + let mut result = Self::build_shallow(&root)?; + result.sort(); + Ok(result) + } + + /// Expands into a directory + fn build_shallow(path: &PathBuf) -> Result { + if path.is_file() { + Ok(Self::File { path: Self::path_to_string(path) }) + } else if path.is_dir() { + let mut files = vec![]; + for entry in std::fs::read_dir(path)? { + let entry = entry?; + if entry.path().is_file() { + files.push(Self::File { path: Self::path_to_string(&entry.path()) }); + } else if entry.path().is_dir() { + files.push(Self::Dir { path: Self::path_to_string(&entry.path()), files: None }); + } + } + Ok(Self::Dir { + path: Self::path_to_string(path), + files: Some(files), + }) + } else { + Err(OxError::InvalidPath) + } + } + + /// Takes a path and turns it into a string + fn path_to_string(path: &Path) -> String { + let mut path = path.to_string_lossy().to_string(); + if path.starts_with("\\\\?\\") { + path = path[4..].to_string(); + } + path + } + + /// Search for and retrieve a mutable reference to a node + pub fn get_mut(&mut self, needle: &str) -> Option<&mut Self> { + match self { + Self::File { path } => { + if needle == path { + // Match found! + Some(self) + } else { + // No match + None + } + } + Self::Dir { path, .. } => { + if needle == path { + // This directory is what we're searching for + Some(self) + } else if let Self::Dir { files: Some(files), .. } = self { + // Not directly what we're looking for, let's go deeper + for file in files { + if let Some(result) = file.get_mut(needle) { + // Found it! Return upwards + return Some(result); + } + } + // None of the files match up + None + } else { + // Dead end + None + } + } + } + } + + /// Expand a directory downwards + pub fn expand(&mut self) { + if let Self::Dir { path, .. } = self { + // Expand this directory + if let Ok(root) = std::fs::canonicalize(path) { + if let Ok(mut expanded) = Self::build_shallow(&root) { + expanded.sort(); + *self = expanded; + } + } + } + } + + /// Sort a file tree to have directories and files separated and ordered alphabetically + fn sort(&mut self) { + match self { + FileTree::File { .. } => (), + FileTree::Dir { files, .. } => { + // Sort child directories + if let Some(files) = files { + for file in files.iter_mut() { + file.sort(); + } + + // Sort this directory + files.sort_by(|a, b| { + let a_is_dir = matches!(a, FileTree::Dir { .. }); + let b_is_dir = matches!(b, FileTree::Dir { .. }); + + // Directories come first + match (a_is_dir, b_is_dir) { + (true, false) => std::cmp::Ordering::Less, + (false, true) => std::cmp::Ordering::Greater, + _ => { + // If both are the same type, compare by path + let a_path = match a { + FileTree::File { path } | FileTree::Dir { path, .. } => path, + }; + let b_path = match b { + FileTree::File { path } | FileTree::Dir { path, .. } => path, + }; + a_path.cmp(b_path) + } + } + }); + } + } + } + } +} impl Editor { /// Open the file tree diff --git a/src/error.rs b/src/error.rs index e1f9010c..659d60e6 100644 --- a/src/error.rs +++ b/src/error.rs @@ -28,6 +28,7 @@ error_set! { AlreadyOpen { file: String, }, + InvalidPath, // None, <--- Needed??? }; } From e643be3616415cc7cae6f1a602a323725bc5df96 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:21:42 +0000 Subject: [PATCH 07/51] rustfmt --- src/editor/filetree.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 91baa356..1c9250b9 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,15 +1,12 @@ /// Utilities for handling the file tree - use crate::editor::FileLayout; -use crate::{Editor, Result, OxError}; +use crate::{Editor, OxError, Result}; use std::path::{Path, PathBuf}; #[derive(Debug)] pub enum FileTree { /// Represents a file - File { - path: String - }, + File { path: String }, /// Represents a directory Dir { path: String, @@ -32,15 +29,22 @@ impl FileTree { /// Expands into a directory fn build_shallow(path: &PathBuf) -> Result { if path.is_file() { - Ok(Self::File { path: Self::path_to_string(path) }) + Ok(Self::File { + path: Self::path_to_string(path), + }) } else if path.is_dir() { let mut files = vec![]; for entry in std::fs::read_dir(path)? { let entry = entry?; if entry.path().is_file() { - files.push(Self::File { path: Self::path_to_string(&entry.path()) }); + files.push(Self::File { + path: Self::path_to_string(&entry.path()), + }); } else if entry.path().is_dir() { - files.push(Self::Dir { path: Self::path_to_string(&entry.path()), files: None }); + files.push(Self::Dir { + path: Self::path_to_string(&entry.path()), + files: None, + }); } } Ok(Self::Dir { @@ -77,7 +81,10 @@ impl FileTree { if needle == path { // This directory is what we're searching for Some(self) - } else if let Self::Dir { files: Some(files), .. } = self { + } else if let Self::Dir { + files: Some(files), .. + } = self + { // Not directly what we're looking for, let's go deeper for file in files { if let Some(result) = file.get_mut(needle) { @@ -123,7 +130,7 @@ impl FileTree { files.sort_by(|a, b| { let a_is_dir = matches!(a, FileTree::Dir { .. }); let b_is_dir = matches!(b, FileTree::Dir { .. }); - + // Directories come first match (a_is_dir, b_is_dir) { (true, false) => std::cmp::Ordering::Less, From 9fee47ff24a82d710811e26f5e5087f421db8e29 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:23:39 +0000 Subject: [PATCH 08/51] Rendered file tree structure --- src/editor/filetree.rs | 89 ++++++++++++++++++++++++++++++++++++----- src/editor/interface.rs | 37 +++++++++++++++-- src/editor/mod.rs | 4 ++ 3 files changed, 116 insertions(+), 14 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 1c9250b9..617efa78 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -2,6 +2,9 @@ use crate::editor::FileLayout; use crate::{Editor, OxError, Result}; use std::path::{Path, PathBuf}; +use kaolinite::utils::{get_cwd, get_file_name}; +use std::fmt::{Error, Display, Formatter}; +use std::result::Result as RResult; #[derive(Debug)] pub enum FileTree { @@ -118,8 +121,8 @@ impl FileTree { /// Sort a file tree to have directories and files separated and ordered alphabetically fn sort(&mut self) { match self { - FileTree::File { .. } => (), - FileTree::Dir { files, .. } => { + Self::File { .. } => (), + Self::Dir { files, .. } => { // Sort child directories if let Some(files) = files { for file in files.iter_mut() { @@ -128,22 +131,31 @@ impl FileTree { // Sort this directory files.sort_by(|a, b| { + let a_is_hidden = a.is_hidden(); + let b_is_hidden = b.is_hidden(); let a_is_dir = matches!(a, FileTree::Dir { .. }); let b_is_dir = matches!(b, FileTree::Dir { .. }); // Directories come first - match (a_is_dir, b_is_dir) { + match (a_is_hidden, b_is_hidden) { (true, false) => std::cmp::Ordering::Less, (false, true) => std::cmp::Ordering::Greater, _ => { - // If both are the same type, compare by path - let a_path = match a { - FileTree::File { path } | FileTree::Dir { path, .. } => path, - }; - let b_path = match b { - FileTree::File { path } | FileTree::Dir { path, .. } => path, - }; - a_path.cmp(b_path) + // If both are the same hidden status, directories come first + match (a_is_dir, b_is_dir) { + (true, false) => std::cmp::Ordering::Less, + (false, true) => std::cmp::Ordering::Greater, + _ => { + // If both are the same type, compare by path + let a_path = match a { + FileTree::File { path } | FileTree::Dir { path, .. } => path, + }; + let b_path = match b { + FileTree::File { path } | FileTree::Dir { path, .. } => path, + }; + a_path.cmp(b_path) + } + } } } }); @@ -151,6 +163,56 @@ impl FileTree { } } } + + /// Work out if this node is hidden or not + fn is_hidden(&self) -> bool { + let path = match self { + Self::File { path } | Self::Dir { path, .. } => path, + }; + get_file_name(path).is_some_and(|name| name.starts_with('.')) + } + + /// Get the appropriate icon + fn icon(&self) -> &str { + let is_file = match self { + Self::File { .. } => true, + Self::Dir { .. } => false, + }; + let is_expanded = match self { + Self::File { .. } => false, + Self::Dir { files, .. } => files.is_some(), + }; + let is_hidden = self.is_hidden(); + match (is_file, is_hidden, is_expanded) { + // Closed folders + (false, false, false) => "󰉖 ", + (false, true, false) => "󱞞 ", + // Opened folders + (false, _, true) => "󰷏 ", + // Files + (true, false, _) => "󰈤 ", + (true, true, _) => "󰘓 ", + } + } +} + +impl Display for FileTree { + fn fmt(&self, f: &mut Formatter<'_>) -> RResult<(), Error> { + match self { + Self::File { path } => writeln!(f, "{}{}", self.icon(), get_file_name(path).unwrap_or(path.to_string()))?, + Self::Dir { path, files } => { + // Write self + writeln!(f, "{}{}", self.icon(), get_file_name(path).unwrap_or(path.to_string()))?; + if let Some(files) = files { + // Write child nodes + for file in files { + write!(f, " {file}")?; + } + } + } + } + Ok(()) + } } impl Editor { @@ -158,6 +220,11 @@ impl Editor { #[allow(clippy::cast_precision_loss)] pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { + if let Some(cwd) = get_cwd() { + if let Ok(ft) = FileTree::build(&cwd) { + self.file_tree = Some(ft); + } + } // Wrap existing file layout in new file layout if let FileLayout::SideBySide(ref mut layouts) = &mut self.files { // Shrink existing splits diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 12fba02b..0925aa8d 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -24,6 +24,7 @@ pub struct RenderCache { pub help_message: Vec<(bool, String)>, pub help_message_width: usize, pub help_message_span: Range, + pub file_tree: Vec, } impl Editor { @@ -51,6 +52,11 @@ impl Editor { let help_start = (size.h / 2).saturating_sub(help_length / 2) + 1; let help_end = help_start + help_length; self.render_cache.help_message_span = help_start..help_end + 1; + // Calculate file tree display representation + if let Some(file_tree) = self.file_tree.as_ref() { + let filetree = format!("{file_tree}"); + self.render_cache.file_tree = filetree.split('\n').map(std::string::ToString::to_string).collect(); + } } /// Render a specific line @@ -99,7 +105,7 @@ impl Editor { let rel_y = y.saturating_sub(rows.start); if in_file_tree { // Part of file tree! - result += &self.render_file_tree(length)?; + result += &self.render_file_tree(y, length)?; } else if y == rows.start && tab_line_enabled { // Tab line result += &self.render_tab_line(fc, lua, length)?; @@ -537,10 +543,35 @@ impl Editor { /// Render a line in the file tree #[allow(clippy::similar_names)] - fn render_file_tree(&mut self, length: usize) -> Result { + fn render_file_tree(&mut self, y: usize, length: usize) -> Result { let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); - Ok(format!("{editor_bg}{editor_fg}{}", " ".repeat(length))) + // Work out which line to use + let line = self.render_cache + .file_tree + .get(y) + .map(std::string::ToString::to_string) + .unwrap_or_default(); + let mut line = line.chars(); + // Trim to fit + let mut result = String::new(); + let mut available = length; + loop { + if available > 0 { + if let Some(next) = line.next() { + let ch = width_char(&next, 4); + available = available.saturating_sub(ch); + result.push(next); + } else { + break; + } + } else { + break; + } + } + result += &" ".repeat(available); + // Return result + Ok(format!("{editor_bg}{editor_fg}{result}")) } /// Display a prompt in the document diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 46e630ba..786c78a3 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -31,6 +31,7 @@ pub use documents::{FileContainer, FileLayout}; pub use filetypes::{FileType, FileTypes}; pub use interface::RenderCache; pub use macros::MacroMan; +pub use filetree::FileTree; /// For managing all editing and rendering of cactus #[allow(clippy::struct_excessive_bools)] @@ -71,6 +72,8 @@ pub struct Editor { pub macro_man: MacroMan, /// Render cache pub render_cache: RenderCache, + /// For storing the current file tree value + pub file_tree: Option, } impl Editor { @@ -96,6 +99,7 @@ impl Editor { alt_click_state: None, macro_man: MacroMan::default(), render_cache: RenderCache::default(), + file_tree: None, }) } From c3b138b2692367638ed98207c55681add7f7a893 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:24:40 +0000 Subject: [PATCH 09/51] rustfmt --- src/editor/filetree.rs | 24 ++++++++++++++++++------ src/editor/interface.rs | 8 ++++++-- src/editor/mod.rs | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 617efa78..ad4fe60e 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,9 +1,9 @@ /// Utilities for handling the file tree use crate::editor::FileLayout; use crate::{Editor, OxError, Result}; -use std::path::{Path, PathBuf}; use kaolinite::utils::{get_cwd, get_file_name}; -use std::fmt::{Error, Display, Formatter}; +use std::fmt::{Display, Error, Formatter}; +use std::path::{Path, PathBuf}; use std::result::Result as RResult; #[derive(Debug)] @@ -148,10 +148,12 @@ impl FileTree { _ => { // If both are the same type, compare by path let a_path = match a { - FileTree::File { path } | FileTree::Dir { path, .. } => path, + FileTree::File { path } + | FileTree::Dir { path, .. } => path, }; let b_path = match b { - FileTree::File { path } | FileTree::Dir { path, .. } => path, + FileTree::File { path } + | FileTree::Dir { path, .. } => path, }; a_path.cmp(b_path) } @@ -199,10 +201,20 @@ impl FileTree { impl Display for FileTree { fn fmt(&self, f: &mut Formatter<'_>) -> RResult<(), Error> { match self { - Self::File { path } => writeln!(f, "{}{}", self.icon(), get_file_name(path).unwrap_or(path.to_string()))?, + Self::File { path } => writeln!( + f, + "{}{}", + self.icon(), + get_file_name(path).unwrap_or(path.to_string()) + )?, Self::Dir { path, files } => { // Write self - writeln!(f, "{}{}", self.icon(), get_file_name(path).unwrap_or(path.to_string()))?; + writeln!( + f, + "{}{}", + self.icon(), + get_file_name(path).unwrap_or(path.to_string()) + )?; if let Some(files) = files { // Write child nodes for file in files { diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 0925aa8d..15ae559b 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -55,7 +55,10 @@ impl Editor { // Calculate file tree display representation if let Some(file_tree) = self.file_tree.as_ref() { let filetree = format!("{file_tree}"); - self.render_cache.file_tree = filetree.split('\n').map(std::string::ToString::to_string).collect(); + self.render_cache.file_tree = filetree + .split('\n') + .map(std::string::ToString::to_string) + .collect(); } } @@ -547,7 +550,8 @@ impl Editor { let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); // Work out which line to use - let line = self.render_cache + let line = self + .render_cache .file_tree .get(y) .map(std::string::ToString::to_string) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 786c78a3..48a79fcf 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -28,10 +28,10 @@ mod scanning; pub use cursor::{allowed_by_multi_cursor, handle_multiple_cursors}; pub use documents::{FileContainer, FileLayout}; +pub use filetree::FileTree; pub use filetypes::{FileType, FileTypes}; pub use interface::RenderCache; pub use macros::MacroMan; -pub use filetree::FileTree; /// For managing all editing and rendering of cactus #[allow(clippy::struct_excessive_bools)] From 5b78a7dfadec61b4960a61c3d2861b5e301219c8 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:22:01 +0000 Subject: [PATCH 10/51] Better focus and added basic tree selection --- src/editor/filetree.rs | 67 ++++++++++++++++++++++++++++++----------- src/editor/interface.rs | 18 +++++++---- src/editor/mod.rs | 6 ++++ 3 files changed, 68 insertions(+), 23 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index ad4fe60e..918fdd72 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -2,9 +2,7 @@ use crate::editor::FileLayout; use crate::{Editor, OxError, Result}; use kaolinite::utils::{get_cwd, get_file_name}; -use std::fmt::{Display, Error, Formatter}; use std::path::{Path, PathBuf}; -use std::result::Result as RResult; #[derive(Debug)] pub enum FileTree { @@ -196,34 +194,58 @@ impl FileTree { (true, true, _) => "󰘓 ", } } -} -impl Display for FileTree { - fn fmt(&self, f: &mut Formatter<'_>) -> RResult<(), Error> { + /// Work out if this node is selected + pub fn is_selected(&self, selection: &str) -> bool { + match self { + Self::File { path } | Self::Dir { path, .. } => path == selection, + } + } + + /// Display this file tree + pub fn display(&self, selection: &str) -> (Vec, Option) { match self { - Self::File { path } => writeln!( - f, - "{}{}", - self.icon(), - get_file_name(path).unwrap_or(path.to_string()) - )?, + Self::File { path } => ( + vec![format!( + "{}{}", + self.icon(), + get_file_name(path).unwrap_or(path.to_string()) + )], + if self.is_selected(selection) { + Some(0) + } else { + None + }, + ), Self::Dir { path, files } => { + let mut result = vec![]; + let mut at = None; // Write self - writeln!( - f, + result.push(format!( "{}{}", self.icon(), get_file_name(path).unwrap_or(path.to_string()) - )?; + )); + if self.is_selected(selection) { + at = Some(result.len().saturating_sub(1)); + } + // Write child nodes if let Some(files) = files { - // Write child nodes for file in files { - write!(f, " {file}")?; + let (sub_display, sub_at) = file.display(selection); + for (c, s) in sub_display.iter().enumerate() { + result.push(format!(" {s}")); + if let Some(sub_at) = sub_at { + if sub_at == c { + at = Some(result.len().saturating_sub(1)); + } + } + } } } + (result, at) } } - Ok(()) } } @@ -232,9 +254,11 @@ impl Editor { #[allow(clippy::cast_precision_loss)] pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { + self.old_ptr = self.ptr.clone(); if let Some(cwd) = get_cwd() { if let Ok(ft) = FileTree::build(&cwd) { self.file_tree = Some(ft); + self.file_tree_selection = Some(cwd); } } // Wrap existing file layout in new file layout @@ -270,6 +294,15 @@ impl Editor { if let Some(at) = ftp { // Delete the file tree self.files.remove(vec![at]); + // Clear up any leftovers sidebyside + if let FileLayout::SideBySide(layouts) = &self.files { + if layouts.len() == 1 { + // Remove leftover + self.files = layouts[0].0.clone(); + } + } + // Reset pointer back to what it used to be + self.ptr = self.old_ptr.clone(); } } } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 15ae559b..c2f63550 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -25,6 +25,7 @@ pub struct RenderCache { pub help_message_width: usize, pub help_message_span: Range, pub file_tree: Vec, + pub file_tree_selection: Option, } impl Editor { @@ -54,11 +55,10 @@ impl Editor { self.render_cache.help_message_span = help_start..help_end + 1; // Calculate file tree display representation if let Some(file_tree) = self.file_tree.as_ref() { - let filetree = format!("{file_tree}"); - self.render_cache.file_tree = filetree - .split('\n') - .map(std::string::ToString::to_string) - .collect(); + let (files, sel) = + file_tree.display(self.file_tree_selection.as_ref().unwrap_or(&String::new())); + self.render_cache.file_tree = files; + self.render_cache.file_tree_selection = sel; } } @@ -549,6 +549,8 @@ impl Editor { fn render_file_tree(&mut self, y: usize, length: usize) -> Result { let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); + let selection_bg = Bg(config!(self.config, colors).selection_bg.to_color()?); + let selection_fg = Fg(config!(self.config, colors).selection_fg.to_color()?); // Work out which line to use let line = self .render_cache @@ -575,7 +577,11 @@ impl Editor { } result += &" ".repeat(available); // Return result - Ok(format!("{editor_bg}{editor_fg}{result}")) + if self.render_cache.file_tree_selection == Some(y) { + Ok(format!("{selection_bg}{selection_fg}{result}")) + } else { + Ok(format!("{editor_bg}{editor_fg}{result}")) + } } /// Display a prompt in the document diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 48a79fcf..4b48a8b0 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -74,6 +74,10 @@ pub struct Editor { pub render_cache: RenderCache, /// For storing the current file tree value pub file_tree: Option, + /// The selected file in the file tree + pub file_tree_selection: Option, + /// For caching a pointer to go back to when in a file tree + pub old_ptr: Vec, } impl Editor { @@ -100,6 +104,8 @@ impl Editor { macro_man: MacroMan::default(), render_cache: RenderCache::default(), file_tree: None, + file_tree_selection: None, + old_ptr: vec![], }) } From 1c7d932e3d29626269085cc051a1ba3952ef5097 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:02:57 +0000 Subject: [PATCH 11/51] Further made autoindent resistant to errors and moving filetree selection --- plugins/autoindent.lua | 116 ++++++++++++++++++++++------------------- src/editor/filetree.rs | 17 ++++++ src/editor/mod.rs | 42 ++++++++++++++- 3 files changed, 119 insertions(+), 56 deletions(-) diff --git a/plugins/autoindent.lua b/plugins/autoindent.lua index 8c709407..3ddd1645 100644 --- a/plugins/autoindent.lua +++ b/plugins/autoindent.lua @@ -162,16 +162,18 @@ function autoindent:disperse_block() end event_mapping["enter"] = function() - -- Indent where appropriate - if autoindent:causes_indent(editor.cursor.y - 1) then - local new_level = autoindent:get_indent(editor.cursor.y) + 1 - autoindent:set_indent(editor.cursor.y, new_level) + if editor.cursor ~= nil then + -- Indent where appropriate + if autoindent:causes_indent(editor.cursor.y - 1) then + local new_level = autoindent:get_indent(editor.cursor.y) + 1 + autoindent:set_indent(editor.cursor.y, new_level) + end + -- Give newly created line a boost to match it up relatively with the line before it + local added_level = autoindent:get_indent(editor.cursor.y) + autoindent:get_indent(editor.cursor.y - 1) + autoindent:set_indent(editor.cursor.y, added_level) + -- Handle the case where enter is pressed, creating a multi-line block that requires neatening up + autoindent:disperse_block() end - -- Give newly created line a boost to match it up relatively with the line before it - local added_level = autoindent:get_indent(editor.cursor.y) + autoindent:get_indent(editor.cursor.y - 1) - autoindent:set_indent(editor.cursor.y, added_level) - -- Handle the case where enter is pressed, creating a multi-line block that requires neatening up - autoindent:disperse_block() end -- For each ascii characters and punctuation @@ -210,62 +212,66 @@ end -- Shortcut to indent a selection event_mapping["ctrl_tab"] = function() - local cursor = editor.cursor - local select = editor.selection - if cursor.y == select.y then - -- Single line is selected - local level = autoindent:get_indent(cursor.y) - autoindent:set_indent(cursor.y, level + 1) - else - -- Multiple lines selected - if cursor.y > select.y then - for line = select.y, cursor.y do - editor:move_to(0, line) - local indent = autoindent:get_indent(line) - autoindent:set_indent(line, indent + 1) - end + if editor.cursor ~= nil then + local cursor = editor.cursor + local select = editor.selection + if cursor.y == select.y then + -- Single line is selected + local level = autoindent:get_indent(cursor.y) + autoindent:set_indent(cursor.y, level + 1) else - for line = cursor.y, select.y do - editor:move_to(0, line) - local indent = autoindent:get_indent(line) - autoindent:set_indent(line, indent + 1) + -- Multiple lines selected + if cursor.y > select.y then + for line = select.y, cursor.y do + editor:move_to(0, line) + local indent = autoindent:get_indent(line) + autoindent:set_indent(line, indent + 1) + end + else + for line = cursor.y, select.y do + editor:move_to(0, line) + local indent = autoindent:get_indent(line) + autoindent:set_indent(line, indent + 1) + end end + local cursor_tabs = dedent_amount(cursor.y) + local select_tabs = dedent_amount(select.y) + editor:move_to(cursor.x + cursor_tabs, cursor.y) + editor:select_to(select.x + select_tabs, select.y) end - local cursor_tabs = dedent_amount(cursor.y) - local select_tabs = dedent_amount(select.y) - editor:move_to(cursor.x + cursor_tabs, cursor.y) - editor:select_to(select.x + select_tabs, select.y) + editor:cursor_snap() end - editor:cursor_snap() end -- Shortcut to dedent a line event_mapping["shift_tab"] = function() - local cursor = editor.cursor - local select = editor.selection - if cursor.x == select.x and cursor.y == select.y then - -- Dedent a single line - local level = autoindent:get_indent(editor.cursor.y) - autoindent:set_indent(editor.cursor.y, level - 1) - else - -- Dedent a group of lines - if cursor.y > select.y then - for line = select.y, cursor.y do - editor:move_to(0, line) - local indent = autoindent:get_indent(line) - autoindent:set_indent(line, indent - 1) - end + if editor.cursor ~= nil then + local cursor = editor.cursor + local select = editor.selection + if cursor.x == select.x and cursor.y == select.y then + -- Dedent a single line + local level = autoindent:get_indent(editor.cursor.y) + autoindent:set_indent(editor.cursor.y, level - 1) else - for line = cursor.y, select.y do - editor:move_to(0, line) - local indent = autoindent:get_indent(line) - autoindent:set_indent(line, indent - 1) + -- Dedent a group of lines + if cursor.y > select.y then + for line = select.y, cursor.y do + editor:move_to(0, line) + local indent = autoindent:get_indent(line) + autoindent:set_indent(line, indent - 1) + end + else + for line = cursor.y, select.y do + editor:move_to(0, line) + local indent = autoindent:get_indent(line) + autoindent:set_indent(line, indent - 1) + end end + local cursor_tabs = dedent_amount(cursor.y) + local select_tabs = dedent_amount(select.y) + editor:move_to(cursor.x - cursor_tabs, cursor.y) + editor:select_to(select.x - select_tabs, select.y) end - local cursor_tabs = dedent_amount(cursor.y) - local select_tabs = dedent_amount(select.y) - editor:move_to(cursor.x - cursor_tabs, cursor.y) - editor:select_to(select.x - select_tabs, select.y) + editor:cursor_snap() end - editor:cursor_snap() end diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 918fdd72..0ffc6dbd 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -247,6 +247,23 @@ impl FileTree { } } } + + /// Find the file path at a certain index + pub fn flatten(&self) -> Vec { + match self { + Self::File { path } => vec![path.to_string()], + Self::Dir { path, files } => { + let mut result = vec![]; + result.push(path.to_string()); + if let Some(files) = files { + for file in files { + result.append(&mut file.flatten()); + } + } + result + } + } + } } impl Editor { diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 4b48a8b0..f9e6e997 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -442,7 +442,47 @@ impl Editor { /// Handle key event pub fn handle_key_event(&mut self, modifiers: KMod, code: KCode) -> Result<()> { - if self.try_doc().is_some() { + let in_file_tree = matches!( + self.files.get_raw(self.ptr.clone()), + Some(FileLayout::FileTree) + ); + if in_file_tree { + // File tree key behaviour + match (modifiers, code) { + (KMod::NONE, KCode::Up) => { + if let Some(ref mut fts) = self.render_cache.file_tree_selection { + // Move up a file (in the render cache) + *fts = fts.saturating_sub(1); + // Move up a file (in the backend) + let flat = self + .file_tree + .as_ref() + .map(FileTree::flatten) + .unwrap_or_default(); + let new_path = flat.get(*fts); + self.file_tree_selection = new_path.cloned(); + } + } + (KMod::NONE, KCode::Down) => { + if let Some(ref mut fts) = self.render_cache.file_tree_selection { + let flat = self + .file_tree + .as_ref() + .map(FileTree::flatten) + .unwrap_or_default(); + if *fts + 1 < flat.len() { + // Move up a file (in the render cache) + *fts += 1; + // Move up a file (in the backend) + let new_path = flat.get(*fts); + self.file_tree_selection = new_path.cloned(); + } + } + } + _ => (), + } + } else { + // Non file tree behaviour // Check period of inactivity let end = Instant::now(); let inactivity = end.duration_since(self.last_active).as_millis() as usize; From cef48ce8975310ba1f313cec8f8ff06a956c1baf Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:31:57 +0000 Subject: [PATCH 12/51] Small refactor, better focusing --- src/config/editor.rs | 8 ++++- src/editor/filetree.rs | 68 ++++++++++++++++++++++++++++++++++++++++-- src/editor/mod.rs | 33 ++------------------ 3 files changed, 76 insertions(+), 33 deletions(-) diff --git a/src/config/editor.rs b/src/config/editor.rs index c8f15622..3fc667e7 100644 --- a/src/config/editor.rs +++ b/src/config/editor.rs @@ -660,7 +660,13 @@ impl LuaUserData for Editor { Ok(()) }); methods.add_method_mut("focus_split_left", |_, editor, ()| { - editor.ptr = FileLayout::move_left(editor.ptr.clone(), &editor.render_cache.span); + let new_ptr = FileLayout::move_left(editor.ptr.clone(), &editor.render_cache.span); + if matches!(editor.files.get_raw(new_ptr.clone()), Some(FileLayout::FileTree)) { + // We just entered into a file tree, cache where we were (minus the file tree itself) + editor.old_ptr = editor.ptr.clone(); + editor.old_ptr.pop(); + } + editor.ptr = new_ptr; Ok(()) }); methods.add_method_mut("focus_split_right", |_, editor, ()| { diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 0ffc6dbd..9a332bb7 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -4,6 +4,7 @@ use crate::{Editor, OxError, Result}; use kaolinite::utils::{get_cwd, get_file_name}; use std::path::{Path, PathBuf}; +/// The backend of a file tree - stores the structure of the files and directories #[derive(Debug)] pub enum FileTree { /// Represents a file @@ -304,6 +305,7 @@ impl Editor { /// Close the file tree pub fn close_file_tree(&mut self) { if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { + let in_file_tree = matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)); // Locate where the file tree is let ftp = layouts .iter() @@ -318,8 +320,14 @@ impl Editor { self.files = layouts[0].0.clone(); } } - // Reset pointer back to what it used to be - self.ptr = self.old_ptr.clone(); + // Reset pointer back to what it used to be IF we're in the file tree + if in_file_tree { + self.ptr = self.old_ptr.clone(); + } else if !self.ptr.is_empty() { + // If we're outside the file tree + // just take the existing pointer and remove file tree aspect + self.ptr.remove(0); + } } } } @@ -343,4 +351,60 @@ impl Editor { false } } + + /// Move file tree selection upwards + pub fn file_tree_select_up(&mut self) { + if let Some(ref mut fts) = self.render_cache.file_tree_selection { + // Move up a file (in the render cache) + *fts = fts.saturating_sub(1); + // Move up a file (in the backend) + let flat = self + .file_tree + .as_ref() + .map(FileTree::flatten) + .unwrap_or_default(); + let new_path = flat.get(*fts); + self.file_tree_selection = new_path.cloned(); + } + } + + /// Move file tree selection upwards + pub fn file_tree_select_down(&mut self) { + if let Some(ref mut fts) = self.render_cache.file_tree_selection { + let flat = self + .file_tree + .as_ref() + .map(FileTree::flatten) + .unwrap_or_default(); + if *fts + 1 < flat.len() { + // Move up a file (in the render cache) + *fts += 1; + // Move up a file (in the backend) + let new_path = flat.get(*fts); + self.file_tree_selection = new_path.cloned(); + } + } + } + + /// Open a file from the file tree + pub fn file_tree_open_file(&mut self) -> Result<()> { + // Default behaviour is open a file in the background and return to file tree + if let Some(file_name) = &self.file_tree_selection.clone() { + // Quickly restore to old pointer + let mut temp = self.old_ptr.clone(); + if let Some(part) = temp.get_mut(0) { + *part += 1; + } else { + temp = vec![1]; + } + std::mem::swap(&mut temp, &mut self.ptr); + // Perform open operation + self.open(file_name)?; + self.next(); + self.update_cwd(); + // Restore old pointer + std::mem::swap(&mut temp, &mut self.ptr); + } + Ok(()) + } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index f9e6e997..e21c25e3 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -449,36 +449,9 @@ impl Editor { if in_file_tree { // File tree key behaviour match (modifiers, code) { - (KMod::NONE, KCode::Up) => { - if let Some(ref mut fts) = self.render_cache.file_tree_selection { - // Move up a file (in the render cache) - *fts = fts.saturating_sub(1); - // Move up a file (in the backend) - let flat = self - .file_tree - .as_ref() - .map(FileTree::flatten) - .unwrap_or_default(); - let new_path = flat.get(*fts); - self.file_tree_selection = new_path.cloned(); - } - } - (KMod::NONE, KCode::Down) => { - if let Some(ref mut fts) = self.render_cache.file_tree_selection { - let flat = self - .file_tree - .as_ref() - .map(FileTree::flatten) - .unwrap_or_default(); - if *fts + 1 < flat.len() { - // Move up a file (in the render cache) - *fts += 1; - // Move up a file (in the backend) - let new_path = flat.get(*fts); - self.file_tree_selection = new_path.cloned(); - } - } - } + (KMod::NONE, KCode::Up) => self.file_tree_select_up(), + (KMod::NONE, KCode::Down) => self.file_tree_select_down(), + (KMod::NONE, KCode::Enter) => self.file_tree_open_file()?, _ => (), } } else { From c31cf0402349c8b4f17e4b2f921a574263e0893b Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:33:27 +0000 Subject: [PATCH 13/51] rustfmt --- src/config/editor.rs | 6 +++++- src/editor/filetree.rs | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/config/editor.rs b/src/config/editor.rs index 3fc667e7..12e340a1 100644 --- a/src/config/editor.rs +++ b/src/config/editor.rs @@ -661,7 +661,11 @@ impl LuaUserData for Editor { }); methods.add_method_mut("focus_split_left", |_, editor, ()| { let new_ptr = FileLayout::move_left(editor.ptr.clone(), &editor.render_cache.span); - if matches!(editor.files.get_raw(new_ptr.clone()), Some(FileLayout::FileTree)) { + let in_file_tree = matches!( + editor.files.get_raw(new_ptr.clone()), + Some(FileLayout::FileTree) + ); + if in_file_tree { // We just entered into a file tree, cache where we were (minus the file tree itself) editor.old_ptr = editor.ptr.clone(); editor.old_ptr.pop(); diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 9a332bb7..73bda788 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -305,7 +305,10 @@ impl Editor { /// Close the file tree pub fn close_file_tree(&mut self) { if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { - let in_file_tree = matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)); + let in_file_tree = matches!( + self.files.get_raw(self.ptr.clone()), + Some(FileLayout::FileTree) + ); // Locate where the file tree is let ftp = layouts .iter() From df6ae220d24bf2d5139bbcd13809969cba9282cc Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:58:17 +0000 Subject: [PATCH 14/51] Improved opening files from the file tree --- src/editor/filetree.rs | 17 ++++------------- src/editor/mod.rs | 12 ++++++++---- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 73bda788..173da67b 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -305,10 +305,7 @@ impl Editor { /// Close the file tree pub fn close_file_tree(&mut self) { if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { - let in_file_tree = matches!( - self.files.get_raw(self.ptr.clone()), - Some(FileLayout::FileTree) - ); + let in_file_tree = matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)); // Locate where the file tree is let ftp = layouts .iter() @@ -393,20 +390,14 @@ impl Editor { pub fn file_tree_open_file(&mut self) -> Result<()> { // Default behaviour is open a file in the background and return to file tree if let Some(file_name) = &self.file_tree_selection.clone() { - // Quickly restore to old pointer + // Restore to old pointer to open let mut temp = self.old_ptr.clone(); - if let Some(part) = temp.get_mut(0) { - *part += 1; - } else { - temp = vec![1]; - } - std::mem::swap(&mut temp, &mut self.ptr); + temp.insert(0, 1); + self.ptr = temp; // Perform open operation self.open(file_name)?; self.next(); self.update_cwd(); - // Restore old pointer - std::mem::swap(&mut temp, &mut self.ptr); } Ok(()) } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index e21c25e3..2845e95d 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -326,6 +326,7 @@ impl Editor { pub fn quit(&mut self) -> Result<()> { // Get the atom we're currently at if let Some((fcs, ptr)) = self.files.get_atom(self.ptr.clone()) { + let last_file = fcs.len() == 1; // Remove the file that is currently open and selected let msg = "This document isn't saved, press Ctrl + Q to force quit or Esc to cancel"; let doc = &fcs[ptr].doc; @@ -334,10 +335,13 @@ impl Editor { fcs.remove(*ptr); self.prev(); } - // Clean up the file structure - self.files.clean_up(); - // Find a new pointer position - self.ptr = self.files.new_pointer_position(&self.ptr); + // Perform cleanup / pointer reassignment if this atom is now empty + if last_file { + // Clean up the file structure + self.files.clean_up(); + // Find a new pointer position + self.ptr = self.files.new_pointer_position(&self.ptr); + } } // If there are no longer any active atoms, quit the entire editor self.active = !matches!(self.files, FileLayout::None); From 4446a4da6b9259aeb5dac533517473a1aa3d759a Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:05:53 +0000 Subject: [PATCH 15/51] Fixed error with handling event errors --- src/editor/filetree.rs | 5 ++++- src/main.rs | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 173da67b..c370cffe 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -305,7 +305,10 @@ impl Editor { /// Close the file tree pub fn close_file_tree(&mut self) { if let Some(FileLayout::SideBySide(layouts)) = self.files.get_raw(vec![]) { - let in_file_tree = matches!(self.files.get_raw(self.ptr.clone()), Some(FileLayout::FileTree)); + let in_file_tree = matches!( + self.files.get_raw(self.ptr.clone()), + Some(FileLayout::FileTree) + ); // Locate where the file tree is let ftp = layouts .iter() diff --git a/src/main.rs b/src/main.rs index c397ff55..b0d856be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -246,8 +246,14 @@ fn handle_event(editor: &AnyUserData, event: &CEvent, lua: &Lua) -> Result<()> { } // Actually handle editor event (errors included) - if let Err(err) = ged!(mut &editor).handle_event(lua, event.clone()) { - ged!(mut &editor).feedback = Feedback::Error(format!("{err:?}")); + let event_result = ged!(mut &editor).handle_event(lua, event.clone()); + if let Err(err) = event_result { + // Nicely display error to user + match err { + OxError::Lua(err) => handle_lua_error("event", Err(err), &mut ged!(mut &editor).feedback), + OxError::AlreadyOpen { file } => ged!(mut &editor).feedback = Feedback::Error(format!("File '{file}' is already open")), + _ => ged!(mut &editor).feedback = Feedback::Error(format!("{err:?}")), + } } // Handle paste event (after event) From 46ae6f8e44caf65426891d84f0ac8802dafaf3fd Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:18:26 +0000 Subject: [PATCH 16/51] Directory expansion --- src/editor/filetree.rs | 32 +++++++++++++++++++++++++++++++- src/editor/mod.rs | 2 +- src/main.rs | 9 +++++++-- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index c370cffe..987aaa32 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,7 +1,7 @@ /// Utilities for handling the file tree use crate::editor::FileLayout; use crate::{Editor, OxError, Result}; -use kaolinite::utils::{get_cwd, get_file_name}; +use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; /// The backend of a file tree - stores the structure of the files and directories @@ -389,6 +389,18 @@ impl Editor { } } + /// Open a certain file / directory in a file tree + pub fn file_tree_open_node(&mut self) -> Result<()> { + if let Some(file_name) = &self.file_tree_selection.clone() { + match file_or_dir(file_name) { + "file" => self.file_tree_open_file()?, + "directory" => self.file_tree_toggle_dir(), + _ => (), + } + } + Ok(()) + } + /// Open a file from the file tree pub fn file_tree_open_file(&mut self) -> Result<()> { // Default behaviour is open a file in the background and return to file tree @@ -404,4 +416,22 @@ impl Editor { } Ok(()) } + + pub fn file_tree_toggle_dir(&mut self) { + if let Some(ref mut file_tree) = &mut self.file_tree { + if let Some(file_name) = self.file_tree_selection.as_ref() { + if let Some(node) = file_tree.get_mut(file_name) { + if let FileTree::Dir { files, .. } = node { + if files.is_some() { + // Clear expansion if already expanded + *files = None; + } else { + // Expand if not already expanded + node.expand(); + } + } + } + } + } + } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 2845e95d..06f7e7a3 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -455,7 +455,7 @@ impl Editor { match (modifiers, code) { (KMod::NONE, KCode::Up) => self.file_tree_select_up(), (KMod::NONE, KCode::Down) => self.file_tree_select_down(), - (KMod::NONE, KCode::Enter) => self.file_tree_open_file()?, + (KMod::NONE, KCode::Enter) => self.file_tree_open_node()?, _ => (), } } else { diff --git a/src/main.rs b/src/main.rs index b0d856be..a1e0a430 100644 --- a/src/main.rs +++ b/src/main.rs @@ -250,8 +250,13 @@ fn handle_event(editor: &AnyUserData, event: &CEvent, lua: &Lua) -> Result<()> { if let Err(err) = event_result { // Nicely display error to user match err { - OxError::Lua(err) => handle_lua_error("event", Err(err), &mut ged!(mut &editor).feedback), - OxError::AlreadyOpen { file } => ged!(mut &editor).feedback = Feedback::Error(format!("File '{file}' is already open")), + OxError::Lua(err) => { + handle_lua_error("event", Err(err), &mut ged!(mut &editor).feedback) + } + OxError::AlreadyOpen { file } => { + ged!(mut &editor).feedback = + Feedback::Error(format!("File '{file}' is already open")) + } _ => ged!(mut &editor).feedback = Feedback::Error(format!("{err:?}")), } } From 5de99a415e3b3666e9e296c082865ab6ddd8dbe2 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:14:55 +0000 Subject: [PATCH 17/51] Added configuration options for file tree --- config/.oxrc | 10 ++++++++++ src/config/colors.rs | 30 ++++++++++++++++++++++++++++-- src/config/filetree.rs | 39 +++++++++++++++++++++++++++++++++++++++ src/config/mod.rs | 9 +++++++++ src/editor/filetree.rs | 22 ++++++++++++++++------ src/editor/interface.rs | 16 ++++++++++------ src/main.rs | 4 ++-- 7 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 src/config/filetree.rs diff --git a/config/.oxrc b/config/.oxrc index e162c703..6c1bf2a6 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -405,6 +405,11 @@ colors.error_bg = {41, 41, 61} colors.selection_fg = {255, 255, 255} colors.selection_bg = {59, 59, 130} +colors.file_tree_bg = {41, 41, 61} +colors.file_tree_fg = {255, 255, 255} +colors.file_tree_selection_fg = {255, 255, 255} +colors.file_tree_selection_bg = {59, 59, 130} + -- Configure Line Numbers -- line_numbers.enabled = true line_numbers.padding_left = 1 @@ -414,6 +419,11 @@ line_numbers.padding_right = 1 terminal.mouse_enabled = true terminal.scroll_amount = 4 +-- Configure File Tree -- +file_tree.width = 0.2 +file_tree.move_focus_to_file = true +file_tree.icons = true + -- Configure Tab Line -- tab_line.enabled = true tab_line.separators = true diff --git a/src/config/colors.rs b/src/config/colors.rs index 4f909abb..e020dae4 100644 --- a/src/config/colors.rs +++ b/src/config/colors.rs @@ -36,6 +36,11 @@ pub struct Colors { pub selection_fg: Color, pub selection_bg: Color, + + pub file_tree_fg: Color, + pub file_tree_bg: Color, + pub file_tree_selection_fg: Color, + pub file_tree_selection_bg: Color, } impl Default for Colors { @@ -67,8 +72,13 @@ impl Default for Colors { error_bg: Color::Rgb(41, 41, 61), error_fg: Color::Rgb(255, 100, 100), - selection_fg: Color::Rgb(41, 41, 61), - selection_bg: Color::Rgb(41, 41, 61), + selection_fg: Color::Rgb(255, 255, 255), + selection_bg: Color::Rgb(59, 59, 130), + + file_tree_bg: Color::Rgb(41, 41, 61), + file_tree_fg: Color::Rgb(255, 255, 255), + file_tree_selection_bg: Color::Rgb(59, 59, 130), + file_tree_selection_fg: Color::Rgb(255, 255, 255), } } } @@ -197,6 +207,22 @@ impl LuaUserData for Colors { this.selection_bg = Color::from_lua(value); Ok(()) }); + fields.add_field_method_set("file_tree_bg", |_, this, value| { + this.file_tree_bg = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_fg", |_, this, value| { + this.file_tree_fg = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_selection_bg", |_, this, value| { + this.file_tree_selection_bg = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_selection_fg", |_, this, value| { + this.file_tree_selection_fg = Color::from_lua(value); + Ok(()) + }); } } diff --git a/src/config/filetree.rs b/src/config/filetree.rs new file mode 100644 index 00000000..83778c85 --- /dev/null +++ b/src/config/filetree.rs @@ -0,0 +1,39 @@ +/// Related to file tree configuration options +use mlua::prelude::*; + +#[derive(Debug)] +pub struct FileTree { + pub width: f64, + pub move_focus_to_file: bool, + pub icons: bool, +} + +impl Default for FileTree { + fn default() -> Self { + Self { + width: 0.2, + move_focus_to_file: true, + icons: false, + } + } +} + +impl LuaUserData for FileTree { + fn add_fields>(fields: &mut F) { + fields.add_field_method_get("width", |_, this| Ok(this.width)); + fields.add_field_method_set("width", |_, this, value| { + this.width = value; + Ok(()) + }); + fields.add_field_method_get("move_focus_to_file", |_, this| Ok(this.move_focus_to_file)); + fields.add_field_method_set("move_focus_to_file", |_, this, value| { + this.move_focus_to_file = value; + Ok(()) + }); + fields.add_field_method_get("icons", |_, this| Ok(this.icons)); + fields.add_field_method_set("icons", |_, this, value| { + this.icons = value; + Ok(()) + }); + } +} diff --git a/src/config/mod.rs b/src/config/mod.rs index 380d8315..a92e3b4d 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -8,6 +8,7 @@ use std::sync::{Arc, Mutex}; mod assistant; mod colors; mod editor; +mod filetree; mod highlighting; mod interface; mod keys; @@ -15,6 +16,7 @@ mod tasks; pub use assistant::Assistant; pub use colors::{Color, Colors}; +pub use filetree::FileTree; pub use highlighting::SyntaxHighlighting; pub use interface::{GreetingMessage, HelpMessage, LineNumbers, StatusLine, TabLine, Terminal}; pub use keys::{get_listeners, key_to_string, run_key, run_key_before}; @@ -82,6 +84,9 @@ macro_rules! config { .borrow::<$crate::config::HelpMessage>() .unwrap() }; + ($cfg:expr, file_tree) => { + $cfg.file_tree.borrow::<$crate::config::FileTree>().unwrap() + }; ($cfg:expr, terminal) => { $cfg.terminal.borrow::<$crate::config::Terminal>().unwrap() }; @@ -97,6 +102,7 @@ pub struct Config { pub tab_line: LuaAnyUserData, pub greeting_message: LuaAnyUserData, pub help_message: LuaAnyUserData, + pub file_tree: LuaAnyUserData, pub terminal: LuaAnyUserData, pub document: LuaAnyUserData, pub task_manager: Arc>, @@ -113,6 +119,7 @@ impl Config { let colors = lua.create_userdata(Colors::default())?; let status_line = lua.create_userdata(StatusLine::default())?; let tab_line = lua.create_userdata(TabLine::default())?; + let file_tree = lua.create_userdata(FileTree::default())?; let terminal = lua.create_userdata(Terminal::default())?; let document = lua.create_userdata(Document::default())?; @@ -132,6 +139,7 @@ impl Config { lua.globals().set("help_message", help_message.clone())?; lua.globals().set("status_line", status_line.clone())?; lua.globals().set("tab_line", tab_line.clone())?; + lua.globals().set("file_tree", file_tree.clone())?; lua.globals().set("colors", colors.clone())?; lua.globals().set("terminal", terminal.clone())?; lua.globals().set("document", document.clone())?; @@ -178,6 +186,7 @@ impl Config { tab_line, greeting_message, help_message, + file_tree, terminal, document, task_manager, diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 987aaa32..d394cb7b 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,6 @@ /// Utilities for handling the file tree use crate::editor::FileLayout; -use crate::{Editor, OxError, Result}; +use crate::{config, Editor, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; @@ -272,6 +272,10 @@ impl Editor { #[allow(clippy::cast_precision_loss)] pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { + // Calculate display proportions + let width = config!(self.config, file_tree).width; + let other = if width <= 1.0 { 1.0 - width } else { 0.0 }; + // Set up file tree values self.old_ptr = self.ptr.clone(); if let Some(cwd) = get_cwd() { if let Ok(ft) = FileTree::build(&cwd) { @@ -282,7 +286,7 @@ impl Editor { // Wrap existing file layout in new file layout if let FileLayout::SideBySide(ref mut layouts) = &mut self.files { // Shrink existing splits - let redistribute = 0.2 / layouts.len() as f64; + let redistribute = width / layouts.len() as f64; for (_, prop) in &mut *layouts { if *prop >= redistribute { *prop -= redistribute; @@ -291,11 +295,11 @@ impl Editor { } } // Insert file tree - layouts.insert(0, (FileLayout::FileTree, 0.2)); + layouts.insert(0, (FileLayout::FileTree, width)); } else { self.files = FileLayout::SideBySide(vec![ - (FileLayout::FileTree, 0.2), - (self.files.clone(), 0.8), + (FileLayout::FileTree, width), + (self.files.clone(), other), ]); } self.ptr = vec![0]; @@ -403,9 +407,11 @@ impl Editor { /// Open a file from the file tree pub fn file_tree_open_file(&mut self) -> Result<()> { - // Default behaviour is open a file in the background and return to file tree + // Work out how to behave when opening files + let move_focus = config!(self.config, file_tree).move_focus_to_file; if let Some(file_name) = &self.file_tree_selection.clone() { // Restore to old pointer to open + let ptr_cache = self.ptr.clone(); let mut temp = self.old_ptr.clone(); temp.insert(0, 1); self.ptr = temp; @@ -413,6 +419,10 @@ impl Editor { self.open(file_name)?; self.next(); self.update_cwd(); + // If we don't want to move focus, then move focus back to the file tree + if !move_focus { + self.ptr = ptr_cache; + } } Ok(()) } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index c2f63550..190b90d8 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -547,10 +547,14 @@ impl Editor { /// Render a line in the file tree #[allow(clippy::similar_names)] fn render_file_tree(&mut self, y: usize, length: usize) -> Result { - let editor_bg = Bg(config!(self.config, colors).editor_bg.to_color()?); - let editor_fg = Fg(config!(self.config, colors).editor_fg.to_color()?); - let selection_bg = Bg(config!(self.config, colors).selection_bg.to_color()?); - let selection_fg = Fg(config!(self.config, colors).selection_fg.to_color()?); + let ft_bg = Bg(config!(self.config, colors).file_tree_bg.to_color()?); + let ft_fg = Fg(config!(self.config, colors).file_tree_fg.to_color()?); + let ft_selection_bg = Bg(config!(self.config, colors) + .file_tree_selection_bg + .to_color()?); + let ft_selection_fg = Fg(config!(self.config, colors) + .file_tree_selection_fg + .to_color()?); // Work out which line to use let line = self .render_cache @@ -578,9 +582,9 @@ impl Editor { result += &" ".repeat(available); // Return result if self.render_cache.file_tree_selection == Some(y) { - Ok(format!("{selection_bg}{selection_fg}{result}")) + Ok(format!("{ft_selection_bg}{ft_selection_fg}{result}")) } else { - Ok(format!("{editor_bg}{editor_fg}{result}")) + Ok(format!("{ft_bg}{ft_fg}{result}")) } } diff --git a/src/main.rs b/src/main.rs index a1e0a430..79025a2c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -251,11 +251,11 @@ fn handle_event(editor: &AnyUserData, event: &CEvent, lua: &Lua) -> Result<()> { // Nicely display error to user match err { OxError::Lua(err) => { - handle_lua_error("event", Err(err), &mut ged!(mut &editor).feedback) + handle_lua_error("event", Err(err), &mut ged!(mut &editor).feedback); } OxError::AlreadyOpen { file } => { ged!(mut &editor).feedback = - Feedback::Error(format!("File '{file}' is already open")) + Feedback::Error(format!("File '{file}' is already open")); } _ => ged!(mut &editor).feedback = Feedback::Error(format!("{err:?}")), } From c21359a4fec968b324b4a5ab79d5a0c02a6ed446 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:32:53 +0000 Subject: [PATCH 18/51] Added nice file tree colour schemes to all themes --- plugins/themes/default16.lua | 5 +++++ plugins/themes/galaxy.lua | 5 +++++ plugins/themes/omni.lua | 5 +++++ plugins/themes/transparent.lua | 4 ++++ plugins/themes/tropical.lua | 5 +++++ 5 files changed, 24 insertions(+) diff --git a/plugins/themes/default16.lua b/plugins/themes/default16.lua index 7058b2b9..8b686f2b 100644 --- a/plugins/themes/default16.lua +++ b/plugins/themes/default16.lua @@ -48,6 +48,11 @@ colors.error_fg = red colors.selection_bg = darkgrey colors.selection_fg = cyan +colors.file_tree_bg = black +colors.file_tree_fg = white +colors.file_tree_selection_bg = darkgrey +colors.file_tree_selection_fg = cyan + -- Configure Syntax Highlighting Colours -- syntax:set("string", green) -- Strings, bright green syntax:set("comment", darkgrey) -- Comments, light purple/gray diff --git a/plugins/themes/galaxy.lua b/plugins/themes/galaxy.lua index 0b568f3b..fc8035d3 100644 --- a/plugins/themes/galaxy.lua +++ b/plugins/themes/galaxy.lua @@ -44,6 +44,11 @@ colors.error_fg = red colors.selection_bg = grey1 colors.selection_fg = lightblue +colors.file_tree_bg = black +colors.file_tree_fg = white +colors.file_tree_selection_bg = purple +colors.file_tree_selection_fg = black + -- Configure Syntax Highlighting Colours -- syntax:set("string", green) -- Strings, bright green syntax:set("comment", grey3) -- Comments, light purple/gray diff --git a/plugins/themes/omni.lua b/plugins/themes/omni.lua index 9ba09f4f..6f4244e4 100644 --- a/plugins/themes/omni.lua +++ b/plugins/themes/omni.lua @@ -44,6 +44,11 @@ colors.error_fg = red colors.selection_bg = selection colors.selection_fg = foreground +colors.file_tree_bg = background +colors.file_tree_fg = foreground +colors.file_tree_selection_bg = pink +colors.file_tree_selection_fg = background + -- Configure Syntax Highlighting Colours -- syntax:set("string", yellow) -- Strings, fresh green syntax:set("comment", comment) -- Comments, muted and subtle diff --git a/plugins/themes/transparent.lua b/plugins/themes/transparent.lua index c67ec8ce..91961880 100644 --- a/plugins/themes/transparent.lua +++ b/plugins/themes/transparent.lua @@ -9,3 +9,7 @@ colors.split_fg = 15 colors.info_bg = 'transparent' colors.warning_bg = 'transparent' colors.error_bg = 'transparent' + +colors.file_tree_bg = 'transparent' +colors.file_tree_selection_fg = {35, 240, 144} +colors.file_tree_selection_bg = 'transparent' diff --git a/plugins/themes/tropical.lua b/plugins/themes/tropical.lua index aaa9b182..38c48cb9 100644 --- a/plugins/themes/tropical.lua +++ b/plugins/themes/tropical.lua @@ -44,6 +44,11 @@ colors.error_fg = red colors.selection_bg = grey1 colors.selection_fg = lightblue +colors.file_tree_bg = black +colors.file_tree_fg = white +colors.file_tree_selection_bg = lightblue +colors.file_tree_selection_fg = black + -- Configure Syntax Highlighting Colours -- syntax:set("string", lightblue) -- Strings, bright green syntax:set("comment", grey3) -- Comments, light purple/gray From 953eeef69c9dc81ff9967330945969928afe976d Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 18:03:17 +0000 Subject: [PATCH 19/51] Added language-specific icons --- src/editor/filetree.rs | 34 ++++++++++++++++++++++------------ src/editor/filetypes.rs | 13 +++++++++++++ src/editor/interface.rs | 3 ++- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index d394cb7b..1802ca05 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,6 @@ /// Utilities for handling the file tree use crate::editor::FileLayout; -use crate::{config, Editor, OxError, Result}; +use crate::{config, Editor, OxError, Result, FileTypes}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; @@ -173,8 +173,16 @@ impl FileTree { get_file_name(path).is_some_and(|name| name.starts_with('.')) } + /// Get a language-related icon for this node + fn lang_icon(&self, fts: &FileTypes) -> Option { + let path = match self { + Self::File { path } | Self::Dir { path, .. } => path, + }; + fts.identify_from_path(path).map(|ft| ft.icon + " ") + } + /// Get the appropriate icon - fn icon(&self) -> &str { + fn icon(&self, fts: &FileTypes) -> String { let is_file = match self { Self::File { .. } => true, Self::Dir { .. } => false, @@ -184,15 +192,17 @@ impl FileTree { Self::Dir { files, .. } => files.is_some(), }; let is_hidden = self.is_hidden(); - match (is_file, is_hidden, is_expanded) { + match (self.lang_icon(fts), is_file, is_hidden, is_expanded) { + // Language specific icons + (Some(icon), _, _, _) => icon, // Closed folders - (false, false, false) => "󰉖 ", - (false, true, false) => "󱞞 ", + (_, false, false, false) => "󰉖 ".to_string(), + (_, false, true, false) => "󱞞 ".to_string(), // Opened folders - (false, _, true) => "󰷏 ", + (_, false, _, true) => "󰷏 ".to_string(), // Files - (true, false, _) => "󰈤 ", - (true, true, _) => "󰘓 ", + (_, true, false, _) => "󰈤 ".to_string(), + (_, true, true, _) => "󰘓 ".to_string(), } } @@ -204,12 +214,12 @@ impl FileTree { } /// Display this file tree - pub fn display(&self, selection: &str) -> (Vec, Option) { + pub fn display(&self, selection: &str, fts: &FileTypes) -> (Vec, Option) { match self { Self::File { path } => ( vec![format!( "{}{}", - self.icon(), + self.icon(fts), get_file_name(path).unwrap_or(path.to_string()) )], if self.is_selected(selection) { @@ -224,7 +234,7 @@ impl FileTree { // Write self result.push(format!( "{}{}", - self.icon(), + self.icon(fts), get_file_name(path).unwrap_or(path.to_string()) )); if self.is_selected(selection) { @@ -233,7 +243,7 @@ impl FileTree { // Write child nodes if let Some(files) = files { for file in files { - let (sub_display, sub_at) = file.display(selection); + let (sub_display, sub_at) = file.display(selection, fts); for (c, s) in sub_display.iter().enumerate() { result.push(format!(" {s}")); if let Some(sub_at) = sub_at { diff --git a/src/editor/filetypes.rs b/src/editor/filetypes.rs index 98ca4011..9e440b54 100644 --- a/src/editor/filetypes.rs +++ b/src/editor/filetypes.rs @@ -33,6 +33,19 @@ impl FileTypes { None } + pub fn identify_from_path(&self, path: &str) -> Option { + if let Some(e) = Path::new(&path).extension() { + let file_name = get_file_name(path).unwrap_or_default(); + let extension = e.to_str().unwrap_or_default().to_string(); + for t in &self.types { + if t.fits(&extension, &file_name, "") { + return Some(t.clone()); + } + } + } + None + } + pub fn get_name(&self, name: &str) -> Option { self.types.iter().find(|t| t.name == name).cloned() } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 190b90d8..b85657e1 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -54,9 +54,10 @@ impl Editor { let help_end = help_start + help_length; self.render_cache.help_message_span = help_start..help_end + 1; // Calculate file tree display representation + let fts = &config!(self.config, document).file_types; if let Some(file_tree) = self.file_tree.as_ref() { let (files, sel) = - file_tree.display(self.file_tree_selection.as_ref().unwrap_or(&String::new())); + file_tree.display(self.file_tree_selection.as_ref().unwrap_or(&String::new()), fts); self.render_cache.file_tree = files; self.render_cache.file_tree_selection = sel; } From 50d0259461747ad37d85b84c8c04493574749a08 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 18:14:58 +0000 Subject: [PATCH 20/51] Configuration option for icons and language icons --- config/.oxrc | 3 ++- src/config/filetree.rs | 7 +++++++ src/editor/filetree.rs | 46 +++++++++++++++++++++++++---------------- src/editor/interface.rs | 8 +++++-- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/config/.oxrc b/config/.oxrc index 6c1bf2a6..a8add456 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -422,7 +422,8 @@ terminal.scroll_amount = 4 -- Configure File Tree -- file_tree.width = 0.2 file_tree.move_focus_to_file = true -file_tree.icons = true +file_tree.icons = false +file_tree.language_icons = true -- Configure Tab Line -- tab_line.enabled = true diff --git a/src/config/filetree.rs b/src/config/filetree.rs index 83778c85..6401d2f9 100644 --- a/src/config/filetree.rs +++ b/src/config/filetree.rs @@ -6,6 +6,7 @@ pub struct FileTree { pub width: f64, pub move_focus_to_file: bool, pub icons: bool, + pub language_icons: bool, } impl Default for FileTree { @@ -14,6 +15,7 @@ impl Default for FileTree { width: 0.2, move_focus_to_file: true, icons: false, + language_icons: true, } } } @@ -35,5 +37,10 @@ impl LuaUserData for FileTree { this.icons = value; Ok(()) }); + fields.add_field_method_get("language_icons", |_, this| Ok(this.language_icons)); + fields.add_field_method_set("language_icons", |_, this, value| { + this.language_icons = value; + Ok(()) + }); } } diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 1802ca05..0806de4f 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,7 @@ +use crate::config::FileTree as CfgFT; /// Utilities for handling the file tree use crate::editor::FileLayout; -use crate::{config, Editor, OxError, Result, FileTypes}; +use crate::{config, Editor, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; @@ -174,15 +175,19 @@ impl FileTree { } /// Get a language-related icon for this node - fn lang_icon(&self, fts: &FileTypes) -> Option { - let path = match self { - Self::File { path } | Self::Dir { path, .. } => path, - }; - fts.identify_from_path(path).map(|ft| ft.icon + " ") + fn lang_icon(&self, fts: &FileTypes, config: &CfgFT) -> Option { + if config.language_icons { + let path = match self { + Self::File { path } | Self::Dir { path, .. } => path, + }; + fts.identify_from_path(path).map(|ft| ft.icon + " ") + } else { + None + } } /// Get the appropriate icon - fn icon(&self, fts: &FileTypes) -> String { + fn icon(&self, fts: &FileTypes, config: &CfgFT) -> String { let is_file = match self { Self::File { .. } => true, Self::Dir { .. } => false, @@ -192,7 +197,7 @@ impl FileTree { Self::Dir { files, .. } => files.is_some(), }; let is_hidden = self.is_hidden(); - match (self.lang_icon(fts), is_file, is_hidden, is_expanded) { + match (self.lang_icon(fts, config), is_file, is_hidden, is_expanded) { // Language specific icons (Some(icon), _, _, _) => icon, // Closed folders @@ -214,19 +219,20 @@ impl FileTree { } /// Display this file tree - pub fn display(&self, selection: &str, fts: &FileTypes) -> (Vec, Option) { + pub fn display(&self, sel: &str, fts: &FileTypes, cfg: &CfgFT) -> (Vec, Option) { + let icons = cfg.icons; match self { Self::File { path } => ( vec![format!( "{}{}", - self.icon(fts), + if icons { + self.icon(fts, cfg) + } else { + String::new() + }, get_file_name(path).unwrap_or(path.to_string()) )], - if self.is_selected(selection) { - Some(0) - } else { - None - }, + if self.is_selected(sel) { Some(0) } else { None }, ), Self::Dir { path, files } => { let mut result = vec![]; @@ -234,16 +240,20 @@ impl FileTree { // Write self result.push(format!( "{}{}", - self.icon(fts), + if icons { + self.icon(fts, cfg) + } else { + String::new() + }, get_file_name(path).unwrap_or(path.to_string()) )); - if self.is_selected(selection) { + if self.is_selected(sel) { at = Some(result.len().saturating_sub(1)); } // Write child nodes if let Some(files) = files { for file in files { - let (sub_display, sub_at) = file.display(selection, fts); + let (sub_display, sub_at) = file.display(sel, fts, cfg); for (c, s) in sub_display.iter().enumerate() { result.push(format!(" {s}")); if let Some(sub_at) = sub_at { diff --git a/src/editor/interface.rs b/src/editor/interface.rs index b85657e1..cd667336 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -55,9 +55,13 @@ impl Editor { self.render_cache.help_message_span = help_start..help_end + 1; // Calculate file tree display representation let fts = &config!(self.config, document).file_types; + let ft_config = &config!(self.config, file_tree); if let Some(file_tree) = self.file_tree.as_ref() { - let (files, sel) = - file_tree.display(self.file_tree_selection.as_ref().unwrap_or(&String::new()), fts); + let (files, sel) = file_tree.display( + self.file_tree_selection.as_ref().unwrap_or(&String::new()), + fts, + ft_config, + ); self.render_cache.file_tree = files; self.render_cache.file_tree_selection = sel; } From 2ef35469d5f7e85890d130e6417dfaab13b6a738 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 18:46:22 +0000 Subject: [PATCH 21/51] Added file tree icon options to configuration assistant --- src/config/assistant.rs | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/config/assistant.rs b/src/config/assistant.rs index 2ff3565b..f5494ab0 100644 --- a/src/config/assistant.rs +++ b/src/config/assistant.rs @@ -176,6 +176,8 @@ pub struct Assistant { pub tab_line: bool, pub tab_line_sep: bool, pub greeting_message: bool, + pub file_tree_icons: bool, + pub file_tree_language_icons: bool, pub plugins: Vec, } @@ -195,6 +197,9 @@ impl Default for Assistant { tab_line_sep: true, // Greeting Message greeting_message: true, + // File Tree + file_tree_icons: false, + file_tree_language_icons: true, // Mouse and Cursor Behaviour mouse: true, scroll_sensitivity: 4, @@ -229,6 +234,8 @@ impl Assistant { Self::ask_mouse_cursor(&mut result)?; // Icons Self::ask_icons(&mut result)?; + // File tree + Self::ask_file_tree(&mut result)?; // Plug-Ins Self::ask_plugins(&mut result)?; // Create the configuration file (and print it) @@ -456,6 +463,28 @@ impl Assistant { Ok(()) } + pub fn ask_file_tree(result: &mut Self) -> Result<()> { + if result.icons { + let orange = Fg(Color::Ansi(202).to_color()?); + let yellow = Fg(Color::Ansi(220).to_color()?); + let green = Fg(Color::Ansi(34).to_color()?); + let reset = Fg(Color::Transparent.to_color()?); + println!("🖹 file1.txt \n🖹 file2.txt \n🖹 file3.txt \n"); + result.file_tree_icons = + Self::confirmation("Would you like icons in the file tree?", false); + if result.file_tree_icons { + println!( + "\n {green}🎵{reset} file1.mp3 \n {orange}{{}}{reset} file2.css \n {yellow}{reset} file3.html \n" + ); + result.file_tree_language_icons = Self::confirmation( + "Would you like the tab line to have language specific icons?", + true, + ); + } + } + Ok(()) + } + pub fn ask_line_numbers(result: &mut Self) -> Result<()> { let red = Fg(Color::Ansi(196).to_color()?); let orange = Fg(Color::Ansi(202).to_color()?); @@ -690,6 +719,7 @@ impl Assistant { } /// Turn the configuration assistant details into a lua file + #[allow(clippy::too_many_lines)] pub fn to_config(&self) -> String { let mut result = String::new(); let (sections, fields) = self.diff(); @@ -779,6 +809,19 @@ impl Assistant { result += "\n-- Greeting Message Configuration --\n"; result += &format!("greeting_message.enabled = {}\n", self.greeting_message); } + // Configuration of file tree + if sections.contains(&"file_tree") { + result += "\n-- File Tree Configuration --\n"; + if fields.contains(&"file_tree_icons") { + result += &format!("file_tree.icons = {}\n", self.file_tree_icons); + } + if fields.contains(&"file_tree_language_icons") { + result += &format!( + "file_tree.language_icons = {}\n", + self.file_tree_language_icons + ); + } + } // Configuration of mouse and cursor behaviour if sections.contains(&"cursors") { result += "\n-- Cursor Configuration --\n"; @@ -820,6 +863,14 @@ impl Assistant { ("mouse", self.mouse != def.mouse), ("cursor_wrap", self.cursor_wrap != def.cursor_wrap), ("icons", self.icons != def.icons), + ( + "file_tree_icons", + self.file_tree_icons != def.file_tree_icons, + ), + ( + "file_tree_language_icons", + self.file_tree_language_icons != def.file_tree_language_icons, + ), ( "line_number_padding", self.line_number_padding != def.line_number_padding, @@ -865,6 +916,10 @@ impl Assistant { || fields.contains(&"scroll_sensitivity") || fields.contains(&"cursor_wrap"), ), + ( + "file_tree", + fields.contains(&"file_tree_icons") || fields.contains(&"file_tree_language_icons"), + ), ]; let sections = sections .iter() From d1db3113fb8c4d40b36596828f1000c55199f626 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:52:46 +0000 Subject: [PATCH 22/51] Added colours to file types and file tree --- plugins/todo.lua | 3 +- src/config/colors.rs | 4 +- src/config/mod.rs | 2 + src/editor/filetree.rs | 76 ++++++++++++++------------- src/editor/filetypes.rs | 7 ++- src/editor/interface.rs | 47 +++++++---------- src/editor/mod.rs | 2 +- src/plugin/bootstrap.lua | 109 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 182 insertions(+), 68 deletions(-) diff --git a/plugins/todo.lua b/plugins/todo.lua index 207dada1..eaf901a6 100644 --- a/plugins/todo.lua +++ b/plugins/todo.lua @@ -1,5 +1,5 @@ --[[ -Todo Lists v0.2 +Todo Lists v0.3 This plug-in will provide todo list functionality on files with the extension .todo You can mark todos as done / not done by using the Ctrl + Enter key combination @@ -12,6 +12,7 @@ file_types["Todo"] = { extensions = {"todo"}, files = {".todo.md", ".todo"}, modelines = {}, + color = 83, } -- Add syntax highlighting to .todo files (done todos are comments) diff --git a/src/config/colors.rs b/src/config/colors.rs index e020dae4..bc8e6e0d 100644 --- a/src/config/colors.rs +++ b/src/config/colors.rs @@ -6,7 +6,7 @@ use mlua::prelude::*; use super::issue_warning; -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Colors { pub editor_bg: Color, pub editor_fg: Color, @@ -226,7 +226,7 @@ impl LuaUserData for Colors { } } -#[derive(Debug)] +#[derive(Debug, Clone)] pub enum Color { Rgb(u8, u8, u8), Hex(String), diff --git a/src/config/mod.rs b/src/config/mod.rs index a92e3b4d..c3d5af82 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -376,12 +376,14 @@ impl FromLua for FileTypes { .pairs::() .filter_map(|val| if let Ok((_, v)) = val { Some(v) } else { None }) .collect::>(); + let color = Color::from_lua(info.get("color")?); result.push(FileType { name, icon, files, extensions, modelines, + color, }); } } diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 0806de4f..74866a10 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,10 +1,15 @@ -use crate::config::FileTree as CfgFT; /// Utilities for handling the file tree + +use crate::config::{FileTree as CfgFT, Color}; use crate::editor::FileLayout; use crate::{config, Editor, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; +/// How parts of a file tree are stored +/// (Padding, Icon, Icon Color, File Name) +pub type FTParts = Vec<(usize, String, Option, String)>; + /// The backend of a file tree - stores the structure of the files and directories #[derive(Debug)] pub enum FileTree { @@ -175,19 +180,20 @@ impl FileTree { } /// Get a language-related icon for this node - fn lang_icon(&self, fts: &FileTypes, config: &CfgFT) -> Option { + fn lang_icon(&self, fts: &FileTypes, config: &CfgFT) -> Option<(String, Color)> { if config.language_icons { let path = match self { Self::File { path } | Self::Dir { path, .. } => path, }; - fts.identify_from_path(path).map(|ft| ft.icon + " ") - } else { - None + if let Some(ft) = fts.identify_from_path(path) { + return Some((ft.icon, ft.color)); + } } + None } /// Get the appropriate icon - fn icon(&self, fts: &FileTypes, config: &CfgFT) -> String { + fn icon(&self, fts: &FileTypes, config: &CfgFT) -> (String, Option) { let is_file = match self { Self::File { .. } => true, Self::Dir { .. } => false, @@ -199,15 +205,15 @@ impl FileTree { let is_hidden = self.is_hidden(); match (self.lang_icon(fts, config), is_file, is_hidden, is_expanded) { // Language specific icons - (Some(icon), _, _, _) => icon, + (Some((icon, colour)), _, _, _) => (icon + " ", Some(colour)), // Closed folders - (_, false, false, false) => "󰉖 ".to_string(), - (_, false, true, false) => "󱞞 ".to_string(), + (_, false, false, false) => ("󰉖 ".to_string(), None), + (_, false, true, false) => ("󱞞 ".to_string(), None), // Opened folders - (_, false, _, true) => "󰷏 ".to_string(), + (_, false, _, true) => ("󰷏 ".to_string(), None), // Files - (_, true, false, _) => "󰈤 ".to_string(), - (_, true, true, _) => "󰘓 ".to_string(), + (_, true, false, _) => ("󰈤 ".to_string(), None), + (_, true, true, _) => ("󰘓 ".to_string(), None), } } @@ -219,34 +225,32 @@ impl FileTree { } /// Display this file tree - pub fn display(&self, sel: &str, fts: &FileTypes, cfg: &CfgFT) -> (Vec, Option) { + pub fn display(&self, sel: &str, fts: &FileTypes, cfg: &CfgFT) -> (FTParts, Option) { let icons = cfg.icons; match self { - Self::File { path } => ( - vec![format!( - "{}{}", - if icons { - self.icon(fts, cfg) - } else { - String::new() - }, - get_file_name(path).unwrap_or(path.to_string()) - )], - if self.is_selected(sel) { Some(0) } else { None }, - ), + Self::File { path } => { + let (icon, icon_color) = if icons { + self.icon(fts, cfg) + } else { + (String::new(), None) + }; + let file_name = get_file_name(path).unwrap_or(path.to_string()); + ( + vec![(0, icon, icon_color, file_name)], + if self.is_selected(sel) { Some(0) } else { None }, + ) + } Self::Dir { path, files } => { let mut result = vec![]; let mut at = None; // Write self - result.push(format!( - "{}{}", - if icons { - self.icon(fts, cfg) - } else { - String::new() - }, - get_file_name(path).unwrap_or(path.to_string()) - )); + let (icon, icon_color) = if icons { + self.icon(fts, cfg) + } else { + (String::new(), None) + }; + let file_name = get_file_name(path).unwrap_or(path.to_string()); + result.push((0, icon, icon_color, file_name)); if self.is_selected(sel) { at = Some(result.len().saturating_sub(1)); } @@ -255,7 +259,9 @@ impl FileTree { for file in files { let (sub_display, sub_at) = file.display(sel, fts, cfg); for (c, s) in sub_display.iter().enumerate() { - result.push(format!(" {s}")); + let mut s = s.clone(); + s.0 += 1; + result.push(s); if let Some(sub_at) = sub_at { if sub_at == c { at = Some(result.len().saturating_sub(1)); diff --git a/src/editor/filetypes.rs b/src/editor/filetypes.rs index 9e440b54..abda5450 100644 --- a/src/editor/filetypes.rs +++ b/src/editor/filetypes.rs @@ -1,5 +1,7 @@ -use crate::config; /// Tools for managing and identifying file types + +use crate::config; +use crate::config::Color; use crate::editor::Config; use kaolinite::utils::get_file_name; use kaolinite::Document; @@ -64,6 +66,8 @@ pub struct FileType { pub extensions: Vec, /// The modelines that files of this type have pub modelines: Vec, + /// The colour associated with this file type + pub color: Color, } impl Default for FileType { @@ -74,6 +78,7 @@ impl Default for FileType { files: vec![], extensions: vec![], modelines: vec![], + color: Color::Transparent, } } } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index cd667336..f42e880b 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -1,6 +1,6 @@ use crate::config::SyntaxHighlighting as SH; /// Functions for rendering the UI -use crate::editor::FileLayout; +use crate::editor::{FileLayout, FTParts}; use crate::error::{OxError, Result}; use crate::events::wait_for_event_hog; use crate::ui::{key_event, size, Feedback}; @@ -24,7 +24,7 @@ pub struct RenderCache { pub help_message: Vec<(bool, String)>, pub help_message_width: usize, pub help_message_span: Range, - pub file_tree: Vec, + pub file_tree: FTParts, pub file_tree_selection: Option, } @@ -552,6 +552,7 @@ impl Editor { /// Render a line in the file tree #[allow(clippy::similar_names)] fn render_file_tree(&mut self, y: usize, length: usize) -> Result { + let selected = self.render_cache.file_tree_selection == Some(y); let ft_bg = Bg(config!(self.config, colors).file_tree_bg.to_color()?); let ft_fg = Fg(config!(self.config, colors).file_tree_fg.to_color()?); let ft_selection_bg = Bg(config!(self.config, colors) @@ -560,36 +561,26 @@ impl Editor { let ft_selection_fg = Fg(config!(self.config, colors) .file_tree_selection_fg .to_color()?); - // Work out which line to use - let line = self - .render_cache - .file_tree - .get(y) - .map(std::string::ToString::to_string) - .unwrap_or_default(); - let mut line = line.chars(); - // Trim to fit - let mut result = String::new(); - let mut available = length; - loop { - if available > 0 { - if let Some(next) = line.next() { - let ch = width_char(&next, 4); - available = available.saturating_sub(ch); - result.push(next); - } else { - break; - } + // Perform the rendering + let mut total_length = 0; + let line = self.render_cache.file_tree.get(y); + let mut line = if let Some((padding, icon, icon_colour, name)) = line { + total_length = padding * 2 + width(icon, 4) + width(name, 4); + if let (Some(colour), false) = (icon_colour, selected) { + let colour = Fg(colour.to_color()?); + format!("{}{colour}{icon}{ft_fg}{name}", " ".repeat(*padding)) } else { - break; + format!("{}{icon}{name}", " ".repeat(*padding)) } - } - result += &" ".repeat(available); + } else { + String::new() + }; + line += &" ".repeat(length.saturating_sub(total_length)); // Return result - if self.render_cache.file_tree_selection == Some(y) { - Ok(format!("{ft_selection_bg}{ft_selection_fg}{result}")) + if selected { + Ok(format!("{ft_selection_bg}{ft_selection_fg}{line}")) } else { - Ok(format!("{ft_bg}{ft_fg}{result}")) + Ok(format!("{ft_bg}{ft_fg}{line}")) } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 06f7e7a3..a85524ed 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -28,7 +28,7 @@ mod scanning; pub use cursor::{allowed_by_multi_cursor, handle_multiple_cursors}; pub use documents::{FileContainer, FileLayout}; -pub use filetree::FileTree; +pub use filetree::{FileTree, FTParts}; pub use filetypes::{FileType, FileTypes}; pub use interface::RenderCache; pub use macros::MacroMan; diff --git a/src/plugin/bootstrap.lua b/src/plugin/bootstrap.lua index 7b280abb..b690ed8e 100644 --- a/src/plugin/bootstrap.lua +++ b/src/plugin/bootstrap.lua @@ -165,522 +165,609 @@ file_types = { files = {}, extensions = {"abap"}, modelines = {}, + color = 21, }, ["Ada"] = { icon = "", files = {}, extensions = {"ada"}, modelines = {}, + color = 28, }, ["AutoHotkey"] = { icon = " ", files = {}, extensions = {"ahk", "ahkl"}, modelines = {}, + color = 157, }, ["AppleScript"] = { icon = "", files = {}, extensions = {"applescript", "scpt"}, modelines = {}, + color = 252, }, ["Arc"] = { icon = "󰅩 ", files = {}, extensions = {"arc"}, modelines = {}, + color = 125, }, ["ASP"] = { icon = "󰅩 ", files = {}, extensions = {"asp", "asax", "ascx", "ashx", "asmx", "aspx", "axd"}, modelines = {}, + color = 33, }, ["ActionScript"] = { icon = "󰑷 ", files = {}, extensions = {"as"}, modelines = {}, + color = 202, }, ["AGS Script"] = { icon = "󰅩 ", files = {}, extensions = {"asc", "ash"}, modelines = {}, + color = 69, }, ["Assembly"] = { icon = " ", files = {}, extensions = {"asm", "nasm"}, modelines = {}, + color = 250, }, ["Awk"] = { icon = "󰅩 ", files = {}, extensions = {"awk", "auk", "gawk", "mawk", "nawk"}, modelines = {"#!\\s*/usr/bin/(env )?awk"}, + color = 160, }, ["Batch"] = { icon = "󰆍 ", files = {}, extensions = {"bat", "cmd"}, modelines = {}, + color = 250, }, ["Brainfuck"] = { icon = " ", files = {}, extensions = {"b", "bf"}, modelines = {}, + color = 226, }, ["C"] = { icon = " ", files = {}, extensions = {"c"}, modelines = {}, + color = 33, }, ["CMake"] = { icon = " ", files = {}, extensions = {"cmake"}, modelines = {}, + color = 40, }, ["Cobol"] = { icon = "󰅩 ", files = {}, extensions = {"cbl", "cobol", "cob"}, modelines = {}, + color = 57, }, ["Java"] = { icon = " ", files = {}, extensions = {"class", "java"}, modelines = {}, + color = 202, }, ["Clojure"] = { icon = " ", files = {}, extensions = {"clj", "cl2", "cljs", "cljx", "cljc"}, modelines = {}, + color = 37, }, ["CoffeeScript"] = { icon = " ", files = {}, extensions = {"coffee"}, modelines = {}, + color = 130, }, ["Crystal"] = { icon = " ", files = {}, extensions = {"cr"}, modelines = {}, + color = 233, }, ["Cuda"] = { icon = " ", files = {}, extensions = {"cu", "cuh"}, modelines = {}, + color = 76, }, ["C++"] = { icon = " ", files = {}, extensions = {"cpp", "cxx"}, modelines = {}, + color = 26, }, ["C#"] = { icon = " ", files = {}, extensions = {"cs", "cshtml", "csx"}, modelines = {}, + color = 63, }, ["CSS"] = { icon = " ", files = {}, extensions = {"css"}, modelines = {}, + color = 99, }, ["CSV"] = { icon = " ", files = {}, extensions = {"csv"}, modelines = {}, + color = 248, }, ["D"] = { icon = " ", files = {}, extensions = {"d", "di"}, modelines = {}, + color = 197, }, ["Dart"] = { icon = " ", files = {}, extensions = {"dart"}, modelines = {}, + color = 33, }, ["Diff"] = { icon = " ", files = {}, extensions = {"diff", "patch"}, modelines = {}, + color = 28, }, ["Dockerfile"] = { icon = " ", files = {}, extensions = {"dockerfile"}, modelines = {}, + color = 33, }, ["Elixir"] = { icon = " ", files = {}, extensions = {"ex", "exs"}, modelines = {}, + color = 56, }, ["Elm"] = { icon = " ", files = {}, extensions = {"elm"}, modelines = {}, + color = 26, }, ["Emacs Lisp"] = { icon = " ", files = {}, extensions = {"el"}, modelines = {}, + color = 63, }, ["ERB"] = { icon = "󰅩 ", files = {}, extensions = {"erb"}, modelines = {}, + color = 196, }, ["Erlang"] = { icon = " ", files = {}, extensions = {"erl", "es"}, modelines = {}, + color = 196, }, ["F#"] = { icon = " ", files = {}, extensions = {"fs", "fsi", "fsx"}, modelines = {}, + color = 39, }, ["FORTRAN"] = { icon = "󱈚 ", files = {}, extensions = {"f", "f90", "fpp", "for"}, modelines = {}, + color = 129, }, ["Fish"] = { icon = " ", files = {}, extensions = {"fish"}, modelines = {"#!\\s*/usr/bin/(env )?fish"}, + color = 203, }, ["Forth"] = { icon = "󰅩 ", files = {}, extensions = {"fth"}, modelines = {}, + color = 196, }, ["ANTLR"] = { icon = "󰅩 ", files = {}, extensions = {"g4"}, modelines = {}, + color = 196, }, ["GDScript"] = { icon = " ", files = {}, extensions = {"gd"}, modelines = {}, + color = 27, }, ["GLSL"] = { icon = " ", files = {}, extensions = {"glsl", "vert", "shader", "geo", "fshader", "vrx", "vsh", "vshader", "frag"}, modelines = {}, + color = 33, }, ["Gnuplot"] = { icon = " ", files = {}, extensions = {"gnu", "gp", "plot"}, modelines = {}, + color = 249, }, ["Go"] = { icon = "", files = {}, extensions = {"go"}, modelines = {}, + color = 33, }, ["Groovy"] = { icon = " ", files = {}, extensions = {"groovy", "gvy"}, modelines = {}, + color = 39, }, ["HLSL"] = { icon = "󰅩 ", files = {}, extensions = {"hlsl"}, modelines = {}, + color = 21, }, ["C Header"] = { icon = " ", files = {}, extensions = {"h"}, modelines = {}, + color = 33, }, ["Haml"] = { icon = "", files = {}, extensions = {"haml"}, modelines = {}, + color = 228, }, ["Handlebars"] = { icon = "󰅩 ", files = {}, extensions = {"handlebars", "hbs"}, modelines = {}, + color = 94, }, ["Haskell"] = { icon = " ", files = {}, extensions = {"hs"}, modelines = {}, + color = 93, }, ["C++ Header"] = { icon = " ", files = {}, extensions = {"hpp"}, modelines = {}, + color = 26, }, ["HTML"] = { icon = " ", files = {}, extensions = {"html", "htm", "xhtml"}, modelines = {}, + color = 208, }, ["INI"] = { icon = " ", files = {}, extensions = {"ini", "cfg"}, modelines = {}, + color = 248, }, ["Arduino"] = { icon = " ", files = {}, extensions = {"ino"}, modelines = {}, + color = 75, }, ["J"] = { icon = " ", files = {}, extensions = {"ijs"}, modelines = {}, + color = 45, }, ["JSON"] = { icon = " ", files = {}, extensions = {"json"}, modelines = {}, + color = 247, }, ["JSX"] = { icon = " ", files = {}, extensions = {"jsx"}, modelines = {}, + color = 33, }, ["JavaScript"] = { icon = " ", files = {}, extensions = {"js"}, modelines = {"#!\\s*/usr/bin/(env )?node"}, + color = 220, }, ["Julia"] = { icon = " ", files = {}, extensions = {"jl"}, modelines = {}, + color = 27, }, ["Kotlin"] = { icon = " ", files = {}, extensions = {"kt", "ktm", "kts"}, modelines = {}, + color = 129, }, ["LLVM"] = { icon = "󰅩 ", files = {}, extensions = {"ll"}, modelines = {}, + color = 39, }, ["Lex"] = { icon = "󰅩 ", files = {}, extensions = {"l", "lex"}, modelines = {}, + color = 249, }, ["Lua"] = { icon = " ", files = {".oxrc"}, extensions = {"lua"}, modelines = {"#!\\s*/usr/bin/(env )?lua"}, + color = 27, }, ["LiveScript"] = { icon = " ", files = {}, extensions = {"ls"}, modelines = {}, + color = 39, }, ["LOLCODE"] = { icon = "󰅩 ", files = {}, extensions = {"lol"}, modelines = {}, + color = 160, }, ["Common Lisp"] = { icon = " ", files = {}, extensions = {"lisp", "asd", "lsp"}, modelines = {}, + color = 243, }, ["Log file"] = { icon = " ", files = {}, extensions = {"log"}, modelines = {}, + color = 248, }, ["M4"] = { icon = "󰅩 ", files = {}, extensions = {"m4"}, modelines = {}, + color = 21, }, ["Groff"] = { icon = "󰅩 ", files = {}, extensions = {"man", "roff"}, modelines = {}, + color = 249, }, ["Matlab"] = { icon = " ", files = {}, extensions = {"matlab"}, modelines = {}, + color = 202, }, ["Objective-C"] = { icon = " ", files = {}, extensions = {"m"}, modelines = {}, + color = 27, }, ["OCaml"] = { icon = " ", files = {}, extensions = {"ml"}, modelines = {}, + color = 208, }, ["Makefile"] = { icon = " ", files = {"Makefile"}, extensions = {"mk", "mak"}, modelines = {}, + color = 249, }, ["Markdown"] = { icon = " ", files = {}, extensions = {"md", "markdown"}, modelines = {}, + color = 234, }, ["Nix"] = { icon = " ", files = {}, extensions = {"nix"}, modelines = {}, + color = 33, }, ["NumPy"] = { icon = "󰘨 ", files = {}, extensions = {"numpy"}, modelines = {}, + color = 27, }, ["OpenCL"] = { icon = "󰅩 ", files = {}, extensions = {"opencl", "cl"}, modelines = {}, + color = 76, }, ["PHP"] = { icon = "󰌟 ", files = {}, extensions = {"php"}, modelines = {"#!\\s*/usr/bin/(env )?php"}, + color = 69, }, ["Pascal"] = { icon = "󰅩 ", files = {}, extensions = {"pas"}, modelines = {}, + color = 21, }, ["Perl"] = { icon = " ", files = {}, extensions = {"pl"}, modelines = {"#!\\s*/usr/bin/(env )?perl"}, + color = 39, }, ["PowerShell"] = { icon = "󰨊 ", files = {}, extensions = {"psl"}, modelines = {}, + color = 33, }, ["Prolog"] = { icon = " ", files = {}, extensions = {"pro"}, modelines = {}, + color = 202, }, ["Python"] = { icon = " ", files = {}, extensions = {"py", "pyw"}, modelines = {"#!\\s*/usr/bin/(env )?python3?"}, + color = 33, }, ["Cython"] = { icon = " ", files = {}, extensions = {"pyx", "pxd", "pxi"}, modelines = {}, + color = 27, }, ["R"] = { icon = " ", files = {}, extensions = {"r"}, modelines = {}, + color = 27, }, ["reStructuredText"] = { icon = "󰊄", files = {}, extensions = {"rst"}, modelines = {}, + color = 234, }, ["Racket"] = { icon = "󰅩 ", files = {}, extensions = {"rkt"}, modelines = {}, + color = 160, }, ["Ruby"] = { icon = " ", files = {}, extensions = {"rb", "ruby"}, modelines = {"#!\\s*/usr/bin/(env )?ruby"}, + color = 196, }, ["Rust"] = { icon = " ", files = {}, extensions = {"rs"}, modelines = {"#!\\s*/usr/bin/(env )?rust"}, + color = 166, }, ["Shell"] = { icon = " ", @@ -690,131 +777,153 @@ file_types = { "#!\\s*/bin/(sh|bash)", "#!\\s*/usr/bin/env bash", }, + color = 250, }, ["SCSS"] = { icon = " ", files = {}, extensions = {"scss"}, modelines = {}, + color = 200, }, ["SQL"] = { icon = " ", files = {}, extensions = {"sql"}, modelines = {}, + color = 75, }, ["Sass"] = { icon = " ", files = {}, extensions = {"sass"}, modelines = {}, + color = 200, }, ["Scala"] = { icon = "", files = {}, extensions = {"scala"}, modelines = {}, + color = 196, }, ["Scheme"] = { icon = "", files = {}, extensions = {"scm"}, modelines = {}, + color = 233, }, ["Smalltalk"] = { icon = "󰅩 ", files = {}, extensions = {"st"}, modelines = {}, + color = 33, }, ["Swift"] = { icon = " ", files = {}, extensions = {"swift"}, modelines = {}, + color = 202, }, ["TOML"] = { icon = " ", files = {}, extensions = {"toml"}, modelines = {}, + color = 209, }, ["Tcl"] = { icon = "󰅩 ", files = {}, extensions = {"tcl"}, modelines = {"#!\\s*/usr/bin/(env )?tcl"}, + color = 196, }, ["TeX"] = { icon = " ", files = {}, extensions = {"tex"}, modelines = {}, + color = 233, }, ["TypeScript"] = { icon = " ", files = {}, extensions = {"ts", "tsx"}, modelines = {}, + color = 27, }, ["Plain Text"] = { icon = " ", files = {}, extensions = {"txt"}, modelines = {}, + color = 250, }, ["Vala"] = { icon = " ", files = {}, extensions = {"vala"}, modelines = {}, + color = 135, }, ["Visual Basic"] = { icon = "󰯁 ", files = {}, extensions = {"vb", "vbs"}, modelines = {}, + color = 69, }, ["Vue"] = { icon = " ", files = {}, extensions = {"vue"}, modelines = {}, + color = 40, }, ["Logos"] = { icon = "󰅩 ", files = {}, extensions = {"xm", "x", "xi"}, modelines = {}, + color = 196, }, ["XML"] = { icon = "󰅩 ", files = {}, extensions = {"xml"}, modelines = {}, + color = 33, }, ["Yacc"] = { icon = "󰅩 ", files = {}, extensions = {"y", "yacc"}, modelines = {}, + color = 249, }, ["Yaml"] = { icon = "󰅩 ", files = {}, extensions = {"yaml", "yml"}, modelines = {}, + color = 161, }, ["Bison"] = { icon = "󰅩 ", files = {}, extensions = {"yxx"}, modelines = {}, + color = 249, }, ["Zsh"] = { icon = " ", files = {}, extensions = {"zsh"}, modelines = {}, + color = 208, }, } From 594e75c4928cb351c88bb7a08363aec56320764f Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:53:01 +0000 Subject: [PATCH 23/51] rustfmt --- src/editor/filetree.rs | 3 +-- src/editor/filetypes.rs | 1 - src/editor/interface.rs | 2 +- src/editor/mod.rs | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 74866a10..28b4e502 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,5 @@ /// Utilities for handling the file tree - -use crate::config::{FileTree as CfgFT, Color}; +use crate::config::{Color, FileTree as CfgFT}; use crate::editor::FileLayout; use crate::{config, Editor, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; diff --git a/src/editor/filetypes.rs b/src/editor/filetypes.rs index abda5450..55a9f7dc 100644 --- a/src/editor/filetypes.rs +++ b/src/editor/filetypes.rs @@ -1,5 +1,4 @@ /// Tools for managing and identifying file types - use crate::config; use crate::config::Color; use crate::editor::Config; diff --git a/src/editor/interface.rs b/src/editor/interface.rs index f42e880b..35f10a03 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -1,6 +1,6 @@ use crate::config::SyntaxHighlighting as SH; /// Functions for rendering the UI -use crate::editor::{FileLayout, FTParts}; +use crate::editor::{FTParts, FileLayout}; use crate::error::{OxError, Result}; use crate::events::wait_for_event_hog; use crate::ui::{key_event, size, Feedback}; diff --git a/src/editor/mod.rs b/src/editor/mod.rs index a85524ed..b0456863 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -28,7 +28,7 @@ mod scanning; pub use cursor::{allowed_by_multi_cursor, handle_multiple_cursors}; pub use documents::{FileContainer, FileLayout}; -pub use filetree::{FileTree, FTParts}; +pub use filetree::{FTParts, FileTree}; pub use filetypes::{FileType, FileTypes}; pub use interface::RenderCache; pub use macros::MacroMan; From ea261d88e9fd5334332d6dcfe5143d182e7f3c4b Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:08:38 +0000 Subject: [PATCH 24/51] adjusted some language colours --- plugins/todo.lua | 2 +- src/plugin/bootstrap.lua | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/todo.lua b/plugins/todo.lua index eaf901a6..0a7206c3 100644 --- a/plugins/todo.lua +++ b/plugins/todo.lua @@ -12,7 +12,7 @@ file_types["Todo"] = { extensions = {"todo"}, files = {".todo.md", ".todo"}, modelines = {}, - color = 83, + color = 121, } -- Add syntax highlighting to .todo files (done todos are comments) diff --git a/src/plugin/bootstrap.lua b/src/plugin/bootstrap.lua index b690ed8e..6981f528 100644 --- a/src/plugin/bootstrap.lua +++ b/src/plugin/bootstrap.lua @@ -291,7 +291,7 @@ file_types = { files = {}, extensions = {"cr"}, modelines = {}, - color = 233, + color = 241, }, ["Cuda"] = { icon = " ", @@ -662,7 +662,7 @@ file_types = { files = {}, extensions = {"md", "markdown"}, modelines = {}, - color = 234, + color = 243, }, ["Nix"] = { icon = " ", @@ -746,7 +746,7 @@ file_types = { files = {}, extensions = {"rst"}, modelines = {}, - color = 234, + color = 243, }, ["Racket"] = { icon = "󰅩 ", @@ -812,7 +812,7 @@ file_types = { files = {}, extensions = {"scm"}, modelines = {}, - color = 233, + color = 243, }, ["Smalltalk"] = { icon = "󰅩 ", @@ -847,7 +847,7 @@ file_types = { files = {}, extensions = {"tex"}, modelines = {}, - color = 233, + color = 243, }, ["TypeScript"] = { icon = " ", From a44861ee68f39d5efbce4437b44211f3fcd3ec66 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:16:03 +0000 Subject: [PATCH 25/51] adjusted todo plug-in colour --- plugins/todo.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/todo.lua b/plugins/todo.lua index 0a7206c3..c0ad58f8 100644 --- a/plugins/todo.lua +++ b/plugins/todo.lua @@ -12,7 +12,7 @@ file_types["Todo"] = { extensions = {"todo"}, files = {".todo.md", ".todo"}, modelines = {}, - color = 121, + color = 247, } -- Add syntax highlighting to .todo files (done todos are comments) From c323aa2063fd7a83dc7b22104f1d831019f4b8c9 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:42:40 +0000 Subject: [PATCH 26/51] Language icon colours can be configured --- config/.oxrc | 11 ++ src/config/colors.rs | 102 +++++++++++++++++ src/config/mod.rs | 2 +- src/editor/filetree.rs | 8 +- src/editor/filetypes.rs | 5 +- src/editor/interface.rs | 18 ++- src/plugin/bootstrap.lua | 229 ++++++++++++++++++++------------------- 7 files changed, 256 insertions(+), 119 deletions(-) diff --git a/config/.oxrc b/config/.oxrc index a8add456..4f32e0d4 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -410,6 +410,17 @@ colors.file_tree_fg = {255, 255, 255} colors.file_tree_selection_fg = {255, 255, 255} colors.file_tree_selection_bg = {59, 59, 130} +colors.file_tree_red = {240, 56, 36} +colors.file_tree_orange = {240, 107, 36} +colors.file_tree_yellow = {240, 236, 36} +colors.file_tree_green = {35, 240, 144} +colors.file_tree_lightblue = {36, 219, 240} +colors.file_tree_darkblue = {36, 117, 240} +colors.file_tree_purple = {104, 36, 240} +colors.file_tree_pink = {206, 36, 240} +colors.file_tree_brown = {158, 94, 94} +colors.file_tree_grey = {150, 144, 201} + -- Configure Line Numbers -- line_numbers.enabled = true line_numbers.padding_left = 1 diff --git a/src/config/colors.rs b/src/config/colors.rs index bc8e6e0d..0159e250 100644 --- a/src/config/colors.rs +++ b/src/config/colors.rs @@ -41,6 +41,17 @@ pub struct Colors { pub file_tree_bg: Color, pub file_tree_selection_fg: Color, pub file_tree_selection_bg: Color, + + pub file_tree_red: Color, + pub file_tree_orange: Color, + pub file_tree_yellow: Color, + pub file_tree_green: Color, + pub file_tree_lightblue: Color, + pub file_tree_darkblue: Color, + pub file_tree_purple: Color, + pub file_tree_pink: Color, + pub file_tree_brown: Color, + pub file_tree_grey: Color, } impl Default for Colors { @@ -79,6 +90,17 @@ impl Default for Colors { file_tree_fg: Color::Rgb(255, 255, 255), file_tree_selection_bg: Color::Rgb(59, 59, 130), file_tree_selection_fg: Color::Rgb(255, 255, 255), + + file_tree_red: Color::Rgb(240, 56, 36), + file_tree_orange: Color::Rgb(240, 107, 36), + file_tree_yellow: Color::Rgb(240, 236, 36), + file_tree_green: Color::Rgb(35, 240, 144), + file_tree_lightblue: Color::Rgb(36, 219, 240), + file_tree_darkblue: Color::Rgb(36, 117, 240), + file_tree_purple: Color::Rgb(104, 36, 240), + file_tree_pink: Color::Rgb(206, 36, 240), + file_tree_brown: Color::Rgb(158, 94, 94), + file_tree_grey: Color::Rgb(150, 144, 201), } } } @@ -223,6 +245,86 @@ impl LuaUserData for Colors { this.file_tree_selection_fg = Color::from_lua(value); Ok(()) }); + fields.add_field_method_set("file_tree_red", |_, this, value| { + this.file_tree_red = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_red", |_, this, value| { + this.file_tree_red = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_orange", |_, this, value| { + this.file_tree_orange = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_orange", |_, this, value| { + this.file_tree_orange = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_yellow", |_, this, value| { + this.file_tree_yellow = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_yellow", |_, this, value| { + this.file_tree_yellow = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_green", |_, this, value| { + this.file_tree_green = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_green", |_, this, value| { + this.file_tree_green = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_lightblue", |_, this, value| { + this.file_tree_lightblue = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_lightblue", |_, this, value| { + this.file_tree_lightblue = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_darkblue", |_, this, value| { + this.file_tree_darkblue = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_darkblue", |_, this, value| { + this.file_tree_darkblue = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_purple", |_, this, value| { + this.file_tree_purple = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_purple", |_, this, value| { + this.file_tree_purple = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_pink", |_, this, value| { + this.file_tree_pink = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_pink", |_, this, value| { + this.file_tree_pink = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_brown", |_, this, value| { + this.file_tree_brown = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_brown", |_, this, value| { + this.file_tree_brown = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_grey", |_, this, value| { + this.file_tree_grey = Color::from_lua(value); + Ok(()) + }); + fields.add_field_method_set("file_tree_grey", |_, this, value| { + this.file_tree_grey = Color::from_lua(value); + Ok(()) + }); } } diff --git a/src/config/mod.rs b/src/config/mod.rs index c3d5af82..56a379ea 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -376,7 +376,7 @@ impl FromLua for FileTypes { .pairs::() .filter_map(|val| if let Ok((_, v)) = val { Some(v) } else { None }) .collect::>(); - let color = Color::from_lua(info.get("color")?); + let color = info.get::("color")?; result.push(FileType { name, icon, diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 28b4e502..5eec7c42 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,5 +1,5 @@ /// Utilities for handling the file tree -use crate::config::{Color, FileTree as CfgFT}; +use crate::config::FileTree as CfgFT; use crate::editor::FileLayout; use crate::{config, Editor, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; @@ -7,7 +7,7 @@ use std::path::{Path, PathBuf}; /// How parts of a file tree are stored /// (Padding, Icon, Icon Color, File Name) -pub type FTParts = Vec<(usize, String, Option, String)>; +pub type FTParts = Vec<(usize, String, Option, String)>; /// The backend of a file tree - stores the structure of the files and directories #[derive(Debug)] @@ -179,7 +179,7 @@ impl FileTree { } /// Get a language-related icon for this node - fn lang_icon(&self, fts: &FileTypes, config: &CfgFT) -> Option<(String, Color)> { + fn lang_icon(&self, fts: &FileTypes, config: &CfgFT) -> Option<(String, String)> { if config.language_icons { let path = match self { Self::File { path } | Self::Dir { path, .. } => path, @@ -192,7 +192,7 @@ impl FileTree { } /// Get the appropriate icon - fn icon(&self, fts: &FileTypes, config: &CfgFT) -> (String, Option) { + fn icon(&self, fts: &FileTypes, config: &CfgFT) -> (String, Option) { let is_file = match self { Self::File { .. } => true, Self::Dir { .. } => false, diff --git a/src/editor/filetypes.rs b/src/editor/filetypes.rs index 55a9f7dc..feacf8e9 100644 --- a/src/editor/filetypes.rs +++ b/src/editor/filetypes.rs @@ -1,6 +1,5 @@ /// Tools for managing and identifying file types use crate::config; -use crate::config::Color; use crate::editor::Config; use kaolinite::utils::get_file_name; use kaolinite::Document; @@ -66,7 +65,7 @@ pub struct FileType { /// The modelines that files of this type have pub modelines: Vec, /// The colour associated with this file type - pub color: Color, + pub color: String, } impl Default for FileType { @@ -77,7 +76,7 @@ impl Default for FileType { files: vec![], extensions: vec![], modelines: vec![], - color: Color::Transparent, + color: "grey".to_string(), } } } diff --git a/src/editor/interface.rs b/src/editor/interface.rs index 35f10a03..df135bbb 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -1,5 +1,6 @@ -use crate::config::SyntaxHighlighting as SH; /// Functions for rendering the UI + +use crate::config::SyntaxHighlighting as SH; use crate::editor::{FTParts, FileLayout}; use crate::error::{OxError, Result}; use crate::events::wait_for_event_hog; @@ -561,13 +562,26 @@ impl Editor { let ft_selection_fg = Fg(config!(self.config, colors) .file_tree_selection_fg .to_color()?); + let ft_colors = config!(self.config, colors); // Perform the rendering let mut total_length = 0; let line = self.render_cache.file_tree.get(y); let mut line = if let Some((padding, icon, icon_colour, name)) = line { total_length = padding * 2 + width(icon, 4) + width(name, 4); if let (Some(colour), false) = (icon_colour, selected) { - let colour = Fg(colour.to_color()?); + let colour = Fg(match colour.as_str() { + "red" => ft_colors.file_tree_red.to_color()?, + "orange" => ft_colors.file_tree_orange.to_color()?, + "yellow" => ft_colors.file_tree_yellow.to_color()?, + "green" => ft_colors.file_tree_green.to_color()?, + "lightblue" => ft_colors.file_tree_lightblue.to_color()?, + "darkblue" => ft_colors.file_tree_darkblue.to_color()?, + "purple" => ft_colors.file_tree_purple.to_color()?, + "pink" => ft_colors.file_tree_pink.to_color()?, + "brown" => ft_colors.file_tree_brown.to_color()?, + "grey" => ft_colors.file_tree_grey.to_color()?, + _ => Color::White, + }); format!("{}{colour}{icon}{ft_fg}{name}", " ".repeat(*padding)) } else { format!("{}{icon}{name}", " ".repeat(*padding)) diff --git a/src/plugin/bootstrap.lua b/src/plugin/bootstrap.lua index 6981f528..7bf00eae 100644 --- a/src/plugin/bootstrap.lua +++ b/src/plugin/bootstrap.lua @@ -159,615 +159,626 @@ function shell:kill(pid) end -- Add types for built-in file type detection +-- Colours are in the format of a string of: +-- red +-- orange +-- yellow +-- green +-- dark blue +-- light blue +-- purple +-- pink +-- brown +-- gray file_types = { ["ABAP"] = { icon = "󰅩 ", files = {}, extensions = {"abap"}, modelines = {}, - color = 21, + color = "darkblue", }, ["Ada"] = { icon = "", files = {}, extensions = {"ada"}, modelines = {}, - color = 28, + color = "green", }, ["AutoHotkey"] = { icon = " ", files = {}, extensions = {"ahk", "ahkl"}, modelines = {}, - color = 157, + color = "green", }, ["AppleScript"] = { icon = "", files = {}, extensions = {"applescript", "scpt"}, modelines = {}, - color = 252, + color = "grey", }, ["Arc"] = { icon = "󰅩 ", files = {}, extensions = {"arc"}, modelines = {}, - color = 125, + color = "pink", }, ["ASP"] = { icon = "󰅩 ", files = {}, extensions = {"asp", "asax", "ascx", "ashx", "asmx", "aspx", "axd"}, modelines = {}, - color = 33, + color = "lightblue", }, ["ActionScript"] = { icon = "󰑷 ", files = {}, extensions = {"as"}, modelines = {}, - color = 202, + color = "orange", }, ["AGS Script"] = { icon = "󰅩 ", files = {}, extensions = {"asc", "ash"}, modelines = {}, - color = 69, + color = "purple", }, ["Assembly"] = { icon = " ", files = {}, extensions = {"asm", "nasm"}, modelines = {}, - color = 250, + color = "grey", }, ["Awk"] = { icon = "󰅩 ", files = {}, extensions = {"awk", "auk", "gawk", "mawk", "nawk"}, modelines = {"#!\\s*/usr/bin/(env )?awk"}, - color = 160, + color = "red", }, ["Batch"] = { icon = "󰆍 ", files = {}, extensions = {"bat", "cmd"}, modelines = {}, - color = 250, + color = "grey", }, ["Brainfuck"] = { icon = " ", files = {}, extensions = {"b", "bf"}, modelines = {}, - color = 226, + color = "yellow", }, ["C"] = { icon = " ", files = {}, extensions = {"c"}, modelines = {}, - color = 33, + color = "lightblue", }, ["CMake"] = { icon = " ", files = {}, extensions = {"cmake"}, modelines = {}, - color = 40, + color = "green", }, ["Cobol"] = { icon = "󰅩 ", files = {}, extensions = {"cbl", "cobol", "cob"}, modelines = {}, - color = 57, + color = "purple", }, ["Java"] = { icon = " ", files = {}, extensions = {"class", "java"}, modelines = {}, - color = 202, + color = "orange", }, ["Clojure"] = { icon = " ", files = {}, extensions = {"clj", "cl2", "cljs", "cljx", "cljc"}, modelines = {}, - color = 37, + color = "lightblue", }, ["CoffeeScript"] = { icon = " ", files = {}, extensions = {"coffee"}, modelines = {}, - color = 130, + color = "brown", }, ["Crystal"] = { icon = " ", files = {}, extensions = {"cr"}, modelines = {}, - color = 241, + color = "grey", }, ["Cuda"] = { icon = " ", files = {}, extensions = {"cu", "cuh"}, modelines = {}, - color = 76, + color = "green", }, ["C++"] = { icon = " ", files = {}, extensions = {"cpp", "cxx"}, modelines = {}, - color = 26, + color = "darkblue", }, ["C#"] = { icon = " ", files = {}, extensions = {"cs", "cshtml", "csx"}, modelines = {}, - color = 63, + color = "purple", }, ["CSS"] = { icon = " ", files = {}, extensions = {"css"}, modelines = {}, - color = 99, + color = "purple", }, ["CSV"] = { icon = " ", files = {}, extensions = {"csv"}, modelines = {}, - color = 248, + color = "grey", }, ["D"] = { icon = " ", files = {}, extensions = {"d", "di"}, modelines = {}, - color = 197, + color = "red", }, ["Dart"] = { icon = " ", files = {}, extensions = {"dart"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Diff"] = { icon = " ", files = {}, extensions = {"diff", "patch"}, modelines = {}, - color = 28, + color = "green", }, ["Dockerfile"] = { icon = " ", files = {}, extensions = {"dockerfile"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Elixir"] = { icon = " ", files = {}, extensions = {"ex", "exs"}, modelines = {}, - color = 56, + color = "purple", }, ["Elm"] = { icon = " ", files = {}, extensions = {"elm"}, modelines = {}, - color = 26, + color = "lightblue", }, ["Emacs Lisp"] = { icon = " ", files = {}, extensions = {"el"}, modelines = {}, - color = 63, + color = "purple", }, ["ERB"] = { icon = "󰅩 ", files = {}, extensions = {"erb"}, modelines = {}, - color = 196, + color = "red", }, ["Erlang"] = { icon = " ", files = {}, extensions = {"erl", "es"}, modelines = {}, - color = 196, + color = "red", }, ["F#"] = { icon = " ", files = {}, extensions = {"fs", "fsi", "fsx"}, modelines = {}, - color = 39, + color = "lightblue", }, ["FORTRAN"] = { icon = "󱈚 ", files = {}, extensions = {"f", "f90", "fpp", "for"}, modelines = {}, - color = 129, + color = "purple", }, ["Fish"] = { icon = " ", files = {}, extensions = {"fish"}, modelines = {"#!\\s*/usr/bin/(env )?fish"}, - color = 203, + color = "orange", }, ["Forth"] = { icon = "󰅩 ", files = {}, extensions = {"fth"}, modelines = {}, - color = 196, + color = "red", }, ["ANTLR"] = { icon = "󰅩 ", files = {}, extensions = {"g4"}, modelines = {}, - color = 196, + color = "red", }, ["GDScript"] = { icon = " ", files = {}, extensions = {"gd"}, modelines = {}, - color = 27, + color = "darkblue", }, ["GLSL"] = { icon = " ", files = {}, extensions = {"glsl", "vert", "shader", "geo", "fshader", "vrx", "vsh", "vshader", "frag"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Gnuplot"] = { icon = " ", files = {}, extensions = {"gnu", "gp", "plot"}, modelines = {}, - color = 249, + color = "grey", }, ["Go"] = { icon = "", files = {}, extensions = {"go"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Groovy"] = { icon = " ", files = {}, extensions = {"groovy", "gvy"}, modelines = {}, - color = 39, + color = "lightblue", }, ["HLSL"] = { icon = "󰅩 ", files = {}, extensions = {"hlsl"}, modelines = {}, - color = 21, + color = "darkblue", }, ["C Header"] = { icon = " ", files = {}, extensions = {"h"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Haml"] = { icon = "", files = {}, extensions = {"haml"}, modelines = {}, - color = 228, + color = "yellow", }, ["Handlebars"] = { icon = "󰅩 ", files = {}, extensions = {"handlebars", "hbs"}, modelines = {}, - color = 94, + color = "brown", }, ["Haskell"] = { icon = " ", files = {}, extensions = {"hs"}, modelines = {}, - color = 93, + color = "purple", }, ["C++ Header"] = { icon = " ", files = {}, extensions = {"hpp"}, modelines = {}, - color = 26, + color = "darkblue", }, ["HTML"] = { icon = " ", files = {}, extensions = {"html", "htm", "xhtml"}, modelines = {}, - color = 208, + color = "orange", }, ["INI"] = { icon = " ", files = {}, extensions = {"ini", "cfg"}, modelines = {}, - color = 248, + color = "grey", }, ["Arduino"] = { icon = " ", files = {}, extensions = {"ino"}, modelines = {}, - color = 75, + color = "lightblue", }, ["J"] = { icon = " ", files = {}, extensions = {"ijs"}, modelines = {}, - color = 45, + color = "lightblue", }, ["JSON"] = { icon = " ", files = {}, extensions = {"json"}, modelines = {}, - color = 247, + color = "grey", }, ["JSX"] = { icon = " ", files = {}, extensions = {"jsx"}, modelines = {}, - color = 33, + color = "lightblue", }, ["JavaScript"] = { icon = " ", files = {}, extensions = {"js"}, modelines = {"#!\\s*/usr/bin/(env )?node"}, - color = 220, + color = "yellow", }, ["Julia"] = { icon = " ", files = {}, extensions = {"jl"}, modelines = {}, - color = 27, + color = "lightblue", }, ["Kotlin"] = { icon = " ", files = {}, extensions = {"kt", "ktm", "kts"}, modelines = {}, - color = 129, + color = "purple", }, ["LLVM"] = { icon = "󰅩 ", files = {}, extensions = {"ll"}, modelines = {}, - color = 39, + color = "lightblue", }, ["Lex"] = { icon = "󰅩 ", files = {}, extensions = {"l", "lex"}, modelines = {}, - color = 249, + color = "grey", }, ["Lua"] = { icon = " ", files = {".oxrc"}, extensions = {"lua"}, modelines = {"#!\\s*/usr/bin/(env )?lua"}, - color = 27, + color = "darkblue", }, ["LiveScript"] = { icon = " ", files = {}, extensions = {"ls"}, modelines = {}, - color = 39, + color = "lightblue", }, ["LOLCODE"] = { icon = "󰅩 ", files = {}, extensions = {"lol"}, modelines = {}, - color = 160, + color = "red", }, ["Common Lisp"] = { icon = " ", files = {}, extensions = {"lisp", "asd", "lsp"}, modelines = {}, - color = 243, + color = "grey", }, ["Log file"] = { icon = " ", files = {}, extensions = {"log"}, modelines = {}, - color = 248, + color = "grey", }, ["M4"] = { icon = "󰅩 ", files = {}, extensions = {"m4"}, modelines = {}, - color = 21, + color = "darkblue", }, ["Groff"] = { icon = "󰅩 ", files = {}, extensions = {"man", "roff"}, modelines = {}, - color = 249, + color = "grey", }, ["Matlab"] = { icon = " ", files = {}, extensions = {"matlab"}, modelines = {}, - color = 202, + color = "orange", }, ["Objective-C"] = { icon = " ", files = {}, extensions = {"m"}, modelines = {}, - color = 27, + color = "lightblue", }, ["OCaml"] = { icon = " ", files = {}, extensions = {"ml"}, modelines = {}, - color = 208, + color = "orange", }, ["Makefile"] = { icon = " ", files = {"Makefile"}, extensions = {"mk", "mak"}, modelines = {}, - color = 249, + color = "grey", }, ["Markdown"] = { icon = " ", files = {}, extensions = {"md", "markdown"}, modelines = {}, - color = 243, + color = "grey", }, ["Nix"] = { icon = " ", files = {}, extensions = {"nix"}, modelines = {}, - color = 33, + color = "lightblue", }, ["NumPy"] = { icon = "󰘨 ", files = {}, extensions = {"numpy"}, modelines = {}, - color = 27, + color = "darkblue", }, ["OpenCL"] = { icon = "󰅩 ", files = {}, extensions = {"opencl", "cl"}, modelines = {}, - color = 76, + color = "green", }, ["PHP"] = { icon = "󰌟 ", files = {}, extensions = {"php"}, modelines = {"#!\\s*/usr/bin/(env )?php"}, - color = 69, + color = "lightblue", }, ["Pascal"] = { icon = "󰅩 ", files = {}, extensions = {"pas"}, modelines = {}, - color = 21, + color = "darkblue", }, ["Perl"] = { icon = " ", files = {}, extensions = {"pl"}, modelines = {"#!\\s*/usr/bin/(env )?perl"}, - color = 39, + color = "lightblue", }, ["PowerShell"] = { icon = "󰨊 ", files = {}, extensions = {"psl"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Prolog"] = { icon = " ", files = {}, extensions = {"pro"}, modelines = {}, - color = 202, + color = "orange", }, ["Python"] = { icon = " ", files = {}, extensions = {"py", "pyw"}, modelines = {"#!\\s*/usr/bin/(env )?python3?"}, - color = 33, + color = "lightblue", }, ["Cython"] = { icon = " ", files = {}, extensions = {"pyx", "pxd", "pxi"}, modelines = {}, - color = 27, + color = "darkblue", }, ["R"] = { icon = " ", files = {}, extensions = {"r"}, modelines = {}, - color = 27, + color = "darkblue", }, ["reStructuredText"] = { icon = "󰊄", files = {}, extensions = {"rst"}, modelines = {}, - color = 243, + color = "grey", }, ["Racket"] = { icon = "󰅩 ", files = {}, extensions = {"rkt"}, modelines = {}, - color = 160, + color = "red", }, ["Ruby"] = { icon = " ", files = {}, extensions = {"rb", "ruby"}, modelines = {"#!\\s*/usr/bin/(env )?ruby"}, - color = 196, + color = "red", }, ["Rust"] = { icon = " ", files = {}, extensions = {"rs"}, modelines = {"#!\\s*/usr/bin/(env )?rust"}, - color = 166, + color = "orange", }, ["Shell"] = { icon = " ", @@ -777,153 +788,153 @@ file_types = { "#!\\s*/bin/(sh|bash)", "#!\\s*/usr/bin/env bash", }, - color = 250, + color = "grey", }, ["SCSS"] = { icon = " ", files = {}, extensions = {"scss"}, modelines = {}, - color = 200, + color = "pink", }, ["SQL"] = { icon = " ", files = {}, extensions = {"sql"}, modelines = {}, - color = 75, + color = "lightblue", }, ["Sass"] = { icon = " ", files = {}, extensions = {"sass"}, modelines = {}, - color = 200, + color = "pink", }, ["Scala"] = { icon = "", files = {}, extensions = {"scala"}, modelines = {}, - color = 196, + color = "red", }, ["Scheme"] = { icon = "", files = {}, extensions = {"scm"}, modelines = {}, - color = 243, + color = "grey", }, ["Smalltalk"] = { icon = "󰅩 ", files = {}, extensions = {"st"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Swift"] = { icon = " ", files = {}, extensions = {"swift"}, modelines = {}, - color = 202, + color = "orange", }, ["TOML"] = { icon = " ", files = {}, extensions = {"toml"}, modelines = {}, - color = 209, + color = "orange", }, ["Tcl"] = { icon = "󰅩 ", files = {}, extensions = {"tcl"}, modelines = {"#!\\s*/usr/bin/(env )?tcl"}, - color = 196, + color = "red", }, ["TeX"] = { icon = " ", files = {}, extensions = {"tex"}, modelines = {}, - color = 243, + color = "grey", }, ["TypeScript"] = { icon = " ", files = {}, extensions = {"ts", "tsx"}, modelines = {}, - color = 27, + color = "darkblue", }, ["Plain Text"] = { icon = " ", files = {}, extensions = {"txt"}, modelines = {}, - color = 250, + color = "grey", }, ["Vala"] = { icon = " ", files = {}, extensions = {"vala"}, modelines = {}, - color = 135, + color = "purple", }, ["Visual Basic"] = { icon = "󰯁 ", files = {}, extensions = {"vb", "vbs"}, modelines = {}, - color = 69, + color = "purple", }, ["Vue"] = { icon = " ", files = {}, extensions = {"vue"}, modelines = {}, - color = 40, + color = "green", }, ["Logos"] = { icon = "󰅩 ", files = {}, extensions = {"xm", "x", "xi"}, modelines = {}, - color = 196, + color = "red", }, ["XML"] = { icon = "󰅩 ", files = {}, extensions = {"xml"}, modelines = {}, - color = 33, + color = "lightblue", }, ["Yacc"] = { icon = "󰅩 ", files = {}, extensions = {"y", "yacc"}, modelines = {}, - color = 249, + color = "grey", }, ["Yaml"] = { icon = "󰅩 ", files = {}, extensions = {"yaml", "yml"}, modelines = {}, - color = 161, + color = "red", }, ["Bison"] = { icon = "󰅩 ", files = {}, extensions = {"yxx"}, modelines = {}, - color = 249, + color = "grey", }, ["Zsh"] = { icon = " ", files = {}, extensions = {"zsh"}, modelines = {}, - color = 208, + color = "orange", }, } From 2899535274b8c05d147de020f26d60e2cce5291a Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:03:58 +0000 Subject: [PATCH 27/51] Theme specific icon colours --- config/.oxrc | 16 ++++++++-------- plugins/themes/default16.lua | 11 +++++++++++ plugins/themes/galaxy.lua | 11 +++++++++++ plugins/themes/omni.lua | 11 +++++++++++ plugins/themes/tropical.lua | 11 +++++++++++ plugins/todo.lua | 2 +- 6 files changed, 53 insertions(+), 9 deletions(-) diff --git a/config/.oxrc b/config/.oxrc index 4f32e0d4..4bab180a 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -410,14 +410,14 @@ colors.file_tree_fg = {255, 255, 255} colors.file_tree_selection_fg = {255, 255, 255} colors.file_tree_selection_bg = {59, 59, 130} -colors.file_tree_red = {240, 56, 36} -colors.file_tree_orange = {240, 107, 36} -colors.file_tree_yellow = {240, 236, 36} -colors.file_tree_green = {35, 240, 144} -colors.file_tree_lightblue = {36, 219, 240} -colors.file_tree_darkblue = {36, 117, 240} -colors.file_tree_purple = {104, 36, 240} -colors.file_tree_pink = {206, 36, 240} +colors.file_tree_red = {240, 104, 89} +colors.file_tree_orange = {240, 142, 89} +colors.file_tree_yellow = {240, 237, 89} +colors.file_tree_green = {89, 240, 169} +colors.file_tree_lightblue = {89, 225, 240} +colors.file_tree_darkblue = {89, 149, 240} +colors.file_tree_purple = {139, 89, 240} +colors.file_tree_pink = {215, 89, 240} colors.file_tree_brown = {158, 94, 94} colors.file_tree_grey = {150, 144, 201} diff --git a/plugins/themes/default16.lua b/plugins/themes/default16.lua index 8b686f2b..12771158 100644 --- a/plugins/themes/default16.lua +++ b/plugins/themes/default16.lua @@ -53,6 +53,17 @@ colors.file_tree_fg = white colors.file_tree_selection_bg = darkgrey colors.file_tree_selection_fg = cyan +colors.file_tree_red = red +colors.file_tree_orange = darkyellow +colors.file_tree_yellow = yellow +colors.file_tree_green = green +colors.file_tree_lightblue = blue +colors.file_tree_darkblue = darkblue +colors.file_tree_purple = darkmagenta +colors.file_tree_pink = magenta +colors.file_tree_brown = darkred +colors.file_tree_grey = grey + -- Configure Syntax Highlighting Colours -- syntax:set("string", green) -- Strings, bright green syntax:set("comment", darkgrey) -- Comments, light purple/gray diff --git a/plugins/themes/galaxy.lua b/plugins/themes/galaxy.lua index fc8035d3..e1da9e5e 100644 --- a/plugins/themes/galaxy.lua +++ b/plugins/themes/galaxy.lua @@ -49,6 +49,17 @@ colors.file_tree_fg = white colors.file_tree_selection_bg = purple colors.file_tree_selection_fg = black +colors.file_tree_red = {247, 156, 156} +colors.file_tree_orange = {247, 165, 156} +colors.file_tree_yellow = {247, 226, 156} +colors.file_tree_green = {191, 247, 156} +colors.file_tree_lightblue = {156, 214, 247} +colors.file_tree_darkblue = {156, 163, 247} +colors.file_tree_purple = {197, 156, 247} +colors.file_tree_pink = {246, 156, 247} +colors.file_tree_brown = {163, 118, 118} +colors.file_tree_grey = {160, 157, 191} + -- Configure Syntax Highlighting Colours -- syntax:set("string", green) -- Strings, bright green syntax:set("comment", grey3) -- Comments, light purple/gray diff --git a/plugins/themes/omni.lua b/plugins/themes/omni.lua index 6f4244e4..7a1f6130 100644 --- a/plugins/themes/omni.lua +++ b/plugins/themes/omni.lua @@ -49,6 +49,17 @@ colors.file_tree_fg = foreground colors.file_tree_selection_bg = pink colors.file_tree_selection_fg = background +colors.file_tree_red = {255, 128, 128} +colors.file_tree_orange = {255, 155, 128} +colors.file_tree_yellow = {255, 204, 128} +colors.file_tree_green = {196, 255, 128} +colors.file_tree_lightblue = {128, 236, 255} +colors.file_tree_darkblue = {128, 147, 255} +colors.file_tree_purple = {204, 128, 255} +colors.file_tree_pink = {255, 128, 200} +colors.file_tree_brown = {163, 108, 108} +colors.file_tree_grey = {155, 153, 176} + -- Configure Syntax Highlighting Colours -- syntax:set("string", yellow) -- Strings, fresh green syntax:set("comment", comment) -- Comments, muted and subtle diff --git a/plugins/themes/tropical.lua b/plugins/themes/tropical.lua index 38c48cb9..a4033fa2 100644 --- a/plugins/themes/tropical.lua +++ b/plugins/themes/tropical.lua @@ -49,6 +49,17 @@ colors.file_tree_fg = white colors.file_tree_selection_bg = lightblue colors.file_tree_selection_fg = black +colors.file_tree_red = {245, 127, 127} +colors.file_tree_orange = {245, 169, 127} +colors.file_tree_yellow = {245, 217, 127} +colors.file_tree_green = {165, 245, 127} +colors.file_tree_lightblue = {127, 227, 245} +colors.file_tree_darkblue = {127, 145, 245} +colors.file_tree_purple = {190, 127, 245} +colors.file_tree_pink = {245, 127, 217} +colors.file_tree_brown = {163, 116, 116} +colors.file_tree_grey = {191, 190, 196} + -- Configure Syntax Highlighting Colours -- syntax:set("string", lightblue) -- Strings, bright green syntax:set("comment", grey3) -- Comments, light purple/gray diff --git a/plugins/todo.lua b/plugins/todo.lua index c0ad58f8..f95c9661 100644 --- a/plugins/todo.lua +++ b/plugins/todo.lua @@ -12,7 +12,7 @@ file_types["Todo"] = { extensions = {"todo"}, files = {".todo.md", ".todo"}, modelines = {}, - color = 247, + color = "grey", } -- Add syntax highlighting to .todo files (done todos are comments) From b884fdf110a66a906d1dca837a947533ab9ee2f6 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:17:37 +0000 Subject: [PATCH 28/51] Better file tree width management --- config/.oxrc | 2 +- src/config/filetree.rs | 4 ++-- src/editor/filetree.rs | 6 ++++-- src/editor/interface.rs | 8 +++++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/config/.oxrc b/config/.oxrc index 4bab180a..ae81a5a7 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -431,7 +431,7 @@ terminal.mouse_enabled = true terminal.scroll_amount = 4 -- Configure File Tree -- -file_tree.width = 0.2 +file_tree.width = 30 file_tree.move_focus_to_file = true file_tree.icons = false file_tree.language_icons = true diff --git a/src/config/filetree.rs b/src/config/filetree.rs index 6401d2f9..44f0e75e 100644 --- a/src/config/filetree.rs +++ b/src/config/filetree.rs @@ -3,7 +3,7 @@ use mlua::prelude::*; #[derive(Debug)] pub struct FileTree { - pub width: f64, + pub width: usize, pub move_focus_to_file: bool, pub icons: bool, pub language_icons: bool, @@ -12,7 +12,7 @@ pub struct FileTree { impl Default for FileTree { fn default() -> Self { Self { - width: 0.2, + width: 30, move_focus_to_file: true, icons: false, language_icons: true, diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 5eec7c42..2f2e0087 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -1,6 +1,7 @@ /// Utilities for handling the file tree use crate::config::FileTree as CfgFT; use crate::editor::FileLayout; +use crate::ui::size; use crate::{config, Editor, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; @@ -298,8 +299,9 @@ impl Editor { pub fn open_file_tree(&mut self) { if !self.file_tree_is_open() { // Calculate display proportions - let width = config!(self.config, file_tree).width; - let other = if width <= 1.0 { 1.0 - width } else { 0.0 }; + let total_width = size().map(|s| s.w as f64).unwrap_or(1.0); + let width = config!(self.config, file_tree).width as f64 / total_width; + let other = 1.0 - width as f64; // Set up file tree values self.old_ptr = self.ptr.clone(); if let Some(cwd) = get_cwd() { diff --git a/src/editor/interface.rs b/src/editor/interface.rs index df135bbb..017afb28 100644 --- a/src/editor/interface.rs +++ b/src/editor/interface.rs @@ -1,5 +1,4 @@ /// Functions for rendering the UI - use crate::config::SyntaxHighlighting as SH; use crate::editor::{FTParts, FileLayout}; use crate::error::{OxError, Result}; @@ -589,6 +588,13 @@ impl Editor { } else { String::new() }; + while total_length > length { + if let Some(ch) = line.pop() { + total_length -= width_char(&ch, 4); + } else { + break; + } + } line += &" ".repeat(length.saturating_sub(total_length)); // Return result if selected { From fa797c89e1ea384eab795a0a52053892bc16b372 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:19:32 +0000 Subject: [PATCH 29/51] Option to back up to parent directory --- src/editor/filetree.rs | 67 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 2f2e0087..ee1f98bb 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -11,7 +11,7 @@ use std::path::{Path, PathBuf}; pub type FTParts = Vec<(usize, String, Option, String)>; /// The backend of a file tree - stores the structure of the files and directories -#[derive(Debug)] +#[derive(Debug, Clone)] pub enum FileTree { /// Represents a file File { path: String }, @@ -226,6 +226,25 @@ impl FileTree { /// Display this file tree pub fn display(&self, sel: &str, fts: &FileTypes, cfg: &CfgFT) -> (FTParts, Option) { + let mut result = self.display_recursive(sel, fts, cfg); + result + .0 + .insert(0, (0, "󰉖 ".to_string(), None, "..".to_string())); + if sel == ".." { + result.1 = Some(0); + } else if let Some(ref mut at) = result.1 { + *at += 1; + } + result + } + + /// Display this file tree (recursive) + pub fn display_recursive( + &self, + sel: &str, + fts: &FileTypes, + cfg: &CfgFT, + ) -> (FTParts, Option) { let icons = cfg.icons; match self { Self::File { path } => { @@ -257,7 +276,7 @@ impl FileTree { // Write child nodes if let Some(files) = files { for file in files { - let (sub_display, sub_at) = file.display(sel, fts, cfg); + let (sub_display, sub_at) = file.display_recursive(sel, fts, cfg); for (c, s) in sub_display.iter().enumerate() { let mut s = s.clone(); s.0 += 1; @@ -277,6 +296,13 @@ impl FileTree { /// Find the file path at a certain index pub fn flatten(&self) -> Vec { + let mut result = self.flatten_recursive(); + result.insert(0, "..".to_string()); + result + } + + /// Find the file path at a certain index (recursive) + pub fn flatten_recursive(&self) -> Vec { match self { Self::File { path } => vec![path.to_string()], Self::Dir { path, files } => { @@ -284,13 +310,27 @@ impl FileTree { result.push(path.to_string()); if let Some(files) = files { for file in files { - result.append(&mut file.flatten()); + result.append(&mut file.flatten_recursive()); } } result } } } + + /// Expand this file tree upwards towards parent + pub fn open_parent(&self) -> Result { + if let Self::Dir { path, files } = self { + let parent_path = format!("{path}/.."); + let mut parent = Self::build(&parent_path)?; + if let Some(Self::Dir { files: child, .. }) = parent.get_mut(path) { + child.clone_from(&files.clone()); + } + Ok(parent) + } else { + Err(OxError::InvalidPath) + } + } } impl Editor { @@ -423,10 +463,14 @@ impl Editor { /// Open a certain file / directory in a file tree pub fn file_tree_open_node(&mut self) -> Result<()> { if let Some(file_name) = &self.file_tree_selection.clone() { - match file_or_dir(file_name) { - "file" => self.file_tree_open_file()?, - "directory" => self.file_tree_toggle_dir(), - _ => (), + if file_name == ".." { + self.file_tree_open_parent()?; + } else { + match file_or_dir(file_name) { + "file" => self.file_tree_open_file()?, + "directory" => self.file_tree_toggle_dir(), + _ => (), + } } } Ok(()) @@ -454,6 +498,7 @@ impl Editor { Ok(()) } + /// Toggle a directory to expand or contract pub fn file_tree_toggle_dir(&mut self) { if let Some(ref mut file_tree) = &mut self.file_tree { if let Some(file_name) = self.file_tree_selection.as_ref() { @@ -471,4 +516,12 @@ impl Editor { } } } + + /// Expand this tree up to the parent + pub fn file_tree_open_parent(&mut self) -> Result<()> { + if let Some(ref mut file_tree) = &mut self.file_tree { + self.file_tree = Some(file_tree.open_parent()?); + } + Ok(()) + } } From a7883adc60c92f2f410dfc34c925d3d64a128d21 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:30:53 +0000 Subject: [PATCH 30/51] Added convenient file tree shortcuts --- src/editor/filetree.rs | 37 +++++++++++++++++++++++++++++++++++++ src/editor/mod.rs | 3 +++ 2 files changed, 40 insertions(+) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index ee1f98bb..3fb4b132 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -524,4 +524,41 @@ impl Editor { } Ok(()) } + + /// Expand this tree up to the parent + pub fn file_tree_move_into(&mut self) { + if let Some(ref mut file_tree) = &mut self.file_tree { + if let Some(file_name) = self.file_tree_selection.as_ref() { + if let Some(node) = file_tree.get_mut(file_name) { + if let FileTree::Dir { files, .. } = node { + if files.is_none() { + // Expand if not already expanded + node.expand(); + } + *file_tree = node.clone(); + } + } + } + } + } + + /// Move to the top of the file tree + pub fn file_tree_move_to_top(&mut self) { + if let Some(ref mut file_tree) = &mut self.file_tree { + self.file_tree_selection = file_tree + .flatten() + .first() + .map(std::string::ToString::to_string); + } + } + + /// Move to the bottom of the file tree + pub fn file_tree_move_to_bottom(&mut self) { + if let Some(ref mut file_tree) = &mut self.file_tree { + self.file_tree_selection = file_tree + .flatten() + .last() + .map(std::string::ToString::to_string); + } + } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index b0456863..5c1cad25 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -456,6 +456,9 @@ impl Editor { (KMod::NONE, KCode::Up) => self.file_tree_select_up(), (KMod::NONE, KCode::Down) => self.file_tree_select_down(), (KMod::NONE, KCode::Enter) => self.file_tree_open_node()?, + (KMod::CONTROL, KCode::Up) => self.file_tree_move_to_top(), + (KMod::CONTROL, KCode::Down) => self.file_tree_move_to_bottom(), + (KMod::CONTROL, KCode::Enter) => self.file_tree_move_into(), _ => (), } } else { From 0a5dca22f06edbe2389cdffac8d75971c8995b7e Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:08:00 +0000 Subject: [PATCH 31/51] Added new/delete/move/copy options to file tree --- src/editor/filetree.rs | 114 ++++++++++++++++++++++++++++++++++++++++- src/editor/mod.rs | 4 ++ 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 3fb4b132..5e1bf87c 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -2,7 +2,7 @@ use crate::config::FileTree as CfgFT; use crate::editor::FileLayout; use crate::ui::size; -use crate::{config, Editor, FileTypes, OxError, Result}; +use crate::{config, Editor, Feedback, FileTypes, OxError, Result}; use kaolinite::utils::{file_or_dir, get_cwd, get_file_name}; use std::path::{Path, PathBuf}; @@ -331,6 +331,45 @@ impl FileTree { Err(OxError::InvalidPath) } } + + /// Get all directories that have been expanded + pub fn get_expanded(&mut self) -> Vec { + let mut result = vec![]; + match self { + Self::File { .. } => (), + Self::Dir { files, path } => { + if let Some(files) = files { + // Pre-order traversal - very important this remains! + result.push(path.clone()); + for file in files { + result.append(&mut file.get_expanded()); + } + } + } + } + result + } + + /// Refresh all open directories + pub fn refresh(&mut self) { + if let Self::Dir { + files: Some(_), + path, + } = self + { + // Rebuild the tree + if let Ok(mut result) = Self::build(path) { + // Re expand the tree + let expanded = self.get_expanded(); + for dir in expanded { + if let Some(dir) = result.get_mut(&dir) { + dir.expand(); + } + } + *self = result; + } + } + } } impl Editor { @@ -561,4 +600,77 @@ impl Editor { .map(std::string::ToString::to_string); } } + + /// Create a new file / folder + pub fn file_tree_new(&mut self) -> Result<()> { + let path = self.path_prompt()?; + if path.ends_with(std::path::MAIN_SEPARATOR) { + std::fs::create_dir_all(path)?; + self.file_tree_refresh(); + self.feedback = Feedback::Info("Folder created".to_string()); + } else { + std::fs::File::create(path)?; + self.file_tree_refresh(); + self.feedback = Feedback::Info("File created".to_string()); + } + Ok(()) + } + + /// Delete a file + pub fn file_tree_delete(&mut self) -> Result<()> { + if let Some(file_name) = &self.file_tree_selection.clone() { + let prompt = + self.prompt(format!("Are you sure you wish to delete {file_name} (y/n)"))?; + if prompt == "y" { + if file_or_dir(file_name) == "file" { + std::fs::remove_file(file_name)?; + self.file_tree_refresh(); + self.file_tree_select_up(); + self.feedback = Feedback::Info("File deleted".to_string()); + } else { + self.feedback = Feedback::Error( + "Folders can't be deleted in Ox: too dangerous".to_string(), + ); + } + } + } + Ok(()) + } + + /// Copy a file + pub fn file_tree_copy(&mut self) -> Result<()> { + if let Some(old_file) = &self.file_tree_selection.clone() { + let path = self.path_prompt()?; + if file_or_dir(old_file) == "file" { + std::fs::copy(old_file, path)?; + self.file_tree_refresh(); + self.feedback = Feedback::Info("File copied".to_string()); + } else { + self.feedback = Feedback::Error("Not a file".to_string()); + } + } + Ok(()) + } + + /// Move (or rename) a file / folder + pub fn file_tree_move(&mut self) -> Result<()> { + if let Some(old_file) = &self.file_tree_selection.clone() { + let path = self.path_prompt()?; + std::fs::rename(old_file, path.clone())?; + self.file_tree_refresh(); + if file_or_dir(&path) == "file" { + self.feedback = Feedback::Info("File moved".to_string()); + } else if file_or_dir(&path) == "directory" { + self.feedback = Feedback::Info("Folder moved".to_string()); + } + } + Ok(()) + } + + /// Refresh the file tree + pub fn file_tree_refresh(&mut self) { + if let Some(ref mut file_tree) = self.file_tree { + file_tree.refresh(); + } + } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 5c1cad25..61cd5490 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -459,6 +459,10 @@ impl Editor { (KMod::CONTROL, KCode::Up) => self.file_tree_move_to_top(), (KMod::CONTROL, KCode::Down) => self.file_tree_move_to_bottom(), (KMod::CONTROL, KCode::Enter) => self.file_tree_move_into(), + (KMod::NONE, KCode::Char('n')) => self.file_tree_new()?, + (KMod::NONE, KCode::Char('d')) => self.file_tree_delete()?, + (KMod::NONE, KCode::Char('m')) => self.file_tree_move()?, + (KMod::NONE, KCode::Char('c')) => self.file_tree_copy()?, _ => (), } } else { From d2a0e75bb635669bccddecf38b68e8da3e751fe6 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:41:03 +0000 Subject: [PATCH 32/51] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f840f713..3759db01 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ It works best on linux, but macOS and Windows are also supported. - :writing_hand: Convenient shortcuts when writing code - :crossed_swords: Multi-editing features such as multiple cursors and recordable macros - :window: Splits to view multiple documents on the same screen at the same time +- :file_folder: File tree to view, open, create, delete, copy and move files ### Robustness From 10a2ac7a663b977b8a3bf98aa4bf7dfb7632fa1d Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:43:08 +0000 Subject: [PATCH 33/51] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3759db01..9ae5aa73 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ It works best on linux, but macOS and Windows are also supported. - :writing_hand: Convenient shortcuts when writing code - :crossed_swords: Multi-editing features such as multiple cursors and recordable macros - :window: Splits to view multiple documents on the same screen at the same time -- :file_folder: File tree to view, open, create, delete, copy and move files +- :card_box: File tree to view, open, create, delete, copy and move files ### Robustness From 4721103a04a05cb9498e53f21813d1270d7adbe8 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:43:39 +0000 Subject: [PATCH 34/51] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ae5aa73..0c980cd7 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ It works best on linux, but macOS and Windows are also supported. - :writing_hand: Convenient shortcuts when writing code - :crossed_swords: Multi-editing features such as multiple cursors and recordable macros - :window: Splits to view multiple documents on the same screen at the same time -- :card_box: File tree to view, open, create, delete, copy and move files +- :file_cabinet: File tree to view, open, create, delete, copy and move files ### Robustness From f2403cd6146d4bafb434f5dd1ddee2385e467291 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:54:52 +0000 Subject: [PATCH 35/51] Rejection of opening directories --- src/editor/mod.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 61cd5490..298d848d 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -7,7 +7,7 @@ use crossterm::event::{ Event as CEvent, KeyCode as KCode, KeyModifiers as KMod, MouseEvent, MouseEventKind, }; use kaolinite::event::Error as KError; -use kaolinite::utils::{get_absolute_path, get_file_name}; +use kaolinite::utils::{file_or_dir, get_absolute_path, get_file_name}; use kaolinite::{Document, Loc}; use mlua::{Error as LuaError, Lua}; use std::env; @@ -179,6 +179,13 @@ impl Editor { /// Function to create a file container pub fn open_fc(&mut self, file_name: &str) -> Result { + // Reject the opening of directories + if file_or_dir(file_name) != "file" { + return Err(OxError::Kaolinite(KError::Io(std::io::Error::new( + std::io::ErrorKind::IsADirectory, + "This is a directory, not a file", + )))); + } // Check if a file is already opened if let Some((idx, ptr)) = self.already_open(&get_absolute_path(file_name).unwrap_or_default()) From 053db8086bf818a444c2b20c0b9b212795c0e9b6 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:15:21 +0000 Subject: [PATCH 36/51] Proper closing in relation to file tree and cleaner file layout structure --- src/editor/documents.rs | 39 +++++++++++++++++++++++++++++++++++++++ src/editor/mod.rs | 4 +++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/editor/documents.rs b/src/editor/documents.rs index ee74a33e..ba81d9fe 100644 --- a/src/editor/documents.rs +++ b/src/editor/documents.rs @@ -324,6 +324,24 @@ impl FileLayout { } } + /// Remove any empty atoms + pub fn clean_up_multis(&mut self, mut idx: Vec) -> Vec { + // Continue checking for redundant sidebyside / toptobottom + while let Some(redundant_idx) = self.redundant_multis(vec![]) { + let multi = self.get_raw_mut(redundant_idx.clone()); + if let Some(layout) = multi { + if let Self::SideBySide(layouts) | Self::TopToBottom(layouts) = layout { + *layout = layouts[0].0.clone(); + if idx.starts_with(&redundant_idx) { + idx.remove(redundant_idx.len()); + return idx; + } + } + } + } + idx + } + /// Remove a certain index from this tree #[allow(clippy::cast_precision_loss)] pub fn remove(&mut self, at: Vec) { @@ -382,6 +400,27 @@ impl FileLayout { } } + /// Traverse the tree and return a list of indices to redundant sidebyside/toptobottom + pub fn redundant_multis(&self, at: Vec) -> Option> { + match self { + Self::None | Self::FileTree | Self::Atom(_, _) => None, + Self::SideBySide(layouts) | Self::TopToBottom(layouts) => { + if layouts.len() == 1 { + Some(at) + } else { + for (c, layout) in layouts.iter().enumerate() { + let mut idx = at.clone(); + idx.push(c); + if let Some(result) = layout.0.redundant_multis(idx) { + return Some(result); + } + } + None + } + } + } + } + /// Find a new pointer position when something is removed pub fn new_pointer_position(&self, old: &[usize]) -> Vec { // Zoom out until a sidebyside or toptobottom is found diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 298d848d..cb520b95 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -348,10 +348,12 @@ impl Editor { self.files.clean_up(); // Find a new pointer position self.ptr = self.files.new_pointer_position(&self.ptr); + // Clean up the redundant sidebyside/toptobottom + self.ptr = self.files.clean_up_multis(self.ptr.clone()); } } // If there are no longer any active atoms, quit the entire editor - self.active = !matches!(self.files, FileLayout::None); + self.active = !matches!(self.files, FileLayout::None | FileLayout::FileTree); Ok(()) } From 31dedc4da472afeeefaa23087c09f945a1d39c77 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:58:46 +0000 Subject: [PATCH 37/51] Stopped panics using mouse with the file tree --- src/editor/filetree.rs | 22 ++++------------------ src/editor/mouse.rs | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/editor/filetree.rs b/src/editor/filetree.rs index 5e1bf87c..b73dd23a 100644 --- a/src/editor/filetree.rs +++ b/src/editor/filetree.rs @@ -390,24 +390,10 @@ impl Editor { } } // Wrap existing file layout in new file layout - if let FileLayout::SideBySide(ref mut layouts) = &mut self.files { - // Shrink existing splits - let redistribute = width / layouts.len() as f64; - for (_, prop) in &mut *layouts { - if *prop >= redistribute { - *prop -= redistribute; - } else { - *prop = 0.0; - } - } - // Insert file tree - layouts.insert(0, (FileLayout::FileTree, width)); - } else { - self.files = FileLayout::SideBySide(vec![ - (FileLayout::FileTree, width), - (self.files.clone(), other), - ]); - } + self.files = FileLayout::SideBySide(vec![ + (FileLayout::FileTree, width), + (self.files.clone(), other), + ]); self.ptr = vec![0]; } } diff --git a/src/editor/mouse.rs b/src/editor/mouse.rs index e1800910..c31c7f44 100644 --- a/src/editor/mouse.rs +++ b/src/editor/mouse.rs @@ -107,6 +107,7 @@ impl Editor { } match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); if let Some(doc) = self.try_doc_mut() { doc.clear_cursors(); @@ -117,6 +118,7 @@ impl Editor { } MouseLocation::Tabs(idx, i) => { self.files.move_to(idx.clone(), i); + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); self.update_cwd(); } @@ -126,6 +128,7 @@ impl Editor { MouseEventKind::Down(MouseButton::Right) => { // Select the current line if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); if let Some(doc) = self.try_doc_mut() { doc.select_line_at(loc.y); @@ -158,6 +161,7 @@ impl Editor { match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { if self.try_doc().is_some() { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); let doc = self.try_doc().unwrap(); loc.x = doc.character_idx(&loc); @@ -189,6 +193,7 @@ impl Editor { match self.find_mouse_location(lua, event) { MouseLocation::File(idx, mut loc) => { if self.try_doc().is_some() { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); let doc = self.try_doc_mut().unwrap(); loc.x = doc.character_idx(&loc); @@ -219,6 +224,7 @@ impl Editor { MouseEventKind::ScrollDown | MouseEventKind::ScrollUp => { let scroll_amount = config!(self.config, terminal).scroll_amount; if let MouseLocation::File(idx, _) = self.find_mouse_location(lua, event) { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); if let Some(doc) = self.try_doc_mut() { for _ in 0..scroll_amount { @@ -247,6 +253,7 @@ impl Editor { KeyModifiers::CONTROL => { if let MouseEventKind::Down(MouseButton::Left) = event.kind { if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); if let Some(doc) = self.try_doc_mut() { doc.new_cursor(loc); @@ -263,6 +270,7 @@ impl Editor { pub fn handle_double_click(&mut self, lua: &Lua, event: MouseEvent) { // Select the current word if let MouseLocation::File(idx, loc) = self.find_mouse_location(lua, event) { + self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); if let Some(doc) = self.try_doc_mut() { doc.select_word_at(&loc); @@ -274,4 +282,12 @@ impl Editor { } } } + + /// Cache the old ptr + fn cache_old_ptr(&mut self, idx: &Vec) { + self.old_ptr.clone_from(idx); + if self.file_tree_is_open() && !self.old_ptr.is_empty() { + self.old_ptr.remove(0); + } + } } From 8977f04b1cdac14c0c0c9bd261fd71e792fac15c Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:18:02 +0000 Subject: [PATCH 38/51] Added mouse interaction with file tree --- src/editor/mod.rs | 2 +- src/editor/mouse.rs | 39 +++++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index cb520b95..10eeda6f 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -446,7 +446,7 @@ impl Editor { match event { CEvent::Key(key) => self.handle_key_event(key.modifiers, key.code)?, CEvent::Resize(_, _) => self.handle_resize(lua)?, - CEvent::Mouse(mouse_event) => self.handle_mouse_event(lua, mouse_event), + CEvent::Mouse(mouse_event) => self.handle_mouse_event(lua, mouse_event)?, CEvent::Paste(text) => self.handle_paste(&text)?, _ => (), } diff --git a/src/editor/mouse.rs b/src/editor/mouse.rs index c31c7f44..a5ee7a7b 100644 --- a/src/editor/mouse.rs +++ b/src/editor/mouse.rs @@ -1,5 +1,5 @@ /// For handling mouse events -use crate::config; +use crate::{config, Result}; use crossterm::event::{KeyModifiers, MouseButton, MouseEvent, MouseEventKind}; use kaolinite::{utils::width, Loc}; use mlua::Lua; @@ -13,6 +13,8 @@ enum MouseLocation { File(Vec, Loc), /// Where the mouse has clicked on a tab Tabs(Vec, usize), + /// Where the mouse has clicked in the file tree + FileTree(usize), /// Mouse has clicked nothing of importance Out, } @@ -80,7 +82,7 @@ impl Editor { } } else { // Pretty sure we just clicked on the file tree (split with no atom!) - MouseLocation::Out + MouseLocation::FileTree(row) } } else { MouseLocation::Out @@ -89,23 +91,26 @@ impl Editor { /// Handles a mouse event (dragging / clicking) #[allow(clippy::too_many_lines)] - pub fn handle_mouse_event(&mut self, lua: &Lua, event: MouseEvent) { + pub fn handle_mouse_event(&mut self, lua: &Lua, event: MouseEvent) -> Result<()> { match event.modifiers { KeyModifiers::NONE => match event.kind { // Single click MouseEventKind::Down(MouseButton::Left) => { + let location = self.find_mouse_location(lua, event); + let clicked_in_ft = matches!(location, MouseLocation::FileTree(_)); // Determine if there has been a click within 500ms if let Some((time, last_event)) = self.last_click { let now = Instant::now(); let short_period = now.duration_since(time) <= Duration::from_millis(500); let same_location = last_event.column == event.column && last_event.row == event.row; - if short_period && same_location { + // If the user quickly clicked twice in the same location (outside the file tree) + if short_period && same_location && !clicked_in_ft { self.handle_double_click(lua, event); - return; + return Ok(()); } } - match self.find_mouse_location(lua, event) { + match location { MouseLocation::File(idx, mut loc) => { self.cache_old_ptr(&idx); self.ptr.clone_from(&idx); @@ -122,6 +127,19 @@ impl Editor { self.ptr.clone_from(&idx); self.update_cwd(); } + MouseLocation::FileTree(y) => { + // Move the focus into the file tree + self.ptr = vec![0]; + // Handle the click + if let Some(ft) = &self.file_tree { + // Move selection to where we clicked + if let Some(item) = ft.flatten().get(y) { + self.file_tree_selection = Some(item.to_string()); + // Toggle the node + self.file_tree_open_node()?; + } + } + } MouseLocation::Out => (), } } @@ -186,7 +204,9 @@ impl Editor { } } } - MouseLocation::Tabs(_, _) | MouseLocation::Out => (), + MouseLocation::Tabs(_, _) + | MouseLocation::Out + | MouseLocation::FileTree(_) => (), } } MouseEventKind::Drag(MouseButton::Right) => { @@ -217,7 +237,9 @@ impl Editor { } } } - MouseLocation::Tabs(_, _) | MouseLocation::Out => (), + MouseLocation::Tabs(_, _) + | MouseLocation::Out + | MouseLocation::FileTree(_) => (), } } // Mouse scroll behaviour @@ -264,6 +286,7 @@ impl Editor { } _ => (), } + Ok(()) } /// Handle a double-click event From aafe0136a6f9b4f460ec27b6642290e8fd5b19bf Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:29:03 +0000 Subject: [PATCH 39/51] Removed need to focus when clicking on file tree --- src/editor/mouse.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/editor/mouse.rs b/src/editor/mouse.rs index a5ee7a7b..fd829cc9 100644 --- a/src/editor/mouse.rs +++ b/src/editor/mouse.rs @@ -128,8 +128,6 @@ impl Editor { self.update_cwd(); } MouseLocation::FileTree(y) => { - // Move the focus into the file tree - self.ptr = vec![0]; // Handle the click if let Some(ft) = &self.file_tree { // Move selection to where we clicked From 6d4e58c2a9d43f136f23bd8bf80c1a1dd5fb3bbf Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:31:07 +0000 Subject: [PATCH 40/51] Attempt to fix cwd and odd file confusion bug --- kaolinite/src/document/disk.rs | 5 ++++- src/config/editor.rs | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/kaolinite/src/document/disk.rs b/kaolinite/src/document/disk.rs index 1b46fe94..cd6b692f 100644 --- a/kaolinite/src/document/disk.rs +++ b/kaolinite/src/document/disk.rs @@ -53,8 +53,11 @@ impl Document { /// disk errors. #[cfg(not(tarpaulin_include))] pub fn open>(size: Size, file_name: S) -> Result { + // Try to find the absolute path and load it into the reader let file_name = file_name.into(); - let file = load_rope_from_reader(BufReader::new(File::open(&file_name)?)); + let full_path = std::fs::canonicalize(&file_name)?; + let file = load_rope_from_reader(BufReader::new(File::open(&full_path)?)); + // Find the string representation of the absolute path let file_name = get_absolute_path(&file_name); Ok(Self { info: DocumentInfo { diff --git a/src/config/editor.rs b/src/config/editor.rs index 12e340a1..9a327996 100644 --- a/src/config/editor.rs +++ b/src/config/editor.rs @@ -653,10 +653,12 @@ impl LuaUserData for Editor { ); methods.add_method_mut("focus_split_up", |_, editor, ()| { editor.ptr = FileLayout::move_up(editor.ptr.clone(), &editor.render_cache.span); + editor.update_cwd(); Ok(()) }); methods.add_method_mut("focus_split_down", |_, editor, ()| { editor.ptr = FileLayout::move_down(editor.ptr.clone(), &editor.render_cache.span); + editor.update_cwd(); Ok(()) }); methods.add_method_mut("focus_split_left", |_, editor, ()| { @@ -671,10 +673,12 @@ impl LuaUserData for Editor { editor.old_ptr.pop(); } editor.ptr = new_ptr; + editor.update_cwd(); Ok(()) }); methods.add_method_mut("focus_split_right", |_, editor, ()| { editor.ptr = FileLayout::move_right(editor.ptr.clone(), &editor.render_cache.span); + editor.update_cwd(); Ok(()) }); // Searching and replacing From 58c957b9b5fe51bf26f048e6fb120b764b781ef5 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:33:32 +0000 Subject: [PATCH 41/51] Further attempt to reduce issues regarding cwd --- src/editor/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 10eeda6f..66d281c7 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -380,7 +380,7 @@ impl Editor { /// Updates the current working directory of the editor pub fn update_cwd(&self) { if let Some(doc) = self.try_doc() { - if let Some(name) = get_absolute_path(&doc.file_name.clone().unwrap_or_default()) { + if let Some(name) = &doc.file_name { let file = Path::new(&name); if let Some(cwd) = file.parent() { let _ = env::set_current_dir(cwd); From ae58bad0d8c2a96448342b378822505397b307aa Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:36:44 +0000 Subject: [PATCH 42/51] Added keyboard shortcuts for focussing splits --- config/.oxrc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/config/.oxrc b/config/.oxrc index ae81a5a7..f72ce6f8 100644 --- a/config/.oxrc +++ b/config/.oxrc @@ -276,6 +276,19 @@ event_mapping = { editor:macro_record_stop() editor:display_info("Macro recorded") end, + -- Splits + ["ctrl_alt_left"] = function() + editor:focus_split_left() + end, + ["ctrl_alt_right"] = function() + editor:focus_split_right() + end, + ["ctrl_alt_down"] = function() + editor:focus_split_down() + end, + ["ctrl_alt_up"] = function() + editor:focus_split_up() + end, -- File Tree ["ctrl_space"] = function() editor:toggle_file_tree() From 134a4f42a86f0c33ba2ae7be0fc427986e577b18 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 23:02:09 +0000 Subject: [PATCH 43/51] Fixed bug with wrong save as file being used --- src/editor/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 66d281c7..f6e089af 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -286,8 +286,8 @@ impl Editor { self.try_doc_mut().unwrap().save_as(&file_name)?; if self.try_doc().unwrap().file_name.is_none() { let tab_width = config!(self.config, document).tab_width; - if let Some((files, _)) = self.files.get_atom_mut(self.ptr.clone()) { - let file = files.last_mut().unwrap(); + if let Some((files, ptr)) = self.files.get_atom_mut(self.ptr.clone()) { + let file = files.get_mut(*ptr).unwrap(); // Set the file name file.doc.file_name = Some(file_name.clone()); // Update the file type From 5e268d61be9f530596b4c88ca7495c29f84dfbd0 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Thu, 5 Dec 2024 23:05:00 +0000 Subject: [PATCH 44/51] Added a few comments --- src/editor/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/editor/mod.rs b/src/editor/mod.rs index f6e089af..7a733cc8 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -284,6 +284,7 @@ impl Editor { if self.try_doc().is_some() { let file_name = self.prompt("Save as")?; self.try_doc_mut().unwrap().save_as(&file_name)?; + // If this file is currently unnamed, give it a name, syntax highlighting and a type if self.try_doc().unwrap().file_name.is_none() { let tab_width = config!(self.config, document).tab_width; if let Some((files, ptr)) = self.files.get_atom_mut(self.ptr.clone()) { From d4755f86f79ce004d6f72ce221939d34f73eb4b5 Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:27:06 +0000 Subject: [PATCH 45/51] Update README.md --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0c980cd7..a1467c09 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,11 @@ The simple but flexible text editor

+ +

@@ -28,7 +31,7 @@ Ox is an independent text editor that can be used to write everything from text If you're looking for a text editor that... 1. :feather: Is lightweight and efficient 2. :wrench: Can be configured to your heart's content -3. :package: Has useful features out of the box +3. :package: Has useful features out of the box and a library of plug-ins for everything else ...then Ox is right up your street @@ -46,8 +49,12 @@ It works best on linux, but macOS and Windows are also supported. ### Strong configurability -- :electric_plug: Plug-In system where you can write your own plug-ins or integrate other people's -- :wrench: A wide number of options for configuration with everything from colours to the status line to syntax highlighting being open to customisation +- :electric_plug: Plug-In system where you can write your own plug-ins or choose from pre-existing ones + - 💬 Discord RPC + - 📗 Git integration with diffs, stats and more + - 🕸️ Handy web development tools such as Emmet and live HTML viewer + - ⏲️ Productivity tools such as a pomodoro timer and todo list tracker +- :wrench: A wide number of options for configuration including colours, key bindings and behaviours - :moon: Ox uses Lua as a configuration language for familiarity when scripting and configuring - :handshake: A configuration assistant to quickly get Ox set up for you from the get-go From 54468c6c386c7be42302efc2b9740763113435db Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:43:24 +0000 Subject: [PATCH 46/51] Update README.md --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a1467c09..1424e9fb 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,12 @@ The simple but flexible text editor

- - +

+ ![Build Status](https://img.shields.io/github/forks/curlpipe/ox.svg?style=for-the-badge) ![Build Status](https://img.shields.io/github/stars/curlpipe/ox.svg?style=for-the-badge) ![License](https://img.shields.io/github/license/curlpipe/ox.svg?style=for-the-badge) From c349eded15a18f9b3dc61d16b90cc17d8edd17da Mon Sep 17 00:00:00 2001 From: Luke <11898833+curlpipe@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:46:26 +0000 Subject: [PATCH 47/51] Added showcase file locally --- assets/showcase.gif | Bin 0 -> 6477090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/showcase.gif diff --git a/assets/showcase.gif b/assets/showcase.gif new file mode 100644 index 0000000000000000000000000000000000000000..24c369f3543e9ac9b0eb5ee950c82ff45359a822 GIT binary patch literal 6477090 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

NC{nZ_0g z#((WI-vA;rIY+7`d}2XKaM~zJDrzo|UXe;FU-`m5b_FG->=7#6*Ckxlk4R7KN=)A9 zM_}R+mc%TkG1(=%G6A3ufKY`QlL)mw_=O{E{MaV75&%T$@0jwEqaA;vGtU*0n?XF8 zSTF!Ma;g)8vYcf&Z;8z$Rb`2TNZ9<|08Dr0(=BVO3Ov^d(16mA0Lc`iB$=5HXEHMj zWXyu!n4~qM2ue=?Fw7h0NlS?eY5xfVIDnntRw|V!<)ZuCk4E*R6av=KiSDdX{KhFz z8=5mLgo~+7tJlt!o)RoL!PrZ1wkRdpvzmZ;Vjw?ylLYw4k`mh`QTGHnpAm(rbgLF2 z2_sLDDnL>lJGmc)=(mZOe8#$UJrO za(T*$YU??!p+xB?FsT=QGgTCwS$HU$Imw0LhBgzB7^EZMt&~tzm74r(H?PuKjo%q! zm@#jfSB69Yn3a-4CLpDG*GZ|rNu@}5iFs)H6Si`hbhI; zKFz#;EWxzRBme#GNz2>6*r~TsYkOjrOMU7d>9_bKnM5_#b1!T)WMzcD>OnM_y+w-e zPh#BHUS1h%|KjdRJ|hz?t>`pQsn?Su{xi3hYRdohrkw{2VX8k+<+z%W;1AysmxmnL zr`>p|0x*Da#Rct%)_LK8gfXOF?(y@b+io%MaW2_J=%bf((j7(V8@t%U2|FZ)8C_Zg3Z ze33H0CI3<-Z-N3h^A;bkg(aW&TIk1s`W9Bx1|}I$R?LKZJFs(sG6EUMY)iE&I`$ht zB_Z8X20&9wFhe7EVjNY~NZZ#n-q(Obb20#vFbmTv>Y-;Zn0_iVLt&wAv;|R z$bE*Wh>O^VpQb$UqHc_scv;9#XDEr6h>6&wgL9OLo#=^1SLi0ij(-pDQBD31flh{ZS_n&o{}vTjLeZTj&t8(ND{YV zjs%l{O-PYBX@}(4jW6YWsyBagU`aqXQAWrR7r0e|GH8r~Rn5p^OC@1CDV4=EjsI!^ zU43CzNu&w{2LRW_5`6GUh=Fj0VKq#48lPk+7;pf7wHW4weey*eXX$E70&9_#mYy+e zhZU2QxOg~ugm)r&u)$YTNtg|2kO#?rzQklsG6L`inEzs4sYigg50FOh%GTSQ1`Oreec3SO2f#QGvpD zN+uHURRD7pc{CH8%%>QQ0gvm1oWS{yzrmam%AOaxZ_@dLp$8u_mnSM^XhF%2;8I~m z!I>gTbHgVRH^wDMY>5 zYOfg>UHbc4frfHF2AC38MEqG`I2 z7r{%Bn5A!OLN$68|F)4;IDw~m9X`6BkymS<)DvN+T}OH+3#R~MITc?=6}9A~M>&GL zDW!bbmlS%XHFJz`YN>s9erV=|9f~6<$#dK(EHMUpXNnm%$D(S=J^w<8c9+VkCnTq5 zAxRslR2VRUS%8!|pr0mCC~(7zP#Ibxr12FY0B{8Gu#t&f_inu?Hk=t_^dQSu~o92Tx1iEby6beHL(KGJ#^wXN}bauz8j z@hNI|(Fdf)iwa;U{v;KUXI$ZieL#@`*#~)qH6)9HunD`OLSZ0znSC+Ejoo;yOTu32 zD6bi7Ok29C7Wx);5?mnmp$Wk+lL?%nN_sG9oWJQO^s2EhTRyKUFLuEfX!ViRnsL|a zrjrU#6RV0XGMF$cw6DamDOagGIJ8OYsxCVw1jUQ9IHh+aPX7<8v{k!BMT>1#tF@aZ zvq>AZ)|NcaxV2-OLRhP*WQ(>2*0n?XwPu*MZ;PoI1h;eBRcm`kRCt5K=(B=&v~=sY z8f3OO`?rJ3O?Hci6IezC7mj-iNPSDVkIO)TE4YwLxs7DF1GE=Wqq)wMT>jIoIoO$v zTe+i)Lz2t0*rbiVv_3IP7#PbwfW*3G>$=t1GNH>uv5Ol|%Tu#Ux*x%`;**sNAiPo& zpIOkk8{wQ+*tYmVoxSV4O~jKe)x7Q3B&?)Qt_z}Ux;Yn?JycslDB2>n>oA{tc^sN} zcH+GwajNf`zRx=;XriN{map?0HKYblFA^Bc=A}C;XaCFVgtX+7?km6~RJ2viKf)x}0FKzEW$!6Wpqo`xUsjl}RL@43z~! z(4)PYC8b&@A_0Apv2ZdMd3puIyK24tORY1Rvj;rDL7YJxOL9Pby`dvJchjQ`oDi@F zuY&fXBP(bvk+;;rnHDoqsP)8I+>9eddUeOUCOerab!goZy7&hGn1Oo36P4qe#yNLV zJFJvt{KQA`#FWXvSKP9=B_#e-21Mn>C^0A+2vTJBP+N?d;t9qXB|9aGYBg5JB?`x% z7sq!pPfnu8UWi)`{I?`LODim72{i`HWPx5;5&!448102{pX8rzDWvShpoDQ4z4{m( zl_fz-ZT@Smoa&cC?91#Fy*d@Z$w{(#ifQi}fR8sh^GAS;B2V7-D9=0-MbcaPOLKaR znNj(nOqQ+`R(Bni$rs!kBeuvAys93ml>9fQR7}Oj48}r9X6G6@vsl=%T}CE;FAvK!)t zPoyEx03FrwL!LAtcP(mSTD@m-F;pb!y-bnTf@aqzIURm%rL9%gKR0xOJY%|J)>yr! z8N8i`4K7XG*RBMn1`W_^?YcKsHF-?dfXCN<4N?hVs-!E@TLE39wv~Nxqq~Qn9`&PI zf~!h)u;4}0NV*@z7s3X{(;i#IryJC_4TwYCGCX3$^Xz(tG}YQXJ&{l*+m(#Ocl}!b)Tf+oTkfFI=#3};@A_o{QJ`njIv6VA46%r&+HOF zDb=8gWzv1sKGk%QQhL!n*vePk>NX`y&2!pKs)0;s?lNyZ>T?Yp+2q>Z{wxydt#$=2 z&@MjTM*^?#ZK4A`TmF%5h|S+E(P7Oz&fPegjPR&60Zq2|lWB@XG(bK*Oj;#2K;OiU50 z>gdS4-^hKc|7@l0^4IN15&uJFbT*#j+qv04J{(6!oAC{3EK_;pY-l^%&auwq^xddW zzSzqQkzwA~H#f)!*fZkE=BciLhkWeYdDC2eB!dY+8Uz<#V0hI}N|E9!1N@vcR%+!kr(O6BV8TUs26lf9h3 zMdjsv${Wwr8Xws8ciHzHI_X;1evI()>@KuL*d0CbAD`(Xw(|RoS_@e7u0=~w0_=+Y z&fxyA{deUsikZZI-~Zpu?XSLn`j_C3OXpjW=knW3ii^*FUErRIB?-NmiXy>W62mDz zt>Wvgl&;eP@Ajjl+ka=&o?X#eWfX;8lngQ$Tb1eBwHXTkzCtNf911f`2`KtvY*k6gAdC+=c#ooF+{8>g#%;VOn7{gm z48E4%_nseAsIQG=-1rVM`GQ|9kR$rCzxs`D_@jIExUm4bmqf=~kUcD#ZU6SoZ*6gJ zmCRqdpzi$aIsChQvx}?z?t89RYul;x@9aO3 z=MSg+POW>;X;ND9X^B@QQ}036)j%Gm{H?Kjt2pJ z#L!VBfCW1i0MH;( z9>6K|=>HEfsOHk}?M?teKKc!vUj2IZ6Z?|hn4ooQ)B~UA7KkCZVW1iC=S{3V0S6?o zKm&K93@Hq<03-{|9t40h;|`?Ir_n4L@22r+tFNN~bO^AZ1ajzMupXESpoaqvV1T)U z1n42g69>UyfE5oIUESdqZa4`5K;Re6%dm! zGqlhQO*sGUP*?M7)jsPu%wSd>S>-gV3j<{VH9-&h^^I6ztxHuAhfP3-nSR~P2qT!v z;6x01C^LZp7_gPKDFp-5zZOjpV9ElVMQK_hsl9Z#1B?q`Tm8@zk&hAw5rB^Y+SSf5 zDN)P~UmgDoa#0@#=wZ}Y(eygT#EHDr-T zrU+2?GSrtLX5AAGx0Sb?(`E4#*3BlB>6#R$0BPRY;);2e2 z>AkqhR?@J-%Eu%I9n3-qO0^|;0D@_%kxUZ|37|}YyvC{QA-B^qAutI}l5B#h_04Go zXTtw5*h_&WS_d3(kW(N5aQGqcH*`S!2OI=W_HV;+AcKs;hjntr9x#ZuxC2}(VA~hx zg>}Y(3tkc1AI}Z5a^}!J+DRjzl+uWMTNE(|c*%w`wH5v9yvY=|{w``KornzwuihB^ zZ?Kj9Lkq(Z*WrgBZny7F=)6P-PdtN2bJ9BzwL5(A2{d^kl!;yF<%nQAUN%dc1B`tU zBTdTsd`FONy4RQkFR9=b^=FFL^C%AgSFls7D}emb)aSM+xu+dO9g0@RUe z2>8E2{cAb}yc2NLH$D=U(1b35nu4;Bg#<9D4?+ml4luBTJ~YWme1Orj(Dk)&}mk`v7Zql}3TJFL?db70i2BbqA%2jI~KJGQyP*pW6?qSlc3 zI3K#$=w3KeQFq=pFMQR`eF77l?b634;&pIh8tk63`u7INEiN{2qLFhfwYS0qffeTQ zl+LI)OIkjrd_hwhDz~UIVNq^=0Q_D7o$`_R{pUF93tnwrbHUd1t9!=$rF_bT91tpS zKK;6v0`7DgM^#fg@(~U-d6T_oE{d8Tyd>k0(<=XDlRgT#WcRMguL9-|lePcEXFm10 zkQ5$;3o9gm3#leU26+Y{Pr~2kyoS(B5|NNgERmE7R;Vt)Mw18`fDv32t%QwmpBz!j z6ul$MV}WlxpCne{(zcWfXyHwU5Wo*kBg%-?1#yPz-49Ph$3mvgKIl^2mq>@3%}HxT zUZY>{3JEPRQ4fycvK`%CchvT&$ZT7Rq=uMTFtQQyVA(_xRapbg)Zjo3PQYA|SbEZz z<_8CO8`RA76a+ii@S}IdD^_l~zMo|bQ6sG96AuEL>q%#r?1HAucp1!ag3Xz}{1S5n zlQY8->#;D?Kx1LXDw%~)i-Iesf7s|u0N!Ro{-IxHNh_;v5(y+^&1?T`W!tpL*v6k@ z=tCAl)rXSg0}!eJL=BU&IXWUW2Mp9G03I5|->7ItZvdo>Xot}QT&e&n^4x4y5>oRS zYhyPnjNfXu8@T!ba4iMVZ)EBtWjSv)fWv9RV&p_4G0>1d^{G+?H`HnMK#oAIU0b4s zB^CV&U&uKTzE%k_0Kevlzrm3Jcm(0q9L#nKb`JO?qdXj3ut(8zug=74ANZz^I2e2p z$h5m+7E5X=c|#gWIg~!k)wn~ou`$^qMa*N)Pkr!&&cDW%+0iyir1pU(Wdm@Qz+M)4 z1}hFaxiidlCggjY{ZGqcW82@H7Mk42&3CTnGVs8*#b-t{f%^aXsZqVqEV>m{7Q%B- z;$F_UoP%8sToa@CmF-z9NYV%dtxM)&r+^ntGhfQf*IMZ**vR>??^Ez)g>rLCl z(wl)250@qYaF*s6m)(NYS2A{7C?N$9>H!b-p?)Z|sddM>1Wz}6uRdFedI&f9WH-TF zb7naya6{nanOKoZdNM_B# z%*>dTjFyF5D<_i{lQ=F^_0E0eNr^VH^6s{m@41AQZ6|{6Ly>mQO>Ke~+%C0MVt=kC z!;}C3x4ez(VD((w*;Olu1<+&wj1bX&Y0^f(tc$k?Qt1C<>Ig>~Hn@`(-Q8V2nlae@p3pawOd1U!d>>nB&)X^lWT<#)&XV6Dya z7-t*h3^_ZJp}b>b4rky6tnew%en3Gg#Iv|kGQV!3Oqo6To6bgetqy~Ekq;J|=1kMp zeIw+O_sZT*63*DbC9rLhS>XH5d+cTZl~@`jLS@lRSWtCH{n$B2%4IZ5?^ z@{w#oT9HU)87?iEfcQt%QTw-bU;p#~Nmr%6tm>=Z5fdswBxy+i=SsfjvXbN@z_ZB_ zYiYnJI+L}@B&V{E0caC9!2u$PslVyK_$edtqJbayp^t(fjtQwJ0D7B5Y?SeGwkcFZ zE*pWzyTsn03pc!vCv232YeR2Kt1=wKJ{+eo zJSbI4#rWx%f$NRgs2d+So?ILzVYECNIiR64tql7?WfZLiYYu5FMxhxjXe>rnAr#e{ zJZ+Q3aU@4(n?nTwiybftSS&}Yu%ew1$E`p_q+&Rti8Ed0M1YavJ69idLxVE zuD_tMh`XYoSdOTatF1i8u++S-#LE@a%9TJFL7SCi;>x@f%)tx|rW^`T=?sz}2^x~2 zxq!ZsT+5z#izeK%%tFD4C=a3$A|D3m8t&|FVh2C@kop)56;vB5X;yBo@6A}dK5lvw4q}l-*CkY8qnZ5jBET3T~eh44bT;&%8_zG zlPZnr)S2kau`*Z=NhB0@2~YGP#J*!t5`CHPY*5xXts1i{)@spjOd3uc&Ca8d@g$ql zbdnLJ%{g?@45=Vg;!qXE91^Y1BaI98Y|kYHFGHK6(?ilIl~Q-SPq^fa9bgcv$p@@a zg|r+U3#<_a*d5)-lDO$1tGWqC8q=GC*p&O%fF0h%K`;y5Doy)#!Qr6&6 z4LHrwJWrg!0M6vha?$?-^9+KJ(9rG#7Vg>5a#2)CRT9-S%~$F?JW15E7)?c0qB_x0 zdO6QPCDiSK)XdTYR@l_t@Kitboj)zqM8z3HUDe?*)KgWCP=(Y}Lao4@(qG*PCH<~p zolQu5(u4%oWL4IUtWt$zAr}HJK!8dbdeMdwGo1K1*yxdF+m?E{7YU;YCPE@T6BE!$ z03=b3lT)ydyD>hvFx&W{Yo*YE>{BBx*4_A1x>7nG?F#+K69BLSJE;@bvJ*V1*54RW z4dqPCSy&aF1H1D)JHQ}=)sGPsfLH2@gB^}gz1aLoSUdU9QUzH+Tn*;O882#3|&lsH^gWm%me zT>qd|6{BB#y<8Q$-}<%AL`XN3+Lo}R-*B=qy(|7~vWiI`KsEoNNI{FbDJS5mln*y8HYr~Ze z%3uoi)3>19?_Ak5nNGdk+&k&p!YyJQ{Z5CaTm&|bBhHV%ZQsH*4!av*LOo3-fz^?n z;{Tn4^!;3%5nn=i&V(z}NHJMKMb8bEV>O9jzLHHLenShM<2{bu4sMDuXpqMIjfdM^ z_nH4X4In-P;y2h?wHEeTrikH(l0e2G+laCfdZf*(>Z*OCCa_I2gJ@+YM%0gJVm`L!hA`cp9p&XTR@H^lYX)a!)u!zviUiQT;Dn*hKol4W zKCiQpF|CnH-dcK@m*s`zZRM)#%7Kjo8(`}euJalI`ytktzWox@fc@l&gRTqE=J#5tzz(HDg#F4(+vMu zi!Kj62v{VBY0xZGCi_=s)}9(JQh5nW@;(*$pq4+2sy( zYh=nIyUxCTid(xz#=q=PkmNG1;6zVB8Hg2Xh?z|6ZQG{a;B3Z-RnZ^;3q)jf?928_ zoqWgyco1yNiXH-!=EXvVHp-#!*J>7@nl;$z#cZO6Y#0;JaS~d3ZSC6b%5iRBk%`2{ z#yis9N}}+rS*lIewry~JZP+gE{!?b2@U=#I(bUTEpIZo!$ycw1#f& z_U_}XhaYzr^p%~BfwmdBHfo{Z4^n-5txBrljH7xHj$K!aMOvsJp!_wG{9Z$X%RFACi z9xZG%k z%=6kK>XZ1im_PS(sXQvHZm0i!xS_ohCBn|JR-sTA|_jQ-W4kySV!mb;U zcb_VV;H}dysXE?KwL}`C=1N<^**NDi+NAt%Cgsy&eNKrb=|VM6&unJ!>skVZoV$OtM62 zup@wlJ1+`wsq&`8oG6DHMJdr{Pm&c)0(ht)h`^CAllF{C(WuQbWgsGT2yrP!oC(3M z)L0NhL=8mUx-{sMWmc*j&9=k{)a%rTZ4GtJnUZDPj5b}Sbm%cD(;Jc!;b$gdp7Obwr}Ikt$R1^tQck=IABEd zMUkfTQr(bL01w@95g`SRv-D$o*Obj1uNQcF*p z^fXAnb^u&VJn%Pqj7N}+mDWs!8MYN*i`^8`Kq3Wrlzc2X6qQ^C#$^*;XX#Z_hC!88 zR8DB2HrRo`IW&-62aYrpRSPosVTp?I2cdz|T~&ryf6et)X(FPeM?^c}R9KGEy?7!_ z9@6-eM>kf7;8{F=gdkHsvIyUKS7Mo^mRsJIKxml3XWE1Fjmf2%XQG*=nrpJzrkiiN z>Dz2M@L^m|0~itGo!42ETv`HzXHgFWG?f3R1_KNbKmpFRG~RP>h({cplcJg4dhCgL z(t}o(CLc&D31G)>P?kv(kR@$(BwRH{$x(i835cKosj^C!9zL$RlTSJRB^X)wUF8#j zV$DY?VIppnFp((-p9PtyH`ZIjjR zC@F!hqKnkF*3L_*z4zjquXJBtmYRE|eh9F>0~1`Z!3QIpu)?v)Dcb?t@G&T&6XU5I zV*~IpfB@Q6ho?v@aSW)TJ#2^Qr6UNCL!v7I3h5h;E*vv!mS#p;rqG@xA6s&fB~nlI zM)@paR{ccPNV*!$(Ly4{G*(sj@jEtKl41L?Xn ze|)c%HoH#}hk@h*_FZmGKcjoO%%hWDdShNnDw)5TI)=09ufra@?6cEey8=DU?OMu4 zHAcmf=MzyOc}aDAVm*WNu~>Ujni&;du= z-cM2e2=LAdRTt6VAFcQsTerTifmZdC6qG^{EjV>o8RSoC{A-$v`1ig5TI6ga86W%v zk~@Sba47>s%KG5PKL*NVfMow`$*iifzx3T?C>YS6Oo*cu2WGG?5=_b9qB1x1^$%S> zGRTo`g_QfzP=O?L5xY7VEUMVheC|6=1-)m)Ben^3VA|BbSVul2LNSU`oFWygn3>z* zhc-=o0~fpKy6iOXUoG*X&N9_9w*U$|rXgd!Flfb?(F`|V9OKk57^XHhu~SUkV;#N4 zM?JccUVn^FOIkO_LK1S2bZpGL>NvjDC9+g`>`Qyhg2yu1v5|Rrd%Z}Tj|PIW{Ci}Qxo-;Q<(yAhk2=kW$e6ksV=EfUu=oU19>?c^bJu{ z##|;dZO1QQHZz*ioF@M@t0~JYrpbB1#G9f(SIyG-GL_rR*DSxuu!fm4o$8zvDxtZ~ zcfvEC@+=rS=V?#X#L=Di+$TT#>Cect(>90vCqWBp(1Yfro|QTqLSL6pfsV7G5}hbT zp%~EG478#e-6%&}dCg*KDFZw(LmqzF(Stn{qY*tROIzwvH(gYVD}52*aQ&g=Kfm9(=H4NmGDZ8k4 z37f33s;j^{n?T;wnMr-kAq%iW*L*Uqa-Az(Bco9Bm_P?X#Rop}&>g)tZ$2=yOaRsj zL8G?Dtp~8!L6`qJnbkS*i9NDg5POvobEzf+Vud2H*vBfOp$4-FecVh#y4lINP&cU^ zs{xC))xxt{XNYAp z^vZ^E*d=blVhS1Y0n(6=d7*T#IH&?-mA?vJFhz~an;V!xx%kk*N&>(G6P(U^8!`ZLPm$6LnQx(vJc50B5RVd85KJi4l7QUOH>#bW`O4?hm6$cBw5@Jgf#)+HmC|d-pUujBHN(1`XKe!MAOOILc)?Sj={KxbA47tFr^RiA(nt+A$U*j3as z0s~l#o^ECZg8>L0s(bD0hB{a`Z-|0~Ck&T7taUop8y*^$?I`IbCp-zj6LoY|>y26L zwGGh++V*@5I<$Uy8aimL89-$zAz2HOS;05kkBc5nLq@-xD#>REOyl zz$E_$Szh}V6PM*6dv~yyjZ=(@>>!XR8&D!+Aqme2(j*fNrAXX!;Q~|JxYUrUh-iay zv!I$7R`IAlikYf?86r5+DvQ1VJh|W2r521^YvEa(I582^thQ+OR%I1PiCD(M^(N3n zQu+B+9+&Vn6TOA}!_`F!*K|8T`G$RiA3-W-bC6I;Dlb}Z5yc`bWBoc`s{XGeaqB6G z1t;UjLu>$gV1({KH*noll)%uP_P+yOspUM60U|8nJowZH#zu|GoRcy|jb{nc(;T1P zz@6n}pm=-%z;K*HcV1&mgez%c^0b2;>k`VwCJq#JN&jA6I+pGCjVzf86r-dO*+c)t z%x!-}Pf7b>G8?ODUwg2-EhkyFcf%&Y3(1A_R zN#C?^4g58Tun=JN^_^1Hekk$j@M5!0~iP zrh#6$ofxxem-I}HcKIC`t&xm1o;t;zfB~5(1sF}-UbukEw!9pk%}SJ2or(Vh-;Cs0 zpA}zF^onIAV3JG)8}`bw$e~L_oy*yflTk^(Ig8VUMfar{p8d_jtz5m`P}?9Nx4@xF z97g+%VF5Lg{58(^+20)>JJ<{&|Sbp;6YA+?c7M__dhYI8Gx@VqO%@BUYH>xQj>Z z3f5TSVyN6G+RAaHmP>q%4BpGyJqGr<-A7Od^`u@yq#%2-pqv#zGe(Dt6qqkc<20^P zPF;xt>{YQT7lkpN2o+-xD!_F}p+Z!ibZM6K1ePJ35khE}LR=f5Tu&4pz!aVv>nTS7 zyrcD$RyDqx>io-ld>A6tp6x-980tt%XvJEwjZ@7~!vsb`rHb(tg&h9|4IRp%CJxhs z#Emy;&We0kA{LO+9f$qB8Mm0>uWTeXmEV+rluxt}g-GH-?g)~ANRDWhN3J3zO++U? zgeQWRM?TKe0E~XsBr1ANF_GlE5L4Qe%hnXp`~aFIB1uX<^{ejO=@1CzU3kz{Y9vVm!DOV#Ic|JEM-shWKoo65u&1O6{RUA%W|sX z{oUpQdfiD_h*PTBu9)U=;vaqJ1qKm|9~}t@d0|@;9tb{G+a+Jld;|lC#4|!rGD48F z?c-%FqklqZgpy9M>4pH@V6iD?bUB;$K%4Xo#ql7@b+IFft&A~JPoRY3vSC;|0)~c( zo8*z`+#$sAKnnXDzz?Pybx@mTX_(y|V~=&FXM&O~g{ElgWb_3mvz#1JElncw%_1fS z_Jy6)Ae@od3ejCf9vTos%n!faT>nfQY5CjMaRrq!A`1VNP?E9_l${oPg$v)%nVQ}r z(j^d9I$f3$9h70;ibTl$5yaPw-3?{k`K?@qe5ZRPq@gV-ZW7&@K@gUH4O4%1R)ipj8KhbW^(9{39Oq64oY=Mij4J- zhe9g>-30M0>$JUE#vzrXPSX~`8&?uZS^dPcB2WpX1fGpVymAh`a@|&0)yJ#|p!Hs# zYSoyGki905z|N}<5p0Q=p%VI31;NCDMn(J7 zYzegy#fBCdn%WMTE3kG6fcj%shUUgNWAb1CxLy^sVg|1=?bdRwy}ad>WWWvNK@O4> z4|lszkM|;T}v($nAbnQG6APkLc=2Arrq! zu0uJkY|saHB||_$+SKlBEgQTFp?8?cUSxf-qN}<)`h^0woOS4y=a^ z69D#B4YIE($#Agx?0;dd-sUg`1JnaU@B(v*W(9!x@SPAd@kC+K^d3_W+@N3Gzzy_( z4qzB(6u^&OQ4p5pvTlZAaq&E=DJ7c;3nAs7}UyM5tCO^N=bUs zp)9AXaoX@4dJ3K5^4fYKFt3!`p|LV6@*-oBeyZyrzjBRG^D_&xGhZ@#5HXqD(Fj&@ zS0>^0ToN&Qht3=`BB9l8-B)rz@ixOVGi7pl=s>Y?W8E2mZVkk&CXlpN#IzZ~ia8ZI z%g@Sm7(aIywq1`YN2}bWqfGy3j6e5tL?>0|9b<=8QpfOfG`Vs*gEK)6?8l-Dsk|#5 zw+G9b92zpz4|A1(G_1SQS(tg%kbog-M4i@w&>Nc?|72Cbs_tc-D#)s|9(d4W~@aGKE*}M`_R@+YxuUSs(7|#?n z#-0UP3yvS(-&zyu?twLavQT{TbZ^;@=u$8u&l~Nf^Jl~uQXP)n-JOp0K&_?N0q}wK ztVblPk&z9y#$+*JTyCS)t>)6jgT`}bR}=PPR5tQeU|Hx5Fp_X+%wi?xKt$dOHm(LF zKngyOqBPI0X$*IeNMrv;^zB^N^Jvc;#MoXoM8s?ipHL4FmM~$g@}oQ^%SI1pWAgUq za$sX~R}37C1e#^_jfCKhv#>=+&a!t-;46aifV`wg^jul6VQSE{xY#t7Vk>BwHzbA) zv>eTIx=2W91=OGqR0X9F)r69Q7B2=O_YlZN9Eo=t#4ru`pB+t8b0XG=g;>CZes5jS z&gu*HU(VO7YF4V@tx1tQW7 z+u=>7jef(BzLq(@0Q!F zX5S@Q26>n_6KMbUMzNZ~6$jN0qK0LvBXryD1@? z?aCTTS}*rBzJ({y;h$?TW9=?Vjn+)vrOxvVxtJR~@$&C( z*x+0$mzw|2$8z&3=M9Py@`smaM{0LRq6qgOtg>GgM?iD&cP!{Xj|ZS^40Ja)b1#8f zVw>F+yhTYj7nZY-fwYcPIvK_mv@8gfWZb=R>ACZDw$pbj(mJ=Bx=jPlypH08!}zBf z4OWl@0cJC}=%M?N`ek{D*4$gu8`iELPR>`j)en7jIo!R$&D#_qcy40h;GTJPme!Zt zd{cAP-y8Sz%0_7WwX+u^($KflZF-%e=8zmNHan>~i(Vj$!@Y9@v-=mGv;eP0-GL=X z#I|>|d=QG|zV}JCDdCCZTEf@eL$~$DAAIS<(meA<3y8Khnl@@cyqn{wGy3n3!lN;2 zJW~I3Jg*f1iF$FQjJ)sLc9tvmF=l@5`%E;Re$1cF7Gd)u=U!?SWFx(JQ-|GPL`Y9` z2uVW5(!8XSa0rn2GK$oE9h)8FWQ)K42=45u&uD-2Q+>Rue@(mTwrn@(yvuxC{h*On z{qGz==mB7eU_pZf0SE-J5Q7GS0_^B%s6jxG3=ahc3BqtQmZB3?4R0As<|Q3f`2 zIA(#omnkD0UdCsR!~u*9$k3z560Om5=a20+c--`Z^7;xngNAxYq^m-rDTA3t5w8&-?#`!6*N7(76}@Z@VK0R}!5z&*tRs7nFy08@@r%>et9t@V;> z459uc%~jW3dF|ELUx5u)ShY&xP}czR@Xa?J?hI-@02Vtew89D!z=#8=O&|yP1~8(# z0(xMe2T$z-kFoc}g^aIj;Q|i>@l2(UzR?T;tiEcy^)#_J#w9F1iaZ^F0sMw7xLz%A zZRzR~iXvF@?5jrzL};`R9f-vbdmOFtnR+Uugz1bPktV1(%-p}Rgi#wM}$(Py3wiW{qxJ^YKtmN2%usVlAAo9aLd zts3fT@lH9-sw)f5@k7+&;p)4-k9)^6wBF5m;aB?zz_LThL`!cc#s zbHW%%I4xQUv{i#{WuIL4-Fffb_uql%9XDPDNY*zqco<>p?&>|RI$0-353Ztt4@gBmpWAS6+zPx?GpFjWjToph#KNC51aG}4U zhk=esZ&7IbU!OXHlkz~%KzEYS<_H8dPQ|Z)3vAYg2I#T@9VbLK_Lix7)CBu28bm5Vq`j)#`~?2jcTdfrnIOz z*IaLmCRpNvo>x7s-0^wn83Y|^$d&=fs&>qK$f??xNJTD^k&Sd@yV$0g#GM5-2jA&588FrQ4azcMK1Gv0ww4zHD%F;GL@`lHLFRBI?De!`qXl8{F5BtdRDp4m9DaJ>alcC z$vp5NCQ}uqS2!~nv_O+yZ44|h@A=hr{%4g+tm|VT8`*QF6)j_hD{I2HBGvS=o~QBB zLRzv)wDC={r8VtoxoOi!A8F11&?AMo9(w2`rDBUF{;ZSek_tYkSj!7Q6wrnS;zS14O$4 zS+s!U6Vg?E+ts}^7lcx==yDh<-$h;3zWNo?68syK$6R)Me+)1!d0Up>#v)zwzy_e$T7f z(t)ya8h|ML)pVhmj(9IhE6xt4RME`SkEJrm>BJ5xgrUzn%O$TPhvoq6OMsJs{Ksg* zvzPSwi;oY$WUmakURe&GA8bM&2H19%2`0;e7kpvvEyy!|objFUoM*heMJ)k}GhWzg zmctN+wg~|9ngN96q9_?#!4crN(g%QT^~<{>%%A`YI~5=*2-70e^QS>g%^G{uc;P+Y z4a{(Z44*Iu#Ti#&Y2~iR9Og2<{G+)tKsrq4)>(mZ4y`G28DRH-52Be4tjhBkLu0xx z=rRnej1V92@%VQ4$`11eEE8Y{)6M^06q0Xo$-i$e>eZn(_qn%gVLAWlw}5`Gw8`_w z9KicM$rkUsq65u)3Cu8}0f2MRCfKOih2ZNBG`bO<@Mj{k()tO28I)y)JoEtKJka91 z24FgY$GS1IR?c>;Jsw+Ot0&MsNb1(SD&{RG0OA=}nh*)qW3MkU;4#%gdKoI`G`Pvu zZaKDn&P&?1Q-8h9i+f4QPCF}{=}kAQy3fMk+-zIf*wX4nN1y;&Z}MIOU;wAs_a{jg zg?2%ay3^5~_D_!5Q4d#^vMi35un(Q%^dgMBsq7hClL}SNl22g(V;(Hy=kC|G-jfe- zs@1IrbW)Z#gbzaIpAV)!V3PmWzqnm=1&fvEomczkK_6MDBc)O1Jvdp+we_%@4$JOY zcFDyn-CA{LK8R)F05ctW-R~ZhAU#&8-;NJe%l$857cwGqJ1X%_SLF1{0N)K?lhgqo zG28*WbnZp-Se*~pgfXJ^JG?5$8$|Mr$?et+ZF^Vpbo0$UdK|IJd->1bt9)*2Z!y~# zuP%q)Q+&ky z)GxZ&tO?EV3{|P&91i$;Bh}!q%EpC#I3wDq1z_ldTv`syj>4Ttr!&f6J_6WAZW}5nBp(RB;#^u%^^-4I?h6 z1SBvl!;mZ^k}?CCmS8=8G5dzcGTJKuluXGIu!huye4b6X^w+?94pK zXoo_`8Kcn!!*TzgG;guO!sLiCAN4U7#U$Q38O(G+O1q#lK0!hKbXOM`np!i~t%J8Sy&mOJnA8m3enGz&p5-DkHB%5+7 zk4ph~Nh+xllMY?hF1_d}xl%6e z@-A5eCwb)t_R65zaw}VkEb($M^|2p4OE3vDG38P(9fbujLwTeMAE;`gFhjS@%`L|g zF%@$&o6!F-IY%=QXjnQdG=W6{cZHV(GAK~<0^SlNGmKp8D0B4S7HZVyh?j10T~4INeQiJnua5b1ILM-7t(T2Z}t8 zB``8)=^SGWO`{s&b5eG5pnjm!cq{?36EUwxV4Ts`k}^Nl&KM;L_~Nd-ti(K;(FL>T zgFrMj0n0ZR@*r0;)Q+wpG7)G+(`hR&Kt~rPLU)uk z_iIRzPoPUp)BtpnN8^-7XB4tDRGD^TS(*Y_h_DvL#WM8I11GJ~z5>_k zQ1-gaLi4Oe-^@k&US(Gk=GYXLtH3CbII0Mq&Ltq$yRS?h0 zFVX-Wf(P2Q2>}rtvO2Yb7&-DguUId8RBsKDcHGM{~25X06He)7~Fnm&F zN`19ePe{nJaD2$)`hGDwt|wXy7Q*H?~jO0x9=en1DtG=8A55;g3F4Hck}58atfkKM z&s9pt4^A>@d~=fmF&%4-0bq2(Dpoa_%N6DJahZ@~nd=WRc8)&MF|te%zfAu$Xlws$ zVq5TZQc~>dPS88Z>s8l>O*is0x(Cy2q9}pYP03FKJ&770l@>SULTL@dJM}hwW>=xSc2U}svC6exc1*|M!adPU2QDdeA$O_Lb2i*g0`XyB zw-ZI9?>edj+uYP#2$wjx56sN>&K4KkP^@t&wR`c`I5jm==OUmgw>4gm^3KEfL<1Mi zOjI|AS9|p{)Qb^S_kqO;RO`vpHe+>bqB`-h?y{{hw6V%yHzaWnY3q?Y-SY>EE(5Z) zdAbt^&Zj%w(>;l><;3%LWcPVdf(M4LTBf&cF>QKvpa|^4j(8wmqcs12mFjzqiVcrv z{7g<;;9}+wsX8ymVN1|dgl^Fg_tWN=e#0tpFUyF*_}uo>2xIhriRyB2DK!Z%Yc6TZ;jgFY6kI&^pL#ND`aeO3AG~#W82crLvaF;C_xv=twYN1ts zT*o`RDgkiQDwVg99n^QF510^EC}!A>N_n~d$ZaoUY}@rR?A0-S7>EO)pRJcNGK-i| z`2q2#2ZC=h8zysmj8u{@%P`nhdWm!j4bqhD#~@M9Ak{w{SEFef-Hh3OlWt<`20Df= zrDYLJN)^ba*#%`aR7pi=+X7@m!z6+1Fs_A=4nr2rj)#y#O<4`834~Tbm-XQAY9Osx zl@-YJjR9U2JXyGIu+u%yS_e#63(neUt(9uyXKZgdz-dj^aKnl0Lpr`MQXBJs-n?#Y!fq> zsmrv*yS-m(jMrkh*Qg`40$TnGTWS>x!jUtzhi?Y-Mgd68!FQqwJVIh2YkUp z3cl~Jm<|YpA$yKk2%3&vmpxM2UpYZAuULdJ7E$rH=QMO?|9T(VO6 zH5Nb!etZXZU<`g-$lGFo8q6{*6BUj8e)%^iJ@#nf%<~*5ant;w7FkM@=taN$iw~;1 zi2TX3>%>VBfK|&M_k1-BvSG%Ehlb_PXM&s+GI9&eKkuJkFoKrU|hU3r=!Nt+oxm2rc zP@{SVv!~0r%z?>A1L4W?vQS_W&%TYjHe zqqkoDax;KfC{o8jUSj-M=^$$ZLEcOuV#HCq*TbW34Dz85gy7<<8~}cN$gMekoyaCx zy|}qum`{T{70Pw0tk4%WO^Tyq;v<~<;(a*KQ#eDG2LNsGaBvr~Fyx7s!sq4bhgNsD zB&|*WRzCWE$O*Q!h)?KRZR5H~3)_EF+j+M?%{VnCZ$C0widBQmtc2^sT`wkS+!v(? za=2PnkHyTUGMXjfpDO;0;wr8zyw_Ar@)aeRK2Zn0%*4}1+`du?BAPe#V5EftuRAK)C06mbdd4U!5!r23lGJNXEo{Sk+%z=B0zPV~s z6Egy-ejF{5^;w~+^WX48ZLe1Sc*J}GpM8vYtZOtJ_O?k z0GwbUo`1jYC;)JP3}OpSSwHlf@iEh>SR$Oo1YhbilKfR1<+AO;LrVyK`Y3_S!4GFVWepgbtx{p |D$)*fCC>oFt6t5zwQB+i8oMUFpwEsSfNbMdwP1(sw@C#Y=+WbV!h*v0k{vL-;^!VY7!Wr* zphtDRv$Jd8&b_<$&k3|pOx?45!=^w%r$_z+2aX>U6}ZQtMTegYTC}*=a$LX<9XjBk zkq-HJv|dsIN!A$yBPejdcq16sP<7>5SHOc4>ct>g#sPrgLB{2EU{D`6BqE8*Wni6f z#5wh00NANF9}X1-fCK-4H##JM7G&JGR|fR8mt$f(O{83Kdgu|vl0XI4)pt-vDdm(@ zR%zvxSZ1l^mZODtoN6PUCt8@>1z-em2Vj^%b=T#jz;xEVq12kz6*s_MFdFe?0RtG3 z!vJ3*wH0P^D#a#o1q{+Bn%EUEorDv5MwU!`#duH=JQNXyeQ)q^TmWkMAwU#)xHLi; zqw=5w524<`0}BPYlu{9S^q>Pu$sOh7OacTUK$6GZq(@gb5mni0z2c=1221`LY?4cE z20&52J|%2sODfq@5K3~pCk9)gWrzSpK)Sz&;{|0YjCn*+M7cM#1nWUj^nhs;$E~`m zy9Y54C{!BAc2loP2KH#al3ZX8rk zPa2Xdmn4^L^2t=fCL5Kt0kA+mfT+?(K0Q``=%kl!`st{rZjhI(g{ihyoO5U9oeq8qvV;O0?UZx6Za8vEj>oj`m{TX^ z_drR{(dS3x0)6NI62G&(I;AG+J;^7m&45c`(pn4#?ngL1fGd6(2!b8t=fKdI zKwngw!|(dHJ>Cf*eDLDI2v~qAi!=&fcC#SD7Kkn2EDSW$a?@rIrh)kp4s;;npSJq7 znEEknfQm_y0Iilm4h>IrNKB#b;a?6 zRt7LPCob`fXgmniS_2gG@Gpz2drN?L$GU^~s6Onu0O9l_mm!HpdW#dz$o%%DMIAs- zz`L7<%EdSTBfgI>gDac>tcSP<3DSCn0*wHifCDEehA9E~!GG2w02)EWJ-nM!0#>=o zgxN5Su#BZFXGzOimZpwT6BHa_7o`B?KqGPTi2%sBEIX|waEf~$AsLbY3|f$tt(+5c z0QDp0xXCzvTM-$%BE3lsFOw{wUJ-7!zVChTT_XD)s1$&{gRD=4W0X{4hUGA{_>e3N z^jx$WX0as&W`&yp7QiSNvT4z9bqp*D)tI!fdrDKDnIy~i7;;XD_UC*cTopl@ryhSg z^o0yN;#ml|EG3a7V+}Opz*aV{gmwjC3T^4@Owc}C+VrMXYNC~HmK&JyCJQiw*#e3< z#w`Z_Cz4+jnmpOU982N!sakqkxmrgxsaa5trd-_`{cuP7Fy;qisml-evyeCVQ9Xcs z5KYqrp}0}#Ld$aNBE3m24hhA2kYt>RlG-@Eu4s!0Ve2iOFpy5-z$^(UB_0bh$5VP$ zJreQX*_4tjs9N^2n9ZzaQ-e$L5bUhOr3Mj0Ev#fiqC7o!Qm7y?p#-UO8Y zCiQM*btPV^`H+P)`AAH`D>UG4_Q4R=X_dGD)IMZk0SjPg7ugyekh>R)#BOLi-Fm%GQoS=rl%!EM75t|;%dRFyVm9qPF zv7F~j=Q@k7v#1#nXixkd`>tsqxRsCzfReiyL&QRQMe^!k8{0QG+9aI;T2gCQmQ+Gl zTnPE*TQWru?%kkMJT|ALMpazBkQ!dih1b3w8Czem6ulYA=WDu^lL$_ECJa9R@e2|B z!}1{Pyx0|#Gx?lcq*PSZ@jdkt%(v0O1t%;A>TiGNxv&hxv|w=#Eq8HE-W)@0!4(9J z-$F)PJDWR}63(eARB>T0XdnSQkl9d$7NP+JCIHKW33NWP=s=~oQWIg0q0dclvTXG< zGe!>)AH6#IkmOc-^hnuu92Br(z(@XhEP((taK|v9Zi#f?mzU|jNlQp@3F!fYjwcZe zu1Q~cp-#PtTq2R|d$Ph2NON+fqLDM2nNARMC&j!3j@u}!S@X!U+U%ME7yRi^kGj;A zf@g%Qc$d6{lAjZF+Pok#FC?kXWCaDC=|CuV&qMLw60I5-=}$s|R)`?~g@RhP{-^-C z)5~HeSuRj{1XCCp6-lC?&Q0Aw?xhj{OO~}M#pfZ_o$A32+|pMIcFZV(DT)FGYDQ$? zFepW_$+MhjYnv?Cpw(rH|_-z9Cg6|F7^OO!sRgr&d@?g}3iV#P9 zm}8wK2(0Levm!&dY=dPY)mn&94pZxCO@v9-9(`!KNaCq`A7u*Q36=nmg+BB_2tqJF zZ)kiS)xxMa!Q@k#&ecAWa4s*zaq#yed~k&8dCzaeOabB}6-R&>0CD5ODRto<{6-dH zgMh|U9K)dye9|OohXH9vIOX*z#&i(vw~WOJ}667XBw7fX`Q2WX=i^Js7;{Meh^XsPUwVGMoj=9 zb~OZlk^&nlf6G!G2Ou4N=TrfJDG0~{uA&1s0D-O|LN&B0 zn6f8DPy}(sb;wHbjJd_r*`4s%e#qIp3PEl+`Y4M=ra zh-pqGU*$FeI?w|xF(44)RR&-$lP5+R~K%jWyXNEut$bsgFDvHR2alKiQK)xfL{k14Z~TLMk3Ru#XP5l*KnHXbyJI5lS)Qtyn^EGQLO4uX2!8W9mvR9hLS~>8 zTA>fdn%-%C3t$r)N}TIwq5RizV-k@jNj#JP=wtoUovrA6Rw5V*+Arh9mVHJo7xQ0J za-U+cH2rgy{7D)EDjF4&gRT*jPKO$iD5GS-ElILNe4&T|q$>pqqI-#;pJ9{NSdx84 zOx3lZhdHD@5T$Ii-ul^VGQ9<4Wvrr~sp>Z2ZIsAHme0ZNMs zWHr-Pr+7)F@+c-(ilyEGS6g~ZKj)=j+I`P?OI8y~XDX_;daI?wrm4zq6=p?%00_Oo z8BJxUf^U69>hv4%R=z(y8|feeXI4%wh)z zQ;9X7rCuv6gXCAmf!7n_nYauefTAq*|&8$E~6jDELOLSV65-$OoO# zrQ_0oKS6g!+b@+=iPp*%hZIaq)u04suE-T$5@8@g!Ew3*A3a;PW_vQa+8t2zGPVI! zs^Bs>Lv`A;AqC(kbs~30&>2+!m~*GaKRsXsS?F8LWVcl4A%Nn0XRAgcdQ}Q3w62!2 z6xdxL1ya^$F%Hoz8N*!?6fONiqYgGLq33J9f>MdGxs73M)S^%cOA?csq}}C;sasMe zrMeQ7u|B~-|FTld@+|UWEJ&EU5R-YK3l-ebL$UjAz(Tr|by5R#ea~`IsAZ`B)GGoL zFi#;E%!|CUyEDK7rqjX-8C$uMI26=!i2^DySuqq3)4UZUj*kjK2y?03YE?m+Bp?%g zWP!e^x4s}l6r(Gqi3@c!-RillQ*X2et%0%!^(4U(kB8@92CK~hqQ#l z6lu`I0A=KX3GtGG@`Qo^Ihk5jA7~b~{nujw+`=y0OFjA>Eki{@z+oPCGdlp8$?{IZB_#%%;_1auhaNRbK~eelb@$!Kc^ z2D@G5d?j{pBQQGmA@8#&ItPd(9GFz6HEC0E zF-EIYeb;#ZEpFPJ%QN$`ROl_%C8=FVgh&(Dk^BivM{DyrFf)u>vI z0AR=x6hwk3pK(UeojoiE{a@C**C5%@>j}{dh7<9ltNnFgns+}Mjf<$wh#Or$Mfxw_ zx?gqNq$u4La;&oAXnm%)u>&K5EBeR#A{eC0YYQ!UAzP#2CckDJYcC~tm#h_^tlM2Y z5o|ip6%;|NaLJM!YlP;c6`Ork#Xtas%Xtk|18j})NMlTFL2)xlfFeke(NxM2*6h4D zfaV!y{V8fy9Ra7-CU#o78UTb6*8}oc3P83uR;%qj;n>WbSF#&pu%T2IZ-7uU>-r&u z0%iUG%^5>HLWsLMiDqR9i5$Pw!jnyti7JoQmr@AiXalxw=K(-W653yU#k(}d4Yb8@ z1VB2}AF8d;6m>rbq{_c7(I!3Jdn_9@UPA=rd}FLFCT&knO2`?_#$@bmp+n?t4AWl{ zE(Z})AdS4d8$qd8-k^0)U(Og+zSDZlE86X+vJ8{_!+QAJY6a!e;Wpl9ersTyqi5l; z6z<+u4dZ?+-#6-3h^0IG-QuaZxRs~QfTku{=*(UiVq2%y8`2YlMCZGdH4To64_?<0 zzT%1A>Svp_xx8UQkYO6u2f`{eA?$vUG&tzow@Yy1EUs6+6k}{MO_5!vFFv9WxupRA zn4S$YK;0EA`WwfiyDZ+4xjbGN(axxs-HX?b=fh@?I+ej(HVw(XwNEv^{9t;<~nOXUDlK`Sbsz}NA`P2(Jmq^=Hxi;kyS zQNX3z9sRQ?C6RMpCwJD-CM2S_-8lkqV$N%FCi+b{!@(S$o_}QYAzij2?^f(uYov0m zfI844XO}rO_;FJm^I&hFu%64l@uudN1&E%t*Ne}1r=G>iD+7mb3dHsdiqB^Mo9xQI zn~vBdlyR|BOe_^++!qU=0~)bk|1W}X_u-Wl0sE6Y8(Slr6@#)AxK>b<$Uh|UKnuo- zAOnr@`IE}M_RRwLlJ753nx9u;_%#doz4)+Cg1u|c`7lcPfvEU7?uabA*Q?0*#8Q0| z3qP(VeWstM{RD~JeT)9Ir@5c|?Rl*89rmX4-l%%)G5(JXinIy5KRFM<8Ii2-7O{+v zI6pz)Q9Fgux4_vC)tl4ofa;Zy#WwHgzQ*=VUQt& z2^B6p$k5@#h7cu2oLJG~MT{9WZsgd}<3~dZv;+Y8F$2YtDN(9q*>WTQ20a2WU;q#V zfJ>Y?SMHp{v!_m=L4OMMNz~|3q)C-74VplU0Hz2}MlC84Ko6`~2Pk+rpvRJ`R83MG zFhGM?v}x6@W!u*6Texv`5&!_eAk&is&dTN6*KbadB>xU3%&}$=#83+_X585EW5|&K zKczZ#G1$Cd9||xlxgrLco<)x)UE1{N!FBDTX5Bh+;L2fLU!G}s_HEp`b?;{DR54!J zj&1WMUflR`&!<0^^85Pv_3!83zhwEOxL6+U-L1uu(GstHx9(7y{A z)Q~>z@Z0c15JMF4IR)x!?x-F5K=8Z;#!zJkE*>0_G}t`KaHxwkP;EyYe_KcZA2q7! zCbXJ-0 z+jR3y_P9i90YLg7h(!QWgpsKLI)f9k8eht+3<`&X$g(Mqv_p>|WI}8wCvThxv=enw z(=Y&HvglGnGH8@Zh$8h!RH-t3GE*@bdekDCG!=@{iUiPO)+=4&G^j91{c~5|%oLQO zK|hPg1Oc$Bl~-hwRd(5h=t_@0ApnuK&OQJ^kiZ03)r?U8U<;j41KXxNAX{L!opd;J znYC3qjtm{v-APf+Yt;zBbyrev9m2QJNgw^T+iySZH?&R#{&!eeE6vefCJmO#riqMX zSfPI%K4{;3GbU7CpXB9uSWp`TSRo7=g;(3EP^FMxkr$?TO?6`~$yb-tW%%TmU-rrb znS1v6XAPZI7^npf%p#vY7T7^rrBzALDzAFDX^8=TTT+8!d)TVess~_T>jZi*f{z2X z9;8oWZBD4qtif)ZE1*Aeuw6-UURj|`n=|q-B1?8vDkDvnNY)@uJPhJc11H#_n(VLx zaUB!WTk?cTK6Y(A9EVtg#KHuea=%%L30_f8iq!A_D=jWL)gNQ>ywk%L_w=`#6hAr9 zMg^GK_D*FLy>N&OepFOl8|1wVCtuH$mB(2JoXALPr~Dz%?9jcr*za=kc!o$NKC#`Q zUp#K|S-p?$dRabnB>~1Q|9$x5uMR+?7D$>-YgMr}0sHr){_6m=uKzyUBLwL!E` zcUsdx0*sIYAe9YvJvhLn5>U1Pn#~~sARCajR=~PcO@7;9*RSqnw?P;xZx6E`l%{eR z1?|mA&I4SPLV~32-DrlUvI?WpV=5S8%_cm2*yT#)!@C5bg{#`3;GlG?h17&5g{uj; zf~XMHK~7&v)ZLLzB14B63;@lO)#YS3Iw98o#fe9PBFSthF;or7C%Mwy94zOgDrL$h zLz7A#sYu4Zbx(ftSIWCIbOVBk|g%9D&b3I2r(53HCeJC+{jZ&f{9|{n8$2dOkXzi zlr)j&&Tn2*h;_3GBI{zca8fLbG%T1q<%PzC6|o`P45&i{_o;Gz5uWmV$TrUgyi5hs zpxI1dlxla7)lJHettuoR&&Ezysmz}L+?pd)MM2koG;*h`S_L zjrD$lmNyW?3(4h|1R6!$FIEnG~VTDtvN5hINmuBRI-rPw6jrd#SCRe!_(W!4; zk^uctD+_t57Sf*96$V5#s#DqjWw8b*)$48df{LkXrx@6*KG70O?lWEv{DjkHb|hTE zQQ=Cj=}?Altc*o*=*C>w(3q$Zw9Ue6HUn(n%6W zO;c6V9+lNiROYEhwU%On4(F|#GwBR@7$(vjhwRX3?{ac|0=*m>ilMqy7+6)vhD_tFc5!_P%254=jXG7|lz3fy5m^9vW z?m<^6s5fq>87uV$_gHI&nS9w<+iEqjS|4n^Bu-Y>mGhlS5hGE@Hma`TM5J7ybR-5d zs!B#mq-i_8$4cu3v7JV50|781N_;NW2w|3q3arR&e^)kwzClJ`Hg3V z@yZbvpup2{(j{L1NV@86Q7=E@#fd%jPm|Qfc&qEkkIlH4V-w_7lz60J_U-x<*~s5i z_`*XHaJ0u=?jsC$fEEy~Y1yf(6A54)D<`G|0O^P1N`QNM^g|$xFHLMUe5nL~cKFTB znHqbkmNy=7Qq1xd`HY(o@5yOeMruj*rKjKY z=guItPo5*4{C@e(|FgO)B~N1@i1*JQ7s)S$xbK%RX74)0z2TK^y#z^t(ahNI|1mK^^=-Ap8p%1PUJvLL)rF z)5t-j;GZ2Jh`mF?FEKahxv)Sh+(Isd3lk*5aT5qt7zn*^iCD8j9{dt5 zTsv;64U(xgHq4D8?7=lm3m=@r=c*JuOo=^&zz8X^zw5)65X3ArLpRI~EbKx>T*T-2 zLcquZJK2#d%Yr8?iSj~2DO{KnLK(+ zs!*)|^?4ZV6N?h{Jis7<0eRz{OZJqH(Gmq|3k|N{>Km#X;o9weiQ7TE~}QzGb7huWJ`sWUhM@ z3z}fYf}x_mamWDCN0mrKk(n=zq(+lGNuzMY=Mt)EVacQ+5Pq781SrSCGo0=6mYF=4 zTiUyftV5Pc!)9zq%<87wsh6|Z$q6|$+oGOYI}xO8xQR(2A%S_t6rhFGY97|^6O01Mh(72pHb1PsQil@}cKa@+S zR2{g?%6NQB!gR}WLCd!MM8AAJw}M7H5=(_q%84wL!mK)lY{Qnbi^_~jP1?u4q)D(` z%uPzm*7C|g{KTx(x||72r!-CKk&>e<$3qFgJlnmJL`mGt&6J3;qv#)ORGK;}S{7{H96qN!{#IKV3eAv=RF`4{2dZN(6vzgb1wyGdNp<>mk1c@S5Fo zD&3JF>d65xD*!bK00^Q91N^q@d`-^e%sk!Dp=?tL1G0eBk!mTyk zqf-otMX3uC8=X<(CRM97lgSl-2?ACqNLICrUOgg%{4_nvFl3Dq0Vq~HGOfe#s4(#% zbV?E~av>NKti-Gxj)G5`I8kZ?CmqRE9`cy5)0dAKHUWcBnYbtb)14VgBN%emW_8D# zQ`WWWruWRqi^8>WwKZNP7PZ?t)3w|B7@x9cB*)G)$3J~qs3k&c6pB*9pC$}WIvGy?g+QtcN)z|l$z8H0 zGz$qZLx^9x)UnO5VG01AdCw;c)jfT~bBre2NY;fE&opgSF?m%|t4dvk3c@ik{JY0n zgCu!6#k`Rs!OK>eJCTwlA^`g}S7E3r0^FIq$S=LfU{#|L)7Hzi3v^OZ#(G>u8_~;r zOgy^FsWIHq8ptyxr=?Tfcijwz+@?o62zgQ`{8~@Hf<9?$unr3ou=GbD+R*`!gZ9OwTXKARe+o#*m79nZ57(VMbh#!-?}9t z^0C(yNP1m1Hd3%Xy57MZv0qa8?oKJsY;-jk^o?g<4~Z~zc;=G6}g3)5_ zt=*uznEbNSv=TnMeJ#b2Pra4iw=yw4O8= z0aJ2GeyU)vEr6W~H1)E#R-VoeCYca^!***tZ!_T&7Lrp%H`EFoA->qXwLi#;p-Zb% zB%!8+BGn|FCwf6#Vgq8^9pYmuT5+aZBsMX5G1n%p#aoSH#@)yi16}f3sL|aktxVd? z`l9hQvD`HxhbpJn3fFeV=W*sM8KYA-#w$Ydt$3zf$YoH8p0EE}ECq?@I;GRj)u`M# zwL!+JC1vAsZe3lx%Yo(`-s)a=)GSr3Xx^n)J$5lMLf@1FFwI1%lCGv;xz*KdO1%6q z=UO4s;$HiW(xvT1lB8v*j%q+n3I^uoqr5WzRuU&*zTg7Tnwb~?KIoeQBD@a1Lf&Aeo z9#QcH7uC5mh3uvPO=6Exw0V9{S#@1|4rzvtHrQGyzb4AnaFXA1p2{XRHdfb(l;J) zcid}j9%nd0Y{f8L_nVTQZt3Ac?2uh!!sTsEt7c=9(Cdy!OrGwFLT-#|t%O<)NK!rA z4Q0|+-85p~z3`X}krzZd+LnbKz-wy%6ppC@mudq?NhKsDp~?b+ND;l8h$ZW{0Fdyf z!V2{gW=tif3NmK0UB>EM8-7!3PThpW>90J9XL~67WHJuy=uqZEswt^TxhUnH=^N-T3i$wFm z7CEBZWSTRyHy^fc4)Z>S96FZr!+vo#Qxq9jlrT2NtNHPpjdR*{Pf0)Xqhm8@Rqrw1 zIB+shE}q{&hu5Bv$7bm{R|&=c8mdun@*J%3zmIb(G+#!-5_3L3+FK7^&~jy*G|U1& zaAB9m1SbjrfJA9gk?V>vwPaZFf}J#B+cqqf*Q;BYigtP|IA``lnVnjmMNO$BJ?v?| z?K@rOKJ_XK_h|?4qwX+7xlDt&%H3;6ci}y6Vm+yF;Y|h2eMGlrw>}r%&JNSe)@;pZ zQN7g5NO^a6Zc+GnG)RHhJQT8bnT_jw*FE&&l28m|G$DA;W4?nY_Y|7igB*CxU0l!9}fA0pFeL`K7{8x zpNAyngG*oM)7u<&suw~3m7EKuaY8;dNoY31t*?6Hz_rA~-fjb;1&t3@ZV&-~m9GbT zw?DwEfBU8&aW#~C_!!qIZ~L0s9*)*3=#K5@FS6%cD;cu)| z4}7_Oi3bG;Ljni?5-e!YV1^(91|4kZaG(GH3?EXgXz?OK0eXT2k!UF4LX09SV(4fQ z1BQYELXK?d@+HieGH24PY13r_Ei79u@uOi*L7yil4h(?fsE#)@-xT;sFu;!hHyZ{x zAoXd2sSii+xau&2fF4Z~^cY}5E84Vb*RpNv_AT7Fa_7>mYj-OE04d?_$k!(e;4EVn zEKoIu%S#Mi?=o)e_-@X{A~W=K8kFc)q8cfK1p3$_06iW*lb)<_VCRE+J&#N{x^?K+ zG*{bw>m#6EAKYZqA*PD_dqhlwbxNNiRr-X;dln0NB^+ri{9W z^0h6xQWU`dU^IXOW{7zb%NLKkGG#+wjito@ z@(Mn9L5|84=e_$Dg##H{=pa=FIwVyv4%*@H!{wD0tOMphOs9huWJq_xxIfgJs}4u~ zAmZhjXSk%hJsiNmdgPirZV!B@N9F)->ktJGJoGTR06Y}I!{kfc5d8401|NJB+VOBV zc^V9`9(3-4O*r@6d;dN7$`a5eThs!u03d+umroX408nkp=rZVOE1Z zsb|6)A`-pD$1V^2b5k|S;pa;QnL7#O=j8ejrVsyyEzFn|iqhd%AVT2>Sg+@d?qBU7?Cm=GRA?HRh zkLKl~AY_OJ(CDI^@zIrk8`nq^R}{T1@oo(rq1ke3NrzetWTF9~!M3<2FV-+;KN91` zP9wpR#7#?1G+09H5Cp81Xk~R&DMx(xnis;9g%j=BR)Yf755jO|1k({nom$qLE{Ug6 zdksbXsn_;U(q5OrWUiuu8p-*@liKmzPoUBufG&x!g%j*YH1~$lA$AS|fNVE+39h2h zvntg|z>R)~D}me~3O86u6q5I#(vlHg1%u`@rFXaUFo>Iby)AD4bE{iunNuzATOS~@ zP?&tA4-nmgr#v}}zn~0&0SZJ-SkTp!-S*RfOPK>_vP%(3)kvXaWGL8PDiDOtO<-qD z(ZW`8(edhSZYo`gE5qtAI(}_pbQKO4rv}HQHOIYCTG)bsYC(nQkZnBU;m(q1SD%td zz&>-MY8ctjqv`>p7pov}n1)s+LKLb~I!$Oyw!Mb1ki8K^C_!NwBL*h5uJ(gqiHCzi zwYqI*Ze(EHii>2$G9JM4 ze*Uvoq6HT&WWg^&*uer45Fq~aVNLThL;`X!&*e79UC&)$iG~U2NNTx~m|k*0@tdQc zVX>z;1zTQYS~c^gHPt&kqJ=Hi5hh{)2}g*Oj5p%8x~(_DV=Ws&Z9~>ni?`G&{!pSS z)5!Qyl&K9iX)BjqvZAuLrAFNghP$X?ygF<{9%fS(ds`kS0`h?*P2*UT-KH3$HAX;H z$bGc!Q*J*LVG7K4tgF50eWL}*%TZhdo4goOLORMinDSx|9+WHp7}Ai%KxGrKx)EIY zvXq9jtnlaAr_eLhA8{;1ss~fYKC`uKl(PVUr*Mq_BdY)%=Qqq_E^{Lb8ZOi_OpbQ& zpW_}((g7F%AMOULv0l$ImVSz?(ldY*&wN>({`avxzFluoR3j1Tw){jBVz4Dd>k67% zUOFg|^HN1LilJc&8_71UW_9ct3ylZs8h18Xw5r6`y0~+*(XE2W>p(;)yYQ~C9ooAj zb&uakO{C!|P0hfE{|Ze}GT*{iOxk6vqgBJ6N5Ut&@x1=9h_niCt|Ek{Wh-Kd4>x%Q zH8O{0Y<0VZlgKUVnv5AXq1eq9k-~G{qakv<>ql)uP&d8!MbTW6B}RNqAAd2lj0oc_ zr*JQWuA`}}ejG3GeC#|w0Gzv2#4%gAa$V2=_J)#l($KY%J43p6#9VoYyuZ z&ci}}7ZD!hA{ET zewfI#m3)!NOO1^AX`5`k4TJ^7doc~quuObGjQPD6)KJWnfK^rP6xu*d-!x$rt`w++ zSQJ8`f$17&@XUP$nXZ`x-aKIjIpNpAn+=M@gWU}cCShW@Ak_Q~e9_%_84DLW4ZPV~ zMXi(?+Duo472`dS&>0ODUSSE&oWE)Rh<2&q3J%s{L=NW2QsmrC@^Fq8oKmiUO69l+ z=xD*}2!#N&4&>+nCz4KW=}-q|00!m&Fv$)1VOs|d#0}iQg0NZebW;7f8F`pM{UJ{g zh)Vqp3uhTiEjmRTv7-YZ!WIq-p zLgu48K4e3x;|`|AattJPy`vg<2a^;q9qzeN+oVRom>c|yo`)jYUMdbiAtT@SEivIilti01WUR_SQ-bpltl$H z-BccrHWiM$j76BOC13WXUy_8l{iR?Q+yS-4TRO{}3}$^OAOYD2H7X`#G6?d`#bFl5 ztLzY6Qs%7;m6>FP6|rArhNfsbHrzCTq5)YZ6Xd8fIp`CT-THZ4wS+ z-sV%L=Ag}{ZvG~424`EuCR3adL-mR;PAu zCwFcabDl(VF#rR&R(DGO5^uI-d8Vg&>gIK-g>mAhno%8QQbl1-#jdO;e&(l!d}l=n zz&8Bne;PsW>=#KCp?eyre$EDT4h3iYm`nm(f<~x>s%3jRq$Q64BFHYf%BhlR z;jCXAU8-jAUlG*lpU!GzZmCEJz&$y{0OWwGLKg$j>4CJ1>_E-|}s$2>a1i}EapJ25@pe4KrF_hFO5q)ktmU#XTa&CKw>P- z*6gzcYPd50pP)`fbdbTLn$0Leg}Zu%#0~A4kwGUR2-4b!w?ag{Fh!({jt1b;1@!Cj zg(`3etahXvt_({wNo)oLk29rcLl9Qj!r$_gs{Aml&9*H$Ql(6AtgiCvxdhV(?kc#L zfTr2vgA@y-#me>cKn`4mdGP6q!fZz7tm3*Y<2J5w;B2@WZcUhyK!Hk{IS#@#nbCe9 zr9ckD8AJkDZl=tue3QE;Zm-g&gaSq=p+TGs%a>uZj(-_mEIB$oK_KRmMbj}oCS^nL_rTI zr7rSr0jsU{Ch(?}W>pq%uF|8&mPZZ<;qAPO@+yZfK`QOcnQyrf{CRXZxyefxr?5Tp8%3FZ?+T`_?c@nvE!_ZcSQkV1NI9f0cTC zpwxhIllmzLTd2%>uk})~9pCYtzOmwP z9}c2E#kso5QP|!EoU5xQh?^u&HG^&{N{78pYKW#{CL&{Xe4r4f5-NM24xAP*B1kZ5 zv##9p39ta{8fyNMV(=UzYbb1eIx|6kC4Vv~b0l=)s<1i&lWv&tpnmMOCUd{}aY0}7 z^foPep5uyn@CZjPnMSmy#n19Q5Ar0_Jfk!{Vl+zw>OmhzSco9@kTA7UrbV~^G)_w^ z3SZY>jxA9ZkMSUn6z4Qi!}3cX$EMh83Dcx$=YIpWl=h6cY!T|i|WXrM$w(?RWh!NN}vFLVkdNw?ksM z9`{PmY(N=>W}CNri>4I^?`!`Y2EO*Rn(=fg!1cJ_xU7URk4yRO;m?5wsEq(bH|2ll zO1oI#^6p`I`ZhzqXAXgdNm2HDUpQ&jb@kSex3&`6_eZLD zE_pFTjIrNhKn8+``_os{J%6`X+^4=)Ru7uwPz-xCm$EDKV&UrHuON=`Cp0_tU9_3|!^rY81 z0+O}&inP=%fheYqG4g2X3d%D;A0me6Uk2#C$ z*=F&{%F1{dV{oxRs;1o!;G8<_z_~CjoxvlB|189=8v9}MIib#RyVIp*+q=f^*1DJb z3UB%8#$>!7*5pL`#-Du5RXT|=`@VNmS#+Swfd>}{{Ia9}%Luv>1@0|hgZc-eu>g^U zdgL;gh1rmY#ISm|#Q(N~Dl{`ghv23*%11o`b-ZUtvkJzrzJAX1305U1vebXQpQ(H< z@qt|KcYQ;O2nlZ~l&3m$gNFVBl9i z>N_3cyJvQ%zUzzA<&Pv%p8FJOvAARG=qL78SnTWfz6q|rxVFCU4?p-kcZGQ56z9I~ zH$Cw;zk8H+KncI|Pk+1^zh4RdTr+iaQa|@M3-n+AfA@#~IN|$C003ZUV^His7VH3L zhqd-^zxc;Lg?#_F%D??jy|NPo`ltf>1B4-g0(bNQv|wODg$o%rbodZr#Dy3zERlE- zV@8b|Id=5;QDXuv0YHAtFsNiol`C1cbomlyOqnxj*0gyOXHK0vd4d!vpy$b+Lx~nO zdK76=rAwJMb^4Si0I3x}E;y(GC04B(c3gd!A%K7aSarV1s!>3X0|UrHb^F$#f{`A# z4y+qdC|tdJ`S$hu7jR&~f`0}*I~Z|d#fup?cKo=pQ~*>xT1B`cOXkcw23dZnphu4Z zqAlVKz?P$l0HOUrcFj^Q$*{eT0y0!G+u{$Eq z+7>tE^c#@C0u4M6LHD!(Dz*RS^Up2_6P%F33N5@)I_f5~&MPju;tVVA7%CvX2+LS4 zG}JN}fW-rP04jsDL>mCcv=|tGyb*gaf{(SRT8)7h2f;wJ8G8U=Ap9_lY%byi9P-KO zqFj>7Dy_T{OP7W-$-yNgWG~Aw#T=8&GF_64vW`St(<_DqI3TyM!a4xP1B}2?0HD$e zAOIgVcvCFa;!=xGtop=pfE@U|a{wd%1WfZifL0)B(Y>i!YfZ%V;fgK37}ak>TF*=L0>l{P zkVQUM-OAWKS=NP^MKYm2#YzA_dx;HpEwNB4z+ZxAUT9!}dLDoQgcW8uQe;P#NhH}M z29x5WoqihX=rqRYJgw;aIO?qbwcgr71*%(D)^-IBT08;XI9LN=>kW9Ick|@a07XE$ zzqn;%EYXk{koi7e)S)ufIQzewRy%n-lYIoIqV$}fz^YadkVVj zJOTh!2mwS2*?}suz%ng`Ml5KP|6o)OSC$5j5QQl$*8*q4I2FDShFL2aUAVx7TGjA` zh${e#SfsQV(nNqaap4b%SVS?g5NSCy;u4v-tr-F)aZOxF5VNO5DP9qa`axn$hL}Y! zei2LB10#W`=q)Rb5shhV%obtNMK!(=j?fXKNgl;R9Gx+aJt-qi+?Yo{{;?@+d`TYx zSx7@B=7}2t03UR9fE@54XNP1;(hQTvAK_7wncRsWwe%#f5wIl}$j?mZw?-CxMS7Z4 zC6*G27Czwb4I}8mHX?}^``M+AG@{RG?3c?Pp6y@u3(EjlwnIC5(2JC`lyR7*yg`=I zO+4(S{9ZRZvjyvy)#M?P|LoQ_Y7PVg*Njjut*J}?*|CQqc@#3^LP(PYK`MH1=PKz5 z6HXd1LgI=O4*02qtI-9T0lnBXrgH~}-4po1GkX*Jwr5kl)((XLUjBLb-9 zENRKkh9rP(ZR-Ia+y|c)nN2On#F^lL^(GcEKu?THCm5B9xKwrwl=zH^KyykkeZ_7B zAYGl&URNTM!ly=dy5mY|Gdz{i4VODIX97^ygP^h~cr#rb4xGSM1-NIRn}jC-WCD@|I9wgHBZXg8O|J4H((X)lWCzSCR4aaR3-;g4vf$zTUG#3)<*&K zi)Cyri-VEeHCV&*TSx~%w97h+o9z1&1BAj^7&#SRP{k!wMJU%H8B2))aDrHz;6uIT zXkl7_YkOjuwr{GHBHK$220E94v6l6)>Gjrvmex$mCEy3v-6d8;IotWTHY;?!t<{9f z9@+-WR{#BsYr{LF{)Tfc&TXrB3~BJHK@r&ZSA|OWbv>im zUe#OT-^|e?iv?%G8ui`j@HSYLZ5UCrg51~9OLZCuQf-K4$r27Qr<7}J%W&|6AB6P{ zIxsSl`>BN{{|S_zOeO;v-uh2)x=*mY^=*8htB@@-fNVClopQ(gRfEY`AziN9EkDXn z0aQ0VI*4*z1)zmLXaUJeRQ!m&48SB;AGh(K*>fn8>pvTX{yxua7i|De23KJACI$jqN&K6n0o+5I<=c| z=0Op95CuB(0N8ca!C!gc>rEDDXfw0syv$PsD>fJR3&A?lrMQyO4t| z8r-bHC`VN6H) z?}9E6mi7c-zXH+09|oGRhx0owtkA<`%1bIpha2b;No%CpI^@?)8m{uG^6TPz0Vj)v zpC^$sp9FwuhyMrWN*g$+Z+q~l2Rh>LG4tGf=q$6X2c(77K^{0q~I?xW2<4tAD?2u^4 zpMN7mpPtWu?%ol6zivxcK+`LYmD=m=)f&*j?pyZ#;b5T3>TeG2Z|~w`aPp%0%1mYG zM+fN6E^ff?_@vobVDai^*9wn8PJrVKK>!@E3_8#N=BEQ6$^v}|*jl6TLXb#EOj%A3 z{a$b{5(^_JuWc-EL@*D{E)G}DM^ThTc3MX41b}RW4E4fqfKsbtRLc+KY?NN-Z~}1m zyzkU(E3D#=|2|6AC?ohVuHyzq;!dsN3{Wl7jrqvTV9aoCh^6uHV(R#501}RW|2nPF zPNamGP_q7v&F}@iV2}?nLjBxp{fy2Dl_mq^uj$_EW|}VlmahLk?Fr!u5t$CRsLDl< zD*-z$B6Oe#ny>+jVE>BX?)VSyJa7qkfCRm5@KO-j{;CL!EyPSP3iWOUpXB2D&=#9Q z1}}mJ4aNqaio`OnZFZ%`HmkA#fJb1&b`+(@&?xn=g$Su<5IQYQL}K@1&z}TP3K`1# z;BW~daZol(%XVdGh>K>xFyqFeU-)48F0o~lt1W)U1(~TKGQbG{D*>Fq9tw-=9P#<| zj~h`byu_tywP_25B91IBH?d3|3o7X*^wP< zW&fJ+2B7WHP@)KUAU`}21Jh#zLC|36ZX{ue+FF1VOEDHha0zO077daol_D1eA=hfoSft}AV1tOulEGIR-c;N)POa*UdB!K&s<{;lS0rr-kZwy@Fm zE+FXyN)&I)<3bD^n=+{QM=42zM4A#l%p&CI24NaT9Y3ll-;z|qsRwDVDFJ2r0AvJc z#8kWr0PvA5=qk4A%n_4L>i%)A2(l*)QvHffpIWAbAT!g*0Dm%a1eQ=O#VIU5E$g%* zEW?s4C(%W+X-EjO`;?M05L5S>u<#Dg!px!-L&yOeFz;Gm@A}RF|K1L;@XiGIt{OKi z@NDvC1`j-*YAr95I!#0JTnUx}vc)9JkxcI-;KK-{kAKu6NXDX34gky|E@&{3)?9=n zGzvX`kF+F6E5+|YHq&-&Yy0X(4w)O1tqQeoKWoLt)OCEzt3lT8C7!|{& zL?EwgP#c0BX^&D+J>GZ5JGgrCN zu51P8a1JY1Y*9s(@C0lcqXfFT%~MO2n*8!r4NN%slfzm7#E#X$0^lUCluzgmTIUB? zS1Vg7EWa#I9k;a9hW^*=bUKVC`)@Lu4U4OQCZkCHyR%nmb zOnA0uk(Oy2$7COtPoh?8r({^raLu{W$Y5T)y%jadL2wtIRYkMPM8YnE-tZ>gZDfFgM0}Oz` zVxFJ_Y>%RBC1Qpgm%J=%Z+A9mg>DRS$8$gTLGKDQTIZTjgml}&gEU|?K!`T(Xw4)r z*5Z+Kmk)v_w%@8odBQ0O@@jE*4zUn-X#}9q|KKTyVnh#ocZ!I2B^=jwEE8^lmodm{ zZIQyfhIe{vC3OcabD6@t22FVyEE!@U`l;&Mz)kX5;Uhwot9fetF z^Iphy19A262?GjEgPr#)#8-~Kcc*-pBGUIF6gXWTmuy`$Scte*ka#zo7%CKaiP2(a zv{yG2IC2*Pi;Y8gBbZ!bv?SGceP5yg|9TWQD3VeJuc+QP{p5HfY_pBz6bnrbPUZ1= zpshdT&db;)h~w!?*vY)ES3fd94>~wCthil`_<0&x9uZiBvqCl#=z}S%F(+yX;w?%~ zm~LKJ2#ce!GEldg1+pq4D#gMKM?`AHX$0P8hgB$2sitb1=924Xcln29n739AIBx4^ zhJNx;f0^gPm?7@AQ7Pz9r}1kpcX5e%nA67&;7JRk8BK;6d%3xcAiGoa=d-iJ8B+ z*_fI6Pvq%s>*sjmcF+!0QMLJ=|8aw%llhmQ*;MM5Y=bsNqkklMTcGCLb( zs-jkyoXhQ4hhvGARWUlK!9y$%Fn$h$-L?>`rJB34)7o-RYALEX^9!L2paJ0yC)x5W zFkq}iS~B7`qXpoa4Vs!cnwpXMQs+^lv96yHt)SQ0jFb9n8kwR;y0`$upsg93+0UXe zs*v%enz_1}(}a;R*wA+QTpwtYRc2Uj=G1`YJVjYP4yKeRqIHtRsZcdMU3pkOvQ{26 zLDQyn7yy86xohpSnY!{n|HQY95%^DNH;4xH+SBIq?QWDaA!IXb9Wk3w+v9v zQS}4+oX`hvLcGcm+7_w-^MKkq zaMzxVB&yT|Prrq5;2b2P+4cvytS?IOV(1%UyO*6_Pbxgz8N%hGSp!y{f0!ODbUuT3?x!mP<pL*Rmp`h0vZY+C{RF#3_CR7*%0EV6kF<_V}aiu_#2u)5*i2;BepA|E>6sc6@(m6W~0XP}N zr+^?g5%w(8a!^{90uCft3pcLZxpeE=y^A-m-o1S55&$5yFUtTqBmxc)U{FIp2z$7N z{~N%_fgXGYSQTJofaatcG-K#7pz+3)19}8->o`G=hekjT;0*V`L${|-k1kMHu?oSPfq7z<<|Gh-y zAPI5!ka7G$P))uosdL+&Zb+;PGE322}KYEk4~%wgo`a>@yc&<_OSpo4Nc z;E({MizMvcRoW6O_0Ypj1(f=#06oO# zRc@Vyx)uhh&N_fT}JCV;8LWdPcx z2@DG*uOmc3AP+Yfu$p|y4x$4OvdR~Q2`k-@uMR~pb^^O-1rP;sF2zgNQa>$fqE|7V zSyf9zYNzH|Jbp!?VOWVbBUv4hcNLpvh4t0LMp9@JL?{P1l*k=D7*(AE|20IWjw{D! zqMZYAY)5=inn$sQi)qishQuw+!kn0ff>`pAe;{&JB)fBXE>Ueh{gZOsY~T zlo+HY1-LhO>N|PEn`>S(t-Hx)01Su|*IJ^Pd&Npun!y%vbfvDx{OVq_Lsw~xr4|4n zOJDMN6#$rpMA1a?02p)$QeYD-T}?&-ovBr~5c92Y;qYLUlyF;GB{tC99#Lm%q3M=em1(EMC7PqhS8XH2OW`7W3!j>V{9gMgh- z6bYpj4d^+ylZniPR6CsnrI8k5%XO@TsFZZ^c=x18Mww?9_F2?8^Z5`%p%l6(hA4aX zf#Z(6Cm}E450C#W4<0iV#UHg&gi^}of&SShdgADQfYB%W4rx-W@a|zRh09n%g3qdY z6rS~rlgaWk(M3{ZW|#~ioyv*MwCaX~XjRng)bmNc|0TeLD#QVFETw}Vyk#&Z)PMkD zIK!mj=rh2wl@1xQti7&BTyx!d;N|%c1iMpxQ z_{!H%QQOUF4uIdY<+p6h{8luB<=Jv|_92LQi)^3BfMOAmK1zezsS1p#SACOiZ5yzz z_)yyUYIwtTQ71dgawxULm6Ac>l32GlyRK$Q{{VI%ONvNzCJq5!{eO+#z7Q$X!CAtG~1o1#c86Cc5){{>9E*;U3>{q_?aP* zyx3?8l5sw3ijtiL0hU8S@`-YiyZwlnLuXrQSe8=z?=-WoyV}CPFK3A94Vh{|OguXcd6A7=bufe2rn0$Std83jjtO1h%}r zZdJK^377#_s!lTidRIoo_|>0o006hPY=m3c?98@rBSq7!4^#zUP8RX?t|IVJ2d2rR z9`ksE#Rwn|b>x>%qVO&r9cM zjAf~e5b}xMHNzN2Ww%7NtX-Y4xJLgZtY4r1Mtpr;Iv+$mm67rN`hAqp9-#I2V(<$B zMya=d0@8iZr+kfMbAvG<&f$ABvJj<1eX3_cqo*eAw;s#acpAo59~OC%*Jr6EC~uHg zTHtK#h66uvZA!5zj)H9gfCDddY%o-UB9s7j2PIY$FQ`H*^ENQ0ky{8sE!2_$*y4jF z0(ej45_#tnc6TvBC~I^#|1PCbME^B}lTkIG;utP>gf53)d{-Pk_=DlHUQ7sh#8Db$ z6E7xkhGWDQ^CBNSKu6J8Pz3&BFnQDiH((qikYGtQ z7#oF3H^DwsWqckIEfzR|Z)Oq^*m-I)KsUI5`j>lab%2^!A|EAz_;+gv7>S z2#p#DIDOMj38IK@Ypj zkj}V`3K@>>c#jyFkQ^C}YPEqGgph$FjMyfTejtn%DL6||k|qg|>Ec5^VUQw*gJtL$ zDS46=Sz9*&hJbg7F8Pq@!cSR4I0p%oBpG5EX*k4ahb?)Oz}Ar{2{0;o16Ko;SNU5K zgNtb)QB;B)eMXVjxRGU6P(i7PW9b`cX_gn6lblwT!B~_t>5#!DYyd}*ABmSCXlQxK zmwoA%cky`C$d-SZbSBn#IGLo0+6{ON( z1pu0%IfTg-|2Ux;nuAFfFUOg{@rP8T8wzJ*iS&u+J#*_nYMDVW+h7@3C`3P6P# zSe)MJ7v;H*|8*v5H(wlOp2-QFB!r&txti=rpZAHM;W>?Rg_`;4pZ^J<0V<&X$({T; zpa+Ve396tAdZ6~npbuJ~`?)vP3858gp%;pw848%b)}0#ap&tsOAu6Kwg`Fd6qL3+} z8`PgC%AzgmqA#k81v;TC3Zpe@qc@79(deL4Bc46#qfi+}iscs%0VSIOq$Uu636q&Q zDqn$V|Da3?rBN!SQ|cQss-jdHq{t}%1^^~|6%`|bDKjBe?nxgAc@&sCUwJxryXRRQ#zi-1OhS5#^JzS2GpD@fq=|WuA1EMkdZ>>I zsgZi2RvMlfNst=`r@{$ZE~%PTnxuF^q#>v_vx9_-WJ=n>b^WJ#gNYLVQ+*GiY97)b z1mYBrvz3yHtG!vL>-a6kWCTWVHpj%44OgkuB&e=Js9O1yx%x|qN_N*=g$Ua6_7>0=~wLNc*R z|3DhS77_tG=xVM1s-q>kj`L5BzMhvNcmTk1wSKnBT{7$`wTsn>#tv9cM_B*#V_ zO|nJ+7;vrSvjr6{n`l)G@v{^A8nSW}2hbW~!9^E)k+-t6HtR-ETWCZtL`NZJ`-XtDcKR|0<>7 z9<9Mc61%uny0IMFj8TcQsSCTYE4vv~vUstrpu{K{u!55kDHrg9lR_zT5CAZX11?)a zc%)bKq6H{ahXFtaD6}c%c}0_fghX_21!20zw1lA10}K$lMzTzwn=D-Wxk;gJYt(P0 zL9PIhctogLf65hC(-xqT6y(OeSrbIv;uAgawCbqroJWf;ZqgyDco4 zjT@f+HNU~?D<_f}YGFjsL>gu!ygvk47~q+mk#7RRhSeef7)Bp8?82&x|FI6)y3y*9 zODx4xOvUuWp&xd#ubY-QKn62=0e*FD0YFz`Y%p_m8_5f^N%6(b>l1VZ8LjaaS{sHE zX9V?YvCkx1O_VGH<|n0Ec9`*QaD-WYtRM zk_${oUlYNKAxCd8svbgHZz2FZr;`hHYV~73*0DHB(l--a#jhMFyXv^vLPQN=OiHXE zo>c(rro;Be!^EmAdxabSulae4$z0^wGM4?LpT*fMOwG=U z)Ntv#(hAwH4ck~+)F``|AIq`myg~^TLo$>?%SJ|YSk;`OyIAc^T8%EP)=8NQN*_B)1|!Ls}t zw2A>L*fPYp5qO|sZX3~A`Z8ewuG39ikd}(gAa3F(-lDVJsB+1%No_7n4Q*cf1IZSH zG){uQZC71$&cr>a)btul3jmgTy{eI5i5o28n|DT$|9IiTO!8s6RioC2?Vh_J7#j&bC%et zJWROE8*_`|LOtMpZkmHWc}Kyu0K6GIf`hjKhF)09#gc?$B880ZhaxW0s=eA-+^B!f z>7DMOD(=MY)SUjEQf{XJ-rP*XTfEQ#ZE>sD>1Hl^{d_d&vc|I+Zy`lR#2KK~we(S7 zzrKaSoam^-HUNmW-7)A+ed|}t)rUw#6?bpFP9K|Lg9ul(2r=OW5pBauT&PZybSMC8 zyQScsmFIHVTlI|m!`~7kesRKp6lka4;?ZY9|0|^K=_4EH=fvVlx$j2pr~fxs+q0{+6SuM3-V@g6d# z>8|ZOmq@0wBk@xs-3C9+vJCUuiRn!<@H3C|IUkJ(?~6Cjm{$WzPFdEd-QP}`bY57c z8V83w>l?aKPG}<8J&$yDO7!e%={i5MGLQAZS@R^s@LLb|Vb5Va-}Bcx??A0#(QGJg zo8Bo);L8ad)gty&to3t$nO!gNUvKw&&-Z;p_UWqkeJ}Wf&uewxVN5xU%Siam8t}Or z_=^wukv}z8Jfo6t`Imoo1n?Jc-(jkt{|bEo`kxQ_eXs+MpZBI;nP=ad#Hm3(kNL0v z`hTC6s1N(KZ~Grc(j5i}`LO%F-}|M{VMR!)->ZxC#;p`-H7if2jUR%v52at)p9z@h z1n!B-fBV<(7nFacYbER0@BQCDJGoyM008<6VE*Ty1^EE{egWxn#m5kP_34E4hjsu7 zWV8zM{s4;iit<4Kkzq+0Lj?^UG$;_^LWT_;K7<%i;zWuSEnZxhK|m0W0u(~rsDUDY zAOH%IG}#b<06i%&zJwW5=1iJ3ZQjJ0Q|C^eJ$?S1m_UmFm;yh}(O`5?#G@|*{0IP4 z>Qt&#tzN~NRqIx+UA=w%Sz`m6o7WSN4_2iZr zP%;fUvgOIyr)#gqom=;A-o1U(6x!Kh-lU~TKQx`$Z^i&PME`~!UHWwD)vaI0UX^Uw zv#L~K*wM#(A3$-L4miN)z<|hx3JmDMne+ew0^&y%K)(n3r5fY&AAvvj1|V$&%o4M& zhXfGRPr>CD$}hpe0^Bd92=BWq0QdydFu(mwcw>MZ_+UUlh92{9u*dkwK|T!!pby3o z3Nk^y>~aF_xr&k-ghzyY|GY8CgD?o9Glewb$R!Lm+9(K-Rw~k^g#f6HN|TT*=`Rd! zTd7HxNGj5-IaUJGBSWw>Q%E(}WV6j6gPZ9iIVGc!F9meKK?l18&_RGa?b1jGL7{T9 zP(u$zG*Lwt-D*2AixQ%b1TZLzEV$%~NJAq82mrMRQ9SbiBRHdPGb8k?Yry*A)1Uyz zCOhEB15Xkl)q)1#L%&$-RB8}h1r9RX~7Kx%2k1Y7eYYI7R^r?WJCSeDJgkIf6G{dFQ3KUVHDwH(!1C<+opd;g!-L zD9#Fh62J~lgP4t^jh&n$V?FBgNCTG0%90^4 z|7E#lmtTfC=6M4?w`QAhg7d7s)_xX7Xpnj4~wT@3cKEC*YY>VbiQE+f#dB_2z_)jf9&)m*s~6LCShB17*0 zzuU&uNVqddfb6_ORgi4=Fnc!5yX-p-Y$GBopxTpOg%tz%G;e!YbEnSHsp2B{Dg$36FyA=cwz_iAH_Qjjyy!^z;6pz?FtROh&*h>^_e zVg!3XlcNl*|95S+j2+j2<13XLGk5XFC%=62&$oSds@G@Vy`gj_49GeY!&BMBoa1(!G~Hsu*`Z8qPRh@Y6J;7 zKwa(zK)M;oZkY2G2Hm49l3B}Fbi384;$*xRzx%LGx#Na>+d2*x< z-hihk|3QU+?YX2OHMvPncG8ntQK0V*Ba6_(`5fFOSsw9hCAy#*$b~WmR&X^T_fjbD9i}6dRd4Nn)CcDUY201ZV*f z=|sjr(OvX&P5>18h71U*k_v5FCIdQAidNL3h79FQ9GHa#RLX(hX{EAAXqL-h&;+ww z!nR0Stpw=sSd-FVU`ja4#r;x+!Cc5NiP#^3yflLZO4~~B_{_{Lfu4MvCb=xPB*%`SQH%=NC&Y|m zy{y*Nu811wjw%Drs0!eJNYj8r-2)X2~-{w1}bTfsv@BB_jB2Rv`H?!g|_cpKJ{Vm?+F?H1W0``0!1J zoYmU_7_hCjxl&-8U1GS1X_Q%!RzcU~oXL(QTP6x{G<$ubUL1>~H)4+^c0@{did(6Vg>Zx=JYlEIb0(&YRCxfQ3RI4yKGL$xhZWi*PHnIUT|&*0KAa{Im#jW8 zD)HMQbfpou_q>)#Y?tgZ00yAgAPM*|T)!6L64S_Wx$F-gfo!d~`N5d2ip-1YQ$)}` zSg+u_DurX>8W+;4%Us@0k~uZxGx2eOYy4i9J`BKuDVa=SqEu$cL}o45+0HcqaDZ=! zl&Uh4Mgdqej*|>nKr6IUcSdxg6|Goz#)&OE;Nwp?_#2%rS|UxnN;oae8!>L$)1Tf+ zo~5E`P?y@&r#@h#rBkZt9#9U<} zigJ4@0^EbE8&CgWmjio`LxYmRq(;3r49rTHD{(X`OzMb7fSEm8mnrTijO zm3cv9{$rEpkz{lplKM7&6MsKMkN9Kh>kwM0&>B5hRP5$>qe&D5jzhJ5F%1o30H6Q7qq89PWxOG$2xBAaqn zUhVZYykg9pyvJ~XX^e`MfxX61K9DnxVmrMBI-b4KlH^&o9uc|eX^H?;neKDI0-U%D zv<&Q-A_bH`=s73>OFj@>q=F(f5i}0jtHAK%!1zHy6XY|E|A;>f1QTI-!3V6W0X#nS zd%qre9=RKx(ZN4~@v0xA!5>*cA@m~r8bPWtK1TY%isQfXlfo(NB(DvyrTH7&$B0%*sr%rnYdb+Fgcw^M35rc!_z4vMtrT2 z2}C5>!>`iA%+m-OOU183J=Taoqq_06VFZXyO7fTb@TNyed#Y%j}yjU5p|C+|^B1TyRMqE527Xz5;sgFG* zl0}@a)LXA7(F0cKMUkjOCHzMELPTRs2xPpHBHJezJjImIBd>}VCLysm%Exx>L_Ojj zeB?obBo4B=M>x8_#*3OJbV480xHrVejI1at9Er{16l&2zW-_|Gk)W}GCCp$OV-gSm zxV{2FjfPOBTq249sI6MDJ-TzZtAe-rD+zRxy@7$jvY4xO8bXHzAXX?C>Yc303Dt?1Bw;|Zx*n6T5-7PbHu^e-A&a(JBmYAQ(L4Vp0J9`*7*{2x*m|>PJ-EslZhiG|DhBE%|1@qBc)3(gxE`af5YM1o)#VL6$Qa2R1kCm_{DM(PJ~S5oYO~Pi2{L9S8P#p3eES5mqZn#3OyaG^tbZb zDo^YT)%(z|6o~Q~LS$`76D`nW{}mjc6vyVt)z0flK!mF>y-^9w2ss*_Dq+af8P@J; zQ)5*bc+pH?HJ*FIP%Kqfjz9vG(Fl(KM6Yy~E>MD#XTn}Ia8(Brw^0T zjr|?=N=~vQ*ucG~mN3&V?NRwLREOo)2_aq2rC5dNw1^Se7FE$2O(&8CABxGIJjK=S z-KqC{5kYL|BE%3l?<^EJI)b z)FJ+&H^sHiLEbm+TBVUZfVt_EkB&Qt~tTMhJ({Ffy_aa;4-RW<|#-} zoY3k4P4SB5akSm#3Dd(!JM^N<;_1U~l)RB;p7BDMaKti}fXyDcR=U;9R`E#yKBH9b zWrj#npfqN5|Bbw#ETdyqx5zWn;hADomdftRN99phGW#xWh0}eM#5bBup^L|-1lYSw zophvKLF@=DtHWNN=Rg&&!emA)+eP>aAG2WCcSfUkF3fQD+SRF2cx5qG4zX+AQ;4Q! zTN5krx>pHiXm(^CVL4fSz33plo_8chUJTTKY%7QMWr~&Py;xS74drziWk4R}nzm`_ zP)|L(p~btRbt~iy;ocz$>XQJmJIyxaDG(o`LQp7(8b2qv5iL7hs; z>NF#che1sEvB*08YD%f#v@` zv4(3N|J=T@J}%(?yxl(JY{1Lu>Y@>ca_1x<-i=M>3>})H- zA)f06BI^fi716HhqcXG2mW_VZGVKHc0GScD@NLb>894 z6f~#XFKHe|T~f+()S}?>ObO#$t_g`m4mh`o`>To1O!9yO^foVF&iltdtaCdXa;us{ z^lJ{IQLqw+nE&Ys0O&EuUUMGs^h)m z#BVLnh!eAkO8asO&%qr8^!ObataWuKcf33Q#k7_Q&>lSes$fqvc20-D9EQU4|6cRK zg$Z(0R%iIg&hyJb6`;MoDJmk+cFALkIEBh4 zH!W%)`$J}Xd1Wtb%JtsG z^qx0vc_lL#YVSUyICnS4(J62F(nbtQd6<}g`7_%;DRO$a4tn5BjxbsJs{gaVMnD9G z?F#2Guuy}< zfk6adK&Vk;1_1;!A`BvuAjFLuGX$~2>LNn`0xdG^IMU!Cm#hSq|1@a`B}4!icxv#d zCuc-GAT=sHsB@#sp-5jAJSbBnO@|^MCKO0;p+h@%ST1d-P$Wc@Bc0ZSx^O8FqG(Fm_YH=V@lNH}0HXL&?+NFU7Vvrb9z~RIP zZQ>lXb8gANblHx5dvUNth<-!Yg{i@!)`_WUf(9&EqeOyeZ!;`~^l$(J1N z@F5Q)2EaoeC(ai@4gaGd}>43`jv*m2pVmtTSzrkG=rS*Dq1qM4?eYqAL@0B>d~T>u%r*+ULS z}UP_@=S3>g3RI zgfW(ZOF1P~6re^u+fiQ58cQr|d5va=Pae&Bl0v)!|6oU)n6yZd_a#dQu$hvDAS0q`5mrqS0+)%T))^yXuF{LXKzy%xh ztU?AqjBaIm1>2Zo!TOsLM&QndkwYUh<*!5r31Dt!PL11@9rvBU+JmbGx=Cg*jusiK`WbJbnf>UM93 zo9w2eYC&G98NBxyffpoL9}eB=z}^J`R2BH$ys@eQe2eNJ-w1uX$2F%tEIPoJgDJ|? z0d3QFz@t0qkcZvnrC6wj=G`Frq7fOnXr$=5{|e<2JoG3ij;aR`g@W$tz69Y?<+ytb z24r9W4>v@qgO8x2*n9B4E2t@_o2y;D_19ycz4qI4-#yv{5TGrW0eJ4>r32WR!{bWguA!TDy{klUw-J;Sl+Rt)B78hejkK9|zOG zQ+|nUU6P!6S~-UaN^m39QP6o%w70y?K>&MuphjdTO9C~-I-+?)f5sykT>@|^ioyW; z-gdc&Jd-!c1fA|SLL>rSsd>VSLfdj@Hyup>FDitC?e*x|TzujHY8$Vay-#b&;(Gr<0V- zk_ms*)5(-ZC_=l4LOO#mDk=wF1!?O~bi*hWj!XL~T%r=KXR%PMPhl%ofY!u1DpL=@+oB+;W+fXQQXqz{iemkUoU1(2kbsh;5G#q1 zhiJw$n6+vsi)fXZ)RwHt2^tq)>Rb8<(@PO_Wn9}eO97$Cakvb?E?bJX5&g17iR;gD zfytHzF^DMo)0|9CqJt&%Qbgz>kN)fE7 z0#dJt=J|$tGOxTXvM)a|;Lnp}^tTFLFoPTH;0MPQPF|W*o+_LtJVA6R37{URCi=bt zet4yCNa>|qmB5b{kUsDuYC~SxD1(SNnh>6GnqrC_ShiTGIK3AYx7NiP))X(CQ>fKI ziBzd5wK#js3epHzRZi7ws-ipz3ez%~*Me4)eG1}R=Gd6t+Ka^vIqPV&i>s#%wX9jC zuU?@lue#g}BvqzzXRREwvVcphxY8gYbqX`BRb+xWWyxddsO5y|akFT32qaBQ!#rOr zj)KfGDWU30JRW&#QfBH=Cja>?OSUFyv#nrj%{UQ8=ay{9Ld=k9%s^ENcbLO{P6DhO zVBjvQx(QfSt8p3KV2!xaGml-&fKpnv;5{oAt2Dl z{4;Ykq?3%&xx}cBum3J9u_sQZ*vH1`;-4CwzPR%GlC2Cc*nY%|wxXC1dv>#?W-BO7 zWt!KQE@7F^x#<3?8ODOu8{pKU6;0_}A0azRcjG0SYQ|D0g`;>X!*Uj=#pP6lQHa^E`fb64p+TOj< z3GQc}(aAHu^z^nez0dB1aMS$H6F?roTLge3DR==WLLPABevfxtoB#l`$zA~(-~l3F zK^e=F(Hdts;Qs>>P;R>V+WaE`SU7Vb4i1WJr)(MBZcfgKFXVsHgp zjl~gJixT3QVlbcwEs-F}1!?45mtCHZd4v)wMiMUJR`{FTfniHvVO_}3FpY%|Mod#I zR?uBVS=f~tQpFLaMkMLhTujCqauKTOg=oc!TA|?@2GCqomSWK1OT-~l@L>z3;naPV zY1yHuT?Hh;Mpo=l8{(N=!d zq6+QFiT@48(hSNHdw7=?yvN??K;hgCd}slF%oBaYhcCWC;{eF;En|TUqk8-e&s>TC zpwFI|faMqghf#_M(#L}&;~?AsbiI>_kQb8(kCcqxhZIPOdEvT5dE-81m@P77LptO`j>!TZ6q|jUk3nn~kN-ti(-spk%Ndg)T}^N|xL%ZW33-WJbb`4c6R` z@Z{U%UU8kAQotm4APZ0Oq9+BVtTp9M$Rv*G%1=Di?QsWH)?`((1y&NJRw89dekD-O zTK`t=q;?b~S4vZ?=nBduOQLDbS%#%p4rNTngf-C0ed!Mbac+(xhK< zC0y2JVLoMA-e6)zrBgoTo2g`*;NmS-5lN<{MY>a5CZ>6eBvXc@Vp^qTas&%5fru5r zY3dVb-ri7>C2QtbTe25NoIq;&L2SO#M^cH93>9s@6K%Q*N8)5{{^mFiXVE=V2K-NC zD(7-CCv!?<_he3UN@tCcoT&)mOV#3ch*n!s339ridE#e&>ZbyRPkE-wsIcXJ3TOaT=X}cNds3nV-ipNyX#a!O zTV{xvgHi{+NocE}CuJ@e;c!NZRj6`AAcq`ihl=QklBj|eq=!?Q= zj9$-VTBmx-=#AoNj_T;_QRt5PXet#boABn35^0edX_3-sjUMTeGHH`KX@s5VlQt6Kz>mL_158mN|f>6e0OgDOCehAEN;>6+N6Wh5wltmzBh3iXKzgMNves)?K~ z=uF<}a?mNhIGI81>4aA1f<|b_{ppOosmT@*ADTcY znntPGjDQUO);f((NJXS*=39!v$)*O-!<2+l%92Jl5DR#!f<}h|Y-peoA^&RJfP1!N ztkMdHIwzTy>5o!r?FHs*;vgs`dWn*KEkt_Q|+Pp#O1Atz^-e!IrDJ zret`^-PU5yy8^7rqLSLmp-ZwYnB)|^N+8&F55LZ!S{7^dC;&3XsjsaK!g9%#pq#Is zN%7!qn{1nMuwVntV_P0>LWYU)$l&CzjW|{i)ij2}-pj5iRYG=zzOWXBVDI=L<<#Zi?d+NtwtRI zea5;dQdq6(qK=WOeiHUZ1iod)7&Y%#v@3L=MC`GJs%qD1WGdD~UEBpwt#0I^@=VPv z5=&$&`>Kn%P-6P-L|F(bmHlAIl3LMT@7!44^=_*8EHC%Y(Epldi%f1Ln>w#~ENb#1 zaJ?jO6%O$8YD>0A*a9-B_r9g}x>#W`u=Sd+CmD;^f+n$?@H@dTMc^9;v+$`V@C941 zTD7SOWyY;C?+XiX@Rn}{!|e~(Zw6r!u+H9v66<2BXPSKZ<$S^L?A44VKz*87ou>x4G!SOI8|A+&!BP1tE zBX?6GmnHzxF=Ud+hP0d%Ylhoui2^0(tqKznR7A~bBrh1D zR@IL18AAmCx7_?fg<^~Zo+V)u@l3%`1XmzNQci8zG0Q`L25Jqol`J$R5)u!B^jQ5E zr=XU%44qRgaYOfbMHa^5NE?R*5i+uJ6&&70Tj+C; zZJJMPMYX~+>(xegsD;(I#ZhY^6WIkFDj`CL+5Z%GnN}xt8%`Qs-E=JeN+#NoNFV`F zGu2WT#_7S75<`$pk@N4$2^3!dd?1MOfX)vbh%^Qc@)46cY8ZpCuEH7Eqiomv97+jZ z3Hm(jNf|-^Y=#P&Y6nu!hCTKPvPCwQV4`65K6Q3gXm$ohb_sqqV`JomFw~<+2t#d2 zYFFFCVVG%O3g-qf`+hcqh@b)>w!57Kk<{M}=u?VtQ$xJhj@(~*7|)3S81HIH2hIm* z>+U(8NEB4l{(Toe5_b_8H|Rh&co~WUu`tG{F@#28pY;S$P#i>U7~B@FZ!`A!=ytMz zljvAU&Njq~>GGpMthyOV?&hj+leqgbNq1Sm7frp?7?NE62^}vdx zBO}M=IWcz;ycc`9$b@URL4H>?m0OWK^Ab?FJaL3@LnQd1syDwVINxMZE+t2cE;|2M zufVXwoZg>_8XTz+WmyGeT_Me|bYubWAUj}!Zs@p{%VAtCWEQkc58VR}v=Ds-RhMBW z-38E0#-!m`Yn<6(yumAdbt^$ZgJqQA@9Cl?{t)G%e@c zP@U_mEd9CM^$QRYd0Wx5YaK_gOu4!!hRSZn7IitQ9S5c{R-?&PT{R(Y^h=^6`K??; zqaP{~xK+7)`Y-|X-1=`QU3yex`u`HSbpC3QuBdfp@o!yG`OWkTwIn%S3n^XSxWE30 zu-h&aBNLNq+cJfq0&F8G zM;~K%+U2|f15`?&kUIbwT=8r+j2jSZW5l6E2uKxx&>C2Mnwa!t%KBJ)bkf|GkPppN zN~fl-PKcY<>{C_5A2*fA3BXQJU|i&O4hJI2hOs+g$kP&}PK%tMekl&hm%-y2&tXi| zx1B{v>#c=MlL4u_#1?+8D zzmveaDufG8#{pz6y-PO1lKM+yY7P)juH>wc>`)YN>UVS2;OU(v}Rgys#=H*!l zA^+<8I*_f|5Yj8=ubE+ZetsARl*@kR!@Qu|zU!CJTxIkE@$J8gv-OMs6#JUtP&+^b z5Fh}DmIQ_jy}_Yl5dT7l4>R--fH1)U0T_A=Xc*u?fI$Ls6nK~rz`z4NG9=8{@F7Q$ zh6;3~$l#*IIdcS{9QklSjsX{0!j!2}qtF5|Cq5KlWI)rCZ+0eZszGSYq$4Z}IDi46 z)`KPn4meO01I;os$2QH8G-?93Z-YWyiEseQ1U<%jjQUUqk0m2dNTk>!KmZYsG9O&4ifgU|>G&dx`FYhvUBh9p+Qfn*< z=#28u!V59XP{R%VBLD!~I1Ew55lJl3#1m0WQNz3}~$Jy`65$pf-m9 z&;x@YlIjrv$#kP^$ChZ*<0>FW5)wHe0nkkV-GH1j10a7aNy*`CvofJ0okS4;J95*b z$f&}^;K(eAOzFyrdNdO#9AjhB$RU@obFVNHva?4FuB` z&}whQaa3~eBsYj}@tk(uW=GogH7ALMtzIKFQ?sNqdu6xW7CB5ni|=5J>$VR6RdIwL zuKEEw9dJ-!A%h`4FFXa1o7mpS5}*mAqFnljG>Yo_={`5->g}ZfEF;Rhu13ZY0I>+; zai}-u0-&RimGX(p-2j`as+SYWYOAhxzVD~8s49ys3{IM~xSbN16x^sXu!%06s_wxj z6L{+@#@IL}%rL~V<3Vbbz7uQSmS;Y|H^8LptgrJ%1G_W|i->|T;#!M&uQv-F_d=e3 z3;%A!1db!>ECq7%31}R7pwKhDrmOC{?9Ll5C8Apj?+1^5VEAW**5k{)!xJpSFxBXz zh`$MAbj?2i1-yYk=!!_pfXkP-o4@`BDbS(5*S7g3fSGT8vkw(_Ui#^&uipCWv3F5F z4RbX3V0(iy+{$ssbQDuHpB^OATjiBe#~`tlZQ1cJlC}Myywo?{gf-;!!y|VRrZhzh zUtfY#w!VioJ<*F%O#&dX{v@hl8ID%J0^qssRV;gv&r}brleIK+E(e+^B?1i9j&uaC zIzb9rN!gb9*up2O$V-N>a-AM-wI>gb>rJ`Z6_C2stzS86BNMzz4t0np8Xl=vMgLNh z3ZGP@7qaOix{(x1W;j7vVe3Oc;?}N)covp0(1{J)3kDa6LM(}pM*9mO6OCxBT2aM> z|HIR|G7zQcW$$nUGtu`FI5_^HC;<#>4^$Mw5FL!JB`^AjBNHh`tkvanYr$DjK;jYG zNk%417yxh__o|yQZD?BCWLr?BwF)JK0U+xL)QU2r$ykVzFfl?+TuG@;ilu6uoC_?m zn6k;yscFOH3D;KAMh#@reIpSYV9JKJvsKOyGZLfFkfxW(XeK7HTtbc_BY?+bM=v^X z5b*|qySU7fH+q~ELMZ4Tc5ZEKizDUB^2N($#)g`bR1oII>6g`HhhU-P(f{Mp1F=9Z zl0B$f9bkqT9|4_)oO58$G7}_Dy=^KAU^{`|G{6Jm^vr2o$i!G3UFk={!-6F-Nb3MBUkr~xy=gf?0VQjcU+LZ}A84sfDPZfuIRI5Aa? z1%(I>0r#wFL3K8@+E%dsHKvQ;&`nLX>0skZlEdb8CmifjsICTC5Y5JZ08}6=%y+_x z1ga!tGNzFzMc2#z4~2W(&1AvlC939eT_3`tYI!3Y!V0UicGM%Ug8v9ctAv5SL>ml$g@F9Tt4 zhB#8>A@f+D2JOm(7_$*^j;E?-BMg7Q;x~a@$~PD>8k~@<%Ky4d?FJ^z2}(J`;V5+U z%&Nijcmj|gil~yP76saD(rYhl&IG|6B63b@)|7#qY|#XB%s@ACgFGlYa{^VQN$1Rx zPi`~-7#4^h0}x?>T!17639%s*3K&KUBoAyZjoEmBQVk3=0KL;2=e)d`2^D+PAszMX ze&?8hL;=vt7AK+8IqEbAx-d7`=n{m){pR2%Ncj+&avKPT;OMs;N^S zd6mR!ayn*Q_n5O_8zs2GCHLW#lKjQ2<_Uj{&jdfMb{r{_W>5Ga9`GF0#1~$A&K$PX;OXyC+Q3 zKADlPXqfxPt^JlOk`e8bEF&?7yV80;n7nkQWdD_Zc*!tVm+_N~U@Yhhc3Q&&?a&C( zh}PXlddJtyECJ+C;hyh1%r7=X!(!?q09S*hKCcJxPks7AZN_HRU}Resujb}v5X$V2 zjBjP+5Bb=JVo2(DGJrcQ&;)eA1Wu0yl5Kbd5GigVAqZmiVrcbJ4<>Nn2QCacUJ#lp zr7si%|4!g;K+OOuPyqel26|uxsUr%H?LbyzB1Yr>^nwKzurYq8*q-A-kOK=JrveeM z1J!M&YO27_a1Gh84cE}8w#RxB$f&T$n2O1J>aYg!a1S*v!8or)=!Fl5N`ExKQV<4c z{;~Ioigo^U85kV2&tmzI7(GMB%6hF}v z;|&!#F%?~L6It;URk6_^F%o657F)3u6)_ZHagc5*^Z4k?P^1uTq!RV85dq0Y5>dgB zu@_IV7@N_3v_fv=re->^4xzCYjd2@2i5lg`n-mP6a4{CgQDLfy8@CZ1nNgC?u^rvf zX6jF<+>IPRu^ppPE_7@b+lkSZz{-4)dy-KY)o~qZk(0ion(T29v+*CVv7QKW6uEJD zL`tN-&6@g&9{ouk9dgAO(hUJ74Lvd>MRFu@3JzteBA;plNm8e%g?lt`@>X&UMF>q0 zPYp}tN*<4Sn(E_XvL}7=CvyrIv;RjRffC&^fccI>7jN!VH@)_%~+}?67>CzS5qAu~W zs5b8zYf9w2=hpHvFa>ikZ!vmYQ7#E{Bla>e^N6w-^D!Ya77IZ4BC|3B^DZqjGd1%S zg>o|+(la{|V?c8>H7phvaWoHe1WG(r=yIMFgWE%ZWzlHC9lLM2o@3t~R4^DW2&L_4&a z9<)SJG(}Z(MI97BtMl|i3^dYr-Skc2bU)kkD!P*l{(uZx&=1=45B^~Ekn~3D(*;S?O?6Zf!80~rv@k{#J}<^R zaUcoEV6+mHNaM6pE&ugWF||6GbUH@>2l&*HbihuhG)bkDO6hYptMp1MbW2&aRas;? zZSg&04U(J_Ov`jp1C&g&v(^4UJWS&U(DXZNv;ZJx_12VAaWzC~HB*_jS)J8HU35A_ zH9THK0LY*RM>RSL;#k}926a$ahm~8S6Hr66^rY1wYIR#D(?rdcT^GVPoAh17(KM2k zQ=`>GBQ+dtwN~vk2~OiZH?>@iwJ@~68@wS;YxMKP6+J2SSsnIaAy!2LHaewL^!~uY z#N!VT_Bn|)Vg^-Di`7^WsaDS;Oer>7LsVTqwjJAZWBK#+QV$``bOzg1V5g2cRn;b4 zb!T~2L||1;<^PpqFKlG3)7Cf?K6Uj)A9Y{^qA)}UTv_%Hl0a&cU|Bh{s*F}U+caXi zwrg=T*637Pd-YnOLQ1vZY@ya2Lp2Gic3o>URPEFoE|xvhG;N`iT)XoJ*ft6LRA{Z% zL?4xH8L2&|wr%y)Q>WHtDb`b^He0QgZBe#5?=?IHfRPZ=S{2tFt444C^=LgeIww{- z3&2wi)*GtUG=jBO>-KZUb4WASYhgEbWtTidmt)BQO|umT&{ShhmSwd7awYX;)07O7 zz#DLYXy2A^SGGAzm38@32l#YqgLg^&m0zRxc=hymlK^ubwQ=p1d4HErr&l_2wr9=v ze0^3!yZ=*Bm63gA)_p;vY1?;SPp@h-i}~D5QEjzqv_NC)m1Xr8SK+s4wP1N`Q~>@! zZf|#iO@nv&)gWRm3APSnj&f1E&qS@&f00*o|8{mg_=5v=a@kXF(bW$=PkfhmRvW{C z6V_>a^(&}%ZnG0_rxSr0rhmtmKQXs=%@)FVcLdHOf+xaSF>H0aGxX~Bc-u2lxzIWb z)lex`e_7xw0mp;`KyM>PHxpI|s@IAojQhNJU#+utIrdRY*MI31h7;C^5psVmcz~(X zb$b_t>9~$Rn2enhfxB3Je%ErZQ)8{QgQu8aC73KNh4KC z=l>SMh&Kzl5C;x+j+6I1Zr4=F*Fr!NeMz~L+ev*z7g+B!Pe<2Ii8R(+d9)DMKiO4O zv)GKMmX=}ph4u7y`!`=h)nFmjZV~u)?-Wi{d0-OR9g~(*bvI4DK|Bgpng!Wxp@NIY z15ZICk}WxPq1Rw}Sy{i=j>);4UsQylbBAkWRv%eyd6$a?xgoH5Wumz6k@!{biOYc7_XB zSqJ6^qFHzO_KJ_Xjc<1#a2SDGdP)TbPu2P;xfoAFnuEvLrail+!Pa>-7fp4rATauF zFZOX8TV_}KWqq)816~ynku+P~bG`UyVHe&RdUro2icLl(I`zZQ%#7z`UjcZrC8@`=9c0=2!i`$pm zTV{1PJWTt0OMHv*RChajOetJC5m=g&fR>rp%X=DPW?Xx-SWPcXsH-!O$9if%8mN(b zM=92zBiV$nTfsc_%ja38IXYkQPOP(2zDN7JtF|Ccddb(Ayvg>wt^b%HlA66a`N=Uo z(+?EUH5aiL*q6WDt`{O>!(3+3TFWm?vIE?)2fT*8mpuWTVntk;7#txdY?E8UrK zT&Az}kh@%N!`IHG^jdjY)r(vk>k0> zmv*xaxz$DY^tzpydAe3>oM>y^iyyVhHMh9OLwS4M*H<;zz1~8HU1({WSK&k;Jatr$ zqH=4V*^gpv^EA*w!?)|U#bX}ZQyT8Qm>_CiQ@@?0_coUw*I@ho-ADJi)jg8aUf|2N z>FrhCb^h_+)ZXL#v_+fGhxz5_k+u81AE~x@|9xBwo;@2Qu;;j=MYn<1Te8~|yjwi< zhn00Cob& zF%b&vI2I!5yE>YpwvEG^`Sa%ox-G4+qwdB9yq^VGz~^baCbZNZ%)h_?{{RLk;D7`c zXy9Anv7nbvSmlMm4+AB%P*6C9_J%-|Nf(`D2-%lmT^8|_*G?9FmlRrt%>@=&&3z&R~K;@CIK#7 zS`ds>d2y1FVg@d1#^zNAtGK4g=H68#k3CB1^UpvBE%eYt7j1NqR0g0Uh&teanP&Q<}}nzZ&)?e_^JHx;fN=$xTs;i44zA@#(iaY94Sa4Wov6}wo;knwX1`a3$7GX zdV8F5+tsD~1JxdB(e_JLo)Tk1jjok&lkXzy><-fe?(K1CzG2@+pof7D5c=Tvs~V zT&I5giA(M*NWv1D&|!@mA^%ho5|Q}f2YL$o9AiG1nhrjSh8iotuWr~M1xU_z!NDEu zE>ayr0muY66wLGZQWiOR>3}aJAPBuT#S>cbidf8IfX?TA6H^Ry@xFkk*bm6!VD%xM|$#;pbQ@uMYF>!hDe2>tQH&3zzpUHqa(~>8uOUQOr|oI$;@UtGni$w;WMYnO92Rxn%K;y zjfg|bS_12B#MEXneg7%Wavml*=1iwL*U8Ryy7QgcBqu!Esetdz^PZ?l;2dSi&wl#z zp8yT0KnF_Df*SOo2u-L$7s}9vI`p9sji^K?O3{i+RF3sUie+R~c#w5Uz3YFFFQ(X#fnu#K&3XG`1K+7?Hyy{&F{ z%iG@i_P4+dYi@%}+~OMdxX4YeaxEHHz%KW>(2cHir%T=HE(x>N&8~L0%iZpJSGCyv zu6V~w-twCFylf3Gde_U|_PY1I@TKW+<4fQA+V{Tr&2KE{tKa_m_rCxRuz+#P$^jer zzz9yTg15`x1v~h`5RR~fN!#2BTlm5l&aj3DtKJQJ_`@I$v52AC;Srno#3)X&ip5&s z6}$MwFpjZ|2io8n+xW&f&asY{RO21{_{TsFvWj~wLP3S@!`p}3@w4xWy=tevG(U6X`q$f@3N?SV4tURNpH?09q zd-~I$?sTX{J?c`M`qZdSwW?Rm>Q=k@)v%7WtY=N@TGLu`tj2W)x?C$+bJ;1s-nHa( z9qeKk8`Q@RW3qeAY+*0^*%<^gu%XTDGdo+_*DiCmFU{?4d;8A-Sb(_4%`*TT;RxkU zx4F-)?smId%fv=Cspl%H%O`}^Ov4mhm8{pD?ATi^)iH^3Lp@P<45 z;R+CsxWp$;@rnlo03rDV1qJ{P04xFk0swvoegpsr{{ZI*97wRB!Gj1BDqP60p~Hs| zBTAe|v7*I`7&B_z$g!ixk03*e97(dI$&)Bks$9vkrOTHvW6GRKv!>0PICJXU$+Krh z004Xn9ZIyQ(W6L{DqYI7sne%Wqe`7hwW`&tShE&&;6SU_uVBN99ZR;X*|TWVs$I*r zt=qR^fx?|jx31m0c=PJr%eSxJzkma)l`FWg;lqd%D_+dFvE#>(BlG1dxw7TUm@{kM z%(=7Y&!Cf14o$kW>C z_{!NG7S| zl1w70PywU8Fv65nR%vAdSYC;NmRx4JrI%oSDdw16hG}M*Xp)(xnrpU+riO6Fi9wts z)@kRRc;>0+o_zM{Cy0LrD(Iku7HVjnTqUaLqKqzzT%yUbDe0t?R_f-ZXJTq8nREh5 zVyB*h+Q6uXmKv(5sHUpws;su^>Z`EE{~97gHQLzZt+?i@>#n@^>g%sPJ{hH^QwAV_ z00AVMDY2U}yR5U$Dypmk(9S99wV=wX?Wx;#>+QGPhAZy4;F4Rexq^-csX(J*%GI&c zJ}Ymt^I{r+wAKCy;(H1xYAv<^%ZDMU=nmQ_q~|7F@WKo$?C`@7M~o`1K^=rZyufCx z@x~l?>~XKcc7+_hQy#2czLq9RGRiBbi31sAXn}8+KoL;0nE}grt;9U{?DNkJ11)sW zM32|#qsHObCRZ=V{4T~VbE$IFk}9Bs7EaF`_0Ih|V8qusOqlb)1domC!HMReb`C}y zpxw}L$1V5VbQf*+-QZDtP@^YX|M~IXfCn!4;7W!Zsii;xfWseT;GhEzIB4+)4ge59 zwVN*sKxx+wFgrENV*;QB4#x_h!yglBnfU5AS7|ocb>kiT?6TKR`|Y@|$JGJ@DV=7b zTIeAB0Et44vJPbEKrQH7;-IJiWc;CgykJ6wm=uNMHhU(1Qaw5Pjey zoCGIG!3t{3a3fn2P!dHt?Imh*l_OT`&?JD=6)S{da$e_%1-1C;Ms~cnSvNXnj0 zlx8$Fy3vk$bWeIS2nKQ>fJx#{HR6e+N>|EKz+upm^D3wGvZ;fIs;P<5OC9oHmb#`j zPCHy-TqrpgGh_{ui&|La%NSQqm`(13T>R-2za+VBQtn<3fZ0{Av`#FUuBKi*;Wdq! ztecT5q908wN7t&>wz7(v#gy6ylef4~p~O4q8f6|As12=VNF97Fyc!P&7SlG(tt)O5EbI^|;7AE&&HpD|Q{Aq$LW#Ne|c3 z>RR`@xO!=`1|Yo|c2aVsv?-Xl0@f~Obx|WY9eF3j*P)hD0FEQ-7^ei*tRhPbHEg0% zyZFK{Z84yon<09+>VU2K_j6dfXU)tCQHFumxXFdEgd;rR_E3hJ&4M23q6b;?as`L( zl-$ckXISKsZgG@D@c^P{#Sl&w2T4fY;{X7?qzb^3Ahui+=j+dU~L z(rdk4CRdEGz9}8D01DMDZfV=TV>N&)4(z4}&Zo{%nekZe(-2nxEYL;S*0;~q&u=SC zVK%q<|IKiw+j0dmNavQcNAGGdcK6KZKJQ4oZR#cs8P!SSozQeBPOXQjC178^)36Bu z3W}!&0GRQ30Ry<2^h5{g(@k%2Lmg|eidQq}J&m$r60a>0Jc7ys8Lb0lrkiIS=UUU+ z)hX$891X*$D8i z0T9`aZmVOGmnpvm5cGUdF6e1vyFxQYaNRG!@zTJ;nj`$!vr3yt4|oLpgq{&NKbgum(Hj; zV0cqp>2N1k9Ak|~R!ku_HhE(PR7EwG(jd+pGK1R5Sdvw7SHpg`I#}?hBV`o&yy(h=|=$j<~O+=E^x{#{qmU4 z{L(cKw~!VD1D1Cv#Hma1(wiQV7T+8IauC&+32&40w4##n#OhW*D}=B<`sTOKea?Gdn!2uJ|6FhC zfY!?_s9co20@SYc0YjF%kqv;d6Z~WOL)vC!g)a!PPHj|2dhKkdB?dYhwOJ?DGl_a)AjXzDai>-9mq7gWTD0gAF>S669d zuqeOwgq>47$agv_RBAYogi``p(kEN`hXYeJeK;3ZWVI~VmwhB?f@-*i&!lU-LuX_t zDbUk6Jr`6z*gP3`Y*rXll+#8mmS8(3X;R300JeYp7lxJKb6P)ihMY($DC6mJwra5X4`egJ~sF>tV!hHOZS zwP=g$fr7n*J^s{-y_i2KwIe;ya!TVsX@rBwn2d!pNy9=tqU8V!5Ki+%23p7_LFH7( zrdJcfU3wLAIR$hjhhvf!Y%sG;-PAeAM|L`8hylQbUIJ{4LpottU^-NNY01?+@H)3VVIF(c>Bsz#D!pBLt6oBGXV6w+3G$uTd zGgR=kJ&P4{t0r5;lS`j-YFVNK=2k2^P>nbjUkY|GDs&|Qc#LT1kA8`ifcckg_H=F% zby~S{tiXt$Jbc$W3iu~q*9)L>vq;H1DTV^C&MJbrV8JNVWDoSZ9MHhor zxtz@DBv)BA3szsjH&t%(Lj6^SUczJ4X>*>5e?WFln5muK|2ZY+c!5M`hL+Qp!?~X9 z*`CGeo+Uzx@X#DJ(H3%W8#P(`I!i{ zkD&D>SemDLTBmo~r`v|7m-wXwk~iEjD<+btifX7O|I(<7>Zp+VsF6CUg(@AAdZ~LQ=|EuLDd zvwEw&N~?!ztNjzK!kVkVO02({smCd*M-rkp;;d~Ntt<6X$+{nwYAwuRt;qTzzSXHv@*1x58Y}jCua!!!?%J>Z`mX>R zumU@<1lu3YwWiXVunL=;2+=jiIwIIwuq~pm4=b@2d$Aasu^PLv=?bqY@~j-|AQW4u z{2H<*d$K5-vMRf>2Xe4wkN~B#N((!)3rnpZ|LZ9*QnC<>v->)-$Evd|8?-_@v_xC9 z4dSsV0a{$Z9|SidSS3(BJ2INHBK$&4YAdq*nk>dTwR+2|Rr|Mq3$;jlB1)SdWvi#kfwtl5 zf@LeP#?rP<`?kP!wIbWMfqS`_o4K0HAP0*9cBDWC_)mu`rldQZ2{E|z>bJ}>Z_2^C zBSX1?H=BnFyUroI0phx@d$Y)bVfnMGjmv^8a<}U$yw8EU#M-!#@1JKH)lq3^%Z+c)b$xY`}=T2x7U(|Ixh5JHF&wzEpd)g%q=@wNP`Lp>u*#%9^3_ zJHPZ>zxI2-_?y4_yTAO~zxLZp9g&L*F+O{vz3tmOW$JVRX{i%ZAq!U!xyz|=1-E-U zz!hA)b@m<(?5*Cq!50j`Gh!^H;t(8M9T6P4nzL&f;K6X%Ifi;1Fgy|BYo_U8!L_Ts zgERsMEK-o0rYvm3=HbIXJRmbH#6!%eIsC##Od!;|#7AttF&xEB(YX@Jl+aO15QH3K zq@f8c#Z&>p98tqI{CPXf#X&3(;A;>_3$s$$!Xi8e+50vKksb53lq$n66M7Jji!9+Y zp&6(Uv-!3=8JlJ+v+QCla$Lw}|0l*GC#u|{uWK1E;!N%=dJjOdE zW@ommT+EF8wkIjMc09|Ucge-WZit*7#v;j!1jk~?%W9h}j>0)2!_Acx%?SL-6T-)_ zT+UHU#Y?s}>TCpjFaXejfsj`Kb5Hx~JDEnQwH>*P&>20< zCq2QI7|G!~g&Uogp3GjJ|9CP1slrOzw>q4b!VFyv%T5%6VDl`|0g2FujLdNO(bRIs zY`Kyy48`}n6h#~n7Cpz=`p?(9)BOBPubY87T+Piq(p)^wfalR0jWE;fMf3cLFU`#1 z{A^^s)42>UXsytx!Mg@^$D7R6W_x8%y=tS(lc$xp^Yp!3;;hsz`xiaJsRMf zmXM;;h|Mm|9oAhz(~)w*)BoMvx*Ut|b1ZVpZr^d)_dL}QQPmcctz~>r{tVk9^~aX0 zx3;|y6Fs+LL(`Oz(P<>J`7O@}6pNuP$)erMr%lwuogCnO)4)B6F1*Q~J&;lI-s0TN zWWC_%z2S^qF`oxu79GzH{agdFP|jrp0^Sqs&EetN#T2pPLyXlWY~Vk=91~2tF5iaf5&1Fgx^J=za_;|T7Wg#61c&f>nI-VXue8>|{Ken4r&&x7RS z0mjSxjL0|byo=882 z{JtBE0er06E?L+Z0OXc!+|pv}a^1R1PG#pEkPYD5x?|w8{nUe0gQs0*$*tsO&f9~& zmSx`7(qY}JX6X%(-CP_&g}%cwt>M_Q$|wcVaxL9*e%_`Y!?@lMw$3g#{^&=p+V<|y z2E^?MJ?;2y;L}^-5PlvshRd7&>9-B$*nZ!Z+u%wL=(l{*1uyT_-scw`^7G8yqb}e7 z-tw5Sp{f}#b^pxX@thrQGtcfLKP>MN1JBPr&*A|;#zLR)NVDq{EFwo9YVqEmt0a|Z zgzOb%@a_LQO3OYikA-y1G;?ai00__+JodOa*Ij@I3g>>|wg9gq3H-qzl(>0gfE{kG%Q z?#d0A_^&A4JOB8;?-*B`S-$9tJ={BrSAplV9i1!^KX28)Z}cs}*^=z7#=XL0ts!ZO zUS*KcUjMDWT^C@9482NNN&QC1jPLW*{oqBv`=(6B-K5BTY_|d)!KmEqbDb=PzxkR! z&Ib$-0t5!ofMLMsnY0Cq)C-7W!lu~Q>am;PNiDa>Q$^+ zwPH+|GV4O7V2L^yG4i3;u1h_nC22A!+oUup3V?XBK}0_c>E6_c2Y>*v6Y19UlaMe{ zyDLrhr6_W5TL&H^Qgqo9u!hE5$@b;Q`0z`YX)|vnUE1_%)TvdkX5HHLYuK^l0ytWL zF8@W`xxF5JSaG5Pix78z9LdG_@T0~(D9>9wFmdM2Um#B&9lG_6d9lmp-hFBUxUe&% zTo8=S}BbwvI9+Tr_YKV778wvJOEfcnOwjy>fHPyj6aFi=py z0i%2Fw*ut@006NnyvslY_v45`(eh)kIrcqgc%EA`?@rFuD9p zx=$%CYDCe-4JnLIu^CI$u*T&$w9z{zn{@I?D5K1(Jn_g2k0J>b3@gC&92_#O6;*n0 zER=e@FvBjz;%qxJmm3Pc^I-h1%Q)Ywvmg_PdeO)`A6pBk7u|eMr5=4e%g#ENRR3&F zDI0b4QAi_|bW%#My0E%324!wjIWa|0zQFq9^g!u49rZfwPF0IdRXLroQdlhw@3rwh zr7q0=KwZz)S8XjdRA9C1mB&`6OVw35hYj<)-bRa6wL_nkc3NtywU#?7X(e^nWj!s` z*EEr1NkQSd4VTvw8Qm6LRB=7GDK2hPAfX_ywfA0p^VN4>YiHGUQ#S(^G^}8`%@j=+ z=QP$nQwz>DNnIo6R#}7-E|_0@!2?vbdd+1IT#0|(w%20SeYhc;R1kePO>Sv_}_dTOexw*NZTOJgkA z7xxr; zkdfDZd+xh$l6JfwzrOkro&Q$x+oed&oqAMRUO z?|lO#U;(wKJot?)dR_aU`RLcc>_HH92BcsGEqFn{bWUV(xee_$IRCoxrN}A3Q(gMp zcRThCYIqo&3IbI#zZFW5f9Ip2{Sb$xb_vgA0Av{A9LPc-22qGka$#zG_(Sr=aD+(v z9|8PhkQ<@!c@uoweCAX{B(5e}2Ek$$hxkP>;w)<)G?@U5(1QaQK}QQBV+n)O0|9jC zc5d7uiDsBWJl-#iE%YE&1V}e2_6}_Ht5_Zh)wclXAPP57m<}$pI$POhA;!Ut07}xM z0rX%1mIPD-bYdP(vV|rCs0&%fvavm;QkAPLTpz#V#r*m1j}Jt^5gCTMXw7O!fn-{b zIH?$iJO&Q}AZ1$)FaT0529?mth%kvc6o(ujj!5BxGED;$R{v&Go2nV3bOh!q0Z1Vs zMi@X2G?@cpO0#|>JX!ECAWX$fvyCOAXWv}sPJG&Pn{Qd>RZbX78G zjZ!Ik;7y8M(U^G3*xh2lOAIm^ zo*oO&7XTN6Thv%07c|_9B$5Z5*=&!J8(N>Hqyca_>V&pO_t@Tr=3U-jIdN# za*TEQBy0Rg1K9Zq;GscrB!_XJ101MS2iR0eLUh0b6cYpiJaA}=%dp*q@F1yChysfZ zFp(DP00C{;<%j+w02JHUBAJEEGO0upHFbrU3IFK3HGOf%cw)^`@suuVMBVGn2+#E&dWZBFcB1UU4~rE~xfE(7EmBh)-O{*o!V5+o1Y zz@ef!@tYl@NO>keku_$dUV^Mr76eL?eK$MyWrgk=| zRZWVzD*-@oF`pveO?TS8@{C9(*#c|uVql{t4Rstn8tP&mIKh7|@|TT0L;%MHnTSdD zr3rEX;Wb`vf&sB8OaEsv0PVu7a(sa-NNdy0d&ylVKSJ< zWR@|Dgh}M!beO>MCM~Jo`0Qx11V9GhVy>@h`+~9VD3&hC)5yi06HKXN?N0hZSb37r4|P;WwWDKa+b2B~~~58Zjxa)phIhqqVoJ!D!3g{4r`?tv>J z<)s59qi94YSQPH+VJ;glkZCd}rTI> zZa+0IV=@KD&J;PZo<^@I57?L{GFG|eH~)g2GoIG(&Q4|n5QVQ|rqUVu`o87WmH|Xj zBNn|)*vAV@kLnSzdI>4(KYvp%Y5EBQ(>?hZJFB7yEUUXqGYonezywS{R_lSgur-Nr zFWf7V;R`|HX||(Kswg5b4U7s-J1HwcB?Txv5yTo2q_~RHwh$W&9Js*%(1H(hs7ER> z>%+e2lCzw1v>K`;Em)F{5= ztGF`5xIN3kP9fyI;6Z~bVl^sFk_quAza2RQobkRJZ79U^h-VVn@0a&zkK|T0~9<>RK!eM zy)t;j1Td+x(5i4`GXI--wL=_vTwB*yr(lZFI+&!^lu$asdi2z5loQna>qym^EDD*@J zNI|(%%d`ARzBEUlq^XM2IJz)OPD(?7YqR1wG0Ff6WNe+Bv&vGs4gPSb$r=qRiI$(M zN)@9_l@kp%WIXb#%<2O&hj7NOgbeM%w6xpEkC4kJ@+kU}M6wu-M;xb!vO0=z&9A#J zR>MU@oRGFd5C0Y!HnJO#(Lg)WG6I#tO;$TFQreGkQB8&v2;l2W>x>k2G`dWZCaWu_ zqpCfnu*mn=sH0l8@08AK+{^2fjlTrKB7z~Mbg0Qoq#TSsrewYYako397d_(&JZy_U zb}aQA(yfwE8Ti9PCfts55bcQ5<8jB4mggV6?o@PZmoHsIOtsaB92J1=D5Yu-uImyn zngktEg%dRCF%9ULc=<+E+YuT8LE(xo*33j#9oHv$Nue|tnAD_DTFKL>PIC-OpJCTm znk9geut97TBqLXS?J`(>rT&6KcclurlR7BnpcCX6kRsSvgcl}DJucfTXRBT&RF_YK2iCB{@tA33ck`1DiHLEK@34%FTj#0qqvepqI zu`Hw4lik@1b4r0ttMH+gjAg}*U7nTImM0Nef8|-GEzyaM)uxSFsof@X{nHj{j!#IAgwK1wO!lV@>#LP*a@?tDU#cxH8!q&Ax`b9B&r-5 zq@ua?B9L84xnWzv9jmi_+rmv;#T`Mn-IB!USa>0j6pE-~u?=snCw!_~FS}bK%3BjE zs^)prd0H4;C0)}!-6<3nnkEiY1CW(;HiNC|3)&Cfg z+@|TU zSbHMMqN6+7+T5)kUh-S_#Su+K*Yk-Q)V`mlCI|jrmJ+GL`_YjwyZD<4TwTTMt>CFW z+~-Z(My=F*$yU!)9uH`>@s(HysL$MW2rZz-!3zriwOQ&7;@6m1GuqB_I;Zbk*et5F z_Zm34{ZZD{BR%@bv&ECW!X9DO*%)1><{jJ81<2ohE^ zrwtW28Bq`Ul8b+$+i#j=Ym4NtogW+mD#<*U-WVF)z)G8>S%*;4#Ui@(sNWPJy0&^T zwt5dciyHJY78sKkNj}YlV1NQ?KALSn2DD|Y>|UmDOVxuWSRM;od}Sfozl&vx@@O+w z9wm1cUgJb8i#j!9h6(-?UYuoSq`Y7`4hnDEn3CWLeqKT0wKtLyj{n14Q(wDGfh#G2 zbGGP8IH)l@fxgQG)Q(&_=p;+#e}m*ohOfpA40_f{#F`9OVl00i)!nLTXP&Q^4jQ7P zm-YfKqJw6rDbo`z)B-6jmr$|2?B}HB31NB&?`tmLD?>ccHfWC2nzoSU;DViF5ggEh zrmNvo9_s?OUZpU>rpY9bHCC}pSZS({Xlsizn#5z0s{Er_wXQ@2i$7j&-IfIAimSP8 z1B!3EH~{FujbkVLEy5KGGVF`97Hc#-qsmjd(QFkex;v;ytGA4(w*c^gOG>0X6AmF2 zj?Y7=yErng6i@OB;R~g;I4;j&L$y>>;xlH=Ov@w(#>m!8HUA~EI$#5i@_bMg)Yep+ zvf-AsP%5TMWDEyWwKYxHJ4?^5h^BJU?SfmukL7_w@%iup)Q%{XySaZ%NUqK}H=M{i z3`yYtfJ5fGLH9pR1C6S)QV3QGUHWwA77n|-OM);X!S={R^sN!{KiqV60jxlVGj)aV zP671NLvAexj$@>oH>wMB5N@Sji;viXYGO~pM;4*2yXb9wqXRoSEL5>iKXXj0O^V96 zYu~8v26ltU!qdv-C`>3zd&s7(;&1-3w2|xpO)^0#~iaOzjqyI@XDF-g%yQs(kP)`1M38>pDDcfl1 zWl9yBPm)(Lfb&vfOg|#$;b1psnXPh|Pe-dLDHq0Lkp;(d4|j71PlkxVF$WY=^)r}5 z-}G%sHZNX4f^&n=K{WKz9frO;&xz^7lK@T0S3bGv697gRh@QJvMiJDfq{b|3Qt}f* zZQEZ-=S+JnV=L?uDeTe)nj*46R8q@EVLNI!R^%x418-k8l_VC0XDu7|(L>}fq=drN()c&JI=M%%?CJ9-(4azx5-n=)7 zfULj~BSafzIMCzif~jTqXj=euLDB+V=XA}wDCy8zcaO*`AoG9&0`U4dj!;2u+65+Z zG|f9M#RAbcYsDLUHqrqdOJ=+}Kr49Xo-u>%fpUNm^e7b=k1h9Nc|5bZh<6~pw{iG& zq+MI;d2k+1A~~=ff3eNh5=NaBNKn*<21z=mAeWinAkkK{ATg(mR!Czqw2N-pW-DHrFvhnZ&Vl@_(lv4b4Mx1%^ z;k25Qa@jXplqk8z1$eDBl>Yz@ZRwEJi={cB!$@S>Rwj}}Dkdj&m}Lnfo_XrIC!c-# z`6r-(3OXpBN-dRugc3Ed=twusM3F=WaWz7MBpI53a+NkJKn?*E@SaO6@%I``Pd!?b zh=i)TDyuv}sb{J??TCi}IG7k0M3ce^X;}$==+Fp}S(N|}=s7myO}HNUkZOfpNvVQ# zEee^j1~fV6m5wQh)S0re|u#If67N%5)&ooz~`M{2;HG58%<-;o=uPKzdJF-BuyfM6Nv83*yC z7)4hciuE1&6^y7w$N%4ab`9hKt-4L0P*Jd1Rss~DV zaBRB`aI(xZ1DN%{3qng;n7sb9X-6fRt-)I!TurMMQeX9TkwlLRZP`j|zB%Wed;U4- zo?HIp0eFGcqXS!33h8ei^l$)sK3gPKr9E&)J4UjVo_cK%a>40WnT9?*@qND9blOi( zh?fppaOJH7a7N9v*Tn{KgGPoq$;D!x@(@K^lSQlb_+smw7Mvn6p?>t8!aaqlIb_0@k?Sy(B;ml=DgTVIKrX^nb$Z^W! zuMwOl019*&*&rp5+E9vt=EJ}QeFr5^(QaYefeykJ#FdLct0kv1i*h9QnVQ+`Kn{B0 zZ+J4P56Z<#=0VR3ch`{Ja3u#N;S9b|cBPJZ;4&mM5A6D*pO z;;By3O8<3!(4xc=$hSLv%$5L(5t$Zf$d5=Z0G5oN)XwBV97HaYD{7fssHVsS&4G@$ z%*-9Lsm*P2vzy*rnkvIXp$I7_IU$4;D=$Ny*X-sZ5*lF(yF*3HoJWE@9NjnbX-EET z2xG3IW{X@TM)IMED&C@I#?Hb6>|KSS3R;su0e2StUFimkaj1UsvpkLJ2S>Q#A=k3z zL7Z>_qYdSO`Vyi8?0GOptdtE$vGg~P{cdlx^Mh|dMxWGCahgvtCr|`9AJf=oZ??;i zP<03|E8gC{h|u7=HGGtr%wrPaH7a;hO@7Q<&_il1O>r-Ot6PDyq+<0yZV>?h9piEb+1 zT!^)4rzj`Sek|_rlNH?A7xOsFlG5bz!m8vklex@hJ{p%-1p#JnPXL~^h9<@6w#GWryFQwy z%^d7`)jCiOnB{FRRGnml2u!m~&`#@XG+fWR*s%IFwL7G1QDb{m&#rN{!~ZSradWQM z>fD66Rz-u ztJ>Om8aBftF7b&|+|32o9qg1iol{l3<6rJ?z&$SVk(0dSxxTm_LvHewv%KXl=Mc)@ zIL6melH(TwY@C1j@t3zs-Nsh=z$GiR3_+IXMn5{a9gZi6gB!~h-L2;=6>C~*(`g1j z6w{HOO{;4?;V8G?NN^6~LlKSY8D<)yq#Y}L1@R|o?>dHj-e;g28=6hOBUikOa@n9S zJCKGu-~*ptr7yVAjCNGGJnh*YMLi-l`@5_tXX~+dmg_WrTGoXu`2WJYH}ea&ydFKj zbf$}5Rg^z*lS{wk9T$aDl!{`<5>NN#g|qFh!p#d)p-x-?;LfPrb0;U;Y%6|HkyU|Ak>0nz0^HG|C7Vff4jb0f-31O@TK?i|JOXL79DH6+^2xV{wS0DsnO~wImV7&lb(FNY{ZQ8Ki8r9K~0#qQh z-H`uX4@Q;5O1+)~+`tXo6hq+8Y}HSN?a_)EfB@v+jVK@vw*SSk{UEe7fDR^#lT8JY zM9qm18kG2y4AzU}afKGR2%k;c^_8I+ZVurM45wY%{@8|f`3z1m8OwOk{)mke&W8`0 z9U0~xHO*2UstH3tp=|u&Mo6Bu9ElA2Aa)=j_AsFS#TK)D-{{F%`#mC0{2%+xU-1Fp zfrT6G~<4$bY=?4ZX9 za)wSx7p9cc?qJ$(SV|5#N`&l9F(nr^_20s^;QdwN@-T)W6~Hi2MgXA6NH*3020YF-DgcsD7c=>kT=dNuW~4?EN*X@R8bS?Y42a&vML0em z|9RA!fL&hTSt*rcYUw~)2!!-)hXW=CL);@pL52?&3$uJ7ir`s`FoX|)ggmn3kF}jl zLYo4N04E6zap<2YQb(RyBIq@pgGHtKtsmlHB`88)itV9RW@S}UVpejWSk_rrhUMv9 z*;)!1SEl7w%3i?L&09`mDr#T-sio%O<%X=HW{}_*wM_1T<-G6>fc?t)%miQ^BTQUU z4kTdNhzg+nPN(b;Ssg?JFyp$^2AGUQOJt8=n*Ut|bp5oNN1HOP7Sw+X=4L?RSCBH2cEr+4lNXw)wdR5us5~3W(=`f0@SRTjGB|=r9 z&HYoUlo*wv3h7lSh+^goUTETRorUgSds66zdMH$MpM|REiejFLuIP#GB`MnIOr+>n z#%PWP8HVnKhJ|R1nx%a?B8Ph7i0)yA694H{=qQK2=qL6>%u!)v!Pg5yP{bgnOSEXv zTx4VNjQx0oHV#!d>fTE<$oCCE4wO}&TBk~dmwrIxu0$U-RT4CQC#Z(1 zl&0Ux5MYL#=GUAWb0~loXn`S>$=VeQ0vwYz3d?-vh(&!59Of60da9+MkgVp*U2ui1 zc7{q~K#mYAIF^qjjtGQqsMEA(uhytuCMozC>5cXtoc2+TQtMr|D7f-!SO%cC=A|Eq z=#HkVxI`;qlIttRrCM6)S8{8(0{>~YMhd+0MX=RtxprB-mgc_}skq)H!8YlVnrotl z$d7KNo}k=kMkbhz>qB*rm~O;v?9UK&ikAvZ#Jo%0u*+nAhL7M4;`K*UJ`|}$X~Ie4 z=MAZdon|){(l99!CwW+-PEk1B)3FHXS)h)(KE|?s)Y`O7{LsphNa|3O2%cVNHgc8B z`bb1(Cn$ZYs8(&&%BiWi?5SF#u|`ieHYJ6MA+0`#t?t&f5R}*ntV&fyL|7EC+MNRu zhNJi-UEt#Zl|;~nX|U;6kNbt}C{3UK#u?k5VI(GHJ64F17~l zy{fI{7H;JdZszLcDE=*4I{#U~Lhj*$OX$idRxYfyvZc9RZk_;uZ(azHJuJ9I$zu&2 zkKi7dwCTADPj#{pO@yh(J_TTXM&7uD6lK8c+zjE2#Z&eLY>wbqx*W^e<%wZo08ov7 zK#Q)_oMs3bPa2^C0B;n?2YQYP;|L31=xuIRicucPCpjub%!v6_1=42kg)SwGMJ*Qg zq4tgh^x)k2`RcNGpVbzy0skJUZfgKW?N?;)v@~R|LW->F4}7)^{4^9`Ovt0YXuevCVW-jJRZt2eH7O(EP zj;`r;>f{!2!4_=dmhlq@@f2%qUz(~=Tm}yV;vB8?^*v-tGs| z3J3B_g;d90T?BJfOmg4`r&wAlp^x4e6$sZQ#ZB-1q26@52s7m!SgeT0K=4-@s;GQR zBJG9`R4Qe>4QWXfW&s>z$YV&nZ_y&jLj9xoVL-=tM7`L`*od57gtm8fP=U?!E3xi2H>+=EyE!+NB* zaTz1d|lS|n|$#xYimvh>Jv@X#}MX>3vK@7P^zl@%ooPzc5?Nf8xO zB$`sIDg;%ZCQqW6HnNYH&L#6I)LKqZqHy_KPnZG#lI?JISQIheiP?SG4df$q2``wo zVT?T>u1rRAHcCKY2S@lcK~FPbUu^;xns!3gd(s{;4Q`vr^P=SHUyQ|jUgtg0HB&P6 zpfPiGy#J;}F6XxWwHr0za_N?9(NFh4O_pS~SvE%wQ0YlKMd4O4=RU5%vUE!0Hbdw3 zZHx3p6Kq0%@o!(HY&&k*Oy!J{B^Q%%Z^w4@=62u)_e{rj=+P;)eyBf%v2N!{%vlFs ze9?AKMeQUfR&#YGTK9T;BfQ~UVb^!4Vl5}4cSKKg zgzvV1lWy=~w@i;`yL#A<(wZE%Y)rZ(qd`elX|77ED}l!)8S|@%gEZ2$xBOk(d1sk? z7ytOVVVZp}xp(4se%m&GbGU?eG=RVKhnq2llQf-4Il?Y=dUrIK>$ry_IN_o+Z%etE zPq9U_sN)W9fDa~B(&)b)EEvD5SSo3clQ@_|_=OAXbFVpWz$Kd0=M`JdY`_g>x`nSnsc;{y7U!0_?c^+kPo@(nV6_AACs55skfPvccK6ecwh)= z<|#3_VzH}N`W9!p`@MOh!>Fv&y0!XwrpJ1kvw5Khdq(qm>VodC$GNd%IkC_Bi(@*b zOEilPI}|s26icP0TQqGice0lsb{jgDr*R4|yKn!tg}83B6|uIycX&U!%4+1Nga7)e z&pW+aU#f3%{=Iv|iQcwX_W{3qzf-Ni54^ph`_19Sv-POT20Znecr@QTzSq0NPrTMa z{F4xT=;-^tzdFNX9mccV!goBygHzlcK*qt&Vb{6HkGOs>dAzgx$j7|Qmz>2TcIRB& zL&JE(e;U6Nd*%IkcZR&r&pgS)ZYBguB~x8V zgzU8w8`Iz%!aobu=L;=uJ+d***^}$oKZ&O}%+eoQZR*8Yr#=3L0(Z^@EBkn z+t{ndw-Ln$$Dp*`J+!H0+u!M~;{9XjeJZUg)$1^yktrf3K43zHU{XDS?f=}|GaJ!2 zY|6v;$Nz{)C9QR>rRo9xO*}qmnOmrVr_H2&&mr5lOyh_mMc^B-&^!I-`$Wv4QTC*K zpvncjgucu}Js86!l$E|7>CFO}{Oj;bmIMdBG)GzWmC2V8@8VN(7*=_oN7wwfX>f6vs9b;c0K|X;IUG2^GonYqIT!{A znDY?gLjej8_9*bMpuvSbdNg?05YL>9As;3fz_Et_E&>jqEa+iCj+O@ojEHy>=bQis zW~Quo5h53m5(oHMiL&Owm^1_6Vd+pL#hXGq5*;DXWyT&d6OJ5VQ~!WU0bO4%13kQIT z6M>Gof(7sh5a0#^z5+HA&RDi3$I_ND6fSt6H07HtQL2@FSm0@mw;PkbsUUCQj7fPH zH+~#>a^=gJH+TLVI>z0GKAVjF3sv6@Q2H>HXSDF7p? zN(-o|*fMITrpD5$DYgoL&?YX@daxpu7W2Tu#~R8Awvt{d$^Rk`Ov>&rhIIQZxE*zh zkgSo8YEglKE*wfkBOEHo2%xIlNXn2#+$g((+N!A_1s>Z@MGPDSP_Keg^6{jvYC9FNhE_luCsp zOiR+J=7SH^P(_7rG1(>y63z4m+)uIuOVU9H4_qzK0L=#DLWj#zJ%|Tg2b&Qj7A=)k z)$p0 z#~Wdwv0AdpFfSVd(}Aum4U{IRAk-B@w(wFQQJ1qU+?*UnmPeIwzhPV%pz%c?62*Acx9mgd%t2)B!!YE44|Q z8n{|70gOP4r;A{MOVJ**-qJ1Gy1tpv#uh8Jucv$7J5G`a756+SS<+PLwOT6Za9@eu z(8~lk3Ujd&9f*2h3;ovUHBBKmdsZX6yEfv~RbLKp?W}FpQk53cxFD8k{n+803PL&8 z{ydH%irys}8Nt&(4=RA*19*w|uvk72_?V4Hp8r@KcgtX?OYu;XbcPj@bnG|nO>`xH zEuPJ6>rdN$$k_$1FD&mV#;<6_%2qrqwoYqkPN?K(-vJ&<%4-CefRZq5E*bfsbgq}P z)jbe`5tQHr-va;uB<4!sGt8v|AdtC?;7U=U8@;>)q(nIYX)f|mSaOsWd>JGFGJ%|l zQqsZmQ4ojDnHX>S^E$oc2O_Y#Sq*UTpdw}t2cNNBnjE0S8yqBhpm_;tJQk~i++aqq zDoC#&5<*YWYis+GQN9vDxW5TbM0#=%l0wv&lPHXgU2I5p3bz(rog_p1BH`v76~{sK zk9|E77GSXV5(kBiVn!mH!4F7>a-p*p&}_uf|4{~%K`uN38L7MrcGXYSL60VC|jnJZoUzKOyYMD zJdVXs12Dq+1am@-aN#sQ0n|Vz)eyQlK$u}-OKS)=!l;~Zh$mD_lL)f8(x6RW%+%>l zdD_!-Idd-^^iJ$@&_==d$t~Li9REUMQwBxObf!7zCr5>Hoq@Uv1CauoPq}KG9UjMr z3W|yqYw*1ty{m{dsDS{Is5=J~&pZeS9zJ(;AOndmqlvwuuUQlac9p%F2}o0;4Z*e05q4aI~bbQ2B=37fPwwvtdY1=eMTvr3~bO+v{f zY-x(Nzu{cQwy9BD0dgRd*z~bww8YD64|vliqO(z5Rj&kFXR5F^Mw(>pT>#SBL&#;M zt$#|{w}iJ4+u0RPd1T<=pNiT!q4602r-Cuf( zSq`bqeo{RT&phWr!#uWOJ*zOFa>S!L?Tu%9bBftCN3iQ?jleS!@OpXNV;}!`FF<8t z^&Zo~0=ySLl;o(VzSH7lT@R0V%h5;-Hixks#L4-j(mQ)RymH;XHpM3sRL1mJ$%{sdO!M5|3IHqB;yiQ7< z;!2Nn5NQ@tz^=8_OaCD&@H2rvt}2mgXgh}FG;aB)h{m|mS|(tdRi%~PSSa3ofz6UT z3Cqud#;9GEdMrSq%4ok_Zc(+@y|5eJc!HK@O=*G6I&gDP^&HMuZAQ)?oO3C!7bXPX z+A|9x9hA-pWz6mQjnsjUws=e%{ zvWlAx#dy?!<%~H_i$P>84TJSC6e7+cnrq)kbs1E1<| zbFg?dN(Jgp7rt_W?>comg{(y^vjgN^Mr)SQVp9Al7rD-%eM?3vDXozBm?v5B6Q=Vd;)N! z?I4y;%>Q_<0nMfO4r5xx%2L`Y0JPviF2tKs>RmqNz(@vc6bu8R0Nf~IuSDa(@Qs0T zCn{n?@6>Pf3M3?IgzZcTCfsgeJ|u1m&rl|ANnE5y$fy2v%qG;1^U9(qCU9ohXj;mM z32{Q9q!1xq0*DxkAPE~4aqu9jsh;G?N3x}!c;$%}f)0&Bp73llf@uWp=gE?=`*ebfh6)3XssWa9 zBmeGbiqxX9RxW4SMB79S5I=~MP>5;tX(6nUS%{-N_6C+72~&gyKzNOQ(&t5t!v1PT zePDgE(Sue zipxc&%&f}hoS1CHw(S0{=vW&#cYvTr3| zM$e28Cv{*LJEJC(@w^fz%bsxI(g}P{Xn^vCEl80kM5kqdu7^-eUrZu3-Z5W*&np$J zWBAUjEQ2^q0+zZ+P?#vx=I}JuW-Qnug^nUBuR~s_GM)Z#+DNVE7!9H5B~G;BjsIT5 zqZS3!4sG?Ku*s55DI%#1p;F~u18Gd8^j5Eqzym^LDUZY@Ebw3@RK~YPpfVdRDhe&~ zE`lHv$}vN-!uI7bQ4%F%umzzhK;%%~U_}?{tIezkH$R5YUZr+2r*`ZlC~?x9=+PWs zpuZX*oR-r&Smq(~$vE-xj#9$1X2)(6Ys)CHCAjQD=A`!|Dm$Ibi>3xhn1v?RhaE)^ zloV|)?$74tQ9r^>H8@jTvdXoL>@6G4oLoxFL@GbqV$n#aCAP^m3)Dbkt`^ZUe>8_D z-VhkmFAhZw+88E}PV3b8$3z@XE))PyJ}7>?BLjS6=fWZwp=sx^*`UpL%+N9_v>JUBLr4^z&PtJ}O4K$?j0mqWtdT_Ghcp~g?N)B+B;`k?<15sZ zMCI`uRWh5vXhrOleK@2}cM*Jc!z;Hg=;jVc*YwGbvQrR`7y~r|S7c0=EH8`@(V{-v{6;DeWuX!k_ismC#7(PK>wHUQ*naANNYW| zstNC7Bs6R+A2q#VGf8fdB9_c1mIlQN04TB3;tX3<^z z0)#9sMw_lhbM|3=lvo?!{d5*;qc(z+_DltDVCyw@F!Q-Kc4GC_9`EOAy_Re9HQL4& zRu8sirIt4u7CIibZ6(%h;kM~qxWtpE5{WPL{oL)LFiwyO+M zZT%uo!d6!kcL90!Zw(ZLQY&5d}c7eRUVd2_b`rPq4ZrFy#;e8X2ZsP-{%&U}$fZv$j?tF?ChgLR>| zYp<4K=a(}H7i+~=eX;jep7%wwMPk1Nw}210V#k($S2l8=X@T(m_LYA|rCZ2trtdMVJACDShuYZvP2bcBN2-&vu1ZScU0V>P~or z+4ebn_jkWnfazC;@wRx8mxT>ih?m!bhuDaZc!QHzi5UZOy{d?p7>c72TI+*W(-_j4DqK3ey4Ww-3emWO+IWRVzyZCHn%*!UD!hv)c+?Ux1(c#V_S ziP>0>;dqMw7?2~PiJLcF@HmhU8Icn?Vscghq(DmY2eKRhiwCz_;jDgVP+uwHg^BEi zH5rXBd1F7>VAWWP2N_2B_=ba+j#m_bf4GI^(2(J`4Xi3o`wfXo0(w)Bk>%nyVRN7+DG!06mu3Ot4s9Y4|rt zr+o{+lLPpYS@|)lOq9_%hEIo#zZidmIhs(HT!>eCpD|*0I6XA>m5JDnNfv=|H&ymf zA}AA}Ti7X|7Di*)nj2b!pqQb$eh%$Q{38}n(SMY09w^C@_9G z88oTYSjsLV3`|>y`US+vpNY9@J9cD|dRXY7sWo<1uSKIAA_1JFAaln`hdBiqwWv*+ zts5GmfmdR>dVbZa22l2;Ustg93zoN!F#qJ&oN;=AiFLDtb*h(IPQkfq_+(FnG_F`g zSkIW6rh{$TnzAeVIIy{kt&{*5ph_^{iZ!=t1fqa;mCLeF$rL5r6#9}+0*_uoO%&~; zExR&C`jq?Bzf`6s6{4)TRV|tCLTZvYB_b$4h<9S9R*LcGS4xoZbyV21m0 zl6St(Ojz(MKFMQn@+FMhibUoHg0eqqXNk7Eu7vU@K}Q)O)B#+NC19h3K<}eA6NDu7 zSGi1fhV+(Yo4+IYt>akKdZ?X5rr_9&b6KB2)rp z!W*tch6f(?%`8R2BhkZ%g3Ip0F8@ILH>NUQB9k~AO0+4-!UnT%!mmCNx4&;3$1xir z7(k<>;5t4#J^)ETw!ggb!$_k#G$()_1ti~)SlWasTCo);DzZvm_;$`l2V?0B6I=YLT>_D){0q99N z{UzYw32geK&V1uQp4v{Lz?XO=I*|=*qq2<1qDMTg01`!{BUG(lL`~$RHKm->L-)Vo zD|ZRh!l#wKwwzzPoQ5gf07Nv;saj-|C<=-bpX@xPnuySKayf}`i#+1Zn}}pQnmxv| z;_~N~+{V{XDw6a2FBnTV1h7x+ZcYC@M@RtY=c2sRuict4dnK}Xr9E2;P&_9>@zm(< zF2_1+hURO*CJ?XDsNZvZ>DlxTrIPG`t(v4}`LB zyXip0nh3umR#2wT%bKYl!r>Vn_x?QA8$-`DwXe)9d769f^y5fNim}|TV89g&HIHkg zLhtl$rrq7;qxRDST8~G4zF?AAM&RDrirjEz&O9JFjeFl)XH&lpL0rY)pHa_z2SKQ> zYa^V@{pH8Ll&QQg8o7%#U;rE$D7?Mu zV=49y3#Ig?E1XQQ53Mb)9xDF;#oEcfQTun8dl?U~T=|lF-fl47C_Ht)L&36W7`G^9 zJV3)W+2HM`CT%6`?#ni@P!aL41oMf0gGIl))U859H#9)-f*~EG~Wy!)c z8PQVK?{B|UW1f@+pXRyT%~lTHF8{+JaL;k_*L@z}_C56lV~d#EJHn*$`^v7CpB8@( zF7uEHjdn0LMJ2MHeHxSYX#%nitxB*J#&IA0e_7kt0^fj~FzTnWI>KP4<~0)NQ*H!O zI%q?(s_y|}j=+Hg3mQC#FrmVQ3>!Lp2r;6>iE|P-a6pk^20RNl4itccOGO+42o|_l zpa6~lTw40!crXAD0|oyPTr|m}E|VN;<)lM0NAM}SjrURY2bp+UnHYx(z6j2T&Z1<*K#R82_j634!UB8DD&*|LU!Cu#K59}?t z-1Fw~vi$kwAb54fmpI zZFMzM1F_L`lWm3R$dUnQ`GJxF(e1bvj}F}U)m3Wgz}ti-NqL;hVQP)=vybZ9O0x}8~A|9&c<j%e`f)*JZSW~5rdcrE5XD%* zwMA->{jutqb8p^yn_Pavx6@r}29T;j&}JJ)S=o#y?4s%V2Tdbd#iykC7S`j7xBbw zzT$<8aH5Ph>gYip)usauO|=*)4i?{}K*X3HOd$_EsODQuKzXcRY{;d>15hEasl&je zHuWi0CS4_fQn&d_P@HJWfV^~uwP8YYMVFm`^*Y$AygDJ4Zgj>m zYVH5iJ%E{Z?6S{Jd+puc9g&9X?#}zV4AeJc003wZ8u0=Gz*6zZZ>s8#4U}l#^R@9c zLTjKCi4t=h+s-{?YmfKvR0XVPSZIvGhV z2}pWbsvZNIsKh3guX^zVAQzB`Jqvbli(KrY7ipKih|GlnWGrJDoi>_{s1bi_L{IV9SK=ThWT-hdQ_w#;|R$}ic5>& zdnCeY7RJbMfpk5w<8uVn9tiC$laef@DNl*Y$dD2u%UaeR*9c4E(J_sHd1FItnaT`; zh>>_)B)pdF`FU^zzr~1 znUmGVmttgKO}M$ub4HPz4g&z5#+IdKN^_p{tY-&TS;<(cai8qGBQBX~PYv$Ujq=PV z!iEV@UMdrz3e{#oPsz}LO4N(g{9`lGInG^O zs4BHRPMxY$kBZf-YL%6gWMoVEIgzEd%~7sdY9FEcRQ8#5s}z~3O&fYvbuu-DRW0N& z?K;;8E;OP+WoS?l8B%QWuaS5iCtsf;)VQYgqlLBPVH^9`$SPK@e1xoI*^1fQskAa{ z9V|#knpaPD6r*vl=@x~H(I;2|8`rXu z6^54;YX~jtTH3nRpm3cmR8JdNS~3>7)P?M$WDBP1vQ4|xZJ=eXyHo$}7B{+!t*m*; z8{WWbx3#uyuX~bena-m3sk419Y{?5<(WDTqKLQz;>jvm9K1L zA=g*RLC&(0zYOM-cJ(0wh_DgPjOH|>Mx!mwjjuZU0uLMapXa3DaWPD1C7*aP$Z_&p zp%*FPnpZA_AG)^4P)oBy3@3-wV^%@9wW38IX$3HyRef13;;lC!z&@M#HoNd z>8j7Ql(TU2Y-vKbrrEa66|O@az8Lw$H2)Kz2a@WeK8;ULqr`|3)pSB8{$wUJF`k9p z{Q~S5Nlfkb>$LM2ZgVFnbjsT|OjM(qe;1|zaT>tuPfvzQDz{s6j1lR+HMa6R&b?{rghcYC6A8&A7&24s-Hc`y)AMp+PdI)4A*` zc~xUTPf*viA=-sHUNb_|bdnqsnwPkU1*mYN{c?`8*U|rit^t&)lBF*C&xhRP z(5-W+Q$FdBcb@gChpD7nuKLoOe)qiR^OzkXfSM-+=L)Hdc0$tw1}rZ?Bk-4T5JWJ2 z|Hma>t6r++jAv%vIs3im6J^E=Dp~G&ms|OEVH|80>m~0`mwFMBYUKy`d8`4NYSLI> zl%q2Bjov#7+STb$IN%{U)iG|qauNZzcmz{;14I8T1Y;NpxEAvge}bnYH?w9X2W5|y zQ=k`O9mr@HH+z_;d)=2{sF!*TH+uqhak;m8s77fhIB}t-NfZ}?Bxr*-C>b+%7{Z4T z#OHMh;vg--Y{3F}J7F(UgEPh<8p?(j_3?BW#(hCHZIC8$wzg*sCty{FF%|u7ZgF5>n5*NV$a|I8FC&uXeEh} zFDZ+(Xp6(=YYujdh*3*NG&oV@FLxmx17bx#R4;>fUVipVPFIOASB)GAd!^xhh$R3h z0fvTz8$Kb1!vT47Crg2&Mg@?Dp#lGgTreb7xhG{{hxf=E_7-QYgIF05Cru*~h3IaO z6BdVvGe9{N5_pn@l6l&4kqz0F8wry(sF9&)m_J5}S%zARX?ui*lB#%$BsrLq8I!-) z5DOBO2gxiLRR9K(CGmnj5Yml!(HU{VAB-p`0!bKbNtx-flpU9H%c2D+ffA(=H7gM# z;6yYDG9kk;Haik=}KUsS!l!ggT^GlY?$hs-&3Fpz$?b&W24Z!e*bihjvDV8Ypqc zMMd=WVQUkn`V(i_b&G4dNf&sfbE=+2I*I5>rx2H?d+J{7$)}KHr*}G-Z-HZfYN!|) zs5^G3i^`~VYMG6iN{Q;A=Q)LtYN@>^sci+Am&&P~%2s~rsoj&MoVBT;YO1HIL75s> zrHZPp>Z+0YsIR(3qx%1StSYOwimTkBs*{?lz3Qv=1gb&$tL#Cmlc8b5imb^RF1yOB z%Id7o%0aZaEC4f&jzKI`GD6KrRmEkLUskL$Xsgn6t@~q*2tclmiAdGzLd}{H^@pyy zn3)Y_uFxh~>Z(@V`XTj$OA7E7_)4mk%6S26tbJLl1UnwgdV+gYKa_#6(CVZckxRbx)gu*H!qi1^GDqVtkYr%@AMbr@mIcA&ZFvylJtCVmsYMu~*lOn6I zKBRM*L@)!$NJrG4ehM3@vswvPpI;NRhp8Tlhc1~!aG5HsUNbsjlmJ_EiwbF^e+I6T z%B*?juhKb{#(MubKZsxn_poDYsu61h_nBsCmKgU2u#M4tESf;tN~|2KaUjc(jCnTV z$RQ0NhT4R)1$CY0H!T(N8p-lB5R$RLr=U!k5%u{S&axZy7!#6fQ~d~|Tbnb>QmEJ@ zmz|lJ4VxL^@lHAyRPmayjq9237Ca_@B zEAoOd&2s;U1dMg=GqcHShJRwd*%N2Wscl$yJR!sy&NRJ+XK5G7`(jIXB1M9v`at22`OY;8#i1fsdBu` zVj!TDytjd}`ZfSLkSv=UuDpxKyeE@9=m*A&Aqg25cmkI>$}BhvA=aTG*a0C>iX6hI zwSmc{OP5_fCWUuquhq-C12!ba$8|RpDHEfcUy*ky;xQxoBV6Y`MPU_!vL!)6$kNgj zeu)2$sO$iES2SjaMbLq7Fta!Hn-i_V%D1s9FtafOWOIQBjv9+tK?fBDkS>B(5d{a8)hYiV zaUv%V*w5NgJ(&~IgX1-HjIBPJ$7_A1zPlJRxmdaAm~gp7@pp_viJ70de$HE{nM0HX zX^iVbXT?j{(pXkCXxNx*Pg^|LOR>o?%zWkNlwrsldrd$a(-}%=07`uo?kbk|Cl>qj zEcW|6^aq@O19^H`m!~2CU2;MbjMJw)7G9|oafT#p5hYIZ6j)8t3Yv^fm_?$a6S@rB z%#s68Lp>B&A)~p5%5827V%91>FwT640y8kkL4m<1H4)OLnJw1(=)q0+EJk2(L{Zv= zHLnS<6$dCp0%Q{L(rb2dL1l12CaEArXaL#$X1Y=U_c=Nj?JM35+(f~EwCVrO$I?SN zU@P}s)iXU90~0Uf!+>wbFNQm4010e9*%yC-01j;-y5>CQMMd!n63hqHKdL#w93V1! z;lLfy8T-?gX0ZNSrX$Icu2zv)o5_t`8zf;Vk@7dxBPm&Dd?&sW)I6Fm(TG@M-pB&u z6nLhD=cb~=5;6>st1X>a#MWCbpKcu=d_0bFtyVf)9Z#_!1UG#a0(r++A1*8)a)LFg z#*C3n=Tk1@8(U(G?SYS7H$xtmNG&xHqX4?tw+7GyLvtouX%sxuoAH-2RPxz~1r#?R z7IbJtPJ)*BR*6FL=;T@!f~}l`G(bNz={G7fn4x=eyI$>?w zFup9(B7xQtfKPKStwbyu4Zw7w8WtY7987SPgBPs%D;dj{*a3Z1jsQbxVsG&*+&IEa zgT5D1v}^HBt_ztoe!X-{@YCyxLQS%<+hQJon_p-t5L3^CJ`zT*AV@gfsVN=bOd*L2 zxt;XyjZCpZQHTiAo?MRdh#IT81?HY1=6$T>WR3@JUYo>QpB#>tgXQL%@DzYWif zD*0h4=8SfJ$C6~d1#e7Mr;Y!U)VsD+dTSD~ZPLLp%hY$}<|qH@Q!JNeiRmwZkM^Y- zSy$RsS=`Z^I5{DlHAIE;{*x&2kCrWPGD4`>Jso9$sc?4ePJ8NL^8f0Qag5-0P8UCT5w^2C|L@tvoWmdn3in}~QLfkRA>f4J@b%<&^o zw1&Q;`Ca&`&k+dXKJ#0?zhcty{&U4%<%zp!ATcSGozyczxzfD3k(WLic!}5>HEv;lhFp8~Q;A@!`aW1}!Fx z=#bz>jvYOI1Q}A~NRlN@3QXX@!AXz|F@DT&P@n)D9_FZAiNPkG061|77^yOVOo$_R z3?<4#hrs|xH8ilOqXz*lRG%t+QHBeT0UBi9SgOz>PJ#iJf^DD!=nIuu-Oj0MGb;iF zS_L?L(G+Q10a2oa6-ZX$-JL|?7MAFtZW)9Fy1rE)cEHrh2E@uG8&fFC12}U!_7LE} zTD~|(A5hyo4-NZGbQ0zbZy3YeX@$KD=O^R`94 zT4Kh5G>LoA5%zlO>1C7SM1WIzK?8^lqbzU`gX8}Kxrr7}j;FOkvIYj=T%NeS1E^57 z-gj@kwGIRACeLy*u7DoaiY~hUV#_T72{%)4K*0oyu7Ls>d#fz6xU0b;>pV&zKZ3-= z;Jo>CI`5K`siE?KKDT%gsF@--I(xIp?IaPCM_!GfzGD z&Q- zheZeUQPT4+B9c{ABcf5PS5x)lqCs!PwZ;G7?9`|wq5{A{NiA?f(yW@c#6dhCb>QI! z3h|1xDV3JYz*z^(dQ68K0=R2HsczVoCmwL}R5!~8GRp(B)XGXWRONH;zzD~6K()De z@L{h2Zt&qK;(EH4+r?D6%|reO+K{K+d^U$ne(S~u5m z$IW9MD9AWn^_3_bl0-3Bvvf%9Cz_({2sYIQFjZ>+*Tf0qkH2f%=L5~0X*7GurrlFC zO%zS{gxvi+SLdIHK6>e=r@ngYug5<6LgO^8Vb2z)D1h75`&ez^FtC@4uKiHy(SiZC z*~L|RmGy;I6YEg&`-%Lq`RxCX6uP7aC*gRmM=>c2>ptXw>>!Clt8*Ys4970GgsXmL zX_kKsFfGTyD?3?(%K$PM7-i80Fb47zaMTC0g6SwzD?!Nw1Jo2~yu)f9Nl z;?RvjisIoTch;OuauI}V9E=}}Lz)ieE<(0ZCIHpBPIk7_o$rKaJmpCzYRWGIHzVEr zmbt(BQ70~u64_8Zuo?f8Xe6KgbO~Y-TFgAciaPUr=dN;vKUiG?HzV>yV+vC+vSv6R=zVapeLo63$L$U%E_NExM zRYr6=SgS5|vKRGh^(2ZbidNL3>8$KnLEFE_+SH+5a{yL+%F7t-XMk0WDr{q0Bjm(y zbh5?mRfpEOp6>s4wLfyL8{4>;UFP<;rQ>aJ^)s3A6*II^{V7|0E7i2NBzNqg%_4ac zAf`?isorI+N589F@mhAgWvx+p0V!AXX0}dYb#Hv-J74fKY+wnC*?pc?z2Sr3 zf1{hr*wXK^7me(5@9VtH-m0_i94+WRD_8JtPKC!6(%w`USG1m&uH*sEc-s465|>zh zLb(!4J#1pq@)Ry8UNMX9c~%;CxVkV=K!^(iF!Kr+t3J)`fVJA;8q;{hDuS<`9J^p9 zH`&QghH{jpoTvOw8Ab`Va+W<}S3f;i%U=d_n8nOtC1aS(V?J}5{lw)yEg8*khI5?d zJZCy@q{{zU-Ye5}LrTI2vek?~g}EdzMe$KR1IMNJEtqY+jyry4T(AO|JQr zaxiyUwa;@uuQfTjs>k^_h=kHs&BwAvOJujtHW7Lu-|z0Hq}#ir#k>#Q!7^@qzwT20Mb_4nHGkp_^sR~^@4GPl1&Ep{*iVy{=!QHEu)ziUdaf&P= z2*VqUzu2&uvAP?Gf@WElD6p0z>^=9;J#87n;cGq{ayai`IV%Le^NXc9G9}^qqrh`H z+7Q7PG6~1Pk?3=m@_~p9G@Fr8JfC^P0mP*d2qm4v6z}<)Us)VCT)|0HC;I<0tjl{r z55NH#Y@iwd7PSbL6rqV5gdN&S!4zVYJDiF5AR9Aj8Sgn0-7!BzR5MDn#am=R2s8-^ zys`>}iP12+Wa2~QxDu=jx}uv6JbVm%tCa077i*;FxAmKemDu{Wp3@${K zCDE1T8WONt`Yc8b!1cwpbIDsU811HH;wf2qt}sS`I>yNe!F=Qon;^?~2@suAloE_ed;7}n+Bc#w95BfZ9S9c3nZfMXMB3C!^v5N_E-Dbg|8V$1__lOqbGeNnAi zp-gW%q3j4T6;elZIg6#BAgR=vgEYu(c~PlB%>zVZ}n704-1%#RQL@^wo_pNTNgl&Qz`XkP98`54YGx#LP>B@5i5#$(HG-ifY9ErM9qgLW@|i%3)mVykF@`Ek92l0vqzUaP z%zEmJ1`;TR)PSbQ4yCZ#(bGYPO8}+Fp~maj4|+Oo1xN;8@mY zlotXJ00y91m|0zwnKzzE&V&UY&s7h+WG;h1Bt5K6XY-ABA=~CHQL~NDS2B`o;aCR< z7Qze*&yYdWYM+js46RE5BwCk)5@tO!Z&-r7QjIvH#8AL{s4Yjb8+Q-v&M)1C}n53R+^*O?gum z*s3*AQh=Y>#LW0Et_2fVj&{a z@yk5?W5cr0%NSNOoYw~CU;BaJ z_#9;irc~29dEltzMQfI<>}2ohWD~;8PndJLWWVrXNgH z=feWv!^&p$cxSPEQ=%(pat%f1UYw^~HZL_xs*Yah(}L)d z9%lNT=(UPzh4$!@CTSs&=KB9UFdyqwk5n*Awdm&k<~9@1n`PjTW-)ZeMs3y{>s;r= z%H{E6X-@qSa?9tVHV~*Wrm)g3mnG=14v9t{;QPI306yykuH>lZ)Rj(Yv!3Zl{ph5| z=$syEx|SoW7P7g1Ur8Y>xV~$gjcBO0F_ivUV?I#=WoVnu>Z)Gso3>yo)>-aEYM^H3 ztNLk2Cg`H}Gp(-d%+~9Ap0LawX{WxjZ(FFPL$ID^YrB4F(atov9$T@d?XfoKgH~#{ zR_V*0YW}rTihk`>ZtTL|PG2Tqn*be91hHdEvZ&Hr#JlfgIdTgP_ z?)ScKarW%mCh$Qa>j0;3-A?FNS#Iq{a0Lf!(r#r`-eo<5aG#EA!*1@rermI}YF>8l z|Hhoeu4n+y?+d@JY^1L57CP4^>=?7|tafgaIB&t~FIto8{+@A=8gN^TZ~2~Y6AvuE zJaGNZW^H9a` z3Rm>vc5{vb@zwu^=K#fNeWq_Lr*tUCbnH3s2oH0^%5cnaYA_erxJHUk7kG|92j5bR7qES08v)UieuL_Mo;( zS|{|fmT-fIu3rD;KRh;MOh?{urS({_6|DUgB#X`ysS7p8gk=Za&g zc4tVh_`Uz6KS39BZ(}%eU+;^Lcl2;fsBA14XLq5;`J88TlV@so_jr1j`s~?xp6Bi% z6HWkC#E28I^`T&jclxmB=mlpxq!)I>CV7#!ad@eXl`U;70n zX^;2!H9&68X5$qs7r zp&$R0ODE+a2SR}HC$3(bDU47FF;)*IME?mw*Ud*4Dz%_i8pqX1K7erGV8on)1-S%h zU=R-;fdUy898mz`!irojRy>F?Bgc*&KY|P?awN%;CQqVFsd6RDmM&kyj45*_&6+j~ zI$W87qK2LfH+lrBW2g=RIvxse=)ljM8Uk<(#WAs?zySjUFs*8}2UdYS9u^dEz{r6C z0e%V?Akafo0dCcTEs*d9&xJs1(!Hs7FW9c`Ui% z(v<>o1Q?rRa}Fa$IvY9Lu|SR<0R;3Iz$GGAjHp+0Y3(rcLx(+9H$8B`ZP|iWXHWkQ zE_^u41YlDF-T8B|VuM3{;!rveY*K+oD`(WfLqL?GJO~Q>?i}l!0OFNCk9goX9zdA%)^8F>dvhur|Cfy7)H z8WPu`haZ9%qKG4sC}K`3u~%1y0YW8!7Scs0kW?=W)gKO8OqJ0Ha5;cs0AC4|19=Ku zsDMUdt<{uOr?uum4@Q{f7Gc$`cvE8~Vwt6uFmbr0V_mj%rI&z-IVMUeo^;t|6;_3r zM+NMr-g`~9cUx0HI>g0Q3mrECgj5y@rkR5h8WEZ$C8y#?$`zDe4blmafFJ*>jetXS z4oKBeQ679}TxAG42Vi;PEq4PCc?o1>gvUAhTzwNBxLpGX2tcZU*b&&&rUsU`)_({z zP-}ior8q*Q203(TWE!02V4=@K8?Cg{Qak90DHSUyPaa5BK)3u|SDvK-WGZfs6`>Y@ zR<|ydKx=b&MUX*1O3IpO={k8py%Z%`t-t>Q9I(Ix6KvR_C0#avz8v*n=V%M(Hs^$| z-HBCZTfIjaZhn#%*M;vE9I|7cLS~nPU^0q_qn5UX15^uQ8Wn$+_qYg`>sGu4^ z6c411l%C2Bf{K#^QSdNS(h3oaYlFH*YAX*8B~8?@f#K(@$Xj#Wwb%b&Pj)RzDPN@R zw!S7v?t9mjt9D0XS#@EgV4WE6Lg^YrF}!P8r6|~c10J~GgA-oT!6XSlmcw?%`6k4E zN}RWy7;sfyYRB@49ppyi=1}8>gC5e&$ZZ>--=^n{Lr;}XSc8Av;+TN!Y|-q2&2a(! zA4AgJKs5q^3GFJ-;myUgp}3MNEACNSY&_Np^>=#c(^Fr)^&yIVQlh9Y8epn6^T%?d zGK%IlNBBx~QQsBs-lM8vVFaMx&qJ(W`!&VOo(Ul@dFKCz@3CR>URf;UgqSr zHw{+Me;?c;7rS`9?3sjYW;>g85=1_P%;-75;mD7M#1?$12`%xH69zEYBa2zZ0}ZfW zMYQO}KLRq4f}EBgK@tEX1W-4M)Qu4q$Hw(2MUQZ4VEs~~FbS6BH|Eu35Ak2|43w&E*p}| z)OoJVS<);@vSggRk^_0N<^T;ujZ%~ZE2D7}oB|yvK?_CH)oNlFTPP_>Hnabl-R$510D#~qP%*RO&_Y#&8_RNb zONR9eVk?VU(nU3#shurtyGdEszE(?btu1eR>su_@6)$=eZ5;`#k=*_^M61Ouas%5O zlQB2B(w#1KO>$e|Hn+Ok-7a?n7hLQTmv$mNoz}`p((*nxy@5F|d$U`;?1%?!;u8zBzXq-^id*dB7w@IO$k8c#4%`tN)7NC^CFg?a+v6W^ zq{4y$atQ^=;SML*xzN2YhRLgACxcioGVcFhPho6j7^|2uEUv+PRXV#PR!{+QVeysA zZ05O6`6L721DgY=RxuaAdFkC(dsKs9kxt54L*Da^dE8t+_j$=iPP2v|OgiM&@xNT1 znPoK)+7fs9BWt9}!H8r)ksu_uV7+vNMu~?+gJjZY9`$CkjAum$dL;#5^o=jn(mpAy zkRc^Ct!rJ-G$ZN&ZD#Xl4geZY8=5^Ag7SqEby`3R+Q)`o&S8+9Y-SI-%FTARk`G<& zWQwXT1?U%~mxI)9i{wYUz1w3g$LUai_o5h0=uR^?RR`qJ*7BCCsh@1`Q=h5bZ%Y;C zTqqE{84{oK9yr0hi0i=UMxj9}_i+CMP$YQ`+oO7&3PJ`LXPV}yh&Ro#h5+4TOjCQ= z&<l+0M4JKaHa@WUKzqS-WA0S54ycU`gvjl;mDJm+fn9f(J4;ezMT6!Hxb`Pp}t z{KzZ+$C4LWBbbtVd_~4ccjHRu170D$9@@B5?N23v+efzWy+; zc_F*ZAuK~-_&=pim%Vdd+vLi7P~&NUvs9h}8H@0hw3Q}Rs4c(GSZulP|Nno;-C^2E z=^eu@5GCP(-~HRdq|3G~1(N(*s<2-hU6EX9-}n8Ppyk|$<(SCrSQi}`zBL*|SO;`; z#abjujg;VMpkTY1#|{r2drd3(I7;p2n%aC5}XJd4lb$LSI6yHlX+sHQBMe7+Xx!X(>zMM#E8lz z04u4XmubhheHzdxKwJ!6Y~|o*aaE^i00!vJrwPrN*+o$GlR@ke`xV_BF;MyFi%!`~ z6WZbJnS>z54c|DD)o~*Oogpw;?4 z89LqvYT);z%{z);y_gR?<`w-M5mHWM+(29x?hy_uOx*NUk7T1la%EoXrKI7dOgQB+ z-qS`}SZu(`utf|9Ih|{$hDFYvp83K28Q|5GWU5h~dOZcDuo7j=#*FM7i2>11++@dm z*9b^Wwlx+B<)XAfrUNpTFxU<(uuR+BR`g%zabHD3g>nbB0?@o!yHvj<%wVx#^G61 zM4rXr!IBe7AO-2(r7&XMO{Q@cr+Q`Niwwl2NQKN9BO5W(MD=7-Buxr-ih>*jW@R5# z1!#MG2l0TJU0fg?!U{-H;GHPm!^N8N^_^-kP^7>OVJM!_l-u2K=$_=}s)QNy(IJmi z5aqxM8FFWg8cdpfCCD8_w~WZPwc=l%aMIlkwEY(&$Rn=pxHqlN0d((oD?H;9|VVV-QBj$23q_=!QJ?-S7Fx$H-rg zq(%pEslaX1=taZ{RtB1&MrjO4qw1cd3L&gSP?VzTaQ3ALs$$dFkps+(I>kjhto*6g_5#lc@c3njn>co{-%VDb( z5gm%M9LoXQoq^i8#+JU)Tz^6y7BZ`{GOTqitc_;a>a>rz;wyV;Wkr2kV`A&PvR(hV z4rE1|flhwO!9?M5tt>AId&yy#{U5#>CJPZO)oWra5iZ{_Lt+Er~$wcx7$ZI_=h;q}Ph= z*g7n6=p5NXE7tlK+Olo3f^8T{ZQIIilrrllhFcW)z|4|u%Dx1<&h6js<=b)~;1X`v zdZ&cp*c6$S4w!)%oQh-gAG@jT*w7et@h#4-E#?;P=FXPjZYh20MACAOm#JyFqME3+ zk0FV!bBbe$=%k2rCg*xi#2%PI9&CpI_&^@$?KM8DNu+7|<5gyxl3Aq5?(|01+iGWhqLcKhrCt0RdBtN`ToM_b&R-spP=2qL#4h!!uVf%3 z;v%l^?t$()u2DqF@jj*f9?0lcWcq3z&Jr-I*5~>v@a0WeV<9F_XchVPN|hn3YPs$KFYxSoYvKk74>WG$(qPkInpx$qycPfil2uV{ zYR1mSKDv}zy41wV1;zac9D>9JWe^t0Fl05aC?aswM(+`a@DhKJIhLXSY8yp`R#^eS zX~CHqYOiU?u%ivcvB^$44#Wi7V(}t`TZGgNC&X;L)Egq917%G_06_l&#PR#2iY6l2 z2ghw5Gx5B&Z|PEm0LX9S<^j|EjKwNUnrc7?Aw-;@Mk6)Jup(vnGU|mOP3O`@LteE(#wHVD*swl5kIjK5AKt_E{TEgEAMeE3yu?0W~yn&rvNYjtTDhdONTO7vOqMFS*(sEKc)jn^TG@z zi|*sg23jk-GAol)v5|8+w=(6yvMd8&A46E%@j(32Gr#455BTkIfvX?(h(ahpEiF(Xb7N<_C^8{ zR$ZI*CA%LK7ZfU=Tt{p7YjZbi$M$yzOkr=LEsLdpoCra4W^;DhR7AEj>XWWAfM~u) zJO(38H_Qgbn_B9PJRbL`T1;}gc6SH(N2YeMd3S+VHF#SYR%>N@z8Exe`}UATBN<1`=)S=Ec#w3rheUqTY=aYaBU%z8xPTM5g41}&h_~J1 zSuCO9)6m%X*)cWt-1a(iP*pbc4e3r-v}Q(Ye#ej5{d9i^qq;dj95dN=54emUcsURF zmDf1kF}RNSz-{L?@P@<$rG*i2D!hfp@hnx5L|^}^RI*R8&)WH&1o3mb2)DyPAg&0U z2h5*WxsO=ri*)Fdbr+Uib2$?Kb&O|umpeM4cx8(o@Uh`2AhObQV2WGZh-0rebkiIJ zwvSt0M0_U`h5!KEAQb_uT{1OyWX@DP_Qn#k4vLwO=o9qW zBL%fj^YN;-&)*|kid(b>W=%0=FTA6c3z;fK@!DqpyKkAsTlud8yS$THAKxw~6148# zv$ETAagqFxHEAh!oe?RUyBa!BmyK!5bR*z{Mw+a5nm1ig57=>=3T@y~U7(B?2G|uvnArB`!t- zAP532GOQv5&szvF!A7%>BC(nxU_rdpbzM%+!t zy*_-9EtdKNN~i#g>&UzqHHeS6>dJd<#v_qTQpqKmY|_amp-e1Cy#(;#GtgAKLCAyfcFEdoHliU62$q6BtOk*ERVl+;CmHms}0 z09$=XK~q=sXe_*DH7nM}a=nXF5Pya1Rkvupk5#F%oAbrT9BsR@{0JaHeo^`t z4?vZbFkn3cR@Pq;@4M};tHg9sfOXTIEKM~rW=*8gdZTKv1aSC@;kgDHIjXM!6v_Ouw*#ReWOP$U@tc?%ThWNp5QAfFUafHmi^%{fA|VhlhFku*h*W9~x2A!eIY z7I><-d^1?7j|K}BFS}U#6d?dciZ~>t7SISKvPVn+0Htc^aEC1Pd{`_1#sG_pN8M`C z)vTFXZSAIxO=zuES1oESzgNYuL$C@*Nsk5fq&zFS;yQf7qWlU`a0g5jNF}S-Udd~S zCuF>Fs!zXnO0%iTiu0zv5^L`PxTCgWC1oCtt7xD72w}gIGkM|mif(9Oq3veb0rBQk zZBCK!9n?CvI2L{&!c_-u_wT_EU;OdOCzoQO1i11uczNT22W>|na=OnEHM}~4z9o`S zKe8+D&*#Z=n%4OLuYL}hj{F3Y18+U=IDYcq(Ol;+#Ni=3FChp)a8^FcTntU9(Uy)} zqy-&Vsz)O{NCDg<5FCtBF z8qfHLv(~)kLj>Vg0#xO?f?bVxJB(q}rgjxB+;D{^Y?f8PrMv}iuQ zjXSW(0>p-aQiY8$aD?L+^fR9cF@#h}nTe<9<^ZV84UJ_K$QbOjM1%G2i-4m@uK=Kj z&9w?bC*08K24WP(MKTBi2*QR!RK30(L~@p6)x?o%Ez8Z+V{H!A@<(MCEvlSfKL+V1XLM3?qBuLE!z4YdBb;2v>-c8D1GD2KP zx<)_sE255civ+V$!8N`FngV6l`CxLR4}vf*+4Ld`TckoeDWpy(G>D}LgTm9?5L-pH z)I?w7s2WbBp*hnZ?yBkm^N zSS~96V~_&rfF0BaZ%avlk>CilIig2Do~nr(^*TKJ^mSmk65AT*=2uec)lN0N5Ki6V zli10Qk`=0@E{%eLU3nHgl00P@W~EA8?Mgvw?Nar0S)!uEb~Li3;D+**FJXd?J2fF< zY|$x~vqDm`=!w-ZuLZDT%EeZ_>IvWOQc{~r3A0FZ-A-3hO`-BgAXBYV0(8(r0W7T} zsyfu5j-#kKVcO|CnG`l9Uw#bxTHAkNykugg_;y8ZRJrqTpYhBd@*t9& zER;CjqY8z~MAf__jX%@R`8Lm8?E-fI|}CMZ({&`ZMt-U|o+ ze`8|0`mVcWLh4VAGXhP4OuFrft6XO@LJ#10Bs@wXa|bY0iDdOVc|x5`R5}{lJPpNP zjo%d42BWf;q&?PDS=3S(6u6qji%NEyYt92<+;}NFOpz z^DcXB%AIeLpZ%!rXL_;hPGZ&CniX!1o=q((ovQ)T=Bkpr+zM%36oj?*ij|}3WKClG zN!uz&mxkMwDvuIrPTO{Z!zD|HYAamidT62z`f#lBVfEsH|z4 z@@S`Js(jUuY^a_XG-=lk#(Hj zV=KhRJBgvMh|HQwd92J4VX``t`|+wO96k6Qh?n?B9w%>^BN%Amc&~_onrK##WY$59 zG8abOtvR2FT%+jVtUEbFmd^UQb4tdjxYFHejBk9b9s!5ZXze>p$<<0z6pc7WOL{fA z+9TKV2};kFs8x|>)mk;Q6i{Olbh8CD*zD3J*ZIcmjbgQE)oyhP9?dGpeVyLryvnvi z1-b?|^tf&1>o-Z;0Xh(gV@UfT1oTQ+Pl;mh3v)gs*s43k8Yca4Kmz8{I4^qxO>xVp^x+C zm68f#R)NFps{S|>I0a~a4v>>GlKqbVAc?O_qw&-a1>_B7;<@U?x zmQ9T)a3%oFW17wZ)CfO9Vh4sQc*e%(2y5no4kosO*?eb|OwIYqAn_KCH+E&SifNWa zr?h~nb0$sfdMJ0i?&Msj)Y8swSZhIS2{DQ()5vO9)~J)pM0HyKWL6+a2WgGDu*UDQ zh6c}XY&30kK7Do6y7H7YO-6>$+6u@N6*^&TV&%*_n`jyx2ou^b==T4^8_NTJ9nB?^FG z=&$Cg%*mY0d!R+;YA(c13i%pfeh6Yt<}LY7argq|IYOc)jNtkl5fIn#1$6|wv`2(0 z#W<|uhsZC7T*|i`ubbk~I5Ysq$R;jqMV=;V0_X3(s3)DYvB9cr0CJ%A0wy|4Zk13B zmAsMU`UMBV(E+sJCl3)a!+2Qkf^wjEzWN4aHR!J>z7tSAWTao6yz&{AVnx>a<(vZ zjB6<>r0b$aA_1LOE&f; zJM^U{uFs;*BRfz+6H87uisZiZWj3;s+qQBr39~RAu_<@W0o+A>_CU$h;(kQrWgIBI zFeoxTfIP0Jo~R}>Y09@$<}(${cFv1Mp1~{Dms61A~P&&~Z4YMMDk=xSo1(Ol$ zMkoN9Q4Y28CU7&ngfNzZB)yuEnT#kOE2SAHu(5pNGMOtfOS4dLM_RmN!q~)L`qJ`3 zah?_kXc`5@=&CqErT`MkGv|)Zt}!`5C_V8Jj5J`sIK|G=>Ahae&#&%exlj!V48PrEQ58DJ2`w&i=7*IBA z2i9bwyG#>7ZnH>X0)xzBNVQN8pNN_KFSxG%#uqKL3=+VJrbjiI$Dw%fHNEsp!PN91 zktuk<2lC)dMS}p@Fve!=cYX!LPKY|7;}FFvHpBGA##9~Iu*PiL zJ^QpC4fQJ%bxqN8QEQO-7Vl464vyL=Px+`5+2v3hD^9|2N0*Q$HPs63vV}i^jmd}RgWYV)zMbJ&0OoM zTvriU;Wb|6b$8UY<*-W_dzHb0l~eTpHMUKbEw=M_}yl~Lo*S+%uWx#q>Jbw?YP zTX&UF+f-p8c2|=#VP#~YW`y**r`rmaP7c;ky_8+sbz64_V+S^6Rd!`B<755fUI}$! z?{Q`!)eVD3U|CkDToxED#$j(3Wgk{h(=li%)*dSsVuAK(k=A5$wrQP~OLjI=nf7U^ zwrZ^w+@f|=vPWupHdwsYSGm>%ueMgQwrC*(c+gg1la^?eHfDiUSHsq9K_b!B&UX*YZVm+^SO@kT%g z_5k+UZ{60-M*3A+hPPj9f&hQD`I7fv;nr{S)^q)1WcZ?V(H2mn6;?eAD7NG}bgyv{ zF(2uxScCB^zie@5b6LmcuEw`|^RZ(|Mp@P6Ez$&RNTNg=;ym%r?^?rYmRmY7q zpK^;ewRfgTCRtZ`pwMPPZLI(lf={@5r{rs)7JJ=|eKYrujro{WHgMZTeSE+}wYHgZ z7>vwAHLgcRpJx}Z_-ZnUVLawJjhS+Jb#7^JWg5>Q0I2WJcS|e!j1~@ zh;eXiP-3v&rc|b-Ch{%|@TdoG4YJg?v2^Z~f9*qwBMj+tK(%KK^G;vb4p&B6HB{OL z^G**;tJ9VX9Vc|=V2yiXji?&MD}odgrB~JD$=3d;ru$>nWDRwex^W)(cAW2?$F`Tn znQN@kdDMB0dh@9qLXir9VaghsNh>k~D0y}ence!WWi@cqhnWo^gF6@5u7waisyq~^ zNQ@vm#K}P9Nm5#)7D)zYVq-Py2T;gZcEMS5UDb5mvAaYE$AoP(Qs`MMWi;rKM;uQX zZzwIj%NU9O5I2`bRb!*1h(`dW)io&?9CB8!XH3THjBzl4(SwKYxr&3uBuOoD9 zDd3C?YGUnLNDY`gX{}Du)5J>&liGRCSr0s|m^u{Hh!VEgTQywE>dbL%Sn{)^qANt{ zQ!f;hd!>?ax+aM*yHJ&lce!u1+81ThnkZY?x+@Ob1GC9%jm0xc^{F5{F@Fp~E}021 z4-u|eyu}+aaLY}7M5CbC2O^SX;I;!%G>Sap4KKN|0jero?*y?4yTbBO$S3%*A$wxQ zHvN46>gFbo{4m<3)EFoH0LPZ<`-%#AzOq@zy804oB}lyH_?d}MwK@OVb#@Ur1lqz}#T4om9v+xcH zU6?DK2CJ>M!Xw*a!}G|@vO2@ldGJt~%u94yLx5nU&=d+S z#5T%9oJK&$T_YCT=@kni2lVHE>=Xc%3B#Nw+e_?^l{|5oybYW6#-JR9nC3WynS#Fm zPlb_b$mU(kl@UPr^dYW{H>Tq@ipXPxZ*2(Cq&jb;oLzZBhAxaOLyk?2uabVpI*zEj z&hDI#{9KDlg;ap4RPd&aNKjVtnLVEJCL$f{IyKg4)bBc#v)<0~ z=I*5}iR?ZpbhZOR9bj^XUcd*OyVvGJZa+UdUT(;?oF%a<@?%A85Frp=o;bL!m5v!~CWK!XY$ zO0;N5qezn~UCOj69smHGip*oCs#U8x@W@0N(c_2%0y7>Qc~B+C5j_t7;^6{vV@9?T zM>u53RjVJ4FSrZLI(~H8U$$Zh|rIK zhA#_fq5Og~=mL}d=*TLvp+`InF(mw)0Pf4Wp3RaT8J4tN-g)urRay7p+ld8C!o;Bk zLk%1`vLcqOHbLqd8lHkC3SdWq$J2MP-BJDf!yQr2e+Q5S0Ox~Q-mgX6@->DX3+$4A z-QE1e*AwAI6Mz(@_fQZ9N<<)djAiEA92f)<1Q!P(IEQ>9S@<4;3j$!_g=$sE*;)cj zSfOnHy*HwV^1&qlWddxNUWjUW7}bKA$!8;M0PdJj5Tx1nVu=R-j;J7g2O8+1Yyjv{ z;f*-9q`+|x1<+t&SZ0Y-ls7rX5|S`AI2J(z9kdWb3}xlPSfOQh zvY4%=6+~PtOKf&L_Npj&DPbf4ZxVHyK&TwWNFZ6rmm^20^2dC5kJqgd=9)AjZ87hY)-8;09;pyb=4D3ji*GV z7CY6ikMDJ-+v@w%OqdX6M+N03cz7fKwFDlT0qN)v)Hv(k}1OQ;zRw5_%ohJ=>uDA{a_WHI0QM>u@ zTXvq*=>iaRdjP;&nQ!d38w>Qdiq*h;?N4D}y9dnw-%h)Ki*=87@C7!YySU_6nSS~> zrVo?&`97Y2)8L0qUvq#$HG4epIT6hc|bQuMI}MF>MG3dvX^7{cCR;6>SKkq7-pu$f5@f{*JF z1+(|O9)_@gAll&rN$3#^VIYDY1i+96XtmiPCTzl^nCvD{KBugsvGO1Vi-Dy5fk zvCSue(g4{hs*t9o#QMfJ?q064E`~r>$F-$fs)OftQ4KCBVz_XI?*mV^LXU6%{hlM0(`=gA|vIg zUHn;7p$>JFARXjRyNOg>G88FIEviQUEt*GYN>!w{iI-Nl%GIuV^{YDI$N<91k=2M5 ztY7^bTGz_fwz~DLaE+^6=StVQ+ErS+393>1^wOvLa-&4WDN1=c)xz>|us`LiI<2}< z!6r7Gky)$aANFm3H* zS!-CuVivZYy)95Y$dVdp;SazKu5gD-+~OLSxJmFx5|Zlx<~H}Z$8~NJf}7msDi^rS zl`eFHdl2DP_YdF2?sLU^-R+w9yy#7@de_U|_PSTR(`^n1AL&2L5Z%iqgJ zc8#fIsyQhe+eT(|u(A!Qf-5`!V9O?$!3U18{6>4x{Ykj04JPn^FKp2MQdpKBc5p2{ zyy5-&SGS$i>t7)oPWLP3Y|=7r63u=zVER*bt9cpHYOgiDi7$ zFhjV^bb#_tp{(Vca$0|%p0KDf&0$818Ox#Obd68V>Q?J`$e@O`VGUebOJ91^k(RWj zb-n8on|Y9$H3~FytJ5q0RgbYs-m`xCZmzh5Hn+r7m$kN6;l__oZmgn0h`;JS$Jx+#(Bu7^SH~7I5e%#S4e7Mt1_@Bw3 zJS}A20m7yHaWOvLj8E6k2p75PSI_$N9{LZ7R@|Bcyzln?PYNt~2aZeyB{URMLT=u+2>LVJCl*Q1~>jN5o_Fp1cL!U@6C9-zk zv>s=z%qJlPHeHFr->4-qDbZv@mO#W_JGz+?xfizIFucT}OB)Xo2O% zfz~I2F$jYH;CFcZlOT%sab!>|ZloD=_8uKqc{*@;e?SHY*JtBpgbv_&lILCH1zq2T zgh3dERuhD+cZFEUdaoCIM;8+Zcx5bzc!Psl7l?g{RTc+e1exLhJrF8wxJ)5LEj^+q zi~}ck;f4p`QFTNhDkT6pkS&Pg0HzXC*5m+c*eU&_EA8@t)TcjY6oPrTCJs0_~B&LOa{^TP)BzF>0YVhQAu>?gf^N6`u zgGS*@M|4az!5Jpw8JU7&1^8cJ7>1X|7WPqOTyPOo2Wrzdfzn8B8WwjdSbez&YZq2y zFxZX%?uKeXR(A9@cl4%<3+0Vbwt>hvgXOq(7#I=&mTBW?jo^oKeFt_KD0sc~j5hcZ zXtsESwu2jl17t87i)Uv~ScC!xaKIIC!c~x(@gDFMTsz2wphtwu)sPH{Tnz_$6FHG? zW`$Wek|ga-;P z&{hT!;(n_HLd%F_IpYT=2O?~tm#Ks!iDN|+b4l0N86#qbkBN#tf7&}Qvt%)3anKR27 zjV?%b`G}4k=y&Y+jw2{e)0lKEXq{JQjwXn7WSEWWR$%L>a@={H&smQWCY}4(k3R8_ z9w%RMv2YvrgOoQJ$+H>}cMz917BAv?d1i4%s2SGPE8NvwoHrx@d7zXhX91d!B^jX- z8ff1oU%ly_By}bR(K`}lduakVoRcOFVI~{O7OU|Y+d(I*Q62E|HY=4lJ^2v-s&W9P zLMjJP9hp+2-7+dl*#mlV5XXTMKE(xX_!a^}DsZ?K?z0%eVokZCG<3-v0P-2h(<|81 zM@>{=36L@WV?g^cHD3xMZ)qPik_7_OGiBqCR--UxIwS9q9$bJQ8&ndF#Fk)JoYbi| zK-51a0-An$MQG|Yk+Dld5(FvWrnG|`NZ_V=a5h+3M2N~CK%z9JQ<#+sH2?RcGh+u( zqom@31T(`Qkg63aL;zs}Bq*XppIJmglc-_Sr=IBmoH{yQNHuV3MlTeoO2R?`lBB~o zQ5Q;WAQdg~!aFZ85LOBjA3BD%kpO$4hBSf^h&VNY$fA>28k&MQ@MxL;>u6fpiEGiB zo+>%6?D&0kr=8;2VJKLgX2+iANo8J#u5Y)0?;5Y-nyxeGp3=7%3o2+x;sFGy1<7%F zZw7npG8zG}aGaO06xk5WA#i^-aRZ72_DKexSA@**E<{LP9!YUO*m0UCk`p?zBpY4N z#f9N{j4G%rVI#1_`Yapj0FEatF1DiY5wkE!JC@Nbjt4{ef-D+gfSu8ka`BTp`6+K| zq$Clv!vQ^x(~M$8sti;qE#eU#b);Z|7Ry9Zx{?Ez0kZ_bCPs%n41tuUSWOB*I>**q z0AMlIvjZLzFl%8k{gWSJS|ru6FL+=v9^r`+gNhS@9~ILt4j{PyHIfAn<3ttYoaBm_ zc^YFqVh6y8sQKf#lM0NbsYJmjKmd>eTp6n}RUspD5LolMlPgT1`XrG7Bto>hc)K-1 zDY>>7K}7OExd{NN+eDp;L`D<@FtZ^l;=A(kGhLV=xB4kNQkcQ`Qs@FAItos~N`r98 zj{tinK+_PP;SnxNJ0%Kch3KNt$A-ybsa|mwnO2zC^OO0Cuh^)L(o3#r`JK$bYi zeS4*@iGOeT6ncxLQ7M^OOLu2mf2LS(c@eod47&M4rek5LY@E5+2dlJ+B({lvC9)DM zB0xXGJ65D4x%-I=0>>=`WTJl8oSUuPCcHNeJ^Ei(IylvsE zvfpUVkQ`$kIKS&$P~@D>A2^fuD!>$Y&I2ri<%w$OjA76=&Q_*T_}r2^hR=9co-vug z*|Wg@wwt{b!5JA`0-HPqvB3nZD^7@T%tZzj?OY(-UAwY6^{HpYK4Q&eUtPb$@jDS{$#YPa3dm*4{) zZ<)u(iXL@YN8JGx4I?ldgH3%Irgu#deZ4{d-nXqPmZ!F9P>cB+|D%dS^emfOM6vll zDS*5tQz4zIIB{`H!fd+JgET6FKv-m|BILM{;mGsBm9BdryF1LL>(~;(%SPh3&ZN4t zVc7>0GZIqFi!rSPn3C^ncw%BEeZwxkLDs4LP?f2zws0jQFP@rV)K46g+| zo#;Bx2i&guOjz+M&HyZq;vL-bYHr`%bM(Bv!s@=;o!XeE|GW=(XWBlHVo@s z|E9ge#h)9D-*U#$6w6!;tAu}G!CIh%9lO#F{^0F(lJn)l?a5-Y=>aut8gpSC4xQ8B z!v(z}wK{;|tf9lz^0lHw6DWZq=3+&xNA*W^V)(%j|y)~xQ@i2jHiBN$afE#{w9N6li zNB;`kWNes-x4esOOO$&cvcUza$hk)~Cvh&Dj(tKE#MzduQcx6t(Z?fV^UD+wjG7JE zs=ek91T`OGBcnV$lRdoC5!o+oyl}JU!OPpYA!qpG}$q)tE zu$vKt0z2$>)_5a8ko?JcBMssI*q-giCE=6l&iQD7E?W@6qP@q0+%lG|;R}=EF4HA` z8qPx-v$3IZ-4ZMAGE>|G`4Tc@p()uB06B1@Ktr5XyS4Mx%WhIQG~ztIGp$1@b`hW_-Fx-FR7 zJE3Z;L6k?hsi|4hBCSd=Rbw-fZ8bQ^$yZd%!Pw|eTI0k^Dpm6}jqXX!%SONo+-UZU z09)K;BC}QkEjCLpjK~uIPidLvyDF0yJfHhOY;mLtK&zyL>$`q(;0)GE22PM~`OIvL zk$-~>U1$RNN$f)G*0e1YyRePFcsnQ%0xK7AX@Gy-}k61zkv1R|tB>Z5w7 z=?@Ht;nI|o=!aD8E&s#ZLvHU6pFvvi{>Xns%d(+I68uhjW>xNqj}1h03=lhZEWqQy z!Hz5g6U;FvaK{(`coH~#7_p(ihH%r6Db=Y| z9UOHDKu_46UB!w8fI)!Qr2=q*RU6c0(z8AN4E0I%t>3<2mjVE4_3PiiC{wQGsh2Na zqdrgCt$J3i)xuVB(sVgs0GGuMas=R9+VpAEsa3E3shIU$jvBelmV6pCQXK|$1PHLZ zh7KITdm0Q59EVKP0S-_N&|`qXD8}i z-`@Rum44vUEI;4={qwQ$@8?fGzy8v0>u*2;)pJcHE&fn&K?WOi@WBPi_%0-a5`>UJ z9duaGpg+j}&>}b-EL6}#Ey!T7#3YhX@Iw&ENRdPjP5k4-5=*@BMjUh0aYr6|^zla^ zgX}R02Uc7tfddOfiX#Db$;m9jAba5XfPl6|$(v~Ft_t&MCwskO(9t<}&j$%?X9YPBs5 zCerTzib+X!4^2`@Mhox&%-Oi~GD~R3Vzf1UC0cZ|H3O&%DU|RG6e;QeYm} zb)>hXV|?<@PJ@B9g8(?7z z4LCS^A@DU`;)n)ehe2L}4utk;Aj2N`n$D>vf(NwC4%tH+@R%z#NbH*En0Tr2{4hL6 z8`F4nm>McxaXv}PfDNm-nlIibjI4oT1Bl2!92!xLYh+^^-8d5w4#*%r$U`3ge4raM z?178pGe{2(kS>+1t35C=V;PvpCU+gcYBU+abpH58{Pa*fL!=WWWf-0jXmKW%T$~qq zlBaPAt%~64ms(<@fW#cjH3`VoBC$9|`W%cuUJ(xf9@3K4c#4xr)ZzkmutLtI#aWRV zk5(`@!=q{CEK($+CfP=*Z?%m-o2yCG@|DJrDDx)44Cbo%R6T7T6O4#5i6lRW%}Z{Q ziA98DJKgzCc%sdj?J)ok%y3UL_#i_~l1l>p=|V3(@>Mo$W+9&_O*mdLl%~!66(s|J{!chm}R2Ow{pvXQ_Cs$JHfk?4NFuQoBBhvBb95U(ufCC(00F4X4 z01nUte;VXE2rW$jSOhxV%&R}>>?TiVqRaNAaRFK2(ltdgOl!V!o}nS;=e8*xqH-%+ z%&IDZpw`WXRRxx|DGKJO*np zyH_?obcPvKSPjHyuQ@F#0mq?|B^A|{K{*SQXtI-*JZl$P>1#=MndxL`1xTb6mnH(p z!Dmk8T)#MXlPY~IxTxFG)ugP7iuzW_0^?fJeJ)^#{M@o?OQi+>Ct_rR~!xpqws;vW`H^IbHJYb|T5RYcbg>k1nb`vXB;;T07U%+j&bxts|>{{xHyPbY^>uZ=Kz2K$Zb@YITGbS zWeO+)kS2rhjYFG1c)uo{~xQ6f_nn*?D(18$s^#FCh)7&|eb z(UhbuWe2pV^;%4+id7=xmQg_w5C82pQs5#)G*nvt+dnyhWTwe!7 zds8*MZn!+WzY}9PimZKc!3}n{ zBqJndI55=}P@-d!+2C+;5-HdtrQ~Gn@-@stwChAMTA@T`NFxQ{b5H{i9FDpa2fh&* znxqsW-T-HXz|k`SnU1*#{y8Y9IsgO4M!e0nUOT0u(l%MOnkL+u>d&&b)%CU(PyKKTZ50r~_34rD*vPP3c zGvNY7$|moi4fx{%`LjjIV=FB zh{rCWL7_W7J!vIBv5g(X10!U-y`v8&96i6&fL3!ag?I>u7)bgcwSHvCDM=Dh=|6rU zxB?RiJMul`LXFIblPW}S$wRnMHhoKuD}2PHq_|3=oG;5nsEkUfRGm$<4*~E*8pAQh z0>4poEaa;Rnc}(}GBg}~#aNX8h|$=H35>tbC=YQ&O2yE)(fBPhDltD0#y28H!`YYr z13;y#$DJv_7}N^|v?K{bIR`{HZImeD7(;HvLFJN1Mm!a(DFEu|lZ0u!cZdEnaus`9!RV?_j$^x>`(vvPqV4Y`7nU)!^%B) zO#S4OlRFcPbEyMJ%e(adj8952A1fr8D#e{@4xPe9&N4dznK!iCjEmE$CetY_@grHn z%hXy*zPv$oIuk9BiI0juM~ zIXOiaG{-)IxP(!@fZ>_5QZICA4z1%l(%cOlI8Av$o&tP<8r_rDY!5HVyP){T+GGis z(-y!}(~$s*EI`7xP#$nZiTTp4M%QtMyFWAub4wN)B~J= zN!}ZZUAY-&fs3r@Dq+hvoIpu9q`>Snrc^>O+$)Q)z=}_$unc32@N@vEn2e*06!yH8 zssfk!+`N_iRGuXNwwl04{K-!Wt;Fa9P+~1sW0e{Koeu$+F;C{?e)WR}Qfax$Y*($A9j24?RyP9&cB#S9=WWPzl);QxbE(3}p!!H$GBfTV|d9^S& zL$INHy4-Mpp?j1en#X_Dh?HqFi7LR`D~@$@M*ZZKB}KV$Eh({d4F*gu8r?FzxVSCj z(%G|`4ONM5oe;bH98E(`g;fc9B)~vb4^op;oeYqw3DJWh$UJX4j)=*+iPt&C{vwwA1vqOc57ojs{2!|8+;_Y8_= z!@cGNH}X{fwocVlstuK6F+-(DrJ^uOsleJv(YM4>iDX;0T6K!4jYH;WTeCe4a~c2$ zogiSv!D2jC#7$hqt(c`04*@99Poylx8pSP90L%3)%Z0iTIHW4w%tToe$x0PI3C7Zb zO@G0xox?9c;SFi2+-EHhx@^+Cf~R_wBL~>1$GaI|3SD**pZNGbIXRMg5z^C&wBb65 zNE_YEHIEjh(8s%%<)y^qRg-{a9^d_^>;2u+dJhOoi+tG>M@5J{dSQ$A%@Zso%UcE|mNt!j9%O*t-bVw#*C^9>1w87f+FYH`f8tXWP(Oe|JaSiu}^1ap5b&I(OzoQ-kzpr z8yY*T_5*5EdgC>TirZMINm&!~qMWOK0p4JhX+GAh-b*0A5U}?H)s2 zc^qow1*P7IQRtp7wZ2RvFu$}$>qlDabxb=Q(k@a$-RY)nk*M4t?N8U0qZ?zqBdKB;0P}N3$>+-1y*3> zjBrzVk_pE>5p$Qkm9*~7ycG-$LdM`2PA5Paic&g2k@?_kI_}uH6XAoCJBc*ZtzR|i zm)?ki8)$CUrHXY9#T$r%eigWj65I)SlYPv`-J);=dsooxljI@9np)7*o^sW$>hM_B z)((^#dt`|c+#*|-2Jnn1i!6=xCykX@oPddVmEJxAG9l}3F`rCwM!4XXVCx;RPQx^2 z44DrB4$%3zP8+$Qvq25Ww01u)668thSIGjBB#DP`6P%Sof5gp6NjzEG0gdqgC0rLBO|j@KP&8JT zLMZ(1V5(SNs_M?`Hj*?%sep@Qs|%96)!BohxC4sN6AN=&G$p>(uT{g9vPol$PrmI) zJH!lE13e?|JfgJrj9B8`uG>LQ=joNZlu-0e`_VKrKz|+dp6e-X)Hx3TiX2S-rbU2={BLt|dZvb0Bq`&3EK7)=g z*=+$x>v?%y=iptTpZ6XBm^V)ogyzK&m&!W#8i5|MH4Dr=7nyMh|LfWMMzxYaiwbgD zVmj{7VF?a4ub_^SVl+wD(4x6?LL1r7Sv#>%Zj`Xc*@8RQisFf|yI!~Gh?uYEPKklE zrQAG-BT>`AYl!`I{Quo9ga|IRbdAz(kM(?w0JCH`O6>0awuwcVAR;#xy7cDyWog=0(6fFCziPJ7;7G+AByCxgd0k!^7LT5UK zQ9!^9rO>^!u?XufDI|Zt_}2{j03u8)rNERB;fU6Vg%_&fLI5fGafox)opb*h`f!)Z zR^}+hkyCJMM5)EA*4_q)G8hI3@PlU#!Vz3F1n5z~LyrRi|F{U~fnkmV2Nn+^oYQb( z$B-gNk}PTRB+8U3SF&vB@+HieGH24PY4aw|oH}>%?5Pp}0G}gym?>&B4^lHe4B*M& zwByqZ886Nea6khd1sNSk?3mFYLaQT0TAj+#WJRhNdKC27mCII*3x(3HYxiz~uQKO~ zdn{#2ykKq|6Y9j;&<^D>hlcp;reD zGxo?R;A6##l|7;sN%f=v9J&ke&Iz0D?H*|2kJdkh$}zHZPNrzEsUg)*oc~ z1*YDA)Ct#-dk3;7fNRa+m*7?aK-ipx0M55yR`h8n*@Z#GW#N1Up?6?;BmGz3bskn2 zgn=iG5Z`Tg*?1$4HgfoqU*7d-l3xOpW|(l4jetX2jN4O@bQkPbZD@a2ade7GfW-rZ1ILXBy8gCAX*SpW|p1yJWm4S)p|bp$Cez*hsY z_2p@;v6tS5TaA_Ip;>JuQ3Kc2Ccpq@hO}djnQFQzr=5EGDX5`}DxY(95oHvrMJ?47 zV1yl%R#;axM9=_TmDy26donmc54EAS(Hv_f|JhYsa*cW{vM}YQf@U;x#U!wE#{m8x#{(SxTdj%>i{1m=ch%2O1dpe1!z(1R~hZ*UAl`c z31pT62;3NRsxjDIu+n9;K#F)+#~yYpI>4QGJ1kJc4m;p$Qbs$FhtR`_s>m#*&eDYG zO0E%h;(i74XYh)66nhqd9cB<1xzjB`ZCby>@U89Hs#V;VPym-Jg-k zrvs5&KP~(?R4OjE!u384^s6KTsNM+RwJ1L*Fe^F8!E8=LuY`y#A=>gt4lY;&tRQB9 z{W@Eo)(52QKn7tL3kr8OIFgVhEGWe?p~fZ#IFiIAg&-3S%6%>%T+ z80cv&dKtvFqO?mH%w;%Z)zzN%|F5uo&1ykgT4%aup_=*VAn36o6&K>Q5xvGmI0Rge z{&O3Fd2uUd{8~vQ2t@PIv34NjVR_P45@_8`2l11V5%pEACY1+U#o>#6($&K|F$GW0F2=}FbqlpG6n$gybu5-?N~;}5JQuMy~ZNQ4R%~(5N;YErtjvzRQ5p z9yG-bt%$BwGh<4rCNc-Tm1pzO!_fq!QmlP+o`${49sfcjd|Ku#I?#d+Sof8<>IapA%N8#4e1?lMWW`QCzz zd)V=kx4h;(uU!ValK?C;Re30l@lGi^^d#VbwCZPE+Crm@93ZL-#Fw7564B%ykd075 zcm2}9r3i0K#<(63Tuet zU~wm5fkY+5BkDS0)K@;f;@zJvx;v z^?(5k=(Pig3o%}$I4ry(h@N8H?D`gXvib#4vlDWF0XSIF-u^bY!@WE8t~Uz7GeaJH z@XYu+rB)c|p{rn-$$L&&!v|JCw4n$V%5`yl2=2DH?MQBbH>+}kK_fvG+;0uX*WTlM zceh38@DM7TeZS1-z+JL2rj>-85?AHcXeJsAWUS;Q)Hk2WO(W`6{No}gI6R{o)P+0T zYFZkG%a)lIhbuTLD_Wv9B<8UF8!qy6ZslX27IF88_9y)M4HQF9W*W0YHF01UvM z#rYz5@iorqYhOv%TV8ij)iYDA8UUNvPC>&<9_K<|JlX2}^d8T8R2FhO4a1pn%;P1y z+?pWiBTeaKMqTk_hcM_VFZ8ze{8?nTd_F5*d!J%dK1cb^%KdVG_SyS<>PDY_xRryf(T9HZ;O7Zv(??0y<0cNuTqHjROwgdaYkh z9N+?i9{uH?21+0YcAy7-pr*K=PDr2SZJ^}wU;imzr7d6z;-3kEAPmN!44O{?Zc2b4 z-~3r1*D2pzpi*$sdP)syiU91v9xNTJIK>fS;oza%JIUYk)nVdAU>P!%4JMx! z(q11{VIBseAP%DH6(JxBVG3g47qZ|Mg5d>bpxc!oG{qqT9wH%LA|~dcAF-aArJPO_yo!vZl4e;im9DqCSG3k;m8|Op%RXwCAOk1-Xbn$-X=0(5>_6;bWs8} zVi=MHI^EdM9pe@L5;Vb*CrOF@5k{mq*(5Gv+RfN5PR0V|qBd^hxNTlf2!IcqTOLHg zg{WICHcQEzV|z>?H(JIuz8oI5qdd+dJ^mg$q98At1|f~j3nUKemELnvgnj)Z&^Z_L zs3Q{}i!*FCxZ}k0GQ*zU0*zzEVYjPUxJCqh2|y`|JXw@}%!Zj^8Q-9U0SLh0;2Zqt4UbjQZ~!KuxXGA+#ceGnK3-I? ztk_)0{ zMh*}}L{!FU*k+{!z%)e!uM|W@91trNSglk~f%VE*e9yK~3T{%*Z@L_3VVglTz`7_= zL(U^vmSrf8q}$@)##^wQmc_+7u~S>rq&u-3tf&reI*;mP z#X;stb>&L1RF`o5=r+3LD#l}pE-8~X>Bx8^Q!)`A^3!6ljCwXyOLC@a&`lyel4pb- zoFqg)Zce)BCjj9|X@x0RXa>qTR{^A4qxj?wDU~*%CW9W(gRV;e)Fvzb#fWOzY4m5( zIohji#CAo{^dyO{aFItksiSh>iH=~3qRP3g3U2fOScpaG|8xXsQIsa}SF|O7L~taY zQcr^VD7}2on}!@Q1}UZvX_8Qi>(C>TvZPr)Dz4@#Th^+rs$ko6k3lU5amdYR5C=h0 zMzHKn{(wfHtS6N=T18ia7Vx;PX4lt8ZM8WlugpgJR@@y(bv4&MXidu}SUX*Ho zVk(EIDq*$ik_f5l#735w>qm+w7?K-W-mAxcEH3iuN)lu1xlNI%X9Qgdli*mH=Ek)c zluGHRv{FvBHj*T5%e5k0;!M$BIM=@*X!igM#KulS|8NghE)`4c$c!Ayx+Yz_zAMje z1#&tal!C0)a$uuojRTw;GpQG(;S#TG6M#KRjamf6T4j!!>ciI3&<>_;7%f+9MGhz$ z_q1(0W@j+&UoT!Q-}dbwiYy6QS~qD%+Xz5N9nzPsY-FlO-uRi5z!wB6&Nw;1;iyNM z_STu=*T34DBF$?-8poV^sD1>^Ti9vp;Ax^x&#JZu;I+qhbrR}|S8`bjplO6cpsVc6 z+-HiP-}Wy1Wi8uHDymp2ZcG!UpvJ5OCx2ZNw+T&kY6PWh8~pUj@#ZeDxkh!l>(2^6 zZ30K=*?`|34Qiw{ zmR>$&xv*Gi`iZNp>b|j<md#nl6M5ALOKz*W`r5FHh9m+2rn9wZW-t}Hc%qdhg(Z(ckgmTmv zqfxI^+(RPr=-5}0m|j?*o^vU2Aafg3|7>s_Q2u|t0NF!(JtpQG6z$>HVY_E z7iD&z7y%L`LLdX?;4~|#c1omJ#&R-uvp1X9HghxZ23&CZuuzl>Hrrk3%6LS5PLE`c)ssG%QFr?AS|2jF{7U>Lo`X3^i3FaOdzyLuQW@CN<0TN+ldci;xqc{ zTs}{yM&oqt;FXNF)15;TmHChXxQTH4k0`*aA@$H;-TF-U3-LNYgPURNB z4HSh`d$d(IOnzFSLU;95?=(H%YQbnSA&T`_do*Vj0c4x=d7%?z7Xi1@HD*hpTa)Lr zxbcnXjU5AB9w$Ub_|e#CC21F$MzGksrMD;)p|Ge1hPB(m$muy>-;AI4=tQK*9_2;T22McCAEsA9Qbxylr z8;Yq;Gb5`c0FeU8f@3udB6lK=9oq#!5j-SrOSmX{HCrS0*9m}Sn~Z_Qw}?}>Aqsc| zy4{gvU&lS&`cN7uA-2puBO^&ThM$iqF5k*|E(6YF<3MLljyRBKifl7qMyR0~>_Hv~ z<|JVufEn1xk(kutCZq&7M=9j1sA2)o%HM=ev2>GtDcba07Y0;>5iDo-!R@sznT!LBw?p$~(N0k4a3z9<4v!&MI2}+*)hp8oI|qaHqaV9zNc3KSvJUVtk}FyOM1jBV zV4!BiH2u-4y#;F^(oSN4ssb}4ffn4X5^@*;e+B1!VI*>@j5N7Y1F*3Q_qk=b>Y`}b zz$o?yLO98W9?UIw{-l(7zG! zyw~RhQ->t;@qn}Mf#E1ccuzH;O7GNuPvj8Vs!ha&1gWhgheAu1^UjPKBS)`X7nOI; zWkUtMV-zMA572gCq+3so)11nD<#0H>hnMCvK{jZ9I0boJ!FxpJPsWFj0Of0b#{0qN zPdvsa$%j9c#!EQKe?9B#GC$`w&vi?(Dl6lvXOd*M-He5kOhvFZ#om+??u&#kBS3}? zhqZd?=ER54LvfvylO3-~Mj9rUp#=E{gVcf!nI zan4N#0g4dRXpke(1_FvKtr&o55vebjHt1-eXwo7XHD+Zg)WKAZ0`92v;}wroqFlLT zt-6va(2fGk=CpekZ(hB7`S$hu7jR&~g9#Tld>CPLpX01cV>6WnNY8;`1v~3;+bn}3%W4GDRY^ zpD$9yI?VL<|33;3UTSQPj|T8VyaF&94?NKpOezPV#u~|^l#Vh8JA)2fNPrCq8t9<_ z6c`Z$JRXXu0gxP=jxrTZ^bVkV; z57|#$65xQF$}=%WBiK3-$R4sAp@54LXn>&-14t<%p{~U!!;?JV(8F_Y3LwiDQB+X@ za7SqLyV{nd_giN-JWzvg&lDCv9386@$QNSz5y+dKyilv9kR&q75vIb*DAl6$NG(6s z8ng(c8n}`vqEyOQP)qx(`bz1{2=CyiioBjS9@W2JHk=Vny-~n0xeBjL|hEO`NI*}F};h_k@ zE5O?GG`_YW@)Y9y^QY`K7hQoq44S(EvZWRS7YEo*b?x~5?tqlMcKr1j*URDG!4DJo z#yb7rxo0fz_JdfZM5RmOqS}p0NQo}CS}Lz3%(G+8vRaD^p~Nz%dX-e>2>k48bJ_Rw z)nA|e_Wi~=ryWu38&bK5hK)6;3wUj599Z+ecR-2_Y*h1`{E6l_ItZWuZ%`XVMWIpx z-~n=sVt@piWduC%&2sQ?gR1%A20V~Z16tz%4i?B-W=lY`F2|lc{|z7^6|CGq1f(Gj z8LU9FlGW@kl)8B(U;rAzU<%z=L?a#%i8U+S?|5*m|16GvuAyJ9w zj*t@3Dx)UI8uSQ~FTqrqmc%@RImMQTB9aPs*-GJ!l2%#_=GEv}$QRTyjEThH^&lfP zzU@qq4dP-hNkXAdUK5+y)Micq008$aB?>+er=)U{%59!A|2mXZjM-cQN5wz|dPJ&; zSpKpUW}*|H`PAn==VMO9ROW;HteHbHDNutR6rsNACVcidOT3^jp$7#XL!)S?k4=hA z{-o1ID;iOceiWqJ)Tm(|1C>UG6kuXR=}KAJ(!?w@FnN>dOljH|dbxC)6Mat}aoSU# z{uHPgRp&p67gVDj6{$&G6HMz_Q>S7yG&t1cNtG%Soqn^URn_WNxvJEW7N)3O73)~Z zTGo{eb)!$MsT9!~)`L+srddUm-rTCytG0)yX4UIn`I^tK5~i*BqDrfd23Ru6+^POt7^#%2rgWbM5P22a{Jf-P0zB|26DrNy}Bv##OF6yQN@Ni&Y(+ zs=k7jEhgX~}o-qg_o7O-8%*fzAm{q1_$`?BoH#k}#=E@j|5S^7eCFSlV4 z0{3g223`d?Clp{ohq|L12$(PmcyGb(l17Q3F?KF_q`k;iSQr+J?qu*o5iTTl|22OuWq|*U9YMaPmh^jM?Kr7@8TFz;I*+&GR#ed zDAL18Rx+>_JUkQ`X~)ccYmY`C8~I+jySnKw|B`33L<@euyTZEt`!8T$o0>*26Y ziae7JmB>W18()k5{Ny*}quy1x8on>wn0e0~%TYg|&GGzVEzKQx z5ob|`%nq!FFmFlC zMK}vP%+v`EJ7H_lThgZ7i_B5FUtG2qjG5Eo7I4{eD-leaJF^EX34y*XwmIufAqwC& zwt52Wh`f0${PH$y3GOW#*4uRO)i#5E|5&1hcmUV7J1N2K^zVLEJlV_^xv&I1XjSdu z&}Q(#Ek*mS9K_JcB7xTwF`~EbM7Z4rvo!klEE+gES=D9ecFsk-S5(K(+C*P97k1F} z9W3DKi)?zW9WeDWIsocXm-?+)oW-ht@p??hbs*s=>#LaO;u0}W1$$rw7DlZ@Ha<6yBmu4AA30ZylzZu|gqn5$Zg`f#=a4f18U(gwenSw0gs@Y` zG&peTf~emtCxjm4K?Nu1n=l4gZ8{MBaHw)Y9DbUu!Q`!IA}mNpcL-i>XJMd35<4)l2*?a@?=VX)bU+J;BufmXGh9PN zV&mJCW^ZW2G`vKfGQ*Eb1A;_EIn<_8EQ1S=ra3~z0ha5TbmPCYMh%xF3NCNlB9F_y z?De(~4%Kb(K1C#)sakl5|NU%3`l2O>9N`0^0pY$ZWLD)G<#@mcRE}}B4a$IR zbPgiY$R!830wG8#)B<1^cPMHeq|xFJ0O2ay=+D%QN&tH+>G)1AMlbnGSJpY&;-Q}JR}eT%WE3%iM(X+7DpmP98ok}$Y12I>*5F%^HCpX zBJcR^8M!M@PJ@7OQ8WMrXrd-*l0qOa!!$OniZsK#GDs!HOgN@R4F3x_BCS%urcf~G zX!N9m#tk|mZx%rX{||@4Q(gd3GKC@;<|_ECZX)c>QUw&}(PLbwl^D?vn8iDI@^K20 zJuVIdbf_WbKqr-tIz}hqERJ8gWgdAECy}xyAL$?lfGLM*AG1%i-~#1BXo zVC;Yb0LI`>3}OtpaT>{SC$2{uosI>!jxZ~*ac(g(UdQ;N1}A$@#)eHRM{_itEp7^M z=|Iv%G=nn?GK>yVRTk1<0Kk8+t;)0@f%+?hc=05O&o`jv1(1~lR}f$% zGp|5ek|dk+|1z`&I2+6zk?F)s0wdE%pzfXwLITBW z&L|`7W-{KMQYRb@C%q0odo&0!R6?OKAhl#5FUKH%X1_jTy12klhR4y=QbW6DEViao zEU3&FXM~0`--=U!=8PhhlPjK6%+Lrr;7#@P^QOi#hvZHt(TF`J;tG4RcEm?N5DrH# zgqn0n|4k*)fm{TcOyWJE65{AiCuikPeH2mY15E+4P6B`oT=73t>?+POZE~l=1j0HL z0ES?tJg`Ooi0f_Ch*=Z~6r)R8MnGPAAQ&x_#*&d$#|lW{E9n^39Q|?{MN}KT2_5@P z14NWTJoH2RCNa4YEQD;=Kr}HQ5Y}GM0Xk5P2vb!Qf@$i;@~DkH4Uvp?)FXT_QM*;y zV)a#T%ak0Te{Mnx6h*j_Y)zAPP9> z%OpfK36E2T15xHkKMqVK6DVIH!-X`2w+5H^iZagNj8FrYD!9X1gh)ex??Mhv|5a7w zA-Hcd0naKmq;|~HAacM!>yshC4#HqZKpgFQe+Wh}Bz0OPJ*EqB*LN>;c3>D+2b>7e zfL68Wij`u{*cNG(yah+7Ez*3k(N;;3_~?GC$lwy7OaBF4gr-wy!Vv~ z4=2c$yfWCE^z3?CHen{%)hc*d_$3c*183%}vg%DI?2~<4n6$t(YaMq{LiJg*ZNj!T zU4@B@LJ->SH@;>u-u#G5gVS}XEIC&RfRWf>a98Ny4FP7ghNDV})hJ=D!gQN>Yt$Ft zrY%QSC6d&}Y(Q9xNH$ct2!*X^C|HSCZ3WVnbd-Ei(p*W01mcv8IFgds|A)1B1T2nv z>r`7^7?3>>TF0-Zz@l@xws93Jkr$bfHETZ?xvCr(utF{`l-2C&;~@~qZ~-HeNhy#& z8M_vBXY)i-eFZj%#Dly~CPIivEMv{?f|a3Si1UIj{+2$5l5cS?FEHtk_kt=9qE&bh zl!y6Qi3))!nV8>Kl;8K0uCtfGYDrW$nWs6Zn#|PEZ^$Mn-6T6 z7m1tW16#}ajL1eXJeZ29nVQ`fp8ZCWI}4fT8K3hRF|2u%_1T~Qd1lmkXJ-$f>q(&L zq@WX8p_}cXQ*EIi8lt!I9^E7IqCk}+dMq0n=`fn3JGz`S8ddJu|D#8mq+Y<$jf_o>6NtEbFC9TBrAspP4y+CJvp^E3RgGaOldD0=SWBW{*W0 zRZcosmfAk()vC0ZS1@j(+bNA(`Y+^psCB>x@*odu2jL1}lLzCTaO9$QTCaQRt(jVu2#=wzc>R(M0i?4e6XTbyhMn_^s{N3LDGO$= znsBUjMtg8Q**d1>=}qp4D&t49FZnB++Nzes;BxvZAbG`-6xj%4ip*nOUuZH+Dzt@K zvTTTj`9dda!XeVvBaY{#2Kkz=A{G_rl(7gVIwa(JdYyW?|6d4~8ATcBCbTO_iflw; z2ziws!|wScd#}6Or7(2VrdzHArJuN41DN@g>Jit-!60;u^_ZybF}L>jv9Dr;%*fL``C0pD zM$W8cUCh_OjmJN#rnO6}1tVl91jtjk;fSQM2L&gW+`FqBsQP-Q_OgFj^m6nDXwr4K z^bo2)uE;A*vh9q=>1xv=kMY_l%}2$>VPp1?nwI{}{{X_xCmz=KP|~Wg`>x%HkCNB$ zvf9&5^OQ{WDGD6Sd)v;7X-*DZS3rBe(U?Lgu*}~S#&Mz(AwnRG0PyBy%d?2LQrd)v z0*$ikTp;$rsW?{7C^-+n)AJ?}1@42twr=*9M|Ygxh}z8tF*%toR~xeJSA->GF)TasEQo3*J*f9tWJkInV?Deq(i}%)zXkakbUrl%UIcz}Xe-EF zoj{^jz$FT#lN>Mvf`^1r!r&>F9x2IlFE%Wl5?Q;ptS(0{-8lw(6S?`3S-x%DyJDvu;{jO!gF0 zyI0fa5PfNgtpzJ&YfC>T*=qnr-`FK;QjmzBK_FA z@OVp-FvoNDcq(yOZ9I_zEhI$9KelSJX|lxb2OcEG6W|01V>_|PcSc3@TRculv;ks{ zz<~q{8a#+Fp~8g>8xBn1z=6Ywc({~lm;n#PjRF(&2yigK$Al4Im^}F~BFKay3ltR4 z0|UpIG;7+ti8H6pojiN`{0TIu(4j<&8a=u(qQsjP2{vW;6pzvx0dNSYp>$3H91(Ho zfan0n2!vI~`q81%s)qytYTyy@m5Tte3K8hIp|MN=A7~x$SQ+tZ-WzdCzKs&MEtdd1 zROU610E1)3R~wWhY~Tf41RZ+_|9*HtKwhmQJFn!@G=PyFN*y#9pmM-~#hx1|@T_r! zVS+FfbUx5_Kuq1PTl$eLd_ZsG%z<+;+|$)f#&7=aSLmJNH=Gd=q&fU_lsM*HI1wC{O@y%yFmQ2-o38 zT0|dBC;)g$jrSl(0pt*#W6=fR-9+uRHPC$ml@!rzbI4WN9NHZ>TLAfu5a4bP$)-Vq zDmhplg-I>dQFZl+CO{5t*{GC@2Eyb)M+baV-)sObrsG6BuINCHuJvF!k zs2zSGlGh`3);XB~a0UgS|D$kG@swpwsBK^n4`!IL#~y#?;X@u~_>dVxS>h&ul@yK; z8ka=cxDt;rwdkZkdrG;WS(N&?UWV-vs9u-#O(*AQ22yCDOf=?3B6#N^MQg2+`gCVP z84YFJoG~7>Rs+J`iQ{K;Zn@*Ewl2$Tv(7#XZM4!(OKr8*7L-*@dFF~xRGZDwRcl&t z71ntQ&=nH8Q|Vw;b>n^&z+5F7#Km2Y8K%Q|9_YveyaN0sRhISQ7uZjWlz#A;qN4OC8Ro@jTFsITO7b zf(9X5K&o~}-JYr#W%*-ZX9i4l*o9vX>3RH-*<#IF!bxVM>h+NIi)yzjP@4NL1tph) zXC3FfTFI8cLuUPyCr+CZ6w#l7{z?3yoGru!(A#-T+N_bj$he#)6OFrpQCSEis`0K_ z(g57MmTKe5(#tA&uI7xK_v2s7K1;nbbrDpO_hg|od{8WPR-` zpaBnvzyvCA|A7o_phL1XlivN0UZeSzjK~!qv5Wv+8^j-d=<))S%>{!v@QMxw@RhpQ z>mrOX%L*~TgIOVf2Ryg|VQ!F_ZLN??eQ^L@AgC1@+VC#BYlzdHa-jfN=|9K7ey0U%zWNUpLcronpu^KMPo{1 zi)QAjOSy(V>64St==eP%K}C6FTgs=V(njR8Wh5{e&(ajYGq@=yO|kJ}uL?;t0y?BY zVI)$MSceB>$>?%h!jXDjb&#^9ibsj89^ZDuwb{gOJDC$5mpDhqt_6}K$V$?63?s_q zkw|R~|7acODCD&bp$=k#)Rb^M=#%%^v&a0Wd!15|1Fz-Ho@_II_vF>DMpl;xi{GtfVrtvwYUywqX3+g^!_@}k;KUecGJjMBYBlcrb+-!V(TRf_DqgGrIe{^9y!g&rKh}A zM{;q_*a~^8P|EV4Ace|q^jJ&7y-jnWWoBpvyAfnTFlHhX=50XfI%JN=afY>>W7-Oo zrqZON2Jiu(u1UN+XwpC`G0ba>U?mJ3fIUQ0fONWBQ%a%cY-!Y#LNkz|4RH*+!*oix=!)Zm7qL_af3`II5SnK{0uPETf01S&)W`wMwjTXRfol%x~xOUmhsl-E1bmm7| zgCpmZA&zbHZr!jGn4Gd@j&EVH9^>mXj!lU+fr$^B(L`I`tWj+&j%b(%+ymfPNJSnP z&oAj1D+k552Tz0I$GFE%adm{szyfjscDL3x9kw|3nabc8TR)Mo=WUVAP!3ppBQ|Hb z&!D~Cbn)yl>prnIq8`hb_UEC}fjZXf2~MXj9WwCq$I85f{~zy#C5J^NyDT7$a`UEcoP3e1+C}zq`MoHL+Gi3T2jpf@h|C-AFeKpmlbRV4Y zJ9lz#U3`)gAiHBMIe|w~WCQ&87BSjf+D`l%^H~@701Z4?TRfc52w(EFX!oU;i1#9N zyV>8)euC#CqhD(TXaeuGt5=SAu*Q7qxkT97KM-I{&!NKAmm%Gs^y=SFB&r3+n|mM0 zwbQ zWrIa%ghz;kNq9gWW)$9{bU0Q6QRph&!cs6(XN7M_PiIIRZzwy&GItg6f{)=QotHW%6;VX^b91OWVyHxUIEdV& zBC~`gf+h=;IL9P^Zi-Lz+KGY2GL^U*N2;^iKSRuSyPLP;U?C#ho<-+H?IA(GPg$$L9!gyRTXpKR)Oq)Z9Jh6Zb*ewB|141Nz)L2MeqELk7 zg~ON|xEEg;!auYqFh8eR*r4+N%hkU4% zotc@Y=!P8Gk#-4?h*_36NSJq-maEB{t?8Pt|CwBTId7k-nVUJ7({!7(IfkPNo4x6q zzX_bwBAXvJm2_z{ElHJE*pJD{oVKZ(QTb6fwwzd~oTaInW{H|e!IiU_EQ=HV9H$LD4BdLbxrIh+_(-ke~c% zoE=G^)JaWE37pw^6x;cp4+^0XDxn1=p62+RtVo*Y33KZSni&a=9txt3IiVv;q9uA^ z<;WA3$sqQq6n~;`7iv>Jxtrukoc~#!b(n%i30PODnYn_LH_;lVX;BQ?gx5JOJ_nJu zF`tu3kRr+uJ8D34D2OIXr8-xkvpFPB|EZxnn2}mqn*|!8&`5?q(K8X_r40n77sVDr z`YdUxKq$BqYdRoe={sy%rD!T|7WyPSa7}p-1sP(W__?I_eaw(QviifN?dXP8nI zgy~wV+?uH7sgWAhC0m+WJ0Voc|N1`YIF16zkV(aseSwbnrp;tT zp!=$uPr9pw`7q0}9ENH{`07*v`j;f@EM*#)`s!fPswu&GE%L-b%Q|6~^Q8XQh0C>O z6l<{v^sT(&T*QMYK_q_N)KxCwmyzaw$2O_;w}_NUZTIMH1yEk`Vk|)i9KiOp%1N$8 zVvo6@A%ck}GCG!p$UG-YGTEY-hF4w^MYFfMu?PfH;KooLA#~)Ta$t5&h{`cIP-0D0 zETtM>E9qpV7!inpiShEH*J&H+bPs#}y3)T^!w6$6uMEHHTprPn`AKQJIY7DI^L}80z08+7EX-(*CmUHO*2$?QBvK+1A3e&H!xCz%ue1R0Em%}GUfn+%rJhZ zBUAQ9W!w=YR>oanLR=QfQ`Z$l2NEb%bdgCQT-Pt@ILeWH$BBPI5}g$^bfT=XTfxaCr52j&LMHV(k(@%QD$LUryl}A+aM8+`^CCZG0Cv1Xk!i{E zRLO@na7ip43PQGIA#=SpF==KY;G8>v_c=*y#Yub~%%@1P8ku5)R-F_;0Afsw8E__Z z#q;@Q%Zt9&|1~Aw2hf{G8c{q>LqjH>I?#HzXJZn@?-M#WLwxQWt5uw{f7#G{R%Y*t z(9ncPx985A+8`bzH16RNuc5n2v1^@S(GZOs0tz;+WK7xisq&T<=UJ3Np`x z>S|MkGPoM0xooa+>&0C~LK!4}U7-MJ+!r9E$n`RiVXMWCvAR>&Lh%#4FOZJ^JI+?q zV+Y(AM4|(Kdaf;Y15vOf0Anu=5V;bfEZBT>2?#_1pansi$)n2I#yrRk`xc|>Y?P+b zomay3|6xD zn9&gcV;30X-0_jvN;+w82Q;@)B0NJixde{fhq6;8SCN)2+-t=wc50sm5`df?*p-Dn zqgYK8zG_=NmOC3`T`@F#R|tVS-6%?N;zhJ{OSyA6>HXaWp&Fpq9RM^QOB_HG)@WH% zJznD?75X8HwHA-`uKd)PbknE~P2e)&s4wv!N8B5)+W>skCc-rq0!E!)<$>VcV7E=7 z1Dv8fjZJxAC_}3dv!vnBvmoIkCllOAO`%(%k|EDSJ_FDhW8x}iqdAvlBSYDU8Iw1n z|AKr|G(Mo@PFcH3KuEB#8PnJ5Dxq5{SG`Ak*W^;kZ$&HU%VWpqZV2cCfmHPJvHub!4FE8hakjMkvT2+f$!)rdJT9v& z=jcdU1vx|S49Q*MFkfLq9uoir6XIl3M42k%t&ZC?j+p=&>p?fF>_Wa8^u?Jj+#ysF zw(gZH1{ZGr5K%zv(4k}kFzO~T$ZV_?>4-y7G3Yy@BcFTF=_R&WS<(g`BNrpUL?Sdt zbK*OFXaACr_>Is>>uQahUB)a?O5B12e`=7G@xf(NV7WcASG|EyXj z9B`a7B~s(UX0;J|<#HVj9m$5ios~(&>LG?UU9&_tkn=nu(NJ3s5*1iDGh-%JL(`Y( z>NySTI;$#t3SHQw;|W33k>w<~1LW0VlBPrCnQ~_DlROx0fcSA%k^|)jAmyY3IKvk? zo;7|1uU63Z^A2T2=HeWIVe=G4=4GC(nVUc!uvA?kDm!{EaUB*lz-nPX%@=7ICyygj zLl#L(z>mzf9}DP=z7cET_RX!Z38UzYtZ$U-bG7%>s7_d%X^zfbb$S2Je+<2okXaG|{tiRYst!$4xZItoc z!#~&Ipry-M;Lm~ec-esFaqXc*e8FRq@@4z(q>!Cimu}jC1X`cEkSl-ctBj&t; zT^Vomp=*-(YVjAsG@+Zp#AST|G2q11A6$GgQ16j5kt$&v6&E| z!k+{O2vjMcDMl_vbM{agfM7zL8lGxUxfLS805>NJfEsisShi9z1nmJ;DF4r}NPE1^ zxi+Ulvj)??7)$nU!LN9dI_T@xc0EMEp z*1(}-pohm4F>oPhQ^85LlqJ#(urMJH0|f){Ca42==hk=|l7;wNw}Tt1Cvq()U}jJq zS_9}P4qKw}pqz<2fc-hM>E{ld=LG#ihw9I{!EdLWk{|*ebOo>3XY?M4ANC%CQK88X&XC47-cPhzjVTN8gg9(EktFVk^>ttCVC& zu?PzbOR*!l@(HgWEqcfSsZO)1u7t|0XfFNY0t(5@NK^>RFxR9~tmLe6i;Exw=;}z@ zwqtThp3W@IDFIh6(rL5@5o&-Y6gYrPl zE5y=Jg|g4O{^PCzQy-+YR$Fh~h$I6iJkkdesR4}O=^z2nV$!B%d$iFXV@F?*%5jW$4JoVVaA+?{Qx<1fjkE2Iih6VEuo^(q(We#)H(RRlCAy-3-}6H$a#ww-tFj_=C`fII#3{o6 zh$0%(?>-f*^}OS3b|`b_LwL56!X#I!go4*y%xA@|*8e)5yR#Q#Jn!-V+Sx%>h*&_k zMikt3`+6BssC?SG_8)~xSXrbuzmV}o0hY4Qp%A4q|5z_~Ju!m(qLYKtm~Q~K^HN~K zB^5J;ZS@G`JVMUBt?L!sEe_o+68^%lekcd zipfjVvIdC4i!h8;9GMo@QldgOI_y4Wqfr?Yu%5Ay3`8}ch|0LYr?6pcJu3rM#&F;{ zABvGN4Y<$6!lF96HRlEb5FJ?@i6~b^@&-5}i~rNOCcWznEj;2102glXNj?pyP-CRh zby5>ckA*0NT=Up0iQ^srl!imEjE<1zl`Wt^@{kRPjde2FvxqpaC{w9pG^IIBYF4v= ziKESA9;QteM&v?flOz}J6Tcb|1(@(5S?7$%M~INjbDs=l&_>W4%DoA{vq@ zV?*NFi7~WKW9p}F?K)iI7T35SDcplDB*V;_HnpsUZfl2x00bC~vUv?&c!uJELDJN= zY$@U_t>)gzLT1 zSa!PbtsZ_b%UC1I9K*n=S;z8I29|^%53~HMwr#QE<-lP^eXdy4k(E4XTz%Lw2DWWrQ!*s3EZVc%L@loz4WCI@*0Qd7v0f2f zq13X_)0)0Chnd`<(GuF!pygB0*!W&TD$KBddh)4dJ!@KjWYnj99f>(SRvRDMGq;{~ zsJV>OU9YOSf*T~Uk1e>EO8+y}o~?DX9c1W3t2xn_UbLiFqixPkH?!I9Y^5QsUlfDe zPbeDqfP`)7x};m(e&Dvakxb)Tm0H^O#&^E;y>EWk71(b+bH4>XaDo@y;0Iq2wOuUT zb#oir$9DHb+&ytf%Uj)1j`)rueqwJvy0bZ2c8BS0D|;i{P7&`~lgc%!}OYY)26Eq>v*D>~`lRy)r>p5&Gz zsMmvTwMY7npuigdu>aRYGuL6pUIQFcB7wgvstT!i#hKokqDaV7yM(u26Vu{i9G?} zg9DH-gh8158m|hQKD^j8iKB`Ai@T!Rt>Vi-y$dW8tSyEMzUD*0d5gUg)W8809P*P9 z0Q5ixi4hrDrvKfeiY?P9@$gJHd_+8yN(NdwMznJhTF+l+#NaXxW;gm@6w}!!~ro#Zb795P*VNF+PDCJJg=c zG8a(M7B4EK?E*d#?s9 zK0;)^7Ge}*x`DBfH{+uhOGKsypt30FL<4A!`^cpG5E4E~h#i!|hRC1oV4hZ7B_#*pQOJ z5&tBi649U(l)=Z%=$f&CHw?kY^jaQ45|o;7jtvnVy4gO&ypIu{sqR8$*xr<}|r7POhI57+k7#WKP`i^$%L}J9u@8~sg5|ZmQE&m#{ zE}FT^uJk^wbkFH%0Gc8@z%rfHX#g>l(bX`T?rZ?WtO?oD0P-^cxkQopiOmrZ!@R@* z9H1cD!AJfeiVO+OPJ}=G+!p_An^_S+x-o#=;1mAfjn1JPQW}spWz6-c5(P300THhN z1yqgT%^O@g3meYoAs)-bN3QWd+3{4C64Kkv;P^P5^xQU zWm3`K@IC>AQy^I*bvzQ;s?r^!O$5NC8BxWQDNHG)(%~=~(p-zsAgbo@a)*+RPh>RjH6QbTh431ihK`q&^72Ci`$&L^J+k>XI8v&6zwt8uoPHEPV zZ8Al)E4oEEuua4zOj*(@rOen?z#M_C^j5!RS#jmUu0&TE62m9uzW@ASS08m(*MQf< zjHS@Q!_4ue>MGNHtfl%UwsZh#WD|0xeh;9eAi!p;_txz(L|5?ugj4m{>os zE)~(I=2!@xy$)8=5b`6&*`1=*8{4qOTTd+1-aO6N*vx?_0GK_B50RjSt=P@^kT|jk z8dS#K#f^3q4k~M%O@vaFETQ)?)%kE+Tg4ataf(4%6$eVsh>G8o`j(9JuglHL;?>{% z9h|b|h_f{U0}X(J8A7KR47lA@1-x`T^)bL zk7cY)((S1n&;o=~UFZB6u=$WO<>4biqjXW5@MSwNWZ~Q0U9kL(*yLGaqz~2jRB+AT z=Mh!@1y%?~JH3Unmc7#?b`Ak3-4p4;$75puaM^`OVQjh)bTgXWI6E-p&Y5AWj};5A znJlp~irs;TE{WB+cnzA06aR=7`9-LR?2>C_EAea~`Dr#Y_T*1i5dX~;Bj5vzw66;+ zyKT9R9wIWYI240>CF%$r zAY)(s3A)?`Os-)?8X=kHu+l;LN}+w>u5cc)=%jQ3!~b~2jODl(oq@OS{mLgMM+cBg zp4v*+1ma0ur5y4u9MFQYvFGo6DAgTI5RseMK$$!`6)~Z+AqFayKmcC0QY<#2y72%Y zog3y-4)Y*d(xkGPX${;ADR=~B&4b_)l~Cmk=(0(})WDD<#@Y4wqco|d;H+6OIn;D& z*i*^W(76wyRULZj4Kc(~OR~$S(TnJqE3vvEshH$e9SZ-tiu;5g57{6z9MTYp-!P#- z$by#pvW}t_qcIi=XYJ^(2J4RyWeaH}jxy`_!?4ofWHb)zTe;;S}`JP#BYX=ulKk=Bma7irWj!pox?z127 z@gr|X9W~4QFx(oN_CFM6rD@;@$Ew-|rbW(Rw3p z<&xGm?DA?Q^EZccHf(b@kMlaWb6_27AYVRNHla0_^C~~DI~Vjp2fI0kazaP+MAy7L zxAKs^#zRjrQ@pl8cXGdj^b>brJr_M$5lS_V^cWPmOILI%KUqs3^;1Xn*E93O0pOQx z7eN207%_DIuJjid^=i8D1>Qj%EN_@mYhwG4++%OgKw8o4nA(et3e8bboYNd9xg>TvM+A@folS7pNAT6= z0i6*>)u9o;WMQ!oM$`;`I%%ejj0!$2Y_{Lo+!yFkQoQQwwJx@PVIr0cfO{gvu33b_ z+gL@x702t3l;-a$jYRAiaYZ0g9nW;x$7Arsx2rC1IK#((fS4n2Ai;tL4cJ1%vmoEX?U*3tMU!IfGRz=0ZbzIB0wnYhfQJqP4OB+q@$;uu9XiD7;4wI*WP~_x z6!xPd%8dYyp*qIOgGU2|gat&=af9>=m8(l55D@f*Kmj~bVtx@IN=np#4e0p!dd}d* zH)!J#fRtbXEn09S7?^S`L!1H|@QCu0ZrhEN0bk!-I6&3zUUgnaZ?X4YJku3^Hw-qk z?eYeTdk(6@!*l_i6AMru9th~*mwOJ#=74r(lyOx}O|{3DgcDL&p@kQ&$DKuC*`!xq z5n>pkh$E6%qW_5}qL`wJE3(+4iwcQE5?<0d&{PgTVU^=l%N5j>QVI;1z*_GWFkKHl zMEBzyDs|YTPc)8z!FynFc-LA@y0ws5O@e6NSnXx`qL_hcNKusocG+W^FAjj@l?q`8 zo>iQIn43Vk1*Z~1p*1j=P@fTZn*){MFfewKqDw-BU0jauBe*OUwiu-|or(Kf1#fX-K@mg;$+UPbIN=cYoXB9|PYb{=}%k_dVRTyH=* z;A?Jv_W2p021J@1j|C}5)0opzTWyMp&gwvS9%{L!wcmmpuDIipTduk1mg{Op9irqw z4@{j^0RL47`8X4r#2Hc53rF(jK!;ih1R<6fJZY6mK1qA;mfn5{BA1J*39*;xwm6rz z8-mFx!`xb{K%06d#H^e=5$YAIHynqkx?rW`7^0N=iY#d?`@1KxI5kkJV{}orsZ}Na zY`}c`iMMmjwh7v)eF5MQ;IPgnywGf5H9J^oAUQg8u6e;KtC?OKHS$5Y4#cX}^b(3w zaFHblDR{V|<}wc{>l++{(H;ac#e4HTuHF-A_%K^=GTgV}ha;Z2;)^rhI7BPgbyi9T ztgK{BH;t+QcSiMV(^Mk_yqvUA6&%&DPqmd+m}RYg=ESc%e&OGd3m#bEEUGkb$UvXn zzw98ahsmFdhT0HGoh z!2BSvToFqwQwh*dsG~85jSzzoyWr?5=(-QWWr7qWV#BQEf$h|YM;7zS+{WTLpoPa& zg-V%q#>OPj{SSGDiB!*QCM=b(&o|Q(%5+|a0HO8nGsyA-7_kBs=_O}{WdPrwivL1B z21<=C3fv!zLf8;J4R33&(wEn+V@HChN+7hN(Z#GHHrqsxWIGuFt9o=P>D_=gUnJmu z=IAp_(s4n=vDJA1iNsfOP>D@sVz*#v%Uj|ym%7}ggbZmWw+w&}Ey=-BikYu8T?r>{ za^7EtvdJIWW=2wg}fvBOdWfyv)cHCvre;O3a(qGD=feX}Rl! zk}w9q)}velI+V4hWn!bBV|1!lUSUJw8_Dz=E3g^aF2i2=$HLF_PD#cE1}U5g={t`1Y{*c@?308TA{r~GPOYDsmff<@;A&+Fdz!v8nE^7V*UzY4_0 zs+X`|LsA#{N;~}mc)m6j5y!?!S(KqHeiJz`f(4LR6^&p3QYCLwe0h;b_A-hCuwQMO z!qkO~KsikTPfY8=V3hGTE?f|=Xq_wI7mFypDh@D=Yi#2i<2ZsA{^flkVpSQ5IB;A0 z@e&!7V+rmUBn3V)xk9Yq9=$1v(4CM4uY_OqCalEgT5(lq%j7TjCCT;$Gnvb5<}-gw z%mgO#m?37@!M+*Ivy?GhmMrHxLwIqD#512^s%9DWInaV0G@&0-Ul*~N%Ip2W>!LjRFIHLF|gYI9v$$uxd7 zt!r)Ta(y~Q004pzgurWGk7Pn%ymeesZJ|{YJK4%!c3fiJW+O9Oozb2)wfU0k6D^<) zLI{dTc2I`}td}DNaB9dv>f>R%+SqWGq+6>xYll2GVNZl?wd-wfJUg3~RtmRypbeI> zniiz$wrRf4RRDmSh(k}lH^Uq55K~Ji0Yc~l5W?z!It07UjCoax4>{#d51e(b<99ki zLLTNCW#JBAIm_K!@NfR=tsn0<{RF;GLkJ$qlMULQvCJC_%~FCTc=~DpS|V1-<{}CH~L-qy@M<)00@29!LBJDdm$XxGH_+L zhg;nHU%hK&LH3Igm;#;vwCN~7>WOlc|EuB~QoQU09fe2Sde8qCgl=E_p7kAfz{fUf zuuVPr%is3Z&oa|)(HvkSIsVI)>ELF4>_|+ftpscZ1N1ldbA^X?4?KlPOkIFnmuH2Q zSkM!WfQ(e|5W+D>Zzz<30MTRhka1auSfz=gJpWSG5#ZJAo(2E_j(8cQp+AyW<=2oyDwBeq++Yy}Kio**%X0)*lRl3>K8pyQn48EVzFtqaGvVBx@^49Xtt zO&k!^UdH9kUrY|@D8+l&pXEIYE9FENIsXWAu%EwtPQd7kZ<$mMTvFF<6O(Nr>v(Xhbhe4DW1p~W#UXDH6A6_xJ%%)iO*@|R8r-Nq#@^3<57;^8-~TC$l=!Y zW007Ybzt7Fa3GFY;t58@VuU6A=>OthfQ|``V*9yOKgQuhb{+-#oCXjiaR4NA*@Z&7 zRezu*Rv-lX{YvLmp5+lBR)iKsHf2_tUPgXloe@?SR^@p?CM~^U;Q)Y1K3%D$1Rw|* zmiR=JcxB}Q%v|k=4p9Y%lvXm@L_Ug_5Qff4P}7#orb0DI0Vsv&*i~?9(}z@9obAn0 zvR!0WCPa(?Gxo%0W@dCsXGUCQ>s;CEgc!Pkpii2FFNR)Vw&j4NreJuYIpUu|3Ql)2 zCQ8m>J|ZR^ZN+8bCMW`)FLLF91fX|)Q(qcZL9(Y5a;GnP;*TvLcSfRj+NA$|<$|Un zX2RTqe%^P6o;NipgG#7_M*ky*Lg;j26?F35E0P=+?11eNz*8t9hb*R41mF8aPgMHm z!5~E*?hxu|o+xUC=eUrA&FECv>R^k0w z;3guHUGifmA|qVM8(t(uCT%BbDyEy>qfdGw^${tEgcfa89tIG=c0pDh`JJD7A7y&s zh0@ri_SI!3rG<8CUTNtna^yyMWaNG1fe1kzh+6Dv+X4*RmWbCi@t3xMm3YO9^6_o)8T1AJpNk)VrznakxvRDpJHeTTGnm`g^9Z4qpqH&(p+*HrKMIY z$EsC;d1}dSD#(g!2eG0FUSA+hoJrE&4+$JwWSw`}K?grp}YMfV0l$wY9|n( zP!jH2VtEdV&i~cXLY`f$ZI`BP*l~*JjUL3r&~SPVb)Dm05gy}ts@?8e;Wg>nIx1?R zsi__=!ip@)HtrYt>D`_zl0NQ+My`a0EZ5@F%CfBG`q_zkUU5ok+WPI4W^TkROy)M0 zT4dq9l&<0+Ckhsucu7%!_!gIGtLEx%8D3@QzAmO-ZVC#o$*Se(o^GW^UA;0T*s_lC zGA{B$Zsi)C^m6Lx5-+Ik?o)BD?^;PiFkZ_}ZusUG3sLR!rta~A@6&p&lX~rBl7!P# zQg0|2QD$%bf@|+C@A_VE`R?!V<}UOSZE8C1$TIKOMz8f|D)sVM0e36_qc4Lx@BrH{ z-*~8o!vF25I&I0xE#samGBI$5ZZN{aPV1`f|3X*=^X~+!@CqYY`?_xgJ8um4uLKvb z$2PDAlk5XWs1A$o2g5J{AFvS7@C^6w^WHEEKTrjCX8L+>;_B7lvX|(hQ#i41hBC3t zhH&A66ZTE(8j^6e#IEcj@feeFwzx2$rSK3F@fv?>@TQ*vr*RP@a2sE4IsvZ`|FHV< zaOJYG40~!B$Bq)q@qH|SU!+}e3g;7ZpBi#8nwabPa>dND&?8H6rDiMpt{EU}@+Jq; z8F!=)V^D?mu@zgc;c=Cieoe*R}765@r zy8o(oT9MVyd}IhS zi^)haHS}T9uRKd7 zT0G4}tMprJZ-@Xu()n61SKK>;+eRn=Gd>WPoa-gyv)fH^_wDnBSYODr$*w*N^U2&8 zWI@bYhyy93SFqSZAE`t{p%+0VNUwBOQ|FWZG*Bn09G!GM`g18-1UN4k!ZbAw=>I^| zkR1L5MpTmuu0EJn({;A62-2CPNZOvS@n1-!<>;7wh@sYHShoDOvq(81+cHCIq7M0weEdfzsv{c`Nho_o_CucdQ(9EJ1c z#E}dkbH(aZ^XN7GhKJ!aTC@pGCPhxfWUFCwsowLtd>FL&gn8#t)!{@_#tkrqs#b|06E5{B#?0ld5RGT&h&>snaW@|xloKoWDtsHs1nIIx$(%2Pto>o z9!XRlNQLcT6dj3Aj-c-Ocs8mvQYCNUi&|uQ_ z0l0bFeCLt zjZnwz0Kn_*K%%Nd%qGAXj6qnr^QfJ~0$8|){7r=ARDk1+{?VVN_y1N{JB%pO^SB`` zgy;FOCphV*UumU;76^p^KnI*`bm!z#pk#XS{L`P93a@;wpa{|dRmN_FI{=P`wj<$6 z@kDC8QDxxD3$TgDaGQ@BVhz^kVO&7*}oI{;Gy0EQ>-qg-AiC4h`axFaPav+a*A>1AIp9rAMzuXXFaoj8(QX%Ryn$K%iJ^`2V6~HVSn2kFUfby6;B! zsLVkz(zEn)Kihj@Hx*Vy>sU*nM)7-hr+E$BMMiHnbZPUWIDOP7Ji}K=Ndh`NE1lBe zUdUMd0Z_*X)X<{)0Y*V9v(kuZBSdonQcf6OxYc{=5;0R`&A5Jy9)j8wWb{bZ-mx2k_ua?$JyRSGBP%T!e zpo+W4jJF3+WzBVC2oOGbhH8uw7CL%K!M*<2jZPK0m3CN&IfZ&4AAYaWQ79{Oj!&9< zB0%79FmO%{f^!fCz!3mpLxckzjBq%yz<>b~CuY>Rk^f^yj~_vX6giS)Ns}j0rc}9- zWlNVYVaAj>6D0ruH1Xs#37}3NAwU)Y;IcqSpFRgS_86c6VFo+_4ltY}AnFS|7%P0&MXM+Jv3 zs@02h@xY)v2JWZ<*1>|SV{SSG0I@IH$ermn$VykiXuATICJex3uVKP~xx_}xx;4iD zuN?~LfdOxC-@kze7e1VLapT89)+X8aFY}GgM=Wdz(ZL)A(mU$7!4|Cn9^2=>;H*Q3 zRq7G*W(>eXM*tl>1aKj5)w|a91{@*?>%Ku#9sh9eL+HP!+FPxR>Ci(6wGkE^fGf&+ z7)Sw#Fd9h!EqD_k2OK8rPN3>MzyU7nu*(QF=O|(fxfNM#(Zv^Gj8R79RD5YHzno%< zqk-xG;vfKks6&X%Y&+m03Aq@6Fx@V~pa7^Igwg>42ntKK7X%O>fB=;2&pM=%T+6eF z1~TieE1^SiCD~?NNjZ_!MDwG-;&QOMjs_}ADU5Wh5TYH%fGjeIval=x%qChO&;=f3 z^t^;Fny9S3u*yoywBTaXOOM|4XoM}(QxCU>ZcCueQ&CM-)m2$-)um2Biu1-fNh^^$ z5)0F4p!Vo1aJ};e;(;Lngmo{9fo>=k)c@yr;GqElqFC()9UzLrK4J6Q&)J07!|$nW z{TOgp?F_VT)CC*VlETpnIN;I6BDGBmDjm>bq4Px4QHO=pb)ZCt1{!gr8eJ{e;DZrP zSmC<}Zi&vEa-5Z;p@ishhamd^f=JgQbfBvdl+22^1e82rPe@O;E?z%!;R`I)YRx>vwB!P{ zmoMd#Ix!an?7|Nta(&-?NyPyNUK0p>BC`SOneO9}PhR=u-R#@Oha(O(qoXl)%=r8; zNK;2Av+o}J1KXP3`{u|8I%u_}XFevLo%e0%nQry8+=g^xOvQI~B(-YF_QyZ`iS%Z^ z@Z3gVB2j=vHZ_x_#V3D7OP~567(oe6&{cNBnO#tnzw-$&G~p?q2b<%b!!7QA+yNoW zVl}x0qA+hBKwJZ~qZ0z=%!K1hod;4k61)XaF2>VM0jFoD_EC_CMKt0OS#-UWK<|CY zfrwC8_`&i?ac>h#-v*Z>z5giwWqMm&lNaU2zTq@cZ3r~UKt_d>4GR8DM%tz_9KcL=e`bupH#geBe#CPv|Wa(&Ax zi3LR>q0J1jCB7^P_j*$s+7MHd&2;87j|WVgV9}X_oF9UisjG-+$!)`tCW5XBO>vHs zoC~uFO_&(HEM74-;A>$awI@r6NpY6)G@m`I_{w+U^9A+PXDTshN`B^(eC4IrT>cKK~G+6}9L^F`Ch*u&t8-r6_gINzi%H5`gxMCl$TuPg|1IqbOx* zLD%Whf_-zM8nx+7ahg-Q(G-0;_32N68r0;4w5PPp-*W)410iIg4*N6eEuXW+*-SM* z0>x39M9RhRoe(-&lqw4is>72ijHm0Ps8G?GR<*A6BxUU=Tj3g4xy}_QM1AW^2j+kt zQAY@#Lz7iW#lYCi?3Js8>Qzgc)e>$Mt6EJgOk;XgYN86Ez)>hBjcGuRs!@j$rR!%w zt30Sv~ru*LspIdzmes;-?bj*yL!L8Et5R8(jBo)?r6Q ztTr=d6Xg;G2>-lUEMODz8u1YJXo7WTL7+?3DVEl;+STd?Wwpu_uJmA)%_3;T`&dgh zfVjwl?OCQJ$&^s%V?ZR8Vl+cs;qI5et@`aiYpLGrCJ~sqJsP0C2AHQgFHZ$XND$%& zEC)c*DSHX&K!T8A2v_HCTM5{Pt7BWJv2JS^z8(Ms5Cl%PHDJ#5u!_NU+WyX%#wxLE zan(s%<7%cSLJ~s7AW{c6h84hDEE;`0U_JyA8M^_6Y?Db#WW7nbgRJB(oWT3u7@0S+ zCM4|<12nxGfM+=?M9GP`a=j5SC$}|r^P5}r-&&@(yDp+LHYp;RIW1UH@shBD;PP4& ze=G=VIseZvxex?9_%_5Qt_}e7P$lYsn1SFMG;aT!5!U4or1XO$oIxFG1Fm?98pyG! zBgV^tEVUbxb0OBTZuTrK#jwuqWY7)R25#p8 zwsW`IQosm;YhEXSDoNX3xdkk0fe-wbGG?}y?>5Ky*(83f1wc@`V&GwhWguf11H|>0 zV32lZYNScy6KOXh0D#!SdI$n4r* zjt%eHjW50m+OTZf{443|Oule0RsQZk1TO)8=L7xbUi?MBk_A5+0BYikel*VjA`fC} zCoNLrEarn-45SGC=8^m$2tfulZe;+BAm;951Uv`7ydqK@2m`E8|G04AGHu$5ZUwC^ zB$6u4JVsG|&oThO)h1(R9Az<#ujPg;Wx^zlF)nRKeon=J?r&0TWV%QGh6(2mu+LcN3%jrrF^T~6Ym9(E2>%u!3;F=+ zcEBfItq(GB1WYDN%3@1)LqTRSX6i3fQtt|g36GxC3uMIl{ zFYtb+lJJH6*5fA*^ePNqvVO%Kxzc2FZ1!_X7ek;c9d zmd*+UPXY}qLr~rj52&W%NbL>r(ZjMa&%VaqmJdl3DHLmu#5PRl)X(ICKo2s5UL3Lz z(PHFm0>mzH{raX6$1&#)apGi-5G4{3k1F=Y(XZCAB-08MU1T7P!YG=GCstAjFfc#V zE_bNHONa+69*}8V5iY)hcmQJyhmPok@vr#q?vO|CkTEG+qy_N+3I7MecUA)`?=71U zz;NJ0C#dlnuMtj=a2vxcB%rWNX7NPS!*g_!l7uZLO>!-Ts~yKM1X)5+g2E;eU?>ja z9=RsL&O#r#hS3_$jWi=5E2CwWPXhozFR3t_YR_*L4a1xw5gGC+C^9Gh#v&o|!2r<# zW{~ivNxy0gA%aNE2grK#S4_Dx{(;oC_y! zku!X8LO84z#R5~HZ33?imsScMa|s3E$s7A_MhZYWYQT5sqh<1i8l|T~l4UNaaXS}- z%v35NFc9pp?@(9XGOsQY`!rL+9>pR%OaSblGczzC=R^|c zTr4z$4@4%>=O{w{K0-d%%sye%qFnPhrq0!9m+Jg@Ph&&*I%mM&ewv;^#=Lc!g zZOCE>uOb>b@I3_J20e{!z|KxClucE~Nakns^37%pacS^0Mg`TU55ey$G_24%GgfUQYy##j2lZEt2qj?zNb11HiuI4ilu}TG^pcR0k_=LS zaVw(LIw}pd3PT{zB2SnzuAUT1_b%^tZdXJsa+t{g45!-^gj{ms(AL%F@`DdI2P2-v z^X^Mc`S4R(2JmoAzVgIb?`vAMHQnq4SPAx~3biPea=xCZEAX=AoF@UOW@_GrsMcsv zrDj1HZ88>vlhEdR{>GpVlo6FH;#`YDy^SA%wAgypFk;n7I0IN(hgy|u63b65`;78j zF;EM3XZc82P0In8N(h|lu6XutwzbrJ71W$F;Qzd|Xq~p4jFGc|qaNENl2~>`jbqaA z?+|57!mdR7CZ>M+CTgFyY!zlk3G8UiwkFh8YR#5Gf^lu-){@B9B$SgS9AjzI7SrlB zQLz^1G}4Kt1Xp!VF=fjT=QeSd2W=IXg1U8@lD2UrcXHpRZ@=||RHZHbma-v&Z^$L zDyn2;%1F?47s_%Ic6XV#d0#|%Ve4+6GjCScd9C+)f#Y_mZA$ZF0Y>r1fWl_yE_=N7 zH>CHopm%w(cYWCxC(<`zQ+ImXcYf)2CI5QYZGkr=1|mq#<0n!RwL~o4P(umb2VwaO zc58}mAXZ~>%Pu;_!Y0l=d+uud$AENCZXOsZ-h{O{O?$wieLnPL+)KxBy7no(gr( zmxvH}iD~Z6v<+^gX}7HIVIvU3M9#uYv;0W4;3f>?Wa5MkqfqQ(hPEOH!p3z*C8-K! zKwrXY`4;UgLWEyfu6`>@beN(*V}L=}cbQmr?|6`%mV`?wbzM>bSyIS0c!x!peBaKX zfHUBFm?$IpcQXKzF*%T#?vlldlmDUViMRK?=(BPaGa(R#E!L0`7s|1~A$U)N!`P_~8>ExUCgPB`*{Fd` zgRPM*f0|l1IwP8++Ju#Qle22Kotm1XJG)uakoVcDh35bKPXGr35DJhL)vHYK6`Q>0 zXplnJ&}J=g6G5U7lKX&@RQ?vS%1+OQWJVp`gbJe)QhG&O)&*n%2u;%!uxNxL!XpXEY|$G1sw ztg4y3%GZ{=Ww^Wjuc?Ycs{x@7Owp?a%(;n7j*7Y|%EFOMBUy8!D!N0B&2C9@z>$iL zh2k4%K*m{>7&gYYpCw3?wP}U1+cy~W4kH6F19QZ6Z}})(g40>b5hQT8qR_b4BN`nJ zyCV*3E;4MwQU4=0l^+$U*a%PzrBiv^vz@92h8av)8Sv__N4>3m?oet>rKDF~)e#-G zM;%0Yuc4)t)>H&!d>hiO{GrLx2r=sJdrz1holsy~^^b1YF-@>un1B}H7o&=t)e z2|m3duM>hXbgesP@-PxnLJ+QPa0J)dPIUL0c%KQ-UCQnTy)G*5YYd%hYJ@?pN5xOw zIcEGLKvI07_R`Bh!cloqH@z=UylN6)xN*Ec$5Bx776WdZYiQfR^x@j5ab$<4seY{T1yKSQ=fPyQg z&M0!-i~sZ(0cU!WLzrYe>}zMSoho_B0X(ptRo(HNPu#pYhxf^<$%E+`!DVD0qlUqc z9<~+zPw*YGQTEIuYL+Sbf34$>4gOFpR^iXW;VGVLfE-bTuV?;K*A1IvO}s<_R4^HM zvO_p46eF!Q zdS2sF6kmTaOH%kspr? zi{7=_nGQDWpJQK^G-xP8?`Uonwj5q}vD}cI9d%zO}K04BpB-Fg`WTdBo=HSQNYEpnG1IG z93TT8u{$*by&QTi=Cv#>Tb@k%=-J3;o0^4O2C?s|vBzo_tx)b$)4!!2G%PmwO`2j2 z--Q1in;?J$Y&Y^`N-zlWq(Kfl4PX&!0`V<_t9MX?3joys78pja`uzO&1&43Gj?}uu zm-wOP9%_Q;E4|G00a<22FVp}m2DRlSxT0O zVqf3!2*4QF2}V#4Ng@S65Y;*GC3;K+(4}wsIj}&MPtKIUc_Rrq5oKW|g~0$0R>g&z zaFXezLo({7p@1UCaUP7jLJ#eU$~8c;6sg8YU!nzW~%9?oND=KiMw_B{7TrHZOo0%xvjYK|%nM$iC(E;XD&w>}ksPMS`5)vN`WmmpWe`PpEtWe$lTuMK{x z>a);BOKhuoMTUU@4pA%Zw%m5>?YH25t8KU>qWbDm=923btIqOOrMgo!K%-J&GRdv4 zSb31Di{}CdA-|)(YHz>r7Hn{oQ@U%YyuBUl@WT*CEb+w3wM+5EswUj<#vFI-@y8s$ z3-ZV$mu&LMD5tFQ$}G3+^2;#CEc47X*KG66IOnYM&OG<*^UpPF>?+1Y7j5*>NM9dhXs50A+HAM&_S^q($1Qi& zQqMRr)OhEu_uhQJwKRzY2_Zxlf8Pi!`sQ`p9r^39$1Z!{PXh*k5Op|B5D-EYCs<1HU`9UUK&>2*a^?cvi)>Rs;nDwZhB_!A_qgD_ z@cD3Fv1*YHZkV+o7Dq!Y9HH>u7n=a^fQVUJpY;BP6XX3a0f4FuPI_3wF76O*0`#I7 z$B4BT+9`%IY#iiT$i_Ch@r{J}TZk6W7{=6LF$AdtwN%3sBTlDDizAQ{RYJoun8gDG zIY6*bgGE}oW(0+tO{CJe6AX;cl4~rO8DZEYO6GW#?{CO6-+oh^Qo0F7H=M78SriM+8xgoOnrG!m^c3lHw(^Se)}s51G1@rGlXO zIa`KMHkZT}n@R#qGJ2Dh-wdZXC%4JeuqS{Cgrhpw$YCDEDnoB0AV!0r(S_ z3>d~NEL|T=R4G%MeolSvyP*?#5LB{Q6p{p)X{`KsCo8@vs{$y^S&Zq2Se4JFt1PPn zLPMOkv`C3BDj#RqbAuc%E_m`{4IKn9L>}PuGNeo^UuoG(Zf*}(0p;R27mLo5GB$3Z zq+Vo^$;q=#mTnLP*bgyTrBiP7rd0VCf9H2raxh_FS zN;H!?wwlq?X8|>%z0cWHtd}VzSgTnS>=obuR-}UyDdR-#381j{>s))QNy=S?Rf{@k zA`c|u1NxoMrvzB4TLIuuQ|>gu=OmvnZ{x%Qv+#3dB_@V-klq_C&JQuw9x3yREhZ(P zo7v-VNpKos^{JOVeD%N$E)vtA?usnCGQfRH6H|iFl2?AD5S_@w-NzdFyVN`~+b&DF z>s6M?l0D`cz1zw;c+yUt4Xu{9%w^e)7BQs-0tWx=DTEyep%1(3gKPcZPsva>IBwMt zLW8{APMH*xSc)O0f?e$lff zt>ki>TbxpcGB`U+ZUJ=?(x1z6m*-9IdUw}igDGttfUua{Euas5ICE=t6CLWlpxGH6 zNbo;cA7$eu(7$I zOcx`4)>9vrv%Q*|Xd^%+Qe3tIa!AV7p!$d{je^X>4q_EQn?>P1x7?%r!yx zaUeUum9O01fDgPnzl@lF+ffL+YmAr){?9iHXr#=FRl_&Vp;BS%zZsz}hVHDx5ptf- z5)tmoh{Kj|cGX+6=OH|iFE`iEqHCwK;UfNhjn?qW|B1QUvp zJ5y6|S<(Q_c4xODd6eNF#Gyp|^kEcta2DrK#F1a0S0I+ufdO@4q{kLwMO-6ybK-Mr z1c*+q_kZPbz_&KEFZ>v0pJ51c4O}GV*fOCL8cLO5*$Am zgfxbArqp9LMHcAydpxyvNI3s>4rg=SLvr}nMX^URHaLTcICrWydL`3;iDQ2QXo>QN zfSS084x@m3u{(kzA2Jb&)k72-=N5?sUoRDU9Y=WyvL(l*T&Jg9R#rR?GR z*Fq7u7#$mDi>Tp(e0EqG;tVkZo-h1p~GjfmL?J zv0p&;y>9 zUpb{yA3{Sh26r*Fjh{nHH)UXfr6RFrh}@(@&OwYAMpgVsbvJZZwX}TY2X$zr15rR@ zQ9w#gC6RCkBF4pikGTI>jYy4`C`K_!HZvJO(-?_pM2Tuti2zuDoK=%_$CI2mltigO zgohXsQAhi>W`876vw<1^H7h_NXQ-iIx6%MmDOS$p5xmue+q5edB_>%?05URHzl9Nr zRF;``86lJrIRZl@H zQhNIr8%QLcXM=ucfobe@VTiSiyBVPG37-N=S?YP9(zl(>sgv!AGCujBECQVpI-yCU zpo@Zi7RsIfLKpawfN}|+(iohR)1WQMV8w-bs$-x2NjiGDFnFaxPgkHogP;RSqcuvP zHY%bydT!*V6$}cY@dBjBS)3GFq(=HM8G57?L!Kg9R3WOPHj1OABc)UtOE)T`Sem8l zxuaa#rB_O#UkaQx*`rzUqtiH~@9Cq+sibV$rq3ds@dTi5N+fccp0anITPmhD2&U>; zrC~~ce5(JYg6fiiTBu&?r%`IC>&B!b>Yh8vFG9LmX*#ErTB+Ltr-Y$}xnij|f|Gd3 zdVi{?p{l4jNUEbcsHmE%rh2HX3Z<^fqe)t(nYf$)$f>q^tD1tTf&l=$lLbIPI4M!5 z%2O9_GOTRMsI5AsW}2*)B|V-qKB^k6()y>1&E(u7OAwFtxr)-C>I#x z8gGKZt?6-^U*Q~=RIa!>l(9+|bcA?fVi-FBfl*;No{1G(!k?Ausdh@O*24u()2H$J zs!s}kNrE8yc(B&`un-%uGdeo$rfp)gmXd+78lwO?)}hBku8}2>>*7l*nlG7#E?Eh0 zNwNQ-%VQT4ta;(EPzkLrgk3RvAlUk@?c}gukpO2V5&|(3dBl`%8A>=oiOaRK zfCsR7s5^HQ0{vL0HezKK$=>OW26AQ9Fc z4$>Y^wE$yKyDWz<>oEq_$*#DoOK+EkV_Uq&d%Q+gv6%R+p>`~6VYklP8}dmU4dDN- z)r&dATWJa#LYst5))vf5UzQ^K^4%RrDTBBhlD_=IK-z<|6e z1cI9pr)NBc22whaNJhXC4K;E8R1~dRlcG@`Tok$ZTO!yLgK|+XHBchwMjxl9 zwW^#svL_aFhyt-xLn{#YArnYUAt7-RfTkwY@hO5iArn#q3y=jOVG|xPw7w$~ks)jw z1I7_N#`RXV+DoJgu%akJxVEyno0`2~NiCA%8RnZS8Ymi?;gv9Jb8K?Q1KIy7Jk=T% zLK>CPwn!1cbo?2JjCu0ARoRC^0sNOjwbvUz$aD!PrtO|&AqVv>booD{jG&9h<@BFjc*yi?6dB3B|3?#L(7 zkpLla9cfY|n&HHf@e;#`dK?!h(BS|GK_P2`0W(n?UR+cF(#L|teYwfY2+d{VT#7u| zzG%3Nj?7k1xS<}{FPkhcLzQYg^-@te(WQ%)jKo|QcutZcJSr&4Y3%=*(`zxI_F*v5 zL@517f%H$E%bBE`7%yERgG?6ulV24=LkiHj-h0zdiOQ*|y`pQs1Y9a_d0;&)HF%pI z3X#-Y@MvsILM`gP;;5B=o6zp0s}W>c_GG~tJV8dwNaaxm5I1gOf}L*GdB}Xoy8>Jv zXmdHy88-Z9qhS#~Ycz~HO>=9`^Asl^QAq6UI}#-kT8jr(n-RHd#|>;zPD9v_O`Vra z6W3ZKja?@}!IE$1)u6pj3k^9vEY)cX6+z_4c+6Z^{k`d$nOkX5CKkY{JAx6W$fArn zdigJe)X^3b$zegd>Sv$&G#r|n5j8E>r+ZkjLdxfv)2r<)Nqzscb7f_+T@nj>+}16{ zA-&qze6-_nVH4N6je9C38`Zf?&2t>sq1`uN-4_HAaQznFjKLUZJ-gSf0nhfq1Emvn z-CJ>OWg-PqheCNC0$=@Y!v@}4#naUbRNC1}X^Zk71hE5=;=2q?or@jN3vtCWp*vJ@ zB?6&4Sq$O?;XD7a&!+7mEct%z{o<>;B$G<3Z0yhgx*ke6kaA7P+@Wo({Ap92--#W{ z3}xH0!N>#@VMx@4R;p)4!f+VnE$+a2AFQ{Hu6D*}0Ak16Dl{9v{H+CZqd zPX)bNo`!_v;2j~`Q&QzyZq#ZOqgvkW$?w2+ zfGg!BErw`5?K;S6sx9ssUCD%m$`E0~7vI4?c%pTze%~S9Vp8>O@6zEs?frtyCG8Ra z^%`hj?hLHBevI8PrpW8=_9$8#a2}T5E$`GWkXkR%_4_+M{?Ww!jD>{sZ1moK5jb@) zw5nynr#p+y(49hFb&SQMMIe>aAy@NZ!F3uEa+pc!N}rQh%kS{5&%S&1 zF5$5sal}~?{OI!%uN@SWHykn%&s2o+E3f~=@~i=*ULbHSvzVX#NaM6_yET5~NArH# zTD~jNChv)i{qlSBzVeuv=E^Ui(>X2C;a=6NsJeAd$a(J(i)6?v1P}rO4CGQ~L;wK- zG0b5&kYU4w0|m};P*GyRiWwC=%;+Eio`)eDcJwocO8}BwCe9()a3jZx0xE*+h;T$1 zjR_03e0WkIN(UhEXk6$sBFF{^6`Guhho?xBN>}{+yF)vjgR*6mxkaplgXTi5Pg008dpWmqvwoj!epG)1eRz~O>UOPVa|a;)RU8Xk)z z47stNgM=+c#?#<3m&-j3C+1t)^lAUN2`Zx|n?We+(|KQ0Bsmmp$gi&}*3bYGD?`w| zLk4fSL$6cgv}-HBEqOI@tv#An>=B?0Z0y;!Z|C0K`*-l+#gC`^`#Wia&lR9|`dE0@ z_p><*2aO@L=ND$Ux<*w0sZ5z zFaR%{FTo5=nu;(FAKdUk^gIZ$CjeReZ$-umBCW!;>iY~v4QM29M;?3h@kbtI1Cm7m z764$iA(K>cNw>`N&NU{ZZ0#!~_o7Y!+j_uKN-n$f@=Gwo6w^B=yK8VvG}Dw4D31cT zP)#`FlygoxO%t+CJoA*Z%nASd^z%+LR$weRA7b`)^@pu8zy*S zX(6UqVuvHH4P${X=GecF+ub;0kiQi`2MR+bnPQ8_4FHF+R9<;zXw}ly$5EHn8O(ck z4UJczgBE&dqKh{AXr%v>R(ffsFO?P9lx2=uK&c6?`r`n!D8S>34;mrDtHTz%VH{8% zd+M{(R(ox>+jjeHxI0dp>$d5(Tkg5@21y4T#tt^WfdYvNd-pwV-G3MU>e>}2o^P>r&_WA<0oQ^InBg`Mc&D^3K5+tRpPg#$yT4vyv?vdc ziv@%b0*D=U0AjGraq~!Y_*uhz`~~?!u<7{o*MEQh`)7;v?Wt`9d^?=?7M8ZvO^t39 zfgKKB2RlY>Pb&W;s#*e0C$`%i@O#ADpaDzQK@f(pb|VyF3600Q4Qg<3$h(>W8b}64 zy-o*YFdNov!o3&7Bq2+&AqrKPK(TE`Wdl4|zYNn9z$rvu7Fmx6OJ)%yRxK@e`q2XF z0E9zT#EOrLiT}LlmieXTekD80=1?Pm0Sw?JA{u}I7Vd$qIk;sL4}Gv0svsnCpq*LsSXRsW(KrWM|6&)eTwSP zuS8zQaqY6l_&LO@Tiwkm5#ELF{RxqrRITZ zHV-q;qou%j*-UBXtDeuZC)yIAg+CxuY7K=cG#lB+*(oxRa(kH$X1JT@@ol5aJ6Tc% zDz{ScvTPBJ*(V*h&heE`2;Kw&V1Q6QAkfMr=d=x2G=daHMWr`fU}8C|@|)c3lSyHe zON;*$m7M@oM2NsgA3~b8FV7EM|`sZbt)vO033A-XL zb*gqF>4n9Xax@!fRKd+0HF_W6>vq?cO3YfGqGDrY#J2{Si4pvjgwjI0eaAb0mv7_ z1EA|P!VFA2*T`tV9Y+A60@^UG@N?y{rV>T{y z%go&6IuWKNHK>{0d}fn|GI*;TX(4y$+wyAfwg8)!wU`Kx}? zmzdGq((#HC%^?Fgaw`Sa-L+ZZzhiUb(tN^E&be=ChUoH^hi?P!S(%we3ZkWq19xk$ zPfRU$e>|=+f`W~9K`y2XwYJ>|Hd9wr4fiWKE~#zq$iG3hrl=HS~jkSfv#z(D``fe}o=5{&fDGF^uy8G)A2 zC=}CjSdF(%c3-H|;k6$d%w@!%AI9Dvv!`GF^QV9O+MZo&$Gw-wtot6noi%AP0F9zA z4>kli_f*X-C?m8Lev7U!A zzJj|icH6V%Dh#3{kBac79WWBV2#g&lC+Tnir&~I*6Ojvps*3-ZwXaJtV(SbJyPx{A z3lI~dvvUv=yE>LAKVexzJG?_YoRev*w70u9*+Mr5fIG1=jJz|90s=sf%81nqxRNoz zAA&cK3!EO)8W@DYNV~6>(>JlmyD4iu5wtrEtUM1)K~gM5Q5;27JVg=|z3XYgAtEXg zT)jQwE)4KQ574(IdY{&Doj<@h)ylJ*!ZO{V!9jA9S+uS7m^6E99^P=S)oZ5Ef~2!p zKQpl+An2^N5`rk~2?fKjg5a>bYKR;-fCgxY3>(9|LZb*V!=7j(gxJD7yo>uwy-0zl zPaz$4M8olGKYr{-fBZ+LaV&rwNP;X#Q`tkR>chB`yLkW8w!MQbMhUrWODG((#ISM1 zAHpnS41gnaK&mRJs{$&Ff}tI&G56{W97Cj$3Pn|P!O%;^;sQbEYROeJMVMs86TBK% zbUjSWyTsw89D5{0tfkcgFOPgZ*@G!Z#G@Y+sv}z%E!(@VsfZ)AE!c7(ol?q(;<1Ec zvuWh7@TiEj`ldR#qHWX)ERitVLZfr!#-uYp@god%#Fycar*MqNx|ql5X%T_+%1a>~ zj6*}KGf05!OTs)%#7s=ZTujES6!W02gpe(O8G+L>vY_Bdi8`E@alqV)B7$0|7ScW4 zDZbBooGvWCYo@7=b5Cc5~vK)7fJfU%|yY31V$5#&e3EZY;rt&b1HoEEQ`xZV_ME=TtTy- zMlx}LQY*`A1hajC4*OWPcQQ;hR3N;}OY~GBzoZyWQHf+zsB47K`IfY6wT2jric>H55W+IF+>#+sL!B~43)`S zWXYQZ&YY~t+ziearBRx!(Y7H@9IB=rR5L2E8q^#w-20=YL{1A?(Gs1Cj|s;kZM}dB z(jl_NodCIln$g*10a>vjp z7Gr&v0+3eWG*oY8P_@W8P_4f%WwTec)u17c<1^3#ZBSRGv{)@wb={YGwby%v)mpvP zeDxH1EjC^aSb+_@wky|Lp;ChdScU&xScYxbgvHl~O%hS%4s4CsOgYz*O4q{t*NvT0 zf1THU6}XVqSA2a}Q++~r9axoJ*?XK=mbF-zjai44S(`c2{sMp<5P~eog7&0YJi%B- z9o3O#6&*p-c>U5`1=*o3*`QroqGei=HCd;9S*oqtKPgzB&04M9+BqWE9hpM(S%3w| zSu6^>xNupneG8y1TBHTI(cnwDg4=eLTT&fawx!OKbtsPI*QkZsN}bw$&0AJ&TEHz_ zt3BMR#oDx8T*hr&%kkP^bASQMBC!Ml>)Q(fbzIX}TPO`Ew`I~%?T`v#SC8$CG{s5M zbz9U;UDoB>y-ZrejnmlmTW0?qT-&8xpFv#R-Q5CFT+RJm;0@k1fn4$ECg=+_^8qj` zA}9OFT;at}nN;Pee#502o!4Pg>?UlS%w_@!SJUSSqS4YWm#o$I*) z)8C3HwX+O>Tr)Zj!xE?qmNY^mq(j(-IJz_%zr>O-77Jd^4cZ{x-sH5X(WP5N&D#m? z*Si(e1(8?Nm0C#I+x7qLUfdpguIi6!Wu46mC zV?54dJ>FwJ?qfgxV?YjMK^|m6E@VSKWJF%S7d{P7^DpSjf>C?E8@9Ums*SOePYm!z zvcTaj1dTBS-S}PN(RJVlo~`eFU6IXT^F3uOM&%NIWi!rYfJ|gw z?qy&8Wnd0wVIF2;E@opsW@JugW!B@f0uuiUI#J7l=c|KK8#@2hK99%3XoUYxXoX&AhHhwwerSk}Xo;R^imqsjzG#fjXpP=zj_zoW{%DZC=$ajp z1)x6YGmhx1zOoo#576c}N&u^q39$I)0!ESs7()V<-z6p(92t~uow*^M;*-T-Fb-;? zw&yoZP^6}1GVW)me$x~-+ZLW`s;+9$uwU>s3*3en?!rlz%PaJBxCF<3!>sqGgrS5B{o@HD1Yr%eM!UmeCo>{9-Y{k}G z;!P{_*@2E|tNy*_S(&G*6VtSG04*7SAjZ1Gku^C)ql7?fou1eXNf8xkVn7MZEskQ> zZr3f|>ni_tXTD`++8*rKF6zL>ZNTPj-!5$6PL;zB?!_){;~tZ8W@H%-wX$R%w4%(- z!VE^aOUewa8-fTZzS7c8U<^rT74_~1zTBq%?a*acE%xhgA@9FVWqHnP^(JokW|iSS zZu+io$4ze3NPqy-S>xDe`~Dx7eQgN_O@D;#-!AC)R_X*_@OxHp29IwD-<0|OZwjw) zm~HH@{ZtEgVf?<=pYCw>z3twtQ~ze?2p{hgPw}Oh@C|Qq7so>kfAM8uaVzfAf)w%f zzHt?A-xA+(AOB0?+E!|1mp6vEA3t&=PjV%%ORSc0Wobk1ut&sp@+q(KC8u)uF^>V6 zmDK+}?F^xko96N`@A56@axh=xmi`JA5%V-x^EP*LFDLUdCyA8kazO>oaHZ5C*Yj01 zPd@*1KzHvzf7IUIb3?}@P93Z)l4>k}3ndH)fM;o;o&e^HxT=JU?`N{vNLh9P8Xv+uSS&esx*rbw7G9Tc^$E z0^KdRk0X{H-qnveS?`g5=zH$FN zx^Y}IIQ!D2f)mTs zX4hUOUioF0#^xK6o~wh7C?B4S^i?U0oVITocf)S~d7xhsOP_O3kIy5NEdjtKPe1no zfhKJmkQ@5+d3PNdoHwSA^D>V_j!e9E=lD4H^cG?)A|8kX`1pY5>51sAfG3=o(0I40 zr*#h298jZy7yu&}%tkE$vEM=*{`a-_ou?rjdGf}AJwa7=FM_U1BKd=Ae;#QIU zps)SfANm2w{Y&>U2812HiNsT{^Eo$||D8zPkN0{atK(nybtiS$l)DB*D6CKObl>-r z=m8`6_GRY!t;(`*kNP28NW!m&9REcw@QmtBb zq1CKfw{q>;6+oRnV(XBtvtU7;9YM7&Ja7`}!>n=ffaJ1uu2;Bv^YZ`g>-R6B~LEsnDXVknH4|gy16rG&uc>q{!IEb>eQ-Nvu^GBHSE~3 z1utYc)kE#v4LtD9?SRam;D2iCsJ$Bla^A;BC|knY>Ka^wqjOkb!axbE}Vuj58_)ZFj|OWLmdjW z+e#Wv*wl`e^?0HHAa2-WMFM%C5{pLYSlNk0@x-5!z709T00aL_cjJ!=4(MZ+6zMi) zmnG%o(35;TIHXfe)&wC?Ou1>|nrgmzR9*l8Fk4>>39*9^eE_il5Pf6;Xch@@wNMX6 z^kC&}0#vD^qXS@77arG56;qWWab;4ZZ;cRXVt9%=Dyf%-dRl^-jV790nE|C3ildqq z*sPt^S}Lwoy_zepz54nqu)zvDELCS3q#i@{DVLiTNhA>*83C*pAAJolO9r-Dl!pUw z?7@V?AJ3A3gL&147l3sRB%pu}WLSwVxdCvCEe^SXw=Mu$uy>tFI_SGyjOhU!@Q@fu zvEN3FZs}5ORSw`&Oc?^DK&OVj@TsKgCK%J1@^L|Nl{o*DsN#Q_{ue1t(mL?bkz7tJ zaX}_g*Al47dMPBujw-pKoHh7N;|sO%x6xZ5>2#vXxv2ya%N_*T@LL>%xKNe!QQh8BhO<@9hW+4QFnF_oAy^yBUv5{6gH8 zH{E!`^RMLOW?veMQThnhGyNcp4?Ypm?YG5Q;*bjzY@tXv$g~6vAP2g8+M;UnJCcRXHb(Oz zr{wmsfi$IybCOe;I3kh&n9*=WoLCkYk|5Wihi`51&C`BZknpJlW-Hob93yy>#tB7r zYvh^aF6TJQQ7%n){G^PA6pj#6ecm8ND>2Y#DK_VC?U1= z@?#8uAulngk{$ibA&AnDrA8n(YndxWd=%n}plD4QMMy*kLztoxB?U z4uLYAR~~s4vZ>83D_K<0Ix@1UfP|{hq*PT-YqxIFwlKmRW~-=q7ilsRR@9r(HFG;u zCW&UaOfqg`D}!9h3U|4`1ukQN7E9+ow;`>f?lpT`+wF3CZMIVb=I@CS0)Gdu(cpgrxS&y`VZT(u#CchKno{MLt_;Mmzpt*=h#*+V@Cu=_Zn1;EaQN<<*JvmKchGO&~n>}pBG+d}bgfxJO z`a!2BNu3rgSW^xB6h9$`F@%+3)T3_Xs8Yazjb4JD6(Q<$k5up#mpo(9deMa=D}Y-P zzyKQ8$RiF?>rGf^R){&w%RF*xL(sg~E)T8E{kf|}bf_UJ*N4irfi0bF+TpTBtwdKl zz-kW*=d1;KvXMP>at*!aMW>`rt_0Qs#M0S1=ttxD$*tqWXtzGrC zUo$(|%8u@DSuO2pQ=9*r-&8TSdBe}(JnOtkpdUC3z%4D%7kma3U%c9*F6qn%p8;60 zfcNLW_aSsW@C}cC!?WOf)wg~SEkc<&4d6Y+rw9iSY%E%-Jk>onsF_42?gCRTA$Wjo1LN{QTgIk$Et3yst5jOSNR>&er;_O{Q}wFMTi+PueEE~|v+1}{DSNY|U-+#%) zt=i15-@C~-Pqot=`|gIo#9x=pdA1ON7x`d2Gp>Ia?S~qA^_}v~gi2f+8gj zqA8vtDh5-is8dI&%Q$r#Ikis)$wvTWi+4N?x0KI!bl-dY!FPBJ0OX>8$q)PN4?h7I zwrC%9{L?|5hxdVp{^8q;0N2Ds)W97K)L96kJPZ-7n13)t#BkJ8EsDedfI#4(;h>$< z9Dx7)Q5=5AQ4`9a!Z3hG@DkT_9MyayIG$q*!Q35s)k{3!L_{EV%?NV6P5B{A!66Z# zrP@<5z}c(}&V^uYK%~N`4LACu$R!KVg=0u$)Z)p6MS18qYKxlOitS>v@GA zK4LP>igA^qBO!|;zji^z2e91I&hdPNPyM38g7U%H&rq(o34ZKsb1gDR&V@Nqn zq6ih5q}-Q{$WZ~M#lYCfP-loNSu`>p)!^fE8fOiuRO$eTmf#Gh$c(+TqI6)Oh$)K0 zIE2JcCgx%m=3OA$A3YO|%BUtD*CpO4tbyKgonHTq+9i&{ zXo?o8k)mSmEsODKpK5x?l75fwO`m%#Sv>&|_~6$w)|YMS9<~KgZpJlA zZV;b3WncKLk9XW+v|8WyVd?i_EAde#YFeN6@!PuaTZ8EvLLut^of!YRz8HA6>$QWPt~66Rk5t6~-=u^MY&>fnip?8Lq-%xV)_x+%@h z9GlkchM1tD;%ve8ERZExi|T0jz3EG~8qE^s59MXaerL-@#m838&K~X3E^XAdtIHT| zhazp&zUb3-t=E1n*oLjxjxE`it=XP!s}@VC#w^=r(~9Cr;W?tl8m96nt;!Z;>Rnfx z{@Nem?bU{=-wNs9f-K!8ZLUt&%9s#^aH%zvToWsF6_pvRmLvuR?pkA>c!^n>(;LB;x6U( zF7WcM@D4ApK<;ZSuI&b|@;2t=60h?)b$E9>8ct}$KGx1w! z8VxUTCBI9kNS!%r1-dNX2voCkSd6?Fph1w^ep($5%P~>wfgae2Ri3a&XSG)UFdw&a zBO;GNDbOoNra^DDS)VmpXO1bOu1Cm30gNkLo7q-avBa)sL zZ(dhhZt1d?#@&WXzcb8nX3QX2|KKqqOJ4s@SMpB(;ZFPXIjc=b#Fij72DJ{(KY7bs zp!6D{3nYi`RG)TWuQqD~20)iI=+3cvit<>Gaap%EZs&GC4|Zv&&0UZ4Z)-&pbCj6j z)EeqF&RAF*R<>?q25(>P@w8}X)@311GfJOC|J1-3ucnZ&CSYs8WS=v0lQU}#wJ2l8 zcc^By$h3EFa%mrSSAb>30zfG@w|(FD9EWrTTL@SqTWxn7eh0XK=kRm8_NP%&UPmD_ z+o>b{wq@xxY^e@!AoGBuPJzp1tk7j8!T0cZw{TYGJ13dEL^F3pcX)^Mcn?-p5#4K3 z#cCP`4(Q|3dF7KzAZo3jw^(al93c|-Z+lJv$dZ)}H;Kg~3KdAMpK3v*02 zW5_fG_hCfX5RLY@+atblZAF547pQGU*d2^dNBlmDK$;)a+ zbN^tor{y<$2cK;FI;q-76W)@hsrv9>WTuE%TW882I&xNso0F=LT`(rY+YEo*~SJXEOrS%*6^m4;~2jxLit%eTDkvAfIDp1=P)qsyv5pKMf1Zs2Ax;R>za`aI76 zD&gKdcJXb{qqfoK{9`3O(-U^n$2{Yjy#F$${^9YvLp|1KefnzsAWFS&)jW|BY4`%Y z&SNae4y~i}H;{_%*=Ow7gQ14^{M5Ry-M0OX!oAbeI@d3&*YCaG|2^AsI^bhZ-%k%B zlJ2d<`;5Zmt`Zy3H-7)0_IIxud-_N|rPlPXh{mp+qjUpy9nMUIB{E(-8$XYJ0D(c7crScwbEAzhbe{Iwv zzv`!=>%Z>lH^1~xzo@``@j5`~Jipe%e!Fx2_YS|^hrh>bevC3dxqsm&zrFac|IrhD z<B z02nzQbl@P1kSsue2odtJV@j1PS+;cfG9yZu3Nzrr$i)vHoC#mpoVau6!JtA54qa$; zAX0%!8yXGjG-vP^<9hs3iclNB|s$Yw2 zv&IcP+9%qcs8_djeVVS@)}~(vCJP%k*R{9H(#~C*^xEIShci@q+w}3Px?>M+{uz37 z>C+vGUP*ke1_c4QS5+XOLH6n&6@X5NfqQ!A)Y-Rp{~msP`STfXUYtNkpDa80@5sE7 zz5oRr?=Oh}Q9!Q0WYTT6=bnR$xYn9Oune&poXxl5cEgS*21`o~xeGb`&^8FivJgb$ zC@e9!4o}1|L)p0h5;3O~QB00B6|stNz#Mhl5hCk40*c1aFe`7V5zH$x0g5my(4!@d zAwKE*1lqmMo;;}VDkga9JB?E=`T0HBB*flVLH^dKqnQcF|L^G5Is zPJ!OMlD-78{0T(`fg=$&uW*9u&>9mxYte@qjnKhJfn1NOM`P>>(@I~&bW=+w1<}(` zEj9Gg4@+g##t|zl6w*>PR8G`Y$BI=^S^2ybSHpZ%$+w}blZj0Xd~y=QJds3c*MhpE zG}mUGeHPkirERh?E`Z2l0U-JaQ(GVaC@D#v1n7ZW@_GnBAOQxzX@DNub@v6o+8w~i zkI3yo0GmGldiUIf<|Q{@Khzx{*=afRlSx2dW%fqF7CI7@YwvjO#=pz9HShh(t&s;Wukp&_z=7dAO8RwjJ-Z?Ls3$vC?ZR^OdkN?E& z!7uO%=y#5B*)>9GbVoQqX_UtG>i~2GFaqgy0DV+vmB(+x_<5uhY=?;Dv`Q zZ`MrzTuP=o=SW*m@EGEbJes>>xh>R(zaIPSwa;tv#XjnTXw4kxlFK^6J!k~g2Pz=z zbbDZTU1gnYU!Va7Xqsu7?C)v>0RZ2ACB<`;gct`v1HP?e2UOq!8zMl3&Fy4t3fS_T zx4sHyC~Eo=4fPVDJO+Lcgdy}@?f~QINyA>@ZE3xM<7Re%~E0DeLe+z+*OfRy!1hXfe`y^_NJ zLp^?neq>Y&6EzkjMLrUek<=L@2UtME)l4TIyp!P4q>wotNRHN1MVC2rn@oH$FTlqe|}x4CGJa@3&m#2HQ| z`2~~BdrCadv`T;e6QF!)r7M9@zLS7)D{QKY2cA?#rI1Hhf*c&HB1*Tu39h35RHj~P zVxVh2b7cTnr+hwI(k1!tqtXJYMn;+xl>X10DIMoYGddHI))QpUd?S?F`8x^!b!u-T zBH}1*=EQ&=6{$(}#TJ`D%N9{*gMEptGz-`Fbe4B@0c~X6gV@Tls**+|?P^(zRLBwrrmgLa zX$#v-wWx-18N1JE^%mN?jdrNUt1VwRTh89fb}zK8EZcaCT<1QQjIT}ZM@E7|=|Z<> z*G(*8Rf}3d8MnFI{TTtPby?tsm$;YxZgA1NUf+TjzO7O(b}ORX_@=i1y+Nh#e)+pZ zgdXN2BI!>_q+7Ns_ID+dwaZ?;Qn0=TW`)I~)xuykAq@dwqPG2MPz0E$wNc2? zYE>hq%9l6}MpHyrL?BX^35XDF?#MRc&_Xr$#&@pnj#7y$KFXOVdkE=~-h$mXQ%*MAY4&w9bgeGkJxY zXFpF21G}{Iflg#m6!&D!1z|EtkvVGOX*aMh_AHd6TxD0kT3T2ChAkSwmjzpo1OSy; z0H(oAm_Wvr%pD9gqXcc>rfhP<5+3D=l^y9gOFAwBNCAT%x0S5}-xnNQ;s?aR056kx>mD zQ(sh+s$TV_Vcl?tU#Z|~eI+cxw}bqIX(Xn>4Ab!GonCIoC*4`uko0u2vK7GOV##&jh9L9_00E^E%0Pbp6`^IHIrX}9-`8p83rndNYN!~A?o0_|N z&^`?O(2rkVo&5&(^nv_P@r1nE!R0n{dh7kY$osFq5w2RMGhD{@UZ1?v?d+l(-9z*B z`PH>PY!Vj*+sEHY%7}mWI(wI*ZCA?g@%?+Ht47Bp9=`L}=XB-&*!zbzZiSaG_rK%K z{5xX(>zkbF_V*qB@jr~L0Z$TZc}ayP)Vb#Qn7)9K&i`_vJ0=f2vgU{O1q1en3!J9% zjAVaCZ-&?>VEPG;i~x0>gkWM0ui);_G)&lLPxr3>V$OEw_V5j}fKJpBj=P91`GAj5 zY)k86@C4nB_VB>nvQE?Bi`z1$2BQyy>;o!PhT1|f`(m%pxR0n(r3H_W2#d)9<}Ki! zh2YMwwCe8o6b`On@BQSD3%igd=#RKcLUS%>2f(K?IOja*r-nX44YQ_(GE9dk&s_S4 zUJihV)Wr>fNQWL!_5_HJ3gU+{a0_q7_1v!q;Yem`u11!S{hF}(REzrX%ijDT5*h6g zC2{Pokm{O5$Z9YL%|Zpgjc5o8L{6gLs;aE|w0gYC9X^sEjYn=Kw65f+Dz1)*>iXA$_e@1g4P z96wR0cawayT6%PPUnI~egT#BUCYZbKsfts`5${@U zBok9Hv5Yb-V@L`r3%(H$SFZEY=V#tn6HT`)7Ajxr|0F^;w<0C?z= zn1maDEdl8TGeMHA3a%{E@gQ<;up)-sgpa)_G6RJ0F7Ipl;Ib*tu{U*)9vxr_L(m=Z z(Izlp9kEcc43ZTm5;%ZU9+!(ZC*~uFb1g=YIya4kY%xj(Ge=mD6g~1IWpgpxb0j&k zFJ5VALZXd!z&X{WNLfI8;M(0;@PwPnPgQz0Ro!B-F^Mt-`66 z*69Wj4xGsCLlbdE;}b-26eD)j32`dmb~Hy}4xFe@NYm*elV`0;Dg#XPDP`(HUo-_v zR7zhF7hRM*BLh7x^8D1(J;#(x6+=P;D8PnB%hogLo~Wp{6V%?c%nryL7mmheFbMKg zPdgDimPAj305ksdwSMzY0ku2zRJ!C&Q2k<2l~WH=AWySs3C#^r8MRWCb5R|IQu9=1 zu5D30RZoR(A&?1FIkiAe=1@)5O}#U43N>X4^~5YyRnh6XRB$3v)l@gtP;s?WT@_b% zHB(mUs^`;vC6;o%m0Z4R|g4H016{QMQR4)ozm4#Y|@bi@QTC0=_|E621 z10&hAOv}|=qvK4`v`f#m8s55NwD4D~!f=ZSR&Z;#NBGmT#4oY4aih3Mxz%U;!+SmM(&dWUnE#NNAmF zZWZppl0wK9*Ezi|BP!Qt2o6Kc6JzR5tVq>4y|rV1HZYfJF#gsCLw8(J_clXUa$Wb> zVE1yllOtDGb}#B-7%2l#_j9@SV5dWG_jai`h&4LtRyoP^QlbGU(4&&~KF-#Tpo4jp zWwh*wc>7j~Shp^|$6Ht`z<|JJAEFwUVm}>CS%9g(9v3v+vN@!3QLu9>t|~fD5o4dw zIk@sRbB9EI*G^cqWJU&mqt*K$(K{K*e+lA7~5f`Q@HAp+Q= z(p7>d*f=)-*dQ?AfDz(1MV0j`nC|#jcvlD2y!LsfmtOrbxW0o=^~Cg`?0Ta$d{qME zl*NS+cW~M%ctv<*8sLI1!ecpjFT@Ocr9^ves(jiAmV|(C>tNR`Vtn1S>$tHIN$bei zcTl8KNXmqSKzN4nEP)BaMU5kb3GT+4E7P&iL+nSB?49ZJbqr8&`x4)r-Qd z#3llRA!3lDRYD8-g$bl1SXfI#IOvA3C_MN|k9UYl*nWXGU3u|iw-&u7?I?!0lUogx z-z#`kEWDuTwa&H`i@2H=Fo#F=9ZfQymY7GH_$9vg;uc_YxCMMO0;M?20aT`IYDQlV zAoQ^RDVT#oWm5BGF@u#|ikJ&Ti&T?nMVYr}*q zBHnH{IJk0-tMz%vISNU)=Ja@zDfyknjVZ;&og+eG6*wgrnMNBJg+F$nBYB_w8G{bm zeEIp3>v@qI8ePwHeRFG$dbmibCu84nhmSaLs0VS3*PisXi;fa;Rwz9-XjwqxJC-@a z_C{=e7ZQ> zv=24tu#tJElk}uTkC-v3q>*`+zi6vB2&F38PNI8aYbJ5p1WBEDNI#CH`w5>eFpJ{* zyotrBlskVRs$F+Fn&qsx4+LU4DY;Q~NT{1jpCo!3`kdFAttrR;gk~lE0u6=#SoCP7 zUo5sK|Ky5UCx#fXU*0ec>F39Q=#`O3eK}i`yAQ{Z0)kUyegoQ~UK;@Pz@0M%D`70n zfLXKajmRNojGyf*D^YigTvOt$rWCS9A=@e{nBU$}08^XCG*OVSd}|dNA{MZIeOrWc zJA=<}!pr=hIr}=uoFkH@x2qYp3pzMau#`r+(z=MfxrhSiD59W8y5k#*R))p?rk~~r zF)fIu1zkH(6VHi*&$WYjP3cH{Z!Mov0)|UIdPa zu^UWXg=LmH(?LVMBfXhdebd(ml{KhdkU1yVT%XLtx`B|uC;c7uyN4M6JUoUQp@Z5< z<($F=O3XK_B*X-KzNZe@$c@r4^%5I@Sga>|a(VIxUcTJ{=|zi~5uf*ku*GPxvH6SP z88_gUDWKCixsFl3S=ye?#yAa}L3z`LJdiu^-lQ^eimR?2YIAHgB7d9hvo3dqmCXwd1_GJYH>h9U~0(%`utTS4S;nL(sRV)z)`q zWS&p4(`5TxYDyHVFxp8u-J2F_Gg6)AH9(Z~jywz&*~}y9E8WsX36wOQrI(o!>)d7d zC%m6?)SWacAj+%vGM*C`Uu~Yc6<5!(*d4ciadx;}$sVGj-g)}}r>67|mLf&aEPi4>sSro?M;>TkVvz@Zdn7nKNS>P=mL?ZFv z2QoLF0@BbPw25ByVl17B&qd!i-E*HJX@cG@Ny>wCJSDWB^T=2XR+Y zzG~q!_x^W}-riIcebd($s^5NDmYK_o)VR(5(FRB8iT^KdzBsUGa&0}90b+y$2O0{_ zIcN~!oPh)v4&-w1;T#VF6et{+Amc-f3?~K%fJdPMjuJ8dDvUS~r5}_d1UCE_@+3l& zC|?R_K=EV7n+IXaJSh>+#)dPAc4X+YXUd5@9k#@%k!XPcL4SH!IuUBdf;w9^O)AtV zL7GJ~ZbcY1rqzyFiB>H0Gp^jZbnDu^i#M;{y?p!n{R=p-;K67C5I&qhNFN{!2Lh?n zXMtLoSC@L2Q{aFAJX{7Gz;F;lkIf2u4B))7XO9sGN2_K%fMEl*Tna!`O&V>2kOB^X zJPbUz@Zpn{67_rAE|=xYS)T+D#Bf~!q?yOX5WRR@+15qIWD9+F@#Jk$(@tIV_;!rs z(Zg+z5WavE;!mcAuMj`e+ztuqkFVWaFOUa-Wnp3e@Ly5Pb@yBf(gBzs7t~n?-Gl92 z7+`{-VHKf!%4G-KKtX^eSA~a}7$S#1g_oj=ez8RyLKDWAUX6qe^dOBb0_O)8E>flz zOh_e^-;4>oRnUwYQ03oSE~!W4MN6@FAY4{8#S};ym;^vmQ6^LwSmhbyl7?f-Hl~lq ziHS#7_lfBfTMf9#R-FX7)YEV4iDgp*BlVf*mq4Y2XH{8-6jT688YiQcijJV>WJkeB z8HY@Y^i`&BHue@-{S~*=rE($3nW8Jf=z*C!uF7hwuD%LutYOJo*8)Na!Pr0xWKjnY zB$n7iV_`9L0HM9DhMs2w44|a|1LPpUL#|=}hOB3%#rBeK@l7kEY0eJtE3M*=s~4qt zEl8xQC5~v9lK)|s<6IaRh#rC2aW|e?a@Gs#j{{m+29*&)2&704VMs8-5Q_L9zVg27 zVUM)o>#1CZ#sz?b0xqZIKwhGYp?(Zj3T47}nL8ND@y(d>#e%79<6*)IR$$4&NyuM} zD1J&<2Beak7tDZV5TJcAMVe>0=27<%ca8bSDM%ww$MmmX4#X@(R9+0`&r?(F=*QPl zU6FGNJZd4>3O_yb3yGEu+SEEZ`gEy!*5t9CXwT+H+fWf2>fJISrDdo$HBh#qxe=Zr z(~tIjF;Z{e?Nyu(Fxe^Nwdv$6yeB13vj|JNh&nVmWISg1qaK|y#XZ`_I8sTS1Sct_pfvAtQ@UK? z2xm6%BQp;rK`6oGn23K7@}Cfui8Ki@ zFogfBS>4nW#wG%YeAFCV0gIMFT;fHa5A0yk^r<``js=!&i5l_z=0SiS)P;Dn*aH_j zloN{XTr9(j&n8Nj0D3V0pg=^)IadkH7)kR>68dO869SdmxNLyh+!#Jjn#HprlBC-d z4tq}NOPT32r#$VcPk##3R_;_>A(fr-mW3@G26d@}Nx)EVHl7iR(mzLwSW&&%()_s; zs}|&^0}%95VR98@CnalD?}EOuzLZQ+)T;VInoYJ2D1qvO&<(4pR`bX;tApI2y1vKO zSM7DM=L#%gmt<1F8rHD=$sG>~TUbGz?5TLWDiODuuE37TmzIU3nqswbY`SJv zCHq;?mJyt(MQzJS$yD4?Hny~_t!;0MTahF-w=_yAZ-2WNrxKJn#8m7_JER=`H#JKgJ6mzv~6CxXhZ7qZ&yrfd0YT-B2FyVxyjeTVkf+}^jn3~sQ4A55dWLU_UyZk2G0 zm|ym0IKUfT?|C)c+UANluOu!ohfSQ`5oZ^={`DS+Tf5&Fb5*((uCa}8oYC2C7{)w4 zFoJhnm;aX7z$nJCk&lezBrBO_yB$|!08pPLOW9QymQ`_k%+dr~IGFMTT7tSOUlsRE z%u_D2na|9Z1&kOqvJo7(6ZuZOmj4rit-4eC&f8q{>2-9UJ?0{|>Q)whz2 zT>`Ky%T#oiyd3p}0S&7w7q!%TnyjQT{Vxv{_0lNA5Bto@+FsX%*MOWM0l(U1ORK1w z%vQET33}A{k z&>J1HTjFzmw0~PH-JPvaJUvamWVL!Uq{qi7m^r`YuvHY?*{&rtjlw(Qfd`0WL z_Fp{zwrz70PfG8$XhmN(+=0q4G)=_t~~UgXnpHcZ>+-InC__09OuTwSnI95^7zVp?m_?h zTtaU>u6G*u#K}1m3B!B71b^O>-l@6L8gy)D-Rcd^G4riyd)tQn^1XMI)SfC@8q-}% zvVR-jlsdJ`m{|AG9$u88@6ht6Fxht`vuTryWfZe;^YpL3sc8@29SA}HiL`8+f0R%v>JBRlek)e1dC3!|rfqrBflfiMhQ2?VMc^o(p#WFqr0$>CT z@fHdg03GK5*x~@SW<5Ee8P{`)ic@wZhig~3XsLx6MW=K41urn@5CZUe>_lu+C~gEr zgYvSBJQsU9$ZnIENj|7lR|Oqrl5Iz5QycQwSB^6Feqt3LV|OuA^JIv4DY~RJTL?$e6Ci9uM!J|NFhV#4*BF0_1EB{^HxWV5X-yb|&^T0LNra*&g+7Rl#$%1)GlRPKf#XOV z=3<2@I82WCm1v2K>ev(QC~5MDn94Vog;`sFX=s|3jaHONCm}bVf=5GH87dS-2lJ7l zcQ%RR2Oo(i1_zi&Vn_*9GHeouawK={b{q~gT&O7_;^8`nnIPgQ7W!x&XDB7lB%4E# zN1Icd)gvWZiJZxKB815*6;}s402#ou0EU+ZhbNRJvn-;>Ey}ViNvSO|@|``A1J^Qn z0+0hp)o~aTo}poYrh#zEX)xIMVZu0!=L9lv$s7Q1miR>}9urdk;sl6oNp?gjTN+|n za7mzXfuIR`jXAiEB!pIa$(!{EEB*PGR>&|N#DjS8dlcFx&j*g2S&hu7q1~r?b*Vj& zsb9Q#He~cqP*R#gA{Liva1Z&1iW6|iqodr16-n_YmiZL{hZ!QrniDCJ4Z%3qCQi?D z9Xi1@3%P}WX-}vla8}`@J0~WHb2SUjL5&l^Ekm+zm=T_m7cK$d8wrUAyW}SN7>gWeJ+zjNfER*8HlRI0jF`t8%r_tj zu%FYRQEDk^k;j*?r)kYdRfZWth}kZUnS2iFp+uLL+9-Vg_ehTM5~2gAs{4Uot@8Aqh2`QaKS;alQYC9lDE1JWCDYLilzSsD426l;{b zxqC`NkS&EteHa)`1yrAF|}7Rfnxb2(?gm^`Z}QVrM9Ue z7;CSEi=6mMGa096m!p4+M^L*2O%8AXx!8f@nG&6GEm&bK;4%lhq%^UJR3IUFp$ndb zN-d_#6y$lckNArg)sL65R^m%(&|N7!{JOL{9B zOfE~8uhyu)>#8~Xj8`P9!Ap+AHNEjhmd9s=&6~VJJF3oCwA33^NDI3MCS?7=Bq{|* zrJ^h1o%LN`}xF-^8>K~No!)s5ndG4Cc&B^0aiA{%Y|#*oud z%hq&N8$)yKp~y#~ZY-iXG_)nE#+=zDU?aP#q@uvOs6l)-TiZ@C;i7j$M{`I=e0itN zu`lk6M1s^4knFJeSWuWGT*)&=p3KSr?4$t6L78GVMwi^mWb(?}7bMQsq6Ah--#40x zQYyP_%b1)^KkC83jGQAud9z-+5=(3L)B*fS1 zU%g9K+~H1769nUIsmR)P9kM`%@rTsGwIhPf@39~iLRKI{ne==x*5$<)^3JHCJmai3 z&qi)I#EsE`BkT+#X>7c}hr~5QHk=~Olc**Sz0N$#P7D3S53R`k+t99v(NO0|K_F%~ z$I%_Fn1KwwgKQ@dHNGI6(aP-7FAdX>M$Ar@$T2-c%sioN#Fq^P3?G_sLo2!}O_P zV3sdmE!1lzb~zoygH2?bx+O5Rbr#)(- zjo6?JjGngDlnvX9s@3JoKh`yNobB2!7Hs(V!@e!swcXg%SH7xk+)2jTt$p0f&D_l$ zE2-Vg0C3E!#?sE+m({J@L=Ar|rl{Jd%|IsGku8}hr`uMs*)cZUz)jgeoY};^&(;m! zHJ04k9pCkB-}k*2&<$VzyK^fUhbx5X)=nYG<&EFhf!*{i-a3s|By!m3r%e3?-nfk3 z=RM)C9b>kh+cU!m9@>|hU&c4X2Ob>r zz1uZL;03PZJ3ePLyDEgork7JgkKt+(r6&QKy6bsKJZ|7rSbpaFuO_ZxetEe7G*DMO zFjbvk$A*vOz1V40+*ws+@YLAr4d(aJ9(2Xt{rFb@^B?F#;yj$gEv~7hx*|Rvv4i|` zcwXn9Q{z<|y{oco28=*2ODgwf<2AcxInEcu$y011mfT+`QU=Qn(l_u`Jg3ttPG zsl{85+FlfvE-U04=2(ce=gdkiA&Npe>hn(TwWHrLLU@I@ratKaj?0X}X_*ITH=n+d zXdWq%T%}3#jUEK+Ql6E zvhMGUFLWH|>%Ge80_!ruz46iPudAPAY$;^fGC_NyQ1@=pxbr76^E*uKxcg}4j^N_% zvb#ExF^KN}EDpU17U?U)92Hd8Bv{zD9^9h^R{Asb^$zx7|4O#Q1^TxG7ME)J%HM*m z8dmud1E`%j?16W}fDX7B4e)^MIl2bOECpzQO*!|Y(sAyI8A#Rl5HFwI?c&F_@Yh80 z&a5>5DL!R<$dsY;We2lDpCiCDLE)RwOsC@WhBKo*rzK+TgAuap@$~bPv&st`JCmt9 z`1Jy!^t$T#^-1lk|0;<-@pqxWL#jpN__fy-IKl!pOd>Z}%aUHxzGCnE&%gV0J~Wk> z02a5VhQ|<_?oiM2aY$a2)Pj_bqKdZxxt-f_=P7wTP#c{di+8Vz4xqNIxEcsaqgr`y z*PP=2HBs9v+sy#szyY2)1?K<=0>I!xhIjx7T=;NcLxutsQp8wsVn&V~HFEJ7(x5Am|~$NiLJArp26D^JdPSJ%0urTJ&hrrA?nkomzE408dwA zR`V2|Vf zBmCfHC?E&qg#r#7F8o^k`h{ynx-|$tJzelhgXol-d1!m!zb|8$$)o*}0?@b5u-dG^ zso>hGC9!DgPa^~Ua|tQ;HoFifz!t;?EZ%AmgA>?Dc{q!bkYFe<`4 zVwEi!GjmZhqdfFuB?oJSutHStob^NCa7D|*95cF6zW{~$bSGkIT9((%mO?RD`+iLe z#u|gIRoeJWwDv0yO+E8jSidVM()h?-S3ae}YEsKN5}+|J^0>BB_DJ z#$}C5hYaR4VTBiFxM7DMhS<#3#spx_Hi1|mfgRq|tyGRCMc1VNlmqs=w*oadxjg3; zGyv=<4LLIN5H@I1{OrYa*N7eVG+a{aQ#W09^SV#7WT}N}!eo_dmdI#9TUx4EMeg;% z7=0aDSZ-YjeV%Oww+yX%sxa$p215mU@B2jwkT=bbOdJaf%A=e%k{d8)cx&;mVtdP!rTe8XC8r!e?BmXM(mBck_%;d)#tpSzYyKis# zvs)zkp_-oD{Ij+G)h}Jx(~91*HYWWYB{DIC%>w-wxxqE=UnzQ301)>s@7(2rl5tGD zLO3GJ%%w>fxS8`*xIz}T(1kBd80h%s03irr2MbsL5b7X=?)BjR1rZs*0ctk~RXHFB zLwr=D4tM}e?Q3S$!IbbOk{nEBYF@_S&H!XbMC0HNd0JE+cbW)8iZ!hvZi$P#05?Hv z?aFcvdD{JeRzz|w&2n^0iXFl8Mm_QILvEAcu8wuQKGv*&D2gDktOZE!ov)FBOji&- zl_5C-4S}5LmLCzaDoEl%fOGL(-dPl=bCILM8zoQnYT@T*U<@@t0- zidQz-#-NnQdSGfGsisH0{A9&(RGMOtXoiz3;R`mFDM@0!gPz;jg__f=^@uDJod91s{XJ3_iOg_n} z9_YQsWABkjkXAwxg@Oxh3XKC-2&D=XmZ|y@)1N-2eKb{yZ;D!(U+(Cq zHL+4ii>lL-`sAq~BC1NeNmXzy?y4#kDMY(jEv+tfOO+WZSB<*8s}d1=T!qM3#r3+8 z5|Wz?6)RZp)Ko78Gcz2eNk7}QMPbS=fG7kdV*h4XHJVI>|GDTuB|BNlR@Sm%GUIAU zvH-chh9od^*)lJixq`0dpyx`7L>iNr5m1#_tL+~D;~3LPk-*lrw~f$Aal2Y}A*i)0 zZOv0ic{kpAl`#NF$snDEpWyusBZnwG7WbKTwqPDRaBv{5A+OxY6ta^P?plDN*gQ(2`zbniGp@AkT5qoUU|{ zL9J;+SGUin=G>n}jcQi6+SRY_(w)^KkQ&Mc2sI>~NCZ0?e8PG)Iz|nbNxf>oEf|eu zHukY2t?Vx^HjU4|G@=u2GGr^;NY?K3V5`k+e@0u|+fMee9i7^naa(AF{dQSSgza>< zyO-wnb-X#HYDRlWFbGY6pcx_=1qgJ`q5^*u*9@xFPLnQ&*ef*WNTSr;U>T`8?a%)LstAElp@eb2#PiNp`7c=k0XQblTEu z>``YP>XCa=R4ur$_ya zLq8gXbByb6!Wh?uovsq{O9AoNA z5BmClr#bjjzyHtByXV=L8uZe>ck`!x38=A496hm}SK778aJ#cQmtC`qEJ3UaoIu5L zKpznOW(VHqrH4)ZVq zh|9f3nTWn183Bk6lEH{Y$sz@C!6E!SHFG}l3!uG&I|gw=fSWsxlfK9kId_4+>Qg`H zo5I1fzxBI6cYC|@lev1Uvn*y6hBzS05F2*;5Wv3j^0B;3;-S}0-?rfj#Vte9bAl*=%Nf{HMJ8w z0vxd(<3cY>M)T{!X52Ryle_yvv-tx+y(_=FGsDTtHjLB8EnK7IdKGNUMo;Rh?o+fk z6t`-`#C6=C1X)I*(k{B#LqjPEEEyZObHrmzz}Z0$Y|0=f(TRZJmsR@5du*l;dJKTM zN0U0n3mS+AWXFh<$cNFy9g_{-=z}cCp^QYQK1iL7pdGFlF?+%T-D4=0NgI%{7a{ba z(BhBtSc&tksJSbGgFB3;+bUDe}vYYF>D=bDURJovx!^dO8 zPI^kF{6^X0$*9!86hM`rLq{u|$ga$=ztTLt(5QTgr^yyZfs?owz8Hvv%u9N#ps~0N_VUWW6wFw|y6|xTI)M{8QKve961GIipyHzD;UbvC z7ncl=7IZ7H;0~4Ofr|>FouY{3$qOv1#3{>3NE<(Zd%`j-O8k<_YSg$hJi3#cLQ^xx z+B`Y@gF`B$P5Fz>@DsnLTs3fPi`@)L0Z0LhBg5X@Iir-#!Nf#W<0w3orwz)bdL$3u za|`kSK9sQk%YNZKgwcz;97q7t2-`!Z@MJ|p;ZBAe7PN!T_>@l)D@>@_I*dWCj_iX; z0!g*3C&`o)QpBmKP|4~b43M$R$T&sbv>eeKEE`0%)6Bekt4d^~IBsOkFkvxS+f!i2-ZN zgBj496qoB%x54qZ46;tsiwNsvoc3%SDse!?;7iCfi9Q-c9M#e-^^A(NJO`))AgD(j zQbDnR#m8ivvM>*P0gHPSl=8q#*kQr%Fpk4;D73*NA$$u5)tclG!5foMpscjjbkVn? z&N&4Cr~E_IMO{?o!ms}cL-ym+iPTX>6}wd_9%|CdwbYXC?80rjrwgh@A%UJu-5`fN zzSw!hJ&aPkoYK7%M#s6G*15-Og3n3C)xh*p(sKZG3ez3Xp)mcG-|2xNvc*2MOXIMj zM^sioSymttB!OTQlfj~8%{@$^5t7V3bd%OBJvAMj&b_0#=Dg84E7x%vk@PB+b&ao~ z!X^7FR0hpeOT5+DG^SZKjNC@8p}JK^!8P2&wJg2mRl+|Gd9%r)K9U6VhJ!nZ};)^**|*xb>eH9gw_VC5mzmE6i5LqjZF zX;WHPlS3W(T0s5U;0+VweO=GO-PVL%<;)f&q&*&#L|@LJMh5fVSzF%TwOqD{L<7uULUK=~ zvy9ri-vZ{+|2>;G*`XTZIvfH!)}7nYP11Y3VoR!qwP|Ic_pZt%0o7?J{p<-W=oL4^2j}6yb2HUn?%*48>vD z{okMS*;K(!pEFp03detPr)L7#I1WF1f-Zb{(bf|>=*!+U>;=!36&AT0zyS5O2x+MI2f*7(~X7=U7lb03KC@3=9yW?qnU8G!ORTf*u$T6`l@2 z`C>T}WmrOG@BHNqCO>kG%^0;&^etJZ6lfaF5B(z|q76=H+ddT)*BWKzD+XHMjZ~B~ zN)x5Fg5FJu9yf+o(fak!g~nxTw$dGj+36uZr6Ur5>9CTKFCwA;!My<4hTLN{B+TZx`)O* zwu|K~gyo}bIW6?bp|$9;uIl}j&1ekQh6ZbqRa&NGLlPBQpw;N-EMpB$O{9gq_+`#< zBw?H;FcHBf50CRXHby_E_Qzs#C z-oDTx(O!uz+G7`_5v7jII|(8H-M2~hF79Z|)T`o+mNtgvWejb`Xp~=$e$8w<>#AO5 zg2v5p)U>&lRIjElDn#zwG~ca6>kqx_=*B{|4r{n3WnsSm?0+p`dA86+^Hx8wOKGYp z!%n^;y_1NgiX*wn$u6gX-R}5K+xk2ZA7&?#*w`H?rR?wkLZOcBs0^7*Xwh?{OfiqLYi9?5?LG0)ZUqY;luQMHK`yG7#DJNp-sg(`Y8>mFsiFla;1=vGGE6h_`> zq+cM#OCz?FfgR6W(c~!B!wz(-BG*99TO}nY^(oWgv&oGGu7fz46?&l~T}dw?oMb1F zYQ~v$e*6;yeAYqoaz}qM>0~~@Bc-_w7-`^KNwZ5+7+mA2Y6&^zv== zJYUM;KK4UbZn@j`D*S7}2KF`A?iT*10vOn3hF&^Sl1=T)?~D?YQ0Y>q_c&v6v7xmc zVy6oRk0$)d{nOpjedKA}QD$8Bt9J8lB>3z`^z<|M=Kl5*S95~b2WyAN z`G=?TN}2QA4tj1s_;259o*#4qjCA1s`8~Jl+uZ6q_j9PXVR|oll-K&#Rr#%7x>KJ+ z#rpT}rg;sgXn)ptvj=Dq^=P@iMiS3!gI;@yM|(5=@Q-e5LHBBmzHqn)H@2S24i9J+ z*K-fQ@vQgy#K+vOSA19jdvYIkV1C?aFZVN+`QN2>%GaC`fAP02b`|I1mxp|wZ2Yf0 zje0Kq)Spkr?~wY#VZ?WHq%?dv3-?xwc-1E-*f)9H=l%U-eY$l3GHu|;-+d6&{lKjK zVVwQm_cP*;eCCJ#l&9|l(IJ80EE?MX4MrtkxpjHb_e#{qvgMEd7dn2maQ+Qp((-gn z(QrT-tMJ-dOQ|VM6psJ1A<_fsC&bX>jjya=xVRzwrUM4B4RHTy z_WocctESXK)wSfGfd?X(pn?lB*kD}MWrUP~n#B~|WKuyj7FEY3kN}2UtrvhF2q}-E57Jkj54Z-2aE+sWEGDjR)wQhev~CwLsSi^qE<5w*HDgg zFnQyVHi`%&jR?i|q(ex0NFi%Yg^D4*wkDM>8G5CIk3#C%c8+mz9soe}A;b=SEdWVCw!bh^ z9RP%61Vjf2&_kO&IEAW=_l1AOc$xH2?0o%Nv%!jP=UJ=Tdc9i zBAcwT3KA-|E`UWMPO$Eygy=kG0Fs?U8QQfx1roV*l+pl`Q!P}I34d5&AxDG#M@Ra3R%Vw49-kV~X zF#6E|e*;@Kg2WTk+Q7LAfax%{Y_;2LN){ug@V^Cb=zyCDGt5QAHM^Ltjw)}<=dwc+ ztbDgki&e4Wle9cMIY#Lgwt*Y zFhj#iduQBo4@EcHcjKM6-h0=ic7V{%?c|(vHY}F{3D;OLi@I@(ElP>bp|7Iij>zr6 z7b%EZ^FQzcs%Y^(e6RXiN6r; zYJ9V=?9q2sN*H)TjKuU`QCI5#epc_6fY$TfCtYB>TIL4eH3+rOI?)Rpuj~e$T&ZMz z!iu2VDpWxVPH=5!|D#C-6X?MYf-r=-L*Pa7)j=#FCrc#~+LnBSCwZMqXWL@Y%03q) z$Vm=I)Y2i8SX3r>flmV~lviy&SDS$4r%FC*l;s3cCHKH4mrYJ5u$*y!> zgrWB2L^u&5vO({=%L4k~$iM6W0N`;XdJ3n%hdF?N{%cAP5Hpgm1yXQcJ7FS4(<{bQ zWd`pcv;rD~M5n$Rlm z{9%xo|5rwdr8KSy>7FO|C_9xfl%P%}9Z5o`FT+hMh(#T(T`2k!NqPqWBN4TkqtEnx~<%mn7tuBpug3-HNsxN=Z)B@52r_Q1azLROwjiBhV z|JX3N#*c|9QinTB2tpUR#|7M!bK15myA6XV?3e^Kvl=U>M9WDLvnrj;VA_2$iyQ{Zyz9QPs7j%g;ZBghMpp2sn*>TQRW+%_nt8(06j(kK(CVhCTE* zh$5@EGQ_n;zxRYIgfvsI=;IdltbCIG6K@3TV?#9t&{n!(m&hxnO%GZ!9VGEMAIIrd zs~TlvmRP6Xt4x!5+MIjFQkiZ9Tj|0%*$u`YWJaoqSf$4tgwA=0O(_A+)$gVLtrTy-E<2&E5Vm4>GtZ!w-{~I`e zOJ%F$)?|vTyUJz0Of8q&)8rBp-3k|8cB%ZUYeO943(q*i=l$=GgM20duSuJg?YfYo zJmqh`vC2O_@`0b3-5ifNEJJqgjpH2L4%d0dXMW3#Pu%C=UNf439`vI>yyZ$?x=mhw z6pu4K>QbLNvRF>_X;<6YQ2yJPu`KYL3q9#!27B1Yu4SAX-OJlfCC@Kj^eKz|>T;jE zfbE@=lG8o!df$6+tX`L*bV|;Amz3b6Yw&CzzU^m9JH~hZbH>MAKxpqd!Zp1dj!O{o za34J9TkdqjcRuu@AHAgbjhF5SAqzsFpWR8{nXLB&Zi%Pq>^D#L#&5pu|CHCf<8LqK z+(+K*6d(HVfj?Qi*WUHY*W2eo4|Q`Fe)-a$ezK#V6G_$~@BlE65Ek%!>f;3V-;evZ z)pB{%9FvKDzCBa6wbYR5iKO6yZSGFy_7mMHPwk!4nGPvBtE%5*xlZvAA1e`=#N8i) zJ(a(G1OVJj>w#YcLQ3;FA4sTLgY8%Qfmhv#kpz0+2Rew~{RgIqhhQwgKzxVkfnZ&T zA5KYJ#UL&E6567Sv?5c`;xVR458&2)piBYKi7*ah*98C>Isgt}8Yj}s zUyY8UG2#MF%do6R5R4xnlH**+;pD}jMj+2YrN%lwl(t!%O{J7ev5oGjo6Nyu+jUO5 z@L@eBU^xP0z6oMbbjJ>W$4HQ%c~p{Bc+CwmqqgYaVjUK)|NP8;h|YbOqGX+lY@Ona z$z3HXqSsYk<}8eN;eZxcqoL@4Q{Vs^DvA#1fO3?J7HAl(NMT0aU@+!~5;_D#NFD~< zU_!8p1B}wc%oar&Mgj07)>KE>Ow9=NKn^^`Qt}F^BqeTPQE$}>U-jcYp2Rf9mj?&{ zOuD4`H~<;oKv(DtOyWRVuGiprqyv_uJ_Tf528SD#AtMH#N4%AM859nIPcY>n=(JN? z6`O6W1zcQ@64hIZPz+{Fn(>qmII)#?MMW3+m41!b{wY!Ml!*ToR5Ac=^|00^N}aS~PV)O4S(WqQzAJWe!yq#da=?GM=1LDp62wMMDlH zQ9=x=aQTx8j|MNN#Z>Ll>pd5N#37n zLTG5!<`JoeRIAZ2t594SRV+N*ltOx9H3|etj-7$%um|DM_jO83k=@ce1+0e3K z27eIJVilSOE(Z+BM!n>V{!vVJMre>06>4f7v=IQNXv#r40H(wyln5byW)i(jjeX)l z06}GMnglb>2v!CsDW-%0b>Q4J-})rhNCGIX|J48vP-JuJ26fJX0N{XGrlf!blL9Cq zEZ(3`Vu^b837NHGK4V$o4SbBZd?tqR*N{_an%*L2eW*q2#36V?!poJJEuVUJ&YHKeYCkJhc zM`d3lWr|-k>1**1iA?EIf@coyj;vrLRWd}W$W0ZtBIkYHwi%zpjf4&e&?&)WnyzV_ z4oq8~#Y*x<0th2-rOKHU2Y4PTpt|P}|F)u^J}j1SBvAs4PAWzYTG}RVRlumq7Dj}9 zjucULEHJr;p~C5ZVhz7e7EA&Zl?2#BLEyI9EJ3zvH>S|eCTI;9*Z@uyuGZacoQw8& zmJorM$)sUdp%{>ah+i1INJWX(sE26ah#pV2-fY==5Rv|b zxc)^JAY@;JM+KQ{OQ9=N5Rk(fO4+=C*A!Y$f|6rdB_#?TzT#fe!Rh5SrxL9sz?$Tz zjl_R)0nBCvPsU0PaO|JBU7VxNrej9*<>^>P7=365%?z(< zSp4-Pv0=_wnTutKWmVKm|DnvyMNj-S>yW*N=A;@om1vm~j@Sm^@Uk!S)ohWLM~ZAp zYe`nDd{P52Ba~W;0$63NM8v=7XT0Pl^>CA(A`za965zh?B^n$q)&Py9WB{b3nl5gm z?5oQ*E}p?^#m<%yoMMM`j#4Jmw9OfEMh)1LpuK{)<=&Y`i#Ub?zr^xMBN3F-H_{0lunpxy8E(EpRBR z;MnT*T$P6|tr{t47blUI|A1;(`q9>=Rb^m>Y)}@cy-@g?5v^Db>Co`do|#su=-5Va z9~TYU=Eah(-U)U`_H~eNUXoJ~V-i+L*3=f8NGg=j7N2530%OhBq+%p1FxPDv3`%fY zmZf#JC9Wv0jPR=mSf?lhD$By~r-t7cJ$#P^^XIK)vQ*5~jvvwhDWC zkpV&Ke05>HJOpog%@p3GMc!5u$7}5_F`UAr9Qmhm7_3YLuOD-B)8(uh9xp~DZyULg zh1^WlwoF{zZF~6_*NQPq{HXKb2)|&jjmD6+EZ7Y#7^l`MigK4z-Kbui3)E(q(i+eD zc5_1O3Lpov1Gp{I{{X-VSu2kysGk8xqiovxO_rm$b4OQNIt|_vKOZt<$;lq3W#R@# z0~N%snqzt9t3eJoU4?ACS2;V;V1=SgU*=0EiG;nQ1&7s-8k*e=^q!O|p7l?uzJw%> zqe4fqNFSUPQ>d9R^+EqGN|(sN-jglfnK_MFqLGN1nFLjzUB_5enfM{n!tO?Ib;rcX zK2=rnSvbxAqBWWAqnfO+#;>vnOok7*nCMe#Q6g)?hEo&e2uZ%6lZlU&0k z_jUi6W>YtIb9Z+$hjx4ST%`8+t#)incjV!tJR)CWJNHQY_HyRydxtlKLUmNn_kH7c zR-`IjL{xqE@pykzQ!zN_H~acGV_f)# zb9lh?+oi1DcX-Egmqav5V1}P}D79IcxFGQ*+(r*XOSmdRQMiTUb-hv0Kq$3atlKd4 zI2hJ=8xx&ar+0@(D2fxfgF2{@Gr3?Rw@wTO>k-7J^cY?kum>VJVzODGs8+btJyK zZ10#4Q<(Glyp|8{Ng^B0xuBRj*f1O80k3DJtlkih|Ac2*E*dajqcB*sopBF=p2L9V-)16HV_*a4c0OPrIvImfwOIY8UTORn1i zMHWR0Wc=sYL9Raz-fMkTJN(6Y`somF>Mys}z;=L2NZe}rnX<|Gw`q)&tq;*1Gfj(ezz02l#&puPhDW7#-9x+-BX|Bftv znl3L+DN9{X<%`hMFDD&R{i$9U7`eyT4}{j^0UM4)3ZyE#JO4ttd*g5MQpJ6ZsJ#Q& z0jNB`s!vYF_k7(aJgC6BzyEuw|NG+{eDi!|<4@Mt*Zv#;fE_5j&G@qe#3t1%2S7M* z004l%IS27@d4aHuLOci^GK3g$;zNlCDPGjLkz+@XA3=r`Ig(^alP6K8RJoF6OP4QU z#$+kbLCTCIZypR_5TXDD7!w2y`f!BMq84Q)Rl1aEQ>Ra%MwL31YE`ROv1TpFQ!7Lu zKoS7ylVyQeAON!T0njnP0h%>OaPpTFs zi~ziL1NcF#fn$Iij1jhd+m&PZ4qrDIU67`BKhQ}h6p&&yLxB;Q z&pi)*JYS935q1|~2XsdJIWgu=h@XFF|Nj9DP{08RY{@y3Ow&z2jquy4rk;MXPN2wM zaPYtaG0afI4LR)4!w*3W5hQ~C6Q~a%>gb~m6IE0(w#o$i3y-!UlgP0F1~_1V?)s7u zN20izOtBg#^FXi(7aZ~;$9m|YMiHT;jG@mS#K|EKMteaa{3syz{;?801e>q)tsT%2ioy)zw!$y3k4mL29tLy1Jx{ zr@5qr)z@Ev4OZA;i4Bp&{{Tp_4j|qVqK`g+08~l^ax7{w8=X`LM}ZRa3$P#OP$0;} z!Zpk`EeG%^!pfXvkXmw!#ZXp}=JIa8dZoRWA^13L?X}dn`?9v%fO~Nxnk+^0(6wqy z)j5T0IxoC7CFbHfNV(|E(TX39ZUi$UjqXl<8^P0nO2}BBDqY$f&)Mg?l9$Pz2H6u zjb#Ve1Q>w7Gr&}jAbjqdPSgZWZMD27nsCv+#w6&_@>Kp;AU#sf{GkcYv?w)$PS)vA zmE9dKT-Y|fTld|0@BLuKM^e0ITdVAAXy1`fUisyjHyZe?XhLy^>9eRqh^RdZAjWnv zZ&F5Xar{10Bl|2{T)1-7kwU{GPVP7M*VTSq%pGWQ|HtB+Uy4eZhF`qOPQSArGrg}i zkF(f7v=juGX~a1iQ($>sqd)~#E>K=F6Hg2{q99BzHW|bX!CVKhLrIV(Wt!a3QgcE> zoz5V~F(AR7$AvO|kcRln-wkn?LwP+fB%)E(&qx)w;>plGIyB-Dk(fj!!h~rha)7g* zB?KNyqyY-BBC3k=C%RzCJ6fDks=R2$0uQc#O-l%pNB%0gjMGmnmxq$R~0KwUx;9HmR7lzh@w954ct zIt8Oq(db9vNyvuEB&Ry@=0|#3pg#t6CPe++!}JK!nJ$%*R%t0yp&C`Gp2Vmm5eOf! z$_FFdPpLW)jJZmJ0U1pdCSC0azW9cb|L6o!18e1};z(u^v#zA804&)L=Nh2bnar-k z1WjK3SHR1qMp9%oY^u#I)>V=ppMavngdMzE|Aa*){^fE6c*kttPC3fb%> zb|JZ9EDRIdk-kQ9ryN-=RO-6G*ZQwjdzITFmEy7SrP`S3flkO_tbt+J$+rHiT?1 zA}7Q_;?$?Te$+br;IdH2hG&F)A6Z=Un;Bv zCukc2VyKH>Bp*r3jLCk0bQvY)$pX2cLMw_YUMQ z;a16~lxx+JOE0Be|GBUEQe&1vq}VwwHjA14!&L1p=MPsjlndw9tMMf7>;u!$!<`_A z&j{U7W(?<8x%88X`gwGs`qa;KbskFh=eHxbX`qwA0s5xEtSo!%B@$*ob6xoOL+St- zcI~~-p5b(#lJ5sASgrrH-XV^-k8iqocNTuJC`P>c;U9maHU1?B!0bzdSS{5WX4f}n z{a(;-N;)?Xu{w~ZcV)lYAa>g#=qz{8|XW`6E z`)tSf%5O%7?~Q0E__FWa?yi?M1?wuTb1V(+s*koJX_EYFIwtG|C9v-F%isWp?|jhg zNC$xuQ2y4>|JB-0D9qeeoBgLjnNoy%;el+GqeY~ zB*xFsFl*GsZfL^g!o_^haM^@WjTkTv+lSqHf;c=S>`LbDq)o$GaKi$yG73wYFsycx z0~DRE|4xqT?pANn!fwH0P^~a+{FLr@G7acDXukZb9JLJW0uD~bi_Q4z?g(eT6e#;N zj3X}OH8?2JHYgpV>=uO)7;%XGMh^}>awJL8RXXylxF{vL$egY#R8}%(@`8JmO#xrB za*S)a+Hj6`h8Oi~an?xZWMxza&3%rrCzcT#!?E!H%k#jyBsyl5;2cFXm%)keDKp^TP0Bu@f(P_dKYf6J6aa2=PC!QjT(Tz_lcH^`vYAkH|EGWw zwHD+3!C_Il8R$0I#KIn)F`cF0lRT01rYyK0@wuaOVxC# zXw)eLAP;WT40Hg&jI2iqXi&b(A|~#5sHGU?Cfa_YZDb9FN{B_{Vj~fZITwXjdE7+5y5Ej8~2exl(fG<$s*r|RM+Fa2!iHH)xaJkRq<*ofgUIaW<(`XAozVfXF$Y9R0MxbMqRei{5HW;waT=BN5+gb6 zMwaGkR1WWU4C&B(!y)aF-Y$u|(hkEa?UK5#g!ly0Ms*Yg@6Z(J?P%wHPWDi!uR6Jl zXJCkcK*mP;=#4}7;WySUz#V&%PCEhvun^_y!eZOV|1gZCY${YSs8T1A zaR7{3j`b7##K za&}|vTnH0mLrf&nw!rp)zyxx>wGcfOVlpCDg?4bTEoyhwQCH7t#m-YcP$C=TAi0;y z4#`@<_X7*a^|Eh!^-e)eC)4IvWHKU8A_4M~gY}bg?KHzk*o3Era|_Tlv_?q|gNF;? zVDDmv4-|G+?}j;LFzmuW_shD(SVOxxJ#%;Iq<9{8Z;IP8|4o-J;U-OCFyow)w|M%HSgXu* zNEQ}_7zVrYass#vg!r|tZ;*+Y9_fb<-?L731Ii{jFUtvh^e7o&j_KU>U3(cuMY*Gs z5I}4cm7&v2spxWrEy%cub89%}jQO)>awf%thg&k2^{;`zE0PYhgc)PxW}1gdshHO& zKZKfG$*c$|v4|a!XLA+Y=q*W{E(0yl2B+^dr1#oz&@o}>91&~-XCwTsx12$h1f?#i zjE9FFn);}ZjX@_u-xG=jM`Tv$>mp)ht@fVp>JjUe8Osc>1(9rXwI=$xpz|wF_S)&x z*Am^hhTxf$<5Hp<@k&LP_%yjphnbT-`m*b(|4o}B03MfvKNv*)wuHh^Mz}yQn50Jf zwaa2yCZ7vOjtNLXS0Hi#FVZz#GIoaH_EIYuBCc$MlB3R~8DZ;tLCegZ(_78ByUQw^X|*@5B#f7ycEd}^=|IcMxy{g&uR-__;95X{~}ntRS`8aa0GB~1^u*!tV^cI%evc0`Z^i- z@Y-mu*E_-KId2XqO<@TR^JY6E&0#T(P&3u1 z%rLWY*hi_*`W8uzkpJqPjfOhj-~(CPt66q40#ew5L#${NZMuB`n** zO5>-(0CZr=|MJ++)Zct8hu)YhjyBnpG1tzPBh zh>o>h32#?HQ|Li)>Fa~V|C&cE(Bd8TZfTt44tW~fiFO@2a1W^wWI`=?W5v{x?cM}Y zO74XytFwOZX}{vZJ}E{Zq;b@J;(hLc$g{dE;cu;qW9se=w@iA<{rkaRK7D4ojeh3G^T((D_i&XiQD6HPc-NbM`Z<%x zFJxl4Wdm)}{Rk9{8vq~#IB+nhpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!UG ziX2I@q)CbcPg>Mrre#YV1r6{p@KAuw0Rt2ilTzUxbn)Ip$uvt~go%=9BT#H)Z&r zFh&gYs&@yqkGm#ZCj8&mzbBt1+}*+NhGkQVCi~QZ9oyM?6I9PIxZB~Yp|)6Kz3pXP zT;c8aTyu0a=-`78Mu^`;g6&mdUkrvc0(o2IaDY#Kj3oe0g!N!V5AsEYhgnz|<(EQa z85Mw23r!e6{|^O3sN;@2_UPk}Kn5w~kVG~p8jv3N;8IIGc(7s~Yc-VC0R#0gfLH?H zm}QhVPBj9KLX~(^N&*;hfM<3c6=rWpooP^+0}OOP0`&zTz=t%VrPg3QpoSBcO%2dz zk%ZRe7==n@$d{DO4HVd$daxG6qvTcR0Ah?`XV7FWst4Vp5}jr#L8MJqnpU8Wb)jab z0)|?RGOi|8tci)L0du9gcj%@@wVIFsdh}W=rqYqe-*u!B=Rl+r26bw#(<$p&X#+94 zt7gW^I90Gy)yE;X-^scYa=8Ma2V%Qf%35pQb_?TgrLn7AWY%W5(^RDy2Clt>b<0H% z%E=mI|E}+X8!y1!LR(;=3^(ksM9oIDs;Y_B#cxMka8(&qGtN3ySaQO4V^=E<;6Vc# zU#nCCEVH~QLN?;~@XR#VZ1c@H=d3e?NB(F)9!r{$2M;Ofjpv?H)W+uk;+i@qINyRz zhi_)Kx(b-%^|Ty0cfgxsJW2fu*!>+iRtqUK%>8j)V7E z|7MLlR5_|kjlR(I&OVwe!WlGsm|&{8Te+jY(ry0vCPfU<#O*DN7SbE_lp|jlfS8?j zbC2xR+#{ZBrA|(YA5{*uq0gc3fCx;W0vE`@2ExaEJ^ESDf_5}16=qHW$U#p~q@aZv z#Y#+@6VB&%5=)k$yts;8KTi)Jh zxmSHkHjr^tv+%{5q(lc{&f*P9velayN$ypYD_`nhbVaari)p-(o$?qGyGc!qSG_r& zu!x66Z$WA`lUie6x~Rm@Rclglbky>AbuK(Y=RO_Oi+=~NRu5OnN;GEVF71Qg5J6HU z`vs+iqY{(|U1-8vlB|DPQCe7FHKQ3_OMVKGlkHl`%w{_Cnb3UZG9QEhB~8#JJlsp$ z)I=p0;caRK$*pOr9Vw2RJcm z&65{JUGH2JIDes3p!_k{N?G+9-?`3^sIuuI6En%%eH3P&!T`H6Ah|uV|B+RlH0tVH zS;wCOwKvE)6+u;r&#L0Aq5B*gKW8~M_;Ez2I~2>8R+uvWMa`E5sY*2rvzTbn z-(KKp)wUD|`L{xLQYM~GD2c^-@6Ly}iJ&}BDz4)Iro zlEtFheGxdWyVYk;l>wlLYF^yU9KWDNpm;?}tcYor!m{#GfeunZ{}C+=TE3T4+kTWj zr%f<~uu8<%29z@z>e!c3LN=2vWvs(fXN$PtlmygMX(y8~E;C}w(adcyAyTl4SIpuT z+jX}N3V<~yxXiQ=)+t%Si7i3PL8W|XMQ6LEm8=vZ$-eeWV(U=Z&Pg_-9AL=9OdH%r zb$~OWO;9-LCOvatS{EBkKhd>;Zli2&w126y*;#Y4ehM+UW%owL5_AGLK-+C>@aFh3>PphY4A!< zjO`jDu>3d~k&!f8k;awonrB|>ybIKido%P#t)js}5_4O@@FdU^$0cbcQlsVC` z`S#6wMs<{~5GLaAZVs3mbjHvyRNu%!jdJ+<)KOVVKZD_+YU*6v!LaM(2kn<~E<8w& zqBzulyUT$foJ{BG7c(y}!_K`D^mcJ(rn`JTFa~;LDA<-2U~1(W&UN4Y@sN+aqFmnXKq&DU@5!-W6%5E`<}%LNc@n`wsr~Ys|NJ|X_woQ{j7$A20@dI;En4)}m8rhpmYe-K!K z7I=Z~c7S_DG+%>(3?zXV!GIn(f+SdiIs<}X|7LM@A~c_8F?o`L z3dCVI=wi($7ZW33Ef|DCID{&Jf;eb@&_)vSmrq%z0Tf7tP#A?O_JTfQ06Gu_n8!3x zK!eQY0BvOvjMsWz$Z~qsgGktS6O$lPxQ1-lh7SaPi1LL0R1*Gn5??_}R0JMm=!SgQ zhpVK4av@_&5(PXkaTL)sM0OFJm4o9pWjqLoU8Pk|n1+|;hn9GWEO>oFv{kZnhDuj% zBN2vQ6*;BzXhw*MsF;dC0*UcgZ%yI>0&oKq=p-EWGUsM|0Eht{CLjf;7$GtO0fZJO z!-+8gjAxM-S+|3==m!XbMg3%q59Elr|42X3SXE}YJ{>rR0LXVjhaRfT-NMN#q7BY;iiJJAE(bZ!VC zlppdm#k5%iph9lbB4$}Y32-M&|DzVcCo>69Wro;uQzlng@{7eplHSLP!$XdKFo}wy zd=F_+R#};rsaH8EiI7PWA=52sb0)1;SXP#ZmGv6Bm;*U+CtbEx4X}hfNt2fuo3hC( zbptd@k_UtcG!;Zfo3mKuRG3jiA~CcS=f-%6Xk-ZC6J*mA`BQKlBq;8+OCh#dfH^27 z_%fo&q|ccvzc%#Ux0xoICM_;G{o!X(iRRKY3C%qDVEr(RmH2WpMM6 z1}Q>H*_#7^n!=ewa5xyi|Cw%wxoJA4ozc{i!q}K82BYTro&;K>Hu{JC$e6G>U`sQc z7&bN?YD^*JoCc>q8PjDK=ae_Pq)e)JFqoA=!*U9`eGR%xe==5%VVpO%5I!LzS^`5b zw4r_36zE7-yrfvasF;H@Wo`kTGo*`CNjKC-i~$IfO?szzdV)Ecc6J({W~GY|i85a5 zXwIo}GIOLmS&YEgi+S3pOd6*m@sHOOSbY(0h9N@Y6_`JfL01A=qXQWfs+b_+m(Qt- z0-!|c0(M-qR^y(xrjG?`i3#;sKi>VMYyLl zdY&DjOjY7exMZ4;|K%3C`k`uRr2nZBcH)}Gx~)VAsT#6{6V#RA6+<72B}0);xs)}v z6qLagL#XMWTPm3!Bc$Y-W#Yp@+6H2R>Mz=sWD_}=Z*s2oqeDc-kzvJ>-ddiU*%xBT ztq%LJiZ_9)MW@Qj5w%2=K`~5x5|kXtB}q1tdt$A7_z?pUWDt9@nOLF^5&+=p5_zBl zvxt@n`Br&Cvl025wDDHOcrVEVjGe+JHd~DaPV$7koN9DlOwNYNDjA z~4beZh*Rqp~rU zkqO&wj5}tR(Y22Ixdgho60@WDB)Xt`y2}=Ps7o`Zn}n2j@Cm!LTf0s=Gm`7J zfh!V&YrDQ%qp~}@r2D(XyQGjiB=puKj=Q@WGQ7q6yr~$x6$`!8`>@B$BL?6WN+Pa4 z6m#FmydcrL)jPg6DZSI%5!F~Iy6BafB)&V6zC|)Gyt#W-I}rp)zL$8t5fT7A-~)Mp zn*+fEc|fUjQ6*=kkKpUN=Zn7#{Edtopu!u9*E%G3D6C^6wIr)g8S}Rki~~A=16>vX zI-mt3|EqM87O)sBIt}cH`uiaC=CayixgPz4tP8xtJnVFF~dTm#tYQ6>C-C)S859JW2|hM60BuJ|<~48brmv`kAIX$wGN zyi9j#wg^^0GHinGnXGV}#d2(kZybO^9C}ELMjoV=*zz85M8p#z1CaZjss3*%vEtS0$!ziX9^ z#fJc*OvH11ep~!iezhbNM!>`MAxfhh{9|DsGLjga#vWil`U4i&)`oS=%AFX?%uL6~ z|C+NyEpP@8i8kG4%ZB0ye?{dIl6T@D}aCI4%l_!iT8g>>N0t1v;PumNgZee2o447b4ux{wyN>tik_Tq0YerGeNlh%z;6n z0}g%AG7-_xVbBNN%;q=C{g;(KU=%M4KVs-wQx$Z?E^5a*Xj5dfP8rd5JLYL$Gj9K;txt7LRvBt;Mankm9pA(tr-T51JrHZ5DnMWjRP~@AID5_(lg#KP>32wn(!M`;`zbO(zn?qnO39auOJ?w04mxsQR5@< z#4kYCy`ouS?SV7R<_+%Pr9SKe$bXD%$8GMl@_b9`|H>&QJ*0*q=coS7 zdE(_TL?hxRTUjHuT&-{-zUP#dd>M-)UNYM<uNHKxH!74 zONlsbu8Lz2O58a;?Jv5p3}5p4x8@|T+EjKX&uGmAG1S;bP-HTaw4M>B9Fhj>7g_RT zB#yCh6?oe>u5id!coGvdUz9O4bz!j;KELiyt`!e}<}Z28 zPt)Q*GhqAU@2k%5CgYdi$&q{hE(ZQ|fBXx${`Lgb5WcWZ2N*Lx>S2 zPNZ1T;zf)ZHEx{fz$3?qT=0M-S<>W5lqprNWZBZ?|4W!LWzM8oGv>#e9&y^_+0*CG zh6#4U%rFw@QKU(gE@j%(=~JjtQRt}Q9l zK~;k`^uG|3oc!ML35A-NfCl>&Z7se+pll#N) zFV_F&&lNpL0EDPx0m%{*LcWMb5TJ(xMkuJg|NbJpXfujpn~fp!R6@_A0ea|R0Luyh zQ9PYIJitQ`7erBj)&dwHyAKCoagMzjm~IX(1Qvp$Ui=wZo~MiA@2iy&mk#RCRtjl%`Rseo#@c#8ep_bR+B1pB`$X8qmC?UHEV$Yff%l#5*?&WyHtah0V-oOxdG}-4iEU+ zeHV`frTegfXXTuufO8)L00%%33IGS{UJ?`lHicDqVTQ*_m^M5^dtp~($+U=Ek{BCRZg?r$ix+D`1yM#n8&VHXY#QhN~_$>5~E!LWo&+0HTjRJUS3&Ko|6NeYU~Mb)Go@Es`U6p#KD}b-=0sbkITv%=x}MJ-waF?N0|(etUP` zdk3!Oih-6JCC_&n8K=so8_(`{bviqNY>{lvyW16lQgE3$=PqQzgRb%J<64gbcJuJn z^P}K=z5!dzIdu*D$*6xWKIA>p15vCcdX=i%)viBkglPvp0c=@~;Dz%1vE;5FbkJ!*V{3&8k10!?~Ju$kgh=6Z%mIP`f6QI|}g1MUaBLb66?l7X71=JzQ9 zAgT=A65Kp-6wgW`GCQ4G-B2>8%0@ji3Xt+94|otU1Q;|@*!08thBiLdU?7MOG^AuM zI6-Wc(0&(9h^Ww}6Y0nkqyO!EO91PM(VehUoJi9scfPqvm@1Hlb%+nx1k{Htc%%+J z3>3HgaJQGv(_;%6fDwY^ET0lGrdlCZu}JeCP?9K%@*A3R24*^fH4+D+iIi2T(?|&t zRbQd2;~E)Pry~VYXbyZ?a-kK z2f{8@v5Qq$C!-iV$dbfxm0?+r)H+Jbdp#PdZSHnhn>9Mvy+oJ>#@SaHN2b&{+R7CYy$PE^k3zmEzdW8E? z2;KLvK7-e%0A;Fs?vteG83E`R%UE<$q=pN)p$);tm_G0{RM9#}P%#?H4!r<1?Q-ma zmD1D-l}0opj;d;hldY2=ZJ)_UI6{HSv zRA9+#;^Kw{UV&NpY!!CiNQRiWq+gGki6T{bTziGEw6@|#L(B~7SMPTpo~U` zzmx9kxYdQ3bpNFD7;IU3gC79^BJ(L7POqsvaiKJh=u0ms0XQK6L$YkiYhoNNI#aog zpnD6}(F>{?U7(6|nB*y{+|=_v0MJ9P0h~8ai4jXtN-&p$^(vJBpboRLDFD6(wy+Iu zj}$hDh4FaA-?FWg&V~wzLwu}?c_gg++DUr5$YQE_~lE>%s`tiJUCzib;v z9Z}ACJ`SCQe_RkgQjQCMq|W@awz;Q*8$wMT_q7z>I@VYq{`0UT0QRSZkv~(nX0uw+CJAp z2F#Cn0U0dJkDJDohLELSH_~D`rHAI7Bex|I=9vDmYI{PGrfANx;;9mXF`CDak{wR zqyJTdF0q)p<0_7JVl;konNNZ$Q#&E&$~0$c!1RDKoHKyl(j2urj!ap)jGGp{k}C?N zyVdHXDybyT(7^ksqC+VX01La(gPOnNx`%tO;=?{xDLlm38X(X*0a*Zxd83Ik8Ah|E zw}_VpX(c!Fqu+9#Uh_eo&_4G2JanrY2LP;+s*LnfF)_-jiZhuN+oQmFvVt%U4|x~L z835&zIewEvGm(*;SsdP5xFl@C1p%oR5ifb64v@N+Hv}EE+8My{2rW21>{-2y<0>6E zIYqHTO02}Cz(Vf>JxPp+s~g1WfWx0t9wh{sIB_3(vL&O?!%N#lf#H#Q2`@Z(q5trj z4v*5kW5WCfG?P0(=zd;DIPOnX&t+@d#qRvqOxP(ipQk{_*63>dt;xI`unh}m9t;d1N6@ix{ z5lIBnnVB@NN=cbz3cxaarU;6$nUuOnX&}o3Cv4%m7PPCf)1N2nv`?`>VDZdxLYsVI zop|D?LV+R-FvX(LnFg4YUs0&zV8)GsO?A70xidJ+Y_6?4wT<~qi|MrCx=fDZj?3)3 zy#tN@A<3PAGXXGyuO!RNkW0;2fQqCQ?GqUbLCfy@Jn5v8i99#RqP{O9PxiBr1Zzn{ zd&x}P!V$_u_KZ*Y{7(9;&r1x?5Oay!P*2csN)(|>*7zoL>rU|up8qLI4fmYS^?XS} zTTt(ePcxCeeR59%-3X?sKMeIQ^ZcDrY|kkh&$!7B`P$F|og3;S(M=SRRQi?2v(Li7 zPfom07bOgpWQpOLQ5?-t9aRcU+z9SWNjdweU1CiwX`ML>Et*>^>|sT`Sh$mXi9tdx zP+Oh6Sk059pdB3y7|l|JsZm&AQZ5ZsF&$G5}?Nm>7(JgfdvDuoOg40jkJX388PF>YgZB(t0pwbhiwRY|iqC0wY{kr0~)xau3~@)qA^pdaty%CaR|VBq zQ`@IH6w+8FygiKqP)ljR6w4Hb+H6#u35HTk$&4%H1gWgn`GlAF=H zz(TmJ1zN)R(~*5p_^eia(;t>Cj=4QJzPJr}`&qT!TNk}qQ8Ej}gRpEHo4^w`i&D$n zaT6D5qDu?W!(||cO;me*xcVU4eY#1zqA2L18s&m2`l+b6$r0^p)`^{@b814UQ8RH3 zJY<8A0qQghd_c(6Tm=N6qWIjao7hg%gJK&!*!_%ZjE^dO)0R?50EoBTso3S@U4$LA z*KOW^^tjH=T-MP#ZR1Gh4JSac)1#RTtJ_>0Io^o1Oio)xLJ@%Mjlj;)I-=#c8(^lnD))Wh9Q9j_ zSg;23nm+K=othh$d%aq+L(33=9KaS{LXtFt7bIGuDI29Y2{@T!qN=6O$=w-}HBiCn z-G16GJBcUgXeYtxVUj{$`1#EJ-8u>k$FkeqlNvC1NuH*4px}b10iz~tVO|8;-r6k? z<9ZDAB`JFH%nc$o{3#6yG_H_hrzx#d>rGuw6XF|Ip#USJ>OmU++PY#pO?dfU%?biL z08ZixDMZ?0J2j5`At3av z*=GH@*W1Hbh`uk`V^UEdQPpBL*>Cm(#Whog^^ws|NO~Ox|VbbXkL_ zp_;;}#?z_hxU6x>fu0LcBXA=)_OTv_!#qWu5N1hwLB%6YRQQ$O8_fyf9x%2)bg&b`9HIPN5Lt}EvHH9h#}I$fGIhU2Xzk%8>v?>LnE5k~;S zvZ&pdDkf**dW?jmW?p_G&MVd#?qrCNKlbC7AW5qJtXqg&xE-68siD7Y*^kQ;qPXfq zlc7J0$f!mtk_6CYc#CPOMoC{T2>%|E6&sp1Aov;yJBW5!CB(_RJ&L?J$d(LAfG4cX zoHJ`xB9dq()L7N#;_b~VsbfdZ;_ms)gCVI;^SYxYkr^4|uKT*btBgyAXRI9+a6Vp! ztVy{luD*^h`RM1Z1*u}YjK~GN8o?jrq-B<~D6d1_IljMvz~gIF-o(W&V&dM@7CVL9 zx`v!2)h^m{#3!s#S-nP=ZQPjw8)FuV8RPkE;+pNM_KHnb(6<#OHWFc3!YH`5C*33> zMsm5a+Oa-59#y6*KgvZrjZ40XYX??msot0JK5q0LysH+PX~VVyxi+x*jysg3`v@wu zW|FlIx45f04*AeNjo~nZm;aNy(U&%-a-8VSIWA;F6wfweYTfGv_gZu&SOjn6MGd9}%@t2?ut@HCstuR4>4%WTZKFjt5*LD-Zp}Gm zKw*@;;*d`~<+zHhY+vRoMlgdCf`(dCnXl<+a7Gt!g+OU(Vd&f;lSuEc4Oj6E4eqT| zHWeqJ4u9>~h2wL+K>rU%y@$r56fY?pWO7%!$qho@5I^#$g^$uWwQyGP{8(ql%5hS6 zZL`x}+aC7O^e9ShVpuaSc0%%@2)k8(r*S43hK2K$fO0A~iD}_*+d~{*De9lD4*>l0 zpbi%yYLGYF@`*a=II7SpKOORJ^YTue7uI%tFH(ptld>pPvZw>X-5E|{;rf2avR)MZ zCU^Wc>Uvoa{U%gIpFXEC`XloChwIY)40AJO&9 ze|+q5+)M^EWd94dJNQ9eqYrrkrKEn8nXzROCBE(Z>DP&_W1}y}+x_Us-FKwm_L}bY zWeMvWsTTqcHo~l&=mr@QX2McbWr)WycHxv-qK;9z+~L(9de`392`ATaJ#KS*$@d)z zZdeDHww+D9f(5DLa99P1u6bZy^fYc<)tSO~WW}ymo5@LcMYN0*o}!-5VdeVzt3_WHVpWr(Ms0UEk-Y z#5ZlTvuIPD-jbqqq{(x^USE8@USu_2+RvS2MR15loywnlb46NaGfTODxW_%}+Qlep z0*E;R@&7n*AfVug016j!!J|NcfB+G>3>W}0A|8PfBVv3AQDQ@Z1u@PkXfS}Efht$B zWNA_(N|OjvDv;^GgUFdJck=A%^C!@tLWdG9YV;`5q)L}EZR+$X)TmOYQmtCFpw*UK z0PM(;^YZQM_b*_uYC{6v8K5HK z0SUBLOu4skQivKLQ?6|JGUm*hH(O0>mWyD{qDNCkD|c;%$D~&SwFzJ{>)5hq)2?ls zZRoOu@nUZ1TXji;j&BdtN&GnSF?HG2MRem?&E`uFp%J$@{D{RucAfdv{E8+@MupxuEDI`yAe z*Eu*Lg%w(OVQ{C}cOQlwdiWuT1SU9EK|ly`q7Xnp7h;GIh9zNquyH1%N;EcQBZxS% zxZ{8>W)&chK?*q}k+;>CRY7$Cu>b%}?jXdGiPl z5Gx8*keQu%R#2IGv6-fpSppD5n|5)zT3lIDxuS(I;s{^pZ}GU-9*YXSrToS!_Uy3~k7y$RHatLF5jtN&{{ z5QG43`e|yGZ04#att@e2DydjD)#_9k9E7H^nL6v=qCuh8DWHPt)qns4^nlW{-Fo}& zv(ZYGKo)(N>u4Q)sA%G1pkiv{wB;E$(7QFh5HGk;ZA#R;^$JTSbQFukhDNan|L0$i!WEzhd4yBRq= zC&XBiY;C?dBl&U63j2%4wAnVGGtosGO(D-u0gxgPjuvEYK|(BWUqKad>zQO#TRleu zBlUpQ2m>5o#Mh^3{p(I94e*lIiXDxVtUlWeBhD(#iNVWYVPGoSAdAbUt^a)2{PN%? z>7fVPHVrgqoe%fK=HXbGIxa;eKu z2#cq<=e+J#5Zco1K6j*DQ7|=>W1eRKpa<3s?uL^iT?t|KmK9NMga5!Amh;eLM1~!) zPNKTqc2t-al_{@yWqQs7HTW84Q89+W3Bv5WC&mLd@M0VaPynr!O%nng)yI?U6`%nHXdeU*fRe*-p#lDLfFMV3fB|GAgal+Hy%xC`OclfkeIuYC zf7ZqX)(T(O(_k0}CK$nZ&QCNejstE8s=ZxuC4w0uUTAho2s$y9KY`^y=tMCv=B*(k zY1ZV7cbCwBj%OjHSq3&3!JG^ecf1r<)>0Y7W%_8A1i=d9#Dy{KP!Wf~69_Kzga=cF zu}h7^6PgNpQETZ+t;@`7i#iYmrf0uZFVwAH?H`jcz)bl?lhSWi%vj+QGL z<*hzQy>l{7Of3l$>9o?g(J?5TwglBqr^rj0=+btrwAV#&B_?9dkY_?g8JBYSObB&T zE;?Ky$Q;->FS%0>CuGw*tw<-$;gTmlWz+097}ScjX<(~F6BLaKPm-1tTx3+KAASZT zN7l8ke*LRdPP&u?ln-4%NRqkc*pmV(ps^wO=u9qpzQ#HPclvCMD+>bBon()$e$cF7 zxyMOP$>^RBq^3|`YAb01)S4L~lV@G}9KH%`t-0)JE&tb9RZjLytpmKeu*8wBtb(djDVrNlbE@_`rA`~qfz2|i4X)-|?_@V#rniYzv`NNrwae?g<*4@B zpf67h##6R;oH(Z5?=)A2JKf2(5fkACe+453>9BKHl4W!gcbDL9r<-jWiIFpV&6VlR zh?^r*#*F9Io2EFGSpA6a*8vO2f|Ay$ zEyN5^AOpw&w;)(Hi#TMnIg}_M(@0Ub8TxrWC})N#s^_=CnOgQV?c%1I+6?`UYkZ?q zw6+oiI|vn5GX8Q-wKOVc7Rw=Ht<#)lecbG3jABD}VGu>lLG7lncqEZx>vApRBfAuZ zS4Or&MulqNwKIRKm1&J8IBnLd7?rN>HL+eD99{E-abp$hw9CELu|^r7i`!u{&u!IP zKhNEG_7I${1?rWgvC#MaH^AMvX}CF{T<59-^eARs)d4CY6M+fDXO-v#e59POY?y%U z&BlCNY-0P?s6(JrFf?&>%NQiN$YUKbKmP&I#Pz0}PnewY&x#Xdl*Ao&S(xk&!smzL zN{~18$#ZOa8P=0~*>1Y+G2W(}+Af#j$+=l{vo;lnda`ECd0yUt3yI?_n=?x~%k{C7 zozohJN|Sb=^0Gt5>q*HX+k@gFHCi8O)P*FZa5c z>SHf^@Z5d&vLU@y;BNcf^FBMZf4k{>FZ|)t=J!UaIq}1S`>NYZU8gY+h*@DhWk9Yi)xd>@7OtE7vD^x_ zpO|uheU664d zkFC(+<|xek$yCV|Bh#rV2-#!RX=tN^6^`YJx{HX8J$3c5k)25 zudeI+ycN|mjedT}ML#nt9q zWlULCDUI8*k>v#ePnb}p@Kj}Qjx0N=<>uxdn)9M zwiJFQ*M43Rj{%$0d0CUa3Y0C;6@j2=a#@dF(=#R0Qexw??NEXQsb)gnWC%cOe%O1W z3Etf27oMe6VTHn}XfX~JMtWRE4kw=GsfUe)96e1RgybAGib4s?NLiE`jUpl?+8th$ z?ObO|DF0GRijX9AjYsYid2UB}VBsrz+iqmp4w4ET-$WilrP6l^_W55|#N4H8y1aeX229<_Von(YaOz8P_r@YlP*PWvxGHq9G!z%6s_jkUo{=S=0=8tm3-R4y(~ zcMYs+DHX0@<*u47nMh@OLY;luZN&N*zItS7S?rx^tnJz^B{l^HG>yk9XGx}uVwJ4y zob1*-r=n^IqGpK8I#id4O``qVr554G&7G&w!MIEgM(hM`owYGC3GEZM0bO8=~~ z)Ek*)0M~wP)aIY*_L$GoN3vpV*xFk}8fbr7Q^!zI-L|Uj93xiRD3%@~+tN!dC2O>d zS+ltl*!l*xm00q86VrMd+B|UeK;x|ps|Jat=RPh0ht-5>FFG2=v&qipwhjl^>dFX= z04q^M94!n59mRAma>Z6}WrV11RcD&6jGmeMiZJ+Qj8cjxZ)Tp$IO6Rdv7Y8`Q^--D zT~qmJQ=w{SiW&j8G(Z8_@By?e{L%~aYD5bs>Uh?kg8k$425#UfTy`a>k-}7r_NtTq zCs^&$Q@uV)Q#6^U{Y5t<9kg3v!TK`oM-7$d% ztHcHoyk%wvxus9$iC9*s>!PrU{#+y*vd;ka=nHeJNO?VMS>Kq^=&;Mpjl%6VH z03#8Tu@NINHw)*?ZVo~%Ns=s}1JzIc+=Qf61W0Mtq!w6AI6zApuey3nMRhUs-lT78 z>ZY37;jCNFLX$FmkuU`&xfza+yoIj87+kGP!|vvLvQtboYdd0XgyChd=%`s~TZAPW zQOVn_im+f(PpKGkLf6}xnO6|xr@S%|QHf}{_1e3FRaBbCu#|N5?Eg-6jTP$<%ey)R zZo;QZgD5Pc=dJBhRKlj_K#nORZ%XGduw`w%wQ=4=XiyV$QhO+tJZ41y^V@phbUmiI z{i|ZDz}MgmRjxP@=GUZHTnwpuCTkwv>HDpA>XCEElavl7n1TzK5uh32ew9j z^X4dEV)-sAIz%bjaAc_tp=f{tgv5d^&Tf37aas1i)uaW+TKk$;NVJ?ZQ)FmM891qB zGq%*^4H!md6wba3nl0*QzvTr6<2PML5-loflOsds&ANWHR^P`#KF>hTwa`{fPp>Sv zE|-Ja96Q$QI`a15-bFX2-xS3*Pqok>d-iZ+Bh@Ik3K}=gS^qNjLbe7+H^hoJ#d1k- z(~~gX$yR)oO&FqklayxHu3+D{5i0Rh^dY1ODSmG;Y5?bd(;msyw-{B`AjU^=y>_K$ z^MF6N0qQq|p9Nvt_k`=mShC{1jb()=hY}mO^j^4#_nw50cn)@W5t_J)yBUb5_=>;y z=ao1NqPPUo_&&opjssSU-*}GqIN{m2-RuAms2!RL_KxeMk0*IQ9r?{Fxsz{rgAWA& zn1~(OQGW%W2RyFdH+SZ+#!_r$wU??=TY<<5;CH-hX45D5K)3hA1P1BbT5jctDjU8 z9H57smy<`gmT#ten7xU)jB{kAH+gFpgbt+oDQ0tI^BWFm`MA_s#3`Q+z&cX7P1yXi zpYQt4=$)ff`H(Y-5DaQ3CHk9poSwUkC;_=rq_BfZVZ+h1g|<7_wCaJWTT&aNCF+pWEZZC*v?VfFxo0|#>m2Iyg=$AAEM2xbtlu;C3JI(STc@j`$OjXFFK z%t-NupE(9LRt(TU2SkAe<_L7ag*sZ*y95P@}eFw7~S2TU$K1T++IU<6MAMih=%xOPAT z4*?2X_4^laV5AAG4ppnRp$0sNcV;l#Fi2z!1YJ4+;4%n+f>EtR1_=bNQueo&Nw%zjlmU;8x)bb+ZOOkhN+Duq!jKDbV@Ob#HH-dUb07*0tL%*xP}6=52!-M?GCTPT^ZC@7JvSI?SN! zjkepmTTB4@T8eGG$%5l=pwO^euQCK<+sd``=CIGU0P_ynpO2C8I7Q6AHm;#8=t(0mIU`7Xu6o{jo0${K(gCJV4hbIf_p)ehy zxB-C%ShCFks|?U903H_N@rEcCx*^GoL`qR6Crf-2&N$_qlg>Kryc5r>3cD(+1s3qi zPp<^(qb!}!Qj0Ag;gV}nng8B;sG~e3o%AZgK2*^x#TFBZC&z38zz+I8(`>=({)?}( zn+mkarQ<|14m}SyBehjMa09PG{6s@7)-qxukH*kw#jLGW%}Q`ZV8e@WSzJ$4QbX<- zTJ^;8yd!nP^Nd?{)lqkHPgmF;tM)kn_w1>`Sr^npL7V{OLReF63PM4b(uI{xw-nSB zCgrlT4L`GZ6ZcmQO>I&`N)=w1VWFPIv?#{#fbmHiMJ=+(kz)K&%71O*xF8%Zeh3F0 zrUlY7Dh0~R$0*x$`Qubypr`>yd3Z8722 z8frT+{0o4uzzPchA^*DSYJtaYI&`~43u@HRw7wod<*3zG+ES%@bWAphJ@dNM?Ecjj zJDk!r(cb2!O_*;1U)3^)_wSGZuH`cs;*~|9Sa}}>QzGpQ} zeYpfnkMH@{y-XMb)@oOG?d-J|>|vqg_Pr;GDGprYlXReuV~}q;zxVPBs*)p-Pfj2w z4A356fF_L|Y5$yDlu05t5a10KLJ}R^U?m0s+DI07zyKtPe;u>i_9$3E3tkX|84S$S z{K5qwcqI$10{;S7wDPT&jN}0O>RgdIgQAz7? zjtinq#HB3s0q$|6A{eY(^N`Io4>P2iPNojmLug^kJlJYqn_2@Mc{wU?K8zL>RY$BC zV()U)I+q!9^2OFkF*8i;781$FD+Gluc6GBOP`HI1>(S9+%G+Dv0M^CsA?sg4%nnQf zcE`!64&qYy~gfRIW1x`X{}**BI-x#vztNQG6VVpLympU%L4Wy&%=b(7;Ea z7p)Ml7&lT6bE< zdFd_sQ;1dA^gkc*fPe-#2`W=U5;MI(B1>|>Ul~Z)1+k2XE0pSD8QWOLCi9ul9HBIK zkpG1`2%&2{c_IG32_B5(cwnBo#xo?v5lo_RjtZSop_3T4YA%sz(dodWhXMU z#lU);W0`50HCBXNP7wGB+z#23Ic^Cfjb2OJPvy&nOnn`2tN5Llo_0H~;)(TQQ!eA$ z>yg?eopqrH*N{4dxZg3VZJFi8_Oge%t;!5^dlJvgFjBY9J&Hu>n!HzSb6ELl4uCeA zo#fh=w*I;fKkdmT?kY015gyTM+nK`~o>8-VvQf!+loDJW6bB{qk`79C7b0n)l`bvu zj#P3&{d_Y)qE%cE4v;n|v86L3=&Zil_dtzc$t4@{a04WAKo7g7w6|ULuIc5x>8O>KUVPSOC+DRsIh?0v{e``9q zHgD=-7RD58=iDCADUZ*4bZMH07)fUdc*-~VGol%tXe9S8MJhdXfC(L2IcM1@i@xxt zF((>C(ihBRT(qA7&1Ykh8P!yFv?eR9!y4)N(y#WKp7(+y@qPKKoK&3vSk~nc+}gEn z=4hlO*W=RSaFmWRnvM~hYG*$i+R+YVh#q8SX=>(Cf%e+TyZ?AHop5b%|_HA=N z&Dv2Bw!+ZDS%tJ3Fb}kdqPc`W1)Lk-`PR2oSG{k4gGk$g;dZzC{qKcIn*ZPhH~7M- zt#GKUn^OI`x1DNTGbP2PdbDKt#yQ^cgG1QkAy-Pk17mTKpB&{WS9zu#{uGF>9Of~X z`ONEENt)lh$1Qitz;WJlpZ`3{>3%r8fnIc@A05?^jTjD(jdW;}956h0`qZgj_3R1V zx0E%^rl2uPb$ZzrGYX9#2@QJ^6&4-$b znBHXNAD(PDDKC}G@?SCc?zN#6AN$#_59@<67jxw> z&r_^%nuKE z4S!q)186KEItw}m-~isuAa0O8&;s$`PX+hu_e||Y)=lk>&ue&Owv%D!UUWk^$i4cPV?WRy} zWP=kk5fno))uhnxHjfIckgM)u49%|qzHkj)@!q(~tS&?g%xVN$Nz7hiFEoG+fy?wj zsa<~L?r?%;1cC=Fu1C=1B6#FWbV3L!SKN{Qgw5n=QYUxPf}}9`mTxL-#AIZG#1KmF)W?0? zM<3NkAL*@RawLI1k0JfB>}=wIrUhuwBtdAVATnZsJfk8Ck|U*Y5qZ)q84e^xGWkf- zP!`1{U`EDPa!Lfthvf2GV-Bt!V+Cp)sPpp{VlhVmO(vpZNEA9Zlu4!PKjG0rqqM3t>;Z9XHsn(LUXvXuvQ@R&(_)S+&&+Rabv?Ic0UbYLE78 z^96wwog$S}T@_iI74Ueq(tOofr&T9~wItuqCHSD(SW5wpwF+%eLJcKcQSVk=)zsFM zTGKWApp{vTYDv`DNHEsY3Z(AFq-DK(Q1R{kD!!C=jT*GY8j*}C~EnW|{_?%Pn zFmx!85@8=U{^r#+4DVjgB1$H;t^e9JW%jdv{+0Lwwm5^${sKohA=YFwuR}$a3F9#% zPu68sPhzv92h_4-pJd_^09-YNNA*<$1j{{EhPtv%E=PdZnxtrTQEb>1=s@-zo7POr zK&(vhWv7McVW&R+XvQ0)-`NRe*aQ&V$=#{1i*54S9z&!bI+o4Ki7nivuE%p9COf=VIwtoJDlT(#2UT%_;9z|n|j%k5cN|O_RFF58DmVzmm#2Rp~ zxTJm|!eKF(gi|hN9i?+O35Hf;#xO1=?K1sDA_se|Q2=dq7sY#P5QpzA15}2auy2Ba z57(si^h(%>&&@g2x49PbJ}_n$TlR>fc;lK^Z=N@WU1$eIEBC&sHg8iUb8|OYF?RQ* zU-2#ntW?KTrq_HBfB)W6LD7bPQ!j`+v4S@^me5v;^O($zFK~bN6fq$B{G}DWP$Me$ za`hOI^NotXhAvnWZSXkT2q`-n5Iiu_0g`q(x@k{hj5=BL?u4t1^q1}CICL47-XJ-V zQyEWFw*SnudX@+xYT$zrM<7+%ma%P-kH!aymG%(0DZco19dtv3I4PR&)NUD>&q--b zIhmW8;c|JCUQL=KxJ}%RV^5QqZ76&$(wV#Yl9rj7y;+>iO<6@mHpYXR2QizE!kEX| zoe9pIiTIu8d6nHJol_N@m6)FQ*^=^EpZOV}oy;8p00@8}vut7k#6pyR)t~J+pdY#? z%NZUanxX}Iq5nUn4=`(YvZ4>TFKWvrzI$c&$zYZ-S|caSvOyMFf5Q`ma|Twj0K%H-xR{fU&WnwpGO&1IIxH zq6ix-H2-`Pj*SYAZ`L=tDFIR_BvhP7Xxj^&Wrih z$K})qZS$HywU^QtTkGX96)PSJSGdmgZl!CA#^dbYenTWjw6YZ z3j&9h3SG0h$+h%$H+{|dTe>wJ*Qa}+g&+$K8t;Sv2vpoCJb>(aMs`tiodLDib3LdD z^Vz4pC}tbfu-jI3sz00E*{S`+PuknV-6&>TPHY{Uqn+2qy`;fi-P?UiYyEz?eOcYz z*U>$k>D}9Hl1F)TToG2@=N;cwo81GR;PGxSjDT1XzTe|@;L{uw$HU$WKB^l2CjV`X zhCci#;y8O66(}iP;-Jr@-?G0yl`J0xW3qq_6 zJ0%bI^*X%O?4eDAA1$?e2}hPbdg)D1c%Er)U@|pRx2Y=#k@NI1Z?>U#F8_=G;Z0ux zPnphsi|nm0_U^)E#3lh2qRgxD--noCEk1Z_`A2IlS#ac(9w=iV`-RL3hF#1_+=K>S z2=Wgg2ik(Fc+V}2CVQ{HAt)T3Ebx<*iqvcIbup8L`}+C;0)s#C2eQMjez#f%#}e*X+PvgFB>D_ed% zcBFtDTEiyfoDr)7iV6#q+BVwv6Kg2MDHC%_6_yYVWFU8%fX(S36-8q4XAl5E2oOXNV?D@Qh8k|jVTT@m z2qH`8g)|dEtHFhk16tr9z-c-phFwn9P1lnH%{f<8b}MGa9Do7dm=gvw`bZHM0;E=( z02ufo0Bi*W*n<%V3?LsDzugcW4|x$(onLWbnGg?uDR+aG$^TuImkxQURh^hGC=^8$ z*Xa-@5Aty*QInm8$Y-B^{t0NHf)3ip2#^qSu`Y!pb_{9|om13B_tZoQQ5k@q;U$)$ zshG~znuF;b7VBWd-e#$M@X<#UV!xeNzyYEfv_KA85F5Z!c!nDQPzC8ghF(UcdTLz8 zDr<*@Bc2Fqz4qRVZ@%@;`%#Id(%YY40&G{5a?zcY0Igbhb#Ov-76l`(c5y-OkFyql zL9GX0<N%~F?}n$}3p&VYK+191`DVdcMRkKhW&ghAS`;xmuq9V!;WZXs#P$_M z059>Iz@z#ejdapVFU>SZ+itYko(4r78l(3WWVB2JOqp7c+D3aRS502JS#8NSjW%Vz z89I``?h^N7g9x)IQ>)0?gac0lw>VR*ogVbv0kBcYRn|?h9baok;+Bwll_GXFv|-QJ zYXBY-%V~;IE2|xM3Luwx#hQno8e*!p4vvUkaE zfgV|#NhXE|)1k;3nggrR6bMH|AyN&YB^KIA2zd-Fq7jdXM3MXuZbhPO!Ix?ytueR405F!PA&}#seqGL0gz_Bl5 z3Sau<=m+*Cagc;8q#-3kKa%9{Ad6I$8IjVz1nNY61H@DgjPSf{E%A^GrMp+23wT@1 zU=3L0H%x&sfP0By8K2i5G>$SkcER2oVbnb|vB^#XnA4aLutzUpijIQxCO01n(TEx` zk@lNNBd_u`JWnv zzA?uu$9v}&1(L(0+^Rrc!KY{Dlfz}LM@g1b&3b_4F`i&RScN-{Nqy;nj4tbN{d*bX ze&bA|q6G&F1HdwKs3fAYszolU;7Nw~(zyT1b*`6j=rI-8u2$0PCeqp|b_jM(04b%Y z@)>MBDTbqqy^2;py-Je!CKHXiGNl3fnLd3sKAxORXgJGBnG!OytJsWFGi!hV^2j}P zHGq$LRLe6dN7vZOcD6`+nnna*gaYNMGKj-I8dT&ZI8&AngoJ2n!lo)TD}=XF|j{ zW11CaPD*uVw^fn2)`z6)~KBwXi@3_ZX$MKJo zI^2*Mx5!V9@{}_T;xJLT%3c2Qn9JN#1fRLJN&Xm<+kEFd?|EHAerK5beCR|kdTxMj z^oZizF*;AW)1MA?8zTMPQLnnyukI3r14p;IUGu6pY*W$!tRpP<`O+KHbfLSl+K}Ez z+f7pTi^N@Nb4R-fMN)IR-yLuwe0#&|-Y>PsuBdV=31J1lp-;Qc)^f*_XSCj-t~?&{ z(2{r|r!JzskL2!+OC|r}ZI1bBv1jz8x36njSU^lQIyDRKtJz@m)xnsJFqRKt#<3nM z$`dElsty-L8fABZVoaD=d#{MS8X_#n!_@k9O_0XNP1nh%S- zQdFT_{~hzH?!E67W2A?n#5mvj{AJ2@PnN(xB%4;ulyAGWpB<@xZ#DmzcYPYcM?cVK z5fVauhoemiaex}9d#WNKsFQUN_=wKabU1 zy@V7wkPruuR7m$7w}*9SCra&-X@Vgy4)y6{wbW!xnZ&wGb2qJ9wyV z4E9w^lsR)Ib-~egxk!P9R%n@#5PE=oLDX%x*m~bbjK5)k&qjey$YyL~i+%@0deDkL zXefOLjVV%%7lMYj^fcDEj8!;{oMMHOHCf@bjE^@I%t&e4wuB+4X?h@h^#fA1NRNgR zh|2Pf-`M|3Z>Ns3xQEy>h6j|Q*kZcD2@^-joqk=B59EQF_jAuj!ub?<)|Fg zIC*RLJEtR&B6)WL_k#D*fLh#bL)&=wUisVr&c6ivb|zhWEr2p$== zUj2pWp z74rXmb2e{11APK!eG@Vv5g{S*(jt6;Auafd6jC7y0RVbn2jIAbOqh)I0VAHdTNM(U zg+d+*(VEI}eWIceQHhqy_ngU@5U{y`&sRTUL7GWLLzLH<+W3_12zj}gox(YehKQBB zg-iH|6xb9iNp(1zsVcU)gOR42b`>jn0F0WMnYx9Uq9TjbD2&(me8h=7$CsSSf}hK1 zjN=F&1lXMl*oJXlR30ltq$5U4#Dz z9JpS#p;AavB|G^_oP|Ys5l{^PWjqiVY9uFP;xKB0K3IY<=p&RoK$icwjJBCNk!FmC zL!C|}pRK8x6VjeKfqbD^A=inX&q11fDmJXSozNL^%h{W_$q?qrb&xlmcp9ClbEixg zd}Jw_^*D@ONqv5Ie~h_>1;~PeaX4RLIaU)ZhY6FoaU{%j8ncK(kOQPY^p`DSLO_K{ zrg(590!lPhgONFWa77^iuq_W#sN|`Ro!6Ym8KT&kI*j@t5aEx2DyiNXItz-dr#T_N zi5`uUjJ6m|&iN9*8Ll@dtkV~vMmT%|fI8!tsk??a&e@*~N`>IWBgkp5@nrv&OuC<( zlAFj`os)Hg5t>6@$*9J;o=ZZT0$G{vI*wDNj)iiC4iJ@8NSo=AuoVfO5-WVsDvRcL zuh0oQ_qwP6N)!Q^hur6{<*HjPXq^iEdqFXA@nAARkr>5M zuEHdQBP|Zn!={8>;TYBq@YKnUO72GAy(sEP4{ImlCyxVjm=0Kqn-%1V(?2 zqiIXBHJqijGP+<^%1D!AY%BvlUYbU3by`8PC1%P!)Uijj=&jnSuu{33)99}XyCmn? zsKZ&f0Sd0?YO#$tklU(&siSG;1^|istPcvHNu{z7b8fR_tw|*>;0phJm1-!4xPx%@ zAgJOUpovi~<#eG3f+@8Z+BX=CB3w~o8>yO&O7cJV*fq$4EU_As;4vHVv0P1yt8Gzy zZo_+b<*UyZ5y2;c2FqryBq0O>vTvBN+4whBh?^rauFaaCYWb7_d$1|eA`$`-noBhC zdS4GQcF;?XnBufO2cKJF=*kqQ$Cw#Uwp@F!ctm_)o_*yC(oQwjRxG68Fo1|xH zxSRVB68OCj0Z8Wwt=B8H46ML@TDnL#mNiO^>f5Y82!)0VE$JJ6$H;5uYY|ddz4Yt3 z2bhPyNxF$D7Va5Jw8e4@8NXmBe?B6>4!|Jxb{7sK#6QbF%>@4&B;^&4k}V*$TsYdP z_h%IK7$NuZibm5l$wEesmq0KHwxx@sn$uD_ctDVqwO%nLPOLQogou|grK<(-N#zq&H8xgxkDx+!pZ@W}3 z_eX7*Vq;#GxNn>(jZ;9gEEB~0#N+aoGbe)#Ia83Ssq*WGb`ZFm%EEa zLY(KupxF4lu_CDUE0X0(L!f+`YU{1!44j9Pg~7zmrCa~M&U($yixl2T6zUtI^9x=4 ztBs;ez|c~z47SerO2B@roZRfd|0+*rx&%6x10u&OeM+UKl>3y$V? zx@`HU7R}9NplOrLr203?GhD#jXpjGUnj&M)&HQlW*A_ecbz9jV?Zjjuh98*p%%i{r#>d-h97M)2xRTD+qQmvotZJj? zwzhCQtQT}Me>}Iw(q;>V0C=x{5r#YV5(dYQoor%WVY7@pvBK^tU16Z9TOgmiQ$t6vF?!9Y^jJ*OH z&xIVm&@#I1eS`9noF+1_R@RvK;ln-M5)SFJtAsmO^f}y?#7Dgz(vn_mU85z*BRGmn z4RFj`?QbZVwvZRdV9UF?do>BPf(e2^DU|;JO&eveI91*y~xX;0d49 z3zqvj)9E_TnprBW>)`nuf1XMbI$h&1ZmD~mH?2xZf=|c4%Qia*$q741S!eS z{)@3J!3-wtSeUr~Iz$rugC5?js44%T{e6QisGX4<%MrcX-L2Qtr_Kr7-|YB9EeL^r zJMicpkLt>w*W8p?IIWvIS=Id@sKeO;nZDY}hYK{~I~_s(r;2yJj&XLgYNbjH<0`eH z9a_;r^Oro&BX6xJI8ywz3L&;HkblMX#L9Iww`{Z8sI*yJ>OCsOJ)cobk^@xIB-mT( zD5xC2Rh-*aqy=Nel@jw(TOO$wX)rkxt2#B^Qyr@{Gk6gN#})ulaBeSfTCswrV82;1 zu_jE0%zN$G;{AAaPZ2QOl^M^C)+}t_8jp7B5b%nOpqo0u8p&p;?f3eJupao>3lRX| z_a43J01v6a=Z1oPlhZL8nI1-xBrJOB¨78?&cqr~=uR13p#wORUP@*1TSv+D?@>Kyn4sb5h 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%0D?wdQ0HbTcWN$NsF=qc}G(#P7 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