From 81474a3de01b0d5dd2e68bb30e07e50de722a180 Mon Sep 17 00:00:00 2001 From: Finn Evers Date: Wed, 13 Aug 2025 13:17:03 +0200 Subject: [PATCH 01/74] Change default pane split directions (#36101) Closes #32538 This PR adjusts the defaults for splitting panes along the horizontal and vertical actions. Based upon user feedback, the adjusted values seem more reasonable as default settings, hence, go with these instead. Release Notes: - Changed the default split directions for the `pane: split horizontal` and `pane: split vertical` actions. You can restore the old behavior by modifying the `pane_split_direction_horizontal` and `pane_split_direction_vertical` values in your settings. --- assets/settings/default.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index 28cf591ee7..0f1818ac7f 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -82,10 +82,10 @@ // Layout mode of the bottom dock. Defaults to "contained" // choices: contained, full, left_aligned, right_aligned "bottom_dock_layout": "contained", - // The direction that you want to split panes horizontally. Defaults to "up" - "pane_split_direction_horizontal": "up", - // The direction that you want to split panes vertically. Defaults to "left" - "pane_split_direction_vertical": "left", + // The direction that you want to split panes horizontally. Defaults to "down" + "pane_split_direction_horizontal": "down", + // The direction that you want to split panes vertically. Defaults to "right" + "pane_split_direction_vertical": "right", // Centered layout related settings. "centered_layout": { // The relative width of the left padding of the central pane from the From 8d63312ecafca3c701a0d3f90da64043127ee3d9 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Wed, 13 Aug 2025 14:29:53 +0300 Subject: [PATCH 02/74] Small worktree scan style fixes (#36104) Part of https://github.com/zed-industries/zed/issues/35780 Release Notes: - N/A --- crates/fs/src/fake_git_repo.rs | 9 +++++--- crates/git/src/repository.rs | 42 ++++++++++++++++++---------------- crates/zed/src/main.rs | 10 +++++++- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/crates/fs/src/fake_git_repo.rs b/crates/fs/src/fake_git_repo.rs index 73da63fd47..21b9cbca9a 100644 --- a/crates/fs/src/fake_git_repo.rs +++ b/crates/fs/src/fake_git_repo.rs @@ -10,7 +10,7 @@ use git::{ }, status::{FileStatus, GitStatus, StatusCode, TrackedStatus, UnmergedStatus}, }; -use gpui::{AsyncApp, BackgroundExecutor, SharedString}; +use gpui::{AsyncApp, BackgroundExecutor, SharedString, Task}; use ignore::gitignore::GitignoreBuilder; use rope::Rope; use smol::future::FutureExt as _; @@ -183,7 +183,7 @@ impl GitRepository for FakeGitRepository { async move { None }.boxed() } - fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result> { + fn status(&self, path_prefixes: &[RepoPath]) -> Task> { let workdir_path = self.dot_git_path.parent().unwrap(); // Load gitignores @@ -311,7 +311,10 @@ impl GitRepository for FakeGitRepository { entries: entries.into(), }) }); - async move { result? }.boxed() + Task::ready(match result { + Ok(result) => result, + Err(e) => Err(e), + }) } fn branches(&self) -> BoxFuture<'_, Result>> { diff --git a/crates/git/src/repository.rs b/crates/git/src/repository.rs index 518b6c4f46..49eee84840 100644 --- a/crates/git/src/repository.rs +++ b/crates/git/src/repository.rs @@ -6,7 +6,7 @@ use collections::HashMap; use futures::future::BoxFuture; use futures::{AsyncWriteExt, FutureExt as _, select_biased}; use git2::BranchType; -use gpui::{AppContext as _, AsyncApp, BackgroundExecutor, SharedString}; +use gpui::{AppContext as _, AsyncApp, BackgroundExecutor, SharedString, Task}; use parking_lot::Mutex; use rope::Rope; use schemars::JsonSchema; @@ -338,7 +338,7 @@ pub trait GitRepository: Send + Sync { fn merge_message(&self) -> BoxFuture<'_, Option>; - fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result>; + fn status(&self, path_prefixes: &[RepoPath]) -> Task>; fn branches(&self) -> BoxFuture<'_, Result>>; @@ -953,25 +953,27 @@ impl GitRepository for RealGitRepository { .boxed() } - fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result> { + fn status(&self, path_prefixes: &[RepoPath]) -> Task> { let git_binary_path = self.git_binary_path.clone(); - let working_directory = self.working_directory(); - let path_prefixes = path_prefixes.to_owned(); - self.executor - .spawn(async move { - let output = new_std_command(&git_binary_path) - .current_dir(working_directory?) - .args(git_status_args(&path_prefixes)) - .output()?; - if output.status.success() { - let stdout = String::from_utf8_lossy(&output.stdout); - stdout.parse() - } else { - let stderr = String::from_utf8_lossy(&output.stderr); - anyhow::bail!("git status failed: {stderr}"); - } - }) - .boxed() + let working_directory = match self.working_directory() { + Ok(working_directory) => working_directory, + Err(e) => return Task::ready(Err(e)), + }; + let args = git_status_args(&path_prefixes); + log::debug!("Checking for git status in {path_prefixes:?}"); + self.executor.spawn(async move { + let output = new_std_command(&git_binary_path) + .current_dir(working_directory) + .args(args) + .output()?; + if output.status.success() { + let stdout = String::from_utf8_lossy(&output.stdout); + stdout.parse() + } else { + let stderr = String::from_utf8_lossy(&output.stderr); + anyhow::bail!("git status failed: {stderr}"); + } + }) } fn branches(&self) -> BoxFuture<'_, Result>> { diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 457372b4af..3084bfddad 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -251,7 +251,15 @@ pub fn main() { return; } - log::info!("========== starting zed =========="); + log::info!( + "========== starting zed version {}, sha {} ==========", + app_version, + app_commit_sha + .as_ref() + .map(|sha| sha.short()) + .as_deref() + .unwrap_or("unknown"), + ); let app = Application::new().with_assets(Assets); From 6307105976cc7b33abbd32fc5e1e413c252a3eed Mon Sep 17 00:00:00 2001 From: localcc Date: Wed, 13 Aug 2025 13:58:09 +0200 Subject: [PATCH 03/74] Don't show default shell breadcrumbs (#36070) Release Notes: - N/A --- crates/terminal/src/terminal.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 3e7d9c0ad4..c3c6de9e53 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -408,7 +408,13 @@ impl TerminalBuilder { let terminal_title_override = shell_params.as_ref().and_then(|e| e.title_override.clone()); #[cfg(windows)] - let shell_program = shell_params.as_ref().map(|params| params.program.clone()); + let shell_program = shell_params.as_ref().map(|params| { + use util::ResultExt; + + Self::resolve_path(¶ms.program) + .log_err() + .unwrap_or(params.program.clone()) + }); let pty_options = { let alac_shell = shell_params.map(|params| { @@ -589,6 +595,24 @@ impl TerminalBuilder { self.terminal } + + #[cfg(windows)] + fn resolve_path(path: &str) -> Result { + use windows::Win32::Storage::FileSystem::SearchPathW; + use windows::core::HSTRING; + + let path = if path.starts_with(r"\\?\") || !path.contains(&['/', '\\']) { + path.to_string() + } else { + r"\\?\".to_string() + path + }; + + let required_length = unsafe { SearchPathW(None, &HSTRING::from(&path), None, None, None) }; + let mut buf = vec![0u16; required_length as usize]; + let size = unsafe { SearchPathW(None, &HSTRING::from(&path), None, Some(&mut buf), None) }; + + Ok(String::from_utf16(&buf[..size as usize])?) + } } #[derive(Debug, Clone, Deserialize, Serialize)] From 7f1a5c6ad774650554e756e54a81c5179d600e6c Mon Sep 17 00:00:00 2001 From: Finn Evers Date: Wed, 13 Aug 2025 14:02:20 +0200 Subject: [PATCH 04/74] ui: Make toggle button group responsive (#36100) This PR improves the toggle button group to be more responsive across different layouts. This is accomplished by ensuring each button takes up the same amount of space in the parent containers layout. Ideally, this should be done with grids instead of a flexbox container, as this would be much better suited for this purpose. Yet, since we lack support for this, we go with this route for now. | Before | After | | --- | --- | | Bildschirmfoto 2025-08-13 um 11
24 26 | Bildschirmfoto 2025-08-13 um
11 29 36 | Release Notes: - N/A --- crates/editor/src/element.rs | 4 +- crates/onboarding/src/basics_page.rs | 4 +- crates/onboarding/src/editing_page.rs | 2 +- crates/repl/src/notebook/notebook_ui.rs | 2 +- crates/ui/src/components/button/button.rs | 2 +- .../ui/src/components/button/button_like.rs | 4 +- .../ui/src/components/button/icon_button.rs | 4 +- .../ui/src/components/button/toggle_button.rs | 60 ++++++++++++------- crates/ui/src/traits/fixed.rs | 2 +- .../zed/src/zed/quick_action_bar/repl_menu.rs | 2 +- 10 files changed, 50 insertions(+), 36 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index a7fd0abf88..8a5c65f994 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3011,7 +3011,7 @@ impl EditorElement { .icon_color(Color::Custom(cx.theme().colors().editor_line_number)) .selected_icon_color(Color::Custom(cx.theme().colors().editor_foreground)) .icon_size(IconSize::Custom(rems(editor_font_size / window.rem_size()))) - .width(width.into()) + .width(width) .on_click(move |_, window, cx| { editor.update(cx, |editor, cx| { editor.expand_excerpt(excerpt_id, direction, window, cx); @@ -3627,7 +3627,7 @@ impl EditorElement { ButtonLike::new("toggle-buffer-fold") .style(ui::ButtonStyle::Transparent) .height(px(28.).into()) - .width(px(28.).into()) + .width(px(28.)) .children(toggle_chevron_icon) .tooltip({ let focus_handle = focus_handle.clone(); diff --git a/crates/onboarding/src/basics_page.rs b/crates/onboarding/src/basics_page.rs index a19a21fddf..86ddc22a86 100644 --- a/crates/onboarding/src/basics_page.rs +++ b/crates/onboarding/src/basics_page.rs @@ -58,7 +58,7 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement .tab_index(tab_index) .selected_index(theme_mode as usize) .style(ui::ToggleButtonGroupStyle::Outlined) - .button_width(rems_from_px(64.)), + .width(rems_from_px(3. * 64.)), ), ) .child( @@ -305,8 +305,8 @@ fn render_base_keymap_section(tab_index: &mut isize, cx: &mut App) -> impl IntoE .when_some(base_keymap, |this, base_keymap| { this.selected_index(base_keymap) }) + .full_width() .tab_index(tab_index) - .button_width(rems_from_px(216.)) .size(ui::ToggleButtonGroupSize::Medium) .style(ui::ToggleButtonGroupStyle::Outlined), ); diff --git a/crates/onboarding/src/editing_page.rs b/crates/onboarding/src/editing_page.rs index e8fbc36c30..c69bd3852e 100644 --- a/crates/onboarding/src/editing_page.rs +++ b/crates/onboarding/src/editing_page.rs @@ -706,7 +706,7 @@ fn render_popular_settings_section( }) .tab_index(tab_index) .style(ToggleButtonGroupStyle::Outlined) - .button_width(ui::rems_from_px(64.)), + .width(ui::rems_from_px(3. * 64.)), ), ) } diff --git a/crates/repl/src/notebook/notebook_ui.rs b/crates/repl/src/notebook/notebook_ui.rs index b53809dff0..36a0af30d0 100644 --- a/crates/repl/src/notebook/notebook_ui.rs +++ b/crates/repl/src/notebook/notebook_ui.rs @@ -295,7 +295,7 @@ impl NotebookEditor { _cx: &mut Context, ) -> IconButton { let id: ElementId = ElementId::Name(id.into()); - IconButton::new(id, icon).width(px(CONTROL_SIZE).into()) + IconButton::new(id, icon).width(px(CONTROL_SIZE)) } fn render_notebook_controls( diff --git a/crates/ui/src/components/button/button.rs b/crates/ui/src/components/button/button.rs index 19f782fb98..cee39ac23b 100644 --- a/crates/ui/src/components/button/button.rs +++ b/crates/ui/src/components/button/button.rs @@ -324,7 +324,7 @@ impl FixedWidth for Button { /// ``` /// /// This sets the button's width to be exactly 100 pixels. - fn width(mut self, width: DefiniteLength) -> Self { + fn width(mut self, width: impl Into) -> Self { self.base = self.base.width(width); self } diff --git a/crates/ui/src/components/button/button_like.rs b/crates/ui/src/components/button/button_like.rs index 35c78fbb5d..0b30007e44 100644 --- a/crates/ui/src/components/button/button_like.rs +++ b/crates/ui/src/components/button/button_like.rs @@ -499,8 +499,8 @@ impl Clickable for ButtonLike { } impl FixedWidth for ButtonLike { - fn width(mut self, width: DefiniteLength) -> Self { - self.width = Some(width); + fn width(mut self, width: impl Into) -> Self { + self.width = Some(width.into()); self } diff --git a/crates/ui/src/components/button/icon_button.rs b/crates/ui/src/components/button/icon_button.rs index 8d8718a634..74fc4851fe 100644 --- a/crates/ui/src/components/button/icon_button.rs +++ b/crates/ui/src/components/button/icon_button.rs @@ -133,7 +133,7 @@ impl Clickable for IconButton { } impl FixedWidth for IconButton { - fn width(mut self, width: DefiniteLength) -> Self { + fn width(mut self, width: impl Into) -> Self { self.base = self.base.width(width); self } @@ -194,7 +194,7 @@ impl RenderOnce for IconButton { .map(|this| match self.shape { IconButtonShape::Square => { let size = self.icon_size.square(window, cx); - this.width(size.into()).height(size.into()) + this.width(size).height(size.into()) } IconButtonShape::Wide => this, }) diff --git a/crates/ui/src/components/button/toggle_button.rs b/crates/ui/src/components/button/toggle_button.rs index 91defa730b..2a862f4876 100644 --- a/crates/ui/src/components/button/toggle_button.rs +++ b/crates/ui/src/components/button/toggle_button.rs @@ -1,6 +1,6 @@ use std::rc::Rc; -use gpui::{AnyView, ClickEvent}; +use gpui::{AnyView, ClickEvent, relative}; use crate::{ButtonLike, ButtonLikeRounding, ElevationIndex, TintColor, Tooltip, prelude::*}; @@ -73,8 +73,8 @@ impl SelectableButton for ToggleButton { } impl FixedWidth for ToggleButton { - fn width(mut self, width: DefiniteLength) -> Self { - self.base.width = Some(width); + fn width(mut self, width: impl Into) -> Self { + self.base.width = Some(width.into()); self } @@ -429,7 +429,7 @@ where rows: [[T; COLS]; ROWS], style: ToggleButtonGroupStyle, size: ToggleButtonGroupSize, - button_width: Rems, + group_width: Option, selected_index: usize, tab_index: Option, } @@ -441,7 +441,7 @@ impl ToggleButtonGroup { rows: [buttons], style: ToggleButtonGroupStyle::Transparent, size: ToggleButtonGroupSize::Default, - button_width: rems_from_px(100.), + group_width: None, selected_index: 0, tab_index: None, } @@ -455,7 +455,7 @@ impl ToggleButtonGroup { rows: [first_row, second_row], style: ToggleButtonGroupStyle::Transparent, size: ToggleButtonGroupSize::Default, - button_width: rems_from_px(100.), + group_width: None, selected_index: 0, tab_index: None, } @@ -473,11 +473,6 @@ impl ToggleButtonGroup Self { - self.button_width = button_width; - self - } - pub fn selected_index(mut self, index: usize) -> Self { self.selected_index = index; self @@ -491,6 +486,24 @@ impl ToggleButtonGroup DefiniteLength { + relative(1. / COLS as f32) + } +} + +impl FixedWidth + for ToggleButtonGroup +{ + fn width(mut self, width: impl Into) -> Self { + self.group_width = Some(width.into()); + self + } + + fn full_width(mut self) -> Self { + self.group_width = Some(relative(1.)); + self + } } impl RenderOnce @@ -511,6 +524,7 @@ impl RenderOnce let entry_index = row_index * COLS + col_index; ButtonLike::new((self.group_name, entry_index)) + .full_width() .rounding(None) .when_some(self.tab_index, |this, tab_index| { this.tab_index(tab_index + entry_index as isize) @@ -527,7 +541,7 @@ impl RenderOnce }) .child( h_flex() - .min_w(self.button_width) + .w_full() .gap_1p5() .px_3() .py_1() @@ -561,6 +575,13 @@ impl RenderOnce let is_transparent = self.style == ToggleButtonGroupStyle::Transparent; v_flex() + .map(|this| { + if let Some(width) = self.group_width { + this.w(width) + } else { + this.w_full() + } + }) .rounded_md() .overflow_hidden() .map(|this| { @@ -583,6 +604,8 @@ impl RenderOnce .when(is_outlined_or_filled && !last_item, |this| { this.border_r_1().border_color(border_color) }) + .w(Self::button_width()) + .overflow_hidden() .child(item) })) })) @@ -630,7 +653,6 @@ impl Component ], ) .selected_index(1) - .button_width(rems_from_px(100.)) .into_any_element(), ), single_example( @@ -656,7 +678,6 @@ impl Component ], ) .selected_index(1) - .button_width(rems_from_px(100.)) .into_any_element(), ), single_example( @@ -675,7 +696,6 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) .into_any_element(), ), single_example( @@ -718,7 +738,6 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) .into_any_element(), ), ], @@ -763,7 +782,6 @@ impl Component ], ) .selected_index(1) - .button_width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Outlined) .into_any_element(), ), @@ -783,7 +801,6 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Outlined) .into_any_element(), ), @@ -827,7 +844,6 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Outlined) .into_any_element(), ), @@ -873,7 +889,6 @@ impl Component ], ) .selected_index(1) - .button_width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Filled) .into_any_element(), ), @@ -893,7 +908,7 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) + .width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Filled) .into_any_element(), ), @@ -937,7 +952,7 @@ impl Component ], ) .selected_index(3) - .button_width(rems_from_px(100.)) + .width(rems_from_px(100.)) .style(ToggleButtonGroupStyle::Filled) .into_any_element(), ), @@ -957,7 +972,6 @@ impl Component ], ) .selected_index(1) - .button_width(rems_from_px(100.)) .into_any_element(), )]) .into_any_element(), diff --git a/crates/ui/src/traits/fixed.rs b/crates/ui/src/traits/fixed.rs index 9ba64da090..6ca9c8617f 100644 --- a/crates/ui/src/traits/fixed.rs +++ b/crates/ui/src/traits/fixed.rs @@ -3,7 +3,7 @@ use gpui::DefiniteLength; /// A trait for elements that can have a fixed with. Enables the use of the `width` and `full_width` methods. pub trait FixedWidth { /// Sets the width of the element. - fn width(self, width: DefiniteLength) -> Self; + fn width(self, width: impl Into) -> Self; /// Sets the element's width to the full width of its container. fn full_width(self) -> Self; diff --git a/crates/zed/src/zed/quick_action_bar/repl_menu.rs b/crates/zed/src/zed/quick_action_bar/repl_menu.rs index 5d1a6c8887..ca180dccdd 100644 --- a/crates/zed/src/zed/quick_action_bar/repl_menu.rs +++ b/crates/zed/src/zed/quick_action_bar/repl_menu.rs @@ -216,7 +216,7 @@ impl QuickActionBar { .size(IconSize::XSmall) .color(Color::Muted), ) - .width(rems(1.).into()) + .width(rems(1.)) .disabled(menu_state.popover_disabled), Tooltip::text("REPL Menu"), ); From 2b3dbe8815513fcc6519275dc9e4eb35f0a5cd0e Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Wed, 13 Aug 2025 15:22:05 +0200 Subject: [PATCH 05/74] agent2: Allow tools to be provider specific (#36111) Our WebSearch tool requires access to a Zed provider Release Notes: - N/A --- crates/agent2/src/thread.rs | 21 ++++++++++++++++++--- crates/agent2/src/tools/web_search_tool.rs | 9 ++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 678e4cb5d2..1a571e8009 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -15,9 +15,9 @@ use futures::{ use gpui::{App, Context, Entity, SharedString, Task}; use language_model::{ LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelImage, - LanguageModelRequest, LanguageModelRequestMessage, LanguageModelRequestTool, - LanguageModelToolResult, LanguageModelToolResultContent, LanguageModelToolSchemaFormat, - LanguageModelToolUse, LanguageModelToolUseId, Role, StopReason, + LanguageModelProviderId, LanguageModelRequest, LanguageModelRequestMessage, + LanguageModelRequestTool, LanguageModelToolResult, LanguageModelToolResultContent, + LanguageModelToolSchemaFormat, LanguageModelToolUse, LanguageModelToolUseId, Role, StopReason, }; use log; use project::Project; @@ -681,10 +681,12 @@ impl Thread { .profiles .get(&self.profile_id) .context("profile not found")?; + let provider_id = self.selected_model.provider_id(); Ok(self .tools .iter() + .filter(move |(_, tool)| tool.supported_provider(&provider_id)) .filter_map(|(tool_name, tool)| { if profile.is_tool_enabled(tool_name) { Some(tool) @@ -782,6 +784,12 @@ where schemars::schema_for!(Self::Input) } + /// Some tools rely on a provider for the underlying billing or other reasons. + /// Allow the tool to check if they are compatible, or should be filtered out. + fn supported_provider(&self, _provider: &LanguageModelProviderId) -> bool { + true + } + /// Runs the tool with the provided input. fn run( self: Arc, @@ -808,6 +816,9 @@ pub trait AnyAgentTool { fn kind(&self) -> acp::ToolKind; fn initial_title(&self, input: serde_json::Value) -> SharedString; fn input_schema(&self, format: LanguageModelToolSchemaFormat) -> Result; + fn supported_provider(&self, _provider: &LanguageModelProviderId) -> bool { + true + } fn run( self: Arc, input: serde_json::Value, @@ -843,6 +854,10 @@ where Ok(json) } + fn supported_provider(&self, provider: &LanguageModelProviderId) -> bool { + self.0.supported_provider(provider) + } + fn run( self: Arc, input: serde_json::Value, diff --git a/crates/agent2/src/tools/web_search_tool.rs b/crates/agent2/src/tools/web_search_tool.rs index 12587c2f67..c1c0970742 100644 --- a/crates/agent2/src/tools/web_search_tool.rs +++ b/crates/agent2/src/tools/web_search_tool.rs @@ -5,7 +5,9 @@ use agent_client_protocol as acp; use anyhow::{Result, anyhow}; use cloud_llm_client::WebSearchResponse; use gpui::{App, AppContext, Task}; -use language_model::LanguageModelToolResultContent; +use language_model::{ + LanguageModelProviderId, LanguageModelToolResultContent, ZED_CLOUD_PROVIDER_ID, +}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use ui::prelude::*; @@ -50,6 +52,11 @@ impl AgentTool for WebSearchTool { "Searching the Web".into() } + /// We currently only support Zed Cloud as a provider. + fn supported_provider(&self, provider: &LanguageModelProviderId) -> bool { + provider == &ZED_CLOUD_PROVIDER_ID + } + fn run( self: Arc, input: Self::Input, From abde7306e3a3a767093d95b48e37862b07d274fc Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:35:47 -0300 Subject: [PATCH 06/74] onboarding: Adjust page layout (#36112) Fix max-height and make it scrollable as well, if needed. Release Notes: - N/A --- crates/onboarding/src/onboarding.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/onboarding/src/onboarding.rs b/crates/onboarding/src/onboarding.rs index 7ba7ba60cb..c86871c919 100644 --- a/crates/onboarding/src/onboarding.rs +++ b/crates/onboarding/src/onboarding.rs @@ -551,6 +551,7 @@ impl Render for Onboarding { .child( h_flex() .max_w(rems_from_px(1100.)) + .max_h(rems_from_px(850.)) .size_full() .m_auto() .py_20() @@ -560,12 +561,14 @@ impl Render for Onboarding { .child(self.render_nav(window, cx)) .child( v_flex() + .id("page-content") + .size_full() .max_w_full() .min_w_0() .pl_12() .border_l_1() .border_color(cx.theme().colors().border_variant.opacity(0.5)) - .size_full() + .overflow_y_scroll() .child(self.render_page(window, cx)), ), ) From f4b0332f78bfc688129280c596e615a96f1f4f63 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 13 Aug 2025 09:50:13 -0400 Subject: [PATCH 07/74] Hoist `rodio` to workspace level (#36113) This PR hoists `rodio` up to a workspace dependency. Release Notes: - N/A --- Cargo.toml | 1 + crates/audio/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dd14078dd2..8cb3c34a8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -566,6 +566,7 @@ reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "951c77 "socks", "stream", ] } +rodio = { version = "0.21.1", default-features = false } rsa = "0.9.6" runtimelib = { git = "https://github.com/ConradIrwin/runtimed", rev = "7130c804216b6914355d15d0b91ea91f6babd734", default-features = false, features = [ "async-dispatcher-runtime", diff --git a/crates/audio/Cargo.toml b/crates/audio/Cargo.toml index d857a3eb2f..f1f40ad654 100644 --- a/crates/audio/Cargo.toml +++ b/crates/audio/Cargo.toml @@ -18,6 +18,6 @@ collections.workspace = true derive_more.workspace = true gpui.workspace = true parking_lot.workspace = true -rodio = { version = "0.21.1", default-features = false, features = ["wav", "playback", "tracing"] } +rodio = { workspace = true, features = ["wav", "playback", "tracing"] } util.workspace = true workspace-hack.workspace = true From 23cd5b59b2682b82a1e96c20fb9f2c6347c97eee Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Wed, 13 Aug 2025 17:46:28 +0200 Subject: [PATCH 08/74] agent2: Initial infra for checkpoints and message editing (#36120) Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra --- Cargo.lock | 2 + crates/acp_thread/Cargo.toml | 1 + crates/acp_thread/src/acp_thread.rs | 470 ++++++++++++++--- crates/acp_thread/src/connection.rs | 34 +- crates/agent2/src/agent.rs | 38 +- crates/agent2/src/tests/mod.rs | 190 +++++-- crates/agent2/src/thread.rs | 705 ++++++++++++++----------- crates/agent_servers/src/acp/v0.rs | 1 + crates/agent_servers/src/acp/v1.rs | 1 + crates/agent_servers/src/claude.rs | 3 +- crates/agent_ui/src/acp/thread_view.rs | 14 +- crates/agent_ui/src/agent_diff.rs | 3 +- crates/fs/Cargo.toml | 1 + crates/fs/src/fake_git_repo.rs | 118 ++++- crates/fs/src/fs.rs | 364 ++++++++----- crates/git/Cargo.toml | 4 +- crates/git/src/git.rs | 7 + 17 files changed, 1374 insertions(+), 582 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d31189fa06..9078b32f7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,6 +31,7 @@ dependencies = [ "ui", "url", "util", + "uuid", "watch", "workspace-hack", ] @@ -6446,6 +6447,7 @@ dependencies = [ "log", "parking_lot", "pretty_assertions", + "rand 0.8.5", "regex", "rope", "schemars", diff --git a/crates/acp_thread/Cargo.toml b/crates/acp_thread/Cargo.toml index fd01b31786..b3ec217bad 100644 --- a/crates/acp_thread/Cargo.toml +++ b/crates/acp_thread/Cargo.toml @@ -36,6 +36,7 @@ terminal.workspace = true ui.workspace = true url.workspace = true util.workspace = true +uuid.workspace = true watch.workspace = true workspace-hack.workspace = true diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index d1957e1c2a..f8a5bf8032 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -9,18 +9,19 @@ pub use mention::*; pub use terminal::*; use action_log::ActionLog; -use agent_client_protocol::{self as acp}; -use anyhow::{Context as _, Result}; +use agent_client_protocol as acp; +use anyhow::{Context as _, Result, anyhow}; use editor::Bias; use futures::{FutureExt, channel::oneshot, future::BoxFuture}; use gpui::{AppContext, AsyncApp, Context, Entity, EventEmitter, SharedString, Task, WeakEntity}; use itertools::Itertools; use language::{Anchor, Buffer, BufferSnapshot, LanguageRegistry, Point, ToPoint, text_diff}; use markdown::Markdown; -use project::{AgentLocation, Project}; +use project::{AgentLocation, Project, git_store::GitStoreCheckpoint}; use std::collections::HashMap; use std::error::Error; -use std::fmt::Formatter; +use std::fmt::{Formatter, Write}; +use std::ops::Range; use std::process::ExitStatus; use std::rc::Rc; use std::{fmt::Display, mem, path::PathBuf, sync::Arc}; @@ -29,24 +30,23 @@ use util::ResultExt; #[derive(Debug)] pub struct UserMessage { + pub id: Option, pub content: ContentBlock, + pub checkpoint: Option, } impl UserMessage { - pub fn from_acp( - message: impl IntoIterator, - language_registry: Arc, - cx: &mut App, - ) -> Self { - let mut content = ContentBlock::Empty; - for chunk in message { - content.append(chunk, &language_registry, cx) - } - Self { content: content } - } - fn to_markdown(&self, cx: &App) -> String { - format!("## User\n\n{}\n\n", self.content.to_markdown(cx)) + let mut markdown = String::new(); + if let Some(_) = self.checkpoint { + writeln!(markdown, "## User (checkpoint)").unwrap(); + } else { + writeln!(markdown, "## User").unwrap(); + } + writeln!(markdown).unwrap(); + writeln!(markdown, "{}", self.content.to_markdown(cx)).unwrap(); + writeln!(markdown).unwrap(); + markdown } } @@ -633,6 +633,7 @@ pub struct AcpThread { pub enum AcpThreadEvent { NewEntry, EntryUpdated(usize), + EntriesRemoved(Range), ToolAuthorizationRequired, Stopped, Error, @@ -772,7 +773,7 @@ impl AcpThread { ) -> Result<()> { match update { acp::SessionUpdate::UserMessageChunk { content } => { - self.push_user_content_block(content, cx); + self.push_user_content_block(None, content, cx); } acp::SessionUpdate::AgentMessageChunk { content } => { self.push_assistant_content_block(content, false, cx); @@ -793,18 +794,32 @@ impl AcpThread { Ok(()) } - pub fn push_user_content_block(&mut self, chunk: acp::ContentBlock, cx: &mut Context) { + pub fn push_user_content_block( + &mut self, + message_id: Option, + chunk: acp::ContentBlock, + cx: &mut Context, + ) { let language_registry = self.project.read(cx).languages().clone(); let entries_len = self.entries.len(); if let Some(last_entry) = self.entries.last_mut() - && let AgentThreadEntry::UserMessage(UserMessage { content }) = last_entry + && let AgentThreadEntry::UserMessage(UserMessage { id, content, .. }) = last_entry { + *id = message_id.or(id.take()); content.append(chunk, &language_registry, cx); - cx.emit(AcpThreadEvent::EntryUpdated(entries_len - 1)); + let idx = entries_len - 1; + cx.emit(AcpThreadEvent::EntryUpdated(idx)); } else { let content = ContentBlock::new(chunk, &language_registry, cx); - self.push_entry(AgentThreadEntry::UserMessage(UserMessage { content }), cx); + self.push_entry( + AgentThreadEntry::UserMessage(UserMessage { + id: message_id, + content, + checkpoint: None, + }), + cx, + ); } } @@ -819,7 +834,8 @@ impl AcpThread { if let Some(last_entry) = self.entries.last_mut() && let AgentThreadEntry::AssistantMessage(AssistantMessage { chunks }) = last_entry { - cx.emit(AcpThreadEvent::EntryUpdated(entries_len - 1)); + let idx = entries_len - 1; + cx.emit(AcpThreadEvent::EntryUpdated(idx)); match (chunks.last_mut(), is_thought) { (Some(AssistantMessageChunk::Message { block }), false) | (Some(AssistantMessageChunk::Thought { block }), true) => { @@ -1118,69 +1134,113 @@ impl AcpThread { self.project.read(cx).languages().clone(), cx, ); + let git_store = self.project.read(cx).git_store().clone(); + + let old_checkpoint = git_store.update(cx, |git, cx| git.checkpoint(cx)); + let message_id = if self + .connection + .session_editor(&self.session_id, cx) + .is_some() + { + Some(UserMessageId::new()) + } else { + None + }; self.push_entry( - AgentThreadEntry::UserMessage(UserMessage { content: block }), + AgentThreadEntry::UserMessage(UserMessage { + id: message_id.clone(), + content: block, + checkpoint: None, + }), cx, ); self.clear_completed_plan_entries(cx); + let (old_checkpoint_tx, old_checkpoint_rx) = oneshot::channel(); let (tx, rx) = oneshot::channel(); let cancel_task = self.cancel(cx); + let request = acp::PromptRequest { + prompt: message, + session_id: self.session_id.clone(), + }; - self.send_task = Some(cx.spawn(async move |this, cx| { - async { + self.send_task = Some(cx.spawn({ + let message_id = message_id.clone(); + async move |this, cx| { cancel_task.await; - let result = this - .update(cx, |this, cx| { - this.connection.prompt( - acp::PromptRequest { - prompt: message, - session_id: this.session_id.clone(), - }, - cx, - ) - })? - .await; - - tx.send(result).log_err(); - - anyhow::Ok(()) + old_checkpoint_tx.send(old_checkpoint.await).ok(); + if let Ok(result) = this.update(cx, |this, cx| { + this.connection.prompt(message_id, request, cx) + }) { + tx.send(result.await).log_err(); + } } - .await - .log_err(); })); - cx.spawn(async move |this, cx| match rx.await { - Ok(Err(e)) => { - this.update(cx, |this, cx| { - this.send_task.take(); - cx.emit(AcpThreadEvent::Error) - }) + cx.spawn(async move |this, cx| { + let old_checkpoint = old_checkpoint_rx + .await + .map_err(|_| anyhow!("send canceled")) + .flatten() + .context("failed to get old checkpoint") .log_err(); - Err(e)? - } - result => { - let cancelled = matches!( - result, - Ok(Ok(acp::PromptResponse { - stop_reason: acp::StopReason::Cancelled - })) - ); - // We only take the task if the current prompt wasn't cancelled. - // - // This prompt may have been cancelled because another one was sent - // while it was still generating. In these cases, dropping `send_task` - // would cause the next generation to be cancelled. - if !cancelled { - this.update(cx, |this, _cx| this.send_task.take()).ok(); - } + let response = rx.await; - this.update(cx, |_, cx| cx.emit(AcpThreadEvent::Stopped)) + if let Some((old_checkpoint, message_id)) = old_checkpoint.zip(message_id) { + let new_checkpoint = git_store + .update(cx, |git, cx| git.checkpoint(cx))? + .await + .context("failed to get new checkpoint") .log_err(); - Ok(()) + if let Some(new_checkpoint) = new_checkpoint { + let equal = git_store + .update(cx, |git, cx| { + git.compare_checkpoints(old_checkpoint.clone(), new_checkpoint, cx) + })? + .await + .unwrap_or(true); + if !equal { + this.update(cx, |this, cx| { + if let Some((ix, message)) = this.user_message_mut(&message_id) { + message.checkpoint = Some(old_checkpoint); + cx.emit(AcpThreadEvent::EntryUpdated(ix)); + } + })?; + } + } } + + this.update(cx, |this, cx| { + match response { + Ok(Err(e)) => { + this.send_task.take(); + cx.emit(AcpThreadEvent::Error); + Err(e) + } + result => { + let cancelled = matches!( + result, + Ok(Ok(acp::PromptResponse { + stop_reason: acp::StopReason::Cancelled + })) + ); + + // We only take the task if the current prompt wasn't cancelled. + // + // This prompt may have been cancelled because another one was sent + // while it was still generating. In these cases, dropping `send_task` + // would cause the next generation to be cancelled. + if !cancelled { + this.send_task.take(); + } + + cx.emit(AcpThreadEvent::Stopped); + Ok(()) + } + } + })? }) .boxed() } @@ -1212,6 +1272,66 @@ impl AcpThread { cx.foreground_executor().spawn(send_task) } + /// Rewinds this thread to before the entry at `index`, removing it and all + /// subsequent entries while reverting any changes made from that point. + pub fn rewind(&mut self, id: UserMessageId, cx: &mut Context) -> Task> { + let Some(session_editor) = self.connection.session_editor(&self.session_id, cx) else { + return Task::ready(Err(anyhow!("not supported"))); + }; + let Some(message) = self.user_message(&id) else { + return Task::ready(Err(anyhow!("message not found"))); + }; + + let checkpoint = message.checkpoint.clone(); + + let git_store = self.project.read(cx).git_store().clone(); + cx.spawn(async move |this, cx| { + if let Some(checkpoint) = checkpoint { + git_store + .update(cx, |git, cx| git.restore_checkpoint(checkpoint, cx))? + .await?; + } + + cx.update(|cx| session_editor.truncate(id.clone(), cx))? + .await?; + this.update(cx, |this, cx| { + if let Some((ix, _)) = this.user_message_mut(&id) { + let range = ix..this.entries.len(); + this.entries.truncate(ix); + cx.emit(AcpThreadEvent::EntriesRemoved(range)); + } + }) + }) + } + + fn user_message(&self, id: &UserMessageId) -> Option<&UserMessage> { + self.entries.iter().find_map(|entry| { + if let AgentThreadEntry::UserMessage(message) = entry { + if message.id.as_ref() == Some(&id) { + Some(message) + } else { + None + } + } else { + None + } + }) + } + + fn user_message_mut(&mut self, id: &UserMessageId) -> Option<(usize, &mut UserMessage)> { + self.entries.iter_mut().enumerate().find_map(|(ix, entry)| { + if let AgentThreadEntry::UserMessage(message) = entry { + if message.id.as_ref() == Some(&id) { + Some((ix, message)) + } else { + None + } + } else { + None + } + }) + } + pub fn read_text_file( &self, path: PathBuf, @@ -1414,13 +1534,18 @@ mod tests { use futures::{channel::mpsc, future::LocalBoxFuture, select}; use gpui::{AsyncApp, TestAppContext, WeakEntity}; use indoc::indoc; - use project::FakeFs; + use project::{FakeFs, Fs}; use rand::Rng as _; use serde_json::json; use settings::SettingsStore; use smol::stream::StreamExt as _; - use std::{cell::RefCell, path::Path, rc::Rc, time::Duration}; - + use std::{ + cell::RefCell, + path::Path, + rc::Rc, + sync::atomic::{AtomicBool, AtomicUsize, Ordering::SeqCst}, + time::Duration, + }; use util::path; fn init_test(cx: &mut TestAppContext) { @@ -1452,6 +1577,7 @@ mod tests { // Test creating a new user message thread.update(cx, |thread, cx| { thread.push_user_content_block( + None, acp::ContentBlock::Text(acp::TextContent { annotations: None, text: "Hello, ".to_string(), @@ -1463,6 +1589,7 @@ mod tests { thread.update(cx, |thread, cx| { assert_eq!(thread.entries.len(), 1); if let AgentThreadEntry::UserMessage(user_msg) = &thread.entries[0] { + assert_eq!(user_msg.id, None); assert_eq!(user_msg.content.to_markdown(cx), "Hello, "); } else { panic!("Expected UserMessage"); @@ -1470,8 +1597,10 @@ mod tests { }); // Test appending to existing user message + let message_1_id = UserMessageId::new(); thread.update(cx, |thread, cx| { thread.push_user_content_block( + Some(message_1_id.clone()), acp::ContentBlock::Text(acp::TextContent { annotations: None, text: "world!".to_string(), @@ -1483,6 +1612,7 @@ mod tests { thread.update(cx, |thread, cx| { assert_eq!(thread.entries.len(), 1); if let AgentThreadEntry::UserMessage(user_msg) = &thread.entries[0] { + assert_eq!(user_msg.id, Some(message_1_id)); assert_eq!(user_msg.content.to_markdown(cx), "Hello, world!"); } else { panic!("Expected UserMessage"); @@ -1501,8 +1631,10 @@ mod tests { ); }); + let message_2_id = UserMessageId::new(); thread.update(cx, |thread, cx| { thread.push_user_content_block( + Some(message_2_id.clone()), acp::ContentBlock::Text(acp::TextContent { annotations: None, text: "New user message".to_string(), @@ -1514,6 +1646,7 @@ mod tests { thread.update(cx, |thread, cx| { assert_eq!(thread.entries.len(), 3); if let AgentThreadEntry::UserMessage(user_msg) = &thread.entries[2] { + assert_eq!(user_msg.id, Some(message_2_id)); assert_eq!(user_msg.content.to_markdown(cx), "New user message"); } else { panic!("Expected UserMessage at index 2"); @@ -1830,6 +1963,180 @@ mod tests { assert!(cx.read(|cx| !thread.read(cx).has_pending_edit_tool_calls())); } + #[gpui::test(iterations = 10)] + async fn test_checkpoints(cx: &mut TestAppContext) { + init_test(cx); + let fs = FakeFs::new(cx.background_executor.clone()); + fs.insert_tree( + path!("/test"), + json!({ + ".git": {} + }), + ) + .await; + let project = Project::test(fs.clone(), [path!("/test").as_ref()], cx).await; + + let simulate_changes = Arc::new(AtomicBool::new(true)); + let next_filename = Arc::new(AtomicUsize::new(0)); + let connection = Rc::new(FakeAgentConnection::new().on_user_message({ + let simulate_changes = simulate_changes.clone(); + let next_filename = next_filename.clone(); + let fs = fs.clone(); + move |request, thread, mut cx| { + let fs = fs.clone(); + let simulate_changes = simulate_changes.clone(); + let next_filename = next_filename.clone(); + async move { + if simulate_changes.load(SeqCst) { + let filename = format!("/test/file-{}", next_filename.fetch_add(1, SeqCst)); + fs.write(Path::new(&filename), b"").await?; + } + + let acp::ContentBlock::Text(content) = &request.prompt[0] else { + panic!("expected text content block"); + }; + thread.update(&mut cx, |thread, cx| { + thread + .handle_session_update( + acp::SessionUpdate::AgentMessageChunk { + content: content.text.to_uppercase().into(), + }, + cx, + ) + .unwrap(); + })?; + Ok(acp::PromptResponse { + stop_reason: acp::StopReason::EndTurn, + }) + } + .boxed_local() + } + })); + let thread = connection + .new_thread(project, Path::new(path!("/test")), &mut cx.to_async()) + .await + .unwrap(); + + cx.update(|cx| thread.update(cx, |thread, cx| thread.send(vec!["Lorem".into()], cx))) + .await + .unwrap(); + thread.read_with(cx, |thread, cx| { + assert_eq!( + thread.to_markdown(cx), + indoc! {" + ## User (checkpoint) + + Lorem + + ## Assistant + + LOREM + + "} + ); + }); + assert_eq!(fs.files(), vec![Path::new("/test/file-0")]); + + cx.update(|cx| thread.update(cx, |thread, cx| thread.send(vec!["ipsum".into()], cx))) + .await + .unwrap(); + thread.read_with(cx, |thread, cx| { + assert_eq!( + thread.to_markdown(cx), + indoc! {" + ## User (checkpoint) + + Lorem + + ## Assistant + + LOREM + + ## User (checkpoint) + + ipsum + + ## Assistant + + IPSUM + + "} + ); + }); + assert_eq!( + fs.files(), + vec![Path::new("/test/file-0"), Path::new("/test/file-1")] + ); + + // Checkpoint isn't stored when there are no changes. + simulate_changes.store(false, SeqCst); + cx.update(|cx| thread.update(cx, |thread, cx| thread.send(vec!["dolor".into()], cx))) + .await + .unwrap(); + thread.read_with(cx, |thread, cx| { + assert_eq!( + thread.to_markdown(cx), + indoc! {" + ## User (checkpoint) + + Lorem + + ## Assistant + + LOREM + + ## User (checkpoint) + + ipsum + + ## Assistant + + IPSUM + + ## User + + dolor + + ## Assistant + + DOLOR + + "} + ); + }); + assert_eq!( + fs.files(), + vec![Path::new("/test/file-0"), Path::new("/test/file-1")] + ); + + // Rewinding the conversation truncates the history and restores the checkpoint. + thread + .update(cx, |thread, cx| { + let AgentThreadEntry::UserMessage(message) = &thread.entries[2] else { + panic!("unexpected entries {:?}", thread.entries) + }; + thread.rewind(message.id.clone().unwrap(), cx) + }) + .await + .unwrap(); + thread.read_with(cx, |thread, cx| { + assert_eq!( + thread.to_markdown(cx), + indoc! {" + ## User (checkpoint) + + Lorem + + ## Assistant + + LOREM + + "} + ); + }); + assert_eq!(fs.files(), vec![Path::new("/test/file-0")]); + } + async fn run_until_first_tool_call( thread: &Entity, cx: &mut TestAppContext, @@ -1938,6 +2245,7 @@ mod tests { fn prompt( &self, + _id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { @@ -1966,5 +2274,25 @@ mod tests { }) .detach(); } + + fn session_editor( + &self, + session_id: &acp::SessionId, + _cx: &mut App, + ) -> Option> { + Some(Rc::new(FakeAgentSessionEditor { + _session_id: session_id.clone(), + })) + } + } + + struct FakeAgentSessionEditor { + _session_id: acp::SessionId, + } + + impl AgentSessionEditor for FakeAgentSessionEditor { + fn truncate(&self, _message_id: UserMessageId, _cx: &mut App) -> Task> { + Task::ready(Ok(())) + } } } diff --git a/crates/acp_thread/src/connection.rs b/crates/acp_thread/src/connection.rs index 8e6294b3ce..c3167eb2d4 100644 --- a/crates/acp_thread/src/connection.rs +++ b/crates/acp_thread/src/connection.rs @@ -1,13 +1,21 @@ -use std::{error::Error, fmt, path::Path, rc::Rc}; - +use crate::AcpThread; use agent_client_protocol::{self as acp}; use anyhow::Result; use collections::IndexMap; use gpui::{AsyncApp, Entity, SharedString, Task}; use project::Project; +use std::{error::Error, fmt, path::Path, rc::Rc, sync::Arc}; use ui::{App, IconName}; +use uuid::Uuid; -use crate::AcpThread; +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct UserMessageId(Arc); + +impl UserMessageId { + pub fn new() -> Self { + Self(Uuid::new_v4().to_string().into()) + } +} pub trait AgentConnection { fn new_thread( @@ -21,11 +29,23 @@ pub trait AgentConnection { fn authenticate(&self, method: acp::AuthMethodId, cx: &mut App) -> Task>; - fn prompt(&self, params: acp::PromptRequest, cx: &mut App) - -> Task>; + fn prompt( + &self, + user_message_id: Option, + params: acp::PromptRequest, + cx: &mut App, + ) -> Task>; fn cancel(&self, session_id: &acp::SessionId, cx: &mut App); + fn session_editor( + &self, + _session_id: &acp::SessionId, + _cx: &mut App, + ) -> Option> { + None + } + /// Returns this agent as an [Rc] if the model selection capability is supported. /// /// If the agent does not support model selection, returns [None]. @@ -35,6 +55,10 @@ pub trait AgentConnection { } } +pub trait AgentSessionEditor { + fn truncate(&self, message_id: UserMessageId, cx: &mut App) -> Task>; +} + #[derive(Debug)] pub struct AuthRequired; diff --git a/crates/agent2/src/agent.rs b/crates/agent2/src/agent.rs index 3ddd7be793..ced8c5e401 100644 --- a/crates/agent2/src/agent.rs +++ b/crates/agent2/src/agent.rs @@ -1,8 +1,9 @@ use crate::{AgentResponseEvent, Thread, templates::Templates}; use crate::{ ContextServerRegistry, CopyPathTool, CreateDirectoryTool, DiagnosticsTool, EditFileTool, - FetchTool, FindPathTool, GrepTool, ListDirectoryTool, MessageContent, MovePathTool, NowTool, - OpenTool, ReadFileTool, TerminalTool, ThinkingTool, ToolCallAuthorization, WebSearchTool, + FetchTool, FindPathTool, GrepTool, ListDirectoryTool, MovePathTool, NowTool, OpenTool, + ReadFileTool, TerminalTool, ThinkingTool, ToolCallAuthorization, UserMessageContent, + WebSearchTool, }; use acp_thread::AgentModelSelector; use agent_client_protocol as acp; @@ -637,9 +638,11 @@ impl acp_thread::AgentConnection for NativeAgentConnection { fn prompt( &self, + id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { + let id = id.expect("UserMessageId is required"); let session_id = params.session_id.clone(); let agent = self.0.clone(); log::info!("Received prompt request for session: {}", session_id); @@ -660,13 +663,14 @@ impl acp_thread::AgentConnection for NativeAgentConnection { })?; log::debug!("Found session for: {}", session_id); - let message: Vec = params + let content: Vec = params .prompt .into_iter() .map(Into::into) .collect::>(); - log::info!("Converted prompt to message: {} chars", message.len()); - log::debug!("Message content: {:?}", message); + log::info!("Converted prompt to message: {} chars", content.len()); + log::debug!("Message id: {:?}", id); + log::debug!("Message content: {:?}", content); // Get model using the ModelSelector capability (always available for agent2) // Get the selected model from the thread directly @@ -674,7 +678,8 @@ impl acp_thread::AgentConnection for NativeAgentConnection { // Send to thread log::info!("Sending message to thread with model: {:?}", model.name()); - let mut response_stream = thread.update(cx, |thread, cx| thread.send(message, cx))?; + let mut response_stream = + thread.update(cx, |thread, cx| thread.send(id, content, cx))?; // Handle response stream and forward to session.acp_thread while let Some(result) = response_stream.next().await { @@ -768,6 +773,27 @@ impl acp_thread::AgentConnection for NativeAgentConnection { } }); } + + fn session_editor( + &self, + session_id: &agent_client_protocol::SessionId, + cx: &mut App, + ) -> Option> { + self.0.update(cx, |agent, _cx| { + agent + .sessions + .get(session_id) + .map(|session| Rc::new(NativeAgentSessionEditor(session.thread.clone())) as _) + }) + } +} + +struct NativeAgentSessionEditor(Entity); + +impl acp_thread::AgentSessionEditor for NativeAgentSessionEditor { + fn truncate(&self, message_id: acp_thread::UserMessageId, cx: &mut App) -> Task> { + Task::ready(self.0.update(cx, |thread, _cx| thread.truncate(message_id))) + } } #[cfg(test)] diff --git a/crates/agent2/src/tests/mod.rs b/crates/agent2/src/tests/mod.rs index b70fa56747..637af73d1a 100644 --- a/crates/agent2/src/tests/mod.rs +++ b/crates/agent2/src/tests/mod.rs @@ -1,6 +1,5 @@ use super::*; -use crate::MessageContent; -use acp_thread::{AgentConnection, AgentModelGroupName, AgentModelList}; +use acp_thread::{AgentConnection, AgentModelGroupName, AgentModelList, UserMessageId}; use action_log::ActionLog; use agent_client_protocol::{self as acp}; use agent_settings::AgentProfileId; @@ -38,15 +37,19 @@ async fn test_echo(cx: &mut TestAppContext) { let events = thread .update(cx, |thread, cx| { - thread.send("Testing: Reply with 'Hello'", cx) + thread.send(UserMessageId::new(), ["Testing: Reply with 'Hello'"], cx) }) .collect() .await; thread.update(cx, |thread, _cx| { assert_eq!( - thread.messages().last().unwrap().content, - vec![MessageContent::Text("Hello".to_string())] - ); + thread.last_message().unwrap().to_markdown(), + indoc! {" + ## Assistant + + Hello + "} + ) }); assert_eq!(stop_events(events), vec![acp::StopReason::EndTurn]); } @@ -59,12 +62,13 @@ async fn test_thinking(cx: &mut TestAppContext) { let events = thread .update(cx, |thread, cx| { thread.send( - indoc! {" + UserMessageId::new(), + [indoc! {" Testing: Generate a thinking step where you just think the word 'Think', and have your final answer be 'Hello' - "}, + "}], cx, ) }) @@ -72,9 +76,10 @@ async fn test_thinking(cx: &mut TestAppContext) { .await; thread.update(cx, |thread, _cx| { assert_eq!( - thread.messages().last().unwrap().to_markdown(), + thread.last_message().unwrap().to_markdown(), indoc! {" - ## assistant + ## Assistant + Think Hello "} @@ -95,7 +100,9 @@ async fn test_system_prompt(cx: &mut TestAppContext) { project_context.borrow_mut().shell = "test-shell".into(); thread.update(cx, |thread, _| thread.add_tool(EchoTool)); - thread.update(cx, |thread, cx| thread.send("abc", cx)); + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["abc"], cx) + }); cx.run_until_parked(); let mut pending_completions = fake_model.pending_completions(); assert_eq!( @@ -132,7 +139,8 @@ async fn test_basic_tool_calls(cx: &mut TestAppContext) { .update(cx, |thread, cx| { thread.add_tool(EchoTool); thread.send( - "Now test the echo tool with 'Hello'. Does it work? Say 'Yes' or 'No'.", + UserMessageId::new(), + ["Now test the echo tool with 'Hello'. Does it work? Say 'Yes' or 'No'."], cx, ) }) @@ -146,7 +154,11 @@ async fn test_basic_tool_calls(cx: &mut TestAppContext) { thread.remove_tool(&AgentTool::name(&EchoTool)); thread.add_tool(DelayTool); thread.send( - "Now call the delay tool with 200ms. When the timer goes off, then you echo the output of the tool.", + UserMessageId::new(), + [ + "Now call the delay tool with 200ms.", + "When the timer goes off, then you echo the output of the tool.", + ], cx, ) }) @@ -156,13 +168,14 @@ async fn test_basic_tool_calls(cx: &mut TestAppContext) { thread.update(cx, |thread, _cx| { assert!( thread - .messages() - .last() + .last_message() + .unwrap() + .as_agent_message() .unwrap() .content .iter() .any(|content| { - if let MessageContent::Text(text) = content { + if let AgentMessageContent::Text(text) = content { text.contains("Ding") } else { false @@ -182,7 +195,7 @@ async fn test_streaming_tool_calls(cx: &mut TestAppContext) { // Test a tool call that's likely to complete *before* streaming stops. let mut events = thread.update(cx, |thread, cx| { thread.add_tool(WordListTool); - thread.send("Test the word_list tool.", cx) + thread.send(UserMessageId::new(), ["Test the word_list tool."], cx) }); let mut saw_partial_tool_use = false; @@ -190,8 +203,10 @@ async fn test_streaming_tool_calls(cx: &mut TestAppContext) { if let Ok(AgentResponseEvent::ToolCall(tool_call)) = event { thread.update(cx, |thread, _cx| { // Look for a tool use in the thread's last message - let last_content = thread.messages().last().unwrap().content.last().unwrap(); - if let MessageContent::ToolUse(last_tool_use) = last_content { + let message = thread.last_message().unwrap(); + let agent_message = message.as_agent_message().unwrap(); + let last_content = agent_message.content.last().unwrap(); + if let AgentMessageContent::ToolUse(last_tool_use) = last_content { assert_eq!(last_tool_use.name.as_ref(), "word_list"); if tool_call.status == acp::ToolCallStatus::Pending { if !last_tool_use.is_input_complete @@ -229,7 +244,7 @@ async fn test_tool_authorization(cx: &mut TestAppContext) { let mut events = thread.update(cx, |thread, cx| { thread.add_tool(ToolRequiringPermission); - thread.send("abc", cx) + thread.send(UserMessageId::new(), ["abc"], cx) }); cx.run_until_parked(); fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::ToolUse( @@ -357,7 +372,9 @@ async fn test_tool_hallucination(cx: &mut TestAppContext) { let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; let fake_model = model.as_fake(); - let mut events = thread.update(cx, |thread, cx| thread.send("abc", cx)); + let mut events = thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["abc"], cx) + }); cx.run_until_parked(); fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::ToolUse( LanguageModelToolUse { @@ -449,7 +466,12 @@ async fn test_concurrent_tool_calls(cx: &mut TestAppContext) { .update(cx, |thread, cx| { thread.add_tool(DelayTool); thread.send( - "Call the delay tool twice in the same message. Once with 100ms. Once with 300ms. When both timers are complete, describe the outputs.", + UserMessageId::new(), + [ + "Call the delay tool twice in the same message.", + "Once with 100ms. Once with 300ms.", + "When both timers are complete, describe the outputs.", + ], cx, ) }) @@ -460,12 +482,13 @@ async fn test_concurrent_tool_calls(cx: &mut TestAppContext) { assert_eq!(stop_reasons, vec![acp::StopReason::EndTurn]); thread.update(cx, |thread, _cx| { - let last_message = thread.messages().last().unwrap(); - let text = last_message + let last_message = thread.last_message().unwrap(); + let agent_message = last_message.as_agent_message().unwrap(); + let text = agent_message .content .iter() .filter_map(|content| { - if let MessageContent::Text(text) = content { + if let AgentMessageContent::Text(text) = content { Some(text.as_str()) } else { None @@ -521,7 +544,7 @@ async fn test_profiles(cx: &mut TestAppContext) { // Test that test-1 profile (default) has echo and delay tools thread.update(cx, |thread, cx| { thread.set_profile(AgentProfileId("test-1".into())); - thread.send("test", cx); + thread.send(UserMessageId::new(), ["test"], cx); }); cx.run_until_parked(); @@ -539,7 +562,7 @@ async fn test_profiles(cx: &mut TestAppContext) { // Switch to test-2 profile, and verify that it has only the infinite tool. thread.update(cx, |thread, cx| { thread.set_profile(AgentProfileId("test-2".into())); - thread.send("test2", cx) + thread.send(UserMessageId::new(), ["test2"], cx) }); cx.run_until_parked(); let mut pending_completions = fake_model.pending_completions(); @@ -562,7 +585,8 @@ async fn test_cancellation(cx: &mut TestAppContext) { thread.add_tool(InfiniteTool); thread.add_tool(EchoTool); thread.send( - "Call the echo tool and then call the infinite tool, then explain their output", + UserMessageId::new(), + ["Call the echo tool, then call the infinite tool, then explain their output"], cx, ) }); @@ -607,14 +631,20 @@ async fn test_cancellation(cx: &mut TestAppContext) { // Ensure we can still send a new message after cancellation. let events = thread .update(cx, |thread, cx| { - thread.send("Testing: reply with 'Hello' then stop.", cx) + thread.send( + UserMessageId::new(), + ["Testing: reply with 'Hello' then stop."], + cx, + ) }) .collect::>() .await; thread.update(cx, |thread, _cx| { + let message = thread.last_message().unwrap(); + let agent_message = message.as_agent_message().unwrap(); assert_eq!( - thread.messages().last().unwrap().content, - vec![MessageContent::Text("Hello".to_string())] + agent_message.content, + vec![AgentMessageContent::Text("Hello".to_string())] ); }); assert_eq!(stop_events(events), vec![acp::StopReason::EndTurn]); @@ -625,13 +655,16 @@ async fn test_refusal(cx: &mut TestAppContext) { let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; let fake_model = model.as_fake(); - let events = thread.update(cx, |thread, cx| thread.send("Hello", cx)); + let events = thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Hello"], cx) + }); cx.run_until_parked(); thread.read_with(cx, |thread, _| { assert_eq!( thread.to_markdown(), indoc! {" - ## user + ## User + Hello "} ); @@ -643,9 +676,12 @@ async fn test_refusal(cx: &mut TestAppContext) { assert_eq!( thread.to_markdown(), indoc! {" - ## user + ## User + Hello - ## assistant + + ## Assistant + Hey! "} ); @@ -661,6 +697,85 @@ async fn test_refusal(cx: &mut TestAppContext) { }); } +#[gpui::test] +async fn test_truncate(cx: &mut TestAppContext) { + let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; + let fake_model = model.as_fake(); + + let message_id = UserMessageId::new(); + thread.update(cx, |thread, cx| { + thread.send(message_id.clone(), ["Hello"], cx) + }); + cx.run_until_parked(); + thread.read_with(cx, |thread, _| { + assert_eq!( + thread.to_markdown(), + indoc! {" + ## User + + Hello + "} + ); + }); + + fake_model.send_last_completion_stream_text_chunk("Hey!"); + cx.run_until_parked(); + thread.read_with(cx, |thread, _| { + assert_eq!( + thread.to_markdown(), + indoc! {" + ## User + + Hello + + ## Assistant + + Hey! + "} + ); + }); + + thread + .update(cx, |thread, _cx| thread.truncate(message_id)) + .unwrap(); + cx.run_until_parked(); + thread.read_with(cx, |thread, _| { + assert_eq!(thread.to_markdown(), ""); + }); + + // Ensure we can still send a new message after truncation. + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Hi"], cx) + }); + thread.update(cx, |thread, _cx| { + assert_eq!( + thread.to_markdown(), + indoc! {" + ## User + + Hi + "} + ); + }); + cx.run_until_parked(); + fake_model.send_last_completion_stream_text_chunk("Ahoy!"); + cx.run_until_parked(); + thread.read_with(cx, |thread, _| { + assert_eq!( + thread.to_markdown(), + indoc! {" + ## User + + Hi + + ## Assistant + + Ahoy! + "} + ); + }); +} + #[gpui::test] async fn test_agent_connection(cx: &mut TestAppContext) { cx.update(settings::init); @@ -774,6 +889,7 @@ async fn test_agent_connection(cx: &mut TestAppContext) { let result = cx .update(|cx| { connection.prompt( + Some(acp_thread::UserMessageId::new()), acp::PromptRequest { session_id: session_id.clone(), prompt: vec!["ghi".into()], @@ -796,7 +912,9 @@ async fn test_tool_updates_to_completion(cx: &mut TestAppContext) { thread.update(cx, |thread, _cx| thread.add_tool(ThinkingTool)); let fake_model = model.as_fake(); - let mut events = thread.update(cx, |thread, cx| thread.send("Think", cx)); + let mut events = thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Think"], cx) + }); cx.run_until_parked(); // Simulate streaming partial input. diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 1a571e8009..204b489124 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -1,12 +1,12 @@ use crate::{ContextServerRegistry, SystemPromptTemplate, Template, Templates}; -use acp_thread::MentionUri; +use acp_thread::{MentionUri, UserMessageId}; use action_log::ActionLog; use agent_client_protocol as acp; use agent_settings::{AgentProfileId, AgentSettings}; use anyhow::{Context as _, Result, anyhow}; use assistant_tool::adapt_schema_to_format; use cloud_llm_client::{CompletionIntent, CompletionMode}; -use collections::HashMap; +use collections::IndexMap; use fs::Fs; use futures::{ channel::{mpsc, oneshot}, @@ -19,7 +19,6 @@ use language_model::{ LanguageModelRequestTool, LanguageModelToolResult, LanguageModelToolResultContent, LanguageModelToolSchemaFormat, LanguageModelToolUse, LanguageModelToolUseId, Role, StopReason, }; -use log; use project::Project; use prompt_store::ProjectContext; use schemars::{JsonSchema, Schema}; @@ -30,49 +29,199 @@ use std::fmt::Write; use std::{cell::RefCell, collections::BTreeMap, path::Path, rc::Rc, sync::Arc}; use util::{ResultExt, markdown::MarkdownCodeBlock}; -#[derive(Debug, Clone)] -pub struct AgentMessage { - pub role: Role, - pub content: Vec, +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Message { + User(UserMessage), + Agent(AgentMessage), +} + +impl Message { + pub fn as_agent_message(&self) -> Option<&AgentMessage> { + match self { + Message::Agent(agent_message) => Some(agent_message), + _ => None, + } + } + + pub fn to_markdown(&self) -> String { + match self { + Message::User(message) => message.to_markdown(), + Message::Agent(message) => message.to_markdown(), + } + } } #[derive(Debug, Clone, PartialEq, Eq)] -pub enum MessageContent { +pub struct UserMessage { + pub id: UserMessageId, + pub content: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum UserMessageContent { Text(String), - Thinking { - text: String, - signature: Option, - }, - Mention { - uri: MentionUri, - content: String, - }, - RedactedThinking(String), + Mention { uri: MentionUri, content: String }, Image(LanguageModelImage), - ToolUse(LanguageModelToolUse), - ToolResult(LanguageModelToolResult), +} + +impl UserMessage { + pub fn to_markdown(&self) -> String { + let mut markdown = String::from("## User\n\n"); + + for content in &self.content { + match content { + UserMessageContent::Text(text) => { + markdown.push_str(text); + markdown.push('\n'); + } + UserMessageContent::Image(_) => { + markdown.push_str("\n"); + } + UserMessageContent::Mention { uri, content } => { + if !content.is_empty() { + markdown.push_str(&format!("{}\n\n{}\n", uri.to_link(), content)); + } else { + markdown.push_str(&format!("{}\n", uri.to_link())); + } + } + } + } + + markdown + } + + fn to_request(&self) -> LanguageModelRequestMessage { + let mut message = LanguageModelRequestMessage { + role: Role::User, + content: Vec::with_capacity(self.content.len()), + cache: false, + }; + + const OPEN_CONTEXT: &str = "\n\ + The following items were attached by the user. \ + They are up-to-date and don't need to be re-read.\n\n"; + + const OPEN_FILES_TAG: &str = ""; + const OPEN_SYMBOLS_TAG: &str = ""; + const OPEN_THREADS_TAG: &str = ""; + const OPEN_RULES_TAG: &str = + "\nThe user has specified the following rules that should be applied:\n"; + + let mut file_context = OPEN_FILES_TAG.to_string(); + let mut symbol_context = OPEN_SYMBOLS_TAG.to_string(); + let mut thread_context = OPEN_THREADS_TAG.to_string(); + let mut rules_context = OPEN_RULES_TAG.to_string(); + + for chunk in &self.content { + let chunk = match chunk { + UserMessageContent::Text(text) => { + language_model::MessageContent::Text(text.clone()) + } + UserMessageContent::Image(value) => { + language_model::MessageContent::Image(value.clone()) + } + UserMessageContent::Mention { uri, content } => { + match uri { + MentionUri::File(path) | MentionUri::Symbol(path, _) => { + write!( + &mut symbol_context, + "\n{}", + MarkdownCodeBlock { + tag: &codeblock_tag(&path), + text: &content.to_string(), + } + ) + .ok(); + } + MentionUri::Thread(_session_id) => { + write!(&mut thread_context, "\n{}\n", content).ok(); + } + MentionUri::Rule(_user_prompt_id) => { + write!( + &mut rules_context, + "\n{}", + MarkdownCodeBlock { + tag: "", + text: &content + } + ) + .ok(); + } + } + + language_model::MessageContent::Text(uri.to_link()) + } + }; + + message.content.push(chunk); + } + + let len_before_context = message.content.len(); + + if file_context.len() > OPEN_FILES_TAG.len() { + file_context.push_str("\n"); + message + .content + .push(language_model::MessageContent::Text(file_context)); + } + + if symbol_context.len() > OPEN_SYMBOLS_TAG.len() { + symbol_context.push_str("\n"); + message + .content + .push(language_model::MessageContent::Text(symbol_context)); + } + + if thread_context.len() > OPEN_THREADS_TAG.len() { + thread_context.push_str("\n"); + message + .content + .push(language_model::MessageContent::Text(thread_context)); + } + + if rules_context.len() > OPEN_RULES_TAG.len() { + rules_context.push_str("\n"); + message + .content + .push(language_model::MessageContent::Text(rules_context)); + } + + if message.content.len() > len_before_context { + message.content.insert( + len_before_context, + language_model::MessageContent::Text(OPEN_CONTEXT.into()), + ); + message + .content + .push(language_model::MessageContent::Text("".into())); + } + + message + } } impl AgentMessage { pub fn to_markdown(&self) -> String { - let mut markdown = format!("## {}\n", self.role); + let mut markdown = String::from("## Assistant\n\n"); for content in &self.content { match content { - MessageContent::Text(text) => { + AgentMessageContent::Text(text) => { markdown.push_str(text); markdown.push('\n'); } - MessageContent::Thinking { text, .. } => { + AgentMessageContent::Thinking { text, .. } => { markdown.push_str(""); markdown.push_str(text); markdown.push_str("\n"); } - MessageContent::RedactedThinking(_) => markdown.push_str("\n"), - MessageContent::Image(_) => { + AgentMessageContent::RedactedThinking(_) => { + markdown.push_str("\n") + } + AgentMessageContent::Image(_) => { markdown.push_str("\n"); } - MessageContent::ToolUse(tool_use) => { + AgentMessageContent::ToolUse(tool_use) => { markdown.push_str(&format!( "**Tool Use**: {} (ID: {})\n", tool_use.name, tool_use.id @@ -85,41 +234,106 @@ impl AgentMessage { } )); } - MessageContent::ToolResult(tool_result) => { - markdown.push_str(&format!( - "**Tool Result**: {} (ID: {})\n\n", - tool_result.tool_name, tool_result.tool_use_id - )); - if tool_result.is_error { - markdown.push_str("**ERROR:**\n"); - } + } + } - match &tool_result.content { - LanguageModelToolResultContent::Text(text) => { - writeln!(markdown, "{text}\n").ok(); - } - LanguageModelToolResultContent::Image(_) => { - writeln!(markdown, "\n").ok(); - } - } + for tool_result in self.tool_results.values() { + markdown.push_str(&format!( + "**Tool Result**: {} (ID: {})\n\n", + tool_result.tool_name, tool_result.tool_use_id + )); + if tool_result.is_error { + markdown.push_str("**ERROR:**\n"); + } - if let Some(output) = tool_result.output.as_ref() { - writeln!( - markdown, - "**Debug Output**:\n\n```json\n{}\n```\n", - serde_json::to_string_pretty(output).unwrap() - ) - .unwrap(); - } + match &tool_result.content { + LanguageModelToolResultContent::Text(text) => { + writeln!(markdown, "{text}\n").ok(); } - MessageContent::Mention { uri, .. } => { - write!(markdown, "{}", uri.to_link()).ok(); + LanguageModelToolResultContent::Image(_) => { + writeln!(markdown, "\n").ok(); } } + + if let Some(output) = tool_result.output.as_ref() { + writeln!( + markdown, + "**Debug Output**:\n\n```json\n{}\n```\n", + serde_json::to_string_pretty(output).unwrap() + ) + .unwrap(); + } } markdown } + + pub fn to_request(&self) -> Vec { + let mut content = Vec::with_capacity(self.content.len()); + for chunk in &self.content { + let chunk = match chunk { + AgentMessageContent::Text(text) => { + language_model::MessageContent::Text(text.clone()) + } + AgentMessageContent::Thinking { text, signature } => { + language_model::MessageContent::Thinking { + text: text.clone(), + signature: signature.clone(), + } + } + AgentMessageContent::RedactedThinking(value) => { + language_model::MessageContent::RedactedThinking(value.clone()) + } + AgentMessageContent::ToolUse(value) => { + language_model::MessageContent::ToolUse(value.clone()) + } + AgentMessageContent::Image(value) => { + language_model::MessageContent::Image(value.clone()) + } + }; + content.push(chunk); + } + + let mut messages = vec![LanguageModelRequestMessage { + role: Role::Assistant, + content, + cache: false, + }]; + + if !self.tool_results.is_empty() { + let mut tool_results = Vec::with_capacity(self.tool_results.len()); + for tool_result in self.tool_results.values() { + tool_results.push(language_model::MessageContent::ToolResult( + tool_result.clone(), + )); + } + messages.push(LanguageModelRequestMessage { + role: Role::User, + content: tool_results, + cache: false, + }); + } + + messages + } +} + +#[derive(Default, Debug, Clone, PartialEq, Eq)] +pub struct AgentMessage { + pub content: Vec, + pub tool_results: IndexMap, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum AgentMessageContent { + Text(String), + Thinking { + text: String, + signature: Option, + }, + RedactedThinking(String), + Image(LanguageModelImage), + ToolUse(LanguageModelToolUse), } #[derive(Debug)] @@ -140,13 +354,13 @@ pub struct ToolCallAuthorization { } pub struct Thread { - messages: Vec, + messages: Vec, completion_mode: CompletionMode, /// Holds the task that handles agent interaction until the end of the turn. /// Survives across multiple requests as the model performs tool calls and /// we run tools, report their results. running_turn: Option>, - pending_tool_uses: HashMap, + pending_agent_message: Option, tools: BTreeMap>, context_server_registry: Entity, profile_id: AgentProfileId, @@ -172,7 +386,7 @@ impl Thread { messages: Vec::new(), completion_mode: CompletionMode::Normal, running_turn: None, - pending_tool_uses: HashMap::default(), + pending_agent_message: None, tools: BTreeMap::default(), context_server_registry, profile_id, @@ -196,8 +410,13 @@ impl Thread { self.completion_mode = mode; } - pub fn messages(&self) -> &[AgentMessage] { - &self.messages + #[cfg(any(test, feature = "test-support"))] + pub fn last_message(&self) -> Option { + if let Some(message) = self.pending_agent_message.clone() { + Some(Message::Agent(message)) + } else { + self.messages.last().cloned() + } } pub fn add_tool(&mut self, tool: impl AgentTool) { @@ -213,35 +432,36 @@ impl Thread { } pub fn cancel(&mut self) { + // TODO: do we need to emit a stop::cancel for ACP? self.running_turn.take(); + self.flush_pending_agent_message(); + } - let tool_results = self - .pending_tool_uses - .drain() - .map(|(tool_use_id, tool_use)| { - MessageContent::ToolResult(LanguageModelToolResult { - tool_use_id, - tool_name: tool_use.name.clone(), - is_error: true, - content: LanguageModelToolResultContent::Text("Tool canceled by user".into()), - output: None, - }) - }) - .collect::>(); - self.last_user_message().content.extend(tool_results); + pub fn truncate(&mut self, message_id: UserMessageId) -> Result<()> { + self.cancel(); + let Some(position) = self.messages.iter().position( + |msg| matches!(msg, Message::User(UserMessage { id, .. }) if id == &message_id), + ) else { + return Err(anyhow!("Message not found")); + }; + self.messages.truncate(position); + Ok(()) } /// Sending a message results in the model streaming a response, which could include tool calls. /// After calling tools, the model will stops and waits for any outstanding tool calls to be completed and their results sent. /// The returned channel will report all the occurrences in which the model stops before erroring or ending its turn. - pub fn send( + pub fn send( &mut self, - content: impl Into, + message_id: UserMessageId, + content: impl IntoIterator, cx: &mut Context, - ) -> mpsc::UnboundedReceiver> { - let content = content.into().0; - + ) -> mpsc::UnboundedReceiver> + where + T: Into, + { let model = self.selected_model.clone(); + let content = content.into_iter().map(Into::into).collect::>(); log::info!("Thread::send called with model: {:?}", model.name()); log::debug!("Thread::send content: {:?}", content); @@ -251,10 +471,10 @@ impl Thread { let event_stream = AgentResponseEventStream(events_tx); let user_message_ix = self.messages.len(); - self.messages.push(AgentMessage { - role: Role::User, + self.messages.push(Message::User(UserMessage { + id: message_id, content, - }); + })); log::info!("Total messages in thread: {}", self.messages.len()); self.running_turn = Some(cx.spawn(async move |thread, cx| { log::info!("Starting agent turn execution"); @@ -270,15 +490,11 @@ impl Thread { thread.build_completion_request(completion_intent, cx) })?; - // println!( - // "request: {}", - // serde_json::to_string_pretty(&request).unwrap() - // ); - // Stream events, appending to messages and collecting up tool uses. log::info!("Calling model.stream_completion"); let mut events = model.stream_completion(request, cx).await?; log::debug!("Stream completion started successfully"); + let mut tool_uses = FuturesUnordered::new(); while let Some(event) = events.next().await { match event { @@ -286,6 +502,7 @@ impl Thread { event_stream.send_stop(reason); if reason == StopReason::Refusal { thread.update(cx, |thread, _cx| { + thread.pending_agent_message = None; thread.messages.truncate(user_message_ix); })?; break 'outer; @@ -338,15 +555,16 @@ impl Thread { ); thread .update(cx, |thread, _cx| { - thread.pending_tool_uses.remove(&tool_result.tool_use_id); thread - .last_user_message() - .content - .push(MessageContent::ToolResult(tool_result)); + .pending_agent_message() + .tool_results + .insert(tool_result.tool_use_id.clone(), tool_result); }) .ok(); } + thread.update(cx, |thread, _cx| thread.flush_pending_agent_message())?; + completion_intent = CompletionIntent::ToolResults; } @@ -354,6 +572,10 @@ impl Thread { } .await; + thread + .update(cx, |thread, _cx| thread.flush_pending_agent_message()) + .ok(); + if let Err(error) = turn_result { log::error!("Turn execution failed: {:?}", error); event_stream.send_error(error); @@ -364,7 +586,7 @@ impl Thread { events_rx } - pub fn build_system_message(&self) -> AgentMessage { + pub fn build_system_message(&self) -> LanguageModelRequestMessage { log::debug!("Building system message"); let prompt = SystemPromptTemplate { project: &self.project_context.borrow(), @@ -374,9 +596,10 @@ impl Thread { .context("failed to build system prompt") .expect("Invalid template"); log::debug!("System message built"); - AgentMessage { + LanguageModelRequestMessage { role: Role::System, - content: vec![prompt.as_str().into()], + content: vec![prompt.into()], + cache: true, } } @@ -394,10 +617,7 @@ impl Thread { match event { StartMessage { .. } => { - self.messages.push(AgentMessage { - role: Role::Assistant, - content: Vec::new(), - }); + self.messages.push(Message::Agent(AgentMessage::default())); } Text(new_text) => self.handle_text_event(new_text, event_stream, cx), Thinking { text, signature } => { @@ -435,11 +655,13 @@ impl Thread { ) { events_stream.send_text(&new_text); - let last_message = self.last_assistant_message(); - if let Some(MessageContent::Text(text)) = last_message.content.last_mut() { + let last_message = self.pending_agent_message(); + if let Some(AgentMessageContent::Text(text)) = last_message.content.last_mut() { text.push_str(&new_text); } else { - last_message.content.push(MessageContent::Text(new_text)); + last_message + .content + .push(AgentMessageContent::Text(new_text)); } cx.notify(); @@ -454,13 +676,14 @@ impl Thread { ) { event_stream.send_thinking(&new_text); - let last_message = self.last_assistant_message(); - if let Some(MessageContent::Thinking { text, signature }) = last_message.content.last_mut() + let last_message = self.pending_agent_message(); + if let Some(AgentMessageContent::Thinking { text, signature }) = + last_message.content.last_mut() { text.push_str(&new_text); *signature = new_signature.or(signature.take()); } else { - last_message.content.push(MessageContent::Thinking { + last_message.content.push(AgentMessageContent::Thinking { text: new_text, signature: new_signature, }); @@ -470,10 +693,10 @@ impl Thread { } fn handle_redacted_thinking_event(&mut self, data: String, cx: &mut Context) { - let last_message = self.last_assistant_message(); + let last_message = self.pending_agent_message(); last_message .content - .push(MessageContent::RedactedThinking(data)); + .push(AgentMessageContent::RedactedThinking(data)); cx.notify(); } @@ -486,14 +709,17 @@ impl Thread { cx.notify(); let tool = self.tools.get(tool_use.name.as_ref()).cloned(); - - self.pending_tool_uses - .insert(tool_use.id.clone(), tool_use.clone()); - let last_message = self.last_assistant_message(); + let mut title = SharedString::from(&tool_use.name); + let mut kind = acp::ToolKind::Other; + if let Some(tool) = tool.as_ref() { + title = tool.initial_title(tool_use.input.clone()); + kind = tool.kind(); + } // Ensure the last message ends in the current tool use + let last_message = self.pending_agent_message(); let push_new_tool_use = last_message.content.last_mut().map_or(true, |content| { - if let MessageContent::ToolUse(last_tool_use) = content { + if let AgentMessageContent::ToolUse(last_tool_use) = content { if last_tool_use.id == tool_use.id { *last_tool_use = tool_use.clone(); false @@ -505,18 +731,11 @@ impl Thread { } }); - let mut title = SharedString::from(&tool_use.name); - let mut kind = acp::ToolKind::Other; - if let Some(tool) = tool.as_ref() { - title = tool.initial_title(tool_use.input.clone()); - kind = tool.kind(); - } - if push_new_tool_use { event_stream.send_tool_call(&tool_use.id, title, kind, tool_use.input.clone()); last_message .content - .push(MessageContent::ToolUse(tool_use.clone())); + .push(AgentMessageContent::ToolUse(tool_use.clone())); } else { event_stream.update_tool_call_fields( &tool_use.id, @@ -601,30 +820,37 @@ impl Thread { } } - /// Guarantees the last message is from the assistant and returns a mutable reference. - fn last_assistant_message(&mut self) -> &mut AgentMessage { - if self - .messages - .last() - .map_or(true, |m| m.role != Role::Assistant) - { - self.messages.push(AgentMessage { - role: Role::Assistant, - content: Vec::new(), - }); - } - self.messages.last_mut().unwrap() + fn pending_agent_message(&mut self) -> &mut AgentMessage { + self.pending_agent_message.get_or_insert_default() } - /// Guarantees the last message is from the user and returns a mutable reference. - fn last_user_message(&mut self) -> &mut AgentMessage { - if self.messages.last().map_or(true, |m| m.role != Role::User) { - self.messages.push(AgentMessage { - role: Role::User, - content: Vec::new(), - }); + fn flush_pending_agent_message(&mut self) { + let Some(mut message) = self.pending_agent_message.take() else { + return; + }; + + for content in &message.content { + let AgentMessageContent::ToolUse(tool_use) = content else { + continue; + }; + + if !message.tool_results.contains_key(&tool_use.id) { + message.tool_results.insert( + tool_use.id.clone(), + LanguageModelToolResult { + tool_use_id: tool_use.id.clone(), + tool_name: tool_use.name.clone(), + is_error: true, + content: LanguageModelToolResultContent::Text( + "Tool canceled by user".into(), + ), + output: None, + }, + ); + } } - self.messages.last_mut().unwrap() + + self.messages.push(Message::Agent(message)); } pub(crate) fn build_completion_request( @@ -712,49 +938,39 @@ impl Thread { "Building request messages from {} thread messages", self.messages.len() ); + let mut messages = vec![self.build_system_message()]; + for message in &self.messages { + match message { + Message::User(message) => messages.push(message.to_request()), + Message::Agent(message) => messages.extend(message.to_request()), + } + } + + if let Some(message) = self.pending_agent_message.as_ref() { + messages.extend(message.to_request()); + } - let messages = Some(self.build_system_message()) - .iter() - .chain(self.messages.iter()) - .map(|message| { - log::trace!( - " - {} message with {} content items", - match message.role { - Role::System => "System", - Role::User => "User", - Role::Assistant => "Assistant", - }, - message.content.len() - ); - message.to_request() - }) - .collect(); messages } pub fn to_markdown(&self) -> String { let mut markdown = String::new(); - for message in &self.messages { + for (ix, message) in self.messages.iter().enumerate() { + if ix > 0 { + markdown.push('\n'); + } markdown.push_str(&message.to_markdown()); } + + if let Some(message) = self.pending_agent_message.as_ref() { + markdown.push('\n'); + markdown.push_str(&message.to_markdown()); + } + markdown } } -pub struct UserMessage(Vec); - -impl From> for UserMessage { - fn from(content: Vec) -> Self { - UserMessage(content) - } -} - -impl> From for UserMessage { - fn from(content: T) -> Self { - UserMessage(vec![content.into()]) - } -} - pub trait AgentTool where Self: 'static + Sized, @@ -1151,130 +1367,6 @@ impl std::ops::DerefMut for ToolCallEventStreamReceiver { } } -impl AgentMessage { - fn to_request(&self) -> language_model::LanguageModelRequestMessage { - let mut message = LanguageModelRequestMessage { - role: self.role, - content: Vec::with_capacity(self.content.len()), - cache: false, - }; - - const OPEN_CONTEXT: &str = "\n\ - The following items were attached by the user. \ - They are up-to-date and don't need to be re-read.\n\n"; - - const OPEN_FILES_TAG: &str = ""; - const OPEN_SYMBOLS_TAG: &str = ""; - const OPEN_THREADS_TAG: &str = ""; - const OPEN_RULES_TAG: &str = - "\nThe user has specified the following rules that should be applied:\n"; - - let mut file_context = OPEN_FILES_TAG.to_string(); - let mut symbol_context = OPEN_SYMBOLS_TAG.to_string(); - let mut thread_context = OPEN_THREADS_TAG.to_string(); - let mut rules_context = OPEN_RULES_TAG.to_string(); - - for chunk in &self.content { - let chunk = match chunk { - MessageContent::Text(text) => language_model::MessageContent::Text(text.clone()), - MessageContent::Thinking { text, signature } => { - language_model::MessageContent::Thinking { - text: text.clone(), - signature: signature.clone(), - } - } - MessageContent::RedactedThinking(value) => { - language_model::MessageContent::RedactedThinking(value.clone()) - } - MessageContent::ToolUse(value) => { - language_model::MessageContent::ToolUse(value.clone()) - } - MessageContent::ToolResult(value) => { - language_model::MessageContent::ToolResult(value.clone()) - } - MessageContent::Image(value) => { - language_model::MessageContent::Image(value.clone()) - } - MessageContent::Mention { uri, content } => { - match uri { - MentionUri::File(path) | MentionUri::Symbol(path, _) => { - write!( - &mut symbol_context, - "\n{}", - MarkdownCodeBlock { - tag: &codeblock_tag(&path), - text: &content.to_string(), - } - ) - .ok(); - } - MentionUri::Thread(_session_id) => { - write!(&mut thread_context, "\n{}\n", content).ok(); - } - MentionUri::Rule(_user_prompt_id) => { - write!( - &mut rules_context, - "\n{}", - MarkdownCodeBlock { - tag: "", - text: &content - } - ) - .ok(); - } - } - - language_model::MessageContent::Text(uri.to_link()) - } - }; - - message.content.push(chunk); - } - - let len_before_context = message.content.len(); - - if file_context.len() > OPEN_FILES_TAG.len() { - file_context.push_str("\n"); - message - .content - .push(language_model::MessageContent::Text(file_context)); - } - - if symbol_context.len() > OPEN_SYMBOLS_TAG.len() { - symbol_context.push_str("\n"); - message - .content - .push(language_model::MessageContent::Text(symbol_context)); - } - - if thread_context.len() > OPEN_THREADS_TAG.len() { - thread_context.push_str("\n"); - message - .content - .push(language_model::MessageContent::Text(thread_context)); - } - - if rules_context.len() > OPEN_RULES_TAG.len() { - rules_context.push_str("\n"); - message - .content - .push(language_model::MessageContent::Text(rules_context)); - } - - if message.content.len() > len_before_context { - message.content.insert( - len_before_context, - language_model::MessageContent::Text(OPEN_CONTEXT.into()), - ); - message - .content - .push(language_model::MessageContent::Text("".into())); - } - - message - } -} - fn codeblock_tag(full_path: &Path) -> String { let mut result = String::new(); @@ -1287,16 +1379,20 @@ fn codeblock_tag(full_path: &Path) -> String { result } -impl From for MessageContent { +impl From<&str> for UserMessageContent { + fn from(text: &str) -> Self { + Self::Text(text.into()) + } +} + +impl From for UserMessageContent { fn from(value: acp::ContentBlock) -> Self { match value { - acp::ContentBlock::Text(text_content) => MessageContent::Text(text_content.text), - acp::ContentBlock::Image(image_content) => { - MessageContent::Image(convert_image(image_content)) - } + acp::ContentBlock::Text(text_content) => Self::Text(text_content.text), + acp::ContentBlock::Image(image_content) => Self::Image(convert_image(image_content)), acp::ContentBlock::Audio(_) => { // TODO - MessageContent::Text("[audio]".to_string()) + Self::Text("[audio]".to_string()) } acp::ContentBlock::ResourceLink(resource_link) => { match MentionUri::parse(&resource_link.uri) { @@ -1306,10 +1402,7 @@ impl From for MessageContent { }, Err(err) => { log::error!("Failed to parse mention link: {}", err); - MessageContent::Text(format!( - "[{}]({})", - resource_link.name, resource_link.uri - )) + Self::Text(format!("[{}]({})", resource_link.name, resource_link.uri)) } } } @@ -1322,7 +1415,7 @@ impl From for MessageContent { }, Err(err) => { log::error!("Failed to parse mention link: {}", err); - MessageContent::Text( + Self::Text( MarkdownCodeBlock { tag: &resource.uri, text: &resource.text, @@ -1334,7 +1427,7 @@ impl From for MessageContent { } acp::EmbeddedResourceResource::BlobResourceContents(_) => { // TODO - MessageContent::Text("[blob]".to_string()) + Self::Text("[blob]".to_string()) } }, } @@ -1348,9 +1441,3 @@ fn convert_image(image_content: acp::ImageContent) -> LanguageModelImage { size: gpui::Size::new(0.into(), 0.into()), } } - -impl From<&str> for MessageContent { - fn from(text: &str) -> Self { - MessageContent::Text(text.into()) - } -} diff --git a/crates/agent_servers/src/acp/v0.rs b/crates/agent_servers/src/acp/v0.rs index 8d85435f92..327613de67 100644 --- a/crates/agent_servers/src/acp/v0.rs +++ b/crates/agent_servers/src/acp/v0.rs @@ -467,6 +467,7 @@ impl AgentConnection for AcpConnection { fn prompt( &self, + _id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { diff --git a/crates/agent_servers/src/acp/v1.rs b/crates/agent_servers/src/acp/v1.rs index ff71783b48..de397fddf0 100644 --- a/crates/agent_servers/src/acp/v1.rs +++ b/crates/agent_servers/src/acp/v1.rs @@ -171,6 +171,7 @@ impl AgentConnection for AcpConnection { fn prompt( &self, + _id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { diff --git a/crates/agent_servers/src/claude.rs b/crates/agent_servers/src/claude.rs index c65508f152..c394ec4a9c 100644 --- a/crates/agent_servers/src/claude.rs +++ b/crates/agent_servers/src/claude.rs @@ -210,6 +210,7 @@ impl AgentConnection for ClaudeAgentConnection { fn prompt( &self, + _id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { @@ -423,7 +424,7 @@ impl ClaudeAgentSession { if !turn_state.borrow().is_cancelled() { thread .update(cx, |thread, cx| { - thread.push_user_content_block(text.into(), cx) + thread.push_user_content_block(None, text.into(), cx) }) .log_err(); } diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 12fc29b08f..0b3ace1baf 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -679,17 +679,19 @@ impl AcpThreadView { window: &mut Window, cx: &mut Context, ) { - let count = self.list_state.item_count(); match event { AcpThreadEvent::NewEntry => { let index = thread.read(cx).entries().len() - 1; self.sync_thread_entry_view(index, window, cx); - self.list_state.splice(count..count, 1); + self.list_state.splice(index..index, 1); } AcpThreadEvent::EntryUpdated(index) => { - let index = *index; - self.sync_thread_entry_view(index, window, cx); - self.list_state.splice(index..index + 1, 1); + self.sync_thread_entry_view(*index, window, cx); + self.list_state.splice(*index..index + 1, 1); + } + AcpThreadEvent::EntriesRemoved(range) => { + // TODO: Clean up unused diff editors and terminal views + self.list_state.splice(range.clone(), 0); } AcpThreadEvent::ToolAuthorizationRequired => { self.notify_with_sound("Waiting for tool confirmation", IconName::Info, window, cx); @@ -3789,6 +3791,7 @@ mod tests { fn prompt( &self, + _id: Option, params: acp::PromptRequest, cx: &mut App, ) -> Task> { @@ -3873,6 +3876,7 @@ mod tests { fn prompt( &self, + _id: Option, _params: acp::PromptRequest, _cx: &mut App, ) -> Task> { diff --git a/crates/agent_ui/src/agent_diff.rs b/crates/agent_ui/src/agent_diff.rs index 0abc5280f4..b9e1ea5d0a 100644 --- a/crates/agent_ui/src/agent_diff.rs +++ b/crates/agent_ui/src/agent_diff.rs @@ -1521,7 +1521,8 @@ impl AgentDiff { self.update_reviewing_editors(workspace, window, cx); } } - AcpThreadEvent::Stopped + AcpThreadEvent::EntriesRemoved(_) + | AcpThreadEvent::Stopped | AcpThreadEvent::ToolAuthorizationRequired | AcpThreadEvent::Error | AcpThreadEvent::ServerExited(_) => {} diff --git a/crates/fs/Cargo.toml b/crates/fs/Cargo.toml index 633fc1fc99..1d4161134e 100644 --- a/crates/fs/Cargo.toml +++ b/crates/fs/Cargo.toml @@ -51,6 +51,7 @@ ashpd.workspace = true [dev-dependencies] gpui = { workspace = true, features = ["test-support"] } +git = { workspace = true, features = ["test-support"] } [features] test-support = ["gpui/test-support", "git/test-support"] diff --git a/crates/fs/src/fake_git_repo.rs b/crates/fs/src/fake_git_repo.rs index 21b9cbca9a..f0936d400a 100644 --- a/crates/fs/src/fake_git_repo.rs +++ b/crates/fs/src/fake_git_repo.rs @@ -1,8 +1,9 @@ -use crate::{FakeFs, Fs}; +use crate::{FakeFs, FakeFsEntry, Fs}; use anyhow::{Context as _, Result}; use collections::{HashMap, HashSet}; use futures::future::{self, BoxFuture, join_all}; use git::{ + Oid, blame::Blame, repository::{ AskPassDelegate, Branch, CommitDetails, CommitOptions, FetchOptions, GitRepository, @@ -12,6 +13,7 @@ use git::{ }; use gpui::{AsyncApp, BackgroundExecutor, SharedString, Task}; use ignore::gitignore::GitignoreBuilder; +use parking_lot::Mutex; use rope::Rope; use smol::future::FutureExt as _; use std::{path::PathBuf, sync::Arc}; @@ -19,6 +21,7 @@ use std::{path::PathBuf, sync::Arc}; #[derive(Clone)] pub struct FakeGitRepository { pub(crate) fs: Arc, + pub(crate) checkpoints: Arc>>, pub(crate) executor: BackgroundExecutor, pub(crate) dot_git_path: PathBuf, pub(crate) repository_dir_path: PathBuf, @@ -469,22 +472,57 @@ impl GitRepository for FakeGitRepository { } fn checkpoint(&self) -> BoxFuture<'static, Result> { - unimplemented!() + let executor = self.executor.clone(); + let fs = self.fs.clone(); + let checkpoints = self.checkpoints.clone(); + let repository_dir_path = self.repository_dir_path.parent().unwrap().to_path_buf(); + async move { + executor.simulate_random_delay().await; + let oid = Oid::random(&mut executor.rng()); + let entry = fs.entry(&repository_dir_path)?; + checkpoints.lock().insert(oid, entry); + Ok(GitRepositoryCheckpoint { commit_sha: oid }) + } + .boxed() } - fn restore_checkpoint( - &self, - _checkpoint: GitRepositoryCheckpoint, - ) -> BoxFuture<'_, Result<()>> { - unimplemented!() + fn restore_checkpoint(&self, checkpoint: GitRepositoryCheckpoint) -> BoxFuture<'_, Result<()>> { + let executor = self.executor.clone(); + let fs = self.fs.clone(); + let checkpoints = self.checkpoints.clone(); + let repository_dir_path = self.repository_dir_path.parent().unwrap().to_path_buf(); + async move { + executor.simulate_random_delay().await; + let checkpoints = checkpoints.lock(); + let entry = checkpoints + .get(&checkpoint.commit_sha) + .context(format!("invalid checkpoint: {}", checkpoint.commit_sha))?; + fs.insert_entry(&repository_dir_path, entry.clone())?; + Ok(()) + } + .boxed() } fn compare_checkpoints( &self, - _left: GitRepositoryCheckpoint, - _right: GitRepositoryCheckpoint, + left: GitRepositoryCheckpoint, + right: GitRepositoryCheckpoint, ) -> BoxFuture<'_, Result> { - unimplemented!() + let executor = self.executor.clone(); + let checkpoints = self.checkpoints.clone(); + async move { + executor.simulate_random_delay().await; + let checkpoints = checkpoints.lock(); + let left = checkpoints + .get(&left.commit_sha) + .context(format!("invalid left checkpoint: {}", left.commit_sha))?; + let right = checkpoints + .get(&right.commit_sha) + .context(format!("invalid right checkpoint: {}", right.commit_sha))?; + + Ok(left == right) + } + .boxed() } fn diff_checkpoints( @@ -499,3 +537,63 @@ impl GitRepository for FakeGitRepository { unimplemented!() } } + +#[cfg(test)] +mod tests { + use crate::{FakeFs, Fs}; + use gpui::BackgroundExecutor; + use serde_json::json; + use std::path::Path; + use util::path; + + #[gpui::test] + async fn test_checkpoints(executor: BackgroundExecutor) { + let fs = FakeFs::new(executor); + fs.insert_tree( + path!("/"), + json!({ + "bar": { + "baz": "qux" + }, + "foo": { + ".git": {}, + "a": "lorem", + "b": "ipsum", + }, + }), + ) + .await; + fs.with_git_state(Path::new("/foo/.git"), true, |_git| {}) + .unwrap(); + let repository = fs.open_repo(Path::new("/foo/.git")).unwrap(); + + let checkpoint_1 = repository.checkpoint().await.unwrap(); + fs.write(Path::new("/foo/b"), b"IPSUM").await.unwrap(); + fs.write(Path::new("/foo/c"), b"dolor").await.unwrap(); + let checkpoint_2 = repository.checkpoint().await.unwrap(); + let checkpoint_3 = repository.checkpoint().await.unwrap(); + + assert!( + repository + .compare_checkpoints(checkpoint_2.clone(), checkpoint_3.clone()) + .await + .unwrap() + ); + assert!( + !repository + .compare_checkpoints(checkpoint_1.clone(), checkpoint_2.clone()) + .await + .unwrap() + ); + + repository.restore_checkpoint(checkpoint_1).await.unwrap(); + assert_eq!( + fs.files_with_contents(Path::new("")), + [ + (Path::new("/bar/baz").into(), b"qux".into()), + (Path::new("/foo/a").into(), b"lorem".into()), + (Path::new("/foo/b").into(), b"ipsum".into()) + ] + ); + } +} diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs index a2b75ac6a7..22bfdbcd66 100644 --- a/crates/fs/src/fs.rs +++ b/crates/fs/src/fs.rs @@ -924,7 +924,7 @@ pub struct FakeFs { #[cfg(any(test, feature = "test-support"))] struct FakeFsState { - root: Arc>, + root: FakeFsEntry, next_inode: u64, next_mtime: SystemTime, git_event_tx: smol::channel::Sender, @@ -939,7 +939,7 @@ struct FakeFsState { } #[cfg(any(test, feature = "test-support"))] -#[derive(Debug)] +#[derive(Clone, Debug)] enum FakeFsEntry { File { inode: u64, @@ -953,7 +953,7 @@ enum FakeFsEntry { inode: u64, mtime: MTime, len: u64, - entries: BTreeMap>>, + entries: BTreeMap, git_repo_state: Option>>, }, Symlink { @@ -961,6 +961,67 @@ enum FakeFsEntry { }, } +#[cfg(any(test, feature = "test-support"))] +impl PartialEq for FakeFsEntry { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + ( + Self::File { + inode: l_inode, + mtime: l_mtime, + len: l_len, + content: l_content, + git_dir_path: l_git_dir_path, + }, + Self::File { + inode: r_inode, + mtime: r_mtime, + len: r_len, + content: r_content, + git_dir_path: r_git_dir_path, + }, + ) => { + l_inode == r_inode + && l_mtime == r_mtime + && l_len == r_len + && l_content == r_content + && l_git_dir_path == r_git_dir_path + } + ( + Self::Dir { + inode: l_inode, + mtime: l_mtime, + len: l_len, + entries: l_entries, + git_repo_state: l_git_repo_state, + }, + Self::Dir { + inode: r_inode, + mtime: r_mtime, + len: r_len, + entries: r_entries, + git_repo_state: r_git_repo_state, + }, + ) => { + let same_repo_state = match (l_git_repo_state.as_ref(), r_git_repo_state.as_ref()) { + (Some(l), Some(r)) => Arc::ptr_eq(l, r), + (None, None) => true, + _ => false, + }; + l_inode == r_inode + && l_mtime == r_mtime + && l_len == r_len + && l_entries == r_entries + && same_repo_state + } + (Self::Symlink { target: l_target }, Self::Symlink { target: r_target }) => { + l_target == r_target + } + _ => false, + } + } +} + #[cfg(any(test, feature = "test-support"))] impl FakeFsState { fn get_and_increment_mtime(&mut self) -> MTime { @@ -975,25 +1036,9 @@ impl FakeFsState { inode } - fn read_path(&self, target: &Path) -> Result>> { - Ok(self - .try_read_path(target, true) - .ok_or_else(|| { - anyhow!(io::Error::new( - io::ErrorKind::NotFound, - format!("not found: {target:?}") - )) - })? - .0) - } - - fn try_read_path( - &self, - target: &Path, - follow_symlink: bool, - ) -> Option<(Arc>, PathBuf)> { - let mut path = target.to_path_buf(); + fn canonicalize(&self, target: &Path, follow_symlink: bool) -> Option { let mut canonical_path = PathBuf::new(); + let mut path = target.to_path_buf(); let mut entry_stack = Vec::new(); 'outer: loop { let mut path_components = path.components().peekable(); @@ -1003,7 +1048,7 @@ impl FakeFsState { Component::Prefix(prefix_component) => prefix = Some(prefix_component), Component::RootDir => { entry_stack.clear(); - entry_stack.push(self.root.clone()); + entry_stack.push(&self.root); canonical_path.clear(); match prefix { Some(prefix_component) => { @@ -1020,20 +1065,18 @@ impl FakeFsState { canonical_path.pop(); } Component::Normal(name) => { - let current_entry = entry_stack.last().cloned()?; - let current_entry = current_entry.lock(); - if let FakeFsEntry::Dir { entries, .. } = &*current_entry { - let entry = entries.get(name.to_str().unwrap()).cloned()?; + let current_entry = *entry_stack.last()?; + if let FakeFsEntry::Dir { entries, .. } = current_entry { + let entry = entries.get(name.to_str().unwrap())?; if path_components.peek().is_some() || follow_symlink { - let entry = entry.lock(); - if let FakeFsEntry::Symlink { target, .. } = &*entry { + if let FakeFsEntry::Symlink { target, .. } = entry { let mut target = target.clone(); target.extend(path_components); path = target; continue 'outer; } } - entry_stack.push(entry.clone()); + entry_stack.push(entry); canonical_path = canonical_path.join(name); } else { return None; @@ -1043,19 +1086,72 @@ impl FakeFsState { } break; } - Some((entry_stack.pop()?, canonical_path)) + + if entry_stack.is_empty() { + None + } else { + Some(canonical_path) + } } - fn write_path(&self, path: &Path, callback: Fn) -> Result + fn try_entry( + &mut self, + target: &Path, + follow_symlink: bool, + ) -> Option<(&mut FakeFsEntry, PathBuf)> { + let canonical_path = self.canonicalize(target, follow_symlink)?; + + let mut components = canonical_path.components(); + let Some(Component::RootDir) = components.next() else { + panic!( + "the path {:?} was not canonicalized properly {:?}", + target, canonical_path + ) + }; + + let mut entry = &mut self.root; + for component in components { + match component { + Component::Normal(name) => { + if let FakeFsEntry::Dir { entries, .. } = entry { + entry = entries.get_mut(name.to_str().unwrap())?; + } else { + return None; + } + } + _ => { + panic!( + "the path {:?} was not canonicalized properly {:?}", + target, canonical_path + ) + } + } + } + + Some((entry, canonical_path)) + } + + fn entry(&mut self, target: &Path) -> Result<&mut FakeFsEntry> { + Ok(self + .try_entry(target, true) + .ok_or_else(|| { + anyhow!(io::Error::new( + io::ErrorKind::NotFound, + format!("not found: {target:?}") + )) + })? + .0) + } + + fn write_path(&mut self, path: &Path, callback: Fn) -> Result where - Fn: FnOnce(btree_map::Entry>>) -> Result, + Fn: FnOnce(btree_map::Entry) -> Result, { let path = normalize_path(path); let filename = path.file_name().context("cannot overwrite the root")?; let parent_path = path.parent().unwrap(); - let parent = self.read_path(parent_path)?; - let mut parent = parent.lock(); + let parent = self.entry(parent_path)?; let new_entry = parent .dir_entries(parent_path)? .entry(filename.to_str().unwrap().into()); @@ -1105,13 +1201,13 @@ impl FakeFs { this: this.clone(), executor: executor.clone(), state: Arc::new(Mutex::new(FakeFsState { - root: Arc::new(Mutex::new(FakeFsEntry::Dir { + root: FakeFsEntry::Dir { inode: 0, mtime: MTime(UNIX_EPOCH), len: 0, entries: Default::default(), git_repo_state: None, - })), + }, git_event_tx: tx, next_mtime: UNIX_EPOCH + Self::SYSTEMTIME_INTERVAL, next_inode: 1, @@ -1161,15 +1257,15 @@ impl FakeFs { .write_path(path, move |entry| { match entry { btree_map::Entry::Vacant(e) => { - e.insert(Arc::new(Mutex::new(FakeFsEntry::File { + e.insert(FakeFsEntry::File { inode: new_inode, mtime: new_mtime, content: Vec::new(), len: 0, git_dir_path: None, - }))); + }); } - btree_map::Entry::Occupied(mut e) => match &mut *e.get_mut().lock() { + btree_map::Entry::Occupied(mut e) => match &mut *e.get_mut() { FakeFsEntry::File { mtime, .. } => *mtime = new_mtime, FakeFsEntry::Dir { mtime, .. } => *mtime = new_mtime, FakeFsEntry::Symlink { .. } => {} @@ -1188,7 +1284,7 @@ impl FakeFs { pub async fn insert_symlink(&self, path: impl AsRef, target: PathBuf) { let mut state = self.state.lock(); let path = path.as_ref(); - let file = Arc::new(Mutex::new(FakeFsEntry::Symlink { target })); + let file = FakeFsEntry::Symlink { target }; state .write_path(path.as_ref(), move |e| match e { btree_map::Entry::Vacant(e) => { @@ -1221,13 +1317,13 @@ impl FakeFs { match entry { btree_map::Entry::Vacant(e) => { kind = Some(PathEventKind::Created); - e.insert(Arc::new(Mutex::new(FakeFsEntry::File { + e.insert(FakeFsEntry::File { inode: new_inode, mtime: new_mtime, len: new_len, content: new_content, git_dir_path: None, - }))); + }); } btree_map::Entry::Occupied(mut e) => { kind = Some(PathEventKind::Changed); @@ -1237,7 +1333,7 @@ impl FakeFs { len, content, .. - } = &mut *e.get_mut().lock() + } = e.get_mut() { *mtime = new_mtime; *content = new_content; @@ -1259,9 +1355,8 @@ impl FakeFs { pub fn read_file_sync(&self, path: impl AsRef) -> Result> { let path = path.as_ref(); let path = normalize_path(path); - let state = self.state.lock(); - let entry = state.read_path(&path)?; - let entry = entry.lock(); + let mut state = self.state.lock(); + let entry = state.entry(&path)?; entry.file_content(&path).cloned() } @@ -1269,9 +1364,8 @@ impl FakeFs { let path = path.as_ref(); let path = normalize_path(path); self.simulate_random_delay().await; - let state = self.state.lock(); - let entry = state.read_path(&path)?; - let entry = entry.lock(); + let mut state = self.state.lock(); + let entry = state.entry(&path)?; entry.file_content(&path).cloned() } @@ -1292,6 +1386,25 @@ impl FakeFs { self.state.lock().flush_events(count); } + pub(crate) fn entry(&self, target: &Path) -> Result { + self.state.lock().entry(target).cloned() + } + + pub(crate) fn insert_entry(&self, target: &Path, new_entry: FakeFsEntry) -> Result<()> { + let mut state = self.state.lock(); + state.write_path(target, |entry| { + match entry { + btree_map::Entry::Vacant(vacant_entry) => { + vacant_entry.insert(new_entry); + } + btree_map::Entry::Occupied(mut occupied_entry) => { + occupied_entry.insert(new_entry); + } + } + Ok(()) + }) + } + #[must_use] pub fn insert_tree<'a>( &'a self, @@ -1361,20 +1474,19 @@ impl FakeFs { F: FnOnce(&mut FakeGitRepositoryState, &Path, &Path) -> T, { let mut state = self.state.lock(); - let entry = state.read_path(dot_git).context("open .git")?; - let mut entry = entry.lock(); + let git_event_tx = state.git_event_tx.clone(); + let entry = state.entry(dot_git).context("open .git")?; - if let FakeFsEntry::Dir { git_repo_state, .. } = &mut *entry { + if let FakeFsEntry::Dir { git_repo_state, .. } = entry { let repo_state = git_repo_state.get_or_insert_with(|| { log::debug!("insert git state for {dot_git:?}"); - Arc::new(Mutex::new(FakeGitRepositoryState::new( - state.git_event_tx.clone(), - ))) + Arc::new(Mutex::new(FakeGitRepositoryState::new(git_event_tx))) }); let mut repo_state = repo_state.lock(); let result = f(&mut repo_state, dot_git, dot_git); + drop(repo_state); if emit_git_event { state.emit_event([(dot_git, None)]); } @@ -1398,21 +1510,20 @@ impl FakeFs { } } .clone(); - drop(entry); - let Some((git_dir_entry, canonical_path)) = state.try_read_path(&path, true) else { + let Some((git_dir_entry, canonical_path)) = state.try_entry(&path, true) else { anyhow::bail!("pointed-to git dir {path:?} not found") }; let FakeFsEntry::Dir { git_repo_state, entries, .. - } = &mut *git_dir_entry.lock() + } = git_dir_entry else { anyhow::bail!("gitfile points to a non-directory") }; let common_dir = if let Some(child) = entries.get("commondir") { Path::new( - std::str::from_utf8(child.lock().file_content("commondir".as_ref())?) + std::str::from_utf8(child.file_content("commondir".as_ref())?) .context("commondir content")?, ) .to_owned() @@ -1420,15 +1531,14 @@ impl FakeFs { canonical_path.clone() }; let repo_state = git_repo_state.get_or_insert_with(|| { - Arc::new(Mutex::new(FakeGitRepositoryState::new( - state.git_event_tx.clone(), - ))) + Arc::new(Mutex::new(FakeGitRepositoryState::new(git_event_tx))) }); let mut repo_state = repo_state.lock(); let result = f(&mut repo_state, &canonical_path, &common_dir); if emit_git_event { + drop(repo_state); state.emit_event([(canonical_path, None)]); } @@ -1655,14 +1765,12 @@ impl FakeFs { pub fn paths(&self, include_dot_git: bool) -> Vec { let mut result = Vec::new(); let mut queue = collections::VecDeque::new(); - queue.push_back(( - PathBuf::from(util::path!("/")), - self.state.lock().root.clone(), - )); + let state = &*self.state.lock(); + queue.push_back((PathBuf::from(util::path!("/")), &state.root)); while let Some((path, entry)) = queue.pop_front() { - if let FakeFsEntry::Dir { entries, .. } = &*entry.lock() { + if let FakeFsEntry::Dir { entries, .. } = entry { for (name, entry) in entries { - queue.push_back((path.join(name), entry.clone())); + queue.push_back((path.join(name), entry)); } } if include_dot_git @@ -1679,14 +1787,12 @@ impl FakeFs { pub fn directories(&self, include_dot_git: bool) -> Vec { let mut result = Vec::new(); let mut queue = collections::VecDeque::new(); - queue.push_back(( - PathBuf::from(util::path!("/")), - self.state.lock().root.clone(), - )); + let state = &*self.state.lock(); + queue.push_back((PathBuf::from(util::path!("/")), &state.root)); while let Some((path, entry)) = queue.pop_front() { - if let FakeFsEntry::Dir { entries, .. } = &*entry.lock() { + if let FakeFsEntry::Dir { entries, .. } = entry { for (name, entry) in entries { - queue.push_back((path.join(name), entry.clone())); + queue.push_back((path.join(name), entry)); } if include_dot_git || !path @@ -1703,17 +1809,14 @@ impl FakeFs { pub fn files(&self) -> Vec { let mut result = Vec::new(); let mut queue = collections::VecDeque::new(); - queue.push_back(( - PathBuf::from(util::path!("/")), - self.state.lock().root.clone(), - )); + let state = &*self.state.lock(); + queue.push_back((PathBuf::from(util::path!("/")), &state.root)); while let Some((path, entry)) = queue.pop_front() { - let e = entry.lock(); - match &*e { + match entry { FakeFsEntry::File { .. } => result.push(path), FakeFsEntry::Dir { entries, .. } => { for (name, entry) in entries { - queue.push_back((path.join(name), entry.clone())); + queue.push_back((path.join(name), entry)); } } FakeFsEntry::Symlink { .. } => {} @@ -1725,13 +1828,10 @@ impl FakeFs { pub fn files_with_contents(&self, prefix: &Path) -> Vec<(PathBuf, Vec)> { let mut result = Vec::new(); let mut queue = collections::VecDeque::new(); - queue.push_back(( - PathBuf::from(util::path!("/")), - self.state.lock().root.clone(), - )); + let state = &*self.state.lock(); + queue.push_back((PathBuf::from(util::path!("/")), &state.root)); while let Some((path, entry)) = queue.pop_front() { - let e = entry.lock(); - match &*e { + match entry { FakeFsEntry::File { content, .. } => { if path.starts_with(prefix) { result.push((path, content.clone())); @@ -1739,7 +1839,7 @@ impl FakeFs { } FakeFsEntry::Dir { entries, .. } => { for (name, entry) in entries { - queue.push_back((path.join(name), entry.clone())); + queue.push_back((path.join(name), entry)); } } FakeFsEntry::Symlink { .. } => {} @@ -1805,10 +1905,7 @@ impl FakeFsEntry { } } - fn dir_entries( - &mut self, - path: &Path, - ) -> Result<&mut BTreeMap>>> { + fn dir_entries(&mut self, path: &Path) -> Result<&mut BTreeMap> { if let Self::Dir { entries, .. } = self { Ok(entries) } else { @@ -1855,12 +1952,12 @@ struct FakeHandle { impl FileHandle for FakeHandle { fn current_path(&self, fs: &Arc) -> Result { let fs = fs.as_fake(); - let state = fs.state.lock(); - let Some(target) = state.moves.get(&self.inode) else { + let mut state = fs.state.lock(); + let Some(target) = state.moves.get(&self.inode).cloned() else { anyhow::bail!("fake fd not moved") }; - if state.try_read_path(&target, false).is_some() { + if state.try_entry(&target, false).is_some() { return Ok(target.clone()); } anyhow::bail!("fake fd target not found") @@ -1888,13 +1985,13 @@ impl Fs for FakeFs { state.write_path(&cur_path, |entry| { entry.or_insert_with(|| { created_dirs.push((cur_path.clone(), Some(PathEventKind::Created))); - Arc::new(Mutex::new(FakeFsEntry::Dir { + FakeFsEntry::Dir { inode, mtime, len: 0, entries: Default::default(), git_repo_state: None, - })) + } }); Ok(()) })? @@ -1909,13 +2006,13 @@ impl Fs for FakeFs { let mut state = self.state.lock(); let inode = state.get_and_increment_inode(); let mtime = state.get_and_increment_mtime(); - let file = Arc::new(Mutex::new(FakeFsEntry::File { + let file = FakeFsEntry::File { inode, mtime, len: 0, content: Vec::new(), git_dir_path: None, - })); + }; let mut kind = Some(PathEventKind::Created); state.write_path(path, |entry| { match entry { @@ -1939,7 +2036,7 @@ impl Fs for FakeFs { async fn create_symlink(&self, path: &Path, target: PathBuf) -> Result<()> { let mut state = self.state.lock(); - let file = Arc::new(Mutex::new(FakeFsEntry::Symlink { target })); + let file = FakeFsEntry::Symlink { target }; state .write_path(path.as_ref(), move |e| match e { btree_map::Entry::Vacant(e) => { @@ -2002,7 +2099,7 @@ impl Fs for FakeFs { } })?; - let inode = match *moved_entry.lock() { + let inode = match moved_entry { FakeFsEntry::File { inode, .. } => inode, FakeFsEntry::Dir { inode, .. } => inode, _ => 0, @@ -2051,8 +2148,8 @@ impl Fs for FakeFs { let mut state = self.state.lock(); let mtime = state.get_and_increment_mtime(); let inode = state.get_and_increment_inode(); - let source_entry = state.read_path(&source)?; - let content = source_entry.lock().file_content(&source)?.clone(); + let source_entry = state.entry(&source)?; + let content = source_entry.file_content(&source)?.clone(); let mut kind = Some(PathEventKind::Created); state.write_path(&target, |e| match e { btree_map::Entry::Occupied(e) => { @@ -2066,13 +2163,13 @@ impl Fs for FakeFs { } } btree_map::Entry::Vacant(e) => Ok(Some( - e.insert(Arc::new(Mutex::new(FakeFsEntry::File { + e.insert(FakeFsEntry::File { inode, mtime, len: content.len() as u64, content, git_dir_path: None, - }))) + }) .clone(), )), })?; @@ -2088,8 +2185,7 @@ impl Fs for FakeFs { let base_name = path.file_name().context("cannot remove the root")?; let mut state = self.state.lock(); - let parent_entry = state.read_path(parent_path)?; - let mut parent_entry = parent_entry.lock(); + let parent_entry = state.entry(parent_path)?; let entry = parent_entry .dir_entries(parent_path)? .entry(base_name.to_str().unwrap().into()); @@ -2100,15 +2196,14 @@ impl Fs for FakeFs { anyhow::bail!("{path:?} does not exist"); } } - btree_map::Entry::Occupied(e) => { + btree_map::Entry::Occupied(mut entry) => { { - let mut entry = e.get().lock(); - let children = entry.dir_entries(&path)?; + let children = entry.get_mut().dir_entries(&path)?; if !options.recursive && !children.is_empty() { anyhow::bail!("{path:?} is not empty"); } } - e.remove(); + entry.remove(); } } state.emit_event([(path, Some(PathEventKind::Removed))]); @@ -2122,8 +2217,7 @@ impl Fs for FakeFs { let parent_path = path.parent().context("cannot remove the root")?; let base_name = path.file_name().unwrap(); let mut state = self.state.lock(); - let parent_entry = state.read_path(parent_path)?; - let mut parent_entry = parent_entry.lock(); + let parent_entry = state.entry(parent_path)?; let entry = parent_entry .dir_entries(parent_path)? .entry(base_name.to_str().unwrap().into()); @@ -2133,9 +2227,9 @@ impl Fs for FakeFs { anyhow::bail!("{path:?} does not exist"); } } - btree_map::Entry::Occupied(e) => { - e.get().lock().file_content(&path)?; - e.remove(); + btree_map::Entry::Occupied(mut entry) => { + entry.get_mut().file_content(&path)?; + entry.remove(); } } state.emit_event([(path, Some(PathEventKind::Removed))]); @@ -2149,12 +2243,10 @@ impl Fs for FakeFs { async fn open_handle(&self, path: &Path) -> Result> { self.simulate_random_delay().await; - let state = self.state.lock(); - let entry = state.read_path(&path)?; - let entry = entry.lock(); - let inode = match *entry { - FakeFsEntry::File { inode, .. } => inode, - FakeFsEntry::Dir { inode, .. } => inode, + let mut state = self.state.lock(); + let inode = match state.entry(&path)? { + FakeFsEntry::File { inode, .. } => *inode, + FakeFsEntry::Dir { inode, .. } => *inode, _ => unreachable!(), }; Ok(Arc::new(FakeHandle { inode })) @@ -2204,8 +2296,8 @@ impl Fs for FakeFs { let path = normalize_path(path); self.simulate_random_delay().await; let state = self.state.lock(); - let (_, canonical_path) = state - .try_read_path(&path, true) + let canonical_path = state + .canonicalize(&path, true) .with_context(|| format!("path does not exist: {path:?}"))?; Ok(canonical_path) } @@ -2213,9 +2305,9 @@ impl Fs for FakeFs { async fn is_file(&self, path: &Path) -> bool { let path = normalize_path(path); self.simulate_random_delay().await; - let state = self.state.lock(); - if let Some((entry, _)) = state.try_read_path(&path, true) { - entry.lock().is_file() + let mut state = self.state.lock(); + if let Some((entry, _)) = state.try_entry(&path, true) { + entry.is_file() } else { false } @@ -2232,17 +2324,16 @@ impl Fs for FakeFs { let path = normalize_path(path); let mut state = self.state.lock(); state.metadata_call_count += 1; - if let Some((mut entry, _)) = state.try_read_path(&path, false) { - let is_symlink = entry.lock().is_symlink(); + if let Some((mut entry, _)) = state.try_entry(&path, false) { + let is_symlink = entry.is_symlink(); if is_symlink { - if let Some(e) = state.try_read_path(&path, true).map(|e| e.0) { + if let Some(e) = state.try_entry(&path, true).map(|e| e.0) { entry = e; } else { return Ok(None); } } - let entry = entry.lock(); Ok(Some(match &*entry { FakeFsEntry::File { inode, mtime, len, .. @@ -2274,12 +2365,11 @@ impl Fs for FakeFs { async fn read_link(&self, path: &Path) -> Result { self.simulate_random_delay().await; let path = normalize_path(path); - let state = self.state.lock(); + let mut state = self.state.lock(); let (entry, _) = state - .try_read_path(&path, false) + .try_entry(&path, false) .with_context(|| format!("path does not exist: {path:?}"))?; - let entry = entry.lock(); - if let FakeFsEntry::Symlink { target } = &*entry { + if let FakeFsEntry::Symlink { target } = entry { Ok(target.clone()) } else { anyhow::bail!("not a symlink: {path:?}") @@ -2294,8 +2384,7 @@ impl Fs for FakeFs { let path = normalize_path(path); let mut state = self.state.lock(); state.read_dir_call_count += 1; - let entry = state.read_path(&path)?; - let mut entry = entry.lock(); + let entry = state.entry(&path)?; let children = entry.dir_entries(&path)?; let paths = children .keys() @@ -2359,6 +2448,7 @@ impl Fs for FakeFs { dot_git_path: abs_dot_git.to_path_buf(), repository_dir_path: repository_dir_path.to_owned(), common_dir_path: common_dir_path.to_owned(), + checkpoints: Arc::default(), }) as _ }, ) diff --git a/crates/git/Cargo.toml b/crates/git/Cargo.toml index ab2210094d..74656f1d4c 100644 --- a/crates/git/Cargo.toml +++ b/crates/git/Cargo.toml @@ -12,7 +12,7 @@ workspace = true path = "src/git.rs" [features] -test-support = [] +test-support = ["rand"] [dependencies] anyhow.workspace = true @@ -26,6 +26,7 @@ http_client.workspace = true log.workspace = true parking_lot.workspace = true regex.workspace = true +rand = { workspace = true, optional = true } rope.workspace = true schemars.workspace = true serde.workspace = true @@ -47,3 +48,4 @@ text = { workspace = true, features = ["test-support"] } unindent.workspace = true gpui = { workspace = true, features = ["test-support"] } tempfile.workspace = true +rand.workspace = true diff --git a/crates/git/src/git.rs b/crates/git/src/git.rs index e6336eb656..e84014129c 100644 --- a/crates/git/src/git.rs +++ b/crates/git/src/git.rs @@ -119,6 +119,13 @@ impl Oid { Ok(Self(oid)) } + #[cfg(any(test, feature = "test-support"))] + pub fn random(rng: &mut impl rand::Rng) -> Self { + let mut bytes = [0; 20]; + rng.fill(&mut bytes); + Self::from_bytes(&bytes).unwrap() + } + pub fn as_bytes(&self) -> &[u8] { self.0.as_bytes() } From 6c1f19571a5647bff02ef98b7de159754a884504 Mon Sep 17 00:00:00 2001 From: Gilmar Sales Date: Wed, 13 Aug 2025 12:59:59 -0300 Subject: [PATCH 09/74] Enhance icon detection for files with custom suffixes (#34170) Fixes custom file suffixes (module.ts) of some icon themes like: - **Symbols Icon Theme** image - **Bearded Icon Theme** image Release Notes: - Fixed icon detection for files with custom suffixes like `module.ts` that are overwritten by the language's icon `.ts` --- crates/file_icons/src/file_icons.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/file_icons/src/file_icons.rs b/crates/file_icons/src/file_icons.rs index 2f159771b1..82a8e05d85 100644 --- a/crates/file_icons/src/file_icons.rs +++ b/crates/file_icons/src/file_icons.rs @@ -33,13 +33,23 @@ impl FileIcons { // TODO: Associate a type with the languages and have the file's language // override these associations - // check if file name is in suffixes - // e.g. catch file named `eslint.config.js` instead of `.eslint.config.js` - if let Some(typ) = path.file_name().and_then(|typ| typ.to_str()) { + if let Some(mut typ) = path.file_name().and_then(|typ| typ.to_str()) { + // check if file name is in suffixes + // e.g. catch file named `eslint.config.js` instead of `.eslint.config.js` let maybe_path = get_icon_from_suffix(typ); if maybe_path.is_some() { return maybe_path; } + + // check if suffix based on first dot is in suffixes + // e.g. consider `module.js` as suffix to angular's module file named `auth.module.js` + while let Some((_, suffix)) = typ.split_once('.') { + let maybe_path = get_icon_from_suffix(suffix); + if maybe_path.is_some() { + return maybe_path; + } + typ = suffix; + } } // primary case: check if the files extension or the hidden file name From a7442d8880df3019fd47479849cd4b9653bae364 Mon Sep 17 00:00:00 2001 From: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:02:14 -0400 Subject: [PATCH 10/74] onboarding: Add more telemetry (#36121) 1. Welcome Page Open 2. Welcome Nav clicked 3. Skip clicked 4. Font changed 5. Import settings clicked 6. Inlay Hints 7. Git Blame 8. Format on Save 9. Font Ligature 10. Ai Enabled 11. Ai Provider Modal open Release Notes: - N/A --------- Co-authored-by: Marshall Bowers --- Cargo.lock | 1 + crates/onboarding/Cargo.toml | 1 + crates/onboarding/src/ai_setup_page.rs | 24 ++++++++--- crates/onboarding/src/editing_page.rs | 59 +++++++++++++++++++++++--- crates/onboarding/src/onboarding.rs | 45 +++++++++++++++++--- 5 files changed, 111 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9078b32f7a..b67188c53b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11172,6 +11172,7 @@ dependencies = [ "schemars", "serde", "settings", + "telemetry", "theme", "ui", "util", diff --git a/crates/onboarding/Cargo.toml b/crates/onboarding/Cargo.toml index cb07bb5dab..8aed1e3287 100644 --- a/crates/onboarding/Cargo.toml +++ b/crates/onboarding/Cargo.toml @@ -38,6 +38,7 @@ project.workspace = true schemars.workspace = true serde.workspace = true settings.workspace = true +telemetry.workspace = true theme.workspace = true ui.workspace = true util.workspace = true diff --git a/crates/onboarding/src/ai_setup_page.rs b/crates/onboarding/src/ai_setup_page.rs index 8203f96479..bb1932bdf2 100644 --- a/crates/onboarding/src/ai_setup_page.rs +++ b/crates/onboarding/src/ai_setup_page.rs @@ -188,6 +188,11 @@ fn render_llm_provider_card( workspace .update(cx, |workspace, cx| { workspace.toggle_modal(window, cx, |window, cx| { + telemetry::event!( + "Welcome AI Modal Opened", + provider = provider.name().0, + ); + let modal = AiConfigurationModal::new( provider.clone(), window, @@ -245,16 +250,25 @@ pub(crate) fn render_ai_setup_page( ToggleState::Selected }, |&toggle_state, _, cx| { + let enabled = match toggle_state { + ToggleState::Indeterminate => { + return; + } + ToggleState::Unselected => true, + ToggleState::Selected => false, + }; + + telemetry::event!( + "Welcome AI Enabled", + toggle = if enabled { "on" } else { "off" }, + ); + let fs = ::global(cx); update_settings_file::( fs, cx, move |ai_settings: &mut Option, _| { - *ai_settings = match toggle_state { - ToggleState::Indeterminate => None, - ToggleState::Unselected => Some(true), - ToggleState::Selected => Some(false), - }; + *ai_settings = Some(enabled); }, ); }, diff --git a/crates/onboarding/src/editing_page.rs b/crates/onboarding/src/editing_page.rs index c69bd3852e..aa7f4eee74 100644 --- a/crates/onboarding/src/editing_page.rs +++ b/crates/onboarding/src/editing_page.rs @@ -35,6 +35,11 @@ fn write_show_mini_map(show: ShowMinimap, cx: &mut App) { EditorSettings::override_global(curr_settings, cx); update_settings_file::(fs, cx, move |editor_settings, _| { + telemetry::event!( + "Welcome Minimap Clicked", + from = editor_settings.minimap.unwrap_or_default(), + to = show + ); editor_settings.minimap.get_or_insert_default().show = Some(show); }); } @@ -71,7 +76,7 @@ fn read_git_blame(cx: &App) -> bool { ProjectSettings::get_global(cx).git.inline_blame_enabled() } -fn set_git_blame(enabled: bool, cx: &mut App) { +fn write_git_blame(enabled: bool, cx: &mut App) { let fs = ::global(cx); let mut curr_settings = ProjectSettings::get_global(cx).clone(); @@ -95,6 +100,12 @@ fn write_ui_font_family(font: SharedString, cx: &mut App) { let fs = ::global(cx); update_settings_file::(fs, cx, move |theme_settings, _| { + telemetry::event!( + "Welcome Font Changed", + type = "ui font", + old = theme_settings.ui_font_family, + new = font.clone() + ); theme_settings.ui_font_family = Some(FontFamilyName(font.into())); }); } @@ -119,6 +130,13 @@ fn write_buffer_font_family(font_family: SharedString, cx: &mut App) { let fs = ::global(cx); update_settings_file::(fs, cx, move |theme_settings, _| { + telemetry::event!( + "Welcome Font Changed", + type = "editor font", + old = theme_settings.buffer_font_family, + new = font_family.clone() + ); + theme_settings.buffer_font_family = Some(FontFamilyName(font_family.into())); }); } @@ -197,7 +215,7 @@ fn render_setting_import_button( .color(Color::Muted) .size(IconSize::XSmall), ) - .child(Label::new(label)), + .child(Label::new(label.clone())), ) .when(imported, |this| { this.child( @@ -212,7 +230,10 @@ fn render_setting_import_button( ) }), ) - .on_click(move |_, window, cx| window.dispatch_action(action.boxed_clone(), cx)), + .on_click(move |_, window, cx| { + telemetry::event!("Welcome Import Settings", import_source = label,); + window.dispatch_action(action.boxed_clone(), cx); + }), ) } @@ -605,7 +626,13 @@ fn render_popular_settings_section( ui::ToggleState::Unselected }, |toggle_state, _, cx| { - write_font_ligatures(toggle_state == &ToggleState::Selected, cx); + let enabled = toggle_state == &ToggleState::Selected; + telemetry::event!( + "Welcome Font Ligature", + options = if enabled { "on" } else { "off" }, + ); + + write_font_ligatures(enabled, cx); }, ) .tab_index({ @@ -625,7 +652,13 @@ fn render_popular_settings_section( ui::ToggleState::Unselected }, |toggle_state, _, cx| { - write_format_on_save(toggle_state == &ToggleState::Selected, cx); + let enabled = toggle_state == &ToggleState::Selected; + telemetry::event!( + "Welcome Format On Save Changed", + options = if enabled { "on" } else { "off" }, + ); + + write_format_on_save(enabled, cx); }, ) .tab_index({ @@ -644,7 +677,13 @@ fn render_popular_settings_section( ui::ToggleState::Unselected }, |toggle_state, _, cx| { - write_inlay_hints(toggle_state == &ToggleState::Selected, cx); + let enabled = toggle_state == &ToggleState::Selected; + telemetry::event!( + "Welcome Inlay Hints Changed", + options = if enabled { "on" } else { "off" }, + ); + + write_inlay_hints(enabled, cx); }, ) .tab_index({ @@ -663,7 +702,13 @@ fn render_popular_settings_section( ui::ToggleState::Unselected }, |toggle_state, _, cx| { - set_git_blame(toggle_state == &ToggleState::Selected, cx); + let enabled = toggle_state == &ToggleState::Selected; + telemetry::event!( + "Welcome Git Blame Changed", + options = if enabled { "on" } else { "off" }, + ); + + write_git_blame(enabled, cx); }, ) .tab_index({ diff --git a/crates/onboarding/src/onboarding.rs b/crates/onboarding/src/onboarding.rs index c86871c919..3fb6f9b520 100644 --- a/crates/onboarding/src/onboarding.rs +++ b/crates/onboarding/src/onboarding.rs @@ -214,6 +214,7 @@ pub fn init(cx: &mut App) { } pub fn show_onboarding_view(app_state: Arc, cx: &mut App) -> Task> { + telemetry::event!("Onboarding Page Opened"); open_new( Default::default(), app_state, @@ -242,6 +243,16 @@ enum SelectedPage { AiSetup, } +impl SelectedPage { + fn name(&self) -> &'static str { + match self { + SelectedPage::Basics => "Basics", + SelectedPage::Editing => "Editing", + SelectedPage::AiSetup => "AI Setup", + } + } +} + struct Onboarding { workspace: WeakEntity, focus_handle: FocusHandle, @@ -261,7 +272,21 @@ impl Onboarding { }) } - fn set_page(&mut self, page: SelectedPage, cx: &mut Context) { + fn set_page( + &mut self, + page: SelectedPage, + clicked: Option<&'static str>, + cx: &mut Context, + ) { + if let Some(click) = clicked { + telemetry::event!( + "Welcome Tab Clicked", + from = self.selected_page.name(), + to = page.name(), + clicked = click, + ); + } + self.selected_page = page; cx.notify(); cx.emit(ItemEvent::UpdateTab); @@ -325,8 +350,13 @@ impl Onboarding { gpui::Empty.into_any_element(), IntoElement::into_any_element, )) - .on_click(cx.listener(move |this, _, _, cx| { - this.set_page(page, cx); + .on_click(cx.listener(move |this, click_event, _, cx| { + let click = match click_event { + gpui::ClickEvent::Mouse(_) => "mouse", + gpui::ClickEvent::Keyboard(_) => "keyboard", + }; + + this.set_page(page, Some(click), cx); })) }) } @@ -475,6 +505,7 @@ impl Onboarding { } fn on_finish(_: &Finish, _: &mut Window, cx: &mut App) { + telemetry::event!("Welcome Skip Clicked"); go_to_welcome_page(cx); } @@ -532,13 +563,13 @@ impl Render for Onboarding { .on_action(Self::handle_sign_in) .on_action(Self::handle_open_account) .on_action(cx.listener(|this, _: &ActivateBasicsPage, _, cx| { - this.set_page(SelectedPage::Basics, cx); + this.set_page(SelectedPage::Basics, Some("action"), cx); })) .on_action(cx.listener(|this, _: &ActivateEditingPage, _, cx| { - this.set_page(SelectedPage::Editing, cx); + this.set_page(SelectedPage::Editing, Some("action"), cx); })) .on_action(cx.listener(|this, _: &ActivateAISetupPage, _, cx| { - this.set_page(SelectedPage::AiSetup, cx); + this.set_page(SelectedPage::AiSetup, Some("action"), cx); })) .on_action(cx.listener(|_, _: &menu::SelectNext, window, cx| { window.focus_next(); @@ -806,7 +837,7 @@ impl workspace::SerializableItem for Onboarding { if let Some(page) = page { zlog::info!("Onboarding page {page:?} loaded"); onboarding_page.update(cx, |onboarding_page, cx| { - onboarding_page.set_page(page, cx); + onboarding_page.set_page(page, None, cx); }) } onboarding_page From d9a94a54966cf4e1ebd3aa292ed24b55d7927afb Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:18:24 -0300 Subject: [PATCH 11/74] onboarding: Remove feature flag and old welcome crate (#36110) Release Notes: - N/A --------- Co-authored-by: MrSubidubi Co-authored-by: Anthony --- Cargo.lock | 30 -- Cargo.toml | 2 - crates/onboarding/Cargo.toml | 2 - .../src/base_keymap_picker.rs | 2 +- .../src/multibuffer_hint.rs | 0 crates/onboarding/src/onboarding.rs | 52 +- crates/welcome/Cargo.toml | 40 -- crates/welcome/LICENSE-GPL | 1 - crates/welcome/src/welcome.rs | 446 ------------------ crates/workspace/src/workspace.rs | 2 - crates/zed/Cargo.toml | 1 - crates/zed/src/main.rs | 5 +- crates/zed/src/zed.rs | 5 +- crates/zed/src/zed/app_menus.rs | 2 +- crates/zed/src/zed/open_listener.rs | 5 +- docs/src/telemetry.md | 5 +- 16 files changed, 26 insertions(+), 574 deletions(-) rename crates/{welcome => onboarding}/src/base_keymap_picker.rs (99%) rename crates/{welcome => onboarding}/src/multibuffer_hint.rs (100%) delete mode 100644 crates/welcome/Cargo.toml delete mode 120000 crates/welcome/LICENSE-GPL delete mode 100644 crates/welcome/src/welcome.rs diff --git a/Cargo.lock b/Cargo.lock index b67188c53b..8458c4af4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11152,12 +11152,10 @@ dependencies = [ "ai_onboarding", "anyhow", "client", - "command_palette_hooks", "component", "db", "documented", "editor", - "feature_flags", "fs", "fuzzy", "git", @@ -18888,33 +18886,6 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" -[[package]] -name = "welcome" -version = "0.1.0" -dependencies = [ - "anyhow", - "client", - "component", - "db", - "documented", - "editor", - "fuzzy", - "gpui", - "install_cli", - "language", - "picker", - "project", - "serde", - "settings", - "telemetry", - "ui", - "util", - "vim_mode_setting", - "workspace", - "workspace-hack", - "zed_actions", -] - [[package]] name = "which" version = "4.4.2" @@ -20669,7 +20640,6 @@ dependencies = [ "watch", "web_search", "web_search_providers", - "welcome", "windows 0.61.1", "winresource", "workspace", diff --git a/Cargo.toml b/Cargo.toml index 8cb3c34a8a..1baa6d3d74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -185,7 +185,6 @@ members = [ "crates/watch", "crates/web_search", "crates/web_search_providers", - "crates/welcome", "crates/workspace", "crates/worktree", "crates/x_ai", @@ -412,7 +411,6 @@ vim_mode_setting = { path = "crates/vim_mode_setting" } watch = { path = "crates/watch" } web_search = { path = "crates/web_search" } web_search_providers = { path = "crates/web_search_providers" } -welcome = { path = "crates/welcome" } workspace = { path = "crates/workspace" } worktree = { path = "crates/worktree" } x_ai = { path = "crates/x_ai" } diff --git a/crates/onboarding/Cargo.toml b/crates/onboarding/Cargo.toml index 8aed1e3287..4157be3172 100644 --- a/crates/onboarding/Cargo.toml +++ b/crates/onboarding/Cargo.toml @@ -18,12 +18,10 @@ default = [] ai_onboarding.workspace = true anyhow.workspace = true client.workspace = true -command_palette_hooks.workspace = true component.workspace = true db.workspace = true documented.workspace = true editor.workspace = true -feature_flags.workspace = true fs.workspace = true fuzzy.workspace = true git.workspace = true diff --git a/crates/welcome/src/base_keymap_picker.rs b/crates/onboarding/src/base_keymap_picker.rs similarity index 99% rename from crates/welcome/src/base_keymap_picker.rs rename to crates/onboarding/src/base_keymap_picker.rs index 92317ca711..0ac07d9a9d 100644 --- a/crates/welcome/src/base_keymap_picker.rs +++ b/crates/onboarding/src/base_keymap_picker.rs @@ -12,7 +12,7 @@ use util::ResultExt; use workspace::{ModalView, Workspace, ui::HighlightedLabel}; actions!( - welcome, + zed, [ /// Toggles the base keymap selector modal. ToggleBaseKeymapSelector diff --git a/crates/welcome/src/multibuffer_hint.rs b/crates/onboarding/src/multibuffer_hint.rs similarity index 100% rename from crates/welcome/src/multibuffer_hint.rs rename to crates/onboarding/src/multibuffer_hint.rs diff --git a/crates/onboarding/src/onboarding.rs b/crates/onboarding/src/onboarding.rs index 3fb6f9b520..2444e5d44a 100644 --- a/crates/onboarding/src/onboarding.rs +++ b/crates/onboarding/src/onboarding.rs @@ -1,8 +1,7 @@ -use crate::welcome::{ShowWelcome, WelcomePage}; +pub use crate::welcome::ShowWelcome; +use crate::{multibuffer_hint::MultibufferHint, welcome::WelcomePage}; use client::{Client, UserStore, zed_urls}; -use command_palette_hooks::CommandPaletteFilter; use db::kvp::KEY_VALUE_STORE; -use feature_flags::{FeatureFlag, FeatureFlagViewExt as _}; use fs::Fs; use gpui::{ Action, AnyElement, App, AppContext, AsyncWindowContext, Context, Entity, EventEmitter, @@ -27,17 +26,13 @@ use workspace::{ }; mod ai_setup_page; +mod base_keymap_picker; mod basics_page; mod editing_page; +pub mod multibuffer_hint; mod theme_preview; mod welcome; -pub struct OnBoardingFeatureFlag {} - -impl FeatureFlag for OnBoardingFeatureFlag { - const NAME: &'static str = "onboarding"; -} - /// Imports settings from Visual Studio Code. #[derive(Copy, Clone, Debug, Default, PartialEq, Deserialize, JsonSchema, Action)] #[action(namespace = zed)] @@ -57,6 +52,7 @@ pub struct ImportCursorSettings { } pub const FIRST_OPEN: &str = "first_open"; +pub const DOCS_URL: &str = "https://zed.dev/docs/"; actions!( zed, @@ -80,11 +76,19 @@ actions!( /// Sign in while in the onboarding flow. SignIn, /// Open the user account in zed.dev while in the onboarding flow. - OpenAccount + OpenAccount, + /// Resets the welcome screen hints to their initial state. + ResetHints ] ); pub fn init(cx: &mut App) { + cx.observe_new(|workspace: &mut Workspace, _, _cx| { + workspace + .register_action(|_workspace, _: &ResetHints, _, cx| MultibufferHint::set_count(0, cx)); + }) + .detach(); + cx.on_action(|_: &OpenOnboarding, cx| { with_active_or_new_workspace(cx, |workspace, window, cx| { workspace @@ -182,34 +186,8 @@ pub fn init(cx: &mut App) { }) .detach(); - cx.observe_new::(|_, window, cx| { - let Some(window) = window else { - return; - }; + base_keymap_picker::init(cx); - let onboarding_actions = [ - std::any::TypeId::of::(), - std::any::TypeId::of::(), - ]; - - CommandPaletteFilter::update_global(cx, |filter, _cx| { - filter.hide_action_types(&onboarding_actions); - }); - - cx.observe_flag::(window, move |is_enabled, _, _, cx| { - if is_enabled { - CommandPaletteFilter::update_global(cx, |filter, _cx| { - filter.show_action_types(onboarding_actions.iter()); - }); - } else { - CommandPaletteFilter::update_global(cx, |filter, _cx| { - filter.hide_action_types(&onboarding_actions); - }); - } - }) - .detach(); - }) - .detach(); register_serializable_item::(cx); } diff --git a/crates/welcome/Cargo.toml b/crates/welcome/Cargo.toml deleted file mode 100644 index acb3fe0f84..0000000000 --- a/crates/welcome/Cargo.toml +++ /dev/null @@ -1,40 +0,0 @@ -[package] -name = "welcome" -version = "0.1.0" -edition.workspace = true -publish.workspace = true -license = "GPL-3.0-or-later" - -[lints] -workspace = true - -[lib] -path = "src/welcome.rs" - -[features] -test-support = [] - -[dependencies] -anyhow.workspace = true -client.workspace = true -component.workspace = true -db.workspace = true -documented.workspace = true -fuzzy.workspace = true -gpui.workspace = true -install_cli.workspace = true -language.workspace = true -picker.workspace = true -project.workspace = true -serde.workspace = true -settings.workspace = true -telemetry.workspace = true -ui.workspace = true -util.workspace = true -vim_mode_setting.workspace = true -workspace-hack.workspace = true -workspace.workspace = true -zed_actions.workspace = true - -[dev-dependencies] -editor = { workspace = true, features = ["test-support"] } diff --git a/crates/welcome/LICENSE-GPL b/crates/welcome/LICENSE-GPL deleted file mode 120000 index 89e542f750..0000000000 --- a/crates/welcome/LICENSE-GPL +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE-GPL \ No newline at end of file diff --git a/crates/welcome/src/welcome.rs b/crates/welcome/src/welcome.rs deleted file mode 100644 index b0a1c316f4..0000000000 --- a/crates/welcome/src/welcome.rs +++ /dev/null @@ -1,446 +0,0 @@ -use client::{TelemetrySettings, telemetry::Telemetry}; -use db::kvp::KEY_VALUE_STORE; -use gpui::{ - Action, App, Context, Entity, EventEmitter, FocusHandle, Focusable, InteractiveElement, - ParentElement, Render, Styled, Subscription, Task, WeakEntity, Window, actions, svg, -}; -use language::language_settings::{EditPredictionProvider, all_language_settings}; -use project::DisableAiSettings; -use settings::{Settings, SettingsStore}; -use std::sync::Arc; -use ui::{CheckboxWithLabel, ElevationIndex, Tooltip, prelude::*}; -use util::ResultExt; -use vim_mode_setting::VimModeSetting; -use workspace::{ - AppState, Welcome, Workspace, WorkspaceId, - dock::DockPosition, - item::{Item, ItemEvent}, - open_new, -}; - -pub use multibuffer_hint::*; - -mod base_keymap_picker; -mod multibuffer_hint; - -actions!( - welcome, - [ - /// Resets the welcome screen hints to their initial state. - ResetHints - ] -); - -pub const FIRST_OPEN: &str = "first_open"; -pub const DOCS_URL: &str = "https://zed.dev/docs/"; - -pub fn init(cx: &mut App) { - cx.observe_new(|workspace: &mut Workspace, _, _cx| { - workspace.register_action(|workspace, _: &Welcome, window, cx| { - let welcome_page = WelcomePage::new(workspace, cx); - workspace.add_item_to_active_pane(Box::new(welcome_page), None, true, window, cx) - }); - workspace - .register_action(|_workspace, _: &ResetHints, _, cx| MultibufferHint::set_count(0, cx)); - }) - .detach(); - - base_keymap_picker::init(cx); -} - -pub fn show_welcome_view(app_state: Arc, cx: &mut App) -> Task> { - open_new( - Default::default(), - app_state, - cx, - |workspace, window, cx| { - workspace.toggle_dock(DockPosition::Left, window, cx); - let welcome_page = WelcomePage::new(workspace, cx); - workspace.add_item_to_center(Box::new(welcome_page.clone()), window, cx); - - window.focus(&welcome_page.focus_handle(cx)); - - cx.notify(); - - db::write_and_log(cx, || { - KEY_VALUE_STORE.write_kvp(FIRST_OPEN.to_string(), "false".to_string()) - }); - }, - ) -} - -pub struct WelcomePage { - workspace: WeakEntity, - focus_handle: FocusHandle, - telemetry: Arc, - _settings_subscription: Subscription, -} - -impl Render for WelcomePage { - fn render(&mut self, _: &mut Window, cx: &mut Context) -> impl IntoElement { - let edit_prediction_provider_is_zed = - all_language_settings(None, cx).edit_predictions.provider - == EditPredictionProvider::Zed; - - let edit_prediction_label = if edit_prediction_provider_is_zed { - "Edit Prediction Enabled" - } else { - "Try Edit Prediction" - }; - - h_flex() - .size_full() - .bg(cx.theme().colors().editor_background) - .key_context("Welcome") - .track_focus(&self.focus_handle(cx)) - .child( - v_flex() - .gap_8() - .mx_auto() - .child( - v_flex() - .w_full() - .child( - svg() - .path("icons/logo_96.svg") - .text_color(cx.theme().colors().icon_disabled) - .w(px(40.)) - .h(px(40.)) - .mx_auto() - .mb_4(), - ) - .child( - h_flex() - .w_full() - .justify_center() - .child(Headline::new("Welcome to Zed")), - ) - .child( - h_flex().w_full().justify_center().child( - Label::new("The editor for what's next") - .color(Color::Muted) - .italic(), - ), - ), - ) - .child( - h_flex() - .items_start() - .gap_8() - .child( - v_flex() - .gap_2() - .pr_8() - .border_r_1() - .border_color(cx.theme().colors().border_variant) - .child( - self.section_label( cx).child( - Label::new("Get Started") - .size(LabelSize::XSmall) - .color(Color::Muted), - ), - ) - .child( - Button::new("choose-theme", "Choose a Theme") - .icon(IconName::SwatchBook) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|this, _, window, cx| { - telemetry::event!("Welcome Theme Changed"); - this.workspace - .update(cx, |_workspace, cx| { - window.dispatch_action(zed_actions::theme_selector::Toggle::default().boxed_clone(), cx); - }) - .ok(); - })), - ) - .child( - Button::new("choose-keymap", "Choose a Keymap") - .icon(IconName::Keyboard) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|this, _, window, cx| { - telemetry::event!("Welcome Keymap Changed"); - this.workspace - .update(cx, |workspace, cx| { - base_keymap_picker::toggle( - workspace, - &Default::default(), - window, cx, - ) - }) - .ok(); - })), - ) - .when(!DisableAiSettings::get_global(cx).disable_ai, |parent| { - parent.child( - Button::new( - "edit_prediction_onboarding", - edit_prediction_label, - ) - .disabled(edit_prediction_provider_is_zed) - .icon(IconName::ZedPredict) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click( - cx.listener(|_, _, window, cx| { - telemetry::event!("Welcome Screen Try Edit Prediction clicked"); - window.dispatch_action(zed_actions::OpenZedPredictOnboarding.boxed_clone(), cx); - }), - ), - ) - }) - .child( - Button::new("edit settings", "Edit Settings") - .icon(IconName::Settings) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|_, _, window, cx| { - telemetry::event!("Welcome Settings Edited"); - window.dispatch_action(Box::new( - zed_actions::OpenSettings, - ), cx); - })), - ) - - ) - .child( - v_flex() - .gap_2() - .child( - self.section_label(cx).child( - Label::new("Resources") - .size(LabelSize::XSmall) - .color(Color::Muted), - ), - ) - .when(cfg!(target_os = "macos"), |el| { - el.child( - Button::new("install-cli", "Install the CLI") - .icon(IconName::Terminal) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|this, _, window, cx| { - telemetry::event!("Welcome CLI Installed"); - this.workspace.update(cx, |_, cx|{ - install_cli::install_cli(window, cx); - }).log_err(); - })), - ) - }) - .child( - Button::new("view-docs", "View Documentation") - .icon(IconName::FileCode) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|_, _, _, cx| { - telemetry::event!("Welcome Documentation Viewed"); - cx.open_url(DOCS_URL); - })), - ) - .child( - Button::new("explore-extensions", "Explore Extensions") - .icon(IconName::Blocks) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .icon_position(IconPosition::Start) - .on_click(cx.listener(|_, _, window, cx| { - telemetry::event!("Welcome Extensions Page Opened"); - window.dispatch_action(Box::new( - zed_actions::Extensions::default(), - ), cx); - })), - ) - ), - ) - .child( - v_container() - .px_2() - .gap_2() - .child( - h_flex() - .justify_between() - .child( - CheckboxWithLabel::new( - "enable-vim", - Label::new("Enable Vim Mode"), - if VimModeSetting::get_global(cx).0 { - ui::ToggleState::Selected - } else { - ui::ToggleState::Unselected - }, - cx.listener(move |this, selection, _window, cx| { - telemetry::event!("Welcome Vim Mode Toggled"); - this.update_settings::( - selection, - cx, - |setting, value| *setting = Some(value), - ); - }), - ) - .fill() - .elevation(ElevationIndex::ElevatedSurface), - ) - .child( - IconButton::new("vim-mode", IconName::Info) - .icon_size(IconSize::XSmall) - .icon_color(Color::Muted) - .tooltip( - Tooltip::text( - "You can also toggle Vim Mode via the command palette or Editor Controls menu.") - ), - ), - ) - .child( - CheckboxWithLabel::new( - "enable-crash", - Label::new("Send Crash Reports"), - if TelemetrySettings::get_global(cx).diagnostics { - ui::ToggleState::Selected - } else { - ui::ToggleState::Unselected - }, - cx.listener(move |this, selection, _window, cx| { - telemetry::event!("Welcome Diagnostic Telemetry Toggled"); - this.update_settings::(selection, cx, { - move |settings, value| { - settings.diagnostics = Some(value); - telemetry::event!( - "Settings Changed", - setting = "diagnostic telemetry", - value - ); - } - }); - }), - ) - .fill() - .elevation(ElevationIndex::ElevatedSurface), - ) - .child( - CheckboxWithLabel::new( - "enable-telemetry", - Label::new("Send Telemetry"), - if TelemetrySettings::get_global(cx).metrics { - ui::ToggleState::Selected - } else { - ui::ToggleState::Unselected - }, - cx.listener(move |this, selection, _window, cx| { - telemetry::event!("Welcome Metric Telemetry Toggled"); - this.update_settings::(selection, cx, { - move |settings, value| { - settings.metrics = Some(value); - telemetry::event!( - "Settings Changed", - setting = "metric telemetry", - value - ); - } - }); - }), - ) - .fill() - .elevation(ElevationIndex::ElevatedSurface), - ), - ), - ) - } -} - -impl WelcomePage { - pub fn new(workspace: &Workspace, cx: &mut Context) -> Entity { - let this = cx.new(|cx| { - cx.on_release(|_: &mut Self, _| { - telemetry::event!("Welcome Page Closed"); - }) - .detach(); - - WelcomePage { - focus_handle: cx.focus_handle(), - workspace: workspace.weak_handle(), - telemetry: workspace.client().telemetry().clone(), - _settings_subscription: cx - .observe_global::(move |_, cx| cx.notify()), - } - }); - - this - } - - fn section_label(&self, cx: &mut App) -> Div { - div() - .pl_1() - .font_buffer(cx) - .text_color(Color::Muted.color(cx)) - } - - fn update_settings( - &mut self, - selection: &ToggleState, - cx: &mut Context, - callback: impl 'static + Send + Fn(&mut T::FileContent, bool), - ) { - if let Some(workspace) = self.workspace.upgrade() { - let fs = workspace.read(cx).app_state().fs.clone(); - let selection = *selection; - settings::update_settings_file::(fs, cx, move |settings, _| { - let value = match selection { - ToggleState::Unselected => false, - ToggleState::Selected => true, - _ => return, - }; - - callback(settings, value) - }); - } - } -} - -impl EventEmitter for WelcomePage {} - -impl Focusable for WelcomePage { - fn focus_handle(&self, _: &App) -> gpui::FocusHandle { - self.focus_handle.clone() - } -} - -impl Item for WelcomePage { - type Event = ItemEvent; - - fn tab_content_text(&self, _detail: usize, _cx: &App) -> SharedString { - "Welcome".into() - } - - fn telemetry_event_text(&self) -> Option<&'static str> { - Some("Welcome Page Opened") - } - - fn show_toolbar(&self) -> bool { - false - } - - fn clone_on_split( - &self, - _workspace_id: Option, - _: &mut Window, - cx: &mut Context, - ) -> Option> { - Some(cx.new(|cx| WelcomePage { - focus_handle: cx.focus_handle(), - workspace: self.workspace.clone(), - telemetry: self.telemetry.clone(), - _settings_subscription: cx.observe_global::(move |_, cx| cx.notify()), - })) - } - - fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) { - f(*event) - } -} diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 98794e54cd..fb78c62f9e 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -248,8 +248,6 @@ actions!( ToggleZoom, /// Stops following a collaborator. Unfollow, - /// Shows the welcome screen. - Welcome, /// Restores the banner. RestoreBanner, /// Toggles expansion of the selected item. diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 5997e43864..bdbb39698c 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -157,7 +157,6 @@ vim_mode_setting.workspace = true watch.workspace = true web_search.workspace = true web_search_providers.workspace = true -welcome.workspace = true workspace-hack.workspace = true workspace.workspace = true zed_actions.workspace = true diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 3084bfddad..fd987ef6c5 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -20,6 +20,7 @@ use gpui::{App, AppContext as _, Application, AsyncApp, Focusable as _, UpdateGl use gpui_tokio::Tokio; use http_client::{Url, read_proxy_from_env}; use language::LanguageRegistry; +use onboarding::{FIRST_OPEN, show_onboarding_view}; use prompt_store::PromptBuilder; use reqwest_client::ReqwestClient; @@ -44,7 +45,6 @@ use theme::{ }; use util::{ResultExt, TryFutureExt, maybe}; use uuid::Uuid; -use welcome::{FIRST_OPEN, show_welcome_view}; use workspace::{ AppState, SerializedWorkspaceLocation, Toast, Workspace, WorkspaceSettings, WorkspaceStore, notifications::NotificationId, @@ -623,7 +623,6 @@ pub fn main() { feedback::init(cx); markdown_preview::init(cx); svg_preview::init(cx); - welcome::init(cx); onboarding::init(cx); settings_ui::init(cx); extensions_ui::init(cx); @@ -1044,7 +1043,7 @@ async fn restore_or_create_workspace(app_state: Arc, cx: &mut AsyncApp } } } else if matches!(KEY_VALUE_STORE.read_kvp(FIRST_OPEN), Ok(None)) { - cx.update(|cx| show_welcome_view(app_state, cx))?.await?; + cx.update(|cx| show_onboarding_view(app_state, cx))?.await?; } else { cx.update(|cx| { workspace::open_new( diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 8c89a7d85a..23020d3a9b 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -34,6 +34,8 @@ use image_viewer::ImageInfo; use language_tools::lsp_tool::{self, LspTool}; use migrate::{MigrationBanner, MigrationEvent, MigrationNotification, MigrationType}; use migrator::{migrate_keymap, migrate_settings}; +use onboarding::DOCS_URL; +use onboarding::multibuffer_hint::MultibufferHint; pub use open_listener::*; use outline_panel::OutlinePanel; use paths::{ @@ -67,7 +69,6 @@ use util::markdown::MarkdownString; use util::{ResultExt, asset_str}; use uuid::Uuid; use vim_mode_setting::VimModeSetting; -use welcome::{DOCS_URL, MultibufferHint}; use workspace::notifications::{NotificationId, dismiss_app_notification, show_app_notification}; use workspace::{ AppState, NewFile, NewWindow, OpenLog, Toast, Workspace, WorkspaceSettings, @@ -3975,7 +3976,6 @@ mod tests { client::init(&app_state.client, cx); language::init(cx); workspace::init(app_state.clone(), cx); - welcome::init(cx); onboarding::init(cx); Project::init_settings(cx); app_state @@ -4380,7 +4380,6 @@ mod tests { "toolchain", "variable_list", "vim", - "welcome", "workspace", "zed", "zed_predict_onboarding", diff --git a/crates/zed/src/zed/app_menus.rs b/crates/zed/src/zed/app_menus.rs index 53eec42ba0..9df55a2fb1 100644 --- a/crates/zed/src/zed/app_menus.rs +++ b/crates/zed/src/zed/app_menus.rs @@ -249,7 +249,7 @@ pub fn app_menus() -> Vec { ), MenuItem::action("View Telemetry", zed_actions::OpenTelemetryLog), MenuItem::action("View Dependency Licenses", zed_actions::OpenLicenses), - MenuItem::action("Show Welcome", workspace::Welcome), + MenuItem::action("Show Welcome", onboarding::ShowWelcome), MenuItem::action("Give Feedback...", zed_actions::feedback::GiveFeedback), MenuItem::separator(), MenuItem::action( diff --git a/crates/zed/src/zed/open_listener.rs b/crates/zed/src/zed/open_listener.rs index 2fd9b0a68c..82d3795e94 100644 --- a/crates/zed/src/zed/open_listener.rs +++ b/crates/zed/src/zed/open_listener.rs @@ -15,6 +15,8 @@ use futures::{FutureExt, SinkExt, StreamExt}; use git_ui::file_diff_view::FileDiffView; use gpui::{App, AsyncApp, Global, WindowHandle}; use language::Point; +use onboarding::FIRST_OPEN; +use onboarding::show_onboarding_view; use recent_projects::{SshSettings, open_ssh_project}; use remote::SshConnectionOptions; use settings::Settings; @@ -24,7 +26,6 @@ use std::thread; use std::time::Duration; use util::ResultExt; use util::paths::PathWithPosition; -use welcome::{FIRST_OPEN, show_welcome_view}; use workspace::item::ItemHandle; use workspace::{AppState, OpenOptions, SerializedWorkspaceLocation, Workspace}; @@ -378,7 +379,7 @@ async fn open_workspaces( if grouped_locations.is_empty() { // If we have no paths to open, show the welcome screen if this is the first launch if matches!(KEY_VALUE_STORE.read_kvp(FIRST_OPEN), Ok(None)) { - cx.update(|cx| show_welcome_view(app_state, cx).detach()) + cx.update(|cx| show_onboarding_view(app_state, cx).detach()) .log_err(); } // If not the first launch, show an empty window with empty editor diff --git a/docs/src/telemetry.md b/docs/src/telemetry.md index 107aef5a96..46c39a88ae 100644 --- a/docs/src/telemetry.md +++ b/docs/src/telemetry.md @@ -4,7 +4,8 @@ Zed collects anonymous telemetry data to help the team understand how people are ## Configuring Telemetry Settings -You have full control over what data is sent out by Zed. To enable or disable some or all telemetry types, open your `settings.json` file via {#action zed::OpenSettings}({#kb zed::OpenSettings}) from the command palette. +You have full control over what data is sent out by Zed. +To enable or disable some or all telemetry types, open your `settings.json` file via {#action zed::OpenSettings}({#kb zed::OpenSettings}) from the command palette. Insert and tweak the following: @@ -15,8 +16,6 @@ Insert and tweak the following: }, ``` -The telemetry settings can also be configured via the welcome screen, which can be invoked via the {#action workspace::Welcome} action in the command palette. - ## Dataflow Telemetry is sent from the application to our servers. Data is proxied through our servers to enable us to easily switch analytics services. We currently use: From 2da80e46418c9e59c83207e0e1b7d44c6ebc0462 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 13 Aug 2025 12:34:18 -0400 Subject: [PATCH 12/74] emmet: Use `index.js` directly to launch language server (#36126) This PR updates the Emmet extension to use the `index.js` file directly to launch the language server. This provides better cross-platform support, as we're not relying on platform-specific `.bin` wrappers. Release Notes: - N/A --- extensions/emmet/src/emmet.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/emmet/src/emmet.rs b/extensions/emmet/src/emmet.rs index e4fb3cf814..1434e16e88 100644 --- a/extensions/emmet/src/emmet.rs +++ b/extensions/emmet/src/emmet.rs @@ -5,7 +5,7 @@ struct EmmetExtension { did_find_server: bool, } -const SERVER_PATH: &str = "node_modules/.bin/emmet-language-server"; +const SERVER_PATH: &str = "node_modules/@olrtg/emmet-language-server/dist/index.js"; const PACKAGE_NAME: &str = "@olrtg/emmet-language-server"; impl EmmetExtension { From 0b9c9f5f2da008336c3e1a7648489764f4e87cca Mon Sep 17 00:00:00 2001 From: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:42:09 -0400 Subject: [PATCH 13/74] onboarding: Make Welcome page persistent (#36127) Release Notes: - N/A --- crates/onboarding/src/onboarding.rs | 1 + crates/onboarding/src/welcome.rs | 108 +++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/crates/onboarding/src/onboarding.rs b/crates/onboarding/src/onboarding.rs index 2444e5d44a..e07a8dc9fb 100644 --- a/crates/onboarding/src/onboarding.rs +++ b/crates/onboarding/src/onboarding.rs @@ -189,6 +189,7 @@ pub fn init(cx: &mut App) { base_keymap_picker::init(cx); register_serializable_item::(cx); + register_serializable_item::(cx); } pub fn show_onboarding_view(app_state: Arc, cx: &mut App) -> Task> { diff --git a/crates/onboarding/src/welcome.rs b/crates/onboarding/src/welcome.rs index 65baad03a0..ba0053a3b6 100644 --- a/crates/onboarding/src/welcome.rs +++ b/crates/onboarding/src/welcome.rs @@ -1,6 +1,6 @@ use gpui::{ Action, App, Context, Entity, EventEmitter, FocusHandle, Focusable, InteractiveElement, - ParentElement, Render, Styled, Window, actions, + ParentElement, Render, Styled, Task, Window, actions, }; use menu::{SelectNext, SelectPrevious}; use ui::{ButtonLike, Divider, DividerColor, KeyBinding, Vector, VectorName, prelude::*}; @@ -352,3 +352,109 @@ impl Item for WelcomePage { f(*event) } } + +impl workspace::SerializableItem for WelcomePage { + fn serialized_item_kind() -> &'static str { + "WelcomePage" + } + + fn cleanup( + workspace_id: workspace::WorkspaceId, + alive_items: Vec, + _window: &mut Window, + cx: &mut App, + ) -> Task> { + workspace::delete_unloaded_items( + alive_items, + workspace_id, + "welcome_pages", + &persistence::WELCOME_PAGES, + cx, + ) + } + + fn deserialize( + _project: Entity, + _workspace: gpui::WeakEntity, + workspace_id: workspace::WorkspaceId, + item_id: workspace::ItemId, + window: &mut Window, + cx: &mut App, + ) -> Task>> { + if persistence::WELCOME_PAGES + .get_welcome_page(item_id, workspace_id) + .ok() + .is_some_and(|is_open| is_open) + { + window.spawn(cx, async move |cx| cx.update(WelcomePage::new)) + } else { + Task::ready(Err(anyhow::anyhow!("No welcome page to deserialize"))) + } + } + + fn serialize( + &mut self, + workspace: &mut workspace::Workspace, + item_id: workspace::ItemId, + _closing: bool, + _window: &mut Window, + cx: &mut Context, + ) -> Option>> { + let workspace_id = workspace.database_id()?; + Some(cx.background_spawn(async move { + persistence::WELCOME_PAGES + .save_welcome_page(item_id, workspace_id, true) + .await + })) + } + + fn should_serialize(&self, event: &Self::Event) -> bool { + event == &ItemEvent::UpdateTab + } +} + +mod persistence { + use db::{define_connection, query, sqlez_macros::sql}; + use workspace::WorkspaceDb; + + define_connection! { + pub static ref WELCOME_PAGES: WelcomePagesDb = + &[ + sql!( + CREATE TABLE welcome_pages ( + workspace_id INTEGER, + item_id INTEGER UNIQUE, + is_open INTEGER DEFAULT FALSE, + + PRIMARY KEY(workspace_id, item_id), + FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id) + ON DELETE CASCADE + ) STRICT; + ), + ]; + } + + impl WelcomePagesDb { + query! { + pub async fn save_welcome_page( + item_id: workspace::ItemId, + workspace_id: workspace::WorkspaceId, + is_open: bool + ) -> Result<()> { + INSERT OR REPLACE INTO welcome_pages(item_id, workspace_id, is_open) + VALUES (?, ?, ?) + } + } + + query! { + pub fn get_welcome_page( + item_id: workspace::ItemId, + workspace_id: workspace::WorkspaceId + ) -> Result { + SELECT is_open + FROM welcome_pages + WHERE item_id = ? AND workspace_id = ? + } + } + } +} From 4238e640fa9a99acfa7edd08f1f7b27b5f5a649f Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 13 Aug 2025 12:55:02 -0400 Subject: [PATCH 14/74] emmet: Bump to v0.0.6 (#36129) This PR bumps the Emmet extension to v0.0.6. Changes: - https://github.com/zed-industries/zed/pull/36126 Release Notes: - N/A --- Cargo.lock | 2 +- extensions/emmet/Cargo.toml | 2 +- extensions/emmet/extension.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8458c4af4b..ac1a56d53f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20663,7 +20663,7 @@ dependencies = [ [[package]] name = "zed_emmet" -version = "0.0.5" +version = "0.0.6" dependencies = [ "zed_extension_api 0.1.0", ] diff --git a/extensions/emmet/Cargo.toml b/extensions/emmet/Cargo.toml index ff9debdea9..2fbdf2a7e5 100644 --- a/extensions/emmet/Cargo.toml +++ b/extensions/emmet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zed_emmet" -version = "0.0.5" +version = "0.0.6" edition.workspace = true publish.workspace = true license = "Apache-2.0" diff --git a/extensions/emmet/extension.toml b/extensions/emmet/extension.toml index 0ebb801f9d..a1848400b8 100644 --- a/extensions/emmet/extension.toml +++ b/extensions/emmet/extension.toml @@ -1,7 +1,7 @@ id = "emmet" name = "Emmet" description = "Emmet support" -version = "0.0.5" +version = "0.0.6" schema_version = 1 authors = ["Piotr Osiewicz "] repository = "https://github.com/zed-industries/zed" From 9a375f14192c9bc9bec54777ec74d1444e11e593 Mon Sep 17 00:00:00 2001 From: ponychicken Date: Wed, 13 Aug 2025 19:36:18 +0200 Subject: [PATCH 15/74] Add some documentation for Helix mode (#35641) Because there is literally no mention of it in the docs Release Notes: - N/A --------- Co-authored-by: ponychicken <183302+ponychicken@users.noreply.github.com> Co-authored-by: Ben Kunkle --- docs/src/SUMMARY.md | 1 + docs/src/configuring-zed.md | 8 +++++++- docs/src/helix.md | 11 +++++++++++ docs/src/key-bindings.md | 4 ++-- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 docs/src/helix.md diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index fc936d6bd0..c7af36f431 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -21,6 +21,7 @@ - [Icon Themes](./icon-themes.md) - [Visual Customization](./visual-customization.md) - [Vim Mode](./vim.md) +- [Helix Mode](./helix.md) diff --git a/docs/src/configuring-zed.md b/docs/src/configuring-zed.md index 1996e1c4ee..5d11dfe833 100644 --- a/docs/src/configuring-zed.md +++ b/docs/src/configuring-zed.md @@ -3195,10 +3195,16 @@ Run the `theme selector: toggle` action in the command palette to see a current ## Vim -- Description: Whether or not to enable vim mode (work in progress). +- Description: Whether or not to enable vim mode. See the [Vim documentation](./vim.md) for more details on configuration. - Setting: `vim_mode` - Default: `false` +## Helix Mode + +- Description: Whether or not to enable Helix mode. Enabling `helix_mode` also enables `vim_mode`. See the [Helix documentation](./helix.md) for more details. +- Setting: `helix_mode` +- Default: `false` + ## Project Panel - Description: Customize project panel diff --git a/docs/src/helix.md b/docs/src/helix.md new file mode 100644 index 0000000000..ddf997d3f0 --- /dev/null +++ b/docs/src/helix.md @@ -0,0 +1,11 @@ +# Helix Mode + +_Work in progress! Not all Helix keybindings are implemented yet._ + +Zed's Helix mode is an emulation layer that brings Helix-style keybindings and modal editing to Zed. It builds upon Zed's [Vim mode](./vim.md), so much of the core functionality is shared. Enabling `helix_mode` will also enable `vim_mode`. + +For a guide on Vim-related features that are also available in Helix mode, please refer to our [Vim mode documentation](./vim.md). + +To check the current status of Helix mode, or to request a missing Helix feature, checkout out the ["Are we Helix yet?" discussion](https://github.com/zed-industries/zed/discussions/33580). + +For a detailed list of Helix's default keybindings, please visit the [official Helix documentation](https://docs.helix-editor.com/keymap.html). diff --git a/docs/src/key-bindings.md b/docs/src/key-bindings.md index feed912787..9fc94840b7 100644 --- a/docs/src/key-bindings.md +++ b/docs/src/key-bindings.md @@ -14,7 +14,7 @@ If you're used to a specific editor's defaults you can set a `base_keymap` in yo - TextMate - None (disables _all_ key bindings) -You can also enable `vim_mode`, which adds vim bindings too. +You can also enable `vim_mode` or `helix_mode`, which add modal bindings. For more information, see the documentation for [Vim mode](./vim.md) and [Helix mode](./helix.md). ## User keymaps @@ -119,7 +119,7 @@ It's worth noting that attributes are only available on the node they are define Note: Before Zed v0.197.x, the ! operator only looked at one node at a time, and `>` meant "parent" not "ancestor". This meant that `!Editor` would match the context `Workspace > Pane > Editor`, because (confusingly) the Pane matches `!Editor`, and that `os=macos > Editor` did not match the context `Workspace > Pane > Editor` because of the intermediate `Pane` node. -If you're using Vim mode, we have information on how [vim modes influence the context](./vim.md#contexts) +If you're using Vim mode, we have information on how [vim modes influence the context](./vim.md#contexts). Helix mode is built on top of Vim mode and uses the same contexts. ### Actions From cb0bc463f103bd5a00d01e0229b9059ea6036d8b Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:45:37 -0300 Subject: [PATCH 16/74] agent2: Add new "new thread" selector in the toolbar (#36133) Release Notes: - N/A --- assets/keymaps/default-linux.json | 1 + assets/keymaps/default-macos.json | 1 + crates/agent_ui/src/agent_panel.rs | 838 ++++++++++++-------- crates/agent_ui/src/agent_ui.rs | 2 + crates/agent_ui/src/ui.rs | 4 +- crates/agent_ui/src/ui/new_thread_button.rs | 6 +- crates/zed/src/zed/component_preview.rs | 2 +- 7 files changed, 526 insertions(+), 328 deletions(-) diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index 708432393c..dda26f406b 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -239,6 +239,7 @@ "ctrl-shift-a": "agent::ToggleContextPicker", "ctrl-shift-j": "agent::ToggleNavigationMenu", "ctrl-shift-i": "agent::ToggleOptionsMenu", + "ctrl-alt-shift-n": "agent::ToggleNewThreadMenu", "shift-alt-escape": "agent::ExpandMessageEditor", "ctrl->": "assistant::QuoteSelection", "ctrl-alt-e": "agent::RemoveAllContext", diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index abb741af29..3966efd8df 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -279,6 +279,7 @@ "cmd-shift-a": "agent::ToggleContextPicker", "cmd-shift-j": "agent::ToggleNavigationMenu", "cmd-shift-i": "agent::ToggleOptionsMenu", + "cmd-alt-shift-n": "agent::ToggleNewThreadMenu", "shift-alt-escape": "agent::ExpandMessageEditor", "cmd->": "assistant::QuoteSelection", "cmd-alt-e": "agent::RemoveAllContext", diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index d07581da93..a641d62296 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -12,12 +12,12 @@ use serde::{Deserialize, Serialize}; use crate::NewExternalAgentThread; use crate::agent_diff::AgentDiffThread; use crate::message_editor::{MAX_EDITOR_LINES, MIN_EDITOR_LINES}; -use crate::ui::NewThreadButton; use crate::{ AddContextServer, AgentDiffPane, ContinueThread, ContinueWithBurnMode, DeleteRecentlyOpenThread, ExpandMessageEditor, Follow, InlineAssistant, NewTextThread, NewThread, OpenActiveThreadAsMarkdown, OpenAgentDiff, OpenHistory, ResetTrialEndUpsell, - ResetTrialUpsell, ToggleBurnMode, ToggleContextPicker, ToggleNavigationMenu, ToggleOptionsMenu, + ResetTrialUpsell, ToggleBurnMode, ToggleContextPicker, ToggleNavigationMenu, + ToggleNewThreadMenu, ToggleOptionsMenu, acp::AcpThreadView, active_thread::{self, ActiveThread, ActiveThreadEvent}, agent_configuration::{AgentConfiguration, AssistantConfigurationEvent}, @@ -67,8 +67,8 @@ use theme::ThemeSettings; use time::UtcOffset; use ui::utils::WithRemSize; use ui::{ - Banner, Callout, ContextMenu, ContextMenuEntry, ElevationIndex, KeyBinding, PopoverMenu, - PopoverMenuHandle, ProgressBar, Tab, Tooltip, prelude::*, + Banner, ButtonLike, Callout, ContextMenu, ContextMenuEntry, ElevationIndex, KeyBinding, + PopoverMenu, PopoverMenuHandle, ProgressBar, Tab, Tooltip, prelude::*, }; use util::ResultExt as _; use workspace::{ @@ -86,6 +86,7 @@ const AGENT_PANEL_KEY: &str = "agent_panel"; #[derive(Serialize, Deserialize)] struct SerializedAgentPanel { width: Option, + selected_agent: Option, } pub fn init(cx: &mut App) { @@ -179,6 +180,14 @@ pub fn init(cx: &mut App) { }); } }) + .register_action(|workspace, _: &ToggleNewThreadMenu, window, cx| { + if let Some(panel) = workspace.panel::(cx) { + workspace.focus_panel::(window, cx); + panel.update(cx, |panel, cx| { + panel.toggle_new_thread_menu(&ToggleNewThreadMenu, window, cx); + }); + } + }) .register_action(|workspace, _: &OpenOnboardingModal, window, cx| { AgentOnboardingModal::toggle(workspace, window, cx) }) @@ -223,6 +232,36 @@ enum WhichFontSize { None, } +#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum AgentType { + #[default] + Zed, + TextThread, + Gemini, + ClaudeCode, + NativeAgent, +} + +impl AgentType { + fn label(self) -> impl Into { + match self { + Self::Zed | Self::TextThread => "Zed", + Self::NativeAgent => "Agent 2", + Self::Gemini => "Gemini", + Self::ClaudeCode => "Claude Code", + } + } + + fn icon(self) -> IconName { + match self { + Self::Zed | Self::TextThread => IconName::AiZed, + Self::NativeAgent => IconName::ZedAssistant, + Self::Gemini => IconName::AiGemini, + Self::ClaudeCode => IconName::AiClaude, + } + } +} + impl ActiveView { pub fn which_font_size_used(&self) -> WhichFontSize { match self { @@ -453,16 +492,21 @@ pub struct AgentPanel { zoomed: bool, pending_serialization: Option>>, onboarding: Entity, + selected_agent: AgentType, } impl AgentPanel { fn serialize(&mut self, cx: &mut Context) { let width = self.width; + let selected_agent = self.selected_agent; self.pending_serialization = Some(cx.background_spawn(async move { KEY_VALUE_STORE .write_kvp( AGENT_PANEL_KEY.into(), - serde_json::to_string(&SerializedAgentPanel { width })?, + serde_json::to_string(&SerializedAgentPanel { + width, + selected_agent: Some(selected_agent), + })?, ) .await?; anyhow::Ok(()) @@ -531,6 +575,9 @@ impl AgentPanel { if let Some(serialized_panel) = serialized_panel { panel.update(cx, |panel, cx| { panel.width = serialized_panel.width.map(|w| w.round()); + if let Some(selected_agent) = serialized_panel.selected_agent { + panel.selected_agent = selected_agent; + } cx.notify(); }); } @@ -732,6 +779,7 @@ impl AgentPanel { zoomed: false, pending_serialization: None, onboarding, + selected_agent: AgentType::default(), } } @@ -1174,6 +1222,15 @@ impl AgentPanel { self.agent_panel_menu_handle.toggle(window, cx); } + pub fn toggle_new_thread_menu( + &mut self, + _: &ToggleNewThreadMenu, + window: &mut Window, + cx: &mut Context, + ) { + self.new_thread_menu_handle.toggle(window, cx); + } + pub fn increase_font_size( &mut self, action: &IncreaseBufferFontSize, @@ -1581,6 +1638,17 @@ impl AgentPanel { menu } + + pub fn set_selected_agent(&mut self, agent: AgentType, cx: &mut Context) { + if self.selected_agent != agent { + self.selected_agent = agent; + self.serialize(cx); + } + } + + pub fn selected_agent(&self) -> AgentType { + self.selected_agent + } } impl Focusable for AgentPanel { @@ -1811,200 +1879,24 @@ impl AgentPanel { .into_any() } - fn render_toolbar(&self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + fn render_panel_options_menu( + &self, + window: &mut Window, + cx: &mut Context, + ) -> impl IntoElement { let user_store = self.user_store.read(cx); let usage = user_store.model_request_usage(); - let account_url = zed_urls::account_url(cx); let focus_handle = self.focus_handle(cx); - let go_back_button = div().child( - IconButton::new("go-back", IconName::ArrowLeft) - .icon_size(IconSize::Small) - .on_click(cx.listener(|this, _, window, cx| { - this.go_back(&workspace::GoBack, window, cx); - })) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Go Back", - &workspace::GoBack, - &focus_handle, - window, - cx, - ) - } - }), - ); - - let recent_entries_menu = div().child( - PopoverMenu::new("agent-nav-menu") - .trigger_with_tooltip( - IconButton::new("agent-nav-menu", IconName::MenuAlt) - .icon_size(IconSize::Small) - .style(ui::ButtonStyle::Subtle), - { - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Toggle Panel Menu", - &ToggleNavigationMenu, - &focus_handle, - window, - cx, - ) - } - }, - ) - .anchor(Corner::TopLeft) - .with_handle(self.assistant_navigation_menu_handle.clone()) - .menu({ - let menu = self.assistant_navigation_menu.clone(); - move |window, cx| { - if let Some(menu) = menu.as_ref() { - menu.update(cx, |_, cx| { - cx.defer_in(window, |menu, window, cx| { - menu.rebuild(window, cx); - }); - }) - } - menu.clone() - } - }), - ); - let full_screen_label = if self.is_zoomed(window, cx) { "Disable Full Screen" } else { "Enable Full Screen" }; - let active_thread = match &self.active_view { - ActiveView::Thread { thread, .. } => Some(thread.read(cx).thread().clone()), - ActiveView::ExternalAgentThread { .. } - | ActiveView::TextThread { .. } - | ActiveView::History - | ActiveView::Configuration => None, - }; - - let new_thread_menu = PopoverMenu::new("new_thread_menu") - .trigger_with_tooltip( - IconButton::new("new_thread_menu_btn", IconName::Plus).icon_size(IconSize::Small), - Tooltip::text("New Thread…"), - ) - .anchor(Corner::TopRight) - .with_handle(self.new_thread_menu_handle.clone()) - .menu({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - let active_thread = active_thread.clone(); - Some(ContextMenu::build(window, cx, |mut menu, _window, cx| { - menu = menu - .context(focus_handle.clone()) - .when(cx.has_flag::(), |this| { - this.header("Zed Agent") - }) - .when_some(active_thread, |this, active_thread| { - let thread = active_thread.read(cx); - - if !thread.is_empty() { - let thread_id = thread.id().clone(); - this.item( - ContextMenuEntry::new("New From Summary") - .icon(IconName::ThreadFromSummary) - .icon_color(Color::Muted) - .handler(move |window, cx| { - window.dispatch_action( - Box::new(NewThread { - from_thread_id: Some(thread_id.clone()), - }), - cx, - ); - }), - ) - } else { - this - } - }) - .item( - ContextMenuEntry::new("New Thread") - .icon(IconName::Thread) - .icon_color(Color::Muted) - .action(NewThread::default().boxed_clone()) - .handler(move |window, cx| { - window.dispatch_action( - NewThread::default().boxed_clone(), - cx, - ); - }), - ) - .item( - ContextMenuEntry::new("New Text Thread") - .icon(IconName::TextThread) - .icon_color(Color::Muted) - .action(NewTextThread.boxed_clone()) - .handler(move |window, cx| { - window.dispatch_action(NewTextThread.boxed_clone(), cx); - }), - ) - .when(cx.has_flag::(), |this| { - this.separator() - .header("External Agents") - .item( - ContextMenuEntry::new("New Gemini Thread") - .icon(IconName::AiGemini) - .icon_color(Color::Muted) - .handler(move |window, cx| { - window.dispatch_action( - NewExternalAgentThread { - agent: Some(crate::ExternalAgent::Gemini), - } - .boxed_clone(), - cx, - ); - }), - ) - .item( - ContextMenuEntry::new("New Claude Code Thread") - .icon(IconName::AiClaude) - .icon_color(Color::Muted) - .handler(move |window, cx| { - window.dispatch_action( - NewExternalAgentThread { - agent: Some( - crate::ExternalAgent::ClaudeCode, - ), - } - .boxed_clone(), - cx, - ); - }), - ) - .item( - ContextMenuEntry::new("New Native Agent Thread") - .icon(IconName::ZedAssistant) - .icon_color(Color::Muted) - .handler(move |window, cx| { - window.dispatch_action( - NewExternalAgentThread { - agent: Some( - crate::ExternalAgent::NativeAgent, - ), - } - .boxed_clone(), - cx, - ); - }), - ) - }); - menu - })) - } - }); - - let agent_panel_menu = PopoverMenu::new("agent-options-menu") + PopoverMenu::new("agent-options-menu") .trigger_with_tooltip( IconButton::new("agent-options-menu", IconName::Ellipsis) .icon_size(IconSize::Small), @@ -2087,6 +1979,139 @@ impl AgentPanel { menu })) } + }) + } + + fn render_recent_entries_menu( + &self, + icon: IconName, + cx: &mut Context, + ) -> impl IntoElement { + let focus_handle = self.focus_handle(cx); + + PopoverMenu::new("agent-nav-menu") + .trigger_with_tooltip( + IconButton::new("agent-nav-menu", icon) + .icon_size(IconSize::Small) + .style(ui::ButtonStyle::Subtle), + { + let focus_handle = focus_handle.clone(); + move |window, cx| { + Tooltip::for_action_in( + "Toggle Panel Menu", + &ToggleNavigationMenu, + &focus_handle, + window, + cx, + ) + } + }, + ) + .anchor(Corner::TopLeft) + .with_handle(self.assistant_navigation_menu_handle.clone()) + .menu({ + let menu = self.assistant_navigation_menu.clone(); + move |window, cx| { + if let Some(menu) = menu.as_ref() { + menu.update(cx, |_, cx| { + cx.defer_in(window, |menu, window, cx| { + menu.rebuild(window, cx); + }); + }) + } + menu.clone() + } + }) + } + + fn render_toolbar_back_button(&self, cx: &mut Context) -> impl IntoElement { + let focus_handle = self.focus_handle(cx); + + IconButton::new("go-back", IconName::ArrowLeft) + .icon_size(IconSize::Small) + .on_click(cx.listener(|this, _, window, cx| { + this.go_back(&workspace::GoBack, window, cx); + })) + .tooltip({ + let focus_handle = focus_handle.clone(); + + move |window, cx| { + Tooltip::for_action_in("Go Back", &workspace::GoBack, &focus_handle, window, cx) + } + }) + } + + fn render_toolbar_old(&self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + let focus_handle = self.focus_handle(cx); + + let active_thread = match &self.active_view { + ActiveView::Thread { thread, .. } => Some(thread.read(cx).thread().clone()), + ActiveView::ExternalAgentThread { .. } + | ActiveView::TextThread { .. } + | ActiveView::History + | ActiveView::Configuration => None, + }; + + let new_thread_menu = PopoverMenu::new("new_thread_menu") + .trigger_with_tooltip( + IconButton::new("new_thread_menu_btn", IconName::Plus).icon_size(IconSize::Small), + Tooltip::text("New Thread…"), + ) + .anchor(Corner::TopRight) + .with_handle(self.new_thread_menu_handle.clone()) + .menu({ + let focus_handle = focus_handle.clone(); + move |window, cx| { + let active_thread = active_thread.clone(); + Some(ContextMenu::build(window, cx, |mut menu, _window, cx| { + menu = menu + .context(focus_handle.clone()) + .when_some(active_thread, |this, active_thread| { + let thread = active_thread.read(cx); + + if !thread.is_empty() { + let thread_id = thread.id().clone(); + this.item( + ContextMenuEntry::new("New From Summary") + .icon(IconName::ThreadFromSummary) + .icon_color(Color::Muted) + .handler(move |window, cx| { + window.dispatch_action( + Box::new(NewThread { + from_thread_id: Some(thread_id.clone()), + }), + cx, + ); + }), + ) + } else { + this + } + }) + .item( + ContextMenuEntry::new("New Thread") + .icon(IconName::Thread) + .icon_color(Color::Muted) + .action(NewThread::default().boxed_clone()) + .handler(move |window, cx| { + window.dispatch_action( + NewThread::default().boxed_clone(), + cx, + ); + }), + ) + .item( + ContextMenuEntry::new("New Text Thread") + .icon(IconName::TextThread) + .icon_color(Color::Muted) + .action(NewTextThread.boxed_clone()) + .handler(move |window, cx| { + window.dispatch_action(NewTextThread.boxed_clone(), cx); + }), + ); + menu + })) + } }); h_flex() @@ -2105,8 +2130,12 @@ impl AgentPanel { .pl_1() .gap_1() .child(match &self.active_view { - ActiveView::History | ActiveView::Configuration => go_back_button, - _ => recent_entries_menu, + ActiveView::History | ActiveView::Configuration => { + self.render_toolbar_back_button(cx).into_any_element() + } + _ => self + .render_recent_entries_menu(IconName::MenuAlt, cx) + .into_any_element(), }) .child(self.render_title_view(window, cx)), ) @@ -2123,11 +2152,308 @@ impl AgentPanel { .border_l_1() .border_color(cx.theme().colors().border) .child(new_thread_menu) - .child(agent_panel_menu), + .child(self.render_panel_options_menu(window, cx)), ), ) } + fn render_toolbar_new(&self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + let focus_handle = self.focus_handle(cx); + + let active_thread = match &self.active_view { + ActiveView::Thread { thread, .. } => Some(thread.read(cx).thread().clone()), + ActiveView::ExternalAgentThread { .. } + | ActiveView::TextThread { .. } + | ActiveView::History + | ActiveView::Configuration => None, + }; + + let new_thread_menu = PopoverMenu::new("new_thread_menu") + .trigger_with_tooltip( + ButtonLike::new("new_thread_menu_btn").child( + h_flex() + .group("agent-selector") + .gap_1p5() + .child( + h_flex() + .relative() + .size_4() + .justify_center() + .child( + h_flex() + .group_hover("agent-selector", |s| s.invisible()) + .child( + Icon::new(self.selected_agent.icon()) + .color(Color::Muted), + ), + ) + .child( + h_flex() + .absolute() + .invisible() + .group_hover("agent-selector", |s| s.visible()) + .child(Icon::new(IconName::Plus)), + ), + ) + .child(Label::new(self.selected_agent.label())), + ), + { + let focus_handle = focus_handle.clone(); + move |window, cx| { + Tooltip::for_action_in( + "New…", + &ToggleNewThreadMenu, + &focus_handle, + window, + cx, + ) + } + }, + ) + .anchor(Corner::TopLeft) + .with_handle(self.new_thread_menu_handle.clone()) + .menu({ + let focus_handle = focus_handle.clone(); + let workspace = self.workspace.clone(); + + move |window, cx| { + let active_thread = active_thread.clone(); + Some(ContextMenu::build(window, cx, |mut menu, _window, cx| { + menu = menu + .context(focus_handle.clone()) + .header("Zed Agent") + .when_some(active_thread, |this, active_thread| { + let thread = active_thread.read(cx); + + if !thread.is_empty() { + let thread_id = thread.id().clone(); + this.item( + ContextMenuEntry::new("New From Summary") + .icon(IconName::ThreadFromSummary) + .icon_color(Color::Muted) + .handler(move |window, cx| { + window.dispatch_action( + Box::new(NewThread { + from_thread_id: Some(thread_id.clone()), + }), + cx, + ); + }), + ) + } else { + this + } + }) + .item( + ContextMenuEntry::new("New Thread") + .icon(IconName::Thread) + .icon_color(Color::Muted) + .action(NewThread::default().boxed_clone()) + .handler({ + let workspace = workspace.clone(); + move |window, cx| { + if let Some(workspace) = workspace.upgrade() { + workspace.update(cx, |workspace, cx| { + if let Some(panel) = + workspace.panel::(cx) + { + panel.update(cx, |panel, cx| { + panel.set_selected_agent( + AgentType::Zed, + cx, + ); + }); + } + }); + } + window.dispatch_action( + NewThread::default().boxed_clone(), + cx, + ); + } + }), + ) + .item( + ContextMenuEntry::new("New Text Thread") + .icon(IconName::TextThread) + .icon_color(Color::Muted) + .action(NewTextThread.boxed_clone()) + .handler({ + let workspace = workspace.clone(); + move |window, cx| { + if let Some(workspace) = workspace.upgrade() { + workspace.update(cx, |workspace, cx| { + if let Some(panel) = + workspace.panel::(cx) + { + panel.update(cx, |panel, cx| { + panel.set_selected_agent( + AgentType::TextThread, + cx, + ); + }); + } + }); + } + window.dispatch_action(NewTextThread.boxed_clone(), cx); + } + }), + ) + .item( + ContextMenuEntry::new("New Native Agent Thread") + .icon(IconName::ZedAssistant) + .icon_color(Color::Muted) + .handler({ + let workspace = workspace.clone(); + move |window, cx| { + if let Some(workspace) = workspace.upgrade() { + workspace.update(cx, |workspace, cx| { + if let Some(panel) = + workspace.panel::(cx) + { + panel.update(cx, |panel, cx| { + panel.set_selected_agent( + AgentType::NativeAgent, + cx, + ); + }); + } + }); + } + window.dispatch_action( + NewExternalAgentThread { + agent: Some(crate::ExternalAgent::NativeAgent), + } + .boxed_clone(), + cx, + ); + } + }), + ) + .separator() + .header("External Agents") + .item( + ContextMenuEntry::new("New Gemini Thread") + .icon(IconName::AiGemini) + .icon_color(Color::Muted) + .handler({ + let workspace = workspace.clone(); + move |window, cx| { + if let Some(workspace) = workspace.upgrade() { + workspace.update(cx, |workspace, cx| { + if let Some(panel) = + workspace.panel::(cx) + { + panel.update(cx, |panel, cx| { + panel.set_selected_agent( + AgentType::Gemini, + cx, + ); + }); + } + }); + } + window.dispatch_action( + NewExternalAgentThread { + agent: Some(crate::ExternalAgent::Gemini), + } + .boxed_clone(), + cx, + ); + } + }), + ) + .item( + ContextMenuEntry::new("New Claude Code Thread") + .icon(IconName::AiClaude) + .icon_color(Color::Muted) + .handler({ + let workspace = workspace.clone(); + move |window, cx| { + if let Some(workspace) = workspace.upgrade() { + workspace.update(cx, |workspace, cx| { + if let Some(panel) = + workspace.panel::(cx) + { + panel.update(cx, |panel, cx| { + panel.set_selected_agent( + AgentType::ClaudeCode, + cx, + ); + }); + } + }); + } + window.dispatch_action( + NewExternalAgentThread { + agent: Some(crate::ExternalAgent::ClaudeCode), + } + .boxed_clone(), + cx, + ); + } + }), + ); + menu + })) + } + }); + + h_flex() + .id("agent-panel-toolbar") + .h(Tab::container_height(cx)) + .max_w_full() + .flex_none() + .justify_between() + .gap_2() + .bg(cx.theme().colors().tab_bar_background) + .border_b_1() + .border_color(cx.theme().colors().border) + .child( + h_flex() + .size_full() + .gap(DynamicSpacing::Base08.rems(cx)) + .child(match &self.active_view { + ActiveView::History | ActiveView::Configuration => { + self.render_toolbar_back_button(cx).into_any_element() + } + _ => h_flex() + .h_full() + .px(DynamicSpacing::Base04.rems(cx)) + .border_r_1() + .border_color(cx.theme().colors().border) + .child(new_thread_menu) + .into_any_element(), + }) + .child(self.render_title_view(window, cx)), + ) + .child( + h_flex() + .h_full() + .gap_2() + .children(self.render_token_count(cx)) + .child( + h_flex() + .h_full() + .gap(DynamicSpacing::Base02.rems(cx)) + .pl(DynamicSpacing::Base04.rems(cx)) + .pr(DynamicSpacing::Base06.rems(cx)) + .border_l_1() + .border_color(cx.theme().colors().border) + .child(self.render_recent_entries_menu(IconName::HistoryRerun, cx)) + .child(self.render_panel_options_menu(window, cx)), + ), + ) + } + + fn render_toolbar(&self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + if cx.has_flag::() { + self.render_toolbar_new(window, cx).into_any_element() + } else { + self.render_toolbar_old(window, cx).into_any_element() + } + } + fn render_token_count(&self, cx: &App) -> Option { match &self.active_view { ActiveView::Thread { @@ -2576,138 +2902,6 @@ impl AgentPanel { }, )), ) - .child(self.render_empty_state_section_header("Start", None, cx)) - .child( - v_flex() - .p_1() - .gap_2() - .child( - h_flex() - .w_full() - .gap_2() - .child( - NewThreadButton::new( - "new-thread-btn", - "New Thread", - IconName::Thread, - ) - .keybinding(KeyBinding::for_action_in( - &NewThread::default(), - &self.focus_handle(cx), - window, - cx, - )) - .on_click( - |window, cx| { - window.dispatch_action( - NewThread::default().boxed_clone(), - cx, - ) - }, - ), - ) - .child( - NewThreadButton::new( - "new-text-thread-btn", - "New Text Thread", - IconName::TextThread, - ) - .keybinding(KeyBinding::for_action_in( - &NewTextThread, - &self.focus_handle(cx), - window, - cx, - )) - .on_click( - |window, cx| { - window.dispatch_action(Box::new(NewTextThread), cx) - }, - ), - ), - ) - .when(cx.has_flag::(), |this| { - this.child( - h_flex() - .w_full() - .gap_2() - .child( - NewThreadButton::new( - "new-gemini-thread-btn", - "New Gemini Thread", - IconName::AiGemini, - ) - // .keybinding(KeyBinding::for_action_in( - // &OpenHistory, - // &self.focus_handle(cx), - // window, - // cx, - // )) - .on_click( - |window, cx| { - window.dispatch_action( - Box::new(NewExternalAgentThread { - agent: Some( - crate::ExternalAgent::Gemini, - ), - }), - cx, - ) - }, - ), - ) - .child( - NewThreadButton::new( - "new-claude-thread-btn", - "New Claude Code Thread", - IconName::AiClaude, - ) - // .keybinding(KeyBinding::for_action_in( - // &OpenHistory, - // &self.focus_handle(cx), - // window, - // cx, - // )) - .on_click( - |window, cx| { - window.dispatch_action( - Box::new(NewExternalAgentThread { - agent: Some( - crate::ExternalAgent::ClaudeCode, - ), - }), - cx, - ) - }, - ), - ) - .child( - NewThreadButton::new( - "new-native-agent-thread-btn", - "New Native Agent Thread", - IconName::ZedAssistant, - ) - // .keybinding(KeyBinding::for_action_in( - // &OpenHistory, - // &self.focus_handle(cx), - // window, - // cx, - // )) - .on_click( - |window, cx| { - window.dispatch_action( - Box::new(NewExternalAgentThread { - agent: Some( - crate::ExternalAgent::NativeAgent, - ), - }), - cx, - ) - }, - ), - ), - ) - }), - ) .when_some(configuration_error.as_ref(), |this, err| { this.child(self.render_configuration_error(err, &focus_handle, window, cx)) }) diff --git a/crates/agent_ui/src/agent_ui.rs b/crates/agent_ui/src/agent_ui.rs index b776c0830b..231b9cfb38 100644 --- a/crates/agent_ui/src/agent_ui.rs +++ b/crates/agent_ui/src/agent_ui.rs @@ -64,6 +64,8 @@ actions!( NewTextThread, /// Toggles the context picker interface for adding files, symbols, or other context. ToggleContextPicker, + /// Toggles the menu to create new agent threads. + ToggleNewThreadMenu, /// Toggles the navigation menu for switching between threads and views. ToggleNavigationMenu, /// Toggles the options menu for agent settings and preferences. diff --git a/crates/agent_ui/src/ui.rs b/crates/agent_ui/src/ui.rs index b477a8c385..beeaf0c43b 100644 --- a/crates/agent_ui/src/ui.rs +++ b/crates/agent_ui/src/ui.rs @@ -2,7 +2,7 @@ mod agent_notification; mod burn_mode_tooltip; mod context_pill; mod end_trial_upsell; -mod new_thread_button; +// mod new_thread_button; mod onboarding_modal; pub mod preview; @@ -10,5 +10,5 @@ pub use agent_notification::*; pub use burn_mode_tooltip::*; pub use context_pill::*; pub use end_trial_upsell::*; -pub use new_thread_button::*; +// pub use new_thread_button::*; pub use onboarding_modal::*; diff --git a/crates/agent_ui/src/ui/new_thread_button.rs b/crates/agent_ui/src/ui/new_thread_button.rs index 7764144150..347d6adcaf 100644 --- a/crates/agent_ui/src/ui/new_thread_button.rs +++ b/crates/agent_ui/src/ui/new_thread_button.rs @@ -11,7 +11,7 @@ pub struct NewThreadButton { } impl NewThreadButton { - pub fn new(id: impl Into, label: impl Into, icon: IconName) -> Self { + fn new(id: impl Into, label: impl Into, icon: IconName) -> Self { Self { id: id.into(), label: label.into(), @@ -21,12 +21,12 @@ impl NewThreadButton { } } - pub fn keybinding(mut self, keybinding: Option) -> Self { + fn keybinding(mut self, keybinding: Option) -> Self { self.keybinding = keybinding; self } - pub fn on_click(mut self, handler: F) -> Self + fn on_click(mut self, handler: F) -> Self where F: Fn(&mut Window, &mut App) + 'static, { diff --git a/crates/zed/src/zed/component_preview.rs b/crates/zed/src/zed/component_preview.rs index ac889a7ad9..4609ecce9b 100644 --- a/crates/zed/src/zed/component_preview.rs +++ b/crates/zed/src/zed/component_preview.rs @@ -761,7 +761,7 @@ impl Render for ComponentPreview { ) .track_scroll(self.nav_scroll_handle.clone()) .p_2p5() - .w(px(229.)) + .w(px(231.)) // Matches perfectly with the size of the "Component Preview" tab, if that's the first one in the pane .h_full() .flex_1(), ) From e52f1483049aa6c0b155c04fb4808aeb9a4bcd1a Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Wed, 13 Aug 2025 13:56:51 -0400 Subject: [PATCH 17/74] Bump Zed to v0.201 (#36132) Release Notes: -N/A --- Cargo.lock | 2 +- crates/zed/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac1a56d53f..3b1337eece 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20500,7 +20500,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.200.0" +version = "0.201.0" dependencies = [ "activity_indicator", "agent", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index bdbb39698c..4335f2d5a1 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -2,7 +2,7 @@ description = "The fast, collaborative code editor." edition.workspace = true name = "zed" -version = "0.200.0" +version = "0.201.0" publish.workspace = true license = "GPL-3.0-or-later" authors = ["Zed Team "] From 4a3549882905e07b2d4ef259bff7da30d70aa922 Mon Sep 17 00:00:00 2001 From: smit Date: Thu, 14 Aug 2025 00:19:37 +0530 Subject: [PATCH 18/74] copilot: Fix Copilot fails to sign in (#36138) Closes #36093 Pin copilot version to 1.354 for now until further investigation. Release Notes: - Fixes issue where Copilot failed to sign in. Co-authored-by: MrSubidubi --- crates/copilot/src/copilot.rs | 12 ++++++------ crates/languages/src/css.rs | 8 +++++++- crates/languages/src/json.rs | 8 +++++++- crates/languages/src/python.rs | 1 + crates/languages/src/tailwind.rs | 8 +++++++- crates/languages/src/typescript.rs | 1 + crates/languages/src/vtsls.rs | 2 ++ crates/languages/src/yaml.rs | 8 +++++++- crates/node_runtime/src/node_runtime.rs | 15 ++++++++++++++- 9 files changed, 52 insertions(+), 11 deletions(-) diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index 49ae2b9d9c..166a582c70 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -21,7 +21,7 @@ use language::{ point_from_lsp, point_to_lsp, }; use lsp::{LanguageServer, LanguageServerBinary, LanguageServerId, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionCheck}; use parking_lot::Mutex; use project::DisableAiSettings; use request::StatusNotification; @@ -1169,9 +1169,8 @@ async fn get_copilot_lsp(fs: Arc, node_runtime: NodeRuntime) -> anyhow:: const SERVER_PATH: &str = "node_modules/@github/copilot-language-server/dist/language-server.js"; - let latest_version = node_runtime - .npm_package_latest_version(PACKAGE_NAME) - .await?; + // pinning it: https://github.com/zed-industries/zed/issues/36093 + const PINNED_VERSION: &str = "1.354"; let server_path = paths::copilot_dir().join(SERVER_PATH); fs.create_dir(paths::copilot_dir()).await?; @@ -1181,12 +1180,13 @@ async fn get_copilot_lsp(fs: Arc, node_runtime: NodeRuntime) -> anyhow:: PACKAGE_NAME, &server_path, paths::copilot_dir(), - &latest_version, + &PINNED_VERSION, + VersionCheck::VersionMismatch, ) .await; if should_install { node_runtime - .npm_install_packages(paths::copilot_dir(), &[(PACKAGE_NAME, &latest_version)]) + .npm_install_packages(paths::copilot_dir(), &[(PACKAGE_NAME, &PINNED_VERSION)]) .await?; } diff --git a/crates/languages/src/css.rs b/crates/languages/src/css.rs index 7725e079be..19329fcc6e 100644 --- a/crates/languages/src/css.rs +++ b/crates/languages/src/css.rs @@ -103,7 +103,13 @@ impl LspAdapter for CssLspAdapter { let should_install_language_server = self .node - .should_install_npm_package(Self::PACKAGE_NAME, &server_path, &container_dir, &version) + .should_install_npm_package( + Self::PACKAGE_NAME, + &server_path, + &container_dir, + &version, + Default::default(), + ) .await; if should_install_language_server { diff --git a/crates/languages/src/json.rs b/crates/languages/src/json.rs index ca82bb2431..019b45d396 100644 --- a/crates/languages/src/json.rs +++ b/crates/languages/src/json.rs @@ -340,7 +340,13 @@ impl LspAdapter for JsonLspAdapter { let should_install_language_server = self .node - .should_install_npm_package(Self::PACKAGE_NAME, &server_path, &container_dir, &version) + .should_install_npm_package( + Self::PACKAGE_NAME, + &server_path, + &container_dir, + &version, + Default::default(), + ) .await; if should_install_language_server { diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index 0524c02fd5..5513324487 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -206,6 +206,7 @@ impl LspAdapter for PythonLspAdapter { &server_path, &container_dir, &version, + Default::default(), ) .await; diff --git a/crates/languages/src/tailwind.rs b/crates/languages/src/tailwind.rs index a7edbb148c..6f03eeda8d 100644 --- a/crates/languages/src/tailwind.rs +++ b/crates/languages/src/tailwind.rs @@ -108,7 +108,13 @@ impl LspAdapter for TailwindLspAdapter { let should_install_language_server = self .node - .should_install_npm_package(Self::PACKAGE_NAME, &server_path, &container_dir, &version) + .should_install_npm_package( + Self::PACKAGE_NAME, + &server_path, + &container_dir, + &version, + Default::default(), + ) .await; if should_install_language_server { diff --git a/crates/languages/src/typescript.rs b/crates/languages/src/typescript.rs index f976b62614..a8ba880889 100644 --- a/crates/languages/src/typescript.rs +++ b/crates/languages/src/typescript.rs @@ -589,6 +589,7 @@ impl LspAdapter for TypeScriptLspAdapter { &server_path, &container_dir, version.typescript_version.as_str(), + Default::default(), ) .await; diff --git a/crates/languages/src/vtsls.rs b/crates/languages/src/vtsls.rs index 33751f733e..73498fc579 100644 --- a/crates/languages/src/vtsls.rs +++ b/crates/languages/src/vtsls.rs @@ -116,6 +116,7 @@ impl LspAdapter for VtslsLspAdapter { &server_path, &container_dir, &latest_version.server_version, + Default::default(), ) .await { @@ -129,6 +130,7 @@ impl LspAdapter for VtslsLspAdapter { &container_dir.join(Self::TYPESCRIPT_TSDK_PATH), &container_dir, &latest_version.typescript_version, + Default::default(), ) .await { diff --git a/crates/languages/src/yaml.rs b/crates/languages/src/yaml.rs index 815605d524..28be2cc1a4 100644 --- a/crates/languages/src/yaml.rs +++ b/crates/languages/src/yaml.rs @@ -104,7 +104,13 @@ impl LspAdapter for YamlLspAdapter { let should_install_language_server = self .node - .should_install_npm_package(Self::PACKAGE_NAME, &server_path, &container_dir, &version) + .should_install_npm_package( + Self::PACKAGE_NAME, + &server_path, + &container_dir, + &version, + Default::default(), + ) .await; if should_install_language_server { diff --git a/crates/node_runtime/src/node_runtime.rs b/crates/node_runtime/src/node_runtime.rs index 08698a1d6c..6fcc3a728a 100644 --- a/crates/node_runtime/src/node_runtime.rs +++ b/crates/node_runtime/src/node_runtime.rs @@ -29,6 +29,15 @@ pub struct NodeBinaryOptions { pub use_paths: Option<(PathBuf, PathBuf)>, } +#[derive(Default)] +pub enum VersionCheck { + /// Check whether the installed and requested version have a mismatch + VersionMismatch, + /// Only check whether the currently installed version is older than the newest one + #[default] + OlderVersion, +} + #[derive(Clone)] pub struct NodeRuntime(Arc>); @@ -287,6 +296,7 @@ impl NodeRuntime { local_executable_path: &Path, local_package_directory: &Path, latest_version: &str, + version_check: VersionCheck, ) -> bool { // In the case of the local system not having the package installed, // or in the instances where we fail to parse package.json data, @@ -311,7 +321,10 @@ impl NodeRuntime { return true; }; - installed_version < latest_version + match version_check { + VersionCheck::VersionMismatch => installed_version != latest_version, + VersionCheck::OlderVersion => installed_version < latest_version, + } } } From bd61eb08898e379ae1f093895738d805af726430 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 13 Aug 2025 13:25:52 -0600 Subject: [PATCH 19/74] Use IBM Plex Sans / Lilex (#36084) The Zed Plex fonts were found to violate the OFL by using the word Plex in the name. Lilex has better ligatures and box-drawing characters than Zed Plex Mono, but Zed Plex Sans should be identical to IBM Plex Sans. Closes #15542 Closes zed-industries/zed-fonts#31 Release Notes: - The "Zed Plex Sans" and "Zed Plex Mono" fonts have been replaced with "IBM Plex Sans" and "Lilex". The old names still work for backward compatibility. Other than fixing line-drawing characters, and improving the ligatures, there should be little visual change as the fonts are all of the same family. - Introduced ".ZedSans" and ".ZedMono" as aliases to allow us to easily change the default fonts in the future. These currently default to "IBM Plex Sans" and "Lilex" respectively. --- .../fonts/ibm-plex-sans/IBMPlexSans-Bold.ttf | Bin 0 -> 200872 bytes .../ibm-plex-sans/IBMPlexSans-BoldItalic.ttf | Bin 0 -> 208588 bytes .../ibm-plex-sans/IBMPlexSans-Italic.ttf | Bin 0 -> 207920 bytes .../ibm-plex-sans/IBMPlexSans-Regular.ttf | Bin 0 -> 200500 bytes .../{plex-mono => ibm-plex-sans}/license.txt | 0 assets/fonts/lilex/Lilex-Bold.ttf | Bin 0 -> 192992 bytes assets/fonts/lilex/Lilex-BoldItalic.ttf | Bin 0 -> 197532 bytes assets/fonts/lilex/Lilex-Italic.ttf | Bin 0 -> 198216 bytes assets/fonts/lilex/Lilex-Regular.ttf | Bin 0 -> 194308 bytes .../{plex-sans/license.txt => lilex/OFL.txt} | 7 ++- assets/fonts/plex-mono/ZedPlexMono-Bold.ttf | Bin 163568 -> 0 bytes .../plex-mono/ZedPlexMono-BoldItalic.ttf | Bin 170088 -> 0 bytes assets/fonts/plex-mono/ZedPlexMono-Italic.ttf | Bin 169868 -> 0 bytes .../fonts/plex-mono/ZedPlexMono-Regular.ttf | Bin 161844 -> 0 bytes assets/fonts/plex-sans/ZedPlexSans-Bold.ttf | Bin 206164 -> 0 bytes .../plex-sans/ZedPlexSans-BoldItalic.ttf | Bin 213704 -> 0 bytes assets/fonts/plex-sans/ZedPlexSans-Italic.ttf | Bin 213092 -> 0 bytes .../fonts/plex-sans/ZedPlexSans-Regular.ttf | Bin 205848 -> 0 bytes assets/settings/default.json | 10 +++- crates/assets/src/assets.rs | 4 +- crates/editor/src/display_map/block_map.rs | 2 - crates/editor/src/display_map/wrap_map.rs | 2 +- crates/editor/src/test.rs | 2 +- crates/gpui/src/platform/linux/text_system.rs | 6 +- crates/gpui/src/platform/mac/text_system.rs | 6 +- .../gpui/src/platform/windows/direct_write.rs | 4 +- crates/gpui/src/text_system.rs | 17 +++++- crates/gpui/src/text_system/line_wrapper.rs | 2 +- crates/markdown/examples/markdown.rs | 6 +- crates/storybook/src/storybook.rs | 2 +- crates/vim/src/vim.rs | 8 +-- crates/zed/src/zed.rs | 4 +- docs/src/configuring-zed.md | 10 ++-- docs/src/fonts.md | 56 ------------------ docs/src/visual-customization.md | 12 ++-- nix/build.nix | 4 +- nix/shell.nix | 4 +- 37 files changed, 58 insertions(+), 110 deletions(-) create mode 100644 assets/fonts/ibm-plex-sans/IBMPlexSans-Bold.ttf create mode 100644 assets/fonts/ibm-plex-sans/IBMPlexSans-BoldItalic.ttf create mode 100644 assets/fonts/ibm-plex-sans/IBMPlexSans-Italic.ttf create mode 100644 assets/fonts/ibm-plex-sans/IBMPlexSans-Regular.ttf rename assets/fonts/{plex-mono => ibm-plex-sans}/license.txt (100%) create mode 100644 assets/fonts/lilex/Lilex-Bold.ttf create mode 100644 assets/fonts/lilex/Lilex-BoldItalic.ttf create mode 100644 assets/fonts/lilex/Lilex-Italic.ttf create mode 100644 assets/fonts/lilex/Lilex-Regular.ttf rename assets/fonts/{plex-sans/license.txt => lilex/OFL.txt} (96%) delete mode 100644 assets/fonts/plex-mono/ZedPlexMono-Bold.ttf delete mode 100644 assets/fonts/plex-mono/ZedPlexMono-BoldItalic.ttf delete mode 100644 assets/fonts/plex-mono/ZedPlexMono-Italic.ttf delete mode 100644 assets/fonts/plex-mono/ZedPlexMono-Regular.ttf delete mode 100644 assets/fonts/plex-sans/ZedPlexSans-Bold.ttf delete mode 100644 assets/fonts/plex-sans/ZedPlexSans-BoldItalic.ttf delete mode 100644 assets/fonts/plex-sans/ZedPlexSans-Italic.ttf delete mode 100644 assets/fonts/plex-sans/ZedPlexSans-Regular.ttf delete mode 100644 docs/src/fonts.md diff --git a/assets/fonts/ibm-plex-sans/IBMPlexSans-Bold.ttf b/assets/fonts/ibm-plex-sans/IBMPlexSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1d66b1a2e96d5e33d6f5fa8e81e76b4e5621d240 GIT binary patch literal 200872 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 Yi*j@nd=g9YbQIi+QnS(d&{B~B08|`uMgRZ+ literal 0 HcmV?d00001 diff --git a/assets/fonts/ibm-plex-sans/IBMPlexSans-BoldItalic.ttf b/assets/fonts/ibm-plex-sans/IBMPlexSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e07bc1f527dd77ba8fd967ef00a54371da7bfaf0 GIT binary patch literal 208588 zcmZQzWME(rW@KPsVK8tB_H<`pU|?im);q$$z`)_|;_9~c-@0rDCZz%f2F6S70sg_( zMR)%&FsZmOF#K$D4-R!o6VVB0V3s|@z#y>BKUm+Wx2$S00|Vm@1_p+NL zFfa%{VPN29N-ir=;Ge_7!N8!n$IQXNz&L|}fk7cR zwIosRY@H?pvtA9zJ$Z?_sjr?1$}up0UBSS>`Kchkxa5#jQ#u3V|2Yf{N(T#yQVZ_x z+@Qq3AQ!{Hz+?apJ7z|Aj)d&ocz&C&44lj_7#J8B9vV#F1fi?v{JZn-Ez3Wa8U|(t zP6j5BC^&=}SQ!7kWnf@6{deczVwQi*FBnch<-ip4XOP*oj zU;tqze+GFbLk3AEcLqMjcMS4iJ~M+nW8(jnOyd6^F}eN!!zA-CGDI>hWAI=qXGmsV%TU79`2Pk|0YfyC z?fjGP?i24aV#Y35+io5*Xze5*g(foR~Nm5}7y{ zoEYW)UuNR?f0@yOL5b0Vft$&QL5azTft%6l|93_!25H7u|KBmbVsKzgWUymQ{NKRn z{Qozj^Z#>QU)7F zcLsZ=2nH{hKE~buk1;bah%lXEkYf^I5MW_p5M#1tkYg(N|A9$_L6Iqw!GiI||C3Dq z4023{|9>+TF_SiK*E6H^?62~#WsC)14oznP{mNHJCZU&&PUe%ndFNKxG09gUSeG>;owmz~u#~ z%s^m%sF(i-8YZ9)ZdvLRkL)Jthz)qz+A<*#lb6fy%nB{};jK9jMGh#%BLlGR{* zOa~ZbnI!&SX4>)p2U7>MP2%$ZDU$+&1~_l?GDtISV~}SGVUS=dWsqewXHW-~5lj;Q zuQ7qlP-oC!T*V**R@=&8#H9BB8sjqtc_s@6dB&# zgTuLiA)48gK_Ao>Vb)|wLGcGKgEYw9AU8v?1lXM*H^DH>J+l}LnMD~4nS>Y&!S+94 zFk}MN$DnZh$Y2PruRwKy9D^d0CIcUnA%h;{1_nOH#|(T-nhf&bwi`2pJhSWnugu>6 zzcK#&|BdnL|2^P#8K}׮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 M)NFJKVBm0fadlh!Z(TM6ladJo1LGz40RP}D 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Ξ2g7vn7A-F-$91vOw^gh7`MUq;4ll6nq? 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įRm7$u^lA(*ygJA-rKWi*&468e< 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/lilex/Lilex-Italic.ttf b/assets/fonts/lilex/Lilex-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e7aef10f7e7c6803199551463d0ab456d9c9e03a GIT binary patch literal 198216 zcmZQzWME(rWMp7qVGwY4adn%TJoP*S)AlV442;Lz1N?)po4D08Fzu{iU|`j84-R#T z;q+a_z_f1#1B3el|6qM1^`D}~3=E7j7#J85l5-Oa%(Q3DXJC+!VPN1olw4M#An2f- z%D`ZFfq{WxUs^$WZjwH00|SH70|o{@p7g}x0tN;K0S2b+YZw?9IMQ<}(|+GPrOv?M zv4eq0^G`-^$S3``6w7)2O*85kHd_;?uD7#JB?m?9V_Ft9Q(FzsRLVqjqC zfzXV18EhC07#NtiSvgsmm>HOu7cwyY7hv4+8{|Wf`F{R>t_+O~3jhB?+`v-DxLSdM zasK`53=B*xOuNA9SeYUi6qq9Zf2T2i$rSPbB~t{09#aH^9}aBJ6u|((@=Os7Ags?6 z!9Wdc2Q|luDS`nVt20F~s53?Ue+Z!&G@)uhG%47MDS`opwV5IqKp2}p)tDj}q@Z>| z?FQKo#~`=T3Ue_MKFY8!JbSJ479|#(6j?e zKS=oh2c`&yC;}Li#*wiFQv?GoF#}TsD91CHGDR?W*MHK6XWp<>v%FhzjF1eAZ! zu{Bc!gEdpc|F005A&4o0WNeR=&SB{tYA%C2Qv^dc77UW-f!YaTn;@}4d=PeEieR7> z=3t6o0AY~%B1{ns!cYu~gB+#^1{h9eieLcc2W(gg8m|6K5e(=!m??sRmKaoKfyxtf z%+3_SAWZ-pGes~UV_T*O23lfJIAg=GI9|gP!LS`t*DzQ@^E7(?b%B(h|8GFcC}`RA z|2|U$gDhIv35_do`3);qLFE~&d;^uipzWIo6}APn+541>(%W{UWKo+*Ms2O1YDOc4yc(DDcrW+3dw6u|((F;Lo&DS`nM zH=y)`RM!800*xo+JmAU{!Qjdi@&7kd1cMUPKcM^vN(Z3)2MSYA7{JmmC~QILIUZ^k zsO$pOH6Sz7m?9WJ;b_Jb@&6)I1OrGPDBeM4fcyq4$3XD{GGCA>fQ1^rU4N?cf zp!5dvHz@2tWgZJt1Oq6qgWLs*OOTl$dqL_zcp6g#!xW|nhE6DMW{O~#$`rvcohgE0 zEmH);B&G<4rA!eFmzW|LE-*zf9EIZjOc4yAbbpyCf&rA@&oM#5e&Ud5e)O0A{dS{MKGLTieT8v6v42GDS}}y zR18#(Tw#h}IKmXca1Gk_0i}PEF{sx9!VohULHfIyA{dTA!sA~gQ^dbLOcDR8nIitJ zVT$;BfhpqOUZ#jYbxaX|Iw1JpHKvGvXP6@XlrTm7*~Ap_uY@V$-*kl7-`h+Pzq6Sl z{#7tV{0m@;_-Dfu@%IZ;#NSU$5x?g!Mf`ow6!G@~Q^emBNca*{#6Jn9h`*O0_@5wC z1Q_!$Mg0EH6!F`JDdPW62nK~0sQd=w_e>H0-$TkPF#k2AP5tLLQv?Wu?E1fvDdPVI zNZAf{TRlWQxQqjpE1Pw2ej-4=>gSQ+n6F4A|T-i zZi|A#5*r4kt+~)J2es`$X&6R>;vR%S^$tugDD8pDhe1$3E&pM`vU!_bDf6AC5 z{>@;D_5mUrJE~bdzSD7OIi7-X{2Bo82OcDPWAZg-{2UEm9Bc_Po zE0`jFpJs~qC&v`=`w3ITKNqHmzfYJVey1`;{9|Q`_&bX!;{PvbykB98_&Xnh|J5=@ z{P_dHptSV=HB$r#Gn|FQH9RdCL+VFR+F{6GiU5m)>V89rIUw`?i7`d|oyZjN7vwKi zh+Sayg%C5r=C&f#|GfoO-^Ud3_cBw&zgbKX|E4iT{5^%_XHYo)WQqWX87RGh+BTqa z4AlN%WQt%2WQt$_m0_TE3aCs1@z*g$Fo5b&P`rW401yVXCqVU~0<=%d3{4B5Gz!8X zHK1}7mL@<8r$kefhh6=WtTZNtcjMNDPD-L1Bd^4i*EYBQ!k>XzIZINKm;3G6U3} zz@i?c2ZTX(fiN-~#K(m}ZUD)FXq0gFW{LobfiOrOgpt`GKFD1lF%Sl|gF!S1Bijw) zgD^-v2qUvWe0&%=oMGxfW`i({52Hb1$Yvw6k<9_AgXuw517b5uFhzhc!*&LS|4j@G z|F1JJ{NKsI@c$_T!~Yo!4F8K582-0H-F1H=DL28RC=85sUML*;9jA{f>&MKFTOuBS{9jG%Ths2wwpDS}}mM2-Pe=7HKb zpt^1gwA}-$|5icd!Fr$J(2J~Z1yckANY5gs2u4sj3u>D$hU5uwUl%!lIx#T(uSLTJ z3=IE^85sWCGBErHu|fW>Vqo|W$I!7EP&om@pn4o+Kd23Ah-MbZY>*is^Bfo${ue?q z+$@l}Oc4xM{@nw$4j7mi7#Nrt7#Kttm_Z}f3?d9HTjoeS+ZG5Sq`z>WO>Q*lU0?^UQSc4Rc@Z#PX%TLE(K8q zDFrzNB?UDFO$7r5V+AV(7ln9*0)sl0dR_It>U(uzbsud(?Fa*g2a6tT{{Q#?fAGk;0fQC80fQyVWYwp zg&k=A4NweLoS?W;af9ME#a&4L6;u*cl0@=vit=w&2Gyymr&Q0YUQ@jT^)DaTzY890 zfcTeb5-1h?Tgk)^qG9;owSTi17?|oId?r;UWhOZ$aVF9KD;XI6b2Bjfd-d-n1H-@9 zAo;)37#RNE0kKf=*JKd?;ad>-SPVph@MG6UzZn=F-*}wzXw{>`k7hlZ^{C--?c=7$ zO(0niew_O_=Fy)=e;z%1to-OPNQ8mm(Y{AJAMJj$^U=mf8y@*Qa(QIK!0fZ5tYwo$ zvmbK+a~^X6a}`Jra}5Ina}9GFb03HY!yq0rXy%InL^3a8Ud6z`e20O7g^k6A#g4^+ z#f@bZ%RZJHEbkZ?Sl+RGU|?YR!Mcipfps104%R)a2SDaPNDvDdv#w*^#kz-eAF>z& z1M3#nZLDWd#Xvle7zl&dAk2D%^%#iH_KEEah>s03i!kRf&u1=XQD6yRVP;;y+|As> zT*P9*oWb0{oX%XroXMQUVh{2Ma~=z5UQ3!mhCzuzjlq(^iou@2nIVuNgdvO}h9QfY!(;hMizEfZx&7#CuSaIURGxoe-;+z0#+YpZpJyxbC^Cc zy=VH&oX;S{z{J4CAi*HOAjTlcAkSdTpw6JhV8GzR;L6~^;K`uMkjRkFkiwA8P{WYR zV#QF!Fo$6h!&HW83>z8h89f=!GVEnI%5a(CG{Z%PD-5?7-Z4C4c*^jak&Tgok(rT& z;Q^yOqb{Qoqbj2nqc)2*qXlC$V<2M)V<=+*qb*|*g9yWU24;qR45ADd7-Si4FeotG zW>93f!yw0SlR=r`9)k+QeFjs84-6U%j~NUZ-Y}Rkd}PpMc*0=A@SVY$;TwY;!%qfV zh93-041XCM7=AMZFmf^YF>)}tF)}jvGjcL`G5lw6VdQ2AX5?oGWfWu-VhCpxVTfcD zV~AiBWr$)FXNYE$V2ERsW=LR^V~A&zWt3q^VpL$LU^HV$WmIM;XEbG~Wwd5!Vsv0= zVRT|>W^`m|V{~EYWOQffV02?>XLM!gXY^y}WAtU{W%OZK!I;jllre>2GGh?Ka>g`< zC5*`o%NSD`)-Yx>Y+@{A*vzn#v4UYYV->?L#!5ynhC)VthIx#!44e!{7~C0|7}6M3 z7^W}=Gt6R)WSGtv#xR31oM9$o1VbgGIfFREB?c*ms|?kQmJD5t9t;y0{aIsKV_4l; z9a%kDeObL&U08Kl^;iv9O;}A?jaYS9wOP$rjal_s4Ouly5JjghgaUSD*#s!Sa7?(4yVqDF*hH)+9ddA(1dl>gI?q%H1c!2Q;<6*`_ zj3*h-F`j2)W@2GtWnyFEVd7;HU=m~!ViIN&Wm05PVp3sJW>RHRW71;MWYS>LXEI?j zW#VJvXEI}AXVPQRWintgWHMsXX3}9YW)fo(VNzgHXS~Q{&UlH*g7GqwCF2z)E5=1k z9E?ktxEPl*aWh_JvSz%-WW#u!$(Hd3lO5wtCVR$POb(2aWpZJ>&*aMZ zfXR*VA(K1fBPI{V$4s7#Pnf(IpE7wfK4bD>e9q*{_=3rg@g3~USs8Q2*PF>o*(W?*GFz+lAimcfMKJ%c&J zCkAbXXAHUwFBtR~UNY!2ykgK{c+TL<$j;!+$jXq%sKZdesK=1OsK$`RsKJoUsL7DS zsKt=UsLoKtXuwdyXv9#;Xv|Q?Xu?p;Xvi>|F^XX>V+_N5#yEzBj0p^j7!w&5GbS-C zV2o$j%2>j%g|V1n8)GTMcE&Ph31&%VF=lb*Hs*Hb7Um}AX69Drnas18r!r4xp20kg zg^xvmxsX|rC6Gm%#gIjpMUh2`MU};XMUzFDMTJF%MW027MV;vv(|@K9OdpxPFnwkE z#`K-(2h&fc-%Nj){xbbzNoI*yj^!)Md6o|>`&o9foML&;vX^B$%So2MtP-q3 zEZ157u!^w?uv}$jWL04mWZA{4$Z~*HoaHtv1FJGCKg$kQ1(toRqAa&q-m%*6$V^&Un#d4Ts3(HDYX;vPVb*xgX+$?KZ)mi0OHnFO) z%Cc-^ImEJ=Wd*AwD;LWeR#jFRmJKXVS)Q;wV|mWq(8#DqU6rntY4F({21CYuC0TBvm3SC`^3LCfrA`+w( zHYkAPxIip35X&qINR?*=YlZ zvXiu;V&n$K1lRE$*E;1C?Kfl*r;6fRJw=x$)w*}&C6n3yM zBzGw%ZV+@%Q0Pif*dVCvq^!F^NXI)QVk1k6OQgyM-c;oZ-3`Jz-hmO`!4N@d#YmM6 z!eDU`osA4a&Y=+-g@l|pFeW-}5Yz@`xeZLJP8<0_gaDJO(*{N{WrYpQssRxjLHTe4 zi>gysmjcLI0WC%44UCB}wlqW@q=iW}af5)CV&n#XXZH;P&h7~tm{222VFT7E+{nNn ztn9LZ(Rl-d-6lpxMsT(l)nVAkz~mYdu|Y`LNx^jkpR&^iUgZsJ2~G+L+a)9z83Y-G z8JwJ)Kp`Na?6iR~aia)__J(e4X{AWr4PrVQ8AP>pH;C(OWCYO?Ivbflw4}~PW)Ll< zvylZvOY3Z81<^7(8`(g#tjulr%(b_u7u<+l&mf#%{p{$^{fiV`8 zTXZ+*AW4eBB?}>vx=500aLFQwq=F8^27Yav{@lQrxE116kUx?Ar>L`$K|x!0gObih zMi8y6vyllztLSWG2GOcI8(BcKn$AX65UsAWkqty^=xk&M(V99NIY6|Q&PGlUt*4`4 z1I|eLItmFJBoY*yl{YXZID-mjP$tv^rC9@=4f@&}^tE(180sh}xGUg@P31%jWl+J6 zSB11Kcm7O+OFfxjYXz6aS(%HZu zwn1FkX#TNV&6w%h*;D{m{BprYv>x3c;(~E2#x(;WZ4OZI73SgRG7P{zcu-5KU zP_O}|u`UbTN;j}M>uoU5*4^L=_A)3Lt3g6OaRZOC6C|aAlC!dcje?%C1=K@sIvcrI zRGmPnAEZSU7DgcJ2q$TGYzYjMzDP~Q8<loMg0<);Hm&>MWUbvO9yY+_(=)7IS(ptFgA5yS}8*~ADI z3DVib2o?zjsd3lV-4Fs&17d`N)PNXaAT=OHxXxw<1_ozs-3<{sn?Y@GZQTu#I-40G zVo^Gq85zN{(I9n7~nfEcMDH6TVBNDYXQ4ziEIMO$}62FN}zD-&cNn3V;x56sF2sbd7G%K@na zvvNV|z^puwIxs6=XCs3RJOT^AybTW8x*G~1Oh;|q4Mm_p2Pxa&q^-N5SZ5=njW$?K z34{q!QwmlCk^reG)7i*i3pceK%meGFfG|NiDj`ge@+zH;jJ6OXt07E~f*J@Dq@Y%3 zBZD2>ygD!sY+gNt2~yqwVSTG1RgP7L@VS*GiLzo~1Ejk++?BV9Mf_Y%`+8|7j z@^%Olq`X6CBcnaUyiN!cq@WAJ1S#m&*~ATQ*=}Hy-o(Ph>>8o0D6JS7>7>1ZBXt9_ zN~C3T5(Svt=@5Q(^@R@;dDoYY=G=Xy9w$YG7wzU}NCc+Q=a6w4cEN34%m- zg62?MHmWdo1V(Id=!gLEQ(QJ`fcQH&7$5=+E|Jn3)j>kLI2srjSsXf&L%=E-Tp~fh zfiIdVn8}&Vnn{~YmX(c9YX{^1)(tGZ8<`kfHnXO%F}S#Z8xbTE{tW&ME(|W9odHZN z3=ID*n2!Db!X)tj%YPjPxZM9QOi!3t{(phWegMl`FgP(dF_-aAV)SG>z=-ewXnzN&O#~Y4e!{@O@CUL7 zgwce7fzgM7fiZ=Ffw6{xfpH201LGP72F5cC42(}07#ROBFffTQFfi#bFfh3=Ffhe1 zFff%cFfjEnFfcnXFfd0jFfbP|Ffey8FtB(qFt8*rFtAE6FtF}mU|_w#z`*)~fr0G< z0|Pq;0|UDPXpaa31N#~V1`Zbn296L0296C33>+sI7&smn zfk8-vfkDWDfkCK-fk9{r1B1{S1_q%c3=Bdq7#M_o7#M_iFffP+FffQ{FffQXFffQj zFffP|FffR`VPFvLVPFtl!oVQ9hk-%#3Il`a8wLh376t|}6$S<|8wLik5C#UZ90mrl z76t~fISk;otk@X_1_>Vq28k2~28kL528k&Q3=(S?7$lA`Fi6~CV37F2z#z%Pz##dC zfkBFefk8@!fkA2o1B0{-1B3J&1_qf43=Fa|3=Fa+3=Fb93=Fa<3=DE23=DEQ3=DEE z3=HxK3=HxW3=HxU7#I|GFfb_mVPH^9U|>+JU|>)(U|>-4U|>+%!@!_)g@Hlo4FiKR z3j>3)3=WEdE1ZZI&|7BDc_Jz!w4`@z6qFTlWHuff1z@4&!de}RF)p@D(H zVFm+(!yX0(#|j1p#}^C?P7DkTP7(|ZP6iANP96*lP6-SQP8AFcP7@dyoK`R}I2~YM zaNfhf;CzLF!Q~1AgKGx^gX;$d1~(1{1~&x;2KNdE2KNaJ4DKHo7(5af7(7}S7(C`M zFnDZXVDPxXz~Gs}z~I%vz~G(2z~EiOz~Hlifx+hl1B1^41_qxW3=Dn}3=Do77#RFc zFfjN%U|{h3!NA}zz`)?I!NB0}!NB03z`)>N!NA}@fq}t)1p|Zs0R{&D8w?Eo9~c+{ zGZ+{G8yFY@XD~1XZeU;tJi)*a_<(^S@CO4!kN^WikOl)oum}S~unq%5unPl2NCg8! z=mrLcumT2#@D&UU5iSf25itx55hV-^5j_kHkuD4jkueMmktGZaQ4<&#qE;|4L>*vY zi0)uuh!J35h*`qG5F5k55Zl1O5Ldv!5ZA%L5MRK+5D%gkFfhdLU|@*9z`zjyf`K6c zv`tTffg!Ffi2aVPL2QiQi#hsC~o0P#40$P?y8NP;bJ(Q18OPP=AJj zp1t3{4sg3{49d7@AEO7@D^*Ftp?_FtqY8Fto}rFtnawU}&pgU})=L zU}#&wz|gjVfuY@jfuUmq14Cy514EY&14Gvn28Qkq28Nyn28NzH3=F+X7#R9m7#R8` z7#R95FfdH0VPKdjz`!uEfq`M-3kHTs7Z?~O>o71(31DEDlEA<)Wd{SploJdLQ!N-6 zrtV;1m^O!jVY&qa!weAyh8Z&$7-lvwFw81pV3^gyz%XkL1H-H>3=Ff*Ffh!z!@w}> z3j@P!76yjdG7Jo}O&AzvKVV>({eyvFjsOG091RABId>Qs=6qpbn9IY!Fjs|vVXh4W z!`u)ChPh`L80NV!FwC36z%W0Afnoj^28IPJ3=9h%Ffc4Uz`(F5g@IvF4FkiX6ATQC z8yFZCKVV>3GKYa-X$=Fz(jEqerArtXmhNF-Shj(IVR;P$!}1;mhUH5b7?$s0U|8Y6 zz_22MfnmiF28NY73=At<7#LPgVPIIfgn?n@76yiuAn_{<3@e{7Fs%H;z_8kdfnjwB z1H}U|_g>gMs176$XZ@YZw@=?qOiK z3Sz%uV7OMoz;NvV1H-io3=G#EFfd&Iz`$^Wfq~(M00YAf1qOy21`G^092gjG&S7A< zxrTw^<{k!yn`ampZr)*FxcP>G;pQI(hFd%g47X$$7;fERV7T>$f#KF428P=_3=Fqr z7#MErFfiOc!@zL+4g?(JY;xOakq z;ochthWi2x4EIeK816?fFx;t4+F!a9}EnS zw=gg~sbFAu@`HilSp);aa}NfF=OFqC1H+2~28I_63=A)RFfhE_!ocwI2m`}w76yjb zYZw^b=rAz6Il;j2)`5ZH?G^@xcMS{-@BT0_yx+mV@L>uA!v_$3fq~(}7Y2rpA`A>4 zbr={v1~4#uEMQ>xIDvuT;|2zXj~5siK7L?e_{6}#@JWGz;WGyV!{-&>7zJ4v7zI@r7zJGz7zI-p7zJAx7zLLwFbY*LFbbVvU=$8vU=)#HU=*ogU=)>M zU=%&Uz$j+Iz$mW5z$ku(fl*=s1Ea(b21dyS21Y3t21cnh42;qN;O*j!GC2&4vM~&d zax7HD3Ji>LE)0xv1q_UGa~K%qo-i=V{b68~7hzzO*I{6k|HHtjAi}_?V8Xzt$il#= zsKUUgXv4s$Si!)kc!7aY*@S^nMTCJ-C4hlZC4+%crGtS{)r5gjO@@I{4Mh7eFsi#S zFsf%TFse5&FsiR%U{t@rz^ML$fl=cE1EZD=1EaP81EaPJ1EWp_1Ebyw21b1k21fk^ z21flY42=3`7#Q_GFfbYIws+bp`{Y^&bXC zn+XhzHXj%mZB-Z;Z9NzmZF3kH?OYfb?G7+7+NUruI%qI3I{aW@bc|tObUeVo=p@3x z=(K`?(dh*Pqq7DBqq7SUxPXDtc?lHXU|@9NVPJHTVPJI8VPJHzVPJIeVPJIWK*C=b z7+q5s7~M)37~LBf7~NkmFnR=F!7U7o9&;ENJ+?3~dYoZk^kiXR^t54M^bBEO^vq#k z^qj%K=y`;J(en-iqZbbYqt^lkM(-C4jJ`)082yegF#0PnF#20CF#5+ZF#6wMU<`0z zU<{bTz!Q4FhAO2?JxK z4+CRl0Rv-{4Fh9T1_NXC1O~?FCk%`+F$|2cIt+|)JPeHSDh!PAa~K%ow=gg!FfcGC zBrq^0Y+ztavNc?$z$iUk8>${Ys9lot$)sTK^3 zsT~ZAsW%uH(;OHW(>5?LrgJbbrq?hqW(Y7aX4Eh+W->4^W=>&X%;I5S%v!?0m>t8w znEio)F~^00F=qngVj7>i~wFcxiKU@SVpz*zKxfw9O#$`DSjLTjyFfO-XU|ha}fpG;31LKMl42&yJFfgwEz`(dRhkn z3m6#JZeUE!N9mbhka1LNHi2FAN57#Qz~FfiVWU|_trfr0Vf7Y4@rJ`9Za*Dx^N|G~icz=nbG z!2|}z2R9fP9~v+)KAgb7`0x({SU|@W5f`Rd=2m|BO9tOr|0t}4LJQx_Ctzlq%F2TU~+=qej`3wfe=XV$wUnnpz zzDQwUd@+N8@x>1Y#+M!pj4x*}Fur18V0;zB!1!tl1LJE62FBL~42-W&FfhK+VPJeS zg@N(S69&e&HVlk!r!X+SeZs)_&WC~VT@M4}yCV#Y?*$kb-={DzzMsLs`2Gn4;|C1} z#t#Jyj2~7oFn)Nz!1z&zf$`%K2F6bs42+)=7#KetVPO1h!oc`BgMsn$8V1JCKNuLl z*f21DX<%UdvW0>1s|W+**AxcEuUi-xzbP;j*82{g4U}CUgU}ETDU}Ct# zz{F_7z{J?Yz{Gfmfr%-Gfr;q=0~50f0~50c0~2!&0~3n`0~3o50~3n_0~1RK0~1RI z0~1RP0~5;x1}2sz3`{IL7?@bjFfg$^U|?eT!ob8Dz`(?s!ob8@!NA1&fq{uFfPsl^ z0s|A<5(Xx=9SltDJPb_i3Jgr_XBe0`Y#5k05*U~`S{Rr(b}%q;{9s_>v|wQ3T*JV` zCBeYNwS$3)JA{FWdj0s)_*od3_-z=N z_)8d=_#ZGZ2~;pJ3Gy&733@Ov32tFv67pbR66#@K61u>^BwWG3B*MbLByxj+NmPP? zNi>0hNpuDSlPHM)gMmq`gn>!y4Fi*S4+E1#3ImhG1_ma{2nHs}B@9eb5)4dI7Z{kN zTNs#RJQ$c{elRe}Zed`Oy}`gF`+P zigy^8ly)#MDYGyzDNkTvQoh5$q!Pfuq{_j-qcc7 zj0~)d=?p9^%<&A&%+9_{j0_Ae41OFO9NZk-LV|*V0_~vh%uE7d zlHXz?7`^huv^i%VKhCu4Ul?Q9zf}zX|3l1Y-pZr~-c7;A8sx>m028-jUI`ZuLlU=R z(SwS!vsN*dLDc^bWkRS|V+E;aXSHJF0FC}b?LpR84b#WKz+}gw0ynP)N!*1+5-whg zByP#P9xBep8j9pDHRk1T@em~ORY>lwgPHR`lnJ3;jTNLG-MuO-#!&OvSsP&b7#Ns3 zSTy0{jY#4FEE;g}CM0oH=31yY8>>IeUH?Nt@d_1(+6)aR0i^f{gsBIm1GxX#S?!R_ zmt)R`n#0B#2~rPAH~$Tp#F=(6NHfSYcsqDVuraYPNrDb>^5JJ>V)SNUWng3iB_lRA zXfk48Vsi0iU}0fMWM^bx@MG{}WRRDWl@S-^aR#RUFBuq^ zikWsX@G}TARCsTY3W#vfU|?Zjt>fnT;8_6sJUnGCDANaj(#r!#ziHId_lD;--@)nRdB;bp7SZRQGSf|Njv8gVTT{ z0|NsaYfw2T6EQRBf##8zb}^!s6heVQC=csFBapTxn2Km+h$Up)Mh3Bv+r4Af_wo5iVz| zuNV{$D!U-=1BW;0R5v!(pcrr&2p0DSmo*UaP>?v-KZaoc*fIn<_*q%<^RX~8=rA%d zYAZ6aFexxHv#|IuFoMorV`^YvVqsunsbgbgU|>yTU}g0L#SL>312eN9vmYaanTe{h zoQ#ARHz$KFqb)m^m^LGZ2ie)h&CDPXrmUoX3uPHV(K!aOANPt_M zmBo>xu?RU35#i$oE|VbP69NjK|Np_^=EmI2q{aXd4*-cXFfo`jFff@i?PB0!5Mxkx zPyt0dG`&LWMoy} z1{PLkmUM7if`O6I*_VNp6`bc?82rFRj{qB&jJBepup&DYGT!|cRLZ!9=if37Mt`1v z8#NhYn09%*@%Z-tKLgloaJp9mhfNSP%pl^Rx*sAQh9VBCdm-YXDB_^H7a|^lB)%S8 z_kzUPS?d_9!G6^LAIcN}PB$QNHCB*%Pz@*!D&}DB0@uADc~IR8)yKfV)XM^@dm-YD zF!LA~m_osIFGRcvNjv~t_kzUPSpAXQ6#!135b*$*ILKX0yO`7%K;lpr!Q6usPJuA> zptyni15_s?+!+9_lR@UNu||T_GcYpf|2G83r96YHgOdm&E4wHo8!Hp2{AOlhVoqmZ zWCX{hGpLMUkLO@yXLkWbFk2!68=D`S9|Hq}JcFEyIyj;^xn#AC5z)+!R1Ygds%Uk6 zw0P%1)W*tcHm+8Tkc8lYsECy{G;JkWA#nuu8>nuD_#p!92POu)|6iD_n2s^XF=#S4 zIM@mcF)@P5az+ML7DiT3!emZlU}pC8WoHC6CDKLa@Y!2Jx+R6ZMPm@}l@hKPg86o_~TT$~-0{+QIjQ~&I&){F|^^a@cAs&gRf z13>B-7#Y+-=@?vof@>TG21aIv3>HREyN?YNS1yd8e8tVc4T^I?aL-9tky%;Tm|0QS zn3=KD^xp^5pwb`{MgfzcQbxOfhnRN#JHu%5*NuS*Y<3gVE(T!+aRzG#3wBl}W^N89 zCN5^C3hoU(Bo1~fq|610v$2MNk}m@zgC+w5lOH&IlpPd6;R5XrurfkR zBea^u98~EkvV$74H~$52ua95P&A0(XIWd_zIsHAwz`z8KQ&(vFThBq8lY@zgh0%u< zR3gMPgH}!Yf+{djcJN~K6A%y(77!LzQx;(3lG0{0W@cjpH*@5ejE&4yL2>XoC_vO%W6;pU}Fse`SbsO zh(E#U3?d$eA`Yt4AmX7Y;-K^g5eJ7C+#FDU4k8X(e8B)02cC%vq0Jaj!>Mj#i0S|9R4h#`dUR|9{*4h z2IG2={a|~*X(ABP&H*jv`~RN-ByIo>YlwIVNSuL@L7Rbrsg-FL122QBgAxxrBQpad zqYo2k7mhCrGZVOmU|?Y2W#APN6lUd;)K+9>X9txS#^&b6jKYjNX4a|(l?K_ewB5`2 zcWpakWX)ZsUH_)`-TimtUmnOk+W*-><};}=fGh-+VO-$4#E*f2@jKHl237`12Qf(V zj)@7pLs@SjQ_!HAW(J5&g#fe^KS(M=SD`x9sgErFx3Xtp=wZf z@-k>RsB&?#Ftac*GWviW%*=>zF(iyc1zETxv{l&^h1t!`g^iib`I#8M^ZZNJ3*!#A z4m7{beMi;9gHcGzRf;kB-)2`=*9YLRkYZq9iUs#|)f|+0SXr1@uttIagMhH01UM3e z&6Sy%mDxdMx3Dp&+?Z>v#(p`HUDe9FG{uW;V`eF1+=G8J7&9LHTg0^M-)TnEziyxg zCvqL3;-JXR$b{7aQCpp22kwI8I_A zapDe%6Nosd%z=o9!o>fxgW88oY78K8c2;YKf8aQQs0ZaAkT@G_1V}xoZu_qTQqLd; z8f_E>9f}|*z|YLgzywRIppijP8^Vv-Ph4485Z0tI28R!%oK-g$H#b*iRxXBmqMcnw zSKeGx*)&5)LaUV>;+;RYwd{>_)C}@ix|pIsVTNc23NolN=sIXIFf&6t^Q@p00PD>Q z3o$atN(-q9t8#HL2r>$?q4elQMWC%bNT&|o^JQd7OAyp_%l1x75Y%wbb`3}t5@unx zbb``6)kUU_jX6$G%A+>BNL)+M-M==wNK9MM-5(rg;C3oF>_O*xu(1X?Lc$&*4(i)L z#KTa;L2&{R4@D6N)dLXm5G3)1;Jyt=9MreTh1v@m2ZgCuV+E-PmHO1Mg-0M< z{TC)Ha2W_uZwE4;0TREt%$f|+4EhWop^aH~MiwR}mI6?to+%NO(>;AT7+G1t5%0z5 z2W`x1fRwScLR2v@F?sren9ybgntD)+Rt{M`R#W9b19-@)@S5tN22lzceus>ZGqABS zC4%)JTMu5sE(%)ItF9`eFRRZW%^)qPuA$5cYKE}0u_-HqM#uP=;VoiuV{=AOp9C$n zGUW=g$gA?nii6TBD9M6SuC7wB(7#8}1Pe>J%$li^s`6nL$f=hn|F1Ac0*1y{E;zml zA!P?VzCxLDnL&MEkT`1mBCAJ^-&}C~Lezuf7jAwXlNtj^oQ*XaZvGdhAm%MhY7C(C zz{VPkByI)n(?Y}};o^o!>5Yxm7c}I(@h1`P&N1{()UeqJUf1`}BU zCKhHUX+|bSW@aBgMg}hiCMJeN1_lOCUlvAa8REt0r=_WBs%5IGqX{b6#nsK#pyOQP z=Hl#Ppkf2uL}XM$bWg-#F=L|6DCTVGDGDw?^jsv(Kx_^7Y;QdmNeMOX z%4$eBMS#MIfr&v2wC*3=){%phmynShHb&6U7r5$VXGDzUNGO5&2C51iTyolq-~?!9 zW(*%oRu)G1+n9;*Pi~(7ghWOzo@E-dxMypw_z@=*T*SxA#2Vn)P}6@r12nYEWKflz zAfO}Y@6W&l9{2Hpj>ADlm6#ZqnbJWGbjEnFTNuEN9ByuIF>X;M6-98<+*lbpY^{+sEl2#IQHF)%TJZip~o+Qq=b zAOZG26B{FF&^m(wG!MoC9{h0jg;>kW%PYYvuB4&}naKj#%MKm?M6tOks5D4o8OZMS z=Gv>_cK4%O4w^?}u>0=?N~a9642BHx4xCbw5@IY2OpHF>8)O0^9HdwonV1=vnHU-n z6&a}A?7`qC?H~!41PQgkRWSQSIta_lF*0bX%NfcW^6@apGRi`0ICXXS*eocyvWtUK zE*l$oOara_U~CYV=L-)D1SimV73UO9eXlz4g5E&St zm$q4))>2TfFgb+qxQe6pxDo- zWdC=GQQOVP5FG!|F*FZwerbf1XJ(N47&O-C0Un=)h=;<&|FbiBfZL%UaZnqX6WlJ8 z{Qrf?o#_~ZCTK1}Qi6qx2XSlm#IghKE zp^>q_v$iR(pm3XVfLb#0m`cF|9dHvJh%pQ_Hpd4(*-t@8T}2Z-CIuSlWfz5{O>or* zngfCknkt){D>93gGTz`j8=PRA?q?e#<)G?k;l;_yY-AkAd*R>3Or~8yS6P@t!fbL~ z^>wuz9L*HO*|m&)Z-V-c42%rn3=B-2;57!)4icck0NPk%08b!-Ruq6b-;AJMkFvQU zQ|+tFpv+f1OlnL;fBTqoz9dRhB`PYq(ddflTLlrM8+e=-)cVAiGB%9*_S2hqx15R`h`LQYd(P z9wS5ee?zeQl|VDylJLyJ1kWt2jLgg|@eH7$I8a7$0l9@C5uQ=xWF$c2a-d0EP)1Q= zRKk`~l!d|0WL8GZ$9+N02hsxIK;e0n$uEW_z56f~d3gNovxQEsfy##P|Lh=lGpR9v z`~yn2pwlfG89e`g0r%^q7@+Y14m|Lzp%=5Cs)!n7Fa$JI2Ac>KHfDylRL#t11vzuF z={h?($#J^}x$r8Og}Y`)aDE1`+p1RuAq+fyCKa zn;G*F?qM-xQe%LKx1fj{!NpsV#hD+&#oOTGp`fsYi(7%N7lZq2D^#3~H4xc7;Px`a zUOSLE43Ie4%&f_v$lwR*4atDE&@vZ*3lC790ml(*5(6u%7ptGNgEVM)Pb+rWNC!?; zWkC@&@MN7ZYBZV~gS#HsV>3?371Y-dw#E^u`Kgks|K=hh7V6K<;CP*f7O$a9o5B4E zkT|Fx0V!ia@r0}%Ib1e_!v&%q94>J4LH!7jI2&s;QaFZy`w^gUWMd6R5{JxS&JAPQ^>6XNFN{2lu?&phH6gX&eub)ok^mAn!)zy{R*_9cYjm5>mW3KtjA{<;;%JLH! zl@~_XIk4nrB`_xbo8LQiYA<63V^DinS379jGKztLX##kzL&iapjR|R-4;tt~&_EZ4 zo6M*cq_-x*-I}GiIqBa?MghiE+ZQg}{x23>MuE)(hsg#=m^eW45JVhQ213L`P{cuD z0ulFziT@7;xr<4S0VEE}i_BQf4}_@)`2!s05cPJ9IY{b3X$>UK#u@=q4_YqBz`&FU zPHUpCO5b9W-+a9(Q6$gm4&OBTs4! zOiXUz6#!kYJR6wkAwX?3j#=#Es33nT^?%mDJ45l_5PsGtlBIP!9yUwCSo(prl2NbCDu5 zzn_;okClNk8ymA+kcNV-l!z>wFsHMnM=%c$6O$=VYO+aLhErP9KPNXMWmQ{GS7|wM z8|5N1>nINoUNJ5!M{qoW!xOo{U;`wm#OcZfes5l#|8?w8Y{=&sw zk;Ds-?9GCk19C4+y&5Y>J*Im*q2{r(=D_uRVe)0Jhl}STiAyts>N-$3va{wPi!)t@ zs%K+$fV&H1zW`JmYV-g9ko1leA5L)fpnL#xFFUIliunhj=CHAPgVclbjUhPSXfxO| zGB^lJax<~8voSKVX)v-fYJyf|KvyAXF|e?+v9qu>FtD>j25x z(8e%y3|9}XgPGaQ7p#qei3y)BP>v$S9tRSw0A(*}T^&XSb5k9AU3+y^(0VKhF#$dX zZANV_F2urAHAub!SM^Bw4QYK0vyquOdX{6{2wJzQs|e0$&ZzkhG1>V9BL_lPv@#hg zsoHuXmn`9wxSbgOYPGIBGr zvN5t|@^UaSF)=5ChGuPqMv+gWM(8Zk@o z%5mkIsY=URsk%8hxG_G|^VAk%RxpvX{}*MY8^X-2Y{bjYDyIl)doh6G7+hXlft24y zpaPeP!Sw$ZCIzM^3?d8~3_G?7F*C8S!s<;~1_lOKP|gPDaUbwne3^XrOWagjf6%MKe&CL|-q=gmOggIT9 zp8Q(|%7&V8k)GOVQI=629(te7dVcuL*f{;edPat zuzSUrL3JTS+zliS_J<+ZA65+E4k2Qq;5m2`MiypcO=)H}77a#LHWnWS7G^ePP_fU* z2wBzd1L_li7wCC`nn~al$$qSUj10QkYAOnHk`h7!9Bd3$j8>qi>45|7!tI01fP1kq zi>Y7DO$9q?5qUOYPFE|hFmTqXLgW@ktG_aqu#AFeJ~A*cGidz(!gPb_34Hs8@CrzA&@vKb zPx6tfz0xXg9d~_Yaxxx57c{gC&;1UP42%pc%#18qU{%O+kq&$+%6dA=W-4YfYU*rU zlG=>0-8V{zi70b5HFb8-z7BO`F)?v-P)ij$$`4;0!z7%f<=|8oZ5?6gRN`&qFTl#F zua+U7AZ4#w%cm%i@!Tbjmy?;v&DuF0M7uK`wlkTPkvS*KG|oP(E67-bNk3W7QO{ON zPnb(e(CM$czmJ)aB!{iFuOEblv@Jm6fFewwokkj32vOyE5`tPD)dtW24p0u3Ah z&Qd;OB1l{f+<%3LyCaFKg6mj_ zxEqqV2)KTMh`S<*PXqTiLE`MJS&T{G{;}u(P$q`GYdO&CaA{=o}~2w?Qa059xqS}6+RJTV$8^3VQy?^VyCC0ASWR%$j`;b zV8m#I)Vos$tqq2@!9+#SlM?c>RitEPuV!PR&nPO1C3T6J$Qhani}6WiCGe~}N`TvE9ACaF>_f2Fn zfO=UB%*>F6Izu9s`~==N0nJb1pdB7|Oy*`LrY7L2YxuSa$bgbLAG4^4*k?peGWXFj z*U1k`%JOXR0r@hn1eBdToWVJXgO5?gLEXeo$=xR}KXyWpBg{+kdLXwm{{Qe_hpCb2 z34;`at%DUi8!Iztv>LVn+0_@c(U2(~wC>N%7c|5M-a87NP~!*h9hG8~0u=+|N@}1s zqPRI|-;}wTnK5K%q%t!b+YwQ9V+~u=SwcxWxOWI~I9aXbz94mx`(iA+&J}S}ZD)fe zEKJ_c*~U)JbDjTQ(E<$`Gcm~j*I`m-5@3*HFk-mwz$3xM#0u)+FfzfWc$FB~*kHX^ z(9$n(@`KL)L0t+R@K9r5VF3>vf?LNv-~mJIszLoBV$5|Q(nwIvC<)piqopBlq+ld1 zB`(U(%gzegA_EyWgigd> z2KATx!h~Dx73^gARM-VLU9CLBc{rJv&9AtdNXmMK*4TNZ#TgZ*+NVYR{Zo|0C?_Q^ zV6By8W*y;S#w)^Y>-7IWG`vCMg`- z05#KKT}aUSU(gr;xa-Kr#LjG8<7dSp8))a~&1T|f%*>>vqhu<^Dk;Hg0O~E;dHA_2 zDE~XbXecDhp=T;5#inE+_YZuH8^S%RpxqtZjG#6zGb1AlX#YJ!2DpZ2U}pz+qI`Tg zIhfekT)>;OR2fu3E(5i1xVYpXy96P-I@oc$GR=|8k;ji`I@fd+9Ij0SHD0dcbnyTG z|G)k>1ce`y8pAK>-VY0Ky#x+d=FJdsMs`-$|0@`_F>q{TWZbX~yri3fi6IEw{&~Y7 z$e_aD=wQdg%*4Q`ATP@dS}(!M$iM(Duf0KI@ZgDbH($_1x)+llXoatgw3MWfim(b~ zjW0WR7b|#|IJmD2+Gxzi#tbU5%s@F`kr}iWijRpgL_vy~kwrmHL5hiqMIlL5gN4y$ z7dInUxcE{1Xnk8qNiZcQ^|w}Cj!Tr2F~Rwt9p@^Y5N$(YaQOsvI}3vl zXzc+XFE^xog3fce`GU5bfOi&iadNOT2r&w=aKVQQL38>r_XuFPfCr0(|Nlem1J|3N z8yMMGVdLqLFa+ffh&X6`98@QO#lh_hh&XIK8!QfPUqHk`eCN@e4Kw$vv>~WUx5gd{8|O8OMi+gX(dJ`LOZip#PxpWKbF~Wr%PH z1*ZWGbya3&79$BJHfCc+CN>ryP`L?93@j|*wH2S6oy0{? zIDd92Yp9t^uxd#nC7(q)<_bKJsa!;ugX(Qam_Wu?Ss3j9>oEB+fx<+YL7l+_)V`4u zMhWceekM*ODGwLQ4EFqPddym>=1M*f39B! zyAFD=fU^}McXcwc{QYwUvdo{U@9#uVCCkKM^Z#S?$FikRrT8>|2|5B^TnbO6os zTK(5yyv4-A09lI!YpGqN{Hp4H7T zu+!$zkY^WSXL57?8_TgyCr(FK09?+4?PEU3q{b-Bz`)4P>dc^kT95z#&j3pr+~z{p??^`{hro`bfS zsIUM(2RkzdxDx=)R7idW9T&qO#V7^JR8YT~gLZx?n=69$enIMfu$R^5@XWOZdE0e1 z_gn)MuOHEOHDI)H{x?hC)!;ik2taw82Xw{~lK_JuL;p5z7A6MxjE5*_{XAnLGZPad zqnj@q3uK=jG*?M7fCND*VDq0y3P3G-9J)aRI*g!R4J#|UMo`k{RuxkfQ&oYiW`wL$ z2iI%tuy!6BtT_srk^-fAWnu976-uCaCiW1IFb`f9A!BVFHD+cJ8(nQ(7G@g{D`plQ zQF&fIAr=b{D>hM4Q6(NeAr>Z_lq$P!gc(~YDK`RCYIl08Oh0TrG znT3tvAqP)Iu%Kf$(T)z%4TT1u4>L2kXQK`4+2}Lr?AY=53N#pbvrUO#X zpvJJ+fk%pwiII&Jw0;ZL3m0c#WQ6p>-9YnCF211tgdaTZNi%@g7%(z|*Y$y?sF0O_ zf*hv_pkp&YzjJr|#j?iFNQ2rMSYC|XFXA4Z6{JCe8* zIK4o`-H^m3!0jD~xGR!)H)xy`Yz}CgG#qMgC=)`x8Y@UWs5b*znhVO~5O;MlsX_JS zFv9eGVafoFlS0LFk;IKa`}nF&k2%Jbre%T ztC$s3rDUXVrCFZ*R7pjd03&QE7aC7t;CRx9)B*5#3S|moDrQn+1c{@@E3$gzcnt%m zTZnpayu!?9x&k$ajnxls{ud@2W-e$tU}JSb5|>~CwaY;1iH+48E^Y|Q_i**TAaMp} z29E#tm;#v87$h0g7>pTQ931(0n3x!h3{_S5nb??_Bti3g%s#w~3|^pFRq*T*sH}iC z-@O?9G}NV~)QvTarPQR=v^ChcB(%jrlSa^@LL9V75^^M!lA5|OXnqBJijFv=8fd%_ zGNGi-C}yl3%**Fd?W5-|=>cQ9NnL=H9!$)PVv02|_PNIAnJ%JuJ&5;(7e{R)mN&}JRfGDZSimq5bI3mP^e|GzNB zF$pl}FgP%HgL>N{jGXM68qCbBEKEKOoD3|ioGh6<988FnY}{;2tgH-)j9ieZW+z8I zT}B3XH%D(LZwoVB2R#Qh6?r*HaY4}54jo1vUdZ5&x-xji5wx+C34FL5yvc^TP)HSJ zEef>EMXVZ{Zs5eq%IjgOXD%US>}#Z|FUiCr<)x3ZPKaO6?%!QCOFltnCN+5|&6o^Z zF~nnTZeV8|VPRLDVk567VPJ~7K1k70#o8-0T}YA3R1ZcoE`u)?0`F}U{%^sgz$Acu z9S}Hd7#SEqtymTorX*0W&lj|E!Gjsr_5sC!8)zy9+Is}e?qMhd6+^P1#?z# z23`k*-yl$(jC~!DI8p@+SqH={j1u;cbwI)uerO9D47WfRGnm2F0lA)FI)k*b;om(* zMvRp}pmS;<;RabhW$$1ET|fotD?_)nLndUvtzs`&s9{~kBrc4;j0wB*=by1G4@LZ9NOf1CXi$6rJEg1nvW9uL!gZ1wFbj6vE;iR-Iun4ZNNO zzd=~y9lD-{RTz>J;dB4S%%D;VeO7}p)(mw$3%_5*c8v8bCm5X&D_WxdnlLhAu4rLo z$YEe$@?~OS5N3$*-XInbv6T(H|3Vr>voQKZf(0FfSiooKfKDWEgYHb0c8~%0?xA8V zEKKoGCV0PeMbK_BNDCgc)*Ia2V`T92p2&S)oK-r^%a1og*G8O6lY{Y~ zbC;cupQJRmEqLx4>^5+D37X?#V|8|gtPg{TvofhMLd4ym;>rKnL4JXXgWBr1z+)c< z|GzMag3D1u2R$iCw0*KZkR5QK%^~2CaXA@rQ4Tf+9Y!7KIydN~6L?XV9uur$LE0xP z$1Ezs#>U9wov&mi7ii_;udU#%>aJ^(V(XG1YtHNH=V4rv>pR*xg|NgEq>ru{wi}LHz%p0U{3a zKSbOOB+kIdVDR4%>`zxvU7?{aB*?0#hdI2gjiuLBW#@<%8psia6-Z86AfQ62MaTB z`vwwbuAndji?f5mj7g0VBo5kl2pTtIWKaV4Q$8>lfX;2{uD>VTgwtE6rYS|SK;c_=HJgVx}} zyD|B`Sz^VB-r+i4x{UUY))_APsys5P)#$_c1c~|Np`y!~{Bn+1$YdG$9Td9|RrR4LV+p zDIV0k1I?s?7a4+GA;8ba4VtBrW|RhvmqQ28K=b9Gx)5?S9H@QA$MjxVor%$ADtD%o z6pOf*{8jF&4k8cL3-#=Ec+^zbB{&#koJFPDw>kf7;+bX?pr{6lVg`hplo>o7+~nnC zWx#IYU}WNCWMp7s1Ra0s?8^?`FAM6EfTl8_u9F5Wi4qeP5fW(^h_fqfPa@p?|35e^4Viv0 zsWEzk$39~iSs6qibC@FFVM?&y48h@T%n;<@ud1S~#Lvpk#K*#fv3DM}5tun1v_#7d zQW%1k9)hO@^mP>#Kp`V3E(R(TjTwzWAnP){lWjgFv&BqFvv1=Yy}-S4_iDa z44R?>kHIh`v4RFj5gk%-h!p4u5b(}+h9s0lfmn4q;L-%D>_M{vvJA4~YN9HjDSE`J zRnV?OaCZb$3fM7$xQx{zEHXiM4nB|>dTnhbQ!zFP304EYuqsX)XMvH&vg+LSZ z@{;U|hO&&ZfB*dd&j9u(xUL9*^aC{@;Q|&1t@C1ph`S?;gU2r*;%>;|;Bpco?usIQ znMn<5jsvndcw7Udo}D$HF$CP#0okj;+zwUG&RT#ZF3;Qn7cWE+w}guq!No&C@dp>T zVq}GzFOTG3CuH})-4B}Q1)VF$2o9fireX#ahMij#LC3vA$ARS-SQr^u3K&2KfI#9M zbP7)r8|vCoMFti|mR4j%;1fxim>7~kbHI?a18E(iD+H;5o8~~+AW(u4Wn@s0my>~v z)v>cNs4%KP*9@7OfD#F6nt^ST2CvS&kC}4fL1PT^suI3_prplvH4TAxOB+<#dV=5u+*yLh z6hLW-jnxH7Tpm2801@{Fi8FxW)DV<57z{zHGQ}BLn8iexm{_RDD9;ieBZHM#&A9QNSV5lalt)dP(=#-HeX;Tz*^4%O9pkNM0pfkybnVRrJ=h#6f z2wN};h_J{6+Bx{5XI#)!GGYr9HiNVStc$9DbU;-7b6pcC^Hji;TJdbOexTT9^iuAi_uR?QW&(IT3lP$m{}Y=38`)l zIzR_H0ej0}1@veKd=d^{ZN z491Mc$Thn$Gn=Rgs3jBITzSwaC;*-^viOMo1gvA8`85grt81NW6f>!RZ+y?usG~DjOl<4#?t2=728D z1_IA2TQj%;Oj4X^kwv3F7-V7`(kck;+&jb;4E>0#!8fx;g zyxa_4j9!qS14WuSv_Jp{m6|$a;WW7EDJCiku7N=dkJzE@OmIpUgPy{q3|eum&c>FN z%*f)Ul2Y^*HE%*M{b&N5HlNzFxGO_76LB-k1ztz@Ds$jrgcKSj~V+*w>hiJe^} zn5UdmUYbo%mRnWDIx0znPtSmliG?vy-%v)`#7~orF+RAQQ$dPNP>xGY8KOX+pFKlQ zTVKvJP@6F>1QaIH|8>B5SrfFbl8cdr88msx#N-2Qlt8nv3#54hS`rFwo~WtH$%sML z2x>BFLIMQZLqV(&L{3a*=8$TZjqL(-X<#TXXrqFigD*3)k)I(mlMbxL)dj5)1g{A6 z3IXR=J~}nnVHx?H*&CndT^YKY>ez|nOK7b+G^9*Vq`Ee(z4dJMhza& z+F@}}_XFJj0OcZZ*@iuM)G?Oa5Eo#PlA=tEtfJCVB8*I|qQnGWyf7~-KZ~H4FfS_~ ztAP0b|Bx_13QH$Y*ucc$VF{|+Bf)I}NSIw`QUjk)!p7hDg8WS@^0|OHiOCqQ(=;O-> zEyJKgM)GhatgPUcBy`daNg1d~K)@uBy9k;DIxL9^vzaoJfTqv z$~-LgKL2)Db9abnNLq+1n*RR}343rHf-Y=fV|A8?jQ^Mf7!(-v8O}Ly3konXGRZQsvcV=)6&M&9*jO3a;K%K&KqrmB=OHM= zXI51()iJQJ$Uzl@8gUS{pco@;rUOyNftqrXN{WmO8fuFAO8PReZMq7K3Y_fV)5k#Z zU<|oz2I;(i&>S}?d#Z!>Qkp}SONfey-S!MEZ7ODCwlFnul`@h__XSOj8hTfH!##x(NVJtv*(rJ`?n`r$J$v|PufpQlb44>9=w+p z9Jb&%s)m$Va*#N(1+Q`W&!h&rJA#3Y)g4J(2;9~OsRx~f;04Zqw*Nz!_`rP(khmIH zJ!psjKhSc7|NlX8$b_sfoe`$*3zHD&ECjGU?5r6`;u6gHQ2W_gGm*r3!D$C%4;!l+ z!d;C2z~ur&+!Z0tREOl=EVwzLNb1#CLF&=m%lMBOH0KI34|Em+!oAVpIai2yF5J8? zOse2HSBQ8XLY(m*c+M3h&c^BhcNfTh(3~qs9BMNpoEZNh#fKAIJtz-==3F7_%}~q- z&9#BV*;u_n>cM%&5S(XB7@Qg69b)8UnV6V48QIu5*q9jE3>jG&jTjkNSwVMgu(L6- zgYHTKms~1{gAkNKGa!)7C~6FTW~Ph`Hddz2X3hqBN($1FB0_vT3?_^wT=eFO2`dZEQ%`d4j?Y9tV4%X^)My93jrc0d9Lk)O&%%!Sk0oOo>dM3}y@-3}Fn( z4haepOzg~>yi6=??2MeCEk8^Q%D-KL3@of{ESU`K?BKa26;K#+#xrno%K0*Y z_bW0oFsL#3S(r02gar9{JKCFjSa=xeYpBV~$x4ffFqko#@xY4>bMS>nW>5-Tn!|RH zK&G9QmDC|Y4mmCqGLHbd)e5}cN>oIQSwzeja(j}pG8@~gvK%u*CIJy^14d;H>vTs2 zBT*(+Wu;i2B6eXB>og}h2|-OcO{J3PppHOW7Y=4-V^c6?GS|c=&@)uWa=X0B6+25U z3m$Gxc?m6DE;bQoJ=64M8IS;5D3DOdlBR8E$S@LQWs15WIc~s*ZsHriGIcoGhTnl0vkBqLv8r z9Y{4A6orBe3=H-R_G+@KI%>*-f?Vvdoi^Y;Ah_?RtOU9!4tAz1XbCdX04`+e26myC z5*s_SwYL|y7o$*pTyQ8e6PLb&kDQXYi-AdmsbQdug^-n!skwxlxT2-9Nu(JQGn2lF zvj=Y^;{g}8?CLmwepvx)JtJ8u9u9F^eJgKO6>V*KX)|qURW1%583RotH+4pCei<$k zlTh!!A3%LShyNB#7EDhVlo{+Cta-tEix}A08Q9qv8bEi)F*7oyGqAIR58{*u%|6P3 zG7z}RQe^QHQdd+L6jTx50C`$j*pA5vw!Nl37pX*oXyHD;I? z)-c90K4Ln?AkUz~km|rKE(SV96?}CSpQ&m+{RuN$5l+|WLRIQ+z6|~I})Fgx)>LMz_&JN;%au;ai zgmJe6CkL;wnyKkBFIFa1B?V(XH6afZYZqoOFHJpGCMF9t2Uf;pOK}YY^-^heURG%- zIWc8P9TQyv5qA-BE?#C;WjWA#fbER2jDMMqp|8`kMp~z5!{CRpPLC6GYaeL86R1W4 z&3i#sKfxRgT{Gff>!TlPY3rjOVx()#&c&pm4x$(tH5g+9>>QFUz=WBprVS?-n}QaM z2G!e;J6f4`F|mQ~Xk}usWME)Yf}W*q=%5D*T=4ym&}FW&poP55@t`#xa-f^*BtVNF zc^J4A1qIpJLATa{u7-oukjmQ=SqLT%9*zhJ_3GOy_A#yF4z$ z1Qa)WSQ)8^3K>G@X+h@!>VVw@+8@Bk06Oz71blaiJb02Ee3O~1FKBvPjtR71kClN{ zP>_XP0&;5^b5to~E6=~PnM}Jp{`UR<577@gOO9~?xGoDy1EoEPxw*^%4D6u0SQr=? z7+XPO)u7QmS@4PRU>`EDGq4K^3bI0c2f9TGWWI%@uPWGvY4<<}-7+#n{m)_oxsele zZwUkF%yZ^s(2>ay(?I=QITnypIT<)XoA=n*rJ#;AW>+?cIyg35)mIYa=xg_;f%35n z0|QeU_^udT2Q6ks26i?k7FGtxg;ij1!IsMqn5`bJJ9L3kZ{oc@5Q9bw2MKFA=`mRl97=WvBnm3 zfVmv>Lf1?N(4~b8%*?W&rM7b5Zn7dM3(B#9Zlr9(u8awEk~t#->>OMHKG0fOc1TNC z9kksDJaY@~NP|{!gVPV9m}O&QtdZ4GP&5hP)nR6lH&N7aRWuHQ#IF{Myo*Lg2n(wU zyUsRcWfh|kmLEbILWcT$eBA#oGVSvC$;}fRCTb*c8a!vp^#8{HEbtwXd<>!t#tsG? ztW3-d%)y}cBP29I$2Ky6w;+P!N=Q%ubR#35prD|LASb)DHoLhoXz7R|Gbqj!*+F+2 zv9qyhsM?tMNGdVfX9lbKO8%>mEPN6>S6tF<+C9gUv(NtRyEkpxJtnQr`6n4ba{-_; z$pgS?TMfYnrA_d?fNZRRpu6y(XPRT&FUY|7|338oASDJf2V+qdCN@S!A7(~I4n|O? zJ%fdbiGe}Zmy45~nUxiiGL#rV=lx57QimirySz4N4jt6WRc8ht)CnS)!MC-F3oA2& zk6~t3Y!FnJU=$W+k@r?{HSsrbZ3`%s)@BqHXVnZaa5W7ubDhd4q^82c%BiHt$O*c# z42(b7bFi{2sr-8jx;+epL1|d_{}(1zrelz`h)Rk~%q%*LOw6Ezk(ii$7(gd+GBbfL zoCa@oRYD9$Dub?TRa23d6%_^_90VHLhBVgU3yttxUWX&2%$;;*)edwX7Z7Dj)~1JK2h|@vv%{y4hNC zvvRZR7^R|fWn^92eg1q7PJM3i3w6R zfo|>e(5bC=D_x-5f=uP=PV4G$`|gn4pS^nuxNEnuoYu(!|Vzf8Cf0>vN{3+KDKOg7TddIn2s^Af$t_^1mCIQ3qH48(LoNWT3}{kWRwF>ccIh^%*w)w z%vz<4>q>(%|9#73+V$5Bbb>h~96)&MJ27XZ?NZK+tHfJ^#7B@B*HfH2wQcmYd zG3@aVkY{pT7WQw0kcxq_M>Lc8ztdgqj23@qD5~&+!X%x6fvJ`ml(u$)c6Np&7Dfhk zh9Cw81$i-124MzaQ9(gbaIq;4=~|nC21g-%X?AvXVLm2yc5oBgjtO!-wE7kP~*w{c$%HETW**L@q z!UBae?A%`_HU?1oV`NBSU|<5>O(G4t?H;@&1vF;Ez{13k1)5ru^+iS8LO zw5JGPLkODJ{oT-wIi=uTdPAI#tXS_Lp)eH{n^-b<@qF}TUeFD@q7~ z7HES*NS1*Kv|5{qAr(_CD2${T89-Zy!98+tK=E*~voR<#Dsn@bB)9?!v;-FvSo`_Z z?2N&or6b2DC0@j;{7=5rKeHecg1tc@#w{ZS4l*_lq#%O@8v`SQ*8eQ9|G@Vyv%xYH zBe+?`5D!{7DF;3^89D64%|W*Sg5ph?{h;KA(x6O6uFRm)jgr%*L4(h28mONEYQJ+q z@88jO(14y9mB9dN7JzP<2cM+^E?>o9S78gXfm_bTpo`E&Mc6>?c39U{*|Ic9zau)V zuCS%2Qiz3#$;_~eY1h9O(SDT;9$6B6vi!Q5pfa5qo))+m_!y)?Z4>DHKo&D2*lN%@ zZX7J^pc@L9{J6Op7^Ecy`MLSH`FMH2_i+nyqB;WPQ&pszU75SoU*9P>xF&;}8z&1BlZmzq$U%`_wN0Qx*VV!l>?$2lShzDVFqvTK%P=s&Y8+657I$9;bRjLG zF9Q#gy37SUpY(GP!>Hl7U!>cg7W<`#psEh{+7ayREb*M6?Tg@c1gN3LAjBXfsG=wc8ZnVU%#fR~z&E8ZFfuBEI!urgkihLrd0Eiq9KwQJ z9H1pZ&`t?tvACF+IJ+JbXehv#T^U^FgA$`S8ylm1Zn}`BN3M@!fEK$KyR?y3K&I#; zo=5D=&K_p&Do$EOJk6EJ_Yzmtd1$H&dxV?YDEfPY+l_kvzcA^5-D~Y&!NbkOz$h!j z!~(jln*nrl6$2~ix^D2k03~pD8+7ZnGN`xBpu(V{uCA&o$j&Ye>g7RNz(_M)pv?_x zYU<{o3vSKKAM-qBVS&1;*dOX_hd@mZFLr5T&4^@CMmrC2JrS_e0=$~4Ag=aQlaMo# zYpH{@UBGwAg4-s}pgI+L*DdIrdC>Y^HdfdjwV?Y>HNon@>tq=~c~6cBl=h7s4A>c2 zLFer-GqAESvu1+Yq0kI~)D8umxg(|wZ-;{KLt!_D4tszmTj8E%uF0Io!`R0&PnpHQ z+SiYbMJY&?m03$)-bmUCbP>vVVP6MfQ}I)`q?CA7)Va9-EoWe2;QkLfpA$6BWXfHsYj zfM|e>OA<8Mfp|kfBa+gJ3XBXoS_-C$rlP{oC9>eNW0B^JK%F;ZW@FIVU65b{HnH?rBB^vCnoLgI!C@CfCAsZgHO4d%&R8=-Ce3guyl!+Px69XFq z1Cuw?E(USPC?p#rGb^JHsPV|mz{;EsTIvnybAvV+C9<Gbnr3H^m$SmWK`cN zX(IEnN4w7sG`V8rxl%!ng_X@S)IP=PuN$MzLk(rdl7Hq#!a_m@dZ2!)`+qMcPuJELf zlp+4T)UyT!H-iTQ1Ct`Se3t{2??~rPu`+P5vvPpu{$)Yut+K^~4%U+cojfHcBPz@w z#2^SN-C^ZBXiYYF**NS9J#}Lvcr6(amBgFKAH=_lcc%z?3qsN}BEqvAtr5Wl9@}UJ zrx{rW3kOp!7A7V(Mjr+?7SOhD@R&7p`XokEDY>yEbN(_j7$t{ ztW0c~;K>XIP_+X(vj;N$tIXi1rV2i>M_*f0)m+V7K~72naljR{6$-6`K-c>T8$pIp zmDt!J&37>|W+O9m(84`+(5M-72pIKRTPJl5PD`htL{ULi5h*oEVWpCYI1wccNi`{9 zMGO!lHhmD z$SKHsFfcIwzxqFmsT@51=;&Z4&&R~b1}ZApm>C(l*cdYyxOf=3xww_wNv%5wFwtKxu=KLH2(Zc&y6|)DBTrVq#*} zWn^Sx1zn!Z$jHjT0_tr-HbQ{vc?Q;G24-gPoQ4v(ayMfzQ`Jz^PzP1+pguFn16}Ow zTg7c7q=*{pvdwfBpVr6epl4`g>})H_#?6X*yvrrSj;)7*kwN2s7P$W`32NU9fljLf zrFlpd%ErOS&c>b$sYO9GJS2)F86?4RBP__tF00LI4jD}Xb!9-EK+uK;F)`3E6XR-0 zCGdDs5ZXXfr0TS3;2|YwlMp`81PyZ;=oq;IgO`K55F}l)FflW+FgI{Baxt(oaIrVA zGBR^AGH@|7WPlEq1D9-!i5!g35`;kkv^X3*1O^%;2T+AByw{xad60SfX4bU-D?cm zD*|#WyE5qdC1ympf+i-_m6`owQ@B%jgLq50OJuMQ<7qhr1UM{VG{GFnV`KoiwT5XI zgA}N?;9+EAVg#jRHWntfbWnRX9x`~sz{0|s!~yD=Lwf#F3{sGRMR3%Eoe0W_n2rPY zr%d8EM=ljo5MdM%<1zsSqc*oqyeX(xbq3@pd2wb|7CFtc9%?#o{vBdqWKjQ~#RM8d z;b$;#(1o|paHK-e7%V7m1;I{XH3#)YU}?~popHTnjOk}^e10|w$_$5QdPsu%+XqT$ zkg<+l*jx;#C&a?Yn!y0N`f6_}d36WFYB+=f4-Y&#D4yhe$HwY=zfLkGpF*T4PTJf*TK|88o6&ryTLA2(=?J!n>% zktrE`qaApp0=&}z+$Cl}9t1HKhRnTy;!nMlae5|b!Yn59GibcE@7^@f5DTdPs{8*6 zQy|kZ21^DX26qP+2SyflGe$NRRz^n9l3!K^b{1ClOb$ji1_m~URM4OZ=mKwWR|`C2 ztPC37_4Z`2WU$b%P_a}|QL&ti<_1_SUoC+J=n@G=f|F)?G%NVTYl zIB3=g)&gge;!)RjR^U|^aZI=26jQejw%`$G6K3J#Fb@!tU||ZeXX9d*lol}vad2?e z@;4Ju6PYB+#H6cl%PY#nBrmIJBIPD7!oqHv>ZzDmkQ-&j$mqt%n4UL5LQBxWpOH~E zT-&v;+|%DTWmT;_I~!wZEw40xsIg3pe=VOBzmXbfjQ9V42EYG?Om5)uZqUL|&^?z~ zp!*^jxEWL&6ru3}8i|4?GSFZoGvtCz0XB9SZANAABp7HXvLaLMEAY%^4ET;prlP;s zKv4m@x)VD0Isx1-1l=13nR5l*lP1WZ@1Vm5-W!dW+01~pCSY?{f()QsD+-yLFbCaj z1-+CFv?M{419}Pl-;#!3=E9_U;WPlkEM%( z>=WYUWMN?e6<;i%jy7vDXbM@@7c^%BsjfsBM1??i!GWq^R&!+X-Ed0UPm!k7p{v z$1}03hmL8=g3d{W*>R@pBtj8klrj`mDW|uWlQt^_vhL+VRL+$$d z0zABov5;b$0Ws#Uz)XrB-R0~0@Z53sg_1~VfwWUh~yiIEw!Z$=h!qA_@^mqD6AT3t*9JeLNpk-%LE z$U-K_cpPXUJ3F&B$a0hk4HIQ;S4C^4UH{&4^TeP|X#88uz{J1=K6mmMgBpVogRg^^ zkRW)s5(lVJ2U;q!k$%6(>z-ON+Gy7?%GcxFCs~c$;DJd$*%Sefd z@bj{>fz}6r5-uZn+>l)n(!qg_z9}n#0+gLi4K$f#Y{x7PI)O$J;swU8$Z%H9e=}KG z*bFVK{1hCN%YwJEFdM51vxvA0YjSHi##?%Z3o7F6PO2?h6=nf_;i?|9c_FlF#_@CN%+f{~et$p_(A z=&}!VFSGiAc97`nX_;!9f_4te%Yu#!V`l?h9gfqZpb;<7x*u~Q{VJdABJLyJPqcU4 z;<$TzC9dN3^8f#ku|9Cw4IcXg_s?6w^M#Q6HNo?R|Nn#65ZQsm!E1=vSdqn5nL%TP zpwqY5Sp6Y&&;OSU3{1sfb0xuJilF(?0I+^F$UG!;4Ft5W&BVq4-bV(tzm`dj5n?~o zJO=O@1CTw8tHJvHLDTaLj11!czkt_!D1r7sNx_yKF!?YrF*7nVF*bm@U!a?tWg*KB zKs)xq!@?5cV#44feUuoL*iaW8Kx%Pib5(P8WphP-CL_p%=8wQKDM!g5W0xoaW@ZPE zByL7NM(_W;j5CCuFzSbyJC^Wx*lC#?IQjDmb7|SSondA5Oj*sU=40hw<_H;Q1X^eyMoTsp(4d2VK#CyCzvEa2879eU%DDU2{j;gdmec|dEP&%5G7k;%J7gX@5|U0B zAmSjuL&Rb64H4hMq{avl4~D7-&+mf5gmEt<9oRy`mK!ur2^K#L5eE&!Gcf%>|38aK z4LpA-2)Y@VAKV&Y2d@eWVPIsG^@S`5N&sza0WIF*<$$KtYk`>6mDvqd z-58mR4BbHMfHEXYzYFtn_)WVHYX9D!Htjy6`|;zT{t^Rda;lDL7lSb9#6B)Y7D%}b zy4wZ1Mgyt&E6gAa9^C-7NWdjGq&o^9+R`ZrGOm6ae^F9RSX5r1I;N`;+N=2YMp2fT zl|@+%vK|N27W&S>z$5^^s})*)u0(R zMghjKf2;m|U|?oY`G18ei0KJ~FoP_E8iSRCIgu*_pJy*4^F-d>pLIH9Apj zRmr(4z$*l*lX6xhF-I+6yueZzW*{f!<;%vJA8sHgHIWC@*J5Jeg^p1RG01_&8(A2c zSQvfS8Ce*Z7+IJ=r&U0Q8`+?XK175W7{o<|&=$WGOsQDW-Z=j{2V5DdyB_Y7a%grFqC=bow;Pc7ABkQ2M=0NuoBF-s; zEHj061R*srqo94bu85ksl5)J$bl&OOj#5(EBCN{(R(=WY<*qJayj;xArau1M?941q zJQfL7=B;goO3G?XY(8v^QnE6MUZy5#8PHSrL?vu(yxp{fb@?2@Yl4`;eq&=2U=U|e zWiSJ+Tb2-Dg0$2jgE_D%JQeUsSqzEL!dhL8kwITq%}m`)S&^F)baWtm77w&F6*6rK zTL{Js@+|mX6J;efc5(1kou(!rHrR)Za*6pYtlaK}p574-rbfo*iQC;X!r2&gbo`>Y zD~;UP85!e*%?-5}8F_ND1U2NHvmIQ`^z8XqIIVOI0}U9}Ie2uHSUFi_loLEY8ELX| zvw5>{u(R-S^fNFrxc&daB)}xVpvqwApr@=Pz|R6{t}%k=`M{eQAg6VLYaj(V5g}e~ z231B?R!IE=YW09yIUv`+bu|o)O~BuR2KJ8{`c66iKXYlKXAX_?SBb495g_2EWppi!l=dw+BwR= z!obSH3R*IY93Y?xa&Ulv+D*_v(O}d-ier3%0xFu>*ccfSBe4dIj;maVx`&LqJMOR% z6L`5$m=DyCGh|?3(gUCOt?Qu0!pO+V$iN0#sm06;-Gjo;$i@bqDPcez{{f#|176k2 zuFRgNn#7f)&X~ph@3G8cuEnbNZC|)7vAxg0$l&r{hlz!Wg+UE8b__bD5jOvXzN!}7 zf`%-;K0hr%)`jVz|55aIu)8J zkqtEWDenuKK;}#Y9rVu0DaQ#K=Cxz61$Af+GFaV z%^0AuCU#@c;IA3z>S54s4d_j?kl|`j$)U`yY_815#LmX1EW_l#^=B-VQk6B zV{bC88&x&h0KB&&|fh=fSODY{|mtuja1i%Pl4;B%&wbBp&Rb>Mmm-=VTiu zswi~(wnw;>2%nQ!h=Zz|tbv@9U8t-f*X!5TJ_bS};QXTh{|gfblK_J*=nPU>875{H zHCO{2bKS2BqyY}k?TYf!pkp;ax4h{x>cY}AWP=SP!-ITo1_~ZEWhKM~Rj`7dk=-Lt z$x1H3+`*BZktscaJ67L?jmgwB*+*L^%Ofpz|m}dro&uw8~WN>9* zVA5t{VGswc$>qdYlPiz0CRdz6Tv!pbWE(V!0BT}_;un1m!ZplKC2L8<6a{TYK?!bK zD{fP1MLv%#btaaZH;-s>u`r8BPj;4-U-JU&X0RJTX_iS8Qnssr+CYr|e={&JNiu=% zw^4Uc0ZmwfrscuAf>74t3Ne6J!GqRADudIXxguzI7}RKBV^e13c2+bIkz(`>^Yh-u zD{d_(X{zk3(pfR*?;pm4LEY2kB*j2ws1gGMlNl2Wg8+k?gEB7<7c*#P47_4m-j@Y* zeK2IKLV!U)P#ChRRT#2HU0K*1)D~rDRtih=Vp^OT=4H*xb|RXM(~61Z-w#HPzke8` z-Tv)mbawlkKcj18V-36%! z-4*-)KLhlB0VXy^NWT|y&H^Z1<%8o0#8(EVE65oZQQ&hIm>D$x>o6HHJz+3oaAOE# z@OSXxU}R@fm1JV(P*zf8W?^Rb0d*^w7#Pz*Ll2Mx2vvN!Ihi;(n8E8>7?ExI~=U z+)NpKQZ2YAXlw+&rWl+xK^c;rjZsUQ!^tX`yGEH=R8L0Rm|I*~Qb<$OUWi$N&qYdC zMaei&NQqfgR~9a1CuE?(<0P&k!_CXWEG_NODXt>R#mmYhE$zUk!NYidfw7b06%|<* zU$x}aFi9Z+$9>^)YAS{yEN4_?U43AJ{|w%d-{V*m52H1LFdDQj5B5JtT14F!T%*>dl%PQ?{0jfKt z{G>tks-dd}tAt-TqbRh>oI95vT9Nkt{R3_nIx*QXu`oC?6gddl+E~l6u(1jM}D*$V(`)FtV_) z$oSjZdqR$H($G>chMv3T&F7^qAdWd9l?WbN(AM!a&0`9by&bI_Rv;mW)`;P0pHodnEr2>kRrE*xS)uE z7^C06Wh&zGGEmOnKhWDfz-eCezY|jw6AMESLxY2epRbRSG%Gusgdh_$J4%XE9X47?>DRu_y+mJ6T2sFHdJj8*5WzJzaHG z1vzNy3t|ic?Sp0oUD?Rat_&)Fj6mlnnL|^bsR<|)l$F$=6eul%hdoeEvl0~npSuGI zOjvrnENbBA0!@!R@)Gk|^_UqYWF%#om|293G&EE}L8hgl4ZRCRT?l>`im;H7A`kdp z6dxW}Rbg2!t$kcF(xCLI#>%e8(g{wVEWDyf7p33}^nVuY-b&)&#LC1F{NDn67LzQ4 zBEx~Lpi3+mVW;JRrq01FdWIy(0V|*ts%-HbjBIR*Y_K!5m7uCvSRm6w;4|{TM@k^8 z1SMWMs7lZwdDzTzAi^k6VwRMXV`Pw1lv7lYmz02xR?9NV!jm&BHG^ZojtRsCCt!AS zV|FYj=7F!akO@kb_K?PYT;AV5Rkogc=FJ1ONthVY{(oWo3qC_x1vDk)H;OgqM{|h*i41g*z7$lYybFF9)*;PmD8yfu45vY$n3a_f7Zzq@P?Q(fkkAko69%1C2Rb@V zh*1c%loVcAAwmrlxuBEk5djAZxqTjfEG$MIYAoV5>Xy!#Gr~N={+-se;9+7?Q#Q3= zXJppl32_!wmSogY%ZP!A!R-GRCUGVK24x0g zMkz=M&M(5r#K;6XzfF>njfEL>RT-%01`9Kz2!oP5SQuHg16Tw}A^avY1qK!dHdYq4 zECxnK$cb>U!;KIj4YElEu8x^m9@I5~4oQIKY8es{YC+Z$Hq(J9<3MpEsj9-rpsTH7 ztZFPLBQ6HI5Ce1!E-2Trf*N0-Wdw-1Tru!zQ|#d5=s=x7Hqe+ID3U-!M4%{QG>wWD z*3%NpW#tTDW7m=wR5nm!<@D#OWma}mcL}jhvo-eNVq{FV_hw@@;feN9bNA7cux2q) z(NyD+mu0bVpU*5S>+WQiWZ`IQ#md7HY@{wEq76>>O#d%J>tAICGln-?B^jC7VX0n+ zft7)snUx)sQ^6}`!TlT9qH5@RX^a)t*z|yd9s3Gv(kyY%#Ofw&=7Zuv8WazDIx1$W zW}wj(VIe_&$brP590G|6bI?9SaEBV&9fF+44xX}vM+B&t0iDh+Dk8=>+1Z1cSu2B2 zP)$c#OkY-z+f30!RPvh|i;#_ynT>w1iLx0F6O+7xtgbXGGm{!mfCIm*Fe5`qdXulX zFu$`(ciog{3hJJA?wMBBmY__eqoQamEhNsZ0qUeOG4Md+Lz+R4;m%e;@Zvm3c2Z$r zW8h$6r_=ib= zK@oJM9-sbSc?w@h!C*g*Hs!ug=F zwEy7o3fMih&^tq!*cf@heP+$=Vq{k${AjY7Dd!GlWUCYJ> zE0W-6+97YrkO!@Q2X9JO0d=;pmqM63NH9!B+2?`ZP*CERmJnxTP*M=rlF$Mb|Dc4= z#tJ$)9#ZsxS~Spv4_ap?D$2(MD)nIzK) zl~VxGENpT-^Tf5qUNN!UcFMGw$DOl0!O0`aPTEkwNDD+82pWPe&0%6t1g|j>V31@` zXK-_H7Gz{&lwo9L1MTNvM%~W=P2>y=Oz{02(ozfz3UX5F(&`M73=)FESod=niHS3V z#$6ygIzUU>p=G8bx4EyNtT3ailX1GAX@YvNpJG345+!w|r+PJ&h zz;5;iUm6D?wFDYSRWMYC<7qHSF zbjKGHb1SH}0I9~QFwy~5n(N5w;4RHD{ExG>t{%=4rs$`*h-aZJo>u!amqUkK*5hip zGyVV1z`*3p#KIuTAkARoV9CnJ&cMmc#Kgvgx!*+I7iqtVl!Uk#gDB`^0zok`@O~3> zGjnrw&{_~NadBmJ@K8Iuu(7$hB0FQ0q$Z;!H{(_AGDcN4aUZDwHFvdu^vSc*82_DT zJZ8?uvfIgNHw&Bju_sTSJYkeszy_LkV+P-m2f5P^G@}yY5GcsV!mI+>W5Ue9&c+Pd zLke!mg7%s)ftPitfbWH7NCeFzC^PseDu9j>($!X11sgFS=2ovo>fv7wGO zc=kn2P*5B+1H%el=xYXQg21L#Agw@9rY1Zo!+1baNdt9yMW2{i8Ks^H91iYC^DG1= zWzK=d-1YyLfahThKXsDSsR7%&*9sw;v938l4>_oRS)igFeh(k4{U z!7JdUh37=AV`M?oFm^6%@M#!EMpH|}Fcoc`Y`3r!JF}?t7}1_4RwE5PRSkVLRsk-1 zXAMPGE*1qfO*KOu6L)I^J3ba+f6o-oCh+)`?f+sXWhNE|3DDXmLGXSLM(`ou%nS^y z%nTXG3r@j(H%L@UFi3#rQv^jpGb*6?11;@^H6Yo+Sb;k_L_Bn}bp$tWgZQ#ekh1vbzSd3xxfcurb(Y zCL*>X8gnDM6?GVe#JDW1xJ{&01Z*{hi%UTsEHA%#K#z-sSyXDWv%KblQqVXDY!2%Q zgFHjcRzdJ~6^K8z7?>CtnF=6#2-z4x5x@Z6yTZW626i<^5^U>=w1XyifeG#7|@z_cSf6lVjR;)zx~13uqn*G%bc2^i|%IxgV;;%!=q1P!?wt7UMDj&DW{&S;eR`9(2BW^N5%vD+`OL z%milz^@T6M`&&ww_`&zgvA+e85SWeG8J9>zsl8S63-eQbtLo<+ zqTJK-0u<3V|2aU?Flb&X6SlSiV{eN*zP&B%#-NR=;Px9&n4juqRYo?Rot}Pbo553O zF8>_Bb7u^U3`YM;n54jckhxn~7@6T?WReWb3@pqn$)Fv<&;lPctS1L=l*_^tfX4k8 z*x10Gb`|hFzYs;BekdMO9Pk?eYIJj{2?~m;2nw*X%W5Otv<*575VV8@w2=_n@8M%& zZvYQw%KF$ida`MTD0@gm88b6!=qMP7u}Vs?!Y}Cka-oOO5PYqSoD`dqfgGqT=J~I~ zB*Y}ZV8?LKL4bvknVp}JffYQ3#{in?0UeVr&%n&U%D~JDIn@@l9YP*_&Khh64|*J` zGF%xrR6rM2GB7cL)&CIGTEDsuy7xJ=VX3-J_kIsW{DhJPaOjd{7R{mMjL0OH*!kvYY5p-#}FzC|q zeAor%;5*Bi7!?0sVX|ZrU@&5E1>H=g2O3pmWCS(!pnHKB*fFB=Pk5u*`wNKPHpLIN+N12vx5)s#Sf1@A{UHUhU1K%F$u*c`i< zu`y_w0&I6QXw^DsHi+@Drmvi`jzg-Iq-BCTmpF?MJ2$&+01rQNupcLzl!%nEkCC-U zxVws;7SAeuH!f}_CV3@QD{gKkCLIZ3Zi8qi^U_p1Mn(swQ1=L7A{2^zy-fZXTD^S^}2f=PhElwlp{-g_4K zP@W8QRTgL#h%u2FG|MIry4;+B0h0AVgQcJWQ0U4nQ0Etv6hXUcRFKty(jk7c90(c% zN`ZU^dSa@Af?}#Ff&yIZ^2nJLDFH%vCLyIZ&|Y9@4rXIx4}r~~>8LR?i`eLbX4?$S zl-(pOte9DJMB!6HqN1Wopacj`bQW4VkOcSd?u8y$`Vuw}|F?-TN<~~jT3is6*ccfK z|64GD+5_ASN)Ga@j7&@nkTc=r!N*l9f{&}@X5bbT0v%T=Zq95BZp<1pvhP&N^3~8} zDbDfz_e$x+2_}|P4<4NQ`{x8`{Rq@d@SZ6S(5+iO@D*qopuh$#sRB0qS1vl<48=LDeZf#Y(TDX3u^` zML9;uEh*)k=$EXpgRfXI_Q!R_O0wQ(aQ<=o51O+-$fU*uT13Of>MagwBSrm()Y)>7 zeNfDxjb_Z4`=DT58U|1{k`okB6IH?32L;;R0xBRt6KtSk$Dq}?E~}K6xpNR3cyWQA zmVvW6s|2J*2QM%%7gL=(msc9HP_GwKy)!Vv*EuMF)*nfUGlI4XfyO664QB9BGvLbt zK@|;bym6rMYmPnu0miFxuwK3`SP0tj$;BF6B3f%n>g#a0oh{&UMmV(>7XbtDFGQkV`F7d zXHHY&SDA7iVK*wqu4C6^!n&sjg~#ETV4WW;~un zZhBt2;_iJFjDp6-$|i=g=Gs}?qjSszwGG`8xOwvOIW)!63w%o)6zp`Rt&EhI+4-1M z>@~!VG?mf#&Xekc^GqVb42e^rmjy8i9gO-}OvY@aS7rTr$s7FJD-`Lrae8(^9 z6O7M$YEgEgm2eOCG;!so;P#@OH%AlWY=kGleWPXu2F8<2PZ-!4lpR2KfG{wDR?IRn zF~@_-49NCg!O%I7frIUM(IG- zV}aMlgTxs?>*Lv2qd?OC|1*HaLH9&J#bIN|4FA6{g@Eh5E8uhoTF0pa)(=_783h_H z|No!C<^LBZey}=leuvl(G7oCM1Jr)V8pq2_YD}O5!`WEDcld$#9qEAY%r;_p>A<5V z%ESV?U>tOT7^KUj&cMRV&dkEzz`)MH#K_JBx-fz@5p-l8bR8sU3`Y�M^D(4(?eo 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�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%0DePy{N6%jxF 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

%kl9Bqb#n85HCsR3%k~1VB|MCp&{U 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/plex-sans/license.txt b/assets/fonts/lilex/OFL.txt similarity index 96% rename from assets/fonts/plex-sans/license.txt rename to assets/fonts/lilex/OFL.txt index f72f76504c..156240bc90 100644 --- a/assets/fonts/plex-sans/license.txt +++ b/assets/fonts/lilex/OFL.txt @@ -1,8 +1,9 @@ -Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" +Copyright 2019 The Lilex Project Authors (https://github.com/mishamyrt/Lilex) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL +https://scripts.sil.org/OFL + ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 @@ -89,4 +90,4 @@ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/plex-mono/ZedPlexMono-Bold.ttf b/assets/fonts/plex-mono/ZedPlexMono-Bold.ttf deleted file mode 100644 index d5f4b5e2855fe9e581155d864835570d2e5a06bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163568 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 z 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�=$$ZQ1KQp+mG$S77@s_au9VjpcIqwG`8 zqhhEe$}Yml&0$aiVgCEdVZhU08@8n0SJgGy9z-*xNb0-jR6bDC{>KGlfya@deimW_ zo!S5YKcs91ok_~{9&}`qXbZ3DW~03yy9h9s^II!hKR9)cteJ{uV#&X5Tg zHv^UZLTX@fcE)T*MzA|T=1U>j>kL=_g-Hr@CM;Ba3S$UDJ?IVqus9n-0Z2W#ZqWgm z&tT2q3A(9Bn!$^~8=M0`+vgnNu?Ibi50Sy3!&l%D0dU=dTxx;^pb-vM0UFN&m3E*t z$tvKns~rr&`a2mM!7E6)7;G3E!IpxKUx%EL4@w87NSp4>)xp&Yq)ULS=HX)oA2kZv zq{PUKQUNixnYlQ6Gdh4O8&lksk-DA)yPycaG`E?s^%g{(bVXZB)k%aU+Q<}lW}0u!o8(Fkgm=GwUFUYl6-fg~SzO6q2|t^FFA0 zc4l38+?p{V(wZ75t%1)&2aohX?Xd-&s|+@eommgA?+cSH==^J_xIT*bOt?J;NaCxI z%rSzCn=v8Mv>IcG2ITx?WcyW+^qIi*ePNo3WWOnrxGU(KZK%7#kR^#nLieFWt- z#xNytUW1AY3aK$c#6wWTrG(U&K7iE+A&Y~~$%cxDgTxtF807xzFwJIGV*qV(5MhvD zm<;N;OG0=5fVw51jnW_*w3Hh}Bh~~%Q$HeqK$lb?1fZwBfm;>e`~e-X2RFtz7+9d| zr9rnufSQn?(>S@HVxWRl~pBpzXn+L0@BLK1OD9adyzUlafhclNbez zyrgB5f_c*>#qfo^EiUT6UR>1A#Pavg6>~LBk9bz5l)u-*BbaUW*=*3;XS3n|e+HKS zI!xA}a)dDe6h;iCnV@zRBLn~cFH9j!9~c}Mrh`t9aAa@-&7(qFztE`#MEe+{Cjo6# zfipkYw+^6ImII^(jc71~npcojuqF(g;FWDV7)w(=rRa`FZtTR zz$vhk!5Z8&0`EbBE$QS3t#3o!K@FO5GzK??WZ$3dy0| zI+C_hQsSa~{9=~c>TV|TN~->1l5&dTQhfa4W_tDk0_^O%iqZVUzkpU z&v^a}S~16LcacGWo!O27yiEW9e+JqAUzps%^17gSV77|^r)^060=nY`loz0R8GAkP zg~|9n^&LlZZ2Au8CvkTap!1V9UALH=cCU}E3`*HoYh zG#2nOV+QbyC}^)W?8q(UYhen(V)=18-rPSKHylv6G5z<=m4T6AFJm_2Go}NOGqa4bkN$bwyEU?^;E#|S&cjSaM9 z96VkEY7iN-E1s;-lw)F)5D-(~b`f;4wy~2?(-E~_#{KUXFLm3?3j(5oqT(D0L|dfKEsPg|;SxFnIrmfgvO6*;;DajOND3 zZDhzm9e6_ks6)iY=xk;yV8^Z`D<#Rq$S5Zv%`Go0#l*-cCL*pWs3U8qYvru3#;7bG z$e5}ouOcKW$j8db%r9s!$j8dY%)>7xY$PqGucn~O%EGKJt#8A?#ITDooAE9<4e^1_ z-{OLTMg`uED*q~W6UeMW| z%CMt7mF*do*%^ap@+`?x*5T6O3K0=y&0t*Rb?maOeN9~*IGsb{3A8OT9W*Zs83lsH z6LfR{;WFfS;snQ&JbXw%ULUmI2IM|A2H0+3Q3fFfPH@^67XYnefSth#EoaSPnH+TP z9B5(>JYote0vKK7brgizoY`cgq~(}F$0Z6%aJlO~=UF4k&a1AVVcskqMYk#hR9an5e-I9dj}akYx$a>BtbS- zK2cc_RZ|glb2$kK7A7HaFv*x|ZK>j9Wgw{Ur_014EWmA~C1ap0Vk;@m$-yir1f>`l z86GfZGyY}*ts$`o9nyw+?iRG&fQUC}0WAhP7!lN3U}RwVvJ*5T3px`Qv{OcromrW2 zS`xRX7$Ymsv;?LK=T^^uzZjSq4l|}Qz5t&wsmovwxjWGT_6%K|9AGEYPisJ3)t3gIoz7K7x#CKr0G1 z=!PE5bD*&t%jsn6WT?g{CM&39tZZYgqsSZ8? zJJ9|J#A(JDr8gqoK}u?6aA<*c(?WK0bLvC#5U7bM1wau2(?5qjD? z2~Bfy!r(Ng3`vQ?;6w*adfBLH4w?`*Lem_S0_6lLDV;w}Syh z>%x12(BvlpN`By$9n`1b>2LvXjmQBlA3zO92Ji}~9Skb^pp#%hWd>sH6Uci+whws0 zEdyfO2W*gr0fZ!?dBDKP(9giYIGNEOawaD$Xv!L?tqW}*Ap8q0(ZT*DrG0=nl2dsW zqJ7{BYaTE#GBh$UFs@<@g|rVOv9}Kp?tr!r!0rH*Y{aw=KuusoK?bWeq3wfSob3Z| zT+IVUhL-=o7(wYrpP?93=U{CcAl!_cR$y%dW$=j34hHnL0W*Uog8%~~-gW`#{50^c z7tq|0DQJw0K)ZmQ$aVo6QOyDdCWbl&2F8Wpv;%GzfYxtbyeAY6tVM~HR- zq~@0gwcj2v$TNIkkY`{54SzE*$TKh&64zP)oybeLwZK8RwZMkAu>d+BjG^!UFUEC@ z{@`*u8dSAHR^vhznqizJg5CF^Tt%q804>c3w->lgr{<7djWfBlHXnchcWWNIijIYRC|Gq#P$Lk zxy=OzCeRHxjB6P~!Ram@wCWF*?gYWdkHKOI+FrmGQmE|(Sm}tZy{rK;?ozgu%|h&j2bS z7#Q?H$H~R+U|_og%8hK$LZ3r_2Lq^k&BMS3n*IlG^Jn`4+8xRRZjgfx-v>9!)%6&a zm7qOZ@DY086FbsGWcdYU1tq05MJ-g2*i3;u9GtwOw$f@a8szpVOjb-h%zO-j3`V;c z7#N`U-hiC$$jktBFf-Vp;1hsAE(cBFaWb$$8m*v}mY^+`X7-HY?0k%j)>b}3{KYKX zN<4fDoJ#p}axqL+mUc$k*~}~~%-PzOR%W37Gc&_FCLP8f%$GrHeHoM)(m(}1>};YUj8TStjz?t-RYat9ZIvOkounx{vz{qCGqajS zssFzfeA4QY@ptS;$pKh(#HMLH=U;AIfCR@RE5SgD8U}gDEIwgWQgu01Z@(qXB6jS28FSxu9Kb&yO)rprV_uDl&qknmym{$J)eJiE|amO zmZ_}1jG8Q)fTW0wzJi&C_(F|CR>B9x%5Oaw6zzWYDq?(6#b1cR<@7 zK)F~XF*_|}4mK~{=4R*Q z=HYdeQid}?^UI($NWYl(Gq5p8Fld3-AhCl|sy+id=oENRlMTcGjc$V1Al-p17y&I% z6ab$cX<*2#ZZ1ybk{+H4*X&-$6&vxa>S1~_#Xd9Be#%Pd8Xl|^1JnN?CL_i$X3#n$ zE(TAA9Sj^GSA(j3aB9hC;D9(^AI9JZGa&1+IRqfv`av|;9nfMJ4saXOz))D-T%28; zU7cOs{IY*a-v3Ik+z$KYOxHB_nKwb-!fLVXy6AI#XnAan<`JxmBZwh5{Xg}@tAYCsVzv4es8&Q1mfa0v-Y zec;7INI4xEbJ?9*>N28c?j{8+P`9mDl9V@;a#BighdL0pj;#Q?j?EGli}1Px5@(=W zhCu0_8E!AAmw~(jk6Dpj5whe5dCVU3YPDEKL&1ON`SGND=7O~2SW`Px5K@i@F&Qy@ zWM0A`$)Lbc$*_Y#4wCNWVBrd7=rceW{9p#CwA{hKduIoOFx)4gd1p2TP=f-ra{+SM z9;f~;2GD6@yx^26rVlx?1axAkEQ1_$mPuCMz!0<`6d6lUc$q{#lyqvB&7mptZlPTNU(1MwT>7%n0_(- zXYOZ^1l_^GjI<{k*9P*Z7y~c#%tz4qNT6|Z zxU)ffX5b!TY=%2nL(C50dJQoWjJu&H1fAs+0d0GPRu32ry&R;*9ZEy*H>`mNqZt?(7BLGkK4Gq4U}n$- zwez5RtDvWW=7SFADs*IJNMHah{9%UP{Q)kU6xkIwgVQi`MH&Mm!%L=5jPsahg61AU z=AgD0A<+UlehjqGkr6zkiJUzct#wtIm|1mnAr#XmWhqucAq6EU1sYpyVfw|y#M}?Q zGcgFXB?{Im1Rbv}3Th29fKmdoO^)mg3=Ev$L--UJI6+5BGBYHAPviq_5Q40`0gX&b zgVr2kxCt}Mp3_uhVrEs*fl%up6qLvGOJ1CnUqDI`E5*RX(8KhUNt^i$1L)Ew8_-S? z$gV!fo*X8)`$0Enf>Sd1;2F?qw4kGCK)zy%1sy;Mu9D4G~2&r-yC+7HMwYkk= z-aXHb4Euk zTP-P$KoKD&1!)awsbB$hBYUPNat5~YTB=HFs;bIb3bqEId*miDJz?Tv-oYRUu^Tmy z;kO%SzswS|U-ksEU&h3+k?8{CZRR%&!VJow6Nwn0H`eSxS}P143{$X+bVT;JBP?_g z;R3!49DJH9s3pwB0Pc|qfDUEk0rwt3$5A5p#2_PW~vAA+`?VnJ=nV5Yka z&sj3S{YbEFpt9jSs0suXUi}OV;H-t5*^tu)Bvb5Qz}>$U#@)ZYi?4qRaaS6J?!w*A z#qKU}KNpL;5dB<;yCNC5859}Z89*C)9a$Or8F(1xGw?u0iO)0efXWU~`3Giz!i$GN zA1u9-K@8l60i79$J)SVTksf)0dlhxgFaXqbRQ(BtE+Gavcw!T^aASfz}jb^HZ@2dvt4FjC=6}m zfSZyiZ8CO5rwFukRh*AG0lCME(*4EmZ{{8FjxU^X8%qE%{|{w)%W#<`9ojc=fb|W~ zDk^X`f)x!QPk}lLpyMn-WeRc^0o19)Yy)AoH#7-t(qXP8W|I!Y{XbYTp?!Lg`@wzs z`LI5HJcI#?G{067d6nXvMS@_~$aa3>JoKn9Bx z!GR2LI5WIw@dJ-z6hp=_K;bOMFrPsVmOr3F81djC3~+HP#{e4G0EIKCcELTK!2rFV z4cB-E5hEB}@G$@!BN!}x@PP|B12%%e{P*AgcT7S|HyA7#oEW?r7#I~rl?Bg~a)H?6PNuoeYQo%^Uw?V3^8yk6D0$gMo*Efmu;hk(pgt z*jU(9QIwPM`QIaRGw1B<4`s4pd{xJ&eU{PfZ)gN=<9)D(=3)ipJJ!W7gMAV?kL-oJbQFJOvby2;?m5Wv8|2tL^j6a}Eu zP{1)^W^5!b2nt&8(QiuZZ0vl@?4ZrfDDDC;rercV6E;*IeOGxEWfcV%eam9eB0g;~Ar*O-IFOj4l#RBWksH&jf6M=^ zi1u?+mt^9XloC?XR8mk=2y--3)KgGXP*78lQjlhpH1}m-{Kw01lJPC$Dh5dg237Fd z8PI5&9iy?LsG<@Z$W6*hZ2!_Cl_8-bscEFbc;=tKa;iQkPK9OE?}MXKPOi>UL0th9 zeGE*0Z!`EYsWK%n@G;0TFffX%vx~Efn}cqnQ)f3++ft-n@`DdAw?WVH#AD^^5KP@5ch5S7Qk^!McdM~sh{7Ba9gh%zt; zGm0{r>M|LF>I=xQgSxr62;;ebMvQL%cKut^Dfm$1<@DUz!rY!$>W`Qf{<~fB@7A0n z``Uj;HCk^CI&~;$ooyp%kvh}g=l^>dUopEeFoSkyiK{b;v!XiOwT5wN&7VV}YxH(C zRK!7CFIsHHTyHhyVBjQmh>O)H1s-Hz{O8BOz_^L&IOyCPV`WBTPDbO@lm9ktU}R!s z+Q4-D?+qsKx^|}jjQ`Fs{AHdE9(!V77E~5g6jT<>p2GNN67%fehAihnn1O-m-<1DN zj8B<;LFeW&FfbYmDl;0%G0HQ_F&c}4j(-zj(`Ga^HZrqiG%+*RV+8FK&}KCKH)Zl< z#%IxqN{md5t}d>wQSJNo=_z=I1o$vAG0N%gWA^=H%6wWo(7VDyw?)^YDJP&@TCE|} zo0r!oq+VUBl7Z>pr2kEfk<32e^J>8MYBHKC3M!f^{+l#;GSl&Y35;C-zA-Lf_W5I0 z!F00{T!wW1pTf9?=@kPvxGYr^1$oI>P?2%X-vXuye+wp0W}3j56IJ`~KXcfBkl!}{ zU%?p1bd!OVfrEj8nNgHcSx}f!^%9f8-wV~%jLZK;GTr>Qxa8jgX2ZW(4FA8Q*ul=g zzzDSfWd7vIj16`FCNYQon+6(lWBMokzlkx2*_S~XbUHb+u_*XtY(7SIIYwDV(C$)E zWhFJxiQ~$qpnX<$Odz*b?c1j-$H>I!6AGFV_CUEFgcn4~Of)irz^8ZbYdCWfGGk6$S1wnzJD9R|PEckCZJpv7n-1@ye5C7g(GTo^B_j1ytNt6DaI(_=|Y0x=c|IYn?$7sl;$-vIQ&mhU5%)r24 zVrC>J!ltAGrCC9=s0f>qnkt<2@0?wPjZFk&ux*5`ZNxt#Fwc&0BA9E-I5EP(A;R7s zOn%p~v(wRaaL|R)3=Ay)>KQ_q1i^N4gU15kcB+ahnli#|0rCFT+lAZOhBJr!-TZGi zm}$p6>F;K!6*KDU{#}O}TnDPinE!eI|H=4^se^$HbUG^}RhjBCvVaT~VN+rP(IC$- zGyeU@%oy`;$v;1PkXP)%BvZ$~FD3szPT9KE1nl^KcO$^AXJG!9_5Ua1VW_zhptQ#e zDu2{K;bLNDBn+ZWL54FP{Y{dxu8imZ1sHw%w{x*&W=maupl6_YVM0z^VPv3v>|0rR@$-=imXOl#-L6Ud5?D5? zH2Ehk=L+y-l~P#f$jb0vHPI`qjkC6fRq59xRy9d!#eaw0^zX9UgVXch_Y6~+1Q}mJ z$|*)sMN?K$MN=lh-}hLQe&1t!RabWd6z+`wSpPp`(qNjwAjrTV%*hC<=oC#A&D9l6 z71i_^e=_R-yO^#jBK22+*(-?TA)@}w~kjFZ1ip*tfXdQrU+*x3O9%{ z35nK={ClNlYO1DcYRcHJW@4hIYG%fC{GUDJK@k4?(A>w|+{fI^&&=G%oPmM)pY8vj zjMEV5f)kV~5b2E_lq5juP3@m8IK@T(Tguc1NfZzgJ;}lH3#fd&^goX=faxg%8v_>u zgFd4!qdBW6yEv=*Z)3(a|3ZwJw1kZRUNx>PJ$Rt(PwDjHKcx&zf8R5RF+O6-Vqjz7 zWnf@r6=hY|Wdf6o|Fjqn{j;_JC3+@(#v}i%%)!j8cO{?7w{9(lP~b9_>;Fr}w@kA@ zr81+aBD1==y16jp+rPCx(;q)h{|PE+pGW`w8}siO1LHqoh8v8Z8Fzx(6pV;=BcrmS zsiKjYF|@Hb3%O14&xCO!qD=v9A0jm>82^R*pTbzq^ooIZa7#RQV{r{5jFw-p1>MKUrm8g77N}xL#`IyI(9DUZ_80S}^3BW+VinL1icNza@+@|CpKA zgUe!AiHuru#zi=SsuEBA)ol);!2;&;#zt@C3=D#dqMVGTjJk}hjF0}w{gY#S#2EE& z*}vsXYyX`u`FD=dsQBOCQ|Hcs`Wvvk3+nxW(wm~FA}H}O9#41kFkt5X^UcEEE&bm` zrdct*{_-vAZlL4?a;qGJ7?U8Z++Y@mI2J<5S%Mt0;-58BR`J%Y<)2F4 zK_~{0dmk}bg43E10|P9r2^xzkgO02=H5L?sBs6CEKYv<(|3;)Qu7AI3|NUZQt7Qb8 zu*vxM&3`|}8_aH?5|2@wQQe%;R8^dpkuk37pIwdSKTXC?w|~1B+nL?0{y15MGHMt9 z%s>1FR1UNKFJQdF9Lu1`V8md>z`&@)CeJ9w#xBRm&&VcbEUKht&!`BxmI#DRjX`I3 zfevsqH)dB84B53UNAKU*X#*55I?LI+cP?HwqL=Z-CCa4{4uFP)DXsXP3 zasK>&r@vrv(SAnLzll-_l8>LAWxD)Vy@F8)$$Ccdznej=K9+xa3=E9tn2s|@!&;oo z$PG?ZYehkajE3+E2D|1TP`3N@)#|t+LT6;->*x-P$IeA3-=s(_gsRYJzN2HI! zTAWaCXV)KVIlcZk1IypD3=E9-iM1Eh`UBf5s%TouXYVK4EE*@)B4*>oZ|5V`A{{T? zEN#og`OoZMO9Fp9v-Cd;#-@_2B}DJi$p5)Y=DOCUb8|dp{v?3C+6LGCGd&FmpbG5`!9O ztb!5T!W3s$Q&$E#4TMphXJ!t{GuDi1rY7dfjEB=Ag0rJnSl-8yC|8)T`FjeKD7Ue* z&0&@*K3rSBry^|fVkEaLp8j{j>C>jhx}XKeAh*0@5@5Q?V8UR*-~<{K5)&2SV+NnH zZpREhunDw3Qxu2G>=;2VV}&>D7&Y@M)hx`_CMp{kD(k2g+RTHb;sha3Dn?{yTg4gw z;-wNKnQTIbtB<*~z#!DsGH!ucI znF6&f`*e2pX$A(azjyvWVp3+h2X4QB+O?_-`V5u~&J4Z`;S3DS;*9E`l9K^Eat&HS zqk>?81~9>A3aG$Y#Hy zze|{M0*ue~1vSM5neM6l)lgx&0VXepdwGV3d%8zKX)blGKy@u0RS5O(I#d|DG$^c@ z{~5#kCZLNbK;r?XOrS=+k(dam^k5SFyXk0UP*7zM)4{)+Kz)^er$cIjLu$A{T^0tW zepgP4tZNdK_ZNXJcid(@N*g!2prhj+-zhhKkxD4(qGr;=CF#6ve z#~5el7)EvH7)Qq#qc~^hI2RW%2`=k<|G#6bWV#9NW9u?72!rATElsPNVe6Mn&aG6l zFjJeTWN4_QqvBzf67%nss;Q}}x`_$nc04K7E+Fskc}Q;sDSiGu4j)4kg7h{`bs5!> z>uJ~s+F3|N4IejaMXsnB|NdgoXJTUt0`=3FMU_pJO+klNDuNEN6jc^gHr?5J;zTQB zVe840t&B{UFV|ka3?@MF#_~__|2xKe;IIJY5^V+sW~`yXDynD>>TR;av-1DkYISpS zq_Bu)F8cd3lX2ePeOtg`Vr+~p)7k~(y$5$xvtS{?{ICE2JH{}u8jDru{Fm?cM7Lt}w)50rt!4dCd2^c>Cn%ov#eIsJdfxSHuEgCT=8 z=&o%nX#zCbjZ*HZgT}+LrjsLil^}ObP%<=7(oxZhRpGZW(}Jg()R<{4_96eyfx5P8 z1X7NfgPe)HsS={lvkS=c_C|9(s7^io-xNM}B+H=5z`z6wFC{e-6(|iZTlg6H8I{e| zOhKZeB2e}h(4dPQ<2leEiS55NQPw;>Lau3sdW>hIY&6|d4fU8b;X_FF5&s_A>Ivz| zYA?DhXQgXvtEZL(W`WwR!vA}jm|{ggjnUhhOF_qDG!@qz3{%v6NV>V0%HQZ8NZf%3Mf# zHUC#w!??7X@#NpLHjLl@W?F%*`*#nV0>S-jjsLw&B9Jz&Fe9jk&Il^96&Sz#tMX)Y z{}=slPc`GxDyAL(j+Fe!JM!nRKWM0#feB3IFXo^*3ms6eJHyS+l2KSy#z_Y}XQ3+ZqHpXfqo}ST=Mv{4 zud1vf@2Y26B38twBQB_-02UMEmzGwtRyT5!RumCbg-mP+3CKy9D9M>1b=@VHrDen+ z6B`O@3QC$v5H`{zhp3#KC}g@rK}|tiPKHIo64cpe{(Y9gkMSncFYx??4#o@x+CV@0 zghhwwTD{$fA^*Rn;0cV1_}I#ZUHWUqm_x+Y>Os@hZoRc)Our5VPEwl)n!uQ-HYxDX zEYukcR2~D7$-7;#@6^57+3|31sOqyYJ*0ijRh6|7))k4_h%w={-24HCo|{g zFo*qF#drfgdd|SW{OA4u6^uGeH$i77fW|>Uqs)r1QS`srHB7w7Bk6z6GaI6erX$p^l45rRGys{equIcK6)8iit=y;9*V*C(pDtt`m_xzR? zmL!x>o%2je=OF_-Y=1iczhjgIk1O*th%+cMXfv2#j%UN_Yi#4%U^&om-JeeIP&VUY z@E{%IV(^H>9|o|XE#m{Qs2$@&urPEi8Zz7sAz_1fut9G|=rA$^+aFE_3C4R&K@1!W zg5a@l(9xuj@o$j5a0h_eFQB>)JaCO7^M?~`J7X|-(4B?tuQ$`yzutc!Zi0$3?vAjx z*U_~H6`?x1_W9tVXBXHJ_6`t=fr0J!YK9QTKj82JwVyzz@F*g}OI;LnB0chWJWS+Y z7T5)w{%&Op{JZ7fE-=ro1j2=e#thIX8uHjYxXH!9{CgUMHj^Mz1i0-AnkRyeD1-dU zB>1zHtr~)vBI@g}*Vo^ut7BmNy#|`*@Q*G3I?lR4Q}b5>t0nfaWwzhb{=Z`qgpLP; zdi`RYF{a zaTi$l@ncw4krVidw*BC%YJqUuv$<4)?6&XRBq8M2f zh1t~=fB$A)b3Wtq9|6|s8IK=l{JZ#j2J?r{8R!3mFur;d^Y0U*PR!qb(TtJ0|2{;& z1Lwcr)BYb~5@b37YR`dgl^0cHhmX6PgU8+fs+cef{8>?58u_<`>8i<}@65rC#qms& zLF4Y1ZKl^o)!nmN0y7IThA$0r8>kNi#t8F3 zfAyH9P5x|To|#nWz~s+(Gon7SZj*I+U1WVk{R+!`1_stYf&bqzhC<^J(*I##WX3(R zk7&F7We{l)VLC6|Ao@=i9E)aVOg>G^v91OCPw>tE49c3`GRuVis-+8L2Wf8Gm+-CkmnhG z&1FqNsgYpw49vf8GBPoqgU&O6$~x#wgR!Zi=Bjz7sKob!WjFAkCzkU9{WQt*$#SjW= z>+msxR&^k?rFt-GZ#4( zbwwFhV|^ESRY87f8D%RqT}N3JVMa3t_Y9DmGThCiWppG(CHMqYn-1Rk<^|{@a}&sSI7+q^)2DS>2>A7KvEhWCdB>q|Q{5e|UfKkK&&{KrQusv6`UO zKseSqG5`Ml{}JPQCeZp7UIrQ1+%ywpHUw>6Mvn39KVy(f{yqk|4m3m4A^1=eIz#gk zc|i-VsT$@#)&Ey8YzNQNaDv;1pw%O$pfx0_f~@~mgQjbk4^~(I%ZE?dFvk8lKN~b_ z!~7@u{}e`VaNCp%G^Yz%p(4%*UU36)?~}HD6%S=Dzd+BZvK5uMpy-$A=6dFC0Mk6 z=d(=wov+E%_P2b7kfdfbVR#av`ii&W>o2-$6E*MMX?P_4f&u zPnw#)`7~h_le7S`P0&WVE&~JO?+yQ-G5%tj0c!a(DvGnKgJ+hYP6ss-*#GpfY~GzQ z^Y?El5!Lj67Z?rFRVBn&SZ8MJ{_U&5D0DG;y?`_#asY2{z2xxWXxll#Q>s7&jHA z@J2Qk(yajd8!{ix11ewG*+8usklBoX9)Kp*SW|w@g_wvssm2JdJAN_E0_7jb{4q!u zG`xfve?5Mj@%8r$Qzzd<&}?s_ubVN8)K^HME~erc8UmWv4GHyAU=(Ly0*Cz{rWp*Z zpfe6Zrg1W1B%ia^PN9xMy{@q$wX)c6yqBp*P`U@7tI*K z04kfs81EysJs{JGp!qz|Oelo+cQ?lDBJO!c*mNVvY^1VO61^-%8qWlk7$^lPv+Tcr z&42ztmc)P-1j5Tt)Tu}Y#^2xn`!TL(b_2y9Gi;m&HX$kQ!uT0dS;YLCSFHh>nFQ4% z?Tks)h=Cgc_!K462k;pmY`+Vkb3xV&_6*Jp?hM|bgIloA2Z1JCKp1uIz}%P}yb26P zgC;vbb3@1&>pamH;U?h(;b!oBkuPYzNTeAwUxYeu^ea^wG;bvJMT+qn&KV@6nH$h7 z5(vX)l0eg&;Iy>%zXRhV=6nWC(C8|oh?qFLD(;yOcJPvF&^~om(7HC(wDPdu!nz5< zO@h{*()K>WEh6AGZQc@gzEaE=7qrwzr$zj}B9$P;nBIRo&z})>lH~I4*9*QEh87=w z3R&a!C-46|#x>A2OrVhg@Js=#sG=#jca5~xjd9ICOUC2>EdO+Z2k{vj9b=rFVn8zo zH)?AifCuy8L;4KNe@^^=$LI}id+;%cfyxGO+XH<89U~hkVYs^gtNiN?F;*RHEUfMD zZ#$~N%zv)@f5&hYI?o`^fHBhm9wZQ9Q~GlSYz|`pgz^U)jy&;za4X~Q%MALASD1o8 zH3ewAUJ+%?9x-nJrukn#Waz$`v8d(LsTR=aJ$UFIK7!Bsd(Qt}CPC;pB%~h=9*txa zRWt|po}u&~3DCM(#uIS`v=X6JO&0PUM2+w70^mrW@To0 zXtOt2<2O;+qSe~1)zZD*)1uYQrqzN;;qL>+ynmC>F_XeSSH|*xo#+@;ceDID@qY!w zPw?0sI|DDM<^zx3fz|=TM(}<+S2KCmFqtyx|GijU&A9Ae6w^)6ARY*#4CH~g&Ra~WV(A8T)t#!=briRBC{mxqn`=jo;+;1o-Wb?7pImM&?GHr zbcTU}Z3zk+Ej<@FC9sdy>I>r&u({&;D|>x4^gETuPk2@WpBnZNym_NQ4HK$oC{*T8Wy zDuPC@%*>J7e((?|DGt!>p&&O1Fz|A8LdAs{tT=fgY(@qKQLX|gn~_0?%Mi+DVi4y1 z4rMbl2y*U)vRN3UIO{+MJFsvvFfd*M%|0rA{HGen}b1&RSC-GWJqHL?TG-X=VmZseFPQf zVNhW+fUHr7z!Bl7!(*B8FCnM7!;6n6@z)H48;to3`GoO45S>R5BCI!O$f3^@#$3?*Q*L26PM6c~~j@)=UVHm5Uy^j9zxfWtcz zY*sQuDuW&agL8gCWl?5&Mv1~o1tS9^69rEvUj^sfCx<&>@#tI=BsYr?f zit@8klS>pFOG`5Hi;6Xo%}pyUD#=JKQYcDI%gjqnQAny(h)PXS@XSjoEiNg_OfA+? z@XSlrQ%K7%Qb^6qNX$!4O;IRHO-xBl%FM|usZ>bJOHoM9Psz+nS4gcWNG-}t%}Y+z zV}OTw07DK#DnkW>0)sC@K0_WuJ_7^Df`FXV3I*T%ynF@*Cx(2690pJrdNPzSB!a^> znSsG6KPN@Ovm`MmGZ~+03UK|%x~-w<&ICN}V#Hv9W~&0obco^BpolOqGXg1rrV~sz zW48s>CrD;8Foc04znCEt>}gP@)nhOKLx!-_qTCa5cg=hp7%%F$_74o1g3aV&=!3m^I9T9O2LIHr1*st#0m_-44w==3vSR^cX-G zQe|MX7m>I@5t7M}!;r|31TJV47(hu5diU3sM z6*K5Dfbwe&gC02frZea>_%paM_%JYpWMmdAxaH@SClJ6_=;ars>-)R;pr;%ny@Ag_SQQB^K=2gT9t`;m z<=`eoB1088q>>mC8Il>Y8FU#yg+eYv0lXT7G#}Ez1yM3MODTY33DgJyHBvy~4XPSI zIzX3{L#oda|ALGJu|SRhc>gUY~=0&3o)W0sYm`9ek}2GFUYtPE@n z>lhe#8TddK?l1^~4sB)-VGv~yV-N=&J`FlFkwJz5baJCSg93vhgA#)> z=ol{sH3oGC4F*jHEe37Sl^qOv4Emspix`X;j2TQAOhK1iFjz2HGFUNKGuSZLGT1TL zGdM6fGB`0fGq^CgGPp6gGk7p~g04ek@L}*}@MG|22w(_g2x15ZT~5jn#t;s=XqF+0 zA(|nEA(kPIA)XM&ajRli6NO`0z(SJX@*pW6AY&q z&NG~0ILmO3;Uz;F!)1mG3>O*JGo&+oV3^2ojo}KzRfY_P*9>nNIvKLSbyO}x4nrQp z0)~8sLWTlxyBE|3E@LQXc*Rh`P{mNmP|Z-wP{Xi;VIf03Lmfi{LnFf*hIb6R7+D$F z7}*&)7&#fa82&Q+W8`M!VdQ1xWBAX=z{t-iz$nPb$SA}p%qYSr$|%Mt&M3hs$tcAr z%_zet%kYEYCnIQUwF09eqY|SsqY9%cqZ*?+qXwfUqZXq!qYk4k!!L&GjG$fC28@P` zMvTUcCXA+xW{l>H7L1mRR*cq+HVls#9y8i9+A-QQIxspiIx#vkx-hyjx-q&ldN6u2 zdNF!4Y+%^P=)>sC=*Q^K7{D0F7{nON7{VCJ@SEWe!xM(5jA4x7ppk#ZD8^{U7{*w} zIL3I!1jaG{$ts48}~xEXHhx-HbVmxr}*?`3%n(o--COEMqKWEMhEX zEMY8VEMqKZtYEBUtYWNYtYNHWtYfTaY+!6;Y+|^<@Q~p)!ySgZ3=bG?GTdiuW^7?> zWo%X6#|?W$a_@XPm$|k#Q2^WX36sQyFG6PGg+TID>H}<1EJ6jB^<0 zGR|Y1&$xhbA>$&(#f(cBmohG6T+Xv7|$}E zV?57zf$<{aCC1B)R~WA{USqt@c!TjK<1NP9jCUCCGTvjn&-j4xA>$*)$Ba)HpE5pU ze9riS@g?Ic#@CE*7~e9!V|>r}f$<~bC&tf=Ul_kKeq;R3_=E8$<1fbFjDHyaGX7)y z&&0sQ$i&3N%*4XP%EZRR&cwmQ$;8FP&BVjR%f!dT&m_Pk$Rxxh%p}4j$|S}l&LqJk z$t1-j%_PGl%OuAn&!oVl$fU%i%%sAk%B04m&ZNPl$)v@k&7{Mm%cRGo&t$-4$YjK1 z%w)o3%4Ei5&Sb%4$z;W3&1A!5%Vfu7&*Z@5$mGQ2%;du4%H+o6&g8-5$>hc4&E&)6 z%jC!8&lJEE$P~mB%oM^D$`r;F&J@8E$rQyD%@o5F%M`~H&y>KF$dtsC%#^~E%9O^G z&XmEF$&|&E&6LBG%aq5I&s4xv$W+8s%v8cu%2dWw&Q!rv$yCKu%~Zow%T&iy&(y%w z$kfEt%+$iv%GAcx&eXxw$<)Qv&D6ux%hboz&oqH)BGV+M$xKt2rZP=qn$9$XX(rPw zrrAt$nC3FgW17#fiD5ItHiqpCM;Nv+Y-Kpg(8O?vp`Bqh!!d?^4Eq`OFfCwO$h3%Q zG1C&JrA*71mNTtjTFJDEX*JUtrnOA#nAS6GVA{yEiD@&_7N)IC+nBa9?O@u;w2Nss z(;lY1O#7JjGaX<$$aIM5Fw+sHqYOO^^O=q@9cMbhbdu>5(`lwNOlO(SF`Z|+z;u!6 z64Pa-D@<3Jt}$I_y1{gl=@!#%raMe`neH*&XL`W&km(WAW2PrePnn)EJ!g8s^pfcn z!wiNM46_(!GQ4M4$}ovx4#RSWeugOwQyF$Ly=HpD^p@!z(|e{5Odpv(F@0t@z;KZ1 z3)5GoZ%p5relY!H`o;8{=?~LirhiQTnHiWFnVFcGnOT@wnc0}xnK_s_nYoy`nR%Fb znfaLcnFW{ynT42znMIgInZ=mJnI)JdnWdPenPr$|ndO+}nH887nU$E8nN^ronbnxp znKhU-nYEa;nRS?Tne~|UnGKi?nT?o@nN65Yna!BZnJt(tnXQvnM0UEnZuaFnIo7ZnWLDa znPZq^nd6w_nG={3nUk24nNyfknbVllnKPI(nX{O)nRA$Pne&+QnG2W;nTwc`1=6B5RnLjXp zWd6kbnfVLzSLScb-P*!SQuHDSeRK@SXf!uSlC%OSU6d@ zSh!huSa@0ZSom24SOi&wScF+bSVURGSj1T*SR`4bSfp8GSY%n`Smaq0SQJ^5Sd>{* zSX5cmSkzfGSTtF*ShQJmSaezRSoB#8SPWT=Sd3XrSWH>WSj<^0SS(qrSgcuWSZrDB zSnOFGSR7fLSe#j0SX^1$Sln4WSUg$0SiD($SbSOhSo~Q6SOQssSb|wXSVCFCSi)H% zSRz@XSfW{CSYlb?SmId{SQ1&1Sdv*%SW;QiSkhTCSTb3%Sh87iSaMnNSn^p4SPEH+ zSc+LnSV~#SSjt%{SSnenSgKiSSZZ17Sn63CSQ=THSejW{SXx=ySlU@SSUOp{Sh`ty zSbACdSo&EeuuNo`#4?#>3d>ZMX)M!OX0Xg;nZ+`jWe&?+mU%4mSr)J?WLdb%UM>itYlfmvYKTL%Ubr*yi5ZF0~ZMGXaJ>M*d22dlZ*26*b^Z%n`2T@YFR2< zBA8-#%umnHOU-6agwWj1$(cpTrMYQ2sTJJG2sW2x%rSd^c~ zmI9$%l8f>aOW0i@7O|&7Xf{`{O>C)Pipv$Qn=2L0WOs#F&z=gQ*<2werh+MMcZ5T@ z(-CYgcenvu>2M~GdvbnmZX(37Jn2XrZV!ZB?hFK*#Um-Ph$SN_v53vHBr_)^l`RuY zv3o*%z@7=A**w8sV9Nwk?4A&}vS&hQCQmP>%q(s%gt^>V2sV#5l0$g1Q8?*Esi}E6 ziFqlR$!tD}$)zQ!Y&l?x#|K$m4ibmW2OKhNIbe##CndjxB_}1ngv}4Eku48Q@%SNW z;mJedu=#;CvgLs(?!3f;{Nj?L{DO>BX4kxQ=G44&c7KSc+4CVZn?KmsZ24e{*FU2) zFFmoSG&d))w1hVwna36cww$d9Oz{LES<6#|#9<2pTh3Mlp@PB6*^0pwcQ7L8xQh{N zo)9DhcuJ5sY#|V1O28CL2q;QRKv5bBj!U*uFvT7U@eO+^gk}o`dxxzQOtFR*W#*-` zmV!v$P-H*xmLl`mLm^SlUJ9YP!x1jzE=OWVBC#tGY_=${C)ujN6ju~H?Q&JYnc)0u zXyL}{pOIgb$C?i&L&0Pzh~#nvxe{VPBAm(Y=n58MPfP{V-2ULMA%vZeVDkhc1szW@ z5(jLrk)b1$c7o8x<`CM{5<)vc#hskNd}9Mhd1Gu~2<00=X=5mD0;SEMG{ih(0}Ci0 zVy>|P#9m_qi223_Q1cC;<{6qo)Eh$OjiBZmLCrOSnrj3x*97V=6R5jP3?Sy17(n!y z7(m=*VgNDM!~kNBi2=kM6R7)43?S|^fx6EG>OK>w`%Iwau8Dyw*nK7jZV=iK5-ui& zkZ>`9`oqK!YQG`WeyG1p459WLLhUz%`oj=vKQvxUp#C>8goKZYA*9?lF@)N02({k` zYQGWGej}*=q2Xp?1hwA?>VIfBnn1(R1Qw1)Q2UJ_@nd2H34aqKsQpGz`;DOX8$sq4pa?{SQrVCdN?z8$<0khT3lowci+OzcJK)W2pVcQ2R}w z_M1TMH-Xx30=3@+YQG88eiNwuCeZLVf!c2ZwciA4zX{ZS6R7^33ZPp)IF9^_gF&RV+jopOQ?G+q3*GSy2ldg9%wtn#1U$r zBh)@esC|x5`y8S6IYP~Igqr6F^^YUeKTc5hJ3-BJf|}<9HO~p^UMHw~ouKY@g1XlU zYCg35GI55Q=L|K^8ET$0)IJxeybDy`1uE|Xwa*3Weix|wU7+^6K<#&d+V29j-vt^z zF3|9Cf%?w{YM(3Ad{?OXu2Az`q2{|n&3A>G?+P{F6>7dK)I3+Hd2UemyFuOW1~uOe zYQ7uPd^f21Zcy{wAm+ImyRn6*7bTXZvXw)qaBx+^Rt}~(!&5R-i&Bd-i#f|-EKs>; z=xPaehoLJZ{taCr@o(q~iGM>^Ncfn=Leh_+DDSN|l70VH?L{~_t$&=r#Y4P7DW-_X^~kS!9D zfGfciB$Yx^zo9E6^&7gnK||jS8v2mjVCV|T4Mqm$VBZ)Sn1f@@$iN&NYeoj%3?WsYks+k&Gctr!eMW|ms?W#}QuP@bLaII^LrB$UWC*GHj0_=FpOGP? z>N7HgRDDKMuyOEGlYhlA*4t#GK3T%Muw0g#K;gDUWSk&!^jYl<&6v> zS>4DS8gAy0ri76bqzP%{1ZhGVIYF9`Moy3>q^pywIWMfN1sB3_9wcEW>Luos7#Omr zqtHfNp!p<-5Q1sMlL$5fBF+OD5`b_76A|4NhzNfo%vuPaw=^#kRIo#MJc(fIAsncb zF_Z@#d4TaCeI^Kx8{Bn)um!+u6bFI(Y!F$fnQq8DCvy~@Aqo#>JJ^{{rpR)Rs5}=G zITSM;Em7p0AUvLQaCZ^H5kwl1fQSeo4>~}E1Q6pB5CQhgEU-`6Ae2CQYEf=tUP@9< zF;w2u3nCApK)yFHF*blmLU=AnJ~S|Kf%={k9MO5DxkViLd8v9}MoD=-n88(&QIrZ1 z<4nshEdmR2re&5v#5jsGE5Jfr#i?bfc@So5W_m^mn8}%!2{jO6M@n9PF4zt*17rt? z0ks3fgxCRLf$RXWz;=KbP&>d(h#ep%#10UP8!7I&Ai-5h)w28;K9rjKl{U$%jx6GM5jQ4Im>3NUFhhae+xa(A=*8 zgbB`%U;%E37BHI+-qQzj;Z6ke1d&G@z#?2=r$U%uSAm&GmV^0RU=Ko=V84Kw{7`0P zQBFL_UEnYT%kaTN6U^lSjUgHvSb{kaT?lI-e1zS6U{gUMf}|YcV~{06uwX)%02e~I z5-x-=R|FB<2(3thU~9ovA_*e23nR3{-6jlk3sU$aX+}7jH77G&&ydYINY7Bu0L(E0 zag3lGV-Uv}$}s_POrRW75XThCF#~bTpd51$#~jMB0C6m!97_<#QqO=5Y^eb|$W{Xw z*AUD#gmI0)Tq79Q7|b<>aZSKn6BySN%r%8^&A?nU7}p%kHHUF6z+4L$*AmQyxylIa zDkGSyjKHokg1O2F>?$LetBk;|GJ?6v2<$2&n5&Gyt}=qT$_VT#Bbcj?&iJtBk>}GKRUz80;!zn5&Gzt}=$X${6e_W0?&iJtBk>}GKRUz1nepkn5#^{t}=nS$^`5x6PT+^z^*cZxyl6W zDifHiOu()(fw{^A>?#wOt4zSIGJ(0u1nepkn5#^{t}=nS$`tG>Q<$qv!LBlexylsm zDpQ!NOu?=)g}KTU>?%{3t4zVJGKIOy6znQfn5#^|t}=zW$`tG>Q<$qv!LBlexylUe zDl?d?%)qWPgSpBK>?$*utIWWzGK0Cw4D2d1n5)ddt}=tU$_(r(GnlK)z^*cbxylUe zDl?d?%)qWPgSpBa>?(7ZtIWZ!GKaa!9PBD{n5)det}=(Y${g$}bC|2l!LBkl)q@ym zs%Hq!<>p}5nVUg{&0xY{SDKqch0S5YVAq;kK!q(}!eCdMTSA2`p~4nmt1Jv4!WITF zVX!YO457k?Fk!H7ER3MSMlfNpuPltA!p1ORuPrilFD<~nw1E230_IB#urDp3zO;b((h}@TOQ`P0iFD+rdv;_Oo66#A!OFct&NNr%i0j>@V^xzDbj3GqE5GG>?*JA{c zF@nh$!DWmgGR80&W4Me7M8*UrV*-~kg~*t~WK7{QW)K-On2Z@*#vCGJ4wEs5%UD2U zEMPJga2ZR8j3rD49tMUGuN%U`z|a7u#}E<*hOjU&golA4Bn%8;VPFUk14Bp{7{bE9 z5FQ4GkT5WWg@GYF3=AP*U z!@v*{28OUOFocJJ5hM&iH841sjNoBl1PKFBWekylhk+3!3_$fVL21bxD09EG@8F&~NLBar3vqNOy zVPFIa15hOok%5PSF(eE?^*va|7#;@3kT3vM{SX;LJ-CPwBqJF^0t3_>fG9D7DKXN6 zDS?CvsEGhkVhmGa3|9gP9#FFZqQnHI#00Jc5>B9|1Vo7`Oo=I62_(Qk%?pSUGnf)H zJ*YFy^o&7^B^eo*88{fY7z7wt|Nm#;2k&m;VPIhB1ML@P0PVyQWME_vVi00rVGw2z zW?*CxVUS^9VUT60VPIsaWvFLhVrXEDW?*EDVa#M;X3S#DVqj#I)~VBlgbVvb_qa&hwsVX#XqN=#zNNG!_DV<-W2*BBboQ}c@$ zcBB`jW-}bgNz7MZxR8@rlE-i-H?bsxF`y(PF_STdfd%C0|NlXII~f=m@U07lsbqw@ zgW>;w1`wNzfiXD9NrAzD0VD!C&}2d=>}Q(#&e7p8Lu#2XS@XtoBNCpKq;T`37C8YCLe>zhhXw8n0&^d#lXn;fVJ}lEG5IQo+)|GKpmt%OaLlESp%4u$*DJ!g7b@3ClN@ zf2?e*e5_)uYOH#!W~_Fseym}vaja>qWvq3qZLEE)^H`U$u4CQCdW`iP>owMUtnXOA zvHoLYV-sVOV^d?(W3yv(WAkGRV@qSpV=H5;W9ws^#x{>_8QV6teQd|r&avHNd&c&T z?HlNJF?KO_Id(mEGj=<6H})|0IQBI5JoY;FHugUDY3$3`*RgM7-^YHA{Tll{_Gj$h z*#B{`aqw}-aj0?VahP$qarkkBal~=tag=e?akOzv>jAI?gK8|A?=Qyr$JmYxB z@r~mjCm*L6ryQpmrx~XmryHjqXB=l5XC7x6XB%f9=QPfFoa;EZaqibTmt`ncwCE#q3pwT?s`2Xan(?~v`tgSG#_{Iymhsl{w((BmoyWV3cOCCO-ebJyc(3t3 z;eEsVg^!7ki%*D8flq_afX|N4jn9uShA)LLhp&pSiLZ-q2Hyg{6@1(H_VFF#yTW&e z?+M>0zF+)I`~v(E{0jVf{AT=i{6734{4xAl{6+j#{2lxg_-F7h<6pa6&LqwyE(E&sjDcO)N;poqNqB|uIpHrNQs7#iQA7ty8$f9j zC~X0yZNPfjL>xqtL|Q~vh@27m0Fe=8g3@eInhQ$vL3D@;iJFLpiB^fu6Fmf#f$R-u z6uklE-+|H(pgNw2v59Gj`G^&WO@YXWErZglpfqI1H>21lhz_xBVmHKoiOY#QiKjtS zh*v;qP|E~#@J9ob-vZGg-XXq9{EYYq2@wgX4<)=HDkS`%G-Q`JqeK{32dhMsM3uxW zi9Hhcpz=`vOMHRye?Zm!k(80Nk&Kgs+9){*A}=`&O3#9*lbk2HPx77=gOn0PTnZZE zQc(9uK|-8W%0VhYszGXz)DfthGUN778vO42UU&=8P@hJZ9Q1f&}v z>ZDtwmq;IxekQ{KF-HcP0%YW%d?koF88sOQ2bKkmZoo zlJ$Xz%f>`xIzb%?t#)1AnFvRC~Q%o0wS)c1*P?%v=Ky|qM2ftVwvI$#a&SG zGf*0GiUFhI6{xx!ia(Sjl&q9uAo5CiP`U_8mqFAiRVmF<+NE?y33AE;qp|=*UReZ6 zOF+~q%P89@$0*k+FMx_~g3{Zd^e(8neaiQg|EVabI6=f!LZEa6l#YR@Q%O*1P+6dI zNaYDs{2P@11*QK%)TuJ5DycfDrl__-#8qcN={ZmubjuL~1FPy1)g!7;)Y#NCAmVC} zlN=b;?4W!nhRsxq)K96u(cpuKYbZcz6)3F%QKzA!;iHkG(WkKiDh@5RG>$>}r=aT2X}r_q(=^b8 zmJ^yO5P8iED4hdQr&*vmL34xVB~55Kp#?1`wV>ss7NneH)e_P&(hAZl(Snu}TA)4; z0|TSh8i;vX8zAOsZPB`-^+j7u8(L0iL(45~Xt|{w1W~6Qrd_5zO?!tnw4Bg>12IP% zT5f57fvWqVBcWrV6Qu(!Cv^HC>U5yxmd-SYI-OZMyL4{p{LzJ$6S~lvLKj+Y=~_V4 z>DuVV=+@}Y(}k83x|bm4=|amb-CIy~_jLd1$>}-hLCXof5{NoIXt||V15u~fptnHp zfZij0XgQ$|IpKp*A6jnd%R$uXE9pDwC+WB7L(2*M9T4;Mq2-qT0jRno`cDj44Acyu z<%B^LM4bV&+%ials53}2Xfs%5aKZpuP8j@ws568%oDEqZ>I^vyH4Hrrvkal-gyB4> zI%v6NxD2XpmEkGFS4KQW&~n1a0iw#gpz5IImeDJy zx_8EW#(Ks9#?W%YxCNrl7+P)__dwJcPcYtKe8KpW3ACIrQG=*6ftFh)dJuIcMkYZf zMJ7{Bpyh<%Bup^cY5S zXt`w`0a0fjV_suE$9$hTw45;i1hLl~T5g&Df~xyxA!lJ{kzfHWCoG_C4GU!PfSVPMRYZ-_-YXvB+0#RqJVeMg^Vclg7 zEhnt^LFJ+4mh~~PIu`3w)-P<>Y@o4k11&vlAgv4*8wZ;>n;IKv9N0kPzy{L3VzJp~ zbH(P9tq{ayTWCnwLP|^)TOC_3+YDQ1y0e`HRW%P{uk9k+1Ge{Up|zGBH1_QvvCm>B zVP|F+Vh7FpcF?-Rt_z~quFr0b-6=b04zz>jKzjy=tUZgplD&g{0>nOhXg;uq)R!#w zRrWLNx7kBW9s3thRd1krKREC?=r};zEDq4T?*PgBEDmW7Ee?wupdsi0Z8ou{fS^eCEXB1PwtaXj*czg6MU! zbBb}Qa)O4S6EsGhASFMG(-x;oP9L11A?OTkH#)09^g3%fdpM^#LqpIRnu?tvshGui zf%87+JI>G$bb;1^E|4Api;I|xiA#_RGz49sC5a2@j#dT+7MC8ERW2u7pdsi2&Cf27 zdY{FW$yLGC&J`Mhu8?z+7+pc<{W37HxK_AMbKT+!4MA6E8RiNp!&qG3x$(GZxj{qF z4cY>7OMv*uEyb@Bw+?qcrH5Ojx@=I)SIAB%f{d!BobJ2V8{ zp?Sjn5Ja#0G504POdik>^nli29*`Q0#lyxU%A>*q8iF3s_OHh}h+dCP9v3{`c|t?b z6Pg=6A-R#oQ^V8EGsP1cf}YU2+!NB~XYripxySRCCo}}Tpe3T00K{Z35icXJ0550= zdO^!2FG%}^#jDF}h1W4JXb5`!U;v%9#pv}1qSu?jTh80Y8ybS%(6ZPYQWmp#mw8X| z-sBApL2qbF&ie&a?;9U39}OR92>L+lL!UT^tWT0pgU>u4XbAd1Yb75@>y^dlhR-)& z5npHs`no|}+9#6ES5cG$(N&F#w7Z!gte;5BGe`pB$LrZr584$hxbNqMt z-|&ZqU;wmy4S=-6SOSCs3yr7znM`1D`=ckEI|oD zbwP82pdlD^4q|f9C5YajYe8Rvg@U0W7z}Mu1VdUBEWtj(S-~B_&=3rU_D6#ELG%V6 z3Vsm$F9aHbA<$M`hzUeC#3Cdtq$C6yf+5hhRS2XH#uBnFBcdRBBjO@zB4$NELofo`GKzq-j94PBM0|=Ah=hh6!ANN9G;$AA_CVyl$Ujlg5R8Jh5u+e|NtP(HsF0|lC};>qLC(r! zj9LNF8?`3tRMd-TXb46_+r`n4b}>t|QnW*KTr@NUqoKX(=qV7r(KDjAMPG@AhF}b| zZxX`=k&WSt(TVYjfrelVw1*G_8A)J?X^B}Bb07v9f-%r`R?Ii3-e0j2v1YN*5R8Sk zc48sDB9_>K*uK~`vCt5Vg^sDjLSr=c8R$kN2FAD};5iz`cu3vK8h?*nRRYws zgkuo-1ZbX0g4QHS&^}obG$$rO`}9fBP)LH73`x*FQ8E)GKP5x`pA1dW$puPet15AY?XuJbSjUw0_7M2w(%UPDOEQPoM ztOnU6h$?2d8b$_?2xu-0Srw>Nz{0=;HHQi8B2W#%jKx)qV7r*1?gps>^{ueEodxc8 zkSbONMg}&PX7J1x$PH{P?MUqDU^d7dFmX^gv9Yv)#X)R@4WMua*$JYV8Q8!O6jtae zKw_YN7H$>HEQ?tdu`Gm#9XpDDLFR)(1)_qH0mNqj#{jxbj9@dEz%Bv#l@p6OAlJZL z3sM70C2TC9)*8fQHkP?yzk+OGV*$0LVdAsl;s|>|Ap!~m5Dhw!MgTewiLL@b) z14te+!-!A;3T+k!W|sLZ^T2k4)G{!DYDIK4Oi&e!3?MxW44|_v5o$p0U}0bco52LO z3FJReYDcI6xf3)$37RE_xCW#KG)v6J0_yuhOlD*02m2Ld3oL9vrn9kt@*X75pqmL1 zWoA$SpRWV*1G);37ztL8hRa2@8XG1`q`K z7hMHNj0G%qm?bVKd;MK1j{orfb3xa*CpsGKz2Y}0P+>6m&C>baXm;6 z8w(_sA#8{bL2QI6pq3BFCm#L~mk4Ub1qj~QVD zC=@~I6eQ2c08-Dupo+x|h)?37DnMf&Y%HLD4nz+di!M@}c!Jp=vk>-xN(hioKr|D0 zn-NDPVOe$QDRBj4lr;Z=r$Q<;1015*{oPgQ@AYUQ$LvjHVOBG8c zJWgz|xRVhq4@u_?47ONQfXs!s0OS+Us5cu6s80*g!^V;ccRd>ms6Pbp6~ZN;RwyWS zfoLWMCkAe`I01>nd;*e1m*)nzDVSKwSwQ6p$TbWMpg9YK4WP0TR0@OS85uz885kT< ze1fn8;sTIQK)TpiKz&Mx9$0+>5eJQaL0ZiSdmyGjL?JD7kZaK8L1M7hIf#ue&%{y! z&Yd7R1_n?MA6*3_SRP^z1A{A0pMZKJAfJH7YG5e}t~L%6OCbv=oIvUr7(n$I!Ujkg%LtZ-wQoQ*8$t!b4u}gtJ^}Tc z*;qg`h!8z&ET9?|Qd_XG1cFlFrV<@>HmUCVcb5+1D7)ppMXZ=5jKFzO;GBB zgd?au1v()axz7u75hMkJN@0i!kRRAsyumI8iLkMN<_91pFU*G^eF%F%JWxIX(M&kY zCXfr6!Lqo@u556c2B~9U0L@Kd*Z`J?gct(@C`{2+fb>FK0E!dP7zP^)C}tpf*jPZ} z17kyc2y!#JDG(JPbI^N>Ak~oY0{H~gp9I;6&=2aff$I1SmUMX81)5z$sDPNj2$qNR z_ZS#LQSu2y1;|{83qU>rjRCQ-fJlfQHWpBdgt!yd9s}vaum?QS0x}1^6b7kA_yl(; zoCm1hNIX6PmFu7b&_N?0&fwGq5@BNjl>soHfJzJq8^a!` zPXut(d>|Ks#$#~Tj7cns@Hhe0X9yc0vBn6NhuF@*5R20%AQyn*1TA$r(Y zKJ66O$5$QS|0)#&mdF_2Gir>=Mwkli443=E*Wi7)}?6OcT_C7@G* zapicB4IrO@)(^0;_=4jEWC9zDKN8y>%m%p~VGoFh$nl`jJCJM8_PWQ zJX#$Ok%##N)LRF!5&A);JSfLUf?F0KIna6C$RQ508{`vE?t%1J85lq<4}=*AJ3y%d zWFi9tsCH*#2Fg26cw;uBD9kFWve6G)B)sb^p)#F@H4c7S{Wn%!k%0rhlXsSDDl z2bl)z-{bcQzET)e2BXV^Oa}QR0GuNsJ^}TEFnt2au^{yf44_^uLIuc0h&X|$0JS&S zSU^2TSUf;{1(JpN5Tp;?6hxfh%O?up@h6aL5&A)?8srmSa2*ViV_*QSQ$nZ!*$qlv zkUAQqo`C_>13;(%xd`DChziiyAR9Ai76O(}Ks{!duOMuYK6F!HK4Hh(?gGi;N?l&y zIvC;;P@fB7184*tjqb9ssDn#ekRCP`NG%C6jg18~UIB44 z!XA*n5T$TDUY~$uarwj@Tn9sZ0-9??*Z>M+kWV0WG{{v942?K_0 z37SusK`S3%@dNQ8$n6MwKs;oh;7eVgG8kPR;!Y+O7jT$Cd;(fQfUp6gf)OkaaR~zh zXdDKi0^$acUeJgeNIe4sXy%2D`7t<7Kq73+PZ4aW4?+6SO@YJ|69X^aI04DxiW5f` zP)`x$8qj_oaq!;1>P@HsuN0&k4s}Mb~kyVgsY%HLd zg}52r6o@DjLn2F14A#))CIBwBX3@W>pjlvq2@n;GV0lIc5RZWYG=h#$fv^JeBs>O+t| zgejofACyl(G^kaNUdMyPVLk!X@aXa&(?CA40M92te1dgm7Ay~mdjPQ6M+4v4BR!A^Kru8b}=76o?9t zIq3NSq#EH9+-+ea7SISO$TbWMpqWn$8^H3AG|#{QnkPk90n!U`0mvtyRkUm@pxH%; z9yS)xJOsp@upAF^8@eeF6_ELFkcsH>ATeg}>^QnlL8S;Nb?Jj!79e#D44^gi2ooSG z7{T%oS1~YvW}Xo$KrVuW7Q_W0pMcf@v$25YWFdOkSU@8iFg7H|gY+Rxf!YI}n}LJ~ z$TjHlATj*?6CD<9c>e^nW&~jZ$Uacn1(Jujgng5@DDVPIH^QVK&1?Ug{NfSAAt zmWQ-u85lO=@d?O81_sc2Z#EXt?r4Y}HWtvT9Ej^-;vkbT?1B0O)XxFA23;N`2I@27 zjuQnIP|X5T$H1@!#hoCRf$|AR9^w)PhOHQ zE{rJ;O8uakQG^Aw8V00}fdRA|5n%#E1tVA<(r#j4IEvFJAR9nF0qvAvWBv^G3CIMP zuOMuQILPe?dq6ydPcU;dL>}ZqP}zkk56X=op9r#mN_~(z1_sbR7laKE6^vkcNG@ey zIEm9IAR9nF0qs#^V}1wr3CILCX3#Dxh<+FwKGW#ptuucI;iXd$wN{E1H)Mq6%aRo^n!9ch{wPHS{Dl&kpPLnazDs4Hs-fr zAA-cuT?(-Ql;6;6Mv!V)J^_`{=<=ZO0>ue8xCH@n4FdycJtu|@V0lQGGB8}k=@XD0 zpf~}oc4ve3-9dJ+F~5epo{br_rv&0=412(JwRvIv%7G7AGKCTs~oC z0mVDSC!n4l!UoWKC{XGG$wOSlz;F|%Pe68n;sn$~gpEjm+yL_l$TT))(5iZfSs34&fp_JGEcK=BTuA-w~TYtZFEVtD%} z%zv1F!}}+oxJQ@(DxFyv7{T(e91j}1LZ|@Q4GArX3qWxK${}pbpi~Ia11rZsrm-=D zdZm!DGjvlRqM#g)UN#|Y0ku{@r9H@32>qaPg@u8M`6qa;10=`502(bsr~svMkWV0U zAt3b(3@=gQ1Yrln1t6b*N+&jEP`-!x1mY`@X>81(aR7*$5%xe#frx@e0MUC|5P6Ub znHl22D||t0gnm#Mfqe1}+_C`4F))C}r4cG1CNP5KVLdHSeSoe4q!;1>kWWB$A}nWv z>|kSttP=;B#>Na9d4aeY-4uu@$Q*oe0vfYLmj{J0$S0qfp*s>77#KjcF@_Cbc}Vy& zFnq)rCm=gOJ^`7=#tf>NAbQxCL1Rx4cd{{02A9GhUt!n-UTF*R33}NCQVmJNpf~~5 zD4?)I=m*6%$R{6|-^23>Xr~531;hkKusoz3VqgHZ4AE79%!RlBu)Dpix;~w6Y5%4)X~w0|8rS(E}^TKx)~T?}Ot6#75Wy8oLDf1Vn?z zGSO2HNF3%9(3mZ{JS=s+Vg}`6h)+PfDlu#T%R^EM0|Tfph^_*p7vchtPe8pwHs<4C z7lZ6zV+M_iLq}7YL90h0Y=kMGIeL&!Ks0DQE66-_S&$fLLHNX=&~R&P;UnNT3JT$ z90f=X10!fu1DkG;$sjj@Y+_>uweuh%Y|NLz;RmuET^~dRC_X@DqsxNCaF6ORg6B{` zY8V(%*K>hvf`t<())*K;V@GVvpk5rvE=C46W>8BNVmrF65K&Mb1euL43lam>2;y8ku8b2K7Bbc7fb z1=#>{6R0f*l3`#3jV2@H5k3N$3`$Rs`Uw&?Al+=tr@`(6sYK`ljo5-x9*AaSkV6Y6 zkSHWYFfqvCkY!}P4a#sJ%!tiwkZVCEgWLq_akDY+0lNcaHXAc&tOFv8a1&^39ONbt z&B&mH<|dFR%uPx-WEsKjCXmexjG&Vq(ai?QfJ_Ft2{c~8#ta(ef{3s&ZwI>%WDmMN zhzih%6UYQ~S&$fLjVtz*&5X>~L16^KjG(b5Y`Q@vgWLof4Ps*kjX6L>*qA}%bP(Io z^+7~Ic>!cUx-3WxU%mtN*Fb6*7(ugm*mQ$T2Du3|I?l!n8c~FZurY7O5>BA;Wl-FK zXwW)Ekl6@RL87p@!?o6(5nS$p^f54k(g-%)Ad^9Ef{d+zMsFY@urLGJgRT#v0#uHH z%tn_5iQy|VLFFDu4Fe;nWW=T$WHQK2pmf8=ydE4jAhm4Fhrw)AH-W|N$^gY+>lg68+J=?0k$auaCYjExyILJtvPV+M^NLedtxK8PrY1euL4 z3lhVZ#zEyCNDTucXr>XHZji|!H-Y9r*qC>N!v^GESh)aVqw9m{0kzXXW~0l3#6bNf z^j-p}1O%0tpmGnShJg{Zas!)gkjWr7fo71{m_g&j5D^#~pPSHYG>}?Y+~H~kGctol z;UI1Tt&73#CP;k;S{cN~44Nl`0Kzz`6Fi4Dv zfrEhqtwaT>1BDZ)y#`XlzzAA_1QJEp4Kay<5i~mrOG6-aY|Q(?@d#prFhn04c+EXz z1v;p01u`3579@tRO$RCiL24KnLF>D)=?0k$iaXF=5jJMfdKZWY%uOIypzDLV3B7Is zsfEQI?tBNz&k#3(R?nfE4U&Q6G6qJ_PC+(i(7Y=|1XkaH>_OKDa})Z`1&~^po47Id zJ%IKpfZ`6+Mg!T*zzAA#iEcJX2C_eaff2NB0#=`Zbi?u>$R2ckFgLNGr5KP}n43WR z2SDay=mn<%{)ddXLD~f%d(id4++>F*J=rm!%Yt?bf#MF- zE(6)jz=*m_1Y{G$M~n<0wG51))qZTupf!yU5jJMfj4i}=TyBcP>2wW2^~qsxNCK>Jp(?@wd| zhd)RS10$}zA|R7NZUU_XW@84eGl7V(F@x4-L2O626(R~EL1v@Ng2W)}qChNkSw?Uh z4J5vj9M0!^R95R|2sy%mwd`0JR@LCZNlL#PGFMKx-sG zY8V*9QO1ivHo?+3s9nRr2wKAq8wUo7urY&H<3U`EZYx9-)ItTBjV=ok!`Jp*4eGOi zFeB>DXk<5mTDlCN)AAW$V?7`dHfGQ&Lx}C@wn9WfL=-go0kR)m79@smTm`i94Wx#F5!ZeY zkjWr7L3V>cM#v%KDv&lOC}hxWg}DiR6)Q+BEbcJZz=Bc-DDFVxNf0-o?)^aMhK!;z zFoJe|urY&LQ4kR}X3*Mki0ueBfl3Kb-2$RPav-zOWkF*2%1qE&N01r@M$pL+*mQ$T z289!7mj@d&Xsta&gpC=ro)}avLV6L9J_5)s2sdHx!GY|zzAv?A>EJT5ws5kn{JTFptu8_Q~>L9g8a+I3`&8J zm_^qI5e1PTv(aTiV)*J{(3}=X4Fehbug$s1X9Dm2r8Aa=?0k$auX<~*qA}P&mbZ&Hpunp`e1HCukS!= zAwI=d-+{^)h?_t)8M@gZ8Cbss)FOa|6QsTam9h}q5&A%B35G#ELy!sRvLG>heNIpr z15(4l2x@s?(+x5i6iy(OuzD9{D=goE*y#EodO+a`G8OwnK}10$$ZT|3kQlyj0{IoBhJg`ODqzzMG8yD1(EK?Y zGpH2>5rMf66e0+Hpw=EJoIo_l?I5$!WkF*2!l@b5b^>8W(24_Wx*Y`Q@vgWLpa)vz&xdJ+&3HfGR1 zY>4gX`XHj9I0l)GE(;RFm!3fFA&?pdMo{Yxn{JTFAUA*lTM$mo^Y`Q@vgWLp~C4=QPNc#zN`XI!8==va{p!^9k z8(kJ8hOaCD?I;JSVPFJ}1Y*+-G8yD1@Xifp(8w4>gpC=rGJpw=&~R&CI$xv z2ec6mP+kS~IYB*1kQxR?&}b_*-5`@eZUT+gvw`k7WPpgUF++NEpp=8I59X!>G+RMx zVfikB0bLeU-htc%I@t>1CeX|ry4fHZM)27i42+2bc0L=g%fC|m5mv+ss$nfb05g>2z{X02vEKQ(V)>; zklE<6ATfO7zMwV`NDTucXmt!W-5`@eZUW5~u`z>2Js~1&%%Is=$Z8gZKG5g}$W0&` zqz+^@x-3WxpPN8!G>{qwM$oJoHr*hTL2d%g;Mt>n9Y|Nk$PROVWx;}^~D1U;? zMwbPN;VTP3BViyl42+;X8`yM%Oa{3LG$YE!3^`W@)c=5u--AK~T_4O%xK|V68-D_| z(I9RD%?zWP4U&PF&%g-Toe>P4ZvnXj7LOn{LLbOHP~3rNP-zP?0bLd(hOZn4rBIL> z21eAq7$7qtxfWzHD4amE{;={1R5GzKfmQ%Q`swJlLPS9!3^E&C79@r*?m%rckQxR? z(CPKxU)Mg2eFE zcc2*!kQxR?)ZG^#Ghyio)LUX;1g#HeV+PHxgX{vW@dK^WVnjQS4^*at+ytT-89346 z4kQXOm5G59hb$vAXl4iECeSK2gpUxqK_-L33AE3GjTtn{2N7Xo2F>V!*h~y14Cc)C zOz)X(n5~%Ym<5=AGJRqC#`K@*JJVmL-%MYb{xEYhb20NW^DzBmc3^g7wq|x=wq z7G@S@7Ge6q^oyC5nVp$~nUk4~nSq&!nVFe|nUUF>*_YXs*`3*g*^}9e*@xMW*`GOp zIgmMs8I=3Y8Jrnh7%~|O7)luyFf3$P#ITrQ3Byu`WekTHjxZc!xX18-;Ss|VMt8;# z#!$v^#t6n}#uUZ{j6WHFGbu7DGpRDEGifquGwCwvGZ``&Gnq1(gKjQn)?wCV)??OZ zHefbnHexnrHeohpHUp0ZmND=$C@^R-7%-SI*f2OTcrf@egfK)gBrv2g3CxBJOpNJFZ$K)TUV~LIGB7j7F(xu5 zGk{k0f>!fE*8egvf_4ZnGJ*=EzBpAgf=}p0xQ>Z|nK6Yi1!^kverg6L25trw23rOOhIWPy z1}TP_3^N&I7>+U=WsqgK$#9cFj^RDSdj@$%VMbvF1x8~=V+KV=2Sx`5B}OMkCkACk z7e*Hb6$T~-E(RusYz9z&l8M2EA&7yI5p-vZ5W^ORdyF!SMvO5G0t`wFS`0=ERt!!I zUJOADQ4C28Sqw!CRSZoGT?~^LW-;w$0PR4P2GLBN4AM-y!F)*&&D6;t$+R8JmjKaB zoeUC8TfuxW5Y5!dAjY%>%$EVtOq~oeOq;=cDG<%n$som02j+`{Xr@jEQHEMDUmQd; zbux&9(}xg)6oV4e4zP>_hz8rV4a^r~+Qz^PvWbC>fsa9qL5@Ls5H|7h$_(f5C#zjQ3f#vaRvzn(Cry)%*+g+z2}fz1S(5;k@!puQVd*7T?|zW z#SA4(-Ap}9y-a;f{Y(>()G#uzG1Z~*L2IKK8H5>_7_1ninBHTScufEBmu?J<3{ng( znB^9uJN`0?0n}n)W%>XsQ5hH+SQ)%vr5(usOfa{B+zr}O2688e4H*Ytz`(@d!Jx?W zndv>#2Lfd^-tw6N)Y1@UaAEKwQ2ydAa~YTzv>1dKJ~0L`yD?@mW`Ik5TxGrxgAao* zV+vzBV-BcPz)@0z>oW!}hD{8|Q0|oX0^cbgl3ZDo!w?6)Q$7oPr+f+cPWif=#F9LQ z4$z(Q3{yaN$}`LZ-$w$u<(&b}#>N8e`2f|mAhp=!5n{MhGUg^0WrJ5Hg3N*4JI}=c z&WT{VK`jBW9FrD=&$J3cv-N;(2?vceFn(g-VK8CHVklrJW2j+hV(4J#W0=A)i(vu7 zGKMt_n;3R5>|;2>aEjpq!!?FG438LIFuY^Dl9g;9&qfYFT6 zhS7=9gVB#MgfWUSfiaCShp~vUg0YUVg|Ulq0^>B$m?9%9sLjC$b`_&4h|Ta0L^4W) zNQMFs$*2V;8NehHh-CN(A{m9jq$rpKg$g6+=5hu`Mo2p*4=fH*1MX2kWx=ZhLHC?9 zfC)GWG5Ie@7sEdg$p~IW#V7(|GaLhvjA~#K;#v(5o8bqDWCX9-0UO5%^${~joZ%*j zWCX8;V3Y*2!L~#E$N;{no#6vW9Ar5IBO~~PBSsaF2*ekRU~?G3x)>2Y1+~Xi7>pS} zr+3>j2r#%XcrZvZcr*Ag$T9da1TiQugfhf3s4{$F_{5;c=)~yCpwIN4={*Bz?vI%< zn=ywm7hDg5+zs*{sFVYTFNgq*i-TOiPzGLiRl~r;z{McOAj6=jp9yAP0+TPmWG9#et7PC}P+`zu&|$CuyWWQ(g5eVr zXkQy6BWRWjbf+IEPC?hv+c4f^U}TD5;9;<$N2+98#JGZS9pe_pU5p19k1?JB)xk`= z7#JCI!DK0zj0BSqb`zML2PVsq$PO^O0Yoyq1(A%%vT0zEY%mF7CxO}dU=m_-F_?|4 z3nC6tlLMCZVPaumWDEwA;b77mL^50j%esNdWRM6WL?uMcWUz=7m`nka{$Mf)OhQZx z0J9UpWGt9;0F%eSW~P8iU$BS{n6v|v5WhfdDFUkr1&dDwlObTz4^A>M@I%{8E(|UV zQVebkZVb{49t<7~G7Me}-VCw~{tRIZ@(d9Su?*@A?F{Va2mU|>Js9vtd4Pq@*Zfk`lifuSzQKUm+W`*&t20|Vm<1_p+NlFLdI_{^B*GB8MGFfcGUq!py+vPI4@XJ8O_U|?V@PERZ@V31%?WMC55 z!oa{Fke*YSwm<8_H3kOdKMai9RWec&Q}$JN=rb@d>M$@cm}O+7CjMh&KE=Smn8Luo zppubWQt{Dlfg%F~69)qW|DT-v|(00}}%W0~1J;fdQnCh4J58 z1_q`Gh&)3Ig8)ghGsZF4Fq$$jFmbbTvNACEx>bGVeDN zGtYk&MjaMLMqvd8#_1q=CKje$ppal-V~Su<0Es zV2WViXNq7jV2WU{Wr|?Pfa(p0st4(fV2WTcW{O}iWQt&DV2WU{WQzFzohgDrk12w| zk12w|oGF4qABvrrA{f-6W>_&rFla;7NI}Ixc7xQyXpnnAc6l;IFyuna{QrR|f+312 zf`OGOf?)wu1j9C_2nH^u2nI){2nHsm2!^Lj5ey)|nKDH%cthEqOc7vx@=Os7)=Uu$ zK}-=0Ap1e=Y-l)v*bYn)48l-7IZ%K5Ges~2Get0f+zxUtJ5vOMG}O=eOc4wxp#A`v z$G{Z9upMfz5K{z$B2*p}&g+;W7`T}t7}hXFFt|a(9u)4Am?9XqFhwwc@hgW>^{HbCJ93Uh226egf}K-LFhgW>=g+d$(6WEMIGg&zkr9zbyc z!=QKo#g{ZR%~@d5;4}!bACwlc(V+CH!4$y&@;}J^pfCctj}Q$?4iXT2QtSU8jqm#3i1m!S`8Y8Fgwv{6KFmInFoqvP&lL0pu8^v z&99(501Ag>Bt9rlg5n$(4a%>eJcCYy!W0y5#L}Sh1LSv58Uw{Mhz8|(P+5ac+c8D_ z2jwf6U!Zn?@&l+W_z%hhpmYdI!=Q8ob34q9pm26!ieO}9ieOm86u~f$DS}}mBu_Fj zGet05VTxb?<#kYbbA*B6|1JiG|IZj0{ueVa{4Zr-_}|IE@V}XX;r|UNeTISI|4Igi z|1%jF{&a{pFrFJETZx6$SolM z!Dx^=P?*DLP+Wt;0G)=p2jmZsUqNQU@*_Geip71P`X5VK3{IzHh=bb?Ab*0~K@JT{ zPoQ)FqhbE16%BGDDBMYoieR|L6u~foDS}}lQv^dDQv^dbQv^dB zRBQ&ceb~zs!7v|M2Z7o)AbUXRLyjqe0hBjEX&02Ld^bnG3=oF!&J@A0 zmMMY()W%)P6v42HDS}}IDBUqI{I5mBpl~UG)~U7(4F5rFkXRA4oe$Exg((7DAA{P; zN1$!wXQ=fx11Pgy{E4F5s(FgANY=7KQD4p1HLz`*do5EL&UnknKRKLf)*B?g9n z_6!VvFEKFu3x)9ieqdnudzpdZ?{5Z%e<1y;3=IEnGcf$S!@%%wEd#^9Gf-NGf#Kg_ z28Mq=3=IFCF);kAXJGi3$-wZhnStS-83V&VK?a6@AiaVN4F5S882))MF#NmE!0`7U z#GZf33=IED85qEHIF#0AVEAXq!0>Mw1H(TF28MsK3=IEHL&X#s82%YR*nj^sF#HpT zVh09>zjqlJ{()$a8)4$&3=Ds-GBEs$W?=Xi!@%(GGXulFr3?&zUobHIlVV`_XUxFx zZvz9vzf=Z>f7clp{(<~c#lY~74-zII`tMB!hTp3|{m$QyK;)kg5c!u2L_*kqg28ME zxd6;o1d+ctfywP)@(h?nV*imw5&?_<0gX5?{JsMgzXv9-gUOR%5+ZU6%!ZKvk=UTo z1%^KmS3$^nknEpaFsT6|e^0|8Pk==*$>Zqae>g!R$maiU28sOM2O|HpfyoD8@)d~u z{TWPd1(VM}Th1_oY+I)=rJb&Qi37cy>O{LduKWX=@Hw1??9 z(_Lm3W*%lyW@%;(<^wG8EX6EyS(dV_X4%ZLo8=J8O_uvCFIm2_{N%HjYn7WP_ftVl z!9c-E!9}4!p;Dn!VVS}@h5d?RifW2_ih+u8iZc~gDehK0ro^Tsq$H=Lt>mGUs(MOY zSlvfk@b&X=H-0ny2geWtFM|TZ0*0lG{frA3*E9ZNk^sABH`6hu8_W#MY|KK;(#*=t z2Ur+bidZJFEMQs1vW{gN%K?`2EO%HQvAkpX!DlbmAU98Lfr7Atfr2I2JtYba3JVoh zC~Q;|R#Z~dQw&fHR-B-?QgMUg5hW%iekCcedlI1T;d}l3+x6d!|Nk>E{{Q;_@&7~r z4>B$DBZNVB7*GF^Lie28IeuVJsqXC}JQz4GeP_79oi) zVA#g6i{TIhIK4A~b0k#u48u7F21W-EkI|74oDUf@8MDFs9L8M6Jfj=`S6fx(f%iNTq{g~647r zhCK{>nVJ|18B!Qh88Vn!7|IzIFyu32F>PQdWyoZDz|hVxlj$x)5h&yt(iqB^t~1?Y zy2+T&bdMpM0hD5vGwft&U`S@jWxB)Y$aJ6S215=*4O1&a5*I#UxWRLj_YEQzKIwLo-7+LlZ*}LnlKYLqEd=hF*p# z3{x2x7$!5!W|+e;i{TSv2xAmO0b>|rIAa7uC1W&WBxC3f1_mAP9SocS5gQp9`yzKR z{%_sE;3B(|fs=tbK2CQB1EY?Df@`MB2F3*49Slr5I~W+X6m@qnFzYC|ZD3Y)3yM&V zROnLZ@=WPca8t-gOxeJq3Z{c1lvBGR^%XWS1V>~lY+wk9P~6}UDGg_)Mn+oc?qFa6 znZp7$rz=vyO(6?vLRMl*P=s<PKBD=akW(G$n zD{g4$>XPnKj)d`dFdRS=U}QiSaDWQzU|?1Yj@ZDg>birmAs|9oaR+0AvZ6FdKv_{) zF;ZGF(nWU%1E-F6aD=Oiw4!39F2fE625p9242%ri3{2XLyBK&tqvYC*`x$r`Tp27F zbQt6rgc%qZIJEaO@G>|tm@#NE$T0|kMHu!oFfzn2cr#ctXfc2)HjpAFhCl{q1``G~ z1_`jD{S3?u84RHe&I~#Xa!?T#20I2L1}z2!1`((TD?D%>1427Lx~1~~?C z1|Fyyb_PQRH3nq{QSfj-$Sw{BKL!T|BL)??E=~q51|BK0Euujcr(~B7{GNg>|)?!;ACLe-od~CiK|@<0t`Y7j3v7m?4h&+lrDhM3!pSu zT`5#u=`IGaIxt@ZtlxnFLKi^k`A~WRls*ro^BKgz>Ju0w7#NFpG30~jl3fh^Ai5OF zFWtp3AIxVEXRu~)VK8AxU~pn6Whh~AVd!8`W$<9|X8^VNc>Y^3@GyEZurX#curc~G zurU@guraYP@G$LS;9+_K4p1Wo2&`l1Vq{=k##F$p!|cUe!@Pm{8Vdu91d9<%3QHX; z3#%9F8a5-g2DVr1aqKfVY&bS??Bh7a@rqM~(}Z&oR~*+WZWZn(?h8C(JRv+ccrAF# zcz5t|@R{)S@!jAz<8Kq-6DSgRAt)nQB)CS1ODIEVgU}~oDPa@g7~v-2Il_BHtVDK+ zN{G%76A^0@7ZR@${~(bf@k!E2@{yF6)GBE$=@l{zG7T~>Wc_59$yv$0l8=*rp^&A} zq{yKdp%|e!M@dF$gEF78neq#jDpdv5C8`@#Kh+o$$JJwSbu`X`M7jR~4;nhu&d znp-q~X(edoXw_)-XwA`P(H78_(bmv5(RR@G(cY#Lp_8Ihpi`sMp)*BifzBG89Xbbe z&gk6Gd7|?{=Z`Lju9fa1-FLdb^w{)-^yKs^^#15`=!@tp=}QA<44BtjDMN1 znN*l6nd+HZnYx(n7_y>w7jjHrH$(*}Sv) zWy@w8Vw+%FV%uQbV>`okiR}j4J$4FqOYAn-?Xf#ycg603-5dK1`+E*?4p|Om4owby z4znDVIr2HaaQx!L;Kbu3;iTeZ;AG?E;S}PO;4I{P!ug8x1Lrr+KU`Q`1Y8na9=W`8 z`Q^&yDXs^x0t>g4L@8s+-Tt;DUtt;cPK+Y+}8ZhPELxLt93;P%GthkK3tGmi|9 zSDqoBXFP9sKJonE`NxaHOTe8YSb ze6xH@eCvEWd?)$N@m=Qo&i98OlOK z2wf1mB6LIOzpz{ z#OcIMh`SeW7T*xx5kDb*M*M>K74aJqRwQglOh`PHl#=X{{2`?yl_51P^+j4zT3%XJ zx>CAc`lR$(>5J0WrEklK$@r7Wk|~fWlc|xpEK4e@D{EiYr)-bxc{vI>OLAlKWb&5f zE9I{$5Gj~aC{Wl^_^BwNXh$(maa{4S60H)WlB$w(rD~P zU&X14Yn42e5|t{I29-9IE|or&5tS*GIh7@q4V68WGb)!^R4G*HR9RHHR0UMURAp3^RI61RRohj2Rfkn4Rp(XTseV!YrG}w~r$(YirN*Gf zrpBWtq$Z&zr>3T+r)EaYl9~-QdumS9T&a0b^QPucEl;gPtxByytxc^*ZAfiGZBA`P zZA6{#*D^wO#)3;O?#RTH9u(n(_+=Kqm`$% zp!H6hK-;o*k@iXL*E&o(Hgz&}rgdKEV(FUI&Cz|Vr>s|~_gG(2-=+SB2@Dg`CcK*X zYtoX*ag#qyF`Kess>jql(-Nj#ncg)0)r^E0S7tn!@nt5XyD*<`zQ_D&^Eb@@vY=!;+iIcJa;vpgo2_acam)+gIkwv}vqv)yHT)%IiC z|LkztF>5E=&a|D!cK+C9vTN3^W4oU1X4`GHJ7f2%-FNob?OC?x%3guJK6|I_6WCX@ z@5X+s{RR8??EiGY;=r7PYzGSt798w3*mLmM!DELk4p|&(I@EM%)uB~~9vpgbnC~#( zVUxoqhdmB^9F930b9mO_S%<-Es8H(KAOs9Q|-i?3mawuVY@vYL3+$n{jN$v0cY@9lLbw z(y?F1ejVpK&UakrxXy8h;||9ojz=6{a(v103&$@Ue{uZ938@oOCvr~Yoaj2ybz<3x zWhV}uICSFCiAN_{PO_X-IH_>5>15N%11Arh{B!cpDXUXfrz%cWoH}#r%xRI+BBv`( zSDapTdes@dGkRzI&iI{4JCk;%<4ngH5cqKB!&$zwd}o8s2A!RDcG}rrXMde@Ip=aN z>s;2khI0+)=AD~&ZqK=q8Ff_UVf*}_` zaL0um7j|4^14E~aAQ*EI1RE}b;I@k(_~PP=i!Uw-fT7tX5KOxSf-5e8;FU`t`0vuc zOaCtGfMLL85UjWif{QML;DO5^c;hk%{<-|;@}DbZV0h}vsVk?hvVft=RS@*K3WCe7 zg5agAAo%0zkE=hf8GvETH4v=327+s@f#8X2Ao$_hhif0MD}kZUbr7t&4uWg0gW$F6 z*REf?;RA*Jj^tadT5fI6XqLY6xiSOj)3FkApNwOu22 zFfiy#?_^+L;IoU|!N7QD2Lpq^4hEJxI~W)Rb}+EtF)%b1R1{QI6jW4TlK7{>xZqy` zGtZwdHcV3(Knqw7{Qu6lkZBhKD}y+LGpN}v!5|5?1EiZDZU+;{4kiW}kR1#lOW8mI zY#>W_GVn8Se%Z;u%E11`z))4#+?bu2T}jQ<#LV1|(bz~#RD_M4kC9PAP$^8w!%SI@ ziHTK3146xIWIKKO->*-S!mNCJ(h5+Df#LsuhRci>7=JQ75mIB|TE!s1#=r$0Fk=F> zHJP%Rb}?`>h%?OH#lQjTc!S-`A+Uo%4DMbIkn=c@+{*(J;6W1L1_^M3Jg|cS>?3iI zfH+8C7Xvc`2Lm_QSY~}t*m8V<1V2QKMSmw~MBvK~2EGfB$Pm1+gMnFK2ZPWBNbrkZ zFfcS%Ha7-iV`gPWV|HV9WiVFmYvS(JYvk_n@_gsXxXjZF&b{f-;c)Y>8`CZ@gMpbr z{C_`_C$lz#DuWJ#F~j0r42GcL0o_G#LaK*ad|wcQF_+NHQo33RxN$it90|o69kZ3#+S{n%FVf zGa9qYF^aRRsk4jAF^Y=tG4V4hGmD6coAWU;ny9I>+cDnvNR_sebvM!xSg33tX(nhR zlT9Sd!63j|nJJYiS5Kes9joiV8QP}2|JZyP7});5`2U4z0@E=Deg;JbRR&E4 zO9pR-ox2#sKm#gZZ;1))VBom0g8@XVLTPm|c z(f06A7Xk&L5K^ck7k%JNtN>D>019MKM%>Au2@X&$22BPbu(?74I~gp%VxZ9k3$U1i zz)l7!u$VN16jIMN)NQpy1+_da#YJQcT{Jynb0Rwh z{mhNTwPm%<#aY=DvRO6Pawp2LvzYKm8#-$!dD>~S>e(x4 zI_XOWhsI~}|NGJ?6RWM_>7`?-$m`;ux1Ci&K~+dVp4-uk$=B3c(b+&$!cRn<&lraCk)ICa=REni%VGrg)CvU2_q;385!j4A`J`~g^igRHTAso7%wo2{Cfi$ zPd)d)jLC`V2ZIEID5wyYWRQaBW!2xoAfj(zXl`Q1WNysI%+JUsDk8@uuB^v=&M+X| zJk%)G$Bc`QO+wQ`(O2G7UHnG)lD=XUrHG7D`%o1%(}YlW87Z%*ERY?V|H~NXVzEP5 ze+L7bzJVd52pvK_NMqnW9R9+SGU95drwm?fs%NR}{83t!S-1h>T`5pD~}9t#F@ zCL<;l20jKs(2xy3g8;-YAUn*}&DG7t&5ha3#o5K#)hC)x+a?Od$>Vs83V2cGS+ z`~QW>is=}GFoQaSB}4Kq1`W{gI5@v*fLlL17(lcLylmhCrCTnnWy4Me5pbQyC9so0 z4qV@9fQAkshUtT9L^hb$>{!4a<6}`bGP7s2V>C5UQ&wW*X9VYBb5MDT>Uoy*cy1Xz z*El;UZ4sCvB+SBW?F6N><)oOHSmc!<6i-#LPF7B;zdnrisL3f3*An#bgVE1L1z7nw z#buxr133J&7#Ns1!EK)CT@37?DF~!E!l-zVBaIR4Z&1y`0`@l>0}BHq*xzgdpcWgb z-T^iAI4>9&8k-vnE3>Pc8#5cTYw?_j=Qyo-wK;Pqj|Y><64SMR`#ivIk!4_DQfE5G zpu!Nmi-8$5xq;*s2~ZqJAjJW+FyXU{+{vH}b^$YkGJ^!z1rh=~8F;~BN(_wP>|$W3 z$!M->$82r}4t72!c6B>uV6?gcY?VWt6OSq@?tn)U~`^ot4*t{UGuG3zHhtF$Qaf zL{Rx>!(fZ#2aGyK733*ZP?fTa!ID9UK^5$JOK`go)RF>KDV$(`$S^Q4Sb}9$1$HtR zFmQh{Fl2<*&1#^^8O1x029dIo9+SGc9J4V@oi?L6qpC*;7Za1cv8A7sxsbM*vzE5I zv5c6Ood%<+yQ*uly@8vt5|0a)q>7QUM>rP~lcQ@e59368GY$a`Eqzl}eQ`|%ArTEL zRYhw<6;2ioUnkulJ5^C-9dRuYB`H1!doE!PV@o%1`=6hIfk}&L7XudqA44=KG$5tm z4h9~0&SC`x04q|gB2pNrm|=ys92xa@GVp-Y8`}j)=Y#XY4hB|%9Spn|3=9>`70nqz zNlTesRZ&=(F;M*9a$d&H{NPOPO!0pw7|?)HuOYM?^_WTu)RsWIvi<*sNt|gHgCv7C zs8mx1O$dUW2WnO$`gC}5^)3cw1`cSLD}zcoWKeaAs)P z#h?wEJ_Q?~4XrakvYj21R3?wJ;T(OgW-p3V@e#x;_B@<{30t9j*!aR|B@ zs(Dx{2fNEz7^?Ab2zWZ{_}i$sxmfcFaT}XMDaLR+BO!iWLkI~Y=zh7tu+o%qg;D811kdu0}H&}#%iv}9>UFdo%>}(<@Z>1|0?PKg`smz}80NUt;QlQdy#r1bE z$XwXT;0W$1sxZian=CsRRP=W;_=3eG85|jW!DWIvgD-<4SQoFrP6mAjNHc3EgFU$O z&I+n%Oij#TZ5uXrW@U3_>17Um=JAJ#+jv#QRb3D z0tU{})+T<&lFUrDZhS0!7JB+tVpJEn0?&3;( zd_t^(Oe})3V%mD#Tue;z1yX(gOc_LNzSCLJX6940Mzg_+)u) zJjAV%yk>CA%S*BAxEV<9784fHmQLlB5$CtFx8W1#)KmwR|4jeCGcYg-FzsSsXW(W? z0SzxgdPJb&eFp<4JWXNL1T3IPU;(8mj6Mjck;2Nr0uEO$eMlt%Gta}1deR|dl1z6BdUqZ~6R6DTX1!#f$;jO@Z74yfg;&B(s^VNjTt6{EO@tbl@LpuxYd zzid1?S(%tDP3CAHwY2A8Wj59AS7X{0?&TULz``!3q$jTvV5{n3VkXBa#HFV5pV8S+ zS5AmeL-{!aBZJ@nFHCMs#~3t0BfRnqS`6AqbupfP(+&nuk4Y3^!s6f|r>CwW;wYkL z?a9+rrIDJM?58iIYauHkrXeR(pOYZ2BkB<@sAQt7sOh99!N9~|&cMKA3R-8tAi>}b z8n1(lI6%hf7;(oEbi5ZlC=PPFIM^3F;4wB(eIpEVKPVQo8O@ELJw0tk<~6I$gDqrq zf=fLQo>-|Oz|7*~6&=g8OUWkKplVa8g~!bVA$?IF|G(Ej<*q&h15*IFUltB3Y#}Ke zZ5#!WZlDPX>>@^ioeYp38K{JZjJ$H_gL-739tFs~pdN*Rp|P+cI}GZVGOpqIw@ic4 zpXc93O~x1=rd=LyJidXtWekiAAh&?pTb!U0oCUO04JnSH-7wPKg5&~b{ZhtlJpbls zFuL>n+iA+Q%j2yFXazI_BZCvP-DSj3wu?cJ!5G{!f`tRdm^5PM0Gh*%KpDyil%YVw z&N~^T!I?^rK^oeC&;t$o2<&7~2WKn>20aFKaK_RDm#v`4R8{6-814QYV%qiZ45P_kP+yRdL6d=j$q$^Ky+LC^ zsOcG_q(-D?NM8$76hl%qWFQ^Xpn;Dom@Bd?GaIvOa<7kH&&{|2OgS-`IXV43U>oCl4^V#AW?*1yWdd2B4C)E< zG4La~0cs^8{y0I=#R+LHfTIf|{-6yCKD)?W3~Zn^hv4{Q12ru!7#K40GlF8q*q+gt zQCOK#zE(A;G{}~v?Ow*eYulq3BWvz5?fN&h@9w`F|MEa}DkFm*0|VoC@LZiKsKLnw zo_>L)FFbjCCj&D$WQ;)xf!(h(FoV$>6awHO9R@}QDFz0nSSHXSwZdHt%%Fv>NdCs~ zCe&AmfPf}saKQ!+2xyiE3-Ai;U|_lcn%&sJzT zdJGqKFmQt=P%ju53M(U=cb`4gr?k8kOfp6NUBvkd{tRn((M2 z0~5IZ@Bohki7|wNdhFuRVLH&fDq<`MPbvcqdox0N%-s5*0b@{I2CC`AV5tv08LZ97 zENqNu>*$yMj0i5z+hAn3#?qdHjoDalCDX2G&w|>2*BJ}VbX9~zwKN$(Ve17R4_0I_ zWheyA6qzxYgTodyL!<<62S5jb5Q!6-ZTajXcQZ(V7jc5d;z1MW5*KzcNHg$3M@&Ft zLOS4zM}|QM>I)WuoeZE3JvbKhAzgUb_%ORXBWShPWR6$GQk;)!1P!TJJRKz0JIqcxr0_}Pc1ACkg zJkkhi7=qg1pmw<`13LpmPE}wBgW3gfJc8z@jg3Igg~lios3j=QuE(ehouq?|%`kFB zm&@BJMA!!<7}|OV`=~m_Sm=6MXz@VT zB4`%hz>twySr|MLHaRmW^A!)18V^&^-#(@y4`^G^^ZyrcyHuXR4U|(97!;Ah6xwM= zq+R2y?mzx$r8O zg}Y`)axZclYU|_0d0yQ^W zKm-?f*##_2potaXR(4Q=V8@yub}+DjCNY?er5Qnp@nnpjjxuZI+^~Q9n0EbJ{O=1R z4`VE-oMr^~0c)9dF$gl0gDPer24SS|!LSpWK@g5WBtmEd7Fy_lV+y?Z<^srASXs!X z52;Z=iwi(?zW~UY!p6+(#-Iuh6r9S;%FKGUo~oi8i{nH&jN`pmSMqbrX4>_y{66ER ze||R@C;W9|TngHt#Q6UM0|Qet%sa38h{X|f(AXH-UYW&m>KxN z*&kG#aDp2bpo)M8+U^8Z1cIQEd}Vz`Wqw9wMrLDqMsVweNi@R2g{3S%fl+y3gq;IR zZdSs-H@#D*_A+KL2DNu}wf|cVj_W7}2Brz%_GJ{PvOsNLLX$fpn4!%Iga9JkK{Y-T zw2%f(JTpQk8bH&k#=>xSG2hTz6X9;nQrw*M@1#DX0OP9d3m0zx7yIueq&)>XuO|_l z_JTnsqNY8J{D=stouJi0Ul8qG&?pBBcs&QGS;helIq+N-qatX$T9NV3KTaOTXaBl* z7_adBlVY6d#iZfk_4fv-&AH%z8Iu>&4+eGyq|rbI*xV>+9tG5<1`QyAdWEdu0VHu@ zNNak*G)57wi;Wk!x|o}6|NO88nYZnK8RKr)Tq_giTq`THu`pxJG5ce%sa6I?2Cn~Q zj9b8NP(>-1*!6cXFzJI@k0ATm1wefY(CQOLW<}6kp*iE0Y5(4EU2MF_&Gh3>oh>tm zEhJnW8C98Vz~!7AC|q%sbKruES)I{XnDKW9%NHv~-iT?8s*HjE)+;j>{R3~TWMp9a zAIbRg|3b)|Hhk_FG)fBEkO7+07B^R9XX0VJ&9fX<{yk;#WK3q}W?*Je2Kfg*-^>i^ zIq8EoPl9?*{9p!XPF$S*sh5c{(+BBwpzR|}3>N>tFex($Fo-Z{Fw}y&1DXtwFm)bGfpB%1)Jjs~SFP`e8h5}=#|@inMihJ=KHp|CN^ z{G1wSj1S!0fDVs>Ru=LzvWac+26fO_nJj4A9#Y)^ZMh>ni5$V8u`*$BoPu(yEI6mKLKg}lH8G%T3BXk;Xt0dW zz|&At%OlZT(^f~C-I?Foz$uuIil2TO+(PUl`=f-LMs-8cadWev{phH z9*dA=VM6eERU!Rd4Dt*@;64LnKnmQZg!mD%PJx|G1hnu88o!Lppw%OG%%&!KOpKyQ zSz6wic4`j#Qj-2ts~Nduj5K9*HPyw;b@Dm=lDHY;ifu)>CDeIx3*1UW^@Ws8l%%bU zl$beqnWT->#d)Q*<&`|V8E?l$a50N3s0jTn=1} zz}irRV;kyy0Z?8B4Ulq!$Jy8z7{F~Y$h;;8SPZlcmIoZ7pczgPa4><=mMFBdEO7y{ zHcp?>TpTp=0-DCKW@HC1d}ZciJ|ZBaq%CJ_I!h>N2loyk4kxR%+!v%Sa$k&P<`Y-C z!YiYz=xnfrg~{7F+t|r@uJhk3qH3~&pgM(#LH@rExJ;I3FlML%jRTu7n1Wp*Ca{A+ z3lz6}uz4J5Q0kRtK*TS!8-Wl&_!v^9?O*^ELkeL3h=CWyf|g-&Gbn(|eb8jR76WL2 zALKh||G}OSEqR+8GxISrgI95&md#gcEX_n54BSKbL|J6RT>^rntYVy@Wwc0(y@H(# zp9;GGr>m7`I1eWiv-uTw6Db*wuo^p$)Oe%fL`QI8U6jNqCnYant(9bE9pPcdC(LaJ zDz6zCtQi=X*qNR%$TMVvvLb3*AL>s;PRA&vp}he_dl0>p295rM%4SF&uLU&-Bv8s_ z(Cn2kqBv$|XI9?sXT>5LVDIS7%xvOk%*>>vqhu<^A}A!lV&DfVgzY^1-1(IS|D9ko z6q4o8GnJEK6_r;P`}dfEi6Q9!7ba<@Hw=Odstoy{xkxqWXfJ3kk_{Bk;9e_6978K( zut%f?Kx?+yzktRd*uLyw0P#UN88S*J2TscJ4AKm8;M!IJy6DrukP$S5jIzFq86pDe zZ83|3`}>R`3ZNBT3UUxCNll%Z$z>NeBUiZiQT=FTV+}>7atQ%8K2C8-DD}5iU5-nX zlQF^hpB?8aoe)JWDe(4mCI+kjI!ydbZy1CaR6u^^gs!H743Z(%vSSp_&}hZTu-wol zF{u85Wmq0?yA)Dh3p0SiM1}#f+D(rMmQ59z`Ix~gic$Q|D9kUTsH5O$I!`F+DmSBY z1~Z?y;sS`bp}xPuEv={QZmv?T$}&)~QQwIr0lG0F^GH4SRCC_(%Epv(+fT@7keuz{C%f<~AjvY-kA zB8HNl`Iw+XJD`QU`i!8W8&p}b^D#nGwoHhlou`0app!dqtG2tkiL8{eK%jlFv8cAD znwhAW94jP|+jzNJiJKbh3e0Az(sfr?mQmioud1OVuB@RbC2ghf?=h%cV`Rww|AmQ< z=?Q}{LpZ1#Ap&mr!OCuEe-05g(7*!woKpbQ4*|8IK=I834g+2WP6ki`4GIIu8X-`T z1>TE+l!kw5Dlsw@Y~yBRZ<0K#o1tQ&F3+PO&o0EyUXb}PfBY3}s z1(N`SA;WUe!XqOFW2Cr)wgM3aE3|uw5P%jZ2mxdtfOE16sI*o=YHJ{3cNch-1ZZ}w z7PR110#v#2F{lU%S=R1g;L?|X6x%Z3VjI*u(E_)*jD?NaA&a`86lenqvog4h05tZlV6JoLOuwoMx6;t&ygEp)~!i8C10yJv}3j-w2tAYK?%+72b<|l%yfM#N;!d*NwFflm% z|H34}BmiEQi!sK{1uviRw3I<(+@MqoYA=JzVo(bTv`7lHodME>!nXF7k<-ZANJ`5y z$f!yn$H<7$!vXaXEWqt3Xy2AV9|7Ti zj7kW@|HSkW@bwSOjhU6PwVxQ#`Um`e6@Hm;KV$9NnlLiLI(4uh0F900FfcIrGO;j- zgI1)7F+g^@!OB|b>>a|#&~ZP605na2BbZqLwEhH?jJXANGVpCRX^ScT^n&$K_Pw?UB-jXUGl~%B7Tz6Y@%{% zV*frfFfxGFzlt&mFc^c{cI?o-UoiJVM`^J;545&g5nM9xF(@Ln3fRG7EDU_$F)Gj= zE_U!V4`{=SB6zY2lpEEcZCq0mHGM`sW=QWw3^J<@-qj%wUBSZ0Zh&X zEn}`Nt!xvZ=aL|6&MvNOsOaprs1Fq+ML74;Q#*%lMoZgZ6%-uJF?&g8_fUE?1mT~ zgw8r*4-n8+H%R9kv;_mS$&CxVRS(jg1@$Kcz%?&u#g{NRz>q6W@N^Y;rv|hY_+D9^ zk;!H%cczpitGJi^Rqm?}A`jIIm5ntOc+^zbB{&#koJFPDw>kf7;+bX?AgL(A$-u}E z{QnD+JQE9p978&&5ReD=DPaD=C^0dbxN@MHQVyx6M9y(S;Fx7(5CSi>tpRn$C6M~y zpkZe4`bqFQb7l}%nXw;I39w-_(!>0~m4JdWqs71T$W3%c*}s1v^_tWFA55}LTnsV{ z0id~Z)VPrWxl{(J2ZoWC5Tiq|d?X_PTKNGPUK9tnx3aulE0M zOy*3S3}&EJfTExSmyqgVjAjdTsUspSseyc?hU6pU!T?w#40L1PD8CV)x@&>9uc zP|z+069xuwrmNY(U;-)~#GzdaV`k7gUvRWAf}#Z)OLk1ACg6Mss=(PmD+WPBfvvi_ z%*@tq7Hr~TB656u{4AC(7R*ed;xY!xB0StqJp3AJ<{=`A;@nKEVwPOy`U3JIjH&-t zDoe{riwTLCh%kEnTPZBdD=%#kRbZ~>At55=rx(4@)Q4MAL)Op&R7SG@|H2f=B*5U! z(7TJl1G+mBmPTbkew0ND1;WAN4ASC^2o_K~bq9m2z)l8naEeuCkOgPA9Smv$I~k0? zZ8>LwoeZ{MSx=}eC^MRxnAt=2;TRi%LI>1;VOIz5F_vQz1+Q%v6=CCtZQ9{u0u94J zW@#Bg;b*GO$C#DO$l}SwBqE_?qAbYB!p6!!Pu@w*MP62cpP5}G$Oa~@Yz&fSXXBru zXk_jzE~f~V<|*ftmu3@`3^Nlu=eNwwGs&4=(3akV43FD}dxP z^tAQmwwDuEl?dK3px-Ck`Cdc7epsL0nnxzHgJG}MlT?#jEg}Q zT#nU%8_1ww1LY!c`2`!VFhfdZX6AO_vVf2A0%VlJBbZNwSvJt#(TADY$j^|ONgLjG z*Yyh%X#o#Tc!pMi+K7B|B8)o!ZVO5yy6}vAfBzIEfzpxj|8GqCOacs=pmfBHw&oC{ ze1Nw35%~?8Bf)hoIC~-T8)(%fXn2N$K>?|k2TE6gM9031BwHm7)d;n_0R1xf#>!yk%sS zh1nbey|u!vL_lKyW-TAV22t?lRLFoFXc;mndeuO+Gbk28EkeL%6@z$+T@>s$ zc0NXaMq~EBDoTt@EG#U7ViMd^0$GV%i4M*pJQ9pdtgNiY8tb|Cv9U2T@^f*E*xBpq zsY#2-vGeZb>Qa?vW*3x|l-5v?DUB`P5&3JN(;p0Z+i%cRFx${@+$xr>1rbljkz zkR`)z1~vu`243(UQ_%b}!yV8>IvY6U*Y0581oe{{1a>ljnm?e14lj7RyJiQ27^oUj zRZ>$21jTpOwc44I;z;@~R^b1e!sWX;IraM6`gQ)T^^&&VUAud1kOr6JCg&Zuo>%f;Bo5#nhhB*MVR zAoTwWlO5AB20MllP&%<^Z~&zf=-`};(iE7eh?uxByE3RK;$z}R zE_2UIIx0Wr3g(f~Qxs-S<@RG`Rkn{Z(|0$LVRh%Rv-S38VcEhxmx+;ETvdvR(T!Wd zPJo+Vi${RN)X|?;UdKv9T*yU4Q`|hpSxrjQSW-sICM8-_Rmg=ylv6@qU5c5-p1Vm{ zP1;IA&5(f+)H7o02JZzZ11)qw9eaa@0-}EbZJ;9rklU~f;E-WvU}FHSB>|0Afu`+2 z3*bP@K0wROc%X|O`N92;9SoplAdmw>n86D{7>&X6B#Jsa6?Sp=HHTNSe2@S4zmI#D z!fx(=b}oBd7|Z^3fw0RS7X~H46*1Ciiy5$FG@;C;Qe41u8e6(`W)qTs^R3A`(UVFv?f zp#``qhK|^Q0|K-#2~_p&U{C>Xa{yJ$LJZpAo#(q4T;VK31{LVQq%?yo1Lz=;T?{^O zF)IciaMfmDs44;(2Qdd1L+}nLv=9aj5rO)lh^1Q0pysit9HTk7tIDVjZavF0$}x)D zF)|*MH}}&sh?g}MwO6xo)6=!lFqY+Z_LP&AH}}=YCeEyDW5dqFrfUqNh1DGNq-5ny zM8(aul{NT;c;rNZ0Y{uJ6ml*^Zlo_^w z7TKskHxonV&=__za58}QJhEszvNC{<(*_-o%T(yd%Fw{Tz%T(6PoRYhph6D3w5W(27-0NvaLQU_WQ{-1#pvLbvwhyfCL4`ZB%FjyJn88{jA88{i3K+@|$q97aU z!3O2|Q|IS>lUW6BoeW94NR5ywh_ z_i%DE2r*?atzZyl&}Hxit@LyU9d`>(iSE!noFE#!@1G0YZUT)bGJk>WRZ(OBu|Ugh z_3rFoP!!m~V0H)8mjH=^x?=7O%wKjfSTWc#xPy(f(%;441?PF`8yKo0&DeuFpX#7Z zEugj)XwwzAc>wBGfKLKIPL1$ceKT`V)yZ#};HqX4UGHrf@2YMRUGHWRKZW>~VY7^s&@ zv-7e_OUa2TOX`^DvI}$Fn=T^G#mlU!EC)JF{r`UkHwH^41IEWfYE1157zEgv+8J8G z^HRQA9b%qBF>I@$k)EU@f9a$L| z7}Oa+3s%5+7^DJRCV-TH86dr2h5>^*Bw9g=8H+#*)YTd6zz!4vpJo8ES_5kJ4h9W< zM|Oq;1`UP+1`UP=1`P)0LPvH62L=s>00s@P1T!c_C@^S%_eI-)U2e-@1D&t6)!)fr z3>MR8um#T=fwtxEU@!zN`p3v*pqWSLE>Un1Zmw(&*(}E{uB@(XZUjy<+KlXs=E}A@ zlJe$W+E7~8-jADw$=nt~sjAC|NJvSED(XnfYDls&imGrjMu}@#t7>|gD?(@s1q}yt zAwez^7bs=AQ&LP^f!)VVR)U3%N!T1*yfSQIs$;yubdZ6WAqyW)OEQSN`QnGQOG>||nC$5_C` z22MlDpw&kVpu@u<(F0B^u)K;$FOJL%380i53o5FS%Rw1Pro#wk(71`3vJz-)M2yi} z$x2IH#?Vz0N~=q1%M0pjOKHgq>N6IIs#~e3yBf>FXnSEr9Vu;NVMSd@ZDWXgMHv{F z445(*xEc6Cy)zcjq3B@ug4#R$puNnXbJRdNX*UBe0|x^S1B*5&Fqs%YhvR_yd-zYq z0quDHs(76Hn4*{BF|K2Z|E_T}-sGNs!s)~brxVj5d!M&5dNST)I>4X+nm=V`P-IX- zYU@JhD8MZhaMJ}kVJQUaddP!|D5eXbCbB#@yX{~Q0iQ_%sw3nWU}usrD%vxGb}>Vf zr#h(igUnO$Ga57Q`uCfwSwv2ZmzhafQc;!DM8MucLRV2lLQO|FZa<@^bppS*n1lcq zmzboQn7FDbkEEKUte(0&A2`k#88$IGGu~!8z@W!a1ll{N&tQP$e&~=k!u`+zI3duE zA{_<+23c@$>wt3V1O^?31q?b28yIvLn2SKE3{>fX#=SYg<+C^g19;vYGWezfNg&|m zD##uKpVkK%BmkXb1!;zvgCN`EV%t@yzy+`y1g-CUf}K|jZZ$x~*TI;cM^{@(&TmZrqe0P6B8 zgQtdJW0laTMhq!ISBM}4pdBB?3?6jo4czeoCl}~A6?nNOCwP!S4Ae3L2fCR4E(Qe# z8Sw6X14D7ps(8p|L)e%aXiqn2SE9NyKcjdVXdMhZ|Ng0x&{vmGQcRx1z{n8zKby$`yzbisv{4JbW?c}oQ~({R02+H{xU+*n z5WFb@(X6os?;T)PX5`a!Gm_EqiZ_1V=hht6?DkFC*h|kk&Pn;tMrOf3??GYC@PgqD zV;y4&gCK)ADBD8q1hrB@ccOsS-l}3W{}?qY#mC z4A2#*I~c$%UIxtAc4TG%ZKVNk{RDRiK$Q=u^T3EvE671IJw~lyX3q#~lJPTwmM@Ai zI>;HTh)5f{X+vpcU1N4GCJl86#TYB9W+HD8V66b7%}lgxIJwvqv|u#o3{O17zEguIuaTF|Ns92vJXH=omu>UHUooz8dE3ej16WLhH0R)KXJ+{p~xQ) zQfHRL)X%`gp!eU7@g@^5_&f^-P{{yW2MX%PK*oPy;iv%`4bcFN0fCmYg2tja8Q8x- zs#D0eHSjzQWH5)18N9et3^G85Wy#b#=!q4+7-w0SqvVQ1uoEj#&$3Xk)Rkg#hh`Nh z1qv_lSqjWsh13{SK%vNN@5KNPCv5Na7~Ujc{=bBym;dTDZ6klDGi# zIk>nBNSuM`|4Rl2reY@0T)r?v2dHF#jGTb_im+S*UFeR;HPGo=MA-`6@4*ME$^;o$ zp@%dH>LYI^1|8S5i-8+-xe+*1fwmQLFn~r?Kri%a{cJ~%ay6_-vma`ZQ7tS5)8p- zB)EclN?b_e%%I+pH7J!>BaN9Ef&>g9vs%{R)rKHP847?pJ`mOp2GF8dLxCL(Qgg2y2@0tA9Am)SiyZ!&qfG%!_A`UViqTT^T9ArL3+y*Kx4>@Z>h>hVQD1Slr^Mmt? zA=o|(cZh$$`+ULfFanF)J7O0HFVX$~AF?kPoF5_T9Z=MR@*_mt0!19;K8UytNSuL@ z!HprFNtKC}ftvw5w1>KX3Yy~(%^PUNB?UgnlO1xLCFm?mMuP)d2iuK1z$7EgJ${Fwo{)&@x?6R$*c0V-%HP6lYWeEqenWu42b%YQw0`D8|U5=OSrl=_$$$-ZqWI ziC@FQ%*1FX=NyGAYYB1*axgB{s>%7c z46;X;OOWGVv=%rGf%YUo(!K>Gt$^D7|Nk?fi`$`ygVHQSy#tCkC`~}bZJ^@dJ$2x; zXahFi4t$jt6N3S`Zw4ANcbRx-BO+Xd>bf@hIH!`Yx>m;t;y za0dgZ7={$Spk+`J;4PxyRhQ8H-Rz)QNbupTYTAqjr9l$QKs&tGOR24f?(km0w5uPq z#e3Ex*amNKd(+{+1(OBS69x^?oG}}8_X;eXLC50}Yhj_?U_^pPPI%zvJ9JhV+`wlO z0IdcGHH$&(4k1U0z|s|HCUGZ&3b=vK%b*JGMnLuvgVrd3R#VzBgQf}D75Nzb ziB>x%$SFnlFC}*o!o1r7{hqaMI@+u<+-`>IBL3@DzGv$1;+?*pZoXI ziz#1OSDMRtuHRGk03VAeM`dRLMPp?NaSk&r=coVd!D$A(|BRViNR7b-6sHW%plxaY z|3mhrA&HkFi!=R&sb>s95x))>k3tc@3=?O_L>6aOfr&FlfW$#9+W%jeLYM>?tQkBR z!WmwIl0pPSBsev33+!NUfbRYXfR_o-em5d&p#4^a07hJyf@)M#NR0~Vg)>5%VKxkm zUqJh5c^PcLRR)!90C^(0QIV(4IdieK>-3f@a|Z7#P1mXV=Z_nLxw8ph5)J^@pr328|A*4EsVl zdwigCy6hQ2>&3yfIHMA1j?0eO)I_b)#I-Qij*E%OOU*=FPdvy*K}Uv{McmE6#6{9J z&6kCVNkdItU&M@CPSZr*+=GdY-&I}RhJ(+{+L?oiQH?QIT3b<+mD$`=M_7)>(cV9V zmDz$%oFhi@SsZLWSUqD1ia5x8usA~|NSuL*!3Mm~<|BhTgEd1cXebzR3NB~}YzKo8 zJSQuHB3co28u$(daG44%b-_a-khLlz42ldI;2Z@SMFy?l0xhC60*ir8*iZ!LFatyA zno;mlEECAwiMbx5I=ecEG?rr&Hy1})`V378j2lJO_@dOrU$OMTqFoUkXV^U?(V_;?wh3rY?g^vh; zb|Zs!zJq8P&}b_I0|x^mcpV4>XxQftXbKv%{|Ph#A$AAU!3FL75jIz32cO{v8gmC{ zEzm?B=CTWC&?%GuJ}XEvF|x=hLMR0Y1?4dcI62)B7v$h$6_ z6u_j$AkCn`U zgE)f>*cj0HqMG3Pn}>lDyp9>vJB6{Npz3xps4-}Q2kbyoEHVt@;P$971B_(?l?9!J z4enThE?5AyCn1$SsPDzj2=AVWGpaGem+GrCig5(<@@aV{Tk5$HmLnUpMLB)x*q?ZyBoADiF!vc>e7o(igzZ^L4-yVI>vUh^u-f(D3 z4H0|L>I2bq!x#*JHW=V7HRAS8pzjUGzIOs+Z#ee76DXU*v2LCKx6Qy|!vqR5NZ4e8 z!sh>f@OhVV%-Qg<5-ZSH39QY=bP(32VkiK$si5kum{-EpJE5rm4^z(=22#(!^#A*R zL-4uLatunKQ%e{?SIdHvz5+bgK!X|4mPc971RBSX0+r@c&}thb0G(g}FC_&{+3o_Z zi2)DCLZ)$Lz=JKI(nJ9?ZD%YDUQ1|f1e)ZA6y#>+rplmQ`HY}rHy!g5H4G#7gzw=AO))c zjU{n_hiYZP%|}ot0n`XI0~aV#3_1*E;DSPf!3;cuVqmCpx6*xVR$d@<^F zV8*kULBx-?yNBQJ-$jfaE?7biX}eFcyB@;p#)7>cQuKg4L^o+{x@H4=Rh888rTXVY;lbU;8X+ZMj{Rh0Cf~WCxs|OD-{t2 zaquzM&`t#S05`}H2%uB~KL!D`s04Pq1ZV-+K`(!9aTOC+9djRkW)r^}KM`ixAQfqA zSwVR=VOBl`T`9Lf(5V(CjK|XgtawsVlze?$P34V^L1!XV*?PK4D2dpq6v}AH@z_6Rz*#Q<8#0p3>)nJI-VUSx%b5_C%mq6~qS5a3~2&=ei$iWJbyE$CDj z&{@x*c@EHlojbtyUxC{EpwdDfdbY?nhB{y=0JNS8F+v5M)5Djy)~t&!A=FoDVki287ldeAwx{|&)smnnf(A<9B)IoKEwH2)z| zC(3nCpb8CI@~(Ou#-C2H!gXs=q+H5ft z5&*RznC77#g#u5{p!x-p-W-wAn<}_|fuy%kPOturqTb0FQlCQ9gVH}leHe;*Q2K|cw?e(4{7!|Ia3pO&9gYedeGb`Y>hr>ZWM9m1axgYBBw#iOoRY*zbqmlLX#@ErVwY~fSwvB z4mxwooD6 zMOZ-z>di8O&ovHr<#H1a5@8e+4ia(WatjY~6#Mr<9DK+zn|*0%X{r6+UyN-HptZ6L zh;viaK`l*IXrCHZ&OnQQM2!J$KO(Xr^!6Eq@1bMOe0GuGx`K~EfPs%efq{>KITm!T z0}FJ16IA|yj^+Rz7S4d!H~%|$nt1VEujuR3dR6_6b$ILR&{Wp58i02 z2;Ju_DgrI#F^7j3IY5QIl`bQ{tSr(II6Kw!r8uD-KuwgxV!-9Qnz;n4mL$?~IExhZ z6~s6p9YSU|=&3PK3N+3NncD@GpO7?T4N5Z%jL>s}SRm)7@GwADAi(l3#`qC51i{%A zG=2olg5Y~fKutJo=cYi%$dJxWVHChT?S}{J;XX{@dc_rdrnU%!AE;*_3XYK-44~0E zA$VLvPv=6UVrY9CAplM1;8YBnbOW852yQpR4mejdW>#i$jS#4a3eD#9XXcgGQ?3yU z`L`*^ISB2P^Y8yMKsU=U*#FmI@?mT2urdPYzi;58AT=;)BoE z0;fD^Kq3l4jFJ(fUVwT)0JPA9ivdy)g6@X_g*!I`542!p5CH9S1f5SL#{e3$6cyOP zpnd_;Juv{So&w)z3fl8)4&Eom#|%B23A7v&ylRn;Q4wP`+El+VKSluo8CgY9Wz!6y zT)zy^Nn?{y(j}u93YUrH@1HBY63Sv~26-$@eb|pRf+kQX1xlx&^Xm=3^{_6a9u9%D z3qWT)C4>6Si~*2(n4uk9pKJeT2c0!9qy{>TRsdAbbAiRJ|AXp((7nfgVD&i+zrk~( z?hFh}{!A3iPZ>aBa=V0KZ#60JMP!&|&1GWw_bYMf#eZi(e)j{NOAj7n&Ap2~=;t=)0jDlcskox~jyWr-BGt~TB`Tsxo>?J8A_2CTD z|2<$}1dU{X+{3^Nnulgb3v1};CL)7Er_jM63EBV#xnGf4AJn*FgU*<9>VsAWfl@pZ z12Y5YDl|}k8PpX4iLo-UKu4uPw}F7Jg91&l!qhQ>ODWJb7n+R1?Dn8-T;}{tij1%S zCF_N8hg%1l-{!uf%IM7~B;_i_nEY?EtE=k+aGC*~yT!-!gh85NC1{C-47hI!DWIFp0i%uczghaO2Hz2fSpEMGZu3IcU_jRK*g@Cv zK-$Qld3Nwz4?`(*u1EbpJE#vTq{aYJ&(4^`@DH4hKzWm$NkB-A0i+%z{ue9`X@i6M z93b^<%#KLri-7waAoXmFp&;`am_SECK+o(`2HjF83SZ|BD)bcLbpy0>ixESJYz|F} z2mvCF^8+O~CeZp?$VoL!piRK=6SF|O>7Yktfd(Exd!#{EAFwM=fSwrT18rF%FJ)GV z4l;or8^tFl^6x043Gzbbe~+1->;R3~F*2zC*8znqgA~IA&^lXb@Z=3FJwme)B40rl zG$8~K2^2a?gFGt)uAQKr6mVZyTwn(S^94}47Y8S;9Soom8&JXqjn0UJCnZ70D}$~# z2QBdcZ^8thY!0bp>={AFa;uku?|NtlRU2aPdPG92l|2=5^TVIppkwb~^+gxxN(gA) z(_vy~5@66_C&yiiYS41-3wH#4&v$oue0k#RTjkud)r zL*pLQtB3^!1~^YZ*2sbS29Pyu;Nyk=|A(F*2C5Sv^PB~sc~1BmIZ)pKqTUI#<_)S| z8a%E9R?irQq&|pwi;x-vM7=GNdK+dgAvFew`e=}P1}0E%nyCbQzlb}(2%cN_b_ zOA}~I6C;Ts1fUBB!CnPtCuF~a*0>vi*VC{t7=g=g(B=ZrHJ6~(IbsYp;KOYo-3(3e zIvUX3j&5KbpsQQmz)n-r-^HNApah@ zu%rrFLIYk+16_Kp3ZHmI8XiR~v|*fX;Ka(x=WeQOAj>Od>}w>gAdPOFltnCN+5|&6te5&c@u_z)sfGUCXW}$yP{KMaaMueT|KzuCl1LS7^GBBA1yi zjK)}F109?40JoD&A?+mS7!>$iGVokXC`g>4)D_Zx(*MuSg_@f`Osqkjq}Pf=z;HS z0@4QTS67G-#4TTtFz(=a= zVlZb=gR-<3^r83ifWqAYavB73xSE3xwE~|~gZFSbHsqCGjEpFu++JV^Qv1*QN0{~5ynvom#q^RGFi|H8-w z&ZqwW*+J*p38{f@gaP$;7+!+K!S};}%?GJxV|H|b3kFkAS8~K;3^f&`KiE z*ei7C6?E?ms3v1fwhXdd!@XJ!eE-ZVwbk5=LI2h<2H8FG@OWegY43sD4LZM1g<%S4 zNth~w8dBO6f=sR=+z0KDAnGGT^#f`_!IpS}u1VwsUo#8qoMmeW7rblgIabl zNQ2MW0PUy-wRq(iWT9OR(EKszh+J?106tSp8FCB zA?hQL)Q5oESrGNMNa`)Y?JS7;XpnjaM)15A=uS*a(23T13|0)*NO5inigQb(eKgQU z2_g|7-vtS7gFuTgaFgChU?&6ULL$(xCO7nGe^3#n0N&RojB!a3@-!7}wTe2M5^R_g z^X?)}F$Du<6@6)L=l~{o1&gIVBO5mx?i-CPB3(^|MN}1}xgn#NplK{sOEFf)82B|u z;IkhM!FyFr85%(S56JChu)L}a3KwMtMAA0_378-WKnJ(Ml_NM@kQcCk1)u|Q;H5l> z)hycJt~uzkd1Y{Rm(<6)dIfYnChUAT&?!vtwift!IL4D229oT^Vd7%RC?LWj>u>Mq zgL!%+mceiEd2!f|lLVK0pgVbM!DDAu3=9Hn%ntUDJOVkh5i|!E1rlcr0UdAh|33p{ z&jY9(0@?H60NV5L|3CC>J&=0v+APKp$l5HZdeGhphym#XN ze+KZ`b>Q|-EJ&Q86jWyX|IYwX4;qVxsJDii16B{7%Lc1w3`bE98W(`5cSKeXt}h_! zLqY1nciepe&HXVbGZ=u@c&Whe;Z_0fyn&?_Xx|W#X^;y_PS9hp)GzqK2csRBfeZdRB_RzI%NpkBpw6l7*%isPFuL&3_#x(4An?pitmtKpnTj zC^DeF2bU0n0-#e6K$9U1(9_XDBWWVgGw`|fLHh_Gr{u#%pxGHw&g2;J?Iz zv0G41UQIH{WR6hhBJP#yd>&S_xsRA0;6C2Mqk4r)LQOhSZy5*UZ|8m!N9Tji|HO1b zi57H!;TNV{W=#fJ21C#adpQQkN$QXRZa#P~4Vuppaf=bz(0mRq2|zPf8sL^M3xfoB z!SxOX7X2LzpgR#|?m*@h<-pO(2s+jdyo{9vT>OC+B#A>-s9{`R$P~jWr^+WQ4%!_R zZwI+lGR|H{IatW`-(1M1DEQryOh=?t=3b!k=PLfe2}UT)Cu3gAbbb32}Y0sbbZtg22dG~RvDTbgU>Yt4{t$k z13<6*;)GlUS>;rPt?}O9m!B%7@^3Es9e$v;Mmtk6gDOKc$Q_UyJ79i-dI1r6&}mtO z0LGFQ=&&YuM4bh611GpV10`(GvKC2jWV16!f}6Xb5riEKDt8PF!AYDMbm{`=<_1#} z%zDh+n5m3aPF2DeHnN3Lcf||2GVw{N{4>B=VdX>D?uxLa!PoA(BCp+L-UC~^%d7)h zyZiq?WWO}Ho@ocwC(L%Bs}KMGXJ7#Bs{+?E%R%A{rACl?54;BxtbQg)oEf%{6ugce ztbQj*oB_7iK=MC3sGlvQ#sKP|AqL0^Dxj-gb}%6Be8L!Ug}M@4gn;gc5dxp<2yz=} zQ75P?Ed(7P8>YZ z4cJ{zLEzO<=AgAt@kO>GdOSF8dV;Kja)hmMQqW~!WMpLWWn99{2D#e~>HJh?eejtn z%#d|9u)FO*Yf2f@ZOwC-*+8dfFfcMKV$x*PVS2*A%wPu^GlZXO1in>VA9ja$K8)cH zV}NfJ2OTZJ2Nr>>Ou1vFlE$RD8+3-oJSKm}J4}BW*chBZl`K2B%4GmmM~P z8MIc;o)L7zo3)0q0zb0>KL@{{xS)WzxP*YT5x1O{HB+#huBo`FlCX?0C#ch)Br0yI zE62dd$jp?&*vxbj%egC{T*RV{?WQ6|TLmd*MrJuh2*s2lA;2okDkKM`z-NnGVRB;J z#SGe4t;pa4I=2Bf1}*@udqKX^hXowmdkP?t!W|5fcRpK%~B?lrk$5lcXesVsbLqk=9cZfsp#L(wsu9A`(!FfsrBq zzagVBgAjuRg9@k#CkdY50EInhWe+s-g8MqcV3$BLq#5Y+W^l%XtWCTKTB71=#caxh zv|0ze4n@maN{~$msiy);TML*{7+*16XOLuQ1f?y=jmiwQpykdIj?AD*Xh^ z*npB5JhTEpBA~;*K&?K;!W|5tgw4r-dKxciuPHBh2m=(9!VIimKr^7I=khY*K9{#$ zQiWeokxxKQP)5*50hz;;BFxFn!_TKFq5x+wFfklq@?sKX<^tcQW3h{Yi2-(2C=>V; zKTxP*k9&x3AUEp@tDDP%vdRaYY)3_%Y)2+9sb#9OrIvx_H2?qqzl+I}!Gf7vfStkl z-&N4?&;S4bpD}qdOaqIR!o`Z2{24Yf{S{zm41tT4GNmx=XSy!H&KLz3>tw29Sjluy zfSsWLF4oKx%y5+HzW_U97+mZIQwl=_(@g<(#&Eb;GgCIh2Bymb>Y4sBa5E$_>|o#k`S${7yBsL?^dSsZhWQK}4C@&<7??n!^&nADRPuuuAQ6xhxG({4 zv@3FCWdIrR0HmRC2Lm_wfFe*C0O>8U@iVHMD{G}GD@aRfXuB6P{go9L*Ok(eP63_i zvXaS(p`TerfSoY{;>Q2~|IcLdVtB^PCBV)Y4Hs);3THUN%qqan7z!7=#^lRT$;>9e z&KLw2d&H#4ki+yufSob;Kd74tx)*Rc;{}FDreX%rN$JojQ|P2BxVC1#1G>T%bh46x zp)ja_U~X(~?7=Fh8p#<1X$P6)gOc2y#)Hnz{~9>#wYVkZgxEEu`IHqHEuee-L31{cwF!{* z%J!h?J?LCf0QgKEh&cER6b42H_y1l@a!jE8i*>sgkk_q(#&JPqBXl7uq7Q*sm%D?3 z^$w)34>?#zjzJ81T(KM|KR7VRLCUucFh&EIu@ij14dg%s&~<>28FN-8HAssMKEDhe zAqLNN+A)I13)tA1`4|~nr1TV(O#%chSedo-6%3`Vf->jvF!u4xQ)Ur2m-X{yV=>^+ z-KMClW)#Z8=qjbir=rfq{ckzwI`i|KT)qw>CgT5I>RCg_eL_I(V#a1r`xg)So7*S`K>HHlxi+R_LTsQmJ#4Kl z(=H)41|4u49%Kx;{Lz`@4Jpaae+paKH4vKh3T4>XAY znoa;6@?v19ZVWm?UlCF|@-b;M3M+#an1D(i#C)zcBeRU5sIs!Ms3aqYzED7byj75K zW@awGsEV?(sH~MTH{%>*Cr%b7CPNJoeGg%)%%u&}|GkLxvX6IAWGW1=S)S)0Dl6`4 zZYIGe%de~R?*%B0FfnjL!vVBgy&H7u9IWjFIw23S<_4NL5a9q_y@(JH0R;^5-MG*d zo8aE65Ca3abF_m&NFQ{u4JZIWM=&aagNThm5!}Gt!N8^uy2S#NvOqT+gD~jm6iApb zE2D%)gTKj46MucV;9v!t5R+2VnWp}XDQ2#q5HQhJ&}Z89?+l{}EC4{O-I2Y{$N*Y5 z2r4h+KsQ-~&U*&kV+zX~&~g&tIgA~n&{-OAW`UHGATP0A0CkX&FR%!FdpWioPQ29<7<^kv%hw~wjluiG?G{{Ig?`wg7W zL6eP443-QGOiE0kO>hzn@u2m_kQOs&{A&jTH$0zXq;F{V9UQ@+GLRYUcu>C`bgmC* zkA?)SucQyUvj?1J713K${HtKoKj?zz2!geh32;pL`7Y41ADN)&GMMQxLLeiIUQS4lCDOWuY zhf}l9{_VRrZQ4C1tytB z&k$Y}0F`V4NHryNS_%@vpjrZ>Qji8|kp|TgyBHK1l);^T(9Usia#sYO3(W;C`dAng zp_MA%1<=F;j0aj>E(==T4GIlCMs>(t2q2OfbV-IBqqs0=8J;qTj2BdwU=$Hzk@r?{ zHSsrbZ3`&nQxsuFms(6#wetw%*x8Cq{zq#E*C*%<0nN$R#py0m49zR z#UltaFfz#g|H7oobd15AAr@2{STI;3%~L{m_aK4>n)txkn;q;S5e9bfrq3M=BKn{e zu%MKoF0hjUG~5n4Wk?WQ4}d3`q01kjC(ZU88xTU0u1E7#VG?OuZD%#0<^0pJd0fp5jg6daMcH^*wM^Y? zExB2_*>w!n)ik6ur1^r}wOkD3SXeon&CMh2l|lVn@OoA7x`9|wWg+fFjkHncdi&(U@6T*j$;NQF%^~r7>FtBcp#Qh*9|Ohd9aukN{O@{R|S|)XM~pY)%Fy1_|)sC8)h40M5XmN*jFWFF&Ik zvpi^^4b&i3W>#JrWKz06a)XGx2qPyS4-dPY1CN=429H;%X%Musej+Eq%*wpv)6uf+{L%BFeU^QXXRVNfR><{&iz2tk0RAYA2#B z`u{&@R*@+dT-F#cfXW_l9D(`TU_N-gC%C-|8pLJHj*Y<>>?Xhe zUqEMi3bBD!^n=#pFff4E_Tjm?FP8TpvC8H-a4d;A0BnOv8J{oBAN zrJycl>k-W){_k{GJEO(l8IlS@pq=Inpz{qLGx;)IWsqc0V=!iz4H|-m-FOe0*^;`j zg8@W?cez9E!Ej_|*bk}(KqD0f;I@||GsAosBLT)>fH5E~HqgBpps@=G%?n;M1DcEj z^%FsZejxFk3{v3a1Zp3sfmxuPIZ^^U7>q$)gq*_#x;{;g8L~W1S(uL*y2@1?+~^1Q z5!D|Xx#@{&cx5>9`|}&RgP55P{QjwGwtDhx98AnM_TH*?Fs3cDl7+X9cT=JjQ&bcZ zn<Y6hoEYfxY?sQ-6jGG+o*hk2kSyQp_=Lfi6) zD8-n5MHCS`75aPy~beyP$30;5!7B8P~JOyQpV`va-kqDKN7L z%4nFNHe`Zv=|5puSb`eU;55Sh-wE9IS7K-fT?&u7 z&y;W)frcd_aLG+HpdpqW408Ar56DZP1hk)9Qq5Eil7Qs+q{NF@mH)|?`eznoLa;YD z5%EcifD;iL2T~#e6_}8O#02ginjrcOpaC_|)&kI8*&PhL@O}eEPZ8RB1ee%|jv;El zfeBn?g7$WcLyB)@b7M&FpAFP+fVP3O8JV9i;Q6GV8y!|xc>H{&5DOENnPI*jQ<2BN z7twx|4IWt%psu{;zjqAG;C?(P?eH*2GRT7Fo0%Epp!43Kb?*Y;rHnfmWZ^D{t`$JU z4zwA75WrYU1HgeC{|!ycu<39HLQp3 zqA%^Q?*!?*&twwzFZD<2pEH%hI_{vOkwE4^vFcYq?{5hBEyiXd?S z&L?{RzcA@A9b?b{jkB?%ozDtgmx6E=v@8XOB4lI@v~3Zx3=MRSJ?PjaP+J;Ogo2i_ z7#Ip0g98-OEQSms^09!{YCtx-n%OfdzkiGvOAEk0;>Plru}xeLHlBtu-X^XgCs>~Y zx(fqz(EoqPxS=A0C1}RS1iD&r2ZIUh&NFan3T;~ukpfy?0 zz~N(pR<4X8u6Atf{-*w={w99xB9d}~QdVlNcI><&(#oPzR#KwMGUD7atZXXsqRKK7 zTp$)tu)l1C@xMc$rl?l1rPW&v)@GMaJ@ z2X0S5&fH}Z5Ml$J#mm6N0BTd(Fuh?=WH4pO-Nm2;Kgm!@UYav{wdPhKlP$c6325du6m|1SJ5_5wnO5GT=oA z&;$ZMQcBRk!$?v@%}iN2-f24TbZti|DQyu}Wj|}b1Wk_wBbP8{7CP`V@1TRyQv<%SNCYMNG8*XuKTN`gTEfF0)CtL8@j-c>h zV-jEhEittP?dy|buw$?XI~vqLWVo<{0Ysa_Lk3z|Bj#ohc?HzY1TEIK1+_Q9M%aQH zB=;F?LE|f|4EzkX4Dt-NpkWnO27Lxw273@Eb|-@xIJg8EY@zGFK+A;8p(omampj=( zs~uPm8*;posR<&{fUeMmUV;J2UW{^y`7Ep)x~|dY-VqL_M#c)3{yIi(?2L?YB4&nK zjEv5_CLa3Y%#1oZ>UO#^tV}#PS%T^cM&S;su4ejnd@P(+x~h%_GLD8?tlVtgEFA2t zyd3Tx@7M&zWCd9{SY?!@bZu35AnhTy|6iB{m;@Nq7=l5Y`B2w{LE9hL!%G3|aW)1K z=x^vdV>GpmOL<%!>|^*iIE|E*ROICiHPu{f?IU+bu;XVuMx;*zyMK6mBliygxVvaOv-4FaZ0Km%#vhGI#9` z242vewxGq2pkvoSK7_2sF*XttH#Ri^t;b~|V)!_jnE4frlx)0sIhmQQdF0J~bv?^Mbj^%Z zoFmP|nV8&}m|CaJyJ(~)1R;%h1-!R=rRJ>y*jTy}sCtzi8Bgn@yn zfQf~{nPE3*&x{L$E7F(~M!tX!wjm-OTFoN_Q0`U-jn6@kv;!A1;Ccx8oMvb6qz$P1 z0?Hm-;4rmfaE7)Mtn^_kXF(e%KodNQ;1Wt#U?&4;5%~@VE6{C<7r;XajOL)k1iIVR z2y{La8$0Mo9%DO@FzB3gKF~@_Q4!D`ui$l3X6DN5pmlkWaR)(vK{;+VHa-V#2}w<9 zenuvL6?YXsK1C@JJqdMgcZj41w}O<0G(R(wznZ(6FNc7TD6fc~guat_u!E|btbv>p zpOS^PsG`vA+aBRkB7CUgvIg9*U+X&PDe{W&fyTS^|9@fPU=m=^2lbWs84SSpkHT70 z7+Y_V%Ol7nupk3FgCaOJ3c@eERTO}gR_Y9b;HnE$Lc=yUfx`zf(q|4D8%J)?u)zu; zMs|-pB`Z093kOGbMyB)x?pS>nHYQV3<4|>Noh*;g6l+TzJq7D99wU7{HFbS8R(=jA zXAMOzZaFnIO+y_McN<*?J{B$mT~$Xz8PJ#vXdR|J6N?ZVLj-vI1I%Y;5K;s21=yIi zLBqrhj0~;}3{2WgEDYidm7sBU#JVO>8iINsk;VA`0Z>KG2QHXFTh7gm+1WrR>LW(a*p+AdsbnpQn4+M~C@8^gYsGCU zt;pw*rS8YXa`Wa9EiM*j5$Va!G74*6FfjiA&A`AU$;84S!Vm%~Z6GJCz~U7;l8-(|8`_Tq3xEnv25^E04bg)#2WadD)YJeCIl<>C*_;(kM5Gvf!~DFr@$yK?%JEB? zC@VUvbXLsy`-kyhkXx3YF~5{310#bH0|S#86X;63Tu>Mbg73zJxs7lbBZ3q<9EChW zCLjPAv0=IZ>862Z78s!Ww1gr1*g+$%+>FZX%*qvMUQCNK!@R6{*-k{WaawsXvHbhN z$np0NW3=19y^PLo|CWOC2x$IDk%@(Y8*~~tBLk$nL%e&Tr589X!6gsEy`bqd$eMf5 z)G%mPl;aDir4K4JK+AR6mHYivzp46#`Kf(V1IP2IGC7JN8l2J11$Ho4T-d#4u$5PP-qz~Ca{yi6D%gd;0fK{3OYDj=?>&lKhVlm z&{5hu8Qj3CKxeONg1uuRu#>?GEM~@F0zP!gz>v|75mZ>i&lLk-ZmX=MuFMWTUI?_f z!yZ2R1HS9R*ht)%-3)09J7|@i5mLv5pOKBxmBYy@n7c-qSyWe6+n8HiSyD(-)Lw{L zfkRzcN>@e6I8aClMb1u$nVZK+P*y^OgO`;_TH1lH8kwWP!<29AWcDW?NL!x${}-k}aC(Ra_h;SyJ2BZY zu`oC>%mj7uof%w^>SO3yd_>fmgJRMgX-}2{NI(Hc)Djvj1RX!A2aXZYre)B^$eJAt zvY>ViD3(ESwS&R>4yaB+A4XIMM-S-0F4)i<=1O6ke9Vj+_~bQAk%k$oS#_ED zBn73FnORw6{cP<$Axq#jv=ofRSOkRxSPcBU`MlI6WLX8oWcHzqLAEgQajDAj%ZY)G zkW)}*wD@-(`5XvF*?+d|{;INzWYxt$*8?&zGQ=}5FbOfSFvx-Kp%-O99eah2%OJuR zI+utLKrBYs#URSS3tep>s_zKu34n|fg)G$b2M<_+#!5uNv-Xfw>{1M} zD%Y4dB%@SV!$c8s7@0&DL> zc%U{JXs-n5NaAvBT^42=4=ZLC9Z`8+J|Pwh4=XlNQBfrxFgwhHmqo}}TStwVS;U6N z*nm$>h%x=&G9g873vodaeQ`#=f6G+F6{Mk@zkdSN%`CKZO~Lt0^uH5R6cY*WvCeVqzX{`*%xoV1cj!uk{Xl(LDAZ{)W&a0ON6!l$1J|m|293G&EH}L9eBu4UHysA$T+i3kfMgqREHHRaID)RX|i`A1j{} zc<5J+m0gdelZlT@L7G<-5-9|u@1F&`w~{zCCo?ga{r|!w4(^|tGi(A)l|p9AA^Xh0 zGf?0vAKI@&L>zR23?YC>+mMYEpk-<5;F-=H4Dz6S&A=efAiy9G%Gaz63mD`XHh?*x zVJFz`CeUaCXk86xs~;D55jD>p(Due13}P2{Fn}Tx(p?1YE>jm2vIG^Opu54C>>1(H zF>*}e_Ke2JCk(&_1k^w+bxwkplF(ET%Vp&ZU}M)*;FXlukY(lc=c;8^c2jo= zQL+ivHTL0RWHd0g_hw@@=85u^F*CPTmat|qQPEUm6Oa*Ov2dTyEGz5or0;K~;Am^b z%FU{&Wuz`7qGJLcJJEoaC1MO(40;UnLB53TUIF#)(w5^nQRKyvzJ}Vn~d+P>RD?8d)a)@$i zXxr#=3Ulb1GBASf4P^Yo1iGy~95gPZ0p7L?t81V=1cWaUBdt3@D{;PnDnw;)&lI$Q zVFv@K?*;15LPnoKH=u!9;h>H@IMJ(v#>gO%3LS7~1TAb;K7X5u(bZDZNzF_`-^fD2 zz|&At%OlYoap_VB-)%-U9zhN#do5i}Ic*tU*d|C3MO`T=1EsJ~(AbdR|1V5>Oactz z4BDWvb~OeaXtAn>vbPx{?l8&_Bhb7xe3S?j9?(G|#)w8Hrf7AKFb~y8P6Z=pokkh606jfZer{G) zIRz-qGf!Mw>=hHsZNpGI<$1w9X_ihNQFhV>f<{^}8a#%s$iM*Jt0u*u!B7TjJ!mp$ zfvXl#fgKDQ@bn8EJ4VDT@{l>$%g9j;>a~Iz0aDO|G&S^hGCm09u(GHx1gy5+`9r5rtHua@Sqc5!6!9qG6*neGAJ-;g3rIv6oAa;gU(Ht2j@3X zs~pnQ0(G)>FeqMt>{nK~0J@<>0K90Z7IcH41SnbIICKqk#0d0k5ooaiS{sk&@U=9| z6P*bh!iIXhGvpw)|Nj}lW6PlMXIu;pfAF4B@O^Jz!1ukWg68t%8Bq7^LT9`X;S3E$ za03gpW?mSapFlYal&nCjmgJ#xTw?m56~CY!K4?!TXuiT2ak(34s|UD_0F^A_e2k2I zn8isj-)-*OOiYj>#~_ghQJUyUN*O4H20HT#ae~Vl8?*oa8Ng>%f%|k};66U&tm-#H zYz#g~{L4aW4B)e+A@`sC{}0;J%EZqEQs)cGoBuCD>tfJ-X!Ag&E$lut&>7v9@Vp64 zUx<)FULXz5o5(>0n%@E?G|(#3oeYRTgIt`Zz@Pz6Jv$f_AZ;H7@a-H-vEW)+fuVpw zfq^M@CxaolAqqM;Km*a90c|;ft)4drudy+P)XSh5L#);EWEXd4W~~f9UTJw{5ixyP zL2fevIVo{&$!}^bLe|P=HqwSJYD(rjOic0$Vk*)?%*;%xJOK{;G9ru&A-?&(#)889 z&O*kX3HDQ-DX4qenTFdcT3doDYaJC4c?}UEac)h}&NwCp9%xvCnqccelhLqyIrs#2 zFd$kp7=tI!b%cn(g{DJrvO^18(2+pg&@{)PzmtI%o+2R!se_ip@Iwk$NZ^Vx2!Mtm zA%QE(Pypt@rjCRd)WCe`CN5N42LP>1*v(r$$K4>VK^@~1q!M1%ShTjYZL3F-qV z!TqTO_9v(h4Du(a><8r-P@5RE3mDRR1UI9=XT*pJE3vUFg62OMIbla=82K1WYI!D` zdWQ2d{=31%bg>a z9Sls++8?%@6m*jWXt#icq^~MuzreJ6pv9z&pb=sw6Q&7x?LmYYv||QM?#T9lYC>T} zh&`JamBl@j|2_8dV`AyK@XrA>?(V|Cz?8-W>Xj9P{DXR~H^!nHYGX zJD-?9rLjH(6N5bi6QsYD&%ne`59WY&Sb)+N=uRm}PX)9=8FWPhXfq8rXss!zAq90Y zyYl2Dt|WEFEbf1gWfpTSR`tDa`@&_3?R~IYwf}oDsWR#V}<5*Pzi@~pCojw z4jhM=`y@rdbqRQ%BtLjpq$4ZCdD?>sZRIz~a3~0FqGh>acj)I~|0Iv=+i;%pwgszLCaZo8ZKD1cmT{KKQ zbVOKKRap4M6}BlWs~Cl_{1DO*Qq>k`=i~l&k!hF5Pi`IwU1x1kBZ<@CQ+OE}T>k4Y zu`sbP=z>=42r%d|=nD#2g2DhaFn}>y11;sj{s))g&;k!!sDsuTBR8EvwTA?>3k@p# z1i;m=gaBy6B&f)cVGsbzLW&2_Tmt+cV$kvmtO1Y$KZ#feJ{&9P7Y2@C4bW(76L27a(!&3%|Ff9NnLvAHUx79>LCQl|I6xb4h;kk} zc8Cyw)@29*XeSjBQqZ|ZgaBeY7$~C%K~LFY2j$a#26hI}K@^~k5}@_@paX?LZ6tQ^ zhLIf%5*I+DV$9G{G0@@fD&U1;pe&#c+HTa(pbpCD%nbiw40#9xwC_lrA)i4VypK!~ zzHdetG>wUEZw+|fm5IgPz}Ymw%z0{917d@Xvx&cnGh%~{T%f8qXyXhR|_AdT00m(^J|*mM5}uNwBTtJd^%n}I3o673w>lnC+S_7fv!op$iA&az{0d<`Nmh}(kKy`}j|19v{CM(bi zH9-bz@Wtt{^iIUyCSmyACdB1+$a|Y08zn$t1(_rTg_ISj83#W?7gE}(K~_LOIm$|G z?BGErP2sf1FALfza6m_rSs^7GD|q7oWXGQ%0~Z4;xY7g- z6M#08LK2KLqzsdWm0?hZJOh{kD#N51@)@KdWf-XLgf55$Polv0S}`6`RtImXDh)#0 zZ565N3*J)&THwlP@(*dR6{u`tu>D`mq|5|5F0T<(R6usg!tw?*JP>6QG&~Rj1i}My z91-XMI@o<50t~FsJ_0BhAf*r}zewCMFjUlI)JN)QBG$q%E)upzOga zEwknY@>-Y+42%pi&^DwJLmy}z4C?*`XuAwg97ESEAc|M$Of0zNhIBU!B#s%uaSS>@ z0<@)d7lR-J?2;4EF4>sXY@5 zgFM4jkpC6Hi?v{J3iUrC3Nhjo!~f8x5r+R^CnR&+*}(wXTLj8#l zfVSTd=^NSOpuQ0!cz{iU0pU-`5(1F-B%u8ki1)y~Ib~=(LN+KPyvMG5bTaotm6%x( z-2%$ujKX4ECZP3es(e;4>Yy`VZr(g1F2TyeA}TY%SwVdv=wJ%aohVu0{b~H5`9F3B z)V;V+uOOlf+F3^k;B9$=ZX<#e!OZ$Q86cOPf*O>NJqVyw$`2`w`C)}Ilp)UmW`GJ~ zeujL|Tv(xjp(1z_HYhuTFuOA2i5Sz*;OzU^Bq%dn)fbji8BPB7fy-L;|0PWPOe_ri zpmSUqvHJ}XO;Eof1W585sNV?j8-%rkfge=DDkJh9XsbQro+!1qYJOpUs&7^OyhD^d zz*+0&KZgsTbOzd&)(h^7=Yz@-)c!5B;zI;Iv|vF9AUeFzxd+r%DFb+M3Z&%;*`)^Q z=Ysa;fI?Ilbf^$Gj2nVXHk&YV@NCNrGTjW@HSF=X4-~*4cY@ZnWrF+RxZQ~eMyNXx z0>ru#e1ZumG$HN;r+s5~V{@=OLE)O@r@C2{k&S1kr=Qwp$kIKRe-1BRfZXW!KMSlv64 z%lJX-d(6c_IaB#ls6V%io@;`=fs3vLn-{B~jFx;zvXB4^i-U)pp1O*NqiT}BxDO|9 zeJ`dp?NEvA+KNYX<|P{tgCKXoUp?-fLYZejrC0sadH zhT`Dr6&jde2Vd;r>Oll)4_A+bpRFw{Ty48S@%;bQ|173jCeWnwM$i}tAcuCJk^vgAVuv-FgQ)xPTMfBLL0L@IY?><`CGy0J_B&6zD?W+zhID zL?JZ~XsfX!GsA!I5YxUiJv zCon26jIeWH$<0dm_ogLM)wg%*)LzC6#-R4DuJ(V+|2+rSMeP4eKx;o4{6TF*PKE%6 zK&0|W3$$uR3u%QJ#+U>~nF)ZLjc%c*dyaJHf&m9a}09{WD2Ii8+M?RA$CllEiL+t?CRhxEpkkg@-wrG1lc4rvUoBviAX4!C<`*Ou(9&blXp^c zk(W^rK#^8921&EC@%Jifx)?Jm%gP%$C@{tcmvhQXvkA&_t0~(=Bx`UfDl2lcC+Zu@ zD9ahz%CmtLC`cg`a4UcmBgCB`2~s$N=RW24N*iAgZ4TQ0?0{B z95lKO?oEO(l->ZnM;g)%0i`U^_CUyCOA3&br2uQwKpFB3UJ7D}H4qYDCUq9V!%WWS3r@IbGT6ajU?{6TlWfTl6|8AKT58AKSEVnMBc$d!z+ zE($0}K&PHVf&|nF0X5&CD~IhFLC1lE@Ad^P-ZqA|jC5J0yv$t!*}%(T^|VyXH9*T@ zL9Havf><|mQMI{qd8J{iVWDj%*f|6Wp!3D#8BpUGT52Go6k}`^vDF&10-K#d5*)|; zAb)NEH$p+BA!tAybe)jEogEAyS_oRN$U$iZQ2qgr(!qTuZf?wO2VU~342oe;;lUK) z20f@i!%)UiM!`S^bW(vHi-fVPxZ_{;s6bI8&~XKtd={oGt5!1ca)J&lU=-%yVd_R& z%d7(0XiA2kD7%Phel&maMrMeqloI|I7S zM*=*c1Q~t;oxln@Qx9~UEM(QC;ji1YLI8w2k}UPo{;=f8(7& zZUvwHW(RT`g9_LUP`5$$Dudhx+N%uO?*%=79&}cmD)=l>h*rE*-G_;5A*$+R(LL z(7AUZHbw`qe(0I)LTrqIAU-s#YlYMpAz=-5A0(_n?t_FiLnbJ!|Nn=a-39UwBjh}N z8&Fdgbp8)`pWkI6HAcvJ`kB!65a6?ln6rh{pl1PEfzFeHt)F1Ryi*CH9^{@5P`EJL zps2qr1l>=^05c!#KahK%cTw6P-9;$@azErQN`_3(U6lX-gVuF2Suq_GVq?4j@;~%W zOaUP_#*1J+_*^2edm(2OT0!FrvVRHWUhujOh62#Kj{pB5=NN(Phn{H&4L|68I3V{z z)Muio-vU1a(H6;kJ7&<`nPByd(NOi^G9GOHbVzuBwtoNr58dAZ3h(V8afVD;$UYlT zKROqzel|#)*~S|p4q5LEQokD{4hatiRtEk5{YR!nU5E``l4m1}D>I{NtefT;CXoCz<{vcY^I~W-6fZAM;;uF;30?jFd_F8FyM}A}& zSfK4U8GYCSznu)4;P#o`1yDCc5qy0s=+0))1RcmMSWiyj0;sLGgFzp3YKyYDvaqqa zF+1oa5a_@@_)Jf8Wp-5)HDz|tM4TD3urf1<#|*k~%#M+f+eUbE=_X+t;n1)Edp#=! zn=ms07PSO5Ms;(26$>X0R^~ri3EGTimS$RZo}8>qOofF^y9x`#J=~%Mn0X!Tb^L8q z7`tA+oU5VolF2|(q4r{Wmp};}im?DbQJqwai@LM z1Uh|DfQ`W!ba46q|DapRnUK}n;ZR?Sq8@Y}EyR2qWcA=Y0KUVCArqvYfssM<{}-kt zrd@<|fy+y9_XAqNf(1Z_&Va6O0GY!8-e(C~vk9p)Wua3v zpe{FP>JL2FqR7uE3cd@6Nm)rv-CPW`8WG%()@HP4RAg4}V!Xk3HaJ1nD%{F0TFODy z&%%q7mD$KRj`za9i=Z>dg08YK2Z!s1IcwQ&+Nun1`>ys&!GFP zAnH>fI0F~2Qt^g)te%z4`9)Ns}Dv}ugqKrS8one|38#T4ennxW(O|@0ca>e{S68yn7`E+ zLqx#xpwI%zgZ*!Z4S92L1n`pmPv~)EGeZFDT^1 zLE*yS`9G8ibl!j(1E~H5iA#dTA@wyVeSy_8yD?US#X9Msi24-9B(OL{eIwL- zHf9T?`dtBhXCX*E8)Fo-eg~;v4~`Fr`F=>|PXnh%ka|#hL^2A#rU4z6K!Qzni2q?ZmcVn|NyD{d1#UX10LGFR5PhkuPi-XiJ1jiply&sbLZgBj8 z)iWC*skZ{hA4Gisl6nbn{6W;4AgQkh#~(y}Ad>nFaQs2knY3db^TFu`e7*$8{owN@K<*C#i-Xi}28So8{92>OtWEbAKpPJ2*T+>Ota=@BxomgZ#??xnI&AbO8r+9kx8kzo6Bm zptcpXJstHwlxYGu{6XqL<}icyAVAyeEDSmfb_{vD7%Um=863cUWJ>|$6YZc26%m6) z(EYFo0ciV4z%CLt9;AC`2ZI^tM!-9;8*#Z9WWjef?_l842d%({pHd7T5W}({n~zx? zsIB8*I|qS6rRio1!F zjAtnLqBTA_5k{SVw*{p+^i1WXSViU4#Tfbi{;>=+7LOO^W#wZP6oXRW^aTlTP<{u8 zAF~@{4p7(u5GGJx)15;j+4x94HJ&BMs!0Y2M@frXKWDT$yS79OS`gq|0S z7r1PmNW2&ixTNK<7gcZh_7-VRH*;HiZM} zh$m5l*(&ZRTcF$Qi1MFv#{dxlVkY=#HB7@Qe$7;?eov9rJq2F?pR7(lcL zlvah(wop0~J~Dx^iUV3+BSHvzFE)5&l!1W_e2QHSXxFX;=vq0@WFVUWXebo4vRVf! zU%P`rM_&RmjkJqFiGhc~8|*gF(FLGMCeR`D-q89(2YggB=btVEX@pfdSM$0N>XZ3|VH$ z365JVQcNHC+xa7A1KIrO(IB$jHPe0HGLNylf33oi!n(v4y^kxRjzIl*;4g zVB%oq;)7BQObmM&JsDpxL6-hxgSO=GgXdr%+hq{v3qUI-Y(556;|$OhV@%*(i6CDy z!*{>1T>!1DgA^X1RW;n;%L^IJl|d6%ppu_incbK%jb|(8Id3gv4r3k;=9#sOo}Q+k zf9ZKL>TL&=PmB!58J!v5GVNke0qxyoM4O9(u4P8J4m#~3WEZ)E0kmS7kpXmxBj^lL zQE;5FF(`v8KggbWIf#ptkv5Zpvbeb%_%s0UC>f|sP&YSbe7ahNna@C0$C6*kLetEK zPmfzgSzD2nkx@ZTT$$I*#7 z=b&^1F5?&>2@SF>kI~1*QQpX2A;K?FfQ3&_R^Q6cQAU@Ikx@kfLNPkqnQHmFnhI(p znlMSqSnAq%>&vRKa?+7Tb9$|E5e8F^pL6$+6!5*~6 zPJ_XL!4aJ4H9)7+U)aF_q7gf8p{rxC*$p~{7!+!94E)fsZaIC>o(PZ_JA)j9xuB3G zX!Qt$1)7Hi?VW|^Uo(3~&;%@K7a%BbL8tmbj#L2OkgKMw#Lfn)L`03uU;=Cq5k?nV zX9F!paXDcXV+B)tZAC^|1u=CqW=Bp&C20_$t<1`(rT``xolUhgO*vRORAj`|Wd#j2 zly$jSxs>Ilbrghdo3XPpi%CGpH7e5VtgNEaPzrSZ#5G1w#-~gN7(^M=LH8rUZq5S* z`3?p|T7xbPMT8Kv@&@M~VF5(iVq<_@w#};#I`khDN?Z(LU@-$jMiD+Hc4a$8bMRUY z(0*cLBQbU(Gw`&f8YugKmv%5dMN4fiHjaI=-~=ZRp_qKN{9Vli5XsH1K~{~Gi(OnE zN`cZFGsA@czZrKhmLtk+ZFrfjEwF=u;{xcoDA28aurvrQvn4=90=UfvO@rW5V(^sN z`k=EwL2(Y*+sZ^rnau+(tqGUetdPPQLJ}yl85lu53&y#Og$!Jv5(IQSJm^Acm_MNv zB6fd5%0bW;EM{;S!UC!@!I=kCGP8n9Nl>SP#p##0z$n90Mb`n`B_9$!O1L$BcTMC}{T}Xg{4XWAne?T+JeKV!X^u%94tzoF)SH z781IOA`)sk!g2ep6Zpl&Bm}s)#3a?k#8pjsB-JEk_0;A0oI&&Y)&GAnE@3QZ&|@e9 zbsivR5W&I_y0!t~cIbJ9;Kr&Bg8+EnJg6<|$j&f7v`V0UOkC(qcBsvc0AK%3E=QA$&enUPUOT1rn) zP1Ii3(#l9#R>jA~%#lxrTT4wzosCIVL5t&toCqr?i;#qbgp!Q1nYx+*I}@v#vZ0fP zth~64lsp%kxQrpV4r*gyVB82!KYR@7px!X7&gX;IKhP2z5dw(Z0;%sIYphZ0dx#iv zeGfWV6jI+SqSg2MsP#QkZO_Os;r}njZH$GGx?UEou7_^BN4N~Ss0!S(0JX3fz^NFt zDoq3&0jvy4(7kc2`k;XzPy{d%uIkwtnF&<&9E=V)>w3`k42Bv1e=#m+ECiRo(V!iU zu)1DeU>}X4Z5KWR9hJ^@H5DP%NhfH&|z#KF?I$6@PYfFdLF`p)bkeLHX%4}A3=E9x7|X%w zEFL|bAke z`7moUXfPNsSTXG1#b5&6+X>phx`RO-ypa|8gcWEyK(uC%(;&Y9WQ_x)41=5#3tD5$ z3_T+Oaylswygdk7c_$1SLIz*p2WcgO)`Dq*dzPTdcRlcO>s_GRwxCBRfz~c-T-e2+ z!vK>rVSuPNFceo)XIC}{_x(Vd3B!b_*dc4g4T2Fm8fdW@jG%4p{?$%3w}lVb!O)D8+; zR&#Z8anQmDHpVLob}Em#f_XqEAhHy5XEL#~`f*z++eez|yBo=}y7SoCdIy~5-oe7o zG>>~KyN)IkqZ_w^od7q#4vzqbiGx44l!~6bgNT->1HVO_vznx)v6PIKO>#81gP5j> zgPJ8Pi#>Ofu$r`$l&S%!j8kA>V2Wn~4L8a&C^H-e)x?ndD|ax+K$m$c!)s*dau7ti zhBi_V0?3Phz!3nAB0jsw-3*)zEDUVm2w($WEe9H4W4r)5L=v)Va|Z)xpq2|7(x72V z(4C)b0+1snL4z=$h&* zWDp^ak!TS~5<2CBIDum~11kdy0~0unBG!k3T9A;_!9kl?KbPC@Arw7&v$Rtjik zG^o!4O0OVs&n3&KD*5A0wNy8}Aok{L7-Eo{uprp*Yu2ZmW$7(AAx z&B(0$-6t^E%!w<^Cq#bFJduUI{!Gl4KDJCux(1<{K1}NWB&;l%IR3HhW7_5I$t5TB zZ#iQThX|LN*56hJW(Lrj=t8C^3~~%c3}y`5L0e$Vq4@+WP6p6Y#T^Wwyazg%cn1T^9Y=PC^$aWw`x#gm&NHwu zFvo%lO)c=~BdAvi%8Wt`Jm4{j9SmXupaB3-I|fvs?gCw!23EO)K~5i3RzbH0fCg~n zn8b~t3Bwq4FpxU zu&A1>fTNkV2Di5H0cX(sJOd;6t|d37V+?u>m7u{+)P5;O{z5L%KqJn=;Jro+;C(ot zDprC)7{2TtGMNHeLJ#T%v3zj^ZDEpy>=?Pv0AhgJ$)FvN;8rg*RM_=EI}JhSkwH!+ z69H`%v1095{&RAVuS5-;GNle$=ou{QD zZdIeNjIM>OgqVh$P>i38lA*ARqOF09fP$`^qKb`{1gKvQ$~zHEyBLH)C#LcK1KneW5P+8X;0yxJG0;tC;5II3Z!l=j7HB2|vg#Z%Py|{X3)*c4YPo?r79d&} zGy6#Mh|C3{eKrh*!kZM zM$q&)10zE?1NiP$2652ZUPcDgJ4Y~bKXk!7xVGkC-~g3|+PgsqC^CqF%S2E~$O5jG z*ce#Bqr9MVb~qS>!PN~Y_Bp|&0cgYyvNV*7ffKqk6jW9~c0dbU03BZd5eIG3f#?VI zejsLoat$P<7#OOuE1R?1GqKwn zE+~_Nifj-K+8zp`)!-!uMv9jNm64L5DjPD#0xAJPT^>2;HX87e+V>gc8Qz0W(RSoy z*v}x(aGpV)0Vc>&=*Z5{z#z{sfkB=Dblx^IXk$?VgFHh4NJ}B;_#SzvY1*KT8u1L; z42&R6pe?=n4B8C#4B8CLpq(4l14xFs(2<#;0VD%rd;l{* zRS~S!pv9mK&74~Lj+_kq3|b8G3|b8O3|b8K3|b5Xff0?Xo0T(VrS@Q&|;X+ zpvADBK?{6vD+72P_D%*>aJ+*KS5gsxECH5>4uykg&_p~)98_c5x#!b4B)4b8a(!b8a(<7ZU|txh)yF zOt~Et@;#;~1Tk)5HqxEJ`EBoWDnoa^e_weR10A9q`uiR9wH;hN4>M`1sd~>+ z&=ZJjQ&Ryg!e?f1`rprF!>rAq#9+i=4LTFRngMnasWr3#3Zk`erwYXQ93)j}F@Q=x z1_oK^8h6lw1kjP`prz5qU^zYp4rr52ltBwTp0|s^nt=n%+QDEA9^nSX6Iv8)?!p=R~8ll_1%<|l|X}(e2n5^M#i9~obqZD zQ#IcbKQ3W*WjjrMBMw(~Y3cYq0-Wj&F%E1zY|6HLQd0Zbc{w!g4dgimSeVmUIaxg- z`8aA>CCj4X)-?JuGNzY{`DlsD8uI;nonR5~rp}ng7;Nk#%B0VzXd7mdB(AlGF*eiy zJckRqvmt>Abl3a&T?~c{7ASYULxT%ZY$EEB-3)vTEDT%>EZX42%LPjLtPBneTnqsW zTntQwpo`6RGJr}NM`nh620oBHGsAii1C$XOKnzfFzW`#yf|@)#8Ti5J6BPDh;POk7 zK@8k$2930U+GQYBI~de1fXoIR3JvO&>|oFacY$C>!J05|g0HZG9Ij?+Vg^dA_Kb?= zir_X4Xo3MTkZR1X%+ILE4mpq!)DQxlyDO{ZW+cPU9mQS0j`80^ZpI=GPFpiocUf)q zMB|7QE{UTin4iac7)rt|cF%Fhe!S{iH z>Tl3MGc>uv661*?r(tZw;l?2?bBJG5K~GIt#12%A8}Lc+sMv~1NbKd* zb}?4u1dTDsl!St+cE+?~kpLYD1v9?CCs_m)^dWUR6H_Lmudb^Ila7*IxG88{fr%lE zfq|)z2{fd@%@7Eh>xZn00u2%FU|@vja%f$SNTtx~9~@4g?iJ{yM^IX1`2suXg9Wsx z!(5Rcd`YIcB6|Th<2UZN{z3j1xf#E5GnKix%=@Roc*Dg7oJSnMchiAJaVCLgVj*|x z!p1iUjw3al=Ms|U4W*ubZHf>t5GSiB4n9iX%hGewXA zVlreZ1+=do)Q}JYr}iBTVxU!gkmiapxT(U=1PVW6&=vG^v$(VQvw5;qgX9kL9^yaD zeMH&GKSwZt+rTr?X7)EdH@#?mH@$n?L)}87Lft~IRu;Gv2IzqLa!6YpRA+%MQU!(14hGQTDp0Zz zzW_Nm1$2+FfuT9*HbHZ69|ba;z@`m4C0HF?w}6X4ZN@`lL1Mw&!2-eD!4|h8LMrkm z2|VQ9-EZo`!N$aBtl!<<-tH3P!ss9ElUEnx^2EeQl}CtG7qr2UnL+P=Ka&o#HiIIA zE`t@rT+m7?Yw#I*knuRsAP;C<4$;?#W=4dMp;JbX+zDO$2O3ue_1O`pM?w4wYHfqs zvyhTbiGdAT(kbb~?(7m_P-3tGmusNbIA{wTXxvH{JfNZo9%TaWIs=U`fk*H7!GkBD zDpwiQ^@Xgb0r!2)>>(!xXfrYjx(eG0Czd7(+X}l1+lrW&d08=vYsd=7nt134+uHV9 z+HI2cBqb5PL0X(m;gPQQj!yM45VnkBHD0`vndBAB4+^vI-D1Zwl0|sUWLvZ#o1g+M( z0~t~Pm9C)Sdnsr$LIyl72%7p<15fQRDuEgiW}s^@*x1<^g^jrxjfIVwm8BV#nHfP1 zHgKjwoU+4iZp_a3A(Vw#GB=ckS?cfd(n=Oqwlrr5#kf&cf}NL%SwI9zXK|k6WQ;5j zP!`B_y9O3GXdUjgO;r4p^qI@hF zCM>+7jEi6D>AhqWZ)^MavOajuoZxzJJemSR1@1!I#Jr6_1DclzY^@4Z>IBguA0tJLvnOOy7#RX5haB-`c`I>l5C~|A7 zw=Pch73Fft;EWH+G*@&F4vWr|(h!t0)mGxl0LPsabk0PMK^=5T4j=r^a8QkpC_SNm zLiiey!gn$-GjM$YjaErOPm=+yN>T@laWF7LXDc}w_@Hx{pnyg@82?COsV!i*Rb7z6%oNMJMyGdRzrV-Tjr%;v(ztQBT( z9-Pl(85kIUGaX~#W6%dR+aRk-VEG)Hz!51PS`F}lH+!(_GqQ^dDhryc^E0ZOGyX<4 zoAJA0xDjLGKVinViHt_!hUY=!gt82MOs+8ZGcrK!+Rebmz{J1~-md~$rL4}bXsRe~ z4myjQu?*~ie;XJBARg#Lwgck+|6dq?Gl86r#r+uV9jJ%E?zd-@XEawAG!|qR2Q7_` zMK<~{*!7HW{|Uof4{|>PLmyKFlMaI!d;BeN5nyKUnx1LtM|UZVwt; zfJDW4u!+kc#-VVakphX6^I%s%*hv06#vlobA4!;<(1{p~au_kv23oZZ_8%m6#37M| z>{W;*$QD9FIy<8}qq#b}vZ*4IESe#Vjv!0Grh+U%H>fO`Oel57Q$jZP39^QgwFhxOSL1jn~`~a5_jI1sPAteOUF0iG4KQo?$ z+Y`jVz@!hehmirdJ)CflGeYvNpt2yWC`tfZbkK#76=D&i4A`Q7=1ja$i@@mwub-gB zrwpWPj_N04L1RH^u?_LlL6?8Op;pZUTg7c{i{re3IJg_xPy#LIh)-ZrhRn}zkX6j>50i{vUHY3m#zzn+?K3W;VxrnM5$*P(v@IWuovBVQ9~WH&5Qu+f(lRX0`S<~Hy%msfKL)mw~k1Eh_(i@|`w0dxWw zYI_*k`~}CW0s|8RKe%TDYWFfRFns~_%b6Gyz#U_KeOMt0S~tMQ1j$;Uo*yIVWIWI@ znxNnV)vTh*f=njGwu~CmrkYaf?x}V*DPEe!}J1D8SM4Rb)SQ(0|Fj|%{DljlIp!h|B0o5=1 zpr*V&XhM58=s;Zt1+ZU0t9|sqeqn?zkpi7o2|54@R5=+Mo+sQxEZ)9q2w& zP`SZIlst?89wW0&f#E~RNIt-)wp%&5RPtHhE~McmNJ zL)R?YMNP>e+A_FW%TRZAqI+SWwq9_tt96XKnV2FotIPlY3?l!(GPy7v6H;e7{Qp10 zECF_=gA5G+(?RW7u$(Jc?jQpLSne=Hj)4h$W{Eg>orFH9&(FnR03ND_3}++evIIe) zAqWZ$XqAiT^Mgjd1fe~BE`8801JJl3sLu~N&<->>sm1_0It;XF8FurKn7Fwfqq;F9 z?!gxjq4ik*=y)2-s5-}*8wUw9i`1voYI_*VXn19sJ16jRGBdeaL1`X2b3c8Df*=D! zEvD#6dJ-Nn*){>qvBs`GeilMvT-Mew8dNv4GB7Z4Fo8OyoD80z9j#p8p*zT#d+hMO zDaP0>%IFYub_z5C1UjMFz|fr0SeRXrQJGm$kWn`;hWj4}V>;(=Mqh8H{J#^unUeoL z1?6281_ma7aKG3Kax`c_6ZL##j5Zb_@j5r7fD`CIFGdDC z1_q{9CXnlbKm!brk#|@d9U4N2Ex#Be3eZpnhaqGn0g_NbqX`Cv#-K54abaU=Mq|cn z#;IKM1!Y(pX9xT{zNl%U%?c^S08^LVwOg{u;fPzJ3G0u5+L zgXc$gFxXrG8LtE$&a43~{*W**G*?38Bk;yfNNWf*Cj#Bt30e36Ui+blyk1|9xkFT2 zNlZf5Uc=IZlU3YT56*SxViot5QL~a{<`$L}Q#ImXVpU|+fzS$2;W_~o3k^*lYh`yE zCr3Ej*2&4v(p*MYLD0yEQ=Lyi14>z#%jzl!GBEys`d^2sjOhu3C}^*RAOq@Iw$O1N zjL}5!QM;hIf5^x@=m0`cHxIIQ5_Cx;C<$;t_gaW6AujT?W@J}p=40L|Afu!$XKOl3 zsGh^gYAyGLCdfTRGP;V+21{6&ei}PD|M>#Bbm;$o1}%mjCVR#kLTU_&g2@7G42d7+ zgYpoAF@qPA8Iv@FFle?1zNTY0XmcpIZMd6(nSleo@@oeJXqbu}wB7g)=zKuXk}1fF zL(mL1Xc!B$Mgy|)3)C|KEj3g&M=a-3WY2Q1<6a!|lADpo-51LI_r={S#i`XP1xzq7 zF@Og5Et&inK-*_@K&1&JCqTy7F!q~*Hwl4uxr4UFD6$K)va_0IU;>{fCe7r>z|O$UpaYr&f!P6CaKZ&IE1`1-U^_sO zVqj>lYOZPyvO|$wF_5u}@!t+!#xA~p<{<0-g`9xeVCKxg1UlJ_$qHN^b2GT3`-2T` z2Xs0DQ92@LWKdXwwswQ^4Cux&V`fHUVMcXfW@TpK8}k^20_OdDCv(4s{eBH&EMx4y z#s3z&GfFcG{(JiGJve?r=d1-WonYW(&;srKgVYENph_LIzY<#dLW>ee$pN0GlV>zG z7Zzt!*7Nc5W({8A{_jN?;}fxyH*PRam;4*Zz{p_4z|W+{w3>mNfd^DULPF2L&|H|= zT$)jwS(u%h(df(>`#rnt!K68(2BV6`zmJUk8vkzmyQ9I#|L-H%eNqgmOx8?cpzFDI zF)+c}?7P8f4l-6CY!2$*nkt$qLVNIY!EL;M7Z^(*%{oRCaNF{V%fA;$?Kp;JCTpe= zh`GGj%w>dhl@(1DO(A_}CTobnJ&XoWgO`F0{`bP=3e;dm23dwwCOepWk<0~+ZE%9y zs1WxGDvBzKLfWLVU}G6e{#}3?3vn-_1l(8#kh#rFb};uMg#*G|hG^f8=fI0LQ; z`UG|`^nuQgxUho(#0HH}gJ{rFPY?}Sk_@6jtEEA-GE^OC&H==?hw@#av>TN6h0=ad zItWTfLg^SN9S@~bpmaKv&V|zXP`VsS*FfnODBTIAyP@<1C_NQQ&w$d4p!5nTy#-3| zy}+=G;RwSF24-zg@iBwp2zZgP00WFA4`(UBS!!^WI-KPSXSu;yzHpWwoD~FTMM7CS z7-k6UU`V|)4rrLcE{T@vhy*TE1MdNDw`U!E2*g)^D#0TiHU>upn~Mhz>BUytEo**ploJS z@I;2FDwJk72Wu8*H#HVDHZ>Myh0^NA?8+d%x~Z`!NDf4UFoXDNeAqJD*<$X+u(ikL z#s0eyn-{x3jLj>?0tD`X2nz{2b^}Q^19o-;HfI$!2{s-!RZ#%}Q4rQMP*yeo;pajD zMn(ZbV6sWeLsHaJSJzWi(qnaATAOWfH=rNS=Z81SJ%=q zT}4(#O;=Y0|Uuz=R(@iVY6FvfzeL1y~`nNSDS ztDxB{UV$A9@}N3K-CUd*oEVUgQouZEMNucm@r$fD6BDb19E4f|p`bjbBT~y$|9uzZ zW94TR5ywg~Fu>f|f#02=WqRoDWHuM)XC%U%_Uwb*ZuWpIyOMyn8K5;bqE!iPL?F5c(1}}coerL=gHCIM1(*b2 zYeP5%U`M)uS{l6YgMc9GM?@LezkpUAvwblz1g}E0V+J)p*%g_=%knY9Ws(QChY*X1 zyslgU&jcw((=b2p=iYvdCl#ca8JT62Ar#|5=WIzW1tI6TfB!HZ{AbTpE+N1s#402Q zr9gdIP&l|UJz)@H5Ch#J#>pTKUQ`7M2Qd=D0lKpe5mFfE0YMLeCn{hBKq(j0s)Ysw zctJYoI4p$6tGH)N&EcNo?Z>#muNrjE64bBG|LmEb`~{8q+W!B-_>W0|L50DDp#`)k z%#^_lT&IH0#X+ud3yuC&|oY=EKh-9;~Hcp)JGATjJr(&ctZK<8B)m zry|5}V5q60Bdj7LD6U~H&nM0IZ%?$Ym9wCXs)(PKCLcG4ydtQt@n452k;#+6g29a; zg5lUM26u)?hA438xC=lQAcAPbP9ls@k_Qdt$Rk~z0Sz{Ahf7`nl$=3Z5j5c8r2#6i z1Q;|J7>mF+-D@xuFlc~pF>nSQXbQI58FWo>KZ7&Fd~E7tFjzZBPKy%YXe4Q4JF%PLj@yICRSyoSe_zwbtRh+Lpcdv zIcXtHrIP5Nj(_(|Yyv$)bu70lC||U7;b3MqHib}E>@2k`c(^&`CA4(7*+iW6v^>q^ zdAWJy)Lk{S>_8kgCT;<7esNwWYv0f=1uX+z83k^2Mp08EAsJRR9Vi9bGsp2?hslLW zfWe5tg&~OH&@KjJhG2#eaQGQRH~WC-0C?`jh&$-K7Dkc>$DO3WP6o&_8zp$$DM8{+ z2^4qC3<(TM42-e67(5u1pn1Uq5^o+1^BFu~@#X=JH_&pW9SopN>BjKbg2W&wpWux* z(EdbhF~*D$N5Up*pvV)2L?uRyX)7-03XnvPt3XJ^K;!2yIL^Sahc&8rY*qBpV~KGO zG*+P0zlWeGlU2|Htv_alo%asDlU)Nb1RhTqTREUv3S4A@ z?#B`VkC}l24s<^jXxAhcc%Khw(Ikwe#vlTY6wtlL5Egiq6y)A4P;jycD}ipFW)x-A zV`PS|@?n%?1m8$6qvslDmmUwgKr2osFhxk1nT0Wu(`qJ!`ENO=6~>M9OkH(ZMM83X zj28NafA>My|4!(GmIH&&u>Ar)!Yl zgnG~&0T6o`3P9=^m>6vT8-mPdux9XPmVGP@Xf7(~G%csm$WQ4Tma1260n z71+t(3@!*+!6SQS=IY=|MHyTy;;44OMWL|~=<+mXBb3UAF+*5ITENYckr!0g*y5~; zGz=s;MEIm-)%XnOqEtxdIfP_Iw5+9Aqjjxt)=g6CvLYOUd{Wwc;*4x4l@uZ#m{p+h z!^Ri^iU)W)+5;13)I4i6H;UP z09GG_EY5TjE*=gNXJBEl|F6T;#>~yY%pk%b!63r`-roedDF)O^0(4b|nptX>a z@KO(&6A+aVbX5sL0DAHoBCkLP>A`u0i-Cm!vfUVTeh&`=sL{dAzylQnjps?+*})(K zYET+8D}!}wTpAf!a$FjjSpNRG z!YiRHre=`G!qoS7B51gm*=ni!Y}uviv%%@a>c0+?2dG?Q3;?YGV<=^42amg1|Np|I z#q@!}iD4dS4~jE`3uuiCbUY9`uZ(CjWArY}K;?)TQaK_A5|Be$8R!HOaDoURx*KK! zuq`KY0+7v7pluRn;MORpB@8e+FeB_kGoekwp+%${=WGsX%mCei~l({S@ogzaYi74x6D@d8@NULyj za0<(4$*WpxiZOEY%W#>PgnIw|01k7f|6iCkfX`q43|f81Y`2&}fSuWn0W>1Z@c%!9 z)&DO{nqYZdP#R{o3xU@)pfX&D4U|VF@ zF{Uy;q{dl^BG}JLWPq;b2Q`|s8Ng@tfJ$(1Qx+5(;E7I9On_H&g0{_LIV;i0)LKa0 zMhi@;D66q^F-yxsC>_WliLkR0Q(dfe18kHbq>+)ftpLBQqLH?(AfK#aJU0guJLIfH z5XHdAaDg$K@fi55#AwjWCpUOY1FY6#1Eobaq}g3)od)(N67qfKGs5{sOvwMjCu?w}GLsxg8_o<6=mjS5)qS?7E?AdRnxJT zw}ZGhmGLIi0R|n=d3^#5y5PnBuyBL+FEM5&!0u%ShZY|L19Zs)pS~mLz#cvZ2L?Wd z00uq=<|0RCFoUshCxal^cM9MpJjg$441x@x(h+Vp?sx2cYCacfJ!J?@z zF385gA|RrrEG4g{tftMz!m1=|WXr(Bu%9uT@j5uY@G)eAW-$1{8)G1ol!&vopanW2 z1Q00)6i>|HI04P3>;!rE3up?154tiKcEKlT2{$MufzD3@Eu;V)E(1Q;0JLPAF?AW& z`Y=^J4n1xgVHxHw#?{tW?i)B1tX|E)$Z(M{mGJ@iT+NtW3{tT5Fwim@dg?mDWzgyh zDQ;vLM8PfY9SpLdZc;pGBYELY2FQVWphg)e$st7m(t&{Lps`e>gSZ$Sjg7hVIb>wS zbvc-rWW>Z(xr}tqan6-vzWNysI3_n{Fe2S|%v|wTfl}n5+=2mk0meQfh7P^XDtbCdZIwqoOCepI% ztjzLKV3IM_%1FcAT3_abBw8s_rc|gHiHc)uc|ZHGT4C&33cd_4G^sZ4@u~}Gs14<^q~U|H5mq8=<#LjcBa^(0vLY)ZlPqJZzM7gICkuy?l!m3Y zl9CoT3x}edn7W+cF)2|Nc4kcoIo*hbk5yPiR+O2aRY;V9iQyq*Hsb@P0}SGjb2XLW zYy3fb!o=aB1MT);3mr(mMgbZcu+oiPegtSZQzw3cs6S?j=J44T0%vfl?%OU2f6qE zFUGlyp^&;=3VYp-a4&NDfYt2^(E5Yix}6ntpBd<2C38@PPN;5YB3QSxL8^8ZE*6|s zI|CC#GXn$TY;bx(J42Hjo;#o=Gs5?XR0E157OeF;3%IyNuGc|jI1dA;WK>l~t=BbC z>vacswa&oEFco~hsXv1X=q`Ez?DaarWti~-s@EZBsmtnPR_E|Ahm^-^paL1AI%g$R zowMPo%|Y`s)BpcsoW|(SAjtr(&xIJY7$Ehz5O|~))`G-a3K3JEL(jV*RG)J|%2hn| zIUBTO6+^Gih1fyWIfw+UV_eI?z_^*wA998!I|J7G91%BA?}10pKxqL~pYLE`z5{CK zu`8Q{Yx5jfZO$kIt<6E@`K1597#D-f5@>y{04Mz) z92~mj*5^#5)aPvERObv#3`-dp7?&`H!s>Gcczvz_K8X;P&Y<-zf%=?qZ4OFjtC%tv?=f9rkYuRX#lQ^P?^6r9#6iN5nE||ME7p-2bhj<&_yW** zPz(@80BHQC(2p=2)aZRG*8S1E~;yHFmUQifR^Ne=H6MqKxU?d8Cbu7_5kyO z4%blpph<6wO|I?k;TWzXl-UG zAmSy)rO3snz-{HGqTtCCY@ll?p2fn%#F8a$X`~IxGgp`_7*8?pVPIwuW>97b0X4;7 zXWoHk?LkK-f@l#?o&m2y@CUC#06PG*9044hAjS>`nLD6qZ_sJbpaqSftP47j*uanx zwkiSMo>NC_&M_vaMww33wGdU&lLC?YqT(v-ERvF7l37otNd4bpa~)|tB@qazFDWm= zBO(DILF;Ro{?{^jGMr#;0k6o?0i|G2?+jOrg9ZRV@hAd1I!;NC34A0b_+$ZbK4wrj za%&nZ@H6WQ2&pK@8YoB^@+j!pi0I@vGI>gC8j6W4s3^#)D~L-NYDiT}EmLJ+Ak%(v zZ1#i3DY4mK;%;JqX+NW))H)%!{Z$OY4Dt+S#QI<6&JG5-J3ARf!D&bsJtUYRONu}{ z6qT{LC@NA}K}66(%RL>7yA0(-g;YfBrBe{`bB;NmL6||CA%j@=v4M}G-N7JoX9t7i zot+E{;5;Y8pa4GLx^@SH3@BfM4pLVI%V7uEF@L=G{psE1Z4ybl#$q&em%g?F2cvFETRCTp=)EVFt;7Z)q`Hbd9L zV5LCmw}8o&(FDBah>O9TVFv>T$hG#ZYi?g0gZcsiacSkP4zF$k zm>KYe0qBemkl#_mfD1g1YhVb$M1s*GEm~-1COPG zmpOoQEHoxEQ=yr(m>uetdRWf%hdT(emTM=oC3G#90W4M^kpZgrKR%GB`c^1Pc%Kh)PD4rC{Z0WoJYbu2bGBEuwVsd4;&0NPI$)LcH%>dfq0Ir4P zU||Ph>|jv1vx9;6&JG4)xT8Tk1K7X?1t$ZfYOeuT?VxI07`!W>7F><*U;u5!khuUl zHAoITE&&?tGcW`#w*=R)pdtgb_z_;ygEow_tDEyks_+Xc@(IWZ$_N@MAahzH^po1v zTbS#FIk|cG`7}io;Ebu=lKJ_{jSP$o3z+#BUokf_NHS!Al00;eG_<~l)@7^=pnW=^ zeFjXR%mPZdG-|K3BfB5PGt7K&$HN(*_R1<|A;x>)cp=mM4B#W#@wc}i5k*mZi&+TX z%z`sO?%%?!!FYu^n}Hd$vjB9EBj|z$@I7FTtPB?zm>C{0Ff%ZLjwu8k!QuepfKIvs z$udD2kjxCAv3Ukam8!_DxF4M4nX{ciZA?aHW$fVN#Rg1iedLIC6nkPjhkWr%Y?P2n93prdC% z2dPMdN+8he6{wdCX*;m4T;R zAUoqg%PV&N*>f8{h*WWsHl_e$n-^Ond)p%BaV?#km)ny zLFTOt%nZt)xIwxz6I{N4qXZT=kY+8TgMN++(`T7w>Y()VjOjCDGE6^c`!6E>fLsGQ z4-Fi*AO>j8Nu2$er-?E1H2HNRAQv*sWBSQ>hj}>z8-pci?IHXgI&ixiUO!#{H^9;B zM>g%pl8Q(LnXJ7-}Wr1{89RsND0mVGH{?!M$1yr^` zf(@Pyb}%sAfrKF_{LIDK89AVKFe2Hpj_EJs2j-Ow;tWQhFhraI3$g>3(V%_9l*07||P8`VJVeQ>D`?KfFs_M85q_nVj)t}wk}+{Jtj zJa!xf@~IN^SVG7>C!o9}&%glgYJv-DP>Br=-gsE>g3>Z$A*f*s?o3I7iwzF&lpccs zWC#k}p9D?4fHMSc( z()WABc#0(r-1k#uhyeBd)WFB>KyF;c?EB3JCp|}226+Y+@D&GOuf>B!cQDA3)c-^C z2WAgYl?~(84eFkg6&IdPK9hn*8VGKx{ z7SVVzFhuU=Xr(DDNK0yHyB9MrmlYS+mC^!tU_kx5&kQG6^uYZ~Wmx|Ol9s@E8dNxt z->v+Ny;}+H*AZ_o>D@^Tdm-IPxV|dY9Kd(T7Md#qtNbn$R2ny~njc{4vd7ZcB`d`5Gp3wxHrm*#MFMvx*Tz!35KNpmS zpgl~azCJibp!M}XFxi_4S#n@b>i`nBFt2V=>0j*N24x(S7{` z?j{CjAk85bN%X#cA=7(CAr?(=U*8?v*9V;e!wNpL0G#|moqcdE0%Cy9!-VwwIT#>4 ze~1X*1;khY=)@$9o_-d3PoG5-R-D3m`po~Um>C#$GCzi38BE3?QQW&x^Ci4DJ52Xu$i+a0aaV&%peT|Nj>z zUZyh)<_wMu-V6-FilWMbkPV&YFov1ADd;$M&^i%ub~R-sHW4vnMbJhgVLA2T-t2LlfS1GA#2A~U-bvtIzUMeFyCL_@O9E>ft zvfkDju2zzwddijxAcm=)EuWOSiGq@~ijKOrvbBqivW~C`V~>KRr?Ihunu4)$n4Gk_ zwwQvt0t7KI{k`;mF_SmbSq3+TUDeo&XDo&;W5~`A1OlOUJOA6f1 zZBEutsmpC{Q~P(p*HSApDAXY_&PLTsHZ+K{3CUX#T;cHwiGSxaa`7i-tP)ZJ4RSL6 z3uWMByvkI`V93BA%*m*3Zf0)E$E>WR$E*aRpeujvn2qGXeK2!1ea0h-wQ!-I7P7(4DGL;fml2tNs1PKcZtH~J1u!>G#s{D82-wCsY`aDw1 zva%9l3W{Q)a`K{qTFNT=Acm;CoT#{r3@fX|LIwuLe@YC`8SgUAV31&7Pz6t$f#TH6 zSW#3_2^73c%1Zy@ZDo9{6s%PBL}dfi84v&S)d<%Fhm!Gkc}q_PH3btdQw4PeaGLx3 zfgzPifGLoHk3p7!fl*wYU7TIqT-;pUT%Fxq5taMzAp1V4!!^!D#m+T{rS`EgUSb3D zi;KW~cBa7du7TD|j8?BUT4EjOdLEU>!1VVr0}JB?rgjEC(7HfIW6#G}!X@_y6gPmzeDsm>Gl^7{t{X#aU4uujazI*7?tGkc(?wii%xo4odE4 z&y-{CRN8dGHPC8_@tQTpORNH2FEB9vt72eaY-2hE8uv6-W;EtxG`1-Cw<(HIhfzD4 z>CoR^rebi|{a5{WhT#_TZ1C6$12gChH$i2=ejmoI-psRq8?u}SVFm`Kf4Bb^GhShi zW?%+w=VLS$R0eIZ6Bm(VG8P4$!Ysn3tZ1reWM<1~Vg|ZE!rVknS<&?0ZEtVJ)iF_w zobt9tah5UB|6VhSTIy?>8f!BeSpIv>9Q{Xv`GsTT8ChjHURNXQqfu_oDtcF4Y`D1W z9k1&uJA>W$@6P{DMq6eV@L47dAiFggO%(+dO%?y$@$zCy{AbEo{jZhrG_%VeS1)FD z(48BM|JMGW!Pvv}jDeehff00!1n3w%V?jm6p1(OvQ~u_7doxX8tgi6>_kh{&-+czA ze`o$LVT@wB#lXtI!N9=GD9WfTD9p+Dg30OcJ|7>(U;o&cZvC4Q`LCbZ?5{eb1L&qU zh#lQb&luPl7#Kw%7BF`I&Gq(XO!N9z!|eC30pfn0|HX`|%+U-g3>uI!QHf1dT!f8X zj!~8oRGy0}Dye}Eu~s$(9bRZ|Vg@p+jZyU9YfA%0ZDUhSeM=B0I>s{2$X1?{F^Y-Z zn>pH9S@*i5Jr|da%T+xUXSb-M)<&+pa>}x2A{{}Y%E0vR@c&Lm6=oOk`78{qpwl!2 z6-9*wl?DGDW<33`m9cu7S2^=;uRk}vn0NniW!}xe!2HkWe<$NhW)}v~jeVf9See~e z6tt)kgcSvqO^v}Ad>W0pF}pD%=m1r7Wp>7wk@A6&Vjf}>#XQ9RGyGYz<`1KRn1{q< zad(NJe;IQBZZbZSn_6DjIRMk{ngbmyuG&T|w1mDPK3JOxj9si0L`~E3!(|6I=1Dmg`r|+WAlooRF zV#v>k4sf99>;KD!h8)Ozv;WCVOw4Hvsth`yU4X)jqO9h+jB4tl;M$a3RN0hGP2E(E z(OeMJYB4u878PSQ1rKEjo2aP^nnf_K`qwMQDEe>SYDw?u_qVN45CFXm7lo*eCc^v}92ID_f z26iSvrg8>B1_n+hP&KJ&s%WmRXsW2D&&bFCsuJxTq?P|XWA-sK`?G~vN?zW9sT^GE zxhsfx+t_#ssknjaHo^Z(7~eBJW)KFIJM5tLkGeU?C`D66VR3dv#`phXTp3^feZ9cB z_g^pLJhy)`OajXtCo@)pOQSbRpS&x)808fIGBB|G=lK7H;XBhIu-m~Y1a!ruA~Wdx zb}?|QnV2cUGJ>gzSqFy?7vpgbAFhAL<D&D%)rLL1*-LR8O>Qm*~MAa|NWI?eDhC4 zj!BhU?(Z$R9=E&q+3Va5CO!ssy#1p=~ut z`a1_oes+Btl7Egc+sG;R!J1pz0zM+@3n6t(IHL^XN=DGwE~qv#RTMQgRTTXf&R7@5 zSjQ;i<>iHB$319RFblIYgVH7AJy1COEoSQdz~ubz-@kumjKW@w!r-vbX5eI84QW3z zg1Q`_#xEbU66o+aJ|=cCc}8|lMsapFc2RH(o!Q8anUTpDXG78M-+M+uENx51IRRQK z7;Qx}Mhiv@P^(gsSq9Ong!tExfrUvI)(#U!ZHF<6@`74o=OekkN&Z;oIi=NS=70IG z{~7+xV@&!NhS>;F@aGg` zVdTHbO!fZ`g7S_8gAC(zXx@=!U|x>D($)G~kxv}WqDJ@gY?=Dt#ObQ9SsO2l8VC3htT@Q@p zm=UF{=P9&OmVtrk-|7GJ7!_gpn~|51UDZ^T(VUf?QSqM$;~TlZx0zJ`o{(cwlVj?= zch~J#(C@!ToxVZx_&>w{Zy7HzO=e(a;ACJBWEACOG-cFfWM#bY&)}aS<9Wu8e--~K znI`|c9r^DDqekSv+dsa21C_Ok(0mQ*X@b(AqNpM$K{B4R>r<9vw)t~JQlroA-+QJ? zvxVv+J_6bc%@{2}ZZ%-gWnzMrDa_&!$3iGkB~TTp^v{)f1B}HK;&kz%^NWb*5Q>56 zpCJPalLS*W0~@HF4vuj~Q&mA@QDsqOaO+4Fn$X_=_~G~E3sW^TeSQ7U;PIc~zXu}& z1LNQS|1%g5GTVVlLq>7Xk?^Lf;;f8}wJ!hcT(tg4F*a)co5#4H*-q(?k9;JfY2;_8 zd;gv>F#i+(U&?rdITCy`sRIK8qY|4uqZp_u$2S|b1 zY39c4it1{1Ova4n%Iu1IjLN3qo9-Bo*toHXvKyG1>#>WnxY_7>+Q_jA{Hqi75Su9O zE*==65EvouAu(CZL!2>KkX6pcQ}=JH{A5|CFh-})02h{j3+0$a)pRb|J92T^IbG6G zbKzHZ)SU@x;yFKd2DR=M={hR&|DEypv9_kGirQn)Jk&q&|DB9mklUD`uoJ}LYC*7* zjTKE58Mmxi^XK1rY;I%x^LMKJWZ9dH>i@no{rYp$i%}KH4UD>f*Mggv3@raZVYY_p z5Q8+Vh0Bc8z*R;GFk?~B1};`(b7fXzc4bYuz-Unq@k!$D;sN0bptdfkaVsA1vqik+ z@A--HlbM*C#hV$S4P2=2o#U3weSCBY1IypL3=E9Vh_x5g#01+bs%Sc0C@@;wLt>J+ zr({5+U|^Jjr}AV)Pvrn6wSNZx(kBT`Vz&Kf%-G%GbnxK8gH9dJU%q_#;%wpMbfBXS zd?YH=&)LM<&8jSH%xG+`%&2T`jLXlA3^6t_e@j80md+P0K=1@Q;uSj1u*fm?G*a!DuPw0cHgJc_}|dmPttN-*FH*8Q$$cN)w>83F&!&`W~Qs zRlvB0IhH}0K^=6irI3Ia=;CU1?1>Vz$XT2Xl$ER*)l5yym9M52>BbaE|NDp~ao&+C zj@K>zCjd&HUpYChF){o*cPzueXL>Y}bK++D>u3JcdHmSG%|RDbuZaKu!uXNtEQ1w; z9fJpGbP9aB2jsMFX7J7^J|@uJHSo?ETH3W^204$_2-Z+!)QQZI($LqC3RN*NRdF^E zHLx_`-VILE7+JlJ&)UQFpB*Tl$H}Uz%gU;$F`bQdP_t21RWMgp*3fg)Q8QN1Hsn+G zF@^N!pvm3XOI_%n%Hzi+kTxa*1Jgh8|87j`Ootd`859{9KAxh zJcsG&NaX)0dKn<$X+*DEYJ6Kl_6Vq{zEI0QoK5%1_>EGx7Ul@59Rx)scPNh)+ zcNaj79S95DUHJFeNL9_)SWT7D+*no3$Vg39)5pZb$JErv#6(Tqgn{|r(*Iu=qnXY! zfUaKGV_*;l^=J5)k<&T5x*2G!31qSwG**;BZkra7t7>Yh8meMys^V-MWMdop?*h2H zqo&5V1(a-MAjwwOMN`9CU0FlVT}RzWUfa-HH}&rZaQDYb4W3T_z5tKwLF;s3Q1elj zQ5{q-LF;ri*cjfgZ{PgCeg$_(!6SFhh*}-gCXr$YV0^}80P6oSiz=Hcn}QBnR0JKo z2x=afUhzMC*q?Ek-?3wUjMAr1dz?Lc_N>S0)1Y=9%Rl4)Ul{j+!vd6BbQlRX;AAK*T`yU z$dV8x49x#h|9@fZV>-)V%HY7@1xp(&C~3o#50$SDo+&ZKo?=c!=1OboX-YwpOl~rl zj*hl8nCD~?WMdOr>yai9`tKUd$!o!>NL?KibQp!-EG8*E1r-w|l!WDA$b*r%SpHrA z?+zc=QU+}~0f#7L1O~YS4^HO%jLPPqp%SnJjB^q^uBFGg88WP;_ivK2o=BjNfg)H) zB+y4+L63>YKpEQOhSLA$87OIK>^~!}t7K@Pq@lI{jF_Gh=Ld z=@Z-+wf{ezi3!qXW@Z#+RafN%741w+EdN^c7?b`f|6A_LxYmVf%fDTbpB?Tq>iyLK zjg5oy7SlhFy`P}=f^8L6XB3Cn=mD}8Y}ub`s0PNrH$nB*|A`FD3=FKMilTpSviR)+ z7n2N(zgIDEGC4CiNFcb37|cY=nO zjKKZ-ehmo;ZCMLdb$dk}F=6nGi<+IXwyut%9c&gxUeQ$EI91RCHVdPmV4@@kot;sG zXp>boR#dlB)Df2rQD+hFM+_B+u}I5^DQPN!=3``)WaU-lu};%~q!rW^pp+LUixg;p zf%*3%hE&EQOs~OnEIJsoENBxIim3Az|5mc?mpEACQdI0*4Vtp}yN!Ln)S(*Z640cJ z^gedxsh}y18s{Q#I@{0A^cr>AWfm$ImB+yJC*=PO#)(YN7{D96SOtv*kw^Uhgm|-j z`jg8%`A@F5H}m8SX1_n17$3t&{uvmU|8o6b!l=P?i-DPe6Eyb12pXb+%>euj^I^OL zng#Inh0Fr{ImK-D4|OJh0mTj63=Cj5KxYJ?_IrCnY(C@lua4R8UmZwKFm%jO05q2b z9d#5{7Bm(G4?2Q|9}y#uzmxp@Smw#gJN$mYa>2~(w*g}GaTb%?d?6LLe}`;rKxv)v zPcU>GNdP|Q2bx)i7z-au`t9WB$FdJ)H0dPc{Zo(uCAL2c{(oU)W#VDrW)KJ8^=ZN2 z%zzk=2Mv3J>w9o5j~JXsADf5OP^zFt2t@6l1(3lHC4I(6uz_;MhtQ$KKeqbdF>H_= zn4!n`5IVewF>a4Key?l@AHP?Ij^{HlFtGhmWYA>X$>ab(yIT!36ABy4S5|_wRX}YE zaGwh_K8$cGva1zAF4R+2VoZWEm~Z?oV4Co^;Li`311G{5r``1R-3$!Cq!zgNYJ)ln z$!QF1zc(@DGJb;2F$h3=q=he@&o}GjO^5_bQtMc*X$|SW6*% z#GC`_tOKO{V*b6IA%gKelLolG44NMU`5KBD-~T+pW&y!W8eU$9!Omx3{Cx(RR`HLI z|LSF3YG(E;nzb1F_&D3|?f<_pzK4!!gIcM=pqURwW@Tn}sCPjv8<4lzL9KLfqvAgU zr#Dy1-%2)%zt#V)KMLE!sqM%vur%z$oOkNZ;$Sa#!6|DQ9SWSY(ZI#NN9fq_xcT%27|6?Aw%Bdek~ySm~ZY38fj?N0w;WG%FP z`qcK{yWb0$|DU$o{zsef=q0mff6O2Qt`;`W%q}u8{@(uo72|uR`JnbA=!SPuMRxf7 z0mx*=_kZU)7P!aPt|fafIsX1X!m{qw_(+3!zVx=ZNa8BCMi|Ee*wx&7I~T%PL~$&|x*uhOf+ zdyCQ}?+ULfaXb+7`AqE)+H3kMyOhRWUAlV(c#g1qv{<+EN&BfHp z>CN?z6VzsxQCDYjhDE6htfh!NX#tw9fVI~Vam@Jp4g)(ljztk=9Vo=i)fLsv#X;pL zq`UL&%r=2%aTpkwf8YE6oUsQf zUPVFXK~fAOI8qpU{xF`g-}WyRlzwcVJYik;M{Aq?8OEbt&&)1uf+v!HhrBPEJp+}? z%)hTQ=rYcOjysB=&SpU8G=Bd?Ok^O37Q8JhUOT^ zgb64t&x8DGK3zlN_nZ&5PoCI*U`duyo(?fge}%Tdzjx4ily|}!D?ol``h5yo7x93{ zN}(o#XVoBqnFMm1eZP+A@7XM=a?1UT`5-&&o<4<`YPL|94>ZYvl_BrH$nz(#oXu##!1z0bfs^qsq|FGO zQ-ZV)QCo|8OzNVbA#BK;3TT%Cd}$6+!x3}=IOA3i!Bk^;Q$;ytRV7%XPgh&nP7SF| zsA?&zEg`MeZ~yNDqkw%skAQlpEYk8FF&#yFHKgXIf{Bu>lCYF1V~es@AZX2wn4*H1 zyo$W6k}QlTCL_%vCZq`(Ne4~M@CtHzftrdSX~?oF7*C&p`41O^65~9kMDX05DX7f| z8EJ=1-^nwAt`7iDCxLEu!?McjZ#QTRJW2OoGm8*o)4yh2&=Q&y8=Nb@Y?O7>b(Cye zY?O3_O_>s%?me*o9QpY(s4sAT3hs4aAa}Ab&V$Y+f#%4u&L+VY_biX%`YQDUvbg8J z+&9>)67wtA00GYVB}QKOY9Ho5_5YVJ%mvRgLE4;aFWmQ4Oe+PVh|L$kLA|GMUfAxawbz7^B#~d6N<~-JKy5PG0}Q7#sNiU1v-RP6AIjH67J5(Ev|3;hNQl z%{t+q+y6a{ft@jgshk1aeg>@zG6m27Kr)XatD>nQJ0qK)-|r-4X?t+)w6m9&XPNg~ zpXK6jeKV$%zq@9MD7Zsr8QoNb4pl(f&tP+JgWC-ZjEd~y&}k*8v5dEWMVXngF8kGs zY$|IpW3`QqH?nb{@`edy7I?iHIWTwxejXcm$2HH znf*FqhN!TRZGtxbZ5S9Bf1hArXFSbR4(d@bg4-X6;so3@VgHlPvUR=P?B6StWbAA~ zMV76dygW<9Y`gWpz0DYzkC|;mHhPoUF;Jj@%;jVZVX9;hU;wYcLJ4VbAUjHG^g+z) zQXe?3JqaKA<+CWIQ&6rhm}Db z)EWX+6Ra3%=&u;4CHS6Ekd^6or>QAR`R_d_aqhz82yGQITKqvzR!qN7!0UP;kZ-|t z5%T=!pPS&8=6faw`+gM}mek*~h4esm08=HRN-|rhA?(AW4=TvP?O09*UB>fBZ4=0J zs45Ee_Xv1SRQaD9^9IF##f-g*pm|a-OX;5*+B_+2x)fXwfXY|U*eWlBBxqb3JUtIB zr;rC(|89ZIoFWR--`~Icfks=QQ>cg{6lK_zf$lwxoZ8BhR&`smOCQ`i~jsX%(F6!D={#z{ceWNU0E~OGdMH2Gk7!jp;A zG6~_H^g^0x0!@5@Fl_P*y!ejk_rCvbj8~as8FWD7ldSCOqKddDYM2$(nAPkULA&DF z*~Gw;g;!OXe)H%~6!#Dhh>#DA6nB@H3}S<(?37tNuQ4(@W<}^0B(bt~{$`!1Fu7lw zk&zK)CgbWEO z@QgkGf*IHT3;welHtjIM7&`v|S?P5PKKtNf3M!wO|2+8rh0zM!MuC_PN$`*X0&ouo z$#g+jd*p9`ks4?=Lygf4YCf#F@ozU|W&Gv6 zzXi%HKmP6qkD!8vYr#VXu(5_`|EGi3Ie@kwgGR>G8O1>(uOR$K+m&&xvnOcu)eAIm z3pM~U1PdV<7#RPE{&xe9?Xfd3u!0<+C}{le2h+@7Ele}K^S!;9Lm3!|W*UR^#kdoDk+5lHwPb<`znQt zpW??P^Y;m8y(KzklKCgexaeOTItHaDmS2zlFJbrw9!q3r;04!~pwUDShK(rx*7ISK z@MdBK4JyKx7J~*AK^T2tk>yv!|0N9B&~_rkJa|hH)Z$SUWc)J|+*LpVb;Lp(z=Lpp(S zo4E2DZ#hn6dH(MhXc38+hZtn#f)}JF6^-s_~?Z`xZnrX z{oh5QeRNg^Y0xY^s2#+~sK^Q4ErQlqg>>3~q&$5JZcwvVz`E~0ritqG*?}5Kpv710 zStwn3=%PXkMhoz`$Us5==M z7(}^jA>xdT3__exe=#yK2y-5RiZe3^a&|%4EDTbd-VDqPj4YfC42+jRu>)o^GDtD) zgNidT@G!lAvY8pInEpc9EDRdV;ZQa!gB0^LD4UHzg&A~Y3CK)#hDFRjq2e42Vl3~W zY)*zWR$(Zco56^6J(SJEpu!3>pO;aA%?v8e$6&(#63P}}km9g{vV|E+I8q>NMg|5g zE<5^Z}cj$WX#i%231rl2>3zWJqC1WGG-L0jpAANMk5s$Y;o9P+)Ll$YdyD zNQBy!!jQ@UIy@1d8x0vu8FZnpHD*v?2w}(o>%wMI0N9=^hE#@Rusvq`!ip036<#V6&1LQbFqnobwARi!#$QN)%Qq7#SFuD0n*gDmdpC73e8A=Hw`V zrHU1bQj1fI%2HGG6nrw%6H7{qQi~N5QxXeGQd1Ptit=+6+%k(26`b=^QWZ2%O*Ays zH8L{Fr9xs}ib8UJN@iZV zLTW`pYEfotUUI4)13b(F7;+d=87deQ78S)tN85lqo1mvVvDEQ{*rxh6N|DH^3&jHT1TNMH9fPqB(*3tMIkd!AvZCv zQX#9fD6=>vGr1%)Kd)G!JijO>r93kQlwh0~@)JWqppdd!iABGHi3?K|C|FPMNNZg1VCoP5(6^cnma+!%Zq7(y~Kixu4R^GXzg^V3So z6N^$oX*ee{IW@01HASH`4;0TO8L0}vo<0ix1*v%u#Xb-PIts8{Zm4IdrvNq#suyHT zVp(ElPGV9{szP~YNrpnAf}3NYLSl)P0yL_NlZ!G7N{aQ0GjsIvi_-P|-F(nf4w2r# zXCS2HQDA@;Ab84N4~Be(a&Y?~k)aA4Qb`Pn49N`H47v=ULLrx-0A8m-+5+j|f+!iB zr4+!i1Zq)$S{$J829@(59fb^~&|)^7p^_n&A&(&uTNZMIpU1H!rccq*##wTv0&sFUUv` z3*-opCqRi7Ks(qeFn29$4b z=q%1jEY3(xLDvhq8@&J=cGw-C&cINdnOl&9?A~vU2s4NrR;3ILn^}whEojZ8O|`AWjM$1k|B-ZGQ$Oiiwx@-(iuK5Ok}vm zaE0M2Lk7cZhPMoz3|Zi6DwiRLA&+4JLq0L%)JBD41tc+}o?2H_YoQzxye;NKUax?NU@-p%<{AXlfJQH@cZ zQG-#FQHxQVQHN2N;TOYoMmWX2T6RK_&MbjA$EOvWt6 zY=+&8IgGiCd5rlC&lsLF7BDPhEMzQVEM_cWEM+WXEN84>tYoZWtY)lXtYxfYtY>Us zY-DU=xWVv{;Won^hPw<87;ZA$XKZF{VQgh=V{B*aVC-bW9(;~z&Md{ z660jXDU4GYW;0G>oX$9daVFy|#@UQ>80Rw1W1P>pfN>$?BF4pxOBk0jE@NEIxPoyd z<0{70jB6OzGOlA>&$xkcBjYB<&5TWCFV!NkeL#l+3T z!^F$P$HdPhz$C~d#3all!X(Nh#w5-p!6eBf#U#xn!z9Zj$0X0Bz@*5e#H7rm!lcTi z#-z@q!KBHg#iY%o!=%fk$E43>z+}i|#AM85!eq*1#$?W9!DPu~#bnK7!(_{3$7Ijs zz~so}#N^E6!sN>2#^lcA!Q{#0#pKQ8!{p24$K=lxz!b<7#1zaF!W7CB#uUyJ!4%09 z#T3mH!xYOD#}v<$z?8_8#FWgG!j#IC#+1&K!Ia6A#gxsI!<5UE$CS@hz*NXo#8k{w z!c@vs##GK!!Bojq#Z=8y!&J*u$5hYMz|_dp#MI2x!qm#t#?;Q#!PLpr#njEz!_>>v z$JEa>foUSsB&NwsQ<$bQO=FtQG=pg-(=4XhOmmp#GRg4wlHjE zILgq(aEPIuVKu`shJ6hC8TK$OU|Ptuh-op?5~ih0%b1oktzcTow2Emp(;B9=OzW7| zGi_kn$h3)RGt(BPtxVgPwlnQu+R3zwX*bgzroBx2nD#RrU^>Wji0LrX5vHRIJq+`i zjxil)I>B_3=@ipxrZY@una(ktXS%?2k?9iCWu_}kSDCIcU1z$%bd%{8(`}|ZOm~^? zG2Lf+!1R#m5z}L)CrnS7o-sXVdcpLP=@r8ah7}C67-llOXIRQGiD3@Ia)y3}DGXB? zb~3$Ydc*XV=^fL1rVmUXnLaUnW;nobkm(E4SEg@F-HRwn3*m^qobn7NsGn0cA`nE9Cnm<5@In1z`|m_?bzn8leTm?fE| zn5CIzm}QyenB|!jm=&3on3b7Tm{pn8nAMpzm^GQTn6;U8n01-;nDvrp&n4Otjm|dCOnBAE@m_3=jn7x^On0=Z3 znEjapm;;%En1h)^m_wPvn8TSPm?N2^n4_6vm}8manB$ofm=l?kn3I`Pm{Xb4nA4dv zm@}EPn6sI4m~)x)nDdznmZd! zn46hfm|L0KnA@2A*8`4977 z=6}rpSr}LtS(sRuSy)(DS=dA^Sp--FS%g@GSwvVwS;Sbx zStM8_S)^E`S!7sbS>#ycSrk|lS(I3mSyWh5S=3n6Su|KQS+rQRS#(%*S@c-+SqxYV zS&UeWSxi_=SSu9vAS*%#BS!`HrS?pNsSsYj#S)5p$SzK6LS=?CMSv*)gS-e=h zS$tT0S^QZ1SprxBS%O%CSwdJsS;APtSt3{>S)y2?Sz=gXS>jmYSrS+hS&~?iSyEV1 zS<+b2Su$8MS+ZENS#nr%S@Kx&SqfMRS&CSSSxQ(+S;|<-St?j6S*lp7S!!5nS?XBo zSsGXxS(;dySz1_HS=w0ISvpucS-M!dS$bG{S^8M|SthVdWSPV=nPm#gRF-Kh(^+P) z%w(CxGMi-%%UqUuEc00wuqP9rCrz^a}$$`^7GgeAvBv~Qc-GIDqA9$Vt33>&(BNEW>19B+|J3FMaiYPX*sDC z+{p+wmvc&fNn&zxYF-IfGMvfglAKtSpU0L0pv?3ZdCtAtt7RDQDCXah^er|3e#IZc-NE~ht zgkJ6p1e?VpDY1wpBPp?n&9fvkCnc3F6HKvtLVUoU38C3M!Cqj?1XJvu5Vx{tLTDyW zFQ&{aZZCwn+*t@Vk2jJ-c(PGA=|!ojc{z!BDVfP^K8eYtC8=yVV2Z~FSzQhihs_5Z zGHf|uip3`-zl0?xCBKBt53G?b4@~j+A!*^sL*lUcfi<$_fhq31#De_dlA`>Aj8taV zymaQ&ymWSdh^N`}AvBvm*w<|NV2am2qckr)v8XgRC$Y4IHy@eD76i7Otq4r<1R+_= zQ-s7}3j$ltRs^Af!OGc+!4!8eBIvk_5p13iBm;O#kT`515MxTf6iWywN=rad8VZg} zwo)*~9t!addntrw3k7?JtrSeLh8AV!rL&fTNZwFnKk=3#^VmZnQO;fpp}E5mF61sp zVn-seD-mqAD6l8ls=yRi6g=&6Rl%9y{A+08#_FGuUzEq14<r(hV*`l!#s*OH4WZ^4nnKhYLgkI1 z<{LrHHG-OJ1TohH>Mj$gyG#rq=9m~j^qCky++|__G1tTZVvdOc#2gc-`%DZV?lXb9 z&jji|6R7)4pyjTKfh*X3CI)U0+7J>hCWer3F@gHS#1Lw~A=G}Tzf26F_8UU&H-!4b z5Nba(UQD3=H!*~SkBK3q+&3|V+HVN8-w0~I5!8MosQ;niW?}@j-w5h|XgHcc!_fp5 zjz&=XjUe%3Vgw0)6CZW~ zQ2!f4?Kg(nZw$5H7;3*U)P7^A{l-xHO`!IhKuv4pzE66zjkJH*5hYM&$2K1Zm1j!^p?q4qgK&2xmB=Lq$WBh)`m zQ1?4Q&2xg9=L9v+3F=-asC%8D?sbB?*9mGqwEQx0hMMOLHP0Dpo-@=w7pS}oRNe(D z?*g^Y1?qkmsQX=@_PapscY)gP0=3@-8a^)2@Nt3q&jo6qE7W{fsQIo?^If6lyF$%( zg_`dQHQyC#zAMx`SEzYzQ1`n*-R}l9-wkTM8`OL^sQGSC^V}fjxf;8%g{K!KmZh?l zL#S|YRl-&drZ~e>GE<9Ei!+Nk%V8`~xo7BV33i8}Dkn~~b3P~S^u8!dFG<0fn=IzjDsg4*u{^|uo^{0&_p>C4a+lD-UGA?eG|)fpWAhOW*~`<DSN|l70EF;5lKu@{A?e@H)yDm6d^{2kRrs$5E@>FkRrp#5R&DM3?W(F$Q&AO=8&d@krSi|Y2*ZHLK-PuU=pKzeFXZem_aQcf{c-qQ;r51~N5H!v|afJj1kE=WE!FmZwU zo)a9=d8N5U9Qk>vdSFILc|MrIRgzJZ3K8Q>%P%bg3v#AqmO;cgiZd&~LR`hEWvO`( zW@=`7MhTe7nU@JQ5MoD4UVbjv4ln~`2Z#Z+1H^>b0bzmc0I|S!fEZ9az)Xl8AST2P z5Q`fr?zterom^Rz!wK)|LIlBq1Yv>`ASYO9Mt*)aL=bEWJd1$G2KW&v8>}0N57vyt z2OG(UP!BSf50(ueBM3;U!FF+hNj=c?uKUnpd4cm#~8{n0dY*A98(a-6v{CJam=6` za}dWI%CP`(ET9}q5XVx_fDLS^0XxW60~ps3%r%5@jlf(Z7}prgHHL9bz+4j;*A&b( zg>lWmTr(Kg9LzO`aV@}H3mDfD%!Rqi2<$2&n5&Gyt}=qT$_VT#Bbcj?$LetBk;|GJ?6v2<$2&n5&Gyt}=qT${6e_W0?&iJtBk>}GKRUz80;!zn5&Gzt}=$X${6e_W0?#wOt4zSIGJ(0u1nepkn5#^{t}=nS$^`5x6PT+^z^*cZxyl6W zDifHiOu()(fw{^Q>?%{3t4zVJGKIOy6znQfn5#^|t}=zW$`tG>Q<$qv!LBlexylsm zDpQ!NOu?=)g}KTU>?%{3t4zVJGKIOy4D2d1n5)ddt}=tU$_(r(GnlK)z^*cbxylUe zDl?d?%)qWPgSpBK>?$*utIWWzGK0Cw4D2d1n5)ddt}=tU${g$}bC|2l!LBlgxyl^u zDsz~t%)zcQhq=le>?(7ZtIWZ!GB?$O7-_0!2+rl^VAq+OL50m=!eCdLn?r@oVZvb7 znp;4HEnvc6SDRZxg)O1N7GSF^3?RZ51~6f;FDwk9!iF$mux~7kpu$ElVX&_(jG@BD zFk!IoEKH!nCNN>JFD;`P0iFD+rdv;_Oo66#A!m@h5CzO;n;(h}xNORz63p}w?)`O*^XOG~IP zEn&X21pCqw>Pt(QFD=2ow1oQ766Q-wurDp4zO;n-(h}@TOQ1SVqwmobIN zn8IXC;WB0r88euS8C=F3B4ZAdF^9`oKx8anG8S+dONfjmOa>kXh7hkC!otAN0H((f z5(b8_FffFNfgvOe3}Inl2oD28NEjHx!oUz728NI@FocDHAv_EWAz@$$3j;%V7#Kpr zzz`M&hVU>jgoJ@1EDQ|cVPFUe14CFC7{bHA5E2H4urM%$hk+3!3_vw7IGBv!VPFIa z15jlQk%5PS5hM&i^)f^T9tK8`FaTB25E*zF7(v1SR9i!2;9+0{2?J2Y4UvI|fe|DO zKy^4o1|9}RkT3vM=MWiq7#Kmq093O>WZ+?71PKFBB@dB-hk-F93_$fgSjHG02F8#u z09E}E8ACm|h!G?s8AAdC)Es~)F@h;E(t|01gbJvM08wHLQ(_EP0tp^avjL*S1g69U zt^^WJpr!;wi78BpDO?F8z(CClh!QiH5;HxhGtKmjK?@}r8JHP37`PY&7+C-RXW$3# zR^nk`VCVzwd1nx1U}O+vU}O+t5Mp3q5M~f&U}O+skYQk9kY%W0U}UIesApheXkd(H zU}TJ8%w%9@%wo)9U}Vf@%wu3?%xCIgU}WlK>SSPH>SEf&z{s?j=>P*0(?OI)~VBlgbVvb_q za&hwsVX#XqN=#zNNG!_DV<-W2*BBboQ}c@$cBB`jW-}bgNz7MZxR8@rlE-i-H?bsx zF`y(PF_STdfd%C0|NlYzHyIci@U07lsbqw@gW>;w1`wNzfiXD9NddH*nkaK%`f!wn_9H79ECAz>wn^?5n_#;|(T#z@)D~NZb$14)O=d273o9FysV- zMHoOff-ZT+?>~?#kbjWvM`jBoCgzkdBqf8$tmNd}0>(N}Z<(u?N)MXPlH@ zl#<6dqc}0AgmGSRW?mZOlHy_mL&jCb#Rf)<8;Xk!j2X8T7aN!`?kO%dFl9VcTv|}f zcmgzVz<3Un!a(Z<85kHkKqtB}aD&hLkb<7y4LesFd5=EwzRzs%HivSCYKD4-W`=f# zZiaq_$qdsOW;4uZSj@1TVKu{ghRqDy8Fn-5XE@AooZ&RXd4|gj*BNdz+-G>q@SNc_ z!+VC$4Br`kGyG>{Vq|6HVB}`xV-#c*VH9VSVw7c6U{q#QW7K5SVbo_dVl-v6V6gpgTE+&(X2v$gPR1U_ ze#S|RQyFJ4&Ssp)xR7xP<8sDTjB6P;Fm7ht#<-Jl595BuLySimPcWWlJjZyE@e1R0 z##`X9xzG3jl=2y$fXPQ-60~`qk?|pz{T56V0|k0pU6gQb9_f~A3F63Z->MJ%gWHnALGIm2>=J#u`Xj>$GVO680$IKYpnNJ-?4sU{l~_}CdMYmrpBhn zX2<5n=EoMsmd2LHR>oGx*2gxDZ64b)wry>jAI?gK8|A?=Qyr$JmYxB@r~mjCm*L6ryQpm zrx~XmryHjqXB=l5XC7x6XB%f9=QPfFoa;EZaqibTmt`ncwCE#q3pwT? zs`2Xan(?~v`tgSG#_{Iymhsl{w((BmoyWV3cOCCO-ebJyc(3t3;eEsVg^!7ki%*D8 zflq_afX|N4jn9uShA)LLhp&pSiLZ-q2Hyg{6@1(H_VFF#yTW&e?+M>0zF+)I`~v(E z{0jVf{AT=i{6734{4xAl{6+j#{2lxg_-F7h<6pa6&LqwyE(E$Kj)7g+N;poqNqB|uIpHrNQs7#iQA7ty8$f9jC~X0yZNPfjL>xqt zL|Q~vh@27m0Fe=8g3@eInhQ$vL3D@;iJFLpiB^fu6Fmf#f$a5W6uklE-+|H(pgNw2 zv59Gj`G^&WO@YXWErZglp!7N@y$Pa2Y@65(v0vhH;!fge5E=0bC=F_vfR4{;fbv@) zI>bA~SBaky{~#eE0rjDT7es}GACwM)(qUj7tP)WYRT8r#_DI}=ibMS`@de8N0af=$ zQby87GENd|qvRxryyP?}Jqw~va-QTq$$L@^Qc4hUDQJjGLER$-32{~_2dM<92B}3- zke%d=QrDpBA-m5RrS3t@lX@i0B&{UvA`J}zX=n&YLqkBi0isU2MS6+!5$R_#91wG4 zpeaB`4$4=8sFP8Xag#}t>5zejxy&A@`~fI^1gh?Y%nMl#SuI%~h`4MVlum-upqtMa z7+7VqWV>Wn$)1sY2N9QpRzPwrP(BC5JUJdY9XTJlJh=%_@kLM?ng--nLDj93J16%} zUO?UmA}{X(r9Ggu4@8}OfP8`c1o=(!&{QW6IU#^i{uNZ+JE*!(3PK7-3Ly$*5OIYL zDBT04CqUFGOi|dPa7E#pq69=-Q431zL1`n1Iz=h>w$Q~sx-pyC7(R|$dAkdqG>Rbn9OR1#DgR2HZlQh5TEhn&d3 zsPYTS{|8a0%A~5K>ZF>Y+6ECLfrzWuLFpza-3C#o-le`u{gnC}4L*pt zh60pUfzlcfbs9PvJ{mb1eHt5};?Pn{;~12G3aaj$#yd?uO#@A6IiZ;Xk=M+C(m4=y zngyB@G&g8o(u9^1TF`P*3tCQULCQ&1Eg>x zdkJEmF0|azy#-ZwPxqgmoSuUow4Bf@fvD4imRou?5OsPDdJFUp=snVhmJ|A75Ow;{ za!X$hqE25)-$_47zeOKfPU!D|s)LqW`Ujxuj_5xzU@=fLfR+;mQ4n7-|@L7-ktl%L&7IP<7C9%WxS~-73RVhOdlx zjG*O&kpo1X5wzSg@_?u_@-fOW>M>ep1T80w9zoSX%PpfGoE0)!T5slClhEnVWI|6X96v^O!Oe?OpHu|Oo~jVm_W-3lM_&N&~nS< z0#w}zla>6tVqRtdrZkZNA)R~r0;0}5#=ORSj`==w zXgOj2391fSZkhjrs{3alXJKcNU;!;BETC--3uw7zF$bc~Vu8g0iwBlWme6v-(hOpr zCA8eKw1cR#bh1pcY_eQp2`wiqp{*NBXt`wxY2C0|KCxo4Qn7Ngf|e6jRS@&6pyifT z6U02LHmhY;$E;phL(2(k8HhS-1t_foQD?1T?O~l^-DM3eC#?5D<)P)4^)awI7VA^i zFKpOsps{ZQEj?@?tqc|$2b(yX8XIUF*g)gJ2GYJ_vDs#G#paW(5X59#Xh_&XN=z18 z9a}Hk3|nZrvz-N1H4kF1?IPO)w)bqIwU!+;_U$0C&tfNGXJ!{-2hIC-(7MB}3!>Mq z&u)#~DLZHmw1ehAdj^QCJ&V1Py@P!M#6EjyKCp+>mn`;G_A~6a*+WYm`xj7EZ=iZV zIPf{>I6&Jh4$!>s0Ll9-4rvZ84vQS1A?N^YIXK*a=ykZ`@XJxc5gLMy(DK*O4`IG%8P=EULz4M8VpT5__2=ykGligBuPf`*_IG)A2uB|nSP z7N<*2ADp2f=nQQ)I;%nSI%_$5IHx&7L(mzTik%^;n8kU4^FHT0&d?Baf!2X8kRAbx ziWS1V7RW2u7pdsi2&Cf27dY{FW$yLGC&J`Mht_2LBGo2V+ zOCWk(D_p0!ZgGW%pewWtbA^;)EUxd|c-*wypdsi6Z2`F@K=it$xHY*gaD#@R8?+vA zy9SlL<@Uo}%pDqn?$FZQ9n$J!aSw3MbMJA7hM+q%Pq>3`%4T43Kj!|#gUJILf*#Ns z%mY$`v3S^cM0r$rKts?2+Wz%e2eH>*wmOT^2_E5HjHf?m*a$qUkcVe#tnTH$rf3mSr6 zKOo`k^#`KYo55So+r}Fjg5J=w*c(z7vv`+zPx0R54GlqWXiLuf1yt`FA1)saA7}{r zKHy>|0I8C2>L@ycK;a=z5a9jclqD&hlXGPw0sSKw8K~egaQl#`~sjM z7y#|X1wi_ZECC$>%L0xBKtnJ9TBig+>J*lMe}OWAR)NqE49tOqMqmNN-oTQ;Nr4*z zp&=Lut=9veL1kYBaRjLaK|?SITDt~8TH!1~2|;y1bAq5D7<3L|a?mA+-k@tiUxI~# zp&=LyZBYb6S`;k7KEYYR9l_8L42Jecg7-o61|JH35d1F$8iFCvR$Yh*L^i}CBrK#P z1R8=N(6&_wqz}dtvM%II$g5Cj2!=vys89un-cXfLr_h8@Xb6Tv+moS?_9RQ_tk4~y z*FvEo7zXW)hVel3h6#k}h53X*Lof_lH-W@Ob#y!pAfz-92$b*&{je?q&LA5{vv`cLL~wkf)S9@-WVgIAbKO> zB5ERLML1hF~PLUlr*F(HrR%nGx9*2@SzWXzMg`4^;L* zKg0>N(Abm-eD6^=LsG=xn2u3Y|#D3HYh~B6*QKzC_L_3Q&=8D)wzFcsLG}KMm54Qqg@#}(w6zlp=@qfW7R2_&u8D<)U@UY@B^DZ^ zv7lRi7#JAij)3QA7~>&zD{K6z_;(3B304VE(-MwB)4S~4U-`$Wl1kPuCV`ac<(qLZPed@?BggTfcYXJi1K2MFqoKxlae0R~0T*)I%? z4Crb=eFatqm5(D+KaI0WuSrzj{zJ5=xP|jW-x(W0`e;-O1Odaf#$Q}KN(Ue_n80>{{0AE8M3@6|JuDr7TmsU=z#s`O8%)7r z01{zi0rig{wy?37BZ-5`Vu)`MW`cBpQVED=2HT4s%ODwut&lLlEO9|056TOZSthYe zgolAN7XL9pRlw2#sMf`B3)l=$7=X-WV35UP4k$)ot_6h?s13!&k`MMPNEaIms9g*T z17ol_$RBJhpq3g$9APi0t^$Pth-PAlVu%9Q1nBY*J3+G8<(XLeS)e0$3=H5Dh;9NS zSe}sqWDf(lEp^M8oOg-DFwS2Bo8ZnAZ$nu z1F_Lv3b6rHx+$Q=2}m_0yddQ;x;&^X1No$lr4=40pgBW?4Gi5FrR>A`Otg{ zk!NCQW`VW>85kHqZFUSB!19a?AoUCkhB)kixB%o6P@ZOEfw&l?2NpjNHfV$kViv+4 zP#p#G35aH55Cq+7fnp0t9Oe^{tRR|CAo5Hs4J`HWI05BH3>(1mkkwlZ44~YLt^$&} zKz4w90vc0cW61@FJ;)ANnFe8ldd3j5&`p7ef_x&6)ukX?m>C2a80VyR-OgvW^uieDinFoNYF>70Q9bb2_#42TMl zxeynCd;%KvW@7>MX(4*pSTfIZVW@2z+;6{rRkT}dIAX#*I zZg87|iKUzcRGxrb!@vNVvq0DYDl0*yFi4(}0i>RR!4bu;2s46ZnR z0_p*Pd;%J)fu$&r8`)SOc>}_R|A3n*qFde~S%;R9nsd(1mkp3P6Lnul1bV<3GP_JBuPK<1#A!XVWMpWrTqQ^73@P`ENMfXYq`8^H3A5|x1= z5|2+n$C%8-D7?x;woPb)e2opf=0F_-Jc}R)Mz>tb3 zPCz9U0|Th#%fKUa)^WM2KfY(dmuel1_n^e17QZj4p6E9naIEZs@>U`K{G56J+K@PG7aWK zkUn%%ApQgO4zQQ9AQyuAC%E%T7z?O80;ywQ0JZfHHh}Ug$R{9qh&>Dppt=R20^}k{ zsRD5UD0P8qbXW@oB+teIY8^vL3>X_Ej&2IX29P=EH6KVd#1@cGaHpN!I6 zzy0rj~MHh@OZK|X=h(IE8<47E5@7sw7!>H>}KvazUxOIwg0HWo-N2{Mh11vFj( zaWldmkiQVAD;}>;K(e@e;tsBZAwB`kH6m;Pg)zt{kUARVDh3A7y-^4i5I2DIf<}oT zDnO$GY%HMhCTKok2CaO6#Sg@XAbsejK>P_17QQGJqGd#NFL%U28LdoJ^|SQ z@(E~cmW>58Dh<)Y#(WnXCm_>cJ_NZPVGoFh>=V#k2go%vL>}ZqX7F_|=<*9mq7SK!xL=PJaXf^}JhU9pV+t5vcv{6B=9`v3TNHxqSpmr*Dc_tQ9@C*US zH4F@(^+p&rfaM|fFff2-x6oC9^g>(!@(E}zl8r?foT5N(U}FJ|ibM3nay&>J-4uul zkU8l20Hhk>6Wpy8BNosIDabVp44|1$3>(1mkTlQ00J@nET?I%l#04OqfL776v4Cb5 zA$r(YK=Tj~cfxW!$ZhDRKvY2HzdlRuGO=i~Kz9o;Fff4D zF(FhyOkf1dLtMhZuo9&dhNu9U3vmI+C!iH+upAGvgN+4bBE+3+ETA?Egbfl!#1^RR z0+|Lf2Yc!P*#hzj?tG#K&XFK>3=E*vi5ND3SY;_(Tn z?aaUcTJO!q0@{TP(Zj|9T9pHFJxm0+NTggn?lziVBd6AfW|n)q{8p44@VCY|MYbr7%c@jRj;j)K|=)mCz8g z5H1D96AUvkuwcvtLF7QDfL4lt=4n7|gnr130TYWXI7foy7#Kh+%n&LdCNP5KAu|OG z3_DSL0#O0d3vmG`pMX}n!E!dp4p_|yQp?5yS{DGGy+oSN1j)cKC`8ax7eo$Z3n)%- zr!FaQ9Sl;(zyMnHi0}z4P9SwOh{wRN7pG4^Hh_ErTE7Y#kpSsoV+O6lg~kaB=xhUY zpMX?>TnnN>BjxBm0f|Fm9yC@DvIpc^bayhbh_is!VSwZq7(i>85h`F~^&okOOBfgq zqWA=12gC&+pMX}SvoU`Kr!J5@EXRXPV`B!br-Yb=um_|H;S&Jc}Tm7f#E1lpMYEd@(F0C1RL{buuniHz!q>h0Bw9f@$14IQQSRRr~85mCD^a;oYkWWB+ z)YzEcfqeopfsGlo%L<|&#s;|!VGoFh@Cj&b6Ua5_@*pu#j>nz4_*g)FAdor+hBGMc z1ep$s6OcS4MKCa&MNt8914u6@$Afqb44`$fun`H62rT!5Ok-ny3-%#M9Nnc58$dZ8 zy=DZdhUF7b8I3Lv3NKKcaD!VAAlEQ3fYx(j*Z`J?gee2VMVvkX*#U|Z&}w%!Xx|-V z2OINixa--NL3>IdZpN?&ylMvI6MQ)y6eHN>nOHc$EeMEDKsz5WYyitcY-eD&ipM9Q zuw!5V?O|a9-)s%h1M?L~mW}y2+*cU(Kz$;MQOARH!r}xZi_0ghETDLY_yp9`L)ZXX z4+TnHAbE(Z7#MEi^a;ogP@I5zh_Dd}kQ-n=0hz|e3|dtWF$=>U@cJtz29P-**PzRT z#F)XdxO~C{ZdriTF))C3WTBhD2$qM~&cFcblcTEu>4mreTVLkzgurY%~Ao|&uLHZ$Vggv0~BT&49Xh`n>fSAAtmWTDUK=lE-3Xooi3qU>r)rqj24YGrc8M00sWEvYY zXygUrW^_{^q9Akd#R;BqVdl@w&>aa33=E*!7{dmzJS2P>7(U{R6ObJspMXqbV+Pes z5It2JK2~ggG*tMuQ2QZue1gE1ifqmsfMIsP@I5j6j0b9^n+p>6ek~;-^23> zXr~531;hkKusoz3VqgHZ4AE79%!RlBu)DObomXyl7cKdJR^8@Is?N`lsG}y0dWDy zC!jVw8#AaZhUkHnV<5F`%=f`@0%9ZV0gY~gd;+3DW0~lw3nUKn324j~T^^K!L2>em z8I+45J^}5j#IOM@4@oHu44}Rsx(bk9hzmeI0rd*mn2&>946=ib88j*m9Zh8hjiE!> z2vb0F^dO&rXwZ6Aka_5`ATiL&E9@(58NqD_kQz|(LLO5FnF$F6kjbDkqCov}HfGQ$ z5=4ZJ88lu5VIyn>^+7;x0@0w=Lm;!!WkF(~-VFA&vW(z43XmEGM$o7RHr*hTL2d%s z#KsJ2=Rri+m@k9F4`e&KK8OlXe1ObGmj#L89@Sw4&!K?SFfgL7=K|RT3nx&lF))J0 zj@Xz%y*Q9vj0|kdpq47cc63`IqM$qoG8PgQx(FIDt$+mj#J|*0^F{+04j% z9TY|&%m^B5!loN!GRRG!(I7Tv(3k^6gpC14IA@%aM*yt-lxCyi_2D_U;bt3~KXk`!^ zGiaU&mhV7g;gAqP=mW7p=?O%G+CCt&L2OW}1MxxQ!5}dv1`Y-ev=SAh4irwH_8LeH z10!f%6-X3aH^d|cM$qgiEDeFwu`%xl$0LXh!VrCI;5GM<73iS0707IKS&$gMHXW!8 z1gT+Q1g-DFrW<53DDFUeMc9}@>s=rsFgJl*fvykcCiJ=mq!t!;xbqz-KSSIET0Mtu zHb@4N%NQ6zI|bR8LG!K<5m89QJuo+cbi>*OAeHF)U~WP$3qWcirsAuEL1iGsO`x6%y4fHZ zNX}_OKDbCVsO^km0?E(_W%1d2OQy9{JA10(7#5s*y~A2Bk3 z)G{!FR{OCrgVr=cMA(=?Gqw=hak(iDkDKBc&}BiZx9R46R42-z;ihxW8xe2rm zn2i~<&IBUD#td4U1+g97R){Ew1euL43lf8@ivqFGWf{S3G>{AfBes1ZAQ_O!AUAQ#N927<%%!s-Z1fd&bGRRG!aXHv{0Z2C+ zbW9AS5|^9M%W;reNQ!{Wet<#)p%+vVgWLof*8<5fFec+nPaw4njG#RqY|M}|P(UJV z%%BywkPtzb3$Ya<3K~}hnT;+B5(ACTVqY1|$h;U7Mj*@x+9QHZH^^jAIDvLc zJ%|V!GiW6-#CCLj5K++R2grVOS&$gMaTUV)42+m?38_ zfY|8zATGr$GeK%$affRTjS)Pn1#uJV4iJQHkjbEM0`LD|Mmlc=I#v!+iOWssISZr~ z<|fd3d63Nry|8%|&|DQrhJg{(GD65BbVG6(10!g!2OBe}_W}`tl?x!1==xycgr15) zYGH1|oyI}ynIUchoic-NHb@4Nq8S)L`#RW|LA^kT2pcnK&j7@Bgg#KM14>UI8YBlY z0bLd(hA%yV@-|2f10!f32sYgylR{e?meTWHQK2pwftq8I(IAB5cf{oCsl~+X@i{)s!H!(Pcqm`08L# zdkCb4fe}X8RRBVOtCS8cAr5+U~G`<(e=UHgkIl))IxlUuf7A7F%UO_YBF@Q zK{Bv@3#df^3nxf@2P$PDwj=a`(h>}VdWIkq&}Bhl`1+inG6tlEff3a5z@{5yGANut zDq;05$W~as1F_NdLG*ya6J$2JEJzGr+=1rfKx!BmK_P}sH^^j=n?S8fHfG3~43PE{ zC^jLsBlLk}K&}MQpfCiPjV=ok!X8RRBVZeU{u?LmczurY&L z3J@2g>w}1bNRZj+vLG>h;RNz4NDTucs8qnF8)P!bO`!R6HfB&O3L*k?A1Fi+`arEc zP&k2TklR6KqsxNC@P$(|sO<#8jGz?<*mQ$T2Du4T;+7l2FHfB&M3TcHR^np@8 z$W0&`R9A!SN0$YO;cFLwN+pmQ21d|&4s5zXCWG7r8ohwI3DlB-g&D|pbbXM#3UWKh zY;;+W7`|`N<6klx2pxzZk7NHL`at2CIAR0900x}z279@uI^bdKWa7!p0050cAux-32r*1acFI2DNEGW+O}miNfj@ z-0de&8x5q7fe|zsk4-noWRROcy;C-3$Q~?E>kH;4kUa=}ps)kE2}FZ*g3Lyj1&QJ7 zOMzOKATT`m6k{~q< zjG)n0Y`Q@vgWLoft!D$>amWA>VPl5$=s+n4T_4O%323&0)WY&z0t31%sJsKY33Rd* z#7&@?Idro@GK}D}Hy9W}Bk63+pcNtz5jJMf$_gw2{en(#ta($g@~{*gGM+Zqb}(BAfllB2{Id979@tREC7v!fz&WC zg7$1+(+x5it~6Tp3XR12%pS3K4XDFgIaeEeNs?-}n=#jRsP~zzCWdMmHNI z12Lb05wbfY7(CwsatACPL2QIRka?iE1JR(;7GwgtEJzGrISxvpATLv*%};9;J9M~t!#wYj;;?P%E+LMRz4wo%EX|IAq(1>3@V>M=i)%z1X{g^ZZ=2; zWHQK2pcQ?vaTSnmHYU)TPl)a4`XHhp5@Z6pEJzHr-V%M(1>#~xX3*(RAT3mfR0n~~MwbPN;j8aJGa4W@42-C| zFFXa zGb=MYGY2y#GaEAlGZQm2GYc~#vp2IZvn#VZvj?*$vlp`uvmdiRa{zN7a}YBq_nR{~ zGq^BhG88bBGAv+N$gqfEF~bsur3}j$4lx{IIL2^~;Q_-Vh9`{fj3JDnjNyzCjM0oK zj0+flGX7>#WKw2QWm0F-WYT8RWzuIdWHM$lWikidT+FP)tjny&tj}z~Y{+cHY|L!J zY|3l~9t$jE;AK!?&|)xPFk`S`aANRa@M8#Jh+;@!NMp!jU}5^i^qE7y~zB6k`3h74H=ji)0y6YR4}~;t6*ecW{hJ@WK3oNt?C7>=7X&N zWncvD5MX2k)x<0e`V8(2{tV$b)Idg?ycn3l=@!(+1epUhfx!oKgEM0cV-^DgC{`Hw z!8b_@;!y32Q#B*_gkFT}m>8HDQy5dArb6$hW?*9AW>8_UWnf@vXXs#%VwlM=lR<{z zD8o?(S%#YoHyPv@-ZQ*skY^NT6lPFhG-fnrP-JvqbYM_obYgU3P-b*tbYW0oU}E56 zU}DH-0QD!C7+e^F7#JBrceV&IY+<;^D8p#P7{egIpv0iXV8md>;Kbm?5X2D0ki?M1 zP{dHh(8SQiFo|In(_RM94peCn&D6;t&9ocLmjuyFoeYvp+rfMZ5Y5!dAi=a1%ohXE zOq~p3Ok2Qw84%6X$sohD8O)ag(M+8TQVexqz9@)h>SPdQs0H)IK{Qh*gE%;S2r)=8 zC^78-%SeD|uua>*d@-hN49p;#7}yy27{nOl7}OZ_7|fXVfn}vZG}zrc!F&m(onX}x z4E12XIEV(@1M2#9U33BHky$^n1PAGib0C$J!Xl=^bddO#=yuR#o&TjZZW#!FQXVh zEf!X$53mxIfsuig!3$Q}f&9+|a~sIrpgmlj-YyBH@hP6Lf8GJ;o9GID`Ra7M^l!cSnfIEZ8j2a$}BHDUk3 zY*rA-@CQUfbxDKS3?P!>ABbdxtUZVTv%zf|MsSaUkqImUQ3){(A_6v(5nPLa?muT> zWcUJB32w_WLS|GUcdJW+#lc|+aXG_pkO;#M5DC@$7l{qJtDO;Q!b`9?*e-@|AU4By zFbVbx14I_QdjMiG#1{}VK~c`Y$OzF3@*}7{rov#%06M+fmO+5Qg~5YClEIt7he3|P zk0FRbfgzM3mO+)_6T>G4Jw_)+R|b8i_e}2@Ky!c0jMf znJfdZyQ*Q}Vc=pAV~}A`V$fjFV=!T`VsKz^WAI^MWCDi`<6V$H7;l2f958tnOlE*d zCop*uOhVX)L2L#t1{DSk1|0?quL4K%vDjSV_=WA_FKbFi?xMVgRkxcVOTFx8elAr4A!wG1C(U zMy7TU$#@A&9s~EV5&Z*321f9zBWS6?1d1zg>2d$ssYp2{+m^Fn;{Qz)%%9d}d6G7#O577#J8F(hAaZ*&^qdGcbrdFfcF{rzaK{Fi0>cGBAD& zVPIeoNYANEdu6b#nt?(24+G=$BN?fQDf=`#bQl;Ibr={J%rY`k6aOw`p3cC)2y&lF zMs7*PhrhdR7#Ns17#R5fMjO_V+@SD4=^zBgcRf#mxL58tzuw2A;Q3*X8HO8JHOu8JL+O7$-2W zGB7Z8F-0&iFnB{~#yAEWMpFg`CT>)nVI5Nhg8)+mgAr2% zgAh{$gCtV~BS`I8rU-^CrU(XYrU(W*rU-^JOc4yTnIafKdZL&j7%Z3~7)+TW7#x`* z7z~&q7?hYI7(AIG7#yHt=1?|BJxFgT)Ep4)3uVhQMKDA#MKHKAMKHuOMKFNO1!0ic z0Zb7LAxserUQ7`TAUzdK5ezO&5ey)4kUUHsh}MO;8!V^76v3d(6u}_H6u}?}b=yOz z*&sVWYHgSz7L?=Q0AIlWMkO{Tdj46TvBo5OD(gX4fNWD5! z1Vaqe&vHx=47Skl0l7VsDT0v`YK{pgZlU1_vKPb`gUSaoMKDZ*%7fAX$nT)A2Zehn zQv|~TrU-^cXxJ@eieQ+|6v6Nx>L!rCKw*8ADS}}ZQv^c~Qv?IZU7$FHVNh6s!WTuBkOcDQIF-0(d{I3WN1CW0~Zox-`(p3;Ne}K{`h!0AqAU$Q!H~{4tP#mDs8c=zV z94IW&X$Gh~NDky~Pk$aYrl- z%Il!~21;X~_yy6R@(2_j=(Gh>#D7r!fcXVx2P`ds@&G6vKxqhsVQz=H5fsiKKYeD3 zVA#hL!O)F_-!ero>|lyuC})abXkm(A*v!E2e*y!;|0@g({}UJ({zoz}{4a&F4>2(O z&t_owzlMR~e=h^W{|>152}n)yAEfs<1H=Cf3=IEQF);l1VTxb?xeXM?APjON$PSQO zKyC!36%h7fiunHzTIPY&fcyu-I!qA^!AubhAb*0w1(Z)g`eE_M#1z4RoF+heSkcN` zkbaQep!@*}50IIlG8TkE>Opw|6y6{VvKvH$;?WxF9#C9^(vd4u1Vc7c1VcMh1Oq59 zf&2i9KTvrI%3~l5k_VaV0WF_F`VygRkUv3g0L3-P4Iq6WF_0TTTvSy&(HQc@v}uWF{#5K;oeI1%(xi2I&XI1t{J?{sg%nM8ovJ+zHYP@+XW2 zsRNkr$ONc!sz0p@d0EvOhUl0bRLy&qR z(0UUTR*}$p7o-=|P6pM-ptkg8Xd4;S-bb#l!RABl0M*0j_JGU;*#o1o*!Pd0f#IJL z1H(Ui28O?v7#RMALim3_FfjbR%)s#XHv_}JDh7uCstgSOZZk0ayTicnZ!H7EzcWx; zhk@bWVFreOJ`4>1o-r`|t7l;Nm&w5JubF}2pBV$gKS2hDe;~br3=ID{7#RL}FfjbP z&%p5aAH<%2$_xzuN*NfybU2jOW?=Yd$iVP#83V&V2?mCLvJ4FWPD8~M85sT7sJ5t?=u6#zoiTee_t>#{F7o} z_-D+(@NWYH!@pDphJV)?82*9$Q^mmWj}Hg0&k3i%fP`{tyFBgLS zCm76zkPED;(2dhL9|HBCqK{o$)Gf3q3J`nk* z4NN`&ldnMJ@6TXzE0}x+BL9ej$ln`4V7zWI3Ose!4Hfq|)sshJ7tdZt#U*&sbka~K$y<}xj1TE@V@w44bv z(#XKHl4%vwYOw4Y1_q|JOzXhx^-SO#!N9<@k?AbcIi~YW7r^2dnJ$6p%S>08t}-w% zU1I{51q=*KH<)fRFfiR>y3GVGDHs@-?lOUM9s>i@L#9VeubJL3y=8jGz{UhF2N+Sq z8DuCUeAEv%`UeulhCw5*pj^koz{|V9sE{V98*`V9j8|V9Q{~V9(&d;K<;_;LPB{;L6~};LhN| z;K|^{;LYH};LG60;Li}i5Xcb35X=z55Xun75Y7<65Xlh55X}(75X%t95YLdnkjTKm z(8|!p(818fFo|J0!(4_%3=0_+Gc09T!mx~C1;Z+al?z$DGaF$8B8q<45 zVH%?_qX;N%fm2frQ!T>|rpF8i7%iDPnHDj%Gj)JslBt=Yf~k(Fk*STLnW3AZiJ^y~ zlcA5HpJ4(+FT)gusSFGZlNn|+%wd?t@QE>mF^ZvpF^n;sF@m9zF`6-wF?0t5gO2wO z2F`$pjf{+akvkawx9(tYk=@C_$-o>Rr@MoJQAa_+HPdASV}kAu1}2>y42)Wex;q${ zbrjq-Fsr%+MJPuqbSZRsrgSN|DP$z3Y+z9Z(?Jo+sa=u!3L6-LBQg~>FoZ-XZg7Z{ zhBH$mBdv6IFtC8kVF8=d6{+B+kOeg%D={S~Lb)qa|F7;2238$!g$>MV0TF=_8yZ}s zH#oRNN-HWVxNbNQ5V7Hai?m{7r0xy|Hn>X_6kKaFC7^C**V)0qrlq@sfdgVnaKr`& z=?x5#U0onEgCmp`H#Bs0Np~qn!uUHF4xkAzGN21MKm~R%FslVeY+zP(-ND!p5TUHN zgRwzbQ5qzmtf;IQDXkdkqPv5EQ^z|v!qr7uQ87}NVFv?)Hp4CkMh0#MCT+%D3_PGw za&5-_3_J`j4CV~l4Dt-Zpz(L@{S3Se4h*IYnhbIbLSPYw{S1r@F$~@e)(lzL7hR4L7agHs)n7xkU@<>nL(6604l=4;K$&=V8oyT*Tu=8#h}C>#URW8 zs-Qu(b1_V0C})UeaAE*8EkGjN4BiZO3QnAB3LI0HGH^>GM#!07~aGh=J87 zFi0>k7Vl!n2hkX4 z#=yY9^WTDjhtZRPjWL^njnSWhjj@n{jfsVUhiMlB57QHHfEqDCU>QRb!#BoxOhL>% z%v#J*%w5bIm~SwDVBugfV)0=)#mdK;!TN&Dgl!(X5W5%q9gYBw7>*2%HjZ^1XE=>G zPjQKHwQ$|yR^U$Jp2s7?lf$!&=M}F7ZxZh=J|?~dzBT*`{B`^v1e65w1Xc*L2_^}y z5PTuTC!`_dCsZWVCA3P|NO+m>ACUr)C!#iD0%AF0$Hb+?)5PaVs7W+QT$A*Y+$SX_ zHBIW7w3Bp|^fehHnL3$$vPQCAvIpb@%|mU8+6J{fYA4jLs69}7qaLFE zO#PGkKMgJoF%2aRJq;@jHw{0HD2+6YB8@tYE{$m#Cp0rOOEeoado*WgF46p+5TgX63&sV;HO3vrQ;ZiFuQA?Xe8l*I@g3tA#$QYrOd3r7m~xnkm@1g+m|B>+ zn65H2GP5%)GdpJPV;*6iVqRcgV}8Q?iunukFBS|IJQflbDi#J7Q!E)Qc`PL?RV)oG zZ7e-3w^@l;RamuHO|Y6{wZdwP)d6c6>vPt(te;tbvi@hoWg}*zWTR(eW#eY^#&((Q zCfj|sr);m;KC*phXJxm>k*?vHM}qVlQAXV?W11#zDiu#KFPA$05QY z#i78V#-YPuio*g&KF1`-M@|t=+niOL4V-P9J)A?F6P$CLE1X-LCpgb>zU1QKlHxMK z<%r8KS2Ncr*DbDZ+#=k%+@`qAb6erI$!(9@F}DkDx7?N7b==L|9o)U#L)^>Ur?@Y1 zU+2EVgUN%>L&~GaV}{2+Pc~0JPbp6&&lz4KUUgnwUeml5dHwKa@DA~g@$T^c;QhmA znlFp5pKp}!DL)B61wRcx1HTNv0>28s2EQ}@0sayGYXX=8JOb7QG6iM?ZVD0!nib3y zEEL=p{3S#oq$H#!lr6L!2eicE;y z6vY!&6?G=sAbMAfR*YGUQ_QiLOR;9LcCl`;L9tP>*Wv==BH~iw3gT+w_Qe~-Pm4bh z|0}^OVM(GyVo#D+(u3rPO0P-3mZ6o=lkq0wOQuz3U*@x{ zl&o{vUfG*+lyWBIe9QTl%a$vYE0-IUo0eOYTbJ9FJ1KWo?y}rXxw~=?<(|vEmHRCB zQ|`Y!t~{|kr98bnt30PXue`9lq`bVms=T(mNqO_~R^@HWJCvW6UzA^$-<3Zte^LIr z0x#RIrxhPEF*^}OnLH9j>PY97@l)t;(rs^_Yo z*WlOiqA{ZJM^jnTjpn45l2)Fmq^$%Y@*Xz++)H|p5SRY%TTVGY*hQ25L z68%yAb0+XisF~0;Va7y`iEb0?CZ3x3Xp+jL6_XxJdNbK%a?0c>ldnx-nxZx(XiD9b zRa34_XPfRbebNlB8AUUm%`BK@H|x->Q?stkdNk|ZtY5R)W(&=ho2@nb*z8NQ@6CQS z``aA0IYM*f=4j0^o8vYoXinUmtT|Huv1zTXUbyOPaTA z-mm#3^N%c0SkSUy+d`X#ix%-L@>{fEvDD(M#mAOtEs0t3XsO%MbxR*C^IO)p?A&s> z<+GMQSs}F|ZN;1wPgd%zoU!u9s)$t`tM;rGT5Y#FZgt)2b*mq&QCkzU=D=F5wFztI zti7>LY2BQ4AJ%)UpR@kb2DuF(8)j{IvoUPrfsF??-r0C(lh`J)O&yy$HeK3uY16Mw zzcw3eHrO1uIc{^y=9bMfHqY3+X7ifOuQtEh!m@>Bi_8|8EoNKHws>vv+S0bAZOei! z3%1(W9yD>9NRdy$!wF^=CI9STiUj?ZL_w`+ID8!nQbq& zz1YsRool<&cBSoJ+r75OZI9btv%O~fgzXcyuh_m~`dRT>`rVcKPh`+10hHYuAZgCw9y1 zmf4-MJ7xEY-6wYc+Wl)!-JZHV^Y+Z!vu)3|Jva8;*ekPFX0O9uhrMxoQRJAh_)i z2>v+qF}o`0$`|d1O$DKfZ(ws$BrC3Dg}li zM?tXUC> zI^_U{8K)qy?-T?cI|YWP8K7|1X$X9D8VVVhKx;mjESPy1m>Jj^tadT5fI6XqLY6xi zSOj)3FkApNwOu22Ffiy#?_^+L;IoU|!N7QD2Lpq^4hEJxI~W)Rb}+EtF)%b1R1{QI z6jW4TlK7{>xZqy`GtZwdHcV3(KnqwN{r}Eb#lYy0i{fmL2DzmAvC^Nf~nk}P=nX!?WETae;ql`?1 zjDV)1qNb*z;!8%h)2ILa`lKW!B&7r<7#RNlXIRI0o^dtP6CpJQt`!UdYz$nHpk6r> zsA#i2W;Yg924m$ZEfd6>`_(+FJsFKX)u5akPHj#%{<<;k0y7wx8I1n- zGifkuGpIA@F_noG~DoA3^EKN48~xUpk$;9^`H8k zT@2a`f(-0}LYBK2j2NUDR0V}B4GdZJ7}d??7{vwE^_Wdf%*;)VMdcX9+4UIJMaAWq zMMc=yMU|OF#KcYc7#U5})J5$W8O4M1RBTlOOvO#yw1jfw?OapU?4@0euvE zsx6&u92l)_-RxbsS)GlHbd6XUSy?z$jqQ~}6WP-sb%^=Aj%b>`h%V5p0a~FduXn+OmJyme} z*}(v!`7c0dStuPBX^j3#QzN^G)>B4Uij%*yP>%*w1dRjhOh4t4@z6G8@T}9!N ztfw}=nF9kOBOBv+#vrCA49pC2prpmZz$z$Y39AhlLE*^AAZHh8V8|$FEXc^_!+4%i z^xtbxzF=fH`@f9w9n%j6F$U3H3_PIn6rz_^e+Pq*zJZ}IC?Jgam}MD7j^_b5p zTKZ@O>iAkKDOvmK1Zw$MDl(dTwwJ^zD2At(JA^rur-v)b$Cb20%+LB?#@G!rA5>^d zK+G4^-@(A9Z(ztM!pFp}Y{zWNXrjlYZY;;l*bTNo+Ye-cpEkmRIC&%s6k@>^FfwQ} zcrfWQSupT12!e)L_!$Hs=7Y>OS2tHT7dJH)H5X?WXIEcuS#w@K=oyy$WfG}e6Pe=%bdLk9yhC~TP+5b>hF zgMnG!z)%%bGcYz5J9mI$gOOo2BOBvh#wZ46262%6Q1!dPV`mHuEZPQ!!lsI%vl*2b z*+N1X7#YBIHA5oz;-B-2fgvkuC9DIjfH}dHE|_3oWQh7- z#`urv2gJ?H2sbn8gBlhFhT@FIj8Tj+9{-kfF*p6G1J6WR{QttFz;uj3m_d`loFN|M z77J)D1yw1aibD%ta&m#vBNx`3zmq|P0aQ0~^>I zkn9P{m!cwkOzK8u2hzyv3q#4j^UQKX& zBzhME6KFaBDGo4NA;^)!2=*(7z)l7huwU62SQr?=1r?|!U}XT+37{q$=LG{pV^d>6 zWp;IQV?krl&=c$%40kr~@MJPxV!HNkzbAO5nIi)OlO)qI26=|yT@1{i=>{Zs2!q00 z7%9x5g#w>l|&5*-~zkIz)+LX)ZC5{TFtPl+cCoe zpPx~YN%EiGOJgS|M+a9yZ!TpsUt^O%b6IgsOXb6i)nS+P63uw*T^-G2DA%xnrjfwT2DRt;;5mjB0(igIW@x{KIx(2e`4% zd0__wtH2Hh-U|kXil&ODjG*MBEUKy~sLWXPZv~@XRYu0Y#f-cxonDO3|B1MEo?~1M ziWkrSUzkLhb}?u$gzsXI22E5U#fv(~HR?#NfkqU#yP+%0p`c(FVWHz{sv%&{ zC#z||g9=N}eO>I4T4i@t%OF{7fWvZ+b~6e5m>VFHDL| z#~5T8v>7ZJ8bD<~Bp>f!kb`y>bl@qOACz|ZkkCPo+LbUBtfAgi4;1} z=mO^~Nr9aVs^Hj>V~_+l@OCiB>4TbVu(Zdczk@+eU?&4VB!@xURiK6`D1X6Pvg|0{ zW|GkNiiD**sX#|PUvqgyyKqxbihKi2e2lx$Ql7sNDCMcTrmP01J1_z6vxD0sOuRyB z41x>{0_-4?vFHDP25>tFEY6P*XJBLqWe{LuW(s0p2epq_p`#fLpsp?x12ed_qbkZO z$|@SlxbELv#$-m$fSSi=qyyybnuqwzBcy^X5`9_ck!_HIq{^b5&M>HuA2| zWpQ@lv#@Y7mQl3Uk&-ra)7E!4l4nbO0B-n!2~e(Qu=_uOiI?dZgCT=GLmOzA#eu;Q z>=$l<9SpW0zc_-*KG2X4bOZ(52X+(yjWvP%&J9%$DhkCf>|`(k_qb#k#GwN!vfyeO z)Xf!UFaoy{L6wCigAvr0oeb*GrVps<26c8>k<+iJpt7klAEPp~dn?BzZfpwc{K_#| zgZg67W(ue~#(1pSC*59J-X_x8Ce%#Qos~;Z$JWEcR!mVsfR)ufAktSr+uNqvUqxG6 zMN3<|z&L$YM#D7%7?|XlKoKI%pvsU78pu(DR>(4-xVo@|0YnSIT?n-w;X-I~1-B7FwKk~! zV_=X5J4;o6Cxa9?V%Zr~8Kl5spi)}}T=obX8;OC(dLZSlvZ6Vp(9vcTg_gS7jG_^5 zqta{*tbJsRT{ZrF{bc3jWHoPssf~^41g2d{LG~W}%zVC{T3%-Io+f6Rrlx-xo%9XV z4Gf+!FfzFP|H352bc{g>G(yP$T2zBn$6<`jKs^R7McD*)G6*t&+DIVRN`PGp8z}+z z@|mIafw7Stlest_Goy1uZEb^rn~@T)2d9Lhu0n8NV6cL&q6DW0uac1)&#v|BcS-4( z%P5L#$_v$H7G>56$!m%$%9`m&LCXGk1_mYtaD6Pq;0;P9!VDtd-~x@_A;v4Ajzok$ zwCezNHOQ?HSA%*BLSR=z!&sXU9=3wId2@MU&X4K@%2|*bgqT3q`+^8AaH)VcRzbQOz=PTln+2m7cl?{f z==N_H*jCV@T#&t>J}MW}F$PVBvRw=cpruzxX$E6(7@CN{eh24HO;C2#gk)D9ft?KE z;Hp@aK^!`a2Wk+45|;v4oPj}=K>-}gpvIsYIA~Or`IwPPEp|Ot|qO zU@UZGW&kr{9ht#vc0g@3P?O)lkWo=kSr9bgU@WN2xaHr6kPt?JkPt@Oe}|cN{X4^G z^4E=lks*YE0lc@B8d=!N39U`9S;3ri!A(()D zShvoZ$;8?D?-^$XMh36{Ul<=S?P3sRum`Pz5n~WXN)Mu-5D-Obi6PPhqwEhwrgE#Tz^dXu(AhCyZ%in`SI`8zZ^(9s$gJX5(m!(nS#a? z*uca6MC8?-49wspZw!ig(TWg8Z>C+aaS9g(1||_EP|kKJ0I7PJ@9bdU1Xsb3Q9Evs?@g7t8I?srDN@*27?dK9b4;Gh;hR&< zR-NI?7X~exS}nxECXS5P1nQbHs3A2Lq^S z#eTuSP*@q_G(lrQ<;Cni2VtiLYf}hjFODt zV%0=Vn=$HNVp>|_suiZz)}||%c4fuKXZ^duSZHc!VrU9>m&N}W@c5-9gFa{^N(!_X z7wj%6fgKF|@NmWGy+Vs7aAK6Wu!BKDA5kLhU=Rn7zJS_EAUA?~x1j!;fg!6hXm}Dd zKL!hRHg-{CEaCpT)Y{zC*GNJJI&_(oHGMxc$YDXh#K}aJ-8{P94>oK$cQ;@7T+Crh zP=00t*Z->EvPPVt02KZb43c1fg2Ep$-h?r?3yl!4KQSr~z6b8!BxM3GoW>!YDTGoa9OH7Lh*%Y@b9}z>LX&nD9F>1Mkj-uRQ22`p>|~H-0F4;(F~~ww5FdDK zY!`zvgBZAI+rgkLu!BM60w`C2igQpBGBr`tX9PtSX!0654J0ZeCeH{OIAmkgimOn! z)r_|H39$0;Gj`Pys>=>3R<@Q6a&-5x^zsHxV%GDxni&}zx!D_A^6+x17~3i)Bv}|6 zs~OnX=v(vha;g~FDJABC{3yx5z+?~ZOW1)R+qY_A?cFf~p%(dG`Mc69>~S21y3DT@1pYCF)4!FUAN2M#Bg? zk__$?Kx%klK@m_B#*WEU&{z;$6Y4RU3NB%jGB-3dmtqUy*AI7h57*~s+VwBiIKWa) z&N9H5aq+)GzY;%nb-xln#(wblwF(0RlL@$8=mP4^6KEH*gCd+AYlQD$U;z!7GaE}Y zf)MlP^O4Ektlr6C=b3i>Tm0__BL`zFs3>J%WKd>cU@`^wk;*|8k`RM1QdmF}JtDlJ zB{xC{jLe0NnU$H9 znWN0TW%)T`;$k@XWj)O+Lpeg3cKs{3%((Vn@MXpcf87`t{)-2t6)9+15o9O_g%_&Z zG3rr_q6->;;KT#Y(opY$+jyXXXwXaqsEFVM=L|^47SbgJb!-JeBg)G9jLQ6s%EHXX z@{HgX1(SVza12X)M9h=x@qytiVIeU$x@XMjW=vrWYwzuC|F@cf5i};m!Yoa*Bd*HwiK_eN0FRWeHD-`^YH7xMJJ< z`P=?Q{CfuqLjwi|CJk_!1J9YDra6rKh6tgZpw%H?5baJ-w~mE@13ZlknkxjYiU7}< zFe-w^O%<6m{&6sN|7&Bs_OFC-t~ZmKr}y7m42%p9|CcfTWctCt&Y%hM4LrX?=Gs7G z_@H(zXdVdE0|dyD{U%cGQve)iX z)FnoF#;|{@@Bwl?G*PX$C3ydMAtwgh-j7l{q^Zl)%FyybSEn zAroHxoeY{_F%||T22DXB%bFbwEcy~V7^DSuG6;dkyg<<`4_@G*sH6s3SpexUS~Eh1 zxF9oEVxoe^qN?C#8g#IN@x8tVE32TlePBXnX`X|%iIa#Kmy(f#dUUqOzuWT0YNB}_ zPL>8Ly2c@%9)8A_mYT{MB5JaNF+u;HxS8`yDvN|_sEKN5g4&ny|GzNFFg;-qU{GRc z1Pvc4GpK;u2%xb{Zg^V=ni=Ha;Q@_eL;yjHOGF6+ErY-Up!!Mz>}787hzzLFz|0`Q zAPCMwybOX2pk)FEhQh{z#-NH@Rk^YwL; zHc$~2RWV?C^6yMSUqeG*LWp&!TZCIEpR~HvE-7_s(6&fWpY#70CKe`;FP#y-gvBHHo1EV*B+8Mryi3mLRP}ij#mAXoN_+`TB-HVuaD;uZ%T3KESa9ZihRA=N$zYWEr#= zvO#ln+6+42v z1WJ35UJxwpK_d+ji_lIcA{IqJWswM|nE_dv2x?Zq3TsXQ&?GP@2taelywGKdAa8?K zVSuV_b7Mi!niUf>YerFJ(83i#V^PK6bvt<dzHT{``)AUM`F^E?Fi{E^}P|wYY%h z_?-XiFc~s=F<3IVF@!K21C_I(3}N7y0WErTf!g8@k0EF~65(X%VmO2VG$jgv$`3_> zoeT=#$kJwDhW1FbL4!*I4B8BgMUJct2@Ki{1q|8@OtHHdY#ErLJziUVM^=XU47LpG z8EhGtK!Z>h7;G6pV^8MbCO;@aJA*T-w!lsXcQ6Yyjphf5bWo83T15w)D}+#>E}6I~ zG;pB9*Gg*Ye9WREV%CgCV(g#}B^!ie#ta&`gH1k&F&Q>B)#mDGh)I}g7?{eKdg)r} z$SB2^$jHf>c&&X@QU+$JIkwz8Y&rTGX`7e$?BP#>&fa_ zfa<~|1_s7IOivgjK)FYdK@vPL4@*}VB{sBeg@_Zx0$6B!7TWp;m)M|@XHcmJ>X--&H0~%ywY6f(dZHDwBbM$&Tp>WPFhYv{f0Yj{~jN5M>QUEe zz)1kyl!K1Qf%^$e46N{O{tgDv2pg!rwr4bE7glCw7gf#-V2N6jbnSie$w*M_>xRxd z_3s!XPavo@2N_p;!oUeyr@#nWaD?P8Xs99Fg>VKamLbI(EYv^+8yjf7H9Q^zwrpW! z+49fBg(=46ZvrU77#YmKX-t4Y1++9~wa5@Bmdppaw0dq7VXi(ICEs`H2}c zNGGT)2rDcw$_gfy5Nss{sH_0B*Tt9w7=#%VA+vu<49eh|2xI&cn`1%apP)l-oZBqsYSlg5bd)pM$S7iqGlT7rOU|l6bZPSpyCXCE*FM>S`E=PSC7?|{#Sg^O* zpyd_9chFKEA%L&V21<;);Gs!223}ZpVFUFHK}8#)%?2tBK#exgLVsgXMc?VupR)=? zx_TtKhMxEr2x_%8*}4Vq$}0c8dg@G5s${)TQ=KsXPY48egf zC9so08QdHb0F97=GZ(0*!wwc>VGv*djcymr@W4l(sifmbdWHbxT(@;gnW4QL=U9mr@iAl(92W zF6S}V(^uEh))SEy;AG}u;gdJfQnyqW)=@X)78mBx(m)dT4FSiOIs*d}9}{SZGX>Pf z7GV%YD(|6L2r({THOc=dfM5WrdLE6-e3^D(|Fn(iVVUS?R1kFF9w$(6_ z4|GBj;XbH?!4U?|EfS#WM*>p)fE>&Zjx7cTe((Z7$l7h#6f|g{Rt&Vl0W@T*%(x7_ zr4|4!eHp#~9R{`2RHYcx{{8{Adl;c>*;p7j8E}u&BAkiQ#zanNtdIdv=-}bcoq=8f zECF8rJDFH+ynJ~BY#}4)NCze>CeVmv6=;%F0Ne?MrDLdR2>UQHB8CHyMNBvbz|KUp#dk5Vf=;ag_saPg zI2d@qEJg-a20n0J1+5te?M*NiR)-GEvI|3oYHbhfPVlp1vGI-Bdnh5?n#D4Nk?mh@ zSXl1ge?KdOf+|6M2-E)-Ov+$)M}X2L>bNr05eRoforw^DdPD%!yyXNZL4MHoCa}Xm zp$lpxG8!}TF>5oL8k>VhY0Vig2mEK?6qD1E^{KGB5ESmq;>*PHw_8k6l-s3`@z;$b zN5E?Z8JL)vKpv-B=&ddE89zJC`fXP$O@<_+bOFF$ck`F%44c zU54EZYz!O>yx{#opm`mJJD`P4Y~VCdyMuufQjx><_K7j@f~T2kb})#6TKTF&FxhYcFekhhSMGL@87;kD&+vq0v&73SrYP?wW5u!l21ZR1D(y%@`wc)@#j zjX=p8QtLtLEhhNr45BRt8rTPI)nx`RG-WjvHWn6TM(JrXGRP>%z;+64JI%=U@7HN2 zOYm}0Fad4@hWzhiVqq!+?OJ3ghBOBtW5%FyJ4U#@7@aC;Hv?SAv4gf>-U0QLKvOs% z8ng!pltw^%Ye6&opz%D&4qH$OCkb8YBX!5XkQK7p8)>(xpdBM<+?8DvwAoaUk5QCS zJT5gY*3L0V#DUjDUE5mFQZ&qEwS}3PMNuYiUqL}1Z)Q5Hqk)pLHtW9vRy{R!11HvW zMi1*?ZpJR|U~5R-XTre1q{eiNK?gKSAqhIT3#m+pj!q!j6wtB}>^smHgd})S3e=L) z0yp+J7$h0Azy%{{B^{`++`$0aXbPHNQvy|urr?4>UD?!F54sT%)Qke96;Tl}abrRM=v1K~etBLyLV z=7c20W(GEJVh8ngK~q_viFnZTCunSv2Rdp9+G`7H=Ypm~&5c3(>6pP2qRgN@ zb;hEK-aB{p9*W(;vLpIX@6Mh7>|A%bGM4@80%6x(uAuaXRA#X=AkAcf#zjFB;tV?& zK(k;h`k>`9tl-t$ppB5skdn;Jjd3Dl`oEcfpMpq`c?^O7Q<=EI`;xpFs&+95feu*% zN0gAj4hA<+dIn86f~#fdre1I$fI4H4t-PRO4Kmjw#GnaYtiOvvpFs&)RXf1Nq!{!W z9KhALCtTKy!4p~#s)A?JQ5Pa0N0oZ`5bR}Trml)zRNKnVUQke81xhiiSZRq#$ytbq>uaj%@(GCt8XI_t zvP!sU;F7qbZ6YYh!Y*pA3}b-u4->;QrYy!oOjj6q8KfC>K}&gL7-YfW3R(aqcmcff zpMilHbWWB4Xb=rl3hZD2?WGq+DU^&+c<1G%q~ztLq-H~DrYtEDJ`pK20yK`zz#zmF z!L$OrPtgUmCYk|sm>$>#DEkz-z;!xktbq9oY^@ZCB_gncLF>*A26=%U3xnVWfMwUBDR@v4GJ^!3N`X}cI`+AN z`uc&n_AuHw++Ib+KHL~eTX+Trc^KFVnsO`2sB3F!%Bk=f2|5btg;n|bREO#5g;o3b zR)y)At2sv*+ZabVtHBvbiGe{0Ix4afGRB&gTE=pc^2&Okx}=LSmhn8(F$M(&ZH8H( zmbVUrF4$|JMRtmyJfHvyCD1+qXm3)+F4B>iVF7~z10!h4^#Y6`0AnbC7==3+6u{d% zK>@}LIv5e0{?(zZnjH-4`Vyc)T#!63gA{{2#8&+s44{swAUMc*1$HthGBAU-^`Xy` zLTXab2$L+Mv8XzzuPg#y3C6fqQHF_y+g#tw(%-|=S6QE1i(OJlN5;WZZG)DMt%eO_ zs*I$#nwhSdk&K_LxDv0V2#=HPDvPNS;#`Kxa+?4DGk7srFo`if5mIAnU%(*1&eYD( z3T_wJG59fYF$OcRLiX)K*GcXMpCZ8o-glyE3L3~|Jo>Ma@r>U=mw&&(`(>c}eTCRS zr&=(uFqASzF+PUwqcvl&V|WWHuz4<84fULGhATMW?%uu5OjKl9YvNIG>>8cns@;z`2b81F2^!+{GZmpv_s4h9|loeZ`NATc`zTL#D? zMLYeS3}#?4BL+JLGq54r0y`K?z@zez-Ez2BB7&+y(9QzzwtI6UTSgOYMo~r`HD@Ck z86!}dHk6e$bXJo!1kC`0*kGDbBUDCSRZmx4Rz*rmg)vITz*$}0*+2$HYYHnF$ce}q zC<((EhCAh@)Omf}WF^=o%t2)rBf|owTE-nr2N{?_{a&Pf(afMAC;%-l00rE65Car& z1~A3}5CbG70A_%Ki4}B!gQBS70!E2{FPIL3`WH+Ljf@41*THcw4;j}~U{C}H4`f^u zme&w*?a0iK07`wakUoV7IAef@lBA#+13ffBoeM})no&o^PG3q&-%bTagC>#m%*`1K zr1U`Lik=jVcCgdcwF6;LnPA7jz$C?##lX$L4{;-;H@<^`=K=#FweM!&1@%f9ShPXO zmkByUzyR9w4myAa$L@L1t}N&d`hRa2@60&va{Rc<@fj|lv8;uRo{Za=4lqcAW?F?_M+I+C zj4(`RbY@(~bbvvNArEvW0b~{%){cS>lq1|L4H~(TW)K3cuGe7T19vKRFlc}#Hys!> z7y=kH7?_Gc=>}BU@PRizgB&l)z`&pZP9f3)pw%Ye(hxNK1R7OmV^;_FCg8hpKvVXh zlUcw;p@}x5DWjB{sQoKN0i4m zC7WPF!(bbwKO33(|9k|6;Uk9EjAe|apt(~}c7yI8*v-Js06M1}v|dUTrM1Ke>&(3d z_us$-$egSH4H=g+h%iVqn1E_~NXv|22ZMnA4hE4sj_eHl3?iVSok5>Lgn>C0G7idq z2a+yP2Y%J`8O@E^#Ubl<_?Q?iH1)aFIOW8IC8e}vgpCB4g+*l5h2%BPOY>=R3-Sx_ ziL$XI1~RiLDTpeFa4|44%wqIp+y~wl4?a_Y8{BS&r3+{;5|MwPu@27fjNnobv|^1J z+#+KEos$mEB%rxfRFMg~=`qG8goY#}goGxTnrmBYn}Z1ka67`8 z!GejO@rjT+Q^)@r1_l8(rjA6=8CpUN3{0L(yM)x4#s6nBFbJqIb%OTaGOI951M36H zyJ3-6LX!7nIv}LZEQzU~fr%mNza0}d6E6d3->VHMd>|#=4hG1cS6H2;0tz1$(AqiB z5^T_T0}liH7g)6gI-CKvdYnMWubdq4mT z-lKsmZigZcN`nyf4k+TFv<4Bkfr^KK_SAvR*MXQ1N^AfBL-yJsiNn%3L_NrSh>+yM~> zxdWme<_?HB$b5)6s`()ILBzrCV_;+e-3Y|M#LB?U03P;1U1tu>NrNaMq{;M*L6Sj@!I)t_s04(}v+iI}g!aNCUB+Jjh%K$o61vDrHW63h8 zgWK4kfmcQFsPirc0|pq&5Go6*qSe{e!HFI;bOiDrXvBz*2{c413>t#wV-gjHOqZ*v zGs`hD>O`CC+t^4+g7zOpS-_aL**Ja(n<|4gBFzR7U@nhAfJ&NPLm+4y5|kO%7Gub0 zpkyt{xKK<2bbivm<=}luO4gG9;>9FDku>Z$bCQ^Du}pBtsV7fR-DBhI&B5POz2+v;~SS#z6fE z*uD;Ceb7)A19TGTsp3bZk871OSX z*)cKMv!9q4m>8IV+RO}T|1Fqon4T~wG4z5Cu7Rw?hPe(p=Y?1!1)X|BBx-2S2+16nbDVL;9yV!R|WF=pu!Zi7Mq(v9=d84)LRk*&!BOD2VFojSH^umpr>W4_S-P%q^tG-~x&-2Imh9;Iaj@=0^=lycAiS=`Tz@V+e}) z4Y+s|iue_nI723~II|i|oG}6<&cMvT1wJ!UfWef(nZbwQ>@Efg&}AFoppp>S!C(#A z@+Yu^!2_Php{qO)Q2_1RAq0>!J-9od52_CJA@lYk0y`PF85p5WBQplZFQ7>rZs<4( zn?9(!0^{j}PYD631$F;iz-r|gR2W>q&Xd>Q#bC@}2Hso`s?I?pF(9?_0y`Nz85qBS z4mkw1JkfR*Ko^>U*Fb|82!M`209BjdLk>X$mat_spm8`>KPp{;_>nF z^EY)i)lpUyQIiwWP}5c}FEx{NkK&h95R?|zRS~l>vo^OAlvNcC(a_`9)MH%Y>Y=3M z0UGuPui-aj0OOL>|oHj13HEW($|L0#-J|sC(z!oV`8+$wg(`_n+t1ugD)mk!6uAJ z0Apu>u`?6awgz8cK4@7QINvyf*3*OYjRzz@fhw2(|G{g6M3KZxk;TFJ39Ozm1VtQ_ zZ@}UVnNV@?x?Qk2pCIOgE~Wnep8;LG6j>Z>K3F|t2#Pq!e6Tn}CPQv=UQ zi!tbe7lMLz#)CI>B95976F1jmgw&Yo#&V3}=BTT^8Bd4HTkA^KWLreoDkxa`>DvZK zut+*8m0y9NaAk}FT@nQ?AH~4o9Rw0*aE7+&K; z3QslAM1m+E5X;{|YeYC1KnFsAGCQa~iD$_z4K z6F`IUFqRHf*1!;ywjd{Ri6I(dpn{fN7*w)~hzqMhlAAiSn7*ro6lh*o$3xa$7m0nr zIf(zYssos03sH_X1Lb=uabG168?+=mT?kvj6`X!0XSz zX(0;^{XK@kU~8L&7*CR7}}jtFdi4A^{dnq**NfUJupxW5cq zdL!~QMw1A^$8#4Jb zfsT7pV5kPQ8Wo|9J6XuNXwXhKG<*?lTa4xF$O{U=;fn}x(D|UCA!vC92Jn#W4hB%m zQ3|@gVF!a8Xmrh37`$o5*a)-`1F~VvTwNJ-com~Ev+>vbYwEhkwuIg`$U&askEkrrVW6_C;tl+e&nv6W^%ejI$X6}Vn7WU^+0w96LmVlV?; ziU!Wv$eo|CN)sLWww)n zlnWuC{gUAP>;@8NDCLESL)3%%WDxZZ$m+r61z0^}2#Wd^AvFewdTSK*w}jLfAnLQw?Zm zE9e*&5UmDJJ0j1%?#+cFQNv4W-4$A1kN(hK0jChH0TRjxDKiqA*+T# z%fuj?DnYYE5EiUq4%=I4s?4Si>60Utup6^0zl}~!jZV{N2?$`(_mR|778O<2lXP-& zVvI>QwB-SBdj)N>3`uZ@FJ%w*i0}wzTDg~ji2*ux!@$EJ#gGr`yh3JPAP3R#!b1Ss z!$g!3(B+@t;YHAN4`}5nXdE2269?3%6a|+8plyL-&>;{|n;LXv7N~qMFcelcMI6!s zKLrFdxG0zw5U>Yyg4v!OpcBkedV3iI92m6_$Cy2I`1cb$E^qVy3zHRipPLrLCeTq9 zuyJQe@UjtD4;gxZ9U=ztRQb^SkJy9&YN>F1ab#y;VBlmBVBlm>09_Io3#sfO3q2Va zB*A;5LB}MhfcGszng^gw%%JI|ozM+vpix}m3!tq&I~c^kqpG0UIPh8zaqxmC$N}Pl zcsJ6{oEhNgh;1|N20J%5yT1!C_S3@05+~;$|(wnD~fPJt8W8QRZ|7fCg}4T8ZM^HEUaqo$#%9WZt5u8pataR zWq5^U#YMOwwL0TZ@P26U&S*$o0!e?MvKx|~9Ffx#xU7eyr%+IO`v0E+G$zc&461vy zz-7Gy8^j#Qe&xSHYD^zN;_$XAL_H{dL)1GVs|TfTsQNHy8y2D-l)fSAt&!D()3+Dc z{BXE>Rwgc{V?t^SAoc8wIgC2sIu-05W)2}W28j9~sCvklImrFmAaj_Zc779+0O+_WSWe;qRaAKIzCjdo z&~gu&B*7)SIOw(maK$JNT7#g^AkJXVAkM%9n#;e>AP(MO4LZ9Xa%2ePEI`DKI9$-X zWB8!kCqS!rLCZZs1t0h@K+xuMV^Kv|nI{N3Aq8|Wpqm@$Xh1i&kbfV*#{;rCl$4Z| zIQ;#^*wz3(!_41x^Iv7iHQ*uZ;Db}%58=Q3V^94^Ol0djl*5F?L2LIXVW+oQbyOhA9D5if_QS=@C9>(tle`gYpFfSUqDHNIi7iO%hy= zXJMA(7_A1pCTQvcm)YQA9-1J*DnMiB zkQLsbnI6a@VNj(2S^NxYYk-Pwkeobt|F;@=lmv1zt+_hn)E&?kbtIpo4wx|B0(YVQ zb%QsqBZa~i=mzogkWLh6m*77K7o@OYb_H)12NUqL11j?%X#u?Soq-WDrU%}C;|>}g zAz}Xwdh~*#7InXN7TD4MJfMyPxA8*%e_{LwE$jS1?J8JV2Wm};!P}_N5qCtZ0a}tF z1fazLcnuKrXmrRiWuVDm(1j1Cf{LJ{Apa>?1{eh8352i+%IYZEx%}G@62i3WAFIB% ziENO!sEDepkee6dn}6Ud(ODRR{#!7yF}-162DhR$7$$?-(V7g91^uA)%%FW_AR2Tq zAc&TOyBX>tL|TF-9fSb1p^ZpOh>86j44}3&3%EhRAOJdW4|HCD2m@%04YV{DbaxkM zoib<#0qBTJ@DVMb69iDxiz3RRpv-`PfM)^b)<-m;sfAG(%3xyo`=^De1N~?LaB2Y) zpz%cTS*qZASQk={LHlB{|1Fp_L482R0FXFiNDKqGJ`DZO3fgBNq{g7fz#sssC!N6J zng3ZqXB7ykG5A5nox$^9pmNBGi3M_o0SDR{2GH^b5qQwn6hZ)_wu5G7aBT;=bp=v~ zf%fh&f|}=uGg8@wl^LZI0|Hp$S0!D0pZqssDHF@T-?1w${W}NpcNyq>RB&HeALL$U zyZ_~2e?aPWP&w<*z#z!Z02=$+#=y-0DqbM_47RoN1Sk8Ut8AV-BM`ME`$Q zCJrXh-FN;VbK&g>$a$7A93Nv&MDriO&l5#=oR6*q-XqKA=JU$PqaA7RaXf%V3_Y9egfST2nq=n z@EjZ{Oqs#U*g)NX&?K{gp}Das$VbYiieNt(iz)_enK^R{Bg@R0ptCFP7&#j;+PeIk zX5?)2*##V*pm>9<4KW1eCuZ<`Hf+8CJT?QKFJLHz&KCrL(-A2CLFz&I4ALG=`p?Sv zhe<$4jRB+{B(9HSKB)Z-QqRWh2ntTP`Jk~Dka{-8P>}hcJ*c2|D!3mm!_Wd+?I;VK zGzN{NNWsfHjN%O%1&ACf32L!QA`PuTyL#Zd6C7)ZEDLIZ!NyORpa&cvj-tWR;8JEb zX2)_IO<1gnDb{l)n4W-6aSixy0X`>Fh@l2l`#?@@hqbVwNgt6Hprg|W0jQr59>BHl z7+l7K>NHTB5_A|EC|Q9LK4^zI_`nQd&>>r(65LeLRGC>>FaUHeu(|b5MtSXb>`c2r zM+5))V&de|0y-)fTwa3K)&5}uougFI{ct{u+iW|d^^-u;adw{loLGIu53wja|{AeI^>l-bM2SHoR zK}P{0Vk6na2~@s<`dL7Oj_ zFYI6d(TG+R^o}P)lF$QXP(7rfbi`yCw0c0?WdbTiL2C^_cR{g(S2O5=2VX#9pi`O5 z!D|(a8H5yN2OSX%TI(RqzyMv{q{YAv-Wq0L2puAX`dJln5TY!jFlgTo8}e)| zQTtzzYQ9?x*8g~x{NjYIy(BXT2A838o?S?>cYb6RvJ2vLd;?=THfA2 z4E2O$METgP*d1lY7%=Wj8_OVe6VhWmifK)4tVIgbRzGPB+xt1~D-v-72hlie? z55a?xj0_O>f`)lIKx1z3eIejh8FWe*;V$SLJR-3osy@h4Hpr#ZZ14-TK`kCGuv0;O zWYG25pm7&b=pZ6!3JK(B&=eA=T7(?gr3gMiA2g1r3|UMGK5z##g(Pas#BS65=hv1gxH+07X5h9Rg7gYlncYcxRX5+Uj% zP|OFlTOjIT?G}jnpmqyHeKbft_{?`ha9h?8G~36`*r2;SL1&>zgZH0Q$0l9SopL+|`UZyB76X7TGy`7^gnTX&<2R&1JjnV8UbI2u0Hjeo$mkxHbDKczXz)4r z;PDwNP@NB(XMmoq1X@2E1rmp^4-;fyU~&hmhpd|h7X|P&Eg<#aH7#iBLF=y}>S61z z!RM=k+aR_e^Wptf(49BT;5JAsNE|#q0&*urJ!tF^q8>c<`2RnsCB(!Go^JuGXAB25 zYybaefT#zR;Slw({wlzyzKz0^OYgI$s!kOEGNT7%?^nof1GKenjMh z3NSHfYaMi!zZiJ*4K&>dDw;sI=t5T7LT~v{(qpn^1fLuXnp1=9#{?ZQ2%XOdpE3-& zT7|J+P~AaKR7X>V&rQ56+Bx1vy0k&dT2<)Z2_aQ$@a-yMiY8%pid?d0x{Be^MzO6S zYxaRJC+6Y;T}sTr!1({_e+#B0CeVFG@eqfCmaoC`I7a;e9X3Vk(Sd3TP}dVwpYT9O zZb7ONmMr%fPWp-nBWoAA`ZASUa!8^HkNpRX&Z|Aw9 zu#3E|X1cUH7~EGdBSpi3N@WRc0*)X$C{ks$CvvX#^V9+`%9NA2Yy+ z2k3|ZB4VJ$6u6fPiVDaE2^I!*aO-6U1B?C+1~Gvh3{rPMW`h>!fp(fPf;ys*HS37Z zgSfG&G15VS&;`9rs*-9ldK#eJ53q}GbX1bue}XnWAl-h$bWBQBXKE&By94b0Xr6+< z!r;9QC|5^=5+P(ws|-^K_*&f}PzMlpe-CKz7U6$r{|ZqmL5D~X0?>Xu*#Dqzl`;dU z9mmQb4m}SObVLbg<)ieS9Sop}1<=|P14Bkp9034XZm0(BXEDi0s)?y-f|eb^4!+b@ ziCPI;&{~orsiK_a0$OAU>lpDA{5=Xj{Sr)o{L07xs@EczwHOo_VnA&N)cJnsv=Byw zA_SyB1+f&U-hu2|1I6PG2EIF>69{;qo4G~w4GfVh8B=4h2O%T;C>N2$x=X4F^6O)} zjHDnACkd4_t>{j!kV_^|v09Wq2j26Ti3Apji%0LKov&O}5P zXx>x?ykiHFNI{VU+F=2@MM4moc-i$K*E7o9F)#!tS@5lw7?p&nF_X8XnizaM1$xwS zoI4Yrl zEAZ$R=pYYJ9)h323_E%m6o{ZTAfUUmL1S-PpfMtG_+7A|yr>K>-=N6>kzk-19-Lr6 zDFV`dM`UaU1~zEM2A!k;y4f34>wpd!GB9KWb;BSBpP<~SZObSQKFS`naYK>uAmYS& zU-Kx?QT7ogprh==V5>L&-Cz_$oLR4ie3ZRA=;V6nN)1Ma&rIHoHOw54J2yZJ!B`>f zDezes`k-?zKx+kHcWy8mvnw;&+sfoJbL<6$5hKGsCUr&~rYE44<+~V=&e8ziD5wv* zQ4pj*AI9*9G2nL$@_|J_i^G2d(~RjLX+8E!ECv`r9vG zS}NZUu_v7IEHf(u8-qJY2izX;xd))ZNbm-5$hilO%;3Xaz;`4b0QL4`cQ7!4ErMNM z1G=tA7_#B;SH50psa8HyII>;AjAxk{7{oz$#4s>GW(=8bd9NwhPkR3yRj&bkg&L*fP}CRkEk)bn5sEbu$-=`xR{c#j1VWM zkc_aBn7FB~90Mc6Tc#AoY^GaS&J_SHf&rZ?fO;f3qYiAwFa2qqYq7Y zCbV1CbtJUqg@oj_C1A9)yu7ruygZYGpuCo(q?WuOj5d^&5|fez6Oi;-{@;+%kwKV2 zj6nsoMpGPo83`!NL8l!-8-(EE0dyJ>Y{e#M&nVLL{1ZKUD@!&H#1e|?bKvG@jbftG=xu)4WC=;)Bg z2BEHI2BEG@USg{h=ZmdU1lK|TCop+3=rMB(uroOSy9$cF|NsAAVe(`s0*jTx#S)nO z85S}96<}u!fr~{lr7)~yx*@>M7zGzAWvXT9WjZLp&QJgsOJE9SSi}sPsSbmS9b!sh zaA3M6z|I&B7t3bKVwlc!MSz_l6C%dI_O^0W#tNNJAlHj|~Gj--AxQ0-su= zZmt}XtEM0&E}>^t#`IS~T+BpPPCSF*|NsBJOb!gC%xVJcj1dqw{{R2KgUO5G5Hptm zJ7Y9lEP*MUVG%Q{06SwST?O)pc7=^`VMq8CoAYEpgRVJ!l0_u)Y#P6S5hrH7~F0#1)U-A|M>q9 z2Fw5Z7D5HSWuaJ$EpiG@J`)PCh*K)tIJ zIs^yy5x9j1?PP&#aIgS$bPO!OBmkOJ1a+lA3*%TXK-Lk1DtS;X2EC;gG$H~z_N5?( zNiinI%G&&70OJ7{(23DbCX8PH96)V1&^!QS4j8gV(jK}-5+V-jgG0o@=KwG;GI0Hm z0pD>Z3)(|0!~mZQl!cwn0d0vOn%&U$4`@{!Xr5P=0d#l?Xgq@fyaip9ffqWRFAB=M z8yG|(iP-_hXaF;IGO&VYvp{Vb&mAXIj;>DJod1@CZZkZ`!JV7@?~RGm|Njgv3=B-% zp!OzXGpJq3YzLZ1VqgUCbChK|#-POz46+*1+lQq{XoCykZ)l?)yif=`Q>=JQMAJSNKj)_E6=INKmY9QUm@tEzjG$9S;rCy|Z^VXmT|wuW$bd5t7wB#+ z@OV9!{!RvIXmEgT{uKnx^n>yMs8EDXd}=caGRn>l3Ys0H0`hxV8OZM{jPMJz(L4>R zN*TDI_Zmttw1Ya8sAtPV%PoZGpd%}Ym_?qfgOppKK`zz{pyez~;IW`NE*2IU$y1}<>K!-_a)7MEpIhD_tK3o5TdWem`b6QIEq(BvN|o>)LTg1{*fw2m9JgU7%SyiEd< z7L^qdX)%))w0pp^KZ;U6d|u43Bdc^*06{r}Gp0Xbhohz+!2f`JiIK7;QOw*(D- zuz@d-!0B3OQvs45p{|9vM^L$ivHjoK5T;$8fBPAj82J8YF*z`SHcyFyQo0}m*;WE_SwJv z_oq!`X78GR!W=xV0j|Tr@vQ;Q$4t<&TAg9%F3@f@a7hjG6?D!4;VWpFgb=_OL&Ye@ zpzAy!K@IBMK=-(T*Yq(mFvD&X09Ewx&i8(B=X)mu$lstMK>#{h3_3y=lnGQXfMyFt z!26{Q3>lS~m4)q?K_|7VgAR5Em2twx%zTXOqH@gQpsSz-l^K~`)51bH1O$b-MHP6w zf}&i5T%!ZMdF4d8MTGb{g2Pi?gBb1p9b)8^P!Q%~Vr5m*W@P?%hS3C!|LG{PvNCar z$V>eD4pIebgfcQ{{Qttl$#jfCmmwCEQ}h`0A!8KCbr&M2pjif-twD7^Xvr5Fcm)b* zS<_AiK5!g^sx;8D1kjDq{NS(wZ?aK02OU>t%V?qos?0#glB&T6V?d`!f_w@(shd$U ztW?d`E6X*=%_}LU-Py^?OTu0y(=RXI$5P%*LqgFmlE=-|DAmbU)Y#FpNYubeOGVSv zA|=GrpOckEOv74T&(|E(HwUi+1h3Ns?^8fsrwR26!fzPKA9~mkBG#czK(GL4F%YP6 z4!Wp8*jSL=n9*2JSTUdf87`pPW`dE^i^_ zurnwcKy!}_3{2`wprcc|L6Z}xbrFVJF{)yW$_dd*1NB`cpz|?ekQ6Eg%D2o6`x!ut zoeWIi`j(SH3_3q92)+{zGz}nZENBc%g^coy#-hqfYWj@Ig319Q)l(u{1?7aqY3FMX#(7ZjQM26*2!mTK1 z9t8)zFu0EZDvn^SC{XqRr5tw942!8Tq@AS9xb+CHgo?PRiHf|lxS}W*V^#=LVO`Fw zEEjQ6VNWspf8RntTf0Fwl7rf`pz=;0 z>^@_#d%$~%!R~>M^Fr>p7GeXfxnN)f?S5f00-voJ0dgPex?ZU5h;$F_k0AsQNe8q< z4OH1ui^En5G6;YU#0DiDCD84r z0y`KqK`Yro_tx7nflgHf9d5$M#4f5V3^`vBbkYx~#8PKuvJ1DAlCli93$cv=F(Pb3 znEYK_`~yIQEsMTys+Co$uRcpu6cU>$kR#qB$RnNuNbbmtzuFh%ySKn+w`P76cVZ8yEx`Ko^pNnu?&z3|Z@7%V-Sg zJDPzOv@0{NVU>2*vI{d258+cZ*U)uT2nk^n=H`*Ji?u&?%)nVwn1=^`XFYh%8yu$5 zyTF@Ic#-Ngj68}_o?>)u5dAtxdAWlDv^NJ-J_>>ZO;FJws4=K9=pP5PZQ2iNpF+w$ zga27f!QeGZlR?Y(QP(UHj$e$B#cW)IA{?}P5VU#;6!H9^_E|pzKP2b;hcV4|;baWPdpubf38d+{GAa0#EvdE@y#847fEU0`4wRZ1nr-K+=L7{hkz5e z4=8Y7Ovq}G+y4Irxosu7yBHW5tU+gHF&$%21C1FmfLh&1`3t&M2$A)nfeQ{PZg5Bm zGH^qe`+$yJ1+|eOcSC_v1E{sA$E0o!nwT-OWdyBY1C4?4F~Kf&7hz)*g^dp>=_!T= zJ%1h)s;H+V!Rf)P1Q|c#km&m@II3^9bx@kN^+xfEUbwIziyOr9oq!;5HrT@)lV}(ACoF4nh115;0M! zabH8~@gL7*}SJjbWTmKN7i!`d9O&rd8OWpNR~}TfAj622%b%NB$}+~)$Xvxa+1@(A zP0cmX&psr?(=ydBkb#*Y8#Lw%9-Eh9PyyZLA`QLMcL#&Czzzn`PHhk^2=_JAlZf$p z#PB?*6$M&6qXON?y@NqTAG9YIB*w-7Iobn~ww1vr`Uoq6%00-XY#K|@(wS$)lGC3!J< z<(ZIrwVi>1@h1}t11kgW@e+hTp#3{YCIyd|fX?Uyjo%0=w=)*~yBEO3;_}adfr&xv ze+iR06X+6XQPB925PZA@G#-kmKvPU=uSPE#U@tOPBM|edzcw2CYi)iy%1Uf``y?lAvoQ;LkXz$IN zH*fBhl3`_GGe7dbxP@{`V0x;Nu8CPOkBNbSnx>u#pSq^ACy%10hKic8g_om&1vd+ay`eW~RVO1u zJT&d|g8YTP*B2uXVHq%_ zH-Xk|Gp+!SC2RkMfh`q-fD`k4}0nmz9 zPzx7y=_`2niWdHkz(K+VdPDb~be|s4a>6aUH z_X`&TYM+;|TcLF`*l7%)q6y(v&{7m`=y(?=q$J`5mqbjEO37H%*c5d1h_a}1e88`O zfM4K9{`=>}3(!~#sGT4NE>nZRWojY=1LJol76yD{J&3qQxB?o4C`BlEtOuM16+tZ< zLFGioX#w8?KxYRq9)O>gWCsfs%G1nqTU zcMlVI*bLNS0bMA}2p)D9RAyw^$9QHRWd7U%zIL5Ohz->1U|?p@`ELPkBMUNEGx#!G z2F(uoG5CY?6sR@?4TFMcZ+QCwV^15j(m*&0x=#WjU=1pUtr@`kB*2l0(Wo>9sW1i2 zBZ4}bpkXPHKR}0~K=z*tGcbUgm!J`61@N>9XshN<26ymcUkwIr26wQNO$Bx`*nq`A zSJRq;H*G=NBB0ghvWy~fOybIr(Fagl&Dcl`QXAPZf-XP+jWL2wA5|7rhMoWqKW*-i zqKb;5kc8XaEBP<129a zSb|wTLTes`bH?-|w;00x6e+FLAkOnIQ=zxED23`iHSkPH!pt7D3 zbhRuvLRG;Ls0JQAg3LI8&Mle6D&uY*5*}b?YvUad@K#>lKVaK>13h_#bASIZFoISK zFex#yFmN;A9xp;T5u@zH@D-wff>cJB<3(m(?OyF(|3sKr{@F1e0^z^VyTi@?moPiXav2ST_7(MI0E04tF|jRGF%+=D3SEG-5GQ3e49QF!daCSk#4r!wfs zC{V`&c|b*U;k0Ly{9>Z~A79rsHr8!tJm9iB!q+d%MMXnPL-`=69l{KcW5}3L4`@OZ zGKL8m69Uan^9k%=z!(!kxE?wtgb;v+HKHCuZkq^$Rv3WG9bt&Cgc$@Fgu%W7)kUBI zYtSN1u&)p|A3)0^(3O40g34wA;UI6Vm;>^b52H^&022$c&lnGYQVkPBJ_Bfe1+;cs zgdqu3`$JkKppNPe24;Baj8U^9JOJveazX1&^4yyrumI%Nk555vor>yCP+J^Ymocb; z?x&ML8#BV_jvzu3bX_ATi!(6DgJ%;#Yt=we25F;%`cj}V6i6^)UE&RGnuA7Cl+Qg7 zRj|(&pw^2~A2{ZRg61Ns{GE+8J6?wp@#-U`TC9bWhXyT&omSPLqz2Rb{ zsbwIpWu?Rm8Ui=_|Ak4533R%F0Yld=2GnsQ9(Y(|6l~CeBt+_g#s(twK#LJ@e+qP4 zHYYgsuz`xc4Ge7HRtz_I7bs}Z0kq2#G(H3KJY)b#R2g=h1Z;2t^t+w})5g-#^D& z6%`o|sA$M*s6gsia9!IQYze21W+O{}$jg_*5AdfXZ++ z@PQ4mJ_0mlAV!v;i^LGYf?Q03n?%rNl>q3rM$p&-_#{4A2G9ly1?asCplNs5VI#2q zHNQS+QXW)?gU$dzoURI*Xoeg}0$*at$0Q1Bm4X(TLiPw_JCX$DP(HL{Nl?z_1078Q zYEOg5Xh7k{xERzYWGEE@r58{e517ze) zoIwG)*iu{{GD>A&2+9tyHXJ+T-X73Zx5}_7C2>ARMmvje8+lLxfOOZy18@Oh;v!-x zp2!0#06^!(!|#>gaOMS-4hCB4CN3cVf#M&u_l6C0?gQ*j2c|bdYz#i&_B-fIE+ugK z0G|yAxwGN_fAC(L<6w2Z;PF?`8Wt}m76#BQMeU&ZG1z)T&>2C9^@h+61|npjDF;!6 zK+_gj0F)v?i3M~ggdnt8tOluy)EER9)WB5{=zJ;A4bqVL3P^#X4(=+MgJ;qaH4~^m z3SEq-3cJNdl*y1!oS);Lm48Txe@hOxh>U=+o)kahOnpN`eLW{(Q_mEa&fQ^te&LLV zJiUs7Ed+%5ozyfmHPnuR{cXm;zy$I)Xzk%bP>l>*dkCtD5o-^j2>{`5j20Ml^a|{6 zaE^giDB!YGfI$davk5@TQUP#T3aW)ci*Wd$3lpUwVI$2Tz#t6{8_>dINKGRH4iRB+ z=MjEMk*Tt%G9o0*ycT;wf?=^2V=CDHOe{BVf<6E8CCt}@eyzy zSp~@>pmCG`u<;abAvMT&3WGCL9DHUzXq*MqM-yOU)&^xM21bU&|0UqQDmOzIXu%Qr zeQH>f6?E1BXb2NTbAnc(L#8^FMU_pJ69c{lEc09rY5D*C)6)ZT1T%QwDroPpFoObv zE@iU4rv5u6sAg5jXa?J(3f@2rx|qu_ract2O%=RzSQ5PIn9)-J zwnvqL8GQee7!#-|C&Qo&@uLcO85iRAX~@lvpn(af9}y`R)sLWxOabmk1?YG>#E-Jz zG>7R&Gh0SQQ4uj=B{oq-6E#L1*w#}R?Hu&)T9C7I5TjNQ4{YD5nmeQ=;~Egc#ugI5 zI4K|`BmlPNkU4;Xoxu?_RfRg90Cg%NexSt$5{lB2)aNs(CX#!q55aC0d9qo*op5P(-o(umR7#JCh85o#k!E3$pK?6XjYrUWy zAcQ}lkplJyqX4K230mgD16of4ZgKH|3WE6zJPhj@cwoCtc)%+ZAa|C5HYR}9L4xl` z6;u>e1l5?}+H)Fc<>j$sA<2vr7_~efI)Kj!fv(8`ovpwNIsuM{(AkX0qp_gV;vu6P zObooxLYxWYzV{4F4F4IJK<;B@$Y)?;sE2X%8JHOC!5q-SO;GI*I{6shi@#uCXs&E( zYzlR^sPfF*T+jr_!Gi(!?Vh_VwgWBq0NoAvKZZ$$X%~YMLo=v6f#0j91ltn<9Wg|N zE28n{2-*{&1l|*&1i!3OKmbz7fLb5?;3dyH7$iUiGCzX^s9(>_P!D0SGUzi%FxWFl zfJb6 zFaWO*`FD|Nm*)@2s*#9_98kX`4}69l=(3&;&`coeya}`#L8MRQxB*u*&;c$1Sknwr zVSt(_pnkC+cr_1bO3)D$OJWT5pmlb!jvz0JG1!ASI~h2@gHoWabR6I@3|8>+SkSCD zn=GTUAo%6$lL->WjLm7;2-ykC!VjAX3dM!c@x`{5P@(R^; z%ZDbF8@lR%?!abX{Qu*B7E=uq=vcGQp!LN%47x~j_RvumL|j7qUkCx{WDi0B+MfaE zB5+7Rrx_3e(2NJJgF!bfi-2<%J1ENcGq6LVydTT}by6X%5YP&MT@0Xk7csDEsSBWm zV$9Hu?4aBVD*GWv|7km1~aw9?kb+Z(ik7K{n3wLJjMOQ1Q$P$m`z6^28guvcYJLkfFnK0>51 zXk;J+ppk(PAU*5_z@Z5a`wgHVFGK{n5IFVmGO#lUffb2e0Bw9>1`nx%0vfbv4pfSO zj$&5116q?0nvyfcGiPTks?5Z%=MdqAeb!FZ%(bT~zstdx|2SMao%mzFZtm`uJ8UhvspE8cmE0w*O1ObCkLu{|Z9eOR&BW z5p$G+@HtA*S{gp^00HtGr66q7L|_MlHq^g5F#m$je3%E8$!V~324U!3pjs+PeK4SF~KJZz;;}K zN`V~=9CtwH3_;difF>^#E`Yk#T;SC>pv5ncB}bs*Z3lxAsB;5ddj%R^hQ%i{xJCd+ zw5ak4i;xftC;h(2dVU2VZXtdF&QS2m_cVPcP)z`e+F7$0P5!-Alw)RP;uMk*I{{h& zKMOo35)K_NS74Y23J=sa1~fbnQ3?$YgaAf(K+n0s79JZw8&3*B8|px1HhM6~L4!dK z9DtJ0lMNxkpl}D&GK9oEC>T)V9~umI%>n|<>@-?~D+EDv<$V5DR#NIB(HeFyK*^x2 z?8aef_#w7 zfXpF)^0Wj46SR#0Zc_F`T9Tk$4xqLrtc}mjzye)(4BAEjT6YNEb!UuYpTnXBUs5|F zD+Ogm#bgD89PMTGh2m2~mpL_}0TJ%JFw=-43In4k$IUg!uKH>6&LZr-3)aio^U3`%^N^Yg@-f5so=Z; z8q`x1RR*0MC8}%|u$7T@Yrs};=(_xK00%B3gWLZsCMl+4462az&Zy)080jABaBvC5 zCa{wMwBQv|$%2--f>^NYsCF=@-Z3y_)nhb8-WJaWTI_0U1Ua3VT~wJ-CO5OT!NAQ3 zvL#+uAviEFSV0%GVV*};%RFXM?eSK^&CJAN7y~}OuK~G7(gc{GBP;)w_uV0 z&)LU<`c$anozSi)BJDt%NeBUGmP9N&LH04|n0e4(B`4@?ab{zAMq_(MV`fohMwTOi zUI8otUj9b{m{?9dcyQ|PpA!s>4B)dM!F#SUKyE?Za|Lw^BCA2&f)Id?GJvadP`2O$ z*Uq3LtPlj77mivZjno9}`kSS;AA|K2Dt)GL=z?amBXz^SAwr zaJX~{d^jZ{%mf*VLFt z7=S{OA9MhJ*-{Lf;FWdf}b*a#{(Av>30X%<>Q zA%YQF>>>o90nKL@2`z`AQ2`EU7SMJW@L|rNdyCn@EDi=92FN`p90EHSK(}&%>Kh?& z4*^u)h(dY@(8E0bgU|4A1Z{Q(i-39vq73<0>+yl%EMXxrH#P7}6jRtN`FfcNBL)TeQ#{gh6X4Q zM8O3(C?X}mV>qT@&!Mi90>$OW7*-iK3)oVrP*3EwQqc83jGz*ji2;0nayw`S4K*Gy z>O<({93o<&3u(aFkeh*xK@?oxftwcKYC0CQ#t+n@05yVm?tq#_pxaN_v8>ZyW<|S5 zn`6hq0@+urVB+Qi?Hptj=HOxKhO~2`YuF?hCV&PN2*elEJBav#j@N&OQh zw&!Qy1Fd5L4cmjxEaL+wTF3xD0|OtlvkoftK?4$OcR-`bI~e$(v>ng0`PC&SDkPleAkG5ND@l5)kl4RE8}kZ2q?O5v&s?u*yk;7P^7`20C{FG_Ehf zPz%a~sD6W1f{3U>cm-O7BHCP_86yU0cZv<SpgSP3 zoc9BoR}Ta4w{HW@tui}p{fJn% z0c}En#~vXyAE;T$49;kv`VW*wL32b%m+~nFY}vxNV+-i&BBmG@m%mFOcNT%qFaf!f zK?Up{m^(r1k<~!%1g)?E&Gkah8ilB@gP%t+2A@d^URS&v%m?i;2cJs-y4^~EjoBG`UKVJ5gDBX3@cI^JZRole_?~!12e5vy zI*@scfnYu)-0OtY7$M;fb01`n$`v6sNVqe=?t9k&okPJ4Qr`}8H?z%0Nc=+fZ-CT8 z&Q8tz1Q7?v6LYqZ8uUCH*je-O;C&GX;dAB%&^dF6dXV{$a~ELlfv5+W58kuDkO@@} z_8-VS&^vEn>OtWv1`c2F9XW9KgVlrfSO_k!p0 z!FLRU&kAP%olpsiM~Hfmdm-v!_CwTP5mJN9{lo2tsNVuV#|L)SJy<<6=&XCN`H(w$ z{{M%R-yr`nPKSgy;+!DHS0Mi}ZU>1oz``56pBk)wHb|Tq<{nW04ZOaEaW_aD;vNQ8 zhKT?DOj69+4AKnp4C)Np48{ywK`Z4<7(k1zcQAlm1cz;M+ z73369&Xoh_Ty^M0KRS>WtFj>YmQwJNQ`i|L+KkMm%A&@QRWQoTpi`-!Y(_V`4IAt@ zqS71;rSz19WsF@lBy8hnTiV!I+QiSccXYHbEM(eMSeO*#>@L8}A*F7jtmS1U&)D_y zrM`itf#KgPj12!7Ow4plO+o1Zawh#&AvFfbne?!8o51-9v}S|>d?q~uth_*154-ye zT|MZoJ%st7as*;NEMCFtLFoW$J~*E;Ff!Qx|H1^?|1HN*02;uT2M?#h+A$b)2ee^> zXnsRyGr$6{g|BOK}jpz6i{e_>KXQg4EyUIT7^AXGi5 z{80ntSBU$WO;OZ??#h6;KNv-Q4ctBEF!iAD0pD=|Qm+QO6F~qJ8amK=6cSFLyADA9 zR$~nL06PCO8>AZ%UM%`>_qn6k*9x~!7o_9=e+F>)BB}Slp_4#o!Sy4=|6yqUkNO`1x>H0*4P38+ zLe3DZ&-s4{=nixtHPEgtaEL0LF;XhdQ)(EgqZJ#WWEtNeSy@2(j&xtT?Pgw4kYyfQ1x1% z{r^bnO&B5SLFP-cfYKwx{6MIBQ2Rg(oE{b zPjGq!saIomV1=YNLuh)0gexqZ)EGmUAo8H=zCh(&2m=EX3s^ts-d<4nLh?IgohC>h zXq_e~d?D*ML;i;_v4G15uzGm;ko7-=Nr~x=kQ!*6Cpi8f>Mj08@=@c~xPYy?f$ zpmvo4l6qKq0umQPQf~rP4>Df?9Dfk=k;@ZE{6Wk&MNtomKZttd@{7E`2ILXP)=lnpP3IT?_@yrA)_<69RjQ0(AC50PjvOp z(DVaQzg$QSY(64=fYpQI18hEOe5iubHCR0xvnA9Vh9^`H1iYs|UG<5oA6nJdxc4YWITFBf=A+9u%G+^=!;qaPvc$BEaDZQjZcopnEBV z)S%{PL;VXLrv>>J)B+Y@V}`jO(oW`vx2s|4LGXVFlRG&4L3j2b%m=Fnhd-!Y4H7>C zE{`GRgUWBPdU*Il)Pu?wi24+0et@V4mER!sh&$^c>Tkf@!x#lhKMafvHjLa%GK`@N z%nah7wQ4Nj`Fn=l4B(kZ2GDu)!lsI%HjED#xxKs?7#SECxtSus>UmLA37RU3GDUzD zfyV?6GoELx1m86vhh#3a#}94S$=O937&00&D>Iron>I2%`S%*+C`N|+jOQ7r!t^pR zK;48(uSjFDGeYl~|HX_=3>^&245FYxJA__+&|Sg?hN>Xz7#oY7JN~@}mES>(=NZ2< zJrPo4s_ADCU}LJOV*rPH9^-i?VX$~DSiBY{{=b+>n4v>Rjj3)Cg8(~I9m7Phf8G9D zFbOe%`uR~H|MGxW>A~8u&{;}EKOfo=L5%M}Lj*kR4eB_6cBw$RA)szQXpD{Pf`K8c zAZVE-_}Vo=M$W^B-3}i|$KTxQu}p6lb6@D}K=2C}=u?fq_}u zz)%(C>~TgNXLECBXLIviHaapoHedpjZa{mB|1jw=)HCpcZ}~|9t^S9d2M1dH&ka4J zNglpl92)B2-UE0c31Zp=n%bai6d@|WXQzXX*#Ipp1WmYs?;x;c1kJR87E-bqqc{|m zmkqtAVICUIA}b~|c(SC4WV~nQCfp$a7L3TrfgFzo8pbruNrDZnoffY5N zU2+nT^EW^XVL-!gpw$5?3=sKR(CIA_uKps!*Z3>mH8M^6~emH zO5o|wZbvUqClFRrRaH__Rn=iUB=XO0xxJ^Sy|X&2stbtWqRJ*@Di2lg1xhnc@b!a0 zBV82(6lhfAKzmb|+?YVa_3WUTSyl$fDtt(O#n`)v7!5&8@IdrJE{$Z? z2Negf8`xR&Aw@Pjs2u(0vA|=E#{v(gUH`5m{ky`zz|1h4(V1~C(*bZ=Rfp_lfbBej zP23@FD91>N&4O%KGJgTxMWP0t=LQ}3iW>Lk zC|QwF$J@=#8-%r$m9;@wkcUT5kcWrSIXNaeIXOBe+1Sd^(a;J^Eei67{TET+VUt2b`@wFq%b(^g3cF{ zg1AH(a=sKOoIwW`KyLX34VHjU+%-35oWGfyg-=Dv#Le5q)K*BBUrkv}O-)Top4)`) z2~$U_n6#~#g`0+yl9-H&0;__G5I6fdaM&(nbY|Sm1X{+W3fjfXzyMhZfxK%PT2WyO zSJ0X}P)G_fa6qRGg!DnXdqHBL$twx);&(<+QDVnrZp_EbE)HJxE-J!?np_z5oV}#9 zj3q;q%`~LhS$MV8j9q*klr=S#l{GaPoqe4(+^qHa#kF({ zFoDsN(cY!Z=Gz(IxA?&(u2kTqJakqCo1HruRKPJU z#lXv;0*+}=j?xB;u`@`4$2ma>3Bm#$a}EhpSbl?^rv@o_p+jiup!1iNm1G%3#GwP1 zkW!aX$IVMuSx(i(-rhx3PDRJd&DGV_RZU%8O-)^$(b-l{MVFI>OItzP#6(*`n~Q~0 zS4GeEjtQrU38%>#IcXkgIWPfED{~n=8MiSVU=U|e1(htK@U$X|vdbPid4}*gw3q>> zcu@g}UqBX--A|lOE7@a3=e|@SPXRg8y^$9vK_OzI%vigTFS7adTpDOrm1Xsekx`#3sz^+FR3lL1na5mT@;wQ%(q8xO#g{e7s_mCR6{DbUl7GdLOG-llP??aQUqN0MbGKU$PsG^>n zos+3n;#tc~2?HrMDS0Ic5g`Rhep>?_M+I*NMuzGCe=)9OEN9SSNCCB1QSVBDHb)U| zMP9Y6!N3Pz=)QwN12k3Yz@Whpz@WjvR0Nvp26=-|U?&4RxNw&i09~j8sxYCuOChdi zM9IM@<+?VbDWjB{slQS_)W?*1E0!|Nj>rQA1iSQ{Rbwlb-&{cOk7*Oj@ zh!}F+3Az^mQg&=VJv5mWKhRdcOvEqp>-!VJ0WGnE(Q$-UTFEC0d0+f z`l}iYir`gW!VC}=r0Du1!poyg~Pn!{^S%(@d=Z>qVvy0T%fIt{?pC74(PsYN0A za4xh=B(Cm6_#9eyf;+&-b*DVEe!*6Es)|rpcRnXjbuutBxIyQGH5iN-EE%?gQoj|0 zHMly5ZNV~ww}qff*$^!PL@wCD0J;{9UtlK#=uS^i_lyC2-3MfGq&~Rg%FVzJzQ$q) z1L)8T-a9)OgfD|!uwfXSIb)f*VH zs;RRpn}ZkY+A|ungVws58?(zXinHr6sx#X$g08p%E%?)7WM>u=7uI8B77-WbV-#i7 zP>|%YwOkdBWQXk6vO4hB_$9Sop8qN)I>feM;f2OYi-I`dZ+y4-Fjg8_J(z9yro z9V2MVu^ywkvZ*mB{E!w3vx$m`fffi z742obEuDN>S?--;=V98qjYD68u_2SsOvO=5L&Q-?T~yD{Lf+n3S5w!?S42h7QA9(` zQO{0*6;z%`GcYjOGJ%$=$ulT390sL7$ogl{ZQ7v30~#NKg%8F$MCb-hM1UbLL;$z$ z5HB`XvY#{9Rp|+rZRXL7Rt2w14Rdqa6bigW>-#OukIJ7%Ul_ z85Zqguw`&za0Ta5TY()6h#U${Fo*y_&Y|D{F$VQxjUi)F&Y*#4uqn>^I~gp%nUsUU znZW`qW-I_1r2<6`BZD(oOj;k*0s@U!i7+UE7i#Qc09}U81C|A?W^@9lEMw?(Xzb$P zeT<;fpY$0)=?m0w2IWd+B{tB3FY=6_n;k$42SC@C2t)b>+Ki%xjWGdwW)XtAYAPD+ zd?LKU3R?Eok_O@mymEq)Qf#~;{QLs4qCCEVR>2anI$Fkhdd6BzyAq>ZA_Om}t0*e+ zi3$tz3M<%Z89MO`nsM<+OK=Mdi-9yLs7l&+>RCViw~w*IKu=H4;1vTX9fIzD0NwQf zS{DOOhmz2B_&XRR1$HpVUVzZxJ21fEh|!zINSuhI2OR{3uA1eui`>n?%D}?F1Wt>P zol>A|3TkzM7KlRj#(~loC_RD(he7L|LE{>rbO~y^i$c>QC>?^1i3X)ZIe{GvpxZO# z1wdH_v|-HD7?i8kjl~tsjoFPwmBCnh%D0WQ#b=L4XQQ0z_y zHL&+|1$Hv%fmtkf9N8JxGq5o1XJBDC&%naK91AKK)xaZPpgZ?K84$F56|_Nj2LtG! zPf&^g)v6K~KqGw8V3nW|J_AGOv5S!LJ#lEU1S*aMmDP>lXOMx1cG*o8MHy$ah`Aeu zCM1L!xr?#Poay80>QgGAr64SWMeSs)@;yLVNhcew4(^z2sZDu1G^1iHsthWmAe(v^of~SQJ9^wWB^31)JOa3%Jb(U#JHSH$bP=W-uac1)59qD} z(54;*2~BySxIot!*T6U-c})ogSu-6e@I00b=>9$?(CAMi=)ybHIV23fV`LF%IS$SM zXgOjR12bsdF1WyD)`x5^+`#}^Wd|8Xg{+(dO<#aoOu`oo42?lssK9&cgpHYvMU_Ff zmhA}f@CY%x8h_))#fNEkEEwHg8TI~M0%6yGI~m=(0b3vsW3pja$B1#-w*?=xz7YDcWLD#55SZoZe z-~$do{QwT=UIEaQ8RR@HP-y@;7J-X_6WT{azoQi*zKcPG0iqw&#)Oz@V5lmpY|3tG z4#wc4c16ua*+tDo8N)++dU|?ZFsZ)i>FK$7bEBiHW3;2I<84pR%@8IiO|vk7;uTa+ z$T6reXfWt8&fmqL2|Wp62ZJWGrU22(7a)8@ZwPNBgBIPXfWw4?K?Qmv9S10#-)G=p zcn`WNIo6SrVLt;0!+8b{2ACjAp(8s(0|N)c1O^U<1q>Vv%%BYi2@D(z1t2Yjpn(ex zP==5Poh$*~jl~W%oJAjO9;AG^&%na)o`HpdrO=TReA7H=nWjDi3xhpKFxHWs0jAhTPE42&R`>}SwpIM1NRaGwDp%L2Mqx&b5`yORO3CKR+I z22}fj>;bJ01=*u<0g?xF;b|Yz76Tm`EUGLfA}YfOstQ2|cnd1(F={iinktHl8=09a ziY^T@H#ax`=ocaAY{|%I=`0xGH=mK4(@cLZBmcjTbM?(Q|9xc)bqsKv?C0vpCCtq& z%;o6n$C#|9^)Mu)S4%Ab)RwUL-_OLutj(arpvPd&Fdx*Nv0$(SdsbFp2ZQPb$ZfUy z@OlHIJb)gi0nYxQvQQOV0x~ejLXWcowGFuLfQ;G6pbwVgVPFIItw3pA70NPUfZYLT zq7OPo0JLudhLCQPu@$2@sLR9*YMiMv8^exNW>*$ggC4;wCeH|J zpDDA;F<$cZt*vM0WfQU&kR$I1dUxNS_qe4}b;_qU=G`9lII07(h2ffcr_{3tkHySs6eVyaq6EF)$TE zPVfSiC63JC%Q3+hldp$ej@bZWfKu575F-|}$pcnnBTg!jWDo=QP9gnRP;`Q(#X+eK z)OXN=_8oM=dti1l7=z=-jDZu}T!x*0Xa?$bnVTw_D%vrcg3l9TR|ie0fX+)}1Eo%O zQAJTjK1NXy&{4_ephFQ2^u0}FxH;k`PWX49F`t9o&O*&y-c&o?OxxW^hJ!6}$^=H0 ze-pWRoNP3GwTv|jcw`KnHKf%A9K)F%d8CER%;l5~^)w`O?bOBOc|n5wD&kfS%G$;T z;6-{&@UZ|@27S=UQX&in42IxTDc-DAgZXZ1WK7oMs5buBEt4gc;x<#Ptc6Ne#pkH<}aDcnvETGAGQ$7)sU-<|CmZ$ zUFZMPV!Y<+%D~8A!N9WY za579_;AB|9z{$W|2yzXm@4*aGlK?7|L8<=$h!G2#PXo#EA@ztsJz-FpD|rFr9A@z8 z&<2Kz%*v+5MrNSo3@T5-_o2gw4TKpd->Y3??)vWrqbjSj;TpzI`$beZ>nd0S+#WM3 zyP8?JYU{hYvT|yuxH`r0{ks9q|1f{cgU+^>V^9Dm5?KDn=zBpYXTfa`@IohW+k=Mz zw38In_CWNpK%pW4u4h4`)}ZNUPYqTF@`oj*hN7J+te6* zh}i7p>zDZ+oa~XmqG+=v76VFjI&8V14kM z9xR=L&iSndo!$ePy@qrSB;e^3I`EE2r^u}~P@j|o+$Tk})fg^->T*!Z1*HT~%!3ZA z1@%cm$3}w2JV3QNXyjf2-0?R@41Pd|0JIrJjYZX=Ye=*iuY?2#2M0e%OiNGffBblY zskOD~gtoRe*JxKp|D1$`jA+-VCI)r}CJfBry(;p|+6?jxnheIE8_*RQVEa@+_fdkJ z2BNj$zJq2ugzuo!A&^`M?K6YMDM9ro@&PO$e}RU~K>pSOmtG1CY~b$74hGQKkH+8> zBf@~ZHwDz{0M*T!V1FxuhRmTmQcR6S!~HJ^XEEBl+NGq}x!O5+ zSR2`TNoZTE*iD`Y3XqBOtsEV#=0i556qfTvyV|)6GV}R)sJoadu@*D_(Kk>xF#LPX z)J)S9ynq^1c7I{~$Mk_gnL!UUrz;3=lY-8vMa*VHJJyIEDx&6u^sOOnP;t<1H*nF< zAOP!cYA^_b=gB}dn3^pkA0w#3G8Z%fj~Ie3M}k*X%*>!UYskDFqhml2pESRsn4YMp zy1AmOM^2iqmX5iM6_296jgh>%ldB3(ypII8Ag39hj3A?inYX@ZSYYznC|wtG3u9$j zV^uMxou+Poom-p*jlqj`Ss1h#7?^yS4l%GZh%zWMsDo}*5@3L>jsabW0=f(ZM1zh& z0MQ8lW2`NKF6Toe8R%RgLI7IWfYT7T)P;s2xUf-WU}jJOXBp6_D`bFT2LothEGTP; z+yRYXf|_2Sc|_2H6j|^T2BVUxiLsHW2&15}G$W{E1|Ap$x30iV0a->7F?Lg9QO1Wk zIXQpt)f=m^xqt}9A{ike8CgL=?+c8PTeoc4`foYYu78XF{bfq{>&6(%$ozK!W51rZ zx3(Ub=(hx|dS+q}U|h^3#{??BBtUn_almg}1SNY`cOBi;Jd(JqT-X zbYyn4Ghk%#_h(^bT>Mf`?1jwGYV+`61aiB#ysOKbN^sb=S znIPf~I=T)P&<3A<2`bV+ol#+Mw-nR`gBD`Orh1H!GpZr&G0<>{Dd_eeSoFv-iHj~r8kb83r;eSM zT6TP9W_-4qmz@r02Iyp@|6iEwn2s^XF{m@-gDMeNItEp`%J8^>ZuUjQ4K$g8S1m9z zaDCauAjcp9Jt093e9Ik3jDvw0e84&62p7oFQW63?8I&2gz8DySS06!!J(QL7nBX2( zR5b;i%gx3vI#I&kM9t1nLqJnV&&Eg3F4aR_-6PcwME?tBG?Vf(HujUsmD3ebF_IHk zwA7I_PiXP;Ye_H%(HdvvH8thWLe>EbF))DE(g~?Ei~rANU=UDa>ICiBVOD3D23{wO zOI{Nu|Nj?O{mLlv2ZYp_B~Z*qmEVP7zbXO!nDUY+=ELOq;qH^dDlY_=NA zNu%h;ltMx!u;^GrGhVOq>=E^N$NVFu^H z`8k$>f$=xfF$O*ceNf7Wnh6~rgeGuAif0FnrLu#@QVk3l+4ULO#X&b)sq-_cn=}4K zHk!XRA*N-RTMYZ zXEYaQECYK0bWSkD1AWMLK-~ZT3*&DlkkhfaAEPY-^$;IuvA#W{Jfpd~ps^skxILpd zdn~fihrzCAeEUxr=6aC(85sJQBA9d-BthXX4m*nwG`_}!68^>z*Rz8?qYR0P^I#K~ zL5xG;KqCbbC+ESgfUuGLcZ@+26hD$MJE8G|G2MYU`3|(A7VJNBaO{XfA`9885KE9P zg!)n?(i!-)J+PVPrpDst>Wt=$;^yk6#)3ak zOh^S;0CqIUmH%#o;{nC*ya+S78JHOOz-9^?i?WNGGm0~^i<=vZDq5qN!q^3}1Z*tW znc)2F%jCk8$DjmCPYMjsb0BwvPFO)rPoU`)(BaOeMxd$?bjC3xQ9TAHs!k~b6)`at z11T*pOGQOXFRe~Ulrg>rCni1_U3qz389o?cTm zgjYy*K^YscY!$sZoei20}~q)=saT$ zPzFZ5lMm7415MO1frgY21sv$)G)NHq0GAMqtS$#3B?Qwhu%&-LGoFOo1DZnuovA9o zpaI%Tg4-TWctOMn$-AJVw4q*209$m>g^?9v5u*&)qJQR0yikk4=>)Hzpv9*QWbzT! zPoO3!wAhCD>7dKM-%zXOfvsXZ`S&x_Dn{_U7*0PS+k^0vBG^xgphJ34{PgcPEbzeA zF!BB~hg!qH$iTv&$>hz{$DjgAqlygBvzd1@fYQALIE_HcQCPzTep(4=R0vYsuz-z~ zHt{vm^){1p5mhmgRW()QhuHB0oPrkXg*vFooBJ7Xb1Ryvi^}TTC@g{`VoJw}GFzyqZI(-eQCsq`+;&T?_`G5h#A>93*Tk1loZ^)RWLbA#gJn)O%xOVEO_Y zsRZ50!t@0+zQzbX9AF27K4=dDxYPtq!t*gf@|qcFuo0Bgz#|eSdQ70IR#aJ#$)wnp zQA65PQ%c=E)y^ixOEcO_&B;~H+(%E}$5d8GK}TAfnbn19mkTSiqL`U`jJ0cVu%32c zp?l(NT|=$vV9RI+B{i35GhGiWLva;G%MwNf&=?yd1B(9?(EJD8Lxb=i^jLSW|3KSa z^uYcD-8sn50P-IrgC2M^X9oi#$baAxoR1mdA@HSBkl}4en-^5=E1N1Zy11}1YfI}W z2+5lI=e^FwQEmWK$sLBsF))G8j1dEm{b_^x^l}W49uH{A>Rq&=H$U1FE{Db@R;^unH>c(=+%%Bl}Sf@vfNld{e z)YKx^&Sk2wj$Ka;4OsQ3|tJ%+K`jBK-YSL<``HmfC33LDhHa=0gW$%PF^)I zWK}d}G-U)`AR#QutjHw%Plu8F-&e*f|Jr{4W~@5l%~-<1SmN#ZZ?PHpoF)cF20KQ6 zCMm{X2F!h{91INL@(r|a)sFEFBfpCa10#b30|S!{6X@L0AW*oW?$3mV3Sv7Z#s~tm zv;v14WaI$U2M3K7u-!2*GzJYLiwlDWMVSBAr!Cg?WerUBJIi>)Vd=joj53VTf89Xy zYupTVOumdy7$h0g7>pSTL5GjQ#s$ToGq51q@B+hb&^=V(HD9|K7#KJhq`*TpQUW^| z)GvVg#0ucvaqSKUPJIbbh=T6T1r6DNRwnLXP!QO`pmzaeycC0;ppaz^=(Y$614DDz z4ghiRFHKVAqpa`2bqw*DV>rEis!t}|+$@MS4i4(Z2GGXXu zQenI)q{fiQkRrgwkjO9(><&8y4<;!l83tiU{RCa>up6||4jT5%;C>>DHt2529Soph zBhY*;=N-rfP|$`_(1HUIq{!ZB-n88P9iyTI1atmfYJH&iO_?!@EX%;uU+=7m^gNJB9 z_lOu6nyZ?snu5$%6jcmmO#U~QaUIC~e?cdq#+$l;`ZHP#4B&J4SsAz)+(B6llFJ}P z0K)yyp?gHli0}|3oI$(bKv|0$d{(Nku`si`FtakVFeA&YTY!SMq0MYA z%_z<+%+Aedbmolxo?Z4}(wtF)QAOk5M@D{)e>eW!(E!cDgVUT8Ln@OsQy7B)sBOr^ z0Bu)8#v|Av<(4_94+@%+g7&iKg4<#LE-;ornqG`1;P&4Ymwzvi+FA_FOx8>#5OaC4 znF}3zP&8FEh4gQktRV*XFd9G&UJ5q&-wT&3P=gs6WEoPK>|pLiG8fd};Y4yT_|hUs zyHOTwEMv*P3s7Sr?q!sK8_NJPx0%Tf=3b<5K$r`0FK9Md5aM3O-4KHf{`Ei&hPd~N z3!?BhWbkDOWC&%5WQb)*WJqPmWXNSG zWGH2*WT<6mWN2mRWawp>$S{>*2E!7D4Geo2PBBUDV(4Qy&2R=hq0lF=gQ4%j4hB#a z24aIoi9s}I0UL-0EwKgBpwq`dG-w?Shz3okgJ}B;I~YK;E0lJF(!NmI4@w6?=}0IY z1Eu4kbPAMChtj!FIv+}xL+KhQ-2$aMp>#Kto&cq%Lg^V$dJ&Xf0j0M<>Ae>ib}<}b zn8CoT4VrJ9!Egk;{z-rV#*&A#6yPj1I7=PQa)q9g0mu_tQ`z91a>ea zU4YPO7j`jZL1lI^WW!l)a8^5<)eUF$!dZQA)&w|f5}Y*|&N={Roq)2yClcs0ii0Xp zMNpk;&&bXPUXL!SY--G|q^54n$H;6XCa!G92(NQRML?^CO~Gdch>EZ=gO*sE8;hz! zX?AnadF;mGpy?CP@o=o5`w~n+6Oio6Ailb(u_#CmM1wGhZEno2tj}mHZfI`I&uGl9 zEN;xs3^O0Jn+v=I1F}d%9K4GWyi!9Fh zYOJz%rc9YK#Y;q)vw>4t1VY*I2@CV_2@5Ad>539|BlePiH!|3K*fQGLV(!JTwa4bg z{<{&I7rQ@<%`3(N1nz+d3kf@R14%Xmc6I|cXB9RHHXb%rQ2_x_5Y{tLRyF|P=RyHS zMgc-#vPsKBQq)sd*Hcu|V}ZCxUy!h@xPpSXtZ-1DhlS659&7Ibkd^Zyj4P=-0ooeazjf(-HuS`0fFSU`v7@-wi2&t2taVEeLz0W`x4 zTF?br_6$03RuWXlsGEy3qijk?Js*O{Fx2g)yp)u@yp+^(D9v<2e3jC_cTysJB2s7s z0|Sw60X4nR-NI}x&d-R)EoE+@hT%{*z}&)|uCz+L7|j)6F1T%>#=yYD%k+jph(Up& z7u2eQ&EtdS6UE?d3+M#Cs1?TtN@<{jSD+p?23KCSdjtuonisu)PS`TB+=^fff}C4~I_W6dY6 zF11TaU79b{Ey67n)IJ3HQwQu%c?Ls_g~=L7n0P_LgqgwlzYdcjlK}W+8Gq1yatsUs41wTQk12F++!r1)(Aj82 zKtShD5CYKVJoqdl(0xFl>m7D6C^ImCm(J~APzDv40u0Iwj75&D3<(U%3Gx`7tg&S!9ASkK_bz*OkS%y5Ch4P3&4mW}RUP!`z906JA>2Losx+yuHxp~1x>8f32Sq%XzeAYv*DVlXi=aq^4sit~Hh`*}0&v(S^( zGdI_h)wB3_U0zkxP{|N{fHeC3x80%%l#Gb3o3fCvL< z+yxX+is02kvJ70{1!|yKco<8IK?J&+5#$8W4U3?aGq4m1nM`4ZEnsBSV}zzpHFZWg zMl3hu+NcUKF)=C%I-6*Lng8w!I%8ao%hai86J}B*sL0P~qigv0fTB&PDTw#)h%RW2 z=l}n(dw_-5K<6ie&Km}mSIpc(YE17T=gED6%-4ga8U6O6!9x? zb28!LA)s;sDh@i2O&&a!05Kn7uQOadsQmm3SD(U&q#kr0GsIqo0+4!ed27hT$0Wd@ z%3#hg2ee%jw$fTnUsAq3w$;gXTMyu*h(`a3T+7$X%Ti&0Vz#E z2}UkZVTD|P!{c2I8qREt5uosdi|>JnGwUFWgU&65gg;{xvN&@qR6RShEWDgF`q^x*owF#cq&f}5w0B3=j=H$aFpDTB_-1iK4#J}NA|fYKc-9jP&f ze1V)dDi5l@{{Lr?2B-T@xOpZ>=COm$jf9$KiV$b~$y@_hZw?pNf%@|UDF1-`3H2YS zegxSM5l7?`ka`XwH71C75Ih_~>Tkit!$INYS55Atc?WP z@C91y2BJYN7Z5E7FU6qg6_Lc*K#eFi27~~#5rs(N&@>OOdm(#uz^%bMph6P7+fG>= zG*<{3BxE)hXIC{BXU_}>2zVA?Zha&))H92bDbzEIiRJH~7N(BBt4y4jHCHLmmsq7d z9~>sJ|1B7Qg321k08m&ll*WJ}gONez{}(13rVk934D&$SyHVHrLmNhjb{*8w2wxb2 zyk&^wEsTwqmLL_Dprs?AficKv-wp;t_yTEZ@VOqKJS@Us$e;vnR%pVH1pzg-Ky@Un z2@I+N#bg=5J6Of!89_B6s7nfIcbJ))sOdB6F`Js0nS;BGqJqk4US86sJ_ZSC`Zf-l zDiZF_(Shdv3dZ6#s=E5pnvyc68j?|dR`xaij0ap;LHC*0W!kFgs>tzhh&$T*daG#Y zDM+bl$r$i*aEizqsJeMEaRmCz{rdrQ?qcZwFHElBb2C3PFbJqK+x?FOudA|SSOE@m zum4{dAAsd`L1E5p$BR_HgYE?YrE^%m2c0Vp;tQ}bAj)r0eq?~Adp2fmaJpn>SizXe zxB-4XSre!})qrmJ2Q8!pB^$!$lZg;IpUe?-6NeONGY~7odj=_n{|r)~EkdB(M^X&( zAWk9aN0_~E%3LkVuC(Iqt zt{%c2(8>+$4pE3r7eLPE10QV(+2sN{;s&&5jvaggn1P|NIqWnI&_Z9x5jXsd#-hrb z3(cgZq~y6wxou4?ElpK@w|rw<8l|nzDl9E4C8lI-siEZ{YYlbha>i7~#Y_hnv=}Nt zjU#Oa9i%;=(B1*UozNl+>`sV#_&_&;fSa;>pysYWXj=}b85;m%6ge_87=Rf&83e)J z0v#p;If6=s0dl=A_^>T#-n3;jQPXAw?Nk7+cGM%GrBMC3)0uOWiDb|ZGGjwfkVNnRp7Dn zO^m6GYryB+1%uYUKt>o~u7d7iMz{(yPNW%xq1WMnjspO>4Ya!%vdkGhxIvq2)j?x& zh|_x*wTvwIba@qJ<&{-r#AP^4c`q#BWaU;+(6e)4Ox2QB5|dMsW|oo@;^f$CTq-7I zW@PLH4%fAeso=Z^I(r5GIX&224@nr5pK+&a<07u2BNnb;tR}_A#;vKWYwc<+tD+(+ ztD?e~>S3eeV5-F@rlFxD$ta>=VPNcJATP}=Ee|F@Yf3gTW-~4apK)goT9l1?#vR5A zb?8u!2yiWmaa)YBc{^=fKqFP-6D)IRi5TD6Ce4&$v@( zFom3PXU1R-&PYGQ zIqD9y(1ab;!`JQocwngpl9HHVi6>jz*BF{+pvh<%IMsj&@HrJL{{Ld!z!*x>S$ATf zqyz5LK=U$qN)p>ycaZZc$vNu|RH1?}s6qu{Xr;zYM02pmql@IIF{!kufT%se>1bLAxQ4 zqq0EbfQ;GVihRNnd;-#ZihQ~X$Q-5&es(S{K3)wGMK}Z0rfg*jX1okK=#@bM)E7tG z9}Ma>LEH{nF31Ww>>ISfMUK(f$PBdmgpZL?$Jjwa#zTW!frm$dTf;*}!htDR*T7Od zi-n1aB}?4WKo^t`b}*SSE@0jRS}Vw)%8&+Hz5qKZ6Erglo2>=!Hb$Dw1s}8kn$~q> zW&oWj0uD}p@I)^-q(M?U807Cjx;c>LVW7+jDq;)_L1(iwBkxWV;bTH=PcfQndfQ}5 zXv+%;$!kl%Xi$4wT3()6PpU-q-+V!NElEi&c|jO$C@UojJLf$acjmcA5(@;!YK}AkZML}G`NJFw(e3cRd1DW=V-!U*0R?=fau^%)r$Ea?h zF3EwgpIuztVwPK|A(N-1hLHr!elbH$X+|lfRpM~_s~ChCgLMWTvQjQrXVFQp=Xtj#a)I9;$kMUa^e|~_=#llWLVBz$RNz1%aB2= z`@pxfUf96^+J`H3XD5Rq11KNLGAJ^DrekV%Fvx9Z@(N1v%k$|eBXcnQyF-YBmz$4QMMM$K0JZo3CoqLFEMRVDU}FFs zxCdG%!4689{NVF^Ksg4yP6E1+610X2v~N`Af`K8ky16)krV88|@aOMnJDKnzGW25m3~ohuBY zx$c1aP8{Htn1P|NI_Rnfc6D}j^I3+WZkO_ON=vo!zza1>CdieS%T0j9dm@tu!+ho< z1~vvM220o~5qK#ASuV1J0W=5>DuO^oG3X>IHgN6Aeg`xx1WuabAe-zN(esL4fl_U) zLV=!|nW{LuzKDpntgN<(h(5cxsu|P8bfxfcrF01~MNJ`bSvesgIazTbO+_)VyZ-%Q za%EURFbqIv4S@WP8U|e8lOPNX8O_Dn&A~1+|M$l&)bI=>5Wp)$wBdok^gn^gmEi?* z9RoLm5Q8Vf4h8{8cniS78^i#eEeDz!5CWe(0a~&t1l|Qv1BxDr9Sq!eKr22#g%)T- zJa~BnQto7jxWY6Snjy=Wp-!oT)= zSy5C`9M7tm9!80OFEr5-C9|c=0<@$E=7Q2=B$F${a^@NaNd^UmY=#{Sa**(mgM|-> zv4cV3&JG6fnX_<*fyOG>z!{&D0aAU}fLDTps%l|y3#}Hs;v2HzLgoVKAR;;NS_4qY zVPFVang*^#L3K80p%}b22W^05S2y=S&hsb*z+7nf*1&T+oH4mgE z3Ud>KBtr)1kP;~d&~blgWgja8=)%nTpm7dR;{=pA84GFBCMkt`MiIF*Q{>ZQ=7Tt1 z16Fuxh$w>EB$Jqh7>_a6k?(%U;rsa8RFH_Gs7=Kz1aC^g86fvBU{+_`!JN&&%-{?P zfA}3(%%DXT7Z{is9)J%!0}nzogAyAn1L)u!kPLXKg#qXkokB>yGcXiZ6jfXRO4`iX zpnX9Mj0|s?`53dATNrp5%s_26#QJ?u`h~Oj|AG4mm>vSMPG#w@~kh`A1YpHnz!c@X3zf5>`r$b2ElM+oyBnHd&<8n=iP<;ctc zY4?Iolmk~e0-$@}A?x==K{FP3GW2<9UY-r5nMJ@^7mWaUn2BLC(-+3K%v%_k8Q4L) zjzJp-IKhQEXn7iB&l4zg;LY+2V0VI+6NBp%c~Eolu|cS-nL(&4(-*N-iu1)*DKaoJ z{Ac>iIG1@V12cm%D6HXe$$-T)NTZX{*d)}G>9fQtWl&n!&GeZu5~d$i#efdY2j4ve zZqbX{tIdaBisrGMuu*tzl>*@S22h)ScAe4aULYd zjvXLxf)Whe4tNrR#1ZH)VNhKRtAv?B`wPJ>W=0(ib5${RV^JO+a~lx;QWz+SOrt1?%0wXp~+KGs6z12aF3?;-USwM8f^IcyMxrchVeL!6!a~QY+Xq z^TE;-b=|D=J>BwP{(#X?|1jScE|mN?3+5RZjqEAL|7)0DGsH75XW(YA1=Wn8lS!e2 zJaTrCj?4`6Va?Kb2m|B=4hB$T6?94^tW{)S$c)q)3PCi3mc!aVpms(S(`SZdEc)O+ zqB6)fP|Sm(7M!VUlr_5c1ScWfQcl485DP8L48MzZY*;% z-fk>--9KgFO06vcEP{Bp1TcX5fA1Mt!10f*zkLB*u;J=&!}^+__=fiKkow!;7)9%E ze`1)=B7>v94M}p?+b261DC%!BR}<)Ozh_uLFbv4*Z-av$wZHwI;RTBZxWDZV?r($6 zoB&@p8?e22Di*Xj2#T19<|UNNS_&h((^l`Av2sQFo zH#T-QGWRfMj4{m&H3V^;Ow2w0t*`O$@o*1kQmFOtarcN|T<84nMSN{|jyag}PZeP1 z4>Wa8RM0lCwv2Pv@Pjk|9r~SQXB%P$CPA%DrhiHdI~eydb2D%-@GvldMq!xQm4%H# z`};*1FaQ0swIh0;cRv#g<54e0=P!(of7g0@gPN=V>=|A$9%P)&pw7U+2;Kk(8s`8l z{s+Y!WO|6+jGAJzG90brS_8YZV=JZDng0 z8)Y3~6UH6|OHX5C1vLd@<1jgCb!{;Pbp;4wVETLM|6(R@rn3xg48aTxj7FdXO2EO7 zw0K$&v@g$&$%P~`-s z1vLc|FH;3|@Yya*e?Ks!G6^sRGVn3Tf>Mtml&;HZM4KX(DghjkAdm$Wd;_;3ry_{d<>!t z42;I0i4aJSS>0TmlTnn>RG0DJtw^q~(m$7ZO>Xs>`A_y6qXXlre_@PC|K>5Z|N9md z?ta?p-VM`J?%^?v4F5hy{(B#H|2}AJ?eFjZ(-|)@+c7YMZUq)sXB1~eb-bDj<67rG zzdLKv7q=RpZ73-oJ;|o2V%( zn*O`(?ajD4CW?_$-qtA2GA8=pYerE^eN9tiZAJsjf3KON|41;uaEv@7t1QRsYGi#h z%FS6t@2ZOp7ni-`bzNm=up9r~`QOQC%j^O^Yk>i@K~9s=R8dgTRPo;(FE6IVf2NGp z|5_POGrRn8^ zoBdU1bYQe+U|{?QvZI^n83Q{510#65qOl-j_upJ^Z^ksQe>Kd0|3E!<2Bv>H|BD$_ znWMqCIe^PVB{orU5jJ)?M$i!+;B>DBUMy+~Itb0�+%AOBF%PkcVjg1u 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%0AfNbx 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

*vdm|Owc$na^nWvh=ne=0S7qfG6JRx zj-Z>m1i_c&DKH2!fR1r=U=U;oU=UBjD;-7;bLIL>BX*rZie58wb|saYAe|Wp+HNTt zox0Cm4X%|co5Nh#pFK6n@e7I77W^5 z6>x>m&%gujZhI%*nvdAjBZgAjF{0AjDwLAjH5@2%6CVb>hT9 zcc_3m9ia7O;7%8GxGGD`WoDF=D~2z>k# zROdj(GarCDoY1x*AGpqewEqhs?SJsuJsQlQItQZu1+sc@odZ_Sn1P}mlt&=yA0n#< z=MjkdOpto;`4Kuyo=l*f9?N$z$U$o;*c>Oc_(ar9%Ahz>hQtv#(xBrlkP=s5C-~4W z(A*p|c(Vv-ohN8%A80sRSpYWjt_(ilA6y_yGJp<)QeXg`D=f+2z#z#Gz#z#0x+bxJ zL6V_?K@wbHfd*)Vzy-1>Xj>yU{6wME4+H2F70``J3&Oq43N-K60tL3|K2inFdY+8V*sgVXRKq41=p1j_h`b+Pl1{b@^3rX{n{XR zGC#8eyC2lAXA))JDWt~W4X%Sg{rY(fOrUvCrfc9ieQ}0!py77N3SG$7TEt1O(4>jT z$>+YB!+&>@muUNioE105vE_^Zgz&(E*u9~$~9;^5s`DDgTjc>3~0_pWMxFp6I>G^T9Tk?UC_KG6QtH*g4H@q4Dt+2 z4EhXA4E796;93WI{0;bI-yIAfAA?$&phG)A8-V!XTYMp22CruZFZV{-7;9%YrKbmF zvpbU?sHT~PzCrf?f6&#qjMKq$R*<=^dyu)U|B$gD(6}ymEQm1&G!_KPJD~G7nL%|E zMEwJ(`tJ-3jGExO39O!>5UL(BcLu7PAnIR0)q~9k*G*vcj2R&H4B+`u#`)m7WV{R-6I?N1oWGL1;Mj3RFsBd&M zmXEi$6Dss@b__8XbY>#3P$|5bq z_?PLefEt4jsN84pWt0GiljQ%ej32@Egf66>0PQ^a|NsBF{}zz(U&bVmdf50cgYUn$ zOlz2S38^vYfyL_>)4=Aq{(H;h$n-==jlmBp?gE+@0iB1y6o{A0*BI8V^4KYH$C03p&46NDZ{`PXJW^%0bls zdkZ>8LP(7Pte&xsVLezJY(6+Vz~(ciGAsd$gUsIz?gK*9r!w?|#X;)7gTob~K9iy7 z-{=4TLE*=E1WA1+gZ;n542=JOGB7ZH0iUB64l4Db>)@bELZImhk-(q{8$75ETCB2* zfti5~+$OBq!N3gKL&XB#KmscAn4u@!YBHL#o0fw9gl;weL!&w zS!3}8y2b*0#teA;06fmlPzD;lgv2dVJ2>n?>Opav362v`nige}6jEaVsRxPcfyE)_ zgZlR%^=!<~QOpO82Y}SGfmV`%)vGWtFq<>I6HsReWK;s@GEgRCWbplO0kW4t1hg&` zw6$3bX^t9K93mnWQ8+=P9eF$eT%JK&Yv5j$0O%&w3!t7Ytc(Fo;e$_h6a<|;3EB(} z+1d#@*-_9Jd|I%(uYZX6erIObdBJ>cUd5r{6NEwYcc5`!&>0`npz}=`pu1^cZ6jz# zMPy}YI}jlNbseH@1g(a^n}`{}=@GOx8nne8bVPzMcuL*CkkuG*UXLK`7!y(O5jBj) ze$az^py&9w`TB=4PBJ#+6qXhFw+43nN4=XDI9@<)@EPEC3S>>p1JIfnXdhYt+)jba zixh(9ML_Ku@LC*DI|ZWt1+sc@I|ZzsF#|>YSs^vhY9awP=Eq3tg_(7P)EFS@b3y7M z=P)y`XF3MHLToAM6eQTJ2B=+#xF;4GvWSELZH6KQFiK72qylOz3W1x|VxV2=;K4>Q zeb8VAsCy0S+JPF~h}9UN%N;@2)Iyer$b!$9-U+_F!N5=vxyvVx=uoQ~nG1q<;>v<9 zySyQ0tpqx57_@B0*@E#rYz5rkZPvz8=CUq+er#;8GoN|DtKq6S88@=BLXIA02F-&p zCo)Mg@G^)o*nxV|(hT;{{T`q}YtVcYh!z9Yy5MxL1{z*aLmJ`L1qtXP2_UZegytP_ zkP30ghy>_9Pe}SxgU>VTg7I?a@?JR#*2-x38a|tgfuC=9X-$13T;uoM%8~Un#iWGzFJrPb9$oN^m_@ z2QFJfLE;Q$TOs10_ChJRYz3(Ym7yVEb8P;-1)YB)q{aYJ&(2tfs0W!!!TofQdN$_g zQ1j&(7#J6W`{^L{Y>eqp^TB5TOgn`5v%FaW?A?iV6#Srz+ zP}GCQioxm`(?IIMXE^JC&v5o&Csw_I#*KXRg+3I3DD;iYEGBQa0 z*8!g~PMr7BgXP8=)4p-93Ag~){`Mt&qJ0{fo>55b^i1iKv!i!CZix-U{MA+ za2I$Ng9(Ewl%>s}$6x}^sh~{=HlVA6kWQb0u5N{|$j5gY4RQ=HvZ1ba<+Y7e4##s+ zjkK|c4kGkXm-0KX>TBRV!$#RgPZlZY89@8yW2`WmB`f_#S{xKu@s6wszpe$X)kcR&k{K_h{%9?K2}38e9GR`g(o zobIhGh`iF6(Fiph`8D@43GLP4hOa6{4Jt3tiQs?Fn!}SJs4XJ?Ux%@rX*Poa= zjKHZ$%@lMdG3fjc$ml=lvUJ2+qtB@R6-9MqR#Ol4TjV9Wqo%fP^71YS447c|lb**OPG2hjF9qA`Kk zdJj5O5Hk1LU2!oZuo`HqIAEXYn zF7!MD3&VX72egbX9;5^`4yez-0#*jP9E|~da5iXfKd9#A0AKR}I$;yC`+*UBRy=5u zMG<`NCu8Z1?ru=h>1GuA_l{AhXnlM8`XWgA0~%vWWSY$&%`gYFT1W=GV1og477DZh z0NoCQNFUJjj}SoaxJZE;0HDjeAbVNZL4)WI7}yy;FtCFH0d#{VJA(m;1HQfn+@%qK z9b75|zTpStCD3*o&^RTV0O&MlSXT!$atGR3YG%s_PCnpCHe<%f2w#5(2WVOe4NdU# zc1ekZ93mB&k_Cx#@EQ5wu{y|F;Cs-uz~D6?;59(tH64sO&@~+p^`Nmji24U8>OpH4 z!0H(aQPhLlz!3E>kky0Rz+m-^87S&Odp98JU!kZ6t?`7YhpjPzxChi`hNypxq+Su+ zW`?NG1(^@N6F`S4muVM+0VrOz5cwWlVi|zyX9J}A8Dq3s3#38|((D6kfi?`mT_(_O zc+f=w;3+0K@bs(#gB*hagB*hcgB(KugB(KwgB(KvgB(KxgB*B@3Dk5H2Tw6c-Py&U z&cMQ;1zxHt3_fYg%oNni;$vdRIuZtLOG9rU;Fi%>5mb>A7Uvg|1g(eAm()=baWH2R zP!vYLn7|~&-AbBATtbQ;I`zRRq9CqiD9*;j1i!Dq{=W{BJ`*p40mIf^44P=+1T6{? zNnIZlEc!_8W$64IxIzYp6LcXTLIBzc0S6rDkR%4kQWC@fH}Oj)6u>veftEvnMm9l5 zoq&28SQn3&Lg!mS;VNcq1R5SQX5zy(U1x%Jy4hrG!-!Z8Jp2Ej0etrYc#O;nRE{z~ z1D*T+|3BnRGSFNQLlmgoWlXDtNG#8g#q@q8_w< zAEN#dRJ}Ur9sqFL))r(w^Apgp!TXBP5+Mk*n7EI2_x_ZP~8whV&>p!EhK zQ6cyDnZTD4LrOqMsc2w`bci$j0B6|o&42qL{bTT5I-pg5MW9j~);~r)zX3W7f~diu z2ReX9zaX~`GB7AW*GMpcCY0hq!&snAn&2x1Ko`MqF|ZdV;A92~_jt0`ru z>0v6b7tC~pies>`cNh=SIKT1DF{HI?Y8+f0P^`kBh(^z~R(gH7$zJ)u2#o~*y05M6vo zI|x+2E@D<;kOrL=Es8c~2OWSzL=;AS3GF3-vl6Ik1RcEu*^UZoobiK}RlsXHQ)7^q z1i_~X=`lfX*72UN_Jx2~e9JwAci4L&FXRkeuut14Bj;Hg-W}Y*mb@ zF_WLP>SVMkCA@}7QrnR2pC^`TBn!Sy6ja_q_Rl^?S@#L*uYvd3Fs6gnef|e+H)mj+ z4Q|&%=CGcF=CJ<%2hHI#27$|G$h>GeXkHXPJ_#}(GCuhnX}nPYtR6Dnm<}3mgzqy0 zsfV<+o+Guj_`&KSZLM@rTMMS1MM_AG0i>Rt`6pvEcq|7LPyEc4LTU^k_3X@d7}dez zptP3Dk`7n@2}M0QBJUzmB3FVg45s^$7E;q3XfwZdvN!>uz78 zg#TUGx?AQ;kno4>F9z4Y9pHNZ31cMKUrPVKFx!CZ-xVNnhBAg0u(;9x6VN@Jvq1GS zGiNR0v1e+P|?nSsrb`u7$zRwAUv0P4Sk#>Rev z#ijqf1@+&B)EGehJdk=7u(I)He8xEo1L_&)7}Ya0 zufs>*4Gh^qcL#!we&_T9o%J5dlmt5C9aN4$&ddhgaUsi~2HHa?4joN^3>GWG%Sq^1 zH6l|YkF$bycd~%T`9WiPoUQOkhxBSiqnL8C+$6i5_53 zW4HhkjfE{z;$&a}ckK)e840(8 zKwf|}6EuRlgAp|J$s;7r6{D$#vf3yCywwR5#thGy92o1FH5mj!`y?0`Ah!T8)PPPm zfLvh*I&;{OnE|xi2z-Rt2aq;UhxY=Qv4a7$IG7z&+JGjxOw7!U`54*d7(s{sGwLd; zs>y~*$#BSusxmn!$noigNs8&qF{z4i%PD~3fsvt;iI-7_=?McfX#XzK89?9y4;shv z;Ct7V&5d6rvdv}Uy$&i{vzVM1-!V%wurUOHCIi_SK&MfG??!h7jajpRmY;xJ4Q0T) z^q}53*dH6f{q-FTphF`-tqkTnplez|2MIBXvx9chFlM!QR#tkpFiX$3DlWDH9rVD! z$dJY4&G?R4g@KKs3B_J;I}Egp4ScPi04QvVz*hh=fDV%Z-35pqkf6c}>=JN5f)s;R zzA=Ir2SD0EXCHyX2*iLK+y+`#$ovI#Lgx+!@F5rK=Aca(?;s9k@`gKG3+9CTzk14YC%rKGgPL;^VF^z50O6^(49wG>q}G*lF|q-~5KckEqe@@H&i`oX{p zy8jOO{!ma(0gds2gF_zXdAQ>so(GMfI$)YXlQ z)YX~%HDzUGHNga^-8X|tkMRJr5BPliAkZi{z)7#Kkqtg#FiH^kEQVkYq>$o!tOgp#f_@K&QmO{Z(*gferw{*7y^*$PzSN zCJgqE80gej@Htmz=IX}c$UXc^kgW_Hv0TV&TdqL&FGz_Y_e4Q?Gmj~f@fFiM21$l` zP#!_J8x+#;(+NQt3Y=Ns@%$g;YfvOW(w-yegfCF8!FP@>C~-nO!TbfZL>2W!T}CCG zC+b#+D+`OMhzLpvm(VpM>E3slE}&SZl!^g$w^i1dds_#q5V1_K5z1_uT%h5!aGh6DyK z1{P51_5mUbx;Tgne7qwscvv1(7&Ak16&pXJy18;izl@p~mx82>w`LWy5|4-!zpS&I zl5))d|NnED^cbcx`v|ZzLf!iR|Nk&1XNF(QIs)vBxe)jN|Nq~f$(!LYvx)#aV>(=H z50e8!2(zXDJ7Wq=jDeAfmthIh69IO{)c+Nrcwk`s-^{p$p_ZwffrCK-mJ6Xxa&Y?q z)I$QT+XPjH!k}h{sj;bXt%l9Cx*8@)W249{1_s9e>;IcD1pYt6z{?=Qu!Dge6n>x* zjWHHbd$7rs{2r4xhkt$~`%)0si|NoQ! z>o81akP~2MsDg#df9?M|42le50_=?0Ffj(b|G5l*nIr_%82GtBdvgUDxES*p7#SIv zoEcYw&mU6doMUOLQ@*(fHO#1;<*DV^0~mPg+R@k9Sp2@Aj|q-3vEG* zNQ9Ma8BL6hWEn-o)y?G@;k@k*4i3@w%BfBc4h~GQRua}$64p}Oj|2}vnBev+xLpoz zAA|Zu?96ZeYl6jn8B@UF!p;B*5r+T&|9@m)VCrBt5Kv>#NC2Hl`R3mTkXo?#bFjEJ zx;W!cu((b&iu(Uwm=1x(jkHk285o!am<o3eoCV22#01!wZL~pd zI?2Gmm=AJ4;}(z(#^(P)AoY;*l9)hezd+jQpth53+5X#Ffdhv z_{_;*K1jU=h|iz_=7Y!gztQR}auc7V7;1 zh_N+jxIp_w;86o`Ljl^V1`B|8x3hxQmDuR~ouq%oxnlrxtCuqx9 z`mfs-#DZ>c0l6KNwq`IL6Ji6cWdg04V_;ya0QrUSCEPFBAU=aJsElRMVPF8?y~+)` z!y0W2eQ=8qlBV+P;hV6JWoax1%{sLs7Bj6eS!zVMhap#A#Q z_O^?6+hFscU^ke9-2@(22lH*f;j8ig3bO{&69!oZZ3at*Yr7b<8LSwr!2tt0@)b1M z2%^C|b3i9|bL%^DgEz-DFfcMqV1VqJ+rYrcz#8kw%;3Pl4ao%hAO=Vz9>QQ{=x5+& zn9slsnFzeVz|HUg#$jLpUBbl;$tMLM^@X7AvySWx=NWhz?lbT*fR3jI*FfMq)j=25 zgU)Y<(6XTO-~>RY;DW|SLFbKu4!PgKpab4lx`V+SyaNr~2(@FfW&~|^Kpdi@EDX96 z3w%toHIotaBwKApLB?num5X*-tSX|3a-A>(3OB~MlSN8uuXqOV`u4f@O2G9kOj0{c;49slceawZs7~~lg zz`Kb+H85zEG{$;Ij6+GGL#&9@j@Y*gD(d(c!9xO~%8cP287_)51myMQXUXd+2+UA)$?%x9LDMJ4<>^y>M|DBQ-hah{ z>W=zPpStAuXl?-K2L=YFMWFn^Yy(bfp!sEN=YN6IAoyG`)VUqd{>Msiov{WqCdAnE z7BVKJ@&5~`z7kSn+yD^=9U}C@FB@ZXFM5tF{etx1?v;>Qg_>>YG zi+}wRnu20tf|?SFN=mxcIspNoOLKjL-F^T4ozAXp;9zf{ZEoXl1KP+7JHOxqgA{`i z=)P8E24m=AA<*s*NWTP>LZPcF5i?xSc_l;_5;`jY4ijd9oeYp;B#fZPNbF!R(g#(j zpovXx25ImL70_BJ5eCSXC<%SYe1H~sx3)0I<8n-(A$0H=w|q>XV@NP-vg#<9c4L9BQv9a%ha@tbd@ypKxu`Mf#bgglQ8&>vJ%jVE~x9e zp=CHCK|qJw5dzQ=dPMLbN_lA23eDo+@B;0>VFV8bg7)5Uf(m?Q&>9Fac_wh=iz**z zH#D)b7gSc{(Ddoq51JX&v#p&n<;CC6CqV9nj7bWB_Y~_e#P4F@h2Aa#xhF#tp0=UU zhKNV#ASKutQs7m4ps6#^=%gk%r7|-}F@TOB-o>EAzyQ9<8r0Gj6$jmX0E!mq@P#R; zdSW)wV^W77#c9gu9GhwCr6&TLvXL`(R&8c%&t?}^kT5m|UHivW$j#!Q=;{-s>yYNI zrtX$tX%%g&z?Rli{I65qSXWDo!_zX($jr;8Govk`J0B?C^%bMn#ouMn)+mGg-SW7YiL-fmssnX>AA>y zYwC$>S*uvsanoUPh-+$wOG!(MbLl4Oa?8pp%0c|9@;{Jq1Je@*MFxM+VZ)G7 zCzxNMi3t&l(DgcCzk)_IK;y}f;YrYP8!m9t0v&KC0Ggyy6lDiT5@cZ|sB^5Y#|%0O z$ez)ZUD=AUY?X$BkC&Dfk6DF*m!Y$k5T}fxW_{2!rY9wj&Ab))Ttq~;EtDnYn)OOW zc-4%ol@+b*y$q(aa)HKgl>S>VDTB+{e2}{l<2Oj92qKQ44RM43)MpTnfV4mhV{k?S z6)Q|&zku$W6b7eHHU?qv^`)RaN}wzQSso0z(-V3TX0TyUDi0gKn?3w)TgF+%ak{oS zDSzKHvBIymWoFR&|Ak46=>r4k&?Q}l&7cEsAZZNL9RQ8^L1@JJjZoJj;sNR(a9a*^ zt{G(MGvow*X;3QL&maxy6~u!Wpz(`(5Ce1;xIcq514tCSArz$UJcBf(t)vf90#XZR zfLdD*Kq9d_86fctig68a!N~}1@_@$rK`|-}uIrUWMdX;6jX_75f|^01j0%>~4oXT6 z(Uve;Oj(>~2amXt>kb}qWifFjaUP}*>XDOjawbKp!|1=2e9AU@rlxu}%6yE@CLjtV z0NGc@XvxG2xlfiIZLS4*lmo4<1nqYLP5&x_t|A9rD9dOW;p;yIbU$DT=*DVLdIIfR z0o{Ek!jKEPkwTO~3~Aj3MmY>ER1xV3xex%`4lO32d#L!J)ejr^f~g%0d;*X|yFo{O zih_178rw5MZjuCTsgib@GKJ0ApI1UkLBzy1Zs*$DPBWQ!A4Wv-33Ia)$Nf9Pzz8}M znF&-5gWb!|fa+do?+KA!psqo<7rIddk^T`W3bY-0Cj+FK0HuG(eQzS*rZQv!iIJGN zu(7DJlA1mf_~EOZjS5k(O8 zntD^Ep^24)fT}!)hHuYC##zM%wtds5{|4=wWMokMAIP|!=?Q}YC@r&~twYlTEj!ag zI_(2mRfDb76M!7)2D(}aR4nO&k9h-)p+fQyT^mD1#Lx5H%KkuX5gqUD57SeT&<;2%s7py zP)AolO}|)MNlICrTNqXu2=l5LJ7~yT>B_URil(Yq^KcXwgWKbvbNmFDB!$>Odww8y zkuv3i+g354^oH8Df;LDH@d1q>a5#XI7c>Ea1wiouS@#2KvVc<44hGP;9%#LfDmc}c zf)>g`b|N$JIa&Go*G~yx3X3l;2HisXFO6{)$dOD82LCOX#F!)*1R3N(tqUP&4-K;M z2csQ~a2<4EI3n>Q`Uap~Oq|dHhF>4jF%SY*Um#b5*1#ATf?K+vOH@E5wmPVV3tBe~ zZs3BV%%Hfor6?s{LRVFajdjWgH8W7F$&8V`t*5uOt(RX~RrKEjMng;UWKbiiSxpPk zc6iMs$)L#Ky^BE+asMGW^q|8e2p=FPZ_vmH#EGCf1=NcHjiu~hPyiiu0c|CK4h&?6 zZ*YPqB}Nl_3x8vAMf+$g_^FX5miFKT#3RVB?GSBm5$B=?Js#3Z*PdSxnsC7LBcL>5 z!oWL{sWCNNyFQ((BMY69ueG-eGs5p7nDmN!3}Ej85lCcI}xDPs+qB( zs3Q3EP|(4~p#Fn8<3V)|SSz)ugi-3>GswasaZ$!u91O4UaI?W2 zyeI&?Kv!AGRM7amhK`QLlov0iTrxE=F=e#=_vrU;Mo_~P)Q7fUy2T{PpunKbFbT8? z1$MeM=#ECj+6QPAfUp!gl86vM4hnF>gswgYXKSzkbeSzUYk_JF4RC{xlR*r8@HHr5 z!fqZ0tvm)bg%Iblh=W_WV#c6G5M-#8O<7bKaf^y5qq$wOtD3EAoSK4@frOEtscC?j zbbs^2iDpi6a&mG!s_yAdF@0*0vOYRqb~fisLTnUd?NdFvChcL=x3SAK*3^WI_3`|- zV3K44%`cRK)+<8h7hrV@bioJ0(-;W?THk~H2=+9z_7Sy<1P#xMgAe=M$-oKrx*&Al zGH9X6P6p7*Ezrdnx9dbSy@kznUT6{l3xLKyK&c!%nS zPBb*0QeSyuPh$t8z`u+37EJMf7h2de>i_%D(YOav4uZy+t}{t8XoA}EA`DvKYp-B& z13fAW5jRjjAq0>e2#y=5C*c_f;#w7O+{iMhfUmXz9RcXb%fQVb%ODLNY?WoOW{_p@ zW{_owW{?Hlp~A_qnn9LfH-jw0X$Dz_+YGV{ETCI0F6?5^V2}YfgLW`z=z|W(hL=y~ zp!J_@%1Y|Wpxb^-P0T>|6@cmo@NkGR<7sI*IcX)8I46gU@Nzj8x$^J~N5?od1(5KR zqoA~!rsFLasoYW8(%9MA*izV|3`*E(AelAbvA6#>7#J8sK<7I`=5ZLZ{%3*fZb(`4 zUPz4*JeJ0g^$)Bbv@exO05rx1s?!D77@I(2Z2$i=fYpPl8%?seZ;{dcS9CBt6_|5_bMh5Bs9!wvZKm||HF3?SA;QO{1b}-24L&sI1ZB0bd zgytx4Is+9HjNsjf;tc%ISv_%3zs!L_9DEfZWXK&fP{#)zd=~=WFe(mhNU<8*fu=t} z_fmmc6{g^=H=y%n1Vuq}wv0E@dH9MnEX8JkHsY{K*lGQ#$TiUxv{b7r=j8l%1GIOm zhnwf$|GKJL&^Ri14h*!$4m1ZQz{dOpw6=x;bjHgUrbeb?42lflput_#zCW}GLHG}v z)4=`%)hUqkFXnGd zpyrDp=FD1w^Nib$JUL_q?g5CKK-02gRlh?9XGJT$ul ze95FQBqe|n$|9898ef=?~kHYu%S_ql_HaIPE31(ov^%A z7x?i0ZJ=_C33Of^^Lr-HiWCKgv!FW)6d9Dj!}~(uEqAaI3>xtWzeBsj2my=|3^7gw z$~+9v(nbWdfond42*Y{?5y-raJ%b2?KZpa`s;18%!T=HgA5L{1biW{I2qGTF09`!; zTH3?}$uI(-MctqvW@BIhXHL-IH)Prdd=L)u^#;n|)2R?a=sV-v45Z-uHiKyoINX?a z{d>hI1`jsSVO1^g0AmE5(Zuu{9A2fM2|sc0##dMMBwECptUC;pMr82sN=!~-hT`3d&5cs1wm0|Qxi~z5>&ncDFqyK85w7k>sX1+ zfam|chr#6mvnh+p3@Y1UcWuOjT1V2*DiX928F98JMmmNL zo`WLpSQwy9O5=XWnacw|NhNj+SUH|ECUmR;QuUU5hl>t9#Ww3dQc%P1J2{10Ub8n zO~=y(P~09qI!1WZApX9^8H(BLohEDK0*f&`$0Bwztk zaA6LbP%>cPh90O2!|Og3SCGD(gf*H zfMQ#K!2lc`pdK-#Whx*583G2)l7RY^yFmM>psGM;WvGI?_67o=DQN>kb7OPxgn>RI zXjB^1Mh9gd@a7{?(8eQnQIHsTu#ORY10c9I(XjKCFqTl_ceJzDwHA$wo)H}l+>H$iFvI099#K3t|ia{27M!Y(M0QkZ%14G0{cu;R!o6*!5bXhE@ zkW>dXoFcZ6a`;>8#@Ez%Hr5etpMp5omvmOBv(~&byGPxOKoWl z&rBX8(^N$jEj11e7cV`q(Qj|v^pL%kpVh485IAZ1{4=K{`nY~z?V@#`bNUw29&U|AY|JeH08@N z$}@t;=JY{H-*-l8hPb7!ot+1tvV@c>Uyz-@mbqj`D(F17SBJGU+dHIXIoMcbW#_l6 z7@qtGS`z?T$MpXf(=>3M9|D@~M6L5Nf&>u)&|U)a7$RtF0dfu^$Qz&|!a&&<+~xzd z^5IQAXan!KnfmI0___V2DhyQm3^7CXZ)VQvXB{r?xxoqIxTpfkbI z*Ag)>LfRZmpkgBeYyDApwTGMaZMoF6jYn?fcl4^b}neiC}^7ic$y8=Py!u?4Q|>d zfUY108q z3L4Y}jX+^6M=}=#O~iqE@Yamr0be~P&}yV|O{YA69c{ln7tL9kE_r_1I{tZ1nzNX7 z)XbCw-96rTxC<(otLo_K1?D+8#sAF% z$F%?h1Ijui-~U-mFPT8YhC!gR5VFP&me$B=CxS-XK@AP=I|hcDjG#&mjFp+9{(heE zdqyFwk$CpsW6*q_83O}TBonApQwws0FnDPt%zlh~3oU68X$jh909Q=h4D1X-kV+a9 zv7ozHLF>)HaS2|a28v4o&^ohNNTU`su*Cvi4G6lXl8;eYK@hZ06Lf|YsBOe}kX6D# z_uqd=V|~VVZXQO)oA=8(IT>C4x`Ev8%fP@4x{HFFAsVz$5jE^E>Jg0I7_=Ticm~=; z0*@y_dQYIN04goPL1-+f=sV-`jEgh=Oo2AE!HsQrd!I!Me2z&rXkHX`447~{Ld!pd zTQEBSpoj%+ZsLKSi4WS~iWI@1m1N4yv;SLWVl7Si2R$z``0$md>!63s>4N9nx`B2DA5NJO+s27enkq#r?p~poa zf)+Z`h$yg;+wc6yzscd@C`+7^__tw9~_x}r1F4HjvRnVB1 zBm-paHmqF0CQQw{i`qYVuDkf~+J7Hv=&tqN_0fTq>ZPcVRi9?`~S6PsbPEeUwX0vLIpo@b?=yS#;-T}OlN}?WW*6Jd z-aa}O{yrR_F#i9A`54nN@c#M6T?{JleW9THj1hO$5H97QO;ALNfkq3s*kfT}hmPlg zdcTkr!ysRR`oR#NgF?gr-0BAPEQ|$>?Vvkh(3hJtO>S5qSUY1zJ-e}ghMj8>=*Wg5 zSLmq$JkuxtdjuMJanJQs#j@ZWR1PsQXhF+!DFzjWD$q>6D)_##9SoqG&Q;*)3Yv@% znF87yM0gR=N&rn^gHF~0bv9HO_@L=j1$s;)s0AVnJ(LQxTtgNdx!`jh%uS&;nSz@> z?4Wi8qp31AP60fJAjZHAO~arwDb>MZ!VK!*At+FMf@Ux6nCuxv+4-2+ zq1PCKTBoRc2pHw8V(b-_+;Y5DtyVRZ<6~qMbgmyPorNigv;@G(d*D1qjNB;hl&pp$Mu zOVvR%#%K;=8U-5l;JgZ28QR8MQrp%q*KD{Qg~L6cUk; z5NRq95fc+BVB+<#F}C1f<;ism$`lik7ZEQxBPJp(B9;%T<3VQ>uVCV3U}eBP-h=QP z=6DZiJ(IAasIs84D`WEcDNMY@pp{Ha3|#+9n3}hU6TZ=G2X4pWhUO@+X!Ad%4 z*?_PCIrJb49U$X9ppgomFQDt@VIw}EnPgB4RUF)$hIC(yMM2e~GI+#?jh)MtSA>_1 zaamN`zsYTk-7Vq*#li;m0mf7RrTy>eVffFeu9Z_N0~yN$&BybB)4K<_eAZxKV76l7 zWiV!V3%XO*1U%pZb2YRzfp9f6Gb03`1vWwemt1KL;s8^!@8KtxwoRM`|XvZKwYVP-C( zrYfv!W~*f;;@~vJ$w9 zll2-(#ZhXUtQ@L2#fn;O7caJHDT3C^{QtrTTF;>YDq;DdtJYy*4{co_LKacVfEuX` z;1dNv+tWemLk4>I8mN842Au%m1C5#GGw^{|zw&}tze+O5Fi3#UYgJ<4gD(0N2c2dJ zosonM;i$pKa6tKx9lXqf?T=r!PPkR5u8ws{y0wOerjtm7dVzOtu9>B!a~+SNZiJJ( zG`DV&E|<8pqO6~RNuWI_H?r9p`A0(55;Dny*EYn0`t_*oTBz3$euY+)2mxs46P#$k zjZ0|L0W5$zRwK#|>TL=to0@|b%ehYEWwxEv0wI}rFIN@Z{ree2LiQOj$ukQIsWCBu z$J{TngX%s;aM`HI#LFPdFc;@I4Z>*{S)2HA8c?w)&2S%cAOl7bXQBy5jQ(Zo3AwgLlYcp3Z6LBw}DNMX48`PDGL!`u5Sy@EH zvWt~8+b)92NdEu7nB%DCFmGkjq7lO+j~cD1*|%rYTc4fnxsT-_I8>{)gVf z3a$r&!1VxVJ+1%~F9SOR?y)L_yOBc=>`drr5yai#u_|x^1vl70Rp#j_i^11SFwO#1 zo1nb+--5{$Y=1C#JOg|W9+>Y2b`L1hLF=#B8EioVXsBan(4HlB_dt4(>y+jx%~Sr`!9t617RV)_y2AB;33DR2 zJ_oPgN3G8>+KuE!B4V5h)bc}(Owd@Gs4~;-zgb{MBBB&j#{37J@dBE+P6O8&QlPW_ z2#ix9A{4o@fR!e@KsQiAPY0F+mA(vM0ZH&ZU7+ZNTr3G{ctRHrAO@`votMe=jKW=N zPKGivhE8h#9{rP5R+i0ToK-wWLf=JK*HvF4Q(jhGRvvT=3bc;~TFVdWqscJz5FWF_ zXpLjkgNSYibeJF7%mgQ1aRxqU{UQ$Wp*Vv8gE-iSknK5q0y`N%T|G$U0^5_Ki0~h1 z5X*H+J=}+HKZAT2&saWX3KK87CmEN36B84-Zin?nlhDVonBb)@9?$Fot$(7>?XFWW zVg}RA;POiR{};y3Op**r3!9 z-nzudz(9w)OeQ0;wqC(8-d@YeL`%4k-$>ikU~Gt##_*y(J#zGOp**@3@Qw>LEU-Sn2(ac4hF>CThQ7M;X`O^03iU4DR5N=ZXQ7M zKRA`KFhCYtfJS-2_vOKk#&!fXhhe8@!+Ld~Q513T3_NHf0H{s`jhLvZD?_&NAm*7- z2TPa~)2n!+rc8JF&LX21ojS&veWx)tG~yMf9QM!6}0=A!0W z?u@Qkpe$Fcugc8I;pV96s4MaJ^Y$DqMMi}dd09aTd1%{@kJ&&-jRAZ=B!e^ben`mJ zz$_&dv?IIO$;{%r7q4gtTG>q_>mC(!E;HUC|Zw-`Y5MYpI zP+*V--(M>YZ9_s1uH?Jp$j(sDz{k+fz{fD3fscVX7E~XA4j>o40NUNPgF);9XxlL> zc#azFJ{{1>=^%o`iu-^ zhar7NP}ngrNiwK1B!EUsQOCJ4>OZJ!N_; z#0I)+?f-x1J&B;S0zR*kAq#R|C-{6uh&s?hU?v9s|G$_)d(adav_Yec1lD^ZiVz~! zdx8dnv=~IeE4OwqXhEthEd~JwEpU|uT3ZhpLj$di-N67^_zCKkK-WznO~WAdND*U> z(7x$Zr0T2~)=Ond0_C!JXlE5(vmyGd`S6MyT)#2pqcIcY?}Q5r+Gqb)T`2mLBM+3L$V?bO(bxB;e#31VFcP#=?e_ zKwS&a@HME;0d*viLd#THR2dOWu2WVc*Z8ZaFd2cvhKcv&NqE3qya;RA{QnQTe^iK# z0dmd?sPCx>%2P}%kUYf%8LI?|%Y((i<1-A-pz#@4-wiZw1M0g8urXf*ojDHbd;c$C z5(Kx8BS7U8>O3w+w*guwA%YvT9|4;G1`P%v`Vz*sNx z0nd%{F)%>auP887f|ioO;#vWv4uwW7q6dkHTF~-T7VzA_4hAlLP-B1#8dIF0wGI~` zin`wwB%S%X@v0($|93JD(S{IjEPmJ}G z3{3xjGcYhoFdbzOV^Cmd05!K@{u0OUFK9Ox5y}XULN@J#>O>F=)cF7vfjbyD!7FrO zicWEtjzN^i)@EXZ7!EWG^*O)!W!!>I3}yM7Q20K_OI=sI{d z=zNE){!Ru_@cb|{gDiBkmQ4V3j0R}U73&2^rN;pd22p4|09qaoy7*Vvj?o-^CpHMBMkgO~#+nx6I zJD?R;|K2fj{rd*S9m`o+motDe90SuoaGM897)YRp0U|mn3jFg9U>nxYY+cXAHdF2;7{7*5`*!!kr!kN2}9hV$Y5lw6mOf>zYZ9`W$M~oMQ6Y zviA0+OuSe2?ah$WlHvvprGnf7+3ys}imzsn6TZ*8Thp4isa+reyWAgdx>M3WF z?iFVzodu_t{~kL0>4{D~?Hg6{Y<29>aapwd^HkTEjw}If7ZZez7l`RQaxy3|h%p#2h%q=Yh%p2(h%vClg6=N^ z#hWmL7`hzG@&#{VqlpG>2FkMwZ}Kt@VI zO>qur`&Ry~|*bLAxnlX6#M-{Zl1HOg>5-A`d zQ)460Rvpl67{yFT7IffT^6?*(hh+a}LHFr2f;NYt?$dz| z!Xt7Bau|Zz=Ags$Kpk_?(m8$x8R$Aee*K*cknPNn^&cQv#1aoR27YM10nKIWLnko} zK}WhH7Ds}XRN>jS!^SSEd@a|9z_y)&yhxUWly_A60y=a4O+2Dun z0EU$((6B(HIOMQE>{){Je;f$%D@4w%UMC;63@U2Dm|GQ z&O;cWVw9D^pMe#0A{l635G%ua5C^g^2qFt!c+U@3zmoy98wj-43N&yHN^fEetl)Fn zAZ<9%&UDb2+YSafPJ|RJ6CV6>N(0-s9sTpEcNc)5e`61>Seo+6vlv)*_|I$;KuxH@jWg=wxdvZ0{Lpys?srmqC?bC(iIhBqL~e zA_RyJPf)s2X1EUtBjf-Bg%c>{fUXSywX4}Kz`_Ys#tDHmfLlV4a000Wg%4^tK?ZBF zq%tK?tp}!(z-Zfd&C0nLq;xF=2)X0%-Y-NJya8FDy(@M}I+goG@Pionp_=06NwW zluton1_~eKQVBIY&<9U(g@>rJD|l86*9t=Ml+4VO%P3_MbQK|}J_GF!x(z-P`}{5j z8R&^?u=*W34v$C@(6v(t0cax>(V~PlQ^5j|^%$U(AraBkeHGD#p6}6jY!6&tm!k z-ut!_w51PqO%b%8fk-A8V{0gj_CYJ^pu=F`vW1y}720ZMhO~p2L8%3lNSGP?8JIzd z1k@;kiq2^mrg`^hHc>>I!UJEF-fRuoG+@SFq(8LfZwLp%t2koR&R0fS+34+G3 zz&q)fGOPZ5n=yltYer!|=zJ4UqlQrox|I&vmI2i{{0x(E`WX?`P(LFC2>6)|y1IlJ z()(g&xR2>6kY7MC4)F_&#Sd<`C@O>I`UH(Zb&8;|s50Z{4DdqIsJ4rsM#)LY`Z>`4 zNzfiNUWSdJ0*k=bi^|1_fW) z&dsnMBnpW)ZU%b@2NZ80jiCA!6mO8RF7S40P%J5mLKmv~&iDoz@|p1s+*n`~YyW!| z6ltJ%Vqjo;4jxzQ#PlQ7ONeNJmhlJy;{6E9jNAf*2#Oa) z(0CvymRzT-2JK8)4XVFS7XM4T2(GVv|9dcl_G-#8WPrv4QTrCqwHt^$g}h(|+$2O9 zcmrR+1S)#P83f^nY(WOsAcr)9nse~MCuJp2?-8`qUQkgGJo*GVO^az$x}b2Ds)^W) z=QEhZStTshzf|SgAjZ~=|DI*q^=~(Le66JpRG+y1w_w&~;$=_(-I>Y@I{6Z*y$_uN zM+7z0Q{dVH><5gnM;t&1I%@?~HcBuELB}a1^kMk{Gyx775QiQQ1{zIc2ZgpED361E z1RYOf(hK3?R?<*YXPPp33gd28A#201kcdP#=!lw(Xg_F8A`|bwXYf%q(E3E9|5uoE zn2s@+F}N`FgIW%*3~u124rsj!i* zj>*`_9J(V9Jp0PVF2`uis45~R4jxqng_9_Aj-_3#nOj0&Yl4YRK%py_Br6Y#5UYED zyt$8#l(?zBvO|=)d6a{)jjOncgyp|}EqzNPePd&N9XUA}{n(zkkfsPdCdMWv#vqpt zJ$FM%7UP-#w;T^uRgWCE&`vEjwg(2@ib`Gv5vCp9= zl|-42>RP56h`XrSXZ!0Y*+*M)2ypPQaaBe&uDIx?C8$qRF+y^o@yVj%*?V<-b6~=Ou^pA2NZUov+1%x zXGJi`GX#S=v#9r&K>O5)6bLQwz$p+kTE`C_Ed`CffliA7jRovr03Fi+8f1|NoiPhb zE=VWrgVsHR4y9ukRc2JkYtRWOa!;&NYv!}IbPf!3ws01xQHXWwXA{{lE21;jz(3SQ z$22^+AUNDs+ruGhlNAuO1iK?@F`148n! z0U_`rJR|JRzZMatU>9QzKOR?4S4W$>Sj5}7ja8&42eixzdOB{Bk+r^pk(Dz~2Y4N+ z^#3d-UGSL=fuONj)b%RRN)Qp|$hjWWI)ls;fiCy~<$uuWhmewh1zdB3PHa#Hb%{+C zMHveU`>Xac2{9S}3;FkW8tAw(u>B(cOTcH`ax(;i7M-Bl4{fI-!VlWt1;;t46%JXr z0UAvQ?RkZa$AMU!VEdu_EP+A=_AGXJ~zzX!Aj05pHu06tR;bdM1u1LuDW z=-QoFP%(z;7HC5b;TC9)MF>D0huB_$9NR45VZI#|RhL80sb|*| zCf+M6R$Kw!y1~c*bsGaeXw^6y18O@ITD2qM1tW7ndwk&L3#j|b4=#f+yRV>bEEm*i zpshxri8E$nVPj!qX3%mzMT{#!hvoeXFPaak6Jg;c$WXis zbY2GdKv`HH3+hHh@L;qXq04f>kqNFOp@kwi071J?Ah8Q_BKrl%@*L245up6cf5E^| zT-nqZey$7Hv4<-v;GtPjF(oMp7NSXM;It<2KZ|J%_^g>?P+CJhYX%yfh%kjlCqjTg zJC_@L>&`9)(D9F~;4`g2O%YH@yn{gyG!m)I3_3rT*%-8$i&@-QP?<^AW;*laB@eD{ z>|pL%a=o{(pONw3f5uG4z&CIHt-1g2F#{um(Ek!9Qzl*pK~TGc6Lt?Ww37~XGa`(k zZbk@@;bu@d1geb%!FfngSzVc3Ss3nWQDw&UmZ>a>v(~O&k;D=|XI)ZC+v?Sf+>A_1 zm;U=X89dJ*{XdI23*3iF1kKeENW0LC1x^N_b|vJr5>SkTTmiaE4KyzdTKv6(fdhOR z7AQu4H_*l93g3ZisPv`@azAsUeIEBL7R6&Vcueq~UZI zBIq#EE2cw1L4|NAhzClbAZJ6mE}D#j5XXTU_{O5jOm6>t>lr82Z=Vv?1}TU@Z8C6} znf=dVIt4y+svorf2ldP;jB*&7QxItr;Wm(NPHBLLq27APSyg2@eT&i<-4H%7y5ZNpu}rkg?ywgX^sutDe0Kr1al=fQ#Q2?d?X$bSbi?+aR!r>YF<>6n79P&F165jQm!H8Te- z5oNr}Dx+FdRyf1INKIkJjPE>bwUz7*l{fDv3Qd^A%nLbwh=CDw`yjaPlLD$oHBA$?k?Lo&PNrB@@0MuO$U=RTBKLgz<0$P?J0G$g0)rg>L7eQBegL(#n zcR+mw(EfSI-ZXYmWm8y$f&2q%*MoMb)v~gS^2DV^PZ1M~6Ox`X!;PapwLAe6;JSb@8jEE*^Ck|W=fvY2E>IB!JYzz$0^Pt#3 zewx6*28t?n1_#hZ?+k1V2@GtI6*dB3nVq1+`oDkrGsVgMyT&~3N&Aj3hkC*aH0V?k*Ov=Rz5Mggj8LAx73 zEmU;|kcc$+46>aJD&SRvjEa!l1X}SA>ZhqILt+fvF_mKyRaIhRSJY!X1L7kyw7lSB+2KWjw(9(L)G6`51K>OQ>1PYCA zq?1CF8F;}vQ$eHFj-Wvf*o+Zq`6Or|ASk*ST9X`V|g*L-VNID1iIOVAH3OZ2ZI_Uf2c9oGpK==nu&pzhq7MS!Jr0hhJYqH zK$k8W7_usxf_;xGU9ck(#-Fy}cn&NnL(0d%6O=T1+5{_O(G!Q97ANB-Sn2?k4d{3A zg3eGm20rie0qCw|=9dho!DR?Y+zPZ$fr$YuevzRS+!l6aU|_h(^n`(#K_66kBJRKj z4O&Ap3u1Z*(NqVOWP-}BQ>HLI`787PKLcog>r9Zn44^xv*_dCdL-tK5{r|!w4YHTP z1+<@n`Qk%}I7IyfAvLJ_N66}#Kzn(>>KU>i>i_>|U|^mI?xS^p{i6gf13~xwAkI|Q z0Nbwtw&x}23`Y3=GC|lrGUkh*ePsXt!`4^}u`xP<%>%732A@U4m<;BF!s{65UQtF! zI6guSN09p<;mD8$3djHdA!px$)jtH=|L8l!pP>DjufggWLE;QqHz8vjkh5}kF(`q~ zB4dD_cLXc7py$aWax*j{z$q5g*9L9I6ormOOM+M4fEt~kT}6;K8|Zu z2CsRD2le+*$8n)1Oo$;Jkxd9`6~>C(EU9S^%LOgAEBs!4_BWBRS#af z4@w81mXrV+^CQq^HE22%0Hp)ST^0;k??CAQd9A+`gCgjZZU*RGN|1w~K@~6JW+G@y z1be!Gto4_JuWOgn2eo=ZAqiU64Viz&vXb3gQI1hq30ys6UC00L1XGBcYcLC=1q+rn z`{ALX;fyyz0|P@Dm?8IdfY<2DFsMTO0$B%w@C(NM=osk)oW?;nEP-~Z!1gVGcBx2$ zi(QakphYe89%k6ycJQWKWzbT5P`#_H#D;YN{uwi~GiEr}+H-N4S=?eb11+uxmjRG- z@Ih$>at{6jAxIix`wv=QdtFEkvgeDT5VYs(KkVFmP+Ebge}tkQRHns1$^aDgXW{4U zKSoy1tOGNjF&C;H)c=SCr7gyfAaj@>NkiNNsssLl(iW2-NSq-Hbk{Lt4ikK?JST%M zsK0`G4?8qlBGMAHa|vnp3PA2Qhs;4kHU~h)`S`zp*2Rm0dfCdRkn`pX`>U9CwS$NA zKxvwh!S#O$Bj|iHeD)&Z9n)S=ng!X$0$x1{VzGnAAi!syfk*K`=blBiWq?jTgO1^W z=KUhTVe=JSzdd4D4vs@m+xZDNY(ybplL2ufXq_A6jM^wr8HPH>hY>c=jt?YkKs6(D z#08vKp#v4*UBaMd6R434Ix-OyP@t|CXyg-oMsi_))o;)#$)I!ZL4y&XJ|*J35!~)T zgcSjIfC3IQVZaJ*)Ii(;o}5zzO_)O5;mUYAsx1R_0uJazHqf{O0|NsqgYW-kOohxm z4AKnp44MqO4CagtyBM_K`;N4r4I~f^YW#s{g$tlbnjH*!pq3Vk{tgCa{T&R9cN|$6 z-ZL;VfDSVOuhxra0PQLOZ<=Og=x1PL0PRL#22GXngJg;vnHdTgSYTJZvw-?jpcNEQ z#(9tws8cc@#`q6oEC4Y;<~TqYpo0Tg7z7wt7?=tnLq(u2CFs}=&>1YCAtlh3eb4|R z@( zV9*hO+%(S$8Z$QrtqF!6L1T(SxZvRv^_3zcLQ6=jv8@|Y&2rN#KVI&iQt39DLYsJj}=GPX>eDkm#1EB7y9 z`gD0&d0Ei@d|3tt<_(}bLKv*T`RXadZg9R5W?*18V+QTpj{@f_=SoOfgs%Px4)tXy z>Ot*5i209@)r0aa1H}9+ka}>L_JwIL6R6!(02*RNJ?{cK`hY0YFor!PLF)`98NeBt zRbVFrWLb$QgA{ZQSyUg?>jUK@$g(z2R~NM1Q4Vy)y$I+sYP9vr=AhYnMN!br0!(`q ztV2zmk`?1c^_7)1bxabP{{5f9WKbjTWUg|x+kzO zN$7ik+VLX)O_*jf?Si(4*%@mYgTdjf^xuR@nn_Yf4cvYPiSvTRA?@eGF!juD;p#!{ zZ6&z+GDaSRdX{v!`madp?U|3k)HC0}q5eBW{r{Wb_B=xUEfn>UaPxma)H6WZ|2yF3 z-$qgI4_E&SMg2Os`nxdopzvYd168la{7jue02CU*pyC{ScB%=JG_y2RpBiJ@Lx?;t zR302&NdA9^VjsdkmtpoXFfh$TQvV)@`YR~v5&r*xq8{P@t0?N7q5ffK{)nP}G1MRI z%-3M*!TtxC1L|L?F~7j-e{rZjHO34y|NH(oVbTDnFHrvo6mr(!bfNO!gbCE|ft_v>mPss9d9|NqT@kb6M!2T^|usvcy% zCkrS(Am;yos0X)Eb(ulo2vL6OtWNPLCk%j2`R?k=qRd4yTd&0kC_5z~+=OBB=+*2Soi>B=tVv_yenFzJWvi zcZmA`&;EnV2e}iX{uYXQQ2as6{{c}Cjz4v9{6W;;Mo|xnKZyEYNa_W^@dr_V7p~rf zX$Cm{Ke-m@BbyJ(e_-`& z%opJ1n=q|qR)MMqr2|CzP-iL^QUj|8i9^iy{BOdP3r>F);B-*S7!6K0_Ww8~bG9Ov}Qyl7@QPhLN6J$OpJYnt!nXe?I#t1SW6rO5u_b&p6CrCXT z^L=FV!Qlx~&>KZoUcAB5-(u)PuqeX1)oNA2>Wg>OtZV^TG4_ApbJhfc(Y$6qK;w z=ZS#YRgk`-Gqmr=`QL;Iv_?SHj@~_F6m%5RW*Hs*WC?g9B1(${6o0l9~P@&EV#Dh!;=JPgbX+@Mh_ zaO>Z|kl9#JnNvuJndgrL1LObs|5X?gnS~hm82A}>F!1T`U|`kX!N7jOz>t|;-CW&V z++3VpoLyZ|nbU_SG!%+_gqRk2a0doLk;k7Vu)9qeUNXipRtkZZK!D0mbiNA17bXqH z93eI)(1sL71}L9_nL!*h*#RBb+zr_^&%mN>U+7ZkC9!D5wt;eims-htcG~3qCSs;oF?NAO?gpS zYcqWzIXg8rO({uvP0-pS#zPG6nBFl6GiYJj1MSO#?curuSq{Yu+Qec6S}@4R#I9_| zXbze#G%=fjVi(gpY<8*r?`HVGupM+J6sleNI~b6SH^(%7ww}6xth!i&k^zsRton8> z1u69#V3{p6r4ctG3X86bUBcF@^1pg4eb z55Qpqp6Y`J7JTIi6L`!C)TQQP03CNFE(qFC4nFNg@YtF)b!*m~U`oh&@F3^!0#H2s zw_yAQj_*v+`e}H4gZjnXpp*}@7bWgN4#90N8`uS)wM=|q7O3+Gx+e&wr0(V2RV!)Aou-ylk)&P-fzb+jj@370D~xlC@B8Kz_ZZc6wD1y z!RAVOOty?Bc1)mQHCaXxKBnthRw{ymDpp!hdYXu`fsBfbfwBmk@&7-A^Z&2Rb_^>8 z)EGcxQ0feVjH;k`Vi08VW?*1o2aUJ0nlK$>0IhzOWzb|WXK-c+WOxHwv>3z?4DN%Q z3hZD2o%Ii*L3f~lXwal1h?cvsg8@WaLur4|m;*S}KmXaVXKLdMA$!0rKEeIWo2bkLxqIC%G_3IihpWQ&W6KIjrA(0)zO93kjXcSEpR z&^;V>7j`gM2<&8V0gD(4>|pS|U|?v>Xw1m0gjib%9JxG z!bl3iX-S1Kis1zlXxc~)L_o_}=$a%%G#D64Ga56i*tOX)MlmM*TL8_^QH&>1F|NYS>M3Wo>ARgT$J6YqC$JuuHNS6m<4qU7#JA;b2Bh7 zc7WZk3M-KjE{1vmkxmQ@l^Km0zcLBt{Cy7!JWwN$i9wRlnK6&xr~$dNR5*ftI!LfkxnY7$B#@fUXY%ZEc6S3%V)~o4Y`( z6Y70vm0+;Hnmt!FNr-MoYB)Q z^xAzNH%8_{Q2ag6#**N{ce^egQ4m zVgy&DpgVuTtC`psE-t>7 zV-Xe?WaGX9jze*1c!@G7fNql%gYGf_U3a*HfdO9fVJ!AUPFrGNe+V#efKP9$1zn^m z0Xo$S6oR}A0^o!SZg7AW6NB3u;-FJUK(lJ<(3>-58AUdG2TE!fOZEFkbFp!#sv9^3 zdm0*uOEWqLIjcEa=?R(y=`)F_+L>B=d+TxOh>LRRf#MsK2920NCob562u|=eNLb2) z*13rIM!0$h187K&2^`-ncRTFNr2?yjyLsxr!& z0UqMw;^JZw5@H})TuhwN*~UOomy?A{LqXfpQd>cTi-l8H(ZJ@BhyaJ6h=?GEfXECH z0WJX%FacU4BFgB==)-h?L7YJebnlBCbT%1OKkZ-;g{K$j%q$`lpoJ4Sr-9~O<-mRh zon8Q{;%as<@Pk4^0xZhKAOT)iXJ80w6M!3y>U_+~uo8_ufISw;~?A9#{stsi1EKO%5>z;# z)#aGwsW{Aa7%_rgp0Z&tP8k>(I2afhT^I`)xIyPhF)^Ud6G3Nz5UxSY&w%#7g33+M zJr1DNZ7iS$fT^*mGP}AtXvLvnESs%!=(IrpOTh-k|L*yN@{Je+1EUjTIfE={--9p% zqX?h0kfN4_gOQY$vK)^h zsQzPQVEO-x(T1^{L7QOv$A!x%kC_qFQ7{DvV3=E-%G=ht4SlI{7zn~3Ah(cYP(R8-7h`5-j zwt$_Klc~GEuDqH~xSOM!h!3}#oVc{Sw9-=%ZWcZvF;Q!I1q)qeEfy9w9c5!{9eFEp zc>y67LE#`!J{4qOV033J1f5$!MBR)CIcNz9UVzBNKwRByjH_-&s+mD)PU8PBMnA?v z1|^1bpo@D^>t^WYG=xi_1t~ZV6~K36gVH!?QJe@k4nb3JkShmRK@(~R7+4uDKu)Xx z)y=F72@I?Z1q`eV4GgRd6Bt+-7JzobLh5E#h5!bL0_IppP~8mC`hbCz;R6FJ0}E)L z4Kz{7SOlxa7#Sc(EQ2mrk_I1e2)aI24$Lwz6ed(hi`L<-q8X)dRMFv(IvN^o#MRM= z5Jbc!=r(Imf+SQ&gG({!m;ecNG#j2Ont>72OJg)*EM(wdz+FdUb2WM$Z7hsdM?-69 z(3y>(^4ycLoTNG$o1LKZDnTKo!N3b%lUK8YK?77XfofsU z28Q6!Gb3C_BMJjhXAEl{EiNVwuA{{yB-pT5(O%#x8BEMT)YjniBFezP=)+h}WF3tN z1!x@&&T+)o(W)ZQfgRH8=tp>}Xa>-FrFBd`%sdPl3O7X&(+4m5@eT4n6dz`y`nWDL4vpq_yNG-bg6x@TfN0|Uc; z1_p-n3=9nS85kJegT{J6>lHznA7lt)(GCXCa$L}|C|1x)16YB=1S&H?rO5^c&;|!c z*}(!TSwLlm00Zc-Kvo9kLeT6#=)ev~P&vfU(7?bC+HKFu@PL7z;RA#N+Ir6qS%okk zytTlQonZk3Kf?wFeue`K{0z*XGu|8+_!&SO511fU@PqE5XHWpkg3bT|bpatX?;S_b zX>hy@`x$r{&NJ{b+y`B}0@B6L06JxX7u3>(n3>PO%TUh%+Lr;*3L5+16@aXr0^M{e zb^+8q0nJT=ysvfvaxfVvL+)VExB$`vTAmA%2W^_t0xzBctpNdDzymrz7_#aC(&01# z%Yx3?GzD)7Rn=ouXIBRAq&2f=G-fxpViY$wW|w0WXIE2awqpb>?B-`w7G@R`7uI7` zW)=|>7v^IWWpw5i<>GSV^^UC0=5piY;o#@sbmP{xl1vj2*Ot)YOXpEBv{mJFlhhLv z(_R|vLb5LSn0H0l^&u{>=KE;5+5YpENHwK~SIU`!Qh&B?a^8^Yo z&`t^-(D5ALAs!x3OCtc(L;|heXn-(4X@!RYbU`;bRc&D4VK~6R!*GFthv5MO5BQ8j zb_OQUAzl0o?BFd8Yz&N`YZ3)O%l$zt(2;OF0y`K~E3ZP~GI~YJ~d_c>;mEpYy=jpGLE{1kG2ew9 z3_=$`B0IomA&No+7If;681xQl$qSId4$zRHw7?Dq1<=wBP$dN#Bn4q($hA|jQ$d;4 zl|@;NO_dpI`&%O-A|lomOlgjcjEr1AH<6i9i#g-TlP6IwQTOiMyBFmW^@P#t#EGVJ zp!P2lgYW+@%(0-eC>b0WR)TuEjtoxVWW^z{gTV?Oa?oHvtm1;EN<>f^fW{vUK;w_l zkVCW*APL4EyaU{n!5%s;W2(OswB_Ur$WjOBPHzKnn;(?@L2YV9unu7cMFsT2W3>P+V9;OUl4WUBOAlKt@qqQC3V?Lruao)HbM4*(c0FSzTS(foWGxqFJO| zt$~h&ppd+Xpo*)Wij{^auVA8(u$YLPh@h&YzM{2`l#R#CfA1N46qU7=6*n_5Ft9MF zF)%RS1fSib%An0)$jAXY@)B}d;SL6UfgKE>4aXoFl;1$KCOpgur&f&ZSs2L|x~D?e zE|S{G7nD>v1$HnfUD&|@TKNS^vY-uJIu{_L7odZ7L0i^AgZ-c~1hi62`vPQJlmR$7 zvn#7Bn;L^LcpoWfFDdBa4KP+_G*^~qG*+}{RF-E{HP&ZTW@mDrXtvIzBAGwL-guf$ zyU8+>cHIdk4xs|6Rc34dJz-B`Q)6bFugadpuJi9#CZ`s&79!b06MmY4;(>k2vPY(> zZvjOQ0~2Up6*Fk8k(WUlGy)^QAOk%hQvkeL5Y`if?!Q1JcWAd6A%NVi02k!Y&Lg?A0 z_^WGZsH@-kTFbVeF;ZUZyL0=7J8u62L{k- zQI4QvOPL`-n*bKs$-n|`41yNPg0?L)3xM`s?qC4ztv6N%O?ZNKR11R-0s!6d@O?&P zzd zvqhxkf$HiC5YsXWl%GLMff<-qF@c5$R2VcE^cY_5V$fvJhh{xZ0mu;>AR2V6GKfZu z7~>6iQ0i5IgxMX?kwc7MKw-%A#gUVNp8<3RC<}u=1LP(#(1F;@42%#dW(IlCJ}U;u z5ne2@kbUf+whO3T0~#d+H55TR?m#mvpeDUI^t=OIXvF}E8$D3JN1j2CK_7GtHE6_( zpFxiSB*0X-lL55E*}zZ{9B-hhVN*pTF;EjyOhiC8L~G7KsVx{QlJcNN2KtCtek!2qhEK{R+*9_aKy zDSbz2273l627d-AhIj@khI|GohI$4mhJFSqhWQLq4C@)B81^$rF`Q?RVz|#B#qgd% zis3(l6az1)bl_)@Vqk=LU5Y`TK?>A~V`k6;i57zD32@qHU?>1}y<;6gTXPr~1Q-|? z6c`vleJxIg1q=)f8yFZE4lsZwR2Udo3U@Go+y^RR883i!a54xmfKE8)1nB^E7daUk zK&N_x><1n3%?Ro;z>oKKVBlm3fJlRSlbj46ARJKNk&|Hq1877GWD=z9$_0wUd zK@C1_Ms`^5PMqD?$d1XD@u-MbtcF*H1AnnlmT4)Mvb5ZD^N?g6R)IVTF;5HoMN;h2 z1}b7fMT+xl{AckvdyG4dDeG2#aKy2F;*M7h%(OSiu7oj$|t9%APpLKRQvyh zDURtFgDJyRP$$HU!5pa{2W>GU$_PZ=0ouSV4XrW2#~S&RA~o; z+6B;UDLWWIITaKgTHwhh(0mc7XKBR137#*4RVQYk?wz@^siGO=P7uhjyBrf}rpQ=S zncY}akqy3cnvv1pGSpI*k4HVR4wLn{j7>xd}V{&5V zVUS}`V@wAXhw9Kq1!(61xQ7SIk+P7H8d(N;23ZDu2FQtwpff8$r&;DR$THM3$TIXZ z$TG}lfE-`BpFx)4JOkvg#`g@e4F4Hq83aJNgCEqtF2c-**s`4?Xvi3nIYGNNKnJRW z^WOpnIU~cfAA06;WMv?bA0b*1 z*-sX}QxSC11ZYnhNX1SDW$=KCI8ye4j-o&s5lH##xQJi0rgw(DK(Ua%y;!=qst>Qf zb~>NBxx1b?e}Sa9hlxv2naYAvpXzWUmgqD-b44!=;eTEM-lE#dqEU=xS`K22Gr7Y+ zTb$r^E@(ZTKWLI1GE)WWT!Z>auvQtg{eZ|>&?X1C_67L^a@G##9oWfppm{4{Q$N$8BYHg|nB zr>*7Q+nGU`hKiY)EX-PpnbuKaufhHUjhA?W`=b7!#v6e%$q-#fNMXGTbb=3fDGTUk zNDlB3616)RB=jW=49#Ip9AjwnhFug??3x;j@G)sKW`c$!W=x+xeY&BNk)q&4Is0Un zJ6E-$v|O|zwcaiBh;nyvkMvk1pyg)fkRJ>hU}XZ;bWDZdGi1Q`qe;Nm4@iJlSixci zI$4Q`737u}3n<{@K^v=LLFosyp9(Ta14&f^3I`BR<&>fDZj6tA&2c+(R30Bq3Jrl3w6 z$Z_C=1X>CLt_aF8je^#D3b6>I`CLp?|ns9|)T!Ia@XOszeG zDT605w5D*-8=A=mrm!34;5OrpBV6Q6SK&24+y(fL&A> z5pRNs7))}`OG(Ld&U19Pb5gR<6qC@gR?2Hz4cc?I`Y>q2*+zf)?p$bs{6Cw+m$bg7J>TX*`P+e^f zS{(x(F5_cjM^x0{LmWWo(3q$(T4}hM%4s@Cn+wPoI;%y*%9w{($V(Hok5%7C}>U-GP4dj^8+;f0SX7z3lKh{&w|mjf}Ui9$l%bz9w7i7CIgrL;O-=J zjR?3qDFwa8q6WGoh5@{q5wsf)v{4^a{DN{iD1AdNOk)t(!Jr9h*utjdLH!X8@VZ$> zq?H(qf}pF#KpSJ3)s+PqA;kdn@JV)4MN#HR|L|~s|M2iXOP4KmX6^?OOtmr!3NkVZ z3eAjmjA=0;Au%BQZx++8e+OnT-uUar=rH4-2IE#0B{L-zFmc--G|9xoAi+433A7f8 zok4X96JFv6_9sEOt40MSuLI62*LGvq24BTJ9O&oTVsVnft)(@a6 zBNnn?4s>ijC}cq0Ygo8}W_Ca&r5JP(9ca<6u^@OLPf*#^T$x>6SzI*Q`LfEg=U~ei>piXi>R3^DVeK@@Jp+U|NGp= zrBs{fSQuhp5K`!vSgXXHRP(n{#mi;UP6NB9UFHCEgjxj(_ z7vO=O_zxNGN8E)C^%ElMkW)GH9Z1wG-T}2$6v1QSI~Zj2LFI%D1L$s>9So{>3=AQw zKR}~Cp!19%#ef`>sG_Q=9wTVQi0Cz0H=U?56>||QpBPj3@(4r2h;nzgiU`AhT8whC zZaO+{vJpa}LCy+ljt0`kajn5YZE?oNacx0X=LE&X1ke5d4_aHq>;PH=%TUe0AfV1H z!k7+T3#-h;2VNt~!N9=mjYVFS@jpcV|1Yfi<(XK(@?!sgG21a65Kv<%ftsHRHea5J z2`ta?{};0_7V{OM=7aQmW6`e&x^Mdbf6)3LW*4x0Db)Npu=$FN-@xVz{{O}71u~ym z3@V=jmHz{l2idO*l1KBu661BSyu|-s%o-qhW^t(gEU-{kbY;7JeqzL#$RB0 zmjAz)t+2RH1$2JG|Njgi^W8xD(acwY`VZuOaj?83)P8HQ{VI&02_Qy>c!oS?RVE(> zKF}T$*h*Ul&@LBHBMG$eo>82iQQTZnR8gH>o{?Rh(J#P8hcSS0-oK;(Mje}g_e?$k zHfk&^RV*xOHUaNJ{o>0E3``rDjxq2t=!53uAggy_r4&Xx8ak3LY!_)@$jGkG$Sy9Z zENHII&!}$Bv=P~8#_M34|0OZbgV+qR3&s76(3QdrI~dsYLFWO2+^?!`C>XsRe~ zuFq&L&SZvWN*=NuphAz~^8YVP8^L!{VsSr4{R8z7*!}j5@{H!{g2saE;`WTPTqr^0bzr}4C23I43ePukwn-Du05dz4Wi_MP7omZ&lD0n;^4>0hFJunN^wU8RQsLL6rmiTq9O}&=H!T^`-1zK+7#4=jy;yml1ey#}s<1 zk~SkWfkE>6HdPA?RlQJqH8uNCy={=FWRe6YDs>$l^&&}QZzCgbV@XKtL;M!cfaDHF z#GO(C`j8nT$oa+s0-#G7LA#P5xfEVci7J7{l&l#csUDhVx9Nv~+z_GJ2{b2X3mR^O-)9T= zJG9tE_#NsP9DX+zgcUjvzr*cjyacwKan|2AP|G2H|Nn*QEX;mve#fvM8W~{w5q@Wd z6nLQN8%SD!`W+tjJYegYME<2gt!HGAVo+tyVp;bz6=8P(s!%*F$9cZV@q-N`{4RaWZdvgDOWfo`J#b5wh56;hE$Y2Bs zA8?w4uH(R-E(}1E;&&j+v>-zxjNtMaa;gg?_nLtYp%)ba-D+URWNMSjZ^pvavbPfD16?nuIMP)!m`mRD2W-&2CJ3mABk{~_f z$TH{1F2_)vBu5=zOGQ~zFI{OpO*K&&SaHw5$bj&VEhxTG{i6?=&PMnLx*!<5<{We% z1!Nh99=u-QV@5b0d{7E#)Bxf&&`blk%3wTK$igfmswmE*VCiq58(^)ZXXfYUVisHL z=2jD9CZT31DFJpMV@9YIlZ>dErk=E}m#M6xrLT@-l1`{&SEO@Uq_JL5iMyenouQZ* zGfN?8o#20l`2VMwRhd2rsWba9F#L}dU}yGYU|?7RZVMvh{Gf86%LbN!CWsh7a}g@w zwNRR%{WdZTS`6CYfqxkRqjZ9qR8*Z~Eo|bQm8Fe6bj`gbIAvzl-qZ_s(fn^<20FXUj8Vud z$4yDqHQCN0#!vRn|YV`9Fi5rG=#(m|$RHFl1n0s%8RhqvK@o1a)vACxAi5 ztQbL~WZ+bbF(!=g7ijenXva3B)&rfvZD43FY%DCQ$f(S$Xn1_j@xR*`RasjZ`74#+RB2;f;A~j%Ti{nJHhn3z5OpM)9=5a0Xs$p!~YgcoJ^qNJ9!raGXv^9Kp5>% zXb_0nMS>j5#lWl$@;Ru+2U!c+!@(^8S$PT?)&q?`vk8EPKtZys7Yqzp6-|XrLF+3N zg+-YanK=JxT))nEhZs#x^fDT;FdFr?|ND{h?+2(2>CEt*Nt7`c%U*Lf21fW^ zb7#g&-^D(h7Kwz!gCk99P|CS?Cdz_G)XolX)Pm36ppq%H;0(4s;H8h z8e@%;nwpZfJvY0!tZHaZVq%W1x15oR2!d5;C@-QWE2yO@q^SiaAbfEBt^D7DaW2yn z20;dUP;$b0zW`#?5;}|tJ|7b@`vTc-4(fl28w;A)F@h zVnuTevEsk6AnN~r24998hQCaHpgq`J26k}#fX;(wW?<2VEMw({uC@dXYcmUg zR)|1`xIp{R?HQF#jX^V==Ek5^2B4Wu_E;mIF5BabEXH-l0ljvo|9v-7jV&oFiH|QS zD~V-bVn}CTVEo9G2tGr?1XMmjQZA%?0`GGKwK~A%0V0h;u1VU#z;VaG(AZQ_RFGX% zTvXLmHJ!2R)~$bKj9n!qj5p%h<2v_7?MJeMoq?Od1T+l;vja5l%?&C8K_}ON?SRgQ zfQxeu22dVg2X!ROP1Q|VMOj4^MHSO;-D2zl+3~N8Q3Ps-cnP=;F=b$2QU;f`+zjrZ zSclmIDmcJ?0owtcVnNiX2#-O+612Y-l=8VjGg!>R#=^|%=IYAq;*3mZ&xV{mt6o^h zR#?aw%NYA_@xR6W=gyr24Mi|8G88f}Fv~N&VBlnM0hIxek{)Ln04-h-i4a-iT z%#&G_DULyaK_0Y*2;K$TV`mu;GZ_ z2Gre1;ljk=@c#>oCDSnmB?c#ksi0EanZX5Kife=N3pgEHfLewY42X0r3lfk;63_z) z=z*3(LWi1#K?1@M0npqz0|Unw$ifs}297VFR*Ee2?g>`#y=Nd91ZVAu|t%L!x%0*5DL4hNP)RX~BGf*E{>0QLf@ z@PY&%I0}?O0?H5pFM*v5jtrb%KrI#!$;!a_Wd{Q&^vuDcVqj91ffKx9To!y2BWQ^h zgtdbKbbN(6SXP5Ug~1W*Kn?w!pcPG^5C?}TxNm~ocx4BTg!3^mvI{D*D~m#^U~zU( zwado@>jr@OGaxchtBLAj(FzVZ` z>R`7`sCJ8-W@Im9VC}48mg=Xk@0V((;%sdoWN$Pr(ycndmc4^97IglIf|RbNKFAo5 zar&CNQVJr<2LJY&FzxVp?OYme7~rZWsiPF~ieFt=|DQF5Dviks3q)URPZq&`i znZZZ)fOda_PU|s7;c@vV7yZ*!R@T*3R$dRKneM6|vi!GCRZ3Dy6^#I`O+#~&84fo& zg4T5+90yuI&U6RnKm$W&b8&t~6sMp%Y(i18e+tw=Fo!YsS{_oLgytkL7hJ!IGB7at zF}-CFVo+dM2x_h=LO1I|=CNSum>rZT*%=TO3$(&RG(VxWEJ6T!XeUAoblMVJ7lBhc zVw4zEN5UEauvQXeJVF3mVS{2u7*uJ4_Ia3?ff`P*>oifrBi_p^z&9b2(SOSBDU35g zr=RF*YBJ6$w)62VPWk&8bSy5DtEPgOf+m=N^e;hS&;mM}h`|#y55VBh2wMBX%)s?u zkNF-m69Y4N<#-loO@cmjl_{vH1gg%#vs2(Y5%stq&=@}xwBZXHx)i^&i$ReACZedn zgF)lY4hH!ekva>^>ZZ>T0^yjv<=z($ezsGBTIIip1nuBsDBml&v(y z#Z>ep<&^a`Rk;lend^7TiSvoe%8K)e%P}x9XoJoIWs+n7EhcCL-N6AFErQ&^!3M7@ zprhi57>Bla5dv(WRKo@-%D^!W-JAhV0-&B2=pG+XGeeYt4O}*XHm<>X+&thOw}GLm zGH4~dnyCpWGlI7G2r8qle`joGWs_3XmrO}ZOELE6W}Px6QOn$1OUv9mLR3|nzqhTe z$3iFK@8=v%mDwtq)<)4r;KLk2{?q}T!O9@dpvzDN8YO|PY*hev3K@1VfR+8+Zq_c_6d7PMI(G#~^@3ku-7({?a`maaqAcFKUZ&kBMz@T-b|yEo>b z%L;87(S3_Hh9KS0=$j(vZ{%fVj^^vHP){qAG-xZtncA9$fPCNC)YN6E6ZtP!Q>9l$ z)5gf#2y_=7GlSTF9VTriNd_YZ2L?X|@P1E!h5&FRfcASDUx4iQ^nu4Vv>|}-Fm%ia zApjj-0Qc=d4FM|#R_L(0Hv{XJT@0=aRt(-?8(cw~$o&~y8R8jS!B=nSgGX8T81xxj z!3s1$tCSuvXn>Z_Ff&{LF+eM31VD_!oeaic^TZj9q3az%Th^5sSicw;vVza@1+Dmp z?hUqMLhKO+ua_1Dg|<3mB;80%72bygZ4VX(Z7|_u6crHz9mC9|E$fsU;1X{wZK9{9 zCMc~UWT2N{Bxx+Z&Oso*$XH8UR%u2;_`hd5+S)og+S&ogFv2n8-D~ZaB^Rcjq`5Ff#va%=3sQJfp^Ggeh2K-P}=22D!6aQ9=OK?f@$V!6` z5@lwP|Nn&v)L!FekY>_{w*4I+TyDfB={s0zyt%bKZO~j8S+8? zlmRc{fo!z}`BQ>;e}W1tHU=JW8iFlo0r^~l0kn!&kU;|MbI1Z45zzP!x-Z$~7}d=| z?H@K#gvV_3j&tj}9^uwew$VfOQ|WC5rTsT$?G7de<^NxpOqui;K)dstK|WDp zPzF0i1nvXq$_+)V=bV6UM*yut1|5U|>P29=)xnk#e9Q+Zu`=pdCAzDtyC+&%CAw*7 zxFuQ{SX&zySX=XGd1u<&XL@VF=qhW|G*fFZ0cwlD-O0-!&7cn&(~*I$FWJEW8W{!c zz5~&Ga968=%5gOYgsWvh0y2<-T}@yo1Ed^hU=RhD**h3OGl1-OK*sH4-~*4~tD+*OrW*cu=@qF(+;$<7PRaP zbmk!V-cnOzLD)Gq85=mK+n!oJt(Z|SI=%E?U@-$D18C8?5|bW-Ea+|jlAQJ%I8cWHkjS{5Zf_9(1Z3Wc3|rC5}3D?2nI$pHWd%(cyrR zk*SidnLrA!rlqHDR;99;vw}0D@;|xqd|4YAesxVl1xHB(Rk5T5Ek|Qb0i|N_n4R?h z6ea;CJq9y|s9g+74CV|Lka-<*&^QLD&87rO%1V&5Z4O>3#SdKt3tA7X#J~y8!NU4G z86ZtjB>~W}6`-}2It&8fS{)L_NQZ@KGnzuzP%102gS`P-O~uCqI!qokal$BI=wq!T zm?`dHYG7t-Zf$F(ucsAc5-Fl%=B#ZNVW%jnY#=RfqAsTD95+W)SzkIx+r&VJM^nF8 zSAkDW$3Iw7OHM$_z*$StL_?B|jZH?&TuI;CR2HcbXai!ul?aD(GV92zU|xPYx^1*aroMNvg| za7Pvr5sb?EURK%ynLJVo8dAol7W(S?eAP0HbN*ct8J|sL+Skg!ejzoL$1qE4=Q2c?MQeD3N81s z)zF~Di?F?tVxWGi0D~B$K7J2l9Dp$bz>J*?kS3%cgBWys5NHJ~sHq9@K4{+7+?bD< zT^y8!AYMjmG8@<>Iw|Y8N9gXiOLWua;^dT6HB!{}GLu(zPOvdHH#asmH|J6JOtbfF z&X17O3l0f4Vir-86_U3IG&GBHR4Fw#76K^~GByX*eT)p&{|lHDnUokf7<_gya4^8n zhU0|AEwptAj$6=FHUk4cv~>t7j6f-s6&k;wfm=|K1UgVy9Ci%NqF0yd8J|6zz+_wV zu^7CumzhE9{}(1breh3>4EhYVpcTao4Dj37!P|FsFc`pN09rm_ivif;X#)m9Xy?~J ze+=vx@D}6{2zAl+GM6tj)DqD$GSU*!GGsJ1P!~`$Fi;av2c4+_x~sl`Nrwrv zhfo)EJ1c1WGw9H}9SorU4S4KY4;DMniVhq*py4HM2L3OggvkKSUt*vZ`+Np5hV=|$ zkfrJI;H2ot%pebD>|_9?KhQv!7E4tVCZiJ=6lMrblmSMdMEP$iQmXv_AJUHn zoiWbb06L4Cp$v4?3|w4XNDU&+n1Ld$0vAt55toLGry+|oy@!c2WWmLucYA=%XJ@Qs zR0hxQf&0}+?s0~zhu-Z0RbK|ZqX4WPbaxq8oQo|}3(iy047$)X0%|*g zj;sM~;8g=}$u}@m1T8iI^@U+$jHV`L=IY9(ggVBmx)L1X{6bRPro6TWlDbMF_7;pL zIQq!q@)AOv!h8Ze#uCz;!io}F=29%kg9ZQMQN{}3X~qW@*Nlj`2F2Z7m^kw#P#nS3 zgU(ln#2sS}vN-cGsCsth%ka1c-E#sL4np4*xIU2mJK*MBMG;>N z7r%xio`+=r4Y)YSepnh;V@!kId!Y;}-a%`cL1RKl`fkDXePQwh-P-{6Cp+_PBynlb z{R~j?yKr$GCTV7nKN~@Lk}(5xtUEZoK;j_#A>wH$;+jHg%n3v|*LG_3^MzysPy25V|+Gn$$! z3%Y{lk;_{c{oDN`Rh;9k9gOU)t?eaB_c8f_CXrSGul|DK z3}Or_4DFyJFd!iYIoN^&Ui(5Pi4Xw=9s5NHAU8h2feoF@1os~xp~K1`4&G}A*;@$O z5f7?wVD}w^b~%Fjp`cyzN^0uLpcy3OQA1-^l(8NrA0r26ZdQIjQ~0={;lEqZF*IXc zBP-~*;lDI?Y-NEDDD5zB1ce1-(^qhsg48!ml0s~tG!Hrv0F-B#-Z6mAMK@*01+@&# z!26*gM}05|>|ij2hY)o61|n@CCnZpW$q<}ER6(nMz=gf4KIo8gP)9_BL6t!ZECy-^ zg2DyV4pcJ*tuZi$)xDyS^=QyGi8g4E3%UMflr5}PvBj0<*6-ZR5A;*QIIuu*HSRmkYHkEls0hEFb=g174&6g_t|H62K33QroFlcZF^(+zSt|UYvK=>JUx(Ww_DEJgW(BLy!WyQ(=$g=iJo zUl!H(GL^J<((+IU)GFo)@Rc)AljC9Mk{36Sm5tQUnWJo`t-#C1ucoD_9I0yvE1$q| z+XyZvKm#d;;4@{GgZ8;YW=&vyZ)mZAh)Za}f$%6s@<;3}g-)wN_sSzm5@_cLyoF1a zfek!Wu!8|~gC=NE184w17MeRiWeRA+wd4iR8Z}Aqc$k5qxtY1Cnm(hkxG`wqsJSsa z8@s5OJfpHYcw->DvU#1Tva)Ew%zT?3oBSDtVhSpvbqmXEdTh!T)ICvSXXR8oafEU9 zztkfq)Hzr=RG(bCcI_JI(h$b~-~Q_{o@0_^Fa)i#lVyOM(Dp`50tZl z%RtazF=*ZCE(RV3F>uW8VBpc;$pBi32)YKH2fE5mTuB`|NDdmOg%y18XoqxkV4dtM z9bpk>K6++`x{;A8I{M1Wy6hF=#eN3Cw#p)^#`2);jH*sCm+~S4jdet|^^5hjMb)&m z6MSM4XwpuA zfeAd7AZ#pXY;MdBI#&)BwXRd#tLIel$qB2AH7u%hpThLyU+R%V;*zYa9BPlRT?6G& zZUzP>IVN5PP6iLqbUo@C6R3L;&Vv?Ih=d89`G5$3S5|^9krr0gXH@2ARNi!S`BXr%bmy!E(+#F446+RB42BH7pt2K^ zuCSGz7;}%%O?`+!#;9GO$r4;IgJu^&Tlhd@8=ynRVVj&GV;`WtHfVb)q}!wq8uI|n ze1kgK){Nj=93cr$n^9C*610a5G&l>IKLCx@g3hb5WVBE7P*?XzvuEr=W?DHoSoMGi zMjmyKG&{Rg5B1Zh)jd+}?9x2c_b}=(y1Ljp+q!^>f4dnN8SMX;Fl93FGAJ-qg340V zG6#BWA0nQh1qea_I$sBgC(r;8a-e`_-axe{WVx0oIE8^~R8VaK2?qu6U9F0sBa}h4 zEBK6X&;eay;9c#YGDTFG@g=W}nYbPLe4amR7(1Xcf-Ujtd z7(t<;%*TAkCvb{~qS+J=0eMOODO1?^T&&G}1ew`owM=+&QW!n|9ZpeGXAJpwIE7P0 zMuais@8?J@Ycmrubs0fO{4!5w0-YSXeiz1`PYF=xO#-v?hVZr)NQD-X3gp>VaFYs} zPaxh#PXVA*57}7_T2lww9LRdCNfKQ^m&(P2?yg(h54m%TtGox%HGcdux1U_ewg^8Czh(U&-08~{&PD_ED?}(VKh2}zp*YH;OG7Q|{ zV?`j7X`nfXT@1_>`C~vP1?{Y(tuN(9PS5g36}K?8=O$(4=TwEuw7gCS&NN#wa%> zFn$iBPnN8*vg{&NW>yY2M@>gviNBw>Z)a3!k(U*e0G;Q|z{DWLkB2h zKvp}0x?VdNnBct@=rSP0s47P50Gji_@doO~FfxFqqd{2?a{V}n#Rk6D8YIgNW`QOb zK#f??C@^TH4X9!k1T73V7B&_(hHMgG1UD}P!*}f29^U`YwV(01odcttT^p0h-!uQ7 zOq<3ibMoQCli;?x37t&|Z0(EdF*mcc;+9XJH{Rsz<$w1r>x-U?Kfq|);X_pWi<8)A$j6vi7QRXbB&kV8* zstmdeMW9txu-O>UsaT-7Z4eDUOGXwp`VB2?~r)wJ1N{ zm4V`o33Qe&Q!>*o1`!51P?;kH-Br4SK?r=HC@hsjeTaxKjJ5$Zm4hQpj)524XW79Z z2cByKMHmZ%5cupTNO39-IWGc~OqCI(4k%e7N}bg_a#GBGk#ZKk28`Y_VrH#pT)IG6 zO-=cMs0b??M|OyDkd?w;H%8En@(tTm6t$I9!2RqmOww4#)IsB%g3$3yHs*`a@l?<~ zqWqw-7*L-~fQ`W!+6QZ4ie$XP^o~IsG$Y5%fH2QgwD`7ut@ z^k-mU0G&yd&%naK4qE8d4^as^Q=A2KAS5%xdzi?1Faxwz8#J-NcgK;Lp&oRXC-{6w zQ1t{l4W0$Gx*5ER7c$cX8wG=2fd#tFNY%8_t6#xfQ$j-1TmeR#o0~K1Tb2g?TOlB? zBP*jTFCZYVD%j@dksIr^ z2&^D)f$l{B$4Wm$DKi6Tq7Iw@LA_qcF@~UcV!H!6WD1m)*ud*aU};HENsme09CE<7 zJ)<}uGbk3d91Rq?yhWtU#HEa-M7+5a4IIV%6AGDZq;*WB^ySp0q}Al~rA&0B7pfn! zWME*Tqx;1f;O-X(ZeupGE zM_3{R9ifRxdpj6J?(ATYx&s<*l>%1=wV=U93D9w>ps`tyN>J}modHzlX)!2*S0dEx zV9>%E&*soVkPW#M1P{()2@qLPB_UB|VL>SYBOwb7F(n~UB`60ocy4fUaPo5VI!LSV zaB%SO@H$9?)?_gMcVO~nIKX^@fepNh*#ms~i6b+^2Jp=e;5`7KD;~h>?Lmwk41AzF zbnonBU}gY$4ZP|eddmao5JEly(A^0JhRopGjqxtR*PrN8Q{ysmF4{VLrmvG7GBO+{ zuL7^VM`F{r{D@J4Rz6CCZ0#Mv?K+6@-$%)`%lY>E?frCMxfrG)GfrG)HfrBBQ zfrBBRfdf)(o@W57WM=4xF#V~T%1*$ zU7cOsd@X2y!ykw@!222+AWjFB9qvrF3_F?kFt9O5F=T<<$f7R+F7i;%M+TMX;35xR zl7q^2aM>3CD!@UdJGvib!k7$Y@B5xN^$t*)V-7aSRD@ERm2@*B953P?V8Tl+Y2^SC<5p z;s4GuSuq@-byzbqz{8puIjkAY#o5ilJ~IDzwkX;E4kWC>TQv+2VGT+Te9SvQjWLF1 zP*@9r)5CcNA;|imeh33ppMu(bLJay0LJal{LJa;4LJaYs;b#URNWxeTQOV2@0AdvG zU=V~BSGyRv7zDxDyJiOi7ufjs44@NqK^Iqp7GQy*1JslRo!c#pT#$jzJz`fkS8J0| z73Wd|6<+0>P;cx2msrknib{!YFyAmR!1m=-GB7iM_T@Mbw+9B4Dj2|N0o1Mlokp(T)!7^MD( zERTS+Ey2YqG)BC|m4(GrM4+W7GG}q0Q%#LiAM-j;yAoVf!Wrw@9OC00+Cb$HBSRk3 zFUD8Q{S1-}t)Q_6De&S}SX&cx&l9-C0&imehcssR!8Hr6YoFMmEoe>#cng{nlqJ}} zm+OE61~gtH3=Rr023~M~u?FmQaBCIZf(H8%)`SLE9*h-m|CtC`XdrW#enC9vBCQH% zFfcN-F#Te@!radw4)Ggmzkou&aX_Pxw!H(ezfgJypgEk$%z}(ZnJYkN(1YR(erGc? zsDEG&x)1<#mUce_=)h%WQ1b=U5P;qna2_Nb3rUg&hM>iglR;UBxgs5s9xgL|U~FZc z$-v9d0IEL_XD)yig@KX*DBPGpMLLKBF66DB}xG-#20jTs41dm^VLI&hCu!G?)2l<7u(2;Oz2CZ)gP2qzE zsMrOd)fArMXdhZh#Pkzf@SqW(HN1^XPncAh&oVGGu!B~1vx3%Bf_qrt18?DO2i>#= zK0g*TWCwCT6R3{?@6v)9v7pPL4Ge|V&E-KCW?u?SE^!Y`E@672e#mkIxI4hW$nb>e z3F9H=iww*RmZ12BryT}R2tkYiAJokN*^Yz7UIRmr>5MiJ$<<6xv=7;W;((E18q*WT z5}3Kn3~+P7X>vX|(Sgl{Cc}7$2rK+H1yFa*rf!z9lU!ehMh8P$! zLaJ!StQOD8O3xPNJ@c)Ki><%`!jQ%EhVdQqQ3f`KNECM9wlPu!k6k=re8aqnL6E@?^x3z z%}?5}#S@HS3kD{J8BFIH4=}$4_Zg>yT!Feb2b9v`WdW#|0#|XMy9yaWVF)^N78GJk zpz;VFx*&&wM_fRI8=&w8s|Ce3s1N}MKJ3;*CeUpaAhodAV2%a#7g@gSVBop~+V2A% zv4D;oLYi6V>xUV2;PZ#1iBtro&oGttb;RVpeb|cqy;0^0UBu;8EI)58RiSv z2WdnlxFkfu1Oo#jBO{YD<4R@&24=`PitzFWv^xoWj-tA`IAcP*ax0TF-+j>i!3>Q5 zJD6@UR5BlC;AQY)0JVt0g$WnKd-K&@kN7;!l1F`zONG&XaW;TTIgcx)*U(&hq1 z0|WRlVsK!CF3|*6S)c@oR{kUMGZn^7$hJKb4Um2Ke&VB z2pa!^T;l?|;DQ(4q!)n=6(C2tFnY(e32D%$3CkD=OC-1x1s?YK_YyrOkkg7YgCv74 zLn8y|G;eTfh1|0PO)H@5vB0$*m;v&&6oWqKVx8EX3@YHlRRKKk0jdK)D~U*LokLc| zXn^Lda1QaXqkG;R=KxPWmY`tXf;q->9Wz8g{mVBD`&iPU{YyJo{}R*?fMys_mG1}& z1XxK1S(?rWKVtzjqq>6u)Vl5X!_|uTaHYoi6)bxA&ae3Iz;v6@7#!zZ3~>ygX&G=H z;9!`~zyZqVpvsH`R8WKRICOLjG-d`ZI3a^+pwb#N=EMc=elj3NZHO5m14lZ1gbXx} z;L3E5VK+-Gc#JF@5?Y`#oP`0D5~2ALoD!k)8?k6f5_B#dsA2{UeSiiBAj5Y=4v2Nz z)Ysc|8)(_<$a1=hNNLN;YDRU@VA#PR1S!LX80Iqw!Qxg37PrtbG0?CVG;Sf| zVW7B09_z`%G3Jfq9V!pXqMAjPx~D$c~f!Sn*kW@a#B`VM8Y zFsLwlL)okhQp_z-HXDNi^ExP-onaC4LnxbrL5$@(l+DSI#_}7==4LQroepL5FsQIT zg|c}W71-pUY(54PcF=eP$ZY})QXEQ9abboM4j%}ck%2*l%N@#QWKiMagR+?z)Hp9e z*~|UBzHtDnl_tDnk)N8AB>V3RtBN*j&)5 zjHL`k3?O+0hD3%GhD3$}h7zzU1%@<+B8Gg1Tm}UOH-=1xB8Eh$Z7B??38~f3c%r= z2{tR4A(cUofx$Vypt2}4J)=ZnrGk-xk%@w*ldpnveo=v*f@4mO0$8e8p(wRDwWusL zMNh#eGd;1Sv?#S$Au%Pfpd>X#A+0DsSHUf_C{e*VKP6Q`1Jy)BQ(YqiBV&b-j8r5= z0Y&*)smUb@j-@3T`9;N=$mXV%7L{bA7AX{^re)@(rYIy;DnzBGD0t?jlopp1Wu_ME zD0t>2>nWt=7b&FXWhCY$r=}hqrsgH5 z>M_8>Jb)pGA(f$mL4hF{9G=At3?K^va#AZ4f)n$K85o=x@)>d%QWzMV@^ez~X;gqK zwT31u69xkYGX^6Db2LL0Kt@@ELfF8}2qXzj0GN(Jn2G8vun7zdVc<9{X2@j7XUJnv zU@&ITV=!PaU@&E12um$0&dkqKFxE3LFoiiAW&zBvx^O3hj0brdlX4*%L8U1uB0(iHC~bmjhhT65DPbrFCm2u(4N(Cqtw1GE9=HwwC5%#VNeC%3 zA*ClMe|j?bFeotigG(+@YIg&B24pg*u0WUo3S#t}VaTAz0K$-R9-F<0#0`p&OokkW zM1~}A>7c*>N^&4~fNCI+j~p2S89?k31}g>yv>-2LNCubQpjxUJbXOa=Jk|pz-*g6j z27d-O1|J57kc`Y?1-JaX5{2OWw370~qEt{C&dE$p%_~k#Q7Fv=#dAqUszR`*kAiKW=OfDMD{1sRiAmYA87n3R*MP@Y+mp^&KH<`}4uSYo9Bjq2j$ zqRfJlV!h(b9KHOabbWs}AM}(%q&M&x2&>m%1qdh(LG=-48SBB2&rl9-2P867fkP^Z zA(0`OA)7&$0aPgDG8Dk;E=Zl94lan2!C6WH97~{<1E^&IDh)y9IY>t#Ln*XqO=qZN z$Ysc5NCele#SDrJ3?BLA3Pp)k`9(>I$=SMDrMU&5S|Y6|KfPEXIWbQmC$%g!N1-^g zLZKkDurxJAA-ys;FR{3!SP@hyfO2^{I3Z_39pMaZ41pRrnGDGcpymmvfso4pszpk3 z(i4j^6Y~_DD~mF7ax#-abyjXM14AN14!Av21a=*$PyqP{6ds`T5Aq?XWdy3Tiy5jI zQo$LLAu*>UwJ0yKBvm0NzdW@lIk7lZA+@+FwWNfBA%!6ytO(LD$YUsF$Yn?ZR}>0h z13*nChLrpgP<@?Onwykbq)?Swl+VCW3{LaK;C2uw7vj)boRe6bk(#1_rZFlh+&9j zh+~LnNMJ~0WM){*(8AElu$N&P!wZHshCYUFhPezY8I~}zFmy58VrXWV%SjF&_;S0kzhD8i(8BQ`BXIRIO#E{G|fgy$AG(#%G35HV)=NZm0 zoMkx2@RA{o;WEPohKmgA8PXX(Fid2)#&CtgY zjGT;I41XE^F>*8VF!D0;G5lv_VB}{MU=(CzWE5f)W)xu*WfWr+XOv)+WRzl*W|U!+ zW%$AHlTnUQo>75Okx_|JnNfvNl~IjRol%2PlTnLNn^A{Rm*E$~bw)i#eMSRDLq;P; zV@4B3Q${mJb4CkBOGYb3YepM}M+}b{Z5izt?HL^y9T}Y%of%yiT^ZdN-5EU?JsG_i zy%{zzY-IFd^kwv8^k)oU3}g&q3}y^r3}yJu@Q2|E!&AmE#&E_6#z@8}#%RVE##qKU z#(2gA#ze*>#$?76##F{M#&pIE#!SX6#%zY&j5& zW9(;~z&Md{660is8w?K_ZZq6rxXbW>;U>d<#wmQ+*Dl z#K6SJ#KgqR#KOeN#Ky$V#KFYL#KpwT#KXkP#K*+XB)}xdB*Y}lB*G-hB*rApB*7%f zB*i4nB*P@jB*!GrqyRcgiAkABg-Ml3jY*wJgGrM~i%FYFhe?-7k4c}&fXR@_h{>4A zgvpf2jLDqIg2|G}ipiSEhRK%6j>(?Mfyt4{iOHGCg~^r4jme$KgUOT0i^-eGhsl@8 zkIA1YfGLnEh$)yUgejCMj47Ncf+>aHbhpCsTkEx$&0@FmMNlcTOrZ7!qn#MGpX$I3wrddq0 zndUIfWtzt{pJ@TpLZ(Gbi?Cnf5U4W!lHIpXmV8L8e1YhnbEr9c4Pkbe!n~(@CaNOsAR7 zFr8&O$8?_Q0@FpNOH7xUt}tC?y2f;!=?2qHrdv$6neH&%WxB_7pXmY9L#9VekC~n@ zJ!N{v^qlDh(@UmTOs|>VFui4Z$Ml}*1Jg&QPfVYgzA$}d`o{E~=?BwKre93Inf@^S zW%|eTpP7M~k(r5^nVE%|m6?s1otcA~lbMT|o0*51mzj^5pILxekXeXXm|28blv#{f zoLPcdl39vbnpuWfmRXKjo>_reky(jZnPC&dW@Z(JZ4BEPjxcOt*vfE}p^4!TLp#H2 zW>sc2W_5;R%o@y^4Eq@NGwfm3V%BEXVb*2VW7cOjU^ZknVm4+rVK!wpV>V~DV76qo zVzy?sVYX$qW432@V0L77Vs>VBVRmJ9V|HiuVD@D8V)kbCVfJPAWAf6y~YS)0n3-&tRU(Jd1fY^Bm^6%=4J%GcRCX$h?SoG4m4UrOeBimou+m zUdgUR+^D+$#3|t_zqXCq5VRy_;OfJgLV^4(8 zY>r7qsb#5biC~J|F+V*&FEyJz5khl2CubHVm*%GBq*ibzBiLNdDfuOd$;qjCC0xmH zCYwugVo`n`TMC47NiNDyEMa$rSj3(Rq1jx)HnF9GDK1yIZmv`~lid|!J$ovIW^;v@ zm_5@og zm|_hr%FIh=Ed`Ohp~ybrEk)+Bhe9Hny%a)oha=p@U5><#L}FJW*lbZ?ud!8uDXu7Z zish<;Ga>#mcZ1LtZmj+p`9*oG`Cu{>OqPO3h`ci-w;MXULitdAE|A=B=wb*FcY%hN zi!qdM0;Nr%v>B8(htd{M+7e1TLTM)`?abu}3N46765&jCM^~^Adtxe>=Jp5onjq|a z1e+%qDH-q-BXPjy8yQ0EGcttOXJia0mNKm1BkuG1`zX&4WQ;5Ld`RTgqJbYUB*UG^Npb9 z8bQr9f|_gY%36}2mtV}Al9^hRTAW!7=5aaZ6l5fVnVgAv`6a12shNp9t_8)JIr({D zVGh?4sJv%Bl*Qwpn+Yn$!SXzzNQ$}qb5qkH$^|p?OA=A+Vg=j9;*?sF$m*V$o0|v; zFiR75SBMcTQK=<~%&sMgtRWexC5bE`3t7Dr3knk1d=hh$QWBYbOPTyinIbaTp)Ozw z$Yc)6$Y%}COwUbZ4oNI!hq{J2AS096IU|!fpg0p^jiV(G$UK;f_@N46e6B=zK=7nO zoCEeAM=I3QoFM;zg+xjr@-VGnK~}JSmL!np(m|eMO-aouNo0qb#Zm?G8c4DP>@|>K ztl40%<$%2gaio(oQ(h@kMJ9VbB!roZGVY1yjr=iKXmN`?Kg(nZw$5H80vpxsQt!J`;DRghn7ty#!&woL+v+)+HVZC-xzAYG1Puz zsQt!J`%R$sn?UV1f!c2ZwciA4zX{ZS6R7gu>Q2R}x_M1ZOH-*{{Eu&3Lq4t|X?Kg$mZwj^F6l%XI z)P884Zej+t&kU;H465H8>K=2bygAf8=1})oLfvl(b-yK4y(Lt=B~-m7Og+^7mQeRw zLfvl(4L?h${gzPsEurqWgu34n>V8Y8`=Kpv6Gy21j!^p@q4qmM?RSLQ?+CTu5o*69 z)P6^({fj+V2dt-x+GZGgKbhCNY7wNlc(^5)){f#KZ;a zJ{PF_T%hiAfx6EH>OL2!`&^*zae=zW1?nCbsC}+b_qamc;|g_;D>OV@q4v2#?Q@0N z=L)sY6>6U=)IL|J`L0m&-Js^XLCtrAn(qcR-wkTM8`OL^sQGSC^WC84yFtu1g_duo z(DKdI*o`eby(qCPm8~2?g@c<>Y~^5zGaOdMaF)YZpnAm66_PFuT_New&=ry%4P7DW z(a;r=9t~X~>Cw;?k{%6RA?eZ36_OqeT_New&=ry%4P7DW(a;r=9t~X~>Cw;?k{%6R zA?eZ36_OqeT_New&=ry%4P7DW(a;r=9t~X~>Cw;?k{%6RA?eZ36_OqeT_New&=ry% z4P7DW(a;r=9t~X~>Cw;?k{%6RA?eZ36_OqeT_New&=ry%4P7DW(a_Zy96yGx&fxel zbae*DkD;qGIDQOWox$;A=;{oPA46AXaQqm$I)n3rp{p}EKN`9^gVUd(E2Ir>=n83r z8@fW$yP+#2y&Jkh(z~H6B)uEDLejgTD&Ek~@qHAgv=K14!%0$Nj0_;HBO?Py>&VCe(mFCSfV7T`3?Qu|Bk1^vkpZMNWMlwo z4H+3gT0=$#kk*fp0i?BIWB_Sx7#ToX5k>}(R)diNq}5<#U=A)Nj0_;Pm5~9YwlXp> z2d6e819Na{Gcqs-r#2%4b4yV87#UbV^;v*R7b61;aOq-XU;$3OMg|t()N5p50ZzR} z1{P5BETHCDK+Us&ng=Nbj0_;T-pBxw+l>q$x!lMAlFN+@Ai3Pgz|o1twX`T7;uuI4 zH!^@^aU%mrmNqhgWN9MJa~q6b9Dn(dv0!SF6@bVi8&<(hV1Dmv=J9*Iu#;>U>b3P zMN9IF)A->mh$1w;5l4PrsvbxoM@e};n88(&QIrZ1<4nshEdmR2re&5v#5jsGE5Jfr z#i?bfc@So5W_m^mn8}%!2{n)>5$r99wLFl4PY8z>G-zt*>{ zQV*(9Av~T$Z~#F#P$^?54?5Zk<3UD@AUtmHfC+>x0A`~&4?JQ8k%gM+hRky^N8uTw z@L;x==4FCvR%AIxQxu*H3J=9hM@tkrCkT%x9XwbD;Rqs)!a_uZkOx{JLIQ{}S%?68 zW)|3|Y!FHyJ+&w|F)t-4rx+^l=>?I8P~70|Jw!?X%m#OtAp)SFF)%SUfbjT1@n~Xf zq?ePQoa5vk1mzo}@lDY9W@vnKG`8eo zzX_WCCeCQ~xuWsW++&Dlzag6ahG^y+qWRAVO}`P`d`RrLASFiw6BlSwg~W}i3(RfY zNC}<`lE#uNi*h*OqlyqgaLRx%!MTnTtTZD(KN}(lHU(aCfro?n5!o568;K9rjKl{U z$%jx6GM5k5u!am8BdG@4#RVqyK#NcWAWU$v2o~UmXaTeN;DfthF5HP=o*?o7GgyQR z>{JL7>?$x5$#O8C3+zD%6YLi-lOM{gEXs)oxeFYIU>QDmXo9(1kemck!vo4X#s-#P zafks37eM$3XYhe700j<`a){?aW(mPU3}FIX2;pG35W-v$M93qwA_;=61zU+Eh|n&K z&<=N-Fw8ATQGuix;b_p}8Ab+X1`Y-;1_1{4|Nj~I!7JZ+7#Ns9hj=qFL@=l@*fKCO zxG?xIFf#Zt#4<24G%?IzU}TuZFrR^uVG+X)21bTm44~EX2N~`$Ffu$~c)-BO@QC3N zXs0~G69z_xXAB=07{M!67#Y4Xd}Cl__`&dlfsx@CBNGE7BP*ja10$mvqXPpYqZ6YO z10$mgV=@CHV;*BQ12bbSV*>*-V+&&o10!P_V;2J>V=rSr10&-^#>otfp!E<8jG*-p z42+Dk8D}#vGR|e3%fJX)6T!g9xQKBP10!fn1Op@E8pbsYjEox?H!v_VZerZTz{t3T zaSH<@<1WTs42+Bi7!NQoG9F<(!obLQobfmVBWV2t10&;k#!C#0jJFtXF))HwJ1{UZ z-e-Koz{vQ7@d*PX<1@w=42+Dg7~e85GQMYg&%ns|k?|t~BjZ=buMCWgzZicpFf#sS z{L8?|_@9Y|fsu)WiJO6uiI<6&fsu)yiJyUyNsvj9fssj+NtA&Rw4Q;1kx8COk%1Ak zf`Ne%v~q!gktu*FfPs-ImMNBjktvBOiGh(RjVYgjk*S=ioPm+4lBt$~k*S`ko`I36 zk*Se^k*S%fnSqh1muV6MBhwV7eGH6D2bfMXFfyHEddt8Fnm1-(2F)BZFflhUH!(0W zPh?)sz{tFTc{2ke^ET#f42+R4n2`atE{l_a z3+IX~E(S&?_aFrZ3-BrD#Oni{Z7B*`{ROv$9dxM{PJ2jqnE(TmufLB1gI$onuL46J z#qPtuG7Zx|YSh=b+%z$EBm6h?4L0i_U-Ea+SqM$iex42%q{U^O5!85y`4%orFM1Q+QUVYtF@hv5ms z8-_0oe;8R9r5KgKWh5iR2L`a)K_vpnCPq-12C{?;BF`iPrQ4wN1khPN3`|VxnC?JC zm|38-0+iN((k@UMROW)590KJRK63(nE zp!5!~i#XU!*do}<*p{$eVrO7q#ttg885kHjN+7y9<}ffZ)G^pFH!!bbp3Xdxc?$Df z=BdoHnP)OjVxGmkl6eL5YUWkUlbPo*Z(`nvvi5`6^&;n)&oQ56p2j?bc`RKg<&DXB8J5bOBj|iEMr*CaG2pJ!*PcD3=bI|GdyMVWQ=57&bWs09^(V> z8nk!d^=07IWhiUQIGK2u_?QHsYstjG>&VoZ(wQ=urZP=un#nYqX)e=zriDz4nU*pw zXIja$nt_o)40LKbg8%~)Xmt$(6LTY|)MQ{{5N7aVU}E57V1ca-WME`q0k2zBVN}H{ zW5pna5=z9asW}hYb%x?YBK-$;KNCX^Lk$Bchq*8WF)%U6FmQubQ!!LClrWScuc=~S z0_Q6k$X++l1=0*cpw!L40NMr5zzkB)z`#(=P|d)^EXphm+9Afk$SeY;LFtc>Y9VC)iC8J~?`@o6(B7Mhe{?tm}lC7?_w_nOhkc zm^+v!fJ2mvfr+_=xgE?FW^QF*VsK!PWp2QdS73Q$GlBFj%iw~U+Tp4E7v2=h#2~=H z%G?Ocm*6tg3zkzLX#vf(Aon*jgGwnT29Wzf;l<0q$iT?3kb#MT{;9Qv!JfGpw5n}j z${TP<*fR(-xG;DPOsT^R+8YZh(>Xw83Udtu6S(!w$l%Gq$WX<=%)rB7#t^~4%D}@Q z#2~>S$DqP|mw}0~koh(P6Jr_kEe0mWJm#AWOpL|MHyD^0LC4K-F@UZ~m0`XHR(BPw z?h07lWi%Cc7?>D~n5)5Z*BO`?E19dnDi|4<84DPT8B4)AT>@N6K&n=0P+DQE1i6(# zpTV8MpCKHF8qmI4Mg}iPy$L#6kpW~50|VFuaCyqin8#SdzyNNi@`Kx*f;d$BfLeM) ztM+SqVz|Zdgy99l2ZkRE ze;Jt>*%^5lMHnR*6&O_*H5g48ofush-5BE-6PTtjtzp{7bb#p^=uRKV?qZ@`$pq~y zF)+3@{#bm=|$K=H1 z!sN!}!xX?2#1z65!4$<5!<597#gxYcO5>o~0JNG{mRSb2qL*2P8B~{It96(dbQpx0 zn;1SbCNaNdtY)lY{>1zRzE<=z@;Xs)8_|owhrySzjIolj4wSmEuSJE{bX*L143kj$ zH5%Z4jSaY8;{|R#fm-OG{V0r}<88ow7A|m~03rtKUqE=UzJma`?;wDrjww5}D35^; zw1tsD0$k^U@)SrH3%IYv3T`tCFvx*#FNL&L!LloF9I!dKRdF4GeRMy4nb$tVFPO_;@D;!qK=8Z2zEN(OFtxd7T<@t5Hr=&&iqL~yxL z4Q^$!fk=?q>`rWQ42)Saev7SS(oVSX@}V zSOQqWSYlX`STb1hSV~x`SQ=Q`SbA6{vCLqZ$FhWF70U*eZ7h3O4zZkIImdE^Yup!K%k_@F|0@h`$Ygjk2?qJ==dW7{9>jlj9HVtAXG6^*wVhb_}wviEo zgt!4e32`AN32`$f3H1fUFUTasM_^w=!vw+x`vqb?#4q^S5I;ifC5jF9HN;hr5Fnn7 z>`oNBsAMM8{0>mOGyVjTP!UL&AjKdgWFREOB@hx>JtQ6>p@&RD!U{s7=z@ela=bw7 z1*b`<$(U-8)zg!W>^2&(At8etO1M%BB%B8Y=>twP5E2qo$Ten6(|F z7NaqP1EU9{H-i_WA7dngA9y@Eim{EcjUk$`gRz4lhOw8imm!vMBI87cIL4`rQyJnJ zmohG8NC1x`CxUj+F(iY>ky9D(Gu~%N1CI`;GyZ4%&yWEg`OO6FVPnV!kMQO)r7>kP z6rg=Kc z57vKdEDVf{!Azi8heR+5x{ZjD(HYFP29u^>G7U^-fk=iMAd*oZOoGK3W`fxeG84>B z1(Pmd5}9oV7Eu9{(O}XQOg;ybfnX9M0x_QlG;YZ#1SaLdB$&<64^qj{4{D<^9s-MN zgGos+X$vNmK_tTiF!>8aGOB|~UNE^7OiF-BelW=lBAHr2CNo09!2`^OxPJpk7U~jN zFdGtX5EnvJLP8AUPH@OD=7UUtgcw6VSQkXx1;mDg8^jmLY(_{Jf_=o~3sQ+9Vgxdi z@f=tj9KsMkGJ?aF0pe3luo_4RLwp?%7J>K$5=szRHLy9zdcm;+buBowp($iG*o0GH z65@AoEHGY05`m;5DX<76G$8SaoN^!`fGf3tZD)j}0Z4jK0J~5WOj?3ShN&Qu5#kF? zFuM^&>VZj!%fa!>2uZ7uaE7EqNScI@Q$XsWaSCw{L@zjept%6- zUue38q*6#+L(D|h1qltXI~gId19m4QeM0>UF&|kMB%MG~5rhp%GhjC`LfmW(awnq} zn1t915rL2zU~vc=q6T6bBm}_um*F5;BN{FYZVVpaGY!yBGeADe05^FB3nLAd@JQJZNT?DS#;!Ja&-{-r)_}$qm|_4cc)H z8o4)6a9keC3rluiFq3HEKr@zyp4G$c!rgUfrT-Tu?jlc#0wtr;s?*PN-==i zh>I8)7*;SaFsx%>VA#UIzyLam`v3z2!!ZU1hBFKd44^aVZZI$~++$#10NpPBih+UQ z0|NuYHwFfVKcLAd&_oUc10x>;1EUB71EUlJ1ET^11EU%P1EUTD1EUcG1EU241EU=S z1EUKA1EUuM17iRK17jEi17i#W17i{c17ijQ17jWo17isT1IVR}4Gav7Z43;IJ)l+w zD4j7d3{r9z*o9Oi`2~3HF);E=G4L?X8i}I;Y(i`jY;tTWY+7svY-VgWY))(*Y<_GZ zY*B0pY-wycY(;DpY;|lcY+Y;<*ru_~VOzwuf^8k!7Peh%2iT6WongDgc7yF6+Y`1| zY#-RZvHf9ZV&`DzV;5nUVpm{SW7lCfVz*$oV|QWqVh>;sV~=4^V$WdDV=rN^VsBt? zWA9;~#6E+49{UpZRqPwsx3TYGKg525{T%xh_FL=^*q^b#VgJPbgZ&=|3kMg60EZZd z42Kej28SMp35OMj1BV-j4@VG31Vr6pmRO3pkc>tl`+i zv4dkD#}STG92YpQaopi}#PNdT9mf}rUz`k_Y@9rtLYxwua-1rhTAT))W}G&hPMjW` zew-nkQJe{!X`DHnMVu9!b(}4nU7Qm*r*Y2VT*SG8a~fxHiHG^v&*AlK(TpPHyaqZzc#C3w}9M=`DTU-ygo^ie5`o#5v>mN4@Hy5`6 zw-~n!w-UDow;s0%w-vVow;Q()cMx|3cN}*LcNTX6cNupLcN2F9cOUl@?pfRmxR-IS z;oii(gL@zM5$;pm7r3u+-{F45{et@)_ZRM8JPbT+JUl!?JQ6%|JSsd|JO(^wJT^Q| zJRUrLJRv+$JPAB$JUKi?JQX~3JS{w3JQH}P@yy{_#Iu5D9nTh?T|5VPj`5rUwS7T7 zK1R@SK8%c@djc34oxvj3VA2Lm#)8Q#5Xk^4-59|~kuox-fkYVPz$Ccm&X@^ir-Dfr zFc|_S&A_Azn2ZLKu3+*xm<$Ay5PL!Q4=^(Ff<-_VaWFEnf!WGn65RJ>SOsS5fk+0> zbq0)}vXX(30endu;~|hZBUqLZvf2Txh5`tVRgoGy+QWmTd5~`Ra#C8Y?2~UV?k=c;62Z?K9*bu)%QUxSDA#6x2K>SDy8 zNpL!crXTQK8W1)#9wBK7oC}~KhJy{wBamDG&LhzDiHi+M50KDCVl#m+I%I^T4RCtK z#bz=B$HF-<3C?#A7cwHV!8s9<7Z`D|!TA)LQ?x*)F}wtkjF1!viCD)1$7sgrz_16rUi>(t3u7$93C3i`WQIrJk@?5qmEuo8 zr|B`g1g{i-4H_F@cn2CCVE6!DDgFt(Qv5S$oPgmAc%}F^@JjLT;1%IN!K=W3fk*Fu zgI9t71&!V_f>wdwVPpc0;WILW)_*gyFur1Z!^jR=|INq+8r5gy294@7@_^2>W8?*m z9We4UaWio<3W8RCGYWxLelrS##{3yYK&!nO#XzgQ86`nu3XIaA)!vM_|q zj%g>OH`5-by^P^ZhnP+?Mlzjay2_Z$bc^XRV>Z(>rss^MOs|;UGM0np6d0?SCo)fE ztYMzcJd?4Jc{cMr#unxU%!?U2n3pmyXY2v34rlBK%`z}fX5P!Zk8vt!u7Pnn187Z9 zE$B=`@ERS^dS1|qZ7EQ%8&nE|5+sZ*d;`4dz=vTG!y1M~438KVF>)}*G4?P{W9)&? z;yW<4f#(aJFuh~?!R*D{!E}p7kLd}^2BurAL9Bn+l9=AHv#|TIKVW*o^o}ErV+*Gg z=N8UaTrOPixI4H%@r3Yf;x*vi#V5eGi|-4+8NUMvGc00Q#P7x5!+%UbKp;wBg}^OA z1;H%AHG;o{9E7@rt_TYWCkW4CU}EfHuwgvPV8p=7*uucd*zx}jW7q#1jFbLg2wV-JH7<2;ZZ3?hsR|36|} z`~Mr``u}$sH~xRaxcUD_#%=#EGw%NXoN>?pyNrAP-(}qY|2gBq|92S={XfTe`2QQm zqYQEk+>9;%-!OLk|Hjz${}JP){~sA={r|`~@Bc@}`Trj=F8Y51?DB2@-!LBf{|)X_ z4F*xh76yLCj{i3pJO9sN?D}uP*!}+;<0J-2#`*s@FfRN*hj9^u2;<`a35@IiA7R}1 z{|Mve|CbrJF^Dkk{C|XTH`ql-82A5Q$awJo5ynFdB8-RsgLYWV|Nn-85o9L=Bjcq1 zzZnD=I~a5sI~jBtyBKsCyBTyDXECrc&SPK&hYu)Z7ybXnxR`;9aWexKe*_8r|KAuFGVn7l`u_;*4p1y_ zX5eSs_WwEKZlsvr&%h6gZN@{OoidE`|1SfFrZVGE21z(e1kBQ4Jjx)#Ai}`HAj!bP z;KoqEputeWV8c+#;KoqRV8b|zL5^`ggD%uI2F8t`P-ReN7G*GE7Gn@$7H6PqrPhwF1e}lp4Kj^@3E{0MD z5r%385ysa4=fF8(J_A4F!vD`1*ZzOSxc>iTXnOp`xb6QVXnI`8xcC1YXnLH(c4;5fl@iMDA@fVw~H`?R&_};@H5N&U&bu^e*?4J{|(IY|93Gf{GY_E_i>@zTmK(n>|tPFod5qhV~-x##OE)@E|j6wPTHwLHwSqvo% zpjhMryKK_`=Zv%d|7M)`{|n=y|97FTdjodew*SWi;)jTVOE;O4)N5 zl>a|saQeRi8YZxmeS@)w!I2S>vfsc{HY8QQVche7KjYs2`=K`Phoi=EfG$q6!1a{RNhEfJD zXzcs|ry)=bE&l(DapV8rjF3|LH?tTh#Q%R|mj3^nS>gXjW+jk+8Tgs4|37C?0f(s4 z|8Ed~GKesg{Qt&K4GvvU?giB(ccH2BH{<&Mka!2zCg4>0k#YBbSSY_?-2eX(B<|s< zl8agN|2Jl_|96?i|9=CAHaPCVuK5PfH_HFNLGugfUO&$NcNv8KF9gT4)Bgm9?EfDb zTmOG!>|u~(T=@SN7uQ1JgZG-N+A z_JC`Q-;A^Ve}mQKCYqzo8-cjal;l8)oVMZ@?vw zJgBq*$K@LaH3rWAZy0zOQbHco<3;% z0hDuoGmA4wGE4mb%`C~F%Phqp$1Ket2aiukImpGV{Qo1fHG>8NFM|-M^!gv<*6zd_R`7qj*MZwzAKvRnE84~9~Zd;i~n*3M5D zcm99HxCdNDe}mM>|9`;C7zqY`NXf^*&nyit^+08_2*hMinf(7FxWxOxAOx-zo-<_s zf5cGme;Gr`|8oqb|Iaa0|3AXm`hOWCq~!vNll@See=%;LDBJq#Wg@e7GtP>bdpxE9$B4zn+e`~QDoJox_$Ye|foCB&2(R0po263ogo-sK6zsFF*zz@we ztVntDBeN(27qb|H9J4rs2s0#=yY_|DQ4L z{Qm{s_JzcoB$EFnp{WC8E2s{A!z}mzBeVSfZ_E%EykS=Q{{~zFK*HfUgDBYl$fY3u zc>D%#e}d`{32@wDEA^g(^D?M?rOd$3z`-EIU<7UHX)qLkLm1RDf5SNI{~M@3-!Lxx z|BZ3c|09f`GHCsOP`lv<<5qBed4X}~{}130-~0a^<9<-N^#2{>AxKLGl0)F34)Q-J z-GXuls09P6Tb@JfmdnhF|DQ7}{l5(L|7B1MhJg=Uoy$q4qODJt0v436csx?s*RFKOy&mg2`q>l?~?=x^Qf=t>7?svj^VH)5*)FB291|dfDejKPR1=0cP zyTR;-^x@tx?quL++|8f?PmRbuF_1|jjGYW3j9m;OjNJ?(jFbL@;v3Xr1@*T<^$jRj zfl5J8ANUcTK3xj~7h?y54Pz&R4PzIB4P!Th4dWzG3kzIlazX3NkBo~LSQ*#;hqQ+v zeM}L?J^ybo?)`s*@gTT``I~`k^^)R@`XJ7^OD;NYATNp$bJN`dn?EL?TvFraX zs7WG>^B6#7)-LdP#Nz*}A)^Zna?l!41l;C5^#2iqFaZ;eKux#{brTokHY8I(?E>%^ z1=u~$83b{d#>zPV|4GKh|6!)^gU1z6ef6C2Ak-9G;ls~3kAaJEJ~)gXLER$)HVHI> zfC!(DP?J8wLmC!7s3E=R|8GcJ5gyti(C|SI={F4g@NpvKIGg`}7vsYJ9~l?_zX6V~ z&HrJw_&4x)5va9&=>HASSOi*ZqqZu)K}tICXp;zZTm&?_!Ns_TK?FSN1R7I1$iM|^ z=P~f%bPFhiL1PQsz~c*CP~U(?q(GxVcfsR7sHqO*1CZ+>DNY1ZmVjCV@YMDQ8k#p4 z7#VyRSfM8q@G=N7C^OhGI5EV5Z*l_NhgHf@&Ctl$#@NBw#n=PB-2}8&3v`dkEVSE8 zKzEm{Wn9m=k#RHlo|2tNH#pz+;X&3?>Xr4D1XH z3|#*|fJg=|@W`YQ11p0hg9d{ng9rm7cr_Dfe>5KhD+4P7BLf#`Ul#)}1866#1A_wt z3qt}!0s{+pbvGO10>%Xltl%}?Y>dkomocz1Gckj91~W4=GcYr=GP5!;F|#qVF))Mf zt^n31Xkhy-~NC5|NH-M1_n?VF);l9#lZ0Y2Lr=@(CQP0|8M?({Qm}ryFjr8 z(fJ2vG+6cJ|92U^-iS7R%{=WmKRsR2z z{&)PJgh(6zzcKLt{{n(=_y79;`~OF{|3Gf%2jwb+f51Nc0Wld`R)DMmx$PU6&jnHs z6@pX$k1#O6O@)eL3s0Cm|F3|24pj)H{@(>NIKU*7`2PkPzmR+hnqh&+a4|6azsn%U zzz;rO2XqZPSR54J|G)kJ0SyD8|M1vlVEF$C>VD8XGFUZ&!0&z}bvORM14B^yxyv8` z@((x-eq&(xe-09}|3Ci!h8{*x_aF=ch35klE|>$;_x~!Gi$cKU5Q6{Dfl8YHbN5m1f=nf?vz9*6@N{@?ol17r@!W&ig>AZX6* z|DXTg{+|QefBFCO|Cj&og8CQ4y8-eA1H*sNnqZL0=O85m)JQM|F5^M90z5zd|H!}! zaX(lA1K7Xc!08xNQ-RVP$c2wUxebIF7{KMh z=0NojCg46NY% zfvyCF|Nk7wHK2H40IfeG#yw#DpwU;bA3&)FEP|c*zZGHr|KH$J2(%&#yJArI?T4uU z|AqmSc0hF!IDF8{7MKD5cm2Nsf(%>?HlW-Mi3yZ44yF`L|33+)Km^FIAPhDiB!CV7 z-wIC;pzx7{ro-Q$JdaI10~fgb=lZ|v{~HF@{~tka!m17?2(=y5a$w+xrYTUGgvq1R zB4G1b|8D@5W)Su0N>KQq{Km?_`hV;HM_~7$NMhkY+|LSi|2JsqibWw*2&NunJ_9%% zK_zfdpfjyN@w^q}c2KH@sDp$ngpEdm+M?j_1nD3co-p%4;SX{TEPT=GR3tmVAq0+R zP>T;<79gpBF+sa6IT=7F@^CY7gGX+J7&sY}7?c>;8I&268JHQY8LSx?8JrlL7+4sR z8Il=T8493dj3o@}45bXE3>ple(}UC)8W|cH*ckg5`xvAd`x*NgWEdwgPGXQ{oW?kf zK@Pk=L!NOS<2(ih#`%o%859{8GA?9L0(>I>lt_%H!^Ny z;A7m(2%5Fs%D9z5fN>k+HU>e)os2sfgcx@-?q(2X+ym)5G45p$W!%TOk3o!aKjVG| zamIs;2N@(74>2BMkYqf}c$h(oS(I6nL6upIS&TuGS)5s%L5o>}S%N{ES&~_jL5Eq2 zS&BiIS(;gzL62F6S%yKMS(aIr!GIYwmTt%_&n(Yi#H_%qz+lX*$gIdN0>xCg_=xP);DgDAKk!vXHcurV%YT+YDExPoy70~g~;#+3}* zjH?(|G4L?1W?ap{3qD7YnQ_aVg4f!xFrHvM!NALSlJO)1E7KolMg|dZ zk4lIc)T0t+W?^Pw5CHe9guwkOVPbs;3eT!=XcK7{rE5uTD3qJ%8+ zKWH5^Sm*y62sT&%PJr5u3=E)B98{-*LJ(S-^TXXP#{hw#ehFM3WeiXY5!99d*$K7> z)G8uiu0Gk7kDG-kw z4DMxY0Qdbtc7j$mvogqm^8>gC2TFOk%!Q{ucnm{SL;DN3v{6kQSK1`T0+36w#{x0B ziB$j;&=kv2uh<&ov|NZ}8F|dMq-yj|c zgGVVr4A98P8wURW=l<{dzxDsF|406B_;F4&`34#n0r?lH7XdLF6z7)Hes)_yeQ>lq*2Jdk`ChvFBv43s}JO(zQw#2W zgU0!wBYEKdA!vjJ;y*415oj&K3YLL}AJ`OVUjWPog$TIs2QwGq=Kml6KZ1lBMAiQv zpb>-r5B`4vje{|;{{I0T6M^>MA*#S6=#>{QnKMli~kwNG}#52O|If{(k{HQV-gf0TKZD<{QM_ zpq?m*1)@Pxp!fiV1c(j85I=)+AT*Z2VGb*UK_w1&gaM`=8lqq>hFRcnhlxVc>Hi;a z8&FaT*Z?#F?ABi(L1^rQLj%Oe96HVsD@}fMOn0+ac+K=*31N=T@j~$ms)= z2X26352hDl2Los=Hz*dq{Qv#`4TCU)FepqJgwbOKuIn3U-0%OJ|0lsCN{>M8S1<;} z^_%~1805ffVU@wO90Ozw0lCDK0mVGX_YnJ`E(M1($PQ3@`Tq@gn*byP!L0wkKo}r@ zg5v-GxBvS=Ee2dJ1&vpM?SX_T*alFl0JXwF`XFf?NP>Jx^$Ao<{C|X~X_3tU`2jS4_Ww6X6)3$TWI?$VWFkZq!~(eqA`ePYP!_b# zhw#87^Dria<_G80=V0@pIT4%>prr#SKmPv>stFhv{{I2xE{HZ539=XJ0`RyvNE|f2 z2BI0jDd_)iP?-Q8hXswrf=0=}lAv4$(GBH-${FyS56IUrF-YA6;$iCvgU8#SgGyfT z%;ODEs|ci)ff*zQWgVpQ;_aHX>p97{r=^7AI2hs>;utu< zBWP^ku`_mt`3&0)c$@%uJWdEa z9>)zHkK+Z8$MJ#3Cj=gY69$jL34q7ogur8Pg5WVY zA@CTSFw--pXAF`|FPL61NHV=*dc`2g^oHpTgCuxVjs-j_#|j>mV+4=Nv4BVASiz%m zjNnl@M)0T{GqVu05Ca={RE`}yD#ryLmE#1D%JDETF|;tSFt9LKfJZ?67(ipo(%^XY zW8h)nVXy?pt{*sdeZixlKHxa^We{QzVlW5Cv^9AASq?n@ECY^pPXI%?Uv?MqM zcrk$1a0G(KrDee@IRY878L}Bnz^Ne!JVq_g0NM$o0v@AQ1&^?LgGZ{B!D%G~oL0QR zX~h$qRy@IJ#S@%XyufM23!GLw!D+=BoK^%GTNzs!6hS8zF}Q+Lj1V}*2!m6M2sp)v zf=6xL!70WDoMLRiBjMcO6ypR=G0xx=V*^exR^Sxl1Rfjb0gsLIf>VzRc!Zn}JVMS7 z9w8S1r>9_WdU6J*Cl_#fvIVCndvJPk1E(iy@*Kb;@M7Q*cs9npjC&c_!K1H$uv4&apP0Zyro;FRhGPN`ntlxSpZ}3 zEPxq!7C-@r;K({W1F@VOyjLR8UFs@`= z#kiVr4dXiK`B>W-cYsfUJi>UC@fhQA#uJPunVvDdV0y*$hUpK}U#5Rd|Ct$>8NutX zSeQX8u-KWoLE*(L#4OBg!<-CuF(cP6&{#La6hznAXPEq$GMI{( zYM9!XYM2?Am6&yyk1;=BF=7c}$z$nYRbuU6J;qqUdWQ8L>mN2HCO-&dJj7IkfS}L= zVHP7c9kx2y=|P~h!p_0u$Ib`R13F2F$&XoyDTCdJsfaxRqMMn4nSs3zY_Af?1Ta3v zVg$B7ge8QjhJ6o{A5#rj9IOKD%45vOn2)g^1DOjk2S$R_vG0LFusKF7MjQ?tUSOQT z(Z#Wb;~d8eP9;tU&OFW@&TX70IPY;WaH(-QaAk3IaBX5|;@SanB?A+K<^Q`3k>C|G zmJA{cpxsg%8H^a-GZ-;^WRPRvWDxrA#9+z5#juV+j$s3XF2hC!U53{Tx(sg_G#K79 z=rVj~0NwQhQo+n%`Tr4v_5T|T(f{9o_ij9Au>Ajo!TSGe@NU7#|34U_|9=7P8pOFf zkcpw=|3${A{};hK@Id| zW~Ki}AbTjlyT)!XgTjH0VFQB*!$t-XhSv-t3~w1k7~V68FnnhaVF0=E8DrG{XADdX z8yWZ+UNdlk#cnW0{l5VUwf~P8grNK4EdT#zu>OA+ygx4Z|3`-C{~w`y!nhbZ{?B5J z`acW42ZhpoZX669|F<%1V9;Oy#o=oP4QMQBFnnjwV2t{|73|8Fj8Xqzf_I4Ah3>=L z&!EJ>4-R8X23GK{wc!76z^Nh{x<8|ofs3J<0p#MX4C@%UaM+;?vI896AfG^XJ92?{ z)5!b>?NU3(EcgEiv;6;)(A|2VU233k2klZj!mRrL2zb{I8{8KlAG~KkxLyQf*I6Ve zG$A|BKrsW|xk3D{F;IxDhNd1PXzJmDrXG-QRx`j-0Vr*urUEtw%l{h~K)XeQ8MqiC z|L_wYAe%tD;b1o1U{?A6oEfqc5;SiN+PezcZwa=AL4=`zK?IyG#27$( z>OgxvK0^1qK=x3ofOqn}0p~kL2Fw3%7+Aoi4rmucBxqmo|8ETJP?3)eP!VSF|NogK z|Nmr`{{NGKlL5557$O7OM+MqF_>Eco|8K}{v;QBNrT>2fmv_4uBLCk2?>|1tpv=I< zVEO+(gZ2L_;C;xE46NWB+VTG!W7Pk1&|MYJnWY$5!MmB|{(oZz?VSVdRRQl)Vc=p` z`TrZd?@WdPv>(zEykqSgL*)P83_0K(Vs98q{=Z=;{r`rc`u`h-n*VQ@MgPA6?;;h4 z?j)7`|B+b=zB^BjS(ZTrY1b`imzM}+mluNwGh~;S2(vY4hdYBM1L(#hOK=$s+Uvmx z-tz?_MHmwgVBqEF~3>wU$47$u>3`Wf247$t`3`Wr1U%H@OeGJ?TEDXvFJPaueN(|-< zB@Cb)C=fe9W=k?eLCtkzwr0o#mrVB=qyFCq?L++koI&aT8wOBVf>MCf|8oq{;PAZ5 zPypJ)_Wv70>Hm)m)&D;-)ck*rB|JfUD8Vt#EW-c_Pvl+9BFu^mu<(>a3eRs~H*_#Y z{qJC4XXyA}2Q3#sIbRZ1{xe4XuVdhVro?aHlo$=#_5A-AXjcxi*#E!G;{X3Ja4>+} z4N8sC46Gn`f>RPGHA?>f#4P>)7n&KR|Nk;n|NqJ?{{Js{7ozn4Zw#RFAfnw25=KgbPS;2O8&|4)X}|Nj}P|Nn-TgKwC{|Nml^`2QZV za~dfRfpm#5RR90NEcyQzvlMt=?JovUYTyF9Jox`_u-`ztdQ1QRfcotx)Vx2;QvZK~ z^5g#_(ApSO0)1na|No0w;s0M|#s7c6`RWL`JrN1oa|$k_-huaODuQvgIVGKPiDpc zAanjOtNi~7&Z8m>pnY0g;N7>N7L*f%5<}$wUkuR<%#d&gog4t#D+u0|$_n053EL^F z1U^}Ti-D103ewsVRR(niO$HqXT?Rb{BL-sz69#hz3kFLDD+X%@8wOhjCk9W3NQP+S z)h7&n4E+of7$!1IVwl1(m0=pgbcPuWvlwPG%wd?zFpptA!vcnd3>z3Wf=|-D06t6i z6~k+WHw^C>-ZOk)_{8vq;Tywuh98V9jC_m&j6&d^fjXlGqZXqMqaLFHqYs87{D0B7{VCF7{i#r)XUV*G?8gC(;o2cLx-4-Fdbt$!E}o0 z4ATv!TTFMD?lC=Jdc^bu);9q62SB|6f_pKTt(n&_uVY@%yn%shK&px8CV%MF>GRBVmQWdjDe5gIKy!UMuyi6uNl}G-ZH#pU}JdC@ScI0 z;XA{31}=vG4F4JULD$SNa5J(nvM}&4sxzuH@G`GqUcp2-d zGJIsSgL>U}5TK>SthKn#eSffrV)= z(_RKnru|I&892csAB^CU4@U6F2P1gogAqLP0ojqn10MNc2akNPfk!@gz#|{*;E@kD z@W=-ns3*_B4GwosaJVxuuVV)FGeEbk`hv@yP2iH}HN#tm_YB{`r*^Y2sxz-)UdzBF z;sMIfJQBR1JF1kyvju+`SpNS3-{8vi{}%)Q|CbDs43Z3T3{3wYL031y=hPr+3X=rS z1GD}A43PoN0f1KdfOkAFAZCL9fB*mQ{~yTedWcF?^8W|KS_+8F|Bv9^I^Yp|@cach zS3~wlfMg)5Fvy&u09FW^uK>@HeI}|{B zAV4GIpjlnyS!l?74AP7hc>fY)m&5P>zyF{5|M34w2GBqWXf6h{rUW!&!|?yc|K}k8 zfy@TY$NYcu|2b&41K4Vi`#>|hP!6cwfGh`^KZnfkgJzY$JkUM~uny1+7E~LEg3fA! zm>^TY^o{>-K>GwhY$yiD6O;{`6NS!I!9>CF333-?-Vrnl4Vr&O4hgs{NDpZ42jnjh z8-o9z1ML(6-&t(_|04tc|2g3OCFlMx1B*cvfz~SAfY0;n2bF^V?}Fxm|DOb}fq<$) zr9gfLrD9Z3d^|{~gH?d*mH#*XKl;Dy|7FyDa9}?`!{$GD2MWk0@EjZ33?RrPxC_Af z??33?CZx~@slbat_PD`Sh=Awx;atKDXsUy*Tljw&Ji7>5%?~mct{r{$3gknGpWsT6 z81NA1hs8dUB+*PnP9$0jL?Jl0fl@cvc91`~K&c+QsvoqE2C|M9Bo0vz+Ajpohag`; zgdikrh7~pk3W|O3Y%W4CNFg&QX2G-aUqM_H3~>uW2(XT_m&zz|=7>;#ztjw$e(ZP0oH$W9PYYlt6Y z`~O{F-+|N}fw=_iBZwIc43f}v0W$?A4ss*N6cMN?450b)|KC8N1ThEXM+ghtvIMDx zb3taJgf15-?f&1&zz+#WkeLX@46yZP8X$eh;-GTxKf*^M|M&m@{eKrI^?}!Ep~evd zG=)HY1UCm1f{(x<`W&<}98?$m|M>qTc$E(q0~f+A|3T&X8<-nF>lMJY0@xsMn1NUz ze}YOn5m2ihys{A-VkqGPu9rZH!7&JCKnYM90M#!1pnX#e3=AUReOE`|;ev=GkSeGq zkSWNm2e3audxfBJ23mInivRyd{@?h&3lhRmt&m&-aUrtLI%P@ z4qZr!0GVE~P=5AsAG?Kv+=n z|8H=cXBVP{1(ksN1QL!A5-JDE1+er2+VKWj%d+eLU3kp|Q3eTJF#G>EP`Qfc7EriA zOD$+E4fhd}ZD3O%eE8ZRs4lS4c!~d@)hs0LM#nUeNK=>?v>7-UI6x=;FmN((Fo5=p z@quUU`N8w`yx{qIP6ky5RR(4TO$JQ{76xMmV+L06+&vouXzrdJJYUbn5Xlh9z{n8I z5Y4~@-c!a6p05`G&(}+U=j$cGGxg%&J!L!$3m6tKh%zi>SjZs6G?{5Kg9tM}Ge3hi zcs^GQJfABCp3jvA&*#d3=W}Jj^SN^1`CNJMe69j`K35SupQ{9(&sAmy?dnni&*!Rw z<^dVh!1KB4;Q3q)@O-W&cs^GU+=CKkU}7``Oc+cUI2p_s%oyar{atSG&4-HMUM~;0 z*UQUb%V5jE2k!fV?k{&?5Mgj*aARO%aA$C5UkVPI#7Wr$@E1NWqb!7C~x!D}Yu!DmHtFmy6>GH^2VF-&9-XPCk;gMpJ_7Q-wC zPVjw3``8y8Ll%hG2CRh$-u;Lo8dMC6T@AGy9`VW_ZaRma5CIyxX-`>KI@v3 z;UU9A1{Uy%*PING86GpRFg#&+!obP!l;J4@3&SghR}A9d(FIn9HwtPJlM z-Z6-SM;cfeJ}`V>5C@MpurhpN_{1R2@R{K=gABtLhA#|?;1LK`@cG$X;Bg2xhF=W7 z7-Seg;}8lApm7KV@Hm75cpO3jJPx72$i~RVAj8PP$iX1P$i>LTAj8PZ$jczZ$j8XX zz{$wZ$j`vUD8MMdz{x1cD9FIXD8wklz{x1g2ujN$j3Nx2jG~O93`~sTjN%M3jFOC! z3^I(;jM5A;j53Te404RJjIs=(jB<=}404R}jPeYkj0%hj404Q$jEW4Rj7p43404Rh zjLHn6;1LmSMpZ^t1}X5k2se2AM+!VT!p*43sL3G3sKuzopvb7rsLdeDsKcnkpvb7p zsLLSBsK=zI9T^=Nn87EGb27Rxx-f7ux-z;lFfqC@x-lp+x-+^n$TE5`dN6P>dNO)4 zh%kCFdNGKDM|4;jeHeWhI2nBzeHoY-{TTfi6dC;){TXB#0~iAs6d3~<0~ur)gBXJt z6d8jVgBfHQLl{FC6d6MqLm6Zl!x+OD6dA)A!x>~5BN!tXI2a=tBN;>(qZp$YI2fZD zqZvdPV;Ex?I2mIZV;Ptj;~3)@K~>fs^Sd(@_Q{rejRU7&w`ZGaYAOVmiTef`OCiB-2R-CZs7&w`(GhJt3V!FX}gF%t$Ceuv@S*BY|w-^+eZZq9x zkY&2VbcaEa=`Pb<23e+iO!pWRneH>)XOLxj!1RDYk?A4RLk3xW-2XgCT<(1E@C#ISB=H zmdqP)-}pDErwrb~2ikuMY8i@vPr-q=zcE`v3=IE&{r~mY#J;s{{IW2`~QCMxhs%R0iBX^_x~^OP8sm{6UZQZ`2SOI-x4v( z#|mym!D0m51A+7@k@^N;mtirL|KIMdD6Swr1E~S&`wu$pFO14B`x2;IR=92|5Ev1l;ci^$|g-7d%D^4j0he3CPEYa0Hnp10p~t zp#A?28cza;BO3!N0|x_ihax<6GyMO@!2bUaLL96UN-v>wvQJCO83Gi`C z@UC?fd3+pD+J(r2(=HLarNF&?h!zwQlt#g$UC%)y5g;khUUXQ06T~M8gGSmASOXkO zBpCovj5|be%YbzL|MLGGY@`Y_dI(9sAQFP1sR%Mh07)a@d4#y+s0{-@coyRl zg8(Saf=W_Q$qG^P|IPoWkn{}}2bHp)QTMm}|MmYjY$P2#iU&G134+0A3^9PxFlbB> zw0jVgzd`v46m}pBKq(tUgVXZ=KmUI*NPy;tz~l7bbGbk}&KMYAIUF=@162;EV56)c z0Z@8@j4grF3%C>mjY>gA3P5MqFhE8-KyF}w=4p^dG)$GUj-7!4wA<_dD+W0R4F(Yg z4F)6d9rvJdJ2~j?Nzh48pmG?ri}wwKICz{6G#3P&%K|%#g@KiU9h8f}G5r;6Drirp zBm*Z{9<-O|_x~3R?EgRg{{#^M=X@v=ME(Er|30J+0F6+9PXGYzl7;L)1)Tr@D(65c z1f-bt|NH--yV^i(5C+MCXiyx1_GEo$U;^*Q1Kmr;0N$kq+IROCkz)V|{BF`5*-#e}HMW|1Ut{0!f`6|8t<-n^3z!ryqb^ zgUu};L25wx`TuXw`3vCLT6WO9DyU}o4?YR+|EK@2!EX5uB2h7Xyc%5ZfaO3eP>ew8 zY7h@nAAxci=tc;rFTrY23DEfxpq2(`#0@fz2=X0R&Hrz(-JW1B7UKV-|EC~z=>M&F zcgsU^HfZF17pP4E9%BTJ<3Y#0|Gx#z;xKUi-~az9XdDk^mpmxG!FGdl5af&Bup3B*UJ2eJO&{{Q^{%m0`DKWBjKB1FtlgYzmV zHG$L-#Go;IP>KMj4N%@ivI~@YPz(U=fkqJ^$N|-0Ape1Ug-bEat(`UvP^$o&7e{(lC|@Po=!P(1>%9i{?*>P7N9BvpV?C#d8_?4tygx~w2GAu$6t z7nH(a954+s3s!2td^YTai^l zN)Ct!w)P@{aDkkp2+nn&8Xk<#{eJ|i<^Drb9;nO%?cN8Se*hYNzYGq4@XQp*R;W9{ z>kptUcu>808Gd>rcpd^|7WA}3Q27fEQ}DbMIE6y|_5a-e9pJK`>;E$F2^<^XB!~s- z$3j}-keNqN`kn-8UxC^cU^g8Bxd&7S{eSfTE`#9zZU3+TUk(muk^js7uLiXN7`Pcg zt&Q&xSA$wt&~Sy<^Z)NdO?e33BYYVYrVuqyaggsIDF>XhAabCd3P>KrgPINELNVC) zFaMwW{|=g`VRaa&#s!sRk6`HussW9Hq%u&O1mrttXo2Da3alQSBay=sbebll z%?XwV5g>d1zxe+NTsLCOZGg|>xC=5Lb4E)el zI*5}#KmI@W|Ihy$;4?u_{{QkHw1*jVUem7s&%v$+X$GI(1Y&^eGI%-yi4ew^X$7PQ z7W!Z|_{<{^3xS~}0!oM?WEmL1JGDVG#Gr5h&0vCdVuR{?(0UM7@G7Xg;4@tBg7P`I zZUCKfc^5Q712P8`J75e-=T8`z8JIw&JouCYaC;pTpI~*MlUqS62SB+Wlpen!w^u=a z1BLqkWeg(!mqF&RLH!1>IJi#%jt|foPjeviUXU;a?+*u^bpbh{0b>61|2M$1e$W;H zVmCPGBwEl~1MtrAUH`BA-~azG$Q;nFbx=zilq(=7Y=PQa;66Plb%D|;2t#TEaJYc? z1A^O{F#mx{74Z52l$-)~KR923OCHclFX+j(pfCaDP*5H4AKKmqg(Cw4?Cczf3UFv* z)PFEJOd6CvF-0LFpqAwSkC1UGNI3x!2cK;MYH5Ic^c+;LLB&C{*-$2g`hNkGqoHij z*}kB4S`hjM(i&JUkm(@5gF*#NL$rYVRv_m87yoa7TDagdQ+Gk)`~Na>jzMccKs$E8@eCCOnF-;8dd6_uLBhy>0`Woq z1k*$jaKE9b2HOfc^`7fLs4WaCKSB8foU%cA0iqau&H<=2g`O4z>c2o_KqM&cKqm)- z*u-JbDRSs4|KIqZ1xnZ8b%vn26f`IP8x%V*m7rV$>eGV6KzZ%|eo&l%ViTqUbm|+3 z4RR5PrVa+#3(BeZOv8v9xMJk85-x~?0q%+5kb?;0aSJFVK@`DAP)!44gJ>i0`8O#H z3=Am@0So~QQ49eLHVgp_ZVXWjZVUmC-ae>20%4E_1|t~j|2GB=(AYTx0|RK~IB0|d ztN=v(2d&?5WUygy1CL&S($Ggp4FD=f7#N`XKsrIEGJv#z%6tZRt_H3C0=42mV?Uq~ z5D*Q@10W17&mo$SNSNP1tzvNN5Gn^cB^q+_6hr`*euyk42^pc2V=!V+29LvlNK948 zBA~uEgf9d?jUB=Vk>(7bRrVkj(HPRM1Lr=F&p`cWE(XvD0f+@&VFXHT&~h7E$AWku zQB+I*KZWqY>#$ME5^y^f)XRn_z(w-^-^CyY-d77cc^hm$SSh$Z0@(@XArYW>$0p9e z@c%P|Fav1yJ}7FLyCYBZoNP2)V zC~hfr0wV(}^BM+KxG@kGh*V)vW>A5P<6{UhFfa%+h%ksUFffQQFffQSNH9n;NP)G0 zZn2kUkO7}QAkVefr&wY0TgyHEX=^n zfQ&^Lw7{uRl!1i-9g8urG9Y8fDq401aRv@F%*G(kz{ViKzy`WWm4TB%ih&D?wZIMs z@nO0_H0Y)qb_Qt%Za48jybQ=#j)4z!FBllhGcYn>!wL-i42lc_;J6oL zP-1{!Pb~?KSqhs5TI5FfKn?A zGl0`2DD4r8L1`2p2BmQj2Bl+M7?dZ_F)UAj@(MbJM?+J_`+HmxLlzKp3!4qu!kxD(IyNQP##1aBxcE=$>74k#Gu6>$)L@k z1D3Z1jgv4iFjz4-F_<%$f!p1nbL*WMR2ZBX9KpLA%^8#!%oto5>=;xTY#10B)EFcf z)ESK7`oRng!W1k5so@#Gbv0N3On`15asaa!z%5|VURf9hxfCJ=T8#?AAf7z~41)aQ z!T^EV;M-9^domFi)cS{DX9fraxg8<`B0)U_(1~pztj@r|pw6JdUS(@i6 zk@EsN88TJq#N#7&7QFKuCxlJqX3Xz@X2d&tS>`Dl0+#97rDrw60%} zL7G7b+@q3VkY^BO5MvOB>mkg5u23VakY*}C`wc*bgZ3I&gBUn5NCoK_RDU@#xG-2S zFfr(W_eX$6gFxqKfbQD_ohTs4zzp6K!N#D*puxZn-V?#apu?cgzzyCF!OsAyLj}Nl zA4C~!80;9t7+e_K7$m`a9Ap^0;5!s_7-AUW7<9qA5)8n*5)2ud7$z|ofp;P}Gt6R` z&)~tZh+zkVAHyz&OAM(DR~Vi$)Pc_cn85Iok%3_%BQqll!%FbV`PJZ+^J^Hn7`YkN zGV(GyFsui!34hG!!kEnPgsGQl5+e)K6sEU~TugtM*%?znD`puBm<5th+qnH!j!7%Q14GOuN<0iBD%IFo@Sa?8emMoSTEb~}4u$nP1VK!lz!7_t&2AdO` z2g^KmBlZOxW*i9|2^?u07dVSJ4{+&m>2aBGm2qw1R^pD}UIgNEByj0*U*VBrUc%$S z6T~aPk-)nQgjr^AB)~B965chu``Da#ukbbTi|`*32oU%MvWp`D?1C8_34$Slc`Wll zP_RX?4}=+c7o=yW8h-^%^Hjju zd;c#(V-=+OITIfP7n3*x7t|hD%)Wux_5UN(u5%2`pm1YSVvu7B_`eXGPUIM*7(i!# z6@X49gq%jl6!3pFQ{ewMOhNyTFa?9p{JP65_WwDv`2Ua0694ZqOa4E}EcO36v-JPF z%rXr8%(CFqeYlwA8TgqM7(i!KaWN|~a4{=`P8eh0XI5q4Vz&N&gn@%e`u{E_h5sL! z6d4?u(*K`h%KU$hDfj;_rsDtSn5zHpVh{wMIHwFg-|Y(M<}=23|GzRRGVn8*{{O)g z@c%1Q(EqPYS^s}9i!!h>i!rb=i!-n?D=@G!LrxQ7Wmf(Fn?W3U>-=2?h)G8n3jY6Q zfSd;fI(h32`u4cUS{|n!27EoSPW?*4b`2U7Uk-?lP^Z#k4 z;{O*I6d8p6zXYGBhd34N8|cg=#!LUdf!$^B|2dQ4|8GnV|GzN>{J+Z-`2Q7C(EmqF z!T(<|W&QuiRPz5HQ|bS6%%cB4GK>BH$P77=?IW|~|KH3~kTc_$Wx%n(&aA?~&TRev z4fCG=-1m^)z=v-wA{Qm=L^A9AO zZ{Ru!6Ko5_hBu(yct|HoI{nXrogj&n>US~z`+ts!>;Fe4zW-mCB>#V4lK=ma$rSAG z=iqqB`ag@QR3X8He@ zp=UMTU{?CS3+ar^%b>IRnD_j@%Y5wrH|FF2H!z<7=U+tz9tJB0(D{En;4}8-fX|h5 z`o96{W)X&J1`)>d|GzL^`VY$Apc3ynO12a?L|3^$g49rZy{~s}B{oe{IU6@M$Z(tT> z5CNZ+D9IqlECu!#KQrVE%3aKI|93&p{@lf^_#bozCCFdrm{tDoVpjdXi`kk%1X@Dv zV&4A$8}kluoS$Pp{Qo)gk^h&OkNrQweEk1@=F|V5Ge|>o$s-1*{~b^taxq@||B>U^4jsk;#OCi^<{t8>WE&Cz*o&-(br6e-aua-}Fp2;F#w7Xw8Q_4WcvRjINXB&zX8=$Or`&CK=Uin=Vmf*0q21m%tyfI zOjLtohleQuR0n}m7Xz~x0|T=-0|T=p0|T=(0|WSkL`J6k|Gyce7(nOwfl3pQ%m4lV z!({OP5jd|v>d`MuLI2M&1^@rTRQmre)MdY!#s9-fl1I=y^9WRuKu(BbU}d)c{~Quq z3|!26{{LV;48G}<^FQdc%gYQ-|K~6iFo-jhFi1kr+Z2JOzjKVg88{gK{eQs3_x~@G zI0FZ`)-V9qte`UE0#hJ^5L3|q3rxWbLg1RU^gk%JjG*Tp$}vkY=rTjjIt87QsKG4r z|1R`A&gabX|KBhx{6EL6`2P{J(*L{QGw4+Q-(^<)e;1U07=)o=@s05}11l3B11pok z|GUtz*vb_6|2I?6|I19l|9>-;{(r8Xqwz|9`{a z1UYjPoD$!G)532izW<+~Y2gQx{QnEcm z|8r2RF@R3^{mtO?{{}-T13%aVNd7npb_t|}Vg;ATppsagfeUi(9|NSGl7@vKv~B{G z|De{?KPLJAKf$JfN?}t54yJ(rr;y#ml*PcrEczcgWxau>EN~qKIp>oBR13pG_&EbF zLkWWjLn#Be6k}2Zw*el3%5`vwBL*#XBp5*FrfNV>Xcb`)VgT)qR$|a#C}7ZFC}D79 zC}jv>sAh0vQUJFP<(L8(GYP@5B!8bN2aLP|V{-JnuWj#-*Pgh7z;-v4uq@BY7mmIUE&)&`*VFDnzI{mTk%|4wJh2i5A( z_<-b2Q0)e)1&=XKW zWd_JqkC^5D-+;ObR5yWKbq-o)oMTq~4?4q_pMjAn|Nk!r7RG-JtV|C7e=wE&|G`uW zUIDKJYRfZlK~w!VCeWF)+6;*_YFtbf$|loRe&CLpqc~2sc?6e^1jzJ#WJ91($X2|~k zkpa?60-cBqDyzRS-eV8}huv>bUxGmz+6Q9=_pm_u$?*SOXm1i!ue@Oj{12+H-hlcU zOr;F0%%cAvF^m1b!3=4;-+=Zt9x+S*f5R-pAc=IEvIesPg9h~UUrA;a21#aB27YkM zL=5UuNd_kd8;0!vAXf>2OU-`_5>S_bTArY`{5eqj1gXy^!Yt1q$E?7h3^kb_l4HRp zzhPiwaQgp-@f`yPyoN9N{}-BHc^E*azH)&=2PDh*k3o`wiAe$6nv#RFWEeOZK_w)_ z3{YS7F1S|P-!Q^6!afd+JSoH`xykGZBkGhA5{N5 zV*K|XRPTUBGM+Pu|NqD&`TseS{Qo!L&;|JgJc_}<1sTO)-~x{XKzt7Ase?iggX|}6#!C!bjQ1GipkXfp9sz)i z=j?*^-9h6ypjI*$0~g~Z23D}@cOW|$H*46Ka*82FJ~0%`??Jf89!k8fdiAbiUW9`{1{_&4J}1`#GxP_OGhNHwU<19H(LP!ECuHk$OC@!tP$ z;PIN@pb;VP=on~}WEZG?304IfOOu0|1xkyc&;#{OK{h`Jn+2+qK0?D9l!8I6V%S&= z$YxMjfco!mz+**Q8CansTtAqP{r|yy;{P}1GylIauz=c=;Qj!pcY5OgZw5x@GvL08 z5Q7GTJ*0)q4AQ-wL5O(=g8=g$1}^5q|KBhlXAl9Kz{ViNpaE4O!hHBYsIT*h`SgF# zu6-T`BL=1aHyG?eV=N3d%-b16n0GM9G4EjzWIp`=9P=>-R_5aj8Vt(*lK{+N82zMG1xGG=7p3Q z_!&U!DVZ3UnG~257?_w8nG_kAnT(l?85kLu7*xTd|BRqLcnpl-(~%%2_i}*G65?Py z!+3^)1r!eqJd9TvuQISO-eA1Jz{>c5@c{!T<3q-W3|x$F7~e3kFurAc%fQO`p7A{c zJL5;jj||+5Ul_kIurXOMSuk)iSut5La4|VCIWe$-ZggQ_VG3aiVPIzpV+vznVTxdi zVBltoVv1tmW=dj8V&Gv)W=dw@WGY}PVBlmbVk%YsbLP5I^ut|_120l#@v;!AKFDN!ZYp!v-47_UubmRFl@b0tcpqmOo=MsWX zFg)`ABP`7Rp9Gzk`u_-MjW&uEI60u*J~$;wk^r4CNsg=!{~`hOXehoEN%Aen*i@qgqKDB&u=CtibjFqPn&?NQwHAGCKL zv1%SvTA&_A`J}<2kTfL2G(J8bCQ}0|V&1 z0nmA^&~@oh3D9oVKMV{Y6QL(*L)`T9|0mEs8-$x+>cM5=a|WLOcTwE*3v{M8NC!+E z1H=Ej|DS{QfgnVnyAGiDfP=*$`^wSW^#32|G@AckKs(F-fBgUZ{{!$D7T|s6|G$Aw z3t#}>(+x^TAfNvK4B96N+CvI96N&i$5458SynhRH`Znl%@DKk#{QvR)3wTEhWbZs^ zUk&JnYY>gHUkk|~R3<+-?jFJRo`Bo{Qt_ITmo|8|BwHF{C|TUVhjx6Q^-N<*+3Yw>kJg5yZ-P0zxDsg|2zJJPXB)X zfB*jz;5}+0pff~4t^uFg2j~V^@U9F{97AeXcszpQACxZtKY->I(0#D*UF0BhKs(?-I~ft? z|DVGk2R;vlA0&??4&J-RzyOImkT^J0LHi8BGN`IS@?Z?w0||EzSOgN2pc8_?TqJ@6 zx`q--2+TwaAFvqcWCUL%<|(TK>VnfP9Mxw)WHiciHG;6-SLbxFqB*W)S!P zNpS0c0hG=_d=Lhg(9m=b-cbqKagDtN$%=gkAjlLD2AKq+AsBQb0%)fwga;wvet!hX zC*Xa`pdGeg`@tpl4RC&iD91zoKl%U2|6`yK2A_2P9CTg>v{X3qZPzrVEBLL|2c42?Sh(g1bkBi0|UBA$KX4~VJ6)G?S%xH z0>U8sKxce_X8%Fu5Lh+G|9Ai2p`R7<|1!8f-33bf3um6K@b%*f4`5Plo zKw2L#6`1t@7ym!}e*t#M>i-x1Z-to-iEU6T3sLj^2i@!ds`tPt3}F_eg@VLK+MWFW z55y!;8v}n@2c3zg70}sRkQf7mZ!gKIR_mZF%G_+iB;v5aIpFkzB2q-^*NBZPI zn5-4Or zDwY3(PQw80qXmW24QMz)Tmx#cfqEIxcm|t}jR3idfk6@+i=Yz_kWB))1RhuL7{F!< zLQE3eA^^1xKp_t52f+K7AVr||2Po7*Y@8T0A_lS>RNjFxq)i9yxq?n{!5{lDgCTwc z`3@3Jpb*~$K9vK-O`vidrUeHLG6@vopc|1uamT;_&U@ffU%`C`NY4tS8*exR&%tK}pM%c`KItBEx;-=abbAi)>GsCp)9p>br`sEWPq$|QkBRCro?|@6 zpw4)n@jQbL<0ZyR47!ZB8E-QPGu~mm!yv-=it!bL7FX!Kf%L5azL$$$YgdTq#{ z%4EW1!l1@v%4EtQ&E&=8#h}mR&E(CX!W6(1z@W(#$P@@#MZpxrpv4r-6wDwG9%0pH z3S|mqP+%%yDq+xIDrG8VkOiN@ZwNkx-xPcbzZv)xesl0C{1)I-_$|Sw@LPdT;kO2# z!fyjUh2Iu@3cnpQ=oEf?@G1Nb;8XY=!Kd&$fluLgW>#fZWpDwX!q3UPg?S4D7xPx; ztqk1E+nBd8@G$RS-oe1jyoY%Y10VBo=Hm>a%%_=8gJ%91CVTafW7<5LDM#utn)7{nM~Groq#A2)bpn+F_!Lg0~Y zaq!4CFXJ!9Ukr?le;EHVNHP9r{LjG51nRc%F)=bRGO#c)F|ja6F|jhSGO#kSF|jj9 zF>x?)FfcQ5GI26UF>y0-GcbeG0UHx96E6chI34ga2`~vTNHGaA2{MQ>2{8#XNHK{p zi7;?5i86^XNHIw;Niaw;Nij(?FoRQ!5|b>GEQ1s{-GIjT6&a+Ml$n$nSeaCqR2Za~ zRGCy6l$g|*)ET6hG?+9P*qJn$G#R9r^qBM*#F+G%^r15WQcUJd<_uEcv3da}OD0PO zKJbXWAd@wdH3JKiEt4&S6q7xZJ%bdJBaqi3nW7m)nc|q@7$lkEnc^8Fm=c&07$lhznGzW!z%vEH;F$serWB?W20o@V zrZfglrgWxs21cd~rVIv7rc9ao`D@aE5XCm$kfQd4xXFfVQOY-W?%=;P>3_NGPN>@GPN_cGe|LYGIcUYF?BO_ zGf06?{gwmIU&w>!FJ!@|eoKRAG33Fs7_#6~zokKY7#O6%Ga54BQ@<6Mg_(sJl$kd( zZ)RX(-pRa+L4P@1y^_Ag#Us z=l=hI^ryi}s7!#`GhicG!LER`l;uEoMSC6d|M7nV_!dFXscxWIG_VG&1f=Z- zA+ac+ojb`{tZNd`&0 z?I*AzatLtR2em0LgVG1cP2h9gzCn9)pcXaASWr(@jsZ3n3ljy&AYss~D0uX98R&F- zkOcUoPta&^2jbo+_$(c?H49QlT?{>u3)I5r`v39&E=XDg&*FT8gf;SL0;rz@&L3DE z@&EGwUT}yk{J#v=BLVfo|L^)=2O6h`jK=@J3qGHc0Ti15xBdtBIItQ=wjlUiuOt6Y z{+|w-(fPjtbW_&PA%w@t|8MZTgx^jqISuA!7>&gM&}o`jgsCTl-EMH$Gl2TJxNZ9XhXHnmAyR1$ z&VQiUI8aHnA3VMa?umkHWQ1W{3?iW0D8Z!)=)~?fpfeo7^LdD|A0qB1ffxwM0}PN^ z4XEAVoDM!C6siU^3jFT>1Grkqy%do75{MF_NJxId9%{%25LSV#nppP#%b>CVTo2>Z z0ab@OTU8mK4bSD4=qf0UT4{ z6W0Hu-3bCV1FRCn!iN8U`TqwzI{g7OngC5@`~RQ({|0n7CrAg_*542r5Fd2f*?;h@ zDyXxHU^z4b#ZN~-ZigrU&00cOAQDtFg2vZDtHMC80EvN0U2y4(7)?Y@)A&cdzy?5S zd@vJ~@IOUB7{C2c69cTIU5yk)Y9E z&>a$>_6*1^3=DFhSOuF4I%N@7bASclH6#zhZJ@aSe*~15VE%{B(!p1efmU;Z)*ygJ zd%^lZEktk&9#khl4TezQQ&}NQaGedGm1L`NlEHP5Dbnxlq>3n;gN?S;y~ z^D4*>pq4Pw=sU@xRO33+AL3rHe(-!Om<1=0WZ_~1!63~Y|4)L- zU{ES2)~&eA2c;s_5TfUEHnK72X1$Oq(QSoT<|-gK`{&Moj_EA zlt3|3EeR3<&cF%~CCdK|&^yIJD||pFkb>slKqrVpN;Q6vng7x5Jpma3T15aZ&q1{~GzWp| zTCm(JF!>SOo(0{y^639Z@JgrO;PnE0ko6_d5CYv52I@mfLdtTGZ$P@C7&X)cK=BQg zVfa7kKP;3$t7X7;Lgc_XcPl8zf>H>m-w1E{fzEsfg#u`{3gSZ%P+WrAIbgk@Sxtgpi&hxE%nRuZOJ60686$|3P*Bn*SUAFZ+M!{}G6vKzGUi-|&AcxK9r{#U6By z_9w6`=-!M+|9AX92Wr>;|MRs`J&qm+%e-haIWsut9 z|1R*|8z37&J#z-oN^Fq+|6Bi00-L)5A`fa;fb0a%nuBJy|A6MJLAMh8f6l=5KMdSk z0Nwo!UeyB%ga6Aw^Sw}yfl4O^1`Y-d_-es#i1`2i>i-!~?Ee4#{|;yt8y2eIIcOVD zKNK8#pb@J_pjZUYoP$PaK(lwCoCH~Q2kJ$Edaaj1c7o@pMZlo}Zp(wjK25Q2(;-3RqEKU^NP!WJw8Q3WEQsSMo91o1%_VJC=( z3xi5WP`Ug64Y(A4)o zkdhgcfq*tor`}SePS=f(?cc z(EBdHv!@Udyd>xjK#)nGaWHUy8RXYD|G)hI0&)vND@YBP2U^PjZ@Gd+Kz;?))Q~RfFy!Ve$Sph2@&RNwLLDS7Kzy)&et=fPfo;OD z9i)bV;r|sR{m>MTB~Cyxur@V_4J#Ya?%RT{ZUP$(N*^EwG=#zR7>Ey98xQW&fyB^E zfT#eM&ddHU{J-`8*8j`?Uj(P_cmI$4U-tjN|29x54N>?1`TsNjAN;@k|H=O+|9AX9 z`F|gHe#qzlYS7wmaCm~t0MMOHpiqF`-2u9pWyAkD|M!DNj=`&O7(jInxPAtSgJ!ml zfNTNHLHytF|JeTn|5yEg_Wus3CHep3{~iA?gV$w(Y8rI8nnt1!UB>1kN-PWF{}=v0 zf{%^71K;ifG6ABI9dxJP|5Kp0JEB&BjPoN>9YiTQA0moQg6dd^7%Z(oc;u0g{0MF( zK;j(D7_gfl?E{z$sEoieUI{S?q6jH>Km@?#|6a(P28iFiF5FW_Ipq(!a4F4Y>Lg@d;|DZV}5DCuH|BwBD z^ZyJe6+v}@%KNR5Tfsm*Fi0EZ|2NRs6KD-SqTT_S577f6LH7)SXb=X~zaScn!8dDw zQxjy25<1EP(hUtAP)|b+oVP&j;crOuaiG2iXze^a6+y-$KzR-&ls|%Y34wAP*hbKu zpP-!s-$3C55&@0HfoF9(5u<{-v0&YdX$HpLH|KEVp$o~zXaeh#k zLq)ejY0zpr2onnlYX@UuYZ5Y&(U17d^5{=qcpR%37p2;zbK2%$+O|E~u3 zoWa^4ZDTMKN`U14e*^Ds0GE50MOp1kD#^;$Yh8+K`dm9>TU)G1}26T;5H`5$bx>Anu z3F8w68Sv^#dGP8=1@O8`MaB<|9~h(Dn{@jK%W26^xrOD@LW zjK3Lp82>Q-Vc=!_%lMapkMSSqoDlG;O9AkzOF{6eOI{`>CT0e1CKe_Z20{l1!2e+~8H00^s$Qe4z6L7`Q>FOE8Fm*I24CsWGWB2r{WNsWWhcS6YgKS6Xs2 zX)$RrC^2a>X)}m{S6#}3S6%Wj88I0#NHT#=Vc=sjV=`mV0I$GQ0k6Q+1h2qU1+T!A z1Fyj3WwK$iVbBDx!&GImW3pqA0k6gsWO86~V2}Z?$rJ>y$&>-F$rNOAVRB)R0=G$>ayG$&>=G z$>ayG#^h#-VTxhUW{PEsWl#gJ%+vv|%oG5x%+vv|%oG5x%+vy}%#;DI%oGH#%#;AH z%;W;E%#;AH%;aLqV#;EW2CvT)V9H_2VUPx|(i8x%(v%0U(&PcJ(v)EWt9o174-62wtTr3SOnD2wtTr3SOnD2wtTr z3SOVd&D6%!#-I*frKt>FrOD0I#nc5|tH}>utH}sntH}yptH}mltH}gjtH}yptH}ml ztH}gjtH}gjtH}ahtH};ttH}XgtI5s0of&lE3TVY9H}h`h-3&s^pmm$V;B}ik%m<^xk23HuA7ehoz|DMu`6PoZcx|Ty^I7Ke;QO7f zg7bVb11AF~gAF+6Co}Lc@Gw|_S5YT}^M4X}6?Gyw|0jX(Y*GZ50-4}d@aEuE@DAX0 z)oI|h@CxA7)oBdb4A~5h;L;%-ye{4nye?h?ye?i7ye?iHTxw*1ON~tM+Up?j+Ur2@ z>UdFb*%1a_BQFMChaCVeL4v?#M=-eT@CBC|Y~b?3j}dgLh(CBWb^y4%2n3fGf#B8j zLEus&7`&#Q1H2|X1iU6Y23&T8GJa?L&cMa^lkq15H@NHw2bUd8;8oi3;8KGbTxz(3 zOAQZjso@D;s~rzstL+6|s~rz6HQd3aMm%`Uz6`kRa0jp0js%w=-r)87tl)LqKH$b znUt86805k0xxK*ax#PiQO#*m5cRaY1@dlSN@!*mr5L~jjgLe$5G8r-%GN^#dmw52L z0Riy70UmHE6AvzB{J^D*2e_2+2bVIQ;PNFNT(ZQ2OBNw;$&vsrSwg`jOEkDli3gV^ z@!-|of#B8N?%>iS5L}wLgG-YjaA^_=-kl%}-kl)H6a+p29JD(@3cLy&bk0sFgAcgG z2?Ccmk>C<123+DqfmeaYfXkgIaEapzE^*?(B~C23#EAo!II-XoCk$NT_<>6t4{(X& z3odcO!6l9_xWowumpJ_35+@v7*0_Vqnm}+_;|?xs{J>?62e_>92bVRT;QbSV;QbSj zawi^K?!<%3oj`E8;|^XO9tbXX+`;8eFu2_D2A4a*;BvhKtF=@SJm zcjCe2PCR&Zcs#hoNd%WTDc}+(6GaqIUXFkGwgh2va(piCbhp;oBU_QaX2rln@!8=7bna?nvVXy|T zYj*>$YmZ<6?dt*U5dzJmq2FR4%OJ(<0R~YZYto?O_lL3<3k2Da0^HqT%zfKOEg_@S*8bW0qHY-X8gin!1#^v2ZIsg zFD6a~Q*epn3NCBhm;{)l8Qj4oMKHMa5yGU*q|Fe4 z9b#C;bcE>$!)m5uOvf13Fr8pJ!LXL;6w@h&bxdcN&M>S8-KW5?0i4?QFbgmXGwcP& z`ay6UA7b9gyqn=L^Iqm-49A#HFrQ+$0Ir=tGdql+7VG_Mry@c0LxbrXA$0W|0Jc^8 Ab@Xul4U|^8C!@$7ckyenN%N9AuoPj~yf`NgtI6bkrfI)&mnSn`u z2Ll6xKzdGPTCa)!GX@4_9tOrUe=<@NQ&fw?=P)oZ>M$@cm}O+7CbEBI=VxGGOkrSP zP|3(GsW>__=_&&Q69)qW|E8S$@RW?D+<{7m=-ZGFm^C7Fev0D z=B5hXG}+F;_<@6gf#+30esRgvtqX25F#h?%z@T)npeVKA?#>NL3=9%$7#Nrgz+uJA zz;Jg-P+2^`%~u9_<`)bM3=9tqrf-7K)pP#c`S+IPA4?4bGXn<$6G)VS0i=(G@!wkp z23FI5cm6GA`NxpLAPkiQQ_RmmYM4JWWHGQaY~To~gRQW&i{7@4>^m|2;a8JL(CFfhFjU{J6I8_dAK;OXS6 zz^KT;@c%C}&wmw09TrALVFd=p`5<{FUZ!23kYHeDyuqLV5@C45zyQLGRt(aNFBlS- z8vg%eGW`FWc{M`}(*Xu~Ms|h-#zY1?#>D>(Ou-DHOc4wYjK=>jGIlfQG8!{TG2Z{b zohgDrpDBXDk|~0Lhbe+VkST(Jn<;`pj46UamnniFmMMZko+*OCgwdTrh0*>0ZKeo@ zB&G-kZKenYbH-N;4$RdI)=ZQB-(~7%5M!!luw+`rAjagxAjYK2AjY(Z!IEhYgBaud z|9_Yy7+9GmGKew$V-RCj1j~srZD+7#s%3!C{S0DEUjKhHSu#X2Eo1OtDrZP$UdvFz z)cF4fQvpLXlkNYnjL!dmGu~&I!sz_}98&~?A(P7gLrk6w>zMo*g2tW9I*hOc4y$kg)&%ok@g2 zk;$Jyj;Y}P2c{wh6ObAvT?SqzPli5bW(F(9Jq&(KMhr?!5e!bCcw;=u;LPO7u$u8S zLjqF-g8*X)gDRsBgA$V`!&@fr|Ie7(7#tYm7-E?`8RjuYFgP==W(Z+2V&G=3W^iV% zU~pzmWl&;#_5U3>+(BWFhM8ylKLL&lP&^=EP&^=Gru7V5p!fmD11K(#aRh@6({=_X za9n`m1BO9yQN;r|Njrjzo`8G-(h^FCI$y40|o_99s#G* zi40<(w92H-zz51NV7>ns#26+2{|EEq7!(-)Gl(%RWl&(^{Qs9xje!vyk3I~1=rnT{ zgA-WHi-8Xu&!8{{#WNDkyqCd}*@Hozsh>d%ln)^E|BDcsfe(}~L3slwZOIVHn8d&j z%Dap?4BAYV4Bm`63}!JZJJ`SjFVY;KAg{(8c7*(9gi|zl(w4|49ah z|3M54|I-*4{nQCBtU9FWi;bQ1~H~Z|9^qgyzT$5;Iwg&!4ec!pz@ii;r|_Y`Rv2M2oBq| z3}WDNI^zF#P#lBGV`ftZeNfrVtjUnVwB!E|uzpZ{buh>?@iIs=g)m4knlq>~88GNE zfy7+?KV?#2&;XaYybRKe+Zg0QYM4qHWWnmR8Tgna{$B%^f9ebxjH?)Az-n6=jF{B^ zUt@g6AkSpMAkX-e!4z!fBL;aUh5wtGZZhaG-D8jkn*p*5l&(SaJ!rmmVi02%Vu%F$ zyPv@loQ6U95n3m)aQ=V9{F_0HS%x8!X$rJnN@j3p0{IzKt`ste!NQGM{QqH4xG~@V z|BEU9|37fp?O_lD>%08_5j@;L=?$bGRJVcZL{OcU%;3&k%%BGfGp1(@VoZ}5Vwj&Z zh_NUzh%sGc@L>ko4Judr8F-iy<+C@LGEy4&;Z#5cH2A#OD0POCFZ05A2NOae;1sVK=ISTkjx~;pa+T*u)jnYOydR0Lr&_8B9Ux7gWD96)^ZSG5r6= zH2wb#CgJ~QnNt}enJgGIm`*dqFl92>FfC(d;jl#W2*1*4N0 z+`(asPETTp0mUaQJV9v*9G{?c21*Al3{tSN6`f|f0!oYj?}F1BD7_=OAKgD>^I`rc zlLmz|IL(3btt5j8JRQNph1xW>dID6hfW-09Nc9#tp3wM=Ulnml;9jzVQD~j7u48m@65iKy6MiE(7&y7-AUN84MU-Fc>ge zFeouvFmN+W`FDpggTae2oI#5*n!$uIj=_b|mBEuSiNT67j=_X6gMpJVf`N@O5Vm{J)m!0q6_3}VbF3}VbT8045s8N`?@ z83dU!87!D)GVn9`GPp7AU{GV4&S1$D&ma!gd zEG!ISOwkMpp!$XB6oVXd8-p`*4TCdt8G|!(BZDe)C4)0_3xg_iGJ_IxErS+wI)gKF z0)q*-ot(;`#9YE)!feLC!Q8?S&)mXr8Hx6X@((b#Ff4{*5F4Zpgts%dFzjG%VSv$6 z%%D8f!jQ`h!5}s9Ox6r?;JWkxgDjK8|I48M6*w$GZTAQUZDs}r5ysvBk1@J4*fT{i zXfZ+hP3lY$3>r)k3|`C=7z&vuFvLRL1vV4JW|_(0z#_)bz`*c79)y`H|F2}K`o9ts zhs-Y+xR?wXB$?d)|6u~PK_UG&P#+G|PlI7&rU(XJrilMPnIitbVT$?yJ3KkYOrjFkn(*FkgKz&07hW`<07!;-;u>=N&|AJ6CkXR_Rowg9vH)HZ-cme9af!b~0 zei^8riQK;PVVDeU->qZvVf0{N_`mUg1Qf>p2f?8K;s3e*2mX)!9|(#$24)5ZFqVOg z7%&$wFoRh#3@pqc3=9l27#bMZ7$g`N7z<7u8Ka(_*Ia4Il9;V|= zcbQq3d6-3+rI|ID>zKQkdzcq8pJRzQ*o8zZpC9tY)W!U+Dc|h9!jaI zr__bjeY6GNJa~WR+l}8$|Nj5~`~N@K54;Qt3=0_h85c0FXFSXJi%A0PvfWI_m~JpL zFtafWF-tQmGuJV1Qa9` z^c5_@E-O)JP*|w2LSdt#u%eQpo??Jvu;K*8m5Lh_k0>!I@k3pf0CgE3*k#v$GeTX) z`2Xww$Nvv8F#KQgfBOIG|8f7_{%il|`nU4mf`1eK<^9WLVEC8F!0?ax@4vr)|Ni;= z`|qj0C;lG#yXWtsztjFs`8(ln+85s^ypO*={_^PEBhaV{!=syzE<9TLXwjoN3=EGN z!G33W#Q*T!!?zFjJX{OmGcY`Kcxd)em4V^z@;mW&)NiDT%@795vD8CGlA!7)Kxs^> zj)8%p2~!w{ND4z6l1vK&149qP3Wjw^Vrv)0n-M}x&0ER$@AckOu5Qb2O zFotl32!=?8D28Z;7=~DeIEHwJ1cpQg28K3Gwft8WH`uZ#Vo?C z%Phn!430}qhDv4@W_D(Nh8Bh%hGvFdhAxJFh6xN48TuHeGE8G&V3@)%hhZ+mY=+N_ zX^c4xg^U@DnT%NsRgAfe*^KE73_BPYbi8*ka0WzdWMu4%+`;(2bq9ls>`n$w2IlxU z-5m^!ItmJ|nJya`6LfblFzM`IVAN97-NC@Dqu{oIS=B8lLOD{QOQFj%rAxt0AtNzm z1B)t{4vJ7t?TXY_*uW4Rk*TnOAtXX^gF~b=oS7OKX{Eb^fdym^3)q~lNCh{AET{=t zi77!5%3YEAe|2{-u(BLAy!NDa`T2WEKb;E&xhz$o^q!lA0b$2kZ z!Ck7L;98q00d+IG&JG4PE!`aq91v52BQ`ilZ(xY*>H?V=9HFeZp`oiwx=T3{#^1qk z08N0A0bRfWDzJlrSuHqX1GB2@4#tLn2xY|`j19_)(jWn4MPJ9%bQzQxBpLXjA}kEP4E79$49X0mP!U!JO9nj#H3liT z8a4()26YB`264CuJA)I0F@qL^Jlrl0Fkg{Df`Jce4kv>bgAIc|gA#)XRD_EmnIVwD zoLY2C#VPE{1#t zDX{tk5M2z4F$kX@#4iPzC&j=BQ&+l+VLnv+1A`0$WAQGA3s8CklokNdCA%05pmYF~ zHegT!t3MB=?Ll-2gE&J3gBwE{gBwEvLm@*TLk@#Cg9U>QLl1)wLj%JMhAM_`hWQNf z3=9lB|1B7J7(E%-7z-KLn0Og@n07JnFg;=5VNzn?VPIe|fWj(H$31X>X*~W5?(*k5p{aU9`v;Pl~);H=|Z!Fhqpg$thnRra0&yqtc@k|BKP00hw@GnHSxG&T4v}6XqbIXY=9_Ge z>>)W5xg5DO@>22{@=N6ZDTpZ~C~Q*Lr0`9#Lh+GOmC_?+9_2kMGAh?pt5n-mm#8jL zi&5)Qd!(+RUZ)|TVWP1~ z7c*Bf*E6>=cQe0WvCra^#WjmZ7Vj*6S+ZFQS;|>zS(;foS^8Ptv8u9avzlZz&uW#` zHmgI{Zq~1?zuBnSG}!dm%&=Kvv%zMMt$?kJt%j|Mt%I$PZG>%#ZGr6}I|(}#I|Dl# zI}f`My9B!&y9@Sq_Fnd3_DS}6_Eq+64swnXjw+4@jy8@SjvbP3Cy0`|o#<+fPTi~|FZHLv@5zG+G z5qv24RESlGQ;1(kR7hG#QAk}#SID$btQ8h+^syMWn2?xzu}-o3;!@%Y;%eeL;->}DNg+uiDJ*GA(w^jXDF!JGDLtu1sZFU}sgqJ?rCv$Bllmm} zO`2KSt+Yq!D(QXc*D`c6Ix>D_dS$N3GRRtywISOmdt3ICoUELpT&>(?x$AOw@oPQ}CqFsqkIVf?~enzT!_MNhR+}lS=bStIBxFB+6>a zTFQFLW|S=`H!43>eyRLk`K$786?GNwDw8UoRn=7URL`n@P@`58Rnu4VqSmB#S)Ek9 zK>dY=xP~{4lbR%&t~BSgu(V8QwQD`r7Sy(*-KKp`hfv3c&a5uEuDY%V-Adg_-C5n6 zdf0kmdUo^*^``U|^uFi|>ATYJ)xWBL(*&0Z_a@d%lAEM9$!L<@q?AbolWHb)Oqw!j z&ZH%iHcZ+x>ByurlWt6UGU>ylKa*1?pPGDa@}tS`CjXkkHbrPk!<1K3zD;GC$~RSN zs@hbesdiJnrnXHzH1*unThkP#&6vJv`o8I>reB->X!^V9zh>mksG89>W73RyGgi&m zHsjEYb2DzucsAqHjDIuvX3EXfnrSxEX{O)IsF`Uqi)Pl%?3+1n=Bk<7W*(Y(Zsx6- z&t`s_`EM52EU{Tiv-D1CgX2;FWnq4-#X?EZ2S+keT-ZXpP>{GL^&3-id-Rxg;*yae$k(;A6 z$83(%9KShHbJFG%&8eHyHD}tKMRV58*)``FPIzO^zqxF4`R0nvHJIx)H)-y?xp(FX z&6As_HP38b$-GnZzRhQYzy%@;j274}h*(gxV9J6I3#}F&S!A>*ZPAa#8HWtO*)-whO$M9V zHvQZDV@usuldVg(sch@nHfP(KZF{zz*>-2!n{9u#^K6&duCv`{yU+HR?K#`0Z9lX9 z+YX%_X*<^JxVDpFr`FDpoildc+oiHAYuBn>FLoR3uGsxxkK3M*JxP16>=oJ@vUkbe zeS44XJ-1I_-=clD_C4G8X}`(-to;l2KR6(9z~ey0fn^7-9b`MW?oiF4D~GiXUpRc{ z@SP(OM|qAeJJxqx>G-1KzfM$~cyUtcWWy(1>uckJAybI;Cw zI$v_W<@|*6GtMtLzvhC;g=rV&UG%zm?2_80gi9Hh{$0+yeC0~Wl@(WQuFkr;=$g{C zzH76tExRsuJ>>e08%{UY+%&s+<(Ap4Nw+@T_PM?5j>w$_cSY_t-Q93c;9lLmZTFtt z7q}mCf6Dz=540Yvc&PBu>S5W#OONy(t$Xb7c-|9^Cn-_^B@N~&DmS=SgOrSLo zj60Zl7?>H@8LW0OuzV4U&q%!LcgJb%8VFu5==F-ZUa!sx)Xi-DCv zoWXt<0~4rw2R5HcU?f#Lsu zh6KiWOl(X~1k^yyMFDmOE{2B;3=B;Fe=;yIEn(WlAk84puyPjzAE@gIb}OI24hA`p zTe+>> zHa7-iV|HV6V|HV9WiVD2Hdkh6jG5~g<(MN>?U*Z6?HJ{V!b^0V!1`P z+q!iO%>RG?U&my@%)_9{pu=FqSiXxv8PvrFhlaAi4hF3YI~YK;J}6We^mi}_=sQY- zTl(@03=H}V3=H-R3=IAZ4B*CQJ_7>-XfUUrfq?28Q#XVY)(4YTC)b z&cOD?k(J>Ag8;(^1_1`9LPu5x2L=I#00@Vf;XH!?17oZsGsAocgB`SDia~%ufI)#l zfPuNtk)2@yg8;(@1_6cx5CK+(0tNww2CxA;7z6}%G8izhec8pp!C=6^0QQQ2zzzn% zJC5uO{0xE&@(h9u`V4{~qgWa883Y;X83Y-aVjVdd)-wn)fVx=c83Y;bGYB%U6oQP~ z!61BLCxa9N+ZT`zb}%Sk*vX&;wm_Oem_Z9{0VtoS-f?7QSiqpluz^7pcQNQQ2r#e<3RxN$n(HyDo69kZo9i)}n%FVfGa9qY zF^aS6F{-o6F^Y=tG4V4h3!A8^v)eH;i-?=^F|M_VlZX{^P*sfxQm_p-7s?Yc_7jWc z(^F6i43o8vuoBFBD6SxHq_WCN)jfgKFY7j`g!XelVI38h`Z=>?R*F>(+iD1R^_|)SkU}R7OJ4R1`2ZNfxP6jiu3O#|H4E7A{UknV58I2j4 zK_!VD6Sy4VV^TLVvu89jHBnPmV&i9I6BQ9-Bp^S5$)x7*8BzBTB}-3rFsUdd!^y=e zCIX=t4}b-+NipsE>&9pm5NH-|s|X=Ov~`Un`6Z;F)W0-{FoZ;tWMF2H|Nn()Gt)5! zEe1;lXND8I7_>nHTwpJ23qT4B5N!hwZ&6TaiXsIsMggS-QlSM2Z&87r4BFtd%)p?{ zzzjB*SzsrF6#!D8}omI8wngD6-`jX{Ay9&C!5{!RvE zuqmKEJ186OVz2>KL*N9j%Ezdzq{jqG?9eoCY$V47O6lz4c8uo6?8yfQpkiNC zL`>X{(bPnZ*~na-kCB~CRD^M}a-y@bud$Sro}-$uqLN*(k%p6jw5*|nab9U(d{2-Eg~a>-T!jNUraw3#2G|E`AC965~5dF ze+L7rzJZ~+i5-)GTTTcr(D#O{SJ>?%}O zi%ib7O5qpfEZF2K=NAhe>}CAl@V}hV24;sav=(OA!62l+gMm%oz>radkBME`j@h0O z9Hi>Ta?Ff2*eqe3h{F~}hERt0Oz}*w8Tde9zzQ1Lh4=%Ud7%|LI1J3y&DG7t&5ha3 z#o5K#)py5Co@+c$wn=-b!p?{spZ9@%X2tHicRCf=Om|wqz{udhV9%t+q{_g}pblzC z@G$U#%-zkv#K6YD%)p|(g8@{ZvR~N20BTflT`(}TX9QJPqpIDs^DeerL(f zoh3UN82?}VpUZHLVI_kogBBg4!XC+Da@;+@6+MTJ|C`;;c;U`YSc0I3&4E3pEs-G}sh{IHb9iG#D5ebQ#_; z<};QsFoWWmkpY@UK*@!Hfms{mYDIQkX-0MFcWrH;G$r-_E7*;K3`)BgI6;HtNNz+F zhC3KI?-&@0g9LVLD8<0Q_<#HVOeR5anpFZh z0_q-6V-Fe*$my1y(U{Sb@m9k>wdu^&e_BBcb@l&$VRB|V#vsg~&EO6iJkw#&1?O=Q zl(r)mC^Wf{N*;vMK_xe+`UJIn6d2gP7#Olbb3ZKGs~dr;J#d;-Rsz*`;4Hw%<`kkY zq!m!+3!%&HWwqo)IV4$F)D7S)9)0g9oyZkU{`%h0+90}2%D`EpMnqZA*b2d7U}Ugl zU|>>Y+Qq=l5V?zi9W*h46wd4**R$hrJtMgCX9qQgFMyIJ3j-rK09f@wZ90(8Kn-Nh z3kHV9=ElOx?CR#m%*O1N;#*=l*N2{eR5C%ljPd#|?>m3@lrb=Z#@(1~n2s?hF@*18 zU#6Em3sec}+xZ)s1X;<;nFkon zU^H&qDWR#ZBFxXDqGO|BsOqRMEo1Dit?T9NsFKUT$RPOt3zIF=F$QynL{OfxV6a4T zzYxg%LP+jc1_>xbGMNy#jF5H_s1gCSoQ#dk%*{+pP1Lj*%^5Y!t=X8E^fWYF6#~SKtle}B{Vn9e zy%|ldRNXS1jJ?fNxHI`}ER1Y8m<)A2Bp8=!%5m_qDXOXJMoDVQ3P@<%sJg`nvU2&@ z7>3v?iK!Y$d21NyYjJS1t7=s;Fo8zinM{~=F>o>PF(iXRfS*AC>}(!*EzAP)Gz(HF zAo2pJbHoB|(=h4pWZ(v;El@*>TVMwR8?3`=X8B^9ohlz(u|NFGVio30zaqB;ug0^pr3Ji=4V*kG|`7-TdP-7?tB?@&04W#%{ z1-VQW$z^;X0X|6ls0!?4U<9WzK7pMK;^69=je!wdXoBhwM`nh61~vw8^E?2|*vSCO z&!F_k#-ISM+8GtujiH@3J|^V&fo5(tc6DJzCX;_>EIDO8?EK@^ymH*k{LGcPOL%OJ z&1^WCm<_bl%>)b67-uorJTkFNjx$N})fZDUl=4zHw$bGl=GM@W7Zzab2KD6_bpL;0 za%9@YAj_c7kh_aP9W+e{jtg~^vWWxaNe(1mBjRHxgB;kOpg93KuvQU$M`nft3?dMJ z3V<0q8Pvh5_!vYO)WQB_1r@}Q3Y%RVk-^lF6D*_<?v-U`WX;9ItfOme1)_NBbA0D zGK>+_)l_6>EMSbjBUx$4_(byGMkeR_Z*_lZBkdJV+`^Ph78UO<)AK&3xg{- z=rqBhzJmco8^Ln}Kgd1&Slt6lKSm7v;PkVD!AO56gC^L0>n&4)oIFtqIZ0uyP z2A2%r@Hew()B|^!AmtmpT)>P4Va#}8EY6SeWz^JGa7c18@iUeTa9}hrRrScQG_>Jh zV$#)tP?-j%>`W|L+7OB-+0Q#ekX_K#Sk22ySwhQN*)djvgWtnm%imtDz(9+epG!p( zN->)2D{+gm%c(*sP+e-mz`*3ebPSwcGj=h^!PBc8Xs7@lV$eYZ?BgWT0yC1`F2IR-&+QiV18%+>jrK{*oC>^3$MW5oy(CJ$IbbrL~IsLq*1 z|Gq*}sV*eVGTz3KR_pIUQz?{!jK!$@|H`P$Bq5;2Ajriaz|J7Z5XzYU|NsBn|8t?@ z{0MOdMuw#S|Cx-Kq8ZphZ6erc6~hh&CfLXfw7wPrwY7!K8QEFc#o3dD822gs`@(cV zhLI_pk!k)^_G#S=Obpr#Ell=|_rYUdnxGaC2LmTKwSp>b_6rQV85lri83T*WSnEM!^qiGDFj09~{ zA-m69)m+`2k)1J|kq6|qFrj}=^FVI<_c#3CKhQ!7CI*N9Uziw}jxoqE=rP3YV$cCC zcmTUmM_>no3_M*3gL0BEQcjWu3CKc9Z?!u+7-T?$5TMz`2MjU{OtCu{q@lx4!U8)P zxWE|))buw;6vm*UOAOTW;%5StXrSsA-n5*m5E#nM#H=HyVJ=W4pl9QwpOCF!;j1H< zuZ27a_i`qOkq)~sm!iC(hOvsZmUy(UmXDndr_WdDcpQ{sU}CWT-_9J&bd({4Aq_N| zpv#cXkOB6muD}k4IIurqF$`^;%h^SO2ZIkcaqVC9So8JI~gp%qY02!tC=|{%s|~$c2Is&vt?8U)21e12{CbFb7N*UQ4wR% zNCPOK^_UQCS~(_bMs{X!Yu8K-G6W$aD#F;{T^XXw$|e|CIz8N_BGQ6pOP#2w`$4lA(|7tG;;5gqY8BJ2ziv$C|K2b#Gl(%T zFjX<_Vi0DKW6)wK+{GXST1EsmS4dz7gUE#)3?Nz)?n zV`wr6gN>2Z2MqyftW7-Yd>pbRF*0CJ|VB6utVUKuGXsv1EuoHipnydKhKWM9On zrRJa~# zE7UkjNwAAZE@zaJQIZm47nNE9Dnl3IU~KoOdzEp!F;8^v)n7(!$_&AA`V7 z1{ts~AZZ;uY$ndG#|%!Yp!N)?sV&aO$Y^8{?WAI!(CiaeD%r>;B&{yv7A_#h%v5ac zE?%iWl}E)r%ROd6nM-7#nTWC^e}aD=za&?qm7aNYI0F+nj{3lDXmJK_P?roc8nS}{ z)Cgw89WzjGz+*-X>}pWIQXK4RVQ|^S#{>#faXyMk^_% zT@5oE7B)cQ6y%n0CeW~eFUT!i4BSZVJhI(lU^>w>B#T}ai$BCwM|2^=tt3`)>E4(Vcm z0!x!Y94e*>%~+u64#W^4sBs4x4F{(|Hc=5dCSz~`s%);vtjzd`Ln_YQDA-2PG_gHc zFUV1!r;^9hEHF|)j7>;EOI*QHSB{mvPJ)rcw>;n2L)k6UEpAb{v#6GxhJ>Y+#<8 zl%l>IpP;;^gi_VNI#BXzcIQN+#r8*L;MXc;t(USpvDIa zc$l?j2Lq$Ngd;P<0|rJ0M$jZk0s|vM0Rtms<^Yro84E#!3!nmpQIT0$*qB*S*qB+F z@#()mRug+BS}?L$OzfG+sQB+b)2@Hd872RM((eC13=E9Nz;5^6#lVa<#(_~9BhoIc z-v^qd0;S*`3>?t8C(x*dGH6u8T#;Rw*_fS0A}lscoY4+Ul`)35CTZ)7Milb0Rb8s zWxTM1fde$@a|be82^y;ajmUC?LP43IQJ+y6lum^~?o(zeVN00prOq1L)iWcN<>kVj zF2=KMR~}dXGi2KJZwsRjD7hl#HD1tI5*uitFp`@w(kry|N4OayuAtEib~C5}!E^yK ztjhs%qdLTW;$R0d>S?jXclOLJgiwqD-TzdXcKzGX&3GH^HYRX=ItM)NsR|kQRD*W5 zNE-J9jo5+eCs}aZA!=1n`w==D1!^OL%QjH`%4lK~?W$>((BcQBUEHDsMVXn3AQX?H zYqnR^f(lm{-53{|DIm$+5Eq)sFU8#ety^0`>--obKz#}DLThl6l>m)z!|PT&DGfC1 zypur!TwrrENI*xcxIul)1O{#fP#+VNWx>@5Xsn!%3DmLywG2RBQPXA=>tSTiEY|Qy zv7Te>J5|Y$gOyEQaT?REq)5wnXVw3V^(w03vK-=|Nn}tsdoqE-8Ppk$1vRq_8H~X0 zl?6|O!*T}3$Rcw3l)VEh!9Xcg2AooNGRT9=70{@o1|;;A!Cf4CMm=Uo9~cq|{EWun zSwWEF5%I7s&&Gg-nM2LdKpGYsx`9P5-1&Wwn1Dvec71JLDLyqWEtgmuSiA&JDe>X9 z+J=Z3Py~U;t3YKFC~o)}q!}KA)*i?}n~$Ki2U763!B{5&jVy4w1{X@mDW6FIG(Qch zNx|z+1%)hYb};aRtCtN7{GfghJ3{~iKSKfoKSKcnKWOHgnLz<0Q|JiVXaiL;fq|c4 z0Ruk+NDnhe<^xCxXeyoo#3*#+L@}j-fuDgT){zx#k^yM#a_mk9X=s{}1{b;phQ`Xm zijWk-F09O~Yz`Z8&}L*`KCy>UASGW+$6hOBwrlY^SSnFv+7%b3?(JyE_wNlOa}6}5 z>;{*e|9}7g!W7MPj6t6v8&tp>Fc>107ZRWnOaiGWN7QdS7$gKB=>Zhz^3W6wYLT&n zUChG32QG$pF{m;~Kv^;j@(ilr0TfmxHE302YNDnOPd#GLMv171m^`B#GpG~I@ISm= zEnmvj%-&5;Nl(pAM_k=4#m28zB~!xQ)XZL8MMuL)PfFc0lgGj(TuZ}3M?ryui$hk| zPRk(3M%mCHPEl4*RZfnBi&IY5PE$9+RU7PYhDZhmrV?;}%NA6xLq;%QIRm4dgeD(w zYC+WK44^WQSy@=wT#=n|QPISr9a2n;QcPBVk1<&_KTzy{i) zfiHZaO&vseEC`ALK~Nn6Z@Vyq3N=vCAZ*MG?IxR<3p476FteoDxCw;!hw|%tBsmsW zvatFy?fMtTr_7h);m5fCU!+%#n{rWsh_)1Xte24?nSp@`RBv)JxPaPa1lq#T0T_ha zkP`z7Xqc1PSent;T-ca#YtSS~A@;)lS^uUp?fUom-`n4es^B_+k)ecvf%z%ZE(TGC zGEiq1b^Z{VDG^p+*a^+02o)HWEUK#@>rJ>W>|g**HVH#q$;}9Is4z3wt;)=%%IwTd zeElrkT#0q_+1a_m%O?H1yMlu=vWaQeznA~sGBPr1{(JWC*)K+`ziy1mUmyHC0Zv2z zZ!j=09RjzDQbFww)OHbu(=p-}n##b53S0z1y)R-H2}+Xe;Hhv>PX)p_$LIy^LXa)wRz2JUM6vznFxP>NX zL?}WhnGphrPz3don4sC4MSlkasL=vi;|6K~7z;BSgIXty%sb7dOo?MZx!~VH6Gnc< z)&FiWs{QkTjKwkj|H{C?ln-``J7{bj)h*CaKv<0kg`Er>;Q9vC=0M~+(1^MwqdB7@ zDAy@6KKsWn#W?HVIVr|_QvcEzT^ks8H8g?m!MxCP*R0tj=gG%y=n{`*UbL6rn(z6vyc%Wkg7ZYR$8 zR(yAPIXL|@tYdOvEMV4WU}n$(`3I_J2Lm&xT>}yZj|=jHcAA1Jy$xUnXdqaeeO;YP zB-0n`BkG_re9-)dC6gqB9D^Z4H>hW9#9$0=uYhJfMB#NfbR~`qd{jvaR5(g8AOxUU z43VP{$rv;c0;;b-^P(IK^5Cx24hGP29mw2>1cNAeZUizSDgz$aRfINflp&obNDBut z8fna~3a)wW89{@N&;=%p>(q>x7@67R{p?gtl?2qCB8|-5Sy_d8g002=J(boG5R_yS z;Ly{Fmf&MzQPxo95MtqXaFaH4Ru5@UFtO2&{+C>kE+ZmhE*qd~RO-g9#G|YM3Ln1z zUzjvN=T9(bGBkohT8lv&96q4&c5!(4Ks~Df4+D&U3$tiFbJV-OyN1_juo zpuU1Icup9U%ca3FD~_~U0@CJytXu;PgP4o+F}~IIwouUWPP0*UG*nbrj5D7>h+#d9!_NRRLh8Ey&aG%5s!*GFMd#sEc6IG*Plv4l~T= z)wSnjv2fSm;}H_&sm!!5jWpv^w9wXc)R$)F(W3t`kKhB#hvMW`0DjfsU(*fmX(_fO8BeltBxOcQAm~ zi1LHQKxG0bKN%Q`vuQJe2eORK&8!(AYp1u$E%K2_NO2W&_<%MIgCovIUyN`$lVMY3~UVA;MHu30y`N(7+Al6CQWuScrdVj*~Q?*5W?UAHrfePD>X1Ufx2&? z63&SMG$06?`v#5hSTi_*RhfV$w*(kWKx2r^3=JSgks~w10uTd~bPh0>FkE0T0VOKX zSR+W?P6i*aRgw%o3?`87jR<6=2B^j`H-${7BPQ0x#Lev(!Qlm4bE6Jw(pxhcv4hsz zfY@Tzj7Db6;2Or%1X84miZFhZb}fx|3NscFlGl=ul@nIb5@S?Vm$8X)l+qDl<_ z7t3arSCp}db{0@XOGL%E<#{D!)ELuLmHGKtEFdJL z9l*!Hz$C}?gh7=dA5=R*Ms;9iGc?m8(ji8z1YJP`F08@L7ihu+3xH}RS#a)VW{?Hf zK%gc)XoVJN)f=ePg078W<7YHxhYd%71|HNP;l|Fa462Fbg6wP^Sy{AA#iBKIm>4yg zStMkov;>8u*vxuBRgk^AyQ8qO$n^qEWlnyU3w+Z2;<7R#qQ-LnK7q?~1qKF21E$vu zq6`WQQJ|ijB7+h*!GMM>#o#FwT3RD~D+5ZpGDt}mxek^At?sz9g8{VU476y*z)%?6 z!PKiJ3=CNfO4$)HGxc0W~j}++`#<#W;DTM0nwhzdLnQ zxcC{D{7VL9I|ioz^Z#2gnlQa);9!tr2m`H{m4_}70j)S^g8Km)V~BD=1mp)1285@e zQ3x(5AjJb{y*_9)C8$rz2rd;cJW}0L&gbpvFXnv?=6bj{n0Wtgb9F0Vnh$q7oBWKpXPOm-&M$lqxMm?q{ z3|tJRpz@fTfd{Ft4-GR!AVPx~JYLTMZj~5=!VD7CRhov(^*wcVVxTBws{Y#pn#tf} zU|_aql4P)ASPELvV9j8IWInXpgzz?WLJ1)N?U5n`5H5fQ4Dt*UI442}fWSEs)Gsjs z=R_6;6YvcG4hGPalPXw@8#K-X&Jdt+AyJ5bgpJw3O+_(r2qh|lCzlGtGc6lCGhb$p z1e{G*N93axhP6h#Ry$@;&NP=AtZ|;DXxu_e#oBq&#(1*kVO^;-25Sd~c zBreRzq^1g?c#1RJDxa7 zB+&ahRy~Z+jvi89hqns3tMl(JBdkS?)Y$>GjV+i!{b5iT)b3&sgNK2bzzzmQcsUK7 z0YrEiBgZ3q85{I4=t_@PXGtqfZ(`y1vSgb_r_FHwNAN zLOm0Ebl{ylXh@*=KKidVqdv^vu#N$Eo}72&k4qop-}1=b#gDh+se@ zUC^}JP6i(6fHWt#JO<6NfQlt%Pzy{6Qq)MXbI7V2%Sp;8JG=3kGx0Wy>Z?h17&`m| zoyNq-!1VtM<6S0625rz7xiaVg9i(ys8phbI2UYBl)(anlEOZbJ)L#KrnxK*aHb$<@ zAO;;Hmtv3wuj2-9Oh6eUhc3%R9U}*CX1nT?ryL<>t!t<$Dr4&6A!Qb1VVkTRA#AOz z3=xsF3ggk!3zAh-7U!2>Vdr$US9LLw*VGDE!h}fyQnaVRTGH5d}Fg7yHW)Nja z0?h}&$7gwAtH>})3g}`~>;V8OG(et(EHo7Y7bKtnfOH^?l|VaEg_X^XK`Xn!+fJB` z*|$|QF`0RZsVIoC3N^`Oif7uyizRbNa5M53NJ&Tb75uvlZqG0>X#D@eWWdDBpaN=l za)FLHLW&m^P@_c!so@13I!3q?d8r>bcR(k^z_p#M0Ay<=Xlc_<22jsu7lRZ7JA(?i zfiDamga>!=%pesutmO$FD*|t{75-<(%pwl0oIq`~Sjgy*Y=Di811pOo6Yswhd@|fp z;QEM>?_Y8OWJJi$!`)FtMTF56oEP*M7?`w}cp1QB^qimrppg8Ckr(jRQP44Zc}DQm zdcI?~AU}IV?9_knnRt(#I(6*tXHZ+qjDdmKoQW4QJ}(41SPIELXwE_eAx1F_?R6ql zKvM@eOu>N+9mN9+fEMY4+Mb}r`Ji^R5V+wb4|X7gWLDN^ROV+?HtS|*W^+tx;^Sts zi|YC?nV*-(@;`#=!XhECT}*$o;$wsgMkYyjB4^?u~FA zhWnu-NnqE3oeT9cxUC3U-wj$8z6-SDgn7!1(|1e+wpECSC?Xh6vDn0ctxIBjlhqBOD9OdEizzC%B*n z9R>zjc?(+Q1!}f38Z+`SgWBKb%*OJJ#^#JOrvBTL;EkE_jTd@i#b~xr63qP{-(@)ds>TP`82Gu8`~vnHB(zVS`%HY!?g+ zmCYH!6Jv_(++vJIAH^7Fiv2sw$Rt+4s9S)@!{YzT7*{dm|>lpMw z%kHEZn6-B>fVxVcX&h;R9Sq#y1&2EsM8V5ZLB)wOc`{tvEHgth7o+eRWuc87?!)GEQKSX7Jp_zzjMx zPEg2_VK;*)0~-Sacr*pnrDMATnml3y*Iczb7&t+@8bEC)UU2f0VBiIhqu1Y}eO(PjeeK~Oz2~|;7V^Mi&DLy#&vbX@B2p@mA zxH20z9|x4l!1Vw7|6oQbCQ0xa2u7e;4%nJT&_Wb8a61ST;-Gc0&|(IhLfP)@U|_mq zV8{+Cnb~1IYQ(Vzoa$-zoa!bY(S^0>w8IgW~@_CVr+e1{nrb zh8EE1A0(CTU;rgX1+Y6nZh+=bup7|I4ru=hI$;4WT|mn!IPX9f0C8W~$pEPvr37{| zfa*rjGz4hzIf#Z#TYywT2Ivh8#bHBA@NMnPc8s8LYtYgu5piKYMt(-NZ7zYzPI14D}PnYp}R5|18t|H{NAZK|1vv%=redaJ462}VRSJ=Y!5)P+JP~tvi1Go_M-&A&!B|1Z zoICbU6i1!$`~C_-f~Ks>7qURh!cTHvc}Zmb3xLo+r)w0b}ta?qAuMRqx9 z1G97q2WB<*WLy7q69p+eAW4OT{EjV_h|DYZ}zMo~jhnP1*XD&8wr7M-7IWn{r2%&DLOqrq(v z&|aHeOuHDw8R|gee30A-8;5}osvyz;G)p1`ptY|EXwa5}fsug|T+D!4h^!1uUqB0e z89^sPK#%U=h0=oHrALre=AdLE3Oc%jT^W38hqAdbWCEHQa&iY_hV&$^nWw|J_V7GvV!-2Jd--pF$PNpUxun( z40fQSGQo+*PGARv4k%5r!pbZqPzzNFvbqK|z0Ct|9V>yC$AhLRg%~uUO8`LU`hmuh zb}=}@#iSVY863fzxx5)P!9AN@4CV|%4Bp^oi7I#m8g-Ekqp1nf_AW$@0UO{EHf2@L~QibjFpvL?aggnm}I5E!Wl|P!Zxl^)UPgvnRK#7&BuI=)++0c9(^ytTGeAmKLsm+bTU5kD z%OqHoOWfk9ga(fY3oDD5z7(7V3Ew`Z2*yuL?->LclowRIQ1c)Zl*beyBf=^qD5Z*(0`2v)`u~OLId~1EE<+&0M9`5NK@7p*6ru+%b#^d- zXc16K0hg`N7AYbdA(yQppxKJ|pbeFUpiKum7!*MQ4;T~~7z=kWfJz#@J3AN@1$Ho4 z+yR~70h${Do#o*Pp0KcCuxIcDCm|mw3;RBDP*H3G*>l4Vnw^kiGKbHf!jcg`BhsW7 zGh?h%wvU!g=EM*v9bl0fXwJpXp=cdsh+z7G)@~`;1{rvJ3na72%PMKG@iQqZ$f)y2 z@haP}I{3YNm=QT9qurbVQ^Qm~Yslcr&`tCoY2j+DH* zoG%AAo0Nj0xSp7XoDc&OgCC;{<2t4T3@QwU4BK}x=z@;D1&26jj}+o8C1`(84z&D+ zlR*}`W|9+>oaQrdLMDXvgBYOczd+CGR`QGL55CzF(jlsYRXqnC^nmy(L1zLk>*2OF!Nl!$?Xrl~0(|I$z$4sIp^ zL0Ku#nz{e~8I%|dnY0++38*m(F)#?QGYf(54`5_)V(@1YV+7qsCJw4Dq3f>^=S&zF zs+udBD>5^tDgE0e&bZgoe`U$P$DsVo!r;uP#dsH-A2b=v85|gP>|)RY9Xt$F*FfcPP$AW^3`HO)eXxq(xMlq3pub8fb z&d6qBNMQ71yaJ9-c~H+n7Je2OXzek$PDLx#Kr3xQ6SWKsQqb8b22hRz9diX*7A?ZS z3QGO(@&+;zt8N56iUHL6VOO=&kx;Pk)`HRsS|*yxS|*x|eo}h&Dmvcg@-RBaQC~?9 zgh6SK33Qq-lQmNn12+RdgCD4p7XVKMfu@g<&sc-@%)#vzCiu}Qpb2qMH)sa~=%f?S zvVB|!sem@U-c?*FzEZIkO#a&j+WWd=dCBtSCChh!w!bnkGN>|oGUhQIV31-6-o+rv zAk82Hi5GBaK?kM~bpUkWM*=icF9|L^m>Gn?$KOE4tGK~p5)9nX^D7t?LA_y6asxFR z*}>g2P^*%k(U{Th-*dqpHE9+`aY0F0_8?(TYbzfId)Fn5o}tkaa>A^vfU+x>IGpm`=DE|B|ziu`~skPHc-h1+Hn4GcjW1fi(~;c<3RkoQ3Y`sR>6DmW*aAC{A2Vv-OMQ57+f zaWb@b(baVb^R>0-b>&c$5mjViGSJ{>(h=h3V&N4K5x0?%H`G)z;$Y&lF>}?CH58E& z66Ru&1>LK{$nciQnehs2Z5&cQ11E0KnkH$B^;@CTG2UHVlm5`4Cek zUIsOWHqfvW>e&;}WPs>#LIWQm0BtOQCq2MP2|AYx?t+2^pld5cKuHNSssw5_>|_uG zcVlEg^%}T=pv=Gtof2RNPw_(6w_pr@GAk>oD~q#BO$5!%VHx}sQdCkAG2vll6+Xdq z_1`HzIn41-H4}MWi^-rhjt>8`nHGZgKiPl|2Z66|0iEvzb~~bN1aUDWFA55Px?DRL zgatsk7&NC2Etx_4t&~Bl<{v6qYfGxSCfYDYiP}s}pBg_kosnJ6#8ure!bKzFuO!p+ zzmniHA+9nCGIlZug3cXcfSn@*s^U1o=MI@;v=&!F&J2Pc9ds3XW)PGDH9#5W{nuff z%OJ-f4LavR5H{{oy92bnUeFz}%Q!+zh(O zlaW`;g4cviPE1r*Momn|Nr_2JR7yo$-QTjmCh-!Y->kAn_JBg!pkClOq3ae-SnptZfArP-jtX<^V|jL@@wocRNF*gULb z=2(03GkW^m2{z3BciRV2Zig_sFz#VG09vuh5DywPgsq1JovetcW1yDFfl{^txTs-Z zP=K8;2&!X1M=FB13g$!4S!4ngGoU>*pp`+ORv9SqK>Fj%;2>gS=VJ!%P44e$_K`rCh9Sj_Ib})c;vw=ruK?hP9v-2@R+Cq?l zL1xV1xt-7>5jv62N)Xhw@v%S|vD*nd69N6K1STcu;2o3#pO*pIU(bAANR2^-fkA+c z`ED6@@jFQ3Y0SIe>hB?m=P>ud#jhcWXE67}#cv^r`!K(Si$4O1Gcf%>!N9=0lL^!{ z5N7BBEkJ{mZjb>ZL>h*Uyd!cDbd4UO{Dv0!;0X%Q*=Ue62f+gu0-&jT&~`cY3!wdr z?BFd#I~ch2L6tB_98?{HW=A1i4ngq18|YY6M%Z3zMRrBd5`V_Nqp5Qk_b{2F?5qA~ z8oGLd#mbf7EzS!Yn5_Q2WE2OL36}qL!29N{L32< z25oWK!C))^Dy2Y9(-r`o=?Y=(U=X;lg8|gg7P+&7LG#WI2IV`TUG<>Sj1e{p21!qh z{EYC@3{ks-HyMG?odYe>1a(=N8K<~`ch{F#xrhB?me*vdq zi1;mtIOw!rrpZjZgxDA^!ToaroCgfSWym!K(CwoCA^SVQ_8Ec2?=nmRs|W3SpMxZR z2Sps@Pl)<^DB_?z1`)r8A`bFDMEn*=oPm+ShQWu)oJovmV2)*NXP?|cP4~S=?|CyCP8%!GXvBABTSc>zA;EMXfT+9+PRvb zOLD*^B4}3v!v)BhOseqSD8VssRqz-%GlMF4HU%=)tqB%WV&DVsJpc_ED1mpg?_vP0 z!2q>icQF`4b%46Fg5Zr2pyCwBcq~%fk%vBlt+x97&8mwzxxV2V&bvR z84CV}Q41hGb5gW?||ehVrN-s=Q5-v*ri??i&)5OO94Xx|YZgA_wAXvP)Ns{);X z0xD8qJr-yy8d1hV8_nP{mJz%^8`dQTADFX)ffqE&CJ#Ctu+R~7z%nnSvuqC&nGa%s z#v1j(4AA-kP)PYTzD(ErTR@Y}&vO z_lPuT-5+Qm3%rvOH1!D?LSf@)R91rQ1Z89@ku~!-vX2sv5Y&}b(Ug?cP}GSGXJlfG zF?Zz2>Iw1^_hRHS@`yDv39^)9X65$@laWwY*V?P*X`!U9<}W3tAuA@vFCu8B=Mu%u z#>vOwZEE%RE#s_WR+C^$IVnARRY7GDFCAei9uW}>aG3?#zhTL&FQmrc0!mX1&KltM z0%+d?6S8<2intU^J!2ZOIMX}0cn*sAdzd&w7P2_A4@{g9EY85pAo>3bvjLMN122O# zLl7e)s8|SQ2mzNz#^7T#L6zqY1|fKPWC)5`L!_8B2ML%X3HX2nd>|DsII5v*l|?`e zW(M$NgrUGr(E9o>purIhXt~7->ZRv1urky$utIw2{tT=P@gNRpfxJEgD}z0V14{q* z8Cbz1(dN*VkD#Fy(7`33`EH>LprKd|2GBBUkarBh$0~wU>|n45ZvoiJ;0jJe9t`&2 z{~03SYWX3t~>S~$?*9R2(oilbSX1I1Nk#kqo1b6tzH*%gA#WF0M3 z=B{VbG*z+!?ci|nPLyPqii=cMv1DNql;sv?6c=L*wKf)J<`b6W2kqDR=jLS}6vWCR zEyUx-EhNe3Z(!=9tjVWnp%oC#%EQMB-Q;0rWC1!W9JJp_2fW|O4%CK{23^O7)P{l< zP>626DJUvUp-~BLIf1gFsQ|27Y$~vW0W{AFqUG-FU@*S3gF*KWD3gNQP)2f0*mgnT zYfFLm`!kwh-5;fp(@FGGkk@iBw)C0IRU8j`pG6Da?I#Tl}o;-Gc@oM7`mL(HEEF&`wJizHqK z6$ed@cY@6at7lAuii6a5gUttvGh~6pA?tCO#F^fM=bRUSmXtwGd)>hxC9s1*51xCW za}kKu;?T)LgaCB40XVb5CY@!$lg_m}7z9A0-{K5P;H9mgH776@1A{nt9A_s3WD;AL zK@X}%0=m5dk$T z#{b~B3Id5UID@V={r?|ScB6=wA;g(Dz;Osx&zOcJ&IdLhBA$aJ&IOKJusA~&NSuM0 z!HGeRNrTCaftf*+L7l-Kw0=?p+^~ZjnF3lO1v>Uc4EcmaP&*LRpg>#;B6ep7gZv%H zsn(D)Ig#(|!0azOfku=6ebiE7VPe-PUo6I;2%cmCEh1235Cab|azWLBjw^x5@-lEiC(z^=VCvMNVg`obl@g%- z9CV2UXv>v4JE&e@VwYnSR$}94GS_2N3Kr7zOtua*arFSPQmg_^T+eG*a`Uq8;81V} zG1zu;D2Rq>TY?s*Yq&dv=~zHmUG|pt(!05M8U5`o?Pd0G@q*h0;5Db*All*2Ocz*Mx%_sEBp( z(3$~JOt67!1~#NxAG%%{F(Qn-P@YWyvczZ?189dFNqc~?u8Rllyh7Uzjdfi-+8$tR z3*-O)hlC9{%phTt1qz%0|Dj_$K`Dh zXBLO4XUqVpXJGn&_rDHP68KDHMTRZA7#QGtC=h#9q2Z3`LqH2~aI+cQxPrE{5dzTN zBH)OS6abwZFn}}44hCt^;u7$3BGBqIP-KG7J2MvMV}=gdi-R_^gU2-0mDNGVKZ4GF zblK^zX&}MIFCrkrWg={4VC3rP$!G^Y5OOU?{T$F)kdn$$LhL+(+yaK;(ps8o&LS+U zR)Nol1npPQ0q<8ZVQ^=-4LTjt1H7yNG!+GE%E5XgI-sPegOn68nyAo94iQG;AT8q1 zb`8?(5;)Mr!L!5QKm*-|%g+Ehfd_PMjspWf#=$zEKm!eTaexDj`_2vq&_WwiaQjl8 z!IVJ<+?3V<-*W;gxAYlw80^7f;sQGvjKTX}6tM;(coM*#5xnplI?-SR*(qTRIS?3S zrvwu>Wp=$f|MVeI?QVk~tw8E0B&6_zxMM=?3?c)j(wn z^BvFy(2#t>_z7I*xPinO%0PFB!qx8*Qe%LqzlTuI!~(7_!Ri^)P}EO{tG|g*&-jVy zyO0_KM13ZT`onPb_Yvxuq?wiB>eHd>LE~tB%pmpZAa^p~Pl4C>%nsmtsoWVD1lSo< z89@hBFu}&H82A|E8EQclivqaq16p*kgMk&^*1{NLg%0I_lOgD!MNpp|R98tscgiq= zCJ&(J41x|e2OT)L6LhP_mmLh!&{O{8Em z1P$SWI)VxpKxGx^9w<;_XeR@xHEUpq^Y9J$4JFK^9KxY6U3fZI50{mQWg>A07tBjA zF-iERfN^#KeB2gP-$2G;Z$QRj!R^Z*;QGb`ls*{>p?wNax=jbyHxTs?5bBvU!1WDS zJ!1xv`ebHMK7y#fiBQk@1DuZ_>N7#=L1+H`*I@#kud2wf98_^Dfj1DrN?mBYB5EeY zgfDc26k0QZ%T&-}deEVWpw*Df(A>hV4_ccE8o&Z=u!kJU16oqXbpc%VN-_vANHQoe zNHQ2ONHRDuNHPR4NHQcaNHP>KNHR1qNP;UY(14K;xa<|Z16el$J+Kv9nX0%5?Fd)Q zGV@;-blL&4Km^TaG06YdVFaBoVaDLXC>|OwWdN-j0qyh!-G#>Bz`y_=lSp7-U;r&S1ReSXt7*)^BPgJKpz`31A<1A4 zUYxXpK@u{8BFRwCAPE^k;b)L!kOy%NE~J$t1USW%q=ea^jSZ$Ilyfhj`7Z@r4?yzAeMJ6XQU%u=ko=Jj${)~rY$M`afP<~}hV};Zwp!tfW;QR_v{{Th3xR4rDeFlnpP=1A| zzlp3KlwYChGhyogy=7X;bWBK%0j!>}j!_ZGJ(_UyQ~pET11djGfZeYRb$<&;J!Jnf z^9~_325*o!W7_}S4D&#DM=~%lvx3)6h%+1ojS53nYJ+w|g04V>l?>2zO^A{K+MPoP zU`#ebx12&J8#%yp6`=F999bFk85kMtLC5Wa#{J|Whww5p#Df^Ipv|VB(-c`5IKU$d zpzFCD*}=nvu(3nXnld)<*&U!=K78Q&9YK!W!5|1azzTF=FQnjCgxu4}tPHwOfbkXR z@ZNL}Q4fKM0*ovI69qg(J<=zJ2><&d3_i)1G2742&oBG$f5wFg381-2(3k<}tO{LF zOP-AZ>lw_5(g4~tKy;_@?2rf7k9-UQ;QKH67?@*04FJ%spWqsh5mo~-GJpaH6k4Df zkO{nni4EFl0PTYVZNpUs7Z}*K)PoulkN|*eOa`rD!hP^Xi>rtWcMo^3NRKKTo_*v! zOaY+EZZF==mPtg9b9P68h5V$1=JbwSl%X9m@i5cM~Z)aQZg zNw9i`LWFuI9&o;csDFT@elfV71gmGv0I6qS{Qu{_4)|&HCn<=dCz^CMZmLD0Tl%|kPqvq<$B1lI-W7c&q zVW&c4uj~GQ|E~i+n?!-ZjA0e%&K`5V|g65UHD%-7Qcz3RDq7 zTHlJGyKj*z7I;vAx>KNyTgKpnPt1^yLb-|-G|rxk9MA($6fw>e!3-R6z+395TOcfFo4_5SkLtUAJ_tOOaTKE zgTw!?OrW#-L1(PRfR4t5mDi%+m23<<7{o!{dQkrtS^y(bHFU%cAplMHVCz9=3h!XR zb__Thc<-{Xvbmx$vocd(qG)fvVSuF~V;7^Lw!S^LN2J8RKNI{WGVS^&l~FEj?4cv0 zt8ZY&m{Iz#3Q{L2{I_5VV0tZ}#^3|0dl-BfWk6vFKC|2tTvzFW>Qv@?pt;!p|G{U^ zOaRrjj7cDI#SOAG%weo!)C8Nu_wOx}JJS;(H3mP3IKvGT%7{@h_;XoW%_43;Too#ZdPD z7{dvW`hRahXP67Afi3|SU}vmjxCaV{|NsBJ1)V7)qz1Ya7%bih5(lpxkq3tl*nGy+ zFu3_lJWQZFnnC8XF{V00#6fKccJTT!ka~8;Oose_&;S1iwPYEO!PSGr_5K}VVEq4= zfr0Tj_-xZ`P(Kg#Y*Xl^=klXw~$AmJ2He*8XUIXos;{a{zg5Jpn z+Q$p3?Lp^of|enH?%6YEw+C&oGUsPfWL*0%-!MSJ&vl~pDzViHj11qz^TioM|J^h$ zG+GR*%NapidzhXu2!YOJU}O*m4=TgTe`v%a3O8goaxy?xMnjrJpjB$1!X9*EG{`-m zt!JPX2xwg*Xyp+vf|NIg4a9V0tDJ)8iyiNWfb?<1LS2W}IC)Uz?BL(O+$U|_akdMBXH5XdM8PNATK zs~H)@{#$_WY7k+l0nJ~Cf`{i}VTvo>5eWfN_(40D$fL{PVFhTb6WrSbok7EL0dlw; zq^tssW`j@Z6*d+IA1e>q>kL{J%B-%;ECxMXemZ}!tB+WqkOb(cc_!!)^Zed!`H|p5 z=ON|9e+wpACP@ZG(Ag03Xl(KQ=i&3|FO$8?NAia{H6GL<~^gp?f&^04{~9E8vVI1q^inl=yu82t_8t_T_g zM-0{?mOFw@brlBhVTVm-PL(p1Fo|+fHBV~sm35V4+>NpZ^6w{MWAO+PEAfDE0Z}Gq zJ2p0D&jR1*IYka^Y~WjGO4-;Mx3Y0024(V!@!7aDfc5~&|Np{l%OnZDI^B;^2(+Bb zpCJI;PY12G1@#6%G~!e_jDd0sP-?V58qR|zPei?@4pN~G8aW58s06JB0IlVKEbzAw zfNeJirCJYgXTym>hyi|1BIxK#Cx&_kC)ntO6N5a60~(#U&)~%H9>$r^;KZ;V#yQX6 z!~l|I0u4y$GdMBWgJeJ)e+DOpco3&>C+MJ?FQC2F4B)#Tb}^VR7=ri4?PBm|Z~{94 zw73JbUBwi1r8q1aK+8NK;||QA6K7H54}7{9=FkP>SIDVT(8H$~S0ar<*xCe1u_=a| z>3EsRX?mpC82d`HDMeby!q4V}uIxyKo=yd&7(I~(BmTLm>*{F8Sp=GZrVP~#bU_O` z(9i8e)W5CZ^4}C(+TMwSh=a~LS_dxwLqXyUWw#*Wpz^;JT>gX9gUWeu`|AJ2e{Vr& zBMGT7fYmeB1w+*{Ffg@(%YTr1Hs|oHkvx7n94(R@R zmM^;)tQZ);GdTu^j7p%J=wY`A;9JSUs1Dfz1YRTzyT<~wMwpQ?4SvCZvU8#>jx{YF z`HDF1Ctz|#x_Ur6#6_1y2g?c;6fC-d{0z_j|nLXR-!DiHVlx)dw7+MMW7jcbvE)w z6h{sn6#{2kxtJ(2!dGd7+DXuK44OlNq~rUDbj-v6&L@y`oDNCH43YnJ!1qKbgYK4= zVSwy5hlM{zZwy+afx}-0Bm9NI61xCd=r4gKL?QP{C^IV~_T`*M4lsEQ$UPG~ ziqynltE`ZN#S?V-#NT7)u%rf>Ct_sa|E~i+*UJEOf1eBkfpgZhdBI~XLOM}UA%Xi!uJof!u{6$!kX+6;6^E9CSKWp-mmp@?cG zCIM$*XJO<6OpHwAnG3=sW%0;y}{}kGf>on_6tGOKSEM( z0A3diQ4d`&1a%LntqxIt8%ccxxUCLRp9?adfsw)EzYh358a;*?pnb-WU0$$stp}=? z^^odi#0E=fcMjUl1b2hLje6vECL6e}hTWkIo-R{h5MWRMLjwi{1_uTOh5!Zyh6Dx$ zh5`l!h6V-&@Z=z<87c{$oszj@UrS~(9oY>>>r+r^;Iz|LR^J^}{wj6!VV zt)Ssn&>>@>1~sHyMnAR?ZP3-xlTphIbjtc05zrpR^SdchF8R!_a|NlYaO!?q3VTk&h z$m&6Jd!U=+1=tufQPhLl7ZCOL5$c(E!R-sM`Hblx^$d*vVQ2XBgH9Fa1g-r-Y9~X- zN)TgM&>1>J!3*s%gUZZJE&rGaxrX3xG=vVFm$kHxN>P zg4UaWb~NcRfzK>bv||K!2HDuvVK+tdF{vAwnJa>J-!ht-#<-}nv2ZeOWo2@5vUC-1 z61Db;F*T2O)i8-~b+Qi?{`Z)PN6{tALsUydM?{9#+R4VuT+`K9M%g9ZIetl{Ym-&E^!?$pER! zK*OJ)p+wNx5CRtr4B3rAZ64U!|DZYxG#aE(?2{y(Wh4~upC(>u)hgcOER^V%D8?vO zw8P1-;6~ARCtuJVFqZ$nFf%f%fbY4_0bQ~Uxv6aj1L&T6#2GdiaUu;Wh@_EwdlWHD0loZtHjHyiE$}K!f*JCT2SH2ll3Q-~mW^84wcgO{c z)(Ug#$h%;_NiHkFK>y!5`C4hAXk1*|(56a+wh4+yORjXKaRPH2n9Ak~>MX!j%JHWtun6<|+mGcp^q zGcJWJyM)za$R}1Li`I&8X&Ep(T8lxJSHi0VsAHxOJD@LGtk@-H- zn5;ZlJ!DKa9W*8j-*X944`~s|2Qya+ zsWE`mvol{|3;>IR_jIzP38^ta)W1Se4_ey-QD23kJ_D})HIn)e<`Z!9&!ebMg{yyq zq~3t}C|rFtL_K&-cM(esd`a;Thq;a3L5_4{rBK@KnFNH?=bd){RQ4<2W|(f z0Esh{G3*12gZBf2)z1QnGv8sD01}7nnEbT%g-dIT;ujxEKT&xEK@|xEKsTf}k#90RtC90|OW6cr{Lj1O_e! zn7{;(3Q!jqrkp7jQd@y8DFDr#3xGocRIY=LPJ`Ue1gW*mp@(+BHU&a&FEF!b1T~E1 zn2sY|%p@o;FE12knC$|-vdI!@;Ft$=HIs%D>}n=9K^ZX@M^nhHP1(qU!=SblBg0oF z2gcRRnhc_#{Xh(`^R#O~mj;4vD~F#-$PbEDP#^yTjBx?XfSlgK1uD8h9beGFz{Y%x z;Emnve2k1H_KZv{B9ig~!Lq7+;sPve>P!yCY+T%8dK$_+V)~$&LUs{31&CXIGx0K> z1m9mM2b%1L-`58&aG_~N!7dVX*qpgBV@#sa946lD42%qAOwNoSn57ulKsQLRF|adm zK-#D*pmosiA!8EEpv!APYn+%FK!X$D(~UNOr9e9yb})b%L(F$TXTE~Y4Pz8%2klj7 z>`C!XZgZQ%EH%%vxY%+Y10zEZlMfR+voZr4LlbB%E8H&dxk;eypNydP;{j0EfEWTG z2Ix#E%z)GfNr6HXyrB}L1{|~?U7)oGU~|CX0uq573JE&Cn)wUp^xz!~-~(yY%|V-s zKBjslbb8EY@`1V%H22)jT%%}hIj!UW2Q2RR005!_V} z2k&IyVgT952HH^$I#30Cz*PYQ8+h9+A7}taNsme09CDJfJ)<}uGozuFwT3ubfRKQK zg0!}bOt6rai35|foPn*pmb#Lfs;a7&o2TcJx9<0 z6a!=c3Uv4lI56Nz5E2+W7&t-4xiBz*dL^6;OtGLrb#R>uI@}qw@C=jyjkOh-Sy(j< zAQY3oq7)mysH_^40);OV!zv~{#`DZR4Ezl83_+mKQh=^3767lq1%+5YD11PX1$P8I zpup|}N%@1-fX*}l?R(+41DfyyZ(jxVVL^>jScV24y9b$o6%}FBvha}BwNV6<(&BQg zEG(K}l1b0iRMl2n+|^XgMqAuVMnYJGLmfgw#z`1$7(gp>(m>r9$ch|L{DQ{6pamUb z6a?BS5V0d=kuYe=QV=}qA#w-W)-(g1`U@(Jz{_*Q`55Tpa4|?a25r4& zY!*`z5mpotln~Sww^T;vFh%lka`N)iT8K6E;Ka&fSF0(cRGXpz=1*imro!84G z0Nc+2N=tBm!IKcgU+_FF4?1P-j&EV6nNMLRlZ)Cxi}h*;Eg<6nT}&Ae6uLl#7gf${$uCToTT z%t{R040#MY7&t)w6=2|i~Hi0E?ed-CWsWlDfK_sD-OxDYKHIgo2^8lTz&e z|Nq;V^cYq%`v|ZzLf!lS|Nm?z7e-EIZ2@-1T!;iphbY zfmu_4oiXL#RcN?hXX0g8%Jc-ZqX(jnf$@Je<5mVxKZAoo0hSw)7kRPVfgB*f4%%b@ z>Ry{0n;W-s8ko-#suHbb64uv`01a|8{-6HejKS>xDF#6X5eD!WHE8(@CpghFfX*$Q?lZ${6bO+PzvN=#{YHy-ZGf{zXm>+3|z{BcFZ6)41iYz zgAT+3mGugs6-coLhU`X=Yu?zE?HIu)6q(yGa@#X9u?izs>RO;WU0fHvPXGV^f7O2- zhDruG0d|HeNErS9|6lpP4ud#@umC$__P^U8r~Uu`|Mve}Mr9@m0W}7GE(QU120?~U z#(V}wMh_-uCO&3;(4J+`7AJU{fLR~3bQyXe;lfDIS|(@N^Pr>A7?>H(F*!5kFoO;Y z6=6^XwFyAS6RLyPFMx*cVf&mVAf-E~I^D&<0@{@URsy<28Z?&#Y7vNnS7m@^iy$_! zqXauUAEPn40OMpE*ZA+UlFUr3ib}GQY%GdDkvUAxqBo>>NC~qF@<}R733JGRNF)xZ zO%3iV_<-B&puQSA^OOJJ_4f?5`T8I} z<6RK{|1SmxrZ5nnIT^$Ut4{{;88kqA$k->CZwumspa`~K9CY+FXkrRPtAo=4sNTdFs(@Cc;9kB6c+C#zwq9BAh@cw$#w0cUoeYq{ zC|1mKU?D3-;A2pr=^#c+lUO%Rv&6OlDDCDIEhx&&R1TpmrS?eiD7t2QfySI*bR+7( z)0zg*Rvt({9kj+=h>bx99tNQGs-Ud{pnljL1_mZ8@ZIJfpc)eO-V|uF05LQJ?T3Mf zW{_LmU;)tbLsn3WPgt3oQJI}tnUV2D&?HGA_QL*IjG3T4xQx7v!oUCBW&*XLAZrSl zb;0pt0CyWCehk6uj2Iahm~xpwO#yZWZiaMFCgcI1jRk3rgW?C23Ay0$1C0)Zdl92B zkO4B#!g$bhC^G{$I4>i%hH-;Wb_K1i5>{ka6o;;;>ScT&^-n>TF-z*-v}iCJx@!yU zUQqg(!*ooD4YbY-;vc4+ApbBz@)&5%DrgN18v}Sw_WySV2BsP&&{1~opxPhe7g#L- zUH6P|JJd7aw8aTdTcCmoG*ikB<}riss8Lln2f3GBk)2bDk!yt%<9n%pn>PMsbdqX# ze7&LJ(G5sCfXp9*+y?5O|Njq}UjXxMz+tWb{|Yncj&4~7O$JkjTOdc8F+fg;2HnjA znhpoirl7Fq29>S)j@%3d42%p742%pD7#JBAFfcM~U|?im1y#QepxU9(5!9FBhE(A3 zAQ4c%x1WKVVLk&lXcn23;Q|9U!vh$Hfq|Pr0K@@lEC8u51l@WL+9K}A&TyWAm*GAG zFT;BVUItK21ab{%aVu!Wr4)F9>kjZ4j-ZGHZCZt#38(=MDy<8UwS2~)yBCz9dC-~> zv=PM!vg}HmkzH9BoC!h8ZmgL=Gy9-JceNRr8I>4KA{|tX;=3Xlc_;ERnnXIPfI0jV zs~J5KL^#>(Y#4iCj6elN`)I3}Dd`pt4iHv`xerrhV4RMeyo*&pJec~I1xi2vZ!j=0 z9RkOJHK5hs9zpg&xQ2TlUV7!aD{lb% z_Xh(5c;6TsvkjR4hk=3d3wVwTGKL5{uP>T`foU&T9A)kcv_F+;E~wsPTmu@bVr&96 zaR2{jkpBOLi61P!0U~}I+!kh#_;10a4i?`85eHp``~N?KIs*e^B3K+!|1|v%2Dyhp z@BbGjJ8->p0Ia_G5~%S3*`qv{Ns>X9!H{7pD0+;bi@8AaNy4BU0WJ%nt7#D9Nf-l6 zD8&(|LP4xM0HySu44@k~AsZevz+=X2407O8rD}FCuz`-m5o6F`kOP-oVxT-I09mbI zV5kT^U7r~|zYOk6ii4K?Gm9Iuf@2YKuMu=HB9o1mjxn=@fsvWKPneohl&Oz5CyRo{ z>}3kp|9ZJZ#HILEI5}j+WQ=(ESeT@Z4Gi^dRr#Z0LObG(y+hsn{{5ZB$tkKLYFIJ-fBN5o$(rc{gA{`~@PBhcNf|He5Ra2MomqVqz)%&m zkO4H_i+a_Knz9lbJDaEo=t4Lp(56>z9U`_!>)kxH4*K%G*R*JEkc|=y~aA zvoRZGiKi&Mrdpecsu{~#dULXJndR(*msbLW>DJYW{?A~cVT=xsW_Chi;px$u~Jv;%C91!(0=rm{0?ige6 z`aRIfF5_RIwR*li!Qh2?jP?JLL1jB=Ka@2SFM|+6E@YgrW8y{glbb$;)0GdJ( z=}!n0XF{Mj15Ks#KuZ%g0mx-Npi4aX!O@`#x;oF8-5AuJ1QinO!pe-SezHB8J$mf! z1>#zYZsOLJ9Sg6yPGsVJ6r3%}Uy%Fn0t4g!YYYsGpO~I7h=AM+IvYg{I_3&W{D?Uf zXvKn2*g<>52=_uOC$IpMz)l88)dT7kL+;rW5da-s3pr87NK9N9bUnSAJ`?DURK|B< zVyQYhtWFMM{yI9W0xaBS1ydPSm`Vz?)&AZs&{pg0>bk|m3vS!N?v)T?V*s6%!wBl} zGuead)F2}2RJ{2fke z5n0^&pjD@!S_5?Vk_cD@=yDqAJD{!8+~CPA&{PMcmH?#%NYw$p4h?)wnmX*f40}e< zxf!74bLNWdjKx}(oJ>qUrsCdaRvgTl2Ex!HSU4g?!oW?J(MZoohpAAUu}_StL`#=L zgxf7&Ta8~pPFsi_UK+D2B>1S<8OX7)@>}U@+3|4{fX40Nd%Gls*g$))7#Kl4W~Qm& zd=dld3!~-}jBEkz{D8v+Tg`M^H5cnok8Ss4z7#GY8$70op6f zt_)f?aT#i7y7We9qM?5Z;*o-)Bw zqYm460y~KnlKSMB5EcDbIU`qH5iRdD8~CBCy0!wWteoQNa&nNQ#=|Y7W$d8oQ68!X zJz&+!Q$kiqP+CHin;VwKK=}&N7L5YucXd!JMT7x%QYEN>5rp^2prMcO5pqfb-B=6t z5qPCGr2l1L$OxXE21f&U`II8NB53;-w59`Wr5dCB!trtxO%i97jeGv47vq zthk}kA;8Sc!Ob|AL&8$iB0I>aIK#UvNV~wqI35xo0fI98f>L}Szc4bGGB7ZL?k?s7 zjYTss@Pkh@g~bVU$PM8G;NO)g%~2 zzg4gCuwd z7G%5-ah0v&1yH|y2ZIWD#|yZD4w?mo_NXDJeuL+4mD!brLHQPZelr{U2UC9&$=Db# zEdy>|7A9>&6<&2Kf79R)osepOwa%lKUi^aWhEgirJPKxRYL#2eB4vF|?M1{nRn)gR zCfds<`9*dm80}%yw)F{AlF?TMC6)i1|64FQF!3^ogZ8GeFrd!uLL01z=z(r}MhHNw zXhcXri(4_!#epoKnHNDJOGtYMw1kumd;mIVR}5(LBd84|Y$PVn2pS*)A1I)v- zEUd0<%&v25Rr|F)Op5R?~7fl?5ePD^?Z_&8p5SDGgaMP-^DYb&I!C zJF!Q~z)>BXcK3!r&15m~gVg{>G z?>QkN&Z)1YRlq01BWEcQycOg2x2G>KU7$V~FzqzcB3w ziyr}x2{wU-1fXO6$akOIg`VLB8uL#Ek6l8}_5$B=!obK7`QL--64NdQ4Ten6xy0~# zR|B>#8=5N-$r~E);AqwWFV6<8NS9_123HTDqf&P=aD#`pk@w|+Za0<&H!TbdS&i)& zp|J((eu8&WDY7dg_Va@}Rio0sXrLwS!@o3pc zSeY0Kxu|9E%kyfgadG~;2HK=IgGV4PLPSqI!y?W_6&fb`pf!e|`8feL<~y#C`VBNs z0$Pu+3fhAxi`FNH7SsrTLvu0M-=O*pbgd7hG=|Kpi7?1AfHt#%F2#f#%mrF$4?p3X zU5^>$Sz~r(P$eV=u7$+;7#VFUy3G^Y15=9RYT1S4bmV=*1z$Sy1K@>~AHkD9IP))xa&m;o!(CsVZq56#!Zz`}_YF@R~?A(3(ihxi#?lJJ`mv zS^s}!Qe^_oYwCh#k^evX|BLxK(=G;i25rzy)FRN;#-K6G9Sqv=It|(zMTCqzsA!M} z^#!5D88pp+gGwHnL_pQlP6lo86eK5uHUm3&xR_HPbSv~u2GB+3kSz*Y;MMW!#&*p1 zjEd~w+rjvllof@Q*+E;D7_}KyjX+&_Qxi39Mt0^PAteQQJ|o71#&wwmnjR_E|IQUJ z78g=eR})qbGd5x7P&DRXWs_Byui7YJ?3?BO<9}j=b-c4GlVwR%Q;e0cx_q0Gx~L+T zxb$vNnqUIW#WLSy0!_IpFud8tz|5cszDQvQ1GB&m2E?88(8PcU185f-Apq@?g2Mn@ zuM2=eNdOc|ph*-4@K7*l@1G;+Iz}Oe^$bFwxhK#9G9k#all`EvjzaKiH_)JmBQwK& zhzKhKXc)vFqye<1^E`tPScVBS!xaxw0-Dd#X8;YIfXoCPp$eK-0Uh+901kgP1_cHd zaQL(7gYFjL16?_447&0gIl!5fk%M~CM2ioW6A{5|^}%W)(=mAPGVS{JoKX@Qx}YQC z8j!=45j@X#hY7U7A_p|liMsY4+Mh=R9!6Dy7;XUFG6U+qgM7q#0o12vf=)ef>F;Ea zg!+#QygU}X;u5W7Q3kJKQv>BiW@Sb}$aYORR&jUT#B>%`m5Hj%th#2JmQpqo5k-l% z)cVcv5(ZK(gUZuQ;46_qGw{!*P@9%$K*ShcKtohWck+(wCowW&fW)H7N~&A0#H6+%4FKb0J`HR9&}<2 zr1cFN9tYk22x}E!iY;W-^S(Jf{? zCiU;MOlf9;x_h$qziW)P3I^c(JXM)#S3_??hK4oU*MU1^te~KnD?P~Z7I&+GF>Hp#X zSxm2(KnuC0K=&mIGr+w3AmywneU~CjL_Q`Vp z@%Q+@m(!*(iZkvg@y_%#5N3haiSRWk42+;PE6jhHb}?8on(Sf_X0QUEb_@$AXhR&4 z?4V6tgaEX}M+iW-aza89G-d~FKOzK>w{luSD+$oCB|PALmOB_sK;ymf3?`s?dRB(> z3?>Zs8B9P$B&hf^VekiWK&2x{6ui!MKS(V|L>|Hbm8&KU>p|)u1)>RqJ%j^VKnyY$ zGT{swz!U_Je?d-6f;3)0x1EBPQAvX*GeJ!pMFyBEP_qZLaApUCiNFp9g9`?R=Emlr zHjN&mJ|koj3)~L@34#W?*!dViGkx-mpixCVCP>FbnH{u_PQ*G|+(d;@Se(0Dqho60@ZDd|Ns5}!sN$vjKK(W zR)GN8m>;wYf`~zA)&|cPffn(BDvX^Bpk6&Ffha*MaAAGW!eLMzR}$FCAPpX~2OSFq znhgfEDh0sHR>8|~q33}>%3p0pbI{}_Xe|S%C`P(D88VypE4*AUU)ssQ(w>`%McX(@ zD$&%OgH_MKI6yAMs3EwZG{BuvMopYc%R7t5+A&;HQ$?Lagk4^~K~6zTL`q3nE?L(o z($6EFpOsBgNn6Y~+yPXsF@npr6X5d)Vs|kxqU{TXdKnQ0809VUFb%j?hmP2SlQr{& z9Sm%sjbWf`%Z-`Yjm;U2LFcI|vok6$>UGs&j$zbj?g2CY-Dqao^>2B9D`WCsH^#{R z)_-#m^~wowJprjd9x`-+=lVe9+9q(@>hF)6$YFc1qFNbTMuT%Xyq$WtXJXNQMEexlDE;e(Xpch5W@hZ`&$Pj92~fWU zzP<}u$ARuVWoPgLRdkTm+c5v&N*mx53r@n&v0{jT0BEcX+#UoU4a}^(h)EpMXaFsg zW3v2v9Fb1pYsjGc=(@pc&eXtejAUQ{@4I3Ht?Oc7WB|8+!1*o$q{6xMQdWAX!9gvId-@DS^t(OxagNR zsxXN@oHyh7-xcQCpmmmd|F1BoGd*FDWzb`=2c5~m!{ET+2u_KhV>09~fa(M2O&dI* z{xImY5q?l+0X308>6?Lphe3dW2a-b)7&UQiGc)nY>dN0m=4g28X}W~#d$uH5MMY`4 zMCf@nCs{>ZWXzM$w2-&pm*N&tlM|BAG*^JJ|4jm?1&sA#V*g=n+8|Jyi}E%t=x|F= zLkQHK)dU@52^!=B9k43$j|q}EL9HKXi}v`xmkf*yF$@e$^O!)xShb+)3eqxz(p))o5g8(Qp=Aj; zS3!nb7#I{_tH<;~9ca*QO;C#&RQ{`ghr5K0Q5wRKwZEX!AJ%48{_=|1#?{(gqROB< z$tu}R!#uG)z}VkLTcAqV-rPG%@D<}iVF3q6V;#%DFwolj_yuK7V%oOqc7}#wVGK+R zV*kG|pI|!1AkCo5(72012YNz3FGseuupv907AFG4L=0VjMc*QfQa$`yWop#Y; zHL+)+MV+8yM6NA}ZSVeBex@qz`G! zf_j(2&@n_%u>l&PLh3Il-YUUa^{*Sl|J~}cOjb(jqDtJN^7}#KA)t8zOD53z z1{YAHg+cNE7bXX$4-5(n#-I^@MFtZFQ?PqM^OlHo0L@;AHCl*R2DNKo>$E^A7;^WZ zI0FxK^&sf%SZ#1WP=rAnd@TjI_XqMQxQ`4P+=mSHqeZ$JIMzYy+&?7d38`6YXcdM} zl9{b)sjI-vChcl0Z>Axp;gMpZVa3hO#H^^HW6jOUromH|s#;uIuA!yJ!P~{lEUE8i zXsIWq@2urr8)Z~zVQs-JBcz~WVXY@8rlkq$2Q!23_uvN4(aSMtg68-{;J5yPX6c14 zKt{YVZlOa=bwP(az-b<2s4zGPH9^gT^9-5{_Zc)H&4YXfO$Nq7&?%ar6_%U~vJ9ZR z$3ck=GN-?T0ThCuHPxU|CeX??P^(Uk5xkyMQPl|6S7tXyFv}Ua9Xti)b)*@M)ui;D zH2+;=C4>aupT8;`@_o544P_%;ql=mRh zrJ$fxhD?`&cDF%Sn}e1_s3|M4LoWLihlDM>pixs+f=-pcjLuiJ57ITT;A0aKRdX;= zkrGsuwvSR&(a`tLG}ki};9+7`QSp}$U}RF^Db8>&4bjulmC|w)RpV)3WmZsBDfg@0 zP-s%<!79wbV{M>yTA-CPT;QB)%)kxZRAUTD!^RBv z8H_<`7<2)RF@rsr13TRqbjl`VSPWze=x8-H@Twcoh1vSxj+h-IIOVE?$HG7xF^xfc zTI?7>gJFD(?4XhzGDmM}!)UI|u57Lh>ag)7@=5Y=uyF*68@t*wGJ0vYX?n;ecsh#* zL&Rgn?OpAeJhj`j-DQ(J0}J?UZ8R-~lmrSqLwUux&z#APM;79f;k|mbD4Bur|F{2N z81FGjGU$TFz4)LtA1nnzC$A8piAZp}7|_SPK*u7;gY&w8KIry&&>4%M2`))+D9SL% zgSUq7Vo+re0C!HoB_E^?HwV@5D5GAGE3`qYaY2KFpe%pPJxw`6#8xYkk6A)CO(aQD zg`HVdE6^xFH^(O}!OoIVU0>Zfl1Eo3NLt>Ehfh!>Nl2WFTSVH<*GS*j(#(aEmBUa= z%Sm4n+%IF$`2PiT)}9a>=!}{F{~>&4LFgGTY|JM?Lt+e!;PTLpiI+i+VJ^tasB<&W z;6Q{Av;lw+z?iIoW@>QhD8s-2ZLZ2dQkD$EeFhm=%93HQ2XjD!LZGw+JLC&ArY^$( zX;*_XIAj$BsP$=X#|%nDC?l%+jLPiFzkr9>TP4 zVP=OLt3{8qG^<+&6Ys-^e?K$Ed2ik9`)?7nK4G$C;$`3l^-~xbc)*Qb;@t`@`M^#C z2Q0#^pe>->(0LmK?$z(1t6bX$$SJAXGq85h5a> zM;0R%FhL7VunN%5Pf+;}>b$8zrwJYeU6&M|fXmy;q44&Zj-4hB%! z30cao1ii%%H0lLio)4|SLA`zG$td8ZkDwK(%tq#Bkn3OBAl0`bQqO^%jh~TCj8TzI z)>g;DO36CNK+A}g)vU)1Rlu@GP+Cl#M}kXOLCuh#kCm0t9ztvLiSvNP!_9Skd?O}i zS{WNK3jF(k;Qf2Zs3@lHSfOub@8v40C1?w!xOl*Vpfwq185o$%nLzOt4NfZ>|4Tr8 z1~rCC&?LAzc>5eIZ$O)qh!{`=^~e>G7F$7M5gg#)ynz@ifwadVGcTMB(%^9?$R<-z zV+bOv#=!FhvK!CT1hlLg8p25H$&Ad*!8~JjWyU2;iYCY>ks_bq))O3MT%)eWA;f|> zb`<68wtvZ>?UM{P3=B-lOuP(|p#9N842UyRKwF=fDT%Ks}LauZt!eA zc(DXCLjZV%18AfTw9f@}{0?Yl3N+OZ^A%{XI;e>OS?a~C%$UR`>uK!l!osZ7qrk*u zWnjiF-;>$H$Y^HhZY83|zj7g`1h=8S>8!t>p>g$v*_DZx!5VbyhAD#$gDp~jADWF3 zPQ`FLG`ApBK#OTam>!Bha&OVAR4?MX9YkONmw zyBI7P_`!2<;5LRSXf-+L;4$dI2QDR8WgPcqNIXMKB12JkR z=zs?}=$PR9V;}<-pnS%{zy!^N;4{}jr>ld`T?gMu!q33MAP+h<9kd#Wfq{iV0K|y} z4a|YNh@dmlQI>Z=n!@ZGs>K-D6&l=p)b0G$|9xTjuVBp1tRNew$T+uPj=!sIh^cs* zwi3Ufgu+trSpc9tOkbFI8F(1P8KfB&ftFFpKsTQV3G841jfH|}X?WcSjebOmfwoK$ z0?^JC*xTToh$v`5W1b+NgT{=+!8I5YsO8bmz{D`0feF%r#58^C9ElU)f#BDw7f^56zcK+Um*StR%G1Oli9<>i{^L6<=}FO3DiDe{0jAd z1!(3HvceiPq_~5D8@I1%<|oh)Ff=a9d$2_$hF?JC>;GT>zc4<8?S*7VTX!h{DhdUV zsy^hY7zPF@1_5wfFzADhO@ysS03FZ(I;atJ1BVo}zaa&^ISNvus)DcO6*dNqE~-IR z955S04_Q!FQiJr-%*>THFJxrYFif&aw|p5Gmx>Qa3T@TF7X_ z&c~^&qoQV`U?9&gX&z?lRu*R9YGr)-{OK2~E)8YLOLsU?BL?S5P+{G&Ro(NtfptSQ+j!fH8prrPF*8xCC$mR0l2_l+ zUoSCJ-8IQnL!VoiSxE^(@f2pUTxQ}uW#DfiUzi2jx?E^w8OJZ7s0F1!V~_v8F)%P` zF!3@-Feo#WftHp*R@OuAb4AR-K#L+oxIkO1h+u$bWAG3=sJFF?K@mRg3fj;N+8zOF zkqbkIBw@vv0b-pFXgJbXky+UsvJ3|_?g|=tv}QEtF;n7E6k^mhRkRAwXXMH3QT2D1 zG1mxWG*&iXXHt+&mM$<65@urKw6oN5HI(`Ld3%nQBI9yJ1ujl8`A+zF4`^*R1NgpV z250Df$)GVY0nplSsCX7g9Ms1H->LS5L5pDlXkolIc%uibZ3x}Qj2Iz}f=0kap^HC2OL>IA_vV6Tlt7!@L8YnG zg@HWXJ9C948Da8oP$8yhLyobZ-eg|fsE;bhBF}7vAyyRK-xdtQ-*nGu0Nl* zr+)>48Q2-*K^#c6$j%@D;>3cEkONJMfXXA#av8{J^y=W< z07w(2h-EWK^$T>wqzh4N22~(NPMG3hRVa821zLe322yem%?Ji?J<2Qr9`BK7I0I@U zK~_^i+DLdt{h|G0L~_Cy3PNN>P~!w;jW=RFwj*dYBW%ewWW)kemw~SF1r=K?&%ZPRtd|c#-5E}#J{3uX6%np_ zEy8AEuw-Chs)p`8s01Yh*xmy+fgKEp`=+7E5HWy*NQR){OBU$P0xo^fs2LXnsCT@B z0kqKqbTAocgq0244gfWmLHpk!>yAJJm!R2d@ahHdXgz2{4rE3Ob*_IwfjfI2>#|QVdP3J_FH~k?D06Ws3r1g>4Vn{DVqjq6U^>bm0=lAx1ph&ohaut{;bG9e z4A6=&P;7#BXn^i`1Px(wf_DbMG9YMY04Q^T=Jj?mfVKz|_GYP$UsvEXrdEzd4@1(*|NI1B0rOuIA}XMXvCLUnbF)- zQB-`6w5c*HUoALdjE8g01?kf{w0aYM$`VF^G{j8~G=(S`9zOel;mz~$%y zTB`{fd;iZQ$-vK`!e9vsA4%vQ1<)z=knoWd*ukI&4|814q@2Epbc%-?qJZ? z-@#yb2h?o`wf(fgOa4JD(1bJSkS|ax5Vn&KG*PE+WQG(vkTV6)f(N=u?L%ULrbn_h zh)gllwdUcJ;1!hQ=N0AU72#!K(oEE~;^B})2r)8gf+m+MBaDhOK;5WxTRS!mb`ExS zb`A~!ZgoS(a7P=M0GkN6x*=%ZC7FSN=`wh2TL7q6g}P54I#7&ACwLPM3wWUps9FHs z8x1;>%UBw;q82iB%eWPMZf1Ivte>^3q|3iYOuPPl{`dCJ4jTi=rWi&BJq89Q9q@cr z0B8~qb-oHZ5P>Mjp^ifcAV(6!Eug6c&~PZ&E#TF?kQqSce8+A6!ZdJQ!N|Y@o{ZbUzzA94&j?zz3K}$EWUvR_ zh6>s`$j<;01vN-P)dpx<2Xde%Xni$kAtq==9ye%fgR;4?FnCuTyE3zKQHWTGEof_$ z%1W^nmJ=D}vKWmTHf8;L1gZ-e88{gj81FOjGVp>SjdPAiJ4~ffw3#VFJ1N zJOdN>%2iDq|p8kB7Gp*_B$BVz#Sscf-gx1L2%c2 z2ZJQYmHZ5nU{}KS5W$LKF$PKK=4WwmcLz2M1v(uG>{xKQ3O)q~bS>1c1aTz}Zf3~N zXQPQdpzzgz?R)0tGxdxzGBFgf*EEB!5dOimtKk%Q*|46tnPY-I=-fj_2EP9mjIWq@ z8I(Y`jWIGPgDX1NxB_%VJtFK8Z3}3dSqU@}rv$p19n!)AZQJyak8!^}y3Ml?kA|?F@|nfBnyb?p?D1 zoq~zFcMZC@6%min12+%?(BTq<05oVIB>^ZcK|kOQMeI^*#J{5r zw66dE*Z(EpwNn-h_d(~FSu$85%^^WY^ATxU8skIjQO~qO6WG2OWzE%0`4%RWbFL8zWXpi4#~< z)nHu1$nNC>T`h&YfC_z06=+`f|G)oP;5~$<42_`k_aJ96!^#wBiGj#T#-QLfhE8-| z*acrtwS&P}091g3N>CvN*j_>*eaMDP$jK+t-~@}jmk`pJ0O{SqU<&G@>%s0A2d_3$ zLs?w~y3-JHZWS9pBVAhc#slEo@N7`LkX_o zAXPeO_5`#=5mXtnfva>#P(xO@gKmkIM=nZ@nKAbOGb=ORl9ChVa7qC!YscKk2r3p? z#K6TOXgxd1K1NU($iVl%gbB1>Po7~pXutUMTON0O-;X#W$=s*Oxgku5i z@CBzl@H{WlHQAunBJ6f-$SF*aQA@}ex;O(Tw6zARSU?BIf%d|J4wnF}JW&N5#>B1+ znrOnZfRC}qR2;NMFB9t$z9{1wCLYHY(DV}83cf#}b{qo(GZWJ;231A|(7`2Y-~)SM z=?dyoL^6Ud5I_h(*J>bYcErdbs42k!y@OpDlndh-lwmcyGQ)iaWmwIw%-|2=Kx%en zSj`S)$b&S264-nOWrp=2b&zzW%wP}UfcC|L%!RkR??BqLpn4v(WPuM{3<`l1gQEp9 zW(lg@L8p9!_9%jAMbII(pu}d(j+x-tm6agjZw@-fV4{V-bhfl|kAwwi`)rJ;h8&}) zG>4Y8l(DfXuepkJwzQr#cmr)`=VcY8#x4bURyGa=`MHg1`e)kP|J{e=XV4gM9}_Qw zI>XLg42sZG?qJ~#ZN_6HIfMYTRfY(6#FAyu>RASGH11$fh19aD4EGsSA;GQBpvqtm z=3omj(0%8SzCGxSHdSzdfto|0;&KOrs=y8g(0OSfS{WQ*pjCpP0K;5U3JWlH(85wZ z@o;g41a47D1<>MBTR~|NMnN$Sc@uGK4MQGHMe%TPUGUn%;^IjHV!W&cF;XJTY^;(} zNd;PJ%_Sw58Ng@hFhr6D)0!BAD%1cu0nmBopbb07(|q{$ zWhaQmb4}zb7b}y(zdu_p%g89J7NuxwgdSLcNMCkLPZ-n~7K6eI-aiA^rO>_^A~`_= z5HU%r0BU$BKpP&QCcGL*Kn)}S8UBHAO`E7GHbccrpqLUwk-HMFu0vRauD zG#kjw#RST7??BB4CGh15uyh1n)q_Yj7!@mYVId;lA*Rwn#SY{=5>P?P1no@7LrOk* zSji{PaGyaQk`?V4=YRP}@$9feD(r7U(nrqzV9!7J-*mVX0D;z$p&AzzXlOc*eN}IM>C4_V+SD z&dRs}THK4eXCK;VK%_N{aYg7HGa{`)NBh9-4A2$dkm+M)ND5>(Ub-3l^yCj$q#rwck-5tPCp zqeY<2#EQzopoRIy%!;68#>~o0$`w}s{(#zL7K|(w6G6L)L5Ep^+F^{6pmTIUGsb$Oz zTF$#JOKTN)`OYfMo}eh>n#-W3)G6pXUC^HLjo>jw@QfMi_#8(230lq~A{|=OBjOlZ z;(+6rn}Gp3>c|a=WAL3jAWy-&&7e5u2E{QbHlYkqkD3wGWCHc3{Xsoy5C?QO&w3CC z634KY0JLKXnhj?*28}jBrnJE4mx0F7iY8ipgq#q-1D9~Rq!tvyq5vg4*u`K42nk$&`s`w(3y0G9Srbu9HEouh^RxJLVRg^ z!=i~jOw3Mrhcqq!9%tJ1ZyVaMCMd4{TQEy9NitZ0Rt=~ySTooljR8R$Mu@1v81liG zUc?yrv;s92tRN$wpz-Ei4EhWz;E|>s4Ep-8!A=zc(7A=6qFI4K6g=^We6%HGuoE<1 zqXt@T2w5y;j94UvbQuF^3xhTz<9p~RsA;5-C}=r>gsha7ppX=sSx;t<1RL~L22nOy zR|5wp7H0H;QAP`tWmLRX(2E*!kVi|I7%cx^VUA}y#$dw`z|ar6*Ex_O2;9^GU4>x_ zpFM-Nun?&Q+N}g94#qo>LmNSR*FiI^?BIdr8qkq$5|EY>=mY@}YX^hgom~v}3@QwI zf{=ORY!=__$FIPr!YRnDY^g2JF3QZ5 z5Fsq6B&F?_16e|}KqqdTXJr6gtj;t&d; zM`osKCT1yJJJn2nDQ=%|7Oi+azqUjRDPw;Vi|iOr309UfVcPsU#uhR*93mWAT7k|s zLZG%R=uGe{Oe?_W>Ux91T!g`g!516|phHN8#Azg4|4-mdazMOU4fkpt~kRSlwkQ8*+fO;m_TQAfzILw1vz+W zA1J`pMa0BmWBL%ae2h%xCI*ozLhj1uG0v)>8BacGJ|!MLO)G9;W&wG9c}`Id30Y;k z5W~PY_W(gn5&d5x{Mx4M?2L>u;;LF4?2L>$l2UBEG8SQ$E@k0{OiWqK78ddR0-_r7 z!puyvp1S7oF6vQ%PEAJ4%(G9K<2Z072On zeDW~laAD<_f$`=E%|3CZl8tOa(&{p9;R0gJOvTpj;+1N}?y?=sBAsQRgIps6%|w(X z`4jx}_$9d-t@O;jLwP2E+7H=dVvs~TcN*$`MC!nFKdANqxgXNo1-Tp4 z+XaazgIfl0AHWX72S+mWC|WjtM&%{eUMT0_hl>fZs%nYIiHmS&TNO*!FbQVHgBCkO z55doi6c<+2IS zd~QA14P0pZ5TSh}L^wj*@nAQAc0Pa>6hl_cfZE=WwNfA!C)f?py?Vx=J z9-;0;gd5bIh;V}jH8`eOp;t4490;n5K%+)G7(mXnW`v(2X3P%Wo6c2&2+R`U644&f zQdo#4WMqKD^#6_jS)e-;83Y-MLHC9Tfw$qo+zO3SL=Zxw6d^#MPr%K<2rkPx8Q8&# zZg(<(h6O?EX?HLP-U03GQ&(nJW@H9$+GP|69WHgjD4ApP3Pz<#bK*JHulV;cp}?}^ z^Jm6FM$c!@{w=%(ITwlX|5@n1L_yG*{hSO~-HixRsJjsYWVjntN`W><3xe~LqB6+k z!s=j`GlLEVU`#f3U~8KBq+q%oThq*^4k^YpYt}Fd{a(NR-}@fW927(3|14$;aQaOH ztwSb|exdy@L|7vy15jfda`Y8w$_|teAU#FMfm5IbVW8n_O-5+8hxHOC|NT+4M2hjI z)RG8>|3%<#BB<>7=MFh?3cS}IwBPf(fEq)g9)kcI6X@gsP#GWdKMQ;=nH;DkAPQQM zkJNUB_975Yg>H&N2q4@JYP<1*lf@1OQBd~^bV(8;sB?6HL6qSFgD9j6?Z6-kUXZ{B z9@+!-x<$cF50FrpoBt)?vQHMW20;$Iv>BE!p#DW9C+KJtLIBynA`CG9 zih%qZz#szk8K?=)%pk(R2KO0cwiV<@S!gN~hVR*f`3<@|6x2hWo@s(*hbU;LE9M?i zXulbBz8qveYbI#!9d!-{>MumJL5I5$0?^q&a2YDfzzYr)a6GayV2M6QW(G*?LQakX z4LYzfK;jX!ikD4b2LtP!9Soo*ycm?00NtIc464+@O=d)liklm=Lw1KMGoE0T(UHg& zkB(qr1xKlrl1#R&xT+xd6gqy6+Di7=KoMxPDyXnep320@#t1r$juE`S*Bm@n)(mQn zLRKon;uTu*BBBx6zmU#}6G46NAL77*f1~R&hb%71^ht1*GD4K*w+HV30)k z6!orHh)?Z7yX_c@*(8)j!UeRfRRy8DfR$v!Wu=uk6nZjyKIn=k2MR0c%fj{oD|7Ys zacF5S0Pnj4xqtzDMwt|-9%6)^90&6&v@%9SE%K-zxL=LvUV=ul8KCEzfu|}17}yvR zz_X5^t|VwSoQVMvv!LM%vE_><8e=;;kZBi2M*O!6W&J*ABQ6tz;r}npwoJzu z^cc(;nszZ5F+fhB*}-5W018f=K7*D<;6%&CzyRG3inQtlv=$Sz=mF#rVFm%{FgX`= z+66SjU^O=Dct*;qLLd9yM(Ia#`jH;G#N#F(1LyJ|2phJ~<5R!BGq*@x#C+J_1= z$}%w>Q*_Dl5Y-aV5s~4wcCs-u*K{?OQFcjl;TGm~78b0|cgXS4Zt@S}66CA})#pqM zg8#oTH8DvtXfs%XN@@f6YEuJ&9Sn%I%g|93M8bw92XGq$G)#h6-vL@j3L0700e4Gw zFvx>OfAbmS8R{{|#vz+oK@pv$4`m`zRem>Aph^B5yVB=}gFn1u7i47m;6V$9^6%vIF_>LQplO_Z#a!wj=| zb?rG>EZjBtc!WfGDpGia#JRZzI1;ms!X4H46fLwh9rdM|Ik{NW^kj8h98DQ_SsRNp z^NC6c2#Rup_6HmO&jP0_&|yzAK|L^Y1`BYJ3|fAUSh)-hB1DcstmXy{y)l5-je(E# zKwAC;SyqLaxWolOr^xes0o?<%g8_8mHYm9%T!1W%G6W|#O>iT0CxagD7$CdjK@$f%7>wa#1kj*D zq&Gd#P?a8NUJEpL0}2N{fgKE>6J0=dt_DF&DfLem=W^e(EpHu{k{|D`r$N=BZ15tmg3@i@5 zTig=7?+>h=Axi@+{{I961M^O>Upqj4Vvzj*h1meSe{cnu4>~VA8Eik~zMqF-V0~co z6v6g`_ogzR6o-g|_8-gzo!`vp1lG^}{|n<2ka>*BAU@=N0Fe6_Az^uoQ4uT-4oi^x zAYsXn#jq7D4nAuhto|X`pSL`~_JGggdIna{2oh(=`T{C%A!pOaF@fe@<3aO(kewp1 zu!p94M2P_{LckkVQO*c`9PpyYDjMmbiFs|Fh5XEfLt&m3BDx_zS|o-WT?#u zy5bkK0|s0V@iCztJ>MpImoavm6yrgu3ydoE`cl%)g(xS^S1)4YZfu;(BBW}mp&jpU z4DrwY{}znzznGdnIuCMG6z-5QZQj4_kN85_mUF?vO)duE(4 zw{}%hvoK)hTjW_e-Brm1yv79dvieQLAP%TuruFcm;_2g;IzsGN-Lnd zIR)4lvLrxZi@a9`bZJvE=&~Nj`T)@WF32he(8#JBywt?#0z$(ZoPHoXrxf9PWk4Iq zAv@(k4HnS(+@Km4HY5!hcLweMfV5VG!EF*#6E)0@FkZ1D|IS1Azc3mxW7+l+7s@LE z-R~kPjK0rBl0lgv8I%_wLp>@*#fzt3gk0ma1KG=!*T?=apefcZWVhw4k7R^6+0U?LGbPr(0+LE+3(== z1G)R=MmVG_0PhP0ryuaXP=>-^U~$M<@u2hoy({Myih5A`fvC?yQGXhKx6W;3^~~Br zYM`^T1lSmJq3S_>w|QXmKZ432=39jjdm(2Qy%$nr5(J4eWI^uD0MCPi?vUYR@CCKt zxxmZ*VBrr9ZbaDx9pnVJ06~phW^fw>G`b1d&;nwygL|dm$w}}jW#GGIAOo6AyBfe_ znc#V@62@~(ybSp4MU)|!_JT%QK(?`fR~Ca<$o7IpFu~_`+C&-G$Yg=e?!5e`2NYkR zIpGE1@c9a^H*Ycg0p~~1ny)XQ{KzB<5@*O_m<+BrL2Elf_YZJ0M1jU*cu>ZCF~SEr zh6D*8&~PSnbPSvsp<^-NTL?gn8BhRnf}3r^im=gN@SOypnR&Si&}BxTW642dzo4rL zKzklan4Fm;8Pq}NY%!s&OM{LkAi@l4H9`RDT7=_}_hf>05P~+3?qXmD?av3dqd;c_ z@qxn^#1a6{*i237{C|I3&vnRytb7~~kV81xvd7+XLsZ^)b|WaFpI1qcmVD+p?d>p=PX zpz@JLe+L7z{tgDlJC5uO^$d&*{S1r@^BEW!m_d{7?->{w{=@bM#WR5R2RSk`6fm$r zrtJTN7@!5Spre2oK@5GENIZ-IT0shyS^yFOt>18fFhCpFp+^N3f;RN*U|_ogp+TFC zKm&82wN;?uWKhc;G{&RLAPb&H+`*s=X}#()*fZ!tTCejNbQ#t|IG`01x)2A}Gw3of z7CEvq_%rA-#Dk9$so=CZOdXe$?Jylk zB^Q;)G$}2ONnFEJ-ad$rmCMUW%g0)Yv3cf9MLBT+R&nuvQFG=f$VmyZh)aO;aR~zh z^Hb0rWeirJe9U~8kpnDl#=yXA4&J{X1rld)2IcSn{~6HL-@&223`KpvkQ&tdTgd7` zNsmRX+iZakigL+Kr=5maTYc&iwSXtz? zvcwnu`v+RKpeZwxQN~O|QqeKNUc**TfhR{mBTrXJRDxYfxpey9V@$icC$KV!YuTvl zMSJS;NhpbgNXmlxCwKpwF@f$_Qv>%2*codXrNQAY|KE%WbVj!txKF^&Sj+GaBo6Kq z_%I(5f~seJ$~YS&4sI7&GAjwe)R!^(g2chfa-& zw?tBZ2}%7mmI%1{ACT1dGw*<#e;G-A6N@ig{U;>#mdtD6>aW7o|2JbwW8MW-uf}|@ zj6nbzN+AC+fWwJd3aU?yF--$34+<@iJlOwjEa_1F?99(l>^lzC$Ig5jW*-9sQyY^1 zpQETpgx47q^$7pJKv9qI|5+6E&T#jXJgC(oofW`H{1k=FU0(} z2=kd1fYTS)eC7+t<|CaW7ogTfP>9zp8WnD51c(;Fi@s2c+Iw;2;3I6Z>&sWGO>f#n%qLFB>ruATws zUmZ|+%KVg39UP7d3=E91;P3^V<-^Wc#;_M8{{PQ^Ge*$(g&G4`J!35cB)^ONH)8~y z1*8UA{VTx6SX&EeuUh^$V*=d+r3UFYG1fAI$34LD{hvuvNDbU?0>$?ekok}^2Egty zg1TorSR54J|H1AF0*N!0G1`K~E&qRE<^#tEMEzSvxO%2p;P?QmXTE??&ol=~{d*+! z+(_y#A*ufajz5U`ACT17gX0fk{$(Wf^T6>3QU3`^y)rodAnLEe)tfQR0mmOmy*l$f zP`?sfqQJw6i31#eAbo0#X%dk5djg3+P(XB72^gw(+1vok+soDL3mi1|uFYGCt0`415vjLdyd^=!=7k<`Z!9&6pXPRiNrY<$(#*d^4sPCQyGKKL+d%@vv0}i)ZMn;f1{~!N1W71{fg{lYH zn+6hRfS3;|zrpI6pEA~g#G&Sc+6SP1GRVJjAaSUAQ27l~&>W**zftLi@=%AonmZ z{{Q}8g@Kcqhk==a8`K&D_Y@2anT-XNIfaCndHzT+F#ezaUxgu&SqQYTpJ4|BpFZd` zLeTzK14CwZb#rxdadUBYadveDy5n@{8!5tU~MIL`3^^PvXJH~v*5+TsB zR-k?;I$wd|8suZ_K~JdPI@z*#&k3v$lbuy161di#YQO zhz>@EM8+MA;Y?2$#2M5;iXf+Sf+t*b})cep$mh1hvs(7=Ei)C?4THt)Gp*>r$y*%KfEueOT&Uj)29Zaum#|WJQv15D-vYS-`#crl| zV7tXlOpJul?f!rHe>cNPhV2aE46?fz7#I+C>+fJdw$2=@b#+**+m79~|NlYZ%jC%P zL_m$136xKmnLst}|NkKWGbu5>6HsGj28%O8#6fOj+|00DK#iFNEY1QFXJBM7{BOY| z&h&(Vo5342hs^^Uw_pdSbm&Ga=n5BbxPhm0p#ceAR>Ul@lYt35M*i<_}5r&llY7C(9HgyI;MrBa^ zFbFb%&evyWi2478|g-V zAg_XG&?F#;25qqi(cVz`bkKMQI0~WX&>;Gh(19U@0AjlsG#Pk+x}hGRc{Zp3G#P*= z!&w-3pnXjieb@ji=-e7v2GF%XdJK%v?Pj23m_SE|n1Le-G%aTjW$j=HxUhr4LtrOE z1Xv_MU?)Q&I5`im=Um8RhLZV3qK|~=Wnj8Zo zg8^d{qb(C?Bu);gOoqk{B03EWr5TNx4O%-|8KW2z{w)BfI|IfjCOM{E0&2_xp!CKp z!0-^1CmEC&3>gg=-!ZT;2!htGvV%93gY%?;p}D#}qd2?xzBy8-HK)fJE@+q=+ttj# z$iU5D#3;%59-@a4dL%DYk3FNhxi~)~_w+c+IZ~(lyPAU+G|XjS{C5X@CJxB$s<2uC z;bN#45XsBHP?6D?@!uV$iA8_&L179yTaCes(V4M<36v*Q8Qeh=yO5pFI~YJ`ejx7g z!Zq_DVHXKXsJvew^W?G&yr8?B!0Tr~=?p&0Vb2IUGXQ=R@L4TmSxyN(Cv7OLCM&_g z$08&Sp%|TIwG2g!A{^CVw2zLOn+UI{IFw>wV$fprWXxj%4fF6ZM1zVD$Z1uerI)a< zz*vC_4GRgoNXWD-132r0Zu#S70QrFJ0%V#Tbbkrx9upqWAw}lO;I$F#%IwU_?8e9V zRtX&{(9;#r;nQHxie&V33%vEj-Hnl{l!1}KgwdI?i3zmddj%*`AoDFS*C>H9z7o>- z6LdL`gk2=$oC-#;8~6ku;R%``V1#a%VbgcyWPmO4DPUk@XkcJtU;&M*9$;W&xBy=F zT^7ds1>_Dk@Sc)g3+ z;bnDmW5&WQa%_Tn>gwj8u|!LIA#XtgSs7+VCMiL2DGnc-?@Z~LiV9}B(&pMSn##Jm zGW;yutRjN^>|B=_m>66bof$isK=Z2Fpm+jxNkQ8QKt~_#VBmw7q|n(XM8S!OE6~jpOcAESR70;I=kCwdDTNphVRh;?*|2+VmS!c!Q%vj5GfI*f)o532izLo)grXOg`7_>m& z93GO;QA}+1?qtvbhngG%Klo_qnjH*s`Vu=COu(Y-407Ph>p@LE2x|uezX0f_MM$28 z-1q?ByZ}C93e?2pV}c$@51Ni(6BQAM4uyiapoLhwoa~G>8O0<7)vPt`t#p+crDesm z9ay9!SeP|H1e=ru3nLSV$;ia$Y^bGW%+1WDCM~2cFJh>stk1*3sU#<^qa^l7oS%zB zMx39UU1qifKQlM0EQAEL$C(&R7(E#)nGP^WGiWo!gHFHJfsV9m3hZDIgoh4v#vBnk z(47O|Tqr33OILynY~XaYgF#Rqmi~AcWEcbmg)9vW8AbS**p=;=&DHss!RuT>MV%Ns z^lCj=T4SsPCp8Th)TE~2=rR|a&LF9c$rfu`bI*b#GYHAR#K8Ig7o$C6Ik*Mm4w{OE zmD8Y^11`A#pyjj_s89hnQK0z|kKIU|?u$Zfvg1u5J$6 zj>^U#sKe%A9W%$;li%k~uwnMU+diPPa~?A=FzPUtGf08 z9wh8(ZRO)&@46&3T0%~kl~qtkPEcOM(!$8VNkxN!@&AMWzZlgR%Nev8mV*v+fTUJf z*#XVN2zNpcqykS(fbt{#bFuIWh=|+B$Qx=Z8F4W2*_gTN$Qp`B2?=wt$ohiw_5T;(_$*}LV&DViYaRwz zJrBAJodurmp>;hX#1QEoR5Y_do7MR1dSleOzJ(8^u1D1Lpmg@>|1U-d#zF>Vh83Wd z$EbBZ^mGJ-YoH6c!SM%L561wGKhP;7!r=G=&0&HzrGQ2~z;!(t(>kFfy=$t4PrDP#N&f5zxI}@?e&Mp)kR!p1m4>O)tnO zhpVa&23=V4{}-b>VB3)F5YIbYU!H-~ipx#=(HKuE*vh^t#?y7+TkhA?kWqP0zr<{Qt-QUyRm_ z5k^of0LrVq_mrYcp0&9IQhg8dZfvSB_ zh0n}}ySjIW)b0>+HlprlVEX@wfq~JSu^gPv;z2tcVd)HXaxWsCLF;-%tU&8}a4saa zu2&_lt~V#9uKz+zRnNf8VDWz)Qz07I7{|SlL2(RCFm4P*qN6sAa{aJ!rafm#Q-}>^F0F>*qxv{ z1eBvdOT7gyfRg_X2B8a(BflZOP`ChE77khf1!`q0T>$l4b~1o&t^mpJWY7XH*#T9_ zpsT7uj)E*Q0d0rc$zTYU1ud8|0&kKQ2ak)|F@buNMq;3SC31}7>}u-Fc8t)yzvg<3 z>g?uX#=?4x%FH6-!hDRN-NB8@hSpks1#U7fQe2{3(#}fCM*P|A;?)v5f}v_jZqm+D zJVIPDwxS{(+@jnk_={Cdc*L1lf-2=}61>{7+_~c-nV4b=1Po=J#D)GPa4AW88e4P5 zL^3in#b4rJJj%@UZSK|7y8$MZ=+H6&b((Qfcw4* z45|#bL8BC~Ry$}d6(~iig7Pr9p^h<@h_PS=u}~a3wu5LD?gotkfKJZSc4TINo;t|P zpbwgh03G!TUIqsWFvbgDc}`Fs1j&OKI~YI-lnWf7d>23&03@=50d(N2C^SGp0SvmW z8FX~BBs9=L%a%YZqm@C+UqF?bGN^fOZfp+Tf(Z&)Fji&;9U&yoXl$;`Ska@~pc^I_ z&KD*auCvTxf=-=Im{1sBs9>n>iU?^LR*h#0ESl+0pFW9jkGOyT{{0B|h$oDe2?ZB; zs;@FIF^K*D!kogii@}`1nPDYpg`f+AD|iS86!&)Ukc3u%h|~$)NrhOQ2fYChToEvU zCQ}SRgEI!uQCWeV3{K$7JWLs!pto6@>hEN528*#XI5R*lx;GHm$-oWH;GlDqAcyA) zF(@(^fOpucGf07#cY@aRL#8Ughuwol!SoT8Dl{32iipWGLi*B>Bleh;8I3>}lbV8- zVY4qfl9=LZrYoecuBO7r$1fo#ZRo6_;3nz7CoL#0FUrR!Ehl9a=jxg+W$bT0iBVoz zo1K$MLDoi0F@{5 z0y`MgFF^dP1x@OpVg!sq2kW3EcU5y`c2;v`aZsvf(&~<0W7vGjx^*5waLXHS|OlMB0aTiopWH0~b>c1-5N#>{-o%AfM>M zhbf2Y34KVs%LliAz}XkNuLCi+r4P!_`k?&0lL2&B z=MDyzJC4i@2H+K=puetTrFreT4E;y zGa<9^PE%!VR$f+R9aRl>Rwkv}qKunF-zgdh zs#=NLLT^d~bfEHugZX z0vd0yV*<6C7z#s&Bno&WAhK+TETZDzZfTTRXpP3gZ-7zxoGcYinV*;Hye+X2&K<6i+B@(prfCw+> zP#Z!3xe)|TmWZsjivhG_9(49X4QOgs!jYNb0|V$pIY(yjjilgX$|f){Gb{idI0tHp zKLAOChWHa0KntarAz#bOxO?04lSDLG4)3U>WFq6JyYx zdk|(<23^XtXQEY@M3~h?D~*rK|E!W&Gi_eKHlu1Oqr$%jAYA(IHlr#7BZC_Q15-T{ z=wxDB(E3-z96YG1gbrmOybV1-1DtL^BN~u{@j!P1sj@4Zv)ePV+cSZV7gT09=Vvl! zXH3zYC|xg9&sQ&0uf9`)iAiFIWV28+U$fBp^BopZ7A_W17KbV-YOJHIovorkJq-pm z1_q|9OrSweP+g?U$P8MUuE(Gc&at4C=%8{MM1#s{5RJH>jssK>a3IaPKzERXT?^W~ z0=e6o4b+d|XF$3XO`d@b+p1a&YVSGDRhFfrIOFfo9dsf-Ma z5GhcR!pNY{0J#l=1>E-9!60`5G}Qqb34l~3g3x&;l?$N7!;m5zw3r@rRU)YR(S^81 zmq8x1xEz!SKn#5lr)Vbw=!S0SwNs!L7ih~aqyY=c6nu=@jG*(8^+2?-xiV-lUYWf% zTp*k;Tp(QjwX(gT5?iW32oozypg_D@l}EAM#6O!DWo2@-whC-@lGWzk%*$xu@8Z8e zP~BGBUsyrV-!ps$lc=o9WuMDR@{ZutYWaU1Qynu8gB*h>z_(9fcmGPb|J_84+ zaSK{n$-yANz`>xvzyaz*f_j`B3=Iq%3=lRS&26VzDsOJM(Mgi$Gf<}HohYo_qy@bF^bs!fXgBrA;0Rd311T_#r z{U1;~Y9Q_U-o;?ZzyaPn0;`$8wY##pqM4})X#5L2BLJH9hE-FF;Cdc3GA_=?$S7ds zsV~OkDpb?>L5MM0z+b^$+EcB>#?aGHf}7JrsIKaz;J*dzEC$;04q6`CRXkFKbyI;rfQ)d3@NIks^aGV*|)*u<{Xfn1?#3 zZO);;gFyz86J;3W8Dtpr8Dtpj8Dtpz8DtpZ8Dtpp8Dtph8Dtpx8DtpdGsrNkXOLmo z&mhBaozSpzZNka~v}?2`FnZsv~DRKE~z7HU?3R0nAEy z8d^4j**x;Xi&->7WI}bzB3ZfF6!P5ocxEwL`U;3Mv1lmN#05;sbBxU9H&JjBli~R1 zq@m?$ZO<6R=q9Btz_^Gl*uNMwg2Tk%#K6E*2VU30%@6@vg#uZX2C0M?LFob9M1i(h z5V;Q8%mLSrjL_SOb}(>)TF>(tU>OQ@$}(s|PS{+LpAmE{s<|S2h6odr=ye17YVgc&ff#Mw0EC;Psleu7Es0iw(8JU?Ynk$0pMDUGHun`}2 zaYm2ccG0Z;r zL)wa*3=B-3VE_1oF498v51v*BWDhoIsSyW*5V-Rp!2n^^?qHD6moPAdHkpjU%_V*& zV^E*V7*wyP#R|pp#R?ry31ooB9TMQXchMQFWU<{9bf z;uYz&Oi0_^bm|-irvJYg7?@@=K~5ZR0Bwzj>>}U6pn`HAD0K1_5evvIJ8=IAvKem& z1L$Bq(8fAQ!-#`{=?kdT1w{ua_(5CCSp{}5fT9Cbkb-*Epv8nL;4x5h(0)OORaK!b zGcz+iB%M(|GEgVfNi!s!QAu4%N`ymJ8nj+Q>i;_MUPf64O$HOjFwi0)NL>S3q_l$p zbc_dR#1}kb!3JGv3|jmLax^n2r7r*toPp{W_)r??S`YBb2Ni093nkE@W}tE9 zT?{7B^LKYJn1D7a&Sx-TSkGVr+Nj9PP|sij+L8#`q-X-_l7Z?#69#*jbUa8J{P#;4U+|LC? zBzSKkcz+_Js0bUoC}vjEoviBAFt|Ey<#pqK=}O;>ISP4hE*#ks?`& zOJp?ISea!d7l!VURcB{qG~FSRmIm68m{ugh34&XZw)#W<*lN8IKJJ!c0oQh;32fX>;01Uwsq7PQw3 zD&9d?zV2e+XMkLA4qD3ukp(qkAYzc#fGr~*Gw3E9bMU3`ptQ}#4n9T)+)ZU>R$`N7 zv}3eoG*M&JRI%5WX66?ZU@?_(5RlTdR|^a;C{UE;mz9>{P2y2EbI}o#*Rzo25!bQT z6k_7!;$)8GSK;|=6=*CT7aYAX)JaW|OIlA^OWoC2j;TXg`M5@$p`a>gc7_FXZUT!q z(=i5q23ZDu24jY!psa7g02#IfT}lc%0t-azUf96^q7C5n0kq4CCpC#>kD2R%*VtiY%DAe>fS0dt1C0ZM@!)=4B5>U*_k740;P@I zw87+`Nj)o~71-k2dsap&vc)qUmQrTtVip&NP+J5TZ3Gz8JiXMtES0@Lq|(1xOuPPV z=w`hA*Nrit`=2V~7F8u9ejYI?H83T4%io`Yi6Mb;Cb*tuXOLj%2Gz5Y&~v#!g$V~d zT%qHch+xDRs6*~oLzaVce*sU#u`_^Hdaq|-VAv1peHB91D1z21f&vTF^#@H|@e1r< z0CoLA1+Exm-J&^YUAD0>czlvs*`86EU0s=HJIpcDr>qzqJBfI7Q|cR*)_fl6l3QZvwejkz(j#{%lwf^JFWXEbJ4G>4rO ztjDCR#K#1h784Z_6K7Wxn$2WrVi;ZTXPe-pENS9r!Zcgz-yaQgCoTadMt(Ux1yyS; zDOMh4W({SHe}5Xd*FodUE|D6;sYJUxEl5eh8u@-2yuvM$_q(qno2th$ndDT z^6mrOH7)o53)32=V+=A3s*v?3uo)a4P}30}zZlsBItUK-I5YHwImJ7mrjH^654Z;? zqYql+DZ{`F=7FvXhc2OkA6f=lRwl1 zM7g_LMTFr$Ek-$6Hys@}*$5%gAZGIsX4*<_F75LhT3d;bc}} zyaMh+$1~(Ht1|g8@PYO!!B#^tfYuFx+Qy*M{u#yj8O6;NMHSWAmZ*G~_A(83SO~-^l-9o^$^(o_Kfn3 z=IVmRg6!g;W%-wpjeZQa7ZGldcE3ME9{W;z$o4^e-GuB!C8ustD88b^EQ(hqpv)RAfVT`KQOjeY;sG>67#D-=0GkSRCIcfwJcBi}DpNg!9D^#Ta*zj~U<%I9I~aKNcQWvR z8%&@s0q86#c5vq0&T=0ti~9~Kz0kK0BRAZET}99EhZT6f!$JE^%mlm7htFSOJfp& zJB5LfVf+6tOlO!t6Y;hv;lc{r;|DF85n%&$500QPMhgnK^^BLm_A}1<`v%$m9sj>D zorT$t6c(H~?T1Dd*nWifSs{g@pfQ^F;ZeZ@ww_7kUmDbUMg}PcRpu@R1e%I*1a(yn8H^zH61a|lE^on}Ek ztdM&=?3h3Y!GfxNQDs49j!-Km2}wgW3A30QH}{%YGZ#NUGd(5i09^xrO9dWrMNt`0 zvA?U3g;`9@(9X}$y(CD_II_$+vdb}4C&^LA*HTf|)Js=dPg6})23937Fft(gV+)FJ zRR8FMx}5q*vwDbQpg~8igSr;_0-!r%V08x{Gs5xUQyW3u3dqs7pw)QbYK8G!Aq%sN zsG>NJf~CKKZh*Cto|&JYi&<=~n_EqcnS`35qy*T3j2WR;OfsTsntIZ@UZ%2&mcBZU zNjjm9U6IaZk;ZyKCGLiPc7|eN%q-CJ;Nt(EW>#hTAf(Rh!@%%AR)C$^kAZ<<3Anw7 zkn@Ae`9S0tm>58P4>2at0#{vzSkSl~Y)l_CZinbwV)WS&xo#%|=xjdFQfw&((B73= z&}5thWU>e}waWp{MxdP_YS1wYabrDZbz{&l4s?Skct}nebObPXCgV$1j*4BVk%cQC z2dAZnm*kOt<6)KWtZ)*Yprh?=WQY6vZC0#Ing4=*1&~B zj7wb$Ml&!lfzAVE3S$CwoH-dhLBpbuQ}H0A=-7QwVGlZX z-@wqE(O8&Wkx`jhQIOGUXOP6-J&e;i?lMZ2Gdcg=Th3(u&lA+HlKpSN^p6P?4nd$G zf{c*E>KTk4J2X_m`?bNj3R<><1t2|k(6~5gY>y3eoF??Bf6&Cc?5rdyrhcioSrcci zoppklsiEP|KW3&s{}>qmU;b~wQrbYizvLH5dn^RNVtPC zJZLZk6z-sN5RF004TX&v=WF;#EED45h}}~6ZzJR6sxvolGFJX|1C0@jFoZIFV|>q` z$Y8|a%#aFdd%;!{f<_EMlYb!E{sO~p&>~+34h9zO-3*}99h4YYv_WYGG6o15yaH`7 z15L+*1~Nda6qLXlenGoBK}Rm{V9*lS!C-U2z!1E@9aJTWi5r7gp+ZU_HFae^X3!dX zJ!a4pA~>5VLO0Q=fkfn(*Leh~I)oTFMhUTSspy+YL%0sn5H6>ty&yBMh^&Z$83!Ya zB4YxCmV*k1hWePtIH@>zshB7U1o>Hj*xo9pN&*E&3ZkmAg4$Xv;+%5I+S(vW$w*#Q zO%`--IOG3g|1B7wg3mRu$IKtl9XE)PROs{p`0QEG(P^MF_;!MBf&OA($ZjlbX3fa1 z%*>|EsGQv)wi>e`VE>V0-Z~3&j?yfp=_=QS*pcu%&y38;_4?pA?UO?Ba3S- zl=<(Et7?34S#dm=U|?cUXJBA*UI%1TIy1u6n|Fo5>}f=*!s+Xamb@WwU{@T>wmsDq+vu5QlC&dRRHt{BHC z!}vvlv0m(-4J+d!@qclQd{C>TOBk3KycigmG{EIDH)vlts=wGk{sP+rog%`XIYD8| z37$O%g+1tAAx2|iW_5FQWp?pvJq-VYd;SYd@nf6f$C$tv^>4wyW&IaVUpx(IUllSi zFv~N&VBlnM0j2Gop-u7R3l>KnqH6838Kz6qT9H!G(f2=|R5B?BWv?Eg>9#!M#|xIyQRFhXOIVFv?feh4&k&ID@X>Khocax$uOGMaNT zigPkDo%;9h-@i;oCNROsl=<%;BNHDgHxr};+|To5R%MD~5MYo8^{?Rl2$0zVpfxfA zu)G3oD=L~QLc8jW?%?JjqBp>35da#}fj8Gdby++^2D2(tErS4qG)mt9Y_>k!Y{(FR zqNyTuOn_MxY&N3P!`KHl8{QO$n2qFiUPK=V6gD99A$1IB>0MS!{x*sWQm>3-Xe_^p?I>w;H;KVQ$G>Yxa z-~t|W1l4hE1c=(r9IFv~(D)R8hsKp7(7C9sphk%99IsC5G(Ss6IL z>|g+eo;g@l3{1*0aDD+*PO{)b_CX5+AuQ13HfT8pNLGVEg~1UV;Trlo83GtMK_Lzf zQ*gfq)(fd*s^yp#>yBdizrCxYU+cG0U4*SsVk)*qHOSQuL;u*pV!W%;f4XOdXhSd zLYm$g_VyXxnnH@&QhKfdhT$bHpmLM>e>{^9!)0dBSvR5#>I{YqpvyEJnHe^KRz8EK zcPD@uI~aKHfX?a#)zOfNdeHolJZRoX-CP_z(`IH4+uY2~$7l?idqWlR&d&VzL`|BR znN>{}OsTH~Q>waZG9W>wI~s?q{vD7JVHFgTQpQSw_B%q{dz68h0pwm?yzT|9H3Ici zK})Scb6m`zQ&BKoh9Tl!VI5cvb{ux6GWS{>RGWm=iBLgM*fRZJ`QL)6m+38dUUDla z(HSuqgOe3#E?*g5CqnCaMC}A^!6F2pofkygNfVUrH5m{B(5*e-z6H2&LX292nii0; z{v8Z_&=CgE`WML92WV9xXcsN0c>$Zd2FdPVPyjUmjLq#BK@Bl>MbMSbkdP8qX69qm zW;8bzR#t_GAjN!`E3ZJ9SBONU2%~kNwOFE>0TZL$`WXHM&k%{kWLL(Qs)|f3Y`WSY zibI=;*U`(TApKu*fwnRSKMSMDKSLj{0>-ba_n4U&Kqq7CF=T=EOzDHS)IgTdf?D~CppXXF$DkQTXlR4G zM0^ZP&}ncuRj8os(>e{QTTWia(`*0YltLa)h zhG@!5OUuj4$Xo&|5|d|<)UZ@hw$cLME(0$# zWOVf%*%?5`QiBex&S%gCEskYnc+a5A@E^3m7_?*se1bJ-l?aFdT6)X`S|tKfTMtqa z3mV1*9Y`g_z{>!+Q%eDSrUWd_fwo8PVo+t!U=RbJmjT&JYz;d%fsYBaNCG^M&jy;> zRaR27WmM*4GzV>Y0`+&mJ)l+YUX8`kEX?X!;;ORZTtTYYe#x0k%$g=*UTQ{c;(qK( z)*L(m>RRl~jEX#7_Mx$2LOjaK+(MFk{`zL&0bEl2=L&S?d`)Yeb{+J*+r5P-uPI=hVsYv^byLI4^Y;9LsYG6CA} z35q)|219VU01AK5;p3oci2-~H52%|6n&$>>tx#f61)mrL>KMWf;t&%zHV5yoQ34NB zL6+o#g9beRZ3deBhE9F2RW(%-P;-nhGIwWX73xXlR=16`amrSU6t-0}vE>nCllNnn z))5etWaDLK7g3Ukmf&V$QD%}hbXE^(jxw;(j{e7H9%e1CWfCZ>J%$SmdXS}44It5?oeUOW zt0WmLz$?OGb`6lN?UB(EhQD<`a=CB~?#E@KnpD6S>6Q`nJ9#wON5UrA8Zv~k@- zEj@N-Mo%y~Pfl|!KaYlyqmz-Cl8c#=kb;(kgo>0P8#|k(teCR2AS=7Dlb(vZg%Ue! zl86+D!No2mptwR+nV*lv0z&@VA}Yo$&nqFL2CB!H8T9{uVRB|V#vsg~&0q`KO{T+O z2fa>PM*y-o;=F-7!?NgTYiEw9}=5!4wjC zpy&cET-Ui{V8{xaG=ffHsT+X?VxfbL@Z}xg5fhYl2P2zPh`x|kK$$OuF1MG{k{9KW zWMR=XfU~@1C7795m1IE_i!zVCca%=#iY9-3?`UlhT_$DVtWhJPENE)S|O`3rVT>XHCpI|IC z1`%*k4LTNv0lZ}jGqi-2_?Y;a%=H+VLBYnvF2{%wF1&Kua-tlfj33yviV#eUuwaUl zHgM5MW4)!M_D@XOz*!T_1f>(uedAx4ESW&3M<{~E00cmjFW}q;+V6=t8xGp}Rcy|{hnBrC?u#Ht_*qF5C1`L#fjk4=a}Od3jo;))r3 zb~?oG;tcW(<)BGI1qMZ=*n;d}l_1scpqXCKb^-}#niK;a$|@*i2^!}V0FQHm8c~pY zfk5dLJw%w;#e|jE_?gVrP-51~(u-G^@rz6zh-UgKi{jrL7yCH&b5e{+F7|O8=cT}7 z#>NZ`OsY&u4BQN^p!OSN;^iC1#*^@vDijC z&b21*7KhIj%V#uCh-&)ho6o=qYBDjgG3hZVFoc5!d{OTvg>IWg*okO~fzH4e|o~suFNV*&MW2)65)n<))f8qd6m&nH3uola9KE ztD=v%p{1*~fv>r2gg2v^wTf%1qmienGIt8UwYiZE2a}yP9SxC_ga$fAhb9Ns37cd~Q@SC>mhr zMu8@a_&~XU9~KhOk!(avA`c#dWY#M34ocUs5o1jOP?5?H9`aCU0Ii(@&FDEYgEzo|>Q>Oz zB%qQOG%o?!%MEIYD}fi`8W=JvvO~r+Km`_Z)Icj&MZfv8=EzGT{ zt0W@8*bZKot@r;6lRfwx0Yio=(7AlDJ~QZCK13aYr-cDJUJJGd8GNy?00Zb^Uq@z! z129Gan6Z-qw0<5m9wi1ovJBGJ1~p1R1rxL}2R|PYluE%sbb{6K~l~p%XP_xw*SNF;^H@4woV%E`xP&|sZ;by*ll_|>F{=w1a%pz*C zLNZ3~+NMcfIt3O++@joC22cuIhB^H&VDe{DV&Gu#0gWEO&ya$zpMbWC!6^~6Tmq8t zK+~F_LJU;yv4V3QXix{T4454>)5r)qeM6C*F_ba#wp6(x;~j~ATPHBtH-4%53%cHs zLE--wCKsk-;ML%cpt?bw!HK~cTsNpg>qQWaSOpI4=wNT}L3U^xK+lxg!C;^d8fOC) z8|)0~;I2BTzA%8^4+_dZmWZ04z==|zx)X9zr!eva7`PqH$XJvg<;$q4t>BR8l#v?X zz-VBq>XBh-WXr+Cq^kp=G7ZhxnOL;6Arw!tpLd2JyP&JFnwOPwq`PCR1P8x|y_Ubd zTAq;>H$RuErXiTpVzkg#<`!j_S2F-ps^GM%^uK^fok3oB_07CnvCjK^jzs z7{GEWbi4)}bD)Dk*ckXh2iFLIHh;u|lB6`Wrz{BS&crhaLR!T9AO@&&J)c34VLgK& zq<QR)CG;VAp#)=VoOzLLg1(xTX3L+dp zNm>n*q_xD=Ju{s%3jcjGw&r4D*4BkkjLtsY6-i23zJZZuC~3O>0W>v3DbU&a;BgDk zoeRtj;8C11VaQw_NL-d#Tu2Qf&X|EDF2$@27f(kLX9nG&0ac%dB+d%D>j@&xkOdbv z1C5tJ%>mt&@EttY46>IA$vw_+^mtIV1ZB%x;qdo&c;v(QqRD|Ao*Vh zWIlrpgBQbVP@mo#+S3G$$2fuF9y~?>9RWaeY!N*pXk!>U=nd}ag0&!@bpje701ePU ziYi-hr`Cyqm%$dCIh{b8ehL_z7#bLy7(g2#KnJsfPVa>cyMVSdg2opdL5|jA5MThc zRrDAP81xt%81xtd81xtt81xtl81xuGeO}I3$oRQB1Iw2k3|e<~Fo3!*rWbZGSTWcV zH&z2$NFxT@$_N=ORM%r9Y4}FdP>P*jL_mhiMA*u}$ko-8QBjA;@f=BIDIspDCbl(#!&6qJE(zY5XZG&!uVfYSedO*!n2HjHwHjkb83?oe67ba!UeKb(< zvnb+=;r5(E5}%4>&IP!*851I}s4=DqL++bFwx112-z7$b{Z&ZzUq%v_1KoQAb=Osh zIAp90oQE4hd7Ci_Q-8IwTnU?>BfJI4UJqtSvX zkm(773d2;;95G~9BdkvVZPg)$)S;a{JXsZbED<=Xg0?q;ZqS9aqd=!b>|)?z;9yV& z=S7^ZuZ%a! zzf7!IgwaoYjgy0xPp*@^xWn)b97f>lkpKT@VEzAjgoI9hAmRbJgakEmKu6<&PJA(fHf@ykVGTJE24$p%oD8_a z69*MK=E9)Sc}NQm7PRU{_MkK7wHevjL`8%_L&=~vt+En7%&^ce7Ym z^};A4eqQ@h5dl9&e?tv4Il-*1_HV+4|L=(WLN=t+?-8R1X>R735`4^qou2&plGe^V3uhg9+Q(Q z>+P&&uVHOa$YXEcX~fR0A|WO&B^Roz?&9E@Cc!SGr6sQxVq^f0V`%=A6k-GAX9mXq z-xwH}J(!*_m^17KEhvTe9l_NXG?O6W6S@Hb;Yny)2q9ny>c$vCW_7`4V4S}O?dX6f zEzH65=%9WU=*$Mt;_Y1w#tb~r=@4W1E!Lpz#h{ZlKc1i|6+6F zkp=l=c&}b9N@igEzvsUW;~^$V22;>#P8kMBzJZlj(5Y`ks6q1ycs&)QBvKZD%{ z_{ut^No^|yMtyq?x40`-W&s-NM!HhGyv_wWN=h7@%(5z4 zO2)3PQu>bSiZ=T4EUc_PHl{HypaEydI7$c;=pLi|T@1_&sOJemy@^Oq(1IHg5YW@T zz=;E#d;~!03B2PJ)YD*rc7s7jcR{*IoD8B2OyKbq(9uWc#_XW;P2?Em8I9SMl|bjR zDKF{?ai2GJnV^gaqo4$bx{0{8m#m?;Ru9vYfAOa-iwZHbv5Jak7WlVZ2JL~o&%nTV z7kq!R2PluDu0?{nAK_eRfroG|bVVaXKwt+0XqBR{v9Pi}qcT6E@{4`uJtCYOq3IKu zc>jLBvTxrNaJ!U`fq~f`RPHhafX6mv{#!7eXL`Z_+S6{zFmV?H4>bKiPQV0Bje~Y1 zn!?Ln=zdZ}xMJi}=<*hDbq5Yts8_%a1sTQ>dOdl+>XUF|KL z1^ErE9n75t_zkW9?FOxrGx-07$%BcPL4-jKbSn}!1LP)H&<24W45IK5!rLGKjaY;B zqk)?K9MHT5+K&TjZtr5?X5fX6>Vd)q)Di#H+VZ6q&EUOy9ivCn3|Xi8{_a3o2ZD`zmyD4vmPx>@31jL ze8b3w;Tst~Zjfh~82J8wVR{QL8#EajK~o;E85Yop1Sfi2AyPB63_y4eItC0*ylANz zvY36L z;?Jw^=&zTUsqUI&s-e#<%&epYp?C_jST2K#69az>`NAys$_S%EE6X^32}La^1!~+f z{XhIai|Gn@EwmsgE}0mFz^AoCMt2Z16&UL*5v2_1q(0Ebz??Q4G2DrjgeVhnVp$6hEZ*&Q;cPY+&@eC4kk58UJn0;1}3Y& z$Ns&VHjPn?k#FU)f1o|0{~t0iurM=$HX$qrl|88K9B58Lj2A)68iW8ex)1`;>JAZI z$lYRa{6U)$;9~?phj>9+-U|9V8MqnvzU%_85a9;5y!kGG#t0!}>N^+|1a>fh4yX_Y zZ5Y>MRA)982KgF&|SF4 z!Dk5OgXUmR&k%%WKtw1&>pFx0w8e-B7U)nMI21suvLUwwfNmuLU2zZUlL#W!b)d63 z89^;#s2>+iv`oA(=eW3*ETf1NSLU>gWUGlxyRdiwROkG^!@$5~#k5O^4Rn7f18AQ3 zD042;X9igY&`Po*P+K21dJAgfgX$a*Z3xPxvapdbM7;w#CqC5jH z13x&~%Iib2E@)g=5IhYGI*4p1gD3;|6a+}}1y!lWilEfWuFPl-nqvW1BgWk#TGEV8 zZkiq`){L6H6OE&HtY*BSHc`=-gOyE2;ij}SGaFy9y;Xv<>R&g8|Nj}Q_baK3DshX- zL&qnukEwlO5@QyGjzh39pX33RQH%@=nW7jUFuh}t1g)51M%sT28p{No5Dz{X2XsmW z_{1B2&|o)c_!4}(CWrw#BOa_~0$6GX1KS-(&{>yk42*@KY6nsk)$U;6)RzFAkh7D4 zmw_2{`h@^!Q#JD!Q1<2pmy0z!7{ow_Brz(fsY4D$PzQAd#UO_(gH~oTR*J|92+H#F zi1BF&n#&_|n4)+&IeEEx9A%W?3{ak(#N^Dx#Vp7mz+eShZw6nR%>eQr=y(~h+u`1V z_+}>qC)kawcXlvxW3vfvC$nxps%PB@NIh)uR zYo{`^u%~JpTbhI0b?cZ+82>Qe0pCri$S@m}7L=fa44|ncP@xW@WiK$)f=2y8>nZF( zOE^JyxU2^;VjcMz_!(G0XW267Gq5m#Wc?Xf7(iz=cH%~yOibD!f?409)c@adGeZSqWnnV|MPp@QS6vPs7DXKn9v0AG5Yzt%CL4y= z%*PqT8KfD?Kz?NauN~kiZ~xLC_?#l z9keCcyal+0MWu!KrKIJAq&-EnOdMH#va^|Nq_oUrb!CO61lZa6r9@;66-+h67HS-_ z0?i*l{dAO`ev)Q@`$-yWqLwbkI3k#_Mo~h+ zP})f;0aQN1((YmgaRx(%MX)eoW`KJXnlgzACF0WV4hD%kprb=U!;f+d5`sdOwL2IT zL1m|$z)l8LaB`Or*vX*H04h867*xTlmTGn|=wVM2<~U1JTtTEOA}=T`CoCW%q$Fym zhRng9ey;OyaPjc)I!dX)8KAHOuUBVeVLrjY#vs9<#bD2{gMl4X>TX~F-T2_h%rF7W z*ufwGx@!2&P6lSM=fJDLFFYaGjg)@DfVxO65KV>C!6*yLk0Tln1jIqq1HSAmrO`!Pa0GD0%3>={4h@j$`gF&8w zgF&Bxg8?My&%nVD&%nWu&%gmIp23IKGBcb9X#tgL>tPJg!M2QrI~dqO1#<#8Fm{4A zetrSfR9xT%I5nVU8WNy^YUtR4y16*3IJ-K#y7^U~jGX@r5T7#L*Vt#?1o06l?3w;2 zFxfG@W8TBS#vsLz2y!SRUV)dsV+cv5`fNSWCO<# z`yEi@22_cIb{dF+b{2r0WX}jKWkI)v*)xjsF-I1=WOka()mJmukYab`7gd*&){&RA z=2JDaX8K&}5FG4KDlVaJD4`{xBrT~Zts`lmCJu4GAd@A-Ir@h?GiV|Ja-9-0D9?db z|AWSKKqad=*pue(3p_pVK!TmQ&-|d89yHh?X~l_o2Lm^Q5W`eZm8Oa zk$-PEp!ru7wCMzG3kq{(+HtIT7AgqZe;&$Y&G3wQErTS30>f%he8_?0BcB0u#}yc25Qc|6=-hNrz5z9c8Ne$AYQT+QP{UUkyo0P3-0+2rw}H+z6*fX@^MdZ*gSUpE zamFqzBPb##$R{PJEN-KM%qcDQNN;yo!Mqk;6vG*7+w3zk?AsU^8M>H$GJa$3V~}L% z19i3G=Ny6C#GnQkIK_clW8k6!+SKO&`PUfa_*(D-3eJ zCdji?ZTUBgDTxRxiU>*wYKvPcBXgL3@^EtU^641E@xn7um{x^EDWrW^<~VU8rB|kl>lhzNk0SVS}tbD z(vy6MD5xd^T~7ch8w?DE71uU zv}OU6EI?_536x(z9B>)|w}(JBf=<=}B^V}9-vuO!FTrr$ab#ymVBlmZVBlnE0Cl=z z9YJTUaxw@oa56B(8bA()M5*l=O|%u6Sy(jPctwxu!C01GBI#4aDqo1KmⓈBgC3 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 AaR2}S diff --git a/assets/fonts/plex-sans/ZedPlexSans-Italic.ttf b/assets/fonts/plex-sans/ZedPlexSans-Italic.ttf deleted file mode 100644 index 8769c232ee69236158ed03a1306ff7f2be4ebdd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213092 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ν}7g@a9&0Z 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

5`Kmm;vfae7u?g6;~ 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 YFfcHJTABB+or(m}4-KYofzZ`+0Lrf4dH?_b diff --git a/assets/fonts/plex-sans/ZedPlexSans-Regular.ttf b/assets/fonts/plex-sans/ZedPlexSans-Regular.ttf deleted file mode 100644 index 3ea293d59a31d2d80f0a1b35ef2c4507e7e4eec2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205848 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Ι(Gs--R6vpivFbXo-QLxhbrb0j)^IK=miP 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

_7lwpbSo-DX=LazEbIUMua+~G$&k3|ESNp#X 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

{ ], }), MenuItem::separator(), + #[cfg(target_os = "macos")] MenuItem::os_submenu("Services", gpui::SystemMenuType::Services), MenuItem::separator(), MenuItem::action("Extensions", zed_actions::Extensions::default()), From a6e2e0d24a60ea852b9b5262cd16e7efd41ba524 Mon Sep 17 00:00:00 2001 From: Finn Evers Date: Wed, 13 Aug 2025 22:31:28 +0200 Subject: [PATCH 23/74] onboarding: Fix minimap typo on editing page (#36143) This PR fixes a small typo on the onboarding editing page where it should be "Minimap" instead of "Mini Map" Release Notes: - N/A --- crates/onboarding/src/editing_page.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/onboarding/src/editing_page.rs b/crates/onboarding/src/editing_page.rs index aa7f4eee74..d941a0315a 100644 --- a/crates/onboarding/src/editing_page.rs +++ b/crates/onboarding/src/editing_page.rs @@ -721,7 +721,7 @@ fn render_popular_settings_section( .items_start() .justify_between() .child( - v_flex().child(Label::new("Mini Map")).child( + v_flex().child(Label::new("Minimap")).child( Label::new("See a high-level overview of your source code.") .color(Color::Muted), ), From 1d2eaf210a15bc6c67de60696caaf08f4be9c1c6 Mon Sep 17 00:00:00 2001 From: smit Date: Thu, 14 Aug 2025 02:48:20 +0530 Subject: [PATCH 24/74] editor: Fix first `cmd-left` target for cursor in leading whitespace (#36145) Closes #35805 If the cursor is between column 0 and the indent size, pressing `cmd-left` jumps to the indent. Pressing it again moves to the true column 0. Further presses toggle between indent and column 0. This PR changes the first `cmd-left` to go to column 0 instead of indent. Toggling between is unaffected. Release Notes: - Fixed issue where pressing `cmd-left` with the cursor in the leading spaces moved to the start of the text first. It now goes to the beginning of the line first, then the start of the text. --- crates/editor/src/editor_tests.rs | 45 +++++++++++++++++++++++++++++++ crates/editor/src/movement.rs | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 0d2ecec8f2..4421869703 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -1901,6 +1901,51 @@ fn test_beginning_of_line_stop_at_indent(cx: &mut TestAppContext) { }); } +#[gpui::test] +fn test_beginning_of_line_with_cursor_between_line_start_and_indent(cx: &mut TestAppContext) { + init_test(cx, |_| {}); + + let move_to_beg = MoveToBeginningOfLine { + stop_at_soft_wraps: true, + stop_at_indent: true, + }; + + let editor = cx.add_window(|window, cx| { + let buffer = MultiBuffer::build_simple(" hello\nworld", cx); + build_editor(buffer, window, cx) + }); + + _ = editor.update(cx, |editor, window, cx| { + // test cursor between line_start and indent_start + editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| { + s.select_display_ranges([ + DisplayPoint::new(DisplayRow(0), 3)..DisplayPoint::new(DisplayRow(0), 3) + ]); + }); + + // cursor should move to line_start + editor.move_to_beginning_of_line(&move_to_beg, window, cx); + assert_eq!( + editor.selections.display_ranges(cx), + &[DisplayPoint::new(DisplayRow(0), 0)..DisplayPoint::new(DisplayRow(0), 0)] + ); + + // cursor should move to indent_start + editor.move_to_beginning_of_line(&move_to_beg, window, cx); + assert_eq!( + editor.selections.display_ranges(cx), + &[DisplayPoint::new(DisplayRow(0), 4)..DisplayPoint::new(DisplayRow(0), 4)] + ); + + // cursor should move to back to line_start + editor.move_to_beginning_of_line(&move_to_beg, window, cx); + assert_eq!( + editor.selections.display_ranges(cx), + &[DisplayPoint::new(DisplayRow(0), 0)..DisplayPoint::new(DisplayRow(0), 0)] + ); + }); +} + #[gpui::test] fn test_prev_next_word_boundary(cx: &mut TestAppContext) { init_test(cx, |_| {}); diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index a8850984a1..fdda0e82bc 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -230,7 +230,7 @@ pub fn indented_line_beginning( if stop_at_soft_boundaries && soft_line_start > indent_start && display_point != soft_line_start { soft_line_start - } else if stop_at_indent && display_point != indent_start { + } else if stop_at_indent && (display_point > indent_start || display_point == line_start) { indent_start } else { line_start From 8452532c8f0f0dc93afc8c75ebd1683c93e6118f Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 13 Aug 2025 18:34:53 -0300 Subject: [PATCH 25/74] agent2: Iterate on "new thread" selector in the toolbar (#36144) Release Notes: - N/A --- crates/agent_ui/src/agent_panel.rs | 61 +++++++++++------------------- 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index 9aeb7867ac..e47cbe3714 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -67,8 +67,8 @@ use theme::ThemeSettings; use time::UtcOffset; use ui::utils::WithRemSize; use ui::{ - Banner, ButtonLike, Callout, ContextMenu, ContextMenuEntry, ElevationIndex, KeyBinding, - PopoverMenu, PopoverMenuHandle, ProgressBar, Tab, Tooltip, prelude::*, + Banner, Callout, ContextMenu, ContextMenuEntry, ElevationIndex, KeyBinding, PopoverMenu, + PopoverMenuHandle, ProgressBar, Tab, Tooltip, prelude::*, }; use util::ResultExt as _; use workspace::{ @@ -1996,9 +1996,7 @@ impl AgentPanel { PopoverMenu::new("agent-nav-menu") .trigger_with_tooltip( - IconButton::new("agent-nav-menu", icon) - .icon_size(IconSize::Small) - .style(ui::ButtonStyle::Subtle), + IconButton::new("agent-nav-menu", icon).icon_size(IconSize::Small), { let focus_handle = focus_handle.clone(); move |window, cx| { @@ -2135,9 +2133,10 @@ impl AgentPanel { .pl_1() .gap_1() .child(match &self.active_view { - ActiveView::History | ActiveView::Configuration => { - self.render_toolbar_back_button(cx).into_any_element() - } + ActiveView::History | ActiveView::Configuration => div() + .pl(DynamicSpacing::Base04.rems(cx)) + .child(self.render_toolbar_back_button(cx)) + .into_any_element(), _ => self .render_recent_entries_menu(IconName::MenuAlt, cx) .into_any_element(), @@ -2175,33 +2174,7 @@ impl AgentPanel { let new_thread_menu = PopoverMenu::new("new_thread_menu") .trigger_with_tooltip( - ButtonLike::new("new_thread_menu_btn").child( - h_flex() - .group("agent-selector") - .gap_1p5() - .child( - h_flex() - .relative() - .size_4() - .justify_center() - .child( - h_flex() - .group_hover("agent-selector", |s| s.invisible()) - .child( - Icon::new(self.selected_agent.icon()) - .color(Color::Muted), - ), - ) - .child( - h_flex() - .absolute() - .invisible() - .group_hover("agent-selector", |s| s.visible()) - .child(Icon::new(IconName::Plus)), - ), - ) - .child(Label::new(self.selected_agent.label())), - ), + IconButton::new("new_thread_menu_btn", IconName::Plus).icon_size(IconSize::Small), { let focus_handle = focus_handle.clone(); move |window, cx| { @@ -2419,15 +2392,24 @@ impl AgentPanel { .size_full() .gap(DynamicSpacing::Base08.rems(cx)) .child(match &self.active_view { - ActiveView::History | ActiveView::Configuration => { - self.render_toolbar_back_button(cx).into_any_element() - } + ActiveView::History | ActiveView::Configuration => div() + .pl(DynamicSpacing::Base04.rems(cx)) + .child(self.render_toolbar_back_button(cx)) + .into_any_element(), _ => h_flex() .h_full() .px(DynamicSpacing::Base04.rems(cx)) .border_r_1() .border_color(cx.theme().colors().border) - .child(new_thread_menu) + .child( + h_flex() + .px_0p5() + .gap_1p5() + .child( + Icon::new(self.selected_agent.icon()).color(Color::Muted), + ) + .child(Label::new(self.selected_agent.label())), + ) .into_any_element(), }) .child(self.render_title_view(window, cx)), @@ -2445,6 +2427,7 @@ impl AgentPanel { .pr(DynamicSpacing::Base06.rems(cx)) .border_l_1() .border_color(cx.theme().colors().border) + .child(new_thread_menu) .child(self.render_recent_entries_menu(IconName::HistoryRerun, cx)) .child(self.render_panel_options_menu(window, cx)), ), From 09e90fb023cc136ad2a2fdefc692f6270345544a Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 13 Aug 2025 14:45:34 -0700 Subject: [PATCH 26/74] Use trace log level for potentially high-volume vsync duration log (#36147) This is an attempt to fix https://github.com/zed-industries/zed/issues/36125 Release Notes: - N/A --- crates/gpui/src/platform/windows/vsync.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/gpui/src/platform/windows/vsync.rs b/crates/gpui/src/platform/windows/vsync.rs index 09dbfd0231..6d09b0960f 100644 --- a/crates/gpui/src/platform/windows/vsync.rs +++ b/crates/gpui/src/platform/windows/vsync.rs @@ -99,7 +99,7 @@ impl VSyncProvider { // operation for the first call after the vsync thread becomes non-idle, // but it shouldn't happen often. if !wait_succeeded || elapsed < VSYNC_INTERVAL_THRESHOLD { - log::warn!("VSyncProvider::wait_for_vsync() took shorter than expected"); + log::trace!("VSyncProvider::wait_for_vsync() took less time than expected"); std::thread::sleep(self.interval); } } From 665006c4144c35f8673bd342c56e8d39df8b9e17 Mon Sep 17 00:00:00 2001 From: Aleksei Gusev Date: Thu, 14 Aug 2025 00:45:50 +0300 Subject: [PATCH 27/74] Move the cursor on search in Terminal if ViMode is active (#33305) Currently, the terminal search function doesn't work well with ViMode. It matches the search terms, scrolls the active match in the view, but it doesn't move the cursor to the match, which makes it useless for navigating the scrollback in vimode. With this improvement, if a user activates ViMode before the search Zed moves the cursor to the active search terms. So, when the search dialog is dismissed the cursor is places on the latest active search term and it's possible to navigate the scrollback via ViMode using this place as the starting point. https://github.com/user-attachments/assets/63325405-ed93-4bf8-a00f-28ded5511f31 Release Notes: - Improved the search function in the terminal when ViMode is activated --- crates/terminal/src/terminal.rs | 20 +++++++++++++++++--- crates/terminal_view/src/terminal_view.rs | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index c3c6de9e53..86728cc11c 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -167,6 +167,7 @@ enum InternalEvent { // Vi mode events ToggleViMode, ViMotion(ViMotion), + MoveViCursorToAlacPoint(AlacPoint), } ///A translation struct for Alacritty to communicate with us from their event loop @@ -972,6 +973,10 @@ impl Terminal { term.scroll_to_point(*point); self.refresh_hovered_word(window); } + InternalEvent::MoveViCursorToAlacPoint(point) => { + term.vi_goto_point(*point); + self.refresh_hovered_word(window); + } InternalEvent::ToggleViMode => { self.vi_mode_enabled = !self.vi_mode_enabled; term.toggle_vi_mode(); @@ -1100,12 +1105,21 @@ impl Terminal { pub fn activate_match(&mut self, index: usize) { if let Some(search_match) = self.matches.get(index).cloned() { self.set_selection(Some((make_selection(&search_match), *search_match.end()))); - - self.events - .push_back(InternalEvent::ScrollToAlacPoint(*search_match.start())); + if self.vi_mode_enabled { + self.events + .push_back(InternalEvent::MoveViCursorToAlacPoint(*search_match.end())); + } else { + self.events + .push_back(InternalEvent::ScrollToAlacPoint(*search_match.start())); + } } } + pub fn clear_matches(&mut self) { + self.matches.clear(); + self.set_selection(None); + } + pub fn select_matches(&mut self, matches: &[RangeInclusive]) { let matches_to_select = self .matches diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index 0ec5f816d5..219238496c 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -1869,7 +1869,7 @@ impl SearchableItem for TerminalView { /// Clear stored matches fn clear_matches(&mut self, _window: &mut Window, cx: &mut Context) { - self.terminal().update(cx, |term, _| term.matches.clear()) + self.terminal().update(cx, |term, _| term.clear_matches()) } /// Store matches returned from find_matches somewhere for rendering From 293992f5b1f4456a6493dec9e315943aad3f7054 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 13 Aug 2025 15:01:00 -0700 Subject: [PATCH 28/74] In auto-update-helper, fix parsing of `--launch false` (#36148) This fixes an issue introduced in https://github.com/zed-industries/zed/pull/34303 where, after an auto-update was downloaded, quitting Zed would always restart Zed. Release Notes: - N/A --- .../src/auto_update_helper.rs | 110 +++++++----------- 1 file changed, 41 insertions(+), 69 deletions(-) diff --git a/crates/auto_update_helper/src/auto_update_helper.rs b/crates/auto_update_helper/src/auto_update_helper.rs index 2781176028..3aa57094d3 100644 --- a/crates/auto_update_helper/src/auto_update_helper.rs +++ b/crates/auto_update_helper/src/auto_update_helper.rs @@ -18,7 +18,7 @@ fn main() {} #[cfg(target_os = "windows")] mod windows_impl { - use std::path::Path; + use std::{borrow::Cow, path::Path}; use super::dialog::create_dialog_window; use super::updater::perform_update; @@ -37,9 +37,9 @@ mod windows_impl { pub(crate) const WM_JOB_UPDATED: u32 = WM_USER + 1; pub(crate) const WM_TERMINATE: u32 = WM_USER + 2; - #[derive(Debug)] + #[derive(Debug, Default)] struct Args { - launch: Option, + launch: bool, } pub(crate) fn run() -> Result<()> { @@ -56,9 +56,9 @@ mod windows_impl { log::info!("======= Starting Zed update ======="); let (tx, rx) = std::sync::mpsc::channel(); let hwnd = create_dialog_window(rx)?.0 as isize; - let args = parse_args(); + let args = parse_args(std::env::args().skip(1)); std::thread::spawn(move || { - let result = perform_update(app_dir.as_path(), Some(hwnd), args.launch.unwrap_or(true)); + let result = perform_update(app_dir.as_path(), Some(hwnd), args.launch); tx.send(result).ok(); unsafe { PostMessageW(Some(HWND(hwnd as _)), WM_TERMINATE, WPARAM(0), LPARAM(0)) }.ok(); }); @@ -83,39 +83,27 @@ mod windows_impl { Ok(()) } - fn parse_args() -> Args { - let mut result = Args { launch: None }; - if let Some(candidate) = std::env::args().nth(1) { - parse_single_arg(&candidate, &mut result); + fn parse_args(input: impl IntoIterator) -> Args { + let mut args: Args = Args { launch: true }; + + let mut input = input.into_iter(); + if let Some(arg) = input.next() { + let launch_arg; + + if arg == "--launch" { + launch_arg = input.next().map(Cow::Owned); + } else if let Some(rest) = arg.strip_prefix("--launch=") { + launch_arg = Some(Cow::Borrowed(rest)); + } else { + launch_arg = None; + } + + if launch_arg.as_deref() == Some("false") { + args.launch = false; + } } - result - } - - fn parse_single_arg(arg: &str, result: &mut Args) { - let Some((key, value)) = arg.strip_prefix("--").and_then(|arg| arg.split_once('=')) else { - log::error!( - "Invalid argument format: '{}'. Expected format: --key=value", - arg - ); - return; - }; - - match key { - "launch" => parse_launch_arg(value, &mut result.launch), - _ => log::error!("Unknown argument: --{}", key), - } - } - - fn parse_launch_arg(value: &str, arg: &mut Option) { - match value { - "true" => *arg = Some(true), - "false" => *arg = Some(false), - _ => log::error!( - "Invalid value for --launch: '{}'. Expected 'true' or 'false'", - value - ), - } + args } pub(crate) fn show_error(mut content: String) { @@ -135,44 +123,28 @@ mod windows_impl { #[cfg(test)] mod tests { - use crate::windows_impl::{Args, parse_launch_arg, parse_single_arg}; + use crate::windows_impl::parse_args; #[test] - fn test_parse_launch_arg() { - let mut arg = None; - parse_launch_arg("true", &mut arg); - assert_eq!(arg, Some(true)); + fn test_parse_args() { + // launch can be specified via two separate arguments + assert_eq!(parse_args(["--launch".into(), "true".into()]).launch, true); + assert_eq!( + parse_args(["--launch".into(), "false".into()]).launch, + false + ); - let mut arg = None; - parse_launch_arg("false", &mut arg); - assert_eq!(arg, Some(false)); + // launch can be specified via one single argument + assert_eq!(parse_args(["--launch=true".into()]).launch, true); + assert_eq!(parse_args(["--launch=false".into()]).launch, false); - let mut arg = None; - parse_launch_arg("invalid", &mut arg); - assert_eq!(arg, None); - } + // launch defaults to true on no arguments + assert_eq!(parse_args([]).launch, true); - #[test] - fn test_parse_single_arg() { - let mut args = Args { launch: None }; - parse_single_arg("--launch=true", &mut args); - assert_eq!(args.launch, Some(true)); - - let mut args = Args { launch: None }; - parse_single_arg("--launch=false", &mut args); - assert_eq!(args.launch, Some(false)); - - let mut args = Args { launch: None }; - parse_single_arg("--launch=invalid", &mut args); - assert_eq!(args.launch, None); - - let mut args = Args { launch: None }; - parse_single_arg("--launch", &mut args); - assert_eq!(args.launch, None); - - let mut args = Args { launch: None }; - parse_single_arg("--unknown", &mut args); - assert_eq!(args.launch, None); + // launch defaults to true on invalid arguments + assert_eq!(parse_args(["--launch".into()]).launch, true); + assert_eq!(parse_args(["--launch=".into()]).launch, true); + assert_eq!(parse_args(["--launch=invalid".into()]).launch, true); } } } From e67b2da20c387fb2a82fbf91c767279a2c6bad79 Mon Sep 17 00:00:00 2001 From: Tom Planche Date: Thu, 14 Aug 2025 00:07:49 +0200 Subject: [PATCH 29/74] Make alphabetical sorting the default (#32315) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow up of this pr: #25148 Release Notes: - Improved file sorting. As described in #20126, I was fed up with lexicographical file sorting in the project panel. The current sorting behavior doesn't handle numeric segments properly, leading to unintuitive ordering like `file_1.rs`, `file_10.rs`, `file_2.rs`. ## Example Sorting Results Using `lexicographical` (default): ``` . ├── file_01.rs ├── file_1.rs ├── file_10.rs ├── file_1025.rs ├── file_2.rs ``` Using alphabetical (natural) sorting: ``` . ├── file_1.rs ├── file_01.rs ├── file_2.rs ├── file_10.rs ├── file_1025.rs ``` --- .../project_panel/src/project_panel_tests.rs | 32 +- crates/util/src/paths.rs | 523 +++++++++++++++++- 2 files changed, 520 insertions(+), 35 deletions(-) diff --git a/crates/project_panel/src/project_panel_tests.rs b/crates/project_panel/src/project_panel_tests.rs index 6c62c8db93..de3316e357 100644 --- a/crates/project_panel/src/project_panel_tests.rs +++ b/crates/project_panel/src/project_panel_tests.rs @@ -740,9 +740,9 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", + " > [EDITOR: ''] <== selected", " > 3", " > 4", - " > [EDITOR: ''] <== selected", " a-different-filename.tar.gz", " > C", " .dockerignore", @@ -765,10 +765,10 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", - " > 4", " > [PROCESSING: 'new-dir']", - " a-different-filename.tar.gz <== selected", + " > 3 <== selected", + " > 4", + " a-different-filename.tar.gz", " > C", " .dockerignore", ] @@ -782,10 +782,10 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", + " > 3 <== selected", " > 4", " > new-dir", - " a-different-filename.tar.gz <== selected", + " a-different-filename.tar.gz", " > C", " .dockerignore", ] @@ -801,10 +801,10 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", + " > [EDITOR: '3'] <== selected", " > 4", " > new-dir", - " [EDITOR: 'a-different-filename.tar.gz'] <== selected", + " a-different-filename.tar.gz", " > C", " .dockerignore", ] @@ -819,10 +819,10 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", + " > 3 <== selected", " > 4", " > new-dir", - " a-different-filename.tar.gz <== selected", + " a-different-filename.tar.gz", " > C", " .dockerignore", ] @@ -837,12 +837,12 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", + " v 3", + " [EDITOR: ''] <== selected", + " Q", " > 4", " > new-dir", - " [EDITOR: ''] <== selected", " a-different-filename.tar.gz", - " > C", ] ); panel.update_in(cx, |panel, window, cx| { @@ -863,12 +863,12 @@ async fn test_editing_files(cx: &mut gpui::TestAppContext) { " > .git", " > a", " v b", - " > 3", + " v 3 <== selected", + " Q", " > 4", " > new-dir", - " a-different-filename.tar.gz <== selected", + " a-different-filename.tar.gz", " > C", - " .dockerignore", ] ); } diff --git a/crates/util/src/paths.rs b/crates/util/src/paths.rs index 585f2b08aa..211831125d 100644 --- a/crates/util/src/paths.rs +++ b/crates/util/src/paths.rs @@ -1,4 +1,7 @@ -use std::cmp; +use globset::{Glob, GlobSet, GlobSetBuilder}; +use regex::Regex; +use serde::{Deserialize, Serialize}; +use std::cmp::Ordering; use std::path::StripPrefixError; use std::sync::{Arc, OnceLock}; use std::{ @@ -7,12 +10,6 @@ use std::{ sync::LazyLock, }; -use globset::{Glob, GlobSet, GlobSetBuilder}; -use regex::Regex; -use serde::{Deserialize, Serialize}; - -use crate::NumericPrefixWithSuffix; - /// Returns the path to the user's home directory. pub fn home_dir() -> &'static PathBuf { static HOME_DIR: OnceLock = OnceLock::new(); @@ -545,17 +542,172 @@ impl PathMatcher { } } +/// Custom character comparison that prioritizes lowercase for same letters +fn compare_chars(a: char, b: char) -> Ordering { + // First compare case-insensitive + match a.to_ascii_lowercase().cmp(&b.to_ascii_lowercase()) { + Ordering::Equal => { + // If same letter, prioritize lowercase (lowercase < uppercase) + match (a.is_ascii_lowercase(), b.is_ascii_lowercase()) { + (true, false) => Ordering::Less, // lowercase comes first + (false, true) => Ordering::Greater, // uppercase comes after + _ => Ordering::Equal, // both same case or both non-ascii + } + } + other => other, + } +} + +/// Compares two sequences of consecutive digits for natural sorting. +/// +/// This function is a core component of natural sorting that handles numeric comparison +/// in a way that feels natural to humans. It extracts and compares consecutive digit +/// sequences from two iterators, handling various cases like leading zeros and very large numbers. +/// +/// # Behavior +/// +/// The function implements the following comparison rules: +/// 1. Different numeric values: Compares by actual numeric value (e.g., "2" < "10") +/// 2. Leading zeros: When values are equal, longer sequence wins (e.g., "002" > "2") +/// 3. Large numbers: Falls back to string comparison for numbers that would overflow u128 +/// +/// # Examples +/// +/// ```text +/// "1" vs "2" -> Less (different values) +/// "2" vs "10" -> Less (numeric comparison) +/// "002" vs "2" -> Greater (leading zeros) +/// "10" vs "010" -> Less (leading zeros) +/// "999..." vs "1000..." -> Less (large number comparison) +/// ``` +/// +/// # Implementation Details +/// +/// 1. Extracts consecutive digits into strings +/// 2. Compares sequence lengths for leading zero handling +/// 3. For equal lengths, compares digit by digit +/// 4. For different lengths: +/// - Attempts numeric comparison first (for numbers up to 2^128 - 1) +/// - Falls back to string comparison if numbers would overflow +/// +/// The function advances both iterators past their respective numeric sequences, +/// regardless of the comparison result. +fn compare_numeric_segments( + a_iter: &mut std::iter::Peekable, + b_iter: &mut std::iter::Peekable, +) -> Ordering +where + I: Iterator, +{ + // Collect all consecutive digits into strings + let mut a_num_str = String::new(); + let mut b_num_str = String::new(); + + while let Some(&c) = a_iter.peek() { + if !c.is_ascii_digit() { + break; + } + + a_num_str.push(c); + a_iter.next(); + } + + while let Some(&c) = b_iter.peek() { + if !c.is_ascii_digit() { + break; + } + + b_num_str.push(c); + b_iter.next(); + } + + // First compare lengths (handle leading zeros) + match a_num_str.len().cmp(&b_num_str.len()) { + Ordering::Equal => { + // Same length, compare digit by digit + match a_num_str.cmp(&b_num_str) { + Ordering::Equal => Ordering::Equal, + ordering => ordering, + } + } + + // Different lengths but same value means leading zeros + ordering => { + // Try parsing as numbers first + if let (Ok(a_val), Ok(b_val)) = (a_num_str.parse::(), b_num_str.parse::()) { + match a_val.cmp(&b_val) { + Ordering::Equal => ordering, // Same value, longer one is greater (leading zeros) + ord => ord, + } + } else { + // If parsing fails (overflow), compare as strings + a_num_str.cmp(&b_num_str) + } + } + } +} + +/// Performs natural sorting comparison between two strings. +/// +/// Natural sorting is an ordering that handles numeric sequences in a way that matches human expectations. +/// For example, "file2" comes before "file10" (unlike standard lexicographic sorting). +/// +/// # Characteristics +/// +/// * Case-sensitive with lowercase priority: When comparing same letters, lowercase comes before uppercase +/// * Numbers are compared by numeric value, not character by character +/// * Leading zeros affect ordering when numeric values are equal +/// * Can handle numbers larger than u128::MAX (falls back to string comparison) +/// +/// # Algorithm +/// +/// The function works by: +/// 1. Processing strings character by character +/// 2. When encountering digits, treating consecutive digits as a single number +/// 3. Comparing numbers by their numeric value rather than lexicographically +/// 4. For non-numeric characters, using case-sensitive comparison with lowercase priority +fn natural_sort(a: &str, b: &str) -> Ordering { + let mut a_iter = a.chars().peekable(); + let mut b_iter = b.chars().peekable(); + + loop { + match (a_iter.peek(), b_iter.peek()) { + (None, None) => return Ordering::Equal, + (None, _) => return Ordering::Less, + (_, None) => return Ordering::Greater, + (Some(&a_char), Some(&b_char)) => { + if a_char.is_ascii_digit() && b_char.is_ascii_digit() { + match compare_numeric_segments(&mut a_iter, &mut b_iter) { + Ordering::Equal => continue, + ordering => return ordering, + } + } else { + match compare_chars(a_char, b_char) { + Ordering::Equal => { + a_iter.next(); + b_iter.next(); + } + ordering => return ordering, + } + } + } + } + } +} + pub fn compare_paths( (path_a, a_is_file): (&Path, bool), (path_b, b_is_file): (&Path, bool), -) -> cmp::Ordering { +) -> Ordering { let mut components_a = path_a.components().peekable(); let mut components_b = path_b.components().peekable(); + loop { match (components_a.next(), components_b.next()) { (Some(component_a), Some(component_b)) => { let a_is_file = components_a.peek().is_none() && a_is_file; let b_is_file = components_b.peek().is_none() && b_is_file; + let ordering = a_is_file.cmp(&b_is_file).then_with(|| { let path_a = Path::new(component_a.as_os_str()); let path_string_a = if a_is_file { @@ -564,9 +716,6 @@ pub fn compare_paths( path_a.file_name() } .map(|s| s.to_string_lossy()); - let num_and_remainder_a = path_string_a - .as_deref() - .map(NumericPrefixWithSuffix::from_numeric_prefixed_str); let path_b = Path::new(component_b.as_os_str()); let path_string_b = if b_is_file { @@ -575,27 +724,32 @@ pub fn compare_paths( path_b.file_name() } .map(|s| s.to_string_lossy()); - let num_and_remainder_b = path_string_b - .as_deref() - .map(NumericPrefixWithSuffix::from_numeric_prefixed_str); - num_and_remainder_a.cmp(&num_and_remainder_b).then_with(|| { + let compare_components = match (path_string_a, path_string_b) { + (Some(a), Some(b)) => natural_sort(&a, &b), + (Some(_), None) => Ordering::Greater, + (None, Some(_)) => Ordering::Less, + (None, None) => Ordering::Equal, + }; + + compare_components.then_with(|| { if a_is_file && b_is_file { let ext_a = path_a.extension().unwrap_or_default(); let ext_b = path_b.extension().unwrap_or_default(); ext_a.cmp(ext_b) } else { - cmp::Ordering::Equal + Ordering::Equal } }) }); + if !ordering.is_eq() { return ordering; } } - (Some(_), None) => break cmp::Ordering::Greater, - (None, Some(_)) => break cmp::Ordering::Less, - (None, None) => break cmp::Ordering::Equal, + (Some(_), None) => break Ordering::Greater, + (None, Some(_)) => break Ordering::Less, + (None, None) => break Ordering::Equal, } } } @@ -1049,4 +1203,335 @@ mod tests { "C:\\Users\\someone\\test_file.rs" ); } + + #[test] + fn test_compare_numeric_segments() { + // Helper function to create peekable iterators and test + fn compare(a: &str, b: &str) -> Ordering { + let mut a_iter = a.chars().peekable(); + let mut b_iter = b.chars().peekable(); + + let result = compare_numeric_segments(&mut a_iter, &mut b_iter); + + // Verify iterators advanced correctly + assert!( + !a_iter.next().map_or(false, |c| c.is_ascii_digit()), + "Iterator a should have consumed all digits" + ); + assert!( + !b_iter.next().map_or(false, |c| c.is_ascii_digit()), + "Iterator b should have consumed all digits" + ); + + result + } + + // Basic numeric comparisons + assert_eq!(compare("0", "0"), Ordering::Equal); + assert_eq!(compare("1", "2"), Ordering::Less); + assert_eq!(compare("9", "10"), Ordering::Less); + assert_eq!(compare("10", "9"), Ordering::Greater); + assert_eq!(compare("99", "100"), Ordering::Less); + + // Leading zeros + assert_eq!(compare("0", "00"), Ordering::Less); + assert_eq!(compare("00", "0"), Ordering::Greater); + assert_eq!(compare("01", "1"), Ordering::Greater); + assert_eq!(compare("001", "1"), Ordering::Greater); + assert_eq!(compare("001", "01"), Ordering::Greater); + + // Same value different representation + assert_eq!(compare("000100", "100"), Ordering::Greater); + assert_eq!(compare("100", "0100"), Ordering::Less); + assert_eq!(compare("0100", "00100"), Ordering::Less); + + // Large numbers + assert_eq!(compare("9999999999", "10000000000"), Ordering::Less); + assert_eq!( + compare( + "340282366920938463463374607431768211455", // u128::MAX + "340282366920938463463374607431768211456" + ), + Ordering::Less + ); + assert_eq!( + compare( + "340282366920938463463374607431768211456", // > u128::MAX + "340282366920938463463374607431768211455" + ), + Ordering::Greater + ); + + // Iterator advancement verification + let mut a_iter = "123abc".chars().peekable(); + let mut b_iter = "456def".chars().peekable(); + + compare_numeric_segments(&mut a_iter, &mut b_iter); + + assert_eq!(a_iter.collect::(), "abc"); + assert_eq!(b_iter.collect::(), "def"); + } + + #[test] + fn test_natural_sort() { + // Basic alphanumeric + assert_eq!(natural_sort("a", "b"), Ordering::Less); + assert_eq!(natural_sort("b", "a"), Ordering::Greater); + assert_eq!(natural_sort("a", "a"), Ordering::Equal); + + // Case sensitivity + assert_eq!(natural_sort("a", "A"), Ordering::Less); + assert_eq!(natural_sort("A", "a"), Ordering::Greater); + assert_eq!(natural_sort("aA", "aa"), Ordering::Greater); + assert_eq!(natural_sort("aa", "aA"), Ordering::Less); + + // Numbers + assert_eq!(natural_sort("1", "2"), Ordering::Less); + assert_eq!(natural_sort("2", "10"), Ordering::Less); + assert_eq!(natural_sort("02", "10"), Ordering::Less); + assert_eq!(natural_sort("02", "2"), Ordering::Greater); + + // Mixed alphanumeric + assert_eq!(natural_sort("a1", "a2"), Ordering::Less); + assert_eq!(natural_sort("a2", "a10"), Ordering::Less); + assert_eq!(natural_sort("a02", "a2"), Ordering::Greater); + assert_eq!(natural_sort("a1b", "a1c"), Ordering::Less); + + // Multiple numeric segments + assert_eq!(natural_sort("1a2", "1a10"), Ordering::Less); + assert_eq!(natural_sort("1a10", "1a2"), Ordering::Greater); + assert_eq!(natural_sort("2a1", "10a1"), Ordering::Less); + + // Special characters + assert_eq!(natural_sort("a-1", "a-2"), Ordering::Less); + assert_eq!(natural_sort("a_1", "a_2"), Ordering::Less); + assert_eq!(natural_sort("a.1", "a.2"), Ordering::Less); + + // Unicode + assert_eq!(natural_sort("文1", "文2"), Ordering::Less); + assert_eq!(natural_sort("文2", "文10"), Ordering::Less); + assert_eq!(natural_sort("🔤1", "🔤2"), Ordering::Less); + + // Empty and special cases + assert_eq!(natural_sort("", ""), Ordering::Equal); + assert_eq!(natural_sort("", "a"), Ordering::Less); + assert_eq!(natural_sort("a", ""), Ordering::Greater); + assert_eq!(natural_sort(" ", " "), Ordering::Less); + + // Mixed everything + assert_eq!(natural_sort("File-1.txt", "File-2.txt"), Ordering::Less); + assert_eq!(natural_sort("File-02.txt", "File-2.txt"), Ordering::Greater); + assert_eq!(natural_sort("File-2.txt", "File-10.txt"), Ordering::Less); + assert_eq!(natural_sort("File_A1", "File_A2"), Ordering::Less); + assert_eq!(natural_sort("File_a1", "File_A1"), Ordering::Less); + } + + #[test] + fn test_compare_paths() { + // Helper function for cleaner tests + fn compare(a: &str, is_a_file: bool, b: &str, is_b_file: bool) -> Ordering { + compare_paths((Path::new(a), is_a_file), (Path::new(b), is_b_file)) + } + + // Basic path comparison + assert_eq!(compare("a", true, "b", true), Ordering::Less); + assert_eq!(compare("b", true, "a", true), Ordering::Greater); + assert_eq!(compare("a", true, "a", true), Ordering::Equal); + + // Files vs Directories + assert_eq!(compare("a", true, "a", false), Ordering::Greater); + assert_eq!(compare("a", false, "a", true), Ordering::Less); + assert_eq!(compare("b", false, "a", true), Ordering::Less); + + // Extensions + assert_eq!(compare("a.txt", true, "a.md", true), Ordering::Greater); + assert_eq!(compare("a.md", true, "a.txt", true), Ordering::Less); + assert_eq!(compare("a", true, "a.txt", true), Ordering::Less); + + // Nested paths + assert_eq!(compare("dir/a", true, "dir/b", true), Ordering::Less); + assert_eq!(compare("dir1/a", true, "dir2/a", true), Ordering::Less); + assert_eq!(compare("dir/sub/a", true, "dir/a", true), Ordering::Less); + + // Case sensitivity in paths + assert_eq!( + compare("Dir/file", true, "dir/file", true), + Ordering::Greater + ); + assert_eq!( + compare("dir/File", true, "dir/file", true), + Ordering::Greater + ); + assert_eq!(compare("dir/file", true, "Dir/File", true), Ordering::Less); + + // Hidden files and special names + assert_eq!(compare(".hidden", true, "visible", true), Ordering::Less); + assert_eq!(compare("_special", true, "normal", true), Ordering::Less); + assert_eq!(compare(".config", false, ".data", false), Ordering::Less); + + // Mixed numeric paths + assert_eq!( + compare("dir1/file", true, "dir2/file", true), + Ordering::Less + ); + assert_eq!( + compare("dir2/file", true, "dir10/file", true), + Ordering::Less + ); + assert_eq!( + compare("dir02/file", true, "dir2/file", true), + Ordering::Greater + ); + + // Root paths + assert_eq!(compare("/a", true, "/b", true), Ordering::Less); + assert_eq!(compare("/", false, "/a", true), Ordering::Less); + + // Complex real-world examples + assert_eq!( + compare("project/src/main.rs", true, "project/src/lib.rs", true), + Ordering::Greater + ); + assert_eq!( + compare( + "project/tests/test_1.rs", + true, + "project/tests/test_2.rs", + true + ), + Ordering::Less + ); + assert_eq!( + compare( + "project/v1.0.0/README.md", + true, + "project/v1.10.0/README.md", + true + ), + Ordering::Less + ); + } + + #[test] + fn test_natural_sort_case_sensitivity() { + // Same letter different case - lowercase should come first + assert_eq!(natural_sort("a", "A"), Ordering::Less); + assert_eq!(natural_sort("A", "a"), Ordering::Greater); + assert_eq!(natural_sort("a", "a"), Ordering::Equal); + assert_eq!(natural_sort("A", "A"), Ordering::Equal); + + // Mixed case strings + assert_eq!(natural_sort("aaa", "AAA"), Ordering::Less); + assert_eq!(natural_sort("AAA", "aaa"), Ordering::Greater); + assert_eq!(natural_sort("aAa", "AaA"), Ordering::Less); + + // Different letters + assert_eq!(natural_sort("a", "b"), Ordering::Less); + assert_eq!(natural_sort("A", "b"), Ordering::Less); + assert_eq!(natural_sort("a", "B"), Ordering::Less); + } + + #[test] + fn test_natural_sort_with_numbers() { + // Basic number ordering + assert_eq!(natural_sort("file1", "file2"), Ordering::Less); + assert_eq!(natural_sort("file2", "file10"), Ordering::Less); + assert_eq!(natural_sort("file10", "file2"), Ordering::Greater); + + // Numbers in different positions + assert_eq!(natural_sort("1file", "2file"), Ordering::Less); + assert_eq!(natural_sort("file1text", "file2text"), Ordering::Less); + assert_eq!(natural_sort("text1file", "text2file"), Ordering::Less); + + // Multiple numbers in string + assert_eq!(natural_sort("file1-2", "file1-10"), Ordering::Less); + assert_eq!(natural_sort("2-1file", "10-1file"), Ordering::Less); + + // Leading zeros + assert_eq!(natural_sort("file002", "file2"), Ordering::Greater); + assert_eq!(natural_sort("file002", "file10"), Ordering::Less); + + // Very large numbers + assert_eq!( + natural_sort("file999999999999999999999", "file999999999999999999998"), + Ordering::Greater + ); + + // u128 edge cases + + // Numbers near u128::MAX (340,282,366,920,938,463,463,374,607,431,768,211,455) + assert_eq!( + natural_sort( + "file340282366920938463463374607431768211454", + "file340282366920938463463374607431768211455" + ), + Ordering::Less + ); + + // Equal length numbers that overflow u128 + assert_eq!( + natural_sort( + "file340282366920938463463374607431768211456", + "file340282366920938463463374607431768211455" + ), + Ordering::Greater + ); + + // Different length numbers that overflow u128 + assert_eq!( + natural_sort( + "file3402823669209384634633746074317682114560", + "file340282366920938463463374607431768211455" + ), + Ordering::Greater + ); + + // Leading zeros with numbers near u128::MAX + assert_eq!( + natural_sort( + "file0340282366920938463463374607431768211455", + "file340282366920938463463374607431768211455" + ), + Ordering::Greater + ); + + // Very large numbers with different lengths (both overflow u128) + assert_eq!( + natural_sort( + "file999999999999999999999999999999999999999999999999", + "file9999999999999999999999999999999999999999999999999" + ), + Ordering::Less + ); + + // Mixed case with numbers + assert_eq!(natural_sort("File1", "file2"), Ordering::Greater); + assert_eq!(natural_sort("file1", "File2"), Ordering::Less); + } + + #[test] + fn test_natural_sort_edge_cases() { + // Empty strings + assert_eq!(natural_sort("", ""), Ordering::Equal); + assert_eq!(natural_sort("", "a"), Ordering::Less); + assert_eq!(natural_sort("a", ""), Ordering::Greater); + + // Special characters + assert_eq!(natural_sort("file-1", "file_1"), Ordering::Less); + assert_eq!(natural_sort("file.1", "file_1"), Ordering::Less); + assert_eq!(natural_sort("file 1", "file_1"), Ordering::Less); + + // Unicode characters + // 9312 vs 9313 + assert_eq!(natural_sort("file①", "file②"), Ordering::Less); + // 9321 vs 9313 + assert_eq!(natural_sort("file⑩", "file②"), Ordering::Greater); + // 28450 vs 23383 + assert_eq!(natural_sort("file漢", "file字"), Ordering::Greater); + + // Mixed alphanumeric with special chars + assert_eq!(natural_sort("file-1a", "file-1b"), Ordering::Less); + assert_eq!(natural_sort("file-1.2", "file-1.10"), Ordering::Less); + assert_eq!(natural_sort("file-1.10", "file-1.2"), Ordering::Greater); + } } From 32f9de612449d4aee68e28ffe1373e26a84516ca Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 13 Aug 2025 17:01:17 -0700 Subject: [PATCH 30/74] Add grid support to GPUI (#36153) Release Notes: - N/A --------- Co-authored-by: Anthony --- crates/gpui/Cargo.toml | 4 + crates/gpui/examples/grid_layout.rs | 80 ++++++++++++++++++++ crates/gpui/src/geometry.rs | 33 +++++++++ crates/gpui/src/style.rs | 23 +++++- crates/gpui/src/styled.rs | 109 +++++++++++++++++++++++++++- crates/gpui/src/taffy.rs | 35 ++++++++- 6 files changed, 278 insertions(+), 6 deletions(-) create mode 100644 crates/gpui/examples/grid_layout.rs diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index 6e5a76d441..d720dfb2a1 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -305,3 +305,7 @@ path = "examples/uniform_list.rs" [[example]] name = "window_shadow" path = "examples/window_shadow.rs" + +[[example]] +name = "grid_layout" +path = "examples/grid_layout.rs" diff --git a/crates/gpui/examples/grid_layout.rs b/crates/gpui/examples/grid_layout.rs new file mode 100644 index 0000000000..f285497578 --- /dev/null +++ b/crates/gpui/examples/grid_layout.rs @@ -0,0 +1,80 @@ +use gpui::{ + App, Application, Bounds, Context, Hsla, Window, WindowBounds, WindowOptions, div, prelude::*, + px, rgb, size, +}; + +// https://en.wikipedia.org/wiki/Holy_grail_(web_design) +struct HolyGrailExample {} + +impl Render for HolyGrailExample { + fn render(&mut self, _window: &mut Window, _cx: &mut Context) -> impl IntoElement { + let block = |color: Hsla| { + div() + .size_full() + .bg(color) + .border_1() + .border_dashed() + .rounded_md() + .border_color(gpui::white()) + .items_center() + }; + + div() + .gap_1() + .grid() + .bg(rgb(0x505050)) + .size(px(500.0)) + .shadow_lg() + .border_1() + .size_full() + .grid_cols(5) + .grid_rows(5) + .child( + block(gpui::white()) + .row_span(1) + .col_span_full() + .child("Header"), + ) + .child( + block(gpui::red()) + .col_span(1) + .h_56() + .child("Table of contents"), + ) + .child( + block(gpui::green()) + .col_span(3) + .row_span(3) + .child("Content"), + ) + .child( + block(gpui::blue()) + .col_span(1) + .row_span(3) + .child("AD :(") + .text_color(gpui::white()), + ) + .child( + block(gpui::black()) + .row_span(1) + .col_span_full() + .text_color(gpui::white()) + .child("Footer"), + ) + } +} + +fn main() { + Application::new().run(|cx: &mut App| { + let bounds = Bounds::centered(None, size(px(500.), px(500.0)), cx); + cx.open_window( + WindowOptions { + window_bounds: Some(WindowBounds::Windowed(bounds)), + ..Default::default() + }, + |_, cx| cx.new(|_| HolyGrailExample {}), + ) + .unwrap(); + cx.activate(true); + }); +} diff --git a/crates/gpui/src/geometry.rs b/crates/gpui/src/geometry.rs index 3d2d9cd9db..2de3e23ff7 100644 --- a/crates/gpui/src/geometry.rs +++ b/crates/gpui/src/geometry.rs @@ -9,12 +9,14 @@ use refineable::Refineable; use schemars::{JsonSchema, json_schema}; use serde::{Deserialize, Deserializer, Serialize, Serializer, de}; use std::borrow::Cow; +use std::ops::Range; use std::{ cmp::{self, PartialOrd}, fmt::{self, Display}, hash::Hash, ops::{Add, Div, Mul, MulAssign, Neg, Sub}, }; +use taffy::prelude::{TaffyGridLine, TaffyGridSpan}; use crate::{App, DisplayId}; @@ -3608,6 +3610,37 @@ impl From<()> for Length { } } +/// A location in a grid layout. +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize, JsonSchema, Default)] +pub struct GridLocation { + /// The rows this item uses within the grid. + pub row: Range, + /// The columns this item uses within the grid. + pub column: Range, +} + +/// The placement of an item within a grid layout's column or row. +#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize, JsonSchema, Default)] +pub enum GridPlacement { + /// The grid line index to place this item. + Line(i16), + /// The number of grid lines to span. + Span(u16), + /// Automatically determine the placement, equivalent to Span(1) + #[default] + Auto, +} + +impl From for taffy::GridPlacement { + fn from(placement: GridPlacement) -> Self { + match placement { + GridPlacement::Line(index) => taffy::GridPlacement::from_line_index(index), + GridPlacement::Span(span) => taffy::GridPlacement::from_span(span), + GridPlacement::Auto => taffy::GridPlacement::Auto, + } + } +} + /// Provides a trait for types that can calculate half of their value. /// /// The `Half` trait is used for types that can be evenly divided, returning a new instance of the same type diff --git a/crates/gpui/src/style.rs b/crates/gpui/src/style.rs index 560de7b924..09985722ef 100644 --- a/crates/gpui/src/style.rs +++ b/crates/gpui/src/style.rs @@ -7,7 +7,7 @@ use std::{ use crate::{ AbsoluteLength, App, Background, BackgroundTag, BorderStyle, Bounds, ContentMask, Corners, CornersRefinement, CursorStyle, DefiniteLength, DevicePixels, Edges, EdgesRefinement, Font, - FontFallbacks, FontFeatures, FontStyle, FontWeight, Hsla, Length, Pixels, Point, + FontFallbacks, FontFeatures, FontStyle, FontWeight, GridLocation, Hsla, Length, Pixels, Point, PointRefinement, Rgba, SharedString, Size, SizeRefinement, Styled, TextRun, Window, black, phi, point, quad, rems, size, }; @@ -260,6 +260,17 @@ pub struct Style { /// The opacity of this element pub opacity: Option, + /// The grid columns of this element + /// Equivalent to the Tailwind `grid-cols-` + pub grid_cols: Option, + + /// The row span of this element + /// Equivalent to the Tailwind `grid-rows-` + pub grid_rows: Option, + + /// The grid location of this element + pub grid_location: Option, + /// Whether to draw a red debugging outline around this element #[cfg(debug_assertions)] pub debug: bool, @@ -275,6 +286,13 @@ impl Styled for StyleRefinement { } } +impl StyleRefinement { + /// The grid location of this element + pub fn grid_location_mut(&mut self) -> &mut GridLocation { + self.grid_location.get_or_insert_default() + } +} + /// The value of the visibility property, similar to the CSS property `visibility` #[derive(Default, Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, JsonSchema)] pub enum Visibility { @@ -757,6 +775,9 @@ impl Default for Style { text: TextStyleRefinement::default(), mouse_cursor: None, opacity: None, + grid_rows: None, + grid_cols: None, + grid_location: None, #[cfg(debug_assertions)] debug: false, diff --git a/crates/gpui/src/styled.rs b/crates/gpui/src/styled.rs index b689f32687..c714cac14f 100644 --- a/crates/gpui/src/styled.rs +++ b/crates/gpui/src/styled.rs @@ -1,8 +1,8 @@ use crate::{ self as gpui, AbsoluteLength, AlignContent, AlignItems, BorderStyle, CursorStyle, - DefiniteLength, Display, Fill, FlexDirection, FlexWrap, Font, FontStyle, FontWeight, Hsla, - JustifyContent, Length, SharedString, StrikethroughStyle, StyleRefinement, TextAlign, - TextOverflow, TextStyleRefinement, UnderlineStyle, WhiteSpace, px, relative, rems, + DefiniteLength, Display, Fill, FlexDirection, FlexWrap, Font, FontStyle, FontWeight, + GridPlacement, Hsla, JustifyContent, Length, SharedString, StrikethroughStyle, StyleRefinement, + TextAlign, TextOverflow, TextStyleRefinement, UnderlineStyle, WhiteSpace, px, relative, rems, }; pub use gpui_macros::{ border_style_methods, box_shadow_style_methods, cursor_style_methods, margin_style_methods, @@ -46,6 +46,13 @@ pub trait Styled: Sized { self } + /// Sets the display type of the element to `grid`. + /// [Docs](https://tailwindcss.com/docs/display) + fn grid(mut self) -> Self { + self.style().display = Some(Display::Grid); + self + } + /// Sets the whitespace of the element to `normal`. /// [Docs](https://tailwindcss.com/docs/whitespace#normal) fn whitespace_normal(mut self) -> Self { @@ -640,6 +647,102 @@ pub trait Styled: Sized { self } + /// Sets the grid columns of this element. + fn grid_cols(mut self, cols: u16) -> Self { + self.style().grid_cols = Some(cols); + self + } + + /// Sets the grid rows of this element. + fn grid_rows(mut self, rows: u16) -> Self { + self.style().grid_rows = Some(rows); + self + } + + /// Sets the column start of this element. + fn col_start(mut self, start: i16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column.start = GridPlacement::Line(start); + self + } + + /// Sets the column start of this element to auto. + fn col_start_auto(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column.start = GridPlacement::Auto; + self + } + + /// Sets the column end of this element. + fn col_end(mut self, end: i16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column.end = GridPlacement::Line(end); + self + } + + /// Sets the column end of this element to auto. + fn col_end_auto(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column.end = GridPlacement::Auto; + self + } + + /// Sets the column span of this element. + fn col_span(mut self, span: u16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column = GridPlacement::Span(span)..GridPlacement::Span(span); + self + } + + /// Sets the row span of this element. + fn col_span_full(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.column = GridPlacement::Line(1)..GridPlacement::Line(-1); + self + } + + /// Sets the row start of this element. + fn row_start(mut self, start: i16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row.start = GridPlacement::Line(start); + self + } + + /// Sets the row start of this element to "auto" + fn row_start_auto(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row.start = GridPlacement::Auto; + self + } + + /// Sets the row end of this element. + fn row_end(mut self, end: i16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row.end = GridPlacement::Line(end); + self + } + + /// Sets the row end of this element to "auto" + fn row_end_auto(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row.end = GridPlacement::Auto; + self + } + + /// Sets the row span of this element. + fn row_span(mut self, span: u16) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row = GridPlacement::Span(span)..GridPlacement::Span(span); + self + } + + /// Sets the row span of this element. + fn row_span_full(mut self) -> Self { + let grid_location = self.style().grid_location_mut(); + grid_location.row = GridPlacement::Line(1)..GridPlacement::Line(-1); + self + } + /// Draws a debug border around this element. #[cfg(debug_assertions)] fn debug(mut self) -> Self { diff --git a/crates/gpui/src/taffy.rs b/crates/gpui/src/taffy.rs index f7fa54256d..ee21ecd8c4 100644 --- a/crates/gpui/src/taffy.rs +++ b/crates/gpui/src/taffy.rs @@ -3,7 +3,7 @@ use crate::{ }; use collections::{FxHashMap, FxHashSet}; use smallvec::SmallVec; -use std::fmt::Debug; +use std::{fmt::Debug, ops::Range}; use taffy::{ TaffyTree, TraversePartialTree as _, geometry::{Point as TaffyPoint, Rect as TaffyRect, Size as TaffySize}, @@ -251,6 +251,25 @@ trait ToTaffy { impl ToTaffy for Style { fn to_taffy(&self, rem_size: Pixels) -> taffy::style::Style { + use taffy::style_helpers::{fr, length, minmax, repeat}; + + fn to_grid_line( + placement: &Range, + ) -> taffy::Line { + taffy::Line { + start: placement.start.into(), + end: placement.end.into(), + } + } + + fn to_grid_repeat( + unit: &Option, + ) -> Vec> { + // grid-template-columns: repeat(, minmax(0, 1fr)); + unit.map(|count| vec![repeat(count, vec![minmax(length(0.0), fr(1.0))])]) + .unwrap_or_default() + } + taffy::style::Style { display: self.display.into(), overflow: self.overflow.into(), @@ -274,7 +293,19 @@ impl ToTaffy for Style { flex_basis: self.flex_basis.to_taffy(rem_size), flex_grow: self.flex_grow, flex_shrink: self.flex_shrink, - ..Default::default() // Ignore grid properties for now + grid_template_rows: to_grid_repeat(&self.grid_rows), + grid_template_columns: to_grid_repeat(&self.grid_cols), + grid_row: self + .grid_location + .as_ref() + .map(|location| to_grid_line(&location.row)) + .unwrap_or_default(), + grid_column: self + .grid_location + .as_ref() + .map(|location| to_grid_line(&location.column)) + .unwrap_or_default(), + ..Default::default() } } } From 5a6df38ccf61ac6196d56644e53e1909c11ff16a Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Thu, 14 Aug 2025 07:11:53 +0300 Subject: [PATCH 31/74] docs: Add example of controlling reasoning effort (#36135) Release Notes: - N/A --- docs/src/ai/llm-providers.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/ai/llm-providers.md b/docs/src/ai/llm-providers.md index 21ff2a8a51..58c9230760 100644 --- a/docs/src/ai/llm-providers.md +++ b/docs/src/ai/llm-providers.md @@ -392,26 +392,26 @@ Zed will also use the `OPENAI_API_KEY` environment variable if it's defined. #### Custom Models {#openai-custom-models} The Zed agent comes pre-configured to use the latest version for common models (GPT-5, GPT-5 mini, o4-mini, GPT-4.1, and others). -To use alternate models, perhaps a preview release or a dated model release, or if you wish to control the request parameters, you can do so by adding the following to your Zed `settings.json`: +To use alternate models, perhaps a preview release, or if you wish to control the request parameters, you can do so by adding the following to your Zed `settings.json`: ```json { "language_models": { "openai": { "available_models": [ + { + "name": "gpt-5", + "display_name": "gpt-5 high", + "reasoning_effort": "high", + "max_tokens": 272000, + "max_completion_tokens": 20000 + }, { "name": "gpt-4o-2024-08-06", "display_name": "GPT 4o Summer 2024", "max_tokens": 128000 - }, - { - "name": "o1-mini", - "display_name": "o1-mini", - "max_tokens": 128000, - "max_completion_tokens": 20000 } - ], - "version": "1" + ] } } } From ab9fa03d55fc52cc0afdde7fe6b5f063ce12ce92 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 13 Aug 2025 22:24:47 -0600 Subject: [PATCH 32/74] UI for checkpointing (#36124) Co-authored-by: Antonio Scandurra Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra --- crates/agent_ui/src/acp/thread_view.rs | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 3aefae7265..5f67dc15b8 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -1,6 +1,6 @@ use acp_thread::{ AcpThread, AcpThreadEvent, AgentThreadEntry, AssistantMessage, AssistantMessageChunk, - LoadError, MentionUri, ThreadStatus, ToolCall, ToolCallContent, ToolCallStatus, + LoadError, MentionUri, ThreadStatus, ToolCall, ToolCallContent, ToolCallStatus, UserMessageId, }; use acp_thread::{AgentConnection, Plan}; use action_log::ActionLog; @@ -921,6 +921,16 @@ impl AcpThreadView { cx.notify(); } + fn rewind(&mut self, message_id: &UserMessageId, cx: &mut Context) { + let Some(thread) = self.thread() else { + return; + }; + thread + .update(cx, |thread, cx| thread.rewind(message_id.clone(), cx)) + .detach_and_log_err(cx); + cx.notify(); + } + fn render_entry( &self, index: usize, @@ -931,8 +941,23 @@ impl AcpThreadView { ) -> AnyElement { let primary = match &entry { AgentThreadEntry::UserMessage(message) => div() + .id(("user_message", index)) .py_4() .px_2() + .children(message.id.clone().and_then(|message_id| { + message.checkpoint.as_ref()?; + + Some( + Button::new("restore-checkpoint", "Restore Checkpoint") + .icon(IconName::Undo) + .icon_size(IconSize::XSmall) + .icon_position(IconPosition::Start) + .label_size(LabelSize::XSmall) + .on_click(cx.listener(move |this, _, _window, cx| { + this.rewind(&message_id, cx); + })), + ) + })) .child( v_flex() .p_3() From 5bbdd1a262732ceb195de65988fd7126d632b271 Mon Sep 17 00:00:00 2001 From: Maksim Bondarenkov <119937608+ognevny@users.noreply.github.com> Date: Thu, 14 Aug 2025 13:02:52 +0700 Subject: [PATCH 33/74] docs: Update information in MSYS2 section (#36158) - we are about to drop Zed for MINGW64 because `crash-handler` uses a symbol which is not presented in `msvcrt.dll` - mention MSYS2 docs page and CLANGARM64 environment Release Notes: - N/A --- docs/src/development/windows.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/development/windows.md b/docs/src/development/windows.md index ac38e4d7d6..551d5f9f21 100644 --- a/docs/src/development/windows.md +++ b/docs/src/development/windows.md @@ -114,19 +114,19 @@ cargo test --workspace ## Installing from msys2 -[MSYS2](https://msys2.org/) distribution provides Zed as a package [mingw-w64-zed](https://packages.msys2.org/base/mingw-w64-zed). The package is available for UCRT64, MINGW64 and CLANG64 repositories. To download it, run +[MSYS2](https://msys2.org/) distribution provides Zed as a package [mingw-w64-zed](https://packages.msys2.org/base/mingw-w64-zed). The package is available for UCRT64, CLANG64 and CLANGARM64 repositories. To download it, run ```sh pacman -Syu pacman -S $MINGW_PACKAGE_PREFIX-zed ``` -then you can run `zeditor` CLI. Editor executable is installed under `$MINGW_PREFIX/lib/zed` directory - You can see the [build script](https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-zed/PKGBUILD) for more details on build process. > Please, report any issue in [msys2/MINGW-packages/issues](https://github.com/msys2/MINGW-packages/issues?q=is%3Aissue+is%3Aopen+zed) first. +See also MSYS2 [documentation page](https://www.msys2.org/docs/ides-editors). + Note that `collab` is not supported for MSYS2. ## Troubleshooting From 0291db0d78d751bff518a49974b14ab6cf146a1a Mon Sep 17 00:00:00 2001 From: Alvaro Parker <64918109+AlvaroParker@users.noreply.github.com> Date: Thu, 14 Aug 2025 02:10:38 -0400 Subject: [PATCH 34/74] git: Add handler to get default branch on remote (#36157) Closes #36150 Release Notes: - Fixed `git: branch` action not worked with ssh workflow --- crates/project/src/git_store.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/project/src/git_store.rs b/crates/project/src/git_store.rs index 5d48c833ab..32deb0dbc4 100644 --- a/crates/project/src/git_store.rs +++ b/crates/project/src/git_store.rs @@ -414,6 +414,7 @@ impl GitStore { pub fn init(client: &AnyProtoClient) { client.add_entity_request_handler(Self::handle_get_remotes); client.add_entity_request_handler(Self::handle_get_branches); + client.add_entity_request_handler(Self::handle_get_default_branch); client.add_entity_request_handler(Self::handle_change_branch); client.add_entity_request_handler(Self::handle_create_branch); client.add_entity_request_handler(Self::handle_git_init); @@ -1894,6 +1895,23 @@ impl GitStore { .collect::>(), }) } + async fn handle_get_default_branch( + this: Entity, + envelope: TypedEnvelope, + mut cx: AsyncApp, + ) -> Result { + let repository_id = RepositoryId::from_proto(envelope.payload.repository_id); + let repository_handle = Self::repository_for_request(&this, repository_id, &mut cx)?; + + let branch = repository_handle + .update(&mut cx, |repository_handle, _| { + repository_handle.default_branch() + })? + .await?? + .map(Into::into); + + Ok(proto::GetDefaultBranchResponse { branch }) + } async fn handle_create_branch( this: Entity, envelope: TypedEnvelope, From 8e4f30abcb83ab5ca920f8d545adbe15aaf4053a Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Aug 2025 10:16:25 +0200 Subject: [PATCH 35/74] project: Print error causes when failing to spawn lsp command (#36163) cc https://github.com/zed-industries/zed/issues/34666 Display printing anyhow errors only renders the error itself, but not any of its causes so we've been dropping the important context when showing the issue to the users. Release Notes: - N/A --- crates/lsp/src/lsp.rs | 4 ++-- crates/project/src/lsp_store.rs | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 22a227c231..ce9e2fe229 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -318,6 +318,8 @@ impl LanguageServer { } else { root_path.parent().unwrap_or_else(|| Path::new("/")) }; + let root_uri = Url::from_file_path(&working_dir) + .map_err(|()| anyhow!("{working_dir:?} is not a valid URI"))?; log::info!( "starting language server process. binary path: {:?}, working directory: {:?}, args: {:?}", @@ -345,8 +347,6 @@ impl LanguageServer { let stdin = server.stdin.take().unwrap(); let stdout = server.stdout.take().unwrap(); let stderr = server.stderr.take().unwrap(); - let root_uri = Url::from_file_path(&working_dir) - .map_err(|()| anyhow!("{working_dir:?} is not a valid URI"))?; let server = Self::new_internal( server_id, server_name, diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 827341d60d..60d847023f 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -390,13 +390,17 @@ impl LocalLspStore { delegate.update_status( adapter.name(), BinaryStatus::Failed { - error: format!("{err}\n-- stderr--\n{log}"), + error: if log.is_empty() { + format!("{err:#}") + } else { + format!("{err:#}\n-- stderr --\n{log}") + }, }, ); - let message = - format!("Failed to start language server {server_name:?}: {err:#?}"); - log::error!("{message}"); - log::error!("server stderr: {log}"); + log::error!("Failed to start language server {server_name:?}: {err:?}"); + if !log.is_empty() { + log::error!("server stderr: {log}"); + } None } } From b3d048d6dcc60060f194d3402317397ccd84d561 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Aug 2025 11:11:27 +0200 Subject: [PATCH 36/74] Add back `DeletePathTool` to agent2 (#36168) This was probably removed accidentally as a result of a merge conflict. Release Notes: - N/A --- crates/agent2/src/agent.rs | 28 ++++----- crates/agent2/src/thread.rs | 109 ++++++++++++++---------------------- 2 files changed, 57 insertions(+), 80 deletions(-) diff --git a/crates/agent2/src/agent.rs b/crates/agent2/src/agent.rs index ced8c5e401..6ebcece2b5 100644 --- a/crates/agent2/src/agent.rs +++ b/crates/agent2/src/agent.rs @@ -1,8 +1,8 @@ use crate::{AgentResponseEvent, Thread, templates::Templates}; use crate::{ - ContextServerRegistry, CopyPathTool, CreateDirectoryTool, DiagnosticsTool, EditFileTool, - FetchTool, FindPathTool, GrepTool, ListDirectoryTool, MovePathTool, NowTool, OpenTool, - ReadFileTool, TerminalTool, ThinkingTool, ToolCallAuthorization, UserMessageContent, + ContextServerRegistry, CopyPathTool, CreateDirectoryTool, DeletePathTool, DiagnosticsTool, + EditFileTool, FetchTool, FindPathTool, GrepTool, ListDirectoryTool, MovePathTool, NowTool, + OpenTool, ReadFileTool, TerminalTool, ThinkingTool, ToolCallAuthorization, UserMessageContent, WebSearchTool, }; use acp_thread::AgentModelSelector; @@ -583,22 +583,22 @@ impl acp_thread::AgentConnection for NativeAgentConnection { default_model, cx, ); - thread.add_tool(CreateDirectoryTool::new(project.clone())); thread.add_tool(CopyPathTool::new(project.clone())); + thread.add_tool(CreateDirectoryTool::new(project.clone())); + thread.add_tool(DeletePathTool::new(project.clone(), action_log.clone())); thread.add_tool(DiagnosticsTool::new(project.clone())); - thread.add_tool(MovePathTool::new(project.clone())); - thread.add_tool(ListDirectoryTool::new(project.clone())); - thread.add_tool(OpenTool::new(project.clone())); - thread.add_tool(ThinkingTool); - thread.add_tool(FindPathTool::new(project.clone())); - thread.add_tool(FetchTool::new(project.read(cx).client().http_client())); - thread.add_tool(GrepTool::new(project.clone())); - thread.add_tool(ReadFileTool::new(project.clone(), action_log)); thread.add_tool(EditFileTool::new(cx.entity())); + thread.add_tool(FetchTool::new(project.read(cx).client().http_client())); + thread.add_tool(FindPathTool::new(project.clone())); + thread.add_tool(GrepTool::new(project.clone())); + thread.add_tool(ListDirectoryTool::new(project.clone())); + thread.add_tool(MovePathTool::new(project.clone())); thread.add_tool(NowTool); + thread.add_tool(OpenTool::new(project.clone())); + thread.add_tool(ReadFileTool::new(project.clone(), action_log)); thread.add_tool(TerminalTool::new(project.clone(), cx)); - // TODO: Needs to be conditional based on zed model or not - thread.add_tool(WebSearchTool); + thread.add_tool(ThinkingTool); + thread.add_tool(WebSearchTool); // TODO: Enable this only if it's a zed model. thread }); diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index b48f9001ac..4156ec44d2 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -411,7 +411,7 @@ pub struct Thread { /// Survives across multiple requests as the model performs tool calls and /// we run tools, report their results. running_turn: Option>, - pending_agent_message: Option, + pending_message: Option, tools: BTreeMap>, context_server_registry: Entity, profile_id: AgentProfileId, @@ -437,7 +437,7 @@ impl Thread { messages: Vec::new(), completion_mode: CompletionMode::Normal, running_turn: None, - pending_agent_message: None, + pending_message: None, tools: BTreeMap::default(), context_server_registry, profile_id, @@ -463,7 +463,7 @@ impl Thread { #[cfg(any(test, feature = "test-support"))] pub fn last_message(&self) -> Option { - if let Some(message) = self.pending_agent_message.clone() { + if let Some(message) = self.pending_message.clone() { Some(Message::Agent(message)) } else { self.messages.last().cloned() @@ -485,7 +485,7 @@ impl Thread { pub fn cancel(&mut self) { // TODO: do we need to emit a stop::cancel for ACP? self.running_turn.take(); - self.flush_pending_agent_message(); + self.flush_pending_message(); } pub fn truncate(&mut self, message_id: UserMessageId) -> Result<()> { @@ -521,74 +521,58 @@ impl Thread { mpsc::unbounded::>(); let event_stream = AgentResponseEventStream(events_tx); - let user_message_ix = self.messages.len(); self.messages.push(Message::User(UserMessage { - id: message_id, + id: message_id.clone(), content, })); log::info!("Total messages in thread: {}", self.messages.len()); - self.running_turn = Some(cx.spawn(async move |thread, cx| { + self.running_turn = Some(cx.spawn(async move |this, cx| { log::info!("Starting agent turn execution"); let turn_result = async { - // Perform one request, then keep looping if the model makes tool calls. let mut completion_intent = CompletionIntent::UserPrompt; - 'outer: loop { + loop { log::debug!( "Building completion request with intent: {:?}", completion_intent ); - let request = thread.update(cx, |thread, cx| { - thread.build_completion_request(completion_intent, cx) + let request = this.update(cx, |this, cx| { + this.build_completion_request(completion_intent, cx) })?; - // Stream events, appending to messages and collecting up tool uses. log::info!("Calling model.stream_completion"); let mut events = model.stream_completion(request, cx).await?; log::debug!("Stream completion started successfully"); let mut tool_uses = FuturesUnordered::new(); while let Some(event) = events.next().await { - match event { - Ok(LanguageModelCompletionEvent::Stop(reason)) => { + match event? { + LanguageModelCompletionEvent::Stop(reason) => { event_stream.send_stop(reason); if reason == StopReason::Refusal { - thread.update(cx, |thread, _cx| { - thread.pending_agent_message = None; - thread.messages.truncate(user_message_ix); - })?; - break 'outer; + this.update(cx, |this, _cx| this.truncate(message_id))??; + return Ok(()); } } - Ok(event) => { + event => { log::trace!("Received completion event: {:?}", event); - thread - .update(cx, |thread, cx| { - tool_uses.extend(thread.handle_streamed_completion_event( - event, - &event_stream, - cx, - )); - }) - .ok(); - } - Err(error) => { - log::error!("Error in completion stream: {:?}", error); - event_stream.send_error(error); - break; + this.update(cx, |this, cx| { + tool_uses.extend(this.handle_streamed_completion_event( + event, + &event_stream, + cx, + )); + }) + .ok(); } } } - // If there are no tool uses, the turn is done. if tool_uses.is_empty() { log::info!("No tool uses found, completing turn"); - break; + return Ok(()); } log::info!("Found {} tool uses to execute", tool_uses.len()); - // As tool results trickle in, insert them in the last user - // message so that they can be sent on the next tick of the - // agentic loop. while let Some(tool_result) = tool_uses.next().await { log::info!("Tool finished {:?}", tool_result); @@ -604,29 +588,21 @@ impl Thread { ..Default::default() }, ); - thread - .update(cx, |thread, _cx| { - thread - .pending_agent_message() - .tool_results - .insert(tool_result.tool_use_id.clone(), tool_result); - }) - .ok(); + this.update(cx, |this, _cx| { + this.pending_message() + .tool_results + .insert(tool_result.tool_use_id.clone(), tool_result); + }) + .ok(); } - thread.update(cx, |thread, _cx| thread.flush_pending_agent_message())?; - + this.update(cx, |this, _| this.flush_pending_message())?; completion_intent = CompletionIntent::ToolResults; } - - Ok(()) } .await; - thread - .update(cx, |thread, _cx| thread.flush_pending_agent_message()) - .ok(); - + this.update(cx, |this, _| this.flush_pending_message()).ok(); if let Err(error) = turn_result { log::error!("Turn execution failed: {:?}", error); event_stream.send_error(error); @@ -668,7 +644,8 @@ impl Thread { match event { StartMessage { .. } => { - self.messages.push(Message::Agent(AgentMessage::default())); + self.flush_pending_message(); + self.pending_message = Some(AgentMessage::default()); } Text(new_text) => self.handle_text_event(new_text, event_stream, cx), Thinking { text, signature } => { @@ -706,7 +683,7 @@ impl Thread { ) { events_stream.send_text(&new_text); - let last_message = self.pending_agent_message(); + let last_message = self.pending_message(); if let Some(AgentMessageContent::Text(text)) = last_message.content.last_mut() { text.push_str(&new_text); } else { @@ -727,7 +704,7 @@ impl Thread { ) { event_stream.send_thinking(&new_text); - let last_message = self.pending_agent_message(); + let last_message = self.pending_message(); if let Some(AgentMessageContent::Thinking { text, signature }) = last_message.content.last_mut() { @@ -744,7 +721,7 @@ impl Thread { } fn handle_redacted_thinking_event(&mut self, data: String, cx: &mut Context) { - let last_message = self.pending_agent_message(); + let last_message = self.pending_message(); last_message .content .push(AgentMessageContent::RedactedThinking(data)); @@ -768,7 +745,7 @@ impl Thread { } // Ensure the last message ends in the current tool use - let last_message = self.pending_agent_message(); + let last_message = self.pending_message(); let push_new_tool_use = last_message.content.last_mut().map_or(true, |content| { if let AgentMessageContent::ToolUse(last_tool_use) = content { if last_tool_use.id == tool_use.id { @@ -871,12 +848,12 @@ impl Thread { } } - fn pending_agent_message(&mut self) -> &mut AgentMessage { - self.pending_agent_message.get_or_insert_default() + fn pending_message(&mut self) -> &mut AgentMessage { + self.pending_message.get_or_insert_default() } - fn flush_pending_agent_message(&mut self) { - let Some(mut message) = self.pending_agent_message.take() else { + fn flush_pending_message(&mut self) { + let Some(mut message) = self.pending_message.take() else { return; }; @@ -997,7 +974,7 @@ impl Thread { } } - if let Some(message) = self.pending_agent_message.as_ref() { + if let Some(message) = self.pending_message.as_ref() { messages.extend(message.to_request()); } @@ -1013,7 +990,7 @@ impl Thread { markdown.push_str(&message.to_markdown()); } - if let Some(message) = self.pending_agent_message.as_ref() { + if let Some(message) = self.pending_message.as_ref() { markdown.push('\n'); markdown.push_str(&message.to_markdown()); } From ffac8c512858789158d3c52d2cd50bca3a904f54 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Aug 2025 11:11:46 +0200 Subject: [PATCH 37/74] editor: Render all targets in go to def multbuffer title (#36167) Release Notes: - N/A --- crates/editor/src/editor.rs | 44 +++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index c77262143d..cbee9021ed 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -15842,19 +15842,23 @@ impl Editor { let tab_kind = match kind { Some(GotoDefinitionKind::Implementation) => "Implementations", - _ => "Definitions", + Some(GotoDefinitionKind::Symbol) | None => "Definitions", + Some(GotoDefinitionKind::Declaration) => "Declarations", + Some(GotoDefinitionKind::Type) => "Types", }; let title = editor .update_in(acx, |_, _, cx| { - let origin = locations.first().unwrap(); - let buffer = origin.buffer.read(cx); - format!( - "{} for {}", - tab_kind, - buffer - .text_for_range(origin.range.clone()) - .collect::() - ) + let target = locations + .iter() + .map(|location| { + location + .buffer + .read(cx) + .text_for_range(location.range.clone()) + .collect::() + }) + .join(", "); + format!("{tab_kind} for {target}") }) .context("buffer title")?; @@ -16050,19 +16054,17 @@ impl Editor { } workspace.update_in(cx, |workspace, window, cx| { - let title = locations - .first() - .as_ref() + let target = locations + .iter() .map(|location| { - let buffer = location.buffer.read(cx); - format!( - "References to `{}`", - buffer - .text_for_range(location.range.clone()) - .collect::() - ) + location + .buffer + .read(cx) + .text_for_range(location.range.clone()) + .collect::() }) - .unwrap(); + .join(", "); + let title = format!("References to {target}"); Self::open_locations_in_multibuffer( workspace, locations, From e5402d546414a19112a2a0c4c3046bb414a3ec68 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 14 Aug 2025 07:39:33 -0600 Subject: [PATCH 38/74] Allow editing Agent2 messages (#36155) Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra Co-authored-by: Agus Zubiaga --- Cargo.lock | 1 + assets/keymaps/default-linux.json | 2 - assets/keymaps/default-macos.json | 2 - crates/acp_thread/Cargo.toml | 1 + crates/acp_thread/src/acp_thread.rs | 15 +- crates/acp_thread/src/mention.rs | 94 ++- crates/agent2/src/thread.rs | 4 +- crates/agent_ui/src/acp.rs | 3 +- .../agent_ui/src/acp/completion_provider.rs | 113 +-- crates/agent_ui/src/acp/message_editor.rs | 469 +++++++++++ crates/agent_ui/src/acp/message_history.rs | 88 -- crates/agent_ui/src/acp/thread_view.rs | 766 +++++++----------- crates/agent_ui/src/agent_panel.rs | 15 +- crates/zed_actions/src/lib.rs | 4 - 14 files changed, 956 insertions(+), 621 deletions(-) create mode 100644 crates/agent_ui/src/acp/message_editor.rs delete mode 100644 crates/agent_ui/src/acp/message_history.rs diff --git a/Cargo.lock b/Cargo.lock index f0fd3049c0..cb087f43b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,7 @@ dependencies = [ "collections", "editor", "env_logger 0.11.8", + "file_icons", "futures 0.3.31", "gpui", "indoc", diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index dda26f406b..01c0b4e969 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -331,8 +331,6 @@ "use_key_equivalents": true, "bindings": { "enter": "agent::Chat", - "up": "agent::PreviousHistoryMessage", - "down": "agent::NextHistoryMessage", "shift-ctrl-r": "agent::OpenAgentDiff", "ctrl-shift-y": "agent::KeepAll", "ctrl-shift-n": "agent::RejectAll" diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index 3966efd8df..e5b7fff9e1 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -383,8 +383,6 @@ "use_key_equivalents": true, "bindings": { "enter": "agent::Chat", - "up": "agent::PreviousHistoryMessage", - "down": "agent::NextHistoryMessage", "shift-ctrl-r": "agent::OpenAgentDiff", "cmd-shift-y": "agent::KeepAll", "cmd-shift-n": "agent::RejectAll" diff --git a/crates/acp_thread/Cargo.toml b/crates/acp_thread/Cargo.toml index 2ac15de08f..2d0fe2d264 100644 --- a/crates/acp_thread/Cargo.toml +++ b/crates/acp_thread/Cargo.toml @@ -23,6 +23,7 @@ anyhow.workspace = true buffer_diff.workspace = true collections.workspace = true editor.workspace = true +file_icons.workspace = true futures.workspace = true gpui.workspace = true itertools.workspace = true diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index a5b512f31a..da4d82712a 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -32,6 +32,7 @@ use util::ResultExt; pub struct UserMessage { pub id: Option, pub content: ContentBlock, + pub chunks: Vec, pub checkpoint: Option, } @@ -804,18 +805,25 @@ impl AcpThread { let entries_len = self.entries.len(); if let Some(last_entry) = self.entries.last_mut() - && let AgentThreadEntry::UserMessage(UserMessage { id, content, .. }) = last_entry + && let AgentThreadEntry::UserMessage(UserMessage { + id, + content, + chunks, + .. + }) = last_entry { *id = message_id.or(id.take()); - content.append(chunk, &language_registry, cx); + content.append(chunk.clone(), &language_registry, cx); + chunks.push(chunk); let idx = entries_len - 1; cx.emit(AcpThreadEvent::EntryUpdated(idx)); } else { - let content = ContentBlock::new(chunk, &language_registry, cx); + let content = ContentBlock::new(chunk.clone(), &language_registry, cx); self.push_entry( AgentThreadEntry::UserMessage(UserMessage { id: message_id, content, + chunks: vec![chunk], checkpoint: None, }), cx, @@ -1150,6 +1158,7 @@ impl AcpThread { AgentThreadEntry::UserMessage(UserMessage { id: message_id.clone(), content: block, + chunks: message.clone(), checkpoint: None, }), cx, diff --git a/crates/acp_thread/src/mention.rs b/crates/acp_thread/src/mention.rs index 03174608fb..b18cbfe18e 100644 --- a/crates/acp_thread/src/mention.rs +++ b/crates/acp_thread/src/mention.rs @@ -1,16 +1,21 @@ use agent::ThreadId; use anyhow::{Context as _, Result, bail}; +use file_icons::FileIcons; use prompt_store::{PromptId, UserPromptId}; use std::{ fmt, ops::Range, path::{Path, PathBuf}, }; +use ui::{App, IconName, SharedString}; use url::Url; #[derive(Clone, Debug, PartialEq, Eq)] pub enum MentionUri { - File(PathBuf), + File { + abs_path: PathBuf, + is_directory: bool, + }, Symbol { path: PathBuf, name: String, @@ -75,8 +80,12 @@ impl MentionUri { } else { let file_path = PathBuf::from(format!("{}{}", url.host_str().unwrap_or(""), path)); + let is_directory = input.ends_with("/"); - Ok(Self::File(file_path)) + Ok(Self::File { + abs_path: file_path, + is_directory, + }) } } "zed" => { @@ -108,9 +117,9 @@ impl MentionUri { } } - fn name(&self) -> String { + pub fn name(&self) -> String { match self { - MentionUri::File(path) => path + MentionUri::File { abs_path, .. } => abs_path .file_name() .unwrap_or_default() .to_string_lossy() @@ -126,15 +135,45 @@ impl MentionUri { } } + pub fn icon_path(&self, cx: &mut App) -> SharedString { + match self { + MentionUri::File { + abs_path, + is_directory, + } => { + if *is_directory { + FileIcons::get_folder_icon(false, cx) + .unwrap_or_else(|| IconName::Folder.path().into()) + } else { + FileIcons::get_icon(&abs_path, cx) + .unwrap_or_else(|| IconName::File.path().into()) + } + } + MentionUri::Symbol { .. } => IconName::Code.path().into(), + MentionUri::Thread { .. } => IconName::Thread.path().into(), + MentionUri::TextThread { .. } => IconName::Thread.path().into(), + MentionUri::Rule { .. } => IconName::Reader.path().into(), + MentionUri::Selection { .. } => IconName::Reader.path().into(), + MentionUri::Fetch { .. } => IconName::ToolWeb.path().into(), + } + } + pub fn as_link<'a>(&'a self) -> MentionLink<'a> { MentionLink(self) } pub fn to_uri(&self) -> Url { match self { - MentionUri::File(path) => { + MentionUri::File { + abs_path, + is_directory, + } => { let mut url = Url::parse("file:///").unwrap(); - url.set_path(&path.to_string_lossy()); + let mut path = abs_path.to_string_lossy().to_string(); + if *is_directory && !path.ends_with("/") { + path.push_str("/"); + } + url.set_path(&path); url } MentionUri::Symbol { @@ -226,12 +265,53 @@ mod tests { let file_uri = "file:///path/to/file.rs"; let parsed = MentionUri::parse(file_uri).unwrap(); match &parsed { - MentionUri::File(path) => assert_eq!(path.to_str().unwrap(), "/path/to/file.rs"), + MentionUri::File { + abs_path, + is_directory, + } => { + assert_eq!(abs_path.to_str().unwrap(), "/path/to/file.rs"); + assert!(!is_directory); + } _ => panic!("Expected File variant"), } assert_eq!(parsed.to_uri().to_string(), file_uri); } + #[test] + fn test_parse_directory_uri() { + let file_uri = "file:///path/to/dir/"; + let parsed = MentionUri::parse(file_uri).unwrap(); + match &parsed { + MentionUri::File { + abs_path, + is_directory, + } => { + assert_eq!(abs_path.to_str().unwrap(), "/path/to/dir/"); + assert!(is_directory); + } + _ => panic!("Expected File variant"), + } + assert_eq!(parsed.to_uri().to_string(), file_uri); + } + + #[test] + fn test_to_directory_uri_with_slash() { + let uri = MentionUri::File { + abs_path: PathBuf::from("/path/to/dir/"), + is_directory: true, + }; + assert_eq!(uri.to_uri().to_string(), "file:///path/to/dir/"); + } + + #[test] + fn test_to_directory_uri_without_slash() { + let uri = MentionUri::File { + abs_path: PathBuf::from("/path/to/dir"), + is_directory: true, + }; + assert_eq!(uri.to_uri().to_string(), "file:///path/to/dir/"); + } + #[test] fn test_parse_symbol_uri() { let symbol_uri = "file:///path/to/file.rs?symbol=MySymbol#L10:20"; diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 4156ec44d2..260aaaf550 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -124,12 +124,12 @@ impl UserMessage { } UserMessageContent::Mention { uri, content } => { match uri { - MentionUri::File(path) => { + MentionUri::File { abs_path, .. } => { write!( &mut symbol_context, "\n{}", MarkdownCodeBlock { - tag: &codeblock_tag(&path, None), + tag: &codeblock_tag(&abs_path, None), text: &content.to_string(), } ) diff --git a/crates/agent_ui/src/acp.rs b/crates/agent_ui/src/acp.rs index b9814adb2d..630aa730a6 100644 --- a/crates/agent_ui/src/acp.rs +++ b/crates/agent_ui/src/acp.rs @@ -1,10 +1,9 @@ mod completion_provider; -mod message_history; +mod message_editor; mod model_selector; mod model_selector_popover; mod thread_view; -pub use message_history::MessageHistory; pub use model_selector::AcpModelSelector; pub use model_selector_popover::AcpModelSelectorPopover; pub use thread_view::AcpThreadView; diff --git a/crates/agent_ui/src/acp/completion_provider.rs b/crates/agent_ui/src/acp/completion_provider.rs index 46c8aa92f1..720ee23b00 100644 --- a/crates/agent_ui/src/acp/completion_provider.rs +++ b/crates/agent_ui/src/acp/completion_provider.rs @@ -1,5 +1,5 @@ use std::ops::Range; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use std::sync::Arc; use std::sync::atomic::AtomicBool; @@ -8,7 +8,7 @@ use anyhow::{Context as _, Result, anyhow}; use collections::{HashMap, HashSet}; use editor::display_map::CreaseId; use editor::{CompletionProvider, Editor, ExcerptId, ToOffset as _}; -use file_icons::FileIcons; + use futures::future::try_join_all; use fuzzy::{StringMatch, StringMatchCandidate}; use gpui::{App, Entity, Task, WeakEntity}; @@ -28,10 +28,7 @@ use url::Url; use workspace::Workspace; use workspace::notifications::NotifyResultExt; -use agent::{ - context::RULES_ICON, - thread_store::{TextThreadStore, ThreadStore}, -}; +use agent::thread_store::{TextThreadStore, ThreadStore}; use crate::context_picker::fetch_context_picker::fetch_url_content; use crate::context_picker::file_context_picker::{FileMatch, search_files}; @@ -66,6 +63,11 @@ impl MentionSet { self.uri_by_crease_id.drain().map(|(id, _)| id) } + pub fn clear(&mut self) { + self.fetch_results.clear(); + self.uri_by_crease_id.clear(); + } + pub fn contents( &self, project: Entity, @@ -79,12 +81,13 @@ impl MentionSet { .iter() .map(|(&crease_id, uri)| { match uri { - MentionUri::File(path) => { + MentionUri::File { abs_path, .. } => { + // TODO directories let uri = uri.clone(); - let path = path.to_path_buf(); + let abs_path = abs_path.to_path_buf(); let buffer_task = project.update(cx, |project, cx| { let path = project - .find_project_path(path, cx) + .find_project_path(abs_path, cx) .context("Failed to find project path")?; anyhow::Ok(project.open_buffer(path, cx)) }); @@ -508,9 +511,14 @@ impl ContextPickerCompletionProvider { }) .unwrap_or_default(); let line_range = point_range.start.row..point_range.end.row; + + let uri = MentionUri::Selection { + path: path.clone(), + line_range: line_range.clone(), + }; let crease = crate::context_picker::crease_for_mention( selection_name(&path, &line_range).into(), - IconName::Reader.path().into(), + uri.icon_path(cx), range, editor.downgrade(), ); @@ -528,10 +536,7 @@ impl ContextPickerCompletionProvider { crease_ids.try_into().unwrap() }); - mention_set.lock().insert( - crease_id, - MentionUri::Selection { path, line_range }, - ); + mention_set.lock().insert(crease_id, uri); current_offset += text_len + 1; } @@ -569,13 +574,8 @@ impl ContextPickerCompletionProvider { recent: bool, editor: Entity, mention_set: Arc>, + cx: &mut App, ) -> Completion { - let icon_for_completion = if recent { - IconName::HistoryRerun - } else { - IconName::Thread - }; - let uri = match &thread_entry { ThreadContextEntry::Thread { id, title } => MentionUri::Thread { id: id.clone(), @@ -586,6 +586,13 @@ impl ContextPickerCompletionProvider { name: title.to_string(), }, }; + + let icon_for_completion = if recent { + IconName::HistoryRerun.path().into() + } else { + uri.icon_path(cx) + }; + let new_text = format!("{} ", uri.as_link()); let new_text_len = new_text.len(); @@ -596,9 +603,9 @@ impl ContextPickerCompletionProvider { documentation: None, insert_text_mode: None, source: project::CompletionSource::Custom, - icon_path: Some(icon_for_completion.path().into()), + icon_path: Some(icon_for_completion.clone()), confirm: Some(confirm_completion_callback( - IconName::Thread.path().into(), + uri.icon_path(cx), thread_entry.title().clone(), excerpt_id, source_range.start, @@ -616,6 +623,7 @@ impl ContextPickerCompletionProvider { source_range: Range, editor: Entity, mention_set: Arc>, + cx: &mut App, ) -> Completion { let uri = MentionUri::Rule { id: rule.prompt_id.into(), @@ -623,6 +631,7 @@ impl ContextPickerCompletionProvider { }; let new_text = format!("{} ", uri.as_link()); let new_text_len = new_text.len(); + let icon_path = uri.icon_path(cx); Completion { replace_range: source_range.clone(), new_text, @@ -630,9 +639,9 @@ impl ContextPickerCompletionProvider { documentation: None, insert_text_mode: None, source: project::CompletionSource::Custom, - icon_path: Some(RULES_ICON.path().into()), + icon_path: Some(icon_path.clone()), confirm: Some(confirm_completion_callback( - RULES_ICON.path().into(), + icon_path, rule.title.clone(), excerpt_id, source_range.start, @@ -654,7 +663,7 @@ impl ContextPickerCompletionProvider { editor: Entity, mention_set: Arc>, project: Entity, - cx: &App, + cx: &mut App, ) -> Option { let (file_name, directory) = crate::context_picker::file_context_picker::extract_file_name_and_directory( @@ -664,27 +673,21 @@ impl ContextPickerCompletionProvider { let label = build_code_label_for_full_path(&file_name, directory.as_ref().map(|s| s.as_ref()), cx); - let full_path = if let Some(directory) = directory { - format!("{}{}", directory, file_name) - } else { - file_name.to_string() + + let abs_path = project.read(cx).absolute_path(&project_path, cx)?; + + let file_uri = MentionUri::File { + abs_path, + is_directory, }; - let crease_icon_path = if is_directory { - FileIcons::get_folder_icon(false, cx).unwrap_or_else(|| IconName::Folder.path().into()) - } else { - FileIcons::get_icon(Path::new(&full_path), cx) - .unwrap_or_else(|| IconName::File.path().into()) - }; + let crease_icon_path = file_uri.icon_path(cx); let completion_icon_path = if is_recent { IconName::HistoryRerun.path().into() } else { crease_icon_path.clone() }; - let abs_path = project.read(cx).absolute_path(&project_path, cx)?; - - let file_uri = MentionUri::File(abs_path); let new_text = format!("{} ", file_uri.as_link()); let new_text_len = new_text.len(); Some(Completion { @@ -729,16 +732,17 @@ impl ContextPickerCompletionProvider { }; let new_text = format!("{} ", uri.as_link()); let new_text_len = new_text.len(); + let icon_path = uri.icon_path(cx); Some(Completion { replace_range: source_range.clone(), new_text, label, documentation: None, source: project::CompletionSource::Custom, - icon_path: Some(IconName::Code.path().into()), + icon_path: Some(icon_path.clone()), insert_text_mode: None, confirm: Some(confirm_completion_callback( - IconName::Code.path().into(), + icon_path, symbol.name.clone().into(), excerpt_id, source_range.start, @@ -757,16 +761,23 @@ impl ContextPickerCompletionProvider { editor: Entity, mention_set: Arc>, http_client: Arc, + cx: &mut App, ) -> Option { let new_text = format!("@fetch {} ", url_to_fetch.clone()); let new_text_len = new_text.len(); + let mention_uri = MentionUri::Fetch { + url: url::Url::parse(url_to_fetch.as_ref()) + .or_else(|_| url::Url::parse(&format!("https://{url_to_fetch}"))) + .ok()?, + }; + let icon_path = mention_uri.icon_path(cx); Some(Completion { replace_range: source_range.clone(), new_text, label: CodeLabel::plain(url_to_fetch.to_string(), None), documentation: None, source: project::CompletionSource::Custom, - icon_path: Some(IconName::ToolWeb.path().into()), + icon_path: Some(icon_path.clone()), insert_text_mode: None, confirm: Some({ let start = source_range.start; @@ -774,6 +785,7 @@ impl ContextPickerCompletionProvider { let editor = editor.clone(); let url_to_fetch = url_to_fetch.clone(); let source_range = source_range.clone(); + let icon_path = icon_path.clone(); Arc::new(move |_, window, cx| { let Some(url) = url::Url::parse(url_to_fetch.as_ref()) .or_else(|_| url::Url::parse(&format!("https://{url_to_fetch}"))) @@ -781,12 +793,12 @@ impl ContextPickerCompletionProvider { else { return false; }; - let mention_uri = MentionUri::Fetch { url: url.clone() }; let editor = editor.clone(); let mention_set = mention_set.clone(); let http_client = http_client.clone(); let source_range = source_range.clone(); + let icon_path = icon_path.clone(); window.defer(cx, move |window, cx| { let url = url.clone(); @@ -795,7 +807,7 @@ impl ContextPickerCompletionProvider { start, content_len, url.to_string().into(), - IconName::ToolWeb.path().into(), + icon_path, editor.clone(), window, cx, @@ -814,8 +826,10 @@ impl ContextPickerCompletionProvider { .await .notify_async_err(cx) { - mention_set.lock().add_fetch_result(url, content); - mention_set.lock().insert(crease_id, mention_uri.clone()); + mention_set.lock().add_fetch_result(url.clone(), content); + mention_set + .lock() + .insert(crease_id, MentionUri::Fetch { url }); } else { // Remove crease if we failed to fetch editor @@ -911,8 +925,8 @@ impl CompletionProvider for ContextPickerCompletionProvider { for uri in mention_set.uri_by_crease_id.values() { match uri { - MentionUri::File(path) => { - excluded_paths.insert(path.clone()); + MentionUri::File { abs_path, .. } => { + excluded_paths.insert(abs_path.clone()); } MentionUri::Thread { id, .. } => { excluded_threads.insert(id.clone()); @@ -1001,6 +1015,7 @@ impl CompletionProvider for ContextPickerCompletionProvider { is_recent, editor.clone(), mention_set.clone(), + cx, )), Match::Rules(user_rules) => Some(Self::completion_for_rules( @@ -1009,6 +1024,7 @@ impl CompletionProvider for ContextPickerCompletionProvider { source_range.clone(), editor.clone(), mention_set.clone(), + cx, )), Match::Fetch(url) => Self::completion_for_fetch( @@ -1018,6 +1034,7 @@ impl CompletionProvider for ContextPickerCompletionProvider { editor.clone(), mention_set.clone(), http_client.clone(), + cx, ), Match::Entry(EntryMatch { entry, .. }) => Self::completion_for_entry( @@ -1179,7 +1196,7 @@ mod tests { use serde_json::json; use settings::SettingsStore; use smol::stream::StreamExt as _; - use std::{ops::Deref, rc::Rc}; + use std::{ops::Deref, path::Path, rc::Rc}; use util::path; use workspace::{AppState, Item}; diff --git a/crates/agent_ui/src/acp/message_editor.rs b/crates/agent_ui/src/acp/message_editor.rs new file mode 100644 index 0000000000..fc34420d4e --- /dev/null +++ b/crates/agent_ui/src/acp/message_editor.rs @@ -0,0 +1,469 @@ +use crate::acp::completion_provider::ContextPickerCompletionProvider; +use crate::acp::completion_provider::MentionSet; +use acp_thread::MentionUri; +use agent::TextThreadStore; +use agent::ThreadStore; +use agent_client_protocol as acp; +use anyhow::Result; +use collections::HashSet; +use editor::{ + AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement, EditorMode, + EditorStyle, MultiBuffer, +}; +use gpui::{ + AppContext, Context, Entity, EventEmitter, FocusHandle, Focusable, Task, TextStyle, WeakEntity, +}; +use language::Buffer; +use language::Language; +use parking_lot::Mutex; +use project::{CompletionIntent, Project}; +use settings::Settings; +use std::fmt::Write; +use std::rc::Rc; +use std::sync::Arc; +use theme::ThemeSettings; +use ui::{ + ActiveTheme, App, InteractiveElement, IntoElement, ParentElement, Render, Styled, TextSize, + Window, div, +}; +use util::ResultExt; +use workspace::Workspace; +use zed_actions::agent::Chat; + +pub struct MessageEditor { + editor: Entity, + project: Entity, + thread_store: Entity, + text_thread_store: Entity, + mention_set: Arc>, +} + +pub enum MessageEditorEvent { + Send, + Cancel, +} + +impl EventEmitter for MessageEditor {} + +impl MessageEditor { + pub fn new( + workspace: WeakEntity, + project: Entity, + thread_store: Entity, + text_thread_store: Entity, + mode: EditorMode, + window: &mut Window, + cx: &mut Context, + ) -> Self { + let language = Language::new( + language::LanguageConfig { + completion_query_characters: HashSet::from_iter(['.', '-', '_', '@']), + ..Default::default() + }, + None, + ); + + let mention_set = Arc::new(Mutex::new(MentionSet::default())); + let editor = cx.new(|cx| { + let buffer = cx.new(|cx| Buffer::local("", cx).with_language(Arc::new(language), cx)); + let buffer = cx.new(|cx| MultiBuffer::singleton(buffer, cx)); + + let mut editor = Editor::new(mode, buffer, None, window, cx); + editor.set_placeholder_text("Message the agent - @ to include files", cx); + editor.set_show_indent_guides(false, cx); + editor.set_soft_wrap(); + editor.set_use_modal_editing(true); + editor.set_completion_provider(Some(Rc::new(ContextPickerCompletionProvider::new( + mention_set.clone(), + workspace, + thread_store.downgrade(), + text_thread_store.downgrade(), + cx.weak_entity(), + )))); + editor.set_context_menu_options(ContextMenuOptions { + min_entries_visible: 12, + max_entries_visible: 12, + placement: Some(ContextMenuPlacement::Above), + }); + editor + }); + + Self { + editor, + project, + mention_set, + thread_store, + text_thread_store, + } + } + + pub fn is_empty(&self, cx: &App) -> bool { + self.editor.read(cx).is_empty(cx) + } + + pub fn contents( + &self, + window: &mut Window, + cx: &mut Context, + ) -> Task>> { + let contents = self.mention_set.lock().contents( + self.project.clone(), + self.thread_store.clone(), + self.text_thread_store.clone(), + window, + cx, + ); + let editor = self.editor.clone(); + + cx.spawn(async move |_, cx| { + let contents = contents.await?; + + editor.update(cx, |editor, cx| { + let mut ix = 0; + let mut chunks: Vec = Vec::new(); + let text = editor.text(cx); + editor.display_map.update(cx, |map, cx| { + let snapshot = map.snapshot(cx); + for (crease_id, crease) in snapshot.crease_snapshot.creases() { + // Skip creases that have been edited out of the message buffer. + if !crease.range().start.is_valid(&snapshot.buffer_snapshot) { + continue; + } + + if let Some(mention) = contents.get(&crease_id) { + let crease_range = crease.range().to_offset(&snapshot.buffer_snapshot); + if crease_range.start > ix { + chunks.push(text[ix..crease_range.start].into()); + } + chunks.push(acp::ContentBlock::Resource(acp::EmbeddedResource { + annotations: None, + resource: acp::EmbeddedResourceResource::TextResourceContents( + acp::TextResourceContents { + mime_type: None, + text: mention.content.clone(), + uri: mention.uri.to_uri().to_string(), + }, + ), + })); + ix = crease_range.end; + } + } + + if ix < text.len() { + let last_chunk = text[ix..].trim_end(); + if !last_chunk.is_empty() { + chunks.push(last_chunk.into()); + } + } + }); + + chunks + }) + }) + } + + pub fn clear(&mut self, window: &mut Window, cx: &mut Context) { + self.editor.update(cx, |editor, cx| { + editor.clear(window, cx); + editor.remove_creases(self.mention_set.lock().drain(), cx) + }); + } + + fn chat(&mut self, _: &Chat, _: &mut Window, cx: &mut Context) { + cx.emit(MessageEditorEvent::Send) + } + + fn cancel(&mut self, _: &menu::Cancel, _: &mut Window, cx: &mut Context) { + cx.emit(MessageEditorEvent::Cancel) + } + + pub fn insert_dragged_files( + &self, + paths: Vec, + window: &mut Window, + cx: &mut Context, + ) { + let buffer = self.editor.read(cx).buffer().clone(); + let Some((&excerpt_id, _, _)) = buffer.read(cx).snapshot(cx).as_singleton() else { + return; + }; + let Some(buffer) = buffer.read(cx).as_singleton() else { + return; + }; + for path in paths { + let Some(entry) = self.project.read(cx).entry_for_path(&path, cx) else { + continue; + }; + let Some(abs_path) = self.project.read(cx).absolute_path(&path, cx) else { + continue; + }; + + let anchor = buffer.update(cx, |buffer, _cx| buffer.anchor_before(buffer.len())); + let path_prefix = abs_path + .file_name() + .unwrap_or(path.path.as_os_str()) + .display() + .to_string(); + let Some(completion) = ContextPickerCompletionProvider::completion_for_path( + path, + &path_prefix, + false, + entry.is_dir(), + excerpt_id, + anchor..anchor, + self.editor.clone(), + self.mention_set.clone(), + self.project.clone(), + cx, + ) else { + continue; + }; + + self.editor.update(cx, |message_editor, cx| { + message_editor.edit( + [( + multi_buffer::Anchor::max()..multi_buffer::Anchor::max(), + completion.new_text, + )], + cx, + ); + }); + if let Some(confirm) = completion.confirm.clone() { + confirm(CompletionIntent::Complete, window, cx); + } + } + } + + pub fn set_mode(&mut self, mode: EditorMode, cx: &mut Context) { + self.editor.update(cx, |editor, cx| { + editor.set_mode(mode); + cx.notify() + }); + } + + pub fn set_message( + &mut self, + message: &[acp::ContentBlock], + window: &mut Window, + cx: &mut Context, + ) { + let mut text = String::new(); + let mut mentions = Vec::new(); + + for chunk in message { + match chunk { + acp::ContentBlock::Text(text_content) => { + text.push_str(&text_content.text); + } + acp::ContentBlock::Resource(acp::EmbeddedResource { + resource: acp::EmbeddedResourceResource::TextResourceContents(resource), + .. + }) => { + if let Some(mention_uri) = MentionUri::parse(&resource.uri).log_err() { + let start = text.len(); + write!(&mut text, "{}", mention_uri.as_link()).ok(); + let end = text.len(); + mentions.push((start..end, mention_uri)); + } + } + acp::ContentBlock::Image(_) + | acp::ContentBlock::Audio(_) + | acp::ContentBlock::Resource(_) + | acp::ContentBlock::ResourceLink(_) => {} + } + } + + let snapshot = self.editor.update(cx, |editor, cx| { + editor.set_text(text, window, cx); + editor.buffer().read(cx).snapshot(cx) + }); + + self.mention_set.lock().clear(); + for (range, mention_uri) in mentions { + let anchor = snapshot.anchor_before(range.start); + let crease_id = crate::context_picker::insert_crease_for_mention( + anchor.excerpt_id, + anchor.text_anchor, + range.end - range.start, + mention_uri.name().into(), + mention_uri.icon_path(cx), + self.editor.clone(), + window, + cx, + ); + + if let Some(crease_id) = crease_id { + self.mention_set.lock().insert(crease_id, mention_uri); + } + } + cx.notify(); + } + + #[cfg(test)] + pub fn set_text(&mut self, text: &str, window: &mut Window, cx: &mut Context) { + self.editor.update(cx, |editor, cx| { + editor.set_text(text, window, cx); + }); + } +} + +impl Focusable for MessageEditor { + fn focus_handle(&self, cx: &App) -> FocusHandle { + self.editor.focus_handle(cx) + } +} + +impl Render for MessageEditor { + fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement { + div() + .key_context("MessageEditor") + .on_action(cx.listener(Self::chat)) + .on_action(cx.listener(Self::cancel)) + .flex_1() + .child({ + let settings = ThemeSettings::get_global(cx); + let font_size = TextSize::Small + .rems(cx) + .to_pixels(settings.agent_font_size(cx)); + let line_height = settings.buffer_line_height.value() * font_size; + + let text_style = TextStyle { + color: cx.theme().colors().text, + font_family: settings.buffer_font.family.clone(), + font_fallbacks: settings.buffer_font.fallbacks.clone(), + font_features: settings.buffer_font.features.clone(), + font_size: font_size.into(), + line_height: line_height.into(), + ..Default::default() + }; + + EditorElement::new( + &self.editor, + EditorStyle { + background: cx.theme().colors().editor_background, + local_player: cx.theme().players().local(), + text: text_style, + syntax: cx.theme().syntax().clone(), + ..Default::default() + }, + ) + }) + } +} + +#[cfg(test)] +mod tests { + use std::path::Path; + + use agent::{TextThreadStore, ThreadStore}; + use agent_client_protocol as acp; + use editor::EditorMode; + use fs::FakeFs; + use gpui::{AppContext, TestAppContext}; + use lsp::{CompletionContext, CompletionTriggerKind}; + use project::{CompletionIntent, Project}; + use serde_json::json; + use util::path; + use workspace::Workspace; + + use crate::acp::{message_editor::MessageEditor, thread_view::tests::init_test}; + + #[gpui::test] + async fn test_at_mention_removal(cx: &mut TestAppContext) { + init_test(cx); + + let fs = FakeFs::new(cx.executor()); + fs.insert_tree("/project", json!({"file": ""})).await; + let project = Project::test(fs, [Path::new(path!("/project"))], cx).await; + + let (workspace, cx) = + cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); + + let thread_store = cx.new(|cx| ThreadStore::fake(project.clone(), cx)); + let text_thread_store = cx.new(|cx| TextThreadStore::fake(project.clone(), cx)); + + let message_editor = cx.update(|window, cx| { + cx.new(|cx| { + MessageEditor::new( + workspace.downgrade(), + project.clone(), + thread_store.clone(), + text_thread_store.clone(), + EditorMode::AutoHeight { + min_lines: 1, + max_lines: None, + }, + window, + cx, + ) + }) + }); + let editor = message_editor.update(cx, |message_editor, _| message_editor.editor.clone()); + + cx.run_until_parked(); + + let excerpt_id = editor.update(cx, |editor, cx| { + editor + .buffer() + .read(cx) + .excerpt_ids() + .into_iter() + .next() + .unwrap() + }); + let completions = editor.update_in(cx, |editor, window, cx| { + editor.set_text("Hello @file ", window, cx); + let buffer = editor.buffer().read(cx).as_singleton().unwrap(); + let completion_provider = editor.completion_provider().unwrap(); + completion_provider.completions( + excerpt_id, + &buffer, + text::Anchor::MAX, + CompletionContext { + trigger_kind: CompletionTriggerKind::TRIGGER_CHARACTER, + trigger_character: Some("@".into()), + }, + window, + cx, + ) + }); + let [_, completion]: [_; 2] = completions + .await + .unwrap() + .into_iter() + .flat_map(|response| response.completions) + .collect::>() + .try_into() + .unwrap(); + + editor.update_in(cx, |editor, window, cx| { + let snapshot = editor.buffer().read(cx).snapshot(cx); + let start = snapshot + .anchor_in_excerpt(excerpt_id, completion.replace_range.start) + .unwrap(); + let end = snapshot + .anchor_in_excerpt(excerpt_id, completion.replace_range.end) + .unwrap(); + editor.edit([(start..end, completion.new_text)], cx); + (completion.confirm.unwrap())(CompletionIntent::Complete, window, cx); + }); + + cx.run_until_parked(); + + // Backspace over the inserted crease (and the following space). + editor.update_in(cx, |editor, window, cx| { + editor.backspace(&Default::default(), window, cx); + editor.backspace(&Default::default(), window, cx); + }); + + let content = message_editor + .update_in(cx, |message_editor, window, cx| { + message_editor.contents(window, cx) + }) + .await + .unwrap(); + + // We don't send a resource link for the deleted crease. + pretty_assertions::assert_matches!(content.as_slice(), [acp::ContentBlock::Text { .. }]); + } +} diff --git a/crates/agent_ui/src/acp/message_history.rs b/crates/agent_ui/src/acp/message_history.rs deleted file mode 100644 index c8280573a0..0000000000 --- a/crates/agent_ui/src/acp/message_history.rs +++ /dev/null @@ -1,88 +0,0 @@ -pub struct MessageHistory { - items: Vec, - current: Option, -} - -impl Default for MessageHistory { - fn default() -> Self { - MessageHistory { - items: Vec::new(), - current: None, - } - } -} - -impl MessageHistory { - pub fn push(&mut self, message: T) { - self.current.take(); - self.items.push(message); - } - - pub fn reset_position(&mut self) { - self.current.take(); - } - - pub fn prev(&mut self) -> Option<&T> { - if self.items.is_empty() { - return None; - } - - let new_ix = self - .current - .get_or_insert(self.items.len()) - .saturating_sub(1); - - self.current = Some(new_ix); - self.items.get(new_ix) - } - - pub fn next(&mut self) -> Option<&T> { - let current = self.current.as_mut()?; - *current += 1; - - self.items.get(*current).or_else(|| { - self.current.take(); - None - }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_prev_next() { - let mut history = MessageHistory::default(); - - // Test empty history - assert_eq!(history.prev(), None); - assert_eq!(history.next(), None); - - // Add some messages - history.push("first"); - history.push("second"); - history.push("third"); - - // Test prev navigation - assert_eq!(history.prev(), Some(&"third")); - assert_eq!(history.prev(), Some(&"second")); - assert_eq!(history.prev(), Some(&"first")); - assert_eq!(history.prev(), Some(&"first")); - - assert_eq!(history.next(), Some(&"second")); - - // Test mixed navigation - history.push("fourth"); - assert_eq!(history.prev(), Some(&"fourth")); - assert_eq!(history.prev(), Some(&"third")); - assert_eq!(history.next(), Some(&"fourth")); - assert_eq!(history.next(), None); - - // Test that push resets navigation - history.prev(); - history.prev(); - history.push("fifth"); - assert_eq!(history.prev(), Some(&"fifth")); - } -} diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 5f67dc15b8..2a72cc6f48 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -12,34 +12,25 @@ use audio::{Audio, Sound}; use buffer_diff::BufferDiff; use collections::{HashMap, HashSet}; use editor::scroll::Autoscroll; -use editor::{ - AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement, EditorMode, - EditorStyle, MinimapVisibility, MultiBuffer, PathKey, SelectionEffects, -}; +use editor::{Editor, EditorMode, MinimapVisibility, MultiBuffer, PathKey, SelectionEffects}; use file_icons::FileIcons; use gpui::{ - Action, Animation, AnimationExt, App, BorderStyle, EdgesRefinement, Empty, Entity, EntityId, - FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, PlatformDisplay, - SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, TextStyleRefinement, - Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, linear_color_stop, - linear_gradient, list, percentage, point, prelude::*, pulsating_between, + Action, Animation, AnimationExt, App, BorderStyle, ClickEvent, EdgesRefinement, Empty, Entity, + EntityId, FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, + PlatformDisplay, SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, + TextStyleRefinement, Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, + linear_color_stop, linear_gradient, list, percentage, point, prelude::*, pulsating_between, }; +use language::Buffer; use language::language_settings::SoftWrap; -use language::{Buffer, Language}; use markdown::{HeadingLevelStyles, Markdown, MarkdownElement, MarkdownStyle}; -use parking_lot::Mutex; -use project::{CompletionIntent, Project}; +use project::Project; use prompt_store::PromptId; use rope::Point; use settings::{Settings as _, SettingsStore}; -use std::fmt::Write as _; -use std::path::PathBuf; -use std::{ - cell::RefCell, collections::BTreeMap, path::Path, process::ExitStatus, rc::Rc, sync::Arc, - time::Duration, -}; +use std::{collections::BTreeMap, process::ExitStatus, rc::Rc, time::Duration}; use terminal_view::TerminalView; -use text::{Anchor, BufferSnapshot}; +use text::Anchor; use theme::ThemeSettings; use ui::{ Disclosure, Divider, DividerColor, KeyBinding, PopoverMenuHandle, Scrollbar, ScrollbarState, @@ -47,14 +38,12 @@ use ui::{ }; use util::{ResultExt, size::format_file_size, time::duration_alt_display}; use workspace::{CollaboratorId, Workspace}; -use zed_actions::agent::{Chat, NextHistoryMessage, PreviousHistoryMessage, ToggleModelSelector}; +use zed_actions::agent::{Chat, ToggleModelSelector}; use zed_actions::assistant::OpenRulesLibrary; use crate::acp::AcpModelSelectorPopover; -use crate::acp::completion_provider::{ContextPickerCompletionProvider, MentionSet}; -use crate::acp::message_history::MessageHistory; +use crate::acp::message_editor::{MessageEditor, MessageEditorEvent}; use crate::agent_diff::AgentDiff; -use crate::message_editor::{MAX_EDITOR_LINES, MIN_EDITOR_LINES}; use crate::ui::{AgentNotification, AgentNotificationEvent}; use crate::{ AgentDiffPane, AgentPanel, ExpandMessageEditor, Follow, KeepAll, OpenAgentDiff, RejectAll, @@ -62,6 +51,9 @@ use crate::{ const RESPONSE_PADDING_X: Pixels = px(19.); +pub const MIN_EDITOR_LINES: usize = 4; +pub const MAX_EDITOR_LINES: usize = 8; + pub struct AcpThreadView { agent: Rc, workspace: WeakEntity, @@ -71,11 +63,8 @@ pub struct AcpThreadView { thread_state: ThreadState, diff_editors: HashMap>, terminal_views: HashMap>, - message_editor: Entity, + message_editor: Entity, model_selector: Option>, - message_set_from_history: Option, - _message_editor_subscription: Subscription, - mention_set: Arc>, notifications: Vec>, notification_subscriptions: HashMap, Vec>, last_error: Option>, @@ -88,9 +77,16 @@ pub struct AcpThreadView { plan_expanded: bool, editor_expanded: bool, terminal_expanded: bool, - message_history: Rc>>>, + editing_message: Option, _cancel_task: Option>, - _subscriptions: [Subscription; 1], + _subscriptions: [Subscription; 2], +} + +struct EditingMessage { + index: usize, + message_id: UserMessageId, + editor: Entity, + _subscription: Subscription, } enum ThreadState { @@ -117,83 +113,30 @@ impl AcpThreadView { project: Entity, thread_store: Entity, text_thread_store: Entity, - message_history: Rc>>>, - min_lines: usize, - max_lines: Option, window: &mut Window, cx: &mut Context, ) -> Self { - let language = Language::new( - language::LanguageConfig { - completion_query_characters: HashSet::from_iter(['.', '-', '_', '@']), - ..Default::default() - }, - None, - ); - - let mention_set = Arc::new(Mutex::new(MentionSet::default())); - let message_editor = cx.new(|cx| { - let buffer = cx.new(|cx| Buffer::local("", cx).with_language(Arc::new(language), cx)); - let buffer = cx.new(|cx| MultiBuffer::singleton(buffer, cx)); - - let mut editor = Editor::new( + MessageEditor::new( + workspace.clone(), + project.clone(), + thread_store.clone(), + text_thread_store.clone(), editor::EditorMode::AutoHeight { - min_lines, - max_lines: max_lines, + min_lines: MIN_EDITOR_LINES, + max_lines: Some(MAX_EDITOR_LINES), }, - buffer, - None, window, cx, - ); - editor.set_placeholder_text("Message the agent - @ to include files", cx); - editor.set_show_indent_guides(false, cx); - editor.set_soft_wrap(); - editor.set_use_modal_editing(true); - editor.set_completion_provider(Some(Rc::new(ContextPickerCompletionProvider::new( - mention_set.clone(), - workspace.clone(), - thread_store.downgrade(), - text_thread_store.downgrade(), - cx.weak_entity(), - )))); - editor.set_context_menu_options(ContextMenuOptions { - min_entries_visible: 12, - max_entries_visible: 12, - placement: Some(ContextMenuPlacement::Above), - }); - editor + ) }); - let message_editor_subscription = - cx.subscribe(&message_editor, |this, editor, event, cx| { - if let editor::EditorEvent::BufferEdited = &event { - let buffer = editor - .read(cx) - .buffer() - .read(cx) - .as_singleton() - .unwrap() - .read(cx) - .snapshot(); - if let Some(message) = this.message_set_from_history.clone() - && message.version() != buffer.version() - { - this.message_set_from_history = None; - } - - if this.message_set_from_history.is_none() { - this.message_history.borrow_mut().reset_position(); - } - } - }); - - let mention_set = mention_set.clone(); - let list_state = ListState::new(0, gpui::ListAlignment::Bottom, px(2048.0)); - let subscription = cx.observe_global_in::(window, Self::settings_changed); + let subscriptions = [ + cx.observe_global_in::(window, Self::settings_changed), + cx.subscribe_in(&message_editor, window, Self::on_message_editor_event), + ]; Self { agent: agent.clone(), @@ -204,9 +147,6 @@ impl AcpThreadView { thread_state: Self::initial_state(agent, workspace, project, window, cx), message_editor, model_selector: None, - message_set_from_history: None, - _message_editor_subscription: message_editor_subscription, - mention_set, notifications: Vec::new(), notification_subscriptions: HashMap::default(), diff_editors: Default::default(), @@ -217,12 +157,12 @@ impl AcpThreadView { auth_task: None, expanded_tool_calls: HashSet::default(), expanded_thinking_blocks: HashSet::default(), + editing_message: None, edits_expanded: false, plan_expanded: false, editor_expanded: false, terminal_expanded: true, - message_history, - _subscriptions: [subscription], + _subscriptions: subscriptions, _cancel_task: None, } } @@ -370,7 +310,7 @@ impl AcpThreadView { } } - pub fn cancel(&mut self, cx: &mut Context) { + pub fn cancel_generation(&mut self, cx: &mut Context) { self.last_error.take(); if let Some(thread) = self.thread() { @@ -390,193 +330,118 @@ impl AcpThreadView { fn set_editor_is_expanded(&mut self, is_expanded: bool, cx: &mut Context) { self.editor_expanded = is_expanded; - self.message_editor.update(cx, |editor, _| { - if self.editor_expanded { - editor.set_mode(EditorMode::Full { - scale_ui_elements_with_buffer_font_size: false, - show_active_line_background: false, - sized_by_content: false, - }) + self.message_editor.update(cx, |editor, cx| { + if is_expanded { + editor.set_mode( + EditorMode::Full { + scale_ui_elements_with_buffer_font_size: false, + show_active_line_background: false, + sized_by_content: false, + }, + cx, + ) } else { - editor.set_mode(EditorMode::AutoHeight { - min_lines: MIN_EDITOR_LINES, - max_lines: Some(MAX_EDITOR_LINES), - }) + editor.set_mode( + EditorMode::AutoHeight { + min_lines: MIN_EDITOR_LINES, + max_lines: Some(MAX_EDITOR_LINES), + }, + cx, + ) } }); cx.notify(); } - fn chat(&mut self, _: &Chat, window: &mut Window, cx: &mut Context) { + pub fn on_message_editor_event( + &mut self, + _: &Entity, + event: &MessageEditorEvent, + window: &mut Window, + cx: &mut Context, + ) { + match event { + MessageEditorEvent::Send => self.send(window, cx), + MessageEditorEvent::Cancel => self.cancel_generation(cx), + } + } + + fn send(&mut self, window: &mut Window, cx: &mut Context) { + let contents = self + .message_editor + .update(cx, |message_editor, cx| message_editor.contents(window, cx)); + self.send_impl(contents, window, cx) + } + + fn send_impl( + &mut self, + contents: Task>>, + window: &mut Window, + cx: &mut Context, + ) { self.last_error.take(); + self.editing_message.take(); - let mut ix = 0; - let mut chunks: Vec = Vec::new(); - let project = self.project.clone(); + let Some(thread) = self.thread().cloned() else { + return; + }; + let task = cx.spawn_in(window, async move |this, cx| { + let contents = contents.await?; - let thread_store = self.thread_store.clone(); - let text_thread_store = self.text_thread_store.clone(); - - let contents = - self.mention_set - .lock() - .contents(project, thread_store, text_thread_store, window, cx); - - cx.spawn_in(window, async move |this, cx| { - let contents = match contents.await { - Ok(contents) => contents, - Err(e) => { - this.update(cx, |this, cx| { - this.last_error = - Some(cx.new(|cx| Markdown::new(e.to_string().into(), None, None, cx))); - }) - .ok(); - return; - } - }; + if contents.is_empty() { + return Ok(()); + } this.update_in(cx, |this, window, cx| { - this.message_editor.update(cx, |editor, cx| { - let text = editor.text(cx); - editor.display_map.update(cx, |map, cx| { - let snapshot = map.snapshot(cx); - for (crease_id, crease) in snapshot.crease_snapshot.creases() { - // Skip creases that have been edited out of the message buffer. - if !crease.range().start.is_valid(&snapshot.buffer_snapshot) { - continue; - } - - if let Some(mention) = contents.get(&crease_id) { - let crease_range = - crease.range().to_offset(&snapshot.buffer_snapshot); - if crease_range.start > ix { - chunks.push(text[ix..crease_range.start].into()); - } - chunks.push(acp::ContentBlock::Resource(acp::EmbeddedResource { - annotations: None, - resource: acp::EmbeddedResourceResource::TextResourceContents( - acp::TextResourceContents { - mime_type: None, - text: mention.content.clone(), - uri: mention.uri.to_uri().to_string(), - }, - ), - })); - ix = crease_range.end; - } - } - - if ix < text.len() { - let last_chunk = text[ix..].trim_end(); - if !last_chunk.is_empty() { - chunks.push(last_chunk.into()); - } - } - }) - }); - - if chunks.is_empty() { - return; - } - - let Some(thread) = this.thread() else { - return; - }; - let task = thread.update(cx, |thread, cx| thread.send(chunks.clone(), cx)); - - cx.spawn(async move |this, cx| { - let result = task.await; - - this.update(cx, |this, cx| { - if let Err(err) = result { - this.last_error = - Some(cx.new(|cx| { - Markdown::new(err.to_string().into(), None, None, cx) - })) - } - }) - }) - .detach(); - - let mention_set = this.mention_set.clone(); - this.set_editor_is_expanded(false, cx); - - this.message_editor.update(cx, |editor, cx| { - editor.clear(window, cx); - editor.remove_creases(mention_set.lock().drain(), cx) - }); - this.scroll_to_bottom(cx); + this.message_editor.update(cx, |message_editor, cx| { + message_editor.clear(window, cx); + }); + })?; + let send = thread.update(cx, |thread, cx| thread.send(contents, cx))?; + send.await + }); - this.message_history.borrow_mut().push(chunks); - }) - .ok(); + cx.spawn(async move |this, cx| { + if let Err(e) = task.await { + this.update(cx, |this, cx| { + this.last_error = + Some(cx.new(|cx| Markdown::new(e.to_string().into(), None, None, cx))); + cx.notify() + }) + .ok(); + } }) .detach(); } - fn previous_history_message( - &mut self, - _: &PreviousHistoryMessage, - window: &mut Window, - cx: &mut Context, - ) { - if self.message_set_from_history.is_none() && !self.message_editor.read(cx).is_empty(cx) { - self.message_editor.update(cx, |editor, cx| { - editor.move_up(&Default::default(), window, cx); - }); - return; - } - - self.message_set_from_history = Self::set_draft_message( - self.message_editor.clone(), - self.mention_set.clone(), - self.project.clone(), - self.message_history - .borrow_mut() - .prev() - .map(|blocks| blocks.as_slice()), - window, - cx, - ); + fn cancel_editing(&mut self, _: &ClickEvent, _window: &mut Window, cx: &mut Context) { + self.editing_message.take(); + cx.notify(); } - fn next_history_message( - &mut self, - _: &NextHistoryMessage, - window: &mut Window, - cx: &mut Context, - ) { - if self.message_set_from_history.is_none() { - self.message_editor.update(cx, |editor, cx| { - editor.move_down(&Default::default(), window, cx); - }); + fn regenerate(&mut self, _: &ClickEvent, window: &mut Window, cx: &mut Context) { + let Some(editing_message) = self.editing_message.take() else { return; - } - - let mut message_history = self.message_history.borrow_mut(); - let next_history = message_history.next(); - - let set_draft_message = Self::set_draft_message( - self.message_editor.clone(), - self.mention_set.clone(), - self.project.clone(), - Some( - next_history - .map(|blocks| blocks.as_slice()) - .unwrap_or_else(|| &[]), - ), - window, - cx, - ); - // If we reset the text to an empty string because we ran out of history, - // we don't want to mark it as coming from the history - self.message_set_from_history = if next_history.is_some() { - set_draft_message - } else { - None }; + + let Some(thread) = self.thread().cloned() else { + return; + }; + + let rewind = thread.update(cx, |thread, cx| { + thread.rewind(editing_message.message_id, cx) + }); + + let contents = editing_message + .editor + .update(cx, |message_editor, cx| message_editor.contents(window, cx)); + let task = cx.foreground_executor().spawn(async move { + rewind.await?; + contents.await + }); + self.send_impl(task, window, cx); } fn open_agent_diff(&mut self, _: &OpenAgentDiff, window: &mut Window, cx: &mut Context) { @@ -606,92 +471,6 @@ impl AcpThreadView { }) } - fn set_draft_message( - message_editor: Entity, - mention_set: Arc>, - project: Entity, - message: Option<&[acp::ContentBlock]>, - window: &mut Window, - cx: &mut Context, - ) -> Option { - cx.notify(); - - let message = message?; - - let mut text = String::new(); - let mut mentions = Vec::new(); - - for chunk in message { - match chunk { - acp::ContentBlock::Text(text_content) => { - text.push_str(&text_content.text); - } - acp::ContentBlock::Resource(acp::EmbeddedResource { - resource: acp::EmbeddedResourceResource::TextResourceContents(resource), - .. - }) => { - let path = PathBuf::from(&resource.uri); - let project_path = project.read(cx).project_path_for_absolute_path(&path, cx); - let start = text.len(); - let _ = write!(&mut text, "{}", MentionUri::File(path).to_uri()); - let end = text.len(); - if let Some(project_path) = project_path { - let filename: SharedString = project_path - .path - .file_name() - .unwrap_or_default() - .to_string_lossy() - .to_string() - .into(); - mentions.push((start..end, project_path, filename)); - } - } - acp::ContentBlock::Image(_) - | acp::ContentBlock::Audio(_) - | acp::ContentBlock::Resource(_) - | acp::ContentBlock::ResourceLink(_) => {} - } - } - - let snapshot = message_editor.update(cx, |editor, cx| { - editor.set_text(text, window, cx); - editor.buffer().read(cx).snapshot(cx) - }); - - for (range, project_path, filename) in mentions { - let crease_icon_path = if project_path.path.is_dir() { - FileIcons::get_folder_icon(false, cx) - .unwrap_or_else(|| IconName::Folder.path().into()) - } else { - FileIcons::get_icon(Path::new(project_path.path.as_ref()), cx) - .unwrap_or_else(|| IconName::File.path().into()) - }; - - let anchor = snapshot.anchor_before(range.start); - if let Some(project_path) = project.read(cx).absolute_path(&project_path, cx) { - let crease_id = crate::context_picker::insert_crease_for_mention( - anchor.excerpt_id, - anchor.text_anchor, - range.end - range.start, - filename, - crease_icon_path, - message_editor.clone(), - window, - cx, - ); - - if let Some(crease_id) = crease_id { - mention_set - .lock() - .insert(crease_id, MentionUri::File(project_path)); - } - } - } - - let snapshot = snapshot.as_singleton().unwrap().2.clone(); - Some(snapshot.text) - } - fn handle_thread_event( &mut self, thread: &Entity, @@ -968,12 +747,28 @@ impl AcpThreadView { .border_1() .border_color(cx.theme().colors().border) .text_xs() - .children(message.content.markdown().map(|md| { - self.render_markdown( - md.clone(), - user_message_markdown_style(window, cx), - ) - })), + .id("message") + .on_click(cx.listener({ + move |this, _, window, cx| this.start_editing_message(index, window, cx) + })) + .children( + if let Some(editing) = self.editing_message.as_ref() + && Some(&editing.message_id) == message.id.as_ref() + { + Some( + self.render_edit_message_editor(editing, cx) + .into_any_element(), + ) + } else { + message.content.markdown().map(|md| { + self.render_markdown( + md.clone(), + user_message_markdown_style(window, cx), + ) + .into_any_element() + }) + }, + ), ) .into_any(), AgentThreadEntry::AssistantMessage(AssistantMessage { chunks }) => { @@ -1035,7 +830,7 @@ impl AcpThreadView { }; let is_generating = matches!(thread.read(cx).status(), ThreadStatus::Generating); - if index == total_entries - 1 && !is_generating { + let primary = if index == total_entries - 1 && !is_generating { v_flex() .w_full() .child(primary) @@ -1043,6 +838,28 @@ impl AcpThreadView { .into_any_element() } else { primary + }; + + if let Some(editing) = self.editing_message.as_ref() + && editing.index < index + { + let backdrop = div() + .id(("backdrop", index)) + .size_full() + .absolute() + .inset_0() + .bg(cx.theme().colors().panel_background) + .opacity(0.8) + .block_mouse_except_scroll() + .on_click(cx.listener(Self::cancel_editing)); + + div() + .relative() + .child(backdrop) + .child(primary) + .into_any_element() + } else { + primary } } @@ -2561,34 +2378,7 @@ impl AcpThreadView { .size_full() .pt_1() .pr_2p5() - .child(div().flex_1().child({ - let settings = ThemeSettings::get_global(cx); - let font_size = TextSize::Small - .rems(cx) - .to_pixels(settings.agent_font_size(cx)); - let line_height = settings.buffer_line_height.value() * font_size; - - let text_style = TextStyle { - color: cx.theme().colors().text, - font_family: settings.buffer_font.family.clone(), - font_fallbacks: settings.buffer_font.fallbacks.clone(), - font_features: settings.buffer_font.features.clone(), - font_size: font_size.into(), - line_height: line_height.into(), - ..Default::default() - }; - - EditorElement::new( - &self.message_editor, - EditorStyle { - background: editor_bg_color, - local_player: cx.theme().players().local(), - text: text_style, - syntax: cx.theme().syntax().clone(), - ..Default::default() - }, - ) - })) + .child(self.message_editor.clone()) .child( h_flex() .absolute() @@ -2633,6 +2423,129 @@ impl AcpThreadView { .into_any() } + fn start_editing_message(&mut self, index: usize, window: &mut Window, cx: &mut Context) { + let Some(thread) = self.thread() else { + return; + }; + let Some(AgentThreadEntry::UserMessage(message)) = thread.read(cx).entries().get(index) + else { + return; + }; + let Some(message_id) = message.id.clone() else { + return; + }; + + self.list_state.scroll_to_reveal_item(index); + + let chunks = message.chunks.clone(); + let editor = cx.new(|cx| { + let mut editor = MessageEditor::new( + self.workspace.clone(), + self.project.clone(), + self.thread_store.clone(), + self.text_thread_store.clone(), + editor::EditorMode::AutoHeight { + min_lines: 1, + max_lines: None, + }, + window, + cx, + ); + editor.set_message(&chunks, window, cx); + editor + }); + let subscription = + cx.subscribe_in(&editor, window, |this, _, event, window, cx| match event { + MessageEditorEvent::Send => { + this.regenerate(&Default::default(), window, cx); + } + MessageEditorEvent::Cancel => { + this.cancel_editing(&Default::default(), window, cx); + } + }); + editor.focus_handle(cx).focus(window); + + self.editing_message.replace(EditingMessage { + index: index, + message_id: message_id.clone(), + editor, + _subscription: subscription, + }); + cx.notify(); + } + + fn render_edit_message_editor(&self, editing: &EditingMessage, cx: &Context) -> Div { + v_flex() + .w_full() + .gap_2() + .child(editing.editor.clone()) + .child( + h_flex() + .gap_1() + .child( + Icon::new(IconName::Warning) + .color(Color::Warning) + .size(IconSize::XSmall), + ) + .child( + Label::new("Editing will restart the thread from this point.") + .color(Color::Muted) + .size(LabelSize::XSmall), + ) + .child(self.render_editing_message_editor_buttons(editing, cx)), + ) + } + + fn render_editing_message_editor_buttons( + &self, + editing: &EditingMessage, + cx: &Context, + ) -> Div { + h_flex() + .gap_0p5() + .flex_1() + .justify_end() + .child( + IconButton::new("cancel-edit-message", IconName::Close) + .shape(ui::IconButtonShape::Square) + .icon_color(Color::Error) + .icon_size(IconSize::Small) + .tooltip({ + let focus_handle = editing.editor.focus_handle(cx); + move |window, cx| { + Tooltip::for_action_in( + "Cancel Edit", + &menu::Cancel, + &focus_handle, + window, + cx, + ) + } + }) + .on_click(cx.listener(Self::cancel_editing)), + ) + .child( + IconButton::new("confirm-edit-message", IconName::Return) + .disabled(editing.editor.read(cx).is_empty(cx)) + .shape(ui::IconButtonShape::Square) + .icon_color(Color::Muted) + .icon_size(IconSize::Small) + .tooltip({ + let focus_handle = editing.editor.focus_handle(cx); + move |window, cx| { + Tooltip::for_action_in( + "Regenerate", + &menu::Confirm, + &focus_handle, + window, + cx, + ) + } + }) + .on_click(cx.listener(Self::regenerate)), + ) + } + fn render_send_button(&self, cx: &mut Context) -> AnyElement { if self.thread().map_or(true, |thread| { thread.read(cx).status() == ThreadStatus::Idle @@ -2649,7 +2562,7 @@ impl AcpThreadView { button.tooltip(Tooltip::text("Type a message to submit")) }) .on_click(cx.listener(|this, _, window, cx| { - this.chat(&Chat, window, cx); + this.send(window, cx); })) .into_any_element() } else { @@ -2659,7 +2572,7 @@ impl AcpThreadView { .tooltip(move |window, cx| { Tooltip::for_action("Stop Generation", &editor::actions::Cancel, window, cx) }) - .on_click(cx.listener(|this, _event, _, cx| this.cancel(cx))) + .on_click(cx.listener(|this, _event, _, cx| this.cancel_generation(cx))) .into_any_element() } } @@ -2723,10 +2636,10 @@ impl AcpThreadView { if let Some(mention) = MentionUri::parse(&url).log_err() { workspace.update(cx, |workspace, cx| match mention { - MentionUri::File(path) => { + MentionUri::File { abs_path, .. } => { let project = workspace.project(); let Some((path, entry)) = project.update(cx, |project, cx| { - let path = project.find_project_path(path, cx)?; + let path = project.find_project_path(abs_path, cx)?; let entry = project.entry_for_path(&path, cx)?; Some((path, entry)) }) else { @@ -3175,57 +3088,11 @@ impl AcpThreadView { paths: Vec, _added_worktrees: Vec>, window: &mut Window, - cx: &mut Context<'_, Self>, + cx: &mut Context, ) { - let buffer = self.message_editor.read(cx).buffer().clone(); - let Some((&excerpt_id, _, _)) = buffer.read(cx).snapshot(cx).as_singleton() else { - return; - }; - let Some(buffer) = buffer.read(cx).as_singleton() else { - return; - }; - for path in paths { - let Some(entry) = self.project.read(cx).entry_for_path(&path, cx) else { - continue; - }; - let Some(abs_path) = self.project.read(cx).absolute_path(&path, cx) else { - continue; - }; - - let anchor = buffer.update(cx, |buffer, _cx| buffer.anchor_before(buffer.len())); - let path_prefix = abs_path - .file_name() - .unwrap_or(path.path.as_os_str()) - .display() - .to_string(); - let Some(completion) = ContextPickerCompletionProvider::completion_for_path( - path, - &path_prefix, - false, - entry.is_dir(), - excerpt_id, - anchor..anchor, - self.message_editor.clone(), - self.mention_set.clone(), - self.project.clone(), - cx, - ) else { - continue; - }; - - self.message_editor.update(cx, |message_editor, cx| { - message_editor.edit( - [( - multi_buffer::Anchor::max()..multi_buffer::Anchor::max(), - completion.new_text, - )], - cx, - ); - }); - if let Some(confirm) = completion.confirm.clone() { - confirm(CompletionIntent::Complete, window, cx); - } - } + self.message_editor.update(cx, |message_editor, cx| { + message_editor.insert_dragged_files(paths, window, cx); + }) } } @@ -3242,9 +3109,6 @@ impl Render for AcpThreadView { v_flex() .size_full() .key_context("AcpThread") - .on_action(cx.listener(Self::chat)) - .on_action(cx.listener(Self::previous_history_message)) - .on_action(cx.listener(Self::next_history_message)) .on_action(cx.listener(Self::open_agent_diff)) .bg(cx.theme().colors().panel_background) .child(match &self.thread_state { @@ -3540,13 +3404,16 @@ fn terminal_command_markdown_style(window: &Window, cx: &App) -> MarkdownStyle { } #[cfg(test)] -mod tests { +pub(crate) mod tests { + use std::{path::Path, sync::Arc}; + use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::SessionId; use editor::EditorSettings; use fs::FakeFs; use futures::future::try_join_all; use gpui::{SemanticVersion, TestAppContext, VisualTestContext}; + use parking_lot::Mutex; use rand::Rng; use settings::SettingsStore; @@ -3576,7 +3443,7 @@ mod tests { cx.deactivate_window(); thread_view.update_in(cx, |thread_view, window, cx| { - thread_view.chat(&Chat, window, cx); + thread_view.send(window, cx); }); cx.run_until_parked(); @@ -3603,7 +3470,7 @@ mod tests { cx.deactivate_window(); thread_view.update_in(cx, |thread_view, window, cx| { - thread_view.chat(&Chat, window, cx); + thread_view.send(window, cx); }); cx.run_until_parked(); @@ -3649,7 +3516,7 @@ mod tests { cx.deactivate_window(); thread_view.update_in(cx, |thread_view, window, cx| { - thread_view.chat(&Chat, window, cx); + thread_view.send(window, cx); }); cx.run_until_parked(); @@ -3683,9 +3550,6 @@ mod tests { project, thread_store.clone(), text_thread_store.clone(), - Rc::new(RefCell::new(MessageHistory::default())), - 1, - None, window, cx, ) @@ -3899,7 +3763,7 @@ mod tests { } } - fn init_test(cx: &mut TestAppContext) { + pub(crate) fn init_test(cx: &mut TestAppContext) { cx.update(|cx| { let settings_store = SettingsStore::test(cx); cx.set_global(settings_store); diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index e47cbe3714..73915195f5 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -1,4 +1,3 @@ -use std::cell::RefCell; use std::ops::{Not, Range}; use std::path::Path; use std::rc::Rc; @@ -11,7 +10,6 @@ use serde::{Deserialize, Serialize}; use crate::NewExternalAgentThread; use crate::agent_diff::AgentDiffThread; -use crate::message_editor::{MAX_EDITOR_LINES, MIN_EDITOR_LINES}; use crate::{ AddContextServer, AgentDiffPane, ContinueThread, ContinueWithBurnMode, DeleteRecentlyOpenThread, ExpandMessageEditor, Follow, InlineAssistant, NewTextThread, @@ -477,8 +475,6 @@ pub struct AgentPanel { configuration_subscription: Option, local_timezone: UtcOffset, active_view: ActiveView, - acp_message_history: - Rc>>>, previous_view: Option, history_store: Entity, history: Entity, @@ -766,7 +762,6 @@ impl AgentPanel { .unwrap(), inline_assist_context_store, previous_view: None, - acp_message_history: Default::default(), history_store: history_store.clone(), history: cx.new(|cx| ThreadHistory::new(weak_self, history_store, window, cx)), hovered_recent_history_item: None, @@ -824,7 +819,9 @@ impl AgentPanel { thread.update(cx, |thread, cx| thread.cancel_last_completion(window, cx)); } ActiveView::ExternalAgentThread { thread_view, .. } => { - thread_view.update(cx, |thread_element, cx| thread_element.cancel(cx)); + thread_view.update(cx, |thread_element, cx| { + thread_element.cancel_generation(cx) + }); } ActiveView::TextThread { .. } | ActiveView::History | ActiveView::Configuration => {} } @@ -963,7 +960,6 @@ impl AgentPanel { ) { let workspace = self.workspace.clone(); let project = self.project.clone(); - let message_history = self.acp_message_history.clone(); let fs = self.fs.clone(); const LAST_USED_EXTERNAL_AGENT_KEY: &str = "agent_panel__last_used_external_agent"; @@ -1016,9 +1012,6 @@ impl AgentPanel { project, thread_store.clone(), text_thread_store.clone(), - message_history, - MIN_EDITOR_LINES, - Some(MAX_EDITOR_LINES), window, cx, ) @@ -1575,8 +1568,6 @@ impl AgentPanel { self.active_view = new_view; } - self.acp_message_history.borrow_mut().reset_position(); - self.focus_handle(cx).focus(window); } diff --git a/crates/zed_actions/src/lib.rs b/crates/zed_actions/src/lib.rs index 64891b6973..9455369e9a 100644 --- a/crates/zed_actions/src/lib.rs +++ b/crates/zed_actions/src/lib.rs @@ -285,10 +285,6 @@ pub mod agent { ResetOnboarding, /// Starts a chat conversation with the agent. Chat, - /// Displays the previous message in the history. - PreviousHistoryMessage, - /// Displays the next message in the history. - NextHistoryMessage, /// Toggles the language model selector dropdown. #[action(deprecated_aliases = ["assistant::ToggleModelSelector", "assistant2::ToggleModelSelector"])] ToggleModelSelector From ba2c45bc53194d3e2b94d909966a06f213017de5 Mon Sep 17 00:00:00 2001 From: David Kleingeld Date: Thu, 14 Aug 2025 17:02:51 +0200 Subject: [PATCH 39/74] Add FutureExt::with_timeout and use it for for Room::maintain_connection (#36175) Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra --- crates/call/src/call_impl/room.rs | 86 ++++++++++++++--------------- crates/gpui/src/app/test_context.rs | 4 +- crates/gpui/src/gpui.rs | 2 +- crates/gpui/src/util.rs | 73 ++++++++++++++++++++---- 4 files changed, 105 insertions(+), 60 deletions(-) diff --git a/crates/call/src/call_impl/room.rs b/crates/call/src/call_impl/room.rs index afeee4c924..73cb8518a6 100644 --- a/crates/call/src/call_impl/room.rs +++ b/crates/call/src/call_impl/room.rs @@ -10,10 +10,10 @@ use client::{ }; use collections::{BTreeMap, HashMap, HashSet}; use fs::Fs; -use futures::{FutureExt, StreamExt}; +use futures::StreamExt; use gpui::{ - App, AppContext as _, AsyncApp, Context, Entity, EventEmitter, ScreenCaptureSource, - ScreenCaptureStream, Task, WeakEntity, + App, AppContext as _, AsyncApp, Context, Entity, EventEmitter, FutureExt as _, + ScreenCaptureSource, ScreenCaptureStream, Task, Timeout, WeakEntity, }; use gpui_tokio::Tokio; use language::LanguageRegistry; @@ -370,57 +370,53 @@ impl Room { })?; // Wait for client to re-establish a connection to the server. - { - let mut reconnection_timeout = - cx.background_executor().timer(RECONNECT_TIMEOUT).fuse(); - let client_reconnection = async { - let mut remaining_attempts = 3; - while remaining_attempts > 0 { - if client_status.borrow().is_connected() { - log::info!("client reconnected, attempting to rejoin room"); + let executor = cx.background_executor().clone(); + let client_reconnection = async { + let mut remaining_attempts = 3; + while remaining_attempts > 0 { + if client_status.borrow().is_connected() { + log::info!("client reconnected, attempting to rejoin room"); - let Some(this) = this.upgrade() else { break }; - match this.update(cx, |this, cx| this.rejoin(cx)) { - Ok(task) => { - if task.await.log_err().is_some() { - return true; - } else { - remaining_attempts -= 1; - } + let Some(this) = this.upgrade() else { break }; + match this.update(cx, |this, cx| this.rejoin(cx)) { + Ok(task) => { + if task.await.log_err().is_some() { + return true; + } else { + remaining_attempts -= 1; } - Err(_app_dropped) => return false, } - } else if client_status.borrow().is_signed_out() { - return false; + Err(_app_dropped) => return false, } - - log::info!( - "waiting for client status change, remaining attempts {}", - remaining_attempts - ); - client_status.next().await; + } else if client_status.borrow().is_signed_out() { + return false; } - false + + log::info!( + "waiting for client status change, remaining attempts {}", + remaining_attempts + ); + client_status.next().await; } - .fuse(); - futures::pin_mut!(client_reconnection); + false + }; - futures::select_biased! { - reconnected = client_reconnection => { - if reconnected { - log::info!("successfully reconnected to room"); - // If we successfully joined the room, go back around the loop - // waiting for future connection status changes. - continue; - } - } - _ = reconnection_timeout => { - log::info!("room reconnection timeout expired"); - } + match client_reconnection + .with_timeout(RECONNECT_TIMEOUT, &executor) + .await + { + Ok(true) => { + log::info!("successfully reconnected to room"); + // If we successfully joined the room, go back around the loop + // waiting for future connection status changes. + continue; + } + Ok(false) => break, + Err(Timeout) => { + log::info!("room reconnection timeout expired"); + break; } } - - break; } } diff --git a/crates/gpui/src/app/test_context.rs b/crates/gpui/src/app/test_context.rs index 35e6032671..a96c24432a 100644 --- a/crates/gpui/src/app/test_context.rs +++ b/crates/gpui/src/app/test_context.rs @@ -585,7 +585,7 @@ impl Entity { cx.executor().advance_clock(advance_clock_by); async move { - let notification = crate::util::timeout(duration, rx.recv()) + let notification = crate::util::smol_timeout(duration, rx.recv()) .await .expect("next notification timed out"); drop(subscription); @@ -629,7 +629,7 @@ impl Entity { let handle = self.downgrade(); async move { - crate::util::timeout(Duration::from_secs(1), async move { + crate::util::smol_timeout(Duration::from_secs(1), async move { loop { { let cx = cx.borrow(); diff --git a/crates/gpui/src/gpui.rs b/crates/gpui/src/gpui.rs index 09799eb910..f0ce04a915 100644 --- a/crates/gpui/src/gpui.rs +++ b/crates/gpui/src/gpui.rs @@ -157,7 +157,7 @@ pub use taffy::{AvailableSpace, LayoutId}; #[cfg(any(test, feature = "test-support"))] pub use test::*; pub use text_system::*; -pub use util::arc_cow::ArcCow; +pub use util::{FutureExt, Timeout, arc_cow::ArcCow}; pub use view::*; pub use window::*; diff --git a/crates/gpui/src/util.rs b/crates/gpui/src/util.rs index 5e92335fdc..f357034fbf 100644 --- a/crates/gpui/src/util.rs +++ b/crates/gpui/src/util.rs @@ -1,13 +1,11 @@ -use std::sync::atomic::AtomicUsize; -use std::sync::atomic::Ordering::SeqCst; -#[cfg(any(test, feature = "test-support"))] -use std::time::Duration; - -#[cfg(any(test, feature = "test-support"))] -use futures::Future; - -#[cfg(any(test, feature = "test-support"))] -use smol::future::FutureExt; +use crate::{BackgroundExecutor, Task}; +use std::{ + future::Future, + pin::Pin, + sync::atomic::{AtomicUsize, Ordering::SeqCst}, + task, + time::Duration, +}; pub use util::*; @@ -70,8 +68,59 @@ pub trait FluentBuilder { } } +/// Extensions for Future types that provide additional combinators and utilities. +pub trait FutureExt { + /// Requires a Future to complete before the specified duration has elapsed. + /// Similar to tokio::timeout. + fn with_timeout(self, timeout: Duration, executor: &BackgroundExecutor) -> WithTimeout + where + Self: Sized; +} + +impl FutureExt for T { + fn with_timeout(self, timeout: Duration, executor: &BackgroundExecutor) -> WithTimeout + where + Self: Sized, + { + WithTimeout { + future: self, + timer: executor.timer(timeout), + } + } +} + +pub struct WithTimeout { + future: T, + timer: Task<()>, +} + +#[derive(Debug, thiserror::Error)] +#[error("Timed out before future resolved")] +/// Error returned by with_timeout when the timeout duration elapsed before the future resolved +pub struct Timeout; + +impl Future for WithTimeout { + type Output = Result; + + fn poll(self: Pin<&mut Self>, cx: &mut task::Context) -> task::Poll { + // SAFETY: the fields of Timeout are private and we never move the future ourselves + // And its already pinned since we are being polled (all futures need to be pinned to be polled) + let this = unsafe { self.get_unchecked_mut() }; + let future = unsafe { Pin::new_unchecked(&mut this.future) }; + let timer = unsafe { Pin::new_unchecked(&mut this.timer) }; + + if let task::Poll::Ready(output) = future.poll(cx) { + task::Poll::Ready(Ok(output)) + } else if timer.poll(cx).is_ready() { + task::Poll::Ready(Err(Timeout)) + } else { + task::Poll::Pending + } + } +} + #[cfg(any(test, feature = "test-support"))] -pub async fn timeout(timeout: Duration, f: F) -> Result +pub async fn smol_timeout(timeout: Duration, f: F) -> Result where F: Future, { @@ -80,7 +129,7 @@ where Err(()) }; let future = async move { Ok(f.await) }; - timer.race(future).await + smol::future::FutureExt::race(timer, future).await } /// Increment the given atomic counter if it is not zero. From f514c7cc187eeb814415d0e78546ac780c857900 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 14 Aug 2025 11:22:38 -0400 Subject: [PATCH 40/74] Emit a `BreadcrumbsChanged` event when associated settings changed (#36177) Closes https://github.com/zed-industries/zed/issues/36149 Release Notes: - Fixed a bug where changing the `toolbar.breadcrumbs` setting didn't immediately update the UI when saving the `settings.json` file. --- crates/editor/src/editor.rs | 6 ++++++ crates/editor/src/items.rs | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index cbee9021ed..689f397341 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -20209,6 +20209,7 @@ impl Editor { ); let old_cursor_shape = self.cursor_shape; + let old_show_breadcrumbs = self.show_breadcrumbs; { let editor_settings = EditorSettings::get_global(cx); @@ -20222,6 +20223,10 @@ impl Editor { cx.emit(EditorEvent::CursorShapeChanged); } + if old_show_breadcrumbs != self.show_breadcrumbs { + cx.emit(EditorEvent::BreadcrumbsChanged); + } + let project_settings = ProjectSettings::get_global(cx); self.serialize_dirty_buffers = !self.mode.is_minimap() && project_settings.session.restore_unsaved_buffers; @@ -22843,6 +22848,7 @@ pub enum EditorEvent { }, Reloaded, CursorShapeChanged, + BreadcrumbsChanged, PushedToNavHistory { anchor: Anchor, is_deactivate: bool, diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 1da82c605d..480757a491 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -1036,6 +1036,10 @@ impl Item for Editor { f(ItemEvent::UpdateBreadcrumbs); } + EditorEvent::BreadcrumbsChanged => { + f(ItemEvent::UpdateBreadcrumbs); + } + EditorEvent::DirtyChanged => { f(ItemEvent::UpdateTab); } From 528d56e8072048b9b588fd60786c937be018f94d Mon Sep 17 00:00:00 2001 From: Ben Kunkle Date: Thu, 14 Aug 2025 10:29:58 -0500 Subject: [PATCH 41/74] keymap_ui: Add open keymap JSON button (#36182) Closes #ISSUE Release Notes: - Keymap Editor: Added a button in the top left to allow opening the keymap JSON file. Right clicking the button provides shortcuts to opening the default Zed and Vim keymaps as well. --- Cargo.lock | 2 ++ assets/icons/json.svg | 4 ++++ crates/icons/src/icons.rs | 1 + crates/settings_ui/Cargo.toml | 2 ++ crates/settings_ui/src/keybindings.rs | 29 ++++++++++++++++++++++++++- 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 assets/icons/json.svg diff --git a/Cargo.lock b/Cargo.lock index cb087f43b7..96cc1581a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15054,8 +15054,10 @@ dependencies = [ "ui", "ui_input", "util", + "vim", "workspace", "workspace-hack", + "zed_actions", ] [[package]] diff --git a/assets/icons/json.svg b/assets/icons/json.svg new file mode 100644 index 0000000000..5f012f8838 --- /dev/null +++ b/assets/icons/json.svg @@ -0,0 +1,4 @@ + + + + diff --git a/crates/icons/src/icons.rs b/crates/icons/src/icons.rs index f5c2a83fec..8bd76cbecf 100644 --- a/crates/icons/src/icons.rs +++ b/crates/icons/src/icons.rs @@ -140,6 +140,7 @@ pub enum IconName { Image, Indicator, Info, + Json, Keyboard, Library, LineHeight, diff --git a/crates/settings_ui/Cargo.toml b/crates/settings_ui/Cargo.toml index a4c47081c6..8a151359ec 100644 --- a/crates/settings_ui/Cargo.toml +++ b/crates/settings_ui/Cargo.toml @@ -42,8 +42,10 @@ tree-sitter-rust.workspace = true ui.workspace = true ui_input.workspace = true util.workspace = true +vim.workspace = true workspace-hack.workspace = true workspace.workspace = true +zed_actions.workspace = true [dev-dependencies] db = {"workspace"= true, "features" = ["test-support"]} diff --git a/crates/settings_ui/src/keybindings.rs b/crates/settings_ui/src/keybindings.rs index a62c669488..1aaab211aa 100644 --- a/crates/settings_ui/src/keybindings.rs +++ b/crates/settings_ui/src/keybindings.rs @@ -23,7 +23,7 @@ use settings::{BaseKeymap, KeybindSource, KeymapFile, Settings as _, SettingsAss use ui::{ ActiveTheme as _, App, Banner, BorrowAppContext, ContextMenu, IconButtonShape, Indicator, Modal, ModalFooter, ModalHeader, ParentElement as _, Render, Section, SharedString, - Styled as _, Tooltip, Window, prelude::*, + Styled as _, Tooltip, Window, prelude::*, right_click_menu, }; use ui_input::SingleLineInput; use util::ResultExt; @@ -1536,6 +1536,33 @@ impl Render for KeymapEditor { .child( h_flex() .gap_2() + .child( + right_click_menu("open-keymap-menu") + .menu(|window, cx| { + ContextMenu::build(window, cx, |menu, _, _| { + menu.header("Open Keymap JSON") + .action("User", zed_actions::OpenKeymap.boxed_clone()) + .action("Zed Default", zed_actions::OpenDefaultKeymap.boxed_clone()) + .action("Vim Default", vim::OpenDefaultKeymap.boxed_clone()) + }) + }) + .anchor(gpui::Corner::TopLeft) + .trigger(|open, _, _| + IconButton::new( + "OpenKeymapJsonButton", + IconName::Json + ) + .shape(ui::IconButtonShape::Square) + .when(!open, |this| + this.tooltip(move |window, cx| { + Tooltip::with_meta("Open Keymap JSON", Some(&zed_actions::OpenKeymap),"Right click to view more options", window, cx) + }) + ) + .on_click(|_, window, cx| { + window.dispatch_action(zed_actions::OpenKeymap.boxed_clone(), cx); + }) + ) + ) .child( div() .key_context({ From 20be133713690fd92148a448bd57146fff73cbce Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Thu, 14 Aug 2025 18:04:01 +0100 Subject: [PATCH 42/74] helix: Allow yank without a selection (#35612) Related https://github.com/zed-industries/zed/issues/4642 Release Notes: - Helix: without active selection, pressing `y` in helix mode will yank a single character under cursor. --------- Co-authored-by: Conrad Irwin --- assets/keymaps/vim.json | 2 +- crates/vim/src/helix.rs | 69 +++++++++++++++++++++++++ crates/vim/src/test/vim_test_context.rs | 30 +++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index 98f9cafc40..a3f68a7730 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -390,7 +390,7 @@ "right": "vim::WrappingRight", "h": "vim::WrappingLeft", "l": "vim::WrappingRight", - "y": "editor::Copy", + "y": "vim::HelixYank", "alt-;": "vim::OtherEnd", "ctrl-r": "vim::Redo", "f": ["vim::PushFindForward", { "before": false, "multiline": true }], diff --git a/crates/vim/src/helix.rs b/crates/vim/src/helix.rs index 686c74f65e..29633ddef9 100644 --- a/crates/vim/src/helix.rs +++ b/crates/vim/src/helix.rs @@ -15,6 +15,8 @@ actions!( [ /// Switches to normal mode after the cursor (Helix-style). HelixNormalAfter, + /// Yanks the current selection or character if no selection. + HelixYank, /// Inserts at the beginning of the selection. HelixInsert, /// Appends at the end of the selection. @@ -26,6 +28,7 @@ pub fn register(editor: &mut Editor, cx: &mut Context) { Vim::action(editor, cx, Vim::helix_normal_after); Vim::action(editor, cx, Vim::helix_insert); Vim::action(editor, cx, Vim::helix_append); + Vim::action(editor, cx, Vim::helix_yank); } impl Vim { @@ -310,6 +313,47 @@ impl Vim { } } + pub fn helix_yank(&mut self, _: &HelixYank, window: &mut Window, cx: &mut Context) { + self.update_editor(cx, |vim, editor, cx| { + let has_selection = editor + .selections + .all_adjusted(cx) + .iter() + .any(|selection| !selection.is_empty()); + + if !has_selection { + // If no selection, expand to current character (like 'v' does) + editor.change_selections(Default::default(), window, cx, |s| { + s.move_with(|map, selection| { + let head = selection.head(); + let new_head = movement::saturating_right(map, head); + selection.set_tail(head, SelectionGoal::None); + selection.set_head(new_head, SelectionGoal::None); + }); + }); + vim.yank_selections_content( + editor, + crate::motion::MotionKind::Exclusive, + window, + cx, + ); + editor.change_selections(Default::default(), window, cx, |s| { + s.move_with(|_map, selection| { + selection.collapse_to(selection.start, SelectionGoal::None); + }); + }); + } else { + // Yank the selection(s) + vim.yank_selections_content( + editor, + crate::motion::MotionKind::Exclusive, + window, + cx, + ); + } + }); + } + fn helix_insert(&mut self, _: &HelixInsert, window: &mut Window, cx: &mut Context) { self.start_recording(cx); self.update_editor(cx, |_, editor, cx| { @@ -703,4 +747,29 @@ mod test { cx.assert_state("«xxˇ»", Mode::HelixNormal); } + + #[gpui::test] + async fn test_helix_yank(cx: &mut gpui::TestAppContext) { + let mut cx = VimTestContext::new(cx, true).await; + cx.enable_helix(); + + // Test yanking current character with no selection + cx.set_state("hello ˇworld", Mode::HelixNormal); + cx.simulate_keystrokes("y"); + + // Test cursor remains at the same position after yanking single character + cx.assert_state("hello ˇworld", Mode::HelixNormal); + cx.shared_clipboard().assert_eq("w"); + + // Move cursor and yank another character + cx.simulate_keystrokes("l"); + cx.simulate_keystrokes("y"); + cx.shared_clipboard().assert_eq("o"); + + // Test yanking with existing selection + cx.set_state("hello «worlˇ»d", Mode::HelixNormal); + cx.simulate_keystrokes("y"); + cx.shared_clipboard().assert_eq("worl"); + cx.assert_state("hello «worlˇ»d", Mode::HelixNormal); + } } diff --git a/crates/vim/src/test/vim_test_context.rs b/crates/vim/src/test/vim_test_context.rs index 904e48e5a3..5b6cb55e8c 100644 --- a/crates/vim/src/test/vim_test_context.rs +++ b/crates/vim/src/test/vim_test_context.rs @@ -143,6 +143,16 @@ impl VimTestContext { }) } + pub fn enable_helix(&mut self) { + self.cx.update(|_, cx| { + SettingsStore::update_global(cx, |store, cx| { + store.update_user_settings::(cx, |s| { + *s = Some(true) + }); + }); + }) + } + pub fn mode(&mut self) -> Mode { self.update_editor(|editor, _, cx| editor.addon::().unwrap().entity.read(cx).mode) } @@ -210,6 +220,26 @@ impl VimTestContext { assert_eq!(self.mode(), Mode::Normal, "{}", self.assertion_context()); assert_eq!(self.active_operator(), None, "{}", self.assertion_context()); } + + pub fn shared_clipboard(&mut self) -> VimClipboard { + VimClipboard { + editor: self + .read_from_clipboard() + .map(|item| item.text().unwrap().to_string()) + .unwrap_or_default(), + } + } +} + +pub struct VimClipboard { + editor: String, +} + +impl VimClipboard { + #[track_caller] + pub fn assert_eq(&self, expected: &str) { + assert_eq!(self.editor, expected); + } } impl Deref for VimTestContext { From 9a2b7ef372021e5bcad759a2dc871e0743b602c4 Mon Sep 17 00:00:00 2001 From: fantacell Date: Thu, 14 Aug 2025 19:04:07 +0200 Subject: [PATCH 43/74] helix: Change f and t motions (#35216) In vim and zed (vim and helix modes) typing "tx" will jump before the next `x`, but typing it again won't do anything. But in helix the cursor just jumps before the `x` after that. I added that in helix mode. This also solves another small issue where the selection doesn't include the first `x` after typing "fx" twice. And similarly after typing "Fx" or "Tx" the selection should include the character that the motion startet on. Release Notes: - helix: Fixed inconsistencies in the "f" and "t" motions --- crates/text/src/selection.rs | 13 ++ crates/vim/src/helix.rs | 290 ++++++++++++++++++----------------- crates/vim/src/motion.rs | 3 +- 3 files changed, 162 insertions(+), 144 deletions(-) diff --git a/crates/text/src/selection.rs b/crates/text/src/selection.rs index 18b82dbb6a..d3c280bde8 100644 --- a/crates/text/src/selection.rs +++ b/crates/text/src/selection.rs @@ -104,6 +104,19 @@ impl Selection { self.goal = new_goal; } + pub fn set_head_tail(&mut self, head: T, tail: T, new_goal: SelectionGoal) { + if head < tail { + self.reversed = true; + self.start = head; + self.end = tail; + } else { + self.reversed = false; + self.start = tail; + self.end = head; + } + self.goal = new_goal; + } + pub fn swap_head_tail(&mut self) { if self.reversed { self.reversed = false; diff --git a/crates/vim/src/helix.rs b/crates/vim/src/helix.rs index 29633ddef9..0c8c06d8ab 100644 --- a/crates/vim/src/helix.rs +++ b/crates/vim/src/helix.rs @@ -1,9 +1,11 @@ +use editor::display_map::DisplaySnapshot; use editor::{DisplayPoint, Editor, SelectionEffects, ToOffset, ToPoint, movement}; use gpui::{Action, actions}; use gpui::{Context, Window}; use language::{CharClassifier, CharKind}; use text::{Bias, SelectionGoal}; +use crate::motion; use crate::{ Vim, motion::{Motion, right}, @@ -58,6 +60,35 @@ impl Vim { self.helix_move_cursor(motion, times, window, cx); } + /// Updates all selections based on where the cursors are. + fn helix_new_selections( + &mut self, + window: &mut Window, + cx: &mut Context, + mut change: impl FnMut( + // the start of the cursor + DisplayPoint, + &DisplaySnapshot, + ) -> Option<(DisplayPoint, DisplayPoint)>, + ) { + self.update_editor(cx, |_, editor, cx| { + editor.change_selections(Default::default(), window, cx, |s| { + s.move_with(|map, selection| { + let cursor_start = if selection.reversed || selection.is_empty() { + selection.head() + } else { + movement::left(map, selection.head()) + }; + let Some((head, tail)) = change(cursor_start, map) else { + return; + }; + + selection.set_head_tail(head, tail, SelectionGoal::None); + }); + }); + }); + } + fn helix_find_range_forward( &mut self, times: Option, @@ -65,49 +96,30 @@ impl Vim { cx: &mut Context, mut is_boundary: impl FnMut(char, char, &CharClassifier) -> bool, ) { - self.update_editor(cx, |_, editor, cx| { - editor.change_selections(Default::default(), window, cx, |s| { - s.move_with(|map, selection| { - let times = times.unwrap_or(1); - let new_goal = SelectionGoal::None; - let mut head = selection.head(); - let mut tail = selection.tail(); + let times = times.unwrap_or(1); + self.helix_new_selections(window, cx, |cursor, map| { + let mut head = movement::right(map, cursor); + let mut tail = cursor; + let classifier = map.buffer_snapshot.char_classifier_at(head.to_point(map)); + if head == map.max_point() { + return None; + } + for _ in 0..times { + let (maybe_next_tail, next_head) = + movement::find_boundary_trail(map, head, |left, right| { + is_boundary(left, right, &classifier) + }); - if head == map.max_point() { - return; - } + if next_head == head && maybe_next_tail.unwrap_or(next_head) == tail { + break; + } - // collapse to block cursor - if tail < head { - tail = movement::left(map, head); - } else { - tail = head; - head = movement::right(map, head); - } - - // create a classifier - let classifier = map.buffer_snapshot.char_classifier_at(head.to_point(map)); - - for _ in 0..times { - let (maybe_next_tail, next_head) = - movement::find_boundary_trail(map, head, |left, right| { - is_boundary(left, right, &classifier) - }); - - if next_head == head && maybe_next_tail.unwrap_or(next_head) == tail { - break; - } - - head = next_head; - if let Some(next_tail) = maybe_next_tail { - tail = next_tail; - } - } - - selection.set_tail(tail, new_goal); - selection.set_head(head, new_goal); - }); - }); + head = next_head; + if let Some(next_tail) = maybe_next_tail { + tail = next_tail; + } + } + Some((head, tail)) }); } @@ -118,56 +130,33 @@ impl Vim { cx: &mut Context, mut is_boundary: impl FnMut(char, char, &CharClassifier) -> bool, ) { - self.update_editor(cx, |_, editor, cx| { - editor.change_selections(Default::default(), window, cx, |s| { - s.move_with(|map, selection| { - let times = times.unwrap_or(1); - let new_goal = SelectionGoal::None; - let mut head = selection.head(); - let mut tail = selection.tail(); + let times = times.unwrap_or(1); + self.helix_new_selections(window, cx, |cursor, map| { + let mut head = cursor; + // The original cursor was one character wide, + // but the search starts from the left side of it, + // so to include that space the selection must end one character to the right. + let mut tail = movement::right(map, cursor); + let classifier = map.buffer_snapshot.char_classifier_at(head.to_point(map)); + if head == DisplayPoint::zero() { + return None; + } + for _ in 0..times { + let (maybe_next_tail, next_head) = + movement::find_preceding_boundary_trail(map, head, |left, right| { + is_boundary(left, right, &classifier) + }); - if head == DisplayPoint::zero() { - return; - } + if next_head == head && maybe_next_tail.unwrap_or(next_head) == tail { + break; + } - // collapse to block cursor - if tail < head { - tail = movement::left(map, head); - } else { - tail = head; - head = movement::right(map, head); - } - - selection.set_head(head, new_goal); - selection.set_tail(tail, new_goal); - // flip the selection - selection.swap_head_tail(); - head = selection.head(); - tail = selection.tail(); - - // create a classifier - let classifier = map.buffer_snapshot.char_classifier_at(head.to_point(map)); - - for _ in 0..times { - let (maybe_next_tail, next_head) = - movement::find_preceding_boundary_trail(map, head, |left, right| { - is_boundary(left, right, &classifier) - }); - - if next_head == head && maybe_next_tail.unwrap_or(next_head) == tail { - break; - } - - head = next_head; - if let Some(next_tail) = maybe_next_tail { - tail = next_tail; - } - } - - selection.set_tail(tail, new_goal); - selection.set_head(head, new_goal); - }); - }) + head = next_head; + if let Some(next_tail) = maybe_next_tail { + tail = next_tail; + } + } + Some((head, tail)) }); } @@ -255,58 +244,53 @@ impl Vim { found }) } - Motion::FindForward { .. } => { - self.update_editor(cx, |_, editor, cx| { - let text_layout_details = editor.text_layout_details(window); - editor.change_selections(Default::default(), window, cx, |s| { - s.move_with(|map, selection| { - let goal = selection.goal; - let cursor = if selection.is_empty() || selection.reversed { - selection.head() - } else { - movement::left(map, selection.head()) - }; - - let (point, goal) = motion - .move_point( - map, - cursor, - selection.goal, - times, - &text_layout_details, - ) - .unwrap_or((cursor, goal)); - selection.set_tail(selection.head(), goal); - selection.set_head(movement::right(map, point), goal); - }) - }); + Motion::FindForward { + before, + char, + mode, + smartcase, + } => { + self.helix_new_selections(window, cx, |cursor, map| { + let start = cursor; + let mut last_boundary = start; + for _ in 0..times.unwrap_or(1) { + last_boundary = movement::find_boundary( + map, + movement::right(map, last_boundary), + mode, + |left, right| { + let current_char = if before { right } else { left }; + motion::is_character_match(char, current_char, smartcase) + }, + ); + } + Some((last_boundary, start)) }); } - Motion::FindBackward { .. } => { - self.update_editor(cx, |_, editor, cx| { - let text_layout_details = editor.text_layout_details(window); - editor.change_selections(Default::default(), window, cx, |s| { - s.move_with(|map, selection| { - let goal = selection.goal; - let cursor = if selection.is_empty() || selection.reversed { - selection.head() - } else { - movement::left(map, selection.head()) - }; - - let (point, goal) = motion - .move_point( - map, - cursor, - selection.goal, - times, - &text_layout_details, - ) - .unwrap_or((cursor, goal)); - selection.set_tail(selection.head(), goal); - selection.set_head(point, goal); - }) - }); + Motion::FindBackward { + after, + char, + mode, + smartcase, + } => { + self.helix_new_selections(window, cx, |cursor, map| { + let start = cursor; + let mut last_boundary = start; + for _ in 0..times.unwrap_or(1) { + last_boundary = movement::find_preceding_boundary_display_point( + map, + last_boundary, + mode, + |left, right| { + let current_char = if after { left } else { right }; + motion::is_character_match(char, current_char, smartcase) + }, + ); + } + // The original cursor was one character wide, + // but the search started from the left side of it, + // so to include that space the selection must end one character to the right. + Some((last_boundary, movement::right(map, start))) }); } _ => self.helix_move_and_collapse(motion, times, window, cx), @@ -630,13 +614,33 @@ mod test { Mode::HelixNormal, ); - cx.simulate_keystrokes("2 T r"); + cx.simulate_keystrokes("F e F e"); cx.assert_state( indoc! {" - The quick br«ˇown - fox jumps over - the laz»y dog."}, + The quick brown + fox jumps ov«ˇer + the» lazy dog."}, + Mode::HelixNormal, + ); + + cx.simulate_keystrokes("e 2 F e"); + + cx.assert_state( + indoc! {" + Th«ˇe quick brown + fox jumps over» + the lazy dog."}, + Mode::HelixNormal, + ); + + cx.simulate_keystrokes("t r t r"); + + cx.assert_state( + indoc! {" + The quick «brown + fox jumps oveˇ»r + the lazy dog."}, Mode::HelixNormal, ); } diff --git a/crates/vim/src/motion.rs b/crates/vim/src/motion.rs index 7ef883f406..a6a07e7b2f 100644 --- a/crates/vim/src/motion.rs +++ b/crates/vim/src/motion.rs @@ -2639,7 +2639,8 @@ fn find_backward( } } -fn is_character_match(target: char, other: char, smartcase: bool) -> bool { +/// Returns true if one char is equal to the other or its uppercase variant (if smartcase is true). +pub fn is_character_match(target: char, other: char, smartcase: bool) -> bool { if smartcase { if target.is_uppercase() { target == other From 5a9546ff4badfb2c153663d51c41297f60ed25bc Mon Sep 17 00:00:00 2001 From: Mostafa Khaled <112074172+m04f@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:04:38 +0300 Subject: [PATCH 44/74] Add alt-s to helix mode (#33918) Closes #31562 Release Notes: - Helix: bind alt-s to SplitSelectionIntoLines --------- Co-authored-by: Ben Kunkle --- assets/keymaps/vim.json | 1 + crates/editor/src/actions.rs | 12 ++++++++++-- crates/editor/src/editor.rs | 30 ++++++++++++++++++++++++++---- crates/editor/src/editor_tests.rs | 6 +++--- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index a3f68a7730..560ca3bdd8 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -407,6 +407,7 @@ "g w": "vim::PushRewrap", "insert": "vim::InsertBefore", "alt-.": "vim::RepeatFind", + "alt-s": ["editor::SplitSelectionIntoLines", { "keep_selections": true }], // tree-sitter related commands "[ x": "editor::SelectLargerSyntaxNode", "] x": "editor::SelectSmallerSyntaxNode", diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index 39433b3c27..ce02c4d2bf 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -273,6 +273,16 @@ pub enum UuidVersion { V7, } +/// Splits selection into individual lines. +#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)] +#[action(namespace = editor)] +#[serde(deny_unknown_fields)] +pub struct SplitSelectionIntoLines { + /// Keep the text selected after splitting instead of collapsing to cursors. + #[serde(default)] + pub keep_selections: bool, +} + /// Goes to the next diagnostic in the file. #[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)] #[action(namespace = editor)] @@ -672,8 +682,6 @@ actions!( SortLinesCaseInsensitive, /// Sorts selected lines case-sensitively. SortLinesCaseSensitive, - /// Splits selection into individual lines. - SplitSelectionIntoLines, /// Stops the language server for the current file. StopLanguageServer, /// Switches between source and header files. diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 689f397341..1f350cf0d0 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -13612,7 +13612,7 @@ impl Editor { pub fn split_selection_into_lines( &mut self, - _: &SplitSelectionIntoLines, + action: &SplitSelectionIntoLines, window: &mut Window, cx: &mut Context, ) { @@ -13629,8 +13629,21 @@ impl Editor { let buffer = self.buffer.read(cx).read(cx); for selection in selections { for row in selection.start.row..selection.end.row { - let cursor = Point::new(row, buffer.line_len(MultiBufferRow(row))); - new_selection_ranges.push(cursor..cursor); + let line_start = Point::new(row, 0); + let line_end = Point::new(row, buffer.line_len(MultiBufferRow(row))); + + if action.keep_selections { + // Keep the selection range for each line + let selection_start = if row == selection.start.row { + selection.start + } else { + line_start + }; + new_selection_ranges.push(selection_start..line_end); + } else { + // Collapse to cursor at end of line + new_selection_ranges.push(line_end..line_end); + } } let is_multiline_selection = selection.start.row != selection.end.row; @@ -13638,7 +13651,16 @@ impl Editor { // so this action feels more ergonomic when paired with other selection operations let should_skip_last = is_multiline_selection && selection.end.column == 0; if !should_skip_last { - new_selection_ranges.push(selection.end..selection.end); + if action.keep_selections { + if is_multiline_selection { + let line_start = Point::new(selection.end.row, 0); + new_selection_ranges.push(line_start..selection.end); + } else { + new_selection_ranges.push(selection.start..selection.end); + } + } else { + new_selection_ranges.push(selection.end..selection.end); + } } } } diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 4421869703..a5966b3301 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -6401,7 +6401,7 @@ async fn test_split_selection_into_lines(cx: &mut TestAppContext) { fn test(cx: &mut EditorTestContext, initial_state: &'static str, expected_state: &'static str) { cx.set_state(initial_state); cx.update_editor(|e, window, cx| { - e.split_selection_into_lines(&SplitSelectionIntoLines, window, cx) + e.split_selection_into_lines(&Default::default(), window, cx) }); cx.assert_editor_state(expected_state); } @@ -6489,7 +6489,7 @@ async fn test_split_selection_into_lines_interacting_with_creases(cx: &mut TestA DisplayPoint::new(DisplayRow(4), 4)..DisplayPoint::new(DisplayRow(4), 4), ]) }); - editor.split_selection_into_lines(&SplitSelectionIntoLines, window, cx); + editor.split_selection_into_lines(&Default::default(), window, cx); assert_eq!( editor.display_text(cx), "aaaaa\nbbbbb\nccc⋯eeee\nfffff\nggggg\n⋯i" @@ -6505,7 +6505,7 @@ async fn test_split_selection_into_lines_interacting_with_creases(cx: &mut TestA DisplayPoint::new(DisplayRow(5), 0)..DisplayPoint::new(DisplayRow(0), 1) ]) }); - editor.split_selection_into_lines(&SplitSelectionIntoLines, window, cx); + editor.split_selection_into_lines(&Default::default(), window, cx); assert_eq!( editor.display_text(cx), "aaaaa\nbbbbb\nccccc\nddddd\neeeee\nfffff\nggggg\nhhhhh\niiiii" From 1a169e0b16801b278140bb9a59fa45ab56644f4d Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Thu, 14 Aug 2025 13:54:19 -0400 Subject: [PATCH 45/74] git: Clear set of dirty paths when doing a full status scan (#36181) Related to #35780 Release Notes: - N/A --------- Co-authored-by: Kirill Bulatov --- crates/project/src/git_store.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/project/src/git_store.rs b/crates/project/src/git_store.rs index 32deb0dbc4..3163a10239 100644 --- a/crates/project/src/git_store.rs +++ b/crates/project/src/git_store.rs @@ -2349,7 +2349,7 @@ impl GitStore { return None; }; - let mut paths = vec![]; + let mut paths = Vec::new(); // All paths prefixed by a given repo will constitute a continuous range. while let Some(path) = entries.get(ix) && let Some(repo_path) = @@ -2358,7 +2358,11 @@ impl GitStore { paths.push((repo_path, ix)); ix += 1; } - Some((repo, paths)) + if paths.is_empty() { + None + } else { + Some((repo, paths)) + } }); tasks.push_back(task); } @@ -4338,7 +4342,8 @@ impl Repository { bail!("not a local repository") }; let (snapshot, events) = this - .read_with(&mut cx, |this, _| { + .update(&mut cx, |this, _| { + this.paths_needing_status_update.clear(); compute_snapshot( this.id, this.work_directory_abs_path.clone(), @@ -4568,6 +4573,9 @@ impl Repository { }; let paths = changed_paths.iter().cloned().collect::>(); + if paths.is_empty() { + return Ok(()); + } let statuses = backend.status(&paths).await?; let changed_path_statuses = cx From 2acfa5e948764cbe9ae5cbf9f95d6bf66ea904c2 Mon Sep 17 00:00:00 2001 From: smit Date: Thu, 14 Aug 2025 23:28:15 +0530 Subject: [PATCH 46/74] copilot: Fix Copilot fails to sign in on newer versions (#36195) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up for #36093 and https://github.com/zed-industries/zed/pull/36138 Since v1.355.0, `@github/copilot-language-server` has stopped responding to `CheckStatus` requests if a `DidChangeConfiguration` notification hasn’t been sent beforehand. This causes `CheckStatus` to remain in an await state until it times out, leaving the connection stuck for a long period before finally throwing a timeout error. ```rs let status = server .request::(request::CheckStatusParams { local_checks_only: false, }) .await .into_response() // bails here with ConnectionResult::Timeout .context("copilot: check status")?; ```` This PR fixes the issue by sending the `DidChangeConfiguration` notification before making the `CheckStatus` request. It’s just an ordering change i.e. no other LSP actions occur between these two calls. Previously, we only updated our internal connection status and UI in between. Release Notes: - Fixed an issue where GitHub Copilot could get stuck and fail to sign in. --- crates/copilot/src/copilot.rs | 95 +++++++++++++------------ crates/languages/src/css.rs | 5 +- crates/languages/src/json.rs | 5 +- crates/languages/src/python.rs | 5 +- crates/languages/src/tailwind.rs | 5 +- crates/languages/src/typescript.rs | 5 +- crates/languages/src/vtsls.rs | 8 +-- crates/languages/src/yaml.rs | 5 +- crates/node_runtime/src/node_runtime.rs | 34 +++++---- 9 files changed, 83 insertions(+), 84 deletions(-) diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index 166a582c70..dcebeae721 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -21,7 +21,7 @@ use language::{ point_from_lsp, point_to_lsp, }; use lsp::{LanguageServer, LanguageServerBinary, LanguageServerId, LanguageServerName}; -use node_runtime::{NodeRuntime, VersionCheck}; +use node_runtime::{NodeRuntime, VersionStrategy}; use parking_lot::Mutex; use project::DisableAiSettings; use request::StatusNotification; @@ -349,7 +349,11 @@ impl Copilot { this.start_copilot(true, false, cx); cx.observe_global::(move |this, cx| { this.start_copilot(true, false, cx); - this.send_configuration_update(cx); + if let Ok(server) = this.server.as_running() { + notify_did_change_config_to_server(&server.lsp, cx) + .context("copilot setting change: did change configuration") + .log_err(); + } }) .detach(); this @@ -438,43 +442,6 @@ impl Copilot { if env.is_empty() { None } else { Some(env) } } - fn send_configuration_update(&mut self, cx: &mut Context) { - let copilot_settings = all_language_settings(None, cx) - .edit_predictions - .copilot - .clone(); - - let settings = json!({ - "http": { - "proxy": copilot_settings.proxy, - "proxyStrictSSL": !copilot_settings.proxy_no_verify.unwrap_or(false) - }, - "github-enterprise": { - "uri": copilot_settings.enterprise_uri - } - }); - - if let Some(copilot_chat) = copilot_chat::CopilotChat::global(cx) { - copilot_chat.update(cx, |chat, cx| { - chat.set_configuration( - copilot_chat::CopilotChatConfiguration { - enterprise_uri: copilot_settings.enterprise_uri.clone(), - }, - cx, - ); - }); - } - - if let Ok(server) = self.server.as_running() { - server - .lsp - .notify::( - &lsp::DidChangeConfigurationParams { settings }, - ) - .log_err(); - } - } - #[cfg(any(test, feature = "test-support"))] pub fn fake(cx: &mut gpui::TestAppContext) -> (Entity, lsp::FakeLanguageServer) { use fs::FakeFs; @@ -573,6 +540,9 @@ impl Copilot { })? .await?; + this.update(cx, |_, cx| notify_did_change_config_to_server(&server, cx))? + .context("copilot: did change configuration")?; + let status = server .request::(request::CheckStatusParams { local_checks_only: false, @@ -598,8 +568,6 @@ impl Copilot { }); cx.emit(Event::CopilotLanguageServerStarted); this.update_sign_in_status(status, cx); - // Send configuration now that the LSP is fully started - this.send_configuration_update(cx); } Err(error) => { this.server = CopilotServer::Error(error.to_string().into()); @@ -1156,6 +1124,41 @@ fn uri_for_buffer(buffer: &Entity, cx: &App) -> Result { } } +fn notify_did_change_config_to_server( + server: &Arc, + cx: &mut Context, +) -> std::result::Result<(), anyhow::Error> { + let copilot_settings = all_language_settings(None, cx) + .edit_predictions + .copilot + .clone(); + + if let Some(copilot_chat) = copilot_chat::CopilotChat::global(cx) { + copilot_chat.update(cx, |chat, cx| { + chat.set_configuration( + copilot_chat::CopilotChatConfiguration { + enterprise_uri: copilot_settings.enterprise_uri.clone(), + }, + cx, + ); + }); + } + + let settings = json!({ + "http": { + "proxy": copilot_settings.proxy, + "proxyStrictSSL": !copilot_settings.proxy_no_verify.unwrap_or(false) + }, + "github-enterprise": { + "uri": copilot_settings.enterprise_uri + } + }); + + server.notify::(&lsp::DidChangeConfigurationParams { + settings, + }) +} + async fn clear_copilot_dir() { remove_matching(paths::copilot_dir(), |_| true).await } @@ -1169,8 +1172,9 @@ async fn get_copilot_lsp(fs: Arc, node_runtime: NodeRuntime) -> anyhow:: const SERVER_PATH: &str = "node_modules/@github/copilot-language-server/dist/language-server.js"; - // pinning it: https://github.com/zed-industries/zed/issues/36093 - const PINNED_VERSION: &str = "1.354"; + let latest_version = node_runtime + .npm_package_latest_version(PACKAGE_NAME) + .await?; let server_path = paths::copilot_dir().join(SERVER_PATH); fs.create_dir(paths::copilot_dir()).await?; @@ -1180,13 +1184,12 @@ async fn get_copilot_lsp(fs: Arc, node_runtime: NodeRuntime) -> anyhow:: PACKAGE_NAME, &server_path, paths::copilot_dir(), - &PINNED_VERSION, - VersionCheck::VersionMismatch, + VersionStrategy::Latest(&latest_version), ) .await; if should_install { node_runtime - .npm_install_packages(paths::copilot_dir(), &[(PACKAGE_NAME, &PINNED_VERSION)]) + .npm_install_packages(paths::copilot_dir(), &[(PACKAGE_NAME, &latest_version)]) .await?; } diff --git a/crates/languages/src/css.rs b/crates/languages/src/css.rs index 19329fcc6e..ffd9006c76 100644 --- a/crates/languages/src/css.rs +++ b/crates/languages/src/css.rs @@ -4,7 +4,7 @@ use futures::StreamExt; use gpui::AsyncApp; use language::{LanguageToolchainStore, LspAdapter, LspAdapterDelegate}; use lsp::{LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::json; use smol::fs; @@ -107,8 +107,7 @@ impl LspAdapter for CssLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - &version, - Default::default(), + VersionStrategy::Latest(version), ) .await; diff --git a/crates/languages/src/json.rs b/crates/languages/src/json.rs index 019b45d396..484631d01f 100644 --- a/crates/languages/src/json.rs +++ b/crates/languages/src/json.rs @@ -12,7 +12,7 @@ use language::{ LspAdapter, LspAdapterDelegate, }; use lsp::{LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::{Value, json}; use settings::{KeymapFile, SettingsJsonSchemaParams, SettingsStore}; @@ -344,8 +344,7 @@ impl LspAdapter for JsonLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - &version, - Default::default(), + VersionStrategy::Latest(version), ) .await; diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index 5513324487..40131089d1 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -13,7 +13,7 @@ use language::{LanguageName, ManifestName, ManifestProvider, ManifestQuery}; use language::{Toolchain, WorkspaceFoldersContent}; use lsp::LanguageServerBinary; use lsp::LanguageServerName; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use pet_core::Configuration; use pet_core::os_environment::Environment; use pet_core::python_environment::PythonEnvironmentKind; @@ -205,8 +205,7 @@ impl LspAdapter for PythonLspAdapter { Self::SERVER_NAME.as_ref(), &server_path, &container_dir, - &version, - Default::default(), + VersionStrategy::Latest(version), ) .await; diff --git a/crates/languages/src/tailwind.rs b/crates/languages/src/tailwind.rs index 6f03eeda8d..0d647f07cf 100644 --- a/crates/languages/src/tailwind.rs +++ b/crates/languages/src/tailwind.rs @@ -5,7 +5,7 @@ use futures::StreamExt; use gpui::AsyncApp; use language::{LanguageName, LanguageToolchainStore, LspAdapter, LspAdapterDelegate}; use lsp::{LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::{Value, json}; use smol::fs; @@ -112,8 +112,7 @@ impl LspAdapter for TailwindLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - &version, - Default::default(), + VersionStrategy::Latest(version), ) .await; diff --git a/crates/languages/src/typescript.rs b/crates/languages/src/typescript.rs index a8ba880889..1877c86dc5 100644 --- a/crates/languages/src/typescript.rs +++ b/crates/languages/src/typescript.rs @@ -10,7 +10,7 @@ use language::{ LspAdapterDelegate, }; use lsp::{CodeActionKind, LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::{Value, json}; use smol::{fs, lock::RwLock, stream::StreamExt}; @@ -588,8 +588,7 @@ impl LspAdapter for TypeScriptLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - version.typescript_version.as_str(), - Default::default(), + VersionStrategy::Latest(version.typescript_version.as_str()), ) .await; diff --git a/crates/languages/src/vtsls.rs b/crates/languages/src/vtsls.rs index 73498fc579..90faf883ba 100644 --- a/crates/languages/src/vtsls.rs +++ b/crates/languages/src/vtsls.rs @@ -4,7 +4,7 @@ use collections::HashMap; use gpui::AsyncApp; use language::{LanguageName, LanguageToolchainStore, LspAdapter, LspAdapterDelegate}; use lsp::{CodeActionKind, LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::Value; use std::{ @@ -115,8 +115,7 @@ impl LspAdapter for VtslsLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - &latest_version.server_version, - Default::default(), + VersionStrategy::Latest(&latest_version.server_version), ) .await { @@ -129,8 +128,7 @@ impl LspAdapter for VtslsLspAdapter { Self::TYPESCRIPT_PACKAGE_NAME, &container_dir.join(Self::TYPESCRIPT_TSDK_PATH), &container_dir, - &latest_version.typescript_version, - Default::default(), + VersionStrategy::Latest(&latest_version.typescript_version), ) .await { diff --git a/crates/languages/src/yaml.rs b/crates/languages/src/yaml.rs index 28be2cc1a4..15a4d590bc 100644 --- a/crates/languages/src/yaml.rs +++ b/crates/languages/src/yaml.rs @@ -6,7 +6,7 @@ use language::{ LanguageToolchainStore, LspAdapter, LspAdapterDelegate, language_settings::AllLanguageSettings, }; use lsp::{LanguageServerBinary, LanguageServerName}; -use node_runtime::NodeRuntime; +use node_runtime::{NodeRuntime, VersionStrategy}; use project::{Fs, lsp_store::language_server_settings}; use serde_json::Value; use settings::{Settings, SettingsLocation}; @@ -108,8 +108,7 @@ impl LspAdapter for YamlLspAdapter { Self::PACKAGE_NAME, &server_path, &container_dir, - &version, - Default::default(), + VersionStrategy::Latest(version), ) .await; diff --git a/crates/node_runtime/src/node_runtime.rs b/crates/node_runtime/src/node_runtime.rs index 6fcc3a728a..f92c122e71 100644 --- a/crates/node_runtime/src/node_runtime.rs +++ b/crates/node_runtime/src/node_runtime.rs @@ -29,13 +29,11 @@ pub struct NodeBinaryOptions { pub use_paths: Option<(PathBuf, PathBuf)>, } -#[derive(Default)] -pub enum VersionCheck { - /// Check whether the installed and requested version have a mismatch - VersionMismatch, - /// Only check whether the currently installed version is older than the newest one - #[default] - OlderVersion, +pub enum VersionStrategy<'a> { + /// Install if current version doesn't match pinned version + Pin(&'a str), + /// Install if current version is older than latest version + Latest(&'a str), } #[derive(Clone)] @@ -295,8 +293,7 @@ impl NodeRuntime { package_name: &str, local_executable_path: &Path, local_package_directory: &Path, - latest_version: &str, - version_check: VersionCheck, + version_strategy: VersionStrategy<'_>, ) -> bool { // In the case of the local system not having the package installed, // or in the instances where we fail to parse package.json data, @@ -317,13 +314,20 @@ impl NodeRuntime { let Some(installed_version) = Version::parse(&installed_version).log_err() else { return true; }; - let Some(latest_version) = Version::parse(latest_version).log_err() else { - return true; - }; - match version_check { - VersionCheck::VersionMismatch => installed_version != latest_version, - VersionCheck::OlderVersion => installed_version < latest_version, + match version_strategy { + VersionStrategy::Pin(pinned_version) => { + let Some(pinned_version) = Version::parse(pinned_version).log_err() else { + return true; + }; + installed_version != pinned_version + } + VersionStrategy::Latest(latest_version) => { + let Some(latest_version) = Version::parse(latest_version).log_err() else { + return true; + }; + installed_version < latest_version + } } } } From 43ee604179ccda222eed29a173ac19e0514e8679 Mon Sep 17 00:00:00 2001 From: Agus Zubiaga Date: Thu, 14 Aug 2025 15:30:18 -0300 Subject: [PATCH 47/74] acp: Clean up entry views on rewind (#36197) We were leaking diffs and terminals on rewind, we'll now clean them up. This PR also introduces a refactor of how we mantain the entry view state to use a `Vec` that's kept in sync with the thread entries. Release Notes: - N/A --- crates/acp_thread/Cargo.toml | 3 +- crates/acp_thread/src/acp_thread.rs | 36 +- crates/acp_thread/src/connection.rs | 156 +++++- crates/agent2/src/agent.rs | 8 +- crates/agent2/src/tests/mod.rs | 2 +- crates/agent_servers/src/acp/v0.rs | 2 +- crates/agent_servers/src/acp/v1.rs | 2 +- crates/agent_servers/src/claude.rs | 2 +- crates/agent_servers/src/e2e_tests.rs | 4 +- crates/agent_ui/Cargo.toml | 1 + crates/agent_ui/src/acp.rs | 1 + crates/agent_ui/src/acp/entry_view_state.rs | 351 +++++++++++++ crates/agent_ui/src/acp/thread_view.rs | 536 +++++++++----------- 13 files changed, 758 insertions(+), 346 deletions(-) create mode 100644 crates/agent_ui/src/acp/entry_view_state.rs diff --git a/crates/acp_thread/Cargo.toml b/crates/acp_thread/Cargo.toml index 2d0fe2d264..2b9a6513c8 100644 --- a/crates/acp_thread/Cargo.toml +++ b/crates/acp_thread/Cargo.toml @@ -13,7 +13,7 @@ path = "src/acp_thread.rs" doctest = false [features] -test-support = ["gpui/test-support", "project/test-support"] +test-support = ["gpui/test-support", "project/test-support", "dep:parking_lot"] [dependencies] action_log.workspace = true @@ -29,6 +29,7 @@ gpui.workspace = true itertools.workspace = true language.workspace = true markdown.workspace = true +parking_lot = { workspace = true, optional = true } project.workspace = true prompt_store.workspace = true serde.workspace = true diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index da4d82712a..4bdc42ea2e 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -1575,11 +1575,7 @@ mod tests { let project = Project::test(fs, [], cx).await; let connection = Rc::new(FakeAgentConnection::new()); let thread = cx - .spawn(async move |mut cx| { - connection - .new_thread(project, Path::new(path!("/test")), &mut cx) - .await - }) + .update(|cx| connection.new_thread(project, Path::new(path!("/test")), cx)) .await .unwrap(); @@ -1699,11 +1695,7 @@ mod tests { )); let thread = cx - .spawn(async move |mut cx| { - connection - .new_thread(project, Path::new(path!("/test")), &mut cx) - .await - }) + .update(|cx| connection.new_thread(project, Path::new(path!("/test")), cx)) .await .unwrap(); @@ -1786,7 +1778,7 @@ mod tests { .unwrap(); let thread = cx - .spawn(|mut cx| connection.new_thread(project, Path::new(path!("/tmp")), &mut cx)) + .update(|cx| connection.new_thread(project, Path::new(path!("/tmp")), cx)) .await .unwrap(); @@ -1849,11 +1841,7 @@ mod tests { })); let thread = cx - .spawn(async move |mut cx| { - connection - .new_thread(project, Path::new(path!("/test")), &mut cx) - .await - }) + .update(|cx| connection.new_thread(project, Path::new(path!("/test")), cx)) .await .unwrap(); @@ -1961,10 +1949,11 @@ mod tests { } })); - let thread = connection - .new_thread(project, Path::new(path!("/test")), &mut cx.to_async()) + let thread = cx + .update(|cx| connection.new_thread(project, Path::new(path!("/test")), cx)) .await .unwrap(); + cx.update(|cx| thread.update(cx, |thread, cx| thread.send(vec!["Hi".into()], cx))) .await .unwrap(); @@ -2021,8 +2010,8 @@ mod tests { .boxed_local() } })); - let thread = connection - .new_thread(project, Path::new(path!("/test")), &mut cx.to_async()) + let thread = cx + .update(|cx| connection.new_thread(project, Path::new(path!("/test")), cx)) .await .unwrap(); @@ -2227,7 +2216,7 @@ mod tests { self: Rc, project: Entity, _cwd: &Path, - cx: &mut gpui::AsyncApp, + cx: &mut gpui::App, ) -> Task>> { let session_id = acp::SessionId( rand::thread_rng() @@ -2237,9 +2226,8 @@ mod tests { .collect::() .into(), ); - let thread = cx - .new(|cx| AcpThread::new("Test", self.clone(), project, session_id.clone(), cx)) - .unwrap(); + let thread = + cx.new(|cx| AcpThread::new("Test", self.clone(), project, session_id.clone(), cx)); self.sessions.lock().insert(session_id, thread.downgrade()); Task::ready(Ok(thread)) } diff --git a/crates/acp_thread/src/connection.rs b/crates/acp_thread/src/connection.rs index c3167eb2d4..0f531acbde 100644 --- a/crates/acp_thread/src/connection.rs +++ b/crates/acp_thread/src/connection.rs @@ -2,7 +2,7 @@ use crate::AcpThread; use agent_client_protocol::{self as acp}; use anyhow::Result; use collections::IndexMap; -use gpui::{AsyncApp, Entity, SharedString, Task}; +use gpui::{Entity, SharedString, Task}; use project::Project; use std::{error::Error, fmt, path::Path, rc::Rc, sync::Arc}; use ui::{App, IconName}; @@ -22,7 +22,7 @@ pub trait AgentConnection { self: Rc, project: Entity, cwd: &Path, - cx: &mut AsyncApp, + cx: &mut App, ) -> Task>>; fn auth_methods(&self) -> &[acp::AuthMethod]; @@ -160,3 +160,155 @@ impl AgentModelList { } } } + +#[cfg(feature = "test-support")] +mod test_support { + use std::sync::Arc; + + use collections::HashMap; + use futures::future::try_join_all; + use gpui::{AppContext as _, WeakEntity}; + use parking_lot::Mutex; + + use super::*; + + #[derive(Clone, Default)] + pub struct StubAgentConnection { + sessions: Arc>>>, + permission_requests: HashMap>, + next_prompt_updates: Arc>>, + } + + impl StubAgentConnection { + pub fn new() -> Self { + Self { + next_prompt_updates: Default::default(), + permission_requests: HashMap::default(), + sessions: Arc::default(), + } + } + + pub fn set_next_prompt_updates(&self, updates: Vec) { + *self.next_prompt_updates.lock() = updates; + } + + pub fn with_permission_requests( + mut self, + permission_requests: HashMap>, + ) -> Self { + self.permission_requests = permission_requests; + self + } + + pub fn send_update( + &self, + session_id: acp::SessionId, + update: acp::SessionUpdate, + cx: &mut App, + ) { + self.sessions + .lock() + .get(&session_id) + .unwrap() + .update(cx, |thread, cx| { + thread.handle_session_update(update.clone(), cx).unwrap(); + }) + .unwrap(); + } + } + + impl AgentConnection for StubAgentConnection { + fn auth_methods(&self) -> &[acp::AuthMethod] { + &[] + } + + fn new_thread( + self: Rc, + project: Entity, + _cwd: &Path, + cx: &mut gpui::App, + ) -> Task>> { + let session_id = acp::SessionId(self.sessions.lock().len().to_string().into()); + let thread = + cx.new(|cx| AcpThread::new("Test", self.clone(), project, session_id.clone(), cx)); + self.sessions.lock().insert(session_id, thread.downgrade()); + Task::ready(Ok(thread)) + } + + fn authenticate( + &self, + _method_id: acp::AuthMethodId, + _cx: &mut App, + ) -> Task> { + unimplemented!() + } + + fn prompt( + &self, + _id: Option, + params: acp::PromptRequest, + cx: &mut App, + ) -> Task> { + let sessions = self.sessions.lock(); + let thread = sessions.get(¶ms.session_id).unwrap(); + let mut tasks = vec![]; + for update in self.next_prompt_updates.lock().drain(..) { + let thread = thread.clone(); + let update = update.clone(); + let permission_request = if let acp::SessionUpdate::ToolCall(tool_call) = &update + && let Some(options) = self.permission_requests.get(&tool_call.id) + { + Some((tool_call.clone(), options.clone())) + } else { + None + }; + let task = cx.spawn(async move |cx| { + if let Some((tool_call, options)) = permission_request { + let permission = thread.update(cx, |thread, cx| { + thread.request_tool_call_authorization( + tool_call.clone(), + options.clone(), + cx, + ) + })?; + permission.await?; + } + thread.update(cx, |thread, cx| { + thread.handle_session_update(update.clone(), cx).unwrap(); + })?; + anyhow::Ok(()) + }); + tasks.push(task); + } + cx.spawn(async move |_| { + try_join_all(tasks).await?; + Ok(acp::PromptResponse { + stop_reason: acp::StopReason::EndTurn, + }) + }) + } + + fn cancel(&self, _session_id: &acp::SessionId, _cx: &mut App) { + unimplemented!() + } + + fn session_editor( + &self, + _session_id: &agent_client_protocol::SessionId, + _cx: &mut App, + ) -> Option> { + Some(Rc::new(StubAgentSessionEditor)) + } + } + + struct StubAgentSessionEditor; + + impl AgentSessionEditor for StubAgentSessionEditor { + fn truncate(&self, _: UserMessageId, _: &mut App) -> Task> { + Task::ready(Ok(())) + } + } +} + +#[cfg(feature = "test-support")] +pub use test_support::*; diff --git a/crates/agent2/src/agent.rs b/crates/agent2/src/agent.rs index 6ebcece2b5..9ac3c2d0e5 100644 --- a/crates/agent2/src/agent.rs +++ b/crates/agent2/src/agent.rs @@ -522,7 +522,7 @@ impl acp_thread::AgentConnection for NativeAgentConnection { self: Rc, project: Entity, cwd: &Path, - cx: &mut AsyncApp, + cx: &mut App, ) -> Task>> { let agent = self.0.clone(); log::info!("Creating new thread for project at: {:?}", cwd); @@ -940,11 +940,7 @@ mod tests { // Create a thread/session let acp_thread = cx .update(|cx| { - Rc::new(connection.clone()).new_thread( - project.clone(), - Path::new("/a"), - &mut cx.to_async(), - ) + Rc::new(connection.clone()).new_thread(project.clone(), Path::new("/a"), cx) }) .await .unwrap(); diff --git a/crates/agent2/src/tests/mod.rs b/crates/agent2/src/tests/mod.rs index 637af73d1a..1df664c029 100644 --- a/crates/agent2/src/tests/mod.rs +++ b/crates/agent2/src/tests/mod.rs @@ -841,7 +841,7 @@ async fn test_agent_connection(cx: &mut TestAppContext) { // Create a thread using new_thread let connection_rc = Rc::new(connection.clone()); let acp_thread = cx - .update(|cx| connection_rc.new_thread(project, cwd, &mut cx.to_async())) + .update(|cx| connection_rc.new_thread(project, cwd, cx)) .await .expect("new_thread should succeed"); diff --git a/crates/agent_servers/src/acp/v0.rs b/crates/agent_servers/src/acp/v0.rs index 327613de67..15f8635cde 100644 --- a/crates/agent_servers/src/acp/v0.rs +++ b/crates/agent_servers/src/acp/v0.rs @@ -423,7 +423,7 @@ impl AgentConnection for AcpConnection { self: Rc, project: Entity, _cwd: &Path, - cx: &mut AsyncApp, + cx: &mut App, ) -> Task>> { let task = self.connection.request_any( acp_old::InitializeParams { diff --git a/crates/agent_servers/src/acp/v1.rs b/crates/agent_servers/src/acp/v1.rs index de397fddf0..d93e3d023e 100644 --- a/crates/agent_servers/src/acp/v1.rs +++ b/crates/agent_servers/src/acp/v1.rs @@ -111,7 +111,7 @@ impl AgentConnection for AcpConnection { self: Rc, project: Entity, cwd: &Path, - cx: &mut AsyncApp, + cx: &mut App, ) -> Task>> { let conn = self.connection.clone(); let sessions = self.sessions.clone(); diff --git a/crates/agent_servers/src/claude.rs b/crates/agent_servers/src/claude.rs index c394ec4a9c..dbcda00e48 100644 --- a/crates/agent_servers/src/claude.rs +++ b/crates/agent_servers/src/claude.rs @@ -74,7 +74,7 @@ impl AgentConnection for ClaudeAgentConnection { self: Rc, project: Entity, cwd: &Path, - cx: &mut AsyncApp, + cx: &mut App, ) -> Task>> { let cwd = cwd.to_owned(); cx.spawn(async move |cx| { diff --git a/crates/agent_servers/src/e2e_tests.rs b/crates/agent_servers/src/e2e_tests.rs index ec6ca29b9d..5af7010f26 100644 --- a/crates/agent_servers/src/e2e_tests.rs +++ b/crates/agent_servers/src/e2e_tests.rs @@ -422,8 +422,8 @@ pub async fn new_test_thread( .await .unwrap(); - let thread = connection - .new_thread(project.clone(), current_dir.as_ref(), &mut cx.to_async()) + let thread = cx + .update(|cx| connection.new_thread(project.clone(), current_dir.as_ref(), cx)) .await .unwrap(); diff --git a/crates/agent_ui/Cargo.toml b/crates/agent_ui/Cargo.toml index b6a5710aa4..13fd9d13c5 100644 --- a/crates/agent_ui/Cargo.toml +++ b/crates/agent_ui/Cargo.toml @@ -103,6 +103,7 @@ workspace.workspace = true zed_actions.workspace = true [dev-dependencies] +acp_thread = { workspace = true, features = ["test-support"] } agent = { workspace = true, features = ["test-support"] } assistant_context = { workspace = true, features = ["test-support"] } assistant_tools.workspace = true diff --git a/crates/agent_ui/src/acp.rs b/crates/agent_ui/src/acp.rs index 630aa730a6..831d296eeb 100644 --- a/crates/agent_ui/src/acp.rs +++ b/crates/agent_ui/src/acp.rs @@ -1,4 +1,5 @@ mod completion_provider; +mod entry_view_state; mod message_editor; mod model_selector; mod model_selector_popover; diff --git a/crates/agent_ui/src/acp/entry_view_state.rs b/crates/agent_ui/src/acp/entry_view_state.rs new file mode 100644 index 0000000000..2f5f855e90 --- /dev/null +++ b/crates/agent_ui/src/acp/entry_view_state.rs @@ -0,0 +1,351 @@ +use std::{collections::HashMap, ops::Range}; + +use acp_thread::AcpThread; +use editor::{Editor, EditorMode, MinimapVisibility, MultiBuffer}; +use gpui::{ + AnyEntity, App, AppContext as _, Entity, EntityId, TextStyleRefinement, WeakEntity, Window, +}; +use language::language_settings::SoftWrap; +use settings::Settings as _; +use terminal_view::TerminalView; +use theme::ThemeSettings; +use ui::TextSize; +use workspace::Workspace; + +#[derive(Default)] +pub struct EntryViewState { + entries: Vec, +} + +impl EntryViewState { + pub fn entry(&self, index: usize) -> Option<&Entry> { + self.entries.get(index) + } + + pub fn sync_entry( + &mut self, + workspace: WeakEntity, + thread: Entity, + index: usize, + window: &mut Window, + cx: &mut App, + ) { + debug_assert!(index <= self.entries.len()); + let entry = if let Some(entry) = self.entries.get_mut(index) { + entry + } else { + self.entries.push(Entry::default()); + self.entries.last_mut().unwrap() + }; + + entry.sync_diff_multibuffers(&thread, index, window, cx); + entry.sync_terminals(&workspace, &thread, index, window, cx); + } + + pub fn remove(&mut self, range: Range) { + self.entries.drain(range); + } + + pub fn settings_changed(&mut self, cx: &mut App) { + for entry in self.entries.iter() { + for view in entry.views.values() { + if let Ok(diff_editor) = view.clone().downcast::() { + diff_editor.update(cx, |diff_editor, cx| { + diff_editor + .set_text_style_refinement(diff_editor_text_style_refinement(cx)); + cx.notify(); + }) + } + } + } + } +} + +pub struct Entry { + views: HashMap, +} + +impl Entry { + pub fn editor_for_diff(&self, diff: &Entity) -> Option> { + self.views + .get(&diff.entity_id()) + .cloned() + .map(|entity| entity.downcast::().unwrap()) + } + + pub fn terminal( + &self, + terminal: &Entity, + ) -> Option> { + self.views + .get(&terminal.entity_id()) + .cloned() + .map(|entity| entity.downcast::().unwrap()) + } + + fn sync_diff_multibuffers( + &mut self, + thread: &Entity, + index: usize, + window: &mut Window, + cx: &mut App, + ) { + let Some(entry) = thread.read(cx).entries().get(index) else { + return; + }; + + let multibuffers = entry + .diffs() + .map(|diff| diff.read(cx).multibuffer().clone()); + + let multibuffers = multibuffers.collect::>(); + + for multibuffer in multibuffers { + if self.views.contains_key(&multibuffer.entity_id()) { + return; + } + + let editor = cx.new(|cx| { + let mut editor = Editor::new( + EditorMode::Full { + scale_ui_elements_with_buffer_font_size: false, + show_active_line_background: false, + sized_by_content: true, + }, + multibuffer.clone(), + None, + window, + cx, + ); + editor.set_show_gutter(false, cx); + editor.disable_inline_diagnostics(); + editor.disable_expand_excerpt_buttons(cx); + editor.set_show_vertical_scrollbar(false, cx); + editor.set_minimap_visibility(MinimapVisibility::Disabled, window, cx); + editor.set_soft_wrap_mode(SoftWrap::None, cx); + editor.scroll_manager.set_forbid_vertical_scroll(true); + editor.set_show_indent_guides(false, cx); + editor.set_read_only(true); + editor.set_show_breakpoints(false, cx); + editor.set_show_code_actions(false, cx); + editor.set_show_git_diff_gutter(false, cx); + editor.set_expand_all_diff_hunks(cx); + editor.set_text_style_refinement(diff_editor_text_style_refinement(cx)); + editor + }); + + let entity_id = multibuffer.entity_id(); + self.views.insert(entity_id, editor.into_any()); + } + } + + fn sync_terminals( + &mut self, + workspace: &WeakEntity, + thread: &Entity, + index: usize, + window: &mut Window, + cx: &mut App, + ) { + let Some(entry) = thread.read(cx).entries().get(index) else { + return; + }; + + let terminals = entry + .terminals() + .map(|terminal| terminal.clone()) + .collect::>(); + + for terminal in terminals { + if self.views.contains_key(&terminal.entity_id()) { + return; + } + + let Some(strong_workspace) = workspace.upgrade() else { + return; + }; + + let terminal_view = cx.new(|cx| { + let mut view = TerminalView::new( + terminal.read(cx).inner().clone(), + workspace.clone(), + None, + strong_workspace.read(cx).project().downgrade(), + window, + cx, + ); + view.set_embedded_mode(Some(1000), cx); + view + }); + + let entity_id = terminal.entity_id(); + self.views.insert(entity_id, terminal_view.into_any()); + } + } + + #[cfg(test)] + pub fn len(&self) -> usize { + self.views.len() + } +} + +fn diff_editor_text_style_refinement(cx: &mut App) -> TextStyleRefinement { + TextStyleRefinement { + font_size: Some( + TextSize::Small + .rems(cx) + .to_pixels(ThemeSettings::get_global(cx).agent_font_size(cx)) + .into(), + ), + ..Default::default() + } +} + +impl Default for Entry { + fn default() -> Self { + Self { + // Avoid allocating in the heap by default + views: HashMap::with_capacity(0), + } + } +} + +#[cfg(test)] +mod tests { + use std::{path::Path, rc::Rc}; + + use acp_thread::{AgentConnection, StubAgentConnection}; + use agent_client_protocol as acp; + use agent_settings::AgentSettings; + use buffer_diff::{DiffHunkStatus, DiffHunkStatusKind}; + use editor::{EditorSettings, RowInfo}; + use fs::FakeFs; + use gpui::{SemanticVersion, TestAppContext}; + use multi_buffer::MultiBufferRow; + use pretty_assertions::assert_matches; + use project::Project; + use serde_json::json; + use settings::{Settings as _, SettingsStore}; + use theme::ThemeSettings; + use util::path; + use workspace::Workspace; + + use crate::acp::entry_view_state::EntryViewState; + + #[gpui::test] + async fn test_diff_sync(cx: &mut TestAppContext) { + init_test(cx); + let fs = FakeFs::new(cx.executor()); + fs.insert_tree( + "/project", + json!({ + "hello.txt": "hi world" + }), + ) + .await; + let project = Project::test(fs, [Path::new(path!("/project"))], cx).await; + + let (workspace, cx) = + cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); + + let tool_call = acp::ToolCall { + id: acp::ToolCallId("tool".into()), + title: "Tool call".into(), + kind: acp::ToolKind::Other, + status: acp::ToolCallStatus::InProgress, + content: vec![acp::ToolCallContent::Diff { + diff: acp::Diff { + path: "/project/hello.txt".into(), + old_text: Some("hi world".into()), + new_text: "hello world".into(), + }, + }], + locations: vec![], + raw_input: None, + raw_output: None, + }; + let connection = Rc::new(StubAgentConnection::new()); + let thread = cx + .update(|_, cx| { + connection + .clone() + .new_thread(project, Path::new(path!("/project")), cx) + }) + .await + .unwrap(); + let session_id = thread.update(cx, |thread, _| thread.session_id().clone()); + + cx.update(|_, cx| { + connection.send_update(session_id, acp::SessionUpdate::ToolCall(tool_call), cx) + }); + + let mut view_state = EntryViewState::default(); + cx.update(|window, cx| { + view_state.sync_entry(workspace.downgrade(), thread.clone(), 0, window, cx); + }); + + let multibuffer = thread.read_with(cx, |thread, cx| { + thread + .entries() + .get(0) + .unwrap() + .diffs() + .next() + .unwrap() + .read(cx) + .multibuffer() + .clone() + }); + + cx.run_until_parked(); + + let entry = view_state.entry(0).unwrap(); + let diff_editor = entry.editor_for_diff(&multibuffer).unwrap(); + assert_eq!( + diff_editor.read_with(cx, |editor, cx| editor.text(cx)), + "hi world\nhello world" + ); + let row_infos = diff_editor.read_with(cx, |editor, cx| { + let multibuffer = editor.buffer().read(cx); + multibuffer + .snapshot(cx) + .row_infos(MultiBufferRow(0)) + .collect::>() + }); + assert_matches!( + row_infos.as_slice(), + [ + RowInfo { + multibuffer_row: Some(MultiBufferRow(0)), + diff_status: Some(DiffHunkStatus { + kind: DiffHunkStatusKind::Deleted, + .. + }), + .. + }, + RowInfo { + multibuffer_row: Some(MultiBufferRow(1)), + diff_status: Some(DiffHunkStatus { + kind: DiffHunkStatusKind::Added, + .. + }), + .. + } + ] + ); + } + + fn init_test(cx: &mut TestAppContext) { + cx.update(|cx| { + let settings_store = SettingsStore::test(cx); + cx.set_global(settings_store); + language::init(cx); + Project::init_settings(cx); + AgentSettings::register(cx); + workspace::init_settings(cx); + ThemeSettings::register(cx); + release_channel::init(SemanticVersion::default(), cx); + EditorSettings::register(cx); + }); + } +} diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 2a72cc6f48..0e90b93f4d 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -12,24 +12,22 @@ use audio::{Audio, Sound}; use buffer_diff::BufferDiff; use collections::{HashMap, HashSet}; use editor::scroll::Autoscroll; -use editor::{Editor, EditorMode, MinimapVisibility, MultiBuffer, PathKey, SelectionEffects}; +use editor::{Editor, EditorMode, MultiBuffer, PathKey, SelectionEffects}; use file_icons::FileIcons; use gpui::{ Action, Animation, AnimationExt, App, BorderStyle, ClickEvent, EdgesRefinement, Empty, Entity, - EntityId, FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, - PlatformDisplay, SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, - TextStyleRefinement, Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, - linear_color_stop, linear_gradient, list, percentage, point, prelude::*, pulsating_between, + FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, PlatformDisplay, + SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, TextStyleRefinement, + Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, linear_color_stop, + linear_gradient, list, percentage, point, prelude::*, pulsating_between, }; use language::Buffer; -use language::language_settings::SoftWrap; use markdown::{HeadingLevelStyles, Markdown, MarkdownElement, MarkdownStyle}; use project::Project; use prompt_store::PromptId; use rope::Point; use settings::{Settings as _, SettingsStore}; use std::{collections::BTreeMap, process::ExitStatus, rc::Rc, time::Duration}; -use terminal_view::TerminalView; use text::Anchor; use theme::ThemeSettings; use ui::{ @@ -41,6 +39,7 @@ use workspace::{CollaboratorId, Workspace}; use zed_actions::agent::{Chat, ToggleModelSelector}; use zed_actions::assistant::OpenRulesLibrary; +use super::entry_view_state::EntryViewState; use crate::acp::AcpModelSelectorPopover; use crate::acp::message_editor::{MessageEditor, MessageEditorEvent}; use crate::agent_diff::AgentDiff; @@ -61,8 +60,7 @@ pub struct AcpThreadView { thread_store: Entity, text_thread_store: Entity, thread_state: ThreadState, - diff_editors: HashMap>, - terminal_views: HashMap>, + entry_view_state: EntryViewState, message_editor: Entity, model_selector: Option>, notifications: Vec>, @@ -149,8 +147,7 @@ impl AcpThreadView { model_selector: None, notifications: Vec::new(), notification_subscriptions: HashMap::default(), - diff_editors: Default::default(), - terminal_views: Default::default(), + entry_view_state: EntryViewState::default(), list_state: list_state.clone(), scrollbar_state: ScrollbarState::new(list_state).parent_entity(&cx.entity()), last_error: None, @@ -209,11 +206,18 @@ impl AcpThreadView { // }) // .ok(); - let result = match connection - .clone() - .new_thread(project.clone(), &root_dir, cx) - .await - { + let Some(result) = cx + .update(|_, cx| { + connection + .clone() + .new_thread(project.clone(), &root_dir, cx) + }) + .log_err() + else { + return; + }; + + let result = match result.await { Err(e) => { let mut cx = cx.clone(); if e.is::() { @@ -480,16 +484,29 @@ impl AcpThreadView { ) { match event { AcpThreadEvent::NewEntry => { - let index = thread.read(cx).entries().len() - 1; - self.sync_thread_entry_view(index, window, cx); + let len = thread.read(cx).entries().len(); + let index = len - 1; + self.entry_view_state.sync_entry( + self.workspace.clone(), + thread.clone(), + index, + window, + cx, + ); self.list_state.splice(index..index, 1); } AcpThreadEvent::EntryUpdated(index) => { - self.sync_thread_entry_view(*index, window, cx); + self.entry_view_state.sync_entry( + self.workspace.clone(), + thread.clone(), + *index, + window, + cx, + ); self.list_state.splice(*index..index + 1, 1); } AcpThreadEvent::EntriesRemoved(range) => { - // TODO: Clean up unused diff editors and terminal views + self.entry_view_state.remove(range.clone()); self.list_state.splice(range.clone(), 0); } AcpThreadEvent::ToolAuthorizationRequired => { @@ -523,128 +540,6 @@ impl AcpThreadView { cx.notify(); } - fn sync_thread_entry_view( - &mut self, - entry_ix: usize, - window: &mut Window, - cx: &mut Context, - ) { - self.sync_diff_multibuffers(entry_ix, window, cx); - self.sync_terminals(entry_ix, window, cx); - } - - fn sync_diff_multibuffers( - &mut self, - entry_ix: usize, - window: &mut Window, - cx: &mut Context, - ) { - let Some(multibuffers) = self.entry_diff_multibuffers(entry_ix, cx) else { - return; - }; - - let multibuffers = multibuffers.collect::>(); - - for multibuffer in multibuffers { - if self.diff_editors.contains_key(&multibuffer.entity_id()) { - return; - } - - let editor = cx.new(|cx| { - let mut editor = Editor::new( - EditorMode::Full { - scale_ui_elements_with_buffer_font_size: false, - show_active_line_background: false, - sized_by_content: true, - }, - multibuffer.clone(), - None, - window, - cx, - ); - editor.set_show_gutter(false, cx); - editor.disable_inline_diagnostics(); - editor.disable_expand_excerpt_buttons(cx); - editor.set_show_vertical_scrollbar(false, cx); - editor.set_minimap_visibility(MinimapVisibility::Disabled, window, cx); - editor.set_soft_wrap_mode(SoftWrap::None, cx); - editor.scroll_manager.set_forbid_vertical_scroll(true); - editor.set_show_indent_guides(false, cx); - editor.set_read_only(true); - editor.set_show_breakpoints(false, cx); - editor.set_show_code_actions(false, cx); - editor.set_show_git_diff_gutter(false, cx); - editor.set_expand_all_diff_hunks(cx); - editor.set_text_style_refinement(diff_editor_text_style_refinement(cx)); - editor - }); - let entity_id = multibuffer.entity_id(); - cx.observe_release(&multibuffer, move |this, _, _| { - this.diff_editors.remove(&entity_id); - }) - .detach(); - - self.diff_editors.insert(entity_id, editor); - } - } - - fn entry_diff_multibuffers( - &self, - entry_ix: usize, - cx: &App, - ) -> Option>> { - let entry = self.thread()?.read(cx).entries().get(entry_ix)?; - Some( - entry - .diffs() - .map(|diff| diff.read(cx).multibuffer().clone()), - ) - } - - fn sync_terminals(&mut self, entry_ix: usize, window: &mut Window, cx: &mut Context) { - let Some(terminals) = self.entry_terminals(entry_ix, cx) else { - return; - }; - - let terminals = terminals.collect::>(); - - for terminal in terminals { - if self.terminal_views.contains_key(&terminal.entity_id()) { - return; - } - - let terminal_view = cx.new(|cx| { - let mut view = TerminalView::new( - terminal.read(cx).inner().clone(), - self.workspace.clone(), - None, - self.project.downgrade(), - window, - cx, - ); - view.set_embedded_mode(Some(1000), cx); - view - }); - - let entity_id = terminal.entity_id(); - cx.observe_release(&terminal, move |this, _, _| { - this.terminal_views.remove(&entity_id); - }) - .detach(); - - self.terminal_views.insert(entity_id, terminal_view); - } - } - - fn entry_terminals( - &self, - entry_ix: usize, - cx: &App, - ) -> Option>> { - let entry = self.thread()?.read(cx).entries().get(entry_ix)?; - Some(entry.terminals().map(|terminal| terminal.clone())) - } - fn authenticate( &mut self, method: acp::AuthMethodId, @@ -712,7 +607,7 @@ impl AcpThreadView { fn render_entry( &self, - index: usize, + entry_ix: usize, total_entries: usize, entry: &AgentThreadEntry, window: &mut Window, @@ -720,7 +615,7 @@ impl AcpThreadView { ) -> AnyElement { let primary = match &entry { AgentThreadEntry::UserMessage(message) => div() - .id(("user_message", index)) + .id(("user_message", entry_ix)) .py_4() .px_2() .children(message.id.clone().and_then(|message_id| { @@ -749,7 +644,9 @@ impl AcpThreadView { .text_xs() .id("message") .on_click(cx.listener({ - move |this, _, window, cx| this.start_editing_message(index, window, cx) + move |this, _, window, cx| { + this.start_editing_message(entry_ix, window, cx) + } })) .children( if let Some(editing) = self.editing_message.as_ref() @@ -787,7 +684,7 @@ impl AcpThreadView { AssistantMessageChunk::Thought { block } => { block.markdown().map(|md| { self.render_thinking_block( - index, + entry_ix, chunk_ix, md.clone(), window, @@ -803,7 +700,7 @@ impl AcpThreadView { v_flex() .px_5() .py_1() - .when(index + 1 == total_entries, |this| this.pb_4()) + .when(entry_ix + 1 == total_entries, |this| this.pb_4()) .w_full() .text_ui(cx) .child(message_body) @@ -815,10 +712,12 @@ impl AcpThreadView { div().w_full().py_1p5().px_5().map(|this| { if has_terminals { this.children(tool_call.terminals().map(|terminal| { - self.render_terminal_tool_call(terminal, tool_call, window, cx) + self.render_terminal_tool_call( + entry_ix, terminal, tool_call, window, cx, + ) })) } else { - this.child(self.render_tool_call(index, tool_call, window, cx)) + this.child(self.render_tool_call(entry_ix, tool_call, window, cx)) } }) } @@ -830,7 +729,7 @@ impl AcpThreadView { }; let is_generating = matches!(thread.read(cx).status(), ThreadStatus::Generating); - let primary = if index == total_entries - 1 && !is_generating { + let primary = if entry_ix == total_entries - 1 && !is_generating { v_flex() .w_full() .child(primary) @@ -841,10 +740,10 @@ impl AcpThreadView { }; if let Some(editing) = self.editing_message.as_ref() - && editing.index < index + && editing.index < entry_ix { let backdrop = div() - .id(("backdrop", index)) + .id(("backdrop", entry_ix)) .size_full() .absolute() .inset_0() @@ -1125,7 +1024,9 @@ impl AcpThreadView { .w_full() .children(tool_call.content.iter().map(|content| { div() - .child(self.render_tool_call_content(content, tool_call, window, cx)) + .child( + self.render_tool_call_content(entry_ix, content, tool_call, window, cx), + ) .into_any_element() })) .child(self.render_permission_buttons( @@ -1139,7 +1040,9 @@ impl AcpThreadView { .w_full() .children(tool_call.content.iter().map(|content| { div() - .child(self.render_tool_call_content(content, tool_call, window, cx)) + .child( + self.render_tool_call_content(entry_ix, content, tool_call, window, cx), + ) .into_any_element() })), ToolCallStatus::Rejected => v_flex().size_0(), @@ -1257,6 +1160,7 @@ impl AcpThreadView { fn render_tool_call_content( &self, + entry_ix: usize, content: &ToolCallContent, tool_call: &ToolCall, window: &Window, @@ -1273,10 +1177,10 @@ impl AcpThreadView { } } ToolCallContent::Diff(diff) => { - self.render_diff_editor(&diff.read(cx).multibuffer(), cx) + self.render_diff_editor(entry_ix, &diff.read(cx).multibuffer(), cx) } ToolCallContent::Terminal(terminal) => { - self.render_terminal_tool_call(terminal, tool_call, window, cx) + self.render_terminal_tool_call(entry_ix, terminal, tool_call, window, cx) } } } @@ -1420,6 +1324,7 @@ impl AcpThreadView { fn render_diff_editor( &self, + entry_ix: usize, multibuffer: &Entity, cx: &Context, ) -> AnyElement { @@ -1428,7 +1333,9 @@ impl AcpThreadView { .border_t_1() .border_color(self.tool_card_border_color(cx)) .child( - if let Some(editor) = self.diff_editors.get(&multibuffer.entity_id()) { + if let Some(entry) = self.entry_view_state.entry(entry_ix) + && let Some(editor) = entry.editor_for_diff(&multibuffer) + { editor.clone().into_any_element() } else { Empty.into_any() @@ -1439,6 +1346,7 @@ impl AcpThreadView { fn render_terminal_tool_call( &self, + entry_ix: usize, terminal: &Entity, tool_call: &ToolCall, window: &Window, @@ -1627,8 +1535,11 @@ impl AcpThreadView { })), ); - let show_output = - self.terminal_expanded && self.terminal_views.contains_key(&terminal.entity_id()); + let terminal_view = self + .entry_view_state + .entry(entry_ix) + .and_then(|entry| entry.terminal(&terminal)); + let show_output = self.terminal_expanded && terminal_view.is_some(); v_flex() .mb_2() @@ -1661,8 +1572,6 @@ impl AcpThreadView { ), ) .when(show_output, |this| { - let terminal_view = self.terminal_views.get(&terminal.entity_id()).unwrap(); - this.child( div() .pt_2() @@ -1672,7 +1581,7 @@ impl AcpThreadView { .bg(cx.theme().colors().editor_background) .rounded_b_md() .text_ui_sm(cx) - .child(terminal_view.clone()), + .children(terminal_view.clone()), ) }) .into_any() @@ -3075,12 +2984,7 @@ impl AcpThreadView { } fn settings_changed(&mut self, _window: &mut Window, cx: &mut Context) { - for diff_editor in self.diff_editors.values() { - diff_editor.update(cx, |diff_editor, cx| { - diff_editor.set_text_style_refinement(diff_editor_text_style_refinement(cx)); - cx.notify(); - }) - } + self.entry_view_state.settings_changed(cx); } pub(crate) fn insert_dragged_files( @@ -3379,18 +3283,6 @@ fn plan_label_markdown_style( } } -fn diff_editor_text_style_refinement(cx: &mut App) -> TextStyleRefinement { - TextStyleRefinement { - font_size: Some( - TextSize::Small - .rems(cx) - .to_pixels(ThemeSettings::get_global(cx).agent_font_size(cx)) - .into(), - ), - ..Default::default() - } -} - fn terminal_command_markdown_style(window: &Window, cx: &App) -> MarkdownStyle { let default_md_style = default_markdown_style(true, window, cx); @@ -3405,16 +3297,16 @@ fn terminal_command_markdown_style(window: &Window, cx: &App) -> MarkdownStyle { #[cfg(test)] pub(crate) mod tests { - use std::{path::Path, sync::Arc}; + use std::path::Path; + use acp_thread::StubAgentConnection; use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::SessionId; use editor::EditorSettings; use fs::FakeFs; - use futures::future::try_join_all; use gpui::{SemanticVersion, TestAppContext, VisualTestContext}; - use parking_lot::Mutex; - use rand::Rng; + use project::Project; + use serde_json::json; use settings::SettingsStore; use super::*; @@ -3497,8 +3389,8 @@ pub(crate) mod tests { raw_input: None, raw_output: None, }; - let connection = StubAgentConnection::new(vec![acp::SessionUpdate::ToolCall(tool_call)]) - .with_permission_requests(HashMap::from_iter([( + let connection = + StubAgentConnection::new().with_permission_requests(HashMap::from_iter([( tool_call_id, vec![acp::PermissionOption { id: acp::PermissionOptionId("1".into()), @@ -3506,6 +3398,9 @@ pub(crate) mod tests { kind: acp::PermissionOptionKind::AllowOnce, }], )])); + + connection.set_next_prompt_updates(vec![acp::SessionUpdate::ToolCall(tool_call)]); + let (thread_view, cx) = setup_thread_view(StubAgentServer::new(connection), cx).await; let message_editor = cx.read(|cx| thread_view.read(cx).message_editor.clone()); @@ -3605,115 +3500,6 @@ pub(crate) mod tests { } } - #[derive(Clone, Default)] - struct StubAgentConnection { - sessions: Arc>>>, - permission_requests: HashMap>, - updates: Vec, - } - - impl StubAgentConnection { - fn new(updates: Vec) -> Self { - Self { - updates, - permission_requests: HashMap::default(), - sessions: Arc::default(), - } - } - - fn with_permission_requests( - mut self, - permission_requests: HashMap>, - ) -> Self { - self.permission_requests = permission_requests; - self - } - } - - impl AgentConnection for StubAgentConnection { - fn auth_methods(&self) -> &[acp::AuthMethod] { - &[] - } - - fn new_thread( - self: Rc, - project: Entity, - _cwd: &Path, - cx: &mut gpui::AsyncApp, - ) -> Task>> { - let session_id = SessionId( - rand::thread_rng() - .sample_iter(&rand::distributions::Alphanumeric) - .take(7) - .map(char::from) - .collect::() - .into(), - ); - let thread = cx - .new(|cx| AcpThread::new("Test", self.clone(), project, session_id.clone(), cx)) - .unwrap(); - self.sessions.lock().insert(session_id, thread.downgrade()); - Task::ready(Ok(thread)) - } - - fn authenticate( - &self, - _method_id: acp::AuthMethodId, - _cx: &mut App, - ) -> Task> { - unimplemented!() - } - - fn prompt( - &self, - _id: Option, - params: acp::PromptRequest, - cx: &mut App, - ) -> Task> { - let sessions = self.sessions.lock(); - let thread = sessions.get(¶ms.session_id).unwrap(); - let mut tasks = vec![]; - for update in &self.updates { - let thread = thread.clone(); - let update = update.clone(); - let permission_request = if let acp::SessionUpdate::ToolCall(tool_call) = &update - && let Some(options) = self.permission_requests.get(&tool_call.id) - { - Some((tool_call.clone(), options.clone())) - } else { - None - }; - let task = cx.spawn(async move |cx| { - if let Some((tool_call, options)) = permission_request { - let permission = thread.update(cx, |thread, cx| { - thread.request_tool_call_authorization( - tool_call.clone(), - options.clone(), - cx, - ) - })?; - permission.await?; - } - thread.update(cx, |thread, cx| { - thread.handle_session_update(update.clone(), cx).unwrap(); - })?; - anyhow::Ok(()) - }); - tasks.push(task); - } - cx.spawn(async move |_| { - try_join_all(tasks).await?; - Ok(acp::PromptResponse { - stop_reason: acp::StopReason::EndTurn, - }) - }) - } - - fn cancel(&self, _session_id: &acp::SessionId, _cx: &mut App) { - unimplemented!() - } - } - #[derive(Clone)] struct SaboteurAgentConnection; @@ -3722,19 +3508,17 @@ pub(crate) mod tests { self: Rc, project: Entity, _cwd: &Path, - cx: &mut gpui::AsyncApp, + cx: &mut gpui::App, ) -> Task>> { - Task::ready(Ok(cx - .new(|cx| { - AcpThread::new( - "SaboteurAgentConnection", - self, - project, - SessionId("test".into()), - cx, - ) - }) - .unwrap())) + Task::ready(Ok(cx.new(|cx| { + AcpThread::new( + "SaboteurAgentConnection", + self, + project, + SessionId("test".into()), + cx, + ) + }))) } fn auth_methods(&self) -> &[acp::AuthMethod] { @@ -3776,4 +3560,142 @@ pub(crate) mod tests { EditorSettings::register(cx); }); } + + #[gpui::test] + async fn test_rewind_views(cx: &mut TestAppContext) { + init_test(cx); + + let fs = FakeFs::new(cx.executor()); + fs.insert_tree( + "/project", + json!({ + "test1.txt": "old content 1", + "test2.txt": "old content 2" + }), + ) + .await; + let project = Project::test(fs, [Path::new("/project")], cx).await; + let (workspace, cx) = + cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); + + let thread_store = + cx.update(|_window, cx| cx.new(|cx| ThreadStore::fake(project.clone(), cx))); + let text_thread_store = + cx.update(|_window, cx| cx.new(|cx| TextThreadStore::fake(project.clone(), cx))); + + let connection = Rc::new(StubAgentConnection::new()); + let thread_view = cx.update(|window, cx| { + cx.new(|cx| { + AcpThreadView::new( + Rc::new(StubAgentServer::new(connection.as_ref().clone())), + workspace.downgrade(), + project.clone(), + thread_store.clone(), + text_thread_store.clone(), + window, + cx, + ) + }) + }); + + cx.run_until_parked(); + + let thread = thread_view + .read_with(cx, |view, _| view.thread().cloned()) + .unwrap(); + + // First user message + connection.set_next_prompt_updates(vec![acp::SessionUpdate::ToolCall(acp::ToolCall { + id: acp::ToolCallId("tool1".into()), + title: "Edit file 1".into(), + kind: acp::ToolKind::Edit, + status: acp::ToolCallStatus::Completed, + content: vec![acp::ToolCallContent::Diff { + diff: acp::Diff { + path: "/project/test1.txt".into(), + old_text: Some("old content 1".into()), + new_text: "new content 1".into(), + }, + }], + locations: vec![], + raw_input: None, + raw_output: None, + })]); + + thread + .update(cx, |thread, cx| thread.send_raw("Give me a diff", cx)) + .await + .unwrap(); + cx.run_until_parked(); + + thread.read_with(cx, |thread, _| { + assert_eq!(thread.entries().len(), 2); + }); + + thread_view.read_with(cx, |view, _| { + assert_eq!(view.entry_view_state.entry(0).unwrap().len(), 0); + assert_eq!(view.entry_view_state.entry(1).unwrap().len(), 1); + }); + + // Second user message + connection.set_next_prompt_updates(vec![acp::SessionUpdate::ToolCall(acp::ToolCall { + id: acp::ToolCallId("tool2".into()), + title: "Edit file 2".into(), + kind: acp::ToolKind::Edit, + status: acp::ToolCallStatus::Completed, + content: vec![acp::ToolCallContent::Diff { + diff: acp::Diff { + path: "/project/test2.txt".into(), + old_text: Some("old content 2".into()), + new_text: "new content 2".into(), + }, + }], + locations: vec![], + raw_input: None, + raw_output: None, + })]); + + thread + .update(cx, |thread, cx| thread.send_raw("Another one", cx)) + .await + .unwrap(); + cx.run_until_parked(); + + let second_user_message_id = thread.read_with(cx, |thread, _| { + assert_eq!(thread.entries().len(), 4); + let AgentThreadEntry::UserMessage(user_message) = thread.entries().get(2).unwrap() + else { + panic!(); + }; + user_message.id.clone().unwrap() + }); + + thread_view.read_with(cx, |view, _| { + assert_eq!(view.entry_view_state.entry(0).unwrap().len(), 0); + assert_eq!(view.entry_view_state.entry(1).unwrap().len(), 1); + assert_eq!(view.entry_view_state.entry(2).unwrap().len(), 0); + assert_eq!(view.entry_view_state.entry(3).unwrap().len(), 1); + }); + + // Rewind to first message + thread + .update(cx, |thread, cx| thread.rewind(second_user_message_id, cx)) + .await + .unwrap(); + + cx.run_until_parked(); + + thread.read_with(cx, |thread, _| { + assert_eq!(thread.entries().len(), 2); + }); + + thread_view.read_with(cx, |view, _| { + assert_eq!(view.entry_view_state.entry(0).unwrap().len(), 0); + assert_eq!(view.entry_view_state.entry(1).unwrap().len(), 1); + + // Old views should be dropped + assert!(view.entry_view_state.entry(2).is_none()); + assert!(view.entry_view_state.entry(3).is_none()); + }); + } } From eb9bbaacb1ccd0f4d92325e24a158739faa3872c Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 14 Aug 2025 15:07:28 -0400 Subject: [PATCH 48/74] Add onboarding reset restore script (#36202) Release Notes: - N/A --- script/onboarding | 176 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100755 script/onboarding diff --git a/script/onboarding b/script/onboarding new file mode 100755 index 0000000000..6cc878ec96 --- /dev/null +++ b/script/onboarding @@ -0,0 +1,176 @@ +#!/usr/bin/env bash + +set -e + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +CHANNEL="$1" +COMMAND="$2" + +if [[ "$CHANNEL" != "stable" && "$CHANNEL" != "preview" && "$CHANNEL" != "nightly" && "$CHANNEL" != "dev" ]]; then + echo -e "${RED}Error: Invalid channel '$CHANNEL'. Must be one of: stable, preview, nightly, dev${NC}" + exit 1 +fi + +if [[ "$OSTYPE" == "darwin"* ]]; then + DB_BASE_DIR="$HOME/Library/Application Support/Zed/db" + DB_DIR="$DB_BASE_DIR/0-$CHANNEL" + DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" + case "$CHANNEL" in + stable) APP_NAME="Zed" ;; + preview) APP_NAME="Zed Preview" ;; + nightly) APP_NAME="Zed Nightly" ;; + dev) APP_NAME="Zed Dev" ;; + esac +elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + DB_BASE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/zed/db" + DB_DIR="$DB_BASE_DIR/0-$CHANNEL" + DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" + case "$CHANNEL" in + stable) APP_NAME="zed" ;; + preview) APP_NAME="zed-preview" ;; + nightly) APP_NAME="zed-nightly" ;; + dev) APP_NAME="zed-dev" ;; + esac +elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "win32" ]]; then + LOCALAPPDATA_PATH="${LOCALAPPDATA:-$USERPROFILE/AppData/Local}" + DB_BASE_DIR="$LOCALAPPDATA_PATH/Zed/db" + DB_DIR="$DB_BASE_DIR/0-$CHANNEL" + DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" + + case "$CHANNEL" in + stable) APP_NAME="Zed" ;; + preview) APP_NAME="Zed Preview" ;; + nightly) APP_NAME="Zed Nightly" ;; + dev) APP_NAME="Zed Dev" ;; + esac +else + echo -e "${RED}Error: Unsupported OS type: $OSTYPE${NC}" + exit 1 +fi + +reset_onboarding() { + echo -e "${BLUE}=== Resetting $APP_NAME to First-Time User State ===${NC}" + echo "" + + if [ ! -d "$DB_DIR" ]; then + echo -e "${YELLOW}No database directory found at: $DB_DIR${NC}" + echo "Zed will create a fresh database on next launch and show onboarding." + exit 0 + fi + + if [ -d "$DB_BACKUP_DIR" ]; then + echo -e "${RED}ERROR: Backup already exists at: $DB_BACKUP_DIR${NC}" + echo "" + echo "This suggests you've already run 'onboarding reset'." + echo "To avoid losing your original database, this script won't overwrite the backup." + echo "" + echo "Options:" + echo " 1. Run './script/onboarding $CHANNEL restore' to restore your original database" + echo " 2. Manually remove the backup if you're sure: rm -rf $DB_BACKUP_DIR" + exit 1 + fi + + echo -e "${YELLOW}Moving $DB_DIR to $DB_BACKUP_DIR${NC}" + mv "$DB_DIR" "$DB_BACKUP_DIR" + + echo -e "${GREEN}✓ Backed up: $DB_BACKUP_DIR${NC}" + echo "" + echo -e "${GREEN}Success! Zed has been reset to first-time user state.${NC}" + echo "" + echo "Next steps:" + echo " 1. Start Zed - you should see the onboarding flow" + echo " 2. When done testing, run: ./script/onboarding $CHANNEL restore" + echo "" + echo -e "${YELLOW}Note: All your workspace data is safely preserved in the backup.${NC}" +} + +restore_onboarding() { + echo -e "${BLUE}=== Restoring Original $APP_NAME Database ===${NC}" + echo "" + + if [ ! -d "$DB_BACKUP_DIR" ]; then + echo -e "${RED}ERROR: No backup found at: $DB_BACKUP_DIR${NC}" + echo "" + echo "Run './script/onboarding $CHANNEL reset' first to create a backup." + exit 1 + fi + + if [ -d "$DB_DIR" ]; then + echo -e "${YELLOW}Removing current database directory: $DB_DIR${NC}" + rm -rf "$DB_DIR" + fi + + echo -e "${YELLOW}Restoring $DB_BACKUP_DIR to $DB_DIR${NC}" + mv "$DB_BACKUP_DIR" "$DB_DIR" + + echo -e "${GREEN}✓ Restored: $DB_DIR${NC}" + echo "" + echo -e "${GREEN}Success! Your original database has been restored.${NC}" +} + +show_status() { + echo -e "${BLUE}=== Zed Onboarding Test Status ===${NC}" + echo "" + + if [ -d "$DB_BACKUP_DIR" ]; then + echo -e "${YELLOW}Status: TESTING MODE${NC}" + echo " • Original database: $DB_BACKUP_DIR" + echo " • Zed is using: $DB_DIR" + echo " • Run './script/onboarding $CHANNEL restore' to return to normal" + elif [ -d "$DB_DIR" ]; then + echo -e "${GREEN}Status: NORMAL${NC}" + echo " • Zed is using: $DB_DIR" + echo " • Run './script/onboarding $CHANNEL reset' to test onboarding" + else + echo -e "${BLUE}Status: NO DATABASE${NC}" + echo " • No Zed database directory exists yet" + echo " • Zed will show onboarding on next launch" + fi +} + +case "${COMMAND:-}" in + reset) + reset_onboarding + ;; + restore) + restore_onboarding + ;; + status) + show_status + ;; + *) + echo -e "${BLUE}Zed Onboarding Test Script${NC}" + echo "" + echo "Usage: $(basename $0) [channel] " + echo "" + echo "Commands:" + echo " reset - Back up current database and reset to show onboarding" + echo " restore - Restore the original database after testing" + echo " status - Show current testing status" + echo "" + echo "Channels:" + echo " stable, preview, nightly, dev" + echo "" + echo "Working with channel: $CHANNEL" + echo "Database directory: $DB_DIR" + echo "" + echo "Examples:" + echo " ./script/onboarding nightly reset # Reset nightly" + echo " ./script/onboarding stable reset # Reset stable" + echo " ./script/onboarding preview restore # Restore preview" + echo "" + echo "Workflow:" + echo " 1. Close Zed" + echo " 2. ./script/onboarding nightly reset" + echo " 3. Open Zed" + echo " 4. Test onboarding" + echo " 5. Close Zed" + echo " 6. ./script/onboarding nightly restore" + exit 1 + ;; +esac From b65e9af3e97a5198dd0b3665f7c712690cf19561 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 14 Aug 2025 13:08:35 -0600 Subject: [PATCH 49/74] Add [f/]f to follow the next collaborator (#36191) Release Notes: - vim: Add `[f`/`]f` to go to the next collaborator --- assets/keymaps/vim.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index 560ca3bdd8..be6d34a134 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -58,6 +58,8 @@ "[ space": "vim::InsertEmptyLineAbove", "[ e": "editor::MoveLineUp", "] e": "editor::MoveLineDown", + "[ f": "workspace::FollowNextCollaborator", + "] f": "workspace::FollowNextCollaborator", // Word motions "w": "vim::NextWordStart", From 3a711d08149dbaf1ac40ee5578d276dbc69e35c1 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 14 Aug 2025 15:19:37 -0400 Subject: [PATCH 50/74] Remove onboarding script (#36203) Just use `ZED_STATELESS=1 zed` instead! Release Notes: - N/A *or* Added/Fixed/Improved ... --- script/onboarding | 176 ---------------------------------------------- 1 file changed, 176 deletions(-) delete mode 100755 script/onboarding diff --git a/script/onboarding b/script/onboarding deleted file mode 100755 index 6cc878ec96..0000000000 --- a/script/onboarding +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env bash - -set -e - -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' - -CHANNEL="$1" -COMMAND="$2" - -if [[ "$CHANNEL" != "stable" && "$CHANNEL" != "preview" && "$CHANNEL" != "nightly" && "$CHANNEL" != "dev" ]]; then - echo -e "${RED}Error: Invalid channel '$CHANNEL'. Must be one of: stable, preview, nightly, dev${NC}" - exit 1 -fi - -if [[ "$OSTYPE" == "darwin"* ]]; then - DB_BASE_DIR="$HOME/Library/Application Support/Zed/db" - DB_DIR="$DB_BASE_DIR/0-$CHANNEL" - DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" - case "$CHANNEL" in - stable) APP_NAME="Zed" ;; - preview) APP_NAME="Zed Preview" ;; - nightly) APP_NAME="Zed Nightly" ;; - dev) APP_NAME="Zed Dev" ;; - esac -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - DB_BASE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/zed/db" - DB_DIR="$DB_BASE_DIR/0-$CHANNEL" - DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" - case "$CHANNEL" in - stable) APP_NAME="zed" ;; - preview) APP_NAME="zed-preview" ;; - nightly) APP_NAME="zed-nightly" ;; - dev) APP_NAME="zed-dev" ;; - esac -elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "win32" ]]; then - LOCALAPPDATA_PATH="${LOCALAPPDATA:-$USERPROFILE/AppData/Local}" - DB_BASE_DIR="$LOCALAPPDATA_PATH/Zed/db" - DB_DIR="$DB_BASE_DIR/0-$CHANNEL" - DB_BACKUP_DIR="$DB_BASE_DIR/0-$CHANNEL.onboarding_backup" - - case "$CHANNEL" in - stable) APP_NAME="Zed" ;; - preview) APP_NAME="Zed Preview" ;; - nightly) APP_NAME="Zed Nightly" ;; - dev) APP_NAME="Zed Dev" ;; - esac -else - echo -e "${RED}Error: Unsupported OS type: $OSTYPE${NC}" - exit 1 -fi - -reset_onboarding() { - echo -e "${BLUE}=== Resetting $APP_NAME to First-Time User State ===${NC}" - echo "" - - if [ ! -d "$DB_DIR" ]; then - echo -e "${YELLOW}No database directory found at: $DB_DIR${NC}" - echo "Zed will create a fresh database on next launch and show onboarding." - exit 0 - fi - - if [ -d "$DB_BACKUP_DIR" ]; then - echo -e "${RED}ERROR: Backup already exists at: $DB_BACKUP_DIR${NC}" - echo "" - echo "This suggests you've already run 'onboarding reset'." - echo "To avoid losing your original database, this script won't overwrite the backup." - echo "" - echo "Options:" - echo " 1. Run './script/onboarding $CHANNEL restore' to restore your original database" - echo " 2. Manually remove the backup if you're sure: rm -rf $DB_BACKUP_DIR" - exit 1 - fi - - echo -e "${YELLOW}Moving $DB_DIR to $DB_BACKUP_DIR${NC}" - mv "$DB_DIR" "$DB_BACKUP_DIR" - - echo -e "${GREEN}✓ Backed up: $DB_BACKUP_DIR${NC}" - echo "" - echo -e "${GREEN}Success! Zed has been reset to first-time user state.${NC}" - echo "" - echo "Next steps:" - echo " 1. Start Zed - you should see the onboarding flow" - echo " 2. When done testing, run: ./script/onboarding $CHANNEL restore" - echo "" - echo -e "${YELLOW}Note: All your workspace data is safely preserved in the backup.${NC}" -} - -restore_onboarding() { - echo -e "${BLUE}=== Restoring Original $APP_NAME Database ===${NC}" - echo "" - - if [ ! -d "$DB_BACKUP_DIR" ]; then - echo -e "${RED}ERROR: No backup found at: $DB_BACKUP_DIR${NC}" - echo "" - echo "Run './script/onboarding $CHANNEL reset' first to create a backup." - exit 1 - fi - - if [ -d "$DB_DIR" ]; then - echo -e "${YELLOW}Removing current database directory: $DB_DIR${NC}" - rm -rf "$DB_DIR" - fi - - echo -e "${YELLOW}Restoring $DB_BACKUP_DIR to $DB_DIR${NC}" - mv "$DB_BACKUP_DIR" "$DB_DIR" - - echo -e "${GREEN}✓ Restored: $DB_DIR${NC}" - echo "" - echo -e "${GREEN}Success! Your original database has been restored.${NC}" -} - -show_status() { - echo -e "${BLUE}=== Zed Onboarding Test Status ===${NC}" - echo "" - - if [ -d "$DB_BACKUP_DIR" ]; then - echo -e "${YELLOW}Status: TESTING MODE${NC}" - echo " • Original database: $DB_BACKUP_DIR" - echo " • Zed is using: $DB_DIR" - echo " • Run './script/onboarding $CHANNEL restore' to return to normal" - elif [ -d "$DB_DIR" ]; then - echo -e "${GREEN}Status: NORMAL${NC}" - echo " • Zed is using: $DB_DIR" - echo " • Run './script/onboarding $CHANNEL reset' to test onboarding" - else - echo -e "${BLUE}Status: NO DATABASE${NC}" - echo " • No Zed database directory exists yet" - echo " • Zed will show onboarding on next launch" - fi -} - -case "${COMMAND:-}" in - reset) - reset_onboarding - ;; - restore) - restore_onboarding - ;; - status) - show_status - ;; - *) - echo -e "${BLUE}Zed Onboarding Test Script${NC}" - echo "" - echo "Usage: $(basename $0) [channel] " - echo "" - echo "Commands:" - echo " reset - Back up current database and reset to show onboarding" - echo " restore - Restore the original database after testing" - echo " status - Show current testing status" - echo "" - echo "Channels:" - echo " stable, preview, nightly, dev" - echo "" - echo "Working with channel: $CHANNEL" - echo "Database directory: $DB_DIR" - echo "" - echo "Examples:" - echo " ./script/onboarding nightly reset # Reset nightly" - echo " ./script/onboarding stable reset # Reset stable" - echo " ./script/onboarding preview restore # Restore preview" - echo "" - echo "Workflow:" - echo " 1. Close Zed" - echo " 2. ./script/onboarding nightly reset" - echo " 3. Open Zed" - echo " 4. Test onboarding" - echo " 5. Close Zed" - echo " 6. ./script/onboarding nightly restore" - exit 1 - ;; -esac From b7c562f359b65f2d529916503d579c027c49614d Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Aug 2025 21:28:59 +0200 Subject: [PATCH 51/74] Bump `async-trait` (#36201) The latest release has span changes in it which prevents rust-analyzer from constantly showing `Box` and `Box::pin` on hover as well as those items polluting the go to definition feature on every identifier. See https://github.com/dtolnay/async-trait/pull/293 Release Notes: - N/A --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96cc1581a3..b4e4d9f876 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1304,9 +1304,9 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", From e2ce787c051032bd6d3ad61c6ffd26b062d0f246 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 14 Aug 2025 23:18:07 +0200 Subject: [PATCH 52/74] editor: Limit target names in hover links multibuffer titles (#36207) Release Notes: - N/A --- crates/editor/src/editor.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 1f350cf0d0..a9780ed6c2 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -15879,6 +15879,8 @@ impl Editor { .text_for_range(location.range.clone()) .collect::() }) + .unique() + .take(3) .join(", "); format!("{tab_kind} for {target}") }) @@ -16085,6 +16087,8 @@ impl Editor { .text_for_range(location.range.clone()) .collect::() }) + .unique() + .take(3) .join(", "); let title = format!("References to {target}"); Self::open_locations_in_multibuffer( From b1e806442aefd7cd5df740234b2d7c3539dc905a Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Thu, 14 Aug 2025 17:31:14 -0400 Subject: [PATCH 53/74] Support images in agent2 threads (#36152) - Support adding ImageContent to messages through copy/paste and through path completions - Ensure images are fully converted to LanguageModelImageContent before sending them to the model - Update ACP crate to v0.0.24 to enable passing image paths through the protocol Release Notes: - N/A --------- Co-authored-by: Conrad Irwin --- Cargo.lock | 4 +- Cargo.toml | 2 +- crates/acp_thread/src/acp_thread.rs | 9 +- crates/acp_thread/src/mention.rs | 9 + .../agent_ui/src/acp/completion_provider.rs | 218 ++++++++++----- crates/agent_ui/src/acp/message_editor.rs | 255 ++++++++++++++++-- crates/agent_ui/src/acp/thread_view.rs | 10 +- 7 files changed, 415 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4e4d9f876..d0809bd880 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,9 +172,9 @@ dependencies = [ [[package]] name = "agent-client-protocol" -version = "0.0.23" +version = "0.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fad72b7b8ee4331b3a4c8d43c107e982a4725564b4ee658ae5c4e79d2b486e8" +checksum = "8fd68bbbef8e424fb8a605c5f0b00c360f682c4528b0a5feb5ec928aaf5ce28e" dependencies = [ "anyhow", "futures 0.3.31", diff --git a/Cargo.toml b/Cargo.toml index 1baa6d3d74..a872cadd39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -425,7 +425,7 @@ zlog_settings = { path = "crates/zlog_settings" } # agentic-coding-protocol = "0.0.10" -agent-client-protocol = "0.0.23" +agent-client-protocol = "0.0.24" aho-corasick = "1.1" alacritty_terminal = { git = "https://github.com/zed-industries/alacritty.git", branch = "add-hush-login-flag" } any_vec = "0.14" diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index 4bdc42ea2e..4005f27a0c 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -443,9 +443,8 @@ impl ContentBlock { }), .. }) => Self::resource_link_md(&uri), - acp::ContentBlock::Image(_) - | acp::ContentBlock::Audio(_) - | acp::ContentBlock::Resource(_) => String::new(), + acp::ContentBlock::Image(image) => Self::image_md(&image), + acp::ContentBlock::Audio(_) | acp::ContentBlock::Resource(_) => String::new(), } } @@ -457,6 +456,10 @@ impl ContentBlock { } } + fn image_md(_image: &acp::ImageContent) -> String { + "`Image`".into() + } + fn to_markdown<'a>(&'a self, cx: &'a App) -> &'a str { match self { ContentBlock::Empty => "", diff --git a/crates/acp_thread/src/mention.rs b/crates/acp_thread/src/mention.rs index b18cbfe18e..b9b021c4ca 100644 --- a/crates/acp_thread/src/mention.rs +++ b/crates/acp_thread/src/mention.rs @@ -6,6 +6,7 @@ use std::{ fmt, ops::Range, path::{Path, PathBuf}, + str::FromStr, }; use ui::{App, IconName, SharedString}; use url::Url; @@ -224,6 +225,14 @@ impl MentionUri { } } +impl FromStr for MentionUri { + type Err = anyhow::Error; + + fn from_str(s: &str) -> anyhow::Result { + Self::parse(s) + } +} + pub struct MentionLink<'a>(&'a MentionUri); impl fmt::Display for MentionLink<'_> { diff --git a/crates/agent_ui/src/acp/completion_provider.rs b/crates/agent_ui/src/acp/completion_provider.rs index 720ee23b00..adcfab85b1 100644 --- a/crates/agent_ui/src/acp/completion_provider.rs +++ b/crates/agent_ui/src/acp/completion_provider.rs @@ -1,5 +1,6 @@ +use std::ffi::OsStr; use std::ops::Range; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::sync::Arc; use std::sync::atomic::AtomicBool; @@ -8,13 +9,14 @@ use anyhow::{Context as _, Result, anyhow}; use collections::{HashMap, HashSet}; use editor::display_map::CreaseId; use editor::{CompletionProvider, Editor, ExcerptId, ToOffset as _}; - -use futures::future::try_join_all; +use futures::future::{Shared, try_join_all}; +use futures::{FutureExt, TryFutureExt}; use fuzzy::{StringMatch, StringMatchCandidate}; -use gpui::{App, Entity, Task, WeakEntity}; +use gpui::{App, Entity, ImageFormat, Img, Task, WeakEntity}; use http_client::HttpClientWithUrl; use itertools::Itertools as _; use language::{Buffer, CodeLabel, HighlightId}; +use language_model::LanguageModelImage; use lsp::CompletionContext; use parking_lot::Mutex; use project::{ @@ -43,24 +45,43 @@ use crate::context_picker::{ available_context_picker_entries, recent_context_picker_entries, selection_ranges, }; +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MentionImage { + pub abs_path: Option>, + pub data: SharedString, + pub format: ImageFormat, +} + #[derive(Default)] pub struct MentionSet { uri_by_crease_id: HashMap, - fetch_results: HashMap, + fetch_results: HashMap>>>, + images: HashMap>>>, } impl MentionSet { - pub fn insert(&mut self, crease_id: CreaseId, uri: MentionUri) { + pub fn insert_uri(&mut self, crease_id: CreaseId, uri: MentionUri) { self.uri_by_crease_id.insert(crease_id, uri); } - pub fn add_fetch_result(&mut self, url: Url, content: String) { + pub fn add_fetch_result(&mut self, url: Url, content: Shared>>) { self.fetch_results.insert(url, content); } + pub fn insert_image( + &mut self, + crease_id: CreaseId, + task: Shared>>, + ) { + self.images.insert(crease_id, task); + } + pub fn drain(&mut self) -> impl Iterator { self.fetch_results.clear(); - self.uri_by_crease_id.drain().map(|(id, _)| id) + self.uri_by_crease_id + .drain() + .map(|(id, _)| id) + .chain(self.images.drain().map(|(id, _)| id)) } pub fn clear(&mut self) { @@ -76,7 +97,7 @@ impl MentionSet { window: &mut Window, cx: &mut App, ) -> Task>> { - let contents = self + let mut contents = self .uri_by_crease_id .iter() .map(|(&crease_id, uri)| { @@ -85,19 +106,59 @@ impl MentionSet { // TODO directories let uri = uri.clone(); let abs_path = abs_path.to_path_buf(); - let buffer_task = project.update(cx, |project, cx| { - let path = project - .find_project_path(abs_path, cx) - .context("Failed to find project path")?; - anyhow::Ok(project.open_buffer(path, cx)) - }); + let extension = abs_path.extension().and_then(OsStr::to_str).unwrap_or(""); - cx.spawn(async move |cx| { - let buffer = buffer_task?.await?; - let content = buffer.read_with(cx, |buffer, _cx| buffer.text())?; + if Img::extensions().contains(&extension) && !extension.contains("svg") { + let open_image_task = project.update(cx, |project, cx| { + let path = project + .find_project_path(&abs_path, cx) + .context("Failed to find project path")?; + anyhow::Ok(project.open_image(path, cx)) + }); - anyhow::Ok((crease_id, Mention { uri, content })) - }) + cx.spawn(async move |cx| { + let image_item = open_image_task?.await?; + let (data, format) = image_item.update(cx, |image_item, cx| { + let format = image_item.image.format; + ( + LanguageModelImage::from_image( + image_item.image.clone(), + cx, + ), + format, + ) + })?; + let data = cx.spawn(async move |_| { + if let Some(data) = data.await { + Ok(data.source) + } else { + anyhow::bail!("Failed to convert image") + } + }); + + anyhow::Ok(( + crease_id, + Mention::Image(MentionImage { + abs_path: Some(abs_path.as_path().into()), + data: data.await?, + format, + }), + )) + }) + } else { + let buffer_task = project.update(cx, |project, cx| { + let path = project + .find_project_path(abs_path, cx) + .context("Failed to find project path")?; + anyhow::Ok(project.open_buffer(path, cx)) + }); + cx.spawn(async move |cx| { + let buffer = buffer_task?.await?; + let content = buffer.read_with(cx, |buffer, _cx| buffer.text())?; + + anyhow::Ok((crease_id, Mention::Text { uri, content })) + }) + } } MentionUri::Symbol { path, line_range, .. @@ -130,7 +191,7 @@ impl MentionSet { .collect() })?; - anyhow::Ok((crease_id, Mention { uri, content })) + anyhow::Ok((crease_id, Mention::Text { uri, content })) }) } MentionUri::Thread { id: thread_id, .. } => { @@ -145,7 +206,7 @@ impl MentionSet { thread.latest_detailed_summary_or_text().to_string() })?; - anyhow::Ok((crease_id, Mention { uri, content })) + anyhow::Ok((crease_id, Mention::Text { uri, content })) }) } MentionUri::TextThread { path, .. } => { @@ -156,7 +217,7 @@ impl MentionSet { cx.spawn(async move |cx| { let context = context.await?; let xml = context.update(cx, |context, cx| context.to_xml(cx))?; - anyhow::Ok((crease_id, Mention { uri, content: xml })) + anyhow::Ok((crease_id, Mention::Text { uri, content: xml })) }) } MentionUri::Rule { id: prompt_id, .. } => { @@ -169,25 +230,39 @@ impl MentionSet { cx.spawn(async move |_| { // TODO: report load errors instead of just logging let text = text_task.await?; - anyhow::Ok((crease_id, Mention { uri, content: text })) + anyhow::Ok((crease_id, Mention::Text { uri, content: text })) }) } MentionUri::Fetch { url } => { - let Some(content) = self.fetch_results.get(&url) else { + let Some(content) = self.fetch_results.get(&url).cloned() else { return Task::ready(Err(anyhow!("missing fetch result"))); }; - Task::ready(Ok(( - crease_id, - Mention { - uri: uri.clone(), - content: content.clone(), - }, - ))) + let uri = uri.clone(); + cx.spawn(async move |_| { + Ok(( + crease_id, + Mention::Text { + uri, + content: content.await.map_err(|e| anyhow::anyhow!("{e}"))?, + }, + )) + }) } } }) .collect::>(); + contents.extend(self.images.iter().map(|(crease_id, image)| { + let crease_id = *crease_id; + let image = image.clone(); + cx.spawn(async move |_| { + Ok(( + crease_id, + Mention::Image(image.await.map_err(|e| anyhow::anyhow!("{e}"))?), + )) + }) + })); + cx.spawn(async move |_cx| { let contents = try_join_all(contents).await?.into_iter().collect(); anyhow::Ok(contents) @@ -195,10 +270,10 @@ impl MentionSet { } } -#[derive(Debug)] -pub struct Mention { - pub uri: MentionUri, - pub content: String, +#[derive(Debug, Eq, PartialEq)] +pub enum Mention { + Text { uri: MentionUri, content: String }, + Image(MentionImage), } pub(crate) enum Match { @@ -536,7 +611,10 @@ impl ContextPickerCompletionProvider { crease_ids.try_into().unwrap() }); - mention_set.lock().insert(crease_id, uri); + mention_set.lock().insert_uri( + crease_id, + MentionUri::Selection { path, line_range }, + ); current_offset += text_len + 1; } @@ -786,6 +864,7 @@ impl ContextPickerCompletionProvider { let url_to_fetch = url_to_fetch.clone(); let source_range = source_range.clone(); let icon_path = icon_path.clone(); + let mention_uri = mention_uri.clone(); Arc::new(move |_, window, cx| { let Some(url) = url::Url::parse(url_to_fetch.as_ref()) .or_else(|_| url::Url::parse(&format!("https://{url_to_fetch}"))) @@ -799,6 +878,7 @@ impl ContextPickerCompletionProvider { let http_client = http_client.clone(); let source_range = source_range.clone(); let icon_path = icon_path.clone(); + let mention_uri = mention_uri.clone(); window.defer(cx, move |window, cx| { let url = url.clone(); @@ -819,17 +899,24 @@ impl ContextPickerCompletionProvider { let mention_set = mention_set.clone(); let http_client = http_client.clone(); let source_range = source_range.clone(); + + let url_string = url.to_string(); + let fetch = cx + .background_executor() + .spawn(async move { + fetch_url_content(http_client, url_string) + .map_err(|e| e.to_string()) + .await + }) + .shared(); + mention_set.lock().add_fetch_result(url, fetch.clone()); + window .spawn(cx, async move |cx| { - if let Some(content) = - fetch_url_content(http_client, url.to_string()) - .await - .notify_async_err(cx) - { - mention_set.lock().add_fetch_result(url.clone(), content); + if fetch.await.notify_async_err(cx).is_some() { mention_set .lock() - .insert(crease_id, MentionUri::Fetch { url }); + .insert_uri(crease_id, mention_uri.clone()); } else { // Remove crease if we failed to fetch editor @@ -1121,7 +1208,9 @@ fn confirm_completion_callback( window, cx, ) { - mention_set.lock().insert(crease_id, mention_uri.clone()); + mention_set + .lock() + .insert_uri(crease_id, mention_uri.clone()); } }); false @@ -1499,11 +1588,12 @@ mod tests { .into_values() .collect::>(); - assert_eq!(contents.len(), 1); - assert_eq!(contents[0].content, "1"); - assert_eq!( - contents[0].uri.to_uri().to_string(), - "file:///dir/a/one.txt" + pretty_assertions::assert_eq!( + contents, + [Mention::Text { + content: "1".into(), + uri: "file:///dir/a/one.txt".parse().unwrap() + }] ); cx.simulate_input(" "); @@ -1567,11 +1657,13 @@ mod tests { .collect::>(); assert_eq!(contents.len(), 2); - let new_mention = contents - .iter() - .find(|mention| mention.uri.to_uri().to_string() == "file:///dir/b/eight.txt") - .unwrap(); - assert_eq!(new_mention.content, "8"); + pretty_assertions::assert_eq!( + contents[1], + Mention::Text { + content: "8".to_string(), + uri: "file:///dir/b/eight.txt".parse().unwrap(), + } + ); editor.update(&mut cx, |editor, cx| { assert_eq!( @@ -1689,13 +1781,15 @@ mod tests { .collect::>(); assert_eq!(contents.len(), 3); - let new_mention = contents - .iter() - .find(|mention| { - mention.uri.to_uri().to_string() == "file:///dir/a/one.txt?symbol=MySymbol#L1:1" - }) - .unwrap(); - assert_eq!(new_mention.content, "1"); + pretty_assertions::assert_eq!( + contents[2], + Mention::Text { + content: "1".into(), + uri: "file:///dir/a/one.txt?symbol=MySymbol#L1:1" + .parse() + .unwrap(), + } + ); cx.run_until_parked(); diff --git a/crates/agent_ui/src/acp/message_editor.rs b/crates/agent_ui/src/acp/message_editor.rs index fc34420d4e..8d512948dd 100644 --- a/crates/agent_ui/src/acp/message_editor.rs +++ b/crates/agent_ui/src/acp/message_editor.rs @@ -1,4 +1,5 @@ use crate::acp::completion_provider::ContextPickerCompletionProvider; +use crate::acp::completion_provider::MentionImage; use crate::acp::completion_provider::MentionSet; use acp_thread::MentionUri; use agent::TextThreadStore; @@ -6,30 +7,44 @@ use agent::ThreadStore; use agent_client_protocol as acp; use anyhow::Result; use collections::HashSet; +use editor::ExcerptId; +use editor::actions::Paste; +use editor::display_map::CreaseId; use editor::{ AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement, EditorMode, EditorStyle, MultiBuffer, }; +use futures::FutureExt as _; +use gpui::ClipboardEntry; +use gpui::Image; +use gpui::ImageFormat; use gpui::{ AppContext, Context, Entity, EventEmitter, FocusHandle, Focusable, Task, TextStyle, WeakEntity, }; use language::Buffer; use language::Language; +use language_model::LanguageModelImage; use parking_lot::Mutex; use project::{CompletionIntent, Project}; use settings::Settings; use std::fmt::Write; +use std::path::Path; use std::rc::Rc; use std::sync::Arc; use theme::ThemeSettings; +use ui::IconName; +use ui::SharedString; use ui::{ ActiveTheme, App, InteractiveElement, IntoElement, ParentElement, Render, Styled, TextSize, Window, div, }; use util::ResultExt; use workspace::Workspace; +use workspace::notifications::NotifyResultExt as _; use zed_actions::agent::Chat; +use super::completion_provider::Mention; + pub struct MessageEditor { editor: Entity, project: Entity, @@ -130,23 +145,41 @@ impl MessageEditor { continue; } - if let Some(mention) = contents.get(&crease_id) { - let crease_range = crease.range().to_offset(&snapshot.buffer_snapshot); - if crease_range.start > ix { - chunks.push(text[ix..crease_range.start].into()); - } - chunks.push(acp::ContentBlock::Resource(acp::EmbeddedResource { - annotations: None, - resource: acp::EmbeddedResourceResource::TextResourceContents( - acp::TextResourceContents { - mime_type: None, - text: mention.content.clone(), - uri: mention.uri.to_uri().to_string(), - }, - ), - })); - ix = crease_range.end; + let Some(mention) = contents.get(&crease_id) else { + continue; + }; + + let crease_range = crease.range().to_offset(&snapshot.buffer_snapshot); + if crease_range.start > ix { + chunks.push(text[ix..crease_range.start].into()); } + let chunk = match mention { + Mention::Text { uri, content } => { + acp::ContentBlock::Resource(acp::EmbeddedResource { + annotations: None, + resource: acp::EmbeddedResourceResource::TextResourceContents( + acp::TextResourceContents { + mime_type: None, + text: content.clone(), + uri: uri.to_uri().to_string(), + }, + ), + }) + } + Mention::Image(mention_image) => { + acp::ContentBlock::Image(acp::ImageContent { + annotations: None, + data: mention_image.data.to_string(), + mime_type: mention_image.format.mime_type().into(), + uri: mention_image + .abs_path + .as_ref() + .map(|path| format!("file://{}", path.display())), + }) + } + }; + chunks.push(chunk); + ix = crease_range.end; } if ix < text.len() { @@ -177,6 +210,56 @@ impl MessageEditor { cx.emit(MessageEditorEvent::Cancel) } + fn paste(&mut self, _: &Paste, window: &mut Window, cx: &mut Context) { + let images = cx + .read_from_clipboard() + .map(|item| { + item.into_entries() + .filter_map(|entry| { + if let ClipboardEntry::Image(image) = entry { + Some(image) + } else { + None + } + }) + .collect::>() + }) + .unwrap_or_default(); + + if images.is_empty() { + return; + } + cx.stop_propagation(); + + let replacement_text = "image"; + for image in images { + let (excerpt_id, anchor) = self.editor.update(cx, |message_editor, cx| { + let snapshot = message_editor.snapshot(window, cx); + let (excerpt_id, _, snapshot) = snapshot.buffer_snapshot.as_singleton().unwrap(); + + let anchor = snapshot.anchor_before(snapshot.len()); + message_editor.edit( + [( + multi_buffer::Anchor::max()..multi_buffer::Anchor::max(), + format!("{replacement_text} "), + )], + cx, + ); + (*excerpt_id, anchor) + }); + + self.insert_image( + excerpt_id, + anchor, + replacement_text.len(), + Arc::new(image), + None, + window, + cx, + ); + } + } + pub fn insert_dragged_files( &self, paths: Vec, @@ -234,6 +317,68 @@ impl MessageEditor { } } + fn insert_image( + &mut self, + excerpt_id: ExcerptId, + crease_start: text::Anchor, + content_len: usize, + image: Arc, + abs_path: Option>, + window: &mut Window, + cx: &mut Context, + ) { + let Some(crease_id) = insert_crease_for_image( + excerpt_id, + crease_start, + content_len, + self.editor.clone(), + window, + cx, + ) else { + return; + }; + self.editor.update(cx, |_editor, cx| { + let format = image.format; + let convert = LanguageModelImage::from_image(image, cx); + + let task = cx + .spawn_in(window, async move |editor, cx| { + if let Some(image) = convert.await { + Ok(MentionImage { + abs_path, + data: image.source, + format, + }) + } else { + editor + .update(cx, |editor, cx| { + let snapshot = editor.buffer().read(cx).snapshot(cx); + let Some(anchor) = + snapshot.anchor_in_excerpt(excerpt_id, crease_start) + else { + return; + }; + editor.display_map.update(cx, |display_map, cx| { + display_map.unfold_intersecting(vec![anchor..anchor], true, cx); + }); + editor.remove_creases([crease_id], cx); + }) + .ok(); + Err("Failed to convert image".to_string()) + } + }) + .shared(); + + cx.spawn_in(window, { + let task = task.clone(); + async move |_, cx| task.clone().await.notify_async_err(cx) + }) + .detach(); + + self.mention_set.lock().insert_image(crease_id, task); + }); + } + pub fn set_mode(&mut self, mode: EditorMode, cx: &mut Context) { self.editor.update(cx, |editor, cx| { editor.set_mode(mode); @@ -243,12 +388,13 @@ impl MessageEditor { pub fn set_message( &mut self, - message: &[acp::ContentBlock], + message: Vec, window: &mut Window, cx: &mut Context, ) { let mut text = String::new(); let mut mentions = Vec::new(); + let mut images = Vec::new(); for chunk in message { match chunk { @@ -266,8 +412,13 @@ impl MessageEditor { mentions.push((start..end, mention_uri)); } } - acp::ContentBlock::Image(_) - | acp::ContentBlock::Audio(_) + acp::ContentBlock::Image(content) => { + let start = text.len(); + text.push_str("image"); + let end = text.len(); + images.push((start..end, content)); + } + acp::ContentBlock::Audio(_) | acp::ContentBlock::Resource(_) | acp::ContentBlock::ResourceLink(_) => {} } @@ -293,7 +444,50 @@ impl MessageEditor { ); if let Some(crease_id) = crease_id { - self.mention_set.lock().insert(crease_id, mention_uri); + self.mention_set.lock().insert_uri(crease_id, mention_uri); + } + } + for (range, content) in images { + let Some(format) = ImageFormat::from_mime_type(&content.mime_type) else { + continue; + }; + let anchor = snapshot.anchor_before(range.start); + let abs_path = content + .uri + .as_ref() + .and_then(|uri| uri.strip_prefix("file://").map(|s| Path::new(s).into())); + + let name = content + .uri + .as_ref() + .and_then(|uri| { + uri.strip_prefix("file://") + .and_then(|path| Path::new(path).file_name()) + }) + .map(|name| name.to_string_lossy().to_string()) + .unwrap_or("Image".to_owned()); + let crease_id = crate::context_picker::insert_crease_for_mention( + anchor.excerpt_id, + anchor.text_anchor, + range.end - range.start, + name.into(), + IconName::Image.path().into(), + self.editor.clone(), + window, + cx, + ); + let data: SharedString = content.data.to_string().into(); + + if let Some(crease_id) = crease_id { + self.mention_set.lock().insert_image( + crease_id, + Task::ready(Ok(MentionImage { + abs_path, + data, + format, + })) + .shared(), + ); } } cx.notify(); @@ -319,6 +513,7 @@ impl Render for MessageEditor { .key_context("MessageEditor") .on_action(cx.listener(Self::chat)) .on_action(cx.listener(Self::cancel)) + .capture_action(cx.listener(Self::paste)) .flex_1() .child({ let settings = ThemeSettings::get_global(cx); @@ -351,6 +546,26 @@ impl Render for MessageEditor { } } +pub(crate) fn insert_crease_for_image( + excerpt_id: ExcerptId, + anchor: text::Anchor, + content_len: usize, + editor: Entity, + window: &mut Window, + cx: &mut App, +) -> Option { + crate::context_picker::insert_crease_for_mention( + excerpt_id, + anchor, + content_len, + "Image".into(), + IconName::Image.path().into(), + editor, + window, + cx, + ) +} + #[cfg(test)] mod tests { use std::path::Path; diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 0e90b93f4d..ee016b7503 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -5,9 +5,10 @@ use acp_thread::{ use acp_thread::{AgentConnection, Plan}; use action_log::ActionLog; use agent::{TextThreadStore, ThreadStore}; -use agent_client_protocol as acp; +use agent_client_protocol::{self as acp}; use agent_servers::AgentServer; use agent_settings::{AgentSettings, NotifyWhenAgentWaiting}; +use anyhow::bail; use audio::{Audio, Sound}; use buffer_diff::BufferDiff; use collections::{HashMap, HashSet}; @@ -2360,7 +2361,7 @@ impl AcpThreadView { window, cx, ); - editor.set_message(&chunks, window, cx); + editor.set_message(chunks, window, cx); editor }); let subscription = @@ -2725,7 +2726,7 @@ impl AcpThreadView { let project = workspace.project().clone(); if !project.read(cx).is_local() { - anyhow::bail!("failed to open active thread as markdown in remote project"); + bail!("failed to open active thread as markdown in remote project"); } let buffer = project.update(cx, |project, cx| { @@ -2990,12 +2991,13 @@ impl AcpThreadView { pub(crate) fn insert_dragged_files( &self, paths: Vec, - _added_worktrees: Vec>, + added_worktrees: Vec>, window: &mut Window, cx: &mut Context, ) { self.message_editor.update(cx, |message_editor, cx| { message_editor.insert_dragged_files(paths, window, cx); + drop(added_worktrees); }) } } From 8366b6ce549d7695a5a544d98a035208531e2e5d Mon Sep 17 00:00:00 2001 From: Cretezy Date: Thu, 14 Aug 2025 17:46:38 -0400 Subject: [PATCH 54/74] workspace: Disable padding on zoomed panels (#36012) Continuation of https://github.com/zed-industries/zed/pull/31913 | Before | After | | -------|------| | ![image](https://github.com/user-attachments/assets/629e7da2-6070-4abb-b469-3b0824524ca4) | ![image](https://github.com/user-attachments/assets/99e54412-2e0b-4df9-9c40-a89b0411f6d8) | Release Notes: - Disable padding on zoomed panels --- crates/workspace/src/workspace.rs | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index fb78c62f9e..ba9e3bbb8a 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -6664,25 +6664,15 @@ impl Render for Workspace { } }) .children(self.zoomed.as_ref().and_then(|view| { - let zoomed_view = view.upgrade()?; - let div = div() + Some(div() .occlude() .absolute() .overflow_hidden() .border_color(colors.border) .bg(colors.background) - .child(zoomed_view) + .child(view.upgrade()?) .inset_0() - .shadow_lg(); - - Some(match self.zoomed_position { - Some(DockPosition::Left) => div.right_2().border_r_1(), - Some(DockPosition::Right) => div.left_2().border_l_1(), - Some(DockPosition::Bottom) => div.top_2().border_t_1(), - None => { - div.top_2().bottom_2().left_2().right_2().border_1() - } - }) + .shadow_lg()) })) .children(self.render_notifications(window, cx)), ) From 4d27b228f776725b6f0f090b4856a7028b3dfe95 Mon Sep 17 00:00:00 2001 From: Alvaro Parker <64918109+AlvaroParker@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:31:01 -0400 Subject: [PATCH 55/74] remote server: Use env flag to opt out of musl remote server build (#36069) Closes #ISSUE This will allow devs to opt out of the musl build when developing zed by running `ZED_BUILD_REMOTE_SERVER=nomusl cargo r` which also fixes remote builds on NixOS. Release Notes: - Add a env flag (`ZED_BUILD_REMOTE_SERVER=nomusl`) to opt out of musl builds when building the remote server --- crates/remote/src/ssh_session.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/remote/src/ssh_session.rs b/crates/remote/src/ssh_session.rs index 4306251e44..df7212d44c 100644 --- a/crates/remote/src/ssh_session.rs +++ b/crates/remote/src/ssh_session.rs @@ -2069,11 +2069,17 @@ impl SshRemoteConnection { Ok(()) } + let use_musl = !build_remote_server.contains("nomusl"); let triple = format!( "{}-{}", self.ssh_platform.arch, match self.ssh_platform.os { - "linux" => "unknown-linux-musl", + "linux" => + if use_musl { + "unknown-linux-musl" + } else { + "unknown-linux-gnu" + }, "macos" => "apple-darwin", _ => anyhow::bail!("can't cross compile for: {:?}", self.ssh_platform), } @@ -2086,7 +2092,7 @@ impl SshRemoteConnection { String::new() } }; - if self.ssh_platform.os == "linux" { + if self.ssh_platform.os == "linux" && use_musl { rust_flags.push_str(" -C target-feature=+crt-static"); } if build_remote_server.contains("mold") { From 23d04331584edc7656a480715cab9532ccfc5861 Mon Sep 17 00:00:00 2001 From: smit Date: Fri, 15 Aug 2025 12:51:32 +0530 Subject: [PATCH 56/74] linux: Fix keyboard events not working on first start in X11 (#36224) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #29083 On X11, `ibus-x11` crashes on some distros after Zed interacts with it. This is not unique to Zed, `xim-rs` shows the same behavior, and there are similar upstream `ibus` reports with apps like Blender: - https://github.com/ibus/ibus/issues/2697 I opened an upstream issue to track this: - https://github.com/ibus/ibus/issues/2789 When this crash happens, we don’t get a disconnect event, so Zed keeps sending events to the IM server and waits for a response. It works on subsequent starts because IM server doesn't exist now and we default to non-XIM path. This PR detects the crash via X11 events and falls back to the non-XIM path so typing keeps working. We still need to investigate whether the root cause is in `xim-rs` or `ibus-x11`. Release Notes: - Fixed an issue on X11 where keyboard input sometimes didn’t work on first start. --- Cargo.lock | 6 ++-- crates/gpui/Cargo.toml | 2 +- crates/gpui/src/platform/linux/x11/client.rs | 38 ++++++++++++-------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0809bd880..0bafc3c386 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20277,7 +20277,7 @@ dependencies = [ [[package]] name = "xim" version = "0.4.0" -source = "git+https://github.com/XDeme1/xim-rs?rev=d50d461764c2213655cd9cf65a0ea94c70d3c4fd#d50d461764c2213655cd9cf65a0ea94c70d3c4fd" +source = "git+https://github.com/zed-industries/xim-rs?rev=c0a70c1bd2ce197364216e5e818a2cb3adb99a8d#c0a70c1bd2ce197364216e5e818a2cb3adb99a8d" dependencies = [ "ahash 0.8.11", "hashbrown 0.14.5", @@ -20290,7 +20290,7 @@ dependencies = [ [[package]] name = "xim-ctext" version = "0.3.0" -source = "git+https://github.com/XDeme1/xim-rs?rev=d50d461764c2213655cd9cf65a0ea94c70d3c4fd#d50d461764c2213655cd9cf65a0ea94c70d3c4fd" +source = "git+https://github.com/zed-industries/xim-rs?rev=c0a70c1bd2ce197364216e5e818a2cb3adb99a8d#c0a70c1bd2ce197364216e5e818a2cb3adb99a8d" dependencies = [ "encoding_rs", ] @@ -20298,7 +20298,7 @@ dependencies = [ [[package]] name = "xim-parser" version = "0.2.1" -source = "git+https://github.com/XDeme1/xim-rs?rev=d50d461764c2213655cd9cf65a0ea94c70d3c4fd#d50d461764c2213655cd9cf65a0ea94c70d3c4fd" +source = "git+https://github.com/zed-industries/xim-rs?rev=c0a70c1bd2ce197364216e5e818a2cb3adb99a8d#c0a70c1bd2ce197364216e5e818a2cb3adb99a8d" dependencies = [ "bitflags 2.9.0", ] diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index d720dfb2a1..6be8c5fd1f 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -209,7 +209,7 @@ xkbcommon = { version = "0.8.0", features = [ "wayland", "x11", ], optional = true } -xim = { git = "https://github.com/XDeme1/xim-rs", rev = "d50d461764c2213655cd9cf65a0ea94c70d3c4fd", features = [ +xim = { git = "https://github.com/zed-industries/xim-rs", rev = "c0a70c1bd2ce197364216e5e818a2cb3adb99a8d" , features = [ "x11rb-xcb", "x11rb-client", ], optional = true } diff --git a/crates/gpui/src/platform/linux/x11/client.rs b/crates/gpui/src/platform/linux/x11/client.rs index 573e4addf7..053cd0387b 100644 --- a/crates/gpui/src/platform/linux/x11/client.rs +++ b/crates/gpui/src/platform/linux/x11/client.rs @@ -642,13 +642,7 @@ impl X11Client { let xim_connected = xim_handler.connected; drop(state); - let xim_filtered = match ximc.filter_event(&event, &mut xim_handler) { - Ok(handled) => handled, - Err(err) => { - log::error!("XIMClientError: {}", err); - false - } - }; + let xim_filtered = ximc.filter_event(&event, &mut xim_handler); let xim_callback_event = xim_handler.last_callback_event.take(); let mut state = self.0.borrow_mut(); @@ -659,14 +653,28 @@ impl X11Client { self.handle_xim_callback_event(event); } - if xim_filtered { - continue; - } - - if xim_connected { - self.xim_handle_event(event); - } else { - self.handle_event(event); + match xim_filtered { + Ok(handled) => { + if handled { + continue; + } + if xim_connected { + self.xim_handle_event(event); + } else { + self.handle_event(event); + } + } + Err(err) => { + // this might happen when xim server crashes on one of the events + // we do lose 1-2 keys when crash happens since there is no reliable way to get that info + // luckily, x11 sends us window not found error when xim server crashes upon further key press + // hence we fall back to handle_event + log::error!("XIMClientError: {}", err); + let mut state = self.0.borrow_mut(); + state.take_xim(); + drop(state); + self.handle_event(event); + } } } } From 8d6982e78f2493bb3ef2a23010f38dab141dc76a Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 15 Aug 2025 09:56:47 +0200 Subject: [PATCH 57/74] search: Fix some inconsistencies between project and buffer search bars (#36103) - project search query string now turns red when no results are found matching buffer search behavior - General code deduplication as well as more consistent layout between the two bars, as some minor details have drifted apart - Tab cycling in buffer search now ends up in editor focus when cycling backwards, matching forward cycling - Report parse errors in filter include and exclude editors Release Notes: - N/A --- crates/search/src/buffer_search.rs | 617 ++++++++++++---------------- crates/search/src/project_search.rs | 526 ++++++++++-------------- crates/search/src/search_bar.rs | 83 +++- crates/workspace/src/workspace.rs | 8 +- 4 files changed, 545 insertions(+), 689 deletions(-) diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 14703be7a2..ccef198f04 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -3,20 +3,23 @@ mod registrar; use crate::{ FocusSearch, NextHistoryQuery, PreviousHistoryQuery, ReplaceAll, ReplaceNext, SearchOptions, SelectAllMatches, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, ToggleRegex, - ToggleReplace, ToggleSelection, ToggleWholeWord, search_bar::render_nav_button, + ToggleReplace, ToggleSelection, ToggleWholeWord, + search_bar::{ + input_base_styles, render_action_button, render_text_input, toggle_replace_button, + }, }; use any_vec::AnyVec; use anyhow::Context as _; use collections::HashMap; use editor::{ - DisplayPoint, Editor, EditorElement, EditorSettings, EditorStyle, + DisplayPoint, Editor, EditorSettings, actions::{Backtab, Tab}, }; use futures::channel::oneshot; use gpui::{ - Action, App, ClickEvent, Context, Entity, EventEmitter, FocusHandle, Focusable, - InteractiveElement as _, IntoElement, KeyContext, ParentElement as _, Render, ScrollHandle, - Styled, Subscription, Task, TextStyle, Window, actions, div, + Action, App, ClickEvent, Context, Entity, EventEmitter, Focusable, InteractiveElement as _, + IntoElement, KeyContext, ParentElement as _, Render, ScrollHandle, Styled, Subscription, Task, + Window, actions, div, }; use language::{Language, LanguageRegistry}; use project::{ @@ -27,7 +30,6 @@ use schemars::JsonSchema; use serde::Deserialize; use settings::Settings; use std::sync::Arc; -use theme::ThemeSettings; use zed_actions::outline::ToggleOutline; use ui::{ @@ -125,46 +127,6 @@ pub struct BufferSearchBar { } impl BufferSearchBar { - fn render_text_input( - &self, - editor: &Entity, - color_override: Option, - cx: &mut Context, - ) -> impl IntoElement { - let (color, use_syntax) = if editor.read(cx).read_only(cx) { - (cx.theme().colors().text_disabled, false) - } else { - match color_override { - Some(color_override) => (color_override.color(cx), false), - None => (cx.theme().colors().text, true), - } - }; - - let settings = ThemeSettings::get_global(cx); - let text_style = TextStyle { - color, - font_family: settings.buffer_font.family.clone(), - font_features: settings.buffer_font.features.clone(), - font_fallbacks: settings.buffer_font.fallbacks.clone(), - font_size: rems(0.875).into(), - font_weight: settings.buffer_font.weight, - line_height: relative(1.3), - ..TextStyle::default() - }; - - let mut editor_style = EditorStyle { - background: cx.theme().colors().toolbar_background, - local_player: cx.theme().players().local(), - text: text_style, - ..EditorStyle::default() - }; - if use_syntax { - editor_style.syntax = cx.theme().syntax().clone(); - } - - EditorElement::new(editor, editor_style) - } - pub fn query_editor_focused(&self) -> bool { self.query_editor_focused } @@ -185,7 +147,14 @@ impl Render for BufferSearchBar { let hide_inline_icons = self.editor_needed_width > self.editor_scroll_handle.bounds().size.width - window.rem_size() * 6.; - let supported_options = self.supported_options(cx); + let workspace::searchable::SearchOptions { + case, + word, + regex, + replacement, + selection, + find_in_results, + } = self.supported_options(cx); if self.query_editor.update(cx, |query_editor, _cx| { query_editor.placeholder_text().is_none() @@ -220,268 +189,205 @@ impl Render for BufferSearchBar { } }) .unwrap_or_else(|| "0/0".to_string()); - let should_show_replace_input = self.replace_enabled && supported_options.replacement; + let should_show_replace_input = self.replace_enabled && replacement; let in_replace = self.replacement_editor.focus_handle(cx).is_focused(window); + let theme_colors = cx.theme().colors(); + let query_border = if self.query_error.is_some() { + Color::Error.color(cx) + } else { + theme_colors.border + }; + let replacement_border = theme_colors.border; + + let container_width = window.viewport_size().width; + let input_width = SearchInputWidth::calc_width(container_width); + + let input_base_styles = + |border_color| input_base_styles(border_color, |div| div.w(input_width)); + + let query_column = input_base_styles(query_border) + .id("editor-scroll") + .track_scroll(&self.editor_scroll_handle) + .child(render_text_input(&self.query_editor, color_override, cx)) + .when(!hide_inline_icons, |div| { + div.child( + h_flex() + .gap_1() + .when(case, |div| { + div.child(SearchOptions::CASE_SENSITIVE.as_button( + self.search_options.contains(SearchOptions::CASE_SENSITIVE), + focus_handle.clone(), + cx.listener(|this, _, window, cx| { + this.toggle_case_sensitive(&ToggleCaseSensitive, window, cx) + }), + )) + }) + .when(word, |div| { + div.child(SearchOptions::WHOLE_WORD.as_button( + self.search_options.contains(SearchOptions::WHOLE_WORD), + focus_handle.clone(), + cx.listener(|this, _, window, cx| { + this.toggle_whole_word(&ToggleWholeWord, window, cx) + }), + )) + }) + .when(regex, |div| { + div.child(SearchOptions::REGEX.as_button( + self.search_options.contains(SearchOptions::REGEX), + focus_handle.clone(), + cx.listener(|this, _, window, cx| { + this.toggle_regex(&ToggleRegex, window, cx) + }), + )) + }), + ) + }); + + let mode_column = h_flex() + .gap_1() + .min_w_64() + .when(replacement, |this| { + this.child(toggle_replace_button( + "buffer-search-bar-toggle-replace-button", + focus_handle.clone(), + self.replace_enabled, + cx.listener(|this, _: &ClickEvent, window, cx| { + this.toggle_replace(&ToggleReplace, window, cx); + }), + )) + }) + .when(selection, |this| { + this.child( + IconButton::new( + "buffer-search-bar-toggle-search-selection-button", + IconName::Quote, + ) + .style(ButtonStyle::Subtle) + .shape(IconButtonShape::Square) + .when(self.selection_search_enabled, |button| { + button.style(ButtonStyle::Filled) + }) + .on_click(cx.listener(|this, _: &ClickEvent, window, cx| { + this.toggle_selection(&ToggleSelection, window, cx); + })) + .toggle_state(self.selection_search_enabled) + .tooltip({ + let focus_handle = focus_handle.clone(); + move |window, cx| { + Tooltip::for_action_in( + "Toggle Search Selection", + &ToggleSelection, + &focus_handle, + window, + cx, + ) + } + }), + ) + }) + .when(!find_in_results, |el| { + let query_focus = self.query_editor.focus_handle(cx); + let matches_column = h_flex() + .pl_2() + .ml_2() + .border_l_1() + .border_color(theme_colors.border_variant) + .child(render_action_button( + "buffer-search-nav-button", + ui::IconName::ChevronLeft, + self.active_match_index.is_some(), + "Select Previous Match", + &SelectPreviousMatch, + query_focus.clone(), + )) + .child(render_action_button( + "buffer-search-nav-button", + ui::IconName::ChevronRight, + self.active_match_index.is_some(), + "Select Next Match", + &SelectNextMatch, + query_focus.clone(), + )) + .when(!narrow_mode, |this| { + this.child(div().ml_2().min_w(rems_from_px(40.)).child( + Label::new(match_text).size(LabelSize::Small).color( + if self.active_match_index.is_some() { + Color::Default + } else { + Color::Disabled + }, + ), + )) + }); + + el.child(render_action_button( + "buffer-search-nav-button", + IconName::SelectAll, + true, + "Select All Matches", + &SelectAllMatches, + query_focus, + )) + .child(matches_column) + }) + .when(find_in_results, |el| { + el.child(render_action_button( + "buffer-search", + IconName::Close, + true, + "Close Search Bar", + &Dismiss, + focus_handle.clone(), + )) + }); + + let search_line = h_flex() + .w_full() + .gap_2() + .when(find_in_results, |el| { + el.child(Label::new("Find in results").color(Color::Hint)) + }) + .child(query_column) + .child(mode_column); + + let replace_line = + should_show_replace_input.then(|| { + let replace_column = input_base_styles(replacement_border) + .child(render_text_input(&self.replacement_editor, None, cx)); + let focus_handle = self.replacement_editor.read(cx).focus_handle(cx); + + let replace_actions = h_flex() + .min_w_64() + .gap_1() + .child(render_action_button( + "buffer-search-replace-button", + IconName::ReplaceNext, + true, + "Replace Next Match", + &ReplaceNext, + focus_handle.clone(), + )) + .child(render_action_button( + "buffer-search-replace-button", + IconName::ReplaceAll, + true, + "Replace All Matches", + &ReplaceAll, + focus_handle, + )); + h_flex() + .w_full() + .gap_2() + .child(replace_column) + .child(replace_actions) + }); + let mut key_context = KeyContext::new_with_defaults(); key_context.add("BufferSearchBar"); if in_replace { key_context.add("in_replace"); } - let query_border = if self.query_error.is_some() { - Color::Error.color(cx) - } else { - cx.theme().colors().border - }; - let replacement_border = cx.theme().colors().border; - - let container_width = window.viewport_size().width; - let input_width = SearchInputWidth::calc_width(container_width); - - let input_base_styles = |border_color| { - h_flex() - .min_w_32() - .w(input_width) - .h_8() - .pl_2() - .pr_1() - .py_1() - .border_1() - .border_color(border_color) - .rounded_lg() - }; - - let search_line = h_flex() - .gap_2() - .when(supported_options.find_in_results, |el| { - el.child(Label::new("Find in results").color(Color::Hint)) - }) - .child( - input_base_styles(query_border) - .id("editor-scroll") - .track_scroll(&self.editor_scroll_handle) - .child(self.render_text_input(&self.query_editor, color_override, cx)) - .when(!hide_inline_icons, |div| { - div.child( - h_flex() - .gap_1() - .children(supported_options.case.then(|| { - self.render_search_option_button( - SearchOptions::CASE_SENSITIVE, - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_case_sensitive( - &ToggleCaseSensitive, - window, - cx, - ) - }), - ) - })) - .children(supported_options.word.then(|| { - self.render_search_option_button( - SearchOptions::WHOLE_WORD, - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_whole_word(&ToggleWholeWord, window, cx) - }), - ) - })) - .children(supported_options.regex.then(|| { - self.render_search_option_button( - SearchOptions::REGEX, - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_regex(&ToggleRegex, window, cx) - }), - ) - })), - ) - }), - ) - .child( - h_flex() - .gap_1() - .min_w_64() - .when(supported_options.replacement, |this| { - this.child( - IconButton::new( - "buffer-search-bar-toggle-replace-button", - IconName::Replace, - ) - .style(ButtonStyle::Subtle) - .shape(IconButtonShape::Square) - .when(self.replace_enabled, |button| { - button.style(ButtonStyle::Filled) - }) - .on_click(cx.listener(|this, _: &ClickEvent, window, cx| { - this.toggle_replace(&ToggleReplace, window, cx); - })) - .toggle_state(self.replace_enabled) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Toggle Replace", - &ToggleReplace, - &focus_handle, - window, - cx, - ) - } - }), - ) - }) - .when(supported_options.selection, |this| { - this.child( - IconButton::new( - "buffer-search-bar-toggle-search-selection-button", - IconName::Quote, - ) - .style(ButtonStyle::Subtle) - .shape(IconButtonShape::Square) - .when(self.selection_search_enabled, |button| { - button.style(ButtonStyle::Filled) - }) - .on_click(cx.listener(|this, _: &ClickEvent, window, cx| { - this.toggle_selection(&ToggleSelection, window, cx); - })) - .toggle_state(self.selection_search_enabled) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Toggle Search Selection", - &ToggleSelection, - &focus_handle, - window, - cx, - ) - } - }), - ) - }) - .when(!supported_options.find_in_results, |el| { - el.child( - IconButton::new("select-all", ui::IconName::SelectAll) - .on_click(|_, window, cx| { - window.dispatch_action(SelectAllMatches.boxed_clone(), cx) - }) - .shape(IconButtonShape::Square) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Select All Matches", - &SelectAllMatches, - &focus_handle, - window, - cx, - ) - } - }), - ) - .child( - h_flex() - .pl_2() - .ml_1() - .border_l_1() - .border_color(cx.theme().colors().border_variant) - .child(render_nav_button( - ui::IconName::ChevronLeft, - self.active_match_index.is_some(), - "Select Previous Match", - &SelectPreviousMatch, - focus_handle.clone(), - )) - .child(render_nav_button( - ui::IconName::ChevronRight, - self.active_match_index.is_some(), - "Select Next Match", - &SelectNextMatch, - focus_handle.clone(), - )), - ) - .when(!narrow_mode, |this| { - this.child(h_flex().ml_2().min_w(rems_from_px(40.)).child( - Label::new(match_text).size(LabelSize::Small).color( - if self.active_match_index.is_some() { - Color::Default - } else { - Color::Disabled - }, - ), - )) - }) - }) - .when(supported_options.find_in_results, |el| { - el.child( - IconButton::new(SharedString::from("Close"), IconName::Close) - .shape(IconButtonShape::Square) - .tooltip(move |window, cx| { - Tooltip::for_action("Close Search Bar", &Dismiss, window, cx) - }) - .on_click(cx.listener(|this, _: &ClickEvent, window, cx| { - this.dismiss(&Dismiss, window, cx) - })), - ) - }), - ); - - let replace_line = should_show_replace_input.then(|| { - h_flex() - .gap_2() - .child( - input_base_styles(replacement_border).child(self.render_text_input( - &self.replacement_editor, - None, - cx, - )), - ) - .child( - h_flex() - .min_w_64() - .gap_1() - .child( - IconButton::new("search-replace-next", ui::IconName::ReplaceNext) - .shape(IconButtonShape::Square) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Replace Next Match", - &ReplaceNext, - &focus_handle, - window, - cx, - ) - } - }) - .on_click(cx.listener(|this, _, window, cx| { - this.replace_next(&ReplaceNext, window, cx) - })), - ) - .child( - IconButton::new("search-replace-all", ui::IconName::ReplaceAll) - .shape(IconButtonShape::Square) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Replace All Matches", - &ReplaceAll, - &focus_handle, - window, - cx, - ) - } - }) - .on_click(cx.listener(|this, _, window, cx| { - this.replace_all(&ReplaceAll, window, cx) - })), - ), - ) - }); let query_error_line = self.query_error.as_ref().map(|error| { Label::new(error) @@ -491,10 +397,26 @@ impl Render for BufferSearchBar { .ml_2() }); + let search_line = + h_flex() + .relative() + .child(search_line) + .when(!narrow_mode && !find_in_results, |div| { + div.child(h_flex().absolute().right_0().child(render_action_button( + "buffer-search", + IconName::Close, + true, + "Close Search Bar", + &Dismiss, + focus_handle.clone(), + ))) + .w_full() + }); v_flex() .id("buffer_search") .gap_2() .py(px(1.0)) + .w_full() .track_scroll(&self.scroll_handle) .key_context(key_context) .capture_action(cx.listener(Self::tab)) @@ -509,43 +431,26 @@ impl Render for BufferSearchBar { active_searchable_item.relay_action(Box::new(ToggleOutline), window, cx); } })) - .when(self.supported_options(cx).replacement, |this| { + .when(replacement, |this| { this.on_action(cx.listener(Self::toggle_replace)) .when(in_replace, |this| { this.on_action(cx.listener(Self::replace_next)) .on_action(cx.listener(Self::replace_all)) }) }) - .when(self.supported_options(cx).case, |this| { + .when(case, |this| { this.on_action(cx.listener(Self::toggle_case_sensitive)) }) - .when(self.supported_options(cx).word, |this| { + .when(word, |this| { this.on_action(cx.listener(Self::toggle_whole_word)) }) - .when(self.supported_options(cx).regex, |this| { + .when(regex, |this| { this.on_action(cx.listener(Self::toggle_regex)) }) - .when(self.supported_options(cx).selection, |this| { + .when(selection, |this| { this.on_action(cx.listener(Self::toggle_selection)) }) - .child(h_flex().relative().child(search_line.w_full()).when( - !narrow_mode && !supported_options.find_in_results, - |div| { - div.child( - h_flex().absolute().right_0().child( - IconButton::new(SharedString::from("Close"), IconName::Close) - .shape(IconButtonShape::Square) - .tooltip(move |window, cx| { - Tooltip::for_action("Close Search Bar", &Dismiss, window, cx) - }) - .on_click(cx.listener(|this, _: &ClickEvent, window, cx| { - this.dismiss(&Dismiss, window, cx) - })), - ), - ) - .w_full() - }, - )) + .child(search_line) .children(query_error_line) .children(replace_line) } @@ -792,7 +697,7 @@ impl BufferSearchBar { active_editor.search_bar_visibility_changed(false, window, cx); active_editor.toggle_filtered_search_ranges(false, window, cx); let handle = active_editor.item_focus_handle(cx); - self.focus(&handle, window, cx); + self.focus(&handle, window); } cx.emit(Event::UpdateLocation); cx.emit(ToolbarItemEvent::ChangeLocation( @@ -948,7 +853,7 @@ impl BufferSearchBar { } pub fn focus_replace(&mut self, window: &mut Window, cx: &mut Context) { - self.focus(&self.replacement_editor.focus_handle(cx), window, cx); + self.focus(&self.replacement_editor.focus_handle(cx), window); cx.notify(); } @@ -975,16 +880,6 @@ impl BufferSearchBar { self.update_matches(!updated, window, cx) } - fn render_search_option_button( - &self, - option: SearchOptions, - focus_handle: FocusHandle, - action: Action, - ) -> impl IntoElement + use { - let is_active = self.search_options.contains(option); - option.as_button(is_active, focus_handle, action) - } - pub fn focus_editor(&mut self, _: &FocusEditor, window: &mut Window, cx: &mut Context) { if let Some(active_editor) = self.active_searchable_item.as_ref() { let handle = active_editor.item_focus_handle(cx); @@ -1400,28 +1295,32 @@ impl BufferSearchBar { } fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context) { - // Search -> Replace -> Editor - let focus_handle = if self.replace_enabled && self.query_editor_focused { - self.replacement_editor.focus_handle(cx) - } else if let Some(item) = self.active_searchable_item.as_ref() { - item.item_focus_handle(cx) - } else { - return; - }; - self.focus(&focus_handle, window, cx); - cx.stop_propagation(); + self.cycle_field(Direction::Next, window, cx); } fn backtab(&mut self, _: &Backtab, window: &mut Window, cx: &mut Context) { - // Search -> Replace -> Search - let focus_handle = if self.replace_enabled && self.query_editor_focused { - self.replacement_editor.focus_handle(cx) - } else if self.replacement_editor_focused { - self.query_editor.focus_handle(cx) - } else { - return; + self.cycle_field(Direction::Prev, window, cx); + } + fn cycle_field(&mut self, direction: Direction, window: &mut Window, cx: &mut Context) { + let mut handles = vec![self.query_editor.focus_handle(cx)]; + if self.replace_enabled { + handles.push(self.replacement_editor.focus_handle(cx)); + } + if let Some(item) = self.active_searchable_item.as_ref() { + handles.push(item.item_focus_handle(cx)); + } + let current_index = match handles.iter().position(|focus| focus.is_focused(window)) { + Some(index) => index, + None => return, }; - self.focus(&focus_handle, window, cx); + + let new_index = match direction { + Direction::Next => (current_index + 1) % handles.len(), + Direction::Prev if current_index == 0 => handles.len() - 1, + Direction::Prev => (current_index - 1) % handles.len(), + }; + let next_focus_handle = &handles[new_index]; + self.focus(next_focus_handle, window); cx.stop_propagation(); } @@ -1469,10 +1368,8 @@ impl BufferSearchBar { } } - fn focus(&self, handle: &gpui::FocusHandle, window: &mut Window, cx: &mut Context) { - cx.on_next_frame(window, |_, window, _| { - window.invalidate_character_coordinates(); - }); + fn focus(&self, handle: &gpui::FocusHandle, window: &mut Window) { + window.invalidate_character_coordinates(); window.focus(handle); } @@ -1484,7 +1381,7 @@ impl BufferSearchBar { } else { self.query_editor.focus_handle(cx) }; - self.focus(&handle, window, cx); + self.focus(&handle, window); cx.notify(); } } diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 96194cdad2..9e8afa4392 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1,20 +1,25 @@ use crate::{ BufferSearchBar, FocusSearch, NextHistoryQuery, PreviousHistoryQuery, ReplaceAll, ReplaceNext, SearchOptions, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, ToggleIncludeIgnored, - ToggleRegex, ToggleReplace, ToggleWholeWord, buffer_search::Deploy, + ToggleRegex, ToggleReplace, ToggleWholeWord, + buffer_search::Deploy, + search_bar::{ + input_base_styles, render_action_button, render_text_input, toggle_replace_button, + }, }; use anyhow::Context as _; -use collections::{HashMap, HashSet}; +use collections::HashMap; use editor::{ - Anchor, Editor, EditorElement, EditorEvent, EditorSettings, EditorStyle, MAX_TAB_TITLE_LEN, - MultiBuffer, SelectionEffects, actions::SelectAll, items::active_match_index, + Anchor, Editor, EditorEvent, EditorSettings, MAX_TAB_TITLE_LEN, MultiBuffer, SelectionEffects, + actions::{Backtab, SelectAll, Tab}, + items::active_match_index, }; use futures::{StreamExt, stream::FuturesOrdered}; use gpui::{ Action, AnyElement, AnyView, App, Axis, Context, Entity, EntityId, EventEmitter, FocusHandle, Focusable, Global, Hsla, InteractiveElement, IntoElement, KeyContext, ParentElement, Point, - Render, SharedString, Styled, Subscription, Task, TextStyle, UpdateGlobal, WeakEntity, Window, - actions, div, + Render, SharedString, Styled, Subscription, Task, UpdateGlobal, WeakEntity, Window, actions, + div, }; use language::{Buffer, Language}; use menu::Confirm; @@ -32,7 +37,6 @@ use std::{ pin::pin, sync::Arc, }; -use theme::ThemeSettings; use ui::{ Icon, IconButton, IconButtonShape, IconName, KeyBinding, Label, LabelCommon, LabelSize, Toggleable, Tooltip, h_flex, prelude::*, utils::SearchInputWidth, v_flex, @@ -208,7 +212,7 @@ pub struct ProjectSearchView { replacement_editor: Entity, results_editor: Entity, search_options: SearchOptions, - panels_with_errors: HashSet, + panels_with_errors: HashMap, active_match_index: Option, search_id: usize, included_files_editor: Entity, @@ -218,7 +222,6 @@ pub struct ProjectSearchView { included_opened_only: bool, regex_language: Option>, _subscriptions: Vec, - query_error: Option, } #[derive(Debug, Clone)] @@ -879,7 +882,7 @@ impl ProjectSearchView { query_editor, results_editor, search_options: options, - panels_with_errors: HashSet::default(), + panels_with_errors: HashMap::default(), active_match_index: None, included_files_editor, excluded_files_editor, @@ -888,7 +891,6 @@ impl ProjectSearchView { included_opened_only: false, regex_language: None, _subscriptions: subscriptions, - query_error: None, }; this.entity_changed(window, cx); this @@ -1152,14 +1154,16 @@ impl ProjectSearchView { Ok(included_files) => { let should_unmark_error = self.panels_with_errors.remove(&InputPanel::Include); - if should_unmark_error { + if should_unmark_error.is_some() { cx.notify(); } included_files } - Err(_e) => { - let should_mark_error = self.panels_with_errors.insert(InputPanel::Include); - if should_mark_error { + Err(e) => { + let should_mark_error = self + .panels_with_errors + .insert(InputPanel::Include, e.to_string()); + if should_mark_error.is_none() { cx.notify(); } PathMatcher::default() @@ -1174,15 +1178,17 @@ impl ProjectSearchView { Ok(excluded_files) => { let should_unmark_error = self.panels_with_errors.remove(&InputPanel::Exclude); - if should_unmark_error { + if should_unmark_error.is_some() { cx.notify(); } excluded_files } - Err(_e) => { - let should_mark_error = self.panels_with_errors.insert(InputPanel::Exclude); - if should_mark_error { + Err(e) => { + let should_mark_error = self + .panels_with_errors + .insert(InputPanel::Exclude, e.to_string()); + if should_mark_error.is_none() { cx.notify(); } PathMatcher::default() @@ -1219,19 +1225,19 @@ impl ProjectSearchView { ) { Ok(query) => { let should_unmark_error = self.panels_with_errors.remove(&InputPanel::Query); - if should_unmark_error { + if should_unmark_error.is_some() { cx.notify(); } - self.query_error = None; Some(query) } Err(e) => { - let should_mark_error = self.panels_with_errors.insert(InputPanel::Query); - if should_mark_error { + let should_mark_error = self + .panels_with_errors + .insert(InputPanel::Query, e.to_string()); + if should_mark_error.is_none() { cx.notify(); } - self.query_error = Some(e.to_string()); None } @@ -1249,15 +1255,17 @@ impl ProjectSearchView { ) { Ok(query) => { let should_unmark_error = self.panels_with_errors.remove(&InputPanel::Query); - if should_unmark_error { + if should_unmark_error.is_some() { cx.notify(); } Some(query) } - Err(_e) => { - let should_mark_error = self.panels_with_errors.insert(InputPanel::Query); - if should_mark_error { + Err(e) => { + let should_mark_error = self + .panels_with_errors + .insert(InputPanel::Query, e.to_string()); + if should_mark_error.is_none() { cx.notify(); } @@ -1512,7 +1520,7 @@ impl ProjectSearchView { } fn border_color_for(&self, panel: InputPanel, cx: &App) -> Hsla { - if self.panels_with_errors.contains(&panel) { + if self.panels_with_errors.contains_key(&panel) { Color::Error.color(cx) } else { cx.theme().colors().border @@ -1610,16 +1618,11 @@ impl ProjectSearchBar { } } - fn tab(&mut self, _: &editor::actions::Tab, window: &mut Window, cx: &mut Context) { + fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context) { self.cycle_field(Direction::Next, window, cx); } - fn backtab( - &mut self, - _: &editor::actions::Backtab, - window: &mut Window, - cx: &mut Context, - ) { + fn backtab(&mut self, _: &Backtab, window: &mut Window, cx: &mut Context) { self.cycle_field(Direction::Prev, window, cx); } @@ -1634,29 +1637,22 @@ impl ProjectSearchBar { fn cycle_field(&mut self, direction: Direction, window: &mut Window, cx: &mut Context) { let active_project_search = match &self.active_project_search { Some(active_project_search) => active_project_search, - - None => { - return; - } + None => return, }; active_project_search.update(cx, |project_view, cx| { - let mut views = vec![&project_view.query_editor]; + let mut views = vec![project_view.query_editor.focus_handle(cx)]; if project_view.replace_enabled { - views.push(&project_view.replacement_editor); + views.push(project_view.replacement_editor.focus_handle(cx)); } if project_view.filters_enabled { views.extend([ - &project_view.included_files_editor, - &project_view.excluded_files_editor, + project_view.included_files_editor.focus_handle(cx), + project_view.excluded_files_editor.focus_handle(cx), ]); } - let current_index = match views - .iter() - .enumerate() - .find(|(_, editor)| editor.focus_handle(cx).is_focused(window)) - { - Some((index, _)) => index, + let current_index = match views.iter().position(|focus| focus.is_focused(window)) { + Some(index) => index, None => return, }; @@ -1665,8 +1661,8 @@ impl ProjectSearchBar { Direction::Prev if current_index == 0 => views.len() - 1, Direction::Prev => (current_index - 1) % views.len(), }; - let next_focus_handle = views[new_index].focus_handle(cx); - window.focus(&next_focus_handle); + let next_focus_handle = &views[new_index]; + window.focus(next_focus_handle); cx.stop_propagation(); }); } @@ -1915,37 +1911,6 @@ impl ProjectSearchBar { }) } } - - fn render_text_input(&self, editor: &Entity, cx: &Context) -> impl IntoElement { - let (color, use_syntax) = if editor.read(cx).read_only(cx) { - (cx.theme().colors().text_disabled, false) - } else { - (cx.theme().colors().text, true) - }; - let settings = ThemeSettings::get_global(cx); - let text_style = TextStyle { - color, - font_family: settings.buffer_font.family.clone(), - font_features: settings.buffer_font.features.clone(), - font_fallbacks: settings.buffer_font.fallbacks.clone(), - font_size: rems(0.875).into(), - font_weight: settings.buffer_font.weight, - line_height: relative(1.3), - ..TextStyle::default() - }; - - let mut editor_style = EditorStyle { - background: cx.theme().colors().toolbar_background, - local_player: cx.theme().players().local(), - text: text_style, - ..EditorStyle::default() - }; - if use_syntax { - editor_style.syntax = cx.theme().syntax().clone(); - } - - EditorElement::new(editor, editor_style) - } } impl Render for ProjectSearchBar { @@ -1959,28 +1924,43 @@ impl Render for ProjectSearchBar { let container_width = window.viewport_size().width; let input_width = SearchInputWidth::calc_width(container_width); - enum BaseStyle { - SingleInput, - MultipleInputs, - } - - let input_base_styles = |base_style: BaseStyle, panel: InputPanel| { - h_flex() - .min_w_32() - .map(|div| match base_style { - BaseStyle::SingleInput => div.w(input_width), - BaseStyle::MultipleInputs => div.flex_grow(), - }) - .h_8() - .pl_2() - .pr_1() - .py_1() - .border_1() - .border_color(search.border_color_for(panel, cx)) - .rounded_lg() + let input_base_styles = |panel: InputPanel| { + input_base_styles(search.border_color_for(panel, cx), |div| match panel { + InputPanel::Query | InputPanel::Replacement => div.w(input_width), + InputPanel::Include | InputPanel::Exclude => div.flex_grow(), + }) }; + let theme_colors = cx.theme().colors(); + let project_search = search.entity.read(cx); + let limit_reached = project_search.limit_reached; - let query_column = input_base_styles(BaseStyle::SingleInput, InputPanel::Query) + let color_override = match ( + project_search.no_results, + &project_search.active_query, + &project_search.last_search_query_text, + ) { + (Some(true), Some(q), Some(p)) if q.as_str() == p => Some(Color::Error), + _ => None, + }; + let match_text = search + .active_match_index + .and_then(|index| { + let index = index + 1; + let match_quantity = project_search.match_ranges.len(); + if match_quantity > 0 { + debug_assert!(match_quantity >= index); + if limit_reached { + Some(format!("{index}/{match_quantity}+")) + } else { + Some(format!("{index}/{match_quantity}")) + } + } else { + None + } + }) + .unwrap_or_else(|| "0/0".to_string()); + + let query_column = input_base_styles(InputPanel::Query) .on_action(cx.listener(|this, action, window, cx| this.confirm(action, window, cx))) .on_action(cx.listener(|this, action, window, cx| { this.previous_history_query(action, window, cx) @@ -1988,7 +1968,7 @@ impl Render for ProjectSearchBar { .on_action( cx.listener(|this, action, window, cx| this.next_history_query(action, window, cx)), ) - .child(self.render_text_input(&search.query_editor, cx)) + .child(render_text_input(&search.query_editor, color_override, cx)) .child( h_flex() .gap_1() @@ -2017,6 +1997,7 @@ impl Render for ProjectSearchBar { let mode_column = h_flex() .gap_1() + .min_w_64() .child( IconButton::new("project-search-filter-button", IconName::Filter) .shape(IconButtonShape::Square) @@ -2045,109 +2026,46 @@ impl Render for ProjectSearchBar { } }), ) - .child( - IconButton::new("project-search-toggle-replace", IconName::Replace) - .shape(IconButtonShape::Square) - .on_click(cx.listener(|this, _, window, cx| { - this.toggle_replace(&ToggleReplace, window, cx); - })) - .toggle_state( - self.active_project_search - .as_ref() - .map(|search| search.read(cx).replace_enabled) - .unwrap_or_default(), - ) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Toggle Replace", - &ToggleReplace, - &focus_handle, - window, - cx, - ) - } - }), - ); + .child(toggle_replace_button( + "project-search-toggle-replace", + focus_handle.clone(), + self.active_project_search + .as_ref() + .map(|search| search.read(cx).replace_enabled) + .unwrap_or_default(), + cx.listener(|this, _, window, cx| { + this.toggle_replace(&ToggleReplace, window, cx); + }), + )); - let limit_reached = search.entity.read(cx).limit_reached; - - let match_text = search - .active_match_index - .and_then(|index| { - let index = index + 1; - let match_quantity = search.entity.read(cx).match_ranges.len(); - if match_quantity > 0 { - debug_assert!(match_quantity >= index); - if limit_reached { - Some(format!("{index}/{match_quantity}+")) - } else { - Some(format!("{index}/{match_quantity}")) - } - } else { - None - } - }) - .unwrap_or_else(|| "0/0".to_string()); + let query_focus = search.query_editor.focus_handle(cx); let matches_column = h_flex() .pl_2() .ml_2() .border_l_1() - .border_color(cx.theme().colors().border_variant) - .child( - IconButton::new("project-search-prev-match", IconName::ChevronLeft) - .shape(IconButtonShape::Square) - .disabled(search.active_match_index.is_none()) - .on_click(cx.listener(|this, _, window, cx| { - if let Some(search) = this.active_project_search.as_ref() { - search.update(cx, |this, cx| { - this.select_match(Direction::Prev, window, cx); - }) - } - })) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Go To Previous Match", - &SelectPreviousMatch, - &focus_handle, - window, - cx, - ) - } - }), - ) - .child( - IconButton::new("project-search-next-match", IconName::ChevronRight) - .shape(IconButtonShape::Square) - .disabled(search.active_match_index.is_none()) - .on_click(cx.listener(|this, _, window, cx| { - if let Some(search) = this.active_project_search.as_ref() { - search.update(cx, |this, cx| { - this.select_match(Direction::Next, window, cx); - }) - } - })) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Go To Next Match", - &SelectNextMatch, - &focus_handle, - window, - cx, - ) - } - }), - ) + .border_color(theme_colors.border_variant) + .child(render_action_button( + "project-search-nav-button", + IconName::ChevronLeft, + search.active_match_index.is_some(), + "Select Previous Match", + &SelectPreviousMatch, + query_focus.clone(), + )) + .child(render_action_button( + "project-search-nav-button", + IconName::ChevronRight, + search.active_match_index.is_some(), + "Select Next Match", + &SelectNextMatch, + query_focus, + )) .child( div() .id("matches") - .ml_1() + .ml_2() + .min_w(rems_from_px(40.)) .child(Label::new(match_text).size(LabelSize::Small).color( if search.active_match_index.is_some() { Color::Default @@ -2169,63 +2087,30 @@ impl Render for ProjectSearchBar { .child(h_flex().min_w_64().child(mode_column).child(matches_column)); let replace_line = search.replace_enabled.then(|| { - let replace_column = input_base_styles(BaseStyle::SingleInput, InputPanel::Replacement) - .child(self.render_text_input(&search.replacement_editor, cx)); + let replace_column = input_base_styles(InputPanel::Replacement) + .child(render_text_input(&search.replacement_editor, None, cx)); let focus_handle = search.replacement_editor.read(cx).focus_handle(cx); - let replace_actions = - h_flex() - .min_w_64() - .gap_1() - .when(search.replace_enabled, |this| { - this.child( - IconButton::new("project-search-replace-next", IconName::ReplaceNext) - .shape(IconButtonShape::Square) - .on_click(cx.listener(|this, _, window, cx| { - if let Some(search) = this.active_project_search.as_ref() { - search.update(cx, |this, cx| { - this.replace_next(&ReplaceNext, window, cx); - }) - } - })) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Replace Next Match", - &ReplaceNext, - &focus_handle, - window, - cx, - ) - } - }), - ) - .child( - IconButton::new("project-search-replace-all", IconName::ReplaceAll) - .shape(IconButtonShape::Square) - .on_click(cx.listener(|this, _, window, cx| { - if let Some(search) = this.active_project_search.as_ref() { - search.update(cx, |this, cx| { - this.replace_all(&ReplaceAll, window, cx); - }) - } - })) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Replace All Matches", - &ReplaceAll, - &focus_handle, - window, - cx, - ) - } - }), - ) - }); + let replace_actions = h_flex() + .min_w_64() + .gap_1() + .child(render_action_button( + "project-search-replace-button", + IconName::ReplaceNext, + true, + "Replace Next Match", + &ReplaceNext, + focus_handle.clone(), + )) + .child(render_action_button( + "project-search-replace-button", + IconName::ReplaceAll, + true, + "Replace All Matches", + &ReplaceAll, + focus_handle, + )); h_flex() .w_full() @@ -2235,6 +2120,45 @@ impl Render for ProjectSearchBar { }); let filter_line = search.filters_enabled.then(|| { + let include = input_base_styles(InputPanel::Include) + .on_action(cx.listener(|this, action, window, cx| { + this.previous_history_query(action, window, cx) + })) + .on_action(cx.listener(|this, action, window, cx| { + this.next_history_query(action, window, cx) + })) + .child(render_text_input(&search.included_files_editor, None, cx)); + let exclude = input_base_styles(InputPanel::Exclude) + .on_action(cx.listener(|this, action, window, cx| { + this.previous_history_query(action, window, cx) + })) + .on_action(cx.listener(|this, action, window, cx| { + this.next_history_query(action, window, cx) + })) + .child(render_text_input(&search.excluded_files_editor, None, cx)); + let mode_column = h_flex() + .gap_1() + .min_w_64() + .child( + IconButton::new("project-search-opened-only", IconName::FolderSearch) + .shape(IconButtonShape::Square) + .toggle_state(self.is_opened_only_enabled(cx)) + .tooltip(Tooltip::text("Only Search Open Files")) + .on_click(cx.listener(|this, _, window, cx| { + this.toggle_opened_only(window, cx); + })), + ) + .child( + SearchOptions::INCLUDE_IGNORED.as_button( + search + .search_options + .contains(SearchOptions::INCLUDE_IGNORED), + focus_handle.clone(), + cx.listener(|this, _, window, cx| { + this.toggle_search_option(SearchOptions::INCLUDE_IGNORED, window, cx); + }), + ), + ); h_flex() .w_full() .gap_2() @@ -2242,62 +2166,14 @@ impl Render for ProjectSearchBar { h_flex() .gap_2() .w(input_width) - .child( - input_base_styles(BaseStyle::MultipleInputs, InputPanel::Include) - .on_action(cx.listener(|this, action, window, cx| { - this.previous_history_query(action, window, cx) - })) - .on_action(cx.listener(|this, action, window, cx| { - this.next_history_query(action, window, cx) - })) - .child(self.render_text_input(&search.included_files_editor, cx)), - ) - .child( - input_base_styles(BaseStyle::MultipleInputs, InputPanel::Exclude) - .on_action(cx.listener(|this, action, window, cx| { - this.previous_history_query(action, window, cx) - })) - .on_action(cx.listener(|this, action, window, cx| { - this.next_history_query(action, window, cx) - })) - .child(self.render_text_input(&search.excluded_files_editor, cx)), - ), - ) - .child( - h_flex() - .min_w_64() - .gap_1() - .child( - IconButton::new("project-search-opened-only", IconName::FolderSearch) - .shape(IconButtonShape::Square) - .toggle_state(self.is_opened_only_enabled(cx)) - .tooltip(Tooltip::text("Only Search Open Files")) - .on_click(cx.listener(|this, _, window, cx| { - this.toggle_opened_only(window, cx); - })), - ) - .child( - SearchOptions::INCLUDE_IGNORED.as_button( - search - .search_options - .contains(SearchOptions::INCLUDE_IGNORED), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_search_option( - SearchOptions::INCLUDE_IGNORED, - window, - cx, - ); - }), - ), - ), + .child(include) + .child(exclude), ) + .child(mode_column) }); let mut key_context = KeyContext::default(); - key_context.add("ProjectSearchBar"); - if search .replacement_editor .focus_handle(cx) @@ -2306,16 +2182,33 @@ impl Render for ProjectSearchBar { key_context.add("in_replace"); } - let query_error_line = search.query_error.as_ref().map(|error| { - Label::new(error) - .size(LabelSize::Small) - .color(Color::Error) - .mt_neg_1() - .ml_2() - }); + let query_error_line = search + .panels_with_errors + .get(&InputPanel::Query) + .map(|error| { + Label::new(error) + .size(LabelSize::Small) + .color(Color::Error) + .mt_neg_1() + .ml_2() + }); + + let filter_error_line = search + .panels_with_errors + .get(&InputPanel::Include) + .or_else(|| search.panels_with_errors.get(&InputPanel::Exclude)) + .map(|error| { + Label::new(error) + .size(LabelSize::Small) + .color(Color::Error) + .mt_neg_1() + .ml_2() + }); v_flex() + .gap_2() .py(px(1.0)) + .w_full() .key_context(key_context) .on_action(cx.listener(|this, _: &ToggleFocus, window, cx| { this.move_focus_to_results(window, cx) @@ -2323,14 +2216,8 @@ impl Render for ProjectSearchBar { .on_action(cx.listener(|this, _: &ToggleFilters, window, cx| { this.toggle_filters(window, cx); })) - .capture_action(cx.listener(|this, action, window, cx| { - this.tab(action, window, cx); - cx.stop_propagation(); - })) - .capture_action(cx.listener(|this, action, window, cx| { - this.backtab(action, window, cx); - cx.stop_propagation(); - })) + .capture_action(cx.listener(Self::tab)) + .capture_action(cx.listener(Self::backtab)) .on_action(cx.listener(|this, action, window, cx| this.confirm(action, window, cx))) .on_action(cx.listener(|this, action, window, cx| { this.toggle_replace(action, window, cx); @@ -2362,12 +2249,11 @@ impl Render for ProjectSearchBar { }) .on_action(cx.listener(Self::select_next_match)) .on_action(cx.listener(Self::select_prev_match)) - .gap_2() - .w_full() .child(search_line) .children(query_error_line) .children(replace_line) .children(filter_line) + .children(filter_error_line) } } diff --git a/crates/search/src/search_bar.rs b/crates/search/src/search_bar.rs index 805664c794..2805b0c62d 100644 --- a/crates/search/src/search_bar.rs +++ b/crates/search/src/search_bar.rs @@ -1,8 +1,14 @@ -use gpui::{Action, FocusHandle, IntoElement}; +use editor::{Editor, EditorElement, EditorStyle}; +use gpui::{Action, Entity, FocusHandle, Hsla, IntoElement, TextStyle}; +use settings::Settings; +use theme::ThemeSettings; use ui::{IconButton, IconButtonShape}; use ui::{Tooltip, prelude::*}; -pub(super) fn render_nav_button( +use crate::ToggleReplace; + +pub(super) fn render_action_button( + id_prefix: &'static str, icon: ui::IconName, active: bool, tooltip: &'static str, @@ -10,7 +16,7 @@ pub(super) fn render_nav_button( focus_handle: FocusHandle, ) -> impl IntoElement { IconButton::new( - SharedString::from(format!("search-nav-button-{}", action.name())), + SharedString::from(format!("{id_prefix}-{}", action.name())), icon, ) .shape(IconButtonShape::Square) @@ -26,3 +32,74 @@ pub(super) fn render_nav_button( .tooltip(move |window, cx| Tooltip::for_action_in(tooltip, action, &focus_handle, window, cx)) .disabled(!active) } + +pub(crate) fn input_base_styles(border_color: Hsla, map: impl FnOnce(Div) -> Div) -> Div { + h_flex() + .min_w_32() + .map(map) + .h_8() + .pl_2() + .pr_1() + .py_1() + .border_1() + .border_color(border_color) + .rounded_lg() +} + +pub(crate) fn toggle_replace_button( + id: &'static str, + focus_handle: FocusHandle, + replace_enabled: bool, + on_click: impl Fn(&gpui::ClickEvent, &mut Window, &mut App) + 'static, +) -> IconButton { + IconButton::new(id, IconName::Replace) + .shape(IconButtonShape::Square) + .style(ButtonStyle::Subtle) + .when(replace_enabled, |button| button.style(ButtonStyle::Filled)) + .on_click(on_click) + .toggle_state(replace_enabled) + .tooltip({ + move |window, cx| { + Tooltip::for_action_in("Toggle Replace", &ToggleReplace, &focus_handle, window, cx) + } + }) +} + +pub(crate) fn render_text_input( + editor: &Entity, + color_override: Option, + app: &App, +) -> impl IntoElement { + let (color, use_syntax) = if editor.read(app).read_only(app) { + (app.theme().colors().text_disabled, false) + } else { + match color_override { + Some(color_override) => (color_override.color(app), false), + None => (app.theme().colors().text, true), + } + }; + + let settings = ThemeSettings::get_global(app); + let text_style = TextStyle { + color, + font_family: settings.buffer_font.family.clone(), + font_features: settings.buffer_font.features.clone(), + font_fallbacks: settings.buffer_font.fallbacks.clone(), + font_size: rems(0.875).into(), + font_weight: settings.buffer_font.weight, + line_height: relative(1.3), + ..TextStyle::default() + }; + + let mut editor_style = EditorStyle { + background: app.theme().colors().toolbar_background, + local_player: app.theme().players().local(), + text: text_style, + ..EditorStyle::default() + }; + if use_syntax { + editor_style.syntax = app.theme().syntax().clone(); + } + + EditorElement::new(editor, editor_style) +} diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index ba9e3bbb8a..ca98404194 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -3878,9 +3878,7 @@ impl Workspace { local, focus_changed, } => { - cx.on_next_frame(window, |_, window, _| { - window.invalidate_character_coordinates(); - }); + window.invalidate_character_coordinates(); pane.update(cx, |pane, _| { pane.track_alternate_file_items(); @@ -3921,9 +3919,7 @@ impl Workspace { } } pane::Event::Focus => { - cx.on_next_frame(window, |_, window, _| { - window.invalidate_character_coordinates(); - }); + window.invalidate_character_coordinates(); self.handle_pane_focused(pane.clone(), window, cx); } pane::Event::ZoomIn => { From a3dcc7668756f4ab6aae6d3d5b2ba9a309303723 Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Fri, 15 Aug 2025 12:12:18 +0300 Subject: [PATCH 58/74] openai: Don't send reasoning_effort if it's not set (#36228) Release Notes: - N/A --- crates/open_ai/src/open_ai.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/open_ai/src/open_ai.rs b/crates/open_ai/src/open_ai.rs index 5801f29623..8bbe858995 100644 --- a/crates/open_ai/src/open_ai.rs +++ b/crates/open_ai/src/open_ai.rs @@ -257,6 +257,7 @@ pub struct Request { pub tools: Vec, #[serde(default, skip_serializing_if = "Option::is_none")] pub prompt_cache_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] pub reasoning_effort: Option, } From 4f0b00b0d9cd25798a3e20a789cf93835251d8c3 Mon Sep 17 00:00:00 2001 From: David Kleingeld Date: Fri, 15 Aug 2025 12:10:52 +0200 Subject: [PATCH 59/74] Add component NotificationFrame & CaptureAudio parts for testing (#36081) Adds component NotificationFrame. It implements a subset of MessageNotification as a Component and refactors MessageNotification to use NotificationFrame. Having some notification UI Component is nice as it allows us to easily build new types of notifications. Uses the new NotificationFrame component for CaptureAudioNotification. Adds a CaptureAudio action in the dev namespace (not meant for end-users). It records 10 seconds of audio and saves that to a wav file. Release Notes: - N/A --------- Co-authored-by: Mikayla --- .config/hakari.toml | 2 + Cargo.lock | 9 + Cargo.toml | 2 +- crates/audio/Cargo.toml | 2 +- crates/livekit_client/Cargo.toml | 2 + crates/livekit_client/src/lib.rs | 64 +++++ crates/livekit_client/src/livekit_client.rs | 2 + .../src/livekit_client/playback.rs | 57 +---- crates/livekit_client/src/record.rs | 91 ++++++++ crates/workspace/src/notifications.rs | 218 ++++++++++++------ crates/workspace/src/workspace.rs | 3 +- crates/zed/Cargo.toml | 1 + crates/zed/src/zed.rs | 122 +++++++++- 13 files changed, 448 insertions(+), 127 deletions(-) create mode 100644 crates/livekit_client/src/record.rs diff --git a/.config/hakari.toml b/.config/hakari.toml index 2050065cc2..f71e97b45c 100644 --- a/.config/hakari.toml +++ b/.config/hakari.toml @@ -25,6 +25,8 @@ third-party = [ { name = "reqwest", version = "0.11.27" }, # build of remote_server should not include scap / its x11 dependency { name = "scap", git = "https://github.com/zed-industries/scap", rev = "808aa5c45b41e8f44729d02e38fd00a2fe2722e7" }, + # build of remote_server should not need to include on libalsa through rodio + { name = "rodio" }, ] [final-excludes] diff --git a/Cargo.lock b/Cargo.lock index 0bafc3c386..2353733dc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7883,6 +7883,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "hound" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" + [[package]] name = "html5ever" version = "0.27.0" @@ -9711,6 +9717,7 @@ dependencies = [ "objc", "parking_lot", "postage", + "rodio", "scap", "serde", "serde_json", @@ -13972,6 +13979,7 @@ checksum = "e40ecf59e742e03336be6a3d53755e789fd05a059fa22dfa0ed624722319e183" dependencies = [ "cpal", "dasp_sample", + "hound", "num-rational", "symphonia", "tracing", @@ -20576,6 +20584,7 @@ dependencies = [ "language_tools", "languages", "libc", + "livekit_client", "log", "markdown", "markdown_preview", diff --git a/Cargo.toml b/Cargo.toml index a872cadd39..baa4ee7f4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -363,6 +363,7 @@ remote_server = { path = "crates/remote_server" } repl = { path = "crates/repl" } reqwest_client = { path = "crates/reqwest_client" } rich_text = { path = "crates/rich_text" } +rodio = { version = "0.21.1", default-features = false } rope = { path = "crates/rope" } rpc = { path = "crates/rpc" } rules_library = { path = "crates/rules_library" } @@ -564,7 +565,6 @@ reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "951c77 "socks", "stream", ] } -rodio = { version = "0.21.1", default-features = false } rsa = "0.9.6" runtimelib = { git = "https://github.com/ConradIrwin/runtimed", rev = "7130c804216b6914355d15d0b91ea91f6babd734", default-features = false, features = [ "async-dispatcher-runtime", diff --git a/crates/audio/Cargo.toml b/crates/audio/Cargo.toml index f1f40ad654..5146396b92 100644 --- a/crates/audio/Cargo.toml +++ b/crates/audio/Cargo.toml @@ -18,6 +18,6 @@ collections.workspace = true derive_more.workspace = true gpui.workspace = true parking_lot.workspace = true -rodio = { workspace = true, features = ["wav", "playback", "tracing"] } +rodio = { workspace = true, features = [ "wav", "playback", "tracing" ] } util.workspace = true workspace-hack.workspace = true diff --git a/crates/livekit_client/Cargo.toml b/crates/livekit_client/Cargo.toml index 821fd5d390..58059967b7 100644 --- a/crates/livekit_client/Cargo.toml +++ b/crates/livekit_client/Cargo.toml @@ -39,6 +39,8 @@ tokio-tungstenite.workspace = true util.workspace = true workspace-hack.workspace = true +rodio = { workspace = true, features = ["wav_output"] } + [target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))'.dependencies] libwebrtc = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks" } livekit = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks", features = [ diff --git a/crates/livekit_client/src/lib.rs b/crates/livekit_client/src/lib.rs index 149859fdc8..e3934410e1 100644 --- a/crates/livekit_client/src/lib.rs +++ b/crates/livekit_client/src/lib.rs @@ -1,7 +1,13 @@ +use anyhow::Context as _; use collections::HashMap; mod remote_video_track_view; +use cpal::traits::HostTrait as _; pub use remote_video_track_view::{RemoteVideoTrackView, RemoteVideoTrackViewEvent}; +use rodio::DeviceTrait as _; + +mod record; +pub use record::CaptureInput; #[cfg(not(any( test, @@ -18,6 +24,8 @@ mod livekit_client; )))] pub use livekit_client::*; +// If you need proper LSP in livekit_client you've got to comment out +// the mocks and test #[cfg(any( test, feature = "test-support", @@ -168,3 +176,59 @@ pub enum RoomEvent { Reconnecting, Reconnected, } + +pub(crate) fn default_device( + input: bool, +) -> anyhow::Result<(cpal::Device, cpal::SupportedStreamConfig)> { + let device; + let config; + if input { + device = cpal::default_host() + .default_input_device() + .context("no audio input device available")?; + config = device + .default_input_config() + .context("failed to get default input config")?; + } else { + device = cpal::default_host() + .default_output_device() + .context("no audio output device available")?; + config = device + .default_output_config() + .context("failed to get default output config")?; + } + Ok((device, config)) +} + +pub(crate) fn get_sample_data( + sample_format: cpal::SampleFormat, + data: &cpal::Data, +) -> anyhow::Result> { + match sample_format { + cpal::SampleFormat::I8 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::I16 => Ok(data.as_slice::().unwrap().to_vec()), + cpal::SampleFormat::I24 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::I32 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::I64 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::U8 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::U16 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::U32 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::U64 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::F32 => Ok(convert_sample_data::(data)), + cpal::SampleFormat::F64 => Ok(convert_sample_data::(data)), + _ => anyhow::bail!("Unsupported sample format"), + } +} + +pub(crate) fn convert_sample_data< + TSource: cpal::SizedSample, + TDest: cpal::SizedSample + cpal::FromSample, +>( + data: &cpal::Data, +) -> Vec { + data.as_slice::() + .unwrap() + .iter() + .map(|e| e.to_sample::()) + .collect() +} diff --git a/crates/livekit_client/src/livekit_client.rs b/crates/livekit_client/src/livekit_client.rs index 8f0ac1a456..adeea4f512 100644 --- a/crates/livekit_client/src/livekit_client.rs +++ b/crates/livekit_client/src/livekit_client.rs @@ -8,6 +8,8 @@ use gpui_tokio::Tokio; use playback::capture_local_video_track; mod playback; +#[cfg(feature = "record-microphone")] +mod record; use crate::{LocalTrack, Participant, RemoteTrack, RoomEvent, TrackPublication}; pub use playback::AudioStream; diff --git a/crates/livekit_client/src/livekit_client/playback.rs b/crates/livekit_client/src/livekit_client/playback.rs index f14e156125..d1eec42f8f 100644 --- a/crates/livekit_client/src/livekit_client/playback.rs +++ b/crates/livekit_client/src/livekit_client/playback.rs @@ -1,7 +1,6 @@ use anyhow::{Context as _, Result}; -use cpal::traits::{DeviceTrait, HostTrait, StreamTrait as _}; -use cpal::{Data, FromSample, I24, SampleFormat, SizedSample}; +use cpal::traits::{DeviceTrait, StreamTrait as _}; use futures::channel::mpsc::UnboundedSender; use futures::{Stream, StreamExt as _}; use gpui::{ @@ -166,7 +165,7 @@ impl AudioStack { ) -> Result<()> { loop { let mut device_change_listener = DeviceChangeListener::new(false)?; - let (output_device, output_config) = default_device(false)?; + let (output_device, output_config) = crate::default_device(false)?; let (end_on_drop_tx, end_on_drop_rx) = std::sync::mpsc::channel::<()>(); let mixer = mixer.clone(); let apm = apm.clone(); @@ -238,7 +237,7 @@ impl AudioStack { ) -> Result<()> { loop { let mut device_change_listener = DeviceChangeListener::new(true)?; - let (device, config) = default_device(true)?; + let (device, config) = crate::default_device(true)?; let (end_on_drop_tx, end_on_drop_rx) = std::sync::mpsc::channel::<()>(); let apm = apm.clone(); let frame_tx = frame_tx.clone(); @@ -262,7 +261,7 @@ impl AudioStack { config.sample_format(), move |data, _: &_| { let data = - Self::get_sample_data(config.sample_format(), data).log_err(); + crate::get_sample_data(config.sample_format(), data).log_err(); let Some(data) = data else { return; }; @@ -320,33 +319,6 @@ impl AudioStack { drop(end_on_drop_tx) } } - - fn get_sample_data(sample_format: SampleFormat, data: &Data) -> Result> { - match sample_format { - SampleFormat::I8 => Ok(Self::convert_sample_data::(data)), - SampleFormat::I16 => Ok(data.as_slice::().unwrap().to_vec()), - SampleFormat::I24 => Ok(Self::convert_sample_data::(data)), - SampleFormat::I32 => Ok(Self::convert_sample_data::(data)), - SampleFormat::I64 => Ok(Self::convert_sample_data::(data)), - SampleFormat::U8 => Ok(Self::convert_sample_data::(data)), - SampleFormat::U16 => Ok(Self::convert_sample_data::(data)), - SampleFormat::U32 => Ok(Self::convert_sample_data::(data)), - SampleFormat::U64 => Ok(Self::convert_sample_data::(data)), - SampleFormat::F32 => Ok(Self::convert_sample_data::(data)), - SampleFormat::F64 => Ok(Self::convert_sample_data::(data)), - _ => anyhow::bail!("Unsupported sample format"), - } - } - - fn convert_sample_data>( - data: &Data, - ) -> Vec { - data.as_slice::() - .unwrap() - .iter() - .map(|e| e.to_sample::()) - .collect() - } } use super::LocalVideoTrack; @@ -393,27 +365,6 @@ pub(crate) async fn capture_local_video_track( )) } -fn default_device(input: bool) -> Result<(cpal::Device, cpal::SupportedStreamConfig)> { - let device; - let config; - if input { - device = cpal::default_host() - .default_input_device() - .context("no audio input device available")?; - config = device - .default_input_config() - .context("failed to get default input config")?; - } else { - device = cpal::default_host() - .default_output_device() - .context("no audio output device available")?; - config = device - .default_output_config() - .context("failed to get default output config")?; - } - Ok((device, config)) -} - #[derive(Clone)] struct AudioMixerSource { ssrc: i32, diff --git a/crates/livekit_client/src/record.rs b/crates/livekit_client/src/record.rs new file mode 100644 index 0000000000..925c0d4c67 --- /dev/null +++ b/crates/livekit_client/src/record.rs @@ -0,0 +1,91 @@ +use std::{ + env, + path::{Path, PathBuf}, + sync::{Arc, Mutex}, + time::Duration, +}; + +use anyhow::{Context, Result}; +use cpal::traits::{DeviceTrait, StreamTrait}; +use rodio::{buffer::SamplesBuffer, conversions::SampleTypeConverter}; +use util::ResultExt; + +pub struct CaptureInput { + pub name: String, + config: cpal::SupportedStreamConfig, + samples: Arc>>, + _stream: cpal::Stream, +} + +impl CaptureInput { + pub fn start() -> anyhow::Result { + let (device, config) = crate::default_device(true)?; + let name = device.name().unwrap_or("".to_string()); + log::info!("Using microphone: {}", name); + + let samples = Arc::new(Mutex::new(Vec::new())); + let stream = start_capture(device, config.clone(), samples.clone())?; + + Ok(Self { + name, + _stream: stream, + config, + samples, + }) + } + + pub fn finish(self) -> Result { + let name = self.name; + let mut path = env::current_dir().context("Could not get current dir")?; + path.push(&format!("test_recording_{name}.wav")); + log::info!("Test recording written to: {}", path.display()); + write_out(self.samples, self.config, &path)?; + Ok(path) + } +} + +fn start_capture( + device: cpal::Device, + config: cpal::SupportedStreamConfig, + samples: Arc>>, +) -> Result { + let stream = device + .build_input_stream_raw( + &config.config(), + config.sample_format(), + move |data, _: &_| { + let data = crate::get_sample_data(config.sample_format(), data).log_err(); + let Some(data) = data else { + return; + }; + samples + .try_lock() + .expect("Only locked after stream ends") + .extend_from_slice(&data); + }, + |err| log::error!("error capturing audio track: {:?}", err), + Some(Duration::from_millis(100)), + ) + .context("failed to build input stream")?; + + stream.play()?; + Ok(stream) +} + +fn write_out( + samples: Arc>>, + config: cpal::SupportedStreamConfig, + path: &Path, +) -> Result<()> { + let samples = std::mem::take( + &mut *samples + .try_lock() + .expect("Stream has ended, callback cant hold the lock"), + ); + let samples: Vec = SampleTypeConverter::<_, f32>::new(samples.into_iter()).collect(); + let mut samples = SamplesBuffer::new(config.channels(), config.sample_rate().0, samples); + match rodio::output_to_wav(&mut samples, path) { + Ok(_) => Ok(()), + Err(e) => Err(anyhow::anyhow!("Failed to write wav file: {}", e)), + } +} diff --git a/crates/workspace/src/notifications.rs b/crates/workspace/src/notifications.rs index 96966435e1..7d8a28b0f1 100644 --- a/crates/workspace/src/notifications.rs +++ b/crates/workspace/src/notifications.rs @@ -6,6 +6,7 @@ use gpui::{ Task, svg, }; use parking_lot::Mutex; + use std::ops::Deref; use std::sync::{Arc, LazyLock}; use std::{any::TypeId, time::Duration}; @@ -189,6 +190,7 @@ impl Workspace { cx.notify(); } + /// Hide all notifications matching the given ID pub fn suppress_notification(&mut self, id: &NotificationId, cx: &mut Context) { self.dismiss_notification(id, cx); self.suppressed_notifications.insert(id.clone()); @@ -462,16 +464,144 @@ impl EventEmitter for ErrorMessagePrompt {} impl Notification for ErrorMessagePrompt {} +#[derive(IntoElement, RegisterComponent)] +pub struct NotificationFrame { + title: Option, + show_suppress_button: bool, + show_close_button: bool, + close: Option>, + contents: Option, + suffix: Option, +} + +impl NotificationFrame { + pub fn new() -> Self { + Self { + title: None, + contents: None, + suffix: None, + show_suppress_button: true, + show_close_button: true, + close: None, + } + } + + pub fn with_title(mut self, title: Option>) -> Self { + self.title = title.map(Into::into); + self + } + + pub fn with_content(self, content: impl IntoElement) -> Self { + Self { + contents: Some(content.into_any_element()), + ..self + } + } + + /// Determines whether the given notification ID should be suppressible + /// Suppressed motifications will not be shown anymore + pub fn show_suppress_button(mut self, show: bool) -> Self { + self.show_suppress_button = show; + self + } + + pub fn show_close_button(mut self, show: bool) -> Self { + self.show_close_button = show; + self + } + + pub fn on_close(self, on_close: impl Fn(&bool, &mut Window, &mut App) + 'static) -> Self { + Self { + close: Some(Box::new(on_close)), + ..self + } + } + + pub fn with_suffix(mut self, suffix: impl IntoElement) -> Self { + self.suffix = Some(suffix.into_any_element()); + self + } +} + +impl RenderOnce for NotificationFrame { + fn render(mut self, window: &mut Window, cx: &mut App) -> impl IntoElement { + let entity = window.current_view(); + let show_suppress_button = self.show_suppress_button; + let suppress = show_suppress_button && window.modifiers().shift; + let (close_id, close_icon) = if suppress { + ("suppress", IconName::Minimize) + } else { + ("close", IconName::Close) + }; + + v_flex() + .occlude() + .p_3() + .gap_2() + .elevation_3(cx) + .child( + h_flex() + .gap_4() + .justify_between() + .items_start() + .child( + v_flex() + .gap_0p5() + .when_some(self.title.clone(), |div, title| { + div.child(Label::new(title)) + }) + .child(div().max_w_96().children(self.contents)), + ) + .when(self.show_close_button, |this| { + this.on_modifiers_changed(move |_, _, cx| cx.notify(entity)) + .child( + IconButton::new(close_id, close_icon) + .tooltip(move |window, cx| { + if suppress { + Tooltip::for_action( + "Suppress.\nClose with click.", + &SuppressNotification, + window, + cx, + ) + } else if show_suppress_button { + Tooltip::for_action( + "Close.\nSuppress with shift-click.", + &menu::Cancel, + window, + cx, + ) + } else { + Tooltip::for_action("Close", &menu::Cancel, window, cx) + } + }) + .on_click({ + let close = self.close.take(); + move |_, window, cx| { + if let Some(close) = &close { + close(&suppress, window, cx) + } + } + }), + ) + }), + ) + .children(self.suffix) + } +} + +impl Component for NotificationFrame {} + pub mod simple_message_notification { use std::sync::Arc; use gpui::{ - AnyElement, ClickEvent, DismissEvent, EventEmitter, FocusHandle, Focusable, ParentElement, - Render, SharedString, Styled, div, + AnyElement, DismissEvent, EventEmitter, FocusHandle, Focusable, ParentElement, Render, + SharedString, Styled, }; - use ui::{Tooltip, prelude::*}; + use ui::prelude::*; - use crate::SuppressNotification; + use crate::notifications::NotificationFrame; use super::{Notification, SuppressEvent}; @@ -631,6 +761,8 @@ pub mod simple_message_notification { self } + /// Determines whether the given notification ID should be supressable + /// Suppressed motifications will not be shown anymor pub fn show_suppress_button(mut self, show: bool) -> Self { self.show_suppress_button = show; self @@ -647,71 +779,19 @@ pub mod simple_message_notification { impl Render for MessageNotification { fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { - let show_suppress_button = self.show_suppress_button; - let suppress = show_suppress_button && window.modifiers().shift; - let (close_id, close_icon) = if suppress { - ("suppress", IconName::Minimize) - } else { - ("close", IconName::Close) - }; - - v_flex() - .occlude() - .p_3() - .gap_2() - .elevation_3(cx) - .child( - h_flex() - .gap_4() - .justify_between() - .items_start() - .child( - v_flex() - .gap_0p5() - .when_some(self.title.clone(), |element, title| { - element.child(Label::new(title)) - }) - .child(div().max_w_96().child((self.build_content)(window, cx))), - ) - .when(self.show_close_button, |this| { - this.on_modifiers_changed(cx.listener(|_, _, _, cx| cx.notify())) - .child( - IconButton::new(close_id, close_icon) - .tooltip(move |window, cx| { - if suppress { - Tooltip::for_action( - "Suppress.\nClose with click.", - &SuppressNotification, - window, - cx, - ) - } else if show_suppress_button { - Tooltip::for_action( - "Close.\nSuppress with shift-click.", - &menu::Cancel, - window, - cx, - ) - } else { - Tooltip::for_action( - "Close", - &menu::Cancel, - window, - cx, - ) - } - }) - .on_click(cx.listener(move |_, _: &ClickEvent, _, cx| { - if suppress { - cx.emit(SuppressEvent); - } else { - cx.emit(DismissEvent); - } - })), - ) - }), - ) - .child( + NotificationFrame::new() + .with_title(self.title.clone()) + .with_content((self.build_content)(window, cx)) + .show_close_button(self.show_close_button) + .show_suppress_button(self.show_suppress_button) + .on_close(cx.listener(|_, suppress, _, cx| { + if *suppress { + cx.emit(SuppressEvent); + } else { + cx.emit(DismissEvent); + } + })) + .with_suffix( h_flex() .gap_1() .children(self.primary_message.iter().map(|message| { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index ca98404194..3129c12dbf 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -15,6 +15,8 @@ mod toast_layer; mod toolbar; mod workspace_settings; +pub use crate::notifications::NotificationFrame; +pub use dock::Panel; pub use toast_layer::{ToastAction, ToastLayer, ToastView}; use anyhow::{Context as _, Result, anyhow}; @@ -24,7 +26,6 @@ use client::{ proto::{self, ErrorCode, PanelId, PeerId}, }; use collections::{HashMap, HashSet, hash_map}; -pub use dock::Panel; use dock::{Dock, DockPosition, PanelButtons, PanelHandle, RESIZE_HANDLE_SIZE}; use futures::{ Future, FutureExt, StreamExt, diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 4335f2d5a1..d69efaf6c0 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -82,6 +82,7 @@ inspector_ui.workspace = true install_cli.workspace = true jj_ui.workspace = true journal.workspace = true +livekit_client.workspace = true language.workspace = true language_extension.workspace = true language_model.workspace = true diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index ceda403fdd..84145a1be4 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -56,6 +56,7 @@ use settings::{ initial_local_debug_tasks_content, initial_project_settings_content, initial_tasks_content, update_settings_file, }; +use std::time::{Duration, Instant}; use std::{ borrow::Cow, path::{Path, PathBuf}, @@ -69,13 +70,17 @@ use util::markdown::MarkdownString; use util::{ResultExt, asset_str}; use uuid::Uuid; use vim_mode_setting::VimModeSetting; -use workspace::notifications::{NotificationId, dismiss_app_notification, show_app_notification}; +use workspace::notifications::{ + NotificationId, SuppressEvent, dismiss_app_notification, show_app_notification, +}; use workspace::{ AppState, NewFile, NewWindow, OpenLog, Toast, Workspace, WorkspaceSettings, create_and_open_local_file, notifications::simple_message_notification::MessageNotification, open_new, }; -use workspace::{CloseIntent, CloseWindow, RestoreBanner, with_active_or_new_workspace}; +use workspace::{ + CloseIntent, CloseWindow, NotificationFrame, RestoreBanner, with_active_or_new_workspace, +}; use workspace::{Pane, notifications::DetachAndPromptErr}; use zed_actions::{ OpenAccountSettings, OpenBrowser, OpenDocs, OpenServerSettings, OpenSettings, OpenZedUrl, Quit, @@ -117,6 +122,14 @@ actions!( ] ); +actions!( + dev, + [ + /// Record 10s of audio from your current microphone + CaptureAudio + ] +); + pub fn init(cx: &mut App) { #[cfg(target_os = "macos")] cx.on_action(|_: &Hide, cx| cx.hide()); @@ -897,7 +910,11 @@ fn register_actions( .detach(); } } + }) + .register_action(|workspace, _: &CaptureAudio, window, cx| { + capture_audio(workspace, window, cx); }); + if workspace.project().read(cx).is_via_ssh() { workspace.register_action({ move |workspace, _: &OpenServerSettings, window, cx| { @@ -1806,6 +1823,107 @@ fn open_settings_file( .detach_and_log_err(cx); } +fn capture_audio(workspace: &mut Workspace, _: &mut Window, cx: &mut Context) { + #[derive(Default)] + enum State { + Recording(livekit_client::CaptureInput), + Failed(String), + Finished(PathBuf), + // Used during state switch. Should never occur naturally. + #[default] + Invalid, + } + + struct CaptureAudioNotification { + focus_handle: gpui::FocusHandle, + start_time: Instant, + state: State, + } + + impl gpui::EventEmitter for CaptureAudioNotification {} + impl gpui::EventEmitter for CaptureAudioNotification {} + impl gpui::Focusable for CaptureAudioNotification { + fn focus_handle(&self, _cx: &App) -> gpui::FocusHandle { + self.focus_handle.clone() + } + } + impl workspace::notifications::Notification for CaptureAudioNotification {} + + const AUDIO_RECORDING_TIME_SECS: u64 = 10; + + impl Render for CaptureAudioNotification { + fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement { + let elapsed = self.start_time.elapsed().as_secs(); + let message = match &self.state { + State::Recording(capture) => format!( + "Recording {} seconds of audio from input: '{}'", + AUDIO_RECORDING_TIME_SECS - elapsed, + capture.name, + ), + State::Failed(e) => format!("Error capturing audio: {e}"), + State::Finished(path) => format!("Audio recorded to {}", path.display()), + State::Invalid => "Error invalid state".to_string(), + }; + + NotificationFrame::new() + .with_title(Some("Recording Audio")) + .show_suppress_button(false) + .on_close(cx.listener(|_, _, _, cx| { + cx.emit(DismissEvent); + })) + .with_content(message) + } + } + + impl CaptureAudioNotification { + fn finish(&mut self) { + let state = std::mem::take(&mut self.state); + self.state = if let State::Recording(capture) = state { + match capture.finish() { + Ok(path) => State::Finished(path), + Err(e) => State::Failed(e.to_string()), + } + } else { + state + }; + } + + fn new(cx: &mut Context) -> Self { + cx.spawn(async move |this, cx| { + for _ in 0..10 { + cx.background_executor().timer(Duration::from_secs(1)).await; + this.update(cx, |_, cx| { + cx.notify(); + })?; + } + + this.update(cx, |this, cx| { + this.finish(); + cx.notify(); + })?; + + anyhow::Ok(()) + }) + .detach(); + + let state = match livekit_client::CaptureInput::start() { + Ok(capture_input) => State::Recording(capture_input), + Err(err) => State::Failed(format!("Error starting audio capture: {}", err)), + }; + + Self { + focus_handle: cx.focus_handle(), + start_time: Instant::now(), + state, + } + } + } + + workspace.show_notification(NotificationId::unique::(), cx, |cx| { + cx.new(CaptureAudioNotification::new) + }); +} + #[cfg(test)] mod tests { use super::*; From d891348442f2196b248f992ef9067b3eee534f7c Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 15 Aug 2025 12:34:54 +0200 Subject: [PATCH 60/74] search: Simplify search options handling (#36233) Release Notes: - N/A --- crates/search/src/buffer_search.rs | 55 +++++------ crates/search/src/mode.rs | 36 ------- crates/search/src/project_search.rs | 71 +++++--------- crates/search/src/search.rs | 111 +++++++++++++--------- crates/search/src/search_bar.rs | 21 ---- crates/search/src/search_status_button.rs | 4 +- crates/zed/src/zed/quick_action_bar.rs | 2 +- 7 files changed, 115 insertions(+), 185 deletions(-) delete mode 100644 crates/search/src/mode.rs diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index ccef198f04..da2d35d74c 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -1,12 +1,10 @@ mod registrar; use crate::{ - FocusSearch, NextHistoryQuery, PreviousHistoryQuery, ReplaceAll, ReplaceNext, SearchOptions, - SelectAllMatches, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, ToggleRegex, - ToggleReplace, ToggleSelection, ToggleWholeWord, - search_bar::{ - input_base_styles, render_action_button, render_text_input, toggle_replace_button, - }, + FocusSearch, NextHistoryQuery, PreviousHistoryQuery, ReplaceAll, ReplaceNext, SearchOption, + SearchOptions, SelectAllMatches, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, + ToggleRegex, ToggleReplace, ToggleSelection, ToggleWholeWord, + search_bar::{input_base_styles, render_action_button, render_text_input}, }; use any_vec::AnyVec; use anyhow::Context as _; @@ -215,31 +213,22 @@ impl Render for BufferSearchBar { h_flex() .gap_1() .when(case, |div| { - div.child(SearchOptions::CASE_SENSITIVE.as_button( - self.search_options.contains(SearchOptions::CASE_SENSITIVE), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_case_sensitive(&ToggleCaseSensitive, window, cx) - }), - )) + div.child( + SearchOption::CaseSensitive + .as_button(self.search_options, focus_handle.clone()), + ) }) .when(word, |div| { - div.child(SearchOptions::WHOLE_WORD.as_button( - self.search_options.contains(SearchOptions::WHOLE_WORD), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_whole_word(&ToggleWholeWord, window, cx) - }), - )) + div.child( + SearchOption::WholeWord + .as_button(self.search_options, focus_handle.clone()), + ) }) .when(regex, |div| { - div.child(SearchOptions::REGEX.as_button( - self.search_options.contains(SearchOptions::REGEX), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_regex(&ToggleRegex, window, cx) - }), - )) + div.child( + SearchOption::Regex + .as_button(self.search_options, focus_handle.clone()), + ) }), ) }); @@ -248,13 +237,13 @@ impl Render for BufferSearchBar { .gap_1() .min_w_64() .when(replacement, |this| { - this.child(toggle_replace_button( - "buffer-search-bar-toggle-replace-button", - focus_handle.clone(), + this.child(render_action_button( + "buffer-search-bar-toggle", + IconName::Replace, self.replace_enabled, - cx.listener(|this, _: &ClickEvent, window, cx| { - this.toggle_replace(&ToggleReplace, window, cx); - }), + "Toggle Replace", + &ToggleReplace, + focus_handle.clone(), )) }) .when(selection, |this| { diff --git a/crates/search/src/mode.rs b/crates/search/src/mode.rs deleted file mode 100644 index 957eb707a5..0000000000 --- a/crates/search/src/mode.rs +++ /dev/null @@ -1,36 +0,0 @@ -use gpui::{Action, SharedString}; - -use crate::{ActivateRegexMode, ActivateTextMode}; - -// TODO: Update the default search mode to get from config -#[derive(Copy, Clone, Debug, Default, PartialEq)] -pub enum SearchMode { - #[default] - Text, - Regex, -} - -impl SearchMode { - pub(crate) fn label(&self) -> &'static str { - match self { - SearchMode::Text => "Text", - SearchMode::Regex => "Regex", - } - } - pub(crate) fn tooltip(&self) -> SharedString { - format!("Activate {} Mode", self.label()).into() - } - pub(crate) fn action(&self) -> Box { - match self { - SearchMode::Text => ActivateTextMode.boxed_clone(), - SearchMode::Regex => ActivateRegexMode.boxed_clone(), - } - } -} - -pub(crate) fn next_mode(mode: &SearchMode) -> SearchMode { - match mode { - SearchMode::Text => SearchMode::Regex, - SearchMode::Regex => SearchMode::Text, - } -} diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 9e8afa4392..6b9777906a 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1,11 +1,9 @@ use crate::{ BufferSearchBar, FocusSearch, NextHistoryQuery, PreviousHistoryQuery, ReplaceAll, ReplaceNext, - SearchOptions, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, ToggleIncludeIgnored, - ToggleRegex, ToggleReplace, ToggleWholeWord, + SearchOption, SearchOptions, SelectNextMatch, SelectPreviousMatch, ToggleCaseSensitive, + ToggleIncludeIgnored, ToggleRegex, ToggleReplace, ToggleWholeWord, buffer_search::Deploy, - search_bar::{ - input_base_styles, render_action_button, render_text_input, toggle_replace_button, - }, + search_bar::{input_base_styles, render_action_button, render_text_input}, }; use anyhow::Context as _; use collections::HashMap; @@ -1784,14 +1782,6 @@ impl ProjectSearchBar { } } - fn is_option_enabled(&self, option: SearchOptions, cx: &App) -> bool { - if let Some(search) = self.active_project_search.as_ref() { - search.read(cx).search_options.contains(option) - } else { - false - } - } - fn next_history_query( &mut self, _: &NextHistoryQuery, @@ -1972,27 +1962,17 @@ impl Render for ProjectSearchBar { .child( h_flex() .gap_1() - .child(SearchOptions::CASE_SENSITIVE.as_button( - self.is_option_enabled(SearchOptions::CASE_SENSITIVE, cx), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_search_option(SearchOptions::CASE_SENSITIVE, window, cx); - }), - )) - .child(SearchOptions::WHOLE_WORD.as_button( - self.is_option_enabled(SearchOptions::WHOLE_WORD, cx), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_search_option(SearchOptions::WHOLE_WORD, window, cx); - }), - )) - .child(SearchOptions::REGEX.as_button( - self.is_option_enabled(SearchOptions::REGEX, cx), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_search_option(SearchOptions::REGEX, window, cx); - }), - )), + .child( + SearchOption::CaseSensitive + .as_button(search.search_options, focus_handle.clone()), + ) + .child( + SearchOption::WholeWord + .as_button(search.search_options, focus_handle.clone()), + ) + .child( + SearchOption::Regex.as_button(search.search_options, focus_handle.clone()), + ), ); let mode_column = h_flex() @@ -2026,16 +2006,16 @@ impl Render for ProjectSearchBar { } }), ) - .child(toggle_replace_button( - "project-search-toggle-replace", - focus_handle.clone(), + .child(render_action_button( + "project-search", + IconName::Replace, self.active_project_search .as_ref() .map(|search| search.read(cx).replace_enabled) .unwrap_or_default(), - cx.listener(|this, _, window, cx| { - this.toggle_replace(&ToggleReplace, window, cx); - }), + "Toggle Replace", + &ToggleReplace, + focus_handle.clone(), )); let query_focus = search.query_editor.focus_handle(cx); @@ -2149,15 +2129,8 @@ impl Render for ProjectSearchBar { })), ) .child( - SearchOptions::INCLUDE_IGNORED.as_button( - search - .search_options - .contains(SearchOptions::INCLUDE_IGNORED), - focus_handle.clone(), - cx.listener(|this, _, window, cx| { - this.toggle_search_option(SearchOptions::INCLUDE_IGNORED, window, cx); - }), - ), + SearchOption::IncludeIgnored + .as_button(search.search_options, focus_handle.clone()), ); h_flex() .w_full() diff --git a/crates/search/src/search.rs b/crates/search/src/search.rs index 5f57bfb4b1..89064e0a27 100644 --- a/crates/search/src/search.rs +++ b/crates/search/src/search.rs @@ -9,6 +9,8 @@ use ui::{Tooltip, prelude::*}; use workspace::notifications::NotificationId; use workspace::{Toast, Workspace}; +pub use search_status_button::SEARCH_ICON; + pub mod buffer_search; pub mod project_search; pub(crate) mod search_bar; @@ -59,48 +61,87 @@ actions!( bitflags! { #[derive(Debug, PartialEq, Eq, Clone, Copy, Default)] pub struct SearchOptions: u8 { - const NONE = 0b000; - const WHOLE_WORD = 0b001; - const CASE_SENSITIVE = 0b010; - const INCLUDE_IGNORED = 0b100; - const REGEX = 0b1000; - const ONE_MATCH_PER_LINE = 0b100000; + const NONE = 0; + const WHOLE_WORD = 1 << SearchOption::WholeWord as u8; + const CASE_SENSITIVE = 1 << SearchOption::CaseSensitive as u8; + const INCLUDE_IGNORED = 1 << SearchOption::IncludeIgnored as u8; + const REGEX = 1 << SearchOption::Regex as u8; + const ONE_MATCH_PER_LINE = 1 << SearchOption::OneMatchPerLine as u8; /// If set, reverse direction when finding the active match - const BACKWARDS = 0b10000; + const BACKWARDS = 1 << SearchOption::Backwards as u8; } } -impl SearchOptions { +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +pub enum SearchOption { + WholeWord = 0, + CaseSensitive, + IncludeIgnored, + Regex, + OneMatchPerLine, + Backwards, +} + +impl SearchOption { + pub fn as_options(self) -> SearchOptions { + SearchOptions::from_bits(1 << self as u8).unwrap() + } + pub fn label(&self) -> &'static str { - match *self { - SearchOptions::WHOLE_WORD => "Match Whole Words", - SearchOptions::CASE_SENSITIVE => "Match Case Sensitively", - SearchOptions::INCLUDE_IGNORED => "Also search files ignored by configuration", - SearchOptions::REGEX => "Use Regular Expressions", - _ => panic!("{:?} is not a named SearchOption", self), + match self { + SearchOption::WholeWord => "Match Whole Words", + SearchOption::CaseSensitive => "Match Case Sensitively", + SearchOption::IncludeIgnored => "Also search files ignored by configuration", + SearchOption::Regex => "Use Regular Expressions", + SearchOption::OneMatchPerLine => "One Match Per Line", + SearchOption::Backwards => "Search Backwards", } } pub fn icon(&self) -> ui::IconName { - match *self { - SearchOptions::WHOLE_WORD => ui::IconName::WholeWord, - SearchOptions::CASE_SENSITIVE => ui::IconName::CaseSensitive, - SearchOptions::INCLUDE_IGNORED => ui::IconName::Sliders, - SearchOptions::REGEX => ui::IconName::Regex, - _ => panic!("{:?} is not a named SearchOption", self), + match self { + SearchOption::WholeWord => ui::IconName::WholeWord, + SearchOption::CaseSensitive => ui::IconName::CaseSensitive, + SearchOption::IncludeIgnored => ui::IconName::Sliders, + SearchOption::Regex => ui::IconName::Regex, + _ => panic!("{self:?} is not a named SearchOption"), } } - pub fn to_toggle_action(&self) -> Box { + pub fn to_toggle_action(&self) -> &'static dyn Action { match *self { - SearchOptions::WHOLE_WORD => Box::new(ToggleWholeWord), - SearchOptions::CASE_SENSITIVE => Box::new(ToggleCaseSensitive), - SearchOptions::INCLUDE_IGNORED => Box::new(ToggleIncludeIgnored), - SearchOptions::REGEX => Box::new(ToggleRegex), - _ => panic!("{:?} is not a named SearchOption", self), + SearchOption::WholeWord => &ToggleWholeWord, + SearchOption::CaseSensitive => &ToggleCaseSensitive, + SearchOption::IncludeIgnored => &ToggleIncludeIgnored, + SearchOption::Regex => &ToggleRegex, + _ => panic!("{self:?} is not a toggle action"), } } + pub fn as_button(&self, active: SearchOptions, focus_handle: FocusHandle) -> impl IntoElement { + let action = self.to_toggle_action(); + let label = self.label(); + IconButton::new(label, self.icon()) + .on_click({ + let focus_handle = focus_handle.clone(); + move |_, window, cx| { + if !focus_handle.is_focused(&window) { + window.focus(&focus_handle); + } + window.dispatch_action(action.boxed_clone(), cx) + } + }) + .style(ButtonStyle::Subtle) + .shape(IconButtonShape::Square) + .toggle_state(active.contains(self.as_options())) + .tooltip({ + move |window, cx| Tooltip::for_action_in(label, action, &focus_handle, window, cx) + }) + } +} + +impl SearchOptions { pub fn none() -> SearchOptions { SearchOptions::NONE } @@ -122,24 +163,6 @@ impl SearchOptions { options.set(SearchOptions::REGEX, settings.regex); options } - - pub fn as_button( - &self, - active: bool, - focus_handle: FocusHandle, - action: Action, - ) -> impl IntoElement + use { - IconButton::new(self.label(), self.icon()) - .on_click(action) - .style(ButtonStyle::Subtle) - .shape(IconButtonShape::Square) - .toggle_state(active) - .tooltip({ - let action = self.to_toggle_action(); - let label = self.label(); - move |window, cx| Tooltip::for_action_in(label, &*action, &focus_handle, window, cx) - }) - } } pub(crate) fn show_no_more_matches(window: &mut Window, cx: &mut App) { diff --git a/crates/search/src/search_bar.rs b/crates/search/src/search_bar.rs index 2805b0c62d..094ce3638e 100644 --- a/crates/search/src/search_bar.rs +++ b/crates/search/src/search_bar.rs @@ -5,8 +5,6 @@ use theme::ThemeSettings; use ui::{IconButton, IconButtonShape}; use ui::{Tooltip, prelude::*}; -use crate::ToggleReplace; - pub(super) fn render_action_button( id_prefix: &'static str, icon: ui::IconName, @@ -46,25 +44,6 @@ pub(crate) fn input_base_styles(border_color: Hsla, map: impl FnOnce(Div) -> Div .rounded_lg() } -pub(crate) fn toggle_replace_button( - id: &'static str, - focus_handle: FocusHandle, - replace_enabled: bool, - on_click: impl Fn(&gpui::ClickEvent, &mut Window, &mut App) + 'static, -) -> IconButton { - IconButton::new(id, IconName::Replace) - .shape(IconButtonShape::Square) - .style(ButtonStyle::Subtle) - .when(replace_enabled, |button| button.style(ButtonStyle::Filled)) - .on_click(on_click) - .toggle_state(replace_enabled) - .tooltip({ - move |window, cx| { - Tooltip::for_action_in("Toggle Replace", &ToggleReplace, &focus_handle, window, cx) - } - }) -} - pub(crate) fn render_text_input( editor: &Entity, color_override: Option, diff --git a/crates/search/src/search_status_button.rs b/crates/search/src/search_status_button.rs index ff2ee1641d..fcf36e86fa 100644 --- a/crates/search/src/search_status_button.rs +++ b/crates/search/src/search_status_button.rs @@ -3,6 +3,8 @@ use settings::Settings as _; use ui::{ButtonCommon, Clickable, Context, Render, Tooltip, Window, prelude::*}; use workspace::{ItemHandle, StatusItemView}; +pub const SEARCH_ICON: IconName = IconName::MagnifyingGlass; + pub struct SearchButton; impl SearchButton { @@ -20,7 +22,7 @@ impl Render for SearchButton { } button.child( - IconButton::new("project-search-indicator", IconName::MagnifyingGlass) + IconButton::new("project-search-indicator", SEARCH_ICON) .icon_size(IconSize::Small) .tooltip(|window, cx| { Tooltip::for_action( diff --git a/crates/zed/src/zed/quick_action_bar.rs b/crates/zed/src/zed/quick_action_bar.rs index e76bef59a3..2b7c38f997 100644 --- a/crates/zed/src/zed/quick_action_bar.rs +++ b/crates/zed/src/zed/quick_action_bar.rs @@ -140,7 +140,7 @@ impl Render for QuickActionBar { let search_button = editor.is_singleton(cx).then(|| { QuickActionBarButton::new( "toggle buffer search", - IconName::MagnifyingGlass, + search::SEARCH_ICON, !self.buffer_search_bar.read(cx).is_dismissed(), Box::new(buffer_search::Deploy::find()), focus_handle.clone(), From 2a57b160b03c8e8543fdae12a0c191ed1a985e54 Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Fri, 15 Aug 2025 13:54:24 +0300 Subject: [PATCH 61/74] openai: Don't send prompt_cache_key for OpenAI-compatible models (#36231) Some APIs fail when they get this parameter Closes #36215 Release Notes: - Fixed OpenAI-compatible providers that don't support prompt caching and/or reasoning --- crates/language_models/src/provider/cloud.rs | 1 + crates/language_models/src/provider/open_ai.rs | 8 +++++++- crates/language_models/src/provider/open_ai_compatible.rs | 5 ++++- crates/language_models/src/provider/vercel.rs | 1 + crates/language_models/src/provider/x_ai.rs | 1 + crates/open_ai/src/open_ai.rs | 7 +++++++ crates/vercel/src/vercel.rs | 4 ++++ crates/x_ai/src/x_ai.rs | 4 ++++ 8 files changed, 29 insertions(+), 2 deletions(-) diff --git a/crates/language_models/src/provider/cloud.rs b/crates/language_models/src/provider/cloud.rs index ff8048040e..c1337399f9 100644 --- a/crates/language_models/src/provider/cloud.rs +++ b/crates/language_models/src/provider/cloud.rs @@ -941,6 +941,7 @@ impl LanguageModel for CloudLanguageModel { request, model.id(), model.supports_parallel_tool_calls(), + model.supports_prompt_cache_key(), None, None, ); diff --git a/crates/language_models/src/provider/open_ai.rs b/crates/language_models/src/provider/open_ai.rs index 725027b2a7..eaf8d885b3 100644 --- a/crates/language_models/src/provider/open_ai.rs +++ b/crates/language_models/src/provider/open_ai.rs @@ -370,6 +370,7 @@ impl LanguageModel for OpenAiLanguageModel { request, self.model.id(), self.model.supports_parallel_tool_calls(), + self.model.supports_prompt_cache_key(), self.max_output_tokens(), self.model.reasoning_effort(), ); @@ -386,6 +387,7 @@ pub fn into_open_ai( request: LanguageModelRequest, model_id: &str, supports_parallel_tool_calls: bool, + supports_prompt_cache_key: bool, max_output_tokens: Option, reasoning_effort: Option, ) -> open_ai::Request { @@ -477,7 +479,11 @@ pub fn into_open_ai( } else { None }, - prompt_cache_key: request.thread_id, + prompt_cache_key: if supports_prompt_cache_key { + request.thread_id + } else { + None + }, tools: request .tools .into_iter() diff --git a/crates/language_models/src/provider/open_ai_compatible.rs b/crates/language_models/src/provider/open_ai_compatible.rs index 6e912765cd..5f546f5219 100644 --- a/crates/language_models/src/provider/open_ai_compatible.rs +++ b/crates/language_models/src/provider/open_ai_compatible.rs @@ -355,10 +355,13 @@ impl LanguageModel for OpenAiCompatibleLanguageModel { LanguageModelCompletionError, >, > { + let supports_parallel_tool_call = true; + let supports_prompt_cache_key = false; let request = into_open_ai( request, &self.model.name, - true, + supports_parallel_tool_call, + supports_prompt_cache_key, self.max_output_tokens(), None, ); diff --git a/crates/language_models/src/provider/vercel.rs b/crates/language_models/src/provider/vercel.rs index 57a89ba4aa..9f447cb68b 100644 --- a/crates/language_models/src/provider/vercel.rs +++ b/crates/language_models/src/provider/vercel.rs @@ -355,6 +355,7 @@ impl LanguageModel for VercelLanguageModel { request, self.model.id(), self.model.supports_parallel_tool_calls(), + self.model.supports_prompt_cache_key(), self.max_output_tokens(), None, ); diff --git a/crates/language_models/src/provider/x_ai.rs b/crates/language_models/src/provider/x_ai.rs index 5e7190ea96..fed6fe92bf 100644 --- a/crates/language_models/src/provider/x_ai.rs +++ b/crates/language_models/src/provider/x_ai.rs @@ -359,6 +359,7 @@ impl LanguageModel for XAiLanguageModel { request, self.model.id(), self.model.supports_parallel_tool_calls(), + self.model.supports_prompt_cache_key(), self.max_output_tokens(), None, ); diff --git a/crates/open_ai/src/open_ai.rs b/crates/open_ai/src/open_ai.rs index 8bbe858995..604e8fe622 100644 --- a/crates/open_ai/src/open_ai.rs +++ b/crates/open_ai/src/open_ai.rs @@ -236,6 +236,13 @@ impl Model { Self::O1 | Self::O3 | Self::O3Mini | Self::O4Mini | Model::Custom { .. } => false, } } + + /// Returns whether the given model supports the `prompt_cache_key` parameter. + /// + /// If the model does not support the parameter, do not pass it up. + pub fn supports_prompt_cache_key(&self) -> bool { + return true; + } } #[derive(Debug, Serialize, Deserialize)] diff --git a/crates/vercel/src/vercel.rs b/crates/vercel/src/vercel.rs index 1ae22c5fef..8686fda53f 100644 --- a/crates/vercel/src/vercel.rs +++ b/crates/vercel/src/vercel.rs @@ -71,4 +71,8 @@ impl Model { Model::Custom { .. } => false, } } + + pub fn supports_prompt_cache_key(&self) -> bool { + false + } } diff --git a/crates/x_ai/src/x_ai.rs b/crates/x_ai/src/x_ai.rs index ac116b2f8f..23cd5b9320 100644 --- a/crates/x_ai/src/x_ai.rs +++ b/crates/x_ai/src/x_ai.rs @@ -105,6 +105,10 @@ impl Model { } } + pub fn supports_prompt_cache_key(&self) -> bool { + false + } + pub fn supports_tool(&self) -> bool { match self { Self::Grok2Vision From f8b01052583d3e27fbbbf5f46eb4f5bd5ec279aa Mon Sep 17 00:00:00 2001 From: smit Date: Fri, 15 Aug 2025 16:24:54 +0530 Subject: [PATCH 62/74] project: Fix LSP TextDocumentSyncCapability dynamic registration (#36234) Closes #36213 Use `textDocument/didChange` ([docs](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_synchronization)) instead of `textDocument/synchronization`. Release Notes: - Fixed an issue where Dart projects were being formatted incorrectly by the language server. --- crates/project/src/lsp_store.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 60d847023f..196f55171a 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -11817,14 +11817,16 @@ impl LspStore { notify_server_capabilities_updated(&server, cx); } } - "textDocument/synchronization" => { - if let Some(caps) = reg + "textDocument/didChange" => { + if let Some(sync_kind) = reg .register_options - .map(serde_json::from_value) + .and_then(|opts| opts.get("syncKind").cloned()) + .map(serde_json::from_value::) .transpose()? { server.update_capabilities(|capabilities| { - capabilities.text_document_sync = Some(caps); + capabilities.text_document_sync = + Some(lsp::TextDocumentSyncCapability::Kind(sync_kind)); }); notify_server_capabilities_updated(&server, cx); } @@ -11974,7 +11976,7 @@ impl LspStore { }); notify_server_capabilities_updated(&server, cx); } - "textDocument/synchronization" => { + "textDocument/didChange" => { server.update_capabilities(|capabilities| { capabilities.text_document_sync = None; }); From 6f3cd42411c64879848d0bc96d838d3bef8c374c Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 15 Aug 2025 13:17:17 +0200 Subject: [PATCH 63/74] agent2: Port Zed AI features (#36172) Release Notes: - N/A --------- Co-authored-by: Antonio Scandurra --- crates/acp_thread/src/acp_thread.rs | 173 +++++--- crates/acp_thread/src/connection.rs | 26 +- crates/agent2/src/agent.rs | 282 +++++++------ crates/agent2/src/tests/mod.rs | 202 +++++++++- crates/agent2/src/tests/test_tools.rs | 2 +- crates/agent2/src/thread.rs | 186 ++++++--- crates/agent2/src/tools/edit_file_tool.rs | 2 +- crates/agent_servers/src/acp/v0.rs | 6 +- crates/agent_servers/src/acp/v1.rs | 6 +- crates/agent_servers/src/claude.rs | 5 + crates/agent_ui/src/acp/thread_view.rs | 376 ++++++++++++++++-- crates/agent_ui/src/agent_ui.rs | 1 - crates/agent_ui/src/burn_mode_tooltip.rs | 61 --- crates/agent_ui/src/message_editor.rs | 4 +- crates/agent_ui/src/text_thread_editor.rs | 2 +- crates/agent_ui/src/ui/burn_mode_tooltip.rs | 6 +- .../language_model/src/model/cloud_model.rs | 12 + 17 files changed, 994 insertions(+), 358 deletions(-) delete mode 100644 crates/agent_ui/src/burn_mode_tooltip.rs diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index 4005f27a0c..4995ddb9df 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -33,13 +33,23 @@ pub struct UserMessage { pub id: Option, pub content: ContentBlock, pub chunks: Vec, - pub checkpoint: Option, + pub checkpoint: Option, +} + +#[derive(Debug)] +pub struct Checkpoint { + git_checkpoint: GitStoreCheckpoint, + pub show: bool, } impl UserMessage { fn to_markdown(&self, cx: &App) -> String { let mut markdown = String::new(); - if let Some(_) = self.checkpoint { + if self + .checkpoint + .as_ref() + .map_or(false, |checkpoint| checkpoint.show) + { writeln!(markdown, "## User (checkpoint)").unwrap(); } else { writeln!(markdown, "## User").unwrap(); @@ -1145,9 +1155,12 @@ impl AcpThread { self.project.read(cx).languages().clone(), cx, ); + let request = acp::PromptRequest { + prompt: message.clone(), + session_id: self.session_id.clone(), + }; let git_store = self.project.read(cx).git_store().clone(); - let old_checkpoint = git_store.update(cx, |git, cx| git.checkpoint(cx)); let message_id = if self .connection .session_editor(&self.session_id, cx) @@ -1161,68 +1174,63 @@ impl AcpThread { AgentThreadEntry::UserMessage(UserMessage { id: message_id.clone(), content: block, - chunks: message.clone(), + chunks: message, checkpoint: None, }), cx, ); + + self.run_turn(cx, async move |this, cx| { + let old_checkpoint = git_store + .update(cx, |git, cx| git.checkpoint(cx))? + .await + .context("failed to get old checkpoint") + .log_err(); + this.update(cx, |this, cx| { + if let Some((_ix, message)) = this.last_user_message() { + message.checkpoint = old_checkpoint.map(|git_checkpoint| Checkpoint { + git_checkpoint, + show: false, + }); + } + this.connection.prompt(message_id, request, cx) + })? + .await + }) + } + + pub fn resume(&mut self, cx: &mut Context) -> BoxFuture<'static, Result<()>> { + self.run_turn(cx, async move |this, cx| { + this.update(cx, |this, cx| { + this.connection + .resume(&this.session_id, cx) + .map(|resume| resume.run(cx)) + })? + .context("resuming a session is not supported")? + .await + }) + } + + fn run_turn( + &mut self, + cx: &mut Context, + f: impl 'static + AsyncFnOnce(WeakEntity, &mut AsyncApp) -> Result, + ) -> BoxFuture<'static, Result<()>> { self.clear_completed_plan_entries(cx); - let (old_checkpoint_tx, old_checkpoint_rx) = oneshot::channel(); let (tx, rx) = oneshot::channel(); let cancel_task = self.cancel(cx); - let request = acp::PromptRequest { - prompt: message, - session_id: self.session_id.clone(), - }; - self.send_task = Some(cx.spawn({ - let message_id = message_id.clone(); - async move |this, cx| { - cancel_task.await; - - old_checkpoint_tx.send(old_checkpoint.await).ok(); - if let Ok(result) = this.update(cx, |this, cx| { - this.connection.prompt(message_id, request, cx) - }) { - tx.send(result.await).log_err(); - } - } + self.send_task = Some(cx.spawn(async move |this, cx| { + cancel_task.await; + tx.send(f(this, cx).await).ok(); })); cx.spawn(async move |this, cx| { - let old_checkpoint = old_checkpoint_rx - .await - .map_err(|_| anyhow!("send canceled")) - .flatten() - .context("failed to get old checkpoint") - .log_err(); - let response = rx.await; - if let Some((old_checkpoint, message_id)) = old_checkpoint.zip(message_id) { - let new_checkpoint = git_store - .update(cx, |git, cx| git.checkpoint(cx))? - .await - .context("failed to get new checkpoint") - .log_err(); - if let Some(new_checkpoint) = new_checkpoint { - let equal = git_store - .update(cx, |git, cx| { - git.compare_checkpoints(old_checkpoint.clone(), new_checkpoint, cx) - })? - .await - .unwrap_or(true); - if !equal { - this.update(cx, |this, cx| { - if let Some((ix, message)) = this.user_message_mut(&message_id) { - message.checkpoint = Some(old_checkpoint); - cx.emit(AcpThreadEvent::EntryUpdated(ix)); - } - })?; - } - } - } + this.update(cx, |this, cx| this.update_last_checkpoint(cx))? + .await?; this.update(cx, |this, cx| { match response { @@ -1294,7 +1302,10 @@ impl AcpThread { return Task::ready(Err(anyhow!("message not found"))); }; - let checkpoint = message.checkpoint.clone(); + let checkpoint = message + .checkpoint + .as_ref() + .map(|c| c.git_checkpoint.clone()); let git_store = self.project.read(cx).git_store().clone(); cx.spawn(async move |this, cx| { @@ -1316,6 +1327,59 @@ impl AcpThread { }) } + fn update_last_checkpoint(&mut self, cx: &mut Context) -> Task> { + let git_store = self.project.read(cx).git_store().clone(); + + let old_checkpoint = if let Some((_, message)) = self.last_user_message() { + if let Some(checkpoint) = message.checkpoint.as_ref() { + checkpoint.git_checkpoint.clone() + } else { + return Task::ready(Ok(())); + } + } else { + return Task::ready(Ok(())); + }; + + let new_checkpoint = git_store.update(cx, |git, cx| git.checkpoint(cx)); + cx.spawn(async move |this, cx| { + let new_checkpoint = new_checkpoint + .await + .context("failed to get new checkpoint") + .log_err(); + if let Some(new_checkpoint) = new_checkpoint { + let equal = git_store + .update(cx, |git, cx| { + git.compare_checkpoints(old_checkpoint.clone(), new_checkpoint, cx) + })? + .await + .unwrap_or(true); + this.update(cx, |this, cx| { + let (ix, message) = this.last_user_message().context("no user message")?; + let checkpoint = message.checkpoint.as_mut().context("no checkpoint")?; + checkpoint.show = !equal; + cx.emit(AcpThreadEvent::EntryUpdated(ix)); + anyhow::Ok(()) + })??; + } + + Ok(()) + }) + } + + fn last_user_message(&mut self) -> Option<(usize, &mut UserMessage)> { + self.entries + .iter_mut() + .enumerate() + .rev() + .find_map(|(ix, entry)| { + if let AgentThreadEntry::UserMessage(message) = entry { + Some((ix, message)) + } else { + None + } + }) + } + fn user_message(&self, id: &UserMessageId) -> Option<&UserMessage> { self.entries.iter().find_map(|entry| { if let AgentThreadEntry::UserMessage(message) = entry { @@ -1552,6 +1616,7 @@ mod tests { use settings::SettingsStore; use smol::stream::StreamExt as _; use std::{ + any::Any, cell::RefCell, path::Path, rc::Rc, @@ -2284,6 +2349,10 @@ mod tests { _session_id: session_id.clone(), })) } + + fn into_any(self: Rc) -> Rc { + self + } } struct FakeAgentSessionEditor { diff --git a/crates/acp_thread/src/connection.rs b/crates/acp_thread/src/connection.rs index 0f531acbde..b2116020fb 100644 --- a/crates/acp_thread/src/connection.rs +++ b/crates/acp_thread/src/connection.rs @@ -4,7 +4,7 @@ use anyhow::Result; use collections::IndexMap; use gpui::{Entity, SharedString, Task}; use project::Project; -use std::{error::Error, fmt, path::Path, rc::Rc, sync::Arc}; +use std::{any::Any, error::Error, fmt, path::Path, rc::Rc, sync::Arc}; use ui::{App, IconName}; use uuid::Uuid; @@ -36,6 +36,14 @@ pub trait AgentConnection { cx: &mut App, ) -> Task>; + fn resume( + &self, + _session_id: &acp::SessionId, + _cx: &mut App, + ) -> Option> { + None + } + fn cancel(&self, session_id: &acp::SessionId, cx: &mut App); fn session_editor( @@ -53,12 +61,24 @@ pub trait AgentConnection { fn model_selector(&self) -> Option> { None } + + fn into_any(self: Rc) -> Rc; +} + +impl dyn AgentConnection { + pub fn downcast(self: Rc) -> Option> { + self.into_any().downcast().ok() + } } pub trait AgentSessionEditor { fn truncate(&self, message_id: UserMessageId, cx: &mut App) -> Task>; } +pub trait AgentSessionResume { + fn run(&self, cx: &mut App) -> Task>; +} + #[derive(Debug)] pub struct AuthRequired; @@ -299,6 +319,10 @@ mod test_support { ) -> Option> { Some(Rc::new(StubAgentSessionEditor)) } + + fn into_any(self: Rc) -> Rc { + self + } } struct StubAgentSessionEditor; diff --git a/crates/agent2/src/agent.rs b/crates/agent2/src/agent.rs index 9ac3c2d0e5..358365d11f 100644 --- a/crates/agent2/src/agent.rs +++ b/crates/agent2/src/agent.rs @@ -1,9 +1,8 @@ -use crate::{AgentResponseEvent, Thread, templates::Templates}; use crate::{ - ContextServerRegistry, CopyPathTool, CreateDirectoryTool, DeletePathTool, DiagnosticsTool, - EditFileTool, FetchTool, FindPathTool, GrepTool, ListDirectoryTool, MovePathTool, NowTool, - OpenTool, ReadFileTool, TerminalTool, ThinkingTool, ToolCallAuthorization, UserMessageContent, - WebSearchTool, + AgentResponseEvent, ContextServerRegistry, CopyPathTool, CreateDirectoryTool, DeletePathTool, + DiagnosticsTool, EditFileTool, FetchTool, FindPathTool, GrepTool, ListDirectoryTool, + MovePathTool, NowTool, OpenTool, ReadFileTool, TerminalTool, ThinkingTool, Thread, + ToolCallAuthorization, UserMessageContent, WebSearchTool, templates::Templates, }; use acp_thread::AgentModelSelector; use agent_client_protocol as acp; @@ -11,6 +10,7 @@ use agent_settings::AgentSettings; use anyhow::{Context as _, Result, anyhow}; use collections::{HashSet, IndexMap}; use fs::Fs; +use futures::channel::mpsc; use futures::{StreamExt, future}; use gpui::{ App, AppContext, AsyncApp, Context, Entity, SharedString, Subscription, Task, WeakEntity, @@ -21,6 +21,7 @@ use prompt_store::{ ProjectContext, PromptId, PromptStore, RulesFileContext, UserRulesContext, WorktreeContext, }; use settings::update_settings_file; +use std::any::Any; use std::cell::RefCell; use std::collections::HashMap; use std::path::Path; @@ -426,9 +427,9 @@ impl NativeAgent { self.models.refresh_list(cx); for session in self.sessions.values_mut() { session.thread.update(cx, |thread, _| { - let model_id = LanguageModels::model_id(&thread.selected_model); + let model_id = LanguageModels::model_id(&thread.model()); if let Some(model) = self.models.model_from_id(&model_id) { - thread.selected_model = model.clone(); + thread.set_model(model.clone()); } }); } @@ -439,6 +440,124 @@ impl NativeAgent { #[derive(Clone)] pub struct NativeAgentConnection(pub Entity); +impl NativeAgentConnection { + pub fn thread(&self, session_id: &acp::SessionId, cx: &App) -> Option> { + self.0 + .read(cx) + .sessions + .get(session_id) + .map(|session| session.thread.clone()) + } + + fn run_turn( + &self, + session_id: acp::SessionId, + cx: &mut App, + f: impl 'static + + FnOnce( + Entity, + &mut App, + ) -> Result>>, + ) -> Task> { + let Some((thread, acp_thread)) = self.0.update(cx, |agent, _cx| { + agent + .sessions + .get_mut(&session_id) + .map(|s| (s.thread.clone(), s.acp_thread.clone())) + }) else { + return Task::ready(Err(anyhow!("Session not found"))); + }; + log::debug!("Found session for: {}", session_id); + + let mut response_stream = match f(thread, cx) { + Ok(stream) => stream, + Err(err) => return Task::ready(Err(err)), + }; + cx.spawn(async move |cx| { + // Handle response stream and forward to session.acp_thread + while let Some(result) = response_stream.next().await { + match result { + Ok(event) => { + log::trace!("Received completion event: {:?}", event); + + match event { + AgentResponseEvent::Text(text) => { + acp_thread.update(cx, |thread, cx| { + thread.push_assistant_content_block( + acp::ContentBlock::Text(acp::TextContent { + text, + annotations: None, + }), + false, + cx, + ) + })?; + } + AgentResponseEvent::Thinking(text) => { + acp_thread.update(cx, |thread, cx| { + thread.push_assistant_content_block( + acp::ContentBlock::Text(acp::TextContent { + text, + annotations: None, + }), + true, + cx, + ) + })?; + } + AgentResponseEvent::ToolCallAuthorization(ToolCallAuthorization { + tool_call, + options, + response, + }) => { + let recv = acp_thread.update(cx, |thread, cx| { + thread.request_tool_call_authorization(tool_call, options, cx) + })?; + cx.background_spawn(async move { + if let Some(option) = recv + .await + .context("authorization sender was dropped") + .log_err() + { + response + .send(option) + .map(|_| anyhow!("authorization receiver was dropped")) + .log_err(); + } + }) + .detach(); + } + AgentResponseEvent::ToolCall(tool_call) => { + acp_thread.update(cx, |thread, cx| { + thread.upsert_tool_call(tool_call, cx) + })?; + } + AgentResponseEvent::ToolCallUpdate(update) => { + acp_thread.update(cx, |thread, cx| { + thread.update_tool_call(update, cx) + })??; + } + AgentResponseEvent::Stop(stop_reason) => { + log::debug!("Assistant message complete: {:?}", stop_reason); + return Ok(acp::PromptResponse { stop_reason }); + } + } + } + Err(e) => { + log::error!("Error in model response stream: {:?}", e); + return Err(e); + } + } + } + + log::info!("Response stream completed"); + anyhow::Ok(acp::PromptResponse { + stop_reason: acp::StopReason::EndTurn, + }) + }) + } +} + impl AgentModelSelector for NativeAgentConnection { fn list_models(&self, cx: &mut App) -> Task> { log::debug!("NativeAgentConnection::list_models called"); @@ -472,7 +591,7 @@ impl AgentModelSelector for NativeAgentConnection { }; thread.update(cx, |thread, _cx| { - thread.selected_model = model.clone(); + thread.set_model(model.clone()); }); update_settings_file::( @@ -502,7 +621,7 @@ impl AgentModelSelector for NativeAgentConnection { else { return Task::ready(Err(anyhow!("Session not found"))); }; - let model = thread.read(cx).selected_model.clone(); + let model = thread.read(cx).model().clone(); let Some(provider) = LanguageModelRegistry::read_global(cx).provider(&model.provider_id()) else { return Task::ready(Err(anyhow!("Provider not found"))); @@ -644,25 +763,10 @@ impl acp_thread::AgentConnection for NativeAgentConnection { ) -> Task> { let id = id.expect("UserMessageId is required"); let session_id = params.session_id.clone(); - let agent = self.0.clone(); log::info!("Received prompt request for session: {}", session_id); log::debug!("Prompt blocks count: {}", params.prompt.len()); - cx.spawn(async move |cx| { - // Get session - let (thread, acp_thread) = agent - .update(cx, |agent, _| { - agent - .sessions - .get_mut(&session_id) - .map(|s| (s.thread.clone(), s.acp_thread.clone())) - })? - .ok_or_else(|| { - log::error!("Session not found: {}", session_id); - anyhow::anyhow!("Session not found") - })?; - log::debug!("Found session for: {}", session_id); - + self.run_turn(session_id, cx, |thread, cx| { let content: Vec = params .prompt .into_iter() @@ -672,99 +776,27 @@ impl acp_thread::AgentConnection for NativeAgentConnection { log::debug!("Message id: {:?}", id); log::debug!("Message content: {:?}", content); - // Get model using the ModelSelector capability (always available for agent2) - // Get the selected model from the thread directly - let model = thread.read_with(cx, |thread, _| thread.selected_model.clone())?; - - // Send to thread - log::info!("Sending message to thread with model: {:?}", model.name()); - let mut response_stream = - thread.update(cx, |thread, cx| thread.send(id, content, cx))?; - - // Handle response stream and forward to session.acp_thread - while let Some(result) = response_stream.next().await { - match result { - Ok(event) => { - log::trace!("Received completion event: {:?}", event); - - match event { - AgentResponseEvent::Text(text) => { - acp_thread.update(cx, |thread, cx| { - thread.push_assistant_content_block( - acp::ContentBlock::Text(acp::TextContent { - text, - annotations: None, - }), - false, - cx, - ) - })?; - } - AgentResponseEvent::Thinking(text) => { - acp_thread.update(cx, |thread, cx| { - thread.push_assistant_content_block( - acp::ContentBlock::Text(acp::TextContent { - text, - annotations: None, - }), - true, - cx, - ) - })?; - } - AgentResponseEvent::ToolCallAuthorization(ToolCallAuthorization { - tool_call, - options, - response, - }) => { - let recv = acp_thread.update(cx, |thread, cx| { - thread.request_tool_call_authorization(tool_call, options, cx) - })?; - cx.background_spawn(async move { - if let Some(option) = recv - .await - .context("authorization sender was dropped") - .log_err() - { - response - .send(option) - .map(|_| anyhow!("authorization receiver was dropped")) - .log_err(); - } - }) - .detach(); - } - AgentResponseEvent::ToolCall(tool_call) => { - acp_thread.update(cx, |thread, cx| { - thread.upsert_tool_call(tool_call, cx) - })?; - } - AgentResponseEvent::ToolCallUpdate(update) => { - acp_thread.update(cx, |thread, cx| { - thread.update_tool_call(update, cx) - })??; - } - AgentResponseEvent::Stop(stop_reason) => { - log::debug!("Assistant message complete: {:?}", stop_reason); - return Ok(acp::PromptResponse { stop_reason }); - } - } - } - Err(e) => { - log::error!("Error in model response stream: {:?}", e); - // TODO: Consider sending an error message to the UI - break; - } - } - } - - log::info!("Response stream completed"); - anyhow::Ok(acp::PromptResponse { - stop_reason: acp::StopReason::EndTurn, - }) + Ok(thread.update(cx, |thread, cx| { + log::info!( + "Sending message to thread with model: {:?}", + thread.model().name() + ); + thread.send(id, content, cx) + })) }) } + fn resume( + &self, + session_id: &acp::SessionId, + _cx: &mut App, + ) -> Option> { + Some(Rc::new(NativeAgentSessionResume { + connection: self.clone(), + session_id: session_id.clone(), + }) as _) + } + fn cancel(&self, session_id: &acp::SessionId, cx: &mut App) { log::info!("Cancelling on session: {}", session_id); self.0.update(cx, |agent, cx| { @@ -786,6 +818,10 @@ impl acp_thread::AgentConnection for NativeAgentConnection { .map(|session| Rc::new(NativeAgentSessionEditor(session.thread.clone())) as _) }) } + + fn into_any(self: Rc) -> Rc { + self + } } struct NativeAgentSessionEditor(Entity); @@ -796,6 +832,20 @@ impl acp_thread::AgentSessionEditor for NativeAgentSessionEditor { } } +struct NativeAgentSessionResume { + connection: NativeAgentConnection, + session_id: acp::SessionId, +} + +impl acp_thread::AgentSessionResume for NativeAgentSessionResume { + fn run(&self, cx: &mut App) -> Task> { + self.connection + .run_turn(self.session_id.clone(), cx, |thread, cx| { + thread.update(cx, |thread, cx| thread.resume(cx)) + }) + } +} + #[cfg(test)] mod tests { use super::*; @@ -957,7 +1007,7 @@ mod tests { agent.read_with(cx, |agent, _| { let session = agent.sessions.get(&session_id).unwrap(); session.thread.read_with(cx, |thread, _| { - assert_eq!(thread.selected_model.id().0, "fake"); + assert_eq!(thread.model().id().0, "fake"); }); }); diff --git a/crates/agent2/src/tests/mod.rs b/crates/agent2/src/tests/mod.rs index 1df664c029..cf90c8f650 100644 --- a/crates/agent2/src/tests/mod.rs +++ b/crates/agent2/src/tests/mod.rs @@ -12,9 +12,9 @@ use gpui::{ }; use indoc::indoc; use language_model::{ - LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelId, - LanguageModelRegistry, LanguageModelToolResult, LanguageModelToolUse, Role, StopReason, - fake_provider::FakeLanguageModel, + LanguageModel, LanguageModelCompletionEvent, LanguageModelId, LanguageModelRegistry, + LanguageModelRequestMessage, LanguageModelToolResult, LanguageModelToolUse, MessageContent, + Role, StopReason, fake_provider::FakeLanguageModel, }; use project::Project; use prompt_store::ProjectContext; @@ -394,8 +394,194 @@ async fn test_tool_hallucination(cx: &mut TestAppContext) { assert_eq!(update.fields.status, Some(acp::ToolCallStatus::Failed)); } +#[gpui::test] +async fn test_resume_after_tool_use_limit(cx: &mut TestAppContext) { + let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; + let fake_model = model.as_fake(); + + let events = thread.update(cx, |thread, cx| { + thread.add_tool(EchoTool); + thread.send(UserMessageId::new(), ["abc"], cx) + }); + cx.run_until_parked(); + let tool_use = LanguageModelToolUse { + id: "tool_id_1".into(), + name: EchoTool.name().into(), + raw_input: "{}".into(), + input: serde_json::to_value(&EchoToolInput { text: "def".into() }).unwrap(), + is_input_complete: true, + }; + fake_model + .send_last_completion_stream_event(LanguageModelCompletionEvent::ToolUse(tool_use.clone())); + fake_model.end_last_completion_stream(); + + cx.run_until_parked(); + let completion = fake_model.pending_completions().pop().unwrap(); + let tool_result = LanguageModelToolResult { + tool_use_id: "tool_id_1".into(), + tool_name: EchoTool.name().into(), + is_error: false, + content: "def".into(), + output: Some("def".into()), + }; + assert_eq!( + completion.messages[1..], + vec![ + LanguageModelRequestMessage { + role: Role::User, + content: vec!["abc".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec![MessageContent::ToolUse(tool_use.clone())], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec![MessageContent::ToolResult(tool_result.clone())], + cache: false + }, + ] + ); + + // Simulate reaching tool use limit. + fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::StatusUpdate( + cloud_llm_client::CompletionRequestStatus::ToolUseLimitReached, + )); + fake_model.end_last_completion_stream(); + let last_event = events.collect::>().await.pop().unwrap(); + assert!( + last_event + .unwrap_err() + .is::() + ); + + let events = thread.update(cx, |thread, cx| thread.resume(cx)).unwrap(); + cx.run_until_parked(); + let completion = fake_model.pending_completions().pop().unwrap(); + assert_eq!( + completion.messages[1..], + vec![ + LanguageModelRequestMessage { + role: Role::User, + content: vec!["abc".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec![MessageContent::ToolUse(tool_use)], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec![MessageContent::ToolResult(tool_result)], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Continue where you left off".into()], + cache: false + } + ] + ); + + fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::Text("Done".into())); + fake_model.end_last_completion_stream(); + events.collect::>().await; + thread.read_with(cx, |thread, _cx| { + assert_eq!( + thread.last_message().unwrap().to_markdown(), + indoc! {" + ## Assistant + + Done + "} + ) + }); + + // Ensure we error if calling resume when tool use limit was *not* reached. + let error = thread + .update(cx, |thread, cx| thread.resume(cx)) + .unwrap_err(); + assert_eq!( + error.to_string(), + "can only resume after tool use limit is reached" + ) +} + +#[gpui::test] +async fn test_send_after_tool_use_limit(cx: &mut TestAppContext) { + let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; + let fake_model = model.as_fake(); + + let events = thread.update(cx, |thread, cx| { + thread.add_tool(EchoTool); + thread.send(UserMessageId::new(), ["abc"], cx) + }); + cx.run_until_parked(); + + let tool_use = LanguageModelToolUse { + id: "tool_id_1".into(), + name: EchoTool.name().into(), + raw_input: "{}".into(), + input: serde_json::to_value(&EchoToolInput { text: "def".into() }).unwrap(), + is_input_complete: true, + }; + let tool_result = LanguageModelToolResult { + tool_use_id: "tool_id_1".into(), + tool_name: EchoTool.name().into(), + is_error: false, + content: "def".into(), + output: Some("def".into()), + }; + fake_model + .send_last_completion_stream_event(LanguageModelCompletionEvent::ToolUse(tool_use.clone())); + fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::StatusUpdate( + cloud_llm_client::CompletionRequestStatus::ToolUseLimitReached, + )); + fake_model.end_last_completion_stream(); + let last_event = events.collect::>().await.pop().unwrap(); + assert!( + last_event + .unwrap_err() + .is::() + ); + + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), vec!["ghi"], cx) + }); + cx.run_until_parked(); + let completion = fake_model.pending_completions().pop().unwrap(); + assert_eq!( + completion.messages[1..], + vec![ + LanguageModelRequestMessage { + role: Role::User, + content: vec!["abc".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec![MessageContent::ToolUse(tool_use)], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec![MessageContent::ToolResult(tool_result)], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec!["ghi".into()], + cache: false + } + ] + ); +} + async fn expect_tool_call( - events: &mut UnboundedReceiver>, + events: &mut UnboundedReceiver>, ) -> acp::ToolCall { let event = events .next() @@ -411,7 +597,7 @@ async fn expect_tool_call( } async fn expect_tool_call_update_fields( - events: &mut UnboundedReceiver>, + events: &mut UnboundedReceiver>, ) -> acp::ToolCallUpdate { let event = events .next() @@ -429,7 +615,7 @@ async fn expect_tool_call_update_fields( } async fn next_tool_call_authorization( - events: &mut UnboundedReceiver>, + events: &mut UnboundedReceiver>, ) -> ToolCallAuthorization { loop { let event = events @@ -1007,9 +1193,7 @@ async fn test_tool_updates_to_completion(cx: &mut TestAppContext) { } /// Filters out the stop events for asserting against in tests -fn stop_events( - result_events: Vec>, -) -> Vec { +fn stop_events(result_events: Vec>) -> Vec { result_events .into_iter() .filter_map(|event| match event.unwrap() { diff --git a/crates/agent2/src/tests/test_tools.rs b/crates/agent2/src/tests/test_tools.rs index 7c7b81f52f..cbff44cedf 100644 --- a/crates/agent2/src/tests/test_tools.rs +++ b/crates/agent2/src/tests/test_tools.rs @@ -7,7 +7,7 @@ use std::future; #[derive(JsonSchema, Serialize, Deserialize)] pub struct EchoToolInput { /// The text to echo. - text: String, + pub text: String, } pub struct EchoTool; diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 260aaaf550..231ee92dda 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -2,10 +2,10 @@ use crate::{ContextServerRegistry, SystemPromptTemplate, Template, Templates}; use acp_thread::{MentionUri, UserMessageId}; use action_log::ActionLog; use agent_client_protocol as acp; -use agent_settings::{AgentProfileId, AgentSettings}; +use agent_settings::{AgentProfileId, AgentSettings, CompletionMode}; use anyhow::{Context as _, Result, anyhow}; use assistant_tool::adapt_schema_to_format; -use cloud_llm_client::{CompletionIntent, CompletionMode}; +use cloud_llm_client::{CompletionIntent, CompletionRequestStatus}; use collections::IndexMap; use fs::Fs; use futures::{ @@ -14,10 +14,10 @@ use futures::{ }; use gpui::{App, Context, Entity, SharedString, Task}; use language_model::{ - LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelImage, - LanguageModelProviderId, LanguageModelRequest, LanguageModelRequestMessage, - LanguageModelRequestTool, LanguageModelToolResult, LanguageModelToolResultContent, - LanguageModelToolSchemaFormat, LanguageModelToolUse, LanguageModelToolUseId, Role, StopReason, + LanguageModel, LanguageModelCompletionEvent, LanguageModelImage, LanguageModelProviderId, + LanguageModelRequest, LanguageModelRequestMessage, LanguageModelRequestTool, + LanguageModelToolResult, LanguageModelToolResultContent, LanguageModelToolSchemaFormat, + LanguageModelToolUse, LanguageModelToolUseId, Role, StopReason, }; use project::Project; use prompt_store::ProjectContext; @@ -33,6 +33,7 @@ use util::{ResultExt, markdown::MarkdownCodeBlock}; pub enum Message { User(UserMessage), Agent(AgentMessage), + Resume, } impl Message { @@ -47,6 +48,7 @@ impl Message { match self { Message::User(message) => message.to_markdown(), Message::Agent(message) => message.to_markdown(), + Message::Resume => "[resumed after tool use limit was reached]".into(), } } } @@ -320,7 +322,11 @@ impl AgentMessage { } pub fn to_request(&self) -> Vec { - let mut content = Vec::with_capacity(self.content.len()); + let mut assistant_message = LanguageModelRequestMessage { + role: Role::Assistant, + content: Vec::with_capacity(self.content.len()), + cache: false, + }; for chunk in &self.content { let chunk = match chunk { AgentMessageContent::Text(text) => { @@ -342,29 +348,30 @@ impl AgentMessage { language_model::MessageContent::Image(value.clone()) } }; - content.push(chunk); + assistant_message.content.push(chunk); } - let mut messages = vec![LanguageModelRequestMessage { - role: Role::Assistant, - content, + let mut user_message = LanguageModelRequestMessage { + role: Role::User, + content: Vec::new(), cache: false, - }]; + }; - if !self.tool_results.is_empty() { - let mut tool_results = Vec::with_capacity(self.tool_results.len()); - for tool_result in self.tool_results.values() { - tool_results.push(language_model::MessageContent::ToolResult( + for tool_result in self.tool_results.values() { + user_message + .content + .push(language_model::MessageContent::ToolResult( tool_result.clone(), )); - } - messages.push(LanguageModelRequestMessage { - role: Role::User, - content: tool_results, - cache: false, - }); } + let mut messages = Vec::new(); + if !assistant_message.content.is_empty() { + messages.push(assistant_message); + } + if !user_message.content.is_empty() { + messages.push(user_message); + } messages } } @@ -413,11 +420,12 @@ pub struct Thread { running_turn: Option>, pending_message: Option, tools: BTreeMap>, + tool_use_limit_reached: bool, context_server_registry: Entity, profile_id: AgentProfileId, project_context: Rc>, templates: Arc, - pub selected_model: Arc, + model: Arc, project: Entity, action_log: Entity, } @@ -429,7 +437,7 @@ impl Thread { context_server_registry: Entity, action_log: Entity, templates: Arc, - default_model: Arc, + model: Arc, cx: &mut Context, ) -> Self { let profile_id = AgentSettings::get_global(cx).default_profile.clone(); @@ -439,11 +447,12 @@ impl Thread { running_turn: None, pending_message: None, tools: BTreeMap::default(), + tool_use_limit_reached: false, context_server_registry, profile_id, project_context, templates, - selected_model: default_model, + model, project, action_log, } @@ -457,7 +466,19 @@ impl Thread { &self.action_log } - pub fn set_mode(&mut self, mode: CompletionMode) { + pub fn model(&self) -> &Arc { + &self.model + } + + pub fn set_model(&mut self, model: Arc) { + self.model = model; + } + + pub fn completion_mode(&self) -> CompletionMode { + self.completion_mode + } + + pub fn set_completion_mode(&mut self, mode: CompletionMode) { self.completion_mode = mode; } @@ -499,36 +520,59 @@ impl Thread { Ok(()) } + pub fn resume( + &mut self, + cx: &mut Context, + ) -> Result>> { + anyhow::ensure!( + self.tool_use_limit_reached, + "can only resume after tool use limit is reached" + ); + + self.messages.push(Message::Resume); + cx.notify(); + + log::info!("Total messages in thread: {}", self.messages.len()); + Ok(self.run_turn(cx)) + } + /// Sending a message results in the model streaming a response, which could include tool calls. /// After calling tools, the model will stops and waits for any outstanding tool calls to be completed and their results sent. /// The returned channel will report all the occurrences in which the model stops before erroring or ending its turn. pub fn send( &mut self, - message_id: UserMessageId, + id: UserMessageId, content: impl IntoIterator, cx: &mut Context, - ) -> mpsc::UnboundedReceiver> + ) -> mpsc::UnboundedReceiver> where T: Into, { - let model = self.selected_model.clone(); + log::info!("Thread::send called with model: {:?}", self.model.name()); + let content = content.into_iter().map(Into::into).collect::>(); - log::info!("Thread::send called with model: {:?}", model.name()); log::debug!("Thread::send content: {:?}", content); + self.messages + .push(Message::User(UserMessage { id, content })); cx.notify(); - let (events_tx, events_rx) = - mpsc::unbounded::>(); - let event_stream = AgentResponseEventStream(events_tx); - self.messages.push(Message::User(UserMessage { - id: message_id.clone(), - content, - })); log::info!("Total messages in thread: {}", self.messages.len()); + self.run_turn(cx) + } + + fn run_turn( + &mut self, + cx: &mut Context, + ) -> mpsc::UnboundedReceiver> { + let model = self.model.clone(); + let (events_tx, events_rx) = mpsc::unbounded::>(); + let event_stream = AgentResponseEventStream(events_tx); + let message_ix = self.messages.len().saturating_sub(1); + self.tool_use_limit_reached = false; self.running_turn = Some(cx.spawn(async move |this, cx| { log::info!("Starting agent turn execution"); - let turn_result = async { + let turn_result: Result<()> = async { let mut completion_intent = CompletionIntent::UserPrompt; loop { log::debug!( @@ -543,13 +587,22 @@ impl Thread { let mut events = model.stream_completion(request, cx).await?; log::debug!("Stream completion started successfully"); + let mut tool_use_limit_reached = false; let mut tool_uses = FuturesUnordered::new(); while let Some(event) = events.next().await { match event? { + LanguageModelCompletionEvent::StatusUpdate( + CompletionRequestStatus::ToolUseLimitReached, + ) => { + tool_use_limit_reached = true; + } LanguageModelCompletionEvent::Stop(reason) => { event_stream.send_stop(reason); if reason == StopReason::Refusal { - this.update(cx, |this, _cx| this.truncate(message_id))??; + this.update(cx, |this, _cx| { + this.flush_pending_message(); + this.messages.truncate(message_ix); + })?; return Ok(()); } } @@ -567,12 +620,7 @@ impl Thread { } } - if tool_uses.is_empty() { - log::info!("No tool uses found, completing turn"); - return Ok(()); - } - log::info!("Found {} tool uses to execute", tool_uses.len()); - + let used_tools = tool_uses.is_empty(); while let Some(tool_result) = tool_uses.next().await { log::info!("Tool finished {:?}", tool_result); @@ -596,8 +644,17 @@ impl Thread { .ok(); } - this.update(cx, |this, _| this.flush_pending_message())?; - completion_intent = CompletionIntent::ToolResults; + if tool_use_limit_reached { + log::info!("Tool use limit reached, completing turn"); + this.update(cx, |this, _cx| this.tool_use_limit_reached = true)?; + return Err(language_model::ToolUseLimitReachedError.into()); + } else if used_tools { + log::info!("No tool uses found, completing turn"); + return Ok(()); + } else { + this.update(cx, |this, _| this.flush_pending_message())?; + completion_intent = CompletionIntent::ToolResults; + } } } .await; @@ -678,10 +735,10 @@ impl Thread { fn handle_text_event( &mut self, new_text: String, - events_stream: &AgentResponseEventStream, + event_stream: &AgentResponseEventStream, cx: &mut Context, ) { - events_stream.send_text(&new_text); + event_stream.send_text(&new_text); let last_message = self.pending_message(); if let Some(AgentMessageContent::Text(text)) = last_message.content.last_mut() { @@ -798,8 +855,9 @@ impl Thread { status: Some(acp::ToolCallStatus::InProgress), ..Default::default() }); - let supports_images = self.selected_model.supports_images(); + let supports_images = self.model.supports_images(); let tool_result = tool.run(tool_use.input, tool_event_stream, cx); + log::info!("Running tool {}", tool_use.name); Some(cx.foreground_executor().spawn(async move { let tool_result = tool_result.await.and_then(|output| { if let LanguageModelToolResultContent::Image(_) = &output.llm_output { @@ -902,7 +960,7 @@ impl Thread { name: tool_name, description: tool.description().to_string(), input_schema: tool - .input_schema(self.selected_model.tool_input_format()) + .input_schema(self.model.tool_input_format()) .log_err()?, }) }) @@ -917,7 +975,7 @@ impl Thread { thread_id: None, prompt_id: None, intent: Some(completion_intent), - mode: Some(self.completion_mode), + mode: Some(self.completion_mode.into()), messages, tools, tool_choice: None, @@ -935,7 +993,7 @@ impl Thread { .profiles .get(&self.profile_id) .context("profile not found")?; - let provider_id = self.selected_model.provider_id(); + let provider_id = self.model.provider_id(); Ok(self .tools @@ -971,6 +1029,11 @@ impl Thread { match message { Message::User(message) => messages.push(message.to_request()), Message::Agent(message) => messages.extend(message.to_request()), + Message::Resume => messages.push(LanguageModelRequestMessage { + role: Role::User, + content: vec!["Continue where you left off".into()], + cache: false, + }), } } @@ -1123,9 +1186,7 @@ where } #[derive(Clone)] -struct AgentResponseEventStream( - mpsc::UnboundedSender>, -); +struct AgentResponseEventStream(mpsc::UnboundedSender>); impl AgentResponseEventStream { fn send_text(&self, text: &str) { @@ -1212,8 +1273,8 @@ impl AgentResponseEventStream { } } - fn send_error(&self, error: LanguageModelCompletionError) { - self.0.unbounded_send(Err(error)).ok(); + fn send_error(&self, error: impl Into) { + self.0.unbounded_send(Err(error.into())).ok(); } } @@ -1229,8 +1290,7 @@ pub struct ToolCallEventStream { impl ToolCallEventStream { #[cfg(test)] pub fn test() -> (Self, ToolCallEventStreamReceiver) { - let (events_tx, events_rx) = - mpsc::unbounded::>(); + let (events_tx, events_rx) = mpsc::unbounded::>(); let stream = ToolCallEventStream::new( &LanguageModelToolUse { @@ -1351,9 +1411,7 @@ impl ToolCallEventStream { } #[cfg(test)] -pub struct ToolCallEventStreamReceiver( - mpsc::UnboundedReceiver>, -); +pub struct ToolCallEventStreamReceiver(mpsc::UnboundedReceiver>); #[cfg(test)] impl ToolCallEventStreamReceiver { @@ -1381,7 +1439,7 @@ impl ToolCallEventStreamReceiver { #[cfg(test)] impl std::ops::Deref for ToolCallEventStreamReceiver { - type Target = mpsc::UnboundedReceiver>; + type Target = mpsc::UnboundedReceiver>; fn deref(&self) -> &Self::Target { &self.0 diff --git a/crates/agent2/src/tools/edit_file_tool.rs b/crates/agent2/src/tools/edit_file_tool.rs index 405afb585f..c77b9f6a69 100644 --- a/crates/agent2/src/tools/edit_file_tool.rs +++ b/crates/agent2/src/tools/edit_file_tool.rs @@ -241,7 +241,7 @@ impl AgentTool for EditFileTool { thread.build_completion_request(CompletionIntent::ToolResults, cx) }); let thread = self.thread.read(cx); - let model = thread.selected_model.clone(); + let model = thread.model().clone(); let action_log = thread.action_log().clone(); let authorize = self.authorize(&input, &event_stream, cx); diff --git a/crates/agent_servers/src/acp/v0.rs b/crates/agent_servers/src/acp/v0.rs index 15f8635cde..e936c87643 100644 --- a/crates/agent_servers/src/acp/v0.rs +++ b/crates/agent_servers/src/acp/v0.rs @@ -5,7 +5,7 @@ use anyhow::{Context as _, Result, anyhow}; use futures::channel::oneshot; use gpui::{AppContext as _, AsyncApp, Entity, Task, WeakEntity}; use project::Project; -use std::{cell::RefCell, path::Path, rc::Rc}; +use std::{any::Any, cell::RefCell, path::Path, rc::Rc}; use ui::App; use util::ResultExt as _; @@ -507,4 +507,8 @@ impl AgentConnection for AcpConnection { }) .detach_and_log_err(cx) } + + fn into_any(self: Rc) -> Rc { + self + } } diff --git a/crates/agent_servers/src/acp/v1.rs b/crates/agent_servers/src/acp/v1.rs index d93e3d023e..36511e4644 100644 --- a/crates/agent_servers/src/acp/v1.rs +++ b/crates/agent_servers/src/acp/v1.rs @@ -3,9 +3,9 @@ use anyhow::anyhow; use collections::HashMap; use futures::channel::oneshot; use project::Project; -use std::cell::RefCell; use std::path::Path; use std::rc::Rc; +use std::{any::Any, cell::RefCell}; use anyhow::{Context as _, Result}; use gpui::{App, AppContext as _, AsyncApp, Entity, Task, WeakEntity}; @@ -191,6 +191,10 @@ impl AgentConnection for AcpConnection { .spawn(async move { conn.cancel(params).await }) .detach(); } + + fn into_any(self: Rc) -> Rc { + self + } } struct ClientDelegate { diff --git a/crates/agent_servers/src/claude.rs b/crates/agent_servers/src/claude.rs index dbcda00e48..e1cc709289 100644 --- a/crates/agent_servers/src/claude.rs +++ b/crates/agent_servers/src/claude.rs @@ -6,6 +6,7 @@ use context_server::listener::McpServerTool; use project::Project; use settings::SettingsStore; use smol::process::Child; +use std::any::Any; use std::cell::RefCell; use std::fmt::Display; use std::path::Path; @@ -289,6 +290,10 @@ impl AgentConnection for ClaudeAgentConnection { }) .log_err(); } + + fn into_any(self: Rc) -> Rc { + self + } } #[derive(Clone, Copy)] diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index ee016b7503..87af75f046 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -7,20 +7,21 @@ use action_log::ActionLog; use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::{self as acp}; use agent_servers::AgentServer; -use agent_settings::{AgentSettings, NotifyWhenAgentWaiting}; +use agent_settings::{AgentSettings, CompletionMode, NotifyWhenAgentWaiting}; use anyhow::bail; use audio::{Audio, Sound}; use buffer_diff::BufferDiff; +use client::zed_urls; use collections::{HashMap, HashSet}; use editor::scroll::Autoscroll; use editor::{Editor, EditorMode, MultiBuffer, PathKey, SelectionEffects}; use file_icons::FileIcons; use gpui::{ - Action, Animation, AnimationExt, App, BorderStyle, ClickEvent, EdgesRefinement, Empty, Entity, - FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, PlatformDisplay, - SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, TextStyleRefinement, - Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, linear_color_stop, - linear_gradient, list, percentage, point, prelude::*, pulsating_between, + Action, Animation, AnimationExt, App, BorderStyle, ClickEvent, ClipboardItem, EdgesRefinement, + Empty, Entity, FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, + PlatformDisplay, SharedString, Stateful, StyleRefinement, Subscription, Task, TextStyle, + TextStyleRefinement, Transformation, UnderlineStyle, WeakEntity, Window, WindowHandle, div, + linear_color_stop, linear_gradient, list, percentage, point, prelude::*, pulsating_between, }; use language::Buffer; use markdown::{HeadingLevelStyles, Markdown, MarkdownElement, MarkdownStyle}; @@ -32,8 +33,8 @@ use std::{collections::BTreeMap, process::ExitStatus, rc::Rc, time::Duration}; use text::Anchor; use theme::ThemeSettings; use ui::{ - Disclosure, Divider, DividerColor, KeyBinding, PopoverMenuHandle, Scrollbar, ScrollbarState, - Tooltip, prelude::*, + Callout, Disclosure, Divider, DividerColor, ElevationIndex, KeyBinding, PopoverMenuHandle, + Scrollbar, ScrollbarState, Tooltip, prelude::*, }; use util::{ResultExt, size::format_file_size, time::duration_alt_display}; use workspace::{CollaboratorId, Workspace}; @@ -44,16 +45,39 @@ use super::entry_view_state::EntryViewState; use crate::acp::AcpModelSelectorPopover; use crate::acp::message_editor::{MessageEditor, MessageEditorEvent}; use crate::agent_diff::AgentDiff; -use crate::ui::{AgentNotification, AgentNotificationEvent}; +use crate::ui::{AgentNotification, AgentNotificationEvent, BurnModeTooltip}; use crate::{ - AgentDiffPane, AgentPanel, ExpandMessageEditor, Follow, KeepAll, OpenAgentDiff, RejectAll, + AgentDiffPane, AgentPanel, ContinueThread, ContinueWithBurnMode, ExpandMessageEditor, Follow, + KeepAll, OpenAgentDiff, RejectAll, ToggleBurnMode, }; const RESPONSE_PADDING_X: Pixels = px(19.); - pub const MIN_EDITOR_LINES: usize = 4; pub const MAX_EDITOR_LINES: usize = 8; +enum ThreadError { + PaymentRequired, + ModelRequestLimitReached(cloud_llm_client::Plan), + ToolUseLimitReached, + Other(SharedString), +} + +impl ThreadError { + fn from_err(error: anyhow::Error) -> Self { + if error.is::() { + Self::PaymentRequired + } else if error.is::() { + Self::ToolUseLimitReached + } else if let Some(error) = + error.downcast_ref::() + { + Self::ModelRequestLimitReached(error.plan) + } else { + Self::Other(error.to_string().into()) + } + } +} + pub struct AcpThreadView { agent: Rc, workspace: WeakEntity, @@ -66,7 +90,7 @@ pub struct AcpThreadView { model_selector: Option>, notifications: Vec>, notification_subscriptions: HashMap, Vec>, - last_error: Option>, + thread_error: Option, list_state: ListState, scrollbar_state: ScrollbarState, auth_task: Option>, @@ -151,7 +175,7 @@ impl AcpThreadView { entry_view_state: EntryViewState::default(), list_state: list_state.clone(), scrollbar_state: ScrollbarState::new(list_state).parent_entity(&cx.entity()), - last_error: None, + thread_error: None, auth_task: None, expanded_tool_calls: HashSet::default(), expanded_thinking_blocks: HashSet::default(), @@ -316,7 +340,7 @@ impl AcpThreadView { } pub fn cancel_generation(&mut self, cx: &mut Context) { - self.last_error.take(); + self.thread_error.take(); if let Some(thread) = self.thread() { self._cancel_task = Some(thread.update(cx, |thread, cx| thread.cancel(cx))); @@ -371,6 +395,25 @@ impl AcpThreadView { } } + fn resume_chat(&mut self, cx: &mut Context) { + self.thread_error.take(); + let Some(thread) = self.thread() else { + return; + }; + + let task = thread.update(cx, |thread, cx| thread.resume(cx)); + cx.spawn(async move |this, cx| { + let result = task.await; + + this.update(cx, |this, cx| { + if let Err(err) = result { + this.handle_thread_error(err, cx); + } + }) + }) + .detach(); + } + fn send(&mut self, window: &mut Window, cx: &mut Context) { let contents = self .message_editor @@ -384,7 +427,7 @@ impl AcpThreadView { window: &mut Window, cx: &mut Context, ) { - self.last_error.take(); + self.thread_error.take(); self.editing_message.take(); let Some(thread) = self.thread().cloned() else { @@ -409,11 +452,9 @@ impl AcpThreadView { }); cx.spawn(async move |this, cx| { - if let Err(e) = task.await { + if let Err(err) = task.await { this.update(cx, |this, cx| { - this.last_error = - Some(cx.new(|cx| Markdown::new(e.to_string().into(), None, None, cx))); - cx.notify() + this.handle_thread_error(err, cx); }) .ok(); } @@ -476,6 +517,16 @@ impl AcpThreadView { }) } + fn handle_thread_error(&mut self, error: anyhow::Error, cx: &mut Context) { + self.thread_error = Some(ThreadError::from_err(error)); + cx.notify(); + } + + fn clear_thread_error(&mut self, cx: &mut Context) { + self.thread_error = None; + cx.notify(); + } + fn handle_thread_event( &mut self, thread: &Entity, @@ -551,7 +602,7 @@ impl AcpThreadView { return; }; - self.last_error.take(); + self.thread_error.take(); let authenticate = connection.authenticate(method, cx); self.auth_task = Some(cx.spawn_in(window, { let project = self.project.clone(); @@ -561,9 +612,7 @@ impl AcpThreadView { this.update_in(cx, |this, window, cx| { if let Err(err) = result { - this.last_error = Some(cx.new(|cx| { - Markdown::new(format!("Error: {err}").into(), None, None, cx) - })) + this.handle_thread_error(err, cx); } else { this.thread_state = Self::initial_state( agent, @@ -620,9 +669,7 @@ impl AcpThreadView { .py_4() .px_2() .children(message.id.clone().and_then(|message_id| { - message.checkpoint.as_ref()?; - - Some( + message.checkpoint.as_ref()?.show.then(|| { Button::new("restore-checkpoint", "Restore Checkpoint") .icon(IconName::Undo) .icon_size(IconSize::XSmall) @@ -630,8 +677,8 @@ impl AcpThreadView { .label_size(LabelSize::XSmall) .on_click(cx.listener(move |this, _, _window, cx| { this.rewind(&message_id, cx); - })), - ) + })) + }) })) .child( v_flex() @@ -2322,7 +2369,12 @@ impl AcpThreadView { h_flex() .flex_none() .justify_between() - .child(self.render_follow_toggle(cx)) + .child( + h_flex() + .gap_1() + .child(self.render_follow_toggle(cx)) + .children(self.render_burn_mode_toggle(cx)), + ) .child( h_flex() .gap_1() @@ -2333,6 +2385,68 @@ impl AcpThreadView { .into_any() } + fn as_native_connection(&self, cx: &App) -> Option> { + let acp_thread = self.thread()?.read(cx); + acp_thread.connection().clone().downcast() + } + + fn as_native_thread(&self, cx: &App) -> Option> { + let acp_thread = self.thread()?.read(cx); + self.as_native_connection(cx)? + .thread(acp_thread.session_id(), cx) + } + + fn toggle_burn_mode( + &mut self, + _: &ToggleBurnMode, + _window: &mut Window, + cx: &mut Context, + ) { + let Some(thread) = self.as_native_thread(cx) else { + return; + }; + + thread.update(cx, |thread, _cx| { + let current_mode = thread.completion_mode(); + thread.set_completion_mode(match current_mode { + CompletionMode::Burn => CompletionMode::Normal, + CompletionMode::Normal => CompletionMode::Burn, + }); + }); + } + + fn render_burn_mode_toggle(&self, cx: &mut Context) -> Option { + let thread = self.as_native_thread(cx)?.read(cx); + + if !thread.model().supports_burn_mode() { + return None; + } + + let active_completion_mode = thread.completion_mode(); + let burn_mode_enabled = active_completion_mode == CompletionMode::Burn; + let icon = if burn_mode_enabled { + IconName::ZedBurnModeOn + } else { + IconName::ZedBurnMode + }; + + Some( + IconButton::new("burn-mode", icon) + .icon_size(IconSize::Small) + .icon_color(Color::Muted) + .toggle_state(burn_mode_enabled) + .selected_icon_color(Color::Error) + .on_click(cx.listener(|this, _event, window, cx| { + this.toggle_burn_mode(&ToggleBurnMode, window, cx); + })) + .tooltip(move |_window, cx| { + cx.new(|_| BurnModeTooltip::new().selected(burn_mode_enabled)) + .into() + }) + .into_any_element(), + ) + } + fn start_editing_message(&mut self, index: usize, window: &mut Window, cx: &mut Context) { let Some(thread) = self.thread() else { return; @@ -3002,6 +3116,187 @@ impl AcpThreadView { } } +impl AcpThreadView { + fn render_thread_error(&self, window: &mut Window, cx: &mut Context<'_, Self>) -> Option
{ + let content = match self.thread_error.as_ref()? { + ThreadError::Other(error) => self.render_any_thread_error(error.clone(), cx), + ThreadError::PaymentRequired => self.render_payment_required_error(cx), + ThreadError::ModelRequestLimitReached(plan) => { + self.render_model_request_limit_reached_error(*plan, cx) + } + ThreadError::ToolUseLimitReached => { + self.render_tool_use_limit_reached_error(window, cx)? + } + }; + + Some( + div() + .border_t_1() + .border_color(cx.theme().colors().border) + .child(content), + ) + } + + fn render_any_thread_error(&self, error: SharedString, cx: &mut Context<'_, Self>) -> Callout { + let icon = Icon::new(IconName::XCircle) + .size(IconSize::Small) + .color(Color::Error); + + Callout::new() + .icon(icon) + .title("Error") + .description(error.clone()) + .secondary_action(self.create_copy_button(error.to_string())) + .primary_action(self.dismiss_error_button(cx)) + .bg_color(self.error_callout_bg(cx)) + } + + fn render_payment_required_error(&self, cx: &mut Context) -> Callout { + const ERROR_MESSAGE: &str = + "You reached your free usage limit. Upgrade to Zed Pro for more prompts."; + + let icon = Icon::new(IconName::XCircle) + .size(IconSize::Small) + .color(Color::Error); + + Callout::new() + .icon(icon) + .title("Free Usage Exceeded") + .description(ERROR_MESSAGE) + .tertiary_action(self.upgrade_button(cx)) + .secondary_action(self.create_copy_button(ERROR_MESSAGE)) + .primary_action(self.dismiss_error_button(cx)) + .bg_color(self.error_callout_bg(cx)) + } + + fn render_model_request_limit_reached_error( + &self, + plan: cloud_llm_client::Plan, + cx: &mut Context, + ) -> Callout { + let error_message = match plan { + cloud_llm_client::Plan::ZedPro => "Upgrade to usage-based billing for more prompts.", + cloud_llm_client::Plan::ZedProTrial | cloud_llm_client::Plan::ZedFree => { + "Upgrade to Zed Pro for more prompts." + } + }; + + let icon = Icon::new(IconName::XCircle) + .size(IconSize::Small) + .color(Color::Error); + + Callout::new() + .icon(icon) + .title("Model Prompt Limit Reached") + .description(error_message) + .tertiary_action(self.upgrade_button(cx)) + .secondary_action(self.create_copy_button(error_message)) + .primary_action(self.dismiss_error_button(cx)) + .bg_color(self.error_callout_bg(cx)) + } + + fn render_tool_use_limit_reached_error( + &self, + window: &mut Window, + cx: &mut Context, + ) -> Option { + let thread = self.as_native_thread(cx)?; + let supports_burn_mode = thread.read(cx).model().supports_burn_mode(); + + let focus_handle = self.focus_handle(cx); + + let icon = Icon::new(IconName::Info) + .size(IconSize::Small) + .color(Color::Info); + + Some( + Callout::new() + .icon(icon) + .title("Consecutive tool use limit reached.") + .when(supports_burn_mode, |this| { + this.secondary_action( + Button::new("continue-burn-mode", "Continue with Burn Mode") + .style(ButtonStyle::Filled) + .style(ButtonStyle::Tinted(ui::TintColor::Accent)) + .layer(ElevationIndex::ModalSurface) + .label_size(LabelSize::Small) + .key_binding( + KeyBinding::for_action_in( + &ContinueWithBurnMode, + &focus_handle, + window, + cx, + ) + .map(|kb| kb.size(rems_from_px(10.))), + ) + .tooltip(Tooltip::text("Enable Burn Mode for unlimited tool use.")) + .on_click({ + cx.listener(move |this, _, _window, cx| { + thread.update(cx, |thread, _cx| { + thread.set_completion_mode(CompletionMode::Burn); + }); + this.resume_chat(cx); + }) + }), + ) + }) + .primary_action( + Button::new("continue-conversation", "Continue") + .layer(ElevationIndex::ModalSurface) + .label_size(LabelSize::Small) + .key_binding( + KeyBinding::for_action_in(&ContinueThread, &focus_handle, window, cx) + .map(|kb| kb.size(rems_from_px(10.))), + ) + .on_click(cx.listener(|this, _, _window, cx| { + this.resume_chat(cx); + })), + ), + ) + } + + fn create_copy_button(&self, message: impl Into) -> impl IntoElement { + let message = message.into(); + + IconButton::new("copy", IconName::Copy) + .icon_size(IconSize::Small) + .icon_color(Color::Muted) + .tooltip(Tooltip::text("Copy Error Message")) + .on_click(move |_, _, cx| { + cx.write_to_clipboard(ClipboardItem::new_string(message.clone())) + }) + } + + fn dismiss_error_button(&self, cx: &mut Context) -> impl IntoElement { + IconButton::new("dismiss", IconName::Close) + .icon_size(IconSize::Small) + .icon_color(Color::Muted) + .tooltip(Tooltip::text("Dismiss Error")) + .on_click(cx.listener({ + move |this, _, _, cx| { + this.clear_thread_error(cx); + cx.notify(); + } + })) + } + + fn upgrade_button(&self, cx: &mut Context) -> impl IntoElement { + Button::new("upgrade", "Upgrade") + .label_size(LabelSize::Small) + .style(ButtonStyle::Tinted(ui::TintColor::Accent)) + .on_click(cx.listener({ + move |this, _, _, cx| { + this.clear_thread_error(cx); + cx.open_url(&zed_urls::upgrade_to_zed_pro_url(cx)); + } + })) + } + + fn error_callout_bg(&self, cx: &Context) -> Hsla { + cx.theme().status().error.opacity(0.08) + } +} + impl Focusable for AcpThreadView { fn focus_handle(&self, cx: &App) -> FocusHandle { self.message_editor.focus_handle(cx) @@ -3016,6 +3311,7 @@ impl Render for AcpThreadView { .size_full() .key_context("AcpThread") .on_action(cx.listener(Self::open_agent_diff)) + .on_action(cx.listener(Self::toggle_burn_mode)) .bg(cx.theme().colors().panel_background) .child(match &self.thread_state { ThreadState::Unauthenticated { connection } => v_flex() @@ -3100,19 +3396,7 @@ impl Render for AcpThreadView { } _ => this, }) - .when_some(self.last_error.clone(), |el, error| { - el.child( - div() - .p_2() - .text_xs() - .border_t_1() - .border_color(cx.theme().colors().border) - .bg(cx.theme().status().error_background) - .child( - self.render_markdown(error, default_markdown_style(false, window, cx)), - ), - ) - }) + .children(self.render_thread_error(window, cx)) .child(self.render_message_editor(window, cx)) } } @@ -3299,8 +3583,6 @@ fn terminal_command_markdown_style(window: &Window, cx: &App) -> MarkdownStyle { #[cfg(test)] pub(crate) mod tests { - use std::path::Path; - use acp_thread::StubAgentConnection; use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::SessionId; @@ -3310,6 +3592,8 @@ pub(crate) mod tests { use project::Project; use serde_json::json; use settings::SettingsStore; + use std::any::Any; + use std::path::Path; use super::*; @@ -3547,6 +3831,10 @@ pub(crate) mod tests { fn cancel(&self, _session_id: &acp::SessionId, _cx: &mut App) { unimplemented!() } + + fn into_any(self: Rc) -> Rc { + self + } } pub(crate) fn init_test(cx: &mut TestAppContext) { diff --git a/crates/agent_ui/src/agent_ui.rs b/crates/agent_ui/src/agent_ui.rs index 231b9cfb38..4f5f022593 100644 --- a/crates/agent_ui/src/agent_ui.rs +++ b/crates/agent_ui/src/agent_ui.rs @@ -5,7 +5,6 @@ mod agent_diff; mod agent_model_selector; mod agent_panel; mod buffer_codegen; -mod burn_mode_tooltip; mod context_picker; mod context_server_configuration; mod context_strip; diff --git a/crates/agent_ui/src/burn_mode_tooltip.rs b/crates/agent_ui/src/burn_mode_tooltip.rs deleted file mode 100644 index 6354c07760..0000000000 --- a/crates/agent_ui/src/burn_mode_tooltip.rs +++ /dev/null @@ -1,61 +0,0 @@ -use gpui::{Context, FontWeight, IntoElement, Render, Window}; -use ui::{prelude::*, tooltip_container}; - -pub struct BurnModeTooltip { - selected: bool, -} - -impl BurnModeTooltip { - pub fn new() -> Self { - Self { selected: false } - } - - pub fn selected(mut self, selected: bool) -> Self { - self.selected = selected; - self - } -} - -impl Render for BurnModeTooltip { - fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { - let (icon, color) = if self.selected { - (IconName::ZedBurnModeOn, Color::Error) - } else { - (IconName::ZedBurnMode, Color::Default) - }; - - let turned_on = h_flex() - .h_4() - .px_1() - .border_1() - .border_color(cx.theme().colors().border) - .bg(cx.theme().colors().text_accent.opacity(0.1)) - .rounded_sm() - .child( - Label::new("ON") - .size(LabelSize::XSmall) - .weight(FontWeight::SEMIBOLD) - .color(Color::Accent), - ); - - let title = h_flex() - .gap_1p5() - .child(Icon::new(icon).size(IconSize::Small).color(color)) - .child(Label::new("Burn Mode")) - .when(self.selected, |title| title.child(turned_on)); - - tooltip_container(window, cx, |this, _, _| { - this - .child(title) - .child( - div() - .max_w_64() - .child( - Label::new("Enables models to use large context windows, unlimited tool calls, and other capabilities for expanded reasoning.") - .size(LabelSize::Small) - .color(Color::Muted) - ) - ) - }) - } -} diff --git a/crates/agent_ui/src/message_editor.rs b/crates/agent_ui/src/message_editor.rs index 4b6d51c4c1..5d094811f1 100644 --- a/crates/agent_ui/src/message_editor.rs +++ b/crates/agent_ui/src/message_editor.rs @@ -6,7 +6,7 @@ use crate::agent_diff::AgentDiffThread; use crate::agent_model_selector::AgentModelSelector; use crate::tool_compatibility::{IncompatibleToolsState, IncompatibleToolsTooltip}; use crate::ui::{ - MaxModeTooltip, + BurnModeTooltip, preview::{AgentPreview, UsageCallout}, }; use agent::history_store::HistoryStore; @@ -605,7 +605,7 @@ impl MessageEditor { this.toggle_burn_mode(&ToggleBurnMode, window, cx); })) .tooltip(move |_window, cx| { - cx.new(|_| MaxModeTooltip::new().selected(burn_mode_enabled)) + cx.new(|_| BurnModeTooltip::new().selected(burn_mode_enabled)) .into() }) .into_any_element(), diff --git a/crates/agent_ui/src/text_thread_editor.rs b/crates/agent_ui/src/text_thread_editor.rs index 49a37002f7..2e3b4ed890 100644 --- a/crates/agent_ui/src/text_thread_editor.rs +++ b/crates/agent_ui/src/text_thread_editor.rs @@ -1,6 +1,6 @@ use crate::{ - burn_mode_tooltip::BurnModeTooltip, language_model_selector::{LanguageModelSelector, language_model_selector}, + ui::BurnModeTooltip, }; use agent_settings::{AgentSettings, CompletionMode}; use anyhow::Result; diff --git a/crates/agent_ui/src/ui/burn_mode_tooltip.rs b/crates/agent_ui/src/ui/burn_mode_tooltip.rs index 97f7853a61..72faaa614d 100644 --- a/crates/agent_ui/src/ui/burn_mode_tooltip.rs +++ b/crates/agent_ui/src/ui/burn_mode_tooltip.rs @@ -2,11 +2,11 @@ use crate::ToggleBurnMode; use gpui::{Context, FontWeight, IntoElement, Render, Window}; use ui::{KeyBinding, prelude::*, tooltip_container}; -pub struct MaxModeTooltip { +pub struct BurnModeTooltip { selected: bool, } -impl MaxModeTooltip { +impl BurnModeTooltip { pub fn new() -> Self { Self { selected: false } } @@ -17,7 +17,7 @@ impl MaxModeTooltip { } } -impl Render for MaxModeTooltip { +impl Render for BurnModeTooltip { fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { let (icon, color) = if self.selected { (IconName::ZedBurnModeOn, Color::Error) diff --git a/crates/language_model/src/model/cloud_model.rs b/crates/language_model/src/model/cloud_model.rs index 3b4c1fa269..0e10050dae 100644 --- a/crates/language_model/src/model/cloud_model.rs +++ b/crates/language_model/src/model/cloud_model.rs @@ -42,6 +42,18 @@ impl fmt::Display for ModelRequestLimitReachedError { } } +#[derive(Error, Debug)] +pub struct ToolUseLimitReachedError; + +impl fmt::Display for ToolUseLimitReachedError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "Consecutive tool use limit reached. Enable Burn Mode for unlimited tool use." + ) + } +} + #[derive(Clone, Default)] pub struct LlmApiToken(Arc>>); From 708c434bd4c21614a282fc31ae35d3e9414ec2c9 Mon Sep 17 00:00:00 2001 From: Daniel Sauble Date: Fri, 15 Aug 2025 04:43:29 -0700 Subject: [PATCH 64/74] workspace: Highlight where dragged tab will be dropped (#34740) Closes #18565 I could use some advice on the color palette / theming. A couple options: 1. The `drop_target_background` color could be used for the border if we didn't use it for the background of the tab. In VSCode, the background color of tabs doesn't change as you're dragging, there's just a border between tabs. My only concern with this option is that the current `drop_target_background` color is a bit subtle when used for a small area like a border. 2. Another option could be to add a `drop_target_border` theme color, but I don't know how much complexity this adds to implementation (presumably all existing themes would need to be updated?). Demo: https://github.com/user-attachments/assets/0b7c04ea-5ec5-4b45-adad-156dfbf552db Release Notes: - Highlight where a dragged tab will be dropped between two other tabs --------- Co-authored-by: Smit Barmase --- crates/theme/src/default_colors.rs | 2 ++ crates/theme/src/fallback_themes.rs | 1 + crates/theme/src/schema.rs | 8 ++++++++ crates/theme/src/styles/colors.rs | 4 ++++ crates/workspace/src/pane.rs | 15 +++++++++++++-- 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/crates/theme/src/default_colors.rs b/crates/theme/src/default_colors.rs index 1c3f48b548..051b7acf10 100644 --- a/crates/theme/src/default_colors.rs +++ b/crates/theme/src/default_colors.rs @@ -54,6 +54,7 @@ impl ThemeColors { element_disabled: neutral().light_alpha().step_3(), element_selection_background: blue().light().step_3().alpha(0.25), drop_target_background: blue().light_alpha().step_2(), + drop_target_border: neutral().light().step_12(), ghost_element_background: system.transparent, ghost_element_hover: neutral().light_alpha().step_3(), ghost_element_active: neutral().light_alpha().step_4(), @@ -179,6 +180,7 @@ impl ThemeColors { element_disabled: neutral().dark_alpha().step_3(), element_selection_background: blue().dark().step_3().alpha(0.25), drop_target_background: blue().dark_alpha().step_2(), + drop_target_border: neutral().dark().step_12(), ghost_element_background: system.transparent, ghost_element_hover: neutral().dark_alpha().step_4(), ghost_element_active: neutral().dark_alpha().step_5(), diff --git a/crates/theme/src/fallback_themes.rs b/crates/theme/src/fallback_themes.rs index 4d77dd5d81..e9e8e2d0db 100644 --- a/crates/theme/src/fallback_themes.rs +++ b/crates/theme/src/fallback_themes.rs @@ -115,6 +115,7 @@ pub(crate) fn zed_default_dark() -> Theme { element_disabled: SystemColors::default().transparent, element_selection_background: player.local().selection.alpha(0.25), drop_target_background: hsla(220.0 / 360., 8.3 / 100., 21.4 / 100., 1.0), + drop_target_border: hsla(221. / 360., 11. / 100., 86. / 100., 1.0), ghost_element_background: SystemColors::default().transparent, ghost_element_hover: hover, ghost_element_active: hsla(220.0 / 360., 11.8 / 100., 20.0 / 100., 1.0), diff --git a/crates/theme/src/schema.rs b/crates/theme/src/schema.rs index bfa2adcedf..425fedbc71 100644 --- a/crates/theme/src/schema.rs +++ b/crates/theme/src/schema.rs @@ -225,6 +225,10 @@ pub struct ThemeColorsContent { #[serde(rename = "drop_target.background")] pub drop_target_background: Option, + /// Border Color. Used for the border that shows where a dragged element will be dropped. + #[serde(rename = "drop_target.border")] + pub drop_target_border: Option, + /// Used for the background of a ghost element that should have the same background as the surface it's on. /// /// Elements might include: Buttons, Inputs, Checkboxes, Radio Buttons... @@ -747,6 +751,10 @@ impl ThemeColorsContent { .drop_target_background .as_ref() .and_then(|color| try_parse_color(color).ok()), + drop_target_border: self + .drop_target_border + .as_ref() + .and_then(|color| try_parse_color(color).ok()), ghost_element_background: self .ghost_element_background .as_ref() diff --git a/crates/theme/src/styles/colors.rs b/crates/theme/src/styles/colors.rs index aab11803f4..198ad97adb 100644 --- a/crates/theme/src/styles/colors.rs +++ b/crates/theme/src/styles/colors.rs @@ -59,6 +59,8 @@ pub struct ThemeColors { pub element_disabled: Hsla, /// Background Color. Used for the area that shows where a dragged element will be dropped. pub drop_target_background: Hsla, + /// Border Color. Used for the border that shows where a dragged element will be dropped. + pub drop_target_border: Hsla, /// Used for the background of a ghost element that should have the same background as the surface it's on. /// /// Elements might include: Buttons, Inputs, Checkboxes, Radio Buttons... @@ -304,6 +306,7 @@ pub enum ThemeColorField { ElementSelected, ElementDisabled, DropTargetBackground, + DropTargetBorder, GhostElementBackground, GhostElementHover, GhostElementActive, @@ -418,6 +421,7 @@ impl ThemeColors { ThemeColorField::ElementSelected => self.element_selected, ThemeColorField::ElementDisabled => self.element_disabled, ThemeColorField::DropTargetBackground => self.drop_target_background, + ThemeColorField::DropTargetBorder => self.drop_target_border, ThemeColorField::GhostElementBackground => self.ghost_element_background, ThemeColorField::GhostElementHover => self.ghost_element_hover, ThemeColorField::GhostElementActive => self.ghost_element_active, diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index cffeea0a8d..45bd497705 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -2478,8 +2478,19 @@ impl Pane { }, |tab, _, _, cx| cx.new(|_| tab.clone()), ) - .drag_over::(|tab, _, _, cx| { - tab.bg(cx.theme().colors().drop_target_background) + .drag_over::(move |tab, dragged_tab: &DraggedTab, _, cx| { + let mut styled_tab = tab + .bg(cx.theme().colors().drop_target_background) + .border_color(cx.theme().colors().drop_target_border) + .border_0(); + + if ix < dragged_tab.ix { + styled_tab = styled_tab.border_l_2(); + } else if ix > dragged_tab.ix { + styled_tab = styled_tab.border_r_2(); + } + + styled_tab }) .drag_over::(|tab, _, _, cx| { tab.bg(cx.theme().colors().drop_target_background) From 846ed6adf91fc63f585c921da0101802b031c855 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 15 Aug 2025 14:54:05 +0200 Subject: [PATCH 65/74] search: Fix project search not rendering matches count (#36238) Follow up to https://github.com/zed-industries/zed/pull/36103/ Release Notes: - N/A --- crates/search/src/project_search.rs | 89 +++++++++++++++-------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 6b9777906a..b791f748ad 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1975,49 +1975,6 @@ impl Render for ProjectSearchBar { ), ); - let mode_column = h_flex() - .gap_1() - .min_w_64() - .child( - IconButton::new("project-search-filter-button", IconName::Filter) - .shape(IconButtonShape::Square) - .tooltip(|window, cx| { - Tooltip::for_action("Toggle Filters", &ToggleFilters, window, cx) - }) - .on_click(cx.listener(|this, _, window, cx| { - this.toggle_filters(window, cx); - })) - .toggle_state( - self.active_project_search - .as_ref() - .map(|search| search.read(cx).filters_enabled) - .unwrap_or_default(), - ) - .tooltip({ - let focus_handle = focus_handle.clone(); - move |window, cx| { - Tooltip::for_action_in( - "Toggle Filters", - &ToggleFilters, - &focus_handle, - window, - cx, - ) - } - }), - ) - .child(render_action_button( - "project-search", - IconName::Replace, - self.active_project_search - .as_ref() - .map(|search| search.read(cx).replace_enabled) - .unwrap_or_default(), - "Toggle Replace", - &ToggleReplace, - focus_handle.clone(), - )); - let query_focus = search.query_editor.focus_handle(cx); let matches_column = h_flex() @@ -2060,11 +2017,55 @@ impl Render for ProjectSearchBar { }), ); + let mode_column = h_flex() + .gap_1() + .min_w_64() + .child( + IconButton::new("project-search-filter-button", IconName::Filter) + .shape(IconButtonShape::Square) + .tooltip(|window, cx| { + Tooltip::for_action("Toggle Filters", &ToggleFilters, window, cx) + }) + .on_click(cx.listener(|this, _, window, cx| { + this.toggle_filters(window, cx); + })) + .toggle_state( + self.active_project_search + .as_ref() + .map(|search| search.read(cx).filters_enabled) + .unwrap_or_default(), + ) + .tooltip({ + let focus_handle = focus_handle.clone(); + move |window, cx| { + Tooltip::for_action_in( + "Toggle Filters", + &ToggleFilters, + &focus_handle, + window, + cx, + ) + } + }), + ) + .child(render_action_button( + "project-search", + IconName::Replace, + self.active_project_search + .as_ref() + .map(|search| search.read(cx).replace_enabled) + .unwrap_or_default(), + "Toggle Replace", + &ToggleReplace, + focus_handle.clone(), + )) + .child(matches_column); + let search_line = h_flex() .w_full() .gap_2() .child(query_column) - .child(h_flex().min_w_64().child(mode_column).child(matches_column)); + .child(mode_column); let replace_line = search.replace_enabled.then(|| { let replace_column = input_base_styles(InputPanel::Replacement) From f63036548c2229a4dfe1cd7576bf6cee5cd3f1ca Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 15 Aug 2025 15:17:56 +0200 Subject: [PATCH 66/74] agent2: Implement prompt caching (#36236) Release Notes: - N/A --- crates/agent2/src/tests/mod.rs | 135 ++++++++++++++++++++++++++++++++- crates/agent2/src/thread.rs | 8 ++ 2 files changed, 140 insertions(+), 3 deletions(-) diff --git a/crates/agent2/src/tests/mod.rs b/crates/agent2/src/tests/mod.rs index cf90c8f650..cc8bd483bb 100644 --- a/crates/agent2/src/tests/mod.rs +++ b/crates/agent2/src/tests/mod.rs @@ -16,6 +16,7 @@ use language_model::{ LanguageModelRequestMessage, LanguageModelToolResult, LanguageModelToolUse, MessageContent, Role, StopReason, fake_provider::FakeLanguageModel, }; +use pretty_assertions::assert_eq; use project::Project; use prompt_store::ProjectContext; use reqwest_client::ReqwestClient; @@ -129,6 +130,134 @@ async fn test_system_prompt(cx: &mut TestAppContext) { ); } +#[gpui::test] +async fn test_prompt_caching(cx: &mut TestAppContext) { + let ThreadTest { model, thread, .. } = setup(cx, TestModel::Fake).await; + let fake_model = model.as_fake(); + + // Send initial user message and verify it's cached + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Message 1"], cx) + }); + cx.run_until_parked(); + + let completion = fake_model.pending_completions().pop().unwrap(); + assert_eq!( + completion.messages[1..], + vec![LanguageModelRequestMessage { + role: Role::User, + content: vec!["Message 1".into()], + cache: true + }] + ); + fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::Text( + "Response to Message 1".into(), + )); + fake_model.end_last_completion_stream(); + cx.run_until_parked(); + + // Send another user message and verify only the latest is cached + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Message 2"], cx) + }); + cx.run_until_parked(); + + let completion = fake_model.pending_completions().pop().unwrap(); + assert_eq!( + completion.messages[1..], + vec![ + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Message 1".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec!["Response to Message 1".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Message 2".into()], + cache: true + } + ] + ); + fake_model.send_last_completion_stream_event(LanguageModelCompletionEvent::Text( + "Response to Message 2".into(), + )); + fake_model.end_last_completion_stream(); + cx.run_until_parked(); + + // Simulate a tool call and verify that the latest tool result is cached + thread.update(cx, |thread, _| thread.add_tool(EchoTool)); + thread.update(cx, |thread, cx| { + thread.send(UserMessageId::new(), ["Use the echo tool"], cx) + }); + cx.run_until_parked(); + + let tool_use = LanguageModelToolUse { + id: "tool_1".into(), + name: EchoTool.name().into(), + raw_input: json!({"text": "test"}).to_string(), + input: json!({"text": "test"}), + is_input_complete: true, + }; + fake_model + .send_last_completion_stream_event(LanguageModelCompletionEvent::ToolUse(tool_use.clone())); + fake_model.end_last_completion_stream(); + cx.run_until_parked(); + + let completion = fake_model.pending_completions().pop().unwrap(); + let tool_result = LanguageModelToolResult { + tool_use_id: "tool_1".into(), + tool_name: EchoTool.name().into(), + is_error: false, + content: "test".into(), + output: Some("test".into()), + }; + assert_eq!( + completion.messages[1..], + vec![ + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Message 1".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec!["Response to Message 1".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Message 2".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec!["Response to Message 2".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec!["Use the echo tool".into()], + cache: false + }, + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec![MessageContent::ToolUse(tool_use)], + cache: false + }, + LanguageModelRequestMessage { + role: Role::User, + content: vec![MessageContent::ToolResult(tool_result)], + cache: true + } + ] + ); +} + #[gpui::test] #[ignore = "can't run on CI yet"] async fn test_basic_tool_calls(cx: &mut TestAppContext) { @@ -440,7 +569,7 @@ async fn test_resume_after_tool_use_limit(cx: &mut TestAppContext) { LanguageModelRequestMessage { role: Role::User, content: vec![MessageContent::ToolResult(tool_result.clone())], - cache: false + cache: true }, ] ); @@ -481,7 +610,7 @@ async fn test_resume_after_tool_use_limit(cx: &mut TestAppContext) { LanguageModelRequestMessage { role: Role::User, content: vec!["Continue where you left off".into()], - cache: false + cache: true } ] ); @@ -574,7 +703,7 @@ async fn test_send_after_tool_use_limit(cx: &mut TestAppContext) { LanguageModelRequestMessage { role: Role::User, content: vec!["ghi".into()], - cache: false + cache: true } ] ); diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 231ee92dda..2fe2dc20bb 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -1041,6 +1041,14 @@ impl Thread { messages.extend(message.to_request()); } + if let Some(last_user_message) = messages + .iter_mut() + .rev() + .find(|message| message.role == Role::User) + { + last_user_message.cache = true; + } + messages } From 91e6b382852fde4e880bc4aba7a15f7bb08c11aa Mon Sep 17 00:00:00 2001 From: Agus Zubiaga Date: Fri, 15 Aug 2025 10:58:57 -0300 Subject: [PATCH 67/74] Log agent servers stderr (#36243) Release Notes: - N/A --- crates/agent_servers/src/acp/v1.rs | 21 ++++++++++++++++++--- crates/agent_servers/src/claude.rs | 21 +++++++++++++++++---- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/crates/agent_servers/src/acp/v1.rs b/crates/agent_servers/src/acp/v1.rs index 36511e4644..6cf9801d06 100644 --- a/crates/agent_servers/src/acp/v1.rs +++ b/crates/agent_servers/src/acp/v1.rs @@ -1,7 +1,9 @@ use agent_client_protocol::{self as acp, Agent as _}; use anyhow::anyhow; use collections::HashMap; +use futures::AsyncBufReadExt as _; use futures::channel::oneshot; +use futures::io::BufReader; use project::Project; use std::path::Path; use std::rc::Rc; @@ -40,12 +42,13 @@ impl AcpConnection { .current_dir(root_dir) .stdin(std::process::Stdio::piped()) .stdout(std::process::Stdio::piped()) - .stderr(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::piped()) .kill_on_drop(true) .spawn()?; - let stdout = child.stdout.take().expect("Failed to take stdout"); - let stdin = child.stdin.take().expect("Failed to take stdin"); + let stdout = child.stdout.take().context("Failed to take stdout")?; + let stdin = child.stdin.take().context("Failed to take stdin")?; + let stderr = child.stderr.take().context("Failed to take stderr")?; log::trace!("Spawned (pid: {})", child.id()); let sessions = Rc::new(RefCell::new(HashMap::default())); @@ -63,6 +66,18 @@ impl AcpConnection { let io_task = cx.background_spawn(io_task); + cx.background_spawn(async move { + let mut stderr = BufReader::new(stderr); + let mut line = String::new(); + while let Ok(n) = stderr.read_line(&mut line).await + && n > 0 + { + log::warn!("agent stderr: {}", &line); + line.clear(); + } + }) + .detach(); + cx.spawn({ let sessions = sessions.clone(); async move |cx| { diff --git a/crates/agent_servers/src/claude.rs b/crates/agent_servers/src/claude.rs index e1cc709289..14a179ba3d 100644 --- a/crates/agent_servers/src/claude.rs +++ b/crates/agent_servers/src/claude.rs @@ -14,7 +14,7 @@ use std::rc::Rc; use uuid::Uuid; use agent_client_protocol as acp; -use anyhow::{Result, anyhow}; +use anyhow::{Context as _, Result, anyhow}; use futures::channel::oneshot; use futures::{AsyncBufReadExt, AsyncWriteExt}; use futures::{ @@ -130,12 +130,25 @@ impl AgentConnection for ClaudeAgentConnection { &cwd, )?; - let stdin = child.stdin.take().unwrap(); - let stdout = child.stdout.take().unwrap(); + let stdout = child.stdout.take().context("Failed to take stdout")?; + let stdin = child.stdin.take().context("Failed to take stdin")?; + let stderr = child.stderr.take().context("Failed to take stderr")?; let pid = child.id(); log::trace!("Spawned (pid: {})", pid); + cx.background_spawn(async move { + let mut stderr = BufReader::new(stderr); + let mut line = String::new(); + while let Ok(n) = stderr.read_line(&mut line).await + && n > 0 + { + log::warn!("agent stderr: {}", &line); + line.clear(); + } + }) + .detach(); + cx.background_spawn(async move { let mut outgoing_rx = Some(outgoing_rx); @@ -345,7 +358,7 @@ fn spawn_claude( .current_dir(root_dir) .stdin(std::process::Stdio::piped()) .stdout(std::process::Stdio::piped()) - .stderr(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::piped()) .kill_on_drop(true) .spawn()?; From 10a2426a58e913e2715eb5eab760d40385c839f2 Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 15 Aug 2025 16:06:56 +0200 Subject: [PATCH 68/74] agent2: Port profile selector (#36244) Release Notes: - N/A --- crates/agent2/src/thread.rs | 4 ++ crates/agent_ui/src/acp/thread_view.rs | 42 ++++++++++++++++++++- crates/agent_ui/src/message_editor.rs | 27 +++++++++++-- crates/agent_ui/src/profile_selector.rs | 50 ++++++++++++------------- 4 files changed, 91 insertions(+), 32 deletions(-) diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 2fe2dc20bb..3f152c79cd 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -499,6 +499,10 @@ impl Thread { self.tools.remove(name).is_some() } + pub fn profile(&self) -> &AgentProfileId { + &self.profile_id + } + pub fn set_profile(&mut self, profile_id: AgentProfileId) { self.profile_id = profile_id; } diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 87af75f046..cb1a62fd11 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -7,7 +7,7 @@ use action_log::ActionLog; use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::{self as acp}; use agent_servers::AgentServer; -use agent_settings::{AgentSettings, CompletionMode, NotifyWhenAgentWaiting}; +use agent_settings::{AgentProfileId, AgentSettings, CompletionMode, NotifyWhenAgentWaiting}; use anyhow::bail; use audio::{Audio, Sound}; use buffer_diff::BufferDiff; @@ -16,6 +16,7 @@ use collections::{HashMap, HashSet}; use editor::scroll::Autoscroll; use editor::{Editor, EditorMode, MultiBuffer, PathKey, SelectionEffects}; use file_icons::FileIcons; +use fs::Fs; use gpui::{ Action, Animation, AnimationExt, App, BorderStyle, ClickEvent, ClipboardItem, EdgesRefinement, Empty, Entity, FocusHandle, Focusable, Hsla, Length, ListOffset, ListState, MouseButton, @@ -29,6 +30,7 @@ use project::Project; use prompt_store::PromptId; use rope::Point; use settings::{Settings as _, SettingsStore}; +use std::sync::Arc; use std::{collections::BTreeMap, process::ExitStatus, rc::Rc, time::Duration}; use text::Anchor; use theme::ThemeSettings; @@ -45,10 +47,11 @@ use super::entry_view_state::EntryViewState; use crate::acp::AcpModelSelectorPopover; use crate::acp::message_editor::{MessageEditor, MessageEditorEvent}; use crate::agent_diff::AgentDiff; +use crate::profile_selector::{ProfileProvider, ProfileSelector}; use crate::ui::{AgentNotification, AgentNotificationEvent, BurnModeTooltip}; use crate::{ AgentDiffPane, AgentPanel, ContinueThread, ContinueWithBurnMode, ExpandMessageEditor, Follow, - KeepAll, OpenAgentDiff, RejectAll, ToggleBurnMode, + KeepAll, OpenAgentDiff, RejectAll, ToggleBurnMode, ToggleProfileSelector, }; const RESPONSE_PADDING_X: Pixels = px(19.); @@ -78,6 +81,22 @@ impl ThreadError { } } +impl ProfileProvider for Entity { + fn profile_id(&self, cx: &App) -> AgentProfileId { + self.read(cx).profile().clone() + } + + fn set_profile(&self, profile_id: AgentProfileId, cx: &mut App) { + self.update(cx, |thread, _cx| { + thread.set_profile(profile_id); + }); + } + + fn profiles_supported(&self, cx: &App) -> bool { + self.read(cx).model().supports_tools() + } +} + pub struct AcpThreadView { agent: Rc, workspace: WeakEntity, @@ -88,6 +107,7 @@ pub struct AcpThreadView { entry_view_state: EntryViewState, message_editor: Entity, model_selector: Option>, + profile_selector: Option>, notifications: Vec>, notification_subscriptions: HashMap, Vec>, thread_error: Option, @@ -170,6 +190,7 @@ impl AcpThreadView { thread_state: Self::initial_state(agent, workspace, project, window, cx), message_editor, model_selector: None, + profile_selector: None, notifications: Vec::new(), notification_subscriptions: HashMap::default(), entry_view_state: EntryViewState::default(), @@ -297,6 +318,17 @@ impl AcpThreadView { _subscription: [thread_subscription, action_log_subscription], }; + this.profile_selector = this.as_native_thread(cx).map(|thread| { + cx.new(|cx| { + ProfileSelector::new( + ::global(cx), + Arc::new(thread.clone()), + this.focus_handle(cx), + cx, + ) + }) + }); + cx.notify(); } Err(err) => { @@ -2315,6 +2347,11 @@ impl AcpThreadView { v_flex() .on_action(cx.listener(Self::expand_message_editor)) + .on_action(cx.listener(|this, _: &ToggleProfileSelector, window, cx| { + if let Some(profile_selector) = this.profile_selector.as_ref() { + profile_selector.read(cx).menu_handle().toggle(window, cx); + } + })) .on_action(cx.listener(|this, _: &ToggleModelSelector, window, cx| { if let Some(model_selector) = this.model_selector.as_ref() { model_selector @@ -2378,6 +2415,7 @@ impl AcpThreadView { .child( h_flex() .gap_1() + .children(self.profile_selector.clone()) .children(self.model_selector.clone()) .child(self.render_send_button(cx)), ), diff --git a/crates/agent_ui/src/message_editor.rs b/crates/agent_ui/src/message_editor.rs index 5d094811f1..127e9256be 100644 --- a/crates/agent_ui/src/message_editor.rs +++ b/crates/agent_ui/src/message_editor.rs @@ -14,7 +14,7 @@ use agent::{ context::{AgentContextKey, ContextLoadResult, load_context}, context_store::ContextStoreEvent, }; -use agent_settings::{AgentSettings, CompletionMode}; +use agent_settings::{AgentProfileId, AgentSettings, CompletionMode}; use ai_onboarding::ApiKeysWithProviders; use buffer_diff::BufferDiff; use cloud_llm_client::CompletionIntent; @@ -55,7 +55,7 @@ use zed_actions::agent::ToggleModelSelector; use crate::context_picker::{ContextPicker, ContextPickerCompletionProvider, crease_for_mention}; use crate::context_strip::{ContextStrip, ContextStripEvent, SuggestContextKind}; -use crate::profile_selector::ProfileSelector; +use crate::profile_selector::{ProfileProvider, ProfileSelector}; use crate::{ ActiveThread, AgentDiffPane, ChatWithFollow, ExpandMessageEditor, Follow, KeepAll, ModelUsageContext, NewThread, OpenAgentDiff, RejectAll, RemoveAllContext, ToggleBurnMode, @@ -152,6 +152,24 @@ pub(crate) fn create_editor( editor } +impl ProfileProvider for Entity { + fn profiles_supported(&self, cx: &App) -> bool { + self.read(cx) + .configured_model() + .map_or(false, |model| model.model.supports_tools()) + } + + fn profile_id(&self, cx: &App) -> AgentProfileId { + self.read(cx).profile().id().clone() + } + + fn set_profile(&self, profile_id: AgentProfileId, cx: &mut App) { + self.update(cx, |this, cx| { + this.set_profile(profile_id, cx); + }); + } +} + impl MessageEditor { pub fn new( fs: Arc, @@ -221,8 +239,9 @@ impl MessageEditor { ) }); - let profile_selector = - cx.new(|cx| ProfileSelector::new(fs, thread.clone(), editor.focus_handle(cx), cx)); + let profile_selector = cx.new(|cx| { + ProfileSelector::new(fs, Arc::new(thread.clone()), editor.focus_handle(cx), cx) + }); Self { editor: editor.clone(), diff --git a/crates/agent_ui/src/profile_selector.rs b/crates/agent_ui/src/profile_selector.rs index ddcb44d46b..27ca69590f 100644 --- a/crates/agent_ui/src/profile_selector.rs +++ b/crates/agent_ui/src/profile_selector.rs @@ -1,12 +1,8 @@ use crate::{ManageProfiles, ToggleProfileSelector}; -use agent::{ - Thread, - agent_profile::{AgentProfile, AvailableProfiles}, -}; +use agent::agent_profile::{AgentProfile, AvailableProfiles}; use agent_settings::{AgentDockPosition, AgentProfileId, AgentSettings, builtin_profiles}; use fs::Fs; -use gpui::{Action, Empty, Entity, FocusHandle, Subscription, prelude::*}; -use language_model::LanguageModelRegistry; +use gpui::{Action, Entity, FocusHandle, Subscription, prelude::*}; use settings::{Settings as _, SettingsStore, update_settings_file}; use std::sync::Arc; use ui::{ @@ -14,10 +10,22 @@ use ui::{ prelude::*, }; +/// Trait for types that can provide and manage agent profiles +pub trait ProfileProvider { + /// Get the current profile ID + fn profile_id(&self, cx: &App) -> AgentProfileId; + + /// Set the profile ID + fn set_profile(&self, profile_id: AgentProfileId, cx: &mut App); + + /// Check if profiles are supported in the current context (e.g. if the model that is selected has tool support) + fn profiles_supported(&self, cx: &App) -> bool; +} + pub struct ProfileSelector { profiles: AvailableProfiles, fs: Arc, - thread: Entity, + provider: Arc, menu_handle: PopoverMenuHandle, focus_handle: FocusHandle, _subscriptions: Vec, @@ -26,7 +34,7 @@ pub struct ProfileSelector { impl ProfileSelector { pub fn new( fs: Arc, - thread: Entity, + provider: Arc, focus_handle: FocusHandle, cx: &mut Context, ) -> Self { @@ -37,7 +45,7 @@ impl ProfileSelector { Self { profiles: AgentProfile::available_profiles(cx), fs, - thread, + provider, menu_handle: PopoverMenuHandle::default(), focus_handle, _subscriptions: vec![settings_subscription], @@ -113,10 +121,10 @@ impl ProfileSelector { builtin_profiles::MINIMAL => Some("Chat about anything with no tools."), _ => None, }; - let thread_profile_id = self.thread.read(cx).profile().id(); + let thread_profile_id = self.provider.profile_id(cx); let entry = ContextMenuEntry::new(profile_name.clone()) - .toggleable(IconPosition::End, &profile_id == thread_profile_id); + .toggleable(IconPosition::End, profile_id == thread_profile_id); let entry = if let Some(doc_text) = documentation { entry.documentation_aside(documentation_side(settings.dock), move |_| { @@ -128,7 +136,7 @@ impl ProfileSelector { entry.handler({ let fs = self.fs.clone(); - let thread = self.thread.clone(); + let provider = self.provider.clone(); let profile_id = profile_id.clone(); move |_window, cx| { update_settings_file::(fs.clone(), cx, { @@ -138,9 +146,7 @@ impl ProfileSelector { } }); - thread.update(cx, |this, cx| { - this.set_profile(profile_id.clone(), cx); - }); + provider.set_profile(profile_id.clone(), cx); } }) } @@ -149,22 +155,14 @@ impl ProfileSelector { impl Render for ProfileSelector { fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement { let settings = AgentSettings::get_global(cx); - let profile_id = self.thread.read(cx).profile().id(); - let profile = settings.profiles.get(profile_id); + let profile_id = self.provider.profile_id(cx); + let profile = settings.profiles.get(&profile_id); let selected_profile = profile .map(|profile| profile.name.clone()) .unwrap_or_else(|| "Unknown".into()); - let configured_model = self.thread.read(cx).configured_model().or_else(|| { - let model_registry = LanguageModelRegistry::read_global(cx); - model_registry.default_model() - }); - let Some(configured_model) = configured_model else { - return Empty.into_any_element(); - }; - - if configured_model.model.supports_tools() { + if self.provider.profiles_supported(cx) { let this = cx.entity().clone(); let focus_handle = self.focus_handle.clone(); let trigger_button = Button::new("profile-selector-model", selected_profile) From 1e41d86b31b2225173c201cc00770bd485e044ce Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 15 Aug 2025 16:23:55 +0200 Subject: [PATCH 69/74] agent2: Set thread_id, prompt_id, temperature on request (#36246) Release Notes: - N/A --- crates/agent2/src/thread.rs | 57 +++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 3f152c79cd..cfd67f4b05 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -28,6 +28,48 @@ use smol::stream::StreamExt; use std::{cell::RefCell, collections::BTreeMap, path::Path, rc::Rc, sync::Arc}; use std::{fmt::Write, ops::Range}; use util::{ResultExt, markdown::MarkdownCodeBlock}; +use uuid::Uuid; + +#[derive( + Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Serialize, Deserialize, JsonSchema, +)] +pub struct ThreadId(Arc); + +impl ThreadId { + pub fn new() -> Self { + Self(Uuid::new_v4().to_string().into()) + } +} + +impl std::fmt::Display for ThreadId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +impl From<&str> for ThreadId { + fn from(value: &str) -> Self { + Self(value.into()) + } +} + +/// The ID of the user prompt that initiated a request. +/// +/// This equates to the user physically submitting a message to the model (e.g., by pressing the Enter key). +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Serialize, Deserialize)] +pub struct PromptId(Arc); + +impl PromptId { + pub fn new() -> Self { + Self(Uuid::new_v4().to_string().into()) + } +} + +impl std::fmt::Display for PromptId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} #[derive(Debug, Clone, PartialEq, Eq)] pub enum Message { @@ -412,6 +454,8 @@ pub struct ToolCallAuthorization { } pub struct Thread { + id: ThreadId, + prompt_id: PromptId, messages: Vec, completion_mode: CompletionMode, /// Holds the task that handles agent interaction until the end of the turn. @@ -442,6 +486,8 @@ impl Thread { ) -> Self { let profile_id = AgentSettings::get_global(cx).default_profile.clone(); Self { + id: ThreadId::new(), + prompt_id: PromptId::new(), messages: Vec::new(), completion_mode: CompletionMode::Normal, running_turn: None, @@ -553,6 +599,7 @@ impl Thread { T: Into, { log::info!("Thread::send called with model: {:?}", self.model.name()); + self.advance_prompt_id(); let content = content.into_iter().map(Into::into).collect::>(); log::debug!("Thread::send content: {:?}", content); @@ -976,15 +1023,15 @@ impl Thread { log::info!("Request includes {} tools", tools.len()); let request = LanguageModelRequest { - thread_id: None, - prompt_id: None, + thread_id: Some(self.id.to_string()), + prompt_id: Some(self.prompt_id.to_string()), intent: Some(completion_intent), mode: Some(self.completion_mode.into()), messages, tools, tool_choice: None, stop: Vec::new(), - temperature: None, + temperature: AgentSettings::temperature_for_model(self.model(), cx), thinking_allowed: true, }; @@ -1072,6 +1119,10 @@ impl Thread { markdown } + + fn advance_prompt_id(&mut self) { + self.prompt_id = PromptId::new(); + } } pub trait AgentTool From 485802b9e5226cb00c14bf9d94211cabfd42a51b Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 15 Aug 2025 10:46:06 -0400 Subject: [PATCH 70/74] collab: Remove endpoints for issuing notifications from Cloud (#36249) This PR removes the `POST /users/:id/refresh_llm_tokens` and `POST /users/:id/update_plan` endpoints from Collab. These endpoints were added to be called by Cloud in order to push down notifications over the Collab RPC connection. Cloud now sends down notifications to clients directly, so we no longer need these endpoints. All calls to these endpoints have already been removed in production. Release Notes: - N/A --- crates/collab/src/api.rs | 92 ---------------------------------------- crates/collab/src/rpc.rs | 47 -------------------- 2 files changed, 139 deletions(-) diff --git a/crates/collab/src/api.rs b/crates/collab/src/api.rs index 6cf3f68f54..078a4469ae 100644 --- a/crates/collab/src/api.rs +++ b/crates/collab/src/api.rs @@ -11,9 +11,7 @@ use crate::{ db::{User, UserId}, rpc, }; -use ::rpc::proto; use anyhow::Context as _; -use axum::extract; use axum::{ Extension, Json, Router, body::Body, @@ -25,7 +23,6 @@ use axum::{ routing::{get, post}, }; use axum_extra::response::ErasedJson; -use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use std::sync::{Arc, OnceLock}; use tower::ServiceBuilder; @@ -102,8 +99,6 @@ pub fn routes(rpc_server: Arc) -> Router<(), Body> { Router::new() .route("/users/look_up", get(look_up_user)) .route("/users/:id/access_tokens", post(create_access_token)) - .route("/users/:id/refresh_llm_tokens", post(refresh_llm_tokens)) - .route("/users/:id/update_plan", post(update_plan)) .route("/rpc_server_snapshot", get(get_rpc_server_snapshot)) .merge(contributors::router()) .layer( @@ -295,90 +290,3 @@ async fn create_access_token( encrypted_access_token, })) } - -#[derive(Serialize)] -struct RefreshLlmTokensResponse {} - -async fn refresh_llm_tokens( - Path(user_id): Path, - Extension(rpc_server): Extension>, -) -> Result> { - rpc_server.refresh_llm_tokens_for_user(user_id).await; - - Ok(Json(RefreshLlmTokensResponse {})) -} - -#[derive(Debug, Serialize, Deserialize)] -struct UpdatePlanBody { - pub plan: cloud_llm_client::Plan, - pub subscription_period: SubscriptionPeriod, - pub usage: cloud_llm_client::CurrentUsage, - pub trial_started_at: Option>, - pub is_usage_based_billing_enabled: bool, - pub is_account_too_young: bool, - pub has_overdue_invoices: bool, -} - -#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)] -struct SubscriptionPeriod { - pub started_at: DateTime, - pub ended_at: DateTime, -} - -#[derive(Serialize)] -struct UpdatePlanResponse {} - -async fn update_plan( - Path(user_id): Path, - Extension(rpc_server): Extension>, - extract::Json(body): extract::Json, -) -> Result> { - let plan = match body.plan { - cloud_llm_client::Plan::ZedFree => proto::Plan::Free, - cloud_llm_client::Plan::ZedPro => proto::Plan::ZedPro, - cloud_llm_client::Plan::ZedProTrial => proto::Plan::ZedProTrial, - }; - - let update_user_plan = proto::UpdateUserPlan { - plan: plan.into(), - trial_started_at: body - .trial_started_at - .map(|trial_started_at| trial_started_at.timestamp() as u64), - is_usage_based_billing_enabled: Some(body.is_usage_based_billing_enabled), - usage: Some(proto::SubscriptionUsage { - model_requests_usage_amount: body.usage.model_requests.used, - model_requests_usage_limit: Some(usage_limit_to_proto(body.usage.model_requests.limit)), - edit_predictions_usage_amount: body.usage.edit_predictions.used, - edit_predictions_usage_limit: Some(usage_limit_to_proto( - body.usage.edit_predictions.limit, - )), - }), - subscription_period: Some(proto::SubscriptionPeriod { - started_at: body.subscription_period.started_at.timestamp() as u64, - ended_at: body.subscription_period.ended_at.timestamp() as u64, - }), - account_too_young: Some(body.is_account_too_young), - has_overdue_invoices: Some(body.has_overdue_invoices), - }; - - rpc_server - .update_plan_for_user(user_id, update_user_plan) - .await?; - - Ok(Json(UpdatePlanResponse {})) -} - -fn usage_limit_to_proto(limit: cloud_llm_client::UsageLimit) -> proto::UsageLimit { - proto::UsageLimit { - variant: Some(match limit { - cloud_llm_client::UsageLimit::Limited(limit) => { - proto::usage_limit::Variant::Limited(proto::usage_limit::Limited { - limit: limit as u32, - }) - } - cloud_llm_client::UsageLimit::Unlimited => { - proto::usage_limit::Variant::Unlimited(proto::usage_limit::Unlimited {}) - } - }), - } -} diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 18eb1457dc..584970a4c6 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -1081,53 +1081,6 @@ impl Server { Ok(()) } - pub async fn update_plan_for_user( - self: &Arc, - user_id: UserId, - update_user_plan: proto::UpdateUserPlan, - ) -> Result<()> { - let pool = self.connection_pool.lock(); - for connection_id in pool.user_connection_ids(user_id) { - self.peer - .send(connection_id, update_user_plan.clone()) - .trace_err(); - } - - Ok(()) - } - - /// This is the legacy way of updating the user's plan, where we fetch the data to construct the `UpdateUserPlan` - /// message on the Collab server. - /// - /// The new way is to receive the data from Cloud via the `POST /users/:id/update_plan` endpoint. - pub async fn update_plan_for_user_legacy(self: &Arc, user_id: UserId) -> Result<()> { - let user = self - .app_state - .db - .get_user_by_id(user_id) - .await? - .context("user not found")?; - - let update_user_plan = make_update_user_plan_message( - &user, - user.admin, - &self.app_state.db, - self.app_state.llm_db.clone(), - ) - .await?; - - self.update_plan_for_user(user_id, update_user_plan).await - } - - pub async fn refresh_llm_tokens_for_user(self: &Arc, user_id: UserId) { - let pool = self.connection_pool.lock(); - for connection_id in pool.user_connection_ids(user_id) { - self.peer - .send(connection_id, proto::RefreshLlmToken {}) - .trace_err(); - } - } - pub async fn snapshot(self: &Arc) -> ServerSnapshot<'_> { ServerSnapshot { connection_pool: ConnectionPoolGuard { From 7993ee9c07a56e61ead665ca95343c038ea2765a Mon Sep 17 00:00:00 2001 From: Igal Tabachnik Date: Fri, 15 Aug 2025 18:26:38 +0300 Subject: [PATCH 71/74] Suggest unsaved buffer content text as the default filename (#35707) Closes #24672 This PR complements a feature added earlier by @JosephTLyons (in https://github.com/zed-industries/zed/pull/32353) where the text is considered as the tab title in a new buffer. It piggybacks off that change and sets the title as the suggested filename in the save dialog (completely mirroring the same functionality in VSCode): ![2025-08-05 11 50 28](https://github.com/user-attachments/assets/49ad9e4a-5559-44b0-a4b0-ae19890e478e) Release Notes: - Text entered in a new untitled buffer is considered as the default filename when saving --- crates/editor/src/items.rs | 4 +++ crates/gpui/src/app.rs | 3 +- crates/gpui/src/platform.rs | 6 +++- crates/gpui/src/platform/linux/platform.rs | 29 +++++++++++++------- crates/gpui/src/platform/mac/platform.rs | 12 +++++++- crates/gpui/src/platform/test/platform.rs | 1 + crates/gpui/src/platform/windows/platform.rs | 20 ++++++++++++-- crates/workspace/src/item.rs | 11 ++++++++ crates/workspace/src/pane.rs | 4 ++- crates/workspace/src/workspace.rs | 3 +- 10 files changed, 75 insertions(+), 18 deletions(-) diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 480757a491..45a4f7365c 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -654,6 +654,10 @@ impl Item for Editor { } } + fn suggested_filename(&self, cx: &App) -> SharedString { + self.buffer.read(cx).title(cx).to_string().into() + } + fn tab_icon(&self, _: &Window, cx: &App) -> Option { ItemSettings::get_global(cx) .file_icons diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 5f6d252503..e1df6d0be4 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -816,8 +816,9 @@ impl App { pub fn prompt_for_new_path( &self, directory: &Path, + suggested_name: Option<&str>, ) -> oneshot::Receiver>> { - self.platform.prompt_for_new_path(directory) + self.platform.prompt_for_new_path(directory, suggested_name) } /// Reveals the specified path at the platform level, such as in Finder on macOS. diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index b495d70dfd..bf6ce68703 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -220,7 +220,11 @@ pub(crate) trait Platform: 'static { &self, options: PathPromptOptions, ) -> oneshot::Receiver>>>; - fn prompt_for_new_path(&self, directory: &Path) -> oneshot::Receiver>>; + fn prompt_for_new_path( + &self, + directory: &Path, + suggested_name: Option<&str>, + ) -> oneshot::Receiver>>; fn can_select_mixed_files_and_dirs(&self) -> bool; fn reveal_path(&self, path: &Path); fn open_with_system(&self, path: &Path); diff --git a/crates/gpui/src/platform/linux/platform.rs b/crates/gpui/src/platform/linux/platform.rs index fe6a36baa8..31d445be52 100644 --- a/crates/gpui/src/platform/linux/platform.rs +++ b/crates/gpui/src/platform/linux/platform.rs @@ -327,26 +327,35 @@ impl Platform for P { done_rx } - fn prompt_for_new_path(&self, directory: &Path) -> oneshot::Receiver>> { + fn prompt_for_new_path( + &self, + directory: &Path, + suggested_name: Option<&str>, + ) -> oneshot::Receiver>> { let (done_tx, done_rx) = oneshot::channel(); #[cfg(not(any(feature = "wayland", feature = "x11")))] - let _ = (done_tx.send(Ok(None)), directory); + let _ = (done_tx.send(Ok(None)), directory, suggested_name); #[cfg(any(feature = "wayland", feature = "x11"))] self.foreground_executor() .spawn({ let directory = directory.to_owned(); + let suggested_name = suggested_name.map(|s| s.to_owned()); async move { - let request = match ashpd::desktop::file_chooser::SaveFileRequest::default() - .modal(true) - .title("Save File") - .current_folder(directory) - .expect("pathbuf should not be nul terminated") - .send() - .await - { + let mut request_builder = + ashpd::desktop::file_chooser::SaveFileRequest::default() + .modal(true) + .title("Save File") + .current_folder(directory) + .expect("pathbuf should not be nul terminated"); + + if let Some(suggested_name) = suggested_name { + request_builder = request_builder.current_name(suggested_name.as_str()); + } + + let request = match request_builder.send().await { Ok(request) => request, Err(err) => { let result = match err { diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index c573131799..533423229c 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -737,8 +737,13 @@ impl Platform for MacPlatform { done_rx } - fn prompt_for_new_path(&self, directory: &Path) -> oneshot::Receiver>> { + fn prompt_for_new_path( + &self, + directory: &Path, + suggested_name: Option<&str>, + ) -> oneshot::Receiver>> { let directory = directory.to_owned(); + let suggested_name = suggested_name.map(|s| s.to_owned()); let (done_tx, done_rx) = oneshot::channel(); self.foreground_executor() .spawn(async move { @@ -748,6 +753,11 @@ impl Platform for MacPlatform { let url = NSURL::fileURLWithPath_isDirectory_(nil, path, true.to_objc()); panel.setDirectoryURL(url); + if let Some(suggested_name) = suggested_name { + let name_string = ns_string(&suggested_name); + let _: () = msg_send![panel, setNameFieldStringValue: name_string]; + } + let done_tx = Cell::new(Some(done_tx)); let block = ConcreteBlock::new(move |response: NSModalResponse| { let mut result = None; diff --git a/crates/gpui/src/platform/test/platform.rs b/crates/gpui/src/platform/test/platform.rs index a26b65576c..69371bc8c4 100644 --- a/crates/gpui/src/platform/test/platform.rs +++ b/crates/gpui/src/platform/test/platform.rs @@ -336,6 +336,7 @@ impl Platform for TestPlatform { fn prompt_for_new_path( &self, directory: &std::path::Path, + _suggested_name: Option<&str>, ) -> oneshot::Receiver>> { let (tx, rx) = oneshot::channel(); self.background_executor() diff --git a/crates/gpui/src/platform/windows/platform.rs b/crates/gpui/src/platform/windows/platform.rs index bbde655b80..c1fb0cabc4 100644 --- a/crates/gpui/src/platform/windows/platform.rs +++ b/crates/gpui/src/platform/windows/platform.rs @@ -490,13 +490,18 @@ impl Platform for WindowsPlatform { rx } - fn prompt_for_new_path(&self, directory: &Path) -> Receiver>> { + fn prompt_for_new_path( + &self, + directory: &Path, + suggested_name: Option<&str>, + ) -> Receiver>> { let directory = directory.to_owned(); + let suggested_name = suggested_name.map(|s| s.to_owned()); let (tx, rx) = oneshot::channel(); let window = self.find_current_active_window(); self.foreground_executor() .spawn(async move { - let _ = tx.send(file_save_dialog(directory, window)); + let _ = tx.send(file_save_dialog(directory, suggested_name, window)); }) .detach(); @@ -804,7 +809,11 @@ fn file_open_dialog( Ok(Some(paths)) } -fn file_save_dialog(directory: PathBuf, window: Option) -> Result> { +fn file_save_dialog( + directory: PathBuf, + suggested_name: Option, + window: Option, +) -> Result> { let dialog: IFileSaveDialog = unsafe { CoCreateInstance(&FileSaveDialog, None, CLSCTX_ALL)? }; if !directory.to_string_lossy().is_empty() { if let Some(full_path) = directory.canonicalize().log_err() { @@ -815,6 +824,11 @@ fn file_save_dialog(directory: PathBuf, window: Option) -> Result + Render + Sized { /// Returns the textual contents of the tab. fn tab_content_text(&self, _detail: usize, _cx: &App) -> SharedString; + /// Returns the suggested filename for saving this item. + /// By default, returns the tab content text. + fn suggested_filename(&self, cx: &App) -> SharedString { + self.tab_content_text(0, cx) + } + fn tab_icon(&self, _window: &Window, _cx: &App) -> Option { None } @@ -497,6 +503,7 @@ pub trait ItemHandle: 'static + Send { ) -> gpui::Subscription; fn tab_content(&self, params: TabContentParams, window: &Window, cx: &App) -> AnyElement; fn tab_content_text(&self, detail: usize, cx: &App) -> SharedString; + fn suggested_filename(&self, cx: &App) -> SharedString; fn tab_icon(&self, window: &Window, cx: &App) -> Option; fn tab_tooltip_text(&self, cx: &App) -> Option; fn tab_tooltip_content(&self, cx: &App) -> Option; @@ -631,6 +638,10 @@ impl ItemHandle for Entity { self.read(cx).tab_content_text(detail, cx) } + fn suggested_filename(&self, cx: &App) -> SharedString { + self.read(cx).suggested_filename(cx) + } + fn tab_icon(&self, window: &Window, cx: &App) -> Option { self.read(cx).tab_icon(window, cx) } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 45bd497705..759e91f758 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -2062,6 +2062,8 @@ impl Pane { })? .await?; } else if can_save_as && is_singleton { + let suggested_name = + cx.update(|_window, cx| item.suggested_filename(cx).to_string())?; let new_path = pane.update_in(cx, |pane, window, cx| { pane.activate_item(item_ix, true, true, window, cx); pane.workspace.update(cx, |workspace, cx| { @@ -2073,7 +2075,7 @@ impl Pane { } else { DirectoryLister::Project(workspace.project().clone()) }; - workspace.prompt_for_new_path(lister, window, cx) + workspace.prompt_for_new_path(lister, Some(suggested_name), window, cx) }) })??; let Some(new_path) = new_path.await.ok().flatten().into_iter().flatten().next() diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 3129c12dbf..ade6838fad 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -2067,6 +2067,7 @@ impl Workspace { pub fn prompt_for_new_path( &mut self, lister: DirectoryLister, + suggested_name: Option, window: &mut Window, cx: &mut Context, ) -> oneshot::Receiver>> { @@ -2094,7 +2095,7 @@ impl Workspace { }) .or_else(std::env::home_dir) .unwrap_or_else(|| PathBuf::from("")); - cx.prompt_for_new_path(&relative_to) + cx.prompt_for_new_path(&relative_to, suggested_name.as_deref()) })?; let abs_path = match abs_path.await? { Ok(path) => path, From 7671f34f88aefbaf75a313cf4b1fc0523cb7a43a Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Fri, 15 Aug 2025 18:37:24 +0300 Subject: [PATCH 72/74] agent: Create checkpoint before/after every edit operation (#36253) 1. Previously, checkpoints only appeared when an agent's edit happened immediately after a user message. This is rare (agent usually collects some context first), so they were almost never shown. This is now fixed. 2. After this change, a checkpoint is created after every edit operation. So when the agent edits files five times in a single dialog turn, we will now display five checkpoints. As a bonus, it's now possible to undo only a part of a long agent response. Closes #36092, #32917 Release Notes: - Create agent checkpoints more frequently (before every edit) --- crates/agent/src/thread.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/crates/agent/src/thread.rs b/crates/agent/src/thread.rs index 1d417efbba..f3f1088483 100644 --- a/crates/agent/src/thread.rs +++ b/crates/agent/src/thread.rs @@ -844,11 +844,17 @@ impl Thread { .await .unwrap_or(false); - if !equal { - this.update(cx, |this, cx| { - this.insert_checkpoint(pending_checkpoint, cx) - })?; - } + this.update(cx, |this, cx| { + this.pending_checkpoint = if equal { + Some(pending_checkpoint) + } else { + this.insert_checkpoint(pending_checkpoint, cx); + Some(ThreadCheckpoint { + message_id: this.next_message_id, + git_checkpoint: final_checkpoint, + }) + } + })?; Ok(()) } From c39f294bcbae49e649d5cdd7d5bc774fa7a7190a Mon Sep 17 00:00:00 2001 From: Umesh Yadav <23421535+imumesh18@users.noreply.github.com> Date: Fri, 15 Aug 2025 21:43:18 +0530 Subject: [PATCH 73/74] remote: Add support for additional SSH arguments in SshSocket (#33243) Closes #29438 Release Notes: - Fix SSH agent forwarding doesn't work when using SSH remote development. --- crates/remote/src/ssh_session.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/crates/remote/src/ssh_session.rs b/crates/remote/src/ssh_session.rs index df7212d44c..2f462a86a5 100644 --- a/crates/remote/src/ssh_session.rs +++ b/crates/remote/src/ssh_session.rs @@ -400,6 +400,7 @@ impl SshSocket { .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) + .args(self.connection_options.additional_args()) .args(["-o", "ControlMaster=no", "-o"]) .arg(format!("ControlPath={}", self.socket_path.display())) } @@ -410,6 +411,7 @@ impl SshSocket { .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) + .args(self.connection_options.additional_args()) .envs(self.envs.clone()) } @@ -417,22 +419,26 @@ impl SshSocket { // On Linux, we use the `ControlPath` option to create a socket file that ssh can use to #[cfg(not(target_os = "windows"))] fn ssh_args(&self) -> SshArgs { + let mut arguments = self.connection_options.additional_args(); + arguments.extend(vec![ + "-o".to_string(), + "ControlMaster=no".to_string(), + "-o".to_string(), + format!("ControlPath={}", self.socket_path.display()), + self.connection_options.ssh_url(), + ]); SshArgs { - arguments: vec![ - "-o".to_string(), - "ControlMaster=no".to_string(), - "-o".to_string(), - format!("ControlPath={}", self.socket_path.display()), - self.connection_options.ssh_url(), - ], + arguments, envs: None, } } #[cfg(target_os = "windows")] fn ssh_args(&self) -> SshArgs { + let mut arguments = self.connection_options.additional_args(); + arguments.push(self.connection_options.ssh_url()); SshArgs { - arguments: vec![self.connection_options.ssh_url()], + arguments, envs: Some(self.envs.clone()), } } From 257e0991d8069face34e734ff9ca4e9baa027817 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 15 Aug 2025 12:13:52 -0400 Subject: [PATCH 74/74] collab: Increase minimum required version to connect (#36255) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR increases the minimum required version to connect to Collab. Previously this was set at v0.157.0. The new minimum required version is v0.198.4, which is the first version where we no longer connect to Collab automatically. Clients on the v0.199.x minor version will also need to be v0.199.2 or greater in order to connect, due to us hotfixing the connection changes to the Preview branch. We're doing this to force clients to upgrade in order to connect to Collab, as we're going to be removing some of the old RPC usages related to authentication that are no longer used. Therefore, we want users to be on a version of Zed that does not rely on those messages. Users will see a message similar to this one, prompting them to upgrade: Screenshot 2025-08-15 at 11 37
55 AM > Note: In this case I'm simulating the error state, which is why I'm signed in via Cloud while still not being able to connect to Collab. Users on older versions will see the "Please update Zed to Collaborate" message without being signed in. Release Notes: - N/A --- crates/collab/src/rpc/connection_pool.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/collab/src/rpc/connection_pool.rs b/crates/collab/src/rpc/connection_pool.rs index 35290fa697..729e7c8533 100644 --- a/crates/collab/src/rpc/connection_pool.rs +++ b/crates/collab/src/rpc/connection_pool.rs @@ -30,7 +30,19 @@ impl fmt::Display for ZedVersion { impl ZedVersion { pub fn can_collaborate(&self) -> bool { - self.0 >= SemanticVersion::new(0, 157, 0) + // v0.198.4 is the first version where we no longer connect to Collab automatically. + // We reject any clients older than that to prevent them from connecting to Collab just for authentication. + if self.0 < SemanticVersion::new(0, 198, 4) { + return false; + } + + // Since we hotfixed the changes to no longer connect to Collab automatically to Preview, we also need to reject + // versions in the range [v0.199.0, v0.199.1]. + if self.0 >= SemanticVersion::new(0, 199, 0) && self.0 < SemanticVersion::new(0, 199, 2) { + return false; + } + + true } }

M#xG_^v&aGThhK+?;N~+sUR&&vd7mG9@ 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 bdSf5B^#~pZzklsiB#8IWVET3lT|EZ?Fp;;J diff --git a/assets/settings/default.json b/assets/settings/default.json index 0f1818ac7f..2c3bf6930d 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -28,7 +28,9 @@ "edit_prediction_provider": "zed" }, // The name of a font to use for rendering text in the editor - "buffer_font_family": "Zed Plex Mono", + // ".ZedMono" currently aliases to Lilex + // but this may change in the future. + "buffer_font_family": ".ZedMono", // Set the buffer text's font fallbacks, this will be merged with // the platform's default fallbacks. "buffer_font_fallbacks": null, @@ -54,7 +56,9 @@ "buffer_line_height": "comfortable", // The name of a font to use for rendering text in the UI // You can set this to ".SystemUIFont" to use the system font - "ui_font_family": "Zed Plex Sans", + // ".ZedSans" currently aliases to "IBM Plex Sans", but this may + // change in the future + "ui_font_family": ".ZedSans", // Set the UI's font fallbacks, this will be merged with the platform's // default font fallbacks. "ui_font_fallbacks": null, @@ -1402,7 +1406,7 @@ // "font_size": 15, // Set the terminal's font family. If this option is not included, // the terminal will default to matching the buffer's font family. - // "font_family": "Zed Plex Mono", + // "font_family": ".ZedMono", // Set the terminal's font fallbacks. If this option is not included, // the terminal will default to matching the buffer's font fallbacks. // This will be merged with the platform's default font fallbacks diff --git a/crates/assets/src/assets.rs b/crates/assets/src/assets.rs index fad0c58b73..5c7e671159 100644 --- a/crates/assets/src/assets.rs +++ b/crates/assets/src/assets.rs @@ -58,9 +58,7 @@ impl Assets { pub fn load_test_fonts(&self, cx: &App) { cx.text_system() .add_fonts(vec![ - self.load("fonts/plex-mono/ZedPlexMono-Regular.ttf") - .unwrap() - .unwrap(), + self.load("fonts/lilex/Lilex-Regular.ttf").unwrap().unwrap(), ]) .unwrap() } diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index e25c02432d..c4c9f2004a 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -2290,8 +2290,6 @@ mod tests { fn test_blocks_on_wrapped_lines(cx: &mut gpui::TestAppContext) { cx.update(init_test); - let _font_id = cx.text_system().font_id(&font("Helvetica")).unwrap(); - let text = "one two three\nfour five six\nseven eight"; let buffer = cx.update(|cx| MultiBuffer::build_simple(text, cx)); diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index 269f8f0c40..caa4882a6e 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -1223,7 +1223,7 @@ mod tests { let tab_size = NonZeroU32::new(rng.gen_range(1..=4)).unwrap(); let font = test_font(); - let _font_id = text_system.font_id(&font); + let _font_id = text_system.resolve_font(&font); let font_size = px(14.0); log::info!("Tab size: {}", tab_size); diff --git a/crates/editor/src/test.rs b/crates/editor/src/test.rs index 0a9d5e9535..f328945dbe 100644 --- a/crates/editor/src/test.rs +++ b/crates/editor/src/test.rs @@ -53,7 +53,7 @@ pub fn marked_display_snapshot( let (unmarked_text, markers) = marked_text_offsets(text); let font = Font { - family: "Zed Plex Mono".into(), + family: ".ZedMono".into(), features: FontFeatures::default(), fallbacks: None, weight: FontWeight::default(), diff --git a/crates/gpui/src/platform/linux/text_system.rs b/crates/gpui/src/platform/linux/text_system.rs index e6f6e9a680..f66a2e71d4 100644 --- a/crates/gpui/src/platform/linux/text_system.rs +++ b/crates/gpui/src/platform/linux/text_system.rs @@ -213,11 +213,7 @@ impl CosmicTextSystemState { features: &FontFeatures, ) -> Result> { // TODO: Determine the proper system UI font. - let name = if name == ".SystemUIFont" { - "Zed Plex Sans" - } else { - name - }; + let name = crate::text_system::font_name_with_fallbacks(name, "IBM Plex Sans"); let families = self .font_system diff --git a/crates/gpui/src/platform/mac/text_system.rs b/crates/gpui/src/platform/mac/text_system.rs index c45888bce7..849925c727 100644 --- a/crates/gpui/src/platform/mac/text_system.rs +++ b/crates/gpui/src/platform/mac/text_system.rs @@ -211,11 +211,7 @@ impl MacTextSystemState { features: &FontFeatures, fallbacks: Option<&FontFallbacks>, ) -> Result> { - let name = if name == ".SystemUIFont" { - ".AppleSystemUIFont" - } else { - name - }; + let name = crate::text_system::font_name_with_fallbacks(name, ".AppleSystemUIFont"); let mut font_ids = SmallVec::new(); let family = self diff --git a/crates/gpui/src/platform/windows/direct_write.rs b/crates/gpui/src/platform/windows/direct_write.rs index 587cb7b4a6..75cb50243b 100644 --- a/crates/gpui/src/platform/windows/direct_write.rs +++ b/crates/gpui/src/platform/windows/direct_write.rs @@ -498,8 +498,9 @@ impl DirectWriteState { ) .unwrap() } else { + let family = self.system_ui_font_name.clone(); self.find_font_id( - target_font.family.as_ref(), + font_name_with_fallbacks(target_font.family.as_ref(), family.as_ref()), target_font.weight, target_font.style, &target_font.features, @@ -512,7 +513,6 @@ impl DirectWriteState { } #[cfg(not(any(test, feature = "test-support")))] { - let family = self.system_ui_font_name.clone(); log::error!("{} not found, use {} instead.", target_font.family, family); self.get_font_id_from_font_collection( family.as_ref(), diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index ed1307c6cd..b48c3a2935 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -65,7 +65,7 @@ impl TextSystem { font_runs_pool: Mutex::default(), fallback_font_stack: smallvec![ // TODO: Remove this when Linux have implemented setting fallbacks. - font("Zed Plex Mono"), + font(".ZedMono"), font("Helvetica"), font("Segoe UI"), // Windows font("Cantarell"), // Gnome @@ -96,7 +96,7 @@ impl TextSystem { } /// Get the FontId for the configure font family and style. - pub fn font_id(&self, font: &Font) -> Result { + fn font_id(&self, font: &Font) -> Result { fn clone_font_id_result(font_id: &Result) -> Result { match font_id { Ok(font_id) => Ok(*font_id), @@ -844,3 +844,16 @@ impl FontMetrics { (self.bounding_box / self.units_per_em as f32 * font_size.0).map(px) } } + +#[allow(unused)] +pub(crate) fn font_name_with_fallbacks<'a>(name: &'a str, system: &'a str) -> &'a str { + // Note: the "Zed Plex" fonts were deprecated as we are not allowed to use "Plex" + // in a derived font name. They are essentially indistinguishable from IBM Plex/Lilex, + // and so retained here for backward compatibility. + match name { + ".SystemUIFont" => system, + ".ZedSans" | "Zed Plex Sans" => "IBM Plex Sans", + ".ZedMono" | "Zed Plex Mono" => "Lilex", + _ => name, + } +} diff --git a/crates/gpui/src/text_system/line_wrapper.rs b/crates/gpui/src/text_system/line_wrapper.rs index 5de26511d3..648d714c89 100644 --- a/crates/gpui/src/text_system/line_wrapper.rs +++ b/crates/gpui/src/text_system/line_wrapper.rs @@ -327,7 +327,7 @@ mod tests { fn build_wrapper() -> LineWrapper { let dispatcher = TestDispatcher::new(StdRng::seed_from_u64(0)); let cx = TestAppContext::build(dispatcher, None); - let id = cx.text_system().font_id(&font("Zed Plex Mono")).unwrap(); + let id = cx.text_system().resolve_font(&font(".ZedMono")); LineWrapper::new(id, px(16.), cx.text_system().platform_text_system.clone()) } diff --git a/crates/markdown/examples/markdown.rs b/crates/markdown/examples/markdown.rs index bf685bd9ac..c651c7921d 100644 --- a/crates/markdown/examples/markdown.rs +++ b/crates/markdown/examples/markdown.rs @@ -77,16 +77,16 @@ impl Render for MarkdownExample { fn render(&mut self, _window: &mut Window, cx: &mut Context) -> impl IntoElement { let markdown_style = MarkdownStyle { base_text_style: gpui::TextStyle { - font_family: "Zed Plex Sans".into(), + font_family: ".ZedSans".into(), color: cx.theme().colors().terminal_ansi_black, ..Default::default() }, code_block: StyleRefinement::default() - .font_family("Zed Plex Mono") + .font_family(".ZedMono") .m(rems(1.)) .bg(rgb(0xAAAAAAA)), inline_code: gpui::TextStyleRefinement { - font_family: Some("Zed Mono".into()), + font_family: Some(".ZedMono".into()), color: Some(cx.theme().colors().editor_foreground), background_color: Some(cx.theme().colors().editor_background), ..Default::default() diff --git a/crates/storybook/src/storybook.rs b/crates/storybook/src/storybook.rs index 4c5b6272ef..ac01e6c5c8 100644 --- a/crates/storybook/src/storybook.rs +++ b/crates/storybook/src/storybook.rs @@ -128,7 +128,7 @@ impl Render for StoryWrapper { .flex() .flex_col() .size_full() - .font_family("Zed Plex Mono") + .font_family(".ZedMono") .child(self.story.clone()) } } diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 661bb71c91..51bf2dd131 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -284,9 +284,7 @@ pub fn init(cx: &mut App) { let count = Vim::take_count(cx).unwrap_or(1) as f32; Vim::take_forced_motion(cx); let theme = ThemeSettings::get_global(cx); - let Ok(font_id) = window.text_system().font_id(&theme.buffer_font) else { - return; - }; + let font_id = window.text_system().resolve_font(&theme.buffer_font); let Ok(width) = window .text_system() .advance(font_id, theme.buffer_font_size(cx), 'm') @@ -300,9 +298,7 @@ pub fn init(cx: &mut App) { let count = Vim::take_count(cx).unwrap_or(1) as f32; Vim::take_forced_motion(cx); let theme = ThemeSettings::get_global(cx); - let Ok(font_id) = window.text_system().font_id(&theme.buffer_font) else { - return; - }; + let font_id = window.text_system().resolve_font(&theme.buffer_font); let Ok(width) = window .text_system() .advance(font_id, theme.buffer_font_size(cx), 'm') diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 23020d3a9b..ceda403fdd 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -4401,11 +4401,11 @@ mod tests { cx.text_system() .add_fonts(vec![ Assets - .load("fonts/plex-mono/ZedPlexMono-Regular.ttf") + .load("fonts/lilex/Lilex-Regular.ttf") .unwrap() .unwrap(), Assets - .load("fonts/plex-sans/ZedPlexSans-Regular.ttf") + .load("fonts/ibm-plex-sans/IBMPlexSans-Regular.ttf") .unwrap() .unwrap(), ]) diff --git a/docs/src/configuring-zed.md b/docs/src/configuring-zed.md index 5d11dfe833..b4cb1fcb9b 100644 --- a/docs/src/configuring-zed.md +++ b/docs/src/configuring-zed.md @@ -294,11 +294,11 @@ Define extensions which should be installed (`true`) or never installed (`false` - Description: The name of a font to use for rendering text in the editor. - Setting: `buffer_font_family` -- Default: `Zed Plex Mono` +- Default: `.ZedMono`. This currently aliases to [Lilex](https://lilex.myrt.co). **Options** -The name of any font family installed on the user's system +The name of any font family installed on the user's system, or `".ZedMono"`. ## Buffer Font Features @@ -3511,11 +3511,11 @@ Float values between `0.0` and `0.9`, where: - Description: The name of the font to use for text in the UI. - Setting: `ui_font_family` -- Default: `Zed Plex Sans` +- Default: `.ZedSans`. This currently aliases to [IBM Plex](https://www.ibm.com/plex/). **Options** -The name of any font family installed on the system. +The name of any font family installed on the system, `".ZedSans"` to use the Zed-provided default, or `".SystemUIFont"` to use the system's default UI font (on macOS and Windows). ## UI Font Features @@ -3603,7 +3603,7 @@ For example, to use `Nerd Font` as a fallback, add the following to your setting "soft_wrap": "none", "buffer_font_size": 18, - "buffer_font_family": "Zed Plex Mono", + "buffer_font_family": ".ZedMono", "autosave": "on_focus_change", "format_on_save": "off", diff --git a/docs/src/fonts.md b/docs/src/fonts.md deleted file mode 100644 index 93c687b134..0000000000 --- a/docs/src/fonts.md +++ /dev/null @@ -1,56 +0,0 @@ -# Fonts - - - -Zed ships two fonts: Zed Plex Mono and Zed Plex Sans. These are based on IBM Plex Mono and IBM Plex Sans, respectively. - - - -## Settings - - - -- Buffer fonts - - `buffer-font-family` - - `buffer-font-features` - - `buffer-font-size` - - `buffer-line-height` -- UI fonts - - `ui_font_family` - - `ui_font_fallbacks` - - `ui_font_features` - - `ui_font_weight` - - `ui_font_size` -- Terminal fonts - - `terminal.font-size` - - `terminal.font-family` - - `terminal.font-features` - -## Old Zed Fonts - -Previously, Zed shipped with `Zed Mono` and `Zed Sans`, customized versions of the [Iosevka](https://typeof.net/Iosevka/) typeface. You can find more about them in the [zed-fonts](https://github.com/zed-industries/zed-fonts/) repository. - -Here's how you can use the old Zed fonts instead of `Zed Plex Mono` and `Zed Plex Sans`: - -1. Download [zed-app-fonts-1.2.0.zip](https://github.com/zed-industries/zed-fonts/releases/download/1.2.0/zed-app-fonts-1.2.0.zip) from the [zed-fonts releases](https://github.com/zed-industries/zed-fonts/releases) page. -2. Open macOS `Font Book.app` -3. Unzip the file and drag the `ttf` files into the Font Book app. -4. Update your settings `ui_font_family` and `buffer_font_family` to use `Zed Mono` or `Zed Sans` in your `settings.json` file. - -```json -{ - "ui_font_family": "Zed Sans Extended", - "buffer_font_family": "Zed Mono Extend", - "terminal": { - "font-family": "Zed Mono Extended" - } -} -``` - -5. Note there will be red squiggles under the font name. (this is a bug, but harmless.) diff --git a/docs/src/visual-customization.md b/docs/src/visual-customization.md index 46de078d89..7e75f6287d 100644 --- a/docs/src/visual-customization.md +++ b/docs/src/visual-customization.md @@ -39,13 +39,15 @@ If you would like to use distinct themes for light mode/dark mode that can be se ## Fonts ```json - // UI Font. Use ".SystemUIFont" to use the default system font (SF Pro on macOS) - "ui_font_family": "Zed Plex Sans", + // UI Font. Use ".SystemUIFont" to use the default system font (SF Pro on macOS), + // or ".ZedSans" for the bundled default (currently IBM Plex) + "ui_font_family": ".SystemUIFont", "ui_font_weight": 400, // Font weight in standard CSS units from 100 to 900. "ui_font_size": 16, // Buffer Font - Used by editor buffers - "buffer_font_family": "Zed Plex Mono", // Font name for editor buffers + // use ".ZedMono" for the bundled default monospace (currently Lilex) + "buffer_font_family": "Berkeley Mono", // Font name for editor buffers "buffer_font_size": 15, // Font size for editor buffers "buffer_font_weight": 400, // Font weight in CSS units [100-900] // Line height "comfortable" (1.618), "standard" (1.3) or custom: `{ "custom": 2 }` @@ -53,7 +55,7 @@ If you would like to use distinct themes for light mode/dark mode that can be se // Terminal Font Settings "terminal": { - "font_family": "Zed Plex Mono", + "font_family": "", "font_size": 15, // Terminal line height: comfortable (1.618), standard(1.3) or `{ "custom": 2 }` "line_height": "comfortable", @@ -473,7 +475,7 @@ See [Zed AI Documentation](./ai/overview.md) for additional non-visual AI settin "show": null // Show/hide: (auto, system, always, never) }, // Terminal Font Settings - "font_family": "Zed Plex Mono", + "font_family": "Fira Code", "font_size": 15, "font_weight": 400, // Terminal line height: comfortable (1.618), standard(1.3) or `{ "custom": 2 }` diff --git a/nix/build.nix b/nix/build.nix index 70b4f76932..03403cc1c9 100644 --- a/nix/build.nix +++ b/nix/build.nix @@ -171,8 +171,8 @@ let ZSTD_SYS_USE_PKG_CONFIG = true; FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ - ../assets/fonts/plex-mono - ../assets/fonts/plex-sans + ../assets/fonts/lilex + ../assets/fonts/ibm-plex-sans ]; }; ZED_UPDATE_EXPLANATION = "Zed has been installed using Nix. Auto-updates have thus been disabled."; diff --git a/nix/shell.nix b/nix/shell.nix index b78eb5c001..b6f1efd366 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -46,8 +46,8 @@ # outside the nix store instead of to `$src` FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ - "./assets/fonts/plex-mono" - "./assets/fonts/plex-sans" + "./assets/fonts/lilex" + "./assets/fonts/ibm-plex-sans" ]; }; PROTOC = "${protobuf}/bin/protoc"; From 389d382f426f507d7567c7a8b89e951a3f6723d0 Mon Sep 17 00:00:00 2001 From: smit Date: Thu, 14 Aug 2025 00:59:12 +0530 Subject: [PATCH 20/74] ci: Disable FreeBSD builds (#36140) Revert accidental change introduced in [#35880](https://github.com/zed-industries/zed/pull/35880/files#diff-b803fcb7f17ed9235f1e5cb1fcd2f5d3b2838429d4368ae4c57ce4436577f03fL706) Release Notes: - N/A --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3b70271e57..f4ba227168 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -718,7 +718,7 @@ jobs: timeout-minutes: 60 runs-on: github-8vcpu-ubuntu-2404 if: | - ( startsWith(github.ref, 'refs/tags/v') + false && ( startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-bundling') ) needs: [linux_tests] name: Build Zed on FreeBSD From 389d24d7e5b54d01bf4dede2e572c1a64c6c7e96 Mon Sep 17 00:00:00 2001 From: Agus Zubiaga Date: Wed, 13 Aug 2025 17:11:32 -0300 Subject: [PATCH 21/74] Fully support all mention kinds (#36134) Feature parity with the agent1 @mention kinds: - File - Symbols - Selections - Threads - Rules - Fetch Release Notes: - N/A --------- Co-authored-by: Cole Miller --- Cargo.lock | 3 + crates/acp_thread/Cargo.toml | 2 + crates/acp_thread/src/acp_thread.rs | 26 +- crates/acp_thread/src/mention.rs | 340 ++++- crates/agent/src/thread_store.rs | 16 + crates/agent2/src/thread.rs | 79 +- crates/agent_ui/Cargo.toml | 3 + .../agent_ui/src/acp/completion_provider.rs | 1297 +++++++++++++++-- crates/agent_ui/src/acp/message_history.rs | 6 +- crates/agent_ui/src/acp/thread_view.rs | 222 ++- crates/agent_ui/src/agent_panel.rs | 5 + crates/agent_ui/src/context_picker.rs | 68 +- .../src/context_picker/completion_provider.rs | 4 +- crates/assistant_context/Cargo.toml | 3 + crates/assistant_context/src/context_store.rs | 21 + crates/editor/src/editor.rs | 7 + crates/prompt_store/src/prompt_store.rs | 9 + 17 files changed, 1787 insertions(+), 324 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3b1337eece..f0fd3049c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,6 +7,7 @@ name = "acp_thread" version = "0.1.0" dependencies = [ "action_log", + "agent", "agent-client-protocol", "anyhow", "buffer_diff", @@ -21,6 +22,7 @@ dependencies = [ "markdown", "parking_lot", "project", + "prompt_store", "rand 0.8.5", "serde", "serde_json", @@ -392,6 +394,7 @@ dependencies = [ "ui", "ui_input", "unindent", + "url", "urlencoding", "util", "uuid", diff --git a/crates/acp_thread/Cargo.toml b/crates/acp_thread/Cargo.toml index b3ec217bad..2ac15de08f 100644 --- a/crates/acp_thread/Cargo.toml +++ b/crates/acp_thread/Cargo.toml @@ -18,6 +18,7 @@ test-support = ["gpui/test-support", "project/test-support"] [dependencies] action_log.workspace = true agent-client-protocol.workspace = true +agent.workspace = true anyhow.workspace = true buffer_diff.workspace = true collections.workspace = true @@ -28,6 +29,7 @@ itertools.workspace = true language.workspace = true markdown.workspace = true project.workspace = true +prompt_store.workspace = true serde.workspace = true serde_json.workspace = true settings.workspace = true diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index f8a5bf8032..a5b512f31a 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -399,7 +399,7 @@ impl ContentBlock { } } - let new_content = self.extract_content_from_block(block); + let new_content = self.block_string_contents(block); match self { ContentBlock::Empty => { @@ -409,7 +409,7 @@ impl ContentBlock { markdown.update(cx, |markdown, cx| markdown.append(&new_content, cx)); } ContentBlock::ResourceLink { resource_link } => { - let existing_content = Self::resource_link_to_content(&resource_link.uri); + let existing_content = Self::resource_link_md(&resource_link.uri); let combined = format!("{}\n{}", existing_content, new_content); *self = Self::create_markdown_block(combined, language_registry, cx); @@ -417,14 +417,6 @@ impl ContentBlock { } } - fn resource_link_to_content(uri: &str) -> String { - if let Some(uri) = MentionUri::parse(&uri).log_err() { - uri.to_link() - } else { - uri.to_string().clone() - } - } - fn create_markdown_block( content: String, language_registry: &Arc, @@ -436,11 +428,11 @@ impl ContentBlock { } } - fn extract_content_from_block(&self, block: acp::ContentBlock) -> String { + fn block_string_contents(&self, block: acp::ContentBlock) -> String { match block { acp::ContentBlock::Text(text_content) => text_content.text.clone(), acp::ContentBlock::ResourceLink(resource_link) => { - Self::resource_link_to_content(&resource_link.uri) + Self::resource_link_md(&resource_link.uri) } acp::ContentBlock::Resource(acp::EmbeddedResource { resource: @@ -449,13 +441,21 @@ impl ContentBlock { .. }), .. - }) => Self::resource_link_to_content(&uri), + }) => Self::resource_link_md(&uri), acp::ContentBlock::Image(_) | acp::ContentBlock::Audio(_) | acp::ContentBlock::Resource(_) => String::new(), } } + fn resource_link_md(uri: &str) -> String { + if let Some(uri) = MentionUri::parse(&uri).log_err() { + uri.as_link().to_string() + } else { + uri.to_string() + } + } + fn to_markdown<'a>(&'a self, cx: &'a App) -> &'a str { match self { ContentBlock::Empty => "", diff --git a/crates/acp_thread/src/mention.rs b/crates/acp_thread/src/mention.rs index 59c479d87b..03174608fb 100644 --- a/crates/acp_thread/src/mention.rs +++ b/crates/acp_thread/src/mention.rs @@ -1,13 +1,40 @@ -use agent_client_protocol as acp; -use anyhow::{Result, bail}; -use std::path::PathBuf; +use agent::ThreadId; +use anyhow::{Context as _, Result, bail}; +use prompt_store::{PromptId, UserPromptId}; +use std::{ + fmt, + ops::Range, + path::{Path, PathBuf}, +}; +use url::Url; #[derive(Clone, Debug, PartialEq, Eq)] pub enum MentionUri { File(PathBuf), - Symbol(PathBuf, String), - Thread(acp::SessionId), - Rule(String), + Symbol { + path: PathBuf, + name: String, + line_range: Range, + }, + Thread { + id: ThreadId, + name: String, + }, + TextThread { + path: PathBuf, + name: String, + }, + Rule { + id: PromptId, + name: String, + }, + Selection { + path: PathBuf, + line_range: Range, + }, + Fetch { + url: Url, + }, } impl MentionUri { @@ -17,7 +44,34 @@ impl MentionUri { match url.scheme() { "file" => { if let Some(fragment) = url.fragment() { - Ok(Self::Symbol(path.into(), fragment.into())) + let range = fragment + .strip_prefix("L") + .context("Line range must start with \"L\"")?; + let (start, end) = range + .split_once(":") + .context("Line range must use colon as separator")?; + let line_range = start + .parse::() + .context("Parsing line range start")? + .checked_sub(1) + .context("Line numbers should be 1-based")? + ..end + .parse::() + .context("Parsing line range end")? + .checked_sub(1) + .context("Line numbers should be 1-based")?; + if let Some(name) = single_query_param(&url, "symbol")? { + Ok(Self::Symbol { + name, + path: path.into(), + line_range, + }) + } else { + Ok(Self::Selection { + path: path.into(), + line_range, + }) + } } else { let file_path = PathBuf::from(format!("{}{}", url.host_str().unwrap_or(""), path)); @@ -26,100 +80,292 @@ impl MentionUri { } } "zed" => { - if let Some(thread) = path.strip_prefix("/agent/thread/") { - Ok(Self::Thread(acp::SessionId(thread.into()))) - } else if let Some(rule) = path.strip_prefix("/agent/rule/") { - Ok(Self::Rule(rule.into())) + if let Some(thread_id) = path.strip_prefix("/agent/thread/") { + let name = single_query_param(&url, "name")?.context("Missing thread name")?; + Ok(Self::Thread { + id: thread_id.into(), + name, + }) + } else if let Some(path) = path.strip_prefix("/agent/text-thread/") { + let name = single_query_param(&url, "name")?.context("Missing thread name")?; + Ok(Self::TextThread { + path: path.into(), + name, + }) + } else if let Some(rule_id) = path.strip_prefix("/agent/rule/") { + let name = single_query_param(&url, "name")?.context("Missing rule name")?; + let rule_id = UserPromptId(rule_id.parse()?); + Ok(Self::Rule { + id: rule_id.into(), + name, + }) } else { bail!("invalid zed url: {:?}", input); } } + "http" | "https" => Ok(MentionUri::Fetch { url }), other => bail!("unrecognized scheme {:?}", other), } } - pub fn name(&self) -> String { + fn name(&self) -> String { match self { - MentionUri::File(path) => path.file_name().unwrap().to_string_lossy().into_owned(), - MentionUri::Symbol(_path, name) => name.clone(), - MentionUri::Thread(thread) => thread.to_string(), - MentionUri::Rule(rule) => rule.clone(), + MentionUri::File(path) => path + .file_name() + .unwrap_or_default() + .to_string_lossy() + .into_owned(), + MentionUri::Symbol { name, .. } => name.clone(), + MentionUri::Thread { name, .. } => name.clone(), + MentionUri::TextThread { name, .. } => name.clone(), + MentionUri::Rule { name, .. } => name.clone(), + MentionUri::Selection { + path, line_range, .. + } => selection_name(path, line_range), + MentionUri::Fetch { url } => url.to_string(), } } - pub fn to_link(&self) -> String { - let name = self.name(); - let uri = self.to_uri(); - format!("[{name}]({uri})") + pub fn as_link<'a>(&'a self) -> MentionLink<'a> { + MentionLink(self) } - pub fn to_uri(&self) -> String { + pub fn to_uri(&self) -> Url { match self { MentionUri::File(path) => { - format!("file://{}", path.display()) + let mut url = Url::parse("file:///").unwrap(); + url.set_path(&path.to_string_lossy()); + url } - MentionUri::Symbol(path, name) => { - format!("file://{}#{}", path.display(), name) + MentionUri::Symbol { + path, + name, + line_range, + } => { + let mut url = Url::parse("file:///").unwrap(); + url.set_path(&path.to_string_lossy()); + url.query_pairs_mut().append_pair("symbol", name); + url.set_fragment(Some(&format!( + "L{}:{}", + line_range.start + 1, + line_range.end + 1 + ))); + url } - MentionUri::Thread(thread) => { - format!("zed:///agent/thread/{}", thread.0) + MentionUri::Selection { path, line_range } => { + let mut url = Url::parse("file:///").unwrap(); + url.set_path(&path.to_string_lossy()); + url.set_fragment(Some(&format!( + "L{}:{}", + line_range.start + 1, + line_range.end + 1 + ))); + url } - MentionUri::Rule(rule) => { - format!("zed:///agent/rule/{}", rule) + MentionUri::Thread { name, id } => { + let mut url = Url::parse("zed:///").unwrap(); + url.set_path(&format!("/agent/thread/{id}")); + url.query_pairs_mut().append_pair("name", name); + url } + MentionUri::TextThread { path, name } => { + let mut url = Url::parse("zed:///").unwrap(); + url.set_path(&format!("/agent/text-thread/{}", path.to_string_lossy())); + url.query_pairs_mut().append_pair("name", name); + url + } + MentionUri::Rule { name, id } => { + let mut url = Url::parse("zed:///").unwrap(); + url.set_path(&format!("/agent/rule/{id}")); + url.query_pairs_mut().append_pair("name", name); + url + } + MentionUri::Fetch { url } => url.clone(), } } } +pub struct MentionLink<'a>(&'a MentionUri); + +impl fmt::Display for MentionLink<'_> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "[@{}]({})", self.0.name(), self.0.to_uri()) + } +} + +fn single_query_param(url: &Url, name: &'static str) -> Result> { + let pairs = url.query_pairs().collect::>(); + match pairs.as_slice() { + [] => Ok(None), + [(k, v)] => { + if k != name { + bail!("invalid query parameter") + } + + Ok(Some(v.to_string())) + } + _ => bail!("too many query pairs"), + } +} + +pub fn selection_name(path: &Path, line_range: &Range) -> String { + format!( + "{} ({}:{})", + path.file_name().unwrap_or_default().display(), + line_range.start + 1, + line_range.end + 1 + ) +} + #[cfg(test)] mod tests { use super::*; #[test] - fn test_mention_uri_parse_and_display() { - // Test file URI + fn test_parse_file_uri() { let file_uri = "file:///path/to/file.rs"; let parsed = MentionUri::parse(file_uri).unwrap(); match &parsed { MentionUri::File(path) => assert_eq!(path.to_str().unwrap(), "/path/to/file.rs"), _ => panic!("Expected File variant"), } - assert_eq!(parsed.to_uri(), file_uri); + assert_eq!(parsed.to_uri().to_string(), file_uri); + } - // Test symbol URI - let symbol_uri = "file:///path/to/file.rs#MySymbol"; + #[test] + fn test_parse_symbol_uri() { + let symbol_uri = "file:///path/to/file.rs?symbol=MySymbol#L10:20"; let parsed = MentionUri::parse(symbol_uri).unwrap(); match &parsed { - MentionUri::Symbol(path, symbol) => { + MentionUri::Symbol { + path, + name, + line_range, + } => { assert_eq!(path.to_str().unwrap(), "/path/to/file.rs"); - assert_eq!(symbol, "MySymbol"); + assert_eq!(name, "MySymbol"); + assert_eq!(line_range.start, 9); + assert_eq!(line_range.end, 19); } _ => panic!("Expected Symbol variant"), } - assert_eq!(parsed.to_uri(), symbol_uri); + assert_eq!(parsed.to_uri().to_string(), symbol_uri); + } - // Test thread URI - let thread_uri = "zed:///agent/thread/session123"; + #[test] + fn test_parse_selection_uri() { + let selection_uri = "file:///path/to/file.rs#L5:15"; + let parsed = MentionUri::parse(selection_uri).unwrap(); + match &parsed { + MentionUri::Selection { path, line_range } => { + assert_eq!(path.to_str().unwrap(), "/path/to/file.rs"); + assert_eq!(line_range.start, 4); + assert_eq!(line_range.end, 14); + } + _ => panic!("Expected Selection variant"), + } + assert_eq!(parsed.to_uri().to_string(), selection_uri); + } + + #[test] + fn test_parse_thread_uri() { + let thread_uri = "zed:///agent/thread/session123?name=Thread+name"; let parsed = MentionUri::parse(thread_uri).unwrap(); match &parsed { - MentionUri::Thread(session_id) => assert_eq!(session_id.0.as_ref(), "session123"), + MentionUri::Thread { + id: thread_id, + name, + } => { + assert_eq!(thread_id.to_string(), "session123"); + assert_eq!(name, "Thread name"); + } _ => panic!("Expected Thread variant"), } - assert_eq!(parsed.to_uri(), thread_uri); + assert_eq!(parsed.to_uri().to_string(), thread_uri); + } - // Test rule URI - let rule_uri = "zed:///agent/rule/my_rule"; + #[test] + fn test_parse_rule_uri() { + let rule_uri = "zed:///agent/rule/d8694ff2-90d5-4b6f-be33-33c1763acd52?name=Some+rule"; let parsed = MentionUri::parse(rule_uri).unwrap(); match &parsed { - MentionUri::Rule(rule) => assert_eq!(rule, "my_rule"), + MentionUri::Rule { id, name } => { + assert_eq!(id.to_string(), "d8694ff2-90d5-4b6f-be33-33c1763acd52"); + assert_eq!(name, "Some rule"); + } _ => panic!("Expected Rule variant"), } - assert_eq!(parsed.to_uri(), rule_uri); + assert_eq!(parsed.to_uri().to_string(), rule_uri); + } - // Test invalid scheme - assert!(MentionUri::parse("http://example.com").is_err()); + #[test] + fn test_parse_fetch_http_uri() { + let http_uri = "http://example.com/path?query=value#fragment"; + let parsed = MentionUri::parse(http_uri).unwrap(); + match &parsed { + MentionUri::Fetch { url } => { + assert_eq!(url.to_string(), http_uri); + } + _ => panic!("Expected Fetch variant"), + } + assert_eq!(parsed.to_uri().to_string(), http_uri); + } - // Test invalid zed path + #[test] + fn test_parse_fetch_https_uri() { + let https_uri = "https://example.com/api/endpoint"; + let parsed = MentionUri::parse(https_uri).unwrap(); + match &parsed { + MentionUri::Fetch { url } => { + assert_eq!(url.to_string(), https_uri); + } + _ => panic!("Expected Fetch variant"), + } + assert_eq!(parsed.to_uri().to_string(), https_uri); + } + + #[test] + fn test_invalid_scheme() { + assert!(MentionUri::parse("ftp://example.com").is_err()); + assert!(MentionUri::parse("ssh://example.com").is_err()); + assert!(MentionUri::parse("unknown://example.com").is_err()); + } + + #[test] + fn test_invalid_zed_path() { assert!(MentionUri::parse("zed:///invalid/path").is_err()); + assert!(MentionUri::parse("zed:///agent/unknown/test").is_err()); + } + + #[test] + fn test_invalid_line_range_format() { + // Missing L prefix + assert!(MentionUri::parse("file:///path/to/file.rs#10:20").is_err()); + + // Missing colon separator + assert!(MentionUri::parse("file:///path/to/file.rs#L1020").is_err()); + + // Invalid numbers + assert!(MentionUri::parse("file:///path/to/file.rs#L10:abc").is_err()); + assert!(MentionUri::parse("file:///path/to/file.rs#Labc:20").is_err()); + } + + #[test] + fn test_invalid_query_parameters() { + // Invalid query parameter name + assert!(MentionUri::parse("file:///path/to/file.rs#L10:20?invalid=test").is_err()); + + // Too many query parameters + assert!( + MentionUri::parse("file:///path/to/file.rs#L10:20?symbol=test&another=param").is_err() + ); + } + + #[test] + fn test_zero_based_line_numbers() { + // Test that 0-based line numbers are rejected (should be 1-based) + assert!(MentionUri::parse("file:///path/to/file.rs#L0:10").is_err()); + assert!(MentionUri::parse("file:///path/to/file.rs#L1:0").is_err()); + assert!(MentionUri::parse("file:///path/to/file.rs#L0:0").is_err()); } } diff --git a/crates/agent/src/thread_store.rs b/crates/agent/src/thread_store.rs index cc7cb50c91..12c94a522d 100644 --- a/crates/agent/src/thread_store.rs +++ b/crates/agent/src/thread_store.rs @@ -205,6 +205,22 @@ impl ThreadStore { (this, ready_rx) } + #[cfg(any(test, feature = "test-support"))] + pub fn fake(project: Entity, cx: &mut App) -> Self { + Self { + project, + tools: cx.new(|_| ToolWorkingSet::default()), + prompt_builder: Arc::new(PromptBuilder::new(None).unwrap()), + prompt_store: None, + context_server_tool_ids: HashMap::default(), + threads: Vec::new(), + project_context: SharedProjectContext::default(), + reload_system_prompt_tx: mpsc::channel(0).0, + _reload_system_prompt_task: Task::ready(()), + _subscriptions: vec![], + } + } + fn handle_project_event( &mut self, _project: Entity, diff --git a/crates/agent2/src/thread.rs b/crates/agent2/src/thread.rs index 204b489124..b48f9001ac 100644 --- a/crates/agent2/src/thread.rs +++ b/crates/agent2/src/thread.rs @@ -25,8 +25,8 @@ use schemars::{JsonSchema, Schema}; use serde::{Deserialize, Serialize}; use settings::{Settings, update_settings_file}; use smol::stream::StreamExt; -use std::fmt::Write; use std::{cell::RefCell, collections::BTreeMap, path::Path, rc::Rc, sync::Arc}; +use std::{fmt::Write, ops::Range}; use util::{ResultExt, markdown::MarkdownCodeBlock}; #[derive(Debug, Clone, PartialEq, Eq)] @@ -79,9 +79,9 @@ impl UserMessage { } UserMessageContent::Mention { uri, content } => { if !content.is_empty() { - markdown.push_str(&format!("{}\n\n{}\n", uri.to_link(), content)); + let _ = write!(&mut markdown, "{}\n\n{}\n", uri.as_link(), content); } else { - markdown.push_str(&format!("{}\n", uri.to_link())); + let _ = write!(&mut markdown, "{}\n", uri.as_link()); } } } @@ -104,12 +104,14 @@ impl UserMessage { const OPEN_FILES_TAG: &str = ""; const OPEN_SYMBOLS_TAG: &str = ""; const OPEN_THREADS_TAG: &str = ""; + const OPEN_FETCH_TAG: &str = ""; const OPEN_RULES_TAG: &str = "\nThe user has specified the following rules that should be applied:\n"; let mut file_context = OPEN_FILES_TAG.to_string(); let mut symbol_context = OPEN_SYMBOLS_TAG.to_string(); let mut thread_context = OPEN_THREADS_TAG.to_string(); + let mut fetch_context = OPEN_FETCH_TAG.to_string(); let mut rules_context = OPEN_RULES_TAG.to_string(); for chunk in &self.content { @@ -122,21 +124,40 @@ impl UserMessage { } UserMessageContent::Mention { uri, content } => { match uri { - MentionUri::File(path) | MentionUri::Symbol(path, _) => { + MentionUri::File(path) => { write!( &mut symbol_context, "\n{}", MarkdownCodeBlock { - tag: &codeblock_tag(&path), + tag: &codeblock_tag(&path, None), text: &content.to_string(), } ) .ok(); } - MentionUri::Thread(_session_id) => { + MentionUri::Symbol { + path, line_range, .. + } + | MentionUri::Selection { + path, line_range, .. + } => { + write!( + &mut rules_context, + "\n{}", + MarkdownCodeBlock { + tag: &codeblock_tag(&path, Some(line_range)), + text: &content + } + ) + .ok(); + } + MentionUri::Thread { .. } => { write!(&mut thread_context, "\n{}\n", content).ok(); } - MentionUri::Rule(_user_prompt_id) => { + MentionUri::TextThread { .. } => { + write!(&mut thread_context, "\n{}\n", content).ok(); + } + MentionUri::Rule { .. } => { write!( &mut rules_context, "\n{}", @@ -147,9 +168,12 @@ impl UserMessage { ) .ok(); } + MentionUri::Fetch { url } => { + write!(&mut fetch_context, "\nFetch: {}\n\n{}", url, content).ok(); + } } - language_model::MessageContent::Text(uri.to_link()) + language_model::MessageContent::Text(uri.as_link().to_string()) } }; @@ -179,6 +203,13 @@ impl UserMessage { .push(language_model::MessageContent::Text(thread_context)); } + if fetch_context.len() > OPEN_FETCH_TAG.len() { + fetch_context.push_str("\n"); + message + .content + .push(language_model::MessageContent::Text(fetch_context)); + } + if rules_context.len() > OPEN_RULES_TAG.len() { rules_context.push_str("\n"); message @@ -200,6 +231,26 @@ impl UserMessage { } } +fn codeblock_tag(full_path: &Path, line_range: Option<&Range>) -> String { + let mut result = String::new(); + + if let Some(extension) = full_path.extension().and_then(|ext| ext.to_str()) { + let _ = write!(result, "{} ", extension); + } + + let _ = write!(result, "{}", full_path.display()); + + if let Some(range) = line_range { + if range.start == range.end { + let _ = write!(result, ":{}", range.start + 1); + } else { + let _ = write!(result, ":{}-{}", range.start + 1, range.end + 1); + } + } + + result +} + impl AgentMessage { pub fn to_markdown(&self) -> String { let mut markdown = String::from("## Assistant\n\n"); @@ -1367,18 +1418,6 @@ impl std::ops::DerefMut for ToolCallEventStreamReceiver { } } -fn codeblock_tag(full_path: &Path) -> String { - let mut result = String::new(); - - if let Some(extension) = full_path.extension().and_then(|ext| ext.to_str()) { - let _ = write!(result, "{} ", extension); - } - - let _ = write!(result, "{}", full_path.display()); - - result -} - impl From<&str> for UserMessageContent { fn from(text: &str) -> Self { Self::Text(text.into()) diff --git a/crates/agent_ui/Cargo.toml b/crates/agent_ui/Cargo.toml index de0a27c2cb..b6a5710aa4 100644 --- a/crates/agent_ui/Cargo.toml +++ b/crates/agent_ui/Cargo.toml @@ -93,6 +93,7 @@ time.workspace = true time_format.workspace = true ui.workspace = true ui_input.workspace = true +url.workspace = true urlencoding.workspace = true util.workspace = true uuid.workspace = true @@ -102,6 +103,8 @@ workspace.workspace = true zed_actions.workspace = true [dev-dependencies] +agent = { workspace = true, features = ["test-support"] } +assistant_context = { workspace = true, features = ["test-support"] } assistant_tools.workspace = true buffer_diff = { workspace = true, features = ["test-support"] } editor = { workspace = true, features = ["test-support"] } diff --git a/crates/agent_ui/src/acp/completion_provider.rs b/crates/agent_ui/src/acp/completion_provider.rs index 3c2bea53a7..46c8aa92f1 100644 --- a/crates/agent_ui/src/acp/completion_provider.rs +++ b/crates/agent_ui/src/acp/completion_provider.rs @@ -3,71 +3,184 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use std::sync::atomic::AtomicBool; -use acp_thread::MentionUri; -use anyhow::{Context as _, Result}; -use collections::HashMap; +use acp_thread::{MentionUri, selection_name}; +use anyhow::{Context as _, Result, anyhow}; +use collections::{HashMap, HashSet}; use editor::display_map::CreaseId; -use editor::{CompletionProvider, Editor, ExcerptId}; +use editor::{CompletionProvider, Editor, ExcerptId, ToOffset as _}; use file_icons::FileIcons; use futures::future::try_join_all; +use fuzzy::{StringMatch, StringMatchCandidate}; use gpui::{App, Entity, Task, WeakEntity}; +use http_client::HttpClientWithUrl; +use itertools::Itertools as _; use language::{Buffer, CodeLabel, HighlightId}; use lsp::CompletionContext; use parking_lot::Mutex; -use project::{Completion, CompletionIntent, CompletionResponse, Project, ProjectPath, WorktreeId}; +use project::{ + Completion, CompletionIntent, CompletionResponse, Project, ProjectPath, Symbol, WorktreeId, +}; +use prompt_store::PromptStore; use rope::Point; -use text::{Anchor, ToPoint}; +use text::{Anchor, OffsetRangeExt as _, ToPoint as _}; use ui::prelude::*; +use url::Url; use workspace::Workspace; +use workspace::notifications::NotifyResultExt; -use crate::context_picker::MentionLink; -use crate::context_picker::file_context_picker::{extract_file_name_and_directory, search_files}; +use agent::{ + context::RULES_ICON, + thread_store::{TextThreadStore, ThreadStore}, +}; + +use crate::context_picker::fetch_context_picker::fetch_url_content; +use crate::context_picker::file_context_picker::{FileMatch, search_files}; +use crate::context_picker::rules_context_picker::{RulesContextEntry, search_rules}; +use crate::context_picker::symbol_context_picker::SymbolMatch; +use crate::context_picker::symbol_context_picker::search_symbols; +use crate::context_picker::thread_context_picker::{ + ThreadContextEntry, ThreadMatch, search_threads, +}; +use crate::context_picker::{ + ContextPickerAction, ContextPickerEntry, ContextPickerMode, RecentEntry, + available_context_picker_entries, recent_context_picker_entries, selection_ranges, +}; #[derive(Default)] pub struct MentionSet { - paths_by_crease_id: HashMap, + uri_by_crease_id: HashMap, + fetch_results: HashMap, } impl MentionSet { - pub fn insert(&mut self, crease_id: CreaseId, path: PathBuf) { - self.paths_by_crease_id - .insert(crease_id, MentionUri::File(path)); + pub fn insert(&mut self, crease_id: CreaseId, uri: MentionUri) { + self.uri_by_crease_id.insert(crease_id, uri); + } + + pub fn add_fetch_result(&mut self, url: Url, content: String) { + self.fetch_results.insert(url, content); } pub fn drain(&mut self) -> impl Iterator { - self.paths_by_crease_id.drain().map(|(id, _)| id) + self.fetch_results.clear(); + self.uri_by_crease_id.drain().map(|(id, _)| id) } pub fn contents( &self, project: Entity, + thread_store: Entity, + text_thread_store: Entity, + window: &mut Window, cx: &mut App, ) -> Task>> { let contents = self - .paths_by_crease_id + .uri_by_crease_id .iter() - .map(|(crease_id, uri)| match uri { - MentionUri::File(path) => { - let crease_id = *crease_id; - let uri = uri.clone(); - let path = path.to_path_buf(); - let buffer_task = project.update(cx, |project, cx| { - let path = project - .find_project_path(path, cx) - .context("Failed to find project path")?; - anyhow::Ok(project.open_buffer(path, cx)) - }); + .map(|(&crease_id, uri)| { + match uri { + MentionUri::File(path) => { + let uri = uri.clone(); + let path = path.to_path_buf(); + let buffer_task = project.update(cx, |project, cx| { + let path = project + .find_project_path(path, cx) + .context("Failed to find project path")?; + anyhow::Ok(project.open_buffer(path, cx)) + }); - cx.spawn(async move |cx| { - let buffer = buffer_task?.await?; - let content = buffer.read_with(cx, |buffer, _cx| buffer.text())?; + cx.spawn(async move |cx| { + let buffer = buffer_task?.await?; + let content = buffer.read_with(cx, |buffer, _cx| buffer.text())?; - anyhow::Ok((crease_id, Mention { uri, content })) - }) - } - _ => { - // TODO - unimplemented!() + anyhow::Ok((crease_id, Mention { uri, content })) + }) + } + MentionUri::Symbol { + path, line_range, .. + } + | MentionUri::Selection { + path, line_range, .. + } => { + let uri = uri.clone(); + let path_buf = path.clone(); + let line_range = line_range.clone(); + + let buffer_task = project.update(cx, |project, cx| { + let path = project + .find_project_path(&path_buf, cx) + .context("Failed to find project path")?; + anyhow::Ok(project.open_buffer(path, cx)) + }); + + cx.spawn(async move |cx| { + let buffer = buffer_task?.await?; + let content = buffer.read_with(cx, |buffer, _cx| { + buffer + .text_for_range( + Point::new(line_range.start, 0) + ..Point::new( + line_range.end, + buffer.line_len(line_range.end), + ), + ) + .collect() + })?; + + anyhow::Ok((crease_id, Mention { uri, content })) + }) + } + MentionUri::Thread { id: thread_id, .. } => { + let open_task = thread_store.update(cx, |thread_store, cx| { + thread_store.open_thread(&thread_id, window, cx) + }); + + let uri = uri.clone(); + cx.spawn(async move |cx| { + let thread = open_task.await?; + let content = thread.read_with(cx, |thread, _cx| { + thread.latest_detailed_summary_or_text().to_string() + })?; + + anyhow::Ok((crease_id, Mention { uri, content })) + }) + } + MentionUri::TextThread { path, .. } => { + let context = text_thread_store.update(cx, |text_thread_store, cx| { + text_thread_store.open_local_context(path.as_path().into(), cx) + }); + let uri = uri.clone(); + cx.spawn(async move |cx| { + let context = context.await?; + let xml = context.update(cx, |context, cx| context.to_xml(cx))?; + anyhow::Ok((crease_id, Mention { uri, content: xml })) + }) + } + MentionUri::Rule { id: prompt_id, .. } => { + let Some(prompt_store) = thread_store.read(cx).prompt_store().clone() + else { + return Task::ready(Err(anyhow!("missing prompt store"))); + }; + let text_task = prompt_store.read(cx).load(*prompt_id, cx); + let uri = uri.clone(); + cx.spawn(async move |_| { + // TODO: report load errors instead of just logging + let text = text_task.await?; + anyhow::Ok((crease_id, Mention { uri, content: text })) + }) + } + MentionUri::Fetch { url } => { + let Some(content) = self.fetch_results.get(&url) else { + return Task::ready(Err(anyhow!("missing fetch result"))); + }; + Task::ready(Ok(( + crease_id, + Mention { + uri: uri.clone(), + content: content.clone(), + }, + ))) + } } }) .collect::>(); @@ -79,30 +192,458 @@ impl MentionSet { } } +#[derive(Debug)] pub struct Mention { pub uri: MentionUri, pub content: String, } +pub(crate) enum Match { + File(FileMatch), + Symbol(SymbolMatch), + Thread(ThreadMatch), + Fetch(SharedString), + Rules(RulesContextEntry), + Entry(EntryMatch), +} + +pub struct EntryMatch { + mat: Option, + entry: ContextPickerEntry, +} + +impl Match { + pub fn score(&self) -> f64 { + match self { + Match::File(file) => file.mat.score, + Match::Entry(mode) => mode.mat.as_ref().map(|mat| mat.score).unwrap_or(1.), + Match::Thread(_) => 1., + Match::Symbol(_) => 1., + Match::Rules(_) => 1., + Match::Fetch(_) => 1., + } + } +} + +fn search( + mode: Option, + query: String, + cancellation_flag: Arc, + recent_entries: Vec, + prompt_store: Option>, + thread_store: WeakEntity, + text_thread_context_store: WeakEntity, + workspace: Entity, + cx: &mut App, +) -> Task> { + match mode { + Some(ContextPickerMode::File) => { + let search_files_task = + search_files(query.clone(), cancellation_flag.clone(), &workspace, cx); + cx.background_spawn(async move { + search_files_task + .await + .into_iter() + .map(Match::File) + .collect() + }) + } + + Some(ContextPickerMode::Symbol) => { + let search_symbols_task = + search_symbols(query.clone(), cancellation_flag.clone(), &workspace, cx); + cx.background_spawn(async move { + search_symbols_task + .await + .into_iter() + .map(Match::Symbol) + .collect() + }) + } + + Some(ContextPickerMode::Thread) => { + if let Some((thread_store, context_store)) = thread_store + .upgrade() + .zip(text_thread_context_store.upgrade()) + { + let search_threads_task = search_threads( + query.clone(), + cancellation_flag.clone(), + thread_store, + context_store, + cx, + ); + cx.background_spawn(async move { + search_threads_task + .await + .into_iter() + .map(Match::Thread) + .collect() + }) + } else { + Task::ready(Vec::new()) + } + } + + Some(ContextPickerMode::Fetch) => { + if !query.is_empty() { + Task::ready(vec![Match::Fetch(query.into())]) + } else { + Task::ready(Vec::new()) + } + } + + Some(ContextPickerMode::Rules) => { + if let Some(prompt_store) = prompt_store.as_ref() { + let search_rules_task = + search_rules(query.clone(), cancellation_flag.clone(), prompt_store, cx); + cx.background_spawn(async move { + search_rules_task + .await + .into_iter() + .map(Match::Rules) + .collect::>() + }) + } else { + Task::ready(Vec::new()) + } + } + + None => { + if query.is_empty() { + let mut matches = recent_entries + .into_iter() + .map(|entry| match entry { + RecentEntry::File { + project_path, + path_prefix, + } => Match::File(FileMatch { + mat: fuzzy::PathMatch { + score: 1., + positions: Vec::new(), + worktree_id: project_path.worktree_id.to_usize(), + path: project_path.path, + path_prefix, + is_dir: false, + distance_to_relative_ancestor: 0, + }, + is_recent: true, + }), + RecentEntry::Thread(thread_context_entry) => Match::Thread(ThreadMatch { + thread: thread_context_entry, + is_recent: true, + }), + }) + .collect::>(); + + matches.extend( + available_context_picker_entries( + &prompt_store, + &Some(thread_store.clone()), + &workspace, + cx, + ) + .into_iter() + .map(|mode| { + Match::Entry(EntryMatch { + entry: mode, + mat: None, + }) + }), + ); + + Task::ready(matches) + } else { + let executor = cx.background_executor().clone(); + + let search_files_task = + search_files(query.clone(), cancellation_flag.clone(), &workspace, cx); + + let entries = available_context_picker_entries( + &prompt_store, + &Some(thread_store.clone()), + &workspace, + cx, + ); + let entry_candidates = entries + .iter() + .enumerate() + .map(|(ix, entry)| StringMatchCandidate::new(ix, entry.keyword())) + .collect::>(); + + cx.background_spawn(async move { + let mut matches = search_files_task + .await + .into_iter() + .map(Match::File) + .collect::>(); + + let entry_matches = fuzzy::match_strings( + &entry_candidates, + &query, + false, + true, + 100, + &Arc::new(AtomicBool::default()), + executor, + ) + .await; + + matches.extend(entry_matches.into_iter().map(|mat| { + Match::Entry(EntryMatch { + entry: entries[mat.candidate_id], + mat: Some(mat), + }) + })); + + matches.sort_by(|a, b| { + b.score() + .partial_cmp(&a.score()) + .unwrap_or(std::cmp::Ordering::Equal) + }); + + matches + }) + } + } + } +} + pub struct ContextPickerCompletionProvider { - workspace: WeakEntity, - editor: WeakEntity, mention_set: Arc>, + workspace: WeakEntity, + thread_store: WeakEntity, + text_thread_store: WeakEntity, + editor: WeakEntity, } impl ContextPickerCompletionProvider { pub fn new( mention_set: Arc>, workspace: WeakEntity, + thread_store: WeakEntity, + text_thread_store: WeakEntity, editor: WeakEntity, ) -> Self { Self { mention_set, workspace, + thread_store, + text_thread_store, editor, } } + fn completion_for_entry( + entry: ContextPickerEntry, + excerpt_id: ExcerptId, + source_range: Range, + editor: Entity, + mention_set: Arc>, + workspace: &Entity, + cx: &mut App, + ) -> Option { + match entry { + ContextPickerEntry::Mode(mode) => Some(Completion { + replace_range: source_range.clone(), + new_text: format!("@{} ", mode.keyword()), + label: CodeLabel::plain(mode.label().to_string(), None), + icon_path: Some(mode.icon().path().into()), + documentation: None, + source: project::CompletionSource::Custom, + insert_text_mode: None, + // This ensures that when a user accepts this completion, the + // completion menu will still be shown after "@category " is + // inserted + confirm: Some(Arc::new(|_, _, _| true)), + }), + ContextPickerEntry::Action(action) => { + let (new_text, on_action) = match action { + ContextPickerAction::AddSelections => { + let selections = selection_ranges(workspace, cx); + + const PLACEHOLDER: &str = "selection "; + + let new_text = std::iter::repeat(PLACEHOLDER) + .take(selections.len()) + .chain(std::iter::once("")) + .join(" "); + + let callback = Arc::new({ + let mention_set = mention_set.clone(); + let selections = selections.clone(); + move |_, window: &mut Window, cx: &mut App| { + let editor = editor.clone(); + let mention_set = mention_set.clone(); + let selections = selections.clone(); + window.defer(cx, move |window, cx| { + let mut current_offset = 0; + + for (buffer, selection_range) in selections { + let snapshot = + editor.read(cx).buffer().read(cx).snapshot(cx); + let Some(start) = snapshot + .anchor_in_excerpt(excerpt_id, source_range.start) + else { + return; + }; + + let offset = start.to_offset(&snapshot) + current_offset; + let text_len = PLACEHOLDER.len() - 1; + + let range = snapshot.anchor_after(offset) + ..snapshot.anchor_after(offset + text_len); + + let path = buffer + .read(cx) + .file() + .map_or(PathBuf::from("untitled"), |file| { + file.path().to_path_buf() + }); + + let point_range = snapshot + .as_singleton() + .map(|(_, _, snapshot)| { + selection_range.to_point(&snapshot) + }) + .unwrap_or_default(); + let line_range = point_range.start.row..point_range.end.row; + let crease = crate::context_picker::crease_for_mention( + selection_name(&path, &line_range).into(), + IconName::Reader.path().into(), + range, + editor.downgrade(), + ); + + let [crease_id]: [_; 1] = + editor.update(cx, |editor, cx| { + let crease_ids = + editor.insert_creases(vec![crease.clone()], cx); + editor.fold_creases( + vec![crease], + false, + window, + cx, + ); + crease_ids.try_into().unwrap() + }); + + mention_set.lock().insert( + crease_id, + MentionUri::Selection { path, line_range }, + ); + + current_offset += text_len + 1; + } + }); + + false + } + }); + + (new_text, callback) + } + }; + + Some(Completion { + replace_range: source_range.clone(), + new_text, + label: CodeLabel::plain(action.label().to_string(), None), + icon_path: Some(action.icon().path().into()), + documentation: None, + source: project::CompletionSource::Custom, + insert_text_mode: None, + // This ensures that when a user accepts this completion, the + // completion menu will still be shown after "@category " is + // inserted + confirm: Some(on_action), + }) + } + } + } + + fn completion_for_thread( + thread_entry: ThreadContextEntry, + excerpt_id: ExcerptId, + source_range: Range, + recent: bool, + editor: Entity, + mention_set: Arc>, + ) -> Completion { + let icon_for_completion = if recent { + IconName::HistoryRerun + } else { + IconName::Thread + }; + + let uri = match &thread_entry { + ThreadContextEntry::Thread { id, title } => MentionUri::Thread { + id: id.clone(), + name: title.to_string(), + }, + ThreadContextEntry::Context { path, title } => MentionUri::TextThread { + path: path.to_path_buf(), + name: title.to_string(), + }, + }; + let new_text = format!("{} ", uri.as_link()); + + let new_text_len = new_text.len(); + Completion { + replace_range: source_range.clone(), + new_text, + label: CodeLabel::plain(thread_entry.title().to_string(), None), + documentation: None, + insert_text_mode: None, + source: project::CompletionSource::Custom, + icon_path: Some(icon_for_completion.path().into()), + confirm: Some(confirm_completion_callback( + IconName::Thread.path().into(), + thread_entry.title().clone(), + excerpt_id, + source_range.start, + new_text_len - 1, + editor.clone(), + mention_set, + uri, + )), + } + } + + fn completion_for_rules( + rule: RulesContextEntry, + excerpt_id: ExcerptId, + source_range: Range, + editor: Entity, + mention_set: Arc>, + ) -> Completion { + let uri = MentionUri::Rule { + id: rule.prompt_id.into(), + name: rule.title.to_string(), + }; + let new_text = format!("{} ", uri.as_link()); + let new_text_len = new_text.len(); + Completion { + replace_range: source_range.clone(), + new_text, + label: CodeLabel::plain(rule.title.to_string(), None), + documentation: None, + insert_text_mode: None, + source: project::CompletionSource::Custom, + icon_path: Some(RULES_ICON.path().into()), + confirm: Some(confirm_completion_callback( + RULES_ICON.path().into(), + rule.title.clone(), + excerpt_id, + source_range.start, + new_text_len - 1, + editor.clone(), + mention_set, + uri, + )), + } + } + pub(crate) fn completion_for_path( project_path: ProjectPath, path_prefix: &str, @@ -114,9 +655,12 @@ impl ContextPickerCompletionProvider { mention_set: Arc>, project: Entity, cx: &App, - ) -> Completion { + ) -> Option { let (file_name, directory) = - extract_file_name_and_directory(&project_path.path, path_prefix); + crate::context_picker::file_context_picker::extract_file_name_and_directory( + &project_path.path, + path_prefix, + ); let label = build_code_label_for_full_path(&file_name, directory.as_ref().map(|s| s.as_ref()), cx); @@ -138,9 +682,12 @@ impl ContextPickerCompletionProvider { crease_icon_path.clone() }; - let new_text = format!("{} ", MentionLink::for_file(&file_name, &full_path)); + let abs_path = project.read(cx).absolute_path(&project_path, cx)?; + + let file_uri = MentionUri::File(abs_path); + let new_text = format!("{} ", file_uri.as_link()); let new_text_len = new_text.len(); - Completion { + Some(Completion { replace_range: source_range.clone(), new_text, label, @@ -151,15 +698,153 @@ impl ContextPickerCompletionProvider { confirm: Some(confirm_completion_callback( crease_icon_path, file_name, - project_path, excerpt_id, source_range.start, new_text_len - 1, editor, - mention_set, - project, + mention_set.clone(), + file_uri, )), - } + }) + } + + fn completion_for_symbol( + symbol: Symbol, + excerpt_id: ExcerptId, + source_range: Range, + editor: Entity, + mention_set: Arc>, + workspace: Entity, + cx: &mut App, + ) -> Option { + let project = workspace.read(cx).project().clone(); + + let label = CodeLabel::plain(symbol.name.clone(), None); + + let abs_path = project.read(cx).absolute_path(&symbol.path, cx)?; + let uri = MentionUri::Symbol { + path: abs_path, + name: symbol.name.clone(), + line_range: symbol.range.start.0.row..symbol.range.end.0.row, + }; + let new_text = format!("{} ", uri.as_link()); + let new_text_len = new_text.len(); + Some(Completion { + replace_range: source_range.clone(), + new_text, + label, + documentation: None, + source: project::CompletionSource::Custom, + icon_path: Some(IconName::Code.path().into()), + insert_text_mode: None, + confirm: Some(confirm_completion_callback( + IconName::Code.path().into(), + symbol.name.clone().into(), + excerpt_id, + source_range.start, + new_text_len - 1, + editor.clone(), + mention_set.clone(), + uri, + )), + }) + } + + fn completion_for_fetch( + source_range: Range, + url_to_fetch: SharedString, + excerpt_id: ExcerptId, + editor: Entity, + mention_set: Arc>, + http_client: Arc, + ) -> Option { + let new_text = format!("@fetch {} ", url_to_fetch.clone()); + let new_text_len = new_text.len(); + Some(Completion { + replace_range: source_range.clone(), + new_text, + label: CodeLabel::plain(url_to_fetch.to_string(), None), + documentation: None, + source: project::CompletionSource::Custom, + icon_path: Some(IconName::ToolWeb.path().into()), + insert_text_mode: None, + confirm: Some({ + let start = source_range.start; + let content_len = new_text_len - 1; + let editor = editor.clone(); + let url_to_fetch = url_to_fetch.clone(); + let source_range = source_range.clone(); + Arc::new(move |_, window, cx| { + let Some(url) = url::Url::parse(url_to_fetch.as_ref()) + .or_else(|_| url::Url::parse(&format!("https://{url_to_fetch}"))) + .notify_app_err(cx) + else { + return false; + }; + let mention_uri = MentionUri::Fetch { url: url.clone() }; + + let editor = editor.clone(); + let mention_set = mention_set.clone(); + let http_client = http_client.clone(); + let source_range = source_range.clone(); + window.defer(cx, move |window, cx| { + let url = url.clone(); + + let Some(crease_id) = crate::context_picker::insert_crease_for_mention( + excerpt_id, + start, + content_len, + url.to_string().into(), + IconName::ToolWeb.path().into(), + editor.clone(), + window, + cx, + ) else { + return; + }; + + let editor = editor.clone(); + let mention_set = mention_set.clone(); + let http_client = http_client.clone(); + let source_range = source_range.clone(); + window + .spawn(cx, async move |cx| { + if let Some(content) = + fetch_url_content(http_client, url.to_string()) + .await + .notify_async_err(cx) + { + mention_set.lock().add_fetch_result(url, content); + mention_set.lock().insert(crease_id, mention_uri.clone()); + } else { + // Remove crease if we failed to fetch + editor + .update(cx, |editor, cx| { + let snapshot = editor.buffer().read(cx).snapshot(cx); + let Some(anchor) = snapshot + .anchor_in_excerpt(excerpt_id, source_range.start) + else { + return; + }; + editor.display_map.update(cx, |display_map, cx| { + display_map.unfold_intersecting( + vec![anchor..anchor], + true, + cx, + ); + }); + editor.remove_creases([crease_id], cx); + }) + .ok(); + } + Some(()) + }) + .detach(); + }); + false + }) + }), + }) } } @@ -206,16 +891,66 @@ impl CompletionProvider for ContextPickerCompletionProvider { }; let project = workspace.read(cx).project().clone(); + let http_client = workspace.read(cx).client().http_client(); let snapshot = buffer.read(cx).snapshot(); let source_range = snapshot.anchor_before(state.source_range.start) ..snapshot.anchor_after(state.source_range.end); + let thread_store = self.thread_store.clone(); + let text_thread_store = self.text_thread_store.clone(); let editor = self.editor.clone(); - let mention_set = self.mention_set.clone(); - let MentionCompletion { argument, .. } = state; + + let MentionCompletion { mode, argument, .. } = state; let query = argument.unwrap_or_else(|| "".to_string()); - let search_task = search_files(query.clone(), Arc::::default(), &workspace, cx); + let (exclude_paths, exclude_threads) = { + let mention_set = self.mention_set.lock(); + + let mut excluded_paths = HashSet::default(); + let mut excluded_threads = HashSet::default(); + + for uri in mention_set.uri_by_crease_id.values() { + match uri { + MentionUri::File(path) => { + excluded_paths.insert(path.clone()); + } + MentionUri::Thread { id, .. } => { + excluded_threads.insert(id.clone()); + } + _ => {} + } + } + + (excluded_paths, excluded_threads) + }; + + let recent_entries = recent_context_picker_entries( + Some(thread_store.clone()), + Some(text_thread_store.clone()), + workspace.clone(), + &exclude_paths, + &exclude_threads, + cx, + ); + + let prompt_store = thread_store + .read_with(cx, |thread_store, _cx| thread_store.prompt_store().clone()) + .ok() + .flatten(); + + let search_task = search( + mode, + query, + Arc::::default(), + recent_entries, + prompt_store, + thread_store.clone(), + text_thread_store.clone(), + workspace.clone(), + cx, + ); + + let mention_set = self.mention_set.clone(); cx.spawn(async move |_, cx| { let matches = search_task.await; @@ -226,25 +961,74 @@ impl CompletionProvider for ContextPickerCompletionProvider { let completions = cx.update(|cx| { matches .into_iter() - .map(|mat| { - let path_match = &mat.mat; - let project_path = ProjectPath { - worktree_id: WorktreeId::from_usize(path_match.worktree_id), - path: path_match.path.clone(), - }; + .filter_map(|mat| match mat { + Match::File(FileMatch { mat, is_recent }) => { + let project_path = ProjectPath { + worktree_id: WorktreeId::from_usize(mat.worktree_id), + path: mat.path.clone(), + }; - Self::completion_for_path( - project_path, - &path_match.path_prefix, - mat.is_recent, - path_match.is_dir, + Self::completion_for_path( + project_path, + &mat.path_prefix, + is_recent, + mat.is_dir, + excerpt_id, + source_range.clone(), + editor.clone(), + mention_set.clone(), + project.clone(), + cx, + ) + } + + Match::Symbol(SymbolMatch { symbol, .. }) => Self::completion_for_symbol( + symbol, excerpt_id, source_range.clone(), editor.clone(), mention_set.clone(), - project.clone(), + workspace.clone(), cx, - ) + ), + + Match::Thread(ThreadMatch { + thread, is_recent, .. + }) => Some(Self::completion_for_thread( + thread, + excerpt_id, + source_range.clone(), + is_recent, + editor.clone(), + mention_set.clone(), + )), + + Match::Rules(user_rules) => Some(Self::completion_for_rules( + user_rules, + excerpt_id, + source_range.clone(), + editor.clone(), + mention_set.clone(), + )), + + Match::Fetch(url) => Self::completion_for_fetch( + source_range.clone(), + url, + excerpt_id, + editor.clone(), + mention_set.clone(), + http_client.clone(), + ), + + Match::Entry(EntryMatch { entry, .. }) => Self::completion_for_entry( + entry, + excerpt_id, + source_range.clone(), + editor.clone(), + mention_set.clone(), + &workspace, + cx, + ), }) .collect() })?; @@ -296,23 +1080,21 @@ impl CompletionProvider for ContextPickerCompletionProvider { fn confirm_completion_callback( crease_icon_path: SharedString, crease_text: SharedString, - project_path: ProjectPath, excerpt_id: ExcerptId, start: Anchor, content_len: usize, editor: Entity, mention_set: Arc>, - project: Entity, + mention_uri: MentionUri, ) -> Arc bool + Send + Sync> { Arc::new(move |_, window, cx| { let crease_text = crease_text.clone(); let crease_icon_path = crease_icon_path.clone(); let editor = editor.clone(); - let project_path = project_path.clone(); let mention_set = mention_set.clone(); - let project = project.clone(); + let mention_uri = mention_uri.clone(); window.defer(cx, move |window, cx| { - let crease_id = crate::context_picker::insert_crease_for_mention( + if let Some(crease_id) = crate::context_picker::insert_crease_for_mention( excerpt_id, start, content_len, @@ -321,14 +1103,8 @@ fn confirm_completion_callback( editor.clone(), window, cx, - ); - - let Some(path) = project.read(cx).absolute_path(&project_path, cx) else { - return; - }; - - if let Some(crease_id) = crease_id { - mention_set.lock().insert(crease_id, path); + ) { + mention_set.lock().insert(crease_id, mention_uri.clone()); } }); false @@ -338,6 +1114,7 @@ fn confirm_completion_callback( #[derive(Debug, Default, PartialEq)] struct MentionCompletion { source_range: Range, + mode: Option, argument: Option, } @@ -357,17 +1134,37 @@ impl MentionCompletion { } let rest_of_line = &line[last_mention_start + 1..]; + + let mut mode = None; let mut argument = None; let mut parts = rest_of_line.split_whitespace(); let mut end = last_mention_start + 1; - if let Some(argument_text) = parts.next() { - end += argument_text.len(); - argument = Some(argument_text.to_string()); + if let Some(mode_text) = parts.next() { + end += mode_text.len(); + + if let Some(parsed_mode) = ContextPickerMode::try_from(mode_text).ok() { + mode = Some(parsed_mode); + } else { + argument = Some(mode_text.to_string()); + } + match rest_of_line[mode_text.len()..].find(|c: char| !c.is_whitespace()) { + Some(whitespace_count) => { + if let Some(argument_text) = parts.next() { + argument = Some(argument_text.to_string()); + end += whitespace_count + argument_text.len(); + } + } + None => { + // Rest of line is entirely whitespace + end += rest_of_line.len() - mode_text.len(); + } + } } Some(Self { source_range: last_mention_start + offset_to_line..end + offset_to_line, + mode, argument, }) } @@ -376,10 +1173,12 @@ impl MentionCompletion { #[cfg(test)] mod tests { use super::*; + use editor::AnchorRangeExt; use gpui::{EventEmitter, FocusHandle, Focusable, TestAppContext, VisualTestContext}; use project::{Project, ProjectPath}; use serde_json::json; use settings::SettingsStore; + use smol::stream::StreamExt as _; use std::{ops::Deref, rc::Rc}; use util::path; use workspace::{AppState, Item}; @@ -392,14 +1191,61 @@ mod tests { MentionCompletion::try_parse("Lorem @", 0), Some(MentionCompletion { source_range: 6..7, + mode: None, argument: None, }) ); + assert_eq!( + MentionCompletion::try_parse("Lorem @file", 0), + Some(MentionCompletion { + source_range: 6..11, + mode: Some(ContextPickerMode::File), + argument: None, + }) + ); + + assert_eq!( + MentionCompletion::try_parse("Lorem @file ", 0), + Some(MentionCompletion { + source_range: 6..12, + mode: Some(ContextPickerMode::File), + argument: None, + }) + ); + + assert_eq!( + MentionCompletion::try_parse("Lorem @file main.rs", 0), + Some(MentionCompletion { + source_range: 6..19, + mode: Some(ContextPickerMode::File), + argument: Some("main.rs".to_string()), + }) + ); + + assert_eq!( + MentionCompletion::try_parse("Lorem @file main.rs ", 0), + Some(MentionCompletion { + source_range: 6..19, + mode: Some(ContextPickerMode::File), + argument: Some("main.rs".to_string()), + }) + ); + + assert_eq!( + MentionCompletion::try_parse("Lorem @file main.rs Ipsum", 0), + Some(MentionCompletion { + source_range: 6..19, + mode: Some(ContextPickerMode::File), + argument: Some("main.rs".to_string()), + }) + ); + assert_eq!( MentionCompletion::try_parse("Lorem @main", 0), Some(MentionCompletion { source_range: 6..11, + mode: None, argument: Some("main".to_string()), }) ); @@ -456,16 +1302,16 @@ mod tests { json!({ "editor": "", "a": { - "one.txt": "", - "two.txt": "", - "three.txt": "", - "four.txt": "" + "one.txt": "1", + "two.txt": "2", + "three.txt": "3", + "four.txt": "4" }, "b": { - "five.txt": "", - "six.txt": "", - "seven.txt": "", - "eight.txt": "", + "five.txt": "5", + "six.txt": "6", + "seven.txt": "7", + "eight.txt": "8", } }), ) @@ -540,12 +1386,17 @@ mod tests { let mention_set = Arc::new(Mutex::new(MentionSet::default())); + let thread_store = cx.new(|cx| ThreadStore::fake(project.clone(), cx)); + let text_thread_store = cx.new(|cx| TextThreadStore::fake(project.clone(), cx)); + let editor_entity = editor.downgrade(); editor.update_in(&mut cx, |editor, window, cx| { window.focus(&editor.focus_handle(cx)); editor.set_completion_provider(Some(Rc::new(ContextPickerCompletionProvider::new( mention_set.clone(), workspace.downgrade(), + thread_store.downgrade(), + text_thread_store.downgrade(), editor_entity, )))); }); @@ -569,22 +1420,10 @@ mod tests { "seven.txt dir/b/", "six.txt dir/b/", "five.txt dir/b/", - "four.txt dir/a/", - "three.txt dir/a/", - "two.txt dir/a/", - "one.txt dir/a/", - "dir ", - "a dir/", - "four.txt dir/a/", - "one.txt dir/a/", - "three.txt dir/a/", - "two.txt dir/a/", - "b dir/", - "eight.txt dir/b/", - "five.txt dir/b/", - "seven.txt dir/b/", - "six.txt dir/b/", - "editor dir/" + "Files & Directories", + "Symbols", + "Threads", + "Fetch" ] ); }); @@ -602,8 +1441,264 @@ mod tests { cx.run_until_parked(); editor.update(&mut cx, |editor, cx| { - assert_eq!(editor.text(cx), "Lorem [@four.txt](@file:dir/a/four.txt) "); + assert_eq!(editor.text(cx), "Lorem @file "); + assert!(editor.has_visible_completions_menu()); }); + + cx.simulate_input("one"); + + editor.update(&mut cx, |editor, cx| { + assert_eq!(editor.text(cx), "Lorem @file one"); + assert!(editor.has_visible_completions_menu()); + assert_eq!(current_completion_labels(editor), vec!["one.txt dir/a/"]); + }); + + editor.update_in(&mut cx, |editor, window, cx| { + assert!(editor.has_visible_completions_menu()); + editor.confirm_completion(&editor::actions::ConfirmCompletion::default(), window, cx); + }); + + editor.update(&mut cx, |editor, cx| { + assert_eq!(editor.text(cx), "Lorem [@one.txt](file:///dir/a/one.txt) "); + assert!(!editor.has_visible_completions_menu()); + assert_eq!( + fold_ranges(editor, cx), + vec![Point::new(0, 6)..Point::new(0, 39)] + ); + }); + + let contents = cx + .update(|window, cx| { + mention_set.lock().contents( + project.clone(), + thread_store.clone(), + text_thread_store.clone(), + window, + cx, + ) + }) + .await + .unwrap() + .into_values() + .collect::>(); + + assert_eq!(contents.len(), 1); + assert_eq!(contents[0].content, "1"); + assert_eq!( + contents[0].uri.to_uri().to_string(), + "file:///dir/a/one.txt" + ); + + cx.simulate_input(" "); + + editor.update(&mut cx, |editor, cx| { + assert_eq!(editor.text(cx), "Lorem [@one.txt](file:///dir/a/one.txt) "); + assert!(!editor.has_visible_completions_menu()); + assert_eq!( + fold_ranges(editor, cx), + vec![Point::new(0, 6)..Point::new(0, 39)] + ); + }); + + cx.simulate_input("Ipsum "); + + editor.update(&mut cx, |editor, cx| { + assert_eq!( + editor.text(cx), + "Lorem [@one.txt](file:///dir/a/one.txt) Ipsum ", + ); + assert!(!editor.has_visible_completions_menu()); + assert_eq!( + fold_ranges(editor, cx), + vec![Point::new(0, 6)..Point::new(0, 39)] + ); + }); + + cx.simulate_input("@file "); + + editor.update(&mut cx, |editor, cx| { + assert_eq!( + editor.text(cx), + "Lorem [@one.txt](file:///dir/a/one.txt) Ipsum @file ", + ); + assert!(editor.has_visible_completions_menu()); + assert_eq!( + fold_ranges(editor, cx), + vec![Point::new(0, 6)..Point::new(0, 39)] + ); + }); + + editor.update_in(&mut cx, |editor, window, cx| { + editor.confirm_completion(&editor::actions::ConfirmCompletion::default(), window, cx); + }); + + cx.run_until_parked(); + + let contents = cx + .update(|window, cx| { + mention_set.lock().contents( + project.clone(), + thread_store.clone(), + text_thread_store.clone(), + window, + cx, + ) + }) + .await + .unwrap() + .into_values() + .collect::>(); + + assert_eq!(contents.len(), 2); + let new_mention = contents + .iter() + .find(|mention| mention.uri.to_uri().to_string() == "file:///dir/b/eight.txt") + .unwrap(); + assert_eq!(new_mention.content, "8"); + + editor.update(&mut cx, |editor, cx| { + assert_eq!( + editor.text(cx), + "Lorem [@one.txt](file:///dir/a/one.txt) Ipsum [@eight.txt](file:///dir/b/eight.txt) " + ); + assert!(!editor.has_visible_completions_menu()); + assert_eq!( + fold_ranges(editor, cx), + vec![ + Point::new(0, 6)..Point::new(0, 39), + Point::new(0, 47)..Point::new(0, 84) + ] + ); + }); + + let plain_text_language = Arc::new(language::Language::new( + language::LanguageConfig { + name: "Plain Text".into(), + matcher: language::LanguageMatcher { + path_suffixes: vec!["txt".to_string()], + ..Default::default() + }, + ..Default::default() + }, + None, + )); + + // Register the language and fake LSP + let language_registry = project.read_with(&cx, |project, _| project.languages().clone()); + language_registry.add(plain_text_language); + + let mut fake_language_servers = language_registry.register_fake_lsp( + "Plain Text", + language::FakeLspAdapter { + capabilities: lsp::ServerCapabilities { + workspace_symbol_provider: Some(lsp::OneOf::Left(true)), + ..Default::default() + }, + ..Default::default() + }, + ); + + // Open the buffer to trigger LSP initialization + let buffer = project + .update(&mut cx, |project, cx| { + project.open_local_buffer(path!("/dir/a/one.txt"), cx) + }) + .await + .unwrap(); + + // Register the buffer with language servers + let _handle = project.update(&mut cx, |project, cx| { + project.register_buffer_with_language_servers(&buffer, cx) + }); + + cx.run_until_parked(); + + let fake_language_server = fake_language_servers.next().await.unwrap(); + fake_language_server.set_request_handler::( + |_, _| async move { + Ok(Some(lsp::WorkspaceSymbolResponse::Flat(vec![ + #[allow(deprecated)] + lsp::SymbolInformation { + name: "MySymbol".into(), + location: lsp::Location { + uri: lsp::Url::from_file_path(path!("/dir/a/one.txt")).unwrap(), + range: lsp::Range::new( + lsp::Position::new(0, 0), + lsp::Position::new(0, 1), + ), + }, + kind: lsp::SymbolKind::CONSTANT, + tags: None, + container_name: None, + deprecated: None, + }, + ]))) + }, + ); + + cx.simulate_input("@symbol "); + + editor.update(&mut cx, |editor, cx| { + assert_eq!( + editor.text(cx), + "Lorem [@one.txt](file:///dir/a/one.txt) Ipsum [@eight.txt](file:///dir/b/eight.txt) @symbol " + ); + assert!(editor.has_visible_completions_menu()); + assert_eq!( + current_completion_labels(editor), + &[ + "MySymbol", + ] + ); + }); + + editor.update_in(&mut cx, |editor, window, cx| { + editor.confirm_completion(&editor::actions::ConfirmCompletion::default(), window, cx); + }); + + let contents = cx + .update(|window, cx| { + mention_set.lock().contents( + project.clone(), + thread_store, + text_thread_store, + window, + cx, + ) + }) + .await + .unwrap() + .into_values() + .collect::>(); + + assert_eq!(contents.len(), 3); + let new_mention = contents + .iter() + .find(|mention| { + mention.uri.to_uri().to_string() == "file:///dir/a/one.txt?symbol=MySymbol#L1:1" + }) + .unwrap(); + assert_eq!(new_mention.content, "1"); + + cx.run_until_parked(); + + editor.read_with(&mut cx, |editor, cx| { + assert_eq!( + editor.text(cx), + "Lorem [@one.txt](file:///dir/a/one.txt) Ipsum [@eight.txt](file:///dir/b/eight.txt) [@MySymbol](file:///dir/a/one.txt?symbol=MySymbol#L1:1) " + ); + }); + } + + fn fold_ranges(editor: &Editor, cx: &mut App) -> Vec> { + let snapshot = editor.buffer().read(cx).snapshot(cx); + editor.display_map.update(cx, |display_map, cx| { + display_map + .snapshot(cx) + .folds_in_range(0..snapshot.len()) + .map(|fold| fold.range.to_point(&snapshot)) + .collect() + }) } fn current_completion_labels(editor: &Editor) -> Vec { diff --git a/crates/agent_ui/src/acp/message_history.rs b/crates/agent_ui/src/acp/message_history.rs index c6106c7578..c8280573a0 100644 --- a/crates/agent_ui/src/acp/message_history.rs +++ b/crates/agent_ui/src/acp/message_history.rs @@ -45,12 +45,8 @@ impl MessageHistory { None }) } - - #[cfg(test)] - pub fn items(&self) -> &[T] { - &self.items - } } + #[cfg(test)] mod tests { use super::*; diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 0b3ace1baf..3aefae7265 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -4,15 +4,17 @@ use acp_thread::{ }; use acp_thread::{AgentConnection, Plan}; use action_log::ActionLog; +use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol as acp; use agent_servers::AgentServer; use agent_settings::{AgentSettings, NotifyWhenAgentWaiting}; use audio::{Audio, Sound}; use buffer_diff::BufferDiff; use collections::{HashMap, HashSet}; +use editor::scroll::Autoscroll; use editor::{ AnchorRangeExt, ContextMenuOptions, ContextMenuPlacement, Editor, EditorElement, EditorMode, - EditorStyle, MinimapVisibility, MultiBuffer, PathKey, + EditorStyle, MinimapVisibility, MultiBuffer, PathKey, SelectionEffects, }; use file_icons::FileIcons; use gpui::{ @@ -27,8 +29,10 @@ use language::{Buffer, Language}; use markdown::{HeadingLevelStyles, Markdown, MarkdownElement, MarkdownStyle}; use parking_lot::Mutex; use project::{CompletionIntent, Project}; +use prompt_store::PromptId; use rope::Point; use settings::{Settings as _, SettingsStore}; +use std::fmt::Write as _; use std::path::PathBuf; use std::{ cell::RefCell, collections::BTreeMap, path::Path, process::ExitStatus, rc::Rc, sync::Arc, @@ -44,6 +48,7 @@ use ui::{ use util::{ResultExt, size::format_file_size, time::duration_alt_display}; use workspace::{CollaboratorId, Workspace}; use zed_actions::agent::{Chat, NextHistoryMessage, PreviousHistoryMessage, ToggleModelSelector}; +use zed_actions::assistant::OpenRulesLibrary; use crate::acp::AcpModelSelectorPopover; use crate::acp::completion_provider::{ContextPickerCompletionProvider, MentionSet}; @@ -61,6 +66,8 @@ pub struct AcpThreadView { agent: Rc, workspace: WeakEntity, project: Entity, + thread_store: Entity, + text_thread_store: Entity, thread_state: ThreadState, diff_editors: HashMap>, terminal_views: HashMap>, @@ -108,6 +115,8 @@ impl AcpThreadView { agent: Rc, workspace: WeakEntity, project: Entity, + thread_store: Entity, + text_thread_store: Entity, message_history: Rc>>>, min_lines: usize, max_lines: Option, @@ -145,6 +154,8 @@ impl AcpThreadView { editor.set_completion_provider(Some(Rc::new(ContextPickerCompletionProvider::new( mention_set.clone(), workspace.clone(), + thread_store.downgrade(), + text_thread_store.downgrade(), cx.weak_entity(), )))); editor.set_context_menu_options(ContextMenuOptions { @@ -188,6 +199,8 @@ impl AcpThreadView { agent: agent.clone(), workspace: workspace.clone(), project: project.clone(), + thread_store, + text_thread_store, thread_state: Self::initial_state(agent, workspace, project, window, cx), message_editor, model_selector: None, @@ -401,7 +414,13 @@ impl AcpThreadView { let mut chunks: Vec = Vec::new(); let project = self.project.clone(); - let contents = self.mention_set.lock().contents(project, cx); + let thread_store = self.thread_store.clone(); + let text_thread_store = self.text_thread_store.clone(); + + let contents = + self.mention_set + .lock() + .contents(project, thread_store, text_thread_store, window, cx); cx.spawn_in(window, async move |this, cx| { let contents = match contents.await { @@ -439,7 +458,7 @@ impl AcpThreadView { acp::TextResourceContents { mime_type: None, text: mention.content.clone(), - uri: mention.uri.to_uri(), + uri: mention.uri.to_uri().to_string(), }, ), })); @@ -614,8 +633,7 @@ impl AcpThreadView { let path = PathBuf::from(&resource.uri); let project_path = project.read(cx).project_path_for_absolute_path(&path, cx); let start = text.len(); - let content = MentionUri::File(path).to_uri(); - text.push_str(&content); + let _ = write!(&mut text, "{}", MentionUri::File(path).to_uri()); let end = text.len(); if let Some(project_path) = project_path { let filename: SharedString = project_path @@ -663,7 +681,9 @@ impl AcpThreadView { ); if let Some(crease_id) = crease_id { - mention_set.lock().insert(crease_id, project_path); + mention_set + .lock() + .insert(crease_id, MentionUri::File(project_path)); } } } @@ -2698,9 +2718,72 @@ impl AcpThreadView { .detach_and_log_err(cx); } } - _ => { - // TODO - unimplemented!() + MentionUri::Symbol { + path, line_range, .. + } + | MentionUri::Selection { path, line_range } => { + let project = workspace.project(); + let Some((path, _)) = project.update(cx, |project, cx| { + let path = project.find_project_path(path, cx)?; + let entry = project.entry_for_path(&path, cx)?; + Some((path, entry)) + }) else { + return; + }; + + let item = workspace.open_path(path, None, true, window, cx); + window + .spawn(cx, async move |cx| { + let Some(editor) = item.await?.downcast::() else { + return Ok(()); + }; + let range = + Point::new(line_range.start, 0)..Point::new(line_range.start, 0); + editor + .update_in(cx, |editor, window, cx| { + editor.change_selections( + SelectionEffects::scroll(Autoscroll::center()), + window, + cx, + |s| s.select_ranges(vec![range]), + ); + }) + .ok(); + anyhow::Ok(()) + }) + .detach_and_log_err(cx); + } + MentionUri::Thread { id, .. } => { + if let Some(panel) = workspace.panel::(cx) { + panel.update(cx, |panel, cx| { + panel + .open_thread_by_id(&id, window, cx) + .detach_and_log_err(cx) + }); + } + } + MentionUri::TextThread { path, .. } => { + if let Some(panel) = workspace.panel::(cx) { + panel.update(cx, |panel, cx| { + panel + .open_saved_prompt_editor(path.as_path().into(), window, cx) + .detach_and_log_err(cx); + }); + } + } + MentionUri::Rule { id, .. } => { + let PromptId::User { uuid } = id else { + return; + }; + window.dispatch_action( + Box::new(OpenRulesLibrary { + prompt_to_select: Some(uuid.0), + }), + cx, + ) + } + MentionUri::Fetch { url } => { + cx.open_url(url.as_str()); } }) } else { @@ -3090,7 +3173,7 @@ impl AcpThreadView { .unwrap_or(path.path.as_os_str()) .display() .to_string(); - let completion = ContextPickerCompletionProvider::completion_for_path( + let Some(completion) = ContextPickerCompletionProvider::completion_for_path( path, &path_prefix, false, @@ -3101,7 +3184,9 @@ impl AcpThreadView { self.mention_set.clone(), self.project.clone(), cx, - ); + ) else { + continue; + }; self.message_editor.update(cx, |message_editor, cx| { message_editor.edit( @@ -3431,17 +3516,14 @@ fn terminal_command_markdown_style(window: &Window, cx: &App) -> MarkdownStyle { #[cfg(test)] mod tests { + use agent::{TextThreadStore, ThreadStore}; use agent_client_protocol::SessionId; use editor::EditorSettings; use fs::FakeFs; use futures::future::try_join_all; use gpui::{SemanticVersion, TestAppContext, VisualTestContext}; - use lsp::{CompletionContext, CompletionTriggerKind}; - use project::CompletionIntent; use rand::Rng; - use serde_json::json; use settings::SettingsStore; - use util::path; use super::*; @@ -3554,109 +3636,6 @@ mod tests { ); } - #[gpui::test] - async fn test_crease_removal(cx: &mut TestAppContext) { - init_test(cx); - - let fs = FakeFs::new(cx.executor()); - fs.insert_tree("/project", json!({"file": ""})).await; - let project = Project::test(fs, [Path::new(path!("/project"))], cx).await; - let agent = StubAgentServer::default(); - let (workspace, cx) = - cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); - let thread_view = cx.update(|window, cx| { - cx.new(|cx| { - AcpThreadView::new( - Rc::new(agent), - workspace.downgrade(), - project, - Rc::new(RefCell::new(MessageHistory::default())), - 1, - None, - window, - cx, - ) - }) - }); - - cx.run_until_parked(); - - let message_editor = cx.read(|cx| thread_view.read(cx).message_editor.clone()); - let excerpt_id = message_editor.update(cx, |editor, cx| { - editor - .buffer() - .read(cx) - .excerpt_ids() - .into_iter() - .next() - .unwrap() - }); - let completions = message_editor.update_in(cx, |editor, window, cx| { - editor.set_text("Hello @", window, cx); - let buffer = editor.buffer().read(cx).as_singleton().unwrap(); - let completion_provider = editor.completion_provider().unwrap(); - completion_provider.completions( - excerpt_id, - &buffer, - Anchor::MAX, - CompletionContext { - trigger_kind: CompletionTriggerKind::TRIGGER_CHARACTER, - trigger_character: Some("@".into()), - }, - window, - cx, - ) - }); - let [_, completion]: [_; 2] = completions - .await - .unwrap() - .into_iter() - .flat_map(|response| response.completions) - .collect::>() - .try_into() - .unwrap(); - - message_editor.update_in(cx, |editor, window, cx| { - let snapshot = editor.buffer().read(cx).snapshot(cx); - let start = snapshot - .anchor_in_excerpt(excerpt_id, completion.replace_range.start) - .unwrap(); - let end = snapshot - .anchor_in_excerpt(excerpt_id, completion.replace_range.end) - .unwrap(); - editor.edit([(start..end, completion.new_text)], cx); - (completion.confirm.unwrap())(CompletionIntent::Complete, window, cx); - }); - - cx.run_until_parked(); - - // Backspace over the inserted crease (and the following space). - message_editor.update_in(cx, |editor, window, cx| { - editor.backspace(&Default::default(), window, cx); - editor.backspace(&Default::default(), window, cx); - }); - - thread_view.update_in(cx, |thread_view, window, cx| { - thread_view.chat(&Chat, window, cx); - }); - - cx.run_until_parked(); - - let content = thread_view.update_in(cx, |thread_view, _window, _cx| { - thread_view - .message_history - .borrow() - .items() - .iter() - .flatten() - .cloned() - .collect::>() - }); - - // We don't send a resource link for the deleted crease. - pretty_assertions::assert_matches!(content.as_slice(), [acp::ContentBlock::Text { .. }]); - } - async fn setup_thread_view( agent: impl AgentServer + 'static, cx: &mut TestAppContext, @@ -3666,12 +3645,19 @@ mod tests { let (workspace, cx) = cx.add_window_view(|window, cx| Workspace::test_new(project.clone(), window, cx)); + let thread_store = + cx.update(|_window, cx| cx.new(|cx| ThreadStore::fake(project.clone(), cx))); + let text_thread_store = + cx.update(|_window, cx| cx.new(|cx| TextThreadStore::fake(project.clone(), cx))); + let thread_view = cx.update(|window, cx| { cx.new(|cx| { AcpThreadView::new( Rc::new(agent), workspace.downgrade(), project, + thread_store.clone(), + text_thread_store.clone(), Rc::new(RefCell::new(MessageHistory::default())), 1, None, diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index a641d62296..9aeb7867ac 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -973,6 +973,9 @@ impl AgentPanel { agent: crate::ExternalAgent, } + let thread_store = self.thread_store.clone(); + let text_thread_store = self.context_store.clone(); + cx.spawn_in(window, async move |this, cx| { let server: Rc = match agent_choice { Some(agent) => { @@ -1011,6 +1014,8 @@ impl AgentPanel { server, workspace.clone(), project, + thread_store.clone(), + text_thread_store.clone(), message_history, MIN_EDITOR_LINES, Some(MAX_EDITOR_LINES), diff --git a/crates/agent_ui/src/context_picker.rs b/crates/agent_ui/src/context_picker.rs index 58f11313e6..7dc00bfae2 100644 --- a/crates/agent_ui/src/context_picker.rs +++ b/crates/agent_ui/src/context_picker.rs @@ -1,15 +1,16 @@ mod completion_provider; -mod fetch_context_picker; +pub(crate) mod fetch_context_picker; pub(crate) mod file_context_picker; -mod rules_context_picker; -mod symbol_context_picker; -mod thread_context_picker; +pub(crate) mod rules_context_picker; +pub(crate) mod symbol_context_picker; +pub(crate) mod thread_context_picker; use std::ops::Range; use std::path::{Path, PathBuf}; use std::sync::Arc; use anyhow::{Result, anyhow}; +use collections::HashSet; pub use completion_provider::ContextPickerCompletionProvider; use editor::display_map::{Crease, CreaseId, CreaseMetadata, FoldId}; use editor::{Anchor, AnchorRangeExt as _, Editor, ExcerptId, FoldPlaceholder, ToOffset}; @@ -45,7 +46,7 @@ use agent::{ }; #[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum ContextPickerEntry { +pub(crate) enum ContextPickerEntry { Mode(ContextPickerMode), Action(ContextPickerAction), } @@ -74,7 +75,7 @@ impl ContextPickerEntry { } #[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum ContextPickerMode { +pub(crate) enum ContextPickerMode { File, Symbol, Fetch, @@ -83,7 +84,7 @@ enum ContextPickerMode { } #[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum ContextPickerAction { +pub(crate) enum ContextPickerAction { AddSelections, } @@ -531,7 +532,7 @@ impl ContextPicker { return vec![]; }; - recent_context_picker_entries( + recent_context_picker_entries_with_store( context_store, self.thread_store.clone(), self.text_thread_store.clone(), @@ -585,7 +586,8 @@ impl Render for ContextPicker { }) } } -enum RecentEntry { + +pub(crate) enum RecentEntry { File { project_path: ProjectPath, path_prefix: Arc, @@ -593,7 +595,7 @@ enum RecentEntry { Thread(ThreadContextEntry), } -fn available_context_picker_entries( +pub(crate) fn available_context_picker_entries( prompt_store: &Option>, thread_store: &Option>, workspace: &Entity, @@ -630,24 +632,56 @@ fn available_context_picker_entries( entries } -fn recent_context_picker_entries( +fn recent_context_picker_entries_with_store( context_store: Entity, thread_store: Option>, text_thread_store: Option>, workspace: Entity, exclude_path: Option, cx: &App, +) -> Vec { + let project = workspace.read(cx).project(); + + let mut exclude_paths = context_store.read(cx).file_paths(cx); + exclude_paths.extend(exclude_path); + + let exclude_paths = exclude_paths + .into_iter() + .filter_map(|project_path| project.read(cx).absolute_path(&project_path, cx)) + .collect(); + + let exclude_threads = context_store.read(cx).thread_ids(); + + recent_context_picker_entries( + thread_store, + text_thread_store, + workspace, + &exclude_paths, + exclude_threads, + cx, + ) +} + +pub(crate) fn recent_context_picker_entries( + thread_store: Option>, + text_thread_store: Option>, + workspace: Entity, + exclude_paths: &HashSet, + exclude_threads: &HashSet, + cx: &App, ) -> Vec { let mut recent = Vec::with_capacity(6); - let mut current_files = context_store.read(cx).file_paths(cx); - current_files.extend(exclude_path); let workspace = workspace.read(cx); let project = workspace.project().read(cx); recent.extend( workspace .recent_navigation_history_iter(cx) - .filter(|(path, _)| !current_files.contains(path)) + .filter(|(_, abs_path)| { + abs_path + .as_ref() + .map_or(true, |path| !exclude_paths.contains(path.as_path())) + }) .take(4) .filter_map(|(project_path, _)| { project @@ -659,8 +693,6 @@ fn recent_context_picker_entries( }), ); - let current_threads = context_store.read(cx).thread_ids(); - let active_thread_id = workspace .panel::(cx) .and_then(|panel| Some(panel.read(cx).active_thread(cx)?.read(cx).id())); @@ -672,7 +704,7 @@ fn recent_context_picker_entries( let mut threads = unordered_thread_entries(thread_store, text_thread_store, cx) .filter(|(_, thread)| match thread { ThreadContextEntry::Thread { id, .. } => { - Some(id) != active_thread_id && !current_threads.contains(id) + Some(id) != active_thread_id && !exclude_threads.contains(id) } ThreadContextEntry::Context { .. } => true, }) @@ -710,7 +742,7 @@ fn add_selections_as_context( }) } -fn selection_ranges( +pub(crate) fn selection_ranges( workspace: &Entity, cx: &mut App, ) -> Vec<(Entity, Range)> { diff --git a/crates/agent_ui/src/context_picker/completion_provider.rs b/crates/agent_ui/src/context_picker/completion_provider.rs index 8123b3437d..962c0df03d 100644 --- a/crates/agent_ui/src/context_picker/completion_provider.rs +++ b/crates/agent_ui/src/context_picker/completion_provider.rs @@ -35,7 +35,7 @@ use super::symbol_context_picker::search_symbols; use super::thread_context_picker::{ThreadContextEntry, ThreadMatch, search_threads}; use super::{ ContextPickerAction, ContextPickerEntry, ContextPickerMode, MentionLink, RecentEntry, - available_context_picker_entries, recent_context_picker_entries, selection_ranges, + available_context_picker_entries, recent_context_picker_entries_with_store, selection_ranges, }; use crate::message_editor::ContextCreasesAddon; @@ -787,7 +787,7 @@ impl CompletionProvider for ContextPickerCompletionProvider { .and_then(|b| b.read(cx).file()) .map(|file| ProjectPath::from_file(file.as_ref(), cx)); - let recent_entries = recent_context_picker_entries( + let recent_entries = recent_context_picker_entries_with_store( context_store.clone(), thread_store.clone(), text_thread_store.clone(), diff --git a/crates/assistant_context/Cargo.toml b/crates/assistant_context/Cargo.toml index 8f5ff98790..45c0072418 100644 --- a/crates/assistant_context/Cargo.toml +++ b/crates/assistant_context/Cargo.toml @@ -11,6 +11,9 @@ workspace = true [lib] path = "src/assistant_context.rs" +[features] +test-support = [] + [dependencies] agent_settings.workspace = true anyhow.workspace = true diff --git a/crates/assistant_context/src/context_store.rs b/crates/assistant_context/src/context_store.rs index 3090a7b234..622d8867a7 100644 --- a/crates/assistant_context/src/context_store.rs +++ b/crates/assistant_context/src/context_store.rs @@ -138,6 +138,27 @@ impl ContextStore { }) } + #[cfg(any(test, feature = "test-support"))] + pub fn fake(project: Entity, cx: &mut Context) -> Self { + Self { + contexts: Default::default(), + contexts_metadata: Default::default(), + context_server_slash_command_ids: Default::default(), + host_contexts: Default::default(), + fs: project.read(cx).fs().clone(), + languages: project.read(cx).languages().clone(), + slash_commands: Arc::default(), + telemetry: project.read(cx).client().telemetry().clone(), + _watch_updates: Task::ready(None), + client: project.read(cx).client(), + project, + project_is_shared: false, + client_subscription: None, + _project_subscriptions: Default::default(), + prompt_builder: Arc::new(PromptBuilder::new(None).unwrap()), + } + } + async fn handle_advertise_contexts( this: Entity, envelope: TypedEnvelope, diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 8a9398e71f..c77262143d 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -12176,6 +12176,8 @@ impl Editor { let clipboard_text = Cow::Borrowed(text); self.transact(window, cx, |this, window, cx| { + let had_active_edit_prediction = this.has_active_edit_prediction(); + if let Some(mut clipboard_selections) = clipboard_selections { let old_selections = this.selections.all::(cx); let all_selections_were_entire_line = @@ -12248,6 +12250,11 @@ impl Editor { } else { this.insert(&clipboard_text, window, cx); } + + let trigger_in_words = + this.show_edit_predictions_in_menu() || !had_active_edit_prediction; + + this.trigger_completion_on_input(&text, trigger_in_words, window, cx); }); } diff --git a/crates/prompt_store/src/prompt_store.rs b/crates/prompt_store/src/prompt_store.rs index f9cb26ed9a..06a65b97cd 100644 --- a/crates/prompt_store/src/prompt_store.rs +++ b/crates/prompt_store/src/prompt_store.rs @@ -90,6 +90,15 @@ impl From for UserPromptId { } } +impl std::fmt::Display for PromptId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + PromptId::User { uuid } => write!(f, "{}", uuid.0), + PromptId::EditWorkflow => write!(f, "Edit workflow"), + } + } +} + pub struct PromptStore { env: heed::Env, metadata_cache: RwLock, From 9be44517cb5db0a63f7d9727d93c034fb8fdcdc6 Mon Sep 17 00:00:00 2001 From: Alvaro Parker <64918109+AlvaroParker@users.noreply.github.com> Date: Wed, 13 Aug 2025 16:24:13 -0400 Subject: [PATCH 22/74] Remove Services menu on non-macOS systems (#36142) Closes #ISSUE image Release Notes: - Remove Services menu on non-macOS systems which was causing an empty menu item being rendered --- crates/zed/src/zed/app_menus.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/zed/src/zed/app_menus.rs b/crates/zed/src/zed/app_menus.rs index 9df55a2fb1..6c7ab0b374 100644 --- a/crates/zed/src/zed/app_menus.rs +++ b/crates/zed/src/zed/app_menus.rs @@ -35,6 +35,7 @@ pub fn app_menus() -> Vec

#lX4AYWo$+6JtC*M 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'Z#uch-%EHK~%Hv`i6C=jM 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