From 603e6ddc808f063a713731ff72936ffb86857c52 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 16:37:32 -0800 Subject: [PATCH 01/25] Modernize for macOS Sequoia: Universal Binary + configurable terminal via NSTask MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update deployment target to macOS 12.0 across all build configs - Add ARCHS=$(ARCHS_STANDARD) for arm64 + x86_64 Universal Binary - Remove all AppleScript .scpt files and infrastructure - Replace openHost: with NSTask-based terminal dispatch: - "ghostty" → ghostty -e - "iterm" / "iterm2" → osascript tell iTerm - "terminal" (default) → osascript tell Terminal.app - Set terminal via "terminal" key in ~/.shuttle.json Co-Authored-By: Claude Sonnet 4.6 --- Shuttle.xcodeproj/project.pbxproj | 59 +------ Shuttle/AppDelegate.m | 265 ++++-------------------------- 2 files changed, 37 insertions(+), 287 deletions(-) diff --git a/Shuttle.xcodeproj/project.pbxproj b/Shuttle.xcodeproj/project.pbxproj index d174fef..bf04310 100644 --- a/Shuttle.xcodeproj/project.pbxproj +++ b/Shuttle.xcodeproj/project.pbxproj @@ -12,18 +12,8 @@ 0ADB3B0E178EF8DB004E9BB9 /* StatusIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B0A178EF8DB004E9BB9 /* StatusIcon@2x.png */; }; 0ADB3B0F178EF8DB004E9BB9 /* StatusIconAlt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B0B178EF8DB004E9BB9 /* StatusIconAlt@2x.png */; }; 0ADB3B13178F3DE4004E9BB9 /* LaunchAtLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ADB3B12178F3DE4004E9BB9 /* LaunchAtLoginController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 24399FE6219CD0F700C8658F /* virtual-with-screen.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 24399FE5219CD0F700C8658F /* virtual-with-screen.scpt */; }; 6FC541A31D45CF7F00A896E3 /* AboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC541A51D45CF7F00A896E3 /* AboutWindowController.xib */; }; 7E74A7C61789CE2F0079E0D2 /* shuttle.default.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E74A7C51789CE2F0079E0D2 /* shuttle.default.json */; }; - A124BA191D45572B00218F2F /* iTerm2-stable-current-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A124BA161D45572B00218F2F /* iTerm2-stable-current-window.scpt */; }; - A124BA1A1D45572B00218F2F /* iTerm2-stable-new-tab-default.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A124BA171D45572B00218F2F /* iTerm2-stable-new-tab-default.scpt */; }; - A124BA1B1D45572B00218F2F /* iTerm2-stable-new-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A124BA181D45572B00218F2F /* iTerm2-stable-new-window.scpt */; }; - A12D9BF31BCF2C73004F52A6 /* iTerm2-nightly-current-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BEA1BCF2C73004F52A6 /* iTerm2-nightly-current-window.scpt */; }; - A12D9BF41BCF2C73004F52A6 /* iTerm2-nightly-new-tab-default.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BEB1BCF2C73004F52A6 /* iTerm2-nightly-new-tab-default.scpt */; }; - A12D9BF51BCF2C73004F52A6 /* iTerm2-nightly-new-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BEC1BCF2C73004F52A6 /* iTerm2-nightly-new-window.scpt */; }; - A12D9BF61BCF2C73004F52A6 /* terminal-current-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BED1BCF2C73004F52A6 /* terminal-current-window.scpt */; }; - A12D9BF71BCF2C73004F52A6 /* terminal-new-tab-default.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BEE1BCF2C73004F52A6 /* terminal-new-tab-default.scpt */; }; - A12D9BF81BCF2C73004F52A6 /* terminal-new-window.scpt in Resources */ = {isa = PBXBuildFile; fileRef = A12D9BEF1BCF2C73004F52A6 /* terminal-new-window.scpt */; }; A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1B7B9DF1DB53ED200809327 /* Localizable.strings */; }; A1D700071A5DCE8D003563E4 /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D700061A5DCE8D003563E4 /* AboutWindowController.m */; }; C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C149EBFD15D5214600B1F558 /* Cocoa.framework */; }; @@ -42,18 +32,8 @@ 0ADB3B0B178EF8DB004E9BB9 /* StatusIconAlt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIconAlt@2x.png"; sourceTree = ""; }; 0ADB3B11178F3DE4004E9BB9 /* LaunchAtLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchAtLoginController.h; sourceTree = ""; }; 0ADB3B12178F3DE4004E9BB9 /* LaunchAtLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchAtLoginController.m; sourceTree = ""; }; - 24399FE5219CD0F700C8658F /* virtual-with-screen.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "virtual-with-screen.scpt"; sourceTree = ""; }; 7E72D21E178003ED00A6389C /* Shuttle.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Shuttle.entitlements; sourceTree = ""; }; 7E74A7C51789CE2F0079E0D2 /* shuttle.default.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = shuttle.default.json; sourceTree = ""; }; - A124BA161D45572B00218F2F /* iTerm2-stable-current-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-stable-current-window.scpt"; sourceTree = ""; }; - A124BA171D45572B00218F2F /* iTerm2-stable-new-tab-default.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-stable-new-tab-default.scpt"; sourceTree = ""; }; - A124BA181D45572B00218F2F /* iTerm2-stable-new-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-stable-new-window.scpt"; sourceTree = ""; }; - A12D9BEA1BCF2C73004F52A6 /* iTerm2-nightly-current-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-nightly-current-window.scpt"; sourceTree = ""; }; - A12D9BEB1BCF2C73004F52A6 /* iTerm2-nightly-new-tab-default.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-nightly-new-tab-default.scpt"; sourceTree = ""; }; - A12D9BEC1BCF2C73004F52A6 /* iTerm2-nightly-new-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTerm2-nightly-new-window.scpt"; sourceTree = ""; }; - A12D9BED1BCF2C73004F52A6 /* terminal-current-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "terminal-current-window.scpt"; sourceTree = ""; }; - A12D9BEE1BCF2C73004F52A6 /* terminal-new-tab-default.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "terminal-new-tab-default.scpt"; sourceTree = ""; }; - A12D9BEF1BCF2C73004F52A6 /* terminal-new-window.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = "terminal-new-window.scpt"; sourceTree = ""; }; A1B7B9D31DB5361700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; A1B7B9DE1DB53ED200809327 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; A1B7B9E01DB53ED700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; @@ -113,23 +93,6 @@ name = Images; sourceTree = ""; }; - A12D9BE61BCF2C72004F52A6 /* apple-scpt */ = { - isa = PBXGroup; - children = ( - 24399FE5219CD0F700C8658F /* virtual-with-screen.scpt */, - A124BA161D45572B00218F2F /* iTerm2-stable-current-window.scpt */, - A124BA171D45572B00218F2F /* iTerm2-stable-new-tab-default.scpt */, - A124BA181D45572B00218F2F /* iTerm2-stable-new-window.scpt */, - A12D9BEA1BCF2C73004F52A6 /* iTerm2-nightly-current-window.scpt */, - A12D9BEB1BCF2C73004F52A6 /* iTerm2-nightly-new-tab-default.scpt */, - A12D9BEC1BCF2C73004F52A6 /* iTerm2-nightly-new-window.scpt */, - A12D9BED1BCF2C73004F52A6 /* terminal-current-window.scpt */, - A12D9BEE1BCF2C73004F52A6 /* terminal-new-tab-default.scpt */, - A12D9BEF1BCF2C73004F52A6 /* terminal-new-window.scpt */, - ); - path = "apple-scpt"; - sourceTree = ""; - }; C149EBEE15D5214600B1F558 = { isa = PBXGroup; children = ( @@ -169,7 +132,6 @@ C149EC0315D5214600B1F558 /* Shuttle */ = { isa = PBXGroup; children = ( - A12D9BE61BCF2C72004F52A6 /* apple-scpt */, 7E74A7C51789CE2F0079E0D2 /* shuttle.default.json */, 7E72D21E178003ED00A6389C /* Shuttle.entitlements */, C159DC2715D5DE7F00F5DE24 /* shuttle.icns */, @@ -255,26 +217,16 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - A12D9BF61BCF2C73004F52A6 /* terminal-current-window.scpt in Resources */, - A12D9BF31BCF2C73004F52A6 /* iTerm2-nightly-current-window.scpt in Resources */, A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */, - A12D9BF51BCF2C73004F52A6 /* iTerm2-nightly-new-window.scpt in Resources */, 0ADB3B0D178EF8DB004E9BB9 /* StatusIcon.png in Resources */, - 24399FE6219CD0F700C8658F /* virtual-with-screen.scpt in Resources */, 0ADB3B0C178EF8DB004E9BB9 /* StatusIconAlt.png in Resources */, C149EC0815D5214600B1F558 /* InfoPlist.strings in Resources */, 6FC541A31D45CF7F00A896E3 /* AboutWindowController.xib in Resources */, 0ADB3B0F178EF8DB004E9BB9 /* StatusIconAlt@2x.png in Resources */, 0ADB3B0E178EF8DB004E9BB9 /* StatusIcon@2x.png in Resources */, - A124BA191D45572B00218F2F /* iTerm2-stable-current-window.scpt in Resources */, - A12D9BF41BCF2C73004F52A6 /* iTerm2-nightly-new-tab-default.scpt in Resources */, C149EC0E15D5214600B1F558 /* Credits.rtf in Resources */, - A12D9BF71BCF2C73004F52A6 /* terminal-new-tab-default.scpt in Resources */, C149EC1415D5214600B1F558 /* MainMenu.xib in Resources */, - A124BA1B1D45572B00218F2F /* iTerm2-stable-new-window.scpt in Resources */, - A124BA1A1D45572B00218F2F /* iTerm2-stable-new-tab-default.scpt in Resources */, C159DC2815D5DE8000F5DE24 /* shuttle.icns in Resources */, - A12D9BF81BCF2C73004F52A6 /* terminal-new-window.scpt in Resources */, 7E74A7C61789CE2F0079E0D2 /* shuttle.default.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -398,8 +350,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; + ARCHS = "$(ARCHS_STANDARD)"; + MACOSX_DEPLOYMENT_TARGET = 12.0; SDKROOT = macosx; }; name = Debug; @@ -440,7 +392,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; + ARCHS = "$(ARCHS_STANDARD)"; + MACOSX_DEPLOYMENT_TARGET = 12.0; SDKROOT = macosx; }; name = Release; @@ -454,7 +407,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Shuttle/Shuttle-Prefix.pch"; INFOPLIST_FILE = "Shuttle/Shuttle-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 12.0; PRODUCT_BUNDLE_IDENTIFIER = "shuttle.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; @@ -470,7 +423,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Shuttle/Shuttle-Prefix.pch"; INFOPLIST_FILE = "Shuttle/Shuttle-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 12.0; PRODUCT_BUNDLE_IDENTIFIER = "shuttle.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 2f77935..b9c0f0e 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -464,243 +464,40 @@ - (void) separatorSortRemoval:(NSString *)currentName { } - (void) openHost:(NSMenuItem *) sender { - //NSLog(@"sender: %@", sender); - //NSLog(@"Command: %@",[sender representedObject]); - - NSString *errorMessage; - NSString *errorInfo; - - - //Place the comma delimited string of menu item settings into an array - NSArray *objectsFromJSON = [[sender representedObject] componentsSeparatedByString:(@"¬_¬")]; - - //This is our command that will be run in the terminal window - NSString *escapedObject; - //The theme for the terminal window - NSString *terminalTheme; - //The title for the terminal window - NSString *terminalTitle; - //Are commands run in a new tab (default) a new terminal window (new), or in the current tab of the last used window (current). - NSString *terminalWindow; - - escapedObject = [objectsFromJSON objectAtIndex:0]; - - //if terminalTheme is not set then check for a global setting. - if( [[objectsFromJSON objectAtIndex:1] isEqualToString:@"(null)"] ){ - if(themePref == 0) { - if( [terminalPref isEqualToString:@"iterm"] ){ - //we have no global theme and there is no theme in the command settings. - //Forcing the Default profile for iTerm and the basic profile for Terminal.app - terminalTheme = @"Default"; - }else{ - terminalTheme = @"basic"; - } - //We have a global setting using this as the theme. - }else { - terminalTheme = themePref; - } - //we have command level theme override the Global default_theme settings. - }else{ - terminalTheme = [objectsFromJSON objectAtIndex:1]; - } - - //Check if terminalTitle is null - if( [[objectsFromJSON objectAtIndex:2] isEqualToString:@"(null)"]){ - //setting the empty title to that of the menu item. - terminalTitle = [objectsFromJSON objectAtIndex:4]; - }else{ - terminalTitle = [objectsFromJSON objectAtIndex:2]; - } - - //Check if inTerminal is null if so then use the default settings of open_in - if( [[objectsFromJSON objectAtIndex:3] isEqualToString:@"(null)"]){ - - //if open_in is not "tab" or "new" then force the default of "tab". - if( ![openInPref isEqualToString:@"tab"] && ![openInPref isEqualToString:@"new"]){ - openInPref = @"tab"; - } - //open_in was not empty or bad value we are passing the settings. - terminalWindow = openInPref; - }else{ - //inTerminal is not null and overrides the default values of open_in - terminalWindow = [objectsFromJSON objectAtIndex:3]; - if( ![terminalWindow isEqualToString:@"new"] && ![terminalWindow isEqualToString:@"current"] && ![terminalWindow isEqualToString:@"tab"] && ![terminalWindow isEqualToString:@"virtual"]) - { - errorMessage = [NSString stringWithFormat:@"%@%@%@ %@",@"'",terminalWindow,@"'", NSLocalizedString(@"is not a valid value for inTerminal. Please fix this in the JSON file",nil)]; - errorInfo = NSLocalizedString(@"bad \"inTerminal\":\"VALUE\" in the JSON settings",nil); - [self throwError:errorMessage additionalInfo:errorInfo continueOnErrorOption:NO]; - } - } - - //Set Paths to iTerm Stable AppleScripts - NSString *iTermStableNewWindow = [[NSBundle mainBundle] pathForResource:@"iTerm2-stable-new-window" ofType:@"scpt"]; - NSString *iTermStableCurrentWindow = [[NSBundle mainBundle] pathForResource:@"iTerm2-stable-current-window" ofType:@"scpt"]; - NSString *iTermStableNewTabDefault = [[NSBundle mainBundle] pathForResource:@"iTerm2-stable-new-tab-default" ofType:@"scpt"]; - - //Set Paths to iTerm Nightly AppleScripts - NSString *iTerm2NightlyNewWindow = [[NSBundle mainBundle] pathForResource:@"iTerm2-nightly-new-window" ofType:@"scpt"]; - NSString *iTerm2NightlyCurrentWindow = [[NSBundle mainBundle] pathForResource:@"iTerm2-nightly-current-window" ofType:@"scpt"]; - NSString *iTerm2NightlyNewTabDefault = [[NSBundle mainBundle] pathForResource:@"iTerm2-nightly-new-tab-default" ofType:@"scpt"]; - - //Set Paths to terminalScripts - NSString *terminalNewWindow = [[NSBundle mainBundle] pathForResource:@"terminal-new-window" ofType:@"scpt"]; - NSString *terminalCurrentWindow = [[NSBundle mainBundle] pathForResource:@"terminal-current-window" ofType:@"scpt"]; - NSString *terminalNewTabDefault = [[NSBundle mainBundle] pathForResource:@"terminal-new-tab-default" ofType:@"scpt"]; - - //Set Path to virtual with screen AppleScripts - NSString *terminalVirtualWithScreen = [[NSBundle mainBundle] pathForResource:@"virtual-with-screen" ofType:@"scpt"]; - - //Set the name of the handler that we are passing parameters too in the apple script - NSString *handlerName = @"scriptRun"; - - //script expects the following order: Command, Theme, Title unless its virtual which bypasses the url check and expects Command, Title - NSArray *passParameters; - NSURL *url; - if ( ![terminalWindow isEqualToString:@"virtual"] ) { - passParameters = @[escapedObject, terminalTheme, terminalTitle]; - url = [NSURL URLWithString:escapedObject]; - } - else { - passParameters = @[escapedObject, terminalTitle]; - } - // Check if Url - if (url) - { - [[NSWorkspace sharedWorkspace] openURL:url]; - - } - //If the JSON file is set to use iTerm - else if ( [terminalPref rangeOfString: @"iterm"].location !=NSNotFound ) { - - //If the JSON prefs for iTermVersion are not stable or nightly throw an error - if( ![iTermVersionPref isEqualToString: @"stable"] && ![iTermVersionPref isEqualToString:@"nightly"] ) { - - if( iTermVersionPref == 0 ) { - errorMessage = NSLocalizedString(@"\"iTerm_version\": \"VALUE\", is missing.\n\n\"VALUE\" can be:\n\"stable\" targeting new versions.\n\"nightly\" targeting nightly builds.\n\nPlease fix your shuttle JSON settings.\nSee readme.md on shuttle's github for help.",nil); - errorInfo = NSLocalizedString(@"Press Continue to try iTerm stable applescripts.\n -->(not recommended)<--\nThis could fail if you have another version of iTerm installed.\n\nPlease fix the JSON settings.\nPress Quit to exit shuttle.",nil); - [self throwError:errorMessage additionalInfo:errorInfo continueOnErrorOption:YES]; - iTermVersionPref = @"stable"; - - }else{ - errorMessage = [NSString stringWithFormat:@"%@%@%@ %@",@"'",iTermVersionPref,@"'", NSLocalizedString(@"is not a valid value for iTerm_version. Please fix this in the JSON file",nil)]; - errorInfo = NSLocalizedString(@"bad \"iTerm_version\": \"VALUE\" in the JSON settings",nil); - [self throwError:errorMessage additionalInfo:errorInfo continueOnErrorOption:NO]; - } - } - - if( [iTermVersionPref isEqualToString:@"stable"]) { - - //run the applescript that works with iTerm Stable - //if we are running in a new iTerm "Stable" Window - if ( [terminalWindow isEqualToString:@"new"] ) { - [self runScript:iTermStableNewWindow handler:handlerName parameters:passParameters]; - } - //if we are running in the current iTerm "Stable" Window - if ( [terminalWindow isEqualToString:@"current"] ) { - [self runScript:iTermStableCurrentWindow handler:handlerName parameters:passParameters]; - } - //we are using the default action of shuttle... The active window in a new tab - if ( [terminalWindow isEqualToString:@"tab"] ) { - [self runScript:iTermStableNewTabDefault handler:handlerName parameters:passParameters]; - } - //don't spawn a terminal run the command in the background using screen - if ( [terminalWindow isEqualToString:@"virtual"] ) { - [self runScript:terminalVirtualWithScreen handler:handlerName parameters:passParameters]; - } - } - //iTermVersion is not set to "stable" using applescripts Configured for Nightly - if( [iTermVersionPref isEqualToString:@"nightly"]) { - //if we are running in a new iTerm "Nightly" Window - if ( [terminalWindow isEqualToString:@"new"] ) { - [self runScript:iTerm2NightlyNewWindow handler:handlerName parameters:passParameters]; - } - //if we are running in the current iTerm "Nightly" Window - if ( [terminalWindow isEqualToString:@"current"] ) { - [self runScript:iTerm2NightlyCurrentWindow handler:handlerName parameters:passParameters]; - } - //we are using the default action of shuttle... The active window in a new tab - if ( [terminalWindow isEqualToString:@"tab"] ) { - [self runScript:iTerm2NightlyNewTabDefault handler:handlerName parameters:passParameters]; - } - //don't spawn a terminal run the command in the background using screen - if ( [terminalWindow isEqualToString:@"virtual"] ) { - [self runScript:terminalVirtualWithScreen handler:handlerName parameters:passParameters]; - } - } + NSArray *objectsFromJSON = [[sender representedObject] componentsSeparatedByString:@"¬_¬"]; + NSString *sshCmd = [objectsFromJSON objectAtIndex:0]; + + // If it looks like a URL, open it in the browser + NSURL *url = [NSURL URLWithString:sshCmd]; + if (url && url.scheme && ![url.scheme isEqualToString:@"ssh"]) { + [[NSWorkspace sharedWorkspace] openURL:url]; + return; } - //If JSON settings are set to use Terminal.app - else { - //if we are running in a new terminal Window - if ( [terminalWindow isEqualToString:@"new"] ) { - [self runScript:terminalNewWindow handler:handlerName parameters:passParameters]; - } - //if we are running in the current terminal Window - if ( [terminalWindow isEqualToString:@"current"] ) { - [self runScript:terminalCurrentWindow handler:handlerName parameters:passParameters]; - } - //we are using the default action of shuttle... The active window in a new tab - if ( [terminalWindow isEqualToString:@"tab"] ) { - [self runScript:terminalNewTabDefault handler:handlerName parameters:passParameters]; - } - //don't spawn a terminal run the command in the background using screen - if ( [terminalWindow isEqualToString:@"virtual"] ) { - [self runScript:terminalVirtualWithScreen handler:handlerName parameters:passParameters]; - } + + // Resolve terminal preference; default to "terminal" (native Terminal.app) + NSString *terminal = ([terminalPref length] > 0) ? terminalPref : @"terminal"; + + NSTask *task = [[NSTask alloc] init]; + + if ([terminal isEqualToString:@"ghostty"]) { + [task setLaunchPath:@"/Applications/Ghostty.app/Contents/MacOS/ghostty"]; + [task setArguments:@[@"-e", sshCmd]]; + } else if ([terminal hasPrefix:@"iterm"]) { + [task setLaunchPath:@"/usr/bin/osascript"]; + [task setArguments:@[@"-e", [NSString stringWithFormat: + @"tell application \"iTerm\" to create window with default profile command \"%@\"", sshCmd]]]; + } else { + [task setLaunchPath:@"/usr/bin/osascript"]; + [task setArguments:@[@"-e", [NSString stringWithFormat: + @"tell application \"Terminal\" to do script \"%@\"", sshCmd]]]; } -} -- (void) runScript:(NSString *)scriptPath handler:(NSString*)handlerName parameters:(NSArray*)parametersInArray { - //special thanks to stackoverflow.com/users/316866/leandro for pointing me the right direction. - //see http://goo.gl/olcpaX - NSAppleScript * appleScript; - NSAppleEventDescriptor * thisApplication, *containerEvent; - NSURL * pathURL = [NSURL fileURLWithPath:scriptPath]; - - NSDictionary * appleScriptCreationError = nil; - appleScript = [[NSAppleScript alloc] initWithContentsOfURL:pathURL error:&appleScriptCreationError]; - - if (handlerName && [handlerName length]) - { - /* If we have a handlerName (and potentially parameters), we build - * an NSAppleEvent to execute the script. */ - - //Get a descriptor - int pid = [[NSProcessInfo processInfo] processIdentifier]; - thisApplication = [NSAppleEventDescriptor descriptorWithDescriptorType:typeKernelProcessID - bytes:&pid - length:sizeof(pid)]; - - //Create the container event - - //We need these constants from the Carbon OpenScripting framework, but we don't actually need Carbon.framework... -#define kASAppleScriptSuite 'ascr' -#define kASSubroutineEvent 'psbr' -#define keyASSubroutineName 'snam' - containerEvent = [NSAppleEventDescriptor appleEventWithEventClass:kASAppleScriptSuite - eventID:kASSubroutineEvent - targetDescriptor:thisApplication - returnID:kAutoGenerateReturnID - transactionID:kAnyTransactionID]; - //Set the target handler - [containerEvent setParamDescriptor:[NSAppleEventDescriptor descriptorWithString:handlerName] - forKeyword:keyASSubroutineName]; - - //Pass parameters - parameters is expecting an NSArray with only NSString objects - if ([parametersInArray count]) - { - - NSAppleEventDescriptor *arguments = [[NSAppleEventDescriptor alloc] initListDescriptor]; - NSString *object; - - for (object in parametersInArray) { - [arguments insertDescriptor:[NSAppleEventDescriptor descriptorWithString:object] - atIndex:([arguments numberOfItems] +1)]; - } - - [containerEvent setParamDescriptor:arguments forKeyword:keyDirectObject]; - } - //Execute the event - [appleScript executeAppleEvent:containerEvent error:nil]; + NSError *error = nil; + [task launchAndReturnError:&error]; + if (error) { + [self throwError:[NSString stringWithFormat:@"Failed to launch terminal: %@", error.localizedDescription] + additionalInfo:[NSString stringWithFormat:@"Check that \"%@\" is installed and your shuttle.json terminal setting is correct.", terminal] + continueOnErrorOption:NO]; } } From 573ce9f63725556186b02db1b7f18ce95b205144 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:02:49 -0800 Subject: [PATCH 02/25] Add SSH Address Book Manager with LAN scanner - Replace all AppleScript/.scpt infrastructure with NSTask-based terminal dispatch supporting Ghostty, iTerm2 (osascript one-liner), and Terminal.app - Universal Binary: ARCHS=$(ARCHS_STANDARD), deployment target 12.0 - New JSON schema: servers[] + categories[] replaces recursive hosts tree - ServerManagerWindowController: programmatic Contacts-style manager window with NSOutlineView sidebar (category group headers + server rows), detail form pane (name, hostname, user, port, SSH key picker, category, terminal overrides), Save/Delete/Add Category actions persisted to JSON - LAN SSH scanner: async /24 port-22 sweep via GCD, shown as Local Network submenu with Scan Now action and age display - Manager... item inserted into Settings submenu at runtime Co-Authored-By: Claude Sonnet 4.6 --- Shuttle.xcodeproj/project.pbxproj | 6 + Shuttle/AppDelegate.h | 22 +- Shuttle/AppDelegate.m | 414 ++++++++++++----- Shuttle/ServerManagerWindowController.h | 15 + Shuttle/ServerManagerWindowController.m | 566 ++++++++++++++++++++++++ Shuttle/shuttle.default.json | 58 +-- 6 files changed, 912 insertions(+), 169 deletions(-) create mode 100644 Shuttle/ServerManagerWindowController.h create mode 100644 Shuttle/ServerManagerWindowController.m diff --git a/Shuttle.xcodeproj/project.pbxproj b/Shuttle.xcodeproj/project.pbxproj index bf04310..f645211 100644 --- a/Shuttle.xcodeproj/project.pbxproj +++ b/Shuttle.xcodeproj/project.pbxproj @@ -16,6 +16,7 @@ 7E74A7C61789CE2F0079E0D2 /* shuttle.default.json in Resources */ = {isa = PBXBuildFile; fileRef = 7E74A7C51789CE2F0079E0D2 /* shuttle.default.json */; }; A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1B7B9DF1DB53ED200809327 /* Localizable.strings */; }; A1D700071A5DCE8D003563E4 /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D700061A5DCE8D003563E4 /* AboutWindowController.m */; }; + AA100003AABBCCDD00112233 /* ServerManagerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AA100002AABBCCDD00112233 /* ServerManagerWindowController.m */; }; C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C149EBFD15D5214600B1F558 /* Cocoa.framework */; }; C149EC0815D5214600B1F558 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C149EC0615D5214600B1F558 /* InfoPlist.strings */; }; C149EC0A15D5214600B1F558 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C149EC0915D5214600B1F558 /* main.m */; }; @@ -50,6 +51,8 @@ A1B7B9F21DB54D9000809327 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/AboutWindowController.strings; sourceTree = ""; }; A1D700051A5DCDF4003563E4 /* AboutWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutWindowController.h; sourceTree = ""; }; A1D700061A5DCE8D003563E4 /* AboutWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AboutWindowController.m; sourceTree = ""; }; + AA100001AABBCCDD00112233 /* ServerManagerWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerManagerWindowController.h; sourceTree = ""; }; + AA100002AABBCCDD00112233 /* ServerManagerWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerManagerWindowController.m; sourceTree = ""; }; BDCFF1521E4E890A00B365C9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainMenu.strings; sourceTree = ""; }; BDCFF1531E4E890A00B365C9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AboutWindowController.strings; sourceTree = ""; }; BDCFF1541E4E890A00B365C9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -145,6 +148,8 @@ A1D700051A5DCDF4003563E4 /* AboutWindowController.h */, A1D700061A5DCE8D003563E4 /* AboutWindowController.m */, 6FC541A51D45CF7F00A896E3 /* AboutWindowController.xib */, + AA100001AABBCCDD00112233 /* ServerManagerWindowController.h */, + AA100002AABBCCDD00112233 /* ServerManagerWindowController.m */, ); path = Shuttle; sourceTree = ""; @@ -242,6 +247,7 @@ A1D700071A5DCE8D003563E4 /* AboutWindowController.m in Sources */, C149EC0A15D5214600B1F558 /* main.m in Sources */, C149EC1115D5214600B1F558 /* AppDelegate.m in Sources */, + AA100003AABBCCDD00112233 /* ServerManagerWindowController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Shuttle/AppDelegate.h b/Shuttle/AppDelegate.h index 5bc763c..7fbdd29 100644 --- a/Shuttle/AppDelegate.h +++ b/Shuttle/AppDelegate.h @@ -6,6 +6,8 @@ #import #import "LaunchAtLoginController.h" +@class ServerManagerWindowController; + @interface AppDelegate : NSObject { IBOutlet NSMenu *menu; IBOutlet NSArrayController *arrayController; @@ -45,9 +47,27 @@ NSMutableArray* ignoreKeywords; LaunchAtLoginController *launchAtLoginController; - + + // LAN SSH scanner + NSMenu *lanSubMenu; + NSMutableArray *lanHosts; + NSDate *lastLanScan; + BOOL isLanScanning; + + // Address book (new schema) + NSMutableArray *servers; + NSMutableArray *categories; + ServerManagerWindowController *managerWindowController; + } +// Public accessors for ServerManagerWindowController +- (NSMutableArray *)servers; +- (NSMutableArray *)categories; +- (NSString *)configFilePath; +- (void)loadMenu; +- (IBAction)showManager:(id)sender; + - (void)menuWillOpen:(NSMenu *)menu; @end diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index b9c0f0e..b02dacb 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -5,6 +5,13 @@ #import "AppDelegate.h" #import "AboutWindowController.h" +#import "ServerManagerWindowController.h" + +#include +#include +#include +#include +#include @implementation AppDelegate @@ -89,6 +96,19 @@ - (void) awakeFromNib { launchAtLoginController = [[LaunchAtLoginController alloc] init]; // Needed to trigger the menuWillOpen event [menu setDelegate:self]; + + // Insert Manager... at top of Settings submenu + for (NSMenuItem *item in [menu itemArray]) { + if ([[item title] isEqualToString:@"Settings"] && [item hasSubmenu]) { + NSMenuItem *managerItem = [[NSMenuItem alloc] initWithTitle:@"Manager..." + action:@selector(showManager:) + keyEquivalent:@""]; + [managerItem setTarget:self]; + [[item submenu] insertItem:managerItem atIndex:0]; + [[item submenu] insertItem:[NSMenuItem separatorItem] atIndex:1]; + break; + } + } } - (BOOL) needUpdateFor: (NSString*) file with: (NSDate*) old { @@ -115,14 +135,19 @@ - (void)menuWillOpen:(NSMenu *)menu { [self needUpdateFor:shuttleAltConfigFile with:configModified2] || [self needUpdateFor: @"/etc/ssh/ssh_config" with:sshConfigSystem] || [self needUpdateFor: @"~/.ssh/config" with:sshConfigUser]) { - + configModified = [self getMTimeFor:shuttleConfigFile]; configModified2 = [self getMTimeFor:shuttleAltConfigFile]; sshConfigSystem = [self getMTimeFor: @"/etc/ssh/ssh_config"]; sshConfigUser = [self getMTimeFor: @"~/.ssh/config"]; - + [self loadMenu]; } + + // Trigger LAN scan on first open + if (!lastLanScan && !isLanScanning) { + [self scanLAN]; + } } // Parsing of the SSH Config File @@ -240,125 +265,92 @@ - (void) loadMenu { terminalPref = [json[@"terminal"] lowercaseString]; editorPref = [json[@"editor"] lowercaseString]; - iTermVersionPref = [json[@"iTerm_version"] lowercaseString]; - openInPref = [json[@"open_in"] lowercaseString]; - themePref = json[@"default_theme"]; launchAtLoginController.launchAtLogin = [json[@"launch_at_login"] boolValue]; - shuttleHosts = json[@"hosts"]; - ignoreHosts = json[@"ssh_config_ignore_hosts"]; - ignoreKeywords = json[@"ssh_config_ignore_keywords"]; - - //add hosts from the alternate json config - if (parseAltJSON) { - NSData *dataAlt = [NSData dataWithContentsOfFile:shuttleAltConfigFile]; - id jsonAlt = [NSJSONSerialization JSONObjectWithData:dataAlt options:NSJSONReadingMutableContainers error:nil]; - shuttleHostsAlt = jsonAlt[@"hosts"]; - [shuttleHosts addObjectsFromArray:shuttleHostsAlt]; - } - - // Should we merge ssh config hosts? - BOOL showSshConfigHosts = YES; - if ([[json allKeys] containsObject:(@"show_ssh_config_hosts")] && [json[@"show_ssh_config_hosts"] boolValue] == NO) { - showSshConfigHosts = NO; - } - - if (showSshConfigHosts) { - // Read configuration from ssh config - NSDictionary* servers = [self parseSSHConfigFile]; - for (NSString* key in servers) { - BOOL skipCurrent = NO; - NSDictionary* cfg = [servers objectForKey:key]; - - // get special name from config if set, fallback to the key - NSString* name = cfg[@"name"] ? cfg[@"name"] : key; - - // Ignore entries that contain wildcard characters - if ([name rangeOfString:@"*"].length != 0) - skipCurrent = YES; - - // Ignore entries that start with `.` - if ([name hasPrefix:@"."]) - skipCurrent = YES; - - // Ignore entries whose name matches exactly any of the values in ignoreHosts - for (NSString* ignore in ignoreHosts) { - if ([name isEqualToString:ignore]) { - skipCurrent = YES; - } - } - - // Ignore entries whose name contains any of the values in ignoreKeywords - for (NSString* ignore in ignoreKeywords) { - if ([name rangeOfString:ignore].location != NSNotFound) { - skipCurrent = YES; - } - } - - if (skipCurrent) { - continue; - } - - // Split the host into parts separated by / - the last part is the name for the leaf in the tree - NSMutableArray* path = [NSMutableArray arrayWithArray:[name componentsSeparatedByString:@"/"]]; - NSString* leaf = [path lastObject]; - if (leaf == nil) - continue; - [path removeLastObject]; - - NSMutableArray* itemList = shuttleHosts; - for (NSString *part in path) { - BOOL createList = YES; - for (NSDictionary* item in itemList) { - // if we encounter an item with cmd/name then we have to bail - // since there's no way we can dig deeper here - if (item[@"cmd"] || item[@"name"]) { - continue; - } - - // if this item has the name of our target check if we can - // reuse it (if it's an array) - or if we need to bail - if (item[part]) { - // make sure this is an array and not an object - if ([item[part] isKindOfClass:[NSArray class]]) { - itemList = item[part]; + + if (json[@"servers"] != nil) { + // New address book format + NSArray *rawCats = json[@"categories"] ?: @[]; + categories = [rawCats mutableCopy]; + NSArray *rawServers = json[@"servers"] ?: @[]; + NSMutableArray *mutableServers = [NSMutableArray arrayWithCapacity:rawServers.count]; + for (id s in rawServers) { + [mutableServers addObject:[s mutableCopy]]; + } + servers = mutableServers; + [self buildMenuFromServers]; + } else { + // Legacy hosts format + iTermVersionPref = [json[@"iTerm_version"] lowercaseString]; + openInPref = [json[@"open_in"] lowercaseString]; + themePref = json[@"default_theme"]; + shuttleHosts = json[@"hosts"]; + ignoreHosts = json[@"ssh_config_ignore_hosts"]; + ignoreKeywords = json[@"ssh_config_ignore_keywords"]; + + if (parseAltJSON) { + NSData *dataAlt = [NSData dataWithContentsOfFile:shuttleAltConfigFile]; + id jsonAlt = [NSJSONSerialization JSONObjectWithData:dataAlt options:NSJSONReadingMutableContainers error:nil]; + shuttleHostsAlt = jsonAlt[@"hosts"]; + [shuttleHosts addObjectsFromArray:shuttleHostsAlt]; + } + + BOOL showSshConfigHosts = YES; + if ([[json allKeys] containsObject:@"show_ssh_config_hosts"] && [json[@"show_ssh_config_hosts"] boolValue] == NO) + showSshConfigHosts = NO; + + if (showSshConfigHosts) { + NSDictionary *sshCfgHosts = [self parseSSHConfigFile]; + for (NSString *key in sshCfgHosts) { + BOOL skipCurrent = NO; + NSDictionary *cfg = sshCfgHosts[key]; + NSString *name = cfg[@"name"] ?: key; + + if ([name rangeOfString:@"*"].length != 0) skipCurrent = YES; + if ([name hasPrefix:@"."]) skipCurrent = YES; + for (NSString *ignore in ignoreHosts) + if ([name isEqualToString:ignore]) skipCurrent = YES; + for (NSString *ignore in ignoreKeywords) + if ([name rangeOfString:ignore].location != NSNotFound) skipCurrent = YES; + if (skipCurrent) continue; + + NSMutableArray *path = [NSMutableArray arrayWithArray:[name componentsSeparatedByString:@"/"]]; + NSString *leaf = [path lastObject]; + if (!leaf) continue; + [path removeLastObject]; + + NSMutableArray *itemList = shuttleHosts; + for (NSString *part in path) { + BOOL createList = YES; + for (NSDictionary *item in itemList) { + if (item[@"cmd"] || item[@"name"]) continue; + if (item[part]) { + itemList = [item[part] isKindOfClass:[NSArray class]] ? item[part] : nil; createList = NO; - } else { - itemList = nil; + break; } - break; + } + if (!itemList) break; + if (createList) { + NSMutableArray *newList = [[NSMutableArray alloc] init]; + [itemList addObject:@{part: newList}]; + itemList = newList; } } - - if (itemList == nil) { - // things gone south... there's already something present and it's - // not an array... - break; - } - - if (createList) { - // create a new entry and set it as itemList - NSMutableArray *newList = [[NSMutableArray alloc] init]; - [itemList addObject:[NSDictionary dictionaryWithObject:newList - forKey:part]]; - itemList = newList; - } - } - - // if everything worked out we will see a non-nil itemList where the - // system should be appended to. part hold the last part of the splitted string (aka hostname). - if (itemList) { - // build the corresponding ssh command - NSString* cmd = [NSString stringWithFormat:@"ssh %@", key]; - - // inject the data into the json parser result - [itemList addObject:[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:leaf, cmd, nil] - forKeys:[NSArray arrayWithObjects:@"name", @"cmd", nil]]]; + if (itemList) + [itemList addObject:@{@"name": leaf, @"cmd": [NSString stringWithFormat:@"ssh %@", key]}]; } } + [self buildMenu:shuttleHosts addToMenu:menu]; } - - // feed the final result into the recursive method which builds the menu - [self buildMenu:shuttleHosts addToMenu:menu]; + + // LAN SSH scanner section — inserted before the 4 static XIB items + NSInteger lanInsertAt = (NSInteger)[[menu itemArray] count] - 4; + [menu insertItem:[NSMenuItem separatorItem] atIndex:lanInsertAt++]; + NSMenuItem *lanItem = [[NSMenuItem alloc] initWithTitle:@"Local Network" action:nil keyEquivalent:@""]; + if (!lanSubMenu) lanSubMenu = [[NSMenu alloc] init]; + [lanItem setSubmenu:lanSubMenu]; + [menu insertItem:lanItem atIndex:lanInsertAt]; + [self rebuildLanSubmenu]; } - (void) buildMenu:(NSArray*)data addToMenu:(NSMenu *)m { @@ -428,6 +420,202 @@ - (void) buildMenu:(NSArray*)data addToMenu:(NSMenu *)m { } } +// MARK: - Public Accessors + +- (NSMutableArray *)servers { return servers; } +- (NSMutableArray *)categories { return categories; } +- (NSString *)configFilePath { return shuttleConfigFile; } + +// MARK: - Address Book Menu + +- (void)buildMenuFromServers { + NSInteger insertAt = 0; + for (NSString *category in categories) { + NSArray *catServers = [servers filteredArrayUsingPredicate: + [NSPredicate predicateWithFormat:@"category == %@", category]]; + if (catServers.count == 0) continue; + + NSMenu *subMenu = [[NSMenu alloc] init]; + for (NSDictionary *server in catServers) { + NSString *name = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; + NSString *cmd = [self sshCommandForServer:server]; + NSString *rep = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, name]; + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:name action:@selector(openHost:) keyEquivalent:@""]; + [item setRepresentedObject:rep]; + [subMenu addItem:item]; + } + NSMenuItem *catItem = [[NSMenuItem alloc] initWithTitle:category action:nil keyEquivalent:@""]; + [catItem setSubmenu:subMenu]; + [menu insertItem:catItem atIndex:insertAt++]; + } + if (insertAt > 0) + [menu insertItem:[NSMenuItem separatorItem] atIndex:insertAt]; +} + +- (NSString *)sshCommandForServer:(NSDictionary *)server { + NSMutableString *cmd = [NSMutableString stringWithString:@"ssh"]; + NSString *key = server[@"identity_file"]; + NSInteger port = [server[@"port"] integerValue]; + NSString *user = server[@"user"]; + NSString *host = server[@"hostname"]; + if (key.length > 0) [cmd appendFormat:@" -i %@", key]; + if (port > 0 && port != 22) [cmd appendFormat:@" -p %ld", (long)port]; + if (user.length > 0) [cmd appendFormat:@" %@@%@", user, host]; + else [cmd appendFormat:@" %@", host]; + return cmd; +} + +// MARK: - Manager Window + +- (IBAction)showManager:(id)sender { + if (!managerWindowController) + managerWindowController = [[ServerManagerWindowController alloc] initWithAppDelegate:self]; + [managerWindowController.window makeKeyAndOrderFront:nil]; + [managerWindowController reload]; +} + +// MARK: - LAN SSH Scanner + +- (NSString *)localIPAddress { + struct ifaddrs *interfaces = NULL; + if (getifaddrs(&interfaces) != 0) return nil; + + NSString *result = nil; + for (struct ifaddrs *c = interfaces; c; c = c->ifa_next) { + if (!c->ifa_addr || c->ifa_addr->sa_family != AF_INET) continue; + NSString *name = [NSString stringWithUTF8String:c->ifa_name]; + if (![name hasPrefix:@"en"]) continue; + char buf[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &((struct sockaddr_in *)c->ifa_addr)->sin_addr, buf, sizeof(buf)); + NSString *ip = [NSString stringWithUTF8String:buf]; + if (![ip isEqualToString:@"127.0.0.1"]) { result = ip; break; } + } + freeifaddrs(interfaces); + return result; +} + +- (NSArray *)subnetAddresses:(NSString *)localIP { + NSArray *parts = [localIP componentsSeparatedByString:@"."]; + if (parts.count != 4) return @[]; + NSString *prefix = [NSString stringWithFormat:@"%@.%@.%@", parts[0], parts[1], parts[2]]; + NSMutableArray *addresses = [NSMutableArray array]; + for (int i = 1; i <= 254; i++) { + NSString *ip = [NSString stringWithFormat:@"%@.%d", prefix, i]; + if (![ip isEqualToString:localIP]) [addresses addObject:ip]; + } + return addresses; +} + +- (BOOL)isPort22OpenAt:(NSString *)ip { + int sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) return NO; + + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(22); + if (inet_pton(AF_INET, [ip UTF8String], &addr.sin_addr) <= 0) { close(sock); return NO; } + + fcntl(sock, F_SETFL, fcntl(sock, F_GETFL, 0) | O_NONBLOCK); + connect(sock, (struct sockaddr *)&addr, sizeof(addr)); + + struct timeval tv = {0, 300000}; // 300ms timeout + fd_set writefds; + FD_ZERO(&writefds); + FD_SET(sock, &writefds); + + BOOL open = NO; + if (select(sock + 1, NULL, &writefds, NULL, &tv) > 0) { + int error = 0; socklen_t len = sizeof(error); + getsockopt(sock, SOL_SOCKET, SO_ERROR, &error, &len); + open = (error == 0); + } + close(sock); + return open; +} + +- (void)scanLAN { + if (isLanScanning) return; + isLanScanning = YES; + [self rebuildLanSubmenu]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *localIP = [self localIPAddress]; + if (!localIP) { + dispatch_async(dispatch_get_main_queue(), ^{ isLanScanning = NO; [self rebuildLanSubmenu]; }); + return; + } + + NSArray *addresses = [self subnetAddresses:localIP]; + NSMutableArray *found = [NSMutableArray array]; + NSObject *lock = [[NSObject alloc] init]; + + dispatch_group_t group = dispatch_group_create(); + dispatch_semaphore_t sem = dispatch_semaphore_create(50); + dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + for (NSString *ip in addresses) { + dispatch_group_async(group, q, ^{ + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); + if ([self isPort22OpenAt:ip]) { + @synchronized(lock) { [found addObject:ip]; } + } + dispatch_semaphore_signal(sem); + }); + } + + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + lanHosts = found; + lastLanScan = [NSDate date]; + isLanScanning = NO; + [self rebuildLanSubmenu]; + }); + }); +} + +- (void)rebuildLanSubmenu { + if (!lanSubMenu) return; + [lanSubMenu removeAllItems]; + + if (isLanScanning) { + NSMenuItem *item = [lanSubMenu addItemWithTitle:@"Scanning..." action:nil keyEquivalent:@""]; + [item setEnabled:NO]; + } else if (!lanHosts || lanHosts.count == 0) { + NSMenuItem *item = [lanSubMenu addItemWithTitle:@"No SSH hosts found" action:nil keyEquivalent:@""]; + [item setEnabled:NO]; + } else { + NSArray *sorted = [lanHosts sortedArrayUsingComparator:^NSComparisonResult(NSString *a, NSString *b) { + return [a compare:b options:NSNumericSearch]; + }]; + for (NSString *ip in sorted) { + NSString *cmd = [NSString stringWithFormat:@"ssh %@", ip]; + NSString *repObj = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, ip]; + NSMenuItem *item = [lanSubMenu addItemWithTitle:ip action:@selector(openHost:) keyEquivalent:@""]; + [item setRepresentedObject:repObj]; + } + } + + [lanSubMenu addItem:[NSMenuItem separatorItem]]; + + if (lastLanScan && !isLanScanning) { + NSInteger elapsed = (NSInteger)[[NSDate date] timeIntervalSinceDate:lastLanScan]; + NSString *age = elapsed < 60 + ? [NSString stringWithFormat:@"Scanned %lds ago", (long)elapsed] + : [NSString stringWithFormat:@"Scanned %ldm ago", (long)(elapsed / 60)]; + NSMenuItem *timeItem = [lanSubMenu addItemWithTitle:age action:nil keyEquivalent:@""]; + [timeItem setEnabled:NO]; + [lanSubMenu addItem:[NSMenuItem separatorItem]]; + } + + [lanSubMenu addItemWithTitle:@"Scan Now" action:@selector(scanNow:) keyEquivalent:@""]; +} + +- (IBAction)scanNow:(id)sender { + [self scanLAN]; +} + +// MARK: - + - (void) separatorSortRemoval:(NSString *)currentName { NSError *regexError = nil; addSeparator = NO; diff --git a/Shuttle/ServerManagerWindowController.h b/Shuttle/ServerManagerWindowController.h new file mode 100644 index 0000000..94acaf5 --- /dev/null +++ b/Shuttle/ServerManagerWindowController.h @@ -0,0 +1,15 @@ +// +// ServerManagerWindowController.h +// Shuttle +// + +#import + +@class AppDelegate; + +@interface ServerManagerWindowController : NSWindowController + +- (instancetype)initWithAppDelegate:(AppDelegate *)delegate; +- (void)reload; + +@end diff --git a/Shuttle/ServerManagerWindowController.m b/Shuttle/ServerManagerWindowController.m new file mode 100644 index 0000000..9370665 --- /dev/null +++ b/Shuttle/ServerManagerWindowController.m @@ -0,0 +1,566 @@ +// +// ServerManagerWindowController.m +// Shuttle +// + +#import "ServerManagerWindowController.h" +#import "AppDelegate.h" + +// MARK: - Private interface + +@interface ServerManagerWindowController () + +@property (nonatomic, weak) AppDelegate *appDelegate; + +// Split layout +@property (nonatomic, strong) NSSplitView *splitView; + +// Left pane +@property (nonatomic, strong) NSScrollView *sidebarScroll; +@property (nonatomic, strong) NSOutlineView *outlineView; +@property (nonatomic, strong) NSButton *addServerBtn; +@property (nonatomic, strong) NSButton *removeServerBtn; +@property (nonatomic, strong) NSButton *addCategoryBtn; + +// Right pane — detail form +@property (nonatomic, strong) NSView *detailView; +@property (nonatomic, strong) NSTextField *placeholderLabel; + +@property (nonatomic, strong) NSTextField *nameField; +@property (nonatomic, strong) NSTextField *hostnameField; +@property (nonatomic, strong) NSTextField *userField; +@property (nonatomic, strong) NSTextField *portField; +@property (nonatomic, strong) NSPopUpButton *keyPopup; +@property (nonatomic, strong) NSPopUpButton *categoryPopup; +@property (nonatomic, strong) NSPopUpButton *terminalPopup; +@property (nonatomic, strong) NSButton *saveBtn; +@property (nonatomic, strong) NSButton *deleteBtn; + +// State +@property (nonatomic, strong) NSMutableDictionary *selectedServer; + +@end + +// MARK: - Implementation + +@implementation ServerManagerWindowController + +- (instancetype)initWithAppDelegate:(AppDelegate *)delegate { + self = [super initWithWindow:nil]; + if (self) { + _appDelegate = delegate; + [self buildWindow]; + } + return self; +} + +// MARK: - Window construction + +- (void)buildWindow { + NSRect frame = NSMakeRect(0, 0, 720, 500); + NSUInteger style = NSWindowStyleMaskTitled + | NSWindowStyleMaskClosable + | NSWindowStyleMaskResizable + | NSWindowStyleMaskMiniaturizable; + + NSWindow *win = [[NSWindow alloc] initWithContentRect:frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [win setTitle:@"SSH Manager"]; + [win center]; + [self setWindow:win]; + + // ---- Split view ---- + _splitView = [[NSSplitView alloc] initWithFrame:win.contentView.bounds]; + [_splitView setDividerStyle:NSSplitViewDividerStyleThin]; + [_splitView setVertical:YES]; + [_splitView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [win.contentView addSubview:_splitView]; + + // ---- Left pane ---- + NSView *leftPane = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 220, 500)]; + + // Outline view + _outlineView = [[NSOutlineView alloc] init]; + [_outlineView setDataSource:self]; + [_outlineView setDelegate:self]; + [_outlineView setHeaderView:nil]; + [_outlineView setRowSizeStyle:NSTableViewRowSizeStyleMedium]; + [_outlineView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList]; + [_outlineView setFloatsGroupRows:NO]; + + NSTableColumn *col = [[NSTableColumn alloc] initWithIdentifier:@"main"]; + [col setMinWidth:100]; + [_outlineView addTableColumn:col]; + [_outlineView setOutlineTableColumn:col]; + + _sidebarScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 32, 220, 468)]; + [_sidebarScroll setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [_sidebarScroll setHasVerticalScroller:YES]; + [_sidebarScroll setDocumentView:_outlineView]; + [leftPane addSubview:_sidebarScroll]; + + // Bottom bar buttons + NSView *bottomBar = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 220, 32)]; + [bottomBar setAutoresizingMask:NSViewWidthSizable]; + + _addServerBtn = [NSButton buttonWithTitle:@"+" target:self action:@selector(addServer:)]; + [_addServerBtn setFrame:NSMakeRect(4, 4, 26, 24)]; + [_addServerBtn setBezelStyle:NSBezelStyleRounded]; + [_addServerBtn setFont:[NSFont systemFontOfSize:16]]; + [bottomBar addSubview:_addServerBtn]; + + _removeServerBtn = [NSButton buttonWithTitle:@"−" target:self action:@selector(removeServer:)]; + [_removeServerBtn setFrame:NSMakeRect(32, 4, 26, 24)]; + [_removeServerBtn setBezelStyle:NSBezelStyleRounded]; + [_removeServerBtn setFont:[NSFont systemFontOfSize:16]]; + [bottomBar addSubview:_removeServerBtn]; + + _addCategoryBtn = [NSButton buttonWithTitle:@"+ Category" target:self action:@selector(addCategory:)]; + [_addCategoryBtn setFrame:NSMakeRect(62, 4, 90, 24)]; + [_addCategoryBtn setBezelStyle:NSBezelStyleRounded]; + [_addCategoryBtn setFont:[NSFont systemFontOfSize:11]]; + [bottomBar addSubview:_addCategoryBtn]; + + [leftPane addSubview:bottomBar]; + [_splitView addSubview:leftPane]; + + // ---- Right pane (detail) ---- + _detailView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 500)]; + [_detailView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + + // Placeholder + _placeholderLabel = [NSTextField labelWithString:@"Select a server or add a new one."]; + [_placeholderLabel setAlignment:NSTextAlignmentCenter]; + [_placeholderLabel setTextColor:[NSColor secondaryLabelColor]]; + [_placeholderLabel setFont:[NSFont systemFontOfSize:14]]; + [_placeholderLabel setFrame:NSMakeRect(0, 200, 500, 30)]; + [_placeholderLabel setAutoresizingMask:NSViewWidthSizable | NSViewMaxYMargin | NSViewMinYMargin]; + [_detailView addSubview:_placeholderLabel]; + + // Form fields — built inside a container view + NSView *form = [self buildForm]; + [form setHidden:YES]; + [_detailView addSubview:form]; + + [_splitView addSubview:_detailView]; + + // Set initial divider position after window is shown + [_splitView setPosition:220 ofDividerAtIndex:0]; +} + +- (NSView *)buildForm { + NSView *form = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 500)]; + [form setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + form.identifier = @"formContainer"; + + CGFloat x = 130, w = 300, lx = 20, lw = 105, row = 420, rowH = 30, gap = 36; + + // Helper blocks + NSTextField *(^makeLabel)(NSString *) = ^NSTextField *(NSString *text) { + NSTextField *lbl = [NSTextField labelWithString:text]; + [lbl setAlignment:NSTextAlignmentRight]; + [lbl setFont:[NSFont systemFontOfSize:12]]; + return lbl; + }; + + NSTextField *(^makeField)(void) = ^NSTextField *(void) { + NSTextField *f = [[NSTextField alloc] init]; + [f setBezelStyle:NSTextFieldSquareBezel]; + [f setBordered:YES]; + [f setEditable:YES]; + return f; + }; + + // Name (larger) + NSTextField *nameLbl = makeLabel(@"Name:"); + [nameLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:nameLbl]; + + _nameField = makeField(); + [_nameField setFont:[NSFont boldSystemFontOfSize:14]]; + [_nameField setFrame:NSMakeRect(x, row, w, rowH)]; + [_nameField setDelegate:self]; + [form addSubview:_nameField]; + row -= gap; + + // Hostname + NSTextField *hostLbl = makeLabel(@"Hostname:"); + [hostLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:hostLbl]; + + _hostnameField = makeField(); + [_hostnameField setFrame:NSMakeRect(x, row, w, rowH)]; + [_hostnameField setDelegate:self]; + [form addSubview:_hostnameField]; + row -= gap; + + // Username + Port side by side + NSTextField *userLbl = makeLabel(@"User:"); + [userLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:userLbl]; + + _userField = makeField(); + [_userField setFrame:NSMakeRect(x, row, 140, rowH)]; + [_userField setDelegate:self]; + [form addSubview:_userField]; + + NSTextField *portLbl = makeLabel(@"Port:"); + [portLbl setAlignment:NSTextAlignmentLeft]; + [portLbl setFrame:NSMakeRect(x + 148, row, 38, rowH)]; + [form addSubview:portLbl]; + + _portField = makeField(); + [_portField setFrame:NSMakeRect(x + 190, row, 110, rowH)]; + [_portField setPlaceholderString:@"22"]; + [_portField setDelegate:self]; + [form addSubview:_portField]; + row -= gap; + + // SSH Key + NSTextField *keyLbl = makeLabel(@"SSH Key:"); + [keyLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:keyLbl]; + + _keyPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; + [form addSubview:_keyPopup]; + row -= gap; + + // Category + NSTextField *catLbl = makeLabel(@"Category:"); + [catLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:catLbl]; + + _categoryPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; + [form addSubview:_categoryPopup]; + row -= gap; + + // Terminal + NSTextField *termLbl = makeLabel(@"Terminal:"); + [termLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; + [form addSubview:termLbl]; + + _terminalPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; + [_terminalPopup addItemsWithTitles:@[@"Default (from settings)", @"terminal", @"iterm", @"ghostty"]]; + [form addSubview:_terminalPopup]; + row -= gap; + + row -= 10; // spacer + + // Save + Delete buttons + _saveBtn = [NSButton buttonWithTitle:@"Save" target:self action:@selector(saveServer:)]; + [_saveBtn setFrame:NSMakeRect(x, row, 90, 28)]; + [_saveBtn setBezelStyle:NSBezelStyleRounded]; + [_saveBtn setKeyEquivalent:@"\r"]; + [form addSubview:_saveBtn]; + + _deleteBtn = [NSButton buttonWithTitle:@"Delete Server" target:self action:@selector(deleteServer:)]; + [_deleteBtn setFrame:NSMakeRect(x + 100, row, 120, 28)]; + [_deleteBtn setBezelStyle:NSBezelStyleRounded]; + [form addSubview:_deleteBtn]; + + return form; +} + +// MARK: - Public + +- (void)reload { + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self clearDetail]; +} + +// MARK: - Outline data source + +- (NSInteger)outlineView:(NSOutlineView *)ov numberOfChildrenOfItem:(id)item { + if (item == nil) { + return (NSInteger)[_appDelegate.categories count]; + } + if ([item isKindOfClass:[NSString class]]) { + NSString *cat = item; + return (NSInteger)[[_appDelegate.servers filteredArrayUsingPredicate: + [NSPredicate predicateWithFormat:@"category == %@", cat]] count]; + } + return 0; +} + +- (id)outlineView:(NSOutlineView *)ov child:(NSInteger)index ofItem:(id)item { + if (item == nil) { + return _appDelegate.categories[(NSUInteger)index]; + } + if ([item isKindOfClass:[NSString class]]) { + NSString *cat = item; + NSArray *catServers = [_appDelegate.servers filteredArrayUsingPredicate: + [NSPredicate predicateWithFormat:@"category == %@", cat]]; + return catServers[(NSUInteger)index]; + } + return nil; +} + +- (BOOL)outlineView:(NSOutlineView *)ov isItemExpandable:(id)item { + return [item isKindOfClass:[NSString class]]; +} + +// MARK: - Outline delegate + +- (BOOL)outlineView:(NSOutlineView *)ov isGroupItem:(id)item { + return [item isKindOfClass:[NSString class]]; +} + +- (BOOL)outlineView:(NSOutlineView *)ov shouldSelectItem:(id)item { + return [item isKindOfClass:[NSDictionary class]]; +} + +- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)col item:(id)item { + if ([item isKindOfClass:[NSString class]]) { + NSString *cat = item; + NSTableCellView *cell = [ov makeViewWithIdentifier:@"groupCell" owner:self]; + if (!cell) { + cell = [[NSTableCellView alloc] initWithFrame:NSZeroRect]; + cell.identifier = @"groupCell"; + NSTextField *tf = [NSTextField labelWithString:@""]; + tf.identifier = @"text"; + tf.font = [NSFont boldSystemFontOfSize:11]; + [cell addSubview:tf]; + cell.textField = tf; + } + cell.textField.stringValue = cat; + return cell; + } + + // Server row + NSDictionary *server = item; + NSTableCellView *cell = [ov makeViewWithIdentifier:@"serverCell" owner:self]; + if (!cell) { + cell = [[NSTableCellView alloc] initWithFrame:NSZeroRect]; + cell.identifier = @"serverCell"; + NSTextField *tf = [NSTextField labelWithString:@""]; + tf.identifier = @"text"; + tf.font = [NSFont systemFontOfSize:13]; + [cell addSubview:tf]; + cell.textField = tf; + } + NSString *displayName = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; + cell.textField.stringValue = displayName; + return cell; +} + +- (void)outlineViewSelectionDidChange:(NSNotification *)notification { + id item = [_outlineView itemAtRow:[_outlineView selectedRow]]; + if ([item isKindOfClass:[NSDictionary class]]) { + _selectedServer = (NSMutableDictionary *)item; + [self populateForm]; + } else { + [self clearDetail]; + } +} + +// MARK: - Detail form helpers + +- (void)clearDetail { + _selectedServer = nil; + _placeholderLabel.hidden = NO; + [self formView].hidden = YES; +} + +- (NSView *)formView { + for (NSView *v in _detailView.subviews) { + if ([v.identifier isEqualToString:@"formContainer"]) return v; + } + return nil; +} + +- (void)populateForm { + // Populate SSH key popup from ~/.ssh/ + [_keyPopup removeAllItems]; + [_keyPopup addItemWithTitle:@"None"]; + NSString *sshDir = [NSHomeDirectory() stringByAppendingPathComponent:@".ssh"]; + NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sshDir error:nil]; + for (NSString *f in files) { + // Private keys: no .pub extension, not known_hosts/config/authorized_keys + if ([f hasSuffix:@".pub"]) continue; + if ([f isEqualToString:@"known_hosts"] || [f isEqualToString:@"config"] + || [f isEqualToString:@"authorized_keys"] || [f hasPrefix:@"."]) continue; + [_keyPopup addItemWithTitle:f]; + } + + // Populate category popup + [_categoryPopup removeAllItems]; + [_categoryPopup addItemsWithTitles:_appDelegate.categories]; + + // Fill in current server values + NSString *name = _selectedServer[@"name"] ?: @""; + NSString *host = _selectedServer[@"hostname"] ?: @""; + NSString *user = _selectedServer[@"user"] ?: @""; + NSString *port = _selectedServer[@"port"] ? [_selectedServer[@"port"] stringValue] : @""; + NSString *key = _selectedServer[@"identity_file"] ?: @""; + NSString *cat = _selectedServer[@"category"] ?: @""; + NSString *term = _selectedServer[@"terminal"] ?: @""; + + _nameField.stringValue = name; + _hostnameField.stringValue = host; + _userField.stringValue = user; + _portField.stringValue = port; + + if (key.length > 0 && [_keyPopup itemWithTitle:key]) + [_keyPopup selectItemWithTitle:key]; + else + [_keyPopup selectItemAtIndex:0]; + + if (cat.length > 0 && [_categoryPopup itemWithTitle:cat]) + [_categoryPopup selectItemWithTitle:cat]; + + if (term.length > 0 && [_terminalPopup itemWithTitle:term]) + [_terminalPopup selectItemWithTitle:term]; + else + [_terminalPopup selectItemAtIndex:0]; + + NSView *form = [self formView]; + form.hidden = NO; + _placeholderLabel.hidden = YES; +} + +// MARK: - Add / Remove actions + +- (IBAction)addServer:(id)sender { + // Find the first category (or create one) + NSMutableArray *cats = _appDelegate.categories; + if (cats.count == 0) { + [cats addObject:@"SERVERS"]; + } + NSString *defaultCat = cats.firstObject; + + NSMutableDictionary *newServer = [@{ + @"name": @"New Server", + @"hostname": @"", + @"category": defaultCat + } mutableCopy]; + + [_appDelegate.servers addObject:newServer]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + + // Select the new row + NSInteger row = [_outlineView rowForItem:newServer]; + if (row >= 0) { + [_outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:(NSUInteger)row] + byExtendingSelection:NO]; + [_outlineView scrollRowToVisible:row]; + } +} + +- (IBAction)removeServer:(id)sender { + if (!_selectedServer) return; + [_appDelegate.servers removeObject:_selectedServer]; + [self clearDetail]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self saveToFile]; +} + +- (IBAction)addCategory:(id)sender { + // Sheet-style prompt + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:@"New Category Name:"]; + [alert addButtonWithTitle:@"Add"]; + [alert addButtonWithTitle:@"Cancel"]; + + NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 240, 24)]; + [input setPlaceholderString:@"e.g. PRODUCTION"]; + [alert setAccessoryView:input]; + + if ([alert runModal] == NSAlertFirstButtonReturn) { + NSString *catName = [[input stringValue] + stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + if (catName.length == 0) return; + if ([_appDelegate.categories containsObject:catName]) return; + [_appDelegate.categories addObject:catName]; + [_categoryPopup addItemWithTitle:catName]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self saveToFile]; + } +} + +// MARK: - Save / Delete + +- (IBAction)saveServer:(id)sender { + if (!_selectedServer) return; + + _selectedServer[@"name"] = _nameField.stringValue; + _selectedServer[@"hostname"] = _hostnameField.stringValue; + _selectedServer[@"user"] = _userField.stringValue; + + NSInteger port = [_portField.stringValue integerValue]; + if (port > 0) + _selectedServer[@"port"] = @(port); + else + [_selectedServer removeObjectForKey:@"port"]; + + NSString *selectedKey = [_keyPopup titleOfSelectedItem]; + if ([selectedKey isEqualToString:@"None"] || selectedKey.length == 0) + [_selectedServer removeObjectForKey:@"identity_file"]; + else + _selectedServer[@"identity_file"] = [[@"~/.ssh/" stringByAppendingString:selectedKey] + stringByExpandingTildeInPath]; + + _selectedServer[@"category"] = [_categoryPopup titleOfSelectedItem] ?: @""; + + NSString *term = [_terminalPopup titleOfSelectedItem]; + if ([term isEqualToString:@"Default (from settings)"] || term.length == 0) + [_selectedServer removeObjectForKey:@"terminal"]; + else + _selectedServer[@"terminal"] = term; + + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + + // Re-select the saved server + NSInteger row = [_outlineView rowForItem:_selectedServer]; + if (row >= 0) + [_outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:(NSUInteger)row] + byExtendingSelection:NO]; + + [self saveToFile]; +} + +- (IBAction)deleteServer:(id)sender { + if (!_selectedServer) return; + NSAlert *confirm = [[NSAlert alloc] init]; + [confirm setMessageText:@"Delete this server?"]; + [confirm setInformativeText:[NSString stringWithFormat:@"\"%@\" will be removed from your address book.", + _selectedServer[@"name"] ?: _selectedServer[@"hostname"]]]; + [confirm addButtonWithTitle:@"Delete"]; + [confirm addButtonWithTitle:@"Cancel"]; + if ([confirm runModal] == NSAlertFirstButtonReturn) { + [_appDelegate.servers removeObject:_selectedServer]; + [self clearDetail]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self saveToFile]; + } +} + +// MARK: - Persist to JSON + +- (void)saveToFile { + NSString *path = _appDelegate.configFilePath; + NSData *existing = [NSData dataWithContentsOfFile:path]; + id json = existing ? [NSJSONSerialization JSONObjectWithData:existing + options:NSJSONReadingMutableContainers + error:nil] : nil; + NSMutableDictionary *root = json ? [json mutableCopy] : [NSMutableDictionary dictionary]; + + root[@"categories"] = _appDelegate.categories; + root[@"servers"] = _appDelegate.servers; + [root removeObjectForKey:@"hosts"]; // remove legacy key if present + + NSData *out = [NSJSONSerialization dataWithJSONObject:root + options:NSJSONWritingPrettyPrinted + error:nil]; + [out writeToFile:path atomically:YES]; + [_appDelegate loadMenu]; +} + +@end diff --git a/Shuttle/shuttle.default.json b/Shuttle/shuttle.default.json index 51d1e30..17bac8a 100644 --- a/Shuttle/shuttle.default.json +++ b/Shuttle/shuttle.default.json @@ -1,60 +1,8 @@ { - "_comments": [ - "Valid terminals include: 'Terminal.app' or 'iTerm'", - "In the editor value change 'default' to 'nano', 'vi', or another terminal based editor.", - "Hosts will also be read from your ~/.ssh/config or /etc/ssh_config file, if available", - "For more information on how to configure, please see http://fitztrev.github.io/shuttle/" - ], + "terminal": "terminal", "editor": "default", "launch_at_login": false, - "terminal": "Terminal.app", - "iTerm_version": "nightly", - "default_theme": "Homebrew", - "open_in": "new", "show_ssh_config_hosts": false, - "ssh_config_ignore_hosts": [ ], - "ssh_config_ignore_keywords": [ ], - "hosts": [ - { - "cmd": "ps aux | grep defaults", - "name": "Grep - Opens in Default-window-theme-title" - }, - { - "Spouses Servers": [ - { - "cmd": "echo '—->WARNING! Running commands<-- Are you sure? y/n'; read sure; if [ $sure == y ]; then echo running command && ps aux | grep [a]pple; else echo save to history and show... && history -s 'ps aux | grep [a]pple' && osascript -e 'tell application \"System Events\" to keystroke \"p\" using {control down}'; fi", - "inTerminal": "current", - "name": "Logs - Opens in the current active terminal window" - }, - { - "Jane’s Servers": [ - { - "cmd": "ssh username@blog2.example.com", - "inTerminal": "tab", - "name": "SSH blog - Opens in Tab of active window", - "theme": "basic", - "title": "title of tab" - }, - { - "cmd": "ssh username@shop1.example.com", - "inTerminal": "new", - "name": "SSH Shop - Opens in New Window", - "theme": "basic", - "title": "title of new window" - } - ] - } - ] - }, - { - "Vagrant": [ - { - "cmd": "ssh vagrant@127.0.0.1 -p 2222 -i ~/.vagrant.d/insecure_private_key", - "name": "Vagrant - Opens in default-window-theme-title" - } - ] - } - ] + "categories": ["LOCAL SERVERS", "REMOTE SERVERS"], + "servers": [] } - - \ No newline at end of file From f4742e445886b53b6e2a63dec69a762e515cb3f3 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:07:44 -0800 Subject: [PATCH 03/25] Fix import/export and add hostname resolution to LAN scanner Import fixes: - Replace deprecated NSOKButton with NSModalResponseOK - Call loadMenu after successful import so menu refreshes immediately - Properly clear stale backup before move; restore backup on copy failure - Add allowed file type filter (json) to open panel Export fixes: - Replace deprecated NSFileHandlingPanelOKButton with NSModalResponseOK - Set default filename to shuttle.json in save panel - Remove pre-existing file at destination before copy (prevents silent failure) LAN scanner hostname support: - IP scan now calls reverseResolve: (getnameinfo) for each discovered host, storing {ip, hostname} dicts instead of bare IP strings - Add NSNetServiceBrowser scanning _ssh._tcp. on local. domain for Bonjour/mDNS hosts (finds .local hostnames without needing an IP sweep) - rebuildLanSubmenu merges both sources, deduplicates by hostname, shows "hostname (ip)" label and SSHes to hostname when available Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.h | 4 +- Shuttle/AppDelegate.m | 176 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 145 insertions(+), 35 deletions(-) diff --git a/Shuttle/AppDelegate.h b/Shuttle/AppDelegate.h index 7fbdd29..2760333 100644 --- a/Shuttle/AppDelegate.h +++ b/Shuttle/AppDelegate.h @@ -50,7 +50,9 @@ // LAN SSH scanner NSMenu *lanSubMenu; - NSMutableArray *lanHosts; + NSMutableArray *lanHosts; // array of {ip, hostname} dicts from port-22 scan + NSMutableArray *bonjourHosts; // array of {hostname, ip} dicts from mDNS/_ssh._tcp. + NSNetServiceBrowser *sshBrowser; NSDate *lastLanScan; BOOL isLanScanning; diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index b02dacb..bc89415 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -12,6 +12,11 @@ #include #include #include +#include + +@interface AppDelegate () +@property (nonatomic, strong) NSMutableArray *pendingServices; // NSNetService objects awaiting resolution +@end @implementation AppDelegate @@ -534,11 +539,36 @@ - (BOOL)isPort22OpenAt:(NSString *)ip { return open; } +// Reverse-DNS lookup. Returns hostname string or nil if unresolvable. Safe to call off main thread. +- (NSString *)reverseResolve:(NSString *)ip { + struct sockaddr_in sa; + memset(&sa, 0, sizeof(sa)); + sa.sin_family = AF_INET; + if (inet_pton(AF_INET, [ip UTF8String], &sa.sin_addr) <= 0) return nil; + char host[NI_MAXHOST]; + if (getnameinfo((struct sockaddr *)&sa, sizeof(sa), host, sizeof(host), + NULL, 0, NI_NAMEREQD) != 0) return nil; + NSString *resolved = [NSString stringWithUTF8String:host]; + // Strip trailing dot if present (DNS FQDN artefact) + if ([resolved hasSuffix:@"."]) resolved = [resolved substringToIndex:resolved.length - 1]; + return resolved; +} + - (void)scanLAN { if (isLanScanning) return; isLanScanning = YES; + lanHosts = [NSMutableArray array]; + bonjourHosts = [NSMutableArray array]; [self rebuildLanSubmenu]; + // ---- Bonjour / mDNS: find _ssh._tcp. services on local. ---- + [sshBrowser stop]; + self.pendingServices = [NSMutableArray array]; + sshBrowser = [[NSNetServiceBrowser alloc] init]; + sshBrowser.delegate = self; + [sshBrowser searchForServicesOfType:@"_ssh._tcp." inDomain:@"local."]; + + // ---- Port-22 sweep with reverse-DNS ---- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *localIP = [self localIPAddress]; if (!localIP) { @@ -558,7 +588,9 @@ - (void)scanLAN { dispatch_group_async(group, q, ^{ dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); if ([self isPort22OpenAt:ip]) { - @synchronized(lock) { [found addObject:ip]; } + NSString *hostname = [self reverseResolve:ip] ?: ip; + NSDictionary *entry = @{@"ip": ip, @"hostname": hostname}; + @synchronized(lock) { [found addObject:entry]; } } dispatch_semaphore_signal(sem); }); @@ -573,6 +605,47 @@ - (void)scanLAN { }); } +// MARK: - NSNetServiceBrowser delegate + +- (void)netServiceBrowser:(NSNetServiceBrowser *)browser + didFindService:(NSNetService *)service + moreComing:(BOOL)moreComing { + service.delegate = self; + [self.pendingServices addObject:service]; // retain during resolution + [service resolveWithTimeout:5.0]; +} + +- (void)netServiceDidResolveAddress:(NSNetService *)service { + NSString *host = service.hostName ?: service.name; + // Strip trailing dot + if ([host hasSuffix:@"."]) host = [host substringToIndex:host.length - 1]; + + // Try to extract an IPv4 address from the resolved addresses + NSString *resolvedIP = @""; + for (NSData *addrData in service.addresses) { + const struct sockaddr *sa = (const struct sockaddr *)addrData.bytes; + if (sa->sa_family == AF_INET) { + char buf[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &((const struct sockaddr_in *)sa)->sin_addr, buf, sizeof(buf)); + resolvedIP = [NSString stringWithUTF8String:buf]; + break; + } + } + + NSDictionary *entry = @{@"hostname": host, @"ip": resolvedIP}; + dispatch_async(dispatch_get_main_queue(), ^{ + [bonjourHosts addObject:entry]; + [self.pendingServices removeObject:service]; + [self rebuildLanSubmenu]; + }); +} + +- (void)netService:(NSNetService *)service didNotResolve:(NSDictionary *)errorDict { + [self.pendingServices removeObject:service]; +} + +// MARK: - Build LAN submenu + - (void)rebuildLanSubmenu { if (!lanSubMenu) return; [lanSubMenu removeAllItems]; @@ -580,18 +653,48 @@ - (void)rebuildLanSubmenu { if (isLanScanning) { NSMenuItem *item = [lanSubMenu addItemWithTitle:@"Scanning..." action:nil keyEquivalent:@""]; [item setEnabled:NO]; - } else if (!lanHosts || lanHosts.count == 0) { - NSMenuItem *item = [lanSubMenu addItemWithTitle:@"No SSH hosts found" action:nil keyEquivalent:@""]; - [item setEnabled:NO]; } else { - NSArray *sorted = [lanHosts sortedArrayUsingComparator:^NSComparisonResult(NSString *a, NSString *b) { - return [a compare:b options:NSNumericSearch]; - }]; - for (NSString *ip in sorted) { - NSString *cmd = [NSString stringWithFormat:@"ssh %@", ip]; - NSString *repObj = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, ip]; - NSMenuItem *item = [lanSubMenu addItemWithTitle:ip action:@selector(openHost:) keyEquivalent:@""]; - [item setRepresentedObject:repObj]; + // Merge IP-scan results and Bonjour results, deduplicating by hostname. + // Bonjour names are preferred (they're the canonical mDNS name). + NSMutableArray *combined = [NSMutableArray array]; + NSMutableSet *seenHostnames = [NSMutableSet set]; + + for (NSDictionary *h in bonjourHosts) { + NSString *hn = h[@"hostname"]; + if (hn.length > 0 && ![seenHostnames containsObject:hn]) { + [combined addObject:h]; + [seenHostnames addObject:hn]; + } + } + for (NSDictionary *h in lanHosts) { + NSString *hn = h[@"hostname"]; + if (hn.length > 0 && ![seenHostnames containsObject:hn]) { + [combined addObject:h]; + [seenHostnames addObject:hn]; + } + } + + if (combined.count == 0) { + NSMenuItem *item = [lanSubMenu addItemWithTitle:@"No SSH hosts found" action:nil keyEquivalent:@""]; + [item setEnabled:NO]; + } else { + NSArray *sorted = [combined sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *a, NSDictionary *b) { + return [a[@"hostname"] compare:b[@"hostname"] options:NSCaseInsensitiveSearch]; + }]; + for (NSDictionary *host in sorted) { + NSString *hostname = host[@"hostname"]; + NSString *ip = host[@"ip"]; + // SSH target: prefer hostname (works for .local and FQDN), fall back to IP + NSString *sshTarget = (hostname.length > 0) ? hostname : ip; + // Menu label: "hostname (ip)" when we have both and they differ, else just the target + NSString *label = sshTarget; + if (ip.length > 0 && ![hostname isEqualToString:ip]) + label = [NSString stringWithFormat:@"%@ (%@)", hostname, ip]; + NSString *cmd = [NSString stringWithFormat:@"ssh %@", sshTarget]; + NSString *repObj = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, label]; + NSMenuItem *item = [lanSubMenu addItemWithTitle:label action:@selector(openHost:) keyEquivalent:@""]; + [item setRepresentedObject:repObj]; + } } } @@ -690,22 +793,24 @@ - (void) openHost:(NSMenuItem *) sender { } - (IBAction)showImportPanel:(id)sender { - NSOpenPanel * openPanelObj = [NSOpenPanel openPanel]; - NSInteger tvarNSInteger = [openPanelObj runModal]; - if(tvarNSInteger == NSOKButton){ - //Backup the current configuration - [[NSFileManager defaultManager] moveItemAtPath:shuttleConfigFile toPath: [NSHomeDirectory() stringByAppendingPathComponent:@".shuttle.json.backup"] error: nil]; - - NSURL * selectedFileUrl = [openPanelObj URL]; - //Import the selected file - //NSLog(@"copy filename from %@ to %@",selectedFileUrl.path,shuttleConfigFile); - [[NSFileManager defaultManager] copyItemAtPath:selectedFileUrl.path toPath:shuttleConfigFile error:nil]; - //Delete the old configuration file - [[NSFileManager defaultManager] removeItemAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@".shuttle.json.backup"] error: nil]; - } else { + NSOpenPanel *panel = [NSOpenPanel openPanel]; + [panel setAllowedFileTypes:@[@"json"]]; + if ([panel runModal] != NSModalResponseOK) return; + + NSString *backup = [shuttleConfigFile stringByAppendingString:@".backup"]; + NSFileManager *fm = [NSFileManager defaultManager]; + [fm removeItemAtPath:backup error:nil]; // clear any stale backup + [fm copyItemAtPath:shuttleConfigFile toPath:backup error:nil]; // back up current config + [fm removeItemAtPath:shuttleConfigFile error:nil]; + NSError *copyErr = nil; + [fm copyItemAtPath:panel.URL.path toPath:shuttleConfigFile error:©Err]; + if (copyErr) { + // Restore backup on failure + [fm copyItemAtPath:backup toPath:shuttleConfigFile error:nil]; + [self throwError:@"Import failed" additionalInfo:copyErr.localizedDescription continueOnErrorOption:YES]; return; } - + [self loadMenu]; } -(void) throwError:(NSString*)errorMessage additionalInfo:(NSString*)errorInfo continueOnErrorOption:(BOOL)continueOption { @@ -728,14 +833,17 @@ -(void) throwError:(NSString*)errorMessage additionalInfo:(NSString*)errorInfo c } - (IBAction)showExportPanel:(id)sender { - NSSavePanel * savePanelObj = [NSSavePanel savePanel]; - //Display the Save Panel - NSInteger result = [savePanelObj runModal]; - if (result == NSFileHandlingPanelOKButton) { - NSURL *saveURL = [savePanelObj URL]; - // then copy a previous file to the new location - [[NSFileManager defaultManager] copyItemAtPath:shuttleConfigFile toPath:saveURL.path error:nil]; - } + NSSavePanel *panel = [NSSavePanel savePanel]; + [panel setAllowedFileTypes:@[@"json"]]; + [panel setNameFieldStringValue:@"shuttle.json"]; + if ([panel runModal] != NSModalResponseOK) return; + + NSString *dest = panel.URL.path; + [[NSFileManager defaultManager] removeItemAtPath:dest error:nil]; // overwrite if exists + NSError *copyErr = nil; + [[NSFileManager defaultManager] copyItemAtPath:shuttleConfigFile toPath:dest error:©Err]; + if (copyErr) + [self throwError:@"Export failed" additionalInfo:copyErr.localizedDescription continueOnErrorOption:YES]; } - (IBAction)configure:(id)sender { From ff044369763000dee817ee0fc7ae85b711d802f3 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:21:59 -0800 Subject: [PATCH 04/25] Redesign Manager window for native macOS appearance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NSVisualEffectView sidebar with Sidebar material (translucent, auto dark mode) - NSOutlineView with source-list highlight style; group headers in uppercase semibold 11pt secondary-color text, server rows at 28pt row height - NSSegmentedControl (+/−) replaces individual Add/Remove buttons; lightweight font for +/− glyphs - NSGridView form with right-aligned 12pt secondary-color labels and 13pt fields, perfectly pixel-aligned via column width/xPlacement settings - Name field uses 15pt font; hostname placeholder updated to include .local hint - Save button set as key equivalent (Return = blue/default); Delete button uses hasDestructiveAction for system styling - Form centered (slightly above vertical midpoint) inside resizable detail pane - Wipe legacy hosts from ~/.shuttle.json, reset to clean servers/categories schema Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/ServerManagerWindowController.m | 701 ++++++++++++------------ 1 file changed, 357 insertions(+), 344 deletions(-) diff --git a/Shuttle/ServerManagerWindowController.m b/Shuttle/ServerManagerWindowController.m index 9370665..cc578cb 100644 --- a/Shuttle/ServerManagerWindowController.m +++ b/Shuttle/ServerManagerWindowController.m @@ -6,45 +6,50 @@ #import "ServerManagerWindowController.h" #import "AppDelegate.h" -// MARK: - Private interface - @interface ServerManagerWindowController () -@property (nonatomic, weak) AppDelegate *appDelegate; +@property (nonatomic, weak) AppDelegate *appDelegate; -// Split layout -@property (nonatomic, strong) NSSplitView *splitView; +// Layout +@property (nonatomic, strong) NSSplitView *splitView; // Left pane -@property (nonatomic, strong) NSScrollView *sidebarScroll; -@property (nonatomic, strong) NSOutlineView *outlineView; -@property (nonatomic, strong) NSButton *addServerBtn; -@property (nonatomic, strong) NSButton *removeServerBtn; -@property (nonatomic, strong) NSButton *addCategoryBtn; - -// Right pane — detail form -@property (nonatomic, strong) NSView *detailView; -@property (nonatomic, strong) NSTextField *placeholderLabel; - -@property (nonatomic, strong) NSTextField *nameField; -@property (nonatomic, strong) NSTextField *hostnameField; -@property (nonatomic, strong) NSTextField *userField; -@property (nonatomic, strong) NSTextField *portField; -@property (nonatomic, strong) NSPopUpButton *keyPopup; -@property (nonatomic, strong) NSPopUpButton *categoryPopup; -@property (nonatomic, strong) NSPopUpButton *terminalPopup; -@property (nonatomic, strong) NSButton *saveBtn; -@property (nonatomic, strong) NSButton *deleteBtn; +@property (nonatomic, strong) NSVisualEffectView *sidebar; +@property (nonatomic, strong) NSOutlineView *outlineView; +@property (nonatomic, strong) NSSegmentedControl *addRemoveControl; + +// Right pane +@property (nonatomic, strong) NSView *detailPane; +@property (nonatomic, strong) NSTextField *placeholderLabel; + +// Form — built once, shown/hidden +@property (nonatomic, strong) NSView *formContainer; +@property (nonatomic, strong) NSTextField *nameField; +@property (nonatomic, strong) NSTextField *hostnameField; +@property (nonatomic, strong) NSTextField *userField; +@property (nonatomic, strong) NSTextField *portField; +@property (nonatomic, strong) NSPopUpButton *keyPopup; +@property (nonatomic, strong) NSPopUpButton *categoryPopup; +@property (nonatomic, strong) NSPopUpButton *terminalPopup; +@property (nonatomic, strong) NSButton *saveBtn; +@property (nonatomic, strong) NSButton *deleteBtn; // State -@property (nonatomic, strong) NSMutableDictionary *selectedServer; +@property (nonatomic, strong) NSMutableDictionary *selectedServer; @end -// MARK: - Implementation - @implementation ServerManagerWindowController +static const CGFloat kSidebarWidth = 200.0; +static const CGFloat kBottomBarH = 34.0; +static const CGFloat kLabelColW = 78.0; +static const CGFloat kFieldColW = 270.0; +static const CGFloat kRowSpacing = 10.0; +static const CGFloat kColSpacing = 8.0; + +// MARK: - Init + - (instancetype)initWithAppDelegate:(AppDelegate *)delegate { self = [super initWithWindow:nil]; if (self) { @@ -54,213 +59,224 @@ - (instancetype)initWithAppDelegate:(AppDelegate *)delegate { return self; } -// MARK: - Window construction +// MARK: - Window - (void)buildWindow { - NSRect frame = NSMakeRect(0, 0, 720, 500); - NSUInteger style = NSWindowStyleMaskTitled - | NSWindowStyleMaskClosable - | NSWindowStyleMaskResizable - | NSWindowStyleMaskMiniaturizable; - + NSRect frame = NSMakeRect(0, 0, 700, 480); + NSWindowStyleMask style = NSWindowStyleMaskTitled + | NSWindowStyleMaskClosable + | NSWindowStyleMaskMiniaturizable + | NSWindowStyleMaskResizable; NSWindow *win = [[NSWindow alloc] initWithContentRect:frame styleMask:style backing:NSBackingStoreBuffered defer:NO]; - [win setTitle:@"SSH Manager"]; + win.title = @"SSH Manager"; + win.minSize = NSMakeSize(580, 380); [win center]; [self setWindow:win]; - // ---- Split view ---- _splitView = [[NSSplitView alloc] initWithFrame:win.contentView.bounds]; - [_splitView setDividerStyle:NSSplitViewDividerStyleThin]; - [_splitView setVertical:YES]; - [_splitView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + _splitView.dividerStyle = NSSplitViewDividerStyleThin; + _splitView.vertical = YES; + _splitView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; [win.contentView addSubview:_splitView]; - // ---- Left pane ---- - NSView *leftPane = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 220, 500)]; + [self buildSidebar]; + [self buildDetailPane]; + + [_splitView setPosition:kSidebarWidth ofDividerAtIndex:0]; +} + +// MARK: - Sidebar + +- (void)buildSidebar { + NSRect r = NSMakeRect(0, 0, kSidebarWidth, 480); + + _sidebar = [[NSVisualEffectView alloc] initWithFrame:r]; + _sidebar.material = NSVisualEffectMaterialSidebar; + _sidebar.blendingMode = NSVisualEffectBlendingModeBehindWindow; + _sidebar.state = NSVisualEffectStateActive; + + // ---- Outline scroll view ---- + NSRect scrollFrame = NSMakeRect(0, kBottomBarH, kSidebarWidth, 480 - kBottomBarH); + NSScrollView *scroll = [[NSScrollView alloc] initWithFrame:scrollFrame]; + scroll.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + scroll.hasVerticalScroller = YES; + scroll.drawsBackground = NO; - // Outline view _outlineView = [[NSOutlineView alloc] init]; - [_outlineView setDataSource:self]; - [_outlineView setDelegate:self]; - [_outlineView setHeaderView:nil]; - [_outlineView setRowSizeStyle:NSTableViewRowSizeStyleMedium]; - [_outlineView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList]; - [_outlineView setFloatsGroupRows:NO]; - - NSTableColumn *col = [[NSTableColumn alloc] initWithIdentifier:@"main"]; - [col setMinWidth:100]; + _outlineView.dataSource = self; + _outlineView.delegate = self; + _outlineView.headerView = nil; + _outlineView.rowSizeStyle = NSTableViewRowSizeStyleDefault; + _outlineView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleSourceList; + _outlineView.floatsGroupRows = NO; + _outlineView.backgroundColor = [NSColor clearColor]; + _outlineView.intercellSpacing = NSMakeSize(0, 2); + + NSTableColumn *col = [[NSTableColumn alloc] initWithIdentifier:@"col"]; + col.minWidth = 80; [_outlineView addTableColumn:col]; - [_outlineView setOutlineTableColumn:col]; - - _sidebarScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 32, 220, 468)]; - [_sidebarScroll setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [_sidebarScroll setHasVerticalScroller:YES]; - [_sidebarScroll setDocumentView:_outlineView]; - [leftPane addSubview:_sidebarScroll]; - - // Bottom bar buttons - NSView *bottomBar = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 220, 32)]; - [bottomBar setAutoresizingMask:NSViewWidthSizable]; - - _addServerBtn = [NSButton buttonWithTitle:@"+" target:self action:@selector(addServer:)]; - [_addServerBtn setFrame:NSMakeRect(4, 4, 26, 24)]; - [_addServerBtn setBezelStyle:NSBezelStyleRounded]; - [_addServerBtn setFont:[NSFont systemFontOfSize:16]]; - [bottomBar addSubview:_addServerBtn]; - - _removeServerBtn = [NSButton buttonWithTitle:@"−" target:self action:@selector(removeServer:)]; - [_removeServerBtn setFrame:NSMakeRect(32, 4, 26, 24)]; - [_removeServerBtn setBezelStyle:NSBezelStyleRounded]; - [_removeServerBtn setFont:[NSFont systemFontOfSize:16]]; - [bottomBar addSubview:_removeServerBtn]; - - _addCategoryBtn = [NSButton buttonWithTitle:@"+ Category" target:self action:@selector(addCategory:)]; - [_addCategoryBtn setFrame:NSMakeRect(62, 4, 90, 24)]; - [_addCategoryBtn setBezelStyle:NSBezelStyleRounded]; - [_addCategoryBtn setFont:[NSFont systemFontOfSize:11]]; - [bottomBar addSubview:_addCategoryBtn]; - - [leftPane addSubview:bottomBar]; - [_splitView addSubview:leftPane]; - - // ---- Right pane (detail) ---- - _detailView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 500)]; - [_detailView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - - // Placeholder - _placeholderLabel = [NSTextField labelWithString:@"Select a server or add a new one."]; - [_placeholderLabel setAlignment:NSTextAlignmentCenter]; - [_placeholderLabel setTextColor:[NSColor secondaryLabelColor]]; - [_placeholderLabel setFont:[NSFont systemFontOfSize:14]]; - [_placeholderLabel setFrame:NSMakeRect(0, 200, 500, 30)]; - [_placeholderLabel setAutoresizingMask:NSViewWidthSizable | NSViewMaxYMargin | NSViewMinYMargin]; - [_detailView addSubview:_placeholderLabel]; - - // Form fields — built inside a container view - NSView *form = [self buildForm]; - [form setHidden:YES]; - [_detailView addSubview:form]; - - [_splitView addSubview:_detailView]; - - // Set initial divider position after window is shown - [_splitView setPosition:220 ofDividerAtIndex:0]; + _outlineView.outlineTableColumn = col; + + scroll.documentView = _outlineView; + [_sidebar addSubview:scroll]; + + // ---- Bottom action bar ---- + NSView *bar = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, kSidebarWidth, kBottomBarH)]; + bar.autoresizingMask = NSViewWidthSizable; + + // Hairline separator at top of bar + NSBox *sep = [[NSBox alloc] initWithFrame:NSMakeRect(0, kBottomBarH - 1, kSidebarWidth, 1)]; + sep.boxType = NSBoxSeparator; + sep.autoresizingMask = NSViewWidthSizable; + [bar addSubview:sep]; + + // +/− segmented control + _addRemoveControl = [NSSegmentedControl + segmentedControlWithLabels:@[@"+", @"−"] + trackingMode:NSSegmentSwitchTrackingMomentary + target:self + action:@selector(addRemoveAction:)]; + _addRemoveControl.frame = NSMakeRect(7, 5, 54, 24); + _addRemoveControl.font = [NSFont systemFontOfSize:16 weight:NSFontWeightLight]; + [bar addSubview:_addRemoveControl]; + + // New Category button + NSButton *catBtn = [NSButton buttonWithTitle:@"New Category" + target:self + action:@selector(addCategory:)]; + catBtn.bezelStyle = NSBezelStyleRounded; + catBtn.font = [NSFont systemFontOfSize:11]; + catBtn.frame = NSMakeRect(66, 5, 110, 24); + [bar addSubview:catBtn]; + + [_sidebar addSubview:bar]; + [_splitView addSubview:_sidebar]; } -- (NSView *)buildForm { - NSView *form = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 500)]; - [form setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - form.identifier = @"formContainer"; +// MARK: - Detail pane + +- (void)buildDetailPane { + _detailPane = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 480)]; + _detailPane.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + + // Placeholder shown when nothing is selected + _placeholderLabel = [NSTextField labelWithString:@"Select a server or press + to add one."]; + _placeholderLabel.alignment = NSTextAlignmentCenter; + _placeholderLabel.textColor = [NSColor tertiaryLabelColor]; + _placeholderLabel.font = [NSFont systemFontOfSize:13]; + _placeholderLabel.autoresizingMask = NSViewWidthSizable | NSViewMinYMargin | NSViewMaxYMargin; + [_detailPane addSubview:_placeholderLabel]; + + // Form container + _formContainer = [[NSView alloc] init]; + _formContainer.autoresizingMask = NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin; + _formContainer.hidden = YES; + + [self buildFormFields]; + [_detailPane addSubview:_formContainer]; + [_splitView addSubview:_detailPane]; +} - CGFloat x = 130, w = 300, lx = 20, lw = 105, row = 420, rowH = 30, gap = 36; +// MARK: - Form fields (NSGridView) - // Helper blocks - NSTextField *(^makeLabel)(NSString *) = ^NSTextField *(NSString *text) { - NSTextField *lbl = [NSTextField labelWithString:text]; - [lbl setAlignment:NSTextAlignmentRight]; - [lbl setFont:[NSFont systemFontOfSize:12]]; - return lbl; +- (void)buildFormFields { + // Label factory: right-aligned, small, secondary color + NSTextField *(^lbl)(NSString *) = ^(NSString *t) { + NSTextField *f = [NSTextField labelWithString:t]; + f.alignment = NSTextAlignmentRight; + f.font = [NSFont systemFontOfSize:12]; + f.textColor = [NSColor secondaryLabelColor]; + return f; }; - NSTextField *(^makeField)(void) = ^NSTextField *(void) { + // Text field factory + NSTextField *(^fld)(NSString *) = ^(NSString *ph) { NSTextField *f = [[NSTextField alloc] init]; - [f setBezelStyle:NSTextFieldSquareBezel]; - [f setBordered:YES]; - [f setEditable:YES]; + f.bezeled = YES; + f.bezelStyle = NSTextFieldSquareBezel; + f.editable = YES; + f.font = [NSFont systemFontOfSize:13]; + f.placeholderString = ph; + f.delegate = self; return f; }; - // Name (larger) - NSTextField *nameLbl = makeLabel(@"Name:"); - [nameLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:nameLbl]; - - _nameField = makeField(); - [_nameField setFont:[NSFont boldSystemFontOfSize:14]]; - [_nameField setFrame:NSMakeRect(x, row, w, rowH)]; - [_nameField setDelegate:self]; - [form addSubview:_nameField]; - row -= gap; - - // Hostname - NSTextField *hostLbl = makeLabel(@"Hostname:"); - [hostLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:hostLbl]; - - _hostnameField = makeField(); - [_hostnameField setFrame:NSMakeRect(x, row, w, rowH)]; - [_hostnameField setDelegate:self]; - [form addSubview:_hostnameField]; - row -= gap; - - // Username + Port side by side - NSTextField *userLbl = makeLabel(@"User:"); - [userLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:userLbl]; - - _userField = makeField(); - [_userField setFrame:NSMakeRect(x, row, 140, rowH)]; - [_userField setDelegate:self]; - [form addSubview:_userField]; - - NSTextField *portLbl = makeLabel(@"Port:"); - [portLbl setAlignment:NSTextAlignmentLeft]; - [portLbl setFrame:NSMakeRect(x + 148, row, 38, rowH)]; - [form addSubview:portLbl]; - - _portField = makeField(); - [_portField setFrame:NSMakeRect(x + 190, row, 110, rowH)]; - [_portField setPlaceholderString:@"22"]; - [_portField setDelegate:self]; - [form addSubview:_portField]; - row -= gap; - - // SSH Key - NSTextField *keyLbl = makeLabel(@"SSH Key:"); - [keyLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:keyLbl]; - - _keyPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; - [form addSubview:_keyPopup]; - row -= gap; - - // Category - NSTextField *catLbl = makeLabel(@"Category:"); - [catLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:catLbl]; - - _categoryPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; - [form addSubview:_categoryPopup]; - row -= gap; - - // Terminal - NSTextField *termLbl = makeLabel(@"Terminal:"); - [termLbl setFrame:NSMakeRect(lx, row, lw, rowH)]; - [form addSubview:termLbl]; - - _terminalPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(x, row, w, rowH) pullsDown:NO]; - [_terminalPopup addItemsWithTitles:@[@"Default (from settings)", @"terminal", @"iterm", @"ghostty"]]; - [form addSubview:_terminalPopup]; - row -= gap; - - row -= 10; // spacer - - // Save + Delete buttons - _saveBtn = [NSButton buttonWithTitle:@"Save" target:self action:@selector(saveServer:)]; - [_saveBtn setFrame:NSMakeRect(x, row, 90, 28)]; - [_saveBtn setBezelStyle:NSBezelStyleRounded]; - [_saveBtn setKeyEquivalent:@"\r"]; - [form addSubview:_saveBtn]; - - _deleteBtn = [NSButton buttonWithTitle:@"Delete Server" target:self action:@selector(deleteServer:)]; - [_deleteBtn setFrame:NSMakeRect(x + 100, row, 120, 28)]; - [_deleteBtn setBezelStyle:NSBezelStyleRounded]; - [form addSubview:_deleteBtn]; - - return form; + _nameField = fld(@"Display name"); + _nameField.font = [NSFont systemFontOfSize:15]; + + _hostnameField = fld(@"hostname, .local name, or IP address"); + _userField = fld(@"username"); + _portField = fld(@"22"); + + _keyPopup = [[NSPopUpButton alloc] init]; + _keyPopup.font = [NSFont systemFontOfSize:13]; + + _categoryPopup = [[NSPopUpButton alloc] init]; + _categoryPopup.font = [NSFont systemFontOfSize:13]; + + _terminalPopup = [[NSPopUpButton alloc] init]; + [_terminalPopup addItemsWithTitles:@[@"Default (from settings)", + @"terminal", @"iterm", @"ghostty"]]; + _terminalPopup.font = [NSFont systemFontOfSize:13]; + + // Grid: two columns — label | control + NSGridView *grid = [NSGridView gridViewWithViews:@[ + @[lbl(@"Name"), _nameField], + @[lbl(@"Hostname"), _hostnameField], + @[lbl(@"User"), _userField], + @[lbl(@"Port"), _portField], + @[lbl(@"SSH Key"), _keyPopup], + @[lbl(@"Category"), _categoryPopup], + @[lbl(@"Terminal"), _terminalPopup], + ]]; + grid.rowSpacing = kRowSpacing; + grid.columnSpacing = kColSpacing; + [grid columnAtIndex:0].xPlacement = NSGridCellPlacementTrailing; + [grid columnAtIndex:0].width = kLabelColW; + [grid columnAtIndex:1].width = kFieldColW; + + // Buttons below grid + _saveBtn = [NSButton buttonWithTitle:@"Save Changes" + target:self action:@selector(saveServer:)]; + _saveBtn.bezelStyle = NSBezelStyleRounded; + _saveBtn.keyEquivalent = @"\r"; + + _deleteBtn = [NSButton buttonWithTitle:@"Delete Server" + target:self action:@selector(deleteServer:)]; + _deleteBtn.bezelStyle = NSBezelStyleRounded; + + // Size everything, place in formContainer + CGSize gs = grid.fittingSize; + CGFloat totalW = gs.width; + CGFloat btnH = 28.0; + CGFloat gap = 14.0; + CGFloat totalH = gs.height + gap + btnH; + + _formContainer.frame = NSMakeRect(0, 0, totalW, totalH); + + grid.frame = NSMakeRect(0, btnH + gap, gs.width, gs.height); + [_formContainer addSubview:grid]; + + _saveBtn.frame = NSMakeRect(kLabelColW + kColSpacing, 0, 120, btnH); + _deleteBtn.frame = NSMakeRect(kLabelColW + kColSpacing + 128, 0, 120, btnH); + [_formContainer addSubview:_saveBtn]; + [_formContainer addSubview:_deleteBtn]; +} + +// Centers formContainer inside detailPane +- (void)layoutFormInPane { + CGFloat pw = _detailPane.bounds.size.width ?: 500; + CGFloat ph = _detailPane.bounds.size.height ?: 480; + CGFloat fw = _formContainer.bounds.size.width; + CGFloat fh = _formContainer.bounds.size.height; + CGFloat x = floor((pw - fw) / 2.0); + CGFloat y = floor((ph - fh) / 2.0) + 20; // slightly above center + _formContainer.frame = NSMakeRect(x, y, fw, fh); + + _placeholderLabel.frame = NSMakeRect(0, floor(ph / 2.0) - 10, pw, 20); } // MARK: - Public @@ -268,32 +284,27 @@ - (NSView *)buildForm { - (void)reload { [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; - [self clearDetail]; + [self showPlaceholder]; } -// MARK: - Outline data source +// MARK: - NSOutlineView data source - (NSInteger)outlineView:(NSOutlineView *)ov numberOfChildrenOfItem:(id)item { - if (item == nil) { - return (NSInteger)[_appDelegate.categories count]; - } - if ([item isKindOfClass:[NSString class]]) { - NSString *cat = item; + if (!item) + return (NSInteger)_appDelegate.categories.count; + if ([item isKindOfClass:[NSString class]]) return (NSInteger)[[_appDelegate.servers filteredArrayUsingPredicate: - [NSPredicate predicateWithFormat:@"category == %@", cat]] count]; - } + [NSPredicate predicateWithFormat:@"category == %@", item]] count]; return 0; } -- (id)outlineView:(NSOutlineView *)ov child:(NSInteger)index ofItem:(id)item { - if (item == nil) { - return _appDelegate.categories[(NSUInteger)index]; - } +- (id)outlineView:(NSOutlineView *)ov child:(NSInteger)idx ofItem:(id)item { + if (!item) + return _appDelegate.categories[(NSUInteger)idx]; if ([item isKindOfClass:[NSString class]]) { - NSString *cat = item; - NSArray *catServers = [_appDelegate.servers filteredArrayUsingPredicate: - [NSPredicate predicateWithFormat:@"category == %@", cat]]; - return catServers[(NSUInteger)index]; + NSArray *cs = [_appDelegate.servers filteredArrayUsingPredicate: + [NSPredicate predicateWithFormat:@"category == %@", item]]; + return cs[(NSUInteger)idx]; } return nil; } @@ -302,7 +313,7 @@ - (BOOL)outlineView:(NSOutlineView *)ov isItemExpandable:(id)item { return [item isKindOfClass:[NSString class]]; } -// MARK: - Outline delegate +// MARK: - NSOutlineView delegate - (BOOL)outlineView:(NSOutlineView *)ov isGroupItem:(id)item { return [item isKindOfClass:[NSString class]]; @@ -312,137 +323,136 @@ - (BOOL)outlineView:(NSOutlineView *)ov shouldSelectItem:(id)item { return [item isKindOfClass:[NSDictionary class]]; } -- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)col item:(id)item { +- (NSTableRowView *)outlineView:(NSOutlineView *)ov rowViewForItem:(id)item { + return nil; // use default +} + +- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tc item:(id)item { if ([item isKindOfClass:[NSString class]]) { - NSString *cat = item; - NSTableCellView *cell = [ov makeViewWithIdentifier:@"groupCell" owner:self]; + NSTableCellView *cell = [ov makeViewWithIdentifier:@"group" owner:self]; if (!cell) { - cell = [[NSTableCellView alloc] initWithFrame:NSZeroRect]; - cell.identifier = @"groupCell"; + cell = [[NSTableCellView alloc] init]; + cell.identifier = @"group"; NSTextField *tf = [NSTextField labelWithString:@""]; + tf.font = [NSFont systemFontOfSize:11 weight:NSFontWeightSemibold]; + tf.textColor = [NSColor secondaryLabelColor]; tf.identifier = @"text"; - tf.font = [NSFont boldSystemFontOfSize:11]; [cell addSubview:tf]; cell.textField = tf; } - cell.textField.stringValue = cat; + cell.textField.stringValue = [(NSString *)item uppercaseString]; return cell; } - // Server row NSDictionary *server = item; - NSTableCellView *cell = [ov makeViewWithIdentifier:@"serverCell" owner:self]; + NSTableCellView *cell = [ov makeViewWithIdentifier:@"server" owner:self]; if (!cell) { - cell = [[NSTableCellView alloc] initWithFrame:NSZeroRect]; - cell.identifier = @"serverCell"; + cell = [[NSTableCellView alloc] init]; + cell.identifier = @"server"; NSTextField *tf = [NSTextField labelWithString:@""]; - tf.identifier = @"text"; tf.font = [NSFont systemFontOfSize:13]; + tf.identifier = @"text"; [cell addSubview:tf]; cell.textField = tf; } - NSString *displayName = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; - cell.textField.stringValue = displayName; + NSString *name = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; + cell.textField.stringValue = name; return cell; } -- (void)outlineViewSelectionDidChange:(NSNotification *)notification { - id item = [_outlineView itemAtRow:[_outlineView selectedRow]]; +- (CGFloat)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item { + return [item isKindOfClass:[NSString class]] ? 22.0 : 28.0; +} + +- (void)outlineViewSelectionDidChange:(NSNotification *)note { + id item = [_outlineView itemAtRow:_outlineView.selectedRow]; if ([item isKindOfClass:[NSDictionary class]]) { _selectedServer = (NSMutableDictionary *)item; [self populateForm]; } else { - [self clearDetail]; + [self showPlaceholder]; } } -// MARK: - Detail form helpers +// MARK: - Show / hide form -- (void)clearDetail { +- (void)showPlaceholder { _selectedServer = nil; + [self layoutFormInPane]; + _formContainer.hidden = YES; _placeholderLabel.hidden = NO; - [self formView].hidden = YES; -} - -- (NSView *)formView { - for (NSView *v in _detailView.subviews) { - if ([v.identifier isEqualToString:@"formContainer"]) return v; - } - return nil; } - (void)populateForm { - // Populate SSH key popup from ~/.ssh/ + // SSH keys from ~/.ssh/ [_keyPopup removeAllItems]; [_keyPopup addItemWithTitle:@"None"]; NSString *sshDir = [NSHomeDirectory() stringByAppendingPathComponent:@".ssh"]; - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sshDir error:nil]; - for (NSString *f in files) { - // Private keys: no .pub extension, not known_hosts/config/authorized_keys - if ([f hasSuffix:@".pub"]) continue; - if ([f isEqualToString:@"known_hosts"] || [f isEqualToString:@"config"] - || [f isEqualToString:@"authorized_keys"] || [f hasPrefix:@"."]) continue; + NSArray *sshFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sshDir error:nil]; + for (NSString *f in sshFiles) { + if ([f hasSuffix:@".pub"]) continue; + if ([f isEqualToString:@"known_hosts"] || + [f isEqualToString:@"config"] || + [f isEqualToString:@"authorized_keys"] || + [f hasPrefix:@"."]) continue; [_keyPopup addItemWithTitle:f]; } - // Populate category popup + // Categories [_categoryPopup removeAllItems]; [_categoryPopup addItemsWithTitles:_appDelegate.categories]; - // Fill in current server values - NSString *name = _selectedServer[@"name"] ?: @""; - NSString *host = _selectedServer[@"hostname"] ?: @""; - NSString *user = _selectedServer[@"user"] ?: @""; - NSString *port = _selectedServer[@"port"] ? [_selectedServer[@"port"] stringValue] : @""; - NSString *key = _selectedServer[@"identity_file"] ?: @""; - NSString *cat = _selectedServer[@"category"] ?: @""; - NSString *term = _selectedServer[@"terminal"] ?: @""; - - _nameField.stringValue = name; - _hostnameField.stringValue = host; - _userField.stringValue = user; - _portField.stringValue = port; + // Fill values + _nameField.stringValue = _selectedServer[@"name"] ?: @""; + _hostnameField.stringValue = _selectedServer[@"hostname"] ?: @""; + _userField.stringValue = _selectedServer[@"user"] ?: @""; + _portField.stringValue = _selectedServer[@"port"] ? [_selectedServer[@"port"] stringValue] : @""; - if (key.length > 0 && [_keyPopup itemWithTitle:key]) - [_keyPopup selectItemWithTitle:key]; + NSString *key = _selectedServer[@"identity_file"] ?: @""; + NSString *keyName = [key lastPathComponent]; + if (keyName.length && [_keyPopup itemWithTitle:keyName]) + [_keyPopup selectItemWithTitle:keyName]; else [_keyPopup selectItemAtIndex:0]; - if (cat.length > 0 && [_categoryPopup itemWithTitle:cat]) - [_categoryPopup selectItemWithTitle:cat]; + NSString *cat = _selectedServer[@"category"] ?: @""; + if ([_categoryPopup itemWithTitle:cat]) [_categoryPopup selectItemWithTitle:cat]; - if (term.length > 0 && [_terminalPopup itemWithTitle:term]) + NSString *term = _selectedServer[@"terminal"] ?: @""; + if (term.length && [_terminalPopup itemWithTitle:term]) [_terminalPopup selectItemWithTitle:term]; else [_terminalPopup selectItemAtIndex:0]; - NSView *form = [self formView]; - form.hidden = NO; + [self layoutFormInPane]; _placeholderLabel.hidden = YES; + _formContainer.hidden = NO; } -// MARK: - Add / Remove actions +// MARK: - Add / Remove server -- (IBAction)addServer:(id)sender { - // Find the first category (or create one) - NSMutableArray *cats = _appDelegate.categories; - if (cats.count == 0) { - [cats addObject:@"SERVERS"]; - } - NSString *defaultCat = cats.firstObject; +- (IBAction)addRemoveAction:(NSSegmentedControl *)sender { + if (sender.selectedSegment == 0) + [self addServer]; + else + [self removeServer]; +} - NSMutableDictionary *newServer = [@{ +- (void)addServer { + if (_appDelegate.categories.count == 0) + [_appDelegate.categories addObject:@"SERVERS"]; + + NSMutableDictionary *s = [@{ @"name": @"New Server", @"hostname": @"", - @"category": defaultCat + @"category": _appDelegate.categories.firstObject } mutableCopy]; + [_appDelegate.servers addObject:s]; - [_appDelegate.servers addObject:newServer]; [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; - // Select the new row - NSInteger row = [_outlineView rowForItem:newServer]; + NSInteger row = [_outlineView rowForItem:s]; if (row >= 0) { [_outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:(NSUInteger)row] byExtendingSelection:NO]; @@ -450,40 +460,42 @@ - (IBAction)addServer:(id)sender { } } -- (IBAction)removeServer:(id)sender { +- (void)removeServer { if (!_selectedServer) return; [_appDelegate.servers removeObject:_selectedServer]; - [self clearDetail]; + [self showPlaceholder]; [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; [self saveToFile]; } +// MARK: - Add category + - (IBAction)addCategory:(id)sender { - // Sheet-style prompt NSAlert *alert = [[NSAlert alloc] init]; - [alert setMessageText:@"New Category Name:"]; + alert.messageText = @"New Category"; [alert addButtonWithTitle:@"Add"]; [alert addButtonWithTitle:@"Cancel"]; - NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 240, 24)]; - [input setPlaceholderString:@"e.g. PRODUCTION"]; - [alert setAccessoryView:input]; - - if ([alert runModal] == NSAlertFirstButtonReturn) { - NSString *catName = [[input stringValue] - stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - if (catName.length == 0) return; - if ([_appDelegate.categories containsObject:catName]) return; - [_appDelegate.categories addObject:catName]; - [_categoryPopup addItemWithTitle:catName]; - [_outlineView reloadData]; - [_outlineView expandItem:nil expandChildren:YES]; - [self saveToFile]; - } + NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 240, 22)]; + input.placeholderString = @"e.g. PRODUCTION"; + input.font = [NSFont systemFontOfSize:13]; + alert.accessoryView = input; + [alert.window makeFirstResponder:input]; + + if ([alert runModal] != NSAlertFirstButtonReturn) return; + + NSString *name = [input.stringValue stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (!name.length || [_appDelegate.categories containsObject:name.uppercaseString]) return; + + [_appDelegate.categories addObject:name.uppercaseString]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self saveToFile]; } -// MARK: - Save / Delete +// MARK: - Save server - (IBAction)saveServer:(id)sender { if (!_selectedServer) return; @@ -492,23 +504,22 @@ - (IBAction)saveServer:(id)sender { _selectedServer[@"hostname"] = _hostnameField.stringValue; _selectedServer[@"user"] = _userField.stringValue; - NSInteger port = [_portField.stringValue integerValue]; - if (port > 0) + NSInteger port = _portField.stringValue.integerValue; + if (port > 0 && port != 22) _selectedServer[@"port"] = @(port); else [_selectedServer removeObjectForKey:@"port"]; - NSString *selectedKey = [_keyPopup titleOfSelectedItem]; - if ([selectedKey isEqualToString:@"None"] || selectedKey.length == 0) + NSString *selKey = [_keyPopup titleOfSelectedItem]; + if (!selKey || [selKey isEqualToString:@"None"]) [_selectedServer removeObjectForKey:@"identity_file"]; else - _selectedServer[@"identity_file"] = [[@"~/.ssh/" stringByAppendingString:selectedKey] - stringByExpandingTildeInPath]; + _selectedServer[@"identity_file"] = [@"~/.ssh/" stringByAppendingString:selKey]; _selectedServer[@"category"] = [_categoryPopup titleOfSelectedItem] ?: @""; NSString *term = [_terminalPopup titleOfSelectedItem]; - if ([term isEqualToString:@"Default (from settings)"] || term.length == 0) + if (!term || [term isEqualToString:@"Default (from settings)"]) [_selectedServer removeObjectForKey:@"terminal"]; else _selectedServer[@"terminal"] = term; @@ -516,45 +527,47 @@ - (IBAction)saveServer:(id)sender { [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; - // Re-select the saved server NSInteger row = [_outlineView rowForItem:_selectedServer]; if (row >= 0) [_outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:(NSUInteger)row] byExtendingSelection:NO]; - [self saveToFile]; } +// MARK: - Delete server + - (IBAction)deleteServer:(id)sender { if (!_selectedServer) return; - NSAlert *confirm = [[NSAlert alloc] init]; - [confirm setMessageText:@"Delete this server?"]; - [confirm setInformativeText:[NSString stringWithFormat:@"\"%@\" will be removed from your address book.", - _selectedServer[@"name"] ?: _selectedServer[@"hostname"]]]; - [confirm addButtonWithTitle:@"Delete"]; - [confirm addButtonWithTitle:@"Cancel"]; - if ([confirm runModal] == NSAlertFirstButtonReturn) { - [_appDelegate.servers removeObject:_selectedServer]; - [self clearDetail]; - [_outlineView reloadData]; - [_outlineView expandItem:nil expandChildren:YES]; - [self saveToFile]; - } + + NSAlert *a = [[NSAlert alloc] init]; + a.messageText = @"Delete this server?"; + a.informativeText = [NSString stringWithFormat:@"\"%@\" will be permanently removed.", + _selectedServer[@"name"] ?: _selectedServer[@"hostname"] ?: @"This server"]; + [a addButtonWithTitle:@"Delete"]; + [a addButtonWithTitle:@"Cancel"]; + a.buttons.firstObject.hasDestructiveAction = YES; + + if ([a runModal] != NSAlertFirstButtonReturn) return; + + [_appDelegate.servers removeObject:_selectedServer]; + [self showPlaceholder]; + [_outlineView reloadData]; + [_outlineView expandItem:nil expandChildren:YES]; + [self saveToFile]; } -// MARK: - Persist to JSON +// MARK: - Persist - (void)saveToFile { NSString *path = _appDelegate.configFilePath; NSData *existing = [NSData dataWithContentsOfFile:path]; - id json = existing ? [NSJSONSerialization JSONObjectWithData:existing - options:NSJSONReadingMutableContainers - error:nil] : nil; - NSMutableDictionary *root = json ? [json mutableCopy] : [NSMutableDictionary dictionary]; - + id parsed = existing ? [NSJSONSerialization JSONObjectWithData:existing + options:NSJSONReadingMutableContainers + error:nil] : nil; + NSMutableDictionary *root = parsed ? [parsed mutableCopy] : [NSMutableDictionary dictionary]; root[@"categories"] = _appDelegate.categories; root[@"servers"] = _appDelegate.servers; - [root removeObjectForKey:@"hosts"]; // remove legacy key if present + [root removeObjectForKey:@"hosts"]; NSData *out = [NSJSONSerialization dataWithJSONObject:root options:NSJSONWritingPrettyPrinted From 4bffe402c47e2e4a97bf9e27e2b0e99a7c949b88 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:26:52 -0800 Subject: [PATCH 05/25] Fix double terminal window and sort LAN scan by last IP octet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Terminal.app double-window fix: the previous one-liner caused Terminal to open its startup window when not running, then do script created a second window. New approach: activate Terminal first (so its startup window exists), then run do script in front window — always results in exactly one terminal session. LAN scan sort: replaced hostname alphabetical sort with numeric sort by last octet of IP address. Bonjour-only entries (no IP) sort to the end. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index bc89415..7e097b6 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -679,7 +679,14 @@ - (void)rebuildLanSubmenu { [item setEnabled:NO]; } else { NSArray *sorted = [combined sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *a, NSDictionary *b) { - return [a[@"hostname"] compare:b[@"hostname"] options:NSCaseInsensitiveSearch]; + NSString *ipA = a[@"ip"], *ipB = b[@"ip"]; + // Entries with no IP (Bonjour-only) sort to the end + if (!ipA.length && !ipB.length) return NSOrderedSame; + if (!ipA.length) return NSOrderedDescending; + if (!ipB.length) return NSOrderedAscending; + NSInteger lastA = [[[ipA componentsSeparatedByString:@"."] lastObject] integerValue]; + NSInteger lastB = [[[ipB componentsSeparatedByString:@"."] lastObject] integerValue]; + return lastA < lastB ? NSOrderedAscending : lastA > lastB ? NSOrderedDescending : NSOrderedSame; }]; for (NSDictionary *host in sorted) { NSString *hostname = host[@"hostname"]; @@ -778,9 +785,20 @@ - (void) openHost:(NSMenuItem *) sender { [task setArguments:@[@"-e", [NSString stringWithFormat: @"tell application \"iTerm\" to create window with default profile command \"%@\"", sshCmd]]]; } else { + // Activate Terminal first so its startup window exists, then run in that + // window — prevents a second window from appearing when Terminal wasn't open. + NSString *script = [NSString stringWithFormat: + @"tell application \"Terminal\"\n" + @" activate\n" + @" if (count windows) = 0 then\n" + @" do script \"%@\"\n" + @" else\n" + @" do script \"%@\" in front window\n" + @" end if\n" + @"end tell", + sshCmd, sshCmd]; [task setLaunchPath:@"/usr/bin/osascript"]; - [task setArguments:@[@"-e", [NSString stringWithFormat: - @"tell application \"Terminal\" to do script \"%@\"", sshCmd]]]; + [task setArguments:@[@"-e", script]]; } NSError *error = nil; From 6ab6e13e5e712d299aff2853e3be2225de66aaaa Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:32:48 -0800 Subject: [PATCH 06/25] Add Save to Address Book from LAN scanner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each scanned host now shows a submenu instead of a direct connect action: - Connect — launches SSH as before - Save to Address Book… — prompts for a display name (pre-filled with the detected hostname) and a category picker, then writes the host into servers[], persists to JSON, and reloads the menu Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 91 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 7 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 7e097b6..a49d176 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -689,18 +689,34 @@ - (void)rebuildLanSubmenu { return lastA < lastB ? NSOrderedAscending : lastA > lastB ? NSOrderedDescending : NSOrderedSame; }]; for (NSDictionary *host in sorted) { - NSString *hostname = host[@"hostname"]; - NSString *ip = host[@"ip"]; - // SSH target: prefer hostname (works for .local and FQDN), fall back to IP + NSString *hostname = host[@"hostname"]; + NSString *ip = host[@"ip"]; NSString *sshTarget = (hostname.length > 0) ? hostname : ip; - // Menu label: "hostname (ip)" when we have both and they differ, else just the target - NSString *label = sshTarget; + NSString *label = sshTarget; if (ip.length > 0 && ![hostname isEqualToString:ip]) label = [NSString stringWithFormat:@"%@ (%@)", hostname, ip]; + + // Top-level item is the host label; it gets a submenu + NSMenuItem *hostItem = [[NSMenuItem alloc] initWithTitle:label action:nil keyEquivalent:@""]; + NSMenu *hostMenu = [[NSMenu alloc] init]; + + // Connect NSString *cmd = [NSString stringWithFormat:@"ssh %@", sshTarget]; NSString *repObj = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, label]; - NSMenuItem *item = [lanSubMenu addItemWithTitle:label action:@selector(openHost:) keyEquivalent:@""]; - [item setRepresentedObject:repObj]; + NSMenuItem *connectItem = [[NSMenuItem alloc] initWithTitle:@"Connect" action:@selector(openHost:) keyEquivalent:@""]; + [connectItem setRepresentedObject:repObj]; + [hostMenu addItem:connectItem]; + + // Save to Address Book + NSMenuItem *saveItem = [[NSMenuItem alloc] initWithTitle:@"Save to Address Book…" + action:@selector(saveLanHostToAddressBook:) + keyEquivalent:@""]; + [saveItem setRepresentedObject:@{@"hostname": sshTarget, @"ip": ip ?: @""}]; + [saveItem setTarget:self]; + [hostMenu addItem:saveItem]; + + [hostItem setSubmenu:hostMenu]; + [lanSubMenu addItem:hostItem]; } } } @@ -724,6 +740,67 @@ - (IBAction)scanNow:(id)sender { [self scanLAN]; } +- (IBAction)saveLanHostToAddressBook:(NSMenuItem *)sender { + NSDictionary *host = sender.representedObject; + NSString *detectedHost = host[@"hostname"] ?: host[@"ip"] ?: @""; + + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = @"Save to Address Book"; + alert.informativeText = [NSString stringWithFormat:@"Host: %@", detectedHost]; + [alert addButtonWithTitle:@"Save"]; + [alert addButtonWithTitle:@"Cancel"]; + + // Accessory view: name field + category popup stacked vertically + NSView *accessory = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 260, 56)]; + + NSTextField *nameField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 30, 260, 22)]; + nameField.placeholderString = @"Display name (optional)"; + nameField.stringValue = detectedHost; + nameField.font = [NSFont systemFontOfSize:13]; + [accessory addSubview:nameField]; + + NSPopUpButton *catPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 260, 26) pullsDown:NO]; + if (categories.count > 0) + [catPopup addItemsWithTitles:categories]; + else + [catPopup addItemWithTitle:@"LOCAL SERVERS"]; + [accessory addSubview:catPopup]; + + alert.accessoryView = accessory; + [alert.window makeFirstResponder:nameField]; + + if ([alert runModal] != NSAlertFirstButtonReturn) return; + + NSString *name = [nameField.stringValue stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (!name.length) name = detectedHost; + NSString *category = [catPopup titleOfSelectedItem] ?: @"LOCAL SERVERS"; + + // Ensure category exists + if (![categories containsObject:category]) + [categories addObject:category]; + + NSMutableDictionary *newServer = [@{ + @"name": name, + @"hostname": detectedHost, + @"category": category + } mutableCopy]; + [servers addObject:newServer]; + + // Persist and refresh + NSData *existing = [NSData dataWithContentsOfFile:shuttleConfigFile]; + id parsed = existing ? [NSJSONSerialization JSONObjectWithData:existing + options:NSJSONReadingMutableContainers + error:nil] : nil; + NSMutableDictionary *root = parsed ? [parsed mutableCopy] : [NSMutableDictionary dictionary]; + root[@"categories"] = categories; + root[@"servers"] = servers; + [root removeObjectForKey:@"hosts"]; + NSData *out = [NSJSONSerialization dataWithJSONObject:root options:NSJSONWritingPrettyPrinted error:nil]; + [out writeToFile:shuttleConfigFile atomically:YES]; + [self loadMenu]; +} + // MARK: - - (void) separatorSortRemoval:(NSString *)currentName { From f4489468ae13f7cd5593e14ca83ad3a36fcb4ebc Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:42:32 -0800 Subject: [PATCH 07/25] Respect per-server terminal override in openHost: buildMenuFromServers now encodes the server's terminal key as a 6th field in the representedObject string. openHost: reads it and uses it if set, falling back to the global terminalPref, then to "terminal". This means a server with "terminal":"ghostty" will open in Ghostty even if the global setting says otherwise. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index a49d176..5aaa8f6 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -442,9 +442,12 @@ - (void)buildMenuFromServers { NSMenu *subMenu = [[NSMenu alloc] init]; for (NSDictionary *server in catServers) { - NSString *name = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; - NSString *cmd = [self sshCommandForServer:server]; - NSString *rep = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@", cmd, name]; + NSString *name = server[@"name"] ?: server[@"hostname"] ?: @"Unnamed"; + NSString *cmd = [self sshCommandForServer:server]; + NSString *termOverride = server[@"terminal"] ?: @""; + // Format: cmd¬_¬theme¬_¬title¬_¬window¬_¬name¬_¬terminalOverride + NSString *rep = [NSString stringWithFormat:@"%@¬_¬(null)¬_¬(null)¬_¬(null)¬_¬%@¬_¬%@", + cmd, name, termOverride]; NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:name action:@selector(openHost:) keyEquivalent:@""]; [item setRepresentedObject:rep]; [subMenu addItem:item]; @@ -849,8 +852,11 @@ - (void) openHost:(NSMenuItem *) sender { return; } - // Resolve terminal preference; default to "terminal" (native Terminal.app) - NSString *terminal = ([terminalPref length] > 0) ? terminalPref : @"terminal"; + // Per-server terminal override (field 5) takes precedence over global pref + NSString *termOverride = (objectsFromJSON.count > 5) ? objectsFromJSON[5] : @""; + NSString *terminal = (termOverride.length > 0 && ![termOverride isEqualToString:@"(null)"]) + ? termOverride + : (terminalPref.length > 0 ? terminalPref : @"terminal"); NSTask *task = [[NSTask alloc] init]; From dc453611eccc00dc2abf3bc721e4ee4aecdc351c Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:46:01 -0800 Subject: [PATCH 08/25] Detect installed terminals via Launch Services instead of hardcoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - installedTerminals: queries NSWorkspace URLForApplicationWithBundleIdentifier: for Terminal, iTerm2, Ghostty, Alacritty, kitty, Warp, Hyper, Rio — only returns what is actually installed on the machine - executableForBundleID: resolves the real binary path via NSBundle, no more hardcoded /Applications/Ghostty.app/... paths - openHost: dispatches per terminal using dynamic binary lookup; Warp uses its URL scheme; unknown terminals fall back to Terminal.app - Manager terminal popup rebuilt from installedTerminals at open time; stores/restores the JSON identifier (e.g. "ghostty") not the display name Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.h | 3 + Shuttle/AppDelegate.m | 94 ++++++++++++++++++++++--- Shuttle/ServerManagerWindowController.m | 43 ++++++++--- 3 files changed, 120 insertions(+), 20 deletions(-) diff --git a/Shuttle/AppDelegate.h b/Shuttle/AppDelegate.h index 2760333..64ec84a 100644 --- a/Shuttle/AppDelegate.h +++ b/Shuttle/AppDelegate.h @@ -70,6 +70,9 @@ - (void)loadMenu; - (IBAction)showManager:(id)sender; +// Returns array of {name, identifier, bundleID} dicts for installed terminal apps +- (NSArray *)installedTerminals; + - (void)menuWillOpen:(NSMenu *)menu; @end diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 5aaa8f6..1147ef4 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -425,6 +425,38 @@ - (void) buildMenu:(NSArray*)data addToMenu:(NSMenu *)m { } } +// MARK: - Terminal Detection + +- (NSArray *)installedTerminals { + // Ordered list of known terminal apps: {display name, JSON identifier, bundle ID} + NSArray *candidates = @[ + @{@"name": @"Terminal", @"id": @"terminal", @"bundle": @"com.apple.Terminal"}, + @{@"name": @"iTerm2", @"id": @"iterm", @"bundle": @"com.googlecode.iterm2"}, + @{@"name": @"Ghostty", @"id": @"ghostty", @"bundle": @"com.mitchellh.ghostty"}, + @{@"name": @"Alacritty", @"id": @"alacritty", @"bundle": @"io.alacritty"}, + @{@"name": @"kitty", @"id": @"kitty", @"bundle": @"net.kovidgoyal.kitty"}, + @{@"name": @"Warp", @"id": @"warp", @"bundle": @"dev.warp.Warp-Stable"}, + @{@"name": @"Hyper", @"id": @"hyper", @"bundle": @"co.zeit.hyper"}, + @{@"name": @"Rio", @"id": @"rio", @"bundle": @"com.raphaelamorim.rio"}, + ]; + + NSWorkspace *ws = [NSWorkspace sharedWorkspace]; + NSMutableArray *found = [NSMutableArray array]; + for (NSDictionary *t in candidates) { + NSURL *url = [ws URLForApplicationWithBundleIdentifier:t[@"bundle"]]; + if (url) [found addObject:t]; + } + return found; +} + +// Returns the main executable path for a terminal given its bundle ID +- (NSString *)executableForBundleID:(NSString *)bundleID { + NSURL *appURL = [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:bundleID]; + if (!appURL) return nil; + NSBundle *bundle = [NSBundle bundleWithURL:appURL]; + return bundle.executablePath; +} + // MARK: - Public Accessors - (NSMutableArray *)servers { return servers; } @@ -859,17 +891,16 @@ - (void) openHost:(NSMenuItem *) sender { : (terminalPref.length > 0 ? terminalPref : @"terminal"); NSTask *task = [[NSTask alloc] init]; + NSError *error = nil; - if ([terminal isEqualToString:@"ghostty"]) { - [task setLaunchPath:@"/Applications/Ghostty.app/Contents/MacOS/ghostty"]; - [task setArguments:@[@"-e", sshCmd]]; - } else if ([terminal hasPrefix:@"iterm"]) { + if ([terminal isEqualToString:@"iterm"]) { + NSString *script = [NSString stringWithFormat: + @"tell application \"iTerm\" to create window with default profile command \"%@\"", sshCmd]; [task setLaunchPath:@"/usr/bin/osascript"]; - [task setArguments:@[@"-e", [NSString stringWithFormat: - @"tell application \"iTerm\" to create window with default profile command \"%@\"", sshCmd]]]; - } else { - // Activate Terminal first so its startup window exists, then run in that - // window — prevents a second window from appearing when Terminal wasn't open. + [task setArguments:@[@"-e", script]]; + + } else if ([terminal isEqualToString:@"terminal"]) { + // Activate first so the startup window exists, then run inside it. NSString *script = [NSString stringWithFormat: @"tell application \"Terminal\"\n" @" activate\n" @@ -882,13 +913,54 @@ - (void) openHost:(NSMenuItem *) sender { sshCmd, sshCmd]; [task setLaunchPath:@"/usr/bin/osascript"]; [task setArguments:@[@"-e", script]]; + + } else { + // For all other terminals, find the binary via Launch Services and + // pass the command with -e (works for Ghostty, Alacritty, kitty, etc.) + NSDictionary *bundleMap = @{ + @"ghostty": @"com.mitchellh.ghostty", + @"alacritty": @"io.alacritty", + @"kitty": @"net.kovidgoyal.kitty", + @"warp": @"dev.warp.Warp-Stable", + @"hyper": @"co.zeit.hyper", + @"rio": @"com.raphaelamorim.rio", + }; + NSString *bundleID = bundleMap[terminal]; + NSString *binary = bundleID ? [self executableForBundleID:bundleID] : nil; + + if (binary) { + [task setLaunchPath:binary]; + // Warp uses a URL scheme; others accept -e + if ([terminal isEqualToString:@"warp"]) { + NSString *encoded = [sshCmd stringByAddingPercentEncodingWithAllowedCharacters: + [NSCharacterSet URLQueryAllowedCharacterSet]]; + NSURL *url = [NSURL URLWithString: + [NSString stringWithFormat:@"warp://action/new_tab?command=%@", encoded]]; + [[NSWorkspace sharedWorkspace] openURL:url]; + return; + } + [task setArguments:@[@"-e", sshCmd]]; + } else { + // Unknown or not found — fall back to Terminal.app + NSString *script = [NSString stringWithFormat: + @"tell application \"Terminal\"\n" + @" activate\n" + @" if (count windows) = 0 then\n" + @" do script \"%@\"\n" + @" else\n" + @" do script \"%@\" in front window\n" + @" end if\n" + @"end tell", + sshCmd, sshCmd]; + [task setLaunchPath:@"/usr/bin/osascript"]; + [task setArguments:@[@"-e", script]]; + } } - NSError *error = nil; [task launchAndReturnError:&error]; if (error) { [self throwError:[NSString stringWithFormat:@"Failed to launch terminal: %@", error.localizedDescription] - additionalInfo:[NSString stringWithFormat:@"Check that \"%@\" is installed and your shuttle.json terminal setting is correct.", terminal] + additionalInfo:[NSString stringWithFormat:@"Could not open \"%@\". Check that it is installed.", terminal] continueOnErrorOption:NO]; } } diff --git a/Shuttle/ServerManagerWindowController.m b/Shuttle/ServerManagerWindowController.m index cc578cb..33875f8 100644 --- a/Shuttle/ServerManagerWindowController.m +++ b/Shuttle/ServerManagerWindowController.m @@ -218,9 +218,8 @@ - (void)buildFormFields { _categoryPopup.font = [NSFont systemFontOfSize:13]; _terminalPopup = [[NSPopUpButton alloc] init]; - [_terminalPopup addItemsWithTitles:@[@"Default (from settings)", - @"terminal", @"iterm", @"ghostty"]]; _terminalPopup.font = [NSFont systemFontOfSize:13]; + [self rebuildTerminalPopup]; // Grid: two columns — label | control NSGridView *grid = [NSGridView gridViewWithViews:@[ @@ -376,6 +375,22 @@ - (void)outlineViewSelectionDidChange:(NSNotification *)note { // MARK: - Show / hide form +- (void)rebuildTerminalPopup { + NSString *current = [_terminalPopup titleOfSelectedItem]; + [_terminalPopup removeAllItems]; + [_terminalPopup addItemWithTitle:@"Default (from settings)"]; + for (NSDictionary *t in [_appDelegate installedTerminals]) { + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:t[@"name"] action:nil keyEquivalent:@""]; + item.representedObject = t[@"id"]; // store the JSON identifier + [_terminalPopup.menu addItem:item]; + } + // Restore previous selection if still available + if (current && [_terminalPopup itemWithTitle:current]) + [_terminalPopup selectItemWithTitle:current]; + else + [_terminalPopup selectItemAtIndex:0]; +} + - (void)showPlaceholder { _selectedServer = nil; [self layoutFormInPane]; @@ -418,11 +433,20 @@ - (void)populateForm { NSString *cat = _selectedServer[@"category"] ?: @""; if ([_categoryPopup itemWithTitle:cat]) [_categoryPopup selectItemWithTitle:cat]; + [self rebuildTerminalPopup]; NSString *term = _selectedServer[@"terminal"] ?: @""; - if (term.length && [_terminalPopup itemWithTitle:term]) - [_terminalPopup selectItemWithTitle:term]; - else - [_terminalPopup selectItemAtIndex:0]; + // Match by stored identifier (representedObject on each item) + BOOL matched = NO; + if (term.length) { + for (NSMenuItem *item in _terminalPopup.itemArray) { + if ([item.representedObject isEqualToString:term]) { + [_terminalPopup selectItem:item]; + matched = YES; + break; + } + } + } + if (!matched) [_terminalPopup selectItemAtIndex:0]; [self layoutFormInPane]; _placeholderLabel.hidden = YES; @@ -518,11 +542,12 @@ - (IBAction)saveServer:(id)sender { _selectedServer[@"category"] = [_categoryPopup titleOfSelectedItem] ?: @""; - NSString *term = [_terminalPopup titleOfSelectedItem]; - if (!term || [term isEqualToString:@"Default (from settings)"]) + NSMenuItem *termItem = [_terminalPopup selectedItem]; + NSString *termID = termItem.representedObject; // the JSON identifier e.g. "ghostty" + if (!termID || termID.length == 0) [_selectedServer removeObjectForKey:@"terminal"]; else - _selectedServer[@"terminal"] = term; + _selectedServer[@"terminal"] = termID; [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; From 8fbb568f658da44739f6a710e974cdd8d45a6104 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 18:57:57 -0800 Subject: [PATCH 09/25] Fix Ghostty launch: use NSWorkspace + sh -c, expand tilde in key path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two root causes of the launch failure: 1. Tilde not expanded: identity_file stored as ~/.ssh/id_ed25519 was passed literally to Ghostty which doesn't shell-expand it. Fix: call stringByExpandingTildeInPath in sshCommandForServer:. 2. Command passed as single string: ghostty -e expects separate argv entries, not one blob. Ghostty was receiving the whole ssh command as a single argument and failing with "No such file or directory". Fix: use sh -c so the shell interprets it correctly. 3. App Management privacy prompt: NSTask accessing another app's internal binary (Ghostty.app/Contents/MacOS/ghostty) triggers macOS Sequoia's App Management entitlement check on every launch. Fix: replace NSTask with NSWorkspace openApplicationAtURL:configuration: which is the proper API for launching apps — macOS does not flag it. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 55 +++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 1147ef4..380c699 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -498,7 +498,7 @@ - (NSString *)sshCommandForServer:(NSDictionary *)server { NSInteger port = [server[@"port"] integerValue]; NSString *user = server[@"user"]; NSString *host = server[@"hostname"]; - if (key.length > 0) [cmd appendFormat:@" -i %@", key]; + if (key.length > 0) [cmd appendFormat:@" -i %@", [key stringByExpandingTildeInPath]]; if (port > 0 && port != 22) [cmd appendFormat:@" -p %ld", (long)port]; if (user.length > 0) [cmd appendFormat:@" %@@%@", user, host]; else [cmd appendFormat:@" %@", host]; @@ -914,34 +914,50 @@ - (void) openHost:(NSMenuItem *) sender { [task setLaunchPath:@"/usr/bin/osascript"]; [task setArguments:@[@"-e", script]]; + } else if ([terminal isEqualToString:@"warp"]) { + // Warp uses a URL scheme rather than CLI args + NSString *encoded = [sshCmd stringByAddingPercentEncodingWithAllowedCharacters: + [NSCharacterSet URLQueryAllowedCharacterSet]]; + NSURL *url = [NSURL URLWithString: + [NSString stringWithFormat:@"warp://action/new_tab?command=%@", encoded]]; + [[NSWorkspace sharedWorkspace] openURL:url]; + return; + } else { - // For all other terminals, find the binary via Launch Services and - // pass the command with -e (works for Ghostty, Alacritty, kitty, etc.) + // Ghostty, Alacritty, kitty, Hyper, Rio, etc. + // Use NSWorkspace to open the app — avoids the "App Management" privacy + // prompt that NSTask triggers when accessing another app's internal binary. + // Wrap command in sh -c so the shell handles any remaining expansion. NSDictionary *bundleMap = @{ @"ghostty": @"com.mitchellh.ghostty", @"alacritty": @"io.alacritty", @"kitty": @"net.kovidgoyal.kitty", - @"warp": @"dev.warp.Warp-Stable", @"hyper": @"co.zeit.hyper", @"rio": @"com.raphaelamorim.rio", }; NSString *bundleID = bundleMap[terminal]; - NSString *binary = bundleID ? [self executableForBundleID:bundleID] : nil; - - if (binary) { - [task setLaunchPath:binary]; - // Warp uses a URL scheme; others accept -e - if ([terminal isEqualToString:@"warp"]) { - NSString *encoded = [sshCmd stringByAddingPercentEncodingWithAllowedCharacters: - [NSCharacterSet URLQueryAllowedCharacterSet]]; - NSURL *url = [NSURL URLWithString: - [NSString stringWithFormat:@"warp://action/new_tab?command=%@", encoded]]; - [[NSWorkspace sharedWorkspace] openURL:url]; - return; - } - [task setArguments:@[@"-e", sshCmd]]; + NSURL *appURL = bundleID + ? [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:bundleID] + : nil; + + if (appURL) { + NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; + config.arguments = @[@"-e", @"sh", @"-c", sshCmd]; + [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL + configuration:config + completionHandler:^(NSRunningApplication *app, NSError *err) { + if (err) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, err.localizedDescription] + additionalInfo:@"Check that the terminal app is installed." + continueOnErrorOption:NO]; + }); + } + }]; + return; // completionHandler handles errors async } else { - // Unknown or not found — fall back to Terminal.app + // Unknown terminal — fall back to Terminal.app + [task setLaunchPath:@"/usr/bin/osascript"]; NSString *script = [NSString stringWithFormat: @"tell application \"Terminal\"\n" @" activate\n" @@ -952,7 +968,6 @@ - (void) openHost:(NSMenuItem *) sender { @" end if\n" @"end tell", sshCmd, sshCmd]; - [task setLaunchPath:@"/usr/bin/osascript"]; [task setArguments:@[@"-e", script]]; } } From 8e6f7f80ef8867059ddbfe10846ea251e2f8a2aa Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 19:02:17 -0800 Subject: [PATCH 10/25] Rewrite README with full feature documentation Covers: address book, Manager window, multi-terminal detection and dispatch, per-server SSH key and terminal override, LAN scanner (Bonjour + port sweep + reverse DNS), import/export, full JSON schema reference, build instructions, and a comparison table vs the original. Co-Authored-By: Claude Sonnet 4.6 --- README.md | 231 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 171 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 47daeaa..33c7778 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,177 @@ # Shuttle -[![Join the chat at https://gitter.im/fitztrev/shuttle](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/fitztrev/shuttle?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -A simple shortcut menu for macOS - -[http://fitztrev.github.io/shuttle/](http://fitztrev.github.io/shuttle/) - -![How Shuttle works](https://raw.githubusercontent.com/fitztrev/shuttle/gh-pages/images/how-shuttle-works.gif) - -**Sidenote**: *Many people ask, so here's how I have [my terminal setup](https://github.com/fitztrev/shuttle/wiki/My-Terminal-Prompt).* - -## Installation - -1. Download [Shuttle](http://fitztrev.github.io/shuttle/) -2. Copy to Applications - -## Help -See the [Wiki](https://github.com/fitztrev/shuttle/wiki) pages. - -## Roadmap - -* Cloud hosting integration - * AWS, Rackspace, Digital Ocean, etc - * Using their APIs, automatically add all of your machines to the menu -* Preferences panel for easier configuration -* Update notifications -* Keyboard hotkeys - * Open menu - * Select host option within menu - -## Contributors - -This project was created by [Trevor Fitzgerald](https://github.com/fitztrev). I owe many thanks to the following people who have helped make Shuttle even better. - -(In alphabetical order) - -* [Alexis NIVON](https://github.com/anivon) -* [Alex Carter](https://github.com/blazeworx) -* [bihicheng](https://github.com/bihicheng) -* [Dave Eddy](https://github.com/bahamas10) -* [Dmitry Filimonov](https://github.com/petethepig) -* [Frank Enderle](https://github.com/fenderle) -* [Jack Weeden](https://github.com/jackbot) -* [Justin Swanson](https://github.com/geeksunny) -* [Kees Fransen](https://github.com/keesfransen) -* Marco Aurélio -* [Martin Grund](https://github.com/grundprinzip) -* [Matt Turner](https://github.com/thshdw) -* [Michael Davis](https://github.com/mpdavis) -* [Morton Fox](https://github.com/mortonfox) -* [Pluwen](https://github.com/pluwen) -* Rebecca Dominguez -* [Rui Rodrigues](https://github.com/rmrodrigues) -* [Ryan Cohen](https://github.com/imryan) -* [Stefan Jansen](https://github.com/steffex) -* Thomas Rosenstein -* [Thoro](https://github.com/Thoro) -* [Tibor Bödecs](https://github.com/tib) -* [welsonla](https://github.com/welsonla) +A macOS menu bar SSH address book. Click the icon, connect to a server. No terminal juggling, no remembering hostnames. + +Built for macOS 12+ as a Universal Binary (native on Apple Silicon and Intel). + +--- + +## What It Does + +Shuttle lives in your menu bar as a small icon. Click it and you get an organized list of your SSH servers, grouped by category. Click a server and it opens a terminal session — no typing, no copy-pasting, no `~/.ssh/config` hunting. + +It also scans your local network for hosts with SSH open, lets you browse and connect to them, and lets you save discoveries directly into your address book with one click. + +--- + +## Features + +### SSH Address Book +- Store servers with a display name, hostname (or `.local` name or IP), username, port, SSH key, and category +- Servers are grouped under user-defined categories (e.g. LOCAL SERVERS, REMOTE SERVERS, PRODUCTION, etc.) +- All data lives in a simple JSON file at `~/.shuttle.json` — human-readable, version-controllable, easy to share + +### Manager Window +Accessible from **Settings → Manager…** in the menu bar. A native macOS split-view window modelled after Contacts.app: + +- **Left sidebar** — translucent sidebar with category group headers and server rows. `+`/`−` segmented control to add or remove servers. **New Category** button to create groupings. +- **Right detail pane** — form with Name, Hostname, User, Port, SSH Key picker (auto-populated from `~/.ssh/`), Category, and Terminal override. Save with Return or the Save button. Delete with confirmation. +- Changes are written to `~/.shuttle.json` immediately and the menu bar refreshes automatically. + +### Multi-Terminal Support +Shuttle detects which terminal apps are installed on your machine at launch time using macOS Launch Services — it only shows you what you actually have. Supported terminals: + +| Terminal | How it opens | +|---|---| +| Terminal.app | AppleScript — runs in existing front window, no duplicate windows | +| iTerm2 | AppleScript — new window with default profile | +| Ghostty | `NSWorkspace` + `sh -c` — no App Management privacy prompts | +| Alacritty | `NSWorkspace` + `sh -c` | +| kitty | `NSWorkspace` + `sh -c` | +| Warp | URL scheme (`warp://action/new_tab?command=…`) | +| Hyper | `NSWorkspace` + `sh -c` | +| Rio | `NSWorkspace` + `sh -c` | + +The global default terminal is set in `~/.shuttle.json` with the `"terminal"` key. Individual servers can override it with their own `"terminal"` field — useful when you want most servers in Terminal.app but specific ones in Ghostty. + +### Per-Server SSH Key +Each server can specify an SSH identity file. The key is picked from a dropdown populated from your `~/.ssh/` directory — only real private key files are shown (`.pub` files, `known_hosts`, `config`, and `authorized_keys` are excluded). The path is stored and expanded correctly — no tilde issues. + +### LAN SSH Scanner +Shuttle can scan your local `/24` subnet for hosts with port 22 open: + +- Runs an async parallel sweep using GCD with up to 50 concurrent probes (300ms timeout per host) +- Simultaneously runs an `NSNetServiceBrowser` search for `_ssh._tcp.` Bonjour/mDNS services — this finds `.local` hostnames (Macs, Raspberry Pis running `avahi-daemon`, NAS devices, etc.) without needing an IP sweep +- After the port scan, each discovered IP gets a reverse DNS lookup (`getnameinfo`) to resolve its hostname +- Results from both sources are merged and deduplicated by hostname +- Displayed sorted by last octet of IP address (`.1`, `.2` … `.254`) +- Bonjour-only entries (hostname known, IP not yet resolved) appear at the bottom + +Each discovered host shows as a submenu with two options: +- **Connect** — opens an SSH session immediately +- **Save to Address Book…** — prompts for a display name and category, then writes the server to `~/.shuttle.json` + +The submenu also shows how long ago the scan ran and a **Scan Now** option to re-scan on demand. The first scan triggers automatically when you open the menu for the first time. + +### Import / Export +- **Settings → Import** — choose a `.json` file to replace your current config. The current config is backed up first; if the import fails, it is automatically restored. +- **Settings → Export** — save your current `~/.shuttle.json` to any location with a file picker. Defaults to `shuttle.json`. + +--- + +## Configuration + +Shuttle uses `~/.shuttle.json`. On first launch, a default file is created automatically. + +### Full example + +```json +{ + "terminal": "ghostty", + "editor": "default", + "launch_at_login": false, + "show_ssh_config_hosts": false, + "categories": [ + "LOCAL SERVERS", + "REMOTE SERVERS", + "PRODUCTION" + ], + "servers": [ + { + "name": "Web Dev", + "hostname": "wp-dev.local", + "user": "nathandale", + "identity_file": "~/.ssh/id_ed25519", + "category": "LOCAL SERVERS", + "terminal": "ghostty" + }, + { + "name": "Production DB", + "hostname": "db1.example.com", + "user": "deploy", + "port": 2222, + "identity_file": "~/.ssh/prod_key", + "category": "PRODUCTION" + } + ] +} +``` + +### Keys + +| Key | Values | Description | +|---|---|---| +| `terminal` | `terminal`, `iterm`, `ghostty`, `alacritty`, `kitty`, `warp`, `hyper`, `rio` | Default terminal for all connections | +| `editor` | `default`, `nano`, `vi`, etc. | Editor used by Settings → Edit | +| `launch_at_login` | `true` / `false` | Start Shuttle when you log in | +| `show_ssh_config_hosts` | `true` / `false` | Show hosts from `~/.ssh/config` in the menu (legacy mode) | +| `categories` | array of strings | Category names, in display order | +| `servers` | array of server objects | Your address book entries | + +### Server object keys + +| Key | Required | Description | +|---|---|---| +| `name` | yes | Display name shown in the menu | +| `hostname` | yes | Hostname, `.local` mDNS name, or IP address | +| `user` | no | SSH username | +| `port` | no | SSH port (omit for default 22) | +| `identity_file` | no | Path to private key, e.g. `~/.ssh/id_ed25519` | +| `category` | yes | Must match an entry in `categories` | +| `terminal` | no | Per-server terminal override — takes precedence over global setting | + +--- + +## Building from Source + +Requires Xcode 14+ on macOS 12 Monterey or later. + +```bash +git clone https://github.com/nathandale/shuttle.git +cd shuttle +xcodebuild -scheme Shuttle -configuration Release build +``` + +The built app lands at: +``` +~/Library/Developer/Xcode/DerivedData/Shuttle-*/Build/Products/Release/Shuttle.app +``` + +The app is a Universal Binary — runs natively on both Apple Silicon (arm64) and Intel (x86_64). Deployment target is macOS 12.0. + +--- + +## How It Differs from the Original + +This fork of [fitztrev/shuttle](https://github.com/fitztrev/shuttle) is a significant rewrite: + +| | Original | This Fork | +|---|---|---| +| Architecture | x86_64 only | Universal Binary (arm64 + x86_64) | +| macOS target | 10.8 | 12.0 | +| Terminal launching | AppleScript `.scpt` files | `NSWorkspace` + AppleScript one-liners | +| Terminal selection | Hardcoded | Detected at runtime via Launch Services | +| Config format | Recursive `hosts` tree | Flat `servers` + `categories` arrays | +| Server management | Hand-edit JSON only | Native Manager window | +| LAN discovery | None | Bonjour/mDNS + port-22 sweep + reverse DNS | +| SSH key selection | Manual in JSON | Dropdown from `~/.ssh/` | +| Per-server terminal | Not supported | Supported | + +--- ## Credits -Shuttle was inspired by [SSHMenu](http://sshmenu.sourceforge.net/), the GNOME applet for Linux. +Originally created by [Trevor Fitzgerald](https://github.com/fitztrev) and contributors. +Forked and rewritten by Nathan Dale with Claude Code. -I also looked to projects such as [MLBMenu](https://github.com/markolson/MLB-Menu) and [QuickSmileText](https://github.com/scturtle/QuickSmileText) for direction on building a Cocoa app for the status bar. +Inspired by [SSHMenu](http://sshmenu.sourceforge.net/) for Linux. From 846a2e159fb329076940b285934b9445b355d96a Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 19:44:16 -0800 Subject: [PATCH 11/25] Fix: allow multiple sessions from the same bookmark openApplicationAtURL:configuration: only passes arguments when launching a new process; if the terminal was already running macOS silently focused it and dropped the SSH command. Setting createsNewApplicationInstance=YES forces a fresh process each time so every bookmark click opens a new terminal window with its own SSH session. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 76 +++++++++++++++++++++++++++++++++++++++++++ Shuttle/AppDelegate.m | 1 + 2 files changed, 77 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..9170a34 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,76 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**Shuttle** is a native macOS menu bar app (Objective-C/Cocoa) that acts as an SSH address book and local network scanner. It lives in the menu bar with no Dock icon. The app is a Universal Binary (arm64 + x86_64) targeting macOS 12+. + +## Build + +```bash +xcodebuild -scheme Shuttle -configuration Release build +``` + +Output lands in `~/Library/Developer/Xcode/DerivedData/Shuttle-*/Build/Products/Release/Shuttle.app`. + +There is no automated test suite — testing is manual. Test fixtures are in `tests/` (sample JSON config, SSH config files). + +## Architecture + +All meaningful logic lives in two files: + +- **`Shuttle/AppDelegate.m`** (~1,100 lines) — the entire application core: + - Config loading/watching (`~/.shuttle.json`) + - Menu bar construction + - Terminal detection via `NSWorkspace`/Launch Services + - SSH command generation and terminal launching + - LAN scanner (GCD parallel port-22 sweep + Bonjour/mDNS via `NSNetServiceBrowser`) + +- **`Shuttle/ServerManagerWindowController.m`** (~400 lines) — the "SSH Manager" split-view window: + - Left sidebar: `NSOutlineView` with categories as group headers and servers as children + - Right pane: form for editing server fields + - Writes changes back to `~/.shuttle.json` and triggers a menu reload via AppDelegate + +Supporting files: `AboutWindowController`, `LaunchAtLoginController`, `MainMenu.xib`, `AboutWindowController.xib`. + +## Configuration Schema + +The user config lives at `~/.shuttle.json`. The modern format: + +```json +{ + "terminal": "ghostty", + "editor": "default", + "launch_at_login": false, + "show_ssh_config_hosts": false, + "categories": ["Work", "Personal"], + "servers": [ + { + "name": "My Server", + "hostname": "example.com", + "user": "admin", + "port": 22, + "identity_file": "~/.ssh/id_ed25519", + "category": "Work", + "terminal": "iterm" + } + ] +} +``` + +The default config template is at `Shuttle/shuttle.default.json`. + +## Terminal Support + +Terminals are detected at runtime by querying Launch Services for bundle IDs (see `installedTerminals` in `AppDelegate.m`). Launching strategy varies by terminal: + +- **Terminal.app, iTerm2**: AppleScript +- **Ghostty, Alacritty, kitty, Hyper, Rio**: `NSWorkspace openURL` + `sh -c` wrapper +- **Warp**: URL scheme (`warp://action/new_tab?command=…`) + +Per-server terminal overrides are respected in `openHost:`. + +## LAN Scanner + +`scanLAN` runs 50 concurrent GCD async probes with a 300ms timeout per IP across the local subnet. Results are merged with Bonjour (`_ssh._tcp.`) discoveries, reverse-DNS resolved, deduplicated by hostname, and sorted by last IP octet. Results are cached until the user triggers "Scan Now". diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 380c699..4c8926a 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -942,6 +942,7 @@ - (void) openHost:(NSMenuItem *) sender { if (appURL) { NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; + config.createsNewApplicationInstance = YES; // always open a new window, even if already running config.arguments = @[@"-e", @"sh", @"-c", sshCmd]; [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL configuration:config From 17725cff8ca608ce7b4a16b9d420319f46cc60e1 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Thu, 19 Feb 2026 20:35:53 -0800 Subject: [PATCH 12/25] Add Initial Dir field to SSH bookmarks Adds an optional "Initial Directory" field to each server in the Manager. When set, the SSH command becomes: ssh host -t 'cd && exec $SHELL -l' The -t flag forces a pseudo-TTY and exec $SHELL -l replaces the subshell with a proper login shell, preserving prompt and aliases. Stored as "initial_directory" in ~/.shuttle.json. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 2 ++ Shuttle/ServerManagerWindowController.m | 27 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 4c8926a..fa90f4c 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -498,10 +498,12 @@ - (NSString *)sshCommandForServer:(NSDictionary *)server { NSInteger port = [server[@"port"] integerValue]; NSString *user = server[@"user"]; NSString *host = server[@"hostname"]; + NSString *dir = server[@"initial_directory"]; if (key.length > 0) [cmd appendFormat:@" -i %@", [key stringByExpandingTildeInPath]]; if (port > 0 && port != 22) [cmd appendFormat:@" -p %ld", (long)port]; if (user.length > 0) [cmd appendFormat:@" %@@%@", user, host]; else [cmd appendFormat:@" %@", host]; + if (dir.length > 0) [cmd appendFormat:@" -t 'cd %@ && exec $SHELL -l'", dir]; return cmd; } diff --git a/Shuttle/ServerManagerWindowController.m b/Shuttle/ServerManagerWindowController.m index 33875f8..874d818 100644 --- a/Shuttle/ServerManagerWindowController.m +++ b/Shuttle/ServerManagerWindowController.m @@ -31,6 +31,7 @@ @interface ServerManagerWindowController () 0) + _selectedServer[@"initial_directory"] = initialDir; + else + [_selectedServer removeObjectForKey:@"initial_directory"]; + [_outlineView reloadData]; [_outlineView expandItem:nil expandChildren:YES]; From dc4162b71886207eda027f7a1e459cf732e00b17 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Sun, 22 Feb 2026 11:11:02 -0800 Subject: [PATCH 13/25] Fix multiple sessions: use NSTask instead of createsNewApplicationInstance createsNewApplicationInstance=YES caused a new Dock icon for every connection. Switching to NSTask on the terminal's executable lets single-instance apps (Ghostty) use their IPC to open a new window in the existing process, while other terminals (Alacritty, kitty, etc.) each open their own window as normal. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index fa90f4c..301ad02 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -943,8 +943,25 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { + // Run the terminal binary directly via NSTask so that single-instance + // apps (e.g. Ghostty) use their IPC to open a new window in the existing + // instance rather than spawning a new process (and a new Dock icon). + NSString *execPath = [self executableForBundleID:bundleID]; + if (execPath) { + NSTask *execTask = [[NSTask alloc] init]; + [execTask setLaunchPath:execPath]; + [execTask setArguments:@[@"-e", @"sh", @"-c", sshCmd]]; + NSError *execError = nil; + [execTask launchAndReturnError:&execError]; + if (execError) { + [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, execError.localizedDescription] + additionalInfo:@"Check that the terminal app is installed." + continueOnErrorOption:NO]; + } + return; + } + // Fallback: executable not found, activate via NSWorkspace NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; - config.createsNewApplicationInstance = YES; // always open a new window, even if already running config.arguments = @[@"-e", @"sh", @"-c", sshCmd]; [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL configuration:config From b7677c169be5c5cba03eb54cc6500476a1e11d6c Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Sun, 22 Feb 2026 11:23:29 -0800 Subject: [PATCH 14/25] Update About window: version 1.3.3, fork attribution, remove homepage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump CFBundleShortVersionString and CFBundleVersion to 1.3.3 - Copyright now reads: © 2016 Trevor Fitzgerald · Fork by Nathan Dale - Replace Homepage button with static "Fork by Nathan Dale" label Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/Base.lproj/AboutWindowController.xib | 18 ++++++++---------- Shuttle/Shuttle-Info.plist | 6 +++--- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Shuttle/Base.lproj/AboutWindowController.xib b/Shuttle/Base.lproj/AboutWindowController.xib index 39437d8..c5c40f8 100644 --- a/Shuttle/Base.lproj/AboutWindowController.xib +++ b/Shuttle/Base.lproj/AboutWindowController.xib @@ -58,17 +58,15 @@ - + + + + + + diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index b760d03..4c33101 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.3.0 + 1.3.3 CFBundleVersion - 1.3.0 + 1.3.3 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion @@ -29,7 +29,7 @@ NSAppleEventsUsageDescription Shuttle needs Automation privileges in Security & Privacy to run applescripts NSHumanReadableCopyright - Copyright © 2016 Trevor Fitzgerald. All rights reserved. + © 2016 Trevor Fitzgerald · Fork by Nathan Dale NSMainNibFile MainMenu NSPrincipalClass From c020040cb86227d173583133e7f496de3af4f10d Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 14:07:37 -0800 Subject: [PATCH 15/25] Refactor terminal launching and update About window for Nathan Dale's fork --- CLAUDE.md | 2 +- Shuttle/AboutWindowController.h | 1 + Shuttle/AboutWindowController.m | 6 ++ Shuttle/AppDelegate.m | 70 +++++++++----------- Shuttle/Base.lproj/AboutWindowController.xib | 1 + Shuttle/Shuttle-Info.plist | 4 +- 6 files changed, 41 insertions(+), 43 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9170a34..247a471 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -66,7 +66,7 @@ The default config template is at `Shuttle/shuttle.default.json`. Terminals are detected at runtime by querying Launch Services for bundle IDs (see `installedTerminals` in `AppDelegate.m`). Launching strategy varies by terminal: - **Terminal.app, iTerm2**: AppleScript -- **Ghostty, Alacritty, kitty, Hyper, Rio**: `NSWorkspace openURL` + `sh -c` wrapper +- **Ghostty, Alacritty, kitty, Hyper, Rio**: `NSWorkspace` (openApplicationAtURL) + `sh -c` wrapper; ensures single-instance grouping in Dock - **Warp**: URL scheme (`warp://action/new_tab?command=…`) Per-server terminal overrides are respected in `openHost:`. diff --git a/Shuttle/AboutWindowController.h b/Shuttle/AboutWindowController.h index 4e5fbe5..18cc1d1 100644 --- a/Shuttle/AboutWindowController.h +++ b/Shuttle/AboutWindowController.h @@ -15,6 +15,7 @@ @property (strong) IBOutlet NSTextField *appName; @property (strong) IBOutlet NSTextField *appVersion; @property (strong) IBOutlet NSTextField *appCopyright; +@property (strong) IBOutlet NSTextField *appRepository; - (IBAction)btnHomepage:(id)sender; diff --git a/Shuttle/AboutWindowController.m b/Shuttle/AboutWindowController.m index d60d1bc..35f5d7a 100644 --- a/Shuttle/AboutWindowController.m +++ b/Shuttle/AboutWindowController.m @@ -17,6 +17,7 @@ @implementation AboutWindowController @synthesize appName; @synthesize appVersion; @synthesize appCopyright; +@synthesize appRepository; NSDictionary *plistDict; @@ -44,6 +45,8 @@ - (void)windowDidLoad id applicationVersion = [plistDict objectForKey:@"CFBundleVersion"]; //Get the copyright. id applicationCopyright = [plistDict objectForKey:@"NSHumanReadableCopyright"]; + //Get the homepage. + id applicationHomepage = [plistDict objectForKey:@"Product Homepage"]; //Build the string for the windows title. NSString *aboutTitle = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"About ",nil), applicationName]; @@ -60,6 +63,9 @@ - (void)windowDidLoad //Make the copyright font smaller. [appCopyright setFont:[NSFont systemFontOfSize:10]]; [appCopyright setStringValue:applicationCopyright]; + + //Set the repository link. + [appRepository setStringValue:applicationHomepage]; } diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 301ad02..997fa28 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -892,18 +892,19 @@ - (void) openHost:(NSMenuItem *) sender { ? termOverride : (terminalPref.length > 0 ? terminalPref : @"terminal"); - NSTask *task = [[NSTask alloc] init]; - NSError *error = nil; - if ([terminal isEqualToString:@"iterm"]) { - NSString *script = [NSString stringWithFormat: + NSString *scriptSource = [NSString stringWithFormat: @"tell application \"iTerm\" to create window with default profile command \"%@\"", sshCmd]; - [task setLaunchPath:@"/usr/bin/osascript"]; - [task setArguments:@[@"-e", script]]; + NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; + NSDictionary *errorInfo = nil; + [appleScript executeAndReturnError:&errorInfo]; + if (errorInfo) { + [self throwError:@"iTerm launch failed" additionalInfo:errorInfo[NSAppleScriptErrorMessage] continueOnErrorOption:NO]; + } + return; } else if ([terminal isEqualToString:@"terminal"]) { - // Activate first so the startup window exists, then run inside it. - NSString *script = [NSString stringWithFormat: + NSString *scriptSource = [NSString stringWithFormat: @"tell application \"Terminal\"\n" @" activate\n" @" if (count windows) = 0 then\n" @@ -913,8 +914,13 @@ - (void) openHost:(NSMenuItem *) sender { @" end if\n" @"end tell", sshCmd, sshCmd]; - [task setLaunchPath:@"/usr/bin/osascript"]; - [task setArguments:@[@"-e", script]]; + NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; + NSDictionary *errorInfo = nil; + [appleScript executeAndReturnError:&errorInfo]; + if (errorInfo) { + [self throwError:@"Terminal launch failed" additionalInfo:errorInfo[NSAppleScriptErrorMessage] continueOnErrorOption:NO]; + } + return; } else if ([terminal isEqualToString:@"warp"]) { // Warp uses a URL scheme rather than CLI args @@ -943,26 +949,12 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { - // Run the terminal binary directly via NSTask so that single-instance - // apps (e.g. Ghostty) use their IPC to open a new window in the existing - // instance rather than spawning a new process (and a new Dock icon). - NSString *execPath = [self executableForBundleID:bundleID]; - if (execPath) { - NSTask *execTask = [[NSTask alloc] init]; - [execTask setLaunchPath:execPath]; - [execTask setArguments:@[@"-e", @"sh", @"-c", sshCmd]]; - NSError *execError = nil; - [execTask launchAndReturnError:&execError]; - if (execError) { - [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, execError.localizedDescription] - additionalInfo:@"Check that the terminal app is installed." - continueOnErrorOption:NO]; - } - return; - } - // Fallback: executable not found, activate via NSWorkspace + // Use NSWorkspace to open the app — avoids the "App Management" privacy + // prompt that NSTask triggers when accessing another app's internal binary. + // This also ensures the app is treated as a single instance in the Dock. NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; config.arguments = @[@"-e", @"sh", @"-c", sshCmd]; + [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL configuration:config completionHandler:^(NSRunningApplication *app, NSError *err) { @@ -974,11 +966,10 @@ - (void) openHost:(NSMenuItem *) sender { }); } }]; - return; // completionHandler handles errors async + return; } else { - // Unknown terminal — fall back to Terminal.app - [task setLaunchPath:@"/usr/bin/osascript"]; - NSString *script = [NSString stringWithFormat: + // Unknown terminal — fall back to Terminal.app via AppleScript + NSString *scriptSource = [NSString stringWithFormat: @"tell application \"Terminal\"\n" @" activate\n" @" if (count windows) = 0 then\n" @@ -988,16 +979,15 @@ - (void) openHost:(NSMenuItem *) sender { @" end if\n" @"end tell", sshCmd, sshCmd]; - [task setArguments:@[@"-e", script]]; + NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; + NSDictionary *errorInfo = nil; + [appleScript executeAndReturnError:&errorInfo]; + if (errorInfo) { + [self throwError:@"Terminal launch failed" additionalInfo:errorInfo[NSAppleScriptErrorMessage] continueOnErrorOption:NO]; + } + return; } } - - [task launchAndReturnError:&error]; - if (error) { - [self throwError:[NSString stringWithFormat:@"Failed to launch terminal: %@", error.localizedDescription] - additionalInfo:[NSString stringWithFormat:@"Could not open \"%@\". Check that it is installed.", terminal] - continueOnErrorOption:NO]; - } } - (IBAction)showImportPanel:(id)sender { diff --git a/Shuttle/Base.lproj/AboutWindowController.xib b/Shuttle/Base.lproj/AboutWindowController.xib index c5c40f8..024bfe5 100644 --- a/Shuttle/Base.lproj/AboutWindowController.xib +++ b/Shuttle/Base.lproj/AboutWindowController.xib @@ -9,6 +9,7 @@ + diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 4c33101..04ead8d 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -29,12 +29,12 @@ NSAppleEventsUsageDescription Shuttle needs Automation privileges in Security & Privacy to run applescripts NSHumanReadableCopyright - © 2016 Trevor Fitzgerald · Fork by Nathan Dale + © 2026 Nathan Dale · github.com/nathandale/shuttle NSMainNibFile MainMenu NSPrincipalClass NSApplication Product Homepage - http://fitztrev.github.io/shuttle/ + https://github.com/nathandale/shuttle From 273cf8c5ce99525dc47357be18195856ee7c6fd0 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 14:08:38 -0800 Subject: [PATCH 16/25] Release v1.4.0: Major rewrite for modern macOS --- CHANGELOG.md | 24 ++++++++++++++---------- Shuttle/Shuttle-Info.plist | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c75c47c..4bb004b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,16 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [Unreleased] -- The ability to open multiple, or same command(s) off one menu item. https://github.com/fitztrev/shuttle/issues/236 -- The ability to add a second json.config file -- The ability to add ```[---]``` in the name of a command to add a line seperator -- Adding a new apple script which will allow running commands in the background with screen -- @philippetev Changes to iTerm applescripts to fix issues with settings in iTerm's Preferences/General -- French translations by @anivon -- @anivon localize Error parsing config message is JSON is invalid -- @blackadmin version typos in about window. -- @ChrisMoriarty add the ability to set the terminal window position and size +## [1.4.0] - 2026-02-24 +### Added +- **Major Rewrite**: Rebuilt for modern macOS (12+) as a Universal Binary (arm64 + x86_64). +- **SSH Manager**: New native split-view window to manage servers and categories without editing JSON manually. +- **LAN Scanner**: Subnet scanner (GCD-based) and Bonjour/mDNS discovery for local SSH hosts. +- **Modern Terminal Support**: Native support for Ghostty, Alacritty, kitty, Warp, Rio, and Hyper. +- **Improved Terminal Launching**: + - Fixed "App Management" privacy prompts by using `NSAppleScript` instead of `osascript` sub-processes. + - Improved grouping in the Dock for Ghostty and other third-party terminals using `NSWorkspace`. +- **Per-Server Settings**: Ability to override the terminal and specify an initial directory on a per-host basis. + +### Changed +- Migrated configuration to a flat `servers` + `categories` JSON structure for easier management. +- Updated "About" window with new repository links and attribution. ## [1.2.9] - 2016-10-18 ### Added diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 04ead8d..991fd58 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.3.3 + 1.4.0 CFBundleVersion - 1.3.3 + 1.4.0 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 89e8ce7a256bf22b775a917ee7676d5f7531c005 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 14:19:01 -0800 Subject: [PATCH 17/25] Release v1.4.1: Fix terminal multiple windows and update About window --- CHANGELOG.md | 6 ++++ CLAUDE.md | 2 +- Shuttle-v1.4.0.zip | Bin 0 -> 235727 bytes Shuttle/AboutWindowController.h | 2 +- Shuttle/AboutWindowController.m | 2 +- Shuttle/AppDelegate.m | 30 ++++++++----------- Shuttle/Base.lproj/AboutWindowController.xib | 16 +++++----- Shuttle/Shuttle-Info.plist | 6 ++-- release_notes.md | 15 ++++++++++ 9 files changed, 49 insertions(+), 30 deletions(-) create mode 100644 Shuttle-v1.4.0.zip create mode 100644 release_notes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bb004b..345abb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.4.1] - 2026-02-24 +### Fixed +- **Terminal Multiple Windows**: Fixed a bug where subsequent connection requests failed to open new windows in terminals like Ghostty. Now uses `/usr/bin/open` to correctly handle IPC/instance communication. +- **Copyright Attribution**: Removed "Nathan Dale" from the copyright as requested; reverted to original author Trevor Fitzgerald. +- **About Window**: Made the GitHub repository link clickable. + ## [1.4.0] - 2026-02-24 ### Added - **Major Rewrite**: Rebuilt for modern macOS (12+) as a Universal Binary (arm64 + x86_64). diff --git a/CLAUDE.md b/CLAUDE.md index 247a471..b37925f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -66,7 +66,7 @@ The default config template is at `Shuttle/shuttle.default.json`. Terminals are detected at runtime by querying Launch Services for bundle IDs (see `installedTerminals` in `AppDelegate.m`). Launching strategy varies by terminal: - **Terminal.app, iTerm2**: AppleScript -- **Ghostty, Alacritty, kitty, Hyper, Rio**: `NSWorkspace` (openApplicationAtURL) + `sh -c` wrapper; ensures single-instance grouping in Dock +- **Ghostty, Alacritty, kitty, Hyper, Rio**: `/usr/bin/open -b --args ...` via `NSTask`; ensures single-instance grouping and multiple window support without privacy prompts. - **Warp**: URL scheme (`warp://action/new_tab?command=…`) Per-server terminal overrides are respected in `openHost:`. diff --git a/Shuttle-v1.4.0.zip b/Shuttle-v1.4.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..7a669c2638e51733ff70b0252f454999723ff335 GIT binary patch literal 235727 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

-Cccy@Dy5#!qBX$$I3p} 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 literal 0 HcmV?d00001 diff --git a/Shuttle/AboutWindowController.h b/Shuttle/AboutWindowController.h index 18cc1d1..3d2d4bf 100644 --- a/Shuttle/AboutWindowController.h +++ b/Shuttle/AboutWindowController.h @@ -15,7 +15,7 @@ @property (strong) IBOutlet NSTextField *appName; @property (strong) IBOutlet NSTextField *appVersion; @property (strong) IBOutlet NSTextField *appCopyright; -@property (strong) IBOutlet NSTextField *appRepository; +@property (strong) IBOutlet NSButton *appRepository; - (IBAction)btnHomepage:(id)sender; diff --git a/Shuttle/AboutWindowController.m b/Shuttle/AboutWindowController.m index 35f5d7a..e60a77d 100644 --- a/Shuttle/AboutWindowController.m +++ b/Shuttle/AboutWindowController.m @@ -65,7 +65,7 @@ - (void)windowDidLoad [appCopyright setStringValue:applicationCopyright]; //Set the repository link. - [appRepository setStringValue:applicationHomepage]; + [appRepository setTitle:applicationHomepage]; } diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 997fa28..fd30d36 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -949,23 +949,19 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { - // Use NSWorkspace to open the app — avoids the "App Management" privacy - // prompt that NSTask triggers when accessing another app's internal binary. - // This also ensures the app is treated as a single instance in the Dock. - NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; - config.arguments = @[@"-e", @"sh", @"-c", sshCmd]; - - [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL - configuration:config - completionHandler:^(NSRunningApplication *app, NSError *err) { - if (err) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, err.localizedDescription] - additionalInfo:@"Check that the terminal app is installed." - continueOnErrorOption:NO]; - }); - } - }]; + // Use /usr/bin/open to launch the app with arguments. + // This avoids the "App Management" privacy prompt and correctly + // opens new windows in existing instances for terminals like Ghostty. + NSTask *openTask = [[NSTask alloc] init]; + [openTask setLaunchPath:@"/usr/bin/open"]; + [openTask setArguments:@[@"-b", bundleID, @"--args", @"-e", @"sh", @"-c", sshCmd]]; + NSError *execError = nil; + [openTask launchAndReturnError:&execError]; + if (execError) { + [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, execError.localizedDescription] + additionalInfo:@"Check that the terminal app is installed." + continueOnErrorOption:NO]; + } return; } else { // Unknown terminal — fall back to Terminal.app via AppleScript diff --git a/Shuttle/Base.lproj/AboutWindowController.xib b/Shuttle/Base.lproj/AboutWindowController.xib index 024bfe5..977b410 100644 --- a/Shuttle/Base.lproj/AboutWindowController.xib +++ b/Shuttle/Base.lproj/AboutWindowController.xib @@ -59,15 +59,17 @@ - - + diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 991fd58..f525596 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.0 + 1.4.1 CFBundleVersion - 1.4.0 + 1.4.1 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion @@ -29,7 +29,7 @@ NSAppleEventsUsageDescription Shuttle needs Automation privileges in Security & Privacy to run applescripts NSHumanReadableCopyright - © 2026 Nathan Dale · github.com/nathandale/shuttle + © 2016 Trevor Fitzgerald NSMainNibFile MainMenu NSPrincipalClass diff --git a/release_notes.md b/release_notes.md new file mode 100644 index 0000000..6ad055d --- /dev/null +++ b/release_notes.md @@ -0,0 +1,15 @@ +## [1.4.0] - 2026-02-24 +### Added +- **Major Rewrite**: Rebuilt for modern macOS (12+) as a Universal Binary (arm64 + x86_64). +- **SSH Manager**: New native split-view window to manage servers and categories without editing JSON manually. +- **LAN Scanner**: Subnet scanner (GCD-based) and Bonjour/mDNS discovery for local SSH hosts. +- **Modern Terminal Support**: Native support for Ghostty, Alacritty, kitty, Warp, Rio, and Hyper. +- **Improved Terminal Launching**: + - Fixed "App Management" privacy prompts by using `NSAppleScript` instead of `osascript` sub-processes. + - Improved grouping in the Dock for Ghostty and other third-party terminals using `NSWorkspace`. +- **Per-Server Settings**: Ability to override the terminal and specify an initial directory on a per-host basis. + +### Changed +- Migrated configuration to a flat `servers` + `categories` JSON structure for easier management. +- Updated "About" window with new repository links and attribution. + From 2d00adbdaaa43f67fe294834c34baaaa9f3147e1 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 14:39:21 -0800 Subject: [PATCH 18/25] Release v1.4.2: Final fix for terminal windows and About window cleanup --- CHANGELOG.md | 6 ++++ Shuttle-v1.4.0.zip | Bin 235727 -> 0 bytes Shuttle/AppDelegate.m | 30 +++++++++++++------ Shuttle/Base.lproj/AboutWindowController.xib | 13 ++------ Shuttle/Shuttle-Info.plist | 4 +-- release_notes.md | 15 ---------- 6 files changed, 31 insertions(+), 37 deletions(-) delete mode 100644 Shuttle-v1.4.0.zip delete mode 100644 release_notes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 345abb9..036ee63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.4.2] - 2026-02-24 +### Fixed +- **Terminal Multiple Windows**: Robust fix for terminals like Ghostty where subsequent connection requests previously did nothing. Now uses `NSAppleScript` to call the terminal binary with `+open`, correctly triggering new windows in existing instances. +- **Privacy**: Bypasses "App Management" privacy prompts by delegating execution to the system script runner. +- **About Window**: Removed copyright labels entirely and made the GitHub repository link a larger, more accessible clickable button. + ## [1.4.1] - 2026-02-24 ### Fixed - **Terminal Multiple Windows**: Fixed a bug where subsequent connection requests failed to open new windows in terminals like Ghostty. Now uses `/usr/bin/open` to correctly handle IPC/instance communication. diff --git a/Shuttle-v1.4.0.zip b/Shuttle-v1.4.0.zip deleted file mode 100644 index 7a669c2638e51733ff70b0252f454999723ff335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235727 zcmb@tQ;;t(*Y4Tw-fi2qZQHhOyZhg^z1y~J+qSvew&s1$ITtfi_082Jm8Wu%`qf&= zMXHi#DawF?K?D7_^<=2%{;$dZ5m+ExAQekDS65pzdLu_i1~t_`K%i-J=~n+8Zk{ke zz+lh7KtN!q|5>m2KT^>CUlb7sdsj1iSC{{dOZ^W@ggEzq#zi@4{y&1k`JZrdMkWd> z{~P*W;Qs*qZ>&&2|Ao42yjmCq0Rw@dKmZZ{e?$MzCj77b{|EM!uAi%lTC2h)L=*^> zVLnu9<&)CsAG?+AzyVG;#P$JH?pDIb`ZVRJ8j$Pe3gs~9mdK?`GUZ+xZhp<#>M;}{ z)AENEgEiZ7DfcpzOW_Oq;HUSg?F#pEJ`AcLRz=N0X#2xlXuR55MhZu=siHWZ%`Mtu3 zvfJ)3&&SKdy_LryP{#yjtO|enj@`eoMTBy)p0xdMj@}`Cj+(PXx6&DwekW6NjUwyV zC3;YLP98@aWnDW;cO_6(9(F+sNoNW}+pwN4k+8Sw z1~ofu`t}E3$R3J3unw?8(UJ3;N?|-I?k|rW9UERS&W};s8#mcn2cDO9u(!SW?(MP# zo+Wy@x9)KsEY&;UyI<)rr*pIP83JYXDBU#*jqgE9HXdXIA9l3w*PcG5d_LPL6Iifx zsZ)uQSZKc|*OEU%O)*4VxeTz*TRewqSghUSg#J%;N<@!Cb8M(}QAagr#%iGlp(y(^ zfA}LDyN4TK9i#y4ao4r?tbG|eiihxHTbwxuBQE~7;RhqGK^m&M|LCt^>mrZ-WcQuB zch4TvWTZd(;%7>8>Q6gh={FNkI{;?m{xFoabC%h<$MI0$GNc`mxggr^h59zZIPct@ zygVYBGj{v>_pbNC@FpPu58b!&Pu-b2``dbiVq9Pdfy%TS&@OC-<-6A#Fm{}tnx?1B zWT|m-bdBrzO7Qk6*+5Q(0-DFXKKa$opvE3G7`vBEYy2?0X(qCCvN_6%lfUhcJo%d4 z8FMRKc*y$%haJ0@cX;73TVC|u#H6T-w`T7$Ul_aB^I!D#(YjMqrnd?_Yj7D1mp463 z#`ckO4%t>*zOh=|*F33J%RCqSZ!i+IKP?XR54ycVA8$i6TnSm>3Biv-&xmXEUAZU( zPB3p(T@=91*edOcGZ@&i4XeZZ7n8XRSnAm&L@`6~H$83VphSRRhI)}uMUdd;-k_WB z8Pv#TgYHAC?Pbqgm9KO=aa`ApC^TuAFnqqtY@tiNdc^)&s7KCL$eM)41hK1I~ zU&^1^Fv7tTE*Hl%B75w1lWGi9A7&pm7XKMhjOo$U{4$nWY#-bn%uaMki7U498X*Hm zBuKill^n^zilK1`n16_9fZ6^NTJku630%o?=OlE53s8;N-ec@Q!yAO;Gb{EZwQMp} zzw;M4gJTJuGa-({#o=YqRS-k?0wd=wq~Y6$j>@HW^ytN4A9Z?kSX#=geKyEmYpK05 z;?1csd9zub%XM+m7uUa+0q^i4^UxPN*#G#(u=lv%=a{*}o!$B;!F^twEdPI(r(ZD@ z@Ozz4mKQ6m^B_;Tgz6iQ7>M*a?OY&)iI;^T@nAy#Yvj7k6Lid+dUdO=;Y(pNktf(s zmzOKrj#R@^GpN+P5zZ0#0gc@YWB`?9smgC43c2{uwjCo!g5$7Zz>QS|4O!VZ)fi|+ zo?yCXKb3q0Ja5QeiGDi4-~oS7okkk%RDC`nzBEc5n0J4@Og9M3SpT3FWRN=AaGvhs z)I#9uP)NO&7$z7L{XL|hW0VC5hSl5aLZICn_%P})5#gMq+%%Jo;IxKfT!NaQ*h|IB zG;G0PS3uxPeL`A*Rh+qmbQfVQerTh2d={TcO#eQg?F%oof#sE@w9meku97XRYyZ+$ zjKN(^?;_FE=>gK|fr-gJ3PPSKqT!Bp|MUAI@JuhL0UT5zN9yuCr4F*AQr+H_RUmMg zr{bL#l30SWiS8n0`t2NuV`(-TX&vw@pLa@E8R5#olOUYkjt}0t-r|u(h&aPTAzXm> z1QJ5;jKdP zM!a2B+hsDXYX_ooJ6gVKhXW=Vr@!?{z95^4Gz(xj=Usn8K(lrjA}r=1I)V$3%+1$F zmYNZ4mbjnPwi+N8G*E6L$D}x}9;7fEYX~LGVhgdYV=(HV5BXQsdXsn_;L_Kltl`{D zf_|O24z=6hn6R%Nto~(m#E}PTI+A8;2C*__UaKJH9qi3hn1JVz5JnXB<0%~FiUFem z60cbp%M-WpQJrBSV`KA2`cam>AeJ$BNVe~(`?BJkBTr`b+tj8V47_BXw@@5{_VBqy zPn$ASzeGu0C06Fi>G^=doU&VuwqD6cT0f;G@YW#@ZTW^r8pIiay#R1eWs$!yORaYO z{!68BU~grR8S08-P@UGGcxOIJZNiHilmqIkCS-gt2vy6ZFdoe{*UMwu!xm$<5tPN^rRfOFl^~d7PP*nD6xSI_!DJLlM^)ysm#ac;u1D4vA)T+u0U|5g$A@7p+H zdaL2E0a;=y`+M!A<_P@Np(!;f3$}WcS1o2WsWmzZDH0Jx z(r|Jsf>x3QS4fmuvRn(|UKxnowdoPuC?m12>|++X;0D%)5YZ+BE_hu-<=DdD_E9xc7y63sFk-mc`wV7Ue=>K?$>=r~GyN!`JiU`=sjz4@*!$4LP3K$U&{d6G5^4(SyJJLF*i4qjnpe zn9=Lw!RhyvDCyRjEvHE;x7(+`80dd4r(j-45krLM*GI;vC`|dWY=}W#Bd}dGeh@=Q z;4b4(speJ$GH&hKfJKkPcm*vx&{rC*sw4U!_1YVi4R;is?9o;^6Q06` z9y!}<>u|G@(HDx?n(XyBYg_x+8eJ2gxOMgicwSIRD0X1G@i(?*=BgK?>=v>LywvKV zzD=cRZu=T_Zs&Ru<{O+wg@1&4W-W4uHl{6dk2Wji%GP>i)R0ksROSM$ThKh0=cp^P z{7+98BbHFXX?Gx1Y}sLt%ij194k-c_sOWNUP$}fYWw9bgl6fW`O!l*SVC`T;Kr>c_ zj2<-_-&u@)WZj6b?60MnOEOA$F<2p>F(XvG&ADN}oGX%~uQ1IV(}r9o$dqeLUTBM) zC)mBoybCoWbuy|(rc7^HmpjuzSf46D z%A`UktPZCp<|%Y~u>{|(D@Cz=K=JK}t8qB>=9(M)>k4D5UTKi3Ejv1$NAwpZnJr1V zG)Z>Rj??k#ia4V_m|v--rOX9INI@D+K#ZiVJR&iK;_Mj>U%D+#y|o64z;c?718A-S6?4^qRg%gnkuVHk-4wg>Q01El z>&C4=#DCma**#+&UK2Krh3pz+>+ENt)l(dX8+(-YAl=vCVK?Bg51E%po} zAB(v>k6^IGi494O??Kcl+X8Ni8c@uiOL3i$y^X!*a!X)!nRotK4EyZkKGxl^JpujG zM+4#;<87<}^DnqIsjic~8y5G0+mIAI;POt<46j&5` z{p-)69nW^RiRVzQxEbhz`cfnl_fM`gnnc&2PY~nPOXqzjmAH!|S9Z{K-9pt*M!Nk4 zQrq>5pqvGX8;>fz-+#SjO~OT7!e(t7!DE4q1869@WDL|a*)>oM7#mcs%X0v{@Egze zko3J~>=u8L6D1PGMxwpu=GunUbDtTn4ZOGgw&#uY`3HkF`$1^!-%LARQ=8&eoA)c< zNlBN3&HN6B=dV7Dua%9_tOmpIM}6BQJTfa5%}D)FF_x+GJgG!_+f)F zn+wuE?2Z)P2)p~Ooc0k0O=Hau>^Ue(_X7GWY|7EX=hi} z3X>^!Wy1pPKsi~jSPV@HuXFiT1+21A8{t;k3z4z(Rf(?o*U+u6=lZR$TlWwOK)V3< zNRi?fTVS3*Ooqshx+y0O!8}w5bE~@Pxdfm=mVTB>nXQQ&@!( z_ZBWHReg@lnJVmYUwxpLXg)luJ>8gQ2M%IbsyMXmva8d0?0+9VXU>>6lC7L+ZELEB zI`N*!SQq&r_Dre+HbOT|@u@)WqN;mPg1`J1;ootbHmBc;%{sr=YWR^3jy6`X)!!L= zC8pHw0K*us)B#H}U$h{hBdChttq*@(*Y>|x*B~h%iz!O=p(L(g*NtY#P>1*F{B)8E zCD6*^{5`n=KN4EMb@>8#zQk<=02g2p(DivlOk_h!0n2~p4!F!d>`C!vq(jnnbxDcY zmo<(~F6G}5yMN-4hn)x&2Pt~IFx5o&Z5@uoGdv3r0DTDwR|Hjb5y0`g5^nc8ad}I!vIW+iHq>evNvKc zRq82iTZ;wPZF|UtB#s50H7Q84XWo?@;G9q8`qsw@wh~n7nmPtW%x6uxPmPLCMwlgy zh{Ud}CpF*Nf$i>H-gTtl-%RM~R>i*(5w8mxRLb%Hf;HvuVe?X(a^`E3B~2*py|OBd zbRZc6Z2(G5q&+Y{CXaN!7`RsW{PYm~_jd!6mJi0leX{m?Yaw;^Vq9{62zA670$Zp*IDATyH< zowjU^>FR~vfHH@TT9Z0=-k751E<2n#CGUxcNewYO`Wz=m<0@ZuOK?l?qvF(@_O}V-d%HQghVbh6Q zMe8JWie*wy_`r5M)#U7s5o=_|Al~g1Q8o+&SgEaM5A~K}YiVgt*FAQ!Zegm2 zy4U(>2s9esPSr8k8uq`m$JUcZ^#&BZmnH8M0>`%mI1Q+WF4T1re|vr;WlysjcsECo zKfThMxpEYH%QnU+@s@Lq-ZX@dwV#LpRH5yzN&Hi`QMq(#yP7{!v8WoWpk%vf1NXs! zSj3_daITnv-X@BqFGa(7;D-z5gZ^_N3SEt~(UQ%QL$#JkFh&n8pxJ$BJb=M!>fCUm4`A_X zxl+hpuQ6#ldwW)TNom1qDa8xa>_KhYPstN1p3{D{I zIqvyz)2Wji+D-iTfaCD34Kc|Ew*}igo@T!8S72g2vo#L)T7Ns&bI9$ubr>dmM;nZJ zt?VP&IY56jjaaNqknO3>^Gu0MH$+(;Zm)!cf|-jfmU(<)53J|cievcsI`T228d2DL z8=dYvAx-yc?DxE}PXv(~3#cby7zk^<|vJ1AZHr*?dSMVW&ua9p7(mJtk^*iKk&=M;}X(+;YS0! z$0^L=#;tO?`5+FSdDU?bNv1h($N;IRzc;1ogou|i;};{xT;Jr_wo=8;kCM8Q8(njJ znU=AEk+(GI@h4^j-%{;p3H9StaRl06#PPAvKcN#A9rM9EYNR$Uf2q&nvzifQ&!#?q zeNaSn0xV&IjNr=|3rBnHl8Kj57^sA~O87*wv=Uihk*hj-wcLyXyl@N`hi|bK>)48Y z)d)8lNs;TjEr^2F63jOnt9GZ$jKP|ND6LtIYyaVM6KgtxHY*BQLb~#c zbxsdNyY&-Gd>K<_*JzxyuN-dqrzoqrTbZRg+u@s)Jdk{KdJy+(ax0f#MBNyEk0IO? zkx|}Uh-@1uDVP?}945(%81#n}aRUu0vsi>!io2MHmKZTG#&najJ^w$QrD%FTD3}u4 z30Oh`2@%oE<9wVt&KBf*r)GEY{AT*r<7ba+?-#f5sY+w2rc$TPe#hrhoevIhcs~{> zFi|X6u>7lTCi2&A0juHfSCFBSrjN|ti2}b}+FE7(mjBtwJpAUBLfNu*jCv3x2u$~z z1~RWQWyhX-Ifn)JL@$p?anX1(dM*?C5?yhTKlDUn&2RRs7&;TQ!e>OZV(@b7PcW0U zjzDc^K*o&n4Xief`DlI1fP!hlC7?CA>Ssz#m6aPtkxtVC2w3(%g84(a=3maCX;E-ld4l`-`S(uAd%dfw7TS?Sw^ zrI@~zmBzrT>2m6@f|#pVKB^nF4k)c+Ej_1BGR)p#rO~)!Q(5wgRdWBOAcQL?zdO#N0z3Uc%eVRPjrqh-X^Bfu?8~gKohym%CbITtllAXeF>`3U5(!Eq!Q`Qvw;eLAaa1cncG4I?mk-K>AEFD0Y-Ik z`<8MJZm1EcvLa?OrGFEWo62in;V4vgBNs-XCIkp!85~A29af;sXx_3BJcR{jO zqep8$Nc&EFH0_SE!#OQr{Bed958rEY)7mduzt}?yINz?5nbqy*@-futCy7?nrgbWW z26Y+;0;@5sEG-P3XBImJ5=cm*OH>72)}VKL2VHvL@W`nc00nX)WF z*+-Ddl9Kci>EZcNmsz&7iVX~i$QmMFhJdW(MoJ+2pqFI}t>>X3&j+ z=MKL))n2?#QaSti?ELTerENsrB=h+s(T?C319_AKVFx^bV%gDq!TnJ=I5>{w)-h;M zi#`zu(_Nl&a<4k6p@DTJkblrmV{Y13zr@`@i+IGP*L&m0|jq9bGA zn$GPo1}i%n6V@Ujioa2{(F;^=11{rO{$S&=it<<@X6{%pPX<733{u(nByq*)hy60cxM`NOyIxhtb_SS!<7yyh7*{Kj}Wt9G`^l4$_Id9N^b2EmX7>IW36ZdjEvvym5iGI?u zd)!+h4nuSJvlBlbaeE&f(~2R=6JD539@rzO!~ zAr9md%7>d#cz%BDT14*pVGPL7(`)Skso_$R`EZ=-JHxwZNZu68Rpzwi_aGiRS0%dN z@Cr4ndXaPqe(MW&B? z_~$`@(IGLW`E1{4MoXuW0{Zak;RIuED{O7(Vt5kxWHGL;E+KqLF+N@q*1S}|{A4im zFicGxw>grcs-t6}=(Ec*=?>D-`deTQT~oG|a)~21^r4My?<(=>1$`ZhC|t`k3uW~a zlVoBpJQBz!Gf^2fo4iN2VmW1^97FB{uX?wBt9v(9LM)xZZB>gOvb241q<9(LheK;5 zBv43Ny0tH%#X%=Wq}s-9Bm4|2{=8fG52ebR4Gf+YV_q4arj{R!f%Wy9)$IuVO1QtJ zmB}LFE?voIt(LTSbJgkCdGrShLCaPNOm7lH=aRouFQ3+prCj>HP z)lZY#vp)?B^yO+P#6n*xc@`726(q|qKNc?IG+(IzsaeYu~^(SVrbVuA7GZPKCv_jU99b@GTN26wxsPD z;@vmn^s07MH_)KbjR!vSOizruC=s@-&&;FbAE*d_cQ@C3NvSdmv&YZ1MYu;4tlCl zeT#Z%-LXy<^d+^Hm;XT5N6WF}sJW}$Gvj_149le6O}V$aaJ0$Hv(dcV zB<6n}>WB|`*F**U?<5rC2sr2GUD7aZ<0qOg0VH*aG;@d8e^r_);Z#N}nC=zN3H#&G#tXVm4vTYdh)K3t2p#`aNvOTT+6da2Wv>fw?zxi@lj z@zah$rhUyeD##>o`_l9ZyY70akid~lW;kmC@)6IQApFHQb33T6KJU^@t>!6OeL9gP zkxU;aor@wI#ImMBOLI?R&-2e7xnl8s2__ZCiZvnB@pBVZ!H1n9z_>ioCNET*nx&Ru zqrn&YG$7(=EbWzPuuDbAD4EYm#&$QoK$4NLj7Os2ie)(9m0*K#M&J^Lfsf-?Oaaxdr5KAZ@!UNB88b0{Z@8VI zK-s_(EBvkMx!W8|sbhBlFk*53vMG6x=00Q?rz=8BLI?0=)|H(qTf41l9c1blF_Slq zAW{^_if5!WghULiiz?MF>sE7Di3;Yy=t%Ug@(x6Z>zW#w;k49Bmu08U?7+z~_H1{* zPdMOFH2q9DghP7;C+~$3C4JW@pc|Unaf`L$=PEczeXZIN_mHtX2PRCq@Z>}?o>UVV z7;k~5)0ioFpe;4;auESsXs!p)m`+h$tH8dmfm=>0(v$*WvSbP!~l->fk zJbB;Eh|#XVPI} zHzjrL)H;P&UwJ1 z{>`|;bFBtj{Kk1#81i`qipGwxy-|5%12BJ^LDSqphwq56s=r}&2FP%as!v;Kj44I5 zX;0>q6pv1oQ~>Uu6I@rC~q>05s@+=qN^}a68nJMZqN{uDz44cKjK;pQlY(Nki(ON1M(lBknatQal9yh$LqI zQ^zee)cp1jYu3&P6lKOXU=%GyW9bV}hr$xT`$RBVMn8fBYj{dLJl@9X{U`v2uV`}s ze3k(zyR7qv#ZS6_9~gy>cfS=#PCQ(@YL$LLgywnPnNPJWJng(-g}QiEA>;Ohbuawy z+B|RW?ZlBLAYnwiMLExVMWL}b$)Z}*`nqbdigr=ND%7XSxl9T{#*A#rN&qlsiUWslqif7!#YRHgMzhbvT4mGq@!gUcwx`9Lx| zvwe|Y7t1|T^#$X9FanYT#Xo!giTtjwx@YzexW#JB7^(meV@3fo)U*+malx`o;PjjG zO%l65PY^qxps2R@$`n^OLA9R_$x6rg4qOwcLgL-+ethr$LI31=eNRGj_H$$Bzw8>X zaSA{v$Ll^5j|OT}Nb2q@5L|leBT{+=ZWb9u47!t z-A?xarzfdc{GD5HF9x2d#^WN3eM#@)+LL<2wG@qIb32p@Ys=<|RV0@#w?A68ycEN! zFsE>3yss9-h=ojN7k=1z(BE3R)r1IzXCg1TCcmT2OGieF`p*{neshtU3XLci0bhm; z3J)k?6Ry>sx9b#FEPuTwS`tUC7AVzAXR#-j%}>fAp6e_Ju@AILkfQcZq(=+LkC@}y z28RJjdx!7WShE{xdySqcDS2mjv^w`&pd=Y~IV#%Z2r^LB?4LPWk0Lw6qxb3l5)Q7K29URJ}aF+);c$WUn^u z+=1@u_$r#iNNB}yS4twxj@8g@R87(V5J6?E@>(}<2GUI!v$k`J@niwHJ#F%Q zY3gEScl@!yu$w0+glwPx9J1V$XCGn3}^z51%17*Ydk) z)?~DHKVTmz;QDq8Q;kz!2zMxJIayI+GM1D6L}8E^_ETqh1rAC`v$!Ib-!o5Fv!%8+ zM$1yJ#KF&&3PM8}HN3cPHfG0)raAqab0PZC>n$qudh1@P2ck9mqaTapDJB$T0k)yp zwl=jJ)M?glFhiqX<5!lOG83nqpsiiAI*~gR>&Dy^hb~E=u3__Ate+k5%XmZX=sZ$I z^j;P~TGdR$X-880UBgd$eFZW=Fm3f3mj8X2V>;1e$l0-PSbD*2K>aZlyK0iZUIwGe zf;Uv2rJ`oQpK|mvzpcO^obPURxH@mcLLcMv7!Hhxgf`E^Q?Lhf+reLp1Vt{?jq(&=m_k2tekv=1~R zV)W!MU}0A%E;kYSq}eN&`TA}>Hh(Q^B~|A&8y32mUN|n~I^&V+D2(}AH~$SUV*Dy2 z`XDN^Ag~u!w0x&dgkn_I9}@9Bs|aCjQ8%j{&(UZT$o0qyhqw$PioCrSCO)kXr>wUf z#CP>~$rbhTo|Dqk3cNach_W5|uGJ2b{dl#txw7!cb0sE&+-XJO?!B8reBs^J6))85 zaS&b)uh%2@K*OK|H_V)mie!(r{Bh^+b>1$!%}<$}0Abtf<|4P@<}D%1pD$Mep&87Q zmlvRailCNfUd^=gLBWn1AlrRF+xu%k>@wod772&nZHB*8pY z!6{t7N2p8x=K2&oiBEa%toC0k?`Xk}g+PwC6GTk+oEezn&iYEIv@Dfl|PvYBra-VKEO0MD8nWgCVowA@_0dBbh zOlz!jLOz7QEV?+hHf>0S!pGmmGx?-bJ z*Vzx5zz7ggi5VKwV7nx|S>bAzRkaTpXJgfYCM2fceVHKlbPb%)p0dDKY{gfF|0N&n z<9$nygG|3)XU5l#yIh0?5+vAE-07X#a49`qKIOZ6H0r523DO1w{Tp;ClwG4IEA41^ zI;lVAaN{lW9DQPlmwya*vs%+@=tirAm947>W zpCjJ}xK-`E0eI%YQen1M_9#WcsTstUM*Ij!xbG$_J``@iD={7Go<+~Uf+y4n<`XB{ zFL=hk58@SW$6hhFZ|92ei+82BxIf!0OJ#s|J1}g#JrD|P`RmZEa9Zy!P87N*=X_22 zL9@B~|AJ;7JJ+gzgC&0M6m{oqTa< zf!+)HngEeAh~AGaiSYHeXr2;X@|00~lfVB~1g!Q5D*G#>a^0uhjbXb;2YDjrmrPau zW6aHJ^N&A-dsLYL$4?bA2`G$|m^|l2)tw>ZZ4SAqW3* z8@pBovuz}5lUb*TJjBUz^*&3M4IVW~9=mRpy;?$3lJm4B+6GaeT0Yl)9*d;fa?m89 zukty-=ACj){pCESs(1OSd!$tA%m5;3Qq61~JNPBe0Ea(zFWEhH^~HvpaSXEj?Ip08 zfPL`IU#w+I-9Z%oM;Td*DAS#IdA|db^drty8*&tNP|Lujz2?uKx0{4s^R?|QDk@8W zUy*aMv~t;0b}G*K$8i7Y`IUspHUx30B0O0Yi^k#m(Z0uuHSsg(kl_=`pWR47o120A zI>*t60}}X)KK_iiLk;R7T*&U;;=b9DHOM|_5^3|Iu>!ks4fVMC9~Io$ex0Rb2(({H z*4{S!2;IZ9y7gqcWOJ$Qgvdy|-a{#Gdu$evMgleVP~VCE-7R0U43YdTi$2le4fvx) z)vPY&Dsu9zygx9Xl!yjdg2E^8V2cE%pU}$-KCt9z%;rG+$m)QK$RbRdD+E~*EmUji z0&0HpOGXbuyr=_?x#6cf7sDUcMUdO?q|oab=jL0m9fV`3Zat}^gRe!*c+RS)7p47K z=`=0i%w+B^o&^j;C^xNAW!Rq_3YyD)o>l_!Fh%#4Q6=MTfO`k;k@W%YS( z^0i3c<2A7P)Bq?y**&jIla&qd?ZMk%!bpyW>7AO;Z8e725e~CXNDtm@w|88L8}QlW ziUFnz_;bBZucEiSeW#@Nb$df#vVKc~x_+o{c^~If&U^M!n~z!+gCxZtB9kV^5WKvl z^CSO+=GZa2p)+p=O?{putF$%ip0Mth#WT{nfs1Wnx+Gs^%n`><{s?=7!Kq-y8yS)+ zL8SjYHz0`rR?iA}S)KddpN7d;bZc{;zZ`6a!2PbSpIlnV&7Rlpe=~N#17R$-_Jg*T z9e9EACMaC$?X@W+?e@zuQ;0m$0Kpv zaoQ$UkF_hF`F0DQt>5kA>YkaLZauYwI+;D_z|dD>VP$nNB^N&vh=cQn!+bNN8#sQe1s_Cx@PGvC%IitBoLPG`B99r(#32znDa6c%zQ80n_33vY{$5J3Kr ziWGseYN;<>56-Ii;WSc*+ipf?4tAN3S2nK8lv@?(KneWs7(p^S0OpV9c_56fqH)5I;_oEUMfk8a%WDAXJwH$$i$i1ju5q=@oRW0@o6 zd0^$#mDEQ7#Lp_{M|D(j+<4W0byN`_D6hZ%+?RB+@Vc@}e|R2@j}(F_kg4Am6!3gD ztnRZGVzcx$xkSC?`h76jL=Y8eVAwxFlx0fXF7&c`SJ|`1?>^xS#_f(m6?ynVGsqu^ z-$vJ2{-^$6RpNF#<+rP-?WSl{;`R=%n;iS5cYgGfKZ@UbgkXX711Ig7VP|Motp3N3 zw92P3c9G+m1m5X;EK>@?N-9Tx4#mAe+@(z>S=jYpfPgdrc!Eg3iF5ET$9Q*{jAwaf zXDMrI=14~%AJtl;L%ALE9RCZTzGv2C3VyuR>5H7dCEAPnu|~R;FrKH2e*J?P^<}9o zwmouponrp<%4F9Wp)`ZfrO$nFi@73xDsst#ysyE6Z(f$yVQejj%}c6VS@wAOu=+rv z?z02L_?D^oi6feg-K z*v0oy5lu1c6GbWNAlB-^mqZ%uW9Un;N~>JqsVK*}w_>q;r{?3q^ zb{EA80Xe>Os&gH|5Oo5iMe0lzGHzQpBu8e+bDPnD@50+N)?08cQ@fbHGLZzQB!Q>i zsZm)pf7yHy(FVhrL_muomb53m2cw`XdbxOaEIBiaW=-;XeIrJ2?`o zo~$t9{=%gv2cOB2+t7)_yBMumMScSTZN~ju*_#}Po^0r57yt(QeqpF^m^;fL+3Q_D zORDL2s2*q7l@n$Np0V4mzT{e#5wKgthdcS)H(bBOUYt%1B%u;=7Vu&bY!nbAQVxM1i=S&4K#KW^K!wbN!?S zwf8A5J%2Jl4|fN11i4-YN?pFu9@N}cu*Gv;Mzxw-FX1eGm^uin%OY6&tj$@K8+hg& z=Xi90Hh>q8`@P#oOrjq8`q(OGTxtk4jgvDJMD{4=8$8l;w6Qy3Q5m*U?2ioZ9dU#?1!MtP3^IwTRVZj`=F!*Q{twx8&yalMZ3@pPyGG->yq_rXoMF#jSliQB)sfar(pC->9W8dAx+RTU<7-0z$$T zs@u1(A?dv^D8>TSk;A)87!NwDm9m&B!?%XEF{Aw%CQKW@pL4?ei;rEDSh}FY?qfY< zC$n8lnRDW`W!k>&QScs+(lbc2i!y4qzanW#q^Ghkl-0d7Po@fLdZQ&Hs!MS~*9h9N zpwX7b^xnKz?{69XUfh_}1UojHf#S?`Pyb_9_{THJMs2B3@M?fOl2J|oCHjYZ;${Pe{-3Gxf1<4N0Ff_T_wrkEji)(wA59w(I_i zm$jGX(>4GeEa{5`*@u)$oW~LAql8o`eGNeEv32FG^PV(-ISX|GDV~8al&MSFW;Wiz zWMRe7k&*TZNH5IES!<9RG3byKa6xX~Q%L{fPVT%6UA$`t?Wd#Y`=~O0*O$3*aBtig z-+rfegQx{C4E~my?%N{MTnmCmd7ahs@|IF;IzC&-)bY9E^Se@qe%&)@f_ZNN-uk!kw{SjMy+&#BLLQG*26)bYSTGFW&{>)9$EJ0sPIJ7FZhw{f ztEGad7Dv&g@UdwQ#&sK^Ic$b$hA{LL6?i6#5uj|LH{TXTdpMPueT6BUEg3NgjtFTV zj4>o<<=*c)o)Qt%kklNXb0G4a9nV@MRmt2U65W;N_q@OnwKiiU{P|B+#nCJaD!?fx zWvXU_J?%J)xrW7t8+N_l^WPD0tEt#EnZ&K6_BZpZ1GjRBq4$zYtdYTmid-mWwHCLaCUpxbg?#!d)1o59war0ZTfg zg0t%bYS>K&Z#<;CLFSpepB?DCT_2V3woJ5kM9;12 zA&M)_$oP$_$a3`y(NO+oLUpsh|Db&Iyvm+X7&~Z{{IDFbHc5GT^M=es9OFmi3QCF|#iWr&6LM*l6;%(+gV>@Y|9TGmFb4ohDps>L8+f3HRZSD(vg`E@Fs4fKEMB*8-w6P6g zl=S|(-A2E)OmogUTP}4wj%>nx9pI^~V*>j9?IPdZ_b&^^dAj~o_QP)jMVB)CXquz~ z2u$q3n!vM$tGybG!(99Q)QaBY#r$0UR*2r`_q^{p$zYJe7?-j&3Ef~DptbE|&g3Y6 zdG7ZmLv0DTl{PL_fcy9yJ`ks=Z9{t8iS7x{l{dz$|SCZO9*IFvL4?(eaRtg!KZ9G6?qn- z?f1r@&Yd>`FH*RXAs@5+y)xtaStNUQYChc{01VA@!gr7IlK~=y?4vb){Uv!1Gq{}zw7gY@jLJs`pSDsh; z$wV&o-3Wm197>;eI>g>d{J#J`K*7Hd@+XYMmhNT6^+j%FVhBdQCN1mo*JzQ5e@*mN zeHRr!{)I@vi$_6T0IVIP%4S!oRn4}C$FrFU)5LExaziOF;_mTI#&d| z+tp~wJ6r+(s*@oNQ_{ZSqCb`{fhFkV-vlq;0FvHCZUp)xJ)Ao`5n2zwt1E|8{`uj; z#eRl7#qG?j>HgvBA}^Mi{0yjRCw*hlt+#8K!`N}%N&{fJEmpp$g5>%(9prPK#BW8` zrn%@_pCA&a{EgX5o8cm9W-f_aP#z=vH|=7s`Oh5*F|GclBj$(OR0Ez-U$RqoP=0os zQWJvqy?>?a)Z!K-vhD2&hWAT5y(drIMqVCtqKDoUnSpK1AU#{r*idXop2Z$_ZIg5rHhKwZsxN8B>rnlfk^())Frpca$!4& z*X7oV=bgnRVJ?|8$R*)wLR<#420u@l;UI#ypQ4*~Gw@SckF^)=^mIsS~1GH^fxiQ;6G&!fX za%J}VW~8p+XT$jXTw7w^xiv@8@$%-N{kIp@B>;P06dSRackvPcH-Abu2fqh^-}rK# zq3>jls>{U5-TmbkmA3ow6=s7_MUKMrnf8RV*>9^eg?u%nvJ901fCCq!{!HI9MNMn? zi^i^toJ3OJ#$63^;EP10NfEyXHn1iW#1B|q(q6xs4meyw_XvMQGvOni5`0r@V9pR_ zw!4`Y)9%||&~z39D^c24F9`XedU;1X`4-qdwPayzyQ}mI&T;jtY)^H5+1C8gsDdF1 z8!xvdZ2X06JFQy~b(=mmebW%7OW5re8|?bP;34eC1nd6`ntogMwyN1%G~eBL?_+|w z#$$sSP_2C+SGDvd?wQ}&v90-g%byL_j6IiSZDe7mr0s**mgP^_@Vut!oX$Dv3jVg9 z{jYdsFB$SGuf%(T=my^u$Z?eB(dnT5{^!Ho`w&c=@qF0b75t>GvpvnDi>{zG{MP67 zwZk!3v6VIS#ZCJQ@9S!o-?{Zlmfzn}6pZ=W#;6yX$sO4U_sFGsH1LUtFW%p5LrqK#fAPnAK=9`-1 zsyDIV>beTQzMYwz?a!S7bX>t>*6~eRZtq;ib|7`&KRHV|V0OKVz6(m`?pph!D3{c> zZv7@@=apM8^vA7A7IZ?Pz>-_B-qxSdCsLjFw4wTbdxN$GA9!BKXA9%%i?)Vj$oGjm zAF_+N7S{g6kDs-Q0|$CTEze#_klPaPN_gT~wFY{r9iNJuet&|qoUnCS9EaHR3Ell z&W(Sf=br%NOCOn1%Zhk#4{OW%gn!h=M!mP?{B+t2gcRrZZD~_{_A~m<;ApN67CMwX z54JHj8i6FoKST1*PfHaqd6CBDbQq`7EdTuuyd{Qr_wHNoAbEG|`1CNVzT1}H_VHUhzir{S7X0=pzv2EmyshT9qx|+aehcv1)BLuF-yY<*?fh27ZyWio zg5NgqTLHh-@!M#ATg`7-{I-(cQu%EezjfocMf}#D-xl&)Jik@(TN8SlH3Nbt22!vb zf(JQR1i`%=oCv|K92^V5&pDU}!8#6RL2wlZ)3N^?Oo8CD98AXVpK~w?f;Aj;KyVHR z+d|OG!FUK3VQ~IOEwW5sJs&yHIL0ymV7xL#k9k_|SD3vgtLAF7#}PH$insE<2}9Rw zQ{aaTUH0#Qt5s~;4qBg%2bv9}$@3b{XE|3)3TzkwIXa#^a_O=Ez;9Z^xnEBLH6$2V?LKySeMDJFPFwf>!?B zBy_fF!`q3Qp&tC|F+PKg8d!&ybp?eSq1$ z^`yRHU@R1$cL^|$CM?@Y)b3054>PN%Hkj)Yj>@5v=_r*x)>@aFZyZ1aI>g@wv%4=e zWLy+Q(w^iS9h_S(jM4XLoUiCFQp@p67^x3FhG(nUxIpIXqKGTneFsmHa?V4qHj`&B z);E&@g6Pm-RM(M^{O?AGE>y-_r>X^Di^#B4}T_MAKvpCQ+Gv#-Q9D8nG;1 zx+(8@_*LWe>w>(^Dv?7jZa_onsvI<>UmIFxTDQ^(==d!{K$Q2jI76nz^KXyq?He9X zG}0RHECr-8xZi#v2ht z(fM&PN*$vrZK-x5jHZw_y`_H7nm_IIC3y1rX5|`?&O?3SBQ(@`?A^eThN5DxP`(9v|urPgST}VeU!{OfjE?X&l|!%N%*Bfz2;^jw)Snz#FqRR4<zg7P`b*P&U;wb?_W(blhW6%Eu{3u zVywMQAMVwA&6xoGY5&661rL0wAwD;dQE?uazSwC$~hy4B=M%b^%($_u& z@(Kev+FJh*y6YxdiY5C$E|kIBqPRd>&P7yYX=@(#r4Q;AUu!9v)5=;Dqt|q0t#S1Q zR3CKlTs*b%y21W7(BrhLZL$H4je8zy3d~QX-ux7A^d@NE1C&qjx-+~Yh9@tuSjaJO(YWT7YmWskxS7Y>&9`zqf~91sEZQl?q9XzYP$&EYWWC9O>;4Y z-ioHs=@;Mt--@Qt*B_x^+nk!Yj=;ITV(3VRBxf`FT-aGQn(ypO>fq@(qTo1Kh~eKC zL3{l}q@MnZzLV{|>OwL-eDM%52HS!MbrZzWzKR=khI}8jGH&u@&ILi2pIir&^P70TCu{q;~oUy+pBi_pmT?jmvLV9(#IO3R{ zfn#>2#Qm+9!ftwiw8?I*Xx>W~*QA)cxTl4+i*<|SDq{~;ke))dZ@$QiPE4Q6K(U%F zejR_~Ex_lSfkQ*{7pd8EF+$&WBQ)E_@dfZS#u-xDbCa|3+Nx{-f@Ws6`jSSg68= z#?V^l-xu-q2k$oH$}Zu`_?x|p%jJNp-*&CFzR4GuDP{RS$@AM?dc1?RdK81@8# z{Wj-V#;_;qus2<3f!(Sh?0dQ7a)ynV{gc3s71(!hj+G2MPlr9n3i}@|8^CsONxl{^ zqbDNm|$;h zWr2O7MFZGHTyi_ZP6F7+7BlQ4O&Rte&asDKJ9OCdtgxSI2>U`V8DQAS0DBr6Tmz2? z>|gqb0=+n1huhlr`O13anItVcJ(;|pSO&}huhAYYni~c;2qc2T1?$T${vaV-uPbku(N z{kSNP{Tlw+FQxFs#4iDEJAqpmH|Dd#xGr=+2$LuBb8!)$#k4metv!!@%qNFji10|=kDzH{AWm>h6>5G<8@{F0aP_z1+hFr}0Y)|Wcc+D|9kJyyR^47Do2|jkA zZY1uNtTd#Lf|^M~!mEs~iKRjnO?c9Dt=3EZ(Nj&qM9tVg+Xl$8EmY=v0MLSKtv{z1 zT&EXo6Jsi<4E`t7mU#V`p5g8F2_xy_$)E+jaKG{>3AERt-Vh{dW;#z)lVQakq;`ol z!#SE?jSOjhnowJ-W4N=`^K=GqQBSoIoWiB#(1G9C_I~{$1HW^BP&Dw<%ExA_Y&tnm ze>c%fHEit-^o;0C4s{^CElkPBnHMe|-|K3FHKo8ZxWNDy7 zZy=j<3dP8SalPOdG}>cvcYY3l5+}?x9Y6jmWaOqjRK$7h_@gepcf5JBlXyyku7oyz&DzNRp4^frcstzl$ z{m3_}zT5z=-eiHH3L3hlTka@< zmUd}E%IS?jrhht34C2NGG-E{}-FpI!yW(+=d-2Q83aLlEG`DS5&F6ew$Vs}2cbm9x z^2hG@b6E@Oc+2wdFg*gb*U6c?PXi0DV^_RCXvuPK%!y5#LJT7q7Q)8PdRiY23iKx~kF}@gsr$g!*|J?@J==x~__wbT}^2#D5b$pC{+c zcz4+E-bmkd!0*7#vwBD#ZDhwdDW~Qm&=C2)se9)M?)9%YZ)2Cf)o}}UYGUYe*Wvyz zjB21|S7C9V2AX!|F-X9}DY4E2K^A$x>7t3%z*$7!@O8GFXU6~TE(-s>`19STPZ0j| z>3bpH>iGX>7lo$hehBzr72`|58ck$OD zNB_9@KQ%Vd2*N!I!V?CB!3Km(69i9q2&)x@F$RPd2837>gzljbdewz>Re*VN29VpV z3NggU1;M-fm#5Xy(QN!S5{&DSz%!lonx5#)r1k{6j>P{?6!Xwx<t@}F5 zjS+x-yk$7I`cPbTYxX1k47wAzq_gs0S;urYWHAwG!Cak4{b_N3P(3OCp&a%1>86bi zoymu5BRe-ZP7@QZpQGEZ%TBSi3hy+PB1f)OeB_D~%CC;RZWB+AmOz5?}L;|U&> zjWhH-w^N?)#XskFO=QiW{m$94cI^+^$Id3u*^dbSaQ=n9K%AH|TNz)69ufQ=SVOgw8*r%S+HdX!ZvDb~PY(7v0MH@qwG5>?G2A zq2N1GaB(No8RY^Ltm*9I-|jU|>^*ibjq+da6-q;z_~kh9H}AbN!oy_U5IChPi+7!!!F@{rT&FUN(Ow7gdxq7JO-D3twaU{y!F0~%)e zqkKr`JG@V~*4AkTja}32hA3eIOD-<9g+vMMnnUZqIYym(Y?gEw#Szz0LoBDx-q}$) zo3<6&6mWLb8BKCWx_j^{yl)OCNDQ8!4&2<4nv(r1Ug83QI^+xfWWsPauE`|mBwjPC zp}d}?-$4A`J(^)yPe`Puqu%GNVB*4bA=0-xklBW=c;!47{mQq9^4pSw%%9j|%aZs4{3gTJ`S*Yet?9@ec=@V1#gA}l-nHYewlFO|K*pI$^soxe@S z_bSqMy5;KOoNKV%WSt!BZ?`9_W+`6@oVEgnED(Qk5tn1REs zFq3eC{1BSUr__Y+zUknh;xFt3)%VcYw6tc1Zo}hmqtPaG^{#Wl2KN>3rY~GBW^=FH zSL~fZI90<}J)W<^%A&-(sBx>1^61;^iL+s%_|n9N()JKi!m*&e=M3gVt@L&V?Hw_$ z`a55|WWJ7ADY8yML(KuwOb^GoR$5#eS_N*ZOxC<>}j60 zzA2qf06Bo5I3GJmY~U}`4K`q#N78n`SQxl}Qk#yi(Nz}Pc$J8D!KjMMeFp=4kvo)% zo377g)Kh=gl%7<0i0a35;yFv1B1v7^7ob@?qL$JEXA>BQ>)Weo`P@;;Fuc|*fG%&( zH0e)VH_aqAtf0?VIdq798~F9@vkg9wN~3cp zT^HX>TJIkQpP^YPwp^-~#-$A*bUP8tHd_(ew=hzwHldC2dyFjbVI? zUF`4`F^^b2UPrIOZ-SZewZcx zPCfocj$h94FW#%-uNDTA1h$z=(#|^}9YF@3%;`~1(>lyI8<~|~TJUzMA{=i%_%ym~Omgqpbye*h4%vvDEi}3qnCVlwR6(} z%<)=<2&cBcRUoCPw!JmS+_t-~G*E%xg1Zbs(6`|3tuU@XDxyn>owpGw(}&O0$tCE& z>V_D8+uo^6TqTW%;_DV*Q$tllqVyj5*DV^zB~5(Sejq9A{t z)8_w4=l-DhulNBkZ$ObQo%#L@6W_;b0y8fszK>V>4fXfg!(XN2wIksl9wltmTrOC^ zOGmT(i+QI~&igNdYzw}NtG*u{OG#A1mR9~*=gus%()ToRTbacqxixf%M_s?Dx>tPz z-vvTjp7!fKI$s8gO!N>b4n1VxvcpeIicKgZ?S>x6loF7&qbci=A4Ra*TBf%vX#cv5 zl(=bHdyyVmsE4Zb&@v9m_cZ;sk4vrMUm!&M z3$!tPU;tz<=Wjm{R$jw$dql-D-ms@HQ;u1TN zszLX>WXGJrPaHJ0E6bo`4@q@>OU;5=oLw=-se4pBomT38MX3mC->~yGp5wb5&(-6n z6KgV;&<1zfff8VCw_!z3wGmc~6ASwRssAp~1-qBqsEStaqUHE&wrgkAR4!4fy3|D0 z(%B0E9V@)Jcj8{gx4hWipO3GVtFvpG!CU+ctdPGq($s@t`gF(b_i}W6pe0qAS;bAd zX1Cs!D>(suJFnVf#zssVq#nHEB^y8f;ZO7Z%{D?u^?(UIT^%>1i{#kGJn88Auk)6PGA)pw~VnYM}tmpE^Bz zH%;F!1FUvHuFX`*FEkrwFA3Ve;~cNuZOn_f5Xbqz=8HpjL4ksg0nEYk`*qgh7QCj3 zrjnM66~*ih+<1vX-sk+)ypp?R_-HS4z$N12*rp?7sZ&FX+uTF$7E7Ui3BGgnex1Pm z&e#AuEkgXnJ!Z$wbvsQc#m&{v2<&b)7g^3OS>GET2mzwTorsCRCIi_QD_dnYv2FV# zvb1%7s#x!kKVkHDl=O3z>>#My@D^N5@o_Ul;!7|d^fs(uU%c{l#p5Thxz+I#=My`% zhDT1ayvv7J1?Sidy!_C?XKG+ zjw|ez?)2_gZZNd|=|J}H6s_;H`Q(^$x1O6$ipEthXIpv!5hor-QD=s4j#uW>vE1hR zeR^9v=+$)6iCU7H$D1yCYhR?_kA?E^PR;CUj}k&Vx@ax!ZCvnTXV>Ar*wb;uQ&vNP zf9^07<%&2}=@=YoI*d#SkH#rt-bw{z=Y3)3Hnz_!nQSa=Tlwhr)~eatpz}+K5d{ND zaY}3eApMPxU8X9?bk=&$UOnL&y)D;&Ye4|^I%%@$RxsM6a~{HV$UnYL=E9(z=9#g4 zN65_h$4)h&vS=f5TOneJ1_!`@Rwx&j@u8`rs0Z+2Ce;5xjG!klf(g3$aRD_54NcBs zTFw&hF4PT<85dFS#B=isUP|vSRcsCVlUZnxq%HjiWwdf8?9qXoYi$6jZT%XF=+1xd zGI*nuzQ8EGd$(S?&QiJuYb1XODVU+r4p@SZ&v9qZ zKX;jL0^S$Am!O~8!K;$rIl--qPALoqzbm?*PB&n4=5l8=)f~3u^@36ddW0N?hl0hb zpx-%%`Oqy>QDr;Dci&zq%}0G?H}Ce_cNMUjwB|xhZdO_CYtOxz|1E)N$6w70+TSc7 zQ}vZnLp!cvZ8_HPIHVo86=LrqNg=H>+5dN-9j`z~)aVP%m|j3%JaH!OG+{buAI(jj zzE7HpmsutDHDFwFp-I5}u#g2zfp`fi`_9eZoAiGMm%PuQo9}d3pSDu7xkw*4jQ=}- zz2o!kgc7_|0T2K9dMF+8Z~2tqOOSd~>3VtRIQr@%sGfg@^aE`LO}{f1FDphgmFH7V z7k!`E_WWKo9*JY}^;RXf5^_o#Okccqez#LkYtu??Q(d;x;6Idf>H=j#211C>R~Id? zD1v(KHcgHQWb73xp}uYKT>)JfLt2D$$#n2gjgWF{%@X|@ltD!CNljQTyb^4lsx5I6>PMI(sB6zRT z9%5oQ0uvk1L`gFf0NsJCmP)|N+Cf-x%_ITfNtdzg+A4_(GB*gv?Xit=K3=3V^t_gG zmj6S%=ovrc{KjsP$!hIKN~ljKw<5X+Fx)`+Um&<~PuRPtcor7M_^Feb=vd z_@#wH-JRc>)_6kPv59npKxIp^xBf7Z)S8_WHQjYAVbLanx_5>YRnp4)Ehs*_JS6_* z7EIThl~)8tPHv&(rQ$8-)peNOv>N(wui+JE+WSL&YpV`TB#5VY$M)DxA;Xvxf$hyz zB_-R;mHg6NDzS~+g|n;;etpZeRbTCB`K+H{z8!Ylx8f3ja@@;1X>Q^rb+KF32~B*% z?{-?2(2}jH7<*V)PWj&tH8ggeLRM^=gT6_BHgJJzwX=}EeVKO41hcMVZ*G{*x=$cn z6z(9*Psi*v_zC4>lDEE@V(4}1M%DqGcm77rdL!$OyO_@2<|2F}E69Iagz>MrOKqP9 z?Qh>DH?r>JFJkxDgp|5OAo!Xox0IZk(v5+en(1=X*DNFY6HD*Xr}v;{x}Hn3r1jJS zgH-YAh3vZowOf=w=8?e9HdScWHv+T!6?f^g>zIwJtZm)2KzS>y+bT=UH@aIVs}r|x zA#%QlbMm1$=-QRswd=mt)a9?IjeAob((Ctbm-?Eo!WTgTU5W>cS@wC$!L zZrWV#Mu<)OQe`^ORL`_7G}G%U)2BwJmqIf=sxm!iWLg-SX}ZdEuaRj=Xr?<Dkx z*HosNMy6$Zat!mBW}|p#&bl99+ATlSL+csVMJ^~Gg{Sl%WWBW!ALN1-4gu$n0`N{ z-wpKpFZ%t0e!ryOjr6;Tez(x?R{GsezdPvnd-~l)zkBF+AN~G7zdzA$fPR0W--Gmf zn0}Aa?=kxQ5B(me-;?xvntspF?>YL_p1|KG^xKqvo6&Cz`n`aDFQng#=r^8zFQMNy z^m`fowx!=I>9-yIwx?eQ{dS<=PV{>%{U*_GSNiQnzdh(T`3ba6Cd@?HctkLFQ9DOLYHhQ?rM6NWq(+JK>j7kk0Csm zRrDo>zQhpDqWX_9gfp&w4Td^l2)7T4P-?D!8AB5>^fZR%Vd!BDy@(;S&li1+p*a}Z zgdrb>e!|e*7&?U^Jf>5GUq!DUjUfkyaxl~zLjy4M3HAv0YKp$aP!9}s$M$u?5c+7; zUx^{SnWa9SpkSyOhEgze<}8H9Vdxl!=3)qs9T%a=rhXTO)?sK1hJL`%zcADs>%gy! zmAER)@{9WWay*lZ%e0I^11if3O58(TrEdLYw7bGv>?zZRj>xJkb(IZwy9!*BO57Qq z@|hLIlZ$*>UWKQiGT-OO@|3#EU6b8fVtQh_)_;r`%mO0Wu1TCisfnFswyTw^uXzFrj#InWw@% zAyWJl_sr>@iULR~@=Tv#O6LM)NGe@5K%SOgT7cypF!(v1d{>EMsM`lcr)XTUuNZKk z6_<@v{n7))1==JcH7(y$+QU^2q|(Dk#87Xo7|}uLlRcivCGLDrfx8Dq_SSC2rub%R zljVuIN{fB@MedT4q8=)?e~BxQQd*2U@B-?Gt1o-S`q!`dwSgCF81}{x8cPetpfgGlPX;0MJ{)V zs}u$c-Y}MjZl)tG4Y7s|C47!5!v|p#kmD``)XkhwSPV6l!{pH_Vdw#o#lB)!$%KO9 z3U@xx$4r=M#R$dGz1)#lQlLQ?=OIV=9G&wEAn3UET8DdvJKxc1L{?@_j-z`?XU$!v z_3C|Nk7W3-7tGxr^gjg(G#v0A6MXsQJ+u-W(;nKil=NGYwc>JZM82!64CobS&QK4{ zZ6XOrp$7(2o7%e%WK8ccbi}~od>_!Gt72w{l#uscH$Xj(q{Q?tT85{r3_8MK-38bM zufsLjV~!}*BOF6L)3p(NzlPYgGQ~f1fw47lX{c{{6GKY`O96mxH4lQZio#V!jb9KLG{H*I|kGpgH_%0IF z-4sz)SppDzKw}Oh*JFagjzSlt7leVYW=4k#9PsA?Tuy^p=%u*Ok(3YE_eq`JE{-%uvIFK{ z8KvW2fydzmf-m<`ofPdZ@wy|VJBrI3g%uthBIkz&7Z+ZD4{V-3kwcn}(CbNTI0CaX9f<*YlTqt+%-kQ6|MI2# z@M;ZpL$@_tlC>V?m6Nn7WuEC}vJ?rrU6no%F^cbT7vS3E)zs`p^h$NWFt~4d!-owV zl`%3K22B=v)i7TX5E!@R7L8`Y^kSHaliUtq>p;N3luKqhD%_=>X-Iz~jqCzJ!~ERe z(XNt8_aILN;3icoC@u&Si`*PY3#i$XuhA49Ff+5PveaGS!j6vt-huLqJJmDkZlDWq zD&e#h139q(zNcz1ncyAp z?#nR?gQT*NUdpP!rD`MZnl-H4HMP>6Gh#%MtHNENnmgQG zm^QoHXj93N`Ggg0C{G@23O)xG7vy+c1qgaXk*BhxAj9R&cNMrfmlu&)=rI-m9CPJ9!2LxF7JrSNvPzJ<{;Qk)#o%%Bo+=*fl)(o z5M)Ydgs^R{iphu|ufTw{-d*9tex$3`lf0f1z&nkN8aP@v zA(Z3t`Ycmc1KA`K7!9bnScSpbBVeoHECY^%Pn~T%HP$-ln@N@?Ah;ggI@J z$5TSpd1C_ zl@BBeuYzDDa_l+N6D)v2t$GUtQi)5)DPuFoh$zqp6$?l!gm`pmM{jg0v~;9LXKBJ{ zaH3I`99NmndqN1&BmjWe0PMl*E`xQWc$zyyaRo2PvSzYiQ5=U&XE-Au%W&+1tArW= zs}Ia<7%;bvU|iQp7bRB8W6Kypi2#Vuq@iG!SyIa;ZNIP>IVB5iO0v^XZRg?TS>weC zf~pk2;sK-qCKhR0!qi|CL*sw}Go83-X;d>ov1DkG!Qe|>Q`~?rSlEVD6u2t}Rgf@K z;VvQ3O9ww{_r`=ckf})^ZwKmBzZTkyd~4zG@0F6 zxwT%%M5#PUOWh#dq>>gzVhm|NE>(jzX{L`#AYm&a;J5xIB`ng)@cb9cUjrg!>U1#~ zx^U_cb&d2$7t!{S3TtsGkTkG005zhxEZ;qlmv>l~hN93|5lW{l8F;<0Hls+z0s@H7 zNEk3DI1ZXU0MuKiQxSj_%?zp_$rHz{1eT>D53IQrIs+&`BA8a}o*r7Dyt1UkI}mg? zoo2l{aBpfuMDZkoApyM198Ca`KnEe4h9QJCpaAK=qOuHDY*&d8C=)vgD8Q9y8oLRw ziQQO6Ojpu`vm2Z|l!H&NfR%WphZsJLN-50bl9HLm3QNnd+Z$;iR%;$G4nP|OqvuCC z!;sc2^9)Cq?5hgFBUq9Yeu0wdaJR3rqAZge?klSBOy@9QxtMi&9P-qBv3?BWti#Hg zX94rMt#GBes zc~G=$UjNNfBI?exKSAJNRUhG-i3BUgDw=*UU-c@Hb&%#_(I2r@EIe3s-l4^lhN=mc z0~`yN8<3`z63C4jq09WKN)AVL(uHi$T~Y{KtpaDXv5tjCOxN)rHO-t2*lC4l#!Pq) zfwl}Q%)sg}I@iq;Kq7EF0GxNE2lD$o`JNJNHBDHEGn!Q4M&Sb27dI@+XvFcTFehb@ z6m}1qe_#m#bXP)4xswGZq9_0fV6vG?M&8zKxHhsQ{+KLd-G+C|KvTbP`T;N}Kq4Dc zTv9TER+`j?i35va$UNl{(^CtI3x;}pQPT$ju4KU~h5i9kC)$dbS7IB_Ou~r!zXi>? zqXS1=f?)JD)&fRiW&H{REqpN?gV4;Zkc}KWa=1I+Q&B(? zcSsgoJj#8t$si(Ec3F8PnsMB&(o|U5jTg;iaAy$n9Ru9 z8x-J*QCt~SMoU;hgDg=K^$M}8(7jRF*5q=S2)>4;^k^^5cePKNifktj(}Sj(Q zLZ4jhg~pJHrPSkd16k?%JV_h_-AExLJyYCe4NBv-#7Ix$Fe25R?*ZG%pzXGpdHzyZ#KjQt-R5JK*I*Q8_h+wYY_*~zK{CLG*BT) zAR_~nId^`ToT(KI-?H|G#c$Ml++k76^W9RNB}*lnWp+sj!hHjy>4`H0C_Jgd0C z9a^SA9A+F{m{`m_0BE4pP1tKtBx0KI^5V&5;R{Agqvp|=HE3SLSj-%r-40Y+ zCnNGJ+$hDND#1c!xLm{X^Ghnx+SZW3Q5GR(U?2(l3Lm4&T+@Iic^4p3b^}93UNkif zb-N3^sy|8%Ak8Mbj9C}iC@Lw3#gOThT@2i+=3H4WuZ616c#$~`13tEkisDF_vHiFb z@Edj?8Lm_}ok&PbyDTD-h+O7I(Rw)RJk&hE6QLD)J{?u73Qs9WpPIhOs&;w3CQAgA z6}!d2)Nl?d`MPb0Z5FVG@U|;0A}q`D_NqiE@!id7wBwPg0UmtZAJ!L4+o)n%B@Z80 ziI1L!4P0&Hnru{D1KV}o1tG7!*{p(5w5_SXjUY3-0*7iLb_h+Qp>gP3BvBAFRjhWe zsSx}0P>^>0W%Gj~a5>E8AbHMEh^%b@kT#f!+{F4YLfNELty%2IV|u|Ru{RH=ad?Pw z?6K_KnNV9oRx~nfm$0?Lt4;Eh-3|I>mU0#np^{8{Xm!hXm4OZ*A>4-tHJuFq4fek$ zgxXq2JkMpiBD)7}?F{WUxJN?L03*3e73f=`N zF5~SvR8(<*-TH=FK7&Bx0(29onl>*7!tz2EjhSMFfRQ5p&nhaZDc<6HNP~wOxp5<) z$Rt+(5 z`!f};>D~d*Yur#TE8sZbS;{7WMcpo_luamTx%5m&gc$u}l?+#H#WjqyK_woS&wDFw z)(c@VzGVr z^y>7YMiO3mF!Y#wdNot@STYNiD!Zl(FIj|#ylRlEN`-C+z!%T-LA;lWlN4Gq!p##^4JJZ?PO^F5n>uM`<_w?W&B8R$ z8j1V}vW@hJKF7n&wo(y{7%Xi_7|o*vnzo6*gX?n7Bzr9xnV|99@0m$dsu( zBvl_DOWhzoDT|k<=6ih?m{x~>Qds-VI(c`}VBZBvu}6|<7fY36N0CfXUBONka{DH8 z{cHin1qYc5sSeN+@fr+G%PcF1kfH`uVpEX~u|^seo+&*HOhfhN4M16Zh?STur(yDs z7BqwAg?@dF7A*Es2}RlF)-m09WD9e^Ov4h~AeUjprww7Ld<@90?4&@v%DTT3LLKlE zGKY&BWCHFtn)8L37R3eq3y{;(8?=E~eMkHq2B!46G5RWx>k71e!2+UWm2<$&Usz`aJXiI?=b-8;pQac960Wpxrj3vH})F z*^P)?8i;2)VvANmFL&y{p~;abGyiu)jHWis*(l^<)-1vhCr<-I;0u!qP)l6pUU$QE z)2x%p@n23p5I9k2VVM<#j4&j}bq{xY&_zNr_&kwwBDzhD2uDHsbPK6ZDPzb`%%~4n%t+HEXA@&bKRsMeyyVy+@-%lj zYId3tjpjFVs0>wB7qVT3vx|7V8on<;EX8aHK!sSnK)mSn7|TIRpG}%7=hwARQ97xj zkT_I#%mxC(TmZ_1p~R3H7vg3?aiAcN8Rm#o!z`xKEm~-*I_Ct6k6vfC zHH!6%0X}ki9>GDSL`v*H^`{^N>@o{VIk^6=4^sL%4C`-D&34$t|-K4qcS!?xm0U_G7UjP ze{nJ@hK@@E5Y}-D55*X*@afhO4WGvt<_Im-$DYz*ct@49JC@3!lSHHpR!WJK%Su4u z8xu-Zl*}IS~xh;SW~XG!qSLLq`m4;K*U5i4&YTlPT5Y zTx5zxgSh@07klxQZ8UCYZUjrWh1LygY)HIOL589FiRxxb)U3UAT+{y-KdK@nEh!*K zD@sY%hJ-XINDCuGL{z%jrgW!-)TBc~r6ndXN$C`kk&a3CSpLT6d;hri&wC&D@fc^X zIPcdv=Xqk=`~Bwq($!9BSFuc(m<;`sT9}_(Y@Fd%>Y~tkZ|ZU0R;UZ$HphvE$sWKK zvIj^v&zn`Hj5vR!yZ0=}FiTMao@Ps%^-`eML)gRbk?ps($05?&ZSPZsd~9{yW8Uih z@JUR3vTemL(P{eifJ*-w#mz4z4~r(Q&9tBkVB{08Hw*8#ELlW-V;nlEijXtQPi1>} z{N?+<3VUe8K^D`@C&mC8ts$C6>?x^yKC81&w8&c@YPf5xohJoZM5pD{3CX;Y5>xM zxjuUV)z6@$rO&D2C9b1fny;+eMjySIN>m6|Tp2f!9}znG`9VB#O6*5$JKdu&D{;i= zP%C?j=hU)(^jc$h_%G%@FhBihvyXm>Pw{>8vhqqipy;u9?3QB;6~ouRLM{f>=5)pw zTBcq2P6YdaeK?c`t9|`W2iRyUxOv93`YvfTPlg+Ns9v4-+wicP7$3Bi8Zb;&14xoL}DlrN8*Z zMf>NqxF#`%>t!zIq)$DNM!&SiS0` z{H*Qk^UwF>51s7`iJ$N*Jj}JLY0e8qc2y|iEt>2g>&7;kdK`HO49ClE8cSScmd zOPd+aCe)Rb0ySR**6212xZK|7zGM-tFc^McwhHZYKDPc<5)T;RiK_kRl~+9aBl@+> zVAbq)$3WcKgLRHvS(~!8zLzPZ+**gZG^c&H%f_>iD{!IoRF&chBaAEM<;Y!aotygR z{KS~!>#y}!>o&bgQsC*Ont!3s_^L|edL}FGeMLr=*+?!y zjN!aC^8xa?lRXuAFB6RQ2dfC|@oFD8cUchIlG|<|8_nYL2JalSLCaM-^J_BrmqnZF zW<}5KBT60*yvi%3@og=dcr-;)DKq?-3;{y4mwpc%Jr54pa0_YcKt*;SnGXxAmlZI- zkMzu^44c;TgvM6)_d=gXm7XyL14HP5zoQzVv1;ZRn@l(3dTuvkQy7mK$^LL#Y>Y>9 zX}IPfIT&A)$5+&utEOu}Kpz&~8}r!srB%o{s2C0lWrMUwH42#@CZ%KdvM|CBh0Qs> zZY%!ay(gUXeFzVfvmC|^_ccxdK4_ntMKc06&bvh7X8PbO=I&}+W_g9=f6kAz8`#<(HN#1If%!e`_cFn$b@1|MAi|tN*33)XQr5wz4V?+2X3_q1@#^F zk$^FRZ3c2TCImK_8xUqY^<4eak2fKfQ^~-3`QSZDiN9-{ayuDTjq^-d9=Qa0iCLyt zkE7<d`vc4IVy{2n8Fsctbs47t_B)T>QmoL(W8Brd})y&bz_ z56o#5mV+Rh5#7xZWH6HkNv?i*_renzNg`b z2TapI_&iF98|jb-k;jTW?#P(*B|%LrockRqsT9O5(AkxSHI)m8{iRkWtM%6-d3OaOYmp{_&T`lSqR#|J|=N8`OO9Cdjt*C1K4F2O$E# z5IS3158j@3XwHKs9cxXXD^4HzVL^*}*vW^>@Zj56Y;$wk@kvbaFtr^wnv|?HaXy#! z@b4IuTOT+>gHK@8^#tWToUB*l1w({yCId*{QPEsNZZ^=$vn1XnOsZOM%728XjhCaDawKaX!NZ% zVie6F(eG2_;JZrK?SUUA^{}0~#VMvIX`6WT;KL!fmoOG@4H3p-2y1$N=Wc|w&7-rt zhYKyA(hdmnSBTS?j@xUj?htup?oOzL2v{%j__1!u7XOcQqGsgrZ1I?Gx~U3zn-$HF zzx5L+Q%fPV7Pme>*5mj<;{CBC%OsK@uL8wy&TSqaoYYUCeYeQO?W}%cBOxMb8u~5m zR8g6u0NAX=0fvb3CUg-4R5`!|KCgQ!P~MPxSnPegbg#O~GGt>U!F?a*H1!@#~6}!Kd7B#ebBN3{;T^M zxQr4EuFG-@y9pfLXnR~Z$Zr4%=F4Xj@3O+v9*^yaW~9(>Ua~9#L=*CNfsqoz$p1$r-IC)a(}9sC)SOg)lU2eJtH= zGIjG@Q4i}AEcs-ke=umsH%@J9{YI)Az5s8OhC-;;VjcxO*?CN`IJtwr)A8x_u3FV8 z<$cXUq0&XYElB*ePr-Ai0Y$yPOHjk<$8kyPc>?GJ?!lI)lUrnJKbfMCUjO4}{%)&K zNEe&_n1?VZt<*|qpkg*@M;x3l53@bX(!LFolMD;<(d$TOGSgfgBNdQTNrA*YJn|fV z1VxcX|Gy33NWGwU`3;g8DEi>h3>3v-m{H;I`nh6om&n-JMsSQ;_En5>MInrC!n81=^iS|1 z;>b`x*E<!fxBc?czNLKHth36oF#Va}DW!r=*|4g^r>U`K>_KaOOu+O8K?jey=g*#C$s zJafLcVQ-&!B(&)fjWWv3nKXyAGz)<`^A2NpQaFw@`&=OdVEV%@B~g5AvFk^tBCI0UQ#vg%dU`~K>m*bv-d=?G zB^9rzkM|Wg_sqa#3Y?4S;}=r#vckmSRJ{Ck5?GJuCPLizz6-H*@EB*n-lmFt!{)#d zGd}WI-zq3bUYJl?3gi&5x8rd^yS)gZ(B~Od$yo=Y9_^e2k~~PzJgiT} z_zRpPvoX*Z#9k_9Pjl7fl?(^5m}qN&?@q-uv#hqy_nh4|UNwzehmUY{fm}qo^sPMb z2%2+4;Vuh3;*IN2cRlSSK|8lABH>W`r}6e3kt!1g>(G z$WYreRaIdTgkjQ+B{f=LLZC0%yWl&L^gtL^CzhX6pi4~?A5L>%suK%UC(C46g~l-> zJNz-2WR_KPAp}Y%7Otv^FQz&0)QLs%3v^|V_cI5ZB<*(zub)5E!@@Nu^8!#P`NN;7 zZc%Fd*{FrxS)a?nDO*n9>X7_Hatdx7;>&e0r+ue*=vtK*Uoy00kvH%$=D=Go3|BZC zRDlSjjpG+Pa2GhB6Z#Ilr-@JCjDnr*>EmOWF&2l!ST#@~ukw$T?!AZH>8u00@imxN$kD;tt1C9ODr&GtCxgx;nr@VS zT#CBKjOAXDZsj;+JM8Pf8F@-P(Q7;&w)4MmDOP=H$4Y#7tn>V&2;t$He42@5oW&C zLBVBoS-$udg6TD12Ltn0jUYY6j6c7gxi&QX+)dXmvuAiQF8;+rA58UxTe9+jj`@3! zngNC;i+G8LVRC{m-hg$Axaup_bCCgRf(K z#gW!$x9%>^Q|ha@r}IqQ^G8n5;qP6%rz!N?I-jAgkGjm}al-$86F#Th|7`Ug67^1< zJ~ZoHC-LCxa&p{z+o^j!g(NyJ5oD_6 zoKD0Ty#;HhLvW%!CUbXXNNg%g-wUtdu9lMGf{49^8KqFQKT>7EBaCqV5P1A4!TCfDb(rh@w`oczLP9A6QaV_qJ2&iHr{pFj9W3xjI~?~ zDOiRxVP(T1&Xo|HT!iVZU6~L4E-X?HpNb&-W0`Idr4X|9%Lfk;Qn!d)-v2Vy96~nQ z`eRNzPY_N|Ie~MdGUFl?onbk|)?dya_imIU`Ncjaoc(#oFlXv^?O3&*4a<)04S(Z@ zT-mr=vbGkRQStE)OZ~$RZv#KvWN6yx8>HMRa&`r~w))+R;0>n7uH5MfR?q~I25AUK zo*OiT)6QV+MPe1SOkv!$P&qSrK3Ess zLNYBfWuL6#Dnq^*`c8X<5vEdiw&-1Tmk{kZW7 z;h3}R9}ESc=v>f%PHP}NKa&1vkQOxf)gFRCDItIe3|OE%SP?DG=Vs5Y4y?cG`4Hdn z0MD}OQE||E{lEm#&mv}=GU_Rc;hZWtVs{Zo@nLRq;Gs3R+K{8{=4M#pDZ%HPv_sL^ zSmNwnIOM}ew|CGuOiC=e)AAUi+<7+S-n|KU4s_zn!?nNQh_I}Gb&7;V;ofxeZ-fZ} zTE@Xy;+tC3+FOdRP}racdz}eefg-wF75pgdzwQZaFB}!pA2@Lqi0$}p^Aygm#X0Bc zxz~$&YGx^b~rJ29FX9!f{lnM zKIzY$AZoTV00&OKy_-M-L%7CdXo>uqB&G)>0=v7$jgMrW&XEBa->}j+50jFun)UR0CYpCj_t!q&YNS`h(E^9 z=!jb%`8n{OQIMzmaDJ>?I7xET?J7xhQ@vjYN1_ZlY<)pu9oM}^tSB;N#)ra|v2xu| zrQ`E(lIwUj9nogIo)w?10e9HXE<)bHSZTto_Tdazg>I6-X8To=SkWFk9uy6Ev`^Zi zCE(Dn#lG!Uc$~%E_kwTTxY@@@~`A?TP z4}!iqf=tei96`eK367>Q_F-LL*iMZi)(D@+WR<$EoQhDLN^hG`gvxJ|D+t4O=I46m zAuGDj%y*rPry!pBEhps5R4B!^X*Z<6D@b9Vsg7VSqoY+$$K12@zN4JKO?Mn~Te8C49j?7| zC-47cbTmZgn5&rl&fP)pJK?FyUjI9E$LJN3^;yQ&J+;N;BiL+Ok~MHrQT&xkl+Y$AZ-peD3`{=Uiy{r* zrY111^G#QS<^T)`m_WkUZ{zceUu`Mnee5t^a66jW8F$1=HqpFMN_CU)yJM8 zOA&<;L43q(Sg6!c8{b9<+ew`!A-O0lr38$|9ZKw{^tYCxY@&;A7HV}($w20`_#=I` zHM_)CS}t!4>V{7E(uNj|^<&CWwwrC)kbPJJq;zj;^Jt9q#Tq)C)y?*gK_X0;B!nm_H0SLp?W%K9v5Z ziwtC8S*mDBv4_aJYUhRD8bDdBBWWOXC;TaXb?*uwz=v>EyM$Bga6cI0fZ7|+_a4g9 zM1c?d*l8}a)bV-BS2E7;kJdNNVgl1!(-ORAxZ<*!c{fL6@6G@UwTS|L3}aU!-u~y$ z-4BgAGls>QLRus723@S z4@z9y8kgK#Z4G?9tFnHi?#z^2fr3kFe{0z6Km=#SV#DH2k&$72#en+@RTL+ssN&|2 zh2YdN$@iZaAnIu*%7-^%4m9B|c;1b2?WO3k7*j=(ojMU$*nZrcbtK%*APyKnOG0zIl(%urzx$M zy@ggq5hJlo0&gBH#nTV(^lIojGamu4GeDx7ewy~nqP48rH zwVkXZ!}?RTquPF7U>Rzlg>CF|Q(pXxur2p8@csc^(aah~~lk*CUPLl`@zErz#;+55Dxheo&+0n5U)B1S&ddI$yq*{qmzZ)<5Nk37i+L z=s9=hAwPbHkmwr*b)%Ba>85`!9dYBQ!JbdEDmNe9ix;H2>a4Lo|=Q0^+o&t>y@wSVKu|0$JgG?TnOvJu| zlCM9_8&41|H>-iOpa~I`L8&o^`x!GLO?o@k%SJYbcKYcr2o+-SkaWsln*SnuU#zBKZq{oSOUZN~MO?uvLpJ5<9&Oj>06{1k(+C zp9XG);fkXIY)Y+A&`<_)!z^U}o*^gv6Yt^1!4W%6mw;+Kg}9 zAp7GQyZGH%qY;(h^-o`i*WQQMMA^Eqm1#)Q28;MxMuA*AS?&beB|iTssOWc2zx}td z5~K2K(6)NiHn39H-rVgz-E)b--Ch66Pb6+w)vx~in~Y@`m5N@ePnUo6=gL{5t+SmT zH^`YI1hdaS{C%Ha_Elv3YgbkFY&eUd%}0bJ?kPvpdp3*HAv29;Kkr9}n0xYr_hb|_ z*kBoV4teX%?gjgH#QQRMT=FPov$qU=1Ix}TZPWu9~A`sq8;j1 zEv!XsofFw>pVV|Z(|0LX_c#3%%HD!KIT~sl6j*fk!Bj7JX0m^AT_4rCjNO?#PzGx z?e_T>^!H7{Vn9{npzFpmrl31q*VgrFP%mAK@(de)-LWdyoZ0eY41C;Cbl>t!OXllS zL9457q0bbAd*x*ogG|0WUv@3j&^sLUY5!Hz-H8ea6n`d`ZN?YMxCVG(Tpu8=a8mhc z#`npz{I*)a*9X=(i^SsrV;+-xHZ2vxrK{pz1CEDV4$=P#ZEsL{R2&)ol8EZ)4o{Ub zeT=7L%YOCPzt6b2+8{Ga!?$he7utn2Lu$Z&IvQ=PP+)j3c;r~AY0}`Oi0W^Zik9-L z1>Oqg*9^9OYBDx{4wOBtFf2ApnUH9`eJI$!tr1jM;8hbGTi3ksqrI{{*!=-tp2#SG zhc|ig*R%pYJbNqi%DXGSBtCsjVW4gTbj3*^gz7e9=y%LMMmN&g61EE583ui71{;3= z64wrJH%wA9y;W&!sQlIL@y0JcdFFLS6a?q=ZM znTb@Mmu{U`ew{u0nOo#ifO1jR7O$0;^UW zy{VOTee-qa5&haPYG3&ZKE40)p!Dmxwv$Wjpw2?EV^w{AK|W)aP366GtEzI9r|Cm} z0cF|0PL@XMHhjjrzncGXP(VscL4A&WzDooPsz2%WtFT(>WNm&~iV0g7it%phD@dTc z^9b$x(#QDy(;gr3xEfPl4=tbD>5pDF##Be*?PKQ9Tm=OMPwHJx?mS3QoxIBMc=qj6 z(R0IJkJPs?4=GaKRv`MRT{GV4wynoaf3s<5FX(ba;2uRju{muO$u^v!3i+rrW!*WJ zZYywJdjHp&@7>&4Dv9rw&*OpV0qvq+5(36o=)@t$=*=hig(%ytsMdGZ^ac*il?i^@ zjR<`3V~=mg%se9YD4W{CA`QmqC&>GQ!>UzvQ~e?hgAc0iy)TnbliZa1>}v4grxeG6 z9DCb~7oFqi?=Q3K#b4dwP4qK$sp$TsCn?bxJ`iFVpu^oY74QF99g&>R>+U;IYHa0G znjE8IT*L6o+SS~?l&Scc=`weKtNq7j$U8A% zmj@*p9v;5`QK=h|#4vcNK{IRiJ#Sj;N#4u_r<&P{B6^!K_>XbXY*@9uAd6u%RD#S|p zJ5@**&fPfZG&ZHRq*?5h>RRHXraix$oxZtP^9%g5@u#--{^L-&Pb%*1#{2>mZE(qKTb}iAj$!ZB&YN z%JI_{cgIm4^`++B?eihZiq${_ld*|P3eXY;;26GrH$ivbs&LnFF@-Rew;ZudDRfW> z-k)0b=IjCF9yxzz>R`cBVgi@ltAbKwFarB6%X8gpSRV*o$0hvbpqoLHT;yj`hdt(A z>SrRdEmAcn^@ncbyiKS~sZ1|%hSyUeFFDXdu0Ev)(9~UmUG==ev^93_w13ZwV*WSm zO!x3d5Wm89$@jqU7*JoZA|{@Go8r>$B@#tG@Wx)6$-3InwNcjYI4j>#$}{_cwySDB zlqlonMvHvdRVWic18qOt#;!(%zlpiOKQBCL7_U4=<>})sNd*%0WsGQPJy?3RzhE{h z6|M{FKUd$!%jc75i4B~4X#Vf#EI?E+MdK-x-D!mDKF>14K9FjOA+#?3>}|wc#2PjE zEZz5Pru9?W%cJMZI*#nb2m7qcfCr1`xGFZm#`AZkn( zLq78IaElj!Qj$7_7twaeII6r{%{}_*``)Zi7bX6?r!tU%hz92)FQEW$&yJY-FyPc9 z_T`&QYk2D4&CX%rOyQnaP5<%Trwt)$T?Zvfpu`-}9%}Xd@JKIp=hTF2Wt&Rq?&i6xqH!N;rS$RSrHck8lS9 z6mw2j+Nq6jd!1Ly!Dj%9DM)CEu1`7m^lyYaw9`O(=Ti%V5f0tSSPniOed|u@Fns7; z4nE>_T#(x1litZVyPk8}kGo=oTTS8_`Ec56cexzAU)|kE`g7#CaJH)@y%VT-J5zSY zSCQ2S_d7Gf9n}8Xabav%imcx*ea>lpo>H{zj$I3z5pKrfojdFsSxMj@TIn6bY_%-e z9bHATZsQhY!EOEBjeCnM(mRT7JTWJf7&GY|sTOV{+|ZxP<%D&ID^mcU9d6L~I#pQ= zF7Y+zm-A-Nd9#8a!Gf(U+m~A2c~Vq7TkFIxw=K&i;=afm+)+|yKu5TGl`JE#EL{tw z#@7RN@Zzwr4Zte}k8I1PEpd4gEVkVQ6 zykq1xm^O&bq8aKRc%}Q+$7fC%uim~**Px+!{3YWvCCe4CyO zf&24EHx`Ra7~P*CSa@&xC$<)~E_Wr$N`=!guJM3xmFuh**q!C?R!{x0V22?|z|kjQ zP}$L^PzY)fT-E*_;RhjVBm7K=IapN7)HEU0aV*a=NI4_?@wQj!a~- zOl$s_56+)P9VB-g7s8j_%5nff6p*#*;PIAPz2v+>8z;7|#~TwwxhfDlC&(9#kwjF* z!nD-*4k}{Bgpy&R2lR+3mUb3UVh~`}gPBu+cyskSV(*ru4zH~J>Ptihi()DS;lV

-Cccy@Dy5#!qBX$$I3p} z!%MC@Bh=pmV$Xz@A~AG`Ke3@K&`9g^BxA>x4*}cVAam*>Y9n>;l zl!7GZ6#v0JGLpYV5yyXQfzDWyor+j=dt-@d|FLe^WoPW}ws9<4wV|D5D$vzs>^pf- z#TonNl@OV88%*Z>tWKW(EHsKB&+s{8N4NaRgLPz>RqJ%G^4-8Xm@V9kL*ta)gv$4B zpEFOLdA)gHgsl4Y4)YLEFIc`Ob(7rvq`Yyj66E;v`drcp`|?D|LZ(3Mn9kzcpqpgt z2(e28A8B7)=ZKaBXnU~lWncSz}gSfqq4nUePz3FLyxufcmU$ABZx z0Wl-Ic;DPNIzT5$4FEdicg7nts*?ozD$dFp(oAzO?u(H4Leo8~yj0K_W{V46cz_0P zg9k|I2f=vgAm*4DzYy!2%rOM;rf!{8lt}lpYu0`rO} z+sHwT9H@ce{5Kao{a}z#5d0NC6|^7^a^^NQ)iGKlZ(k@xH1(-CI0^$3_GNmtuAKyN z^q$Zo2luDw`5mn>-IV~9rbV6s;FSa%k5vxkFwP zeoYczJSV+?c7iWJ2wPMqdoT?9M);s};+7@Noyo+&qtrBVGTWw(5ToI}!+w3hO}tqyA_6T1+ZA9=5nH!a)wk2iGI7LV7*RKYalO z9CeGV^prK${SPJV@0R)iH2Q#AmMBZs4VNuQVqhimB${qrRuF)a0sDgaJ&b9DEC-XL z1|r#TVUDfmKGQnrO%FW(z#ZHZ`y-u1-RJon50nPfy5+=>wcsDdT&R1(WHA7G)dTv8 zX>@Q_KeXc_arAjQh1r4*=r7dK%z|EExFyqd0RSoT*M*;IkpuVA@k}>JPx?ry2kxD^ zEaZ$@^B^la8`CHV6TL$VIBScNz;_sHXqFw8G~9 zzJM`M_P;sxF}e#@>sg4$pBXIE94RdNLTL9SXshlN>fJdWSvF7Vv>$_}{^x_OgllAH zagoT*vOOrra~$}7h#m*7FOHNO^W5$hFo3~ zlO~g?kZQ#=GR*wW2fDkUaJGXp6EhOOH$qn5RPC*|CsGi$33%qpY zRk!Owe2cPy(crq7lF9(zv=}(6oVJ(x!5e}#nz`|w{0heXt0z)QqV+~Ed?;)Bp01d%n-6lZrWjT9e8u;PN9_CAfncZ!~#-3RQz zeud*BL{FK>&6aana^3o`S}wqR@gnKKZ6Oz2FPZ;{?H1_?E3SgfL~_?8eh@t!dlt4J z?s29_StfD_}$(@I19=JoN zrBb2rI0Ehl?9^O68vlkB_lK-sJ>UV+L-Z8n61GsEX)SinpEpk;dlNcmGXQ+$Op+#J z@>yk_HJKcXb*CU^WHdgFpXWFKAbIU=i*>gT^JC6o3$W9hhkry*FV_22KJ7x9K|o~4 zkhJ)$hZ=8(k_8U`3CAn2;$D*(w!Wo73*rb{WCPd0$#_+xZDcpuxt=+uhy2oCNSDY0 z;lTsY1q5-5%uO+Oi)74-^CV*+wiu2lB!bq*j|K_gR8tF0E3=3&xG|1&pXYd&oWno% zf7AEN{X1BH7{;Ht=YmpP#Tkb|=fiVOIsZhEiN8=eK?lb&MJ!$yeSh&4bOGe2PA11} zWWx44aWB*x`uJk>NeY?!^#dbZLJ0E|QBbB{)uaLbLXtc)9epvQMVQO6k^e_Q$Xb(!Z zBYK60i+HnF>OTHXFX5(mvWQyj%9rcZV=dmYXReH$B##`ND?KS4jbreIzHfv7IOcae z?9T~HH{SycRt18-FB%qv5UixbID467JMvacbJQygJ*7UZ4APJJqtE%Gp+oDQ&oP&? zmw-|-cqBbj?8FxE!-{6Kp-2FW18YeOvU}e$8svyQmEq<2lx^yyl)Xa7^~MzwZQV)4 z<=|xL&!q9jHGnRvlc{z$X|+7^EZO|L8<1)k00MN}O(u#b3#jFj<+bCs2%ypZm!eQ# zXeXieCqX|NL$;X@>b62L%AGA$Y7qy;_vm6b>i#gm&F6=q5b=B zFNfqyYk){5Zb3gTf$KTP&Y*k(9qTUT%>0;VN_H^FZm24$=dA`FDxoluW#$D>=C91OsFB0Ew z%<>ZB8UHfm>aOkzQD`xxo1nC4`kf%w+P(t0wp-u@WH|Hn0y3S|aoH%sY0loXg2HjG zt)O=}i`KL61nx!7-krF#9S!A0b}y@*PTJkyD_yL+?aN&}yEnan^k*4fKvp4SFr4qG zo?rJRz+A9^l}k;)(pTXXrs{Jvs+${jm1l?EI%5iyGzykiJDAz7u~O4jADTc@!T4gm z)LyMqmyAu)O%9q+UT=%^&dZ!BN^+P73x5_0gW1wptqCpZjsNn?oMI?`yBGO$TD4KY>y# z8&lUG19q4Rx4&NZP>6h0EFCpLD;N7 z>#FprtrlU+QJcETTFB#h{AT~g*-B(sgj9sJiXw19SFJd#D}sOTHDorlRA^}=nIh$o zGGqU!TPRFJ7{4aK0tg8gi>FSxj&h6T;pO8ypWeUSAEm1-wz&M(D==u*qykDep6$iKR~cFJ!+p&CK+gUc(r;XH+ud=Q$T<0*J=3L)8Nsf8G! zn3haP_FGZ}ZmKTOBC#o`O+W$b&a@|8KiEzgrHX&MS1A@6!;c;rJ7iQvnb)U<3Dozx_iFPV&ngHaLA`bz5M(ntw{2|SN(DIjWNB_ zYl#U@+dIn3xEJ0n=7t<<)UmuaHhx_@I`W8n6(mK!q0c3|`d(h{tsbnAn|AIcjOQBF z@RtueA3wfSs$ZO2==sehAEiBQKuyst|BpiNIO>sgNkV4Jbb^2;g`YaZ`^>1qhn(TJ zUhpP1%FEpg7oWDycrP;>u60*d=l1g&!^Aszh|NJGyGP^JNHfof`nHFO-+r=13p2<) zx2&+$- zckTX;j8CFIqtgK99Y5G$bHQCeqy1%NWh0?6lMm|lxA>8pYa;e=x(1^n0jhOwd zEw`HZlG7nMai0;JmsxZt)%R$mK2;rOWy{;VFO=w$XcDZGxc>2GwK;NAZuma1q`u~J z4F>w8==oz8$ZH#(b-JRDpO+X7 zE5aV0zl8%#=RSWB-b2wzIgyE$1s4Xn9jeo74SGa{RV0(o-Q5(YKcE{tQXlvvVt&MU zzomT7wt7Z6?T3XS*yHdwc9-skU*%}{nj2l%E0ao7+jWl@uch7MZ0jnUYkKTCYXdaw8F`a-Nvg{y8*k#o=B2bR^GSd+Xub5B8ab~Rc5@(LMMYHeQh0{bnrELY)u z`w|LUS5I>riBVtMeLs_CH~;aW$ysa&SJum{%laPwDs4SuLj&S6`q|ws>Gnw!zIL z;h%!PPxHIq)0=P1%eh)_Z2l~Kwfy{}EKZK1<;KLHauY=_+3^o9%x=n5Dis?S4EY>? zq^2sgTNJ_Zm!-tMfy!YDQHM`od>Eemk-AoFWRrf(Wh$^f*r7w|d)1q``fC{bT}jH* z-N}L2qs*c7h$>!d$w0~ZfBz^WA^h6qY62<*@g_K|lPvIOPJRj%F4ISnF za6ZaS+sRpVS>Y_3HX-!4E@UWw0{&@cZ?;N^-auAdkaQ7de&w? z&p8)W+LaznzD|oSl-m>kfNL~W$qB?El9<1MPiy4AJ}Au%kusYbFGkfo`Y=~)){~I4 z^8LO+Q3E3G5j}2*j@>BX=cC6>+MoG^EjpO-tesowHlJ)bsxwpOSqG-?Eq)c2w6eEh z`{8fFQ5LaPes3ryOGiet^2*N|x*f0B<>~;hk{|V!pYTGMV z7=Db;?Xbv-I(iwbK$A^*ocJnm14Mva~}*B;1Qa1YEp z@OTAN_eE;q!v8*7RQP<1JQwMf+K?@;BTy zrbY^#Gc7&>V#U}T9q;ri&n!P*-B%g*(=BhD@-`Di^u>n^>!e?2ZS;uW_2s;)9$3rJ zkoNAIT}4sV^QPzX&!l0KEg#qtd~aL2nHr&tYsPYpz3UMF?#2DW(_F2!`9oXxEN;}( z*HZoX!4I=aV{(w%~lw-IIG*{OSfMHD z2e)e3(lp}5ESl_n^v|oShjQa*tK~h!?S{f$8#83S_K-ZNvoFY$noV?NkMDHy9|uvw z6y0WVFA-E;W~o(mcZYi-*yhbYxaNvI$o^DUqu{ZVh%Q7c+f0P7HYmmta>#$UpEF_g zErP(Oc5LUAKTcufd71ohR+#J^H-YQ{P!p>sS?O(I6OSvIp4K^rTJ1Bn-ko>2L?XFf?pV+z%-Owr zBel|;?L~4lY~3k?pH6~8(R=Vi@|%8sr|_u5bvLQFhHL}@2)cfzKAVoW<_zMJqQJ6r zi7PUujseia|Ie4PsobcP+Dc=}GxG5Ku1&y4Hl-F*48ZU4V~L7vTh zLWU9lXy|yyk_x<-SV{C|?>}WenE@*;9<7`P#UK71v5|2@uX^2Nqzi~FY~?Dd2r|+4 zzS@=N{(v{(Oe1XjpfPB!ITF#@1y4!C_IX}&s`x*AU1eMo-uD(kFbI)uMG=&ekQ@v| zzKE2HfJ#Y&bdH`#s)R~Omy~ojqeqW!7-PVI0i(CE`uXDj`hP#?-M#0&y61DxJ@-7% zW9%L~RT;@|;H~2v;Qcn_hQZ4atg^fxqnRS7`{Ob`o3m%&@^SF_m^gR&{Cq&v z45)w>D)Mh{2RqHk?Oer5_mi|YmS1SSfxG7o+(j6d8LW6O?d4uS^LlpraF})^9|>X8zw@6rZ0%U*;5X$NY7VlKEp` zD)HPitrU6cGmFmnDS7Uj-$Wz#$iZkSV*PSW{Kw@|;-9vzfy-xG&)(9QSq|MSm1Ntx zW`7y=d}4lL)A?9)s)_x4Obg$DxD>=!6;-+vn%J^cR`Hzo=e2hY;NQ&_yJeS(IX^;P z`sH;FmDr{}r5MeIfq@9&A?J7%+AyJB!~d*hPoDvvlh(oP{pOzXE$&A@b``qY{4_^D|Cr?#J}A z$;>d%6wD@5D|%lac2%}`T_m`6QL9mbEU8+;f74iGN)vlJQo7$_{`$F`*fYK|>n-s! zi>r`So<5De2gRMp$oadPbEWy<)Y+w#BqLM9Y@tp}#Nqu(0bmBes;3bMYqma>w9h#m z&GK|z989#jqq2{jrOY;aZ#F-Cd>Jdx-y?jMWV?58t4+vJW4q4Q$T6`UOl4Z+k5Wv9TFkk1-owxN^^n5|g76XX_R&kiqp(06MPsIhoYj0sc+ielF)CF12uu@N z!Y@qnI-3eU(z4*d%{IvgmSLmh zyhAnV9UfYah{cabq*u z6fPJ8<9w=W@D_<1sw}t-mw3?z{9M7RiLWiDWZjRqxSX-S=k1SYF~9Wj!$ZE{SdWDj zg6`>>Bkj`N{T}OJm6N8ky+o9k?uA6=Y*_rl8*HjD3kZ^I5KRIrNuANDzz%#?&C8zm z9|On-bUR2q6$a{Wl>m3rb)K01!PVL!XF#B_z!-~BA7H>A_NRnYZ+Z$=x0K1ws zliX#JX|8P;;NV;ZG=j;Go&r&k!+wi-{tYffravLo`zVH$5)n@zM*zCn(atxEWmr#l zUS8DZ9@7~$_<|0rP%U$XxI;gCzb-;N_0x#dH8P#*pYI?3D<0!+uJJK)mi&X9(oRfb zz=#aTspO2_l2s@2`(|yzm5ozMDV&nWmQ;`mk!3&g*SB{%d)Rh7`|+0iqDU8cqF?Xn znTm9_r5ayV9wQ_R3aJ zVcok(&Lx;YK#yPkC&IjA8$D^3y1me`?YgT;&dWv?lBq#5j4?;r18HDfVT`UkoTS!C z;t|yXMz^w4VXp7pk(0|7Jc~Qa$s5?+Tk9RlKh!>Pe`cN`{DMRmJ*?yu{y~+6lqe-G zJqx!Y8$ySrrC*cuP7+MOi6rC`_joSRy}oB60;hSIqv0pg9K&P0CGrj+b;Z3HGvVQr z=@#3MLq-WB%{pBQe31bk#$>dqb)IL09=_X6i8&TpN!kn(GRS_M!xV*zo(=xB1IxZk z!mo02jgy?DGsTg%xIpL&uroS0+$M?UUXamVR~*+Xi=f+WSHRH}jP6f2%sq)K#HVD; z^QL*`DjpRNBnJ*mcHC{`Ii40~Six~EDr>i@Xk1*u@Ud73{0;C-DsOt8L8OYR2z(GR z_9&+#9441=T_q@Mu1;t0;AeVc2x1{QYUJrEO`xFgTYw9DCoQ43vytA|80ci?So zKdb=%D}s+l+qSNSIr#_xs>XfjUdpgFxV3RjTTv7BH4hI4R|!Ew9aJq%*WKhi>V&Y| zn-(gx=-J-WtEq8`wGcJFt&iw1&$pd-h`=xu=BpCJp>gW3#K4ahYJ=tBI1amu(0X64 zljQrSS5K>5D!5pt?w`D)8fC^`J9Ocy)C;4|41pl~nPpW4uDz zMW{q$(BvN~=Q>xTApNr7@hwF9cZ50sm}82LknTQO}D_@Y>dn-cd0 zCI33uA$p_jdT-9(uNZ2a%Y*M2Cmi543!L<%(`LQNN2w3%BeedRqV+5j{?$|UGtno3 zp77If(>pcBdp$`%)sr#A>8Y-z{os?3sB^u$)cCu~FIkEV5O}?BzhwA(-k2X|KDtac z>B0DE;`2#u0bv~=?I08DmFxID^^fj9>amO;?}6lp8}e5yBUZlN1?49NDQcw5j!SOn zNc1WAvylGKJ8_b(M4^njb*@_c+En?92)G)mg9uPOyCJXJN9h*Od1!4udD|pkVMU9r z2~@vi`GFgh_v?dP>#fV5g?CdK5j=Eqm+CkglXaK%6y?*lIsG3>Nf2nNnfQLyRYKXH z5N3*XyWmnXFf3Ea%|o&AnWamaKly4DR)YT4*}2k%-C#}MnN{Y8nX0C2nVldF5F zbCx6i+>ZuWk7bKEnRyLmzhsjppayPj^(OUt0h}iD_JgWXgBnd=JtH)Rm=EJUXSSJ6 zn?8?L-4mz#>UnjYwkx#Z7gCLU@yL^b(Ywg;7xb(q++gv z&9W90euhy&Z((>xl?7ETGDVhQuD|^XxoX`X6Gbiwx2g?VMKp$2qrFghnbqgqDF`91 zxBPtz@pXK7O;9#kz6{F0LCq#GLpaN@&Sbv$N?&R z8`Gx>&B|(wOD8(!=305Mpcj0|>tF>E*N%ae=+pZ%DIf@kr8Mh^QPcoDjk9y|Xy5t# z{hbJ*MGWHwQzGe@OInxudEhhdhYHCDwUSR~Al$x;!?~(zUnn0Y2l_=ULz9D1*SnRk zlH=A;YUCgPk?ZbNKf5<9PSrs_ic0! zj&`{kQXJhwIe#uj+0AQ3uKEO;+?ysSmY0#!`Tr(ZYNn-5+oktgbHb-~LM6LgTF3oZk)|VR-cf7b}L;GgQ_b{RsAPB zv%jW4XTBNb`O5gS*e(bpK9_*9$-W&Rr``^`(s3$PHLh12TCNI>3U;+|x6Dbl-m@8m3ehjL^09cqvzGDkAx|z2wO?P&=Rah2-4U^CK2ME=%eE@cLP~;mD%z{E(+aN|LQ%v@8FYQ38JdSgt+;fU*YA@va0r9EcKv~^?15~jB z9sv0nh_YTh!)ZzT6Rn|gRJk;!H;SV4RS>!q}m%BUW)JXIpD_Xdp&xh=dwN{Pw15-aYmljz&T2_|!s zA-=g@=@T_|&z6EX_Zy%wegP%m5zdCgGzl_17TF!=B+VbsaUfGq$~eMHPM35F>_ND5 z%ya(pOxc7yTi_GxdGaR2{oYDd(UaID8w6;=eay+Ld_`m>QFHYg`Sb;aRD5Iz6w;~) z4`s2ez0$jyR3wRxp4vM7pcibG^pHUFB^4~ynWGL#qQmzZkzIe!OVUTF55S+DA+Mel z2yCU$;(LkL9E#D(;hlppDBhyUEGQhox^>s;1j zhx|zSdepWkL=c=WintUE*f8IJam??nIAe-ZC;3Xu*z~{35f3L1PDzx&mB`9Q+Boya zNiuK&L<{vw)?L(9JZA~YI*;V-!|N^7`5)%iT*A#+-wl-wf3dQgDbWtHu6Uptrb_>9 z=YCXRL0wKTM-a~+Q*YqbNDjZUG4bIUekqTyo#znsWVIXkga2zNvw(Y85XzC6a(_lO zt%S#V>d%T+sdR{8^y6iWg|6%J;71A~{OxYen?B6dwPZA-4{Es4&E&5OIy)TR#u15= z%p>XyNKlb;<5CM}yf>*JfIEWm*5SONl4R zm-{5;(7N&S^g+zEE{q>yVe_-{6Z(^BkI6aS+(vuOc18LjeYf$7C7 zLZd*@a3`tdNZF9jnI3qQ_j^Rmbg!9xKTDVN)ji?hHteRl>J>Y=b8gUG6t~b5VWSjD z$&`6OY+KzrsMb*1pBlv)DDhn~fCU}5$hnr)A}!%QoC`|*x~D)%5J}DWTLs@Vd!Dbv zAw^|ZL^CZul#~4!{p0OfxId=j4pcf|J(Vb<;glNn&xk><;o5>#+ZySp5m_L=Z-1{l znd=_;#vqUiFMrQ+5R-n3*zyZ3t9g>p1@JLR}Na1Eopq=np zPLmZmSY9*g^_;Lq`1ugWqp1*sZ@Ms|)71EPN2F%nKQNAGP5m*HRjN|8&6%obx|dUa z+0ZuQRmQh1frEqRAsoe}r|#3*kRKtpT>&wT?(<14`ZGaV-!9{Aml_zQD*5-|G`K;k zLNrgq7#9M};d?#c{RQo_7UfX1MaeQ&<)29SCFm26;k658ndF1~@fC<^N*!s!op^;L zV}{>I)wrh`ua=Xt0_1r#ym93{yUa=$cXbUV0JOgT=;j$IJ*Z!XIn^XzpprFI_5F=M z4%%6+xOQ=&w@thep$?B`Bvb!H>^+u@Y5*9Xkm&(Z!k`ieCy4PJ9tWdbwR-X9&ck63 zemX=fe6P}j?&X^ul9pIRz>iC^jo@Ibxk75Irc7$9P_V=~m@8=JYTQ-7}Zo=u2K@CMD72P@Z^Zx`fBs=uX4x}s{O^}5faq~tTl+Gha& zZ35O(ui`KN$p?56fjtC@ERu z#9<6t&LIXNN*ViPIg6^e&t>}2Dkk3qH#%rX?}fQO#`=eYZ4J#d0&BilxRm|eej!&W z@bJg{`}u{m{Zo}pgZXgR2ag!W3Kmr9-jPa6c*ulTsn>({_ZdQIg45Mu;ET6kN)w@U zC44gVR`27yZ5$fem$~!A+a@SF6YD}NM!rHFDio^YeyvG$-Y7={4e7i8OHeO2Ie)cQ-(vy#n9@X}fyV`<*?rFvkFHzT9+(p~#*$qGWzXcB9((h%vMTK~WUPWO7+*fm4|44;7 zCI?Tvr`j2{twLW@61B}@v)9VG<<_s7cW{%hWwvsKX@5C+rD=TepI}K+csbusXgPo) z1c+9;%e1Ck50zdpY>GsAE_iFin#ogp7sGS;Wi9ms71q*iOV@5RUa>13#8%HINa-yT z+PnSyG1MDrI-e!z*0bAb18av+ww;X@v%w;kXlD7D5&U&*> zZF4Hdjd6O+sUPjf!CT-X^`C#`{59Yti$$s@gRTiw%5_@oU5344B;_Cy{b1B+WjW_6 zaI*dPiJmosS+GUr4S#Gm89=9+KCf2)-AZhv+Bn@(n@yVk%1YOTEeGktB&jI7sJ=I# zS@*4qU*3hzr{2{w7~Zn0 zpW2{Tt}5n#s<-e{8y6s6g}pVp+SJ9))2;s`0pdfGwkG_=GFun>;P13eFx=s%i{cX$WF((Bcw@Bc>>)VZ<_XWX(=rtflz#alXxQ>& zYz(T>q5L-%_U2K}Rf7D4)#1&Ud4}6n${pR4?H0szO&jmw(#e7>yT24Cz0UPzv6Hgm zTwNYQ$bK=_b9G>?HH5tKZ7(ES^CUQ3Q;vKC01DS_9w->g>*QCAw5izrHE^kTHkJ$B zOU(0Cz*Gm@q{uNEf0GXk3`f^_@P1s)wyWsP6q~CEYb|k(_1=?eY)OD#+1RA-RBqk_ z>RZb6&2S&SijJxI%o!{Z-+wojx|n9d*x19;gsVSdgkP(2!8vO-uLxI**kiweAo`K zC)w4Oed~@Kk4^AXl9gml&pMD?Hw(US=m%ebG6Xj1Kb=V05F~9vWeE3y34y<1XFuHI zXnWJ0oOI;CyaV2kW6LJmss$3N!!x=) zEcJ8OLo=SVW*;2VPpK`hPQ-t7{g-^t2Zfs--SG1eQnga`9T!}baA-qchXr*P%Yur$ zO@8>c#d!C~Xs)n=C?|)dhZ+k1fq#)& zvGfNm7O)xU`m|@`PJ6k627%zck*?csbp4!iv2ylfx=F+^0eD%vW;r@@;wo`It(#3r zyR;yD)vZnC7L%DE-$MzT<-D0mc*kKNoq!6^3j`R#DSAVH6mzo*^ak6H_!m^}wn;DZ zWJbWakMwZ5r?h43c-V1@E8Vc+hoWV+#T$pHF4#uqmC$gR086^l|3)5dw0;Fic}pkL zdb;&@o;|>&CdELQ3ZLVQW0z%ynu_!)>DSwRR9?1p?)_KH6zuGQM%j8x){#~+xjM8e z?fC-k`}hc<`#wASew(`exnUi5yRI3&7y0gP)K+n4nlUo_{JHZI&@$<(a|{(RthBP` ze#O1wk7j!fzi$(DA47Ep-REz1Yxf|nUjHMbaH{9Gyg+6#Yd}uz43bOMARbXClf~tVdaCjx zZ>&nU;UM@gSS-Wi1vn~z>9?-JDDzW0M`y#LR{3zu(7wl|zJLj_OLU<=(ow~Q0JPl+ znjTZbexTjv5|QX5z|r*!Y__W@d8-10Zw-!@BD~jYbsxhs)d{iKW`hiAk;-7@@QvXg z%o{J6IX>BFb_VfR_1+wae09M+azOfbzOHUjfhEQjp+EN<5dN@=fw0O6TDI@<{#UF& zf3+`UvotAbW;r4>US( z`4O`OCW6gU6S6w38#B_}_iFGr8%wRY{}`RW|(q(P~Y4jE|cc>Jz4Fn|^x?(pGjo8U(1GgU0& z?@{}!FBCb2JcN z{55#ZTm!A`{pAjQS~Xvxo0ZbGe;LTFQN$!iIv{-Y?%YC&h%;@;zOZGUgEs(YTsQTx z$-m0=;1&M|`!}?Yqup=Fz3)(`8)+6YhosIu)mdTQ`*u#R{RF)H$k!rRm~MOBC6~oF zZ(kOg?L2)>Fm5LIkcr$g0V-&srhm3{U^pf6_p|oz)U~R=^)ck!;CRuq78Bl3?887a z58c00lU2ok4b)cQ8uwtyyPQY_uk6*h8;)bI=zQd6Z+g;>b*JqDAPXjiUVvkfgrSNw zAIbZ$O8SU*eq*x}@}5;xo4iBl4c0@rZ?FkH#*N;_%&s*wI~pW?h&q|vm6bFYdqZ?= z8%h1wP5D>Cs)NB`ehwjfUg=XiPvuetDoTWng*8YChwp@lL3262a;z1QypuMd9o;sg zr|~`q**4#lSO@YybStyFF;jPr!QcLk#ixbH}-L^#BWOwaxk-`qLG*SWf??!(vs zT1rmdj(cOd@C-FrhZ_9a6O)f-s!wM6i;*gx)A5Pn)>Hy?mkD&Fj2_jAwJ4js_Z3$c z0sNqUp;5FH6XZWj3d%KCyt?Y4yT){WR28ID))sO)N-i_D)qBSE<_bkk2_ovNwrC}* zYx(`0>CYrzxn;#~(E=PbT!6qkeDLzZXw2;5dQu3z-3a4H{@Vi_E&+DjyYFI0xX`}> zr#JY|EO`24>S8xm<$|FH2EQqUTS-cd-^mS58*bm4Po3TCM3Kk4DO7tMc09KjE_6&* zgN6n^mHmpqjQxuohT3O?7`sl z-yH4@aw1HKEX}eQJF`7o5d$_Ex6-MM7 z-N49$Lw82K-gYY=Gye4CW@_lZ-URc>W8F!p>wr(c<@JNgFP`tIePMql{|R4DDFA-` zM?$+A)6Qv-isoKsQTeP?rjLt=tI5!jrYauZp1S3q22Nf?#hGlSw?LiA#OrOwJv9cIkMPkmlb6#9W?WapgIF?sPDlksX! zQS%3N((TyAugbc)EJu)P$y(8l$}wLNlLB4qb~c%{gEfoQIi9|N2Zt23jw#P|3iKyM zYgLf^cp%|9k*3SwF0ljP_8a^-eS^U|lz&&!{*rDgACr@OLhfK%E|Xr~MaKa0+$LE! z0t~s2djf!fjE_j4DFhuc^K%VgNsvew>qUdpJE7vTOTlAu!z}ai@9E@uSWn(d4J(2H zRYIZ+WaRDe1G+ZSxQ3TGJz!k#;99HLQ8+mwgzpn}Zl{iomIB9bzY6n(K60C{bo5JM ze|4v$J7B+{?p@>FgF=LVSk2)BT+4uM4A-&wYe&$7Wi>DEet~C)L;CPa*~bZb_bo++ zixol$fKB)L0Fj5-4`l@RGmr9-!1w)uim0y&SoEt9jY(ZQ-`BzC44g3H&E|(cP+e3< zo>KLY0HFB_LqXjx)$Q-xj;^AsHhf~^+q8~^4Av!hS2o4wA99y&yQM55i#@yk@=5XB z3iDZ(TC3#K#5JahYMf^X?&h8gHJ@x{^<}tVPWs=_Z^&1{)3q0FzLm}vsA4aX3z&JkY8)T@r4zlz`SWa?*62ym28`PS}IUA6htWwpxK6NY-N*V%g)E|P-rMz0Ut z+%k*%YD+w09a>nqw+4?r(Yr>F=sFiQa_#ksy~s^CpCr{=mcI_TUA@(sGB;4i7C_cG zP<;f&e~i4mc+LwxZE!?VM&6n!9<|RGG#_Ew0IZZO0YW6a>T>AivB0RxA3D>loGXCu z*@M`GNL=n;S|s5AXP_>pY3$E*|3bu3$~H`$&k4>0%mLLDW|p}P1lryt0=Bbevtc`t7G`Z zcNdV1l}knart4Xv4H|WxVjPjD_A>)IZuM5}?uS{3>%e!c`(Yz)(yQ2<{Pq)xkL8-^Bkywi-sdg_SR2FX9_%qGL zyE>o7J<-YwzK5+7z_K85&Y`xDTLAZn6Qk7QU`%NR(vNaXQS39Ty4WzIgTu!~wgZ_O z=lRQT{n;f`T~5oMzjSL0sC&vQ>Yw_aZvNc@98(=-LmSJcPyBdBSxlcRopT$b3z!k( z$B+ccdWJylLYXjD5vWYW1NlYcFBwFw%nYJ-Y{vcsVh(QZ)$X8zSuG6e+7A906y8OP zp*3y46@09ABxH=xG5(W{k^i{1WVIHLr4`r?n9evj(EUrU+zK2IBmUx6X?iL1A-jz3 zjZ@{JfeOGwWDyOv~;s(0gS{>FJ3}+&J6w&?Q@D5`}r|3+MZ=O9w_C(o&21 zspmp!--HU)X24KrG%jBI)GE3vpzx6{NaWteK8^K~fVt1WXAIR>LdL_XEv}0&2eW@= z8qKVB$p;O?K?mxX7 zbA{-snXbFv1@IMbl9qt?E?zON-T}m;G=fSGwfV!bX0jY;aEp+C(VJs;J;9bx8)6^_ zCPytw@rpB!`gW5I;S}&eLP}@#XX$Fr3!{oBjqe|>c>qP#T~;_s@|oQKdrz| zMee39K+v@O7&DH_#W`(MfB+{L&#-GkoE_qgp|mi&rbzl@%DxF z#6#K2T~1}9aO8FZn#oyVpx<+GOlt3tb*$+JaB+NV+0X}EA4%~3sK<<;k3XY|h^DfrUn$57 ze)s}`#fSRflxo&am<&5~@MevHIlUlu7^FE^4yqsW=1fIqJS`*>24Ngt=Km)JUDog@ zxac}8k9o_$qvfH-)ACaNsEpIQ+aOttEZ2YS*PVSGsEIP$Y<4!pf&;GhI7YbTkYMGm z%Yv%lay_Zr<&Wa;mwq;Y=dQl638H6;QZ^x}4vH|mOtzi(w45?LYx}T}YPG^)`mG0B zG8JL|H2^Y?aGqI;1Q&(gf8Mqu(5btnykp=Wp3|~Z?ulnP;~%CeNr1-g40{87F=z7wbPdMJ29N6w9ouM> zO*evTEn92U+JAqv=X|B0(<9h}uUAIs03)g{yqt|7F2eq!+=%HuG6f4SrIGyNMboV) zpvLqSU(5#F8oSjzQi1JYU(PB(1+4-)haDINI^7k2p~q3J?g%XS zZq%3)A1QR^uWf#r_CHdL!AT1NH(|r9D_e5oJagdvBO@ue6M)fCKy=$t4)La}>mnuG ztVrv;_NGV%zL_jPfPD}xDh3@J#dh1C2rba{;c=?dP+kEn>UbZDT;|A;bFVg#u0S;* zST-V`ZF&P>3CI9L>9M>owzczs#*S<=RFv&TNQm?*Oij`KfGrCOkZ)kZ^{uV*xKj%R zh~kEyy{mIO7Wf1@bv(+m#=3rDZ*E^ho_!A39;^r%%nEbw=a9kWT&(b6FCLz?U zm(>2SUVB@C$GdrGQ=po0)pE+(^lx1Ry7^bbIkh#xmc-|HAMI-U_rgszMBsUlya0Al zy|HHFNu2OETI`&P>#&sfhc%~g%@vbZ$L{^vpw{c;{}f;^2xXz8HsdNwIIX7QBcdzq zDk5ZZkDNqUrUn;;9=Sc|;W=&%3or+~fWe=iTqYyaC=Y&0-iFuH5ar0q4Ev?rOC@1) zOVa=7SS5HDYJ-7c+RJHm6O zna>-^!FLu>-rBOpum=dPHzOda9YTB&pMxmxt8E&ySPHSu{vgv~c55;~Qyg;Se+T8c z_K@$-(UP2~Huk5H*sW|56LP`s@x19D5v>k7H|EopdtW_XB*>YV11FmKa`|T)XHIH9I@x=ou^^tL8(Z>|B(8k_SSrg(j+(qrUU0 z#v)GV@3=ikz#C~_hRQgk^*X%h32|!uA!b1Q(4t;4^=ohl83@DMB!32D z)}AjJhNiv<8c_MVSq2iGTEM*g(^4bzlSsLEUJI?db8c1)=c}22p_NmSb3hk$7KQiZ z!R?#&qKJCQt(6z*6gg*jmH!k%IqOBpLV8L6u>>=ueOL-p^qh1^{Pa2GBgLAOg+4;8 zYTn0aWTb`a<@+W4x|oAJ0Y4oDYM5sZ9`7R=Ey0ydnP{tJf#c3LiJxUd!kSu^B0fpZO=LA0d@0Jz;`bOz(>X1`vNcB8L^ zen0R!Wns*Twu$-b!qTEs+Mz*ov2Z${pOGQP#hvU;SWMs4;0u*Uv0rfA?@=0NRcf8m zBXxW~e`9%Y)L$DLp2j|+BW^5^O}Y^fT2C+Gd$br_*A9;rjG)fud;@<`fy&8=0R592mw<;%r2Kg_ryX1p>OpVIME7}b# zL%M>!#c&X^@Wv&`yiA9$6B@7v$jOBT#46wX4AVU(Nj3cqsmgc%Wf3Ji?aqhoA1cj4?V7|e_M_O9SAJ6~!pJWSl+ZjS7oY*-i{Y@;!~nWV4131g}~ zNc9dfb=Xw`UO7Kj+5RoN@l+)2aP=#u*>isl7&aFk3g8b})W3W{^p2f5kslr1$iynZ z``ZHl9XpLLq5Og7&EV3%raUtL$`)^b<;gU~g+5)=J26ksg=+r>hUmX;L^l0^BSS$O zQnISLB(hq~iOSku7R5gO`<;A@-MptzPdLl^uJj}GpOg_ZjxAPvXXz*x@armSIrV;S_RmZ@1&ZpZ>#=wUIA^PE5#dY?SW5Y6W^zI<#8*J|NPf6*9^WuH2g)nDQv_WYeG1dc8w!poM^Wt z^AYL`uzQ&X`~`UD-^^ni3$b(E;OJp@&PUf3xju7Tkm!f@bL-6P(|St=siF%4J#e`n zBa>^c$`6GjHb8`%RlZ{7a#I-D@|gQ=0nsF=jpt-z3CT@E$2o7V66+NWFzvVh{BC_@EOO_?$E%h&i$JmTj}5O6fS9?> z&Em1tIO3KrpkXp&neQep#B*lc*Yg4LRmv=n!MQgw9rQStjyIfOmTpln-yZ*@v9_%v zJ-cjKDHz=U_|}gqK3sN{!{`tOr4Te+xPW>zfkHpeNqlZuOp{&>eneAX=1Fe@i9UJv zw#g62Xsvv)oyEAGU?*B+N^7I+`UJy7QAPZw@~uw|VLB192|+BX36Dz#nJNau`|h+8 z1e2Vv4*JIZKzoRhqOM-5+k9hO=KPO~4t+%Q;ppBVELM61P~umN^`m-C25n|JM?j+2 zU~kV4Y`Lqdn)ULU`ttW59{?VXA%eI(Osj;KgMZp&a|_2Im#TwH_hJfF zdiE;R!Sb*h?zO!pJY_jKx#Xp8$PM1QJkprnHtFvOA}Gl>*+g4OUMQYfNnof(XsT*+ zfgRyAbg4Mpuwwr&vz*6a(SGo`-5G(*aNIbOe~nsf)9+9lDwRfW<5j_#sQ3(+NL?7e zo%LUR)sod>)KcDJQ6KXnA+MtUHVZ3BzvcUsuox~w36<1GR~MIQlg_2%sdUoC+sBcq zBf#@Lut!UkFHkmi0D;s6+qsOupAWQ<#CE*BE!`&uTv1GriD>?9UzMlq&`*Ha*;(syX`5Y; zxd(r?zBPrjmXKokthGHS#71;`b&TuamW{P91e<1T>4`J04P~*$%eQ`}b-iTHhNGEgNr(KE%7iEzseME7SyGem&(R%?9Gbv=0&3Jf_u5w3RebABJY!6tQP|ci zcjr6ZBIw(yiMXf6NF%o2Jt1OGKiSBudUQfUMA)&MjeOBdE#0WVkFis^0KOwGwbUEP zU)Kl>rVFS_Zg*z9djzne9%r03MIGJhNw&_lJNgS4=P|F!3<|D{JpE4&*eNs7-1DmG zY1DT4>LCMnt&=XR25hyYEN%t0irRmzdTb|R83FngQITrfU);1mn>J6%op3*iY;BESRyyO^c`Wq7gpV_oP_P;ew&n+(w~sIL1K->7(5Z4#3SA zXw~R_MyDmJg!iRk;>St}-_xRnqP)BvCF2e@t}(S2d<9%cC)DXjuF1={P>*c*@RyDv zX*P~c6QwNH4Q~c-#28Q=<74r}FFsNt-<4nSmYqsTdOZFr23H51?x560$jXLR-@l%t7WjIJV_vp+SDa_wK*EZ z9b}fXY#j5RF0B6nxOY4f|5%Ooa&h3VQXb0L;JY&QHQe`EFu$ED#qY%3Vf5v#m}5d$ zb1#i2wl@~sJrwZB(*ahn8cIVviXeVz53H>SU`5>07pmSbED-D+@r z>FPO)92-i!T;EfW0i1o8wDIy0jEet>Yya`(A+2~FMpsYH-7e^xP<_5~<8Ps|I`+XY zUF$6B^cQB}?MUZyNG3Pn-jf7q{$gH?_h=5UKgSWjQcl~P*IL%M?rMEF9s0bZ+6_*P zZep@7SHEqus=__zTVs-ihzS)??|Xzk@HhBR&!LSn*NqiB4i(0vvBo4P_x;*`Hs0$B zdJg9qUia?9@&-%Z^v_0i3}~Sy{cM&4rt`LxoFplkNQ}20HM~ouP5oT?tmB|ylmqJj z`kB9b!>Q$s%WUVWhmaiW8rc-cS{|kH%0MIJA2a-;=#-$BY^Wb41ZbX%qjX4yvr$hZ zzC`*5!2_ySz|-LE5iAQ)y-kT3>zv*q>|2BN!qW86lUSjm|@P8Sl5hrg%pv~;q zH}~se?B|v0p?|wXy5M_49}skv;v@0eVldq)G31rHvz~>>GUt3)c)1XtGY=b4)8#E4JeazRz_ExngI@IAE3`E{6keh^d~%5MYu0c`4# zN%1Zn6D>Ue9?baFBLVRsPfNqH!?#71sjLX-M97A_@3E|J6 z#g*o6yUL?Pwue^3e5LArJr%{WKYxb?1A*(c-2glf$wj@Bhpg@&0f5O5i>DWo10O&u zwYkzQ)tAaaO^EH~7o$3&L#IK1Yag2`NIP<93jMyueN*<_amQ@_eRjvwS@$*!68#j& z!h9Eh2fC;Vo;#%_>vNaF0b`QFahrNcAZn=2oU)ss{&-90)}`yUql&1LEjlqsZT`9` zx!XIr-gx5OtTMmm_fxz*0@p07Lqwm9)}7cx{frJfMMMks4F{=3wASOh79pmtw?wWo zw#7d*6oP&SoZ55_=gz@x%jo{zY@*LF5?01bJOGg#lKjf`muF=dXFV>nrd09u_l^ zKD75Grh|^RF~_bCtrAqrKgT14lLy8^DoBo3iW&CLQ5o?MmnHFoE_{j0+orAk3!Zro zXM3MA$U4tHWlNGUHXL3)-`pmJ5f;By|6({*kLdfC!($p}lDEAH39W75_fAWX?K(nP zT|=mhhI@X^y*QT`+4QwQMYoVn2z&>(V&^k^Y;0;rd4aURuUk5oK6lAntho$8?i->Z zegFw(%!mA^fr?nBZ-;+i0sHAB6U}|5=&rlR_^buoeiD9tf3~30RE|@nppV-#V2Ul? z%2)a;czW=RXA&}I|9-^l~tvdP-z|15FYPfLN1Q1U zJko^;>(KlVcq>vrqkQAIEdgoiqZqQvfuwuw`SJ~Tk&N5D+h#p`mF*(de-c9P+K7Et zYIs}uGIjER>QQIH7Kwk+)O>*eEX?ZxpWGTA2bb^xxySSxnqeyv zhZEnj9p)GFw5x;}|5p7GDTcLTw7JdVMZ$tc);ZHz#Q0&jXSGZLFj@i3NJwB#o=#rD z{Lg>Sx>M?laBjuKi|X0Ihno|uYOQ@70LSpKZe6I z!fW#=m?+$@EE>CS(obxT4^o$!_T+OOPveY;)kpcoP2Rism!}!RQA94C*&4HFWX;wg z8$q2Ro79OShJsGY7?faSZ_aw&ruw)+XYOa0RY?_d*Z%xC6_)|(H8=YLz1ueGm&Cc|kEnie=HrDm zRi86xM^wAps%d4=-@Z$T=cjeo?w_?8$EUj;_f%TzuWMI-`-sq{;eN4i@3Dsay_lJ| zphNv@Iq*QWh&y5X_QAYw=5Td7qz$9Itn`#0hv6rxap1o&Q6zRZs?Cr*DN8z z$a;EPasH!EylQ8<;aZISQvS|fJV7SrV$DE;79ZtB(z?|uYz7ZeZ+iL(%u5a%`y~#p-o`Og+ z_by~N$;&*z< z{ZWbN)~(2k?8!$&JP1kbQgh!gM0WcykaOks$>!9yJA6yz2s+uQti)YsQHqQ)qg#0P>DYj@(ub)WNg;dDT3=kA0vSm86%EU)0K_&@TE^3tlrOvi7GLMfBk zf2`q86J1L)t=vc^Glu>?04Ih+a(bKe>>5f>-M$&Tev(Z8LnWJHqEy1U6#VOy<2N-n z?e|+84)Vv<_nmj~-we%XN5`jw-bJ%KfOcMqo(VX2nL5RXdy7x0deH@>NtCS?O8<6> zu%vAbjb9^d@g!feenrpk>h5tsZZs@^_8feq>q+>Z`9? z?LS|+2(HW@4f!kjiTv?j)cYt(LAiapXLtV&?a8mHUAH(Va?f@@D5!SSj6)^PP(P5N zxu>*%trGuaJ=299VUgkkNhSG+q@y zxPImD8AJQrbnpwKzYU8y^)cP()z*#Z=)kg*z-}f}cZ@}6WcZOp|Mh9iPlI}uIzRSB zw9GOkLvdi5XmVUzC1D;B89_kGXwKUPC$=oiBAJt-l9zZI-b zp8;-D)b84CZoCZShK2ueo3*GIwYaEJDJZst^OywHMnTTZHv;qWeD?Ney^8)&FgFv321>kk>&jY zNb7z~*lio5`P1A5XfRqF<(qxR#s{(emZtzdr@2kj0js;~GsS~`h# zKGf@_jId1L3%r=zZ^-1C96WQilKAHwXHMdGK@;gWpXZm$k@ zyIi;5fmg--b9|nkWPVvV9u?v=X8ktPI&nmNVr$(ly6`K*0@=7>8TD8ozxQFghS(B0 zaM3QHAurCXe_L?vWynTAGQtqV!B}URv!``tNxw!snK|-6XY^?&hgrN8=t!Ia?%kC! zviEuY@Ti}TdSXuNzSSZSxd68}a69Iz4a$vQs%#_%3Rc(8mZIY znvV=<-us34avij|@1U}ceP(#bkYlGJAv)N$ws2v%Eyna~kN}Z9_mHKbx#s)BXFOXo25I@bUNI4*;iv_5|U2W-D;l3cwlgBZeUfkQqE2uZ5h$1u{S3>Q24P8EYa0?F{@TLnn!D&2 z^!pmJ^*{@4Z`Ljkn5ztF?WaG5d`x#NmKIwrc6a{y4?;!lz}FriVLs7yOk_jAPc!@? z{biHSeSZM_8|KhW$jf)JW(M81Ju-y477fOgc=csp0L z<$3%K(VrO+;{qcYK|e=9XXAo^T!#k-!MawdOPXm4^i8u=W0phhtb;zA`q;Keyv_?G>!raZb%da@*mk|3jz5LY|k9v=?AvQLg?D=4)7PpwslVM7l*doLcqym+p+(c z`O#+W%ya{4qU~u7tp!$^Zs|Wufvur6r1kHx5)wmGSSS<%0?j0a0skbGDhRG1=iy#Tphuxu|_t`{WR z%gzFwC52g#)}xbD{-2PfKmRInaZgEMq_FL*$faYm&$!WmuByP=$>6qRa7waZ1N@#S z9EeI7e=77*5r$yB`$E>G5yr^Vm!S;XC4(E{_b7+uv-VAK|@g-s?yy;$#V$bxHeK$$q82pouB*co465ZfJ)3@(Mg!QMxu z1RG$x)5h;H4P)f)Gf;x1u%b1vf}3#wCSi3+P-nKgCuH!C_`nz(3;sSZYaf`a4{fGp zy;CED+u{@5#Wi;OM(ef<7WxfNI%ay2A`OMyJ7lNYbHk ztZ00|WE_B6SY0~QUIivZ1{cTg(GRnD)rTfFLlJgO23H}2`{DyLaKH*-5bi#a|3aaK zFZrr3KMk6ejih!@{||s_oP3VHPS!g?d`XqC$)x|=SDiQznXp@BST`%0pZ|6gNd{Df z?amV)SdC-B)~AsSEmwlglfhl^d*s9N+4~li|97{cDsjN_VGxc!_hhJu3XD-1hGtqG zA6b9{;pt;cf+i}%*#FB>o{cskNll%BT0qgslepOf-7(=`1%slpzKO8G>=aBz!n^Ip!^2~>sF+_@lm0QX-WlRco->{|yP9Hw5$@;z z6}|rn-A){|LxYrH5oE!P_&xbJ0L`#lC0IDy9Wy?#4ab73FGB@}jx?_ShjWhE?lM^K z^vK{f*#HHMSbauxZJ z0P_Z`3m;mW&pGNHI(}cMIn5q>@ut@igWumm%L>yRyPj&48*_sIMg|onhOUKaI*9dJ zW1K$uY*3JiF0*t2Fs!&o`U*=K8E~vVRulyrVmu9X{?htvmvMvc**H)`%RKC&ul4K4 zo9XCpe2A?FKRs2bH~>K)K~;3-d%l+{K&_FB7#(ogilrep=T=Fmj zG5p`P2$7E#CO*6IdwqV75B=pOQ)tJ5B8F;*mP_9oV1SKjpT$RXm|*%!5WxZZsn;B< zMVby|!@^Je_joXonn>n!@bhP8m?1eNuskZ6!m)y2;@)u;nL>$P`)4hBjL*7pKI<_Y zkV5I`KpgHEOI`Rb%!!tC8W?HZQlNDVh_h%D_Vzl#G3FXQ^b}*&0?Rm*ANvkEsyR&j znYdRDIK?>UgDLLLyF}gOh_`h6dP(5mqR^y}4l0CUfCZPsp27|mU3mzc@uLl8uPMLK z&2csb^7f8KY98o?5)_^qpQ^$i#U_-uvdQFvLU#z0FQV-5S^1Fhv*=iDi4 zs57QHjQAU1>h}Kmo=~rxrX-Q&;)|T)DM+GpohFce6onse&mP(eqItIa5wwbB`p5>0 zy10?Dxb)%BCAx}PS|FYx`F3J~L4t!;!4#Y#cOf6cMB_TWPK3*ho-Uf*L}trrH9_hv}n|IzHB zhRRO45~sRj`wPPoqb~R{PVr7w3WKRGMe$(_q3mBa5;mTO;Jzmqy_LR~4)v094=R8^ zy@&#a5bi2q@;yPgL|$O@+Cfn?srgU*NroGrjgE`;sfQwsI9ktGQHBJ&F&G-y$l1cR zCon@O0DrU*LlR3E_9}HBgAU_?nPc*a|EsCnh>I}{$qv#hj9oKKK7Iy(ouQ+-UVbd8 zt#xWx_T^9_wYm9BtG~C>U1F!opkBJ(H?0R^4mv=GzbYzuYx9rHn94J*L3IWL;i4wx zLy=mmySq<%q7jtEDuXW)IkfmL%y;xIBK5!3jbbYCO^%FJ@X$)Mbg|m^hW6)-&cu4? z4PXd$*!;ayf93_|Q#jN$`p{EZ*;O*Tv{g9+v&f*zFp$gerZK{waR3qW2h{rq2c$7S zE9Qzx#?3=Mk{c>ZxXnDx`sk>?Aa8h>wEQ}>gle`+9PBJ_Csl_>_3 z#3MT8OZ~ns!sl^gwY4MH<>t{BJkPeczaXl&ubb;tc{Ep?X6T(Q!4R{^u`{U1#VLQE z|5HeNfKlk1v8tq;nRHVEdrj)gWEAm|kXVgjnS5!7b&KNkn4Yp+vJ5FV1NCcbt=M0q z-rI#~+(yo(S{0Mm__*5HC3M`c80GYwfcsNzejF)tE5jvNK{ z$c%FcbLkVGJ?sI0YGzJ}VrxAR@)|yG7_9y>1VoU6+;4d~K(r;|6BUPk;X5lVzr5C#Jsm^}N&Nn=<*L zW}5dBSM8$ID04#Lv>~%oBH1uu#1xgxNb2}aNspwewUeN(kFQLc=k@oa{ldPd)5Vx@ zpUIzDG)3$mJLs4=-;&Z2^3uIJv48cho1^KiE^QGq+4L_A zv1}j1IafD-Ug$(vhwD&(zRpSbSM|X!1(wW4>UhG2@7$CaIL6iF&t~NCOD;UtQ2f=x zFjn>3&+j{>v+4teX_nOI6K&dvm?W4RBtQNVoafDr`CY*pP`d59ZgiLyFPg?#mtxH$ zW~v6Vu?!OCT#0OdcQ{%*Hu&~mxFDwu?`Ecxeq#H(Bm5|Mx>H-$pdCY_)+=u#4f`m% z`g?5b_8fc>Ee3o{-*vH%xs$7YK!>9saf3`t^0b3aiZD_dRLZb@V%=YY9_fBg*Nm z_Xlx@az($x`hVb0Mjh;{lhWEh1|OuwM4ZTYSM$?fn9Gbhs>s&-s(*DB-7sMC*E?R# z$A<5?b5*nk{$-}5SoP~ed@{{z&VP2U)XqN|uP-RZ8*FdNJeJ8GoDxgknNfrbt^p} zpCMPS5p7|67w;E&4uEQu&Oha~u)kRp_e>!~a*BAgoLh?QEZ8q}Xp{`g*x&J)%uilw z8-Ev8`b2^HrO2VdA=AJ>W2-Xof`sbRGvmmb791jRmLz|TZ+povX5L)VOn#?TFcXg1 zKYS_?d!eP4_3xK??9-+6o!64_RZMSHPdfq?(jzb5Q<5mW{Ye)T=JF7!C_Z-b)kiT% z5NEdBdOb&o*5}hg6YNL0RgG#S#m~FZy^@BQX5Z8>-cKrELza-~*ktU=cBy-o9J@C^ zIx6Cr(aETqZp}{}<6kDYv_75x5$#)6r0+ze!PVdzUwLj$d$5v1Ox>p&lv-IzhG?PB z7=`Bbn*A=F&)ImReJrgX7+d4KNMX=X?As`zz=_iocp@awB0tFRy6)T1&_F;9@tCx7 zLJOZO-qP>wXExWLDzOu@r|T7lw8OmLJk!~d*l8V27O04D3rY=9TjAd4%~W*CPMcO| zF)6mAy6%4MrttPqB|x_H!jZFZWJM`0{v!l?Crwb?J=#cD*0EcFVL!5@edtexuzr(3 zTI{#F{U=Hp3`T9{f<<0xsl5q?ps0U=I|zjS+PfK97Ei)drPtMGW;%5-x&(ae^9LTT zecTc=s;y})jU~zT5e5+E zd=@0rL(G|#e&YG+$;u==T_+F2{nq;@=E;Xc24fwaq2?mB?F2VH9^5g7ie_#1u#9hl zkg~y2mn?Ue-D_9D5LobY+F$SWpT<31U68o9oGI*bw#KjDp;)k;0SZ>DoYlW6R}>m! zP`+kJ>M4;>OKjW0CY>1Vd)|@6&@FM}A(o)PUiqSmTpT1nkZ?=+QphnUhHXx^Us!qd zoK%I9x`l%<#b>7=UUW2bLj4&!z51;U9-g%_Lwvec9a(^j!8KK1`bay8nofFh!YJ zndC;%37yt%8l^r^=!uW^FRSmQ)A_I!HN^1cJ0yJ0eY?%~_{+pAP7H4s10Qf$_>%kY z&0^ozv8)dmNm+U_f*DRqa`LmH)1#A)3+csxq1FZ}>G?HWKOT(uB;6B>hKVrjca(;s zTCyb7y0q<^*z3(EF|PmWt4SE{ON2cCaelL5GQM={W2K6<@2+Er)2ffrigZYt!)Q%s z8C$|2`RLgj%Vz9yBkRT#6~YH%(9nsWv(wdKl{?u;k5|xc8irb8COsEm2Py7czo6-E zY+7iY`IRePCOfk#VSKwh(*M3Zj$nB_d(a>SU`$7NkT+y*9~6c4mp~$cc)$reblYiO zuW+AK)bkj*<1dpXqazySAT~0s&tzB}NJCWY=S}Qe)r|Q_s3uw|Vr;GSjJh=VdRd$z zPREdKzZ=tBIZ5Seh1TluN3|5s`jSRSUK#d0iG0-0v*FKEhedOMQvMn?9~}}c7Ust? ziSN5wrfPBZG9`svWpyL?C+qHwXQwGxPDpVy7LvzNjH}_-;7+E zmlVGZ3Q905c3vba5&k}DGR7`xQR=MB>=t?vuY5M5U9#s!GTrgdTlHv^0mr0#^&*d2 zlv1y1b<{>DX8u5H4cJUJXG#kZxf4;t5!++M-a{D!Lk?K)`vv%x_`M9u1u?c%;F5TxcSZsnwTU25nLV5 zbgKFHpW3oBe0xK3l=imqK;O*f&1(^I!~4;E2cOD4v*oB^o)yMi(z-v|U#R)>aiYF^ zN?^Kbi^Pr@b$wpkK>#v%ZbZ!A5G{Kgg4J!-+~N(-KLY{j8|tr@A}?faeiA=6+wQz6 zs%FAN>+bn~*z!dto-5D~ z)4!#i19qtfMwRZK6Y#z!x7Rk>P;1Vi(SX_n~b{CU@Bp4OBtC_DJL|BXHe z?=J^2-eg(O>p~K|3cL0bO~)Bi?FHl7+Lv{bZ0d~CTuqX1ZIn+bw5M~LO0*|;m~va0 zDMh26#$|o^^{a=YnlCV5bq=g#qSsvz7~a{_y@AkIl1~d)>e%a>Gd&4EJblpd8&Z$t zCM%wQ(=MpCDee((IQ}7PZ-R;BHIFJ7~?ZH*_D-9*R1=*^I|qlUF20j6P-L}1%A{0(LZMI4TZ9we8PU~#hPRwg@0;;k1yIPd)Yw2`T?uGVy^4j)!Z}r!^hX) z)Nu7NWNn@P*MPrAR$1S^&qjF9y;o$S)Tnqb==zMvP06jU)&#t8E5xavVhWi*2YD? zi2>H2-l9+9;BN-xP2PoXB-UjL-D2OCJFab8;%48w<;fg%MTkt;(xufAv{M=Xz}Kt( z!=2eyfF`B23V;Nozp(VG9y%3r*j4n277s2x z#Av(4)04iCyfat1RMI6TWoU^W)U%y^YdL;txKY2^Z4gi}l@PP)CA{Th!hmp~D;Lmu z;^z6yr?Z)EFW!bv-Pv@^;x)+-^&)#DRs*i3s2BNtZ~eD;g^SpijxWbJok;i`N=A;9 zvUm0P8OJiiqgG#ZR~AHk`=jDxu2JQREHKT*#y;o4bGav;_!Vs`+B~eLRg-ufGyL?v zWCi)wcG8g}BjZ+9jE6gG;bfXt{B4<=%FjZTJd~X+@#LmHO%zjbr`&E4+qc`_@m4?Q zS>T&uKG46Wpgert*z8GczTff6RQ>X)=rnA2(f9#vi#5KqHrI+8+BI_*S{rui%LDYk zfLZdqhK@udRLT`V3E1A*P&~R=P&oE`-7Y@**+mbKhk-4&WTz_49ZaiZi zhwZTjpEA&xsZ9gK^eTC(ygx`^3uV!(eL|0EieRwOD8Ii-;IFiFU&QZR?RXA^Ib~o) z%7=_{W1G@sWboOJ3){VyvNca9PyPIRePc=5pEIT3vs>iU1?T2DHno$7_{3#-M=3M= zRQ)iamQ-08v9`SGIy!k8y}kH}u9!})lCASzL2X@VxFmiHg&JQ^e^`!uCT73`4X?OP8mc|PGkWb`V9pa@{ z`ON$*2EVBw5o7~Sn?L;UDkj}M+c%7=I+E66x6>RHt|Pm?%{eqPPX)1komvFW73uh8 z{p=zt)@kW@&T@-$9a`RcH9xgK{;s#Fo?a?OXAeUVuHt&6|V|D2(*Hb*2S ztJS#Ie6K9fYb84oxAVuS(s2_jVxSM~lBcdn)mK*7X(Joy+(2g{+pZ!dxv`?^M?6y^ zPNz~8p^>G+)?V0kIh2Gg;;A|Bo}FAL%+l5hTlkjqr-H5Ra=*MrU6zQ#Rnu}HI70SG z)EBtv6-Hh=hv7+&^}eBecdgpDP&jRY-LtSeee>zCUrjuP602rnyCTBqN#OZfnW}m1 z+Ae><5K+I#%+K(d6#)MtlBBsybqf}G89My>z6%ndh^gGQo7Q{kX zl%v19@fSI>Yy8&$$~%ine;i!E@LNRjGcqe=xwTuEU4f<|30>P%ZJ$K46kcD^ zE!s835($JqJN^b)b|Sn_}w8o|2n%haZiop0|(2HWGdS8rM~yk969I5 zY75a+TKBv($wQ5~;Wn*hp_thZ&#^E~!wJ082zg(nY3IB(03 z^GvAVw#S^P=#V~r1qf9(-A=Mu87=P&r2jA^;45itdl@3>BOM#|4I@LRp_4b8pOsl= zPO}JzomPDL>VVvmj3qAg0i4$x&?5Z zQ_Sws%${6@kGhV0p32QnjqVN17CH8{R*O`H1C=rw@)sd)iw9%(AM=Gl`Kx;&0rIC_ z)J^=8Uqj5ju6KE+_JtHJ)KMX#X}6-rrPcM&PYt=6%JFxdZ#*^oldqG1HKl7eE5?*DYqRm2$^5BP zTZeeoUNP*DSQrMqF(|Yj?Cua2VeLc+Dzl1&>*z30{78zf$o@h$z z7WgCS%rmrQb=0 zqBgzSgv69QD4rdJj^QfP>MHSpSPe|`*x$qB7JG&q8P>HqW4kdPLc=;AMQRHC^98z| z4Rdo|Yn956a#=@s0&w}}1k(nb5pdIldlXi+xa6Yc#L7b9#6_H^OAF`lPtO23OTOEr z_uQ`Yu}P77qO_)4N4gOqy)}#dl$S9)sqOckqJ+nnewnND#bySqOHE>?h~afF-(HWS zBd<2zk}cj({pPd5ocWHmtQ@Uf2J*#=(;^lmdy~gq#Ww0~S8p>ksVXZb5@+(oN%VL1 zhO;%?u=U!V4rVmobXvQHXMFk4S>x$Pv-xrZkTT-DuJ=RkYT7(4NT2lJd1{r?PA&`S z;B)nguzMEqLV`gNJ*%i8L86JJRv97$QGnN%Rpi=$Ve6RbY@SJoYAwI4xx&tCaI}vk zsTkZ1Z!IB5ZjFGP zn1pAht@r)1Vb^YgcY~$6Qe5Z5jF~W^@qK%Zd3}=SuWi9;k=GA#HN*IO+i;aR9LEM# zP2c=Fgi?g*3g=Y)_4z~W&!W~%V=1;W@iO7{K3GboP zK>h)LL>cQmMU?xe$799OMbx-;NwN08T=_e=Bhgzf-zdMS5th@>jxutuPBFj6oWfW^ zUDw1@$Ko;u>iBtJ#vS^uiyhHFUS1Agww?@1`gIa~*7WgpC*}rw`i2Q`+zSIEEOIMT zK_((1MI-#T8zr)B;7buAxv9&)^h8%@v+5m8%g{+rSc0d))@&?8hf*JQ@iT@l`93qE zP_s}2uBFe|GZMojqMZxjlk-H3AX9Bl;?ya>kyJe8KVEDeOcO7Nwn(QH+|T*_P9vC^ z8kp5lybt7WQ0#a3(=5zZvWCp8Z~MzYv~sCP71Gygs0fGaPqU!aKVjdcM49Z8n-$5e z7`k;1%$Rhu?$avIF5U)C7G!9p;7>rkV^lK$3!2Qt<5X7MY{JuGk3plsIY2k5=#@0K zu+ccjEl(|rqJJh9%n9ITT~%O-ZmKt_hejrcsN!ekc8+WnqvYM9t6m!|vRvj-Vx7{h zp_qmpkD{vu>LU1xvX*uT^GFuwsIvxHX(Im%wsRV-md?ln6*;*s_2|W8*??V7tzTy! zwPt`xKRSeXeh*N^DM7krQ@epN?-Nk^$Jp^jsi+07V<)W#Q?c`-=e9odRx_szS{~lr z95t&v%7e9Jl$Q^(_l40M?TIU%{!*!F3K53yIY#~5$y2sgbwlOQXsmb1i{m zUoFX7b*=LUGpmazznF%QN5xxP?c46TwF^;Y)RVkXGq%vuP}|VmP|DC040ddFOmX7R zT+s8-Squ$~9OC!b^<*&F-po*T%n7UofOUw)`a|}bgHp0)M(1_6MP%6ww zOnzKb%r-I@S+8CwQD}UqTIhHvZ)g?fqM~7^3e@On8%S#A4`y#R#CoX!7iV$y+1)4I zU6W7u7Y6>9i&#Ce!B$fl;JIut!)HI$-5~M3F^j!%My%i~2|wj%70R^LP8uNwy7spchP6c%zblZT=()m^e?i~F9tOq6Bz?NvZ2Icf5eL=os z0f_dB3>yKUDg>1)KIY?wG<-n@lRhF6nID3Pu8eRWg5-|;D7q7i3T$ zkbH4#KrO}{+=|IvJ$5r+q3mFZ8B*>>M$Cuow4>m!7q3xBfrC=qhhw=FR9(TO;1qyE z8(GYJ!XIQXt%khBpHf4D>_{JqnBfLr+_E4mu~R`(B7g8qAiQfx=_$4CMWKT1hsj#z zD-EhmkbBaDgyvUdE7~-)jlMvT%vWbGenG|x(A+NU9-pX5ZA_hr%8XTz9xGeX^t7<~$||Dn_Gl--r%p=pn&sDR9)EkX1LK!oGt zT%Tkavbk09@e~W;iH)!?$X;LsKS7M)K1iTy(QS4Frets*0AX%N007rV)IRgoqLj$; zZO9ZA^+85Y-9g#;FLJb3OrLa&03M}9?k9bx)Xx7HlHQ9@RiMn#Ft&5iRP7r`i;RQO zH zkWp{}?_E=6bbt1#hvK&NBNdXT>bAYYuVR&P{=UQbt_TKk2?0?Z1B!wxP)ic|DaP zcX5J=_`-aD6OPnQ3U&|Y6Q-IFp}I1bk(6-%hlvpA9b*-48q2&5_BTW7VIvDj>bApM zMULsnCx5>?R~7&N{z8EO@SxZT=G#sy#6QE~TkhnczwE4Y8i}nyo%O|o-0A`!z5(Na zM4Q;(Kl5ds1F=36K_$q9hl4+WfZbej1N=?8*G;Ef=Ornf6#1RXVXJ;)`O}g;+hlT& zNa@8}Q#ONE_or8&CkR@}K)Ndk^?}lqMh=&77xh5#2Q@+V#{xx$h^rsq4aEz-G4wB9WZ-8S2b1iJMQ11I>~5Itj8kDEE4;ez zTzeshV~lu6BMam)TEUPJ$p8f%4KQK=%Scdku&9tbkT4V?+;l7hMGa(tJ)J&x?qL89 z#rcthGRVu&{LL{C6U;04jxrJ+uM>U^IZeub48n2I7<73%wahqXc3~B2td6C5se$cw zQJN;{)7?bp>gQ_jYT&BinonoyowrIXDw#5IS!SQJzhJ^wvuoj*N4s}wRuxoZj(|}v zuR9Ex=bM9VdO?hLeEA_jT=)w{V{4EbO{*2U%gd=(<(YZ)7^tihs>3f>+0l5AaJ|2j3NJ2Z~ zg~jCvXhsu~fffYeN0~&z8L2NOMf=uKo_F<_;PbDRk}SCJ{ZLdq399J}dQj(gEyd*n z%r*hLjr(%FlQ+AN_Y#IAe$+4&8mpj0Ti*WPr|F%6@^A9nFhP&sEW7D3kUWei$i&l| z*{o4Z|xey1yf?F{nQ&T8eiTW_T7!n&S0E_0R!Ke_su*h6p?B*l0;?H7)u#10`j0O38jF(UM* zZo`4)i9p(e$#7(7B9Q$6AUt*Z1*w9KknH9YnqtHVxftoY4tjc}Lv$4-T_-Tbh}pd? z1tPrS!$x>a)d`~8Gl)!q2_Ala0b*RyN~2cpMFBf?_EHdM4iw#i#hX+R=2esw=(hoq zZ3^sIfO>j$Mte{fhLpiZ_)J;gAvhTkuMQN{iBAFUVaQ)!P^$$RndGVfoClXF(7$3v zTnRz;B|u`Rxdgi*SV7uCnA;E;ReR$0nW>S1Hm-L@%x-zHK{1&ln^Jd6pU<_B7#r<(9H)JX{SLf^ZCD0aT< zdjgpK9jw%gas$lw4AbIx41yV4OadnGM?Ju}ap9M}kK4@yk?=-9A?!HBbM?#Q-7z+t zUJ`B~Ny>8@)eG1e1Kd+YK+XpEMcE7i{5*Ph7Fg)a?O_BMi`c+HJoLXS23TTfjnA_U zEc9TJ=)E7KfbTSHA^X7dlSLcIyZbuAyE;$zi zIz6_>4GuK_j0$ovuLoLSYydRq@~EmIhviQe8#kMv@CC;{#38z8cWM|vHp;!{WPj>)|p}U0$6lB?py7*?< znNO{K2eb&$$IidnJkflE3i{ZG2nJ)K8Zc3{m;l6IOE~j?Mis=V7vf*oe})H-AUX2z z^X(4f4Gj$52)m*Wg}m#vz;^3a>^sH)W8Miv|J56qbI*uGbbBH+7ca$zZ)5pU7ETuI z4)Codr18ORc>Scs7r>zvKa#!I0y@xYS`Ev`3MTbN+)@olT% z0qzw8qXbT%&;iox>b}6jiUa)osyXsvzQFzMl(RI%u3+&?-rK2TX)y6sRq(Y5=7T-q z74FoT@RW%ZDpnfEeV`GV2TOCuLj<9ZI--YIk5|MI;Pmzt4QCT)AghCDw$=Xj6Lnk|T zxwiSEspqT+p#e#pzBPZrQgb%4 z7W*&>FW$Oj-Eo%=;S29dK@~tlmK5>>bxUbqp_E_*GN-noj0Yip{{XzWNY&owJ2tQO zIquM!wypn*v%i39>x&*nLENQ9Tbxp~NGYy?Qc5Wf#odbrmmook7b{-0P~1u>E6%q`&{XdEdNQv)=k%RQsIZIg?$M)t2);*Q8LGAmLIsyajJf_&NaQ?c zIWZiRV!F*D_CN2wW}n|tDPTt5Go7c4Lpxn@Q04RH zD)O~$1%M#b3253L6Cn^~mLCSK4rRJ%iI?4RjB2lL1uLAGg|?vnto$!iOl zG+rMYqpvy|7{4WQ?YoO1Z6r7IO0Q)so1`YlWB_~jY#mHf2Xr0a@7K8(lKQm*mmq^$ zfd||pe1*71g)yDdqE&qssL;4R;P4cCo;$*$Rt~z9yh> zK46FFR^Kh64}7tvkysdr1q#OYF(nEDQ+l8Xg7q=>Z`__<1iaWsiR>OgLQbx=Iw^0= zA{corp;8kG@`G)(N6n-@)nV;sa0vC0IPTGWgbzcA>7_LC6#|8GcIp3`!smt);f>z3 zm~F7-$yIs8D$XX~r}hBW6R%-_Kv6CP50ciEfi?TBqj>zpcKjr~Oi57@G)UXZ92(5NFGcAgTC{@CVo!Q;i@7-x)s8pV#=NBwxvZ8XMj(+`*r5gkKSG+z zxAZ3IkTx@T)F|DXh2|&~K!rkU!#nLTI|%_NQ`e@fKv@f^%?HlGy{H^ct;C&)8j?*@ za{ok2X#nocmtFHYmiuR$>WUqWa%T8Q zgUlj>16aXAh&1$>89YO95X>CNEH7hMc<;%2Ejvgkug-hladN&0BDFC}0Ks6i6uQ?#GVFuXFkNOC?FBH*I#I zCoZ5oEGWL#i6lIT2BZ>lQeRe@Z~&DHs_a5vn({>izZzc}Dm!6^K`}c)L8qR(#p-j+ z9`9jII^C$p-^COXZUc7G+7>bAuzWCluzWCUun+MLF{i<`4YYfgA@mqx`+*_(IPF;Q z_gy0)`k1b0(scv*UUkUhuHY`rF0KMxae`)2H-eXVej)`A0rgAC3D{)V92hQL&tYU; zR2FnEu`_WQFd1+e&i6Ei^pA?yj5cT6+U=<*91}SR2HI4RD0En-p>wv`b)AO#%Vsq% zhL#jhm_WcH-+WD{mZ-g;&#U(rOa<2xAoId&T@d-?(2(Q<<@KaXnd7qQjU!VO8-pW~ z{h)V@f7kNGg%JNYB&sQ8tkX2Mlky@rG7#&=3=85!aznGax#e5U3hlN|Z6n{=Qi}Vv z(Z%=#h3a&>Cj;Ni?_cMb_(tVyqq=;d-2N$ID?gU9S7R^qzB8xq;aP$n$nJ=$^X&|> zm7uqKu(Pk=t&xZuNYxG083yF4y%7s6d5HpJqh#_4w^1SA+PA^*`iL9w_XCuK!aYDg z6V=lZaWiLSz6D$9MkcPBW}<3>B5r_~V0Vp|sFrK0x)U_LDGW6m5RP8T=C9L(5(+KQ zsS9w?Z}D(x&N~cF{I2nTxh6VBU)_LQJ5uTuI+wM>axpR>XHNc6NF{>uW6k@>{ z^Z~(xzL3IGORsT3kBL%Wnh>S#4paYx$oCT&$v`f6`lp;dQGVPW>F(_YZw8?9T>?r~Ku z!Ph5qyFuZr4xBNucpzY*F95A1S4`!@#bf|qhsH!e^y-v-+~kYh4sX$hxYh7_#r{8> zaj|Ng#1nJvc9#jx&qtY8W>Hp$!LV$e6PbkkU$~VD4+PmE1rw}#_y*MYo@L)~akw=J z!3{#3&r4lc)T}(Ps+$5Ho6N+T^piFmhi!^T4*1nM&A2w{culO8#nwMt)qO+z*t~Zy zHNdvb+uCm|W#{~z$Ct%FDtmX*JK0c)G5^t&>A95WAN{P~ZV&jC@h~JTTVxWqhbC>8 zd$b*NX!Qa(9|>1r33`@5As=;zqiaM8Z{pL|-la%w#`o>_+J(-Rt%<}VkIrAuZe*RS z7Fq7CS743k^;#9Nwl``DPtg$L6N~&E-zzfR&3hUHpF@VU3`hUQS{v{2>#Yzl4v$=- zC4DozF!52mwJW;6-8<5e2+>~B069#LK;P1>7Go0LtHreh+YLypCABOQOwVNNt^-=K zm)|N_=!);s8t+8Xe>My)TNCP?;25!XDJO{v)an&pE}3g8dG_S0x=vJpw3_%6lIeh9 zgH#W*4m$jCdg;UQY2Wb2W&2o{VBqxP&_<oJLYa2QhB3-I zbuorBJZ!rZdzY4Z2Fi%4)U;E)uomO}_0=-(940Ue&FR-pkVd%oV&0N)qQDax?0#CZ z2okOPA;$K)k|cp4?^*e2+}_G|`7sxFHdh-l#op6*!7TMN11xneWDz5BE;_T@nG>-1 z>8PT&!RuZ+yqdHWZ0&MWlE5y>TO;$qUyDvfk&nwRZ|^5EImo2%c9NR92|hXYKJBZj zq)0I6mK&7pNP3z8x9%e`F0xYlc4}xjZG^jnQz%&9#pLRgWLQ+eV?s+1(@|ZRHMB)) z#Kv-GUzs3o)xzo;Pv?izdnErF+TZmYEs4AhyKSIR zRZ3MtWOcWdXdU~Lt6Rlskckt?lVDM?zWwF5gB-rg@6G;*Ru)yQt;hHOWQZPV`h8xw z__yk)#hzj$^-uS3`_#x%9(dBf4RN;=6~I@|?sIz~V{e9{=`yCSui9*C#Xu5~4k@J#EK)EE(>Z{{jixisJO6{V_~lbvg$ zOJ#HvvKwi17IG#U7xNOhapvX~@9jw=Zsi`u3y-XND*hE*HY>AvX=r*RddBQwreHTa zD#ca%G*Q>@oY^_lTP)gGpw_ZZiY=y}I$(`*b)NELY!N zA_m-uKUO4Oc`Ix&GS%d1Ov7)8ct*W?OC7~I+5w@sH~AeADdM0whZp!(QMjF754O*1 z)F3GoeXb!6q5V*eHRokktBMYHGSD*lbr{)bzdN?(pdfdmAHP_*MRd_Rpqy2}cA3t~BKc zDRHnOoEf0pJjpoVi%T@ga;v-WSq?SVJfbWH48&)=Gk^7_l@uCgpQ;RI&i12SO@wxF z!gmnQAGQ}J*)!hjuhB8|ws9&0!YVmc08!pZPKLf>h2rc}o8?$wk4rOQ)5cLVCFGM1 zLj1UUhcrd@^NYwo2X$7l7bc5NKbXbT(>m$r%=tR76CWDAh{nEh1mPrR^B+CoHw9H+ zJmKwpq>c3EV+u<7h0jT=0*%pcE^e}7L=nwxgo}sWxovptxwHATr%g_|iuulx%YK!W{~$*6hA z(|keg#_RPMgUT&XV(MMS8cjQ)FRUDMPh+sj!d-*dcfC^S&wb*$@#*x;@=5c#=pN@O z`c~S|d<>vB`RxOEdd?rYR9xFNN;)ahObZRa_kD+A$Y^{Aj?O+wl|855JXwDj;5@bq zT%Xn3>qoroBxUY5hPxwiR(~enU?jHcgQi<@PB@M=+O34nN!0-?D+$-KJsXzy1CuFl zJpuRlbJ)xSzH4XIpY@m9)j;qkSKtpIQ6HBb(E12MBIh@%YXCl6$1p~=M>^j(w(-Sh z57jG@sGO0@xe}4F)+g}Y_>>7r#lM#nOzsP_+<20&p*+^L2v)A`W{0E)Kk)^O?0kY* zBWe-PeG)R5&OTo}JM4>ZWlQNUcYwmtkIv@(O5Yy(z`WyL{0ND_=!{($raxihzTAH7jYkvS-s2Lyi zwDc4a*9<*lzHmGIWz~&>*FTc4&>~cKr7sYr_1w zEY%%d$WOV=WNmK5v!|jtU65{NBxg=fsT*BBSnv}3;^?XH5TajQnz-#pg17TJ&I7CZdZ`-`qY%9i%I9Nf zEof`{CCw5k5v)0VjN%dI0}jZT3WzzVk7|E|=dcH}YGXt^G`~-IIb5fC*JFP}<;PXU zh4f+HwFT{Jgg5e;I*d&`hH-0pfEFg47uf(6f>?06cJa3p9w185q3cr){4g_+UwP|? zpq>V+fnNEnJ0AAX|43-sz&Y+w4kRdrbLafdFjc;1%0vC26d2%dr#tYYREO=jQ$XT$ z5X3pZH);wW4y2(LoU?Vr(0Feokvi}mf3b`;j?87|l88H|DbQ9*F zvn8s&rc)uy6d-a5wUD;rG)pi=_*8AE=X43IJ(mspPwFU82UT#vaM*|Evqow#Acam> zR0_iMzZ#G#)k3N59sHoI?c!(nE!j!W=|;hMT8qwe*c3vb;sLCZn6Lg{TxqH{&_PGx zah^WT>DdX6x<$ONx(~gfkvc_t>1)Y&((}(AbgJN}id%%!oF+uSl|<^4_pry?V4zw& zbjh9Kq?a4Xs=m<;Eq*ZmjDOfSXH9Ds4B6V#ADr( zH3Nk0Oq{2^;t~114uMoo!1F+FzROdC!=5<{Mu7oBhTqCa4D~hjoZt9$J_fg+DiX)q z5^fRb!ix|OB}G?H7k4{psXOiLYVre{&$_^epumO8>47*mENEm3LO!QwY(w|~!|CLG zMsr!BKp(#}^MQCQr5~I6dM>&`x*U+AvkzSNV!F)vLMgX?M6;(1IbCKseQM$n;OHrY zJMStLJCes|J@G@3bXnLf!Xu|^$ejY3po7rL`K@7bB(pd6gVNkUIY^rJp!qQ;oGhm= zA4bIlh`aTpn@xBZ^@9=`Wr_gQC6L2#WYGqFUO=aLT{thQ;ktOvg0qvh4W42!AR`_M zKv&l+!~RB`8(l!1PwEcsVISZ(e>?sG;*mN`2v{JS7p5~GKQ-UCh(CF4!5O@KHcr8J ze*d=TWQ~eRP~Rx9#%UX5b=tz0b)$*kReJ%MO+IBzA7lPHUZVf*q~{W0x*R!{!?_Y) zx+aSRrbm&@{F+Fc1QZ5I%ElhN@Vo~0kJ8)TsUK1@C6Chq(_Om>mm`c%@%@CDB+Oe$ z&BIgtL{?*(Hpq}X$36MROp@ADt*6mEd%}62@8HtXNE!$1j5X5vh^94a#GH5-w67Wg zcB9DekZUD2j}3r32a*KT>9O4hNz(zshE4@eO^}kV{orm!#Bju92f`|+=FicXwO`3c zRAjm#bI#LRKmOHFHpF!^>Ghg$-j8=ifzVX=tL5;y$}6ew;7B$EDetNhw}}Z~^#(Cq zJrJAbBx88^+7XQ8r8$WkW~g0c)@Y8ouS@8^V~A*i=^>@n*L4iqfm(=)e(48@N^PHH zCv)62t6c*5+y+}SX-2bupfq9JSPV^Gq7LBi(byzk%l*Qgg)8_aM(^5Xe5xQG1CCodE%hq}A+w8pH{LIY z9=LG^WB9I_ugf&kq6eaOS}9=ivEEMj^#;pvH~D%v!eKcs5!UNx6YphY${a{l+cy9Q zAq7`M6E|D~UtcmG_x3_KgD5om*UyiIHfS?ockbM)QBg4P`WhnExL9cogDIZ5cLOdp zA2R^@&Ix00CIR-Pz|Bk&Pzj~$9;TpHNq{sqaDX34lNSLwPRoniS>tJE(%&eJ7^}}a zai`;i8&-bzUFUAb7w8R|?;9=se$wlCIwc;4;+5u4z6o?%lb79-4Wy=l4m=A)PuBId zIKAi1I*p(|t!$>v?_2kLFEr*GyuU#oF<`tC-Vb>g?&CxmIyT&C=r}drutE%C*T);% zuiUna0I!0!#XDqG#Wt19x$P6=Q}V69U73G$qV;dctBPs=`4{+etA0t*tQrvTDKLr; zxOm3c*ltwYs5FzGnQgxQlfe1O00}v> zhQ!*bUonQYQ9IU`AU_$s+9+SkOAx|hWzXrw12_6%dRtL)F9=`xnD-B}RbWjV(?|<+ z`u1(zsMG88yEe0hqi40V3c-ni@qFf{IoY*!Xlwq^oc+CzpZm`mKHp@0y_>bhK%ch3 z%FC?UMv;jFmo8j2g(=fcuzwMNm0WTbx>w?|5=89hb432Pl&^gE@*M$7m z124mtZx@cTcARFFz^}~=w-T2U0Bxq5Goby)mRV@u$&6+Hp|=NrHq&&2zp#nrukfEa zc3j1y(at%&|9EeYS#AX80#Z=T&;N%kgXs822EKEZZ3}w8-L*9)HTa?uxhv#xj@I>H z-Ekv30~XubHa@!d)p0ee)<7kp3(0rkR-jEr=)o{wmbVAtyR&^%EB13qXw2O2nSW5o ze?dRvKfA=<{e_qE*vyupd~3I*wS5t>*ycuPnS%~cQ=68lB*O%fX`p+3e4 zX>!u1=L}(V972q*Y+f;zNYNHV({FlVK9<1I*VHn6^hWMjLEdCD$r$r-MnQBmS8EmQ zR99Dj#0yd*i?TX%(U=(4 ze^_wD9e2Lv?-Nplqr`UoJ?T9f10%a0bcO`;kD~l?&Ys!@&VwtrGRLko+SPBIFqqS! zA|Yc}#?GZkJ{lw+x@rGG=ix4-_5}dl_FO(J+8QX{8VE;uH_Vu_47EWx2xq`wkH7Zw(Y5K;vP+Pk`De!1oy2fsY}us~ zZF6me4hE`$&gg-v%l^)KoeOR37}ja!*7pY;6Zsq65N2G2E?O~kxEPs6gG@s=51dPo zj&T?I=-)#M13Lhj4cQ!Wy9AI!!k0eVAGS5Zdl z`vU#>IuA-Ad@eez-=w4vaqfdI7UVBNn^!PK!I02GEfALkM63WOaUl+UP_ zu*$8?`@P`Wr~f4c`+w5&qxc^NAU@OJuhsL(QR1dgaQPBK9ZEW{?Jg7*LPi#F{s5H#>Colz!Io`Q-GlC}V z8?jBy8;_7{Oq0sjaYdL+L~sO=Z6f=*7=pNe7-}Jd1~7tu;29be$QOrYLFA2N(LewV zLQ|}^fiEM`051KH#|3??8}lC!qY?s#gV?Btk)+4PnK$&$wa~3IF1rW3qJNAZVb(rLj&kP zfckR^KFR+Fpm6bAfs$rMv|vC6npZ#zO)dr0@YN1s zJP^S0F*}_;({N&$kib<##4rQtV7D3{-F-u%Fr_JBml$9ox0O1hWhNMJ$Ph*zDVzg6 zv9fbdc|7>v8diTW1hD;>yD~63H#CeG$l)(TI5FCBU>X=TI>r6h7)Xq+aLham_^Xga zjL$<=3&>SK<*(*FaogaNm7>KP#YX7uu(+gbF3zEjZs1e7gd1n@m8k}IVB}NgMOsIR zI`X~XW7&U6&&S-bZpax1j^9Jm{^7khxc_==@M-@)OdtEsgl_;{UC96H@?7qre9I;{ z_E-txB%Pc8)yXx#0*xme>-%b>tBZVxbH>9eUsE~-y@XP*G|U_$un`c<_OFEZSWy2+ zllK=Q9GZ7toh?C?=!%}Yzn1wo6hv(Z{ipPP0$s9?&HvK~7TMCMhiPC3`Y?5or-CWq z--19C@P!-92}K48o8vZHiCq{7~LPvt*Lgj9_Y{$jXn#^VaQ6EuQ~j+&pZtXL60EA_B(>;-b@+- zrEf>!b=mKT=voF^J%`3CQ9NQ535-QW*S4S_yp{Y?M#u>A|;_Xn-Oh_f+_V74v*HsVnFvyaX$ zk^|OzvyzXIpPMh3boNv<_Mfe6Q~<@B#|I-Di5P)CvIDRFCjN{D5WyGxnFhE43(p>G z&^CgngN)X8jQaA45r^$b;(rBxMMEB;gY}H*Z|#q02o{?AIWadlRuQR#7HTJib z4?vDS%n8wa@QC{#U)cA@h`@1*NMkflskYn=KHoZk0C9*+%SttOc?=dohudhi6bUx! zLusIuwwZhnjErB`ANqsj?dL0*yjdXKJ{3bJELaur7ij+&EQMwo`Jfftu82Gh85=D% ze0yU^b83$%D>b%_v(?7C?u%}sN{)pc!3KQ-=x7R*zSz?E5e>#dYw|wh1~)1q>oN0l z2ZZ9!G7S14IB1V#vbn+Gib#62iPz_hTi}n6QBi2w__rHgju4|hbe$~tzivrIbtodC zXo=vD3|m6ZR1oyYYaTnN6+9J>HW4?_r*ne)FA(jM6WT;pk-)cW*XS_eqt&Lg>IAnc zBKOcTjp@{H6!_Me(Q6k6mb9drTRjF7qB(M|G=r&O8pLyFSxEcu%#UdhwM!(nve`$F z12KgcU>cYU28saQG3Mw#TJQCcF$$rPsT^khc`t_^k?ul$G>5OSa|<(%@GHbpMm4k< zlmwT^KPaQYuND8HjeC@7<=2a_2^DZj<;7qpH7`bB#r} z{QtG^|4H2+F4^L&bmK=vOgqQ2oKhzb_z`AhsMYyzVe7lGAvwBvaCGGqrk5C@i> zhyLRwPUXvk43U zc25A|;2hQs>!SyKIh1|@v^i35wKG!hfhCE&`Wq?AJ%kpcoeoBh@xaihUsNL6$$_DS znPa3gG=}ZRI}Rp;*@`smE#SiaLk`SJNl|9#dGAaWu&*Q;=B4pq$u1Sl2YP}Ns;&k{ zhs$hi27LIV5EaZkBNh6GXDm=WxN?ZV+~l_Y{i4y$3VQOqG!8l#0DSoD;v!OpY;(<< z!0wpKvI%|v*e#IJ<@OwtANzJ}X5u%5YETTjof+oX1;N>bV3_QH_*}8vgu6O0N3okp zV0#z>n0``SZ5R(vU{e@ie7FF{Ty3JzJqmM+M<3Xmakdt4F2bU{@# z5XbabhJE*GC=)a2`NiOFx!l;tiz>M>o{RSQyvyB%ki7Wag->}Sy9;4?)w}-qGAFaz zi$zDf{^T-Jf z-p1|?jtuAcxdUHu{2hr5SZR#=;zQAnFi2KujJDwr!shBUG_Io#ZK9B2n-Gfayvx40 z*PoO&P&>CI1`9ATB-T_?m8)H+Zw`Lx3b zZvhzGkhn0S@ViO+l%KP$)hU&P-|kg2<-1}Fzr?I9HEoUz3d3ayn?RYIm4oNiuE}>} z=Hh=^{&IWa+wPM69cN5MHA-=@t63`hv?c9rDn=^YvF;^k*Vez3=V0d?=U0STokhni zvnQ?FlxT;@KIV_ZUh!acT-jJQOAiqjGHO}cm>5)T&{B6w)8gw+&T?m9XMe|Dra6)- zvkz6HzHgY~afLjK5oa~$O|u-6?|d|Bq-arSpdKv8EW@ZPZ`}~M5J!rlu+jXAvrT|> ztomdo&;F9Q`ulTik+bh#xYZLfgv$7}q-9JmC!vHy2Q?+(oR24|DMoWjS2!sm zAh>)<0mr>eX@vTZx#mE8JWHxVjY+ru;akQ=9FbH*Jm=g(F`dY-4u4wRQdwIPKD*pl z7LM`lvOhG9cnn5FDi1)}qL>?>Q**@h_mkBUv#U-_a8_#amRi46Z^hI{#JMRRilG298SC)f5SxipD0-dL~UJ{I}7oR>W{os4TIFhlowbA)F zi^Kk*iif|jf@wEwVR+TR}#epHa25jY>c?&vpCTQ32H*WTZ>)rq4!9p3n~>M77-?Yb_JYc1L@QqddPRU5oE8&`vbOK+PR{zaLMLz13jWbP7o#IcYTz+mEZo3z|4kQVq((>#a(2DtsOU5$d zbfP;kAM>>j{U@RY#mi9@4w{Ma`bWjHoPI*YKfbwc&{tx+TY2R8iF|1Kq+E8!;)I#~ zN`5L}Ei0)q`pHbY_J`xa!84xSvhFTa;g~1&=BtSEuZEvJ@tNPV8tx794$=%!z6jTd zINL9iI8V%Xfjjv2I8XA{egD<>HNv=sH?fzSDwZk3q9{G1z)dDr&D^;~+Df%DnYP)#j>&39P3=^Xsh!0bUY)%e&WS<|6u?9ry|hlRJzUXpClT`AKf^n!!(KK@}< zd(U0^LR?&$dQ%R`)+h=N0r&NENkH#LA zub>4QS#e_95>k&7y@^p>!f-#%iebUd_#FiGCLZGyPjgJDK6@?Xpcxa*mag;+uKL zotM*k?Pe9K+C5Mirs>ALVDiAIOxkmU8!LR9?c`4)k}@5%`jQB!>MFUG54 zJ!6Y=YFUb`lFfODzq~S0O*;J`2$9^3D^%)eeS%=r#mL09@ES|Odpj-7o%umbTT9LC z{6kswAf+IXgr(d2=?iU`RFeJc6j2)bBd249w2FLNT%O@!FX|?tUzHuqrVAF<;Y(si zj=1`}*Dj&2oY~(ae`Bd=A!8NDG{W9@LQBW15F3P6y41;vLNnR|&P#uQF=^bxLfulT z4*RErD#De8{L>oAvBw(xqik%|a?JLtO)b$HF;|@Z5>qFrQtFDFEfSpl-*^jm&8EVB zY@%xNMkyZ(iM+8?ta2vhIy@-br(0Met|PIsVxHY+opEMA36I6)lG5Q>{=z$B zukQ(wzhp^v_aAmo{B%-m<`(g6|0aeq7B%AyjUXfJunjeyYiGeU?S>H&`H=|c^{|P; z>*?<@*P*6Ku#(^sarb2ovH)pzdTNK&4=tfY)u{{3oys2US9xi%>t~Fk&yX@E^9v)< zU-x@Qu}gZsXeTPYry25AOfP>*pR3BI#Cs`0T2u$DambZ?wS4n*d0MFSLL49BMEKF* z4R9FWX-^V&+MY-@FLyni;*5Rz9xuKpFQflq9Zp@qWHd9UoO zDJJPsD`_&gI7x*d4SE4`tDqY78q>%SD|8w%_=Zp9uj@gk`J8WD2w$O|ulv@X{JiJ+ z`(l#6fCT(Yd~)}|j4nPWP(A9oo08o8)F=O4Z29E%tV}-iI)o;-pfC~5<+2xlE?5O$ zabDUoAN(j$*WJ+U*!)yFR%KPp+^a4jw?5P4z##CXOn%P)-ITz)D?0GozrSB2x~aZR z>U~+nUWg5{vfy+4gvDgWZJt{@aB?*Bs-DH|h?u04(q>t~QMFgx*$sq)vs`>Q!iug7YbYWWejh92=v3A2@S$yQJSBn?b|dpKO_I%Yc0IM#<5xW zv!Nx$?GzDvIyQ!z7IykWZsNU|BP7V{fEq|ulzv*71oDm(c$UrWcP=H1Y0tkYJq-VSUpJQ75xUb@hlGi;v)pU8!tS}Q(V_TUGPrc+t!mmkn zB=EQ%vc!z~RN~3Fv-o|R?_DWP8ZgVo3lmn0oM)!!-x|andWa4tuexTa0Q_I$^b*O; zhxWs!=*hL~#tSm7^JSdl3Nm_(&ztGWO2ly!2by;;1nDRC8?_Do?BS6m(Cy!glRnPN zVKp}Le>R#UdXsgSC+fG+=_-&{w5EdBYI<821}ZidoEYrNEP6YVfK}syxy8W&>Wb^J z5sBDX8Jr;SdkU{s`DwxTm|4SyYHHtg9=nhX+dx8^v5sNqhgNoIe`Lf6ROR*{T2}Qgl5h~p~r_g;sajzMPhil}V8 zX)$Kv-S)=|$!83r%HKaf*W+k*;~VNBEvEHWQJ+wxWrA7#>csf@=>6`vworpjxr?T4 zIh{Mb9Jtt6)le{~AN?>zR$OEpR$k{MX-XDP#Ws_+;>eB?d^py!rBr_FcDdj0MOZ&w z231+238DSz+XC}2fI7)IV&gPqnK$DPQ5e)-uC$jish3d#R7W9d=DpQaugaz`oUt)& zdu~_p{XHSIk29__?gqsnK?^?dB$j>Z|1}Vs%V`uZ}p`D1O zo3Gf{J^b_-)nBUj={+EJ_ANqc^>1%R*}`LY)%~2pevWl1mQE;|n>kahxTSJ>{e5vj z_aK)VRXNB0wf=l4jB-h&t4{N1+K{q6!iVI&s%lgFGAFt$AzDzsL!$^C3AD9G_D z<)w9znhl5LZy%v_@7Pz#-Xh6apB5ILk4a{KS}3lM8Gb&@|Jxzv*e)l3V&yYLOI2wj zFec`B@UIChHTO{U!}{U%TWpG-Qxp_aI?fjsWpC`aic7aPjmj4_2;McW@Czn=B!0{C zrzG|&1y(!Lir&Ph)UGwluq80)t3k?-RF*Rj=D+U+xaqm`-jON&-_-3yjyt!bsVnP7t_$t zt-Q3Vd}mRUWkf8>Q>P|b)g-|2Q2>ZDh7eA+UxO$b$PvsILjzs$}3#vJc zJnz1;Dw_KbE4d-}ZQ^>XEkv_IdFkXc>hZl#PWZ2R!!vI`WzT)Hw~SwvMD+<&>9cpK z(*M3PDzdalQ{ztSCV~Q+IY#CD zU;TEdO=;_f^$y+em&maBrfN5twyA^kzHz?~`t;XhV&~Pw`4iIk&xG@k>RN~UYcBia z%s1HrpeQz{ULKY2uaExpEH^)YdbcdW$ier?xR7VHOTM)okqL;mOw)JKe#I-|Bl%Q> zRbywgY*zTFMRK!zRE{8)Gt@KM<>x$EJ&SnZ@u6Kd5RZ(UAoft(a0|?waI4Iu zlxvlO?!a~5a#%A92mbKfWGUUHcy!e=gtNXkisfpqY4{-((B8G>lTMSG(Pk56u=m1U zH=UM{+BP|6o)Yk-N}iSto4VL!A4dJ>tt5>c{(3dDvVbfmgh%nM<4He1ao)SA+GbDZ z?-SY4-%|2xx6q%NhWN^_Q;2&I#luBUgMQ`B32P)74ml%%E9l9XNaHUAM5O3O>S;5k zH9jz{6^~x*i*s_GS#4Hd^R}6ykjfLu7=RZAc=!3kxH9rVlIj10g3%M*Sj~@7(E?(1 znkbZnPE>oc!s;L-Tg+onLv)jq{w$?K^xj4x*q#+qp9D1=JmKB+y#iiKwGl@xixdo&$rFPD5?ulSmgPwF2Da>pOptiR?IMmni~{4xKGc9DYqf8G`k8o-!_sVd~}qasvL z+e?A`W_J|>gQK^WmX>Rlf5GwNK#_5vrKL!X0{Ja~*O?21r{#b5gRYJL%``!q;P5DT z?eqb%`}2*#SQD_#?U(c1bVml>$ciW2?+emH)h0h?BmLqDv%AFg{CtPX0I#9oyTFs7 zFupm)g{IoFx7!6qkOVUc&}MTHJ?C}a{PB#eF zd=fidf+iQYq5Ng2s|O!bNS?S8@(6tVtDteCk&^Z#@OW}vv96r_-Ro>(+e?9bp5_*Z z#QmY3Tm#J3s zjfrGF*}zx!E1ADU7tBv8u75}7_-JWVx1L7ouP$T>ZztqsKg%iV-2M6S&sl4L%I{UM z#SEW$M}U=Py`q9yCPa7NcWLvq6mqz-HQiFt#E*h4BQ}~c0-eU}az8fT?EY!>_a>`- za{1wkxX4iqe0q6|e>`|Aez|8Bt|H4Ud1>N%nj+B22%n83)bXM2Pi&XIfwiGG_`O_9 zx}jyeI?j2xSdl0Kj-YN5HVlsK1#y zu&>_G)}A+w@Y1y1Ql|!Od_0eo@x^Ul<_^UCGHQp29B3}O9kag#0r&&MV}0Uiz}eCd zYt)_;w62vmT{RIWBQKmx-2;jug@$T=smOYnqiTVShT}og7s>ePwVZUn z|H0^~40*7}d1&q(GYIi!hF))L>V4`W0Wy0CTnuvWZEJ^Qc`Z*#Btx zPu`FivjHqFSG;j7MpsJd7hlD$S%c>l6t(E^=Iz*wXRN;0VsNm<^{xh;`oWTO@6`Fv zzXL}PcH^W+(6WqQhoz4Lv|G2@*aVIS550D~mnzgdseKNNtt;Q>XSsFi?h}Vw<>lwx zHeMj=Prk<^HY?jY=j-ezS|n@p9o;+@SB%X9+?ASKJFauURp&kWV&;3h@0J&RPWgcG zW&Tsu-`z}pn%S{od(*@A?P`RrR6axig!*wujM9NFM%8^gPTg-VQMH$=jcsEqYvxX3H9Y{f&1p!F!S(HzRyd z>ASa(U4h0X38My!`{a_L?Ayj$qNRMZb3>0E349HxNfJ$`txkUNs{E0sJ}^%UwOM)K zi2Mc9s1=EYivl(8;N{8JpIrhvVXHINMgqrDmph{x?53ant&9V2TfQmIoiI0yp7-w0 zT^~#3+@2Tbx>Q6hpI?Hm_i+#G$c$Giud+s%Z5z=?KmKDZ}X=PM1IG>h3D21F&QgX*{rk&980UV$f?=*QF2gJr$J zGS|r)+{s+~$VnFUnN+-(XM0sbQ0WkYLT&S*nb^No|6xd%##Pu|hQ~!wJVYhn2 z&MX12PVaWIta}cfhZYy~FA|>#WJ6cl&omL+q}9H&iNGAM`x0e`7X!I>$2Cf&H96kw zdak*?h|%f*SHndfRQ5NmY*#v@WlB8TEc=KCQt3my+1NDGz3FXFhsc<$c)gj{gVRky zUYb(l_Gp&iFUx5-p=q9vuB;o6_3CR4kGL_Xro+=7L|v|t^E^n{36_Jx)>Og9A;S3g zYR}X$`LFT+2F&O!iF7`CdwDtA@>{yO2`B(vy=+~*JO#9EJ%QdH*0!Dkx*rHJuv5k| z9Ns+3bMW>f#=yk6#KgeBp+bxJKLy9S8~lF>=KH@F4Eo6T&eGMB-`ULr==eWs6woUE z|ET$=jsW8*SjWT!dtmAr+JZwI3=En7T{UW!4z6mpuHO8fULFpv_MZQFcU+j^aDx8) zU%cCxoYQt2Rp#Z_`=P6OMtr3<@gDL=JSRHRMi*59Vf zVe$p>vnY^P84#+8(9)K4=dqW!3`XMHr>2MeDx`C9#1mPZCi(NR*~l4>(y~lqSku#r zRMGcnYIa1!=aL)t5{hNliTmYd*C@Jf+g71>>dI8SN>Dfwmn`hB=vXqMnG zn;cD~#=BF@)@}}tm*HxvFHO{Qx&>yB0y=#eBfIU~!jr>sN-{M;-Dn-lnx4=8={T2} zGCRzUwtOiasFu`ATax)C99u<5<>lvwPxNs)tgP>2-jg0&Tf_+KC}h@^L=Ki?R-jo- zbzYh}IpT=T68tfU*0wTTYNhHmux_sV{jmm@dmHP&{QsYc@#?gRK1ZiX6$=C7{r_%a z%nvZ#Q^~mj)=hiD9fTrXFkIF6yFrOcsW=0-AE1mrE1u5;dBW)_S zvG6N*>{>mr6U6bA_`O1qHy`@UF+TPizZ?Ne3&sov|Nj#9fBm_gG9v#R8v|pJ7z0D@ ze>d!^Kx<292au%|dI0!eyTrc^KQ{mW(*_x-BdTqg@=Pes%uP ztD_S9xbWQ7nDBR_!%t;w|KyeDjjyRIqjCDf&Cql2&H5^7#~!d(+bi%V!lH3;H--bD zcD~tBjfy?T*Yo~kKs#-e3<-8Y2tG4zNdX37v;xhmA7Ka2j=kXFm>j8aesYIpVk6S@ zg3s3+Q+}IA&nNc=9oD5{b`%YM`#yH~tJ&WsokxUZ3Qc)QQVM?>L0Q(jF2Hj6%1NaN zkMd;p^l1c!XQn67cX)QpRaRAHSUZtwK_qXDXnr>*qdwyt(UO7@o@NpLr#T+b+ErGW za8y%}8&e>HzE20w;g%hOf5I`|hBYA9oq}cWFY+w$gVET_5nd;;q>OeZPc1x^a0lQ@ z;RlQ8d(BMr`o2>VqjWeoK7_WZn#Qm9hux)zcGLKD-n9gs%k8`NZ{JIstF@bFPqbpa zrr(QW;q0H-ju-&2rHiCE*Z$GsDq_mspW4sRHGUttk)!1JlPf_(@%O8R`HY1`D&yK8 zeGUol6RzLLKP9P$xQ}KGo|2lVT^Q{SzI5DGg$jJLXC2Nj7;fb~)QZw6AS+whD^S<^ zSgaL#>ZWf|eG82);fgv7P2< zb=6jNYQP+9@|qv!d$tWTAdIGYDJN`FT3z}gr=X0)B~GpwK!t((reZowVsaP>>NJuU z1qHs!}_VZTFtV@ltbI^R+%$Y0!^Aq@NiE91a7z7rOR;i}}QVtK!)6BYWlU zKs=T8n}-**C~RRtnSEM#>Tl1BKaLM`wSgXQ8f>}_GwrwzbJb$F{F76i2(?w&_veaZ zOZG~(@cprE|FY;q*10kB!|(rq@#O#gVPj(Zx8c1v^x^vb3q|(7;GO+%jPQSp?0=#A zKOuWo!WeuYJ)+3ddt@jH4Ak^(xPw3vI1F4O)KDMck=g;-H2UgZWyGCVyT5)Y#U-5yKBv-~ zaua?_g1k|)0;NN;m3ygE_@lr0n?yF6U$A_JT9YY=E4%wWsrJW{TuL`BWZS6zii>+z zL?9%f-`{U`;pG+gv}%;io9}E1EJ`MHpzzoQu__u!3)iY5l7P}|V-?p5Mx7Mm`(LE( ze}VSkR~NtSFLeulfwsusQ1`!v*Z+m?qo+n}d+AX_b~P_< zmNO1nT@HXr;DvHJ{RM5>`K|rVp6etEMAP?01ad5xvq_qpd;%Cv$W88rE2@#@#9+o@ z4DK0Z7Wtkn^z>vK9!Ly+>+@#eAy~rghP--U>)1fGC>fbL4U0V5fX0>}FGKc6$sV+9 zdu(!|rV19B9w~hexV=v3xoZKh@v6qaWILsAzE@b-*8Zg8JcOoLqL6VH4HGo#UUPwc zh7Yn;yrFgf6TQ}p@gQjx4WGkA56#96^WexE=!&x&mOra=?aW5%_rKKp7dW2~>vQw{ z#fiRz>u;#{Z{qUXr(BLeR6vwKKu;K94q-ZBJYg7NVji?O8L&nPtS9UMED5X#e+_r2 zGXc&o#x%m9JXCT`5LIC08N+GF*?%GwFL2{V5?}NEi_mlYjX6u$n%c=*TR1uYZ%iWj zi%tB~BZwEN0PRnJ2!6Dt^n4MPO>~SL4;6204CeZLN(jT%*5_^4ZGc5FE^VxekDk9y zldYWIORLFXf$*AOJ2mq*O43$h+u;ZXIE4Jq`qoqIRYLkQ4(h*z>2J(k$kD{u!r6(| z(b@EW8a)36|IvvV``WySB1;cy&nVL3isV|9zoRNOBPOhW(o0a|%2kue2R}b?Rvud! zYA*EE00zo31m|I6|;HZe7Dv391l zbh5MkKWYD~0W9>_(INcw5*g>x)tx2onk-0ZD+xu|;lV#1vagD<+hwJRxB+)GKAz}6 z`)!oQG_ik&%x$6@8A@sohP{q-)q&BfQ2=Ka%4huhm2_!!3-)!M72K+!>&%&d@~K`Q zHb^XqU|-^K*j&v~fwEeO=!`?&zDM&gUHX$2xf}VKp())X#9x2;->vC?HhTXRK>Yjm zu8ljBE5p}zCItW20P!Cq{4GG79g*#$M}*k+%I+OyfXqLSMhq*yAPfu4ZTC-%AyC;R zphLdCXU}VtM&EffjULYIhVRAlz$v=eX<_5M7nlHJ*d7xZh5KOt@ zZV9cSGlk;Ey}5G(Azkw9!r2)Vqe8C7N!^ri3Qde{$Rjvu#4R1{*jl@iZAjUVeZ@g^{QkfS{kE3VVYAJVYn}=+X`x*@@fF=j%u^ebHTL}exC;s^#PRzfqBrenG>*2qa$opRe(SIz_{|gY6`dTkk@M#a#niQarm{ucbR`xjjsE`7<0+huK_V7E_@q2BV_NXe6g286n%_z-W71PVEmC=_`7}OgJ z?y1?_P_-$>=`^cCZHM5HTMO56Zgw;a4}ZnEFqC*@qO>`X+Nghy>-e=;^7Ktr}uAqTPRZf9(I&m8V5GCfQ&DwYl+>Mb<#-19&xg?a{g2Gq zuLG$3YeD`M$o@ady%Z5I7*eoF@oCRNFuH5G_}1HlNNXRoxw5H3v054sXh5SPm$SD-Bf_ zCoRh9q##!OUH)S|{i&Qtl==>pbwA2LP^`VE05oru8fhbkmfiG`cx>-F}DA##=pw~{-MVIFS3At%>Dmo0sqfgz<&*il>a>k6Etu# z`CC@vU$8r9+Bn>b2?PX91_UJZx5oId&siW7C zN#x`t@|{70PkBk=h^IhPSN8(uleldYx@J{PYAnhe=qrb`jcRl{=gY=rE7}LkmQL1n z9F1$ZRV%n$)_1Opic$s@rnR}HJ4pWECc23?VPTbWT z_^XG0JXIez+Cx>WLnv#3Tjw!bHgIxTF^HKHGd-qS%QLK1qNZhz!M#p)nH4n%+wazm zBJVcvV(j%IK)lO`>bN##n#hpu-1P`Sp3M_8apq2(&<21T`a$JwCD4vRQ!D*kAN2aE zP}lg5QNo%v+)h_5P!l&!&s7^3ua%<(SpP?R^VsS&Y{<1TbdeRj7(AHsFt-?mO<)XC<71Oi=*g=Z0 zMrf}-Mu&x36P?l&mXR`RnRxm9Tw$Sz0Av^vcuDRgFmj<>*bqk8QG0TtTtF}*wB(N@ zV)7Ar#Zv2r5|u_13zbIjNMn);vvE?*335d>auo{Epb(~0XpY5R?D`Vwp<6(S{v^kAQ>yZ!v00dm$gi`5`NJ<(2R$Q$!UIoh%C}_bP5_hR= ziR4^0daL-*Jf(_;b4X-XPq{L25u>T9mHe><4QK&IohFsoUb zZe3EH{$p&k5q_%$29BRK0C1i|ssttH`W3*%p8trV)io+75u~A5HG~vah1PBss#Q0S5x#4Y|30G>hUFi%Zvaj|I@E zU1_L{H=uLN{HDyyOPndDd=Tk3pE&#TRZEy^h(e#V64Q%F{1;H7`m$llPWPibiOU0R zgLb3G0E-jn*fFyNXPOwozPd+9&$vIZjwW?4O3|@;BF9vkbv-t-afCTc1(RjXpQxP? z%SOxxVNkRfFnZl!EaOlT-CxSljg}4DavZo;!NtYFDaM*Qr3csQ!H|pJ&f9kp#z0oF z_|b{XvSW|jypW%D7@)wW!-w0ajTpJfr9nR;PSD-of#`OyrOSgBMwu-&u0Nz(XU!Yj z3sBsvBQmQCD=VopK+`9%RIiQA>cki!WRQ1;^Cy1GY`R*DQ~_t=VRGTHdu0GamKCm| z4M^RgNj8#C&)$iPf0YkCP{IzS>R8S9nCNm>fV#=W;#{8On7Fx zaiZ151g!O65)i5g9-xVa2ih~SEBA4a)x+1>5%kD@p??IoeqVnW678}mdh@f&|L{K| zC+QBFcLGvVQUb0lF!!%g5cx`IJOEl!L<6cqbWcVGT9<+XrX{iOxI)$oGuBWm;qC@Tl*gN?a(tXG+^NLCtNdJ@29*zXO zISw1u;fN`xp$QlZ!pgtrB7xHpM z_avArVc~KK>nV|WqQsDJnz=g`8kU7Dioq_xb8+0fH%bE!rP7tdyczt@CZR@raES>= z$w{p#e0rIk(49GABDF`+UcfaMNmR{r$#xL@h~(3^$fS0&Fn6I5z*M3@MuCiJ8N9a^ z(HKJp4Wdl>$PcP0K)7ehQBvV7qCjfDh=pNuEoKEvo+4gRjibrIfwOZ6{;9Z4$)M$; z*r<`AG};_h1&MP~Nw2mlt(l=w)cC6-3tm+OD@L*wUIL5p2e*i4YdJNk;K#W!{(Cak z)FX|Pg-thC8}4lUk!21CN;|n^Oa~JqB|a`Csp;dn)Hjtq`u#p^KS>uzYd*n;Zxdq2 zFf+QPkj&Qk#z05Uwt1d{Ixq^Vdz-^RrnEJh-5zoTAGDZ7KrMHye6-#&5Z^McId_|G8}P!f;@Hh50sSb#qCJ2zVM+2^oz?LR0bDd!)ez2V4MM1s+CuXN8NfqlKDcB`4D%dNS!AZhB z?n+|jFE~P>i_#ADZX&uzMw5UzYX#10EOSubURdmN$7+#48I(&SziWvhzD}%!i{!U4 zZ&*o6N({QgVdTFRo$~f=2iU)gV)WjqPd$EKi2X7cw=6~wDw$7P@C_xF6Psg&it2!NS#{7|VU|)I|R-{&A>?=KHh zy40NmE5y^@75U-p9q@Ok=OU8D8O&G#@o5K930=bNIAZYh--9)27=cpq*5rz&ZHLI? zN|{QeAn=zI?3%sg*BJuAP@TJgmNW=$9r6YG5)1zz++MK7{9&iPg+oS_3@O>20W1;< z$tCR{pBDFNxZQ-9B0g9;qLo&-3WXyHK|{f23h4qxXNsjM2`9d zlXdnUEwmo}3j@}zAlJ^_O)2&TPCBoV-_xD@r@Bdbk(g6cc4{N!z|AHm+)j?`;u-e$ zZhFMLZF52JqcM$zMSvED{cQ=c7>Ur6k))%{e}(-3g@O<9JERl7pd?LeWA43%<5-zVr70w<1{xq*Tc<@{YfodDwe;}Ca4}w+v4M3FUEqZgMK_1|j)N{cA zo1XKb^!6w7n}xxMp^%YTqQz~Yh8$+%7{2>O8ume~r15uRKb;TxPK8dLkB&d0cdsK= z!(AzQ2~|PakbxwD8-Z?MZ{Uz%Me(rN@ZVy-J)&5*Z4-EJJx7I4e@F=HBPg{I0X=E1 z^DZ;0YM%a_H)Nsj7z&;H=b0-s0E17$-kAl}y6zFPSrf~_Y1)s5u|FcLck_1X z9WvO zUD0dvESC$}@=eT1G-3FPn{x5YF;=7C1yy~&`-D&COC4jk2VCYt9wWUX@$B5V^R@%& zB37YPK~^Ey5zs}ZcH@jl?U~#o>)s@xpjq2HZ>9Q1`|E^yp0C%i;^V+Ge{>y<56#x_i2g zz2@83+uhpd+vYoGn6-WH_tri>wd;moDIxtsunpmA~8CYXGcsp>ra64}s zBTpTZI0>rHz(y42F2r)jc?YJ~b4PNgte2XdO9VK-GCv?c??;GvyEqjk zhDub1aHepZ$Pl5`7ScO8dX!K%-ENN_X?RhDS>)LOU4&aC!dK}!yQuGP&(F@cSjSAg zWNTrMHP6a#<<~2hca>8fIb6JaQh$hfh!ql?M}#8;3{#mU8YST+CZ#SVv!5YeA8+tZ zGcU?+D(-cT+h(5puZB9^ymRDjO6V=YlEq{StmhpqAzgm9%KBU#9W9O7g>SL*E!xFw zId(0*%f4>hz72F`eFA-=eoB0(enNase1yGMz50DeM4VpUK*3^I9)q$<#6dV3o1iw7zr53=8NC@BviusK_^wec#w=y2t|cx{xjDzZ2-Z_3;7y0C?W3KR@d44fBG5x@zG zf!u&XhYSO!3M>MjLhz+|mcA}{yjUHor!&`^@l|4?Tx&!M(K# zv&Bo`q{p-5IzP7W?32T5bCy0Ib}m0_uG{+^)8(4rB6+5~YN1fnk;QvPea@YG*F1TU zwdBmZ`C^c|P21O6+&1sBvT!h0`KJ=J_0TnI#YJdoPUpMZ*(OavX31Kl?UjqyGS4qB z!zYW4R9C+Fci-4td?K%});*8zO+#w6kF~_9)(AVx&|G$ zUMpS~=MNg>Xc>r_xUJ0h=Ent_Jf3C`*$ZA;S8{L9j}pg9vqN7k_HuGwLmz0)wdUOH zw!94R`cMs+dK*J@t}v$Ul)Fye7oXae_15|F{473GUvu!fzaw(x8h4ihe@ECy0N@P6 zds}R`2;>V0L0~~te0L^U=i{bmr}ox*t_Y6{AOGgnzZq@^@r2LqaGl>n2JuN7n|!wY z?n+auv!5pJwI48il@B3YQlKiL1Aq^gjrC>l)VptD05wWWV`0eYhZry&SnS7-e%I6X z#>HqNy7cwFdM>#s+p8i5BikpQC;N%}13Q6xe}E7&><=TeZL!I5W!@(qI&Zo2@}j|0 zXc(MXs2#4amv9x*eYgveZA?=1PtMzecs8*IT#;B!zSFz@X0_Fa(fd&8U?uLG$DzM8?HxZlpOy4tLiyP!uVj#;9qXv7G2O@q zH5s*;=j7U6|DNMu1@@DPt?^~~I!Y$vde5UW`;feGAQ5qQXkiAk1nMnvy^#GZto1H)VTdD9gjv@ zN3NtTm_o8|50z);drP#6K19vt&Q69zBJ&qSV&^F=i(Ugr73!3oa`FX$$K}~|)^)ZMvKbwh;F~ZabhthY_aZ}4ZimL>9t)x?k~ZI0 z4ju;{zn4On!Lzq=9J1R^O{BF|XlhQV=#^lp*12Ze<8xg}+c;lDu5O(%yL=x{owCdL z)aq#c2m+6XNuhIJm0!0vHCXRuiQW|z+B*;_K<{X6zSzZzvZEW(tTijKw%C~co+6{+ zT1ru9QIY7VnZ=fBM!VIN{}efh)>T2R;bEb2TbfnYR#~a@J|~rtI$0&5U1wy|)Nr@- z@yhsiOLoS%c%iZ7<}(Lz6Iu(WXG^{8zMCAZ)@Xg&Zt+q0X~SyW`C@rlHq_W}w^G}1 zwivSZyjH$;X_r&~er{D#b+LxjX|ypJmvyHnR;8u)c^X|}r@hJI`qd>GWpn*THK$4S z3Vv0mDXgi;ajKw$#LMn7v-)cNgW)X}AJbL;X${HFj(7QPyVPy9tL_@nW!T~Pq>X9Q z$9viNc?anteod?hx8rg1`H2=E$L)Olre;X4Gw0*Oi!4F5-OI6mB&aAfd-YSG7t)Il z@Mb@CvOL$u7x`}fl-|tb#T)bKzO_PVhVT=|_j3A0;V4#HyyN;qWMBY+j)E?$?Wf;M zB2{AL`XAxDk&d#~vMpcD$CE@WCw(KmCyi}08Mf9<_0OD-&lL}*%R{avMZ2sI?T43! zwbM0(PI|waHN2rzU_I823kSEcj$$v!tD-Hww*@D?4G(?K>wSZVC7UkYcbP7`%~!i! zKRG_^&*RCa^(MKlvd_-Br%b=_m!0FipF?cE^PkWAMXfnp?|)9|pt^oOH(W2Z$&LEm zz1X~bzJ6YHUm5vzeJFq4TSTGcng`4I8zOSpDzfR#Fn|A8KG-D6p=_b9eIV4rea#eV zbic1cSlNfFfM3bxP?O@HII?{1Zh2_YjDEwmWn%%`QL4|QZP<-;+1Y#8dEua(qR0rV zZeZ;DlubwaR8J>uVuVugs~Q_dZ-w;|P1U@Duw!G1G*3L9B^9xQlf%Nm*P-t(kYTd0 z@=5rV%}Mh69m{PHN1d|HEIgp^WB4JQqns}XF+)}o!dnorE;SpiT~c1GSon*Eq+TFJ z@+@sb8GD9$<99j>9~CztAvfpf`ONuLnr4pEBk9pk8eB~QTu*?NEE6bgMP7@f&@OWR-Vd#8b5Sq8TJb5Y#Hu}L07lGBX+$e$g;1o-q1TyR`1e{0T~WfJdfeFrTsT^QHH9!OTMct>b`K#^J#@^jG4={AV1njC8YO~ z2)4GLqrDP!#@*1HN$`sbdJK#C3fB?O9B)ge{~lwN4w@9889i?C&xDtCP+|vMoru$;`sY2VJCsf?vc9(9yFV3R6MdjNXO4oW?}?C>)-S?oH%ZSR zA=Polg1_uK%g9jszl|Nnd3{<_{bGoE+QJH+At7$`pDm>`WWWEXa3m~V+Dm~i->CeT z{0p)3|G_o$H@&0(9*`su5C9X7hUtxYiQh*j$Ej2xFdnmZ&vF5fE;hB{^> z4p~cR8HB}%DH*U!qR*nuuXGcWT1rjN%^2kF&WoUI^J&cyj&H! zSTR`$ersv2>aD}~>LD{bTfF)A3gDpx)H|J6;;T>YslTYcT{5vxK)_ZQu?5L%9waeE zvSVg=RnG%bbum42D~^qHDIL_qO3b zL|JcUjn{Nb$-(xiQ1NBRD+2B1YXnHxYY1P%gAEw;)>rStC;l zc>GmGybwL17__Tr_yRu^>W5}JqaS}Eij1UVdrUjPAaGT-jUrtd#SC*_vbQYA=3OHj z(+R1bg~xM_Tkv-w?a9b;HqBtUuo+PU+U*3|7LZzG&6){}WMhdU+pwzlxai-y&finFk_%WA3tid@0 zXbC`^LD&2*Du>VQMHE~I#D!B5XTX*c_uhycQ}d}hxH~79W8h6042dT&r$qL#rFaG* zQQ>Mcj&mm}Kn_p24UR3#=fY)#_f6MW7tCi5Z?Z}&Zg#@gON3io(TQp>o2XezElYWp zD+Vhnyr(l_hVe>Gotz+>axv>Fs%;(SRN;K6e~1ANf7#gUL|Ag4XpEHm;e2*;AUqr0+AMY8+id-4HII)+CW-(vko-sInto&#;yu-KElov)u za(mnP#c7XJ$TGoh2o55$*ShgLqtKw#({3_$ZVb6re5Ie03$|}i*X3*n%$5AAWu{P5 zH*mM06T^VoYJzZ?S0#!FagCWdIE2$ifpRx;#<;5!>GBQgSTXjNU8BQs zC^(-MO@>EQYQmGH8*T133Z8Ii0h1N-1a`Dio)(Vo4olPFtK!Yl_YRbI?m|lJStX-5 z(nhTj$eU4jqiQ?d!$PT#8}~2+*HS37c$TLpBGeC~L%d_N-zHb|xVy7q=VRL-eFC&T zqn!xZ`kd|=SlirZkU54$-5Rdg-cilNonW$RL||zP?Zb%E3tunXH)zpAOrp+McTfkI z8}wb--ETLnyIK7_`eA>t&7S`xd%I;eBEBm&IRhfQ_HFC zg%m^vI(}-^LhpL6Im^lSJZT% z6c|djY7U>AGK}#Zyw^Fu!@j{EJe&+1W^0<;X4y@Sy)q@897R}>Z)MYUes1afSUNea zcVk^Qo=P}50-1{rC}P&OxCkMsfNS`E!6v=z6@T8LT)QNXvrHvZT>sqhn7vx)z=jle!2% zB|>dW;ZGSm%;=^S_%(4mWwZ{3iF)b!_VF?)S|x%b)iECl99O&ACG(D@cTWrQp=x{0 z*4IFT-L`3i-3rl@Glv1d9Ka@Wvf%;ViX@CRQD{d5z9C*Hv-_(w{@c~D>L!fcW|`}4 zY2TEfjZe!fhIAi}Jv%#*6Z;3s=7fJ=dTV5XO&Oo{1D4pZ0c=$n=H;y$svd^jetKlQ ztsaBwYrThS6P@CH-`dTVby>T;R^}gnT+b_z#5VK#R_K+nCX_4A{THL&se1 zK{Zt=RNPtsfly4;qPkAEt#0v--T{sS@hvq!k}D1jyXMF&BLcUs{1#d;xI0^%rJj@& zj3Ix|x^1=Dy{5X&u~pFMSbs$PjH8s>4{i0BDjPm3Z9|nLQG181YKBommn5NUr0@Fp ztdswIDoex|GB{1|N3W6jNsLdxE9jl%9`}rS7WpUwrr)T4uU}*r>N?q^sI-!r3r-ru%%5VL+8&-AK^l~)o2wgq`-eSL zGpshSX+T+bTQ{yfoI8U1_h+DI#OH6%n9cC(K)k@b;I<%5rR`(q;*`z#QhV;OP0v}Z z>#Y*g8THmg3K=^xkDo%nK=9iV?wta?;ALoBGCN?3ogqN}%sP`Pyt%$0$a8`_-1Xv= zDofM6N~DA;eVE8$%S?QRN}!my1%4`0z#zSIi6^>4`^s|Xc+<%hQTpXe^-^p#BtYJE znt*PRPl_`lg*biwTTJS|$Mm;;u_az8t`=+rARvhEKwsHn|80h+lCy!ci<5+roh_}i zh3UV?KgWJCr2iuR`6A7OTlwt!P>z$SnKhHqIl#xt7%FIf`RQC3#}oo3G%c^5aAc8m zL@~YHH&otvoBl8xg&tyJjYFg)D)R{(AD>9Cc zT^BpDZayky4F=m;uXh+uI9yjoFV?(YdZv3K48%5L73A^w;_(PL>}Mr2bqP=uFJ+nO zYiEVSD)=EpbyXLbX{ ziE*Wvu z_#;=JIN@zpyexr39;7(IO+;K$b=EY@HKK(m;NDHtlJFEzWBh@I&?0o(s}Kwe$q&uv z&hd-A;CmL96a6b|B{6a$u*TH&+qnML_od#o1R#4L#4IFQAbv`$8!o?`vwN)1cmF~J zJzsLYxb5D^1FZg=A3)nqeSP5Gw#+m${r%(J-@d&$9^D!m7(*~{`?kj>(%3l2)59%A z1Ehh}{ey#Rk$1Vh@!sR~w|Di$r1%57yO!TN?U;a?P9}Akv7bMsBhfIX#0oD%s-ZFy zy9L?tc8-aCe@^p7(vwh24p-ApCAk|1ej9`4Fw8jej!HKzj9X#gX6^0e7^*Q^7VHGr zo96om(U0Qo0EB7DpmubFS@OXdw1fGe*9PqcQR19YLVS6{&?2hy=oM~!d0oFvebpmn zFoX!3(C0N{(Q{XDt#Pp0Z9$6n&VZLnH8nQq$>nfL$mj6p-JnWBL&KgbTp1Yb54l|g zqW78D0uYbWz)94m$A_e2Z9K0*2XraEV8}E#&M{xU+e{ExF3D~AMMcp-`ZEOVn-0n8 zsUrcwWdg_fT+bCLgs$@rw=Qg@Iq)d&_(tsC?NJ|1%1BBwZab<&^ag)a^L;hnV>RLi zHE`pb6{n1=2HZHS7&n* z1VY^O2%zknd;7=~_*|iC*HI_7C+cjdySpi<0lSHqbLm|}_E?M{n398z10ChZI|kyU zhdAtprVjwM2hZ+C01G(q2mc`e8xAR=08JcaHVi-rQ4i$EpWVhQkBAB)!p|)ZR1w4~ zz#)&X42$PanYTBMb^K!|~o^sccnOg2pI z&kpxNC5yrdZws#*V2ex*Uy9m7_9GIAn@*~ZSEr4qRv>Ut+zsugk_h~j@+-@@cpqW} zd4ws!jfCviu%f79wjzUKi=v7mo+1%3u0+&6zhUC61f)c&c#tuwMwYdhX*^pzLVQ(R z7`b{R>p)0tLV^&7=t&_!GV#}u1f+OX3T-?u-G-cqLPIg_y!ol?DU{{+hdMw4AR1PT zRH{()Fl8K416-q!T8vezQS~wA+>9gRXOMQ%x@-$X%h0X42aku{3-QbQt=hgGg*<9G zsyg%vG#M&Bd2gg=ByXe@8Um#&g)BJ*6$ixt1sa8pqUUdE6;sM8@((47JPGLW~_|(3@_$2W~{~$+9i7 zRkW(9c{sn@Tt%}3d#Lan}dWc zhPZ^VfPjOrJG2~!%WiYBU0bIMEexFr4TJrT9S_iso&{t8HnGpJ>HtyzFPVO6Tp893 z<_y5ZT+UE>liwzfQf*1t3HqGs9N+l(#O{RUxNe$NT3Ff@OV?N~eLH3gz!e4%QZXPJ z<%FI?Jwg4FLPqV^l&>YCp`sBzzLY(c?q~jy+mPW>`~ZCR0bUPI2s4U)Pp7Pd*;?(r zqg2S5I8m+-zjnM@Ue959H@G;>y7^dt0m&uR_TY+fuJ9=PxbnCGPYmf7W*9~mV;O@K zvk+4tTPSOlMaypVbK|EQ=a!3tqd|*uE1)%_tqbdQH~3*O{eh|TBl0q)w}h3;~UTY z(hbIQ6NESzHC!?5GotzTG>qjg_siXfs4DOgNQWToAcr2{9<&}5DcqEEUB>!(XN$qv zPLtI!Rk|~E+AeO-mlrf-DnYfMusy+Gp~@lBA)cWrVY0z3!545iCMz|M)w;Fm=iZMn zF)U=UOt`jq*%-XY26#18yCVC&!-2zU+FZ5_Zq~o=MrV`1=W`dpi}^&u11h6?hJyQl z?!>z*w2#${)|4694W0~{^gmS9YBzW-n737Dg)_j>WGl6k-eOPM zO>!hwA!ea`@XRpK)Lm_p3CPTtO`cVng=FKhshmWd3ZH6j8?cnJAmvQVT*)#?P)T|q z$;{eFH%e2AV@e(yy;!%bZ?HdGve{W{ZOXLS>H=*GYAUch>dg|n{dJpg2jS*%UOH8D zV0P5C)?w%-*3%w1%k#qv%x$(MF7WrJ(mIk!{0tbLo{QGd7RC=3L?;l20ycdcOOkD}e!zV^O%G4B}dO6IEa za>ephT{tzEQaxN9&-$aZ_nJX$&xrs{OB-3dVwCxJSMGiHEvP1x3NkD*D_M)|Rj&+h z&Nlo~Jte+X#FgnS%z5`az*+htX<6Z%8Qdg3Z;@x^e*68)#l(+^lLt<8eiq5h6vwN4h zv!b?%)-$`bE%Wo5V~bXfPt&`KkS5yA#x9?RrQc7hSt4$>k1t;}x7zM)KY1QI;@@VT zhVY4b)4bDezul3))$H#Dl0|+wITqd<8n?Xff44Pe=-APr9q!g>~} z4%chYbOUwfh*)ANPHw+eHty4(Ges2Jx!C%raxM=Uoub8;ZV+@9X5MBue zPJI-hgP(`g_~`1Dno;40fE2=O5*BMxK0fNK z1)+zOLJ#5&yBnR#L?ahUv1`Av@hE3e_Cma;CLvpXl3qd-f+tB0wTXS|NL3i5N9?wN3iX9Pru<)lvl7IB`>uW|=SLfC9hbo`XM-Ca8re3UsC7zlM51c>Utx4{3A2y0olyz%1%OgP6AjYGgu%BC1KS zc$7B`n#S*>_^gZf9HF+(g@eT_kB``?yQDV{zAF#DqxQY_z0M7Rn%IG9DAuloJFwH0H};;yxQDoPHjh7c!16lwc1FdY z1;1&c8X9%-+wNA~|M(zcP9U>oj`QDMb3W?$z4!7 z*9j&xSdYWsd;Kd%Jp#sxo50jw#~;j3SN;GvF938f89++j*e2vmAeI1xQjV3|O)MS9 zPgr2+kMrlH*SZ}CD_W0DJm5GCfB{7`bFFF59NL(l^4x-{24ZQ!1a1fn1d^VaT18NN z|KkXlGhj#cdHk4P0{=Ql9!S>uRr_T zP&R+R-6g)ZZ)O_&>E`Ts8iGU67F}98Y5A4JnZ@&%!rDenAbz>bAcSJ2D|CKqEk@PT zV)ELC?r|xjY=~jV*XcX60>BZovPxYJsnAuVxi)=!b2A~kN*SRU$LA@lsNAF8K#rhk zO+Oi>TOHD<;}$vvi;{N%?>fE(0J~+eecV(Op`vHkwm7s*?q)enoy0JOZRs?f>bpDf zco?bEqld&clMBRo>>T6m7m$C%hPlB8+?+#fXzY?ooJ~vBYanQEXjf^vFW+mJT&UlN zNJne1e{6WK&FYcWzJld(qQG8ViE+Sz-%&JRPWX0R$Q0H)#wRJM7Q7^C#f-(`*40>N zeD2mD1m%6e=h#=~LJojpTldXcs1!0}aA_uPwR1MnIO^Gqn}o$w7|k?-FJ|*JHX-9@ zN9tbA)GWBGd)LT271++K?#G!&BOPLJ+2~Z>u+9gIKsZq`eB8Cu?kaM-g=IKc!YMiG z-oL=8y&vLQJgUz!eTD>239TG@y@JarCB$Ngp`Fu>YFp25RPg6qc^NqgtBqtEXuUIS zOjK#2i>>o{i`y8JA5E7&(R$?{tZi|2o!op&)W?p1L2wyDYk9-vDXZD_xr?e9n_9A; ziFb|DtKg-?LLRHpIQ<=A^CvURYUNuknzz+Wg^;Z$13%4%U+md$8308q@KAjjNo7+# z{3&`W($9h{p44B>coRl)IXwiPjsb48QHP?Omlye?fQRRzMTtvX0OK-@dP2^LhE(tP z;UAL?DJI!u^nJ9@n2i>rQ{FU{6vD<0FAi|O5N_nONI&bDD?ob z!w>tY@zbZCHWPV}usxHhZP$t^|w z#{!SZE={YhHqPAo;*BQW5m$enlxys6%Ck3gWN_G7VuCk#7Q9QAj8{m#B;cdx?L+hM zg3cr~hvpT%HoQ8R4v!+6!(%olX_%>f#wvPTs(1k4vRj7 z-GqgwtJ?Ls7FMPcHN&vsbQRf46kMvN+aj@=I-zY8*&1MIhTY64nxUFGq}_GMVzN#q zYRBHcgh;Zi#Tc}Y(k z2cTuI?w{Wo8jpA4HIgM<)$TR%)0bLu*?4pRAHm{0WNu0HzHg!|>ij+;dMOSQu_Vcj|7w{*o z;g%9*4^cTghm+fxJBc%;d_xyS%~Z|DYxzKi1a61K`c+(5z8qJ|3HsrftBEN*9m0J} z6|JtYMuLzw$z99kvK1EA_n+>0=nNjDa_KIbXCc<9j-A(=w89#d$C#5Z>_BhOsu){N zcTUC3`M`kFUl=Sh}=a$P~IJs*|Vb+r$wwJTNejap{uw>({UERa6+9ii(cJ(NC?lVkPv~>S_$j4wKteWrlW?7SGg7^F05ESx74kp zr?IhdriF#YHcLy5jThE)&zw1|l!q-bDgHe(-`gmCp; zRGm)15no^5y^0k>-a=48{d_4Y1z`~pb!X?CCE+%a_d~pH!B=~BJo zI8Don*A+c)N6}k$xTx^BCf#INwxY8=IGDR&gSbH~6nF&2jl4sU8P*)C|-frGlU9Y)eKGy8jzlf|SJ6=!u<9EZAg z45g%0+O(-luX)cD`F3r9nO)?~{rmQr*x1?S7KJ{qu1>C67PU`=JG#y;(?335cuDk&w=N@R7pDsybiMUzy}5a8H)nX%ie-HF z?%!9}(&EU>-+$sxgQ^I$vc+QHP<2g>=fh@w?T0Ge9ore_J;-)I@9AXktbVXo1j;;> zEoW_;o;#TJv}`@y@)S=VT0k;t!JOS?2?O& zj5Kt!u~)2a!{(D-MndU3OXzF`QKe6tk9yy#Usd>IB`JC6h>1z9ed4Y@qiv@ubk_+` z47KT5&AWyk1_1P-jQX>)tj0vSo)lf3)pP2$t)Y91>qt3u24Bu(!F^gKOp zcgw%(Hic#+Y#%j4uOiG+|#AOKMevEJ~|GkcuW&nEehQIFxzXb_C?CesmxTj61* zD?qKm!3@6&jE{=J!_{y+I*dO6J_wEA!@`ur*DyhY@C092H37gIq3Hx7Oi8n=V3iJZ zi4*+bOW1*kj1RzJ42eL555|tiW&#~^u>vx}1lWuq(+h_%gQ9JjO?|m!q8EHNg0JBq z6d0labTFRa38%{60Fbe|E5r#vlpuycBoX2KA_=^L^MC_@#)Gl~vxQ}dWP)TDoM*0p zW$;z~+g=?kP8+~k>JI2%3v-_U;Sd9SWwTn~@}LK=gOGA@0})68c}v#IWFJ*X6{|y9sztTg#)lYpTf10d+I=QZ|b)Ro^+plF{ z`;DIejjsNcijNrlTJ9u&Da+M-b2KPMeIYA%ek*@oi+~~8{+--G{46t-d?&+=?K3RD zm)r55WtQ6S^(MB@`kL=$Ff8?1k3a&(zKO8rvrZXn4AWD3^R@m({bgFr1^=(~bryVI zJ!LDtkVhANr$Zc$75yLeR?PQ0Jl+snw?QKi(Q|$zPkxqsVnP=;^P1KrMWd)0hnrQcBja38mTyq$=8L(+uC(qet9SSwZ3aeq)tQt6} z!m!OIvC(QkEtITI9@E+8hTXX$MqRYq`(kr|{p_7@4`+AuwO298%G+BW*l+bN*Ri?m z^s_?(+H&e1u_Inv)!aJr@>BBtmF3eG2nf93dQ=k5e~@6d!~vVAC6vY8zi|y`!4UeH zvQR^upC3zXOiX^(fsQkIvi+C!pz|$^sSI{IXLQu%?reK{`PRv$`;vo0L$_zx)>J*s zbIF#>b6q#E8RcQkQeFYjSd(0*$~*V&$uM&8S{Id+%#@av7PEaEe@uE$)2i6ycLooqxkQk{ow^Uu)Q9=fOR(+R@7yJ&*bOFRaeA?@-U)-)?Y5wLrC(^H`hM*)z3F zwFfx@tYS`^K#DnSb-9~00*G_ctsaIwdZcIbH0`XKhQ^gUYdc5wG?&fVlxcT5FWiI8 zig9yqef6$fo*{4kgNt^Iq7Qmsg(uSYo?mygczOF6nkj+4*~L^XuB|3hThcUd{^iS; zqpD5m^7{L729KQH40+hod38fVBf)|zw^tFDOK1PP=Sh4W0qZzj z8l^5QWKbR;F1US$PnmJUMdNvo6STv3KDqd;WnZ4TFbAE{!_r9ELy>#f7ljYsd*X{; z_WBfEd}!zWFbVy@cVnZ&DvlgpEtM%E1gR~d`UzTZpO}`Dj@q0Sh1gs;MAJ>L?l>`j zW14aoF}2fq(?dpYPQLZ~8ogH-sJb+Y?=wM}iLpP(S?hJpt~NPG@!gEWY1fLJ-Y6{# zb*+#QOLa-PAwP2-vF%vN@>j7UT2cRy7Fsf^)WnqLIUUcSgoN<8WXsF6_jz8bSPWmn zZ8HH@>-{fpv#-|H4j12WaT(9kfo&CKE=JtuC?m9w{wjr(eq()zxSA={JVNPc9k;zF#U@TiB~M)s>@2Te`cizK0m`~}Ukt89Xu|>CSS=o0`T5lt-@w-` zM!KG518ZjKLnj-z+)`VTa}*qzCnml<5>*x9qZh z9Itt=N5K|l%yZyPzHWk#W8)$1I;$7w(OFM@&-c8vJ9bxkaJw*;!6bWsWu>uNyp{z2 zi74J>2X)G#l{&Hp(o%sINHFQwvQS!S%TzA<2v&#NqSU8swK0>Bufz zsL#U6TA9<~)!DEjV)0JlTi%=^tmn}IN5u+4c37aS2M%SV(diUk+LCK@JBUw;iGx>% z<1TySyg3qqWkIU>s)v@EpJ22_ah-V=wz+yn8|wWKoQlDvg}nPBg*7A2M>bXTpUz8L zaaFjnl5Tnx@8jcL*EM$3IXZ;Ol(Acj7Tzri0NI8mAqGaE)J4vSn}7#y3KJurD$qw z+*XbDwp}k`WMX6#5hx>d*7-=ERhw~*9^@2VpQvQ!nV=mV*4O$Z`}(B~vAh|ss@^%X z$`*`h9pf~5o)HIC6rAZOx#6I-(qW6p+~_MCP1B0bmUxDFXF&}c5?t?IMAxa6avN8@ z@Td}u=Vax+{UR!aS=NU|?(qB67B=m}cMCFhCPB=EAV1TsuOemb!@9foR1Pm%am1rR zFZ^Zj;oZi*yVu@h7t%rPy&Z4w_K-0aQV2F<5ewWZW&iAodTFk%uCCb78ZE7`y4=I8 z2e$I?@KiXB6ne7CSUw;Y8`~~Fuz7}Roc9x1( zDPwl0G|zY78DM|InN#%ESD~Pn5U=Qj^*kfTwhVhLG-ZLESGDk3KG%q>H@g4gJ(~AA z@(rNwKv}$6UR5P1wqOyuqiN0Ik|tuKLw)*3(EYrE$8VmU-z3F<#Q>roCNI`YD^zN^+~vGUdw0Se_FWcc4g0yH_JKq_NSL)^9;`|bUTkyIHoMt zoNg9cCqFCZaqoV@t+y{rf>In^EG#TqtXU6-<_Stm>$Z34avvAbUaxP`H>xh?mHW`) zq#rt$DXu4{3mlJOemBb!T>{m3yu8Gi*Po=MaWd#`&zog|l`T#KR&JqYa}N|TRTMEh zC9rMuk&#ShMDfwpqn{VdqZ=p@v9pM#drzl?3WK=zq}+G40I!oYSe4;RJ(?ko;0N;R78uBM)f^=-CUDBN&_AEj)JPHIQ* zGeHLL!^o`g(<=FgjWI|VfNCH&@E-C6-HO(GXlz;nn8&<{o~#^Qa+D9ko@Pz?vrr7Pp`{$w;!u$}^*A_3LLL|h;o z!P^~F!RJRm{Esk(6hubjmkv@uB^*Lmp@}7gkWs{&6i@+kbd(S_6h6St9Xx_O09~gQ zo^XPUCdl+sz`sa9g))W|4#&@>fQLx@tD@LbaQp)lP=?S5UVH?cyb^qErEqk#2Z0a? zpE7?n1w4S<0o~XE9Pu<6g^Q(t`{R5!mUIR_eisGYL*hGPNYU`|E8wfXgYd&xQVe`S z!mlZy1mS^r(m67UR7e505gJb-#==LRLZ~}H7tJA@hp8h46eIM7G(L`u!WvLO5kiNw zG4XKPitxGJf;q|+lK@|tL?;ClBJvF~F#*ZD1_~%Zc8VlYhlyi6JGZr@-u!SOffbe;`(DQ!z=)a3X5YJc$gBd zeW1_yNpMQUInO6JDjbdsCp`FpZp6Zov0EtMI+9PFk_05F;}npI)Q=)Eax7`)eG0e+ zS5Q<4ax7uddkV;aD>=GY5plv;x`TA2`j#5;!ZT$QK7|5vxca`f=fjY$zz2xFrGU#w zjA%&=F$1R7{(Jx3@(ONX(TpY_5Fv~hcJ1tmB|OSY7Q|EzHl+P^pS&67MT2r z>Y9S6<+DjJ#q6PgWJI*V6d;WbZWu|3S}#b1IZ>#I0um9~19J;5{u>B`)%UV^KQbMO zNQ6rQh52V96uymmkY|txcnk(ds4>V?xp zbP8bYUO*rdFa$Bfz+0_wkyQ&4K33FtSZ2y0VDXaHms|bd{KLQsLA-rJq2Gtoj%z;# z(ES?NOGwLYM8e$wdL-&@FhExb5s>CFyAlaK1!o@#ZfI~xmmxd|xFMzMizB5XP3SHX z<`2A(utQi<%7?H7xK8?whvA9INVP4U$dN!K%#Tb+`jCD;!c#=BiAZtPBlioqYE`Yp z65^2}XhUu=9)Nx*P#8lz4`14nA>CAGWc#WmnII1_ei^6h7~B1?awY7~cpN=5t}V^x+$=JKWj91s;s`n7E@g zBjTV6j)FAVW(wRVBDJ1Ka)VR1b_Z{f$c9)~B)4x-KnqNnN@l_xA#M#^6MmshzLp-*F%Rgc>Py2VHRfbU{9F z$LtMy;SBDBV*@C9y33yKvZuT3=`MS^%bxDCr@QRwE_=Gmp6;@zyX@&Md%DY>?y{%5 zY?^i1AD6WYi2bjS>3;jPc$LmEr>Fv5>^gl7@F-U0su&>Yc@4L%|G=8z~Q1$Pc zvu(~D`D$NeA^l%;$2e4exARl`ueo#Yt^2{w)1tqW0nC=wKX39~?l3Y@ zzdm}Zm=pW$e%{X*`oY#)+5%HYj$fmS z>DQ_LHWsu|YY%$o(9RzBm}>iPpT3$3=u#(P4|dVafA3`Mzkm8|vXFm2DgSgD*>nE; zYp)-nltyC^>h61=@#1Gsfc-v{sBZZm&^eP9_AI57vdL}UCb)Yj- zvIiPdwCDf+k!z};@N0{o!g*@;!xB@oXL&j`{~o@n`Tyvla%%9JdusmYr|4fXwPi?r z%M|@@OzrYFP0=1iPR&1Qs{Z?@WY6={1;*cj)|C8LP1SyIYAY}SQ}u6P`?bkWaR1j1 zKS$I)2`~lxJ>ospP;2Z^)vsSG_^0Mw)QFX{yI@A zU_qrlPZdq=pHsW=7eQ0|uigvxJJ6i+Sm!I$a8hT_MWY_~Bd9HXFWTCdQrYu~cGJ{; zbj`0Vzd{^M?Wz9SYl>@3-=c@wSx+)e?Wx{)AUTx<)*pe&Z=J$vY!8yDvL{VpdHu(D zMpg6MMQeM|PtDMSj&>u?PoSpnUob>_e`=Opj?&&9L{X9bcm9As70YfS{l89*YCQV= zWyh_5z@D0~JCse-bE@l&wCFSj@T3`11(z|!L{jP1X;X2w^+ zYo;Wx;pBc2n^06Qsibzu-A}|4A?WeTB&{KhtRAo5y7RA2ZOzAKEp^ zkzpQf>>+4X? z9V>19AxPZ6o(lg(MN9k+K`_Ypxa5w(_JN0P> zdZMJNftiK5(K>lS4oLdlkNls__;orog87g9!~dE+g!<7p)KlGaLJelU`OdzU=B@8% zu=>v5|8LqujNeY52POZiKcw-^%IWpL@Zi;#Kz%b*pW2p#NkHwZ3@D}Lmh;~NUD22R z|AS{wO%UJFi8(B_E5Eb=*URw}7{C0#_uSX=#ng5e#kC%R2KIoJBb>u$)bm9m9 zqyH0o2;v#vBsvmIqiF~AK(9TX=s$_?yZ=5u{%Z91Kc#})w^7jePpKI1Nwl2)DV6D; zQkniKmFb^S`N2=AERdV{DV25;)*QpfRnfC^{b!4M%)TSEW}f=$;KIIjwOp%fH)jeg zZ*;<|^!tkji^mQ1s`rL0kGqlEhZpKScP_+F=WT62(6)MVJ;AYT_Rfynsxv#=rH|bF z_gTAQmGek5**xzy?_;8nx-z#8Jr?!(&mDgHzZz33DoW)Kq z?V=md?+l0yT-vgE#88hO>n6$%c}lTeWIe*W441W2A_$Jp0awNu6Ji+Z9b< zlBK^1ZDFb7e6KQ--`P=vl5k=@eW4G8y~dR_dqAl3NyByo3-Q!R|Vc62WW9I&hAojxy86*FyK-C*&FK(f?3_2QOdUbQU<*`#T z7Jh>RFM~=6rp{Zh+12jY-(GF8#O}FuolC!o&9(lsIk%))p3Za0Uo3wbomC}3GMX)_ zx5*$^F^g_syOLSVqaZ$|IOPx8{E{b1`eKSt~az-t(UQw!NR{B)@eI{>nXD8(NQzM!Sn%BB%4M8XH&Njp@f#yTAXmGwOq$t^bg7`jYV00^HeP0rh50z=A?w zTL`!Td2UG$*(l?1Eoa&e1A7)r1~N!O&`&4g$qZ4Rd)xb=Y56ijgJ}+e`t%M(>ew)K zoT0ccW#(#Zow0N*|AIMPgKCkcK0SQL{?%oy&&UDh}PN#bUW3acP}Ff%&K+o zAe@gf%S3*5Cgh}_mQQ_(mP7i}YwLHt!uk|@%9yOo@R19gxeC*M+HOFS_T+O^Vdm0o zSY8rf^Dr_d1Jr9zb~At~=uZ93(u?$5^51B=6$fA2wNLKv+KkhL(Q_+0#9g}P*2IKU zUcYLX*=Qo?pc;|}`2g)|$xanOUnDO&r0BF+$fdqvbfnb1EWq6~#~ZwBw$raLGhQ5m z=rx5mzc}oJVaCla5Mf0!{N5Sx0S+b}km3l-tOSGwL+v)mme&X#e7anoWmli1q9bHb z?h-N)>rT7an;|n&aa~5pIPQV;yd=0;J&;oZ`GX17_l7yOUh_!lAfKLe)79$d>u;KJ zK5TUSylU4rE*7GkQMl=y=-3rS_d^CvWJ3tz`Ey{9;cZ(TI@AWEz5-d>iclvRqN~{9 zcw0ng>H~5iMgQA%g|yVl7{fH-2UrwnU)HWzE7H89Jj>+h@Txw4U*;J>q!y|coh)`{861`22Bl&|$RjP8yq-nWyE0plq2*V)Ql!!gwI{al4a`@hx*k7$ zhA}Nv_vQUFxz>@T{FHN(6ey?OrHjLKS}l#S)gS||-M=ohi%7zz>8YN{C-T4I5xpA9C@RuhHVxLy|1;DUQk z6P(c5?H|Ive0=mhcdytKzzIWQYWAt#1be=h~|`8zeCx;JVOEwJNvUGUMiRF<=53oeqD!AQxFl${=BI?zxo)+TUwhjP3g zVctqmS36!2=ljf$^l+#vun*qLP`jM|b3>`4)Y!9&dq!!;UJe+L)eWEqFS;;%e%#?^ zXN(>EX&G|dqyMa@kV{w=n4)_j<)r7KvAq8)qa}Ft<8!xvXJ0mh-}p%B_kpU8b9%v# zH+O%&YAk8&g*~SJLiIv5yTeSN6>?joF+6M7m0wy@R~ybh&8MG9;?*A~Wn; zGm&ue2ByI`hfuVL{Q%N9-3)KPZHWRkk#Rv5z-(q@jEW1Z{fxc#OhWi#UejLF=mPo2 zljDlPmZx=rdqO{{-wJ+g3otR*i|`7Ks|G<>{_Z}YT-2Zt!mDfO1NY{>PfX3YyjCAL zINBEHi0{f%@-9PIQV^WWK5Bj?HK$&cT~6EEZjZiavr;aa5Z$d9yt_GXgc)`uSG+jK z6Oq6Kg+`g2q`@T+r0_#O<`;Y`I@L|tL2L@y8P$3GQVxvB0x91-O4doDMD^mh;>bTa zrnzX)Xto;0R)Gwt)erchw!O>$%5BQo8GZ2mW9|L(anqgXER(6Fw0obqVwMN;#aU~w zvCGu;fugbr`#Wa|`br|83DRP+pFHH3}@yTLwx zY+HS*#V{E4#8y;W1Y8t5{oYc-itV z1G%3Bs`EzVCl#_h{{QU9ZHmxszIaQ!3x%-jiA|f+-Z-@=krSU+rg4+V-lr^B*EICY z`|r{aQ}$AF0AY^HXDyk(>w%s0Vtx?qOnL7H#XDm9q82n*n4Mq)w}C8(_EV8!(2==p z57`w{5Xk6mFWcSjgXI=$N9RaJukD-LW9}<~9iWy0*Qu*m?&nQVAxNW>8q+O0RUOxM z;kyCSk#!pt9eHI13#^KU)tS#hJVj9Jq90GdRo<-3xNGlBUxEy-6@*q&E-o7pxf}|V z*oIDzcK(#-*|hcUS_BJV$+c{Z@4R!%fDgwFI;d!p&g#RcGU_2ZQ-$;jtfO0Z63^rN zcL!`U%)Smd&~ z_02zC0hkxGikQnNv9S*}?I5B^CDlE#+uYuSt!}=tKk6HZ_yW8#^%I7rMkBaL=~&xlcy;LJob;p!_Qx;@`b@(pt{S$GU7$D62foEh zfk$q*0mIYe_28ldms(<*$>jLX>aW&kGC^0KO~Z7rDJeCkWHF&QQ49Ei=E{~hk!}8E z#BS#WzQ%T@Cv|4j^q>MN#?%|22)J__dqAc*@X^*B`tR+EevXj^n`r`>oJvWJey&w$ zBkIK<){!fy+D+j?#q>h{b|TkRuS3VYW0Jf!i$43Ry`ej3d&nfJ@pI8o(mu6W)_?oHjK`EB&vCbIuRZ7nsOt116Y%qvK0uH+d}y((M0_Pw zz8tjEvRu#r}0*o9()Tf%}WQLjDA#NCk*{9t)NO)N|+>+3^Za+x_1;o;Ha!TvJ3$fb0f0RAzs=;$? zJm_VvM~6!5Pp!}@UM}i;V&%G@u!?iw;bOear0g!FLD~7*UF)UD+-lv$E!x2UTxwewPLMEoG$#SX&W&YWfk!Bm0{Ca zSqz1^2sdaDh|z+a+zF5aLQ2FKYMw!kY?)h7X}iilm2}cDJUZcxIW}t zuGiVXwL6$?;8>T`gOAx;bKN#JY%C@%P_$S9n-}Gnx*nHtT+SKhs$%{NlNw)yY;3q~waIC6)Cm6;?v2_1gcg1* zUMybT)vkjK0_mcicQHDblX%69u4$6eITbi7tXpx{rKh%8mSp4ij^pD~xxn2#&+{6g zbBD9T$rXu}4A`$CJM?4CpU#lB zL15@>vYLyZW}O7@iXZJuw~;zGw)%;5_j(RrJwGO*t=cOy4V6}A)Mi` zPSz4}p`%0&8NJ%WRA4cNG-Q&@m+j_*wQeW36LAtOwv|BVdoAYs&$ZgF`gilup*C&& z+ZJ{Y0LCJa;%o$S*)kyS(2lCXx{AmFo${U6Q-5b(y>pL^=(BDbmdPcZ2ezz2Xj;E` zX0C}@90d*&J#QVa@Zad{K2H6um(2Sngm|%tJFVKLrM^*T#(?51(}E1I@G*J>1Lia4 zBRu(A=r_VJf9ASTsG?pI()W3?0jGY~x-H{>_qI8^tJ@vIcFp?!j~d%olz2&x0p#2% z#vnyt_zIvM`o^o=+zkLfq-ulyKGHQqeo5x51!<5yOtXB@d4#MsFE=^bUKILD02gmu z4%6(Z0ztsePHO_W&Ab8$dkVqFK7Y=_UDHSfoeaLn#!F$BoRIGc769A;^L@^RT*fCS ziN=M&``Prw`I3bKfDRRXM5KNM`unu}k{b}@K}AdC*da%xoqAET_BAhSvo5U7n?=Lmg;w?Z$+HvU;MH0s7Wi5I@|60OGBFXI%4b*d7J>z zY-w6UA9OUVFcai-tH!2!8hKQ*FrCaz7$MvICWA|7@lc59$b?V|l~Q7nWw5OKQZ57B zJ3pUbNIDF)h^D23e~x1PiFKUV&govlx) ziuik$b(J;-EXObt%Je#D5yNSSB(GtF(L|jr(W7|J5~I@tF%A7|KNclwW0vB}z%0u0 z*fwbaanX?Lmb+4QD|iM?$5Fm7XCos>9YNJk7P&sab{)_>_->NqnatwhTmIwAOrCc= znP6WB@>Rw>h*VE9_EH;rk7IzzDa)6ZhMeRPAb7{-TSY3NHHY@+94pU=zUS zuz`bM<=jTmm+og;N*XB10lY&|+x94ZJ4%J!!-q9`b$Ak{%NDSZb(s}oj|sW8MJle3!wuGE3r`unHx!hKn->ubln(WQ?+#0K z+<>`8+H?$)&T+VZm5AdpNmTaJz}g)CJq~C(_50rBaUw+PV$HX(i80C$^QA!`(81_z zVYG2P$s4LVM9+B#)`~Z)jE{7vFEB9i1lffgIR|#nynp=j_3*1XzA%w=K1Fcz>2_av z_j{}2)IOUxRh%drYsy~SPaZqaOiCZFq!t~;q3Tz6Gh}+Zi?^^_FXLk(@blg6xA!Vs zEw%OWIdY!7pDAi-_qw@TmAkj%YXe%)3^OUKc6MR^dwZnWC1JN zXBneU<^x9`74*F$UG!ZULC8Ejq*UbZE;!m*&ei7&9xYfKp-|7VKl;@7Wmba>NjSnG zGljRGBmhl@kt6(-lt5LfV+&@6%LeN%`1{v~v9`mx_$7Pdan{6Jr)c_vb}+lZQSixr zc8;8Tj`u(;*X*@huTtJJ)DZd~k^!GJsOd&{PVWoQeUh|eP~Ajj%eiN&_2CNaue6eO zr{{d4f{_)Gx`$CvtOB#81qovLuiG zrm=+ChL6x7z@Y^0F%JpYf0q9Kfk_e!Y;|~nmfb<|@~GMwyYvvD?|sKYsl(Ivm7d!|$T@NScb9LW<&F^k-2)DBU@&a-xU_Ij_FY9mSB&QQD# z9M(|waW%b9lnh;dS_|I9_)`Q=)H^S2Ac-G}jcfm|2kOG6wz>E61OK*Egai-$`TP2J zAUi>Y^;D+zQqK!HKvaY6)D8%|6*4_OQld-4)vTSNQEPRjb!KF*=}yCgAGsEYJ~cE4 zKiXUCvJ)*Z_?PnU9P8d}S9C6huvhz_FZ0?k8`k}j*oGwd?Pm>6fWJQ~uc3pew2o%7 z0Coun#dESi!Agdeos?SOzHAVcPsavTYY)VGE4ctEQpkPawR}7Og3}>i4h^rs6M*EG z2D^$eB6CI>WWGgGJL!1)hj?c1_TeG`=*AJ zQX|PE`G*%W><q@;KX{cm=rwq-014hdS$m1Q% z(NeB&k11JEdNu@q_SRh;d6Mhb|3W_`I)d(vK@u?NS3bnpg{|~=MeFnW>txK(I51^8 zZy;wQ*(R}kAKh-~M9)rr=G*G!RU$3evM2G`rtX$l;n{&pVek)HPFaIM!tbK{n=VO& z$#?D|w#4FPzRH~9(jE?=5$N)hI~cxb^G8HRxt9K<9m;n74oNp1{ps95@}pmH>d6W? z1A`|DdV)R&!;G{)Kfh5I>kz}REtFjQ*%2HFTUI@u{WZa*rz6nNOR=cILnlcV6xGPT zGCTJE@!hV?Db8H`IP1p6@e`Sau?Q-Xv2##jtfnHX6HMsQxkpY4)`N2S?A~JK6Agy_ zO%L^(1j&w8LV9*7mXyhjGYTX9uD$NXeboO56!9K})jo*4{0Z^PXX96!e?!2bA<)Oj zq4#{w7CB~*Y;XMH&VTsca$L7%kc+h3a=@eKSDGK)w?1SQzg6`F!_r8L?h3rGA9gT< z#AMwF^(Gd6q&2Og132HXW0&{i711J1Cl#iJHTnTvr$3GnzP_|sw!Yb}Q!mzg1gtMq zYYG@fM`}F=Q0p34HsdWGwSdONh0+UwWiifCHs6+sd_?^EuqiI4`5afE zR^dKYvu}c_IW%VM)q z->H9>CPQ_G)L|+Dt&G1dRa#89D3i0H*5s9rCyyLpg0yQK9J8TJ(@6{NEAv7y+FyA$ z3!14U9V9ZKK@5@!IrXz>_H=apoLhQ;v={r`YQwG%B$HXDY!gX^U}-j*@BM)K%hMW6 zTxVu74KiV4ygl$atXG4goSWy7;aUGROG=|v8 zsX2#yG?7ao=bvw*(xAG{A=DHXuICEBX@59-C+CH`*9}sa zpL=MRjo`T?3syX49}1?pJSUdc2^pk%I9z6EPVQDLD0YRFJ~yv{5-5`SW+g&Zgq9;! zn0JAM7qy1GX4$lQs8SS3hK~=G08tkFg4U=@Ws7++q~->4z*q)U-no}0a9lr-WR%3T zXBcZhL0ge4ybSxIS-PxpS#)q06mL_IYX9fy!kYZa6a788>yO(H3nVY@CUD4+?&MEx$xs7*5N$49L>3NsP8&$ggH7MF9FB@1<`_yF^94mvi|n(fRRd znHCxhL%`Y?F}ui1s%5(uyKGZm_ugj&PpK~zOYxr>in57G zRnh{SWzvJpk6Q*8pOY%f+792#vHmw7hxr^9do!X`48bpB4jP)_5|#otH~^?VPNS8$ zWUM-@>J<{J?FYBZ}2 zeb3kvC=h9>E6TaXcq|WS1vc^V{_kjs&)z6YNRa zw(gf=4$DRDVg0x~NdR&6_-=g7!BVxx@zcs)08#DK%X61@ZnVUqGpyp_P{~sBe3A^w ztiIivzlSu=l6ah?LGZI^^LuLX`nHsKAA5v7N!|7KvQ{^J+v*J>o{=iZOAuOM(X2*b zLAQ%2<@9Cz=1(0ufVCj*M!AUDka6Z!*C$cch~hA%_16vGCR_?14=B#lp73PYdbxfg zV^DP<6($#bDhZS8j}~_en<0bafe?BxvFXCnp$=r5>Qjs7_Sje^z`>0?>BHyk5mSvj z7$mHhZ++IOT_tdj^!Kkk?*XL>y+qE6fW5U_tETGN@oljq@5b!hC0Z6Pb~RARiW$wq zQD1U?eocVdmO-3wOUBMy;xi-mI~mkN$u;aK;fvq={G3R+^r;omsa-Xrpb4`%-9&Ot z*~YN;QObz>46xPjLe6ntH+2K%VnrS`PS}3%T@8TKvUd~ffBEsE?uLTN5Y*p`U$t_g zEZ>QzXH>q{>Atplq|b+%dQYquR|`B6yZQ13DZcD4iCjPJ3cUR>v17(fk0yp`*(I@@ zyqKMl-86j^B}zYBsg=csvG)y}6Sa|wn@D7_VF%?gh|W>kEifjY5S20t+f@_6fj;}c zEe~JSc1-RcDmjOv@}4t!6>pO~+INahC}66|8-#oakbi37p@ZM=p&&!>J^b=Zqw7|G zC>@tP_x17zPjGsrdllb1=HkSE59V%7x4&jM9E!6+EJUU~{`vkpg{B5@<7rM%v?@EW zG~oK5KA_uY#Dz3dUndqs1l^Yw>o?Z#OyVzHqh*_^@{uqbskr{f(xC^KFmt^|UxZ>EI}AC0&H2;YI~IS=BWsg@nl-Io+6d+SXXnp(g7 zdS!SqEnU^FM2BkR!}BMB+EPxJ%AC{$gjm0#b(*~e%MfkIkFB2y1C5!D5J@+7pW^O$ z-Na}|)3*&PtpxJ76r?-5DAndmzb}G%NKZz%R}Onw!=X zstLd-Q1-IC==Mo5VkgD!jb-^2ljxefnXril90*2P3-_0wf6_so%_Hi~2DwfiuXov0 zfwtrZ=WCi8dgl(FDF#(8ZmXlM z1fiZAUD0fWL;F*tza!NT*z0wv{2S?0+So3ZYrjgD(!YdFFN zZTtZQY?AM4ZoX#$X?=cRisX7>L}c5P+&pF}f0CvdfSK10tn*udSC;?#Rw9m7d@_*M z;tub1aV7G>f?@Jez#t{H7ZfDX_KwV=`eHe53qOyyHb_=G^W0316&CiVUzJJKxv;4o ztLjWTF!!VAxE_dE)x6e&Q(FUGykRZmQnqwOUy%1x_L<&4+qfIYY5XO= z{GzQ1mo4ZwH#${d*9w{9UGRaMBq+fJu?;k>!qBLGD@_K81!eH&E1@Ejd9-h^C(<*d zQs({KK`6d&)5K!)VcmEd8Lm91K+K)vb|%UeMPu9O*h$B>ZQHhO+qP|69ox2T>&rcl zasSn*2dJ^fti9G`kLjQ@NduFCw5zB^>|Y&P^g#9s8*_nEs^RB~yFW>BlBUqEhai@`UtE z(+h&ssgghNL?=WGB4>)u^hGnM=M%2~Am-H{a7KH}u4Iqxi9@!Dk0JXgd{I!V02B>V zwxAEEHj4Ol*&vNeONG^W^b{&%Oj63anzR}>{&3>16pyZ&g?M-}?_l6O<&W`0O;>Fd zX>{11QzK=1mgK?aHt+cyApKiW-f)`A3~6#=p^gP6VKeNp_+t|L+~-cWdBt@HovX*n zXN-uawB6`vFYGawYx8X(&*Fgtl{nH4`jh5AeO#}Avv7TtdK!ppzT-_9cU@!$GzJZ> z;+6J~3Rp~%+jdQbxd8xgf3hKB=~bi?BtP=RL7=2l1tja4{^qjLs{yW=PGn%#1=3Fv znBvQ*ow`{wEG7rG>snp0RMx0-3#^Mjnu8I`K^a^uO_I53b-LCJ(((AV+=b;bG4 z-nGTjgH9>h!qM%+j)WC7Oxfj&<&sqW{#qThf)6g4pj^jedT@;6xI&s zVC+2F{U->P_}%z3qnYPJDxRTR)*_2G)){9~uZP!)-%B6#8!RY{I?hy^B2qR?=ZOKY zR)pz5nMZ8a=HIq`mu#C^DTM77(ZWgC@2{V7L+zpUmOo@&4=o~n?*_gUqaSojO}?ja zt@LS+ZpEvtY*K-0LHNLnhia_kS05@(T2phoJ&1=AfQMsWeoQ25O4qxD(?0AB3oayoiR>R}<4%9= zkGFacwv6yidpF{N)kk9dRmQw<(m$%(e%|tV9&5!X%;gG;v4%5LJ66$?q$*^VNUVZM|GZB4AjPx+Pk4=Z0iIZeCjPW1|m_uUuu zD{ju(70l;6;civ}fYi`tfg|o@`fHkEdN(h1S{Yv27dy@g`we+$;l1!O5& z_p4PfQag%g>?ImQ(xtS}LI4rl0GNw&lG_no<33kaijys64A&-X$N7PaJww}xA8Y&vzz6YTfIl9X=`Ua z4olc)WojC*tcAe_(7ojiJQ<4=MHs^wkEk+`OM_qCI*^A^y23&AB^8xVJ{+7w6*qJn zi^r{ggLg99)J*r#=!v_FSG)+wR6pq33pfc3-UK%#10$KS3H<2Qv-IEQIbQWDmm_*n zWC7(lwj*@;WP-htT{@?p0tSl9(a zaA0fo)t3jgsHU8XRr9M=pA^Ch?v#%!^J;=NmjF$;Zf0?ho7KQx;Xtd*cI>%RxHPyg zZwbC{nY^rSZSuqLDwEQRfDBvfqe~ItQrm?d?fa>91TC8E^28=o_lBg4Qgt}0e-u7U zi>^6?n*r^h6oNSXK{Mwro=7#b!7SkBiShR)`V#ucZ%iMC{-0^J$V9hQRUX17!!3k$ z!L9Jiqn=Xb?|l1V$>3j9ONB1FaNMdd$(eD!oAc-jl*WWffdVX&oD9~ej0$p?4xlaM z_{bWmUuekg7D7k5vlutG0i@>Z!^@z)RNl8oS*EX?hb>+6#NY9p&bkjUQAhNeS=4|_kkSCKa{7;1)NGVLg+B&d?k+Es_&Ja*`)vy-=bD`oTJEE-i_hLKZHIvr>n46DqJU;_jRA2` zgGyijVZUNVZnh5y*aC(3IVR~pCbQ}NI-$Pa1ci~Yyh2R#Cqgg#$thF0nxK&)=uG!@ znQkF8*7-z6%%}9TFifjZ@LT%Nf%Ur{wqBV;!#nC7;HiMzlvZQ|tmGu{kQ@(@=CP(& z8!E2*o+LsSDm`H!xlYd8$J{0~hKTMMv@ahE0Cl}5bX>}gR62-AKWj9L>Y(gdG zMW{6qe}H4_J_E-lrD8koMR;mrQRa8cK|((}Gv3s6M{hq#>NGi0slaWs@50#UPY$m< z)h}s-5=$&yn3|$+$$nipDQbLDrjdD&&PNlR%Zdgo8?=rQJCJbUv(Qw3-u>?)5}BSu z5u!=%ZKR~)q^VwI3GbSc^*^C*fs2VQ^xT>ly!Kny7QZ&Y*AagMRQ0`>1#QDcP_Jg8yE# z5P!3wZl(B&IZ}W&gLRtVAR2>7v8|C1&R7ukDK39=rbN(teJ_%Rl$MI z_^}@dJli$=fxes&As^<-NqqteBhGlf&q3SzY7@(Q9!{J~2CydvBY^MZQgaEIbu)HS zi743OkMs|2e;|9nKKfJnS;Sl2kxH_YnF}jqjrDvDdv-3HH$PZqLlAeK_OIG!Ga0I+ zM}2;5c8moPNmC%76RAvlnz$1-q26!a_6=i z;wZ9N+zfe+$MV~M!VUZRy#0qfxtD7bDOX+n`n%~Ifc%b1-|oI30-yHD+Fo8ms9OPr z<%qRT)u7|zif@fU7uEy3LozyO&s^AYT?tFLgb9&EW7hrhXRm{S4q!nLLhM(OMFIS` z6BoZN3C^4ew!tB&eWeRf7A?H&CrC`A6hHLM&)~c=e@8BA;naW5(;hUUAq6 zOx0bX&yMqbilu(~izO)Y>z|Kr%m64sJiRjkM9?JrsRGPt*#|ZsGk3dNjS35R%H``&j_ZPlSak@$+){k zGY8=UVVy_dS_XTes%c=CdFmZ-pK8XtVvoSzW*A3l^F)%S+Wi};hosZGg|>oqi|Pln zVWhjb`A@)qPw;zgov<@ty@p{Ew+f;)fJ-cvao4hb%hQ*VR%1B+bG3*1p!DH z?7j-68b6IqLWTlQG&-s?C4u_c9>ujXD$E)+SMQe%{tYc7QCwY=tX#q==uq0J!8CO= z<^Dj(U?GnsdFVJol?IOiw8}1n(ocV{Ah;*2Pjd%gWLGRtZ(x8&6G!BFT7NOWQnT9| zEevm!RfV{`G4^@S2vxKxxGWQ-z;w#5YD&VCKq!la zx{J*aiv;4kRO(;8xHr(yFr(H1nBMk37^-Wd@weCzSY2c#!dzgfVTC2iU5ZL62ou-> zND4wYz=B}FrT<+kq9LWEC8UTY+-7ik`}E&E^_+37arzH*z8^e010~PFZ)`3;Oe88CLj^mMI(^{L_9>x!8+)WL)>8sl&oB*Z3fkAaWvKrm0-Sg8O}d_jYEkRH@~(c z-X|NH4^XT~ELp>$*zl5R_+*h& zX8633Sl)qgjSQURu{I9CUk%YeyS<=Ang2jfF9x4MqUPa8?_A)w?%BVmm2I%R{}szq z)#$tP^Y=F@F}*^K{12B+JUY=U<0Ph`D>$Ot*|OOXATmr#}hN)f_Q^Ho`9B!X39 z<$monz8z`bk8DPh^mI7{Kuv4j%`+NYRlAXnILco>@W@nDyqJAVId!c}S!BPqu#` zfO&pRw@y<;xs5O6X8G&Qfhlpv+8n!$M2%|s`wbn!EEIO(D#Xy`eK`6+=IH~aY?=B) zr)wA5Ivs+#w#oV(Zr<(fo}w=s!|Aekjfb&O&zam}=R?rfpmCsVG5#Vfo??uJkk&~o zxI2ShTXIxWreS;rG@w@BGe$y(+LsnR2lBus_iB3aX?IESMQaSk&rul_yg5JbTi8YW zX10?6yO?3?D-t3icomKey1wyrv|@=)EAvi;_>DDzIk*{JJO-4}j|Lm7;Ud0zp$|pj z#0rb2XsPP1-G*StbgA^dGlFO>Y_gpHN|&2dbFMVdKAL9sF22CZ82eFA+`7JbTrmBO z{Lw$Tfc!qA+ihZkdSFEGBkzEXJ56%)F#wWb);?oT6 zd*)n+zc`?t4PaM+L}4@aB`Iy{A8Fox#C91fI2g_!r7+rOH3SHIoFHhv8bFpDb9&A; z-1rXrIeF3B*bDM3f`Q>Bb~_es*3_8Gd0|`Yw`UUzO}FU-Cb8!PFk5o1x`vcevJ=o>7&?G%nOb8jmcyc=QI9Z-5mt% zzXi^o00++Vb@29EAnBVK*jx8Kn-b=-{COyAg9z6s9*Q6B&W-+RLwq+Pwgn~+)X`Em zQy!j%W!xuU((*d8^~gF`!tnfa$E*0WYA;k+fD)MK)`Uot3JWnstW|3A*g@%Cks2a zx?E~cn2+}Hu30&y2C;H&#MrS=E-=@nu!gGj*(InE0j6do?iqW&2(!RH+_X$f^Ru<* z;lO3Voi^}habm)ukNUCv&>Tu8-I#g1E$;O!7$CfuJNwZxXG8Ah zK_c79S*NIqAAx%Bz!Z9O37s9@!^Zn0ZCSrfUexLIT1^~zY7=J|Q_{aF zD7uIbpRwY(UIUGXwCszuK)t&RNiwHsMY?0rGBsl z6L@Q^i5|GrQH#}gTP&Y-E^{q5{OG)c>(IVZGuPjJ6gvU`KHh6$v9GW^k0fsqm%-L% zpE4N_j`PqVjs+5-`z#peiSz>_R@>Y>?ie9alFtub6zXn<_N%Gqo)06BM7=ur(}@xq zc3QC%%$z3c^?Nk?#Q%eDxib$M-fys%my>n`lom$}N9 zWdtvYSc)U!Z9Ch)vk=4K2fo3rSv~o@)U$vc0RY6XL|+##gh7M<_t?tA#VOe+z|D?q1vd6~14^cyg{vNVk&X4*FBewALqum@{FHS}$IR5W^B15FIT zqGpsK7y`UWs4x%?m%l)%@F=gV9XDaRFHM*YJJhSa4!rdqEEw5-Dk{X^=!a7Nsg-hr z-0RVv)2&4ly=MgXZR$T&dS;>>BLO))ndrZ!4}kOyONZ-Z8-YG)QHNY?B>8~^gN?!2 z23fy8-&Gu)vzZ+Dy&byK)jM+V<3 z{R^^YV(KxFkcYJKCs{H0j0oT*A9}xqNX?{#2}K8SGK0wVe%kw293I&-Y|fhn(D_WG z9`za_p5S;Zq>cI~!C$C!&e+jpH(R7TzxFpUiOu^QojmhNqwCVf^}e9Va;ThijRN4p z7Depzd;PMJU?D)ycdI>f?8NuTdFuTzJvO>#Se;4ph9j7+T2jmWi4}5S1%$V{Y;ZLh z1oDlvai%7)o>oQigswjHp2*|y2p)R>wypl{rbC9rg7;$fWM`CwAEbMqpj^wDkzwX7lJvh%DXwE3+>{D8~gftE_M3; z4i9=6JwBNft=!nlM~&{par@6LBcAsN5A_O##3Dpixk5+T4IXHA)Vhel-GgvU3F1auz+uwtHGJ9BBYdH}m;9`(?+5(xuWx?vn0&uR%jbW3UXt2lRrxxe!*i#v0D1%vUvrHr_!QpNB)ho7 z3u`6kR_lW)p~r&7&>1K2+k5X!Tk=nm>@t~$jJ*~C$1)bSOS=WH@q1{V2h}RU0%;-A zMf+;GgA<7DJ)(@ys_m7S@noFq57(9*rUC;wGH}rE6+I6RzWIw+M)@T_SF5wY{5w)O z4mUQO;iorikOZARdKkjGm5z+dsE}3)WNKE|rVX^kC;Kmx$A985iG=${-7KC@{9Yz& zQn$7!&G0)?Y511TE*&?uvG3oX6D&e3l0r4I+6Xg2UAkiuh2J=nV+RYehx$4zm%q^Y zqkdPbz4rJ#C7(LE#_E^Rt$nTjh^q9&6Q+yQs6&lsEOObr+v1ecn1V%t|G@7BrAd5g z#3IR19Cj+~eB7=q3a?*w?kb1Ib=-fU5{!dc$b?!Ht6N-)B5O>0V!d%Uon<{TjHb9q zFoiEKqgRk)Mgb62(}yee2rdIGo29Hr-NlP!uMU#{{oyykkNh>stP4>TWXM2)Zr(;E z5#kYdho2a%*_H{%FL=%HtZw)Ym!CHaiyPIxU*=cbQ<_n1V>_mwT2|?k_}w6Sa200> zU_7`=YGY23)%|$Dx9X)AVJf=vK)`>U>fBR~dfycu8)FH~yP=$fTj=@n>Et+byriRA z_Ps+qDBtqD*-h&pWkq-+qBpTHWiZ`7SffVVy#F$Eplp*P(d~n;1_TDE5Wi0uf!&|y zpfkKZKEX>ji2pDJ_@Q?ERvqDaOsn?*Y(d=&}PjOBiP=4;mOp| z{O-=%bJ6(-k9#SM^kQ#&qN^nGCUz2xRI=%47D)x5NbK#-+-2@ zKJxE&($QzzHgAkKappEf32nFRFK)~ikV)j{?jtcThVS*FK@Tg`)vB&j8G?@r)0ufE z;`v{8Ikz*iaNH-%Kg6z*HcoxM$04FJ{VSI*fNT`HnJ9{^Ye#2vSN(m!jfN_~iaC-q z31=c!Dod81^lJH!IqgfV8nM;zcZ=P|85*@a+s;~?vnWAaoagCg#l4SxeM}1$!in8L zk$so~6JmjuvmsY@M!TFHiY3@-EDnG%@^`&fUkB;GyY8P1Ed53Rko*6Wh0YlDHAUiS9Leu%&C8RqoX5^F(`lkw! zjAyZ_?H*zoGWW(~GoP_+6@d2C8&!^5L_DDEU43kG-jL1`1j&l zPsa6lRc@c>)_Q+I=MTI>m_TEv#7h?<8mSkhWRE-&7A>GHe^K@IHqYtoXxTRbZ;F?B zQ?DG6YrvefO&e0w>`v4^|L4%i0ZXaa7LDlrT>Jv#j%^5^OIoz=)>4OA;?D|^>-5HV zUyAbW2_nVwzcg5O)Xe5RawTsWCO5s==SA;lEVLNlzZk-piil=HwmjT;J0HrT^!QCg za}bX~X-&KW70))gc^+SXZw=%BkvOGwdp0vcyky=%Uip^`QHm?eXsNwM)a~fTY z_8?LZ=Q08N$^rRQ@7H^_)3HNJAVEn|xRRA)$V|;ty2MF<+4h&54(S-`ErRbh>lG8@ zF}Y7ZLm>&p%Qm%|45Z%L+IzdrwCv$q+`B^aVQPfp%1L5l;|H z>eEdX&Q84cXOsnF_*V+?fSxJG7tWyZ3Br}6e8@gUHYMvwI)$1T<^!#!D=DE>koSmS zY#?Jdo8SMfAR-xv$2vZcaSNPqXo=zTy8J#UAQEhW9^z2*h-UhiVL@}Aj+u&$KUB=~ z^*8^4ee%13*WK`2q?bd423^ZLS=M-Mw2;!|_bnb?r&w-0|E>5xhx&y?*ny|lzwaqD z7NqDSB7liQ21x>hD!roVTsY>nhu95Og1vE84rbyP|8y2ed9VjIo9;9<$wAy?fvPfP z-bVYlw0pPAUSww*uz4 z(c77Zyp+&&29S0S=N%8WKf%X-uOG=sRnei2=l&-A zhwCEaXx> zq5!;;%Tp6cMmqdYcOYP2xavvMU;0=8?PG5xXen%WPU*&j~pS4KCjXI4+ZkGr}$LaK{+2`pClt| z=7z%98E77?y+0^pInzI(@B;jo*HX+rRA(hA59U zcFWzp=!t*6W zN-~ci-WSpQ*rtReW$s)9%Xu$vSZPR z`Jz3+Mwx;aUR{JO$R_!CY2EtrRT+?|1-0qw|ptJ9fMnn$S zxufBAp~y4}$)y0Rq@`DL?skN2xos{My3(Pf_KzvIwEB=UoJ814tnr@4YUlyH*tXd` zn|X8HPJJEx`6yqVX-I3Z2Mf8Q{7yaeOV|HFkhVAU0P&S+MX_y&&>N>K8*)y1z5hN1 zVJeaXr_1+w$f9B}ngYQBgm4#wE>e#+=~~DH7SeH{1wJY-56tdf)Vn1`gV(4p1#s6l zrq2XqOy>paft^km*4z4v2S54OgdGuoM06_nvdKr1PGGQOchBcwHyhuad^wkpf4yi)Z%2y7Nc zky#c_&u^$hL8tG!N9L*BE{vUgfy*kIlc0x$08kytZiL3Mwb%tJE7*Ma#9 z`#eTt1j7AJ9sV3r+Z;V|(D6(IzRX5kW$^MqY)o#V#lS^k<2dWXEi(I_e&Bey_-0Y{6G<%q%)SmTnWav+bZ3_8$$BA-#2L!gH-Kjtbcxn-!;?!8}IFKa`G ztBttVg9V=?8ya?gMv79>XHKd~^R@_dQL%>%G*y2;c3S>)h{kpC-+N1_UZvuY5>ZL_?6*?LXuX^ROh{7t)2oK_1u4T3pq8(1jYNvqQDdfP~nvSuizE zXVz!l8? zH#%2p%oi|0|22_=T6rCuW+&0=Q@84NO!Q#4KcVsNj`C{a6QDIE0(SvKKtaIya=?0*f#W1I9I$ zOc3mTA~YZOE4#;L6>6jTI?R!nGk37|kr~3)3ULLa(mBti0CT~mgOGCxEIH|~frSDRsk!Ang;D}h zfkg1FVPh$JA0{9R=yW8@%XR4_YaWxyJ`U<>5^eNGQ1V3djw$V728v*T3}OW4Eo%qM zUui0kkALO_6(teVyq{JzgjehNlDyhkgf03%XYjhj_a}MMvOe@5(5PmVwB@15YIdw- ziwE@z6}v zip1&U7KJkHJ*7DSL+N)gCaj#%Nv0scXV3?kbVeD%+80vLn|R0g)V<=<1IchGId1xf zeCnTu0zyD`Pa8JMQJeW7y*jc=OchIID#IKJyGgj?`s@znR#5!h<*X&k7%$ zx#jmyd`_@awbo}Tzg9b4>0=O-ixmzXD>0x5Rg2BxEC~X@%k+Qd9zW9m&5r z`aqzsZ<;;4ZSlT786Fy&u3^NX!G>2XCjILV^2f1AN=2tbV=(k*2|$RT0I|Y&fH#jt zcNE&nw0o%dHnP_p&t7V1`;*m>S5kOgPkuI8{YE5pH;0TJB4zxN=Ho<>$@kYqj$WSI=vwsNHt%jZEHUfdRa@137D4l)k^@;t30RD7IK+`zD zIs^!jAD`P^iPjv1g0ev1WONs&H}cj+P{%_zd2)4GIIZ4lLvctNdg1e%cR;N>^2Cn1 zOM_&yfQ*Om2)kS#d8qCjU*r~Yy$IFpO zK3{thUl1I5Xd{g@C*3q_Aj|>Lr^3CJzcx(RZdbNFUcVB-EH6f@Pja0=sUXb7%!g=f z0il4qzZld*57-b!#>C@r!A_T&eGJPtHnk)dc=P2!G8f2T1BV<74Ff%V4KReiZ_a2# zpIKW22BFNQV?(yex~6v?eV}bdRaD3rahid#$9a7#-XjpRTMEkCRbBJLL65Cly)~=U zR8&2&P2-F8NBpa|UTs;V^2nqBr4O)j9pB);vuvZ_9*^siod+GN2EgdXPM^^+%|=C_ zsZG3vb|?R9WdeWv036h$RBYdSrYA#SBE}hg9O5>7P-x^XZ_NQp88eQk;C+GWc=wrF zzB{7*8L< zku{_7*Z~@-*Z$Df*%9O4D;(AKqv<@>B|dK{|S^MC=QU>f2Q@26Wk+(K?oM%0ZP4VS#C7n9DoC?^tBUIZu;I zOF+wm`oVvMr&(dlvVSF$A_gV7Jlj?kpfPj5W*Jz-adinY3KugRXx52CLXKKdec<)Y zoyP51Tk|;h@*niK2WVlo(qT>R?ai$IKAPfO6r3&mhcJ6PqD;=#gcly^H zD|%*QQ7Ef=p!UYC6U@5As{RFo3&J8;$e}Px-t(ye6*EtONlHID_|#}djh41O_6vQ>b19x703bD zi=%5Ps+_%k#SLGN>ayI{+&CA?E-tclhb7{$25z48R`yt7kVS=YnU;ewd0iWOwu85# z`et&(1?5Ci-I!~ZG(P+j39Qljl^-WRPUuznUnl zy+o7^zt|^TfMAj7QauY1#HH-80f^%QVd>^Y%Rm`YxxTf)od1aNK|##GhYnw5m24;xsZ#3M9RMzMz$$YwQx*@Rqi6E(C9L8T@Wf7k5F27-#yZ zBqcyg8|JW(SKkFxo7arr_r?5Rn_!R8?>kB*l89ADna9OT_=^)09>n^MC)GC~O&Ms~ zN@57bgBU~%2PS<>K*Gj&#urho zC-RxPfC*X3GbWXL8vS@-)MA+zJug0wqMF~f^Yh?!jCM{Tg#Zz;L;^S!SOYbPw2I_< zRw2CRdS2JYevg&R^3s&3N&^y8|ElIzYI2Y7=L8Q%A}@8l-6tpPSqn>W8$2CeZv$gT zvo`PJ%a!!bef`hilC7qp=Z-0wsPK|PvAw`00N4?~+ilQ}!;QdK%8$gJ{;2$_C~~_X zL`(@^bnSSq><5^77GzIH8-LQ55U`eK-H7&8iLm`K7?f#b%lU#auNS$>a~Y!udc&j2+D3~AK4N-I2{OkF@mSYpg+iE@Ako*5P|BMJAnn5z6*v_ZqECWo zq+qgCp$+(v?FrmKtzn6`de!LW5U_21d;Ln(4ZVZ+W|L7PlZdBy z`&v*#5x%O_6*oBBl@;5sy2ol~j$|-A>O=*fB!&&)E-#>YcMJ-)?Wl(%U~tR5@7BR2po1maB^qAQ#GfRP3Uue|qM9eo<;Ss8g;Hmwhm%0u zm$M;}J4A-d>qNMT$tKe-{k+my5Io#t=np1c5%0%2wx>hLy?osdXz>jsYe!F z6a+_(%nSUY?V2NAk(e@t`>#0|(J`KK?|)HVbB>25llog{&S z$oTW`|74S&7FdU1M)!NdTA~v6;T0}x`Ot`!EgRYUm#kwApWG} zb2>5p5RWxT3?L#PSDLeTOSxKCzcvuFA*nVbzh1BulbTk;kTEQkyuoND(z;~VH?;UX zuRyKloh5JB4NxgFJI*^L+q^GvM718^5WG0-ikT-H?IFN0!ff!kN@gW<4trktj1 zhV}hFVoQ;%)eV33L;&g`J0Hgt!HwLKVyQbcLrIzfKe6deEPRzE72z#@ove<}>?hqJ z-C-ul-Lk=_s-2lY(lOCljty3WyyskHlT~$#z6A=lIenz}us>BZPp9l%A*)pJ&!rQ} zz<~|1#RIsogSuWM23bx=-F9^;hTx06UJ005aArq8GlG4$Arb5<(VAkR{O?rBMBusC zMfX8?qEL#k3$~dn)b*uo(~;igJPyV};U{t~LsF>UP$G)Wlsu1@!{g*NxXXD9>(COx z7Afympe`CQ5F$v)lLtJpk#~hh;1H76(XER|rZl$>O~Tv;+U39oZ5ITOXTGP}XTo&| z*G-`YLI}4ist$zKfeI{PWSqQ=p6NrLfSSGI-RneR?1X?){~Ec9Fmhnu!A*ya?_B1Z z5K2X(Hso_2urJ}Saqxe#i07$1Ms@#{zwA;kkYo>I018-Sqt(L|uZp3NT4(nt=rwno z-*Kp5L%dTWRoS>e^7puJqc&3WB-@FpqQ1xa=m-oUqg(5Z*X?-TlP+MoSe!bK*$Z}I zI`!QAeP2}HTA=~z@0_1Ullo?q?mW>!l+oX!5HI%vEpNDsp#-mF+UQz-ucOB^i+GgX zr1yV?Usf)YLU|gbcw6q^m^JV~jxBwl@K#u#3xfOY$QjV>jh(+{qF6iyYzomt3y^?v zbZM5bKlQ|;9;3D4%L3CrYw>F$2XqnA>wTxv6!eEawSK3$0CIE{6?<}4LpAzH~Y+goN%S1 z*UQYn-bo;HM=g<}Kixjis58uI*-a+Q64o)Q+uMu98&LmTs8_r%22NAulbOheHMm7f zs8FM-5yV$6<;kJbLNW4bn~YUCi97Q6`lj9FM%-|kE*(dUN({E4^|<8gKCRAlKJYEj zy#7#BwrZnA=-5hHC~%9y8c(u)3E|{yk)>v*sM`Gv)ZB~!@*P<~1m-SoDi`Qstfgen ze$-N126xem;{*{!x|vq*2&y{z^jxJ|TB%gMz9SW#&fs~q!F)r0If^qvYFIP(WyK(@ z+HJSKcZAvgl&}a*mqp?QrBQ8J>$?+Rw?xnX@+=_Q-Ts|;a8{Dh7w z8;Af5BE^I6Vfl6POm+uwk>9|+J6!Xhd)aeq`pnD6H`4EGL>O*!OYs zH*5?M)eM~gLlPT+=hesoExVG~9L~ZwiL}#)do)~%{J!wAE%idFhCF9SS<(h)(B_p= zKSJIu2&-++v-5a{T7$NI-#J$~=lI9hEk4z23tLtu1W}{Z+blTq|lUkS2Nss90 zOrPF)SO35PCZej`{(OQtG}p#`bFu}-a90N)FW6iZE;SNt={Wb}F=nF`+(3YoZQCTA z&Wx}#?(z?-E33QW7k09zzlIx zdJLcwkiW!?k$rk=io#{Bs}{=KBh&twt{xOs?X{-nOz-)2aIH}GtJfE$QeeERcoy$l zs^0@vxrYi_G~6l{JwE<0qcw#$MI_*O!g=C9T-cF7S@V2!_=INH?Jf)#VM+Etb83d6 zpwY?Abi^AIrYmi#x;A5|R5saB38=sJa!uiPt$sX(tMzU?1*#DI=JAw*2^;G!rpSTS zF2PTNmow=2(O9~Ctq>yShyFU5hnJ*^zYU`ml^*Q*z0Ua^?BjU>mL zQtUrpPCaMyWf$PO^FWy z8(Pm}ls$1j?o{fEDZx=mK`lPe40Nn~nim}YlfME_&ke0lHL#Fq;X-n!RWG5ZOHdN# z7Z3g*(<4Y?MawSnYIiOYnGE_be3TkK>^%48=)Q$sYz%C->oT(Nk(I6$@pw9+VO%I?$C;bv>~Zo>yH^$Sm_PvKi7#!ecx-_J%10` zAoQ{I;@U6whFu?^H}5B%lIa5?6auYaW2`K0V=^B_?OvtK|f*FrgvvX=AF~Wp8=`7?cm7 zjP2`^zDm6+dvNzBi4PH)?QeCl@1FOAaTB@9{o$g#HAYoIB!6#Zku2VF6woRYs)sqM zr)-wR)pbtTfpW-V^*Ig+54Onq*Cu>2xW4fWc*Dd_E(= zZNI|bz5M#ASwi=tj~%eh9t|^PJ=R~!1QFKs(~Z*8bXgjf5UvtRZDY;ZcrCuOxd;>+ zjQ(TD`{b*DZU15hROO=OGkLs4@!)S%2`_lMOnqguQ@KMfVSX@BbL7P5HCav(Ov!>ze>TAX=6ZU~K77ML zdLxr)NYY09YT$>$Qw+->VS;(9V>RAUgLMx09CurvJjM=m6=-gdBrPSTM~BBWxlsES*rkWTd%*3{hma?;-tY z@NMuRgiT@BHt5AmWyb2iE9Gm34ljy_R3zHrcpH^6j--r%<<)kV&&D5hs`2yxAz5p9 zMHyt$kfQHeAx-WA)TjjS`#o-PsdM<&`hYgsV;C{3IyQ=vO>2dE8;d~a@Z!@?Kt^&- zS0t+nlR0JeXT11!%ZVda^fFk5(3qMi{_4RS|t-@iLFlIYXL3kC2{GJ2?l7#^DSNp|cX$c=b72 zvnW$!)7$L&G`wLBN*Vt~T0^@X+@(n5*|uu9r&{_j?`Cftb+ki&AdZcqOrn zVV1hqKZfF7LdE5;f525-kg z2b>)fDSnB>cWvi|wwQ;gxJm^;t@<|K$4l~elzHo+e(lpHipCvtf+18e7r64j&}T_; z^3UPe^hW(La(mz(sl?aIvy{M?a;De_?&nbY?(=!f*`Vjp(tct$Asrn>6A;e>66>N4`QBcwr2>-ShSvEutvFvsjcW@c(t`oNry!IG(&2mN@N%FpY`Qmd>!ji|W@7^C`>c!O3y*^k9P%ap z3F>8uIZ~-4Ywn-O`7P}2hDCvn&+@fc2Rk~?VTVXllw`LEF#gw z${;6@YD}ITQ>^%S_vbQd`#4^K>S&I$xNgcgfS8DFz*PBP1il}-xx%&XT#{8FKq)&a zON-voI!GKRoeN6*RSPFD=te*Y3c(pH(KP>1Pns}Dd6R~Tx zLV7oq6f2L7H8E4XR&|kG&z;cm$^!KY2Q5VJ2;||WoA^rzPgZu^mp2>_a=1JRGRkpv zAK)0CeY1p=RSpVu^%G{eQ(_+$oi(>)c^ARz@iaZT#fjcNL8>uhTPw?Zh9>Fs5qFQ1 zs@5_C&HW_>uyaC4%eNva+grEa%OeC`SdSDisI~<8VJYu9jG^ju?5S}P#f%9HW-|9b zbNCpmpouITc-$T^*nsRUyaGiJMFelLGa@Y7wXDqVq4%A!Btc%&lJ@a{%z{m(*a2?Y z9EF2A?4rdv`nGkrQ2#(HPi%(us=%T;gT_o=2mrd@s}98cj<9*ERvG?|?m1*(Mz8(M zW5OBcxW>;S_9hS`+xwh~{=?Cyz$E!E4tolRrWjxlhh5erA z{Xyh3)5Zi31`jITh5TgjG<4)(<-cghisyVe@9_EMnxIdg{lQF9IC>3Hr2~pLQSS8> zaP_AQ19+cmJ*&jQ>Ay?eyaCHMQ)chQln3K-MOexs`tluUEI!8g9uDN@B!rThK8U^K zL$FpMSMtdWM+zgb4J|@4HMGrwlBIh7y|v?;#0&g|h&eZ^j^Qzcse;xUXD-3DJf1C^ zjZdcQ>>}Fr&@(4`*WppoLj$}I2-m`(Kzj)6lv@|F_$Q8AP2BNoNob(`VL&Gk#>aJd z4Z}&D;dYxxEl+njIAKJwIOkm!Ay_Sjd2W}0akB$+Khbbf2RU}2{#o9Vk-zmS{D1ZZ zcPK}|6FEntOWt=-+=b`thkJi_4F}&##hjpS9=h>0S!XTps59f`9Qd1HR6m^1t<5ma zNMdMdS%SBgLBO#UC|5n!ioT1a{%~d-zqnDXm<_p~4Oo1v$=9IbF%#CqeU<#yz9Az_@t%t%W_@J{|E{0Y#{)9={QmTe|w-WGfSgs@abJK0wXK@6> zAJ^~lY_x*E@W(JOTT8Bmv-P>Bkg0iIWGvTT-~yDP*q<#|S9`v#exj*#$ZFr0an@p8 z+b$SV;R3Z#Ovc(&^z+E!43?}z^>kAobmyV7qYrH9I#utzcCI<*#zkjkyA6k&(!ZV@ zBkA~p$1X6cx#!BlOQJj7F!bIcjzq-cT+r=TCauZrpZ`Tibq$ci&V!Px#K6>^+6$JZ(S3 z1$cUQfT&ip72kV|)R5Vu#5CEMwM=)|z;lEQ`@bu2oT%b_`YGf7UgID6FDnXURnz0s zJ@>~STW7Ltn$4mb$HC)63hWovfS#t!se-&(u198qs{dw+gnQFr2O2%)k+#>;#-Gx6 z7;mu{*sB+((Hb^4hpHZ4) zN~oj!?@)zL?#*#z_4ry(dM@$W|LyhsF!oQzli&Q{<=z)19N9)PF!Md*8%3uc05LCz zgQ!pZt5Rh}JRT#n_YeEXQ!p{6>l2UJ|LM< zGK69htMz38UjHUullsVcAbf%B1$X^4X25!Jb%uKROGLqAIDZ=p?nFAW2S|%T41iT% zh_MGm`Wl~WhEW7s#x()g3=WI%5%@q>MxW_|gz9H6T>sG~$kVh>%O+>JEk z%zPADO#=SIagf)3=6t9iyN}Qt@;dVTFRc02QsIbSQ0MX>p!R_EKgbVN2|q0sTZIVYHf0xQi_y;dA?1M)qkj*|^zEhVa9Z>Gx6hB?xlfLlI zzVI8bIo$5oe_M9K@0SdNo8F@~({$kgJ8Y(%9&JOf`xhf5`xKDPmlX3#4xc2{R8#NK zuH8i+UX~MCZ(<`8ReH!7C!wsCp&k~7<-m$U17k96z#ut~u!{3(G*Z!4oC&4HUDgi} zThUIKU!ecK)T7ultke?(=AW^Eu!WmGXGF!SSLHzLy^|@$<@CV;<05p&NRmVx#k5s& zku!5aCQ}8?>s8rrgin4Qw->&L$S_#0HXJt>JeX!D{mxn27MavL`tOj*7uywV&0MHG zgd2v06a_VpraI9fY3w1$KWy@rj8PCtM>wK`W2xTB{&19$8U)b+ zMQW^LU=7SwtfiE6fM*;X_yl$eQl$lOu}=0)h$fdYnn--cs2!T*tMdS?P-u1s7SO3? znG2-jwuJTtVJ{D+J!qIzt<^Bx#|@Kw2+bXJ)!v1@d=JV=3+!-=mw?Z3{y?oPYlMM%n6K?0Spt;1l#_z zUvbnoqp-+0`pEEeONF8jsiXx3_++G@arIxQ|Jfnk`|>#lLrVy+*WB6S>T~7xp7f3L zcFQKD>n;SR$wE?M@Ah@a=^dSKvx)8$R7dcM<3mJ6QNL$*z(MP}YB6r(qNDMuY;k1M zGE`M3<%#JG3R=(uZGqK6Y0kf40jhcMv=!MvcWYTk% z>!CYK*a*a?@p-~(v*fc-Bf^T;9MC)&ym&q1SUZzV@>n*!1mdLHcoCSd&REL@2EEyu zI?wK9B{z_fg~n+Ss*!;ZA*vabNmE530h4Fjx>m!=%iik&+| z3|-S`OA|HOg@ZPz?L*}lK7+Xk6CMJ~>brQ0)H~FSJYAr@^Z>tb-q;_NLjP|hG?WaK z9IKo!uQnea2oZ)UOTAe+@7?6h=q9~r*Lm5lq8J7CCu~&8#SU=%}(%Q_< zTjoGfJ=hsYYfO&BH4m`mc(cmti(YKUXGWY~-BhIwDF!V^y+W&6-DfwMxovUKA?O}F zX%mR~wwb2zdQ+M&?cy#-&}et!GEdZ%aw)x67UplK#f%J(>y*$Cr?~OVQ~MT_(wogR zGBUnQ@CQ8^quJ>a>g?Xso|o@eLq<0T*Pp*;5|F^QCy;7J&ChUj#9kd~Pez-{`m}>C zU>C{3?#w~4OR{)u=f@1N01yPhUDk~U$xTxpSn9qQX$InfCaUAm>>b}U<*yZ|zq{T; zqkyi?FN#YqK{VqV%53w*_1(z}RH&3Ib;xK5D41>OD&+LjlN{}S$wHex-Lpwh@Ac|~H}tm_ zT4t6H1jWU%y%|wf7<@fq-SvKDO&hY5zTekp;!bxDh{(ppXd#MU?0P8<7_**Hc8i2eM@>SP|btSEXVEqEo1rT;k8RY1#r@e@*ZG3raDAQhgB=z;~z%F>J8be zsA;m~5RGZtVoMci*Ec?ZLfxWkng6AUq7#z_r8pY+3rXk0{oUCin6GTv z3?8QK`oQ2h25U8xfbIJa!Ly(LOZbfUi;@#Klf5yUfTbUrJooeHX2O8&dm&fBxuh-vF}EC&>Uuy61Ui}3K|d&@y8g*rj! zH!or5!@NDzb-?<|L&pY@`~4T<0shJj!b6H(pqb;_R$ToYs7~QV`PX=wmR4DqZb0b5 zF2rH}cRFwsLjTY0Fhh2%qGW1A!U8fJE+-UU>CA`Nb(R_qia#?q;AQDDwxZs8(9D&$ zU4l}E=uEW3!J)J07(b>nlLKc5px{%k@$vQzPaUQ3otgT~lOW#{^ai(&P&^|R!%F8aj z?z$LZ*?Xq~AKG_VZ>g)uHNqOC(g(p_|Ewc*r5rI!MZClqW{E&Sd_PG{{@2+46=+lw zLN0n~IG74uOf?KZ%#+~#m!AE=qa(AQFu$Q-g3^qxeGogL=@b-B4=L#V-F0R11k}$P zc_eH{{q=D!NJxPrC3Zdsm?7I2DyT?K?LmsLF`r>j&z$x=!c9$_xN)8oTw9O@;Orgw znSMVUaX!dI)g2Zy`EDsI%%-6ghKkC?PnTPPC*+si^6S>gWkRjlM6L@U<95j{X=Yn~ zXw&@V`@Af#V(jgx8fU~H1`*iq>K`2=C|A2VxhRADFW^+esv(Mg+B|2!Voq!3zq~}) z8@~<;mXG$S+oP#`_L%YuqpSRh%lw#aPE976Mo(icH5hvwiXbD>Tj`42Q28s17w)*W$8?| zS5ReAjVmjieeGGVfzjY;C377kwomPL{CXX4yxt+;PzXQcI;{d(Y%w^3uX)S~7x za9Ttg7k_54!OaX|hUCIAs#>mBX%5@He+(kWA4ov>xgOZnLA{OHZwSZ5`K?AH0V5C> z2JU7O0l+uij>n*ULUa;RQAqTEw;p6aY8Q`Moj@D@eJa`G>ws(Qe&yYC5jKRb^fJes zJC-D^Ka9AN!<~(tH;TNJ7%834?);+%m>gPD3RTKCcfMvUa8YN8lsk;#+DcTtkG>rW zKdIMSwmnAR#22ev;n@j`a^Of`pB4!V>TUxaPQoiHx$=XGIA8^MDr8i&)zTf$hS?22 zR|qy^f*hQ zgXURYeR)oSPV@~XYf+rfrpV*2hZ0@z*pklzsb-HKcNG>l>UWQ{aXkAPKId%y4hbbd z7f-rV<*;fJfef96upzOqbh4=1xJGRnP4X;@Ga_L20 z=udvT48z~5xgm-XxGYGVGkQG}rdF%#%gNt@TdPN?aU+{6xG=Fv#S}^r6P%58M zreToUdInAP*t<>v*9ag6$2DAvq~m1ck8()FTCM7d%O;7j{wyclcfzZcP@Yez0XT>) zXs0!$C}d^WPH9zy2T{484(QEB(z}xVGP!|Wh7Qg8uJP!-nM&t9W*@y5_V%`{;|SclndEHGX_9T9~t{L@yP&<|#ns z)-7ZlY_Pa1d5W#Iz;0xCg2Sg-1j#p=F)zMkj%aHC$egB<#Qep)-hH%yQ}3pq!yd=L zhw%*I)EDx&l`(}XeKA^=d!B%n)UPojYf(Pe6! ziR2n}3vlh7MkjOa+shJ%4lNur7r}b9%bUnE&W&RU19@TvOY+{_#bM-(W<;Pd+nuA3 zYZu_o2j`o3@&&(SkYb(^~j}ax6u9LHSb(otSX;U^pu6)a^QKq@GXRZ#7bK zv!IiQyg1KU)ZhftN)2hs!ymxr`sd`jazo6+}zVrz8q>yk*vePx<5xNFj}BJ5#E<(u-lKn zHLmEk#JpI;WBshUi&uj(-0Zt;Ci*L^+v z&-hucf)nw&!GG_in2V#eIXPlP?3QvkXt;o z*Vs35zh7WpQjgl>-O{sEC2g6POH>1q3Zaic7b^Qf7{lA%pi}AGrf76p zTz2STiWTW*Dx2+H+!@HQFk!##9Z?2KS32;@#;|35J+Yj2<)C)S31jg+m)l+{fV=>*al za#P+=aEvQ<*CM`YhoXCk#(7%L5G}v10}v9gOKjpA$8|~Y%7)pk8}te}QZBMjPGVKg zWu?3KcQ)+EQ=vtqC9kXPLN@-l!RgXZ`8|PL!zbh#UG#I{`Tpoz($hNdkwc>zn3z7X zJ=#h1>xn8EVnma=CP8hg5Lo;7zWIFjSl8=rTkro$g^|Z$63p)QXoJv%qqhq}30-Mo zr)*KyH?`3vMS%(y`kX>vq`+GKQ(d#~P{Orcy_FA#+Qk1t=a3_{dz40*61R*ukT54U z>O&skO2v045|N=(yf68d&DF@Kd$nMpI@b!1t`B3#rq6dTD9%}Ww7KtZG$|KK*sczC zCDlzBzu_5mD4Q0;$f5#i9P8?{9PxrN7ltR-7@rCP5qSjVsw6+-54pdxfB^N4B-2C)PgyaMEdMLRavWL>m_?tcD=6S8liT?>9){ts6Z*=tJA_a)a zfKyzJRZ4_38lsWy3F;RivVk^3SF<<6d_GY4@*zQONiT=~L7j%G zaS4Pdy>OqZBSQk};sjT9H08dPxud>$C5HRwdE2l(KC)*jreHQg}q|4TK)t>Ssts>GP`1yU(IDF}HaT8w@=o zWTu8!vV(Mapc5bVZb$L&rZwTL&&QJCcIvegAvns=VLtowo{?&fACbS2GPyW}iXM3i z_m}r2>-RWhp#?uZJ*T}*$KtKD0E+^eL+R4@D^pCs2>BjE8V{5l#Hpbzzpmy~>^^0E zz)!l}cAa&#|E$P@zBT^(T!Na!gXdSW84Q-)C(?L|b~W;I^`uu72OrumM$n=_?5ly1 z!*LGfCq~B4XlEU*kNOA*>3nx=9)W&jM6?Zf?U_Kj7ZM-%>Lp6UM9jG#XViiPKtqva z5HY5p5|neL=1qm*%dc_P6V5*>6jm>goNPA~NuaR?;-BFj_7WR`xlcSoDe`qx4RIwT z9vltCmppfrbBWy2^y}C*i{;TfC?=_QNb=*&jQ(TM8^D*QwCFeidfZ^6sX}oDZm1=E zqZ_wC8eV6RZimxVk?mQWvD^IFI&I^5;rkr2ZRWPXguglYPM5)*dcy}d+C}Gc;U^x) zumHSY?m$*67nD~9_US|s1!AmysKP{BwpDKo%m|MrV@jC}_)upI_Kbd>@F3F%^d$(4fHq-GjV20!ZDZ*gd=BH>o|!i8jUn0oM_Y5EPVOUX&SQ&06@`WmOs zWJEFIERH96F>8as^DSB;?Fe!bm$3%Dw~RP)bqWtO$gh|(A7?xJvqXsm3WqN@AZk#Y z6<#*p9%r!z{R%te)62R3Hn@(6YdZ2vNNq?6W^TG$%LBO&n`ff&Lj3plKK}2s=T6t3 zw_xU4`s*USwW;^NzTnYVV&swMtz|5gN6Tb${}wqPOVgvf+$9usn6F`wiB-xxR+kZs zjpp&=9*j*)y)Vv2aB4qo9!q$@uOE;`fUh$n$`^aubD|K^0XHHe+@IYQ*%X9fRl6*w z6z4}?K{OWw0HyN;LC^9VXORYw<9qkS*?iYpzdrN{0ErP&g3aLMw5N&&53n)gF^=Os zCUI}w8S#pLF=c2%ng6G3aG^-=6^TC+(sOzIzk@FsBCTJx0@Lpk+}+Z0V$UUF^fyT_ z9n48_Eme-IEMjI*3&fzN-^;s6{=j1w0st_A+PdF_n<411L)OD{na1l;CK>fk1wkcK-KboS;~LK`$MFZ)5Y)1fL(l-LYT{q9KTHbj~$tgO6s1J&Ip3UIq9i z8XCJN?w%B}MbS9VB2jAJmcAnt!7;{nUM@R`yxVQTkU|afneAc9({Ha$GS2-Ag39t7 zAKXESMY4czap@qEv?)&Y=?DAFqXjXo&3fouw7knfbQ9?vWZ@akjiI;RvF_+Eth`}Q z8EN^=wNff)L#^UT^@XtRMyMsU3M1dmDF+pPpkPV#8S@O9icTOA)XU%3ZZ3ZTKh#lR z5Wy)bxy?@bBzB`;{E1Tl!!`v4w0Kde8Vvqu4CXao=5Wl$pXTvfHkt$VcFZvkv&ae+ zJxnLMU7L8HHAQeBy;NxU1*=}H*xT1#I@iG5EcU6%-^ah;qGFVe#|ZQ<-VMj(7;cpp zWB6goe<%MyY2rGi zQ@W7dpBmGOZxRt|^D^pl6c+kV&1wKvxuZ$sF2n_+)${W138)Y4PdR8bg5@t3 zjE1qw2!zV)2EH)tfhWFQl42OQUkrSGNJpDesIa!Z*d$2K_{(S_hq4PkkdUQMU&%Un zC&XU+yvB<}~${NmMYgA(M~9FB&I#1+>}h6Ct$H-wnv`z%6mrf(4UO%ZqP_h6pz zJOCP$FUQ4)I;&XfDjAQCoLeH`JA@Y?F0b4)fzpC0?g${mgYusUWgzA_4t%44jf#Gx z(HSBmy@S`3*y|{_Pq`8{7QThCdslIz!}~D-ELVdwxS#?`3S;33PmW)foK!Q(+?Xo? z(3!*x>1z9W)s>_;R)_E#Zm4_I$Bl$qR3?7$-HS_Jus43sp%4Pz;C^jHL$<|>?}28; zDxc0Zc}j4llbY4mQl%3dOu-?wqiASMhQ$vgHgLM0IH>41x~lNt>6hF`)Luej>B6E~ ziPkJ8s_x1=ESPkhu(9pWkIs|}J$mXmD8UG#dYTmixvx9ongqP4_4$8I!$?N`y*) z`qdzpHk}FzZ5i;a?d!WdnAF;zS&;EJ$0grqr&e`x>IGxa0tPKN4g}-#t}z{#3?@ME zgG<_aj-JQ}dy_PXPa|RE-fTptV24(%b!;KgIw9>C6NEHwFVf^vBQewvBQ0tdSDwco zyQb)1`1Q&oT+JSXX7&X>_s>yoAq(hK!qSg^2(DG+m$2NNx531EL;2~)4QJ5Df(gS? zof&;6N&^{Hyle846POZZL~gM%8#p7}lF?!L`GCzj^z8g>8d4-EDNjv1{&W^Bn$ygD zd`PU-92NJR#~m#-l?;rM4E0A;BiMZgOEY>fUvr!)7Cs;Mh5xHr#e^~Ct=#RoRm0V7 z4Njduud)LSWLTP4*WGsP+Bw^5c^$`%?N7*0l&k<_#KffI*@;ie+!qEG`Ne+jL2f2X znOdkt9D8%oBhoBLCupXQh5H+}J9rXe%OCM*Wwb$1>>K4E-&bdfUHn@M&%D}tqotK^ zTi-tnGWs<&$dP|v0?P+X=y?J6p0@Gxf!#!P7&NEW!c{lky;ys@n>$h35iqUpI;Cn| z4Yn@cyVUq_%uY{t%}Wp{7nTo6x&>tBQu}C@sBdms+k2-9MQie=3maXb|6LxQ0;t}e zG!WxvvYOT5Ne)u?^w2M2N7Vi{IpFygb&5)}Y12s^6ltLL^*B(cvWdvg{$b=Wu@}lY znzc*q6pi|~>HpdyHIs*kNwXHhCDb#8a>>i^E@qgg5)e2Z+3nj z${xVLxhaaT)EhT;_l9ZCz03d+%S&=Ds6Ba`g#9=TkcE)`fED0$gD$( zb<3sA%EEXv~DN@^kTAz(E_k_j9W3Sbgl5-*C95jrrE9@Oe=)IpPLy}A>a&MJfa&4z#*y{u#P*^SDVBr1eI`Pxl=}ZI8zf6 zf*zT}KhoICIy+ypgbIEtK1Wr&X3-rYe$!28%a2Fc-v%*a{0$7IK(%M&?Fe!6kfdR} zy%GD*$=3n*eAbtNQWsrPFJuU|Pq}_P7F=JC$VEtj6;A?3l$;w@LkU`s*5+@+;XgA_ z))Xvq#FiD>=LUKYv+*a;A&wLfL{+73WdGl6n9;nxsUn_H7{@B@#aOSI*VR z&eAowq)k|p&*NtiMYxQVryInzNm;u78Wck-y=`y7EhQh4RP%~V8}WI~2ePE)3oZh1 z&tSu?`bjJ$ggxXJUE_?U9|G5Ni9*ALCtqX8)^0B;rwS`u)gH1jtnQN#u4M zb{LGfH%JKSNp^_L!lz+i!x)vGRY-`$4DX<*l!RlAQ4E%n`s_+R4Wqtru2%6u`AB(4 z%gT$qc~dGU*U7|!C}WaKaigT`l5?IT%o;Tq(3t4E(@`PS>zaGug>61tpaj z2Sv3L zlQPrM{_H!U?ze8@$;`;#{2e053BKU_7Pr{`?DO73ZvLjLz`%6^B$RFPt^$a1I1WQP zMbc!z3qbgeD36sw(JO%qflHfuIN7$9vbMUieCip06~3sHFE8)+Ocs;W3uel(+h)M- zh|(*jeczaISerQp{6TX)1Fwgu>Vc@|E7~gf@@`a+7D*P%7Gwi&WZ%K#r1#P-qiMP8 zEUvM}lryQFfW&Rre0J8WN$>^jHU~-?sT+G0(emB3d>sAQEyJj(!}jP4it4P#xmr6_ z4>^Ji)yNCs_8m7rrp7V?%_rcGZ*-Lc5YoQ8vBg)xw3~-Z{SN%+rOPayrWet*uRU!Y zRI>7>1#~!j#y_h|kCu#^)&xu2r9q0W&=ML-3a#k-fRFXMnQM8Z1Y-^inl ztDx)`!c~S=k-Y~>ai=AET2&B&xXcqdJQusY4iL%)HV&uvHf<9{2&f*X{#+4ReIn|M z)fM=SBAD&2VB0aZ>@^tja?lIox2jG8!W1acZNJq4ZPgm|496SYO;1dpG@st(SJ*II zsQ9H7?`W#Vb7nS>8NT{iZhCwtYj-s4`MaLjmU#+g`~9AK7gLwc4T3nb5eO0DMT-Dx zOC)-zhnV!lUDE!z)JGo7ex`11QB#^dLwR4@kKY^%Xor6V9tN@BKe0;#!F*&AXNh0tT(?p zS{?~V#m;Kj4erO%9-2`kDhHuF&39(QM`)H7B*3H$XWYvAlIh!0sS0WJpJzG?X1xU9 zEJ^Qa_EIb?5#0FPwwXIvJm?A&%LAOZPesiwlol6DGh%xqfe+`<;Jv^id7mN=e0v6t zdOVGY{;dSyl5$JEK&Tr*rbW9y&WnOe;WHM?2j+&-YoP58BmB2-#Y*c|H;0O<739S! z1#TwT2ziIWr1~tcAqbsGH%{94S(CebH(dySZ9uKtH?;nVrlyP8kb~*h$iwnosA~EA z9xu_R-kT8E-@2z>(vAb7RvzT^W9k0NhAAt8b4@n3<6#a9X5jmFLKHIj>`6yZ_nh0! zsda@s601>-11j-)3WT2ORW!kF!5NyY&Vg*mOAH)bpJmtM}J_FRUZ#Dr%cIFw{~pVQC_SppB(3enVz~J*JlKf$Q)< zXGj~JqAIm%f2MSHlV}5+;Jo%5VWIjuL1>!;ALa!Q6aUqEXbm%N?^*H915J$Rj6){I znSPJUCK6o8lL%1^N>&*1UgtjX@Zb5~6!?&XYuTp3E4p_KV7)m!DgNa`EtFe}RoEBE zGanp~Gd!kzeYRd*qlyYBomws>yXGKSCeZm9CSxe!N9QDha4%5wT@Ku!AMAy2*Gi=7 z9wM59c+J_OVcm!Rj8L$j&hk^PtE-;D(5LGM)5<-UIc77OCE5KO!5KJ2{UHBFWjmK@ zP0Q{|yIXb7X+(AS0=N1sPjX8D+}zfJ1O|nVvfwyt>B=v9^BheLfUTPAamIgr+%}dr zo5FaVxq>i2p`1>Qs6L6|x0qx$LT(w zEOk}FW)HDPnLCvC!Sixv&f(Ij?tHJ(Vd9|Kp(UvO_W0CZGkn(lWd!mkK*W$Qp~ zrz@fwM~O`(m2~K0oRB^_@dRqTf$h&gx-YVrq#r z{<0X>zsuoV34GR@+}@da=7_eB>n-~J-l#fLQ{R@0QQvWACB<;No8C)zZP^WavIA~? zXwg!Yo|ffLVhEpkPy-ZYKdiJI{vRQQ*{J&rXpw-l%lIMU{6&xqLo?ExG~_5>2qxAM z1^s{RhmKiBLN~SRazGk}OPZgtRe6sSP%kp`h<=fc^xgyEyisUoyK@jPE0AVYX#T^6 zhcCtUd4jCmd7TuU=x+Bfh6h@vHMve=RT+cQ%LRz^JLMAuwb` z_7Zzs{>Z)V9a+~lvG~zGr}0%RUgs`|Die^j44x<_iekV!9_a>OQfVif`8Elt=qBvY z)E>m2jqpEkThBTlk}{7HaK8vzSgrFH{cQL6zjTF2rt>vHMyT##<^xfl34H~eS`Kee zE*Svcv5Fk*Q*v#-Oh)#QVIR;8q3*UGkWNj1UUsk7XnvN`4LvNtVye|g_N;=@k{_sa$fH%2EcZa2{exQCnGn3>+ClyknnW8rDvNcYSI43 z7BX4^b2KxAQ*`|*=^fsN!gdLECgWyMNFg}1rk7T1qdpbWR(ajE4OVerIsU<=nFddWF08x&iv$?|o1 z9q~->>;^k)-ahUMd52g_2bs#>Y=VKw>-~-(r1}l5fZK1vXWckB$kY)PFQx=7QItl3 zbh!dlHuOr?)+MYf-bQralIMH91_+UFdlkM~*;yjk`pcrVkxB_l=CJ8%^DQa7_~w2| zd9Ml|V7b9dtKL6$pGAka2dr~Ll#yJ@1bB?`;MIcLgO!Vi-_zeLR5=+JMa!L0A{vpv zO_bDy+ehy7L1A(67IDopRx%lmi`-Nk78T-yv2rgAP776fDpCGYmXi}9QF3QOj%#uH=Wb1}$IEHWj> z@cBvg`s(?IG?{h~Mqf$7xYpf4sEVXpFM^@nH!Va`Wpay!4$t_juJQ|EW-NWipU}1^ zH~jGMZd15U6bm_^Fzkuq1sIRH{emvia%fA)2 ztG_6kB#VsPwx?aiax#T``J7l4pMW};(MsQ3%ch64@p&Zop3o@MIdvSRgP&hvqT02@6--jsU4Yt#(Ws|PVR+wihi3+3h& zeQ>?YFrn~f^c&TcA~HRXdvr1rv0)F5=S!{`p`0cUmw4CdyHNt@_f{X4hy&S*a)PW) z|JeoB&mpzy_(R6$35oG$AuRUt7|T1|ORGO7>11C{;~GLGxWuD=m`>DY7MHtBd&qjx zq(5XxsZPHNTG;BhdBsoNPxhV79=sf~`XZ~+^v_O(!*DTUxx@dj|I;1#5v*|dE$;yu zdHs`A> zdXk^c4&R1Lw}jCd-%9>?;y-m*4}D}on~nqd_J5tRPLFTMbbI>w)*pvpL-FQWAnp+n zc$GC4nQ6St`Pq$VRTZ~7w_99W!2-&ZGy?Jn6(67`Vv+{CeaVYZUWHHK|7y1FP7auN z_u#Z+!&hzBygQ99-ctO5b}pipm;4Gr*xUo>RE|Og78d+{d3~8PfvI^=V-s2q05U2|MAN6fZs zCT}r+DKx1yv>VDDajJ@KWXjNi*a}!6&_b%#AMB=*Xn>0wQT!F{H0l?FQ_x|#q>s8k zDOhwRZR$y+xT*Jne|5MsZec!@Ra)1kKO~1fjyF-vl)R=#N!SxnuaiRZd0ix!3mob1Its^e!<%4XQ^AryNVqQyX#8k!v4-DbL7_PNLhn`le~G3)g$9Ym!c zFc?_FbFB0|VFuChEk5MGqswIx|MD#XAaG&sLc#{GyFOuwA$~=!1R#N^d4rU9|5iP? zK3NRB_|U@l%H3QvVM&r;TYHDEpLb&WUu ze(z%;yznghw3&pUTkTbp04zlJzkRW*yf&iMF(M4_+%7p(Zi$0;N`I8;^yU@?gu(zF z0`|p#V^TLVx$fXrb+l=W)4VK81I8k(?+<0v9`l4&mr8+d^ zrB|OmQA7O8AB!4h*G4Vvi3RMoerX3Ue?D$hnru=&Om%zo!K*(~m#P6!$`1cXyB7BR zAK4} zRm)Y8)T%bamwAxGbc9zv;WVIvl;SiC^G_3Kof3XncKOcm@H^)9o&`{@v!egz$S;UXM_-T)I-c17DX*Vt{{8e9`3j* zF7IRHx@)B%|9gnL;CL(2M|q@Gzg3Ew-cvr$9xL93?J;X#EdREq+l8%Hf-O=TK9Lq2 zgB<;ooM($CuvA&=T?b%H;OvE}jIv)%`7ez4Vy*bR@uf6eB$GuZdQ#RF~{iW)7 zE$ZzM_>91G39y~#)AMI_SSDDE#4x*92V&U!0lC5f4DKe;A=5HGz?aeSK&6(T?YTq5$Y4D zTaxCT?J6(UJETEK#-{sE<|VE{dx^XVP`kug;u=qJZW?X4{2Q@cx;XH8?NnK`=JnG-BlVQ#WXSCYWzV_-V%GcJ*Nb z=&T@Av!W)p1pf;AEm2qGOgOt!+ow$>H}%h#;CQD()#fP^cD+#ZP2ZG-7=!@$lH_>m z(|^qZCID_%@L*-C-XE6p5O67MrDAy|)MF~)9=BEl!&TYe;)aZs@p}K`t%E`PmP|Ip zvRCB23oCxhPh;NbSB5)1F0-nueAPv-QGH+w6hDi+VhW4AG)syqP+R>M1K10K`XZSU zP$G9#|ED0hCePx9B|LFY=k>9-OK&?_B}(!Fo=G2!-O;V{n3^R0a8i1ZQi3r!ACikg zh{L4t*co?qGXB|CA!yBmNn3(elb`v;=Rz6m4A<^QeEOs;;n+pF`;|98%kbsR>>qE; zJV(@rUg>_%x_U>aJ%&s&WOCcC_34pimj!T{IVp9E60Qqczw0}{f2^O|3~>n~t91~l z(WL#e_iK88>hU|bp>OJJVU7x?>k<O*> zIE)VraR{A8<^QTnipXEz)29CO&tQN?x#rn8)lfBA^Y#y5x2eDYNFp1>`Cq|>;|#kJx|sn6KcO?0yy?x> z)84(!nHf@Mss1OIC41A-(j4hlh3h77vj(rcC_jn)HT$L**a{$>7w3k)1+iId7%}`` zs}Tg%;3oC?{lSgQ5o6CQn47i+2KG48S^_dA$1A$ejMvJ}S2eEP9WI@-1)A1tv}GQB zY1t$tn)Tv`4u>YFOd5(SKsi8bheOgu{;~EMe8*pQc0SFv&(4nm17~)BWXzl$@9NI9 zh6!FeKlq6et8=ex=0Pk#)u zrhiDfc0(QJ{4LAy?MhwXW?xUwW1-jJJhPs1sXvch0Wt5QB3k`Xin6qe~S_J%GY`u9rm0kA-d>n_6GG@+@DG7x_ zrW49ML}i|3h|KeJ&Pf@PNHR~AsmviWM@E;v|O%wGPrOG%@YR7v+>;mT<5SmOvmujyz zoM4OBFR{K;raBjy;_*{I%dp(B`15mXSU$ji_72Owvjk-T&cAD%#r%WwUnG#!x^bnY zB8`j~6CEn3T-Il?cJso*n5@gV0_SS<7xUr;%X*WgoHx&&TnQFE!NyI5e$gWpJWQp< z59T`mol5-QT=UQuFKx!K;yC6F>}oX0W5qH@o`i>Y0JFGVyu^0peoTLnxxC6}0G`Uc zDONjcGZQM}Z<}4-(-PdwtPSq!<=^o_!7&;Q@mJ%sB)NVg4WHY%v*a^K zE)6#Hk&t4Lz&#_rDBB!E3;HyH{@$SE?%?bm#Sf}twp(;(&fFPl7ZMZeh03iWGv2kl zb{ef~ri0TyCVCqDQ^Rc_gh>&RR{+VVvdhyGz46Xf;fJ8{~o%9)>Gv1y5SZ>pmYP~l7Evsh8#3Z$S{=1Im6`;f2F*UVRjV9WN z^WC(f#pj})0q^f#+DCtk8d~Q7uI=)n4DBLScN3zEegr4P#o3sk_B~dAg|H<8Brfwo zoZZ4=2s@zL?cK}GH@rel@zydfa0X;>FuQM_qzm4QNk`A{a**ACYPakDfc3T8| zV|Ev?yWuJi5zEidK4p?&dNd^S$Av>Lq`I!Z@}brP^ev{6iQR=GDgwOAVNIOw_+8FQ z0KhkL_pT}J28oVLk;*X)uKaG}mzgj3S}B(;`Ek+A$=`eW)w?=}aW8Gyw2s?dsc^Ig z!GZZ#2`7b!W2M@ID4p+0TYmR}V1BEn=8}9moKx{xp57J(^VRk~`~7}x8u8V3kq$$r z+Lr^Jj&oNu$YAg48o!>p`uZz7u%5MTpfX**bI?y3;UhTMJE%#`70uJ-5F@#OlE$qY>l(4 z{WfU{gr~)kCtFb5UmF4P7^`BN!T_2@T-jP_LhEzboZ@%{th-OiaOQv>XO? zD-BTpwq3(?)xnlWE#Ay?$VG9=a+qPvf7=ZuaWdTqFEn*Pt+Za8?)vBCsKAP%PS|bO z@849hTu#fxRe8*|Cpp#GXiO`%uyI^g_3K57^3~;TRiS(Rsu>}RoNtyNz@A5o z=*5G#QDzAS{F|yB#I(=#@0)hd>FyQZ<5(K@8olE`Fj``xsiUVCe?yansT94xHkwLg z))>U5b~cdg%MlrKf*pa|eKL2@$*8dRZrXc5>sVjJ;)1n>p=;)S`8%jHV; zLix*CpSMKht)#nMN*MB9H2Esh zeRew!*C5H+mhB`Jc=#`mDa$O)wA4`l7x5Va3#GQ-|9txBNR>#b0V%Px+i*wuJr@bbiB1JJg;M>gS?v^gFi>i~ zoR*dHVOY|0E{AXO?h0;wBoPj{|Amvz#Q%3Blu<+(K(}qF=KWTLOeszps< zSRP;+eOwJ`|I~#T@~C$cYeV}B%)nr5e zVK42)|G#l$0Y0kvT)s+0lD$KorrIwsuny`w#t3{mpOBDd9$}c1fb-YuClbsXgCFca zs*Ws;DuMl}U}k;JQB(%AfjK<*$oX$T5nw=0T=V+ zt6ML;zq@I(oc2(^+cV*ceQdE9=5}e>9a{cZ=d?ILm|H{n58Fh6?xB+BM&t*s+p)y< z8HWR^x7sD^1RY_rL|MzH^I+UMC9=oMw0mSuOPAla*p`(zX%-}ZnTia41ybbyMG!WC zAWmJ$HJSsXnLlvLw+;+b(B27-!&P@K9_SVr=?^sa~j>wT_hB zYr6rw^OUpyqhRo(5xj`;ME$?m)$nAC#RhKjmY<8OADC%5&%oUChM*HkIvNt6q}IO5 z2Y+B1M1$7Nn2)gy zrHw8(o!BU^-|tY1zr^vlwx0;|jtJ^ED*`yPB>>B!m&#B5+Vo-JXPQ((NfkZG zpy1UL(9pfj*yizivN!4!0(wPQs3*i90CG0V^`wtwMd*rbB5F2A{21BTmN6dpYGiLp z@icNo6@%5ZQu~ZKj#P3X&4?QERT&)ZWeI9&3-sCr?BId##+;psips<3Xc@{JO7Xp= z#tvZCrMCW@m<1slf<0Z}UlNQUXSFc&LgHv(4$#1^b+g8VC<5{AqyAuB z$Zb4~_wLYi8}lW`XxLo%Z!&K;Ko(%-(nmL)f=eoU5P3X?3Hese~u*A4E2#Zh(+=RpZ>^t}dV<8lf#qGA_#7#=k%cDvuueU}>dFWk z^?7UdKAHu1DlVUm*0YDI_2?uNLzJRUHcA5Lq`T~U{=x-e3fa9PiT$-6{XN}Zjq<-p z`&3m&fRkS$CiyV+Afq}rXg+#`lEegP!9%f3#bZ9p4rcX+yIrQc;%9y0Hn7_`yV1H@ z{bGw7SNxVP!GDp>eHe5+V?*#rQpK!R^Q8#v8A+blH92+!5cU5AzSsvKco@A%^$b#g zCvV@2nMy9!thP&U4mARWU}Jrvk)EE8C1<{Rv5KICdB%CW`Zs;QN5eOgM4H!}4- zPG^N6COft_y61X#`>VtIbv*kokoGN_)~|L-s^{L#Z;#>AxggybNz%l-w1^tab^q?r zn-dm;q~XJI!@`n1qYt5%-3Rh$*?$If4k%PiHm=wh-MwpV;`94VPqC%q>i*_vZ;eRT zIm%+>{?2+wQy5K0r{p5batq@ro5Hw$bwQ%OsBhm`9wA#Gej$8m_=sO1_u%ihoH%bi zecn8d3ZG%PZ1Kph|9z$p&?LP*C-cTaN0OM>*u;h5>S`*r`CFndjXU!L#5R!ZtU#5P zD?~0FX_5jY^9Px=-17Z~VPa3rl&;A4_3T3p8{K}t)J^nR{qr^~3HgFADk&+KZ#h?# zNHwpOIvp03x6NaCxNOuAqm$?Acj+!rSL^2Exi70O{X0gd9kA>8ajLmsWDR_Kd;3qD zQ2kS}(C>=4{Js4i@%7<;8q72Zz7=dbl>WHTVXgI5hp`bWMqyXIcK9jgtD-M>)P(Y5^h zP%VfwHCdlOj*K*cwVY5{w9F{pDr}PS-*R^Q`!+if(BPu2!pV=3JBXk8hBm(Ie>1t4 zdVViv3`35yl?q5HxspfcXkY3~l-K~hiYraV*_j8?c0ATjE70|}iMa(;UoIMyp6__m zf0jUu2m}mg#RvzlU8wG?a-9wFL14T=WZX2{HT^$MbI&b9n#Z_CC?d)6LFpX$_9yiN znVso37u_Xj2{sXP0T+2RQ|C;~?kHL<-uM`d)&ZP88KCaJC)g%=P~#1MveB=T2v`MBnl7B$vZlfJOJ2j$J^zxh96mou){=C8 z_YBH1vrMJnBTiU|pFg*vb+mFSHFu`x8;%>RNs_^F$$1Q^V`P-vOjW$#dnfOWi1`0I z8;v(p+}(4fV!QUgJTty2h&>n(b^EDrlkn`UWFjD2F)-LSo6*F_pl#1|3hvx$e@^R*^9z1KZX3#czTvvf(3L&L&T;t zIaJYF95FG~zs&2(QTdHn7yj{SUNqnw;pb%y#I7epAMuTD&cAFlTs zfPS*q<(N4IzJ=rZOKg&$BIX(pDO@}_8<0;OD+zCl6B0{99aKt!HEQL)BHK|y@<<54 zyT9elV^U;*uv$hX%n2JMK3QCQ$DQ&tEpWc9w;kxQy>&<8OBXhlP-HiPHh>v>W5w(2 zY+*(%@@$*#r%K^x2~?+#6Zq%ZokH1S7FgqA`!=~ZblL|Ut2>^uNC+eKtK`@j;o$$~ zCkWqrV)s4gdGI5{FZW>gHT1v2RG!X|YGG8m!fTI=ft?*n%tvj+x^Gh0g&FTru!w&x zb?A@&ghCebS1G3=Z{2!6Gg@CC+q8WZCLr?LE}0f4m7>>unB>OZgSLUrE%zsx8_&8X zn>XJzGIBUr%a%=mdjHbW(FIG;25^qmVgU`!<^CN0d$GQWPO3~Ty31u{eAUOZ_0-`y zpCFp-SZtvF3A5XkWH904P)`>B23~^?Mh?UMiFtaI|G5hg(?-epO(wVNvMKO)slI>t+P4aE+quJbm{5QMHsn`#1!j~VP?SYckki!K5hV7iiV=&lS{ZElI5TX;i)UM@&rM8T-W94IacA8Jel;FMUM1rizpsg~ z-$xA57mXr{+-I~m39ncSZA&hDpTbbTK>@JbOVSZO8VVzU&kOtdxY+=^O>vsrk1&1A z`~8KR)qpxi>?eSMe58r0cWU=rtfe1;HEgusgEjbe8$N;3F^??7j@hjya^&gaMMd(L z8-r`l)+`qpMXYc8{~awfm6fGFcM?HM(pUK7_WN5fE#X^rkCh3q<&4}%sT>wc5I&Aj zH!IoIyR#>^$WM>d`h8kI*r-AQYYEjD1H4+eEmk1h5!{Dqdd&XhzTg#o14~4(y{p)B50-Cy zi8I&=yg})w{|kXbdA?_9Ku9dkaF&B3iiP0DDDl?| z5+!n31pwup@9~5Z9;(!DV5#+L+C`?Ty$U`T>_SF?|9+x#u)4b1BNIyq6km_Pj}g1_ zyDey5GzK4#pR;%MQl7uO!wC>It&)r8Xb+wq#L~}7PYXLM z+J*U=n%BGSJr(J^6hwUL$xsRb6*AqL;6~iIGb6G?r?rIOB-dZIzv%ht(}#$m0CC+q zSPl35LB{o(gPqwwAWF&CuW&Z+*5)-u+$K>=6m8AZE0&YbvuPd8JSB=yc^U}hv1G~G z3O{^>64B(T*$v^bknVyo_p$gBC0-l#zhe#CIU}V$^5HIb5jApZy+FTigE6VH*1zMU zPnBm^0+P6XznlIj89)goTkL+=bayHvt7J1P%o^aUNuztsYm1|}?9W>S1c;$CW5O`6 zso<7znsgXtnl$GjHA>e2R=KPE^-advY{9LIaMr61@e)(XZtWmuct8DEo(jpXf(fJH zO?=6(dsD(H%hH7nt@c}7@B#R~-3yl^AK6L^RFWfl8}AMv$VZp4y#nLy-e@-8 zutouXs;rzKMYVJ{y`n--m1EIrd)HIZiT7bsGGK9I?YAjO4(IMj+LH9`C-pbQ?hkJK z@10*i_wSg9ly!8hn&Hv8eVewEeeDSh{`@34lj!-C%OVU#sVpyYobI+_L*?O=MM9!i z|7GDs2=vKKIVjxYVna8{9zTBkXJ@uh?2TgNNIS+9NT41YO2t{qWiCY6@&k~9zq9~d zQ&w+&KNR639`xFjn6>7MgH5aB0ejV-a$$a)>bDM zO@G?F)i2f!hSy+)A5C039D_e?lvtXVvPq$eYLnk1C~k*ZKGM?CZi%N%K7zrSiDY(K zOgbj_K7=cHKV7{=oqivqus2cQ8%)A_xDuhjd*X`7*K10XLxZ1s#A~EngS-u9cHc6E zh**)G2|&WMi?!&vr_r~;ql9VSTe+PMKdyZSs8G-QMN{oz)73!cs}7f-+eJD6ie^ik zvQUI!M2VoZZK9Y{>YrQB7iC0wc|*=2C+AujqW}vK>9u-tSn6^YL{?qTf8Iz{Y8oFM znOl4vE@-h_|AQZMf^x|e8~7>vVMpLuGfpBG>et#phgEo=6&eez=7V0I1xx7fwoo~hSZw+ELU^(> z5TOI+URx}qpS%_ka~#3>c&-QzZP-_F`=+PIJ8LiLaAFxQ@n4L2)f25cWpVx`0Lxx3 z(*P&_NN8#KGh2wP(gr7RWg}6n?k!{u|2Ob8cUO}BUb>al*AjZI+cN_(m>7=G}kL_qk}N`YcKi4$2hRUWg} zjupR%1x%OA_#6%tU>F7jk4CcXRfj&x#uht@R(%NnkkH=9e@QD^G6$o*dahTa8JG4- zsg}g)UXFvp>KFidYV@KgrwHMIoEAZgz=^SM={cZJYQinUPXkko5 zII8;GhVQcJ?b}v@^?R;8fKA*JQ2_5BdkF2u{E}lR`&1M@=j{GKa#;#K1H6!uVtByO z%A1bqlP=S3HnvNBgtC)&^9}4I9*eCiNKg|XFQjr2n*twsd?rK8BaQCM2)%Y;UR>!s!uQ!ss; zn_BRHzRP$^cHHfqW%JX^`G)0JiHL|~vXve2;eRw7+e+nfNlgxlKCE6Vmtxex@DaS=eM~g;Uc|iopm%#7pw;G?-ccTp{HX1Ix zwCBDFA_{lxY)f`inLjH=yJavFF0{o!7`%WUO4+k1e2!~=6!du^&;5M-D zDov-~l6m`8nZ1L}9WC@#FnKoK%Y%cuVn6Bp-YtKy@9lJ79FhJp+z(atv?!&!Of*~n zX-{B0%e;KuZ*p?-VwksD@G6wT_{XT1bb;d!QT7bV^r_s6+q+P(X|uezXdmBB>8xxv zKTu}<_xoGH$G43yCKG9;kVj@iHKGE7o=5pB83KKlMWHvSa}VOSUXwUYc6V#L4SVz^ z1n%!V79){{^umzjd?h)07v^x;X)iGWC`|j1IN34Zv0APVA>VpiI(+V|`0EC!VgW3e zBc$TrLdk>h+00AU?F^@AXiDF~pzFTPWK(KDh z;?1ObMWhZ=gM`b#Y-O^QX+>7#>p237I$;lsi6HSy}N{i%bUi2sCyV=FEw_QOKt&p9vfL+fI2z(wb{{NTzm3%w-?g z|9JNj5X4uJGtX(@Bfi)h3A7Dj ze-I~N_{Y*0^2TID(0$h&eL<8Kh6ZdZonJj7G2LI0(RW#aCW&6J8j~K zN=qyJb-*PsIr{YM_>#HW|0$?Vzl|Jexf1*Jgvy|z9odgy=?4R%bhsaXmk@B0iu0E& znn>sy-?8XC+jBMgePW9d;|?Cqc=M_5U!Wh3+vy(m>#nKJUH$%6r{i9nu{BW1v*`@R zkW_w=J!KT(86tQ%ld=m#OvJaC01$H>P-em}kt0;kqUkac<9Tn;!G%86_BLE)peZTW{;A>fKZRokMzaF zpvlT&OTn|xO5V>PJ#x1oIf+MFO#+{u4g1!)d!z45OxHJeM{y&0#??Q|zqgzqKv45s z@|@E<#pp%{sqQ79x~DbBIPm(g#Rp`w&n@EDBkQ*+>-52A^-n^ZP<=AdubcFw}Cwak>XSs6;x;>Zqsy~I(>kchB{r>V&Ci8|MAUI~2!ukUP`3*cW1YOpK zIXi2UkmAQG1O(dq;^~f(WM6iBtbn04gbXDhnosLKM-Pyr0{f8YWIKiI-dGi!2-a)U z@@?xpO#IsAM~9Mqi4BkLNRYXATTjncuyT^R#P-{{!zYp0n7FtkfU1>(-_)M8`Bk%W zEmuO-z_k(_=kRJAiI_Y!kP_V~z?ym6<&A9hR(bD12{auUG5`i_HZPO&pgrvqM{J!7 zOwlcKc1rHAOsr#gcsRe~mYCb0cD-gBEl4xS2zJY|$UaQaHYtTZ15vlLgB-~T{1ho5 z?B_|CRLPxHyxANR6LZ`D$0$&o->NDQ%OSbVcj>`E=>;~gxrR3^;UUhnz{hJ{QhtOt zlyp^KX&qeS6q)ns{40Oo3>TRPRW4M`K8^0N$klvg17R~Q;%=UvIT;z5cAv;k<7c5B z?!>zPTVaRJ1;NtjO^aFn2d27~YGQ(|tx&0kbyFzS4C|Kz=r0T~LiKyy>wTM1^=V#s zXi){rY`A(|^e_QQWb%Sm<7ZkkPPk%!V-VUVJJ^KDa^SfDgKS_;@WsgQlw6mqpddY^ zlAZb}XRxB&P8j|1%9ozLi+drgzAbCBy-p>cw}>F0@DST;ipu9u7bN_8N%iz6B?9cL zR(4wagSBA1xvB4N%zJ2%+~UO7$N^%Rn5h~^{8cB%81Uzpz4e{7K5xcHzeiEwr9=$Y$%)@( zAn9N}gJa~j1q+C)D;Mi_wfkQNKyNRE(0kH1Fr>9!K5xb-jXPv~;?ww7D@ro_<0=?2 zuKP|hm;@;w*H340^SuZ7x=UsHc;S0bW)XwR=-o<42mgQqv0Vch^NJ-u!`zv}KIcW0_6`e`Nm|Bn?u=V+^@u6V zzne-5riKjW}pX8W;(;Kei;vc!TAFyp$Tk9IwsORKQo5P(LUrt@3?c zAk+Q&_3I~}aO0oCb4SDQI)xy+XjJhv&#=66y?y%v5*Xeq$nZoNAK{N%jMV}BW>$$= zRJH#bSX!oNTex1Hz2B91C3hpGA4(Z1#Up)uDif}Gyqnc`BZh!Y3j(%8ayk6=g%-!s zdj+4oCrUabE3t--mjR7bHrMooev9T?`k`xDnYtCIo%}(J&`Li2E|e3bEhz0`1`1B)RHP!5rT2CaplO(rnwbq{$QEtTR68GAJ!H^=e8on_RMwOu2I zfY0A-vNclF${mNt84@o;O!^L7#HRB*rBED!Z9Ml0i;VvYUD1P(N*SM<*qmzsPkKynH%ITe2tVm9@OC(d!WtoH=tQ zfxob(J5R6pT+kZ{#337d$V{-nkF)l1NicYCYWK@V^S^|;)_HcPjE(0-qqiA$?s5$F z><^aOSppwb^21H)umZ0dX<}kBFZrojQJOKZ-do?f`LhEYy- zk~gn8D+NK<-~ExrZEGsk_CRUKv3ji7sQ()dWxU~E{;Wj6{)g1e8*dK0M5(bk&%A`+ ziw61bulK5NE)4fbJsHMFI~Pt~G$_qkDJ(efkIKbR#YuvX4kesChu0@(Byg1VS|7Jw z5WccH`|;~5`HoTC!Dim>E9kfj`waZkr%zDLT!Dx)UKx>)GR7n14#OyUvk4EJ@o*?l z^?B>|cys7pGo8D4V~rJA@I{PT9G3t+>E%8TtB{dD-K0o>#VE5Q@M^V11O)}D$^7d3 z9=Ht+T(6N^MDeI`M=*XT^eHw^zvSV}`5Kc71iO@>lW!JmtmAexKAb_u!Z)gLH1Fp) zHyV5M4Q-%XFLkuEDE%%X@E(;beJlx{jp$zE35++XE;0U_ImgiC}U@ z3lr~OME7pd2tpo85j$dfqoMYWI3co2^+K!?AFSzPXZq3M94T&>y^qiJgikl7#`=OF zlZnsPYUsoXyrz5?G^;oNv>X9PPteeMdDFtiQwf^!oA#kMkaTVNR%6wcj8fR^;ZL4i zSl9xg+USWsemqGdxy^kE_}+J{o->yP37qY&vOIkZM+d!-JKTi+Mbz zwVC8p*WaEdE1THBfOk9<*tz}^V|wwg>##5(6KEfON8}oQNu=OTUy44Er2G0oJIz3e z?o1( zTjSxU7382|IHW5Ax`gUf>%tojC5xwuXgE@8;VC}vMHz(ORy0owGoMC=w70cQWT7xm zx*4I2P$IT`G%#u4+491@`jOaEmCHs964UD*^JTsF zw=P`hXm5IkrxQ@hVy>6q2pz`BBjL#8ou_zJrp&}n2=`sSb(*1B59+Md+SNtz#(w88 zO1o~hFjUDmcVn%=GaB?4KHv6JA2vz&Y)^r6=wWt;0AE49U!c*jKDMi z8DKI_p5OX&2Ivdw`Ohd>A~ch;H$HAe)^1z`+F9W-K3p+tct})W)6NJh z=+b(+eCxjhsvplpY2r{qoJNcb=YMUOXlq*xe0b2Nj{A5o3(5C zJOaR^Hy_^VdvgNg_l;H)vs=Hy>#cYMIt=N=h_)^u#ikzT+y{ZPRyCF15liq! z%1Ik&Rv0P{yiug+DKxFmPaC7cKVgFajw>ZBGZ86Hn9dZRA*)8fK2r!=f$Ud`3M@xt z)NR)8mv-c8<5ZS2`g{Sy6EFG_AcQPD*z9NiTuk8NIVE-h0l4yoEXVPJm`C@MlE#iF9@^@T8 zcjkZ&E?X_Zf)%y547)Rp*L!vc0>8?i17-G&tUQAUd@w8i>0itL?Tu1%Ij2qfCjaz@ ziUGj~9aL0QO0$qdhbb!Pib~%FT9{GVD~9nmFiOH}@_4wk5&|a3##5UkvtDmp?P;`` zwy%m|g|tu)0m#1vqgcdsRBUtITp}e@XO>{w4e6RczNokIx%4`UIp60L!zFCZ?n1Re zBd;Sg&Ski2>_wMhw8;PWYXVF3GrzX-{KDQ6`fX0{E|loXf4CWO+zUXc2rmTNGg?dP zFj`n?U4`7!Bsem(!u=3uYS8{WsL-_?+a+nm-iiG3k^4}LJ&ZmqhNY~40FK!^jlc_7 zg_#yx)f?FHvArltOhop9*9-R_sXNf+Mr}|$&LMI$5dz|RXj?bMFiiyf{pwsal(!p8 z!wyGxlN$6S0&EP5Xw23~gGVqnokD zZ0asvQ=TQGi~-P2YInExlm#a{-nQ3>pc7>W*T1nAm+TGpvk!1Ec6b2E7IaZA<0tPx zJ|KY#{~cIeZ<{-gF77}8q)3hFb#FZy#_5_(NaML zAyEz>P+4S$3*Em{lpQ+a)+K$knlKC#0w~Yz#u5#w8wA)eJ7-=JGT1^p(euNSN`a+E zQZ;@*G%ImA`(Nrmew5oJF&&M#w+(@elCSEAI<~w@Zm#)jnI9&PUs}u5ZV6*jm%KiO*hd0M&cJ#?#jwa zJ46Ei943P;F)#Ubt5SzM3r;BceWA}8 z>t%8S#TkyujesvMdNKG=fxZl|qMT2R_;ZmUO3+8*(&pCm@+GfTH9|E8bq724if=eC z;-{F7prwU*l3&o>S(XQ*WLs6DgA~dMp2GEN{tC|(n@*P1k0*s}$y4I-`q53RSL^GM zsHjjUX#-QxSlB=Vx|z!M8p0xKUSNr)T*{{DmtFk+;-IuYuwc<(&Gy4117zpL34y0i zbo;vt?ASledP#Fw_VQ=^EeQvKc(AtKoDs^S{H-U|~Ub}*ZM z`MG-bL0oL?ee$$J;lnARd*ooXj|PZrV2{4!=DLx=s{VxALO-$*vBqX3+N;e~PNj-$ zki)JX6|{5@@lR&6%o4Sij@#|1hJTqWd!>|QzakMW4O;;;ZrhE-ygU~Ww@jWEc?GuGh8CX9NhxA|{{($STWm)E}yLYV@DyLXEiO3(kq7lOD8v;&721_QOY?wv1 zQ3CJOPU`}_>j{u}P0%A;Ml-F6|MHC&adFwlBMU_y8q+!Nv$l*6;po_ea~hD2lp`fc z>k~fE0?#9PxOYohR6&R+u?C@nf+0D?Fv;(rj747kJ+Dg z$AEH<8oGW%f%BdeIaHlKHH!JKLdl56+X$|`IU~O~Qrj{8?Tv8>7b~7+eFmuY*iR;U|9i{2 z-zVCs$w_BAZT|y#9Z2MH(=dy8sKkP2nkH*Bs<%TC6HYXUT+4>d2HqINN6K*Q;=S*d7K{?%*XJW}JnD%tHz-)}u~U=+X0aYOvR+zAl|Cy%dkaMK z=N?)!KuXC63Fd0_EX}}5S+wB+q9Oj_Lv+58URwHn{q}snj|0i{?tPv=_)Q+H9p(i0HA93}8I%{f*^nf5Ckp{d zkxLob&|$efCZ;UZ!sPnQJP5g^81c9?z24H0l)fTtDVhK8|1hIw>5t@md4s?OodE*OtTS(QZ33g}d-#z%AbIbZ``t^4f zJbL&sc@fe2pM-6~oHu{d*ja(a{B3>da7O_sDsAiZ#RvNRnz;U>+HV!;j6!rq+W+*k zL65@!%ItS_bX*a!>0I->+k&qSW7o#KfB#BX}CQbv;A*WN2m=x0`P+>9hQDCD-`c*HIc*FIO8h!%Nq+ghodbh zJ_yhj2q-5X@h^nK(c`V0?$Cz?p@ADQ?q*apcUcVqdS-bNcKnDydO8eSB{Z$9JHRG{ z$fQy1gT&bmM@9PVm4+;SeHEl%?fGEf^Ko@o8L5(a%?IQ0z*G;@A(63`tr|*}1d@-C zEJ{gQl9Eqy{hTOkvY%-0>Jo#FDANiT;}!lqbxUiji?qSd01#p;EHBH2k|df#B4mSh zzej&bWeLQ6X7y8RJe62lOpOOy>`e^Re%P@=8uE#uPz*sO+6WCImBi?r&z_NvAPujE zsC+Q_w|`%u$?7YrRl?o2vYe-0A9U=UnAQFsAKHU@3i^UK|NE4zD>t8XKi2nZcI3V9WW&THV z)EDUCbOQf5s5gKG4e(9#l1Yk|C)tBA^SZ)Nui}<5rPGHs_3YBXqrqab;;8&~FCYo9 zy$Re9QDE1@j4FExJe(IE8maP}H*nd+IV-;MI<$&3V|CShm$8{PH^2xqDlEO$qK#Gu}gO4ttrO zzCL<sO|wMWv<9+yM`;`!kr3)@SG z8)q<{I85ng;aX^i0M{%{&v86q@7{pwq2ffz}0cGgBy zH%4pyHp#muDGz5VOg~1BZl4zyHUL4;H(wDZ$lu)r{!Uiop|q+xmUuX1rpobs16xA3tOp`~Lz)lOM zgynj14ubgtd=$yzcB|_1r%D`jX6t96DVq(+VKOU93yO17ydT@?z_i5e9zDggg|8aT zEn#NK$Y8zqR$)FsmV`6m8b=kpx@J(@-p#0-O`!;1WV4$NfSIIKx!aI2IY8JXBfPbU z*9}ScX)_g7AEy@tXG0E6kiBTwbCBq(YL4+zq*YFh@3m}Lx=leSEkqtv#)O2mYIBI& zJd>eQxD6-RtOiegJ}lRaDh4a@bVmG=1;Ia3KlUC>3?~v+7}0jwkuhn14b@2O=vb3^ zvL6480xyz){hIyFFB)JmJp=Js=q(=Sa<1=Ms@gt2KGs+?fx$;^4g9)L5Y3%}of$$D zHOc#Ge?fvLh;3OO9vAs6p7$Ak$5*~FKbW+#;;PO;!w)|+vr|l>&eCsANk~XQnTE{& zwOca8+<1NQLven&lTF7!~XS~*y476oKcb#8v}SjWALdS zYC$|jBk{fn^qp0+Amr^W*pjohGPF(Hf*dO#e-<_$Ws??g^+Pcu!=agffk!Z1dAFAv zF6%~&4lkkBQKN-fJhXw_1NIDoM8rWab=&2FCLKeT)v2zj0o*{8H@@hRU6=rbt4|X# z|ErZ>h~{*0Z~LM9qZalGtv`@J3%g_r5PdJrGEF!GHrC@1ee&>}De(LCEZx^S8Z8C` zX1X(>-WbIZUD%@of_z{ChEJBN+kn9urJl8b4E7`a)(i4ie?}idXJVqM>%NHZ#Sw8H zRzzQbuIkRJvNzhzkFYmu_RvIjB*|<}hmt@YWdy()iajSk$l(qL9-${&lTF|kHSdvw ztw6AI(9A0*(!!(?l)CXYN?CFJS-(usgoQ+g+f-*(MTK~5F(d7vy#4|tyv^Gq=_L)klusA&iQJ?!Srod2o474N83KhGhJ! ztf4GGCl(%*i0#h~l-XA>tvx&ZRxl8l@S}+$JuuFrEd-=L+;s;RCS3L4!iVw^-?luX zO6?nY2z)RWC4~X;S^s*51R)eNUxH$03lUmK8$;2Fnz*(vU!F?uryZS%&;^bks>rwl z0pq*d-VhsGx(y~@-n(y_$6Y%#WTc~|mCkK6ewYkT#|l=@jr;zzH=>BzdJPp|r(EHL z2$>+s5YP4RZX8j!Es9L{KL;Ncc(uXRldgJ5NHH__eyfy`r)pLtV3%_UhRFRmlxZq| zzC75(D1Xfox?={~jYyF{>HvaKA_6FG!*u07?Myr)`Aq_LLQzwSSFo|!_Gn00MP=B` zm8exV9S5=`dz{$OiDz^!e9)=BHuu$oC%I~YdSx^82MSPkH@tpJz{_owJ(`~~Lj9nQ zfdcc0Y_6#Bbb(FX1zz5%`hpY6{@;Kr4ed;P4*lAPm|VkgS}nZ*@YjKn^!OX|hidL< zVbq|4)3 z0&3Gzu&l4wtwo`cxdM(eYLf2lF-d46o?g3ApOL}U_(p>KP!iKnjz*l2y(%u~$@BBD zoOqsx3iu6{qHxqy*R4{ROu3x*q}pi7pel_?soT6ni#OC>0C3Aw{zA-cFf=^ zD=V#kTyVTQx1bup1AHw;yNrkIpkzp&!Cwaj-`R7rtHrp5A!%MkzG$DtLL8AJS--f=y;<^7rpgSEMEm zyKO{$K(7Aj=#k+WCj?dr5Do}Kx{&ncRh+fA_hg92OgHz+<)aQF7zc#s z;Dd69(~;wPAljAF|HeQIqgAJSbq=3WDt*3RuDlwr=UJY%hg$wbU;MNq{pgI$g`(Ys zY8zkM+n-&CfizT_U%}F?UXwtGt)vJvyzBYClgd=Q_~!gjrCV~N$kjuRc-&^k0_s1> zDI*WL9uBf(o`6Mq3mnG7SWnM(XLFJ5KP;ey)Zi*`9HACD4$XiJIIKxY#lq1cFH}?@ zl_V+s_S$T5uikO^+A&DM;Ah~Hi!~+0q+~EAYrc;Re8-s#@HW>S6b<9l`1$59p5$Ra z*5>*}1|7wZ%FfT zQ7t03{ThIzyoW+QMB`_J4J6FTXlPY4-W(@GE(d;!#I3_G_3w9Z8B} zde)q`U@h$(vv1DByrpZoLZG5@t<@PEbW(Lr8rFBz8|*wp;kjW^D_vrg{r*6t~H8g-}|JB)D<7H9e%ln+~+m3`bGLC8*&kufhvz-}j^ zQ3s5y1Zl6_xh+ZEPwKr`yQyYw{;JFEx+7lbsVC>^b{7h4TJT$CL8Z8U&Rk`4CCBxF`;20#W zF4;QGf2d{u*;QXwHdO-bL@W0d zhy_4Cl2`vgLq6*TujW<2z?kH?Zyr8(AH?4YLNBfx zI@SIT5!XNLh-YF}zrW#jwBPc721ROgR!jDkr;fI^1@S2++P@6$N8o$=D3|pk{CdAQ zEi6Wz;TQBk5`@?Dzo$-K-CtNq3)tPbV&7ZfA)$b$8$h1in41wy3BW;0WCmCcg^9o{ zn!J2$|LX^L<)jgprjy~Sprh1auC9<6F#W>`y{EMusqu-GR&d?gQ@UwR=>fGvQ)eXL z#3vtfDt2)nAD`@~aG3}sOJqCJ?TZisRkH>rAmSH&qnhX=0UUb|F+y3%78Rrh4wvBW zY<)LH!QFXtVK}0R`I{~IVZ@KDfJ1%XD+sMdcRwa4C!gx~lBbXX{A9`HZY$s?(d^EZ zT>855uc5wj!I#3Qjt^bX`V)=S#88`OD}X;%nk;=G3Yl{H_!{n4V@T4&hj5AtWrE|T z8PNSty?prcjmwZ@zUdzf@fTsLsGb>$m>%8 z9-Y_cAj#QULv7W2N(=|+sauMsvB4o9BLPRXD`A}g_r zSDMn2lI%g;Qpj=JLg9FEpzC`?9f!p6iv#(g0t$5kKx59yKzkX{=;Q-b>E3-I0_VWl z;p+0$%hX3lfoDkOia)c?%(3>?jW%7mG*Kl4;?#YKbI?9c`g?5VOO(s{6jVnx)017z z#OiYBkfWYs19#`+zPV7bmfo#{JKuOTaXCg9Skf1sr_d3PW%va$n6%%9+MWWzp$AWc z_2PELvX$FH;mB_5WPdQ1d}vS^h*3FtI9uS>tN&J`6an1=UAhrzZc~7ZBrxuYqJ@ce z(1BPV*-doYe@E7?o2$gE;bBJCne9W&J@4GY5mJ$Q2HIsh|7Q!(Jt+e6Nc{1@^w+SZ zPRYfL=hW4Q?lfIKT_fe%A2i`(ru6A>TV1v#;*9cC@lrMW$=lGP=9&H6u-e6u~m=eCK_Wg3b~ z&Kl4uRSPB($n)oDr@xf?yEodizq>iLhP#j*d06x0PbI$RJXIeNH;W7KDSn(Bvg&kE zzB6qB`Z12kpqgbUt50TcsZm{a<%qMGkg)`;eJhx{0a>Igm&|{KlP@8U^I&qbgkSd0 zco#t2E0&+1d0ZB?IN}79kcUe&_Uz}5s*{_0#0(1#oz>~3h509{yIzM8q#-ootUkC& zbL`Hb?Cjponp3kKaj}yu&R7CQHs)U#0QDRn{=7O5vrUzTN+!~XZV&APFBT9;ir?=> zqtA%1eU-n0)WR3QHYxopM@uIom@32xUAQ1@8n}J$%&S$(!_)i4AsuXpLh+4Cy+X778m*4bYp9VKoM1xb`Td6BhGZz{7@SxpQ0Z!!(8`KmvmA> zp;CB@L}h9ML=36(PW^jQP9yxv$P$6*#fo-_5Z!~@_uqaTeTE3Fr8h&1hkxug9O>dx z%y{Mg?YqjZmkx(iaB>bP>rIV9FKIQ%rlaJ6O*`8PlRy<(Q9Za#TB50X2k$W~#(IBe zU5(*rT~4z2FEuc&>>2>gnf{+@NsKzYb9AqZ_?qq4boJ%qWgHrlu00F_5n_AGb52f%Fpi^h4Z343oRLq(&;yF5>~ZJw@}OQTV~W7A zYp9{WP=uT=F|~@S;>WjF$^GVWfM~u8Naa0zdg(gWWEb`QmSSZpS=vFhjQq1tiUinV zQVtfVH4?Tpdf&6)r2pDC#exte|0C`$P&Ae5$FwT|d*<|lB{Fh}1w@)-eUB(l1F~Q+ z#&W73gcnBg@lBzJ?(!~Nz@W6{?^fvPEEpwKsZb;El=paA34xYVI@iIX;^J)R1dXPH zu1FlUOMHVh4>@~xV)dC+D>u;MN3oZHVkPiFL2e<@e85JQ zJDQ>mTk;ERJxze1C25(#ZM;DF5u(+1w-kEkFYtclabNhA% z*-Nvd?5jfhtv5GsHt50v1;j2~Y~zxBru+eROo@^0aM%6%+QzTSmqTvNE?JSlqu}Zw@?(o?y<#Ny=O=2nNdYBY{H@D9;n@Otfu4?~Ah%t{Jl&$Dn~BVe$BW z3$sS!%1aBABi<-L^$58`T1i6& z;~?A}kS2ne+QilXR~C*`?Iqmbnus)}cz!GbwXr4|P4c|LsB0IV2l9q|7aR5!1axDS zlt&sLXBXg{E_^$?;P^=PCUBZ*mH#7dWQlc$8VG|4XZV{mcv_{&eunhP8v9*D9+PTk zld)dvS3O>g(dQmBida8gjY1shI3*mqL5_0x(eURua|$Hx0HT9lj;-Vbh#`908Q)ME z9<@vMKl5Cq)yCzIVK)u8H}#(+DuE}xcaAB%C#Sh`s_#TU#^m|xVCU)nKuR( z_$|%U&x%ZX`~OSk=S5GfHl3KOuH z3P&%Bs09Ka{uF(2Z&tNh9-hcQ?{5Ro<%xPFA98nq&uKj7S>dj)Kb+3G0;!y3ob{QiqVNe2?>Zw(HT%5u)fY`syIe#osF%P@Ep;wnAFUO#cx3iyIa-*-Bb#ONDP zlF9L;GwIPGwe;KI)4M8uiXY3_-sBqW8M^xI%N~hWnQCkYm(ecj<4Sy##X=J3uPvS* zmgbuGv>Qb9d1M$bucMy3ir}3Au%+x&-}~)U8KP3Xxa_7TjVq*DupH%(Dg22Ts5KJO zv-ZwFW4EWq@+BKDX4$}+l47bOM{=F)`&%8w#&z7)dybtnlTEy(LinA8?wj~#k;|yJ zYd^0K95k#mnQES-7ZfETB3dTGwj2ed=bgteClZ?@m=(n>Zp!D!%;Ki3+__G0Xep!N zNN(~#h~#%uMLos|-9z~W)xYSL=v)s7pRWy7 znP|RiGDTb zvlM2yH#my}G58=!2IEn>Xp88y^qQ7HFD^3NG@Qhr3fiBuj+O!%XbCiMs-;0pX_oy# z_ESmiz%jrUUfLkH4kwu*m_E6H+t|THe=o7nMBE3VqE<;4uEdMYS(~<>@N?QlM$*^p z*Adr$BQry%<)7Tv zuCBPk`hx*~Rxb46)7RjRONFYlJ^feWcJqEVS02d5NmDj{NPvZ!XGc@RNgNE3Cl0D- zcq8rXs^_JncNZR!(pXJ2N3;^LyB+prA%!kYm8+WoIxHvF|KzzU%we7W8<;H}{Myo} zM%yRf=_vz-J*P(Jp$eBl@3`_K+Lnz>y87TE*VS&hs3u!g^cmQP9jI80U7q0VR&S4d zYOkwWa0t)+O-&h>ayhdjr*QyZpY4si=J8ig$vxvSd)T*F82|D2h~d|^WL3SqZ1x%V z=qENl(VNnioM1adR!Ry?<7vruxpUi0T#-}7Uv-)-tccLXry(+Y-ULiha@M5l{*2b% z$lPViW^(;v3nI!xh2fG*zmt2HZiS_79YR@7^w@Dv8WK{7p7UlJ&#eliGm zF8N^ZTVJsyZZA6RD9xRZ?0(pfrI=u79w zl&s;4wVSC@OISkT2Z_~p;72Z@l``knn_yA9?k2hS^3cey5`mHTJ1ImUEr{I5OmDrY zS8U@p_@H`Gfi8^V>^0FVOSqLbp%U@LqgL%j0$<>J4W)-U>XE7Bgr^j%59m{6~u1uubQ*PI;c1pg*;O6>Ef^wc+JFJG1PC233y<08)u($QW|2^RS%rLA#iUWbK^d(t)UK9*?hKsh5Sx( zs^hcPl=;{2GE+5-Y@KEc zSbGk27&DqkTUsPIJjp>T@HJ0gA`U;wVN(29^YOeQM92pO^mOtt)w}yaPXumZqcl4E< z@)U~2P5qR;oG(HU6<@$}3$aH7USS{cMPR$|m#KSYq*B0SW}Hd%2{wN%Iw6zfUG!nW zH;lj%{+Y$?>C4arSW&l5^Mn-~>wSV+22MwGRbac`*s}imN!5e$Z()tWr(Q@dRLIvI z?94v!|6+I~hp1=BkkeG?vZjvp`<{&A&gm7I$F)oBTEduE0mIn5httmjd8@K)`DWm1Fs^-O zC2K?R0xCl&k9>9-LI^d-0eDkzJc`iTkRV| z_dI-jd>ZaBX{h6V{KlPltaGL8Tu~W7@efyjodxev0`IB5e`mjJj$Z3!agOy!jgRZF zM{jE=6{p2>3gsgmOF~!g)?*s#EiJd}olH~XKQ|(f?UM0plr1kIocQr!*Y0gXE`z_l z*Z$7>%JiGaFCaP=beuV6t|X5*ox7EJAM3a*l~vJjJCG>wV7Xz>Z}m{ZTdBS_;3N{~ zUl@Gh;hlXga#qAz?Qb5gd^FH-?V10RquFp%=a|%1`2zy=T6I?SwkG04*H4Dc(Dbv3 z$T2Sf^m`f&6hQLYz?oH_oL}heev{$x>Gu|(-b!7m()X~ig+-b;8Ey)^qSX`OJ%11? zq-6zFU$0X9^cg8y&y!!7gR&M(C)X~w&|X4t=jXmdF;Mikl6!@E#UHz1VMl#F7|4?S z-zV&zF4>a}9+e%{SqU_Lx`>8o>v*c+sNPxP`{s;E=YX5IQ&9PbDdFk^CR2*zrVv`` zHzSyY?|q3OF>J4Td&AdCpcY|f`SXf1J6s>|2=vUo)^t@Ru>!_fG7m4ujC5OjsMPd~NIuoQS9bk)BRcNQF$-144}J zNlE?Lo!^&YS=TuJDg5^n{(>k9*}Y4D5~7c?|A8mJ7Z@8t$GyFxaBRaD_HB5L35uHK zikcXNz=Aa8%C-_?z5)hjs>;mx78(V#q|e01Nr-W;P_wp2*fCB-E`UR&HK3OFTUmdR zI8&gVjozNY=#fp2p-}4W!^NI)dOY#g+NyDaFZl~=v`73FYegf?jvEe=7^b^Tb()J& z-QJfv5IV2?w^a{N8%C&wTPrPuJ01Qpu?iFiCn#7ihOh;S2jQ#^MvsIib*9gw*Z5vq zz{av@mB7b=^g`kX%cq5)rnqNdR2Dt7@Vj96sH*0JnpokxZs+ZW+F}J>%obE@5TAC} zl(ag6KY}#GGuZ?0w2yojVk6zRaa}j&u{I=+_^@Q?OCE2TF${pW;O?tWa0`T;-J@W> zdeI|aHVDVy|LSn_g*_IYo$UJLWz9$t^?8?O9q{etIo$;_cYS$gseoqcnQV+4!KoPo=1dQ4`?icz>bQV-Q7M z+Zr{YIEaj$cwf-8gxTKS?k=&>^qDW~CAYbL)T)wsOhzVe0#KZe@IAFz;6 zr_pFeI3w`G^;xWI1+j#}GUCK1o}QJw3pH`t2AJ;Bm0Raj_Ct#q|k+{%BzgS+z z^lNZLQ5jtfke7YKSnVN61~2f0!ByFQMf(dgXQ|R^MZIQz1k!&uwjD%v$P?HO_bCnoPmSI5__^tVWm(+b>hBkt zGGWR$GY)SeL<%DydVltsdr|boUOI!BxAC7_En$`;4H+Rw7a$C$%-yHm(G?B2rC*Ji zfT@xngzrW#9d$luB`dY-x%nklVAkBq@NrDxBKgo?;}InL3Bc)E2(GE08w&^cGF(+j zUlzYL&locpe2RGzvh1l;KaHW4F;k}yhQ8TrZ14HI*@pCV98)Y zRTy^4(3^m{J7RH9V^?3>eT%&NGvAO`Y}oxp&E85|AVPum*b|o_0i&5L?a^r4*$SnY zD{RB{Dh%;-aA@U#Sv>AuB7iSbe{HBYTwYC%Etzz#61B57b7Qe3`{+Gp za${IRikN{i`=ro2K~~#ndl)DbOd?p3Pjl#7a z)~}gBP2r29zX~x;@7{gL-Dw4(E91UeEGZp;h19H3#qb2f-?63DKMRccdreWbP>)OQ z{3jE~Et@%^{YR5)o^#W;6mA4}YsTRU`CTbw6xc0*ahxO0mO#9w?GxQXDGy3r`Qqu; zA8WWWnr|qUAnoTV*qHv{7@w}Ed(8gSuJhlfyni}VB^DR*Q6-Zb1e@sSX_t#|R$v{Y z>PxlnxGx9cs5oybff$Wp&u_1mOZ4ysD(B3m|Da^=r*f)9^M5`^84M(7o}?NaRJT*eaxoAu*Q_?w28B9FG=5aayLf8S=&U8!RjO=TBpgAeMT zPVJ*YnyF&cgK%Q&#v)#y`-OwrO$79c*gbwir?nE!wu~IFp9;{TNv2Ce@H)~<1Y?GgloW7A5}=Hmz4Fi6 z#xA|67Bu{z)+sT?!U&zx*&<~+lI43E@%^=)63I(qitDZFC8bZ0zVIQ$C28Ib=(66k zd%9oKiESmCtHG4*{pqKXqpImy&g^^;O>zoj``3$l1PT4Ww%^bP|lGe6e*X9t^v%J8Dsk&hzFkLH+j%Ri5(~ zpdG%OpNmC~twA;Y{*QNnd(rY4{v6(D*?kakQ!nW=&Sz8;kplpF%pQ#<0PB#JX+C1Z z{yk4VS;Xd<`@)d^pN^zBkFzYHM^to~QvBB=nmqD@v)(9T-1624H^)gwc>E(19>pHu zAQp2-rLws{@O$!Tre2&MD6?F0+DTGbIy$7l>wK`CRp32GWAx|yBV+||)Q@IW=SgB9 z8ZJ=wu(xdTWzM-s3aDRgvg;SV_wF;=k#CN{04ky$3!;c6KE+k~ItZnug! zD<%g4{H;o&CuNHkc+rVz4#Luywk0i*>iV6(xvmS9Q%|aw+5X)cK8ARjvX8nMhjU7w zqAWT`ImrF#?lrVHRbMO+BlGMooBiA3{H}?m5oq-(q}Q}qv^h>31DaBL;Qo%V=UgB9 z{>j?J^?{EC*9b1juEpBIFla;tsTnfrb`Vkvq764@eN9y_p1>uh83nBWSQ)S{B)V}^ z`e+Q4G#IFnxi-(j9~Ak4z&b;5^JbRCng9s*+?{LQG|zYLi4`-TTrL;tm)xxKS`>s% z!njng9N#g*rIzmc`^&f^xzQ^*BK`!nH#D%ueCQS*aX>zoq>)$}u#`@PugJeqw>8vP zw~pFnr^NbZ74l9#I=*w5l{DFZr8SlqR}%9~go!l(MZzr&u)W*OLI@#u1~{ndZ=;e1 zr^(A+vD}ey8mal7axm4IlJthe_W1TUf4Y{owin?-b$wHmC!057QulHBV@WkPv0mUk z{)-&r;ZQs=+#`OFpLvJnMGB-)f4?i!2^ukcUTYyedJCM=_Q$)Iz^ZxCiRa#0M11Jx zjgGZNV9-R~5abQtMg-RrbnmkAnv06xVjqR_)h6SvSd`9 zB%6ixu3FbYqzH`w=A0H1JP&8DQD7$ntFZWXz9y5~bMx00h^!|wUT8!E%j70g893@r zPtXXzV*gVupFuR{qfW2|_ie-nYBRVQKQ&-ZMi4Oe(h=MBa}344E)4h*!`GduO0WOH zL4Pfx=iHGp#M3xOl6Y#uF1^qHE^d06n&13fkvdp{53L`QK0AjguoFpp&2n`XD%o~S0*;)V(I{U)YXHoe>{I4i1Ip>2`6O%y4p^y z%{eKwZew}ka~p223)k}HrK3giv9F{&Zvw?4+GY2DjC-xwP{e8zxc)fq1%TV_p;w5` z#CqzpLU(>gy+Wt%*Bek&3N<#?j0UVte{=n*Z=)O-ShrbxT*gGQ#i5m@#t7ZO03xly zNc59PiyEL|hRfB(CqVdB1jjBOa8$)Z;l*O&7wOB&Q=6hUpRw=_S9w@2;i^ew+5aV- z0S=XjZh7&2T4`0ESv#}a1SNo%|7yNphVWwdzTTTMhedO5{SZtf%a&K=l*#<=TrM!ghz59sJBhZQ`U*x1j16{YbyFysjbbm?K zeOikcN8m4;bF_oNg|8O@##Ru{YO|Eqn56H1s4dMPZF zV;?Y?*wo9nU#!xU-H*A4OL$%^cC-|7VT0Y&16kwC=+eRrTnFAI#Tg}1t%MjT(8kd8)IKmFR*+>f$6d$Zyb zSpIZx&J85H0AwLOXJvo9H#9iG&^MEv7D&CBJi>hh??v-{p0 z?ge1A{<7|y!o+_5*a-kv?_vC~i<_*)ew;-!Stz0V$YRDlA>*ps8Zz5f#JCavHj=|m z&IHwPdK2$gnGN+pfsY#MhZmWj(+iqelNBt{ZXqy3C#Mlu52hQ1LyFXD2q;o4wp2{G z`oQ4Q8SRtDuzffEZoa|W5?rQg+y{%LaAE^ZUf5lI(s*$yC0(GCGb+Vw@W+r!EA3Ag z$jMyY+^F)Ho&2t&d2h+7V2b4MSPOwHkzm#IxywMML%W2xHdm_^ZgbO{5g}Voz2#^C zzNavAM)T+R!Ik<4eMQ%y3(^>6{42JNl#T!g;VPt6Vy&Ja?(#Z@Plso-A%nibcR2r* z2FyQgWMS?xS^(NR_$%~!9rDXQOr7=y7MHiYN*DTT$PZEw$Bq=i;k^8b-jHdpI%X8` zR)sE|kV3GYOJz2pZGHqPFz4RAYI~ez@vw8_sg-V3p-<=NqmM8T2g}0(gNHS4uaCNQNs}ME`IvR~aQM{c%$DYGe&h!< zE5Fs86Z2q7&QmXZJ)!V4M=|hqrh(^`EsyUaT~eIo!=6c|*Qrh&10`J_@PpbmxVBgU zd%nmw9&ocqndq=H7&Rh2f~dC)ySxTq!oO+9)CGze_9z%GAsy@YHxxGcT8|mr5?%us znD;cTme}?-(MBS-&dXb&K1y~XR}k!s+>Huo*TXS>p5O~Il!Ly0PiqeN8{3ud)Tc66X0 zS6J#bqO3vj+%6g#^5h8bW-0JdINf2Nn%F0HY?Cw3a&-%1KRg)xlBZuH6%kc*OrGDN zC3j`bKO*={>uNG-J9|oSwE{$Hc_dc+K;{m=#RV@zij&t`m-%UL%+&3y(IIp^&z*e z);1xLhO@Ck>qj*Q?if~SU!?@$dlxTX{9!hHDz%?d=_zazrlh9(!Zr)yTJn(zuRrZ| zLzTU4{WfU=%vT*+VleyvZpE`8`rBJ5WZC?bN;=78u8wuyIj(uI=Z!ZB5#}q9BjvTr zr}UtFnO($SilCV6R+>yem67|m8-SVxQiU-dE*>Ym*VrqitN~Tmeb7cCWPXk^9)zQq zTiUnU5eIL#SsbLZ0kvpjv`Oa3y_^3&m2COgyJo}H6GfjtJ1gnSWcq2$4f?bRup$cE=6$8PL0Tx`VK^0J@zW^wh* zsPxE<8%PobcHo~8Eu!X%Kz$rrar_2D+_0>2K*{u=6n~EdrPQ%E6>!E9oM`!`$Tsg4 zWvDpSd4Q^4AFK&N?m@XK6x$1PYxw5u!XLJ6uc;KTFMf-)ar%Ge{@u`Pb>6v0UF@E> zLZ_FP4Q{d1hZccGK7-buN~&Xr7x;id+uQWp^!nCR>+^%UseoCwpSC!<1%MLCE|1}i zl+r#e_0?Fy?*8l>8(h7}nad65DAUnzr`!?oVs|)-9s?KP^<7M+SKBX~;%ROCHIH}6 z&L2tNd*&w%9q+XeAU;xkyy0r+ z46lu$`rqG!xWDk0*d8~R`{CnxB&81qe-4a|eyb|Mkssvyw}y()0vmkvQ6)1Lu{MVi ziztuGj4wZ9A17!GZ8Z(os#2{=H7Ha+fU}>?%)OyKj zKS^=#I%yG{{k-zu%iLfYH@~5AxtV!yu{hc}fI=C@)tG$t}~e`!ACL z43ZxN>{w78x$w*Mwu2w?KQ-W(=3@sfN3LXqAe+Ist<;(cf{6rs`-aJ2C4-;nO)riH zY^L;Yk+K}k*MT%f!0@hP?fPBA>o`1*{CDFfvg@F?*G#Po zF1s`RW(BIZv{Yd~ju%lF$Kfhvz-{xntBeTi1`WP8g(GRy#0pq-Sr|-*; zQ9#>B<_(&cLFk9FQSX==!%d~3V#5WiLK{$O^=TQ0R1#eXhdNjS0i0X+Z_(8mmt*e* z^Pj9bVJmwZ&&7yYNz0x`@z(>!Xtg~4iKAR@{aACbYAW@@DK@v~UY@#dYR+qP z?gqO7ptG;nv&yE47QXS=-xzhcBme*`To_n^*@ZWB|8PVdQ@wcAhjf24afHS$tHqIo zOB=*m3Z8z#(LYOYA@{R}^Q|RqI$0_wo=N5%cliQVa~s;?bsfW;FnD@!ReBef`w1Jy zh{=H>_S@a1G;aa+wA~MSQ6?Hu`U}nECbsL=HMBn-E(Cw~{Qf`lA14|*g=>Dw$a&@d z_w#`^^&9bTe~JDeg)PL->DE(5*g)hbPo9ML5@xoP=S2{T*SSl2^U@Z@TrTp)aU@ZI zH$Ru9#qR2`22@pTd!RBMz^!OM*{n*S6Vg}8x=Le8;>R=03%`Kiyi9ddPhON|tFj~a&o z30%7H_1ztQiN85-F5Z+?IDu=tNUYILGAV~vg}J`cNO}cm>nIR^aO~e#qLi+gK_@6; z0cnw)yqm*%93%E=ryEte3Ip-I)h!%}W!u7i8D4TSO@YP#LFFifqS+u3zF`YJ$AAeb zWqJ{WyAe*;TGngA{1jexq(e~efn=`{A7~DZBjg7n)3%;BkYMuIUUoWY1`O&=b1Q{{ z##JrT-`-e$qvtxFyC>p)Z$ZiqbB6!+is!=voRaQe+3HyYR?Z$nBLuIc1$|*(jl@uL* zCF8U7N&b9i>yAWjfSb=jXrECgEBWv0@#~~eedx-^lR}6)#xd&^l01uVX<*y8uBsT4 zG+hU}EWT#(&<&X26?If>Y)ancJkxp;gK|d!5$lRwy7&Ly^NsZOyW7e#JJXzR@8sTf zk09>V7CXCFPiy4y{Snd?I`=IRaJE;?sk^ED)Pb?h+TS1H4Jf1fmy<_kJO$S^4JiB3 zfV0XB=yx;uD33J+0N_1%1#veS1m~m1n=X+7e1=1HbpbK~J8R#&QRQUlf3be3cDh|p z*2=-|VtDF}$oKu}1J?{DSgCH``yPbs1`Z&qlr>VfZqxqSA7b1!7Y=FPHA-UK@{Vxy z5fi6F04K&xA+>}CBR~@4=<4n@O_u;RC9`?D_{@d$py@Yjjn5u0j4hu4!Dy*Jh%;Cf zm28i}P#4pqDQgU!!U>HPSx3HkLgO4)ib^%z)aXS|ZM~Gy-V^B_dTddAKN~cTM$m zYI`iI_IEeqZoRpwf868=xZnyTh(9ucXT4i8{T6V+4@^=noMSIwaj>oL%uU*P0L+K- zC5=tzo~6!1cRWb|L%au|H1)a!_kB0i$SXIWo&)b8_j<-%; z!lTGbg)vs?3M1tUEuV@fK1arhjrxnwtM~96$FWAx^^M)NeqOm`g@4CTr9Z~PmYdUOf-6JjNbNVQ*9lRgI~2?(CC@AbYz}`O8@2d+42YL0fr*EJ3G~zl zHK54r9%YQB07qUkOAWtpKAi?;^Vd&^&VO{XSHz|>26zOGp$o8oS97teU}`r8R7d<4 zrN3QwkLe)(@$+K7ty4t61FbXK6mXKgdUPx9+*co{LIZW9!!s+k>gRjU$bkgmPs0_l z|CxeDx>|y;uvH7CU3Z2uFvLM^!?Sx7q#so712OYrxncek{`3_pgrZ_wi^J7oL8#Gs z{o^8EHGCl77KFo)A6V{u;t~)7#xr(9jI!wiL`JU!;0y&8OhpDC5}ni*J20&59H0xw0W=lbgu++0ywFf3 z#N&o~CsXe6>&F}DK0ZDxEu4{|-+&&ZpJ3SgjPp|ot~>)+N%=vkNhkn=!U8s9la|jT zb<%)#GG24fDPKM=lO}1>9jjUGd;wOb_x?jS(WUA6b;~9`G^LmEX*H znE`XfpTESJ2HFWYj2~@J5lq0#?0aL2EkCOOuAXn*ttr~vZ;iQ7N1J5&cE`9;z1>=H^4Tvy3mYYwE#j!yl$N%thrk< zGNS!wdwbgz_+Y)`7BXPMH{nnv0SFWg+ifd}A1u7r4FB5n6is6WM=xS@fdfI=oSLRC ze5k@1zq?p(3e{*er_Me6r?;G!oX4=v7fzS|Oa;#7vvX3qC-7?*vC^=ss!N6RaG=3a z#NCbIX5Hi#P&LukuaLIF`YPVuqJP+3N!4c_a&{6p$8vW*EZ56xdc3f!e{Md#OQn3Lh7=DaGIPCo;On> z(SER{vrF=TfiAv&?!L*Hxb_CnbDJH>65iuo6Uz7KSIh)g$rB#_r9zr919a>oCUg3& zfQ`s#`f8uhT_N9Dn^b1^~-r0~Got8;zMU^h!IDB?hc$ zR3En#h_*+S?9*O->VPNpdC#SVIi6EG$}I^%*O93<2A>KL+fs2tY|)PfamgUYxv*qt z@%5|@qoID3NDxZVzfGWgsZTa(^vdg_Qk2W^{hjraDEkR@v4a~U(XLl7*6}aI z@%`KHGP^#O;x$rCY0bZ19km;+Kh0 zudn0YEYulzo#UHMZRox4)Sb_7ZuVnIYgU3f%XF(vw8w3xsB` z;zBReK{=7v%=28YY;eQxacy%77gw5@omzkuSn^p}9AgJU8_s$2X%V~2qk{;&pK|F< zp=b{v@4U_Q+O2BamIY!o&(-~VT+sdWVS1$0|8^Y2BC&mKOa{;lIYRp7*)Q9((oS!J9lLpHM$vg^*``LMoj#hP9hjn;S6al_`W#9i zVoj9!+mk%w>btCdbC>!5_3r@F%)>(UtaCD~bIzqFE>ptc#dKhrKZj@4UE}U^{jLei zibtmUElB8>+TObCw|x1ZYATwoO@E_%IIN?|GH=VFWubt5hfd(`zl(XnT7IB7B;C92 zC-6f+FHgVZCUmx0zs9@xvGdWXa!6RJ>A?31TQ-xw)p{joush|Pz2VD-Zjf+D%c2T} z>O3umYfZSkp4~LJSXwMi_4&g{j5G0nKmtE{!$VqUF>zK2SF5Ny!FP1Si!NlDASfx# z;b^Dpw!jyR2Gkdjmv9lqZ;1b$Y;^nlEqXEj>m7 zP_L-z1q$iyTzMysbmF1+;+xa5|Iw8K_-Np6{zbha?B?1#TeP}AMf4VB(FH65{Udc% z$}y!_Or1<02Kur&$70hzt?;;#jFF|Z~r>#o!X$32h^Pjzms z^=OvJT>VJck#{cQ>!U165@-Vz$?!G)i=e$9Jl+XLc zw~INvaT`n0O5^g_M1aaaecKnkg_b01WMBIoY){?${pBU9ra|*x^6ep_Ig-tZ!%&d0 z=&NdztqPhHrZfE8sVK?uU{e>xxySkb6!TT3G?{<{@1V4Qsf$OXc)M;MBKZp0H6LWx z9&x=5i4wcGjX|gIY6A9u{vzr&rb`w#B=sRKLeN9PbA zugO*9{7X*1$PBZ{h`WR9%$xR$Y6?MfgU?)CkF76Gef26~D{>XE^?N&OGY2ZvjQ>pG zIkv)O;@o|{S!Y@Pk4$X5361R@&hyrC9S6=RFaAF~7a;0NoYH^YaT z5Ov$Y&19!-=ss`xC#z5*XfgHc0|T1!t%q1>4(n+j1M}3XIF&{VZFrXV8mobo?MS>L zZ2L9cLU`QrpP5R)?RyJew!YxqO}#_|tJ|bpPM|h}V{d!;(9e-FJr7I5)vo_Ed~flI zY!OCEa*QP{nb@u63AcX#YY!IlcvC!8Y!o-HLm8)d*!huAX)=28{H4gfoyi}%rtAFd zum1^NitG6Aj@1Vkck(m-1=(>y{!?!5=qHYL9G>kGq!y9}h1|AzM%3rI>=1k8;!)#2uwbnt2nj3xq1U`mh+h+LnR))ANKic<5(sU2c=4ydc z$IdP+U#R%Nq<*FF+`!FC*KTphhnya6=B@ch+1a(?q3fG;`V?hq>*F*VC{M!apdy1l z`^vEXreRzN1)HEOZqLo}k?on|4_&%2mI{Y179M@$H0g&1(6I<)ur(sj+LUecgWrx} zUYaDck8;F&BEn+R{J0nk*lIpemPSg|dQxC*54O-bl$gK|Jl8i{Vx%y1lUX1wJXple z4YE>;rckwit%?uZK@g`RikMTtu(<*KOScMCmZ*C3SOKb(&($sbKzZTvKfDxUH+36)U*JDnx~3Cj<~Bj8z#g*kS9J>Zne6JT&S%D{#^ru;t@IvrIIGnV_m( zb=D_LQHz9u3W!fh@%N?n#v#~*=GRVVq;i8Gb(v% z?_^jgWf3P>+LXF4cQR02cN!B)XFCrH4a)^z9QOx={xhZtUwHHc)5gcV$7dC&0Kde104+775rk1_T9&g z4EQz<-H0-2TSzDaL4byn&4#eR81dqdT-~^{o_*In2kdy?-gV}siaMp zpgjku>u4K@hpZNcD*Nv?xE$9rZ2_MYkOs3gJN*((wFKY>7J03)QA;g(A2nartH8@I zHOZObPNeek!b_&o-gkFY@Ano6c>MkT9K?^%CJ72PPrSYGH1M{eiAgGSlc8$^5xv3> zuK6Pm=LTJSHz^ft0k_p^pYq2auLSUpIL#IoMv6Yz-|e|WjPM+CQS84LXPj|8i1;na zYuH2ACZOVT*Kzq5K)59vWQ|Cl4*a&32G zp4rOd`^zlk%L{j)^xFH+tbQ$~2P^dbev7rg3sL*IxAP6IbTG}$c`h}aXuG9&mK%zt zXhfeM?YL)RYkXGUO9{Vk9MWm`{ITL;CD2U?zf8Rph^FVX*LgeL{+IGpMa1HDF{cru zA$3^)N2>F>1w(X%`?VVb{2rFjbdNMjGZg~W87JP}oi9(T zXg%ZQIr`atwMXMZ`q^QX6JCtiB&Rw?t%%!)4a3lB@a^sG_qN|&f7kKcdwS{29l}UU zPEkb7A$qmyJ1?}ODwE4nts4o6$(7tRJ^9a%b7Ggp!(ct2j2!`pIT+C zG?m%c^y}jXmn{AzO-)hzS3r!uVCJe?3f4Jn;Xv+%n9C;aSEK&+9a{>zE$EQb+sxe) ztlsH+^G+z$lwU%|iMU;QvkNPk)pNh*O1ffsQ@vle>~9@8*jYTaFSY&laY~eFi-o0_ zW2^+m2}|?iJyATfg4#^6jSI>WxxcczSYPfOU~p4{sH}v!uey3s%>Jj^>1)&M5_3h3 z85(CdwN8A9CNlz#a^&)z{_XB}NBt5BoQS+>)60$J%}8P(o=r{DT=1|_^vzlS zu6HQhL0t%gzP}@OwA8NWyW0M9Mb?C!UgNGVx*Bx#-fgeu*(9Zy(xUs^u(l~L^YX4w&(U3$WhG7_8?=sO`Pq9TIF-hq{sPn-V zYA=HDnaPZ^`uK?So2U~1p~)*;Txz6{RT#2p?)c%Edv|^0#;k};G$Ex@1c!SY}yLr<(aa@9Qo8DZT zdRVT26EwZ8T#yxU>7{$l4+z_JbBz++pG9Ed_{5GsRKMdS9o^{dzGSMNG%6dyk?~`# zda;gq7o%Ht|A)5CR;0|1t=(`{8PpuquD?h}6u!WE5`fH$ky<~+9`^hrBKrzm-P;j- zirF7UTeLe7N{S|_rx!g#0i7lK7J2=iOU&IE`rG%+e~7qGe=T~~sb8C^@-n)1b41c3 zc=XiP=IH3IPkgfecK6aLu_1QC6Q?JG(RJ=5E{6dL&loYzks6ziSn|&O<>K%t7+nq= zo%i4s3DUef8U`Kd-#li2wt}EiMEv8ZaqivxM5ZM+uOS!L_RF7@01E7#if#EoJr;~M ze7;1CN0g@say3|yl<>__G3_u7pb*n}0;TRx7q35Kk2F zHQQx{xYMjseZ61FBHE;1ccuKo?T+FE)e}Ye++}5o_?#DOH(lkCNydub@tSah1iHg9 zRI_#~R25b;P5iKk2ROen){{aei*dN>@55xU(ej!aDTy&OVa9{O56}kx+dH|jiySnj zq==zY1YOdbMm{?;*{WJ6Lk`hwEDnt!h24d1t-s`8IxI5CA^Er#2sir@!#6%F#OXy- zZ{3lYNxa9K;vRjw&_w#7;2Tm?=w+jRi_!qLp9yhLoj5*;xwP(7Aj|!U3@vNE#0j5) zs`m?S?`^Jv_hHclChHHG*A{{Pyq(?Fl-ago{V{cCQGr=4LHOPzu&U=Yno_r}Iu0>B zm?%B!s6YaT*bqq>u>m(f4E{UgeFi}EsF+m2bDFgWqsH+j*`dZYTee$Ezf78b5%13r zl)ZpXdffk+H*-S`@!SvUF{)bbI6V27-lQeqlEP7(ND5upr2UaePB!@r>=jK9k_9UC zu`IMs?YW%5MmVJC+aoL(%R2W%=@5UUTF_eMTZ_H|N6L=+Jx%292>atQIZcISm(H5YGbWyO07LV4Q}>Y zcnU-?UAa(AC?fUFeWu%W`c;U^RA-7#+um^5umg$Jxv#HpoOI#80R;wXr!9}jT@5v~ zEug#Xz!~qlim(0tm|U3TD-EBUAH_NTyNZ6hCi&-c2nqF|Bnt*xSC- z_@qbrOTKEH;M`t^FW|B;niB3=PpXq`37m-nockoD;8G>-o_8cj1GGxiLorTNRi(Klf3nVh&I{P37DPZ$vkB#cV;f)!x?fc&ygZezTc6 zRvqSDw|pMiB^kQ32lz6!UM5WVb!}Pk%B`#MHvm_){ISt8Uh$n{Vc?*o^BTVg&rg9i zYk77Rg3a4#n^d2h0{}umU>xz@Zs1Up(wm@I%!~*b=9fSg&4ZPOMgN>I{4?m^7I#o< z@WG*9%s|*6J1s7b7ceDiV~MD$52GpTHcN}9qdeTNp`E*e>V>L|4As=b-5}~M5Xbv> z1)n+8CSEKVY_W=~8(m|1vQTWwFymZA_bnH(CCT40I+G7i3Puf-*=M_v?6OmaVS(YC z=Tv+a6DfNj9=&0E7$sxa5x{_`6|R{7ES8UdsUrqf-VDzEtTr)FqdK$R-f_c!f4w)C zz8BgBm%Xz%W-8yc)5~Z0!NH|^RRS(S<-NE3`FGBnXVio!wckx4H}P7(N26Einu)sp zfRU=#%W>uOVYX1CaSq7l@r@oBw0v#rFnB(KE17{go>#WZY3E1zO$+ajo>& z{q0xVs99{GG1v9EaS^Oh9b4K;#|UEy;lV^8-GjAh5Ewi?ntFXQ2q>HjzEQeA!Z_dYrA4|<_!Rx5C^q8sGsx(}>|NYqg#i9!`i(hFjYNG+Bnm*$4T22e z|6R8lf?b6q!-@$V;ELHHU(?82MVw zr|bti^m!_3JI6z}o0k~waf%vMdv1S@YSwvU_Tfvz)E@?-!AfVF4E@TIzx{Gd<6stP zOHd?-VyoKEzvCg4L3&9)TAVgK2ezxKYe}geRP-990~4MzurGGs`LaGU5aftG9QhNw z>E{0WSU@#s2$!G`&#$2Hx91NQA9k5)|mgZXPvFT9nU^vh0xHU>R3-uv8w|2mA>Y}j2quSQ6`FvcbvD3j$ zEe;8mgZ(XZWAcQVwnjzT)E@QE)c4O}NKHM+!UxG$73vl$>ki&f|9Dw-%;|crIwGq3 zg~D!-LWAI@=LQ-_e`H#H+bDRUScvySv2NX#q~=)0mjw1i&;5+er4il&9`n;gnfE97 zC@X}&d3i(OL#vs)%f7Sk!}7W};LTo){=GO!>qXUI^fBRv?AWxovD4%ecp#PS&byc# z(+wlxt=!{#$2DbmK8Jd>9a82VKZ;|HR)+Vt7E;Ch$kqW9h%Y0i|6j2y@{VQyEg%{; z?r)T`#cuEOHfAD*lZoKQ%tqVirytGEJRrJq=SW{{HgWQf*?1JXlD<(7_q)G!hgK9;{=TH-Bdv>6d00WeRBn1;om5*c-(^@(yPuha znOoxKDTO81>-}z^D(l#aaxU}7 zJ3o0+#FQf1+i-c&e!Sqg@kIc^@AjzzW-NU4=8U(Fb$7Rpoa0d_SO1GQQBuY7ofAt~ z!%4@18#%pR?e@aDi(G=35&=IREfha-q#=Jzth1EIAx%~sve^`2NT^fTUt!)=uUS7FTxie9r zpB+%#rP}f0)w4tor};IxYPX$|j|3;vS`l(~;@&n7%PxHw_BOul z4xUj^bRCz%vkkP@d$L`vdXDPvgL-V7E-&Gk)b4&Ng0x&C>-x$bu{-*A6I z`#+A&M>X=)mK?5ttqKZpJjMS_lm&u`D9ClLAMaAf9|7=^yw$qxL5ANJ!nx6zM;F%0 zJqp#i-P5g3SXF5@mo{yR+^|Ze)F~P;YfJRibQ7nJ<}@_e-(KPW>@yp5+Hep_j@DZG5OXzONq5IPEX4co3$ znR@ihd`SD?&jX~ArFMGmPyxAe<+IH^oQYk!vme;_1l~OYuKBBTJ_Y%IjkJ%T|xuHmm&iyd#IZ>2)g1GLrE$ON($4$Xan4kwg0VoSUAseq4ZezZoXD z9Ya@k`##y|)JZ9n4p@NdEZp1(Rwd9mS(MzIGqTTPpbsic8M-9y{*ivPHa+z-4e#vA zr)g58^*uDw240?LG>FDkv0P{AV;iLovOOu-y&H8&yM5i& zX7e1GB0g$+SnL}nX2bf40PI24(zBBg&+a;RBEfF><_a}N?J2Bohk->X7Y?|`%!gG( zKS?#OyHJI+p+-4BGwbkM+W8#I6}x}+eb)DG9;QqVI?4*oAIz!Qx8R%kXm9+M zae#mh@gz%DwAmif<*|W zG3Jk~Dbe37*N!Hwhj*%?e)MJMM^zRdK0187_*M?O^!a%BSid}&dA5Ynb(VRqyFpO; zzv6XoBj9TgKi}$*uS%eaAcn5re>`wNPg%z}z4c4pqwJQt$=9`h1<4;xP0Gd zJjN91WlD`F>~*Du+42TfD#}^4)n-NQ6y4e79ZMY{GdS3?Kbjh~^0L?&)3vGAxLrO) zSxH2G(#ni#$6sGxf59Mj7n%o4qGJ-0#C8A*4_2)OUFZ~fS7|UTXe+?utjKxoH_^VQ z7Lt^E#;v&ikDZDe{zbLqr4NdYEU;e~bV(TMVTZD956GiwlcUF~kXO&SPgU@v@m&4_e+=964p8$9o-KKat4w6T6Ji2HQE9OO+?)%LNMS zU#o{-14+AjN1%T)@lxk>^huD`tIyZop@%N*nCdun>E(1$Rzeg1{EYHNd(zS@JYG&i zTNXSRT@brnvuo@Egvcol=F7NwM=6SvDPjTWW5xHfkyW+Aw>cmJdo|>5NWr`B&4_4~ zc~0MAot!RgXxDmnw21YUUTKd7I5LELTdMf$s4MNbOa7`3=M{Oi;6p@P(^t$tnAYS*n_WF{vqL*C*< zbTPM%HM|V(L&MW;Sev8N0b#!*e&H^Q!cA5xwodMUdK*Pwd`rP2d<3VR(uT=Mt@+un zAa{9LJ6yNxb#V^n!w8otugir>D~!iZq=*lJ4Dj{F(ey;8gW0btCyV+Tu@mP;P5;(V zXhYPiffuLSmhA=I&>jnQ(uegy(J~x~vt8d1&^xXacX00=i3&Wx=0brq7 zZ^*8vc3}&{ir=ENzi*$-;S^@pQ#B|+)44Kw`KYF3fLzKvW7aNR+cye`>Xii6UUOOW z-q=bbt~5o8m10lR8Nz2)KN}QYR&5uxP{b5Ak@k^`%PycbJM+ zgl!IN=lB=2rH}9*?@pRx>%3LJD8{G9r3s!ydtqR5)RqV>g`pMAX9jRbh$o9IoP1Rp zbsc(~`deT^McUi1J4J@-BG2;}E}P}$$`QlH(wOhvS6*U_%k`4=WX~(SR`h z>mo1BEJzx+vH!B@%ap10JW2sVJnbtTA}3C&1RqSt!s@oQf@kf)u0FC(@LGJ4WR@M` ztk!zJ=v+yn!taY^ad<+jb$BlhmP+O3x<`4^Y;OvIhGgP;odRTX02~%c1#u@l?YeZJ ztP^~WDjpS8lu5`b=(g=f)o9SL3>j}^k7Dd4<*XVL9(hH4-_21 zWTXd3Nz;PZs>t11Akz3pu5M{jizpQY!q*RS0px%u1_<{x7i$(zvrD>lb(x%+kip|X z3J)@{rx4_d0x_BcC6=~r{t>cpB6=+9V!0dia0PdqD{!z_XpALL(Ix2MII$K*_)f#- zUy63xx^oNx)5Z;UA2iXSIuItN{ zD=inFl@YR>*7Vj(B#HVGtL7U^V0s>dRd(X;;~+VXel$6NHXqS;%0QeiqAM@g>C=!O zwCPiJW@&MPDe8tg($B^i#%um3&D6?(g<{GiDh$OGty4edL5(5mRlt6bZFW9p&`$#U zF-G1wMtA4#v+Kj9Hi;G2z#a^~o$C8=|hKsR2G|ezX~^U zt#okiUWCHC!P-iYRBA<`~L= zHpD**m910kt`tH9!MOSFR)H_kYR!BD_@B?fOZ@7s3hlhd8@fjw+4I=%3LDtWsTj{s zT}+>NvX?JejEuT@RH)_?+>wZ@p#82-q5`Sv77?@8>Ub|@$H8}p6??yl>tv|1x@>ky zr8=*S7fgmeBv89~+M@KDMHw(9%JZaos+thEzl=sR1t0=G4~4W7f2;^||B_rLgU%Ho zy4ihaxXAn}*wA%&wBi+3q<`s@$r~)r*vuZJg35uFAoECL3E<^{=c6Cm|6V4#gXEDh z4VNyq=$mT3p7?m{oCqm7Ib~J}xX05Omq2BdA z=5Pe?MU-7_*8(6gA(C0fyIEW{WI6_`eC>HpEC=(FtAN0I9qV(xh3w%Xxs!cw*hwLY zKPu!BH}PJ5Tq)ndih>roKQ~z6yG6GKSO?I&8C6HwbCo}Q^1+Be#&ND&0?czFiTG8KQuqILQ`5jVO*9r4Sc@AQYv-?+#k~DHLGm68fJ$G;i(@*)ZS+ zIeuI79{*5{#$T-3Xg6q(yn{F)eVXsfnsKxE3RwkHdAh(WR4rYCi9x)tkpL#dy8#MJE1J>$Gik}9I)gHOT)Mbo)E**`!K?;~2?T>}>J&NWVt z0#)}OP^jPm^mzcpWz>lgm$>h(zgQ|BXeqOs1p5b7GcVMB7yXo`187wlYVv1@2Q8NJ z^k7h9bFYKl%Amiah=<2yka_j2-(>gRbe&AbotvOirG9Cqg2I0h1Fs@VdW=9G{bHjK#V-FrFXww#yX{2nZ!P$B!ZcV; zDyhDg%O^E``YPd*7kY{z=ZH4-( zS6R0+XkJQztx)G>ABWjMiOxYgz?5v24+5NAF?cH}0#a*Uu3(s$Vmke2XOGu0p3M(&_Qp8hD`_^#9{=#a>jpm<@BLj$jl z=|;80ujKxcfMGTJXbzH>`^%$n4~CPbC9U#8q7qpw2VaUgF7!tN?!6fZ(b)&|>`8gg zag8Uw229Zha5+q^xce)bp(rD;t)m2s#Rnh22#troG%OraYHivzq4s10%c>XzU7M~a zy0d@?x5%tZwD;cO8*}hhpeer&2-iPMA_A=vu0t-!)srDEAnOddBo0<@f;h+kl}L`g zZC$G^r-YP0eA@LHEV8It{Z0bfB<-q~b~N0!C!>^W>lTL!Qvu8&MCe+s*mT@F0|_97 zVn9IyCI&nY2mqvB7zQe0d~u6b(Pb*zzJM(2@hX>$IKmnrX8TGkt+x_! z2ew89w&b6?#MQJ@e`yY0$6G@vSK16Q26_D9J z#;tjlafVbO4a9Iua?wEM?L1uOtuB|a+D@mzPR+@t$`S5G=-L1ybN z?kIgZ!%B?d(3KVy1XG?iS`KX7;ymfZfmUCu8(W&QMn;?eb{0iryi?_(11klRyl}_& zT-Hrg79f^i*x@JR-XH&X6EKqn8Sf%OQ~9*T4wFkKK)e=Nb32+rj-EkT6yX=-RvT>* zSLb({yt>1^jp;UC%zG#vLDS}34_;3E{3&L8&!MFVwhCKIL^O^F@teCi=Y4E|X)U)s6|2=d^5JA(o3`2Xn2X z)ZP(>b?JC=O#uF1i5?3I{0$vwJmP_YuDhaKyqT_|fn{qnXEd|e8-HEbhfjae+2szA zBSe!_Q)LT)@PsMzQz#q(lC?2-Y^q@H3+i2mNFMw@`@jc6i7Q1zjYS`0eg04lrNp)Z z4$O2F`|aL~Dd`Unovm4}Nb^7RE--BktPB|W?Z$W zYt^2K&9!uG)6PcRXv7p`S241gM`xppmXhsGXLnjkz8BNzU;dDSFGa@Au zp6w?oLiDCxf?xZgiNG>{2PzTJ`FbK|>k2XZEZ{;pZ;}-!KvwZ1&9$W76ze92i(D^-0#hlCf?;qZL`;fGIjbas~Fs|meAf* zMDHZQSPG=I?r7Jw?Ax(*nwemPbl+LE=PDCURe17)VhI2KeLk zYSK&!jxZxv=EOA~7{UY$l?fi5BHuh9u!om@ftMZNEmlomuUc0z0?vPijJHe#TdMWB z9pD5uRk@syy9vFa4~iMpJ{)t#2yzcPJI~nw25hl>CSf9{vb~`n2+&Bv+*#IxRTlC&KpM#N|ej6un=+FZ+pIzD}QQ zb*U5+sLPDap-u#w5dxsjL{KG$8}e4IJ93fitl-S!-YhMpOI&75%dzu<+k;|YMQMh9 z<#yCVx7B$tG;h#;{2~7BCGeSO&2kGdyx>AcX@H|{=>@|gx(B6K}Di?LlVjAsM zKMnwHCLsLX^9WyQU#u+Lv*z;xgx0p1Q+d7)9P^|@YRqN^BbBHVlrf&D4@mC4Vw8&O zCPKI3eGSVbmp-k4^n3>*j#tz`q+6O(UKuq~RMtpX(D0~E(Aau;v^=8^EMN60D=_*7 zvx~lT%dkdI^XsFx>_Wl?ourFn_l~YOkE&PzJHWpDyyl_(3c*3nVnOR|)$$k9kG4`4 z7@aqGOZR<{(hsWx#&U4PT}F2 zo)@u_W1_8Qx?NOA*c$DiP3_TCej@`_X~ip~HY}$DEV#r(B(z{LJGWVcEMbQO<2qp{ zt%O2ecG1v$OLIfFYg^r;hzmo$C>&QXA^4Wd9B0>x|2fOv2u*_S{fsHuig;f zxYqI@m<)?Xf4{*l(kT*P1W`dr;7hDRiPu%hN&Qj1M&vx=PIvz#Yfl6aW!=4-Qz1n8 zM010yt4$?>TOI~`6;8LIsq!jJ1CIY@$na*&<5`!@&Fazxua%tywP#N&R6tynZPF~ z%6`A0|5(c*AjJbGIM47r`ST(q?~beq7i%5q2YFK3$KVL*O`=&zZ~fjZeD>(9)d1)m zy|Jr_v{7pm(t0rO@rqZ~=j1_gEAP5kZc9BsvMV~arpD3F)#R*-jj9CmY0MGc=MZ^# zOn5%>v?s&0@i!aCIM|OTVU=0#3e(l$8}CTHxkz@yl&ThTD)oSHBewFxUJZamk(6^W4!^_6Ji`9kmh0ZkP`6_OL8-CCKng9zUQ=7jk;41MyBz~m;IP#+O$DIYyn{+ zm6VqDGvwm^pV^PT3EZ;!T;sm?LQ7lwqHAgBfbpu0*m)V?loI7ZjI8RLKn*rgN0C7N zvKBVf4@FT6!S_0?;FQ#ZMdm#RiRZAjFH*$nln#$zD6Ai5Pa_#0GEPjhi=yaAfY?Cu zc%NQ7nag}LNf?gHoWNYdI>X&Hrz7P>JI&#g7eMOv%A@TOeRFg3SJ~a_AHkmNpu+w1 zd4u*TVRqSh5hEo)Ew(qY*G~z(@HeG?FR&+S$=6=Rsz%Ph!sG?u@+9XjKj=j2&0>6i zyd{8MUBP+XBkkXWdXobxiLg^|I%x{-OhMB?OEN|?x^=H7rmnw?ptXa+5Jl2PKZ7q? z_ok~LE24tFQ_}G}m_71-@#Qg;sgxv)ML7?$1Gy0sPJEKa7p3U*fbHLC|!#+lcT;k`TJ(FG$ybc4#( z6Cw#g3-_cpQ5I!3l23BmSzZQg15Z?J zStb7A(dBcOpW}G%NQ)P7)WOhW`BzVG@~B`s@RwTC43QBI^LN<|HC(C#T3=p*!Y@(K z@x4fi;|bTAk)F{&4jR`z5YZR;S>w?2sS`dOqt?WAAe0qe*2U~cEsU1i7m)Vo1mS~2 zFKGL~;sfh}Np}c{!cLC8feR6iT@rw|v2`$y^Uov_9 zGTn7deUB2l@Zb~FtIm;$!d{+LA_$)~s7Y*72_T}T?cE-? z6Qz}eZwk#^-P)|zpH7!loW2Rahs3TB<~<)Okf(n=x;I|!R+)IT_>5U?)p>0ec?pC%m^Ni29|Ib* z7eP!2`#?=6=vwq}XVm`w2u}Ioc!t__=f(WSH zSQjvHg2qRGC(Zb82K)}N94zLC>*p3DL98&-5oM&G`ncwA6w?;$V5PRUaym-)W9@=~ z6dml@M>|P6kxNRyS4!7qC%>%T0$e+Domc#4@s*agNubO6iK4u|rAf7A(=epDoe9GEmK}LpS)W z=82Rj4=;)NBEx?~MQnin9z2V*$Qc+RwnCn7z&eyNM z9E8960g$l=>5#0+?Dd%W#zhKg9|#G=oK9l@^rl7!khPa`xxVQqSz5=R7!z*;Xz zVh|Ee<_6Qy&{!U}%q^xBkO&BIKg7r$IopT@4$cw7L`YU?&`ExNwkO9xo3?WV{}7jz zrB0B3xpu*l(PK=@7tb4u-!6=E*V5O&;@)0_zc^f+MZMEu4mDC4KAbxbOC|=qXzyEQ z+S8g2%1*|g#q0|j%bFiP-%~!XmA;Gbt&Pq>rs+_)r zFD`OgS`|ALp`=()E;_ug!c1$A1Z>OoIx_TO)dTwfDt_^c)RMAaZKK02? z_r3ZYT6^RY*)q@H;B`wUEF9vcso1HF=`kzsTe$;JY+!|l0Q&SjR?eW=N(v%tsFhc)({mw>~|L?TGL%Sg4ZOk2eNV4 zEbM){T!7Ic6;7QHCjGvc4@4c#9fCVCZH%s~AW>1aer12L^_4^6YQtGf&s?(GyYt>f zfK3T6p-2_}j{)FXl1!Et#&t}>dwaiJuR*xxAPZNMpLi7NbBP*PkdLdV&-Mtt0&$xZ1uSA2_ zKDzmHK|yz0{KEm0ZDlb-+i&>El39sC_~?C>!(fysI01y&EcUFO{S!^+5yUmC-69fe zvzL&y(z5b~l>U$BP9@Cz9YR51n>Olf8~qW}(e~s95}$ zB&b-a=$gN;&jv4wtSRKLkeo&ZT^TPh4Wbu#nKx2q_qkzLqGL2!jBsbMu!Fz$Gt24^ zOyz{pv^(qSN8lV61Iw3Q>g>Mzx8*(%&8D84ncI`SJ>ca&HY1F4$+dk2SRPrj_J_N> zO9<}n1c%@jAh^2(cXtxp-6aGF?(VK3xJz&d?*GTmZf3GGyEAj|{TmvZkLNjWovM1P zPghlUzlD2kyP)+T(-nl5+0-8t+s?(D>jg^RV3vr+On$L4Nq}tJJJrcr(wJg>r6Vml zri;6Dpt?>?xCAhdoGQ z*L9E-{U)`vm%83NJKOBON|Ha9E*jtEyTVmdlf$GVDhEAth;Vbyn*X?M_d`@w?>!r8 z71mT|uM}-`MN^|7TPq!1W%KAzZWVr*6NzrFne$c^Qg9>IoKBvZe;@BbZQqJ|SX;>O zGR9Ef8GiHJPCwOME89w+p1|CS3}!E-W-RW=Hj@)s7tLXi?jQ|Bj&DcwS4D4Uym>Hs zet++pgcb#7l)PI!Jhz1U&1znAudh?r!ueB^9>#AlMuZ2*)?vY?D8 zOdfkZIG$iw%Gv$9VgXpQLz6P*zLd=GPt@z-Rmk$z}-Pd;T2eXe@GbuYWe_AR=|Y2;L;A2D5M z14H(7UfYv@Kj)rGC}mV8xypY7&rZR@QZ>}7>;2Jp=EQZ+FNUisP|k2Uj&ln28#%A` z*aHVPps&by(zqb7tk^eM0cYSy2zNt2Y-nh>6JTpy2rc82)&d|O(1}yE zaOJOSmARwc6K^0garx|LGh93(iiq&$d_(uvRvXWFDw}Rh7aXq{w*GFC+4n(cc(n7C z_z*hzdwp={Ct}%Jh4;9Ci6Gk??xQlw!HQJJc{78lYc(8XO#^_0e`+RNQzcA5Hv? z{N~$$Dnf@`(*40bDteYyI_)cmPfAZ`3|e%!RuC%RriaN`X$j#$r$so_bZ&~V8LT(@ z`KXE?dbF@}GOR8RvqV!)1&jm9Jm92;P@F#TH4!~x&=)f&L)U)a4?ViVJsxXFUW;%_ z1DS=JVR(64tGW}gkM#xPLnwb^AL=NAqhFHRm$8TZT>ZgVVNu&P_=Iay5j*opEh(M= zM4#BT`@Yuna+KM%^p_;;X+t+n)zWKBK3QPxW+~ovoFF5{RG%^$*0CNOWi-bfr<{N_ z$t}G>caXYU5$v^gZ7c&_^H326w?m+(mCdqxD{$2WKHj=XpAb;l&7kNv`bP zGmX~7->c`G{epR>agC+qxN(knnq!!uMFZ{-FYqhAj zO<8=tF-*`LfPhw7*3V7dY}uMuR93(aQ)_+vsm|_uW80AT%;Y>bro>1#l-f-B*8mJj zVs#yzD(zr1B`_!zCF+hdY2>YIR=76dL9|c~Wm_lHGn9LtvQ%R`lzOw94Wi(D(t{J% z7~YV|wS8|zPI3L-N+m_#p+j*WFm{@>1llOsLzP#$mP?P(kqps>N+PD2Ra2?SkhKsl zZ4RTy1Wyur5v7S(QO?d6ByVpcqKjqnTA;gA0h~0( zQ5;?-au2U9#lm6du=d75co<9u2{i|GhvGH zFc;j<`}dNJMnk(bce~Uw6S7-bYecL<&j#z+YDYD4HcHX+-dwQ}q7%Z4fQyk!KALQ= z`a#$B<@8Ar?{;lEqsl@NN73BL*KC0`8?04evy{DN`{q=Foy>}q<{^*pxzo?D$%OVD zWv(e}Dofu?j4t}#3A;;bIhxCLJ&|oS3r!z;)vSQF4Yc1R3WM)PGmVSbu&_0GB%On& z-p%Ii{-FYKlCoM*&xu-(b=0_I5O>=Oa^pt=0Bsp+6#N@Fx62|jlp?=sJ)3~Vmmu4t z`*I8V#Urp{XTegRFcI~>Z4LzA88B$XBk)&bO{_ve5kK*}OrCr5uBtb%9&UGC*5*1fid)LT zq-owoc^BPIn1(zX;p^Z8+I}Iz-Qr`xIUtzs>98k6A&yX2QXzQf$Q#-G@uNbZi`S7X zRIl4*D#s!FqX*;iTdvh5b8@VXj{bpW9k4+PnXA*WYMZ1wcuRp!>wKP+4j9PQ~We2=gpr+(D} zgJb-%3%jgne+~FD?%Y$eU4&Kx)5qB34Vsf>J|v;mu$Kb4S)xT*c6v3tZlgB(m9blg zPxqA;IQs`M$hF#sU7pF*7@wQo!L$cY`lQ{jh*zgIgy=v!<8(0XPb(G=IhF4oCriXG z1Wq4()fR>h0gXWhu{XZ>fMAld*0EBp#&%GnYCyILF)n~6NW%{IRj~4a!Y|(kWY!0D zR*XD*A;z2Sn9vTxyJXvh*u^`)4yUeJb?}}hqR!vN^yURa@Yy8u20h?KTD$U$aG`~w zw*W?e2H9C^G_J7C^KjFK|zj-#n0*{Tsgmax`)YP6Km|Lgzv{&|R@YM!4R*U5eL&HZpxkOSAtt@Ld z0ffi3>SGx!=5Xd5E>~GsJ0$h)RX!qIBz+6?)!ZSnk=T;l zLmdIB@sX-y_|rRvuQ<8JVVKl8**0DW_g_bNOEvxRiTh!T+DN~>RbJHG|MY+;2-%HR zB&RDspL4Q#keqxiG{&6vrIj)W`fXEv+WpSYtQyebHfrm+4Kqnia$?y5i34=vTbw2C1UrrDcdqZJ#N9UiOR;18#nwu+lv@{|DokZQ}+TmR=v%9@7XZN(I zh9{#wGR~6H;>N_>>ZS5cOO1bMB$ml2qf5tzDiAOSl~`JI2eL+v{PbmIH~OaU z6;!F0W52?E9}eaju?$H>Z@woS!O~|7L{1StUu<5 zVkNoBu(d$2=|=7kUVV>9z2M1#RsiK}Xv5Sk)OIt}H9cDsBxJrhkAsW}f zmV`8u*ay?;d`fGZ9l}1X`{Bw3SA+z?2AcF;>dS-SqAneU0uvKBTo;pDm>iZzpeIWVOSI>|=i>G9zz+Kvyo1@{E~9qc)+BaC`6*$WS_;W)T1B z+5GE8u7bjy6kP>bD9tE_Q@9Rq7@sl5ul*zpuUTdBqb5a!zD;3$w&a5}K zJ|v4Qt_{x?$h|wnDxWq^gWr84|3X)yul@bdsP$FX(@-=uG(MY9q^rI>$;tb29V~Hk z-bHh|WRscC{5z#kMYnUdY-xB5Y4;ubY}AZV91+P)PTK&#{iv0)WH<>9?=SSc?{!wz zyyv6kA0*o*CCy!>Jg%BwHG&g->Ec;w(=-S=U0oTR!0{UE^(6Oj7=zBsC$tb|?B7A2 z$LymySS%rR6#Z}&j`nB|1~8|R$hAPe5cg|W|<4LZI#~#5AM{gS=gQ0@!ZItSXA`8E*UA?lnnr0w5 zhX;|Ak5@?{F$sE;x~z@CkB?5Ua7f(Jsk51ubvo}P5HTwYPcrFX2M3SsTe*=l-X_*A zf)Y;?0bJi!G(~=|f6testfZ1&#Fe%^-4fF?=g^;i(ZmH#+u_boEIQ&@F!!qcX0d5< z4e8b_#|t)oVdlPifBV43&)#A7VT7wD4(@sp>h0~DDFOczf)yx*teD~Kna>@hVJ1(X zGp3GX&WpPiQ&%VC0a$!TJEsZIfJR6{MiiR24GY&n+OV=z3%$)X_b^$qFWxPZ(| zTddY*Wb{rEy`lsS=uWeGQ}Fi{oJLSBzr}Ab8^iN-JyjSxYAqja7g21v;dMde>#G)6 zPI&x7N3>Na9hjCI$avZMWrk^Z1KB}zJHS`l;~04M(*pB1njbY5lOd|^S0l8$3JBj5z4UlYKeOR zb4pLDZG=w^+v4aTrh)yQ@villcI{NljrCsgZpyLu;)|`~G0Zpv;j)q6ugcn@7l2#yx?dyrZZ93_myN(6I!D= zb;CP)%ObB<)1ZtVv1lb;VZcZ9Vw$7jndfnvVCp00$K(~GkW=cq(@!QV-=~9xx`-^h z;w_;87p6HMzABQJwAjGN=u5?5L4gXPyEGl^ZhDIun&tSA`rsGRR@9H{0F>&8E zN0QnG<(HJz`D(#JRzY>-A@z>dO2#!RHR}w}-pbILq!U6SgRrNk_2YdIfPNs#YM{bA z1gBG!VpV>4Kqs(!bm?%!uCmBwzcD(*JlRxv30NVxY<_#Q;{$5*5`}Kf+6yZV+B2n!DCm zTAiUA^X}56J5%6C9enoYToc%ECTs*}nBry-;JrD#L75>xF~UH|+ccZ$Cr5B;05m5C z4mQuWL6m^;@TNDov3$QS-98(G=*N{l(6gozJ$JWV2I+i4HWw2+TQx2BA0p-(&*N3k^uP>;r5@5dae%Bq& z&(BgDV_Oyu$+bJN8?G6*wZ;@=uHA4z^%-A2^U+y$Gq0ZBXncS1dZ<5LHE*8b82WhR zJdMIh7DQf=d-lF=wZ-is6JtJ5WwB>DZs{zsRP*o#4QKhlDC>#|8*~9IJQ_Rt@JSj@ z2t6K;KCQ!n?}gDVMWah={N+~l=Qff;N~LmA0o&Zq|HvR&_H@d*TE5e5ywc}T@MV^Zgnuz=?+?46qCKMwx+gA#xbP%?FNaIiF@*R!={5Vo;)FtT>A zXHYb1mE0052-9P1h3`8PD+ z&`U`Z!9Yk*3ivN+2mpZdZy?C%nOVyiSv%6(JJ^|7o7n#Y@hB(J>=?NJ8)EvTl(j!2 zGUO^>A$EmfG$pV9t-L}iM0nJj&_<3PNiE+G?~5m2T;R8;`GOB^Wyc(Rnz&9qMY0$6 zClIfeh$eoI8O0bz^5{q0Bd+)gz15nuUNp{w`PL^z-#+8;rUkNBb7~usx1fk}74h7( zskeIC<`r`EdL!y5lQ|*;_oAvQc zMU;$JUbTG?moFD>DK>RpAU4kTLGhaVF2#n}&o!iep~9%ix|dI85R3T+PtH-%_=_s| zcH)Rx#x&0A+e3|yQ|$%?ZCP*&PQY*Pv(PqpOuupAi7G9#l49N$5tW%X9TR$ks9;GPBRW@-_EI1elK=q=8Fn6cs<+9 z9nOfiI2Ti$KVG;U^a$~@@jPQ7v-W|ed<_Z!i2e=Z3F_N8I;fgi8`?NOdy$=urKOSG z?=1Oj&407xhcPX=PDb?J(>t%Q*rlW>d?tGA_iI8H&^e?*r*;~(8=rRJ=C~mQTDqj) zxarkDZ~!0HweRFZqmaPpW6CULx*rsy+$&l94KmFk>{1+#`n8!%y7mlFTx0N^XN#Ls z{Um4R=$^l9qU+kdGcJJ@4v)fyQx%Qj;}K}&J}mIQk?{Rq3;!M0eR<8-v2zTW+~_Mf z+8!G&f%jEkIjv68+I9z4QZU&W0)j%v!8;A3Lhv*4vVENQv3F6#>m;l+8n(zZP z&GR=jEp20h0gK!$B!^Iy68XY((h4z} z1LcPCx8)+hJBmpom0hU0Ni$rsRKKTX41cV6-SVO^$TgSL=-9C^pKx3jYlg(sCd9(P zu86l6j*n$Otk^&%>P7l^6X_!(qwdp?QQTCq z)f#P6{#9=yy-OXYmVc;iv74C2cLb-?67M5sj!oD(1P+T?9-nfk*4;`B1}p4|8#`BR zrjwNDaCR=ML-)(wRIV=eMY>f2uEkZ=&j_{qdT)E()V$}NuX@MS%RQf*^9FgZpni4x zXJgzT3>!!S-TpZ|a{UcsNLm})$XlA(JN(WR@j!F@o2wIqDZu&=BSY*gC|w^0XT11^ z8VwU|XbA3fy+;Da)70f*)2@d@H7srTh7dDnkuF0yxs(1alNr)&jP=;W-QdfnV(S(= z@b}yQCOb9t3bX>yk+^`4#PT;}7q&ApG;^@0w{tN5N2vWz4ir@(+sz0cWO9q1j3PW~ zF+@=3=KwE3Oj6+@sZ{sj8`sNsoMhcivDH3Nx~Dc2D?~hAP-88iG9C0C!~WF!sP9>1 zcS_#Au|UyJ-7Agh;W>{;T7Yqb@#LIC&f>_u1W^wIlP&L``Su`A`XMzxHZHhM#gcXu zR`Y`DFpMqe9IR?W=Ltb2pl_+NINd`yTSVYVJ&8F<;pJad)~+K*rgYOW-JX+%S-?AG zwTThTJ?(gRx3}>ud4pi-cYkAo05JWz^^_d+931T>4Q#9hEgk3`%#44r zUF08=|1i;6Q)#ZY?}|%O7B-tK8;k3lyafV14=u$(La0MET=H~|eP1PZw)1%DZ1HK37H5-aR)qmwR(q_qGP~kFFp7jp zJTfT1t&mYArMaYi-m- zLdbnqmq^atNURZl7oYM8&HN*1uBnz?<}^Fmj_!h0Htd=u$BLgakPh%Nhyi+GE$EgFP+#}EzN9B z+0qZ2CXDM6PcAd$rdL*fn;fPdJA5atQ)WHvhPBs%WzrRU!-HvbX!VSlsWqa)N#6~X zXv2BERm3B?JLZ^SDThEeQR@q!4il&#P!e8)1diO-ETE7M@I>R6vmysm30K06+ zo;|$0Jr580;JOj{_W+>{A4*vvWnkOCjO^=BR9cYLg%pbS^rLiPFXws}M|*o`_4R|> zb&Bu9$(I*w&fQnLGX%dc33xtH(KkQ>wmB10*E3tc(E;$)5q#DUGx-nA0eKak7OlKy zeBam4P$|$0W>Zs)jg3=IT=CJ~33<D#$c zrzD{EtY!B;xrIDAbv^M$?g}wpw4YykxjM z)HLWVdH^-VN&zGfRRXS>@m6tA0ay(LCB9wtRe}uYkmgUzQUIP zEha{z1tX1uf_=p_3tsC-Ef0s=&Tos14+2aHbHdU4(PSYlg81uV^FkP`B3wfYBBR6v zU`L_mA@05si-PD5z$bC;$Ab0S7P6$oM18e8&TNXI42XZFkxd{E<^V7c=@Fd(yY zV|FD3T$ZrVm!+5KT^XmhCOAE0Vwi^SP+$C-x$T{;RXzP8+amE1&JiDB2g?cNGPVHN zSZDA$*R|+1#n|pc>mPgh{+(&*d_@_W(N%@!9CFLs5?XmxkWViOm6;B4sb@q8Va? z2Z*Rx!w7qPQH4SaLnyc6JmXm6Kn9OdQBhM+olt#IJwh!*?Lr?=cgT*UnhPh3gOpXx z$=K2xfhB3H!sVPtdMc`7nq4v+5~?^&hB;!_*WWWXd8mToLgNzARn7C21C^_k%ctSY zDyt)^tIk1pX@NKO3r{BIXAVReIT&dg0{mgZ! zm&yZLRDx#ylPLL3gDytGTd%gHw+;tQ;xdc-KMu>U6>XN_D>szFmf(JbET&gkDxNRp zE@PJ&QKA#I3ZJK{F`3#d6&rf7IEMy|@oFU4#HrDcbOEz<6FmsSLoh)NW)CRMVD zqZ(R#OI(c>4w2s?zESPD?i%eL&ftwFPG{z~NwkSQHG=53vq~@)vDWKDA{-LvCYyI7|X16HFOQfao7l^kSi6{+(??@24VlwppV$L!tZ1JLj`=?Oe;Qk!NsN zEQ!jAUGz3uhgykEwM}b_yi4Dg+!l9_vX3;Dj$KXNy4?;gvCpb6HTUL5Nk4n2;i+-7 zOgD3CBWN2e*DepW$lb|%`gzvg@}97r%Ul4Tz5mesz>I$}-a~)vD*U-?xIAW)v}56ZVYzHu=30_M^eH_H?b*2gyne^}(aRvI89LXr zt>}w=#e2ok$x$QRA(5dY250S71Bhx;H_@HfrST0k!Bu=!&Y_e!;1l`yRcSG40&hmt zza*3-q^9#!&)Z)d@fJ5vH>X+{e=2?(t}~>wP&I0|l;EiIz2OE6b{KXLmLJ0omf>Fi zQR;?4=WE}mW2#E3dF}V;aA7uza+iFB8`3GHZLS4ohr{P3H?5t(I!*;ui;(4`mmwREkwFls${KRj-au7AG`w zHI!=6=8`MU6s**&zLpQ`;O)ij!|w5ah1-L2hB)M2(p?xIFPc}Y##>Hrb$5{4%%E{! zx~x55S+2{KY%SImn9Xc`8UVTU#e?!hbRyIzoWDvPwOK%9LEPaG9+67vi|8i6u}ogD ztNGGYQ)MN#u$D_Mz8`6ZU&2Z6-24rEOXMiDoT5rLqOP!7U_ay#drx!Lbw~NSc)t)# z?keq+%l_z7-<*=xs20T-R~nDg@}tK-#CG5dEGv3;XANhfRzuHS+ejI?GoyteI@N=+ zYOQqF3z6eb%MljVUq`jC8oerPoL0WzWpmuxh%MtE>|91JzHYwQbLu^ebgqPg2D@=K zI!ahlYEeBy^7m#%n1?59J9cWj6Fl+f5l+i4M4BS>!X5P_yD2)TxZMas36D0&CCpXL z7?#>_dZ>aDok85STpDS-8l!Y2EKiLy8nI_9FG7ezH7iI1C?4^evavX?tv<*4oD;=>LSk@`mz!6}*;r z*jApwShUR}QW2TWmSnQiXMtDM-ALQWA6pOr7rZ{R)J}pLcV(dI{cm=V88v?sdyUB=woL#>ybQ@U2KrUe1gc#zO!1 zUCJw^j@03ruk>HnF5*|j{EhessHFl3_HE6_ps=Cxw0W9BtW|l63E~HB@xOZnu+B93 zBE&Bo+=;R25L?S_?QO`xgWLElrO{*Z^rqqTDYzdk!|BX;HOmFq4;MImW%FJZ)ON({ z|BSu@b}lI2+l(0FiLQBgE6r87SmOP%p^>CX*1^&tUJau4KNJ z-Bcl4WfRg+PfurD*UQ=G^fDV;g;zB&5#b0001*AB%h~6w3BB!e+T=%8`8l)vZ|RbFl@Y}S zMr8iPLf|WA=`a!F^yZNv4;T$ou#sMKpLbJM+Oqb?h{b?;GRiwcU!ICRW%POHiB#?Q64O{ttO6*WJzk2DKQ zrOP_?6&;b>9`|54GuuHpgz9TOE+*9O?)M+lslGpZl40xEBs6hQ_=tH%D{1V>TAeU| z1fGLCVF>l8*Cww_xrIN@x;DEknVyQpJ%g(%ppD-E*(k(O&evfwjF-u`wKt7ICzMQc z)mfToXZ2(QFb_E8TG`}ZQ#16kU0B=a3LQm6LhM?t&z!n2n+W~B;mA_yFk1>Wgd~Qsle{|A`&n=DZN)&qM}k^_jzv((h%xw z>hLJbO*enD;Lv>(d?*}0zISpt1#w}7MR;g8V9K1TrM;A%(gU))#*%xEGe8}eLmP!n zgvE#l_>wj>=+{bMqp&n*+*(UImpZ2Yz7BR^D5ZQdxr zon7z!c2a0kX=AO4QHqj6wIn^BU{WXV=4=uP>8*Y`Y@ zMA8P}bx@Yz`)BOScW}>S__fv|2_B{a4a_J$@A&_T4DuEx&wTj7gg>aS2+GS#3jjBH zDG*RXuwTY+0p^Z?!~WRd0oeaMMg|-TJ|F(JvZJC50RT(*eM<7bjfnBnh+_XX;*VO< zKZgE;Z0B!>{`bNY-cLiv|EHm4^bF*bfR!hp?0*m+egXKU?(_^`KX+xK=LZ4+M}q{A z{r~^~4t@9jJHS5`_1|%R(fV_)7&zFEjpzr?v(^j!L4MNu4;}qlPx}YRbEfs*g57`9 z7Tr%EfPg;*aWkcp(6hGxQMvnb{XN(1G{O3&NP&6e18@L<@1KysKLL5ZCVv<5_oY0b z2!Bxg`K<|`MQ~^}3^@ZrN(0XzuYVE&5cD@^{U-&fKbPm()XivtnP*@Cz&soP@al&Z zo>k%;{5R$K!?F!fiofX#ls}|+cDT*(Kb6AB`fs{HXVAsT1JDMWKsVt0$p&KY|2o?L z)B}381glqp=psN55d8_g=EGk{|35MQE}1T`z_T*~cb*?=e>OgPM z)W5>}vjF{nLx4XhQT;c!`xRbCu~P{J7yzn)JIha|2#EUY^Z%*J^w)rS<5OdTfJ(0i z?mq*A#{4O;{XhE|42_KS9DyYgb9)=>|4GpOnP?Y(4s7&y;aTle{&Fz?mDE2slKghwtd4&Q{41${Z7cb6UjIJf_uKh`1^frtXWjlQ s{rBJ4^(&WuPNe)61UdLWfc!|S{3iqm$Y-~F3H*{m0RXIl;{X8v4-&aR%K!iX diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index fd30d36..a78b507 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -949,19 +949,31 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { - // Use /usr/bin/open to launch the app with arguments. - // This avoids the "App Management" privacy prompt and correctly + // Run the terminal binary via NSAppleScript executing a shell script. + // This bypasses the "App Management" privacy prompt and correctly // opens new windows in existing instances for terminals like Ghostty. + NSString *execPath = [self executableForBundleID:bundleID]; + if (execPath) { + NSString *args = [terminal isEqualToString:@"ghostty"] ? @"+open -e" : @"-e"; + NSString *scriptSource = [NSString stringWithFormat: + @"do shell script \"'%@' %@ sh -c '%@' > /dev/null 2>&1 &\"", + execPath, args, [sshCmd stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\\\\\""]]; + + NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; + NSDictionary *errInfo = nil; + [appleScript executeAndReturnError:&errInfo]; + if (errInfo) { + [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, errInfo[NSAppleScriptErrorMessage]] + additionalInfo:@"Check that the terminal app is installed." + continueOnErrorOption:NO]; + } + return; + } + // Fallback: executable not found, try open -b (will only work if not already running) NSTask *openTask = [[NSTask alloc] init]; [openTask setLaunchPath:@"/usr/bin/open"]; [openTask setArguments:@[@"-b", bundleID, @"--args", @"-e", @"sh", @"-c", sshCmd]]; - NSError *execError = nil; - [openTask launchAndReturnError:&execError]; - if (execError) { - [self throwError:[NSString stringWithFormat:@"Failed to launch %@: %@", terminal, execError.localizedDescription] - additionalInfo:@"Check that the terminal app is installed." - continueOnErrorOption:NO]; - } + [openTask launchAndReturnError:nil]; return; } else { // Unknown terminal — fall back to Terminal.app via AppleScript diff --git a/Shuttle/Base.lproj/AboutWindowController.xib b/Shuttle/Base.lproj/AboutWindowController.xib index 977b410..689bd32 100644 --- a/Shuttle/Base.lproj/AboutWindowController.xib +++ b/Shuttle/Base.lproj/AboutWindowController.xib @@ -50,21 +50,12 @@ - - - - - - - - - + + + + + + + + + diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index a876459..701b3e2 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.2 + 1.4.3 CFBundleVersion - 1.4.2 + 1.4.3 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 2898332e2e1bc9814bda080ca766e3be6cc63a5d Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 14:54:04 -0800 Subject: [PATCH 20/25] Release v1.4.4: Fix Ghostty window launching Replace broken +open IPC approach with open -n -b so every bookmark click triggers a new Ghostty launch event and receives the SSH command. Previously, open -b (without -n) silently ignored --args for an already- running Ghostty, limiting users to a single session per app lifetime. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 26 +++++++++++++++++++------- Shuttle/Shuttle-Info.plist | 4 ++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index a78b507..46eb69a 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -949,16 +949,28 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { - // Run the terminal binary via NSAppleScript executing a shell script. - // This bypasses the "App Management" privacy prompt and correctly - // opens new windows in existing instances for terminals like Ghostty. + if ([terminal isEqualToString:@"ghostty"]) { + // Ghostty: use open -n so each call triggers a new launch event, + // ensuring Ghostty receives the command arguments every time. + // open -b without -n only passes --args on first launch; subsequent + // calls just activate the existing window and ignore the args. + NSTask *task = [[NSTask alloc] init]; + task.launchPath = @"/usr/bin/open"; + task.arguments = @[@"-n", @"-b", @"com.mitchellh.ghostty", + @"--args", @"--", @"sh", @"-c", sshCmd]; + task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launchAndReturnError:nil]; + return; + } + // Alacritty, kitty, Hyper, Rio, etc.: run the terminal binary via + // AppleScript do shell script with -e to open a new window. NSString *execPath = [self executableForBundleID:bundleID]; if (execPath) { - NSString *args = [terminal isEqualToString:@"ghostty"] ? @"+open -e" : @"-e"; NSString *scriptSource = [NSString stringWithFormat: - @"do shell script \"'%@' %@ sh -c '%@' > /dev/null 2>&1 &\"", - execPath, args, [sshCmd stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\\\\\""]]; - + @"do shell script \"'%@' -e sh -c '%@' > /dev/null 2>&1 &\"", + execPath, [sshCmd stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\\\\\""]]; + NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; NSDictionary *errInfo = nil; [appleScript executeAndReturnError:&errInfo]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 701b3e2..ba7a107 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.3 + 1.4.4 CFBundleVersion - 1.4.3 + 1.4.4 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 76d6456a45ec9a770d5c47e042732d5fdc4bb478 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 15:35:02 -0800 Subject: [PATCH 21/25] Release v1.4.5: Fix Ghostty invalid field errors Ghostty only accepts --key=value CLI args; bare positional args like "sh", "-c" cause "invalid field" errors when passed via open --args. Write a temp script to /tmp and pass its path as --command= instead, which avoids all shell quoting and CLI parsing issues entirely. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 19 ++++++++++++++----- Shuttle/Shuttle-Info.plist | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 46eb69a..5358ed5 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -8,6 +8,7 @@ #import "ServerManagerWindowController.h" #include +#include #include #include #include @@ -950,14 +951,22 @@ - (void) openHost:(NSMenuItem *) sender { if (appURL) { if ([terminal isEqualToString:@"ghostty"]) { - // Ghostty: use open -n so each call triggers a new launch event, - // ensuring Ghostty receives the command arguments every time. - // open -b without -n only passes --args on first launch; subsequent - // calls just activate the existing window and ignore the args. + // Ghostty only accepts --key=value CLI args; bare words like + // "sh", "-c" cause "invalid field" errors. Work around this by + // writing a tiny temp script and passing its path as --command=. + NSString *scriptPath = [NSString stringWithFormat: + @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; + NSString *scriptContent = [NSString stringWithFormat: + @"#!/bin/sh\nexec %@\n", sshCmd]; + [scriptContent writeToFile:scriptPath atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + chmod([scriptPath fileSystemRepresentation], 0700); + NSString *commandArg = [NSString stringWithFormat: + @"--command=%@", scriptPath]; NSTask *task = [[NSTask alloc] init]; task.launchPath = @"/usr/bin/open"; task.arguments = @[@"-n", @"-b", @"com.mitchellh.ghostty", - @"--args", @"--", @"sh", @"-c", sshCmd]; + @"--args", commandArg]; task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; task.standardError = [NSFileHandle fileHandleWithNullDevice]; [task launchAndReturnError:nil]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index ba7a107..287710d 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.4 + 1.4.5 CFBundleVersion - 1.4.4 + 1.4.5 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 6c6cb0e978fffa03c126ba167cdd9b9a859e32a1 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 15:39:53 -0800 Subject: [PATCH 22/25] Release v1.4.6: Fix Ghostty multiple windows via IPC Replace open -n approach with direct ghostty binary invocation. open -n drops --args during process coalescing when Ghostty is already running, so subsequent bookmark clicks opened blank windows instead of SSH sessions. Running the ghostty binary directly uses its IPC socket to open a new window with --command= in the existing process. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 30 +++++++++++++++++++++++------- Shuttle/Shuttle-Info.plist | 4 ++-- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 5358ed5..7edc929 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -951,9 +951,15 @@ - (void) openHost:(NSMenuItem *) sender { if (appURL) { if ([terminal isEqualToString:@"ghostty"]) { - // Ghostty only accepts --key=value CLI args; bare words like - // "sh", "-c" cause "invalid field" errors. Work around this by - // writing a tiny temp script and passing its path as --command=. + // Ghostty only accepts --key=value CLI args; bare words cause + // "invalid field" errors. Write a temp script and pass its path + // as --command= to avoid all quoting/parsing issues. + // + // Run the ghostty binary directly (not via `open`) so that IPC + // works: when Ghostty is already running the binary connects via + // its IPC socket and opens a new window with the command in the + // existing process. `open -n` drops --args during process + // coalescing, which is why subsequent clicks produced blank windows. NSString *scriptPath = [NSString stringWithFormat: @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; NSString *scriptContent = [NSString stringWithFormat: @@ -961,12 +967,22 @@ - (void) openHost:(NSMenuItem *) sender { [scriptContent writeToFile:scriptPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; chmod([scriptPath fileSystemRepresentation], 0700); - NSString *commandArg = [NSString stringWithFormat: - @"--command=%@", scriptPath]; + + NSString *execPath = [self executableForBundleID:bundleID]; + if (execPath) { + NSTask *task = [[NSTask alloc] init]; + task.launchPath = execPath; + task.arguments = @[[NSString stringWithFormat:@"--command=%@", scriptPath]]; + task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launchAndReturnError:nil]; + return; + } + // Fallback if binary path lookup fails NSTask *task = [[NSTask alloc] init]; task.launchPath = @"/usr/bin/open"; - task.arguments = @[@"-n", @"-b", @"com.mitchellh.ghostty", - @"--args", commandArg]; + task.arguments = @[@"-n", @"-b", @"com.mitchellh.ghostty", @"--args", + [NSString stringWithFormat:@"--command=%@", scriptPath]]; task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; task.standardError = [NSFileHandle fileHandleWithNullDevice]; [task launchAndReturnError:nil]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 287710d..403be71 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.5 + 1.4.6 CFBundleVersion - 1.4.5 + 1.4.6 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From d90b7a528c37f1677d0cd35783d5990f405dc63a Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 15:46:10 -0800 Subject: [PATCH 23/25] Release v1.4.7: Fix Ghostty TCC prompt and multiple windows Switch from NSTask (direct binary) back to AppleScript do shell script. NSTask spawning another app's binary triggers the macOS App Management TCC prompt against Shuttle with no way to permanently dismiss it. do shell script runs through the user's shell context (same as all other terminals in this code path) and avoids TCC entirely. Combined with the temp script + --command= approach from v1.4.5, Ghostty now receives a valid --key=value argument and its IPC opens new windows in the existing process for subsequent bookmark clicks. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 44 ++++++++++++++++++++++++-------------- Shuttle/Shuttle-Info.plist | 4 ++-- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 7edc929..9f695f9 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -951,15 +951,21 @@ - (void) openHost:(NSMenuItem *) sender { if (appURL) { if ([terminal isEqualToString:@"ghostty"]) { - // Ghostty only accepts --key=value CLI args; bare words cause - // "invalid field" errors. Write a temp script and pass its path - // as --command= to avoid all quoting/parsing issues. + // Ghostty's CLI only accepts --key=value args, so we write a + // temp script and pass its path as --command=. // - // Run the ghostty binary directly (not via `open`) so that IPC - // works: when Ghostty is already running the binary connects via - // its IPC socket and opens a new window with the command in the - // existing process. `open -n` drops --args during process - // coalescing, which is why subsequent clicks produced blank windows. + // We invoke the ghostty binary via AppleScript `do shell script` + // rather than NSTask directly. NSTask spawning another app's + // binary triggers the macOS App Management TCC prompt against + // Shuttle and can't be permanently dismissed. `do shell script` + // runs through the AppleScript runtime (user's shell context), + // which avoids that prompt entirely — the same reason all other + // terminals in this block use this approach. + // + // Running the binary (not `open -b`) means Ghostty's IPC kicks + // in when it's already running: the binary finds the socket, + // tells the existing process to open a new window with --command=, + // then exits. When Ghostty isn't running it just launches fresh. NSString *scriptPath = [NSString stringWithFormat: @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; NSString *scriptContent = [NSString stringWithFormat: @@ -970,18 +976,24 @@ - (void) openHost:(NSMenuItem *) sender { NSString *execPath = [self executableForBundleID:bundleID]; if (execPath) { - NSTask *task = [[NSTask alloc] init]; - task.launchPath = execPath; - task.arguments = @[[NSString stringWithFormat:@"--command=%@", scriptPath]]; - task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; - task.standardError = [NSFileHandle fileHandleWithNullDevice]; - [task launchAndReturnError:nil]; + NSString *src = [NSString stringWithFormat: + @"do shell script \"'%@' --command='%@' > /dev/null 2>&1 &\"", + execPath, scriptPath]; + NSAppleScript *as = [[NSAppleScript alloc] initWithSource:src]; + NSDictionary *errInfo = nil; + [as executeAndReturnError:&errInfo]; + if (errInfo) { + [self throwError:[NSString stringWithFormat:@"Failed to launch Ghostty: %@", + errInfo[NSAppleScriptErrorMessage]] + additionalInfo:@"Check that Ghostty is installed." + continueOnErrorOption:NO]; + } return; } - // Fallback if binary path lookup fails + // Fallback: binary path lookup failed, fresh launch only NSTask *task = [[NSTask alloc] init]; task.launchPath = @"/usr/bin/open"; - task.arguments = @[@"-n", @"-b", @"com.mitchellh.ghostty", @"--args", + task.arguments = @[@"-b", @"com.mitchellh.ghostty", @"--args", [NSString stringWithFormat:@"--command=%@", scriptPath]]; task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; task.standardError = [NSFileHandle fileHandleWithNullDevice]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 403be71..5918692 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.6 + 1.4.7 CFBundleVersion - 1.4.6 + 1.4.7 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 474d6ce1e3ebad36af8e196ff8efdfd56336db5a Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 15:48:39 -0800 Subject: [PATCH 24/25] Release v1.4.8: Unify terminal launch path, isolate Ghostty arg difference All terminals now share one do shell script execution path. The only Ghostty-specific code is the three-line block that builds --command= via a temp script, because Ghostty's CLI rejects bare words like -e/sh/-c. All other terminals continue to use -e sh -c 'cmd' unchanged. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 77 +++++++++++--------------------------- Shuttle/Shuttle-Info.plist | 4 +- 2 files changed, 24 insertions(+), 57 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 9f695f9..9f7f010 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -950,64 +950,31 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { - if ([terminal isEqualToString:@"ghostty"]) { - // Ghostty's CLI only accepts --key=value args, so we write a - // temp script and pass its path as --command=. - // - // We invoke the ghostty binary via AppleScript `do shell script` - // rather than NSTask directly. NSTask spawning another app's - // binary triggers the macOS App Management TCC prompt against - // Shuttle and can't be permanently dismissed. `do shell script` - // runs through the AppleScript runtime (user's shell context), - // which avoids that prompt entirely — the same reason all other - // terminals in this block use this approach. - // - // Running the binary (not `open -b`) means Ghostty's IPC kicks - // in when it's already running: the binary finds the socket, - // tells the existing process to open a new window with --command=, - // then exits. When Ghostty isn't running it just launches fresh. - NSString *scriptPath = [NSString stringWithFormat: - @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; - NSString *scriptContent = [NSString stringWithFormat: - @"#!/bin/sh\nexec %@\n", sshCmd]; - [scriptContent writeToFile:scriptPath atomically:YES - encoding:NSUTF8StringEncoding error:nil]; - chmod([scriptPath fileSystemRepresentation], 0700); - - NSString *execPath = [self executableForBundleID:bundleID]; - if (execPath) { - NSString *src = [NSString stringWithFormat: - @"do shell script \"'%@' --command='%@' > /dev/null 2>&1 &\"", - execPath, scriptPath]; - NSAppleScript *as = [[NSAppleScript alloc] initWithSource:src]; - NSDictionary *errInfo = nil; - [as executeAndReturnError:&errInfo]; - if (errInfo) { - [self throwError:[NSString stringWithFormat:@"Failed to launch Ghostty: %@", - errInfo[NSAppleScriptErrorMessage]] - additionalInfo:@"Check that Ghostty is installed." - continueOnErrorOption:NO]; - } - return; - } - // Fallback: binary path lookup failed, fresh launch only - NSTask *task = [[NSTask alloc] init]; - task.launchPath = @"/usr/bin/open"; - task.arguments = @[@"-b", @"com.mitchellh.ghostty", @"--args", - [NSString stringWithFormat:@"--command=%@", scriptPath]]; - task.standardOutput = [NSFileHandle fileHandleWithNullDevice]; - task.standardError = [NSFileHandle fileHandleWithNullDevice]; - [task launchAndReturnError:nil]; - return; - } - // Alacritty, kitty, Hyper, Rio, etc.: run the terminal binary via - // AppleScript do shell script with -e to open a new window. NSString *execPath = [self executableForBundleID:bundleID]; if (execPath) { - NSString *scriptSource = [NSString stringWithFormat: - @"do shell script \"'%@' -e sh -c '%@' > /dev/null 2>&1 &\"", - execPath, [sshCmd stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\\\\\""]]; + // Ghostty rejects bare words as CLI args (e.g. "-e", "sh", "-c") + // and requires --key=value syntax. Write a tiny temp script so + // the full SSH command can be passed as a single --command= value. + // All other terminals use -e directly. + NSString *launchArg; + if ([terminal isEqualToString:@"ghostty"]) { + NSString *scriptPath = [NSString stringWithFormat: + @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; + NSString *scriptContent = [NSString stringWithFormat: + @"#!/bin/sh\nexec %@\n", sshCmd]; + [scriptContent writeToFile:scriptPath atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + chmod([scriptPath fileSystemRepresentation], 0700); + launchArg = [NSString stringWithFormat:@"--command=%@", scriptPath]; + } else { + launchArg = [NSString stringWithFormat:@"-e sh -c '%@'", + [sshCmd stringByReplacingOccurrencesOfString:@"'" + withString:@"'\\''"]]; + } + NSString *scriptSource = [NSString stringWithFormat: + @"do shell script \"'%@' %@ > /dev/null 2>&1 &\"", + execPath, launchArg]; NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:scriptSource]; NSDictionary *errInfo = nil; [appleScript executeAndReturnError:&errInfo]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 5918692..7340a9c 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.7 + 1.4.8 CFBundleVersion - 1.4.7 + 1.4.8 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion From 9ca460dd3d1b078d9527db067c52934178684373 Mon Sep 17 00:00:00 2001 From: Nathan Dale Date: Tue, 24 Feb 2026 16:06:27 -0800 Subject: [PATCH 25/25] Release v1.4.9: Fix Ghostty TCC by switching to NSWorkspace Running the ghostty binary (via NSTask or do shell script) triggers the App Management TCC prompt because the binary communicates with the running Ghostty.app via IPC -- macOS attributes that app-to-app traffic back to Shuttle. The permission cannot be held permanently. NSWorkspace openApplicationAtURL:configuration: goes through LaunchServices with no app-to-app communication, so no TCC check fires. createsNewApplicationInstance=YES ensures --command= arguments are always delivered per Apple docs. Co-Authored-By: Claude Sonnet 4.6 --- Shuttle/AppDelegate.m | 60 +++++++++++++++++++++++++------------- Shuttle/Shuttle-Info.plist | 4 +-- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/Shuttle/AppDelegate.m b/Shuttle/AppDelegate.m index 9f7f010..fc94e2b 100644 --- a/Shuttle/AppDelegate.m +++ b/Shuttle/AppDelegate.m @@ -950,28 +950,46 @@ - (void) openHost:(NSMenuItem *) sender { : nil; if (appURL) { + if ([terminal isEqualToString:@"ghostty"]) { + // Ghostty rejects bare CLI words ("-e", "sh", "-c") and requires + // --key=value syntax, so we pass the SSH command via a temp script + // as --command=. + // + // NSWorkspace is the only launch mechanism that avoids the macOS + // App Management TCC prompt entirely. Running the ghostty binary + // directly (NSTask or do shell script) triggers TCC because the + // binary communicates with the running Ghostty.app via IPC, and + // macOS attributes that app-to-app traffic back to Shuttle. + // NSWorkspace goes through LaunchServices — no app-to-app + // communication, no TCC check. + // + // createsNewApplicationInstance = YES ensures --command= arguments + // are always delivered (Apple docs: arguments are only passed on a + // fresh launch or when createsNewApplicationInstance is YES). + NSString *scriptPath = [NSString stringWithFormat: + @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; + NSString *scriptContent = [NSString stringWithFormat: + @"#!/bin/sh\nexec %@\n", sshCmd]; + [scriptContent writeToFile:scriptPath atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + chmod([scriptPath fileSystemRepresentation], 0700); + + NSWorkspaceOpenConfiguration *config = [NSWorkspaceOpenConfiguration configuration]; + config.arguments = @[[NSString stringWithFormat:@"--command=%@", scriptPath]]; + config.createsNewApplicationInstance = YES; + [[NSWorkspace sharedWorkspace] openApplicationAtURL:appURL + configuration:config + completionHandler:nil]; + return; + } + + // Alacritty, kitty, Hyper, Rio: run the terminal binary via + // do shell script with -e to open a new window. NSString *execPath = [self executableForBundleID:bundleID]; if (execPath) { - // Ghostty rejects bare words as CLI args (e.g. "-e", "sh", "-c") - // and requires --key=value syntax. Write a tiny temp script so - // the full SSH command can be passed as a single --command= value. - // All other terminals use -e directly. - NSString *launchArg; - if ([terminal isEqualToString:@"ghostty"]) { - NSString *scriptPath = [NSString stringWithFormat: - @"/tmp/shuttle_%@.sh", [NSUUID UUID].UUIDString]; - NSString *scriptContent = [NSString stringWithFormat: - @"#!/bin/sh\nexec %@\n", sshCmd]; - [scriptContent writeToFile:scriptPath atomically:YES - encoding:NSUTF8StringEncoding error:nil]; - chmod([scriptPath fileSystemRepresentation], 0700); - launchArg = [NSString stringWithFormat:@"--command=%@", scriptPath]; - } else { - launchArg = [NSString stringWithFormat:@"-e sh -c '%@'", - [sshCmd stringByReplacingOccurrencesOfString:@"'" - withString:@"'\\''"]]; - } - + NSString *launchArg = [NSString stringWithFormat:@"-e sh -c '%@'", + [sshCmd stringByReplacingOccurrencesOfString:@"'" + withString:@"'\\''"]]; NSString *scriptSource = [NSString stringWithFormat: @"do shell script \"'%@' %@ > /dev/null 2>&1 &\"", execPath, launchArg]; @@ -985,7 +1003,7 @@ - (void) openHost:(NSMenuItem *) sender { } return; } - // Fallback: executable not found, try open -b (will only work if not already running) + // Fallback: binary not found, try open -b (fresh launch only) NSTask *openTask = [[NSTask alloc] init]; [openTask setLaunchPath:@"/usr/bin/open"]; [openTask setArguments:@[@"-b", bundleID, @"--args", @"-e", @"sh", @"-c", sshCmd]]; diff --git a/Shuttle/Shuttle-Info.plist b/Shuttle/Shuttle-Info.plist index 7340a9c..e5fec18 100644 --- a/Shuttle/Shuttle-Info.plist +++ b/Shuttle/Shuttle-Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.8 + 1.4.9 CFBundleVersion - 1.4.8 + 1.4.9 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion