From 7881e86e9d5d37c596518362363170fe5f5305a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Heuillet?= Date: Wed, 25 May 2022 17:21:34 -0400 Subject: [PATCH 001/816] added main changes from Golang Support PR again --- lapce-proxy/src/lsp.rs | 105 +++++++++++++++++++++++++++++++++++--- lapce-proxy/src/plugin.rs | 5 ++ lapce-rpc/src/plugin.rs | 81 ++++++++++++++++++++++++++++- 3 files changed, 184 insertions(+), 7 deletions(-) diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 41f74f7a97..4d97f6db4f 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -57,6 +57,7 @@ pub struct LspState { #[derive(Clone)] pub struct LspClient { exec_path: String, + binary_args: Vec, options: Option, state: Arc>, dispatcher: Dispatcher, @@ -84,15 +85,51 @@ impl LspCatalog { language_id: &str, options: Option, ) { + let binary_args = self.get_plugin_binary_args(options.clone()); let client = LspClient::new( language_id.to_string(), exec_path, options, + binary_args.to_owned(), self.dispatcher.clone().unwrap(), ); self.clients.insert(language_id.to_string(), client); } + fn get_plugin_binary_args(&mut self, option: Option) -> Vec { + let mut vals = Vec::new(); + + let option = match option { + Some(val) => val, + None => { + return vals; + } + }; + + let binary = match option["binary"].as_object() { + Some(binary) => binary, + None => return vals, + }; + + let option = match binary.get("binary_args") { + Some(binary_args) => binary_args, + None => return vals, + }; + + let option = if let Some(option) = option.as_array() { + option + } else { + println!("binary_args value should be of type [String]."); + return vals; + }; + + for val in option { + vals.push(String::from(val.as_str().unwrap())); + } + + return vals; + } + pub fn new_buffer( &self, buffer_id: &BufferId, @@ -368,15 +405,18 @@ impl LspClient { _language_id: String, exec_path: &str, options: Option, + binary_args: Vec, dispatcher: Dispatcher, ) -> Arc { - let mut process = Self::process(exec_path); + //TODO: better handling of binary args in plugin + let mut process = Self::process(exec_path, binary_args.clone()); let writer = Box::new(BufWriter::new(process.stdin.take().unwrap())); let stdout = process.stdout.take().unwrap(); let lsp_client = Arc::new(LspClient { dispatcher, exec_path: exec_path.to_string(), + binary_args: binary_args, options, state: Arc::new(Mutex::new(LspState { next_id: 0, @@ -414,8 +454,12 @@ impl LspClient { }); } - fn process(exec_path: &str) -> Child { + fn process(exec_path: &str, binary_args: Vec) -> Child { let mut process = Command::new(exec_path); + + for arg in binary_args { + process.arg(arg); + } #[cfg(target_os = "windows")] let process = process.creation_flags(0x08000000); process @@ -426,7 +470,8 @@ impl LspClient { } fn reload(&self) { - let mut process = Self::process(&self.exec_path); + //TODO: avoid clone using a &[String] ? + let mut process = Self::process(&self.exec_path, self.binary_args.clone()); let writer = Box::new(BufWriter::new(process.stdin.take().unwrap())); let stdout = process.stdout.take().unwrap(); @@ -473,9 +518,15 @@ impl LspClient { } pub fn handle_message(&self, message: &str) { + println!("Received message! {}", message); match JsonRpc::parse(message) { - Ok(JsonRpc::Request(_obj)) => { - // trace!("client received unexpected request: {:?}", obj) + Ok(value @ JsonRpc::Request(_)) => { + let id = value.get_id().unwrap(); + self.handle_request( + value.get_method().unwrap(), + id, + value.get_params().unwrap(), + ) } Ok(value @ JsonRpc::Notification(_)) => { self.handle_notification( @@ -497,6 +548,20 @@ impl LspClient { } } + pub fn handle_request(&self, method: &str, id: Id, _params: Params) { + match method { + "window/workDoneProgress/create" => { + // Token is ignored as the workProgress Widget is always working + // In the future, for multiple workProgress Handling we should + // probably store the token + self.send_success_response(id, &json!({})); + } + method => { + println!("Received unhandled request {method}"); + } + } + } + pub fn handle_notification(&self, method: &str, params: Params) { match method { "textDocument/publishDiagnostics" => { @@ -515,7 +580,19 @@ impl LspClient { }), ); } - _ => (), + "window/showMessage" => { + // TODO: send message to display + } + "window/logMessage" => { + // TODO: We should log the message here. Waiting for + // the discussion about handling plugins logs before doing anything + } + "experimental/serverStatus" => { + //TODO: Logging of server status + } + method => { + println!("Received unhandled notification {}", method); + } } } @@ -564,6 +641,22 @@ impl LspClient { self.send_rpc(&to_value(&request).unwrap()); } + pub fn send_success_response(&self, id: Id, result: &Value) { + let response = JsonRpc::success(id, result); + + self.send_rpc(&to_value(&response).unwrap()); + } + + pub fn send_error_response( + &self, + id: jsonrpc_lite::Id, + error: jsonrpc_lite::Error, + ) { + let response = JsonRpc::error(id, error); + + self.send_rpc(&to_value(&response).unwrap()); + } + fn initialize(&self) { if let Some(workspace) = self.dispatcher.workspace.lock().clone() { let root_url = Url::from_directory_path(workspace).unwrap(); diff --git a/lapce-proxy/src/plugin.rs b/lapce-proxy/src/plugin.rs index 3a089183d5..74dee07a06 100644 --- a/lapce-proxy/src/plugin.rs +++ b/lapce-proxy/src/plugin.rs @@ -171,10 +171,15 @@ impl PluginCatalog { let output = Pipe::new(); let input = Pipe::new(); + let env = match plugin_desc.get_plugin_env() { + Ok(env) => env, + Err(err) => return Err(err), + }; let mut wasi_env = WasiState::new("Lapce") .map_dir("/", plugin_desc.dir.clone().unwrap())? .stdin(Box::new(input)) .stdout(Box::new(output)) + .envs(env) .finalize()?; let wasi = wasi_env.import_object(&module)?; diff --git a/lapce-rpc/src/plugin.rs b/lapce-rpc/src/plugin.rs index 918da51b1f..82198724f4 100644 --- a/lapce-rpc/src/plugin.rs +++ b/lapce-rpc/src/plugin.rs @@ -1,5 +1,6 @@ -use std::path::PathBuf; +use std::{path::PathBuf, process::Command}; +use anyhow::{format_err, Error}; use serde::{Deserialize, Serialize}; use serde_json::Value; @@ -27,3 +28,81 @@ pub struct PluginInfo { pub os: String, pub configuration: Option, } + +impl PluginDescription { + pub fn get_plugin_env(&self) -> Result, Error> { + let mut vars = Vec::new(); + + let conf = match &self.configuration { + Some(val) => val, + None => { + return Err(format_err!( + "Empty configuration for plugin {}", + self.display_name + )) + } + }; + + let conf = match conf.as_object() { + Some(val) => val, + None => { + return Err(format_err!( + "Empty configuration for plugin {}", + self.display_name + )) + } + }; + + let env = match conf.get("env_command") { + Some(env) => env, + // We do not print any error as no env is allowed. + None => return Ok(vars), + }; + + let args = match env.as_str() { + Some(arg) => arg, + None => { + return Err(format_err!( + "Plugin {}: env_command is not a string", + self.display_name + )) + } + }; + + let output = if cfg!(target_os = "windows") { + Command::new("cmd").arg("/c").arg(args).output() + } else { + Command::new("sh").arg("-c").arg(args).output() + }; + + let output = match output { + Ok(val) => val.stdout, + Err(err) => { + return Err(format_err!( + "Error during env command execution for plugin {}: {}", + self.name, + err + )) + } + }; + + let data = match String::from_utf8(output) { + Ok(val) => val, + Err(err) => { + return Err(format_err!( + "Error during UTF-8 conversion for plugin {}: {}", + self.display_name, + err + )) + } + }; + + for l in data.lines() { + if let Some((key, value)) = l.split_once('=') { + vars.push((String::from(key), String::from(value))); + }; + } + + return Ok(vars); + } +} From 1ed313ca5f0ac1b9d5cc06d79ec7b100ea62fd69 Mon Sep 17 00:00:00 2001 From: Daniel Holth Date: Tue, 21 Jun 2022 21:22:47 -0400 Subject: [PATCH 002/816] add python language_id --- lapce-proxy/src/buffer.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 580a11fe96..6a3f6aeb9a 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -152,9 +152,12 @@ fn load_rope(path: &Path) -> Result { } fn language_id_from_path(path: &Path) -> Option<&str> { + // recommended language_id values + // https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentItem Some(match path.extension()?.to_str()? { "rs" => "rust", "go" => "go", + "py" => "python", _ => return None, }) } From 9e6430f67d49be5c1d20e5f9db5ca1b22703a7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Heuillet?= Date: Wed, 22 Jun 2022 03:32:30 +0200 Subject: [PATCH 003/816] Addressed PR comments --- Cargo.lock | 16 +++++++++-- lapce-data/src/editor.rs | 14 +++++---- lapce-proxy/Cargo.toml | 1 + lapce-proxy/src/lsp.rs | 60 ++++++++++++++++----------------------- lapce-proxy/src/plugin.rs | 5 +--- lapce-rpc/src/plugin.rs | 22 ++++++-------- 6 files changed, 58 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9acaa7a30..251e4b7084 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2182,6 +2182,7 @@ dependencies = [ "tree-sitter-elm", "tree-sitter-glimmer", "tree-sitter-go", + "tree-sitter-hare", "tree-sitter-haskell", "tree-sitter-haxe", "tree-sitter-hcl", @@ -2278,6 +2279,7 @@ dependencies = [ "jsonrpc-lite", "lapce-rpc", "locale_config", + "log", "lsp-types", "mio 0.6.23", "notify 5.0.0-pre.15", @@ -2482,9 +2484,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] @@ -4606,6 +4608,16 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-hare" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cbd59e015721be7de5449fad7b7d5302f0f8544b1589f818d9a38afd4ff198b" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-haskell" version = "0.14.0" diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 9c17290071..7220d77380 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -289,10 +289,12 @@ impl LapceEditorBufferData { }) .collect::>() }); - let additional_edit: Option> = - additional_edit.as_ref().map(|edits| { + let additional_edit: Vec<_> = additional_edit + .as_ref() + .map(|edits| { edits.iter().map(|(selection, c)| (selection, *c)).collect() - }); + }) + .unwrap_or_default(); let text_format = item .insert_text_format @@ -317,7 +319,7 @@ impl LapceEditorBufferData { .do_raw_edit( &[ &[(&selection, edit.new_text.as_str())][..], - &additional_edit.unwrap_or_default()[..], + &additional_edit[..], ] .concat(), lapce_core::editor::EditType::InsertChars, @@ -340,7 +342,7 @@ impl LapceEditorBufferData { .do_raw_edit( &[ &[(&selection, text.as_str())][..], - &additional_edit.unwrap_or_default()[..], + &additional_edit[..], ] .concat(), lapce_core::editor::EditType::InsertChars, @@ -397,7 +399,7 @@ impl LapceEditorBufferData { &selection, item.insert_text.as_deref().unwrap_or(item.label.as_str()), )][..], - &additional_edit.unwrap_or_default()[..], + &additional_edit[..], ] .concat(), lapce_core::editor::EditType::InsertChars, diff --git a/lapce-proxy/Cargo.toml b/lapce-proxy/Cargo.toml index 496aadc935..6b762850fe 100644 --- a/lapce-proxy/Cargo.toml +++ b/lapce-proxy/Cargo.toml @@ -33,3 +33,4 @@ home = "0.5.3" toml = "0.5.6" git2 = { version = "0.14.4", features = ["vendored-openssl"] } lapce-rpc = { path = "../lapce-rpc" } +log = "0.4.17" \ No newline at end of file diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 4d97f6db4f..fa7c1088f4 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -85,49 +85,40 @@ impl LspCatalog { language_id: &str, options: Option, ) { - let binary_args = self.get_plugin_binary_args(options.clone()); + let binary_args = self + .get_plugin_binary_args(options.clone()) + .unwrap_or_default(); let client = LspClient::new( language_id.to_string(), exec_path, options, - binary_args.to_owned(), + binary_args, self.dispatcher.clone().unwrap(), ); self.clients.insert(language_id.to_string(), client); } - fn get_plugin_binary_args(&mut self, option: Option) -> Vec { - let mut vals = Vec::new(); - - let option = match option { - Some(val) => val, + fn get_plugin_binary_args( + &mut self, + option: Option, + ) -> Option> { + let option = option?; + + match option["binary"].as_object()?.get("binary_args")?.as_array() { + Some(options) => { + return Some( + options + .iter() + .filter_map(Value::as_str) + .map(ToString::to_string) + .collect::>(), + ) + } None => { - return vals; + log::warn!("binary_args value should be of type [String]."); + return None; } }; - - let binary = match option["binary"].as_object() { - Some(binary) => binary, - None => return vals, - }; - - let option = match binary.get("binary_args") { - Some(binary_args) => binary_args, - None => return vals, - }; - - let option = if let Some(option) = option.as_array() { - option - } else { - println!("binary_args value should be of type [String]."); - return vals; - }; - - for val in option { - vals.push(String::from(val.as_str().unwrap())); - } - - return vals; } pub fn new_buffer( @@ -416,7 +407,7 @@ impl LspClient { let lsp_client = Arc::new(LspClient { dispatcher, exec_path: exec_path.to_string(), - binary_args: binary_args, + binary_args, options, state: Arc::new(Mutex::new(LspState { next_id: 0, @@ -457,9 +448,8 @@ impl LspClient { fn process(exec_path: &str, binary_args: Vec) -> Child { let mut process = Command::new(exec_path); - for arg in binary_args { - process.arg(arg); - } + process.args(binary_args); + #[cfg(target_os = "windows")] let process = process.creation_flags(0x08000000); process diff --git a/lapce-proxy/src/plugin.rs b/lapce-proxy/src/plugin.rs index 74dee07a06..7378fb4e05 100644 --- a/lapce-proxy/src/plugin.rs +++ b/lapce-proxy/src/plugin.rs @@ -171,10 +171,7 @@ impl PluginCatalog { let output = Pipe::new(); let input = Pipe::new(); - let env = match plugin_desc.get_plugin_env() { - Ok(env) => env, - Err(err) => return Err(err), - }; + let env = plugin_desc.get_plugin_env()?; let mut wasi_env = WasiState::new("Lapce") .map_dir("/", plugin_desc.dir.clone().unwrap())? .stdin(Box::new(input)) diff --git a/lapce-rpc/src/plugin.rs b/lapce-rpc/src/plugin.rs index 82198724f4..eff85c34fb 100644 --- a/lapce-rpc/src/plugin.rs +++ b/lapce-rpc/src/plugin.rs @@ -31,15 +31,13 @@ pub struct PluginInfo { impl PluginDescription { pub fn get_plugin_env(&self) -> Result, Error> { - let mut vars = Vec::new(); - let conf = match &self.configuration { Some(val) => val, None => { return Err(format_err!( "Empty configuration for plugin {}", self.display_name - )) + )); } }; @@ -49,14 +47,14 @@ impl PluginDescription { return Err(format_err!( "Empty configuration for plugin {}", self.display_name - )) + )); } }; let env = match conf.get("env_command") { Some(env) => env, // We do not print any error as no env is allowed. - None => return Ok(vars), + None => return Ok(vec![]), }; let args = match env.as_str() { @@ -65,7 +63,7 @@ impl PluginDescription { return Err(format_err!( "Plugin {}: env_command is not a string", self.display_name - )) + )); } }; @@ -97,12 +95,10 @@ impl PluginDescription { } }; - for l in data.lines() { - if let Some((key, value)) = l.split_once('=') { - vars.push((String::from(key), String::from(value))); - }; - } - - return Ok(vars); + Ok(data + .lines() + .filter_map(|l| l.split_once('=')) + .map(|(k, v)| (k.into(), v.into())) + .collect::>()) } } From 4e4de8d2abdcf01c7693e777032b6c23602b8269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Heuillet?= Date: Wed, 22 Jun 2022 04:35:13 +0200 Subject: [PATCH 004/816] Changed binary_args to args; removed debug print --- lapce-proxy/src/buffer.rs | 1 + lapce-proxy/src/lsp.rs | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 580a11fe96..db0805919f 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -155,6 +155,7 @@ fn language_id_from_path(path: &Path) -> Option<&str> { Some(match path.extension()?.to_str()? { "rs" => "rust", "go" => "go", + "py" => "python", _ => return None, }) } diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index fa7c1088f4..55c373ff78 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -57,7 +57,7 @@ pub struct LspState { #[derive(Clone)] pub struct LspClient { exec_path: String, - binary_args: Vec, + args: Vec, options: Option, state: Arc>, dispatcher: Dispatcher, @@ -85,14 +85,14 @@ impl LspCatalog { language_id: &str, options: Option, ) { - let binary_args = self + let args = self .get_plugin_binary_args(options.clone()) .unwrap_or_default(); let client = LspClient::new( language_id.to_string(), exec_path, options, - binary_args, + args, self.dispatcher.clone().unwrap(), ); self.clients.insert(language_id.to_string(), client); @@ -104,7 +104,7 @@ impl LspCatalog { ) -> Option> { let option = option?; - match option["binary"].as_object()?.get("binary_args")?.as_array() { + match option["binary"].as_object()?.get("args")?.as_array() { Some(options) => { return Some( options @@ -115,7 +115,7 @@ impl LspCatalog { ) } None => { - log::warn!("binary_args value should be of type [String]."); + log::warn!("args value should be of type [String]."); return None; } }; @@ -396,18 +396,18 @@ impl LspClient { _language_id: String, exec_path: &str, options: Option, - binary_args: Vec, + args: Vec, dispatcher: Dispatcher, ) -> Arc { //TODO: better handling of binary args in plugin - let mut process = Self::process(exec_path, binary_args.clone()); + let mut process = Self::process(exec_path, args.clone()); let writer = Box::new(BufWriter::new(process.stdin.take().unwrap())); let stdout = process.stdout.take().unwrap(); let lsp_client = Arc::new(LspClient { dispatcher, exec_path: exec_path.to_string(), - binary_args, + args, options, state: Arc::new(Mutex::new(LspState { next_id: 0, @@ -445,10 +445,10 @@ impl LspClient { }); } - fn process(exec_path: &str, binary_args: Vec) -> Child { + fn process(exec_path: &str, args: Vec) -> Child { let mut process = Command::new(exec_path); - process.args(binary_args); + process.args(args); #[cfg(target_os = "windows")] let process = process.creation_flags(0x08000000); @@ -461,7 +461,7 @@ impl LspClient { fn reload(&self) { //TODO: avoid clone using a &[String] ? - let mut process = Self::process(&self.exec_path, self.binary_args.clone()); + let mut process = Self::process(&self.exec_path, self.args.clone()); let writer = Box::new(BufWriter::new(process.stdin.take().unwrap())); let stdout = process.stdout.take().unwrap(); @@ -508,7 +508,6 @@ impl LspClient { } pub fn handle_message(&self, message: &str) { - println!("Received message! {}", message); match JsonRpc::parse(message) { Ok(value @ JsonRpc::Request(_)) => { let id = value.get_id().unwrap(); From 63b93ad760396e686500b4048fd273b3788566e8 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Wed, 22 Jun 2022 06:02:45 -0500 Subject: [PATCH 005/816] Add context menu to file explorer sidebar --- Cargo.lock | 70 +++- lapce-data/src/command.rs | 39 ++ lapce-data/src/data.rs | 9 + lapce-data/src/document.rs | 10 +- lapce-data/src/explorer.rs | 262 +++++++++++++- lapce-data/src/menu.rs | 1 + lapce-data/src/proxy.rs | 46 +++ lapce-proxy/Cargo.toml | 1 + lapce-proxy/src/dispatch.rs | 36 ++ lapce-rpc/src/proxy.rs | 13 + lapce-ui/src/app.rs | 10 +- lapce-ui/src/editor.rs | 16 + lapce-ui/src/editor/view.rs | 74 ++-- lapce-ui/src/explorer.rs | 698 +++++++++++++++++++++++++++++------- lapce-ui/src/tab.rs | 108 +++++- lapce-ui/src/window.rs | 8 +- 16 files changed, 1220 insertions(+), 181 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 577210a18c..08cde32d7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2287,6 +2287,7 @@ dependencies = [ "serde 1.0.130", "serde_json", "toml", + "trash", "wasmer", "wasmer-wasi", "which", @@ -4538,6 +4539,22 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "trash" +version = "2.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d0492e349e41bfa40e9d446a5803b84275898f0b3bda568b23e10325702095d" +dependencies = [ + "chrono", + "libc", + "log", + "objc", + "once_cell", + "scopeguard", + "url", + "windows", +] + [[package]] name = "tree-sitter" version = "0.20.6" @@ -5528,17 +5545,30 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +dependencies = [ + "windows_aarch64_msvc 0.37.0", + "windows_i686_gnu 0.37.0", + "windows_i686_msvc 0.37.0", + "windows_x86_64_gnu 0.37.0", + "windows_x86_64_msvc 0.37.0", +] + [[package]] name = "windows-sys" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] [[package]] @@ -5547,30 +5577,60 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +[[package]] +name = "windows_aarch64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" + [[package]] name = "windows_i686_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +[[package]] +name = "windows_i686_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" + [[package]] name = "windows_i686_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +[[package]] +name = "windows_i686_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" + [[package]] name = "windows_x86_64_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +[[package]] +name = "windows_x86_64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" + [[package]] name = "winreg" version = "0.10.1" diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 7d416ecab7..e0175dc0f8 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -535,4 +535,43 @@ pub enum LapceUICommand { ActiveFileChanged { path: Option, }, + /// Create a file in the given path with the given name and then open it + CreateFileOpen { + path: PathBuf, + }, + CreateDirectory { + path: PathBuf, + }, + RenamePath { + from: PathBuf, + to: PathBuf, + }, + /// Move a file/directory to the os-specific trash + TrashPath { + path: PathBuf, + }, + /// Start renaming a specific file in view at the given index + ExplorerStartRename { + /// The index into the explorer's file listing + list_index: usize, + /// The level that it should be indented to + indent_level: usize, + /// The text it will start with + text: String, + }, + /// Start creating a new file/directory + ExplorerNew { + /// The index in the explorer's file listing that this should appear *after* + list_index: usize, + /// The level that it should be indented to + indent_level: usize, + /// Whether we are creating a file or a directory + is_dir: bool, + /// The folder that it would be created in + base_path: PathBuf, + }, + ExplorerEndNaming { + /// Whether it should name/rename the file with the input data + apply_naming: bool, + }, } diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index f93a569b5e..6226c09435 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -2520,6 +2520,15 @@ impl LapceMainSplitData { proxy.clone(), )), ); + local_docs.insert( + LocalBufferKind::PathName, + Arc::new(Document::new( + BufferContent::Local(LocalBufferKind::PathName), + tab_id, + event_sink.clone(), + proxy.clone(), + )), + ); let value_docs = im::HashMap::new(); let scratch_docs = im::HashMap::new(); diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index d2a73ad42c..46ae718bc8 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -94,6 +94,7 @@ pub enum LocalBufferKind { FilePicker, Keymap, Settings, + PathName, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -118,7 +119,8 @@ impl BufferContent { | LocalBufferKind::SourceControl | LocalBufferKind::FilePicker | LocalBufferKind::Settings - | LocalBufferKind::Keymap => true, + | LocalBufferKind::Keymap + | LocalBufferKind::PathName => true, LocalBufferKind::Empty => false, }, BufferContent::SettingsValue(..) => true, @@ -134,7 +136,8 @@ impl BufferContent { | LocalBufferKind::Palette | LocalBufferKind::FilePicker | LocalBufferKind::Settings - | LocalBufferKind::Keymap => true, + | LocalBufferKind::Keymap + | LocalBufferKind::PathName => true, LocalBufferKind::Empty | LocalBufferKind::SourceControl => false, }, BufferContent::SettingsValue(..) => true, @@ -521,6 +524,9 @@ impl Document { Target::Widget(self.tab_id), ); } + LocalBufferKind::PathName => { + // TODO: anything to update with this? + } } } BufferContent::SettingsValue(..) => {} diff --git a/lapce-data/src/explorer.rs b/lapce-data/src/explorer.rs index f8eb5007e5..1d0dbac9d7 100644 --- a/lapce-data/src/explorer.rs +++ b/lapce-data/src/explorer.rs @@ -3,23 +3,66 @@ use std::path::Path; use std::path::PathBuf; use std::sync::Arc; +use druid::Command; +use druid::EventCtx; use druid::ExtEventSink; use druid::{Target, WidgetId}; +use lapce_core::cursor::CursorMode; +use lapce_core::selection::Selection; use lapce_rpc::file::FileNodeItem; use lapce_rpc::proxy::ReadDirResponse; +use xi_rope::Rope; +use crate::data::LapceMainSplitData; use crate::data::LapceWorkspace; +use crate::document::LocalBufferKind; use crate::proxy::LapceProxy; use crate::{command::LapceUICommand, command::LAPCE_UI_COMMAND}; +#[derive(Clone)] +pub enum Naming { + /// Renaming an existing file + Renaming { + /// The index into the file list of the file being renamed + list_index: usize, + /// Indentation level + indent_level: usize, + }, + /// Naming a file that has yet to be created + Naming { + /// The index that the file being created should appear at + /// Note that when naming, it is not yet actually created. + list_index: usize, + /// Indentation level + indent_level: usize, + /// If true, then we are creating a directory + /// If false, then we are creating a file + is_dir: bool, + /// The folder that the file/directory is being created within + base_path: PathBuf, + }, +} +impl Naming { + pub fn list_index(&self) -> usize { + match self { + Naming::Renaming { list_index, .. } + | Naming::Naming { list_index, .. } => *list_index, + } + } +} + #[derive(Clone)] pub struct FileExplorerData { pub tab_id: WidgetId, pub widget_id: WidgetId, pub workspace: Option, pub active_selected: Option, + /// The status of renaming/naming a file/directory + pub naming: Option, + /// The id of the editor (in `main_split.editors`) for renaming + pub renaming_editor_view_id: WidgetId, } impl FileExplorerData { @@ -57,6 +100,8 @@ impl FileExplorerData { children_open_count: 0, }), active_selected: None, + naming: None, + renaming_editor_view_id: WidgetId::next(), } } @@ -86,8 +131,20 @@ impl FileExplorerData { ) } - pub fn get_node_by_index(&mut self, index: usize) -> Option<&mut FileNodeItem> { - let (_, node) = get_item_children_mut(0, index, self.workspace.as_mut()?); + /// Get the node by its index into the file list + /// Returns the node and its indentation level + pub fn get_node_by_index(&self, index: usize) -> Option<(usize, &FileNodeItem)> { + let (_, node) = get_item_children(0, index, 0, self.workspace.as_ref()?); + node + } + + /// Get the node by its index into the file list + /// Returns the node and its indentation level + pub fn get_node_by_index_mut( + &mut self, + index: usize, + ) -> Option<(usize, &mut FileNodeItem)> { + let (_, node) = get_item_children_mut(0, index, 0, self.workspace.as_mut()?); node } @@ -113,6 +170,11 @@ impl FileExplorerData { children: HashMap, expand: bool, ) -> Option<()> { + // Ignore updates while naming a file + if self.naming.is_some() { + return None; + } + let node = self.workspace.as_mut()?.get_file_node_mut(path)?; let removed_paths: Vec = node @@ -149,6 +211,19 @@ impl FileExplorerData { tab_id: WidgetId, proxy: &LapceProxy, event_sink: ExtEventSink, + ) { + FileExplorerData::read_dir_cb::( + path, expand, tab_id, proxy, event_sink, None, + ) + } + + pub fn read_dir_cb( + path: &Path, + expand: bool, + tab_id: WidgetId, + proxy: &LapceProxy, + event_sink: ExtEventSink, + mut on_finished: Option, ) { let path = PathBuf::from(path); let local_path = path.clone(); @@ -167,27 +242,196 @@ impl FileExplorerData { ), Target::Widget(tab_id), ); + + if let Some(on_finished) = on_finished.take() { + on_finished(); + } } } }), ); } + + /// Stop naming the file/directory, discarding any changes + pub fn cancel_naming(&mut self) { + self.naming = None; + } + + /// Apply the current naming/renaming text (if it is nonempty and not the same as before) + /// Also stops the naming. + pub fn apply_naming( + &mut self, + ctx: &mut EventCtx, + main_split: &LapceMainSplitData, + ) { + let naming = if let Some(naming) = &self.naming { + naming + } else { + return; + }; + + // Get the text in the input + let doc = main_split + .local_docs + .get(&LocalBufferKind::PathName) + .unwrap(); + let target_name = doc.buffer().text().to_string(); + // If the name is empty, then we just ignore it + if target_name.is_empty() { + self.cancel_naming(); + return; + } + + match naming { + Naming::Renaming { list_index, .. } => { + let renaming = + if let Some((_, node)) = self.get_node_by_index(*list_index) { + &node.path_buf + } else { + // There was either nothing we were renaming, or the index disappeared + return; + }; + + let target_path = renaming.with_file_name(target_name); + + // If it is the same, then we don't bother renaming it + if &target_path == renaming { + return; + } + + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::RenamePath { + from: renaming.clone(), + to: target_path, + }, + Target::Auto, + )); + } + Naming::Naming { + is_dir, base_path, .. + } => { + let mut path = base_path.clone(); + path.push(target_name); + + let cmd = if *is_dir { + LapceUICommand::CreateDirectory { path } + } else { + LapceUICommand::CreateFileOpen { path } + }; + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + cmd, + Target::Auto, + )); + } + } + + self.cancel_naming(); + } + + pub fn start_naming( + &mut self, + ctx: &mut EventCtx, + main_split: &mut LapceMainSplitData, + list_index: usize, + indent_level: usize, + is_dir: bool, + base_path: PathBuf, + ) { + self.cancel_naming(); + self.naming = Some(Naming::Naming { + list_index, + indent_level, + is_dir, + base_path, + }); + + // Clear the text of the input + let doc = main_split + .local_docs + .get_mut(&LocalBufferKind::PathName) + .unwrap(); + Arc::make_mut(doc).reload(Rope::from(String::new()), true); + + // Make sure the cursor is at the right position + let editor = main_split + .editors + .get_mut(&self.renaming_editor_view_id) + .unwrap(); + Arc::make_mut(editor).cursor.mode = CursorMode::Insert(Selection::caret(0)); + + // Focus on the input + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::Focus, + Target::Widget(editor.view_id), + )); + } + + /// Show the renaming input for the given file at the index + /// Requires `main_split` for getting the input to set its content + /// Requires `ctx` to switch focus to the input + pub fn start_renaming( + &mut self, + ctx: &mut EventCtx, + main_split: &mut LapceMainSplitData, + list_index: usize, + indent_level: usize, + text: String, + ) { + self.cancel_naming(); + self.naming = Some(Naming::Renaming { + list_index, + indent_level, + }); + + // Set the text of the input + let doc = main_split + .local_docs + .get_mut(&LocalBufferKind::PathName) + .unwrap(); + Arc::make_mut(doc).reload(Rope::from(text), true); + + // TODO: We could provide a configuration option to only select the filename at first, + // which would fit a common case of just wanting to change the filename and not the ext + // (or that could be the default) + + // Select all of the text, allowing them to quickly completely change the name if they wish + let editor = main_split + .editors + .get_mut(&self.renaming_editor_view_id) + .unwrap(); + let offset = doc.buffer().line_end_offset(0, true); + Arc::make_mut(editor).cursor.mode = + CursorMode::Insert(Selection::region(0, offset)); + + // Focus on the input + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::Focus, + Target::Widget(editor.view_id), + )); + } } +/// Returns (current index, Option<(indentation level of item, item)>) pub fn get_item_children( i: usize, index: usize, + indent: usize, item: &FileNodeItem, -) -> (usize, Option<&FileNodeItem>) { +) -> (usize, Option<(usize, &FileNodeItem)>) { if i == index { - return (i, Some(item)); + return (i, Some((indent, item))); } let mut i = i; if item.open { for child in item.sorted_children() { let count = child.children_open_count; if i + count + 1 >= index { - let (new_index, node) = get_item_children(i + 1, index, child); + let (new_index, node) = + get_item_children(i + 1, index, indent + 1, child); if new_index == index { return (new_index, node); } @@ -201,17 +445,19 @@ pub fn get_item_children( pub fn get_item_children_mut( i: usize, index: usize, + indent: usize, item: &mut FileNodeItem, -) -> (usize, Option<&mut FileNodeItem>) { +) -> (usize, Option<(usize, &mut FileNodeItem)>) { if i == index { - return (i, Some(item)); + return (i, Some((indent, item))); } let mut i = i; if item.open { for child in item.sorted_children_mut() { let count = child.children_open_count; if i + count + 1 >= index { - let (new_index, node) = get_item_children_mut(i + 1, index, child); + let (new_index, node) = + get_item_children_mut(i + 1, index, indent + 1, child); if new_index == index { return (new_index, node); } diff --git a/lapce-data/src/menu.rs b/lapce-data/src/menu.rs index 8e396e4de0..4f2c5cdfc8 100644 --- a/lapce-data/src/menu.rs +++ b/lapce-data/src/menu.rs @@ -1,5 +1,6 @@ use crate::command::LapceCommand; +#[derive(Debug)] pub enum MenuKind { Item(MenuItem), Separator, diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index e1355a81bd..04309010d2 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -479,6 +479,52 @@ impl LapceProxy { ); } + pub fn create_file(&self, path: &Path, f: Box) { + self.rpc.send_rpc_request_async( + "create_file", + &json!({ + "path": path, + }), + f, + ); + } + + pub fn create_directory(&self, path: &Path, f: Box) { + self.rpc.send_rpc_request_async( + "create_directory", + &json!({ + "path": path, + }), + f, + ); + } + + pub fn trash_path(&self, path: &Path, f: Box) { + self.rpc.send_rpc_request_async( + "trash_path", + &json!({ + "path": path, + }), + f, + ); + } + + pub fn rename_path( + &self, + from_path: &Path, + to_path: &Path, + f: Box, + ) { + self.rpc.send_rpc_request_async( + "rename_path", + &json!({ + "from": from_path, + "to": to_path, + }), + f, + ); + } + pub fn get_completion( &self, request_id: usize, diff --git a/lapce-proxy/Cargo.toml b/lapce-proxy/Cargo.toml index 496aadc935..717f452a48 100644 --- a/lapce-proxy/Cargo.toml +++ b/lapce-proxy/Cargo.toml @@ -33,3 +33,4 @@ home = "0.5.3" toml = "0.5.6" git2 = { version = "0.14.4", features = ["vendored-openssl"] } lapce-rpc = { path = "../lapce-rpc" } +trash = "2.1" \ No newline at end of file diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index 2d0f0f3ed9..47bbf72591 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -606,6 +606,42 @@ impl Dispatcher { } self.respond(id, resp); } + CreateFile { path } => { + // Create the file, specifically choosing to error if it already exists + // We also throw away the file object because we only want to create it, + // and return any errors that occur + let resp = std::fs::OpenOptions::new() + .write(true) + .create_new(true) + .open(path) + .map(|_| json!({})) + .map_err(anyhow::Error::from); + self.respond(id, resp); + } + CreateDirectory { path } => { + let resp = std::fs::create_dir(path) + .map(|_| json!({})) + .map_err(anyhow::Error::from); + self.respond(id, resp); + } + TrashPath { path } => { + let resp = trash::delete(path) + .map(|_| json!({})) + .map_err(anyhow::Error::from); + self.respond(id, resp); + } + RenamePath { from, to } => { + // We first check if the destination already exists, because rename can overwrite it + // and that's not the default behavior we want for when a user renames a document. + if to.exists() { + self.respond(id, Err(anyhow!("{:?} already exists", to))); + } else { + let resp = std::fs::rename(from, to) + .map(|_| json!({})) + .map_err(anyhow::Error::from); + self.respond(id, resp); + } + } GlobalSearch { pattern } => { if let Some(workspace) = self.workspace.lock().clone() { let local_dispatcher = self.clone(); diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index 65ca13bd0a..e32cc009a3 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -119,6 +119,19 @@ pub enum ProxyRequest { rev: u64, content: String, }, + CreateFile { + path: PathBuf, + }, + CreateDirectory { + path: PathBuf, + }, + TrashPath { + path: PathBuf, + }, + RenamePath { + from: PathBuf, + to: PathBuf, + }, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index b73b4bdf2d..0bd85ea886 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -19,7 +19,7 @@ const LOGO_PNG: &[u8] = include_bytes!("../../extra/images/logo.png"); #[cfg(target_os = "windows")] const LOGO_ICO: &[u8] = include_bytes!("../../extra/windows/lapce.ico"); -pub fn build_window(data: &LapceWindowData) -> impl Widget { +pub fn build_window(data: &mut LapceWindowData) -> impl Widget { LapceWindow::new(data).lens(LapceWindowLens(data.window_id)) } @@ -52,8 +52,8 @@ pub fn launch() { } let mut launcher = AppLauncher::new().delegate(LapceAppDelegate::new()); - let data = LapceData::load(launcher.get_external_handle()); - for (_window_id, window_data) in data.windows.iter() { + let mut data = LapceData::load(launcher.get_external_handle()); + for (_window_id, window_data) in data.windows.iter_mut() { let root = build_window(window_data); let window = new_window_desc( window_data.window_id, @@ -218,13 +218,13 @@ impl AppDelegate for LapceAppDelegate { workspaces: vec![], }, }; - let window_data = LapceWindowData::new( + let mut window_data = LapceWindowData::new( data.keypress.clone(), ctx.get_external_handle(), &info, data.db.clone(), ); - let root = build_window(&window_data); + let root = build_window(&mut window_data); let window_id = window_data.window_id; data.windows.insert(window_id, window_data); let desc = new_window_desc( diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 99e7c3b845..57d4961d95 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -421,6 +421,22 @@ impl LapceEditor { } Size::ZERO } + // Almost the same as the general case below but with less vertical padding + BufferContent::Local(LocalBufferKind::PathName) => Size::new( + editor_size.width.max( + data.doc + .get_text_layout( + text, + 0, + data.config.editor.font_size, + &data.config, + ) + .size() + .width, + ), + env.get(LapceTheme::INPUT_LINE_HEIGHT) + + env.get(LapceTheme::INPUT_LINE_PADDING), + ), _ => Size::new( editor_size.width.max( data.doc diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 00cb786c8f..2e019de7a6 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -43,6 +43,8 @@ pub struct LapceEditorView { pub find: Option>>>, cursor_blink_timer: TimerToken, last_idle_timer: TimerToken, + display_border: bool, + background_color_name: &'static str, } pub fn editor_tab_child_widget( @@ -78,6 +80,8 @@ impl LapceEditorView { find, cursor_blink_timer: TimerToken::INVALID, last_idle_timer: TimerToken::INVALID, + display_border: true, + background_color_name: LapceTheme::EDITOR_BACKGROUND, } } @@ -91,6 +95,11 @@ impl LapceEditorView { self } + pub fn hide_border(mut self) -> Self { + self.display_border = false; + self + } + pub fn set_placeholder(mut self, placeholder: String) -> Self { self.editor .widget_mut() @@ -102,6 +111,14 @@ impl LapceEditorView { self } + pub fn set_background_color( + mut self, + background_color_name: &'static str, + ) -> Self { + self.background_color_name = background_color_name; + self + } + pub fn request_focus( &self, ctx: &mut EventCtx, @@ -152,6 +169,7 @@ impl LapceEditorView { data.focus_area = FocusArea::Panel(PanelKind::SourceControl); Arc::make_mut(&mut data.source_control).active = self.view_id; } + LocalBufferKind::PathName => {} LocalBufferKind::Empty => { data.focus_area = FocusArea::Editor; data.main_split.active = Arc::new(Some(self.view_id)); @@ -684,18 +702,31 @@ impl Widget for LapceEditorView { } LifeCycle::FocusChanged(is_focus) => { let editor = data.main_split.editors.get(&self.view_id).unwrap(); - if !*is_focus - && editor.content - == BufferContent::Local(LocalBufferKind::Palette) - { - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Focus(FocusCommand::ModalClose), - data: None, - }, - Target::Widget(data.palette.widget_id), - )); + if !*is_focus { + match editor.content { + BufferContent::Local(LocalBufferKind::Palette) => { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Focus( + FocusCommand::ModalClose, + ), + data: None, + }, + Target::Widget(data.palette.widget_id), + )); + } + BufferContent::Local(LocalBufferKind::PathName) => { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerEndNaming { + apply_naming: true, + }, + Target::Auto, + )); + } + _ => {} + } } } LifeCycle::HotChanged(is_hot) => { @@ -887,6 +918,7 @@ impl Widget for LapceEditorView { let self_size = bc.max(); let header_size = self.header.layout(ctx, bc, data, env); self.header.set_origin(ctx, data, env, Point::ZERO); + let editor_size = if self_size.height > header_size.height { let editor_size = Size::new(self_size.width, self_size.height - header_size.height); @@ -925,19 +957,19 @@ impl Widget for LapceEditorView { if editor.content.is_input() { ctx.fill( rect.inflate(5.0, 0.0), - data.config - .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), - ); - ctx.stroke( - rect.inflate(4.5, -0.5), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, + data.config.get_color_unchecked(self.background_color_name), ); + if self.display_border { + ctx.stroke( + rect.inflate(4.5, -0.5), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } } else { ctx.fill( rect.inflate(5.0, 5.0), - data.config - .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), + data.config.get_color_unchecked(self.background_color_name), ); } } diff --git a/lapce-ui/src/explorer.rs b/lapce-ui/src/explorer.rs index 7f9f0b5385..6280deeced 100644 --- a/lapce-ui/src/explorer.rs +++ b/lapce-ui/src/explorer.rs @@ -1,12 +1,18 @@ use std::sync::Arc; use std::{collections::HashMap, path::Path}; +use druid::menu::MenuEventCtx; use druid::{ piet::{Text, TextLayout as PietTextLayout, TextLayoutBuilder}, BoxConstraints, Command, Cursor, Env, Event, EventCtx, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, Target, UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, }; +use druid::{ExtEventSink, KbKey, WindowId}; +use lapce_data::data::{LapceData, LapceEditorData}; +use lapce_data::document::{BufferContent, LocalBufferKind}; +use lapce_data::explorer::Naming; +use lapce_data::proxy::LapceProxy; use lapce_data::{ command::LapceUICommand, command::LAPCE_UI_COMMAND, @@ -17,15 +23,117 @@ use lapce_data::{ use lapce_data::{data::PanelKind, explorer::FileExplorerData}; use lapce_rpc::file::FileNodeItem; +use crate::editor::view::LapceEditorView; use crate::{ panel::{LapcePanel, PanelHeaderKind}, scroll::LapceScroll, svg::{file_svg, get_svg}, }; +#[allow(clippy::too_many_arguments)] +/// Paint the file node item at its position +fn paint_single_file_node_item( + ctx: &mut PaintCtx, + item: &FileNodeItem, + line_height: f64, + width: f64, + level: usize, + current: usize, + active: Option<&Path>, + hovered: Option, + config: &Config, + toggle_rects: &mut HashMap, +) { + let background = if Some(item.path_buf.as_ref()) == active { + Some(LapceTheme::PANEL_CURRENT) + } else if Some(current) == hovered { + Some(LapceTheme::PANEL_HOVERED) + } else { + None + }; + + if let Some(background) = background { + ctx.fill( + Rect::ZERO + .with_origin(Point::new( + 0.0, + current as f64 * line_height - line_height, + )) + .with_size(Size::new(width, line_height)), + config.get_color_unchecked(background), + ); + } + + let y = current as f64 * line_height - line_height; + let svg_y = y + 4.0; + let svg_size = 15.0; + let padding = 15.0 * level as f64; + if item.is_dir { + let icon_name = if item.open { + "chevron-down.svg" + } else { + "chevron-right.svg" + }; + let svg = get_svg(icon_name).unwrap(); + let rect = Size::new(svg_size, svg_size) + .to_rect() + .with_origin(Point::new(1.0 + padding, svg_y)); + ctx.draw_svg( + &svg, + rect, + Some(config.get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)), + ); + toggle_rects.insert(current, rect); + + let icon_name = if item.open { + "default_folder_opened.svg" + } else { + "default_folder.svg" + }; + let svg = get_svg(icon_name).unwrap(); + let rect = Size::new(svg_size, svg_size) + .to_rect() + .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); + ctx.draw_svg(&svg, rect, None); + } else { + let svg = file_svg(&item.path_buf); + let rect = Size::new(svg_size, svg_size) + .to_rect() + .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); + ctx.draw_svg(&svg, rect, None); + } + let text_layout = ctx + .text() + .new_text_layout( + item.path_buf + .file_name() + .unwrap() + .to_str() + .unwrap() + .to_string(), + ) + .font(config.ui.font_family(), config.ui.font_size() as f64) + .text_color( + config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ) + .build() + .unwrap(); + ctx.draw_text( + &text_layout, + Point::new( + 38.0 + padding, + y + (line_height - text_layout.size().height) / 2.0, + ), + ); +} + +/// Paint the file node item, if it is in view, and its children #[allow(clippy::too_many_arguments)] pub fn paint_file_node_item( ctx: &mut PaintCtx, + env: &Env, item: &FileNodeItem, min: usize, max: usize, @@ -35,6 +143,10 @@ pub fn paint_file_node_item( current: usize, active: Option<&Path>, hovered: Option, + naming: Option<&Naming>, + name_edit_input: &mut NameEditInput, + drawn_name_input: &mut bool, + data: &LapceTabData, config: &Config, toggle_rects: &mut HashMap, ) -> usize { @@ -44,96 +156,44 @@ pub fn paint_file_node_item( if current + item.children_open_count < min { return current + item.children_open_count; } - if current >= min { - let background = if Some(item.path_buf.as_ref()) == active { - Some(LapceTheme::PANEL_CURRENT) - } else if Some(current) == hovered { - Some(LapceTheme::PANEL_HOVERED) - } else { - None - }; - if let Some(background) = background { - ctx.fill( - Rect::ZERO - .with_origin(Point::new( - 0.0, - current as f64 * line_height - line_height, - )) - .with_size(Size::new(width, line_height)), - config.get_color_unchecked(background), - ); + let mut i = current; + + if current >= min { + let mut should_paint_file_node = true; + if !*drawn_name_input { + if let Some(naming) = naming { + if current == naming.list_index() { + draw_name_input(ctx, data, env, &mut i, naming, name_edit_input); + *drawn_name_input = true; + // If it is renaming then don't draw the underlying file node + should_paint_file_node = + !matches!(naming, Naming::Renaming { .. }) + } + } } - let y = current as f64 * line_height - line_height; - let svg_y = y + 4.0; - let svg_size = 15.0; - let padding = 15.0 * level as f64; - if item.is_dir { - let icon_name = if item.open { - "chevron-down.svg" - } else { - "chevron-right.svg" - }; - let svg = get_svg(icon_name).unwrap(); - let rect = Size::new(svg_size, svg_size) - .to_rect() - .with_origin(Point::new(1.0 + padding, svg_y)); - ctx.draw_svg( - &svg, - rect, - Some(config.get_color_unchecked(LapceTheme::EDITOR_FOREGROUND)), + if should_paint_file_node { + paint_single_file_node_item( + ctx, + item, + line_height, + width, + level, + i, + active, + hovered, + config, + toggle_rects, ); - toggle_rects.insert(current, rect); - - let icon_name = if item.open { - "default_folder_opened.svg" - } else { - "default_folder.svg" - }; - let svg = get_svg(icon_name).unwrap(); - let rect = Size::new(svg_size, svg_size) - .to_rect() - .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); - ctx.draw_svg(&svg, rect, None); - } else { - let svg = file_svg(&item.path_buf); - let rect = Size::new(svg_size, svg_size) - .to_rect() - .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); - ctx.draw_svg(&svg, rect, None); } - let text_layout = ctx - .text() - .new_text_layout( - item.path_buf - .file_name() - .unwrap() - .to_str() - .unwrap() - .to_string(), - ) - .font(config.ui.font_family(), config.ui.font_size() as f64) - .text_color( - config - .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) - .clone(), - ) - .build() - .unwrap(); - ctx.draw_text( - &text_layout, - Point::new( - 38.0 + padding, - y + (line_height - text_layout.size().height) / 2.0, - ), - ); } - let mut i = current; + if item.open { for item in item.sorted_children() { i = paint_file_node_item( ctx, + env, item, min, max, @@ -143,6 +203,10 @@ pub fn paint_file_node_item( i + 1, active, hovered, + naming, + name_edit_input, + drawn_name_input, + data, config, toggle_rects, ); @@ -154,6 +218,27 @@ pub fn paint_file_node_item( i } +fn draw_name_input( + ctx: &mut PaintCtx, + data: &LapceTabData, + env: &Env, + i: &mut usize, + naming: &Naming, + name_edit_input: &mut NameEditInput, +) { + match naming { + Naming::Renaming { .. } => { + name_edit_input.paint(ctx, data, env); + } + Naming::Naming { .. } => { + name_edit_input.paint(ctx, data, env); + // Skip forward by an entry + // This is fine since we aren't using i as an index, but as an offset-multiple in painting + *i += 1; + } + } +} + pub fn get_item_children( i: usize, index: usize, @@ -208,15 +293,35 @@ pub struct FileExplorer { } impl FileExplorer { - pub fn new(data: &FileExplorerData) -> Self { - let file_list = LapceScroll::new(FileExplorerFileList::new()); + pub fn new(data: &mut LapceTabData) -> Self { + // Create the input editor for renaming/naming files/directories + let editor = LapceEditorData::new( + Some(data.file_explorer.renaming_editor_view_id), + None, + None, + BufferContent::Local(LocalBufferKind::PathName), + &data.config, + ); + + let input = LapceEditorView::new(editor.view_id, editor.editor_id, None) + .hide_header() + .hide_gutter() + .hide_border() + .set_background_color(LapceTheme::PANEL_HOVERED); + let view_id = editor.view_id; + data.main_split.editors.insert(view_id, Arc::new(editor)); + // Create the file listing + let file_list = LapceScroll::new(FileExplorerFileList::new(WidgetPod::new( + input.boxed(), + ))); + Self { - widget_id: data.widget_id, + widget_id: data.file_explorer.widget_id, file_list: WidgetPod::new(file_list.boxed()), } } - pub fn new_panel(data: &LapceTabData) -> LapcePanel { + pub fn new_panel(data: &mut LapceTabData) -> LapcePanel { let split_id = WidgetId::next(); LapcePanel::new( PanelKind::FileExplorer, @@ -227,7 +332,7 @@ impl FileExplorer { vec![( split_id, PanelHeaderKind::None, - Self::new(&data.file_explorer).boxed(), + Self::new(data).boxed(), None, )], ) @@ -288,33 +393,30 @@ impl Widget for FileExplorer { } } +type NameEditInput = WidgetPod>>; struct FileExplorerFileList { line_height: f64, hovered: Option, + name_edit_input: NameEditInput, } impl FileExplorerFileList { - pub fn new() -> Self { + pub fn new(input: NameEditInput) -> Self { Self { line_height: 25.0, hovered: None, + name_edit_input: input, } } } -impl Default for FileExplorerFileList { - fn default() -> Self { - Self::new() - } -} - impl Widget for FileExplorerFileList { fn event( &mut self, ctx: &mut EventCtx, event: &Event, data: &mut LapceTabData, - _env: &Env, + env: &Env, ) { match event { Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { @@ -328,11 +430,57 @@ impl Widget for FileExplorerFileList { } _ => {} } - if !ctx.is_hot() { + + // Finish any renaming if the user presses enter + if let Event::KeyDown(key_ev) = event { + if self.name_edit_input.has_focus() { + if key_ev.key == KbKey::Enter { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerEndNaming { apply_naming: true }, + Target::Auto, + )); + } else if key_ev.key == KbKey::Escape { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerEndNaming { + apply_naming: false, + }, + Target::Auto, + )); + } + } + } + + if data.file_explorer.naming.is_some() { + self.name_edit_input.event(ctx, event, data, env); + // If the input handled the event, then we just ignore it. + if ctx.is_handled() { + return; + } + } + + // We can catch these here because they'd be consumed by name edit input if they were for/on it + if matches!( + event, + Event::MouseDown(_) | Event::KeyUp(_) | Event::KeyDown(_) + ) && data.file_explorer.naming.is_some() + && !self.name_edit_input.has_focus() + { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerEndNaming { apply_naming: true }, + Target::Auto, + )); return; } + match event { Event::MouseMove(mouse_event) => { + if !ctx.is_hot() { + return; + } + if let Some(workspace) = data.file_explorer.workspace.as_ref() { let y = mouse_event.pos.y; if y <= self.line_height @@ -356,60 +504,171 @@ impl Widget for FileExplorerFileList { } } Event::MouseDown(mouse_event) => { + if !ctx.is_hot() { + return; + } + let file_explorer = Arc::make_mut(&mut data.file_explorer); let index = ((mouse_event.pos.y + self.line_height) / self.line_height) as usize; - if let Some(node) = file_explorer.get_node_by_index(index) { - if node.is_dir { - if node.read { - node.open = !node.open; + if mouse_event.button.is_left() { + if let Some((_, node)) = + file_explorer.get_node_by_index_mut(index) + { + if node.is_dir { + if node.read { + node.open = !node.open; + } else { + let tab_id = data.id; + let event_sink = ctx.get_external_handle(); + FileExplorerData::read_dir( + &node.path_buf, + true, + tab_id, + &data.proxy, + event_sink, + ); + } + let path = node.path_buf.clone(); + if let Some(paths) = file_explorer.node_tree(&path) { + for path in paths.iter() { + file_explorer.update_node_count(path); + } + } } else { - let tab_id = data.id; - let event_sink = ctx.get_external_handle(); - FileExplorerData::read_dir( - &node.path_buf, - true, + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::OpenFile(node.path_buf.clone()), + Target::Widget(data.id), + )); + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ActiveFileChanged { + path: Some(node.path_buf.clone()), + }, + Target::Widget(file_explorer.widget_id), + )); + } + } + } + + if mouse_event.button.is_right() { + if let Some((indent_level, node)) = file_explorer + .get_node_by_index(index) + .or_else(|| file_explorer.workspace.as_ref().map(|x| (0, x))) + { + let is_workspace = Some(&node.path_buf) + == file_explorer.workspace.as_ref().map(|x| &x.path_buf); + + // The folder that it is, or is within + let base = if node.is_dir { + Some(node.path_buf.clone()) + } else { + node.path_buf.parent().map(ToOwned::to_owned) + }; + + // If there's no reasonable path at the point, then ignore it + let base = if let Some(base) = base { + base + } else { + return; + }; + + // Create a context menu with different actions that can be performed on a file/dir + // or in the directory + let mut menu = druid::Menu::::new("Explorer"); + + // The ids are so that the correct LapceTabData can be acquired inside the menu event cb + // since the context menu only gets access to LapceData + let window_id = data.window_id; + let tab_id = data.id; + let item = druid::MenuItem::new("New File").on_activate( + make_new_file_cb( + ctx, + &base, + window_id, + tab_id, + is_workspace, + index, + indent_level, + false, + ), + ); + + menu = menu.entry(item); + + let item = druid::MenuItem::new("New Directory") + .on_activate(make_new_file_cb( + ctx, + &base, + window_id, tab_id, - &data.proxy, - event_sink, + is_workspace, + index, + indent_level, + true, + )); + menu = menu.entry(item); + + // Separator between non destructive and destructive actions + menu = menu.separator(); + + // Don't allow us to rename or delete the current workspace + if !is_workspace { + let item = druid::MenuItem::new("Rename").command( + Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerStartRename { + list_index: index, + indent_level, + text: node + .path_buf + .file_name() + .map(|x| x.to_string_lossy().to_string()) + .unwrap_or_else(String::new), + }, + Target::Auto, + ), ); + menu = menu.entry(item); + + let trash_text = if node.is_dir { + "Move Directory to Trash" + } else { + "Move File to Trash" + }; + let item = druid::MenuItem::new(trash_text).command( + Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::TrashPath { + path: node.path_buf.clone(), + }, + Target::Auto, + ), + ); + menu = menu.entry(item); } - let path = node.path_buf.clone(); - if let Some(paths) = file_explorer.node_tree(&path) { - for path in paths.iter() { - file_explorer.update_node_count(path); - } - } - } else { - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::OpenFile(node.path_buf.clone()), - Target::Widget(data.id), - )); - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::ActiveFileChanged { - path: Some(node.path_buf.clone()), - }, - Target::Widget(file_explorer.widget_id), - )); + + ctx.show_context_menu::(menu, mouse_event.pos); } } } - _ => (), + _ => {} } } fn lifecycle( &mut self, - _ctx: &mut LifeCycleCtx, + ctx: &mut LifeCycleCtx, event: &LifeCycle, - _data: &LapceTabData, - _env: &Env, + data: &LapceTabData, + env: &Env, ) { if let LifeCycle::HotChanged(false) = event { self.hovered = None; } + + self.name_edit_input.lifecycle(ctx, event, data, env); } fn update( @@ -417,7 +676,7 @@ impl Widget for FileExplorerFileList { ctx: &mut UpdateCtx, old_data: &LapceTabData, data: &LapceTabData, - _env: &Env, + env: &Env, ) { if data .file_explorer @@ -432,26 +691,65 @@ impl Widget for FileExplorerFileList { { ctx.request_layout(); } + + if data.file_explorer.naming.is_some() { + self.name_edit_input.update(ctx, data, env); + } } fn layout( &mut self, - _ctx: &mut LayoutCtx, + ctx: &mut LayoutCtx, bc: &BoxConstraints, data: &LapceTabData, - _env: &Env, + env: &Env, ) -> Size { - let height = data + if let Some(naming) = &data.file_explorer.naming { + let (&index, &level) = match naming { + Naming::Renaming { + list_index, + indent_level, + } + | Naming::Naming { + list_index, + indent_level, + .. + } => (list_index, indent_level), + }; + + let max = bc.max(); + let input_bc = bc.shrink(Size::new(max.width / 2.0, 0.0)); + self.name_edit_input.layout(ctx, &input_bc, data, env); + + let y_pos = (index as f64 * self.line_height) - self.line_height; + let x_pos = 38.0 + (15.0 * level as f64); + self.name_edit_input.set_origin( + ctx, + data, + env, + Point::new(x_pos, y_pos), + ); + } + + let mut height = data .file_explorer .workspace .as_ref() .map(|w| w.children_open_count) - .unwrap_or(0) as f64 - * self.line_height; + .unwrap_or(0); + if matches!(data.file_explorer.naming, Some(Naming::Naming { .. })) { + height += 1; + } + let height = height as f64 * self.line_height; + // Choose whichever one is larger + // We want to use bc.max().height when the number of entries is smaller than the window + // height, because receiving right click events requires reporting that we fill the panel + let height = height.max(bc.max().height); + Size::new(bc.max().width, height) } - fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { + fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { let rect = ctx.region().bounding_box(); let size = ctx.size(); let width = size.width; @@ -459,12 +757,14 @@ impl Widget for FileExplorerFileList { let min = (rect.y0 / self.line_height).floor() as usize; let max = (rect.y1 / self.line_height) as usize + 2; let level = 0; + let mut drawn_name_input = false; if let Some(item) = data.file_explorer.workspace.as_ref() { let mut i = 0; for item in item.sorted_children() { i = paint_file_node_item( ctx, + env, item, min, max, @@ -474,6 +774,10 @@ impl Widget for FileExplorerFileList { i + 1, active, self.hovered, + data.file_explorer.naming.as_ref(), + &mut self.name_edit_input, + &mut drawn_name_input, + data, &data.config, &mut HashMap::new(), ); @@ -481,6 +785,130 @@ impl Widget for FileExplorerFileList { return; } } + + // If we didn't draw the name input then we'll have to draw it here + if let Some(naming) = &data.file_explorer.naming { + if i == 0 + || (naming.list_index() >= min && naming.list_index() < max) + { + draw_name_input( + ctx, + data, + env, + // This value does not matter here + &mut 0, + naming, + &mut self.name_edit_input, + ); + } + } + } + } +} + +#[allow(clippy::too_many_arguments)] +/// Create a callback for the context menu when creating a file/directory +/// This is the same function for both, besides one change in parameter +fn make_new_file_cb( + ctx: &mut EventCtx, + base: &Path, + window_id: WindowId, + tab_id: WidgetId, + is_workspace: bool, + index: usize, + indent_level: usize, + is_dir: bool, +) -> impl FnMut(&mut MenuEventCtx, &mut LapceData, &Env) + 'static { + // If the node we're on is the workspace then we'll appear at the very start + let display_index = if is_workspace { 1 } else { index + 1 }; + + let event_sink = ctx.get_external_handle(); + let base_path = base.to_owned(); + move |_ctx, data: &mut LapceData, _env| { + // Clone the handle within, since on_active is an FnMut, so we can't move it into the second + // closure + let event_sink = event_sink.clone(); + let base_path = base_path.clone(); + + // Acquire the LapceTabData instance we were within + let tab_data = data + .windows + .get_mut(&window_id) + .unwrap() + .tabs + .get_mut(&tab_id) + .unwrap(); + + // Expand the directory, if it is one and if it needs to + expand_dir( + event_sink.clone(), + &tab_data.proxy, + tab_id, + Arc::make_mut(&mut tab_data.file_explorer), + index, + move || { + // After we send the command to update the directory, we submit the command to display the new file + // input box + // We ignore any error coming from submit command as failing here shouldn't crash lapce + let res = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::ExplorerNew { + list_index: display_index, + indent_level, + is_dir, + base_path, + }, + Target::Auto, + ); + + if let Err(err) = res { + log::warn!( + "Failed to start constructing new/file directory: {:?}", + err + ); + } + }, + ); + } +} + +/// Expand the directory in the view +/// `on_finished` is called when its done, but the files in the list are not yet updated +/// but the command has been sent. This lets the user queue commands to occur right after it. +/// Note: `on_finished` is also called when there is no dir it didn't need reading +fn expand_dir( + event_sink: ExtEventSink, + proxy: &LapceProxy, + tab_id: WidgetId, + file_explorer: &mut FileExplorerData, + index: usize, + on_finished: impl FnOnce() + Send + 'static, +) { + if let Some((_, node)) = file_explorer.get_node_by_index_mut(index) { + if node.is_dir { + if node.read { + node.open = true; + on_finished(); + } else { + FileExplorerData::read_dir_cb( + &node.path_buf, + true, + tab_id, + proxy, + event_sink, + Some(on_finished), + ); + } + let path = node.path_buf.clone(); + if let Some(paths) = file_explorer.node_tree(&path) { + for path in paths.iter() { + file_explorer.update_node_count(path); + } + } + } else { + on_finished(); } + } else { + on_finished(); } } diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index ef6e9c1071..d147422494 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -79,7 +79,7 @@ pub struct LapceTab { } impl LapceTab { - pub fn new(data: &LapceTabData) -> Self { + pub fn new(data: &mut LapceTabData) -> Self { let split_data = data .main_split .splits @@ -1134,6 +1134,112 @@ impl LapceTab { ); ctx.set_handled(); } + LapceUICommand::CreateFileOpen { path } => { + let path_c = path.clone(); + let event_sink = ctx.get_external_handle(); + let tab_id = data.id; + data.proxy.create_file( + path, + Box::new(move |res| { + match res { + Ok(_) => { + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::OpenFile(path_c), + Target::Widget(tab_id), + ); + } + Err(err) => { + // TODO: Inform the user through a corner-notif + log::warn!( + "Failed to create file: {:?}", + err, + ); + } + } + }), + ); + ctx.set_handled(); + } + LapceUICommand::CreateDirectory { path } => { + data.proxy.create_directory( + path, + Box::new(|res| { + if let Err(err) = res { + // TODO: Inform the user through a corner-notif + log::warn!( + "Failed to create directory: {:?}", + err + ); + } + }), + ); + ctx.set_handled(); + } + LapceUICommand::RenamePath { from, to } => { + data.proxy.rename_path( + from, + to, + Box::new(|res| { + if let Err(err) = res { + // TODO: inform the user through a corner-notif + log::warn!("Failed to rename path: {:?}", err); + } + }), + ); + } + LapceUICommand::TrashPath { path } => { + data.proxy.trash_path( + path, + Box::new(|res| { + if let Err(err) = res { + // TODO: inform the user through a corner-notif + log::warn!("Failed to trash path: {:?}", err); + } + }), + ); + ctx.set_handled(); + } + LapceUICommand::ExplorerNew { + list_index, + indent_level, + is_dir, + base_path, + } => { + let file_explorer = Arc::make_mut(&mut data.file_explorer); + file_explorer.start_naming( + ctx, + &mut data.main_split, + *list_index, + *indent_level, + *is_dir, + base_path.clone(), + ); + ctx.set_handled(); + } + LapceUICommand::ExplorerStartRename { + list_index, + indent_level, + text, + } => { + let file_explorer = Arc::make_mut(&mut data.file_explorer); + file_explorer.start_renaming( + ctx, + &mut data.main_split, + *list_index, + *indent_level, + text.clone(), + ); + ctx.set_handled(); + } + LapceUICommand::ExplorerEndNaming { apply_naming } => { + let file_explorer = Arc::make_mut(&mut data.file_explorer); + if *apply_naming { + file_explorer.apply_naming(ctx, &data.main_split); + } else { + file_explorer.cancel_naming(); + } + } _ => (), } } diff --git a/lapce-ui/src/window.rs b/lapce-ui/src/window.rs index 234549595d..4bc6521c5e 100644 --- a/lapce-ui/src/window.rs +++ b/lapce-ui/src/window.rs @@ -30,13 +30,13 @@ pub struct LapceWindow { } impl LapceWindow { - pub fn new(data: &LapceWindowData) -> Self { + pub fn new(data: &mut LapceWindowData) -> Self { let title = WidgetPod::new(Title::new().boxed()); let tabs = data .tabs_order .iter() .map(|tab_id| { - let data = data.tabs.get(tab_id).unwrap(); + let data = data.tabs.get_mut(tab_id).unwrap(); let tab = LapceTab::new(data); let tab = tab.lens(LapceTabLens(*tab_id)); WidgetPod::new(tab.boxed()) @@ -69,7 +69,7 @@ impl LapceWindow { let _ = tab.db.save_workspace(tab); } let tab_id = WidgetId::next(); - let tab_data = LapceTabData::new( + let mut tab_data = LapceTabData::new( data.window_id, tab_id, workspace, @@ -77,7 +77,7 @@ impl LapceWindow { data.keypress.clone(), ctx.get_external_handle(), ); - let tab = LapceTab::new(&tab_data).lens(LapceTabLens(tab_id)); + let tab = LapceTab::new(&mut tab_data).lens(LapceTabLens(tab_id)); let tab_header = LapceTabHeader::new().lens(LapceTabLens(tab_id)); data.tabs.insert(tab_id, tab_data); if replace_current { From b2312f08a86cb623854b8a29482b1d47d3b3e1d6 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Wed, 22 Jun 2022 06:20:09 -0500 Subject: [PATCH 006/816] Add git init command to workbench --- lapce-data/src/command.rs | 4 ++++ lapce-data/src/data.rs | 3 +++ lapce-data/src/proxy.rs | 4 ++++ lapce-proxy/src/dispatch.rs | 13 +++++++++++++ lapce-rpc/src/proxy.rs | 1 + 5 files changed, 25 insertions(+) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 3bb88d051a..e94dfae574 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -348,6 +348,10 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "focus_terminal")] FocusTerminal, + #[strum(message = "Source Control: Init")] + #[strum(serialize = "source_control_init")] + SourceControlInit, + #[strum(serialize = "source_control_commit")] SourceControlCommit, diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index f93a569b5e..30ffb5937e 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1258,6 +1258,9 @@ impl LapceTabData { } } } + LapceWorkbenchCommand::SourceControlInit => { + self.proxy.git_init(); + } LapceWorkbenchCommand::SourceControlCommit => { let diffs: Vec = self .source_control diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index e1355a81bd..90e6cca3b9 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -382,6 +382,10 @@ impl LapceProxy { ) } + pub fn git_init(&self) { + self.rpc.send_rpc_notification("git_init", &json!({})); + } + pub fn git_commit(&self, message: &str, diffs: Vec) { self.rpc.send_rpc_notification( "git_commit", diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index 2d0f0f3ed9..e1fd4e63ff 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -399,6 +399,14 @@ impl Dispatcher { let _ = tx.send(Msg::Resize(size)); } } + GitInit {} => { + if let Some(workspace) = self.workspace.lock().clone() { + match git_init(&workspace) { + Ok(()) => (), + Err(e) => eprintln!("{e:?}"), + } + } + } GitCommit { message, diffs } => { if let Some(workspace) = self.workspace.lock().clone() { match git_commit(&workspace, &message, diffs) { @@ -663,6 +671,11 @@ pub struct DiffHunk { pub header: String, } +fn git_init(workspace_path: &Path) -> Result<()> { + Repository::init(workspace_path)?; + Ok(()) +} + fn git_commit( workspace_path: &Path, message: &str, diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index 65ca13bd0a..94a03bd2cc 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -37,6 +37,7 @@ pub enum ProxyNotification { GitCheckout { branch: String, }, + GitInit {}, TerminalWrite { term_id: TermId, content: String, From 095b337e5917762fef67e1bc23330d295cb37c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Heuillet?= Date: Wed, 22 Jun 2022 13:36:56 +0200 Subject: [PATCH 007/816] Fixed clippy error --- lapce-proxy/src/lsp.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 55c373ff78..3fdd92d8cb 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -116,9 +116,10 @@ impl LspCatalog { } None => { log::warn!("args value should be of type [String]."); - return None; } }; + + None } pub fn new_buffer( From de5f825a3a95c50ee4d10f94e4c1078e94002954 Mon Sep 17 00:00:00 2001 From: Suraj Date: Wed, 22 Jun 2022 23:28:42 +0530 Subject: [PATCH 008/816] add Installation info Installation info for Arch Linux, Flatpak, Homebrew, Scoop and winget for better visibility --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/README.md b/README.md index 526e4e5d47..a27c8ca7b1 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,44 @@ Lapce is written in pure Rust with a UI in [Druid](https://github.com/linebender Guidelines for contributing to Lapce can be found in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## Installation + +### Arch Linux + +There is an community package that can be installed with `pacman`: + +```bash +sudo pacman -Syu lapce +``` + +### Flatpak + +Lapce is available as a flatpak [here](https://flathub.org/apps/details/dev.lapce.lapce) + +```bash +flatpak install flathub dev.lapce.lapce +``` + +### Homebrew + +```bash +brew install lapce +``` + +### Scoop + +```bash +scoop install lapce +``` + +### winget + +You can find the packages [here](https://github.com/microsoft/winget-pkgs/tree/master/manifests/l/Lapce/Lapce): + +```bash +winget install lapce +``` + ## Building from source It is easy to build Lapce from source on a GNU/Linux distribution. Cargo handles the build process, all you need to do, is ensure the correct dependencies are installed. From 0750b766961582707549abf4a02ec565f34982e9 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Wed, 22 Jun 2022 20:49:38 -0500 Subject: [PATCH 009/816] Impl searching for symbols in workspace --- defaults/keymaps-macos.toml | 4 + defaults/keymaps-nonmacos.toml | 4 + lapce-data/src/command.rs | 3 + lapce-data/src/data.rs | 7 ++ lapce-data/src/palette.rs | 132 +++++++++++++++++++++++++++++++-- lapce-data/src/proxy.rs | 16 ++++ lapce-proxy/src/dispatch.rs | 5 ++ lapce-proxy/src/lsp.rs | 32 ++++++++ lapce-rpc/src/proxy.rs | 6 ++ lapce-ui/src/palette.rs | 59 ++++++++++++++- 10 files changed, 262 insertions(+), 6 deletions(-) diff --git a/defaults/keymaps-macos.toml b/defaults/keymaps-macos.toml index 1e3a59cfbe..e51e69be70 100644 --- a/defaults/keymaps-macos.toml +++ b/defaults/keymaps-macos.toml @@ -226,6 +226,10 @@ command = "document_end" key = "meta+O" command = "palette.symbol" +[[keymaps]] +key = "meta+t" +command = "palette.workspace_symbol" + [[keymaps]] key = "ctrl+g" command = "palette.line" diff --git a/defaults/keymaps-nonmacos.toml b/defaults/keymaps-nonmacos.toml index a291b90ffd..d0fd4940cf 100644 --- a/defaults/keymaps-nonmacos.toml +++ b/defaults/keymaps-nonmacos.toml @@ -221,6 +221,10 @@ command = "document_end" key = "ctrl+O" command = "palette.symbol" +[[keymaps]] +key = "ctrl+t" +command = "palette.workspace_symbol" + [[keymaps]] key = "ctrl+g" command = "palette.line" diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 562b043529..3c4394a0df 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -271,6 +271,9 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "palette.symbol")] PaletteSymbol, + #[strum(serialize = "palette.workspace_symbol")] + PaletteWorkspaceSymbol, + #[strum(message = "Command Palette")] #[strum(serialize = "palette.command")] PaletteCommand, diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index b1d3491fc6..a16de169dd 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1100,6 +1100,13 @@ impl LapceTabData { Target::Widget(self.palette.widget_id), )); } + LapceWorkbenchCommand::PaletteWorkspaceSymbol => { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::RunPalette(Some(PaletteType::WorkspaceSymbol)), + Target::Widget(self.palette.widget_id), + )); + } LapceWorkbenchCommand::PaletteCommand => { ctx.submit_command(Command::new( LAPCE_UI_COMMAND, diff --git a/lapce-data/src/palette.rs b/lapce-data/src/palette.rs index dd4544f4f3..6be4823b60 100644 --- a/lapce-data/src/palette.rs +++ b/lapce-data/src/palette.rs @@ -9,7 +9,7 @@ use itertools::Itertools; use lapce_core::command::{EditCommand, FocusCommand}; use lapce_core::mode::Mode; use lapce_core::movement::Movement; -use lsp_types::{DocumentSymbolResponse, Range, SymbolKind}; +use lsp_types::{DocumentSymbolResponse, Range, SymbolInformation, SymbolKind}; use serde_json; use std::cmp::Ordering; use std::collections::HashSet; @@ -21,6 +21,7 @@ use crate::command::CommandKind; use crate::data::{LapceWorkspace, LapceWorkspaceType}; use crate::document::BufferContent; use crate::editor::EditorLocation; +use crate::proxy::path_from_url; use crate::{ command::LAPCE_UI_COMMAND, command::{CommandExecuted, LAPCE_COMMAND}, @@ -39,6 +40,7 @@ pub enum PaletteType { Line, GlobalSearch, DocumentSymbol, + WorkspaceSymbol, Workspace, Command, Reference, @@ -52,6 +54,7 @@ impl PaletteType { PaletteType::File => "".to_string(), PaletteType::Line => "/".to_string(), PaletteType::DocumentSymbol => "@".to_string(), + PaletteType::WorkspaceSymbol => "#".to_string(), PaletteType::GlobalSearch => "?".to_string(), PaletteType::Workspace => ">".to_string(), PaletteType::Command => ":".to_string(), @@ -66,6 +69,7 @@ impl PaletteType { self, PaletteType::Line | PaletteType::DocumentSymbol + | PaletteType::WorkspaceSymbol | PaletteType::GlobalSearch | PaletteType::Reference ) @@ -97,6 +101,13 @@ pub enum PaletteItemContent { range: Range, container_name: Option, }, + WorkspaceSymbol { + // TODO: Include what language it is from? + kind: SymbolKind, + name: String, + container_name: Option, + location: EditorLocation, + }, ReferenceLocation(PathBuf, EditorLocation), Workspace(LapceWorkspace), SshHost(String, String), @@ -133,6 +144,18 @@ impl PaletteItemContent { Target::Auto, )); } + PaletteItemContent::WorkspaceSymbol { location, .. } => { + let editor_id = if preview { + Some(preview_editor_id) + } else { + None + }; + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::JumpToLocation(editor_id, location.clone()), + Target::Auto, + )); + } PaletteItemContent::Line(line, _) => { let editor_id = if preview { Some(preview_editor_id) @@ -430,6 +453,7 @@ impl PaletteData { PaletteType::SshHost => &self.input, PaletteType::Line => &self.input[1..], PaletteType::DocumentSymbol => &self.input[1..], + PaletteType::WorkspaceSymbol => &self.input[1..], PaletteType::Workspace => &self.input[1..], PaletteType::Command => &self.input[1..], PaletteType::GlobalSearch => &self.input[1..], @@ -461,7 +485,7 @@ impl PaletteViewData { ctx: &mut EventCtx, locations: &[EditorLocation], ) { - self.run(ctx, Some(PaletteType::Reference)); + self.run(ctx, Some(PaletteType::Reference), None); let items: Vec = locations .iter() .map(|l| { @@ -487,11 +511,16 @@ impl PaletteViewData { palette.preview(ctx); } - pub fn run(&mut self, ctx: &mut EventCtx, palette_type: Option) { + pub fn run( + &mut self, + ctx: &mut EventCtx, + palette_type: Option, + input: Option, + ) { let palette = Arc::make_mut(&mut self.palette); palette.status = PaletteStatus::Started; palette.palette_type = palette_type.unwrap_or(PaletteType::File); - palette.input = palette.palette_type.string(); + palette.input = input.unwrap_or_else(|| palette.palette_type.string()); ctx.submit_command(Command::new( LAPCE_UI_COMMAND, LapceUICommand::InitPaletteInput(palette.input.clone()), @@ -526,6 +555,9 @@ impl PaletteViewData { PaletteType::DocumentSymbol => { self.get_document_symbols(ctx); } + PaletteType::WorkspaceSymbol => { + self.get_workspace_symbols(ctx); + } PaletteType::Workspace => { self.get_workspaces(ctx); } @@ -570,6 +602,7 @@ impl PaletteViewData { PaletteType::SshHost => 0, PaletteType::Line => 1, PaletteType::DocumentSymbol => 1, + PaletteType::WorkspaceSymbol => 1, PaletteType::Workspace => 1, PaletteType::Command => 1, PaletteType::GlobalSearch => 1, @@ -643,7 +676,17 @@ impl PaletteViewData { pub fn update_input(&mut self, ctx: &mut EventCtx, input: String) { let palette = Arc::make_mut(&mut self.palette); + + // WorkspaceSymbol requires sending the query to the lsp, so we refresh it when the input changes + if input != palette.input + && matches!(palette.palette_type, PaletteType::WorkspaceSymbol) + { + self.run(ctx, Some(PaletteType::WorkspaceSymbol), Some(input)); + return; + } + palette.input = input; + self.update_palette(ctx) } @@ -652,9 +695,10 @@ impl PaletteViewData { palette.index = 0; let palette_type = self.get_palette_type(); if self.palette.palette_type != palette_type { - self.run(ctx, Some(palette_type)); + self.run(ctx, Some(palette_type), None); return; } + if self.palette.get_input() != "" { let _ = self.palette.sender.send(( self.palette.run_id.clone(), @@ -679,6 +723,7 @@ impl PaletteViewData { match self.palette.input { _ if self.palette.input.starts_with('/') => PaletteType::Line, _ if self.palette.input.starts_with('@') => PaletteType::DocumentSymbol, + _ if self.palette.input.starts_with('#') => PaletteType::WorkspaceSymbol, _ if self.palette.input.starts_with('>') => PaletteType::Workspace, _ if self.palette.input.starts_with(':') => PaletteType::Command, _ => PaletteType::File, @@ -980,6 +1025,83 @@ impl PaletteViewData { } } + fn get_workspace_symbols(&mut self, ctx: &mut EventCtx) { + let editor = self.main_split.active_editor(); + let editor = match editor { + Some(editor) => editor, + None => return, + }; + + let widget_id = self.palette.widget_id; + + // TODO: We'd like to be able to request symbols even when not in an editor. + if let BufferContent::File(path) = &editor.content { + let buffer_id = self.main_split.open_docs.get(path).unwrap().id(); + let run_id = self.palette.run_id.clone(); + let event_sink = ctx.get_external_handle(); + + let query = self.palette.get_input(); + + self.palette.proxy.get_workspace_symbols( + buffer_id, + query, + Box::new(move |result| { + if let Ok(res) = result { + let resp: Result< + Option>, + serde_json::Error, + > = serde_json::from_value(res); + if let Ok(resp) = resp { + let items: Vec = match resp { + Some(symbols) => symbols + .iter() + .map(|s| { + // TODO: Should we be using filter text? + let mut filter_text = s.name.clone(); + if let Some(container_name) = + s.container_name.as_ref() + { + filter_text += container_name; + } + PaletteItem { + content: + PaletteItemContent::WorkspaceSymbol { + kind: s.kind, + name: s.name.clone(), + location: EditorLocation { + path: path_from_url( + &s.location.uri, + ), + position: Some( + s.location.range.start, + ), + scroll_offset: None, + history: None, + }, + container_name: s + .container_name + .clone(), + }, + filter_text, + score: 0, + indices: Vec::new(), + } + }) + .collect(), + None => Vec::new(), + }; + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::UpdatePaletteItems(run_id, items), + Target::Widget(widget_id), + ); + } + } + }), + ); + } + } + pub fn update_process( receiver: Receiver<(String, String, Vec)>, widget_id: WidgetId, diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index e1355a81bd..f1aea6898a 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -611,6 +611,22 @@ impl LapceProxy { ); } + pub fn get_workspace_symbols( + &self, + buffer_id: BufferId, + query: &str, + f: Box, + ) { + self.rpc.send_rpc_request_async( + "get_workspace_symbols", + &json!({ + "buffer_id": buffer_id, + "query": query, + }), + f, + ); + } + pub fn get_code_actions( &self, buffer_id: BufferId, diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index 2d0f0f3ed9..e30f0cd7df 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -525,6 +525,11 @@ impl Dispatcher { let buffer = buffers.get(&buffer_id).unwrap(); self.lsp.lock().get_document_symbols(id, buffer); } + GetWorkspaceSymbols { query, buffer_id } => { + let buffers = self.buffers.lock(); + let buffer = buffers.get(&buffer_id).unwrap(); + self.lsp.lock().get_workspace_symbols(id, buffer, query); + } GetDocumentFormatting { buffer_id } => { let buffers = self.buffers.lock(); let buffer = buffers.get(&buffer_id).unwrap(); diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 41f74f7a97..7bfe0c0137 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -162,6 +162,20 @@ impl LspCatalog { } } + pub fn get_workspace_symbols( + &self, + id: RequestId, + buffer: &Buffer, + query: String, + ) { + // TODO: We could collate workspace symbols from all the lsps? + if let Some(client) = self.clients.get(&buffer.language_id) { + client.request_workspace_symbols(query, move |lsp_client, result| { + lsp_client.dispatcher.respond(id, result); + }); + } + } + pub fn get_document_formatting(&self, id: RequestId, buffer: &Buffer) { if let Some(client) = self.clients.get(&buffer.language_id) { let uri = client.get_uri(buffer); @@ -707,6 +721,12 @@ impl LspClient { }), ..Default::default() }), + workspace: Some(WorkspaceClientCapabilities { + symbol: Some(WorkspaceSymbolClientCapabilities { + ..Default::default() + }), + ..Default::default() + }), experimental: Some(json!({ "serverStatusNotification": true, })), @@ -743,6 +763,18 @@ impl LspClient { self.send_request("textDocument/documentSymbol", params, Box::new(cb)); } + pub fn request_workspace_symbols(&self, query: String, cb: CB) + where + CB: 'static + Send + FnOnce(&LspClient, Result), + { + let params = WorkspaceSymbolParams { + query, + ..Default::default() + }; + let params = Params::from(serde_json::to_value(params).unwrap()); + self.send_request("workspace/symbol", params, Box::new(cb)); + } + pub fn request_document_formatting(&self, document_uri: Url, cb: CB) where CB: 'static + Send + FnOnce(&LspClient, Result), diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index 65ca13bd0a..0f2230a573 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -100,6 +100,12 @@ pub enum ProxyRequest { GetDocumentSymbols { buffer_id: BufferId, }, + GetWorkspaceSymbols { + /// The search query + query: String, + /// THe id of the buffer it was used in, which tells us what LSP to query + buffer_id: BufferId, + }, GetDocumentFormatting { buffer_id: BufferId, }, diff --git a/lapce-ui/src/palette.rs b/lapce-ui/src/palette.rs index dfde811924..5ae095a23d 100644 --- a/lapce-ui/src/palette.rs +++ b/lapce-ui/src/palette.rs @@ -22,6 +22,7 @@ use lapce_data::{ keypress::KeyPressFocus, palette::{PaletteStatus, PaletteType, PaletteViewData, PaletteViewLens}, }; +use lsp_types::SymbolKind; use crate::{ editor::view::LapceEditorView, @@ -102,7 +103,7 @@ impl Widget for Palette { LapceUICommand::RunPalette(palette_type) => { ctx.set_handled(); let mut palette_data = data.palette_view_data(); - palette_data.run(ctx, palette_type.to_owned()); + palette_data.run(ctx, palette_type.to_owned(), None); data.palette = palette_data.palette.clone(); data.keypress = palette_data.keypress.clone(); data.workspace = palette_data.workspace.clone(); @@ -546,6 +547,7 @@ impl PaletteContent { fn paint_palette_item( palette_item_content: &PaletteItemContent, ctx: &mut PaintCtx, + workspace_path: Option<&Path>, line: usize, indices: &[usize], line_height: f64, @@ -589,6 +591,18 @@ impl PaletteContent { .collect(); (symbol_svg(kind), text, text_indices, hint, hint_indices) } + PaletteItemContent::WorkspaceSymbol { + kind, + name, + location, + .. + } => Self::file_paint_symbols( + &location.path, + indices, + workspace_path, + name.as_str(), + *kind, + ), PaletteItemContent::Line(_, text) => { (None, text.clone(), indices.to_vec(), "".to_string(), vec![]) } @@ -735,6 +749,47 @@ impl PaletteContent { ctx.draw_text(&text_layout, point); } + fn file_paint_symbols( + path: &Path, + indices: &[usize], + workspace_path: Option<&Path>, + name: &str, + kind: SymbolKind, + ) -> (Option, String, Vec, String, Vec) { + let text = name.to_string(); + let hint = path.to_string_lossy(); + // Remove the workspace prefix from the path + let hint = workspace_path + .and_then(Path::to_str) + .and_then(|x| hint.strip_prefix(x)) + .map(|x| x.strip_prefix('/').unwrap_or(x)) + .map(ToString::to_string) + .unwrap_or_else(|| hint.to_string()); + let text_indices = indices + .iter() + .filter_map(|i| { + let i = *i; + if i < text.len() { + Some(i) + } else { + None + } + }) + .collect(); + let hint_indices = indices + .iter() + .filter_map(|i| { + let i = *i; + if i >= text.len() { + Some(i - text.len()) + } else { + None + } + }) + .collect(); + (symbol_svg(&kind), text, text_indices, hint, hint_indices) + } + fn file_paint_items( path: &Path, indices: &[usize], @@ -856,6 +911,7 @@ impl Widget for PaletteContent { let start_line = (rect.y0 / self.line_height).floor() as usize; let end_line = (rect.y1 / self.line_height).ceil() as usize; + let workspace_path = data.workspace.path.as_deref(); for line in start_line..end_line { if line >= items.len() { break; @@ -874,6 +930,7 @@ impl Widget for PaletteContent { Self::paint_palette_item( &item.content, ctx, + workspace_path, line, &item.indices, self.line_height, From 0421a39442caf21e9cc48bc4228dc905f99bc274 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Wed, 22 Jun 2022 22:08:39 -0500 Subject: [PATCH 010/816] Add shift-delete/shift-backspace to keymaps --- defaults/keymaps-common.toml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/defaults/keymaps-common.toml b/defaults/keymaps-common.toml index af917082a3..10fa1cbce5 100644 --- a/defaults/keymaps-common.toml +++ b/defaults/keymaps-common.toml @@ -21,11 +21,21 @@ key = "Delete" command = "delete_forward" mode = "i" +[[keymaps]] +key = "shift+Delete" +command = "delete_forward" +mode = "i" + [[keymaps]] key = "backspace" command = "delete_backward" mode = "i" +[[keymaps]] +key = "shift+backspace" +command = "delete_backward" +mode = "i" + [[keymaps]] key = "Home" command = "line_start_non_blank" From c2e08d08b1be592a8c5b717213bf71cf3e2fbdf3 Mon Sep 17 00:00:00 2001 From: Suraj Ghimire Date: Fri, 24 Jun 2022 22:08:50 +0530 Subject: [PATCH 011/816] Enable css syntax highlighting Signed-off-by: Suraj Ghimire --- Cargo.lock | 1099 ++++++++++++++++++++---------------- lapce-core/Cargo.toml | 9 +- lapce-core/src/language.rs | 16 + lapce-ui/Cargo.toml | 6 +- 4 files changed, 624 insertions(+), 506 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3875fa56df..20a4f65a73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] @@ -83,7 +83,7 @@ dependencies = [ "nix", "parking_lot", "regex-automata", - "serde 1.0.130", + "serde 1.0.137", "serde_yaml", "signal-hook", "signal-hook-mio", @@ -103,9 +103,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.43" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf" +checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" [[package]] name = "arrayref" @@ -151,30 +151,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.61" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" dependencies = [ "addr2line", "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide 0.4.4", - "object 0.26.2", + "miniz_oxide", + "object", "rustc-demangle", ] [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base64" @@ -237,15 +237,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.7.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "bytecheck" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314889ea31cda264cb7c3d6e6e5c9415a987ecb0e72c17c00d36fbb881d34abe" +checksum = "3a31f923c2db9513e4298b72df143e6e655a759b3d6a0966df18f81223fff54f" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a2b3b92c135dae665a6f760205b89187638e83bed17ef3e44e83c712cf30600" +checksum = "edb17c862a905d912174daa27ae002326fff56dc8b8ada50a0a5f0976cb174f0" dependencies = [ "proc-macro2", "quote", @@ -264,24 +264,24 @@ dependencies = [ [[package]] name = "bytecount" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" [[package]] name = "bytemuck" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e851ca7c24871e7336801608a4797d7376545b6928a10d32d75685687141ead" +checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" +checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" dependencies = [ "proc-macro2", "quote", @@ -326,9 +326,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.69" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" dependencies = [ "jobserver", ] @@ -371,16 +371,16 @@ checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ "libc", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.15", "time 0.1.44", "winapi 0.3.9", ] [[package]] name = "cmake" -version = "0.1.45" +version = "0.1.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855" +checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" dependencies = [ "cc", ] @@ -431,7 +431,7 @@ dependencies = [ "lazy_static", "nom", "rust-ini", - "serde 1.0.130", + "serde 1.0.137", "serde-hjson", "serde_json", "toml", @@ -440,11 +440,11 @@ dependencies = [ [[package]] name = "console_error_panic_hook" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "wasm-bindgen", ] @@ -456,15 +456,15 @@ checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" [[package]] name = "const_fn" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" +checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -472,15 +472,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core-graphics" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags", "core-foundation", @@ -513,29 +513,42 @@ dependencies = [ "libc", ] +[[package]] +name = "corosensei" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4b310cff9117ec16d05970743c20df3eaddafd461829f2758e76a8de2863a9" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "libc", + "scopeguard", + "windows-sys 0.33.0", +] + [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6bea67967505247f54fa2c85cf4f6e0e31c4e5692c9b70e4ae58e339067333" +checksum = "38faa2a16616c8e78a18d37b4726b98bfd2de192f2fdc8a39ddf568a408a0f75" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48194035d2752bdd5bdae429e3ab88676e95f52a2b1355a5d4e809f9e39b1d74" +checksum = "26f192472a3ba23860afd07d2b0217dc628f21fcc72617aa1336d98e1671f33b" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", @@ -550,31 +563,30 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976efb22fcab4f2cd6bd4e9913764616a54d895c1a23530128d04e03633c555f" +checksum = "0f32ddb89e9b89d3d9b36a5b7d7ea3261c98235a76ac95ba46826b8ec40b1a24" dependencies = [ "cranelift-codegen-shared", - "cranelift-entity", ] [[package]] name = "cranelift-codegen-shared" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dabb5fe66e04d4652e434195b45ae65b5c8172d520247b8f66d8df42b2b45dc" +checksum = "01fd0d9f288cc1b42d9333b7a776b17e278fc888c28e6a0f09b5573d45a150bc" [[package]] name = "cranelift-entity" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3329733e4d4b8e91c809efcaa4faee80bf66f20164e3dd16d707346bd3494799" +checksum = "9e3bfe172b83167604601faf9dc60453e0d0a93415b57a9c4d1a7ae6849185cf" [[package]] name = "cranelift-frontend" -version = "0.76.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279afcc0d3e651b773f94837c3d581177b348c8d69e928104b2e9fccb226f921" +checksum = "a006e3e32d80ce0e4ba7f1f9ddf66066d052a8c884a110b91d05404d6ce26dce" dependencies = [ "cranelift-codegen", "log", @@ -584,18 +596,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "crossbeam-channel" -version = "0.5.1" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -614,32 +626,33 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ + "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.5" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] name = "darling" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ "darling_core", "darling_macro", @@ -647,9 +660,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", @@ -661,9 +674,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", @@ -672,9 +685,9 @@ dependencies = [ [[package]] name = "data-url" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33fe99ccedd6e84bc035f1931bb2e6be79739d6242bd895e7311c886c50dc9c" +checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193" dependencies = [ "matches", ] @@ -733,9 +746,9 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", "redox_users", @@ -783,7 +796,7 @@ dependencies = [ "im", "instant", "tracing", - "tracing-subscriber 0.3.6", + "tracing-subscriber", "tracing-wasm", "unic-langid", "unicode-segmentation", @@ -831,7 +844,7 @@ dependencies = [ "objc", "piet-wgpu", "scopeguard", - "time 0.3.9", + "time 0.3.11", "tracing", "wasm-bindgen", "web-sys", @@ -839,12 +852,6 @@ dependencies = [ "wio", ] -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - [[package]] name = "dwrote" version = "0.11.0" @@ -865,9 +872,9 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if 1.0.0", ] @@ -881,20 +888,40 @@ dependencies = [ "encoding_rs", ] +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "enumset" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6216d2c19a6fb5f29d1ada1dc7bc4367a8cbf0fa4af5cf12e07b5bbdde6b5b2c" +checksum = "4799cdb24d48f1f8a7a98d06b7fde65a85a2d1e42b25a889f5406aa1fbefe074" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.5.5" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6451128aa6655d880755345d085494cf7561a6bee7c8dc821e5d77e6d267ecd4" +checksum = "ea83a3fbdc1d999ccfbcbee717eab36f8edf2d71693a23ce0d7cca19e085304c" dependencies = [ "darling", "proc-macro2", @@ -904,11 +931,11 @@ dependencies = [ [[package]] name = "euclid" -version = "0.22.6" +version = "0.22.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da96828553a086d7b18dcebfc579bd9628b016f86590d7453c115e490fa74b80" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] @@ -944,9 +971,9 @@ dependencies = [ [[package]] name = "fern" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065" +checksum = "3bdd7b0849075e79ee9a1836df22c717d1eba30451796fdc631b04565dd11e2a" dependencies = [ "log", ] @@ -963,9 +990,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" dependencies = [ "cfg-if 1.0.0", "libc", @@ -981,14 +1008,12 @@ checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" dependencies = [ - "cfg-if 1.0.0", "crc32fast", - "libc", - "miniz_oxide 0.4.4", + "miniz_oxide", ] [[package]] @@ -1015,21 +1040,21 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] name = "fluent-bundle" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acf044eeb4872d9dbf2667541fbf461f5965c57e343878ad0fb24b5793fa007" +checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd" dependencies = [ "fluent-langneg", "fluent-syntax", "intl-memoizer", "intl_pluralrules", - "ouroboros", "rustc-hash", + "self_cell", "smallvec", "unic-langid", ] @@ -1054,9 +1079,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.12" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" +checksum = "1ceeb589a3157cac0ab8cc585feb749bd2cea5cb55a6ee802ad72d9fd38303da" dependencies = [ "futures-core", "futures-sink", @@ -1123,8 +1148,8 @@ checksum = "122fa73a5566372f9df09768a16e8e3dad7ad18abe07835f1f0b71f84078ba4c" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.5.3", - "ttf-parser 0.15.0", + "memmap2 0.5.4", + "ttf-parser 0.15.2", ] [[package]] @@ -1158,7 +1183,7 @@ version = "0.1.0" source = "git+https://github.com/lapce/fount#bfe215c0f82595361dc2385bed5a8687a41e5dd2" dependencies = [ "font-kit", - "memmap2 0.5.3", + "memmap2 0.5.4", "swash", ] @@ -1383,9 +1408,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" dependencies = [ "typenum", "version_check", @@ -1402,14 +1427,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1425,9 +1450,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" dependencies = [ "fallible-iterator", "indexmap", @@ -1561,9 +1586,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ "aho-corasick", "bstr", @@ -1733,6 +1758,15 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +dependencies = [ + "ahash", +] + [[package]] name = "heck" version = "0.3.3" @@ -1784,7 +1818,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.2", + "itoa", ] [[package]] @@ -1825,7 +1859,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.2", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -1884,14 +1918,14 @@ dependencies = [ [[package]] name = "im" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111c1983f3c5bb72732df25cddacee9b546d08325fb584b5ebd38148be7b0246" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" dependencies = [ "bitmaps", "rand_core", "rand_xoshiro", - "serde 1.0.130", + "serde 1.0.137", "sized-chunks", "typenum", "version_check", @@ -1911,7 +1945,7 @@ dependencies = [ "jpeg-decoder", "num-iter", "num-rational", - "num-traits 0.2.14", + "num-traits 0.2.15", "png", "scoped_threadpool", "tiff", @@ -1919,9 +1953,9 @@ dependencies = [ [[package]] name = "include_dir" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a924bd335356c7622dff9ee33d06920afcf7f762a1a991236645e08c8a484b" +checksum = "24b56e147e6187d61e9d0f039f10e070d0c0a887e24fe0bb9ca3f29bfde62cab" dependencies = [ "glob", "include_dir_impl", @@ -1930,9 +1964,9 @@ dependencies = [ [[package]] name = "include_dir_impl" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afae3917f781921d7c7813992ccadff7e816f7e6ecb4b70a9ec3e740d51da3d6" +checksum = "0a0c890c85da4bab7bce4204c707396bbd3c6c8a681716a51c8814cfc2b682df" dependencies = [ "anyhow", "proc-macro-hack", @@ -1943,13 +1977,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.7.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown", - "serde 1.0.130", + "hashbrown 0.12.1", + "serde 1.0.137", ] [[package]] @@ -1994,9 +2028,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2048,12 +2082,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.2" @@ -2071,18 +2099,18 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744c24117572563a98a7e9168a5ac1ee4a1ca7f702211258797bbe0ed0346c3c" +checksum = "9478aa10f73e7528198d75109c8be5cd7d15fb530238040148d5f9a22d4c5b3b" dependencies = [ "rayon", ] [[package]] name = "js-sys" -version = "0.3.53" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4bf49d50e2961077d9c99f4b7997d770a1114f087c3c2e0069b36c13fc2979d" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" dependencies = [ "wasm-bindgen", ] @@ -2093,7 +2121,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a98d245f26984add78277a5306ca0cf774863d4eddb4912b31d94ee3fa1a22d4" dependencies = [ - "serde 1.0.130", + "serde 1.0.137", "serde_derive", "serde_json", ] @@ -2125,9 +2153,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kqueue" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058a107a784f8be94c7d35c1300f4facced2e93d2fbe5b1452b44e905ddca4a9" +checksum = "4d6112e8f37b59803ac47a42d14f1f3a59bbf72fc6857ffc5be455e28a691f8e" dependencies = [ "kqueue-sys", "libc", @@ -2150,7 +2178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" dependencies = [ "arrayvec 0.7.2", - "serde 1.0.130", + "serde 1.0.137", ] [[package]] @@ -2170,14 +2198,15 @@ dependencies = [ "lapce-rpc", "log", "lsp-types", - "serde 1.0.130", + "serde 1.0.137", "serde_json", - "strum 0.24.0", + "strum 0.24.1", "strum_macros 0.24.0", "thiserror", "tree-sitter", "tree-sitter-c", "tree-sitter-cpp", + "tree-sitter-css", "tree-sitter-elixir", "tree-sitter-elm", "tree-sitter-glimmer", @@ -2192,6 +2221,7 @@ dependencies = [ "tree-sitter-javascript", "tree-sitter-json", "tree-sitter-md", + "tree-sitter-nix", "tree-sitter-ocaml", "tree-sitter-php", "tree-sitter-python", @@ -2226,7 +2256,7 @@ dependencies = [ "fern", "flate2", "fuzzy-matcher", - "hashbrown", + "hashbrown 0.11.2", "im", "include_dir", "indexmap", @@ -2245,11 +2275,11 @@ dependencies = [ "rayon", "regex", "reqwest", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "sled", "structdesc", - "strum 0.24.0", + "strum 0.24.1", "strum_macros 0.24.0", "thiserror", "toml", @@ -2286,7 +2316,7 @@ dependencies = [ "parking_lot", "regex", "reqwest", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "toml", "trash", @@ -2306,7 +2336,7 @@ dependencies = [ "lsp-types", "notify 5.0.0-pre.15", "parking_lot", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "xi-rope", ] @@ -2330,7 +2360,7 @@ dependencies = [ "fern", "flate2", "fuzzy-matcher", - "hashbrown", + "hashbrown 0.11.2", "im", "image", "include_dir", @@ -2348,11 +2378,11 @@ dependencies = [ "parking_lot", "rayon", "regex", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "sled", "structdesc", - "strum 0.24.0", + "strum 0.24.1", "strum_macros 0.24.0", "toml", "unicode-segmentation", @@ -2401,9 +2431,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libgit2-sys" @@ -2421,9 +2451,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" dependencies = [ "cfg-if 1.0.0", "winapi 0.3.9", @@ -2431,9 +2461,9 @@ dependencies = [ [[package]] name = "libssh2-sys" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0186af0d8f171ae6b9c4c90ec51898bad5d08a2d5e470903a50d9ad8959cbee" +checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" dependencies = [ "cc", "libc", @@ -2445,9 +2475,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.3" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" dependencies = [ "cc", "libc", @@ -2476,10 +2506,11 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] @@ -2520,7 +2551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852e0dedfd52cc32325598b2631e0eba31b7b708959676a9f837042f276b09a2" dependencies = [ "bitflags", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "serde_repr", "url", @@ -2528,9 +2559,9 @@ dependencies = [ [[package]] name = "lyon" -version = "0.17.5" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a146a460c58fb5361fc7faf8d7a68b274f11969ee1f6856875c162d679d0306" +checksum = "cf0510ed5e3e2fb80f3db2061ef5ca92d87bfda1a624bb1eacf3bd50226e4cbb" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -2538,9 +2569,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "0.17.5" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1ebc5107076627bc9e402b09d11ba8ca68e06e3053b923bce9570ef70bf960" +checksum = "8037f716541ba0d84d3de05c0069f8068baf73990d55980558b84d944c8a244a" dependencies = [ "lyon_path", "sid", @@ -2548,34 +2579,32 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "0.17.5" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe153a6ce93cb97c85ba47a007fd437079bbff5592b9c0f77195973b8b169d69" +checksum = "71d89ccbdafd83d259403e22061be27bccc3254bba65cdc5303250c4227c8c8e" dependencies = [ "arrayvec 0.5.2", "euclid", - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] name = "lyon_path" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ef7433accd4515fc98f59bb3cdf565a9615f0c666f50bfcb96134bbd91ccc04" +checksum = "5b0a59fdf767ca0d887aa61d1b48d4bbf6a124c1a45503593f7d38ab945bfbc0" dependencies = [ "lyon_geom", ] [[package]] name = "lyon_tessellation" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56799e28a041fa98b0865a93d2e19f64de3c8f2708bfe96b8af5c7d491aef468" +checksum = "7230e08dd0638048e46f387f255dbe7a7344a3e6705beab53242b5af25635760" dependencies = [ - "arrayvec 0.5.2", "float_next_after", "lyon_path", - "sid", ] [[package]] @@ -2604,9 +2633,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" @@ -2628,18 +2657,18 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057a3db23999c867821a7a59feb06a578fcb03685e983dff90daf9e7d24ac08f" +checksum = "d5172b50c23043ff43dd53e51392f36519d9b35a8f3a410d30ece5d1aedd58ae" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] @@ -2652,19 +2681,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "miniz_oxide" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ "adler", ] @@ -2690,16 +2709,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow 0.3.7", - "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "windows-sys 0.36.1", ] [[package]] @@ -2858,29 +2875,20 @@ dependencies = [ "inotify 0.9.6", "kqueue", "libc", - "mio 0.8.2", - "serde 1.0.130", + "mio 0.8.4", + "serde 1.0.137", "walkdir", "winapi 0.3.9", ] -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] @@ -2891,18 +2899,18 @@ checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] @@ -2911,14 +2919,14 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -2973,29 +2981,21 @@ dependencies = [ [[package]] name = "object" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" -dependencies = [ - "memchr", -] - -[[package]] -name = "object" -version = "0.27.1" +version = "0.28.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" dependencies = [ "crc32fast", + "hashbrown 0.11.2", "indexmap", "memchr", ] [[package]] name = "once_cell" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "opaque-debug" @@ -3031,15 +3031,15 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.16.0+1.1.1l" +version = "111.21.0+1.1.1p" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f" +checksum = "6d0a8313729211913936f1b95ca47a5fc7f2e04cd658c115388287f8a8361008" dependencies = [ "cc", ] @@ -3058,29 +3058,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "ouroboros" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeff60e3e37407a80ead3e9458145b456e978c4068cddbfea6afb48572962ca" -dependencies = [ - "ouroboros_macro", - "stable_deref_trait", -] - -[[package]] -name = "ouroboros_macro" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03f2cb802b5bdfdf52f1ffa0b54ce105e4d346e91990dd571f86c91321ad49e2" -dependencies = [ - "Inflector", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pango" version = "0.14.8" @@ -3211,7 +3188,7 @@ dependencies = [ "bytemuck", "glam", "glow", - "hashbrown", + "hashbrown 0.11.2", "include_dir", "linked-hash-map", "log", @@ -3249,9 +3226,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -3261,9 +3238,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "png" @@ -3274,14 +3251,14 @@ dependencies = [ "bitflags", "crc32fast", "deflate", - "miniz_oxide 0.5.1", + "miniz_oxide", ] [[package]] name = "proc-macro-crate" -version = "1.0.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", "toml", @@ -3319,11 +3296,11 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -3360,33 +3337,33 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.15" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" dependencies = [ "proc-macro2", ] [[package]] name = "rand_core" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" [[package]] name = "rand_xoshiro" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" dependencies = [ "rand_core", ] [[package]] name = "rayon" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ "autocfg", "crossbeam-deque", @@ -3396,14 +3373,13 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] @@ -3421,28 +3397,29 @@ checksum = "9ae028b272a6e99d9f8260ceefa3caa09300a8d6c8d2b2001316474bc52122e9" [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", "redox_syscall", + "thiserror", ] [[package]] name = "regalloc" -version = "0.0.31" +version = "0.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "571f7f397d61c4755285cd37853fe8e03271c243424a907415909379659381c5" +checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02" dependencies = [ "log", "rustc-hash", @@ -3507,9 +3484,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", "bytes", @@ -3529,12 +3506,13 @@ dependencies = [ "native-tls", "percent-encoding", "pin-project-lite", - "serde 1.0.130", + "serde 1.0.137", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", "tokio-socks", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -3555,28 +3533,28 @@ dependencies = [ "png", "rgb", "svgfilters", - "svgtypes 0.8.0", + "svgtypes 0.8.1", "tiny-skia", "usvg 0.22.0", ] [[package]] name = "rgb" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74fdc210d8f24a7dbfedc13b04ba5764f5232754ccebfdf5fff1bad791ccbc6" +checksum = "c3b221de559e4a29df3b957eec92bc0de6bc8eaf6ca9cfed43e5e1d67ff65a34" dependencies = [ "bytemuck", ] [[package]] name = "rkyv" -version = "0.7.28" +version = "0.7.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631f7d2a2854abb66724f492ce5256e79685a673dc210ac022194cedd5c914d3" +checksum = "517a3034eb2b1499714e9d1e49b2367ad567e07639b69776d35e259d9c27cca6" dependencies = [ "bytecheck", - "hashbrown", + "hashbrown 0.12.1", "ptr_meta", "rend", "rkyv_derive", @@ -3585,9 +3563,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.28" +version = "0.7.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c067e650861a749720952aed722fb344449bc95de33e6456d426f5c7d44f71c0" +checksum = "505c209ee04111a006431abf39696e640838364d67a107c559ababaf6fd8c9dd" dependencies = [ "proc-macro2", "quote", @@ -3641,9 +3619,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf" [[package]] name = "rustybuzz" @@ -3663,14 +3641,14 @@ dependencies = [ [[package]] name = "rustybuzz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ff94f20221325d000e552781713e53b0d85c1d9551b6f420d12daf5a08eace" +checksum = "a617c811f5c9a7060fe511d35d13bf5b9f0463ce36d63ce666d05779df2b4eba" dependencies = [ "bitflags", "bytemuck", "smallvec", - "ttf-parser 0.15.0", + "ttf-parser 0.15.2", "unicode-bidi-mirroring", "unicode-ccc", "unicode-general-category 0.4.0", @@ -3679,9 +3657,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "safe_arch" @@ -3708,7 +3686,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "windows-sys", + "windows-sys 0.36.1", ] [[package]] @@ -3731,9 +3709,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -3744,14 +3722,20 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", ] +[[package]] +name = "self_cell" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" + [[package]] name = "semver" version = "0.9.0" @@ -3793,9 +3777,9 @@ checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" [[package]] name = "serde" -version = "1.0.130" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] @@ -3814,18 +3798,18 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" dependencies = [ - "serde 1.0.130", + "serde 1.0.137", ] [[package]] name = "serde_derive" -version = "1.0.130" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -3834,20 +3818,20 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.67" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ - "itoa 0.4.8", + "itoa", "ryu", - "serde 1.0.130", + "serde 1.0.137", ] [[package]] name = "serde_repr" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" +checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" dependencies = [ "proc-macro2", "quote", @@ -3861,34 +3845,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.2", + "itoa", "ryu", - "serde 1.0.130", + "serde 1.0.137", ] [[package]] name = "serde_yaml" -version = "0.8.21" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c608a35705a5d3cdc9fbe403147647ff34b921f8e833e49306df898f9b20af" +checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" dependencies = [ - "dtoa", "indexmap", - "serde 1.0.130", + "ryu", + "serde 1.0.137", "yaml-rust", ] [[package]] name = "sha1" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer", "cfg-if 1.0.0", @@ -3899,9 +3892,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740223c51853f3145fe7c90360d2d4232f2b62e3449489c207eccde818979982" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] @@ -3912,14 +3905,14 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.15", ] [[package]] name = "signal-hook" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" dependencies = [ "libc", "signal-hook-registry", @@ -3927,9 +3920,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29fd5867f1c4f2c5be079aee7a2adf1152ebb04a4bc4d341f504b7dece607ed4" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" dependencies = [ "libc", "mio 0.6.23", @@ -3979,9 +3972,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "sled" @@ -4082,7 +4075,7 @@ checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ "proc-macro2", "quote", - "serde 1.0.130", + "serde 1.0.137", "serde_derive", "syn", ] @@ -4096,7 +4089,7 @@ dependencies = [ "base-x", "proc-macro2", "quote", - "serde 1.0.130", + "serde 1.0.137", "serde_derive", "serde_json", "sha1", @@ -4134,9 +4127,9 @@ checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" [[package]] name = "strum" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum_macros" @@ -4185,9 +4178,9 @@ dependencies = [ [[package]] name = "svgtypes" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabb3eb59a457c56d5282ab4545609e2cc382b41f6af239bb8d59a7267ef94b3" +checksum = "cc802f68b144cdf4d8ff21301f9a7863e837c627fde46537e29c05e8a18c85c1" dependencies = [ "siphasher 0.3.10", ] @@ -4203,13 +4196,13 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -4232,9 +4225,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bffcddbc2458fa3e6058414599e3c838a022abae82e5c67b4f7f80298d5bff" +checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" [[package]] name = "tempfile" @@ -4252,18 +4245,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.28" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283d5230e63df9608ac7d9691adc1dfb6e701225436eb64d0b9a7f0a5a04f6ec" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.28" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa3884228611f5cd3608e2d409bf7dce832e4eb3135e3f11addbd7e41bd68e71" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -4283,9 +4276,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" dependencies = [ "once_cell", ] @@ -4338,9 +4331,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" dependencies = [ "libc", "num_threads", @@ -4371,9 +4364,9 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bcfd4339bdd4545eabed74b208f2f1555f2e6540fb58135c01f46c0940aa138" +checksum = "d049bfef0eaa2521e75d9ffb5ce86ad54480932ae19b85f78bec6f52c4d30d78" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -4391,9 +4384,9 @@ checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1" [[package]] name = "tinyvec" -version = "1.3.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -4413,7 +4406,7 @@ dependencies = [ "bytes", "libc", "memchr", - "mio 0.8.2", + "mio 0.8.4", "num_cpus", "once_cell", "pin-project-lite", @@ -4459,25 +4452,25 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "indexmap", - "serde 1.0.130", + "serde 1.0.137", ] [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.26" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ "cfg-if 1.0.0", "log", @@ -4488,9 +4481,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.15" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", @@ -4499,30 +4492,19 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] [[package]] name = "tracing-subscriber" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cbe87a2fa7e35900ce5de20220a582a9483a7063811defce79d7cbd59d4cfe" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.6" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77be66445c4eeebb934a7340f227bfe7b338173d3f8c00a60a5a58005c9faecf" +checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" dependencies = [ "ansi_term", "sharded-slab", @@ -4532,12 +4514,12 @@ dependencies = [ [[package]] name = "tracing-wasm" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae741706df70547fca8715f74a8569677666e7be3454313af70f6e158034485" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" dependencies = [ "tracing", - "tracing-subscriber 0.2.20", + "tracing-subscriber", "wasm-bindgen", ] @@ -4559,9 +4541,9 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.20.6" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3b781640108d29892e8b9684642d2cda5ea05951fd58f0fea1db9edeb9b71" +checksum = "549a9faf45679ad50b7f603253635598cf5e007d8ceb806a23f95355938f76a0" dependencies = [ "cc", "regex", @@ -4587,10 +4569,19 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-css" +version = "0.19.0" +source = "git+https://github.com/syntacti/tree-sitter-css?branch=master#b5018f23290618d70c7483cd60a06a05d54832e1" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-elixir" version = "0.19.0" -source = "git+https://github.com/elixir-lang/tree-sitter-elixir.git#60863fc6e27d60cf4b1917499ed2259f92c7800e" +source = "git+https://github.com/elixir-lang/tree-sitter-elixir.git#5d0c1bfcdf8aaad225525acad930a972b319a675" dependencies = [ "cc", "tree-sitter", @@ -4609,7 +4600,7 @@ dependencies = [ [[package]] name = "tree-sitter-glimmer" version = "0.0.1" -source = "git+https://github.com/VixieTSQ/tree-sitter-glimmer#d8a41791e83d445ef52748429cea6fed974908e7" +source = "git+https://github.com/VixieTSQ/tree-sitter-glimmer#7281caca2ba114e1960c5d944a37860ef0841426" dependencies = [ "cc", "tree-sitter", @@ -4686,7 +4677,7 @@ dependencies = [ [[package]] name = "tree-sitter-java" version = "0.20.0" -source = "git+https://github.com/tree-sitter/tree-sitter-java.git#e7cb801ef57f74db5c4ebe14df74de852bb451b5" +source = "git+https://github.com/tree-sitter/tree-sitter-java.git#ac14b4b1884102839455d32543ab6d53ae089ab7" dependencies = [ "cc", "tree-sitter", @@ -4715,7 +4706,16 @@ dependencies = [ [[package]] name = "tree-sitter-md" version = "0.0.1" -source = "git+https://github.com/MDeiml/tree-sitter-markdown.git#6d112e7a9c1694504bb78ee0b92dcd509625e0df" +source = "git+https://github.com/MDeiml/tree-sitter-markdown.git#be3e08acfd85bd87d85f41fde74fdcec25f76dbe" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-nix" +version = "0.0.1" +source = "git+https://github.com/ghishadow/tree-sitter-nix?branch=master#c882031eba1afd1f5dcd4649a68f4be48caaa15f" dependencies = [ "cc", "tree-sitter", @@ -4733,7 +4733,7 @@ dependencies = [ [[package]] name = "tree-sitter-php" version = "0.19.1" -source = "git+https://github.com/tree-sitter/tree-sitter-php.git#ead3e4cc5f54602a6b54826c5d6881c9a9da15af" +source = "git+https://github.com/tree-sitter/tree-sitter-php.git#6ff54a9b1556bff4252c0cd0af6e616ba151b1fc" dependencies = [ "cc", "tree-sitter", @@ -4741,9 +4741,9 @@ dependencies = [ [[package]] name = "tree-sitter-python" -version = "0.19.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c46916553ebc2a5b23763cd2da8d2b104c515c8f828eb678d1477ccd8c379c" +checksum = "713170684ba94376b784b0c6dd23693461e15f96a806ed1848e40996e3cda7c7" dependencies = [ "cc", "tree-sitter", @@ -4769,9 +4769,9 @@ dependencies = [ [[package]] name = "tree-sitter-rust" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df540a493d754015d22eaf57c38f58804be3713a22f6062db983ec15f85c3c9" +checksum = "13470fafb7327a3acf96f5bc1013b5539a899a182f01c59b5af53f6b93195717" dependencies = [ "cc", "tree-sitter", @@ -4808,9 +4808,9 @@ dependencies = [ [[package]] name = "tree-sitter-typescript" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8935efd97c92067c9b2b6d7acb647607590996ba80f3a7be09a197f9c1fdab73" +checksum = "4e8ed0ecb931cdff13c6a13f45ccd615156e2779d9ffb0395864e05505e6e86d" dependencies = [ "cc", "tree-sitter", @@ -4836,9 +4836,9 @@ checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" [[package]] name = "ttf-parser" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c74c96594835e10fa545e2a51e8709f30b173a092bfd6036ef2cec53376244f3" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" [[package]] name = "type-map" @@ -4851,9 +4851,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" @@ -4941,9 +4941,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-bidi-mirroring" @@ -4969,26 +4969,32 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07547e3ee45e28326cc23faac56d44f58f16ab23e413db526debce3b0bfd2742" +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd" dependencies = [ "tinyvec", ] [[package]] name = "unicode-script" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098ec66172ce21cd55f8bcc786ee209dd20e04eff70acfca30cb79924d173ae9" +checksum = "58dd944fd05f2f0b5c674917aea8a4df6af84f2d8de3fe8d988b95d28fb8fb09" [[package]] name = "unicode-segmentation" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-vo" @@ -4998,15 +5004,9 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] name = "unicode-width" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" - -[[package]] -name = "unicode-xid" -version = "0.2.2" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "url" @@ -5018,7 +5018,7 @@ dependencies = [ "idna", "matches", "percent-encoding", - "serde 1.0.130", + "serde 1.0.137", ] [[package]] @@ -5064,11 +5064,11 @@ dependencies = [ "pico-args", "rctree 0.4.0", "roxmltree", - "rustybuzz 0.5.0", + "rustybuzz 0.5.1", "simplecss", "siphasher 0.3.10", - "svgtypes 0.8.0", - "ttf-parser 0.15.0", + "svgtypes 0.8.1", + "ttf-parser 0.15.2", "unicode-bidi", "unicode-script", "unicode-vo", @@ -5110,9 +5110,9 @@ checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vte" @@ -5169,9 +5169,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.76" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -5179,9 +5179,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.76" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" dependencies = [ "bumpalo", "lazy_static", @@ -5194,9 +5194,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fded345a6559c2cfee778d562300c581f7d4ff3edb9b0d230d69800d213972" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -5206,9 +5206,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.76" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5216,9 +5216,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.76" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" dependencies = [ "proc-macro2", "quote", @@ -5229,15 +5229,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.76" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "wasm-encoder" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29" +checksum = "31f0c17267a5ffd6ae3d897589460e21db1673c84fb7016b909c9691369a75ea" +dependencies = [ + "leb128", +] [[package]] name = "wasmer" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f0188c23fc1b7de9bd7f8b834d0b1cd5edbe66e287452e8ce36d24418114f7" +checksum = "ea8d8361c9d006ea3d7797de7bd6b1492ffd0f91a22430cfda6c1658ad57bedf" dependencies = [ "cfg-if 1.0.0", "indexmap", @@ -5247,6 +5256,7 @@ dependencies = [ "target-lexicon", "thiserror", "wasm-bindgen", + "wasmer-artifact", "wasmer-compiler", "wasmer-compiler-cranelift", "wasmer-derive", @@ -5259,30 +5269,42 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "wasmer-artifact" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aaf9428c29c1d8ad2ac0e45889ba8a568a835e33fd058964e5e500f2f7ce325" +dependencies = [ + "enumset", + "loupe", + "thiserror", + "wasmer-compiler", + "wasmer-types", +] + [[package]] name = "wasmer-compiler" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c51cc589772c5f90bd329244c2416976d6cb2ee00d59429aaa8f421d9fe447" +checksum = "e67a6cd866aed456656db2cfea96c18baabbd33f676578482b85c51e1ee19d2c" dependencies = [ "enumset", "loupe", "rkyv", - "serde 1.0.130", + "serde 1.0.137", "serde_bytes", "smallvec", "target-lexicon", "thiserror", "wasmer-types", - "wasmer-vm", "wasmparser", ] [[package]] name = "wasmer-compiler-cranelift" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09691e3e323b4e1128d2127f60f9cd988b66ce49afc8184b071c2b5ab16793f2" +checksum = "48be2f9f6495f08649e4f8b946a2cbbe119faf5a654aa1457f9504a99d23dae0" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -5296,14 +5318,13 @@ dependencies = [ "tracing", "wasmer-compiler", "wasmer-types", - "wasmer-vm", ] [[package]] name = "wasmer-derive" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f5cb7b09640e09f1215da95d6fb7477d2db572f064b803ff705f39ff079cc5" +checksum = "00e50405cc2a2f74ff574584710a5f2c1d5c93744acce2ca0866084739284b51" dependencies = [ "proc-macro-error", "proc-macro2", @@ -5313,21 +5334,22 @@ dependencies = [ [[package]] name = "wasmer-engine" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab20311c354fe2c12bc766417e0a1a45f399c1cd8ff262127d1dc86d0588971a" +checksum = "3f98f010978c244db431b392aeab0661df7ea0822343334f8f2a920763548e45" dependencies = [ "backtrace", "enumset", "lazy_static", "loupe", - "memmap2 0.5.3", + "memmap2 0.5.4", "more-asserts", "rustc-demangle", - "serde 1.0.130", + "serde 1.0.137", "serde_bytes", "target-lexicon", "thiserror", + "wasmer-artifact", "wasmer-compiler", "wasmer-types", "wasmer-vm", @@ -5335,19 +5357,22 @@ dependencies = [ [[package]] name = "wasmer-engine-dylib" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5b7a74731e1dcccaf10a8ff5f72216c82f12972ce17cc81c6caa1afff75ea" +checksum = "ad0358af9c154724587731175553805648d9acb8f6657880d165e378672b7e53" dependencies = [ "cfg-if 1.0.0", + "enum-iterator", "enumset", "leb128", "libloading", "loupe", + "object", "rkyv", - "serde 1.0.130", + "serde 1.0.137", "tempfile", "tracing", + "wasmer-artifact", "wasmer-compiler", "wasmer-engine", "wasmer-object", @@ -5358,9 +5383,9 @@ dependencies = [ [[package]] name = "wasmer-engine-universal" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfeae8d5b825ad7abcf9a34e66eb11e1507b21020efe7bbf9897e3dd8d7869e2" +checksum = "440dc3d93c9ca47865a4f4edd037ea81bf983b5796b59b3d712d844b32dbef15" dependencies = [ "cfg-if 1.0.0", "enumset", @@ -5370,18 +5395,35 @@ dependencies = [ "rkyv", "wasmer-compiler", "wasmer-engine", + "wasmer-engine-universal-artifact", "wasmer-types", "wasmer-vm", "winapi 0.3.9", ] +[[package]] +name = "wasmer-engine-universal-artifact" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f1db3f54152657eb6e86c44b66525ff7801dad8328fe677da48dd06af9ad41" +dependencies = [ + "enum-iterator", + "enumset", + "loupe", + "rkyv", + "thiserror", + "wasmer-artifact", + "wasmer-compiler", + "wasmer-types", +] + [[package]] name = "wasmer-object" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4714e4f3bdc3b2157c24284417d19cd99de036da31d00ec5664712dcb72f7" +checksum = "8d831335ff3a44ecf451303f6f891175c642488036b92ceceb24ac8623a8fa8b" dependencies = [ - "object 0.27.1", + "object", "thiserror", "wasmer-compiler", "wasmer-types", @@ -5389,22 +5431,25 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434e1c0177da0a74ecca90b2aa7d5e86198260f07e8ba83be89feb5f0a4aeead" +checksum = "39df01ea05dc0a9bab67e054c7cb01521e53b35a7bb90bd02eca564ed0b2667f" dependencies = [ + "backtrace", + "enum-iterator", "indexmap", "loupe", + "more-asserts", "rkyv", - "serde 1.0.130", + "serde 1.0.137", "thiserror", ] [[package]] name = "wasmer-vfs" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3a58a3700781aa4f5344915ea082086e75ba7ebe294f60ae499614db92dd00" +checksum = "9302eae3edc53cb540c2d681e7f16d8274918c1ce207591f04fed351649e97c0" dependencies = [ "libc", "thiserror", @@ -5413,31 +5458,37 @@ dependencies = [ [[package]] name = "wasmer-vm" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8f964ebba70d9f81340228b98a164782591f00239fc7f01e1b67afcf0e0156" +checksum = "30d965fa61f4dc4cdb35a54daaf7ecec3563fbb94154a6c35433f879466247dd" dependencies = [ "backtrace", "cc", "cfg-if 1.0.0", + "corosensei", + "enum-iterator", "indexmap", + "lazy_static", "libc", "loupe", + "mach", "memoffset", "more-asserts", "region", "rkyv", - "serde 1.0.130", + "scopeguard", + "serde 1.0.137", "thiserror", + "wasmer-artifact", "wasmer-types", "winapi 0.3.9", ] [[package]] name = "wasmer-wasi" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2b1d981ad312dac6e74a41a35b9bca41a6d1157c3e6a575fb1041e4b516610" +checksum = "fadbe31e3c1b6f3e398ad172b169152ae1a743ae6efd5f9ffb34019983319d99" dependencies = [ "cfg-if 1.0.0", "generational-arena", @@ -5454,9 +5505,9 @@ dependencies = [ [[package]] name = "wasmer-wasi-types" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7731240c0ae536623414beb73091dddf68d1a080f49086fc31ec916536b1af98" +checksum = "22dc83aadbdf97388de3211cb6f105374f245a3cf2a5c65a16776e7a087a8468" dependencies = [ "byteorder", "time 0.2.27", @@ -5465,33 +5516,36 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.78.2" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52144d4c78e5cf8b055ceab8e5fa22814ce4315d6002ad32cfd914f37c12fd65" +checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" [[package]] name = "wast" -version = "38.0.1" +version = "42.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0d7b256bef26c898fa7344a2d627e8499f5a749432ce0a05eae1a64ff0c271" +checksum = "badcb03f976f983ff0daf294da9697be659442f61e6b0942bb37a2b6cbfe9dd4" dependencies = [ "leb128", + "memchr", + "unicode-width", + "wasm-encoder", ] [[package]] name = "wat" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcfaeb27e2578d2c6271a45609f4a055e6d7ba3a12eff35b1fd5ba147bdf046" +checksum = "b92f20b742ac527066c8414bc0637352661b68cab07ef42586cefaba71c965cf" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.53" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224b2f6b67919060055ef1a67807367c2066ed520c3862cc013d26cf893a783c" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" dependencies = [ "js-sys", "wasm-bindgen", @@ -5570,6 +5624,19 @@ dependencies = [ "windows_x86_64_msvc 0.37.0", ] +[[package]] +name = "windows-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + [[package]] name = "windows-sys" version = "0.36.1" @@ -5583,6 +5650,12 @@ dependencies = [ "windows_x86_64_msvc 0.36.1", ] +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + [[package]] name = "windows_aarch64_msvc" version = "0.36.1" @@ -5595,6 +5668,12 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + [[package]] name = "windows_i686_gnu" version = "0.36.1" @@ -5607,6 +5686,12 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + [[package]] name = "windows_i686_msvc" version = "0.36.1" @@ -5619,6 +5704,12 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + [[package]] name = "windows_x86_64_gnu" version = "0.36.1" @@ -5631,6 +5722,12 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" @@ -5688,7 +5785,7 @@ dependencies = [ "bytecount", "memchr", "regex", - "serde 1.0.130", + "serde 1.0.137", "unicode-segmentation", ] @@ -5733,9 +5830,9 @@ checksum = "c03b3e19c937b5b9bd8e52b1c88f30cce5c0d33d676cf174866175bb794ff658" [[package]] name = "yeslogic-fontconfig-sys" -version = "3.0.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3f5a91c31bef6650d3a1b69192b4217fd88e4cfedc8101813e4dc3394ecbb8" +checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386" dependencies = [ "const-cstr", "dlib", diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index ca415493fa..8b7405825b 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -13,13 +13,13 @@ strum = "0.24.0" strum_macros = "0.24" serde = "1.0" serde_json = "1.0" -tree-sitter = "0.20.6" +tree-sitter = "0.20.7" tree-sitter-highlight = "0.20.1" tree-sitter-rust = { version = "0.20.0", optional = true } tree-sitter-go = { version = "0.19.1", optional = true } tree-sitter-javascript = { version = "0.20.0", optional = true } tree-sitter-typescript = { version = "0.20.0", optional = true } -tree-sitter-python = { version = "0.19.1", optional = true } +tree-sitter-python = { version = "0.20.1", optional = true } tree-sitter-toml = { version = "0.20.0", optional = true } tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir.git", version = "0.19.0", optional = true } tree-sitter-php = { git = "https://github.com/tree-sitter/tree-sitter-php.git", version = "0.19.1", optional = true } @@ -40,6 +40,8 @@ tree-sitter-haxe = { git = "https://github.com/VixieTSQ/tree-sitter-haxe", versi tree-sitter-hcl = { git = "https://github.com/VixieTSQ/tree-sitter-hcl", version = "0.0.1", optional = true } tree-sitter-scss = { git = "https://github.com/VixieTSQ/tree-sitter-scss", version = "0.0.1", branch = "patch-1", optional = true } tree-sitter-hare = { version = "0.20.7", optional = true } +# switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-css/pull/22 +tree-sitter-css = { git = "https://github.com/syntacti/tree-sitter-css", branch = "master", optional = true } lsp-types = { version = "0.89.2", features = ["proposed"] } xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } lapce-rpc = { path = "../lapce-rpc" } @@ -73,4 +75,5 @@ lang-glimmer = ["dep:tree-sitter-glimmer"] lang-haxe = ["dep:tree-sitter-haxe"] lang-hcl = ["dep:tree-sitter-hcl"] lang-scss = ["dep:tree-sitter-scss"] -lang-hare = ["dep:tree-sitter-hare"] \ No newline at end of file +lang-hare = ["dep:tree-sitter-hare"] +lang-css = ["dep:tree-sitter-css"] diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index f3f8af401e..1fbceea427 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -152,6 +152,8 @@ pub enum LapceLanguage { SCSS, #[cfg(feature = "lang-hare")] Hare, + #[cfg(feature = "lang-css")] + Css } // NOTE: Elements in the array must be in the same order as the enum variants of @@ -460,6 +462,16 @@ const LANGUAGES: &[SyntaxProperties] = &[ code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["ha"], }, + #[cfg(feature = "lang-css")] + SyntaxProperties { + id: LapceLanguage::Css, + language: tree_sitter_css::language, + highlight: tree_sitter_css::HIGHLIGHTS_QUERY, + comment: "/*", + indent: " ", + code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), + extensions: &["css"], + } ]; impl LapceLanguage { @@ -723,4 +735,8 @@ mod test { fn test_hare_lang() { assert_language(LapceLanguage::Hare, &["ha"]); } + #[cfg(feature = "lang-css")] + fn test_css_lang() { + assert_language(LapceLanguage::Css, &["css"]); + } } diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index 182711488e..768e206f3f 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -86,7 +86,8 @@ all-languages = [ "lang-haxe", "lang-hcl", "lang-scss", - "lang-hare" + "lang-hare", + "lang-css" ] @@ -114,4 +115,5 @@ lang-glimmer = ["lapce-core/lang-glimmer"] lang-haxe = ["lapce-core/lang-haxe"] lang-hcl = ["lapce-core/lang-hcl"] lang-scss = ["lapce-core/lang-scss"] -lang-hare = ["lapce-core/lang-hare"] \ No newline at end of file +lang-hare = ["lapce-core/lang-hare"] +lang-css = ["lapce-core/lang-css"] \ No newline at end of file From 26e8b0fb82e8103a4ebaa9df61dfff0d8cfedb43 Mon Sep 17 00:00:00 2001 From: Suraj Ghimire Date: Fri, 24 Jun 2022 23:34:37 +0530 Subject: [PATCH 012/816] remove tree-sitter-nix from Cargo.lock Signed-off-by: Suraj Ghimire --- Cargo.lock | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 20a4f65a73..c0b1d75ce5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2221,7 +2221,6 @@ dependencies = [ "tree-sitter-javascript", "tree-sitter-json", "tree-sitter-md", - "tree-sitter-nix", "tree-sitter-ocaml", "tree-sitter-php", "tree-sitter-python", @@ -4712,15 +4711,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-nix" -version = "0.0.1" -source = "git+https://github.com/ghishadow/tree-sitter-nix?branch=master#c882031eba1afd1f5dcd4649a68f4be48caaa15f" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tree-sitter-ocaml" version = "0.20.0" From 1a699e4b549db136950cdf14caf05eab3fa83f7b Mon Sep 17 00:00:00 2001 From: Suraj Ghimire Date: Sat, 25 Jun 2022 00:21:37 +0530 Subject: [PATCH 013/816] fix rustfmt error in ci Signed-off-by: Suraj Ghimire --- lapce-core/src/language.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index 1fbceea427..34226c7a17 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -153,7 +153,7 @@ pub enum LapceLanguage { #[cfg(feature = "lang-hare")] Hare, #[cfg(feature = "lang-css")] - Css + Css, } // NOTE: Elements in the array must be in the same order as the enum variants of @@ -471,7 +471,7 @@ const LANGUAGES: &[SyntaxProperties] = &[ indent: " ", code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["css"], - } + }, ]; impl LapceLanguage { From 34891ee4bf8601e70437e281b3e41a942b7febc1 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 24 Jun 2022 20:23:34 +0100 Subject: [PATCH 014/816] Update new-contributor-guide-developer.md --- docs/new-contributor-guide-developer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/new-contributor-guide-developer.md b/docs/new-contributor-guide-developer.md index 46d536e499..3054d2a93a 100644 --- a/docs/new-contributor-guide-developer.md +++ b/docs/new-contributor-guide-developer.md @@ -4,7 +4,7 @@ This document contains some useful resources for anyone wishing to contribute to ## Quick Start -1. Get an overview of the architecture from [`docs/why-lapce.md`](why-lapce.md). +1. Get an overview of the architecture from [`docs/why-lapce.md`](why-lapce.md) and [Architecture](https://docs.lapce.dev/development/architecture). 2. Explore the rope data structure, a key part of Lapce's architecture. The crate used is [xi_rope](https://crates.io/crates/xi-rope). From 5d291e86557d7164306b828afc7dfc695fcda169 Mon Sep 17 00:00:00 2001 From: panekj Date: Sat, 25 Jun 2022 15:44:17 +0200 Subject: [PATCH 015/816] add c/cpp --- lapce-proxy/src/buffer.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 6a3f6aeb9a..3fd428afdc 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -158,6 +158,10 @@ fn language_id_from_path(path: &Path) -> Option<&str> { "rs" => "rust", "go" => "go", "py" => "python", + "cpp" | "hpp" | "cxx" | "hxx" | "c++" | "h++" | "cc" | "hh" | "C" | "H" => { + "cpp" + } + "c" | "h" => "c", _ => return None, }) } From bd761c9b7bf5645725bf5ac711a162dd663ab5c2 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Sun, 26 Jun 2022 07:34:13 +0900 Subject: [PATCH 016/816] add a missing cache step --- .github/workflows/pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 5ac33a9c4f..d24120254e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -63,6 +63,7 @@ jobs: - run: rustup component add clippy - name: Install dependencies on Ubuntu run: sudo apt-get update && sudo apt-get install cmake pkg-config libgtk-3-dev + - uses: Swatinem/rust-cache@v1 - uses: actions-rs/cargo@v1 with: command: clippy From fe6ef9d5e2fe7d92f4320d809036c8eb4eefc80c Mon Sep 17 00:00:00 2001 From: MinusGix Date: Sat, 25 Jun 2022 17:34:16 -0500 Subject: [PATCH 017/816] Fix crashing on workspace symbol search --- lapce-data/src/palette.rs | 56 ++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/lapce-data/src/palette.rs b/lapce-data/src/palette.rs index 6be4823b60..b3475f2e9e 100644 --- a/lapce-data/src/palette.rs +++ b/lapce-data/src/palette.rs @@ -74,6 +74,28 @@ impl PaletteType { | PaletteType::Reference ) } + + /// Get the palette type that it should be considered as based on the current + /// [`PaletteType`] and the current input. + fn get_palette_type(current_type: &PaletteType, input: &str) -> PaletteType { + match current_type { + PaletteType::Reference | PaletteType::SshHost | PaletteType::Theme => { + return current_type.clone(); + } + _ => (), + } + if input.is_empty() { + return PaletteType::File; + } + match input { + _ if input.starts_with('/') => PaletteType::Line, + _ if input.starts_with('@') => PaletteType::DocumentSymbol, + _ if input.starts_with('#') => PaletteType::WorkspaceSymbol, + _ if input.starts_with('>') => PaletteType::Workspace, + _ if input.starts_with(':') => PaletteType::Command, + _ => PaletteType::File, + } + } } #[derive(Clone, Debug, PartialEq)] @@ -678,13 +700,15 @@ impl PaletteViewData { let palette = Arc::make_mut(&mut self.palette); // WorkspaceSymbol requires sending the query to the lsp, so we refresh it when the input changes - if input != palette.input - && matches!(palette.palette_type, PaletteType::WorkspaceSymbol) - { + // If the input changed and the palette type is still/now workspace-symbol then we rerun it + let palette_type = + PaletteType::get_palette_type(&palette.palette_type, &input); + if input != palette.input && palette_type == PaletteType::WorkspaceSymbol { self.run(ctx, Some(PaletteType::WorkspaceSymbol), Some(input)); return; } + // Update the current input palette.input = input; self.update_palette(ctx) @@ -693,7 +717,11 @@ impl PaletteViewData { pub fn update_palette(&mut self, ctx: &mut EventCtx) { let palette = Arc::make_mut(&mut self.palette); palette.index = 0; - let palette_type = self.get_palette_type(); + + let palette_type = PaletteType::get_palette_type( + &self.palette.palette_type, + &self.palette.input, + ); if self.palette.palette_type != palette_type { self.run(ctx, Some(palette_type), None); return; @@ -710,26 +738,6 @@ impl PaletteViewData { } } - fn get_palette_type(&self) -> PaletteType { - match self.palette.palette_type { - PaletteType::Reference | PaletteType::SshHost | PaletteType::Theme => { - return self.palette.palette_type.clone(); - } - _ => (), - } - if self.palette.input.is_empty() { - return PaletteType::File; - } - match self.palette.input { - _ if self.palette.input.starts_with('/') => PaletteType::Line, - _ if self.palette.input.starts_with('@') => PaletteType::DocumentSymbol, - _ if self.palette.input.starts_with('#') => PaletteType::WorkspaceSymbol, - _ if self.palette.input.starts_with('>') => PaletteType::Workspace, - _ if self.palette.input.starts_with(':') => PaletteType::Command, - _ => PaletteType::File, - } - } - fn get_files(&self, ctx: &mut EventCtx) { let run_id = self.palette.run_id.clone(); let widget_id = self.palette.widget_id; From ee17ba62f51ba35aa435dee7750f98ba1d665810 Mon Sep 17 00:00:00 2001 From: Suraj Ghimire Date: Sun, 26 Jun 2022 10:35:03 +0530 Subject: [PATCH 018/816] add syntax highlighting support for Bash and Zig Signed-off-by: Suraj Ghimire --- Cargo.lock | 20 ++++++++++++++++++++ lapce-core/Cargo.toml | 5 +++++ lapce-core/src/language.rs | 32 ++++++++++++++++++++++++++++++++ lapce-ui/Cargo.toml | 9 ++++++--- 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c0b1d75ce5..ed62a35f81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2204,6 +2204,7 @@ dependencies = [ "strum_macros 0.24.0", "thiserror", "tree-sitter", + "tree-sitter-bash", "tree-sitter-c", "tree-sitter-cpp", "tree-sitter-css", @@ -2231,6 +2232,7 @@ dependencies = [ "tree-sitter-swift", "tree-sitter-toml", "tree-sitter-typescript", + "tree-sitter-zig", "xi-rope", ] @@ -4548,6 +4550,15 @@ dependencies = [ "regex", ] +[[package]] +name = "tree-sitter-bash" +version = "0.19.0" +source = "git+https://github.com/syntacti/tree-sitter-bash?branch=master#ba3adca745943b71b0c84bb4e4977788cc6a867b" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-c" version = "0.20.1" @@ -4806,6 +4817,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-zig" +version = "0.0.1" +source = "git+https://github.com/maxxnino/tree-sitter-zig?branch=main#8d3224c3bd0890fe08358886ebf54fca2ed448a6" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "try-lock" version = "0.2.3" diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 8b7405825b..232c741606 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -42,6 +42,9 @@ tree-sitter-scss = { git = "https://github.com/VixieTSQ/tree-sitter-scss", versi tree-sitter-hare = { version = "0.20.7", optional = true } # switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-css/pull/22 tree-sitter-css = { git = "https://github.com/syntacti/tree-sitter-css", branch = "master", optional = true } +tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", branch = "main", optional = true } +# switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-bash/pull/120 +tree-sitter-bash = { git = "https://github.com/syntacti/tree-sitter-bash", branch = "master", optional = true } lsp-types = { version = "0.89.2", features = ["proposed"] } xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } lapce-rpc = { path = "../lapce-rpc" } @@ -77,3 +80,5 @@ lang-hcl = ["dep:tree-sitter-hcl"] lang-scss = ["dep:tree-sitter-scss"] lang-hare = ["dep:tree-sitter-hare"] lang-css = ["dep:tree-sitter-css"] +lang-zig = ["dep:tree-sitter-zig"] +lang-bash = ["dep:tree-sitter-bash"] diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index 34226c7a17..7b754f2567 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -154,6 +154,10 @@ pub enum LapceLanguage { Hare, #[cfg(feature = "lang-css")] Css, + #[cfg(feature = "lang-zig")] + Zig, + #[cfg(feature = "lang-bash")] + Bash, } // NOTE: Elements in the array must be in the same order as the enum variants of @@ -472,6 +476,26 @@ const LANGUAGES: &[SyntaxProperties] = &[ code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["css"], }, + #[cfg(feature = "lang-zig")] + SyntaxProperties { + id: LapceLanguage::Zig, + language: tree_sitter_zig::language, + highlight: tree_sitter_zig::HIGHLIGHTS_QUERY, + comment: "//", + indent: " ", + code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), + extensions: &["zig"], + }, + #[cfg(feature = "lang-bash")] + SyntaxProperties { + id: LapceLanguage::Bash, + language: tree_sitter_bash::language, + highlight: tree_sitter_bash::HIGHLIGHTS_QUERY, + comment: "#", + indent: " ", + code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), + extensions: &["sh", "bash"], + }, ]; impl LapceLanguage { @@ -739,4 +763,12 @@ mod test { fn test_css_lang() { assert_language(LapceLanguage::Css, &["css"]); } + #[cfg(feature = "lang-zig")] + fn test_zig_lang() { + assert_language(LapceLanguage::Zig, &["zig"]); + } + #[cfg(feature = "lang-bash")] + fn test_bash_lang() { + assert_language(LapceLanguage::Bash, &["sh", "bash"]); + } } diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index 768e206f3f..15a2e09f94 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -87,8 +87,9 @@ all-languages = [ "lang-hcl", "lang-scss", "lang-hare", - "lang-css" - + "lang-css", + "lang-zig", + "lang-bash", ] lang-rust = ["lapce-core/lang-rust"] @@ -116,4 +117,6 @@ lang-haxe = ["lapce-core/lang-haxe"] lang-hcl = ["lapce-core/lang-hcl"] lang-scss = ["lapce-core/lang-scss"] lang-hare = ["lapce-core/lang-hare"] -lang-css = ["lapce-core/lang-css"] \ No newline at end of file +lang-css = ["lapce-core/lang-css"] +lang-zig = ["lapce-core/lang-zig"] +lang-bash = ["lapce-core/lang-bash"] From 7d7d445a319aed5ae418cda6f2f1d09b8d509eba Mon Sep 17 00:00:00 2001 From: MinusGix Date: Mon, 27 Jun 2022 11:23:49 -0500 Subject: [PATCH 019/816] Add button for committing --- lapce-data/src/source_control.rs | 2 + lapce-ui/src/button.rs | 199 +++++++++++++++++++++++++++++++ lapce-ui/src/lib.rs | 1 + lapce-ui/src/source_control.rs | 30 ++++- 4 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 lapce-ui/src/button.rs diff --git a/lapce-data/src/source_control.rs b/lapce-data/src/source_control.rs index ec978722ba..2a2e005a35 100644 --- a/lapce-data/src/source_control.rs +++ b/lapce-data/src/source_control.rs @@ -24,6 +24,7 @@ pub struct SourceControlData { pub file_list_id: WidgetId, pub file_list_index: usize, pub editor_view_id: WidgetId, + pub commit_button_id: WidgetId, pub file_diffs: Vec<(FileDiff, bool)>, pub branch: String, pub branches: Vec, @@ -39,6 +40,7 @@ impl SourceControlData { editor_view_id, file_list_id, file_list_index: 0, + commit_button_id: WidgetId::next(), split_id: WidgetId::next(), split_direction: SplitDirection::Horizontal, file_diffs: Vec::new(), diff --git a/lapce-ui/src/button.rs b/lapce-ui/src/button.rs new file mode 100644 index 0000000000..09da3e04fc --- /dev/null +++ b/lapce-ui/src/button.rs @@ -0,0 +1,199 @@ +//! This button code is adapted from druid's button widget + +use druid::{ + debug_state::DebugState, + theme, + widget::{Click, ControllerHost, Label, LabelText}, + Affine, BoxConstraints, Data, Env, Event, EventCtx, FontDescriptor, Insets, + LayoutCtx, LifeCycle, LifeCycleCtx, LinearGradient, PaintCtx, RenderContext, + Size, UnitPoint, UpdateCtx, Widget, +}; +use lapce_data::{ + config::{Config, LapceTheme}, + data::LapceTabData, +}; + +// the minimum padding added to a button. +// NOTE: these values are chosen to match the existing look of TextBox; these +// should be reevaluated at some point. +const LABEL_INSETS: Insets = Insets::uniform_xy(8., 2.); + +/// A button with a text label. +pub struct Button { + label: Label, + label_size: Size, +} + +impl Button { + /// Create a new button with a text label. + pub fn new( + data: &LapceTabData, + text: impl Into>, + ) -> Button { + Button::from_label(data, Label::new(text)) + } + + /// Create a new button with the provided [`Label`]. + pub fn from_label( + data: &LapceTabData, + mut label: Label, + ) -> Button { + update_label(&data.config, &mut label); + Button { + label, + label_size: Size::ZERO, + } + } + + /// Provide a closure to be called when this button is clicked. + pub fn on_click( + self, + f: impl Fn(&mut EventCtx, &mut LapceTabData, &Env) + 'static, + ) -> ControllerHost> { + ControllerHost::new(self, Click::new(f)) + } +} + +impl Widget for Button { + fn event( + &mut self, + ctx: &mut EventCtx, + event: &Event, + _data: &mut LapceTabData, + _env: &Env, + ) { + match event { + Event::MouseDown(_) => { + if !ctx.is_disabled() { + ctx.set_active(true); + ctx.request_paint(); + } + } + Event::MouseUp(_) => { + if ctx.is_active() && !ctx.is_disabled() { + ctx.request_paint(); + } + ctx.set_active(false); + } + _ => (), + } + } + + fn lifecycle( + &mut self, + ctx: &mut LifeCycleCtx, + event: &LifeCycle, + data: &LapceTabData, + env: &Env, + ) { + if let LifeCycle::HotChanged(_) | LifeCycle::DisabledChanged(_) = event { + ctx.request_paint(); + } + self.label.lifecycle(ctx, event, data, env) + } + + fn update( + &mut self, + ctx: &mut UpdateCtx, + old_data: &LapceTabData, + data: &LapceTabData, + env: &Env, + ) { + if !old_data.config.same(&data.config) { + update_label(&data.config, &mut self.label); + } + self.label.update(ctx, old_data, data, env) + } + + fn layout( + &mut self, + ctx: &mut LayoutCtx, + bc: &BoxConstraints, + data: &LapceTabData, + env: &Env, + ) -> Size { + let padding = Size::new(LABEL_INSETS.x_value(), LABEL_INSETS.y_value()); + let label_bc = bc.shrink(padding).loosen(); + self.label_size = self.label.layout(ctx, &label_bc, data, env); + // HACK: to make sure we look okay at default sizes when beside a textbox, + // we make sure we will have at least the same height as the default textbox. + let min_height = env.get(theme::BORDERED_WIDGET_HEIGHT); + let baseline = self.label.baseline_offset(); + ctx.set_baseline_offset(baseline + LABEL_INSETS.y1); + + bc.constrain(Size::new( + self.label_size.width + padding.width, + (self.label_size.height + padding.height).max(min_height), + )) + } + + fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { + let is_active = ctx.is_active() && !ctx.is_disabled(); + let is_hot = ctx.is_hot(); + let size = ctx.size(); + let stroke_width = env.get(theme::BUTTON_BORDER_WIDTH); + + let rounded_rect = size + .to_rect() + .inset(-stroke_width / 2.0) + .to_rounded_rect(env.get(theme::BUTTON_BORDER_RADIUS)); + + let bg_gradient = if ctx.is_disabled() { + LinearGradient::new( + UnitPoint::TOP, + UnitPoint::BOTTOM, + ( + env.get(theme::DISABLED_BUTTON_LIGHT), + env.get(theme::DISABLED_BUTTON_DARK), + ), + ) + } else if is_active { + LinearGradient::new( + UnitPoint::TOP, + UnitPoint::BOTTOM, + (env.get(theme::BUTTON_DARK), env.get(theme::BUTTON_LIGHT)), + ) + } else { + LinearGradient::new( + UnitPoint::TOP, + UnitPoint::BOTTOM, + (env.get(theme::BUTTON_LIGHT), env.get(theme::BUTTON_DARK)), + ) + }; + + let border_color = if is_hot && !ctx.is_disabled() { + env.get(theme::BORDER_LIGHT) + } else { + env.get(theme::BORDER_DARK) + }; + + ctx.stroke(rounded_rect, &border_color, stroke_width); + + ctx.fill(rounded_rect, &bg_gradient); + + let label_offset = (size.to_vec2() - self.label_size.to_vec2()) / 2.0; + + ctx.with_save(|ctx| { + ctx.transform(Affine::translate(label_offset)); + self.label.paint(ctx, data, env); + }); + } + + fn debug_state(&self, _data: &LapceTabData) -> DebugState { + DebugState { + display_name: self.short_type_name().to_string(), + main_value: self.label.text().to_string(), + ..Default::default() + } + } +} + +fn update_label(config: &Config, label: &mut Label) { + label.set_text_size(config.ui.font_size() as f64); + label.set_font(FontDescriptor::new(config.ui.font_family())); + label.set_text_color( + config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ); +} diff --git a/lapce-ui/src/lib.rs b/lapce-ui/src/lib.rs index ac383dfb4f..42e49c9563 100644 --- a/lapce-ui/src/lib.rs +++ b/lapce-ui/src/lib.rs @@ -1,6 +1,7 @@ pub mod activity; pub mod alert; pub mod app; +pub mod button; pub mod completion; pub mod editor; pub mod explorer; diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index 855623c05e..aef3cf6920 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -8,13 +8,17 @@ use druid::{ WidgetExt, WidgetId, }; use lapce_data::{ - command::{LapceUICommand, LAPCE_UI_COMMAND}, + command::{ + CommandKind, LapceCommand, LapceUICommand, LapceWorkbenchCommand, + LAPCE_COMMAND, LAPCE_UI_COMMAND, + }, config::LapceTheme, data::{FocusArea, LapceTabData, PanelKind}, }; use lapce_rpc::source_control::FileDiff; use crate::{ + button::Button, editor::view::LapceEditorView, panel::{LapcePanel, PanelHeaderKind}, svg::{file_svg, get_svg}, @@ -32,7 +36,25 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel { .hide_gutter() .set_placeholder("Commit Message".to_string()) .padding((15.0, 15.0)); + + let commit_button = Button::new(data, "Commit") + .on_click(|ctx, data, _env| { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::SourceControlCommit, + ), + data: None, + }, + Target::Widget(data.id), + )); + }) + .expand_width() + .with_id(data.source_control.commit_button_id); + let content = SourceControlFileList::new(data.source_control.file_list_id); + LapcePanel::new( PanelKind::SourceControl, data.source_control.widget_id, @@ -46,6 +68,12 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel { input.boxed(), Some(300.0), ), + ( + data.source_control.commit_button_id, + PanelHeaderKind::None, + commit_button.boxed(), + None, + ), ( data.source_control.file_list_id, PanelHeaderKind::Simple("Changes".into()), From 7d6b73992695d09845f9a6ba3f8c4fdfc76c2c81 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Mon, 27 Jun 2022 18:57:17 +0100 Subject: [PATCH 020/816] fix markdown --- Cargo.lock | 2 +- lapce-core/Cargo.toml | 4 ++-- lapce-core/src/language.rs | 10 +++++----- lapce-ui/Cargo.toml | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed62a35f81..a8a41b674b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4716,7 +4716,7 @@ dependencies = [ [[package]] name = "tree-sitter-md" version = "0.0.1" -source = "git+https://github.com/MDeiml/tree-sitter-markdown.git#be3e08acfd85bd87d85f41fde74fdcec25f76dbe" +source = "git+https://github.com/dzhou121/tree-sitter-markdown.git#134c7f870ad17b3c3e40cd90b8bbd08329ac4bbd" dependencies = [ "cc", "tree-sitter", diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 232c741606..0a07383fed 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -27,7 +27,7 @@ tree-sitter-ruby = { git = "https://github.com/Liberatys/tree-sitter-ruby.git", tree-sitter-c = { version = "0.20.1", optional = true } tree-sitter-cpp = { version = "0.20.0", optional = true } tree-sitter-json = { version = "0.19.0", optional = true } -tree-sitter-md = { git = "https://github.com/MDeiml/tree-sitter-markdown.git", version = "0.0.1", optional = true } +tree-sitter-md = { git = "https://github.com/dzhou121/tree-sitter-markdown.git", version = "0.0.1", optional = true } tree-sitter-html = { version = "0.19.0", optional = true } tree-sitter-java = { git = "https://github.com/tree-sitter/tree-sitter-java.git", version = "0.20.0", optional = true } tree-sitter-elm = { version = "5.6.0", optional = true } @@ -66,7 +66,7 @@ lang-ruby = ["dep:tree-sitter-ruby"] lang-c = ["dep:tree-sitter-c"] lang-cpp = ["dep:tree-sitter-cpp"] lang-json = ["dep:tree-sitter-json"] -lang-md = ["dep:tree-sitter-md"] +lang-markdown = ["dep:tree-sitter-md"] lang-html = ["dep:tree-sitter-html"] lang-java = ["dep:tree-sitter-java"] lang-elm = ["dep:tree-sitter-elm"] diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index 7b754f2567..fe2ef5d286 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -122,7 +122,7 @@ pub enum LapceLanguage { Cpp, #[cfg(feature = "lang-json")] Json, - #[cfg(feature = "lang-md")] + #[cfg(feature = "lang-markdown")] Markdown, #[cfg(feature = "lang-ruby")] Ruby, @@ -316,11 +316,11 @@ const LANGUAGES: &[SyntaxProperties] = &[ code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["json"], }, - #[cfg(feature = "lang-md")] + #[cfg(feature = "lang-markdown")] SyntaxProperties { id: LapceLanguage::Markdown, language: tree_sitter_md::language, - highlight: tree_sitter_md::HIGHLIGHTS_QUERY, + highlight: tree_sitter_md::HIGHLIGHT_QUERY, comment: "", indent: " ", code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), @@ -698,8 +698,8 @@ mod test { } #[test] - #[cfg(feature = "lang-md")] - fn test_md_lang() { + #[cfg(feature = "lang-markdown")] + fn test_markdown_lang() { assert_language(LapceLanguage::Markdown, &["md"]); } diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index 15a2e09f94..1601564dfa 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -59,7 +59,7 @@ default = ["all-languages"] # To build lapce with only some of the supported languages, for example: # # cargo build --no-default-features -p lapce-ui \ -# --features lang-rust,lang-toml,lang-md,lang-json +# --features lang-rust,lang-toml,lang-markdown,lang-json # all-languages = [ "lang-rust", @@ -74,7 +74,7 @@ all-languages = [ "lang-c", "lang-cpp", "lang-json", - "lang-md", + "lang-markdown", "lang-html", "lang-java", "lang-elm", @@ -104,7 +104,7 @@ lang-ruby= ["lapce-core/lang-ruby"] lang-c = ["lapce-core/lang-c"] lang-cpp = ["lapce-core/lang-cpp"] lang-json= ["lapce-core/lang-json"] -lang-md = ["lapce-core/lang-md"] +lang-markdown = ["lapce-core/lang-markdown"] lang-html = ["lapce-core/lang-html"] lang-java = ["lapce-core/lang-java"] lang-elm = ["lapce-core/lang-elm"] From fe4e684821ea4a2bd206464d519c4ecc22b0c1a3 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Mon, 27 Jun 2022 19:11:18 +0100 Subject: [PATCH 021/816] commit button style change --- lapce-ui/src/button.rs | 48 +++++++--------------------------- lapce-ui/src/source_control.rs | 3 ++- 2 files changed, 12 insertions(+), 39 deletions(-) diff --git a/lapce-ui/src/button.rs b/lapce-ui/src/button.rs index 09da3e04fc..207eda555f 100644 --- a/lapce-ui/src/button.rs +++ b/lapce-ui/src/button.rs @@ -4,9 +4,9 @@ use druid::{ debug_state::DebugState, theme, widget::{Click, ControllerHost, Label, LabelText}, - Affine, BoxConstraints, Data, Env, Event, EventCtx, FontDescriptor, Insets, - LayoutCtx, LifeCycle, LifeCycleCtx, LinearGradient, PaintCtx, RenderContext, - Size, UnitPoint, UpdateCtx, Widget, + Affine, BoxConstraints, Cursor, Data, Env, Event, EventCtx, FontDescriptor, + Insets, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, RenderContext, Size, + UpdateCtx, Widget, }; use lapce_data::{ config::{Config, LapceTheme}, @@ -69,6 +69,7 @@ impl Widget for Button { ctx.request_paint(); } } + Event::MouseMove(_) => ctx.set_cursor(&Cursor::Pointer), Event::MouseUp(_) => { if ctx.is_active() && !ctx.is_disabled() { ctx.request_paint(); @@ -128,48 +129,19 @@ impl Widget for Button { } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { - let is_active = ctx.is_active() && !ctx.is_disabled(); - let is_hot = ctx.is_hot(); let size = ctx.size(); - let stroke_width = env.get(theme::BUTTON_BORDER_WIDTH); + let stroke_width = 1.0; let rounded_rect = size .to_rect() .inset(-stroke_width / 2.0) .to_rounded_rect(env.get(theme::BUTTON_BORDER_RADIUS)); - let bg_gradient = if ctx.is_disabled() { - LinearGradient::new( - UnitPoint::TOP, - UnitPoint::BOTTOM, - ( - env.get(theme::DISABLED_BUTTON_LIGHT), - env.get(theme::DISABLED_BUTTON_DARK), - ), - ) - } else if is_active { - LinearGradient::new( - UnitPoint::TOP, - UnitPoint::BOTTOM, - (env.get(theme::BUTTON_DARK), env.get(theme::BUTTON_LIGHT)), - ) - } else { - LinearGradient::new( - UnitPoint::TOP, - UnitPoint::BOTTOM, - (env.get(theme::BUTTON_LIGHT), env.get(theme::BUTTON_DARK)), - ) - }; - - let border_color = if is_hot && !ctx.is_disabled() { - env.get(theme::BORDER_LIGHT) - } else { - env.get(theme::BORDER_DARK) - }; - - ctx.stroke(rounded_rect, &border_color, stroke_width); - - ctx.fill(rounded_rect, &bg_gradient); + ctx.stroke( + rounded_rect, + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + stroke_width, + ); let label_offset = (size.to_vec2() - self.label_size.to_vec2()) / 2.0; diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index aef3cf6920..e5d9fd06f8 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -51,7 +51,8 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel { )); }) .expand_width() - .with_id(data.source_control.commit_button_id); + .with_id(data.source_control.commit_button_id) + .padding((10.0, 0.0, 10.0, 10.0)); let content = SourceControlFileList::new(data.source_control.file_list_id); From 3f1ba9c0ccdafcfe5857608b2a86f66506ea9982 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Tue, 28 Jun 2022 20:44:02 +0100 Subject: [PATCH 022/816] add workflow_dispath to github release --- .github/workflows/release.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4018d8874d..a4cc95f38b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,6 +1,12 @@ name: Release on: + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name for release' + required: false + default: nightly push: tags: ["v[0-9]+.[0-9]+.[0-9]+*"] From 971bd54a59085fb96d7b7086a7e6db6bbfe0953c Mon Sep 17 00:00:00 2001 From: Jakub Panek Date: Tue, 28 Jun 2022 19:54:38 +0000 Subject: [PATCH 023/816] fix: verify if workdir exists or use homedir This prevents alacritty from panicking if the workspace opened doesn't exist anymore since lapce handles non-existent workspaces pretty well --- lapce-proxy/src/terminal.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lapce-proxy/src/terminal.rs b/lapce-proxy/src/terminal.rs index 45d877f1fd..fc8685be16 100644 --- a/lapce-proxy/src/terminal.rs +++ b/lapce-proxy/src/terminal.rs @@ -52,7 +52,11 @@ impl Terminal { let poll = mio::Poll::new().unwrap(); let mut config = TermConfig::default(); config.pty_config.working_directory = - cwd.or_else(|| BaseDirs::new().map(|d| PathBuf::from(d.home_dir()))); + if cwd.is_some() && cwd.clone().unwrap().exists() { + cwd + } else { + BaseDirs::new().map(|d| PathBuf::from(d.home_dir())) + }; let shell = shell.trim(); if !shell.is_empty() { let mut parts = shell.split(' '); From b26db0d51c256f7e52172a830ee918f4d62787ef Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Tue, 28 Jun 2022 21:56:23 +0100 Subject: [PATCH 024/816] add nightly release --- .github/workflows/release.yml | 45 +++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a4cc95f38b..96caaffdbc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,22 +41,34 @@ jobs: shell: pwsh run: | Compress-Archive ./target/release-lto/lapce.exe ./Lapce-windows-portable.zip + + - if: github.event_name == 'workflow_dispatch' + run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV + - if: github.event_name == 'schedule' + run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV + - if: github.event_name == 'push' + run: | + TAG_NAME=${{ github.ref }} + echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV + - name: Upload msi installer uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./Lapce-windows.msi file_glob: true - tag: ${{ github.ref }} + tag: ${{ env.TAG_NAME }} overwrite: true + prerelease: ${{ env.TAG_NAME == 'nightly' }} - name: Upload portable uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./Lapce-windows-portable.zip file_glob: true - tag: ${{ github.ref }} + tag: ${{ env.TAG_NAME }} overwrite: true + prerelease: ${{ env.TAG_NAME == 'nightly' }} linux: runs-on: ubuntu-18.04 @@ -76,22 +88,34 @@ jobs: cp ./target/release-lto/lapce Lapce/ tar -zcvf ./Lapce-linux.tar.gz Lapce gzip -c "./target/release-lto/lapce-proxy" > ./lapce-proxy-linux.gz + + - if: github.event_name == 'workflow_dispatch' + run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV + - if: github.event_name == 'schedule' + run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV + - if: github.event_name == 'push' + run: | + TAG_NAME=${{ github.ref }} + echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV + - name: Upload Application uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./Lapce-linux.tar.gz file_glob: true - tag: ${{ github.ref }} + tag: ${{ env.TAG_NAME }} overwrite: true + prerelease: ${{ env.TAG_NAME == 'nightly' }} - name: Upload Application uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./lapce-proxy-linux.gz file_glob: true - tag: ${{ github.ref }} + tag: ${{ env.TAG_NAME }} overwrite: true + prerelease: ${{ env.TAG_NAME == 'nightly' }} macos: runs-on: macos-11 @@ -121,11 +145,22 @@ jobs: uses: devbotsxyz/xcode-staple@v1 with: product-path: "./target/release-lto/macos/Lapce-macos.dmg" + + - if: github.event_name == 'workflow_dispatch' + run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV + - if: github.event_name == 'schedule' + run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV + - if: github.event_name == 'push' + run: | + TAG_NAME=${{ github.ref }} + echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV + - name: Upload Application uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./target/release-lto/macos/Lapce-macos.dmg file_glob: true - tag: ${{ github.ref }} + tag: ${{ env.TAG_NAME }} overwrite: true + prerelease: ${{ env.TAG_NAME == 'nightly' }} From c4b8f0fb9913a20ca0bbef7dbe388001c08ae04a Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 19:13:44 +0100 Subject: [PATCH 025/816] add PanelContainer --- defaults/settings.toml | 3 +- icons/layout-panel-off.svg | 1 + icons/layout-panel.svg | 1 + icons/layout-sidebar-left-off.svg | 1 + icons/layout-sidebar-left.svg | 1 + icons/layout-sidebar-right-off.svg | 1 + icons/layout-sidebar-right.svg | 1 + lapce-data/src/command.rs | 9 + lapce-data/src/config.rs | 16 +- lapce-data/src/data.rs | 80 ++++- lapce-data/src/panel.rs | 13 + lapce-ui/src/activity.rs | 59 +--- lapce-ui/src/panel.rs | 376 ++++++++++++++++++++++- lapce-ui/src/status.rs | 80 ++--- lapce-ui/src/tab.rs | 468 ++++++++--------------------- 15 files changed, 670 insertions(+), 440 deletions(-) create mode 100644 icons/layout-panel-off.svg create mode 100644 icons/layout-panel.svg create mode 100644 icons/layout-sidebar-left-off.svg create mode 100644 icons/layout-sidebar-left.svg create mode 100644 icons/layout-sidebar-right-off.svg create mode 100644 icons/layout-sidebar-right.svg diff --git a/defaults/settings.toml b/defaults/settings.toml index cd1e772f63..d1c695da24 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -27,7 +27,8 @@ font-size = 13 header-height = 35 status-height = 25 tab-min-width = 100 -activity-width = 50 +panel-switcher-bar-size = 30 +panel-switcher-icon-size = 20 scroll-width = 10 drop-shadow-width = 0 diff --git a/icons/layout-panel-off.svg b/icons/layout-panel-off.svg new file mode 100644 index 0000000000..fc8464f43a --- /dev/null +++ b/icons/layout-panel-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/layout-panel.svg b/icons/layout-panel.svg new file mode 100644 index 0000000000..7ac17fb7d5 --- /dev/null +++ b/icons/layout-panel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/layout-sidebar-left-off.svg b/icons/layout-sidebar-left-off.svg new file mode 100644 index 0000000000..50019bfe5f --- /dev/null +++ b/icons/layout-sidebar-left-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/layout-sidebar-left.svg b/icons/layout-sidebar-left.svg new file mode 100644 index 0000000000..b513bdac67 --- /dev/null +++ b/icons/layout-sidebar-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/layout-sidebar-right-off.svg b/icons/layout-sidebar-right-off.svg new file mode 100644 index 0000000000..951b957155 --- /dev/null +++ b/icons/layout-sidebar-right-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/layout-sidebar-right.svg b/icons/layout-sidebar-right.svg new file mode 100644 index 0000000000..1017debe0e --- /dev/null +++ b/icons/layout-sidebar-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 09cf3e47d8..6ef3437521 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -302,6 +302,15 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "toggle_panel_visual")] TogglePanelVisual, + #[strum(serialize = "toggle_panel_left_visual")] + TogglePanelLeftVisual, + + #[strum(serialize = "toggle_panel_right_visual")] + TogglePanelRightVisual, + + #[strum(serialize = "toggle_panel_bottom_visual")] + TogglePanelBottomVisual, + // Focus toggle commands #[strum(message = "Toggle Terminal Focus")] #[strum(serialize = "toggle_terminal_focus")] diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index ff4d60b9e8..f5bd8cc958 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -189,8 +189,11 @@ pub struct UIConfig { #[field_names(desc = "Set the minium width for editor tab")] tab_min_width: usize, - #[field_names(desc = "Set the width for activity bar")] - activity_width: usize, + #[field_names(desc = "Set the size for the panel switcher bar")] + panel_switcher_bar_size: usize, + + #[field_names(desc = "Set the size for the icon in panel switcher")] + panel_switcher_icon_size: usize, #[field_names(desc = "Set the width for scroll bar")] scroll_width: usize, @@ -226,8 +229,13 @@ impl UIConfig { self.tab_min_width } - pub fn activity_width(&self) -> usize { - self.activity_width + pub fn panel_switcher_bar_size(&self) -> usize { + self.panel_switcher_bar_size + .max(self.panel_switcher_icon_size) + } + + pub fn panel_switcher_icon_size(&self) -> usize { + self.panel_switcher_icon_size } pub fn scroll_width(&self) -> usize { diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 8919efe747..460b1a8c22 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -765,6 +765,54 @@ impl LapceTabData { } } + pub fn panel_left_shown(&self) -> bool { + self.panels + .get(&PanelPosition::LeftTop) + .map(|p| p.shown) + .unwrap_or(false) + || self + .panels + .get(&PanelPosition::LeftBottom) + .map(|p| p.shown) + .unwrap_or(false) + } + + pub fn panel_right_shown(&self) -> bool { + self.panels + .get(&PanelPosition::RightTop) + .map(|p| p.shown) + .unwrap_or(false) + || self + .panels + .get(&PanelPosition::RightBottom) + .map(|p| p.shown) + .unwrap_or(false) + } + + pub fn panel_bottom_shown(&self) -> bool { + self.panels + .get(&PanelPosition::BottomLeft) + .map(|p| p.shown) + .unwrap_or(false) + || self + .panels + .get(&PanelPosition::BottomRight) + .map(|p| p.shown) + .unwrap_or(false) + } + + pub fn panel_bottom_maximized(&self) -> bool { + self.panels + .get(&PanelPosition::BottomLeft) + .map(|p| p.maximized) + .unwrap_or(false) + || self + .panels + .get(&PanelPosition::BottomRight) + .map(|p| p.maximized) + .unwrap_or(false) + } + pub fn panel_position(&self, kind: PanelKind) -> Option { for (pos, panels) in self.panels.iter() { if panels.widgets.contains(&kind) { @@ -1224,7 +1272,37 @@ impl LapceTabData { } } } - + LapceWorkbenchCommand::TogglePanelLeftVisual => { + let shown = !self.panel_left_shown(); + if let Some(panel) = self.panels.get_mut(&PanelPosition::LeftTop) { + Arc::make_mut(panel).shown = shown; + } + if let Some(panel) = self.panels.get_mut(&PanelPosition::LeftBottom) + { + Arc::make_mut(panel).shown = shown; + } + } + LapceWorkbenchCommand::TogglePanelRightVisual => { + let shown = !self.panel_right_shown(); + if let Some(panel) = self.panels.get_mut(&PanelPosition::RightTop) { + Arc::make_mut(panel).shown = shown; + } + if let Some(panel) = self.panels.get_mut(&PanelPosition::RightBottom) + { + Arc::make_mut(panel).shown = shown; + } + } + LapceWorkbenchCommand::TogglePanelBottomVisual => { + let shown = !self.panel_bottom_shown(); + if let Some(panel) = self.panels.get_mut(&PanelPosition::BottomLeft) + { + Arc::make_mut(panel).shown = shown; + } + if let Some(panel) = self.panels.get_mut(&PanelPosition::BottomRight) + { + Arc::make_mut(panel).shown = shown; + } + } LapceWorkbenchCommand::ToggleSourceControlFocus => { self.toggle_panel_focus(ctx, PanelKind::SourceControl); } diff --git a/lapce-data/src/panel.rs b/lapce-data/src/panel.rs index 0850f06e84..6c9101f599 100644 --- a/lapce-data/src/panel.rs +++ b/lapce-data/src/panel.rs @@ -13,3 +13,16 @@ pub enum PanelPosition { RightTop, RightBottom, } + +#[derive(Eq, PartialEq, Hash, Clone, Copy)] +pub enum PanelContainerPosition { + Left, + Bottom, + Right, +} + +impl PanelContainerPosition { + pub fn is_bottom(&self) -> bool { + matches!(self, PanelContainerPosition::Bottom) + } +} diff --git a/lapce-ui/src/activity.rs b/lapce-ui/src/activity.rs index 8f02efffc6..d8af1acb22 100644 --- a/lapce-ui/src/activity.rs +++ b/lapce-ui/src/activity.rs @@ -29,60 +29,11 @@ impl Default for ActivityBar { impl Widget for ActivityBar { fn event( &mut self, - ctx: &mut EventCtx, - event: &Event, - data: &mut LapceTabData, + _ctx: &mut EventCtx, + _event: &Event, + _data: &mut LapceTabData, _env: &Env, ) { - let width = data.config.ui.activity_width() as f64; - match event { - Event::MouseDown(mouse) => { - if mouse.button.is_left() { - let index = (mouse.pos.y / width) as usize; - if let Some(panel) = data.panels.get_mut(&PanelPosition::LeftTop) - { - if let Some(kind) = panel.widgets.get(index) { - if panel.active == *kind { - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench( - LapceWorkbenchCommand::TogglePanelVisual, - ), - data: Some(json!(kind)), - }, - Target::Widget(data.id), - )); - } else { - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench( - LapceWorkbenchCommand::ShowPanel, - ), - data: Some(json!(kind)), - }, - Target::Widget(data.id), - )); - } - } - } - } - } - Event::MouseMove(mouse) => { - let n = data - .panels - .get(&PanelPosition::LeftTop) - .map(|panel| panel.widgets.len()) - .unwrap_or(0); - if n > 0 && mouse.pos.y < width * n as f64 { - ctx.set_cursor(&Cursor::Pointer); - } else { - ctx.clear_cursor(); - } - } - _ => {} - } } fn lifecycle( @@ -107,10 +58,10 @@ impl Widget for ActivityBar { &mut self, _ctx: &mut LayoutCtx, bc: &BoxConstraints, - data: &LapceTabData, + _data: &LapceTabData, _env: &Env, ) -> Size { - Size::new(data.config.ui.activity_width() as f64, bc.max().height) + bc.max() } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 1b18f70954..296bb0b900 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; use druid::{ kurbo::Line, @@ -11,7 +11,7 @@ use lapce_data::{ command::{CommandKind, LapceCommand, LapceWorkbenchCommand, LAPCE_COMMAND}, config::LapceTheme, data::{LapceTabData, PanelKind}, - panel::PanelPosition, + panel::{PanelContainerPosition, PanelPosition}, split::SplitDirection, }; use serde_json::json; @@ -631,3 +631,375 @@ impl Widget for PanelMainHeader { }); } } + +pub struct PanelContainer { + position: PanelContainerPosition, + panels: + HashMap>>>, +} + +impl PanelContainer { + pub fn new(position: PanelContainerPosition) -> Self { + Self { + position, + panels: HashMap::new(), + } + } + + pub fn insert_panel( + &mut self, + kind: PanelKind, + panel: WidgetPod>>, + ) { + self.panels.insert(kind, panel); + } + + fn first_position(&self) -> PanelPosition { + match self.position { + PanelContainerPosition::Left => PanelPosition::LeftTop, + PanelContainerPosition::Bottom => PanelPosition::BottomLeft, + PanelContainerPosition::Right => PanelPosition::RightTop, + } + } + + fn second_position(&self) -> PanelPosition { + match self.position { + PanelContainerPosition::Left => PanelPosition::LeftBottom, + PanelContainerPosition::Bottom => PanelPosition::BottomRight, + PanelContainerPosition::Right => PanelPosition::RightBottom, + } + } +} + +impl Widget for PanelContainer { + fn event( + &mut self, + ctx: &mut EventCtx, + event: &Event, + data: &mut LapceTabData, + env: &Env, + ) { + if event.should_propagate_to_hidden() { + for (_, panel) in self.panels.iter_mut() { + panel.event(ctx, event, data, env); + } + } else { + if let Some(panel) = data.panels.get(&self.first_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .event(ctx, event, data, env); + } + } + if let Some(panel) = data.panels.get(&self.second_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .event(ctx, event, data, env); + } + } + } + } + + fn lifecycle( + &mut self, + ctx: &mut LifeCycleCtx, + event: &LifeCycle, + data: &LapceTabData, + env: &Env, + ) { + for (_, panel) in self.panels.iter_mut() { + panel.lifecycle(ctx, event, data, env); + } + } + + fn update( + &mut self, + ctx: &mut UpdateCtx, + _old_data: &LapceTabData, + data: &LapceTabData, + env: &Env, + ) { + if let Some(panel) = data.panels.get(&self.first_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .update(ctx, data, env); + } + } + if let Some(panel) = data.panels.get(&self.second_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .update(ctx, data, env); + } + } + } + + fn layout( + &mut self, + ctx: &mut LayoutCtx, + bc: &BoxConstraints, + data: &LapceTabData, + env: &Env, + ) -> Size { + let self_size = bc.max(); + let is_bottom = self.position.is_bottom(); + + let panel_first = data.panels.get(&self.first_position()).and_then(|p| { + if p.shown { + Some(&p.active) + } else { + None + } + }); + let panel_second = data.panels.get(&self.second_position()).and_then(|p| { + if p.shown { + Some(&p.active) + } else { + None + } + }); + + match (panel_first, panel_second) { + (Some(panel_first), Some(panel_second)) => { + let split = match self.position { + PanelContainerPosition::Left => data.panel_size.left_split, + PanelContainerPosition::Bottom => data.panel_size.bottom_split, + PanelContainerPosition::Right => data.panel_size.right_split, + }; + if is_bottom { + let size_fist = (self_size.width * split).round(); + let size_second = self_size.width - size_fist; + let panel_first = self.panels.get_mut(panel_first).unwrap(); + panel_first.layout( + ctx, + &BoxConstraints::tight(Size::new( + size_fist, + self_size.height, + )), + data, + env, + ); + panel_first.set_origin(ctx, data, env, Point::ZERO); + let panel_second = self.panels.get_mut(panel_second).unwrap(); + panel_second.layout( + ctx, + &BoxConstraints::tight(Size::new( + size_second, + self_size.height, + )), + data, + env, + ); + panel_second.set_origin( + ctx, + data, + env, + Point::new(size_fist, 0.0), + ); + } else { + let size_fist = (self_size.height * split).round(); + let size_second = self_size.height - size_fist; + let panel_first = self.panels.get_mut(panel_first).unwrap(); + panel_first.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width, + size_fist, + )), + data, + env, + ); + panel_first.set_origin(ctx, data, env, Point::ZERO); + + let panel_second = self.panels.get_mut(panel_second).unwrap(); + panel_second.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width, + size_second, + )), + data, + env, + ); + panel_second.set_origin( + ctx, + data, + env, + Point::new(0.0, size_fist), + ); + } + } + (Some(panel), None) | (None, Some(panel)) => { + let panel = self.panels.get_mut(panel).unwrap(); + panel.layout(ctx, bc, data, env); + panel.set_origin(ctx, data, env, Point::ZERO); + } + (None, None) => {} + } + + self_size + } + + fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { + let shadow_width = data.config.ui.drop_shadow_width() as f64; + let rect = ctx.size().to_rect(); + match self.position { + PanelContainerPosition::Left => { + ctx.fill( + rect, + data.config + .get_color_unchecked(LapceTheme::PANEL_BACKGROUND), + ); + if shadow_width > 0.0 { + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + ); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x1 + 0.5, rect.y0), + Point::new(rect.x1 + 0.5, rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + PanelContainerPosition::Right => { + ctx.fill( + rect, + data.config + .get_color_unchecked(LapceTheme::PANEL_BACKGROUND), + ); + if shadow_width > 0.0 { + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + ); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0 - 0.5, rect.y0), + Point::new(rect.x0 - 0.5, rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + PanelContainerPosition::Bottom => { + ctx.fill( + rect, + data.config + .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), + ); + if shadow_width > 0.0 { + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + ); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0, rect.y0 - 0.5), + Point::new(rect.x1, rect.y1 - 0.5), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + } + + if let Some(panel) = data.panels.get(&self.first_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .paint(ctx, data, env); + } + } + if let Some(panel) = data.panels.get(&self.second_position()) { + if panel.shown { + self.panels + .get_mut(&panel.active) + .unwrap() + .paint(ctx, data, env); + } + } + } +} + +pub struct PanelSwitcher { + is_bottom: bool, +} + +impl PanelSwitcher { + pub fn new(is_bottom: bool) -> Self { + Self { is_bottom } + } +} + +impl Widget for PanelSwitcher { + fn event( + &mut self, + _ctx: &mut EventCtx, + _event: &Event, + _data: &mut LapceTabData, + _env: &Env, + ) { + } + + fn lifecycle( + &mut self, + _ctx: &mut LifeCycleCtx, + _event: &LifeCycle, + _data: &LapceTabData, + _env: &Env, + ) { + } + + fn update( + &mut self, + _ctx: &mut UpdateCtx, + _old_data: &LapceTabData, + _data: &LapceTabData, + _env: &Env, + ) { + } + + fn layout( + &mut self, + _ctx: &mut LayoutCtx, + bc: &BoxConstraints, + data: &LapceTabData, + _env: &Env, + ) -> Size { + if self.is_bottom { + Size::new( + data.config.ui.panel_switcher_bar_size() as f64, + bc.max().height, + ) + } else { + Size::new( + bc.max().width, + data.config.ui.panel_switcher_bar_size() as f64, + ) + } + } + + fn paint(&mut self, _ctx: &mut PaintCtx, _data: &LapceTabData, _env: &Env) {} +} diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs index 77d0ba5947..3e1fc3ad41 100644 --- a/lapce-ui/src/status.rs +++ b/lapce-ui/src/status.rs @@ -46,42 +46,52 @@ impl LapceStatus { let panel_icons_size = self_size.height * panels.len() as f64; let offset = (self_size.width - panel_icons_size) / 2.0; - let icons: Vec = panels - .iter() - .enumerate() - .map(|(i, p)| { - let cmd = match p { - PanelKind::FileExplorer => { - LapceWorkbenchCommand::ToggleFileExplorerVisual - } - PanelKind::SourceControl => { - LapceWorkbenchCommand::ToggleSourceControlVisual - } - PanelKind::Plugin => LapceWorkbenchCommand::TogglePluginVisual, - PanelKind::Terminal => { - LapceWorkbenchCommand::ToggleTerminalVisual - } - PanelKind::Search => LapceWorkbenchCommand::ToggleSearchVisual, - PanelKind::Problem => LapceWorkbenchCommand::ToggleProblemVisual, - }; + let icons = [ + ( + if data.panel_left_shown() { + "layout-sidebar-left.svg" + } else { + "layout-sidebar-left-off.svg" + }, + LapceWorkbenchCommand::TogglePanelLeftVisual, + ), + ( + if data.panel_bottom_shown() { + "layout-panel.svg" + } else { + "layout-panel-off.svg" + }, + LapceWorkbenchCommand::TogglePanelBottomVisual, + ), + ( + if data.panel_right_shown() { + "layout-sidebar-right.svg" + } else { + "layout-sidebar-right-off.svg" + }, + LapceWorkbenchCommand::TogglePanelRightVisual, + ), + ]; - LapceIcon { - icon: p.svg_name(), - rect: Size::new(self_size.height, self_size.height) - .to_rect() - .with_origin(Point::new( - offset + self_size.height * i as f64, - 0.0, - )), - command: Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench(cmd), - data: None, - }, - Target::Widget(data.id), - ), - } + let icons: Vec = icons + .into_iter() + .enumerate() + .map(|(i, (svg, cmd))| LapceIcon { + icon: svg, + rect: Size::new(self_size.height, self_size.height) + .to_rect() + .with_origin(Point::new( + offset + self_size.height * i as f64, + 0.0, + )), + command: Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench(cmd), + data: None, + }, + Target::Widget(data.id), + ), }) .collect(); icons diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index d147422494..1fbfe26db0 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -30,7 +30,7 @@ use lapce_data::{ keypress::{DefaultKeyPressHandler, KeyPressData}, menu::MenuKind, palette::PaletteStatus, - panel::{PanelPosition, PanelResizePosition}, + panel::{PanelContainerPosition, PanelPosition, PanelResizePosition}, proxy::path_from_url, }; use lsp_types::DiagnosticSeverity; @@ -38,12 +38,23 @@ use serde::Deserialize; use xi_rope::Rope; use crate::{ - activity::ActivityBar, alert::AlertBox, completion::CompletionContainer, - explorer::FileExplorer, hover::HoverContainer, palette::Palette, - picker::FilePicker, plugin::Plugin, problem::new_problem_panel, - search::new_search_panel, settings::LapceSettingsPanel, - source_control::new_source_control_panel, split::split_data_widget, - status::LapceStatus, svg::get_svg, terminal::TerminalPanel, + activity::ActivityBar, + alert::AlertBox, + completion::CompletionContainer, + explorer::FileExplorer, + hover::HoverContainer, + palette::Palette, + panel::{PanelContainer, PanelSwitcher}, + picker::FilePicker, + plugin::Plugin, + problem::new_problem_panel, + search::new_search_panel, + settings::LapceSettingsPanel, + source_control::new_source_control_panel, + split::split_data_widget, + status::LapceStatus, + svg::get_svg, + terminal::TerminalPanel, }; pub struct LapceIcon { @@ -60,7 +71,6 @@ pub struct LapceButton { pub struct LapceTab { id: WidgetId, - activity: WidgetPod, main_split: WidgetPod>>, completion: WidgetPod>>, hover: WidgetPod>>, @@ -69,8 +79,9 @@ pub struct LapceTab { picker: WidgetPod>>, settings: WidgetPod>>, alert: WidgetPod>>, - panels: - HashMap>>>, + panel_left: WidgetPod>>, + panel_bottom: WidgetPod>>, + panel_right: WidgetPod>>, current_bar_hover: Option, height: f64, main_split_height: f64, @@ -93,30 +104,12 @@ impl LapceTab { let palette = Palette::new(data); let status = LapceStatus::new(); - let mut panels = HashMap::new(); let file_explorer = FileExplorer::new_panel(data); - panels.insert( - PanelKind::FileExplorer, - WidgetPod::new(file_explorer.boxed()), - ); - let source_control = new_source_control_panel(data); - panels.insert( - PanelKind::SourceControl, - WidgetPod::new(source_control.boxed()), - ); - let plugin = Plugin::new_panel(data); - panels.insert(PanelKind::Plugin, WidgetPod::new(plugin.boxed())); - let terminal = TerminalPanel::new_panel(data); - panels.insert(PanelKind::Terminal, WidgetPod::new(terminal.boxed())); - let search = new_search_panel(data); - panels.insert(PanelKind::Search, WidgetPod::new(search.boxed())); - let problem = new_problem_panel(&data.problem); - panels.insert(PanelKind::Problem, WidgetPod::new(problem.boxed())); let picker = FilePicker::new(data); @@ -125,9 +118,28 @@ impl LapceTab { let alert = AlertBox::new(data); + let mut panel_left = PanelContainer::new(PanelContainerPosition::Left); + panel_left.insert_panel( + PanelKind::FileExplorer, + WidgetPod::new(file_explorer.boxed()), + ); + panel_left.insert_panel( + PanelKind::SourceControl, + WidgetPod::new(source_control.boxed()), + ); + panel_left.insert_panel(PanelKind::Plugin, WidgetPod::new(plugin.boxed())); + + let mut panel_bottom = PanelContainer::new(PanelContainerPosition::Bottom); + panel_bottom + .insert_panel(PanelKind::Terminal, WidgetPod::new(terminal.boxed())); + panel_bottom.insert_panel(PanelKind::Search, WidgetPod::new(search.boxed())); + panel_bottom + .insert_panel(PanelKind::Problem, WidgetPod::new(problem.boxed())); + + let panel_right = PanelContainer::new(PanelContainerPosition::Right); + Self { id: data.id, - activity: WidgetPod::new(activity), main_split: WidgetPod::new(main_split.boxed()), completion: WidgetPod::new(completion.boxed()), hover: WidgetPod::new(hover.boxed()), @@ -136,7 +148,9 @@ impl LapceTab { status: WidgetPod::new(status.boxed()), settings: WidgetPod::new(settings.boxed()), alert: WidgetPod::new(alert.boxed()), - panels, + panel_left: WidgetPod::new(panel_left.boxed()), + panel_right: WidgetPod::new(panel_right.boxed()), + panel_bottom: WidgetPod::new(panel_bottom.boxed()), current_bar_hover: None, height: 0.0, main_split_height: 0.0, @@ -166,18 +180,8 @@ impl LapceTab { data: &LapceTabData, mouse_pos: Point, ) -> Option { - let panel_left_top_shown = data - .panels - .get(&PanelPosition::LeftTop) - .map(|p| p.is_shown()) - .unwrap_or(false); - let panel_left_bottom_shown = data - .panels - .get(&PanelPosition::LeftBottom) - .map(|p| p.is_shown()) - .unwrap_or(false); - let left = if panel_left_bottom_shown || panel_left_top_shown { - let left = data.panel_size.left + 50.0; + let left = if data.panel_left_shown() { + let left = data.panel_size.left; if mouse_pos.x >= left - 3.0 && mouse_pos.x <= left + 3.0 { return Some(PanelResizePosition::Left); } @@ -186,18 +190,7 @@ impl LapceTab { 0.0 }; - let panel_bottom_left_shown = data - .panels - .get(&PanelPosition::BottomLeft) - .map(|p| p.is_shown()) - .unwrap_or(false); - let panel_bottom_right_shown = data - .panels - .get(&PanelPosition::BottomRight) - .map(|p| p.is_shown()) - .unwrap_or(false); - if panel_bottom_left_shown || panel_bottom_right_shown { - let _bottom = data.panel_size.bottom; + if data.panel_bottom_shown() { let y = self.main_split_height; if mouse_pos.x > left && mouse_pos.y >= y - 3.0 && mouse_pos.y <= y + 3.0 { @@ -1292,15 +1285,15 @@ impl Widget for LapceTab { self.main_split.event(ctx, event, data, env); self.status.event(ctx, event, data, env); - for (_, panel) in data.panels.clone().iter() { - if panel.is_shown() || event.should_propagate_to_hidden() { - self.panels - .get_mut(&panel.active) - .unwrap() - .event(ctx, event, data, env); - } + if data.panel_left_shown() || event.should_propagate_to_hidden() { + self.panel_left.event(ctx, event, data, env); + } + if data.panel_right_shown() || event.should_propagate_to_hidden() { + self.panel_right.event(ctx, event, data, env); + } + if data.panel_bottom_shown() || event.should_propagate_to_hidden() { + self.panel_bottom.event(ctx, event, data, env); } - self.activity.event(ctx, event, data, env); match event { Event::MouseUp(_) => { @@ -1339,7 +1332,6 @@ impl Widget for LapceTab { } } self.palette.lifecycle(ctx, event, data, env); - self.activity.lifecycle(ctx, event, data, env); self.main_split.lifecycle(ctx, event, data, env); self.status.lifecycle(ctx, event, data, env); self.completion.lifecycle(ctx, event, data, env); @@ -1347,10 +1339,9 @@ impl Widget for LapceTab { self.picker.lifecycle(ctx, event, data, env); self.settings.lifecycle(ctx, event, data, env); self.alert.lifecycle(ctx, event, data, env); - - for (_, panel) in self.panels.iter_mut() { - panel.lifecycle(ctx, event, data, env); - } + self.panel_left.lifecycle(ctx, event, data, env); + self.panel_right.lifecycle(ctx, event, data, env); + self.panel_bottom.lifecycle(ctx, event, data, env); } fn update( @@ -1397,7 +1388,6 @@ impl Widget for LapceTab { } self.palette.update(ctx, data, env); - self.activity.update(ctx, data, env); self.main_split.update(ctx, data, env); self.completion.update(ctx, data, env); self.hover.update(ctx, data, env); @@ -1405,14 +1395,9 @@ impl Widget for LapceTab { self.picker.update(ctx, data, env); self.settings.update(ctx, data, env); self.alert.update(ctx, data, env); - for (_, panel) in data.panels.iter() { - if panel.is_shown() { - self.panels - .get_mut(&panel.active) - .unwrap() - .update(ctx, data, env); - } - } + self.panel_left.update(ctx, data, env); + self.panel_right.update(ctx, data, env); + self.panel_bottom.update(ctx, data, env); } fn layout( @@ -1426,9 +1411,6 @@ impl Widget for LapceTab { let self_size = bc.max(); self.height = self_size.height; - let activity_size = self.activity.layout(ctx, bc, data, env); - self.activity.set_origin(ctx, data, env, Point::ZERO); - let status_size = self.status.layout(ctx, bc, data, env); self.status.set_origin( ctx, @@ -1438,217 +1420,81 @@ impl Widget for LapceTab { ); self.status_height = status_size.height; - let mut active_panels = Vec::new(); - let panel_left_top_shown = data - .panels - .get(&PanelPosition::LeftTop) - .map(|p| p.is_shown()) - .unwrap_or(false); - let panel_left_bottom_shown = data - .panels - .get(&PanelPosition::LeftBottom) - .map(|p| p.is_shown()) - .unwrap_or(false); - let panel_left_width = if panel_left_top_shown || panel_left_bottom_shown { + let panel_left_width = if data.panel_left_shown() { let left_width = data.panel_size.left; - if panel_left_top_shown && panel_left_bottom_shown { - let top_height = (self_size.height - status_size.height) - * data.panel_size.left_split; - let bottom_height = - self_size.height - status_size.height - top_height; - - let panel_left_top = - data.panels.get(&PanelPosition::LeftTop).unwrap().active; - active_panels.push(panel_left_top); - let panel_left_top = self.panels.get_mut(&panel_left_top).unwrap(); - panel_left_top.layout( - ctx, - &BoxConstraints::tight(Size::new(left_width, top_height)), - data, - env, - ); - panel_left_top.set_origin( - ctx, - data, - env, - Point::new(activity_size.width, 0.0), - ); - - let panel_left_bottom = - data.panels.get(&PanelPosition::LeftBottom).unwrap().active; - active_panels.push(panel_left_bottom); - let panel_left_bottom = - self.panels.get_mut(&panel_left_bottom).unwrap(); - panel_left_bottom.layout( - ctx, - &BoxConstraints::tight(Size::new(left_width, bottom_height)), - data, - env, - ); - panel_left_bottom.set_origin( - ctx, - data, - env, - Point::new(activity_size.width, top_height), - ); - } else if panel_left_top_shown { - let top_height = self_size.height - status_size.height; - let panel_left_top = - data.panels.get(&PanelPosition::LeftTop).unwrap().active; - active_panels.push(panel_left_top); - let panel_left_top = self.panels.get_mut(&panel_left_top).unwrap(); - panel_left_top.layout( - ctx, - &BoxConstraints::tight(Size::new(left_width, top_height)), - data, - env, - ); - panel_left_top.set_origin( - ctx, - data, - env, - Point::new(activity_size.width, 0.0), - ); - } else if panel_left_bottom_shown { - let bottom_height = self_size.height - status_size.height; - let panel_left_bottom = - data.panels.get(&PanelPosition::LeftBottom).unwrap().active; - active_panels.push(panel_left_bottom); - let panel_left_bottom = - self.panels.get_mut(&panel_left_bottom).unwrap(); - panel_left_bottom.layout( - ctx, - &BoxConstraints::tight(Size::new(left_width, bottom_height)), - data, - env, - ); - panel_left_bottom.set_origin( - ctx, - data, - env, - Point::new(activity_size.width, 0.0), - ); - } + self.panel_left.layout( + ctx, + &BoxConstraints::tight(Size::new( + left_width, + self_size.height - status_size.height, + )), + data, + env, + ); + self.panel_left + .set_origin(ctx, data, env, Point::new(0.0, 0.0)); left_width } else { 0.0 }; - let (panel_bottom_left_shown, panel_bottom_left_maximized) = data - .panels - .get(&PanelPosition::BottomLeft) - .map(|p| (p.is_shown(), p.is_maximized())) - .unwrap_or((false, false)); - let (panel_bottom_right_shown, panel_bottom_right_maximized) = data - .panels - .get(&PanelPosition::BottomRight) - .map(|p| (p.is_shown(), p.is_maximized())) - .unwrap_or((false, false)); - let panel_bottom_height = if panel_bottom_left_shown - || panel_bottom_right_shown - { - let maximized = - panel_bottom_left_maximized || panel_bottom_right_maximized; - let bottom_height = if maximized { + let panel_right_width = if data.panel_right_shown() { + let right_width = data.panel_size.right; + self.panel_right.layout( + ctx, + &BoxConstraints::tight(Size::new( + right_width, + self_size.height - status_size.height, + )), + data, + env, + ); + self.panel_right.set_origin( + ctx, + data, + env, + Point::new(self_size.width - right_width, 0.0), + ); + right_width + } else { + 0.0 + }; + + let panel_bottom_height = if data.panel_bottom_shown() { + let bottom_height = if data.panel_bottom_maximized() { self_size.height - status_size.height } else { data.panel_size.bottom }; - let panel_x = panel_left_width + activity_size.width; - let panel_y = self_size.height - status_size.height - bottom_height; - let panel_width = - self_size.width - activity_size.width - panel_left_width; - if panel_bottom_left_shown && panel_bottom_right_shown { - let left_width = panel_width * data.panel_size.bottom_split; - let right_width = panel_width - left_width; - - let panel_bottom_left = - data.panels.get(&PanelPosition::BottomLeft).unwrap().active; - active_panels.push(panel_bottom_left); - let panel_bottom_left = - self.panels.get_mut(&panel_bottom_left).unwrap(); - panel_bottom_left.layout( - ctx, - &BoxConstraints::tight(Size::new(left_width, bottom_height)), - data, - env, - ); - panel_bottom_left.set_origin( - ctx, - data, - env, - Point::new(panel_left_width + activity_size.width, panel_y), - ); - - let panel_bottom_right = - data.panels.get(&PanelPosition::BottomRight).unwrap().active; - active_panels.push(panel_bottom_right); - let panel_bottom_right = - self.panels.get_mut(&panel_bottom_right).unwrap(); - panel_bottom_right.layout( - ctx, - &BoxConstraints::tight(Size::new(right_width, bottom_height)), - data, - env, - ); - panel_bottom_right.set_origin( - ctx, - data, - env, - Point::new( - panel_left_width + left_width + activity_size.width, - panel_y, - ), - ); - } else if panel_bottom_left_shown { - let panel_bottom_left = - data.panels.get(&PanelPosition::BottomLeft).unwrap().active; - active_panels.push(panel_bottom_left); - let panel_bottom_left = - self.panels.get_mut(&panel_bottom_left).unwrap(); - panel_bottom_left.layout( - ctx, - &BoxConstraints::tight(Size::new(panel_width, bottom_height)), - data, - env, - ); - panel_bottom_left.set_origin( - ctx, - data, - env, - Point::new(panel_x, panel_y), - ); - } else if panel_bottom_right_shown { - let panel_bottom_right = - data.panels.get(&PanelPosition::BottomRight).unwrap().active; - active_panels.push(panel_bottom_right); - let panel_bottom_right = - self.panels.get_mut(&panel_bottom_right).unwrap(); - panel_bottom_right.layout( - ctx, - &BoxConstraints::tight(Size::new(panel_width, bottom_height)), - data, - env, - ); - panel_bottom_right.set_origin( - ctx, - data, - env, - Point::new(panel_x, panel_y), - ); - } + self.panel_bottom.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width - panel_left_width - panel_right_width, + bottom_height, + )), + data, + env, + ); + self.panel_bottom.set_origin( + ctx, + data, + env, + Point::new( + panel_left_width, + self_size.height - status_size.height - bottom_height, + ), + ); bottom_height } else { 0.0 }; let main_split_size = Size::new( - self_size.width - panel_left_width - activity_size.width, + self_size.width - panel_left_width - panel_right_width, self_size.height - status_size.height - panel_bottom_height, ); let main_split_bc = BoxConstraints::tight(main_split_size); - let main_split_origin = - Point::new(panel_left_width + activity_size.width, 0.0); + let main_split_origin = Point::new(panel_left_width, 0.0); data.main_split.update_split_layout_rect( *data.main_split.split_id, main_split_size.to_rect().with_origin(main_split_origin), @@ -1706,79 +1552,15 @@ impl Widget for LapceTab { fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { self.main_split.paint(ctx, data, env); - for pos in &[ - PanelPosition::BottomLeft, - PanelPosition::BottomRight, - PanelPosition::LeftTop, - PanelPosition::LeftBottom, - PanelPosition::RightTop, - PanelPosition::RightBottom, - ] { - if let Some(panel) = data.panels.get(pos) { - if panel.shown { - if let Some(panel) = self.panels.get_mut(&panel.active) { - let bg = match pos { - PanelPosition::LeftTop - | PanelPosition::LeftBottom - | PanelPosition::RightTop - | PanelPosition::RightBottom => data - .config - .get_color_unchecked(LapceTheme::PANEL_BACKGROUND), - PanelPosition::BottomLeft - | PanelPosition::BottomRight => data - .config - .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), - }; - let rect = panel.layout_rect(); - let shadow_width = data.config.ui.drop_shadow_width() as f64; - if shadow_width > 0.0 { - ctx.blurred_rect( - rect, - shadow_width, - data.config.get_color_unchecked( - LapceTheme::LAPCE_DROPDOWN_SHADOW, - ), - ); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x1 + 0.5, rect.y0), - Point::new(rect.x1 + 0.5, rect.y1), - ), - data.config - .get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); - } - ctx.fill(rect, bg); - panel.paint(ctx, data, env); - } - } - } + if data.panel_bottom_shown() { + self.panel_bottom.paint(ctx, data, env); + } + if data.panel_left_shown() { + self.panel_left.paint(ctx, data, env); + } + if data.panel_right_shown() { + self.panel_right.paint(ctx, data, env); } - self.activity.paint(ctx, data, env); - // if let Some((active_index, (id, kind))) = - // data.panels.get(&PanelPosition::LeftTop).and_then(|panel| { - // panel - // .widgets - // .iter() - // .enumerate() - // .find(|(i, (id, kind))| id == &panel.active) - // }) - // { - // let active_offset = 50.0 * active_index as f64; - // let rect = Size::new(50.0, 50.0) - // .to_rect() - // .with_origin(Point::new(0.0, active_offset)); - // ctx.fill( - // rect, - // data.config - // .get_color_unchecked(LapceTheme::PANEL_BACKGROUND), - // ); - // // self.activity - // // .widget_mut() - // // .paint_svg(ctx, data, active_index, kind); - // } self.status.paint(ctx, data, env); self.completion.paint(ctx, data, env); self.hover.paint(ctx, data, env); From 3b1ebcfddb0e32e031f6db79c9f19b043dbca4aa Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 19:47:27 +0100 Subject: [PATCH 026/816] switcher paint --- defaults/settings.toml | 2 - lapce-data/src/config.rs | 15 ---- lapce-ui/src/panel.rs | 149 +++++++++++++++++++++++++++------------ 3 files changed, 102 insertions(+), 64 deletions(-) diff --git a/defaults/settings.toml b/defaults/settings.toml index d1c695da24..046cc388e8 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -27,8 +27,6 @@ font-size = 13 header-height = 35 status-height = 25 tab-min-width = 100 -panel-switcher-bar-size = 30 -panel-switcher-icon-size = 20 scroll-width = 10 drop-shadow-width = 0 diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index f5bd8cc958..8e06b13a89 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -189,12 +189,6 @@ pub struct UIConfig { #[field_names(desc = "Set the minium width for editor tab")] tab_min_width: usize, - #[field_names(desc = "Set the size for the panel switcher bar")] - panel_switcher_bar_size: usize, - - #[field_names(desc = "Set the size for the icon in panel switcher")] - panel_switcher_icon_size: usize, - #[field_names(desc = "Set the width for scroll bar")] scroll_width: usize, @@ -229,15 +223,6 @@ impl UIConfig { self.tab_min_width } - pub fn panel_switcher_bar_size(&self) -> usize { - self.panel_switcher_bar_size - .max(self.panel_switcher_icon_size) - } - - pub fn panel_switcher_icon_size(&self) -> usize { - self.panel_switcher_icon_size - } - pub fn scroll_width(&self) -> usize { self.scroll_width } diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 296bb0b900..257c19911a 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -546,7 +546,6 @@ impl Widget for PanelMainHeader { fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { let rect = ctx.size().to_rect(); - let position = data.panel_position(self.kind); ctx.with_save(|ctx| { let shadow_width = data.config.ui.drop_shadow_width() as f64; if shadow_width > 0.0 { @@ -557,7 +556,7 @@ impl Widget for PanelMainHeader { data.config .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), ); - } else if let Some(position) = position { + } else { ctx.stroke( Line::new( Point::new(rect.x0, rect.y1 + 0.5), @@ -566,30 +565,8 @@ impl Widget for PanelMainHeader { data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), 1.0, ); - match position { - PanelPosition::BottomLeft | PanelPosition::BottomRight => { - ctx.stroke( - Line::new( - Point::new(rect.x0, rect.y0 - 0.5), - Point::new(rect.x1, rect.y0 - 0.5), - ), - data.config - .get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); - } - _ => {} - } } - ctx.clip(rect); - let background = match position { - Some(PanelPosition::BottomLeft) - | Some(PanelPosition::BottomRight) => LapceTheme::EDITOR_BACKGROUND, - _ => LapceTheme::PANEL_BACKGROUND, - }; - ctx.fill(rect, data.config.get_color_unchecked(background)); - let text_layout = ctx .text() .new_text_layout(self.text.clone()) @@ -633,6 +610,7 @@ impl Widget for PanelMainHeader { } pub struct PanelContainer { + switcher: WidgetPod, position: PanelContainerPosition, panels: HashMap>>>, @@ -641,6 +619,7 @@ pub struct PanelContainer { impl PanelContainer { pub fn new(position: PanelContainerPosition) -> Self { Self { + switcher: WidgetPod::new(PanelSwitcher::new(position)), position, panels: HashMap::new(), } @@ -679,6 +658,7 @@ impl Widget for PanelContainer { data: &mut LapceTabData, env: &Env, ) { + self.switcher.event(ctx, event, data, env); if event.should_propagate_to_hidden() { for (_, panel) in self.panels.iter_mut() { panel.event(ctx, event, data, env); @@ -710,6 +690,7 @@ impl Widget for PanelContainer { data: &LapceTabData, env: &Env, ) { + self.switcher.lifecycle(ctx, event, data, env); for (_, panel) in self.panels.iter_mut() { panel.lifecycle(ctx, event, data, env); } @@ -722,6 +703,7 @@ impl Widget for PanelContainer { data: &LapceTabData, env: &Env, ) { + self.switcher.update(ctx, data, env); if let Some(panel) = data.panels.get(&self.first_position()) { if panel.shown { self.panels @@ -750,6 +732,9 @@ impl Widget for PanelContainer { let self_size = bc.max(); let is_bottom = self.position.is_bottom(); + let switcher_size = self.switcher.layout(ctx, bc, data, env); + self.switcher.set_origin(ctx, data, env, Point::ZERO); + let panel_first = data.panels.get(&self.first_position()).and_then(|p| { if p.shown { Some(&p.active) @@ -773,8 +758,10 @@ impl Widget for PanelContainer { PanelContainerPosition::Right => data.panel_size.right_split, }; if is_bottom { - let size_fist = (self_size.width * split).round(); - let size_second = self_size.width - size_fist; + let size_fist = + ((self_size.width - switcher_size.width) * split).round(); + let size_second = + self_size.width - switcher_size.width - size_fist; let panel_first = self.panels.get_mut(panel_first).unwrap(); panel_first.layout( ctx, @@ -785,7 +772,12 @@ impl Widget for PanelContainer { data, env, ); - panel_first.set_origin(ctx, data, env, Point::ZERO); + panel_first.set_origin( + ctx, + data, + env, + Point::new(switcher_size.width, 0.0), + ); let panel_second = self.panels.get_mut(panel_second).unwrap(); panel_second.layout( ctx, @@ -800,11 +792,13 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(size_fist, 0.0), + Point::new(size_fist + switcher_size.width, 0.0), ); } else { - let size_fist = (self_size.height * split).round(); - let size_second = self_size.height - size_fist; + let size_fist = + ((self_size.height - switcher_size.height) * split).round(); + let size_second = + self_size.height - switcher_size.height - size_fist; let panel_first = self.panels.get_mut(panel_first).unwrap(); panel_first.layout( ctx, @@ -815,7 +809,12 @@ impl Widget for PanelContainer { data, env, ); - panel_first.set_origin(ctx, data, env, Point::ZERO); + panel_first.set_origin( + ctx, + data, + env, + Point::new(0.0, switcher_size.height), + ); let panel_second = self.panels.get_mut(panel_second).unwrap(); panel_second.layout( @@ -831,14 +830,28 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(0.0, size_fist), + Point::new(0.0, size_fist + switcher_size.height), ); } } (Some(panel), None) | (None, Some(panel)) => { let panel = self.panels.get_mut(panel).unwrap(); panel.layout(ctx, bc, data, env); - panel.set_origin(ctx, data, env, Point::ZERO); + if is_bottom { + panel.set_origin( + ctx, + data, + env, + Point::new(switcher_size.width, 0.0), + ); + } else { + panel.set_origin( + ctx, + data, + env, + Point::new(0.0, switcher_size.height), + ); + } } (None, None) => {} } @@ -915,7 +928,7 @@ impl Widget for PanelContainer { ctx.stroke( Line::new( Point::new(rect.x0, rect.y0 - 0.5), - Point::new(rect.x1, rect.y1 - 0.5), + Point::new(rect.x1, rect.y0 - 0.5), ), data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), 1.0, @@ -940,16 +953,18 @@ impl Widget for PanelContainer { .paint(ctx, data, env); } } + + self.switcher.paint(ctx, data, env); } } pub struct PanelSwitcher { - is_bottom: bool, + position: PanelContainerPosition, } impl PanelSwitcher { - pub fn new(is_bottom: bool) -> Self { - Self { is_bottom } + pub fn new(position: PanelContainerPosition) -> Self { + Self { position } } } @@ -988,18 +1003,58 @@ impl Widget for PanelSwitcher { data: &LapceTabData, _env: &Env, ) -> Size { - if self.is_bottom { - Size::new( - data.config.ui.panel_switcher_bar_size() as f64, - bc.max().height, - ) + if self.position.is_bottom() { + Size::new(data.config.ui.header_height() as f64, bc.max().height) } else { - Size::new( - bc.max().width, - data.config.ui.panel_switcher_bar_size() as f64, - ) + Size::new(bc.max().width, data.config.ui.header_height() as f64) } } - fn paint(&mut self, _ctx: &mut PaintCtx, _data: &LapceTabData, _env: &Env) {} + fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { + let rect = ctx.size().to_rect(); + let shadow_width = data.config.ui.drop_shadow_width() as f64; + if self.position.is_bottom() { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 0.0, 50.0, 0.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x1 + 0.5, rect.y0), + Point::new(rect.x1 + 0.5, rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } else { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0, rect.y1 + 0.5), + Point::new(rect.x1, rect.y1 + 0.5), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + } } From 6111a7723e086542fe31d0d5623dd8d7fb6bf614 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 20:15:12 +0100 Subject: [PATCH 027/816] switcher icons --- lapce-data/src/panel.rs | 16 ++++++ lapce-ui/src/panel.rs | 124 +++++++++++++++++++++++++++++++--------- 2 files changed, 112 insertions(+), 28 deletions(-) diff --git a/lapce-data/src/panel.rs b/lapce-data/src/panel.rs index 6c9101f599..9623476c48 100644 --- a/lapce-data/src/panel.rs +++ b/lapce-data/src/panel.rs @@ -25,4 +25,20 @@ impl PanelContainerPosition { pub fn is_bottom(&self) -> bool { matches!(self, PanelContainerPosition::Bottom) } + + pub fn first(&self) -> PanelPosition { + match self { + PanelContainerPosition::Left => PanelPosition::LeftTop, + PanelContainerPosition::Bottom => PanelPosition::BottomLeft, + PanelContainerPosition::Right => PanelPosition::RightTop, + } + } + + pub fn second(&self) -> PanelPosition { + match self { + PanelContainerPosition::Left => PanelPosition::LeftBottom, + PanelContainerPosition::Bottom => PanelPosition::BottomRight, + PanelContainerPosition::Right => PanelPosition::RightBottom, + } + } } diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 257c19911a..e97ad2c4b7 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -4,7 +4,7 @@ use druid::{ kurbo::Line, piet::{Text, TextLayout, TextLayoutBuilder, TextStorage}, BoxConstraints, Command, Env, Event, EventCtx, LayoutCtx, LifeCycle, - LifeCycleCtx, MouseEvent, PaintCtx, Point, RenderContext, Size, Target, + LifeCycleCtx, MouseEvent, PaintCtx, Point, Rect, RenderContext, Size, Target, UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, }; use lapce_data::{ @@ -632,22 +632,6 @@ impl PanelContainer { ) { self.panels.insert(kind, panel); } - - fn first_position(&self) -> PanelPosition { - match self.position { - PanelContainerPosition::Left => PanelPosition::LeftTop, - PanelContainerPosition::Bottom => PanelPosition::BottomLeft, - PanelContainerPosition::Right => PanelPosition::RightTop, - } - } - - fn second_position(&self) -> PanelPosition { - match self.position { - PanelContainerPosition::Left => PanelPosition::LeftBottom, - PanelContainerPosition::Bottom => PanelPosition::BottomRight, - PanelContainerPosition::Right => PanelPosition::RightBottom, - } - } } impl Widget for PanelContainer { @@ -664,7 +648,7 @@ impl Widget for PanelContainer { panel.event(ctx, event, data, env); } } else { - if let Some(panel) = data.panels.get(&self.first_position()) { + if let Some(panel) = data.panels.get(&self.position.first()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -672,7 +656,7 @@ impl Widget for PanelContainer { .event(ctx, event, data, env); } } - if let Some(panel) = data.panels.get(&self.second_position()) { + if let Some(panel) = data.panels.get(&self.position.second()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -704,7 +688,7 @@ impl Widget for PanelContainer { env: &Env, ) { self.switcher.update(ctx, data, env); - if let Some(panel) = data.panels.get(&self.first_position()) { + if let Some(panel) = data.panels.get(&self.position.first()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -712,7 +696,7 @@ impl Widget for PanelContainer { .update(ctx, data, env); } } - if let Some(panel) = data.panels.get(&self.second_position()) { + if let Some(panel) = data.panels.get(&self.position.second()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -735,14 +719,14 @@ impl Widget for PanelContainer { let switcher_size = self.switcher.layout(ctx, bc, data, env); self.switcher.set_origin(ctx, data, env, Point::ZERO); - let panel_first = data.panels.get(&self.first_position()).and_then(|p| { + let panel_first = data.panels.get(&self.position.first()).and_then(|p| { if p.shown { Some(&p.active) } else { None } }); - let panel_second = data.panels.get(&self.second_position()).and_then(|p| { + let panel_second = data.panels.get(&self.position.second()).and_then(|p| { if p.shown { Some(&p.active) } else { @@ -937,7 +921,7 @@ impl Widget for PanelContainer { } } - if let Some(panel) = data.panels.get(&self.first_position()) { + if let Some(panel) = data.panels.get(&self.position.first()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -945,7 +929,7 @@ impl Widget for PanelContainer { .paint(ctx, data, env); } } - if let Some(panel) = data.panels.get(&self.second_position()) { + if let Some(panel) = data.panels.get(&self.position.second()) { if panel.shown { self.panels .get_mut(&panel.active) @@ -960,11 +944,81 @@ impl Widget for PanelContainer { pub struct PanelSwitcher { position: PanelContainerPosition, + icons: Vec, } impl PanelSwitcher { pub fn new(position: PanelContainerPosition) -> Self { - Self { position } + Self { + position, + icons: Vec::new(), + } + } + + fn update_icons(&mut self, self_size: Size, data: &LapceTabData) { + let mut icons = Vec::new(); + if let Some(panel) = data.panels.get(&self.position.first()) { + for kind in panel.widgets.iter() { + icons.push(Self::panel_icon(kind, data)); + } + } + if let Some(panel) = data.panels.get(&self.position.second()) { + for kind in panel.widgets.iter() { + icons.push(Self::panel_icon(kind, data)); + } + } + let switcher_size = data.config.ui.header_height() as f64; + let icon_size = data.config.ui.font_size() as f64; + let total_size = (data.config.ui.header_height() * icons.len()) as f64; + if self.position.is_bottom() { + // let start = ((self_size.height - total_size) / 2.0).round(); + for (i, icon) in icons.iter_mut().enumerate() { + icon.rect = Rect::ZERO + .with_origin(Point::new( + self_size.width / 2.0, + (i as f64 + 0.5) * switcher_size, + )) + .inflate(icon_size / 2.0, icon_size / 2.0); + } + } else { + // let start = ((self_size.width - total_size) / 2.0).round(); + for (i, icon) in icons.iter_mut().enumerate() { + icon.rect = Rect::ZERO + .with_origin(Point::new( + (i as f64 + 0.5) * switcher_size, + self_size.height / 2.0, + )) + .inflate(icon_size / 2.0, icon_size / 2.0); + } + } + self.icons = icons; + } + + fn panel_icon(kind: &PanelKind, data: &LapceTabData) -> LapceIcon { + let cmd = match kind { + PanelKind::FileExplorer => { + LapceWorkbenchCommand::ToggleFileExplorerVisual + } + PanelKind::SourceControl => { + LapceWorkbenchCommand::ToggleSourceControlVisual + } + PanelKind::Plugin => LapceWorkbenchCommand::TogglePluginVisual, + PanelKind::Terminal => LapceWorkbenchCommand::ToggleTerminalVisual, + PanelKind::Search => LapceWorkbenchCommand::ToggleSearchVisual, + PanelKind::Problem => LapceWorkbenchCommand::ToggleProblemVisual, + }; + LapceIcon { + icon: kind.svg_name(), + rect: Rect::ZERO, + command: Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench(cmd), + data: None, + }, + Target::Widget(data.id), + ), + } } } @@ -1003,11 +1057,13 @@ impl Widget for PanelSwitcher { data: &LapceTabData, _env: &Env, ) -> Size { - if self.position.is_bottom() { + let self_size = if self.position.is_bottom() { Size::new(data.config.ui.header_height() as f64, bc.max().height) } else { Size::new(bc.max().width, data.config.ui.header_height() as f64) - } + }; + self.update_icons(self_size, data); + self_size } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { @@ -1056,5 +1112,17 @@ impl Widget for PanelSwitcher { ); } } + + for icon in self.icons.iter() { + let svg = get_svg(icon.icon).unwrap(); + ctx.draw_svg( + &svg, + icon.rect, + Some( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), + ), + ); + } } } From 00c09d4d65026bec87b9e3c161a0f305b7f9062d Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:20:16 +0100 Subject: [PATCH 028/816] switcher active panel --- lapce-ui/src/panel.rs | 166 +++++++++++++++++++++++++++++++++++------- 1 file changed, 141 insertions(+), 25 deletions(-) diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index e97ad2c4b7..caefef992b 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, sync::Arc}; use druid::{ kurbo::Line, piet::{Text, TextLayout, TextLayoutBuilder, TextStorage}, - BoxConstraints, Command, Env, Event, EventCtx, LayoutCtx, LifeCycle, + BoxConstraints, Command, Cursor, Env, Event, EventCtx, LayoutCtx, LifeCycle, LifeCycleCtx, MouseEvent, PaintCtx, Point, Rect, RenderContext, Size, Target, UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, }; @@ -820,8 +820,16 @@ impl Widget for PanelContainer { } (Some(panel), None) | (None, Some(panel)) => { let panel = self.panels.get_mut(panel).unwrap(); - panel.layout(ctx, bc, data, env); if is_bottom { + panel.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width - switcher_size.width, + self_size.height, + )), + data, + env, + ); panel.set_origin( ctx, data, @@ -829,6 +837,15 @@ impl Widget for PanelContainer { Point::new(switcher_size.width, 0.0), ); } else { + panel.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width, + self_size.height - switcher_size.height, + )), + data, + env, + ); panel.set_origin( ctx, data, @@ -944,7 +961,10 @@ impl Widget for PanelContainer { pub struct PanelSwitcher { position: PanelContainerPosition, - icons: Vec, + icons: Vec<(PanelKind, LapceIcon)>, + mouse_pos: Point, + on_icon: bool, + clicked_icon: Option, } impl PanelSwitcher { @@ -952,9 +972,18 @@ impl PanelSwitcher { Self { position, icons: Vec::new(), + mouse_pos: Point::ZERO, + on_icon: false, + clicked_icon: None, } } + fn icon_padding(data: &LapceTabData) -> f64 { + ((data.config.ui.header_height() - data.config.ui.font_size()) as f64 * 0.5 + / 2.0) + .round() + } + fn update_icons(&mut self, self_size: Size, data: &LapceTabData) { let mut icons = Vec::new(); if let Some(panel) = data.panels.get(&self.position.first()) { @@ -969,10 +998,8 @@ impl PanelSwitcher { } let switcher_size = data.config.ui.header_height() as f64; let icon_size = data.config.ui.font_size() as f64; - let total_size = (data.config.ui.header_height() * icons.len()) as f64; if self.position.is_bottom() { - // let start = ((self_size.height - total_size) / 2.0).round(); - for (i, icon) in icons.iter_mut().enumerate() { + for (i, (_, icon)) in icons.iter_mut().enumerate() { icon.rect = Rect::ZERO .with_origin(Point::new( self_size.width / 2.0, @@ -981,8 +1008,7 @@ impl PanelSwitcher { .inflate(icon_size / 2.0, icon_size / 2.0); } } else { - // let start = ((self_size.width - total_size) / 2.0).round(); - for (i, icon) in icons.iter_mut().enumerate() { + for (i, (_, icon)) in icons.iter_mut().enumerate() { icon.rect = Rect::ZERO .with_origin(Point::new( (i as f64 + 0.5) * switcher_size, @@ -994,7 +1020,7 @@ impl PanelSwitcher { self.icons = icons; } - fn panel_icon(kind: &PanelKind, data: &LapceTabData) -> LapceIcon { + fn panel_icon(kind: &PanelKind, data: &LapceTabData) -> (PanelKind, LapceIcon) { let cmd = match kind { PanelKind::FileExplorer => { LapceWorkbenchCommand::ToggleFileExplorerVisual @@ -1007,29 +1033,77 @@ impl PanelSwitcher { PanelKind::Search => LapceWorkbenchCommand::ToggleSearchVisual, PanelKind::Problem => LapceWorkbenchCommand::ToggleProblemVisual, }; - LapceIcon { - icon: kind.svg_name(), - rect: Rect::ZERO, - command: Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench(cmd), - data: None, - }, - Target::Widget(data.id), - ), - } + ( + kind.clone(), + LapceIcon { + icon: kind.svg_name(), + rect: Rect::ZERO, + command: Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench(cmd), + data: None, + }, + Target::Widget(data.id), + ), + }, + ) } } impl Widget for PanelSwitcher { fn event( &mut self, - _ctx: &mut EventCtx, - _event: &Event, - _data: &mut LapceTabData, + ctx: &mut EventCtx, + event: &Event, + data: &mut LapceTabData, _env: &Env, ) { + match event { + Event::MouseMove(mouse_event) => { + self.mouse_pos = mouse_event.pos; + let icon_padding = Self::icon_padding(data); + for (_, icon) in self.icons.iter() { + let rect = icon.rect.inflate(icon_padding, icon_padding); + if rect.contains(self.mouse_pos) { + if !self.on_icon { + ctx.set_cursor(&Cursor::Pointer); + self.on_icon = true; + ctx.request_paint(); + } + return; + } + } + if self.on_icon { + self.on_icon = false; + ctx.clear_cursor(); + ctx.request_paint(); + } + } + Event::MouseDown(mouse_event) => { + let icon_padding = Self::icon_padding(data); + for (i, (_, icon)) in self.icons.iter().enumerate() { + let rect = icon.rect.inflate(icon_padding, icon_padding); + if rect.contains(mouse_event.pos) { + self.clicked_icon = Some(i); + break; + } + } + } + Event::MouseUp(mouse_event) => { + let icon_padding = Self::icon_padding(data); + for (i, (_, icon)) in self.icons.iter().enumerate() { + let rect = icon.rect.inflate(icon_padding, icon_padding); + if rect.contains(mouse_event.pos) { + if self.clicked_icon == Some(i) { + ctx.submit_command(icon.command.clone()); + } + break; + } + } + } + _ => (), + } } fn lifecycle( @@ -1113,7 +1187,49 @@ impl Widget for PanelSwitcher { } } - for icon in self.icons.iter() { + let icon_padding = Self::icon_padding(data); + let is_bottom = self.position.is_bottom(); + let mut active_kinds = Vec::new(); + if let Some(panel) = data.panels.get(&self.position.first()) { + active_kinds.push(panel.active); + } + if let Some(panel) = data.panels.get(&self.position.second()) { + active_kinds.push(panel.active); + } + for (kind, icon) in self.icons.iter() { + let mouse_rect = icon.rect.inflate(icon_padding, icon_padding); + if mouse_rect.contains(self.mouse_pos) { + ctx.fill( + mouse_rect, + if is_bottom { + data.config + .get_color_unchecked(LapceTheme::HOVER_BACKGROUND) + } else { + data.config.get_color_unchecked(LapceTheme::PANEL_HOVERED) + }, + ); + } + if active_kinds.contains(kind) { + if is_bottom { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x1 + 1.0, mouse_rect.y0), + Point::new(mouse_rect.x1 + 1.0, mouse_rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } else { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x0, mouse_rect.y1 + 1.0), + Point::new(mouse_rect.x1, mouse_rect.y1 + 1.0), + ), + data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } + } let svg = get_svg(icon.icon).unwrap(); ctx.draw_svg( &svg, From f3c2caecb05345cea9acfb9fe8c3cf3cc1fa44d8 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:22:15 +0100 Subject: [PATCH 029/816] remove activity bar --- lapce-ui/src/activity.rs | 126 --------------------------------------- lapce-ui/src/lib.rs | 1 - lapce-ui/src/tab.rs | 27 +++------ 3 files changed, 7 insertions(+), 147 deletions(-) delete mode 100644 lapce-ui/src/activity.rs diff --git a/lapce-ui/src/activity.rs b/lapce-ui/src/activity.rs deleted file mode 100644 index d8af1acb22..0000000000 --- a/lapce-ui/src/activity.rs +++ /dev/null @@ -1,126 +0,0 @@ -use crate::svg::get_svg; -use druid::{ - kurbo::Line, BoxConstraints, Command, Cursor, Env, Event, EventCtx, LayoutCtx, - LifeCycle, LifeCycleCtx, PaintCtx, Point, RenderContext, Size, Target, - UpdateCtx, Widget, -}; -use lapce_data::{ - command::{CommandKind, LapceCommand, LapceWorkbenchCommand, LAPCE_COMMAND}, - config::LapceTheme, - data::LapceTabData, - panel::PanelPosition, -}; -use serde_json::json; - -pub struct ActivityBar {} - -impl ActivityBar { - pub fn new() -> Self { - Self {} - } -} - -impl Default for ActivityBar { - fn default() -> Self { - Self::new() - } -} - -impl Widget for ActivityBar { - fn event( - &mut self, - _ctx: &mut EventCtx, - _event: &Event, - _data: &mut LapceTabData, - _env: &Env, - ) { - } - - fn lifecycle( - &mut self, - _ctx: &mut LifeCycleCtx, - _event: &LifeCycle, - _data: &LapceTabData, - _env: &Env, - ) { - } - - fn update( - &mut self, - _ctx: &mut UpdateCtx, - _old_data: &LapceTabData, - _data: &LapceTabData, - _env: &Env, - ) { - } - - fn layout( - &mut self, - _ctx: &mut LayoutCtx, - bc: &BoxConstraints, - _data: &LapceTabData, - _env: &Env, - ) -> Size { - bc.max() - } - - fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { - let size = ctx.size(); - let rect = size.to_rect(); - - let shadow_width = data.config.ui.drop_shadow_width() as f64; - if shadow_width > 0.0 { - ctx.blurred_rect( - rect, - shadow_width, - data.config - .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), - ); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x1 + 0.5, rect.y0), - Point::new(rect.x1 + 0.5, rect.y1), - ), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); - } - - ctx.fill( - rect, - data.config - .get_color_unchecked(LapceTheme::ACTIVITY_BACKGROUND), - ); - - let mut offset = 0.0; - let svg_color = data - .config - .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) - .clone(); - if let Some(panel) = data.panels.get(&PanelPosition::LeftTop) { - for kind in panel.widgets.iter() { - let svg = get_svg(kind.svg_name()).unwrap(); - if &panel.active == kind && panel.shown { - ctx.fill( - Size::new(size.width, size.width) - .to_rect() - .with_origin(Point::new(0.0, offset)), - data.config - .get_color_unchecked(LapceTheme::ACTIVITY_CURRENT), - ); - } - let svg_size = 25.0; - let rect = - Size::new(svg_size, svg_size) - .to_rect() - .with_origin(Point::new( - (size.width - svg_size) / 2.0, - (size.width - svg_size) / 2.0 + offset, - )); - ctx.draw_svg(&svg, rect, Some(&svg_color)); - offset += size.width; - } - } - } -} diff --git a/lapce-ui/src/lib.rs b/lapce-ui/src/lib.rs index 42e49c9563..e03e6e4932 100644 --- a/lapce-ui/src/lib.rs +++ b/lapce-ui/src/lib.rs @@ -1,4 +1,3 @@ -pub mod activity; pub mod alert; pub mod app; pub mod button; diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 1fbfe26db0..b98db23daf 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1,7 +1,6 @@ use std::{collections::HashMap, path::PathBuf, sync::Arc}; use druid::{ - kurbo::Line, piet::{PietTextLayout, Text, TextLayout, TextLayoutBuilder}, BoxConstraints, Command, Data, Env, Event, EventCtx, InternalLifeCycle, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, @@ -30,7 +29,7 @@ use lapce_data::{ keypress::{DefaultKeyPressHandler, KeyPressData}, menu::MenuKind, palette::PaletteStatus, - panel::{PanelContainerPosition, PanelPosition, PanelResizePosition}, + panel::{PanelContainerPosition, PanelResizePosition}, proxy::path_from_url, }; use lsp_types::DiagnosticSeverity; @@ -38,23 +37,12 @@ use serde::Deserialize; use xi_rope::Rope; use crate::{ - activity::ActivityBar, - alert::AlertBox, - completion::CompletionContainer, - explorer::FileExplorer, - hover::HoverContainer, - palette::Palette, - panel::{PanelContainer, PanelSwitcher}, - picker::FilePicker, - plugin::Plugin, - problem::new_problem_panel, - search::new_search_panel, - settings::LapceSettingsPanel, - source_control::new_source_control_panel, - split::split_data_widget, - status::LapceStatus, - svg::get_svg, - terminal::TerminalPanel, + alert::AlertBox, completion::CompletionContainer, explorer::FileExplorer, + hover::HoverContainer, palette::Palette, panel::PanelContainer, + picker::FilePicker, plugin::Plugin, problem::new_problem_panel, + search::new_search_panel, settings::LapceSettingsPanel, + source_control::new_source_control_panel, split::split_data_widget, + status::LapceStatus, svg::get_svg, terminal::TerminalPanel, }; pub struct LapceIcon { @@ -98,7 +86,6 @@ impl LapceTab { .unwrap(); let main_split = split_data_widget(split_data, data); - let activity = ActivityBar::new(); let completion = CompletionContainer::new(&data.completion); let hover = HoverContainer::new(&data.hover); let palette = Palette::new(data); From 2f1063c2fc378753951e29ff2c566129d0be2ce8 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:25:36 +0100 Subject: [PATCH 030/816] mode reset cursor --- lapce-ui/src/editor/view.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 2e019de7a6..e022227251 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -775,13 +775,15 @@ impl Widget for LapceEditorView { let reset = if old_data.focus != self.view_id { true } else { + let mode = editor_data.editor.cursor.get_mode(); + let old_mode = old_editor_data.editor.cursor.get_mode(); let offset = editor_data.editor.cursor.offset(); let old_offset = old_editor_data.editor.cursor.offset(); let (line, col) = editor_data.doc.buffer().offset_to_line_col(offset); let (old_line, old_col) = old_editor_data.doc.buffer().offset_to_line_col(old_offset); - line != old_line || col != old_col + mode != old_mode || line != old_line || col != old_col }; if reset { From 54a501c3ffd21526a6064c5f2c507e5656ea61e7 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:45:22 +0100 Subject: [PATCH 031/816] resize improvement --- lapce-ui/src/tab.rs | 76 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index b98db23daf..2610d0068f 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -14,8 +14,9 @@ use lapce_core::{ }; use lapce_data::{ command::{ - CommandKind, LapceCommand, LapceUICommand, LAPCE_COMMAND, LAPCE_OPEN_FILE, - LAPCE_OPEN_FOLDER, LAPCE_SAVE_FILE_AS, LAPCE_UI_COMMAND, + CommandKind, LapceCommand, LapceUICommand, LapceWorkbenchCommand, + LAPCE_COMMAND, LAPCE_OPEN_FILE, LAPCE_OPEN_FOLDER, LAPCE_SAVE_FILE_AS, + LAPCE_UI_COMMAND, }, completion::CompletionStatus, config::{Config, LapceTheme}, @@ -146,17 +147,76 @@ impl LapceTab { } } - fn update_split_point(&mut self, data: &mut LapceTabData, mouse_pos: Point) { + fn update_split_point( + &mut self, + ctx: &mut EventCtx, + data: &mut LapceTabData, + mouse_pos: Point, + ) { if let Some(position) = self.current_bar_hover.as_ref() { match position { PanelResizePosition::Left => { - data.panel_size.left = (mouse_pos.x - 50.0).round().max(50.0); + data.panel_size.left = mouse_pos.x.round().max(180.0); + if mouse_pos.x < 90.0 { + if data.panel_left_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelLeftVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } else { + if !data.panel_left_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelLeftVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } } PanelResizePosition::LeftSplit => (), PanelResizePosition::Bottom => { - data.panel_size.bottom = - (self.height - mouse_pos.y.round() - self.status_height) - .max(50.0); + let bottom = + self.height - mouse_pos.y.round() - self.status_height; + data.panel_size.bottom = bottom.max(180.0); + if bottom < 90.0 { + if data.panel_bottom_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelBottomVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } else { + if !data.panel_bottom_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelBottomVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } } } } @@ -265,7 +325,7 @@ impl LapceTab { Event::MouseMove(mouse) => { self.mouse_pos = mouse.pos; if ctx.is_active() { - self.update_split_point(data, mouse.pos); + self.update_split_point(ctx, data, mouse.pos); ctx.request_layout(); ctx.set_handled(); } else { From 6dde22c9755f16496290914a2991267454b2242f Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:46:34 +0100 Subject: [PATCH 032/816] clippy fix --- lapce-ui/src/panel.rs | 40 +++++++++++++++++++--------------------- lapce-ui/src/tab.rs | 30 +++++++++++++----------------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index caefef992b..b0e6e80787 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -1034,7 +1034,7 @@ impl PanelSwitcher { PanelKind::Problem => LapceWorkbenchCommand::ToggleProblemVisual, }; ( - kind.clone(), + *kind, LapceIcon { icon: kind.svg_name(), rect: Rect::ZERO, @@ -1164,27 +1164,25 @@ impl Widget for PanelSwitcher { 1.0, ); } - } else { - if shadow_width > 0.0 { - ctx.with_save(|ctx| { - ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); - ctx.blurred_rect( - rect, - shadow_width, - data.config - .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), - ); - }); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x0, rect.y1 + 0.5), - Point::new(rect.x1, rect.y1 + 0.5), - ), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, + } else if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config + .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), ); - } + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0, rect.y1 + 0.5), + Point::new(rect.x1, rect.y1 + 0.5), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); } let icon_padding = Self::icon_padding(data); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 2610d0068f..e312420a97 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -170,19 +170,17 @@ impl LapceTab { Target::Widget(data.id), )); } - } else { - if !data.panel_left_shown() { - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench( - LapceWorkbenchCommand::TogglePanelLeftVisual, - ), - data: None, - }, - Target::Widget(data.id), - )); - } + } else if !data.panel_left_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelLeftVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); } } PanelResizePosition::LeftSplit => (), @@ -203,9 +201,8 @@ impl LapceTab { Target::Widget(data.id), )); } - } else { - if !data.panel_bottom_shown() { - ctx.submit_command(Command::new( + } else if !data.panel_bottom_shown() { + ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { kind: CommandKind::Workbench( @@ -215,7 +212,6 @@ impl LapceTab { }, Target::Widget(data.id), )); - } } } } From 4140c84a4268cd7a858f3dc444b6be503a36f4f6 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 29 Jun 2022 21:58:43 +0100 Subject: [PATCH 033/816] panel resize line decor --- lapce-ui/src/tab.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index e312420a97..e24c9b2557 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1,6 +1,7 @@ use std::{collections::HashMap, path::PathBuf, sync::Arc}; use druid::{ + kurbo::Line, piet::{PietTextLayout, Text, TextLayout, TextLayoutBuilder}, BoxConstraints, Command, Data, Env, Event, EventCtx, InternalLifeCycle, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, @@ -1604,6 +1605,50 @@ impl Widget for LapceTab { if data.panel_right_shown() { self.panel_right.paint(ctx, data, env); } + if ctx.is_active() { + if let Some(position) = self.current_bar_hover.as_ref() { + let (p0, p1) = match position { + PanelResizePosition::Left => { + let rect = self.panel_left.layout_rect(); + if !data.panel_left_shown() { + (Point::new(1.0, rect.y0), Point::new(1.0, rect.y1)) + } else { + ( + Point::new(rect.x1.round(), rect.y0), + Point::new(rect.x1.round(), rect.y1), + ) + } + } + PanelResizePosition::LeftSplit => { + let rect = self.panel_left.layout_rect(); + ( + Point::new(rect.x1.round(), rect.y0), + Point::new(rect.x1.round(), rect.y1), + ) + } + PanelResizePosition::Bottom => { + let rect = self.panel_bottom.layout_rect(); + if !data.panel_bottom_shown() { + let status_rect = self.status.layout_rect(); + ( + Point::new(rect.x0, status_rect.y0 - 1.0), + Point::new(rect.x1, status_rect.y0 - 1.0), + ) + } else { + ( + Point::new(rect.x0, rect.y0.round()), + Point::new(rect.x1, rect.y0.round()), + ) + } + } + }; + ctx.stroke( + Line::new(p0, p1), + data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } + } self.status.paint(ctx, data, env); self.completion.paint(ctx, data, env); self.hover.paint(ctx, data, env); From 3be28ad62116f665121fda05f3db973fa8851699 Mon Sep 17 00:00:00 2001 From: Connor Morrison Date: Wed, 29 Jun 2022 18:18:25 -0600 Subject: [PATCH 034/816] added multiple file icons --- icons/file_type_css.svg | 6 ++ icons/file_type_html.svg | 8 +++ icons/file_type_js.svg | 4 ++ icons/file_type_lua.svg | 25 +++++++++ icons/file_type_python.svg | 111 +++++++++++++++++++++++++++++++++++++ icons/file_type_ts.svg | 5 ++ icons/file_type_zip.svg | 108 ++++++++++++++++++++++++++++++++++++ lapce-ui/src/svg.rs | 7 +++ 8 files changed, 274 insertions(+) create mode 100644 icons/file_type_css.svg create mode 100644 icons/file_type_html.svg create mode 100644 icons/file_type_js.svg create mode 100644 icons/file_type_lua.svg create mode 100644 icons/file_type_python.svg create mode 100644 icons/file_type_ts.svg create mode 100644 icons/file_type_zip.svg diff --git a/icons/file_type_css.svg b/icons/file_type_css.svg new file mode 100644 index 0000000000..8dfe5bbd35 --- /dev/null +++ b/icons/file_type_css.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/file_type_html.svg b/icons/file_type_html.svg new file mode 100644 index 0000000000..68b569a4cf --- /dev/null +++ b/icons/file_type_html.svg @@ -0,0 +1,8 @@ + + HTML5 Logo + + + + + + diff --git a/icons/file_type_js.svg b/icons/file_type_js.svg new file mode 100644 index 0000000000..9623cd9bfe --- /dev/null +++ b/icons/file_type_js.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/file_type_lua.svg b/icons/file_type_lua.svg new file mode 100644 index 0000000000..a8d1006227 --- /dev/null +++ b/icons/file_type_lua.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + diff --git a/icons/file_type_python.svg b/icons/file_type_python.svg new file mode 100644 index 0000000000..748fc22b37 --- /dev/null +++ b/icons/file_type_python.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/icons/file_type_ts.svg b/icons/file_type_ts.svg new file mode 100644 index 0000000000..b173825c3b --- /dev/null +++ b/icons/file_type_ts.svg @@ -0,0 +1,5 @@ + +TypeScript logo + + + diff --git a/icons/file_type_zip.svg b/icons/file_type_zip.svg new file mode 100644 index 0000000000..ed4e1eb053 --- /dev/null +++ b/icons/file_type_zip.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lapce-ui/src/svg.rs b/lapce-ui/src/svg.rs index 79f91f8bb3..5ef044a8c3 100644 --- a/lapce-ui/src/svg.rs +++ b/lapce-ui/src/svg.rs @@ -64,6 +64,13 @@ pub fn file_svg(path: &Path) -> Svg { (&["rs"], "file_type_rust.svg"), (&["toml"], "file_type_toml.svg"), (&["yaml"], "file_type_yaml.svg"), + (&["py"], "file_type_python.svg"), + (&["lua"], "file_type_lua.svg"), + (&["html", "htm"], "file_type_html.svg"), + (&["zip"], "file_type_zip.svg"), + (&["js"], "file_type_js.svg"), + (&["ts"], "file_type_ts.svg"), + (&["css"], "file_type_css.svg"), ]; for (exts, file_type) in TYPES { From f3157e9a88d25f60f269ee8a7d63d7f7301d2244 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Wed, 29 Jun 2022 22:01:25 -0500 Subject: [PATCH 035/816] Impl discarding git changes per file/workspace --- lapce-data/src/command.rs | 8 +++++ lapce-data/src/data.rs | 10 ++++++ lapce-data/src/proxy.rs | 23 ++++++++++++ lapce-proxy/src/dispatch.rs | 71 +++++++++++++++++++++++++++++++++++++ lapce-rpc/src/proxy.rs | 7 ++++ 5 files changed, 119 insertions(+) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 6ef3437521..b2466e89b7 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -367,6 +367,14 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "source_control_commit")] SourceControlCommit, + #[strum(message = "Source Control: Discard File Changes")] + #[strum(serialize = "source_control_discard_active_file_changes")] + SourceControlDiscardActiveFileChanges, + + #[strum(message = "Source Control: Discard Workspace Changes")] + #[strum(serialize = "source_control_discard_workspace_changes")] + SourceControlDiscardWorkspaceChanges, + #[strum(serialize = "export_current_theme_settings")] #[strum(message = "Export current settings to a theme file")] ExportCurrentThemeSettings, diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 460b1a8c22..64a08c959c 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1387,6 +1387,16 @@ impl LapceTabData { Cursor::new(CursorMode::Insert(Selection::caret(0)), None, None) }; } + LapceWorkbenchCommand::SourceControlDiscardActiveFileChanges => { + if let Some(editor) = self.main_split.active_editor() { + if let BufferContent::File(path) = &editor.content { + self.proxy.git_discard_file_changes(path); + } + } + } + LapceWorkbenchCommand::SourceControlDiscardWorkspaceChanges => { + self.proxy.git_discard_workspace_changes(); + } LapceWorkbenchCommand::CheckoutBranch => match data { Some(Value::String(branch)) => self.proxy.git_checkout(&branch), _ => log::error!("checkout called without a branch"), // TODO: How do I show a result to the user here? diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index 8b2ccf32f3..abf49a4696 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -405,6 +405,29 @@ impl LapceProxy { ) } + pub fn git_discard_file_changes(&self, file: &Path) { + self.rpc.send_rpc_notification( + "git_discard_file_changes", + &json!({ + "file": file, + }), + ); + } + + pub fn git_discard_files_changes(&self, files: Vec) { + self.rpc.send_rpc_notification( + "git_discard_files_changes", + &json!({ + "files": files, + }), + ); + } + + pub fn git_discard_workspace_changes(&self) { + self.rpc + .send_rpc_notification("git_discard_workspace_changes", &json!({})); + } + pub fn install_plugin(&self, plugin: &PluginDescription) { self.rpc .send_rpc_notification("install_plugin", &json!({ "plugin": plugin })); diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index de702e0552..677492e2c2 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -8,6 +8,7 @@ use alacritty_terminal::term::SizeInfo; use anyhow::{anyhow, Context, Result}; use crossbeam_channel::{unbounded, Receiver, Sender}; use directories::BaseDirs; +use git2::build::CheckoutBuilder; use git2::{DiffOptions, Repository}; use grep_matcher::Matcher; use grep_regex::RegexMatcherBuilder; @@ -423,6 +424,36 @@ impl Dispatcher { } } } + GitDiscardFileChanges { file } => { + if let Some(workspace) = self.workspace.lock().clone() { + match git_discard_files_changes( + &workspace, + [file.as_ref()].into_iter(), + ) { + Ok(()) => (), + Err(e) => eprintln!("{e:?}"), + } + } + } + GitDiscardFilesChanges { files } => { + if let Some(workspace) = self.workspace.lock().clone() { + match git_discard_files_changes( + &workspace, + files.iter().map(AsRef::as_ref), + ) { + Ok(()) => (), + Err(e) => eprintln!("{e:?}"), + } + } + } + GitDiscardWorkspaceChanges {} => { + if let Some(workspace) = self.workspace.lock().clone() { + match git_discard_workspace_changes(&workspace) { + Ok(()) => (), + Err(e) => eprintln!("{e:?}"), + } + } + } } } @@ -770,6 +801,46 @@ fn git_checkout(workspace_path: &Path, branch: &str) -> Result<()> { Ok(()) } +fn git_discard_files_changes<'a>( + workspace_path: &Path, + files: impl Iterator, +) -> Result<()> { + let repo = Repository::open(workspace_path)?; + + let mut checkout_b = CheckoutBuilder::new(); + checkout_b.update_only(true).force(); + + let mut had_path = false; + for path in files { + // Remove the workspace path so it is relative to the folder + if let Ok(path) = path.strip_prefix(workspace_path) { + had_path = true; + checkout_b.path(path); + } + } + + if !had_path { + // If there we no paths then we do nothing + // because the default behavior of checkout builder is to select all files + // if it is not given a path + return Ok(()); + } + + repo.checkout_index(None, Some(&mut checkout_b))?; + + Ok(()) +} + +fn git_discard_workspace_changes(workspace_path: &Path) -> Result<()> { + let repo = Repository::open(workspace_path)?; + let mut checkout_b = CheckoutBuilder::new(); + checkout_b.force(); + + repo.checkout_index(None, Some(&mut checkout_b))?; + + Ok(()) +} + fn git_delta_format( workspace_path: &Path, delta: &git2::DiffDelta, diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index b02434d5b7..4a5cdaf550 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -37,6 +37,13 @@ pub enum ProxyNotification { GitCheckout { branch: String, }, + GitDiscardFileChanges { + file: PathBuf, + }, + GitDiscardFilesChanges { + files: Vec, + }, + GitDiscardWorkspaceChanges {}, GitInit {}, TerminalWrite { term_id: TermId, From eabe97af838a695e7e181cf435e8a1319714ce74 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 19:18:12 +0100 Subject: [PATCH 036/816] make panels draggable --- lapce-data/src/command.rs | 1 + lapce-data/src/data.rs | 26 +- lapce-data/src/panel.rs | 22 +- lapce-ui/src/editor/tab.rs | 3 +- lapce-ui/src/editor/tab_header_content.rs | 4 +- lapce-ui/src/panel.rs | 498 ++++++++++++++++------ lapce-ui/src/split.rs | 19 + lapce-ui/src/tab.rs | 404 +++++++++++++++--- 8 files changed, 788 insertions(+), 189 deletions(-) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 6ef3437521..90f9a5e55d 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -440,6 +440,7 @@ pub enum LapceUICommand { Hide, ResignFocus, Focus, + ChildrenChanged, EnsureEditorTabActiveVisible, FocusSourceControl, ShowSettings, diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 460b1a8c22..671b9273bd 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -420,7 +420,8 @@ pub enum FocusArea { #[derive(Clone)] pub enum DragContent { - EditorTab(WidgetId, usize, EditorTabChild, TabRect), + EditorTab(WidgetId, usize, EditorTabChild, Box), + Panel(PanelKind, Rect), } #[derive(Clone, Lens)] @@ -621,6 +622,15 @@ impl LapceTabData { maximized: false, }), ); + panels.insert( + PanelPosition::RightTop, + Arc::new(PanelData { + active: PanelKind::Terminal, + widgets: vec![], + shown: false, + maximized: false, + }), + ); let focus = (*main_split.active).unwrap_or(*main_split.split_id); let mut tab = Self { id: tab_id, @@ -777,6 +787,10 @@ impl LapceTabData { .unwrap_or(false) } + pub fn is_drag_editor(&self) -> bool { + matches!(&*self.drag, Some((_, DragContent::EditorTab(..)))) + } + pub fn panel_right_shown(&self) -> bool { self.panels .get(&PanelPosition::RightTop) @@ -1535,10 +1549,16 @@ impl LapceTabData { } fn hide_panel(&mut self, ctx: &mut EventCtx, kind: PanelKind) { - for (_, panel) in self.panels.iter_mut() { - if panel.active == kind { + for (p, panel) in self.panels.iter_mut() { + if panel.active == kind && !panel.widgets.is_empty() { let panel = Arc::make_mut(panel); panel.shown = false; + let peer = p.peer(); + if let Some(peer) = self.panels.get_mut(&peer) { + if peer.widgets.is_empty() { + Arc::make_mut(peer).shown = false; + } + } break; } } diff --git a/lapce-data/src/panel.rs b/lapce-data/src/panel.rs index 9623476c48..f281b16550 100644 --- a/lapce-data/src/panel.rs +++ b/lapce-data/src/panel.rs @@ -1,10 +1,11 @@ pub enum PanelResizePosition { Left, LeftSplit, + Right, Bottom, } -#[derive(Eq, PartialEq, Hash, Clone, Copy)] +#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug)] pub enum PanelPosition { LeftTop, LeftBottom, @@ -14,7 +15,24 @@ pub enum PanelPosition { RightBottom, } -#[derive(Eq, PartialEq, Hash, Clone, Copy)] +impl PanelPosition { + pub fn is_bottom(&self) -> bool { + matches!(self, PanelPosition::BottomLeft | PanelPosition::BottomRight) + } + + pub fn peer(&self) -> PanelPosition { + match &self { + PanelPosition::LeftTop => PanelPosition::LeftBottom, + PanelPosition::LeftBottom => PanelPosition::LeftTop, + PanelPosition::BottomLeft => PanelPosition::BottomRight, + PanelPosition::BottomRight => PanelPosition::BottomLeft, + PanelPosition::RightTop => PanelPosition::RightBottom, + PanelPosition::RightBottom => PanelPosition::RightTop, + } + } +} + +#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug)] pub enum PanelContainerPosition { Left, Bottom, diff --git a/lapce-ui/src/editor/tab.rs b/lapce-ui/src/editor/tab.rs index 5dfe47b126..4e5f06de16 100644 --- a/lapce-ui/src/editor/tab.rs +++ b/lapce-ui/src/editor/tab.rs @@ -285,6 +285,7 @@ impl LapceEditorTab { } } } + DragContent::Panel(..) => {} } } } @@ -498,7 +499,7 @@ impl Widget for LapceEditorTab { let tab = data.main_split.editor_tabs.get(&self.widget_id).unwrap(); self.children[tab.active].paint(ctx, data, env); self.header.paint(ctx, data, env); - if ctx.is_hot() && data.drag.is_some() { + if ctx.is_hot() && data.is_drag_editor() { let width = size.width; let header_rect = self.header.layout_rect(); let header_height = header_rect.height(); diff --git a/lapce-ui/src/editor/tab_header_content.rs b/lapce-ui/src/editor/tab_header_content.rs index 82e10f6c16..f2b8a120a2 100644 --- a/lapce-ui/src/editor/tab_header_content.rs +++ b/lapce-ui/src/editor/tab_header_content.rs @@ -157,7 +157,7 @@ impl LapceEditorTabHeaderContent { editor_tab.widget_id, target, editor_tab.children[target].clone(), - tab_rect.clone(), + Box::new(tab_rect.clone()), ), )); } @@ -415,7 +415,7 @@ impl Widget for LapceEditorTabHeaderContent { tab_rect.paint(ctx, data, self.widget_id, i, size, self.mouse_pos); } - if ctx.is_hot() && data.drag.is_some() { + if ctx.is_hot() && data.is_drag_editor() { let mouse_index = self.drag_target_idx(self.mouse_pos); let tab_rect; diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index b0e6e80787..b3c5262caa 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -8,9 +8,12 @@ use druid::{ UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, }; use lapce_data::{ - command::{CommandKind, LapceCommand, LapceWorkbenchCommand, LAPCE_COMMAND}, + command::{ + CommandKind, LapceCommand, LapceUICommand, LapceWorkbenchCommand, + LAPCE_COMMAND, LAPCE_UI_COMMAND, + }, config::LapceTheme, - data::{LapceTabData, PanelKind}, + data::{DragContent, LapceTabData, PanelKind}, panel::{PanelContainerPosition, PanelPosition}, split::SplitDirection, }; @@ -101,7 +104,9 @@ impl LapcePanel { Option, )>, ) -> Self { - let mut split = LapceSplit::new(split_id).direction(split_direction); + let mut split = LapceSplit::new(split_id) + .direction(split_direction) + .panel(kind); match split_direction { SplitDirection::Vertical => {} SplitDirection::Horizontal => split = split.hide_border(), @@ -610,16 +615,34 @@ impl Widget for PanelMainHeader { } pub struct PanelContainer { - switcher: WidgetPod, + pub widget_id: WidgetId, + switcher0: WidgetPod, + switcher1: WidgetPod, position: PanelContainerPosition, - panels: + pub panels: HashMap>>>, } impl PanelContainer { pub fn new(position: PanelContainerPosition) -> Self { + let (switcher0, switcher1) = match position { + PanelContainerPosition::Left => ( + PanelSwitcher::new(PanelPosition::LeftTop), + PanelSwitcher::new(PanelPosition::LeftBottom), + ), + PanelContainerPosition::Right => ( + PanelSwitcher::new(PanelPosition::RightTop), + PanelSwitcher::new(PanelPosition::RightBottom), + ), + PanelContainerPosition::Bottom => ( + PanelSwitcher::new(PanelPosition::BottomLeft), + PanelSwitcher::new(PanelPosition::BottomRight), + ), + }; Self { - switcher: WidgetPod::new(PanelSwitcher::new(position)), + widget_id: WidgetId::next(), + switcher0: WidgetPod::new(switcher0), + switcher1: WidgetPod::new(switcher1), position, panels: HashMap::new(), } @@ -635,6 +658,10 @@ impl PanelContainer { } impl Widget for PanelContainer { + fn id(&self) -> Option { + Some(self.widget_id) + } + fn event( &mut self, ctx: &mut EventCtx, @@ -642,14 +669,26 @@ impl Widget for PanelContainer { data: &mut LapceTabData, env: &Env, ) { - self.switcher.event(ctx, event, data, env); + match event { + Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { + ctx.set_handled(); + let command = cmd.get_unchecked(LAPCE_UI_COMMAND); + if let LapceUICommand::ChildrenChanged = &command { + ctx.children_changed(); + } + } + _ => {} + } + + self.switcher0.event(ctx, event, data, env); + self.switcher1.event(ctx, event, data, env); if event.should_propagate_to_hidden() { for (_, panel) in self.panels.iter_mut() { panel.event(ctx, event, data, env); } } else { if let Some(panel) = data.panels.get(&self.position.first()) { - if panel.shown { + if panel.shown && !panel.widgets.is_empty() { self.panels .get_mut(&panel.active) .unwrap() @@ -657,7 +696,7 @@ impl Widget for PanelContainer { } } if let Some(panel) = data.panels.get(&self.position.second()) { - if panel.shown { + if panel.shown && !panel.widgets.is_empty() { self.panels .get_mut(&panel.active) .unwrap() @@ -674,7 +713,8 @@ impl Widget for PanelContainer { data: &LapceTabData, env: &Env, ) { - self.switcher.lifecycle(ctx, event, data, env); + self.switcher0.lifecycle(ctx, event, data, env); + self.switcher1.lifecycle(ctx, event, data, env); for (_, panel) in self.panels.iter_mut() { panel.lifecycle(ctx, event, data, env); } @@ -687,21 +727,20 @@ impl Widget for PanelContainer { data: &LapceTabData, env: &Env, ) { - self.switcher.update(ctx, data, env); + self.switcher0.update(ctx, data, env); + self.switcher1.update(ctx, data, env); if let Some(panel) = data.panels.get(&self.position.first()) { if panel.shown { - self.panels - .get_mut(&panel.active) - .unwrap() - .update(ctx, data, env); + if let Some(panel) = self.panels.get_mut(&panel.active) { + panel.update(ctx, data, env); + } } } if let Some(panel) = data.panels.get(&self.position.second()) { if panel.shown { - self.panels - .get_mut(&panel.active) - .unwrap() - .update(ctx, data, env); + if let Some(panel) = self.panels.get_mut(&panel.active) { + panel.update(ctx, data, env); + } } } } @@ -716,18 +755,79 @@ impl Widget for PanelContainer { let self_size = bc.max(); let is_bottom = self.position.is_bottom(); - let switcher_size = self.switcher.layout(ctx, bc, data, env); - self.switcher.set_origin(ctx, data, env, Point::ZERO); + let (should_shown0, should_shown1) = match self.position { + PanelContainerPosition::Left => ( + data.panels + .get(&PanelPosition::LeftTop) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + data.panels + .get(&PanelPosition::LeftBottom) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + ), + PanelContainerPosition::Right => ( + data.panels + .get(&PanelPosition::RightTop) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + data.panels + .get(&PanelPosition::RightBottom) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + ), + PanelContainerPosition::Bottom => ( + data.panels + .get(&PanelPosition::BottomLeft) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + data.panels + .get(&PanelPosition::BottomRight) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false), + ), + }; + + let switcher0_size = if should_shown0 { + data.config.ui.header_height() as f64 + } else { + 0.0 + }; + let switcher1_size = if should_shown1 { + data.config.ui.header_height() as f64 + } else { + 0.0 + }; + + self.switcher0.layout(ctx, bc, data, env); + self.switcher0.set_origin(ctx, data, env, Point::ZERO); + + self.switcher1.layout(ctx, bc, data, env); + if self.position.is_bottom() { + self.switcher1.set_origin( + ctx, + data, + env, + Point::new(self_size.width - switcher1_size, 0.0), + ); + } else { + self.switcher1.set_origin( + ctx, + data, + env, + Point::new(0.0, self_size.height - switcher1_size), + ); + } let panel_first = data.panels.get(&self.position.first()).and_then(|p| { - if p.shown { + if p.shown && !p.widgets.is_empty() { Some(&p.active) } else { None } }); let panel_second = data.panels.get(&self.position.second()).and_then(|p| { - if p.shown { + if p.shown && !p.widgets.is_empty() { Some(&p.active) } else { None @@ -741,11 +841,19 @@ impl Widget for PanelContainer { PanelContainerPosition::Bottom => data.panel_size.bottom_split, PanelContainerPosition::Right => data.panel_size.right_split, }; + let separator = 4.0; if is_bottom { - let size_fist = - ((self_size.width - switcher_size.width) * split).round(); - let size_second = - self_size.width - switcher_size.width - size_fist; + let size_fist = ((self_size.width + - switcher0_size + - switcher1_size + - separator) + * split) + .round(); + let size_second = self_size.width + - separator + - switcher0_size + - switcher1_size + - size_fist; let panel_first = self.panels.get_mut(panel_first).unwrap(); panel_first.layout( ctx, @@ -760,7 +868,7 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(switcher_size.width, 0.0), + Point::new(switcher0_size, 0.0), ); let panel_second = self.panels.get_mut(panel_second).unwrap(); panel_second.layout( @@ -776,13 +884,20 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(size_fist + switcher_size.width, 0.0), + Point::new(size_fist + switcher0_size + separator, 0.0), ); } else { - let size_fist = - ((self_size.height - switcher_size.height) * split).round(); - let size_second = - self_size.height - switcher_size.height - size_fist; + let size_fist = ((self_size.height + - switcher0_size + - switcher1_size + - separator) + * split) + .round(); + let size_second = self_size.height + - separator + - switcher0_size + - switcher1_size + - size_fist; let panel_first = self.panels.get_mut(panel_first).unwrap(); panel_first.layout( ctx, @@ -797,7 +912,7 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(0.0, switcher_size.height), + Point::new(0.0, switcher0_size), ); let panel_second = self.panels.get_mut(panel_second).unwrap(); @@ -814,7 +929,7 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(0.0, size_fist + switcher_size.height), + Point::new(0.0, size_fist + switcher0_size + separator), ); } } @@ -824,7 +939,7 @@ impl Widget for PanelContainer { panel.layout( ctx, &BoxConstraints::tight(Size::new( - self_size.width - switcher_size.width, + self_size.width - switcher0_size - switcher1_size, self_size.height, )), data, @@ -834,14 +949,14 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(switcher_size.width, 0.0), + Point::new(switcher0_size, 0.0), ); } else { panel.layout( ctx, &BoxConstraints::tight(Size::new( self_size.width, - self_size.height - switcher_size.height, + self_size.height - switcher0_size - switcher1_size, )), data, env, @@ -850,7 +965,7 @@ impl Widget for PanelContainer { ctx, data, env, - Point::new(0.0, switcher_size.height), + Point::new(0.0, switcher0_size), ); } } @@ -939,28 +1054,78 @@ impl Widget for PanelContainer { } if let Some(panel) = data.panels.get(&self.position.first()) { - if panel.shown { - self.panels - .get_mut(&panel.active) - .unwrap() - .paint(ctx, data, env); + if panel.shown && !panel.widgets.is_empty() { + let panel = self.panels.get_mut(&panel.active).unwrap(); + panel.paint(ctx, data, env); } } if let Some(panel) = data.panels.get(&self.position.second()) { - if panel.shown { - self.panels - .get_mut(&panel.active) - .unwrap() - .paint(ctx, data, env); + if panel.shown && !panel.widgets.is_empty() { + let panel = self.panels.get_mut(&panel.active).unwrap(); + panel.paint(ctx, data, env); + } + } + + let is_bottom = self.position.is_bottom(); + if let Some(panel0) = data.panels.get(&self.position.first()) { + if panel0.shown && !panel0.widgets.is_empty() { + if let Some(panel1) = data.panels.get(&self.position.second()) { + if panel1.shown && !panel1.widgets.is_empty() { + let panel0 = self.panels.get_mut(&panel0.active).unwrap(); + let panel0_rect = panel0.layout_rect(); + let panel1 = self.panels.get_mut(&panel1.active).unwrap(); + let panel1_rect = panel1.layout_rect(); + if is_bottom { + ctx.stroke( + Line::new( + Point::new(panel0_rect.x1 + 0.5, panel0_rect.y0), + Point::new(panel0_rect.x1 + 0.5, panel0_rect.y1), + ), + data.config + .get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + ctx.stroke( + Line::new( + Point::new(panel1_rect.x0 - 0.5, panel1_rect.y0), + Point::new(panel1_rect.x0 - 0.5, panel1_rect.y1), + ), + data.config + .get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } else { + ctx.stroke( + Line::new( + Point::new(panel0_rect.x0, panel0_rect.y1 + 0.5), + Point::new(panel0_rect.x1, panel0_rect.y1 + 0.5), + ), + data.config + .get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + ctx.stroke( + Line::new( + Point::new(panel1_rect.x0, panel1_rect.y0 - 0.5), + Point::new(panel1_rect.x1, panel1_rect.y0 - 0.5), + ), + data.config + .get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + } } } - self.switcher.paint(ctx, data, env); + self.switcher0.paint(ctx, data, env); + self.switcher1.paint(ctx, data, env); } } pub struct PanelSwitcher { - position: PanelContainerPosition, + position: PanelPosition, icons: Vec<(PanelKind, LapceIcon)>, mouse_pos: Point, on_icon: bool, @@ -968,7 +1133,7 @@ pub struct PanelSwitcher { } impl PanelSwitcher { - pub fn new(position: PanelContainerPosition) -> Self { + pub fn new(position: PanelPosition) -> Self { Self { position, icons: Vec::new(), @@ -986,12 +1151,7 @@ impl PanelSwitcher { fn update_icons(&mut self, self_size: Size, data: &LapceTabData) { let mut icons = Vec::new(); - if let Some(panel) = data.panels.get(&self.position.first()) { - for kind in panel.widgets.iter() { - icons.push(Self::panel_icon(kind, data)); - } - } - if let Some(panel) = data.panels.get(&self.position.second()) { + if let Some(panel) = data.panels.get(&self.position) { for kind in panel.widgets.iter() { icons.push(Self::panel_icon(kind, data)); } @@ -1061,6 +1221,16 @@ impl Widget for PanelSwitcher { ) { match event { Event::MouseMove(mouse_event) => { + if ctx.is_active() { + if let Some(i) = self.clicked_icon { + ctx.set_active(false); + let (kind, icon) = &self.icons[i]; + let offset = + mouse_event.pos.to_vec2() - icon.rect.origin().to_vec2(); + *Arc::make_mut(&mut data.drag) = + Some((offset, DragContent::Panel(*kind, icon.rect))); + } + } self.mouse_pos = mouse_event.pos; let icon_padding = Self::icon_padding(data); for (_, icon) in self.icons.iter() { @@ -1086,11 +1256,13 @@ impl Widget for PanelSwitcher { let rect = icon.rect.inflate(icon_padding, icon_padding); if rect.contains(mouse_event.pos) { self.clicked_icon = Some(i); + ctx.set_active(true); break; } } } Event::MouseUp(mouse_event) => { + ctx.set_active(false); let icon_padding = Self::icon_padding(data); for (i, (_, icon)) in self.icons.iter().enumerate() { let rect = icon.rect.inflate(icon_padding, icon_padding); @@ -1141,58 +1313,119 @@ impl Widget for PanelSwitcher { } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { + let should_show = data + .panels + .get(&self.position) + .map(|p| !p.widgets.is_empty()) + .unwrap_or(false); + if !should_show { + return; + } + let rect = ctx.size().to_rect(); let shadow_width = data.config.ui.drop_shadow_width() as f64; - if self.position.is_bottom() { - if shadow_width > 0.0 { - ctx.with_save(|ctx| { - ctx.clip(rect.inset((0.0, 0.0, 50.0, 0.0))); - ctx.blurred_rect( - rect, - shadow_width, - data.config - .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), + match self.position { + PanelPosition::LeftTop | PanelPosition::RightTop => { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config.get_color_unchecked( + LapceTheme::LAPCE_DROPDOWN_SHADOW, + ), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0, rect.y1 + 0.5), + Point::new(rect.x1, rect.y1 + 0.5), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, ); - }); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x1 + 0.5, rect.y0), - Point::new(rect.x1 + 0.5, rect.y1), - ), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); + } + } + PanelPosition::LeftBottom | PanelPosition::RightBottom => { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 50.0, 0.0, 0.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config.get_color_unchecked( + LapceTheme::LAPCE_DROPDOWN_SHADOW, + ), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0, rect.y0 - 0.5), + Point::new(rect.x1, rect.y0 - 0.5), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + PanelPosition::BottomLeft => { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((0.0, 0.0, 50.0, 0.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config.get_color_unchecked( + LapceTheme::LAPCE_DROPDOWN_SHADOW, + ), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x1 + 0.5, rect.y0), + Point::new(rect.x1 + 0.5, rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + } + PanelPosition::BottomRight => { + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + ctx.clip(rect.inset((50.0, 0.0, 0.0, 0.0))); + ctx.blurred_rect( + rect, + shadow_width, + data.config.get_color_unchecked( + LapceTheme::LAPCE_DROPDOWN_SHADOW, + ), + ); + }); + } else { + ctx.stroke( + Line::new( + Point::new(rect.x0 - 0.5, rect.y0), + Point::new(rect.x0 - 0.5, rect.y1), + ), + data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } } - } else if shadow_width > 0.0 { - ctx.with_save(|ctx| { - ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); - ctx.blurred_rect( - rect, - shadow_width, - data.config - .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), - ); - }); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x0, rect.y1 + 0.5), - Point::new(rect.x1, rect.y1 + 0.5), - ), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); } let icon_padding = Self::icon_padding(data); let is_bottom = self.position.is_bottom(); let mut active_kinds = Vec::new(); - if let Some(panel) = data.panels.get(&self.position.first()) { - active_kinds.push(panel.active); - } - if let Some(panel) = data.panels.get(&self.position.second()) { - active_kinds.push(panel.active); + if let Some(panel) = data.panels.get(&self.position) { + if panel.shown { + active_kinds.push(panel.active); + } } for (kind, icon) in self.icons.iter() { let mouse_rect = icon.rect.inflate(icon_padding, icon_padding); @@ -1208,24 +1441,51 @@ impl Widget for PanelSwitcher { ); } if active_kinds.contains(kind) { - if is_bottom { - ctx.stroke( - Line::new( - Point::new(mouse_rect.x1 + 1.0, mouse_rect.y0), - Point::new(mouse_rect.x1 + 1.0, mouse_rect.y1), - ), - data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), - 2.0, - ); - } else { - ctx.stroke( - Line::new( - Point::new(mouse_rect.x0, mouse_rect.y1 + 1.0), - Point::new(mouse_rect.x1, mouse_rect.y1 + 1.0), - ), - data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), - 2.0, - ); + match self.position { + PanelPosition::LeftTop | PanelPosition::RightTop => { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x0, mouse_rect.y1 + 1.0), + Point::new(mouse_rect.x1, mouse_rect.y1 + 1.0), + ), + data.config + .get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } + PanelPosition::LeftBottom | PanelPosition::RightBottom => { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x0, mouse_rect.y0 - 1.0), + Point::new(mouse_rect.x1, mouse_rect.y0 - 1.0), + ), + data.config + .get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } + PanelPosition::BottomLeft => { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x1 + 1.0, mouse_rect.y0), + Point::new(mouse_rect.x1 + 1.0, mouse_rect.y1), + ), + data.config + .get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } + PanelPosition::BottomRight => { + ctx.stroke( + Line::new( + Point::new(mouse_rect.x0 - 1.0, mouse_rect.y0), + Point::new(mouse_rect.x0 - 1.0, mouse_rect.y1), + ), + data.config + .get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); + } } } let svg = get_svg(icon.icon).unwrap(); diff --git a/lapce-ui/src/split.rs b/lapce-ui/src/split.rs index 6cccf9f18f..96aae3892a 100644 --- a/lapce-ui/src/split.rs +++ b/lapce-ui/src/split.rs @@ -195,6 +195,7 @@ pub struct LapceSplit { direction: SplitDirection, show_border: bool, commands: Vec<(LapceCommand, PietTextLayout, Rect, Option)>, + panel: Option, } struct ChildWidget { @@ -213,6 +214,7 @@ impl LapceSplit { direction: SplitDirection::Vertical, show_border: true, commands: vec![], + panel: None, } } @@ -221,6 +223,14 @@ impl LapceSplit { self } + /// Set the panel kind on the split, so that split can + /// determine the split direction based on the postion + /// of the panel + pub fn panel(mut self, panel: PanelKind) -> Self { + self.panel = Some(panel); + self + } + pub fn horizontal(mut self) -> Self { self.direction = SplitDirection::Horizontal; self @@ -971,6 +981,15 @@ impl Widget for LapceSplit { env: &Env, ) -> Size { let my_size = bc.max(); + if let Some(panel) = self.panel { + if let Some(pos) = data.panel_position(panel) { + if pos.is_bottom() { + self.direction = SplitDirection::Vertical; + } else { + self.direction = SplitDirection::Horizontal; + } + } + } let split_data = data.main_split.splits.get(&self.split_id); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index e24c9b2557..1c94026cc2 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, path::PathBuf, sync::Arc}; +use std::{collections::HashMap, ops::Index, path::PathBuf, sync::Arc}; use druid::{ kurbo::Line, @@ -23,7 +23,7 @@ use lapce_data::{ config::{Config, LapceTheme}, data::{ DragContent, EditorDiagnostic, FocusArea, LapceData, LapceTabData, - LapceWorkspace, LapceWorkspaceType, PanelKind, WorkProgress, + LapceWorkspace, LapceWorkspaceType, PanelData, PanelKind, WorkProgress, }, document::{BufferContent, LocalBufferKind}, editor::EditorLocation, @@ -31,7 +31,7 @@ use lapce_data::{ keypress::{DefaultKeyPressHandler, KeyPressData}, menu::MenuKind, palette::PaletteStatus, - panel::{PanelContainerPosition, PanelResizePosition}, + panel::{PanelContainerPosition, PanelPosition, PanelResizePosition}, proxy::path_from_url, }; use lsp_types::DiagnosticSeverity; @@ -69,10 +69,11 @@ pub struct LapceTab { picker: WidgetPod>>, settings: WidgetPod>>, alert: WidgetPod>>, - panel_left: WidgetPod>>, - panel_bottom: WidgetPod>>, - panel_right: WidgetPod>>, + panel_left: WidgetPod, + panel_bottom: WidgetPod, + panel_right: WidgetPod, current_bar_hover: Option, + width: f64, height: f64, main_split_height: f64, status_height: f64, @@ -137,10 +138,11 @@ impl LapceTab { status: WidgetPod::new(status.boxed()), settings: WidgetPod::new(settings.boxed()), alert: WidgetPod::new(alert.boxed()), - panel_left: WidgetPod::new(panel_left.boxed()), - panel_right: WidgetPod::new(panel_right.boxed()), - panel_bottom: WidgetPod::new(panel_bottom.boxed()), + panel_left: WidgetPod::new(panel_left), + panel_right: WidgetPod::new(panel_right), + panel_bottom: WidgetPod::new(panel_bottom), current_bar_hover: None, + width: 0.0, height: 0.0, main_split_height: 0.0, status_height: 0.0, @@ -157,7 +159,9 @@ impl LapceTab { if let Some(position) = self.current_bar_hover.as_ref() { match position { PanelResizePosition::Left => { - data.panel_size.left = mouse_pos.x.round().max(180.0); + let maximum = self.width - 100.0 - data.panel_size.right; + data.panel_size.left = + mouse_pos.x.round().max(180.0).min(maximum); if mouse_pos.x < 90.0 { if data.panel_left_shown() { ctx.submit_command(Command::new( @@ -184,6 +188,36 @@ impl LapceTab { )); } } + PanelResizePosition::Right => { + let maximum = self.width - 100.0 - data.panel_size.left; + let right = self.width - mouse_pos.x.round(); + data.panel_size.right = right.max(180.0).min(maximum); + if right < 90.0 { + if data.panel_right_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelRightVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } else if !data.panel_right_shown() { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::TogglePanelRightVisual, + ), + data: None, + }, + Target::Widget(data.id), + )); + } + } PanelResizePosition::LeftSplit => (), PanelResizePosition::Bottom => { let bottom = @@ -234,9 +268,22 @@ impl LapceTab { 0.0 }; + let right = if data.panel_right_shown() { + let right = self.panel_right.layout_rect().x0; + if mouse_pos.x >= right - 3.0 && mouse_pos.x <= right + 3.0 { + return Some(PanelResizePosition::Right); + } + right + } else { + 0.0 + }; + if data.panel_bottom_shown() { let y = self.main_split_height; - if mouse_pos.x > left && mouse_pos.y >= y - 3.0 && mouse_pos.y <= y + 3.0 + if mouse_pos.x > left + && mouse_pos.x < right + && mouse_pos.y >= y - 3.0 + && mouse_pos.y <= y + 3.0 { return Some(PanelResizePosition::Bottom); } @@ -245,6 +292,176 @@ impl LapceTab { None } + fn panel_rects(&self) -> Vec<(PanelPosition, Rect)> { + let mut rects = Vec::new(); + + let left_rect = self.panel_left.layout_rect(); + let left_size = left_rect.size(); + let new_size = Size::new(left_size.width, (left_size.height / 2.0).round()); + rects.push((PanelPosition::LeftTop, left_rect.with_size(new_size))); + rects.push(( + PanelPosition::LeftBottom, + left_rect.with_size(new_size).with_origin(Point::new( + left_rect.x0, + left_rect.y0 + new_size.height, + )), + )); + + let right_rect = self.panel_right.layout_rect(); + let right_size = right_rect.size(); + let new_size = + Size::new(right_size.width, (right_size.height / 2.0).round()); + rects.push((PanelPosition::RightTop, right_rect.with_size(new_size))); + rects.push(( + PanelPosition::RightBottom, + right_rect.with_size(new_size).with_origin(Point::new( + right_rect.x0, + right_rect.y0 + new_size.height, + )), + )); + + let bottom_rect = self.panel_bottom.layout_rect(); + let bottom_size = bottom_rect.size(); + let new_size = + Size::new((bottom_size.width / 2.0).round(), bottom_size.height); + rects.push((PanelPosition::BottomLeft, bottom_rect.with_size(new_size))); + rects.push(( + PanelPosition::BottomRight, + bottom_rect.with_size(new_size).with_origin(Point::new( + bottom_rect.x0 + new_size.width, + bottom_rect.y0, + )), + )); + + rects + } + + fn handle_panel_drop(&mut self, ctx: &mut EventCtx, data: &mut LapceTabData) { + if let Some((_, DragContent::Panel(kind, _))) = data.drag.as_ref() { + let rects = self.panel_rects(); + for (p, rect) in rects.iter() { + if rect.contains(self.mouse_pos) { + let from_position = data.panel_position(*kind).unwrap(); + if &from_position == p { + return; + } + + let panel_data = + Arc::make_mut(data.panels.get_mut(&from_position).unwrap()); + let mut index = panel_data + .widgets + .iter() + .position(|w| w == kind) + .unwrap_or(0); + panel_data.widgets.retain(|w| w != kind); + if !panel_data.widgets.is_empty() { + if index > panel_data.widgets.len() - 1 { + index -= 1; + } + panel_data.active = panel_data.widgets[index]; + } + + if !data.panels.contains_key(p) { + data.panels.insert( + *p, + Arc::new(PanelData { + active: *kind, + widgets: Vec::new(), + shown: false, + maximized: false, + }), + ); + } + let panel_data = Arc::make_mut(data.panels.get_mut(p).unwrap()); + panel_data.widgets.push(*kind); + panel_data.active = *kind; + panel_data.shown = true; + + let (panel_widget_id, panel) = match from_position { + PanelPosition::LeftTop | PanelPosition::LeftBottom => ( + self.panel_left.widget().widget_id, + self.panel_left + .widget_mut() + .panels + .remove(kind) + .unwrap(), + ), + PanelPosition::RightTop | PanelPosition::RightBottom => ( + self.panel_right.widget().widget_id, + self.panel_right + .widget_mut() + .panels + .remove(kind) + .unwrap(), + ), + PanelPosition::BottomLeft | PanelPosition::BottomRight => ( + self.panel_bottom.widget().widget_id, + self.panel_bottom + .widget_mut() + .panels + .remove(kind) + .unwrap(), + ), + }; + + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ChildrenChanged, + Target::Widget(panel_widget_id), + )); + + let new_panel_widget_id = match p { + PanelPosition::LeftTop | PanelPosition::LeftBottom => { + self.panel_left.widget_mut().panels.insert(*kind, panel); + self.panel_left.widget().widget_id + } + PanelPosition::RightTop | PanelPosition::RightBottom => { + self.panel_right + .widget_mut() + .panels + .insert(*kind, panel); + self.panel_right.widget().widget_id + } + PanelPosition::BottomLeft | PanelPosition::BottomRight => { + self.panel_bottom + .widget_mut() + .panels + .insert(*kind, panel); + self.panel_bottom.widget().widget_id + } + }; + + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ChildrenChanged, + Target::Widget(new_panel_widget_id), + )); + + return; + } + } + } + } + + fn paint_drag_on_panel(&self, ctx: &mut PaintCtx, data: &LapceTabData) { + if let Some((_, DragContent::Panel(_, _))) = data.drag.as_ref() { + let rects = self.panel_rects(); + for (_, rect) in rects.iter() { + if rect.contains(self.mouse_pos) { + ctx.fill( + rect, + &data + .config + .get_color_unchecked(LapceTheme::EDITOR_CURRENT_LINE) + .clone() + .with_alpha(0.8), + ); + break; + } + } + } + } + fn paint_drag(&self, ctx: &mut PaintCtx, data: &LapceTabData) { if let Some((offset, drag_content)) = data.drag.as_ref() { match drag_content { @@ -293,6 +510,44 @@ impl LapceTab { ), ); } + DragContent::Panel(kind, rect) => { + let icon_rect = rect.with_origin(self.mouse_pos - *offset); + let padding = 5.0; + let rect = icon_rect.inflate(padding, padding); + let shadow_width = data.config.ui.drop_shadow_width() as f64; + if shadow_width > 0.0 { + ctx.blurred_rect( + rect, + shadow_width, + data.config.get_color_unchecked( + LapceTheme::LAPCE_DROPDOWN_SHADOW, + ), + ); + } else { + ctx.stroke( + rect.inflate(0.5, 0.5), + data.config + .get_color_unchecked(LapceTheme::LAPCE_BORDER), + 1.0, + ); + } + ctx.fill( + rect, + &data + .config + .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND) + .clone(), + ); + let svg = get_svg(kind.svg_name()).unwrap(); + ctx.draw_svg( + &svg, + icon_rect, + Some( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), + ), + ); + } } } } @@ -332,6 +587,9 @@ impl LapceTab { PanelResizePosition::Left => { ctx.set_cursor(&druid::Cursor::ResizeLeftRight); } + PanelResizePosition::Right => { + ctx.set_cursor(&druid::Cursor::ResizeLeftRight); + } PanelResizePosition::LeftSplit => { ctx.set_cursor(&druid::Cursor::ResizeUpDown); } @@ -1342,9 +1600,15 @@ impl Widget for LapceTab { match event { Event::MouseUp(_) => { if data.drag.is_some() { + self.handle_panel_drop(ctx, data); *Arc::make_mut(&mut data.drag) = None; } } + Event::MouseMove(_) => { + if data.drag.is_some() { + ctx.request_paint(); + } + } Event::KeyDown(key_event) if !ctx.is_handled() => { let mut keypress = data.keypress.clone(); let mut_keypress = Arc::make_mut(&mut keypress); @@ -1454,6 +1718,7 @@ impl Widget for LapceTab { // ctx.set_paint_insets((0.0, 10.0, 0.0, 0.0)); let self_size = bc.max(); self.height = self_size.height; + self.width = self_size.width; let status_size = self.status.layout(ctx, bc, data, env); self.status.set_origin( @@ -1464,70 +1729,70 @@ impl Widget for LapceTab { ); self.status_height = status_size.height; + let left_width = data.panel_size.left; + self.panel_left.layout( + ctx, + &BoxConstraints::tight(Size::new( + left_width, + self_size.height - status_size.height, + )), + data, + env, + ); + self.panel_left + .set_origin(ctx, data, env, Point::new(0.0, 0.0)); let panel_left_width = if data.panel_left_shown() { - let left_width = data.panel_size.left; - self.panel_left.layout( - ctx, - &BoxConstraints::tight(Size::new( - left_width, - self_size.height - status_size.height, - )), - data, - env, - ); - self.panel_left - .set_origin(ctx, data, env, Point::new(0.0, 0.0)); left_width } else { 0.0 }; + let right_width = data.panel_size.right; + self.panel_right.layout( + ctx, + &BoxConstraints::tight(Size::new( + right_width, + self_size.height - status_size.height, + )), + data, + env, + ); + self.panel_right.set_origin( + ctx, + data, + env, + Point::new(self_size.width - right_width, 0.0), + ); let panel_right_width = if data.panel_right_shown() { - let right_width = data.panel_size.right; - self.panel_right.layout( - ctx, - &BoxConstraints::tight(Size::new( - right_width, - self_size.height - status_size.height, - )), - data, - env, - ); - self.panel_right.set_origin( - ctx, - data, - env, - Point::new(self_size.width - right_width, 0.0), - ); right_width } else { 0.0 }; + let bottom_height = if data.panel_bottom_maximized() { + self_size.height - status_size.height + } else { + data.panel_size.bottom + }; + self.panel_bottom.layout( + ctx, + &BoxConstraints::tight(Size::new( + self_size.width - panel_left_width - panel_right_width, + bottom_height, + )), + data, + env, + ); + self.panel_bottom.set_origin( + ctx, + data, + env, + Point::new( + panel_left_width, + self_size.height - status_size.height - bottom_height, + ), + ); let panel_bottom_height = if data.panel_bottom_shown() { - let bottom_height = if data.panel_bottom_maximized() { - self_size.height - status_size.height - } else { - data.panel_size.bottom - }; - self.panel_bottom.layout( - ctx, - &BoxConstraints::tight(Size::new( - self_size.width - panel_left_width - panel_right_width, - bottom_height, - )), - data, - env, - ); - self.panel_bottom.set_origin( - ctx, - data, - env, - Point::new( - panel_left_width, - self_size.height - status_size.height - bottom_height, - ), - ); bottom_height } else { 0.0 @@ -1619,6 +1884,20 @@ impl Widget for LapceTab { ) } } + PanelResizePosition::Right => { + let rect = self.panel_right.layout_rect(); + if !data.panel_right_shown() { + ( + Point::new(rect.x1 - 1.0, rect.y0), + Point::new(rect.x1 - 1.0, rect.y1), + ) + } else { + ( + Point::new(rect.x0.round(), rect.y0), + Point::new(rect.x0.round(), rect.y1), + ) + } + } PanelResizePosition::LeftSplit => { let rect = self.panel_left.layout_rect(); ( @@ -1655,6 +1934,7 @@ impl Widget for LapceTab { self.palette.paint(ctx, data, env); self.picker.paint(ctx, data, env); self.settings.paint(ctx, data, env); + self.paint_drag_on_panel(ctx, data); self.paint_drag(ctx, data); self.alert.paint(ctx, data, env); } From b3c00bb2c3e5f11117c31ddeb54465de9c58c9fa Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 19:25:17 +0100 Subject: [PATCH 037/816] no need to set split direction --- lapce-ui/src/explorer.rs | 2 -- lapce-ui/src/panel.rs | 10 +--------- lapce-ui/src/plugin.rs | 2 -- lapce-ui/src/problem.rs | 2 -- lapce-ui/src/search.rs | 2 -- lapce-ui/src/source_control.rs | 1 - lapce-ui/src/tab.rs | 2 +- lapce-ui/src/terminal.rs | 2 -- 8 files changed, 2 insertions(+), 21 deletions(-) diff --git a/lapce-ui/src/explorer.rs b/lapce-ui/src/explorer.rs index 6280deeced..2c82ef2052 100644 --- a/lapce-ui/src/explorer.rs +++ b/lapce-ui/src/explorer.rs @@ -18,7 +18,6 @@ use lapce_data::{ command::LAPCE_UI_COMMAND, config::{Config, LapceTheme}, data::LapceTabData, - split::SplitDirection, }; use lapce_data::{data::PanelKind, explorer::FileExplorerData}; use lapce_rpc::file::FileNodeItem; @@ -327,7 +326,6 @@ impl FileExplorer { PanelKind::FileExplorer, data.file_explorer.widget_id, split_id, - SplitDirection::Vertical, PanelHeaderKind::Simple("File Explorer".into()), vec![( split_id, diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index b3c5262caa..01e9576fb6 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -15,7 +15,6 @@ use lapce_data::{ config::LapceTheme, data::{DragContent, LapceTabData, PanelKind}, panel::{PanelContainerPosition, PanelPosition}, - split::SplitDirection, }; use serde_json::json; @@ -95,7 +94,6 @@ impl LapcePanel { kind: PanelKind, widget_id: WidgetId, split_id: WidgetId, - split_direction: SplitDirection, header: PanelHeaderKind, sections: Vec<( WidgetId, @@ -104,13 +102,7 @@ impl LapcePanel { Option, )>, ) -> Self { - let mut split = LapceSplit::new(split_id) - .direction(split_direction) - .panel(kind); - match split_direction { - SplitDirection::Vertical => {} - SplitDirection::Horizontal => split = split.hide_border(), - }; + let mut split = LapceSplit::new(split_id).panel(kind); for (section_widget_id, header, content, size) in sections { let header = match header { PanelHeaderKind::None => None, diff --git a/lapce-ui/src/plugin.rs b/lapce-ui/src/plugin.rs index f8f647ce17..2838b00d01 100644 --- a/lapce-ui/src/plugin.rs +++ b/lapce-ui/src/plugin.rs @@ -7,7 +7,6 @@ use druid::{ use lapce_data::{ config::LapceTheme, data::{LapceTabData, PanelKind}, - split::SplitDirection, }; use lapce_rpc::plugin::PluginDescription; use strum_macros::Display; @@ -36,7 +35,6 @@ impl Plugin { PanelKind::Plugin, data.plugin.widget_id, split_id, - SplitDirection::Vertical, PanelHeaderKind::Simple("Plugin".into()), vec![(split_id, PanelHeaderKind::None, Self::new().boxed(), None)], ) diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index 4d59b5e0b0..d5a6282624 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -14,7 +14,6 @@ use lapce_data::{ editor::EditorLocation, problem::ProblemData, proxy::path_from_url, - split::SplitDirection, }; use lsp_types::DiagnosticSeverity; @@ -28,7 +27,6 @@ pub fn new_problem_panel(data: &ProblemData) -> LapcePanel { PanelKind::Problem, data.widget_id, data.split_id, - SplitDirection::Vertical, PanelHeaderKind::Simple("Problem".into()), vec![ ( diff --git a/lapce-ui/src/search.rs b/lapce-ui/src/search.rs index 3ddb27b596..2eb1ede797 100644 --- a/lapce-ui/src/search.rs +++ b/lapce-ui/src/search.rs @@ -9,7 +9,6 @@ use lapce_data::{ config::LapceTheme, data::{LapceTabData, PanelKind}, editor::EditorLocation, - split::SplitDirection, }; use crate::{ @@ -45,7 +44,6 @@ pub fn new_search_panel(data: &LapceTabData) -> LapcePanel { PanelKind::Search, data.search.widget_id, data.search.split_id, - SplitDirection::Vertical, PanelHeaderKind::Simple("Search".into()), vec![( data.search.split_id, diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index e5d9fd06f8..50cc68585e 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -60,7 +60,6 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel { PanelKind::SourceControl, data.source_control.widget_id, data.source_control.split_id, - data.source_control.split_direction, PanelHeaderKind::Simple("Source Control".into()), vec![ ( diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 1c94026cc2..c7b41c1c33 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, ops::Index, path::PathBuf, sync::Arc}; +use std::{collections::HashMap, path::PathBuf, sync::Arc}; use druid::{ kurbo::Line, diff --git a/lapce-ui/src/terminal.rs b/lapce-ui/src/terminal.rs index 3c64e29afd..b131416068 100644 --- a/lapce-ui/src/terminal.rs +++ b/lapce-ui/src/terminal.rs @@ -16,7 +16,6 @@ use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::LapceTheme, data::{FocusArea, LapceTabData, PanelKind}, - split::SplitDirection, terminal::{LapceTerminalData, LapceTerminalViewData}, }; use lapce_rpc::terminal::TermId; @@ -54,7 +53,6 @@ impl TerminalPanel { PanelKind::Terminal, data.terminal.widget_id, split_id, - SplitDirection::Vertical, PanelHeaderKind::Simple("Terminal".into()), vec![( split_id, From 37b282c996dd1cd3bc4bf46bfe62983e6df1d9f0 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 19:46:39 +0100 Subject: [PATCH 038/816] remove panel main header --- lapce-ui/src/explorer.rs | 1 - lapce-ui/src/panel.rs | 298 +++------------------------------ lapce-ui/src/plugin.rs | 1 - lapce-ui/src/problem.rs | 1 - lapce-ui/src/search.rs | 1 - lapce-ui/src/source_control.rs | 1 - lapce-ui/src/split.rs | 9 + lapce-ui/src/terminal.rs | 1 - 8 files changed, 30 insertions(+), 283 deletions(-) diff --git a/lapce-ui/src/explorer.rs b/lapce-ui/src/explorer.rs index 2c82ef2052..24143deca7 100644 --- a/lapce-ui/src/explorer.rs +++ b/lapce-ui/src/explorer.rs @@ -326,7 +326,6 @@ impl FileExplorer { PanelKind::FileExplorer, data.file_explorer.widget_id, split_id, - PanelHeaderKind::Simple("File Explorer".into()), vec![( split_id, PanelHeaderKind::None, diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 01e9576fb6..0704288db0 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -4,8 +4,8 @@ use druid::{ kurbo::Line, piet::{Text, TextLayout, TextLayoutBuilder, TextStorage}, BoxConstraints, Command, Cursor, Env, Event, EventCtx, LayoutCtx, LifeCycle, - LifeCycleCtx, MouseEvent, PaintCtx, Point, Rect, RenderContext, Size, Target, - UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, + LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, Target, UpdateCtx, + Widget, WidgetExt, WidgetId, WidgetPod, }; use lapce_data::{ command::{ @@ -16,12 +16,10 @@ use lapce_data::{ data::{DragContent, LapceTabData, PanelKind}, panel::{PanelContainerPosition, PanelPosition}, }; -use serde_json::json; use crate::{scroll::LapceScroll, split::LapceSplit, svg::get_svg, tab::LapceIcon}; pub struct LapcePanel { - header: WidgetPod>>, split: WidgetPod, } @@ -33,7 +31,6 @@ impl Widget for LapcePanel { data: &mut LapceTabData, env: &Env, ) { - self.header.event(ctx, event, data, env); self.split.event(ctx, event, data, env); } @@ -44,7 +41,6 @@ impl Widget for LapcePanel { data: &LapceTabData, env: &Env, ) { - self.header.lifecycle(ctx, event, data, env); self.split.lifecycle(ctx, event, data, env); } @@ -55,7 +51,6 @@ impl Widget for LapcePanel { data: &LapceTabData, env: &Env, ) { - self.header.update(ctx, data, env); self.split.update(ctx, data, env); } @@ -68,23 +63,14 @@ impl Widget for LapcePanel { ) -> Size { let self_size = bc.max(); - let header_size = self.header.layout(ctx, bc, data, env); - self.header.set_origin(ctx, data, env, Point::ZERO); - - let bc = BoxConstraints::tight(Size::new( - self_size.width, - self_size.height - header_size.height, - )); - self.split.layout(ctx, &bc, data, env); - self.split - .set_origin(ctx, data, env, Point::new(0.0, header_size.height)); + self.split.layout(ctx, bc, data, env); + self.split.set_origin(ctx, data, env, Point::ZERO); self_size } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { self.split.paint(ctx, data, env); - self.header.paint(ctx, data, env); } } @@ -92,9 +78,8 @@ impl LapcePanel { #[allow(clippy::type_complexity)] pub fn new( kind: PanelKind, - widget_id: WidgetId, + _widget_id: WidgetId, split_id: WidgetId, - header: PanelHeaderKind, sections: Vec<( WidgetId, PanelHeaderKind, @@ -120,18 +105,8 @@ impl LapcePanel { split = split.with_flex_child(section, Some(section_widget_id), 1.0); } } - let header = match header { - PanelHeaderKind::None => { - PanelMainHeader::new(widget_id, kind, "".into()).boxed() - } - PanelHeaderKind::Simple(s) => { - PanelMainHeader::new(widget_id, kind, s).boxed() - } - PanelHeaderKind::Widget(w) => w, - }; Self { split: WidgetPod::new(split), - header: WidgetPod::new(header), } } } @@ -328,242 +303,32 @@ impl Widget for PanelSectionHeader { fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { let rect = ctx.size().to_rect(); - ctx.with_save(|ctx| { - ctx.fill( - rect, - data.config - .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), - ); - let shadow_width = data.config.ui.drop_shadow_width() as f64; - if shadow_width > 0.0 { - ctx.blurred_rect( - rect, - shadow_width, - data.config - .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), - ); - } else if let Some(position) = data.panel_position(self.kind) { - match position { - PanelPosition::BottomLeft | PanelPosition::BottomRight => { - ctx.stroke( - Line::new( - Point::new(rect.x0, rect.y0 + 0.5), - Point::new(rect.x1, rect.y0 + 0.5), - ), - data.config - .get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); - } - _ => {} - } - } - - ctx.clip(rect); - let text_layout = ctx - .text() - .new_text_layout(self.text.clone()) - .font( - data.config.ui.font_family(), - data.config.ui.font_size() as f64, - ) - .text_color( - data.config - .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) - .clone(), - ) - .build() - .unwrap(); - let height = ctx.size().height; - let y = (height - text_layout.size().height) / 2.0; - ctx.draw_text(&text_layout, Point::new(10.0, y)); - }); - } -} - -/// This struct is used as the outer container for a panel, -/// it contains the heading such as "Terminal" or "File Explorer". -pub struct PanelMainHeader { - text: ReadOnlyString, - icons: Vec, - - kind: PanelKind, - mouse_pos: Point, -} - -impl PanelMainHeader { - pub fn new( - _panel_widget_id: WidgetId, - kind: PanelKind, - text: ReadOnlyString, - ) -> Self { - Self { - kind, - text, - icons: Vec::new(), - mouse_pos: Point::ZERO, - } - } - - fn update_icons(&mut self, self_size: Size, data: &LapceTabData) { - let icon_size = 24.0; - let gap = (self_size.height - icon_size) / 2.0; - - let mut icons = Vec::new(); - let x = self_size.width - ((icons.len() + 1) as f64) * (gap + icon_size); - let icon = LapceIcon { - icon: "close.svg", - rect: Size::new(icon_size, icon_size) - .to_rect() - .with_origin(Point::new(x, gap)), - command: Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench(LapceWorkbenchCommand::HidePanel), - data: Some(json!(self.kind)), - }, - Target::Widget(data.id), - ), - }; - icons.push(icon); - - if let Some(position) = data.panel_position(self.kind) { - if position == PanelPosition::BottomLeft - || position == PanelPosition::BottomRight - { - let mut icon_svg = "chevron-up.svg"; - for (_, panel) in data.panels.iter() { - if panel.widgets.contains(&self.kind) { - if panel.maximized { - icon_svg = "chevron-down.svg"; - } - break; - } - } - - let x = - self_size.width - ((icons.len() + 1) as f64) * (gap + icon_size); - let icon = LapceIcon { - icon: icon_svg, - rect: Size::new(icon_size, icon_size) - .to_rect() - .with_origin(Point::new(x, gap)), - command: Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Workbench( - LapceWorkbenchCommand::ToggleMaximizedPanel, - ), - data: Some(json!(self.kind)), - }, - Target::Widget(data.id), - ), - }; - icons.push(icon); - } - } - - self.icons = icons; - } - - fn mouse_down(&self, ctx: &mut EventCtx, mouse_event: &MouseEvent) { - for icon in self.icons.iter() { - if icon.rect.contains(mouse_event.pos) { - ctx.submit_command(icon.command.clone()); - } - } - } - - fn icon_hit_test(&self, mouse_event: &MouseEvent) -> bool { - for icon in self.icons.iter() { - if icon.rect.contains(mouse_event.pos) { - return true; - } - } - false - } -} - -impl Widget for PanelMainHeader { - fn event( - &mut self, - ctx: &mut EventCtx, - event: &Event, - _data: &mut LapceTabData, - _env: &Env, - ) { - match event { - Event::MouseMove(mouse_event) => { - self.mouse_pos = mouse_event.pos; - if self.icon_hit_test(mouse_event) { - ctx.set_cursor(&druid::Cursor::Pointer); - ctx.request_paint(); + ctx.fill( + rect, + data.config + .get_color_unchecked(LapceTheme::EDITOR_BACKGROUND), + ); + let shadow_width = data.config.ui.drop_shadow_width() as f64; + if shadow_width > 0.0 { + ctx.with_save(|ctx| { + let pos = data.panel_position(self.kind).unwrap(); + if pos.is_bottom() { + ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); } else { - ctx.clear_cursor(); - ctx.request_paint(); + ctx.clip(rect.inset((0.0, 50.0, 0.0, 50.0))); } - } - Event::MouseDown(mouse_event) => { - self.mouse_down(ctx, mouse_event); - } - _ => {} - } - } - - fn lifecycle( - &mut self, - _ctx: &mut LifeCycleCtx, - _event: &LifeCycle, - _data: &LapceTabData, - _env: &Env, - ) { - } - fn update( - &mut self, - _ctx: &mut UpdateCtx, - _old_data: &LapceTabData, - _data: &LapceTabData, - _env: &Env, - ) { - } - - fn layout( - &mut self, - _ctx: &mut LayoutCtx, - bc: &BoxConstraints, - data: &LapceTabData, - _env: &Env, - ) -> Size { - let self_size = - Size::new(bc.max().width, data.config.ui.header_height() as f64); - self.update_icons(self_size, data); - self_size - } - - fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { - let rect = ctx.size().to_rect(); - ctx.with_save(|ctx| { - let shadow_width = data.config.ui.drop_shadow_width() as f64; - if shadow_width > 0.0 { - ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); ctx.blurred_rect( rect, shadow_width, data.config .get_color_unchecked(LapceTheme::LAPCE_DROPDOWN_SHADOW), ); - } else { - ctx.stroke( - Line::new( - Point::new(rect.x0, rect.y1 + 0.5), - Point::new(rect.x1, rect.y1 + 0.5), - ), - data.config.get_color_unchecked(LapceTheme::LAPCE_BORDER), - 1.0, - ); - } + }); + } + ctx.with_save(|ctx| { + ctx.clip(rect); let text_layout = ctx .text() .new_text_layout(self.text.clone()) @@ -581,27 +346,6 @@ impl Widget for PanelMainHeader { let height = ctx.size().height; let y = (height - text_layout.size().height) / 2.0; ctx.draw_text(&text_layout, Point::new(10.0, y)); - - let icon_padding = 4.0; - for icon in self.icons.iter() { - if icon.rect.contains(self.mouse_pos) { - ctx.fill( - &icon.rect, - data.config - .get_color_unchecked(LapceTheme::EDITOR_CURRENT_LINE), - ); - } - if let Some(svg) = get_svg(icon.icon) { - ctx.draw_svg( - &svg, - icon.rect.inflate(-icon_padding, -icon_padding), - Some( - data.config - .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), - ), - ); - } - } }); } } diff --git a/lapce-ui/src/plugin.rs b/lapce-ui/src/plugin.rs index 2838b00d01..88ea31a706 100644 --- a/lapce-ui/src/plugin.rs +++ b/lapce-ui/src/plugin.rs @@ -35,7 +35,6 @@ impl Plugin { PanelKind::Plugin, data.plugin.widget_id, split_id, - PanelHeaderKind::Simple("Plugin".into()), vec![(split_id, PanelHeaderKind::None, Self::new().boxed(), None)], ) } diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index d5a6282624..536c8ce826 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -27,7 +27,6 @@ pub fn new_problem_panel(data: &ProblemData) -> LapcePanel { PanelKind::Problem, data.widget_id, data.split_id, - PanelHeaderKind::Simple("Problem".into()), vec![ ( data.error_widget_id, diff --git a/lapce-ui/src/search.rs b/lapce-ui/src/search.rs index 2eb1ede797..bca21053a2 100644 --- a/lapce-ui/src/search.rs +++ b/lapce-ui/src/search.rs @@ -44,7 +44,6 @@ pub fn new_search_panel(data: &LapceTabData) -> LapcePanel { PanelKind::Search, data.search.widget_id, data.search.split_id, - PanelHeaderKind::Simple("Search".into()), vec![( data.search.split_id, PanelHeaderKind::None, diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index 50cc68585e..80371f8678 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -60,7 +60,6 @@ pub fn new_source_control_panel(data: &LapceTabData) -> LapcePanel { PanelKind::SourceControl, data.source_control.widget_id, data.source_control.split_id, - PanelHeaderKind::Simple("Source Control".into()), vec![ ( editor_data.view_id, diff --git a/lapce-ui/src/split.rs b/lapce-ui/src/split.rs index 96aae3892a..ef1e7ec140 100644 --- a/lapce-ui/src/split.rs +++ b/lapce-ui/src/split.rs @@ -1175,6 +1175,15 @@ impl Widget for LapceSplit { for child in self.children.iter_mut() { child.widget.paint(ctx, data, env); } + if let Some(panel) = self.panel { + if let Some(pos) = data.panel_position(panel) { + if pos.is_bottom() { + self.show_border = true + } else { + self.show_border = false + } + } + } if self.show_border { self.paint_bar(ctx, &data.config); } diff --git a/lapce-ui/src/terminal.rs b/lapce-ui/src/terminal.rs index b131416068..e58be97c15 100644 --- a/lapce-ui/src/terminal.rs +++ b/lapce-ui/src/terminal.rs @@ -53,7 +53,6 @@ impl TerminalPanel { PanelKind::Terminal, data.terminal.widget_id, split_id, - PanelHeaderKind::Simple("Terminal".into()), vec![( split_id, PanelHeaderKind::None, From 9d8989fb0a8b75369b90a9ebbc36388542073ced Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 20:18:31 +0100 Subject: [PATCH 039/816] add arrow to jump editor tabs --- lapce-core/src/command.rs | 4 ++ lapce-ui/src/editor/tab.rs | 77 +++++++++++++++++++++++++------ lapce-ui/src/editor/tab_header.rs | 39 ++++++++++++++++ lapce-ui/src/scroll.rs | 21 ++++++--- 4 files changed, 121 insertions(+), 20 deletions(-) diff --git a/lapce-core/src/command.rs b/lapce-core/src/command.rs index ce99e8f1d4..e3e267f78b 100644 --- a/lapce-core/src/command.rs +++ b/lapce-core/src/command.rs @@ -198,6 +198,10 @@ pub enum FocusCommand { SplitUp, #[strum(serialize = "split_down")] SplitDown, + #[strum(serialize = "editor_tab_previous")] + EditorTabPrvious, + #[strum(serialize = "editor_tab_next")] + EditorTabNext, #[strum(serialize = "search_whole_word_forward")] SearchWholeWordForward, #[strum(serialize = "search_forward")] diff --git a/lapce-ui/src/editor/tab.rs b/lapce-ui/src/editor/tab.rs index 4e5f06de16..bd7ebbb04d 100644 --- a/lapce-ui/src/editor/tab.rs +++ b/lapce-ui/src/editor/tab.rs @@ -314,20 +314,69 @@ impl Widget for LapceEditorTab { Event::Command(cmd) if cmd.is(LAPCE_COMMAND) => { ctx.set_handled(); let cmd = cmd.get_unchecked(LAPCE_COMMAND); - if let CommandKind::Focus(FocusCommand::SplitVertical) = cmd.kind { - let editor_tab = data - .main_split - .editor_tabs - .get_mut(&self.widget_id) - .unwrap(); - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::Focus(FocusCommand::SplitVertical), - data: None, - }, - Target::Widget(editor_tab.active_child().widget_id()), - )); + match cmd.kind { + CommandKind::Focus(FocusCommand::SplitVertical) => { + let editor_tab = data + .main_split + .editor_tabs + .get_mut(&self.widget_id) + .unwrap(); + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Focus( + FocusCommand::SplitVertical, + ), + data: None, + }, + Target::Widget(editor_tab.active_child().widget_id()), + )); + } + CommandKind::Focus(FocusCommand::EditorTabNext) => { + let editor_tab = data + .main_split + .editor_tabs + .get(&self.widget_id) + .unwrap(); + if !editor_tab.children.is_empty() { + let index = if editor_tab.active + == editor_tab.children.len() - 1 + { + 0 + } else { + editor_tab.active + 1 + }; + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::Focus, + Target::Widget( + editor_tab.children[index].widget_id(), + ), + )); + } + } + CommandKind::Focus(FocusCommand::EditorTabPrvious) => { + let editor_tab = data + .main_split + .editor_tabs + .get(&self.widget_id) + .unwrap(); + if !editor_tab.children.is_empty() { + let index = if editor_tab.active == 0 { + editor_tab.children.len() - 1 + } else { + editor_tab.active - 1 + }; + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::Focus, + Target::Widget( + editor_tab.children[index].widget_id(), + ), + )); + } + } + _ => (), } } Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { diff --git a/lapce-ui/src/editor/tab_header.rs b/lapce-ui/src/editor/tab_header.rs index ff10f89aac..2fab985584 100644 --- a/lapce-ui/src/editor/tab_header.rs +++ b/lapce-ui/src/editor/tab_header.rs @@ -40,6 +40,7 @@ impl LapceEditorTabHeader { pub fn new(widget_id: WidgetId) -> Self { let content = LapceScroll::new(LapceEditorTabHeaderContent::new(widget_id)) .horizontal() + .hide_bar() .vertical_scroll_for_horizontal(); Self { widget_id, @@ -289,6 +290,44 @@ impl Widget for LapceEditorTabHeader { ), }; self.icons.push(icon); + + if data.config.editor.show_tab { + let x = + size.width - ((self.icons.len() + 1) as f64) * (gap + icon_size); + let icon = LapceIcon { + icon: "chevron-right.svg", + rect: Size::new(icon_size, icon_size) + .to_rect() + .with_origin(Point::new(x, gap)), + command: Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Focus(FocusCommand::EditorTabNext), + data: None, + }, + Target::Widget(self.widget_id), + ), + }; + self.icons.push(icon); + + let x = + size.width - ((self.icons.len() + 1) as f64) * (gap + icon_size); + let icon = LapceIcon { + icon: "chevron-left.svg", + rect: Size::new(icon_size, icon_size) + .to_rect() + .with_origin(Point::new(x, gap)), + command: Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Focus(FocusCommand::EditorTabPrvious), + data: None, + }, + Target::Widget(self.widget_id), + ), + }; + self.icons.push(icon); + } } self.content.layout( diff --git a/lapce-ui/src/scroll.rs b/lapce-ui/src/scroll.rs index d945932dd6..ebdc6c0d34 100644 --- a/lapce-ui/src/scroll.rs +++ b/lapce-ui/src/scroll.rs @@ -783,6 +783,7 @@ impl ScrollComponent { pub struct LapceScroll { clip: ClipBox, scroll_component: ScrollComponent, + hide_bar: bool, } impl> LapceScroll { @@ -795,6 +796,7 @@ impl> LapceScroll { Self { clip: ClipBox::new(child), scroll_component: ScrollComponent::new(), + hide_bar: false, } } @@ -818,6 +820,11 @@ impl> LapceScroll { self } + pub fn hide_bar(mut self) -> Self { + self.hide_bar = true; + self + } + pub fn vertical_scroll_for_horizontal(mut self) -> Self { self.scroll_component.vertical_scroll_for_horizontal = true; self @@ -946,12 +953,14 @@ impl> Widget for LapceScroll { fn paint(&mut self, ctx: &mut PaintCtx, data: &T, env: &Env) { self.clip.paint(ctx, data, env); - self.scroll_component.draw_bars( - ctx, - &self.clip.viewport(), - env, - data.get_config(), - ); + if !self.hide_bar { + self.scroll_component.draw_bars( + ctx, + &self.clip.viewport(), + env, + data.get_config(), + ); + } } } From a86a9a3bec40edae308c082293859a4b6d63fa03 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 20:24:12 +0100 Subject: [PATCH 040/816] clippy fix --- lapce-data/src/data.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 671b9273bd..fe6a0a8f9f 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1014,7 +1014,7 @@ impl LapceTabData { if self.workspace.path.is_some() { let mut workspace = (*self.workspace).clone(); workspace.path = None; - let _ = ctx.submit_command(Command::new( + ctx.submit_command(Command::new( LAPCE_UI_COMMAND, LapceUICommand::SetWorkspace(workspace), Target::Auto, From ed7f62f34f71a5a2512dbc54d01abcb3a2c05981 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Thu, 30 Jun 2022 14:31:49 -0500 Subject: [PATCH 041/816] Upgrade lsp-types to 0.93 --- Cargo.lock | 4 +- lapce-core/Cargo.toml | 2 +- lapce-data/Cargo.toml | 2 +- lapce-data/src/editor.rs | 11 +++-- lapce-proxy/Cargo.toml | 2 +- lapce-proxy/src/lsp.rs | 11 +++-- lapce-rpc/Cargo.toml | 2 +- lapce-ui/Cargo.toml | 2 +- lapce-ui/src/editor.rs | 14 +++--- lapce-ui/src/problem.rs | 6 +-- lapce-ui/src/svg.rs | 102 +++++++++++++++++++-------------------- lapce-ui/src/tab.rs | 4 +- 12 files changed, 81 insertions(+), 81 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8a41b674b..1d51d7c8af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2547,9 +2547,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.89.2" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e0dedfd52cc32325598b2631e0eba31b7b708959676a9f837042f276b09a2" +checksum = "70c74e2173b2b31f8655d33724b4b45ac13f439386f66290f539c22b144c2212" dependencies = [ "bitflags", "serde 1.0.137", diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 0a07383fed..4880e85f10 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -45,7 +45,7 @@ tree-sitter-css = { git = "https://github.com/syntacti/tree-sitter-css", branch tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", branch = "main", optional = true } # switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-bash/pull/120 tree-sitter-bash = { git = "https://github.com/syntacti/tree-sitter-bash", branch = "master", optional = true } -lsp-types = { version = "0.89.2", features = ["proposed"] } +lsp-types = { version = "0.93", features = ["proposed"] } xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } lapce-rpc = { path = "../lapce-rpc" } diff --git a/lapce-data/Cargo.toml b/lapce-data/Cargo.toml index 5909e1f8e6..c0e4882864 100644 --- a/lapce-data/Cargo.toml +++ b/lapce-data/Cargo.toml @@ -45,7 +45,7 @@ xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } xi-unicode = "0.3.0" fuzzy-matcher = "0.3.7" uuid = { version = "0.8.2", features = ["v4"] } -lsp-types = { version = "0.89.2", features = ["proposed"] } +lsp-types = { version = "0.93", features = ["proposed"] } druid = { git = "https://github.com/lapce/druid", branch = "shell_opengl", features = [ "svg", "im", "serde", ] } # druid = { path = "../../druid/druid", features = ["svg", "im" , "serde"] } toml = { version = "0.5.8", features = ["preserve_order"] } diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 7220d77380..0a397c40c4 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -298,7 +298,7 @@ impl LapceEditorBufferData { let text_format = item .insert_text_format - .unwrap_or(lsp_types::InsertTextFormat::PlainText); + .unwrap_or(lsp_types::InsertTextFormat::PLAIN_TEXT); if let Some(edit) = &item.text_edit { match edit { CompletionTextEdit::Edit(edit) => { @@ -314,7 +314,7 @@ impl LapceEditorBufferData { end_offset.max(edit_end), ); match text_format { - lsp_types::InsertTextFormat::PlainText => { + lsp_types::InsertTextFormat::PLAIN_TEXT => { let (delta, inval_lines) = Arc::make_mut(&mut self.doc) .do_raw_edit( &[ @@ -335,7 +335,7 @@ impl LapceEditorBufferData { self.apply_deltas(&[(delta, inval_lines)]); return Ok(()); } - lsp_types::InsertTextFormat::Snippet => { + lsp_types::InsertTextFormat::SNIPPET => { let snippet = Snippet::from_str(&edit.new_text)?; let text = snippet.text(); let (delta, inval_lines) = Arc::make_mut(&mut self.doc) @@ -381,6 +381,7 @@ impl LapceEditorBufferData { .add_snippet_placeholders(snippet_tabs); return Ok(()); } + _ => {} } } CompletionTextEdit::InsertAndReplace(_) => (), @@ -759,8 +760,8 @@ impl LapceEditorBufferData { let severity = d .diagnostic .severity - .unwrap_or(DiagnosticSeverity::Hint); - if severity != DiagnosticSeverity::Error { + .unwrap_or(DiagnosticSeverity::HINT); + if severity != DiagnosticSeverity::ERROR { return None; } Some(d.diagnostic.range.start) diff --git a/lapce-proxy/Cargo.toml b/lapce-proxy/Cargo.toml index 20d1876154..d22c9028b4 100644 --- a/lapce-proxy/Cargo.toml +++ b/lapce-proxy/Cargo.toml @@ -23,7 +23,7 @@ hotwatch = "0.4.6" notify = "5.0.0-pre.13" xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } serde = { version = "1.0", features = ["derive"] } -lsp-types = { version = "0.89.2", features = ["proposed"] } +lsp-types = { version = "0.93", features = ["proposed"] } parking_lot = { version = "0.11.0", features = ["deadlock_detection"] } crossbeam-channel = "0.5.0" jsonrpc-lite = "0.5.0" diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 498a658ee6..68d700a86c 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -822,7 +822,7 @@ impl LspClient { root_uri, initialization_options: self.options.clone(), capabilities: client_capabilities, - trace: Some(TraceOption::Verbose), + trace: Some(TraceValue::Verbose), workspace_folders: None, client_info: None, root_path: None, @@ -1056,7 +1056,7 @@ impl LspClient { content_change: &TextDocumentContentChangeEvent, rev: u64, ) { - let sync_kind = self.get_sync_kind().unwrap_or(TextDocumentSyncKind::Full); + let sync_kind = self.get_sync_kind().unwrap_or(TextDocumentSyncKind::FULL); let changes = get_change_for_sync_kind(sync_kind, buffer, content_change); if let Some(changes) = changes { self.send_did_change(buffer, changes, rev); @@ -1138,8 +1138,8 @@ pub fn get_change_for_sync_kind( content_change: &TextDocumentContentChangeEvent, ) -> Option> { match sync_kind { - TextDocumentSyncKind::None => None, - TextDocumentSyncKind::Full => { + TextDocumentSyncKind::NONE => None, + TextDocumentSyncKind::FULL => { let text_document_content_change_event = TextDocumentContentChangeEvent { range: None, @@ -1148,7 +1148,8 @@ pub fn get_change_for_sync_kind( }; Some(vec![text_document_content_change_event]) } - TextDocumentSyncKind::Incremental => Some(vec![content_change.clone()]), + TextDocumentSyncKind::INCREMENTAL => Some(vec![content_change.clone()]), + _ => None, } } diff --git a/lapce-rpc/Cargo.toml b/lapce-rpc/Cargo.toml index 37be886787..43b8d474c8 100644 --- a/lapce-rpc/Cargo.toml +++ b/lapce-rpc/Cargo.toml @@ -12,5 +12,5 @@ serde_json = "1.0.59" serde = "1.0" jsonrpc-lite = "0.5.0" crossbeam-channel = "0.5.0" -lsp-types = { version = "0.89.2", features = ["proposed"] } +lsp-types = { version = "0.93", features = ["proposed"] } xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index 1601564dfa..de1b3607c4 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -42,7 +42,7 @@ notify = "5.0.0-pre.13" xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } xi-unicode = "0.3.0" fuzzy-matcher = "0.3.7" -lsp-types = { version = "0.89.2", features = ["proposed"] } +lsp-types = { version = "0.93", features = ["proposed"] } druid = { git = "https://github.com/lapce/druid", branch = "shell_opengl", features = [ "svg", "im", "serde", ] } # druid = { path = "../../druid/druid", features = ["svg", "im" , "serde"] } toml = { version = "0.5.8", features = ["preserve_order"] } diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 57d4961d95..4b55af74c0 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -1593,13 +1593,12 @@ impl LapceEditor { let severity = diagnostic .diagnostic .severity - .as_ref() - .unwrap_or(&DiagnosticSeverity::Information); + .unwrap_or(DiagnosticSeverity::INFORMATION); let color = match severity { - DiagnosticSeverity::Error => data + DiagnosticSeverity::ERROR => data .config .get_color_unchecked(LapceTheme::LAPCE_ERROR), - DiagnosticSeverity::Warning => data + DiagnosticSeverity::WARNING => data .config .get_color_unchecked(LapceTheme::LAPCE_WARN), _ => data @@ -1689,13 +1688,12 @@ impl LapceEditor { let severity = diagnostic .diagnostic .severity - .as_ref() - .unwrap_or(&DiagnosticSeverity::Information); + .unwrap_or(DiagnosticSeverity::INFORMATION); let color = match severity { - DiagnosticSeverity::Error => { + DiagnosticSeverity::ERROR => { data.config.get_color_unchecked(LapceTheme::LAPCE_ERROR) } - DiagnosticSeverity::Warning => { + DiagnosticSeverity::WARNING => { data.config.get_color_unchecked(LapceTheme::LAPCE_WARN) } _ => data.config.get_color_unchecked(LapceTheme::LAPCE_WARN), diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index 4d59b5e0b0..8218c03053 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -34,13 +34,13 @@ pub fn new_problem_panel(data: &ProblemData) -> LapcePanel { ( data.error_widget_id, PanelHeaderKind::Simple("Errors".into()), - ProblemContent::new(DiagnosticSeverity::Error).boxed(), + ProblemContent::new(DiagnosticSeverity::ERROR).boxed(), None, ), ( data.warning_widget_id, PanelHeaderKind::Simple("Warnings".into()), - ProblemContent::new(DiagnosticSeverity::Warning).boxed(), + ProblemContent::new(DiagnosticSeverity::WARNING).boxed(), None, ), ], @@ -375,7 +375,7 @@ impl Widget for ProblemContent { } let svg = match self.severity { - DiagnosticSeverity::Error => get_svg("error.svg").unwrap(), + DiagnosticSeverity::ERROR => get_svg("error.svg").unwrap(), _ => get_svg("warning.svg").unwrap(), }; let rect = Size::new(line_height, line_height) diff --git a/lapce-ui/src/svg.rs b/lapce-ui/src/svg.rs index 79f91f8bb3..9d33960c93 100644 --- a/lapce-ui/src/svg.rs +++ b/lapce-ui/src/svg.rs @@ -83,29 +83,29 @@ pub fn file_svg(path: &Path) -> Svg { } pub fn symbol_svg(kind: &SymbolKind) -> Option { - let kind_str = match kind { - SymbolKind::Array => "symbol-array.svg", - SymbolKind::Boolean => "symbol-boolean.svg", - SymbolKind::Class => "symbol-class.svg", - SymbolKind::Constant => "symbol-constant.svg", - SymbolKind::EnumMember => "symbol-enum-member.svg", - SymbolKind::Enum => "symbol-enum.svg", - SymbolKind::Event => "symbol-event.svg", - SymbolKind::Field => "symbol-field.svg", - SymbolKind::File => "symbol-file.svg", - SymbolKind::Interface => "symbol-interface.svg", - SymbolKind::Key => "symbol-key.svg", - SymbolKind::Function => "symbol-method.svg", - SymbolKind::Method => "symbol-method.svg", - SymbolKind::Object => "symbol-namespace.svg", - SymbolKind::Namespace => "symbol-namespace.svg", - SymbolKind::Number => "symbol-numeric.svg", - SymbolKind::Operator => "symbol-operator.svg", - SymbolKind::TypeParameter => "symbol-parameter.svg", - SymbolKind::Property => "symbol-property.svg", - SymbolKind::String => "symbol-string.svg", - SymbolKind::Struct => "symbol-structure.svg", - SymbolKind::Variable => "symbol-variable.svg", + let kind_str = match *kind { + SymbolKind::ARRAY => "symbol-array.svg", + SymbolKind::BOOLEAN => "symbol-boolean.svg", + SymbolKind::CLASS => "symbol-class.svg", + SymbolKind::CONSTANT => "symbol-constant.svg", + SymbolKind::ENUM_MEMBER => "symbol-enum-member.svg", + SymbolKind::ENUM => "symbol-enum.svg", + SymbolKind::EVENT => "symbol-event.svg", + SymbolKind::FIELD => "symbol-field.svg", + SymbolKind::FILE => "symbol-file.svg", + SymbolKind::INTERFACE => "symbol-interface.svg", + SymbolKind::KEY => "symbol-key.svg", + SymbolKind::FUNCTION => "symbol-method.svg", + SymbolKind::METHOD => "symbol-method.svg", + SymbolKind::OBJECT => "symbol-namespace.svg", + SymbolKind::NAMESPACE => "symbol-namespace.svg", + SymbolKind::NUMBER => "symbol-numeric.svg", + SymbolKind::OPERATOR => "symbol-operator.svg", + SymbolKind::TYPE_PARAMETER => "symbol-parameter.svg", + SymbolKind::PROPERTY => "symbol-property.svg", + SymbolKind::STRING => "symbol-string.svg", + SymbolKind::STRUCT => "symbol-structure.svg", + SymbolKind::VARIABLE => "symbol-variable.svg", _ => return None, }; @@ -118,37 +118,37 @@ pub fn completion_svg( ) -> Option<(Svg, Option)> { let kind = kind?; let kind_str = match kind { - CompletionItemKind::Method => "symbol-method.svg", - CompletionItemKind::Function => "symbol-method.svg", - CompletionItemKind::Enum => "symbol-enum.svg", - CompletionItemKind::EnumMember => "symbol-enum-member.svg", - CompletionItemKind::Class => "symbol-class.svg", - CompletionItemKind::Variable => "symbol-variable.svg", - CompletionItemKind::Struct => "symbol-structure.svg", - CompletionItemKind::Keyword => "symbol-keyword.svg", - CompletionItemKind::Constant => "symbol-constant.svg", - CompletionItemKind::Property => "symbol-property.svg", - CompletionItemKind::Field => "symbol-field.svg", - CompletionItemKind::Interface => "symbol-interface.svg", - CompletionItemKind::Snippet => "symbol-snippet.svg", - CompletionItemKind::Module => "symbol-namespace.svg", + CompletionItemKind::METHOD => "symbol-method.svg", + CompletionItemKind::FUNCTION => "symbol-method.svg", + CompletionItemKind::ENUM => "symbol-enum.svg", + CompletionItemKind::ENUM_MEMBER => "symbol-enum-member.svg", + CompletionItemKind::CLASS => "symbol-class.svg", + CompletionItemKind::VARIABLE => "symbol-variable.svg", + CompletionItemKind::STRUCT => "symbol-structure.svg", + CompletionItemKind::KEYWORD => "symbol-keyword.svg", + CompletionItemKind::CONSTANT => "symbol-constant.svg", + CompletionItemKind::PROPERTY => "symbol-property.svg", + CompletionItemKind::FIELD => "symbol-field.svg", + CompletionItemKind::INTERFACE => "symbol-interface.svg", + CompletionItemKind::SNIPPET => "symbol-snippet.svg", + CompletionItemKind::MODULE => "symbol-namespace.svg", _ => "symbol-string.svg", }; let theme_str = match kind { - CompletionItemKind::Method => "method", - CompletionItemKind::Function => "method", - CompletionItemKind::Enum => "enum", - CompletionItemKind::EnumMember => "enum-member", - CompletionItemKind::Class => "class", - CompletionItemKind::Variable => "field", - CompletionItemKind::Struct => "structure", - CompletionItemKind::Keyword => "keyword", - CompletionItemKind::Constant => "constant", - CompletionItemKind::Property => "property", - CompletionItemKind::Field => "field", - CompletionItemKind::Interface => "interface", - CompletionItemKind::Snippet => "snippet", - CompletionItemKind::Module => "builtinType", + CompletionItemKind::METHOD => "method", + CompletionItemKind::FUNCTION => "method", + CompletionItemKind::ENUM => "enum", + CompletionItemKind::ENUM_MEMBER => "enum-member", + CompletionItemKind::CLASS => "class", + CompletionItemKind::VARIABLE => "field", + CompletionItemKind::STRUCT => "structure", + CompletionItemKind::KEYWORD => "keyword", + CompletionItemKind::CONSTANT => "constant", + CompletionItemKind::PROPERTY => "property", + CompletionItemKind::FIELD => "field", + CompletionItemKind::INTERFACE => "interface", + CompletionItemKind::SNIPPET => "snippet", + CompletionItemKind::MODULE => "builtinType", _ => "string", }; diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index e24c9b2557..9b287c4e24 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -705,8 +705,8 @@ impl LapceTab { diagnostic.diagnostic.severity { match severity { - DiagnosticSeverity::Error => errors += 1, - DiagnosticSeverity::Warning => warnings += 1, + DiagnosticSeverity::ERROR => errors += 1, + DiagnosticSeverity::WARNING => warnings += 1, _ => (), } } From c771fca6d23b5fbf5c20e77cb6dc4747d3988114 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 21:45:44 +0100 Subject: [PATCH 042/816] bump druid --- Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d51d7c8af..27aa3b9e99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -784,7 +784,7 @@ dependencies = [ [[package]] name = "druid" version = "0.7.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#5a8f806121332581114a2628b9dc9937b70e52c2" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#9f86f23269fff778e709bd55e49ef09656ea552f" dependencies = [ "console_error_panic_hook", "druid-derive", @@ -807,7 +807,7 @@ dependencies = [ [[package]] name = "druid-derive" version = "0.4.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#5a8f806121332581114a2628b9dc9937b70e52c2" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#9f86f23269fff778e709bd55e49ef09656ea552f" dependencies = [ "proc-macro2", "quote", @@ -817,7 +817,7 @@ dependencies = [ [[package]] name = "druid-shell" version = "0.7.0" -source = "git+https://github.com/lapce/druid?branch=shell_opengl#5a8f806121332581114a2628b9dc9937b70e52c2" +source = "git+https://github.com/lapce/druid?branch=shell_opengl#9f86f23269fff778e709bd55e49ef09656ea552f" dependencies = [ "anyhow", "bitflags", From dedc1a3ec38c599370f224172bc7ed46ee1b4323 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 30 Jun 2022 22:06:42 +0100 Subject: [PATCH 043/816] move panel to ui command --- lapce-data/src/command.rs | 8 +- lapce-ui/src/tab.rs | 186 ++++++++++++++++++++------------------ 2 files changed, 105 insertions(+), 89 deletions(-) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index a37f9d9742..c7b8d308cc 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -22,9 +22,10 @@ use strum_macros::{Display, EnumIter, EnumMessage, EnumString, IntoStaticStr}; use xi_rope::{spans::Spans, Rope}; use crate::alert::AlertContentData; -use crate::data::LapceWorkspace; +use crate::data::{LapceWorkspace, PanelKind}; use crate::document::BufferContent; use crate::menu::MenuKind; +use crate::panel::PanelPosition; use crate::rich_text::RichText; use crate::{ data::{EditorTabChild, SplitContent}, @@ -512,6 +513,11 @@ pub enum LapceUICommand { history: String, changes: Arc>, }, + MovePanel { + kind: PanelKind, + from: PanelPosition, + to: PanelPosition, + }, CenterOfWindow, UpdateLineChanges(BufferId), PublishDiagnostics(PublishDiagnosticsParams), diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 73967454bc..fda3d3ea43 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -336,6 +336,87 @@ impl LapceTab { rects } + fn move_panel( + &mut self, + ctx: &mut EventCtx, + data: &mut LapceTabData, + kind: PanelKind, + from: PanelPosition, + to: PanelPosition, + ) { + let panel_data = Arc::make_mut(data.panels.get_mut(&from).unwrap()); + let mut index = panel_data + .widgets + .iter() + .position(|w| w == &kind) + .unwrap_or(0); + panel_data.widgets.retain(|w| w != &kind); + if !panel_data.widgets.is_empty() { + if index > panel_data.widgets.len() - 1 { + index -= 1; + } + panel_data.active = panel_data.widgets[index]; + } + + if !data.panels.contains_key(&to) { + data.panels.insert( + to, + Arc::new(PanelData { + active: kind, + widgets: Vec::new(), + shown: false, + maximized: false, + }), + ); + } + let panel_data = Arc::make_mut(data.panels.get_mut(&to).unwrap()); + panel_data.widgets.push(kind); + panel_data.active = kind; + panel_data.shown = true; + + let (panel_widget_id, panel) = match from { + PanelPosition::LeftTop | PanelPosition::LeftBottom => ( + self.panel_left.widget().widget_id, + self.panel_left.widget_mut().panels.remove(&kind).unwrap(), + ), + PanelPosition::RightTop | PanelPosition::RightBottom => ( + self.panel_right.widget().widget_id, + self.panel_right.widget_mut().panels.remove(&kind).unwrap(), + ), + PanelPosition::BottomLeft | PanelPosition::BottomRight => ( + self.panel_bottom.widget().widget_id, + self.panel_bottom.widget_mut().panels.remove(&kind).unwrap(), + ), + }; + + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ChildrenChanged, + Target::Widget(panel_widget_id), + )); + + let new_panel_widget_id = match to { + PanelPosition::LeftTop | PanelPosition::LeftBottom => { + self.panel_left.widget_mut().panels.insert(kind, panel); + self.panel_left.widget().widget_id + } + PanelPosition::RightTop | PanelPosition::RightBottom => { + self.panel_right.widget_mut().panels.insert(kind, panel); + self.panel_right.widget().widget_id + } + PanelPosition::BottomLeft | PanelPosition::BottomRight => { + self.panel_bottom.widget_mut().panels.insert(kind, panel); + self.panel_bottom.widget().widget_id + } + }; + + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::ChildrenChanged, + Target::Widget(new_panel_widget_id), + )); + } + fn handle_panel_drop(&mut self, ctx: &mut EventCtx, data: &mut LapceTabData) { if let Some((_, DragContent::Panel(kind, _))) = data.drag.as_ref() { let rects = self.panel_rects(); @@ -346,97 +427,15 @@ impl LapceTab { return; } - let panel_data = - Arc::make_mut(data.panels.get_mut(&from_position).unwrap()); - let mut index = panel_data - .widgets - .iter() - .position(|w| w == kind) - .unwrap_or(0); - panel_data.widgets.retain(|w| w != kind); - if !panel_data.widgets.is_empty() { - if index > panel_data.widgets.len() - 1 { - index -= 1; - } - panel_data.active = panel_data.widgets[index]; - } - - if !data.panels.contains_key(p) { - data.panels.insert( - *p, - Arc::new(PanelData { - active: *kind, - widgets: Vec::new(), - shown: false, - maximized: false, - }), - ); - } - let panel_data = Arc::make_mut(data.panels.get_mut(p).unwrap()); - panel_data.widgets.push(*kind); - panel_data.active = *kind; - panel_data.shown = true; - - let (panel_widget_id, panel) = match from_position { - PanelPosition::LeftTop | PanelPosition::LeftBottom => ( - self.panel_left.widget().widget_id, - self.panel_left - .widget_mut() - .panels - .remove(kind) - .unwrap(), - ), - PanelPosition::RightTop | PanelPosition::RightBottom => ( - self.panel_right.widget().widget_id, - self.panel_right - .widget_mut() - .panels - .remove(kind) - .unwrap(), - ), - PanelPosition::BottomLeft | PanelPosition::BottomRight => ( - self.panel_bottom.widget().widget_id, - self.panel_bottom - .widget_mut() - .panels - .remove(kind) - .unwrap(), - ), - }; - - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::ChildrenChanged, - Target::Widget(panel_widget_id), - )); - - let new_panel_widget_id = match p { - PanelPosition::LeftTop | PanelPosition::LeftBottom => { - self.panel_left.widget_mut().panels.insert(*kind, panel); - self.panel_left.widget().widget_id - } - PanelPosition::RightTop | PanelPosition::RightBottom => { - self.panel_right - .widget_mut() - .panels - .insert(*kind, panel); - self.panel_right.widget().widget_id - } - PanelPosition::BottomLeft | PanelPosition::BottomRight => { - self.panel_bottom - .widget_mut() - .panels - .insert(*kind, panel); - self.panel_bottom.widget().widget_id - } - }; - ctx.submit_command(Command::new( LAPCE_UI_COMMAND, - LapceUICommand::ChildrenChanged, - Target::Widget(new_panel_widget_id), + LapceUICommand::MovePanel { + kind: *kind, + from: from_position, + to: *p, + }, + Target::Global, )); - return; } } @@ -1555,6 +1554,17 @@ impl Widget for LapceTab { data: &mut LapceTabData, env: &Env, ) { + match event { + Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { + let command = cmd.get_unchecked(LAPCE_UI_COMMAND); + if let LapceUICommand::MovePanel { kind, from, to } = command { + self.move_panel(ctx, data, *kind, *from, *to); + return; + } + } + _ => {} + } + if event.should_propagate_to_hidden() { self.handle_event(ctx, event, data, env); } From 250c587ab58da97a3109e768f43c27af471d1eac Mon Sep 17 00:00:00 2001 From: MinusGix Date: Thu, 30 Jun 2022 20:25:18 -0500 Subject: [PATCH 044/816] Implement inlay hints --- Cargo.lock | 1 + defaults/dark-theme.toml | 2 + defaults/light-theme.toml | 2 + defaults/settings.toml | 5 + lapce-data/Cargo.toml | 1 + lapce-data/src/command.rs | 8 +- lapce-data/src/config.rs | 28 +++++ lapce-data/src/document.rs | 230 +++++++++++++++++++++++++++++++++++- lapce-data/src/editor.rs | 43 +++++++ lapce-data/src/proxy.rs | 10 ++ lapce-proxy/src/dispatch.rs | 5 + lapce-proxy/src/lsp.rs | 41 +++++++ lapce-rpc/src/proxy.rs | 3 + lapce-ui/src/editor.rs | 57 ++++++++- lapce-ui/src/editor/view.rs | 1 + lapce-ui/src/tab.rs | 7 ++ 16 files changed, 434 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27aa3b9e99..e643ab4708 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2279,6 +2279,7 @@ dependencies = [ "serde 1.0.137", "serde_json", "sled", + "smallvec", "structdesc", "strum 0.24.1", "strum_macros 0.24.0", diff --git a/defaults/dark-theme.toml b/defaults/dark-theme.toml index 11ab1b0df0..ab3864dca1 100644 --- a/defaults/dark-theme.toml +++ b/defaults/dark-theme.toml @@ -71,6 +71,8 @@ magenta = "#C678DD" "editor.current_line" = "#2C313C" "editor.link" = "$cyan" +"inlay_hint.foreground" = "#5C6370" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/defaults/light-theme.toml b/defaults/light-theme.toml index 3d5520f71a..7a0a3a44f1 100644 --- a/defaults/light-theme.toml +++ b/defaults/light-theme.toml @@ -96,6 +96,8 @@ magenta = "#A626A4" "editor.current_line" = "#F2F2F2" "editor.link" = "$cyan" +"inlay_hint.foreground" = "$gray" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/defaults/settings.toml b/defaults/settings.toml index 046cc388e8..467d7f981a 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -14,6 +14,9 @@ scroll-beyond-last-line = true hover-delay = 300 # ms modal-mode-relative-line-numbers = true format-on-save = true +enable-inlay-hints = true +inlay-hint-font-family = "" +inlay-hint-font-size = 0 [terminal] font-family = "" @@ -92,6 +95,8 @@ magenta = "#C678DD" "editor.current_line" = "#2C313C" "editor.link" = "$cyan" +"inlay_hint.foreground" = "$grey" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/lapce-data/Cargo.toml b/lapce-data/Cargo.toml index c0e4882864..6424259137 100644 --- a/lapce-data/Cargo.toml +++ b/lapce-data/Cargo.toml @@ -57,3 +57,4 @@ lapce-proxy = { path = "../lapce-proxy" } bytemuck = "1.8.0" # For parsing markdown data, such as in hovers pulldown-cmark = "0.9.1" +smallvec = "1.8.0" \ No newline at end of file diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index a37f9d9742..364b736f01 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -14,7 +14,8 @@ use lapce_rpc::{ }; use lsp_types::{ CodeActionOrCommand, CodeActionResponse, CompletionItem, CompletionResponse, - Location, Position, ProgressParams, PublishDiagnosticsParams, TextEdit, + InlayHint, Location, Position, ProgressParams, PublishDiagnosticsParams, + TextEdit, }; use serde_json::Value; use strum::{self, EnumMessage, IntoEnumIterator}; @@ -441,6 +442,11 @@ pub enum LapceUICommand { ResolveCompletion(BufferId, u64, usize, Box), UpdateCompletion(usize, String, CompletionResponse), UpdateHover(usize, Arc>), + UpdateInlayHints { + path: PathBuf, + rev: u64, + hints: Vec, + }, UpdateCodeActions(PathBuf, u64, usize, CodeActionResponse), CancelPalette, RunCodeAction(CodeActionOrCommand), diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index 8e06b13a89..23582cc84a 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -48,6 +48,8 @@ impl LapceTheme { pub const EDITOR_CURRENT_LINE: &'static str = "editor.current_line"; pub const EDITOR_LINK: &'static str = "editor.link"; + pub const INLAY_HINT_FOREGROUND: &'static str = "inlay_hint.foreground"; + pub const SOURCE_CONTROL_ADDED: &'static str = "source_control.added"; pub const SOURCE_CONTROL_REMOVED: &'static str = "source_control.removed"; pub const SOURCE_CONTROL_MODIFIED: &'static str = "source_control.modified"; @@ -159,12 +161,38 @@ pub struct EditorConfig { desc = "Whether it should format the document on save (if there is an available formatter)" )] pub format_on_save: bool, + #[field_names(desc = "If inlay hints should be displayed")] + pub enable_inlay_hints: bool, + #[field_names( + desc = "Set the inlay hint font family. If empty, it uses the editor font family." + )] + pub inlay_hint_font_family: String, + #[field_names( + desc = "Set the inlay hint font size. If 0, it uses 0.8 * the editor's font size." + )] + pub inlay_hint_font_size: usize, } impl EditorConfig { pub fn font_family(&self) -> FontFamily { FontFamily::new_unchecked(self.font_family.clone()) } + + pub fn inlay_hint_font_family(&self) -> FontFamily { + if self.inlay_hint_font_family.is_empty() { + self.font_family() + } else { + FontFamily::new_unchecked(self.inlay_hint_font_family.clone()) + } + } + + pub fn inlay_hint_font_size(&self) -> f64 { + if self.inlay_hint_font_size == 0 { + self.font_size as f64 * 0.8 + } else { + self.inlay_hint_font_size as f64 + } + } } #[derive(FieldNames, Debug, Clone, Deserialize, Serialize, Default)] diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 46ae718bc8..dbbe7a80b6 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -1,4 +1,5 @@ use std::{ + borrow::Cow, cell::RefCell, collections::{HashMap, HashSet}, path::PathBuf, @@ -33,8 +34,11 @@ use lapce_rpc::{ buffer::{BufferId, NewBufferResponse}, style::{LineStyle, LineStyles, Style}, }; -use lsp_types::{CodeActionOrCommand, CodeActionResponse}; +use lsp_types::{ + CodeActionOrCommand, CodeActionResponse, InlayHint, InlayHintLabel, +}; use serde::{Deserialize, Serialize}; +use smallvec::SmallVec; use xi_rope::{spans::Spans, Rope, RopeDelta}; use crate::{ @@ -174,6 +178,156 @@ impl BufferContent { } } +#[derive(Clone)] +pub struct InlayHints { + /// Hints should be sorted so that earlier hints come before later hints to simplify + /// code that uses them + hints: im::Vector, +} +impl InlayHints { + pub fn new(inlay_hints: im::Vector) -> InlayHints { + InlayHints { hints: inlay_hints } + } + + pub fn clear(&mut self) { + self.hints.clear(); + } + + pub fn hints_at_line(&self, line: u32) -> InlayHintsLine { + let hints = self.iter_line(line).collect::>(); + InlayHintsLine { hints } + } + + /// Iterate over all the hints at the line + pub fn iter_line(&self, line: u32) -> impl Iterator { + self.hints + .iter() + .filter(move |hint| hint.position.line == line) + } +} + +#[derive(Default)] +pub struct InlayHintsLine<'a> { + hints: SmallVec<[&'a InlayHint; 6]>, +} +impl<'a> InlayHintsLine<'a> { + /// Translate a column position into the text into what it would be after combining + pub fn col_at(&self, pre_col: usize) -> usize { + let mut last = pre_col; + for (col_shift, size, hint) in self.offset_size_iter() { + if pre_col >= hint.position.character as usize { + last = pre_col + col_shift + size; + } + } + + last + } + + /// Translate a column position into the text into what it would be after combining + /// If the cursor is right at the start then it will stay there + pub fn col_after(&self, pre_col: usize) -> usize { + let mut last = pre_col; + for (col_shift, size, hint) in self.offset_size_iter() { + if pre_col > hint.position.character as usize { + last = pre_col + col_shift + size; + } + } + + last + } + + /// Translate a column position into the position it would be before combining + pub fn before_col(&self, col: usize) -> usize { + let mut last = col; + for (col_shift, size, hint) in self.offset_size_iter() { + let shifted_start = hint.position.character as usize + col_shift; + let shifted_end = shifted_start + size; + if col >= shifted_start { + if col >= shifted_end { + last = col - col_shift - size; + } else { + last = hint.position.character as usize; + } + } + } + last + } + + /// Insert the hints at their positions in the text + pub fn combine_with_text<'b>(&self, mut text: Cow<'b, str>) -> Cow<'b, str> { + let mut col_shift = 0; + for hint in self.hints.iter() { + let mut otext = text.into_owned(); + + let location = hint.position.character as usize + col_shift; + + // Stop iterating if the location is bad + if otext.get(location..).is_none() { + return Cow::Owned(otext); + } + + // Insert the right padding. This will be shifted to the right + // after we insert the text at location + if hint.padding_right == Some(true) { + otext.insert(location, ' '); + col_shift += 1; + } + + match &hint.label { + InlayHintLabel::String(label) => { + otext.insert_str(location, label.as_str()); + col_shift += label.len(); + } + InlayHintLabel::LabelParts(parts) => { + for part in parts.iter().rev() { + otext.insert_str(location, part.value.as_str()); + col_shift += part.value.len(); + } + } + }; + + if hint.padding_left == Some(true) { + otext.insert(location, ' '); + col_shift += 1; + } + + text = Cow::Owned(otext); + } + + text + } + + /// Iterator over (col_shift, size, hint) + pub fn offset_size_iter( + &self, + ) -> impl Iterator + '_ { + let mut col_shift = 0; + self.hints.iter().map(move |hint| { + let pre_col_shift = col_shift; + match &hint.label { + InlayHintLabel::String(label) => { + col_shift += label.len(); + } + InlayHintLabel::LabelParts(parts) => { + for part in parts { + col_shift += part.value.len(); + } + } + } + + if hint.padding_right == Some(true) { + col_shift += 1; + } + + if hint.padding_left == Some(true) { + col_shift += 1; + } + + (pre_col_shift, col_shift - pre_col_shift, *hint) + }) + } +} + #[derive(Clone)] pub struct Document { id: BufferId, @@ -190,6 +344,7 @@ pub struct Document { pub cursor_offset: usize, pub scroll_offset: Vec2, pub code_actions: im::HashMap, + pub inlay_hints: InlayHints, pub find: Rc>, find_progress: Rc>, pub event_sink: ExtEventSink, @@ -229,6 +384,7 @@ impl Document { cursor_offset: 0, scroll_offset: Vec2::ZERO, code_actions: im::HashMap::new(), + inlay_hints: InlayHints::new(im::Vector::new()), find: Rc::new(RefCell::new(Find::new(0))), find_progress: Rc::new(RefCell::new(FindProgress::Ready)), event_sink, @@ -276,6 +432,7 @@ impl Document { pub fn reload(&mut self, content: Rope, set_pristine: bool) { self.code_actions.clear(); + self.inlay_hints.clear(); let delta = self.buffer.reload(content, set_pristine); self.apply_deltas(&[delta]); } @@ -584,6 +741,31 @@ impl Document { } } + /// Update the inlay hints with new ones + /// Clears any caches that need to be updated after change + pub fn update_inlay_hints(&mut self, mut inlay_hints: im::Vector) { + // TODO: Can we do a smart comparison? Most of the time, the change isn't notable + // we could just ask the LSP for the data in the area around the edited range? or + // just in view? + + // Remove all the text layouts that have existing hints + for hint in &self.inlay_hints.hints { + let line = hint.position.line as usize; + self.text_layouts.borrow_mut().layouts.remove(&line); + } + + // Sort it to ensure the later inlay hints come after early hints + inlay_hints.sort_by(|a, b| a.position.cmp(&b.position)); + + self.inlay_hints.hints = inlay_hints; + + // Remove all the text layouts that have new hints + for hint in &self.inlay_hints.hints { + let line = hint.position.line as usize; + self.text_layouts.borrow_mut().layouts.remove(&line); + } + } + pub fn buffer(&self) -> &Buffer { &self.buffer } @@ -963,9 +1145,16 @@ impl Document { let last_line = self.buffer.last_line(); let line = ((point.y / config.editor.line_height as f64).floor() as usize) .min(last_line); + + let inlay_hints = if config.editor.enable_inlay_hints { + self.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + let text_layout = self.get_text_layout(text, line, font_size, config); let hit_point = text_layout.hit_test_point(Point::new(point.x, 0.0)); - let col = hit_point.idx; + let col = inlay_hints.before_col(hit_point.idx); let max_col = self.buffer.line_end_col(line, mode != Mode::Normal); ( self.buffer.offset_of_line_col(line, col.min(max_col)), @@ -1015,6 +1204,15 @@ impl Document { config: &Config, ) -> PietTextLayout { let line_content = self.buffer.line_content(line); + + let inlay_hints = if config.editor.enable_inlay_hints { + self.inlay_hints.hints_at_line(line as u32) + } else { + // empty inlay hints + InlayHintsLine::default() + }; + let line_content = inlay_hints.combine_with_text(line_content); + let tab_width = config.tab_width(text, config.editor.font_family(), font_size); @@ -1038,18 +1236,44 @@ impl Document { ) .set_tab_width(tab_width); + // Apply various styles to the lines text let styles = self.line_style(line); for line_style in styles.iter() { if let Some(fg_color) = line_style.style.fg_color.as_ref() { if let Some(fg_color) = config.get_style_color(fg_color) { + let start = inlay_hints.col_at(line_style.start); + let end = inlay_hints.col_at(line_style.end); layout_builder = layout_builder.range_attribute( - line_style.start..line_style.end, + start..end, TextAttribute::TextColor(fg_color.clone()), ); } } } + // Give the inlay hints their styling + for (offset, size, hint) in inlay_hints.offset_size_iter() { + let start = hint.position.character as usize + offset; + let end = start + size; + // TODO: config option for the background + layout_builder = layout_builder.range_attribute( + start..end, + TextAttribute::FontSize(config.editor.inlay_hint_font_size()), + ); + layout_builder = layout_builder.range_attribute( + start..end, + TextAttribute::FontFamily(config.editor.inlay_hint_font_family()), + ); + layout_builder = layout_builder.range_attribute( + start..end, + TextAttribute::TextColor( + config + .get_color_unchecked(LapceTheme::INLAY_HINT_FOREGROUND) + .clone(), + ), + ); + } + layout_builder.build().unwrap() } diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 0a397c40c4..2fb6908ead 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -44,6 +44,7 @@ use lsp_types::CodeActionOrCommand; use lsp_types::CompletionTextEdit; use lsp_types::DocumentChangeOperation; use lsp_types::DocumentChanges; +use lsp_types::InlayHint; use lsp_types::OneOf; use lsp_types::TextEdit; use lsp_types::Url; @@ -150,6 +151,48 @@ impl LapceEditorBufferData { } } + pub fn get_inlay_hints(&self, ctx: &mut EventCtx) { + if !self.doc.loaded() { + return; + } + + if !self.doc.content().is_file() { + return; + } + + if !self.config.editor.enable_inlay_hints { + return; + } + + if let BufferContent::File(path) = self.doc.content() { + // TODO: check if we already have inlay hints for this file? + let path = path.clone(); + let buffer_id = self.doc.id(); + let rev = self.doc.rev(); + let event_sink = ctx.get_external_handle(); + self.proxy.get_inlay_hints( + buffer_id, + Box::new(move |result| { + if let Ok(res) = result { + if let Ok(resp) = + serde_json::from_value::>(res) + { + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::UpdateInlayHints { + path, + rev, + hints: resp, + }, + Target::Auto, + ); + } + } + }), + ); + } + } + pub fn get_code_actions(&self, ctx: &mut EventCtx) { if !self.doc.loaded() { return; diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index abf49a4696..c6c262e0ab 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -700,6 +700,16 @@ impl LapceProxy { ); } + pub fn get_inlay_hints(&self, buffer_id: BufferId, f: Box) { + self.rpc.send_rpc_request_async( + "get_inlay_hints", + &json!({ + "buffer_id": buffer_id, + }), + f, + ); + } + pub fn get_code_actions( &self, buffer_id: BufferId, diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index 677492e2c2..f107cc2e17 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -551,6 +551,11 @@ impl Dispatcher { .lock() .get_definition(id, request_id, buffer, position); } + GetInlayHints { buffer_id } => { + let buffers = self.buffers.lock(); + let buffer = buffers.get(&buffer_id).unwrap(); + self.lsp.lock().get_inlay_hints(id, buffer); + } GetCodeActions { buffer_id, position, diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 68d700a86c..f3683c1dbd 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -335,6 +335,31 @@ impl LspCatalog { } } + pub fn get_inlay_hints(&self, id: RequestId, buffer: &Buffer) { + if let Some(client) = self.clients.get(&buffer.language_id) { + let uri = client.get_uri(buffer); + // Range over the entire buffer + let range = Range { + start: Position::new(0, 0), + end: buffer.offset_to_position(buffer.len()), + }; + client.request_inlay_hints(uri, range, move |lsp_client, result| { + let mut resp = json!({ "id": id }); + match result { + Ok(v) => resp["result"] = v, + Err(e) => { + resp["error"] = json!({ + "code": 0, + "message": format!("{}", e), + }) + } + } + + let _ = lsp_client.dispatcher.sender.send(resp); + }); + } + } + pub fn get_code_actions( &self, id: RequestId, @@ -766,6 +791,9 @@ impl LspClient { ]), ..Default::default() }), + inlay_hint: Some(InlayHintClientCapabilities { + ..Default::default() + }), code_action: Some(CodeActionClientCapabilities { code_action_literal_support: Some(CodeActionLiteralSupport { code_action_kind: CodeActionKindLiteralSupport { @@ -888,6 +916,19 @@ impl LspClient { self.send_request("textDocument/semanticTokens/full", params, Box::new(cb)); } + pub fn request_inlay_hints(&self, document_uri: Url, range: Range, cb: CB) + where + CB: 'static + Send + FnOnce(&LspClient, Result), + { + let params = InlayHintParams { + text_document: TextDocumentIdentifier { uri: document_uri }, + range, + work_done_progress_params: WorkDoneProgressParams::default(), + }; + let params = Params::from(serde_json::to_value(params).unwrap()); + self.send_request("textDocument/inlayHint", params, Box::new(cb)); + } + pub fn request_code_actions(&self, document_uri: Url, range: Range, cb: CB) where CB: 'static + Send + FnOnce(&LspClient, Result), diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index 4a5cdaf550..72cecf704d 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -101,6 +101,9 @@ pub enum ProxyRequest { buffer_id: BufferId, position: Position, }, + GetInlayHints { + buffer_id: BufferId, + }, GetCodeActions { buffer_id: BufferId, position: Position, diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 4b55af74c0..0d9f1e3839 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -19,7 +19,7 @@ use lapce_core::{ }; use lapce_data::command::CommandKind; use lapce_data::data::{EditorView, LapceData}; -use lapce_data::document::{BufferContent, LocalBufferKind}; +use lapce_data::document::{BufferContent, InlayHintsLine, LocalBufferKind}; use lapce_data::keypress::KeyPressFocus; use lapce_data::menu::MenuKind; use lapce_data::{ @@ -1086,15 +1086,25 @@ impl LapceEditor { .ceil() as usize; match &data.editor.cursor.mode { CursorMode::Normal(offset) => { - let line = data.doc.buffer().line_of_offset(*offset); + let (line, col) = data.doc.buffer().offset_to_line_col(*offset); Self::paint_cursor_line(data, ctx, line, is_focused, placeholder); if is_focused { + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + // Shift it by the inlay hints + let col = inlay_hints.col_after(col); + let x0 = data .doc - .point_of_offset( + .point_of_line_col( ctx.text(), - *offset, + line, + col, font_size, &data.config, ) @@ -1109,11 +1119,15 @@ impl LapceEditor { data.config.editor.font_size, &data.config, ); + let (_, right_col) = + data.doc.buffer().offset_to_line_col(right_offset); + let right_col = inlay_hints.col_after(right_col); let x1 = data .doc - .point_of_offset( + .point_of_line_col( ctx.text(), - right_offset, + line, + right_col, font_size, &data.config, ) @@ -1180,6 +1194,15 @@ impl LapceEditor { } }; + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + let left_col = inlay_hints.col_after(left_col); + let right_col = inlay_hints.col_after(right_col); + let x0 = data .doc .point_of_line_col( @@ -1213,6 +1236,7 @@ impl LapceEditor { ); if is_focused { + // TODO: probably need to mess with this let line = data.doc.buffer().line_of_offset(*end); let x0 = data @@ -1305,6 +1329,17 @@ impl LapceEditor { _ => data.doc.buffer().line_end_col(line, true), }; + let inlay_hints = + if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + // Shift it by the inlay hints + let left_col = inlay_hints.col_after(left_col); + let right_col = inlay_hints.col_after(right_col); + if !line_content.is_empty() { let x0 = data .doc @@ -1343,6 +1378,16 @@ impl LapceEditor { if is_focused { let (line, col) = data.doc.buffer().offset_to_line_col(region.end()); + + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + // Shift it by the inlay hints + let col = inlay_hints.col_after(col); + let x = data .doc .point_of_line_col( diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index e022227251..5b6b954a33 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -626,6 +626,7 @@ impl Widget for LapceEditorView { editor_data.sync_buffer_position( self.editor.widget().editor.widget().inner().offset(), ); + editor_data.get_inlay_hints(ctx); editor_data.get_code_actions(ctx); data.keypress = keypress.clone(); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 73967454bc..2230124646 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1200,6 +1200,13 @@ impl LapceTab { } ctx.set_handled(); } + LapceUICommand::UpdateInlayHints { path, rev, hints } => { + if let Some(doc) = data.main_split.open_docs.get_mut(path) { + if doc.rev() == *rev { + Arc::make_mut(doc).update_inlay_hints(hints.into()); + } + } + } LapceUICommand::UpdateCodeActions(path, rev, offset, resp) => { if let Some(doc) = data.main_split.open_docs.get_mut(path) { if doc.rev() == *rev { From 2506f53c40427be0d523700ebbddb439f1c935c7 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Fri, 1 Jul 2022 12:53:53 -0500 Subject: [PATCH 045/816] Fix various inlay hint position bugs --- lapce-ui/src/editor.rs | 120 ++++++++++++++++++++++++++++++------ lapce-ui/src/editor/view.rs | 9 ++- 2 files changed, 109 insertions(+), 20 deletions(-) diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index e87be4184b..b1b44ff11b 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -829,7 +829,7 @@ impl LapceEditor { } } - Self::paint_snippet(data, ctx); + Self::paint_snippet(data, ctx, font_size); Self::paint_diagnostics(data, ctx); if data.doc.buffer().is_empty() { if let Some(placeholder) = self.placeholder.as_ref() { @@ -867,6 +867,7 @@ impl LapceEditor { match &data.editor.cursor.mode { CursorMode::Normal(_) => {} CursorMode::Visual { start, end, mode } => { + // TODO: inlay hints? let (start_line, start_col) = data.doc.buffer().offset_to_line_col(*start.min(end)); let (end_line, end_col) = @@ -933,6 +934,11 @@ impl LapceEditor { let start_offset = data.doc.buffer().offset_of_line(actual_line); let end_offset = data.doc.buffer().offset_of_line(actual_line + 1); let regions = selection.regions_in_range(start_offset, end_offset); + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(actual_line as u32) + } else { + InlayHintsLine::default() + }; for region in regions { if region.is_caret() { let caret_actual_line = @@ -955,10 +961,12 @@ impl LapceEditor { data.doc.buffer().offset_to_line_col(start.min(end)); let (end_line, end_col) = data.doc.buffer().offset_to_line_col(start.max(end)); + let left_col = match actual_line { _ if actual_line == start_line => start_col, _ => 0, }; + let left_col = inlay_hints.col_at(left_col); let right_col = match actual_line { _ if actual_line == end_line => { let max_col = data @@ -969,6 +977,8 @@ impl LapceEditor { } _ => data.doc.buffer().line_end_col(actual_line, true), }; + let right_col = inlay_hints.col_at(right_col); + let x0 = left_col as f64 * char_width + x_shift; let x1 = right_col as f64 * char_width + x_shift; let y0 = y; @@ -985,6 +995,8 @@ impl LapceEditor { let (caret_actual_line, col) = data.doc.buffer().offset_to_line_col(region.end()); if caret_actual_line == actual_line { + let col = inlay_hints.col_at(col); + let x = col as f64 * char_width + x_shift; ctx.stroke( Line::new( @@ -1227,14 +1239,21 @@ impl LapceEditor { ); if is_focused { - // TODO: probably need to mess with this - let line = data.doc.buffer().line_of_offset(*end); + let (line, col) = data.doc.buffer().offset_to_line_col(*end); + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + let col = inlay_hints.col_after(col); let x0 = data .doc - .point_of_offset( + .point_of_line_col( ctx.text(), - *end, + line, + col, font_size, &data.config, ) @@ -1249,11 +1268,15 @@ impl LapceEditor { data.config.editor.font_size, &data.config, ); + let (_, right_col) = + data.doc.buffer().offset_to_line_col(right_offset); + let right_col = inlay_hints.col_after(right_col); let x1 = data .doc - .point_of_offset( + .point_of_line_col( ctx.text(), - right_offset, + line, + right_col, font_size, &data.config, ) @@ -1471,12 +1494,22 @@ impl LapceEditor { data.doc.buffer().offset_to_line_col(start); let (end_line, end_col) = data.doc.buffer().offset_to_line_col(end); for line in start_line..end_line + 1 { + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + let left_col = if line == start_line { start_col } else { 0 }; + let left_col = inlay_hints.col_at(left_col); + let right_col = if line == end_line { end_col } else { data.doc.buffer().line_end_col(line, true) + 1 }; + let right_col = inlay_hints.col_at(right_col); + let text_layout = data.doc.get_text_layout( ctx.text(), line, @@ -1509,7 +1542,11 @@ impl LapceEditor { } } - fn paint_snippet(data: &LapceEditorBufferData, ctx: &mut PaintCtx) { + fn paint_snippet( + data: &LapceEditorBufferData, + ctx: &mut PaintCtx, + font_size: usize, + ) { let line_height = data.config.editor.line_height as f64; let start_line = (data.editor.scroll_offset.y / line_height).floor() as usize; @@ -1517,7 +1554,6 @@ impl LapceEditor { + data.editor.scroll_offset.y) / line_height) .ceil() as usize; - let width = data.config.editor_char_width(ctx.text()); if let Some(snippet) = data.editor.snippet.as_ref() { for (_, (start, end)) in snippet { let paint_start_line = start_line; @@ -1530,12 +1566,30 @@ impl LapceEditor { if line < start_line || line > end_line { continue; } + let line_content = data.doc.buffer().line_content(line); + + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + let left_col = match line { _ if line == start_line => start_col, _ => 0, }; - let x0 = left_col as f64 * width; + let left_col = inlay_hints.col_at(left_col); + let x0 = data + .doc + .point_of_line_col( + ctx.text(), + line, + left_col, + font_size, + &data.config, + ) + .x; let right_col = match line { _ if line == end_line => { @@ -1544,8 +1598,19 @@ impl LapceEditor { } _ => data.doc.buffer().line_end_col(line, true), }; + let right_col = inlay_hints.col_at(right_col); + if !line_content.is_empty() { - let x1 = right_col as f64 * width; + let x1 = data + .doc + .point_of_line_col( + ctx.text(), + line, + right_col, + font_size, + &data.config, + ) + .x; let y0 = line as f64 * line_height; let y1 = y0 + line_height; ctx.stroke( @@ -1594,6 +1659,12 @@ impl LapceEditor { break; } + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + let text_layout = data.doc.get_text_layout( ctx.text(), line, @@ -1601,26 +1672,24 @@ impl LapceEditor { &data.config, ); let x0 = if line == start.line as usize { - text_layout - .hit_test_text_position(start.character as usize) - .point - .x + let col = inlay_hints.col_at(start.character as usize); + text_layout.hit_test_text_position(col).point.x } else { let (_, col) = data.doc.buffer().offset_to_line_col( data.doc .buffer() .first_non_blank_character_on_line(line), ); + let col = inlay_hints.col_at(col); text_layout.hit_test_text_position(col).point.x }; let x1 = if line == end.line as usize { - text_layout - .hit_test_text_position(end.character as usize) - .point - .x + let col = inlay_hints.col_at(end.character as usize); + text_layout.hit_test_text_position(col).point.x } else { let col = data.doc.buffer().line_end_col(line, false) + 1; + let col = inlay_hints.col_at(col); text_layout.hit_test_text_position(col).point.x }; let _y1 = (line + 1) as f64 * line_height; @@ -1901,6 +1970,19 @@ impl Widget for LapceEditor { .doc .buffer() .offset_to_line_col(offset); + + let inlay_hints = + if data.config.editor.enable_inlay_hints { + editor_data + .doc + .inlay_hints + .hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + + let col = inlay_hints.col_at(col); + let x = editor_data .doc .point_of_line_col( diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 318daaff39..136ecb6f99 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -19,7 +19,7 @@ use lapce_data::{ }, config::{EditorConfig, LapceTheme}, data::{EditorTabChild, EditorView, FocusArea, LapceTabData}, - document::{BufferContent, LocalBufferKind}, + document::{BufferContent, InlayHintsLine, LocalBufferKind}, editor::LapceEditorBufferData, keypress::KeyPressFocus, panel::{PanelData, PanelKind}, @@ -437,6 +437,13 @@ impl LapceEditorView { fn cursor_region(data: &LapceEditorBufferData, text: &mut PietText) -> Rect { let offset = data.editor.cursor.offset(); let (line, col) = data.doc.buffer().offset_to_line_col(offset); + let inlay_hints = if data.config.editor.enable_inlay_hints { + data.doc.inlay_hints.hints_at_line(line as u32) + } else { + InlayHintsLine::default() + }; + let col = inlay_hints.col_at(col); + let width = data.config.editor_char_width(text); let cursor_x = data .doc From 094eeae8a263848ab40b96023928b5ea1143e5b7 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 1 Jul 2022 20:36:30 +0100 Subject: [PATCH 046/816] change panel order --- lapce-data/src/command.rs | 9 +- lapce-data/src/data.rs | 348 +++++++++------------------------ lapce-data/src/db.rs | 12 ++ lapce-data/src/palette.rs | 3 +- lapce-data/src/panel.rs | 240 ++++++++++++++++++++++- lapce-ui/src/app.rs | 1 + lapce-ui/src/editor.rs | 48 ++--- lapce-ui/src/editor/view.rs | 38 ++-- lapce-ui/src/explorer.rs | 3 +- lapce-ui/src/panel.rs | 155 +++++++-------- lapce-ui/src/plugin.rs | 5 +- lapce-ui/src/problem.rs | 3 +- lapce-ui/src/search.rs | 3 +- lapce-ui/src/source_control.rs | 3 +- lapce-ui/src/split.rs | 15 +- lapce-ui/src/status.rs | 35 ++-- lapce-ui/src/tab.rs | 250 +++++++++++++---------- lapce-ui/src/terminal.rs | 15 +- lapce-ui/src/window.rs | 1 + 19 files changed, 639 insertions(+), 548 deletions(-) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index c7b8d308cc..36fcfa43fd 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -22,10 +22,10 @@ use strum_macros::{Display, EnumIter, EnumMessage, EnumString, IntoStaticStr}; use xi_rope::{spans::Spans, Rope}; use crate::alert::AlertContentData; -use crate::data::{LapceWorkspace, PanelKind}; +use crate::data::LapceWorkspace; use crate::document::BufferContent; use crate::menu::MenuKind; -use crate::panel::PanelPosition; +use crate::panel::{PanelKind, PanelPosition}; use crate::rich_text::RichText; use crate::{ data::{EditorTabChild, SplitContent}, @@ -513,11 +513,6 @@ pub enum LapceUICommand { history: String, changes: Arc>, }, - MovePanel { - kind: PanelKind, - from: PanelPosition, - to: PanelPosition, - }, CenterOfWindow, UpdateLineChanges(BufferId), PublishDiagnostics(PublishDiagnosticsParams), diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 9ac50a3663..94a636ce98 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -56,7 +56,10 @@ use crate::{ hover::HoverData, keypress::KeyPressData, palette::{PaletteData, PaletteType, PaletteViewData}, - panel::PanelPosition, + panel::{ + PanelContainerPosition, PanelData, PanelKind, PanelOrder, PanelPosition, + PanelSize, + }, picker::FilePickerData, plugin::PluginData, problem::ProblemData, @@ -82,6 +85,8 @@ pub struct LapceData { pub keypress: Arc, /// The persistent state of the program, such as recent workspaces. pub db: Arc, + /// The order of panels in each postion + pub panel_orders: PanelOrder, } impl LapceData { @@ -92,11 +97,15 @@ impl LapceData { let mut windows = im::HashMap::new(); let config = Config::load(&LapceWorkspace::default()).unwrap_or_default(); let keypress = Arc::new(KeyPressData::new(&config, event_sink.clone())); + let panel_orders = db + .get_panel_orders() + .unwrap_or_else(|_| Self::default_panel_orders()); if let Ok(app) = db.get_app() { for info in app.windows.iter() { let window = LapceWindowData::new( keypress.clone(), + panel_orders.clone(), event_sink.clone(), info, db.clone(), @@ -117,6 +126,7 @@ impl LapceData { }); let window = LapceWindowData::new( keypress.clone(), + panel_orders.clone(), event_sink.clone(), &info, db.clone(), @@ -137,9 +147,28 @@ impl LapceData { windows, keypress, db, + panel_orders, } } + pub fn default_panel_orders() -> PanelOrder { + let mut order = PanelOrder::new(); + order.insert( + PanelPosition::LeftTop, + im::vector![ + PanelKind::FileExplorer, + PanelKind::SourceControl, + PanelKind::Plugin, + ], + ); + order.insert( + PanelPosition::BottomLeft, + im::vector![PanelKind::Terminal, PanelKind::Search, PanelKind::Problem,], + ); + + order + } + pub fn reload_env(&self, env: &mut Env) { env.set(theme::SCROLLBAR_WIDTH, 10.0); env.set(theme::SCROLLBAR_EDGE_WIDTH, 0.0); @@ -212,6 +241,7 @@ pub struct LapceWindowData { pub maximised: bool, /// The position of the window. pub pos: Point, + pub panel_orders: PanelOrder, } impl Data for LapceWindowData { @@ -223,12 +253,14 @@ impl Data for LapceWindowData { && self.maximised.same(&other.maximised) && self.keypress.same(&other.keypress) && self.plugins.same(&other.plugins) + && self.panel_orders.same(&other.panel_orders) } } impl LapceWindowData { pub fn new( keypress: Arc, + panel_orders: PanelOrder, event_sink: ExtEventSink, info: &WindowInfo, db: Arc, @@ -247,6 +279,7 @@ impl LapceWindowData { workspace.clone(), db.clone(), keypress.clone(), + panel_orders.clone(), event_sink.clone(), ); tabs.insert(tab_id, tab); @@ -265,6 +298,7 @@ impl LapceWindowData { LapceWorkspace::default(), db.clone(), keypress.clone(), + panel_orders.clone(), event_sink.clone(), ); tabs.insert(tab_id, tab); @@ -315,6 +349,7 @@ impl LapceWindowData { size: info.size, pos: info.pos, maximised: info.maximised, + panel_orders, } } @@ -351,57 +386,6 @@ pub struct EditorDiagnostic { pub lines: usize, } -#[derive(Clone, Copy, PartialEq, Data, Serialize, Deserialize, Hash, Eq, Debug)] -pub enum PanelKind { - FileExplorer, - SourceControl, - Plugin, - Terminal, - Search, - Problem, -} - -impl PanelKind { - pub fn svg_name(&self) -> &'static str { - match &self { - PanelKind::FileExplorer => "file-explorer.svg", - PanelKind::SourceControl => "git-icon.svg", - PanelKind::Plugin => "plugin-icon.svg", - PanelKind::Terminal => "terminal.svg", - PanelKind::Search => "search.svg", - PanelKind::Problem => "error.svg", - } - } -} - -#[derive(Clone)] -pub struct PanelData { - pub active: PanelKind, - pub widgets: Vec, - pub shown: bool, - pub maximized: bool, -} - -impl PanelData { - pub fn is_shown(&self) -> bool { - self.shown && !self.widgets.is_empty() - } - - pub fn is_maximized(&self) -> bool { - self.maximized && !self.widgets.is_empty() - } -} - -#[derive(Clone, Data)] -pub struct PanelSize { - pub left: f64, - pub left_split: f64, - pub bottom: f64, - pub bottom_split: f64, - pub right: f64, - pub right_split: f64, -} - #[derive(Clone)] pub struct WorkProgress { pub token: ProgressToken, @@ -451,9 +435,7 @@ pub struct LapceTabData { pub term_tx: Arc>, pub term_rx: Option>, pub window_origin: Rc>, - pub panels: im::HashMap>, - pub panel_active: PanelPosition, - pub panel_size: PanelSize, + pub panel: Arc, pub config: Arc, pub focus: WidgetId, pub focus_area: FocusArea, @@ -470,13 +452,11 @@ impl Data for LapceTabData { && self.palette.same(&other.palette) && self.workspace.same(&other.workspace) && self.source_control.same(&other.source_control) - && self.panels.same(&other.panels) - && self.panel_size.same(&other.panel_size) + && self.panel.same(&other.panel) && self.config.same(&other.config) && self.terminal.same(&other.terminal) && self.focus == other.focus && self.focus_area == other.focus_area - && self.panel_active == other.panel_active && self.proxy_status.same(&other.proxy_status) && self.find.same(&other.find) && self.alert.same(&other.alert) @@ -506,6 +486,7 @@ impl LapceTabData { workspace: LapceWorkspace, db: Arc, keypress: Arc, + panel_orders: PanelOrder, event_sink: ExtEventSink, ) -> Self { let config = Arc::new(Config::load(&workspace).unwrap_or_default()); @@ -594,43 +575,10 @@ impl LapceTabData { let terminal = Arc::new(TerminalSplitData::new(proxy.clone())); let problem = Arc::new(ProblemData::new()); + let panel = workspace_info + .map(|i| i.panel) + .unwrap_or_else(|| PanelData::new(panel_orders)); - let mut panels = im::HashMap::new(); - panels.insert( - PanelPosition::LeftTop, - Arc::new(PanelData { - active: PanelKind::FileExplorer, - widgets: vec![ - PanelKind::FileExplorer, - PanelKind::SourceControl, - PanelKind::Plugin, - ], - shown: true, - maximized: false, - }), - ); - panels.insert( - PanelPosition::BottomLeft, - Arc::new(PanelData { - active: PanelKind::Terminal, - widgets: vec![ - PanelKind::Terminal, - PanelKind::Search, - PanelKind::Problem, - ], - shown: true, - maximized: false, - }), - ); - panels.insert( - PanelPosition::RightTop, - Arc::new(PanelData { - active: PanelKind::Terminal, - widgets: vec![], - shown: false, - maximized: false, - }), - ); let focus = (*main_split.active).unwrap_or(*main_split.split_id); let mut tab = Self { id: tab_id, @@ -659,16 +607,7 @@ impl LapceTabData { proxy_status: Arc::new(ProxyStatus::Connecting), keypress, window_origin: Rc::new(RefCell::new(Point::ZERO)), - panels, - panel_size: PanelSize { - left: 250.0, - left_split: 0.5, - bottom: 300.0, - bottom_split: 0.5, - right: 250.0, - right_split: 0.5, - }, - panel_active: PanelPosition::LeftTop, + panel: Arc::new(panel), config, focus_area: FocusArea::Editor, db, @@ -687,6 +626,7 @@ impl LapceTabData { .unwrap(); WorkspaceInfo { split: main_split_data.split_info(self), + panel: (*self.panel).clone(), } } @@ -775,67 +715,10 @@ impl LapceTabData { } } - pub fn panel_left_shown(&self) -> bool { - self.panels - .get(&PanelPosition::LeftTop) - .map(|p| p.shown) - .unwrap_or(false) - || self - .panels - .get(&PanelPosition::LeftBottom) - .map(|p| p.shown) - .unwrap_or(false) - } - pub fn is_drag_editor(&self) -> bool { matches!(&*self.drag, Some((_, DragContent::EditorTab(..)))) } - pub fn panel_right_shown(&self) -> bool { - self.panels - .get(&PanelPosition::RightTop) - .map(|p| p.shown) - .unwrap_or(false) - || self - .panels - .get(&PanelPosition::RightBottom) - .map(|p| p.shown) - .unwrap_or(false) - } - - pub fn panel_bottom_shown(&self) -> bool { - self.panels - .get(&PanelPosition::BottomLeft) - .map(|p| p.shown) - .unwrap_or(false) - || self - .panels - .get(&PanelPosition::BottomRight) - .map(|p| p.shown) - .unwrap_or(false) - } - - pub fn panel_bottom_maximized(&self) -> bool { - self.panels - .get(&PanelPosition::BottomLeft) - .map(|p| p.maximized) - .unwrap_or(false) - || self - .panels - .get(&PanelPosition::BottomRight) - .map(|p| p.maximized) - .unwrap_or(false) - } - - pub fn panel_position(&self, kind: PanelKind) -> Option { - for (pos, panels) in self.panels.iter() { - if panels.widgets.contains(&kind) { - return Some(*pos); - } - } - None - } - pub fn update_from_editor_buffer_data( &mut self, editor_buffer_data: LapceEditorBufferData, @@ -1228,20 +1111,10 @@ impl LapceTabData { LapceWorkbenchCommand::ToggleMaximizedPanel => { if let Some(data) = data { if let Ok(kind) = serde_json::from_value::(data) { - for (_, panel) in self.panels.iter_mut() { - if panel.widgets.contains(&kind) { - if panel.active == kind { - let panel = Arc::make_mut(panel); - panel.maximized = !panel.maximized; - } - break; - } - } + Arc::make_mut(&mut self.panel).toggle_maximize(&kind); } } else { - let panel = self.panels.get_mut(&self.panel_active).unwrap(); - let panel = Arc::make_mut(panel); - panel.maximized = !panel.maximized; + Arc::make_mut(&mut self.panel).toggle_active_maximize(); } } LapceWorkbenchCommand::FocusEditor => { @@ -1287,35 +1160,16 @@ impl LapceTabData { } } LapceWorkbenchCommand::TogglePanelLeftVisual => { - let shown = !self.panel_left_shown(); - if let Some(panel) = self.panels.get_mut(&PanelPosition::LeftTop) { - Arc::make_mut(panel).shown = shown; - } - if let Some(panel) = self.panels.get_mut(&PanelPosition::LeftBottom) - { - Arc::make_mut(panel).shown = shown; - } + Arc::make_mut(&mut self.panel) + .toggle_container_visual(&PanelContainerPosition::Left); } LapceWorkbenchCommand::TogglePanelRightVisual => { - let shown = !self.panel_right_shown(); - if let Some(panel) = self.panels.get_mut(&PanelPosition::RightTop) { - Arc::make_mut(panel).shown = shown; - } - if let Some(panel) = self.panels.get_mut(&PanelPosition::RightBottom) - { - Arc::make_mut(panel).shown = shown; - } + Arc::make_mut(&mut self.panel) + .toggle_container_visual(&PanelContainerPosition::Right); } LapceWorkbenchCommand::TogglePanelBottomVisual => { - let shown = !self.panel_bottom_shown(); - if let Some(panel) = self.panels.get_mut(&PanelPosition::BottomLeft) - { - Arc::make_mut(panel).shown = shown; - } - if let Some(panel) = self.panels.get_mut(&PanelPosition::BottomRight) - { - Arc::make_mut(panel).shown = shown; - } + Arc::make_mut(&mut self.panel) + .toggle_container_visual(&PanelContainerPosition::Bottom); } LapceWorkbenchCommand::ToggleSourceControlFocus => { self.toggle_panel_focus(ctx, PanelKind::SourceControl); @@ -1542,36 +1396,15 @@ impl LapceTabData { } } - fn is_panel_visible(&self, kind: PanelKind) -> bool { - for (_, panel) in self.panels.iter() { - if panel.widgets.contains(&kind) { - return panel.active == kind && panel.shown; - } - } - - false - } - fn is_panel_focused(&self, kind: PanelKind) -> bool { // Moving between e.g. Search and Problems doesn't affect focus, so we need to also check // visibility. - self.focus_area == FocusArea::Panel(kind) && self.is_panel_visible(kind) + self.focus_area == FocusArea::Panel(kind) + && self.panel.is_panel_visible(&kind) } fn hide_panel(&mut self, ctx: &mut EventCtx, kind: PanelKind) { - for (p, panel) in self.panels.iter_mut() { - if panel.active == kind && !panel.widgets.is_empty() { - let panel = Arc::make_mut(panel); - panel.shown = false; - let peer = p.peer(); - if let Some(peer) = self.panels.get_mut(&peer) { - if peer.widgets.is_empty() { - Arc::make_mut(peer).shown = false; - } - } - break; - } - } + Arc::make_mut(&mut self.panel).hide_panel(&kind); if let Some(active) = *self.main_split.active_tab { ctx.submit_command(Command::new( LAPCE_UI_COMMAND, @@ -1581,44 +1414,37 @@ impl LapceTabData { } } - fn show_panel(&mut self, ctx: &mut EventCtx, kind: PanelKind) { - for (_, panel) in self.panels.iter_mut() { - if panel.widgets.contains(&kind) { - let panel = Arc::make_mut(panel); - panel.shown = true; - panel.active = kind; - let focus_id = match kind { - PanelKind::FileExplorer => self.file_explorer.widget_id, - PanelKind::SourceControl => self.source_control.active, - PanelKind::Plugin => self.plugin.widget_id, - PanelKind::Terminal => self.terminal.widget_id, - PanelKind::Search => self.search.active, - PanelKind::Problem => self.problem.widget_id, - }; - if let PanelKind::Search = kind { - ctx.submit_command(Command::new( - LAPCE_COMMAND, - LapceCommand { - kind: CommandKind::MultiSelection( - MultiSelectionCommand::SelectAll, - ), - data: None, - }, - Target::Widget(focus_id), - )); - } - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::Focus, - Target::Widget(focus_id), - )); - break; - } + pub fn show_panel(&mut self, ctx: &mut EventCtx, kind: PanelKind) { + Arc::make_mut(&mut self.panel).show_panel(&kind); + let focus_id = match kind { + PanelKind::FileExplorer => self.file_explorer.widget_id, + PanelKind::SourceControl => self.source_control.active, + PanelKind::Plugin => self.plugin.widget_id, + PanelKind::Terminal => self.terminal.widget_id, + PanelKind::Search => self.search.active, + PanelKind::Problem => self.problem.widget_id, + }; + if let PanelKind::Search = kind { + ctx.submit_command(Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::MultiSelection( + MultiSelectionCommand::SelectAll, + ), + data: None, + }, + Target::Widget(focus_id), + )); } + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::Focus, + Target::Widget(focus_id), + )); } fn toggle_panel_visual(&mut self, ctx: &mut EventCtx, kind: PanelKind) { - if self.is_panel_visible(kind) { + if self.panel.is_panel_visible(&kind) { self.hide_panel(ctx, kind); } else { self.show_panel(ctx, kind); @@ -1630,7 +1456,7 @@ impl LapceTabData { PanelKind::FileExplorer | PanelKind::Plugin | PanelKind::Problem => { // Some panels don't accept focus (yet). Fall back to visibility check // in those cases. - self.is_panel_visible(kind) + self.panel.is_panel_visible(&kind) } PanelKind::Terminal | PanelKind::SourceControl | PanelKind::Search => { self.is_panel_focused(kind) @@ -1741,8 +1567,14 @@ impl Lens for LapceTabLens { let mut tab = data.tabs.get(&self.0).unwrap().clone(); tab.keypress = data.keypress.clone(); tab.plugins = data.plugins.clone(); + if !tab.panel.order.same(&data.panel_orders) { + Arc::make_mut(&mut tab.panel).order = data.panel_orders.clone(); + } let result = f(&mut tab); data.keypress = tab.keypress.clone(); + if !tab.panel.order.same(&data.panel_orders) { + data.panel_orders = tab.panel.order.clone(); + } if !tab.same(data.tabs.get(&self.0).unwrap()) { data.tabs.insert(self.0, tab); } @@ -1769,8 +1601,10 @@ impl Lens for LapceWindowLens { ) -> V { let mut win = data.windows.get(&self.0).unwrap().clone(); win.keypress = data.keypress.clone(); + win.panel_orders = data.panel_orders.clone(); let result = f(&mut win); data.keypress = win.keypress.clone(); + data.panel_orders = win.panel_orders.clone(); if !win.same(data.windows.get(&self.0).unwrap()) { data.windows.insert(self.0, win); } diff --git a/lapce-data/src/db.rs b/lapce-data/src/db.rs index 6863463485..9f05f1f344 100644 --- a/lapce-data/src/db.rs +++ b/lapce-data/src/db.rs @@ -23,6 +23,7 @@ use crate::{ }, document::{BufferContent, Document}, editor::EditorLocation, + panel::{PanelData, PanelOrder}, split::SplitDirection, }; @@ -216,6 +217,7 @@ impl SplitInfo { #[derive(Clone, Serialize, Deserialize)] pub struct WorkspaceInfo { pub split: SplitInfo, + pub panel: PanelData, } #[derive(Clone, Serialize, Deserialize)] @@ -481,6 +483,16 @@ impl LapceDb { Ok(info) } + pub fn get_panel_orders(&self) -> Result { + let sled_db = self.get_db()?; + let panel_orders = sled_db + .get("panel_orders")? + .ok_or_else(|| anyhow!("can't find panel orders"))?; + let panel_orders = std::str::from_utf8(&panel_orders)?; + let panel_orders: PanelOrder = serde_json::from_str(panel_orders)?; + Ok(panel_orders) + } + fn insert_workspace( &self, workspace: &LapceWorkspace, diff --git a/lapce-data/src/palette.rs b/lapce-data/src/palette.rs index b3475f2e9e..c28bbd417e 100644 --- a/lapce-data/src/palette.rs +++ b/lapce-data/src/palette.rs @@ -21,13 +21,14 @@ use crate::command::CommandKind; use crate::data::{LapceWorkspace, LapceWorkspaceType}; use crate::document::BufferContent; use crate::editor::EditorLocation; +use crate::panel::PanelKind; use crate::proxy::path_from_url; use crate::{ command::LAPCE_UI_COMMAND, command::{CommandExecuted, LAPCE_COMMAND}, command::{LapceCommand, LapceUICommand}, config::Config, - data::{FocusArea, LapceMainSplitData, LapceTabData, PanelKind}, + data::{FocusArea, LapceMainSplitData, LapceTabData}, find::Find, keypress::{KeyPressData, KeyPressFocus}, proxy::LapceProxy, diff --git a/lapce-data/src/panel.rs b/lapce-data/src/panel.rs index f281b16550..5db5e68bd2 100644 --- a/lapce-data/src/panel.rs +++ b/lapce-data/src/panel.rs @@ -1,3 +1,241 @@ +use druid::Data; +use serde::{Deserialize, Serialize}; + +pub type PanelOrder = im::HashMap>; + +#[derive(Clone, Copy, PartialEq, Data, Serialize, Deserialize, Hash, Eq, Debug)] +pub enum PanelKind { + FileExplorer, + SourceControl, + Plugin, + Terminal, + Search, + Problem, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct PanelSize { + pub left: f64, + pub left_split: f64, + pub bottom: f64, + pub bottom_split: f64, + pub right: f64, + pub right_split: f64, +} + +impl PanelKind { + pub fn svg_name(&self) -> &'static str { + match &self { + PanelKind::FileExplorer => "file-explorer.svg", + PanelKind::SourceControl => "git-icon.svg", + PanelKind::Plugin => "plugin-icon.svg", + PanelKind::Terminal => "terminal.svg", + PanelKind::Search => "search.svg", + PanelKind::Problem => "error.svg", + } + } +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct PanelStyle { + pub active: usize, + pub shown: bool, + pub maximized: bool, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct PanelData { + pub active: PanelPosition, + pub order: PanelOrder, + pub style: im::HashMap, + pub size: PanelSize, +} + +impl PanelData { + pub fn new(order: PanelOrder) -> Self { + let size = PanelSize { + left: 250.0, + left_split: 0.5, + bottom: 300.0, + bottom_split: 0.5, + right: 250.0, + right_split: 0.5, + }; + let mut style = im::HashMap::new(); + style.insert( + PanelPosition::LeftTop, + PanelStyle { + active: 0, + shown: true, + maximized: false, + }, + ); + style.insert( + PanelPosition::LeftBottom, + PanelStyle { + active: 0, + shown: false, + maximized: false, + }, + ); + style.insert( + PanelPosition::BottomLeft, + PanelStyle { + active: 0, + shown: true, + maximized: false, + }, + ); + style.insert( + PanelPosition::BottomRight, + PanelStyle { + active: 0, + shown: false, + maximized: false, + }, + ); + style.insert( + PanelPosition::RightTop, + PanelStyle { + active: 0, + shown: false, + maximized: false, + }, + ); + style.insert( + PanelPosition::RightBottom, + PanelStyle { + active: 0, + shown: false, + maximized: false, + }, + ); + + Self { + active: PanelPosition::LeftTop, + order, + size, + style, + } + } + + pub fn is_container_shown(&self, position: &PanelContainerPosition) -> bool { + self.is_position_shown(&position.first()) + || self.is_position_shown(&position.second()) + } + + pub fn is_position_shown(&self, position: &PanelPosition) -> bool { + self.style.get(position).map(|s| s.shown).unwrap_or(false) + } + + pub fn panel_bottom_maximized(&self) -> bool { + self.style + .get(&PanelPosition::BottomLeft) + .map(|p| p.maximized) + .unwrap_or(false) + || self + .style + .get(&PanelPosition::BottomRight) + .map(|p| p.maximized) + .unwrap_or(false) + } + + pub fn panel_position( + &self, + kind: &PanelKind, + ) -> Option<(usize, PanelPosition)> { + for (pos, panels) in self.order.iter() { + let index = panels.iter().position(|k| k == kind); + match index { + Some(index) => return Some((index, *pos)), + None => (), + } + } + None + } + + pub fn toggle_maximize(&mut self, kind: &PanelKind) { + if let Some((_, p)) = self.panel_position(kind) { + if let Some(style) = self.style.get_mut(&p) { + style.maximized = !style.maximized; + } + } + } + + pub fn toggle_active_maximize(&mut self) { + if let Some(style) = self.style.get_mut(&self.active) { + style.maximized = !style.maximized; + } + } + + pub fn set_shown(&mut self, position: &PanelPosition, shown: bool) { + if let Some(style) = self.style.get_mut(position) { + style.shown = shown; + } + } + + pub fn toggle_container_visual(&mut self, position: &PanelContainerPosition) { + let shown = !self.is_container_shown(position); + self.set_shown(&position.first(), shown); + self.set_shown(&position.second(), shown); + } + + pub fn position_has_panels(&self, position: &PanelPosition) -> bool { + self.order + .get(position) + .map(|o| !o.is_empty()) + .unwrap_or(false) + } + + pub fn active_panel_at_position( + &self, + position: &PanelPosition, + ) -> Option<(PanelKind, bool)> { + let style = self.style.get(position)?; + let order = self.order.get(position)?; + order + .get(style.active) + .cloned() + .or_else(|| order.last().cloned()) + .map(|p| (p, style.shown)) + } + + pub fn hide_panel(&mut self, kind: &PanelKind) { + if let Some((_, position)) = self.panel_position(kind) { + if let Some((active_panel, _)) = self.active_panel_at_position(&position) + { + if &active_panel == kind { + self.set_shown(&position, false); + let peer_position = position.peer(); + if let Some(order) = self.order.get(&peer_position) { + if order.is_empty() { + self.set_shown(&peer_position, false); + } + } + } + } + } + } + + pub fn show_panel(&mut self, kind: &PanelKind) { + if let Some((index, position)) = self.panel_position(kind) { + if let Some(style) = self.style.get_mut(&position) { + style.shown = true; + style.active = index; + } + } + } + + pub fn is_panel_visible(&self, kind: &PanelKind) -> bool { + if let Some((index, position)) = self.panel_position(kind) { + if let Some(style) = self.style.get(&position) { + return style.active == index && style.shown; + } + } + false + } +} + pub enum PanelResizePosition { Left, LeftSplit, @@ -5,7 +243,7 @@ pub enum PanelResizePosition { Bottom, } -#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug)] +#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug, Serialize, Deserialize)] pub enum PanelPosition { LeftTop, LeftBottom, diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 0bd85ea886..4d27914d19 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -220,6 +220,7 @@ impl AppDelegate for LapceAppDelegate { }; let mut window_data = LapceWindowData::new( data.keypress.clone(), + data.panel_orders.clone(), ctx.get_external_handle(), &info, data.db.clone(), diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 4b55af74c0..5710cd87fc 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -22,12 +22,13 @@ use lapce_data::data::{EditorView, LapceData}; use lapce_data::document::{BufferContent, LocalBufferKind}; use lapce_data::keypress::KeyPressFocus; use lapce_data::menu::MenuKind; +use lapce_data::panel::{PanelData, PanelKind}; use lapce_data::{ command::{ LapceCommand, LapceUICommand, LapceWorkbenchCommand, LAPCE_UI_COMMAND, }, config::{Config, LapceTheme}, - data::{LapceTabData, PanelData, PanelKind}, + data::LapceTabData, editor::{LapceEditorBufferData, Syntax}, menu::MenuItem, panel::PanelPosition, @@ -318,7 +319,7 @@ impl LapceEditor { data: &LapceEditorBufferData, text: &mut PietText, editor_size: Size, - panels: &im::HashMap>, + panel: &PanelData, env: &Env, ) -> Size { let line_height = data.config.editor.line_height as f64; @@ -394,32 +395,23 @@ impl LapceEditor { } } BufferContent::Local(LocalBufferKind::SourceControl) => { - for (pos, panels) in panels.iter() { - for panel_kind in panels.widgets.iter() { - if panel_kind == &PanelKind::SourceControl { - return match pos { - PanelPosition::BottomLeft - | PanelPosition::BottomRight => { - let width = 200.0; - Size::new(width, editor_size.height) - } - _ => { - let height = 100.0f64; - let height = height.max( - line_height - * data.doc.buffer().num_lines() as f64, - ); - Size::new( - (width * data.doc.buffer().max_len() as f64) - .max(editor_size.width), - height, - ) - } - }; - } - } + let is_bottom = panel + .panel_position(&PanelKind::SourceControl) + .map(|(_, pos)| pos.is_bottom()) + .unwrap_or(false); + if is_bottom { + let width = 200.0; + Size::new(width, editor_size.height) + } else { + let height = 100.0f64; + let height = height + .max(line_height * data.doc.buffer().num_lines() as f64); + Size::new( + (width * data.doc.buffer().max_len() as f64) + .max(editor_size.width), + height, + ) } - Size::ZERO } // Almost the same as the general case below but with less vertical padding BufferContent::Local(LocalBufferKind::PathName) => Size::new( @@ -1922,7 +1914,7 @@ impl Widget for LapceEditor { env: &Env, ) -> Size { let editor_data = data.editor_view_content(self.view_id); - Self::get_size(&editor_data, ctx.text(), bc.max(), &data.panels, env) + Self::get_size(&editor_data, ctx.text(), bc.max(), &data.panel, env) } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index e022227251..a1a3265f6d 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -18,13 +18,11 @@ use lapce_data::{ LapceUICommand, LAPCE_COMMAND, LAPCE_UI_COMMAND, }, config::{EditorConfig, LapceTheme}, - data::{ - EditorTabChild, EditorView, FocusArea, LapceTabData, PanelData, PanelKind, - }, + data::{EditorTabChild, EditorView, FocusArea, LapceTabData}, document::{BufferContent, LocalBufferKind}, editor::LapceEditorBufferData, keypress::KeyPressFocus, - panel::PanelPosition, + panel::{PanelData, PanelKind, PanelPosition}, settings::SettingsValueKind, }; @@ -185,7 +183,7 @@ impl LapceEditorView { ctx: &mut EventCtx, cmd: &LapceUICommand, data: &mut LapceEditorBufferData, - panels: &im::HashMap>, + panel: &PanelData, env: &Env, ) { match cmd { @@ -193,16 +191,10 @@ impl LapceEditorView { data.run_code_action(action); } LapceUICommand::EnsureCursorVisible(position) => { - self.ensure_cursor_visible( - ctx, - data, - panels, - position.as_ref(), - env, - ); + self.ensure_cursor_visible(ctx, data, panel, position.as_ref(), env); } LapceUICommand::EnsureCursorPosition(position) => { - self.ensure_cursor_position(ctx, data, panels, position, env); + self.ensure_cursor_position(ctx, data, panel, position, env); } LapceUICommand::EnsureRectVisible(rect) => { self.ensure_rect_visible(ctx, data, *rect, env); @@ -373,7 +365,7 @@ impl LapceEditorView { &mut self, ctx: &mut EventCtx, data: &LapceEditorBufferData, - panels: &im::HashMap>, + panel: &PanelData, position: &EnsureVisiblePosition, env: &Env, ) { @@ -389,7 +381,7 @@ impl LapceEditorView { &data.config.editor, ); - let size = LapceEditor::get_size(data, ctx.text(), editor_size, panels, env); + let size = LapceEditor::get_size(data, ctx.text(), editor_size, panel, env); let scroll = self.editor.widget_mut().editor.widget_mut().inner_mut(); scroll.set_child_size(size); if scroll.scroll_to_visible(rect, env) { @@ -405,13 +397,13 @@ impl LapceEditorView { &mut self, ctx: &mut EventCtx, data: &LapceEditorBufferData, - panels: &im::HashMap>, + panel: &PanelData, position: Option<&EnsureVisiblePosition>, env: &Env, ) { let line_height = data.config.editor.line_height as f64; let editor_size = *data.editor.size.borrow(); - let size = LapceEditor::get_size(data, ctx.text(), editor_size, panels, env); + let size = LapceEditor::get_size(data, ctx.text(), editor_size, panel, env); let rect = Self::cursor_region(data, ctx.text()); let scroll_id = self.editor.widget().scroll_id; @@ -425,7 +417,7 @@ impl LapceEditorView { Target::Widget(scroll_id), )); if let Some(position) = position { - self.ensure_cursor_position(ctx, data, panels, position, env); + self.ensure_cursor_position(ctx, data, panel, position, env); } else { let scroll_offset = scroll.offset(); if (scroll_offset.y - old_scroll_offset.y).abs() > line_height * 2.0 @@ -433,7 +425,7 @@ impl LapceEditorView { self.ensure_cursor_position( ctx, data, - panels, + panel, &EnsureVisiblePosition::CenterOfWindow, env, ); @@ -554,7 +546,7 @@ impl Widget for LapceEditorView { self.ensure_cursor_visible( ctx, &editor_data, - &data.panels, + &data.panel, None, env, ); @@ -618,7 +610,7 @@ impl Widget for LapceEditorView { self.ensure_cursor_visible( ctx, &editor_data, - &data.panels, + &data.panel, None, env, ); @@ -646,7 +638,7 @@ impl Widget for LapceEditorView { self.ensure_cursor_visible( ctx, &editor_data, - &data.panels, + &data.panel, None, env, ); @@ -657,7 +649,7 @@ impl Widget for LapceEditorView { ctx, cmd, &mut editor_data, - &data.panels, + &data.panel, env, ); } diff --git a/lapce-ui/src/explorer.rs b/lapce-ui/src/explorer.rs index 24143deca7..73d523be93 100644 --- a/lapce-ui/src/explorer.rs +++ b/lapce-ui/src/explorer.rs @@ -11,7 +11,9 @@ use druid::{ use druid::{ExtEventSink, KbKey, WindowId}; use lapce_data::data::{LapceData, LapceEditorData}; use lapce_data::document::{BufferContent, LocalBufferKind}; +use lapce_data::explorer::FileExplorerData; use lapce_data::explorer::Naming; +use lapce_data::panel::PanelKind; use lapce_data::proxy::LapceProxy; use lapce_data::{ command::LapceUICommand, @@ -19,7 +21,6 @@ use lapce_data::{ config::{Config, LapceTheme}, data::LapceTabData, }; -use lapce_data::{data::PanelKind, explorer::FileExplorerData}; use lapce_rpc::file::FileNodeItem; use crate::editor::view::LapceEditorView; diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 0704288db0..48ec5b004d 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -13,8 +13,8 @@ use lapce_data::{ LAPCE_COMMAND, LAPCE_UI_COMMAND, }, config::LapceTheme, - data::{DragContent, LapceTabData, PanelKind}, - panel::{PanelContainerPosition, PanelPosition}, + data::{DragContent, LapceTabData}, + panel::{PanelContainerPosition, PanelKind, PanelPosition}, }; use crate::{scroll::LapceScroll, split::LapceSplit, svg::get_svg, tab::LapceIcon}; @@ -311,7 +311,7 @@ impl Widget for PanelSectionHeader { let shadow_width = data.config.ui.drop_shadow_width() as f64; if shadow_width > 0.0 { ctx.with_save(|ctx| { - let pos = data.panel_position(self.kind).unwrap(); + let (_, pos) = data.panel.panel_position(&self.kind).unwrap(); if pos.is_bottom() { ctx.clip(rect.inset((0.0, 0.0, 0.0, 50.0))); } else { @@ -423,18 +423,22 @@ impl Widget for PanelContainer { panel.event(ctx, event, data, env); } } else { - if let Some(panel) = data.panels.get(&self.position.first()) { - if panel.shown && !panel.widgets.is_empty() { + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.first()) + { + if shown { self.panels - .get_mut(&panel.active) + .get_mut(&panel) .unwrap() .event(ctx, event, data, env); } } - if let Some(panel) = data.panels.get(&self.position.second()) { - if panel.shown && !panel.widgets.is_empty() { + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.second()) + { + if shown { self.panels - .get_mut(&panel.active) + .get_mut(&panel) .unwrap() .event(ctx, event, data, env); } @@ -465,16 +469,20 @@ impl Widget for PanelContainer { ) { self.switcher0.update(ctx, data, env); self.switcher1.update(ctx, data, env); - if let Some(panel) = data.panels.get(&self.position.first()) { - if panel.shown { - if let Some(panel) = self.panels.get_mut(&panel.active) { + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.first()) + { + if shown { + if let Some(panel) = self.panels.get_mut(&panel) { panel.update(ctx, data, env); } } } - if let Some(panel) = data.panels.get(&self.position.second()) { - if panel.shown { - if let Some(panel) = self.panels.get_mut(&panel.active) { + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.second()) + { + if shown { + if let Some(panel) = self.panels.get_mut(&panel) { panel.update(ctx, data, env); } } @@ -493,34 +501,16 @@ impl Widget for PanelContainer { let (should_shown0, should_shown1) = match self.position { PanelContainerPosition::Left => ( - data.panels - .get(&PanelPosition::LeftTop) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), - data.panels - .get(&PanelPosition::LeftBottom) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), + data.panel.position_has_panels(&PanelPosition::LeftTop), + data.panel.position_has_panels(&PanelPosition::LeftBottom), ), PanelContainerPosition::Right => ( - data.panels - .get(&PanelPosition::RightTop) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), - data.panels - .get(&PanelPosition::RightBottom) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), + data.panel.position_has_panels(&PanelPosition::RightTop), + data.panel.position_has_panels(&PanelPosition::RightBottom), ), PanelContainerPosition::Bottom => ( - data.panels - .get(&PanelPosition::BottomLeft) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), - data.panels - .get(&PanelPosition::BottomRight) - .map(|p| !p.widgets.is_empty()) - .unwrap_or(false), + data.panel.position_has_panels(&PanelPosition::BottomLeft), + data.panel.position_has_panels(&PanelPosition::BottomRight), ), }; @@ -555,27 +545,21 @@ impl Widget for PanelContainer { ); } - let panel_first = data.panels.get(&self.position.first()).and_then(|p| { - if p.shown && !p.widgets.is_empty() { - Some(&p.active) - } else { - None - } - }); - let panel_second = data.panels.get(&self.position.second()).and_then(|p| { - if p.shown && !p.widgets.is_empty() { - Some(&p.active) - } else { - None - } - }); + let panel_first = data + .panel + .active_panel_at_position(&self.position.first()) + .map(|(panel, _)| panel); + let panel_second = data + .panel + .active_panel_at_position(&self.position.second()) + .map(|(panel, _)| panel); match (panel_first, panel_second) { (Some(panel_first), Some(panel_second)) => { let split = match self.position { - PanelContainerPosition::Left => data.panel_size.left_split, - PanelContainerPosition::Bottom => data.panel_size.bottom_split, - PanelContainerPosition::Right => data.panel_size.right_split, + PanelContainerPosition::Left => data.panel.size.left_split, + PanelContainerPosition::Bottom => data.panel.size.bottom_split, + PanelContainerPosition::Right => data.panel.size.right_split, }; let separator = 4.0; if is_bottom { @@ -590,7 +574,7 @@ impl Widget for PanelContainer { - switcher0_size - switcher1_size - size_fist; - let panel_first = self.panels.get_mut(panel_first).unwrap(); + let panel_first = self.panels.get_mut(&panel_first).unwrap(); panel_first.layout( ctx, &BoxConstraints::tight(Size::new( @@ -606,7 +590,7 @@ impl Widget for PanelContainer { env, Point::new(switcher0_size, 0.0), ); - let panel_second = self.panels.get_mut(panel_second).unwrap(); + let panel_second = self.panels.get_mut(&panel_second).unwrap(); panel_second.layout( ctx, &BoxConstraints::tight(Size::new( @@ -634,7 +618,7 @@ impl Widget for PanelContainer { - switcher0_size - switcher1_size - size_fist; - let panel_first = self.panels.get_mut(panel_first).unwrap(); + let panel_first = self.panels.get_mut(&panel_first).unwrap(); panel_first.layout( ctx, &BoxConstraints::tight(Size::new( @@ -651,7 +635,7 @@ impl Widget for PanelContainer { Point::new(0.0, switcher0_size), ); - let panel_second = self.panels.get_mut(panel_second).unwrap(); + let panel_second = self.panels.get_mut(&panel_second).unwrap(); panel_second.layout( ctx, &BoxConstraints::tight(Size::new( @@ -670,7 +654,7 @@ impl Widget for PanelContainer { } } (Some(panel), None) | (None, Some(panel)) => { - let panel = self.panels.get_mut(panel).unwrap(); + let panel = self.panels.get_mut(&panel).unwrap(); if is_bottom { panel.layout( ctx, @@ -789,27 +773,35 @@ impl Widget for PanelContainer { } } - if let Some(panel) = data.panels.get(&self.position.first()) { - if panel.shown && !panel.widgets.is_empty() { - let panel = self.panels.get_mut(&panel.active).unwrap(); + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.first()) + { + if shown { + let panel = self.panels.get_mut(&panel).unwrap(); panel.paint(ctx, data, env); } } - if let Some(panel) = data.panels.get(&self.position.second()) { - if panel.shown && !panel.widgets.is_empty() { - let panel = self.panels.get_mut(&panel.active).unwrap(); + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position.second()) + { + if shown { + let panel = self.panels.get_mut(&panel).unwrap(); panel.paint(ctx, data, env); } } let is_bottom = self.position.is_bottom(); - if let Some(panel0) = data.panels.get(&self.position.first()) { - if panel0.shown && !panel0.widgets.is_empty() { - if let Some(panel1) = data.panels.get(&self.position.second()) { - if panel1.shown && !panel1.widgets.is_empty() { - let panel0 = self.panels.get_mut(&panel0.active).unwrap(); + if let Some((panel0, shown0)) = + data.panel.active_panel_at_position(&self.position.first()) + { + if shown0 { + if let Some((panel1, shown1)) = + data.panel.active_panel_at_position(&self.position.second()) + { + if shown1 { + let panel0 = self.panels.get_mut(&panel0).unwrap(); let panel0_rect = panel0.layout_rect(); - let panel1 = self.panels.get_mut(&panel1.active).unwrap(); + let panel1 = self.panels.get_mut(&panel1).unwrap(); let panel1_rect = panel1.layout_rect(); if is_bottom { ctx.stroke( @@ -887,8 +879,8 @@ impl PanelSwitcher { fn update_icons(&mut self, self_size: Size, data: &LapceTabData) { let mut icons = Vec::new(); - if let Some(panel) = data.panels.get(&self.position) { - for kind in panel.widgets.iter() { + if let Some(order) = data.panel.order.get(&self.position) { + for kind in order.iter() { icons.push(Self::panel_icon(kind, data)); } } @@ -1050,9 +1042,10 @@ impl Widget for PanelSwitcher { fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { let should_show = data - .panels + .panel + .order .get(&self.position) - .map(|p| !p.widgets.is_empty()) + .map(|p| !p.is_empty()) .unwrap_or(false); if !should_show { return; @@ -1158,9 +1151,11 @@ impl Widget for PanelSwitcher { let icon_padding = Self::icon_padding(data); let is_bottom = self.position.is_bottom(); let mut active_kinds = Vec::new(); - if let Some(panel) = data.panels.get(&self.position) { - if panel.shown { - active_kinds.push(panel.active); + if let Some((panel, shown)) = + data.panel.active_panel_at_position(&self.position) + { + if shown { + active_kinds.push(panel); } } for (kind, icon) in self.icons.iter() { diff --git a/lapce-ui/src/plugin.rs b/lapce-ui/src/plugin.rs index 88ea31a706..deb64ba20e 100644 --- a/lapce-ui/src/plugin.rs +++ b/lapce-ui/src/plugin.rs @@ -4,10 +4,7 @@ use druid::{ LifeCycle, LifeCycleCtx, MouseEvent, PaintCtx, Point, RenderContext, Size, UpdateCtx, Widget, WidgetExt, WidgetId, }; -use lapce_data::{ - config::LapceTheme, - data::{LapceTabData, PanelKind}, -}; +use lapce_data::{config::LapceTheme, data::LapceTabData, panel::PanelKind}; use lapce_rpc::plugin::PluginDescription; use strum_macros::Display; diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index d86cc53a31..9f861d1ec7 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -10,8 +10,9 @@ use itertools::Itertools; use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::LapceTheme, - data::{EditorDiagnostic, LapceTabData, PanelKind}, + data::{EditorDiagnostic, LapceTabData}, editor::EditorLocation, + panel::PanelKind, problem::ProblemData, proxy::path_from_url, }; diff --git a/lapce-ui/src/search.rs b/lapce-ui/src/search.rs index bca21053a2..ad058a58e9 100644 --- a/lapce-ui/src/search.rs +++ b/lapce-ui/src/search.rs @@ -7,8 +7,9 @@ use druid::{ use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::LapceTheme, - data::{LapceTabData, PanelKind}, + data::LapceTabData, editor::EditorLocation, + panel::PanelKind, }; use crate::{ diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index 80371f8678..0f95591966 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -13,7 +13,8 @@ use lapce_data::{ LAPCE_COMMAND, LAPCE_UI_COMMAND, }, config::LapceTheme, - data::{FocusArea, LapceTabData, PanelKind}, + data::{FocusArea, LapceTabData}, + panel::PanelKind, }; use lapce_rpc::source_control::FileDiff; diff --git a/lapce-ui/src/split.rs b/lapce-ui/src/split.rs index ef1e7ec140..5d9342ada5 100644 --- a/lapce-ui/src/split.rs +++ b/lapce-ui/src/split.rs @@ -22,10 +22,11 @@ use lapce_data::{ }, config::{Config, LapceTheme}, data::{ - EditorTabChild, FocusArea, LapceEditorData, LapceTabData, PanelKind, - SplitContent, SplitData, + EditorTabChild, FocusArea, LapceEditorData, LapceTabData, SplitContent, + SplitData, }, keypress::{Alignment, DefaultKeyPressHandler, KeyMap}, + panel::PanelKind, split::{SplitDirection, SplitMoveDirection}, terminal::LapceTerminalData, }; @@ -540,10 +541,8 @@ impl LapceSplit { self.even_flex_children(); ctx.children_changed(); - for (_pos, panel) in data.panels.iter_mut() { - if panel.active == PanelKind::Terminal { - Arc::make_mut(panel).shown = false; - } + if data.panel.is_panel_visible(&PanelKind::Terminal) { + Arc::make_mut(&mut data.panel).hide_panel(&PanelKind::Terminal); } if let Some(active) = *data.main_split.active_tab { ctx.submit_command(Command::new( @@ -982,7 +981,7 @@ impl Widget for LapceSplit { ) -> Size { let my_size = bc.max(); if let Some(panel) = self.panel { - if let Some(pos) = data.panel_position(panel) { + if let Some((_, pos)) = data.panel.panel_position(&panel) { if pos.is_bottom() { self.direction = SplitDirection::Vertical; } else { @@ -1176,7 +1175,7 @@ impl Widget for LapceSplit { child.widget.paint(ctx, data, env); } if let Some(panel) = self.panel { - if let Some(pos) = data.panel_position(panel) { + if let Some((_, pos)) = data.panel.panel_position(&panel) { if pos.is_bottom() { self.show_border = true } else { diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs index 3e1fc3ad41..c4bec10cdc 100644 --- a/lapce-ui/src/status.rs +++ b/lapce-ui/src/status.rs @@ -8,8 +8,8 @@ use lapce_core::mode::Mode; use lapce_data::{ command::{CommandKind, LapceCommand, LapceWorkbenchCommand, LAPCE_COMMAND}, config::{Config, LapceTheme}, - data::{FocusArea, LapceTabData, PanelKind}, - panel::PanelPosition, + data::{FocusArea, LapceTabData}, + panel::{PanelContainerPosition, PanelKind, PanelPosition}, }; use crate::{svg::get_svg, tab::LapceIcon}; @@ -30,25 +30,9 @@ impl LapceStatus { } fn panel_icons(&self, self_size: Size, data: &LapceTabData) -> Vec { - let left_panels = data - .panels - .get(&PanelPosition::BottomLeft) - .map(|p| p.widgets.clone()) - .unwrap_or_default(); - let mut right_panels = data - .panels - .get(&PanelPosition::BottomRight) - .map(|p| p.widgets.clone()) - .unwrap_or_default(); - let mut panels = left_panels; - panels.append(&mut right_panels); - - let panel_icons_size = self_size.height * panels.len() as f64; - let offset = (self_size.width - panel_icons_size) / 2.0; - let icons = [ ( - if data.panel_left_shown() { + if data.panel.is_container_shown(&PanelContainerPosition::Left) { "layout-sidebar-left.svg" } else { "layout-sidebar-left-off.svg" @@ -56,7 +40,10 @@ impl LapceStatus { LapceWorkbenchCommand::TogglePanelLeftVisual, ), ( - if data.panel_bottom_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { "layout-panel.svg" } else { "layout-panel-off.svg" @@ -64,7 +51,10 @@ impl LapceStatus { LapceWorkbenchCommand::TogglePanelBottomVisual, ), ( - if data.panel_right_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { "layout-sidebar-right.svg" } else { "layout-sidebar-right-off.svg" @@ -73,6 +63,9 @@ impl LapceStatus { ), ]; + let panel_icons_size = self_size.height * icons.len() as f64; + let offset = (self_size.width - panel_icons_size) / 2.0; + let icons: Vec = icons .into_iter() .enumerate() diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index fda3d3ea43..925cf26af2 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -5,7 +5,7 @@ use druid::{ piet::{PietTextLayout, Text, TextLayout, TextLayoutBuilder}, BoxConstraints, Command, Data, Env, Event, EventCtx, InternalLifeCycle, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, Point, Rect, RenderContext, Size, - Target, Widget, WidgetExt, WidgetId, WidgetPod, + Target, UpdateCtx, Widget, WidgetExt, WidgetId, WidgetPod, }; use itertools::Itertools; use lapce_core::{ @@ -23,7 +23,7 @@ use lapce_data::{ config::{Config, LapceTheme}, data::{ DragContent, EditorDiagnostic, FocusArea, LapceData, LapceTabData, - LapceWorkspace, LapceWorkspaceType, PanelData, PanelKind, WorkProgress, + LapceWorkspace, LapceWorkspaceType, WorkProgress, }, document::{BufferContent, LocalBufferKind}, editor::EditorLocation, @@ -31,7 +31,10 @@ use lapce_data::{ keypress::{DefaultKeyPressHandler, KeyPressData}, menu::MenuKind, palette::PaletteStatus, - panel::{PanelContainerPosition, PanelPosition, PanelResizePosition}, + panel::{ + PanelContainerPosition, PanelData, PanelKind, PanelPosition, + PanelResizePosition, PanelStyle, + }, proxy::path_from_url, }; use lsp_types::DiagnosticSeverity; @@ -159,11 +162,14 @@ impl LapceTab { if let Some(position) = self.current_bar_hover.as_ref() { match position { PanelResizePosition::Left => { - let maximum = self.width - 100.0 - data.panel_size.right; - data.panel_size.left = + let maximum = self.width - 100.0 - data.panel.size.right; + Arc::make_mut(&mut data.panel).size.left = mouse_pos.x.round().max(180.0).min(maximum); if mouse_pos.x < 90.0 { - if data.panel_left_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Left) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -175,7 +181,10 @@ impl LapceTab { Target::Widget(data.id), )); } - } else if !data.panel_left_shown() { + } else if !data + .panel + .is_container_shown(&PanelContainerPosition::Left) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -189,11 +198,15 @@ impl LapceTab { } } PanelResizePosition::Right => { - let maximum = self.width - 100.0 - data.panel_size.left; + let maximum = self.width - 100.0 - data.panel.size.left; let right = self.width - mouse_pos.x.round(); - data.panel_size.right = right.max(180.0).min(maximum); + Arc::make_mut(&mut data.panel).size.right = + right.max(180.0).min(maximum); if right < 90.0 { - if data.panel_right_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -205,7 +218,10 @@ impl LapceTab { Target::Widget(data.id), )); } - } else if !data.panel_right_shown() { + } else if !data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -222,9 +238,12 @@ impl LapceTab { PanelResizePosition::Bottom => { let bottom = self.height - mouse_pos.y.round() - self.status_height; - data.panel_size.bottom = bottom.max(180.0); + Arc::make_mut(&mut data.panel).size.bottom = bottom.max(180.0); if bottom < 90.0 { - if data.panel_bottom_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -236,7 +255,10 @@ impl LapceTab { Target::Widget(data.id), )); } - } else if !data.panel_bottom_shown() { + } else if !data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { ctx.submit_command(Command::new( LAPCE_COMMAND, LapceCommand { @@ -258,8 +280,8 @@ impl LapceTab { data: &LapceTabData, mouse_pos: Point, ) -> Option { - let left = if data.panel_left_shown() { - let left = data.panel_size.left; + let left = if data.panel.is_container_shown(&PanelContainerPosition::Left) { + let left = data.panel.size.left; if mouse_pos.x >= left - 3.0 && mouse_pos.x <= left + 3.0 { return Some(PanelResizePosition::Left); } @@ -268,7 +290,10 @@ impl LapceTab { 0.0 }; - let right = if data.panel_right_shown() { + let right = if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { let right = self.panel_right.layout_rect().x0; if mouse_pos.x >= right - 3.0 && mouse_pos.x <= right + 3.0 { return Some(PanelResizePosition::Right); @@ -278,7 +303,10 @@ impl LapceTab { 0.0 }; - if data.panel_bottom_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { let y = self.main_split_height; if mouse_pos.x > left && mouse_pos.x < right @@ -338,42 +366,11 @@ impl LapceTab { fn move_panel( &mut self, - ctx: &mut EventCtx, - data: &mut LapceTabData, + ctx: &mut UpdateCtx, kind: PanelKind, from: PanelPosition, to: PanelPosition, ) { - let panel_data = Arc::make_mut(data.panels.get_mut(&from).unwrap()); - let mut index = panel_data - .widgets - .iter() - .position(|w| w == &kind) - .unwrap_or(0); - panel_data.widgets.retain(|w| w != &kind); - if !panel_data.widgets.is_empty() { - if index > panel_data.widgets.len() - 1 { - index -= 1; - } - panel_data.active = panel_data.widgets[index]; - } - - if !data.panels.contains_key(&to) { - data.panels.insert( - to, - Arc::new(PanelData { - active: kind, - widgets: Vec::new(), - shown: false, - maximized: false, - }), - ); - } - let panel_data = Arc::make_mut(data.panels.get_mut(&to).unwrap()); - panel_data.widgets.push(kind); - panel_data.active = kind; - panel_data.shown = true; - let (panel_widget_id, panel) = match from { PanelPosition::LeftTop | PanelPosition::LeftBottom => ( self.panel_left.widget().widget_id, @@ -417,25 +414,39 @@ impl LapceTab { )); } - fn handle_panel_drop(&mut self, ctx: &mut EventCtx, data: &mut LapceTabData) { + fn handle_panel_drop(&mut self, _ctx: &mut EventCtx, data: &mut LapceTabData) { if let Some((_, DragContent::Panel(kind, _))) = data.drag.as_ref() { let rects = self.panel_rects(); for (p, rect) in rects.iter() { if rect.contains(self.mouse_pos) { - let from_position = data.panel_position(*kind).unwrap(); + let (_, from_position) = + data.panel.panel_position(kind).unwrap(); if &from_position == p { return; } - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::MovePanel { - kind: *kind, - from: from_position, - to: *p, - }, - Target::Global, - )); + let panel = Arc::make_mut(&mut data.panel); + if let Some(order) = panel.order.get_mut(&from_position) { + order.retain(|k| k != kind); + } + if !panel.order.contains_key(p) { + panel.order.insert(*p, im::Vector::new()); + } + let order = panel.order.get_mut(p).unwrap(); + order.push_back(*kind); + if !panel.style.contains_key(p) { + panel.style.insert( + *p, + PanelStyle { + active: 0, + shown: true, + maximized: false, + }, + ); + } + let style = panel.style.get_mut(p).unwrap(); + style.active = order.len() - 1; + style.shown = true; return; } } @@ -1329,20 +1340,7 @@ impl LapceTab { ctx.set_handled(); } LapceUICommand::FocusSourceControl => { - for (_, panel) in data.panels.iter_mut() { - for kind in panel.widgets.clone() { - if kind == PanelKind::SourceControl { - let panel = Arc::make_mut(panel); - panel.active = PanelKind::SourceControl; - panel.shown = true; - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::Focus, - Target::Widget(data.source_control.active), - )); - } - } - } + data.show_panel(ctx, PanelKind::SourceControl); ctx.set_handled(); } LapceUICommand::FocusEditor => { @@ -1554,17 +1552,6 @@ impl Widget for LapceTab { data: &mut LapceTabData, env: &Env, ) { - match event { - Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { - let command = cmd.get_unchecked(LAPCE_UI_COMMAND); - if let LapceUICommand::MovePanel { kind, from, to } = command { - self.move_panel(ctx, data, *kind, *from, *to); - return; - } - } - _ => {} - } - if event.should_propagate_to_hidden() { self.handle_event(ctx, event, data, env); } @@ -1597,13 +1584,23 @@ impl Widget for LapceTab { self.main_split.event(ctx, event, data, env); self.status.event(ctx, event, data, env); - if data.panel_left_shown() || event.should_propagate_to_hidden() { + if data.panel.is_container_shown(&PanelContainerPosition::Left) + || event.should_propagate_to_hidden() + { self.panel_left.event(ctx, event, data, env); } - if data.panel_right_shown() || event.should_propagate_to_hidden() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + || event.should_propagate_to_hidden() + { self.panel_right.event(ctx, event, data, env); } - if data.panel_bottom_shown() || event.should_propagate_to_hidden() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + || event.should_propagate_to_hidden() + { self.panel_bottom.event(ctx, event, data, env); } @@ -1693,7 +1690,22 @@ impl Widget for LapceTab { ctx.request_paint(); } - if !old_data.panels.same(&data.panels) { + if !old_data.panel.order.same(&data.panel.order) { + for (pos, order) in old_data.panel.order.iter() { + for kind in order.iter() { + if let Some((_, new_pos)) = data.panel.panel_position(kind) { + if pos != &new_pos { + self.move_panel(ctx, *kind, *pos, new_pos); + } + } + } + } + + println!("old panel order {:?}", old_data.panel.order); + println!("panel order {:?}", data.panel.order); + } + + if !old_data.panel.same(&data.panel) { ctx.request_layout(); } @@ -1739,7 +1751,7 @@ impl Widget for LapceTab { ); self.status_height = status_size.height; - let left_width = data.panel_size.left; + let left_width = data.panel.size.left; self.panel_left.layout( ctx, &BoxConstraints::tight(Size::new( @@ -1751,13 +1763,14 @@ impl Widget for LapceTab { ); self.panel_left .set_origin(ctx, data, env, Point::new(0.0, 0.0)); - let panel_left_width = if data.panel_left_shown() { - left_width - } else { - 0.0 - }; - - let right_width = data.panel_size.right; + let panel_left_width = + if data.panel.is_container_shown(&PanelContainerPosition::Left) { + left_width + } else { + 0.0 + }; + + let right_width = data.panel.size.right; self.panel_right.layout( ctx, &BoxConstraints::tight(Size::new( @@ -1773,16 +1786,19 @@ impl Widget for LapceTab { env, Point::new(self_size.width - right_width, 0.0), ); - let panel_right_width = if data.panel_right_shown() { + let panel_right_width = if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { right_width } else { 0.0 }; - let bottom_height = if data.panel_bottom_maximized() { + let bottom_height = if data.panel.panel_bottom_maximized() { self_size.height - status_size.height } else { - data.panel_size.bottom + data.panel.size.bottom }; self.panel_bottom.layout( ctx, @@ -1802,7 +1818,10 @@ impl Widget for LapceTab { self_size.height - status_size.height - bottom_height, ), ); - let panel_bottom_height = if data.panel_bottom_shown() { + let panel_bottom_height = if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { bottom_height } else { 0.0 @@ -1871,13 +1890,19 @@ impl Widget for LapceTab { fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { self.main_split.paint(ctx, data, env); - if data.panel_bottom_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { self.panel_bottom.paint(ctx, data, env); } - if data.panel_left_shown() { + if data.panel.is_container_shown(&PanelContainerPosition::Left) { self.panel_left.paint(ctx, data, env); } - if data.panel_right_shown() { + if data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { self.panel_right.paint(ctx, data, env); } if ctx.is_active() { @@ -1885,7 +1910,10 @@ impl Widget for LapceTab { let (p0, p1) = match position { PanelResizePosition::Left => { let rect = self.panel_left.layout_rect(); - if !data.panel_left_shown() { + if !data + .panel + .is_container_shown(&PanelContainerPosition::Left) + { (Point::new(1.0, rect.y0), Point::new(1.0, rect.y1)) } else { ( @@ -1896,7 +1924,10 @@ impl Widget for LapceTab { } PanelResizePosition::Right => { let rect = self.panel_right.layout_rect(); - if !data.panel_right_shown() { + if !data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { ( Point::new(rect.x1 - 1.0, rect.y0), Point::new(rect.x1 - 1.0, rect.y1), @@ -1917,7 +1948,10 @@ impl Widget for LapceTab { } PanelResizePosition::Bottom => { let rect = self.panel_bottom.layout_rect(); - if !data.panel_bottom_shown() { + if !data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { let status_rect = self.status.layout_rect(); ( Point::new(rect.x0, status_rect.y0 - 1.0), diff --git a/lapce-ui/src/terminal.rs b/lapce-ui/src/terminal.rs index e58be97c15..96e50aaff2 100644 --- a/lapce-ui/src/terminal.rs +++ b/lapce-ui/src/terminal.rs @@ -15,7 +15,8 @@ use lapce_core::mode::Mode; use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::LapceTheme, - data::{FocusArea, LapceTabData, PanelKind}, + data::{FocusArea, LapceTabData}, + panel::PanelKind, terminal::{LapceTerminalData, LapceTerminalViewData}, }; use lapce_rpc::terminal::TermId; @@ -481,12 +482,14 @@ impl LapceTerminal { Arc::make_mut(&mut data.terminal).active_term_id = self.term_id; data.focus = self.widget_id; data.focus_area = FocusArea::Panel(PanelKind::Terminal); - for (pos, panel) in data.panels.iter_mut() { - if panel.widgets.contains(&PanelKind::Terminal) { - Arc::make_mut(panel).active = PanelKind::Terminal; - data.panel_active = *pos; - break; + if let Some((index, position)) = + data.panel.panel_position(&PanelKind::Terminal) + { + let panel = Arc::make_mut(&mut data.panel); + if let Some(style) = panel.style.get_mut(&position) { + style.active = index; } + panel.active = position; } } } diff --git a/lapce-ui/src/window.rs b/lapce-ui/src/window.rs index 4bc6521c5e..43cd693106 100644 --- a/lapce-ui/src/window.rs +++ b/lapce-ui/src/window.rs @@ -75,6 +75,7 @@ impl LapceWindow { workspace, data.db.clone(), data.keypress.clone(), + data.panel_orders.clone(), ctx.get_external_handle(), ); let tab = LapceTab::new(&mut tab_data).lens(LapceTabLens(tab_id)); From bd6caf91e2e8a4d8f3e6bfaf76c059e772415a53 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 1 Jul 2022 20:55:27 +0100 Subject: [PATCH 047/816] save panel orders --- lapce-data/src/command.rs | 1 - lapce-data/src/data.rs | 7 ++- lapce-data/src/db.rs | 8 ++++ lapce-ui/src/editor.rs | 1 - lapce-ui/src/editor/view.rs | 2 +- lapce-ui/src/panel.rs | 4 +- lapce-ui/src/status.rs | 2 +- lapce-ui/src/tab.rs | 86 ++++++++++++++++++++++++------------- 8 files changed, 74 insertions(+), 37 deletions(-) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 36fcfa43fd..a37f9d9742 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -25,7 +25,6 @@ use crate::alert::AlertContentData; use crate::data::LapceWorkspace; use crate::document::BufferContent; use crate::menu::MenuKind; -use crate::panel::{PanelKind, PanelPosition}; use crate::rich_text::RichText; use crate::{ data::{EditorTabChild, SplitContent}, diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 94a636ce98..b0c705ff7c 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -58,7 +58,6 @@ use crate::{ palette::{PaletteData, PaletteType, PaletteViewData}, panel::{ PanelContainerPosition, PanelData, PanelKind, PanelOrder, PanelPosition, - PanelSize, }, picker::FilePickerData, plugin::PluginData, @@ -576,7 +575,11 @@ impl LapceTabData { let terminal = Arc::new(TerminalSplitData::new(proxy.clone())); let problem = Arc::new(ProblemData::new()); let panel = workspace_info - .map(|i| i.panel) + .map(|i| { + let mut panel = i.panel; + panel.order = panel_orders.clone(); + panel + }) .unwrap_or_else(|| PanelData::new(panel_orders)); let focus = (*main_split.active).unwrap_or(*main_split.split_id); diff --git a/lapce-data/src/db.rs b/lapce-data/src/db.rs index 9f05f1f344..aa552c3e10 100644 --- a/lapce-data/src/db.rs +++ b/lapce-data/src/db.rs @@ -493,6 +493,14 @@ impl LapceDb { Ok(panel_orders) } + pub fn save_panel_orders(&self, order: &PanelOrder) -> Result<()> { + let info = serde_json::to_string(order)?; + let sled_db = self.get_db()?; + sled_db.insert("panel_orders", info.as_str())?; + sled_db.flush()?; + Ok(()) + } + fn insert_workspace( &self, workspace: &LapceWorkspace, diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 5710cd87fc..940a2fad94 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -31,7 +31,6 @@ use lapce_data::{ data::LapceTabData, editor::{LapceEditorBufferData, Syntax}, menu::MenuItem, - panel::PanelPosition, }; use lsp_types::{CodeActionOrCommand, DiagnosticSeverity}; diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index a1a3265f6d..1ed325f43e 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -22,7 +22,7 @@ use lapce_data::{ document::{BufferContent, LocalBufferKind}, editor::LapceEditorBufferData, keypress::KeyPressFocus, - panel::{PanelData, PanelKind, PanelPosition}, + panel::{PanelData, PanelKind}, settings::SettingsValueKind, }; diff --git a/lapce-ui/src/panel.rs b/lapce-ui/src/panel.rs index 48ec5b004d..a8e63d9be7 100644 --- a/lapce-ui/src/panel.rs +++ b/lapce-ui/src/panel.rs @@ -548,11 +548,11 @@ impl Widget for PanelContainer { let panel_first = data .panel .active_panel_at_position(&self.position.first()) - .map(|(panel, _)| panel); + .and_then(|(panel, shown)| if shown { Some(panel) } else { None }); let panel_second = data .panel .active_panel_at_position(&self.position.second()) - .map(|(panel, _)| panel); + .and_then(|(panel, shown)| if shown { Some(panel) } else { None }); match (panel_first, panel_second) { (Some(panel_first), Some(panel_second)) => { diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs index c4bec10cdc..b7c0d5064f 100644 --- a/lapce-ui/src/status.rs +++ b/lapce-ui/src/status.rs @@ -9,7 +9,7 @@ use lapce_data::{ command::{CommandKind, LapceCommand, LapceWorkbenchCommand, LAPCE_COMMAND}, config::{Config, LapceTheme}, data::{FocusArea, LapceTabData}, - panel::{PanelContainerPosition, PanelKind, PanelPosition}, + panel::{PanelContainerPosition, PanelKind}, }; use crate::{svg::get_svg, tab::LapceIcon}; diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 925cf26af2..094a4aa2bc 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -32,8 +32,8 @@ use lapce_data::{ menu::MenuKind, palette::PaletteStatus, panel::{ - PanelContainerPosition, PanelData, PanelKind, PanelPosition, - PanelResizePosition, PanelStyle, + PanelContainerPosition, PanelKind, PanelPosition, PanelResizePosition, + PanelStyle, }, proxy::path_from_url, }; @@ -96,14 +96,6 @@ impl LapceTab { let hover = HoverContainer::new(&data.hover); let palette = Palette::new(data); let status = LapceStatus::new(); - - let file_explorer = FileExplorer::new_panel(data); - let source_control = new_source_control_panel(data); - let plugin = Plugin::new_panel(data); - let terminal = TerminalPanel::new_panel(data); - let search = new_search_panel(data); - let problem = new_problem_panel(&data.problem); - let picker = FilePicker::new(data); let settings = @@ -112,24 +104,62 @@ impl LapceTab { let alert = AlertBox::new(data); let mut panel_left = PanelContainer::new(PanelContainerPosition::Left); - panel_left.insert_panel( - PanelKind::FileExplorer, - WidgetPod::new(file_explorer.boxed()), - ); - panel_left.insert_panel( - PanelKind::SourceControl, - WidgetPod::new(source_control.boxed()), - ); - panel_left.insert_panel(PanelKind::Plugin, WidgetPod::new(plugin.boxed())); - let mut panel_bottom = PanelContainer::new(PanelContainerPosition::Bottom); - panel_bottom - .insert_panel(PanelKind::Terminal, WidgetPod::new(terminal.boxed())); - panel_bottom.insert_panel(PanelKind::Search, WidgetPod::new(search.boxed())); - panel_bottom - .insert_panel(PanelKind::Problem, WidgetPod::new(problem.boxed())); + let mut panel_right = PanelContainer::new(PanelContainerPosition::Right); - let panel_right = PanelContainer::new(PanelContainerPosition::Right); + for (position, order) in data.panel.order.clone().iter() { + let panel = match position { + PanelPosition::LeftTop | PanelPosition::LeftBottom => { + &mut panel_left + } + PanelPosition::RightTop | PanelPosition::RightBottom => { + &mut panel_right + } + PanelPosition::BottomLeft | PanelPosition::BottomRight => { + &mut panel_bottom + } + }; + for kind in order.iter() { + match kind { + PanelKind::FileExplorer => { + panel.insert_panel( + *kind, + WidgetPod::new(FileExplorer::new_panel(data).boxed()), + ); + } + PanelKind::SourceControl => { + panel.insert_panel( + *kind, + WidgetPod::new(new_source_control_panel(data).boxed()), + ); + } + PanelKind::Plugin => { + panel.insert_panel( + *kind, + WidgetPod::new(Plugin::new_panel(data).boxed()), + ); + } + PanelKind::Terminal => { + panel.insert_panel( + *kind, + WidgetPod::new(TerminalPanel::new_panel(data).boxed()), + ); + } + PanelKind::Search => { + panel.insert_panel( + *kind, + WidgetPod::new(new_search_panel(data).boxed()), + ); + } + PanelKind::Problem => { + panel.insert_panel( + *kind, + WidgetPod::new(new_problem_panel(&data.problem).boxed()), + ); + } + } + } + } Self { id: data.id, @@ -447,6 +477,7 @@ impl LapceTab { let style = panel.style.get_mut(p).unwrap(); style.active = order.len() - 1; style.shown = true; + let _ = data.db.save_panel_orders(&panel.order); return; } } @@ -1700,9 +1731,6 @@ impl Widget for LapceTab { } } } - - println!("old panel order {:?}", old_data.panel.order); - println!("panel order {:?}", data.panel.order); } if !old_data.panel.same(&data.panel) { From b663c5a267202a599c8ccc917785a84bf6c6ca9e Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 1 Jul 2022 21:48:19 +0100 Subject: [PATCH 048/816] update nightly release --- .github/workflows/release.yml | 112 +++++++++++++++------------------- 1 file changed, 48 insertions(+), 64 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 96caaffdbc..88d4f05f2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,34 +41,13 @@ jobs: shell: pwsh run: | Compress-Archive ./target/release-lto/lapce.exe ./Lapce-windows-portable.zip - - - if: github.event_name == 'workflow_dispatch' - run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV - - if: github.event_name == 'schedule' - run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV - - if: github.event_name == 'push' - run: | - TAG_NAME=${{ github.ref }} - echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV - - - name: Upload msi installer - uses: svenstaro/upload-release-action@v2 + - uses: actions/upload-artifact@v3 with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./Lapce-windows.msi - file_glob: true - tag: ${{ env.TAG_NAME }} - overwrite: true - prerelease: ${{ env.TAG_NAME == 'nightly' }} - - name: Upload portable - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./Lapce-windows-portable.zip - file_glob: true - tag: ${{ env.TAG_NAME }} - overwrite: true - prerelease: ${{ env.TAG_NAME == 'nightly' }} + name: lapce-windows + path: | + ./Lapce-windows-portable.zip + ./Lapce-windows.msi + retention-days: 1 linux: runs-on: ubuntu-18.04 @@ -88,34 +67,13 @@ jobs: cp ./target/release-lto/lapce Lapce/ tar -zcvf ./Lapce-linux.tar.gz Lapce gzip -c "./target/release-lto/lapce-proxy" > ./lapce-proxy-linux.gz - - - if: github.event_name == 'workflow_dispatch' - run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV - - if: github.event_name == 'schedule' - run: echo 'TAG_NAME=nightly' >> $GITHUB_ENV - - if: github.event_name == 'push' - run: | - TAG_NAME=${{ github.ref }} - echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV - - - name: Upload Application - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./Lapce-linux.tar.gz - file_glob: true - tag: ${{ env.TAG_NAME }} - overwrite: true - prerelease: ${{ env.TAG_NAME == 'nightly' }} - - name: Upload Application - uses: svenstaro/upload-release-action@v2 + - uses: actions/upload-artifact@v3 with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./lapce-proxy-linux.gz - file_glob: true - tag: ${{ env.TAG_NAME }} - overwrite: true - prerelease: ${{ env.TAG_NAME == 'nightly' }} + name: lapce-linux + path: | + ./Lapce-linux.tar.gz + ./lapce-proxy-linux.gz + retention-days: 1 macos: runs-on: macos-11 @@ -145,7 +103,28 @@ jobs: uses: devbotsxyz/xcode-staple@v1 with: product-path: "./target/release-lto/macos/Lapce-macos.dmg" + - uses: actions/upload-artifact@v3 + with: + name: lapce-macos + path: | + ./target/release-lto/macos/Lapce-macos.dmg + retention-days: 1 + publish: + needs: [linux, windows, macos] + runs-on: ubuntu-20.04 + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + # Must perform checkout first, since it deletes the target directory + # before running, and would therefore delete the downloaded artifacts + - uses: actions/checkout@v3 + + - uses: actions/download-artifact@v3 + - if: github.event_name == 'workflow_dispatch' run: echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV - if: github.event_name == 'schedule' @@ -154,13 +133,18 @@ jobs: run: | TAG_NAME=${{ github.ref }} echo "TAG_NAME=${TAG_NAME#refs/tags/}" >> $GITHUB_ENV - - - name: Upload Application - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./target/release-lto/macos/Lapce-macos.dmg - file_glob: true - tag: ${{ env.TAG_NAME }} - overwrite: true - prerelease: ${{ env.TAG_NAME == 'nightly' }} + - if: env.TAG_NAME == 'nightly' + run: | + (echo 'SUBJECT=Lapce development build'; + echo 'PRERELEASE=--prerelease') >> $GITHUB_ENV + gh release delete nightly --yes || true + git push origin :nightly || true + - if: env.TAG_NAME != 'nightly' + run: | + (echo 'SUBJECT=Lapce release build'; + echo 'PRERELEASE=') >> $GITHUB_ENV + - name: Publish release + env: + DEBUG: api + run: | + gh release create $TAG_NAME $PRERELEASE --target $GITHUB_SHA lapce-macos/* lapce-linux/* lapce-windows/* From aa141e9d63f1c77877f16809f5f9832e85d932ba Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 10:08:39 +0100 Subject: [PATCH 049/816] add inlay hints background --- defaults/dark-theme.toml | 3 ++- defaults/light-theme.toml | 3 ++- defaults/settings.toml | 3 ++- lapce-data/src/config.rs | 9 ++++--- lapce-data/src/document.rs | 50 ++++++++++++++++++++++++++++++-------- lapce-data/src/history.rs | 13 ++++++---- lapce-ui/src/editor.rs | 43 +++++++++++++++++--------------- lapce-ui/src/settings.rs | 4 +-- 8 files changed, 86 insertions(+), 42 deletions(-) diff --git a/defaults/dark-theme.toml b/defaults/dark-theme.toml index ab3864dca1..5c1e6545ef 100644 --- a/defaults/dark-theme.toml +++ b/defaults/dark-theme.toml @@ -71,7 +71,8 @@ magenta = "#C678DD" "editor.current_line" = "#2C313C" "editor.link" = "$cyan" -"inlay_hint.foreground" = "#5C6370" +"inlay_hint.foreground" = "#FFFFFF" +"inlay_hint.background" = "#528bFF88" "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" diff --git a/defaults/light-theme.toml b/defaults/light-theme.toml index 7a0a3a44f1..2906951b7f 100644 --- a/defaults/light-theme.toml +++ b/defaults/light-theme.toml @@ -96,7 +96,8 @@ magenta = "#A626A4" "editor.current_line" = "#F2F2F2" "editor.link" = "$cyan" -"inlay_hint.foreground" = "$gray" +"inlay_hint.foreground" = "#000000" +"inlay_hint.background" = "#528bFF55" "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" diff --git a/defaults/settings.toml b/defaults/settings.toml index 467d7f981a..8886bf44db 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -95,7 +95,8 @@ magenta = "#C678DD" "editor.current_line" = "#2C313C" "editor.link" = "$cyan" -"inlay_hint.foreground" = "$grey" +"inlay_hint.foreground" = "#FFFFFF" +"inlay_hint.background" = "#528bFF88" "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index 23582cc84a..0d13e81e33 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -49,6 +49,7 @@ impl LapceTheme { pub const EDITOR_LINK: &'static str = "editor.link"; pub const INLAY_HINT_FOREGROUND: &'static str = "inlay_hint.foreground"; + pub const INLAY_HINT_BACKGROUND: &'static str = "inlay_hint.background"; pub const SOURCE_CONTROL_ADDED: &'static str = "source_control.added"; pub const SOURCE_CONTROL_REMOVED: &'static str = "source_control.removed"; @@ -168,7 +169,7 @@ pub struct EditorConfig { )] pub inlay_hint_font_family: String, #[field_names( - desc = "Set the inlay hint font size. If 0, it uses 0.8 * the editor's font size." + desc = "Set the inlay hint font size. If less than 5 or greater than editor font size, it uses the editor font size." )] pub inlay_hint_font_size: usize, } @@ -187,8 +188,10 @@ impl EditorConfig { } pub fn inlay_hint_font_size(&self) -> f64 { - if self.inlay_hint_font_size == 0 { - self.font_size as f64 * 0.8 + if self.inlay_hint_font_size < 5 + || self.inlay_hint_font_size > self.font_size + { + self.font_size as f64 } else { self.inlay_hint_font_size as f64 } diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index dbbe7a80b6..53456a90e4 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -14,7 +14,7 @@ use druid::{ piet::{ PietText, PietTextLayout, Text, TextAttribute, TextLayout, TextLayoutBuilder, }, - ExtEventSink, Point, SingleUse, Size, Target, Vec2, WidgetId, + Color, ExtEventSink, Point, SingleUse, Size, Target, Vec2, WidgetId, }; use lapce_core::{ buffer::{Buffer, DiffLines, InvalLines}, @@ -63,10 +63,20 @@ impl Clipboard for SystemClipboard { } } +pub struct LineExtraStyle { + pub bg_color: Option, + pub under_line: Option, +} + +pub struct TextLayoutLine { + pub extra_style: Vec<(f64, f64, LineExtraStyle)>, + pub text: PietTextLayout, +} + #[derive(Clone, Default)] pub struct TextLayoutCache { config_id: u64, - pub layouts: HashMap>, + pub layouts: HashMap>, } impl TextLayoutCache { @@ -1131,7 +1141,7 @@ impl Document { config: &Config, ) -> Point { let text_layout = self.get_text_layout(text, line, font_size, config); - text_layout.hit_test_text_position(col).point + text_layout.text.hit_test_text_position(col).point } pub fn offset_of_point( @@ -1153,7 +1163,7 @@ impl Document { }; let text_layout = self.get_text_layout(text, line, font_size, config); - let hit_point = text_layout.hit_test_point(Point::new(point.x, 0.0)); + let hit_point = text_layout.text.hit_test_point(Point::new(point.x, 0.0)); let col = inlay_hints.before_col(hit_point.idx); let max_col = self.buffer.line_end_col(line, mode != Mode::Normal); ( @@ -1171,7 +1181,7 @@ impl Document { ) -> Point { let (line, col) = self.buffer.offset_to_line_col(offset); let text_layout = self.get_text_layout(text, line, font_size, config); - text_layout.hit_test_text_position(col).point + text_layout.text.hit_test_text_position(col).point } pub fn get_text_layout( @@ -1180,7 +1190,7 @@ impl Document { line: usize, font_size: usize, config: &Config, - ) -> Arc { + ) -> Arc { self.text_layouts.borrow_mut().check_attributes(config.id); if self.text_layouts.borrow().layouts.get(&line).is_none() { self.text_layouts.borrow_mut().layouts.insert( @@ -1202,7 +1212,7 @@ impl Document { line: usize, font_size: usize, config: &Config, - ) -> PietTextLayout { + ) -> TextLayoutLine { let line_content = self.buffer.line_content(line); let inlay_hints = if config.editor.enable_inlay_hints { @@ -1255,7 +1265,6 @@ impl Document { for (offset, size, hint) in inlay_hints.offset_size_iter() { let start = hint.position.character as usize + offset; let end = start + size; - // TODO: config option for the background layout_builder = layout_builder.range_attribute( start..end, TextAttribute::FontSize(config.editor.inlay_hint_font_size()), @@ -1274,7 +1283,28 @@ impl Document { ); } - layout_builder.build().unwrap() + let text = layout_builder.build().unwrap(); + let mut extra_style = Vec::new(); + for (offset, size, hint) in inlay_hints.offset_size_iter() { + let start = hint.position.character as usize + offset; + let end = start + size; + let x0 = text.hit_test_text_position(start).point.x; + let x1 = text.hit_test_text_position(end).point.x; + extra_style.push(( + x0, + x1, + LineExtraStyle { + bg_color: Some( + config + .get_color_unchecked(LapceTheme::INLAY_HINT_BACKGROUND) + .clone(), + ), + under_line: None, + }, + )); + } + + TextLayoutLine { text, extra_style } } pub fn line_horiz_col( @@ -1290,7 +1320,7 @@ impl Document { ColPosition::Col(x) => { let text_layout = self.get_text_layout(text, line, font_size, config); - let n = text_layout.hit_test_point(Point::new(x, 0.0)).idx; + let n = text_layout.text.hit_test_point(Point::new(x, 0.0)).idx; n.min(self.buffer.line_end_col(line, caret)) } ColPosition::End => self.buffer.line_end_col(line, caret), diff --git a/lapce-data/src/history.rs b/lapce-data/src/history.rs index a55dda5224..92de1e3f02 100644 --- a/lapce-data/src/history.rs +++ b/lapce-data/src/history.rs @@ -5,7 +5,7 @@ use std::{ }; use druid::{ - piet::{PietText, PietTextLayout, Text, TextAttribute, TextLayoutBuilder}, + piet::{PietText, Text, TextAttribute, TextLayoutBuilder}, Target, }; use lapce_core::{ @@ -22,7 +22,7 @@ use xi_rope::{spans::Spans, Rope}; use crate::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::{Config, LapceTheme}, - document::{BufferContent, Document, TextLayoutCache}, + document::{BufferContent, Document, TextLayoutCache, TextLayoutLine}, }; #[derive(Clone)] @@ -80,7 +80,7 @@ impl DocumentHistory { text: &mut PietText, line: usize, config: &Config, - ) -> Arc { + ) -> Arc { self.text_layouts.borrow_mut().check_attributes(config.id); if self.text_layouts.borrow().layouts.get(&line).is_none() { self.text_layouts @@ -101,7 +101,7 @@ impl DocumentHistory { text: &mut PietText, line: usize, config: &Config, - ) -> PietTextLayout { + ) -> TextLayoutLine { let line_content = self.buffer.as_ref().unwrap().line_content(line); let font_family = config.editor.font_family(); let font_size = config.editor.font_size; @@ -129,7 +129,10 @@ impl DocumentHistory { } } - layout_builder.build().unwrap() + TextLayoutLine { + text: layout_builder.build().unwrap(), + extra_style: Vec::new(), + } } fn line_style(&self, line: usize) -> Arc> { diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index b1b44ff11b..be1e32a233 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -422,6 +422,7 @@ impl LapceEditor { data.config.editor.font_size, &data.config, ) + .text .size() .width, ), @@ -437,6 +438,7 @@ impl LapceEditor { data.config.editor.font_size, &data.config, ) + .text .size() .width, ), @@ -540,7 +542,7 @@ impl LapceEditor { &data.config, ); ctx.draw_text( - &text_layout, + &text_layout.text, Point::new(x, if is_small { y } else { y + y_shift }), ); y += line_height as f64; @@ -631,7 +633,7 @@ impl LapceEditor { &data.config, ); ctx.draw_text( - &text_layout, + &text_layout.text, Point::new( 0.0, line_height * l as f64 + y_shift, @@ -718,7 +720,7 @@ impl LapceEditor { &data.config, ); ctx.draw_text( - &text_layout, + &text_layout.text, Point::new( 0.0, line_height * l as f64 + y_shift, @@ -777,7 +779,7 @@ impl LapceEditor { &data.config, ); ctx.draw_text( - &text_layout, + &text_layout.text, Point::new( 0.0, line_height * l as f64 + y_shift, @@ -817,15 +819,16 @@ impl LapceEditor { font_size, &data.config, ); - ctx.draw_text( - &text_layout, - Point::new( - 0.0, - line_height * line as f64 - + (line_height - text_layout.size().height) / 2.0 - + line_padding, - ), - ); + let y = line_height * line as f64 + + (line_height - text_layout.text.size().height) / 2.0 + + line_padding; + let height = text_layout.text.size().height; + for (x0, x1, style) in text_layout.extra_style.iter() { + if let Some(bg) = &style.bg_color { + ctx.fill(Rect::new(*x0, y, *x1, y + height), bg); + } + } + ctx.draw_text(&text_layout.text, Point::new(0.0, y)); } } @@ -1516,8 +1519,10 @@ impl LapceEditor { data.config.editor.font_size, &data.config, ); - let x0 = text_layout.hit_test_text_position(left_col).point.x; - let x1 = text_layout.hit_test_text_position(right_col).point.x; + let x0 = + text_layout.text.hit_test_text_position(left_col).point.x; + let x1 = + text_layout.text.hit_test_text_position(right_col).point.x; let y0 = line as f64 * line_height; let y1 = y0 + line_height; let rect = Rect::new(x0, y0, x1, y1); @@ -1673,7 +1678,7 @@ impl LapceEditor { ); let x0 = if line == start.line as usize { let col = inlay_hints.col_at(start.character as usize); - text_layout.hit_test_text_position(col).point.x + text_layout.text.hit_test_text_position(col).point.x } else { let (_, col) = data.doc.buffer().offset_to_line_col( data.doc @@ -1681,16 +1686,16 @@ impl LapceEditor { .first_non_blank_character_on_line(line), ); let col = inlay_hints.col_at(col); - text_layout.hit_test_text_position(col).point.x + text_layout.text.hit_test_text_position(col).point.x }; let x1 = if line == end.line as usize { let col = inlay_hints.col_at(end.character as usize); - text_layout.hit_test_text_position(col).point.x + text_layout.text.hit_test_text_position(col).point.x } else { let col = data.doc.buffer().line_end_col(line, false) + 1; let col = inlay_hints.col_at(col); - text_layout.hit_test_text_position(col).point.x + text_layout.text.hit_test_text_position(col).point.x }; let _y1 = (line + 1) as f64 * line_height; let y0 = (line + 1) as f64 * line_height - 4.0; diff --git a/lapce-ui/src/settings.rs b/lapce-ui/src/settings.rs index d03544166e..b21fc3827f 100644 --- a/lapce-ui/src/settings.rs +++ b/lapce-ui/src/settings.rs @@ -1329,8 +1329,8 @@ impl Widget for ThemeSettings { .default_theme .syntax .get(&self.keys[i]) - .unwrap() - .to_string(); + .cloned() + .unwrap_or_else(|| "".to_string()); ( data.config.theme.syntax.get(&self.keys[i]).unwrap() != &default, From 9e68a8c3e2e7c328dbfc0825df3a6530c70f2432 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 12:17:49 +0100 Subject: [PATCH 050/816] get inlay hints when lsp is ready --- lapce-ui/src/tab.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 153137f54a..100087882e 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -953,6 +953,12 @@ impl LapceTab { } } lsp_types::WorkDoneProgress::End(_end) => { + for view_id in data.main_split.editors.keys() + { + let editor_data = + data.editor_view_content(*view_id); + editor_data.get_inlay_hints(ctx); + } for i in data .progresses .iter() From 46b036867e019513921ffa9dd9cad5848b8e9c1b Mon Sep 17 00:00:00 2001 From: panekj Date: Sat, 2 Jul 2022 18:06:21 +0200 Subject: [PATCH 051/816] feat: add option to use lsp from PATH --- lapce-proxy/src/plugin.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lapce-proxy/src/plugin.rs b/lapce-proxy/src/plugin.rs index 7378fb4e05..c0a62fedc7 100644 --- a/lapce-proxy/src/plugin.rs +++ b/lapce-proxy/src/plugin.rs @@ -249,6 +249,7 @@ pub enum PluginNotification { exec_path: String, language_id: String, options: Option, + system_lsp: bool, }, DownloadFile { url: String, @@ -271,8 +272,17 @@ fn host_handle_notification(plugin_env: &PluginEnv) { exec_path, language_id, options, + system_lsp, } => { - plugin_env.dispatcher.lsp.lock().start_server( + let exec_path = if system_lsp { + // System LSP should be handled by PATH during + // process creation, so we forbid anything that + // is not just an executable name + match PathBuf::from(&exec_path).file_name() { + Some(v) => v.to_str().unwrap().to_string(), + None => return, + } + } else { plugin_env .desc .dir @@ -280,7 +290,11 @@ fn host_handle_notification(plugin_env: &PluginEnv) { .unwrap() .join(&exec_path) .to_str() - .unwrap(), + .unwrap() + .to_string() + }; + plugin_env.dispatcher.lsp.lock().start_server( + &exec_path, &language_id, options, ); From c179be7e9120595f50f168c8f61ba72615315d19 Mon Sep 17 00:00:00 2001 From: panekj Date: Thu, 30 Jun 2022 16:44:21 +0200 Subject: [PATCH 052/816] feat: implement custom titlebar matching editor style on Windows --- defaults/settings.toml | 1 + lapce-data/src/config.rs | 9 ++ lapce-ui/src/app.rs | 14 ++- lapce-ui/src/title.rs | 254 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 266 insertions(+), 12 deletions(-) diff --git a/defaults/settings.toml b/defaults/settings.toml index 8886bf44db..997dc9dca4 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -32,6 +32,7 @@ status-height = 25 tab-min-width = 100 scroll-width = 10 drop-shadow-width = 0 +custom-titlebar = false [theme] name = "" diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index 0d13e81e33..ce03675626 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -225,6 +225,11 @@ pub struct UIConfig { #[field_names(desc = "Controls the width of drop shadow in the UI")] drop_shadow_width: usize, + + #[field_names( + desc = "Enable customised titlebar and disable OS native one (Windows only)" + )] + custom_titlebar: bool, } impl UIConfig { @@ -261,6 +266,10 @@ impl UIConfig { pub fn drop_shadow_width(&self) -> usize { self.drop_shadow_width } + + pub fn custom_titlebar(&self) -> bool { + self.custom_titlebar + } } #[derive(FieldNames, Debug, Clone, Deserialize, Serialize, Default)] diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 4d27914d19..52e26c5701 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use druid::{ AppDelegate, AppLauncher, Command, Env, Event, LocalizedString, Point, Size, Widget, WidgetExt, WindowDesc, WindowHandle, WindowId, WindowState, @@ -61,6 +63,7 @@ pub fn launch() { window_data.size, window_data.pos, window_data.maximised, + &window_data.config, ); launcher = launcher.with_window(window); } @@ -75,6 +78,8 @@ fn new_window_desc( size: Size, pos: Point, maximised: bool, + #[cfg(target_os = "windows")] config: &Arc, + #[cfg(not(target_os = "windows"))] _config: &Arc, ) -> WindowDesc where W: Widget + 'static, @@ -83,6 +88,12 @@ where .title(LocalizedString::new("Lapce").with_placeholder("Lapce")) .window_size(size) .set_position(pos); + + #[cfg(target_os = "windows")] + if config.ui.custom_titlebar() { + desc = desc.show_titlebar(false); + } + if maximised { desc = desc.set_window_state(WindowState::Maximized); } @@ -227,13 +238,14 @@ impl AppDelegate for LapceAppDelegate { ); let root = build_window(&mut window_data); let window_id = window_data.window_id; - data.windows.insert(window_id, window_data); + data.windows.insert(window_id, window_data.clone()); let desc = new_window_desc( window_id, root, info.size, info.pos, info.maximised, + &window_data.config, ); ctx.new_window(desc); return druid::Handled::Yes; diff --git a/lapce-ui/src/title.rs b/lapce-ui/src/title.rs index ac7e922613..7c01009af0 100644 --- a/lapce-ui/src/title.rs +++ b/lapce-ui/src/title.rs @@ -8,7 +8,7 @@ use druid::{ LifeCycleCtx, MouseEvent, PaintCtx, Point, Rect, RenderContext, Size, Target, UpdateCtx, Widget, }; -#[cfg(target_os = "macos")] +#[cfg(any(target_os = "macos", target_os = "windows"))] use druid::{WindowConfig, WindowState}; use lapce_data::{ command::{ @@ -64,8 +64,10 @@ impl Widget for Title { &mut self, ctx: &mut EventCtx, event: &Event, - #[cfg(target_os = "macos")] data: &mut LapceWindowData, - #[cfg(not(target_os = "macos"))] _data: &mut LapceWindowData, + #[cfg(any(target_os = "macos", target_os = "windows"))] + data: &mut LapceWindowData, + #[cfg(not(any(target_os = "macos", target_os = "windows")))] + _data: &mut LapceWindowData, _env: &Env, ) { match event { @@ -77,14 +79,20 @@ impl Widget for Title { } else { ctx.clear_cursor(); ctx.request_paint(); + + #[cfg(target_os = "windows")] + // ! Currently implemented on Windows only + ctx.window().handle_titlebar(true); } } Event::MouseDown(mouse_event) => { self.mouse_down(ctx, mouse_event); } - #[cfg(target_os = "macos")] + #[cfg(any(target_os = "macos", target_os = "windows"))] Event::MouseUp(mouse_event) => { - if mouse_event.count >= 2 { + if (cfg!(target_os = "macos") || data.config.ui.custom_titlebar()) + && mouse_event.count >= 2 + { let state = match ctx.window().get_window_state() { WindowState::Maximized => WindowState::Restored, WindowState::Restored => WindowState::Maximized, @@ -112,11 +120,25 @@ impl Widget for Title { fn update( &mut self, - _ctx: &mut UpdateCtx, - _old_data: &LapceWindowData, - _data: &LapceWindowData, + #[cfg(target_os = "windows")] ctx: &mut UpdateCtx, + #[cfg(not(target_os = "windows"))] _ctx: &mut UpdateCtx, + #[cfg(target_os = "windows")] old_data: &LapceWindowData, + #[cfg(not(target_os = "windows"))] _old_data: &LapceWindowData, + #[cfg(target_os = "windows")] data: &LapceWindowData, + #[cfg(not(target_os = "windows"))] _data: &LapceWindowData, _env: &Env, ) { + #[cfg(target_os = "windows")] + if old_data.config.ui.custom_titlebar() != data.config.ui.custom_titlebar() { + ctx.submit_command( + druid::commands::CONFIGURE_WINDOW + .with( + WindowConfig::default() + .show_titlebar(!data.config.ui.custom_titlebar()), + ) + .to(Target::Window(data.window_id)), + ) + } } fn layout( @@ -126,7 +148,15 @@ impl Widget for Title { _data: &LapceWindowData, _env: &Env, ) -> Size { - Size::new(bc.max().width, 28.0) + #[cfg(not(target_os = "windows"))] + { + Size::new(bc.max().width, 28.0) + } + + #[cfg(target_os = "windows")] + { + Size::new(bc.max().width, 32.0) + } } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceWindowData, _env: &Env) { @@ -147,6 +177,27 @@ impl Widget for Title { let padding = 15.0; + #[cfg(target_os = "windows")] + { + let logo_rect = Size::new(size.height, size.height) + .to_rect() + .with_origin(Point::new(x, 0.0)); + let logo_svg = crate::svg::logo_svg(); + ctx.draw_svg( + &logo_svg, + logo_rect.inflate(-5.0, -5.0), + Some( + &data + .config + .get_color_unchecked(LapceTheme::EDITOR_DIM) + .clone() + .with_alpha(0.5), + ), + ); + + x += size.height; + } + let command_rect = Size::ZERO.to_rect().with_origin(Point::new(x, 0.0)); let tab = data.tabs.get(&data.active_id).unwrap(); let remote_text = match &tab.workspace.kind { @@ -448,8 +499,39 @@ impl Widget for Title { ctx.stroke(line, line_color, 1.0); } - x = size.width; - x -= size.height; + #[cfg(target_os = "windows")] + { + let title_layout = ctx + .text() + .new_text_layout(String::from("Lapce")) + .font( + data.config.ui.font_family(), + data.config.ui.font_size() as f64, + ) + .text_color( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ) + .build() + .unwrap(); + ctx.draw_text( + &title_layout, + Point::new( + (size.width - title_layout.size().width) / 2.0, + (size.height - title_layout.size().height) / 2.0, + ), + ); + + if data.config.ui.custom_titlebar() { + x = size.width - (size.height * 4.0); + } + } + + if cfg!(not(target_os = "windows")) || !data.config.ui.custom_titlebar() { + x = size.width - size.height; + } + let settings_rect = Size::new(size.height, size.height) .to_rect() .with_origin(Point::new(x, 0.0)); @@ -505,5 +587,155 @@ impl Widget for Title { Target::Auto, ), )); + + #[cfg(target_os = "windows")] + if data.config.ui.custom_titlebar() { + let font_size = 10.0; + let font_family = "Segoe MDL2 Assets"; + + #[derive(strum_macros::Display)] + enum WindowControls { + Minimise, + Maximise, + Restore, + Close, + } + + impl WindowControls { + fn as_str(&self) -> &'static str { + match self { + WindowControls::Minimise => "\u{E949}", + WindowControls::Maximise => "\u{E739}", + WindowControls::Restore => "\u{E923}", + WindowControls::Close => "\u{E106}", + } + } + } + + x += size.height; + let minimise_text = ctx + .text() + .new_text_layout(WindowControls::Minimise.as_str()) + .font(ctx.text().font_family(font_family).unwrap(), font_size) + .text_color( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ) + .build() + .unwrap(); + ctx.draw_text( + &minimise_text, + Point::new( + x + ((minimise_text.size().width + 5.0) / 2.0), + (size.height - minimise_text.size().height) / 2.0, + ), + ); + let minimise_rect = Size::new( + size.height + + Some(minimise_text) + .as_ref() + .map(|t| t.size().width.round() + padding - 5.0) + .unwrap_or(0.0), + size.height, + ) + .to_rect() + .with_origin(Point::new(x, 0.0)); + + self.commands.push(( + minimise_rect, + Command::new( + druid::commands::CONFIGURE_WINDOW, + WindowConfig::default().set_window_state(WindowState::Minimized), + Target::Window(data.window_id), + ), + )); + + x += size.height; + + let max_res_icon; + let max_res_state; + + if ctx.window().get_window_state() == WindowState::Restored { + max_res_icon = WindowControls::Maximise; + max_res_state = WindowState::Maximized; + } else { + max_res_icon = WindowControls::Restore; + max_res_state = WindowState::Restored; + }; + + let max_res_text = ctx + .text() + .new_text_layout(max_res_icon.as_str()) + .font(ctx.text().font_family(font_family).unwrap(), font_size) + .text_color( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ) + .build() + .unwrap(); + ctx.draw_text( + &max_res_text, + Point::new( + x + ((max_res_text.size().width + 5.0) / 2.0), + (size.height - max_res_text.size().height) / 2.0, + ), + ); + + let max_res_rect = Size::new( + size.height + + Some(max_res_text) + .as_ref() + .map(|t| t.size().width.round() + padding - 5.0) + .unwrap_or(0.0), + size.height, + ) + .to_rect() + .with_origin(Point::new(x, 0.0)); + self.commands.push(( + max_res_rect, + Command::new( + druid::commands::CONFIGURE_WINDOW, + WindowConfig::default().set_window_state(max_res_state), + Target::Window(data.window_id), + ), + )); + + x += size.height; + let close_text = ctx + .text() + .new_text_layout(WindowControls::Close.as_str()) + .font(ctx.text().font_family(font_family).unwrap(), font_size) + .text_color( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) + .clone(), + ) + .build() + .unwrap(); + ctx.draw_text( + &close_text, + Point::new( + x + ((close_text.size().width + 5.0) / 2.0), + (size.height - close_text.size().height) / 2.0, + ), + ); + let close_rect = Size::new( + size.height + + Some(close_text) + .as_ref() + .map(|t| t.size().width.round() + padding + 5.0) + .unwrap_or(0.0), + size.height, + ) + .to_rect() + .with_origin(Point::new(x, 0.0)); + + self.commands.push(( + close_rect, + Command::new(druid::commands::QUIT_APP, (), Target::Global), + )); + } } } From fafa115fdc64f1aeb7ff371f7a7784a355c28274 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 20:34:37 +0100 Subject: [PATCH 053/816] Update inlay hints position when editing --- lapce-data/src/command.rs | 2 +- lapce-data/src/document.rs | 143 ++++++++++++++++-------------------- lapce-data/src/editor.rs | 20 ++++- lapce-ui/src/editor.rs | 129 ++++++++++++++++++-------------- lapce-ui/src/editor/view.rs | 14 ++-- lapce-ui/src/tab.rs | 2 +- 6 files changed, 164 insertions(+), 146 deletions(-) diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 364b736f01..88a7c66764 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -445,7 +445,7 @@ pub enum LapceUICommand { UpdateInlayHints { path: PathBuf, rev: u64, - hints: Vec, + hints: Spans, }, UpdateCodeActions(PathBuf, u64, usize, CodeActionResponse), CancelPalette, diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 53456a90e4..4f315b69ad 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -188,44 +188,17 @@ impl BufferContent { } } -#[derive(Clone)] -pub struct InlayHints { - /// Hints should be sorted so that earlier hints come before later hints to simplify - /// code that uses them - hints: im::Vector, -} -impl InlayHints { - pub fn new(inlay_hints: im::Vector) -> InlayHints { - InlayHints { hints: inlay_hints } - } - - pub fn clear(&mut self) { - self.hints.clear(); - } - - pub fn hints_at_line(&self, line: u32) -> InlayHintsLine { - let hints = self.iter_line(line).collect::>(); - InlayHintsLine { hints } - } - - /// Iterate over all the hints at the line - pub fn iter_line(&self, line: u32) -> impl Iterator { - self.hints - .iter() - .filter(move |hint| hint.position.line == line) - } -} - #[derive(Default)] pub struct InlayHintsLine<'a> { - hints: SmallVec<[&'a InlayHint; 6]>, + hints: SmallVec<[(usize, &'a InlayHint); 6]>, } + impl<'a> InlayHintsLine<'a> { /// Translate a column position into the text into what it would be after combining pub fn col_at(&self, pre_col: usize) -> usize { let mut last = pre_col; - for (col_shift, size, hint) in self.offset_size_iter() { - if pre_col >= hint.position.character as usize { + for (col_shift, size, _, col) in self.offset_size_iter() { + if pre_col >= col { last = pre_col + col_shift + size; } } @@ -237,8 +210,8 @@ impl<'a> InlayHintsLine<'a> { /// If the cursor is right at the start then it will stay there pub fn col_after(&self, pre_col: usize) -> usize { let mut last = pre_col; - for (col_shift, size, hint) in self.offset_size_iter() { - if pre_col > hint.position.character as usize { + for (col_shift, size, _, col) in self.offset_size_iter() { + if pre_col > col { last = pre_col + col_shift + size; } } @@ -249,14 +222,14 @@ impl<'a> InlayHintsLine<'a> { /// Translate a column position into the position it would be before combining pub fn before_col(&self, col: usize) -> usize { let mut last = col; - for (col_shift, size, hint) in self.offset_size_iter() { - let shifted_start = hint.position.character as usize + col_shift; + for (col_shift, size, _, hint_col) in self.offset_size_iter() { + let shifted_start = hint_col + col_shift; let shifted_end = shifted_start + size; if col >= shifted_start { if col >= shifted_end { last = col - col_shift - size; } else { - last = hint.position.character as usize; + last = hint_col; } } } @@ -266,10 +239,10 @@ impl<'a> InlayHintsLine<'a> { /// Insert the hints at their positions in the text pub fn combine_with_text<'b>(&self, mut text: Cow<'b, str>) -> Cow<'b, str> { let mut col_shift = 0; - for hint in self.hints.iter() { + for (col, hint) in self.hints.iter() { let mut otext = text.into_owned(); - let location = hint.position.character as usize + col_shift; + let location = col + col_shift; // Stop iterating if the location is bad if otext.get(location..).is_none() { @@ -310,9 +283,9 @@ impl<'a> InlayHintsLine<'a> { /// Iterator over (col_shift, size, hint) pub fn offset_size_iter( &self, - ) -> impl Iterator + '_ { + ) -> impl Iterator + '_ { let mut col_shift = 0; - self.hints.iter().map(move |hint| { + self.hints.iter().map(move |(col, hint)| { let pre_col_shift = col_shift; match &hint.label { InlayHintLabel::String(label) => { @@ -333,7 +306,7 @@ impl<'a> InlayHintsLine<'a> { col_shift += 1; } - (pre_col_shift, col_shift - pre_col_shift, *hint) + (pre_col_shift, col_shift - pre_col_shift, *hint, *col) }) } } @@ -354,7 +327,7 @@ pub struct Document { pub cursor_offset: usize, pub scroll_offset: Vec2, pub code_actions: im::HashMap, - pub inlay_hints: InlayHints, + pub inlay_hints: Option>, pub find: Rc>, find_progress: Rc>, pub event_sink: ExtEventSink, @@ -394,7 +367,7 @@ impl Document { cursor_offset: 0, scroll_offset: Vec2::ZERO, code_actions: im::HashMap::new(), - inlay_hints: InlayHints::new(im::Vector::new()), + inlay_hints: None, find: Rc::new(RefCell::new(Find::new(0))), find_progress: Rc::new(RefCell::new(FindProgress::Ready)), event_sink, @@ -442,7 +415,7 @@ impl Document { pub fn reload(&mut self, content: Rope, set_pristine: bool) { self.code_actions.clear(); - self.inlay_hints.clear(); + self.inlay_hints = None; let delta = self.buffer.reload(content, set_pristine); self.apply_deltas(&[delta]); } @@ -753,27 +726,9 @@ impl Document { /// Update the inlay hints with new ones /// Clears any caches that need to be updated after change - pub fn update_inlay_hints(&mut self, mut inlay_hints: im::Vector) { - // TODO: Can we do a smart comparison? Most of the time, the change isn't notable - // we could just ask the LSP for the data in the area around the edited range? or - // just in view? - - // Remove all the text layouts that have existing hints - for hint in &self.inlay_hints.hints { - let line = hint.position.line as usize; - self.text_layouts.borrow_mut().layouts.remove(&line); - } - - // Sort it to ensure the later inlay hints come after early hints - inlay_hints.sort_by(|a, b| a.position.cmp(&b.position)); - - self.inlay_hints.hints = inlay_hints; - - // Remove all the text layouts that have new hints - for hint in &self.inlay_hints.hints { - let line = hint.position.line as usize; - self.text_layouts.borrow_mut().layouts.remove(&line); - } + pub fn set_inlay_hints(&mut self, hints: Spans) { + self.inlay_hints = Some(hints); + self.clear_text_layout_cache(); } pub fn buffer(&self) -> &Buffer { @@ -802,10 +757,37 @@ impl Document { } } + fn update_inlay_hints(&mut self, delta: &RopeDelta) { + if let Some(hints) = self.inlay_hints.as_mut() { + hints.apply_shape(delta); + } + } + + pub fn line_inlay_hints(&self, line: usize) -> Option { + let start_offset = self.buffer.offset_of_line(line); + let end_offset = self.buffer.offset_of_line(line + 1); + self.inlay_hints.as_ref().map(|hints| InlayHintsLine { + hints: hints + .iter_chunks(start_offset..end_offset) + .filter_map(|(interval, inlay_hint)| { + if interval.start >= start_offset && interval.start < end_offset + { + let (_, col) = + self.buffer.offset_to_line_col(interval.start); + Some((col, inlay_hint)) + } else { + None + } + }) + .collect(), + }) + } + fn apply_deltas(&mut self, deltas: &[(RopeDelta, InvalLines)]) { let rev = self.rev() - deltas.len() as u64; for (i, (delta, _)) in deltas.iter().enumerate() { self.update_styles(delta); + self.update_inlay_hints(delta); if self.content.is_file() { self.proxy.update(self.id, delta, rev + i as u64 + 1); } @@ -1156,11 +1138,12 @@ impl Document { let line = ((point.y / config.editor.line_height as f64).floor() as usize) .min(last_line); - let inlay_hints = if config.editor.enable_inlay_hints { - self.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| self.line_inlay_hints(line)) + .unwrap_or_default(); let text_layout = self.get_text_layout(text, line, font_size, config); let hit_point = text_layout.text.hit_test_point(Point::new(point.x, 0.0)); @@ -1215,12 +1198,12 @@ impl Document { ) -> TextLayoutLine { let line_content = self.buffer.line_content(line); - let inlay_hints = if config.editor.enable_inlay_hints { - self.inlay_hints.hints_at_line(line as u32) - } else { - // empty inlay hints - InlayHintsLine::default() - }; + let inlay_hints = config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| self.line_inlay_hints(line)) + .unwrap_or_default(); let line_content = inlay_hints.combine_with_text(line_content); let tab_width = @@ -1262,8 +1245,8 @@ impl Document { } // Give the inlay hints their styling - for (offset, size, hint) in inlay_hints.offset_size_iter() { - let start = hint.position.character as usize + offset; + for (offset, size, _, col) in inlay_hints.offset_size_iter() { + let start = col + offset; let end = start + size; layout_builder = layout_builder.range_attribute( start..end, @@ -1285,8 +1268,8 @@ impl Document { let text = layout_builder.build().unwrap(); let mut extra_style = Vec::new(); - for (offset, size, hint) in inlay_hints.offset_size_iter() { - let start = hint.position.character as usize + offset; + for (offset, size, _, col) in inlay_hints.offset_size_iter() { + let start = col + offset; let end = start + size; let x0 = text.hit_test_text_position(start).point.x; let x1 = text.hit_test_text_position(end).point.x; diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 2fb6908ead..6b273504b5 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -60,6 +60,8 @@ use std::thread; use std::{collections::HashMap, sync::Arc}; use std::{iter::Iterator, path::PathBuf}; use std::{str::FromStr, time::Duration}; +use xi_rope::spans::SpansBuilder; +use xi_rope::Interval; use xi_rope::{RopeDelta, Transformer}; pub struct LapceUI {} @@ -166,10 +168,13 @@ impl LapceEditorBufferData { if let BufferContent::File(path) = self.doc.content() { // TODO: check if we already have inlay hints for this file? + let tab_id = self.doc.tab_id; let path = path.clone(); let buffer_id = self.doc.id(); let rev = self.doc.rev(); let event_sink = ctx.get_external_handle(); + let len = self.doc.buffer().len(); + let buffer = self.doc.buffer().clone(); self.proxy.get_inlay_hints( buffer_id, Box::new(move |result| { @@ -177,14 +182,25 @@ impl LapceEditorBufferData { if let Ok(resp) = serde_json::from_value::>(res) { + let mut hints_span = SpansBuilder::new(len); + for hint in resp { + let offset = buffer + .offset_of_position(&hint.position) + .min(len); + hints_span.add_span( + Interval::new(offset, (offset + 1).min(len)), + hint.clone(), + ); + } + let hints = hints_span.build(); let _ = event_sink.submit_command( LAPCE_UI_COMMAND, LapceUICommand::UpdateInlayHints { path, rev, - hints: resp, + hints, }, - Target::Auto, + Target::Widget(tab_id), ); } } diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index be1e32a233..051e9cbee5 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -19,7 +19,7 @@ use lapce_core::{ }; use lapce_data::command::CommandKind; use lapce_data::data::{EditorView, LapceData}; -use lapce_data::document::{BufferContent, InlayHintsLine, LocalBufferKind}; +use lapce_data::document::{BufferContent, LocalBufferKind}; use lapce_data::keypress::KeyPressFocus; use lapce_data::menu::MenuKind; use lapce_data::panel::{PanelData, PanelKind}; @@ -937,11 +937,13 @@ impl LapceEditor { let start_offset = data.doc.buffer().offset_of_line(actual_line); let end_offset = data.doc.buffer().offset_of_line(actual_line + 1); let regions = selection.regions_in_range(start_offset, end_offset); - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(actual_line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(actual_line)) + .unwrap_or_default(); for region in regions { if region.is_caret() { let caret_actual_line = @@ -1096,11 +1098,13 @@ impl LapceEditor { Self::paint_cursor_line(data, ctx, line, is_focused, placeholder); if is_focused { - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); // Shift it by the inlay hints let col = inlay_hints.col_after(col); @@ -1200,11 +1204,13 @@ impl LapceEditor { } }; - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let left_col = inlay_hints.col_after(left_col); let right_col = inlay_hints.col_after(right_col); @@ -1243,11 +1249,13 @@ impl LapceEditor { if is_focused { let (line, col) = data.doc.buffer().offset_to_line_col(*end); - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let col = inlay_hints.col_after(col); @@ -1346,12 +1354,13 @@ impl LapceEditor { _ => data.doc.buffer().line_end_col(line, true), }; - let inlay_hints = - if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); // Shift it by the inlay hints let left_col = inlay_hints.col_after(left_col); @@ -1396,11 +1405,13 @@ impl LapceEditor { let (line, col) = data.doc.buffer().offset_to_line_col(region.end()); - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); // Shift it by the inlay hints let col = inlay_hints.col_after(col); @@ -1497,11 +1508,13 @@ impl LapceEditor { data.doc.buffer().offset_to_line_col(start); let (end_line, end_col) = data.doc.buffer().offset_to_line_col(end); for line in start_line..end_line + 1 { - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let left_col = if line == start_line { start_col } else { 0 }; let left_col = inlay_hints.col_at(left_col); @@ -1574,11 +1587,13 @@ impl LapceEditor { let line_content = data.doc.buffer().line_content(line); - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let left_col = match line { _ if line == start_line => start_col, @@ -1664,11 +1679,13 @@ impl LapceEditor { break; } - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let text_layout = data.doc.get_text_layout( ctx.text(), @@ -1976,15 +1993,15 @@ impl Widget for LapceEditor { .buffer() .offset_to_line_col(offset); - let inlay_hints = - if data.config.editor.enable_inlay_hints { - editor_data - .doc - .inlay_hints - .hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| { + editor_data.doc.line_inlay_hints(line) + }) + .unwrap_or_default(); let col = inlay_hints.col_at(col); diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 136ecb6f99..4d559ac5c1 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -19,7 +19,7 @@ use lapce_data::{ }, config::{EditorConfig, LapceTheme}, data::{EditorTabChild, EditorView, FocusArea, LapceTabData}, - document::{BufferContent, InlayHintsLine, LocalBufferKind}, + document::{BufferContent, LocalBufferKind}, editor::LapceEditorBufferData, keypress::KeyPressFocus, panel::{PanelData, PanelKind}, @@ -437,11 +437,13 @@ impl LapceEditorView { fn cursor_region(data: &LapceEditorBufferData, text: &mut PietText) -> Rect { let offset = data.editor.cursor.offset(); let (line, col) = data.doc.buffer().offset_to_line_col(offset); - let inlay_hints = if data.config.editor.enable_inlay_hints { - data.doc.inlay_hints.hints_at_line(line as u32) - } else { - InlayHintsLine::default() - }; + let inlay_hints = data + .config + .editor + .enable_inlay_hints + .then_some(()) + .and_then(|_| data.doc.line_inlay_hints(line)) + .unwrap_or_default(); let col = inlay_hints.col_at(col); let width = data.config.editor_char_width(text); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 100087882e..b667a3b545 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -1250,7 +1250,7 @@ impl LapceTab { LapceUICommand::UpdateInlayHints { path, rev, hints } => { if let Some(doc) = data.main_split.open_docs.get_mut(path) { if doc.rev() == *rev { - Arc::make_mut(doc).update_inlay_hints(hints.into()); + Arc::make_mut(doc).set_inlay_hints(hints.clone()); } } } From 4999f003f3fc9ee6a7eeb76e06e0f784322dd312 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 20:49:16 +0100 Subject: [PATCH 054/816] get inlay hints only when editing --- lapce-data/src/document.rs | 57 ++++++++++++++++++++++++++++++++++- lapce-data/src/editor.rs | 59 ------------------------------------- lapce-ui/src/editor/view.rs | 1 - lapce-ui/src/tab.rs | 2 +- 4 files changed, 57 insertions(+), 62 deletions(-) diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 4f315b69ad..f0393e0284 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -39,7 +39,10 @@ use lsp_types::{ }; use serde::{Deserialize, Serialize}; use smallvec::SmallVec; -use xi_rope::{spans::Spans, Rope, RopeDelta}; +use xi_rope::{ + spans::{Spans, SpansBuilder}, + Interval, Rope, RopeDelta, +}; use crate::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, @@ -610,9 +613,61 @@ impl Document { } } + pub fn get_inlay_hints(&self) { + if !self.loaded() { + return; + } + + if !self.content().is_file() { + return; + } + + if let BufferContent::File(path) = self.content() { + let tab_id = self.tab_id; + let path = path.clone(); + let buffer_id = self.id(); + let rev = self.rev(); + let len = self.buffer().len(); + let buffer = self.buffer().clone(); + let event_sink = self.event_sink.clone(); + self.proxy.get_inlay_hints( + buffer_id, + Box::new(move |result| { + if let Ok(res) = result { + if let Ok(resp) = + serde_json::from_value::>(res) + { + let mut hints_span = SpansBuilder::new(len); + for hint in resp { + let offset = buffer + .offset_of_position(&hint.position) + .min(len); + hints_span.add_span( + Interval::new(offset, (offset + 1).min(len)), + hint.clone(), + ); + } + let hints = hints_span.build(); + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::UpdateInlayHints { + path, + rev, + hints, + }, + Target::Widget(tab_id), + ); + } + } + }), + ); + } + } + fn on_update(&mut self, delta: Option<&RopeDelta>) { self.find.borrow_mut().unset(); *self.find_progress.borrow_mut() = FindProgress::Started; + self.get_inlay_hints(); self.clear_style_cache(); self.trigger_syntax_change(delta); self.trigger_head_change(); diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 6b273504b5..0a397c40c4 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -44,7 +44,6 @@ use lsp_types::CodeActionOrCommand; use lsp_types::CompletionTextEdit; use lsp_types::DocumentChangeOperation; use lsp_types::DocumentChanges; -use lsp_types::InlayHint; use lsp_types::OneOf; use lsp_types::TextEdit; use lsp_types::Url; @@ -60,8 +59,6 @@ use std::thread; use std::{collections::HashMap, sync::Arc}; use std::{iter::Iterator, path::PathBuf}; use std::{str::FromStr, time::Duration}; -use xi_rope::spans::SpansBuilder; -use xi_rope::Interval; use xi_rope::{RopeDelta, Transformer}; pub struct LapceUI {} @@ -153,62 +150,6 @@ impl LapceEditorBufferData { } } - pub fn get_inlay_hints(&self, ctx: &mut EventCtx) { - if !self.doc.loaded() { - return; - } - - if !self.doc.content().is_file() { - return; - } - - if !self.config.editor.enable_inlay_hints { - return; - } - - if let BufferContent::File(path) = self.doc.content() { - // TODO: check if we already have inlay hints for this file? - let tab_id = self.doc.tab_id; - let path = path.clone(); - let buffer_id = self.doc.id(); - let rev = self.doc.rev(); - let event_sink = ctx.get_external_handle(); - let len = self.doc.buffer().len(); - let buffer = self.doc.buffer().clone(); - self.proxy.get_inlay_hints( - buffer_id, - Box::new(move |result| { - if let Ok(res) = result { - if let Ok(resp) = - serde_json::from_value::>(res) - { - let mut hints_span = SpansBuilder::new(len); - for hint in resp { - let offset = buffer - .offset_of_position(&hint.position) - .min(len); - hints_span.add_span( - Interval::new(offset, (offset + 1).min(len)), - hint.clone(), - ); - } - let hints = hints_span.build(); - let _ = event_sink.submit_command( - LAPCE_UI_COMMAND, - LapceUICommand::UpdateInlayHints { - path, - rev, - hints, - }, - Target::Widget(tab_id), - ); - } - } - }), - ); - } - } - pub fn get_code_actions(&self, ctx: &mut EventCtx) { if !self.doc.loaded() { return; diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 4d559ac5c1..d517bfaee3 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -627,7 +627,6 @@ impl Widget for LapceEditorView { editor_data.sync_buffer_position( self.editor.widget().editor.widget().inner().offset(), ); - editor_data.get_inlay_hints(ctx); editor_data.get_code_actions(ctx); data.keypress = keypress.clone(); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index b667a3b545..7b4c03e3e6 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -957,7 +957,7 @@ impl LapceTab { { let editor_data = data.editor_view_content(*view_id); - editor_data.get_inlay_hints(ctx); + editor_data.doc.get_inlay_hints(); } for i in data .progresses From f0070920b4854cacf62a217a0ad3f783345fa770 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Sat, 2 Jul 2022 15:12:26 -0500 Subject: [PATCH 055/816] Sort inlay hints --- lapce-data/src/document.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index f0393e0284..c2d0a524c2 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -634,9 +634,16 @@ impl Document { buffer_id, Box::new(move |result| { if let Ok(res) = result { - if let Ok(resp) = + if let Ok(mut resp) = serde_json::from_value::>(res) { + // Sort the inlay hints by their position, as the LSP does not guarantee that it will + // provide them in the order that they are in within the file + // as well, Spans does not iterate in the order that they appear + resp.sort_by(|left, right| { + left.position.cmp(&right.position) + }); + let mut hints_span = SpansBuilder::new(len); for hint in resp { let offset = buffer From 049fed02d07255f3b956db0f0c5fa3a9ed656324 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 21:47:38 +0100 Subject: [PATCH 056/816] Fix resizing bottom panel Fix #727 --- lapce-data/src/panel.rs | 1 + lapce-ui/src/tab.rs | 187 ++++++++++++++++++---------------------- 2 files changed, 85 insertions(+), 103 deletions(-) diff --git a/lapce-data/src/panel.rs b/lapce-data/src/panel.rs index 5db5e68bd2..68f64a0e65 100644 --- a/lapce-data/src/panel.rs +++ b/lapce-data/src/panel.rs @@ -236,6 +236,7 @@ impl PanelData { } } +#[derive(Clone, PartialEq)] pub enum PanelResizePosition { Left, LeftSplit, diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 7b4c03e3e6..ba33627c01 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -78,7 +78,6 @@ pub struct LapceTab { current_bar_hover: Option, width: f64, height: f64, - main_split_height: f64, status_height: f64, mouse_pos: Point, } @@ -177,7 +176,6 @@ impl LapceTab { current_bar_hover: None, width: 0.0, height: 0.0, - main_split_height: 0.0, status_height: 0.0, mouse_pos: Point::ZERO, } @@ -305,46 +303,26 @@ impl LapceTab { } } - fn bar_hit_test( - &self, - data: &LapceTabData, - mouse_pos: Point, - ) -> Option { - let left = if data.panel.is_container_shown(&PanelContainerPosition::Left) { - let left = data.panel.size.left; - if mouse_pos.x >= left - 3.0 && mouse_pos.x <= left + 3.0 { - return Some(PanelResizePosition::Left); - } - left - } else { - 0.0 - }; + fn bar_hit_test(&self, mouse_pos: Point) -> Option { + let rect = self.main_split.layout_rect(); + let left = rect.x0; + let right = rect.x1; + let bottom = rect.y1; - let right = if data - .panel - .is_container_shown(&PanelContainerPosition::Right) - { - let right = self.panel_right.layout_rect().x0; - if mouse_pos.x >= right - 3.0 && mouse_pos.x <= right + 3.0 { - return Some(PanelResizePosition::Right); - } - right - } else { - 0.0 - }; + if mouse_pos.x >= left - 5.0 && mouse_pos.x <= left + 5.0 { + return Some(PanelResizePosition::Left); + } - if data - .panel - .is_container_shown(&PanelContainerPosition::Bottom) + if mouse_pos.x >= right - 5.0 && mouse_pos.x <= right + 5.0 { + return Some(PanelResizePosition::Right); + } + + if mouse_pos.x > left + && mouse_pos.x < right + && mouse_pos.y >= bottom - 5.0 + && mouse_pos.y <= bottom + 5.0 { - let y = self.main_split_height; - if mouse_pos.x > left - && mouse_pos.x < right - && mouse_pos.y >= y - 3.0 - && mouse_pos.y <= y + 3.0 - { - return Some(PanelResizePosition::Bottom); - } + return Some(PanelResizePosition::Bottom); } None @@ -603,7 +581,7 @@ impl LapceTab { match event { Event::MouseDown(mouse) => { if mouse.button.is_left() { - if let Some(position) = self.bar_hit_test(data, mouse.pos) { + if let Some(position) = self.bar_hit_test(mouse.pos) { self.current_bar_hover = Some(position); ctx.set_active(true); ctx.set_handled(); @@ -621,9 +599,13 @@ impl LapceTab { self.update_split_point(ctx, data, mouse.pos); ctx.request_layout(); ctx.set_handled(); - } else { - match self.bar_hit_test(data, mouse.pos) { + } else if data.drag.is_none() { + match self.bar_hit_test(mouse.pos) { Some(position) => { + if self.current_bar_hover.as_ref() != Some(&position) { + self.current_bar_hover = Some(position.clone()); + ctx.request_paint(); + } match position { PanelResizePosition::Left => { ctx.set_cursor(&druid::Cursor::ResizeLeftRight); @@ -641,6 +623,10 @@ impl LapceTab { ctx.set_handled(); } None => { + if self.current_bar_hover.is_some() { + self.current_bar_hover = None; + ctx.request_paint(); + } ctx.clear_cursor(); } } @@ -1881,7 +1867,6 @@ impl Widget for LapceTab { self.main_split.layout(ctx, &main_split_bc, data, env); self.main_split .set_origin(ctx, data, env, main_split_origin); - self.main_split_height = main_split_size.height; if data.completion.status != CompletionStatus::Inactive { let completion_origin = @@ -1946,72 +1931,68 @@ impl Widget for LapceTab { { self.panel_right.paint(ctx, data, env); } - if ctx.is_active() { - if let Some(position) = self.current_bar_hover.as_ref() { - let (p0, p1) = match position { - PanelResizePosition::Left => { - let rect = self.panel_left.layout_rect(); - if !data - .panel - .is_container_shown(&PanelContainerPosition::Left) - { - (Point::new(1.0, rect.y0), Point::new(1.0, rect.y1)) - } else { - ( - Point::new(rect.x1.round(), rect.y0), - Point::new(rect.x1.round(), rect.y1), - ) - } - } - PanelResizePosition::Right => { - let rect = self.panel_right.layout_rect(); - if !data - .panel - .is_container_shown(&PanelContainerPosition::Right) - { - ( - Point::new(rect.x1 - 1.0, rect.y0), - Point::new(rect.x1 - 1.0, rect.y1), - ) - } else { - ( - Point::new(rect.x0.round(), rect.y0), - Point::new(rect.x0.round(), rect.y1), - ) - } - } - PanelResizePosition::LeftSplit => { - let rect = self.panel_left.layout_rect(); + if let Some(position) = self.current_bar_hover.as_ref() { + let (p0, p1) = match position { + PanelResizePosition::Left => { + let rect = self.panel_left.layout_rect(); + if !data.panel.is_container_shown(&PanelContainerPosition::Left) + { + (Point::new(1.0, rect.y0), Point::new(1.0, rect.y1)) + } else { ( Point::new(rect.x1.round(), rect.y0), Point::new(rect.x1.round(), rect.y1), ) } - PanelResizePosition::Bottom => { - let rect = self.panel_bottom.layout_rect(); - if !data - .panel - .is_container_shown(&PanelContainerPosition::Bottom) - { - let status_rect = self.status.layout_rect(); - ( - Point::new(rect.x0, status_rect.y0 - 1.0), - Point::new(rect.x1, status_rect.y0 - 1.0), - ) - } else { - ( - Point::new(rect.x0, rect.y0.round()), - Point::new(rect.x1, rect.y0.round()), - ) - } + } + PanelResizePosition::Right => { + let rect = self.panel_right.layout_rect(); + if !data + .panel + .is_container_shown(&PanelContainerPosition::Right) + { + ( + Point::new(rect.x1 - 1.0, rect.y0), + Point::new(rect.x1 - 1.0, rect.y1), + ) + } else { + ( + Point::new(rect.x0.round(), rect.y0), + Point::new(rect.x0.round(), rect.y1), + ) } - }; - ctx.stroke( - Line::new(p0, p1), - data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), - 2.0, - ); - } + } + PanelResizePosition::LeftSplit => { + let rect = self.panel_left.layout_rect(); + ( + Point::new(rect.x1.round(), rect.y0), + Point::new(rect.x1.round(), rect.y1), + ) + } + PanelResizePosition::Bottom => { + let rect = self.panel_bottom.layout_rect(); + if !data + .panel + .is_container_shown(&PanelContainerPosition::Bottom) + { + let status_rect = self.status.layout_rect(); + ( + Point::new(rect.x0, status_rect.y0 - 1.0), + Point::new(rect.x1, status_rect.y0 - 1.0), + ) + } else { + ( + Point::new(rect.x0, rect.y0.round()), + Point::new(rect.x1, rect.y0.round()), + ) + } + } + }; + ctx.stroke( + Line::new(p0, p1), + data.config.get_color_unchecked(LapceTheme::EDITOR_CARET), + 2.0, + ); } self.status.paint(ctx, data, env); self.completion.paint(ctx, data, env); From a626e5818f4d1d2ec461eb6e8910845056cbe23b Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 21:54:45 +0100 Subject: [PATCH 057/816] paint larger icon when panel dragging --- lapce-ui/src/tab.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index ba33627c01..fb9076ba67 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -530,8 +530,11 @@ impl LapceTab { ); } DragContent::Panel(kind, rect) => { - let icon_rect = rect.with_origin(self.mouse_pos - *offset); - let padding = 5.0; + let inflate = (rect.width() / 2.0).round(); + let icon_rect = rect + .with_origin(self.mouse_pos - *offset) + .inflate(inflate, inflate); + let padding = (icon_rect.width() * 0.3).round(); let rect = icon_rect.inflate(padding, padding); let shadow_width = data.config.ui.drop_shadow_width() as f64; if shadow_width > 0.0 { From a150b50a45cc9bb31346cb08676d69fc4b078ada Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 2 Jul 2022 22:06:54 +0100 Subject: [PATCH 058/816] update minimal rust version --- Cargo.toml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 41206af432..13fb95eb51 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "lapce" version = "0.1.2" authors = ["Dongdong Zhou "] edition = "2021" -rust-version = "1.60" +rust-version = "1.62" resolver = "2" [dependencies] diff --git a/README.md b/README.md index a27c8ca7b1..8c913667e3 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ winget install lapce It is easy to build Lapce from source on a GNU/Linux distribution. Cargo handles the build process, all you need to do, is ensure the correct dependencies are installed. -1. Install the Rust compiler and Cargo using [`rustup.rs`](https://rustup.rs/). If you already have the toolchain, ensure you are using version 1.60 or higher. +1. Install the Rust compiler and Cargo using [`rustup.rs`](https://rustup.rs/). If you already have the toolchain, ensure you are using version 1.62 or higher. 2. Install dependencies for your operating system: From c3d9f511a9c0a7f054a568021031d02f5581c50b Mon Sep 17 00:00:00 2001 From: Jakub Panek Date: Sun, 3 Jul 2022 17:56:47 +0100 Subject: [PATCH 059/816] fix: add missing c header files extension --- lapce-core/src/language.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index fe2ef5d286..833fd26546 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -294,7 +294,7 @@ const LANGUAGES: &[SyntaxProperties] = &[ comment: "//", indent: " ", code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), - extensions: &["c"], + extensions: &["c", "h"], }, #[cfg(feature = "lang-cpp")] SyntaxProperties { From 4558e0e51317aacf3eb78509e7b66d9de44f392c Mon Sep 17 00:00:00 2001 From: lihe Date: Mon, 4 Jul 2022 19:28:29 +0800 Subject: [PATCH 060/816] Makes ctrl+c=esc Deal with https://github.com/lapce/lapce/issues/700#issuecomment-1171154786 --- defaults/keymaps-common.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/defaults/keymaps-common.toml b/defaults/keymaps-common.toml index 10fa1cbce5..6443bba85e 100644 --- a/defaults/keymaps-common.toml +++ b/defaults/keymaps-common.toml @@ -252,6 +252,12 @@ command = "normal_mode" mode = "niv" when = "!search_focus && !modal_focus" +[[keymaps]] +key="Ctrl+c" +command = "normal_mode" +mode = "niv" +when = "!search_focus && !modal_focus" + [[keymaps]] key = "ctrl+[" command = "normal_mode" From cc86efbe9a71374c0d5a24d4de0b713c205cee24 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Mon, 4 Jul 2022 20:10:38 +0100 Subject: [PATCH 061/816] bump fount --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index e643ab4708..7177eeb669 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "fount" version = "0.1.0" -source = "git+https://github.com/lapce/fount#bfe215c0f82595361dc2385bed5a8687a41e5dd2" +source = "git+https://github.com/lapce/fount#c08b06222c4ec900658ac311d082af4c1501aed3" dependencies = [ "font-kit", "memmap2 0.5.4", From 5646bdb23529ced1412d2b04bda90d045802d041 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Mon, 4 Jul 2022 20:30:23 +0100 Subject: [PATCH 062/816] add title to release --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 88d4f05f2e..73b514db26 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -147,4 +147,4 @@ jobs: env: DEBUG: api run: | - gh release create $TAG_NAME $PRERELEASE --target $GITHUB_SHA lapce-macos/* lapce-linux/* lapce-windows/* + gh release create $TAG_NAME $PRERELEASE --title "$SUBJECT" --target $GITHUB_SHA lapce-macos/* lapce-linux/* lapce-windows/* From a904656f10799e2d7d6c3635f132829f22b9a91f Mon Sep 17 00:00:00 2001 From: MinusGix Date: Tue, 5 Jul 2022 02:58:58 -0500 Subject: [PATCH 063/816] Handle LSP requests for hearing about file saving of specific files --- Cargo.lock | 1 + lapce-proxy/Cargo.toml | 1 + lapce-proxy/src/dispatch.rs | 12 ++-- lapce-proxy/src/lsp.rs | 130 ++++++++++++++++++++++++++++++++++-- 4 files changed, 132 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7177eeb669..1614710abb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2302,6 +2302,7 @@ dependencies = [ "crossbeam-channel", "directories", "git2", + "globset", "grep-matcher", "grep-regex", "grep-searcher", diff --git a/lapce-proxy/Cargo.toml b/lapce-proxy/Cargo.toml index d22c9028b4..2d1acef449 100644 --- a/lapce-proxy/Cargo.toml +++ b/lapce-proxy/Cargo.toml @@ -11,6 +11,7 @@ grep-searcher = "0.1.8" grep-matcher = "0.1.5" grep-regex = "0.1.9" ignore = "0.4.18" +globset = "0.4.9" reqwest = { version = "0.11", features = ["blocking", "json", "socks"] } wasmer = "2.1.1" wasmer-wasi = "2.1.1" diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index f107cc2e17..5a383f7cb4 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -629,11 +629,13 @@ impl Dispatcher { } } Save { rev, buffer_id } => { - let mut buffers = self.buffers.lock(); - let buffer = buffers.get_mut(&buffer_id).unwrap(); - let resp = buffer.save(rev).map(|_r| json!({})); - self.lsp.lock().save_buffer(buffer); - self.respond(id, resp); + if let Some(workspace) = self.workspace.lock().as_ref() { + let mut buffers = self.buffers.lock(); + let buffer = buffers.get_mut(&buffer_id).unwrap(); + let resp = buffer.save(rev).map(|_r| json!({})); + self.lsp.lock().save_buffer(buffer, workspace); + self.respond(id, resp); + } } SaveBufferAs { buffer_id, diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index f3683c1dbd..88851ab210 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -2,6 +2,7 @@ use std::{ collections::HashMap, io::BufRead, io::{BufReader, BufWriter, Write}, + path::Path, process::{self, Child, ChildStdout, Command, Stdio}, sync::{mpsc::channel, Arc}, thread, @@ -52,6 +53,37 @@ pub struct LspState { pub server_capabilities: Option, pub opened_documents: HashMap, pub is_initialized: bool, + pub did_save_capabilities: Vec, +} + +pub struct DocumentFilter { + /// The document must have this language id, if it exists + pub language_id: Option, + /// The document's path must match this glob, if it exists + pub pattern: Option, + // TODO: URI Scheme from lsp-types document filter +} +impl DocumentFilter { + /// Constructs a document filter from the LSP version + /// This ignores any fields that are badly constructed + fn from_lsp_filter_loose(filter: lsp_types::DocumentFilter) -> DocumentFilter { + DocumentFilter { + language_id: filter.language, + // TODO: clean this up + pattern: filter + .pattern + .as_deref() + .map(globset::Glob::new) + .and_then(Result::ok) + .map(|x| globset::Glob::compile_matcher(&x)), + } + } +} +pub struct DidSaveCapability { + /// A filter on what documents this applies to + filter: DocumentFilter, + /// Whether we are supposed to include the text when sending a didSave event + include_text: bool, } #[derive(Clone)] @@ -135,10 +167,53 @@ impl LspCatalog { } } - pub fn save_buffer(&self, buffer: &Buffer) { - if let Some(client) = self.clients.get(&buffer.language_id) { - let uri = client.get_uri(buffer); - client.send_did_save(uri); + pub fn save_buffer(&self, buffer: &Buffer, workspace_path: &Path) { + for (client_language_id, client) in self.clients.iter() { + // Get rid of the workspace path prefix so that it can be used with the filters + let buffer_path = buffer + .path + .strip_prefix(workspace_path) + .unwrap_or(&buffer.path); + + let mut passed_filter = client_language_id == &buffer.language_id; + let mut include_text = false; + if !passed_filter { + let lsp_state = client.state.lock(); + + // TODO: Should we iterate in reverse order so that later capabilities + // can overwrite old ones? + // Find the first capability that wants this file, if any. + for cap in &lsp_state.did_save_capabilities { + if let Some(language_id) = &cap.filter.language_id { + if language_id != &buffer.language_id { + continue; + } + } + + if let Some(pattern) = &cap.filter.pattern { + if !pattern.is_match(buffer_path) { + continue; + } + } + + passed_filter = true; + include_text = cap.include_text; + break; + } + + // Get rid of the mutex guard + drop(lsp_state); + } + + if passed_filter { + let uri = client.get_uri(buffer); + let text = if include_text { + Some(buffer.get_document()) + } else { + None + }; + client.send_did_save(uri, text); + } } } @@ -457,6 +532,7 @@ impl LspClient { server_capabilities: None, opened_documents: HashMap::new(), is_initialized: false, + did_save_capabilities: Vec::new(), })), }); @@ -577,7 +653,7 @@ impl LspClient { } } - pub fn handle_request(&self, method: &str, id: Id, _params: Params) { + pub fn handle_request(&self, method: &str, id: Id, params: Params) { match method { "window/workDoneProgress/create" => { // Token is ignored as the workProgress Widget is always working @@ -585,6 +661,41 @@ impl LspClient { // probably store the token self.send_success_response(id, &json!({})); } + "client/registerCapability" => { + if let Ok(registrations) = + serde_json::from_value::(json!(params)) + { + for registration in registrations.registrations { + match registration.method.as_str() { + "textDocument/didSave" => { + if let Some(options) = registration.register_options { + if let Ok(options) = serde_json::from_value::(options) { + if let Some(selectors) = options.text_document_registration_options.document_selector { + // TODO: is false a reasonable default? + let include_text = options.include_text.unwrap_or(false); + + let mut lsp_state = self.state.lock(); + + // Add each selector our did save filtering + for selector in selectors { + let filter = DocumentFilter::from_lsp_filter_loose(selector); + let cap = DidSaveCapability { + filter, + include_text, + }; + + lsp_state.did_save_capabilities.push(cap); + } + } + } + } + // TODO: report error? + } + _ => println!("Received unhandled client/registerCapability request {}", registration.method), + } + } + } + } method => { println!("Received unhandled request {method}"); } @@ -740,10 +851,10 @@ impl LspClient { self.send_notification("textDocument/didOpen", params); } - pub fn send_did_save(&self, uri: Url) { + pub fn send_did_save(&self, uri: Url, text: Option) { let params = DidSaveTextDocumentParams { text_document: TextDocumentIdentifier { uri }, - text: None, + text, }; let params = Params::from(serde_json::to_value(params).unwrap()); self.send_notification("textDocument/didSave", params); @@ -759,6 +870,11 @@ impl LspClient { { let client_capabilities = ClientCapabilities { text_document: Some(TextDocumentClientCapabilities { + synchronization: Some(TextDocumentSyncClientCapabilities { + did_save: Some(true), + dynamic_registration: Some(true), + ..Default::default() + }), completion: Some(CompletionClientCapabilities { completion_item: Some(CompletionItemCapability { snippet_support: Some(true), From 1257666192504e16e180b0b2d4330279ad62d03c Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Tue, 5 Jul 2022 21:44:07 +0100 Subject: [PATCH 064/816] make system_lsp optional --- lapce-proxy/src/plugin.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lapce-proxy/src/plugin.rs b/lapce-proxy/src/plugin.rs index c0a62fedc7..2b28d41dea 100644 --- a/lapce-proxy/src/plugin.rs +++ b/lapce-proxy/src/plugin.rs @@ -249,7 +249,7 @@ pub enum PluginNotification { exec_path: String, language_id: String, options: Option, - system_lsp: bool, + system_lsp: Option, }, DownloadFile { url: String, @@ -274,7 +274,7 @@ fn host_handle_notification(plugin_env: &PluginEnv) { options, system_lsp, } => { - let exec_path = if system_lsp { + let exec_path = if system_lsp.unwrap_or(false) { // System LSP should be handled by PATH during // process creation, so we forbid anything that // is not just an executable name From 3174816f5cae1bd03d44aead2c76c06d2a5eac0d Mon Sep 17 00:00:00 2001 From: MinusGix Date: Tue, 5 Jul 2022 21:27:17 -0500 Subject: [PATCH 065/816] Add setting for hover font family/size --- defaults/settings.toml | 2 ++ lapce-data/src/config.rs | 23 +++++++++++++++++++++++ lapce-ui/src/hover.rs | 4 ++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/defaults/settings.toml b/defaults/settings.toml index 997dc9dca4..0b8a560228 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -33,6 +33,8 @@ tab-min-width = 100 scroll-width = 10 drop-shadow-width = 0 custom-titlebar = false +hover-font-family = "" +hover-font-size = 0 [theme] name = "" diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index ce03675626..8a79dcf1f9 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -230,6 +230,13 @@ pub struct UIConfig { desc = "Enable customised titlebar and disable OS native one (Windows only)" )] custom_titlebar: bool, + + #[field_names( + desc = "Set the hover font family. If empty, it uses the UI font family" + )] + hover_font_family: String, + #[field_names(desc = "Set the hover font size. If 0, uses the UI font size")] + hover_font_size: usize, } impl UIConfig { @@ -270,6 +277,22 @@ impl UIConfig { pub fn custom_titlebar(&self) -> bool { self.custom_titlebar } + + pub fn hover_font_family(&self) -> FontFamily { + if self.hover_font_family.is_empty() { + self.font_family() + } else { + FontFamily::new_unchecked(self.hover_font_family.clone()) + } + } + + pub fn hover_font_size(&self) -> usize { + if self.hover_font_size == 0 { + self.font_size() + } else { + self.hover_font_size + } + } } #[derive(FieldNames, Debug, Clone, Deserialize, Serialize, Default)] diff --git a/lapce-ui/src/hover.rs b/lapce-ui/src/hover.rs index 22f4da30a9..17f7d5baf7 100644 --- a/lapce-ui/src/hover.rs +++ b/lapce-ui/src/hover.rs @@ -268,8 +268,8 @@ impl Widget for Hover { .set_text(RichText::new(ArcStr::from(""))); } - let font = FontDescriptor::new(data.config.ui.font_family()) - .with_size(data.config.ui.font_size() as f64); + let font = FontDescriptor::new(data.config.ui.hover_font_family()) + .with_size(data.config.ui.hover_font_size() as f64); let text_color = data .config .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND) From 224788c5a2e1185f45aaf1d45a58819bfc23f594 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 6 Jul 2022 18:29:24 +0100 Subject: [PATCH 066/816] bump xi-rope --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 1614710abb..7bb9827969 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5792,7 +5792,7 @@ dependencies = [ [[package]] name = "xi-rope" version = "0.3.0" -source = "git+https://github.com/lapce/xi-editor#5578c7253ff8f644638bebace1261b6a412ce03c" +source = "git+https://github.com/lapce/xi-editor#06816cc92e97996c12ec048aa9190b4efc00d1a6" dependencies = [ "bytecount", "memchr", From 3df921bedae73ee04f0d3f63ce7f013217c26c5c Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 6 Jul 2022 18:49:08 +0100 Subject: [PATCH 067/816] bump fount --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 7bb9827969..d723f7a114 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "fount" version = "0.1.0" -source = "git+https://github.com/lapce/fount#c08b06222c4ec900658ac311d082af4c1501aed3" +source = "git+https://github.com/lapce/fount#02166f0f7b0e9bcb1c5ae5937e7678ba4597bbe4" dependencies = [ "font-kit", "memmap2 0.5.4", From 86a8d063ea1453e5d6377299f67ad1a2a363d8c0 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 6 Jul 2022 20:51:22 +0100 Subject: [PATCH 068/816] check if lsp active before reload fix proxy hanging around after stopped --- lapce-proxy/src/lsp.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 88851ab210..86072c20d1 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -4,7 +4,11 @@ use std::{ io::{BufReader, BufWriter, Write}, path::Path, process::{self, Child, ChildStdout, Command, Stdio}, - sync::{mpsc::channel, Arc}, + sync::{ + atomic::{AtomicBool, Ordering}, + mpsc::channel, + Arc, + }, thread, time::Duration, }; @@ -93,6 +97,7 @@ pub struct LspClient { options: Option, state: Arc>, dispatcher: Dispatcher, + active: Arc, } impl LspCatalog { @@ -534,6 +539,7 @@ impl LspClient { is_initialized: false, did_save_capabilities: Vec::new(), })), + active: Arc::new(AtomicBool::new(true)), }); lsp_client.handle_stdout(stdout); @@ -552,6 +558,9 @@ impl LspClient { local_lsp_client.handle_message(message_str.as_ref()); } Err(_err) => { + if !local_lsp_client.active.load(Ordering::Acquire) { + return; + } local_lsp_client.stop(); local_lsp_client.reload(); return; @@ -595,6 +604,7 @@ impl LspClient { } fn stop(&self) { + self.active.store(false, Ordering::Release); let _ = self.state.lock().process.kill(); } From a79254b445caac01c2805760ce6d1c4dd1480e4e Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 6 Jul 2022 21:11:16 +0100 Subject: [PATCH 069/816] ignore timer event on inactive window tab --- lapce-ui/src/window.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lapce-ui/src/window.rs b/lapce-ui/src/window.rs index 43cd693106..34a1f37d51 100644 --- a/lapce-ui/src/window.rs +++ b/lapce-ui/src/window.rs @@ -1,9 +1,9 @@ use druid::{ kurbo::Line, widget::{LensWrap, WidgetExt}, - BoxConstraints, Command, Env, Event, EventCtx, LayoutCtx, LifeCycle, - LifeCycleCtx, PaintCtx, Point, RenderContext, Size, Target, Widget, WidgetId, - WidgetPod, WindowState, + BoxConstraints, Command, Env, Event, EventCtx, InternalEvent, LayoutCtx, + LifeCycle, LifeCycleCtx, PaintCtx, Point, RenderContext, Size, Target, Widget, + WidgetId, WidgetPod, WindowState, }; use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, @@ -357,6 +357,9 @@ impl Widget for LapceWindow { | Event::MouseMove(_) | Event::Wheel(_) | Event::KeyDown(_) + | Event::Timer(_) + | Event::AnimFrame(_) + | Event::Internal(InternalEvent::RouteTimer(..)) | Event::KeyUp(_) => {} _ => { for (i, tab) in self.tabs.iter_mut().enumerate() { From 1268fb9ec8a5a628c291c27400677f73fcd785a2 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Wed, 6 Jul 2022 21:52:20 +0100 Subject: [PATCH 070/816] cursor blink when switching window tab --- lapce-ui/src/editor/view.rs | 4 +++- lapce-ui/src/window.rs | 10 ++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index d517bfaee3..5371df20ff 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -550,6 +550,8 @@ impl Widget for LapceEditorView { Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => { let command = cmd.get_unchecked(LAPCE_UI_COMMAND); if let LapceUICommand::Focus = command { + self.cursor_blink_timer = + ctx.request_timer(Duration::from_millis(500), None); self.request_focus(ctx, data, true); let editor_data = data.editor_view_content(self.view_id); self.ensure_cursor_visible( @@ -563,7 +565,7 @@ impl Widget for LapceEditorView { } Event::Timer(id) if self.cursor_blink_timer == *id => { ctx.set_handled(); - if data.focus == self.view_id { + if ctx.is_focused() { ctx.request_paint(); self.cursor_blink_timer = ctx.request_timer(Duration::from_millis(500), None); diff --git a/lapce-ui/src/window.rs b/lapce-ui/src/window.rs index 34a1f37d51..27e076be9c 100644 --- a/lapce-ui/src/window.rs +++ b/lapce-ui/src/window.rs @@ -1,9 +1,9 @@ use druid::{ kurbo::Line, widget::{LensWrap, WidgetExt}, - BoxConstraints, Command, Env, Event, EventCtx, InternalEvent, LayoutCtx, - LifeCycle, LifeCycleCtx, PaintCtx, Point, RenderContext, Size, Target, Widget, - WidgetId, WidgetPod, WindowState, + BoxConstraints, Command, Env, Event, EventCtx, LayoutCtx, LifeCycle, + LifeCycleCtx, PaintCtx, Point, RenderContext, Size, Target, Widget, WidgetId, + WidgetPod, WindowState, }; use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, @@ -356,10 +356,8 @@ impl Widget for LapceWindow { | Event::MouseUp(_) | Event::MouseMove(_) | Event::Wheel(_) - | Event::KeyDown(_) - | Event::Timer(_) | Event::AnimFrame(_) - | Event::Internal(InternalEvent::RouteTimer(..)) + | Event::KeyDown(_) | Event::KeyUp(_) => {} _ => { for (i, tab) in self.tabs.iter_mut().enumerate() { From c06ca6a9283993d5783e0d9cb92bac03cf0f2949 Mon Sep 17 00:00:00 2001 From: panekj Date: Mon, 4 Jul 2022 16:24:41 +0200 Subject: [PATCH 071/816] feat: parse commandline args --- lapce-data/src/data.rs | 46 ++++++++++++++++++++++++++++++++++++++++-- lapce-ui/src/app.rs | 29 +++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index b0c705ff7c..17bf18743b 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -8,6 +8,9 @@ use std::{ time::Instant, }; +#[cfg(target_os = "windows")] +use std::env; + use anyhow::Result; use crossbeam_channel::{unbounded, Receiver, Sender}; use directories::BaseDirs; @@ -91,7 +94,7 @@ pub struct LapceData { impl LapceData { /// Create a new `LapceData` struct by loading configuration, and state /// previously written to the Lapce database. - pub fn load(event_sink: ExtEventSink) -> Self { + pub fn load(event_sink: ExtEventSink, path: Option) -> Self { let db = Arc::new(LapceDb::new().unwrap()); let mut windows = im::HashMap::new(); let config = Config::load(&LapceWorkspace::default()).unwrap_or_default(); @@ -100,7 +103,46 @@ impl LapceData { .get_panel_orders() .unwrap_or_else(|_| Self::default_panel_orders()); - if let Ok(app) = db.get_app() { + if let Some(path) = path { + let path = PathBuf::from(path).canonicalize().unwrap(); + if path.is_dir() { + #[cfg(target_os = "windows")] + let workspace_type = + if !env::var("WSL_DISTRO_NAME").unwrap_or_default().is_empty() + || !env::var("WSLENV").unwrap_or_default().is_empty() + || !env::var("WSL_INTEROP").unwrap_or_default().is_empty() + { + LapceWorkspaceType::RemoteWSL + } else { + LapceWorkspaceType::Local + }; + + #[cfg(not(target_os = "windows"))] + let workspace_type = LapceWorkspaceType::Local; + + let info = WindowInfo { + size: Size::new(800.0, 600.0), + pos: Point::new(0.0, 0.0), + maximised: false, + tabs: TabsInfo { + active_tab: 0, + workspaces: vec![LapceWorkspace { + kind: workspace_type, + path: Some(path), + last_open: 0, + }], + }, + }; + let window = LapceWindowData::new( + keypress.clone(), + panel_orders.clone(), + event_sink.clone(), + &info, + db.clone(), + ); + windows.insert(window.window_id, window); + } + } else if let Ok(app) = db.get_app() { for info in app.windows.iter() { let window = LapceWindowData::new( keypress.clone(), diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 52e26c5701..515183fe04 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -11,6 +11,7 @@ use lapce_data::{ config::Config, data::{LapceData, LapceWindowData, LapceWindowLens}, db::{TabsInfo, WindowInfo}, + proxy::VERSION, }; use crate::logging::override_log_levels; @@ -26,6 +27,32 @@ pub fn build_window(data: &mut LapceWindowData) -> impl Widget { } pub fn launch() { + let mut args = std::env::args(); + let mut path = None; + if args.len() > 1 { + args.next(); + for arg in args { + match arg.as_str() { + "-v" | "--version" => { + println!("lapce v{VERSION}"); + return; + } + "-h" | "--help" => { + println!("lapce [-h|--help] [-v|--version] [PATH]"); + return; + } + v => { + if v.starts_with('-') { + eprintln!("lapce: unrecognized option: {v}"); + std::process::exit(1) + } else { + path = Some(v.to_string()) + } + } + } + } + } + let mut log_dispatch = fern::Dispatch::new() .format(|out, message, record| { out.finish(format_args!( @@ -54,7 +81,7 @@ pub fn launch() { } let mut launcher = AppLauncher::new().delegate(LapceAppDelegate::new()); - let mut data = LapceData::load(launcher.get_external_handle()); + let mut data = LapceData::load(launcher.get_external_handle(), path); for (_window_id, window_data) in data.windows.iter_mut() { let root = build_window(window_data); let window = new_window_desc( From 464d7edf009aa2cbe899f27d8beed0f8ac45c607 Mon Sep 17 00:00:00 2001 From: panekj Date: Wed, 6 Jul 2022 03:26:43 +0200 Subject: [PATCH 072/816] fix: add fallback to \\wsl$ --- lapce-data/src/proxy.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index c6c262e0ab..77500a6182 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -865,6 +865,9 @@ struct WslRemote { impl Remote for WslRemote { fn upload_file(&self, local: impl AsRef, remote: &str) -> Result<()> { let mut wsl_path = Path::new(r"\\wsl.localhost\").join(&self.distro); + if !wsl_path.exists() { + wsl_path = Path::new(r#"\\wsl$"#).join(&self.distro); + } wsl_path = if remote.starts_with('~') { let home_dir = self.home_dir()?; wsl_path.join(remote.replacen('~', &home_dir, 1)) From 35a99c9d58f128c51d072aff9143f3133926c355 Mon Sep 17 00:00:00 2001 From: panekj Date: Sun, 3 Jul 2022 22:22:08 +0200 Subject: [PATCH 073/816] feat: add color option to file type svgs --- lapce-ui/src/editor/header.rs | 4 +- lapce-ui/src/editor/tab_header.rs | 2 +- lapce-ui/src/editor/tab_header_content.rs | 2 +- lapce-ui/src/explorer.rs | 4 +- lapce-ui/src/palette.rs | 2 +- lapce-ui/src/picker.rs | 4 +- lapce-ui/src/problem.rs | 6 +- lapce-ui/src/search.rs | 8 +- lapce-ui/src/source_control.rs | 8 +- lapce-ui/src/svg.rs | 91 +++++++++++++++-------- 10 files changed, 81 insertions(+), 50 deletions(-) diff --git a/lapce-ui/src/editor/header.rs b/lapce-ui/src/editor/header.rs index afb93cdd6c..8052790e3a 100644 --- a/lapce-ui/src/editor/header.rs +++ b/lapce-ui/src/editor/header.rs @@ -148,7 +148,7 @@ impl LapceEditorHeader { ctx.with_save(|ctx| { ctx.clip(clip_rect); - let svg = file_svg(&path); + let (svg, svg_color) = file_svg(&path); let font_size = data.config.ui.font_size() as f64; @@ -159,7 +159,7 @@ impl LapceEditorHeader { (size.height - width) / 2.0, (size.height - height) / 2.0, )); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); let mut file_name = path .file_name() diff --git a/lapce-ui/src/editor/tab_header.rs b/lapce-ui/src/editor/tab_header.rs index 2fab985584..5f23d4016c 100644 --- a/lapce-ui/src/editor/tab_header.rs +++ b/lapce-ui/src/editor/tab_header.rs @@ -99,7 +99,7 @@ impl LapceEditorTabHeader { let editor_buffer = data.editor_view_content(*view_id); if let BufferContent::File(path) = &editor_buffer.editor.content { - svg = file_svg(path); + (svg, _) = file_svg(path); if let Some(file_name) = path.file_name() { if let Some(s) = file_name.to_str() { text = s.to_string(); diff --git a/lapce-ui/src/editor/tab_header_content.rs b/lapce-ui/src/editor/tab_header_content.rs index f2b8a120a2..628730236a 100644 --- a/lapce-ui/src/editor/tab_header_content.rs +++ b/lapce-ui/src/editor/tab_header_content.rs @@ -358,7 +358,7 @@ impl Widget for LapceEditorTabHeaderContent { EditorTabChild::Editor(view_id, _, _) => { let editor = data.main_split.editors.get(view_id).unwrap(); if let BufferContent::File(path) = &editor.content { - svg = file_svg(path); + (svg, _) = file_svg(path); if let Some(file_name) = path.file_name() { if let Some(s) = file_name.to_str() { text = s.to_string(); diff --git a/lapce-ui/src/explorer.rs b/lapce-ui/src/explorer.rs index 73d523be93..346bccf95a 100644 --- a/lapce-ui/src/explorer.rs +++ b/lapce-ui/src/explorer.rs @@ -96,11 +96,11 @@ fn paint_single_file_node_item( .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); ctx.draw_svg(&svg, rect, None); } else { - let svg = file_svg(&item.path_buf); + let (svg, svg_color) = file_svg(&item.path_buf); let rect = Size::new(svg_size, svg_size) .to_rect() .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); } let text_layout = ctx .text() diff --git a/lapce-ui/src/palette.rs b/lapce-ui/src/palette.rs index 5ae095a23d..2696829271 100644 --- a/lapce-ui/src/palette.rs +++ b/lapce-ui/src/palette.rs @@ -794,7 +794,7 @@ impl PaletteContent { path: &Path, indices: &[usize], ) -> (Option, String, Vec, String, Vec) { - let svg = file_svg(path); + let (svg, _) = file_svg(path); let file_name = path .file_name() .and_then(|s| s.to_str()) diff --git a/lapce-ui/src/picker.rs b/lapce-ui/src/picker.rs index c419cfd052..f5dc0d1d68 100644 --- a/lapce-ui/src/picker.rs +++ b/lapce-ui/src/picker.rs @@ -608,11 +608,11 @@ pub fn paint_file_node_item_by_index( .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); ctx.draw_svg(&svg, rect, None); } else { - let svg = file_svg(&item.path_buf); + let (svg, svg_color) = file_svg(&item.path_buf); let rect = Size::new(svg_size, svg_size) .to_rect() .with_origin(Point::new(1.0 + 16.0 + padding, svg_y)); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); } let text_layout = ctx .text() diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index 9f861d1ec7..db2abf1f62 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -268,12 +268,12 @@ impl Widget for ProblemContent { } let padding = (line_height - 14.0) / 2.0; - let svg = file_svg(path); + let (svg, svg_color) = file_svg(path); let rect = Size::new(line_height, line_height) .to_rect() .with_origin(Point::new(0.0, line_height * i as f64)) .inflate(-padding, -padding); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); let text_layout = ctx .text() @@ -300,7 +300,7 @@ impl Widget for ProblemContent { ), ); - let mut path = path.clone(); + let mut path: PathBuf = path.clone(); if let Some(workspace_path) = data.workspace.path.as_ref() { path = path .strip_prefix(workspace_path) diff --git a/lapce-ui/src/search.rs b/lapce-ui/src/search.rs index ad058a58e9..513594c5bc 100644 --- a/lapce-ui/src/search.rs +++ b/lapce-ui/src/search.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use druid::{ piet::{Text, TextAttribute, TextLayout as PietTextLayout, TextLayoutBuilder}, BoxConstraints, Command, Cursor, Data, Env, Event, EventCtx, FontWeight, @@ -200,12 +202,12 @@ impl Widget for SearchContent { continue; } - let svg = file_svg(path); + let (svg, svg_color) = file_svg(path); let rect = Size::new(self.line_height, self.line_height) .to_rect() .with_origin(Point::new(0.0, self.line_height * i as f64)) .inflate(-padding, -padding); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); let text_layout = ctx .text() @@ -232,7 +234,7 @@ impl Widget for SearchContent { ), ); - let mut path = path.clone(); + let mut path: PathBuf = path.clone(); if let Some(workspace_path) = data.workspace.path.as_ref() { path = path .strip_prefix(workspace_path) diff --git a/lapce-ui/src/source_control.rs b/lapce-ui/src/source_control.rs index 0f95591966..ae2b7e890a 100644 --- a/lapce-ui/src/source_control.rs +++ b/lapce-ui/src/source_control.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::{path::PathBuf, sync::Arc}; use druid::{ kurbo::BezPath, @@ -259,7 +259,7 @@ impl Widget for SourceControlFileList { } let y = self.line_height * line as f64; let (diff, checked) = diffs[line].clone(); - let mut path = diff.path().clone(); + let mut path: PathBuf = diff.path().clone(); if let Some(workspace_path) = data.workspace.path.as_ref() { path = path .strip_prefix(workspace_path) @@ -284,14 +284,14 @@ impl Widget for SourceControlFileList { ctx.stroke(path, &Color::rgb8(0, 0, 0), 2.0); } } - let svg = file_svg(&path); + let (svg, svg_color) = file_svg(&path); let width = 13.0; let height = 13.0; let rect = Size::new(width, height).to_rect().with_origin(Point::new( (self.line_height - width) / 2.0 + self.line_height, (self.line_height - height) / 2.0 + y, )); - ctx.draw_svg(&svg, rect, None); + ctx.draw_svg(&svg, rect, svg_color); let file_name = path .file_name() diff --git a/lapce-ui/src/svg.rs b/lapce-ui/src/svg.rs index fd2e9add2e..20566e3716 100644 --- a/lapce-ui/src/svg.rs +++ b/lapce-ui/src/svg.rs @@ -48,45 +48,74 @@ pub fn get_svg(name: &'static str) -> Option { SVG_STORE.get_svg(name) } -pub fn file_svg(path: &Path) -> Svg { - let file_type = if path.file_name().and_then(OsStr::to_str) == Some("LICENSE") { - "file_type_license.svg" - } else { - path.extension() - .and_then(OsStr::to_str) - .and_then(|extension| { - const TYPES: &[(&[&str], &str)] = &[ - (&["c"], "file_type_c.svg"), - (&["cxx", "cc", "c++", "cpp"], "file_type_cpp.svg"), - (&["go"], "file_type_go.svg"), - (&["json"], "file_type_json.svg"), - (&["markdown", "md"], "file_type_markdown.svg"), - (&["rs"], "file_type_rust.svg"), - (&["toml"], "file_type_toml.svg"), - (&["yaml"], "file_type_yaml.svg"), - (&["py"], "file_type_python.svg"), - (&["lua"], "file_type_lua.svg"), - (&["html", "htm"], "file_type_html.svg"), - (&["zip"], "file_type_zip.svg"), - (&["js"], "file_type_js.svg"), - (&["ts"], "file_type_ts.svg"), - (&["css"], "file_type_css.svg"), +pub fn file_svg(path: &Path) -> (Svg, Option<&Color>) { + let icon_name: Option<&str>; + let icon_color: Option<&Color>; + (icon_name, icon_color) = match path.extension().and_then(OsStr::to_str) { + Some(extension) => { + const TYPES: &[(&[&str], &str, Option<&Color>)] = &[ + (&["c"], "file_type_c.svg", None), + (&["h"], "file_type_c.svg", None), + (&["cxx", "cc", "c++", "cpp"], "file_type_cpp.svg", None), + (&["hxx", "hh", "h++", "hpp"], "file_type_cpp.svg", None), + (&["go"], "file_type_go.svg", None), + (&["json"], "file_type_json.svg", None), + (&["markdown", "md"], "file_type_markdown.svg", None), + (&["rs"], "file_type_rust.svg", None), + (&["toml"], "file_type_toml.svg", None), + (&["yaml"], "file_type_yaml.svg", None), + (&["py"], "file_type_python.svg", None), + (&["lua"], "file_type_lua.svg", None), + (&["html", "htm"], "file_type_html.svg", None), + (&["zip"], "file_type_zip.svg", None), + (&["js"], "file_type_js.svg", None), + (&["ts"], "file_type_ts.svg", None), + (&["css"], "file_type_css.svg", None), + ]; + + let (mut icon, mut color) = (None, None); + + for (exts, file_type, col) in TYPES { + for ext in exts.iter() { + if extension.eq_ignore_ascii_case(ext) { + (icon, color) = (Some(*file_type), *col) + } + } + } + + (icon, color) + } + None => match path.file_name().and_then(OsStr::to_str) { + Some(file_name) => { + const FILES: &[(&[&str], &str, Option<&Color>)] = &[ + (&["LICENSE", "LICENCE"], "file_type_license.svg", None), + (&["COPYRIGHT"], "file_type_license.svg", None), + (&["NOTICE"], "file_type_license.svg", None), ]; - for (exts, file_type) in TYPES { - for ext in exts.iter() { - if extension.eq_ignore_ascii_case(ext) { - return Some(*file_type); + let (mut icon, mut color) = (None, None); + + for (filenames, file_type, col) in FILES { + for filename in filenames.iter() { + if file_name.to_lowercase().starts_with(filename) { + (icon, color) = (Some(*file_type), *col) } } } - None - }) - .unwrap_or("default_file.svg") + (icon, color) + } + None => (Some("default_file.svg"), None), + }, }; - get_svg(file_type).unwrap() + match icon_name { + Some(icon_name) => match get_svg(icon_name) { + Some(svg) => (svg, icon_color), + None => (get_svg("default_file.svg").unwrap(), None), + }, + None => (get_svg("default_file.svg").unwrap(), None), + } } pub fn symbol_svg(kind: &SymbolKind) -> Option { From 9ad34189c82ec98e8c366bf66ce5b8785c14f4fd Mon Sep 17 00:00:00 2001 From: panekj Date: Thu, 7 Jul 2022 17:30:53 +0200 Subject: [PATCH 074/816] feat: add tree-sitter-yaml --- Cargo.lock | 10 ++++++++++ lapce-core/Cargo.toml | 9 ++++++--- lapce-core/src/language.rs | 16 ++++++++++++++++ lapce-ui/Cargo.toml | 4 +++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d723f7a114..a76340fb0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2232,6 +2232,7 @@ dependencies = [ "tree-sitter-swift", "tree-sitter-toml", "tree-sitter-typescript", + "tree-sitter-yaml", "tree-sitter-zig", "xi-rope", ] @@ -4819,6 +4820,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-yaml" +version = "0.0.1" +source = "git+https://github.com/panekj/tree-sitter-yaml?branch=master#faed130c65531addfa3edf855e1d417b96c7f163" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-zig" version = "0.0.1" diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 4880e85f10..5ae15c98c8 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -13,6 +13,10 @@ strum = "0.24.0" strum_macros = "0.24" serde = "1.0" serde_json = "1.0" +lsp-types = { version = "0.93", features = ["proposed"] } +xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } +lapce-rpc = { path = "../lapce-rpc" } + tree-sitter = "0.20.7" tree-sitter-highlight = "0.20.1" tree-sitter-rust = { version = "0.20.0", optional = true } @@ -45,9 +49,7 @@ tree-sitter-css = { git = "https://github.com/syntacti/tree-sitter-css", branch tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", branch = "main", optional = true } # switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-bash/pull/120 tree-sitter-bash = { git = "https://github.com/syntacti/tree-sitter-bash", branch = "master", optional = true } -lsp-types = { version = "0.93", features = ["proposed"] } -xi-rope = { git = "https://github.com/lapce/xi-editor", features = ["serde"] } -lapce-rpc = { path = "../lapce-rpc" } +tree-sitter-yaml = { git = "https://github.com/panekj/tree-sitter-yaml", branch = "master", optional = true } [features] default = [] @@ -82,3 +84,4 @@ lang-hare = ["dep:tree-sitter-hare"] lang-css = ["dep:tree-sitter-css"] lang-zig = ["dep:tree-sitter-zig"] lang-bash = ["dep:tree-sitter-bash"] +lang-yaml = ["dep:tree-sitter-yaml"] \ No newline at end of file diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index 833fd26546..b1e64c710d 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -158,6 +158,8 @@ pub enum LapceLanguage { Zig, #[cfg(feature = "lang-bash")] Bash, + #[cfg(feature = "lang-yaml")] + Yaml, } // NOTE: Elements in the array must be in the same order as the enum variants of @@ -496,6 +498,16 @@ const LANGUAGES: &[SyntaxProperties] = &[ code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["sh", "bash"], }, + #[cfg(feature = "lang-yaml")] + SyntaxProperties { + id: LapceLanguage::Yaml, + language: tree_sitter_yaml::language, + highlight: tree_sitter_yaml::HIGHLIGHTS_QUERY, + comment: "#", + indent: " ", + code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), + extensions: &["yml", "yaml"], + }, ]; impl LapceLanguage { @@ -771,4 +783,8 @@ mod test { fn test_bash_lang() { assert_language(LapceLanguage::Bash, &["sh", "bash"]); } + #[cfg(feature = "lang-yaml")] + fn test_yaml_lang() { + assert_language(LapceLanguage::Yaml, &["yml", "yaml"]); + } } diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index de1b3607c4..f5ef994ab3 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -87,9 +87,10 @@ all-languages = [ "lang-hcl", "lang-scss", "lang-hare", - "lang-css", + "lang-css", "lang-zig", "lang-bash", + "lang-yaml", ] lang-rust = ["lapce-core/lang-rust"] @@ -120,3 +121,4 @@ lang-hare = ["lapce-core/lang-hare"] lang-css = ["lapce-core/lang-css"] lang-zig = ["lapce-core/lang-zig"] lang-bash = ["lapce-core/lang-bash"] +lang-yaml = ["lapce-core/lang-yaml"] From 3e54e6fe7dd558e5b24e196c9d4d51f42dc16770 Mon Sep 17 00:00:00 2001 From: panekj Date: Fri, 8 Jul 2022 12:10:38 +0200 Subject: [PATCH 075/816] fix: remove check for WSLENV envvar it cannot be used to check for WSL session since it's set even for non-WSL sessions --- lapce-data/src/data.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 17bf18743b..ae5f56cec2 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -109,7 +109,6 @@ impl LapceData { #[cfg(target_os = "windows")] let workspace_type = if !env::var("WSL_DISTRO_NAME").unwrap_or_default().is_empty() - || !env::var("WSLENV").unwrap_or_default().is_empty() || !env::var("WSL_INTEROP").unwrap_or_default().is_empty() { LapceWorkspaceType::RemoteWSL From a0c090647e3cfc6b9777ea85d80686b41b032426 Mon Sep 17 00:00:00 2001 From: Connor Morrison Date: Fri, 8 Jul 2022 12:32:23 -0600 Subject: [PATCH 076/816] enter key in terminal scrolls down --- lapce-data/src/terminal.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lapce-data/src/terminal.rs b/lapce-data/src/terminal.rs index 678b92db3e..bc241182ba 100644 --- a/lapce-data/src/terminal.rs +++ b/lapce-data/src/terminal.rs @@ -236,6 +236,10 @@ impl LapceTerminalViewData { } pub fn send_keypress(&mut self, key: &KeyEvent) { + let mut raw = self.terminal.raw.lock(); + let term = &mut raw.term; + term.scroll_display(Scroll::Bottom); + term.vi_mode_cursor.point.line = term.bottommost_line(); if let Some(command) = LapceTerminalData::resolve_key_event(key) { self.terminal .proxy From 8887aa1c3475913ad52461d1139e864c2b52af4c Mon Sep 17 00:00:00 2001 From: panekj Date: Fri, 8 Jul 2022 11:08:25 +0200 Subject: [PATCH 077/816] feat: add language name to status bar --- lapce-core/src/language.rs | 3 +- lapce-ui/src/status.rs | 63 +++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index b1e64c710d..90bfd39259 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -1,5 +1,6 @@ use std::{collections::HashSet, path::Path}; +use strum_macros::Display; use tree_sitter::{Parser, TreeCursor}; use crate::style::HighlightConfiguration; @@ -94,7 +95,7 @@ struct SyntaxProperties { // Do not assign values to the variants because the number of variants and // number of elements in the LANGUAGES array change as different features // selected by the cargo build command. -#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug)] +#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug, Display)] pub enum LapceLanguage { #[cfg(feature = "lang-rust")] Rust, diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs index b7c0d5064f..7716653bf0 100644 --- a/lapce-ui/src/status.rs +++ b/lapce-ui/src/status.rs @@ -146,6 +146,49 @@ impl LapceStatus { ); left + text_layout.size().width } + + fn paint_icon_with_label_from_right( + &self, + right: f64, + height: f64, + icon: &'static str, + label: String, + ctx: &mut PaintCtx, + config: &Config, + ) -> f64 { + let fg_color = config.get_color_unchecked(LapceTheme::EDITOR_FOREGROUND); + + let text_layout = ctx + .text() + .new_text_layout(label) + .font(config.ui.font_family(), config.ui.font_size() as f64) + .text_color(fg_color.clone()) + .build() + .unwrap(); + + let icon_padding = (height - self.icon_size) / 2.0; + + let mut right = right; + + if let Some(warnings_icon) = get_svg(icon) { + let rect = Size::new(height, height) + .to_rect() + .inflate(-icon_padding, -icon_padding) + .with_origin(Point::new(right - 2.0 * icon_padding, icon_padding)); + ctx.draw_svg(&warnings_icon, rect, Some(fg_color)); + + right += icon_padding + height; + } + + ctx.draw_text( + &text_layout, + Point::new( + right - text_layout.size().width, + (height - text_layout.size().height) / 2.0, + ), + ); + right - text_layout.size().width + } } impl Default for LapceStatus { @@ -201,7 +244,9 @@ impl Widget for LapceStatus { data.main_split.active_editor(), ) { (Some(old_data), Some(data)) => { - if old_data.cursor.get_mode() != data.cursor.get_mode() { + if old_data.cursor.get_mode() != data.cursor.get_mode() + || old_data.editor_id != data.editor_id + { ctx.request_paint(); } } @@ -262,6 +307,7 @@ impl Widget for LapceStatus { ); let mut left = 0.0; + let mut _right = 0.0; if data.config.lapce.modal { let mode = if data.focus_area == FocusArea::Panel(PanelKind::Terminal) { @@ -371,5 +417,20 @@ impl Widget for LapceStatus { ); } } + + if let Some(editor) = &data.main_split.active_editor() { + let lang = match data.main_split.content_doc(&editor.content).syntax() { + Some(v) => v.language.to_string(), + None => String::from("Plain Text"), + }; + _right = self.paint_icon_with_label_from_right( + size.width - 5.0, + size.height, + "", + lang, + ctx, + &data.config, + ) + } } } From f372ec69da10fac810d028923d6f174f5b02c08d Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 9 Jul 2022 19:47:06 +0100 Subject: [PATCH 078/816] terminal scroll to bottom when receive char --- lapce-data/src/terminal.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lapce-data/src/terminal.rs b/lapce-data/src/terminal.rs index bc241182ba..6ddfc62c54 100644 --- a/lapce-data/src/terminal.rs +++ b/lapce-data/src/terminal.rs @@ -236,14 +236,11 @@ impl LapceTerminalViewData { } pub fn send_keypress(&mut self, key: &KeyEvent) { - let mut raw = self.terminal.raw.lock(); - let term = &mut raw.term; - term.scroll_display(Scroll::Bottom); - term.vi_mode_cursor.point.line = term.bottommost_line(); if let Some(command) = LapceTerminalData::resolve_key_event(key) { self.terminal .proxy .terminal_write(self.terminal.term_id, command.as_ref()); + self.terminal.raw.lock().term.scroll_display(Scroll::Bottom); } } } @@ -459,6 +456,7 @@ impl KeyPressFocus for LapceTerminalViewData { fn receive_char(&mut self, _ctx: &mut EventCtx, c: &str) { if self.terminal.mode == Mode::Terminal { self.terminal.proxy.terminal_write(self.terminal.term_id, c); + self.terminal.raw.lock().term.scroll_display(Scroll::Bottom); } } } From 8b919afb583cd7519ba2d3193c02aa18818fc43b Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 9 Jul 2022 20:16:52 +0100 Subject: [PATCH 079/816] Fix editor width with inlay hints And fix normal mode cursor width on inlay hints --- lapce-data/src/document.rs | 22 ++++++++++++++-------- lapce-ui/src/editor.rs | 19 ++++++++++--------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index c2d0a524c2..42e708b5d1 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -80,6 +80,7 @@ pub struct TextLayoutLine { pub struct TextLayoutCache { config_id: u64, pub layouts: HashMap>, + pub max_width: f64, } impl TextLayoutCache { @@ -87,6 +88,7 @@ impl TextLayoutCache { Self { config_id: 0, layouts: HashMap::new(), + max_width: 0.0, } } @@ -210,11 +212,11 @@ impl<'a> InlayHintsLine<'a> { } /// Translate a column position into the text into what it would be after combining - /// If the cursor is right at the start then it will stay there - pub fn col_after(&self, pre_col: usize) -> usize { + /// If before_cursor is false and the cursor is right at the start then it will stay there + pub fn col_after(&self, pre_col: usize, before_cursor: bool) -> usize { let mut last = pre_col; for (col_shift, size, _, col) in self.offset_size_iter() { - if pre_col > col { + if pre_col > col || (pre_col == col && before_cursor) { last = pre_col + col_shift + size; } } @@ -323,7 +325,7 @@ pub struct Document { syntax: Option, line_styles: Rc>, semantic_styles: Option>>, - text_layouts: Rc>, + pub text_layouts: Rc>, load_started: Rc>, loaded: bool, histories: im::HashMap, @@ -1238,10 +1240,14 @@ impl Document { ) -> Arc { self.text_layouts.borrow_mut().check_attributes(config.id); if self.text_layouts.borrow().layouts.get(&line).is_none() { - self.text_layouts.borrow_mut().layouts.insert( - line, - Arc::new(self.new_text_layout(text, line, font_size, config)), - ); + let mut cache = self.text_layouts.borrow_mut(); + let text_layout = + Arc::new(self.new_text_layout(text, line, font_size, config)); + let width = text_layout.text.size().width; + if width > cache.max_width { + cache.max_width = width; + } + cache.layouts.insert(line, text_layout); } self.text_layouts .borrow() diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 051e9cbee5..466bd9ead4 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -346,6 +346,7 @@ impl LapceEditor { * data.config.editor.code_lens_font_size; Size::new( (width * data.doc.buffer().max_len() as f64) + .max(data.doc.text_layouts.borrow().max_width) .max(editor_size.width), if data.config.editor.scroll_beyond_last_line { (height as f64 - line_height).max(0.0) @@ -1107,7 +1108,7 @@ impl LapceEditor { .unwrap_or_default(); // Shift it by the inlay hints - let col = inlay_hints.col_after(col); + let col = inlay_hints.col_after(col, true); let x0 = data .doc @@ -1131,7 +1132,7 @@ impl LapceEditor { ); let (_, right_col) = data.doc.buffer().offset_to_line_col(right_offset); - let right_col = inlay_hints.col_after(right_col); + let right_col = inlay_hints.col_after(right_col, false); let x1 = data .doc .point_of_line_col( @@ -1212,8 +1213,8 @@ impl LapceEditor { .and_then(|_| data.doc.line_inlay_hints(line)) .unwrap_or_default(); - let left_col = inlay_hints.col_after(left_col); - let right_col = inlay_hints.col_after(right_col); + let left_col = inlay_hints.col_after(left_col, false); + let right_col = inlay_hints.col_after(right_col, false); let x0 = data .doc @@ -1257,7 +1258,7 @@ impl LapceEditor { .and_then(|_| data.doc.line_inlay_hints(line)) .unwrap_or_default(); - let col = inlay_hints.col_after(col); + let col = inlay_hints.col_after(col, true); let x0 = data .doc @@ -1281,7 +1282,7 @@ impl LapceEditor { ); let (_, right_col) = data.doc.buffer().offset_to_line_col(right_offset); - let right_col = inlay_hints.col_after(right_col); + let right_col = inlay_hints.col_after(right_col, false); let x1 = data .doc .point_of_line_col( @@ -1363,8 +1364,8 @@ impl LapceEditor { .unwrap_or_default(); // Shift it by the inlay hints - let left_col = inlay_hints.col_after(left_col); - let right_col = inlay_hints.col_after(right_col); + let left_col = inlay_hints.col_after(left_col, false); + let right_col = inlay_hints.col_after(right_col, false); if !line_content.is_empty() { let x0 = data @@ -1414,7 +1415,7 @@ impl LapceEditor { .unwrap_or_default(); // Shift it by the inlay hints - let col = inlay_hints.col_after(col); + let col = inlay_hints.col_after(col, false); let x = data .doc From c40a8165098415ddad2208d16bad040306aaa05e Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 10 Jul 2022 19:53:59 +0100 Subject: [PATCH 080/816] editor size fix --- lapce-ui/src/editor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 466bd9ead4..357dc98660 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -346,7 +346,6 @@ impl LapceEditor { * data.config.editor.code_lens_font_size; Size::new( (width * data.doc.buffer().max_len() as f64) - .max(data.doc.text_layouts.borrow().max_width) .max(editor_size.width), if data.config.editor.scroll_beyond_last_line { (height as f64 - line_height).max(0.0) @@ -381,6 +380,7 @@ impl LapceEditor { } else { Size::new( (width * data.doc.buffer().max_len() as f64) + .max(data.doc.text_layouts.borrow().max_width) .max(editor_size.width), if data.config.editor.scroll_beyond_last_line { (line_height * data.doc.buffer().num_lines() as f64 From 8dd05b1cccf0ccc557e575e0076810507f0b29cc Mon Sep 17 00:00:00 2001 From: Jakub Panek Date: Wed, 29 Jun 2022 05:06:15 +0000 Subject: [PATCH 081/816] feat: add command to change file syntax language --- lapce-core/src/language.rs | 25 ++++++++++++++++++++++--- lapce-data/src/command.rs | 6 ++++++ lapce-data/src/data.rs | 7 +++++++ lapce-data/src/document.rs | 2 +- lapce-data/src/palette.rs | 38 +++++++++++++++++++++++++++++++++++++- lapce-ui/src/palette.rs | 7 +++++++ lapce-ui/src/tab.rs | 26 ++++++++++++++++++++++++++ 7 files changed, 106 insertions(+), 5 deletions(-) diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index 90bfd39259..ae2ab8d23e 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -1,6 +1,6 @@ -use std::{collections::HashSet, path::Path}; +use std::{collections::HashSet, path::Path, str::FromStr}; -use strum_macros::Display; +use strum_macros::{Display, EnumString}; use tree_sitter::{Parser, TreeCursor}; use crate::style::HighlightConfiguration; @@ -95,7 +95,8 @@ struct SyntaxProperties { // Do not assign values to the variants because the number of variants and // number of elements in the LANGUAGES array change as different features // selected by the cargo build command. -#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug, Display)] +#[derive(Eq, PartialEq, Hash, Clone, Copy, Debug, Display, EnumString)] +#[strum(ascii_case_insensitive)] pub enum LapceLanguage { #[cfg(feature = "lang-rust")] Rust, @@ -524,6 +525,24 @@ impl LapceLanguage { None } + pub fn from_name(name: String) -> Option { + match LapceLanguage::from_str(name.to_lowercase().as_str()) { + Ok(v) => Some(v), + Err(e) => { + eprintln!("failed parsing LapceLanguage: {e}"); + None + } + } + } + + pub fn languages() -> Vec { + let mut langs = vec![]; + for l in LANGUAGES { + langs.push(format!("{}", l.id)) + } + langs + } + // NOTE: Instead of using `&LANGUAGES[*self as usize]` directly, the // `debug_assertion` gives better feedback should something has gone wrong // badly. diff --git a/lapce-data/src/command.rs b/lapce-data/src/command.rs index 88a7c66764..831b83c8c5 100644 --- a/lapce-data/src/command.rs +++ b/lapce-data/src/command.rs @@ -95,6 +95,7 @@ impl LapceCommand { | LapceWorkbenchCommand::PaletteLine | LapceWorkbenchCommand::PaletteSymbol | LapceWorkbenchCommand::PaletteCommand + | LapceWorkbenchCommand::ChangeFileLanguage | LapceWorkbenchCommand::ChangeTheme | LapceWorkbenchCommand::ConnectSshHost | LapceWorkbenchCommand::ConnectWsl @@ -383,6 +384,10 @@ pub enum LapceWorkbenchCommand { #[strum(serialize = "install_theme")] #[strum(message = "Install current theme file")] InstallTheme, + + #[strum(serialize = "change_file_language")] + #[strum(message = "Change current file language")] + ChangeFileLanguage, } #[derive(Debug)] @@ -605,4 +610,5 @@ pub enum LapceUICommand { /// Whether it should name/rename the file with the input data apply_naming: bool, }, + SetLanguage(String), } diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index ae5f56cec2..32f87f223d 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -1347,6 +1347,13 @@ impl LapceTabData { LapceWorkbenchCommand::InstallTheme => { self.main_split.install_theme(ctx, &self.config); } + LapceWorkbenchCommand::ChangeFileLanguage => { + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::RunPalette(Some(PaletteType::Language)), + Target::Auto, + )) + } } } diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 42e708b5d1..b87be63b2c 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -758,7 +758,7 @@ impl Document { self.text_layouts.borrow_mut().clear(); } - fn trigger_syntax_change(&self, delta: Option<&RopeDelta>) { + pub fn trigger_syntax_change(&self, delta: Option<&RopeDelta>) { if let Some(syntax) = self.syntax.clone() { let content = self.content.clone(); let rev = self.buffer.rev(); diff --git a/lapce-data/src/palette.rs b/lapce-data/src/palette.rs index c28bbd417e..97633019af 100644 --- a/lapce-data/src/palette.rs +++ b/lapce-data/src/palette.rs @@ -7,6 +7,7 @@ use fuzzy_matcher::skim::SkimMatcherV2; use fuzzy_matcher::FuzzyMatcher; use itertools::Itertools; use lapce_core::command::{EditCommand, FocusCommand}; +use lapce_core::language::LapceLanguage; use lapce_core::mode::Mode; use lapce_core::movement::Movement; use lsp_types::{DocumentSymbolResponse, Range, SymbolInformation, SymbolKind}; @@ -47,6 +48,7 @@ pub enum PaletteType { Reference, Theme, SshHost, + Language, } impl PaletteType { @@ -62,6 +64,7 @@ impl PaletteType { PaletteType::Reference => "".to_string(), PaletteType::Theme => "".to_string(), PaletteType::SshHost => "".to_string(), + PaletteType::Language => "".to_string(), } } @@ -80,7 +83,10 @@ impl PaletteType { /// [`PaletteType`] and the current input. fn get_palette_type(current_type: &PaletteType, input: &str) -> PaletteType { match current_type { - PaletteType::Reference | PaletteType::SshHost | PaletteType::Theme => { + PaletteType::Reference + | PaletteType::SshHost + | PaletteType::Theme + | PaletteType::Language => { return current_type.clone(); } _ => (), @@ -136,6 +142,7 @@ pub enum PaletteItemContent { SshHost(String, String), Command(LapceCommand), Theme(String), + Language(String), } impl PaletteItemContent { @@ -219,6 +226,14 @@ impl PaletteItemContent { Target::Auto, )); } + PaletteItemContent::Language(name) => { + let name = name.to_string(); + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::SetLanguage(name), + Target::Auto, + )) + } PaletteItemContent::Command(command) => { if !preview { ctx.submit_command(Command::new( @@ -473,6 +488,7 @@ impl PaletteData { PaletteType::File => &self.input, PaletteType::Reference => &self.input, PaletteType::Theme => &self.input, + PaletteType::Language => &self.input, PaletteType::SshHost => &self.input, PaletteType::Line => &self.input[1..], PaletteType::DocumentSymbol => &self.input[1..], @@ -598,6 +614,9 @@ impl PaletteViewData { let config = self.config.clone(); self.get_themes(ctx, &config); } + PaletteType::Language => { + self.get_languages(ctx); + } } } @@ -622,6 +641,7 @@ impl PaletteViewData { PaletteType::File => 0, PaletteType::Reference => 0, PaletteType::Theme => 0, + PaletteType::Language => 0, PaletteType::SshHost => 0, PaletteType::Line => 1, PaletteType::DocumentSymbol => 1, @@ -853,6 +873,22 @@ impl PaletteViewData { .collect(); } + fn get_languages(&mut self, _ctx: &mut EventCtx) { + let palette = Arc::make_mut(&mut self.palette); + let mut langs = LapceLanguage::languages(); + langs.push("Plain Text".to_string()); + palette.items = langs + .iter() + .sorted() + .map(|n| PaletteItem { + content: PaletteItemContent::Language(n.to_string()), + filter_text: n.to_string(), + score: 0, + indices: vec![], + }) + .collect(); + } + fn get_commands(&mut self, _ctx: &mut EventCtx) { const EXCLUDED_ITEMS: &[&str] = &["palette.command"]; diff --git a/lapce-ui/src/palette.rs b/lapce-ui/src/palette.rs index 2696829271..c1a4e31d2b 100644 --- a/lapce-ui/src/palette.rs +++ b/lapce-ui/src/palette.rs @@ -640,6 +640,13 @@ impl PaletteContent { "".to_string(), vec![], ), + PaletteItemContent::Language(name) => ( + None, + name.to_string(), + indices.to_vec(), + "".to_string(), + vec![], + ), PaletteItemContent::TerminalLine(_line, content) => ( None, content.clone(), diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index fb9076ba67..38a786fe09 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -11,6 +11,7 @@ use itertools::Itertools; use lapce_core::{ command::FocusCommand, cursor::{Cursor, CursorMode}, + language::LapceLanguage, selection::Selection, }; use lapce_data::{ @@ -1413,6 +1414,31 @@ impl LapceTab { } } } + LapceUICommand::SetLanguage(name) => { + ctx.set_handled(); + let editor = + if let Some(editor) = data.main_split.active_editor() { + editor + } else { + return; + }; + + let mut doc = data.main_split.content_doc(&editor.content); + let doc = Arc::make_mut(&mut doc); + + if name.is_empty() || name.to_lowercase().eq("plain text") { + doc.set_syntax(None); + } else { + let lang = + match LapceLanguage::from_name(name.to_string()) { + Some(v) => v, + None => return, + }; + + doc.set_language(lang); + } + doc.trigger_syntax_change(None); + } LapceUICommand::UpdateHistoryChanges { path, rev, From f9d8a245bbe3adab5cf81bca9f25918f79aef2c5 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 10 Jul 2022 21:17:14 +0100 Subject: [PATCH 082/816] move the place to get semantic tokens --- lapce-data/src/document.rs | 52 ++++++++++++++++++++++++++++++- lapce-data/src/proxy.rs | 43 +++++++------------------- lapce-proxy/src/buffer.rs | 11 ++----- lapce-proxy/src/dispatch.rs | 44 +++++--------------------- lapce-proxy/src/lsp.rs | 61 ++++++++++++++++--------------------- lapce-rpc/src/core.rs | 11 ++----- lapce-rpc/src/proxy.rs | 3 ++ lapce-rpc/src/style.rs | 13 +++++++- 8 files changed, 115 insertions(+), 123 deletions(-) diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index b87be63b2c..992655dd42 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -32,7 +32,7 @@ use lapce_core::{ }; use lapce_rpc::{ buffer::{BufferId, NewBufferResponse}, - style::{LineStyle, LineStyles, Style}, + style::{LineStyle, LineStyles, SemanticStyles, Style}, }; use lsp_types::{ CodeActionOrCommand, CodeActionResponse, InlayHint, InlayHintLabel, @@ -615,6 +615,55 @@ impl Document { } } + fn get_semantic_styles(&self) { + if !self.loaded() { + return; + } + + if !self.content().is_file() { + return; + } + if let BufferContent::File(path) = self.content() { + let tab_id = self.tab_id; + let path = path.clone(); + let buffer_id = self.id(); + let rev = self.rev(); + let len = self.buffer().len(); + let event_sink = self.event_sink.clone(); + self.proxy.get_semantic_tokens( + buffer_id, + Box::new(move |result| { + if let Ok(res) = result { + if let Ok(resp) = + serde_json::from_value::(res) + { + rayon::spawn(move || { + let mut styles_span = SpansBuilder::new(len); + for style in resp.styles { + styles_span.add_span( + Interval::new(style.start, style.end), + style.style, + ); + } + let styles_span = Arc::new(styles_span.build()); + let _ = event_sink.submit_command( + LAPCE_UI_COMMAND, + LapceUICommand::UpdateSemanticStyles( + buffer_id, + path, + rev, + styles_span, + ), + Target::Widget(tab_id), + ); + }); + } + } + }), + ); + } + } + pub fn get_inlay_hints(&self) { if !self.loaded() { return; @@ -677,6 +726,7 @@ impl Document { self.find.borrow_mut().unset(); *self.find_progress.borrow_mut() = FindProgress::Started; self.get_inlay_hints(); + self.get_semantic_styles(); self.clear_style_cache(); self.trigger_syntax_change(delta); self.trigger_head_change(); diff --git a/lapce-data/src/proxy.rs b/lapce-data/src/proxy.rs index 77500a6182..1a5c48c23a 100644 --- a/lapce-data/src/proxy.rs +++ b/lapce-data/src/proxy.rs @@ -28,8 +28,7 @@ use lsp_types::Url; use parking_lot::Mutex; use serde_json::json; use serde_json::Value; -use xi_rope::spans::SpansBuilder; -use xi_rope::{Interval, Rope, RopeDelta}; +use xi_rope::{Rope, RopeDelta}; use crate::command::LapceUICommand; use crate::command::LAPCE_UI_COMMAND; @@ -68,36 +67,6 @@ impl Handler for LapceProxy { fn handle_notification(&mut self, rpc: Self::Notification) -> ControlFlow { use lapce_rpc::core::CoreNotification::*; match rpc { - SemanticStyles { - rev, - buffer_id, - path, - styles, - len, - } => { - let event_sink = self.event_sink.clone(); - let tab_id = self.tab_id; - rayon::spawn(move || { - let mut styles_span = SpansBuilder::new(len); - for style in styles { - styles_span.add_span( - Interval::new(style.start, style.end), - style.style, - ); - } - let styles_span = Arc::new(styles_span.build()); - let _ = event_sink.submit_command( - LAPCE_UI_COMMAND, - LapceUICommand::UpdateSemanticStyles( - buffer_id, - path, - rev, - styles_span, - ), - Target::Widget(tab_id), - ); - }); - } OpenFileChanged { path, content } => { let _ = self.event_sink.submit_command( LAPCE_UI_COMMAND, @@ -710,6 +679,16 @@ impl LapceProxy { ); } + pub fn get_semantic_tokens(&self, buffer_id: BufferId, f: Box) { + self.rpc.send_rpc_request_async( + "get_semantic_tokens", + &json!({ + "buffer_id": buffer_id, + }), + f, + ); + } + pub fn get_code_actions( &self, buffer_id: BufferId, diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 3fd428afdc..96de5645eb 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -1,5 +1,4 @@ use anyhow::{anyhow, Result}; -use crossbeam_channel::Sender; use lapce_rpc::buffer::BufferId; use std::ffi::OsString; use std::fs; @@ -12,22 +11,18 @@ use std::{borrow::Cow, path::Path, time::SystemTime}; use lsp_types::*; use xi_rope::{interval::IntervalBounds, rope::Rope, RopeDelta}; +#[derive(Clone)] pub struct Buffer { pub language_id: String, pub id: BufferId, pub rope: Rope, pub path: PathBuf, pub rev: u64, - sender: Sender<(BufferId, u64)>, pub mod_time: Option, } impl Buffer { - pub fn new( - id: BufferId, - path: PathBuf, - sender: Sender<(BufferId, u64)>, - ) -> Buffer { + pub fn new(id: BufferId, path: PathBuf) -> Buffer { let rope = if let Ok(rope) = load_rope(&path) { rope } else { @@ -42,7 +37,6 @@ impl Buffer { path, language_id, rev, - sender, mod_time, } } @@ -95,7 +89,6 @@ impl Buffer { text: self.get_document(), }, }; - let _ = self.sender.send((self.id, self.rev)); Some(content_change) } diff --git a/lapce-proxy/src/dispatch.rs b/lapce-proxy/src/dispatch.rs index 5a383f7cb4..1ecd6aaa0d 100644 --- a/lapce-proxy/src/dispatch.rs +++ b/lapce-proxy/src/dispatch.rs @@ -6,7 +6,7 @@ use crate::watcher::{FileWatcher, Notify, WatchToken}; use alacritty_terminal::event_loop::Msg; use alacritty_terminal::term::SizeInfo; use anyhow::{anyhow, Context, Result}; -use crossbeam_channel::{unbounded, Receiver, Sender}; +use crossbeam_channel::{Receiver, Sender}; use directories::BaseDirs; use git2::build::CheckoutBuilder; use git2::{DiffOptions, Repository}; @@ -38,7 +38,6 @@ const WORKSPACE_EVENT_TOKEN: WatchToken = WatchToken(2); #[derive(Clone)] pub struct Dispatcher { pub sender: Arc>, - pub git_sender: Sender<(BufferId, u64)>, pub workspace: Arc>>, pub buffers: Arc>>, @@ -61,10 +60,8 @@ impl Notify for Dispatcher { impl Dispatcher { pub fn new(sender: Sender) -> Dispatcher { let plugins = PluginCatalog::new(); - let (git_sender, git_receiver) = unbounded(); let dispatcher = Dispatcher { sender: Arc::new(sender), - git_sender, workspace: Arc::new(Mutex::new(None)), buffers: Arc::new(Mutex::new(HashMap::new())), open_files: Arc::new(Mutex::new(HashMap::new())), @@ -106,7 +103,6 @@ impl Dispatcher { } }); - dispatcher.start_update_process(git_receiver); dispatcher.send_notification("proxy_connected", json!({})); dispatcher @@ -145,32 +141,6 @@ impl Dispatcher { Ok(()) } - pub fn start_update_process(&self, receiver: Receiver<(BufferId, u64)>) { - let buffers = self.buffers.clone(); - let lsp = self.lsp.clone(); - thread::spawn(move || loop { - match receiver.recv() { - Ok((buffer_id, rev)) => { - let buffers = buffers.lock(); - let buffer = buffers.get(&buffer_id).unwrap(); - let (_path, _content) = if buffer.rev != rev { - continue; - } else { - ( - buffer.path.clone(), - buffer.slice_to_cow(..buffer.len()).to_string(), - ) - }; - - lsp.lock().get_semantic_tokens(buffer); - } - Err(_) => { - return; - } - } - }); - } - pub fn next( &self, reader: &mut R, @@ -469,10 +439,9 @@ impl Dispatcher { self.open_files .lock() .insert(path.to_str().unwrap().to_string(), buffer_id); - let buffer = Buffer::new(buffer_id, path, self.git_sender.clone()); + let buffer = Buffer::new(buffer_id, path); let content = buffer.rope.to_string(); self.buffers.lock().insert(buffer_id, buffer); - let _ = self.git_sender.send((buffer_id, 0)); let resp = NewBufferResponse { content }; let _ = self.sender.send(json!({ "id": id, @@ -556,6 +525,11 @@ impl Dispatcher { let buffer = buffers.get(&buffer_id).unwrap(); self.lsp.lock().get_inlay_hints(id, buffer); } + GetSemanticTokens { buffer_id } => { + let buffers = self.buffers.lock(); + let buffer = buffers.get(&buffer_id).unwrap(); + self.lsp.lock().get_semantic_tokens(id, buffer); + } GetCodeActions { buffer_id, position, @@ -643,8 +617,7 @@ impl Dispatcher { rev, content, } => { - let mut buffer = - Buffer::new(buffer_id, path.clone(), self.git_sender.clone()); + let mut buffer = Buffer::new(buffer_id, path.clone()); buffer.rope = Rope::from(content); buffer.rev = rev; let resp = buffer.save(rev).map(|_r| json!({})); @@ -653,7 +626,6 @@ impl Dispatcher { self.open_files .lock() .insert(path.to_str().unwrap().to_string(), buffer_id); - let _ = self.git_sender.send((buffer_id, 0)); } self.respond(id, resp); } diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index 86072c20d1..dc89926842 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -20,7 +20,7 @@ use anyhow::{anyhow, Result}; use jsonrpc_lite::{Id, JsonRpc, Params}; use lapce_rpc::{ buffer::BufferId, - style::{LineStyle, Style}, + style::{LineStyle, SemanticStyles, Style}, RequestId, }; use lsp_types::*; @@ -222,42 +222,33 @@ impl LspCatalog { } } - pub fn get_semantic_tokens(&self, buffer: &Buffer) { - let buffer_id = buffer.id; - let path = buffer.path.clone(); - let rev = buffer.rev; - let len = buffer.len(); + pub fn get_semantic_tokens(&self, id: RequestId, buffer: &Buffer) { + let buffer = buffer.clone(); if let Some(client) = self.clients.get(&buffer.language_id) { - let uri = client.get_uri(buffer); - let local_dispatcher = self.dispatcher.clone().unwrap(); + let uri = client.get_uri(&buffer); client.request_semantic_tokens(uri, move |lsp_client, result| { - if let Ok(res) = result { - let buffers = local_dispatcher.buffers.lock(); - let buffer = buffers.get(&buffer_id).unwrap(); - if buffer.rev != rev { - return; - } - let lsp_state = lsp_client.state.lock(); - let semantic_tokens_provider = &lsp_state - .server_capabilities - .as_ref() - .unwrap() - .semantic_tokens_provider; - if let Some(styles) = - format_semantic_styles(buffer, semantic_tokens_provider, res) - { - local_dispatcher.send_notification( - "semantic_styles", - json!({ - "rev": rev, - "buffer_id": buffer_id, - "path": path, - "styles": styles, - "len": len, - }), - ) - } - } + let lsp_state = lsp_client.state.lock(); + let semantic_tokens_provider = &lsp_state + .server_capabilities + .as_ref() + .unwrap() + .semantic_tokens_provider; + let result = result.and_then(|value| { + format_semantic_styles(&buffer, semantic_tokens_provider, value) + .map(|styles| { + serde_json::to_value(SemanticStyles { + rev: buffer.rev, + buffer_id: buffer.id, + path: buffer.path.clone(), + styles, + len: buffer.len(), + }) + .unwrap() + }) + .ok_or_else(|| anyhow!("can't format semantic styles")) + }); + + lsp_client.dispatcher.respond(id, result); }); } } diff --git a/lapce-rpc/src/core.rs b/lapce-rpc/src/core.rs index 60d7ef9e48..e36ad83373 100644 --- a/lapce-rpc/src/core.rs +++ b/lapce-rpc/src/core.rs @@ -3,8 +3,8 @@ use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::PathBuf}; use crate::{ - buffer::BufferId, file::FileNodeItem, plugin::PluginDescription, - source_control::DiffInfo, style::LineStyle, terminal::TermId, + file::FileNodeItem, plugin::PluginDescription, source_control::DiffInfo, + terminal::TermId, }; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -12,13 +12,6 @@ use crate::{ #[serde(tag = "method", content = "params")] pub enum CoreNotification { ProxyConnected {}, - SemanticStyles { - rev: u64, - buffer_id: BufferId, - path: PathBuf, - len: usize, - styles: Vec, - }, OpenFileChanged { path: PathBuf, content: String, diff --git a/lapce-rpc/src/proxy.rs b/lapce-rpc/src/proxy.rs index 72cecf704d..82e31cd59d 100644 --- a/lapce-rpc/src/proxy.rs +++ b/lapce-rpc/src/proxy.rs @@ -104,6 +104,9 @@ pub enum ProxyRequest { GetInlayHints { buffer_id: BufferId, }, + GetSemanticTokens { + buffer_id: BufferId, + }, GetCodeActions { buffer_id: BufferId, position: Position, diff --git a/lapce-rpc/src/style.rs b/lapce-rpc/src/style.rs index ca94260499..f3791df5bf 100644 --- a/lapce-rpc/src/style.rs +++ b/lapce-rpc/src/style.rs @@ -1,7 +1,9 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{collections::HashMap, path::PathBuf, sync::Arc}; use serde::{Deserialize, Serialize}; +use crate::buffer::BufferId; + pub type LineStyles = HashMap>>; #[derive(Serialize, Deserialize, Clone, Debug)] @@ -15,3 +17,12 @@ pub struct LineStyle { pub struct Style { pub fg_color: Option, } + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct SemanticStyles { + pub rev: u64, + pub buffer_id: BufferId, + pub path: PathBuf, + pub len: usize, + pub styles: Vec, +} From a92b3f273d5f4e07360994f5ea43d06ed05598f3 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 10 Jul 2022 22:15:27 +0100 Subject: [PATCH 083/816] make status line items clickable --- lapce-ui/src/status.rs | 198 +++++++++++++++++++++++++++++++---------- 1 file changed, 149 insertions(+), 49 deletions(-) diff --git a/lapce-ui/src/status.rs b/lapce-ui/src/status.rs index 7716653bf0..d0f461ee7e 100644 --- a/lapce-ui/src/status.rs +++ b/lapce-ui/src/status.rs @@ -1,8 +1,8 @@ use druid::{ kurbo::Line, - piet::{Text, TextLayout, TextLayoutBuilder}, - Command, Event, EventCtx, MouseEvent, PaintCtx, Point, RenderContext, Size, - Target, Widget, + piet::{PietTextLayout, Svg, Text, TextLayout, TextLayoutBuilder}, + Command, Event, EventCtx, MouseEvent, PaintCtx, Point, Rect, RenderContext, + Size, Target, Widget, }; use lapce_core::mode::Mode; use lapce_data::{ @@ -16,6 +16,7 @@ use crate::{svg::get_svg, tab::LapceIcon}; pub struct LapceStatus { panel_icons: Vec, + clickable_items: Vec<(Rect, Command)>, mouse_pos: Point, icon_size: f64, } @@ -24,6 +25,7 @@ impl LapceStatus { pub fn new() -> Self { Self { panel_icons: Vec::new(), + clickable_items: Vec::new(), mouse_pos: Point::ZERO, icon_size: 13.0, } @@ -96,6 +98,11 @@ impl LapceStatus { return true; } } + for (rect, _) in self.clickable_items.iter() { + if rect.contains(mouse_event.pos) { + return true; + } + } false } @@ -103,6 +110,13 @@ impl LapceStatus { for icon in self.panel_icons.iter() { if icon.rect.contains(mouse_event.pos) { ctx.submit_command(icon.command.clone()); + return; + } + } + for (rect, cmd) in self.clickable_items.iter() { + if rect.contains(mouse_event.pos) { + ctx.submit_command(cmd.clone()); + return; } } } @@ -115,7 +129,7 @@ impl LapceStatus { label: String, ctx: &mut PaintCtx, config: &Config, - ) -> f64 { + ) -> (f64, Option<(Rect, Svg)>, (Point, PietTextLayout)) { let fg_color = config.get_color_unchecked(LapceTheme::EDITOR_FOREGROUND); let text_layout = ctx @@ -130,21 +144,20 @@ impl LapceStatus { let mut left = left; - if let Some(warnings_icon) = get_svg(icon) { + let svg = if let Some(warnings_icon) = get_svg(icon) { let rect = Size::new(height, height) .to_rect() .inflate(-icon_padding, -icon_padding) .with_origin(Point::new(left + 2.0 * icon_padding, icon_padding)); - ctx.draw_svg(&warnings_icon, rect, Some(fg_color)); left += icon_padding + height; - } + Some((rect, warnings_icon)) + } else { + None + }; - ctx.draw_text( - &text_layout, - Point::new(left, (height - text_layout.size().height) / 2.0), - ); - left + text_layout.size().width + let point = Point::new(left, (height - text_layout.size().height) / 2.0); + (left + text_layout.size().width, svg, (point, text_layout)) } fn paint_icon_with_label_from_right( @@ -155,7 +168,7 @@ impl LapceStatus { label: String, ctx: &mut PaintCtx, config: &Config, - ) -> f64 { + ) -> (f64, Option<(Rect, Svg)>, (Point, PietTextLayout)) { let fg_color = config.get_color_unchecked(LapceTheme::EDITOR_FOREGROUND); let text_layout = ctx @@ -170,24 +183,23 @@ impl LapceStatus { let mut right = right; - if let Some(warnings_icon) = get_svg(icon) { + let svg = if let Some(warnings_icon) = get_svg(icon) { let rect = Size::new(height, height) .to_rect() .inflate(-icon_padding, -icon_padding) .with_origin(Point::new(right - 2.0 * icon_padding, icon_padding)); - ctx.draw_svg(&warnings_icon, rect, Some(fg_color)); right += icon_padding + height; - } + Some((rect, warnings_icon)) + } else { + None + }; - ctx.draw_text( - &text_layout, - Point::new( - right - text_layout.size().width, - (height - text_layout.size().height) / 2.0, - ), + let point = Point::new( + right - text_layout.size().width, + (height - text_layout.size().height) / 2.0, ); - right - text_layout.size().width + (right - text_layout.size().width, svg, (point, text_layout)) } } @@ -280,6 +292,7 @@ impl Widget for LapceStatus { } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &druid::Env) { + self.clickable_items.clear(); let size = ctx.size(); let rect = size.to_rect(); let shadow_width = data.config.ui.drop_shadow_width() as f64; @@ -350,22 +363,72 @@ impl Widget for LapceStatus { left += text_size.width + 10.0; } - left = self.paint_icon_with_label( - left, - size.height, - "error.svg", - data.main_split.error_count.to_string(), - ctx, - &data.config, - ); - left = self.paint_icon_with_label( - left - 5.0, - size.height, - "warning.svg", - data.main_split.warning_count.to_string(), - ctx, - &data.config, - ); + let x = left + 5.0; + let (new_left, error_svg, (error_point, error_text_layout)) = self + .paint_icon_with_label( + left, + size.height, + "error.svg", + data.main_split.error_count.to_string(), + ctx, + &data.config, + ); + left = new_left; + let (new_left, warning_svg, (warning_point, warning_text_layout)) = self + .paint_icon_with_label( + left - 5.0, + size.height, + "warning.svg", + data.main_split.warning_count.to_string(), + ctx, + &data.config, + ); + left = new_left; + + let problem_rect = Rect::ZERO + .with_origin(Point::new(x, 0.0)) + .with_size(Size::new(left + 5.0 - x, size.height)); + if problem_rect.contains(self.mouse_pos) { + ctx.fill( + problem_rect, + data.config.get_color_unchecked(LapceTheme::PANEL_CURRENT), + ); + } + if let Some((rect, svg)) = error_svg { + ctx.draw_svg( + &svg, + rect, + Some( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), + ), + ); + } + ctx.draw_text(&error_text_layout, error_point); + if let Some((rect, svg)) = warning_svg { + ctx.draw_svg( + &svg, + rect, + Some( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), + ), + ); + } + ctx.draw_text(&warning_text_layout, warning_point); + self.clickable_items.push(( + problem_rect, + Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::ToggleProblemVisual, + ), + data: None, + }, + Target::Widget(data.id), + ), + )); for progress in data.progresses.iter() { let mut text = progress.title.clone(); @@ -402,8 +465,7 @@ impl Widget for LapceStatus { if icon.rect.contains(self.mouse_pos) { ctx.fill( &icon.rect, - data.config - .get_color_unchecked(LapceTheme::EDITOR_CURRENT_LINE), + data.config.get_color_unchecked(LapceTheme::PANEL_CURRENT), ); } if let Some(svg) = get_svg(icon.icon) { @@ -418,19 +480,57 @@ impl Widget for LapceStatus { } } + let mut right = size.width - 5.0; if let Some(editor) = &data.main_split.active_editor() { let lang = match data.main_split.content_doc(&editor.content).syntax() { Some(v) => v.language.to_string(), None => String::from("Plain Text"), }; - _right = self.paint_icon_with_label_from_right( - size.width - 5.0, - size.height, - "", - lang, - ctx, - &data.config, - ) + let x1 = right; + let (new_right, svg, (point, text_layout)) = self + .paint_icon_with_label_from_right( + right - 5.0, + size.height, + "", + lang, + ctx, + &data.config, + ); + right = new_right; + let x0 = right - 5.0; + let rect = Rect::ZERO + .with_origin(Point::new(x0, 0.0)) + .with_size(Size::new(x1 - x0, size.height)); + if rect.contains(self.mouse_pos) { + ctx.fill( + rect, + data.config.get_color_unchecked(LapceTheme::PANEL_CURRENT), + ); + } + if let Some((rect, svg)) = svg { + ctx.draw_svg( + &svg, + rect, + Some( + data.config + .get_color_unchecked(LapceTheme::EDITOR_FOREGROUND), + ), + ); + } + ctx.draw_text(&text_layout, point); + self.clickable_items.push(( + rect, + Command::new( + LAPCE_COMMAND, + LapceCommand { + kind: CommandKind::Workbench( + LapceWorkbenchCommand::ChangeFileLanguage, + ), + data: None, + }, + Target::Widget(data.id), + ), + )); } } } From 461e6ebf76bf2424ea4e80ca63f8ebc819221d27 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 10 Jul 2022 22:17:38 +0100 Subject: [PATCH 084/816] only set lanaguge when executed --- lapce-data/src/palette.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lapce-data/src/palette.rs b/lapce-data/src/palette.rs index 97633019af..8e49c2935a 100644 --- a/lapce-data/src/palette.rs +++ b/lapce-data/src/palette.rs @@ -227,12 +227,14 @@ impl PaletteItemContent { )); } PaletteItemContent::Language(name) => { - let name = name.to_string(); - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::SetLanguage(name), - Target::Auto, - )) + if !preview { + let name = name.to_string(); + ctx.submit_command(Command::new( + LAPCE_UI_COMMAND, + LapceUICommand::SetLanguage(name), + Target::Auto, + )) + } } PaletteItemContent::Command(command) => { if !preview { From fb960b914a4821ccbfbc8a9b26591b942d1de4e6 Mon Sep 17 00:00:00 2001 From: Chetan Vardhan Date: Tue, 12 Jul 2022 02:49:51 +0530 Subject: [PATCH 085/816] Add tree-sitter Julia support --- Cargo.lock | 10 ++ defaults/settings.toml | 11 ++ lapce-core/Cargo.toml | 4 +- lapce-core/queries/julia/highlights.scm | 192 ++++++++++++++++++++++++ lapce-core/src/language.rs | 16 ++ lapce-core/src/style.rs | 14 ++ lapce-ui/Cargo.toml | 2 + 7 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 lapce-core/queries/julia/highlights.scm diff --git a/Cargo.lock b/Cargo.lock index a76340fb0f..cf0d8758c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2221,6 +2221,7 @@ dependencies = [ "tree-sitter-java", "tree-sitter-javascript", "tree-sitter-json", + "tree-sitter-julia", "tree-sitter-md", "tree-sitter-ocaml", "tree-sitter-php", @@ -4716,6 +4717,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-julia" +version = "0.19.0" +source = "git+https://github.com/VarLad/tree-sitter-julia?branch=master#05b4de163932f52bc1e57c5ff4deff291b6e8805" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-md" version = "0.0.1" diff --git a/defaults/settings.toml b/defaults/settings.toml index 0b8a560228..dbb746405f 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -79,6 +79,17 @@ magenta = "#C678DD" "builtinType" = "$cyan" "escape" = "$cyan" "embedded" = "$cyan" +"parameter" = "$green" +"symbol" = "$yellow" +"conditional" = "$blue" +"exception" = "$red" +"repeat" = "$green" +"include" = "$magenta" +"float" = "$yellow" +"boolean" = "$blue" +"character" = "$purple" +"punctuation.delimiter" = "$orange" +"punctuation.bracket" = "$blue" [theme.ui] "lapce.active_tab" = "$black" diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 5ae15c98c8..1eca9591bb 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -50,6 +50,7 @@ tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", branch # switch to upstream version after this is merged https://github.com/tree-sitter/tree-sitter-bash/pull/120 tree-sitter-bash = { git = "https://github.com/syntacti/tree-sitter-bash", branch = "master", optional = true } tree-sitter-yaml = { git = "https://github.com/panekj/tree-sitter-yaml", branch = "master", optional = true } +tree-sitter-julia = { git = "https://github.com/VarLad/tree-sitter-julia", branch = "master", optional = true } [features] default = [] @@ -84,4 +85,5 @@ lang-hare = ["dep:tree-sitter-hare"] lang-css = ["dep:tree-sitter-css"] lang-zig = ["dep:tree-sitter-zig"] lang-bash = ["dep:tree-sitter-bash"] -lang-yaml = ["dep:tree-sitter-yaml"] \ No newline at end of file +lang-yaml = ["dep:tree-sitter-yaml"] +lang-julia = ["dep:tree-sitter-julia"] \ No newline at end of file diff --git a/lapce-core/queries/julia/highlights.scm b/lapce-core/queries/julia/highlights.scm new file mode 100644 index 0000000000..1bf0a90e8a --- /dev/null +++ b/lapce-core/queries/julia/highlights.scm @@ -0,0 +1,192 @@ +(identifier) @variable + +(operator) @operator +(range_expression ":" @operator) +(pair_expression "=>" @operator) + +;; In case you want type highlighting based on Julia naming conventions (this might collide with mathematical notation) +;((identifier) @type ; exception: mark `A_foo` sort of identifiers as variables + ;(match? @type "^[A-Z][^_]")) +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_]{2}[A-Z_]*$")) + +(macro_identifier) @function.macro +(macro_identifier (identifier) @function.macro) ; for any one using the variable highlight +(macro_definition + name: (identifier) @function.macro + ["macro" "end" @keyword]) + +(field_expression + (identifier) + (identifier) @field .) + +(function_definition + name: (identifier) @function) +(call_expression + (identifier) @function) +(call_expression + (field_expression (identifier) @method .)) +(broadcast_call_expression + (identifier) @function) +(broadcast_call_expression + (field_expression (identifier) @method .)) +(parameter_list + (identifier) @parameter) +(parameter_list + (optional_parameter . + (identifier) @parameter)) +(typed_parameter + (identifier) @parameter + (identifier) @type) +(type_parameter_list + (identifier) @type) +(typed_parameter + (identifier) @parameter + (parameterized_identifier) @type) +(function_expression + . (identifier) @parameter) +(spread_parameter) @parameter +(spread_parameter + (identifier) @parameter) +(named_argument + . (identifier) @parameter) +(argument_list + (typed_expression + (identifier) @parameter + (identifier) @type)) +(argument_list + (typed_expression + (identifier) @parameter + (parameterized_identifier) @type)) + +;; Symbol expressions (:my-wanna-be-lisp-keyword) +(quote_expression + (identifier)) @symbol + +;; Parsing error! foo (::Type) gets parsed as two quote expressions +(argument_list + (quote_expression + (quote_expression + (identifier) @type))) + +(type_argument_list + (identifier) @type) +(parameterized_identifier (_)) @type +(argument_list + (typed_expression . (identifier) @parameter)) + +(typed_expression + (identifier) @type .) +(typed_expression + (parameterized_identifier) @type .) + +(abstract_definition + name: (identifier) @type) +(struct_definition + name: (identifier) @type) + +(subscript_expression + (_) + (range_expression + (identifier) @constant.builtin .) + (#eq? @constant.builtin "end")) + +"end" @keyword + +(if_statement + ["if" "end"] @conditional) +(elseif_clause + ["elseif"] @conditional) +(else_clause + ["else"] @conditional) +(ternary_expression + ["?" ":"] @conditional) + +(function_definition ["function" "end"] @keyword.function) + +[ + "abstract" + "const" + "macro" + "primitive" + "struct" + "type" +] @keyword + +"return" @keyword.return + +((identifier) @keyword (#any-of? @keyword "global" "local")) + +(compound_expression + ["begin" "end"] @keyword) +(try_statement + ["try" "end" ] @exception) +(finally_clause + "finally" @exception) +(catch_clause + "catch" @exception) +(quote_statement + ["quote" "end"] @keyword) +(let_statement + ["let" "end"] @keyword) +(for_statement + ["for" "end"] @repeat) +(while_statement + ["while" "end"] @repeat) +(break_statement) @repeat +(continue_statement) @repeat +(for_clause + "for" @repeat) +(do_clause + ["do" "end"] @keyword) + +"in" @keyword.operator + +(export_statement + ["export"] @include) + +(import_statement + ["import" "using"] @include) + +(module_definition + ["module" "end"] @include) + +((identifier) @include (#eq? @include "baremodule")) + + +;;; Literals + +(integer_literal) @number +(float_literal) @float + +((identifier) @float + (#any-of? @float "NaN" "NaN16" "NaN32" + "Inf" "Inf16" "Inf32")) + +((identifier) @boolean + (#any-of? @boolean "true" "false")) + +((identifier) @constant.builtin + (#any-of? @constant.builtin "nothing" "missing")) + +(character_literal) @character +(escape_sequence) @string.escape + +(string_literal) @string +(prefixed_string_literal + prefix: (identifier) @function.macro) @string + +(command_literal) @string.special +(prefixed_command_literal + prefix: (identifier) @function.macro) @string.special + +[ + (line_comment) + (block_comment) +] @comment + +;;; Punctuation + +(quote_expression ":" @symbol) +["::" "." "," "..."] @punctuation.delimiter +["[" "]" "(" ")" "{" "}"] @punctuation.bracket diff --git a/lapce-core/src/language.rs b/lapce-core/src/language.rs index ae2ab8d23e..87543be5ed 100644 --- a/lapce-core/src/language.rs +++ b/lapce-core/src/language.rs @@ -162,6 +162,8 @@ pub enum LapceLanguage { Bash, #[cfg(feature = "lang-yaml")] Yaml, + #[cfg(feature = "lang-julia")] + Julia, } // NOTE: Elements in the array must be in the same order as the enum variants of @@ -510,6 +512,16 @@ const LANGUAGES: &[SyntaxProperties] = &[ code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), extensions: &["yml", "yaml"], }, + #[cfg(feature = "lang-julia")] + SyntaxProperties { + id: LapceLanguage::Julia, + language: tree_sitter_julia::language, + highlight: include_str!("../queries/julia/highlights.scm"), + comment: "#", + indent: " ", + code_lens: (DEFAULT_CODE_LENS_LIST, DEFAULT_CODE_LENS_IGNORE_LIST), + extensions: &["julia", "jl"], + }, ]; impl LapceLanguage { @@ -807,4 +819,8 @@ mod test { fn test_yaml_lang() { assert_language(LapceLanguage::Yaml, &["yml", "yaml"]); } + #[cfg(feature = "lang-julia")] + fn test_julia_lang() { + assert_language(LapceLanguage::Julia, &["julia", "jl"]); + } } diff --git a/lapce-core/src/style.rs b/lapce-core/src/style.rs index 959d1e9548..2f5cd51d87 100644 --- a/lapce-core/src/style.rs +++ b/lapce-core/src/style.rs @@ -24,6 +24,18 @@ pub const SCOPES: &[&str] = &[ "function", "label", "keyword", + "field", + "method", + "parameter", + "symbol", + "conditional", + "exception", + "repeat", + "include", + "number", + "float", + "boolean", + "character", "string", "variable", "variable.other.member", @@ -31,6 +43,8 @@ pub const SCOPES: &[&str] = &[ "attribute", "escape", "embedded", + "punctuation.delimiter", + "punctuation.bracket", ]; /// Indicates which highlight should be applied to a region of source code. diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index f5ef994ab3..c459d8749a 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -91,6 +91,7 @@ all-languages = [ "lang-zig", "lang-bash", "lang-yaml", + "lang-julia", ] lang-rust = ["lapce-core/lang-rust"] @@ -122,3 +123,4 @@ lang-css = ["lapce-core/lang-css"] lang-zig = ["lapce-core/lang-zig"] lang-bash = ["lapce-core/lang-bash"] lang-yaml = ["lapce-core/lang-yaml"] +lang-julia = ["lapce-core/lang-julia"] From 627b813b39b2117fcc45c4c3a464437044467b11 Mon Sep 17 00:00:00 2001 From: panekj Date: Thu, 14 Jul 2022 00:29:05 +0200 Subject: [PATCH 086/816] fix: set window minimal size Window should define minimal size to prevent situation where user resizes it to the point where it cannot be fixed --- lapce-ui/src/app.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 515183fe04..251af908eb 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -113,6 +113,7 @@ where { let mut desc = WindowDesc::new_with_id(window_id, root) .title(LocalizedString::new("Lapce").with_placeholder("Lapce")) + .with_min_size(Size::new(384.0, 384.0)) .window_size(size) .set_position(pos); From 1ceefda79b05fffb9b050e53194c7c4354674eb4 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 14 Jul 2022 20:15:37 +0100 Subject: [PATCH 087/816] change release title to be tag name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 73b514db26..79c754cd9a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -147,4 +147,4 @@ jobs: env: DEBUG: api run: | - gh release create $TAG_NAME $PRERELEASE --title "$SUBJECT" --target $GITHUB_SHA lapce-macos/* lapce-linux/* lapce-windows/* + gh release create $TAG_NAME $PRERELEASE --title "$TAG_NAME" --target $GITHUB_SHA lapce-macos/* lapce-linux/* lapce-windows/* From 6857d2babe1cbd8eb97a86c089f21acf06b356ae Mon Sep 17 00:00:00 2001 From: panekj Date: Thu, 14 Jul 2022 21:18:54 +0200 Subject: [PATCH 088/816] fix: don't panic on empty active_tab --- lapce-ui/src/find.rs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lapce-ui/src/find.rs b/lapce-ui/src/find.rs index eccdb3d0bd..95e65958ba 100644 --- a/lapce-ui/src/find.rs +++ b/lapce-ui/src/find.rs @@ -193,19 +193,24 @@ impl Widget for FindBox { return; } - let buffer = match data - .main_split - .editor_tabs - .get(&data.main_split.active_tab.unwrap()) - .unwrap() - .active_child() - { - lapce_data::data::EditorTabChild::Editor(view_id, _, _) => { - data.editor_view_content(*view_id) - } - lapce_data::data::EditorTabChild::Settings(view_id, _) => { - data.editor_view_content(*view_id) + let buffer = match &data.main_split.active_tab.as_ref() { + Some(active_tab) => { + match data + .main_split + .editor_tabs + .get(active_tab) + .unwrap() + .active_child() + { + lapce_data::data::EditorTabChild::Editor(view_id, _, _) => { + data.editor_view_content(*view_id) + } + lapce_data::data::EditorTabChild::Settings(view_id, _) => { + data.editor_view_content(*view_id) + } + } } + None => return, }; let rect = ctx.size().to_rect(); From f8e45ae56745571ebb3ce8bcae2c2f7d975f4727 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 14 Jul 2022 20:43:16 +0100 Subject: [PATCH 089/816] bump version --- Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- extra/linux/dev.lapce.lapce.metainfo.xml | 2 +- extra/windows/wix/lapce.wxs | 2 +- lapce-core/Cargo.toml | 2 +- lapce-data/Cargo.toml | 2 +- lapce-proxy/Cargo.toml | 2 +- lapce-rpc/Cargo.toml | 2 +- lapce-ui/Cargo.toml | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cf0d8758c2..4f49c99677 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2183,7 +2183,7 @@ dependencies = [ [[package]] name = "lapce" -version = "0.1.2" +version = "0.1.3" dependencies = [ "lapce-proxy", "lapce-ui", @@ -2191,7 +2191,7 @@ dependencies = [ [[package]] name = "lapce-core" -version = "0.1.2" +version = "0.1.3" dependencies = [ "bitflags", "itertools", @@ -2240,7 +2240,7 @@ dependencies = [ [[package]] name = "lapce-data" -version = "0.1.2" +version = "0.1.3" dependencies = [ "Inflector", "alacritty_terminal", @@ -2296,7 +2296,7 @@ dependencies = [ [[package]] name = "lapce-proxy" -version = "0.1.2" +version = "0.1.3" dependencies = [ "alacritty_terminal", "anyhow", @@ -2333,7 +2333,7 @@ dependencies = [ [[package]] name = "lapce-rpc" -version = "0.1.2" +version = "0.1.3" dependencies = [ "anyhow", "crossbeam-channel", @@ -2348,7 +2348,7 @@ dependencies = [ [[package]] name = "lapce-ui" -version = "0.1.2" +version = "0.1.3" dependencies = [ "Inflector", "alacritty_terminal", diff --git a/Cargo.toml b/Cargo.toml index 13fb95eb51..e3ed09c982 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" rust-version = "1.62" diff --git a/extra/linux/dev.lapce.lapce.metainfo.xml b/extra/linux/dev.lapce.lapce.metainfo.xml index 429c2ae698..2d16549403 100644 --- a/extra/linux/dev.lapce.lapce.metainfo.xml +++ b/extra/linux/dev.lapce.lapce.metainfo.xml @@ -30,6 +30,6 @@ - + diff --git a/extra/windows/wix/lapce.wxs b/extra/windows/wix/lapce.wxs index 0f83e41a47..e0e6b6e69c 100644 --- a/extra/windows/wix/lapce.wxs +++ b/extra/windows/wix/lapce.wxs @@ -1,6 +1,6 @@ - + diff --git a/lapce-core/Cargo.toml b/lapce-core/Cargo.toml index 1eca9591bb..ffe9508e1a 100644 --- a/lapce-core/Cargo.toml +++ b/lapce-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce-core" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" diff --git a/lapce-data/Cargo.toml b/lapce-data/Cargo.toml index 6424259137..bded7719b5 100644 --- a/lapce-data/Cargo.toml +++ b/lapce-data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce-data" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" diff --git a/lapce-proxy/Cargo.toml b/lapce-proxy/Cargo.toml index 2d1acef449..cd51a8df4f 100644 --- a/lapce-proxy/Cargo.toml +++ b/lapce-proxy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce-proxy" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" diff --git a/lapce-rpc/Cargo.toml b/lapce-rpc/Cargo.toml index 43b8d474c8..8833de1d98 100644 --- a/lapce-rpc/Cargo.toml +++ b/lapce-rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce-rpc" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" diff --git a/lapce-ui/Cargo.toml b/lapce-ui/Cargo.toml index c459d8749a..b64d80ee13 100644 --- a/lapce-ui/Cargo.toml +++ b/lapce-ui/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lapce-ui" -version = "0.1.2" +version = "0.1.3" authors = ["Dongdong Zhou "] edition = "2021" From 8d90d258f08d62b9c1bd205b9bc8c38e526401a8 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Thu, 14 Jul 2022 23:52:08 -0500 Subject: [PATCH 090/816] feat: error lens --- defaults/dark-theme.toml | 7 + defaults/light-theme.toml | 7 + defaults/settings.toml | 11 ++ lapce-data/src/config.rs | 49 ++++++- lapce-data/src/document.rs | 254 +++++++++++++++++++++++++++++------- lapce-ui/src/editor.rs | 136 ++++++------------- lapce-ui/src/editor/view.rs | 8 +- lapce-ui/src/tab.rs | 15 ++- 8 files changed, 335 insertions(+), 152 deletions(-) diff --git a/defaults/dark-theme.toml b/defaults/dark-theme.toml index 5c1e6545ef..d9487e0b9c 100644 --- a/defaults/dark-theme.toml +++ b/defaults/dark-theme.toml @@ -74,6 +74,13 @@ magenta = "#C678DD" "inlay_hint.foreground" = "#FFFFFF" "inlay_hint.background" = "#528bFF88" +"error_lens.error.foreground" = "$red" +"error_lens.error.background" = "#E06C7520" +"error_lens.warning.foreground" = "$yellow" +"error_lens.warning.background" = "#E5C07B20" +"error_lens.other.foreground" = "#5C6370" +"error_lens.other.background" = "#5C637020" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/defaults/light-theme.toml b/defaults/light-theme.toml index 2906951b7f..feb7e47b6e 100644 --- a/defaults/light-theme.toml +++ b/defaults/light-theme.toml @@ -99,6 +99,13 @@ magenta = "#A626A4" "inlay_hint.foreground" = "#000000" "inlay_hint.background" = "#528bFF55" +"error_lens.error.foreground" = "$red" +"error_lens.error.background" = "#E4564920" +"error_lens.warning.foreground" = "$yellow" +"error_lens.warning.background" = "#C1840120" +"error_lens.other.foreground" = "#A0A1A7" +"error_lens.other.background" = "#A0A1A720" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/defaults/settings.toml b/defaults/settings.toml index dbb746405f..96b883912a 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -17,6 +17,10 @@ format-on-save = true enable-inlay-hints = true inlay-hint-font-family = "" inlay-hint-font-size = 0 +enable-error-lens = true +error-lens-end-of-line = true +error-lens-font-family = "" +error-lens-font-size = 0 [terminal] font-family = "" @@ -112,6 +116,13 @@ magenta = "#C678DD" "inlay_hint.foreground" = "#FFFFFF" "inlay_hint.background" = "#528bFF88" +"error_lens.error.foreground" = "$red" +"error_lens.error.background" = "#E06C7520" +"error_lens.warning.foreground" = "$yellow" +"error_lens.warning.background" = "#E5C07B20" +"error_lens.other.foreground" = "#5C6370" +"error_lens.other.background" = "#5C637020" + "source_control.added" = "#50A14F32" "source_control.removed" = "#FF526632" "source_control.modified" = "#0184BC32" diff --git a/lapce-data/src/config.rs b/lapce-data/src/config.rs index 8a79dcf1f9..5e2fef0307 100644 --- a/lapce-data/src/config.rs +++ b/lapce-data/src/config.rs @@ -51,6 +51,19 @@ impl LapceTheme { pub const INLAY_HINT_FOREGROUND: &'static str = "inlay_hint.foreground"; pub const INLAY_HINT_BACKGROUND: &'static str = "inlay_hint.background"; + pub const ERROR_LENS_ERROR_FOREGROUND: &'static str = + "error_lens.error.foreground"; + pub const ERROR_LENS_ERROR_BACKGROUND: &'static str = + "error_lens.error.background"; + pub const ERROR_LENS_WARNING_FOREGROUND: &'static str = + "error_lens.warning.foreground"; + pub const ERROR_LENS_WARNING_BACKGROUND: &'static str = + "error_lens.warning.background"; + pub const ERROR_LENS_OTHER_FOREGROUND: &'static str = + "error_lens.other.foreground"; + pub const ERROR_LENS_OTHER_BACKGROUND: &'static str = + "error_lens.other.background"; + pub const SOURCE_CONTROL_ADDED: &'static str = "source_control.added"; pub const SOURCE_CONTROL_REMOVED: &'static str = "source_control.removed"; pub const SOURCE_CONTROL_MODIFIED: &'static str = "source_control.modified"; @@ -172,6 +185,20 @@ pub struct EditorConfig { desc = "Set the inlay hint font size. If less than 5 or greater than editor font size, it uses the editor font size." )] pub inlay_hint_font_size: usize, + #[field_names(desc = "If diagnostics should be displayed inline")] + pub enable_error_lens: bool, + #[field_names( + desc = "Whether error lens should go to the end of view line, or only to the end of the diagnostic" + )] + pub error_lens_end_of_line: bool, + #[field_names( + desc = "Set error lens font family. If empty, it uses the inlay hint font family." + )] + pub error_lens_font_family: String, + #[field_names( + desc = "Set the error lens font size. If 0 it uses the inlay hint font size." + )] + pub error_lens_font_size: usize, } impl EditorConfig { @@ -187,13 +214,29 @@ impl EditorConfig { } } - pub fn inlay_hint_font_size(&self) -> f64 { + pub fn inlay_hint_font_size(&self) -> usize { if self.inlay_hint_font_size < 5 || self.inlay_hint_font_size > self.font_size { - self.font_size as f64 + self.font_size + } else { + self.inlay_hint_font_size + } + } + + pub fn error_lens_font_family(&self) -> FontFamily { + if self.error_lens_font_family.is_empty() { + self.inlay_hint_font_family() + } else { + FontFamily::new_unchecked(self.error_lens_font_family.clone()) + } + } + + pub fn error_lens_font_size(&self) -> usize { + if self.error_lens_font_size == 0 { + self.inlay_hint_font_size() } else { - self.inlay_hint_font_size as f64 + self.error_lens_font_size } } } diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 992655dd42..69cad88462 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -35,7 +35,8 @@ use lapce_rpc::{ style::{LineStyle, LineStyles, SemanticStyles, Style}, }; use lsp_types::{ - CodeActionOrCommand, CodeActionResponse, InlayHint, InlayHintLabel, + CodeActionOrCommand, CodeActionResponse, DiagnosticSeverity, InlayHint, + InlayHintLabel, }; use serde::{Deserialize, Serialize}; use smallvec::SmallVec; @@ -47,6 +48,7 @@ use xi_rope::{ use crate::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::{Config, LapceTheme}, + data::EditorDiagnostic, editor::EditorLocation, find::{Find, FindProgress}, history::DocumentHistory, @@ -72,7 +74,9 @@ pub struct LineExtraStyle { } pub struct TextLayoutLine { - pub extra_style: Vec<(f64, f64, LineExtraStyle)>, + /// Extra styling that should be applied to the text + /// (x0, x1 or line display end, style) + pub extra_style: Vec<(f64, Option, LineExtraStyle)>, pub text: PietTextLayout, } @@ -194,11 +198,17 @@ impl BufferContent { } #[derive(Default)] -pub struct InlayHintsLine<'a> { - hints: SmallVec<[(usize, &'a InlayHint); 6]>, +pub struct PhantomTextLine<'hint, 'diag> { + // TODO: This could be made more general + /// These are entries that have an order within the text + ordered_text: SmallVec<[(usize, &'hint InlayHint); 6]>, + // TODO: This could be made more general (ex: for things like showing the commit information + // for that line) + /// These are entries that are always at the end of the text + end_text: SmallVec<[&'diag EditorDiagnostic; 3]>, } -impl<'a> InlayHintsLine<'a> { +impl<'hint, 'diag> PhantomTextLine<'hint, 'diag> { /// Translate a column position into the text into what it would be after combining pub fn col_at(&self, pre_col: usize) -> usize { let mut last = pre_col; @@ -244,7 +254,7 @@ impl<'a> InlayHintsLine<'a> { /// Insert the hints at their positions in the text pub fn combine_with_text<'b>(&self, mut text: Cow<'b, str>) -> Cow<'b, str> { let mut col_shift = 0; - for (col, hint) in self.hints.iter() { + for (col, hint) in self.ordered_text.iter() { let mut otext = text.into_owned(); let location = col + col_shift; @@ -282,15 +292,36 @@ impl<'a> InlayHintsLine<'a> { text = Cow::Owned(otext); } + // If there are end text entries then trim any whitespace at the end + if !self.end_text.is_empty() { + text = Cow::Owned(text.into_owned().trim_end().to_string()); + } + + for entry in self.end_text.iter() { + let mut otext = text.into_owned(); + + // TODO: allow customization of padding. Remember to update end_offset_size_iter + otext.push_str(" "); + + for part in itertools::intersperse(entry.diagnostic.message.lines(), " ") + { + otext.push_str(part); + } + + text = Cow::Owned(otext); + } + text } - /// Iterator over (col_shift, size, hint) + /// Iterator over (col_shift, size, hint, pre_column) + /// Note that this only iterates over the ordered text, since those depend on the text for where + /// they'll be positioned pub fn offset_size_iter( &self, - ) -> impl Iterator + '_ { + ) -> impl Iterator + '_ { let mut col_shift = 0; - self.hints.iter().map(move |(col, hint)| { + self.ordered_text.iter().map(move |(col, hint)| { let pre_col_shift = col_shift; match &hint.label { InlayHintLabel::String(label) => { @@ -314,6 +345,32 @@ impl<'a> InlayHintsLine<'a> { (pre_col_shift, col_shift - pre_col_shift, *hint, *col) }) } + + /// Iterator over (column, size, diagnostic) + pub fn end_offset_size_iter( + &self, + pre_text: &str, + ) -> impl Iterator + '_ { + // Trim because the text would be trimmed for any end text that existed + let column = pre_text.trim_end().len(); + // Move the column to be after the shifts by any of the ordered texts + let mut column = self.col_at(column); + self.end_text.iter().map(move |entry| { + let padding_size = 4; + let text_size: usize = itertools::intersperse( + entry.diagnostic.message.lines().map(str::len), + 1, + ) + .sum(); + let size = padding_size + text_size; + + let column_pre = column; + + column += size; + + (column_pre, size, *entry) + }) + } } #[derive(Clone)] @@ -333,6 +390,7 @@ pub struct Document { pub scroll_offset: Vec2, pub code_actions: im::HashMap, pub inlay_hints: Option>, + pub diagnostics: Option>>, pub find: Rc>, find_progress: Rc>, pub event_sink: ExtEventSink, @@ -373,6 +431,7 @@ impl Document { scroll_offset: Vec2::ZERO, code_actions: im::HashMap::new(), inlay_hints: None, + diagnostics: None, find: Rc::new(RefCell::new(Find::new(0))), find_progress: Rc::new(RefCell::new(FindProgress::Ready)), event_sink, @@ -877,24 +936,51 @@ impl Document { } } - pub fn line_inlay_hints(&self, line: usize) -> Option { + pub fn line_phantom_text( + &self, + config: &Config, + line: usize, + ) -> PhantomTextLine { let start_offset = self.buffer.offset_of_line(line); let end_offset = self.buffer.offset_of_line(line + 1); - self.inlay_hints.as_ref().map(|hints| InlayHintsLine { - hints: hints - .iter_chunks(start_offset..end_offset) - .filter_map(|(interval, inlay_hint)| { - if interval.start >= start_offset && interval.start < end_offset - { - let (_, col) = - self.buffer.offset_to_line_col(interval.start); - Some((col, inlay_hint)) - } else { - None - } + let hints = if config.editor.enable_inlay_hints { + self.inlay_hints.as_ref().map(|hints| { + hints.iter_chunks(start_offset..end_offset).filter_map( + |(interval, inlay_hint)| { + if interval.start >= start_offset + && interval.start < end_offset + { + let (_, col) = + self.buffer.offset_to_line_col(interval.start); + Some((col, inlay_hint)) + } else { + None + } + }, + ) + }) + } else { + None + }; + + let diagnostics = if config.editor.enable_error_lens { + // Is end line a good place to use? + self.diagnostics.as_ref().map(|diags| { + diags.iter().filter(|diag| { + diag.diagnostic.range.end.line as usize == line + && diag.diagnostic.severity < Some(DiagnosticSeverity::HINT) }) - .collect(), - }) + }) + } else { + None + }; + + let ordered_text = hints.into_iter().flatten().collect(); + let end_text = diagnostics.into_iter().flatten().collect(); + PhantomTextLine { + ordered_text, + end_text, + } } fn apply_deltas(&mut self, deltas: &[(RopeDelta, InvalLines)]) { @@ -1252,16 +1338,11 @@ impl Document { let line = ((point.y / config.editor.line_height as f64).floor() as usize) .min(last_line); - let inlay_hints = config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| self.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = self.line_phantom_text(config, line); let text_layout = self.get_text_layout(text, line, font_size, config); let hit_point = text_layout.text.hit_test_point(Point::new(point.x, 0.0)); - let col = inlay_hints.before_col(hit_point.idx); + let col = phantom_text.before_col(hit_point.idx); let max_col = self.buffer.line_end_col(line, mode != Mode::Normal); ( self.buffer.offset_of_line_col(line, col.min(max_col)), @@ -1314,15 +1395,11 @@ impl Document { font_size: usize, config: &Config, ) -> TextLayoutLine { - let line_content = self.buffer.line_content(line); + let line_content_original = self.buffer.line_content(line); - let inlay_hints = config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| self.line_inlay_hints(line)) - .unwrap_or_default(); - let line_content = inlay_hints.combine_with_text(line_content); + let phantom_text = self.line_phantom_text(config, line); + let line_content = + phantom_text.combine_with_text(line_content_original.clone()); let tab_width = config.tab_width(text, config.editor.font_family(), font_size); @@ -1352,8 +1429,8 @@ impl Document { for line_style in styles.iter() { if let Some(fg_color) = line_style.style.fg_color.as_ref() { if let Some(fg_color) = config.get_style_color(fg_color) { - let start = inlay_hints.col_at(line_style.start); - let end = inlay_hints.col_at(line_style.end); + let start = phantom_text.col_at(line_style.start); + let end = phantom_text.col_at(line_style.end); layout_builder = layout_builder.range_attribute( start..end, TextAttribute::TextColor(fg_color.clone()), @@ -1363,12 +1440,13 @@ impl Document { } // Give the inlay hints their styling - for (offset, size, _, col) in inlay_hints.offset_size_iter() { + for (offset, size, _, col) in phantom_text.offset_size_iter() { let start = col + offset; let end = start + size; + layout_builder = layout_builder.range_attribute( start..end, - TextAttribute::FontSize(config.editor.inlay_hint_font_size()), + TextAttribute::FontSize(config.editor.inlay_hint_font_size() as f64), ); layout_builder = layout_builder.range_attribute( start..end, @@ -1384,16 +1462,54 @@ impl Document { ); } + // Add styling to all the diagnostics that appear at the end of the line + for (column, size, entry) in + phantom_text.end_offset_size_iter(&line_content_original) + { + let end = column + size; + + let text_color = { + let severity = entry + .diagnostic + .severity + .unwrap_or(DiagnosticSeverity::WARNING); + let theme_prop = if severity == DiagnosticSeverity::ERROR { + LapceTheme::ERROR_LENS_ERROR_FOREGROUND + } else if severity == DiagnosticSeverity::WARNING { + LapceTheme::ERROR_LENS_WARNING_FOREGROUND + } else { + // information + hint (if we keep that) + things without a severity + LapceTheme::ERROR_LENS_OTHER_FOREGROUND + }; + + config.get_color_unchecked(theme_prop).clone() + }; + + layout_builder = layout_builder.range_attribute( + column..end, + TextAttribute::FontSize(config.editor.error_lens_font_size() as f64), + ); + layout_builder = layout_builder.range_attribute( + column..end, + TextAttribute::FontFamily(config.editor.error_lens_font_family()), + ); + layout_builder = layout_builder + .range_attribute(column..end, TextAttribute::TextColor(text_color)); + } + + // TODO: error lens background colors + // We could provide an option for whether they should just be around the diagnostic or over the entire line? + let text = layout_builder.build().unwrap(); let mut extra_style = Vec::new(); - for (offset, size, _, col) in inlay_hints.offset_size_iter() { + for (offset, size, _, col) in phantom_text.offset_size_iter() { let start = col + offset; let end = start + size; let x0 = text.hit_test_text_position(start).point.x; let x1 = text.hit_test_text_position(end).point.x; extra_style.push(( x0, - x1, + Some(x1), LineExtraStyle { bg_color: Some( config @@ -1405,6 +1521,54 @@ impl Document { )); } + let is_error_lens_to_eol = config.editor.error_lens_end_of_line; + + let mut max_severity = None; + let mut end_column = None; + for (column, size, entry) in + phantom_text.end_offset_size_iter(&line_content_original) + { + match (entry.diagnostic.severity, max_severity) { + (Some(severity), Some(max)) => { + if severity < max { + max_severity = Some(severity); + } + } + (Some(severity), None) => { + max_severity = Some(severity); + } + _ => {} + } + + if !is_error_lens_to_eol { + end_column = Some(column + size); + } + } + + if !phantom_text.end_text.is_empty() { + let max_severity = max_severity.unwrap_or(DiagnosticSeverity::WARNING); + let theme_prop = if max_severity == DiagnosticSeverity::ERROR { + LapceTheme::ERROR_LENS_ERROR_BACKGROUND + } else if max_severity == DiagnosticSeverity::WARNING { + LapceTheme::ERROR_LENS_WARNING_BACKGROUND + } else { + LapceTheme::ERROR_LENS_OTHER_BACKGROUND + }; + + // Use the end of the diagnostics if end column exists (which it only will if the config setting is false) + // otherwise None, which is the end of the line in the view + let x1 = end_column.map(|col| text.hit_test_text_position(col).point.x); + + extra_style.push(( + 0.0, + x1, + LineExtraStyle { + bg_color: Some(config.get_color_unchecked(theme_prop).clone()), + under_line: None, + }, + )); + } + TextLayoutLine { text, extra_style } } diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 357dc98660..93f27b1d65 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -826,7 +826,8 @@ impl LapceEditor { let height = text_layout.text.size().height; for (x0, x1, style) in text_layout.extra_style.iter() { if let Some(bg) = &style.bg_color { - ctx.fill(Rect::new(*x0, y, *x1, y + height), bg); + let x1 = x1.unwrap_or(self_size.width); + ctx.fill(Rect::new(*x0, y, x1, y + height), bg); } } ctx.draw_text(&text_layout.text, Point::new(0.0, y)); @@ -938,13 +939,8 @@ impl LapceEditor { let start_offset = data.doc.buffer().offset_of_line(actual_line); let end_offset = data.doc.buffer().offset_of_line(actual_line + 1); let regions = selection.regions_in_range(start_offset, end_offset); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(actual_line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, actual_line); for region in regions { if region.is_caret() { let caret_actual_line = @@ -972,7 +968,7 @@ impl LapceEditor { _ if actual_line == start_line => start_col, _ => 0, }; - let left_col = inlay_hints.col_at(left_col); + let left_col = phantom_text.col_at(left_col); let right_col = match actual_line { _ if actual_line == end_line => { let max_col = data @@ -983,7 +979,7 @@ impl LapceEditor { } _ => data.doc.buffer().line_end_col(actual_line, true), }; - let right_col = inlay_hints.col_at(right_col); + let right_col = phantom_text.col_at(right_col); let x0 = left_col as f64 * char_width + x_shift; let x1 = right_col as f64 * char_width + x_shift; @@ -1001,7 +997,7 @@ impl LapceEditor { let (caret_actual_line, col) = data.doc.buffer().offset_to_line_col(region.end()); if caret_actual_line == actual_line { - let col = inlay_hints.col_at(col); + let col = phantom_text.col_at(col); let x = col as f64 * char_width + x_shift; ctx.stroke( @@ -1099,13 +1095,7 @@ impl LapceEditor { Self::paint_cursor_line(data, ctx, line, is_focused, placeholder); if is_focused { - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let inlay_hints = data.doc.line_phantom_text(&data.config, line); // Shift it by the inlay hints let col = inlay_hints.col_after(col, true); @@ -1205,16 +1195,10 @@ impl LapceEditor { } }; - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); - - let left_col = inlay_hints.col_after(left_col, false); - let right_col = inlay_hints.col_after(right_col, false); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); + let left_col = phantom_text.col_after(left_col, false); + let right_col = phantom_text.col_after(right_col, false); let x0 = data .doc @@ -1250,15 +1234,10 @@ impl LapceEditor { if is_focused { let (line, col) = data.doc.buffer().offset_to_line_col(*end); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); - let col = inlay_hints.col_after(col, true); + let col = phantom_text.col_after(col, true); let x0 = data .doc @@ -1282,7 +1261,7 @@ impl LapceEditor { ); let (_, right_col) = data.doc.buffer().offset_to_line_col(right_offset); - let right_col = inlay_hints.col_after(right_col, false); + let right_col = phantom_text.col_after(right_col, false); let x1 = data .doc .point_of_line_col( @@ -1355,17 +1334,12 @@ impl LapceEditor { _ => data.doc.buffer().line_end_col(line, true), }; - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); // Shift it by the inlay hints - let left_col = inlay_hints.col_after(left_col, false); - let right_col = inlay_hints.col_after(right_col, false); + let left_col = phantom_text.col_after(left_col, false); + let right_col = phantom_text.col_after(right_col, false); if !line_content.is_empty() { let x0 = data @@ -1406,16 +1380,11 @@ impl LapceEditor { let (line, col) = data.doc.buffer().offset_to_line_col(region.end()); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); // Shift it by the inlay hints - let col = inlay_hints.col_after(col, false); + let col = phantom_text.col_after(col, false); let x = data .doc @@ -1509,23 +1478,18 @@ impl LapceEditor { data.doc.buffer().offset_to_line_col(start); let (end_line, end_col) = data.doc.buffer().offset_to_line_col(end); for line in start_line..end_line + 1 { - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); let left_col = if line == start_line { start_col } else { 0 }; - let left_col = inlay_hints.col_at(left_col); + let left_col = phantom_text.col_at(left_col); let right_col = if line == end_line { end_col } else { data.doc.buffer().line_end_col(line, true) + 1 }; - let right_col = inlay_hints.col_at(right_col); + let right_col = phantom_text.col_at(right_col); let text_layout = data.doc.get_text_layout( ctx.text(), @@ -1588,19 +1552,14 @@ impl LapceEditor { let line_content = data.doc.buffer().line_content(line); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); let left_col = match line { _ if line == start_line => start_col, _ => 0, }; - let left_col = inlay_hints.col_at(left_col); + let left_col = phantom_text.col_at(left_col); let x0 = data .doc .point_of_line_col( @@ -1619,7 +1578,7 @@ impl LapceEditor { } _ => data.doc.buffer().line_end_col(line, true), }; - let right_col = inlay_hints.col_at(right_col); + let right_col = phantom_text.col_at(right_col); if !line_content.is_empty() { let x1 = data @@ -1680,13 +1639,8 @@ impl LapceEditor { break; } - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let phantom_text = + data.doc.line_phantom_text(&data.config, line); let text_layout = data.doc.get_text_layout( ctx.text(), @@ -1695,7 +1649,7 @@ impl LapceEditor { &data.config, ); let x0 = if line == start.line as usize { - let col = inlay_hints.col_at(start.character as usize); + let col = phantom_text.col_at(start.character as usize); text_layout.text.hit_test_text_position(col).point.x } else { let (_, col) = data.doc.buffer().offset_to_line_col( @@ -1703,16 +1657,16 @@ impl LapceEditor { .buffer() .first_non_blank_character_on_line(line), ); - let col = inlay_hints.col_at(col); + let col = phantom_text.col_at(col); text_layout.text.hit_test_text_position(col).point.x }; let x1 = if line == end.line as usize { - let col = inlay_hints.col_at(end.character as usize); + let col = phantom_text.col_at(end.character as usize); text_layout.text.hit_test_text_position(col).point.x } else { let col = data.doc.buffer().line_end_col(line, false) + 1; - let col = inlay_hints.col_at(col); + let col = phantom_text.col_at(col); text_layout.text.hit_test_text_position(col).point.x }; let _y1 = (line + 1) as f64 * line_height; @@ -1994,17 +1948,11 @@ impl Widget for LapceEditor { .buffer() .offset_to_line_col(offset); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| { - editor_data.doc.line_inlay_hints(line) - }) - .unwrap_or_default(); - - let col = inlay_hints.col_at(col); + let phantom_text = editor_data + .doc + .line_phantom_text(&data.config, line); + + let col = phantom_text.col_at(col); let x = editor_data .doc diff --git a/lapce-ui/src/editor/view.rs b/lapce-ui/src/editor/view.rs index 5371df20ff..e9b6a69601 100644 --- a/lapce-ui/src/editor/view.rs +++ b/lapce-ui/src/editor/view.rs @@ -437,13 +437,7 @@ impl LapceEditorView { fn cursor_region(data: &LapceEditorBufferData, text: &mut PietText) -> Rect { let offset = data.editor.cursor.offset(); let (line, col) = data.doc.buffer().offset_to_line_col(offset); - let inlay_hints = data - .config - .editor - .enable_inlay_hints - .then_some(()) - .and_then(|_| data.doc.line_inlay_hints(line)) - .unwrap_or_default(); + let inlay_hints = data.doc.line_phantom_text(&data.config, line); let col = inlay_hints.col_at(col); let width = data.config.editor_char_width(text); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 38a786fe09..1b46eb131a 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -988,9 +988,18 @@ impl LapceTab { + 1, }) .collect(); - data.main_split - .diagnostics - .insert(path, Arc::new(diagnostics)); + let diagnostics: Arc> = + Arc::new(diagnostics); + + // inform the document about the diagnostics + if let Some(document) = + data.main_split.open_docs.get_mut(&path) + { + let document = Arc::make_mut(document); + document.diagnostics = Some(diagnostics.clone()); + } + + data.main_split.diagnostics.insert(path, diagnostics); let mut errors = 0; let mut warnings = 0; From a91dbf098587d634dba7d142d5b397aa058267cc Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 16 Jul 2022 11:38:16 +0100 Subject: [PATCH 091/816] remove paramater color from default settings --- defaults/settings.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/defaults/settings.toml b/defaults/settings.toml index 96b883912a..9c2479d4f5 100644 --- a/defaults/settings.toml +++ b/defaults/settings.toml @@ -83,7 +83,6 @@ magenta = "#C678DD" "builtinType" = "$cyan" "escape" = "$cyan" "embedded" = "$cyan" -"parameter" = "$green" "symbol" = "$yellow" "conditional" = "$blue" "exception" = "$red" From a549171c4047e8c4c50888ec59937b151840ec9c Mon Sep 17 00:00:00 2001 From: bbrabbitt Date: Fri, 15 Jul 2022 21:39:59 -0700 Subject: [PATCH 092/816] fix plugin panel scroll bar fix clippy and fmt warnings code cleanup --- lapce-ui/src/plugin.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lapce-ui/src/plugin.rs b/lapce-ui/src/plugin.rs index deb64ba20e..6dfeeec55b 100644 --- a/lapce-ui/src/plugin.rs +++ b/lapce-ui/src/plugin.rs @@ -1,3 +1,4 @@ +use crate::scroll::LapceScroll; use druid::{ piet::{Text, TextAttribute, TextLayout as PietTextLayout, TextLayoutBuilder}, BoxConstraints, Color, Cursor, Env, Event, EventCtx, FontWeight, LayoutCtx, @@ -32,7 +33,12 @@ impl Plugin { PanelKind::Plugin, data.plugin.widget_id, split_id, - vec![(split_id, PanelHeaderKind::None, Self::new().boxed(), None)], + vec![( + split_id, + PanelHeaderKind::None, + LapceScroll::new(Self::new()).boxed(), + None, + )], ) } @@ -141,7 +147,13 @@ impl Widget for Plugin { _data: &LapceTabData, _env: &Env, ) -> Size { - bc.max() + if _data.plugins.is_empty() { + return bc.max(); + } + let height = 3.0 * self.line_height * _data.plugins.len() as f64; + let height = height.max(bc.max().height); + + Size::new(bc.max().width, height) } fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, _env: &Env) { From 47adca699142ec748129edebccf69d78c9518284 Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sat, 16 Jul 2022 22:14:49 +0100 Subject: [PATCH 093/816] update document diagnostic position --- lapce-data/src/data.rs | 50 ++-------------------------------- lapce-data/src/document.rs | 49 ++++++++++++++++++++++++++++++++- lapce-data/src/editor.rs | 56 +------------------------------------- lapce-ui/src/problem.rs | 18 ++++++++++++ lapce-ui/src/tab.rs | 11 ++++++-- 5 files changed, 78 insertions(+), 106 deletions(-) diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 32f87f223d..62bf09a490 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -37,7 +37,7 @@ use lsp_types::{Diagnostic, Position, ProgressToken, TextEdit}; use notify::Watcher; use serde::{Deserialize, Serialize}; use serde_json::Value; -use xi_rope::{Rope, RopeDelta, Transformer}; +use xi_rope::{Rope, RopeDelta}; use crate::{ alert::{AlertContentData, AlertData}, @@ -419,7 +419,7 @@ impl LapceWindowData { } } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct EditorDiagnostic { pub range: Option<(usize, usize)>, pub diagnostic: Diagnostic, @@ -1879,50 +1879,6 @@ impl LapceMainSplitData { ); } - fn initiate_diagnostics_offset(&mut self, path: &Path) { - if let Some(diagnostics) = self.diagnostics.get_mut(path) { - if let Some(doc) = self.open_docs.get(path) { - for diagnostic in Arc::make_mut(diagnostics).iter_mut() { - if diagnostic.range.is_none() { - diagnostic.range = Some(( - doc.buffer().offset_of_position( - &diagnostic.diagnostic.range.start, - ), - doc.buffer().offset_of_position( - &diagnostic.diagnostic.range.end, - ), - )); - } - } - } - } - } - - fn update_diagnostics_offset(&mut self, path: &Path, delta: &RopeDelta) { - if let Some(diagnostics) = self.diagnostics.get_mut(path) { - if let Some(doc) = self.open_docs.get(path) { - let mut transformer = Transformer::new(delta); - for diagnostic in Arc::make_mut(diagnostics).iter_mut() { - let (start, end) = diagnostic.range.unwrap(); - let (new_start, new_end) = ( - transformer.transform(start, false), - transformer.transform(end, true), - ); - diagnostic.range = Some((new_start, new_end)); - if start != new_start { - diagnostic.diagnostic.range.start = - doc.buffer().offset_to_position(new_start); - } - if end != new_end { - diagnostic.diagnostic.range.end = - doc.buffer().offset_to_position(new_end); - doc.buffer().offset_to_position(new_end); - } - } - } - } - } - fn cursor_apply_delta(&mut self, path: &Path, delta: &RopeDelta) { for (_view_id, editor) in self.editors.iter_mut() { if let BufferContent::File(current_path) = &editor.content { @@ -1939,7 +1895,6 @@ impl LapceMainSplitData { edits: &[(impl AsRef, &str)], edit_type: EditType, ) -> Option { - self.initiate_diagnostics_offset(path); let doc = self.open_docs.get_mut(path)?; let buffer_len = doc.buffer().len(); @@ -1958,7 +1913,6 @@ impl LapceMainSplitData { if move_cursor { self.cursor_apply_delta(path, &delta); } - self.update_diagnostics_offset(path, &delta); Some(delta) } diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 69cad88462..3d9f8241e0 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -42,7 +42,7 @@ use serde::{Deserialize, Serialize}; use smallvec::SmallVec; use xi_rope::{ spans::{Spans, SpansBuilder}, - Interval, Rope, RopeDelta, + Interval, Rope, RopeDelta, Transformer, }; use crate::{ @@ -477,6 +477,52 @@ impl Document { self.syntax = Some(Syntax::from_language(language)); } + pub fn set_diagnostics(&mut self, diagnostics: &[EditorDiagnostic]) { + self.diagnostics = Some(Arc::new( + diagnostics + .iter() + .map(|d| EditorDiagnostic { + range: Some(( + self.buffer.offset_of_position(&d.diagnostic.range.start), + self.buffer.offset_of_position(&d.diagnostic.range.end), + )), + lines: d + .diagnostic + .related_information + .as_ref() + .map(|r| { + r.iter() + .map(|r| r.message.matches('\n').count() + 1 + 1) + .sum() + }) + .unwrap_or(0) + + d.diagnostic.message.matches('\n').count() + + 1, + diagnostic: d.diagnostic.clone(), + }) + .collect(), + )); + } + + fn update_diagnostics(&mut self, delta: &RopeDelta) { + if let Some(mut diagnostics) = self.diagnostics.clone() { + for diagnostic in Arc::make_mut(&mut diagnostics).iter_mut() { + let mut transformer = Transformer::new(delta); + let (start, end) = diagnostic.range.unwrap(); + let (new_start, new_end) = ( + transformer.transform(start, false), + transformer.transform(end, true), + ); + diagnostic.range = Some((new_start, new_end)); + diagnostic.diagnostic.range.start = + self.buffer().offset_to_position(new_start); + diagnostic.diagnostic.range.end = + self.buffer().offset_to_position(new_end); + } + self.diagnostics = Some(diagnostics); + } + } + pub fn reload(&mut self, content: Rope, set_pristine: bool) { self.code_actions.clear(); self.inlay_hints = None; @@ -988,6 +1034,7 @@ impl Document { for (i, (delta, _)) in deltas.iter().enumerate() { self.update_styles(delta); self.update_inlay_hints(delta); + self.update_diagnostics(delta); if self.content.is_file() { self.proxy.update(self.id, delta, rev + i as u64 + 1); } diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index 0a397c40c4..af80406549 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -608,22 +608,6 @@ impl LapceEditorBufferData { ); } - fn initiate_diagnostics_offset(&mut self) { - let doc = self.doc.clone(); - if let Some(diagnostics) = self.diagnostics_mut() { - for diagnostic in diagnostics.iter_mut() { - if diagnostic.range.is_none() { - diagnostic.range = Some(( - doc.buffer() - .offset_of_position(&diagnostic.diagnostic.range.start), - doc.buffer() - .offset_of_position(&diagnostic.diagnostic.range.end), - )); - } - } - } - } - fn update_snippet_offset(&mut self, delta: &RopeDelta) { if let Some(snippet) = &self.editor.snippet { let mut transformer = Transformer::new(delta); @@ -644,29 +628,6 @@ impl LapceEditorBufferData { } } - fn update_diagnostics_offset(&mut self, delta: &RopeDelta) { - let doc = self.doc.clone(); - if let Some(diagnostics) = self.diagnostics_mut() { - for diagnostic in diagnostics.iter_mut() { - let mut transformer = Transformer::new(delta); - let (start, end) = diagnostic.range.unwrap(); - let (new_start, new_end) = ( - transformer.transform(start, false), - transformer.transform(end, true), - ); - diagnostic.range = Some((new_start, new_end)); - if start != new_start { - diagnostic.diagnostic.range.start = - doc.buffer().offset_to_position(new_start); - } - if end != new_end { - diagnostic.diagnostic.range.end = - doc.buffer().offset_to_position(new_end); - } - } - } - } - fn next_diff(&mut self, ctx: &mut EventCtx) { if let BufferContent::File(buffer_path) = self.doc.content() { if self.source_control.file_diffs.is_empty() { @@ -928,19 +889,7 @@ impl LapceEditorBufferData { } pub fn diagnostics(&self) -> Option<&Arc>> { - if let BufferContent::File(path) = self.doc.content() { - self.main_split.diagnostics.get(path) - } else { - None - } - } - - pub fn diagnostics_mut(&mut self) -> Option<&mut Vec> { - if let BufferContent::File(path) = self.doc.content() { - self.main_split.diagnostics.get_mut(path).map(Arc::make_mut) - } else { - None - } + self.doc.diagnostics.as_ref() } pub fn offset_of_mouse( @@ -1098,7 +1047,6 @@ impl LapceEditorBufferData { for (delta, _) in deltas { self.inactive_apply_delta(delta); self.update_snippet_offset(delta); - self.update_diagnostics_offset(delta); } } @@ -1946,7 +1894,6 @@ impl KeyPressFocus for LapceEditorBufferData { fn receive_char(&mut self, ctx: &mut EventCtx, c: &str) { if self.get_mode() == Mode::Insert { - self.initiate_diagnostics_offset(); let doc = Arc::make_mut(&mut self.doc); let cursor = &mut Arc::make_mut(&mut self.editor).cursor; let deltas = doc.do_insert(cursor, c); @@ -1970,7 +1917,6 @@ impl KeyPressFocus for LapceEditorBufferData { mods: Modifiers, _env: &Env, ) -> CommandExecuted { - self.initiate_diagnostics_offset(); let old_doc = self.doc.clone(); let executed = match &command.kind { CommandKind::Edit(cmd) => self.run_edit_command(ctx, cmd), diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index db2abf1f62..51a9689fea 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -71,6 +71,24 @@ impl ProblemContent { .diagnostics .iter() .filter_map(|(path, diagnostic)| { + if let Some(doc) = data.main_split.open_docs.get(path) { + return match doc.diagnostics.as_ref() { + Some(d) => { + let diagnostics: Vec<&EditorDiagnostic> = d + .iter() + .filter(|d| { + d.diagnostic.severity == Some(self.severity) + }) + .collect(); + if !diagnostics.is_empty() { + Some((path, diagnostics)) + } else { + None + } + } + None => None, + }; + } let diagnostics: Vec<&EditorDiagnostic> = diagnostic .iter() .filter(|d| d.diagnostic.severity == Some(self.severity)) diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 1b46eb131a..76e2a77d8c 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -730,7 +730,14 @@ impl LapceTab { locations, } => { let doc = data.main_split.open_docs.get_mut(path).unwrap(); - Arc::make_mut(doc).init_content(content.to_owned()); + let doc = Arc::make_mut(doc); + doc.init_content(content.to_owned()); + if let BufferContent::File(path) = doc.content() { + if let Some(d) = data.main_split.diagnostics.get(path) { + doc.set_diagnostics(d); + } + } + for (view_id, location) in locations { data.main_split.go_to_location( ctx, @@ -996,7 +1003,7 @@ impl LapceTab { data.main_split.open_docs.get_mut(&path) { let document = Arc::make_mut(document); - document.diagnostics = Some(diagnostics.clone()); + document.set_diagnostics(&diagnostics); } data.main_split.diagnostics.insert(path, diagnostics); From f12ab9840d6b5ff7c686cdebe22f7ea78de5e5b7 Mon Sep 17 00:00:00 2001 From: Jakub Panek Date: Sat, 16 Jul 2022 22:05:06 +0000 Subject: [PATCH 094/816] feat: add LSP stderr output to log add LSP stderr output to log and sort imports --- lapce-proxy/src/lsp.rs | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index dc89926842..550036ddd1 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -1,9 +1,10 @@ +#[cfg(target_os = "windows")] +use std::os::windows::process::CommandExt; use std::{ collections::HashMap, - io::BufRead, - io::{BufReader, BufWriter, Write}, + io::{BufRead, BufReader, BufWriter, Write}, path::Path, - process::{self, Child, ChildStdout, Command, Stdio}, + process::{self, Child, ChildStderr, ChildStdout, Command, Stdio}, sync::{ atomic::{AtomicBool, Ordering}, mpsc::channel, @@ -13,9 +14,6 @@ use std::{ time::Duration, }; -#[cfg(target_os = "windows")] -use std::os::windows::process::CommandExt; - use anyhow::{anyhow, Result}; use jsonrpc_lite::{Id, JsonRpc, Params}; use lapce_rpc::{ @@ -23,12 +21,12 @@ use lapce_rpc::{ style::{LineStyle, SemanticStyles, Style}, RequestId, }; +use log::error; use lsp_types::*; use parking_lot::Mutex; use serde_json::{json, to_value, Value}; -use crate::buffer::Buffer; -use crate::dispatch::Dispatcher; +use crate::{buffer::Buffer, dispatch::Dispatcher}; pub type Callback = Box; const HEADER_CONTENT_LENGTH: &str = "content-length"; @@ -504,7 +502,7 @@ impl Default for LspCatalog { impl LspClient { pub fn new( - _language_id: String, + language_id: String, exec_path: &str, options: Option, args: Vec, @@ -514,6 +512,7 @@ impl LspClient { let mut process = Self::process(exec_path, args.clone()); let writer = Box::new(BufWriter::new(process.stdin.take().unwrap())); let stdout = process.stdout.take().unwrap(); + let stderr = process.stderr.take().unwrap(); let lsp_client = Arc::new(LspClient { dispatcher, @@ -534,6 +533,7 @@ impl LspClient { }); lsp_client.handle_stdout(stdout); + lsp_client.handle_stderr(stderr, language_id); lsp_client.initialize(); lsp_client @@ -561,6 +561,24 @@ impl LspClient { }); } + fn handle_stderr(&self, stderr: ChildStderr, language_id: String) { + thread::spawn(move || { + let mut reader = Box::new(BufReader::new(stderr)); + loop { + let mut buffer = String::new(); + + loop { + buffer.clear(); + let _result = reader.read_line(&mut buffer); + if buffer.trim().is_empty() { + continue; + } + error!("[LSP::{}] {}", language_id, buffer.trim()) + } + } + }); + } + fn process(exec_path: &str, args: Vec) -> Child { let mut process = Command::new(exec_path); @@ -571,6 +589,7 @@ impl LspClient { process .stdin(Stdio::piped()) .stdout(Stdio::piped()) + .stderr(Stdio::piped()) .spawn() .expect("Error Occurred") } From 0ddcaa49d2767526aef86ccef7ad4d6d7be9b4d2 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Fri, 15 Jul 2022 19:37:51 -0400 Subject: [PATCH 095/816] add fedora spec for packaging --- lapce.spec | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lapce.spec diff --git a/lapce.spec b/lapce.spec new file mode 100644 index 0000000000..2642e6df83 --- /dev/null +++ b/lapce.spec @@ -0,0 +1,38 @@ +Name: lapce +Version: 0.1.3.{{{ git_dir_version }}} +Release: 1 +Summary: Lightning-fast and Powerful Code Editor written in Rust +License: Apache-2.0 +URL: https://github.com/lapce/lapce +VCS: {{{ git_dir_vcs }}} +Source: {{{ git_dir_pack }}} +BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare + +%description +Lapce is written in pure Rust with a UI in Druid (which is also written in Rust). +It is designed with Rope Science from the Xi-Editor which makes for lightning-fast computation, and leverages OpenGL for rendering. + +%prep +%autosetup + +%build +cargo build --profile release-lto + +%install +install -Dm755 target/release-lto/%{name} %{buildroot}%{_bindir}/%{name} +install -Dm755 target/release-lto/%{name}-proxy %{buildroot}%{_bindir}/%{name}-proxy +install -Dm755 extra/linux/dev.lapce.lapce.desktop %{buildroot}/usr/share/applications/dev.lapce.lapce.desktop +install -Dm766 extra/linux/dev.lapce.lapce.metainfo.xml %{buildroot}/usr/share/metainfo/dev.lapce.lapce.metainfo.xml +install -Dm766 extra/images/logo.png %{buildroot}/usr/share/pixmaps/dev.lapce.lapce.png + +%files +%license LICENSE* +%doc *.md +%{_bindir}/%{name} +%{_bindir}/%{name}-proxy +/usr/share/applications/dev.lapce.lapce.desktop +/usr/share/metainfo/dev.lapce.lapce.metainfo.xml +/usr/share/pixmaps/dev.lapce.lapce.png + +%changelog +{{{ git_dir_changelog }}} From 200951b11b670d89a31fd3fab3e25e5485235f37 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Fri, 15 Jul 2022 19:52:28 -0400 Subject: [PATCH 096/816] fix some stuff --- lapce.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lapce.spec b/lapce.spec index 2642e6df83..15b5350e8a 100644 --- a/lapce.spec +++ b/lapce.spec @@ -4,8 +4,7 @@ Release: 1 Summary: Lightning-fast and Powerful Code Editor written in Rust License: Apache-2.0 URL: https://github.com/lapce/lapce -VCS: {{{ git_dir_vcs }}} -Source: {{{ git_dir_pack }}} +Source: https://github.com/lapce/lapce.git BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare %description From c53589e4296cef01e967b7ee88c05b64ec82ae19 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Fri, 15 Jul 2022 20:00:25 -0400 Subject: [PATCH 097/816] rename package --- lapce.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lapce.spec b/lapce.spec index 15b5350e8a..1ced4a066f 100644 --- a/lapce.spec +++ b/lapce.spec @@ -1,4 +1,4 @@ -Name: lapce +Name: lapce-git Version: 0.1.3.{{{ git_dir_version }}} Release: 1 Summary: Lightning-fast and Powerful Code Editor written in Rust From 48d75eac73c2bed5d529bcd913c08b6097ec1384 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 00:19:12 -0400 Subject: [PATCH 098/816] test --- lapce.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lapce.spec b/lapce.spec index 1ced4a066f..45f3ba3154 100644 --- a/lapce.spec +++ b/lapce.spec @@ -4,7 +4,10 @@ Release: 1 Summary: Lightning-fast and Powerful Code Editor written in Rust License: Apache-2.0 URL: https://github.com/lapce/lapce -Source: https://github.com/lapce/lapce.git + +VCS: {{{ git_dir_vcs }}} +Source: {{{ git_dir_pack }}} + BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare %description From 3be752a6a72af04145f3b317fe435d0626e11199 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 00:24:04 -0400 Subject: [PATCH 099/816] test --- lapce.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lapce.spec b/lapce.spec index 45f3ba3154..b06a594f63 100644 --- a/lapce.spec +++ b/lapce.spec @@ -37,4 +37,5 @@ install -Dm766 extra/images/logo.png %{buildroot}/usr/share/pixmaps/dev.lapce.la /usr/share/pixmaps/dev.lapce.lapce.png %changelog -{{{ git_dir_changelog }}} +* Sat Jul 16 2022 Simon Garding - test +- test From bd6d82efe927f6e7d62f4eb6c68db47e5da45276 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 00:27:40 -0400 Subject: [PATCH 100/816] test --- lapce.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lapce.spec b/lapce.spec index b06a594f63..32bb16d41b 100644 --- a/lapce.spec +++ b/lapce.spec @@ -15,7 +15,7 @@ Lapce is written in pure Rust with a UI in Druid (which is also written in Rust) It is designed with Rope Science from the Xi-Editor which makes for lightning-fast computation, and leverages OpenGL for rendering. %prep -%autosetup +{{{ git_dir_setup_macro }}} %build cargo build --profile release-lto From d0e8d52b824738b0920bc86e7c4ca6e766335415 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 01:00:41 -0400 Subject: [PATCH 101/816] test --- lapce.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lapce.spec b/lapce.spec index 32bb16d41b..3a0b3eb2bf 100644 --- a/lapce.spec +++ b/lapce.spec @@ -21,8 +21,8 @@ It is designed with Rope Science from the Xi-Editor which makes for lightning-fa cargo build --profile release-lto %install -install -Dm755 target/release-lto/%{name} %{buildroot}%{_bindir}/%{name} -install -Dm755 target/release-lto/%{name}-proxy %{buildroot}%{_bindir}/%{name}-proxy +install -Dm755 target/release-lto/%{name} %{buildroot}%{_bindir}/lapce +install -Dm755 target/release-lto/%{name}-proxy %{buildroot}%{_bindir}/lapce-proxy install -Dm755 extra/linux/dev.lapce.lapce.desktop %{buildroot}/usr/share/applications/dev.lapce.lapce.desktop install -Dm766 extra/linux/dev.lapce.lapce.metainfo.xml %{buildroot}/usr/share/metainfo/dev.lapce.lapce.metainfo.xml install -Dm766 extra/images/logo.png %{buildroot}/usr/share/pixmaps/dev.lapce.lapce.png @@ -30,8 +30,8 @@ install -Dm766 extra/images/logo.png %{buildroot}/usr/share/pixmaps/dev.lapce.la %files %license LICENSE* %doc *.md -%{_bindir}/%{name} -%{_bindir}/%{name}-proxy +%{_bindir}/lapce +%{_bindir}/lapce-proxy /usr/share/applications/dev.lapce.lapce.desktop /usr/share/metainfo/dev.lapce.lapce.metainfo.xml /usr/share/pixmaps/dev.lapce.lapce.png From 10a62052462f7a505b5f15f50b9885268322b933 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 01:34:21 -0400 Subject: [PATCH 102/816] test --- lapce.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lapce.spec b/lapce.spec index 3a0b3eb2bf..e4ea9f2d1d 100644 --- a/lapce.spec +++ b/lapce.spec @@ -21,8 +21,8 @@ It is designed with Rope Science from the Xi-Editor which makes for lightning-fa cargo build --profile release-lto %install -install -Dm755 target/release-lto/%{name} %{buildroot}%{_bindir}/lapce -install -Dm755 target/release-lto/%{name}-proxy %{buildroot}%{_bindir}/lapce-proxy +install -Dm755 target/release-lto/lapce %{buildroot}%{_bindir}/lapce +install -Dm755 target/release-lto/lapce-proxy %{buildroot}%{_bindir}/lapce-proxy install -Dm755 extra/linux/dev.lapce.lapce.desktop %{buildroot}/usr/share/applications/dev.lapce.lapce.desktop install -Dm766 extra/linux/dev.lapce.lapce.metainfo.xml %{buildroot}/usr/share/metainfo/dev.lapce.lapce.metainfo.xml install -Dm766 extra/images/logo.png %{buildroot}/usr/share/pixmaps/dev.lapce.lapce.png From a409eff41fafb0339b8622b8c7efa0e714b27d6d Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 18:43:52 -0400 Subject: [PATCH 103/816] use mold --- lapce.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lapce.spec b/lapce.spec index e4ea9f2d1d..940d523bd0 100644 --- a/lapce.spec +++ b/lapce.spec @@ -8,7 +8,7 @@ URL: https://github.com/lapce/lapce VCS: {{{ git_dir_vcs }}} Source: {{{ git_dir_pack }}} -BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare +BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare mold %description Lapce is written in pure Rust with a UI in Druid (which is also written in Rust). @@ -18,7 +18,7 @@ It is designed with Rope Science from the Xi-Editor which makes for lightning-fa {{{ git_dir_setup_macro }}} %build -cargo build --profile release-lto +RUSTFLAGS="-C link-arg=-fuse-ld=/usr/bin/mold" cargo build --profile release-lto %install install -Dm755 target/release-lto/lapce %{buildroot}%{_bindir}/lapce From 2066aeae65f1f2ca51bdd76c452363fe402671f7 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sat, 16 Jul 2022 19:39:41 -0400 Subject: [PATCH 104/816] fix linking + use clang --- lapce.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lapce.spec b/lapce.spec index 940d523bd0..bd538bde84 100644 --- a/lapce.spec +++ b/lapce.spec @@ -8,7 +8,7 @@ URL: https://github.com/lapce/lapce VCS: {{{ git_dir_vcs }}} Source: {{{ git_dir_pack }}} -BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel gcc g++ perl-lib perl-File-Compare mold +BuildRequires: cargo perl-FindBin cairo-devel cairo-gobject-devel atk-devel gdk-pixbuf2-devel pango-devel gtk3-devel perl-lib perl-File-Compare mold clang %description Lapce is written in pure Rust with a UI in Druid (which is also written in Rust). @@ -18,7 +18,7 @@ It is designed with Rope Science from the Xi-Editor which makes for lightning-fa {{{ git_dir_setup_macro }}} %build -RUSTFLAGS="-C link-arg=-fuse-ld=/usr/bin/mold" cargo build --profile release-lto +RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=mold" cargo build --profile release-lto %install install -Dm755 target/release-lto/lapce %{buildroot}%{_bindir}/lapce From 4369e7a3094f8d95b7616ffb6f45ee66e55610a3 Mon Sep 17 00:00:00 2001 From: ImajinDevon Date: Sat, 16 Jul 2022 21:50:17 -0400 Subject: [PATCH 105/816] Utilize the `fs` module --- lapce-proxy/src/buffer.rs | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 96de5645eb..8912d02b25 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -3,7 +3,6 @@ use lapce_rpc::buffer::BufferId; use std::ffi::OsString; use std::fs; use std::fs::File; -use std::io::Read; use std::io::Write; use std::path::PathBuf; use std::{borrow::Cow, path::Path, time::SystemTime}; @@ -81,15 +80,13 @@ impl Buffer { self.rev += 1; let content_change = get_document_content_changes(delta, self); self.rope = delta.apply(&self.rope); - let content_change = match content_change { - Some(content_change) => content_change, - None => TextDocumentContentChangeEvent { + Some(content_change.unwrap_or_else(|| { + TextDocumentContentChangeEvent { range: None, range_length: None, text: self.get_document(), - }, - }; - Some(content_change) + } + })) } pub fn get_document(&self) -> String { @@ -131,17 +128,11 @@ impl Buffer { } pub fn load_file(path: &Path) -> Result { - let mut f = File::open(path)?; - let mut bytes = Vec::new(); - f.read_to_end(&mut bytes)?; - Ok(std::str::from_utf8(&bytes)?.to_string()) + Ok(fs::read_to_string(path)?) } fn load_rope(path: &Path) -> Result { - let mut f = File::open(path)?; - let mut bytes = Vec::new(); - f.read_to_end(&mut bytes)?; - Ok(Rope::from(std::str::from_utf8(&bytes)?)) + Ok(Rope::from(fs::read_to_string(path)?)) } fn language_id_from_path(path: &Path) -> Option<&str> { From 542fe1a70fb5da0877057ecf0431257fd95620a6 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Sat, 16 Jul 2022 21:38:20 -0500 Subject: [PATCH 106/816] Check lsp capabilities before sending commands --- lapce-proxy/src/buffer.rs | 1 + lapce-proxy/src/lsp.rs | 247 +++++++++++++++++++++++++++++++++++++- 2 files changed, 246 insertions(+), 2 deletions(-) diff --git a/lapce-proxy/src/buffer.rs b/lapce-proxy/src/buffer.rs index 96de5645eb..fa9da0b9cb 100644 --- a/lapce-proxy/src/buffer.rs +++ b/lapce-proxy/src/buffer.rs @@ -151,6 +151,7 @@ fn language_id_from_path(path: &Path) -> Option<&str> { "rs" => "rust", "go" => "go", "py" => "python", + "jl" => "julia", "cpp" | "hpp" | "cxx" | "hxx" | "c++" | "h++" | "cc" | "hh" | "C" | "H" => { "cpp" } diff --git a/lapce-proxy/src/lsp.rs b/lapce-proxy/src/lsp.rs index dc89926842..702a18f8f3 100644 --- a/lapce-proxy/src/lsp.rs +++ b/lapce-proxy/src/lsp.rs @@ -166,14 +166,28 @@ impl LspCatalog { language_id: &str, text: String, ) { - let document_uri = Url::from_file_path(path).unwrap(); if let Some(client) = self.clients.get(language_id) { + { + let state = client.state.lock(); + if !state.is_initialized { + return; + } + } + + let document_uri = Url::from_file_path(path).unwrap(); client.send_did_open(buffer_id, document_uri, language_id, text); } } pub fn save_buffer(&self, buffer: &Buffer, workspace_path: &Path) { for (client_language_id, client) in self.clients.iter() { + { + let state = client.state.lock(); + if !state.is_initialized { + return; + } + } + // Get rid of the workspace path prefix so that it can be used with the filters let buffer_path = buffer .path @@ -225,6 +239,30 @@ impl LspCatalog { pub fn get_semantic_tokens(&self, id: RequestId, buffer: &Buffer) { let buffer = buffer.clone(); if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.semantic_tokens_provider.as_ref()) + .map(|prov| match prov { + SemanticTokensServerCapabilities::SemanticTokensOptions(opts) => opts, + SemanticTokensServerCapabilities::SemanticTokensRegistrationOptions(reg) => ®.semantic_tokens_options, + }).map(|opts| { + // TODO: handle opts.full delta + opts.full.is_some() + }).unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(&buffer); client.request_semantic_tokens(uri, move |lsp_client, result| { let lsp_state = lsp_client.state.lock(); @@ -255,6 +293,25 @@ impl LspCatalog { pub fn get_document_symbols(&self, id: RequestId, buffer: &Buffer) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.document_symbol_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_document_symbols(uri, move |lsp_client, result| { lsp_client.dispatcher.respond(id, result); @@ -270,6 +327,25 @@ impl LspCatalog { ) { // TODO: We could collate workspace symbols from all the lsps? if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.workspace_symbol_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + client.request_workspace_symbols(query, move |lsp_client, result| { lsp_client.dispatcher.respond(id, result); }); @@ -278,6 +354,25 @@ impl LspCatalog { pub fn get_document_formatting(&self, id: RequestId, buffer: &Buffer) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.document_formatting_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_document_formatting(uri, move |lsp_client, result| { lsp_client.dispatcher.respond(id, result); @@ -298,6 +393,25 @@ impl LspCatalog { position: Position, ) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + // TODO: pay attention to trigger characters + let is_enabled = state + .server_capabilities + .as_ref() + .map(|cap| cap.completion_provider.is_some()) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_completion(uri, position, move |lsp_client, result| { let mut resp = json!({ "id": id }); @@ -346,6 +460,25 @@ impl LspCatalog { position: Position, ) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.hover_provider.as_ref()) + .map(|prov| prov != &HoverProviderCapability::Simple(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_hover(uri, position, move |lsp_client, result| { let mut resp = json!({ "id": id }); @@ -365,6 +498,25 @@ impl LspCatalog { pub fn get_signature(&self, id: RequestId, buffer: &Buffer, position: Position) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + // TODO: use the trigger characters fields + let is_enabled = state + .server_capabilities + .as_ref() + .map(|cap| cap.signature_help_provider.is_some()) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_signature(uri, position, move |lsp_client, result| { let mut resp = json!({ "id": id }); @@ -389,6 +541,25 @@ impl LspCatalog { position: Position, ) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.references_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_references(uri, position, move |lsp_client, result| { let mut resp = json!({ "id": id }); @@ -408,6 +579,25 @@ impl LspCatalog { pub fn get_inlay_hints(&self, id: RequestId, buffer: &Buffer) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.inlay_hint_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); // Range over the entire buffer let range = Range { @@ -438,6 +628,25 @@ impl LspCatalog { position: Position, ) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.code_action_provider.as_ref()) + .map(|prov| prov != &CodeActionProviderCapability::Simple(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); let range = Range { start: position, @@ -467,6 +676,25 @@ impl LspCatalog { position: Position, ) { if let Some(client) = self.clients.get(&buffer.language_id) { + { + let state = client.state.lock(); + + if !state.is_initialized { + return; + } + + let is_enabled = state + .server_capabilities + .as_ref() + .and_then(|cap| cap.definition_provider.as_ref()) + .map(|prov| prov != &OneOf::Left(false)) + .unwrap_or(false); + + if !is_enabled { + return; + } + } + let uri = client.get_uri(buffer); client.request_definition(uri, position, move |lsp_client, result| { let mut resp = json!({ "id": id }); @@ -660,7 +888,7 @@ impl LspClient { // Token is ignored as the workProgress Widget is always working // In the future, for multiple workProgress Handling we should // probably store the token - self.send_success_response(id, &json!({})); + self.send_success_response(id, &Value::Null); } "client/registerCapability" => { if let Ok(registrations) = @@ -697,6 +925,19 @@ impl LspClient { } } } + "workspace/configuration" => { + if let Ok(config) = + serde_json::from_value::(json!(params)) + { + let items = config + .items + .into_iter() + .map(|_item| Value::Null) + .collect::>(); + + self.send_success_response(id, &Value::Array(items)); + } + } method => { println!("Received unhandled request {method}"); } @@ -836,6 +1077,7 @@ impl LspClient { if !is_initialized { self.initialize(); + return; } let text_document_did_open_params = DidOpenTextDocumentParams { @@ -953,6 +1195,7 @@ impl LspClient { symbol: Some(WorkspaceSymbolClientCapabilities { ..Default::default() }), + configuration: Some(true), ..Default::default() }), experimental: Some(json!({ From 54ae586d9766bfd1ce14986120e3ef9603b4c76e Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 17 Jul 2022 11:23:06 +0100 Subject: [PATCH 107/816] add method to get diagnostics items --- lapce-core/src/command.rs | 1 + lapce-data/src/data.rs | 42 +++++++++++++++++++++++++++++-- lapce-data/src/document.rs | 21 ++++------------ lapce-data/src/editor.rs | 31 +++++------------------ lapce-ui/src/editor.rs | 6 +---- lapce-ui/src/problem.rs | 51 +++----------------------------------- lapce-ui/src/tab.rs | 3 ++- 7 files changed, 59 insertions(+), 96 deletions(-) diff --git a/lapce-core/src/command.rs b/lapce-core/src/command.rs index e3e267f78b..9c8c801f2c 100644 --- a/lapce-core/src/command.rs +++ b/lapce-core/src/command.rs @@ -255,6 +255,7 @@ pub enum FocusCommand { JumpLocationBackward, #[strum(serialize = "jump_location_forward")] JumpLocationForward, + #[strum(message = "Next Error in Workspace")] #[strum(serialize = "next_error")] NextError, #[strum(serialize = "previous_error")] diff --git a/lapce-data/src/data.rs b/lapce-data/src/data.rs index 62bf09a490..3b543bca49 100644 --- a/lapce-data/src/data.rs +++ b/lapce-data/src/data.rs @@ -19,6 +19,7 @@ use druid::{ FileDialogOptions, Lens, Point, Rect, Size, Target, Vec2, WidgetId, WindowId, }; +use itertools::Itertools; use lapce_core::{ command::{FocusCommand, MultiSelectionCommand}, cursor::{Cursor, CursorMode}, @@ -33,7 +34,7 @@ use lapce_rpc::{ buffer::BufferId, plugin::PluginDescription, source_control::FileDiff, terminal::TermId, }; -use lsp_types::{Diagnostic, Position, ProgressToken, TextEdit}; +use lsp_types::{Diagnostic, DiagnosticSeverity, Position, ProgressToken, TextEdit}; use notify::Watcher; use serde::{Deserialize, Serialize}; use serde_json::Value; @@ -421,7 +422,7 @@ impl LapceWindowData { #[derive(Clone, Debug)] pub struct EditorDiagnostic { - pub range: Option<(usize, usize)>, + pub range: (usize, usize), pub diagnostic: Diagnostic, pub lines: usize, } @@ -1879,6 +1880,43 @@ impl LapceMainSplitData { ); } + pub fn diagnostics_items( + &self, + severity: DiagnosticSeverity, + ) -> Vec<(&PathBuf, Vec<&EditorDiagnostic>)> { + self.diagnostics + .iter() + .filter_map(|(path, diagnostic)| { + if let Some(doc) = self.open_docs.get(path) { + return match doc.diagnostics.as_ref() { + Some(d) => { + let diagnostics: Vec<&EditorDiagnostic> = d + .iter() + .filter(|d| d.diagnostic.severity == Some(severity)) + .collect(); + if !diagnostics.is_empty() { + Some((path, diagnostics)) + } else { + None + } + } + None => None, + }; + } + let diagnostics: Vec<&EditorDiagnostic> = diagnostic + .iter() + .filter(|d| d.diagnostic.severity == Some(severity)) + .collect(); + if !diagnostics.is_empty() { + Some((path, diagnostics)) + } else { + None + } + }) + .sorted_by_key(|(path, _)| (*path).clone()) + .collect() + } + fn cursor_apply_delta(&mut self, path: &Path, delta: &RopeDelta) { for (_view_id, editor) in self.editors.iter_mut() { if let BufferContent::File(current_path) = &editor.content { diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 3d9f8241e0..17d3a96d4f 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -482,22 +482,11 @@ impl Document { diagnostics .iter() .map(|d| EditorDiagnostic { - range: Some(( + range: ( self.buffer.offset_of_position(&d.diagnostic.range.start), self.buffer.offset_of_position(&d.diagnostic.range.end), - )), - lines: d - .diagnostic - .related_information - .as_ref() - .map(|r| { - r.iter() - .map(|r| r.message.matches('\n').count() + 1 + 1) - .sum() - }) - .unwrap_or(0) - + d.diagnostic.message.matches('\n').count() - + 1, + ), + lines: d.lines, diagnostic: d.diagnostic.clone(), }) .collect(), @@ -508,12 +497,12 @@ impl Document { if let Some(mut diagnostics) = self.diagnostics.clone() { for diagnostic in Arc::make_mut(&mut diagnostics).iter_mut() { let mut transformer = Transformer::new(delta); - let (start, end) = diagnostic.range.unwrap(); + let (start, end) = diagnostic.range; let (new_start, new_end) = ( transformer.transform(start, false), transformer.transform(end, true), ); - diagnostic.range = Some((new_start, new_end)); + diagnostic.range = (new_start, new_end); diagnostic.diagnostic.range.start = self.buffer().offset_to_position(new_start); diagnostic.diagnostic.range.end = diff --git a/lapce-data/src/editor.rs b/lapce-data/src/editor.rs index af80406549..656cd3b253 100644 --- a/lapce-data/src/editor.rs +++ b/lapce-data/src/editor.rs @@ -709,33 +709,14 @@ impl LapceEditorBufferData { fn next_error(&mut self, ctx: &mut EventCtx) { if let BufferContent::File(buffer_path) = self.doc.content() { - let mut file_diagnostics = self + let mut file_diagnostics: Vec<(&PathBuf, Vec)> = self .main_split - .diagnostics - .iter() - .filter_map(|(path, diagnostics)| { - //let buffer = self.get_buffer_from_path(ctx, ui_state, path); - let mut errors: Vec = diagnostics - .iter() - .filter_map(|d| { - let severity = d - .diagnostic - .severity - .unwrap_or(DiagnosticSeverity::HINT); - if severity != DiagnosticSeverity::ERROR { - return None; - } - Some(d.diagnostic.range.start) - }) - .collect(); - if errors.is_empty() { - None - } else { - errors.sort(); - Some((path, errors)) - } + .diagnostics_items(DiagnosticSeverity::ERROR) + .into_iter() + .map(|(p, d)| { + (p, d.iter().map(|d| d.diagnostic.range.start).collect()) }) - .collect::)>>(); + .collect(); if file_diagnostics.is_empty() { return; } diff --git a/lapce-ui/src/editor.rs b/lapce-ui/src/editor.rs index 93f27b1d65..5157f2bce5 100644 --- a/lapce-ui/src/editor.rs +++ b/lapce-ui/src/editor.rs @@ -1623,11 +1623,7 @@ impl LapceEditor { if (start.line as usize) <= end_line && (end.line as usize) >= start_line { - let start_offset = if let Some(range) = diagnostic.range { - range.0 - } else { - data.doc.buffer().offset_of_position(&start) - }; + let start_offset = diagnostic.range.0; if start_offset == cursor_offset { current = Some(diagnostic.clone()); } diff --git a/lapce-ui/src/problem.rs b/lapce-ui/src/problem.rs index 51a9689fea..5e4d6b699a 100644 --- a/lapce-ui/src/problem.rs +++ b/lapce-ui/src/problem.rs @@ -6,11 +6,10 @@ use druid::{ LifeCycle, LifeCycleCtx, MouseEvent, PaintCtx, Point, RenderContext, Size, Target, UpdateCtx, Widget, WidgetExt, }; -use itertools::Itertools; use lapce_data::{ command::{LapceUICommand, LAPCE_UI_COMMAND}, config::LapceTheme, - data::{EditorDiagnostic, LapceTabData}, + data::LapceTabData, editor::EditorLocation, panel::PanelKind, problem::ProblemData, @@ -62,48 +61,6 @@ impl ProblemContent { } } - fn items<'a>( - &self, - data: &'a LapceTabData, - ) -> Vec<(&'a PathBuf, Vec<&'a EditorDiagnostic>)> { - let items: Vec<(&PathBuf, Vec<&EditorDiagnostic>)> = data - .main_split - .diagnostics - .iter() - .filter_map(|(path, diagnostic)| { - if let Some(doc) = data.main_split.open_docs.get(path) { - return match doc.diagnostics.as_ref() { - Some(d) => { - let diagnostics: Vec<&EditorDiagnostic> = d - .iter() - .filter(|d| { - d.diagnostic.severity == Some(self.severity) - }) - .collect(); - if !diagnostics.is_empty() { - Some((path, diagnostics)) - } else { - None - } - } - None => None, - }; - } - let diagnostics: Vec<&EditorDiagnostic> = diagnostic - .iter() - .filter(|d| d.diagnostic.severity == Some(self.severity)) - .collect(); - if !diagnostics.is_empty() { - Some((path, diagnostics)) - } else { - None - } - }) - .sorted_by_key(|(path, _)| (*path).clone()) - .collect(); - items - } - fn mouse_down( &self, ctx: &mut EventCtx, @@ -112,7 +69,7 @@ impl ProblemContent { ) { let n = (mouse_event.pos.y / self.line_height).floor() as usize; - let items = self.items(data); + let items = data.main_split.diagnostics_items(self.severity); let mut i = 0; for (path, diagnostics) in items { let diagnostics_len = diagnostics.iter().map(|d| d.lines).sum::(); @@ -254,7 +211,7 @@ impl Widget for ProblemContent { data: &LapceTabData, _env: &Env, ) -> Size { - let items = self.items(data); + let items = data.main_split.diagnostics_items(self.severity); let n = items .iter() .map(|(_, diagnostics)| { @@ -276,7 +233,7 @@ impl Widget for ProblemContent { let min = (rect.y0 / line_height).floor() as usize; let max = (rect.y1 / line_height) as usize + 2; - let items = self.items(data); + let items = data.main_split.diagnostics_items(self.severity); let mut i = 0; for (path, diagnostics) in items { let diagnostics_len = diagnostics.iter().map(|d| d.lines).sum::(); diff --git a/lapce-ui/src/tab.rs b/lapce-ui/src/tab.rs index 76e2a77d8c..89ca730cd1 100644 --- a/lapce-ui/src/tab.rs +++ b/lapce-ui/src/tab.rs @@ -976,7 +976,7 @@ impl LapceTab { .diagnostics .iter() .map(|d| EditorDiagnostic { - range: None, + range: (0, 0), diagnostic: d.clone(), lines: d .related_information @@ -994,6 +994,7 @@ impl LapceTab { + d.message.matches('\n').count() + 1, }) + .sorted_by_key(|d| d.diagnostic.range.start) .collect(); let diagnostics: Arc> = Arc::new(diagnostics); From 60f3252ab8c9cbf212550ff8fa887d970cdd6ccb Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Sun, 17 Jul 2022 16:05:35 +0100 Subject: [PATCH 108/816] update screenshot --- extra/images/screenshot.png | Bin 805455 -> 779762 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/extra/images/screenshot.png b/extra/images/screenshot.png index 1ccce3d5e6ab000a77f2ab43506177177e2bde1c..ab12670523e276ec5c1d4481d4fcb65f0aec9349 100644 GIT binary patch literal 779762 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 z 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

N1Z=%P!MXjOxT=I zuJG@e3D9h}Q$Y%ydTFL%=ESCC*V)Aep+(R>W1vGb+}1za-tL0}sh1}C8uvOh0px`y++8@ERfoj*F0jJUb2f!rPc^^zBwQQhQ^61qsI@jDd{8h8U%X5)GT zJMXr~Q=x}*v|{)X!*W3r3D&y3`kM_=A7o3As=FI+KJ&@CI>=c9-)VxSTOqHmr{&pF@%X}Rj{vAjxI}RKwE=id zXQzkAF1;bz#gN&8>X^~5*?JNj;LaGn2-!5wGc=_UKjw|awo>y8PDu`{?VB=YvQ|&o{+vZHm{-W;}8D zay-^$u8MkWu-H1_jQHsMT&7kG^A1>F+8LG~*cOht<)mNPi0vJA=@6_~@9DLx_XQVow&`Cv}x@{gQqw zxq~RlF>qn~;{L|RR>acK$`ri1hpPwh|Lg-lNq*@^XdZzb!zQ6^0LumnVJktS;&`kQ6Og-Azd zhH0wH`m1@>x~Jm7M-J?Z9DOHCRu@Y}<;z{V=(WscJIw%4`I*x?i7L>(o+Yh?0Jgq# zXPGF*W&tyh0@o_>F-U8C!kp4W#x3!dJt6`<2q~l3OhWgUIfPNAtq3TAf!$l}j{C;p zo=dzHxHqr7`w6u%d__kyMrGSRV16KJT|ax`CUth-*X4bkq@}{F{q9r+9`sOgIK3m> zI_10ZbIh@ol=T7(y7wx#?sd-`;gtQW3&SPLOU+-ZC+G{jD3HsXa-T;@A=q~@{R5p5 zUv9>uyJZkFLVwNFu`X){98p}iw_Rxw+T=%EhcMmjY7!q6_zvdxiMljULk-NOkX6_e zsr#t#^GBU4mpX13QZ!$bUH8Pg7@^T&hy>TU2&MJWW$!zweWtlI z;?O4X!?!~{pa(4+lHZKqIYWcfpnIs6&9P*TnL?#tBLzGwuY^IlOH%lmnzbL5^!4i& z3q@4lnu&<%E42;XR|7k)p|kvvMA3-*X-iD(0gyP28~WgYrYUb zw1b8oWxeu?8`MF*->snBW=oQiuj|Om2@V}}F%L=D3$hGBHBQT1?)t#8ke#^c`VQsM zsvXJmXdQWqKJa>$PZjprr4OCV^mzBZGOBF3kpMR$TomT2T#51RPGuiW3%=Dub#R`rbMf{o0#JBf4j%T=!(jTbRxD^=!bQrfIXp$jVNh z0SM1bni!?$n`hg12~mZRf#ULw{VBIHyCU-KrEKe=oe2BQO@ZaLn$55%Cger$RpGd$M#bfc2krDT=9Qm@!gu_W6*ij?gKPj` z8emecBx=la`SMut#>rSCJxr2s0sCUpY)T$MsKzR0BSp9MPR@v=piil{A zhw1M6s$rQlw6kNTAh58`bhi~%Z`hrW>8M#&DA$|iJrSTz8eXxe8IHM@7+*%#+}Beb zc^lVry3T92FTgd3=l+g9W+4Xd!KAG=AQiThL_wW4)R9lSM7=^*mf4l7oE6NIxoN#N8XhTJr$6W%)gIkvoHd`cn>W1qB9i`< z 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%0Doh+O75cTxxID#K+rO<*d*MhVGK{F+D%3s;PjZ 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�$Zvb9)K6-F>CzyF3q{FYOPM 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� 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 z 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

    %R8M>R;S8wGHoLM`EhhIv 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⪙_pus;WU96H`$C@!+%n2ex{TXz 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%0Djm)a@OCu>>M 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

    T8tGxzinJP; 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 literal 805455 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�rhC0dPBI!K^o?aGGMF(gk7|&B~l_%%A+s9AK@G5mE487qHz_+=3_^8`j~MR!{125GBfsLfW#|VgDHscnKE;m)b>zB$9*Z z50G}|vj0VLqrdClQ%t>gQc*}}o7)-YZIo917qq63Rs>3avi~0GZ|w@0%0}sy%wzB0 zI3Mn`KU_4x=po$W>m~zvBd2#NvWPZAY{_2lCMXvII4J2m%K96;U0=}G(S_nE6GXKg zWxv0J=YP+9u=Kf7G-#Auc26%tncs2z+7ABR;~OAyN4&;1WY zakAnWTZ65hUEw>ZtY0{ge`r2k{tG4>=lKqgakC51jP$utKC6hw@BkWYnSLax6Y@7xgrLqg8+Xng#k&(~#aTqn;Jvb`;MO~@1n@>WEZ{x%}9Yd{^56i+lo zaGu=Ax%hcG=um=ZLT9WpQ^86worPicaBd|dG@#?&Lhs56U9D7-RA@*H5hTEQm zoucdzEzbI8x4Rc|VC`+wNUXy-J-<`B-a755QD9k7U|P8!E&5}IPipzsZd4oa(EpaO z)lzQ(i?)&tH~%PdszTxIeghzweIq`Kcz&B85p9=J35GHPAppk)fF(_Ly@7qeUbNkY z{mZ0Ut#DEO(KIZ;U>DKAF6*eyiXf|0yw8A)^c2cHRLA1q0TWwsp56qsvi>?YZhgKb zjFcxxDZ;W2_3bTc5(1W*$xBN{Fsw1@9-k_U&;LRZJ(`<2m&B{PC^R!N>?IBIJFh{e zV%WI83pG*C3Yq52By&;Gx;WTdK@O~17|mVgy+QKFuYpW>Of}wGdI%-GcKEDv`( zyD8-Hu#2#T>?GKiHOp`%5T!jdb_%-%$l|X_;?TU1Tj@E7p+9@EtoPXnGXs*%8Z7OP zXR5)W>fM^pU9=lO%%pfmzzaSEuz*h8`IkiXKPuSY;wg(K#{2G(?({bm3;obF@VQ|` z4YwXxeHyS?06YUY7Z5tl?-UtbgZxWC|F@YJqBzMf#&+NYajB3}>`)#w3ck>SecTVuUj)V;Ic z9v?m#yV_C^{dT!VBSuu$r?YgjqsTO;BZN;pu@#+hR~`m%wzD4+pnGimCJVvfuz*c+ zH>e8uUrzkqrgsJrDvgg2OylWS3Qotl{*hium?5PMr1twMFPE&ojt?J`E$-=MVun8q zXLBME=tCqy+W2u$0F8ezw(JK*Rpkp-7LXbp;hmuEwE$hKif#~2<3-t|MGm6Rnh!cz z2MnF&`>*_&zSV{O*>P!y0odsVe|*qWX$CnFQ-}KWH)DVXUH*SKE!yhhwq5<0F*$(% z`M1}y7aH{u!7EcGVRJ?c8tc@q7zhL!Q$g4bFMBcAU3P0OTd>?4t1JYo?k24;roizQ z?NBlW@*~9YK3`wEqex($NM-8zCkdKMp9tDZciLTf%Y0{IB6vUkAm~@ON7vS9z<1*i z!Ghid4?TdG=BwjF}2@T}?gXe!Yg*2+B*)-h_tg z0E(1(qo1(lp|YJ|7C>&6GmM~2VkU06n#x~9rU3M1*h%0mH01ZNNm0UO9!^6vOBn)svzrDO2M*oo?0G2SZ{Uik&h&?+G zw952ZqYbSc{2(rI`TbUny6?&sEhE$(C~?|9yuA?)y|no=>D5_`>WWgw%fH;X z-73w-OxSg%xx(vMVbkYq3@3fgxARA=@HO?03fgfl0k`)}0^IZ6DFt&y9NvuRwW7_Ev6)eu(&kiu?mInf6R{R~>#Xhb z-Sy9MSDk2Wxy<=z@k33a?~)8qeGhJh{dxOPwHlpdLBhUHV_@uO9k$J>9V@Vz7)|<* zX^taQuN$DtaGO3Nwz_x<4?L7u037f~+Hdl6W@cT*;41?6>c6c1=#2|m^c+p>LK~;H zxU749p0QsbyfmW8;NMwvxX-`LD`Ft}x*Pm%bZ&`rWLy^w7Mmoy)aw%*o+aT=1vPzg zJ1}E5E0o+?5ylLh5UB;Co9h-hWJ~o_Dh|p@*Epk5A(_ilf zt6YlvnT4UfMOwF&PW+Wk#m5dpwBHCGBZk03xi+oFjk+o5o>*ltt#Q@-k@I~>{AxM^ zJu4aKD~$3U;=2N@sFbv7oGy@S{mTVVQhcUjnZ~(`rU>-mq4YLvm&H)&7s$a*L?v#F zY7^hw}1%f1rzC)IYfvv$fQ?tnI`hM4@uaue)!O~Z(_d1Fqx%j@7$c8b^o3LwLUMXsFNM?WDjuYyQeofgi7H-Zx@^W@y%aRSm}U^sS< z=pgU)3E|@6k!5T<;*YMHyox1apVqaraY3Sq>SP8siziF~a`9h#8)M?0!j`|ci2nV9 z(mbCtOO3^ht#zk^wY|A(f><5yfT9k!6TumSjj~Ea3?h#n_({GVSv-@$dU`4f5OG<^BFm0V_RtL0`(mx9Gk8Ez9l5UL<5_(UJ+H z_f_Un^6!{414Y+0i!L`A$54SX7Mu>~`h4$^Nw&OZ4O$~l{cuBrLYQo*Lxb|{yN*ie zEeuWV61Pk0o*pc=;c7B^Onx4+s*p~r`!IF~(6lMfkD-{ucv^qh+brSodP7jm!Oadk z)~I-lHI}znN?Ab>h4VJNH!@X|N_fKfP)FcIb9yX%xlWpFjMVAXM$=4ur++2V*XGX0 zgH&tpKhZALjdHtcoGIJ5Hgu=IKGJz&+90JPzpP6=@@4&*Uu79w2PT>O9YM^fjFffU z;dPyPjqLmNVXcMw-V(fk=v(=Kcjf323FYAGbe-kSZR|x~GSTa z0@&^bZsPpUSJEu@Zp0K5y_5K^(Pw;7Hf+|K=I{D7dX&mDdI_<9x?Crd86_x5wozW1 zNP79;p6yxj6QT!PQ*-(G7a%9Ou>wLM2@E$YkYl}Hz>#S>YW_-X6bXrfRxu7^zy*a@CCxb7q+l!P7 zikGx49l`MAu^da{RB|etFM}q>BXv9`Mv<6I-lQVZ2f|x#B#49k^73Ei?iCaE%wy+o zCemVlt=hT!PsKEazdoFIaub9z##7Ah2<$YFS=>WBoaeqPOh8XIj|&$2`%cq;`3FdB zGC#Yibi~t(?c_@#ll^Dp$tk`geb#}COb~if0U~^f;|$_B9C2i7W$EQri@^2tW8b;v zdD+yM?QEk;(FA$#{I~+hA6MT4Qz~Iw$#F7Pg{>AOHtO-r&x2RNS01(1wxZ>D7Oxz$ zNv4Lh>`-wGgYsMIRHV<)VcMrmEXro9*C)YKc0aOVI&$L;u!`}yWrsbD;D# zptH3bhrK4`h;zxriC)yockJqTD5Pq2Gj^?!94PF@(%VzLQ!d2(-uLp7%8N7X3a{NR znw3AR&|;o(k9Y^J{~SHCi${hneAWC%xBa?zT?|-z%r3{RM$nH#F?W1d!;^KEV|?hg#8& zOvST_(cE;h=ne$l;t20vYYnj)GL%PU-G_+#5A_;q86tvsuQqs+IuBT(O2*EQZdbkp zi}gSO7clTpIe-j=5n1f-gV*mfm1^^UAP>HevvjxxXfgJvmF_hqVD{TW%JgDefj zs&o-lBbIfxJJ4G$eH%4j#z-RjzpPusi;c&XS6Xy&==(mN&@i8{w|ataZ>yB- zcz`Ig86FcF01Y>-S}B^2Tr*BLTGMR``9aZ`{KRT|K6ELqN&@xj6O4Y}UCv7tpM8JY zp$lY}St@&KwP2yUV7^q;lYXd`7TQl#!z=UdymHUR>68qLgWVx!+LQi={o^{kinRO5 z&$2JjOjh8T`5%cAC!zwJ5e9)K|#UTBt z^JIWOFcM?(p>% zdFfNJ&>;gP@$8V_odbKv?t<>-vK+-O2?qbwuK~CLbaQSK;fYgOVzp{EE6x{S`rFp4qQ1Yu_iHj zbinid>qy(y@qP3~h1Zc6h8xfBVMzrKFh(Ch+WyfIO^dz3wV@ziJb>&5Q_ALEVR^NP zwGb>x;E)$+NogFemER{Uzs?{%9si4P3O8xqP8Gx!&#*KwYzkivsg0f<#!y`uv+YxREJBW%{7JHi20oBwZH*@n!6Jby zTTo7oD*ehZo1WmDgi+HaB?ezXhkJ5VB zsS&&7Wu53#3&qiuu1#m%wNH7@3*_eSGyj^^O|efk@lRVCa6?RfC9EWeVzY4-H%+CO zE#_Mbs``zGn;DWT^^2i3XZNG_J5?Eqe}cc*hCkdYKClbz%HCoEhN5a<@9!}Klk;0v z&dGS+mQQ~r2Ks9ulail>DmQg(`-)YLB|Qqc+TQ%10#V_>I8zvurV9|(I(P#$&4U^^{rhAhIF z!ktqs$b zv#L~Z=9sGbynpa>sck1*Unt`QXw9_v7-w|WD_}_rmzaGa$E|}UF>x*6XMxhx9!5ohNUK|p% z1WK+>AFi$1N3VPB=~xfcku(eR=!?PBNUQO!Tj(r6|OG|WEcP|XV#+YdPUJ?96+$~KvEw%~MF zGxeL`lafm>@98D#DU9veFF2@ooEbY$^XuG*<2J`KTkYhgGI1oXgXn!qQJhgXQqa4o zxl9ohYw(#MehmcMm~NE1(2fgL+bgDW9f%i|2K&M!E3x4nDMdLzG5&UMOJ-cT<)7S< zoSWVDk8-E|FhF%`=&WJ4d7V`xX$ctgLPR~t3mJUrIKK3=(VTH%gzx=I(Urjfl^=c@ zp#j4`R)ssg-&OWJyea2DsnkzUd*8beA2d1VhyoCQ`shrs`3s26-5Up2y3;WB%?8^u zC;_yl)oN1u4TD#Dbk~l!W7jOrut0rxhk2VK&dDPJ&^@}D82crwVWI4Rq_7Lij25kE zPypoD{!z0#^U7sgtxe?;>hcNqih*yEi9Pu3f8J+bK^#Hu&--kin*C48{8yA--G21x z!azPf62)u@#m=FG{Qg{lXyrFE!D)jF_QvBTfy6OZX}l60ndjf`1mglXR=}r z{K6b**mQ|_U}I)N!6CfslDTc7q(D`S=I=kL?|-;uW!-Z;hdcE-m&V=_%d7=KS6&<9 zGD-V1W*eWrGeG#owb{ve_D~9>!7Z<;IzuZRoFTlZ!Cf>Ks>9Vr!a4T7<1e~DE=}p} z8h8$XKiB7WZbxKlrmyUMB@cv?lh1+QVZ){Xz#(k+eG8ls`mZnZFJ@z_x9j55u}i+> z;(j08@)sHY?+y`PwA_*OJ9M~q%NaWUY3%n=tSX?Ev)#v5ZKS-5yh>kUN_u(FqSo$$ zc$oUPrND&H0=D~WR|wNj^;Lo08aTQj&e5_LgoB@fHOKc6V3Sk8&erSnRPif_f*kX$ zu7THgJVd;%-j)V^lfUh)-Im+yQ{P>P4vLp}T@BYaK|qTwNANmResNi9Ijdi#-#~1d zWL%!0hB}c4JwMtBdfd}U5A9Iv8Hm1A7;%my?8B{Bv5Aa#=}4Sg{q0>JqJf8LYj||u zK;?y@?s4xdpe{R^g}d3~Wr2R3xjTmc51!?)ME2I;tX!?Ws);F_fG(Ox@fnoC3qfDB ztuAG-P0LK`t@ky-G^bCsO2*3If6TP+aA<--(N1Mp-9*CqQGzOp(RFyU{I12O7r#~e zkoT;+*ZPUGpR$d*&5FlWVzqui=F^Q1PFy0VzK$Q3o-#bel@GbZx$;Bi#{7mIIxV~4 zZ*w561@hqL1b7a}TNc^N7+Cn)dEX4=@c0)V)1|O@N4(Pemz`kASW${r7(~t~9pxT` z`ZYTWS~de8IJ7pRS@-HiwTl>l?9|n}?*rdtPiI&j-^61cZ8Jcz2Fd+cYU#6dq&8WQ zg$giW3)xk^@6KLj9gnES6jKcLw(o#R{O|Ou?8WYj7``8SGjKahaKc6>tCRi=`XId{*z;$+jN?C!JHjxsfw znuf4%l~2T2)N4tIRSv30C0L*#mnM`%u%Q*Ab%N-DuJ!iIwumA3(VPF3ul@%Osaz9d zP53_37+wEJPs)m|T265foQG=sTAw+Ba{{rSlu;&9WEkDIbA2r<(`x}{?;4K_02Wk7 z-Ka1%}@W~c`gdzCcQ$PI{1ryZCt&BpjSgZ&zG1Sldb5pdq4N6Duu<|~$}Qh^@khmaZe*AvyiG~`rXQ}fVz6M%7};vnRFJXK z@aihzT(c4q!yI^&xR%KpS)UP(%oA7R*@&eSqz=bkiLP8VnORFV7+(EC6(p8yN7?Fa_C1_WUf{BPXa$lmXY1R#v%1F{ z1o!z&nEAX)hM;LdY+@{87(HfVOGay9`fKP(GxD_DCv*AgL zdLoG3qlZiRMo_D$s+3^;(k1n$XmWDtiJ=%0jJFClPvE$T0HygM3AULpq7pt<%NIe-ueIn(_`edM_?_5junL+6R)noqN_24 z8|TkdKWi`Fabl1DHCxgko_bSO?4MvcK}2=5M#?PMfBo~$S}Hym-JdKp(z86iE}YR2 z#mWF($m!e@(zVron?P6JVJ~;iGK$xW5{CE9)UZBU&s$w`etR7}-L- zw)3uN?2fCk)G4;-WN11K0PdX0MRTSxk_1>rlD|`Ux-{RQwYWpT9%nM2m2M*#ec-86 zw0K(cx3%g0x1UKb?j)&KT0~#pwMBlz@tU+9B!``1+LQ0D(Ij7&n&!j@nf#W5ax>C* zmSaM_d0?xuV#Y)j*i*Gxjtpm`8OAr>wyMl!~5BHk}*C;>`fJ!WS* zgM58c%F1DwUQ_b8g5EIViT^i4;T7Mpk#hRNdB=+Gbfhm^XZaw)1`9)bA=3tG70JN7gr9q@k)u9C~ocRWMlbcWFr@kk#A zzq*|6%0Tp2F;dC*9L=#qpXsj>AhcX}yGnYAT!lhothZh)cu@-6P96Q z!3d58d!5(r9b3g7q|e3XV1fcYb}#%KR3zvLsqA7&TT;I~QMe^u5@od^EAl}z)$MyFzAHdza2Ha(wM%T%dZZf7ZrTdjuMyo?!;%}?CoxC;-zA53g z{y&*XB<$EEyt5U9h=KP>VJ1B|nrncEwN)c)Mv*~8V3JQT8PbT><++w>!sL;*1F*a;} zy$U?AiA0_uE;P{Bz0Ec1q)PHPK9uX>Yyab)h&R z6gy+ZZery61QF1?qey&alY3PL%#Ytk=Ozf*=S4J`ggP)*gnTxGB=?ioTQnHSt+qVQ z(E|z9BYYspd#hIEN%d#5_k~6%68;s zJH1g3jsx-aUoqUC0`yoZ&`G$af*w=Bd;JuWU3zXyCbtJ~(?T%X;fBAF*8@HLLeb)_ zfBtAoAvxhT>Huf^<1Hv1X58sWxZuKJzg~T9jh&sS;q*DjU#6rfGi_C=$(z*t44lu< z0qPA~P4)sI{Mog=AdNf&v)|_e=|HRak$Kl8(prcG8nk-erN~k?!+SMc7Qw7i;!b zhNAmJu{)cF%7#RrH;WJN%XVz{hH!tQ$s$f}AsJd3sFu*{hGE9hr=hSRGWRE}qIM^# z`9nK0_lMzG7sQZAYR%?F!>i#Mb#;|j+TFsRLjp)eY2ebLBSD-}UeRhx@CPD<#jLg@ z`Fn0#s8hlgRTVn(WD1%)8ZivWGe>%0Ke2pA2@3imS|mGw7Z6Z$m_>7}gS0(?t|#n_ zMGgVuU*iv~N)Lq9H`Un-w|_b0Ehg2wl2LpD7SG!w^kkq(eS#1O=R4g~5E#I#!Ibh! zx)A>;EV8aYN3<+yQ+S(|?yLgyDuIl^I6m^U)`;+3;XIzi0s$ey;Fk2wq_W^-u$$e| z)6F4)=YJ2mMiGBwT6DMgtGGVJJ1nj=OeTq;{mZbmTV&{UCuMXb%Hch_tOPs_AG9a-Wl#aj}-ZRH2kGyDwym%CDQ74v;RF;YeRnbO2k?535U9E`VWvUXhV8BE1&6(V67@D_TYjyF7O+Vg@^Z5%^ojRw-z5pai2seYUCu1 z`W##wt69y-t?35kes^As!V7xynulEupl4%^d_-$G9SiHgglAb&%D0rrdh9zK$#Ao) znFOK?Ww05hf-SDuXo7T&5+4>l-@o-$i$k&FFiIT8X@oH7yxu}3-rr$kV9o!IPbRJ5 zvQeA92Cda81sqD_Pp%B;l9&zjvAFq)vuLhspf z_QY`&MyFrGcQw3q@T~tS-69@R?M*r^p}I`;kVw+$Y(0yFp?e-+8@^)v4q6^>ffse^ z35Re#lik-d+uvJvWTE80(bQf7dwoN{?>QKkddh+xPi;@$bUE9Wv**@$T*D`etrjaA zW+ZpH+?{y@tAx|s2bl>Vd{9p;Qz=q?%67~Y;m_=zw#qc}zu{a}8M9Nf`-aZY5NUWo zTO>(ZS92$cgyLz-Dpu^oMvyOd@qJbWG+O>le4(Tf)E^`)6hdt zRl9=tn$a^fGzF#cEX|&(J(*2KuwB@6isqmIN(x8|q-bZ)Eq3?fe0~rXonw4_(Lypg z?iGdO<3zti_~^4Segc|i`23zhb%v>zhuf8TtaT34Nwj08a3?7c!={p(vCLcSwMNzE zl<(vU3D!bJJbAN7m`sqf5tb6Dz9J4&|0912Kbz|;x;m-W5hw^CU#xY=4;@A*HeWj{ zj2L)Xh%~f_N%iA=@Sd6?mq|=-$$5u-WLR@kbaWv2D|u(>Xs0&2!I_{tlS&6;7dq*2 zpaAfD_zku?+f0{Mgv_W zy`24-{_7(qGzK^8Mqpm`ZR>O-C_;!Nf~ZFE#GQuv?LMWCpg=K%25YV^Z^6Upm07%8 z4S{^J#y7jsozXCpi%-{v=F%ALr2* z!2wU&ZHlfDw1b#!039Irk$oK z#w|&U_=VZC7?vZZB2dH|C7em@sG53DFQo`dpiWnG`cf5#Yrl(wF;4XWf4+-Ruv}f~ zF#!YHxM!wHn@35@5BINBVMC&{BPI@ zntpCL!n8C)@QdQEOvjCXXyE3A;wrf*a;H}O*S(B?FSCkB5-d@nFZj8Ssl$-4OKIDY zmtt2WKTAZpUV3|C;$&Eugp^i&jYm&@%)Wj3A>Oz1qa2r{}aeBuCt8YIdL}^jPWC=sHG}P3Yrt1K31GHoI~`@H2S^YGH9|h)2z_3vEC! zNaj0aHIF8@`4n!yaH3*hM@IM-=NpFld$Pb4^?T%rzc^nToM_U{@6SX-jL^!&@(rGk z8>dqAH^Jt=b*lPZCEh>VY>h5>wB<=3xyO%Yw)0{cYVCe;$FC;HN@!lmlfj6xS?;xE zrZa5DU}c;BreWSB*)AbYAq#VQ$DERLFe*pq;`_VK1*0|(6B4vF&?`6bexCmDfW^uW zywyI5EelshcJ;a<83GQt8fSP#Ob#=4uh#-2!kT(H}Z;UWLFb)~l|1KD5yJz-=QatG{~kruUgnIFE`t~ z+z;}#4s31zglVY#twl&vOV-g-jRKF(K}v-9no_5u#Vsw`+l!ofy@pZFU+u55QTq#p zK?YW$NK`|QqUD|;md>2+GK(~P-Wn1C!K}SG5JV%@E4_IQKiQ!(lOQ@MW22E3mqyqR zqX`#tSIc8|pWSr5TH?S)1zWMG=l|0$TGGMon8!`xqwE-|QVpMl59@+O68gc3q}0t_ zdgm_4ekmqq*B)*MQGVyU?OzM(tdH6i2`Rt2!LCiiaiZz1f8HrGXI7V5e}azn=?73D zXge)F^s+YX$qya%@FxY0pd+EQ+o(Y13(yPDS2&2PvQMq=`?aJuk|sUb-l|(JXn&43 zyp)!?=|_)J!ov^cXDhVj8*c z(7l4A*lkHecLpEi`tY0fiQK*F_eA;NUz_(+Fen)a@Tq z26)~fc0bRv!ZG*4(t|s9sh$3ul8K=g$Y^DOO75}=tblRb}#V5^>3%j}QB_*ulWD^#Zk4!6v+4aJmhyT(hXpOk{F>MjFQ1~azT?#_qh4@M1_ zQ8L0~;2GD}Cg4-PIPS0`xQTt7$-M9T;tIGYGotEa+mxt6oYese!Oo2tXkEA?N?(zv zJ-XBde5Bb=f<d|z(RNR^fL&v(lzIJKX``?}r$qK7%~Pct?Q z?!KCoel&Pv&71nj7rx;MKd~vl`;?9@&nus^5IGW6biB->B}$%-ejM=TgLkU?40aTR z(xd#TI2rL67p6+YHD3&j_-qiDm4NP_81kn`jlhfqvA&I}(%TEn25;nQ;De5-R4rvK zH`ed&5S8NV=k&#f@4t~?3Edk6BaUdj`rV>6$TH0lQP222H0ZHdN|M!RzfZnV%x-ND z_cghir@7puTf5TRtRSZ@T_bzj@4+W;1R^fNeJZz`N7Q2mHcNK)<|C>H2r!u>7stlS(=3H=+&^+jO3ei zLOemDE%G|E7LnMHn7F9$n|l>f9$t`E>PjRa@b6M~AoN~m2 z*s2`v!0we@A$iv+R-|9isDwzVzNwc5&o_KZ>uVF=y6Z2=Bamn7s$u)Wj#_QIm2yo} zEg``A_S7SMA$v|sZmlCAA^Q~c7)d$D!XwPh`i8%F5;vR^p?Y0A z4RQ_*wY>MJJB;Q|9n~<9ITI;~x7eE?Fv@UUdCi9 zes?Iij(&Epl%^nuXYQ~mH(EI$mKQO*buJgnDz)|aRp#>Y z=wy85IlA9tqine{=Y`emgnA`pfLYX-m-CeMat_jFZ#U-~7-LZ>TqvzOBIarX22FL7 z-1yYmd_VH@0oREK9t+Kiji2ofvt1$%nqzf{{#0r?9W&>4bf7z~`mbszo^%4^U#m9M z@cM}E#2NQM-&+HA9j|izI}h6Dy^**sG*o)jkfXsrmjTORr7|ts+g#F8;nU*j<6VW5wpIGZ$MAnDPASY`|=4?G`^|-q~dp%zB7mj zCAW`zB+as8gB4EH1?#0IA(a3jt9J4PpP@KoD`9)M=h0)R{MggwM76vlUGWAorv5G3#0XQJly};98!|MWtu%%f ztAGPlbONo9P1(MOIR9nQ`^B9@tDL-)9+}$uq$3LPg-b&+^H+O)Lva$U&&#zF?|2O9 z&96W?O$Pgnox0Opj#(PqeIs>y(W{ZDb@;DzqW=9%i3b;w_UGs9N!_WG(D<(VQT@z} z_X6|vOseX|_KO&o9kTDU`;OhZyfwtVB)mfTNy>@!?9w%}%L#(ZzcSYz+NvtfJt0S! zdepniG;k7pqkfe1JBv4tDlXh%mY%}fU)xOG9(l>!IsZxelW*&n9rqoHI&W(JaTbtq z@^$h9dRsmSk~LL%Z`#rN*5-R^4m+KxVoPq^olSX7wwo+Ol&2ha~;g=yU32x?e=gO zS!wg4&KO^7%55})Yqq01nm39+qT^MKWU7Rb;pdC_2k5c;`u@Rjx(z?oNTcVH_Fe4KRoCjwfVtvHXj{Cm8L`{a*J}y zpS5<-k9D~yZM!8dVrdZX3S`9V$mo7~@|CU5m&Gh$XH=@jl$Jy5Emdwwp6hu-m`Ikf z+IwCWGLK%dX`06z>PK6T;uvkbLZ2iSxl}OmL&N$&y8K7nXmVPe2z?f{SoZzhE%=2P z^t|K5zW7xfP0>AEvV(A8+GMJsF#{sJap=6329keHNAxo5%d#SGNns)fqN&7cMYw7} z%g+6wnNIUGxV z4f69l3_1K8e8mFjzKxDmbDHZ%-@Dh@>O9`xf82B*<>kTPO&dkmex@E6*cIW3`g*fx zZAdy4dJ+-1peeNT&bIS+ zKPS@nx=Bd2|2ndJ<4@V-wUsmO+k=waPcK;QU6WYem9}eR#=WbV)7%JC^weRfYJ_4s z*P$Ud`RlKZmb;Hg-KnI_-x>((_I?csNQt!i4o12B-p6WId?6@NK#K8(YzTFdCy)^b zK2)9q+nH8%?YeT;@JSXw{EL?V-JhOcT@6vgrj^;pR85h@`=vS<4cGgXtDRHKTZ_p= zLD~_IwQ>E~1Fz3cc2{TKWOD7lVVK9xB^euMq??x9xOS)&B3O}+erI6wvQ19CVUdKB za~B%vAI{*ocXa5xLk>yD4k&R!2R>+q-?}NQJ(XEw+A2sp_MK^Xtv6o6r96W*XIUlt z#(JW$yQUA1l8Gg&!O}$LGnfpD>D4@DYg)sbV~$M2O#@*;y>^yjIelTauWQutsNJm) z;z_f%vO~Kzlk)`aKW;pH_hqi}XEMd4_mi1<1dxywuDffb;5sqdk4>~xq7XKL2EUvp zf|&=|z8)-bWLD|{bx{Mfaf>-J>-d>4+hj+fvJSIYPWIW#^^k3;SsL4vg5qbtq*jo38E)%^71Wn4B^^AImvPf~HI`n1C2%ZM9RCsGHM;zqF_>y3eA=JlF?XDTy;<5{ z$?{$<)jPy_t8)OcMD&H{APaT>;M|*nwL?MVE$LgvowYokd>GF;8<`rMQp{>22F34i zO#2mrzsi^6n;3tT4{EvC*V7mS4gB^iox9?i3&k?CxGmu+hiHj#*?}LCRprEh+k&nH z?}SL%*_A8zp4S@3)*fwh-e8PKT6Q?I;okXY8^bPtlWE#yqULO4xpMM))$GsL;tyhH zH_dOo9t!f9?eVf?F5fZYywy&af9Cp8S5*sn4`s3NM#ww9d!Zp_SB*;Qg`+2sI(ese z)ptH%(!AXwJaHwbW`^IPOt>MEZ%$ zvCc8Ih#uY9jDRm@#YV}pomTyuANHCG$C@7{XMr{9Yq5!P>8MYN2h)sUlVe_?4d9M} z(iXz0z^~z%vA?bvUKJF)+HA)B_2tDj=jg*`D_%%! z4R@|_7v>)gj>gm^3?Fmv^t8NsHuXejoGKwXd6rEWhFZkgiKOol`o zW~GL8HVW8gCG933B+NbyZrz=|)P&s>T0gKYujeT-b1;2hDH+GD1>^%h3IlD?j4!RNdI)v+105emsHQvDPm^|PEDwr`>W4>CVil=u1o2{85f?d~>oJ)q+7%jeLu2<*ukx1? z4c+ad2}qc8j*l1An!t$Rl{zEG7XDd-(h@6qDbdH5w{j*Q3LJ@?*oTLIRWp{fCWP7A ztpXU4vNmz6E+G?sPkc10Ole>15%!+7J$-7Mu1Xtz$yEd`PgFLUR~|wSz62f36!&r2 z_x%g8J)_06PdV_88%H(LHjP_QY=#4ykg`9I?#)VCNgx(;SL)LZzPl6{NIG~vnVTr` zxm0~UF9Z6l?rp`0`bysQx8}B|Z9Im&Ha?ht$Ly7{R}xDOxPx9%j||$2*T&2q$i%~Y zX11ZaW(tlRjh;K9V58X!)%wfdFGgQqjAy79W}9$JHt}lS<~`LBM@@I<_|@A*+nXxY z%^y&}rG3}4?oIm9o!4a&$UAzU@0r_V$Jw5h0cu3tqR{SX&y_BE*7IJ~2kVPvefmL? zE!c03Z+w^WzQ>{a?&-{dN4B>lcpkZHS-B02+9Qr@3y?Hp)|KB#8rRa;XX5VEmlI;7JsDuzhma&9FWX&=N zWoNQAb|F~?W68d+V_(WLqO$K|FpM$A{pojI-|IT=<99vx-E%z8za9R_+iN*r=Xt(f zA9<+=+68WRD3+uk2HrwnRye5Zt$=j0^)#NZNDJ`{;-$?F$R*e9r66?JL) zI2NM0Xhb;>g0Q$+$DYk3s4t8 zw>a?XWTPQ8|kxa~pL9BQHDcONQLL!8^U}^rwGW^iKAtD>EDw(x{xh@A>QVO@CS3 zI~@YgF~h1ojMgVn(c|ON_T-(~+*0A}rBq|c>+P&9z2Gn6Ip#7|qTE*gzJw;N$CbKC za)Q^2Enk9kUT|4={Kb1JONPk2YhydZ8KsS9r7uri~i}R?)m_Ts1KcgrvzDU-` z;|K3jKb4$9Marm%>ZHS=8$N56rat=`FiPPm9km-22ISjx^l@NK)r;5X$sN+X1NZJz zgeUgUyTpBR<&D1Yjehr}*#{X>_YJJ}MZW`&^*~K-ViIP{la<&*4Qg=59Fct!V{@(3 zkT&+}WAVmD4_oK&lgW?T-^DylU8yWBZ))Q=7mUfAagUliNVUEoeots+_q?d5jaGrB znFY#RKbPsZ`9R5h?b=PS1s+XpOLJ@)R7yavm^cE)qMv5%ZZDL5UyX&xTsI&KT*4az zJ`djs6W*QD_$dmAOSLSff%pMfY39tVDv5G6j}ufjGzhB!!A~A+U|D)zxd$(mWH)tu9TQavbv+ReGmeLn}H&)Rco z0FwkQ@~_#KID};f`qto|p9s>I$>f6rqiuHE+z|<9y~XFSsC6Dr`!I}qpm6TS{2{9s7jq4-1h1%i++Nc1t^C4lP8h1E18q3g#bGt5);kjO2 zy<9+5TI*S@^EgsQ_Ty3cb7#fr1C$O{fec$XpU z8n`=YFkf0a@wZVDuT+&Q<>yLe&{JWb-Yg?MySP=y^Fb4j)yZ_ssegG(1cJF*Pi;)a z{$-X20nIA!dhfVi)ZgTONxtett!(|Eafqq;>Wo|`EQ#`vln+9~qL)r{D|Km%H$w{Zb_%%&;KqNr^o;J&Cf;adj{) zXgMn_2=h(M-syZ}2dud@VA-6Dt9ik1S9_N{{LvK>YEKsON|{5qc-7OUxx zW}tLb>2#SE{A|0E1_4GUP_-X5Zgp~$XUFX=;q((M%LkGKV-b6Mzj8exv2tgh*XAL3T}+gF?+s zthKD9W&V2SMiji%Rt;YgK#)+uOmEA3c9)fXKMos!zPoPFdjphIqev4gx+J=y)^8OY zgw6exYNLa)?5ojEo2tPJ!vn+)549?Tk|=%c0d!KdrzlUfKj4;fJ=$;;(=`8Q zY94QQO%n)kR#PO5y@Vd&>>`Rky8I*xJZov)T1W-&eG9&kFcge(GCgw`mLjwJDUIss zmnx`f*Hfs@Ev;94QtMdr`Xy7+tj=G4q3mBG!QeH2{LvnxF3XLWbTxBUD)&vZ5R;`P z9Vf<4Q)Q^(Z_NgM{xO%u&*?Y&x+q&2`;T>yifgy5#6B)-e493fK@-ogID-6rqHF z1pK}4iK>gT5#IwoRWsRpG8w`clW|TPU89PvlV{SN*+DF~P$6TlowbXpV(M5ZLZ-{w zPV(jV&R&`DtlWKkq_n@cynI3IDqZVVJ2!)#%zJ_y8QA zWb9YaPk~o1%f#(qx|3n|-jZ08?;7OGl#x6bg8X6aMT=F@^WA8h>uHBLd#M-S1U%5T zW3H*>bvO5<+!2Wq{`_WvdvlACJ)%YJyuKrjECkF!L-2z`m-}Zu=;a^udm*bD1Zmc( z)>qq0mOz<^mESkXjg#Xh^Ki2w{8HkH%2n;p71aCU1m*Nu8?rYda=YdP>R953&Jck= zv?_(NT4eq}1dUUd)VRbjV}5~OOZ$95Qtmr^;?8pZ^Hm*xxCWrZW8Gs^jXZs|u~x*{r>V>eD^=50yts4giuC}#A!mNQNZV!d;}I_Z8ZCbGP20L9tQj{lq8IVU8eGy zRaJQQ@&ecYCeLGkh46awt6Zl3ZDV3tD?h^*lkDOY^1>~xDa-JBeEOMckXP@8M)d=} zutxzWH0zazwm&(b8+fx=vy#d#8zI)fTzQ z-iGJVh+`4KUmv=Ja#@muQ4x=^^8W~?FwNu9jB~NuW|x^>jPsPs7-^n<<2+Tb{-&@s zBD^E&=jh(JMw9HdmrD;L+Po+WF0(&3xgX18r9mDJeCIZovhJo4L+26Gt)=(#=M!d1 zdv(z2nHoDdRAmKFO6vu!x+7bfxr40%PS{&>hK&m7B1{$nVS4gXsstkVaZj2|2q6Sh z#Y3#3?03kuTI!z(0XS_}_=BI!^f#teIo0qx;ALxK+_QVRtRV!YWhbe8!Jvj%&I7N2%kkdFeKb!LhTh-)&X{>{2LoKk+{M@>y#UL(cUp(PaX+-7Fb8 z-CXE8O`Rk#&(co2YSVKCe#Np%-zkxyLwM zDc)0`NER2Y(jr>e<3rsdEKoHa7poRVuCtbw~g zm8_nXBJM^OC4dH>blewK1C2bX>0puHnW`sLl1NA^PQSjRYDj8&?c@S{tbdO**=tvRt2wsPHG zObM+T8)!!DTj{LLi8Cfc#n3{PBsom`vnj)$V@@us^OuvbxKub27fiB(@F(%tbl>+D z%#6l1s;wUudKK10+i>~ItTf#{S^L^%c1?AO`ISuXc_`|g{ViI^87%k`*ha4W8mV5qt4jvT*G`@)g@;bgZxI9P33g@Gkx zP29sETSS(4cQ4`9>e&(Qk)_JnG;Y9QriaW6u5+;%*pnyRB4q6|4_GGOZ97`BL2!5^ zX%2c^^MX%xKcWCZI~pH*!3nm4n$N2Q-47NyiSD!q#n~I272%qlc1+LPMw>BR4f|Wq z@z+K-ekK399_CT{LNI(J`_PX#L&jnXg9VMaKv+TodlC((9_ZY+VcKBeH*4OT>%@e~ zg(&JPiTI;4-}mrHT(}W-PHOCYu;xF7BjV07u)YGHTUTP zLkQt}PNU`7J;F}2TC|QSGP=-eo1goQO>%WrCrO#zE4jrE|;+N!%Y1PvD-d( zJ&VbyWedkTW{jCuW>O=}&n&g!_d=s>qND#1@v(+VLNVLf-_HN#+*wDc(eJ!@ct@H- zt1@YwKbYzvO=6MfRr-8}&Ce)WTW#>#-(V+`l~SSdQ+ffS-X`*imT6gRR$&2iL8I#V zvN*@7nZTDSiE}eJb`^Y_kN>hL(C%rfg1uX=&+?aVp@>@Kc&E=|h7%~x;4pNE^Qbg7 zpM#o9m3nG%iQkf13-4()E$n0tk-_MsWY$VlN+>I8wMyG-4&t8_fP+_oQD_qE5{z4p zb-c%^;BV9xBl%T`uOuMj8f>f-lJLa1SM}PIas4xj2xEsq zY(%XGO5p2KCKV7O2p_iFdK4>_t@vIg19m1I9x2tc?OcPeg8}}vyoMT&5Y{y5r6Y7` zfEyq29Id}Go%<+4N0p2^$)v8{zdNE~w?cTyWu`n{w8kf0aojQj^u5SEPR-%bLuDv( zL+z!y>sq39>Qndo#RzMNxsTYLw_IM?+VJz^`$^v-e72XXnw?Pdh?%}p^ZBG~@oYWv zxrPAi8#t_*+u_#+KTj59&~N3D!LNcU$|76i2fw5N1IPPDCF6(W;^VIIl<(Uu&f1r< z{0=dUTRhI0_T8naRTUTGtcveorG#6S2WB_86{Y(AemdJCCF`2OtVTqGmvdC=={k8I z9hY1G9NgPzLZe^VToznPAHQ} zb%3@d28-=l!z>%V5NKXA~aD0QBM8JjI zGLf*Jzn8Y&%klHHDNVU0_{8l89Rge)-4-6%%S)8flvQDS6?74cSysDQvU^w*Z9^l{ z@+XG2ICZ4v!gzO%c`J9dG)KD#&%DP)ikgpzLpJ4c(!<*~DfS+HVRSt*aUCe9SIGB& z54%S@;(JUTBu?!gPB^eH=LDRt_y@UL5o*V`tyMQt8AGCvCWZB}Rq)2jZ7L_MSYQou z3*K69YT+?##eZi!H9wq`QoUw<+n7XfiBa}VD_Q~fUY+!voj)f>aP@k1Vs7n0wNOQw zL75xVG@9+GLqNeh)B*uhJGw*|tWx=4f)O1qT%tJOc#odFL&zqh*QQT4Ueb75!E+~AJfT;{cR#9eqdB8|4h^7 zt>Az&K5i4!9&3uK)y0~R?{ADRrL=R=xkD#9(x8u$I`OOGteXOcwiWLXISr|;ra>AN z4^(KvIANr^*X7*jnZ9yovHWcHu(CXl9Ch%I3;6LGeO^drM+m)tdlUY&@_ON;CQ>Pm z68vx@KXO9g+;msNI{f3boUGe7Ixn7pJ8M5HCEgRP+xf3=DsQ^-vu58Ueh;);-V(Ok zxvCcMO`Fg4e#Ap%Dede2h_Or7i!;F!#shtAIGqXie%!IJv)~t?7p0g++dSWEwopEa zlj}ny%qv~-FxHj50o!~9;Q>Ruyj%l*SuFiDP`V!RxUR$l)5ucC8>ZrUe$g`=q#w%& z;N(IF3tRE1PLkVE_$*<$We++!|c`UyQBrk3cfIhrQ;vlLO?UZ=%LUWW zDZEu82*pW%fu9bE3-?{kJxv)o#ZS~6Vhg6!m`-)N+#>r1LP8uleQbt)k`U=FR6-sQ z@F*74&9Cq&qE(5*E&8&AaN+->rSl(4%aJxYQKj8|8L)zjwrC&B0fS4V(KMjdjb4}b z+-H~f6JPoqb;55=Bim+mcMR?{OuYk@`s8kX>RG3qh)#+%!?^DoXIq*otc=xnLJ`{5 zj)ccN917#cxojM5lTJ7JK+W3bJZiHTaPV{~q;DWW&nbncmj1YO%sd6+zrV?lX9kY; z^r8fP?0z5MTmuL3aB*{l#dDIDST4tkv?(xiC`3D$x=J8qq^kx6AOt$cRo79&<5Is7 zlb7d_&P%X`0%<8Y)`V8=s_)0LF&Zj1*Mmfzbp+qKWXBI%1^dYlej~-#!*^>SM+3qZ zQ*@;&wg~6^fB=)avi@b zLIwmnFm#rxI*+)DTKv>(h-urb3D$fV^fcHKI)`sKIvy1)DcML{zS6V7*=&%*N_H^d z%wIBf&t@~Vd@={r$Nsm~O$G)u&>HNBlPJ4R_Zd`|g(CdpCt_N27-gSvCo}O_Ps*>W zO6tIzM`Y+lZ3Lz4%cGjoqSrK>=R4&)a|m=x@Lh(9ADK_9ZL8*}+FDu{4Yu6@`_|u& zU-i!{#iuh-Jp3l0O+C*fo@+@51JuS?=e=Rw+%~DFM?GliT;&Gefvhy?5P#Pj)-(U()8qjjN&u$xV$viFS*o{QNDI8WdY^QbQ34-Y#2$^!#< zq!Z46dCD}`gG)0q={FxTn0fsg{aL@4zjnp@#U~_jrH=wT%|2%5Nt@8QRl?0F*DdpfmmxI5YnNz)bKdrE|- zqrW2%aB`$4#F>B=NLvk1GkBlc4^qtPv3-rsz#f^8L@#|SUy>$<`*ax*Q z8=cYO4%~^ggQ*C+y>;K?4}CG!b}jpLM?zbO(juk)pE-8jG(ME?ttuL|NVg%yb0}rS z14Ai=5@^dc`d*_*v7w#p**Lkzvg2wgd#5N@K@P>~!aHYnF5(Gh*emCx)o-^-t^{}j zE?8sLFEu(3TAlM*U`3y69E;mVC3&{Q^nKE6-#f{Z{a-{JI=H6xB-%Lki^ISF;S{v-z;}ATLs$8@ zumeRdFU;C2_{o*qo*B+J*=f$V*jXu8vNtqagXR#BmW@ghk711<`@QJqo&^mud-dZP zr%TAV;VW`(QP}NiROu7|YZZo;-&4r-=^4xRq|A1pvA4Z*fpfy?=XO1|=k{=nfc^M* z=hg48H-5H<{CJpY|Fti^DtNcatUkc%M()|u8=2Ko?}^Vf%K|=cpKXirvldrac)Q$xq` ze^(9lQP!Fxdan>p_z;jemKUiaouKmTZmPRe5JXPm=S#2k7joHYERF#Q*RWLNuP*;h zsmx67Nv0?-7lo6mwTgH8I*jV%A;$YDqpwBAX9y>V*S%~Qav&JF6^krj#fDm^tyD9tI%#rUQMBtvWlU`5cl!n`JuKFIc?s0jc{vPJ z&^Z-^o{TwvsHV;c#W1EDVm)>cfPMS$B+w%&@mba>RPc`_aH^b%w z*A*ly)C973tMIsz^9(qb$0z!DP$T>dm8SsWoR!83MRXZ(`(N;KG2?K4$Al$}Gv;n&JHh*KLBMd#;rww%@(QhLZS{uN2;hd_nNjyiiQmQum zf%;i#%sc+=mCtv~cS{ZO%=hXQLnOI($t0)-frV^BX-)c6Dl1GQafx<+$=u{=ogXRP{z~mamiYtyg;MYkP&W0qlvNYSnIC1`cTF zl|0D_q##wrN?)V3>>N#G z1k;$dv_r3tXf*J_> zYd!@JsQn#T9;btP6jYur7{kXC;GAz?=~%pODSI@MX0v?D zw+6NV+vps>i{rmpzgPc3SlN*KvXUHD zz@=6uz2i-JGa;uK97qIph_k zLw0eOz&uSYFF{w5w%E#>fk~y|rnY49c)rjbbr#m{84F~7>v18>84>KVBE3{1nYk5R zR1nm32QPRTCZ^ZdSns+L!}F4jT#N}l#CETAvJdVS2Hpv}&N!lEb|xTMgQO7JwiOsm{fp?DpaDwOismtu=i*=PT77 z`crUy?5yr%NMnY5adf$|u{nTxanUxswzCqygF>RA>z|D2(8@@#-=J0kk^F2|0tJHq zq^ZZLJMsQ2HQG!RddB!v=CAFh^O;ABMCgUljK=1?e`{^YiFwfz-AOT#V~$y2f?Ub1 zR^3ht`N&H6Y^t}}LzW-0wHW>kGP;qf8?ePc%%7g>@6g>I=U|1eGJRpEs3$US!cW&f zMsf)l1Sa@u9oP8zVy0+b>+_}%pUeVP8!0ax)O*PjTqtZ zc$qfby$3nes?_8>7)PdVZlypiY$}J9IfTID%sY(BhbM6Eq$@tX0RAg=iZ}PUfpEEb8whr7$Na^)?iayi8tQ~CZgtHd0m1#j8>CamTKWL3yedxcadlxJ|Ft%yD1O_ ztsh<55AWl}wh``2=J3{K)T7+8A$+M-pv;OP3i5*AjQ{DZ(C_pRN@LdtOllwY^E2sg zC4S0$?VB#4(Q)Dq@7VhIXR#ssJ2n_=7IruhUU!l|^_YjEj4Bq}cyY0e-P}Ah$JNW4 zpyMdN+qnF2gYX4`(TC~pz(33jI`$IfGD4S z7rWY4>lF%zjqw}M{_hWmw?yGIeEKT3@R0PP z#s(6`0oJ?;>s~&)r&tGz9NBiGP2+||hWx6pJ_xm}hO;!Q-!SSNQ zUII`;^-xmY5nPe4_kMCkwu*C*`~f`wAWg?A=jJ-^Kc^?`RH5UgP9BaVh2L$t=GY+h zuB0b*z@gUdM|TkY<^#-5v~bZhj<3gML4Zi@vNRNVuL_kApJvn_pMqUQ5TlLHZ*!|@ z`47osU<*6%BIOBms~>#Lc~k;VlVBmmb9M+GP;>fL`zBoPX zN>RFU^9uT;zW~-AKqOq=xv9PIociepu8Ska_D-zpTN+hryyr??6$)&bz9zq0a$jQV zamAW7uxEfEO1Bs$%Y>=P^r#tS1$-$}+|t1g)s*O*I``@16Tf}a{h62El`T4`bGVwp z&Z(~$+HLIurSqni+8e*BtUhy@u2PVX3KH$S`FAR|usgCAnl3ZR5@?4h__Vc28vWU1 z?S8#Bw=JLAL5ZsWkYZ1s{mbCqO35)@P!46?*qf`2!BVe&&09YCN6z@a9J2V|e@y+1 z?jGpDb&9*l2+LISh0h&^p*8t3fmi35kEy2_JRH!6V)roCX#?G_Lj)v1HI%kr3QIdT zfr)F%&eUK66h1OD&N!fmHo{(m+ zPUGmqi+NnBfrX66TnBjq?f4M~D#M$0W&(qn`m18w1;V+Ww`oVEL_@BIxB(r*R_YH( zkpKMwUeiC5BlY1&4@q~Hac*yEo-S0}>OqD!8y$rAl!rn zR2diU{?aJJYX1Fc#fK#`8a|g!H*DVJ(!D0XMM$p_SXs)iWM^A1jjpsD*l1uOwYl2@dtr<}_1)gD67#zgZ1;m9{;-+KhSR4{0k z?4#JrRLq0F{3!(X7gCxLpkt+lajyC3q5m!jyLZ)*jmo&n?zzk^k3ValK9q4>N9ZMP^g*cDuqN+9~%@0f?Q&`QxZ z;7rQ*_m1cQMl8~jvi={1-~$;zYfO{ubNR%Ya--hW3^KuqF~-z%N0?$wuQR z&VOqlr!?lGi{Majq{NuD`2VDayd5W^t|B_vtjI3l5gBXrm%< zxpzt!a0=9>8e?Y#N=JYt;VqMOaC@m_$Z3^(eTv>^xoCF#Pv#>l$?-B@T)!@o^ZRN^ ztJ^1A$y!}Hj@o)>&~d5Q4x{nZUhm;mMVHlyGQ1^qHVuc1H^YHguH(UCIE@ApUtT^X zDNB>BBd5t$uZ!PZ77i2qOXVIA1{y5g<^P1iGhrYMY8mAt+5RL9*h3ZRcRnlk9C0es zQ~!v=-EMTroywL4vIr|(3o>T>Xd4w``a>=SLwvjz6QnnbGz zY*_?+k%q5719mIuW8Xd5x+{H}c>APse$R#9?5!^B)Rx~2*2v`6^PeC}y%}hxW#7jY z#{U3SZS+!3M%y5V1%~@c=&9TO((Ea-G|l2rvDN)3afFNZ>b71HKUx}JfQh(2Pv(YT zyvO-UB{>4+WpIg_MxJhuc`~=ek#>(En4LvjKTQ5j>ol%7fv~T^G}aVH?_NC1qqgdx z2aWvra5_(mt<3VyW%TQc@Qn|of3r|FzwzTT`|uajD!tT$0K0*5!XQb>0~Rje4_`L) z;|an5G-b?nTGF;9B`}Dn?YG9+3(z9{p1zM)M5kvSit3-5z|F1#tD=;?sSp~`d%gr$ zesn_nm0$l{f>PJ{{R{<^ia-A38R99Kv?|kQFJd_N9eOaKheiw?l~s`^{J&!TBzkx^ z%o$_#f(0dor)b>bq2u%vkO;OA&wHpRt*g~fqzj57wo*ONCUCar$3<<>%FeHbL9Px# zSnby7gTkgS2$o~Tc0ct}12^r+x1?OxxbBT48n}>rWZ$@)<~@u{j0~k!_pEvOk}z?9 zCEU8sv(JDf6j+0aGj7dr&<$Fhcza`;5!O$^p_px`FrG|k@X(zeCT#itXi`* z09Nh(S_fh140Z-O=!9mERwcJ5-+aV>0;W(9FMz2iI=qVi06~qr(6cHzKAiXb>Z45W zYMNl8pmikXubxF~oq&_rw`8RZxGMGX>GX`#(Z-5F%fT}mVQodipo}Udel2(qj}wIq zsPVs-Cl7(5jTtANsBRQX<|Gh+21>XdBPbV~1yOix(Dp64$a49o8=s+0;c#A`{5=;6 zcy^;DRhdzdpTvW!OcX+DZBN##84f-OMEFI#mUQ{6C&~4F#m#%*oe~7V{9y+)lzqvY zw+@dar&yS)lNsA@=hPm+RcfZqJG78OK&A}<$=SeHaE&sBe)E)G%r?IMOqO` zw`sopcfMvCnfxDh1 z_?;pA5|1csYkADPUpFq|xOx#r69SlC0K*IyM<7;=XjuA9Qf!<^Z20oDjJhM=o<_ZFh+wHqGHVG5*eYeNIe1TeQomY+M^8z%K7y#& ziJ#ezsgDZ`Z$-+#QQ78GAUOAv=Lttg+o)_hH?aIOUhQgjXjL9Bu8I8f5B~>5_2HGk zqY#;u68{(-ud)F{hJuBzd*gCm7FvTzv;=0Y7OvUFz7GPqeo~FD@7h12gmP$n?XGX> zX0aa)jx{MDJ)<)(ao20Mt6f>RZkOS& zSC3OPBR?!2yj)qoq}Tv58%4`Ufij08MAV3ss&Q*n{A#XE4P}B)5G+$D>tl(KO_`xw z<+y{c+oh?Q5#FE-F+)j*G2ET)Dwkqa1-5X{o!@I5UyuKje6MJoFCPbtqoHfhkhYKh1ib-8^Aases~GCW|mHtLq%Yv!QEJzs*JcGL*8xSY*41g$t_)3t>#yzkCc@5U;G(G zQJ`2-x-<|k8PIzRp(-uw{0^o(%)ZmBHn?i)zrm8k5fl@mb))NHuokwYJa`|a56aFB zaL7eJhO~-N)a+!K2L5U(sa}6 zx1sz0sj&c;g^r(b+nIp;#HevMhF_ZT%2zQ9U*RB2)PE{EyMpB8e4V`JPUYrwFhtof0lzzM5J3;4@fx@C%QMDy7RCLirTx6MncfI)`&bu;OUo z#hDh(XUQgJ6K?C%$t?CMZitm@|6@zD(~XydI=-PIxwmP3H&=CUgz;>D8GRySMrAe~ z<+@=KX$|;Z9IU+yxjCw$rdOWEFT`d`=YfN!qoAo|Ty2wZpjb)Yp#YL+UaL|oKQam^ zAuE43(EL*|xYU6X0(!kZp3O{ho*lSv8@cz{>8LYK{S|M=UQ!6GiR}5zEz(vpk`SSz zgzXiHe=oKndX!8CkA&F=l>EaPMJ$yG0nSe@~<>Qn}GJ3VKak z?Lbsck(@g|KzwG!2C~K*5oFH8r65>lVxUkd3floh&y4|ub)|7GXUu>@YG$i<=@_>t zw$!l3b=^R4ezcPL7w0_+)Q9erj`smF)SdS~*yudCwW)W$sKZ4fqz(-K5@}GMyefe$ zL>*!^S>FdOPK)`10QpoQ4Ay|rq9@x|48HeoD zw?WW)b>7Tu4{aAX|FB92xJEVroNKW+&9SV53<`bAbbVXun~EAuM&yLXab3x*xqlboc6$Cb^$ZG(4p+%i zSYC^ezY}mf?HIjKb*tOmR@-cuOjt(>CpCzkH z%v6p{z#Ge*A!$3!B1Hf_t!RuJ@~BM%`kNjT3NNoYI7imgF{Ws7B{Z2HB zXQ0{5eLJT99X9h-KS<}{f~Nzua_t&41U zEYqNZ-gkNr^eUuGjh0j?U+$V;?>(4WEnR@2J8po&qWKLu*EN}Y5;A78MeJyD_DJ<{ zTPM11y2a?0!i|Ly#Z$Q%VY$;3oj^jy_E1C)w5O!rQueiWk!p$#w#tyIdCS?oZayO4tS!+#{%OR4`VMWMccf5uEH)C;X2 z|DQ?LHmqvNBJexOuAn!8B-8qxWc&Gz4*x@vC8%qV2i}1-iBY_{DK9SglVbEQ@*Cti zx&v=DA|=UGX@YxViv;v(6qi1NK}&Sb9~c#=RRDiV`*3GQC>`qcE91V^ItEusUfcutcT+KFG<;or zw`{;5WYFZBvDIw)>d^4%fPykW{Tu@M6_xX!`6UYO3Hm3$(80g8yWnBYszZSf?OwnN z&?&Ok0PRDGJ1O3-^l=mzx1ir&|J%LQ^Vi(J4cL{3{J*8k9AW64NWkw=e>oHp78NOw z^u9qsaFZ$n2+D^y4mg)4fMc5N zZ)IAp$x8&hV^q|Vo@aK&b&&mS#z?_)#kSlM7c1P&-ip)Qz!bLGd7AHH61lUt3XI5$T=`xk_}<7}FV0fFxr$6GyM;5G6sA@{+2!nk&n=f(%l zM|#pcQ-mCqrVsUHn4L;5iyH> zhAPA3UP@QO>B3>7FavWQrNG3oeG|9dK@h#GJ7XuqTkh-sQL8mrdjE@;L+k&JCH;;a zA~^J4*|vjR@;rNI_2xAIkNzcxx3ZFiNE|K2u226vJW>+u2F+fNWL7^A$eV8R zBfT%(XeNN;{f5vtHzux_xH;0-MmZok8_V!hG+{Zl5)6T-M!5v^AZKar)}TblF~dFU z(ohi35}o6emVw*Uqt?eJcs>P#+w|1(0SOx+9ov@tX1N=3FCS4q+jR?wDRBQ*DKY(` zf39TjHLLQwIgt>LX=FT>qp{rRdx#D74y1Wx8fnGxzu0=qsJ7c?d$ZpR8$4=+zv`!_^!+ z9<>ZRB8emwQ+wL7xU&pgM+$M<^%%5ctci15Tn~`x-A}jkYq9ArU&Gszsk&?-fvD42 zM!j|A@s8Hv4)*&;FHrK~@sz(xmwZ_31OP2K7TED$@Kda}>`m%iww8O`KlmrqD_G~C zN7A~7Gn4_D*a2Cm&DBI7cJu!mN&X-C^5T`pm@|Itq~U!U$KUfTi4|&X8WInHb%Q$sQOLc6pJ>R^2n{5(?DjAx8@FdS% zm+=c@qHN)M&E*&pF17C<86-jY%~qS?>}}NhAHN#@Gj*0ni+>}1Z!c<&IG?u+FuG}( z9GAoU9dnTJ_jL7>cULH-#(F=2Jv8|MwJ?EtO_SL6>ichNe^n{`r(Y!Z^)Y_Yo7_m& zXn)zq^BWE=o}<+23%ns7=k zix_hki#$|16`1HFuUfycPs+DxEjvDcU*tKa2o;UOH$OVwRq_)5zSzpgcVYS&?8sHf zw8;s6D1X6^RmmrGF&)a~Y5P!1{d!N!_vCz(x}9h&!cqG8aHJxXvHZoxD+g>r3@S86 zK)}YEz=P#hti4%ip4LIjT*9kZrx1(|3D<0_q}>Z#0yfJ%b3Plwpa>GrcRK0?Xk#?T z3@!5MCybAQvxa1`ql~V_c6uM^bM}@{A9UXuga3ghx+8Wa0?v{K$bTUYgXce-3lBjK zVri4JH>Z=MDI-+2Z!4F#wua~_pSn|RH9R^=(45w~d4+a$;sk7naw5|mT$~;M{dO;( zhWbl)(XRdbWn-u?q!iGIp2y%aF+A5YZ>KmVgj0hc`sVaS!9Jv?nmQ3jJ&@Z0Puj-d zdt{aN?liyV_$*UYjiD%Ye?evwZ)u&1qbUrs8zrsAhR~*2P$&l3;M~~&E;Y!s+o)%z zwZs=JM9{!s>T?JaYC(mM-#vw?ZZJD{( z#~B#|U)%t;C5`ZsY;od#63MASl^ZkGC$eKE68Dx>v%ICT!nZXQKZUmhG*xy~sAU-s zgzTWRZTpTqg;1&XeWmH)B5_^A>GStIGS!@oHVVHo;|cx!?bd|obk@ckWU3`)^cMf? z0es>>lSNI5Zw6Aj*(l1S9@oxgWt^o|7JkKHqZh+lY}{g?pDiZ;`?pM9Chyxtm=xMq zB9MV2$-*?3@y~}oQ1)X)&!jRHL3x}=flSMua3gB4X1|}$cPH&lWuL)#Y^@8O^Y#`Z zy3sf{cB)tvKLetn?&djKsV-`H&!_2kCvnLQlc6sIPAk0DZaFI2Fov1&VJbCkfL(?J zY+{%vZNiyj4K>>T@5reBdD)fwitP6MMb_Y2C>Hh5)E<6=uWHa+Gr6yu3RTz7fFW{ru=_AsY?i>;ezr)A$Ocj?-i` z-omp}mtr{7asFgeF|#j5k@{{2v|VK2))(S>X}vU6Lo)}1P;)jSp$vXKZ-Pnsf9H_L zx;AJQQSU+K;u%yu!~JJNrE?|?rCv3kC4}-Xq+aS+a8g2n`dy{51$~Dg(FH4-2o>F3 z1)BKZ(8Fz=ts+NWiM`9Y)L2Sc#(N8E7`%)&ACJH$iawB>;ZxWSrom2_k#`Mv0?p=< z{gu=2uSa@3$68)d-{3n#-g9xgnK%TE=HDIswto zgtGkrfA*@$nn=1|zKG%o`#0_d2?^dlr_+)15^fq&Yk4GiYCqS3qY zsMR~Wrm?^{{xvo}{*@LMD{v@KLI1qP@6}kbS(|_gtXjK6TD=?Xt3eF5dB90k$u8>H z!;BcWud%ldhcmC$FH<5<{O*;H39C|$MdilNs2__RG41X;Bh^;V_fvQYIin0I{?9Oo zfEk9%a|n$o9$yuQa=U$)v9^{@uAP$S7&?HQraJ~M-o2$ zghMHV8U{kgTYh1V@;=?TWG}rwHE9Z$?-iC6o-tF*isYZKsQ^2g^--yQhQ1n%a=mrZ z07G-CzZhKbhWMDt>t1SX_Uc5y#CPYD@PTpJ(z!9f%^8GGL!55TDvJ7)4&g*F_>(OLTkGc)YU0kn2aEjy zv~vL2tu^xrhxU17@CLhGhKApS2VS6M*J4@A;Px(S^-;H`Lf;E=nB2Se$kEL1w2WOA4I$hp92SXNv zHIf1^E%$>d21`hhvAYx6Oy%G6p|N61IIQ{eok=Kocqf&ZchD zpkl_byv+0`1G^wBcfF2hv=j93vELB@Tf8-wLA*h{LiV!XdO&E9&|eM zpBhxFzzn5Y*u5+IA|tHq@zu7o;zxOc+r`eh1m$d{^6x*~f74WDawR1c=%eSJ__Tn0e!*s6Ngb_JJlLC$T=bc<$h95EpBSNl`v!8*&+85{o) z*HSvyVXJaQ2$=VKqV$DV^vH?fD6(3)KZ`niu9}wME|6M1ODMMOr8`xsuhtqocP;y% z+G(0#`WLO0X4&`Z`_>=z+%!14R~`c1QWx)@vuZ#4;kuXW70kE)aVe^g+S}R3FsaG_ z|6+Ga@+OLy!CqPN4{ayWsQnqmg=&$TYr^>F6BE06OKMPP+Q-z0V$Du*E3J32^%baD-C&^eW?*N&hFoLRZR>>?`?!P(5ZILf#@jzi@^68Jlk_vhHUd@&QY) zarT;R>*=dxA)EcjC88Ib?Z@U~cjU>wmzmEY=ob;vVte(uAIJYxPAcD6mQhW`N76t1 zIIaFQFf*e8YP1#E`ZZQLX^;W9b!O{{@uCEXbet}FkewlMf{3-qq=^XQY!s^$icQ7w zvRosUncncfJq6m>?Q787swHGY$`>DyuS(dfcT|2zEK;D`nvLs34f5Oay-p&&x%<`u zp0V}&*)(OYP;*ZnRP!El!2#Zsx=Patm7)$eQi?>42uwEgjP}$SY}CMH#=)WF`rB$B z$SWRL;euYpK+rt|X~qb;yEDLRwn3`;T*`A*g|G#sRS0jiowejByxP_;^FVXxUxS zI{@Oiopv_C!=VPD`BAfnp4l7sB+wlQjXkK2A%`}%O(ObDK68M>DZSc^70tJgjr`$MJ&mgVf5 zT3c_!1}s0mer>i@^=kfg=J-+2Et!M?1~;p4k{doHuXZ<|e9*|BpGh)@6K zxT;gwE(a?w7y?n9urKX9FRXr>a{cVGqwz@gjGMy-_#VG}&5mT=l*WHg5QR~Fuvok5 ztyktIX5U{WtyHde^SoG#y{A)nZb5T+gvGcdOE(%@+KcCVHFDscwnXgNXtJqJN(aek zKZvO_Drv3m5$s=ZYf!rQGSl0oKfGc$Kk(5zJoQht?S;g(FM=4^Vj6kDI?5DyAE5#} z>UxI|snay=-#;1|@ttdOz-0QI67gQdHQXm`BH1#sEW{u>32HMuZoeM1HR>=}u>49t zbG1P6WS*YBrY}mU+=)J8`pzU{va;qvY-rBBt;YG}zLBWrZOWC+WPdo|ss46I8n%{t z4E|%E5@WfESjJp|fN<8-bAp)%w;!7R2J8~=Q|jMlI#<;E2?mt#~A(&k%ko(7yw zsd{*+(k{~Lr?2yFSH@*;nTT0N-qf&@*XmZe@1FY^5%YKtl&Y`tlZD?Td}m>5t~@=8 zR6;lOWwL&RM%ou%m=%k8v=2tS3Hh3&<lm-4=yT*JH`Pwm{e!NJgX8V<&v&K$p^QQ=Fyf6P8$8$ZUb7rH__7i`6&8#42o zJrUR%yS_=`d7vCw%t^1ja9qjpcKr7JMCsv~ecLr2zx5LqN_SXLqswIy$nfkwl1yk4 zqy{-C@HnrH7cJ|Q@I&*{I*MM&RF-TXy8ZLHzc5(icshBqy7^RX$EiD5u%LkUqvgjC zTnPAqA?h9>z(C``@h&LrH7MWvDn_u-xM3f-h~!t{S?%sbauN8I&!@s09WOmDH1-Eyc zL{O#d|EfGF1CWFbQnvQ7>{A!cBJSv@nZptn53TfpOhG?T3r+lW+wOF;eQybp*bK=2 z!@>f%sk?^_|S9gM}qxy4ms@!@MyFe(5VeL+m)q&u%U-*Aif@deipSHl=eM(1o zFf6ZDJRl&)?67;ov1%P|IO7Sp?m9$YL?Laezh+Da#??zf*xee?PZZjYL^HQVteZ2G zzZPD;2c!nPU+w(f2-X8y!8Tfw?V#Lp=@4I$%h}?9rN5EnA2Y6SLLQIYB?^S> z>2!qn#N6N5305V-pr*Izj6{pCW1zZ#Q5mP1S852srR$z2^*qqQ8pXJkb26D-Hgke* z7J2vHXo1TQ^vaCdgOYy?vyHEd>T0Axf8GGMDaPLYTY*Xv&`L_pvNx_o7h~cDF$K*t zRDZ|Y<2Jcw{XjJEoVP-iu={#Qu(xgIy5DQE`ZlYhUe@gh$ebzvYujmZ30$LTA>RpID$R!Y{kKETDLN@ zkoe-1CpbxWs3n&w9GcP?t+#{LqI7eRrmc_mOV1nbR|~!ZITo?oF<{oi9z9mrdDn%uyPW?0C$X+MWaRS9%{4Mp4dF2f>LeU%zQF+yusJenCE3QjCO}$# z5)vdRcbxUE3p2veY0i88t-k!wnb%Jiqs+A@v8j30k;W3bnwtMJK&dmPFYGAE+uhE| zg*pUPNZziE)GYw`{*)VnUjLO~OPqmYKNF>CI(vRO&mXhy>M--ZF-Jafe;n}?5aN4s zeOV#EHG8K|9=w8YifV87Gxp&?Nv9qbIblYeYwg*x7{lUrjdlwbS~-> zh2A8kMFLB$)Uo>_-{%hxNXDppP%CN}SnuPq9BRdG9`Lq{Msacj4fiC>$Wo`(ggx&Y z|J5qrWOJz#cQ#S^L{hPpS_bK-sqf21{~K}w)MNcUFoOUz#Kf;r^_11C(7~|pm6W)- zWgR!6{YHaE{5UrGv~kfRSOMiZy<@1^{IKgPUP^6@$%<#8#c@h-I-*u$1dX$~?oHD-N6jqN}8XwiIqO)%m-v=nS6;Tv7z zSIJk#pCG^dx+quvXv{({IP?q4Yw!t!cvkwwE0I`|ZkC27va1y*4y#w$nKdaqht?zd zEi2^@ngp(C)UnQ^e(r$nrwIYB5^Yhl%vG0}RBW|L0C{7z&c4E97h^IY}37S z=HT}qOsjbl2jJ0h{LzK|8O7Yy3_qMyZD^)sc4;eURjT9F43ir9mD*F2l!HQX`-&VS%)7# z4;0G2|*1ju(8{M)L zkUnO+fA65U2tn&q&I~U=Oj{UFQ{?G~(g?D*w9LXpv6ur7{zO(f6%7sFzWe~2`LQB+ z)vwfLZBD|y+8LrF!}YT7W60MnoB2N^h$e;J7Ehv@Id|1N;fl_AnQFFzudZz1L6h?3 zv_Snb(0X!WgTtV7NSD^U-i)1L#1Ygd^4T6F4c*6Ds|F>x+hhtir0r&EaK}reN3g+)nH0tzT=p> zDWx;Kb$f~=#(kbutP97_q2fDUdcH?;!ySykVH%D04nE2f%!mh5hECl*5% zQl5>SlsM_r%LHTZIdxT76LQ#H!qxi{wT%&7%8(@MXz(`t%nj)DzXgO(oM;>5337B~ zS6<)&qy7(QaI!s_8UCt}jHU4}vuV++fj?TM)`>vVgO<6fuyjHnbxE~MuRELugJ%lV zw&bDdN?j%ZcKCPv~Em%H1^~x zNIYpjU)lD8GSSciv}aj%?FNRbgBM73_~y{C2ArlazB(B#H2;~53M#Zv-v{c)6a1d4 z8>1c*x3l5pxFeptjE^}e?lD_=o1V99GAmdPbf8Gkf*s>{HMn09nJkkS$W8e zSm>vACk0NCOSQQ|Jh+7cB1t$cm8834uC~C4^%L16TBP#t8$2%C-Pmi(UHltY5tDsa zbWRtU>b0Ddy9a8r^oy)+Bx;IP-lAA+z9Rh@_wd~J!7A~{l0B!6^t@BGdxs+>>aOkn zyVno+v3|$t?p**MQ+|T|wIsKrJWiTEd1nQlv7gT;cHCFR1Pl1_gZRqHu5jfzV!A7? z3}cu!6~vm279cXK-MQRPbO z>d(qM?aH>sjpPLeulcHqrCvz`@X z)nGh&pZl_1Tya}7W_ZG1o!i)Tz#1Pz*2jH=G3>bxRk*Ns{)4M-K3@b2IWhHJDF*81 z%&;S?D0@s|fH|L)T$)bAT`c7yZ4ucFSv@Y`ViuZ6Ynm1c_G?bj)+D1TN`T49%e`I; z|+}jxTNIfm%`N@R}Q*2PmTF0S5(H2 zI5-8NF@fM>R9$PM*P-2r*O9{KZ~fW(Lg7Y#)3?{|-8=dg-mFZgpk@R4iGe-5G0g4O zWbKpq#tekstruyJmeI|Yz*u|py@9{|U#>Bp{j8!9sH$qLym8h+bWW7H1CCtdZca9> z>6n$TnIt%#)v`y!)Qn?7(flB+fY3ca8{tHoNPI1Een@nm$sPS`Ey_%L>hCdlqgNkp zoqQfPTXpJ>xCpv0``626<%~M~EG^CeJ`W`4BOZ{^Uhk?HRA2d>5bo%>_mkO75=-HO z#A~|WHerg>9v@+nem*EmW)j<;y`$6_|>eeF8J z4|qP}pm_JQQC?1{vy@#gyFyEzAZNm_o0gh?gxvpC{hr`{VkL;m_BTR7oh%ysx>gH= zh#*RUWFKo|v(f>Mr()NEbyfINb6W#V{4?mU8212+C9?!dPMNEjlQ)R6D_%IUZTCrG zjmwq+T%?!!Wl*%9^3uq9^@9|s8M!*3i~z)+l&?iu;%?yGsiG#itx=6;Q)!9678-Ai z{d*!Xb9Jb4Tr#36W^>*vK%Sx9d!)zoQ1`doKEnhO$Ur=G^+i4kC29*L8hXt?LlhZs zqmydHC>ewE^DHPWT2T1@weE|V{`Do_fNi4eg%vcWJ@OIoPO%vU|^TX4yw?J(r zi)ElA19i{Z?=Ppr)!t0g5)h6@sJoyag)s)c-w6mk+Ka|UUx*PpTKhZkcrD>DFE}IF z=$$Q<93oeDq|$b_ieIgsJ!F&bzhF!km|9Gdcel2(*y7p8{tHU)24pZvb4U#N!bWq3 zE1qG?scS^g{U>=1-feG^>-xATF!0Gj;#eqSH86A*Gs^qaa%3ZDXDQ66L3pD>{x&dn zZW0cKmk5AIz=^*&Q?44ff@6&(y;lZQdNZ!D))iMY8^ew6lGfsjR{GGqHS4R%&iyuM zG6t|V!Y7Y6>I_YI$DceUoZMDh+W*n-W-`QzzaHuVbSR#C%B?r~uOLh;fQCgML?VC_ zHTOLNJE@vuOl8Mv>Q`_Hvljyg;`35lKrpl3-$+*Qyh#;O*7r-Vx%jD$PD&#W8BoKD zf=)+F8vBL8OF4|PNTN{|M%Pj8%|p#jW5k~>MulESy+_#ZM(RN}R&K9>#bYr})EbV| zJ+6ml?GyRe$^A6im*`-lljK8L%!iJP7o`nWPRK|fKzh>W;erHs8M-rL|8MN^8k z+HB|NF+2NIt~_G)TZjj9Hmvw7(G{MTpdkE7S+ao##o|x={*QPLL!i2IYWcT)C#uKe zZi(@g-9e9*dk2~O65{FM+Mp1o9@kSW1?xuxujN<^oGz-F1>$PuiVqvIMt z;MHaK&QurK!5t+4_nx?H#NIg_8v;DM^Ke}HNd-4P_whI2I;amtw0EPbEtYuXBSw~VnUh7Y~!5& zJJb~lQcgN2A`QLysx4tVuOfjk&203rgq@Vc7U+Yrzk6-XX3Uv``?bN|D?KufB+_um zc9q@@2l=n+9tG}~SmWyG@Gizbbrs2sqXfkVqhB*`3MkV8RtOAO5QOvDN|3DVw znd&B|;Q{dh#)30Y0$yrY3O3HRg{4Huw;#YDQ0vmH>WZeGV8-l^4zkq~@)QIk>6!%h zI7tdVO(FUJ7On@-h_9U~kAEbt!)EVq*k7B8*$<6J7!iP$BSJat4xYt6ZqXx~_^xD> z77T+pC zpt-Sr!i{>A`=M9v z<6JcjeMo0uLc-G6Qf{VPahQ?b4XfQ2-O+U1w~I(t4@VNz?|e-|bI2U#Sa`nJDsU&# zEGJ_t^FHG8{CrD}5*lSUfoT@yckIMPmqN{mOJX%8eJ|YbAx~CDMrn$tDnq2u75HT% z(bhnwx{uuBVhd-$_I`n@&TAllHv2%o*gor|@JiTB1pd?&70kCHq8DT58LI`*T!YX> z2i+_4ud~>H=TfT)hm$HK^_D)Be`|l*imb{If77Bth4zoO5P_|A8WYRZwDUv6fiAiH z)7OwAxkrWf z)WX(|lNj|u2QIiiI}&g38GwIvL?2G5j<5>?Y==hASg-HL!?3ta^6beMr-G>>q-5(3MPH(-Op;TdBSo%lE|hxo$}Qd z<}1hBkr&9uH)R3uzN(c!*Sd|NCq{a_?E{G*db*oVzf>A$M$7|nq3*0MlpnoC8c&a3 zb(=7!_$j9)wnLbB6YbrFFs~%K71I`YsVmwIKMN(f=h6kqqM|{Q@fM@Oe4%H{9)jz6Q_?|3by} zdLoFnV|V>cAS3cT?dvlxaS#-R8JkoxgEqmpZK^z=1G%mL@|FFMbR@wXNTJod1ubn76gEZhW=EKYk#l<5sVD4;swj^tLPSH}PKEZM3G8YJ;*X z6oH`x%Uq`K3~=u)$BUl-DH~Pq0rwj(kBzq6zv{cp?_5seJV;e>w2;rux}?fR?(~k@ zO=_o~PKNaG-`Pl9)FiYczkW)|z8|V0V@ouI+_1d&_YrzVW?l5|H5SJjIy1d)5}{Iv zt@6)2GL)H11&!hN%8JlF5cjs40}vhL_0+O7>vs(N2WMh^5&N078ON>#y|>22b{;h> zm+ahFKhM#Eqh3=Kp#`3wh~=kZ1*+M2U!Eu%=F>aMaw!)UZ?4K?EJopsiw9&oZv(cT zTZ6-ll)S~F7KP8a)vIgqB-)UMpTGLO^+p9Z1u(P?`z|^*^i({j(*|A7VO3hN%x=aQ z0xQ3~$oP6N3|eIQe30M6r#vjiOqSCU{P=%8+td(mA znPdC@UnwKZR5KcaK|jt1%Arp$acGzzlY zU6b%c?2ojQh^)j-TpJ61*RZ(!O{G5n_73f>uBnHd5)|V+wbv# z6~VFM|K)Dz&RM|J0CkMxqy zN(32X!C9hwk?hFKJqbzEc;)9P0b~yE(Op+N&JA+V=zj92ao8DPJjdO1I=JUZ%$Ys= z=)b*+oG70G5_GFS^tDP$TpjLj(!43+N1f7W+;Y}X;=b1VLe|Q*a#jj0h#v*7GSej^ z3^*Ss!3CN*(rKlSwcgEm7i6{U1ru9Qs?CW)k0Kn2Zdk9vfAO1U#k@o$X2doT4S@gb z!A7N9ODhSEH(p?1IPKRfbJY?RH@fc8Kb2+x0_=}_B z_)Zi1sk%{0ZnlHg!}54}dWnToxtu1RU0#;X>TI`t;OCn^p?OP?EC@v?$n?JEfIR4= ze?B)`Mu6+Rc>fogTh%G^!D#N(-m!6=h$5uiR^tS6ULL2u5qQJ){8$_Pt$*37EIM$o zyYyGUtxnOL?$QLxdO54YYA&57MO5I>;g)F8|&1URT=|RO2gQyv9_wTCGO3UjQ~I? z$m9^q-FRP$_e4(%BXZYC;_&bM$XtQ(jEFmMiN`ODDv_t+4*r*N?DFNx_jjBobHAn$ zAH`A9%jd=6lYLi^mm|;QrLo}xZ8vOTkTWe5Km8@S2y9KS_us3Tz=dJMLl&x)!5V;* z_VY6aoa|s$;&8rwlKyASFDflMoz#yRzRR{dG|~|YNv6L{W-l2SnC(KYgon(<9Ig0B zOGi<~wjECvwRnH0TYZm**}b#lW2RX9tO4V=7Z#@qSKr?t1uhw`aS1Ad3Ffr~qS#)w z3KP|;w1+CGZrtYW&JD+nN zKC`qazI{cdv&T21Vs#Uh$k*dOkSCz!bBvbv`I=N6J|=<>&)a0ol0E0IJ%bKmf8UQL zZv98l7pqWO)A?7=O206erU0!$9$U$N1^<^rad$r7l2g>lnfVJ}#gc*0HZPCgFd%jh z(26$kr93sPXf?}R{4tj?kXuuyzs16N$WjpEYTd^dBlGN`rGbIh46lRtaas^We^i4S zU`Ah)^F!+Xu4al_9>F`)kpq(skXYn(Y|D;HJ!=TXdep=CfD!pOh*qHf>hLuJB}_%{ zXuhJ;IXk22a|Qii8C^wq2i@8}>f9qHWm z)7mdf{;la*(LOsx!oGa?iMya|#HY*+4SC%NmkzC`4?L2_!Q6s5T>;!2%tPS$0cEcR z)nexAdinu0Rc_}x5a8fl#GbX;-K2_Jy>YsYm`E0s>2>x&zT<$w&1Y=;Hny$t6OFl< zLdW^DwfMKYB#Mk@bz^!xQrwm*#+}eUW+x>of~e|E_HJ;%CN-^}7|Jr)qAeZbCR-hX zAPIMOwck*>tx`FHfzF(Ltr8_vMfZ9?qOM!8a-(=u*62+Wt1b^@tVfsAH{`vLmfiqU zV8Q)8H_d~G9VAF|ILrNcVJ9~>5&ScVLx$^aIyF*G;(ILOnx;iJx6LY=7i;6kWBtkQ za3@976CC84#E}Z?~ zBttn<)w^il{*A5bJ271@U7%-GN2Gq#eaT(UtOyV2%|wAyqLl@qZ$e0r63)p-{wlwE z*{W^bMmI*cgX8woaMb8BSiQJSRY`Og^=7)Y$^G$MI0S>9nY-UW;cGg*&w$7p9wNME7vgk&Q!iz3NEQN=}D(A!GYje$B;P2Zxehbyn zDem8@c>h7bIxIcnZ441Zg^EyAUaG!*0R6x6QUeSZWr+p$|DFZ#$TWAyl?&m- z@eY*XYJd3?zCLtuMB2+r8!U^mDyvT#0QuQ{m1$lyi>^?+Y1As2kO;9)otd}tUxv?0 zQQlUonB}xD7m?MP=}JjFzvH7pfb`u?8_&urQy}e*7f4GW%qZQB_*QM7-&Tlb<@?W- zOVZg;{!{Ij^XVL&10m1*PuvlWCRoE&_Brh)j;aguY1po4Lx=e>J>XkwsaldJwM05o zi#NpC!k0g6WF@zXs3lvwkV9n|D08mvmKxP+rj=o~O;jqg4QrAcM9g59OvASx)agSU zYrAVXtYoWk;bUglU$201XEK~5b4gON^L_YN8C)yXeX>LI*Ui}{H@j`SovG%sPLVmz zSDn(dtStfVzfcx9fHz}S)1}MNlezOruC{Z18;-Dq50T2+>*r8JentnTgfIUy%4-F& zVk!=lzcWvGB|v1{ev6vn-7u4}`8RJDYq)L+gX1MOE@j=TyL;duQy}dP2-n+*j}Ylw z`lV-HKq5%IV#J3h3GNqU*t@#fxg~}1BC?q*cGau0aiixFMc<{O=)3XV2f}UG>hL z3U{_Wz0emM;6~qn{xoGUYzWD;(eh>9Tj=bYR-Mda2afSibsZex&RvuP| zg)4hy0XcgUXe`#@c}arIYAF68`jvn0J+?rG{_ND{dgG5+6B8RFpT&hKe3X^Ki_a^= zFQTzWXJd8MXm{h_>C>K9o-w|h00K%x35aH0ry5~BW$fjz|^K*~gamuQ!&BmQ9N!vm9_sSkL`Th&f! zYVdc!Eb9fz$-GFRE$&4fvr#ot!F#eWylSM#F^gyzYazeNnC+pI;tya%2}IB$!$97A zJcTKwK??UR$fllo+^Zk4<31}{UuL}P{m><%0uH#AOh>D?=S5)~V9Wc!4!nGmon%k5 zj&g5$!hSScuKV>Hi^qma`9LULI$ofQ2=D*`+MM|h-8k)b$;@nI=IT4}-H|AP0_@sl zFYldLxewp@-B%V^j;+-(THvu65#PRwNC)A<_Tu4AHy@KfoLwewB*-DzDPyzcRpbMO z9u(;a%A3Y;n*FslzT`fD*&T`8(El$1Pz)siV%$+lOkMW3OQVkeNJY)VuS{^z=&1~s zcrBBk?01fp0a8+V#=Ey0wL32v?@;`kG3+8J64lC7Iz*?*7Yv8IyWT&$!f2(R(UfX^xs*ZKt0%g0@a+d~1VyYiw zcRaQ1i2&gz_!90uOR+%DE9w(I|aj?o_%lMa+C5@&Pk6h*r+ z_>!diF4Sw7s-Wz<%B~t0;~%`Dy}rB9#)f_dj+j^wYoA~yhHQ!0GM{9?6=F*1nZ?2SIg5c8b%0`2n1+UI!^Lq{S#jh;F`tu zXi6V;)g(qAJ&=%HOqHbon%?SMOgik*Yv+=~Quxq0CB!f(+j+-nwJ@YzT{O*mVt132&VH?5wV&Vahx=W*_i_~r7cZ@xjfyVT zyw6;4y|+ZpJ}xmc8=SClSoIzijHaCbd6ClazR3M1M4$V3#x87A(<)1b3w}S0jhjuj z_ZYk-Tk`vPG9HEh3{rXdf_cUF(7Al{7Dubn%66)Jgj4;@wRN#A#L4}2|DCE#wUe#m zMgD9~0r{yx-NwY3d4Il*QxoY+v)BiGn&w-VBNM;Bvnp$Tomk)>cl%4L=mc*gu%;Og zt}XuDi{tJ{GU*h0GG1}jS?RBJ5+_KPy*TXGEIOIq_2$}Z&rPXk!CP1IT7S?L4tOk$ zYqk_N@V*yeI3>+9WZ7tX2>RWq@2aBlmM-OnG)PG!?jrwvJ|LB{XgzV3nQrg_TZ>Dk zueB~LtQ8Df9FKywjIiu*9dmm`I+&G1lgHb_JJ0KW0=^HKCw6&{vIHPkcnGcN$XFVB z8}JQ+$yTTr>Yf0^AGuA?InaBovLc?kUr7TW_+!)kNmnx0@A>h`3D`#B=JsU#_xykM zwfmky_7joc^!#a2Jfv?YRM`U)F!pEqJ1A;HnEARkdB5`?ufaTa)5O2T>Hln1q(Upe z3s5C$J*DgvJi%uOh~_KvSFQP=~8?AhdD+5=+}c8~5rttGQH-`(ttg9O*Jl*ZQW% ze-hO&Tc?2~=Q;hLwE=nfuJvlmU)muqZJOqHFB}fI0tPZii$0%E%IVI$8yN;~&8C!S z=mWV~9a4s_5y52q>8}A5pe6P|>aCIrM(n_1z>?ql`tR@F6jI=K5|4O3s`)g(-Ru5pC&Lx=DgF?D4PqB9 z=A%CI5H*pl(zT)FJ@SDfKD;CK*@v0ZB?OPC!~NHl z?#!(ECvf>_D4^`;s7I`4H8xNa2-AR zD~#}N@$<`|GNUn$$36Q=+q>zbd@u}uKt%lGc5R>|i%)8T=ii<*t!J_Rjw%nWA59TC zeDV3-oBcAyFn2w1H}67-G*>0`^@>%^9h@27&{#)88-VEHaHRUUqaDW;c$&Dnm;2Vo3#OYA~fxJWiUidEOf-AFQ=M$vbiiS5&W z0pV>YWLLd_xoTdb#J#??sI$9VY24&|-l}gYm%<^BO*3V%b1?R7*4N>(Bb^8IjtoIk z%B%0Wa#It6tswjQvZH*-i8q_5c;9?~2X*CeCUx#sre-YlJL%ScCnLpc2w{innf=2|9^{+x?1XT=;z z(ukh0!M1}|`{`B^^QlmjuiiGs>e{Ev)qkuBHW*7g|J#@l@F(Oy?S`BjNN4(hgXO(D z+wqPKh9Fcw@JS&K3J=(&RxGzOpRAM`=~KO4rq0R2eX^jw55AmG)+3ua0N;eM6^a89 z1Wg0+xymXePi z1=vdKBSresTq`E%8t0$_bZ;vS#zrZ@g z*ec4B62XDj7~X7_W#(pn_P(@aR^>z)`Dc7ght+Sk=yh*cu@o<#-CD6tSwGPI6H z6bxOLOGot`x&hi5xs5zACkd=3aFVNnkxu*Dg6n^KWTvTq{_*Ml-T=Hx31hgI0so@53KO_lwK!3~eNQ%55bpluAT~QJ z*)Tn|OAq3f6)*f2{^46~hoJEeRKwxz3lg;oD_MJ=`bCHX@e1-- z+h%s23$<`|1m2Z@yA)(C!gtC0adH&Bqy6ueYKfDl-+sdMD!hW=|D)`yqoUr|cNGv& zawMgO5a|+W7*JwR1f+Xtkd|%`kd7e*rKP)(?(Sv~lx`3h7^H;zb?@yyzkByNXZ`M< z3~RC0yu6?1?dKsXkI@f|&oH`t`BneVd#D9$stAnS3KD?_?D4Sn&OnV zEMHkW@iHS@Y%7BLlKR`vH^Q|$WPaN$f}kN?T7ez^dE4(%U$he0A6&Z7TFlc(wiMW2 zD`hy${IJ60|0#T*p+)EW&yXX69yR3RjSTJxror+#?!>7(;?dV$`GqpEJfU>k)SgXEwW(> zo%TV0UxBkV?Ml;9%I-yWa{+tqx5?s zpPoxQ-*A)`Rd>0tx#1Eu*@b$>$T~w(izAkDk=hT~9ZH~A^gv?nLhwhB-`14s;{L|x zdb*LkU=1n8-OuhF#RNPK9m+R$#~p<2gof(3z)qkY^Uing(qWy4EJscCuK;!@`!phl zxdg@+YQ&p?_xTJ3$p7$}|LeLrV~T+`?P>Ywk)(}2mB^aGL+;2tpwc4+Sw}t?g;gEl zL+qA9U5WY#R#dFM$uC8cpKhC_?=%^YGF?s;jjB2lmJtWkHtBR~R+6y2J)bMPY6!?= z!rkG0lqOrI83q-fd7vQxCyu)Ui?mt;w>n%@h~7w>_YpZM6TpIIefcmX3^`xB0tUt# zXBv0!ZGErj!4$xsD0Pgj{q{tR@;&i)j4+AJ5|>-M7-=~Y+08DPDB?MsS0YUN`+~)e zoBctI(yQ;&guBiAeR?YQO$TF*jS5n;geHJ$d%9H`Z4Dko*+a?BN#GjvS@>s>#AhTTRFj zje4HJb)KT()KyR2_nc(=2%dgTL42^CMWmc?^?*=b^}eR?Do(`DYw+IEICHz>N+Tu-eC zN`;(`@^XfSRg@TD>-XoT*3NgBlDU!jD>iT|#aY zRyo8uzS%Yv8`t%Qpl4fag)Kf(Y#ZX69^2fYeB=LFJKz28LK(y1fGglWD3hie4f&Jr zK96_QD>+#o|1kQRPINSlQ8l1BgYL#veXc@IPtH}(5cNGuj&tX2&vfNRRvY`Ii$Qmp z{&EqR%rNn1v)z21M=3V(bihumi`OBqnpiG6XI(jt_Vfr0uMeHYQ9M?Cq(eYo{@I?( zWydI%VSS&=miM-_V5Xtk4Z+LP?1PX_uGL3$RmUY;udlfn@=4kw^dtGnmV@L*q~x#V z2)mo^eSdz;D!7=uz(&{bQ@SqW_$XfwCT{L+cJ-ji^vKEUco?pky6O)s*mK9t>++^M zkFN{PRJgixm!+vYmV-~*S+X@; zB-6tAQsg0t4ykT*XWb8hZ6v$EEc_V%j7INu>fKWo}E@=iE}ZhoGT|Qu5Ke9l5~%w==N+?dbY% z_rHPJ)FYR50UxD&rN21wxaZ^+Bo%G z&HT9%`^<>`LgvDW#va8HS)X1&}-9{ICtf>T76gb2`D547|ZlLNP zP_qgl|g^V_`(DO``K zb>vkq(~KH!bRHO3lp2_Q{f?C56CNZ%=@G{rkvJm4&-A3v%@RU7UTB_UKe3p*hi9b$ zor@4d7^?e)!u3K+T7Kw|@HZX1{;^Lc9VOud*j^W~{WD;b;e#}qjvclk@%^?!weUmr zyQ@XC1doa|IA!)5@S^M7(N8~2cQfN9S04^oK2q?@d3i@_DpYFyO_imhGJWkqO$+6q zx^!pK``51qi<>OeAH4Whjaf8nckHvwt*=>Mm_N%s(6nMhP-`vQ7UhlQLlC5vADBBX z|Ef_&+GKAo=-qS$qHp$P;ERr;44*3UCx!YrYHS}-eG{if=E?xKgLWXtovUvI)34z1 zbqynU>qT^-(xIXdL2kzgDSnI4T&0>?Y*8qaFaW>6N-34>nebh*g@4X6-(aty|9OC$4$ma}@EY&rB*- z@Qxpg@5^FXsV}hklkklX3<)s<3@sT3taoIv?zg{a&;CmM=V3vpREGS#OWj68a&)<& zm<+D(9hQx0nf4HQ%*&(T&@+2vm%+k4QzD>Yh1E;aHq*m#+|xfRgd~YhzP~cw7u_I> zJ1AclMy?_E2`|*ZE0QKhD}3gT8>5NsgOm}vXaO|o^NcUlVD|&8**I|wddr!v59T#c zpz-S)$X$Ai6llh1wT^VvuB~0&Vb87+iMn?;!_gJ{3J1hIaNN;K2oYfXX9~51Ek!%k zReIIK^#U7i@s$)HZ@_c&wOngt7!tc)N{d67lv}9yo_s@)4%nN6+N}f9CGo-M4OD;eK=p>~B?03i5GHu8)=pR+_^u=FTlfuhDR@ zTm+@;F>sA74cPBspejvMJ8GROYrN-rYun8AB(PHxV_`hc8r8!9e(&OQUYKsPQQMn+RXL7GN*7`gHIT&&cah@mu+I<#PC}F76(Sk@ z6Gnc1H`@pDka$%LSxg<0M*7$HlQy0{M$BzGvEIK=?nrtE#NOF75hGO!%!H%MeQI)d z61?;t>i^U%6?MPa& zp?w!*RXEYJ4VLJa%3uZ-b%<^Yu>SKulTl3=ZSqVOb5&gQ z8fg9(JX6*GiXa!&ccD7Be=bM8m82ENe)kcPuy}UBUj4hD^PoE<;(_t=;TlZ*|$7V z60_M_%Gp0^Du3?rym?%i2O~1|y8mg4OCsC6fFNRLfUDU{Rk@7E0@qrlY$4*Q=T1WU z&#@2iZ(f5xY~P=Ha@HJdV?I=ztEgmjxZ6-Cc`mn;dxGx^@VG+Cb?KJo~Abu9#R zD(vkSVQk||6-_9Q7^@R zUv69TBdl-u?h&&_sp#p!W?0{b5pNMpppYk)NFdX2lJvV;G}=glbP&)0gxh*L#H_2* zyLw^Y)u7qNu3O!bT@0|j!uRWhOW3E8;on&6O8xT@0Iky37-9ad5(>BKZ!6pjk^si^ zk5`*}tQ#voMIS%=L?pz%HW-Z~NtYOCvr}N4N>6$5oJs7iPIVsF<#w;K6c1{iXR7S# zBxfur899GWu5mi$m<2|yeJ!`WR8oZDZ?eFmdSpZ*2UUL>&n~NExEdE%8J>vLZ-9uSHeIf#npUJ~en1OlIG0XshZiMbt+55O)(D4dkJI zCV=Hc#2p>8(s=f-zKl;)nc&}(tKA-qHQFpk?U{q6`3L%AKV5x9e{McB$`A1642K!$ z6L*Ihj1L>X`5E~+DIQwdbn^|{?nC#h5eb1qV5v5qd6UV-hRV@JXX**(hfukr`3d=R zdzae3ocGlW5Hmh~5}tEMgWy!SrGIuw%Rz~D&933#2A<3;g5S|OSR&@v4Fi2LG?p`ZptEB?z1G!B9+Fr9J2C5(SfoW(qeg ztw;J+`~ah0)IA|~diKyNqun_!7*0L+Ue&&ufTd#JCBW%d6r$8m?n1T0e4++6t{T=I zdTN;50r}G3Q>&tjnoK+w!ry*5O(cR(62>J`yKS`#+$Ak%q*TY1?GZ~lX29ruYmW6C zXoDs9{K^%UrS?KCCNSQ4yfA2OGs4|>n;Ta*0q!I#8;J*OC@`;z-j;QCepy5h{lhdo?M^obC31qkc-oDOjLZh$nWSRgj*oj!9#={7xy@Re6k@i3&7EqlFEe4M+cM!{KF7I|fi z_;Ku^DL{O}l?N%`V**96`A4#bk+ciGh0;)4!X#B=rWq7YzkdzSOCzU3+V5hfG57~k zStkB=ASyJvUkj(tFiUW}FaQcsT_}c#zw0MTj|zsRs4Sz!JGQrggM{F>B3$uxdMlV~ z|6DE?#CRcwhULzeea6b(?+6l*dC0Y6DoNGvZkU|%AolaasW`Bt_>pOTR>)enu=7G+ zO=h!^3cwQycax~hgI`UXtEMqC9jlNh3tuo}?M|`K*r=MbjMv2ncu&n;1GKF1>GjMm zKI<9seu4csY##}YE#96k#dp@OX4K!k^<^wr7?gt`W3JAMG^*qr%dY~qeFT3&@4ES> zdFmLz8;`Wd}AcHqW&D?n_sQJ3 z*NUSRJ7c9-ks64No`!d|E5qgS(L|k*r^E>pJf(XHa%2?05KiJp zYMjCRw+Cne0f`)!robqX=@y2}TVS*)nSoK=!__uNnpCX;nVUPxG4|QW%1;+!j*yPw zxJ=M@G)UiQ^NG^94(pA52JSIoN&ON*v^A=^@VYEkif5#?a4yVAx;*?6cCV%Ehiv>O z53=%KRH}%WGZuSem%k612yR0$9Mds^+x&o)npsdgepinL6JBLCtiNKbFF)??cd} zsF@UeZ7IrD?rMH1hkI<8Qmt#yWFe&_loeyZa_f0`KMNR+UYvh`f2w$$HZTggn7bb6 zg!CAvLvW|=g5LwB(N%%5&ppS=VRGUYib^e|77FCT$k(v~M-8s?m{apFQ{bb?DeyCh z^}mHeASLU|aQ1^6{OO9&Lj@;EE*Fdid)2+hHoP{vR{-HK(5n3`xA69F7ychHMWO(j z@n-#0d&a&3kmrg}~Z@;_UFtvht zs$UJt5VT&AMk>OM!&Q)WJq(9^vvZv5WC+SEi8TDU)%pv3zu%pA9m z)hCu!#C<6dC%Byr%|zRB+|_ZK15nz6l32(mZnFI8}nAm@#71*2r= zo($NL{B(LS|CEa60Lv$%_Txe%bc^@AldmIN*Bc5z^s809%lJg=b$e594`3a z`hxr6Lu>5wI%o7zAdukK$o=hAe$l^-NEa}32jUMJb1r4@r*0P+$7}xo4bGar=v~@X zIY}JRQqnEqZoF&dAfQ}duhST~sI6bzJl<}WMBB~`{Dxsc#;uHTDJ@JI=8s2m zq^)$jKE&v!=k2H6I2b2inCU}^BmHIVG9SK+R`59JznZm6KUSDYd1++!X#J&I>!w!K z%*BPrkC%@(Q(R9KXq(>mtUOsNYEv_83-13>JpOdUf4<|Rh->C7gd<$ji_oi_MaF%+ zswb$N)Evs+%^D;OCZVot<<{=t|z*uerd}v#{nuMThc7F#egdtVDxB zN4c^q#7A~w>(Xe+NVde&0mV3@j?l4pTrSiKRwu|=I#bCqoc0v-5H5c%$%-w_!E{Jp z0Jg4mVWt+`e8^^?vsm;j4vX4qf3k9nE&b|)qyBjT*;R!KIJ3pNFuX;M0{uQ{ua*P# zS~d)J637LG(}-!+l7C41j&U021TE*F^FRmGgE;(Zt;qjUJVl5CDzLTgZ=BWtAzSiK zk-v-v5c49SfjYImYw-pOh#amU%1O7Mud$tOf#%lo9(=UDBIH9|jh`TY*R_c&ba2UK^M%;8nrUl@IZln^H_uba9d= zjeVjKFDV}juQ|ml35`juxusm1&AK-ff?pag!QRnrP(l@59G^@cQ#w(pkY3gw+={F+ zTZ^5S-cUYp_nuY}g`6=Ux%Ov#96@DvgrHU=P4y$1)+^BkkhLbg|JO>!Py^r}{S^0s zFnfZn(BtKrqobX%noD%nyg%c@OmtO=l=XuFoEiv58wby)ju+^s-f)7pAN) z57$S}d|6?kh3#^;zCXunCsGWhs_zBf!*v)))J9HgqozF_3W&U7L}kwVLh~V3=T)}V zW3rBnqnTz?w4QT0Su|Goa6IrSl>)Cvq-b!P{KhllEQ-Q(ebseCb2y@@qQ z%lCGVr+2AEBvB|lKd?LD@L56HiUXw(!YbQTkDcFvXqE-}06xF~dMX z^Hq6;*-}6s)YEB7syvikhI*vz!a@rnob7%Hf>QhL4rx`5*?@%B${AMP5iK@LTiO)T zyWSi{xvhb-1k@VvHh4hR0f&g!e|b%Y^e=s`@Vb|_6aSEO`IrCv{T{opPxdF7WW=3D zw^{bHpOEIOm4JT zTRYq_034uumXSxcv&xoy6MRf7#Nr9KjWxJT_%zlOE)_H6ePa};@y^;!Y(IwO`9KnKu=hNI)-vOf;W@(ES( zz8Kd^iV?-Knr6a+3<-sXdtvim@r9@moaNh^-VF2)Wzk{fi1>ePU_8L)cS0NrUM?J~ zY`cg-`wd8btkM}?&~gIW}~F26;XFOi~!jSqo4kLl#2nr;H)S8u-)C3!lY9FJ(qqziqXJ-9m1? zwS)=p-;E*Qm4pnP-EQ!jsC=r#eyd7dcm1V;lt*^~CjT^+=6R-hncFG0Cm?C%PxeXB zY0XU0ZY_F^3?CfoWujr%#jx|VhEJtPhXVcc6Hu{aaMV$P9B0mFd3qukW$SaA`98gY z3)Es}ds>V0He-eL19<7zD-*l^AMPkQ?8suev z%gwIf#yiql>W~QY|J?D>509FP6oWeUav9#7nVGUOux7tT8v2s2B8w@?YoMgT9gH-7 z4-0-iT=CU24vWwzzqS05jmaLoyj0L+_4&L|;JFDTZ%N&)_ zmBda8xv0gI(wi?-?1m76tq#1a&{7u*S^%sKJf5uC=pe_ViCgx<4!CXZ`(d8~KyBet ziibL>;nH8&yP`}6^pql{2Yi0}NFf=3*@Zv8)bajC@!!AsZNlFV4M1&!W4f`=iU%jJ z`#crpNFL=@JjAnCTPk{uH!BUS=5O#6+)KmZ<)52dW#Gi)^`bg*>HDxLKi`o{g$OZJ z#I=fiK`om6qFvx1Mog&x4p}f&A%O<;vYK5AHTSyYVyh3GCgg%`f990sny9{;$f(4l zxQ6Mys66S%dE#d@AB{*upJPF}lvahCT7*JCygOj37` z%nfD(qs3b523YhQ%673R-D3cq`|?TGG_Y99luTdI@ltp`DP#c70avj#!=Oh*17Tk2 z52Hagn{bT!#thk$IVN-EBX7=+ek7-wdrOteOFx-MU;=2anZ0NJ8>BpbiC=q^MT+qL zFVLJHj5e1=$CSf5IQdp8FvO9;mY|8;jf393-3~+sD0G5+AHj*ZFhxA>whRQ|`$QnC z63ZM6HK=E{_%>U%rdlta7YZvV&;-L4QU{JRp{n3U57JgFYL}o9|0qqT`_^IYxh*+y z`dQ}ppJ+_IbGS>$$13LR^osgzvqYOdTxacB7`NK<*a_(_jpF)h_FG0WQ$+PzR*GVl zyYxkn8j$6(oHx=~<7YMdifX!uW5vuJhP)j>40hea@Dur|yN_jTfMX`q3DZk!k_aM7 z;Sel^aXJ0|k$E7&=s`NYSJ72U!Z$FKE{Al`Bjv`8?~hZ+Ba&NS(A7l$J$d3+u(*h(557k z^_nw2L_D0TczGb?P}=rk+2BXvSWzfU#pS$IyNB>S5UWC=!6jOsHj?9{g4I+k+3oPDeXwuQZjpyc=1J~S(qr9f zY%^3(aj+_*DjXfU(?bvgInc2>j|TVe0;1_ZiwIVT!(qGC#Y}~Y_zsWR_~9x|J8@Dd z&Ew&+V+kqBln{f@wifh=c^Mi?C|oqihd=a5A~wI#53$t~UhyddE`o2q`l4@c(kZKL z@N_2A0B{hE^3NZ#BlD)$gjD^w`9kZ{M?JeTGg zSIV0OtAfJadnIN-a66=3zXI7?+TuVpCF#TIMagKHtMrs)1Pxm6M7ZEYZuU?-#7P+Y zbOEf7&xDM-)t>$l`&5)k*g>KxHXon2Whkr{dY+^vDWnP(x86x`J6DnOmW7TMvq_^q zfV}#EJdPw;)_m<*d4IYa4PO1~OdSIvC`6+mPX?eguj7YN-dJX>5|`5%eaTPueE_%@ ztTfr1A7ou6x%c<`;}`kmSuP=Z29!??eh`S&My7Q2a-$`a`SG-R4Q_BO?fn-M8W7RF zvImynSvb5%&sg7>A^m7dBitUZRCDu|_v^R3(Hk@DWFqU+L^9+#gy>6B39m~j(in}Y zg(L|kVPR1GthuG13ztf0}fnP8-z!g1TbPwYtT2a{G(j#qbz>GD~ zIP3iXIkouo5|9&n%0mZaz?eKQygpR3*Rid1wWV6T=HQHWzUaeV}5XcZJfDi(I6 zf6$y}q5+@BK>Z0kq)xqh1U3Oq+-9ThT_t%`AwpCfg3YrdEyfBr+biym>#ZOqVCKL9 z&&>&FtCo-ZY26aKm0iiB`x?J-r+oI#%Ryl}8ZjTV2Mj_nLHH~>razm~I8!_r1Y8ly z`fKk)5P^8U$b1=}b~VMH8=mXRO>dNF95zwMu!2z<@Vc3d6aG1`tAg>^46Xn8n5l+W zaKTPaJv`NV@3uUK6}!>t@8tZIH&ExPd(U=JtAPP~s4eo@L#M-m41U_vX5qts%qAqf ze*xBH+$rkG``p|5fpni#v`L#t?LCv$JK0C@tiI~W32)$?v%%|l_q2G4dMT7>1o?_9 z7>4$`Ym~fC4qf7zICi_4%T5aWVb5SExYM)LJ%|0Cue=T4rCxOLu;x_ym3)?eA1vc~c>f?!%wO+{>J%~88Q6~XEkclcWud%RvEC6px742x5uOGVK0)@j zV{G8-t)r*#e8rQHlQYYu0E2*5$tGl#Oyc~Z2Ck4M8<%}?O>Yo^5aG#0rd@4*%*I3d zU!TnfA8PD8ICYLat^bH8~R=uben8&vzpJcnYo;5JCCin10)RN=5T>4e+ZFRElka|aKzq-}2TG9X_FPT-chzMlOfo2;fI1O( z+jY|!ZPXkC;izijgUm;$oWv+CZx-+-nY+A;nG|HLe|D$hjpZI0-#0|vg7|1=&#iLg z62fHmLnSG2>PGB@ZQt;!_%=?X)OilkVSQ@TnUb7A5!ML+PfCfpTZE|IbIl?$ z>w)L;(@YABLx=}}e0JHzP!~5tv6?>5S}=1Db-RnKRJpz#9zEjjftM?l!xpF@a3=vu zLqqMl=-f+cGX^wQ?tKn_@YlEhXPe-EWS{@jV#(Nk_vjIy;z_UXiISXg9I9)EO9m*Q z&9QDaWN6^>+9R~sU@58Dtk~uWM=KZwEgp1fu=sR0FOpHnXQI)!t&+I@VrA)N$5(hq z=_X7}?(yLl#UQh}BlD8$$;xsz#qZ&G-f_}+PlTS{dzX(vJJ4O6o8(MLP2R{U!`Mef z1&S^{(y+ZP$vORwIKfxakVx|^PR@R{-n>i)_Pn<-ShDJa>eiRW}z>C zqdpuc2RFq&Ciad0?MrRyl5Oyy1fIfvQvUljNR;S zE&!iGIJK{t*H{r})k^uVt_#fR1YWk%*V|xBAz3?(Ky!ks z3MR335Jy6~wwVxm<0 z<17MIGw$9q^-GfY*ml@f7|mWa>X7{cHX1^n*aZS=$l86_7U6k7FWpJ>*5`PlK<9kG#RFnJ2 z>YZlyAg4~t?DF_s?j5?Y*_Lb$?>n-3Z=NJT_NLKW8U(jg#W`@qTrj{uzd`guH$LD( zmfo2d|?#`JJy{5A+z=`zRB0@mQGedPk^}lhEYSljy z9hIB73C&o{1#(O;(h#{fnn~lKm-L>>B(awRJrUe-k{FzVkA*-lg+3gUJFvdL*y}Ee z(N~_{eO^Ddnw2s&^*}W}Ej~`ma|ZVvRagRn$9c5)!E>RtEG;3#YSy>DxE~SC<>DZzkog+M2DGoM)_j__{Co=WE%g zRVZ_y&34WA2J1IgeEgO24NH$5{r=#0^7C&3lZ2cUZ6gCBdrI6DgXnqqYFmLJ?Hlc- zrZzvnAD^JiMu~W0o?cy}&j+262GBJ&7=g!nXQ`N#LywC+k(Qb&;Nzx5JuLWD zXV{=;n+%mdj32qg)##8pyT4G*FvW!BsV9q+ExRBrMqaOFiLMzeDHfj$0TJzDO$C3N zsr6(>tl(a&D1kjL@aNTm9>7ivmJ&F1(xaClO8C0=LzNi`rtjRvuc-&B%unQZh#u1g zl0Pd>|ES*y^ZyH_{}W`j>3=o*9~AruwP0sYzm1P0#bp0_se|^7Sy!N6dO*2(2)t9< zU)*QSP#$I`bwx85I;o9X9?Z~)FhdsPRTm%A;g1)m48+ZnwL*AJNMM-rX^HE4bc`_vuySuE9-fX(5K}p;E6;DDA2#7nKqSCO*}3t>v&aL@m^8V z3K^ZArkXA$RsM84%HZ=wl)>FlRuIrSTYFZA_q%mAECF=a%-(Lk`tyU=#Awu?=lM>* zm>(c)@@|h8>3rUru<%%LUw1yj^|iA2jm`hgaysOGE#4PhTfyJ^!FYF}n58%=Bxh`U z%f)LR_J$7N8Dt!dxKuXlS7}^o{-86SdVKFRf~d$Hjh=!>9v6%XyVdOPGzCT7f5w{H zc-#AgK>ISkJ&_xY@clkHrtKZAVouASDC%0exK%^3xb+q#xDi<{BPij+eZH2Rx1hj< za5{2YzC-E})8CiS%PJu3^-##Iut>}O_@g^a&uv}VcG`5rc#gr{yPG-jlyP)I10`uw z@_{7FN{U^I+icJ0i3wWfmoBMt%SQU|y?>#r#Okk7^C(HE1KS!GZD061@uh96;@(t= zzLV8Fo%S>*oRQ6}my-8};ztvYv#~Ow7u#9{yL$V9C)m{?#jQ_aJk%9^$K=`7_saAx zl}G;5bSr`XG5=|MFPQ<9s2pluVv*|>ZH-oje;&tP~2 z*YLJv#w}9`44oBmT@{SNP@ziRGa*QpV6$~){fQzNP1#kKEL>sn z9bpIUpA|Js78tlnE`x}8xYXZ(%Q(O8;j zbfLwwb?aNj3EO7a9lNe3#;XA>mXc5M!KLFRp75=O3h!!*N#Phb_3kj!aO33#tqOzw zfd>6LHil*aG?1S0fu1;tIl&@R!}hd1=3w#N#V{_>8|&Po32f_C?5UH8fRQt|CMzj; z4OWRB=-7NDq#mcIS5jc{K^Z>^jH-Fi{P^$A%s)XhQij&^$=WW9o08D&1(GARq~-b$ z6$T?>kMnHP_8d^U49~=|0?!)vk?Emid^n$QP#wQ^9FCIr=~`#0vo@*A>B?3gSlnr9 z01zMdAfrsSWNkIG#`c^x=mAsL6PH~)R|~ORfiJj)QPFC*1Y!(q68KGRrbM1y0ljBc_t~ zg$j)sDgbW1<0lqyamEt$r4Y{5vA`1P2c>deDB(39mN73t0}!#uKfF9aC*NWc@}*`O z>LOpP+d{8?tYY)$TlXUkl&HDiuI;)-BX(&`2Hev|l~SK2)U#Web+f^niE*m!-h3w% zt37zIe{X(3Q_xDCoujpDOX#YEr%91z@#-$T8zFFpo?fFonQ49ke!^aRFjw(Calb}g z-O6ZtNW*x~%C76)O{)f&;^01-jZxxPPB_=z6DP4naS#{$+}g{t=>U7fE>QpnjgRN7 zZnR4Xddk&0rVpA-s}uQtHP~u2aTWAk>c*_S`|k$iKhY^46A1m>G40g{N=-&*VtX*bnIVG$x~~+k$IKhUfppkZH#3ayuv-yzjL7C(>GKnB zqMSKf4d&+EVkv_wTw7?7Nm8#&gZYj6lhea%Fk5i{7$TNob$^1g?j}~tpS@Vw2*ZC# z!xx5cSk_qu9fdt)!jA=O*Owa;Z4C?-+Yx)sZSt+#?uL>N~I)Ay&he z(3RxKw8ge?2cE;RolPcTWXZbNo+zCMiZ)WH57Mf;u`?|UxrU=1IhrF@7 zLW=YS;){o_9I1&}pSQT>l@zOpSH|Ipc+L!k>>;F_R0s-xp_(C_W0tMeX|MYrMgi5I z15AZO&J@oc6B??1;ae`c&qr4c!^WZ`lgGj43+52V4aV@IelO_t!7=&PyR+=39Swlm zNKzN3Uw>pASw3QQi&=Qxz-;T;Hq`|}?x-+MH+ zmy`C@M$9?odLv`%3>3qvb-r;WtM@>?8aV-O1^c}nbOTeg!AV0c-o?b23Mre zBvbE@(6Nz414<(~O6=23^zwM4%K7X*$)wScN?A{=WmEoliy}I1lSH=FSiK-plm^$8 zv6u15jSPvy`DY3U=ardchT7gqDOXQ0KFiOe!NPvuC@{=Xe`s~OrTf3sGOD-Hyf05e z#|geVnpv)+o}BF-tPuG>376~~A`HGmPqIMjgq=e6P7qXevMdN@UOPHlR^&WS6nA32 zDv!~D6b7{J6k&Qwc`wP?tt=Z5kzs*%K%Lt4`B@iRs`?NFaoqbrF4Q<%p4rZz49(8^ z(H`gulq&D|eEwb8i-mV%4TS4U<+AIyEtKi?{j$-SWjy^9Q=Ht{T}}%_(`UjM708~q zY(-Pau3*$&_4%bWJB3OA+9OarR4cxCB;bLOiY(yt@FJX(@-bG#ZE zkaZ%$Q{pm7z|(B#gO~_u=^jZVb-Cjaj-fRMsCah?-FViA`d*zz)6p|g5kp(*6H0pj zWsC>bo77fDNVZiYpYfO@GkixwTqvcl`B90TCMT%OtJ1qj}7?Fb#t|4@(7~Exmc@#R^6_^ zJY~}ELNeh?&Niog6H=O@qt(P>$x438X^XVPNM&F-9UX?E2(I z>b6}!q=&}@ffFIPw;LaLaP{b>ncdd6;Cj_fz#XpedyV5?we#u`HCh$f&V0dmIYI+gGPzktfays5-x?ho$eElE^@sl z(;KZ<<)x;-NZ3V(s4-K=v!0M#nW*ne-fV;N1MTS3;`J;M|HzL*j_S%fg}43QOJSgw zS<(lryP{tX@s0LgtzYGrve`_e(v{r|eN&Ue(D}R?+apzuqBCy(g&`Rig!wY`np0C! zMSNCa`U*H*U#!6l{2#GrgfAimA7VPO8H(9mW%1ZHK}kD^LbJS-M2`+`?BOk=Mu-XOeZ2Um)zu{BA3J$GW= z>gTamt5a_nf}E}On+UaQj9!TH9tj*3Y0yMzd8pO4m{67+P>Q6Sry|mlH%fe1bH%?1 zU4VT7LJ}RyqD436p07x85SA}P5V!$aZBZkvu5d2bAD@mxn zfbo5C$o;PkHF8qr6+Eb$78+jRG@8cd%P!eO(HV9xy4H5z9&?$WzL8({kLwYuTg`I&qpe)9t8R|%#^T#^M{9^( zbS7du-L8*`Mjg%?JqsyC(}i+Qa|cu8Z^o3yy@U6&a^HH$7k?Ccv>|%#%X7XQY}~Bd z?!&NpoDP9BsJNV0*{`k(bQd+D8~wNPP|aUL1|vCMdxeg+so?JCJBB45qe51{2_rm9UtBH zow@z|351a3PS`@BgS%|N@Mu=M`Bv^q-C40Sz5`vut)0k=9M>cq$FG5}*!jo->RSSr zP|HFHUx8x8&ZgK4C>4(fHsPNI^&@{q+Cph<3J~rBKhuM~Y{`b+P^=$|?7+?9H&Ah| z({`bNmTvxk3qS$4Mt%sw))){Ss?~rjS+sH(q$_G z6YD(d^}R;gr&m3>MD5zro76v|K{O}<@- zbbXqtO(e36z4?as^yknyi)ZXQK^IQqjVpU}NfJSbUWZn3Mu@|Ake3Y0UF$MvSlZTw4y z97BTGH+Q)RK{s!M*`7i*p!~Zo^lblnv@pF0mu{lql-s>NhysDHO`P_t()Hh)^W|(HrkgZgfscl<@W$KkFYMQ)_tFFtuoGMLTnm1!*^OF>40$%* zpl|JqRO7M!fokp1;zU#?&oXL6m$3_nVC*5GjP4Z@)-^XpW+`%8$r)SK2d-*HUPw zyAs{b^K*BYRP?;P@_{MlpuUF}KxG8kB6J{4&;38Fy?H#;{~9*lA{1F;>|-fY)+GB{ zwn|8{GenW4WXn!c7~3Rk_AC)H*0Qf--?uS##=e9ZgBk1d@$GcZd7jrf-{1M;_m@9- zdGVh2`(Cd5x~@BVWS!p!od-q*JK22SU)KeLVNTb7;#b2DH5f06>$iPriBb1j$i6?- zv0z^LkzfIOZIltG5QGG?7A=pe3*RhSYb>y{#p>r-%{z4vX&Dft7(s0MiHQI`0MD-DdxV<} z$ug2@_YP;Ou=iT&F?p#TYWw~#8NTC%RXm}W6_7fc2bzalQ!tz7|L8Pr@0us_ymLj1 z>`qv}Scy=wTSTH;Tan(!Jbdap!RFtM+(Mu-RH6Py^xD!3h9%F8s&6e08z3D@7MG=-yLk>}wlV2R!?hv6ss<&mKe zxX}UFvE*%w1Gj474vB;iF|A{*hXx)llydIME6vl@3P@4?lT3oMWJuZAaVGlU9b6?F zw;5LC^hO}%&@+ES@@6G|&A2+P$)S7RtVL9zMk;p2y0AjI@You84Dyy78#zj;;MVK; z%+|@+6*|m6Nd0V0Tzl|`rRS4paq(_@QX*Jgs9tQAZYBNLs04C`>o8pV)7bMBA#-8m zCzbE%K6R$)&T!mh!+@8ZsDq45OHJW!WO3HpuRhLG8vE%LxSe=dM~OM~+{w4Ff~UCM$cjp} znkt*?zF!k{pR#s&+uO#N5DaeO(6&#}Dw|ga77VHSJO!C$AAYrXs?-Y=J)SpD>r`1% ziaS^{!Nq9Qq(K-J7Cwg8tWpH+3~Lpz3SYG;xE_>n6>Rs5)rg))#_r65c}Gm_hh*mD zdb(gFcjdkO_J(GiSKcI6MyLf@!y6Fw&m zjX+qC{6VPPULwtIwXwo&+J;x+w3PR9m5lgkDe>ZD%=y>o8*Du{*sXmJlh7qD2hpyz z4Y9q6pfWknE8tuOpUx%Ap{Ojf&h_6d`vc{|s)Fj<$EaCk`BmBmyogZ>IX9Ym!$VHr znBD= zRks+sQ`qPs4`J61RqZ^SdHS#~u^*JQLdy0$SJ`Vqj7=}bj*3`+LoImhes{zUW~@OE z7u-mi<|3_yBFr=s3@Ys&CpI{Ca7~BIRmMT3yM2y2%9ks$`RK%-8{Z-E+8A=5AF;Ej zC)P#yU+d9)Sald5-$y(u+O!tFK3QYe93Zk-%-`X5)sEFi{xmGrfiy2rlPpNhiFlLs;+_B;-P2fi$YN5nZ)^G!DV zXdvS#IRCJFOAC1x?CXH#mevakhn*ZO#HUy7m#s2R!iiR4k`}#~W}9EpW-U=8Q`Pr3 zpt`B#yW{Tjb|b33paR17MQq#h9g%g6o#g=rFs`w{m1QF{Z)EY5%4`**Pvjf~YhFO* zM7|#4(&Gt6uxlvK1Gkn}OHiiCOSq?=oGa4`Ag$>GlgZKX4Y&JjTgN;PiUu8E5I-l& zp$s}+i^;R#lh>s@7R?HCSq^@Ji>tAw>{M`CGlD1ndhHQo%S2Tj6G9gEfXMy@)&KP8 zwk6VLGn}fr!)(W;+G)61qzZH3gNB)f!P!t%%hsz$3So8|sV4bHf7?1!oDMKfZ!t2Zgn{akB@4lr}q3fylEZR+$cxq|nL%K)im7`O| z#At`D1gpxW=j#iOv0rKlQfOu=v+FO{oCYYcU6i=FMD^!j!opI61VZ>kwpA5zf6AoY zIfq#+r|Geh^mi%QB7*sO$?j#bf#M#mnRF$-ynNr>OZ1z_tHpusB?`f5M@50H_qYzzTatF5;z0+b6c_*g8@O!eC=&CMw} zj8_m;*}bO4uzdvGBKzGn5gQ(b9R72E4)F*1xp5ZS{LZu^%b&+tGROHzBD^UcFE!=Z zBqGQeMb>AUGW2WiiEmpjX4;7O?B^TwICR8HNSsU73geGBHpkmhUJ~_XTsmIsZKe=x zT%~W=2%*@h{Klc3-TM)N)b-jh&Aqw3sx*4 z&y&sUJP11&g8-3kuSFi@lTHXtG9ZpHIj<~S<2J}UvWP=K8EPnY`&Q$(gG4b45G#a6 z>IPTUoJWR5U)q3rdyJO19LGsh(={*PshFxlL0;@)`E9xf`{CGm;a4z*>VYZp72?LY z#m}G7_wI*+_n*jmov80**ajl|C=hVp!xWH37XJ3$(-$_EwoMoAUfa>9hM8~rNn8@tG60&qX6)D7n0QQ#)#kRS~2d}q)L#IjB zooD#g_~k2x*Mgv1G4pa6JP{7JND^yjmnm=z(=Nq;gku#TR_gh6KxD<|)dfB+>HFYv z|R0f<$Bb5LfytFia&=Q@yZ%iC-YTKi)L$6X+teL?vKX*G)- zfT083wNmofwq(2e@;kDuCG9ZtPRlXjDQ5Z>Yvsb`J*2Zflsy!{I@h-S(VLC%SdKat zON$9VGbT~jCcG0XJ9U-xu3YUy^Tho+EK*D&=ALr*)puo6a~R33A(yFISBy>yOm>{bUd7Qj zFe>2Nl@-0Dc;0=B+o5fE1DieBi9#2YPriET`D_8U5*fo#r@sl@q^)-)9e#Iq9){H% zZj0n?{4jf&-rHUmk-WzjS;TluOmg?dBXMW;Qo|-UvvO!i$*_h-+a$d!m+~sUgO? z(1`+9Ule={SfmllwfZc@rg7K8LN&-ti0CiL>5DAVV-ukqeNs~F>-6os7PhM+dtbWB zHV?AC8drvi$7&1NhYYiT-`C*!{Qy7jLx6OR^2k4I&v0L-bm{WWymft&);@ZZJoaM_ z-6$gfp5C~Ho>o)1;&wPIp`rToIWVGXp2{|5w&rLfgKlGbrw@z{pI=gVv-7+SW)=>w z`|eUlLEo@yIhXtwo|VN@_>#7vvbpd4Zp74~>gN{_ozxTkhYOo-w?=`>&G^Z8@Fi=q zmpxd9lI6K9}?1q|!1!!>? zKJKcLOR3mDVc2^Dx1wv{o@{?}FzCzHq#6xAsr>QG=sRrK*(^*-YnnlaqgEkSsM9Z7 z!|kB*`sA-XZnFhDcgU=4!hY{bwGzaF!GU|V`_`0p=N_Q!D#L`h5e7KekCBl) z;Et$+`WRZ6`sp;L3wb~IIZd|V(R|IbO%l{jS~U`2!)h6q0_=ZrWw}RYax_hkssU1V zjC#?1-MApvDCOqFD@hk3)yRgpG6y-_h&M&&o5H{|oe)9RE6wK$QRhP47w!a^dZB{x z`QJiwsO`x`rB}*Y0zc*vB)?bdX}Szq>QUBqB*r!~f2JkgjG)T*VE4hz^nGsakDtx4OKeb{K)P0!|D`s#? zSc0imM5n?&xS6^NX3l&Q`d6O%ahBxA4Q_*jq6ZFDn;+7^+Z>OD$2_= z4NGpt3Z#Gs&3tbxKACt1p)jnnABVgdwf?!>;(%B=>#LLECGb^u;-by>5`71Gk_0sp zubr&WIpaBARKRyWn0Y{NXh4r#1^%wXLcmI7q<+3SiMrc{wB%$(-bbPvQgr$Vt4h}} z#ZqPZ#?Z6;>MeQb!A7fv=e5rTy4lOs2QnGcXL&M4`kwZyBA$fC55$cT;Yc)VEp5rt z3i#~~0{F!cz?eLIuyRqhCzfQ~w%{V;M z62DdBY&kZOpNH~l?lB`k@v|^sm|=0~CLAomsO%z*Q!DBnSGy9?2_{;|dhF2~K0-<> z7kZ*xB|?vJMeZAjxi#i}HeX*8_r|TeKQW`mbGY#ofhm)mrTM>&harC{=DsriLow&> zOpBrOLWOmdt#cc<2Wd?(ukWl>p^#fQ&U?{j@GU*#!$g}^_BC?|sUONi6V<3JZgtVIVg}x(j~$514?lcxzMFvxK7Tn+3U5oJFx=T- zAt+Z8SSx~det{Fk{}A_J9?O$IUcSKViDI!abnD-0E=WLcSt2Mxh3b}NztZ+sJOLQ- zL1MrcwvKR3_v=)wja`pU(|_%+0YyM-QV(cmjE`QlorC8RiUnyJ#2GGzQ4HLInKxmg zJLN%STMd19h1Qtq3LZJ~?6WI=Cf>yD%}cM+PdSBz-<-l14dnI!wwwU1YCV?Ovz;F{ zV53j<tVm(|p1xTS)I5VT{jgZQe=jVx8BxT@bLN}_9XI+-cFS?9G-M0}IvT}a zZwxI~qm8Ylm#*F!FPerO#EGBwKE6(Ks`4y2oaB6QfV$(#TH{&-YzZ>*a>TUs7jrV% zFV@MRU!ciAFwLafM1i{_Y%Uil8e9FgM{pFQ(3Sp=bs_#Tv5)gTX01g$Rx4Lfwy`bm z04wSbm9&RON*VgyJnzDTlWXxA%blC6D_Of?#+t$UX1N53?CBN9dWigE-`PX&umhB} zHH)YoL&FdP~HKWmiJi!85z8Va-h#BH71%r6@*}BW&|%W}{8Y)=utkX(PsD z04>ThTTN-o%QIJAAIzYGszWJ*vZ^qRVhMRMnS!XfsNO4BETf@X?QqWFe*2Q%50~}s1`l124IK{Nh3I>&*yk3Kbo_l?a(T3?JNuPnst1&IE(D%+KtiTicmwJhPgJE1 zu7CnJ%z!lAD7Wb$$9qXq`FWj(MyNc5oTGFqjt8l@OHA%*!uih-U*Ln5bFScwm$EWL^5D)sz5OqIyt;qoRnorziSrH*(mrRIS z55NSXW_I|CSR=^c{}M)yva4&dj6V+JH2pj#c35d>W;8rsH-#y=&MUv|(q*DOjhHnJ zVk+G8?}tx6jOt>J3pOty>Y^=36lXNXq?S zS7XZYEPTK@uC*fNHonY*D$CSfKfX)Q!PTI-EcH4L=WXzy{9X$esNjg%XHKmZN%)-A z=XX-3>moVdf!=(7>+H*(P0Y%s8NGU^zuc47=P|L_eHFg5IWdgg+H9_E{iSQ`)R2r_ck_KRQ76AyIh^K@4nEo>Z)P zn|tFsvyt@}_IEapBf8U}Y9+0Dxv|!NNPPbx;TD$t1xer7DU`k3X8Kx>W~$~{ch^j~ zG(n2oZb~HJBTGvcmQPBM%{$Twr`YFM=Mb!$nWBC`6`Jr1M6Hl4fOSuYAi0 zSUt0T;hbaTIHO|7&E_x-kBaN$wcgw0h1C(LTm&$+l(SpS(==kV^Zusg>)j^Ypi22J z8T!Pmtnh|H1?(y3Jn*+UMFug0iOxd9Y7lMc?&Khv3xLx^X&-LcA5{Q|fVkMju)KaC z;GM@DnH^YE$H*jhRV&mwFKlLf=^Y!}@X<3l{t^%hHaR88_NM&if!aSH`EiXK-7+)a zOfa@|PaQxcZ9`-kEvIK(lQT6+Usmzz6$~Nj2Sk5H^c=Z`nv(7aoHSMo@G2a*KLmAN zb=%q32&qqePaeChG@kl77+Mt@47K}uES*v{yKnH=*DJj{t;7=HtQAVtoYxp5vNn?4 zf?gUZA&>l_hTJf#xmvmXKzQ=GPfJe8+%TxKD-GpiQ5E$neAdfC3AO#A?NgCI;#d0G zcpb=#qr$FTd|Mwo1b;<7$(Co;re=BKEdQu_D|5HH&Vt2UbS-8$rxITh-w=3S1REGBZ8zR9^ZS&Q&?U2@57Og4l3+&x$-@29l_|z)- zeQa0vn25*%nBTIsY43&!qrw)}eYc@#XL7Vm>wR4>q|uB_ysXH+s|<_V^aHEMVsH6b zW;wHA`w`7WN)H@FANtG$IsP)^mFSypSu9EYyH2F^H1k&SpfOHw%0;9$Ke*90Pu}S@ zss@b`X8a|32_?=`G)+NncZ)KtuTz;#&GW=fy^hj)%plTSmGivHqUei0$3k`>K$RAg z$A8%$dY7mqw4M(GG{E`B8BM&DZ4Ks#gcxEwEO_L79WDxP;1axbCvHSIEc_^)mz5O& zfD73|ynicYgQ>X9nx77Sk-CayA#hh-mm-hZi8=4re7nmMPJJs5QLA0(T$kPeBNqo~Wp~PUmSO>R1{)9vRe?b08q6a^ z(5$x0#%GjU*@som2VwEj;1?svlx!0Yuxt+gVichFII-?!|BDnUe(jWhwN~83A(8{~ zgFK4;VVbVs~_BFhEh>u+&n!ltlNd195$% z%ZqC$b*j zVdBZ2YC-bnEwKS$_(&_xS7kd3n5rzhKU(*k{h6-6W2&vIT zBi#L=?)mOK045;K*!wx^_@zBSN_hi+Q$wn3E4kyuuvBLo!N)I2+98LN)*Rsk6xQ^GnuyunMnYHL@mm&Iv!A--dx@xW!sDh z>G}ZnBJ%&(Nbc{7FgsqftOb;V-!io!jv$2(jBpd~y<0a?(Z^vYrMVbt(Y+Jazl2zZm~D{j)zu zk{d~mvRuAXH26kp+fIornRSlChf93d#*!6yQp|J*8zN~NAk2=gX^D$!_5J`lzV4lw zp`fZFd9_EdIV~`3*4A$cj`SL?xyf+JbsOLrHVW6$41PtO@CS%1DKH**&u2>087BJ~ z<$JD-h-B}z7n!bHjJP(qTGtvnO|Zg>P8}%tfvVQW#i(sw1FD{WCa+&37Q634Qu}wS zkoBTMp=XswJ~gmBD4a=wBPmYeCq91buLL%CKW_dZlMM1oaddiSGPLhA)DtT8(~M16 zLF7xV{PYe{aoufJEu*|a-_T43Xt9y58RCjBelg0y>tx@^+bh?Ac07zwWx^+%95qC^ zs{{8?$p}8w&3nJZarsTwPX@hOEP}~(Zqs7o(5mLA4&uGUe@OR##?oou$e#d;AMK8& zY|LvzJ~D^b*sqMTu}N#6eq7$aTaeqOBGAYhhu%(FZd0eU`_*3*E9?wSO^T_V=d5#= zyi5$;%MiV`SGk`*9N@GjFccR)CLOhp3`F4g<-c8;o~XkK5N;bqpGutHQZ;tnxjn~i zT+5gi`D}C=y}{{@4GGH!dy82@RLi!ssa%4+``0MDC~INQ ztYhJ*j?{y;mat^$TzG_-=hQFovdp_{S90$GgbI7-Pxa*j!x|)ObUebs zslL3&TesG(n(l^g*Sfq~@5;VgMuBNQ@CENF$jLJfzlrdbVQ1ojD@c>RS!^x3%BnBO;2`ouG38l>ms!xQGw=@hU<94OxNWn)1E)YaP^QO-Q zHoF1#11M4FVfEhEc$qx;i}@t_dCP_4K^6oUMCB*P1cBL*L*0yxVb0gh+C^c_O(chq zT=on$oIy{!KA=ou2O3Yl#TU5IFK3H7wl#WVkt?_{BysY=%VKqUBltt8yT|0)As6_o z13%6;lFPsPYs@xXoreoTu4SC?r&Mf?I=!A=cC5eCU)zvyd0zMlg+)V2hNaDZQ>exr z5}xOY>=EI2T2pC#2J5u#dh7V~9{Naropkeg$SP6eu3cLj!R^`lc3Z8vo_z;y{IaWR zE#Dp6FM$F-HW*V5nuWAb1=WdqQZuu?9D8z3o7IkYl1b~x<%whOLExt{u(y4ZUyq2k zFQ3DZP%=mF(ORUt@A`av)r&h_$x_0x+Y#^nZcJtW^i-53sxx}gW-E}_LEsi%HJ)(u zzV7mlCSxky&8?_9`!1TILJ=o3+WNlPZ0U}Mu$RABJ#2Is?LWz;h`F!opU;chwFBW$XR5W&)z(N;eJG3HAl$l_2UB7u zb!~qQqTuncW>W?m-~~mrt$+VrX8{}{{0Z@u7e{%S@wb%y??!6lyT9mXzi5I3hNyJ(dC3>9aW zR>>Q4d8v1G0@M@CppK%m9RW@GAid_22B|_*JR#{lj{i{F7;iDTX4U+Q!}!Q)N&5(539)1P8p=Y?0U1ZjY8-rT++Ezh$4T&wf0 zS;dlux}?}LOz8^3O<3i)@hb~aY96lfPP2AEBu{Hcl>-YeT#^f3;|VJqq?f`ur~Q@z z940{QEJ7-8E?{1>Js_idU3sQ>R(Olwzw7MBRNUjjQ{Mx1^Nc3akAV2P<|(8O<2rjK zh@)S{B37Y9+2eVDbb4q+cs2Lig&J+OviHohTb=V5^=(>8gIqOygJT(e zgY=tqCbRw3ENr85Zwum8l}*W6^e344+kr19zK&fNTU-6BHkjCn-yRlwwuiYdU=J|x zIWnZRy!SJ#5|I#|8eyiOzrW{Mqg?3H8fdC@=#u1t|5#ZCc}U#W#Ws0C7(M>XN^{B1 z9{B-jf5(L0?eu1eaXm5xq*Hgl7S)ull~`9FO+s4yn+}x6E8Um?$(=yNKRqh`B&vT= zZP6~|`AhvD`E@Q#HDHt+0hgqzezVBN=M6#yp(x~RCk>gZ^J4~2tHW(3Z}j&48gkQh z!=@^2A1h@O77Ps_KEh>yy^);_)OWJKxUHQwkR`n0KW7n4-Uj@LRXh0Q)LZAjY(-J| zl&FN?hR{k4mE#=Gh=p8!3QzHQzKzr85K5@^$W+h0i>oFYN%dWHU!{Rl^`{t0TkSNn zB-Yx*XGPWRTlb7~n10sUiBSWI_Nw{daqX~Yx&Gn);4%P+n^7jI8vQMHS`L`Ag}ghf z-;3AZc3$e5%5VFX!ckIuz?ouEx$?XV`9Z|$l7e)ineCWs#KxqwT3(F0#cZQW(XE(Y z?lV%@?!jI4W>9N@!ZCs{_&$6s<7HfJ|4+46gA#jaS3(V^9(K_FA7rWAyNV~NiR5~^ zan0R88}Uet93Sz@YtwkI^)l-SD&0VGvEQI&TqV|(=EeBSRwj9GbNuR*V5N)6mEMzu z*?8N0R73lv{|X@Zcf%E@<$WyhN_$Bud>Rh|WZuD+n}fD7rCT>7s@ZmzcfLv3{VIZ0 zHC36uHluL?gkaRtC_+0K`;M-@sAsdb@y_S=(41O=8fIg@0;>ZC{7n7N(Yg;PZ)CoMk#n~lZ; zkJds%a7P&cy?~nN)B!36_Lm0I=k)|#u(|FzL){-mlm3uanZ30rPh*zeDQu|wVR(nQ zodrBfIGmb&g6C)r|6l@F25uG&_gd9_es}Y?zf4*PP2b7VY5l6=$p7!<7>P6g`#)X) z|3ykxZ>0tdo|%*jKiJfN_GfK+J9y5Tbn4POP4326@A&7CK(QpyN*kA{k*X$R=eAC& zd!SSHb1r0tk}}#ts~Wh_h@MXXJ&DQXUTx1@QAu{Kq)c%h#CCpX@JE6Eu)eG)x16X_ zMPX!J``zNjOPN=xGEKT{Lzp>TIPED-!ybHeH9z~=gu-t@kHaaKS2_2P^=>_VfIqn`~@)0N-!{sfd_;wX&vxr@<;ZP_5og$Yfy3jPqkUfTz-1&Yag0By`#T~{L z#+F$+X(giM#WUPP*nBf*M%f4uPbV)s|N1KkBR>3_w*- z0W%-(VAzrRe{WIX;f_|2N=$!k>mrtAlhBf}V%l5xN;Q#Vy z6?y)0#SOc%>&YU^M9~;SuKwDIZ{)siHhus7t2ex1HZRQS-AMgN6kzK^YH;Bayirre zow#1Szk(;sNz_h*Qi+X+cxz6HYL#b|K~5wX)sgKpW!YYW7u!=((sa5g;SzlKpi0$O z*EyUrZ>fOIgNNJYi)EjzXf66oq+BMim7@8gNGP}VY~p!XvVmgY=Pwj-u^*Njb4edq zT!EzNf~$g!022%HGS`T^+Eas7tCn#&R9?xU&`fJyh{iq zKYput>wg5kJywvQwKuLRmWTfh^=*FE_}=Z(QcMe6jaJ1ceDB))48@z?&Xl zev?q2=YPWe>X8x3(Xw#+j!ZR^1*}PUspn&Ajk|aVkm=v=Ba0!_q5c^=Xjw zJ^f#9R;co+>|0Ju;Z&Mh@9JNe$xKDz1sDYB_m!v`WLOHzIBzs@q)=YHiJ$L;nRk4X zf@c+!i*=+vaosWG*L;Ja1w<0oX`t08kXf@GT&UN-ZmXUwlDdfUJK8lCL>+r?-$Ar6{pWrx5K$=<~g|bWK>yW0P zvifHlQ->B7I!UW95S~P-PhO53R(MLM9A1(2ejcJcLKwWSEq9203Wov;rndH49l&S= zXQjYGXOOFeZzuwc#~kG*{wUu4zjCIX^a74$mpmhW*D(K`oOSvgBffK^>{D|*BP{K_q?nuwz^*$@yFqcArMhE78E%a_gqf_ zJ-fuYoEZnV!Vg{1Qd^ry>H1(=6A7|N^bXF_vKnqb(DOND4z_sCZNZo5$=yzzbifO|MvBA$mS- zW;;ddLDWUaB2~oHU@_m=iW}98CZVn zR6v7uM~-L{R0?)|;~R z>-inOPIxmxcW+(%$U!a`-3KFKpt(XKa6PVP=iMbJ{z1{QmQ4t52d&YkEtpH;;B}YClUk_ZV)oe`nxVbn44$ zN-e|P(-N>-FeklfrThj%)7+`$6B|{kJoT8p+k?Y}4%H!eE^fWphF5iG7_##`8*(=r%%qLO@S_!i)a#yD$C!2S`! z{ad)xT7j&{5}I`M-;EUic|86op!1_$fA12AwGp^~zTi?4h}4AP)Um={ig1(W7q*$K zC)8rAp{Kql?B*Pq);-7NnV#s@kLpP*-nxmO**d<-b^*ki5A5J_=~cMT20X<(7r}w% z*Pk+b4Dx9APmwRxJCcoa>WuS&f_{-2Vi2VC1sGIHUt7`kO-VwR@4ZcIbNmkTP@M|v3QaymhS#5M!#YxZk0X& zZc7K4R$Ql+-nZ&y;YQB@wz{l<&Cq+m?sn=ls^1j~9{*=lCn3SR1064Yz4IS;^uG&V zeYUi1@+?l?(#XTxGv7J6HDFgS{JdbS88*Pes>B9rzN*_$1)}WKTx%G;sxkR-! zja13b39zeXL6^lQ*GNj^TB+H~`r0+aaqh!U;0Z7#bRMbb@p9V-xUGo#6M8=qKNli1 zKr_wwpuEQa_HMxZOeSf?9!o@W6X9wXSMQHITdYwYNKd__{d|B#7_yrrq_`667I%_pg zf*_`CUK|VE3YdHM@}-hgPQZ0lEIKPdCS!m8iMsBX1h3vmsS*0& z{jD|O%P|A|vbL;q(CwUQ!SIHa3@(RwaUV}3Bfhg|YaD^9^P0)!y+5!V1#Apvz6DpE*T3+Tx=v++*=5TZPy4Yrlp2{*hMVbp z%i5IO(Dos%N$Z`$PJbT94{vH}vOC$n&mf>TyZN7KM~nJJD}c4oC8w6i>u9GMoO&zt zkYnXZs!48Y?1$i!_rm9CRkKX#Yx%V4@7jHMP2<#G`u34?<@HN5AKxOH=z@fuU(vs% zK}72xU1D>hSN~5Q22wXd-GSzc`{ycsXdxufaA%;HW*43FWgj26^zkygl$1g`w7+OE z!d&UF|Kr6Em+1aFp9`i}e*V+EHS+iQsGhTS`(MsSm!~h=ZIj9QBpH&e6sBbfWqJK% zh7jD;2+03c=7o2|_U(~8nASEjb~a|r%wVv3bgT-8{ZJgWT{FP7!SrW7e`>9&<}h@X zgElURZHRvpRF`C#xt|Nu5V0{Nu|ok$b0*UScD3S_{B{T7W*Cjg9e( zBYW6q-fK7&L};Uti1f#Lh-RfMqm0)uQp>KHE<5z9+0I>!_i~QsjD6=7d!f?J>8Hc! zYXm+ei zqAw}siXJ{Y+9bDkLs{(XO)3;TUMLewW1(JFR2LO16+I}WNBiOeGMVt?UdpcVWi4OD z`HICak@TEoc~gzbuR`yc5!$Gys3#al2Z{sxuCYo3 zl`13X6imF!{!eAGeXcMEy!;+c4G#9QXzm9{F3NyNI*u9(k5(5U6zXZ9Ix-A*&^#T8 zip-ad`gFI0`qEf>&sv0=t39*q_E&jF*EhCie(r*w)4T|v-2|2c|9WoO0-d5T=ZkO< zKuHI^?!RCTPu@4V2it%0M^b#z4xg)~u}Yt@-$gDzK-&rhGhC##f3*MN9(@BHP0a5q zwJl6N^LiM zsqIuNw5F)-lq*UB{4N&`SC)!4_S{jO~(`{P;A=CW%i1psK->_rEg_#;N?`pOB$(_jl&GC{Ol3Wu7bkt1|DBE2!P4%!(JXqjJa%l>$z`C#Y~K!hHNHH+qNn-P!xkf7d9t3WBQseDZx)e%B~E zea>P3LsQ;oM4Q9=jy-Na^;4ic%Poj0EEAc8n60aS4s_!^6kephMwYE0Fn;}72jmlz zCoxzU2`wTT$+9g#ViSUGOJYq;*qzMvPY9394%ybjl7ypwh)Jz{aJM2QV!N}dsSk16 zGl?T{ekmCZcApT4d8wf=mZ7KLxROz9DF)t!XOpb(0P%GW^17dE!D|?l1B}wRg%BAv z-ePl2=DlH$v_Oe+;=}2IB;W<@mkZ_y3ZqnwohPYDABL3UFX|dK}kggug%xagZL>O+EDpG00O`py#mLzQ)+TohR?{1kC0Vp=l#0N!y_M z`BWD{^E-~VU2tUm6C@Je{*I&P+^PPjo?GyokLO;5$lkQaW9fS2?L~bs2_P1s3{q+Q zzr`Z7Kcm%&ux5QnVi>TnhbN@hOA%1U&QX{JC9Kb4=8tX&mjnWf84l5<00!SH(Ec+2 zTZZK7U=-lY+a3We`wSe(y~5hNR0&E$ISJ1fU*En6gE9ZvOGDdgV|9EE4VH><5ICktv`++ZO8*F8 zg8x5MALao(eHqr9R(YdUx%w0Go5c`JA@-xmkX5!R;eP-nBlx|dqFfLPNxau6KB zPp?Bo-=I3O(3!dIO_lf4F&dY8-nC_%U!@tafdkh0%($m5TFQ{KfW@D35lv<(qXCki zT6%q~L^ab|!&KQPN9Zrb0*DK=LyPLTF~C@2@vIf}MGfX1PdnVICXP3<<6T;`p=5JZ z1ju)#D+B|+Grud>3nr95|5>@hephC^=az5&3A2B0(Vu7aZ>h#SfUEDEa^alLcGO^e zTp)nEJ8%jWS$AJI>l7-E@t!Hai5BGn^wb6LVC@CbW8{rGCv63@ycEo6Xiz|^suAP6 zMm!R%-CWHnGzZpgbg1t-)T!<=5mMpZ%>N}%L z9tKf>cI3;%^7|l6Ay*gWFa*9jH_mnW)ES*k1Xs_Rt&ysI-DobZCt0TT3s{nScXZFR z$i2Uj=>W~+*gNS~+LCcaZtb-FG5U4QW$w?Z+&yi6h=~pV174HkLXr>#%<6_kH<*0p zU@Kkp0|xP=hm7TXl3&3JcC|NaAE%?0 zi-2BHmlaGAeJr>u|s=7XX$T|+TEFezTM;_BslCYbSho2T6Zz7&USB=Qs{%mm@(LY`${U7!5=Z0Ak> zx^nT5YoMLT34OU7-Z#UXfwBN$1Yj}4-DN$5yq^RC8^J_}vYo!^z0&_K3z9w^72%ld zR}~OCzsAa8By0S(cPm~zl4glXk(SP(s)usYWLLd(MojQTMNrQW;Ls`+*6b3((id)Tyx-NXc zVS@+c7KuhYwDuZTZ?cz`eQNj%gsJ?L@&|7zmH(Z@*Q(xZp#MLwR=vz+e@4!CfWIq6 zZqa+zsBP#>d2m%gN}0QGaf7QrPs#1elD7!;9t{yGUnIR}S3Xk6af4Avnoz)9cR5Cl zh}HMO!neLq1NQC{Y`EFZgj0w;K}_1d@huzWZmwZUYErPf27zCJ7_1UR4tDW4YDA-j zZHtQ>E9$5^zqDny;1>I4gO)jQx@_X?M#?vw$j_{w(rFj|FFI{Y*hjN>rnRf;JN=!! z3cJDkR)4W+2U9q3`-D#Y>Fa2juOg>;tW2C6U3t%Z#pFY&>aFUZJQ{EkdgI(E~s!kd$yWwow6hl9Y+TciOVW zN)8$L{k+?oQUC%{U}P%)OIC<&nxl4EjZMg6v^rUXdeBovShfqSzl@VY2&Yg<6F&tUVrGYygs0#=(Gzy7 zC3@7WO4h*6%OTX~C#Xh8MB zT!}>4*PwaDA}j=+f<4ohYlZd8-%;{sZF(VL~pUN!s=DIW1Vt9($ybLwPCh?<<%;J2H~;=WzKh1ErR`Rg&Ii<>Od-(SZHS6Pt8hh3$GGbQ3^IBVh_s4tWGTh)j*Or<~ zEXM4QrP?e=rrOEv8RbZS(N(QWUi~rV*o(I5cg7-F9hwQC)QC9VUcr>MnyCKK9BYL1 zwSvi$91LpAbwA$6Iq9fA)#4Rl+(4@~wLPe}gO zs#!4TG^*xqlD~0U-3`C(-k&OQnQ2Rx2K&??!x~<1`E&;2HyY1n@zip@miz6OCN0XPq{fwVe?pE>&=o5`!Ix*tFByjUH9LZcXGbucB5t1EfL|e9&Bs4{bGpD zoQj6Hyp!vDD(xvIj@v<|uISLV=vc9HK*d4d#?%fQa=SO$v6jbCvYIEcYe9Ibb_LGS zK<0<%HXnA2oX>Fgrrllr?ydD|a+Xp-xn>1W3zAbTJUNne`#CR>Q%2hWaB!@9WM%eu z*Lp`;1-^fv{CbM7*llG^&a;jGSYu)z!)8?8iWM|u;U}z^29>T&@Km~D^czA9Zd<<+ znEk03`ru%Bti*UFuKyEJ#QMv0lC5@m@&q}PzusxY;SVSOVVKR)U$Pggt*gs0DYK$A zLbBPxjKx_B7X;Mz-S~mdwRX8)&{7;PVW}#R>-%89dAZ8s#pdH$DF<1`xv#O)HD6!4 ztW@Z_@Ly=fNaz0eI`KOu z=SUb1-^t}|Lizi=nYgtWR{mU*J%HiQ1^y4kT$&;63r&E{#onO#;BthPf9UY z^nAb69h?xn)?Yw%7Zf7vGIiL*QRJcyg>xC&o=tK$axc^zY8OEyl34KTw9TOpaO~ZQha<(=zojs*<_4;R5X( zb~Acuk8SAlI=$mC-h3iRgS}ID21#FH?4q)7MJiX#jrhcx0zPn&k+2#QTAD)}CU^kq zNBr0I*XKK?a1)Rs?*-Nq4W7YzV2R{@ou+npdsJ?F)HEAMRVVdI{0&9F`<-Pmuloz? z5_}d7E#|PGvi;OgPsbGUR)wCT#!_7Ib{ATv+UD3Jnno{51qYj4XWj3k`0BZYvBknA zBgWvHMX%Afq198(rK`Tb19K=TUT=|&x;}-x5#0WsH-la73|(%2uc^uMxYbe|&klMf zeag|_<9$RAP}|xFt&f(P?a=h?(qpV>Z6gf1W!UTl^)JWU^h=gIFVi_buVxi?dsg#n zH2d#LFazr2>LSKRN%ctz-9X@iR7J$PKQG<)93k{d#k&l{g0s%K{-> z_ZR>H4cjM3CYsm)2?b!yvOiA_!aJ#h=P*MjO6@o|NbJ zgGy~J3A}s?zZ?Y^Cd0;Wh>@{)Y|pf{z}!n;kY=Lc3#A zOm$$*>2}P|7p75%pEjMLd>!d>C*Zt5h{x`STsJ&Y5L*SS*FizEk2qr4-vdB8-6Cg%633 zW)3_LUOv{f0fd$l<>=BuRa*AN40cD*QDJpNAWgP80C4QYltdpFDWBg0b2@iLn%XRv zu*%{kz*r4Xn$eGc0i!N>mvu@ZugznP&XaP*I0OliOY*Wc!(+uloG;f(ZG|W9ureEm z%n#ug%{v(qQpx# zLdV*BPh1FSyfQ+XXk#KX!K;wxpjSe2GAdd7a@{5c5Q3RnKk%W!>foJZ%}8(fa8?=! zn+@fy4{__d|MZ-T{H15%0$g&Bmz|a9Ht93C!Ww;=Q@_i4zA4%!hI~I0m9u4Lpb}gB z7U>nDtCM|z=Tg51@9PUwBV^{1T6>k>vy4+oHu4!8^iv$pGv#O_Ws~(BmM&)1$)Uo1 z+~xWhbnhQb#t*a(?C#>N-e=&I&c;a2N%nqhd~iD0-#psbDvn|B>ob8zWUQYlC~!e{ zvCK94s_$V^eX+6~9R~QtK>f_M5s?~b@M9$g<+;4>gVU-F%l_$(*&13iF8WR&}C-kKySJDwydJS(tt zMS7(Yjwd&j2jn2h*J!0}$1-c27JBD!3*tHx-VOl1R&2rcsVDF!lp7 z!zGy)bQw>xxk7}hJVujJztPJv4H&z~SF{(Xech3>|IxMgq47OX=#6-L!X66fFYcD> zJFRv~egG$eM12H`7pRR#io)Nv&@*V9TRLw5(SA!^J6yQJm^k7bLTNM7&>YiZHWZ?` zz-7&{;h{V--&tkoWLqFZ&u_@s;@&Vytq%eook{#q9XO~mG}bl^i#*ybE46{jhYbI+ zQTVH^#;?~$1ai7fg)IB<#eJGux4ux_TDLC|r_#^1he6-Az-p$hXfAJ+(G8NN;dHDl zLOC!4{5-%5Jvs4|V~F$@K;#R(*X9G58|3=r^pQ8WZ|vx*01b8qe4z z$ibBibUwU~uIU|1Q$NlwxxN$)qM6rj>v@ak6`4F~sDZ13vK3+`tvknJfs}cH0V3 z&(~vhgL|ohOK;$mXMNt`XqeamT51a8hU@F|@rBwUg)QoH9m+fW6(YkIPhC zF*A@u&nG^9iw1^+rh%cj-ot&`+8=IP1afoiN(6#Ust9qV1&WXcRdXJWO`79o?@$GjHm)#FwBgFu8UEH>~K{$}b|QtdG7hmi4uxoddfa1GNGB4I&d2 zW&(ETC?jEE8*Wz_O5pHwmXN3-`F7M7UxN~mrKE_pdM%IVFgu|?Zs5N!gzmI(bly|Q zJD+L3O3}avdu8;qphg=o9TT_!n2x!3#Z%S)?09$)pTl$+7$SveQR2-%Ug1kpV^`*P zrZ(%l;Mu1PgR)5PHg{6Gz18i~5 z;sz_rp5j?%fR!5UALajEJYnhVZ}{@h-BD+L*^aR;B0tFxZ|R+hB;5;a3>0Oc(DWfr z@8vNU%qXvMkPS3lidFI<| zG|Cb4Bb>S>@_?AF4N&~1@6dPI4plfYe9%W{)Rr*m!M7SN*ABZ*+%8_#x?(K-Rhp$W zj#(?MJ=eWgFR>^ydkojh*AZmO>s6ZqL4^7oJt2kn3KX-8+{!91LCjnjkKm={PXFGv zzSMM5fw;|ae8z5uaQel-0+eWKJ?e}1mgy@)s^wzqr!Ck+#oZTm1gxsL^y23W>KYkG z3$`paD)8o0sU`G$y`W3_{%;u8oXCb(9ITDpx~o!o-fyypBca=YAA4UzQe8#}%J%J% ziwK+CGq^0hynHpMKEQ=FbS+$U^+3NubDI6~5qy5e{*iq_wZ47J$Budd$Bk?87!EEa zj7lH!f#h~m4-OkmPe-6a|d_!%nfWSQea_YQS0^5d%)1JV$!@SjbpxN=^rsvUzIDnN3M2H&;= z=M1rsY5@hctnJ^ecv5n~>Q|=xH&e2jb9X;W2AgPWS9UAQM@Y$u%JE)mWTcLMV0Sr( zTMGYsDuq_gGw?ud>|GH)29(E-i6|&4EuSZLzpw!*Ds;Ke3`GiwR^L5#7ifq>_A7@#Yg|W9a+sE4&9y3X13~S31rS` zQjs~@xkO|A1SppK6;G?mGCWp47oGHp)xu}8LPzB!TLx2{n-x$zXSJe`S3DM2?+Mw$ zOT0qZB=bRPRdfVC(ST*VbjyYBju7WFK@_VK>-+O|4Y?fx0?Q+8&d`M0r&kI~H}@vO z1EoMTFxfr-F4+TOahC=uOB(~u=G`%((VY24QenP^MNR^h{0|6)oWT_Je7UaI zA|FrvPn=!Db$qW{EEa@p_txu=%mrM9HAe}pYMMoDNA+@JSx2vooLu)wMcekhg5=7< zf?^!Dr8}zjcKGUBYCL``#hb2E(FfUfw1a5nC#VO;f}d!eS5u2NAoyrcA7=2kN!D;} zyUMl!T(_}HuKQ&+K8E_jT`jYIK#oXc>>$r(gtF_4@!Wj(VHhjle?DFTf8((>@tpM26T+N@mVsMPXHm6sVtPv-_ER8mL3f<^? ztJ-qU>8|#f>p~&4ommKDh1?1`t2e_^%3m`60|-0#1cV&}V9o;G)ksim3>Y5LnIAgC zEVZ_sV~qo`JnFKQ4-Jos->n``GYna1E z0-GgJd}I8H&qe^aAp`4vF)XZCRKWK8@;jn#I@i<>1u{PPXPp%h>e?!wIU@h_yRC6W z`kZ&^?fM2>o|m{8jS|PKaKZZfQYzg`HN+ohkF@2<_*R#-^LxFp!(t?1wiTD*xy^$<7 zbJR+f-T6Y3doqOOH#n-7#@_)ypVfNc0SC;WyTZ)x((q(}5x;a;m+iJ}hqgmc2PTN$6uLK%j zfiVqNlPz4}!CIoW5nA1e)s%vV3JGi_5t3X=46cVS0Tt_h!lLuz{TI`LDZ+qL7G`(n zKyW;3rgJo&(tbW@q9GXWHq0XAI!v(Nohre^U#eJI?M$qqWv~`64Kfy6t16w1g4H{| z{`6IC@2-6>6c(Pc_kPu7dp4T^a~7QATh&j&skh^8QLk9%0)9yclhRep_0$8$G0h;M zyClBYdPGAB|GR9Kjpn}{?Eg#*yK{lMHbTQq{h@yc!=$3xIMeGEPPx!=-kNiPo7jY^mRCjsS_$)g|nia?#7We`MN92Yg8CZ-87jeqbkU z!5dt$9@p7@6g;dKm0cX>!*bAk)$8}OICZ@#_t$w4&-+xe;^g!I5|&%anU>S<)2kZD z$O`)36etC0S1jkxc(So4{+7ZHU?)|FyLIpMpHI{93Y>fyd;twL)?vU|a&W&T3I&}BkpMroJ zS}`jrJ1%>eNo6)>|MHEc=k8%F2P?$gk40WN>X|G+iw+c&*0+ySyB3hzSqgQRdt)`O zXmn(x$$~U0q4D4H#DEq_AfO=$(9SqGRq5s+v)8+XsXm%Fi>KheCd1;p^|H1GQUCU6 zZCGi8~>WJ#rhEap#?msAM03+1*FzbA9jaL;gAoVXgt9*<6VhlD^4R^W z=q6aIG~oLE87wP|9`-lybvTacunDAwrKO1*~{pP5d(#4oO?=w>^}YY zBc%>z)9{GO<<>GPPq*6@4k1Zi6*3tTGrbAe#|%d@KEwUJ7P%6D1$!5i;C#;Gi<~=N zyJCBOgOzxJ%8PoJy5&wr3hQ!=zrG}3$~m5wDOb!L%>3fA<7Qm_PVg7yOe#` z0%Sd|P0SHyTcW?Th&d{7yE&Lvjwt&7`zt8Fk@BpGOk)iyV>MsRo?GtmEyH4`Q+fMO=ufJ`1k$?WZAQp zF5`QJrNsKm*AnbUW0Lkg(S2(aX$OmlfQQvv+!HJl)j$;yGok)&bq{-F?DY8Jbjc5v zl7<1FSFU#}Z6l=p?8Q4Q?5bqEcN(|iU^?$tB(~;>-Jb&A%W==I>`gV>9SS`>+jABV zY=LUhB92q?B_Jgaz8q|1)H^7%D}eckKtJh_B+QMmz!<%JYeLqA{ZV;cSI8$Yh8ER( zNKQsu`zCqLRqQmIdFOXT_>|l&8L_z`L+(xJzT^HDDbP&a<9P`d@YzGGH9%t9!oFAg z=!bpMiKh@V9o@wfVxet8CR$U7qkXSYAv-NDKgH$pC90`Wjy~6$4>dgJI(&GO;_*fm zBAajB7FJ@X+O8M*X!PAFA8I6SkavV6KH{$g3s&y&;0?kxL&L6?;A)BO6W_iaaS5>8 zC0iO_+bVrE`07f~{3uVB&Kf7Znucysam9ACIBpn!c%fYE=J?;E!wShx3)~@_iZF@p z{uyEN%In%IJw}Q(=-itd_X`|ebna9xW>8AnmDXxRT zv0!0OGHGB1ow&8p6_yl-TX>N;5?z*;ExvK@w@51VR#T3Y`$QH3az-=9`nnB(x-|t* zxA!C>DI*@YIes?MD0s;V!OY11{2voc ze$sl75RC3W)q2u8?o?}j&AfIi4!$~+juWpYxmUuYcZ4mH*x-8v)Ib&YOau4vtgHVa z*%`yAT6RW9pHV3i!phGxk<_n3W<^`4QOd7A9tc7Y+3#q>LaR0UQQ>{c><-hqQ>{BT z#y8>+6va1_DiF9_*$wRd+=kW!==4tB>S(-`n(_nSB27q=Tn2B9kclf%@2&2l7fz zaxzu+jhSeYJ}xUxS962kCM13IMN$xG)LUOhbEjiBNQt_3V-!=q6ot?AKaviyIP+h< z9rho1*QdDhOsQX-;v7`T+&pjDs(PmCLO%bc@moLp#7e~|jOgu6I~QUkwl3N~1EAMV zID8N)#i(0&&bhI+kuVL&v7lt;7vu>;OBd(014TV%t|qx^Jpm933B*X4eHnCaM$LIS z%b&_USiUp+!&beSF0%En_OlV6C4JxM1h%n|17m}yx(SqlYF3!vBUzmm)-7^nx@lVs zBtM=CV~R?YP{40!A?vR$1`BrvF1~2r{2ZO9V{4|(@ZCDDD^pJR9(-saShwj@SM6ga z5!`Ek+fhBxr82o|dA*(-;uB8rF!-{mja6H2)Jg7?rdb}G(uja>!*%!P(8{Dv#)z(PIK zpS}%whLl)5GNxM_yKOTIVT6>vc!KwBZL?R-E2BEPCU{U+FmpEa;3riQ2r2vCl~1=p z9&+ThKZEfY%lX5V$Kj+$yXxn>%<_F%NF+q#{nP`2IM4+`tSupCsk?|6RKMl$_z~pDBTF0o9JRCgo9Zfr z3+ZcehcO)u>=;DXhMO#$jJUQMPcs5K7?QA^5D4Y*kGut|wtJZ4(ZPWh==j~@NZOm2 z*o7I>F^r>dAs(jS1{V!=!{Hl+MEuv=+&4NYN%ltKMmr^Ov=e13TcowmeWS6a1p?-X zyPz=tb74V=9#8s6#*c3n-JESLIK))7v_WDprZmGWA63FoZ|v9zUx8o-H2(t`96mc(=n1TArs#)F>W>Sv}ux%oGNO z{F+_@&&SACdRp4F3w2MbAHw?W%M(-i`X4yT*A*D{)4^^XO z+}0dFa1F7s_=69i3biL-^OZADqsxGx^voSFDDgZ55UpI759+H{ox<+9%Zv3Z%Zrhp z=O@7Kdk^q#2m*UTb=utUlY=NslT&uz#Ap;qgd<`Rdktl1adAbrrPb2q5W|#l7E^*O zfBO+G&@6PiA2@Wp_ATPoSB}1E-Qw|+rGr$=2l#o9u`1+=ua$9Dxz4%4G+r|O(gG0F zWm`ZWS>XK4T?Do?jC^cIiS^8K$?57}Pxi9D{o%)t^I70=hDu|hBY+g^S$%5SBsb2q z+|ircgPwZ^K1Sl#x^i?u5xN%Z=@me#J3~Fcb4c8nlcUCvXSB1@4j4IGJ)HYwIKqzZ zIFAfPEdPLo7Cq~V9>6{mhiJ>7ZS;W!R_SWS#5cji{yAJB+Ij5^OQm`kC}RIU-42G7{6;1FzyfOGOKQfDI98HspLe!5HbpLRjY0=> zv;Xg3W$SAvHRC<0-|aZTD*n1Ze^%W3nKj>TGF;bEtBmTkM1bX9LFxRdT+X>Xf5QYB zH+sY>RVq9qG<`Y!9IWp-cc8;fs)CKQXQo*4ZxJMOU>wDRT+AllZjRZB?Nx+2d`_pz z1#Bo%M>n1!2b3qCesOc8aAy?3-hjN1(@2Y(mAvM0j{Grr`I&0V4{qwMh|3HL&Hw?6 z2kDTfgvbC3#!=`E0*+;##=q_NF&y?GpuTI+-C#|2r>(Xm zQH8u(0GcIk4QN}5@|@>SCz&=to;lQj^m z5*6}Rrt0kyuXw)Ni9TO~xvo3GGz03@^RlCqxh*KO=U>|f0-j+pNhKI*#qE`jCdXd4 z6X)RPx{lC}%4(lxQSfRdsiM^Cw54mP7D|RIAhoY>uPRpVa8CQZ^Vb1SIR@D7y!u=3 zWfTM?4yi*)p9ub&^e6+M`uNi{IRi;+5jF*eF1ZH!JFf2W#U#f9CmY?|1Q2bK$L;6a zQdhT`b0BY{1uz?dF9n^=bsKU9K;Z)q$y!V|JhYTd<^!jGXjG+dfuvF6mt*%geEW{> z_1m@p68yqboi?SPHeb3Eb?2}vQ*OCtaNrHTlR&KEo9evm&v&@}GZP=U5Bhz0nQnm1 z-Ck|-3Mzpe>5XR3>X`*0_$EB9x9S~dxa?;pzJ<&+`wUv;TL&o)xUI=2R%q`J+#RSVztHo}Z8^9AH{9fW=w_=IT?wIqxDU{zN=FHl3ba?Rx#D%| zIC~Dt4!R;Qy>0gX_q&1P1(pEf7&7CLF6}o4Ac0jfm++SBI%VTGUZZ}*ebS|7T6Q#h z-=7~kmHcrU`pWtzc3$vWg~}IkFdZ1O)ob!XO;CZLedc?AegT8B@*(j{3cb{jvsk62 zpPFc2%3p1u_kYn%|`$1bl@L zFK9b{>j0?i@~ahOchrKm>okH@AwtQ-$(*O0gX*Aa5p|X((?!76#A}%WPl!*NcIb=Z zP=<@P%eXClMS_k>XZg?pEP;K&1wW2oo6cciUA~)khs>(6XkK#5Sg26k=dp6D`xKf{ zJjQ3;@?+tWF#q;o@m7?>FN}<-@AmD}@xPxoWT%@;fCbh$k;*o4kCWhMMCLh)#lW=0W$Hs zzIFd|#hjlpeh&I}fYSTm-;DI!EAQK?4Y) zARBoBq#)%cm4#wl%=?B4AaNuW0lwAvPeIBX>~x0t@2%b83oNqHZg53%ZUl25#~>g` z^4S9Xjy8~P-ctVzyNmT{WA{&|9^5Ig$Ozbf4-;E_r}0@xH9a)dXhT&{ltCIor6AO& zj2w8>-YspJy~LYTUOu>y%5D`v(v=ZYz_*U}_>%UiwtjAPMT$R+hl13u>&NRG_>n1v z0;U?B2>9}(lLZ^dPxW5_fC+?hEjbD)EKo+x##Spx+3ed5ru7e3-0>UJagqSc|pK|-=H1+%SofBZ?;L~Hg2e8X1CyZP_N9ay}!!tkP8Y(!HSY=kbuczmz zINMNf0aLBsW#I;hvKM(gnS4n!^R$7;%~XlcR2nngw2i5Nkxx1jAwDM<8e#YqAw6mt zIN$R&-8cK$Oo9cj!ODjL+-`hjX{RfaW@MR|NF3hw&yEHoEQLX#471=6+pz$Qt+rt* z55nW-Cn#Ef-K#=msfcm2dkvRq;4|TZsN1d zqz((xs!d0hsngj=;cl+McJzE7)Wg!#D;e#;b}VC3JK?pmYyAReD^kw;tLOJ_9a{5P=KQ#YU+8ZuG!~*zQcZGJpzpf#&Eu>>OvdUN?CS483DOlijO4#fu_iyf^2JU^R8V+$Z0IZK;f%H=>Rh)aB ztVQ`eK=6HgRCIojZek(7L$(~6!qe=dHu!k&9L}7j;p0v@1nhZH4cWR*Ib~dfk(UTv zkpjT#%tDWg=Axk_)5XNE7N{&DQcD9-bwE-rYGArOxPvOU4&R==Jr6YcfVL#>WyX&> z0HNK+X{G3y6QB1F9n24XEpsTLjc1RY^j2cdf8;A|P6*!Bo9A1lg&AHxYc1LZP8ED4 zJvTpZcrfw|Xp@Imn2=Tb(P-K5N_Snaz3)EZ`~LP)l(JG)PO}`E$=Q8A%D3*1B8*&B z_7@}@N3&B8BB`*kM{8%gxH9P>j(`E_02S)+V@jVb^rZX~Qvq=9P!)wdf#M->@yKlp z@7zlyeS9-l2WGjb>?z>;b^BI@$Z54ZpEo1xa9cf;;fpLwqBrXD#j*8Z9~Y~w;ltyd z?zm#>8~Zuz0L(+Qcw(Vh!tVPi6>-r+Vn+v-ZSx$aDbR>!jjvSG5r?8mVE5^wa>G_m zZLS?SESR^o+(a4dua$bv=1JuEh>m3Bbs(e<51NSPhsx&NuJiaw;$ma8+3O_P*csd! zj=Uj>6_8$U%84k`4B3~lqDp{l29$118k#eAycS;QJorpp_C`jGNi8jSJkQZ@4>4@; z;$#;WXk*st5?lW^I47NFQ}jz;XgYFtf_O;upfFfcC9^6pPk4n-H=9d7xQ_n` zt^(|jbC)A$+T8w$2i*Vq1i%Zdf5(M9dYdwPfxQ@&8dT1Iii`4suskb$RP~_nVgU^z z2*d?)di6BOU&9{>O|2(qA7{RPUi_{=#GQEvk+ILd^$|WM@IFI(i?p7 z4VM+_Jtp~!mZ!P@3;>XNLv!BONd(ZHmFKadV>A!n_A8xB;qkBv8g<-Zv+po=6{#<3 zk~^-IscQ}1k(~>Q0YqZy0~4I}S;d0XV*%kjX=$bEdMT9>SzON?{ATgm`~K|Nh6_9U z*H_^iMIWoPtgI`?sO6ozwS=T)oOs6JE*F?8`nkbD?0p1Y%QyHpq|a5)F}*JldatcMsBc8}EE z^3II_60a9H@-FM0i{P3HqGG#z=5rW*J~yY{ZNX2hRAGnaVeYfxAHV0wZw;9q5!Z!4 z5i1_R`;z^Qes&y%(AF zqJ-2@uP5gEAk1@ivh=7*88D8EvR_;P1)u73{cLb+6@~9WV=?LEC~_M9+L13KjS`kS zT4ql>pnV$rx|sbkDvX-O{&;i`m3Iu*82 z&Ob%fCE)STX1Cd)0-UE^ZzaNd3bo#DzxV|f?CQFxx2aI(5-}rWF&>I1ejSZ1Dn(=khD1gu)f5W|4l9 zsWv}UhPR>0N!v)={(=5Xp)m~DsL|j*ZAJtiD$btA$J!lUWk((OFgaTp{1dhFj|<|# z!#TK;qHM2xYy2Jbm?{5;Vfbfm4Xi8MB?n!A<;KwpgG+-8>cYT3m|27X_x8BTeqvo} z6d-vGEBm-9<1X9B09d#GqRLMzY>>*pE;A;%qkr*jr^bG2j2X}csf@X4nujBD*uJE_ z*9d(7f0-(uI|E_fkk&oC6=Tb!&p@->#v485sq5_-j)6GN>Z4aWaY^^BwrX!J0at6q z4qB*#B#15o=^rSrEiW_b6&rBsEy6cVm9Z9b_V>4Dd5YQfMSP%6%l(zaFFqS2aD4`k z+h6v^vEDMCX$bp@tMITCZ`x}U$H0k+YDX{n9>5(-p#u)NGRI!6{G=MGx0Od~$@(bm z3bn41+#$6_F~1Ki679cJxTm(EcVED3Tr8f z!liCL($=udSiid^e*%Q(d51oAi+eu+Kj4;fUSxnvy9Upwreh2*%)USD%N?Wd;u7ll zfHGok(Gk=zw=_Uiei5_zu890*sI;@a;D23LAoP069Clez*lg7yDN7t#Xf?p+;krs= zJnZ~%x=ak6l_82cUo@;Rr*5dMjkWD^FDOQvVczLgSgTi5y1DQ}vHH$&z(0xA87mH1 zJ)ixog`r{py0H1|I}GN+=?%+%_Zm}tj4;)u!|!~v5N613Kd8I1cJB00zu*9L z3VYj*1q$XB75j%nM>x9~H4u9+X?n(Tc~)^>9|q!1fcg3n(55-6Cx^YWwU z5B8{VQF8k85AIl@{Ljkq{V)@8I7@&d0W zG9>lf8PM~YT0zrrC?QkjSTcvHR#^%+82aJ#i9|u8S`x(vT1@w+rTg;1CZP=AkPBeq z<3!@@6QI}t5VUwr!YR^onom1n~qLPBPH2<_vcmFZM? zvw73&z3Ns3NFV zAR^_9;u;&!A}0@--I68qt!ikvqNUvlC%Pi~4+*HXui2{wCn}U;tfyC8WaR{9?ALH_ zeYKCr7>66a3T%b{w&?tWvFMw2!Zuq@;h4BT)~ey}8a3Ix9#HCbD~GA#Zn$~^i&G8_ zfE+AiXA@h!#m#>4PvwQ+Sj5XL@7sLtw(F>dfu}~AU zfw!h@cSKr{6@ZJ7_3M_aC-MvLE*ZPSmeJV}4#`?=04_QKf`|pX>@NW9Pi^?tU~o)Q znJ4o>4^US~*p%B!z84X=hGp}4uw1zoMBkJ|TN#ih?U@+0x*pS#tQd+*Mt%EK<2-(r zLAe8}?S8*R#*p4_nO5-q%Vo|UhM z?RP+Ad&Jr`=tU3O;v%ceRS%b?j}8E!A5~2w%z)=hHSP8ey^9`;^zPzk$!C8Y#cyQIVSI?@d`FyF?z^V7h~xTQzr zwN$d6ZS##^0Hg+&6et7`lz5k7y?9m@P2>%<1~^p`Iho!LHl>kI;fj*I*LL-+U=wkS zL;7cKkZXMdFwd>?WFPKaqX&ed)hGp%9HzK#_2hGld-QQ6eHkpwLC;vtJeHejTOzEW6K)qII3%o-77%{=<+aChVyaAe4u5Ks%~tTNjJ0BI<*#Y%npQ_7W>2nxBt>Xy#y7|Pg>tpU=+1|6 zpAd$vDz9C!TQ0=%;F7hr1-u_kcrVA=x2++A-tKQ*>E`xWc5_NN%-m5#Zbg@EVJ5Jt z5D@LG?|IM(N7T0;@kitj2D*7pvey&#(>7)u(N$MKBX46b&0-;_N(lgKvQh4&{Pz>l zT=L^v0BqI(^|$+Hs(#;RC*BSkm$c|$9=}k}`#dUV1O9m6evSLSaVbf-=nbdA(MU)Cdj9uPmZ$6C5UTI4G0Tl{69E6C#3zspiOZY<;M@|LDgPs z&2BH4tJ(Sg2v%O^)e{*#u^7HZ$CD@H=6PQip{LbU^^~#;mM$``6aGT(me&b$(7&%4 z3|LMG5?PB(u3=U9uWxGWMV$CND>>T#D#kH4=In$U3o1=DYS!Sd3Td&}%IaX&^cp_{ zWC3;kw-4dW1wjKyK!UfB9iRLs0Z5Z<7A*6PSgr4dIRPLB0;F zuw3(7HMGH$f1a)!sbjAu0=YPal|sZo-02XBz7b`P%>H5`H2i(mE`T#JO|6*7`HR*k zC-`$$dFoXETF8`!teDHf*q3qtoP@mxqt10GT$S!@uT{yP<~j!8KgrBcc~{&2sEqY9 z(eI=&25RLuZ^r(A5bLmhWZ8}gwmuJ7mR7v7u(>wl!JQZcFj(&?TfBIF%wEjZ?*7AbSu0zNj@4GMVr@{ zTe&!efSM#*%70|a z(qQky>Xz`}B23OGhsmrrSoT6=LEh+>3AUq3?jEwC(r%;Mg6bu_&Q%bUXughEg7MhgvbV<)Gw*g zHmxzg`xAW?@Ocd4E6DLsdnnjFg#aJhJm&RN+XYAwIo$>OVv!z?;e=#899jicxfmQ; zm&CXow3yeRM5$oaCm)C+nF_$HH&W!}dQIAwzVu|Eyl;!EZ=7Rh&>xAH5ovg6ep-|C z^(Gkz_-!ad)XA?0h)V6#Y!l7QuMX0oq*}dFDC&(+Mp+vCXEX)+Oxw>x7vsG`I0RAu zWbz20-RcS#SPmmhMBe65F%PTS{tCzw&OdJMWmJUc|3t*i;h1mu0RZOLKQUKfjx4P&@$LB$r@v1RSQdKG11bWr zPE+MhQ>`$s!Ma#e9dCOZI#od+_oF->sV!&Sz32{b)DssoKzO$eBVq<+!D7Ml42_w` zxugG^SD_CyeYnV;7SQPGedEye*-7N4th3W2w%3(+uBy9^;O_ljGAoqro(J42#cdvP zGKP!9T->htxEK1}H!8&l;Hn=(yNxRQ4;r|AyAqByF06B7o0Wc*n^%sZ0DwB+e9QFg zuTcI|-|^-cFATuQ&-VRR7vAI!eq~hur>ox2@|r09xO1#bUOy{Llsg`=R;@cVzGaW1 zvN8)&{HhDzYEIcFW&<7#L;%F2b-|W$cm0`K1t0*}#>^&WdWZ6yXCHruhPpxp_kIl0 zt3Fx&4OMxCx2g3qgXqv;=_o94=Fzm4xw|7En(sutdy_JrQXrX5lI%AZ3N|q3hc1 zK|60kfg6BfJCEXuY!R&53Xvj-^4|0%Q?fhJ@D(-YUHT=N@|4E*~MRcX8-~Xuo&|H)GmFZ8ytx$&O4`+GK$tKW~eG6?gBBEof&G4~}?HBbQ zyjz=*mvMeiCA+ubH65jfUbmuCtss-duiMipU*wv|7L#PGS9y4rc%ykRz_R4wm!erJpRJE>JD!wTso8c~D%Wn2 z0OlsQU!QAHj_^sp0<5d0{^%WZr##A3e_hvKQTf-ay7u&hKn+*Ui>6Jo`+6+!x-va| z18@4Syt6?0C;HaUqDGk5^B}#!`nORi3X^4gUBnG?VKJgukVAe0chgjibVoX{s+DjE zYVlVG^mL@%*Q3`M``)_IaPK-7;n!_>b6S{iqJ-6>GBAIGdF5M9$?t!`-CO z@;WB(AdjBJ>UA3W=1h|Ns%?|qqg0w&iAUy*CIC}fqEvV=S#kgH#(A<^K_*M@9&q_~ zp-xhmv2KUUub9My{*l5)t)|=mH7@@WG2hE4r7qwLufn@Y6rtBKzlcy&;CV7!=X#ea z{p?+^_XW@YQlBtl^b#3tN&4`%3J?VO!;J~t9?=LJe8L3@+()Z)Ht7P+J(=T;T!%E< z73B8tbxm;VbYn+U@!R(Uu~jOLNjWO#^RNEZj0trn_ROaCGO;yEftRj! z@dkR-se5CVe(+MtCWqGZ`#cZcXg-&z$^e92@wXPwl!%w-K@NG`5nq6++9J|tpb%9m z?bmg!oALHwPKiZBHY$Rz(ZuW8Q-EgvK&5}9=(37QVfL{wiD3(-py|&dIlV0KG z{=G8UU-A2w2>mxJ>M8)K*E#HpY`NU}O7~|~(Ch2tmpsV?FSytn7jjd=0wiw5MQ3#i zPa&~C>(~#&{=qECmnxZ*^)|7HDBHS>*S#p06QfHg!Uj;GDLfWBQ6(8s1Qi8f!sO+i zGDvMbKNKqt_L-SXUWivN|9bO{OnpknK(nuU&78N2F>N3_v>fOoOg5FcRPeJ`|-(oD5;IKgv`9=X|vbOeJa&Ea`L|?qgb8Vc^p87~xQwH-T z0zTXnAT`Snt0X|!(30&%ca+l2FdW?^9wmZ%ahPImE>d=2$2vSfx+ zl}Ri#{2m=q+RrH%PY1l_F!>K(ILICV)!fc8zhA8E;&f{yV7iw;@9@0Q@XI3}8dFs< zYf%l*c9VNlgwR(omGSKY1?bWUH2+kk$*ezY}aLeqXQrlY^pv4>B6FYM< z*jC`K&uY^;5_iXL8D#@L#{!BT#WHlEj$tq}(>&QL@7|SO#h7I$4_>Aa2y&Ehy3KjF z-|y^K;Y-U`4DA`UBvrm{_;8TPz+ZIeRUtQe)E&RE9KM~BA<)gF=7KbKhi*dPFXR)! z&9xsKWu8zu{|JFk-h0R!mj2P&vPH5XV?N?};FgTpbeyP_vA9QSq06~Ym&=SDuWeb6 zgX06ry?qicAZjMA6!V19Ad~O%&9j&O2;!fy{JSqdQA(e~f=pCL%K?Q+_nXtDksbHG zg_KHtW1+y(IY1l7zH|m|TVtY3k%4c#6H*!hg+7F7%jgzuN5hWe;#Dd`QWkwg43gA1 znqVQ*Fju>8-GtSga6ZGfa>JTQwSs;3WouEM#$*DiSwnW|C#&KT-Ud_syZ-z2^vmx% zWnYj{$vVC4mkds1LXkm(g)e~>b zS7=qj07*qD`Vq=4UpvBh;aQ!;vM~1nUzxu`9?gs|#q3J~A*P&)$eL26F$pnF#;#jJ zze3Q=bJ{~z91t&(@zE*zk2ekoXC9d2QJg|vg|a-Q15v;QOYa&vdi}>`Ny#X9`tM5$ zPM1|einn-|eLO*B7xzCncP4oRn-ypy4x4aVfHg|AqzS+Mne1d6y}p7$U`ku4cloH zB2-?QsZtMa92*vO^^?Eb+`8WA#hu?Nm^YYB3-jbO>cfqrV?Uv!oJxY>g-rGekkSeV}_$Q=7-t5dXg$H3g!)1{UwL7TjBwm(;blv@-R|Y`&|1iIV^6dQF(Xh@keA8t1zV@ zJCLphE}8MN&tay9W`~66ft+Fi^JvdxZ;S3p5zX&#$1t#~UzxUGZR?8I4olH-Pq=AB zzK5X~EEG|&|DEsQojh%%nEuGJFv;aC>lo510U zs&PB*G&LAxGBZ2S^}Fb=V7S~lxpyO{n6>^#IX&RcdyYrv6!Ls+gIh+UCMg|^@9RBQ zrM!ThE{UwZC%Z?tojIkqX$@zIXo}`IALh}p8Eg`g*}wA)YHvk1k@;hHC>A-ppwXqb zTXe4f$9|Zq;jY!gM3DdX4}USbq0U(Hx9)WQ<`|P~#@-&KB75~+NnK9OQ`a5Z9Uo8L z40=h>zKSiJx_c*s;bXogYf<~Pyz2`pVj-$5zZ2*d&vH6T*>9v=+B+Q$Zy;!J&rPSx zF!Ld+DJ|G@0tE;%jPjBTbwUI>pXIsOOG}z^!#x4!i!l?<{vTO&UC2R~c6Hp{MXrU$ zE=OF{VOKFRia*Zj4=sibejTFE`y8JK9J%~rsvRw^u>4P+z&+;E&rT?2Eu%p3--wTj ztoz}APd!v4sJmSc*Vw6E!LV50VL$d-nQJw&!Foa7&_^APd2AHH6fGbrvaB@^HZ0Bx z+?<|!lo1UTdzopWj(6(anHzJug&Jmztrr6#=A5t1UTr&*{=XRe>Zqs}uInozosz-; zN=TPV!yqLn3L>e*5Gox5(sk(=LR3OhKspAbJBOjWyNB+WfdRgs_dfUe*89Eh^R4$^ zX0c|?%0RQ1M{#&b-0H&uj+Arf&R=948rAY0#9*~Z4W+A7u?+}kbDovCdWsKo@B9HjuyB~ zkal$MqmFlD)6TjF8n<$nFCuHtrI%B_iCE_ey8e3nNY9qqZ!n{gOSux)o?lL)!zMuAo+~1;!jqmUw3|>qzjfjgyy0i6i001 z$)~tUFK=_jo!DGSN3^s}JSJ1(-=zuh7*EH7tVu_C$uCEF@veaK#|%W|aPZ+8YP-Vd z$VVJ5U2bAXAu({deKGqcn#X47;93liW(DN8(KDGNA1&E6vDj{06p?Yk&cz>QC zT{w#yMdAhE_7{|v)+^-c5aCKVk&(e>}Xd1!5<9!OiHI9gGe*yPySj27!$!f zV!G&i&b4i}EZ7cPG>t04w^1i6TkX7Yro4js3-M+|$GoD*at%Jj4&Zj$lvk0apv4 z7JM#99oNqV^8Li*j@spq6FOGc27~dH%%+Eflj$&n!N=0#197c!E~|uH(UOkltlsp1 zMbR{mn109Wmk5)B>SD&;kzfO+F=VN|y37i9lhvYLDfS{+GPH+&w2bUDb|E@z^4Hqr zfVy{BP?xF#eF#2mg|dc=WVAJ0zRc4 zLwtRRLyNLtlZtZ2v4GcF3}8XLvfkg)yu+~~ItGY0hTZBc(_EZaG-=>)1*Yxw1aDwX zq=uTkr7|5)9=B4Fsm<+@>@XC zqvm|!M*t2Qn~+8>Z*-=*j0)2^Cz?m8_^xS1T5T#X=}Alur%HBYL^_tna&hi*m*@0D zGMAkiCtII-^56#Dc@#%PP0tf2;U%@@PVfhRsASr~YOtI^Wq6j3s6Ou|YrJUxXn}OR4BDf7)QcrsO`Q>veVHz-N-?fzb7-9ClJW4o5&gxIU5iiK1ki zD15tJ`*7&bzfn3vfAHA9dzWt{fAuwm@6q4m|B1nWzxY3vM65f(w_B7E(ZL4mQ6#RP zg_I}-Rg#%DyX+~IJJP83gIrdt9qe>NOohmmz(=V1Ppkc0vS!^A&bJvmUi+L`s!N4i z8S_oQ{>i4Uj9F`w-l2Q*VzOPGr$1$+zJgQs#HTQ`a6U z)S5n9SD^4N2JUW7-zeu_A9}oYj$dCLp+HL4HoUa~n1b5O@19RqXSl7$tBapMx&Pz$ zlLQMcGZFdsN9XwaQR2Plv;N_qwEpiG|H1G7r5W^P#>oO!+fyP2z+Oqf*R(~pNAN5) zyjp5C|F!tT-_Ax`o%Ta)_eBK36v!Q3GFx|`GfZirhsiVTvX`6tY{f=9T_;F`h@A74 zk0TK7QB&rsL((X{$7Th1YbZU8p;!Vc8LsQKDNfs@EV*XRx8^$cwB0v@pFCWMDDuUD zrr(Rjcg;b>CVaH~_qCGM!a>z4{&2)_bfwLe#4VNO*yVg9zqZMfth6*psU;E|%eyUK<}x41vdAnORD~k; zCRfQEwK@+eLxT9pp?Zqf%L&RRPA55lpqFv0GbWt{^JMvMjU7dZQ?DT7*;)bigfhCr zIl#Sgv{ZEcr>v3zbBA$br-voVDdHPMLV}ZJg49O4%ryUlPoFT^G3FYiX`wzeJsMoj zfzE5@a3HPY!lP3)S$apWPs<&{4_q4E=}{)Wi$3|nqvCm(yT)O}&tj#8^{g1ZTs;Zli{QO1F6 z9*Sa7kp#3dsCJ%zH#p(2KaB=5;|XYC;bV;HK5s-TZJ-4`eeE4%jQ;RmYS*H2xK<|E ziv6f4`*Ql#w3W?lZ`EL`R&JE!DPxA+8}0V>_r`OHql;f*=9F6>&5f`6*Ik4}gZ>I- z#rtF;i7rn=D*H6xwshq^$$ks8MXk$IO)JrBmP@?%FGY2PH$3g^lNWdbTbDOg54NWb z*?xWaKm@*FbDDT|IcS5h(jIcZnckTE`RGf&&QrwBuF9*v_GEYKgOTJ{Dr;-vRR3VZ z|K4D93*%$~_YHSLjng8T0rVGFZB`)lX{7nLQF2JjbR$n$MO&!w(Pbam_GEp{ zfuaxEoNPd4hQUk;mgbh+#qV^|(g;UpOvW3TRT{A08YVpQ&K&`r#@z1;@gPD{ubC8p zQKLDLiWoxhwgyT6NNQ=`O1gW+FKwTWAA`}Y?x#~c_^6+pU8>ur2C{gzPjax~Ey9<- zhN6tw-n`iv`b-v|OYyr?)zeCjk`Z97d?TU-2VKO+d`}E6y69P0=@eE`u?l?VY?bk5 zR;MsomW~m9_rhG&Mw&-Eg8Vw~y}7NDj_3`?_kZP)jZ^9AP-7^e$m;?ZLv~Ki%y&4D zv?F$N{`HrskxwFtZK+;9pbh*x{Syk-##Z@RAzM*^7F*`;n_+m_d z@yA&tQN1OZ`!j6syP)q){cY<66{G-8_`yZco;lMzGgPJ2>9W3oe|Si;7uratiU=0R zCLcq!W`4?FH@!DGg|jS1-eCR9-*}Q6z0+g<6LxV;mEvD;8zyYEb31|J(7vqvQP6Vx zQpJ+@&`)|fO-{9zJo_SnVC9oU(HnhTX^)quKblEpucBbG2D&GvRQVYNGl(Dr$oW(%9DW1FDZlWGv+HTT*4R zrjOB*Nt(+}PpbDc^d%&UZQCK=fv;n+-Z#|ur(StFSCr!$c;YAz3z8b4%lNy62r~hC>BL}8=G0Ji9aMu5-p2~)!dJr~ z-fGFO!AScX%Czjg_Jz@ZiqC&3#((`0i};Q1dVxyMT2=VT^?-=5=25+bAT!COv|DV1 zB-Ad~EKOe4(BbfO6si_&y9#oa_EP)oI6PjZp|;iDrQy?IoaV6>-*D1Bfc}*p)taz; zUNXQo+yM{q4mZt%|HiAf?BVH?!v&)2{G~!msYGVE4v1mB!?*14MyLtvlcBg{95wH) z4+BcWsZJ+ZK-IYO5anz-iIUUc^~99LGNA|r$U8Dqk68^Yqa>LPLRg}YyE79;yMTHI zzVh;&a!frlh(8+9#pI!+y|c{q`#Io_}$@`oU{FyIL>AD=cq!+6>Y8hrNIgd>9q#y5Udm}%T`qi z@p0IJJ$7&5>|Q;FYxYWg)&#b6XD9aZ&o&)jYE=Ez&E3PX56y{(X#m0AKeqrxv+?aM zj$_9kGKJv7;%( zw<3v&92V@b`Sxl`u|yB+gdP%qPMjb?6|J_!;g`}gKDK?Zi`}>w9_TNaJAD}zYAhV< zuoc@NRNY|2RVI8BuS755Bl59u8d$BnJJ_g6WiZ-A_>TP#>+HT(XF-I0p?{GlDw!wH4}-T!Q}=5Ol)l@dR{+Ww-#ZqX#)feY zg}yx6txZ)a#2^USEeLXnTlh|ENdI14Nmz@0r4$Y|@xHJ~^~UKA;*Q(KJGRNA(!+^q zq)uT!yBENzUTVoEWGDto@>olkCCAj-x%Kb!#w~LPr=^J;@no7>ztj)6F97Rzy!SCo z|Jh`k3&$F;1OW$M$6F~|<{z=rKL{fmid?ba^rtK;>j#q?lJ7;OajHiUJ)(EL?YVn# z+n-9p(~^Pt%2;DC8XKdq-nLASNT*}BAMPSU3P zg?wFckw%bt27zLURbOqot+#8{OjqUD+uv z@TEV-0chnXPZ=6k5E`ghMZPdj^8VxD%2F}=3*c!uR4Jqm;Mf1v%F^ko?fe|Y!z51O znmop_+UQPXbni@*cI%P)uAMmQTR;GL{iGygTH_&;OQW#h^HOcfw3Mh`koQTHf++%5 zIiauFCGW*Mi*z4fK(2wuNe;%-tslEEzME15b@W2`z8#9<{C+mN$8h-Zsf1R zZQ>Np)yl%TJBMl-?ME6Agl-1GafE=oE zTkli3OV1xc@G!aX-<;+DQz!j4lz%)4Gp_jh^q>;bGc^Pad{T$DM*z%8q=AT-WhCm=H5B64~T%#{d``S=QVjF_0^IQE$(CL zjO%o=$`Y3QNR70Ll7Tq+B3pP*7xyTcFRU$YR7Igdt{q{ z+n3j{2^XFm#gZ4|*ly*arYwE+Gp%~B5g3}y*V5N#Ak^3wydF0MH2>XqfEhycLsoiI zGs>?kb3)PZkTa!+{)lv+ONAlveL@>XI&7f3b@hs)3h+$vmL%zI;b0$mDjhu2y&ebB zz*8_zY1rvd-UQ{wbUG=+L{SuaQPWhQ(!3DSI;AP(jy+GPkldH>x1$@Ei$7Jc*e@Vb zQ6rPN7NEAJ8ZVjwmeqNY4gMNm<)!2~%f<0fX~TEIdSmJcWurYPSK?7OwvW|bM)r$e z`upV4)mO|%DJ?XH4{45vyivqPz!#WMDZWH!P9JO%Fv3QR!nd|Dgw-TJpGCu4%x zH0!O{zr@PAY?Yve0bfNBG}NNEdiZhEMWUI&ra0VdG|yC)f){K%b&mY?b-qdi zG*zMv-W31HRIXjX@FXgNAA&%6g(=Cs05wZEQbx4NPhJFB?~IyAopJaao*WZu;lM;k zx8wgbW2x@M=C^&P$qlI()LEW*$#muQ+gq^^w#s`wY-t2ceVexNyvK6fTFrDTPqNU5 zv1!n6Y2p@4^^TLhfGHI{W$yz@j^E)JMDT2~`wNN7MY@QCyz3sX_Qji8fQ7Tq(p7!- zrjI9dDskQA-PE7_dxDJ?(ZLaN@_iS%@di{hbGt#KA_bqnWb40**;Z?&)CK!fy_57_ zXP0(DGU`!Vei4g;@7R4Fg~O}}?UaLGF~-zFnM7@-8L*ktVXB8?o+`L7xB(+69Pq_pDgVZ0slUpQ}v2q3eRX(;)AEt&$D!nnzfDTca!WHx+lLeq_tNKv!%Nzh>GjHMl17Zy=t7vK$yOFbCYY|Hus7*N^DT3u=rYN#mMh?r> zn{2mlz2QsJlllXQc<~2Qp)`pbD(S24a~0t7(Kw|R-h8wsc`p6r(aQdS{j6W~$73_M zO;xXu$Iyu%K;fyHd_p)t?n&N5R8(NRM?{LZf+-H6)AGpNo%uxx(O@Z%D80KMRYQC8 ziu|7Q{t<(KHFc}mS+Dis0glPNMElV#@a%$s;%imN1y}KRN$!N)*^PH3`;Hc!xhk?F zhZu6Yr7KdUNAr;yU17$#L-YgEgSTwmX>NUYv+O*lf9udCx2KkK(y^i(G-<0pm&vK_ z`_U2%}gURU_oYnG(K-$S^p=F4k7ouN_KTs9AGwL0t~LR_B!i+(H?xzy9-#H#7duC z1z_pJ(J~Cj;RMdhb0sVW98mrs55m)s#e#@S^qM=eu5);{)N?h@bL$rHkZW#+!7>4}4x#jp#P zW<|L)qKTJrER|)?)|6S86E*ugvHk2Msn{u=)FbQN?xI9-xW`mHi~ckhEo!v@Y|91W zW!^sDUX(7Z+Rlx8t@>Y>Y81R;Np_Hjd~(n)+#si~ znJKYrfzw|ikZ4Pjcj&a0TR96MkI7y>^^*UfwFvRvbFt~0UB8z2xm;%+{Pg^oXKdTw z=PFvc%7ygvj~iCGZay15p*vJaEZxF@9uxK}k@oN(x9yrpW!!JbpY&xn zms!7-F8hP>JrMihr;)*)qkDt;r*mgpa14+xiSbnKsB&jwNs2njv?8~H(%e; zDq@)C;L=(V{h70m_OZewpbo|ZzhOUUO_S#sI!Q=Qn9ds%UN0$0pHIy$@;pmPjbH4( zww2$9KE7`5yfJ}3}oFM;3ZFE*qv ze3}w+aJ`@8lEn3eK-6p=mY}=)o+LNNFqw9-El>7`_RR61uswIv%Nhc8L1IHV4>u)W zX$yy&kUi%k}2P0$ywLS0eZ&I-*{L2 zeVvtWelVY-m#tVigEQ}+;DFnBa!wlUa+jtguKd{>Pb z4}iXO+^~15Ge`KaN@E-?5e#@-?5|N~?Sm~_;{CzeoaCz&qB7#_rRVPTm zO+1Lo(GV-_{eGYkD^FJ_Uuvl?YgB(ijz~|laZ}P@7XVm!K+&bDPw4GFs9v;nXl>#X zX7$?Oq7?92@A$2x0)`+yV^3L_k92$7&uCN|)o7yHe8LpFR9AN-grjJ4l~i(s`#!YA zh1g6EM=kbrI1|%gzTD4hY|dy}evNdGoXSxd03W~6!bfr0G!^U$A|0UEl7x6tat(|ct z{>}}xB)JFf?PKO!Zw94lAhJGEjYjL&w??-kTW+KoUlGmf@mTcPAKic*>E|z|c3CM^ z6q3D^!IV2g5BB#}aIIZf_b4fMM(_`ITnprjr6^jy2ye7dQ1S`7`K*K*yUJXVR%+RV ze=V+|ZD6FXfAH0Q~Vfp@q6{tf+(LVynPoR(G3#!(+M$`j2VQ;MsZ zgW65};%Wsz`U0({OtzO3lYL>mavkB{(Po<+i_Z399ip}bJ0A$ze|)$}a*!L4Uhj_k zfVNv@q?dA4n5X%or)53FXr4UB!k_=a1hGnf*v~0zc3V&^FbjvQ!GbHw{@$CHjL!J; zDYa~rd^UT|JR-7W0fN{18#1=Vo>~h%(aYQA0S=pEIX^U>mQMwC!DWM^ZwO-2r6+La zs;BXnBjj?@y;JB5FKnO8Uk?bX@Rn6M(F`6I>Oo!u<1!;OnL zIQ(h;AWDIr5>{oX9!MBJm`AVEMjWza>J3&?KP#=aM-Odesm$msZ*vEwC2X4Itc)P; zpsZZ>BU}dx=vY|=(xRQ1lkuZp5InI9bG5Ui@lf2X6sf+7g9vLF6tsJ|S*VzQBA&l6 zH)*|;HS0_$U+j5M|8l5V=EY&UYGMYZy5_jYtncOf2*Q2wd(Uz8qjQ*3{fAWLrHr-n zXK=|Ee#y!w4X!QE=-z~+H<A33O(+CYjwDeK$lbuE?8~BVy_ruQk$Dm9gg;!4Jx5 z`w`sH0-NB3pOwly>4}@E~Vb54#&vsyWfnVV}K?O4*dUl&mA6GJR;?j4U zQ>*s}2lwBvx4KvFK+hA@jAS1Dd-(GIbkYD*PEEmen{{%kxNvQ6QFrB&aoh24`#!`XjH!3QYv7ar_KWPR*VR@NqN4QgAPYveIS_Cfzru8%14%J{Tx#9k9o;< zH`P;?(eC2F@Vaat`5uyB5mglE(>R#Qs*h1+N#tKwr!C28MQCFEwLzympIy390f@#E z8|MwW05gHaLw7VTU&pu}#!|hZ`Ddy(Q!yjhvV5)H(J{&ewB7y&mG;ToTzmVCPt+A4 zri(jz9Bit|DZPr6Akt^<9uV(V*Dn>UX4Ct+ClgKo{ny8$?L@`fH~>gs4l{0tmvx`wGA_OKLuzNbq{I&<1yiae8-`BLL3wm6fshlqz&Wm;X0TfCOJm7-Ql(lYYs zarR1ERijf(mD$`fMz2YP%&^~^0`sxK;6vBd=4s`383!_$>;DEuq}LSkbSfaw{}bV;*5gj4C) z_`1B+leWXXKA!tj_p3Tf-}>Iq+j`;&s8{p z!w@T`Bbo44C1p`Eu*!P2Kx=CeX(`08@w;O`DaH16wv*!tw2BMN zQIEt2Ggdai?CMf1$PY;L73InghRx!6#*9JUAiWZ-1X61&sn*>E8@TMyi zGCL}9!un`sg~g#ySLzE5Ocl4l*@CWKmdjoj{DPcy}Sp3^IkRyXFvW=;q2#q`?oS^O@_hohk{+06uLsz z=wJy!!d#11WF`)hbo3NoZz=G!agOP9z8#Z#2B?}aqUB@hQe?df`r$09m=8IL-yjv8 z@z=>;jm*}l=t9gc9A0WL17jX~>eJY0$?1INvkyHIQ^K;g2?0fE(UMF-Ypx>*s-{1e z-D%4|f@nM9f(R8iQ+Oz*9gJWT@_8fjn{8m{@*Ibk`u&GL9MrD6+v1wIaE2y${);RjKGr;SbH9q~%E_&8 zeH(zK#tMgC=kpAEvvX8J83W{cLCCAFaM8A++jgM&G@hB#W~R#dVy60hjOEyrb1{^c zrG=2+Fs_{CV6}lQ;OdEjMAFiUr(OGlJ?58Z{^Zb`kp(<>etyW!!&(TMOKp4cT4c4q zol#6SU=ynz@cVa|8_)ZP1Rer%Rloz5-dP+^v!s*iu1m(RN7kTQ}5#?y4Y|~QI^*2QWN92-t9rzO94Ii5wtoAM{ z;L&V+a~ ztQh=j0H(Uy1YlJn=j5-^Hsb4ZZk2%IZqq<4G^?O!ctl5pi_MkXf78${#}ie*o9i%RMUD3* zhbtY6D?|J7^phJL{vsWDuJiuP*cWH(kOOQ3+_cdswYA`t;(kx?@=sB$=1HhAX*9z2 zW{bsOQ2lcA4vF{q`GIUuNx|i@^!mkvjhRl%%4>hRJvW+T{~J&ptN)mC)pbZl*QX)me(7`PgaIvZeL-A+6kxI^>^n#Ef_uowqO8VYBqAEvM2h}HwI2i z+2!vhH!a2)&0^#Z=bs}Uo;SzdNRpmX-)1~KG;0%bF9OSla9$6q z9ktvv)8y<#OJ7?k@=K^-Hl6FyLyu1Cx70vg`?kiE;OZO8m(Zl=G;U8;Au%?4VjX74xkvg4uV+(`sFrAnQ^mz3n{q+o-c&%)l`lH=5^!Y{;s+y+tp=hdU|XAkavbw!xX z(@`;f=M@=f<@C2j<|3OA#K**vKs;d@F)kqsW8|(OZXeZZD3lFFIDLP8HhPI9Ltp&r zNGI0dhB>r&`x;w5aH-R+Xsv3~5AO3}xZtqk9j`K2cG!^cK6om)|D|8ODg7pi``}!O zn6u>HLf8L3TJ-$$w^$Re)-kSH!Ij!AW(d`A!1F~w8rUdt-m#9Nd*-GT=33DelTIoj zn4FUug0)ahCA)H_c_FGsgC2}$Z2+o+c=!OQd!Tw}B-oit)+vUg*)7>T?Yeuvb_wj9 zoJk%e?B-CI9CLW@Yio6P0Xjk%((!|UWebaKc@Oo??OeXVoW0|tL%8wu3PwpzYm`$= zbw@kBdqVfzm#I990K^j5i4B+Y#84Rn^BT=}xmR;uf%TKc6g4L(U#Mt4DMt}?HKwxjKrv@nV#i4Dc=wmEw&3H(eql8vbi zQ?7*PNz5+bi^?^#Y8~T~+X})aw{u*SaEa?`)kyAIjVoW(I=|-SCVXBos{yBx1PxNh zVpx_1+5B&v-nhsVOPMq+rZGZzN8)b$-j>}od!5@}Vu<5SMntcB{_YZfc>NxKH~16i z_n`cJwprOcDJmtqTif4UcP;W)i3A%>!F599Db_-ZI&boiOIOQ#(hT%b z?}YYqzDN0(niA|N5Im7$u7bF{fBLH>_>lg3Kf0uLvPZoc6Gbro!iQ?VC52_10rsuV zl2^1X=-l8=qbF&XWCX(*MRtzT&}G@=y7+Ef%LWKLGZhsCk%fsh>BGizNIKr)qbOg@ zIj09LL@Ml=D4WRo;LM|M2g^!JHkbDTK54;A*P;(_N8-WZ*4b)z6O5#q0k2smKK8Fn zlsi+89{Q(9qv;Liz~AL9i0~Au{#9*}W7Xn)Py=7#f`oqP1!8^g~xIL|%$m@`JTIx>%M8E;{zAFa^6{gQg zu>`|FJwI;mSG8{uV60v;OX_xz{T!XG*jqpgeD;UQW;>q+p%CGFsgXA>>_)O?fY~3Jz<6ph?O9Eb91%^IKo0s;1V8%2ZBX>3+9GX7qN+@XnFP zuaZ>M2SLcR>XU)-g-QfVPw;hbrrW3!=w3AR2`A*pdR5hz@bm=bu?jG;*LpSg0`RZc z!VbZ107bt;e%?yP>xo+m^$KxKefHtZ5O;)T+ekv9xV*%YurM{DH@f z4Np-M>Unhc%O?bB=>}BWY_c->oy#?)CrB?wiB-0^PBclo)9FDYA@WQ?XWd!u>*fvJ zdGKDVoopNvzK--F#lw4=7>S&BG%z0^ET_Mi40pQVI{l@tgt|ZUkEJDy$l!z zoG*wXvkQkaU9vM@S0C8N>PnzZXT4p_tG;-#>Rq#Oz%F1_fbpXXe&buUOJEocYy)cV zQw_mg>7G0<23;$cnPoRwDGTX7H?TdS|8xfrqz7-7{q>_`homrBil#{o1PdF9H!HZd z-mCs&FG^Aq781455d6#WrHS(;*}X2}+s69=Jb@r3uHdNQd8FeI+qda%5`OISa*IA5ykq^6>GIcyZIpSh zihhT&*P#PZ8Qs3Jwd48{cBcRjG5#(A5LOq75e&#WfB=tZ==FO0{vj^I3b1ktxf)$)$C8b6-dNUCIDJ}!*!T4e9d zBcZbz&x74J47>gWwEFnU1{Z?KgVQsy9OjI}V#RH>A_XO;n_lO!S6>}Ae6Y{lg~N>J zJ?MNc{z$#D)6QKMB@5}17yny57hiSzDQT72v|&2a$eX`A7m}$E-;Q*ho`9iDeY$e{ z{YG0zUsIhN+qp{GbNKRiji&U2tKn9^LbKoVsHa-2zpIEJLELDTn16hf^iL-z7q6x8 zur>Wrudcr5$S--CB^{J4`A_yD&LZXEuWA_AmnS3&0>o-C<9nobeL5Snl|Bd0=w@_G zJM52lOLf6d#}_UsLoLG|@704+(6ch=*2OXaca*w!vSvs&V7~(PlJmwGdGi$ zLscyK(8Z@D-~v^P^QKwQdsGLj06}ad0z!)9HH*8$!U{9gvXm;9CUiCYMDOn!eJtDR zEf`JS$V&e+3=U(vhH_j~cCsXDA?{YerkmyjtZumq z5VOrjeH0YrGW`>6RgLXn7SGh!*q7jxq7#M+w;h6-RgU zS!YF=b%gf9tIN47g*H;dX(`{*uMp7#OQMPoWd-Gaq`KgIKaP0LZ4;9S>m4X1Thp}# z!IqR6!?AfegTZH`We>-7CZB(a#9FE@=~XC2-AkINzjDie^^$0sfEe+ufhEaxHIad` zH=RQ1_jEsoKxdj=C^aq@Xl}sFt_H5s`E?9cH`fpCe6MmAqaPjV=B0X)EH}-XQFsHt zgPC2c?4=0l%ba@W+t08%$?%)~WCESJU9d~RjCX|Z$<($FGKa-0n44JVJ{!#U`oX63 z1|^Afs4G1TVC4rfUL+Fxi}zK4gn2|nlqjxMGy&q*uTZGFP1bs=XgmGxjiw3J_4%qT z+P=LQr!nXB?-`%Y?-`#MMN7Cpv?xwy@R!R*k;7I-S3;enFK_0*B(0020*+#4n20>R z@96`N1UwA1pI9ysp5_P6Uw_Q%Z66KVhJ6{gA@OS<@DneWTGJts6fd`?tc16;pBo|L zM|ALYMZ;?cX^{(o#GVs`y-pMA9X)LeZOir>3V=IgT&;4#@iL$F1Mk(lHdgAU=_)k(C^cM1(_R5u9eIO!56s#F6*%3TN;q zAf7l@8cnvsVCHMShw#3ew7Z&RQhRlqCpbncY4tRa;$;zrbCcQ@W9fy{gF);?m5^I2 zXJ?@krO}qp%Yz4A(nio#gY6uw(277uRof+S9~2% zIlt-0V0HptSjK*_>SIT(uw}FYpqzJ8|^t(6feoeH@~$MHUWef{c9TC zxe?-=QI{zvG1K-c3HnJf0Dd21qN|sW%b9v!s%M!>aFou~RzD-qM?sDjTe)|m( zM@CuLdW-3xYb{b?wPoj1J$6GeLhs9sRGHb(UWWSDIJc{8om>_#0qA8)(Yr9DQBtIR zyzR`A6U0WImEoaH+powNVcsQd(#7I_dbE$;<@P6ovuQ`0RhlHj7oggdq1$ayxeWC# zc80(Hh?l7(34x4I(cuk9-VuG7^+Uq!mSHf*392m0?3quc+mJ zk_B7}{8c$;C~ZC~IF(A3@8iS6(R8n$toPm8a&8IrI6E%x4eWvpcMW_GbbtC=U@j@1 zZ6xo#nm|YD?wR7zuer)nYZ=qjLy!8_1_{~GhMRWAnT2g>*+u~8S8TBi?WgIHRwh04 z*OIeBpF6R`@wuk~v0Q(me(D(*G=Fg5r(<3Gg!4q%lRrTeL`=`}#}s$*W8xhz&wflP zZsie`$`-YPv6B(>+sHtU$EPoo-Kj;2P!Z)f@oJK&1PHEBljyouWNV1hWuIply2rxC1) z<(-%tB(7}9y#8pFiw`&-TsX(=D)C6)qKdDPlj$7WfX*L%e&y`2<1Ch;n=*J4IcsYz zj5`0W_dPD?g$QGYcAaRh=3AB~g+JDQsDKN1`0=p~I}|5m|t z2-SYg|KOfwPg)0K&v>Bii}|oNs$~VB4(Xo$Y)jw8-~m@JmifKFRJV)j zL5cpZE+rej0R>=i;3^FU%p3Wmc7k)%RiAB$^qZd-uca@6Fcro@OSMvjvk(;By z(Ybq+9Fod&vD9a*jV}CiQlvI)9Pp{$)T@)grzy~Kbk=o!kJ{?|e!|#KU%JA^sn6od zl`7>2VIk^TuV6elZY3#ny*`ZP`JoeuYm*>N8m->#d-A^T_8AfuFDCc2bf%GTK>CCY zthWga%IyLJBv=&0(>1551i^o`)l&KYa-X zM6`4y-ve~_#XqLiGp?DdQpN}SP$Ryi?dXx)w)X(5!jeqD(n^yfG}Zg!!l^u-+;&pe zU~MA7soaEw=yX`437H{(#!m5j2jQ4_4HV=Aw7YNXcW6R5Uo}Y&OK9JZQ1IQlYBYV# zx#%sGLw2d5E=8n2mgRPlWx|^Rn7rsW?W2xX^3)JRT_-C;sUA~k#Ybz4Ao6Kpx~BQr z-d%z-o$kaGgHmU_hrR;8hl+sm=z|gt+mVJUuEK|tMjHY(t2WsRTl8*Uosi=T4?jp; z^@TTdw@K}p%=H})MIm;V77ka#!14MAsls;z$=nH@*z9rM&UK474j+}T-QgXa)Rm*(JvyS+eGZn0|#Xu`zn{@i*F^GY)tfi zU*~Ji^<-%iynd4p`jgnM5p;=~)0kyr)eBOq23Er@w!3?iFYuV%%-&pQdL8jZF5G}- zT{Yl~v99ZNRm&A=;V%>j1jqhn9k6Ra(<_}AYAm7;^4D=jbWAfTG6Iy&JuVgf$(jLy zFynsy;&+hF0CW zVU0eg|0h-xO5m*g^Egb7~1kiDC9-j+po zrZoR7P$@jI!VzTTvt;&@eRnF#`01kyrVIPz*yQu|$$`{5JP2QM^vc=xlC`k!StR{3 zf%_fyMy6}%q@j3W_yLa)Bgwdc*B@ei36(2~r6N$bKFXFv>NY{=W$NS$odB=4Hz+_ScZ3Fo$V8rfA(dG0c zpH|%qAD%u_p2g2pb&LIGR=cf&g7ede>Vwp&7F`44_bP=!jCRuW$gw%h!b!fctl8k@ zHcnLn!>Q28c)vLNWP|{IQ*>(RcGDEKL36s?)n3Zsviqt0>3iGOvYXV2FP}gN*uyC%s5Uk}Mt z^5TgwI5$&rrbY;mo}9Y>P*E%i41gj&9}l%6dW^R0CadiW%x#`4ch~N20JKf=>^LQ* zqv&Ehxlt?fE3H&-f&^Zev(z&BxL^4^c<-ay9+B6{;%h8LEvNkLzc*jIN&mi2bj=NW zr6M2D5vft9Vh=sKT`dCSqQvl=%#m;|(vlnFtqLQUJ^24}W+ijEI=PjZB;E=%1SFH4t* ziOSPtFY%OdS480ccQs2nqU>BnFGQuAW2T9)W+Wt4MP7Ki*hivhq5nhNdq=~)fA8Wc zYSf9|g+z%S(Tx%K-bVCJ5)qvsO7u}iC+cX?jnSg_5`@tPzqgZf&gb5B z@A=&G$9JvYUlvx@iaoF0p1t?;m=0FdWNY3HsP%2UfR2Dfn{A}lq??bx4vbvrxqjP7 z*+96equMN+XoIWv^AQTF0iVs*TG7iP?5@jXgLP2LF-?)pDrHTLDVfV_&9C21@Si$L zXf}y%c{fx{b8)P7etsEuDw_S;k{;QV%W9*TnwJXUHfLM@U*+b7o~LC41P_M=LR?Ddwq&yiM4>(_dD0{uZZk4# z>I}gr>jMJk@urrOwmetV9HHV7vq$G*0|LJUrOuLdRr}^w-P@R(R($<7I0_!CO9Q!w4$OjZ*6Fj!2ZP$i$m~$^LX$xn7Ip)^oygT>L zfo)^pvi7r7Gw;Sn-72p1{R-ehIt%RD#DNPeFgyc~;&Y+nO%t?f)CDGnKRHLW@Z3pe z82%OZ-VP}bVOU~QxuC@Y20oHNpd?Z zXTr?e_jk!G-(NC1mFE|Udi~b2q=wQr#g5&d9x~NHGqp%IV_A2cr_$XS;WV%~F(f#1 zRDDl^Js?w2*T`)|dQdZ!$32eU(pmU+!CjUZzjKGxa_vG*jb>;XvtB=%yXbsgUvhts zzI_yYQhooG~Gy9 z@ngRSJ7Al`7k9Pu{0PgdYZ1FvUo0$>y$8Okzr!Z`)WgyA)PA%W6i8G!&K#Ga)~mO` z#h$75fi=2TO#$Hn*Jjm4r}w)xoI=Ur+Y8&PA9>SxXwm4%;ma-Mc|yIsys zU)F46q*uEh)dxxDve-T^iTx50&+ye=q8x5rhwv}yz;W-7a49&?>XDUZYr3&9t|s%n zXD_Vxdkb*RH1l(rvPgB7NG+!le%y}rP^~1WAl~AABX|n@$(c@57}E06on%Bdf#869Jy_=dd)+JdNvSOD@li~T>cFGCC zvxAl@Bkc3FnLo`>N|4sh{|v*iK2wx0yGQ&S`s-r?!UI1@m#|wKqzmi{48_y@kVWeL zSd;UHFLad+$UTzo*I3Gb@@=`UM#mf0;qyON;qG z>-=Nf$l*~PHT#x@0(KS|Ea0=A0jWR90+VJ<<;?V^nVvo~lAcW$@Hl2Z!9Mf4F5{O* zy-pn{&SO+;VWVc*`Rp7*6Dll;VwWk16pw(Q*iqzTN_5hUtK^Yzaj_!hz0vz5_W717 zC;290kHKdUPJ_IIQBH>!-2EE)t6Cs{!l>F_iT}~)v4=Apra2- zb==zvi(i-u!B2|`moeYi$tb<=@~iCx;H|tYe0WKRljhE1Fm^y=T-&9R8zw+7 zQ$18#cf)uyWMw?Y_cnCg(ReEh zu99R4B$CrJgST4ii%F&0je(fWc#k~L;Oq$TO)%zB#RjxQvVQw(;;(a#sM7^^$bz5r zpIP+I?<^`N>8Vrx7Yj`p6*H;dw}~1%v+=nFjU7zv?zi4W2IJvB_V@lb(yYH4FaK5$ zhboKSn>QbTOYg7><6NtqIi3BxY~jjs{Y1f%RG{2;&rB)JJc&+Qib!`9&HwM5h`yh& z4kOqNmr?O1!hJ1Lmctn&UCbaz5OC6QTZ5&}iGEw2zg3%ylZFnNuEo}$AQ zS0U)!&DLksq;z@N>e``g^HzA~jCPU64+3O14|H z{L;%@^TksNJ$^r$>6a$=;*M=!P1hBlee%{ev!g|p8iZjhiv-y;3s4kfLKj2wX)9yu~J>;&DCJSG?L$ZsebCvESaABfa{>e`Mdmtu2e3fpsw4b>GWs6z#efcULomZuvse7p08Ab>QJ`)* z){CT?Z~W?cU&j5CLWc8O;BUgm0Svjc^cndIQv8O( zkHji2>D7BZZ7^hq!58b^#MBYmiM;4HZ_c;uwxK>iWBx!ISoH&9LF;Ys?^9SxaK8S% zzsx1$@|%uNVcZjD`?nAHV*8(~)nH$)#nW@UBmH(d!ZJpV;&c9)FzhqdAAC*{0X(h% z3E-1-0x{mD@~{Dxeu7nbax$tA;ia*6mn;tNHbZI!QrZ1N8mLc)W8I|OL-xcd2Nb1x z0Nyan!E&M#YX5UHK!ii8yeG=XNFrjM00<$eYe3OCtEn49l44*3*0WSypZWRcvQQl= zg`U5-06K^0w_gp2+QuWkwz`&?LgpVS%aP}mwPIlz9wx>4-tt{8_56Nf$&)UAz0-&M z#EyPA1bX{%nxid?y{HaRxuc^~T627C*nD$#_${tZ0j2T}yxoZ?sqO(3WVl zf{7*I@Qp-3PEls#6Y@Vfo&w^`@BQ7--TRY$_0HRs|ApHZ*vBEPBczSclGq(q7w?qv z=4;Zg!=3LN`=`4Rv=>&-TRh=Ge|R4Q%?|T;aL~P~r7}kqD8UKWXob3YhIow70J3^M zQIf_lk1qo+H__JDbcLc?aWCzDYKHHLP5K2nz*%Bv#?v=YQ;<>IxpgM+icj*D+G45H(lS;fb^5U%^C77{SImDN+^Axa22%`>q{Sz z>%Av4&;JWokXyjj>JuOg@xa|tiT{ny-KDbK&+kSS$g(O0KZ!o51Zc&?_neJH=7z!~ zz6cne4k9zOOku#DUgryCVxlwh)80?T8}pJUV&ofN5~2+@lC&fl4$nPB82So@JMY0% zg%7OKAn}M&!xNi89%6bzz7~)p7X5XlZ=n3Eyz0)PM|9mq1o-yP zpZ>QmC|f+pbruw7<}pnsMG(#`w*T5)Vj?3tEZ)c({ApT3u_386wC-4e*;zQc*gM3M)Lu0_MMKI;B%HSzU843Vs1yat;$lpk$`UxF z?0QH5nn}SwXeJT50etj~UG_-<%^Oy#Re+jri0eTZIE~Bw@-sq7>QK_RZ1OWJpIYnckWL8>`M%A!@Dcefu0|saHp|bElK* z9ECD0K0yj?74yy%mSmZ&7vXOrJW1x(!*pgAI!6E^Y~kgr+_`x5crITeivXd9RVaaI z=la_K1y^ijX?QxuOVdC8&2w?Yf(zd;e2eF%iE29-LFe}yb4=E zS=?MzkV2KIS*9^&B8b!9VFp{$x)1Jr5*0$-7Xb^9YdNh^h!DoPLgqH|rB+~IuLXcz z(yTzZQ82ho^UjJST82 z4mK}mBfUmG|CU32s}$3&McBCp8tafHyB;Y7d4Vv(z2-d@3_eNXk_Ivs_50?Ph(f&r z<&(V@MX^0yA0KjD23J9ALQs(*5QGAuN@Z{589>IOZY+8XV$3EXtaEsxH)7thKD!Cb zo_FNSXy2~#0^k1m)BpCROdEs(B$1HwF=hjjQU@Q){MR#!@rZuhVj2GUSkuu^FEU(% zwnC8%p&%t2?+BSg6j|NIA|`C0lfQ@>8tRfANz@AiXeBpk?b2#R#mf=I47GzcY4k}K zJzr_Z7DM@UiM_UlKm>HlSqU8MXgu`V0{Fhv<{0ITF`a9{H^OsnV24E9Q-Xx1vt6sa z<03H6sS;On5RqeYMJefZogq-Aq=t8E@GH(jdB1V>5}%LoDDKFu!*V5gPa3W!sAr-w z;LASCc?s!4#axuXFoShl(z~C{2`IS<~kL-O*lwjxFZa z7+d1a5Bs03c|VY)kgu8R;V^C%;k$I?;Bs95o|;QvuH{qwJ^`STG!bXu?)YHL&nbc0 zgEB{ON}q~`T4=In`RrSl030&=0=ZwIClw)G8B!t-_eF?{4S~hwz+Y6{c>kk@(P7cs z)Is-MGA<3h6O>zwG24CKKI2~)z#lrxvO_3-%;Sai1=)dX(XZ!JmeUeF-*49bXwaO! zB^|RCA6w-?OoA($=T)i3jZ6~ERjTZ#6(Tbf0ycw}N!nhdRq2%;4+AqDfJBo0(|)Kq z%YwAIvRsgctxjOZt>-t#Z}CEc^vJI`B#9&FQFrI;Dvr&SnM(0x!gM1Fy|9U40B>-A zDGDW^NR1G?MxJIdIO6iTGB)vJaPxkU`EA3KJ%z+Yxl$kVL_B9?7f_E;AqHv1Ez14m ztFkQn7+UH8P4AnxTpzp4qr%Nx*FJl2{^e6LLRb8eWGw~wsVNdyj`!bO?2q4l(@`>W zzTILFtRyFOc09-wtg1p%%={2g=J9Da&&&&NW7(&2Hn6fgW?evZ;V{tCVCF``l*vP$ z&?CF}=sNecp+4=|_<&Iu8LHls`Nz%o3s00f+s207DL4wjTE+4kw2$2d&4x`sF^ zd7(=D|AUb_B@PcMPTG?0>BHfUl>(Yf9-NzD7MNE~r8^cZ5)2(-Ss(-ZP&v7+!4#+~ zLSiwkWsnj9w4==nb(KA9@<^!|vQ;hUu@K6Pivi5y-C4xNi+-Fc4Yx8DSU^SX4T(2i zJt70kM^aAy3zz~{r~Dlf3LWES74L;-VGB0gjVlL`+izXoS}?g7$YtPv@EK(711)Ec zCkjQw-g8LLX~kNU#eiW$LzN{a@E&zSEa@QE==JzOq4hhSHm2>-mS)*P%esUsQC8U! z0YquivrI%Zj$g@s=P|O-w#dITxNXqyJjQxF-Tg1~m0orAyPA?(F7HjoPi3m+`B=93i2cLhE!t=;EJe`DF3ydQ~R<^8ZV zWQm|Rb#nO_%BaD;g6dGkuy%YP5sr$FgDvFiO09$~6sp_U?Z#b8k>hw4jJPJCsHarf znMf3gb?>v#cqi5^bbFZZ;GOm;e9dIL==8%rgKJt)jD-MFDkzfpnlrL{!2e^u+R2B& z5TeF~GG6m2lauZzP@j((j4g`dm_&e8khG;PL`hB@#C=UeSDq>cNangRVdL|^^Vb~S zb0(ng2I|C9RBh=0+pDe|4^od;X~Pg^#+rVqfoiE7)Ct0|#x5cBq1ZE{9%)Ykt>Q3P zVo7hk*Ncr20>j@6xl|^SeMv=i3ipJorP436<5(W_@OiJtXB?NyhLUPw7&|LfQfe4G z!z^ryFn#e%bm0~p@PmTr1|iDZNS(0ERtjb3j=aYL^YX7+Ke=Ad6Y!d-cmm3Ed6%Tj z#~)8(+WAnvaVxwKQ%?5onu;VK*z6c=f_tZeccq9k)*?%*pI@bOOB$WPvx(A5*k3FJ z;-IP5DO;xNt=JHHVL$&_5Vx5I`)|vz6Ngg$ZJANL-~i!gcusT3IWF@UshB*Yax3Gi z`MkRJkxX`y*5s9qA&}fjTbW8%BxCq?Rq5!{lVn?2KqE0CQ)p#WPICSmEs=3_@U<$6 zj%V-NEsH#@EPX2bsbwY-Er7B|EmlqDmb?#$;cjR9TSyKHh1bW=9T{!nxtrH5LfDI3 zfLU;+TeP2i1?_*bu#4fjJ!Pw+uCgC_9NcX2stB`1V&2ct;)TV6x(TRNf2g}t=eQ+b zR_7$yaO9R5X~ zDR#d3o0b11fGjxEy3tm|@CXA@kX-$)zyZK(6ISc92=fq)h~*OlEx#;sb#e`BsoOw= zU=~)()FMwFnHx~X8SLieftaTB9&CQ&{XqhEf=(a=3MAP)?C-^7T0H+OtW3QA@a3;# zi#FPCUzJKJL#*6xP%(TE(}nsMV4S!y3zEsbI$+_4D+hQdE@ep-xkgLx%(6v$imCft zWw;Erq?Xxpee}u930d@3Ww7XWGVM~@hXYq6P}Yr|Sl} zyhgu1^Hx}Lhesm#*q-5YLk0m3C{IG8m(Vd#-~CZJ9@Nu?X4uB~ zWIbM*Fb=k%B{>fhF!XsZ+O$umbkZVw_KLc52GG6FCu_NJ+g1K|s$P2QLGxEqmLa-A z0LWTwucg=jQ6vAqQ?+oUObW8tekp8K9iJ|dW-{VHajuv7z)|mR)FO^F4yakl*@Jhj zy&mMG3?pYUg)CDYt;J^uuw2&Q8~}={@LkugZhBrdql|^&!fy4G@PXtN^TfXOdwaB& z`(3e^(Ys(v7Xziz>4TziJ-lazcW^rH+<)FNTp<<_)Gi-OT(7r41e4v`wd9ued1av0 z--l`WLMVAM0?fDUegfn>db*8K%Sy4)7BDu`Xqapw7vmwqwJauW-x48;jt4s}4Tuvl z_?o;jPQ#;omM{1Ffym)@DF3I83jh5;ROhCr|K$U*!5VhQlHi0`=v;-83qqC>;=A`f zcv*B>-2D*&-(162kGs-gnD#u`P%yMTEM=ix*wIRUK@)1hDGi3+_OUtsstb1FSxU&q z>F9`sc}OOYSoYFp(RP*6?q+tIf;Xc8k`Y;L%220h`EI))1cD-@KTi)jZ;<18l!kT4`bZ<5do`?a*n&r3IX zVg2DlrsuHTTYrU3|774k;0lZ&mpyX+cVL7)$X~eF5U6&W9N*;oD!wXw6gYcBHy9@t z8+b0C1E*L^R5ZMz)VYT(V|g}@TdK{A*nSXtmMJXg_3%lIeZdqcG#yv4HLmoq^AbDz zB(nCjB??(E({eG1L$paOC(79*_ATXzPeqx;t9tfBmp7gm$s9^@8IXmxu5qd`KV^Cz zZq`;OTpFDSMJ|;}9$>QY+Vx8HdSdyAG z_x{VLql%TKB-c+Up+`o0mv_&8u982Osu>$fd?N#>UNBTHMXYOjz+G};TSBI;kCXk9 zGWR|!tl0LM8Z!PS(*g$$SbSLnys*~}E7M@~TDDfvN{h%b+N*oh0UP85fUVnSWx1z| zk~Sk7u2}iS`FI^!GV2`Az4l*aPhNBOf19xb@9-x#k4P8lSpLk6+V5rkwg9N{G;e4S z9z=DQN}4A|!R|@#0q9tekPj*H>(w=~PzSrP)WaZ;qV7<=_DqB#dQ16a2)IV}tQZu> zVL>^v2jHidHjM{cvIqDcB3ilrW1WcK*3rV68TgmhQ2-o^e+C4x@*;7xwD>_lPvzu3 zC`kEJ!OqcmuB(WMD27nj(L_&4J&p;!>k;js((1VEVV-#2Ou@dT8=zbia znY&kJ71az>{u9&;cCBxzAFlKy(PSisd8neer1o|dLh+bfoGxC#>ZG5)a6Py1w*RCG zQV;Iv$ZR7XQhdQBjjXf*<%He2rZ+AdF5A^tN{#AedK<5PvWzgYJHXq!SJbQH$|>zt z+#Ms9Rkz;FC$TQ_FfT+@8eKldcWaaA(I#b>nH&&`-{rIZemJbS?Y;jo&D-Cmxw$*t z@h?rI4|DY(e?nZ=?Jd%uF2aXXZES2e3 zmJ*nxDm_fi4Zs@L$9@&OQq>^O)0+hDF9^Z6U(1Wz2OXkJeoNzezhQv@(zuN-?SM4y zUcmkEKcsPY|F|dYyOPE=D>X7;mp;6WD`BhnQ2o0mOb?-xb=>|OihN#ZF|Q=)1N%-= z90wG>pPz;PE__3YBN7(=ZVAYK7rx2gYHR;x;X8u&Vj2WdKoQbY)Nm&OXqFL;2e-iZ zJr%C1V54{%0#ht0!c8X?m-dcO*vcAp?j6X_%w`aYxbbi#=6gA3kdVAg zdrEu;G5pPArl|)=@x2G*&-sMIAY&CVv2VVp=Yxi<^)j!qV6?F|vz1#Oem#8jP%q`!?BE zNSr}$U#ZVQPw8Z0ZefpDuF)~ao|6%CQ07f-}022)53X9(pc4;Iv>w%+r znTBP_A-~E2@Skn_DjUnh;^*Whe_^32w&2^9E`%>W@l>f)T$|3RUD^U%B5TA1c}@Tp zSnv(9VM#j4Db--YE!241^#q2ZPZ(h2jsDW_?8E+_~!j zzyhEI9BFyj^MtK@T)MqCWpaaG%>#keaag||hS6&U)r(8l8BvHyt_UG&x>CIzH+cTo z{su@cn9Ib7!w%1GEyhzLOS7U3pqyb{VN5oF@ZnGUsC z%ZY2;$csfdm58QqJf~;q6JPe@6C~61+ z^^5E9<@fpseu%kHog8z$`3K-`EUjsh@mCxwGyiQUBFiPNzw9J)2*z~5h7j$ii50YKhxcT)7H&NYH>Z~i4lla4_~y zu2nIHbSD}W;4^iu0YxQ32Fp927obv*I=ZnrQK-)0y4Y&mQqr{lA)3zqX5k-Ay#1V+ zXZT-c`-THFYMwLq0;~)jM%0i^R;(?<8Qc`CQ+l_%+%beHW@ZY|1Oa7P`I zpMRyI|Jw)0aMe1?VsYUS^%JsR+Bh1_^{qiPeKcf(cqRtz7??VZqTa<&4+m#2(QNQ=t{@vIzkH3Lh{eCCNoi-E-92$=L{UpJtii_|6)Tfmqb=v?XNGQLkw z&($jeHFrKLo4obquJ9MVgZmMT%$0YLuf(a7nC;qbJV<0iM-+>;KUWKTzQ-5z7J=(+ z(E;s=O+&VpZBfMl^SgZuI)oO~YZ-w{=K|xv1=~Fw3sln+pyV}+AXOJwhgn5a*Jip- z`OV3;QF7~1hq!7LJjKdBHND(#sH+XPeV+42w}kV`74@)Qmdq}BAj1eo!E5MXciijx zXIqKd0Wfh-W7dG>hme;%2GvzM#RmFuAzt;=#7fxu?q-9BjO9G{{@vNfDl88!(JBKz$oX4dE%W4<$xsc?$LpEb~B~>hxg-rIOkb z0*(GmcN@2EfQf%vyEDXPnb_y&Y7 zrI;%SDTg4BQq)D~< z?2LOhOL?mn;hpA*Yh`k4;R;44Lw5Zp)U3mRvv!WQ&}N;t!#uJdhlz7%A^qll9dE-pHn zh&;*JwsqC-V;0$VCJx?eI=9gI7bKsWyfd)JL)w8S~92CMM}l?C`p~ zIrlcVj{SKGpAUaY;({zdE*jvemEyZT^#`b?J1vjA(WkSMVV;J(2}*yK7Woo*qY5l~ zZjn-O-B~xQ*E(FEwJBKiOsuEuk9LsP5FZrK6K8P{v7e6upC{pcni({3pBk#Gv^PR4 z3RB!Ublz^j7j~HZpto%Kr>B-u`xlV5Xx{rY8RgzNflUIf#kX+!F7k0KD{#i~WCxCG zE%+3PT6Ax)uU5-nKj$udrc~O5UQz&S0vsMATY2L?$&v$~Z>2l@bC~@$PU(M;eMg<} zTHh_AN7vi$I@!!kGaH$cnmX9@H(>b2JIN=X)BVK;x(6wqzC6C@Nx}81_a$ z!*@R}=D3JcN-T+tByD9f@KluDa?f+Yqa43?vx7Bszq4_lvv~o;3Mb=TE9Ai{DCP)> z7{1P0g1p8RcYOESSOo}@h`5cAQTJIkQ{6o1$qtN63xYu`n2KOSOdy96A@vaCY?2(yqWphj%qodI#zj}gP&e+t`} zDHrE+^lmtt8hp7WUzUoLm^5h|b~o1-nCVnW)JMmExDRT1lWdTX<_33*UZ}3V2Y^vU45>5sSw=+v;84N83zAExaMhN9{Ye`#5JZ!)F$x$w}i&v;{MV&%dwffdd z1c-{|5tTS?#}!(|{9yIzZ7}novzYST`w&ZJeFW7zPwp&YBWkv+n}zfod+#&e>OhgM z_qh58sP9yx-*XH*+v-A*zzUtwSr+B`dU$s-x{I1_`Nd^a)sZOlS;EN&CKkP;()}1S zu=inRZgh_T0y-=1w$Y$L$MXX^HT!VdOd5ccHYSaW7A#!nYf8vk@=t=uE(g#Pr5TOV zr!(TRIExNuM@9{HH&)pN6Q+n_Rh2uFqz#0-VbU2*kzxQlB~8YkbuWY$s8vj=!_0i` zkNSxq>si=vk0BN=4qF?Eoe_4|gt+^pEy*rZ<8H5J`TaS5^&6+K1uPq+G_WIW#Sg5yZNXP$xXkG_k+OE;6wHrULT4;1O3rjHS4Y+Ia}_vuw#2 zK?XW;cz8Nc~ujz78UWT~eF z%;7L)BVN>OCyACy#3vlm;8xnEzHmA9Y$;&+eHXp}Q!_di_0iIBYu7A3wv2r|ki0P@ zE>Nii%r%>K@e1zhG>~kSvB!8V;}?{RQ|lT&_o!kJq$kfS2X+%1J8J|LcjKFpRg?o& zo-Q|{e8Mn7>NZ-^*Y$DfRdb1)$KDnb$5<5Ts#&~>;$gY;C;>JTy;~Ip_Qq1hKQdj( zRHNUfJ4N6La{!I>#f`1%2uJp>Oc`FehXptAA<7gFfp)b1DBW-3L&w+G4_<$j6bdgS zKme^+)cM%G2YNmtWdxUEKRy-DkNfz3rMjTH+-#jm!-GpbEcvTkQ28Sifm*mFrpli_ z?fD^N*ysk=iVrsvLqhYeBWrDLea_yD37mS>Jui`SRR8 zPYPUQIrRz2q01zz<(9LlW7xtzFj*`&`=seYw?%?$K>Vj~7{lmm_06%b!DH$@ys%b< z5&L1>(y7ANYGqcbI1^FBn`OVY)@JB}!|b*KLmjFH3>eL4FLeAiC&c+qq_s6`x^iRu z5GI~BU%nf?57)1Icgh1vxJg{?f3{^|Y_O6e<&#hZ#~xvy41L}3;wQ9@U(8#}W}=qI zKGYWn#VBzI<7JrAtH4Z`ll%<#T^Bd3@+kuEkI$pU@|^C+OHQq?32q->q!nLm)S^!Z zCAQ)@xwxu|ir;9-^DkJt?pU?)ZrXSIvMW=f-VsPwR&&WDST-JQn@dZ50fZog259dh zYDYiy>qAPL!DBmqmhXAKnq`#KS?bm=ThA1ER)%BPh`4vV0?4Nps~cZlo=O@-g?KZ~ z4De19+}IcQUionZFRf-G#JAnM=3X?-R|EfEt)`)p z(%kbB;oR9luzhOBK5?wlIKc3a!@uKXmUjTH7(HB?>!F%Ki|f2ff|nW)*P}?SBL+9O zNG)CZs??aK_*V%*RQCtTVg)7lwNwsae4en_#ZVi4Xy-mK?go7aeC0FcJ{c9Djvm7s zk)59Rih!!J(HHw>H;eu$PW$R+atQ)pVscwKaI$l-h{dZz+53kAc@mpn! zZUjEDAfS^Mj))`*V3g$}9a{g^O+wdsBTm3+F|a!s^HIrpIr0e97k56God=Q=+cS@0 z3||EXiqB&A&0~q2uQoHDsH~i1?!D^5g(I`?-0?T|*t0@rS#fO~KMk%AnDJT6*r2CT zp^B-dV4=o!QvT2q!!+0zvo&rWi7A2nkO;8S4`eGYviha?sp_R?%}CE}Lxu}2?e(E| zVkgKZJ9j$MHKMl}Ag*D?B!(qIYaM_zJoTBa>{z8AMQ5~KE^;5TN&HMKBi$}MI_tGp0 zDyYLJ^^;4vC2##8TKRE$@Ag>py&isPoURG&D$*C~ zYJP{(ZnM2wA4+d_Zt8z`hcTr?Beo|a`0yR%bz*cl+sC@ELnT1yG zo%PO|R;qZJ(Aw4i)B}N;7J7KIP#JWe`9SOZeu_6$u4o5gR!ITc)M0$M758ps$c9+p${(8%VJlH-`5`fiMLc;-4sj_fr`x8 zr(9zhKRsi7N;$Q3#BR_RiQ)hiLA|FufBvxfpy021=9tR!8r3;jiSJHii(+mV;(=HB zr#8H3p*L(`iM#%+_vZXg%s1fx83h)Ut@md5YVpZuOZx<*4AtCNhJYT6u?qeyb@%HYTZ!}(+uF8tV&t& zILNJ6UhQY%w)-@5y-V}M3fPk_DkUC0JLLtjMb}^3M{;Z^)W1oux8c&P51V)srG}D7 z(?mJjXnIDw6Uh@4jHq42y}QR8Xq$$E&9lg2m3$aFKBP-Np$i~xV`xd(14Dpd1YXg|Xn*-$o; zKWyv;bEq+Aj=fxLy&lyHD(+QJu~fA@x%H0PWxdS0NOX9yS5IK=dKBZ3I5Z4nl_x%u zx6o^AK{A>txv?m^b~lQG&UD$z*luG8SXp=kE!HCYBIxA;?5m;aTz1Qf4_|dv3^ac8 zf(FM15uOz@Pg87daPfWpd{)3-=h#pTYWZfb{H|p~98|OygP7t|lSUb=@zu2QJqs`9 z;Hd0WJ=W@F4zQ|*`{$XMA$F!&PArS&a-Y~_szOhh+>XL*C@!=_X7)rSHuFLaQiy)Y ze;%c5JbGP!k|{86f+hQ=eo|o7^cAiPYS*6jsjeD4)S;`lDbs)da znuM866uXr*db5*YZizUhn_D6V9!nMDCr5)?$_>#~ji;5WjX#Q0?X?nwU=9o^Y_A=c zGd9L2%4x{9e$`@Iy{_RZIqL(VprHK6Sl(?Vbqk!E=xyb#gPT*i!snP};iYJ}TVD>< z1Qh==|C`AfLI}M9`Lu~`F&yuo*zVoGYyP^M+IzQu9zF3u%I&3LAy~ak5L)BDKR<9I z&E}x7xtd*iY`e<#3D%}KszmgRw3pRs{f74@&`LzcC4BUKrPL^EQAQcBhVGiG7mbBf+ezr^Ow^8VhD$~s~$n0mlD^Pfv z?SFWRRNp$j>1`MoueBX-ehI67S#*i&FHoFHG}aC?JE`BXXdBo`Jq2^6T2h(p!+cc+ zw{qR~e&V3s+X#Usgtk?TFSwjZfUr z?_Q%wCSjV8*qQzE8T7=d&Z`IEW_;4S@R?%=*$qL>Ha0gj_W3rhu_n_JWz$J!8oy7= zslV4@6+7R?`^j;P4SK{*sw!#Iu(tER%$S)UeOBE>3cqRp#g0pnrztwsM#C>ubN_2x z!dFHI0=t9Mq9NKZ90$V!ow`PeC^d1fjuw+F01=ZmqP6H^M{B7~^fH;^H>Iu@Zqe-= z7n*EoE5D4*x82Qac zNG1E$M`?5maf|LKXiL;|*4IvocK?*_f>9I6b8^TxP^g8y-ns{WjCHf?yDCoMh)%`xS4#NxPqZ7LhvR)o=;IN><`c>*C%TT>%jHR2}1-f#>u51#xn&-TFwM$ZT!}$?mxbgJ%N><{LkE;-UG-Y-aw=KfH6YrC6EV4~gzt<1y*1b6r z9L$SwySP|(8i(g%n`*p` z7{|1q-n~51ne;xwOr)O{ecFN-L3;1=JdxVUi4 zPC2=MS4+FTiJW4r|DwAQV>17%*M7XgDz?L?u)z(zYIjuWJCc#2IDHmz4n63MaaIjC z8`;YLB~?YejmF)!B)MQ#Sg&{zw-x5sr*~QLj;uxalJBF^-vijcHn09{Wc{}puO`r6 z%7)f6oqpc#|J>r4*`ocViH-WZ*w?V={z{t|9;s9hV3WIOL@!Ti4Ys)S0W;`i@o*$m zZ(-D|aQdMAnMy~d?liv&66Rl+eVT|suZ8Df3jAv=Iu5a2ZzoW%eU-CZjKpeK;e$k^Y*?7!{XMyT6!?i2|M2mDEJ!)O}=Pf_xp&9Er>0V0l+~$VZ3-XXIy(`O2w_M-MI|`Er!p>CPHv9h>Hq27 zVC=Heg5*9SAqBPU-$>dlkXc!fy8?`#LcM_)GjWS^hce(jci_xbUcp%V6~QgwzzjMISkplJ+jhQF3DP+B+vWPgmYonoctO|GoBo;R%xvzPV{OS_ znoFKF91GG3dO{~seoitH9Jyn`v9T;zP}91vVN)jQG@usBiAa&lZpHrDYXFHQ>y5lA zzsp_sGmgcWr^O_q2wv)GLF|q#s_j$1hL3E&~U!d`ebO0ab^#)A2&Yf`*Y)y;j(b_(b-qy(?;Xl9hIvk)qb&2H1f-C zV+`8N0mTdsa?rCDuRC6ho=Iuq9EWoq3a@7zM5G1p!6p{l?Y56+w2E?aeqwqZJnk>L zJ=bsC3e`=suNV5((Eg+O=Ns<@GXKFI;`%vFi8AB;>vtM*Ozk4ARp0~7*Gf5s?N8~s zI2IOtWtm##D1xN-hhK_ve%+3Q>WYfxFwRWtUDDb5>r{9my4c0ecQO5 zNjBpCG4)q)+MAgdXXUNv@~!*|l8Q(-Rr3d2l8pQ8^Ly{;KGEK8c?mU}#R$44DF2YE zpBl+?d(0_yIU3XCX|R7d`X-Y94T~POsLwx-jbyY*!x)Lgz^GC@9^XerQ4jBZAZKs; z-!9{fSVEbyBPkrsTyCpfl*_3TCwI0#`e-VqH?FtY*D>@S?6%ewthTw-b)c&@md_|1 zRQqPoGB!pJ#X;35F9uU8Q=+JA9z*g;aw#^fV#D?y==hxP^C$2tmLB)0 z^MUPvrgvo;nb~^*EP2AsWIM>RWSbS*!_87cv;m*9Vxg`lr`h`co^`7m!8CKwDPpGK z9&VPlU2`Wv-*2a@Y~yDAqWdL`6O&TP3@jz-k535ro+La|!?J6*q!C^U0)LS1spY#I zbMSI7z%CvAlH+@(JC4dUO5jL?w1r^4OWogkF-!NRmWbK9`vslX*epZ^$G@-KYmy{1 z^|iO~Ew&8s%jUBqj!l5$&CP`=tE3V}GV`Ks_Uyq4ZZM9`sJYVSkNZY_x7?Xhq|Ckc zpQak@W&GK~3SH@iOaZ5~Uk~x9dJXqt#C&p-1uwuU73C}s=vV`))?D8nKAm;MzEoFi zwoVek6i_jOYrQ=VUhK0~ze-mm5qt?Ng4({9_@R-KaPpgEY%agxd2@u|I_$#LQN<{|lq9+%L82 zWK4~dA-;P3eRimGeu>4rP{S$mgre!_p}KhCqhC(w3&YY0T&>ob0Im|KRRu8Li`Iel zOL<{@>$jGztW4jnyUP33|5{t}%+;aYsXN?$x&z3Uw+C)b-qZ}5574mu|5$s^sHWGY zeRzu~2m(fF(u+!OB1kU+f}&LEB|vCG=+YqwNN*xiqzZ_kO7Fdd&;x=HKtOtL2|bkm zPxp48r=0z~=fnFcYlY=VY0DDvqN66*iqYJElqdD{M-e7L2{?}v5(~h>Qv83tInBEYHNUq*Y zuN|wxV4kQr&7Y@gHgEa7-cUQ8%j?B4;(sZ!ZtqafT)D9Xed;+VNYxz{)sdpjJ*szW zC0vrxu`k(NT1dII?ejmRTGYcjesX}?Q{nCw7SeaF;WAWNn*oF=^lQ4t|b-) zfQX*qc_e7`hL?(HT(gt)R9iMPV`{Sr)~8&oV=`9+1kK*L6Y;YVywwWxn2UkVoSjS( zWGjx#wQtY-iYhCBE2G(zibS;a$IBwz(WQD!x_j^Wc!$Bui+=C~BG4OOOB4iMW;C>w z-b5kZS{!_R-dvh!iC|cqr;oukrU~aNs1;U>**A`)8$9S5xY&F$dOPl=>V$)XuhW@B zVPbt^)C8lKQ%&eM!86qgbOP#pu)Va|Ki=OE77H zGG0ZdUNIrkL31{?tIWTj39XKQ$6`?F{K5Blm90wTyJ2nnIe{+Q^yXC#BmN<&qpWx0 zjUx^Y;@eZ=#|Z)BX1LSFu&NPoy2i(2RPhzON|pdu>91cTuqMj(T`wMVZZ)0ArX>68 zHyWvy6sS%=%rQEsI-5sbD9^;d1nTk214nW6t&`(Sw-{=Bg8eF{AA$;U{vj1a@>C#MX0YH>1avzQBvaSndV%`<>mZ-wzT6 zB1!5;3HVuO6;);6_kF!t>uQ(2{(rPb7^6j8BL^&Lx|tYy>!P z%Kp%~Vmk2cvXj-IlZ8yo>yf&n`+c{$NUI*y2zCX*N{zUD377& zR)p(P}dMi z{LpU=in&U?ux#w*6m!-IZW#J2(iZQ=T>MU1LgLjg{` z_kf;#^Rl@7c~4+88d$Y&qhs`1ByN{aDt}D6h>FYvrXv@jHh0M&TZE%ij3l1MuQRto z0pPS(zNB9PZ$5WKk3}~Ivgy7|pI}H1K04uXJBzy=^XAFLQ=y4%E4TeH@8A!iCVHb6 zdj=adX~&xBHe_Jez((+Ho!Z23A$GR83LCRRvy>yeHnThl>1~GS7(YNKU+td|IGl(- zjNvVxT491$?n^JyiMz$PSzPq>Y(%sh5!{QZB%AS_nx>bY9No!i{c9!r<0vqz^zr@) z-+UiG*cvWNPAaUp&FE_`AzSwH5ZHQj%ZpekSdK2=73>LPvXFHVM-O=KbFu|Q0Xer! zfl&l+Qu=35REl@NJX=lXKbKm9(b>&7cvO)Gmd93L=UM#`FoIxOZi4zX?g#C})7YhBhgtgTFj4k7|$hkuCZkI4bw)i{i^iF6WwBlw8B^^5i03o-cmN(R@5!qqpcj+VjjP&GQ+4c>n>li*XEo@akkV$n79A z?OjQ);@RXmrh~29qd4xu8o8M~@#3_r3v)WPiIaobd*5sLtbyC{@7?sfbsTE^!Q8;O zU|{regV#aTbR#Q^(W;O4L1!~sJc1KDSyu=A#&e!-Sk}C(@G*+Xo_Jg6XrYC$Yj@oO z{$opvP15hk;PVpKr;;w=X*&NkVEv(1jB{;%_sE}7o|hBVRID!>oY+07^-HCHk?++hkjju0&>6FLR$ zLd*lBZ#f=0fs75a_@B*{Jcf<)Clq7m1Jgy@!~&uxy7J|SfrH8b6E5(#=g>VuF~o2x1FgI*OS1qnBo#x_eun@xyE5mF@4`aed?Q6! znC)6*@)|d&5Vh+zHBP|hrxc+$ZR6*4I{cKmZ|3k7Zu5zEkPxVKEd;4BP0m0Sc6_J) z;;SDTdAj~Z-itx9V?Zj&;2Qb3fxDr(DtUYyN;|S{_=~59;ay`|jYZuEW1QZF?_pV* z+nViWN+=^I?qENbYNwOK~eLx}M}+{Nu%RmwWneX}I1WgG`XY%aaiO1-Rb1;)v2hx{Gv45 zTT;np9}el>6&*&m9E8dgg_?+pk8|i`Sc+pf?)&U+W@q}9TtvrQ1kg;JOV@slo@TDK zN-83Cudd_$J{3+DYPq@5r3|w;GvGJ2bC?$GFiz?e;n9=aI2=na_z)ji)AqTwwALNWR^48w`qz5`+V7qJxP2y&&Xg#7NuvDw>tWwQ@(@`>^GzG z1Yi)*kkj6#-v}eFr)6U-^vE-kHh!Mv74bL-ehd`20r``2(kjH+)9WA5h}; zzFIWXuZ#Lo5p~64LBUA9c14(}uJ9PO_pzDkGv|*w+$SO`sjA1KxNwrHuS2Y5R&+=N zLl_oWRmk<2E=52}AFgxG|4iQYSyy*@D8;gsAw=C&i1e-73-xeC^~jvD)b!_gZ%NfQ z0#$5R1ZCfmdA$+MlGvju|12PUbCJLYI5rwBWfK-l9{tv!8x{~7@5c_^0jKgYXVB&LkNE>W|w zWw_os<);3KNZA`xCyh>ths{d%9-KEf zPlS0px7x=_9wruS3Wia=3S~(e~gSo$Y8-xzJ+3S#pjrPzOJ? zqp4oEZ}i%>7T>C?-kgA^2`Qb|lcNi&4NXz1%QN8-e?^NOu+e;c;0W-4{}{~D@mv3v zT-`O>iX47Cx!^gp8Jhg6TGD+hwZT8+Q`wJl0b$=KuVR~xHP@@K_M`Xs_O+|6Tkp`~ z6ms~YwKx!VbpCcX{q;euZF0*dvziPJNL8i(YB8FSh7?WAlr&nJAA zA~t_m4!dyAq_32lC#NF@S2s@`?RmMkh%eKa zOHY-XH@&SQJsOE2`iw46m9W1><-}=@RkjN?(Jsz0^4x^EDJ8E6K^8&|upyM6ntk5c z`I62c&tcDcM{MQ0o$Gh=-8Vi&P2Y6py46bKRziDGR=*j0%1b_3AJbr~)7->z_E1Bi zuv~n+Wt)VkqWAqXzh!ltW3F`|1)0S>|q+QjnYi3sHC-ae$cDXy=1QDIgW=_;jEY>Oj~`dBxECLzE`3= z`XgtA!u8Sld*`ucz!?N-sh;MhQ?buP%v=GRO4J*Glwq!I{4J4XB>yi`2CT9_p>=9b<2gx4ps~|V zJUbjSulQe>8MI~o2Qx#p5DPki$=~T2@a%BAtBTK0Wau%T*CjOCRiB&Y_Ae9{1S|w2 zWzIPyuHMv6*dnB4IQHnsaXX(i3b0R$qW8*?)O8c$b{^QWU^_oxnM@(RXDd}9UfeJ# zg_`&V^V%G*67*}O?HM;w#f=L|mp9Eew@%2Y)vuM}(fWLUy`U~jEalT@Or7DWb+>nd z&LjP74Nd>fPdMXjo3nnsKYzN6DSs^FuWp9o=jnhEOMuW;O@ymmUbTPb_me0d>AK;> zB16y=g>!8`-Gzd4^AZv5WQ%#We8~>e;z0ej-R7`7-!y5leq9%l_LVZ-MhV-mS@DZw zs?Cc$Mizq7=Uqz_Yj%fMZ`MtK&;vJe=|O$m)i{&-ACYo}FHcnStXChT?5)xPgX?KG zbS+%yi60)1-d@5K3_CBJsG9R~)d#KMHp)ytTyAC{;Tqs8;8(d=z4_ADtKvE%!~W3M zLdRJuVb>*Y+)fUBLvvdDfEwC-GRs?KHe_Z{=Mz+9T;4hQg{w04`%d*#ezxoObSq|| zX@#VIF&NH$PNY#UYc-*#c))>stzYLB_B`XXw%_Q5iLJ6rp{y~)b~L|eQN_1s%hNUg z=@-|GC-~(uGRb0=Q1l_D#bC|Od#f=}NExC{$B=Vey~Ey*sfP)bUV@(i@12SyX7nks z-4^^7wDYTm?YIlo`fx(bc$a?4(F)iO9kQ67&={BIIPNrR+5O0%>{V@%KK%|S5#yqZ zGf%S~?fTco`bz7htA($sBt6gig~facDqr-iSYa=@Z52nClfJ~dW=NZk&74_wruDPn z^sn0jdYGO#hM}2rr&r~B4jL~#+U9(`-B0v;ZO6WnqBGS$-v4agnk#THj9U)!9)6NM zq3Tzfz4<|klEbcPb5xnZIsuK;GRlC1@ zvnWKW0^S_?ea^Jp{{XApY_)l7O2hj&!FF?>WV{n5_0MN^CbSAnUJn*3O0KB%I64QF zzcW;)A`2FXDoJUm1A34ng?#Sa!X6h z?N023DxUYXv3hJZ_XJ1fd6+W8&#E`tz_782-7zX)LS4^br(@_S?@Z@jrvdM?NSrSiZDk0@`sPGn4 zd<#8=@zkkf=HMa1e;>0M0qhA41z$JXCWQJCjwBFvDkAJd(qBrSYm-g>0DI0}_ukqP z-`pG@qQ|{1+Z}N0IfhR}ucqiCRuU+E%pFu$Uj`mPDf4v3X{*6@eEs~rGs|pl$A|7w zqr&{$#%9~!FCKayls`*;-n1!l^Z?g-X-e48olp~Bx7i} zY?SfKH+;m;Q_nV2)6DR65Y9wasEXcm;h|0)k89QzIx`K$^j#m`ay~t^?(Ubv7qlI$ z3^|+6Y8sWZ(j6_x8A-nw>pe&;O?A$buOqGE8j!j(m=*Z`Ss6ib)1=gFU({bU)xSGJ zoaDe;75}-^Nj1Qd;7ed+C0}!YAgN&GM#0L5?2yZ>X&WOh_oHv|qnVCO0Fo%G&lail zK6f!u^Bjpa4?48DPhU{2&#kNRwb6J1OgCZ3Kwe5r{sGz;_pWI41+kY;spj<}0Ug+E zN#<#5#ah;*g00e~9J5>{ZfaZOacagQ!K-S*pLKyFuHo!kx_BTkaE~bUZx=*Zb@z!0-EN&S zK5@+WD%Kb0Dw3IDC}<$mZwxa}ilURABvNjhzwLd!WM1Vwb8|$)FMrV;zueL9OCU_D zBO1sBZ_QG~PfWd6^4#qPdPXvwdYcF)$W+e1?AzQt_la1Z7=Cy@G=22Wk6<>YVLkSs z0NV`VY13E@=QwC0g6I?G_Ho?hyEGW^Q-zrSEJ~Z}Dd9E98bs5z#+Eg!B zb4RzVL&{@=*BjHgn)x`(LeF?|3c7P~)^Xx`z4HA)DciY6TH~VXJRaSj2$)UKpJ(x; z5I1A4b#!e+rTsK|ZFMnr@vE7EQOV#^f3iI>5$8Leo<`pVLg)S0LY+YpS4_&<1R50&)-9uG|&RrXq8sog#96n$OO5L1nZp(ZcB5otQ;zA2qOH~^f0Yb$xMX+6F=)_YxIYh3^l73>ePvp3SEt;P|Vt?gZ zTS*^j3Ux_eEvEM|K;GFAfwkr}*hl|lYgrg>wH!!xj+G0Dnq#jv;~%?J1bu$|J|hWZ z@%)WIs7cyo5cEjrIevCa^sE8eD#KegjX98ll5)cLqIUT6vk%Wa4W7T6^)O%xuzPuv z`s0`di>?P@%)aOei}>abUJJjD9E7c1e;w3z@S`zC)#_VMe8NoVvN(VU>=2CGNaMzj zrK_f+hW!ri0#_&|Iq|~Q&?uVEK9^H^?@4<`oZ%tiUa9(ezLJ=J6TQN z?5^Iph2Mfdvn3>W%0y0DX==3?mgq1U)GX37@#$jteW9^sL_#pJ6G^gOFJ;u%%0zUc z!*|PSiQOld@b^87(tmBt+x#TzSicD>{Omox0RyggWZQ$a$%J*g#SCbb{!lsML(QxwiZRzBb9rFmd?t1FqL$Yb%QK}}6dnUkA0itWzz#Ey}Jic)-@pY%BOY2GGbBj?g z?M5Hl>9Sg(9$OR9ob^KM&9xl{&paNm-g_SrmGN)Ym*8NlK=1AXo3lSxw{t?pD8fu0 zPNcCe>1&@o9?jBHwtdmuq0OUb5~2MfDk&VSeA;%%J6fn~7C~8z?!c|?=w&`3ww=B+ z<9yjz6cAu$F(}V(NeD(Ndy4@+|`upDgf2@04QZx~lVX9+A@0HLuF%yA<%4NjV^Wr%AZo3T8 z&5=vGp^;dAo;Z=H{V<&Tf z@8qrt z!{x*eU|0NdqJ1^us&_S(ua0u^D8m>bHd(SwbBQYJJ*vgPq##l&WA0i^)c9OP$8LOv zNDmq51OY1X7w5@3fCG-0Nr+)e+QKs2zaasgCgyg4Kf_k&7?(q$ZQ9|iJx8-^`EW0q?O7`GkVqY@new^etV(u z`qbviEtvJ0mvHe;Oi<-J3c-yuc*sO~ww0DM+w1QwKTgwqFS=w$^FSArJr?_IPY#yi z$R>MlQQo=m(BRS=HCxW!SYY%St`mxic!n!7u*_)OeJi>5U4-jL^Y2gR=;2-p94iJ;}+zp#plr~YIW zQW4Y%k;lq%h)Mr$aFgHNwG`B!8!;xO4{ zWc?ggP?*)tE2`&E3f1FEw?*yesX))s8^dEq9^rz~$`B@xrij_cxjLr1^{9#;_=3j; zqfbRqfnrrYq>y0`mVj8pS7VZ7wPkaPQpYQjk!SXM3|vZJI;1!#^7Tlr9`X9%C2p7iTyF}UwL$DEG8O%6cxj+)Z?wPWAi zk01JILHoc?jX0jGhKIPy0r6Q#xzusX@YB_poW9=fSAQ|hBV=VVmLKDDk$NrtDXA?> zcqdDx;ET0xhw_{KhC&(K%7(lgfc`)5JiF}D< zP}m|MN%W_j%7HNco~ONhN#kapUL#=l9UYmLP!qqPaymZS!eE%3JtC7tSC#Xz)aebF zAuV5}9{q0_fd6St6T%G!d=~kVa-+SRE%XBEu3lFVvr`!4z_a5(h!3D{>vEcH6)*@t z*#nI!cI2WH4)!#C5N5FEVjs-1t_0o0s^gT52rBTHBIIBXuHtkmkqRf<96yAV@jZKh z)P5ulwpNWTI?W-oia3h9^8Q7Q2O!HCo^5>PtIDxY2|6*oh_sPkWGU-*Mu=*Q88j+B z<6wmN+1mKnY~4`YV}k)MwqH` ztWzB}QCIXD43gtS{*z;^2%lAy=&F#ml#`RlXEG%DqG^Upq^vslI5)d! z%@kaf8b^;E4i-h99On+l>cAcvJ=i5?PqtFA?KCxo>Ltm%pU%U}Bw4QX;CU~`^ImF0 zQ_-6U322~@5iJAkZ_wjMpwK2`z>-Z8>^(UWP~U*WHA{)(K@_T3;H*Llk&_|MXTG>h zx5?gv^661+#Nedv1PHmu1p7$3YMpKn9{kur>N$MxD!$b@U-S?>1=(MTfUpK^3Uu+r z{*GC-HNq9__fV4@(xNL5etPf64#Elv3{h&0Y7Wx?W*gixDUC!)KaTfsqGW2ip_Ch9 zuecc^R>*0`(0R^JySl5Dsr4(1{BOSnGK5SX>kojl6mbRRNbtmPZu0GLo0P$>K^H3X zE$Y#i>&JW}PU(;6mls%Rqq`GL3y$U{x)OnqoSV$Qy13BbJQ(6c9?0X`lkL?pzY7_9 z?1|=-#!0+@n{gyc7aPL3*WLpfRlB|-@RKtM&~TQ}bu|rjP&fiF2a@?!ForV!iX-=p z75G$@2a7_IS+6K!@k!=j0w2SrrDfo6q!nYPhLXZ^#jIcTowzSOKODS!H#M6q2wV7* zK+Yu`h2EQ$HI*3X4k@J$;juGE0n}-(HxY|9$>KDCnq$iDBYfLMH@y0hO+rdlOvNM# zG<}i+sv6cLBFutLfAk&mcZSS~c`b#CBGf)X>&yRA?D_4}|5keG=a->iAmsTs39Cdk zIBEr?wu63h%H>*t8>sqY*B?bc`z+oSn@J+dmkLi0Iki?!Ck6CjVo7j&nS2Ufi*REn z@{EHXK0q^DHv}U{RVx~)XmGGveENlUQxhp_+CnWMqCJ2tqA7N1-! zmLN{yER!W-ZF$nR)R25WkH1-D&02Bj5x^`r@N$UdsX*`_KN?iR$sR#rh>wk@*Gd2u ziBpkLIs>A4Wf49=_V#qdR>h4@^Tk7hrNp$o<0!qrj0}KVjyMRrI5pG642rzN z|E_gT;b70+#IX9Ot#lh2hzd!6+vVfRpZ=(T9FX|`G!y?%hc($&_^7fuu{HEIBV%6s z?HsB7TNU2xo{~^RgwxdPTXK@3Jmk(s@=ICtNPuQ;^KP=0a@qS1#@^ubzHARb&X+dE z=>Z!UW4oa2cWr-pCaHfsG8-mm&u=g0{zJ}H=N)kVhKAQ3JGcEeaM}h z`#Q^WvBFZFTcxz(hW<+dD98DuPs5KywkL^SZARXeu|}nm^QJGbR{_FzFPZ0r&R0L1l ztIt+%*dTOU8eh&*M4cHu*=4@t?|V8_ucSItPG&zyg?x-35i{nmW%^r|ot)s3Z#pfg zP-Nvp%t+6jkBuV2jt#IS_^6Zc?Mdrsp5+gU$9a&96V5Gb zjN&%oXr2od-K!l_KeUPo7Q%q*LdvLQ2w&+<;C0&B@ErPSsYxu_;PKzCR&ir+xfay= zlvq9DpHtX>%WK}3@jxu-+ApI)TR#TG7dDR;*mq4+#RgrTF~(_JFxaixqYV61)qN)}7R)`!hZg$~Nc#FR+S#aUhXdt*^VvLDmk@IJ&vKIyiN zO^)a<_JPKOE1kH58J9UQ@bpKt6PkQ@+Qw{8gfVcQAjmgLaZBi?<74q~o8bX)1&A^{ z?-aJtGw@|K{Z7E{P|UkzA)Bnn{rWWLrkhb?BgiSI?||d({U0pKsYAB-6Ji;Hfc zRMk|O_qyFH$3o9BlD$$$=RJ6^*NOT9KrYnJEp#J7{yaEcZe4Q}4(h_3AQ=?x7eiDIK-YnEl}E7HOZ`b%4}&akz9C5U|KAD;*RO{gH@y) zWQ=5#3HQ{#LD3!G+wo|=koikTs0n}v6;l6pqaUjNuR*QnX2-1}vnBV-cEikj zT16QuAiTgb+)w#({k43pFZDP?s7ZY%;5C!cz-JHl@67G*p#T(ZRjj%V>C6Sa|5%Lu zH+OO)z;m@3>qHA=kU5rW{_G&+_inO<_)svg$f%?7*rs!q9( z47ak(=wn2Vx^m;`3qY<}kXPXtA$`*w8S`BHo2>UidbB&`%*+BZ20`AFRuo(D#AkVT#F2mXz3S3)Ik_Po( z3b^V6^!;A+K&MckUF0@3#dmicw9%{1x_joH4baS`XAd$+9wMK>Q?;Rwk^thTmY0|R zWjppO_>qL#L`?dG|N8E~rl!9#)ZZWI^&2~(CJ{!v-$9WQ6wZcSR?IpIhV)}3Zy-dX zd<$D@|6Tw!%xWGd>iRDMROr7GK)q`m<0G`BkA^#{_%6cJf#x%7|EOvX97KsY&BI5$ zBKuAq7((_ATvAN+$E%TR@zDag!)@O<6P6xWUjK$laI$U>^u_yBmz&)c>>Kc0-M3$)4za8X2Dx0ElDU>3^xSAp>U55V2x|B!GI`rX6+4&wh7oxi{IZ>03^%4SBn z5$n#8ZtclA$Jabq_^#IF0{Tf%wgz!s=v5oxq!i_gyekP&6S3qS&r<~gamF>f7OeyD zld0^IXPj49NUS{=r5U*&?Oetu6~m}1Y%iuGvGgO;!zNz!m?B2N$9pY;=lTl`_3IRf zfGbT)HMzQTag_N9#F-?>rXzt|E1$(5sY~OWF)F;9cQ$%E4`&MfR=!KmY}~M!~Z+IdvoB$(gW`vhN>1)Ag;7^(=;qK72Tw%;L0Kv zc1OYBWWm)@<@@akO>4Fx39P27LDkm+RR$7Q7@(i2+W1R9laXPLx;uf#jymv|BR}5j zL~TSzBI=Aru6GCSphyC_pWv7s%~J39q63i747C^i9}=3f3rU~uRpI;dFqX65q_Fd4 z5>*8U^dVW+I%@5i#7cW)@A@vVeT>h*ve+CSkHh(^M?vf?kkK!vsfp}lNPQ~X*mNF< zvx=>GhHy{!etB^vZZ}PAt@jjYE@KYqTeoWVgAHQ>7an2W)o=UecGU;m25N;n&;PC! zsPXQ~{%p-Cs&cFW6xVnKh5wE_|3^$F@+FU6o8SAl<-`B_atAI4n2+`cWmN}#%9QLE;%mw_ z-KMiir<53-T&s*WDOWn%^dg6L0nht){MAt&QlMu7-%gtPxa_0m#I+ts<1oV#XB+^d z`e=)OQijt@F2ATeEM(BwV=$P7_5|}kp$khg4aegMwfd9tJ zpMw^mzWxl);9a_T_RpGDHPe_$0}hl~6D557<5q?j=FTdxp6pW0@w($us~1`W6)5mN zPKr)bbr%VPjh8SiW=q6T8kW*VwmYgWQ!MRePC5 z((ooT4qjwrcLE*F0mohBN|QZtb996&Q@90+cjj8|`FW?1{)So~(6B zXWNwDs{ApO^^iF6F89p0Kcz2gg~^@uI)XBzeTnuZI^r{< zAEkLn%&oI0>_N{YB3s+X1W6TmHYq~90KHi{Tapnjpl;&2de)6pX8>aQYw+&k@_MB) z1}0K0QDJI$qMob6ySm!z`K>#_>D0BxbO^zhwK6@r`n_TiV~E%_+)n|_B_Vi%R8O(k z2QaoU?2};CNG#!K#i4&lQz@K*WEGRiUhlT4!h-$_RkL{FboXQq{j(|1|5sD+QRy!j zBcMO>KeL$$pW;s#gIavaMG8R7=z&Uvj)Hz6|82b-!*v5^0}-UQSk)Z`bv}CB-cLnL zYc_fVL}sJ>t|DLD!RY{S+ub_(n(h-uMzxeMC5d%4W@S;YZlQAeUd<2I_qGZ$plo!k^RI z-I4O>DbRL0ONAMxc_1{Pix%rR=Vzuc#8Q%Qcn&q74Q!j027r$h*@KDl{6w3ab=k-1 zJ`e8P(yS5G?H#oX5FS}LbNS%?Y97hhlyYd!FaeZqiZSVp*raZ4fu)ApX2?ke$9Rv( z+Uiey5;63oRO9bDgN5ZI$_2=fAQ8cbe`m;lTax_srGF!hKOty?t~yj+q?~R6(cI0IiIhR{pN4%h` z3SX~lm9XpjrtV9JI~Wm6#}r(Rrsyq3B6?Yg4k0-!$Rv7hDNu~Y}S zNC`ak9oW4A2x+QNI6}K(x))lmiSjQ@sV$(STqTkMLrx+U)M1N18cvdzb?NBGhoi-o zvQ)5rp!MR^e082Pb~-Ksg9%NfZiPB;)y>6El0gR}$F?tg2B`F?b3Z*&(`AC>$@piQ zeEA0oczmntUI9-+t&Vj&K{vyV|)Z;Xd`Qd8fPB^|R>O zA`M4RZ`0g5qP_Hu?-~X8c>F0!w4aL-*$s?p)?dp_>sH!St|xa~{?k6Yj>3gkf0uF} zJ^lqu3`b|tP)7)puXYWq!;bmMaGr~5l6zKQ0z1!8l)PU! zIMAp4gW~{-&o|cKDsP^3Yh?DLO2X)C?=WhpQY96`PcrUP>>jDhsWLi-RrpV3T>9jG z-hn1Vj5}{xLvx0^HMqw`<5s#4#^kb+Fq+%TYR^WM)TNGH3gZBgS4c+4TB7taJI2aj zfW8krPT&7Mn;EQXRN3SDeD2aEUni)1iH8WScHr+OKuzM$q1D{1mGN(<`fu>p|N64T zo#h5I03y8w3OC@b%nPlT`$7~1!5DO;Wk#P;O5$l?=Po<-HO&ns5Yz&Pevzf@BSR{W zyqDm{$0Exy-R+rbaIXg_-PGkI-zxHcmuMluDjPLeG|(pmdJY_WArhk@yWXEPVVxR4 zT_=CaHi7v_nCv@gPoOol5Gu_UewU4t<`G)`fL z4@28Uml8>EfUf3AsNy`3lnmB%XyncgM>=KRw+*k&_}OpnB+7j>wAd5R6}G`Ao(XW8`DCUi%XCMpg;}xkadT&w zF29qM@x@(|4_C$~4Z}c6>|oGT-H1Z2@9SvEeB2Ardr2_y>_B?Y1a!)G(#A82*V z&M41cK7H~iUTj~T1EXUzI*>LbJ=lJ{kzv6#Cj0!hy;1adc_L+f`bO@kAW$*03~s%j zbhIzdzeL^J?0H=k7XMC~e^K1zM-)}2FJkb{{2>|tX^xW;YNp-N2S0zWQ`%mNp5*cr zcVx|?XWs}#ql48M3ya#-Z^>?t;BNiu#YPV+R5PMyD8IC1>1pzNuXeth`o?K?ch}bV zQX}aX0wk+*8AY>C^UVm?bwOCf`DHHU7SJ-o8>~UdUGC&6>RUQgh6AIEdDNoyZ?}WB zXy@~AVwrX~oGI)X?}MbtcZ>%Q&{7_lqx{$u&)XipN7WvtvX@A&B+~emYZc5NZGEE~ z&u1Y;7t_IT7IHhaWiHFnuYD?gjvx0KS5e&dHt)V>JyOJDFI{k3UuSevldQ}FEAXR9 zRChJ+)IR7ciPPCfQjx+Y`_hy0_1%`Jd4Z>3rz1`8{0xH86!(pmC7#I=dpjCSp6SR3 zXL(IjC2ZyWs)7ct}0hL|EGM$~sJrA2aU=2rIeB$Ue zB03%{+_Q}|laP+-EYnh^WuPn1;m=SJ1`-VK(%ZquPVWr_L`JXm+o}L7!UBuEqM%MC zeA|ss69*blq=?;Z=~~fx+0fcv@PXXv=n2e(}*LJm(4r3 zk1RB7(ltK=IE;T5tJ)nF-NtsuO)aE?Td7m6@OdcPwjX0J@zcp8LPOtk|6G}rO6j=| z@W*Ga?yVD>@+Eins2z!;twHH;Z!?m%BZn^*a987PLjzHwjAs+yBB#+^Fj4#Vp0MrN z_(MO$<7vAvuGL6cMZ+N8)~O@~kM&7!eig=;`kVp%n)w+?N5>r}Is)_eQ)QiBuj^ms zlZ4?XlQS;_XWW||8N*}~An-X^KpVNTigOortE2S%_8r#Wg};29*_2P^U%6q3zSoC4 zOPQGk$FcY&A>QAlYNxc@X?5iRX}rUJvBu_q^SB87;NjYnKSH}(npedY%xAp zk8^*4eVaCH`6KD#^Man-qy3YbizVNoYz>C!7Z%*e%CYCI3qGF@L%pbUxBJlHPnx+q zxGt1iNA~MiqssNT8s_*(P4wdfnA?{r8(60qE_MD3sQK-vE$Q+tlOSkpZ~ZuZ!^&b% z0k3?QL8c?O@%1px2K{XM&9hS4$A}o_vc$PT9UY%YF3I^kluQptT1Jf6w*oKpi4%of zRV3VJFGmTPAQnZTC=88P6^p)|Qe~qR*clE-W3+%)&Vc+A`cf(@F@%n?ZIsUt0*{_3 z<=c&bXQ+O>sauh0%!e24`@;-dKx&nc%`p1NAPg+%x`%yY#9~{@`>yyXYq$YZt_4)} zC;6(oZxm&#_HvGZwOpt786wv74XQIg*F~s7eas*>AYC3_Wzj{1Q^cklcU=Te$sJj4 zevcj|%hk(;3Tl4khj92cKKt8izy2&ZcjfVw3x}>wO^gzs-{`BHXuHwMDcmV#l+5Z; z^L;?*=q&LAx~utq+IwLTba9XI?K{eA44+Ff01K+&;fMeH$ARs9^+X{;OAa_vZbt0& zbOs^mnxy{fH%rL*1Z7f^FcaIR_Uv})R$k%J?uR4B(xsDOCKf|hgT5kPv_eNls_hYz zaqe98D`Zl47fVrk59j)PiL+uhIs#(bciRqkA2V%*Gb3jr?Heu!Uh!BgNZ}8zcia*d zV9_1=7{$k;8^xQpvoS-P9qip`o>SC0XxcnCNphtq_qqzLGd`~a)kGw0)%H7<*ulFq zZzCX;yhx1e7PxWmR`6L}%9haG7p?K`46oyCgKk$B8%60z>%Dd&9xlDh1)`V|WGL8D zLN4TZHWuIe@dHcRO5YgR9PDpru(N38va=f*1<-)?#;ZPx3Kti!GS=Vwz&7N%*{#A{ zIxtaoiBCcj#JWTwFT!m(TQo5@Z>#@CzGNh*=Ev5!5{D(b%g+brcf0)yY4vZs^>fb- zxEe+g)UA1nzNOT=a(th>>YVD24O~c53stisWZEKArGfS!Pm>$rp3ja7@jWij0Z>cT z*kk@uv>_*WT~Dr2k*{e$k4WtO26rb4q&%r-oatN_h2qj5?;{Wp_Pr|Btr!{D%8& z`-PJbB!VDOqJ|)%1yM&yqD=H4dhfmWHiGCubfP7C??xGnE;`YN(HU)Y27}r2yRPfr z``P#X;#uoi>v=VQzhVo0A~4Bei6xqOIogoyx5*8 z_1w+@6C@TE;cAI|*-*hP`{vmO`5jeTnGr3s$Ba`|GX6_o7hms@h{cwxBE}(GJZ!YP zza{Lw9O-K^((eNarFk;pDaG{`k1WR&dcg+IvGjudx9<5`h6Y1*QUkwNca+m3K;Myye zY+jshwqsA7yM!87qV{a9Pr+)WUbtp6yD_$A&@hW?YtJ`ZQ4TpyB7XeXikGSw0*1D< z?K`Rp^(s-~Jq`SrH`0!7j=E7V8x^~sEX{LT$k|U4GZ;+M`b$3mJ9Iz~>Ecv0DgBr7 zSduD2{22CQZ$qFtjb>*K#Z}^J=3d{@QvmO?cV5* z2AM}u;|!C)i+@z%p`x(KINlp67k?U83o4cWp;x})(3$?#bY_+#xN&GboC40wE5_T> zB05uz0S)K<(ye|r*We2bXN{*GE^r!Tq_Yvx}e-i!siyCCf^5QX4=ue=^@A-5#pO#Csq^ZAfYITz42{E6Pk@ayk z(l6JmWw}9`@TtdId>44nOmRU!@OH#$XH+oR&?51XM-G^RcjcdIo%WDk$^!xC|G?OQV71R|cV-p=LGFVAb!e@VRL+}4h^Va>@%Ad?J{S@xoP#Jw@?{dk}UFAkA84Wcu-}*_2AbLM>A_1 ziSP#Y?HxFe?}humXObkqrB&!@XM~}o_H?&m>?73_TL zmHp2_Dfrh|k0c1|k$$zmNPXM=LhgM0_qcR5U-9y9k{7`2;Rev1_pm{-(kE_G((;eY z?n{j_m!Cw;jd!LVX}1?VQwa;@!@YQeOQzZ&<3#KE$;sV%{%LZ8H#_1^+`;Y5mI_Ur z6A<&Ym&PYORc~;{K29oD;sJa?$io~Lk=j5fa%GoZUd>$peB{qh;8{X zA1)kOcifrBV5(ZaG|}*4-|saspcZ2=6&4e@!S$~CL$YK6>%TqCHewy!pfwFYs{>$@}{IL;B95=iT0N<*Ta5* zm$6=$AMJdhhjz33eNfH`Vd02Tq8~nZ(17>oZyxDEfW}Nk^G_`_Yq?G$n$&Wrzx`_? zX!MH2$Y8XU<`$6LIaMNqQrPQClTxe3jT>VToVHefsgFpclwE9}8 z8P*F(*Q*7$XrHqxo7k5k19>YY*-!Q%EJiCqY|tnPgd4Sq2s&PB+@sexW%T~6g;dJ^p2;j}~ZhP_} z3GL1;Hv~Fas_B6X?pVU&U@dZ&19c=*8ZV5u1u7;usb1x(8aNcmhoWiT2%rv+GM!jW zw^29!dzorrU!qK3dj;Bs2G*Zn9xoqyS=#r0-*H5o#h>zehEk=Tl*M*p7V+B_9a3aH zLT>AWBS{=@AB-iJMMsZXN1H8ZeyoL{(;B$Q>sWbu0+$TG&Wjp7Oh}|EWx50HbqYfy z&GP-x$z+q{<=_8VjP%ja)2@~O9tWVmnNne~JpA}Haou?Y<9p1rzJJ{LWG`UD`{ zgG9wkt}!qZV#e?{A;^&UkS;H;;q(}CdIRlZI(u?j-m4=Jmy7&Z%l2mg`$>yuoS|X; zi@f&q@J2SrsFx-zzm_{foIxCoV&NWnf8Nwd+~NVhv&SVWAAAjJv;75TPI_sFuQ_ZK zM7jJkvMNPp6vJKP`NI?Wos!4#*#QjV#!TOQ3-sSY!t^px!3S&?ebaEJKt*p4{LLcA zN9|XUoGkX9<$WQj(VllkI#nWuttCXe$8Ljk)Uj_HUCcx&I1R&($x}^+5A|{nC)+d5 z{|B?pc=xne9g^brZi5m>-y#~`Sthk4zLv~QV$gx-^?+H_Fv4{>M2KXrZ^N=-{pagy6*?rA z&PZ_+d!3mGJ*nO#lwrK~?NtL|l`XGRPpY32hJwVbyS-0b;Ivl)g*h`=&tl?sX!%WM z9-Yipy2=$6u3iq8uHM2r462GM2Yu8NiCF`mVEILFrGyjG1V1v@p*f1rF*46p*GQCg~HN z@6CE(Optfv9+STI+EBbbK?~{Sw+a>3gy#R;vmHjy{#m)6lX70@KZ_*LB;xYh5Bb?? zl-WF>%knaqMQArFHijd7x`3y5ik)zuFni9;VjW8GK+f8K{Nd$-3o;lpH()mb5E|(P zj!DKvmbB`Rq|~0HSAwBAQH8Bt(aBGMU$ymdvS>wu6EX;99$PK>P+uHlQ|_evzb@Q~ za2E~6h-UiY1gWU6bpxb!m1+(Sb&6|# zky8}P-3Dp9#13rCLP@ssB84 zN_V>Uz9`}xR3AXNs5GHv{BU`aj!6U~c zdbSs4a%%@p~9`%EI5h6G8^0*w)?Kr-x7dUSa$A&9+@T)Z zQKxKiLIlQ&G&mJi`A6>g zp6Q%8e7vmnbOiP_-0A8Oh8$R?%-`w`^m}JA_kFYJqJ=$;wlL!6%x>XZzavd}+{smz z=$X^4GtIocGAmS)Viv?)sQc>6eI*azU4WA@eB5-`{mjo-?*7c`myhSLCYw)MwDE_8 zer#Lc)4%O48*IkwyR{4E$x++}`>6reXR;;kzvasSlL^5E9+6*e{53G4YkCD(Ggu}# zCceCDm}pvOyEUXZY+LCF3ST{txVDeb%nGy$FS~l9Rp&HODK1NFv-Nt-M~)&zB_{-6 zsQuMP#K~pT!d~?Mf;s*HJuXB35mThE$*&q6zjE2BB(CzF$D+Bk6mWghoaO3M;`<&g zqJ^<;C-Fr6t*@~;&6$a#9wFEVU3@mU^n-{<740x~`5a3T-BcBCVZ8X4-|er;E5TR| ztl^Ck@$Ub2ygg?#)jSKkFaPGv#~STl?wntIw3qq;Fbx4qP)l6^-OP+om=H` zDA@m);H_lb^JDt+)f;* z4VEW+bU3=YXAOk$DPnA%$%4)aXLj=nOaV_?S0B5V3>wYSX$zm2+@La8I(a;|H$k0t zsNUzZ*+F5E2Q^R9hmNlN_+93F`kOLfk3L1Tlbb)37;5(?hy&G7DaAEE(xRRC6Pgw? z>*PoNT=~T}azDZQm=8&Um^**fr|tf2j>6a9*2nV#aGHwjy=#f~wjdZ``cskijCMY6 zvlG?|yMMn~K1*X&4tGT_gRihUF8yc`=iN+w2X0 z_l*>m#J6TPqdXkqW_vFl1lr=h5e^f%qXgA#; zIb_!dFyDLL7*eZ|+5TRBKD$01MjBFHp)KMin9@QtTP9>5xpiKKOZnrsiy`(}5#G6m z{tiLG9X1Cw%nvHlmU|r<ooOaG)WbQ^Q|mlxA(x31RqaHb;&Ver+lA#Ik592M$|C5*&2iw8_I=j+GF;yQh(9Mg2;G* z{ndYz&09CsGeNHZ~%z$=Zoa(Gab0rn=_}hT-(i*MNz0)G4fkTaQj#j zfB9$ur1ddz=AVk1YIab6QOLCzj7)x$t2FthnBK>3amy19*|=M-(LT&NxNdnB7gi1{ zAUABzcS-V3sR7~ijmdWlqWq?tm58Q>Tn^l@@sa1qC}7-ags~%~l+(93>>-}Wd<#ka zA|>Xo4yY&ip(q{m<__6TcaQ^d#n6x5tywMd^(~N=>kH_k$CiZKJ#pWLpV#)%RGa#V z)H@ndYj|Y;on6cJV>5PlPc44YbZ}6)y?*d+#<@Y(!sdXD;iwupwvw;F`(nkGe)4?j%obbpZ;d7m`0IiQZP3Ab$cgTMKvh%=R z$vng%8B4uXpQ1&WG$Qm=BaH<}w!^&eo&^!4e70exB>0T|FS4U1K6p z?|In2sxud>Iu_T91Kmkwy5Fzw{F>Vl;XHKQq8(?WGd;oXM#!qH7cO8?`fIFRBQH?s z=4Pg`$)}w8@Jbuu`_BAq`1k1m{^|sC_t>$9SzzzHQ$?&I_FnjfD8XOD_{tj6i0pcr z2w8-E>)1a#kdk~Z<&=>fGNtv~Oi#>LK5Ioh;!x`On`F0~G7(2Z6L@|}(@L{NGiLP2 zOmF$WA&zfx@0|a!^xv=ifu*-Y*?IJtDf2tE;H@Xqy`1O!>iz9o-m1N2K8Ej(OOpj# zKd*?Li){e)KsX-);rD;Us6Uiw`SZgNyO+}TS`lwr>0j7%izekX{~5u$mFrXju~fHp zj_5yg{r{WMSO3+m$9PI^;#$bl3?p7^p1=p?{#egqtN;S>TQc;tR>J`6HQzGt=M8P9 zj^jGT2DjYwotgMQLRyqjK1TTHm8LTX$Gl}q`*pppheb>pNjoDJ4;Vvw0a(aR9+2rW zU$DJOj}xC`UU@^xBXKOcB_px+ra_W?_U?A&DC`*g%>VL_6jkaAA3eF^$nMHZwpb4# z<*S*R?bB6n+Z1%%SXtc2)u!&N^iPILac$HgI81YVsBgjY)|0VfW1r0vwGSEfU8d)) z6V}7(%cly>25C_14Mwiw!$7>57Z3gg&OCd7U8pfS5yp`Xu-|@rqN{^KJbfEB(II8* zAL1oR6)CRj2b8MEB(AG4?wsj29GaIIDjVyTwo)r&;qRZ*`tNWF^O-}8ksDq|Ykrbu z;yj00NoAAIt@PjBLzW$@@!*gfwi7ap5$hyd=w^PU!GH*Y@jaRizOc4lGx+n_NjZ}~ zLJ@SQ^y_~oL<0$rs04 zfGKag+k~G+V_*C?T)4QpBD|ZmQPVSe=Ol9wJ3!AOjY=36E&jCU|t%71W1Wziv9ph`~5ak&zTkWK-rZC0t-ZwJCXJo7z<-32} z{YjhpBMKZkG*K_2Sc1jRc68D-P^MxFdw*882t37Nqwj<$+FIHohF*lmHD`#Qz7Tus zq*EQWM%L;2as0VdER-4^Jlp*Md)Sny>hvVnv1{^>PQY7v&JbCy-PLk+z{;iNDl(rd zv1qm4DizPmXp>X{S0U@|bFFsplQQqdQMt`6uH&jQ*e@20!9-S(6ZW|S>5o2BBc+5- zQR2{qLxrh_Qr4ENtXA%-DSmBt8hnc@Q@3>3=dsb>ruo{~9IVgg$0=F@D;A`$s>Phi&ur zWA+8|oqx-p9FFM8DzRr6Ynt|}{E>|4mny^EYkv|3XC1x*9QT5kCQ!kP(r*i5!2gn2 zoCGGBPjSQ8Lngy$gNEcNT=}jGs$9l+;z?pYCnLs04|rRdM@z`B#OL-wIiNm5H@*4E+`N`%-u9+Z_;8Tj(@Cq=|~*txRo(mw~)=JWtTXRX}HM-FJ2W$HDU-4m3zS^nDhr z0jq42lOSTPB>HnnQsW=NQp zA9}Oh-EEXgL!tEL{Y0y)Zry8&B5hrQih3&Wv%r^sZC+-gkPk(j1XOw6TUSw1P>$_+ zW3$pzL}BdN*bt2WXFP#N&R5aL$Yh1n;W1xqr-1r9VxS3U-|zpPPH>|9fq8*+`1e!b zKP0^@6O{?41E01&c_&#ZzR_IPc$k-*m+^Ex&(T%da<%!b;Ft1gS~#)fqkx6!C!l%o zs4pQ(5+LY(kIzZdOL(1CzbWuCC!d;7qLW$0Kgi=isNQk8v*|kNqLasID|hUusvm>B z!0qy6>U2Ljx;+_{Y*jk4%{tvwr{WI;fGc&rB?;)oE8!9r8i-_6Tf?4l>efBXpzx1# zvML8Qx`nT1I^HxaM};o8MXP|)f|BFPlxNM1n5kwT$E3IAK4P8jX4XQ>35C2~UU)>K!vb_$OR6%CTsqc>^g z?2QR-(n*W|(qNjd+}~}y;9ulcBaw(p=glt~gpYQgTe&~t-kP~PdUtm|zj!ac4`>*o zKtd=MFM<{qJ33Jj3B)?`SGOSe;nKVaQX%Q;KHz%cP#ghtaa1=lK2GdA!!1UpxSC`X zy5nR`cLSB7C~OPBU;6nB=do#oG2wCtd`xkewe-5_ATvzMF@W0b!Bo^0a|!>QC*sPQ zTz|x=W1H=uTS(zn!MV|IBA#URXZJHnRIKsO0XS!-~gz^0+^OF7ve`hwEwyxRJ62zmiJ3fw3K#;14;HBdG!@BFW_V$wP0i>ft_hcUQ~wk)k>mO?)mhs` z5W4E}r6pzk&o;UHG@UW zC!w<^ON8LHX?$q6!n|J0!}u53-tP>>bw8|!Vl{h-aP&bkosZp9?ZeS-oddC>%KH5E zNcRLVD%8wQsD!xk*>Bnpx*Sn9R%^rVfLk54nM30{u;S4&-8m&u+Zz2 zDqYRVnO5^;Sw$ykEYL9P^th>)HCUrp0Cm>+Xmz0!`t1h2pt%xe$7+^acjQGfwA`69 z&|^mu(-$56F)OZnaV)UQ!f_93pOmR&YVo8U`Th)n(KWB=uBHj>)2d-`llVQD&gHiU z$P^M>C|&~@9PNY>b$vTf&FpUhx>#OoQ&ux;e?%x>p49er#+Wu`NvqtTy8eilz17c_ zbh{bd1o1>%UwWkeAfV_|?6|XH*f-RA8Sj+fSB~(I@h-Qj=id7tvfK`ODMm}++a(r8 zU?}BH4SrRn&%{Xd^c>9tpZOC$K|xLL-!vya!iQK%3f1~}ctA{vnGx9j_U1da-4NAx z9(rZNi?v&8rBSh;IRVqZ=Kd>PWO_gZ_NM(N>rM4J(ror)22=C{iunn*@sD$^FKumd zMW8(I&5%vn+)-U3QD2WJIV7{}H-9WOS{R*vrvw!F+DOG$=#EYTo2~Pxrc|+N_?eCr zd?V?fRva|v&zBn~X!S<<<4)AEUb@!0$sSK!x7R)KSTemWnLzfnLgEvOG3n~ZS$Hcc z(ZmGcnT2=f0#5>WiZX>p$n4gRhMYQixx8`Q>DsA4H0{Kg&P8l<=L0K!FCyQWwW>4E z;VWmV?3{_msYa6bl&&nawjQ*ij-YQrM1dMoCI3afzdfF|JKDg z{{cJ@SOO;3FdS$6Rc%Js^+QQBM_couXl$Dcb1+NZKs#KOr(mgc_j!!Iw zQC=tfOZg{;Qikxa1tcnFg|yIFXf zIh7sAgJaho_!vVkBDsw%TY4EBaHg^-D1mk|e>L-dXmo@LP-5ScTXL!ZcGI}+cDYUN zZ^6G4k;6P6BM#uF{O};As&9OVMn--(hd{GZUi=+48n0YOfZ76nO6_Hy&-{DDMYu+x zX=rq}MrCyZ(_5KpqVNf;@%pMul#%-(Yxh&-XW~emgB%4xt^A~@p9paQ*M7Hk?Ss6;G=PhPBIpcS3Pfy;3<2a>w3 z`vl+%0e#*B@_aw(>XJ$BekesHFH>5$O?^h%H(8}cv%Os{X%Cb=LK?N*QLnV=()Vk| z`Z-lI5YKRro_f1Y)|IRi{0p;EGe<>4<(aUU_YBwqWXC(yWIuJD!EpsM^+MHq9{Lk%aFxR%xl@!h{=9NU6>AyrNhH^<++Ut-6N2kN}jCB9Zx9K}MPmJ~4d zvKV4x*Xm}*G4%w`&gJl&{3s^Su5-tYtW$7xzjJ-@ab1D$y6Cnh&rN}nUi%C3lxCDg zPUeQdWD?3Umi&g@y%BB1!n*J7VoQA;YA!@Lpy6I#L~Zxdp}U9 zRmpoF>~i^f?hiIu#M8j*Y-p+V$+>NqdCw=?a{UaY(#P%#nyX8{`FY_)*O{L8!n^^& z)9&rpDtfT36OVTrsGK{}Lp=Y#uEK|5-OeBQbsanF4oK6TWSg*8dhLKEb?j&1KGMem zMEa@ z`Tv&;p)@Z%(`Z(LsYzui#$RISlTan9j&{>n!)3K#Z-S*oJZHZ0YD06|Mz%ICy*7E!9#=gsr+wN zA-%G~Agn5Ke6K6q+1IKTtaj81Ct2wyYEIRuoD^xg&BcM!8+Qb&gs+uMv`ou!&&f4i zMCE-BfhMQ3r#0pZ>I!Ts4JZzK_Xk9x5(7D&zvd*hznblarkcsR*glVKDGMg?) zlY(d2RpH|UjI(>~5&t53n5uEi&IeW8<+qskSn9lI7DK|Ih}bk%#+LJfGGDxmMyAkp z`jYgHCo-2Sd+}@)1TKB|5mERfP#QS*RNuvX@_mi~0%!4jt!dkUn7R>grP(N@c}WDi z?$L5yhNufXx51vX6bTT{U0GmjL=9*1Z@(u9hXdZsn+1A~_P*}8fLQ(1dm6Ml`&$G$ zoN+*@l&aZ>K>9$=md4VU+W5(IEr-28e~NC&EAhCJ$Cu~;DN-gxVPG3!V_T}(UV)f@ z=9}Mqx+wAcKom0SI@vvgk!Ld0J8+x)k}HfRK6Ue8W_s7><=q6->?lsC*$pYZdzpH? z4^(jOSXp@L7}fanuo>3uqVJED|8x+tWzus63^rP=E<2j#!`URLEyd}ZT*PFrzQr4` zD8CM;2iA8N-0tRCSipk^huFRLvHwQFsmpM+$UNYbU3y*9d#`Zje)@Ae%JsDcE7PD1 zJ0Eu^F+bBLi%E(`sp&`Q%`0M~%oh)96N+F7F8H;) zLM=jc@&Xx^nWRmOrk!~tg~rBb*$LRe)$|42Ulh8@VRyGp?pGP!4;4Kj@&`ev`e`9zEI9f6@S{;~c49NMs`4P@{ zNqCb)$9K3?Ssm+r1(g(`C(;Q<1zUdzK(FrA)jB0Ezr7qXPHousm&n?{J9jy@ad1|I zm?!b9@VoXlLXB4dygbAHraxi-6NaSv2ZjvdMl*SB6F=l>m2o#Ud2uSA>m`*4WN!>=_`x;fIe^SgMcfUA% z?g{z=)&22x^3gagvcVYU%xUa@ z&%CHAtHcw5z>Bfcl= zxMXhHxn1+e^;<|vt3vG^zS!MLcqg|MB#U6?0`$aTf$2RrmxXX;=8YTiv+mA;SOP)D z(wvnDW0g(cPU#|r-|A#c+GNBMjU+GQ`(up>Eq^Z`$^0`(o?|D;H+6i5SPs}} zpEN}~=$K{^RR)=DS76enTSR+%?K5ngd*Kcl{9(YB${NH}&4&pwT;Yw4qC6^dLI}Vw zLhvvzZa4zIYmA!wuEuN0S)wGNdvU-D{!3bhhuc${&_*duxZ_69PX9XCo3)ZoOw^LH zvDl(Mal^ChW~_m3T+?wPeUT0;V(jaA_a71CfBn2~efeW7@8wm@eV*$}BAfw@jrs^L ztnp5(A`>AaN^-sf)T5sYr;Ib%3k%BTLIyDO8gp-b_P_7}%3Ilfa5hE85)~5!g_;;J#aS?#&CgSi$cf{{M}wTT*k_^2GJy^3WK~3eQ~H zAo=(n8{a%4UHz9S==fO=7glhub#vPpJyA$dl~}&Rd=$v@eP}0s>M5I%7e8@1&6URz zA9Z@+NBdUN4{_g8 zOQT^`fNLN>RqinKRnjwpr={*C!4KrMR)9a=yk?AGl##|&{Ve^E^UKcPB&N2+&mTp9 zi0%yJqiissv9{%r>0WBcyiyYKQ2w?8GU3BddkG(EoE9ZZ^#LoY3ECkl-WnXb}eDMcXr(aC*fXtX}@dj#_hfNwokhN~aisH7e0}Gz$7?ruq z{U2GQb$i^~=`($CVfM5a(;6m51rnEbhuj!CdJ@%bILC{72r|~dC0AyV1Kj614FMXI2=bMYZ_)bg~oU` z5JCgrw`|eA4E7ND!!3STR`PSG%WgO2=%@T>T77Mnitt!0%&@21eg3!3`EkHSbU2WO z%?gaQ4`G<;YZLiPjH)MdngRT}v(&Z-I#4q*iFQ}1!4GrG>}RnKvCXo>HsP`bZ=&|C zNDLA{w8qo6etW%g7iVejcMUZi?MhF}i&cdnh$xAj()O}~{T0KW0L0_MP$}kTby^0pn_7AJm2n3x~&MMbDKa@IK zekB{YjyQULx@NhS_rAU1Yy}CT>KN5^a_%lRNPOAYvK>0#0g$_o_9W#+%oK~pV@0iu zAjXg>h|m0)j^|i3zr)$$G}v9EVe|Qh-ZBHyVwR#PGm}6QM-1C~{GWEd|NMwVzDFmJ z`K?bQE=fd)&4iVHg=l(nWpb^4O(HTRHaipjR8Yn1ws!FTRR}uxmlQUHa(tp+S#bML zRjcj9kjnY5JQaOuYy>4!rF-Ou>$qLx*!B~C**|fybM+A?pLpmTJjFIu=!7fENEU>x z7UO2)46>v{X9w7agkyhqX}`bdN}p`KhDClSeNXoK1pk>kf#>C~Jd%|&mhI}~SS%?o z=;D8U(yv0}v%`GWKrzB0VKyDiW!5_jhmLbVw<05zuWF`gE4HMBcIqgmzhN{Fr~WGo zfF!^j>qS;z3>M#zuKp?=i!HJi`hsmwd=*rq;F>}(V@?S`Umt2aMU}s4oVL4qefi+( z>=ESJ$;nFMd-bRt1d`=;EH_i<0&8p;Hf+AdL(e9iS3R}Ic0fVfkZxNf$RmdY{`L}c z4LgUcH9n3E$$raFj44oXjySmFNzv=ULa#j)+&zzR zX9&9Z8MFD;5c57Dj%V06#=Sljl=nQ4lyrE1kUBXu*>0*q&Re{YB@Z)CV9(~C zFlkS6Uo03A*G?^Xq{DqT7cRccv^xZJbY9E}ed(WJ3{I!>+|ojZhlmhS{ZUbYS|B8I zZmCOdYzdKb*kY?XbdkShIOKg6*};S7%rom921p(w6?o)CE})V90dfW#DK+2N4$aAG zP%3SIG}h{Xkf4n4bMT!rn03ey#i)slf&3?c7lt=vJ4YIRJEch^=i;Yz2;{8Wb_EYc zgeh&lvL9(Cw4dcaG@t1uQ9F5LSa`T{LF(}QTb`##VDJw?^tv#q+{Kdt>eEhcd$!plm> zn@Ul=H&If#HtS-;> zTp|iGX)XKqKirQax#)?yO=19yggUAj=~IesY9OPEZt4eBIQJ)db7|{`Yf9+dyQ11p zqW{Q>_2&1ch?sU)HPB`SC-Ed1cmk#I5|F*8A9d+>C`#5cMH__*N^%6fet!_67INnz^B%hewm$zT~qMf zK}3Lc930aWlLb9Sk*&O=c5gNC?5dth4?9uwySP|hfSd|X$viHd%dJq!u8pgXB8JK05_q#cJ6(<<(7Rv!D4m^%hP4Z!rkS@w=DaFxoj;?YVXLy_o)I(5WS|oRl)A&m*4h@oF={*FTYyNFZiO-|nR$tc!p?YTeR|vW zixoy2Oww~uq@S(4SR zwR<2mO$eNWL;ZRRD-2N(2|A`pckz{v=%xDxiN~2*AiGAWusDDJP6U0pk;5{a{~X4@ zfXk#^x8%7p8&{14Y%G+MbqdYEnXBcziIYKZZGbjQSA%ezzznFp?4AnknkX8Pg2w}f~N(mgh(|AYh zt~E2&j!tYtUY^l-YI^5y&acL&>I5W{8m>siWy&m&9yttj~rZH zUCcNgpgY*e-*ofSv|K)&~v?j(k^|Ucjm%7FsHBL&L&k; z2<>9Op2@uZFv=l&xyO#rTaP`X$vRKUeb9oQe_rD3pRIB!VdAu}2R{LBYii9Uo&Fhi zyh@@ATtY?CXcH+Y5) zNg_#O8}L`cND-H#_6`l|20Nv?Y9C+OU33*UyT~5?r}FgwtZW^cvW!f@E=*B@=PO^6 znVFQ2oWHSEDsQvqhWHSlc+5Ou*ta?E%#p~zmE3xI#f}H0p8GqPs(H0Z`6XRF{j!u| zCo)I^AavTpEJ1T+)2y8f+O|BI?9bLNR{+(&P$v(N_PridF|y08I`08*#La#+$O`?M z!O>$J{UM4l_WZ%uOc?K9Qk*P`O3j*gMZCOUB)MFwP4YZ$je?>NL?@Ti37M*QB69Q1U5%?-MpIZMx-^LohPoT-gj=>lLu)wE( zk3k(hz}cFe19bHFpVCOrWfhQJ&Xi|XCGs=iI>KZiqhfzOa1JWLt^gfBDL-vTEIeEl zk!W?%Qo2cPQ>|$X@IX(|K`2_$_~>(HGrna_VFzMT`#+IF^K#w7gl%1hxA4u2F?Rp* zp1(a8A}C8hD~TvuaPJ@Q<$rBz*NoUrO&?oXeOTLeZk@51@~R;}cWdU$?CnIkHobVC zO-XWWdge{WXkj^28C#W>GUM0ZIm2x*n7|$+ELa8RnNS+o7mV#l#ShAL#D_Io(b*&U zfIejoOB*T48i9s3)5*wo))?~$Uhg|;f?!SCu> zmS6<6WDPc?h2S@>AP;wz_2d>eSYy*?rno6xz)8cLJo~0DCarO_VF-j+(7`|d#L%ia z|Cf4wf0BBrTonxhJ1k$6Kt4P?WeIZj&|}musCpr+}(f8*_L{G=O0^npO~a=ri0+0@xl5MsYMeU!MNB$OoM>p$eIo7U($yUbJ%r`t&}C(6Tk~z>LT3qNf~m z<)eku&G8FAlNUuS;QabVDejh@3;VH>IOo62i#1!5Dt+_&1)DQX9+Z1R)zAi~QXz#m zPSXh!7b|oq*tdddFm{CJCLGRjLFiICy{AujFDAM~g61dS;JvpUx@=X@FH3_B{PzCy zuV{pj_x&6@*OK^d8?7)o3o2;T$hKxhrtvz(NPX|-b4~5>VcmB&Rti>2j;P_ZoSKrr zA}4P#L#W3AVJZx9OlSpHEEGDKC-p?6J+=c+GWxBZahD`2+G))}jWR6{N7);@EPKJ- zvGDz)`$~DUp9)4YTmP_fX*(RYiY*xucpcid4?Xoe0p#+MwGYbokAWLmE2^KzbR)Wt zxCN^%Y>jk%ycbudS6xC#XUmZ*NaQF#q=3F5!q1~%9y|P`AyHYz$$AOf>6E zi9x8i?;h|XA^U(zkp{JI7kK?aa<4E|%HwkQx_nr6Oy6d8(=>*LQYQnfRAI$vW^mkJ zvRakj0Xl`?IQ$3;>O1$bxo~l{DS|yBEibqevBB*Fz#(P zUhYIlkag0QgU zz9aH9yrsjITJLJSPjdcpx@IW+JZq((~aaYbn;@?Io zJ&7^LcDK@zap}d2rM~P-lboq6<`9t1jv6^v(JvQfyJc{V0FNS~&uQWb;P7XSpoEA6 z{7)>z+6YkR51xA4eEem6DdzoEL zD&7WIr46xmQG2}Bg5=#vzUv092_gMH;zM^_^Ne0>DITVF(#W4;4YVP(Z|?41ys1`AnFm>Y zC(L-qI-buc#agXF{z2us{K1Fu2a1AdQAL3T^uaZ$&2K}zVURjTUCjCZ!`HW+!9jM?X%y&TZaNa?rng|u&kS*@ z9!usL#`_BQ;-EE4aT#urxqEx&s#0#(?aA#TvQxLkeFBY{G(_dA!BP;+sh+^?+9_&w zl!~zvYu{X?*=MdxbO7Jz)AxfCSpwK{OIEZAqbk!m>5cf{Q`S{r)fo}jm#DVVShbCi zu7F5FB8mu+5#X9G`=bp#i|t5GgIRPESac>+<1s;;<}CHfSrr$U zqm15GDhif>!;DSmS14)n$398>1dktY=I84?jU|_wYxOu_A(Z)-%el1D; z1!8r@Eix9C+$(k@LYHH+JmmLahePf_8GwKp{yJbZ6Y;iRx~d|4q}mhd&uj*CnY7E> zWCENZeDqp&yI;ttd5g3_j1q!=h;QCs)b`hDcvStQM_9fiW9m*W6M2m|_Vs&oASx}x z-y-?_a4PuuuORsCehX;e4|s|CM5F#9mr!!aQnRSl$}_BK7)u0-gF3%1Gy_j2X_kUE zojw`{joXjPZnk?XD;ez~OM0ZfOSFtm+v{p!!*-1wHKK;I9Fw{P5Yn}-DCT0dC3QuS zuEAiW>jc7Q)%W`+OO|W~S&Cv&*gMB5*}{^;35}8lQHb{L`ydL`+O_$yv(ni-15e)# z(bvyU+#=IFSAJe^s&X$J*2ed!in=ZYii(M|Jm`H_?O1laWczi0 ztNJ~;^yGa>t2Yavr& zALZskz*tuttg+_prryhpv_t$LD(~n7W7JrioO=11^c>US&X6$HYhm0&z3eLcT*-zk zoROpZ@%+W6>T##y>9Gh$`j18FPAAF2x4+jrl|8tYZX!N;rBa4!)9%5foTS6rSIC-G z!`Bvwu&&^&wZ|g5e_3NlZ%~%1-g~rtdB?{XWj{f7SP1`^=DGjkP`PzXM)7_d5{jF+ z$Af!!G*~wJ(AsOZNC4BTtUYuys9Vo217&Y}WPil_8NSQn-&^?7&ub*2(iiJdo8>Wn zZ_FTt{N0;JdXALeH;c!mzs(6(u9l{azj)-itZ&~_ic7}egF*gg*}{eA@uPCY%jwqw zoUI?0Z;kd(_83PHv;AoQ0dmaU`69iz+3yOOs#6!`ec!_tWJ&E_BevyId9+lvvXKlT zt}lpXb~{-0&~vc{gec#OW7Nwh??A=MN35{N9?S2m??vhC==*HdQ+w=Sm+_ju^l);E z;<`CxNr03n!CsH=S(u1Uk-nYhvHxr7yO!gWO>;*iXruYvM;RrbuLUeF+{SB%O?cR} zJ^;Wd{=?%|QMPCON4;0-?>BJp;f6{)isQ;`Q^m7Vw4Mnw?KGv}gA)hl1Ewlp4O^uy zXrn=eeuFF#p81e_7niwH_Sc#OSVGqIfxMxr$Te(TC%aN_^P^_-EAo zDxqxrZsg#;Raz(|Qc`14H`pTSan4DXuftn4^v5D*s(_=O6uVroq>x$+G=J*?`r>G+ zDfZTnX8RRfWnpQ6T2GB36~<@uAD{V`2SteyElLKZT_w^W!!E&{H^a}J+2bb2^{$d= zDYsr!ToDtTd3+YNH-r+(Ex9Q1CW`XRT@C+j^uVJcnf<HGJnak{f|5ikOA>E@jbre~p|JsKd^vXNM> z0dqTmF!fePqwewtx<%WF_SBIFAjVmXqirN!%>RkCZ#ytvm-vJFvaX8?;8(M#>QNjQ zqpII_Dhk?vEAd+cR&*)XayGx=d(3yowm|C0_{nj-zS21Iu{8sa?c<|p&c=5d0WFR- zJL0Ox8mP={=7Xb7NbL--dx+ohOf)`s)Vjpbo`z*|FL<3)<-WGSe%orzzT@FtKlb1t zoJMIzMvcnmT>93kF>cMNs}#x80jV!Wj!gG;;;PP7UMNz+6S{TARKL7<{W#~4H4(E< z;;wo?rXmdq@ZTd(p=SZb8GoO+a2fl9Lj0w`^7nTza*If5-{GQ_;CL@>qwdxi=x_W> z&IrJ1zR}c=s1&+q$UU&nV9U|s1EeN6dU^l+={bst-cZLuO!C45skDg3q2Bb0{#CDg%P~yn3mmY16eZ_8 zKo-m?&M#Bm=82Fw41^V-w*+eJUB$KD#dfm?iQtNZ9TGW?E$;iv=b9ZW9=?2Z5OWVL zx@6KwA=82X;l*gLm-C~~-r@N5=t_i&3`%|;{I-Uy{bl7zq%8Jzm&Ov?a&hPAO4~V4 zL?Pcu0kXmu;dgv2i~BM^H#R|UY*C4dyrjRLJnr3jM^6zhnDL|GV9hTHSB5oN9?N^` z5=G^uw-fmyH+LD-W60F&gz2T&I~a8+JIh=U`-tMuqIpFK-w_AHCgEGhEL&Ho!r&T2 z)GM(&;U<&n&3;7k%h*;yT+rhZW>p&KE`v~a4p)@ z-uh&s=lCabrb%N)8@6giRev89G~$3Ookk&x*809j-YJS*dZAO{<+0W{y)qnw#hP=&J&mQ}PzZU(6_IC0iKw~&>pDZ?dwYc_p(K@oG`=iti*K9MrPy2sZ_pjfS! z-@~w6_2*eEvJ|xp{(P+@4{48UudQ;dopuh?8z?pRk(|o}d$hd~9kCrJ64ut5EOZ$? znK|bp;^*7FSkcWEME%YAj^s+40}eZhQo!BW(H`6G*TjADvBvr*u3D-jnuz@q*C}w5TP3m=mG*W(VQO8uqkwY}$$JX_m?>*`*%^|7xKVr3|E5;U$*UU*A z2Zxd^@SgE}ylGA_8IgXLYqi|2AE*-x)QG>5dbS%FqQ198rI>3}8QPiCE#J+(MCqvo z8XD!_w-R6+(Ebq}FN%w6_n5B!h#JHkVz2pGFpkL)A3nVi6dm>4?POX}@a^2a;`++n z;%WSBa$Wro&< z)gH)b-!09%V(>79v|V^akrWPF1n%^IQKLUuDD>+4nk( zx00c)`ce{Sm1PuZ#biyG+JIei8Oemzu#|tsz_H(%YBz4n3*2M!wK^3Xl!b&Z2%6NUqG~+8r5BG_{=k zh1fwD&iZA{U!jIH4j)7To_*#fk(bg)m4ku(HGdttSseqVeSHI@Sp=U^#Q?XPMLBqK z(pj}&%mAA(nefa$VXUE836-3Ysian5Sw2wf(S6;ZL{v%`B3;Y(wT%a2=P-suTB$|y z7UeZ`G-kIZ@aaK1N1t?ExLFj7gy>uuF#uYV37CfSWSU5)x~iI`o=N9-^TZz>8d=Pe z1e7qcFqWjNf=%z(>kN!ULb)B9KNPRqw1}L=`q~eC2%&wRk3iaw>Uvr7*@XFFKjZ`> z)kiA6)Abmee7$0GDZkv3jOQ{8^)>%9JaSuGOEuiRdB$Km0oNeoWEV}OnI}AB$PDI$ z-dmTr&E;s0!y+#!zP@CDvDkjFEoo*n_I!%|G5+W} zNwN87={K*f_>O``o&7qo&-}giM+y~Oml;+sA>AfBW~iYnBcCSwv(y^xQB_h$2bXd5 zHQK1>YVP5hy5E~BN*%7UkTI&yYHN?>4bP%p^xGL!S@BehEk7|p+4{+l6`R|n>O8kd zYxJqm()E)q#2?Z5~0 zgt*>}?V7@!f?=FVuEr54< zLbe|PEg*;})3?@vUz!BBT`(4XEfra>D`Z1^PFgfCT71^J5d48?X*Sj4*(5h9@__q| zkO$;U5ZI(c*?H(fToc_u9ONoJBe8T4_{N99m^hH=_IVD!sTRpN@%`JdmJa$N_9V{b zETvxM%d<^kLf$u7TK6p#q&vc-MWgz8fFxSzn(G}07ILo)+3QzyT@>6V#YQ7cnwy(F z_B9HTh-{#AJoaDHJ|_S?t?Jg_k*tf^pUV;zOqD8N9iD6&$t}W8Q_5Oq@XeX?7zQsp zCmFdNn`$>m!d+sd50@ENkeDyunr;x16i)Zy!DiI4Hjt`iv1 zd<8pzvZM?nkVeXpS>=8T%w(#QE*yT3FmVs+j%Gf^Y0yigkcVt&ZGjOQF(Pu}K>Y|4 z@*EF=LEv=)R3=wfUsM^nPr-*S;vZ^^^{)Eg+217y{CMQ2^j`;1V&qoYsK%)w%Aem# z1~t<+O~T=d7UN-7pIK|L1Z2G#CgVNKQqiuvKkbXC-ZU=)cr;?L>;i04c~fceSSS3r`_e3dCG>zx6Ub@P0p&0}$45Xyh{R@_*Kb$YG^>i=h;2i8;pG z_>7eVYhY<9e#+~YDg1-n1)k^;4=BRph|UZ)qIerifAMQ1`_0@Cu)ztxU1N*V@o%G7`Z{Dt85B`C`O( zW_jey`aU+M*GxTt3HUWmMyG=(2Cs>}vh@m;AvyKT8tfR3EKG z>tq1o=A$W~5&7bIX}wn9opY3-bdF@Mr33x{= zdJK`BeOFD`i2q3zM&e?C`dQ@tUX#z+q1co~8jwWeN9knHNt)S_XBjBW7%S){%2)MO z>{()4Li$v6U(q$PSu~pUv2REr1vw26i^O!^vF+ishuoqPkefok1kt8boegon1kpZ5 z`(0z7(Sfv}xf0AW6Qf67r){>%pjr1mrSB&c^H5BKk8K`gwlnvKm;*zAJu(}Q{z4>} z0xQ@u*IWUMq7^Um{DbrchK9ZZ$Xmu(w!E1G1?~`ep{5_omSvaCyY0L9;9~4oeta~Z z+c_Bf`&<43hy%YX-cTc!WPN^*4`SbNLFarA8DlEl__fF8FU8St*6Zd_@>KeLlSV1V ztx{4xkM-9xVHB&6QIvr0S-ti*+lZ{BNQJNESt(uSjrCzm=1kaZ&Qsa5mPp!B`k{x0 zW|_GZJMpqHAJN5@O!KD@@qPl;6#OZZ0sg~t-=vPKy=?s@h#SKVx~{-?TqHiDgl6ra zIpmSuxEd_ut>}&zRID?jV8jTGP}G6lO*Q;mI$$tB^=zgHF~yy*^vvHE{#2bn3j#IE ztBgl2DiALNDX&NE4{F{UvFt!YRGqjpmU+tZPv>_>4j6bP-} zwmCaV%0bipcgEsLI>44`bAPO~$3k0(`qoSvUPpcSGo9>fgiD_pEJhd2MPHyOj!=QC z&=)=3cwbaPW#fAO3D+B4?k6UnbzPb~7BIxG=w9=4NQIbQNz_IRJ>vA4RT0QEf74Do z8p13wEN3|PZ8?Du(i=KvqMr>O3FiVX@+dS6@mj{aS;t?05ttt|6LP$cTCH3~05W&; z0;EQXhH`TBF=?a;WIm1de_Yd2*e}``EMD=e>;-jR(Aa~4Pk(Vrc$G5O@jqP zeoLaQ8#Kj6%s2VeQ^b(DGGea=ONIN+^j5jOuzr`3v`IeR6w1({0rFX)8kXaQP%Zvk z;Q>aBT<&gv&jKM8wGA;((ER?VL@_xuL)%ZZ7jCjJZKPci<53S`@j?}_6=u8va zdG7_QI`ee#z{2vb1PjgJ6>H<6=6aDSXfdLOsOa|s{#Vl(Cif7 zX&gr(ODt6ZVz)fw<1W_CT!*WooA)RUde?zo`+Ro>sDl67E1;SJ*lFnTp`$vp^-&9X#@Q)8F za&}Z z0k}wa=$C1YC0eF-ALJ66o&gmppo0d%P?^5FK0IASG~9>`B_m^{Qz9d!%}rw?p}V-J z&+CsKXmKT?nu?#w0|zQVd^ez5Jfa@k)CbNKXOwaoN+DxU^;I5sG#Go`zZX$J*kg;@ z$kM9mQ+qAsI`hPT32JUb!7QXF`$50Ie?G>fn$Z8|YzWg8BQXy)T?*V)f#$z0uTq8qcIrHPqJ$V@|8CNcj( z?8@HWL;6GEUR`m7rg6=lEoZwn@(qn?R7PC_vryli1ofJQcv&}lQq*QM*j@pa322|$ zw!>`HXYRG+J*`2s;v3n~1x?7TmO+3zjyYZ#S-*-!A=KI9oC-y%c%AbeV zg^Bu^>pz9L=U-&3V!X)#NS~bx2=!`tp|9xsA!LoMhk_49>NmF@YrJ69vSdz~sElvA z8la4@nHF=FnGG`zCI|RD*ot#|tES9gP5b5sbF}O+Y9LVeAonSBEq-B!hMudZNa9LZ z#qm>9_nl4@Cq)QX`oVzx<4(4-4caR(hUqxS@d__Yl0XfHqXiIa9!9! z(=alp%nf&F??(jw3==GpDR2?wl)foY04;aE47r;N?4l;sK-^T|By-(cDhd}2UGBS0 zq9aVi5t3D;e_KZ;_;$J1W*{3Cb^W8pE83yt6lCA&Ue~ltp~AOA zqE~(%)j9MVE?AKoB`W}>Md?(-XYxG7w%`Xvh)te!7xT{4O=v4S|J#**^Hv69XSa7@ zbWeF((9J1(Dv`H9kOdyjUm9mo)Xh3610&M{XHl=8WL|=u{Qwh$*~G~FBXPD8L4BC1 z5Ppp&=k5p--xdaW<`dziY5%CiYpBN=^SSokn0KGm_umGSGwL^+g6{)YIxdc|$0f@b z6z#SrG?LB68ngo>O>S(uXV`Rp8w!t4)AFDHc`4?%p?I!*Z~PApg`cQDn>9C7i_zc9RIs4Pg%?V&+Y}v&9hHhH3-_mBcpFI|%PKH~8 z>%PFic;07Cw{aFN17we98xv(1KWO8dwEQs_ADrP}@m^6Zzh9L0#)#g0?wyKI|8469 z4!;r5VP}HZ$`{rB4K4re4gqNgDBPVKNFrZM_|~%P*0FK^J`CcIN;DaOZlI9;koA!m-xxdw_lj##HEcT<tj=C!K;wQ@5q^+4 zFY`~m@xKJ=Um?5i33WICrt;;RDxrUVty>Ee2(B}bXMob5bG~#8eW1M|_W910Rw|6D za}#SrQu#ofv0rzrs>ED8W!jRKbSWg2*Ps3Kx_bYq?Vz;0{!7kXAj6e zx6IZK-T5z`uYR_%g)6X@I!|6Fac_yKxyjE`nht!g=LD`rN;aQJnhM zVugRIuS}M|{Og%sqkpx4|IsXdJ#NCWns~YMEv|v+Q6oyKnrcs&6o8g49=!|( z1&9C07LuZOn;H)<|EL=Y6F_Z34Yq+?E;hjMocC-!$Y4)m#^N$PXQ76(EwWu>KcY9a zB`YP$_SOcI-)0+(FmzMe&n;P{=zD3`r~xVb+x^Rt3eP`BezbJHdNCq`j@bjzL}nI< zo>VdR--Fw#i!g z%eNkZ1?Jl##Pl=iSkqdPIztoGL`%^T3pX=?X`WaC;@dmt>5e0VW4xjl*#`zW1wKf; zOQZwDV9cRZPy(r6^Hp1@woGy>U6yhL#D;pdRoQi6SVy%h!E{;1xA%n#+-nQr+fa+sHyMybdEIDcE2DU9k?B zLpGchSbsWPm&SX&m>`^wXgDG4Qum!!Fq`GgJ zoBYlg*+w5Q_nY?KG>Xz((QDz3%4J2rS%t8Ir7Qu1ISUnkNSi$4yh3gPieOsdc!mDS zz24-JrYu4IOElpFBwB1}!J=mStcB7iz6;rnET&O>t`Jh!O&u0}Fc*=~2v5T1bZ02Q zc;DATEHJDlwf~cTew0DBK*M?C7u|iAX&9I6{yQLfX_W!SVM0_CCS;vzfU$x%F7m&O z=NtT9)rCLCD0VKWj71 zS>#(&eJvUpYAzQ{LG9U%&0;|j4qCx3!bMDbR4PI?{kLID)G*GNkm$`mZdpIk;V-%! zw7on!Ok`=BuN~PCl&*QQJ#nH11`2=y(Prsh&S|0u#`=pA~hndW@oC!st3L0J=&cz(aBsfL0`A zVLDiVt$H&XAcAcL1M7wjp#V~7_`)?jjL(k%1duy^Ze178nZbp$dsgh@Je1yr_ z2qx-Z*-Oj{mB63G_A|-vqmiz2J;hW1$HVxq4{hM5HRDC#YOTJ8zZ!rSTw*k2cqv^v z)%@DAAwr%q7jVdI!t@?dmIB5rw~}*1cyC3t7T0G;MTVt2dq_Em_h znJ`KNDQ!nH_$0ue=u0*AMT5s@zk|hKN|2+Lux<(+r44nbp?z|%D0$?nl5^z85R;G1 zeQX=|a|Z7x!Eom*R-MpSEB~F zwn3W~2C=U6vr!P#s;FYy`QvrHSc%xc`GnGv zc!dLWLd{%6qI9k|Lf+zQf|u_*GR9`Pur|7CfXAx^`e3WH_^I)RIb(Ofum;PliVDaN zCgtj^`Rh~VhC(?(adT~?77@Hh7|Ih)BIVD?2opO*N!i&xW^rAotB8sM2? zbMaw_@W(*SASVY)le2o8^uPf+Wa!~Po2}(P+@gC~c8+>KTLoUvQcbFh#NEWSfec^fO!3_QgeDV{o1Y|)E0+!q4S)p05G&I>jMs=1iohGCuY^41^2_-h1eDKZuN9~y>& z@+l;IJKt0vt^H|~2&SaS`TTmL=jpAH7w{)DkFCv#1G#Qf>z50nZOrrc`_#5E=4Opw zeJc|#E7IT@eOl>2K_Hq8FVA{|DO zuR5>V9wKy^paVg~sUEN9;G;n$fl+7Qq)ojQ#-=+nshVV)Q{3pk9cpKuzPC9FG!DHL zB_p))rB|AVnR57XZgb&0M7oBIUhh=*sDfquA=kqki!WgAk(t-BGkpGkc2i8w!9sZ{ zp+S{IyGq2o8;%U@FZ7b=N0s~t01io_?C|84xBiMb2*S{qL7fE^@_Tu&LjxMF8VvfN zo2TkA6dVnp>8uN-romjbE73QY+LdLUYE-pC8r zITF)h(s1XF@vvf|^w}hibE!Cy}`>s2^&VwCO#`&m2jEGrf z`-g^mm@K+RvCvC2dJk`$C2~#H$(TADDsppjN2pLniUkwQ|ZHLn4_gB7VXss7;|l#~npND1Frhj;*~+g(?4)UMcfU zXi2u$uwsl@0E3mCmjC`B+rVJ)Z93PcqB1Io>-lF_$e!`)(<+fs=~KBv{#mufM;3@R zJy#EZzCm`sZaP>RVJ176aZEUkQ6A!TfZynU*nXJDD`v+aY90 zY)zVv^&#)sm9ybHpJJ&Ie{%tRcZd10q{;@!|G%`P@NkpC#!EoaBtt7-ct()+6(KExr>El6Dsivyny=?CIQwdLL^Ac~@{c{#nL5qk?;~ z7#^rjrt?)dc`%6~FC#$=4euwpF&sh>OYT>v{2V0eEH!tP%mBx<^h^rb5lk*&)}gYK zr@XywOI@Jp?G~BB3>7E#8-#EC>oOkDdx}1q)cS+?@5uk|JyCkEPXFC9`19faXjbI3 zf!o=vFv^`?QfwYvzVJ%og&uOEUZvB$jXvw;pPe`CXvuoW5ILL|8j=i)H9hgd9z&=2nowRMw!b{S#HD*&G2G4Pa}-)VuoSjEN@jUjX2%N)(#KuR28T6qWkG zrTf!9MhWPuls-Z75;L|SnuPjjfX39IRKcdrycuVfKngm{Yth`t4da1+mc7Zt;k_?h zw4im@f zTBw(+Yz79SA)j!JWlI(Xk(#oVqx@<1P@Sb*yY5%#qYdRAvstjB1E=TyWG!|O2 zS--ui3puBL5Z?QN>|&Sm{ma$mg4>hBbph1(xZLi1XPBGpt%KIn%dVKMUf#F{wPpv6 zp<@VpA2=!a7>|KV8UdRU5@4ZB)c$8ebU52fOj@7aZ;saZC9&4q46)=!3ZJRZTIrb` zL-Msf4fo4lbE!LoTqM=sX@3Z+*EvoeHIy2e>c1$s$+|fz_EGKV`~%#JyBN_Zt#iQM zaO4+l@rW!LR5)Q80c-;lTx4u+(lK9p;=f(|v|9h1_rYy8boykB$=00t+S_xazcWV@ zYu~3A_mxI+o-Xkj=+(4z@a)hXv8iPIHD|C_e9FLL2oPc1wY7A3B%urFA>}L4_)~oP zXcy=wVRk>$2=X{tcR9vkfF9TBfC)N}ifn}5a5z}C@>6}bk?@$=G^5)nF1d~1VBz3R zQJS8n&mnvN&eG%D4()g~!{E3h54R(6{) ziN$-0+@p(PStf-;%DG@%)(mqYpRuq4e)L2V|ITR)e~S>Ho$#C=A=FD~X7O{fa=E~1 zFM4?^e-Kr@l4^c{PEQ*#)oLuP_})?_RPX5Po6tRV^%?&|e?*$wB#Vc42KkVq{YtuV zja@(r*r%VlM!1WGp#9LwWj6dN9$DMn9##E+x$pHKDyP}A&~ssS2v0*xh+84o=a9yR zBp#x5oxbIzGk$JSA{vZX!MXd=HwCwwpb;jKUqtb@1n|xT!LFHH0U$tw`gQk_7wlMN zoe}Z1Eelf&XfjF&73ODW=o=Lw2A&HAW|^(ZNTFOp*Rbkyx$4wGb#BA+S=z?ug8gU3>;_o4Bs=^+f2TZM+C`6n)wYF0e!r=+9HrKDggBXMtDxM$Gd=( z)~}U0f+!Xpb0lfyPZ+6l*9Z?f{ z=XKC~Win+x6SqqiRe1_BpJpK;Pfeho_)y}E8(`|lSePQJ<{xlP;NeiLuch|naHEmj0QW&N8kx+U z!|r~%<$+IKxk|=(0BOpZea-Ag9Do@RR!$1b2+oWHi`wy(&hRrv+0gbD0GK8Aw z-ZRdE%_esqSv(}%S0oW=XBH8SG>S|&1eLyc$DMw@**j8e65TFPc$P6R0_@sU58jFl z0higDvrs2RA=x9?rE5q51b7lpe`?oX(6O`ZZC2ug0~pHPtBcAm6b9AdL|-^^zg zK$;f6#sH*+?t3hU1U~>pT`+PvbJj?#$DNJgCcLEQxTZT<(L&`qwAR6 zn1zyuJ5q-e5TEU|TPYR>DX}#5b_&hze`QLi1OusTK}bdu$sPNQ3Hf1daJsb;;gXVQ zAgT5f;XaR*lp3#p?6;zrS$XShVv|ZZFExo}0J!sjEE} z33GSIR%t6J9e4^FGi1?OJnaOKlLa>5R%X7cmz-sCxR5ux5av`ICR@1dgp;x#`BJ;H zJOs=ZUbikubS^)defvo=9VqnYehxi^E`1bTHHM9KPS5Kr#qs0g&DD$320Zt<0YWBx ziZ$o3uJ2&Y5w3^K$AGhkg7}MWaa;OJ|Ga8p|1aHOJ%<8GBqEq{)#=ArA$qej5qr)v z3SKGOee3P>Sij}NLyR6ahfYwEYWP@yYFJe9^5X)RquP)H{V|rK6inWGOHngz{sN~X zeWU-~OVypQoz4Y6G{p@zw(y+{T9;n=K%+zUvu0riWJu?1+SjjgI$an{Ah8B2EB$qC2bC7LjR7%A88;p)w z5zf-M`+ZkF;I75*gwqvh`Wdz|2Sk!%Ez6^sHXPO8)R!}&jRW8c#hje)_>soaq9Tjd zC$@~oorIPX?1X3vDeB1CV>m)Gck^gk-{+_59y%Ga;=A%YNr&44h>}!UxXF>ji?S9} zIi!Y>VQd|YPC zwV)0ID&`RCFyXgVb0hW(PX=iQ==_gk)cCP0=2w+=N2q}rml@i-#T?Di=Zfq?3b;pE z=Qwz87xg9IhsmJHt7iMU0E}zdGrrl9Z)FXSf;69ER7#f*EkFGTt(A&XQ|F@dxWb4oTPtzGi+tcnE z=Xj}e5VYjsx`~Z=Rx4A1TdCngxzmYGccLdk@VFRlXLur)jB5ul?Xq8T^iC7Msgahd zs?})z%c%}X z$@k=c9EH{if^@^_pO0Bmh%P+qLo}nDGcWtaLK4 z)|%aEQAS)nR}CrUSa~OlucxTj+4ZZ7F%Z}W6t^$@0xrv0sp?%~u9&nx?5GcQkA_CoQNn7q)|CQSY&xsz-z?6E`6lL{ZeB{91%6- ztgN3AQ{agj@g`If^HX{kVT#=?b7a=nH+8wI<3P(phkkbvgblxET(*In5EbZ6_WXgt zj|XUAvz+Md6I@C+KbEX)^{=6MimE`X*PACD)E0gEyzt0+0<7=);m<6r!=uC^jOihH ziDSX_TO_HpJaZu`^))6Z-nQ@fVjiZ7H0t(ePUG@uLO+(qWuTTdibO?7}#$J}J zuPJeYb)ktOzSwTbnW)~S!A;t)A|fOnfvw{gX_3q}hfKbixV!K$B-bT5EuFDq%=Ajy zdM`0#!qiw{=Z3YS(ot*LJ?NpM8lMPhg;w zp1dGw^<+uR@_4zn44a-({Lqx_kQ^Q+uwq#NFVuJRBoG{Y+|mNmg|w^;S+fzw`>~j<@~+58G1_ zhkkTq9R0(ON7K7S=(G&ZrLmK{wpL+G717L<_CCwwZ0;2n-BTa&W;Zb7`|>oEGavj% z7<(5rSMqCn;95u(=l{+D_g}z&W~v7?_3EVjgAFa@lj3Ae5dos=11|ytwawKH&9Y0B zu6Kr(r9AeR`D|yCeI7E8?8jq~Z=?Fn>OXODoQ{CUFR~FyU0obKU z(k32k1JhEMJ&7xStdY|FHDZ3B_#CPL(AoCb)%Mt1?=i4kg8+(oqF+8&DUTHTy!2JY zCX8_Tw(=PW4nAsRe>}3zKc4yeB!6w7v*KMTisL*j%B&xfBI8%+a3EVquewcoH+u?Ftdh{={72!cw7zH7j$e%j4vuuZiYy>LFIOlDZ z)rf0b%!thQ?KWV*anB;BdxK}=ek=Awh&b78yir|jmTP(NS=bBYnI|=M%2M8m(jpbS z$z3HBl4&-%EO+kifT31H1%`K9SiT*~FjflspG$V|+19`{rKNCM(a12_N_&opi$8gn zF*ZxXQi5Ic8ZCB``?zn_SYw{Z99JP(r1o;Cuxegf%>nLEyNmIVzj4dqfefMj7QX3% ze+!-a*tq)9YX69WMnZJ(bNIcgW)WEv-TYdviFspK^?x(m#nQhchyofH`iH#-WNn;Ro~j&2ebi9@2~? z_qb2v-e~f92Ybn!hWs_dng*6i`s5Q1w^yYq7;k6IK zOl5{1jhuMX?V~4+A98Y!W|sm-&dvT!oL~nC=q&)elGUX}$S;=MPo+<)nAf*2aHNzL zyVlf}Fb}2;f-ui4vz5Eb3M<`8XR=!3WRUCu(#_fyDf|ByJdoK#stAlY)1``kY@;Q5 z9T(R=9MtC`lpO8+IO>`4)>L`l2L&$*i<|DU-_WDmX>TkJgT?C5& zd1S($&t`$S;^RXfkj(+tR8QxE1U8ZxcyecyH)zgwE0=Z?a6U zbZj@?gM23cB(h`~9lklBe7xK+~<$BAJ=80gB5g!QM zag6gdvG^3!I~3cCkxlm>w%TvryUaWBYo^vj^A}NLDCtPfSDau@*)7V@e0`gYXeMjb z4{O=cSLz$?=|fo*3IgV>+C2^SH^oKm=cEi+SacGNhr0AVS8dY_a#_UnYSuLww=h*R zVcVa~a2^0H*@eJ4Eau^ShTS=uk(*!hisLN<-AZhbw8#|;BZ*SoT^|SBRUg7VPqfNn zr2wtl_tqZqHPYobGRgV;#&#vD^J8OE6e9($UuRy$h0opr!%wW&r0R0=dhQ+Lo+W}4 zCeELgM?mlAGgKVf?HeC_<#K0>QVboL@QEet*B7au?xwnzGb>R5P z{`h-OF-hKX$p^yFAG=c4z2e5w^VKDicXn%h*4`Kxm+tqkIXxzB46ERw>ng^OY3ogk zrsZ2I#M)?&9eR?ZP9Q&>gQGp9hy7ij|9BqBeWhN1`y@6^=(8$!Xh!sPgRZCE0OiSX z<2@|owvBDDzeg-?P^KES883PW-4K=bWpWzv=UE;@ZB+C&uzE}@!ecyUnrq={jJeSK zG!sg&du8<8$<=$oL(8sFM{_gd&&rm-cbe1p2B{8B%su-bjXdeBIoXoOmw>+%?SP~R z6-Nh1JO2ko*dhM%oLXl6R2dPf)pSww4z?8Jr^20uv9{zKV@Z@*jgk8fsgL_)MR%*B zU}=@_qeT9)hj(=Jy|!9LzLu-cRd&wM|0o$uj|v+7C}cm}yjoFJ=6+vCi%mDI5Z~)s zspLug)jn%R!b^gxKHcb^(LHWBbAVvqak*3Ir1e&A4>ES}QGuzmCbmX}-9D$}Cb2j* zgxO8TBtff>sGiC$j!{k->c-P`lw{dx+U%sFeVV;!;ocFqyj4E-jaT}J=)hoch( zW<-mPc;R6WEwYi+>pc0nexqVf4EWqk<{y&5XZ_oCY}e+G0}Z%DRGZU-Ag@3cZ{l@{ zpJ#g~2?WO=MM<&=olxTiqA}dUqSuX=AB}uO>~%?M?OlK5vSwEhDec~HH&73>ji(&2 zo(ea+XLKCmke)Q3mE+B+v!uec9Ap%7FR9kjczA`*HRhMvAu`e@MH+g6Smg`Fzvd9{ zO&C1}a5ghgd?M?JYICS7hP-Njs%0(awbtZ%J!0Gh&rZ&Le6TauvJ&>-z@=&%C!A+P zHRi0h5J5Nb&^}zaONfuN+&2|mq_OSZM7heX!QhqXy3}!<%zStAvvQTakXgM>)|J+mUjFX#f%D{+aVG=+NT{@t9-zoJqaI zjfaP_=fxeJRO11zKi~blU49R{XK_`cY~*RiB>ZSIArJ+W)jqZz(^;~D`1&V?)r<|2 zD#t+19xlt`&saJh^WEDtmeRCK+M3`%r@&fNxK z0+Ha&keMHbZLE)9auu^$x(}Qms-Y=|O=o2x2R_PK6gXxv&QB<3CJvF%3`Pf(VXd__{rRCpM?t# z-()3n%Hi!XpG?^@n)6Jyv76%~U2&hd+u0XfM4Ow^M4Q&G zdjbm_Swo%q$4#ASBeh-9P?wG54KI?~4b^-)w-qK==yz&sgcEgovb0Z*C$>Le?kt zQFQd~BCJ#CYhy1EE09kzyAiKxsN7?x~Q?W;Jq8V5g(8}r5V~%G~kdTZQFn*|lnCRo%`_&_{~w`qT)y z`$dgfP=a9g1+eYpEl%f&z9KS*$?fejWTTb2JbZids?oNQOp}!p_7nG38Y`&$s7;2% z@#hUH>2E)DPhi{6Cu@mRcstD}2t11Fghkk}cgq6sqpL%@V#Z^vgw2q!17A*#JcB$J zlA>+;B5%Gq?zV}(t@AF+BKeL8?e*~=B9)`HGpsw$#(GPSK$TfEkR%<8U> z*;ZGEWl7a^Z+g4W&($^5%r#26vd7S*C^tsg_iU(%u&UEnlMw94{o+1QmEiX*<)6tP zqzooEa%UzStG?Eba?v`+oB`9>x1Y05lWp?Rx^*agKFL}bHitjlY;1B(KV^Mlsq!7` zuxDsjWq>zXD3r_WWk_!MzF^pIX3y2tdEy#<_AA^C%#_ZA+DZDVe%b=KbmND6d1G9j z1638K(^f&e@b!<40Nt!xx778XevaCeaV~zDQhM9&bE42anS>jNZKFEJn6v$kzCpN) zxrM*x0sEwPhEzVb`Ny|S?UM&|P5Ve1UH``hdN~%Wp-5C6i?UI;?_mw%ht&#tPTF(4 zkt}tyqAGRlbw66b?Zeqt{Xt&YvTPYxhqpKV&h(r}`xhy(FW+Wk`X+%^)r&?gl%IA{ z>D}+Se8pR1D<0-xT#ew%LK97_Wzi~8#{+WJCUs7M9^_LW6+`ir`*X^L&-S^Zcj}}2 zN(i{I&CpS{);so`LN@K^hqh7HOtBw#{#g{|DI=MzWL;Rpds-PG_N60bSCy0henKLd zzi$!?ad5j%w@K8vorBaVH5T`1G4if;!lfoTIkj`mIgzE3U;%54iiiS# z*NY)K<4HS0{B@WrJrmtt(YOYL8_KfVx`|Hg*NfiIpB%O%1Z^wOvU=T8^@h|~Y;bYr z$sSW!sIA@5Xh>z;pj49=hDI})S*(RvL-ewLe25%8mXn&*@DvRe-l`4`dp^aP_2fz1 zPSB2VW2|v8FKN(G**-Uaw>k?nVyiI64<)7cSn>XOufSojSlLU%&*xrR;2-zW{NsR{ zSPv#cOYp6muc`e>A~ndr*5KviUAC%qF!HvX%qDF0s)I3LF!Qb_g8TCg?TYtP^l5Lt zr5*mLc?`pG#APo?l>IguwjO_c<8(=3?AoBFgw1_)*tg|tlWaAy*<=laz46643g%TH zteB8fo5Sayqc5Y_OOZ)cBR`yB>KJKMN7%Q;CzF9Ej@+=BbN8O6xpQpj=6CjM6Y?EB zr4SpcT%!D%KrN>p5a3v{jUo8yHjsa!n(=7xX`(BtsqTm6PG9%(Sj^5rIT~ENVP@S>UWA!qmzYZLI|9eRM!2D6@ zm*&uiBSH3N;C&XiHQZZN$ijy!OjXb24>XlXjr>76KD-e9n^bI)gJNDv!P^nM4ofZIz>T(AR1|Y>Pb~HLnvw`1MR@3SbbY9%H7t)gGlyGU z70t{pX)NE__Jvv+DIgq=%K%}9QNM%Sqb(d~V7n&VNGG3I@s3a#=u|79FC&gSJ(c(d z2HvW0>x{7CJ)`r|GH@BGXAvGI+6u0=CU$$P09(@SRfPgm)BOUrFTE!2f=T;*7vf&w z;z)%zOuHFWoSg(p+4z;Uk~OIRFrd=1DcSYdUK&a&%=vlxD%socMHNn?M+aE{RP1Nu zN`CRAB)W*e!`044{_R#X>()9WH_K65cTiCtyt=U$6_F!iwh4q!LwMNr?Fe47+(pBx za}szw2$F^It4gwr0oRE=ID5N_Y+Sg9!<(0kOmsOD81=8ak;5`kXH`2sosd*J7~wQp zI4WFLsQi6VZ;g;v$i#B5je{3U^4G-|De-%cNm|NEhh!+RicXwA!dz65ZGL2_sPpd$u0Aoq^Ue!#QP@K@87S3QD3o2hV`Ti^Z4eM z@$I0^Tmr5$JD2Jif@caf&Ua#aa@Whg(dpL-o6QU_v^;eDm`$x&K6Bl(J1Sj*)2+)- z^QSmKAfRYSuRCC^+KLK_0$^V(!WJqs(CT>+(y!8d6KKVg9(fbxo(ieWLD%V=ih%6y zY(OvX0@*pp*-XxRb6uqR=i@^RHLONkKVW{M>2Cw(Q>NRblkw6BJwG8$IMSx=4%fldZB+ zlz!D-dZLBy6)BU7R8-E!jC`&&gRK_(gRwWXHdqbHq_45heTBSW&|cziCN_IkA3v`H zRJ<+#X~)^C_*OcH%VBJ(24{q`JsaSv`65u6<_Kh>$`&wMNiyDKDf4jV9TC`sRru5N ztH?TIgw|$O>X0}etCvJOrvD$u)jegz00_Md(PvD#lI-kS2$@08+FSu3Q-z;i$W+5Q z2_O1!jrY&NNr2gsb?^IR>kNZt`Ny3Z6BvC3SZ^+GE4=XZ_Ci~N>hkyoe)cOa8(lb{ zQ|VTk@=O5H zoluf#orrVHB9-H4*W(F9(q~MmE8L*=^k{o)8>uAQom+fHvb7HW5xp3{*Ubl6T)KTL zK-Wxi${^cd04$?%#_{%JmSgmZPfb<_q3 z7<9V!c-}UiAC{CikM#Y6gaqh2XKuj^UL$5kFvry-rpynmL1|@AHiW-C6|>Z0RHXuIu}pFZVKoTtIsms@=6p-3UG!f5Jqjj2&so=*Al3$Hy1oe8OhcPwD_r~y|g z-C!vO7F$lIA;0fCZ~ZdSrLNm9nP)$`VQ=1cjesZVV`i+z5u#>Rt_fQ1^ITbq!P8~& zNZ0T0(kR*h!{<4&#d4B9KouXp<@~M!$7*c&n&kApnX3(*P9l4!LmOa-tdiCD%^4U} zEjt#zWsRiu5H-F^ENW9Kmnxnlgs!PS%6WV`Hqax_=iP~hWk}V$8!#2ktk3rkr3+R zMp>x^Ir>c%HmH2F@W3Nh5up5?bQ9A&xVs&wJ4pwr_oEx;AMZI(kwlSzHNeO(o#*|)S5>vuQu300_?z4cyE7)d73+J%tK z+wF0WrZ%;DLxix3 z*RDnFj=A?!A1M`202_{ZFFT{EHy{yI%2t*FRCP;@egIf>p#?{1My?)jNoL1 zOoJ5}*LP)Yz1PRCbeBp#2llLcE-RMg2XqE>D!y%|W<3QjY7n81)Ldl0eXde9Cqi+b zv>_S}+*Eis7jlz#y1--&ts)LtXB&CL1}-<^EX>*x+_Sd^!zSI8B1^lZH**TX69JF? zCo{98A9&EQyI{M2zkOY?i=_@2cik#mH4w6x(ihX1`r!Uq2D{1}ub|HUMA-)3ZE$x5 zwp%8X(AGB2VS;KYn<-ORZ!)Wp?v91mm0%h=)uy5LxMfdp=i7v$0eu%Su*Dbs)|A2_ zClkJP&!;RPPxdE4*t0yyefBc!hlg8UO>Yp7EtaJZ+v8M7jK@5x!y_UzHJ>dwS$RWeCY5rHR;g1 zShjdeW3N;=+J^QBqvY^2;HGoge)802Z|WN#H4XkAz=4IDR;2?m#NYJI`r!#0d_3uS z-KhL~680q6VId=dJm71SGGuc;PXW$adiBs>2QW)Y|4BL~&IA;t9E*j*Ud@#roXH>7 zxQfFx%U6~&z{c>emI>y|;sy5gnD&2O#xmjzFsT9xu{gFAVE7%Ei>NV>ZP%`Xhd9Pp zz@>s~utTl}!-rvLo@GxWbhb;O2lpnCvFmYh5dq|!XtzQ$3%yu1Du-SBOz&C$q)HdN z#n)#%-2sRGOowB&i}&J3y^>T;BqU+C2DV5!Zt$AP=j?F~^j zmDhJ2T<%F7GN9 z?sWM%-jJhx>Q-d9Jud)Fp6n}UZB+riMy)tiEwj$NI4A9PTZ1327_llbcyYS^1RtK@ zN##*h19Z}PRaF1CO`d*-@e~Al`dctxUXBR;+M_35mK#L;30~Wdc5U4F>n=mYoP4y; z>4`t8-?oiX&Z2d>OUuQ*z-%hPc5hf}D6+QNJWJ*_x-cq|Qhj3@C)ai;(tY=9_#t)^ zBj3yhds+-CQ$Utwkrc3JOs>jPu)_{CTe6|HxMd8uH@;2s#w1ysk-NKphM^C@TfODk zm_EVMvcd>1kscS;nS+;GsVOSs2B`~u$!Lpm@ENdRXRbRewH=M~k%V@-spUHZ(0RbM z$XsNCS>mF0?e~{CVt>bs~=Sdha9aPDLVlB7-*R?EhF|x?DICm!&M07hM-!8=y3bHM{ z%oU8Uq!-&gFek+=RGYB#3|=RW&BTkj7EWT@`lzMVKx>l$(K;-q7+<(Kzy1-YY7`h% zZ|RelIbC={Q%u=<@MzC$OD`7R;Z9iKkvC^Px5vQ;2K!mdO>y1xJ_Ultyu4P> z^^8hckJ)Uh(9p&RITCC%*;$)0es^X&0u$=Is$X?db9bW+S7zw)3d+i(|8XG<^kWk( z_hWP9y`#`kXGETD|FSr4F#E{;BIU$y8b?X6T)Dc$T$L)xERkAvks=SxbME+hji^6Y zjVRLo6Ku37Zce9PyyMK&H-L*d&lUHmk)>PPQRqu+q9gG(o5YK_JtbRUmV&~(g9iF3 zJ*~jg9`(-EZ0sI7yu$n(_r$nybJ4p%v)U22%njF6Z9A2#EW$yim<0&cRU|VOeI9~B z``qTVt;tDS$4$~(0n==fU2$toTV<1ovhnXXg`b~s;Z2Sk{V?K;u!=X^jL`Gmnv*+_ zb9%=Yj<4)dwXpS57A1g|a6v1&9xrQbP6-?rsCTJvor?)=2Mn*6@n8g*RL_WAQDpu^ zB@XsfsEj@lQ>0sO>TsQ!$;3}qhk+v())!;lE>q|38y@D$$J8n2!`m5$@e5TF5*d?Q zDyJ>!(Jz%Ii3M!As|s|EH{7tMw7Z)b4hz9|mC2W0I8&(xmr0bljM@x64(|1KAacAZ zJu_uJa;0jQgn8>TxvZQ|#NE)~t-+a1bJxex5;4`-ltljAI|9z0=`7?8xi9dluq;tk6~7mQQP_L)#Z;?Q9YI?bxEU)rAtVF7qUUW86fPME;rp>N^-s*B-24hdw2Jr zYe|=-E?vxB$`C79u8`GgzHJX|F6$JbfL z3@Yd>@Vv4c{zP20o-*W83UZ-&1{KHd8q)O{#y}6{LD>GBB)e`kyxR5BYdyub?8?}} z6^@smY`sX^S=yVPtuFYQfrf93w0?5hZEnH6@99h8QiC7cR&O{qCg`Q%i!PvaySp1V zKo;}OD=KJ+Ak5ynESf5DGg}UMtOtx^LV+ee?fzZL!2KMkvm%(Tgyejt8VLPF_7_47 zxr+-q4Vk&^$9n!dKqE()6g1-`;pD~~Qw5ArloQoDHoH)5o1&kza*3E(El}<3w{aJH z^n7n~|2cH_3H#;963|Z^-@!7spO3wupWJF2n;4iRFKyO7-)K2JjpXSDmJ+g!LFk?6 z*hgL8Q1^G4uqTfR4cLs0&*W-`-3vJT;Gd29rr%fA2(mlu6#mv#)wcrM!x>7}KvTMH zmZWQF2hk%KR1 zLS4ObWPWL*AUaRJSl=wRl6i?H{-OI<8MXE{2P&!ANng>Y`-z(+wsHmeY}0R1Zk3z} zp$-<=&lb|k`Gx9pM`_yLt)scl1o7vcI-8#hH&pN0SAq2F_ziT-KAj6|)V%)$g8-Fp z%FMDm{pAk{6p19Ek>Mws~8# z1l&cJ+0ql#){LuGva9N_9$v@Z2aav)AFPxf6U2!FA?`mA_%lwWZ z2yM*Zb-9Tx$2t=NerD3I$tJW_hx7F2V~b>PwyE{BF7x3E?BPiD;Ct2<_0cbC;r3J6 zX=sbm@8^3}j+<=O6Ers`qhhwqafS+)a-t^#wFSeu$2M8u>fVqnuv=XriI)pfM}kz|CSV?3}mD`AFTOcHaytL^9AyFqRP}v234xv zs*WcN?evu?q*?IhQGt%A!0AOs+Thl7Irb4!)+m$J)yn4naX{hj`vjn(<-ZUw=#jXx zP%!+6DRyMtvQ6hudNPoJ!;E!8Ol8WLnW~MuK(s)RlQj2uo@Xqna_$B#v^*x!2HR&L z^kbl0@X3|s^|}eE<1v^oWX($CY>RC)YGxUW97p6kqu%YtColusWn}<@$%TcOfe|7O zY86!|H>J*lDU!PG-iZwR*uJu#nnI}Q*mz#-Ut{O9W`FI+IQz*Smy$4~if&G#?sjkLef|Rt$o|6^Ym&t~wi# zYpS#Q`qh2%(4j*BW}(~F3DM?lFgvQ&SE;T0;h@)3zGmVfTpVv7z~69-sZ)BZ2Tu}p z%Zgh@mZtr%u8LVzy6Tj>3Z?Cam;I&M{%4NExDeZ?w@e(ClfAnA@Q-%=Kga)Td+@(* z<2yX7{}5r5VB#&}9gu^Q5=5cNq-^~xGG_)~Gsa0a)RQPh zinXQ{MQXEV$6~M~E+y>J(hgD#ERYOzTO}K5lY$)3ihN54DF>~B%|qo1Es=fxhU3-9$mgg7jd=S*b+-gn#lLZ-;PPeL~% zW!)O{!Fz8iR$hAALwCjwi*W?+)@8D%S6h-0xpubpYJ<*S-&B>~sCB5no`I_GB@#Ov zfgH}|Y~?!+<>t}_>MCbAG9VJoCa($_V?XU4BC57a9a*?uP2bH;4lCW{YnSE6@@x=l zJtFNprwcH8h|QV%3kUT2E-+gF(4y?$k5~-$PB@T-dSWG_RGHm0+m zE(fPXa4hh_rHY3S3&L5(#abzL6aqI(||{&tHyR&=z|ljD!aH)w|B8J+pr{9 zolelH;M(VnEgdV%RUxYs`-u(0lL1fRT@}t+f8M5`gK~~6yebQs&+QyGzYT2jV z2z7n3GnhkGQE;7J@Gdzjb}%R(TN^Jk&)zm7c=aKmKWi-D1&fVKWR%zZq?y zaW|d=EZkb_I$1(gi-#86dn4rhST-e=)8z5IgAa7}2e~<#_crHHMUm;5@+X7B{R@y$8XetKi$iyz5oUf1u9b zo=xT5qUz$pSHlxqY_d0`e}%G=PX%^5K=A4yWTcVDwtuH3KMu8HkdG701zi=4N5Zn8 z`}`yZHd#=CNZQ1m*K`n{r1axOd0<|h9seFE@t6d4;wf;~JqPhYLK~1-jR7_d%PgMO zqNYq_-8X`_gfet=r4C+d-O~jx8P2Jc74TrM8dEL_G~2L#;=#=i22>qt2_OcTK}Y-I-r^(LAy;k)eeYe4C?Pm>5Y@{-&SBsab(~ ziG@@=Wh*(B3C@#<5WPkK*VlT4Y>v*IFs{G$aD-6oDatCRU}gvHFrptXV&$2qIoW(D zbo6GjTv+H{xg5B<8$?seYpQ}-30~gHbxynsG3xzf?~~JWO*G{epP3=2+Wz{jGP{mv z8YOm0%gs{uougdYMiz0Sr7T3IYU7=6;_IBEdUVQ0Yk%~aCSH>mEv!i5yLYeHmmqpP zq{YlOTPLyfoEv85f97DS)VGe*vans|DtBh@vhd&DHhKIb=J=fNXCBE`EFMIhGS{#w z(It<5IzoYcF04~d+wiEieAT0p9=Y|;<0RV5{n-_Uz;xI?tDl7Ibqi$|LG^1~{ah8U5!PtG%;@$0HeBw!c())% zu6(3`^#o#%oVCGX3G{~rFhHP&E}ZkvgrXI}HS2A>0CUgpf&i8AR*dz@b$hH86HpJu z%Hp!$zh4yW;g}YRJ)m%XkE)3$`a<&p7bkS0rEGz*ZBlP$%_0;%`8m0ymC_BHFTB4> z0WozLZOL@mGKVwE6?r>snM&+hJ+U^U8pn)*OWTsp`YCtDo)%pf=OH+vUfrFF*hD>@ z)Oa|c5cT-LEJn7_F{z?0>D*Y^*DaTyd;|Ma8a7peaQ5>YQfXt zT<)km{Y9w2;b!P#)Z{+I;HjL}K56FIAXk+>)uhnb+xBvQ;&SO3?Vn-JS)ru`+voH8 zlQ~4iw+>skVtj@2(m4K0u^aerV7S0Yge;M=>^ISQ@|kP01O_g<8nY`5J8Bg)y|*0f zP-J$fo6O*4O|=Xack@ACy-&f%0S6dUqU=B|zDzmLNQP8~pgKH%y{&Rbp5A3%T;Cwy z{(g+9UW8WZyymJRDya7iZ1KMsS}rMJw+2%2`{lV z-V}x`EhRHx_U6fSt?5IRbT;IP4??n#fCfX z{{A4EQo5;XKJ(KZEL3Y$bMp@17d$%?Rx)>LWtvtLMGwOYl)>hq1E88c$`k$#510Ey zwrPKOApahMe#fPmHy0phz6Ul(&Vh+Fg#H08-+C)0y zv&{@|$5e<N)zmXUHA1$ z9E#Nf#6g)CAQWc+grZ3ipzD0)^S?-3?Lxn=Le)Z#Y8ilgD~gHK*tm+$_1o5HS=mUw zOio0}@!YP5{SB;OLUfVy;e^OfeQp_>(J%%q1TB0t)xfn12IZ+|^sf)+M;%B=*yrjc zuJVz~a>Mqvk2V{rD2-$v<@w9kByJvb$rW%>Q`Q)iYaYe+X!dp7`lo4xi*Mr@F#BT- zoT|30KG@-YWuI$Q*R)A$oOtzO-|O`^nLOpUW`02B-o1oWJ-u5r)K<?5Yfo3j@CDt~_DXWX@CPybQT8dt(>vxy{1$dW8nisDLdRR;q@$-U zJa8qON@*ZoqL6=SP;zJR-D1kGAfpfe3!C<&pGxrif_MOKr zmjj6zWzAj_E$MRY-4ew082OZVoE!55Q}|ANf0!eRK&X~{i8W*0U`RbGn17Ef*vh+K z5JTT^<%aW}UqG5Cg7<3wMY)OtIy-=c$Ovxl)UWlQNqz;rC1gZghErvUs&s21bln(m z-SjQo|HO@=J+$kJ4iZI*;h{M3tQLO^8m2+!v2vU1M$6;miFsLsA-{Wy<~?3{oBM4R zJ6cvM{5h&>0T+H1|Cy8gdWeBAf3%k>NV`k`pt#kFXsa)P!m9fD(y_|x1eN!Ns0#6o zoC?|m2Et>g0Ro%>ht6?Dt&`yDqBQYdu)o6RIwz3{h4+2KM!9^(^b-VV!_>0FuM?;p zCHEFQrFq&DqwT8*(_nICA)XuklB?qZE}CzH+pavCg!dG&;nFfO%=g@v#na&X3Wwe9 zlC3q59}Om9(m|sF=El;(!nKHV& zphG955H3PvV5_nhHL)}qB)W3ZPlB5#nb(P0ddy>Vf+f zA_vBv2V0o;=TCj2U}Mh+D;R5wc9Z!K|Ies0jKgm{+3VPwG>*6ncL<4UZ!kd#4Gsju z@!-CGh*QH<{{Y`m%9Ef=e#9ap^29FY0Gw>;ZHNqc+d~$)1UY*}9qUEX7`()Fc07l@ zS?2h?dGF*gb?PoIpqga97`Q-fG!`Qqo6W8M7R@{+VN5Yj(B$2sr$WEX^uSk7^3r8t z_ba!V1;RTaY#I)*kyI5}UT7t?JBq9&RcfaJ48X~v=Pk_#IPc$AG$rXspO@?g+wQ{$ITF?BEa6fQ^c>*5dcy#_`#VuXAK;cG4b` z){o|v+SG0VFbFmLn?7w%DQ`tf>aAe@hf3ztSfTR&!=cm6k zzBA_c3txuVd-Grt;hX^A%bKozT#XbnYm#+u*{EkD7XIQb&h6n6xYv0tOB#=!)>-0G z@R%h12sw07_Z6MYKF_N|hM#_VKY+=&QN>@TLCf=m=}NTI<8HDF4pfW%KrBC?E2z%|L`8CN4?1rWTg*cyJ6_E?%rUTb02dVTj9Xnvs0U`dp9)}SuAw>hPaBxUSd zq#QSm%i1CmJ=C^Pp`0MMp$MYy<_DjzE>Tc)DB{o(iI`rnxd2MZQ4ia$6fG{t-fuv> zvo*gP*`JRndNI-goQ47oEC1#m^PfTb&(D8gel133tfXmfMd|2XPzrTGwKge04}A55ve^x-Al0-btn`^ziWNeepi zd4ut&m+=ienPx9Zh|Wrd;HzKiRsC{0m{q%J?cN$R=CWFfqH~15`s3*sr)D- zTINrOS(DPg1AV^TRZ_CDSPJBE+(J%`kDfm3HF^Lk;?gwgyFeTezTQoYN!H7PunltDJxEaKUitBkXO z4G2x^g!Khh4eEE=?@@c`-{`xKw7<`MON?{mpDp&^R?aN`@GD#xzIMtKMRA3quP*82ZWwQTo?w?VhrD>z8JlN8zTl&6{a^eQKSb%&j5p@qYE#JJ0ibHUEsDR zmAOC3>!R1MvpJf;1@zA-iNBZ3#Y^M+i&wURpqvQmXHW^0##y=Mxx&;K$KN~P^}F$ z?T?hJSyPDVcG_NXAW!PgGCi0^P-`gFk&uu z^42{dFOmkIq;?%P#qed<+I&&raM%Jrh{LVf>rml?q{omrQ%6K#TvDFm(gHG&58_Ec z=>_m~ks}WHw+rv(%QXN9oC9y?$uHxtf4mX>J?~`7@!K&P!Xr=;mGbllx!!eI*+c%! z2ZCgY;-4C0VmoOd)QSD#54>>gnBam1HD z#;soVOlso@68E(tyyKvM`Ewi7dOe^45iH2|{6yVy-FT#p>x;4`g7=xl7PI`rBZ< zfEASzmB7)ztf>CmJMxSR`3=!Z_X8kWbCvbho?T4PV190t_)Q9`YhWk79i3*P8%>0d zuL+&rcH(U&_t)u8WE8R8HNTm9e1MM*G?WE;tGj?+<^|VM6BkI%WKoLiAYlDrG$?+Q zSttPn{QV9~7aps_tZ;M8oE!+94S1~D^W>Km3|Kvj%qRi~S}vhk9n_4QXA& zlw|dGMu093fYw}&oZbF}_nV-#H>-;w|8sBlq$BG;0qm!3aQmD7Jo|4i2k-`zyuhU= zQd5d>mKdfq*n1Xy1rZb20?ccb{)dv(sRmp^u+1jABtn24wFt1IIhGOJb?~J1AIGfz$J;W!|7+~rSNOdY4?mQgpW_j(tn{mZ!NkJm@CLbRz;Iy2N3SuJ z%<;Lci~dfi1r2-5-UC)vVLF;t{N25@F_(g-zNh^!xWVYvEViVu){}Uh(F>bfPiQ5Au?IGSLy`0xuKRz8HSjj=bL5b8R(J(of@ie z9ehiqbr9EmFy?s&e$dQBnmdo~kaAY_C%#dLp~$gs*8w(`Kj4(cD~T-i*L$FHR-wI# zJjUce4f0a;s2x{Dbhq_vUoL-f?7;cW+IN1><97W|gcc3^D{5a^)%)}8f1I}e@$fbC zh4NJPMlgbW;#2=@6$5EvbBd>#cfBDQ)wM(n|EkG+ClIGrn-|D*q$Nd!nr%K=uI#D<*bA9#OxIuEKustlgkiNYkMRF@Y$5ZRaMQ!UY@^sSN|rNh&L1-HfO^id|dh zHLG)nXOg{f?y)u3QZ)B|1@t()kIS0y{-A657z1*3jsUEXV;SDz> zN1is{BM}_!N#GU#og)BOncsCQ!0+XW07LD+3?}h@Crxzq`=o!~**{b^{^$k^f6*N1 zAcc<}Ik5*kS73V4V9`KHk@~1r60q{){cYtJ`QZ8$ylc}$Uz}Q3jfay>UU7+|m2j$B ziyl%*Nu6U-QYi(;v%=|-aq6iq^Q6n!PvIhhHgl=!2jnBo;0CZ(wG_ZcvtS%ZzmZ%Z zYGdMgMJzZ?a??MFGM( zAj!Wq+65vTG0Z)6+2x7hkwl(m%W(@s#-oCrfdbMNM0XqS<;!KizckzclGZ@0`@g>^&$z&g@D2D#`Id1!!dD1zdOE-PoTN^I?lX#In!x?NW`RX6 z8=gIB%RNvP;N+)>NC+ZoYWAlCzC4dp(mYR148vf-e_1SW*S8*)D`>|aKH;4nXA z!=EtJPV_r8JwAQX`RCc+@9cjK;60 z*xB%oj50rTp!j*9+rUOLk8%j)&Q4$iS6EB0Cg1LmYGLylLx+l43QJ=GzbB`NO|lVJ zqW(aRJGC;Y+pXZbLqE{d47a!;1#q~`;^SrYRQ=sl$)dZGc?vO84RH5$%MRs+j8MU)H1A+j+u#C)^Q)Oa(M_{^H~2yvl}7DGodXQ3 z$p1?m6@feBQy|LuQum!f9*q1SJoc969ti?v^v_{D^RTo2VRDOgt* zP@91pCGb87IIP<;+*Qxe&wAPf#KHn;YM?Y~`UXJ_bnJG*!}yn76z_-^^v(@@l*J_w zT@3!6JuL-b1pjOb&vjtj{UUn;3&H>U@$&a?#06hC%)Zd0k{0tWzM^uiHpq!5#ALoZ zz}7pA_Zi*!^IR!^8MsBW-*4&63`&Y`ATT2Jcu_Y*8@%nrVuS-l9PI z^M28!$pOxqHmNUkot!nJl2Zx3Uh(%A`x~RAZI_I~^&12Geg4+WkY(6?{4CAQqXbuN zeI#CU+L3d-NAdB}D_}|}@Io@f=&A+GX@>z7sve$Kt(ziYG29NPYCyF9t(ZA(O|k#2 zm?+;!ku$M{~26sX6n ziROBBHPQ*wQLim#K$q8W%kNy%*?rsIM8`<-okss|_dpv~QMwjY3YjnA+O=EF^41;F z6c)6}bfgRY3zNO+Ng7-hU_LrHF)eb1lr1++Cz1;Qff z(0Zw}HIki>LP%KfG8<{2gxyE#2%MrQn+0Z`CY}h|nsrh+1#{|m=DVtuk#Yj_$GL!o zpN&}>QqV2nhy4RBN1B+=`o|K(Zt%fjzskR7O0xzmy8{Owuyk>Gcwifh$5 z-FEkz-`J_vUwSHv}k6c~gJ*BGP0CH?+J=rEXgH6o5cT%M|R-9an8@%fq z%MJkr`=-z!5aoZ89%xv%q6IXs}rQ67Y zn1L+(wH#i&0A%EgA1-)F-eO5NA4mPO4Eo~6(8AJ44FH5Z@gdzn;~*0Jd!4`+=5qeE zPM-c=Cs&2x*0_7ro?g##lvFLv#`a1(|F)X_`-lH*pTCb623pV6Fx?1m3pL{%rP-tU zn5TALQ33`|+@u++5=B8PPZPuW{oA!WnTg4I7o&jIahD|LT0ss-Fi&M8C4*7D3h>3^ zPwJ98MoBp@iXmMFd5!2X*<&=1`g-$Jm)eqw@4e`~{){1>frKChPL=Qc+US&8dcK8% ziXs!261s|J(goqfXz6U=TizONQs0ScHj|Xne6>!l7Ht2tc3y(DYJCU@J}d@#a#)|X zR<}TjdEiE81j*QWkvCfurH;)6d z<&2nSNb9gX9a=5o-==f#pcEPLg2hT+b4Dli6h43c>R@#z`0g|*Z8My|73kcu#GAew zBjLKeb5jn81jw44vQZzc4Z~c17q>`)czwQBJiUCkToG+Nhf_tcNUL@3X-BHl<|DfU zi4=Qa!~LeA0EX96crE`j15~8=9nItFE3244N+!1eVzn6m!^{tD6D<^5p{(E{6_NOO zH-T*3@0t-_tz}&=>I#^TAN9ClUq-20Y=7U?a9t*-Rj>Rf#>~HE_4u9#^Z=G|-{hht zfq58EA^0(KwlYBV>Wl=d#@x4NTm8j8RqOeo%*-a8fNN|$JFZIoXR*gdym3ieoZbLu^Mis;k#EP zSW1xRwnd{+WBQr%{}FfAQBk&Q+gCwAkr+`rln@aqk)caUMLF(~55|Hlhp_!rKy8(4Sd%t_X&;H|G>-*DtTuax?bzj$co#*j84)y#-g{G(Vc) zX9*VZB8a7p-P{LEs;U;VuvIMvO(>P1bp}7!*mRrDI97Yde`WWu`eZT)m0P~Nn?d+0 zFU=}kHS23XsxH?N+E?ExH(2n$DbX)}z1MQ*EtWvM)p$yv#nNctirsJ>eZk*oSa(>g zI24ZvWY}RNEUc^3h}7=5?uQUa4dnuSwN_em`{nqow#+x>up2~kdsB1x(u1TOW_X5x zsfI;NSRQLgfW|Ym$NMzf@|C*`5Du68_fmJkL5#XI$UAIC3_|#2j5N= zs4fqzqo@Nkxw(62K>O*R?uJ_&kcXKj$dv)uz zeX=i#sH8ZYNmXU`@DPg>S7KQ0$f=P_wX%msZZfLKDDL!L*+_UtEQE2tkmQ@g-guUy z#iPluFKD3k2zdsP1q0W9$i#5Dt&v&4>Q>%U$u@=IugU}_KMTu>M<%5UY7fF?uve6J zvTTdcYV1;xOwuj^4AHtQw+_Op*ceZ)jrrr-@JwCfwTicW;gL_0GbB|a0NDY%40o2& z$oyyd-LE&Tc0ml#i?jmllLO0Y{kc~A%<8TU6$fFF9fYe3E4fJfn*J5 z0UyXxQ5ko)AiLA#6$B$Q=(hmDh;mOf-(&wcj~k-P0L<@{3)vZY$Yb)6xOr()B68L* zz*9@Ea;1Cc8OS?N19+d6NWZG2i{xZL8hbYH$LrMRK7)7q^qvCmwU5U4^dKBTQDj;Q zKq3nQ=i~qfAL;ffpdgiC6>7sghd6~UWOsKN73R>OpE*88WaTAd7Jl#G1n)yv-jMOe zYJMh9TI{jyR6e4uF(im99Xs7>t|TXLh`cNaHrI){@tmTy8osn+OB-8v>#nbvI1e8x^!!~E7WL8N2_S6}2 z19?;8aC1Pz&d9wQKUIGXo<^E~(KsgD=f(m?a!)ojyO(tYc%Z%jthoOKh>*?>&}kKe z)1sQFsQMeTNgIPDxR-i*2vU&VEd-185;jZn@oZA7Z<+gj*V6AUK1%`a$Ir>#rB;Jh zzo};ohG@x&`MqW)d`N-)DUN3(6a7bmqD=1=ga-MhGb&P5HCuqg94U*33^$L1t}2- zmA6(y4Aukt)4eKY@_?Qdn+~GtE#WQlb!Gq6X01{+sWzDbPMM zh9rfp&9cdb;r;C3e2EUY)>PRpnFJi%A^isJzZT75709Go)@xLUHbGX zGwoDEKL%pS$hUzg4!6vDMoB>UQ{%Usw{N|hJT)9X#*_Y*(WPDI^y1ln^5FdL%P#IE zMI7wjtj1BW6Gi~ax#2QTPnEZXKkd$(9Z#HbB;uE8s)on`bVb`n+FLW-(_V(aE=&$K ziITdVX{kD6sx+eFgBHxvaxE030GN=W`3<$B^Uk<2Vq1(EFucMuI`y%3Z$)X5E zoNt_N_hVn@<+NV9?X4vei}fJ&&yV>nkoWY?sKekX*s`(0K^SA!RLf31*TfRPMM@pY zDZs-(VsK{IQyQ+m7gh}ryU=$|zZ}swrS1c}?lH9+ve21gb-3Pv4(u|)r3Pbl!C?4GbT-WM~m6dT=2gYHa5FFnF!xpR)5o7 z%VScKSj6xW?yteUBS*%sN8mluwt7P7EkrSTFxS5JU7!`d46Pe28I6yN%5~UN&Pbs+ zt6rmd^7mlfgjLg2E@)>z}8eoP)`XA{Aik|>dp1uYg9(EzA9y1 znl8Mj_7MLww&23HBGiNNmJzRWa1!m78n<^!;Pw}TxY!^*AmhwAK*uK{fu2$zaK`&f zlU4r%%m6N*ZIFAgj4teeQQ>qy)QcMlfLTlvijfL3g@D#sepg@iv2sIrg*Mmync zJ%WWA(o9(Wp>z%1#h4mOX?ds0dJca}^1$s;Yk-E(R}t@C(zhbqk$z4dxOJLE?@|O- z>F}J(1>F~b*uApcSw>lB%X9&7mVB8v4OQMg7%R&ixWFa^O8^%W4p%G;=z%DP-v);5 zX;z|1&!ZFLw|uolXxjT!i+fhoN@7Y*3zsAHO&nladM=??*8Xz$<0m>Q+OVtvQ{BmN-KyI2hhr{UuX!Es^P#>sM#`ku!=K-Iew}f1)+d`z+9f77@Y`TzU;7!6C4i zK=kR)__bn1eW-Toq3z#pvHJ`7-vOVbpTQ)7H`T%s%}r?kL*(Z~jIfZlo}=^3TUa7) zj}XXaiNobN2z5W6nSQ&#G7*HjGscc2f#9fkp`O8qQ?vNfz+k6Onp?u3_M1*-d186n7XYeN1)ODF&F1_tmeFM7jQe**ep{Wl z*i`dCKqyfaN=Rl_jFz{`>8Zl$kOUZp=#vHFb$U2)v%>!I`*>hsSVxE5vfZVWTI)Vt z1Gj??a{$kSglrCz-U$^>vv)-Uk4u{T2uIu;c1*6jd`_pfAyr;2Hpy~GWL6A>|A^NGkbxHy ztzd=pm&Gvya-&hj8^&vX(aI+(5a_VmXRuxyRJBzzJN}oT)1? z?XJ1WWOEc4tFV@C2l@k1CNKD4xa@Kt5TXM{JbXFcTEnZEgrLkclcILp0qTR@^0s6b zo_c+87d6gT=ouy^M+j4jgFcdX6CX-UW{zK;Mslv1^6r^NI4u?Z{0u%!WHHfu)CeG# zcR_|cwa%#M#7w4#S_j69IBXOLk+~@pMJ`t2A z{%zY~lKQ;k5Y`Y*?*ZgwarsHQ=eT*}H4s;2zq7jP`u|m|xQY_lp9+fO$SZEc4RyK` zucji|Vq~HnHP;g}R^IS=MVF>#{n#TY_qB9Cy?7a^hlK$kr@FHZM9h{x0M)%WvkIv* zehe&|Jd>)uY1?iMASEsNu>Vz6cUyQ@ejZh&X-?&)rc9)T+tI}9v|xi1!9tsn4V_WDm;AO* zDo2M)_r!_MsOM&|GJ}Ndcv0I0CKYoS>IH~pGSfo4LH;Cb_?}eX9WcW1DAqoCZ9MB? zYvD|TBO*#dV7xJt@;~N-{GNl?hWi1tDcd(g({tUsX7ig$qSiV)QC2;KRoOg%6kovq zT=>ac`i}W?BA`;>SXiQ4Dp;KJlyj%#{c5lNitv~2vt}TJd|QvXho=a0FshsjOq#@;k|EDnkeJK(F{na~FaUZHZA9{Kp^)TG&CaE+2s2lJ!d z?U2sQY1v}CQ@bI;tgdZ3qehzO8#d1!XX=b1G<+q`!t)8ETwHO!P7|+ldp~LOAD_duX zSWKr+^TTI3ubvOR5W)|}xtZ#X*2HhzU!FctK9X+IUwpPFe^gwZRBe(~;5e+kmT!|o zm?aNYznf7ihA)ev)b_gjEcEOIF73Sa$Mk@(-7faW2)W}+S z8Q5Z5t+$=1E!js)KlUgf-*x=Wx22VSc9Wld9yl*rxy1%ngN2+3!#`o0Y^$;ZzeasS z%TsjNP}-nVzqpNf)ks`5Qryv0HmV($c}Eg+*!2jZm*j|>TeU|*{C(EOrPxHpP-e_I zqpCEx=1Bc-4_P1rQzXGB$8#?K8db67C&lx0;oUD8T%0rIQ;a{btI1U$x6(zsywByi zkaKx%p8k)!di@5XjY;=$Wtow5f+*J@d+z=FOV)kxTs2MLios4);}ybj>Rabkww+!* zFtmA}P?&|{kb;mSp9T=&2SRGT+OBlW4uIc;>&wmwk6pF1{@>jAXHas>(@+`m?dtY;BMVaF)uH(hR9f zwzoI*(UG0IDGoeGN2>{c;9m5STB&4qEo$?VnBLW(PDX&u#ycB-(4|beuG2qIzB|?u z$aA8`ORKHXKh#*!GBj@1mlsG)t+ZWH>Kqr~f{=Bz8KKU2{4mcMGsZBUOS{x&N>;6^ zoARWG3041wvQ59qF&?6MG$Y&UJ_7zxwAd0@bYp|5P|71VtLv10l!SiGjKbl8(q8&F zYFu#iRowIlUWs3gvj@)n=Y-<=32eJF7%E`Tq$&9t<1)usAm98QG6f8y^k#j26#S^O z0K4Alh&IgG7b8wjvucKG^$to=m8~I;^oY|@Z^aG0BpWUflrByb9%Q6v zrWWQ@ zbq5iZ1^P=wBV)@@h~t$8amQ(tnXiB#M9`3wuK1s+F0uG4NaA9 zPCr(x1kK>j%TZc)Y=zPCm-nOjY(eGd z$U5!;^|Fnxx+9WdfFYHTA4zkxOi&=#j3Juak2*FpEo@2N`P3S!wrVl<$#$L|gBI^p zo@HFWgzqUgUn%eC4MlY`dej1gcEHJE3Fi>aMvH|5c+;QFc35@{q8C7-YUb9d?P>1$o*b6f3_g?wts_qM18?B?Xq3^}jz#1Yg&hh%RW*`1-B(5J)_cyw=g)U_ zAuIgu)q{0mbjdSVi(>sCFW4z?f)vzY>6 z{15-4V~>1r(ggn^r;f~aO7BWNoU5l&f1F}+`5(z6_PeL95wXK_}C_X z*6=?}8NGo*p7FDn=??uga4{ByLB(&zdt)i^9?4dm4!B@EQjVJQs<0o&U!Q48v}>wa zqvzx|^pgzA%YpBZyZ@BuJ+r7-P6@)~QHt8->d7u!`6xuf9?iRcWIJlrWIKUW9DV*= zqdl&O3cjJ8QBkJkUVAmgWt3UwyUtxyUsv;x;35YrXZ81Q@jfC5mu&u)(lQBTrUW8c z^OR9-Wc&?AtV1k(>-(Gr1hq{CM8nk(#Fgt(E6rEfE=twpzrcA9#PTu&mQU>D-3!B$ z*=N;Ng|PN9kA@#5W|}bj?MANEJhFOLU*P16JIL4Oyff0^%G3=w`U*<9ZHz(KL#2?s_!_K(cfrV481L5lRR2($xg z9eM_z;JXVZay{wbrft*~xsyUZ)57{DnrjO>Q<@;X!g@PHLn%YxaCc;=Rl*r}h28SL z=nkut_5OYTIqIAl;v#*P4$v~7nzK5r^)wXBV?oaH(*|~)e7V*c;CIqm2Xeo|Nxpjh z$`-&zg`mZPvt`TP^+u7e#E0h`ETboT z2vwk>K532;y5EAAfQ?HL!`g zHLW|1FNzj$eE!CMeU@{SrOZU}6?!!HK=nyRNs;x?F;I=Sz@KG#AVd9rC`~9I^T!Upp&naomWu zY0W!LZQ^dqm@SPS?XnDkJ5d!CQpx4jh+>z zcx!=<(HJ0!f(h#eeC4t3y?ouGwhfIA{#j9-D8{@-!SQekMZ_StzOcQHDMZu zw_#=bd=>%+=sSc5sdZnRNabaapMuEq1P}c^M0p>zeMvS{nrd%O{^=t#k}3{%!&_CF zAzy0EAsu>W@RlN0?U=S>o}fhwFi?|-SodP#|4nfS>Z>Lw3LK<25A1G#!LYKt-DQ^` zj9$?K*em%w2JG@pJ4JKDsa-8zsxX2wrAkiL8s%j2(J=P%QP*MirU#M(cR+}7%o-z? zsP6so*WzmXG!}{jlOdoLU_T5=$6tStHXFxPK7nsLEdFOt5ZDYB*s%zdoa%$OW zGBlr9C832lG#(4>C~xUZ;{;l9i)$*#JU<-JAVB7+9zDNf1A!^R5x4ubv*0~`yZ&>H z$^1`RBshizt=9N|Q1v16`n<3P27w*y@h~8;9#iqrVtR3HHnUKiTIuM%!SLD9v4z5$ zvn6ah{^8sag={5LNutgI?)f#uW*ABsBWVC2x8ksh67ANCV%32Yq2A$Auh&# zf%{SFaLdU?zOA^N(eWIS^ojC0+?v{IyVj+~G+V1AdD8*8=e-tI@y8)2rw4SlwFf0b z^j@oJEU0+1Am@$6Vy(A3N6Qv&I^a>i5=}kb=+f#a-d(W{cMji48YBd%y}C|Y3dX{A+W*hmzU zCcC92GMsn*t!lx*g0xe68z)109^0UA1x~*3N%;e_DTj7dwmm6FvmWW{DmmS(((L|w z-8&yL5Wcgp2PX`=^~z2*YF(QK%wA+qwZ!$8%sYLM%jM_ zBL4LR{A=wd1d&Jx!~(j8!0iF=ZJGC#77y%OGX>r|ZaBDjFbnNSD_Npbzfxgsm9Bs~ zTo(+DTX~JsL{8~2%#$LrU6W$VbB!` zTcztGG**Z<7CyH}X)=_Yc*|EJ@|z$g zl(AP5DZkoh$&K{Myzjdq5w_l-!atP}mKZ}SA4VQE>-SJVBg3wLFm6*;TBj%(uU`Uy zOEUNq4C1KWD1eStap6`D5E9#-Ee5z=sREvCNiVeSO&)q{IgWfDbnX?W=ae2cWIsE3 ze=_UwqFAfRbFS|5G58aOfhLtzxDAe9vbWa88B!H>be8#QjO^44>Mdv_Fkblp`NWQSQn^!iQ!;!`3`=zO82#>DQaB zHDl77kc53nmc%%LlG~=icQU`cXtJXu)^%|%``WV-EAG;o&F`qBlhI=*zJb3gmkjI=VpTUSRI4h7_H6Tkz_sc>5+VN@wfct z+!#J!Y@A`U+S6WcYpim?c6mKD2~lM;K{pMjWSzVcdkL%=C< zdKXXMl^VjPdsTkHQ*41r%%>KoxtTd#YJl>H?`zQt1aJ2l ze0wItKC7pRdy|NA{~iDbp?wLo%vHb@pBD-Wf;A)`4n4We5iD!29!#nzlFFgzp1C!9 z1%LONoIqP5TPba|+NaQRbi9DTSd|O}H2};zX|e*b z6kz`Fwdh5ql5WS&LN7%5Xq@D_4au49JT6~*_R&v^<_KP}7`p1-2o>VcaWd0obFgI* zuc%A?OpgpBz-mI*wxO$ecx2PYXV4=@^6|}d9J7;Q)6$*(IiECv2d}mr)r8rv$0 zQJVdMN&~x-$t;wu?(v6EknKPk<^vi3_DNEROl4K2wu9zH4087^^j%n-lxQx>5x1b~ z<$lUX9tK0Rrk>bp==jLoq~)6d4zSsF$0oD_p3g+BWLmL4P~m96_!tUlS{qRoreqPK z`o7@n0fvvfQe8!l#uM67CcVa8+!7Ko8X-*?e9WdRFSiyKeWtYmMn%ODmeI81dZ`%? z#(bt8Q-L_y)9B) zBRllFm(t<8x3Q&W0IP;3n+atw!4Uk!>fU{b5B?UA_;v^SaG*Dnv_;0k0&gGd)oy+W zrpxdr>?+e!9zUw(l>lR!Mqib)AS&99w%?QKyDb4GPzX+ zISb3HS((i_?C6)MVBO$0-tF0AV$$@Spu@gs@QI?2D$}w`OJvZvA@@t+>|-2Xt(M@k zWG;nflPBU0lj$+I;FTG(k>Lhj+CyL$Q#hy|w`ylWWML>yS!Euvo#`pYfw>&sq@Ec! zR$jH8D9I@fSrchnQAX7U2o?_xH0q5Gr%Kl78Q?W&f95}JSVfdIQLOEsRo4kjc%=l% zqdKw%hf9ZH>KT5WtETa#Fn@}1ntf;#(8;g^IvH_(S)X?cpx*EW-ZQ1ofF;c263M zQ1i1|Zv7)ME@L`1Fnw(iugxd9d&853k`h+&#Wvtm&cTt%l$7ZZ!fDCN(%f3?H4Z7` z$5W%ciT;b$f4d+{gwHoe?V;{5bMt;E005Wy7LPiUP}lwJSCJ3g zr1>bfY(7fDnoDuHxpep)@B{W4@nDCq;R7RRuzu}84Q}s6{k*&|;?5VVeoqVDVop&)oPw9iZjSDPhuZYijBYb-oa*eW;uHJTMra0~RBmvX; z%!oo>)rmE%%-_my0j>gf5 zHWhC}AgM|?AM5aB85H5;Jq+if|RM!Rt7UV7-Y{|*Xi5cQ`upD9Cb8wuhZh^LiBEP@_@7j>*)5o2W z@H(-?6{kbn+&PCS2v)E%M=NQRu$JwE)wcrtvIOnkWT@z{@H?gOA2dT%sp0~5d@Dw) zTjC%F6r5aTx+?OeA|pZd6hBFibbe&54Vzq4iH*S74)|%k;6C}m00 z@r%l^B!o93qD>CtTRJpSZ+5+WP$Rl#V%v8_sdI#*Sk?u(HYdPW^|!<2tn04XdV1i~ zG7Be;xk_^Y0v34De^v4Nk6V1i;>@?TbUy}$$h_~71Ojo?-@XPQPTjYEfjD9R1aYc+ zE7lD4NsdK3_tRqqzUk)ANtk>Gh4vvqccy3NHC+y@ zqF=l87j}EbI2WlqS#Qj}@Qhq(vnkFiul23B^GF->9G*pRmhkKQkvZO=No8yO7GFt; z%45+qp;~P>sS75}n7al^Ft9P4EUu2158Eix9N(f+%`)g%yYJ=!joss)tll1O$dVgx zHf~Ti95Bl)0yl|;YwkT(u0X*Zrv@~KSKIB|Y%YSD?^*pi+&k=guZ2w8WTrlxOy`tW zk(Wne=4dhnkH{h7us)JIm#LrlxT-=;dqX4EvL^+h1p~_gwS>$}8B3Pl>K6SenJK5f z>0Q-7PmzAnYX?opoALkY!ts}`96I`nx7MQ9a*X+AtejIq`*kJU?17aZS}G0gbrMv^ z#sMq>YMt@`4a=R&PVK*6NAQN6r<8q}ZSHmohGxG$t(WB^yu@u!Bb^q^?7%}^iVGSx z19PD5?jBL!3k}PJ6ueG(!5>Lu+j&f+@u`0@xT>bpKZq` zl3LMJuPElk>aqk@^-{W6S!`>C3y|!zBi_sXD3A*p8s*u9zGjIwnfJee+HcS`nF$R* zj`V%YLh{d$^B#SZEtZfSgXVfV8@wWh;GLf6seUo|QMi=F%)Xo=g~$7N%m?w!{YVAI zt57vE;drWjv`Sz$^fIoMcJu}MY+6Zg?d%#tCKl=#QCIKxt+*|`=FF)SZ8Q;VA|J!I zy_I&cmvjmVh(~jD=5OX5%yXUKyZND%#n}Ff9F!$`OCPyxWnHK{1I0{->_dTPpK#2=t zf&1SEk>=gcly?WYSkJww+{TorPWKUX6D+q6Y743we)g5(Zd9_cWty<-7yUHQ(U(R1 zDO*tLv+@zzs!vH{D+Mn_@KdL^s~y-_ zDoaKtDmwQYe58y-yh@QdoeV&H=Q*i28+(2G#^FY?4k}~$>(QTac2#DBpMj$Nw zuJU}FN3pq)hrEO)4z~%y4q-Q|sB%Q<4i(BV9rz-Zm8A~u(tj1Nd$%$MDrPwvKB574 zREow>ouo<<-D@6M9>N6q6 zx={RDnybB4jUyf#TN9{8s4$KOZOfP~0_%0Xk`-HIH%|UCmTzV{YIcn(QlNPYcJ#FaRx=@YnQsI~dFaU68u%b`YMVNm~cdT@#H zf~V%Nns>#fF}-z`C&`R{9=V)$5xESp=fdJa((sn$7U=)*1|pZ^TC*tM#uowiYMmCs z)lZr{12cQif%KR+K%+?XnBIvS;Hg#g0G|2@mdQC!E!KPOS?BV%hwr7XRf8qTtNrt& zt~{%Jqk&{J|1R~|!U8_u9K>DEmwh#1>7#py2>r_=?-$CA8Pbst%H-pfK5(%4rxPXn zI$fMSooBl{Ok57f^L)Ph^0- zD3E%a;7%h#?nG+gQ~$KpJ>YO#J6j15y75J^N+JB0mi|E1%O^8LR{p^5l*jPk6@ex) zGln#ch0Gz9sHH%BQ=*VF;NrT;b$;EP*DAmYfav-^We8z`#ok%)?eRnxu=v@OH>8~L zz&VOBoGX_0Af3pVI@5<>XqyHTHt>^y@Vvc&R;QS^4>4N;S+}Kd&>%s>qRzTmlz088 zI7U1YOC~|Lxbh_~T+D{8q-~Yy0n=W+*N*ouR*o$gkV4o2Ws~^G&fjd#zs`3d@O^v$ zO*UQ1ctXBu8XUPv_XFpc1d%yi=)K>FH7OQDA?^fP81j}?iyX+|XrW>bIBsP)^|xee zc9?;s^5}&NuzFd7J9k#b)S5gW^6@uV&7JtK zV0ErOGXPd2;*um!GVY@>D+9wdz}q5|i=v|V2EE&wN@Z2l#eTyJ0wzwpASk^XBJIC3 z0J*n{@9nL%^UP|s;i}hlQ|x**h=r=?VZDU&rt?(scfw@kukgvlQdZJm;geav!zZ`w z8^uBeVaG}YjDdkGtki8yq&55aXV1&-03L$<@3Mi$Y7ocQV^X=1Th5^gbRRJK?Qh{* zq4QFcS%Dwl{`h`Cg^b|gei%*Qd4}JE=SDzIDQZ^(psSB{*aihY_(@-ZAo>*zg5VW&&3J;iCOk7fq#qew+TypM;8O@ZlVDi0;)9^IBzB zMl?+^KH>%POXQmSH*&2x>WxDo(Q)IAl#?!1zbL(Q;7XV~H>^LRW)}b&4*-aq!5Pmg z&^o@9YQfvm2#~eNQ&IU?J}lW?2`DGQzHayST$d#YnNNAaHZ5vcPgL=~m%QqD_?x#J zPitlpQDnNrV=G+I#D7Ju>F-yu3=F-M;OI&4fA0RHv3JP|IK zC$Lf58I@fi*LN>bTHoGjsXuiw$^C>ufI`eHcrU(&Mh=Y5lvy&wTQ&ktmgmTIz&UdLiN| zjff(&S^@5w4tVg)%Vei(3hk%Nr6U z27H%*%-(e?YGQmnuM4y|f7Z#K=%OV6tQMgMm*@EBghjUB&;D|W`m>(?@maUZxs4>4 z9-*zyHI-4j;mYD(t17JIM}%f^^VILT!WK{JD&3F!`4QXRA|Kctl2WP{@?|A?5b0jh zC+Sq;xS~~zg4G?fMaO{8??(v%|8#l^$YHHwBCMN-zeMK~m1FZ)S`vCJSEw7`(|Tgg zY@64EM{E&|oqsrM$yy!^=BnyLEK{7rFGNms7F|o;elOIiAw5KMjLysN6yf6ifZ!|p z^rMVDv@=49_D9ZnEQ5Ksz=)?qywG1J%D^2eJOg{dN zW2;%_TV#<$fkifC!1uvguN}e~gtyP;z0a@GU?ogH5#X)bmUP@WlTm6f3iMw=O)clH zTr*o9K!(wPxy1}X0LpsJyp2B|D#Y!5*ZI)Lq$4enYo#}Ax8owjh$PS8G3}7-eaz1L z#&0{HI*3IV9;d&?6xqDcbM9J60{s{1G+DOle%gxYS@YQXU zD9dF~uyVp5Xp=azpc>kegC9q>r=#QG=Hc;W4mykZIj;B zz(*sy7 zhsP~mLGRBUVGs?1L=&#RFG#@*7qy&HG8Qc6_p^U<0RLr+DHK0fnF8mT)3#gp(U^HA z9_BINzDmBSgm3>Ci>H)-rtNKir;m>q?0Bn5n%s$Of#)yWZroeVs)ynB(4UYj*vw4s z15b{xJRRrQuG%@a>m1om6n&f;gvUWV3tO^&3Shg@^cHBHe$XW;N>bf#Y_1RCuj$Gpck`~|d&(c_^DoWTvlo0PvNovs~#+5>o@ zo-}kN{(kmn!1Ql9$^;wg^ID}c*S*dBSK5S?_^-5yskT}dVJ`|{FDbTdZ5&Nc*@LDc z*~ew6L597iO!9)K33C-JpSojF(PmvX`;!t-`DDkTr8^;ZD3vU z=`4>;b|=~M+{CXBKKfxKCCVy0yzI|A)d zzzv0fkLolPyG0uPXtT@1?#}{w=X-Hg3TJSmT)f2V{(SUrPNMVAvOump)RDkYKHC(} zTvulTo1DnPuA7}`LkwKXZ2k`Hffjg6z+59Yaq%^I^``ZA4@y7+r{gX5O%cA^mUz6M zQN1s*-|e*`hi!^`u&F0q30!4P$SJ_uLb$jC>7V1`W4!I9_8A2ayv4k*sH`nc8i#-@ zL4KJ{g`ABFWc9p*t(gHeZOCDj^3>ENJ2Hf7(x zLm`&|6mt0Mht3NWQXKph1fY;*SETm-ibA$tppXjy3OSzayd^xB0pev#_Xx5~5SjDS zaMYTcig<1-eqfk=oEHT3A4*F+T#8KGzz>|b$U7js%scRt_AUA2Qug#*48#k{{Cw_f z@^^2~#W7!KeBLQ1@{sDlJwLEZ2*MH@y>6_Cc9FWa)L+dJJI!Z%)>!|5+22X*if#av zttdBfUR{as$1ra23-X*X3xR&X`7cC7jnX?W{4s>+Rr^etVyB_f7DJIV{^r`7 zJ#{K5R;k@(h-E{XunhTEdkb69)B0r6ErGcpDL3irpKR$eNO8)opxhRI?^X98m^Q6M zWl-)b+N$bZk^qZ*|J$O%ZA}Y9AHlR!*4N%OXp%`|KEV)jZj)@ab{Vi>b`8KK6Z$HL zi}Z{=_8s(*BZrC7`^cX9-=6=3^Cm)?2fXcjg>dgz(ttF%*MN2uLilv8egx3GJ^DX; zOAKc+?q}2|Pi5D_L02U!$p*002oW>ohSKEKQ zz=%gLRm1o5x;*vVeM&f=BCho{0TlMiA=fUTiC&RB*p+Mmy5s$Vx_m*9rh~qe?WK3k z2Y}^veB|?F(jl(RL_(luAy~(<9sIey&1%z%acRjrY!0r({N1#?$9}nQbZqWC{Qc~& z8|nW%oeg9EwCCq4~dM{WrsA7vc6*;-@- zmQq=m1O5q!X&m>lnoSYdH29x9Ow-*rF8j?KvktJJebbWEtuStX4E)gO;^;3yv!NMAacrMtXV(x zproMY1zHLM)%k2~fE*-7WyObhVF@U6<6N<9YtGYwl!0_0pcD0&`~HOI@4X}V>SaNP zG3DU>``Q1#trV)9yB-RoXJBE*kd(5Ko2yK905`<$7otOlz^N8mGhhdql=t@E+A(h^CD+p#fQ}5BsX(I9(lLR`+3**FXuS} zdBISL%bWpmjwUSp5qvOitiSdD$QdAdR!iV6ST@7e-y&1Ynsw&U5J)Mj?lgM=Xf#f_ zGZXe}H8y{7?!LjeP=Eaopdm{fDB$HUa5%BOt*5;bigRfNo<9w>$NRIn=>NJrPcO>; ze)gBj_TQ8&-8>+mL1)!~TS`OBcbAKKQ+X=gJA(k|EQ?Q7){YB%*Tu_{lPr+m1}bk~ zIovH>;xwrkd$5JtYkC`EA9)s_!vu$!Am(TUF_9$Gvxbz(KDdG(LeyrE4;3J&dh)vD zvX#UXJg7H{;KHJO9EPmso8 zb6N{mXa$>snrh*FK&s%coPk*K!#4r}>F#(umXE|w(j|5~NI+|HFzdGHIBYVvYA$kM zU_TC&x%XOeFU#DPgH7h&C9UhLUuCXvm+tRp|MNxqQ{4c6C83D=^QtM-(C&gXx#DE{&~Wf8iT^SY@MgIVdx$r`SfNq(T?;$GfKNFVfBq7A)M-T2g2 zi@*-U1zpew(I*kalDHeykSP3rCch4j0_4{rIm&l@ZcY+EM>Jl0qUo1P01Q5s8q+ae z>fE7Ekf*BfRXebt*}? zw-y|jS=Wa0U-l^DtY%{Wd;^_gm$O`E%k_=_vf3vBs(oTR^k^d7YSP`L0<&&GFuzI3!fMHp^^u= zek}zI+cZQlQRHXIAgPn@xG55j?*i2iJS1MzAzNw4ocF^d5?9dW;Zz;bOwd9)Q3q1U zD}Yew0fz4i&L-0$M!~ zWcJ|*fk4}f%z@pDoB`(|%-s$-(cA_gXCOR$b|duqugzuZojvyNjYP=va&sa1udU*{ zAAwS7+|==-;;8~{rr)n#(|$oiPB^fsI+c@P5XdUgqGH=T^oWkJMdq27CF1zK6Sbtdky3O>&n2%z*C1abztgI1=4@F2i7I{Ah4K-2V8#{G@$ z98dJ{|Fb6UIXUR{Cue{hD<(V=KZ#e@hsHhLo@J@A>qhSf37Ylb0sqD+veBoC%=3Cu z(&AiCJ3uq@?WxYca|Qw~at0PIat2^DEREm;e93tKbb>vgwPJP8_Y+f6=TypVeS8(F zde1_OkH&F0O|U5W*?k7)^{Z5_J{sWdDV7S$FN14ixir_pilk{BzR?r9YTezVr<(tQ z7kfu%i(Uc#kC*|8oQZ~~${EgTEGQt3RzAM$(2!_>Um`%@usUhJy}RPwFFU@+TqF~2 zzYpl(`3T&HvsESKg^_2bg2b_qIWV9n)1 z@R#}~#n(m|52k1thV+7QI-<3EBRqoSAL)-W5-dK5|IRV-Ds9cGk(Duott0~nQ8Jv| zr9|>H15rgZ3I17Hh>O16hAI}>TMsw3{eN`5Wl)?^mo6IIf`#B7f&~r1odgNN65QS0 zt#Nk=?(Xg`jWzD>?k-K^w=>_FJ9FyR{ZDljRqx(w?MLsV(^$>Ct|@g-4h7R%S9`_5 zLW`}X1?gm*?T&Ra+5=5EjCG-PG>iJ4(_gaANYKI&mqP@=O}?aU8X&*MLbdeE&PONVnTZ|d9wEEOmXDnd&Z4dET87BJ8ZCLyWG8Cj%F6SM6+HrqS-~mqv?yg3|eA7IkEjV+B>r3-ZS$$>24;gGA1GvkHNy zVK?W4=>f}1hkvxTpYYqvsfG^sFe;G5*rYgJZlL*&wjwcl-r`%;!a^T0>oZWk|$ zI7stMffB{<<_!dJ#SO;KJKiU9=b5t!wVewu^?ql;J{rt=Xg%Bj*rMKl$aw{aYms5h zi+m9XCcf5jKJs~~$P@e%dCijM8K?E_;q2#*f`qP%Xm%c{+Y;AlU#G{aj^5kD3lpbx zVb|bkl*#h_?*E!4!WN?07HTPx-qs{gu?h>xa~cB)E~%{&L@K81kYKCvpS}=V{-gU* zG7bZCg#9KhX&&@={_(Ob#Y_^vo7quRcnzaf{?15}Ij|mrQ{{D~!eVE04U8h2dNmAx z;V|ioPGA0!%!$>{^_$ZK+oqn!?x@p_Y80C@d#oDep_=gar)3eo<@H`b9iHl;7!8#Q zN!jY*Wo+MONu~H+q{V=n({_SXi&E0pD5J>VIxT8Dd78t%+JehCUQje~GZMqMZHs+NdwEA%3&NPO3jd`~I- z?oNdUDhU^be4WOgHO@2?o?#!)Z}<|?`3Ox-B3mXAZzKblYVCx&*4E8aq4gV_&_@O) z{u^WIKhl<$kVyu9qzMSvAkeORq$aoKoZkZ|R5o5r-17Nx1Vx@Wlf$DTW$Nj4+=lE5 zb(9&uu6aE_9aycM*9mNd{`ZadUptgA!#}%`v)AH4x~*c6KiZM4Ha8^Trwif?kv4{4 z>t-d#e>Y(KFU=qGuY6F9R63D|Qd%s@a0!3JFmYihDLHd}vCw>tko$E>r@L;2rk%G) z#x6CI`{ShM-Hzrklg_-I=Pe;xzsC2$UJ(b9qcr&&pyCF9n&<>DXco<4sfWD=1^%5F zH)Safs7&x79?BbwdfH8kcJ~BDKdYX=Z&r0)771EF)f#sxRACG1ZV6J*Y|pQdVw$UA zxrpoRJe&DZO20c4s2dOJz{QIh`~VGroc~V%Bsy_w^A0FDz{G0In9s!V1>erHA>8Gl zqJbXG6=Fo^KT(s$B1GfHDntB4`m_ewBcypW4I;H4s&F2^y!_YzrheLUIhQ?0dz=#O zaru|4*+vB&7ZWs4dj-V23=Z+)&)Yyf%=wB4yu}6}|E$Br&cAv9FY*Hr^_S)5WzKxd z)JoZ`QHi#N1KgG2(Ics=m32Ag0uQWOv~Z>q1EE>RF*&)`X@tL^O-Ed(%Ni*VOyn4+ z#bu}~?{v3HzBp&om3cSl=3jy0+i~VcEM)WaIZKwYTB7Uz8^FopbO+PH;;eNgM$qVv zJb!WBWCa0f4m+pGO`;lO9$-pdRwRQTRgE^j)@98F1;H?H>W$@BLUmKJ=T)Umh$lT` zoc_{Z*gkn9ktjC}Lv=>|v`gq9ZGC}w5I*=&?MX;{oiI4Y(*5JDktj{%_dTQ~+5NdZW-fj&;G! zzu>CKrGAh^wMJ`9CMe+H#IV!+h@*%CLiCDwZA+KSaI_P-y8a=DjxjbASlnr@yP)Yj zzkN6eO|pe*1o=3oca#(a%s*r3RS-o$@~H3yOZ(~m$UI{|PxS*7y-vsQKAaW5Lq-29 zg^v23Ln?9+Qy}==WYA=PKvA{yHQSdYacJ4%;~|3Md$xw{&dVP~WdB_y!p?!XfcR1? zA?lRE(BhF&Pk0j0C0|Vpo`F=K3dy-*#iBwL+`qn2`QrEr@8e<`9RvMXrb zy0lu!;sJ?VGRo=PB?kR;o~B??6PhACR(&1zYlPuTo%YL<#sOzZQ|Vlp$zpy<_}{Md zk7s#Qms39|uz*qRW8*(7lcA(kp3AGt0%;R8cjl2ES+ts15McVNP3DuTx-EsD=W8ok zg-tG${Uzd6>vH_GD9bDM5WMo1dAs4Hle6scNp%CbQD=jBp2V)Ab%ohx{j6gt@d~n` zJ)554h2_JAIY$Hw{rgCoFI?bON`3?WZ)2_R`+sZr)m+R?FL2C)QkrrbA+(N40NNX3 zsGsJ_05hIFIi3A1OzF|lA3D9vGNiJK4tWymJl53w}QW}UhUY1;p%PbFVM^dHAatI;`YFrM>@ z8;$;lpX$v**7H@eLGGVfEh*9F;Z6X!e@#gNEq-5uiYij&vhE4_E;s*xm&T-Sk3}-j4=Pmz~0KfV`w;D&9{s^Hi1wci~-) zX=ItT7F@e?{{;?&K*0hxXKWziidV;SKpRc`O4!~=MQ&*ySkU(OwbG|X=%*s4zi`wgmzpRNm)A^;zk>CsXwEfi|wIR zD}N(v9}kf|K4P1~d{UL|#Ko;|@>{-ZY&2JRA@A4tar2{#O4ZsIw`mC7g`~3l?K2f^ z*I?K+=hEY^SIv!}0D&eZ=Gyi#V!yZjN0OBgb4rIw+tAANW|5wQgP%ex&BPu|Khk=ULnO zb6!bh zR02lVjNSx71AlOSrh_1xC~Kxr?~PSjJM2hFMQy3i+T)ng%AH4i(!%)i-hsN&oO;>n z`c3-}Xf`*W*KF2VPi09o&xYH<+fua2S?dJ5gTqaQr*%U`C>cD$1A_8z1)~)Qg_Y-a zkCWOKEA9Wz0*Fa6IDw`b+2ac`LP#f2q9dIj+~#SxK<4J=<+bh(hi-t>L6nKR2jz4H z3kxor#?mtsvl5WQU)qIb{Cy28NQP#U*2_HZ#1Q(^Skv?J*p|nf<-&!7f8!62KiaN> zLn95V>X)UBPIH92W-;{zc%)~=BcMglliGx6dX^t9CpwYT~1;eAwFSq-{aa77;~ zTgI|o0kcTUY7;Xsf2lr>Y~MeWmzC0Mh~(e0n<}(gxx|!zNW>9TS=UrDBW^nJ{9HxI zZ=<|2a4AUV{%cVjh{txLzQF9UB<1jRW$J!}a0eGWwn4i^-pv`buy6IIT#qH2`M+B1 z1Qq||D4_YTD5R_4^!3XlSeSoU?|6XOwX=v041F6!xIBdc(}s!L)nPOPI2f26F7&%E z3mWLmB28SrwM79bCVz-SYrAIqRBMoDVqb83VPZ@{yCVg#05e`uqF7rabXbGie zuB=*xe3eKBalHGOVb5xRC~8Iyp$tapjhRY z^&l(gpMM4MW9`3SL=G&V4^!Hp?$ug%<>Q#4hE_?ib}vpkIkXzWWzGvKy+Pyfdw3$}W zGb;RQEV(VpUJ7tl)^J&A3<-S~pZnP#yu)+u@o-&Z)V{m$Di;l9CN9y>9X*kp>M$X8t zaaH}Y(RYO|C>C4dW24~G#zlDSv}?_oi3T^)QD+l zrd$|(shst}`fE`St|MdRY z1mMh2;~eO#Vx|E6NZ z=f`Qt6qS|j+xnJuREfaCyk+ei+D6lmO}i;eI~$W`v0Q)S(t+dCH2u>o^_RNoX}W_# zqec%j!7F#b-MYq^5ZcKzFS%jX%k!0TPwh1+;4&$C$&XG9!rd!qw^wBK``TpV0{{%> zv(#4~C*5$MYYsn0R(2i~bDoM7h$B^=a2vMvK6DDds8Z{?TkUinRuQ!FkE@DX)2&)_ zDeI{AiFRd6Y8T0>e&ZFmlT!-cAhEHy7X)IQ&jIaw7dYhrkFo$$^OOwFDMHTX{7Lgt z<>lF;^M+v1MCsdk;NviYmgOQg?eZa9u-e7n++8@PvL(|!hr&hTiMJ7&_9n&$)~fZc z+uv=w+j$B)gsN?`nJ+I{mih)dgsBS~vTwsh<=)qv`NK3XXZYaTQHaQ23sPuupg}a5 z(bMhQW{d7kYXPUj^$7UFPQV0HW$&`_JSLS~$}W z=5WsXQ!tmB109Ip)|7%sKlz>MW$`}ZJKJBAbOJLyj`Z8STRt>hCU4AD3fTJG(ViWP zfo-k0p7f)^${z(QwW=+HwC>l5_?!=IpB$4o6IC>+QjuFK z1ekpFc0N7L_wf`KjX$#cI!<+!2WPBSjDjx~*WKaSl#ZcX=oUwld7c2bo8Q{nV5HYd zJyT8HBe)Ug7oWz2U+clsu?(l@9yH9}q)|XCcD>=+m>ch0Z-I1@it<0RDc4%xAWn zIZwmi#^QZX?tH(ozvy+~IUhwdxnytg#p)^_boL6hBO6^QIR9;qyjy%D-~(UAa#ov2 zu3Z>YtT3gR#p!s?XQr`^%@+zKs&9J2Bw6#`E>B=S|Oc&>;4t4kQ8BF)cwIu*OIYN39T^+9B2Y(gMrPo=?%1C>q z)UMm2YbQL;N!$hv(l*nQt9<|w^FPbmEXupNev`I_QZ(iBeZ^kM zGHbDi#|Hr$K`=dCznnqT4B%0(mq5fM${MqhVp#2fablQ7Fn5`& zD3wv6WiL^k{{5sLlsR7^^2X%a${ms3)9tQ!{Z>`NwaZyWiiUOt!#Ph+ z5V-V4jdN~2wT7`nLx&HRoD!am(hpbl?Nz6)EI8`t+FliQz4;f~6;hl|6P8(><}of;Y1I4*6Hww$nX3rc1J#KG}Br2+|e_g+PYhA_gl)F#(x}a_=Xyr!7w#@dk(T zl|i)A?K%lnq?d;D#7g%)L%=1b%Mu^MHrIy0*{zMH5t2)vTcp6v2=VC>;=;qVaTI!M4}+1!D7?U#FWl%ylzC3G;8U z8^D)YOUJ zncHd;8J9JLsmU#AdA}Ahz3*ruwTsmPoWG)LHMXkTOl*KjpB7emi>9GbC~rJW563QL z9y70(YXD1Ue+Uqox~EgG=h3Pcep*BR+^4OL%Xhk&nP85O4J^OW1MgL383{lkT=d@i+F#9oshpCRj5 zdS%nw!;3}uFo?JX8IWjyzfSlwop@MUsFXxm&!Yn%24VM>>1L?GjBkXGsS7pg?QcyXO|I7#`U zld%uH0tTyRFD8}KX=Pq(UmTr#@2z;OBo^^8UdZ{%Jr(49lsHZ1|R!zapu}O5g#wrlk!U4v%%q_8w<*K2l?yhmE>&zH_OK znx-lcZIpJMUCJ(3n zNBqJ&i?J&e#@F3^ME5=Yh?_oW>zvT(B~XP|T=aExryW9N_p*rJX5ZJ6f{N z)z)Ow06wW`X1NXI4zS7o#xE|6k1kA>s^XwZgQv*I=0?o0Je(1cfA1aul@&*%8qAQ8 zhaSTTzR*Fd#)cxJemF;7D|y;e^ieKym?)xKPT$b`|4)DBKbx1}^+A;GJ)>6ZiFF>C zd8;J?R7`FyBg)!XS2w6zk%*i)14JbCOwDkd1ZSVksYGSL?X-^ z?3Ot1mq@5})u*N@%Qhvw+I0y$?B~{F!jCS;qc`oy@vVuYuYG&80jXHDp*A{SY!PN_UJvKO=l?6Obi-o$)-+Pda-j%B*gJtNBk#u`lUA zp+FlBcDduE>4{3N$;7ho^DxTiYTo>w1yf5^1?%vGiH5xsB5hqdLIPyNf|8~(i-Qh5 z1^l2ll>-Lq<$$WU#gCohRP7F9O#fiWS8s47oM71YlQ)Y1Wj@jeQc6rFo?WX*l+8YyR z@Qd|^yhr_3yIp&ko*hU;t{(8H#(q_3Pzxz$1klDi6y&|-lbdw5d|iAz`u^;hk)&83 zb-Z?F#J|BbSr6%+XR+3d{&b=vds*`FoeS@=gy!fvOEn}3t=ejm+~9GZizX?!OwuIX z5r;nTeQCbIM$=6VRgY@^EOBRnSzQgr>5GCeEAQu)y*h=<81rMatuB_nzh{3^!-|1l z1av^v)Z&wq1{>Ttxp)WIp*&9)OP|HuT}LR1-IorjD1M8?pv#$*tnUdv(HwN(E3< zI!*#S;E$?3HU-Wx!5!aa`H74TGq7`Edig&HWhvvWa05%kb=rCB{ZX(|ybQ@_%fILOvr-MolL`5Hhrn69et^!uFdp)qim5P0DM4yMVe?Q4VXjn(9SL=n zN|@DuB``E3soYsJ%OI`UkLDMJ>S+2a_juKo`ZdLYg8`( zq#|h-ADh9FT4VAAb6*f0UgT6heU`}R@o}gfFqgpVRo@;%^&=XRuvcgMZu-<))lU2@ zLu$*(Ipy9LY=>ZQI1LN@G80Uo0}sF}2TZC8urZ<6Eb$Cxn{+2e2{`5(U}~MsT#e<- zES8;tNj+H0#D3Jr6fo94x>C}otmlD|8Fk2B#ZPnxWqJTe(VO?R>ffhefe}rbvd%=Z zG&EGa6J$;u?Z1_zQ>U;iH^_K=_PEf_<=X6(E+y-9;fX-}4~CJ)@@%9WrU!n!l?a>H zqq_{QN2bMgjQOZ+&4^no`*Rc>Ff0|c`9+j}*H4Zt|D@a*^-5SQZ*3O9L3n|)u>=1|Gq%Yr<0cOSMs%npN1x`9VJ_*ouQ=6rSY1HEJ8B6r%*kq5p!>-YfAWhs)Wh~B%R$u(Vb2z1X|*Q6JpK@6wN zMF-V&A|2Yy?f3L5txj#HBsyph4>im*O<)!{za@--VZ#qGAtTH_hKg|d3 zt965H+4?5nCYcLd^`LoTQ#f3G-@C^0wj{)RtHvCfhQrIPNfcJ5Cv(MRajY_)-%6po zG25Y?OW^b`4zGLXx1?wp9h--g8&>|3jA{mV#9iZo;lnpWk;FRCk_tOrbR>Qd?`XSLIhwTAT%>6?LJp4_`9GOUF z(-evtQb?yOtR9N~Kv1V}WJ?xA%%g5mVS%2EeN>3c!6-rPbH=xiZu8 z_kPngXWh0QJc^8qc{M+uEqDvLm7Gu)kIk*>OYgynkGFu0KR=fv6cw^VBn50bE|NEEuNd z^-+nw{u|>xK{wMZ2_KM^8@OmXXT=a;VwCdNHavVcSZL^Q&Q?kXODKb+T@iu95&WbF zoXo&dfrW_q*hABaR!qIYP4K0%F(j$l9(=&97BrxYIyW(Zt*u0y{o^8dieDJP*)UT( zlt+k65syInb}wzK-wy7NlG@Oq#A>LMYNIs^jKnO8pRX`nla_r`EPnK%4zX(UX>owcFBl7$(WmkL+UQ+e%tX%ztq77XP*ALWmG^dp?bC!pN~JAHMX{yqDrR7~RK zOf#&COGi=g&wc@SG;g$S-#07Na^nO-tkK2uH(C}7h}CGhfbb9oPEW zd1gT56UB8n`zJE|N4t@bWcHpN$k}{eihY+FMO_u1&qz#TgPJKwf~vix ztHMi>j80}fi$WE#0}g;-wY$-f=<)Px%$8_WAgp65#U%z$x`cID z$>e(;kI$I#lQ_~$Vq#O5CW#~4zQ0vfwJ8^yHOpT|?i?s#Hy!;BTJN|uV=f+VA^zT& zOekESpL4IOc%S^yPNE3gCI^7)MM=AJF=1kGqGS+!k2&`a4-Z($OcY#z63OZ~pio>m zONntqGcMwFV{)~hcQ>b=q2ph&F=*DV-jHIk%hZ)j)BYPKdi6`+@(byrZhCoPQ}D@~6{TBI8(Zu-vUbGo;)! zGZr~$PVYr;c|df?fc~AP^7PWdlB5wYk-eK^gxyut2gm!jGMFXqPGVo(@|Ide z|Fs0+YScB>*D;BBvCDLb!eaeCKHD96F? zx&>{fr^aCik))jOw^-Drh_ksc|WnnCNAcK`i; ze(n(9lJ^bHZz*?3q3&xjO4YRq#qGr$#OR)I_2;OM=L2f-{4EUswJ?@o1)ko{mxVverm0??nY2nbsXMz z9At0ps7`Ln*#;qZu8Mrec={(H&}agJ&X->tPCEbDmZ+zE+9xhZDUx}z8H6~nLyrgt z$2nr=h`E|uco;m3bMsbRHFG1AM7>U@4`4q`b{Es! z`z%yv+gTX(5O^Blt@C;gCo62ec*6pFxFUQ1YVA$B^*K70^*Et|jzh_}xnV@bBTtH8 z-_=I%oR|r1vY8N@Z-<)oW@oa-1=m?@0Be8HsG?ve`~Q%~^z`SkkaLi(3u=_HSUuAP72@A%d z>{3~1sJF6VB-w-}(eTTrQYN_tMCocq{feUEc`-7D1<7LuweMbH`CZmSWYqRx`K7P z0`xmn#lLo9Gq|ZMXft*6ShFXD5R38t^Lo}b>9&P{AK^r!()tA#rbmd|Nzb3R8bX3a zMG?cTW1E|r+Y3`M`M@X^gV~ok#gb4!jq9uWHw!*65Yu3F5-iT}YvF2S_1>=Akg=46 z_kC7aW*A|XhkK^U)Q#q);o|hSdprS$;peYr~-+ix=^>t{KFE*qu~VGDsde|jfad4G%H2Wq7U5FW75hezaoB7nU#JP16j)ODQL z3TK+BZu+ewGD{8PmvG|m(#D@h7H<5(F-`b3$#tvyV))ac6`f6n6(an|z;#C3rIi=L z=#eUUWQ(CX!MP9?ELRtzsv1aT57!%}Lr#>gwoKV7jCwB86#sEjZ}$}qdCD<5DwE^N zAn)DIp8$G@>xGCVyZ-erB>1{s9~x5DSvua&r^o}Ejr`&@#f5x3{fQM*I&PzNHRlj* zkHqZv$1(`-WgP-!T^XvRR;f43o zFof^gqtOC>10ly3JygYifAb@kI8NHg_DZRVQA?WF+fr$Jd*F$Kei*oXg)$)Whx@IT z6uB~x`+zkl{@yE4YQ}_ht0t&)p1Hig-UeJcVJOVferNB3`#aSeE^S@Ir^AkDkInRz z33iM@wbvtEod;cr^qcc3^nf7Tx}x{C(b>G;4g5g&AO%aEwy~ZXX6i54{C3ARCCgL6 zfeYyJz)$-=3S)>E-RRhULv^`x@32dr{5F*c+g+EaB-x86TpeIjwApd9ZwyH%#^`~F z$jsH4v32+#O!6h~#hbUkUv23OGtY4a- zIfA(nc|cZNm!EEv6?58cb3zcrlOdt>m&S4XrZ~%_M!Gj@gtcPRFo68vEBcJRnw`Az zh@2q`Q&L>39Zw1V0h)I3UiA*Y>_IameSlw75J4tt&z_f$siR(MjD9e#)s{EOhvC zH=9CouHPc*;{0gV)0yp?`E}$I{R;W5R9#VowsI0CoOU_rwwUY+jfx5qSf57Y_RucF zN6;`)!ac0X`J!&>JBeU`UX##?_SZZ3--`_wc|e^}igj@f8Q#H$4>s=cM#ZLN@!{z6 zvwi3WIT8LOah&#v%!d8VayM*y7mwl?JDeZ&)`i^0z<|`Uk|i<3g*0-?)0{3tWP5#L zu>O(WJy~GVb5#1ayk|{>&DmQJ?S#d2Wa$%R3x!~QD*C#v+GL2koG&YQvr~b!9EZ4b zVj$4T;mG2gPN8TBm#vv&;ATf#nCYBe9#i+~_5w@2d?ApyH7Ygm$-mfQSg!k=+Mz^n z*+J(N%k_;Q;t)IE+1yyTT9}{HlSDnSNcQY{BKdA8t1uR3A+)Vc85%t4?Rh+WJ+axw zg}?Lh-s^OgZ?mC9t~<+55`edp!C?|_xL5Su1@_=hq1z3+YoZrPqX+exTQr=?-#Ahn zM_Z;@Vc<1!UDkVw*;1_~ z#{hZzLlMnpU>Zv!JiLVgB7AstS$L2L84b1Zr1)rws~oH!0)a1XEId3~&EcEOuDkF; zx3@4HHFOp$y24~No#sfR)_oEJhV*);MIL<&G~=AU$?NJ4M|!2JN4MS!O|`C%~l7}GS}T&DU2262BGksRRbD|$hWIM>pO6nld9W6Qk6Z%yal^=h{gX-Q^ojyiSSM z6~&6kUwRKFY{UUogBG9OZFSsfhd9NoH$j?}JVn9v`btc7}Mz4$Cz7IN(?- zTDY_^tL_`NeuW~q{J|Xw_rV+9Z%rg^j0hqJ3;bE_yu)#Kc%R&L98kO2>tt`m3BU8i z^&8KlT;1kdnd=pmu`nwPznPD&eHR`AyaoFuDetvp16KS`34iANJdv^V97IHEPZV_A zvI#ft+co%dA(hMQ<|cPC8-7g*GZhRNL}MIXVQZi|rralsmE&egcaVPTTV=B9O3YlX znRuDe60M5v{B>{OlMuQsMOOK=G;J9><5Jwas48NZC>}!;8$7ihhT_;SJ)VOe5fxS+ zY2Cj{cJaZDzq0K38)wXZ#pj@;WgsyzklprJRoiR*>s}W_Hk;U*XY)jTSoDm`RqYNc zTU7K}_(q?n6j$}NosH$wXZ_ysEmafP=aiqn5aAup{p_rsEExSBdK}pbde{){665X{ zaS6OVRJH&j3W53vV?Mfe$u&FhU?Nl>UA3RFvBK4rcf9)TSI^srAv>=7`t5wx21nX+PlD{bigC#=pz0 zom1r>iRw#UJFp$koqzxA*&u^<9*Vc$5D_UrI7*_DJp*H=`>qhu~l5( zyF9Rc+MX`I_r@^1vLsUD-_gP&%u5~G3o-UEGwyH1(i{2!1yuk=G5wlqNVu}HGFLsb zBFKu{Nj2^RMcm^GSMrfbL%)tPj-`$Zp8mmo|L~!Iv!vTw8%~^J5hp+7#PMpFRIbep zYs6mwV}yN`ZS;Ykcr!LySDSkrf96;6O-iB}w-%rLhjm7|6elxNZf3RuMi6y5hPaZ~ z2ji4eQO;m7!J8fErSDN9gpdG66_hY!>qv|aP!kMZItX|BwMJjeJ#JFOlxKx`V77-Q zP?WT2NB!%hoE+X6`2m3)?dsL1= zV*5LT;LK&e9eAmR|Dld&-0f4iQHTN27FBH^5@-*zA(8f4RPZLgHl5bzt9A+s1;rvN zDHP^=bm4}+jnbf#L=wjTY`KM$c)p_3U~e7zNK((3%Hi~;CJv`cbJ=d~Z;kL3mfVTR z&OfxeFaQoPwBL_^5p{DJSPVV>gYvMz zxs`Fxh5LFu+C@7MeN>SQ#C)=17F;>^^ZlmdfBn_vl#?;J4pDqZ-x${7HY02cRrQqS zRh1p4D>%(aBihv^=dl>ALCwVU>+6WtzzzrduH$>qw;73Cm@27M7~u2dGmvu_-;qAa zMgQr@kA;11y3zFUmgK$VXh;Pb#12+1EQZui0|wYmoUO8wI{UDSCqcp>E zz8gxGbCRN)tvX1y+rLZNCizX@%=x@Z68j^OxN3SE@YlhKy-Y!pu$tG`}_ z3-{JT3+_Gw@!z$9?n+9|X>DZg*~u2kE+zxx{}?buaE%nPdLu{~ky2_;v@F`xH`Gh;fhJ6YncC7vHxAab4$K{jHxG z$xFoXc6Y^SxwA(Xmxqa&ndXmVQHoNeBGVt1rylQ%{-psx_5-lsm*7*_msR8NPyC5pZ6A-1q74Neh6r8jVe(k6ZSD8om-8F@ z`qUS@+vOEN$7&Ax8dXQ+{m;cj1c-j{V?FNRy-3xH zc3+e6x!CjV_=j})@d-5Ht|sw3LQgu;4E$G!ErzowEvGr!*cuvaN+3fPly8J=sf z>wUH7pDKCaa~+t_SVv7|d-y4rXYj7-#dnMyTJ`80uZ#Qsy!G9hEA=0{CcuiJ{z<1v z^{V}^2_q?eY-!xW2lW5YOl-T--H#b8dL10qDTRHcNKy#!bs|E%nOD@>M4w#tuVLEB zj9YqkBJc+v=MBU&&IOy$>T(rt<;{F`Dax*Q(l|v`Ow=%xPjX)ODff-}Ut7t7IQ~fP zgX(w?HtXg&u=6QdT(?m_pjqos36B%~fpNR~4&Aptk1lz^ub?H|c0<52lL;zgX8or# zo=DZ1PpJ1qs%!bB=2}cFh&XS8fmC=#8H1^dytOoi+_jV7=}t5vtXL{{F4Letf>Fv@ z;q?)Qr=hJ;2@AQ0Au?zK1!1jJ%|@QCYENm55MFHVCJ9o>h=DBPU&iQ+;2uHEr~|7| z`Br&Y;B#w4&mfsn!mnMOXToot>v@)!rWQ(1TSKnDz8+!blRscwR0@_DC%J2G2JQPx zE5V7n6iV3y4@0+y>aqFaO*oHrJCh=ysV~Ohy*5Ni)jKRZIke9264Dqcfe7 z6+j(rB$=vARwU_JAb5JyFMG`VoRZkP+&n4SnkWuIMt}MwH_bhMr>lNdfbpSem&qtl z=wPD;hsI^p2i2Y`8B-;|)2g3Zc8G=-BYZ|VbL2|#HzcH%d;G{A$5yk9Tk1hRb8z&y z*GW&^ZkgACC@BtCX*`ZN>ZE^@q4Vgo&TbvcHIxi0@amDfwPR3c9+4f<+5JWyJK-MV ze0fU|t+Q>o1F=T(LnnZIOl>la>_xiYDZ<^@sByj!r$|;aI2#5obbat> z=ifRyLYHIFQ7l;@nCl=ILimUP|E=z$@xUYusd#&EupiGAiI?k*fu<>h(U^Zu)2%x1 zRWszCQ|l{(9*2Al(mK%_YdhUHT0@4;73ZNZDW0~N{A+61L2(QNJ5T;*#S1R{=T-e$ zp#|Z6^AnxoKhF-nz6{a)+V9UQ+6vcFC%%v$AUg}{2oAPTa4|%LkMjVd+g@M#>mcY% zr{TBrAC(eBJffHO1OjUQz5^y}rUS{Walho`V!n{~#l0n=ilF}%8dNyjbfQQ${dMmI z9qx32&|Cd=1IBNPVzvk)b@uo8$h$*^r#zES@xUsRyZPd+vQDn)Pf=T=92E&am7t}! zjWzKyg|&|9teELeMHZV~CBD-zKi0tAPwIS2l&Q7jvgY242dC$fm{fSz+ng~HGCT++%cITBv%`NmO+8X|Rz(Y|k*F&w z%F)sCDn%2v=By7D$P~_cpEVl&h;!iyNlV!ykfK<$QnE7>F!pGWQX`pF*A8E~BUDRA zp;uhZ>32xJ{wcuGG3ukMe&QM^iWjTv=8Z3+d&USHcK=d9>|u zU|QZpp%QeRc+g5FRFkGi2C&X^l;pzZeyf}UynL!OcN*2xpsfdE3SWfbPBynw%_`A3 zda`X9d?{~P zGB6@e>5^OZ{cZ;5f0kvRO5e9qL=R7oYKJEq|B{z2$Du+W#;3X}QdI|4z!0O@rND;+ zQhnK->vjr|o-B@bPuAafNBW|>6zyGyjk9hp7S)tbWeL7wR+8|Q6e}irT9c^! z4cAeu4DXcSo$F2pI2;$iMh+6|SKdJxr@C%f6c&Xop>b=GScN@Z~C9FORgAU#P_ zwR6i2|4KGnw9|xydR*~j9f=Cg*r{qLACGzDlN{Xio1OB_C@CTN#p1n+$#OnwO5-6uC??#+(##4 zM>n=DN2U=c8VZy=ZN_ZSkyit#WGY5q@FJ-Tc4BiPS}xD+p*%6!yy-HS^cei~zB#%L zR|-F>;oJVU`ACiHnJ)$P4KyIQ`jOp*Cs3=`*Wt<$P5r7K-ft?oxu30>Pm; z6z5CNz31Hfe9!xi@&1*O>_J9Y`?uFzGS`}_NKwWb&^7%RmDC=jzsMJYJ_*@g3Mjzq zMj@J&#ea}a)f6yvcfShnuJ_Il;%p@XNN$-$Xpx4s__N`8>u?Ha^U&2|>Og-_e6D(< zXqS^?oepf+l7}VNsNjle2iEnwcc532zj#5>Woo~mswahWK-QANw-y+-><(Al|l38clhpoGE9T4515&JZRV1F=m7okaghM2s{ zwB~YapmY;A&P=$Dg?&<@0pPPi&i9H*FHx)HR+1hs=+GAZ#6}m>x1NhO0K37KOL*(j zF!kMlOO{hJf#A8I<3>7z<65$8#m6P&i(Y8TH)*c2#FXHA|4)#>`t`R;@1@;30f!X2 zrenJf19fmGEa`n{H1;#sVx-m8)L!)F3bUlV!byLS!};eR;w27K8`NIFCv3)F zb3sG=9)6hctK<}yKN6^8&mG0;Nb8ora~a#!7yhWB#WB8HAxlAKwtLZ2QnX1V?l!B7 zr|ewzggk)bP~|h7;%<*g%=-8Y&Q<8w<8b>x?Bv8z*>_m&mXdZk2FD`FwUN-cH;^<&gXqp_NykBZS&g4m*PN1`mAnqq@n<7?Yi)po(`n{3?X5Rrb zE0N2z*4t$t)`#VG9^NT`o~%c5*Hc!i<)%Y*Ei=rP^suvG)4d7xg`|EAN~3|2yLtZs zEUR3m4Pg)Q)rwC_EyV%GC^5Xyw){xovpEKqC0E}gX#*VUtxmJZ#Bf}QK4 z$BM_VF0J0`UV`;MK0xIO4wUqeR>7&9W07T_{0plmj^Xl1c()c1(} z`ALi>RsMkFM9zq)H|9W(>k0OgO_`4~cW-Ucqd@$Vfws0CE2O1+iQ2q|1E;H-jMopw zrEjl+bE3NXMk&MX5N*uBQ~%e~*y@%``|t1X(YLZvzET9@#U2aWQ@9h$YK*z?(2&;H z&IsDo`moy_!1i8DeodbF5p43~8}<j)nrCA-jH;=|Q=pnwac=2u{0X*ReL;R(N)} zd{1Ns_k5{i_s|_g>Stvhg!J9aRC}XVVe6vh! z(^iUe{F_5(A&`DDM-hq9etuDQ*_cZ_8yni6ycu7p(<=Kyx&k_=RG`U;63D_WHGXOZ8iT+N2?}Sc2D2% z+L3HWF|+URWmX?+O4i)xb7<|Pbv(PtgxO$ww7RdlFGI{0C_53(aZ-E(Ba;Zjuu4tN zngWRwh!!hq`)m)3IBDuO(nlFj%f9z*EjfC82N)VS{egkZqKHd+@Zf+P)cW0zuv+vd zk>NcdGds1=-n+NqvC=N)f>i^F(%;Z@0|4ys&{yONrp+p1YLSvPLWs~KRbx7H7j9>S z&@S9*N8u+rmLt8ow8-m$@0@L0j=QyEPRA4WElW>Ce8X(-r@)jsF53_($<4T;eqX2% zHBH+ODpySJ_z%YMsd?BBE5o(3AD#twK~&F7UIup7K|JzOk(`}OH1|E(~c6oG2#!Lt%gFmzv% zbGrTLPj^HW=CJBE_NuD~Wvmh~kc`#t> z^Hhmpfbhw9%wS=@d(s57tOYh1!9X01 z4|lQHJv(?IIYJ3;6yHppV%JM1o_o?>``ww_DSmr^PH3!>mZ;ieY|nklg$GWZ1B!S4 z-}rLJ;@?DUz`I9_-yv(((rWT)YL@G}b^QGuqWyHIq;%JDEl<0Ykdzgd@71FRU+3rH zWG9GDfX1guLip8vBO#W5EmX(f3SX}%5Q9=4e~sZSJY>qkK`+SP?|nURBtDjY)4=tC z6n%Tv4_WTF))6Po4SI5CGX+r5M<(kE`jz+oVUgDkz!S+jl24Cs^x`SJtv1J-?5D~d zDoI0g)1>H_mqD^rfOOP=Ne5nx>Jop3CY3-|HEN%ZK+i2HH>9oj;ADaRMq9%2aLO zS%1<{?XRc+!xxf_k&csrp`#Hx!ttP5>mHxO#(tmW`GMSb9Jy2yO^cSN zFp&&A(QVfTQ&l@ZWd1R|;LpixZx)hC#ZN)Vj!{m1r=xe&FiEah@p{IZALdBQOg#N9 zS=Wy1sFgY;=mE`tk*u=7@#QH&-M#?Pt+1 zw$i=bad24$ON7L+KcG$BlmbszdPe0&6K$gGMuC0J<3VfrGP5T_I?cC>*UT)(3kc== zq=9|UQ%+7!9eLJ@-ACE4r)7B)A_bbLyR9Quzc=?i0CdfwV{en>|LTo$bfoiS7sHsT zfgU>>$MtuoM=_>PLd{7&ib$9=+C$Tnq-h1eF09{Vvih?zjv9?Hz7i7PbXa(iXd`+P_nA(FG0vN3zTyGdLUPwodv zdLIUwx(i3FW&a5AaaK$qRbY%wFD&^X5UmZ%qg${F0snVZFZKFT6HztQ^SnXaSHxA3 zz@};T z_GO5MzYGgH-#xrWI=wK|ra4CWbU|@WEUaOC%L?z$l1Nb2Kb}@4o23P_1sKQWbc8@m z;I$O;y8FxRnu#*m_ObkHr)}=wvvGs6)3aYT{w%&fsw%Rp|HB<}0o((5jgf-@1y^!Y zkbLnMH)oPLXnYhqoJPqe!#h13u@@ns^1?nK{m={iZSJ7UbaN+|{lgOnK08b;zJBCUmt*ju>-Ct^N^oD`xMbA5`4>P^j_l}*c> zFll{VaXC9^rZQ$4&)<%)H6bcJmBB|0}Z)6*e~JL*UCCj zO5mu7*2aPXBOYE(mFUpO_|_~D?3E~n;mn`7-{cn|>yJtUVW7fHEWI#TI{@wTUhRYk zxO%`hko=dtX)pbL$_bEvqPKY20UZ>mqSeHV?7=d)W6t8Yh^tF)ZB( zba>`k@X>jpunmbu9|Q*yE5Q@WI`Ja*?pIkqgBmm3)<4J~=}6*MX-@g?XIMdYMJdr= zDNOtRDSs*C{ppF4OLE?NNt)GSrcDd_?;|ilEoBn9(1YK3&=ZPi0vhrVX+v zc0$a?kA|=L_J|Q0^tis+8!`nN^G4dAjuBo|<~Ip3nu>_)ov}EOzQI=x#91peF<2kx zF}c--tJ3OdyGpUzw&u<%^6b9lZH%AxPF|ahAxTof@U-r({^3lzC?E2RGvqR#cE0Yr zU)E>pfs(vmng@Cf@9pYFy8FS%#^fpp{Miw+XOj1OMm0X;>@rDax^7a1ocXCdNlQneiFs-heb-CLD;lAoye;SN5r(XKduuB zxKIkA7|hww+-$07-_Oz(oQ=q-O?1M!xZbEekt@7)bbL7#Z(j&}9*$J2M@*QW3u?k%SYbiGaWuuj zhC5c|q=Mvi$%)kQ0b~cEs}PGTVc%YC$)BG!J2AEgHoD0M?b)eTKbd2FNKE={CUTYQ zRSd?MTp8^$KAP!LYXP!^HE}5QKN|^?veUdk|9;;>Tx=GJsL%8hsqZIQ077BTQ0~*V z@4d@Q!%Cj{x#=!Ux#)d+B%@q-vB&+I@qr$4sFpv0rG!zHr=YkP(A@N7Rd;26d`Y<7 z>^pQVQM|U<`ukLNh^ZiTdmd70?kc)$#xKll;K7egO&+3BWxXJ=+gg*iLpQl3t?5OR zs=md)duJ?iE%I`0Gnw!DKngEc!P}qJ1~_Qd%8Je7mf3A6{VxtsY3aY3vxFpoAE!T`Vj=g>779k0ez7n1(NX3nD%(k2Gblok4QrAbUCm8iJBr`1 zvF50A1pd4@&}~x-hDz{g$}S6ftTi^hpOT(4n4A6*|7kDbkddsh*O{ta1FPRqBCwdf zKdr7T+=99WA&B;rJ6i-q6z4=fh36V8U=z3_HfM2B z(Sqr*VIEv-R3m#F`s<_&Z#T)62dkP2^G(Sq-`2h%yt9NY!?5K!+1JG5%_-2)Uahnt8fbZ55`b^ejY$X7F(6`M2r0#y@e1Kw0zKyt?AXN zbo_&v*_u~pSMP$wTvpw?fMM5anv$h+u<0B$vOW6CGbN}O2|aYQYyIKVqfGl)ioNKx z$?n0f&JQbtyL;WS8@FoEs%knMhxUDJeTkS2^0;o@N(vvVk&7knM~%?G(Z2-IPIv|V zJ)H5Uh;hR4J)k;PfD+KU^{&j6)S#VnFyA{HdcqK;F!K6G>OejP_#E=g?aD$<@(tvj z@c9=X_CW%aqNLH5$ig8tM)mD>IHUDlmJFODKZ0*7n_Zx&zxkXv45lxaX1mmqrm<#KZ8ugSKJWC6;sHsjGw06=-P+4SfUcyMMC=lX1UyrPvBqCr?5N2Qk zTMHVIaR9b>tzW0Ca~8va4a~!~a|!{U7qkzVaX= z3vR&FEshp$>Vd+}M4kdRIg(8xqPo%t!H?Jn1+3ad zYQC#YAE=?<`x9p6^SLm_|+rP#=DZa2Kp1RvuF`!mMT^&EX$w^Y2$ zYxp<%9H%$1WvEl4nTJm{Ev6K{vG%%jbi`7aLZAgX*RPM}a@0O@XQzOci5729$Fs)S zCFENQ8ihyVF#7@O1Z7t^;d_!J?OJg%WKS}*bT$VEdO?bW34}bR zPOa?Gx>d6K?s@eYRUbk!rr+kJ73LcVwcr`o<71mm_r!cm_EJ)4w2cIQ>xvlQjvDKV zm`YVgXB=(PLEdmLim~LlE7xv3X4K~*YMYgWCjfKXxvQiPrX(#dEJqe2@&vsfh3hgO zRKFRzCJHpsb2tcy>os7PBVnlV)3#GS1nF%JM(*aoAM8jtBR} zbVRePFF2YXa0pIn2ikOSxk>sK^h4;mgiv0jr45Y?hgE*&8Sw^6seX~jEc96UX>PGg z!owm>v<&ETtmCKc0QqSlRT;Ji54B_rjWmbk^IVp$60JFIk@%bg_xQ%yT<8?d38IsS zzEFOKiMVa}xG>v|deYbUDe_`oak0hM6h^g_196FR0?xlJtna#NWm4L})gWkp-DB+5 zC4geUSW%HGd97iT6ckx%6XVa|qrfM9K!5Fy!3M4T7Q?htpd(ZC(e#D>OiscF@hvEZ zogi}nF3^RP|ApA+=ut{fCUgmJVl`{G6YPqReIjUPb&FlUQAhB}kUF$;9pQt*kB{q$ z;(9w?Q5DWFKuVsaYJ&cc81eOXYllZsBbpDO^y~dlUp^k_e z=N-JHOq6dSIJjaV z``Yoih-{L*$Ho`-@aHgKE^g`UMktzw$N2lqANG5PEf`;vU7K_633amIo;HC)p?Nu628KB zFfX8kj|EL!WtZ&gz5sG4bu;rsDSZg?^=`1eLdh1;jo-pSWS327{2I+FD0rP4j~0kh zH3^A!CTR$PtL(z-yK8|0179m635(c|2|K;-^z<9_=~c^g;KV2Yu;o|;AcrTJ(c2p# z^oUr<3#6ypS-i~gtrb@nI(Tbq$wIXXVOxXx|%Ok598O#n}bQ=#Y z{zzqeYva(Ig*G7YDY{CTj-L8C({sV}%*fP3QKagno|xOi0H;=M?+acxomt9rrqX)k zAhnysIYGOq_q{QqB6Fvg^4>sC?``AJQeT(EkBF(GX%!*9Z@%|xVA@`Qhu`*6dC6N$ zk(MOk#F#`MZ?|8dM+IB+?%l_ z@prIFh|;0X8NIR|JF4^LaX-8n7cPGrQ!fbOCyZERN4J`yxO}h>O?;DkvxuCY5=*Th zU|2O*NO)UkRj!^;%(VxCt-N~R>`a9pmWq8H^qKts!N%%Rc$S_|+gECO4Mb$uq8I%|G0VV%in5gZB=4Ky*jcFrzPQ(b2uK!0bcTl#s(TsN-g zEG>4(GG|r>JXdUdR&Q~rgOUB`Y6b~jTsNuE(9By;PU?I?oS$u*z*Xa;d~T0f=^ocb0|^V;dR_uzjLJunZ_wKQk8wIML7P1UAUTy zimL1jc<*UO_Zvg2vjcbAcC%rZ&jsUl!7@nOE?t6hIe%s9*SyXy(U8GAy2o29VL!~I z-z*HZ^_S8)3$Jn$B&Me}b_Hf7`qE5&v;kpl9v_$9@~+L_t*BP`xzl1#p$2^SY^Dqp zxLp7Wv$Ek<+|*MWOG;PG0`9rJiQUc=Vg`gzMFW6?7lG9?^u#3ST9hhdUXb;<&L(PKG zw~H7t*#)+168VUCa-@r%bm>HwL*|bmX?ha!CGTi?vr8|K3~lEqi9B9wCXOz~cy{@Q zJ8PZq?dEq2aJ8Bc5bV}-E_$;5;3o1mUo7B!!=xd0H2Dhd5-% za<~)2FtdW_ngK~v=yLVUzfnnf@0sTKbYC#D^5THxQ_S|t%(Nt=KI{U_-~4)Cm%ClW zl;w;k(eVwrIC4cpp!?f;zQ=9tcU+i4`V2}>MgFzTEjJHMc~3oF_6si3o~pV{Ey;;d zSDaEA9L7hG%kNgKfmP(nFJc#P7jv*NOv!s zS&rOYv7p=%eiv&*zgHC(vd=8}C@++@1(KdWMHZbPIjW71=AeYdv zw$nZ7_f_7Ua+i`>#Dx2X(Vg!H87V|zi(x9p#gLj_Vb?wNtbI|r@7=mgzlL8bs$dS! zsGE$27pADwVOt;|e~!Uf0=x*kv$YZNKG!vu{RMG1s(@%lq5eE=34kv6+r2{N=L_;5 zhonKy9I_!J5F?mN{LN<*qgoVH?7diB+0LER_uNgs+?f8dskQCr;l$|4F8=`h8*lUQvVt8{G)WmJ2GFj`d0RNwvj^AL^ zXvrGJQdtw1;fg3U829rXM3Q6FA%v`1A=Va>VOWpw?8j-yXWF9mVWb^rVWSUVYtOBC zPmr)k9=sSC7ZF+z<)cg@-kY-rr{ZpL&N_<0Q>u;kZrg)!?|(*@6I8@m49eaO@Pt!n z44Wf66~X*&?1gAK5Kin^#7ZIsvCYC~@gw{r{!DhDpkH+%2c8-^Eg<$#9Q945 z^{Iv}?AQ064lXF342B@@Hyp01HPS9!c#u*a+@w-X1smiTU$r@NZtl=`4di>=ZB-Qk z@}k4Vw7)sgE6cs4U-%B_v8RFrbdKlw_$0gHjsAQKft)^zBTu+sHt0$s`e`e*?1uf95QUuOqX2Cf#d z_pkGo(eB|WvvF=@(U!;wwXXY5qxKmVd@T5a5+mwDDwI(X4iZQO*ON>1sfb8@ku!P_ z^3s$}xbmGUm$py+PLl68czDw_mC|&P<9J*OZ)E+6HC6)uP59M*excd^O@bL%hCF$u zoJ-)1L7_wU_FcG~xd&-Hw?&Emm&#zQE64NdPy`9;7N~PhMcaL*%S%Ww{k<-4Br|hE z8+_4CR{;y1YjgqA>6tana*2^~w z`(9#HNtgMH)pLtp#12#Z`cS20ijG{P;s?HF1C&=WS!?4tEgByF;3z`_%^GpE1N^tU z{)&9f`7$9)qb|46{y{hM%oppE4#J8uF0Ne?LJuK3_{0`UMY-H0S;_2j=<^0xwRtup z>$Ze)fB*O)llAK!Y6`Q}?73fq10mLAFV+{|ea11}qDD#c0LvfQ9-DdKl5JY!Z9AEq z8vufQ^AhjC1CA&>~N7*cg*nE|{wv*SYG#1+lNu%U~=XdVf-UY7} z5BN{4q2#ew)?v&J+|NJUY=3;YF;E+G?bHW~fe_>?on?}V2A-<$13S;uKb%*aJhbCr zfQPx`l8>mEFlk7EkRl)4rOW-8Ccx)48zV;}ONNm3{t2U6*JFzUoeRC9SESG0;6(SG zQ$h!t_PO`6Q>A|+SG%o_2;I)fW=v2{H#qQl2ar z)q34h>>TeHQNdodxD!bWqYk0Q>}2Gx`Zb-mSM0IWC5quH66v((H-X-_H}nhYV~r`r zJ^z^hWfkBshb9`l`i4?eSRsd2VO3-4i!XOD(0g#ho@9o0wgTz|YWif`16L4P-Rg!bt>|hNnU%t?t zPqeaLx+lQHop1{DK<|urD^oYW(@QmuWNT)wSr`B6II~@e0!t$H255isaS+w2NYhRf zu}4`ypHN)*O#H&7M)SLQ!%G`Moad$HY%I(aEOZ;V>T^?Btk$m8_~D&I9e9W4z*L|g zyPr@aX3kW4)CR@MRNvtI$b)JNYEdGESC<@P>6$7JjW$*hWw=ziaO2eIkLiZcWJRrr z-*Ulg^;6pYy7Os(AZFxsNUnm_#@E{8ci*8>uxePw7u7?>`u1x3sd7WT_6=K{_ste% zbZ9ffUaQloZ!55(x?5SxgT{A9Uzs`p?8tSV-5oqFlaUHkz=uc12ERXZ6}glXsPh5V z>i2x(;^3j8m2WZ`{qAdS{pC5^k1R0e;grjix#(Q3e%ynRmeWfqWy*eK;dH_KqD!*_0&(@ZV9E@P0 zyWvZ;`y)3}AB25;!|hiXQ+Gj{`QzL3jHWE9x~*T8=q(ASPK&#WOTceG2}S2Wpgc1C z(u+hPpHNKxtKI(};H>$>%GjMk0JFvtNHRS7uhN`>;Ky&s3Fp5+BN$#2f1C zwiNm{oj3Tr@#3qCq1u{@8v5*L3?yb}5%n&9pdoX>r8hQ6A$3+ZE^`1p`i@d2^kl7N z?4w`|Vt1UIz<+Df=RAX|17dW zgo7t);OWml;JG_pb~=S@0Sl+*_tSTt`4DHZBQ^M`G}hOlm#=>oPp=aTQV>#~*^XP0 zeoG71Vn+xfqWJvgrH~GCu2VqP1=$UgV3R3rGIgYy@H1H~-}eiTAq&&ZZaoVwH!g{& zS%rC`7Z~qvi7FnhpB+ZUyXQW$`RxmsbSpF6S9Ri1kBd{3f11)Up<@@j5b(KOl#?N9 zH7Rivc%rp66*Kgs6bsr!$K5xtpNTVb49c&oOa9z2r{9uD&j2r%I(`aWhvnpl7}JX& z5f{wRWvL5UmKXXLeMw1(f&R#uLFz?`yjx$7NSL0`Q%@Q_;Dj&3F;@RX zGa&Yp>g1rg;hL0)k|g}bNYe!fTDobhJX6M`4sAojc0083#TNT}gword+)2>p(4Y*lA2 zZBLn~SdMOG$P&WrQ~VMHdy7orDzP0MTcX0kBR>j}M1PG=*H$7=43A4P+gCsc-WtjU zHLDk9bqFxGdGv;W14i=SS4JPcjL(v+dy2uS0A#NCu5HN~*XSdq3_#XC)_y6xFbT-u z@Uf!j5a2_sJr#IUEZUn4Mt5SUQBii_kHK{Ql93^8^8TCs;ktrk>lwRpO>=WT$eC)| zf|i~k4jiSV?y;iW75^#MGYE~cT5lqazs)*dSS0F^MHrP=i0_+mh05~2eYQVIhwa8Son%GgDQ;8o^z2DmmJ++Ft@zQ0dAz~Ie<_66FWMwSN5$`yXhfTCjJon zpmC`f?~vO$IJ%6v^;RX#r9eN^DcI_rU}8}65gU+$qoq}_FZ)))kAL?0MZ8ajWx_E5 z^(O%+!53a8cJM8(Zc%<`LuLj&JiddDDW#{79Bi}8{&>p!ib{U#uivhg4d!;vg&}#q zli)1AE;t^IPgUR%@>2S-?8W;yUe>A_uB zi_Ua5A?l%uIU7rn*{j*>c2?x<)z|#epUq>B)DXbMQHjhk!2N?K*`5$x*1!}bPIilV z_Tg}#yYa%Mf9qtX8n8n7Yp)|N%+8C$a`sk**kDQ4#9KsOqu{iSC8qTk0ClTn9?Pp5 zGJP5r!O)gA%w3aDz$^^y3mJU$Y<-(AE)bfH$)nim!V4o4PFMSG5IM_huHSd!O9D!Y zfO97j+%msDs{}X}!VDftD~HDWFL}M>i4RcOUJo9BPrcxsS+2w+vpZZn*hIz=(IXR? zR>12}tlND^e(US21B@aetx{=gg(f@{0QE?6NoGI?F_m#o~fCT)hnH?OLXjI_u=&yBV5iQmgI!& zGl@MZAFZA^74reV>tO9E-JM|ONcjy9j#}h%=r#Db@l%x*RwWu~Kk;||{PZKzCXe~x z`Tr=$8B`)-Mj12Bk!A;+4MEN}*sQ5g&H{Rz%*|qwi$Tflb3Le^#>$OZ*;JIx#Pvh_ z@OOBzG1=~PZ^mZhlRayEde*h`cbYh}8X|&T-B2V8qkpo-98D2TX0wm?a>_ojFd9); z&6}UmYYMSeI1Dz4z_h`5D-GQV4WE1&Ukr$nV%uw}U3u*WXBHAx+E*kJphRH3TbOau zK1<87$ev5FhCZ*n&YZN6A)ZCYQ8r_2$Yi%S&f(~cc$wpy7guw#F!Pq`E_2ceo{xc2 zXK(DDIXL`Gah6hf&DABhM52K$aSZ-Vl6I@$Een0U5R(&NoKZL}Pq+j_X#x|5G zWZ;v{Z?5!jN$b^sW`7RZ-r|S;hAUXm+%T}_Gz`HJ95kAO4mb>}a&1pS(`wl)(uZWb z{xqANeqHFC-~wqrf0MBK?9}*9`1Pbp>+lv0tvNM+rA`giFdWVfP{ zm8j@8^iVHMv+Gd)KC2>HSW7BwFf13CF!GAUQX#1h2C_Nerf_``P%JW=vI;N%;w574 zNA{>l1RLY@)Hs#;6v*ccOc?nOT(KPOK8>LBmgjB{9$n*}6Vj0S{$6rKF!ZXUZ|~QZ z9GXmRyH?RGAJelHLBh;Us zB=SJTlxO4W^e6us(S7zr04LQ0&yLoCRZ_0kt))@krPC>UFxl0OsUHT#fltqI4;^NM zNW7x61HeSBt9#H^b7nuBj^(A?1>k?vSz8DIq=CjNYKy9E*NU=Kb7u_XGeKc_FB!66 zhopnOB(u*uHftxpea{?BNluzxz z6KN`gJ%}1n%jF@ zF~Qd@Po-D;noVyy%A$2xz1?3OzM7CZft__ZUWAmYxXx7=K6k)&*;Fva>Xl-row#T% z0AzMNQ(YWl; z-gr=Uv}jQypTW;}yjhXGMY`noYG#QINN>bjd;f!wG6k2~6(yzb2C6Xs;&8N&BNtyE zU>yz)=M)JY3kB1kTwVs)JCNa<|?p%o?VTk>`enX=vX_uzqcC* z83~_7gO3V0Qmdb+y>}2THC-!D`7R96WW0#*kdX;dybsx4oxV_9?;jp!I${YuK` z_FgI4G=j|5^f)~C^;bef*@C_)k+JTvrrj(N&jsS&QD)9ZQcBS>DG& zJKuK3(z_zMO4MCG{Us;(`i*4HjxsV!Pro-@IrNY89+7NrdgJcQf^N!rjn#0&r2Ud< zmPnbE!|&x=bjOr9t?#8f>`e>epDXR3DZ_$!iW0ILC7#TJlOE>Y`^VTlJZ!#ze=*Io zz;uA!hYPoN77L#9 zsJjQSoP&)sC`#i=-J0^Ngn!(=lxWYgd1|{dBv*H0Zi=7VwfJYHG`RbBpkz9_n@_kH zn_c;gP>Uo5e2D_-BZim3oGgc*;x2JQS3v@`^97#nsY6YaeVY8#u%Q{dL|^HfNl`lg zQyZB_Q)QtI*CBCNe6;fT`^dDJL?CXaR7Z$2yNlHgId)@l9EW$VcEzNB9n|RuTuPsxLg`78;}t0FwU@SklSe;kisq9P;>@Gldivq+IIzr z<$@&Mgt>1jaRH@mC{sMW_?nlbd{vgie>B*-;ZddzYT$u+K=V`HE4@_5-iFrDlei-v z;2xp#^L~1~pK>k5`j;{@bKfd-gijF9j^)|W-d}dTe#D*HX(j0Cl!z9q`&)(bL|Q7> zq3fxB6uiV``)++=>ZhNvio^}|-2gRaa!3pg{E)Aqg#-}v_^E!IC8-a=y{5(O(fwt+ z^YmzJi%-Lpd7o+U`y^~w_8VL9m$3gR4hAYjOGd5elV2T`4~F1d2FHj5MeH&tWBU;C zdt#!_VQdT10WOWyAqAx8xT&-4 zw}d#H(RjB=vfYT00o~Ztcnt`doie9|>VD&cr+cGDms4e0KD)MTb+koi<-~SrK%XBE zm}0^*=lwFp_fQ+K)_GpW#c*NzNnR{iB&ZQvrp8|wkCjI4oeT*$3tj7-+t7E`z6fJI z0{h9WKO5k?e@6z0PiCQCb@U$g{N;7vYVm>8SV;5Uk26)`ojF_8x(4G*bE~`BjUrzBmET!+y2vl?hU{mD&bwU%P?^2T5X?pPe*mq&w-V?3|A1Vz$;?>EEG!%RSxBOLy^GG4m;5L56q5pj@xm862{ zn@HL6uU3dsn5N+OBJ||uY}%5jv;Bs(L}95T&*PZ=-k^K<)G%rt!tHC#?h<9>IF>J; zNU|)LeKyN1Ar8%rk`=N_GgBAa4JPtkM=C-;B}^dJ+YVP_v7>Z*(Xc>pzQciTkTMbw zz)m58SHXQ4Q>p)%pr?s@EqmfG10Lfb`ewtm6z}?=@I3tAzC+?QvdvtR@cP_bx@+bU z=s#x^QNH`nU;XovyHAIU*HaXx=_t?X!JK&!Fo^_|)z6xGAIyccgK~r&gmcxfF*IeF zur^3RCjr5g2u)tOj<6)SLvf7{BQ~1v)xMdw-1(U8(QipF!RAA8DJ?K<5;lde*iLn0 zGp4&sKUP|OzgzlQNai5I9@3?tqj6G=uQ4SCqDR%k`k?PvL4qJ?6Q&@K<)Yi73z^9r z=vRGc=S(c~^3eUO)}-R4Q@#2-OM$I3>04Iy&Hbu+u3;oCk^P zp&6m7m1{d1hBJt9;SOxZXWc?)fsa#c6S78^!z#iMb)WlM1}fp0M%2cBHRaol^ZrwF zf+9r-Jz56*UlZQ~ikkLc?Xs{UFX^jc5y|!-89B2uXIvMAlv&V1Il&Cz!0hXhp3H6Q zBzX}Mk>|dP{o-Sa)XVv!O?}B^Nk&}LqbZ)1)ZFRF9UH@1LY;~n+GqIGdiv(J(}0E%H6o%;#J25?0%tW43?DaMT403k`UY<>D%8&Wd6 zQiF1*4Nz{h@Mv1TX(S}JSRKL$jAhcd+ovezR8b|AByAB^gUo0OKAViWNjaW)jT`qD zcuuyI5p-fjZd;ayUqz!E*=^#olT*j6V=ijdl)tMO*~Y@qTx&UQXoFngO2&waTW|#- zxaR2ABBS9yvc;-~$QPb)734FzovXjW`Ck#$|LvV>65d;ao)&s&bj_*NTMu?e{k6LA zNxBJ4XS&D;%+G*!vTKeF)DQK#(JK5oY9Mz=E*1KbY6^=QjPcRO_S~MRA2Yfm&D)qPgA%-3FIr!kTpS+7o%*f zE{fqBiJGYaxtckd7kEBf)t=)JGd8L$1bS*Z{}}b9Iir9%Z21KHK5ahZ@~r$+o1_HN zeY2<`3953pt%dX&H6n@Z2pl-mRfN}9PJ3qP?a)+c$F(spf-7comZGVjWE9WzHs+c4WLwQb>@6u7(F{C3AIA#}b zMZxEzp=SNPVuhN-Z;m$PI+gn4WXm7Ay$0HLRUFaB~== zM@p!5dkHESBndPoT3{rH;HkK|MoZk^TR;qh`+Lf z*M445IL>!sB2B-eAZy`A*Cz&53Zjl@`8hS{KvEcCcLvY?y>(9VO+xH6?l;K$d zYgfN);?HmWpEr>4b=mmg&CJ&n)9v>Sg4=T`)d&%9Qn0;mBk9FDFNi)9!v|K!VPQi? zZe=_f1q^4&XC*PP+=MBh9bOA>wNT^r>#qHmUE8J4XI`)gha3Mw!(P36?$2v3`87WL zFNBXj#O3Jw8>34QkZwiY>9kS0ok{*5@u?2IVQ9S3u zzi~L!^CJ9vaVyl&SNAZylrPvJbVx#4C;LtN)Y-Mg@<7OxymkO_ADwxh=@k8`Xd@@1 zUhN(-u~*!1IME$5zp&j)E{~CNEf6ddr2oqU^1*JaFvj-<{U*?E0Qx%FG&d#YdvMm- zpg5HFS_)aZrkuP9{Al%dtwa=_GbtmNi{ACK`~yoPQGW%TT85h|tAAVRzXO{8eQL_M zk*w*UwI+bs-X?xKN6oeNnjX#RtRCLbl+OV2uUt*gZqGOz{;_&4m8dCGG?ll0yK58X zcerr1dAp>HWYWk|!G=ikwqa3zM^_DM7?euvG|`BUQ>&t-Ggo;7|CyL;N%cL56_U&b z6O_2cz#MK4#tnnIuc&#k<*16Ha9Exj87D zmm!{Tg?QW4H1T${>zL zxg&4`c3IPKJUl9cZ zi%1a+#TLszm|?&br1wu+Oog~nNkVO}P-&7-*;*{Kr#Z+6=>P?7&-7?V#PfPV}F`L|(0 zbG(KAj+6hs_Xz*-%66e3u2taku-;YlT>A#!|&@XJpRxU-s1Qp%PXkG3ffRO&YXgp!oTjw9H3`NleitKy`l6v>pL5m4(iw@*qxWX% z(k;R15tU?#IkjhSNC-uGOX!3SC%$EUd!Mt`Is3==GXbuP z+_~qRV~#n-eEPWLEQ*n;n2ayI-1Tz%U#_3I_>uaA<=Qv95Z z&#`WP`3%|36zYpsvZO(%I_M<-)caLWQlqeUzXWar)4tPT6TZL#n#* z*WJ~N-e`{D+HS=4tkRz2`l$BT>DZ)u-TdbOl)e8xoyZj8|L}BlAO8k9TSYM#^B~Wl zrZ*BUj=y^E^j-r+hG~_qnKThTH?w~3;HCBfF{k#L&PHtJ#x#Ad_J3*MeN;>iSGgXM zRlCJ8Q2gYNp9~RxeRd3ffF~OdPVId7iqz_ zd%Y`HE0?QFow5DdGQT6&8P0CuI*U8sBsj;INbA+|)Z+ak^Tl7q`vr+XqTye0b@{Kj z3jXCL^goQN3|dvyB6jl&xeez+&pOgQgjl+ORrebn!`G0%u(nkC;DSk#N~i*$bgJPy zm7Z%0dQynq5J_{j>`d8+Y!wiHPwKa9y#{e{{}9TmE!u)_PTp0ExcQrt6Y^`;&h?FA zYS#aKOC(NV-#q_x5p^m9bq8e|qe#bk;iAxWqOIm_NQ9 zdYShR%e{$&|6w`T-W&7bJ817cwQ?FYo0~r5t=Wi;{avuc0;An`@8Z7jUk}7EqC(vH z4gSa|{_9YRNlbW69@K7pgRZ$^_fIN#w_+NQHJ_Z!>^IY-+xL7w; zJW%7UXGGkODzfadM=siNhU9B{-JfCc-aLviI~Do#FKXf`8dy#H&*%U2@GtiFYG7~b{{;V@Qu`Fa z|F%{D@ACO@(R@0_j0${d3L?DZF6aI#zVn#z{9`#n_Sfa~{C{=}w}$+J)0 zc^r18>>T8R<(7;5?0d1z9C{_{?2AFn`|{jV3r#WZWf8j|$m_$aZYWlUe z`BykO1K2B@(fuNf$IuP>v8jskLW78`Yc5FpH`SSV4$H_U?9u>p>>)pLvhdoHh|;pk zH8-^)Pyj7pFx*V}h3sF9qbwyF3|(-`{V()cxIOLPGX! zLN!q#QR@2q!u>6NyAsZZzv{v^8xrWLTZUR$Ik%#2MhLyX=0gaRXfmjEfyi?;x5lT0 zxeg3hm&-MonQmLEAlKazY$Ep_nj3J%8m(nn2`FOGuZ9Cms(GN(hs7vMsB8MKWD%E3 zSHGOb7`Q&kQjBb6);B9S?==p+%4p}s|B(PpjhXX9< zK16acL$9b+Tn$3QZ4KQzvJRU*NVxGwJ)m*m3^UV`W4aV}JM=HwruBI3uZh8L5+>qr z+J;79=U@2v|9XD{aw3%7)r#!Q=|vjPLCzu>ec5ToFE$udUklS&gQylqv_3Eqb-DDe z=875@e^j`L!rss@SH)LL)4jfI(;=14kniy3);OemT zHLh^#9>iSx?Zxx7F`|JoR~~Y*6}UWSBlgEPHBYm#e5YXrENt_eah-`zg?P}EMEQI_ z3syJ2CwFM^BEHRN@a$d$Tk71$bUkVjTFg~!X5pEzij-h()kjXyE0UFGQPLsYFAwn9pn$s!gfjRL#aOl$bBKt7J$d z%WzhC>BtQAOS1t@_i472zW0hz^qx^e+P_azl76vAGR`dzP$EM588;gOGEsk?=Q|TB=ihA@3GP>O;7hf z?EHUkrT_O=pPmZ*PAq71rhAPo-1WbD`KFeXGXm%NEw1{qd5O{*$9qMgNQ<3Xz8voO zX|*UXofQ1Jf~Y6P9a^HZS1V~aTtTnO#Tm)AI z1T}KkZ_HUvzqoL@FW8bwZ3d=J-uze3b5-?E+BcW)^~&5o$>m=^{I{1!mpR}*6Di^O zVP26KWAd)3vlE~A-EX~dW5d;Ldc^_L4b))P=H+$qQ;q6yM7L_KUyVF;f$Yun8pv~z zN`oEwyGq_cT#8zGQ>U7|6I#zB_FXjg8&us&nGY@MdEVt8W@>fEZAzSl78H5i5I1Q4 ztRH|EhFoIxTeQP02G=J%Vo4VhG-Co=&bIQ@{7}_`fEQR-?^6djpt&N;Jnl&G@kRM> zO#PJ~(p|Vh711BkuSGj-=Vl7!ORJyLSmf!8&bG$WYm3i*j=o@;lkBxoFVRzY7ip9} zH6_$fXSkQx$e@kf5LWV;MfvdsdR#(<_=-B!PB2}1dpqc_tlK!g#_>;L4T!k@7hQEp zX~*?{Mpxy8D{tAhv74WDXgnAG%$HL}Y|F0MDIh)QhfRRUnUk~Jo3wIsGXk6~YgV>b zA;z40%#nvrpt&3$V!da7gvvxbhy;1RM0v@(h(f7Ab#JjG8`S)wz{|8^%3$GxkULAb zUxLn&OIoSj9>-~D!FSr`4CTdJFMT#_KO6mF8SpxN1=}2R#XKTTw%IC+55FzvR2jDA|5=05&?`Y!%5q=8G3c60FeI5%aAg_9TX#;dD6)S&5e^J7Zhv%P-x zEAcMVMZc$lLaDTZUdIRdzZol1U7bYr>3^l1jK8tWqrM~Rk(oL0^?hGl!GZ?_o3oPu z%a+@5NXL=}?IkKI9a(!688P26)Shhvb31RaIyaW5I~JlR%~ivCC9m{mZq`Vv&P1t` z$4I8}gE9O+sQN#UJvpbTEKkA;EmqRx-e^L?&goX_sC8?r8PU&W%qAnbXHM<0=u_C{ z`b*jw!9DWKbPD{O`@6p)pHS(Bt7_|LedIc-=rhBt5Zfr%l=(AW|5?VdDMh)tH>d96 zuZh^esgB(#Df7bJrbaeye&4?4z1a4RW9@gd+mU390qZ0AtE_CH3_w*nYA7cRWEkE! z9w~ZMs$+4vcvIvYW#hcrtPXPTF3vdRy#E_-LXP;XTA?iA?&CI1c_S*E+^3ITzg|m& zAS?wp_>zk}XjO|^sVDsXKc8^*26KImVg6%So^HuD)>_lRs^1Ez;i1M^vG_Ni2bm`^1(rZRHOvBubXgAR{%EPH>8d}PXs)78>Eu+P- z>r?SlXLXr5YhJ5{{>tL`pmO(Gq;D`oy=ldLE#%To2KZoUwzgVOO?Z za|6n2*8(g7g&k6{{C_FAfR|4(9C}rH(KG4xe)UEo28I6X^s?oDGnBtt1F58?2q#mX zPihP9ep#lJ)A%R{u3x{cNdF=meny)GM(`wk+J_w&p#b!?jr>x&<<9S;kL8xp(?j+~ zM}lGx$60Zu>MFU}P7U=|&0GBdm!6#H7LPO3sKam2LhbksK&d9=YK2}*8V2xuxss6_ zr+)&S&5DQdrRDxVD*vaS*WY@m6nH>qR|n0GZZ2$u z#L1_pP|E`n#!Sai`-dy=F@q7U7@c-x_}owCF{12BypF7PDEY`CLC+v0GAF z)g;-WNP2!Srfd3(G5*#$IaTZe=A040R5dBL%J&Z+e zAL>%#&FMt0wT=Cq*^#!?%vCMPRG%Y7wg$q=G&h=yuZ$-v(>U}Mq{AkXCYXH7J_rU5 zp>Z|);N^W^dNDC-1Vo2Ba0TQCE7zO@;wkh`S4M~YLg}C-vLO>58NXv8+oAHwhzPe zUHL&Y9|%6ZZXS5M|K8(ruilVUl9U=9Q=}{wuSavo9WRWs=#xB8HCJftcd1+W?>B`{ z3!^qVQP-w6KItHv&C+D>wjdYugT7qW{iI=Pqu<3OMER1Q3fVNzIn3biTs55f{OA>1 z$l2z*h4N94UR@lspyF%%1?t9z@DG?L-B$DZibk{gu&CxWOP+Uij=8VtDGQH&+;$LZ ze|(JRkJ1HG67ZFc?C>!Afz-MpCf11TLl>yyVjmT&DjRrHzb_FW(AglE3uzaJUC8JkWW3Nvs3n_)IS^+Vq@9J}muMP+#Pd z+mP2o@24rWf;Xx?XpRqPp>>ViaP4_m?86RCnq1sOkL&{faw=DQ0T!hM>|II6EY#KA zD*Qj^3jY9tzaTXB_U|df`t`-qqQ!T7YX++B89dRlU&44mbb+RatS$Wh>Ox9$3j(Fi z=0*K222`ERLP={=h)xiXlIn4LV$U7cy-3;Fu;J^7xf=_wM7Z;pUc#D~PQv!e&$;*& zX^WLMg$*->gukLP#t&g!c@IzV3pHD~h(4ubb{;vE)M!fAb58P{GCbm02NcobA{r1K zBl}u4>sn5<_f#hY2tqC}k#86g2A*EgcQcL~0NKQp^S^G!yi==q!+3XLy7imOf}q1& z1*IbjFfichO=c6B0+Q+-zJuAjCk{uRJhtgk9EQSeW~20^$xWY|2)C&yD@vBXU-DMT z$$bZdF-OIUELkQ|PIlhE**~Z-6-Js?gqaZySFspad&3^qcJd+Ew66=hI???eaSBF7 zqa2>2gi2T}zjJ=lc7$4^ts@YfFV&ME0K#Eo$?~j_1<*z2TCcltZ*IP zd&a|;e3CY{+fqZ3Qu_ja`U3dIjZi7%NH4)IjYXo zdl##tFglx`lz*Yz=|#q=7%cGn|C=S#s*ewtG*&T$0sAl1hsf4_359%(c02R*+UeA4R+u7c<1PrNZn)2WFY$_Eo8a0M3&3pMw6$BRXB^m0wTR!!1>nWn|- zZ5x?S40fO~xq9FS-dqE-`h|wn&stzLN&bNgJwY8}92yRe1^-|@%pGPps4&CK#(Qvh zbv8`*|My$|&#QoF{-OXi6;>LxauKeYh}SpA=`Cr*={C78mt>=OvCswfT>7y;)q`KI zt=Xt9SfnXdbIxWxYRar<)D|7O37ln^Z%k9Y*Oxf7K$u+ z6buFNS$ubHj-<05YczvbIQ4I@H+AlA>wm{pWN zAE}6>l5~||qbRrL^_N*wwl*#6MQRes2~WOpb)n7G#C!TZX+3E;lcfETf6t1_Z(pwe zkt_MGeyS=U)onrsTp8zI_w$8-G0%RdYzL(v#{RS9t#c)45<8Mz+FWyw@HQk$mBG7}~*c`(FYbCTm<#7|dgKQgpTK$}G zTe=m?d^JqMZ#%-T=JC96##?PqH>%JRt1z&#T4!^6q(P0m#dLz*9e=Hz)V)GkDvwP~ zzN|A$K-`-*T&1Mu>+^NyNfnt0f(0fHG0(`^;nT2%sh>lGd1Fm6 zBz!$X7t8{7=JN$%<2qceu}p7TDxf>0aBwf{{d><9$sfq%WVxOM8CVp3V%4`-l3OFC zD|W+JhlGW=-t<@Vz9ll2itH~7Ezf{4Xg}BF5eE7t!^ote*fZM}jTsNYtdz}eUO&5Z z*RScgbf;In*QUKHMnacK^Ysj8Y0jGgG= za_|&&c$MY8Xm)VFz#(9hdHfe0bZJWdV0bW_GUwVe|MBKfekXuT-Ua06`F~M{t7}9+ z+dFOopgs2yzBmi8@!_eDv%F!^scvPMAn=?~`eS-1(J0_BZrxw|O4~yR(xQt18C~q8 zmw44#pi!@CD8?oSs5>o#l<-Vf&- z(i4-SfkqQ1a5T@DoZ)g@cOEi-i|#&mj_nu+SaIE|YI&VWuLD?pf+3fo$Wldx9(Duw zYfyBs?FKu_Y}P7)$QxCbnR#+^;GGE0op2%wtd{<;i=iwktroX;Gn58Vh*H(#OW!~* z3QTQvTBD1~#;;l5(|ctZ*JD_cy*+yL2j^g27REtOdb`fJyk$-++3d@Nf8%42(c6?1 z(UJzE?mWcFSe_Qj5m(?r=U`l@heJHzlMNZh4U{R`L7djeRR!BJhcAKl!&p7HZZ5>? z`gu~maPmHPepk*vrT%}{5J3T_#a!KB_^Lu4w$t6ToSrlT+6w3K?d+L-u7EHB)0PDf zcvx*qS9n!pxKJvz?_KefFzAjt2^~u>w;@t!w6!5nwlToWri}#AG6$9a40c3+XP8?M zQLFb<#B_S>SW6_iYs;IqtEO~tcBr)5GevKXrKp`GXM7b-T> zK^uOu-8#+ioQ4Lu`{@hgudSOA5~&*wiZNP{b&GH1&IDt{%b{k>92~uz#X8W3>pe) z*3VWm@?F)6QjBn3$v9lGUC^2cNf!%UWCm9|YnR713Kj^Cwtu$D)x(uO&;(b#D(FtB z!sFI?4^5a|0Zzm1Mp6#1Fbx;Tvvk&kC__5weUYOjk7RHzEGaa0dl}Z8A>RoulJ^ce zD0rDnT|4BF>`3h%@1x~{bD{MlcC7P|VBqtbT8#a~ILEND^*zDf+qIsyw>`@dDg#(t ztw({>cW$J2jm78gG(clq-VpfsoBl%FpEMCv{dcm=4l^Uri3&008ODz_1osc#ZP{2% zANeZlkmu8Fq^DpUWy-s9t|VMK?@5j`zX7FZ4J~l_avK3hnb>25Yw%S$KQA*+w9%^D zK_G5UfAf{fcblgpjdJgQTiMVLahn`*p{%tjjhyGav6KK~V9L|3q9es90<$E05q%(z zZ9R5fDErWB$11`$>?bNmOkieXO}FTCOhzIENJJ{RzSoSYRU3x&wG^zDq;6}hQ|0m( zCJfU#m0EZV64d#KRjoYmc0l&PS%?O^9b30S>Ld~Er&LwvHmzC)U6BF$Sj?dcT$g4> zto(dNcs!<0-+TD=+*vmgX_5u@qUEI&v34v5?iX*J4J@?k$~+gm7fFuktt%SVcdS@# zq{lAW^={cF-e{w{QLz_YhE5Zvl@z&U4AVk!!x+WHYbC%wwQ*!ZO`%CCj1OS#a|OjJ zo@5aplk7N9(#bIMNdU2p8Auu?w4F5DBW{gm?=Ong`!9NZH$g6qV<+_uTnIN)n|bjj zDyBu3R$jJ~1Sv^`Q#KHL1hnM(CPwe_g5CNv_z)Y4_*O_MGKT1yXH_>%8m?P#pqE~I zT#Q_oLF|A23_xo8%HvvM%4fKU6-*WJ1fnOzX0B3}9e4t**0RY$RPul-YFNS(^a&Pu%HWU;8&!Lv5u{jDDazb+t>2 z52aHSg(rub*4t4^$rhoG{JURNRPh#3bsG**`8Z~(SV(csN!)+YzjMrF?Vv(tE`ZaDiuE-O(gn1-pc0 zr=)m4KiC@U{zFR~8Hbh4LKLm{NhL`zU|Q;D5O*Ig!nb0|*F zRUxNMZ&tHdd$rou2`OKb;_3Ds76hv7VIW;8enZFa@8=swFSFrHtN=T<2d6um!}hZZ z@g)+~mL=26=ZAcV>Sc#5mFI`6Jy(j(3&GLU6@^We_vc^^)ko8T2T)&*;z}4Cs}dvM zaL(P)=rANX&*8{5d81#1GS#_CXiiX)KS0mDO)k$em>)M^3$>$jzogqZJc=2ypdwXLh9jC9BNTQ)U{O)I{B zKHmaRRBZf9Eu2d9_&-rCnj1T3m}R}MarV-NrZNt{71wBtXj=h^3Nngcx#kBT%!z@ulu6^X_eFDKp?M(yTiTw3i+lb>n*`9IB&Zc`{I`Hr#07-4% z*i6~RIB;bxi)9OeR|iN@T6Ji4PJC}fSvE|ACblsE4zKQon+*X8+HC3OelJpT{_uX6Z&Le%Rn*8jcbL_{+$+VV zdu?~f$YYr>g4QBTOeC_BXR=_?sQwv+?rkhS$pK|NJtc& zEXML9U6UM#0@(pJ>hGi+2F85}+u<2u$8dVL_3A=dI721(1?KR#Agj zBKq^8R5ILvp67srXUD*4@76)5K%*$7$G~~T6yD<Fj zMQ^tJ+hVQYNG1M+$GQoKefY>+l)%L<_RF z=%BfUNyEn-u5%QLlwEdq3%&-u`^2RlZTiPs9pFnji%$a$L$~AR?hA%2W!+=|K(|gk z@%XIrN`<$GX(&{a3nkm!pa%@CyrPxAVHOmVu%TU(!=&J6q`LfpCv}SYz&nNqy^P%6 z_h&4ru0FnOuHUY{Xxei=6X)6U?3wHB!G&KW&?nsZj9vQAdHTbZ6{{l(p7NF@TiUqU zdH50gfgszHI587@dQNF^V%;s{HSakF#H*Ql z=oh_6;n`HBoim7q6(Lv-EqG`jFRX&J?8{-*+WU#~Trj^m-2ODojJ}fFF)P*m6Ks>a z4j^H$7Ovp4qXeDWcsaRUrZm!X(47`1PyT8aqTo-wd~gRuO5N)2Lu;p~$|h6d>9XwhY61Ku;Oo})<_lC#P&i=3yQ=0^J*Q+*QQDuRNpSD)fPm?GYVkConxJFd*R z!fES3knrSqB?JJ~Jf54;EPW=}gZ5rLGA=WHRwXlP2OWM@vrJa93?-V-$@-!9-fL3* z7dx4$(k=yJPyD4E`@RR!FA@oInZr`hDd#G4$9+DbL*+S=$$5PJ;&ebTU2XBEP*-Wi zV5-i*IS*ocfvt&>$EZ#@-jU;O%lN>$HeN-EOwC|v$0S3p6%P3N8+L$S?6CyEe+;bj z5XW6#Ti#RPRoq6AoqkFzgXJVK4IA4^3{Ny7{p*=5jf3nV!1@H^$N+DT#>4{=`3-FAB)nn03hZVI zS+2!qIr{u)S=wC(o^kS(Or`})1`|n(sIBSjC7gZV1xj+G&(|1qoT@kQ8CVa(Dh<%Sw?Gdu`x3DnUPoM8w5Vx;k9+?6SumF8 z^rD&y4~t~aB~G=C%dsznuusE4DJIP35w&wA9Xxdtg>znVg~7E5&76AX%VcoF;S z>i1?ZE=?V7#K!FI3M(E*g@=MH^B;)0e2A^xm3NURyjgs)-uAiLCD*s3(5oqo{DyAd zl`a6Fe?{eycF~VvF0;kz;@6#yhO~eM%W%t2Lba}Uvb>FE`+J%}4a^?2>t~^Gs?)@e7+deTx317YL~Pepw9@ zlc=|BL6Ujn@li(fzI{x7KA}sF?Ead&5>hxQpor_mvN_eXE4DqW85^Rzkwtg9U3l*l zC25gzyxB`^Q!f##(_>lgn>RaHeBhVIbh15(X5N8pG9H9@CY-Aw4YM8N;6Ji$D>N^9 zp7_{oy#jxL3?yO5RtPTFuwDyTK+2p1WF5!Ar-HK# z8JA4!nrgka?GT%>>R2<~7%BX>NV4w_36fBa(G4e8hi~$1pz=DaXR&6Oyw($A3!#-H zpS(md754}VkwmOCjRpd$DPX>Z>ah5(3UE{-D3=;W#y5=9GN+!*DgNl z@3@J*FezQ10vat%hYcNvn^c@+Y}$Y`HH*j{%N|g0T_L;hEQxPD>u} z_Fb2ovD$_5szm`n1!xvV-IiDT&FYdkCSFlyD2*k2s!BszGX4P#_MTceK=5eJKy& zK0uteUekgE)go|cou!j?b&D%>o(#t< z8)YF)iY3kVBVXI`N6QhE4m>WoKYEp^u-4y7G1i#M?r(6!=f`hrrIWo+I?dtJ@?v=* z+%*F{@E7|fHXU32@E+-BI<55T)x0C=8vOXEc!|>UO5dFj=}64cS8j(?^Il_kmfyI0 z(a}o7R%#@jVp$zTYOvN^E-U$HBS$A+zd_-4sYH5BJzZiW%cc8#H74&& zu3kerDNv}dyt#T-gghPUgpC($J-K$(K(icZ3eq;uX34l3HuE0@dOxiH6rZhM?<*}@ zkG$CQc0nDb9>Y2&&63uj0-l7y6epmv%1>Ank7adID& z+*!1tM%(M!HKk}Xl}o9bI{6D$xwTVvT*C?6v1n4by69vJSH|Ap_Y{9!W7#puuB!s# zZ|>N}^hSyf#LMDqaWdi3gskk_1{#;OfiUz8%khTMKI?uzP?(I>hCz&PML` z^2^PNyDIqei@ms!RFZ#>(l8u!lrmcDb1aCkeaHr!4xG+YSdG}zAw$Z>9eL|dt8kDk zY>c=4aZI*s)i4!DAKaV}OSV#XgXMJz*MV zQ%|BdcP!%YP547F+TwjQu_UM)ZmCBh5jkX(X2D1*_ILf2s5H+5RFDr$ zIn#P6+yDDmdGEt%wa zouqEEe@0{mO(|1SU!Sas+9N>$J zPt@u-S6EYKAp)KV#OGnGx*v853_Om_Zc&&_3au(sU|p$=YwNIsH+*-B;I&M6F^9hn zT(PQiO56V<@#@MCxU2hl?C}`9g!88o-z0FSSoaxhYwES`4+m&@UlR^;I3pQIfk_{sr%1PV5NPC-1dX6F45f~k)zRE25OZ~l?f=2rPg z2Rncvh9Gl`bv{^Dd@h5HEku!x|5sh#k}|tevoh7=aac6qyFgtWWU0n*xG>NH@0yHE zlZnvs`|W-~O$oF5a)CxWVhnPw`jeOz6Ms9dLU2zYQa>-EsHWv+s*V^j^<6jZ)9r#F zWW}T4c;em82QD4AHI(~uP(VK#$ex3#+qyxdn$V9ns+o2A17KTveA2cUb}jcD6ytV9 zC*PG>#ShA~*J?RbaA?E=hzKuip*m|9tiJfPx6AwN3-jZDIja>_i@7n2HMtWssE)ky z+bs33m0uMxhSWGnD4u8pYiGY#Eh1B}3YBgI+kj}KRYLb14ER1J?tl=?#+x{LS9CR% zNXGeVsdqnCEy{3$lsc^XDD)*1e|=mYIqWehZkpm`x|KEtZyW%W?Ty3ht<>1FdLpfB zq0*zruGw_=u;f$le%Vl(js(J%z7zIfBHyOf7*VhtG=urYUA2umDc6QbM1>qh(B(r;$P z0J+WQQ@vkH&8FV*57A6ab}$)nW4bpXDDM}mATNnj%7aydfiHig;JAYA z%@FAxU$`6YIph3cTE=dnesS8lB&vLcx@$#%>ZduGyj%~!vQaBWZXI>+l81CcgR=6q zBacI5(&FmhJ@pOR!6jJM3i2J<2<3K;KqZXgqR>nOkm6x$jpD0vl9#OMN78IODclC6 z=P!K|jPst#$;!za-yiHbT+5t6k`h_1XRilZ9RM8tKaY(gl%FcBJ^FD;b3sAtU-F?;4u;^@wLv)k%y@(56Rav zK3)}z8Gh#<_0&8-(=f%Ruq(x}P~0>&<*48Ni*s3FR>N5Bjs9oKIbVm={{YK1Bi9LA zKU-PYamj!-zQFth>rnpjS6tpbXu~_AWee&^0J|%u<&T4ONBw*eY zT9tJI6OwoPsBkxFb6hxkz{UTdyO6Oc&hACdmU@+AX7}Dc-NB7fztsWZ$jIIZ8~pCS zrSg6-eQ)}0|NOn>^oon&7r(!C8&MC=zVqv$0=fADk;hz7Wy03p0ybJ)>R^LusTyU~9!2z)i%j6E`6d%_4x9C1yS!hF+A z1`k+^<(Z&raTSJ3(AAJIGj`95owNp>6qzFcuv(-e9I!Q21>1A} zdz>t#<;cGbEyB-_-@ia|?JVadz@u zi~vMfbLN7$5(B@1Ta{1YI95chbCO83OlK%li?^B7E%`Whw>%V<{#}3MXwoI5H;Y}7 z^Jbt2m)VZz47O~N$2MTl-Ce`}Y3U^87lxA<03+hHjP94Mc-X)471B)1D_fsHn#cQ9 zHK``H3kGJYz{(8|KXR|{b%|{p-4CM0k~o3BTctk>)AzYa?^1z6N+2|*gxtjx%gp>D zUYVv!O|?jwSy6N}Gm1qH-Q;;>#Ka@w{eeeB_{)+9bQne)xlVj@f(pTO?$+G_S9?X6 z+<{kiKRto8VIIO-RmdAUJ0PYUfYgsEMpD6b34{HBgyf}r712bMlWO|Kc_8Y%MD!aIGODbir1xEP+Y_97OmV)p+(xB-? ztir37F@(&~WDlGpxLqlsFK#(rh%T6Q}b$dP?x! zE6gRYYu)pgeJOBR{rv7r!K|xOgYEJ$jaPxHuyEsXQNWo7{dDJ7L=%U&7Q5y)&(oh-fXJB zurndyxBXWg`g;os)Z?c>feyevQ6S4pZmD(CTrN=`)-;<_30=zs8O@@W^^hdOrq`pb>-)vG=e_eOy?2QB?CTV-=e)$%_MO#H)6JS z`R`nx+JE&$X7F=rpaf+%hk-zC41byjNg%iSb176CSO@QXB>5vRVm7N#ZnxbkIUtDQ zBk6Q}dQ1G{AE&7D$_~{cu}7yZJzwhb8<6AtNUs|iic_%;4)pdLt6(fNjFvJx5Kov; zi%a1`)g18n=W-9DCcHx-wGh8ZzkyX~)moTiczgWGe$dfT<4@Gju%lSy&IvjhG$!Kh zCM;EUs`&$30s8!Sy3-j@d1K58GR&+qgqS)k|L%EBNxqmTq-yOa zRq^oFl$FQL+s~`ZN`pp(3pgn5?e*##*eh@D>LfbJ*a&=BuK*u#gIM=Cd>H5iaczK? zPi;+#+YQ@H+{}OMaIm-+Kk_SX(XV9b8DeG*0Uf<~Hf$tGf&9h+RF-C}owyS+=G#fv zZt0jrcG2?^y%B$Ym|%l4wbqIf-t+LBA)8P~N4xK+%V0Kn&oSjyO0~hPw)a{%UTseq zV)LS^?ou)OX>GHucuwSvM3(v&2Kx}TUsadC8|Gp>VB?)WGb?5aMqB8f?WIgc$6=xk zB*n^86Y`;azVt9!p}Z5hxa#3O*>CBDlr}e;ou_Q1ICW}_)wGh~F7deb(NST2q7}sP zSCt<7xbA$6Sv2Xe{s?w5qmbWb%Ds~|hE@*UT@035Fhemcr1)w{f$dckufd#Ltohnn z!puTfYf!0)lJx#Iga@l2ah{JWGX{;7^!c6x-*9E>I?KbQ;TT~>xPcX;@76no__>jp zH)<-!z$4oybV?tu?RS$_M|&UTvW@6$cJ8}^DU9p$NapyXb`b4F!n;OUCRy$vHVx{}haZ-s}a9os~PxX-TV?Q#_ET zi}@A=!fY};;|7kTNRx3@rgVkQuPjxIjNoI@(jWL_jvrS|q3KtJIKchoGg=faQk@z=Vq*J1C0y#5%bn|JEaxFR%rF#qsz-)b*NFAyTsf` zS6S+zd(W$;1fQ5D{hn>my8ozZHIt4L~6F5S*VPUj@IW!$v#<+6Lx=Ydju)$eBXlp1#Rfm#pUlUWJlqPd4QPijmhbtHW>k%ln-lNTsiF6wv zHzM{()UN?J;Pb6!w^fNK)G5G^4=jVVY4#c=W^GVkH0-RFCPQf1+NqkGkLonbTRK&9 zc}LN1ixb{EB}PZ&(qvGn_!XJ$vsFtg(vmy_?+2jLzsaF|l?}H&Go8}D@rrptgq6Kv zf_@1%s-phb(`Lbjjx-A{z&$1?<^T@k$ z1HXWebwjCM5ahTgBM@^Tv?;*r{<0fzG51k>Kxy1??HGt+#>SJw^NO73?3vr%jKXtP zAFaS2<-U1j9h((XJfRgy-Q@@09!C%hgnOME(S_tsj5fBV>sTL_D%fN01OA(NdNchH211}@IZj%^2-;# z^MxLhJrK1Jp#M#q{3Lg@%|2EOq-fCp;$R@GpYj;_(gE`gPH^;t^&4c;KsgCgI2igBqQ8wXOIr6Sza|1J-MQnt=|uT zF9fsU3pCeFEP3U&ZN2N3F#mkN|Dgq+DJ4RJY+a&PfRjv4?!BMypaMSa=(dH{_ zY>oRSnc@-=V2$yV$B6^6kfkR5@jF%X1#B==+;Z;AA7WprEhIq=K5fxCk+3el(pE+H45VH((r;) zXijE7^t?*v;)OZe%rCQB%sz_?)4BhPwYQFndhOnaj|u`(f;0n2NJuNvq131#ArjIs zBHbMW0@5&mNJxzcNOyNLbazNIbPNpxydRFwdA{%OJm+2Sv)1qX7s~}M<(_-*d+%#s z`?{hGgT0d+N`rmtr1!t6coLjOOH3;Y8F62aylQ**&O_*d%9yGlT9tb&`%(TIen4Kd zRJ^zCcw^WQET2d3@KpMWvI~W`=of?Fp62KJEZ%&(l!A<&n#`9r2$|(4G+Eq2iOX@g zh24v&4-VrJvLw^Q(DKfxH6x8JG9(7umM!@{CTbfKwcP5apl>jI+Ado}a;MIslzHo` z#BmcrlK|B1S<%vK9Wc;B4ZNehX`xf9KRlA^eF>8e;a!4K9X?LgUr>Qe7!{a z7V(=8ZY;lHa7~xN$OOPXW(jw{OGg(Es`mwhQ{~9@iYWt~mIg^zOMj<|va3mPpC(u}o`yrm#;pk6xU~QdeAYvx0oVXc$ z@<67}dP00DZn5{MY4Kex&jBGP-MY>lH;9@G7P~9o2cV>0i;T&UxJ=MFI=#!KP(IVo zRe##CEGgB544PRZ}#YI<(^c{u44FfX|7%`L>W?(x)nTp ztblFuRIg@o2Q*oKS`@)9dpVl#WhdWx#fh^nc2m+2{h4^~5^;#)SG4>wov(ThwYRLC z5VI=gL?$?CW{=K}m2Zx=QSH6qt6k!{=e&9P@x_OSEe@N~g&fa4*03$`yv=&I2fQn$ zx#KgiK_MBlACTcRQO9N|6=r^$-RNH>z`!f9ee7T!J}o|toZ47t+)5`GFRU$ANcpUJ*I~Lh z-#W@oF`l?1%UD6jN=#(e(95jfI!SGM?h0PF`A0#ja0z(!%cJh%Wvgzx-F6a){O;%K zub-8QUp>4pNfq&kBg;FK6ZiniD3MCW>da`H2ImFu=ngwRIcLQ~=Nd|MA zsCVLcsSBb5$f#mx@EfL`xk1D}RG6Ffjp1b0LAkD9yY1a05J?Mcx_ z3Hs$|l2ayK@H%I4o$)rPgmF~#LPauq8*_R+=&YUmY}rn)bRXF2QbhG~9TRGA0ZVYN zFzmt34?JD)6)1_$k$LYgXm_ekj4bdPV8Zx zUX6oQ^oRU!>d3vkOkdfQM`vWZ(Kyh0+8VCy2bP*#4MuP>!iAS5_Hqsg33j%6=x$3m z56|sY34UdRH9Gk*7Gi4KozNKm3W-AGiAgBvqACDM+*3s(FvRo)}M=os@miDtEMeaUA28ZJlr=Z z70*=fAc9xMks~j(+rKCCj;eb~#29wRKqMrNw#k_1NSg&`G(Z(=GFdJHq-@C{Y01>& zX_|s#iJN!rZ@*AatCaeRI8pa(SHU~Z%E;u};Ug*(1XEAi=F&WOAC+-mMQWU_r=qu1 zmJ5m&AIEIG^*kSt6-IX)IkYJo=XAX{K6jwId^_l>Z80Dbw#hC2#Kq#ZoOIz3<;haG%14=BF3TaU z%BO>LUbJrV23K;G3$SseC#QVc*9WOSco($!HEV?rk&DI! zZO{_`MRKoGMZ9^D){WRbgoqAkj($dw&QVlhwji8Z)$o^jxc=DBkD>9Iq6~5F4|{M0 zeg%fdpRL&MraH2en90}dR=9lhc6UcVX3$vFNOWG3q3Coj?A=}D_Hv_2IE9fvnhdz2 zy1t}K!6jwajo<39rEVs(U4xz$>}^H`U|Pqmgy^;fJPVkg7)*I^n2<5+3vA+5uvv;& z{Za4UYh5H^y;Qz{k6wz>)^?b}7GOnyuPg6ybBuxI-qG{(Vc>aNa{};p_#*}lH~3)3 z_Rl$tN}Z^$u+lx53w>~Oj7#|W6bxO}?R)Xeo{KAwPBy$3R}9r1wrSo~m{*9sqU!ik z{uTIRMgGe%0brq8L(mxK^(lVrm$)!*#&ayV3O#1Tn2?77pVCN5?mO}yv(T6Pob9ML z_>eOVb71yH^s7ZOe%lVVsX%r?IxwT}F$Zh#oTY!XZ;UpG(3AWDttlInyqxMsU zHqL;gu*AaR(hpqq6V+qTrB^cJrP_F%kDFTx=0f|A&W{tFW3XfRudpf?d+L04P4H?~ zdm9$%cJmLO@HqhAYClOgXMweNFI2RiPucZM)RIzfe4+WqfaUw;?9t>a9h@t1$lYXa z^V8;UiO)#Fw^wMdX^WqmzNi058l5U$_4IfrCdgv@j)0!lb_cyoTU?nHW%6SO=c?fD z_R%Q+6fYSe{y?r-qB%xU8GgF572wFUObAHK#z=5sgA{d|Myre%BFM%24QD{&th zomzi4C*&S)MJZ@nC+_QK=?{*trSek~v@eW2b6&A5q?b-eKWK8f2k9LPi>uDVGr}>A z8_6N}2lLp651~iIUJvKEuYH2rA{)6D9y~ajsD(ZiXU~^3(4U%?}s1 zb}2(Tk$>lp#6)fXBhqNrTxQ*}9mmLdTJ=PqS}q;l(g%vZN*nuEKH;_{8jAErSQj-V z(mc*fm9-CSI{m=k--cNO8X_>y@2XP-Qy?47Z14$1m3RHuiTk&oDK=wp_)DT4qyE7AVAi$N<&XIP*pC* z@G{2m-6+e$N2Ad3jveo1QtrhjXEhAconVPUX`T^FMDV2jOmzig(e(Y$Ib*>mEpemO zVAEggwCR(3_IY^n!q@i_d6=YM%Rq(3xZ{z!QAcb1CVc+KFL7fv{LU0FF;zbDyD)e% z)qAb1ujy7&`pHZyuU<9e%v@L8!883fJ1D{3Ul-HzX|$jXw_?V7eL*DinU1q!qRrV# z9Es=c&7oMUb}5wvp+BrQOsJ$9@AF{b-TK=X{R;YdF)F)gx#sSHg%VPtA(H;rduh}H zefx&&g#NCp%Fy1BB?dZU;)(s%2$6NNKo6k^iHlG~m{4U_K?y@w0Vq*@&e8W=kPHky zE=`41We$tlOJA^On7xyexQFO!ia8$PCA0h*k|!->s+c0?ctu4DKd>abJN2HPl_R3) z-S=&>b1ag%cGw)^J3QJ{pbQi590Y)^VpiUKq`sB6TrDS;i67PkRpwu7?I8 z^?aY+E{<|9UC7%R^rx<#&(xdyv~+jR@(1=VdfTnG{0m$qnduO4YS!^5mUqfwAd65&Szr(QX zP5vuT1-xgcj42MCrxF$8-moIK6*}!R8eizB-?7a1q)BdAXZ8Sz6DALAzC@oF4-Y25 ziB;M6mh&ngZoMwrE^UfDe3j+ZG;s8RtY}T)2qj<43l=?JIL)tNHrygdbLMJCd+Q7t zx~0BO6$WQ-lPv>A;O?CA-_*+*3_gxDl@k7k06m~!O2kj&d|mVehdxM3vp|_b{2}|P z51VCFc{zzWnWs1Yhvb)E+zdv-CfQGclsbm2V_!N zd=$RRVx8Qc=2Py$Bw%X>fUT%7_z|GAO9D3QO@SsV%FxSd=KbE%&Kkc!^ zi-Cf6M94=2)cMeS+KU#4;F_o7S37;$22L+qK40v-_s#&l*sZy&zR={*-lyc!S*h1^ z+6eFh@sQl1>g5;6Z26&TZ*vy>gIPjpZ5kqIMKOp4b@?#&WyGqLl&%j!&e>a`JQs+q zrWX1r=?PEiB#>VO_loM;H+MOvrtpL zUAeX`(`~b!II4jtc|xP+l#JazEO!TnX7hA8Y{YKL#{sS6>~GvTG2EES^sPBm7Cae8 z8hqA(B}1V59P&E+*jSiYHu0=2SSQ*60_rtUau-+F>Pft^4>&8z{7#n_ME1KD*Ov15 zLIoE*Ja*@AagJ~Q7~}My@;V(aZAZj#8eeo#!m-PZwyDxiw#jFn)dWFC-D+*;uIF2x z30HuM1G_=KCEVw?Wc_zvkGJ-#RvV3x%$zK5wM*1?2~#wjZ+l@#JT%`}GS4nroxQNR zPU!Y6>AI3nqZ0rbUoYGaz4z{MO$y42iITCI`$$X551B(&h%&`*l$m-KXJ_PWB!3vWH!qY5_f@`t9Nw}z9Q zNLGwFrj*i_C^c7N2@eYAvfW{c)tVD4E@&5UxOeoYic`{m$5pnm6)%@v(jFp)>J`pQz?bq%>SCzk{Fl(a)HO~@+*8jFA? z`axBo?&;w5;wqAiA-|sX$X5}u45yTT_>C*cgWlWug}BG$GC+P;s@6@o2hWD6KWYr zMUYo#wBQfxHBOiH1F!Zvx?IAs$Y%?;(W|-pw`7l|KQ3G~%!Ico3#0~ZUeIVCB}Co+ z0w-%&*q*kzU}xtm9lLn}y|HgN8LRi3DoX{KjE`mK#Gw(yX;vxlCKt+bNlte zEThlQX_EOE;*^TV?oZshooe%IP)O+PcOEDsp#)4NHu9<%>9i}kaD1_ss1@LBPO~J@xI2t9)&lfSB5j>ttUpX|c zD7mz@`<#vN8ZT>8)g>AAjaKVt#vXc2lhu|uktVaT;zI*0Ha4*_uQcd$+P&Dj%NMtQ1V5hy5?v*RM4w`7dW#*e zxSar(b3kUWWNobn4(-&tsn4}!7(t3nX){fy%5ys%azpDl>gI1SKU!(~U8v=@blKG5 zM?16`VZmC8I&nB_xi*wEs_|6>mY4R+w3G&#H-FIU=AJlV5`~(}OZMA>7b;Vk4Qx(I zJ31eZL_?Mq`}fA!tqm7eS&20$;?ro|7g~oE+JD`7(&Bl9xMQCYPh$02A4DrA|qJw51~VE(hTfTxPx`TnR8EEy-O@aUzcEuuz=gzpN>{o&7Y$)>>iQ;vSUNp2eVF zZ!o2Fq2aCRVAd7FHHXp%Y!b1@EU7_|AB=#0}1BW<-Ub|DVh zmcl7u2RYs3q={2O!Zp&wmQ)Hn@~2I5eI2GUX(ykOAxUF7WeyS{y`eWM;E)yPS^Z@D zdfol>B@LIC8R*b-bUt<9sbcAhERk%AvdGnAB@u1vDjWLHwjY?EgNGF&?~uO&WWdh{ zWAY?e{%|EwvsEohCX@D22eA>*2ni-eyo(RGETJX~fw=uDX`0UjWir+|CPY5TS1oU(s9(fqWipkX<{mGgsyRahq|pS7_SqpIjqW@W zI9<;1d9dtJgi2RaQ47v)O@*M<%rIg`r+oUbeF zdp*}PL8jD)lkuSo8QT7IbYl`IW_7J~TB&!Nv@e#ENq;)5urR|S&F%Q{;xWlraW@PxRAFeD~y$>Cetv6 zfV-U(PF>bEzYOS$$sNl`+gP(4fGNbwfPD5*t7I6~)$#op4CmZH#HS^0L>m}+cQd=s z3$tSG=wA7r&XfBm8sWHJ;lr|@J4~l%82PQ8!zU~}3W_X1*V7X7fx4*4Pvq9gp@ahF z7I}YyJNSUemS_yHdp5f5!QCfT&HBg>{>C=b5w0?-8ohI1fn3tWkeZ){JvTHISWf%M zz{!glWDA4o>4kO08;-dU!Di#qvGAUL*8p&eDuB2H-s>S}==g#_= z^sAR$FLwK8BdF9jX;t0_Z?9lZjKxrCMlnsbixrm}hs(dS(4G7Gj>@tI7xC&<(!hA+ z-q4I@MHPZSKPTJrG`Y@K6elPtA|b|SdFpX4CpV!O@wnJ(BvY;CiB9bllsw7h5u0&d9Qlk<0iSiAtk(Rhs&0_#o~Y}p^-FGPadv6xtxmmkM8#WGEni~t zjPJ$OM1YBlJKxfEHTY?{OnD80FL|AI_$2@|CW#v3XU{HCmdq}_uBq|;8oXhb%T{1D zdmV!gRDSblELQb<+O5Qoa`JWs0m(a0S!P#W+ZEu_va61$LF8mGgUuS6t0n{I$c#jV zjaI*Fk%RBrxBjryx~BwsGiF5=ESTo74ol2WQqs~4?9~ccNJa%>II~nboL~=71wg~x zLk;pSymI#U!xbgnK9W5d5~lCGRBW$dY@#~3)=+-COiTWrtkr~H=V_OqGkRuJ%&FSm z>>e@bMR9dkT>vS$fxBthiRSC(H2BQt2X_S?=woHOD(Z$HjQwDTR1cc05OuqG;6(Si zp01r$T8Rx>9UYBNoR7kGZ;!n-Id@EjFKMgAkQjE46}UBofnUp#Re!8Rqzcy(&)jm+ z33KmvcAjOo3lGUXEV5){JGz9mL`z6a&0@{G>NKuI{$weNfj;=n+8T7=Fjt(0=i)a1)TGlbd! zwmlqjZ=0>uSdY_jn;6q7)_&p@FUDis@#c4Fi`_A9Q|7l&gBtV0io$cT2OxHq?U7jS zOKfIHcZ~480~Nua@WvP#h*E!%11eqjOs67pK&`&in06(D-Z40XS8Ga%j|D}I$X2c| zg%BjOY*;&EFoFP`AR7=cE_mlWbe%nSO>|I?zJ2Y9UYNbBk6`o>VqL5;fIsE3aZc~T z=jxDdv?bq<>35;wu0!40I6ecg49BnT1N260KeeG?U^4q7GmD`T;PXfl#qfYV$~ z&0xcxa4GsdH3OV)1nWzjZ=IqbE(?w5ZAv#VHnW*hr3IC)>$yc9#ZT;fQV~cYXzUcn) zriM;-g|5K(V+IOHn&IBU9AX`@vx)7f>{zplldxLvXPoRw+FcRwD?7?gvC*hO_?8ey ziqjq4tIb{)uR8G@%Kkdnk2?Wy-F*n&POGxeM=?9bpFL(StW;%U;b{D;&DIxNKR!;D z#Ce=dn_M|Bcn4kb-e8ElH|5$-;->nxnz0zG8wC1!fRuj4{U%}1J+(anLho5%iNi$j z5ljeoJh{Yr?ZbRAlK1Q?+z0;Lxztgk?jIYBIS!0k5uZFK_NBZ|M}sjIk0AS&khVl* zoVvY?hhaBv)8ba)sGrfX5SZ?)%IZU|__phc_Hk$@XoQ_iO9BR0JnJk-!M99@$VG}> zcxq3npwac5NYa+@UU4X2zuK9O!2Mp^#zgH0kh8N%>x#@mCoF7{Y}Pi2@|IiyuNK#r zKTNUC#79hF=Oz)$Qeu9PU{s+h+TxNr16v=sdLBi9scp?Dn&|vW)`k8Ar$vRVQRKdWX zZ7nLh@^LE$bf8WSxzem7adrf<%_?5=zzgWWqbh=Q8BC2j3$}7;&qccMkuA@)gs9-I zW=D;REQ+#Usr0d;&NNqN2J}Pjgl+SlViA#V!@u;NX_PyV1~>S8C7olVu5!JMj7|Kp-`@#q~0mz2*2vZ-@0eYq{j!btuC`M&(6(K+$6% z+&cmIFHZ84i1f5*k zTXi`kv>)*dxwZ5w(;TF{bpm50o3XM`&nR*MKI=XF=YV{)EXKv%EqN`UKVLN(khg=g zamD4ZW9r@*=g;a|Y&t7KG4aAlz(kWP6c}yP5P7>e(23GQr(CMPn~Z{TA1|9qeXkPn z*>3l7mRqyJ()kQ9s)$>;65Y71yi7Z-Iw3Fc|Bj^nnbEw)gImT z?G~K|MC&2^#Y?wDt2pEBXR%Y{>_-NZ`7PS~lsDgb^AO6o0d8sgUlYm`RXq1yOc3>3 zlNmIK!xh15f{fr+L(#sA8=nXn>flAz46_rhm0>p$JxkWNB3Dlu^Y4>o`cyq6?GXoV z(CP%z=S=Yh(EydX!EHbO(1i;nuz~#f*%>MLOh`?yYz^+?iAMauM+&aW4oYAl5{*4~ zUg8{eDe4_p4f^LTX3_$nU5?!o3Fz0k0%hT;V%nrz%tRdHVpKzc`UHU*fUNrtpna>+ zv_-7~e!wuX^JsEgd?uc_No}Y8gFBDiU4rWsd_jZn?m3)Sc+PWs+_}pl)j@xL0=+j{ z_>4Z!?!dDCg+L0E+?K`IRI2F?w!CwD4ufIh`-6g3S1co}9NoPhy1fa!i=wyGSC~B` z{|H(N{0Um7%Qg9`+Nrr1MSGC$>rarw{e^9VMI-8-uxR)hQ*g?} z5Igfyg;t!6u^-@(YiOE#%JD^-Wt)$**Y&tc@JL5sAV^*&LMS7thnKuxO~n6Tig(LC zH8WbwelR?53xmmAUvxu=yP5Q8CUa?ZysgO0dG@9J#@8sf<8|Z(y9Cm-;7CakKsj~K z(v7?4-W)rI`zID>HSS=q76#%B`au|d+FExeN@OUAEczE`vn^h|e4YQoQB~|MFlp-M z5+~M4nu{O54z2msVXcbs^vO-OWC60J0K-Iu{q=PApI7vhnO= zSep!%#WF4YvavhO(`-IQQzKsw4UmE zjKfO)QzM_crzBlLA4mH9ZE4hmFgE^(cEN2@Ej7_J&~}2NE@5zp?=APpFAF_>U2^dCh_P z?j$>7kElZqtj_4&NMjhE6YUTkhy% zGcj0SLwGqtjK~ds)uC6VX51Gu%bO={Ey^CoWXtcm(ImYgIV}{4Dwm}O zfKSHPsAJ7LmLtZTTO}*)r=>@J2PAU{JwhZJU7S(h+sxpkhNgHdi)okZx*it}qV_f{`c}&gdg%CCwvALJeqg$YO+qT^50Jco-&V{c0RLK}1{SAv|x} zkJ{qIR-8nSt7c`CBY+tm#qC}IY`)1G;o+wLoNxc0gy$22J~@L6RjvHetr+$E(6lHc z*5y1UK{9UtRyGu1qJcsv&=5)ZcjyK)5)g$^s=KYK>)H1_qCrN73yk8JFHFpHTTt2oM*jf!XVM)Siw(gJvJ{p20vPXqvQ?JqSS*dWv4dVA9j*%X1Uc$ZX5?Vkn{k`Cv zMA2odBc`52q8{}W@WjE&OO4tjv;hRhL$OyQ0*QX-fDVGmD5DPq&8bV6+Xpw=a$OUS!Pe$g<-EM1=9aM-2sK7w||Yry!mh3E&*Z`k>JyROo;z6 zLGvaEdwvSjH?EP%wWZ$0mc7E0(Wd#5*4npq5Cd;ALX?Al;7Ps$hmuN6V;&E zS5lyXa?E}SI-Y*?`WKgRe~@kIb52R&FjFq-@|h1UF-{D^I6!s4fO_=eHPlqel1n<=7>;Sy=utG#shw?=*=I`@q{#8iz@AEnSo&L%QB@Te+=I_z>4--ajSkUu0Y^RtU&%Ei= zJ=XpA9d-1!L6GArnUiPS#nBcWwhQgNTEXXsMC0Jr%(a-~LluuUL(hf+4-^t`=a@3J zpM5UaA9h9>aD14dV2c(_%plyJJb@H*%kv@BBqj7r6mR@F2z$%-xp61nFD$ZoHa&*9 zk-ijJIcPG}b1R=Z3~%Bk?>(LIxJ?Ez&qbGJ=<2`iujd~R+v1zD(-jf|i@?etSqIL- zbi*%iEIJ?(1Q!6X6`C?Jf+$om!1aZUs3bi{l;yLsA($X``P~oYv!*X{THL=IrydtE_df!-b7YTsn_K7ST0vY z!R?34 zb3GOpZRF`-Y+WtlNDAK{^(bYq)@Vz;g%FF#Y6iZ2;n9I|MqU-#s@igqe1N~deJr%4 zd7_xdo3%~_QbXv!=wu$AyR`v48M{>0SXANB zjaSG1vXq2GL;K$y&eyH9 zW+EBni&hdB?J|^1y1i&`ts<56&Q!w8drTLjxBs8Y;r|RfVFmyI2K+YEsC4gC@rv*Ifyiy0GmZ6X$$KL=C1LW>(;bm1 z_(I%?8OaG~6S-sph_YfN{>5Pmw+!H+q-#q8KknkbBC^y7Ks_a|5())t9j_MvSns+D zLdc+zVn$G{Z|yYn6;VOZad5xOVLFV#BlF+@E6VaRm0@}VIc;8~O|q25(;&EE0v?q7 zz%J2eI>_*v*Z+_CTBl$_Ne9oi?{#RLLKIsAT5t@cb#F;dkXvgs9X(>M-~>{6C!n<& zn{>z-_TCo`KQ11XxQA4k;cp~rqJ7E`C&eHO=+lQ`lQD|4cKy#0dH+5lg1w%$|MG}9 zZqM4=&7{%;LZh4y=PXyO7|H!>Y0DSeDyv|%&f5}i=Hb{C_>ANV+*!Sy9Gf{ z8-N$9S1*>j{LQ=P)3sDuC9Gr_8k*R7r4;2PUi3qz^ob|inAJO>kDiw%~Xki-l6v&!{%3XV4XE5b^N0GThq?jo%5Th%{M`u-vA9855N z0GDZzObT|dier%4m3_G@0r2iL$Y89bI3DscZiJT$Ix!w6d~DP`*3X?x z;8<*g*G^8DA>_XAS;}lo+u2`lrbMHOdteT$Dq~(*1zD2nT`7=GoF5OGr@Tp!xi!7D zCS*cyQFXtJZ!mF={QIDjHV3)P0!ZfhX-G8Osod`6?sRd1YkLTwsa~4Wp~i_^Pt`6} z#@k>mPS-Wp?+&|`jyGnfJ|dl~7zAncJq<^xAjFR-tu_H9&Yrb30&ol>YBDs*&|v%P z*L+U>uXK%__>KB+?8d)-=Ko|qJ`a$6D35XBt=0OvVjrfzynVXNx^IvuJYX+RAMQu( z%2_-P(jqPrWZ??6kojXN&M7g2^{!T5q_vc?{IL+r{w3*jc!p>fw?zB>*Z|=bb-cc( z1eSb&O<9Ukf#$?`?dpVGvVG{%MG+lf_+XX2{exk8XL3G8Mw(m}mki;$vY;W&JRXMq z;(M~w?Qc<`uS~5X<3suiJS+e?V_Ob?IwTt^BUzGqN`?Ejn!U&?epCjhA7qqF?4!l( zLZ}nT=uZ)^L0JvfpQwwX;Ut}WpcyjQ`rQmU9S5oY&ov?aeNFN@zSaGg*W?36vvi^T zER|YS9!D)1>c(c_H3X%T$&%qGS$E0_3PC>t#`XwtKh7$i(!utkRiJ|ghf^jbQf;h* zBO3%o7`$v1gwT#1$@at>fX#x|Xx0=37|qys@hostih8s;h8OKvY4C9HEZtgt6U$uv zkN#Ihm4aOV@>xi&BLm^55q{btiDgUO7CMIDSZoM_A7-iGjkdeC$2K@6qBAp0Sc;;> zw1O7RU};?24t>1&*!rH9J*nEw0lX6#bOK>I0vf(sA~i*`M4_4gYxm{5A6QDQMkcaG zawh~^V{z6-o<7#^V6i$=QDVyO0hVl@3Z`3m=?T;Xc($H0IN0`xy9#vm$1rf=U$O?L zSARgbnK0@SY_pD-rsCf`CI?#~b1gBDDS%kJ#h#Bc?-80Bh?T5!7}+h&j7Y+1rFg8p zkCqeyFMy6fU~+EvwgrV@iEsx6QtYJxxLZR3#R!heTwfNW=g2UuS)q3Fq9mLF&-@8;pUduC^rug55q$fFdb1Tw%`SETdcy_vt5Mojb?bBSvui`W{3ra%9$#zrBK0X^#%FSh%#S) z+z6Y5aG^K=Ggt%QK9k{%3wWSDZ?RM^-d`h-?=-(VukClvT#%sI>CaJ5pIv@b6kjO zL!b62dRYZ;S9=e@g@duRK*M@x&wl2OEmk*)LNilOp>yy9;87A3iC2Hqvw(DNd70P6 z?Nv^)K53`I(Z}mq9A77!mMVo>A3R7g) zb-?|-!xS;dnP-=xNN<(ZG9Bz-MCEI2xu@ugaSr-01>dor6-%qnRz++ChyBIDrYP@uBe8GcA(26VDoighThKVm3h(Q6ZHIVR_4LPhfNns( zL7)dHYTb-1XxGNQAn60_X-7&3`jks)=hV z9fG$}YEu@RE)+&7byQ*mnzDhw|H$G39x4O4zREi~OSDU(3dfWgvXHAyB}cS01;)FQ z>ZZzgv{jOBk~E}}Q8`#72u>02we;XyP6ZxwN#cKFCkCqjQ$oM^T|yJOtwR2K;Q#&2 ze+)tzQt!P~`hL5k0$Z)B>6iJ$vHpqF_guLc8shUtZ>|h++PCZ1qFf-pqU$CRiQ(sBw4F=nJ&F_tp`8pj?%i>g6AU^Et(?vh9z zp3zkT;n-m7>aRacyb(ak0Goe+9|UuYCO+=y7mQD(*`@^Np#)Xa2#%*YwAb?Qx0&Yi z+-d@>z(2qx|5QM_(g?{=_{2*mb43+Un$m#rRwOargc_!L$MUxZ(i8vl()5lwI$+6a zJl-TV?r=2DkyYZTSh-H~&e2vtpgtBb;<0@Ez3vs>!|#8>lHN%MkNzD!+c!R>KzGXW zY4ziO8Ct}D(iYXxR29+HVcO)xF(Y4Ent9JSmkWT-&=0yHI3}t!=MO=BczHWDdEbK} z&M^B3`b~X?s?9n3r6*wh;d-vZr{qP{Y@ch74QTNEB^V=Cv>-&>Azn!(0Cx~;+=oI3Umqnt^sQ`Xj0DkWL6 z?s=L5U^7)}pr>ElUwPHHoQVDkhO8WnFZB2x6{aUsLs(g$fEeBSG+`>RaKmGxTATLjmPiiRZ!Tm7u50T6QKA z83TId7OI5E&i)i7mO6`(xBZEW>zTX#HS7AiWxQNLmc=RDn;&vSJ!iWV-K_u*Dy}q3 zgdV0vfO)GQpdXR-ZeKg1z_{pfq7&-C{Cikqny!7Q)Qy0|QFRhElI?aBWcy`%WO6+T zaW48sK_XX5#IL?IqhKSV4hTYFpv>~zQYo0y5ujjifcICZdrq-STx6$~Y@Q^!%o~JT zKc0~PU%pP->S(hH(wZ<2@_RuFivtnnQuMJh+7uhDh?L}n$|w2M*p7?)fd#1=LnTKC zJa+~3`UOeKO4UId?*mZwxzCgeM1lV>#UTqF*i~B~@D+7?EWBXct@C1`7B%2+yADp# ztxC(_Myj%CweOEF_*;@U1eUuCxD*O{OXrbok}EW72+ACwh8G1h>OC+639B6d?u0Gy zH!gykVm=k6nzjWs9sj&z&jV!sMIU)4 zPW5EYvX+rT=5jZU?Hd|CbK!5Xk8$#HO2dLY`!{7`YPI7rLyR z+7C{j=;|IjSph23;9g!!5;@+?*sw8akrkli2d8ic>61*QS9A8$;=d9!1piqu7L_RG z692nk%==w1TFUfo{daSa?~IJV;3#Q(40zZ8s7&22k=$xId#z8ODk@fr+KMF1RF2wC zcUg+M&wfc%>z>wBBny+oMn_W6u>psznMux!1*H@(X+Yj$wH1#dwVmTTIz+wLQD_D_ z+Z)n`+O*$z$OW)qgn?1%f4`RJ{ps!h&03y@0Aec&o4;|EXiK?<@qZHs0$2{}RWe^I z!)i%`U#c*?ikxm1f>Wf6BP)Y|)t8KWg8a*fceeANK@=z}RunL&uD8Lq2=$Lb2BnK7OuuxMY-?JNiYGLmZr*$pL2x^JMLJr+k!bKsSh zNGfSOgk(MUPBHw}QjwaR@W+5p<^hhP6$QAa2lp>6fL5a%4YTy9I+P0ccWA`7?wci; zth?3+A;O%@1cv|BuE31lQHBWorNDxBa&yu#LkM!7^9EqKECWBzw7OoeGQt zM$frHB9$ulGwd#zYb!q~KIH`nLH{{(IDHJj4m{#ic45=6XJwm7{J^9 zd!cuPmy_eNT2_ls2jPq359bEtP5Sz|p$S@df4v{{p#=Mx5rG~st)wJFA`>fLdhb*d z?Fse^dFNMJ;C%hG8kb<#p|Jl9Q5(uKF!4GgDP5!3o;fmUyC6WCcO~Oje@a|#q4?S#*Hfs0CnQJx0wA8)ENLkosd{; zvhZat=wOZ(=i|pSRGZz(rA0ib;cu&INfSa?Vs1w-oZOylJTCvCPfe5X8tR&oz-}$P zQ2&$prx8Prxq8}9CdNT%PF_xyr0Xl9;CmrToz_dtK&~wW6LnA@vuKN0=$8nMbJq~4 zb8Ad&&A`60Q3fp5LOnw-p9%{=$|+77Jn_Z(88n_wwB|pqLz;*_D+XsaHa`+{?Teom zM;B=osWM}HsU~P|S+Xbk;XVfWg<3x?7!^G+LzU4-Op>x}Cs8KGnP<{tJ|Nf$@@)E6 z`?v?~az{<3PBH&|M0h{{28ppRi~B1n|D}Do1BMINodXry&IEMPk-&?$wv7g20|CY& zVx80pA$28E!J`LiO9z?5@uaZQqplyT_2F(WGzV#1wxnmAU$2ptT25IcUUjsqxj^0D z5Zn1fnhSUE|41Wj^jtc}YKW6H75~`xo>Y{O`9mRT$j?5o!Gv%T0((n<2}?+duyMZ9 z$mJkxoX1ON2^tq!LnwQKOB5w{V7%0gCQdt~^{vD5pIa&CXfh7rm(364BO%^-*1fvcvo0w}2HY8`GCoLrtCw?8s9)hI?mz&w?Th3U2A#wp=-{iYxoU z+GU8qh^VV=(d@FZHKp3T2Tmb z-RY(&CoNOWbI_-Dk%^wU1?`D^E4kHWOTd|Fq|5OyRF#I%0f^!tfk6g#l{?c>|9#G zt3rr)O08$C5{Rx{098PG)Gf*(csJ93lfu2dFItXDK2F)CVy6yd(s+?((&UF}SKerW}4CA9kMK0`WG$yRqb2tQFa@Og!;pS19txHiHyQs zjW+VYu{SScaJQk>rlLR7S&%i1!DTy3>rKdbgn=>8S zHcW1KLExl|^jzXC=Jo;?Lb9fdv7g5B*Hgtt#QWCY!AfzLwcD$jWRiS?!_T1=_)MlZ zsylunp&1xHIN{u`iN_`zU;hKWI?&A%FCk{8VD@t{W_(9_dfliO^XY7|WFx>hxo0Y& zNX8{$!^gab7a^j4-oIY5uZGKnF~?p#m%6KaIzC`UVvGleyu8rgqijbp0~jh1(=miL zNK5V?oll>fgM8<%P#T{zb>vljzlG}t7$cuuGtV3p>dnU@RxqEDLQ#q{$BT>K=dvZf zMeT)Li__F;8fp7wo#=(B$NGg`cwwpQczgvjn1j;tv$5HYy#k$oC2e#-YC{eGjZgop zLfm?fQH@-lZ#mJu@b0eevTUPG2mtQh6kRr3M^}N#46hAUPI2U`FaljbphY=e}xSvB5UNmfUV(Dm9qc zVGYWWJsW}vx%|p%06;&RR@jaHz(b$(pFe-p*6tS^)LSuaZkp}Q-l0}-*v(AF+==x) z7~e>*W$Y$f^@oxR=s39S8ET?t98Zw}TADn3WxxBf#tM9(RYMRHafq9<9@CCJMWq)H ziko5*anxOlQw*}8O$ufE!mtLV3tPGF@EE#yIV=hc(!A249P3H&!#6sAUC#(fcnXlr zbiAJfm3`<->+g(sbdEwWoQ9rhPjDf|mcW%2x>j#3AC##Ro)vN(<}AR8;CFtP^mTwz z=Sy~>+a^`(7*T8fb5sINOQ60U;;OgZF(9lZZC+l9cjx@WUEM4TcN*Iyx5fU8u;$8n z4wXl`aUwL%)~3nwBgbp2gIpL+cZfK+as;eux@MyTcjp|VU3TbH_AAI9q3MIE*Knt@{DU>^kYxjuT4##$~a!q7*crSn`LZhsgF-;{0N7*5uv zn!NbT-DbFn*gs&C=+7VUFCQvO2UsFNa@}V0^qh-12wp&Zgp0=mI4ZDWvnr@BZtIOk zXEWNEY|@dAsWq6mw;Rw0XVf23m8>w}+$U$O+mt2C6grpnWun_)1F3us$U7I;@K!zz zM?LUZRmW3cXK|e2D^M%%>Zc$%R~7^so0a**Lnc>KozP9h_psHkdc1-k_4q|)S^?dQ za#NM18h*jL&hgKmxIhSDqEM#75UzTR&9S_u2jLQ^XDOq6+pYASr<1RI;}!T)UC)M( zTs9ues?<^X7QCe-+RC|K?D}W-QeSqnQt}fpnQSTQzb}@ZPCGhk`*H{h(RzW=O;Jea ze{#=LVwYfg3^KW~Dj~I*6RiC1N6u(a2W2@os#r2;BS%hYzFx$FYYLWKjp5K`<9v^r z=MTySVY8Xp|A(-*jBEOT-@iXdN;*Os1Vp4ux|DD#0xA+pj1(kC_mCV&iFAudcXy1M zNQ~}Lqq_%ez%@VL-~YP)zwe#v#_sR2_ul90bspz&JkRd+hUV}iva-Jwebh(|u z-iOcoZwCyHyb5DGKH}Z%OZ5Hj7Bv^=tly{N-U+>xW4ek2lkRDndv_dc+MBCR;VxIe^Tcx~5lMT=schXsey=>_>L_Ls+A?;r@9xul+Ya zwp4^o`TK4~st7kx!pXss5(aPdGou6)fzFsG*lR5<^9)C({R3KnKq2w-D1=IfDcK4| zS7E-y{9F48TP-u))x`!%X8NHHrdFvZOOQ^icbWp;0Ar2K*YxDq@=8}kBoW@DN$$J-nSQfQuR+l{JK&-h0=-Ku z?cx5og^bycqn(S~+jSI6fkzXeoV6%n{9RJh0KR0hcd%VtNW(hXPbm48mKLwH^8TYY z)?Ey3RBp7rzi@kcopAo1Go6SV-c5Lh7W0tPK-5ov%4it`c0QJRJ0YtLXWykT=y|Jv z>)~|QEFd`j0+i!gW2u1KV#cYD8oX!IYgAtud8opFq+9>jAQvd1dNd$_&$eH z=7Ft^BK~p?KHiqYF*jp^TzLLBebx*B0VYP~|CuiD^5LdrYzC?orVLZUglYz)6>k0a zY4tq1!u+72Y#QUFocf;@2*~$RsGq*CbEjMfmMQxZ+8lk}RPYt>=Cvm8Pb+ASZCtYtx>5I7B-9>LxT<9OnMLjk2C4EOD$04K0=H@oB|8{llarqj@n%)aT z&UbO6vF|~l-?xjF9vt$^2X19>23lr>G*ik_z}6Ou&`x7%9_F7>Nj|o(tn)QkM!!?P z)i#PEx#kdJV+?n4xUPi-oJHfqIk-jdes-$eS16K{Zdk0mF3ZqxjY-#1j|6^~yDBd% zR#DTS;4=uyFfiZfR;|ynt!T|Fo4_=dPSmRsL_}yk%`0x6UtTEk?h4%o$)8HL19hsvT{n6RRn0;gN8*L0<{rOj9Rj?6|z!riBD%Ef=4}XYm z(=Hkd+dqB(@!g#wgK#4=Wlk~bmB8DLtQC-SjGL8>)hWc<}{wbMxgO7h6{^kG!Km1)H%6{N@L3aq%DpVL1bl$%=qaV$SV3nyJdj1xsn*{>*4vLL$}Wkvl=;( zoEm{GwFAS@6)J>*)lf!1+{)ns6hm^~vPH!X6)SVfknS@yvdJpzs}j<+rVCYH^?CPR zni4hdF%*Bn_x`=w!bMu8Si*nFy~DBuEkKnrS2k`3RJ{{h%Mlq574~!nh8J1y>ghOi(U5H{$0{QWD>xkAz0ylh zmHG$1=BlOy+|C}K&^3c4MtOdk;PajDhzyg~V8GS;L>k#4{RSIJ2jm+-ig~_c*2smq zKbsAH4`Bp&>$vmB;-;1|&+FX@df=*s>3eUcCOKz~9Hb!#y62#DdpSmUk#6-5(@PfT zrgNA~qaWC0%GH%3VUOgcWwLe!rM7M<3|m)G#nj^fxu-#ZS>{{ngyD=+l=ai8~ zNS1fu_v@}i+;`zI0V534=j!Rt_f~|S5EpL0eg83-YO1``+?Fh70W;>bplA*TA69C| zF!n3L7p0`o9N)i~Ki`K|HwE9DuYf3)8Sg0o2i9J0jZ@@roWVzCj7FqdvUY5XD{8D(0ZuE8;u=V0ZQ+8H-<4LV}=fR?^bs>-w#{tZW}>zX^c zto1e0+1m`=!y=Z_D=drp_he+KH)kK|9TXoOw;+zlwQ^s{qPzCYuQ;^Lr}DTP<+=$D z$5%pd<{^BFdQ`YRw>xvBKRE?b!u2xLm-f@f@-Lyju=4WG$b=Jcf8u+r`{|q4FEqgA zv829L&Ug-k!pf*yh=(#i2L*IveL0?Oh9NeU;i|o?yyt4A)YE71m3(dC!#_NfK+3Ez zmrK}+8MuM_mQnOc=SiMbg`A*sM|l^v@%K|VPcGt7Vb3 z*JsJO^~M4zItyvMO@8?(k>9j7Wa-)WG9L(Z(TGRn_^yD*8;McCAR`ThQKs_~^@F8N z^gHk$|H$q}j1>nQ@TVb5N?`HJEe3t3rM7JCdY+9_|J{^8It2TGMX8PX%7e0fLr!@d z>$UH2R4xFAGN-nMwd4Bw7;}H{1Bl4ur+8$GsR3zu&mER&cZ2ItYx82>sL=jUlYh8M zK1OG?z6o$?mtx_G>U%1yP6eI~gJ&58)9XF)a`~aB{n9y0PDz#>NWLAoEeKjkA!h4s zVfEe8+}}8#@z0E$kCdey@FJp86lI;8yJGc&TIBX}Kc|5;NKwCyq}or3l+uGLk{fUa zX7}SYT>KFqhH~^>Rx*31<4W0O)kd>ePbo6(yQR6H~*Cmr5) zRolJ z2rRhc&9<1SR${4iiRfi~nRou%Drf)ffiJMaB^_b&*Aqv}x_QJbhmr4Gp7O6_(MI44 zY+2+d0^8)DlCTDc_*$#CvLh()nP*4;6BX)9tfY&86h)k@>{Q^ALIoT8f^LzpC|OXl zUM=SQW0IXj{>OrR;XPUv7Z(0@@DdLEht-_${u>kc{|^i8%lG6(b+{s5*lj03Z*b9= zrdXMF9F0Do0Rox)J(m8pRMeigt@O%{G43)*`&U_RyIDaw)~pvifO9;#s#XC1PZR?c ztxUjW*BnQFj(nLS?PS))MeV-kFw5mZ5TXA36GCw_HX%AVRm^TtH@H*K0GYw^v60$? z2g=s!&C!1?R##<>KWX=Pez{yHs6fcd{Wf58qLl1A@^k6Rpl$2{8`a2)L<*SqZsE-4 zggA3XobB5xHyTNMAxcF{gAZGJ$vxTH^^naeF4ly!L@s~ZF)}BTitVWV{lNQtb!OM8 zXA9-u4M^EzYS{3qKwj?CP(>)<`tmd|}&v(xVA0DnSpV1c@f+J4hHl48o1~Na6 zvb@Q|^m5&sVuruIP#D^drIAUtg$yzutzz1vn+#r46Hzp=Bt+C6aj z$L->*Moqtj%QpX&#z91%4@H+Xs~Qkq$lq0c@(IOmz~t|!;JeDvP-V4QaTQ@X23CWh z$ZotEF-w`xIGBdcDO{Y^JA0LyzV5^aE$&G$L4RElKIid3ZJ#x)qC)h?t@+rvu3~yD z(9@+$L$*=t%0W#<%JZTdWGy3L=KN13vw1eE1pLTQ!VED{u~Vnv$8YR=o?~xLE|cj7 zi=BboP)ha~es4K5bFP?BSYl~Ecw&Bn1hhl-=n;8ZF!NRLxyuLGopc#Tl`#|zn(=re z=(&0M68Q_dyn*zuQ29LNPgC;q^6n3aB(xpB{c5}8D3BaACv}M#iFKw#k`V*8#`nhVNeTwIU>on#_f3JdLD46#z7NfgRlNb z844=F+iiN)t6+B2*RkioHgmf)clMiOWt3J5QCOVFQA?ln=K^CyLbCUwgr}QV*DRBr z$FMCApybnys{q)8i*0AfkY3CGp1+s7G1#nKjWan%jqQ4;*h&9Ta-A*C6V1+gS>t4+ zqIJm%@qD_8bn4-+UkZp}@>e{0f0cY-1U)!F&d4~xn{R#a7kFo>l&+EJk;PVlZN0Wg zB_zgpbvxlFTns?|ySFmQI9$a$xG3ZH^ep+<%SCCO@yl5G4R>JfSPeubvt{|<;^$HS zGxfTEkw^d6%*>kZFB%4&A(~Y+Bu=v0cJYfpn%C}HkxJF`5LUb;`(o|?jTE-}pBWt` zYY}T#;ZQLS$7dMXd+%_O!ev%oDYsNB`E$mglOi1Y?`+#O*?Dv!CP&fMG)qvb_x&Eu zlCZ(s7Sql)ba`p1<(C$swp(%``aY6$RsUpElpSLzzkxHl!nD;}aVebXkzQf}?-Fd) zTZqzq)TP&x#L|zmU{tbT$Yo8n%zC=BC^Q)7XPN&Bt8}+^aruLz&hUbUw%$vHn_T}V zH39fJeGeB+exWMDS>OEIgf)@meo{a-G$ZnWMHcT`{Omi~b<9M9eFqky)FJ2S8zy1t z`!dvW>E#9T5=zt_orT^lO&&WVNcX&G+oZe6LCuQJ)h4f|xp zfwx~m%}m}86?NubtgiW^&OYp<8Op!xV+_jCR3xMUo;~Y2EAWoD{}{Y=(DtQX(Ez!s z_dV)Fl64KT@d~?QeUs?}U~64>a+O`G#LBm<}1>MFA6H_n}mC}zil9ep^5G9za z!SIjV0{)g4gHjV{lgv2*6PaFH(?^)dN?h?lWhpJ-X?ehu$?>Kr#iH%@tI9$PR#K$V zhoX5TcE!u8wfj8~0*bLxY@w-cv2FV-qtv;IuNgManwRHHk=Vcv7=L*7)Oc#1gtzDu z#-(Aui&uYfz=Qv1gScwN!2IG$IqIBjFH+$ZK`~4`Lhpx9JBRc`L2Tap%KILxa8yZl zE8u5c{L234EEw_)_rtqJ;64au>4GF1j_mt{akneb>Rl4b0JJs6%jsx`DQRRyq2-09 zhX62Y@O(19(}#;_Gl9IkJZjrN{BKs-UiNt)9(tgAHGO|&`Y2(`g-?)O1xybWY)Nh^ z_53|PNIjg;$xYTXjAlani$2K_7wd8yncyxyJV791gg;IrC;$diwy)k40kfOqrsh{( zjmy28#xv4po#201tcU2DEKuq!^<_JdBg0jeKtDx^tldzT zR>t_{ZQf%@=1%s*fTs_BVK?TH)wsFUQ_|!m^fg3E{A5t? z(-3kVnc?FuWQ?0kD(##ti!IFL2sX*d7XxiR30WWO{?hx}+otd`Id*eWIHxG5ehw+{ zj}PfWnj&46%ZKVO)H=m<3%1#;Fis-}{~zx?1P|*!Xmv@E<(dAv1q3EAtqf99_{s%_ z^n^R9R@5##eF1Y$m(=!G{CdY_sH07gk#PZ@`BY;+&jKfE{1BI@*-4XjnhBz$ciRqS zF8bUUajX4OzgqZCEuZf5>SLHu&U`XlFg4WF;7JNe`eYt`8CQ6(X@;7KdMBq;groyc zjm#W%rNU3@rm3P`dt1Z^LSK;(Un*2nf9Ni2a2^h0yDib%TrY9g=!Dg?fNeTVMC9av z6|f6We-KOq`*c&o5V0cxQ=0pXX=J@H@no6J7$b!f)+eML9yv0|3wma9{Xvb&d82yQ zVJExpxw8$Dc%pJ#Z<-x+o|LD!W%@%LIWtq@+%gdj=c@A^g#XmXnM``QPsI+{Sf@2H zSJOW-G1&UEIa5i>M=ZQHri8)Af3yzCJW(TvDEZpVz8zhi6BK~EAw9Hv6`^|4oA5?0 zDLa18bES{*0_m}=@Bkpt1Xy4nm#uKo%kwGOP-%mE-)9hp#$}P*mrqD3EDS>?NB(+8 zH(X^(xY;glKS*jQY9~>*CcifGgsvG&LuELwShN29aAVHXbl|I<HRE~;r7~_ zd~K1VJ^0~Cs&88*Z9GYx$-_{dtWaBT*~9{_Du3)aRDa(%)C&jGTx3Kqhtk}M%ujFj zP(wvFvp;n_pl)VWYJWmYgR1_tGr`HiX!C_jC03xp=l+71^FuT7;vb9l_)hPP^83N7 z1w78*bG}Le1muL|@>-!AZ6BB1W`ANrl6~3D*y>f3P`Fd15b9>ud zXbXE;Fy<-2mMH(2sd;5A(aqlg7x1>H1xgAeXvx;eP|g;OGmKNl2!eX7`~%dUk+O8i zI8#S<1yr0;8QSMl&QuB=QDs6PcM>{&Qk;1MD)xwlvR?qV1VQ8YgMUe zbtXXMAuFkvK5n0Hf=aVGTlWOg*6Y^JtF>lSG77#U9MwxynjzKvkJkJsqWM`B7w_GK zV%v$hh>uPnt0H@VxxRuRB_{_nTnf#Sa_?Zcjh>irLy0@E7%cZdeYz zDJZAweiOsTIIW1*ZaL~3_f@#_V>tyMoCYMA3#04j`>9r30*xaGGtmJfPox5rNHkqs zkQ?hoxmK2x@r={581oiU-_V1p?xzWp^h24cB9^m;Qz9as1F3An#_WWK(opV>2wVUgb(F4CZu>qsT z9`sFOewrJ@9U#M15*x)^XA6zRe($ThES0Q9<}>H^aQBKZT^H=^s?8xzEb+(m0Qt z+4#46qI|3GI$mkWPuAmmd*}P`7^jHQD6QT&`h2;dJ3Meu0B57iW24L0H98C$?F{Z~ z68M0z2e_?4bZw3xsSE!q2CLW8k!=pZ7Cad1(fyLtP|PG@vg2A&eaB(+8NS>^uH5J} z_L3om_99DJ^@FR!D4PnC?%DlyG56l3?GLuj-*s7z4#+6n<5R3Y`1vS&=y}nY5#LIbr0Q_Ojp+9~MaH%k6>tZFr$am z4A{>RDJ{-F0B52FJNi8AyK#f8$N)H@P~b^>YH%}zV)w!OvNO?(T}hzOr_ENm!yD%6 z!>yu{llfeKD{_Te?LZr#{?1B<2j1kjo)nP~@pth-GZ1PEu^u9DScL!sgT*q8zw^87)hhWHiGrSY&0^ z6*(P#mWN5O}-3vEhZ+P&OQY$@hD(jj$t&@o5?XBy)e?RYno83Vmz|*GN&hc6M2qRiH zaOUlhEItlS9Xdi*6-N^x2PjeAC_WnQVQrcDB*Yp8S4>UZ@hG*iAL^moK=;12q^aD5 z#)x`f5jozNihLORuN<(nHGz#9(0t{hQco7@w*P`s*2WZ?>#r8+b_>w&=vzS-3?@)J zLpBkF9Dp8L^&_LC`uT@S{(TI8*!8XZnIinjBeUgC^9A+JlH=^xtO_BsW17%Y0p3W2 zVr`-MobZj}BqIn%vS1ml*37sn)N@GO6|M-TDtQpV5EPVS{ewwBT{Ajpm5)Gu+j@ik zHdy-E>|NK(5h(O3UR=Ii{B8hT|CByiAOYl}=MWWs%_O|TM65ph_&#Q}Sl0fr9e?I= zv4zrJe3p9&#!tebH|u|GeuLz~o{bLM#13l^%@runf$ijvASVU;m*wi9xhhPU$%48wTJ|-|iQuP_ zu&#wFiQ!)-pQSPJ?g1cpo?~}?SE$)L`P&R+%!mOf(C5}q*<{&IOW=|3wM3rKT-f+; z8|(3-*H~0!bU`P7PZ^`9%OO;MkpF$Id&7C#tqSu(!|(ZUO9yoMqLncGe7vdvx7RmX zX-A+YY8^2weouUz5sOAsltIAX)d4)I6_RW>zpQvy24W(2GP6Wi_DtGH~ zyD3T%UQE-6&pO23M!IM|$3Li~E!4l5p}DZWI)7ThmvMA}xe2*%$efooC$YP+RNU)& zn%6()V4pzV1f0ldA)TW4Bz|DEEBBK0YKCy%a+z=OQP2CMOM~P@e{n#zT)Su8qluLV zuVP*h@U4^>AE16Np+?N~6he6t1ShW23F=bh=BURb9(~oUeNFt9ejdF~Pc|8?MrL^%Eq%8JhDg zBzl73h|t=srv&x=<53Pth0{w7q-q5GbWuFfjxpw~^G1B0?bEye0ac(r3vB9NuQiAa5v;OvP zB{@rDfRw5K7>q0tLF8D9i-HqFb5~GH2%Q zNv4%O1C)LTk^*j@2r-6xx{tD86WvnrKbfjlNZ0R7xwRR!^Nl+MmCt^QT<%u*THWqL zn}420`dIyVvHc54VjH90q9{G{97_<$;WL9YA}(*`d+bZ;8#Cp_dRwo`Pc47<9qIT$qK2V^0gtgJTCVIC03O3Z5-@`<~hOK#SDR= zf@pt%@)RY53vvVxWvTA8UTo{4fFRZ);1BVac1G;k2ToxbPrzHy8Fulx^?75@v(qKr z7Y0)+P0!R-rm)ul*sG}$=mxtD^qlQsO0uX8CtLbAi6rG^y5|IG=y61YkNIRR+@3L% zICCp{tfgK7&4$JvcnYsC-4Jum55=W8+)3UAg;x9xLl{J6_wlAcg2<@jC*I?*=i=NK6dc{a{f6!zHia z{j6@v&xt2ct)}f>(CrKtn1U0CyW|-4 z6b!8BXC>J|!h{n)CY$ypJSZav>p;2Ne;r1owfP3uZ*lodu5FZ(HcGmk=Chk$Q1zV6 zJ#K$>C7O6#P3{}(O2>1$_RJ@NDaKzQl52zkM?xtX3&pb5ei%*kqm2rRDXa6Ca)*$bTliZwj^Oj;8HKTIEso%mC~wjA-JJj=S(aM-JL#Wdq2aA^>G4XC z{Uq;b^-v3KRFEHS;`qyQSp?;kDZv$y3}&akx*f~oo~}2;kSMai>0fWFIwAK zAza>07hrWsI zg+#jZ21>dV@Alfmt^-;(3DR#gw1a5AM5q&3UM(XY8gF<(kACGhrr}$z|x2aqq?14M?L7 z4S#4!^)-N0Fpwe%;|0(v<{}y|kv=7R?&!-!%oYH+Zoxbbu=weY( z6g5(%qY%HrqroFLInZ%Dn7z0}94~W|sOH)~I(kzx=)BOf7obgZ#DFllD&HtWYNg&xUv*(VD5euX2R>~-}^ptHh~^cBDTNlCNM;z=!-$=zdc9nX97crJnMa2&|i4aFK6~DJkJB88Z$T2N6_Vcngr@k zZ;xE6LB-b(CF<#iejJ^MN-$LA&H33k%=rz*8QD4wMovtp3mOp&*(}o6Pm#9-*n#C- zuKU}?_1>$rES55EkManzQE3_nH$DsFn{;ocsVzhaW?Jlq!4j&c8nOZjdiH!z29E4U zVh8=48eERw3Fv?dN`mK*WlmPH-LY&j#E*nJTi$?ve9s_Bj4XyD4%^~>mwe1k-K3?{ z|2fmxpV5z1Wcv`{9Pf|g5`Crxbf7M?S53yQvb zdE-%aFic-Xj$`r2UV8Yh^3*04N757%mCInhi}IR!NZzq}tQlT{B~-1@=^wf6Vc0ze zz&=G@bpcY&SDz6?bWfl&f^C@rOGwX+@Nfpkw%qSKGJSiG&co`{rj32EyPjBK$=%>! z08Fv*mdE$r5)BbK(qWlLf@+r}bd@!^!A`Gi<8lf2&Vmuz3QqU+o@QXN`@)`|9Hu4O zOT9U;7d*^PW`Q8y5TZE1w$W*wkwIEy0o|x*FHkNi6hu$@hq{O_47MNs7Zx)&F`*7;>0|}ZRy&y0+QONZ5k;fLhIOzV( zo&4XC(GHGh4_**74-hUcQQnMldZIfF%1C|nsSeF9xTE|8bo7)QRS$_8P7Uc+VD8|M z$M5s0=s!=xWv@Hc^N+E#pvvS$ke=dY^`Iy1?A9UeJ{87GqW7#$F#R!B&4?`p3d@Su?u88o~;5wjT!7*MrH9J zIDS}h>HqM{=2# z=COd+V$T|mM@vtfLBA59gotf#4uE6W%=o=xk@2Cvp}$#{ zIkv9H=3u`sZuHrC`l@AzXoYbgWM2J(L>5-xi0vxXsyhxw}#Dvr2}v3LfUm z?5}fsw()a&>MK5XU#ul8)acWs@EAD4m~aQ*U4Ezi7PlEC5EK9-x)o*D4#c7u)Kb#X9UXT3%7fU#Ubk`ZK2 z7TK#skn<_ur^PPUIrlW0NyPb}Ajdc(us-opkBu}uDT^eLF$Q`gPCOPkb4Se`XV=xY zs=ke23V9fq{Z0>yONX?e2cp{Bg4zEVW}>4_9KPx_-IAfNb84k#1ZfsJ_|44?Tk(dN z!E#N!#Up@3AsYewcEN3B_)a(u+;9VsWN@*9+5BVlRRC z4!z%BqCLiE)?vc>0$V8hEk>2=Q`8-Rz1!isScumt-U7S&rDeV-Z+kB%sMjp()P_H+ zLE3H%$nXD0#phg06C%TS_YNyIFYZqst9Dt2x#mKTY;vl1!G`Ig8Z=@hoouow) zS(2Z|FBHmWQ(z>#G~#77;uTA@fj*>jHJ0pDq?pxmd4Wr1Kp3Rej91Ce>rK46mp+m1 z!)p8?&*SVYrS{p=G3;N`U+cGoEWer@T==U9M?%qHZm04motVaLk@LhRULy-!bRR(} z@Q~6%TdEc6Ld~S`CQvgXRg@wt3fs_ek)X<{U)Psd81@l3rREy7U0~e$sA#Gngb41c zJjR5l_{mtc!cH#4l8j;N_gi6UXW9hyqdxp{Q!k9I=tYrvE7{y5V3Rj2wv6&IFykxn z!7UUWF;%0}zLc}5x4!+Z?y|7qN>!Ngeq;+fJ7PLY^7;VID0rPj-`KmHB&F1G2mK^o zfK$I{j&6^woU&MAkCqaOU!b2EXC81tDUv zMdPz*fsNavik}9b|FRD{Kv6h-`&Lm^1pQ3BNkUdCg7Rs*IFZYJ$3w;8b$NQrx3$Zn z*6yweOVE|~c1EI9wsjjO1RJgrQ5@i3Tubhv+vA6?)AifsKI)Y+UJ+_d)`-W}xJhTG z+^|X>rQycSocd3jv)T=iT&(#w$r-$3BoVY0(x}$Q{~V&+X>a;V@qW++7DKO ztPzs~a1~o>l^91-o8G1SoZ?V{v?63c{?-FcYoB2b}uWOO3jt zA~r*+Em^daDN!VKtWr@~&|1?+YBTazziyWjwJ(iMmMqaFRHCO5A;bsZ;Y98@lDgY1 znV)-P?aLVxrnf-LgSS|ps$5}=67Cru zcXaim??UXtX9o9kmzldXdt}Ny_SKt9SFJGgQ~4v(g2g>v1_UwET;3|!?!#r;J=nZs zVYBgd^4wa#Ju+E@aZ%7Z+C@wHj|wL|hoi7`f%vxZfIR?6=ZGalw4IB)Pi{ed9F)em zyezwYWAYanv&^q~i%y~#z)obs`vEr(BYo})W9v99bmzlO28X=vO`Vg9NaMP!ppAC^ zXaji2Qq9-@eK!IGf58zjcjjvvF0`nV92i_IO zL+#5>E8qK`zuYJ?7P$5Xde7RB|9NS!W&-Jb3rQU3jp^<3r1k$x!BoEr@9wSZE!6+h zqj<)jq;%iy52`5h0!INo;@2D&xFy7=)qO(Jv+_?a>S?YOo5p(@6N3lCT1r`uzFF{9 zWN~9?lXyau4ca^jl9gh%|CAp+CORwOS5zl;8A-fk%#w^0HqEk|K~&-b^CP&$Xj&*! z`SX7%nA|uDrq{m|Ov~mXxoug_=@)+~nC)%j|K5rC`KTEX&tGx}CKMw9`57)mvh^h~ zuPo0F(oW8BO^;pQ2Gw#<;j#e@0angPhFs5eIqJK0JZxu7vRNcgmaouPl?x{V>Frt|87q?xlQF z{3F|RyZ4^}u=Alyb|MHhq@UYFuMwlc;Q4YXDZ)juk(sM5JrFo=E^+xDI^M{>5*t%3 z9KzR>@b7IFJ3+E}jm2%TPk5fYDO>PcD^c?uwWJBuaV+7>q@VN|4a~iycbB_S{(H%5 z?(xsFOlL(&RK6XE*FEPGWcR8idN9Mw!fq!2hXqig|8Mh(5!?7JF=*SwJT_tveq9=E z%|u6sHA|0{IdSYNt_(2x%xQzOt$4_BUo;A_EefzEW&EO{Trcyw;Be4rn6#~zU00JI zE-BMntg*Sr_Oa@rUh{lBw-rzXom{bCZvD7|V-YUSw{7d#+_TE}%>Bv`5@wt7cg1->#6%@X)x9x4w_r88? zI@ck;^1*vN_S+nej8D1)HUm_0gLqv_ivva%en?%5{2zD_PW?cxY@_`b)=(f;ZmN;> zYu-Rd@|~kxDtNTX4N#>?yT(#NaT%ZeINnuYzJ@IV+pREr6>h@21MaFx(9g1p?DW9J zc-mt^1)#+TN`NUza+7w)A!pwP2mcKYRppVN?>?QqttRnmI=D&E?O`}%SBv6Vthh#cr~@(jaG_60JX z(AS%Ti+L7hFnX=F=;_A4%9p(a@}##2F(kgEsTrUM>*F2}C0 zkA$M$K%&$5p#v%glYh~&Ohq_QCk`zuKdn1-h(pVo8m{U1_T~tizX_&tyTKY;L2j+T zU7nrH*;b{~qCT74z}^DozCPkKxUAHQTYtD!9#lsgfFkCQZ#Nq@z9G=Rj0ZtvWw!I# zQR>se22tv`EJxPvbe@Qmd6flZ=4F;%n&J(%CaKi;@$N>d8W)fNGmcww5pKrWmGyN@=olN%KI4!Yh|R=(ff?K zejuwKuz}w^AwSTZjvPv&>bcx=3D`F3m(=r#)i#qMrjoC+9KFl#Osq9s?|2Z#u?&7s(vGb}{$l81VgslD3 zDK|CLU8Nzjn8PQv`&Ad{()9ryWwG;az-X=g16zRe#CDETTxbDHUrdqas0W9`nwi}T zf#Hn3r{ox060H5bf-stBKf+#kP3 zC$m5BQ2xMu|EfppA3hycs0peLyLe7RaC z?(o?K<;R#O~TqT7)_F;U7Zv zV{iTAC1t9R#a{(eQhbmAnv@84yME)gnxuj(OEAaa&T;+!z?c&jU7Y<_^A#_ThuVF& zgtIeIcLfYBoxWn7XoGHK|KgZu-!f>qC7!;8M8R;)kMT(?yPxNU({bd<2@wBxj8=o- zv*jgPb(-vqFD5UKv{Yp^g0CSyv(C+w-Kc+-I69Ij+p8n5ceXuF_G0_- z=@>)2is*D6RfsI_7$K5ySI*%{$AKHX8ICc;& zlxv)D1`6IfKUm0MIal{QaQjHfGcQlR@x7> z^!f@kmCKi1hnaYIz`HkB$(Ux79?nspxm)WY%{fWqb*~c3ajcD?0tnbI06jNzwi-jr zH`pk=;9C?%AkyA;cXr4N84CRU9V(%bPq>*EbRi?YUrzt?`%-Oo9Z!(8Bd4T;=AWKN zQ?7YW{ti@r{Qg%|e@1{`^hEZ);0}QU*3?lxQP40tqpkdXE+0!&;$CX@cl2E;nmIj< zuIxhXE9 zlH6d0uVEzt&?fipqi151iBTs`gU9ySGWAYg#)roZwlhN#7wt2m)Az7>pu$(?k^7?$ zgI^iPgpxA`>%3B%>|Ao#0~;PP-#A9xc2plVX(qZ6)MZ9@+}9_4fox?&2pWclH#f$E zt#d_GMdFJ>iGAFA!(lq%`p}IGN<;?=sh;iC742F0xwhly%XQ5bd0b>?AmrKmQcXE> zN27j&fw0Af`w_NMo#EZQe*A107reZ+J1XMn z00C+}x4o$1z=yk~N9y36?;0;gi$(*8*tV7ARV!WqFEGP^n>+7Q{gN50Nf5n{On{JH zpX6{8jCcFzb|)D;hi zJNms^f?iNwc6%IV0!VNg_)Px;G&eil43X{iJt3A{b8emZ99b}WCqK(W^5fKN;BJkh z=sKcy0dX+l|Hd*%Tx4lIu9eW*?uri4E_UDREpN`hy3Gm|9x@}1kgGb(qzrkwOAOAa zA55CsyY7o1(al>UWB}W1Il_NuR6pXV^JA}ByLxj>-Xh^jI|(&P;$+GQA$FAQV>bV^ z8{@e?xTtJEXJN@7LYYL_*~5C7lSD4SBEgU~NYN5Ur^Knx8(%&{V5B8W&*M?JfuvoQ zuhWDumqXe)PiKcx4Swjh?tPZ7bUS3{_|oL`}WBzTXc7xd2g zZ3L*dlWIX{=?|rs!1AJqOZ8e5^icma_mD;jb1hnE&T>^zCh1nvpO~wpWF9&vMuduh z#-+7-Dy7DWQ>|GUnZL0c47r?u&!@)q_9@QtwP7>p1zqmRA%@aMT(4|=X3h8vRtyeu@&@D}2gtYF1u>3d$dq8feyV3dS+BlB~+0Wh1) zFdz0Nl3L`nxNcEu7uaFqCk!G{;WKt6WK|l@{|I*&bs7Cd}RSZmYAs@SAx!%)%OS@B78ISZkKbIcFZf^E?jE zPvWW8G!lndfp0bJ4%&tA1&iM=SystY2nPk`K`M4h-S?lWz0KN{Qh7I3HFe{K zl+zky#}ltF)ug1AeH}+hhcZrgR;%4=68O@S1tD547VShUXZH8m99EAHtQUH4cDZMh zce~IzyaYkj8u!N1Nzz?UB|H!#O1+Qn5UV@ra>yZD4)}YGnHlHrVmBx5j;QCmOKhYK z4gF|*(q798P1oOdd%za-b(7&swWA=G8^+rT? zHz@8XtoNsrKII1O9aco*4^>O4kB;(xyxF{VGI|eJ=$)#1lz}_Ts)56O_;Dc4yqFF) z=b;D-FXzh46l9l+eKBT-KUia_KFZLFwW07l`fzKM_+s8Ux*_ptLj6$g!z~7BQxaob z+~SWKkDRL5S6{`yI6YD}4=i+XXcjoHG|yC$VCVfz5LN?UrB$zkJ!ZAHo-4s0an4GA zspfc6M6o(our5<+tsUsaHW#&g9nBjuJVZ2{FC2dShUa-C4$cy6roOJPuK?zYsac#UecZ@C*ut*U*W_JbX`co6-Rxw(WSlsB zjmG6&S%dAHc2PkdY1Dd=Iu6M+J@vb9p6TDj#|;VFSepW7hOxD_i9BX_s%GSe8Fl&S z2x=|M+px&DT=@oc59uhTiU~Vv$qy+o_W~=;Pq}7sNhx1eYoe6*q+c^}M zt>KLOZ&S0zhV<{ESdHO%pBFQz&KI|_)=WI~nW?hQyP8EwhWRBWmk*_D)141mlB%6~ zO?zkjtIB1{tqe%}7*SDU)|_<61RfaJ^w+HIL(tk$S#(|8L9;C|)b2eNmzBe*FHf{} z87TEb9nk^}S7-Esuc3TA5|5`(u9;kJ;vIYALipe#@4_!eU!({>Io!@yr0!6~Zxwo~ zljKLLVDt5Rp$?X`*^h`)TVH^V!55@|hhpXP5%`A)l-KcQJ+C*>hGXgiU2&R~Dp-n0 zTv+Pln}$c~CukM~oCa=*6d}neCP{_O7S7AMTbh%4e~|0w*`EB-B4LywL0f_hTD-!)9|BA<93XEE)AAA%>9 z&2TiopDkL*oX-8UWaSa&wabM~?s^`YW4S5?%&<$OFp)k>)zwu~1#w%z87`W9L@(+| zA387@oR0`@2A>T{c?QdoJ~}PWC@up3&?-&wOki@f=9F>)!@kQm_`N`9N|3l{BGPE0 z$C{yjetG-^dCP(>Vrt+^%q(qg!vVs2TL~N%W&>`GpH~;wS;GP!V|n)yk>Ot33Cf1% z3XwFbx(bA`)b-Wr7M*pBO#1Xp>Vu7%qp022RIS0aR^}4yEvgmOK4El%DkPV17$t@EoF4jW8gzBzggq~UlA z(A}asC(aDl7Pp0w`V)HTE*CxT`#6>1oQ8gvF=E2L6|~O5SvBK5!j~JkH-XjWXJb)} zFDk@~w#=*E+*OIyycy;aB-8c*irF&B?XhqqyD7kTU3725y}V3TFYpe-4L1bK?oikO zz_)dJa`!RX<3q&rb>=C%dHB%JXKe{AtMcDS_42yFe;ANy6_VBHoj+r>lqS(*H1)hd z6Zw`hx1ZBcx!ix-MvvRm;PH50etz#;jQX#^j!y`HKI`~!n)A3f{nvh!y&v2I1tAwC zR&+XN&>|^2PN%A8Y|XnXB{%HZLbl`kJ7}LP`b06|yiTf)tu^NGGP1sPChKI0+kEW( z#8*sQ*YU`HBm27Wn%McMV#&pLt1@t%w=P0rF{g%iu_!z{wW8sk|CL8O1Hg7{mMZ5++MOVK0Wad>Lbt<&7S)asYGE~lPf>Z~!717}t}zxHpjt~;%5tvRg?PuvwyyxnUymmaLm z0kfn$(Inv{cP?@qh+s4TeKcsTeLXXh#v~YeQ z*X_!5R@9bbEnly*v{-^&Laph+`|N5`tCbsyn5epYkX}8^4)reaS7`>{^s5>x;)KoP z!uQt{Tehk3SK(Sk@FAB>PdPFTu-B*W@Mx{*L)nAccrU_Y-Ipk8xul0FqVYzO$taS8 z%2|wiThqkZ8jH^r_DU@P6tz}mR6&|nAnobZ&WAiBqg!2`hY&$iv85nG){kGit7`O6 zb(L9$bw(e_;ajqPto5I-WW6BoZ$#JZq^>I^-G80p&sOTSi_Xiqw2J^jhvOITIZe;F?8E8*%?w@nbh#Q9LtVEQdV^c6@#nu{Fttme`_ zoFY^r9giuSs&OgIRxn~9oxZf0QcP1gv*hGy6jK@i2P1xT zza$-tZ573uvZ@QF(y5>!p}W>JBLnwLR3S_T2}zAsdh2Wl-<*xgwj9eDqz;1$#O`@0 z1jD*)RT3gTjXYEW?LOeMnIvEzMgL=pp=kSP2XVG@-0@^`v;?SxP@z$d} zd*fM2jIdk~JP#s=E3nzENWOhr!jauh??L42IDMovqb_VPW$(D)g#488cl(dsj7jrn z`%f*nc-8Si!s@m%tEjaKYref|_2C{899%M2EbNvH+~f?>3OKxw`EnxQ53a|<`TDif z+UZ_$)pvsp!b5i+L=c;FShEj?;4B+aeyZyL`bXJ26XmeG=3FLrcy2s^OO>Vf%R0lu z?GxN>RmbI9Hk3sTZD$o?a@7cJuJwYC70tKk)%sc1tc0$o`6>rOu9dB4dTj4b>+20x zvpyJn`XCkB(mVDrT#DTLXo$rY;i>_TF|n+AL(6k>`$V6ljB&ylkB~871%kH5s#a@q zu$>e6rK)q6FOoP&yYLF`({qLD_4S*N#lC1T8^HsDoo*f>((`#RZC)*tj_DC2Vg+%l z`y{~gU4HtD?6QxCm-Wga7yDYFSScR&Lr#XMJLrLJ!=EqDY2v?^WI{D1DNDD8ax^Mg z^E6l?Du~YvT{4n(FNNUaur-(244h`c3j^WU^fQmw9jYFhjahsilzOEf z=qd9`KWN_+tL4KK*a17xV3NF9X_H9T?pSoF!HxKQ>LW&j`?`GZWG}Rh|2r_EhiZSf zBiEfN;J8vRT>NH*Qn5el&t~!l-m~j&cZbl)dctZxM4~ZT6#A;!%1C<))1%h-;k;~q zz=yeTBLp9#R;io7Ua;fm!0xaE3g;8X-NsMd-LdZjppLRL2Q&UZF6??(E9pM$J;4X$ zKe??xjil$l+ofFN?2}mtH_Pg61-(#Fk9{??u`J9xXXfx}YkqF#(8_qR$Tls=uva~g z%#Fv|-)d{@<#H+FC2mA$x$u{ISC;v(slbDU@10WbsuK#?OFicb$ZJ%9*Axc1m(P%< z{NizdVzx~CwFz0=a#@-f; z1r)Cs^~ZsRWKLuLryp-zRcKL>ALDT_!2sgyKhx1sO#dfK0B2~3d=51C%E7pF!cP^>#2fSWl+F0$=jxY@h ztn-S{IV-RB>-}3Fq4_xRiU!$D2z9y*Mf>Zrdxpy)tc<@o0{vzK%mVYts^dmCiJi%5mWR zGdh?_Yr>c&k248D(M;sBV;}L`c=JT?`TdRMUF*1@>ZcU#gy?7IMjW-3KmN7Z{acKE z7Q1tKC<2k%^&wLCGtRw`l$L7EOg8$0G6P-0u}x_m3V2hF1EbD z@2Uk}$MMdXcxQrXM5kHXH-Pk-Z;Wi6`DA)ZgMkn`cwqs zNC>xgMne3*JCsgbXkBdwlT#=HO6^Qnw=TVk_10B;z5MKrcEykY{m@y8oX8oRo#+b| z9o?}^zF%A2-e^ug0b~#jVEWs+ge1YHnKvQ_SP4PpbF~rLwB5qskh|bL5T}uFMXj{; z7&T|loP$h{rr!X_^MU==J78<@`E#W_wI-2h$OAj{fOkmp>(QarPg6Pqzv`5-e*Qk& zmqfZJb@xWSjtmjKXH)lr@NshYhkDBN(fi5>Kk4XW2T!}Zn2gS1t0%@6OJ&c8 zd!-C9Z@2sCnD+-`y)IxO(Q2D)YTZYI!4=TZxK#PB_bs&?(dUg$lU+ zV=8j>X|41)g?cUHnRQst3&y^_x*UghJ#o^)(k&r&_VRWRo7pc3$*278qOz~z86f`3 z;mDE6!59n--qP@z4xy;e@p~f6d-f^H=he@-TW>a=;&tp6Z%{~U3YI=*tm?=)H2L5r zB>+5x!Pe^CBcoERa<36O^&Su6p^v+(`EoZcWSnd(cIM)3=t_L4dHmW5b9O#LEb7{X zvr0N)!qmlC?!6W)#xWHW!bg@^QDsdGM-Ef>1$KI3JCq~e;lR$>;K>yOORS=hn<~Sa z!JT!T*YOyzpUQcZ1M0H^qddWNGFlGztz9F8$=>uF+OK-{~A)j)gSfZP9OKCkw1*7hY-REvVNEtiMdM*31qU z)yUrlF2#xex)lF;1nHww2Ri6n)+{#^5h1-iq!Nd&0K}wt-z`&n{CF1;dl>bkAn z%GZr?dbNB3(Nbpg+%07tPa}KvH9UDr0cHRW$Y6^5M)DcQgHXplY}pXo;phqY093Rc z%bw?*`}&bxOpw%i8EY%Qr*=l^JW?HIiO~0STv_EhUHv;Ziq{M z5(7#DezQlgbD%hI!7(3QG4vy1-&cE-M z2RyvD5N^1w`$}Xv*csXtw)A5D(f(~z<;ygMmfGQ+cnrDIkpRbevbb=LOndeH^T-<4 z9moLUWIb)NXzL-6zS%`@rm`B3^5u2)xe-{RDlF z(`(?f=DN(TopGM!Y{l%FMt+&k6l6*?EtQxbBBL@lO+lk^FiUBfDU)&uHA?UUN@AiV z7)9NcnnnW7LRZgK!PB_|>h*`09e^&eA0-^1=6!fL#V)t*kB2Ei6H1vSBx(Wjsrtq1;0AGGaxO ztQI$f_rPFN3Ak94;FS!?a#W^ye!up~T!zS-!nTS*MTA@$aL|}TsCUmDm&e!yp^$k^ zfl&?L?l|agLsk>0d5|y$4eMTg9$Du|{-#hjB&p7BSNc^fG{`@UG}Vo!a_(+EX|l!$ zg9kXb*Q2+y4+|{t_h->g*Y9Jbk1in*1}?zlroovGcw1bS!5MiP5}ToT&tOpTop$8P>lUy_LC?=^ zTkqCSz)EHqniEk|1>T?E`L$$f)XY?&4h^dyS>2ADY+D<-t8n7c;xgifxhJiD#-_vF zZt{hq2u4rE`&R$^9;f^pA5G2w61Q4G^{&Z=H_Rybo`-r@*%F;?Dav$18mIm}1rZ@t zQ!WDPg*ET@&;VwUI*tK+Y&-R~F#z zn;dW);Q8aZxIvht+ggT*5brfHsmd#qKIGa_a|R*03e=MZf)qXPe_Bgyh&uJ$ z{;3Z>OA$fef2=&hXG_{EN;ll<~ z`3y0W(?t{*6E8A@@>V3wTPq9@964qltA;68T8t0{*4<|XJ?;Cg;LV$}QNNj?I1@E6 zEK|P$Xsl(WqLrX7rRw1~o9|iy9&p;5o@!r-VnyI0JA$4TxX6}5W}>BA`G^TDx(DFe z^!ySzZ=#X}IvOct!Ay3YkAEpV{f&wKbmNzlN`>oHa4o z@CQ;eIe-Wh{@9yb#(YvFp-D|gSGT7|l@zEzEjtt^Qcb>t>+FAqH!V9lfEXQ#`+kxa zEiInZxWZ?yST9kcm8SrrfD?7a(bxcr2Mi=krzdGSMJ|@t9Yn>C5vMcCtzSZEW^*z+ zSqHn<4KP?!-cR-7w~Aup)Z{ETHa*b{iEshU`|&^ z%y&!2%_mbEmIfnfUrw>5$BBw=1LB23LXyROC4gcYO?PX>8mvTSAc|uuo4-_nbae%x zH8Fd0m?W^$gLvk{T|wTACU=N4#|LQ49P-lz*gOL)X04<{{mWvQ+(>SsywsCvQq%DN zWTN~P_;`5UjD6Rs(wzIv5tDo$mA_xdkf` zUKV)VB7y^J^Gm~U9zu_b!>8Gxt^>1B6SwPpYw2zP3br8@s z91HpGvO@@=8#C+B1Y}TC95<)34|7ryDf%KE&zKqxJ~Fb2F6Tg;%FW1PyO-6{Y>SgW zEJ=jC#G|Y9eux&A$4R%1chzlhvvpj_?Yf0bbgaArbrK`JkfU^L$$eO9q+^m=s1R

    4-ZlvIItc|Ai?dt{|huKfBcug{hq5H=ig;YQuk!oqHL`+WjB|N8_K@In;2<&Rj+ zfESY5_L%(w5vYEG2!KuBV(S?Ghf)6NjQ^mHqxVNc4l>lJN-K2kV0Dhze%TWB%1(2V zw$TrPzonI3tUx}qWwu#q^i7C3swu}zNEGKahx*lD@`gb2TFnMusgAw@_j#Kbf!l#4 z)3L06kndTGFAv_-U_7dyE1s_n%rKW|bVSO;B;}|KDwci^uakcx)7wf+Ex+hqsk|Ts z@@F@122z;v=4&CHsN}a9KUK38)AT7-vT^A|r;AzHwaj$yy56P$`i3^E#{;cj-H(lA zg|XU|6t0Tpg<%V4>+u*J830a&F*C~4nD53h6>f(L!nh0)CW$J>!x{<$WN7gr$F`c% z%0C!tDnBgV_|g_7_`_^xX^v%L6Zo z<2F;%n$2I;<3HCY|JjBBBg?@qTE#q7(_bQpzJLf~3ikJZiXi4u{1ib1PKf~#M3FIk zIom1I*KsR@#R_SS)>@WAJ9MG}FOyD6m1TwPgR?Vg8W$YhZ%9a&qb6xduj~?;V>?9O zuVxEl1$&GU4iYRvkqDZ&S6Uugz||}d5+e)-nk^U0qf@*dm*adH&4<{UL&30g{h8{L z6l(UV@u0V4o11b}&E29RQ}mb}Y0)nYrbjfE0U5+HgI_X;1**`J+PsN3U@wuz`XhiX zTWf-kvBs@_ul_1LbfGlXE!z0gr}t!l&^%G%V^W{LRv47Tewzvj$^8944f6kNEG253 zU(ly7#IZxcIb#1M)sQS1iJcAoN@*avc+v&m=rOiNySi|if)K@_Bc7aF+^rB$6QO2g z!LO#7Fi*(>j>-!80Ubo(fBdHo;#kNp9Yh1@Wz;!v!1yYBjs7MA7l`5w_^YFmOo-1EeAgm{8=9+N09J zSIR4Ff?=GAnKVanM>!`QKtEYy9Mbe1e43jHIkHOZg@VI_GCAW$Bhki--S=^&0Z~oz zCol-}iAe)`3ZD%j2mAbO>?bH*m!x-ux4 z$_g`PKmih0qIos~z+jX&(Yy&U?&vSZ*^qT2dO#oI@1xy)BpmMf_kl`qB$Hc zM0Kewz4y8b%OpruTxZp^izqmkj~RagX!fTg@-q%gb}O@!4`U2W40TEn%l4LRKgAGj zbBYkRn!zkO6*rf;K)dg%jJABRxajg(@s+Q$URtw#)adczXD)(@G2k8}MT{~PFByCF z@R~_cRF#W0nG2_QQkrzCq!3rkJuKv`cL314lD^c+?liE0sWSsR%$wq*tC@}P z5oz0;<*F&uB#C0F_tM2n6@VII`j^08vGyeqo7DgBSo`D8So>tg`oD}dW1ItE53}%_ zM5$n>PFf%rO%xvBJjb{hYGxoTTiumqHHr>@#1}Q5#EARi^B9u11*#ps{4P2Dns}=k zm}mJ#;0oAKr0{Nz3G3GA0NK)QcP>X>Cdkib)lk-biztMr8>W(;Se`wYEO1ALpK^0a zfWlaSjfWXg!Uf17Ha`zo2zR4E62ndJS9GzHXJeIvsW2q%#HP62+eQ6ajaW`6cO<#L zT$)n*zRTcZMO|RTdU=(Mp}VIBz71=w`0TiaZ*ZygY5+K6A(&C#GaoF}SisS#uy$0B zhX0w3_!2Ql|CX#*V*hO+pZ~RFz0&ia+33Q&^K@@=74u0JJ^Vq?Us{9LZSHC0{H!}O z3u#2X;*k)<6dQRpXZOIDBS-ZCe-5A}m>vmF=U^wWp&yRS&OjU)QHWGtgKH!F8FGygM+i8Jr!a7 zvv%L?9B<cfA4}conu6d|~`*;2GKq&9jV);7X7E;xas{r{vcn`UABuEj5bb0Oo2Yh(-!Q(* zM})pe1Nq(Lm8oH#$tp(0ufeKriOQ8zj+jtp3VNgjeLP7(9{{hb!bAVvhpik&g38+R>D23m2%lx#N==h@9h0jZKH%}#c* z9?>8pUp10dX0EVU7i|+&VZI#ncU*m|XRF2tn!$r<5Ca`4+kHI0kDo}YK$PPQJJ~r9 zM+MDi^!ExYXaUit0U|JHi#~LdPA0cdByI-_gx(wjGSDorqG*w%`($&*DXN$$u^hu@ z52&Nd!HgP#)E}F||20LVdm!p1>E=d91qHq=wWj#FIdD?QPZ=EYJGb=^m)QQD+b(~; zEl2_P{Z5jr0GCtx%V9VfaNLWtBO{o>1NyI1QK}0S_O25$>0J-6MzwOGtu#6A1%mMEPJzr}W?vcgtd7oa(7nB=w^Uw_g) za8a5T-tq;0Ufln5wq2BBoFVvo4bZb9$|LFhjpd*v93Q;>9-=darg<~PO$QIW2!2TS z64z#mZBZ>-|12>xP*tGIT8@o97Sd2~oSG9Oyv*3RgZ%8CsSvQ))PjF1@Nj9__?u^U z#+Ols?0h%J{)K%uowJeTWfkxhqv&Zjn{ZF}UJkJS&rb~w*+p9`rYHD~T@YlqqWmrN zj)w+Z6an45*a3b}G|-eGOQG8#QyWSYKRw8tj`{Do%=q(9o+YN)2;(^bvj7@*rA~Dm z#egm9 zsAz}GQJgUV^9C=xaf}P?LQsQ;3^>#@!2OUG9w6<*0c4&CCp6+;W1~^VzhcnmcMM{m z1h;npG3c8i$$x|m#9*Yef{oOFk3rj)Klx8a!z?lcPt0XRH(x!YiMtiJWLqhXxTEez zpAj<87Ptl!ytk&}=#yoPM|-3^s47;sp&i%GOM9u3wi1OrEm}p8 zvZLI{i%3dwt45VuX1dvwVi!Om;9DWfo;Nf$F2#LOEgk|>)@6#-U&LPm6Zw0Xp$;8a zrO2u(xIKpLT7n3WeQ9{=6UIeNM8!z)+o34dTc!TxP{_X>igE)#3<5Y5igbwG3e``C z+E1Jg{qGJ1{|wLo7yo##TRZ!r;nAh=N{Pxs%&}C`%jjnd{XC z8a;}*Ua|56hsY=6{up!W=U7#Nnqm)Tg12kV6dne?SCT;1#l}{SV6D%5*_nBse0SNv zInej@n{2f+?N>q0f&F8C`+nfsvX1jyVa@YM|EVEz=qDU@B&jAeqI5e-3Lv6;D zRDOxDJS|g9>F9_rUxt?A<-nAffgsxgeCfyHJY&qz6x~;g49QxTY6fN+Hm9HUZc5*f zaf)>N$(Lv^`xa}6Tn$_|g{N#ScL+dYMP2bAN#5briX<7Yk>%(|BY@fvWXSEHJRAJy zFX{aVXYjf@$PgcCB6yG1=Lhu{g|RejcANrnJq1wv-$wX1i~Rawlng0M5m}Ilo98J; zG8&2(3XTTq6MP{;oczVwCX*M7H7oAMD+AiL@R8Kk6h6BZaaTJ~)pKgwT#;(El&^db zOCH0y@>A*vx8z2BkDhdB3sLNTJ%st^pl;=(8WROigeLv4W8les<*KPc!>F(RkwAii zTqz(z!F_hMwKoEb6HG1eFeh_b1`qwkD=Tlwx}((AB4H~DxA9TQ(SWVz8PWPy9yoT& zAfv)WY8wtFDJKscx0ucVVr5T{x8l$rrgoUGO;#>iM*t@DiDi@Ad&mGd0WcX?5xsBz z^S2g@1=c%fC5jpES^Kf$Hf!IL$li!R`+_!3#g>ot?*HWYUuu-0b9r!45r z{izK{i;6-5t6kfMbSPfqt_tHV5m5ku&&PYSq)OC5#|U_}X&2PRPT5Z1;GkJnGr?Q=!0 zg|Mvbaz*%KNRtkf$ap?~O}knF%;TQreIQXBxlBjqIk$7g@7H25O#!f+@Zc2eLj45) z`ZbkUej?L21=`3u6lMU26NiI;c+jUHL-OOAE46=w&tISaE3i`EV4EY%JIho>M}{@y zP!I%FjE`NI(S!()$!95S-xavUF#W{^@P@Z2s7ulfaR^f&^B^4u==GIQ4W12rzdBM? z%!BIV$qDgn{?HJ%wVlLmrBEgxpX~HDFLc{DP!}y&4Uq?rb_9_0x(Yjx^o=R5bwB%% zTH2X4zmmpbN`f0WOs7tDVK}kmsN^6(&rvY61S#$yB)#998Gcej z2TA~~&sfXYN36f>koR-8r1en`FtC#NiZ)I{FCZ-~(IinE?xOBV`#oi8`FVx)}s^B;ZaS?K5^-v4YI@RJF&9=*Z^IoG+h)`fmw&&#$k@c1+bYw$&O2Q{D zI6;Y(Bqm(ydv-Wx-u+@iw6;wP9bFlmtS==DY=jS*<3CW`i<=nIJ{^PDrJBim0)K&V z7~5$V1nZJ!GVn$5NXS+`0naKOFURB09+Pd!O_OX;9PZ z8tfLKE`Pic9@8LmpZbDxBv;&{;h8JqHnq}0p}f#L8lQ6VZF)ppALMnpMf$)U$|Xfd zJ^6#yhvu2(PnZR!7u}ALC&`fvJLTAhoj0OCp$gI zkUNhV60(;iH5r8+UYWxR_MzNmR9Z%mcZbBzs6!(iv7+W_y`^3q_!LxfaVBr_8MyaW z%Ao>gLEL7`jr1z~zoG~K=d&zsGb3^l{+v9rl_Yyoo;Z~uwPrv~qDbh!SMsLz3 z;Yaqz$PW?x@U4K(heZ~nMcKPYMP#wCDb~9q%3g1{Ld&32eYHAJaQHEi^`-WwxNBQYOg}?$WC^e)Y|}X3|D>ADYN|`)y=vnH<uLlx(ug7h>HVg5{%MUmT~$W4bfh8QoFB3T1PDuFh&%den)5BOu{w;xY*A zavHHwt7^v~V-GIVMQ}vnTI@xX#!hGmn~rIG*nu6ihSO6B`(WK}NH$sSQFlonUQq9h z>0Bnyy0s941KmcV8xL>@x^u5w_inpB!~_|NX$t;M#Qog1bblpc#-ErvkcfkIw=ch; zjk{?IsCK;knTQ>QJxTs@rN2J>k4{j@3XSVYbHA*oyu68)iPwRqgu~14!XAV_!{`KF zSxk5-Cjc`t31e^dYnJw{-?7lz=s92USM^QilQ@L$1S0(8xsU8SLEn&*JieQ}N!bb$ zf`g0(+_5K6L8mRR!x3Z_Ix?=FoB0XHZ`El!ePTjdZRyEnnl_O-{TnfLG2dc-Ld3*J zt={e&>mreo^L&!XCfmXgyu^p1XY-u|vOXz8e5L7TBF$vgbFf~)zsI~ECXh$t(b=59 z=YM9QmH6WJW_Vr^`FlpEX#Aw#jc;J0$j6m+Plwj24l$nC_=_@n1_xjei62~wRap{ia<+H%0 zRusv*hWd=2gw+!By&jI$&5q@2jX17rws_MgHnH6j#f3gy3Q5@aaGM2|B+nzm{-fFc zM`$)VNf>JC0d;kT7x-f=_dylYM+1qbC;R@wNbwJ9t5~&h1K7mLi27vJH@+SYm>d{k zc}aa{Ju6t6%MszEX2q}#w993?9KsTTuPz3pjx?bvdycjACrr-zHyR%p71reee0v_9 z-l_4Jo*|N9<kzR4Az2?NHly;ekFX&k227{|_foED92qc$ z!DwYyDk7dE>~eHorvr)5V{KQF(_EpNFRmhpp&mNAs9Y2t6!0iK$S?!wFN>1(7H0cu z-u|$5{@rBmVtTGVsC9zq3)d2gs#$43L&vNxOG?YpyjkbcrJ)oUY${e7uV1=wK@pg{ruW{K^fFyay@3AgR-tt&k(({ z3jG79DQo-p|4SSgB3IBLIXa3j7tMSS5FGoGjG~B)I}{@L2fX~FJ-I%n`$^4IzqY$I zd{69|@3l{=c#NX!U`e~8$VLvdCSiyvd^&I7wZ6nDOcYRz90*IfYD)RBRVJMS37_o^ z+>&7wwtAA+%?e#kTMP7qj0(#-0}_EY5$JpoZdZhE4uLx>64_T5-R;co z+5}dXxpc;w8OuS2KwGlohTHt)2{%BAGfNR@=y`P#wAynivoIZbx;@?|Nc(sy&p$b# z;aPHGZoGftBa1DrJ#v6gi9!{@F3fvbcIfM#;Pw2~2<1Lch*)DQJR@E{RJqGywH1JJ zpx}>XdpsmRM@dWkpWosWoPv&q{Xj)|vV|4Gg(qO07s#Ziap>?H>3y|FQ={pLXyfi} zIJSH43PH-Am)wr_r6T&bjUQmndy5NxEQCPu4^QKCc#ZrTdHc)6SoZUOPOAS1o}Xd$ z!$)jcT09u7g75T!8Or;|zTY0qW(HLHq(%o8(|}B;f{ZZMB?atc;^QKtVMmBjy5zK3 z3oW$64Q!l>NnGgF^m2Y#<~t)g6!IwOvCGa*E?a;2&Q=hK>rFY!Y2H<^nN+5kDLo<2 zkp{~%t6Z^HaItP!LDrXhFHu|C2VwN6TBrmOT|W*q-mg++TfWTfZlppM;<$)rf~a~T z-pch1^O8B81a859^jH{1h))L zj7<#4%E__(+zS7pfb5HW){N!FtPggTnq}YI(*9JmVT7O%UKXd@tx&%~>_MSzVP0BQ z>J5DYK*!C@%%YNjHcov(W{n&wwhKHuA8S+loC+Q6RGswtlD^O;lp}Nw1K%g91ip}& z-L|{Hb25=~D#P0pli_^>Yk~tu^emVvCqaz0@0qahyz@AzF?(ZfQ68jYubz{_177{5 z-bL?Z&US$BD02k9sOQFg!B)rCaI<-Yjyv1iBgB7#3;*$z z{j5CR6;g(i#V11%m9ZiuQFK1ds@}^;DG!Q*s|0{=$NjV5!;j9`#s_8u(*E4yFUfc$ zY`dwzk2!w?;SSJ3bEl3pkYZKD`rY5#3JG2Ks`DT|I$UH4>A6+&Rl?F zt(`C8cGcv+AymzFdd!Iz9t&3Xezk1pWyfw8apZ4b{|BW$p_+hQ>PRy;Q@r(bwD=8Y zG%5(i>JJrz4eZNe6l;l_rReq6EZvJO_+b2z#T#;u!AMn(Ee+vxv%b)c#NiCp`6Jy) zY=HL*xIKm*;x>QEfUUov~ePwW?pjO6!`ri zP)CcsF5~7bR%yz(f~#}ka&H&&x*B4nal2?Gco*+pSTgfBK$&3a9OOx)DKKHa(BAbu0 zy*&|vift{imyiK}^jYCIFf0*pYLFo*?BWRF|_Jeh^a`1Gu@q4tA=y#R4iZko4SO3hs@p`tD8o9HuM%94=zi_L~N7lG5A8W2Kk23yvDFl&sjwNp6&I zunn2xN?OVJWKxEK$zsCyQ;yZH#*R6!8qq8^eNtMV*yXkQ|1vVLBNYbyOs&b$b_(() zk|fv-5}I&@7ncILuLN+CB%)g4zpSC~*qR+k9|_`=s)B?YdWWt042*_WIXxF4`suU1 z+PJOQ9Wo8Q7ZJW!fo_tDkJEn~S)`m#E>0bApNoqt*gfQR2t<%L;e*xf@%_1NHNxv~ zaB2oQ%#(=?tUq;9WTA3WvLADVP%AHeyC0OKDYj;Uu|8z8~G#P>*N`#4O5y}`s~YaJx|4|(Wv*9Id^OxCIHkD&K;YYLf}zE0uiee<5G zNGBz&URK0)=v}S!vAaq8Y^TG#CtEJD0IF@$!)>+)8 zQgo9FCsdY9v}aZgW<4v$S}N z{Sqd>F2SLeLkHQnKx25z;(aK}ZAjG%3oXQ^8h;hTJvM($_(4xK=ZYBw#2si-c-4!> zV>}fd@byI<5af|^m&MWOBK>(>E7Gh$wJeLHAO*&Yl|f=H6AkcEq?)8B{B0|i*OB>~ zq)f)s<{IOr)IzH65nU4`A1y1(QmH`ox}DNhcXEoPKQbuNU3N*!F%0gh5R%CQXG5o- zpse9`mT%IP=Oz!@}_ETRUg_ZWrte@b?|kF#@dB2hdgzekO2W$_ef zVXK63nm<|UL^e;e;1u+Hnmpc!UM`d-CwYo`Skw4ooaGz7;_c1eMdQp~5OL3mNz#sq zVz6TUc@7-)7<6|%=Hd{53vV;gClx#&fqcBGYO7Z4nB&z0c_E}d4_h0knDQw~dZ_4N zxpd_CCOwu#33ncdRp*Hg5C!Db4|g(A$!nwW-ECpzf796tDp15?E@t4PLD z1{J85r{P4-i|Z}F-8|{Nr-LE@$Cs-#wGX+&8UEqfjq8%sI4xXb0?;u(oap10GZ_zo zw0l-A5MT}HPA``FLG|4CiBQSxEfYVkBoFa^*W%u0J1pD36UaLB^3{Iv8rkXrc9L-| zHTy~NdD~^je#H{#n^k-Vg5Ta`Xc)gl0Eea4X`4dW?JRiSbG;qZXfH0*nnFnO{rr7L z$K~B~DwG)TGqa8pVtW&t6snS*gQVe+W)iZAIyYy8QL~wGB+`gAwI+&x{Qoew{>wqj ziGG68Qw&3)TvZlL^0sJl3Drz}6kv3(F^K^Zqpz(v^tci`^eyShXu3>Lwx~BB@EnfSi%dyvhwaq zsJn!(+Kz{qXqOfT5o6AfkD0{wUIA|C=)#ob*YYmmUE`?>e^X zYTy2qe}l;a*?N-mtDWhCPw`RUR%5+h_m%03l>B{&q#Mn&;q1!RC(cH)bs%SHw0R!) z=$(h#H_pl+yI);ZZJ?fW@tp`V0{~zfQLGaa=+;8l?bLVG`=`GdB2Pa6M(}+ZiQsUTV5V(Fev>=JltA1_9_IQN9PvUmY1Y*)3H~}HX_VwR;(i-rRNa6ob_ones_wU>I zRTN!z%Fe`u%9iZwR752tX%J&8k}X@dK`1+ugtASx>^s@VzLR}TVHSIsv5m3apQ)?s z`u)ED`*;1H-1md~K~KEq<&|^Z@AG}0$9WvbS^DDkUBA^Y#2=1pQP9gzcx4|y-N^&Y zm76V|^zjdX+mCxP@nhe(eB0xcc7utN;>X-BpSNy}qm>RZA)8_$7up}=|Z1aRmYf2WY~4~5APX2olrQ^zf*ioqvi>cuX2W7fQ(GJsX!#svHR3tlOZt-^6iY%k*^Wt(I zKwvb@8*27(Z0d3Gi`$f6@l{oeFpvEO zVPo@-kML_WkhA;D<-SfzF)2rG3#$F?b^6K{orU`y(Lza#`=j_vr7P&n#0Kt}Y8NXb z$K?0apWWmpdw_l;DjcYt73rDsA4T}}$2twA(2d*u=;?2hEcz1qTG+dlUNJK2TL=Bu zYih6~pcoznis3$`$(0CkA8GoD#nJ{wzuIjSaq|$7x%)9PLSOhUWge#j)#o!O>oFU< zCd`i9qk!1B9ufiirc$v54et9qa_olpr2Bi=&rtT3`~$)e3%4ei-Iw zAok%nf%s#!Nq~x_>CQb5^M8T3Bd!UbzhY-#GVS>l>vBKW1{k?fplD7GhSrWvW9Or! zPsZOgW_P8NZRFaTXpIGC9s{8rU{sXz?f#^3J}U5d3;@P95I$xxj9M2-euVOjEyf0V z5an`X;%;igJBzA}i#D70n+g?(Z{p=B>!01$5qYuQbvK0!*i~b-9`M%l1p;Fc*kCw$F$AhQKo0W4`1vBjC4zG9{J0?pXgqvI17Q?B;?K2M(~uPgId zx9G|E)lwTl_3cri?I&46x2$^?fj))Pk0>#|m(IuX3zL9_nl(-&JTBh3Mad;K*W%Rm zbyxG2NTfH)<@UjjC#*Fjf0AU-<5wFq{lbs; zru!|!V3W@$B7h^t@!Sr8C_d_u8}2Ao$`#I*7m$lDc*vK01ubb_%9GTwbZcw$XT(Ou;vcaQi#M|EG=vgekTavKO;RS!)x@NMgBp~*|<0*cB zZrShPa$(h6^y)&{pnK;l;$lY>BGoQFBK)>wa6BA%tHZL~|2@;u`q$K?I*tF3#Sgw2 z9tPHV9L$+g6#hBQvv%=Hi+xkO2#=)fPnGBF5NK-yI|jP(+u^{j982&NGQyYI;CT^9}&-tFTu zk9__IPmpS7aLY#xXT^H67;(0w`ocw7-0xSrGH{k-^}F|4*vws2 z$+MSV1(@unC7iG@r6=avN?ZHh=qIqyt4pOAE?{wcijk6p-A?jMNYS^08-dc`fC3~T zv1;{EKuN)r|F53809PkC=J# z@4oPKG2X(nFh3C)EOb0{hVK@loaUb(LsZXu_Ek%wUf_z-@N*VgC*2`9Nqkd)$Y;5= zs%3PQy%)=-psZkkJu@d4P>C;IAh!t^#-`7%b2aT%dMX?XyfPWjjkhN%oc1z;Ww}N& zy&Kq3yDON9N|by%oego@dwXQ2Lw{z!A#$ceCNak|9e6V_7WQ=D0e6Jl;o(B-iAV^8 zmV!xxAZw-&UU_G>-f0FrY$1Pq$Nrtll8q@_W|q(Gv7&K^aHh@sT34F`>p8+Vbh}OZ z9lvCNIB`k)`@f(&Ky`VQk~7rII#Wb%*x(fpZI~hJ4dOvJ2CDx56HnG8?sXk@gn4)yv&M> zJ^gN*U)ipRbL!0DoT@h zjZq+wCQZS!ZaGFr-XL9LgpDndyVasa!*|u~#0J!qsE4dyW=SXIGqu?k)pcj09w6D_ z4`MuULh7CagRedEY(CZ8b(uK&a@Z3Rrgj%s+ zu$F9f@QD`S=j*|zGA zvu$YnZMHUXUIW(s6ldK!H*Rr09O2IN(Klo(Mw9<8rEo{PH&AyeaFOdS!0a{TJC#<1 z<`)mGmQ3HJd15oe(Sw5(2hDL*&r1r72~tk>#d_pI01;D(Vt21E&CC}43P9#p)pxS5 zQ+m-y)x*3E>UJ6rEqcWQ(}Ir#44=9Ah>4x1! zkIX~jL(LMKy8mtVZ$^1p-ORv?eRL5!G-pew#XB!)9ub=Jb4c&rSf05{G`Z;xT@IC*>(&ru^}!qEK1n)|i~f zbm5>MM$seFu|kWfDFqNBp@nuGw~UMU*FL(SSgk?L-v~DNynY`6m=e~~Y3`CY>*p-r z?ImKD56zuD+3JZEBqof3+obN6-B4EVMzaobMu zrME?9+``8jR>I^wi-Js{poY02;6XWu(>}MZMVZHbm1>0jE5sCsTKH4oBs_MN6$Tz$hemq!<$9fUP)}a^9<@Yfr z1~?)&y1o8&8k2h+n30+A2WZWw^I2zd^egkvvO#D=+u5Fr3lN<0 zMVabz0is1S*@bX^C(WBwf(Xu=!NpV;Mz8n7E(p={4-A)5^1iS;Y2x|e1R&6`&JH?w zXDYKi|Is{Nn@zJC8*hAvO%cMNCNZjk9KWYsB9a}0MAVCYhUat`RZj?~NC(iF&+DoI zJXFByPeT2#V1p$#dE%5bIh#A7z<+}0yy-nFBS;i(<$nAJI7$%PnAhzNy!|otp-sZ-e zySO$l7t@+GzZb@PDQ8~ykfenzah&xJ92A~Sfl#cFy8Tf(V!klC{BWB&X1_mV#(1yK z<2n8zV^a+;`}+Pem4$dS5~U(WYEq^PCGoI=>g_Bd?$pLI97~DSlbTM~H~bv-OmUDC z3%gqJcc<2UaYSW=eHFF%(ONgL3%L+y5-lb%PozQnXb`TqG4+5*H{na|9o=x53La+1 zqlq>rtTx?FhoA{_1N`oBsI{KNqp?Kl&rc#&2U8dqd4iMn)}06{N+a@zIBcpd##UB& z^!ZD`zj9MdL0Y}|k)ovUZozs-;HKApm!aiAv|+%NqKVEkOeO6ZSEC zPdk@vHq@?oTqdOp7@vEkY|PB{BWrJX-)gP9 zp?+;OT@O+kL!;3%hFAUZ$nEFTyofM+_j?+-UV{j`ycd z4>CDt8k-$9Ajrr4%2-PD{78~m*h#qyvn$1|b3I94DbKeGn3$VH+v($7S>!{ z`(QE;Z5snPjn`am{oo(4H{-^OgAkZ@se@sMK?(@Mar(g6vf&V2?0(#!HfC2`Q0ONm zs6(<>lDB?RwgAjO3=Q(7{%xA^F_tk~6GZ0;l*d|kmp*-p<^|v1csNT8X=(0d48DmK z--(#FYXze_I;nWLInc9!nCD&GOM(OYK5u`e_zxxDTgZ{)aB_NyB1 zPDkRa*T2UunrUUO@Md)^sKD(u=AsgTRR%sA8cvgL4DqmccQ|U+xz=k|4<;DY$F~wO zggl2xfm$RhQt`NIc8{?Kv}b616iyZ99(ez*kt^43KYo&d*JK2~;|F1Zz&-kjoeTYu zgLOCV*2;_RTXn}!Nfqv|d&84RHFGwVSC5=lM)4aDzrUYZj}S(iV5l;xpqNUiG4F1# zO+uZ97ysmwrO?N1G(gdz)r9{7JbCo~rwG8R~Cc5=d7S3(F#l=*+;c=&{M-p?c z0FzmT`zqV^u6-t|c5O=s?|A&;1})A9+*R|W4E;d}iI@z3sDb1ITTJ_6EP~sQy^4LC zDDW+g(~QHd`4XEuJfKFQ)8~?2pE?h^OM}giR0Z z;hVwkY{!=$&oBdLOJGs{#XfjIm_CshD(5;|_a5SBE@JqZ|6zgAxs{r&5ZK}A_9$>i z>&EqilOg$$eh16KP8iF`$2}QK66p8D+5M>SR1$QKbWRt7d;MO<7AB(UC%8CRrn5C; z{*;8E?r%MGdSVx{rJ>6Dh7|tq1D>G9Vl~Rz&7DLK{)uuaA}DXe;Z4$pz!y4q{^GLW zVSY4=q`N@tq`5<#t?ptm6ClqQ`BBl1Y)D`Zhsd`fb;ahDbYME$bK|ptMXtRe2LN0T zJBY6HT?;pnCrsyuMkgC?50^4dPTbQm{#b`1T|9aDFs=P^r0}i~L*zx|*pO|1FW-q< zY!?yNg#eBFo3nwu=7?zxGYTNJw_M=7%0igUqN&qp68qyjKu7yQGR_0F-IIv)u4e5Osl(mC2Y^9b;~d^|$bc%1n^MX?IN5JV+$^l(a}k zlE>{Nzg01tG6mj)r8cJ)301`ehEJf0KZ z-a5`OeJ2SSWh=g?tJLP0@Y*$eF1SJHy9*k2D#u_daz0kP;|F99S>Be%k>Nrumk=?U$E@;|$CI`QyRp$b|60gJT$84LtX8~q zDdjl6+f>r6!@pvuce`sM$xZXN<$PV|6M3 z+B~GX4bz0EI55O?q!{erd@kr;V%sZTP(1+SnyGYoM<1;3<$Ear+I)x32W?R1@}Pl_ zob%V7y_at0jgFM2nom5*G%&SdcJdU+87r~K=uCcac>zSM!fR0Wl#?+WUR+{*o-}WU zNG2KII^#7e6empqvcl;?ZjWX_M>A9;a*?|ic>vRpM-)Iqn289IViGx_D@@LsuYs(2 z+srry$eJsjW_7!z46WY}-W4S9x*uToojS@khZ$hI6Xqi)@IkWmqES1(B zZEU=o>Db;9saBGFyoAA*#Oz!oh#`F)r#)Ik@mS&TbnoN2l9`hAh~cQI0%B)@zPMIY z(ZMdy37!0PU+cD;>&kV+h>40#UPNMHEgvu3$=6F_g}HvEy)8N`g~f5&`qoqd!q6Rd z4hp~@_>*sMR9>uSc+ZaX+%<0tADXI0v>$7ew3POiOBbadyK=iu+u%P@ytrJS4ODP9 z<$eJ3m}`n^00)sLn7aMuBB$c21YgvCR*U7#pxdBcgS}u6X*Aq|G|bSBJbLb}q=+!p zl)W`>BGf7`#KT)l4`TJHU4cHD9B(63>tVWr*CHX`_6>T+^;#c0Gyy{(nnstWT<5RI zXjhwAa7%r(UIM+;N;Kfow9<*p0#%EzRUdyaXl=Nh7!7mtZX<%}5rMlL=M=ZT9G{t- zt#cUN#K+q#w3Ul|S1Y!9S^n3&{(nF2^v`AL1ZVF*BU24WndNw+s294FUOdw0EaDC#a6vq z=R1R~T6OtDpPgI;LQVeNBd=}sZ@I4nM9(>AJK=_4dp7s)$}uHuw294@tBd>5heBjb z9`6j%++D4?lFt!hwHE{3#s$+o=fJ8Wkkru9RN?h-~~|tqZqi$G%*a@ zK-XbslfV33mL&6C!c@^uy?3S7mKHPYGgcHSy#fm{^__1(&oOa@n5~Qzgcq9Zm1v3C zK5UyRR8IG9k+~Gt3XVbXjw>6OdJTpZx;eFa9`k0cR?OWNU(t(tm$8Lr?lBEBJ>HeY z92t7eta5lK6GA<92f>=_YPL|Z$aA*dYDkoFI2+xvIMUe`zECUMk$=bGi~CpU?=PBO zI}xMm4y3?&Y@fK^2U?tGIJL>rlyIW+GI_G3NG5j*0L_%eRK>zeb_Lhq#o=_#e522D ztYXHDJ-4KhO}8(0|^ zzk8d}a*jZ}c2}c)cQsuP+-xmIyPuSJG&LL4g!wJoXJ#PYtwKDW)82wOD%X6P(SR0( zozrA%OS{=)Sy{Gj^A^a}g3moH{}s@uVR{NDk1G4hr9AlA(;&~CCH*f9dU=%r z4J9_~16TiZSZe{_Y11uFRJka;6=9CJDAS*1L=dQSW=cmDhZm*S?o14njYj}pDX!Iv z@I`08WKC3Q4%=2MI*Yrs1nM(aoI~nzTX}s!^c?P94A!#1$Hms-u{GUC?z`1PrNxrz zECwf|4b<2|rRA$Ux+4*dcYE$TY~`vdsg~Fnmf~!2_f>G6E5l%{C~l0`^uq3F!iS_0 zHhj1T4nW`JLCq;b0g+m2#d%tk6mO>(zsVK4@f#pje9&keQ`TdTgOV!WA@R=~9zPJ& zaUT~IF3@}Kdpb=Kbq6&eq36r3oa%_PAoTpBwJ5h>_(c_uWmF_6W*cto-leYvv?Paf z8WK;oa-3GbtA>M~pQwA$HB#kB5J$%aTc3k$4Y9fG*2ocGNn$dmij5Zt&F+Ax9Ywy$11Vh`jIK*9P^;7Lz+4WGfe8?q*3| zUksfVvrlBQU4VJT)gSCu;Yf;>6Y^~BgNmPM0Th;A{VR|lo@S9z*mUNmsg@@|A*XCC zusgv@9U;k-FKXtl^)Cu}Z-Sx`C@t;-kFs<&|XM6BH>{TbwqAgcc#H ze0ULwpnIsqwntEy>VZnC(C+k7Z@ZRETIz{DyR`v4qYvqKYCiT&KG50j$}zCxj{vxW z(o9W)AE-~ORqz2Ogew4)&Z+eHDF9EnC!VZa4=F5hc zX3_sGsG~7u#bPOd^nRy#Q^LJ^nM|T~k7RQ5vA`X~V{nt4><(sA_6Ggp zl`VHo+#^oZk9EA2AI7|1$ZEIvepLo+;>{4LYpD(_Nl~^u>~52=o`3hVjSVQxDHc<9 z57G6G3TINKQr~s!u^0@Hm#DwpkQg@o7G=9N<7pSc{aJNu4JE^xg^)^6aPh@Qd=b4l zT|AKG(??heOQ7g__644xfS#+{NL$+tG z;QVS^_?(#B0b6uF!RLPbg?@iTl_ZuanA&=$TgRv1NqU^?gg!$uNgvWnt5z=z0o2{~ z2O0f7?=)0;bA@=kNsZ7luK|=&r9~{rdo=BWzR)dy?f@mJ<|Nrd;P)LEXcFc_d(J#K zNdwv<37R1(pfFRP3zdS012m|&b=Iz}xC}9$mO(bGFly;B6kwa`^jH)ez0>iq`x0+( zp}&YMdwV`0PrUbeFqHa5L8#f8P);%tiUE+}_~&EFOPHAKzP?>mpnt9sN^ToI?f?W4 zKs0IZZVwEM6jx2EKQjTy|K}n^t>nKn$3J*}PmYpfzDOuX3PdjW|39xJ{R|Zb(tvn| zNe7wUSKRkYPWqL5S&Q`wlU>Zf#6TB0HZgt_MB={yP-a}<0is%Q+5Hb3WbBD38B(S2 zCVRFz#NgD-DPEeBz~&bgu-{l13-UD2QEN09)E%?m7|Rr@x!sjX>TSIp@`N$V@DN*n z&oqq}km!w}@lX3B#AVc!@0ltyw%n_;TFsBuEV-@U-BNQ|7oQtYcAl{KQsI^B6h;hW z6$F2eXBoVGO<+_#&4Bv85se5smWt=a4@2-!*(b3yl?U-0$y-L4@HgQkYFpe{n{Y#k zQcUa;u@_PTSTF zd#(JTvMVtcG)8C>ge+rJ>E`Qr6(Z-CgGyOUwSgYu?nl$VPWZ zBYj9ugKG4|1Pvv6t6WqpgIce5;$3`rz-*5!;*Xw{rv;>CK=xMl2?hLulJC+V1 zOV>#;9QLz~0Yo;=RHC%Z}x~cV$ zGk$-im^%#qOvI6%$2WwY-?YtqIQ8Z`{@_0v3&YNMpvz-_)9qf0F&d z_zlj@R@@H>H7lUZ7+^-ES9-Yil`tHI^Pq4@GMUdAHZm$!ZXfZc_G0x+R7kUnJF^XLs1+{m+ z5)yL}BtgAbZWY&HfkTLUPUx9BwO%2(WZFMTJAFC)*|L_NRF<&!t>IPJFGDoKY+k{AA z`oZ;ruDTc_tm_LjpfcOJ#;wr^1Nih5^@;OGIP0b?3*F{0in2d=UVR9B+J5shT=ZJcp`1wY zjbgr&{E&RKYl*%pX*#}Q6)RksV+v>7d)BTU@oX-g8<2FQjdQ%`fU|Uc5djs%LI7nR zhoaj95RdH^#Sr@v&>)|E2JEl|UM$X zSq%Ty<2|D%>yne+b0)q81Z07gF)`__!MB%h^z-_6G`}3@_nUmrXJLN7F1P!)7XS;J zI*R{gNe6>s8h7u+?AP<%U7U#*5YROxpI+N9!@XRj+#Gl z?#W{jS^?UqA&ESlZFOEeqIf|$WF-*cWiF`U8&xivQHR>n@AE9pWqy3UyKPSH9sPw_ z*AtIhOsT}Eu2Nm|?bhsa_S^9k^N*zGx|XI#za5l(5H|i=kJ}6Ai4Bi>nQ^gn_v6JB zWC&q@#O!>~z>y+2ByKuWXLc|7BU%|p+ zJYoJskaDvTup;6b6C;rc9KiarEbd~1Yp%F=3cx5IWhnC!2&(wP4|2{$c{Q=s5>}Q> z7YF%DV_1@xF~VGBfQULjCo?4k;HC=&(CMfZul$x9kv(jjuTKa4j@0E}kS=LO85<*HvGZ*ZWKJ$N9OOqnR$bMvPoSQ z3V;Eg_V!$FW2AYbjlU#?hHZLW``{@x;1v+ z|6Qy9yKqA-35r+ruOd^!b?Hm#Mb5|A&J|5}t7?zFx)tlEO6_5>Aq3?G)T>=_ahZ;C ztBXvdZLWh@_?0&dQ^%{gzw?2^rE~XfO;Kg zbnTjK6u?h;oj1q(yViL?X1*K-W0yBv9{f)=_COptqsJ}Q0zK|u&Fz3LQ)h_T@DPV5 zKfBU7Ik64H+1!x4n7G%)8nbnc->!!=Aq}}X#%RwtO)$1y3MNYQjtFWiB`S&Kge&y6 z=CT10FRD)F1tA)F-N%Y3XO#6MwS~c4Fy2EsY&4~;SiRV$fV8+o!Iid&MWIclJs#}o zpUR~bZ|-dByxz_AW&7mIYbN)WI{me&#`BF!ZFK0j`|t9?+4E1_@<~<2ws00RZ3pY5 zFeEz9<%O#Pm(kE|E*(upH|(IB3FDMd1pU>*%xYbxjXgKQ-j%_ z_SEiB9ffQw`T&M~V*>YLR}tsLW9x@JCdLOB@^LX8X7MV!8ql?1aphc;a~f3SMKb7W z0%bj+3o0#>70=*l5EDa$*<1sLh-$^J)FJ_oT_A0P*;?&?r{wIDztZ+85BjBY@`&mYXdf~OW zL?4|U`pYb0Rwz1|w1|Ha2eb8%S|of>+0YQzb+9T3H4m}8U}^>LyzZk`pC)vA&}gr` z-`j4(j+n5Y$|qF)ic3Mwm#+5DhTQ5uTN0{-HNJ;Xn=GW(j~Q}8IT+vXy}ucq zz0v32sx5MUvm~VExs73nSpKt*7u20j8f}+^XUC3PN8Wq1aPe%Uw-?lBm3h>>$Yn5m zs~6k)NwTzELs}kUo2=ZA9LY3TR;Ai^FOohC=c$PNCsus}dnw^9N|DNjRBr_(LgyK35WmUIRQkIR4JdR|{^O$_nv#X$_a6(;K z4L>FOlnZq-LrgBg8ML!}!qkKtHlzp;Qy!Nt9lTRqG zoaUdH1I&2JR`8W0e*mHhpvj;!rmg(lTz$OrtI3G{Lm^*}AE<+}>Q+_C|4u7EKlW4) z=sIlmh$hp2U$n)KKg~C^I})SYhooj}t{Du`2ESH5U?mDK8iMl&OX8E|cg-1ePBXK6 z5pZf(a3e___o36AIGx=4K4W1q$^WOMOSg0gx-dB77NBMd(Pq2 zC1FrcPl>0%#rrDTi*0pSh&_QXPUVBX(E6io{Qso8Nzlg-FNv+60R0!?4QBdp;f)Zh zzgg_A5D1sbU~<+1FZ9r-({#H;Gnk>IwM4z>JK%(u=L-|x1-#1ikrkxH_%U$1j-1yJ z;5)V`DorK=0%?eXtwr?jOUC@`k_o(|UwKEqWS7Ki8SMYgy+1!Tb(Va|&ib;+{&UGL z0++1VWeEQ%vqX-LC`PR&il!V*4NjCROr2es;&a+dIh{k>$tAi(uYk2tQppe za6SPK<=xs!C9S%h-pXy^taoN)0BN`lm3D?Q?465Waf5k4CiJO51m@t6P|>B(wnCK; zT`@?oy>NV8Xm`4-+Cb8^8+k4BkreEa;8J1j;FeDn7N>5}*SHeP9`Y`QJ}Kbt{i8ji zQyVDT_j3B3-^O)5%1xK=57cfps=hh<)5D znmQn-2j25&8nn#sr{@8g)&u7m{Ha=KD^GEix%R$E8~FcMG+c8KW&;!rGTU!=1wlZK zlC1N2+SJzSpfg7@;|Yr{oaKo?;=#w**4X{|$YOQ5m-H=s*cS5vaCI`QxC?5h;Qt!- z_^LCmq&t!xbele9`Pswobyg`*Hdyt$M{XZB4R)xvV-uBCx-+>Kap{tCStL(dU+NOZ zCdLC&hD1AXskke^KQGk}V-|OdzYfL6`@b$#X6IysB$#}uP$ZSw|F~3KJP>=l?TTMGEfZingW>5#nYfw+SOiaN#BiEXM^e2 z?t0Qzx8^iKD?W6kCUv*u*V!0O;QjN`k0ut57Q3=Y%l`GwxI+QA=y>kMB~{zeewRy? z@X3X3K%IZqk&cfcaGo6(e1Eg+!Lt4$9tb|HZ0WCaw4yKhP^3UhDQ5m?fd78ethZ9{(f&;TY3 zzg$lKN9;#FWB6xUuHRCr`i}@nk|QL!Xfp9ngc^UE(@FEV+~(YP$Qb=e?QOu<08xOI z9vR6O6>jl1cXpx?Vb~^khMV0(HUw>$Zh0>-Rl1sS6iT;h)bj<#&9jFIjxt(&oTctr z_bgYVuk|-6y;-B;y}*BP(ofxc`k$Qic$So*&z(K_#tE4*4a@0l1M;0C-TTc9$zJEh zU!>Gzdd!vO$XClO#Y^(%_89GL_qD*9IqL~|DrH*}kAW4JKEv#Lq%#_(P*aG|U%X== z-OxZ=lz*RsZ2Dj6hQ~K*IfNaTbQ!SCRMGS) zQOm+X3i*k7slFlB1^(iya6xo*9aWo*0jC{c6(yWH3ymnU4XUmfgm!Y9X z9ulxULXBAV-8&BJ2)dY3ZOu8dj%;592D0P5g+)4lnXdd#o`%SD1tGGp$(NNiy?=5F zxl#B3Oa@p#tIbsW?epXx6?P5G6hTIu$;eL@(1VgG#s{qbP>fX=$rNL83I|%9)8PNg zF;-UMrc5S91A2qWGAs4R9qRqqhYY#E*&i+~w(J4yoq4?R-Whs6&N;wa%YVdzqE%y; zUd<)us_DOyIWu=2n`Uz&b>3C?Y$M+Z(_jI5)A?z^Klosmib&_=u!3;_B=3yr;51Jj z|Kpx(cT?}c>mhmP`>c4f6wqN*h}B$&wrn}`3EygouIl!Zct0PPg0r(PP?cKtu{5<4 z0lD6v(ieW!JSJx=|4u(Qex;w+jg$3yMP@PVdiK6;hNDm9?|Yf|^wD}I>2 z%mU`s0(jR}u3PF_XeKAm&g=CAUwn_edTvp|#95$EEAo1%-8T{+sWj4qnFJHT3W@Wl z?Ex}&RoKA&5a;IxuiD+NSS7scWUCkZ)3$B#+DW9`62V|~Ri6b?a85Hx>@9qhMj9Yp zpRwDErcm}?IvY;@5<+M53=Z66wx|_w!zmv~A$I%?B~V0I8-nxjCx&=Jdmfs{aF1}emG$39$4}3SVqk?GlU?HVmDay!kJp6M z&w~TBbglq1Gjof=+7ZruMr2chmH2pqN19w#3l#k5DaBiR}z51*Yf!x+agkT z))dh~&j+ZVZoY+h9ZawYM@21P0e83YHo!ytGK|BTf-9btKIHAo1^h34`{<@Fquzd$ zesy}(gPzfrQjwp_mR^MU-ODi;70X3p3>a}e_>H8{EgNwz$sGdh4?QQiWyzTQt8lSD zyjMpSZrmBkvdC#_3^w#E)-(XzmY>~6vX5G;Z$wAQ?U1r>0q-3E4kl2?z05xM3zWr$ zRWbbj%VWWS7R5Z&xh42Yd`AFup(D4CyTZGnX2NM0Z6Z2xMOC9{#_1EPwn#wqE{G z?Ed8Ue^&h?hW`yP4t(d@Enw4V=r2rRdQ*vgjMm8t;MsL>^3nTU7*B8cgs^W7ii&m# zctB>^Ne_m`r2i+$E^MYHL3b@?w}n$ztUwXI#`)FEBia2DTj5Om6$~8#Jd0{wi5Rd*%fHE?Iw4 zb|b0B3U)uT8&_J=@+e51-kOK@s2j=(rTEM)O-z^hk$!mHTa~nEi3vPwq*9c)e^+S> zzPBD{lDqmL`+_m{)mHZ#Mn}VFXDF#f2{>j}N)KV%;tE;X9He@aXr5Mdg=uIV_ z5dG(d6Y0Se;N%0T1*K%{!`4~h6k5*-Fm_ImvV?hOaTA^^V7j^-DYyOF1kSU3{wIGe ziaQq>Cy*-UbzyhBnp1?!ZuyjQ3Gq^}-KxH+oSEgl^k;m)TvdML!k&Tc%ya_#q#?yc zD!syTk=5Qs%8Y9lSO;%fXwi$MIAg$9hD+aZ)h{#l-?KA{1N=v;-|5H`NL$pNn$>{l zw9BW$N>FI~<^exU9-v`y(xpH7C%?gQba3nU7TLD7 zi8lqF{1Y$PT{>;k3W@e^T6F}(zNO$X)y2?IGdek$F1qr!FdiKampzzS8ZY1@X=#KJ_X5vC1@mT%#!~V#QwHjq!j~7-Vw-H>c-}7{~ zR_Yb3w32y*xs=E(@xKcEpRiTAJQ=>*6L?PXPyVA)0}On2zPL&qxfiH#UKKJ~5>$3U z1swyflSkol;{P8?8W_ds{fm)?G98d#%Z#Q4QG#%~z_zI(nyDnM?FY!Dur|SFc6Y)HfOL3U zFyMr)JpfUSD=^VAPf$S)N<8*(98N76dA1aFBW*-wul8W=Df>Lq-ZxXzP_Eu?(V&UQ z;>=B`s|i#$q43}$yodK>H&haRtIAGWSI$gTAB zu@re^cztsb^=MVmvk2|SrzR4JXB`-qe(A*gNoK7ilO9IdhSN9st`ps z(Fl&bZP1XB3Jrgf{-Z45$X|9>T6;xJ;<0@!@hsVttSXD! znvDung{3IcEr&i*DjQtDvwtz9=e7yI?I2tHBr!9_WSc`Dq7`0E(o>l$Q8u-RR%%#| z(b#UfzCU~C`vf40Y5#=~i~T%YRY&-U%8sUBURH)_KOL<%O;ubI2$dQ?CqZOFJwNIw zoTIId&@t<4f)-v_XHx_?KulS_%fn7*b;=U_G~u|shS0XyHiZGNhGFqY7X}PHgCu$Z zSu3(;TN9&6HI??Oj-Gfzy|`WXImCa+3cC7Mg|8YS12 zwSo6n>NNZZm)Uqjh32K!uE5-u93E2v|7_<0JHRg&XP7$Gig|)cS`4?af{&xaxDDXq(^rxpXQ)woYXem5o|lt_yvS z40+U@dC-;FyJ=qNp$jtCQnFyA{oIESW&Ri~k zZJBWSxn)9qwIHs$-6$r6TPiqPSGuQj{wXsv3s~X6xl6Y7G#(sPjSiW6qa`i8A{2ks zBh31N%INra{YT2?(1zY~9U%y3bG`g|;`#ho#L=coF$S1ON%ULdba>k=7p`@5N?vP! z|I45IHD>1;CB~N#eU~GL0YC#)aL zG<#ywve2nZ;obg#ZC~o*Rtz+NTIR~P9f$6L)FzY03zE=+DDOCtP^NmX_7y6+C|;9g z%OCBLPL4z0s-O0(e>yPL=Ql9vXP4aDcu%M~v_vXvv=#f;r{}3`pQE!6a}#FkSU=hf z$0u5krnZyVfvKU~b_N*p@pgKeU*-MTp!PjHHqb9>#j#E}#iYGs#J=YXAQfKQ{Y)Gm z7K(q{Pc$(mwLmi6zp?&Z(fusE@BJdvF8o(A?GG0JPl^G_A8L>>^kRaG;kTXK&g(Y0 zFqMRfOU{*?e{MpMmLOOc%HeGW=5)B_3BOiqV25vU11mM6ft4EEMB4`tPjPH?HWf}F zN?zp+d%0CB8&?`{b`fugE@CevSq^vK?tbj%701|Yk32F7@@e2Rm_mV5JOelw&W@*m z?`7D8ry2Y)X8e(*NNKUywvRhHMc$2R+n>%{O{ji;g3&oNv)NdFP#2*qQ3{BVwk}39 zfYV6C&LEgeBz6@U^^HOC>Nh64rW2F_b}wNg`xYsJ2EtjM#eYz2DA3t4XPhs7cm$ys9UZ$YtL_>nQicsG4K>{ zn-a5h_da8r zHoJDMBXeqa$vK6w#|MgnUIG~swwT5osrOaGHulM zL=eQwKQyH}N=g(d1uw}HlsPb1X-(_V@mhNL=cAoW(v)P$|Dx@!qoUs8zEJ}O4@gSK z2&14PCDN%NhzJ}crG`*ZLZq7!P-=hyk&qe{=`I0jVHis36ai=G9&$k9?!h|eJnwVY zx_90Cr?u4m+xwfJAcKNy%+?yF?skEa^&^;t5zR;{(~o}(H?4%YG`_TEygaf4uVLia z$7exblVcWx$xhzPKf|1(8*G{nA1K3?I3;E0sl)STsXTL4to+s43X@74U<>C9=& z#lR&FnLC*kWnO$W?mg`vOKZl;2?<)GELxN!(47^=i95pJoT3#(N)W3NfbD4{g*N^FJsavmSQ#kY0SX&P)HZR*6b&osqtHNv>yS?_{Px9!xYlb0`X4bG-0V@A~)^PE}5 z&@!sAjnK9j+l?9Jo2Js2UQ|AxL?Uv$dMC1Pkg(b>kYdL=;`F^Dczx(h4A{x1_=3)d zSzCCU8@SANi+tFcVXpqp9||*CO>uidj^guJUfaSiGjgyWPuS;%StT-R$dw6-ZZgy2 zn!-YT)KKEEct=&QsTZtRblO%{bgjJoZW~f5xb~z|d@U{P!hIoGjMd%^Aw}=i?h9b;$ zKBt%)M@&>`!+hpcHUOnA7{guNpT)yZX>A^#Hxj!A=wl9N=PZfS82|h*FXyV08i`VP|~f z=A%_Nf+yv*Rh^jzYhyVr*afV|yV&)S)}i;Kd5VkMU2 zwEKqN^BU-3SIijxg_VY4#pKi#eOuc4Iqb$XoOi!wHh}aK+@6+Z0n2M{wS&lp_-I!h zG*~t+$;5kJh2;h-=kGZfZPa0lJla)Ip;TuS3o7vKC9*DmEsWp1E(?0^!yiBM#Hiqn>P#WuL7~Ar=cn(Zv{PFEy{}EKlUg0;w?V!1w%Z+4%>F%Y}jtxfGLlS^1)AO7}45&$zHE{Qtv&` zqz7M*)$eU=S&+cKc3XZv-84}@VZvAj+t0V3v=|zD7*oT-HP{#>dxmGZc=GgplwwBP z*sHvouBO)f+1O<3ec}Bp`4#>DL`;Fk@PEO&0K-73#mIy1*0SiGB06<)M7+dRDb{H?IrEWJF)IpMcj>>FA;*UN}bJRny` z4(exXOy1$MDLMp7d#Lvudhx*A<43X}Hw%j2a=%2JOij_8%}fciI-YalnEi(@4Dum@ z=pZ$BiHl@4yQ^dcRpC=v`93d?%Q((utH(1qdSz<(cr^>uD^d6*nP|gG3ogo41b>rn z4pbAG;G%-cu3Eyfkm_%%a?D~wZv!;dZ4x?ZTe-Q9_MYebd`I)R{rk9SF7M$(6VEj4 zP=+^jh)Zow3p|>I;Xa`DB)$$f=(Kx#sP7D&=SDd`N|bnop~($ncHNVHOz5E#f)5SP z^xNq#*mtVf537(W%I#Y*er1R?-f7d1NNZ-`(tpIx%4#u%LpHUefv@zoTvL*U65IEE z4fH9`IziQUxsS>)w(xkCH5M_YgRfLU7cuPY7T@vdCNCZ+7Sw#lNXcz#6xxm5`!d4R z)BUyfF??lKzo^ELf}dB8h!DqJ;Rd>aP~ zhR6LK66f3_hI;{%*7MT$9%4Hl9@GJIQ3`Fa|3qiM%~QilwF+Oj!u*6#iDg}uEFe%< zj8lz;BM;VR+dtelI89@7Q05~#x--1Ej|}7sMhvx<&)4#Yt#5Y!T1EU+DYhbFP^_l3 z%V~a>q_2;2b}Eweu-EH~*oI}Flvq9yjwqL!d4<^GVl`qEzp~q*3w)HGaI#5xP@=!_ zex&yR)R*9{8&0!2km}V7a{E~V`!up(PriOyEYOQ^1%TjsN~Dzo)tDmu{Y$NMr~VHh z_wNd7x~#F^t&44bgWN?ALGEckLGDoi$te&68_wRM1CZ>3>n1j_Mw?uf$i>pvS+c@^x@0;*OcE|TdSC$Jq znDP0`vRUO{2C^~-&;xJ+M!yB-9_7Tmx>G)$GToT0CiZafI!QJHpYFpwDtupmb%a{u zV22m)UpXz}NuMzfH%&Y!bj2tVth1L8%U=5!p_Exz)t-9o)z31QZ7)1%?2vQ4J5pAZ z`I_{{Hyiv5l(nwsxb!>r6;d<~M!TGc660!Lbg;cpJjp7^&#lfvFOx8ODnHI1E-h2L zKJsBSg)+!nd2J`sgpN@I5twZ2!vm-Q&r&ePY9y7rLzcK_-x@6L^jL5`7bGcEjuAk3 z#y6XF+aXp;`Kqz+MRb)(5N@Adp^%7h=8>0=wQ>@-jHLG)g@qPh&Ek7Yrg3Pc8tXxW zIhdn|*MWjEJ>&PiK{C>8|s z_y~@^9HY7X^}ZTJw539tW+A>Ut9)yCnGkOJ>Dn*V_#gGqYXF+2$qCbV+V*GB$WH6~ z=Je^=t_ZQDSE6E4>?69*ct0DRwmc)it%k_I(lu`-rpK%}^%1Be(0_5#k-7VR5O3}C z&AiP(A}Bq4^^K+RE2MPMMFyWR^WfOmJRGv&paX6m$Wo)E#GY$arnoNqiFq<#e;cRD z(ci1bCd9T~(_JK~dA#q2$X43LcrAWg5&_!)niesxBvC(^EykG-!ZAncQSoF6)8DO> z07{WkZc??!Jp7N_RnCUDxFiX@??uwidUpJJ=tE4Hk+!2*d4>ulAVU8}v+0!TzKB zlj1n}rGgD7qrH|kTx1&0`h;Ququri|*P3ew;{o9%Z7{wd!7OHZH~Vg{2Q25b?@ImkFFl$DsNE-Cr^Kfj5;b55J@{s@r@xA4fhg z0-ME_{w_WbL21Aw40Ko(TG)VpbXZU2(d_l*)nsh+HGMhKRbXrEtvc5{ebDFhM0o*G!zPbra{?Mr@_XoZoWro|?N>QOY>i zrewRQ;%(lbw@r`Ier~q}t6=oXVmO~8DM;R_#55G7WOT1>`dCRf@>9`85>~FWtDi2Z z^B9T%qU@_S^_p7=J806#e5HlP3a=W;ka>FeT#7|_ zvZ3(8lGG1M2MCdL_3CoCMDdBv0Ss)pR?NratA;_?lkeyKCJplt#1&bPnSw>reN0qVkCt+S7AB2Vvl-DXbi2XffFvYz*)Q3(knb392L zFprM0GY3z>T^8LfCp2QlXh$rusk3E`NIST$N58+zV?ap zVvm^Hg~EFqSe1EvNIO2jH!DB24sI7IFf0={t$QkdxmwPj zBH*^QO(^Q~E3Nj8lvMqp_hP!9$^~3{NKT>c(^}Y>0SNW?Q06mV5nCbd(Vq%;Tjp`y zZFXVqUXu~;UXbZ_Kc1eBstqEqvA4vJ&0VSn_e8PL`gdjpIoCHl9JDm-dla7V-*Z5D zVEUm*BE{2}97(zFDqfY8$cBD?%=of=zJxRbWesz5txc#GZ%7z)>xKXarO(a-9SJ5p zhE!91YVaK4f{FLTFy#M2dx-?>U2e z3Afn64e5@+u+sf`aoLa8B_=iaCg&2SEPndRf+~{RZ}Ac>Q+lc~UH#m5fQL{IrVEc} ztE8GW-f#G_Ghl1zN@B=TTe~1^KaX&4OvWQ&K#;%PxO(a<8*G1gqwt)Vb@dDEcMFDISy zHNHV2<=Q^T^d(SCl}6*dIiu^*@0|qNmZVDWu$e9>CF_-UXMInNy~@^QM1~~3FVf6f zC1laox9ao+R@O9_?~c-0j8*eA)_h-L_oQ6Z@e-WCP5JBj@be$wRzFrQl^!r1?A1dP zMsa-Mu!GeOz86)knT*mjwR`jAllNtrJ$IkuKSNcYeMZA~e7wF-F;}=(I*$FBivGe@ z|D6KBN4hCIO}2ly_lqpPpw=0BL?_&%`C1uE$i+L-0e1vk?Q^Mb5mxUccRW|{hUM5iWb4lbxAY@E$Q z3Vu}AXtdY9b${=cr_Q|eT^(OOabCvP1s83BDIEzgrK`&)`N0yJy#)+v|IHG@2;>KH zbg7uXluJ=`zmL0(0N6Z>~y?knbB4~hlX>9af z)QR&g#(>WCYFgFwTXFYeUTxe%C9=BwhHMDN&xnfRbmawiE4CV*E&0p7R2_MT_9h4m%Ibe*A;@%V5ANb8*TOFtiPe_y_gD9J&nv9mF7|=n z-Q6-?BL}KZp9+5z7zHxKj#e|s6uK!Rt>h>$bS_L767*>8{R6)ZR>vo|hr^UP(lzcQ zl0yQ4MbQq8a?>@7;lru4@k}Y7YXn*q3VnzQGPueWkBuvP{8d!*F)x>Xalo7h`sJ24|K|iFuJT+0 zZVRWNC#&l)>+0sU$!gh@oMRGCFSoxShJF8B;6OJ2?tU6N!$OvNIl0KN&|tex13ND! z-S@%}Aqi-B&(QzUn(}2K?x9%Zu08Jfz5IL_OJ;-XieT-2P;Ocm8_Q)H?ApNc&F`p- zz428ZN*E>JPH_Y7R3ni)B|_v*=?ez}?o{aiguP z;WvfLekPLZQhZkTENLSZ!gyh$7es+;BPsqiyv6%McIRw`h3 zVsV|gK*215$sU2zDNd_;2cg^2`O(u_sMeIISJMr^ki>!Om6a(Dkf)v~Hi1dGajB`< zY`EMb+ea28PT$I9XzN{oc#l>W&`aN=@^3E&F+-@}A)V_BeiTdH3oPs?65m%X^oR>mGSed2n$ypTvx${4R$&N2!_O_oJ4+x{f&M&Uv~>mP6z6F0Ayu z73VV&XFU2>HUB%|0T!6OE8$96`Cnb{R29DQK$J+}yQ_AhnfV`BqOy!ozyt86w_*ia zjw|2kxk3-sZkMAVa7-uL=!#6B(PW=Zwa95t-@*QsDd)8ozb!o`=c5zMl7A`VqeRD> zCPiJ^n@^vrxqNb_y$gMM?r##d*JNb7K{VIM>t3n8gh}?r%5-!X;pYN1t7#jIJR_+j zbYRuv2;*(%ErInJ>YhK7Vc8S@OKI`;`-_weTU% zqeln-ch80!P;K&EcuqWP(@NsP6F7-@D=#rxoLqZfsPbVWZ1nu-O_f5c``i2N!B^Od zA#ncnh$_(9S=0`MBDgQ<+xR?kz6|?txj$#@jIrl>*inB{CD+mWT=UZyEu=IZFE4E8 zR)4NfJlT8tb4j{|z%1mL!<{i7d(iNpS3j>qOp^^Nu9T||hPP&eDJ?SwPAIltsC!=c z1Ye{-TF%{{X9!`P|Dd$&<8R(;g0n!@cWy_9*)PN4l6mE>I*(rYxQyX|69J9~L*^aw zwTgR6J%OQT>T*c*Jk(=-fqgHKA}mr!q-J~Zi-Avx_)vgaFjegV0gK089=IIO(b29S zH%h-5yq*ejSulM;cZCRZ_Y5f|6>deC>!K&MA65_f^Ovo}`arIZ>uCkOj= z@6}>%K-_E6^Hk|MB<`UAaqq4cYPbEqonzpY`Cm_VF9&?Rqi(ItF{ zKYfugCElEbjD=x*(D}-xYyANy?m6(SUMgFSP!*}*iaEIcPwHOU4Y)gOMq96%7d0oG zC0ntg9E-3LG{^ldH}j0%v2Wn~k=2Vl(3-*K`qbLOd@1wRQgTNATUtcV!^3sQ=B>y& zamZpcnM^QZ|?0jfKr71omUp=1uzq zizzi&81Lg(#=HLV-0$WeW12_>r1@M@yk1b~I!w8Z zl^RCpftwgw*<*TM6#s29DWppHZ)yWXQ1 z8%1q@sBMasdvf3AyD!ok=e$g~nOLGXE0jOEKG}jTpEMi`lGCdyLj$-w^Er**of{GV zGfYFo{iH-q>i$6{yZFm1kt9UNPlcPVXcLs85Ts9Z8v9gwt~+(blMi`>9v31Ahd>(= z|Cla9|Cla9f$3uDTuOcp(R6Y8wJg+&?Nd)l=eIz?7l^75i{AKZLFIRrc{}YyTH_v( z))*~qu&s5%fZ60(q(7AOqMi5v`H^GJ*HfXSlD0-E4lQXS61{Rz_myv^l=5@r>|Btk zr(qd#UaMY%FUes^Y`}mvEX$ut(&3WQUY7EDJ2TCqmWNZT;VW`hzZzFbx2qFZ+1RJpp~9 z$eyh3tWffh5&)2_-)ehceA+8->|w91%<@rT#Q zJTAAjy4+G5(wyiSHYgA-H5=#F;Op7cIl5C`4#Ye@q+>lH2kIkjdIDcwn55uNrzbKf zFG+EEOu(lTU?I_n=|Tmvdfg6BVz@7zk_mwc$rFD@|gBAJcM+NwpvarafWPkfBEkRCiF zN`3n!%FU}KP~Cd*8q{4os)8WxF1vkhO?Nw^{*4!lj>bkblC45+N0&UP0o*vr~ff5qI(?eX;^?5=xmpL_|Z$X^%CEL6eRVRMF6cCwIk*2$4t57D@ z+UsDSi^vbk+@lKL^4YB#RPE@z#n`NuJIW;UeLaL94V&MI6SH#_I^bpP_;|YZ|RZ3>tj3=+0zp zl1g7N*(Y_zebAZ3-~9Sk&qFqD-|Vh1SQTR{#hRo|9wfY5uAj!#CW}%pcl!zQ;shNju$Ij%GZyN1o&~OMPRP9A)9>-A8--?jAKV_L%idWC$xBSBhW-uQ z^ZK_8>1lEv2^)K!4hpE>OVQ|f+$B=|Xrv0Cs$cd%=dy9t)yU-y8hcU~lL5Yy6t+Rv zW~(i?_!AJdU3~yFfiLRA-aM+neuvDb%&mZ9C& zpXt4vwr@fRDX|yCQl=W85P7;vfWnf!G)FHZ6g1VE?mTMIQoJtw$I$Xt_9b{$#ia(| zJokgAEB-K`z}RieQVe{mkd;*@DZ{duc@}#VdUAd#^WpzvqN3qv>k3*cSj1` zDBu=6-w)bw^^s#|NgoG~$%;wJu719VhU^}f+xdHUL1>RoQ?aQ$Wt72A24BE5 zihy6b;+`p#HnuiT7-L=fx}#2KtlY#pw&pATIDa24Cpatm(0;&`Kg6j=@TX+8_TkXu z7D@JCUaXR7ED(7b0K;1}WwBZT~CikbRV&Q*>V11c(|1pINLD*=4J4SrhVToe1cID`G+;7we3%9%3RgqZjGnCrv6&WfI{7>J*O6&+5oe0Lv(xV^bR@?=JfSg$vN7}<#Rb&*nJ{L)0+K>f7E28* z$rR@V*C*P7O4%DZ7 zCfQnVAi)%UTt;^8bi$m4b##WW?g_CInf4;j3>-z8S>z~>ToVwSOp#`ZQvF6gt0LQq zpz`CmCP3Xa+jx-@GIcCU!hJ0&Sj|2wrF3rc`^_b^4^x+8gn~%0Sr|vlfV=m0Cvpyu zO03tjP-!>R`>T8Efi~}I3a4+XC~-P;97r=z&wCkDNKLG}txW`!;6?B=8*-tfQ+noq zL%t{Zs3dw0)~yTF_1JG%@*|bYzoq?DDKZfOqn*cGgV`r5$eoXXIsW_+o-V^*gSDU3 z^uub?Z5KMv~K@X@#KQOhaK6}!fy`f!w+zzn*hzR6&O zGnY9yv!q3%;$^Ie1oO8}LFJ%W0Vv?K>;kqLFy0DEj>pbEO#Tv8QIIXRdfg_9s&Ks} zL(+XL3n@qXR)6T$uX*MGcmNUG*PBvtdIC>hSUk5}L;${+^24FwbXkj6G;&;F=J`B3Z*jK`@=iP4w%@C4O zZb;k4us{`L0aV5A!3v$(G3$-ydZ^HemaWK`KGjjhjV?p3hw5kF^gUQ>IvUzUGen>M z$*jky@Yp$0W69lDyx?4~=us*iu~59nL#bJ{+iQ7VMRkI&uPbi)8jo4t2-lMq{sbj+ zZJ75Rn2U#>Qxgzn8;olRm)EhK9z|U{Sb~Q^Txh)`+9ailpWP3NvG?#I{Y9 zkq_ZTll$?)SY`D^PPK$!Y{JFtyA!Or+EBK_nf-C z&J`8Oi`04SM7Zg&qOF&*Iwi7JC5dlM9m#5o!xSlHk~=3g`d-1|06#(Oq56}4J@AE_|x!h1`sil?Y&#=PC2Ti zM)cwWY)^EYECqAFO^!GC0#9VwCnjh7saz-*Ldl@NDBkyfQoNZDDc%`Xj|_fLy!C%k zyi5N<@pk+{@xBWv-em?CYIvVXvt7k#R$LT8-JYBpI_E(t`VQ!n#iTt~JA359$5Wa~ z(k2@%>1^#?&^bgD_b~=huL+C+&k^{>b2;Ek3RLzx*fgv9TeFSk0N$)#StMA`#~esE zc^5yRq_MI2038H9pFU9;fbmcnfbLG4tfD0|Sc{zNYuAerEFucW$_6oayBp4z>%7?gt-%FNq{iAHs%YSSL z*iWVL>!lqZ{fn#n<;^=rolP-xDOWK~{~&^QaQ!5Lze>TqJ_#%ou4}_Y3at61tnHm9 zkPt~LU?s*9jnB&D5TOk$&^@iR+Z9O;=`(+s!M#tmKeH-xNp3UixuO*B)9d~dcl?hj ze7XbOQt043Qo`vZ@$DiXqAIjCRZ|j#LXV?K{E+S?tcf40f?#K@x^DbOBxojs80$bcp6HZwi}cw=#j3ORF7JT$R`~75 zbjv5?#Q6u`yIvr5rbb`jsC0T_N#yaU^?VFu1D_hcOT8h_??pX3KATZvp3zX1$}$(| zHYK?-NsS72JGXqT@VshE%s_0-Tx6pZ@35eIZ-!_+ON2J5jCEw<;5&JZo-1yHg{Pb* z?~`0O`YB#PWFmdHNHf;!SeT|{(&fn)Fo%n%1ur>jv^K=sL_uPfMpFh|+}{!-uo35& z0Y_UXoatyTp2!#zW4Gu5$=IaeiCH|+xy@J{@Z%Uh2YCKUqMee5DOP{}kBro4^}lwY z{~NUKA(tQiVe`=JIC19E_|-StuOI;El2J$!_&iA7EntrqKFE_MIMjuG`)oRKz4IGS zJqn1VQW@3+1p2@J;WuSH75dw6>MrPJfB8-E{qmdYIrN)4PNS5n!|QWNllOYU^8y-& zu9ByJJ4#;s%QWg~{wLZ%0gK0UPpR`?>h1l-=0K+kz?&6#i*UgX>mwH=Cru|hgS%ya zaKY1laKY6mQsz=0apwGk3tj{#a=|~dgU+KX;?#2%+QV}SP!BN_`l&mm@3gCgW41* z=X5p^u+Ktwy!#r{;;!;}^%XlJ%q8Osyg-_8q))@6dpkk|*aH=K*4f9k$ zzSfe>WzIx4bFZ>mZ)E82W_0neSAGYr8SqphCrTuLmaymfmB+GffGG`FL?9CPq=dma zI8PNXSO0To_1#=A zTw2T#m;q?-UFB00W$2}2ypW$S8}if&o>6FpyR_G$0BudLST_(ZQaRFns@0;iC7_1( z9Qw7gJ~XQ#LqhZuJ~Bggya(xEib0Lch~FEy@QV!YsPuyjzW9d>{>exdL~aps1_HP? zvGLT0*M?g?FyZ&}0%UMd!Rlv^JO0gc1N`sRJ+Rfb|B1^1#KadcUin8(snd+8(pKEV zt(X3T$X(I@FCw>E+fO2QO1U7|%N!E9bN@@^*8f4|=4wT=)b3Ir+^hfz(XsDdo-~UN zQsnI}iz=vI&(-HqvuNWaPb@B&{lurk8IU*T2VWV8M076q*G&Ie+n0;Uzo~o zFPX#J(#mWP`F&f6=y-5jkV#NU0pe{LbzDyR?`^qGye-#9o&RxLLghCfHZwm$@%9|G z1RBR)^mx-a#~@+o=hKo?WcCDT1qZvR%zGME$?!zFckzTN*{opoL^i#>6y>qp)3qI&76EA7B{ej|pyf;&=eAGU-`sjlP8z`=nxe{3C<* zAvlKsY=O`dJ4crd0w2ty$!C@+8eqp4|A8F`bF$!`KaA=UA~p~d=9dU;y(+{g6P4^{ z_a`I$h%%hSD8oqr;I&`Hx|2Rh{1Taq?(ley(-Y-?v6l6JvX-a*u$J|q6TXHDInP9P zq)}EajFlcxb?@NxhMVjp3H>ZxkqQ9+dAauna$&$~iHannk{=^N0j9TtZy zef$|_<*lhZ=Ye*A?zIk~B>JPky#eL&An>W_5Dw`QvH`#me)||c*ipP_JW7q z?_ZENB!XqXW3=IqCBd{c(dqmPS_|30U;N-4iIpBUsT#s-OFm86$i~h#WiQVDkWbUt zZx`eWdlj`4Di*MF5yvZcFo8SRY18TE?dy;3epV4^6n2P!j2T_}UMDa{RRbF0X$coM z_0^;wjupd~Mc(x!exgHAi9YQKGEt6?*(2eXeCLq6b4&+#{WeZIm&D{Nd5P-_bM^ML zJP1=O&ETw8cGotP(4T+y{+^ahA5Xe@VX)vyAUn$CXKcyEMBNuKK9)2{_m4gs6&l?q4d=IGn9}76(Et;YW$Pdx^kb|jhE~n zq*fm1yQ^$mo)?kgisDgv|AW-pTe*sBlZF8>?})PdL_>y0cVQZpmq-?AF0Ui6?sj3B z!OM4jr|z6hI7<~KI2C4{)O%lU>P3}1*5O!m-AB@DpHuqNbvpfeke1xLa_fHi=a!k- z?Iki*@A2*Ud7%Z87P2}rz{sk-54Cym;lDK(pglL!^$03AqhdI1Aw*|kwMc% zssTEWiD%`fe?`|^`NJ4f`bSYKeU$ZoDr(8qmNBpM|3d@P^mod38OAO+<=6~g@?w5Q zLy36i?o)@n*0|iol1wg%f2=rihkufX0fwH0dh}U_Uyxls3K;rG0WWr|q5wqHR(e&a znM!Y8^E{y-sIut*q<_cU4Y#r5!E$S|_q7nN|Z6J%8q_|e=t z5>#ut!69Xr#L2mkq8Vy8(?yn6%_btKpgvrZr!w9R-#SBn?UtkOjjGkx4S6DtiXKzF zH+lo-uDp#harB~b(1e)fC34vcT~c!KqVagy97qG0X!jKIE0i2IH84woKc|ke#Hk}h z8iZfpsBa9v;%LdwxyY>}?EM!Hi@anPyW#&7c^8lE?~bOeRQ^%f>byn+is7Wl_gmK` zS$a5S$wycLU+R&)MmJdZXu0$TXp3aGYg!o?-MC zN#K@KRjz`0|1(uj68T861n7?^O`ECn_wfWeq|kAMGz16&7P7lGWNc|xz8pFT z4o7Hm_yjp4{a*(UJxSK7o$p z1RNqsoFLln93-Z|?iDE=3-YTB@JH9Yj30bAV6f4MHdCXpR&r(x%Lz@4YqZ&Filjw+tH0{2X_n$*DJUpb} z8tZ=?620$2S443S$3W_F+E{|<6N5P6kg;QOq`n=;^iJ-ROD>Q}+Jpdm0>YKhR)M@Q z^OhUl=eBgHvVx68f;f>5f<%@QltUvKwB2Uf-cxM<@^X0e%gezb_wm{K&mr-D^Rv7R zS4vF}7tK0dz(CeG``9q?CQTYs;Y9(S6ZNq$j-xRHT}B&yNQc*!>fT_JZXPbM(SoD` zP6a{N3VIN8*$kqSJYqs@WZMN71B@oj8kP4KR5!X*UdC=bb^0eqiI}Hs;rt`MKSpFA zPjUUoQ;63%NhmS?G!-w&{5c3>nDTvpgBX7p;Cg?;wIug3HAO){PuA(-|JF271r{LK zrPr4HqX?TP#^cR78l=Cx9Nvg~eVdISmjP?{Mry>({GFL-@}VT5fJ zcoe(!Y4ohJv5T6?Q&RS4-F<~h402N=@XBom-3TOuIJxhA)L*0$xoc~*ln*f5tC@vW z5>5opVc@qCsFuK>8Nzn#NTvEM%Io*NC+lGNBRL*f`QrUWLR=HErm^`ucf8k&T0oUu z!<;D~H(OSk7FZ>_zuG78*Cxj-)BkTt>m86)cY1J`v{XoqnA~JSvFLY?>VvOQrGo&? zb%oI<2hbsQ&ld?_k9jd+y-lsbKB>_0;R?k4p4R1E7BsEEH4SMmHZ)B`WWG)U8(X8w zOC-}XuXy2BSm7!rRyrp$U))@L)jRdR^V^eI2&<(-KZjv5lVJ+z3p+(g+e1GGXUiXc z4x+%%LG%CQ=g|LOKZjh^>^uAmgj+9BiCIXs>Pw9F6Htb+(OIU+A5izhSH>cF@sE2! z^pCmWCEsGtbR}Y2<-Jqw{wwkS$aJ0DWP~-(gu11-zcOE_JgM?)Y`7_Jj|oiD6%cAKRl*q6gt~jt`DygMeWpYD;OH0m;md<>36oDZ<2x~$sZdB7GUFWH2=nakvVR<>v@^UeOV- zD%xr0qZwAbZ{gO-=F(@z$E6h?bAlT5Oc6pa=pH?aDgxD?j8dPTT@HGsA^ZY|j33qh z%#AuLFrHAx6S#8v3@779J~S}<1bOr%)vnMmv}W$OFV(czg$A3->r4HpaQJ2<~qBm0Q z`r>%3b^I>htQcfV=nf!BRDWtiux^N!pE}a4;ePS%Y=>mW`GPL9<2RjJ-;5SS!SIsy zAqvQub3&~s&9_xW*XFuaFiIvgb*rNpDF$HP*dC1QlvG2=G}mevfbq=hJO7_neP6%? zG@!(`oc9S#v5s~*Km>>>RhIL|(*+6yiW8>~ox)fYX1sxAKa|Wk=T$?crni!!5et?Y zsF|*&K)f2;>Zz`!|MY2a#CtN`CHgeP5q%oMe)=?wJ<^0q0bLU-qwQ6tLQWu_m1kqJ z-`b$kBY<>L(IImWQbu(|A5VJPvG?KwTOfzrGfnS{D4$16Ks$8DvVGb;R~ogW&5_hD z4cVWWjG}ANKF&(&(+i%u1t3P|8T^`ldaqplzngxV0-1;%jkq(%VQa%PLhm?}xA*D4 zoN)ShVj1C#U_=)I`~iK(?Js$DB2D*^at2|5XYg~a^J_!)@HoltcJ*m_*MDFe8=!(E zZ#b7~aB0QeN|x#VQor0BC~01I7AwVBpRT$xXJ}6nvvyF?vHnSN%z}zP$Jj8ohBYAYAbupGV!iu)|6kLqZ+GvAe+BHGsey! zQqyphPkc(EH?H~Cu~XCqEqM~3j#F4atB|L8@|5fB3RH=N?}#P8rq8T4z(siV<`#2zpE z$nZ1NH1GB4@^=hy+12kJnem)tf6=k#wvdx4@Hu>8E||rAujKMp)=r3};ycR;qTz#G zX@rgCi958ccleb=&}7uZ)S{G0p|>JR&5ph@B8N}vayVphD`xF7UazC`m#bJ6@55-k zzsh&;(M%bc!CwOcrlq#G`O39_!bZOxOC#HU83o#)iJ9c^|G-9xha3G_X@GwN4_;B3 zPWsf6-2TOy?|Tp>W8+Dbc6PT!^UtEQjuLuUQ@Jo*kz(;3qzAlf3k>=(26ZN(KOgxV zzHO1?=7CvS>4Rh6F?kR)HOHzw+bi&5g;VGXDQ_jf1EO{rjZm-ze74#0)|*y8e#;Nd8j* zveWy9l8N#zMoRhBYx&|nN>PIvFFPvjd4bX|hl)rh>?_BcL3GUW_N|;g6e;G+Ixzc* zZYijFA7Z^%0d|*FYP-4Pnzs@`JRU@8U{G<6apMdoLqsN%5g5K1p(MOb6-rPedb`;# zlzHJ<^1KZQL5C+3XD3fjdmNR2tsd$$A)g**t<67F!X3C{d5%h!t^KD%MIzm^Ur^4m z-B{r1kVPpw)11k)keb2Cmt?Tig#lsMG(Q><9I|F(I zBfs6IO4dS^z0T#KnB0X473CYIdcfwJ18%;~T&Y~;wswGSeI=ab_tzEhR56WNuR1Uz z33geR-k-MwlGB&=!b7RN_uH9_k6abWt0IKNwWjO+Tsi)Vc^Nb$RtIaIC$&2?g(hvM z8@s-Xo?*UNu=rugxWlGj0=yCIv)kc}Ig z^X3@Z$Di~@Ljh-(mR{kV{ZhxJP{{sxQ(WcaSb9gU-*w$V{^-nxwO7D zGHl#mHddO{V>SDv=n%7xG7qENDaY*zp~2LSy)K=dZ>q?w{KOf0gz@*lQ0{B_UaLA` zi?fpo98(kLYLq3<`WXXbKjLbrUVr8wU zxwOH8$KEzMyNqhAZB6}+_r4|nKxWkO6M?X$N+bXR$+vlGDdZ zcecHGug(QFz9i=l6$_s%QdjL}Dm$1yZ~ujyZ;0z;)&5s|d}dT@lQR{J9=09QVP%&7xaPWCm8>Ge(VvMXSU`&j7{ zev%qF+*yl~626$(+RieMyz9c6Dl$_h zvYvZyj}f;EB~8s^Yz%|doLkB&k1@HPw%yU+c(r3Z`X|N&7;$(I#W{Db(V4F{enTfT z=5BrfDvC9gkTaghiGZRnu?)ec$G1ZKc^3N}7NwJdO(j^89@p>&nNn9ofWK?;wwGqr zEbyZ`MMhV@3Om*DuPVlh+Sg!rca-+_9;Jt}(fa#=GmME`{piH+K9I75jamJ{a@jr0 zxa6)%JLJPe8EDKbt;LNOAACvC?ht9{=1ep{yR8Au*8T*mJ+4HD-Xy=Vh(7>mxmHb= z?7dwtX>KC4QPr^2COp10$m{#w@z;&Yp#Otzyn2p^ZUpuYmNe5RSeMN^5#$YQCZ~59 z?ftt;%G+PFtyqqusa4s0BwPb_bI`?{;Sv^0%HHN(QOeuFdSLBm{!*i29Jf+Hza5ES z37Qj*7*5mI~!3{EaiH z{JzRLYYoB$oLZm$rZUI&Ys)8@O{i`ahrd!#|8drcg)QA#gs-iJ90G_BulQ!S*I6U(;?z0b>=ycTiuVc#JVki7L5wVj~k_|$47^x8>nJSCBMT5aE{dzmi)Dr{!w$E|j3j%nK zpQ4c2cHm;dw>HFK?l2xm!wq8Qh4rfD=#ao$bohAn->52g-lD~u8=j2xhWej`eH zoqf_YSN0dgaR<|XN%MH_UyuK~gR>$lowAA$@nJjSXJXo_?0%Iy_9J6=l-El}2#JiJ z$=SC(!CGvx?I*Y$SEqRB60q9J)_rYTkt2vb!MD?A1FdKqSY%%0ukEb9f%G*%ApOMs zI3h8pBK0_!0=6OpNMeSm54#E{S(o!Pp`nYu6r%f|P$8~t08GHpq&7yd+I6=-g)kwl z<*j+re+`YTM;S2<$W%?%y4v!lotZ`bD1cY2Kn1rp%;l#RIuO1@)5ahWdLF^3j0>nQ z+^VO0OJH#UAN_a}I}2SvEXTFNo#)EfV2Lm(3hTXy;NWMXITK^zP!11sbv(CsAl+c0 z779lMDNiZ3vo*&2y6Pe!@-@S5YK*VEfp6;t?UT~AnJc8=E09~P) zqw&CKSNimnezDc3Hrb-88qejKueKIBCZ&1W#kaWh3&%!f%zHlc6^bruL7tTjC7%9w z^=`^Tld%u#L#O#6DUV*eAQ9{S>IKh?9-!m3`lmFhj!F2}RZ+`!0?p>)6I_vXktLVeI=dV>gT${BCv5bDr<>`)jUC*VS;} zpXL32zqYU5m7;B*KvEnR&8K!f$+H6+EzOcGiuoby_3kZgBDP1;O<+XDKNI>#{G5P{ z45GFQm-Jh(|8pAg?$$ef#8x&HEj5{S(LL(pDf6?X7m$es>f)ZVH%nDo7XfiPiOHd- z#8m;}gS(;)n~wBO16@j)t06h^UW?Vz{M0G#T!Iv5h|}t6p?OjJg@*@@w}N8||AMxv zb3+v0ihrcBp1VCP#rk7UIKOR6!*KGvObf@dB^TXsDIc@@L^h2i=Y733g)d6(<_uKY zZa&*D*$?}aIj;Gb4+oL~CcM)DaFjXju1c$hRID!Tz4sYzH`zlv>FV299g*t2tT$9SwGO@Z_U&(JtFqBj1^S1^6odZBmu>(oLmctF7#lLcMMm3B5EaY7Qp z<1#3^!_f1}y{>HCk*fRNM|<%0-kg{i)u_YkrM>-INDX+n{5~t=`NVUg1@Wx#DHkj9 zY+Pkad6uVV_v?9~Eni3YvlIDT17YD!5JN<@!>D3hn@Uu8h=#f}4-d@-tI;buR-Nt; z-s9c;gW+xsi!2$2IpYz@Ha73~H+_a0ORTmRQ-J+Fep)P{IvyNkE`6z%v#K8G54 z8PyWms&k%ou2`1nL_X|{bIY9a+IO9ETWXyO#WSxl%UqQ`Nwb~%wjfx!1)=-9_&gnS zK!1@gaYNq=oHkKE_V{@fcpDziD;k+-Z$J6$yfth-C`EIj{Q_$VG3kuc?AGVvOv8bP zi_RU5k!yPwpJ%S}RzA-Cc6hs-63An^S^vI|(mqv_S2e_IR^GdH!5tswV)H+NOe~#T zz;*5XMYO->a@Orc#;0$~N9!EUWI8CoTCE*1!a4Y?#Gs;wxqQ9ebH-)z7AT(v&TI0lxhrUR5TguGR%^%03we z71gS(YK)CFyTOg}fltx|*35~siY4aIn3Lm?{a}t-{55|P3{I0D*XCEfW3ktjwLBpC zB$S1j<~&JZ#7QaGa>uF-M+}oZ_@TipO$iV0Z$50RxzO8+<7R@hsGNlE-4x>tpkui{ z!5HaDY;r3xRm|!I&y@dyoHm02IAtf1(@$%?>KP|yx}Fv;&HBt9%4&5al3iZ~u5nsR zZK#{P$|?%Mte^O;gCSF5rtror+E^J@Iw@(v)mo>JBBScA{zHYnqGRWh_makyJ`}K6 zD)i~BKxQFcS7e76@3Es=c<%N57Vnd^5|0+LqBWPL=scrOt6X zVzzk<8Nwf$FVG<7z4LgzpPwh0JaaH4UL4d=EsO@8@v@~a$<=IGfEI{cv%#{=aIQ(-mBM?yQ&h z$<&&?`U<)gCu__mOPq)*;Zd2im}l4`>>LZU5oSuCQEv}49qbHGg`6ZI>k>+qe3x2K zsosyi8i4nFbtR4?Fqux7_&453vC>y%kI^DR(t?Q|mu2qCIBgl2->z|{Yo%*=r~0!4 z&)==Y20Gb3oe*8;v5~EDI(K*wn`DJ9(%NKyRzBgqW1?``O;$DUuE zdal>aIrUb=A*R8N>n8&^y&G|fh+x@$YL~+d*Q(Gy$S&ur ztE~atgfAEon=2w1+ZKf|?!u211B~-Qp=W-i&J+dClab1r|RP{L(rSAyu+I60%dPpdAqITG`pgJ7!vCI zM1@3Vj+S{a*AiCwz;_u6)XLbABQvt4^_6QZRJz|{Vg%BlX{e(*>3x(0Z2lYN^?l>( zJ1x$Hd8=>v1_n0?tdb7Q<%-}{bP~SsNg!qcC51`+Bun)BY2s+TO(~84l!QYr@#Dtw55yeH#WR0yC(k0ewCrGe@3Kq)w{Gz$DS#%n$y2Qu18*2QEYjLm$aa zmD8_cr9Np7QaG|Z@Q8f(>9N0fBW&-kLCw3^?)V3ti&x`hm+p)gplFuA*3u*tQneI6 zwiAl}1Ig671MS%j0(+@BBEZ`s$!lqG#V=N8P@pb}|1RL&02Q+*lzmG$y%^JH$i_@-Vv_QB55;w!NuN;k-6n z*%Uxis65C**tB0q?q~4vt0LK7HwWH)TR7mO&Bv@(A=r>?ou61<*)6(Z-aTmL%f~AX zMIG*0fVHerjc5@eJs44P;0rI?u>!M;Wz}ijNc52bwyDzsGQP`=t{H(L-IAK3z50`2 zN>!V};`48Bt{S_q+O-97m%cw%V3qXNe^seeY>dwP>6{5D+1b{-`&z*VloJCU0u|hf zCfJq?ZZty6YHgreYjNJ0!0Ix}e?pcLzoVwLod!JLX)3YP$NcN#(eSPGo&Bo}p~)&Z ze+E&ktn6GHliaFH1t|4|nl*Q4W?%vAvidryGVhx+ZmeJ+QL_z$@|Z72j7Ry=z@ce`lHnMDlRVmU@8{OjjEe}q^=gGCEJrVzHP}q zqLfzlqVDcTDdB5MU6aw*K+h9e%anJ8!GBfUkK@10nDpq(i;w3sBpm8iqtwN(XDXEo z&?ZvpVm2c|j%;Vh6#_tBpW$gjLi+x4sp+Afc%d7dikW znQ@_@emWnt+%gzs`t5w_9l%$s{DvuSvSST&B2l(`yVUd8lMgyNP&H4O`5XeBUmhB+ zYfv(=&Dluh^po~#79rR)%j1I|QH1mk#;8(!doNTr!0wD4P0cwOpxwYe=CCAj??C11 zW6_+3BL=$!5Pqy(Mj5wvG5PIC+GPev7E`ybDPE!gFF>P$_opl_3zSVp@z|#zk=Sob zSh`A^7`H70i|6oj3{di*%jl7yPgLFQuXxy|J&ySj10*r*BqL}q99`hG{b0lr{ty?+ zRaw&JZrQD7T=OUWnq4KTL5ADSp&LvZKYfqBVW;7hwpSPmplQ_Fi(as9ka2~cwc49zwc0VFd=JtW+EM@W_^8$qKS|eh9JYP(*dtYXoOYv7 zpBub_av81f4OMB#D#@0_PV=dirYZ-m5ayjnM%Nr!vBv(zmCeZMp#jLsM=N}hM_NUO z)9NAq;#g2zs`=4_w9(SfreVmkhecw|hkueE$e<>yxlEFxk172nd_NPoBuSLB>L)TKHWIEU9@-=wj-}yzm)dfAsGBP5`AKY+ z{_2O5iM4+K;SFflz$l!k>?F^fa`&GWum$-IZN!JCTE&@oH?lI)enT7SxhhGhM9J8h zFe|}868|1Jk@^gSnuMh4l@P@fP4;|2jc@kq^2${tjKAFZo^Xd;` zo21EbZCidjly3c8Kw(eod~I9l!<=hi;=?CO{7$8|_Or{T8mfgarNJMoZTjZm;fBFF z$LY@$M7ESRm6$gGmuDSdzW=o;L+@5~`6J)2t*^KU^6HFd#^`I}H?L+Z8@n&O5=;R) z^ZF0ra@pE-0^~kxn)%kA69YcugMvc3B1?1^JHxPL0a>EzCwJ(n5@}H7mlA1Gth`8a z1G(Q^_NH)+g2S~MB24kCzPLJ{1YA|=Vfd3B4w⁢*DYOen=b+W$*ds;k6juog(bm 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

    wRu{c&mwQ3LP}!2$_Oeqh?dg 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

    mu$d0e?Qv$8Pk8ae#tu*xV-(1q5M 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 z z^K4C}Q%WC!6h&JLajJc3lgr^V6)RR6zeb6_`0fZj{p%$NtA>waGd8Q$_9RV`7)u6E zqmkGBI1hxc7M z?XvgnU-vOL_TqBgNSbeu#uv6G`)}rlYL=o$4c0l$0l?=ps{M(oT1MF-e+^u(&*zmsJD*x-*qc!o)j${p>*UjA_C)4tsyJ_h1qkh8^MLxt!3OoeN& z(;HCDGx@&DiJXob6E24M`l)09QScxxQ

    q^suW}!q)Ie<3rxdjYW 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⪒Tl02}zmzgdjq~g(f{ouxz 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 gr7N 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 W5&6F7{tw{aq5a4A Date: Sun, 17 Jul 2022 16:17:08 +0100 Subject: [PATCH 109/816] clear text layout cache when setting diagnostics --- lapce-data/src/document.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lapce-data/src/document.rs b/lapce-data/src/document.rs index 17d3a96d4f..448582b42a 100644 --- a/lapce-data/src/document.rs +++ b/lapce-data/src/document.rs @@ -478,6 +478,7 @@ impl Document { } pub fn set_diagnostics(&mut self, diagnostics: &[EditorDiagnostic]) { + self.clear_text_layout_cache(); self.diagnostics = Some(Arc::new( diagnostics .iter() From f2e4db2f4bf1341f806b0f3dafae544a4f52be71 Mon Sep 17 00:00:00 2001 From: MinusGix Date: Sun, 17 Jul 2022 20:10:24 -0500 Subject: [PATCH 110/816] Check if line is at the max in line styles --- lapce-core/src/style.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lapce-core/src/style.rs b/lapce-core/src/style.rs index 2f5cd51d87..9c4b8e8e46 100644 --- a/lapce-core/src/style.rs +++ b/lapce-core/src/style.rs @@ -9,7 +9,7 @@ use tree_sitter::{ Language, LossyUtf8, Node, Point, Query, QueryCaptures, QueryCursor, QueryError, QueryMatch, Range, Tree, }; -use xi_rope::{spans::Spans, Rope}; +use xi_rope::{spans::Spans, LinesMetric, Rope}; const CANCELLATION_CHECK_INTERVAL: usize = 100; const BUFFER_HTML_RESERVE_CAPACITY: usize = 10 * 1024; @@ -967,6 +967,12 @@ pub fn line_styles( line: usize, styles: &Spans