From 28f450c03f6eb7acc760fc2a1b7fd60698a5b659 Mon Sep 17 00:00:00 2001 From: Sacha Servan-Schreiber <8027773+sachaservan@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:28:54 -0700 Subject: [PATCH] first commit --- SwiftChat.xcodeproj/project.pbxproj | 692 ++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 69 + .../UserInterfaceState.xcuserstate | Bin 0 -> 27029 bytes .../xcschemes/xcschememanagement.plist | 14 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 88 + .../AppIcon.appiconset/Icon-1024.png | Bin 0 -> 595954 bytes SwiftChat/Assets.xcassets/Contents.json | 6 + .../LaunchColor.colorset/Contents.json | 47 + .../openai-icon.imageset/Contents.json | 56 + .../openai-icon.imageset/openai-white 1.png | Bin 0 -> 5116 bytes .../openai-icon.imageset/openai-white@2x.png | Bin 0 -> 12089 bytes .../openai-icon.imageset/openai-white@3x.png | Bin 0 -> 24552 bytes .../openai-icon.imageset/openai.png | Bin 0 -> 4795 bytes .../openai-icon.imageset/openai@2x.png | Bin 0 -> 10838 bytes .../openai-icon.imageset/openai@3x.png | Bin 0 -> 20715 bytes SwiftChat/Config/AppConfig.swift | 108 ++ SwiftChat/Config/Constants.swift | 77 + SwiftChat/Config/SettingsManager.swift | 49 + SwiftChat/Config/Theme.swift | 63 + SwiftChat/ContentView.swift | 46 + SwiftChat/Extensions/Color+Hex.swift | 36 + SwiftChat/Extensions/Color.swift | 103 ++ SwiftChat/Models/AttachmentModels.swift | 108 ++ SwiftChat/Models/ChatModels.swift | 375 +++++ .../Services/AudioRecordingService.swift | 162 ++ .../Services/StreamingMarkdownChunker.swift | 202 +++ .../Services/ThinkingSummaryService.swift | 63 + SwiftChat/Services/ThinkingTextChunker.swift | 69 + SwiftChat/SwiftChatApp.swift | 18 + SwiftChat/Utilities/ChatQueryBuilder.swift | 106 ++ SwiftChat/Utilities/NetworkMonitor.swift | 31 + SwiftChat/ViewModels/ChatViewModel.swift | 933 +++++++++++ SwiftChat/Views/AttachmentPreviewBar.swift | 132 ++ SwiftChat/Views/CameraPickerView.swift | 50 + SwiftChat/Views/ChatListView.swift | 167 ++ SwiftChat/Views/ChatSidebar.swift | 241 +++ SwiftChat/Views/ChatView.swift | 340 ++++ SwiftChat/Views/DocumentPickerView.swift | 69 + SwiftChat/Views/LaTeXMarkdownView.swift | 1044 ++++++++++++ .../Views/MessageAttachmentIndicator.swift | 294 ++++ SwiftChat/Views/MessageInputView.swift | 648 ++++++++ SwiftChat/Views/MessageTableView.swift | 713 ++++++++ SwiftChat/Views/MessageView.swift | 1443 +++++++++++++++++ SwiftChat/Views/URLFetchBox.swift | 171 ++ SwiftChat/Views/WebSearchBox.swift | 226 +++ ...allcircle-fill-circle-fill-svgrepo-com.svg | 2 + SwiftChat/swift-chat.icon/icon.json | 50 + SwiftChatTests/SwiftChatTests.swift | 16 + SwiftChatUITests/SwiftChatUITests.swift | 41 + .../SwiftChatUITestsLaunchTests.swift | 33 + 52 files changed, 9219 insertions(+) create mode 100644 SwiftChat.xcodeproj/project.pbxproj create mode 100644 SwiftChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SwiftChat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 SwiftChat.xcodeproj/project.xcworkspace/xcuserdata/Sacha.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 SwiftChat.xcodeproj/xcuserdata/Sacha.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 SwiftChat/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 SwiftChat/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 SwiftChat/Assets.xcassets/AppIcon.appiconset/Icon-1024.png create mode 100644 SwiftChat/Assets.xcassets/Contents.json create mode 100644 SwiftChat/Assets.xcassets/LaunchColor.colorset/Contents.json create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/Contents.json create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white 1.png create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white@2x.png create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white@3x.png create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai.png create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai@2x.png create mode 100644 SwiftChat/Assets.xcassets/openai-icon.imageset/openai@3x.png create mode 100644 SwiftChat/Config/AppConfig.swift create mode 100644 SwiftChat/Config/Constants.swift create mode 100644 SwiftChat/Config/SettingsManager.swift create mode 100644 SwiftChat/Config/Theme.swift create mode 100644 SwiftChat/ContentView.swift create mode 100644 SwiftChat/Extensions/Color+Hex.swift create mode 100644 SwiftChat/Extensions/Color.swift create mode 100644 SwiftChat/Models/AttachmentModels.swift create mode 100644 SwiftChat/Models/ChatModels.swift create mode 100644 SwiftChat/Services/AudioRecordingService.swift create mode 100644 SwiftChat/Services/StreamingMarkdownChunker.swift create mode 100644 SwiftChat/Services/ThinkingSummaryService.swift create mode 100644 SwiftChat/Services/ThinkingTextChunker.swift create mode 100644 SwiftChat/SwiftChatApp.swift create mode 100644 SwiftChat/Utilities/ChatQueryBuilder.swift create mode 100644 SwiftChat/Utilities/NetworkMonitor.swift create mode 100644 SwiftChat/ViewModels/ChatViewModel.swift create mode 100644 SwiftChat/Views/AttachmentPreviewBar.swift create mode 100644 SwiftChat/Views/CameraPickerView.swift create mode 100644 SwiftChat/Views/ChatListView.swift create mode 100644 SwiftChat/Views/ChatSidebar.swift create mode 100644 SwiftChat/Views/ChatView.swift create mode 100644 SwiftChat/Views/DocumentPickerView.swift create mode 100644 SwiftChat/Views/LaTeXMarkdownView.swift create mode 100644 SwiftChat/Views/MessageAttachmentIndicator.swift create mode 100644 SwiftChat/Views/MessageInputView.swift create mode 100644 SwiftChat/Views/MessageTableView.swift create mode 100644 SwiftChat/Views/MessageView.swift create mode 100644 SwiftChat/Views/URLFetchBox.swift create mode 100644 SwiftChat/Views/WebSearchBox.swift create mode 100644 SwiftChat/swift-chat.icon/Assets/smallcircle-fill-circle-fill-svgrepo-com.svg create mode 100644 SwiftChat/swift-chat.icon/icon.json create mode 100644 SwiftChatTests/SwiftChatTests.swift create mode 100644 SwiftChatUITests/SwiftChatUITests.swift create mode 100644 SwiftChatUITests/SwiftChatUITestsLaunchTests.swift diff --git a/SwiftChat.xcodeproj/project.pbxproj b/SwiftChat.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b70a750 --- /dev/null +++ b/SwiftChat.xcodeproj/project.pbxproj @@ -0,0 +1,692 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + AA000001AAAA000100000001 /* OpenAI in Frameworks */ = {isa = PBXBuildFile; productRef = AA000011AAAA001100000011 /* OpenAI */; }; + AA000002AAAA000200000002 /* Textual in Frameworks */ = {isa = PBXBuildFile; productRef = AA000012AAAA001200000012 /* Textual */; }; + AA000003AAAA000300000003 /* SwiftMath in Frameworks */ = {isa = PBXBuildFile; productRef = AA000013AAAA001300000013 /* SwiftMath */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 99304C8C2F743BEE00E4DDD0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 99304C762F743BED00E4DDD0 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 99304C7D2F743BED00E4DDD0; + remoteInfo = SwiftChat; + }; + 99304C962F743BEE00E4DDD0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 99304C762F743BED00E4DDD0 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 99304C7D2F743BED00E4DDD0; + remoteInfo = SwiftChat; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 99304C7E2F743BED00E4DDD0 /* SwiftChat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftChat.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 99304C8B2F743BEE00E4DDD0 /* SwiftChatTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftChatTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 99304C952F743BEE00E4DDD0 /* SwiftChatUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftChatUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 99304C802F743BED00E4DDD0 /* SwiftChat */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = SwiftChat; + sourceTree = ""; + }; + 99304C8E2F743BEE00E4DDD0 /* SwiftChatTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = SwiftChatTests; + sourceTree = ""; + }; + 99304C982F743BEE00E4DDD0 /* SwiftChatUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = SwiftChatUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 99304C7B2F743BED00E4DDD0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA000001AAAA000100000001 /* OpenAI in Frameworks */, + AA000002AAAA000200000002 /* Textual in Frameworks */, + AA000003AAAA000300000003 /* SwiftMath in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C882F743BEE00E4DDD0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C922F743BEE00E4DDD0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 99304C752F743BED00E4DDD0 = { + isa = PBXGroup; + children = ( + 99304C802F743BED00E4DDD0 /* SwiftChat */, + 99304C8E2F743BEE00E4DDD0 /* SwiftChatTests */, + 99304C982F743BEE00E4DDD0 /* SwiftChatUITests */, + 99304C7F2F743BED00E4DDD0 /* Products */, + ); + sourceTree = ""; + }; + 99304C7F2F743BED00E4DDD0 /* Products */ = { + isa = PBXGroup; + children = ( + 99304C7E2F743BED00E4DDD0 /* SwiftChat.app */, + 99304C8B2F743BEE00E4DDD0 /* SwiftChatTests.xctest */, + 99304C952F743BEE00E4DDD0 /* SwiftChatUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 99304C7D2F743BED00E4DDD0 /* SwiftChat */ = { + isa = PBXNativeTarget; + buildConfigurationList = 99304C9F2F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChat" */; + buildPhases = ( + 99304C7A2F743BED00E4DDD0 /* Sources */, + 99304C7B2F743BED00E4DDD0 /* Frameworks */, + 99304C7C2F743BED00E4DDD0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 99304C802F743BED00E4DDD0 /* SwiftChat */, + ); + name = SwiftChat; + packageProductDependencies = ( + AA000011AAAA001100000011 /* OpenAI */, + AA000012AAAA001200000012 /* Textual */, + AA000013AAAA001300000013 /* SwiftMath */, + ); + productName = SwiftChat; + productReference = 99304C7E2F743BED00E4DDD0 /* SwiftChat.app */; + productType = "com.apple.product-type.application"; + }; + 99304C8A2F743BEE00E4DDD0 /* SwiftChatTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 99304CA22F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChatTests" */; + buildPhases = ( + 99304C872F743BEE00E4DDD0 /* Sources */, + 99304C882F743BEE00E4DDD0 /* Frameworks */, + 99304C892F743BEE00E4DDD0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 99304C8D2F743BEE00E4DDD0 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 99304C8E2F743BEE00E4DDD0 /* SwiftChatTests */, + ); + name = SwiftChatTests; + packageProductDependencies = ( + ); + productName = SwiftChatTests; + productReference = 99304C8B2F743BEE00E4DDD0 /* SwiftChatTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 99304C942F743BEE00E4DDD0 /* SwiftChatUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 99304CA52F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChatUITests" */; + buildPhases = ( + 99304C912F743BEE00E4DDD0 /* Sources */, + 99304C922F743BEE00E4DDD0 /* Frameworks */, + 99304C932F743BEE00E4DDD0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 99304C972F743BEE00E4DDD0 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 99304C982F743BEE00E4DDD0 /* SwiftChatUITests */, + ); + name = SwiftChatUITests; + packageProductDependencies = ( + ); + productName = SwiftChatUITests; + productReference = 99304C952F743BEE00E4DDD0 /* SwiftChatUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 99304C762F743BED00E4DDD0 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2620; + LastUpgradeCheck = 2620; + TargetAttributes = { + 99304C7D2F743BED00E4DDD0 = { + CreatedOnToolsVersion = 26.2; + }; + 99304C8A2F743BEE00E4DDD0 = { + CreatedOnToolsVersion = 26.2; + TestTargetID = 99304C7D2F743BED00E4DDD0; + }; + 99304C942F743BEE00E4DDD0 = { + CreatedOnToolsVersion = 26.2; + TestTargetID = 99304C7D2F743BED00E4DDD0; + }; + }; + }; + buildConfigurationList = 99304C792F743BED00E4DDD0 /* Build configuration list for PBXProject "SwiftChat" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 99304C752F743BED00E4DDD0; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + AA000021AAAA002100000021 /* XCRemoteSwiftPackageReference "openai-swift-fork" */, + AA000022AAAA002200000022 /* XCRemoteSwiftPackageReference "textual" */, + AA000023AAAA002300000023 /* XCRemoteSwiftPackageReference "SwiftMath" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 99304C7F2F743BED00E4DDD0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 99304C7D2F743BED00E4DDD0 /* SwiftChat */, + 99304C8A2F743BEE00E4DDD0 /* SwiftChatTests */, + 99304C942F743BEE00E4DDD0 /* SwiftChatUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 99304C7C2F743BED00E4DDD0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C892F743BEE00E4DDD0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C932F743BEE00E4DDD0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 99304C7A2F743BED00E4DDD0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C872F743BEE00E4DDD0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 99304C912F743BEE00E4DDD0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 99304C8D2F743BEE00E4DDD0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 99304C7D2F743BED00E4DDD0 /* SwiftChat */; + targetProxy = 99304C8C2F743BEE00E4DDD0 /* PBXContainerItemProxy */; + }; + 99304C972F743BEE00E4DDD0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 99304C7D2F743BED00E4DDD0 /* SwiftChat */; + targetProxy = 99304C962F743BEE00E4DDD0 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 99304C9D2F743BEE00E4DDD0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 99304C9E2F743BEE00E4DDD0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_COMPILATION_MODE = wholemodule; + }; + name = Release; + }; + 99304CA02F743BEE00E4DDD0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APP_ICON = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + ASSETCATALOG_OTHER_FLAGS = "--enable-icon-stack-fallback-generation=disabled"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Swift Chat"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "SwiftChat needs microphone access for voice input."; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChat; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Debug; + }; + 99304CA12F743BEE00E4DDD0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APP_ICON = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; + ASSETCATALOG_OTHER_FLAGS = "--enable-icon-stack-fallback-generation=disabled"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_APP_SANDBOX = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Swift Chat"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "SwiftChat needs microphone access for voice input."; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChat; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Release; + }; + 99304CA32F743BEE00E4DDD0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChatTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftChat.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SwiftChat"; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Debug; + }; + 99304CA42F743BEE00E4DDD0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChatTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftChat.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SwiftChat"; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Release; + }; + 99304CA62F743BEE00E4DDD0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChatUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_TARGET_NAME = SwiftChat; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Debug; + }; + 99304CA72F743BEE00E4DDD0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + MACOSX_DEPLOYMENT_TARGET = 26.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.3s.SwiftChatUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_TARGET_NAME = SwiftChat; + XROS_DEPLOYMENT_TARGET = 26.2; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 99304C792F743BED00E4DDD0 /* Build configuration list for PBXProject "SwiftChat" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 99304C9D2F743BEE00E4DDD0 /* Debug */, + 99304C9E2F743BEE00E4DDD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 99304C9F2F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChat" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 99304CA02F743BEE00E4DDD0 /* Debug */, + 99304CA12F743BEE00E4DDD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 99304CA22F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChatTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 99304CA32F743BEE00E4DDD0 /* Debug */, + 99304CA42F743BEE00E4DDD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 99304CA52F743BEE00E4DDD0 /* Build configuration list for PBXNativeTarget "SwiftChatUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 99304CA62F743BEE00E4DDD0 /* Debug */, + 99304CA72F743BEE00E4DDD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + AA000021AAAA002100000021 /* XCRemoteSwiftPackageReference "openai-swift-fork" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/tinfoilsh/openai-swift-fork.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.0.4; + }; + }; + AA000022AAAA002200000022 /* XCRemoteSwiftPackageReference "textual" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/tinfoilsh/textual"; + requirement = { + branch = main; + kind = branch; + }; + }; + AA000023AAAA002300000023 /* XCRemoteSwiftPackageReference "SwiftMath" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/mgriebling/SwiftMath"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.7.3; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + AA000011AAAA001100000011 /* OpenAI */ = { + isa = XCSwiftPackageProductDependency; + package = AA000021AAAA002100000021 /* XCRemoteSwiftPackageReference "openai-swift-fork" */; + productName = OpenAI; + }; + AA000012AAAA001200000012 /* Textual */ = { + isa = XCSwiftPackageProductDependency; + package = AA000022AAAA002200000022 /* XCRemoteSwiftPackageReference "textual" */; + productName = Textual; + }; + AA000013AAAA001300000013 /* SwiftMath */ = { + isa = XCSwiftPackageProductDependency; + package = AA000023AAAA002300000023 /* XCRemoteSwiftPackageReference "SwiftMath" */; + productName = SwiftMath; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 99304C762F743BED00E4DDD0 /* Project object */; +} diff --git a/SwiftChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SwiftChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/SwiftChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SwiftChat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SwiftChat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..78eae86 --- /dev/null +++ b/SwiftChat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,69 @@ +{ + "originHash" : "d64b502adaec5c1be21961b075b64183f1a9f190b4aa2a70d9ac3e97223c7ebe", + "pins" : [ + { + "identity" : "openai-swift-fork", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tinfoilsh/openai-swift-fork.git", + "state" : { + "revision" : "fb076a51a97b56c3cc2ba4c9e8bcc9e88f59d53f", + "version" : "0.0.4" + } + }, + { + "identity" : "swift-concurrency-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-concurrency-extras", + "state" : { + "revision" : "5a3825302b1a0d744183200915a47b508c828e6f", + "version" : "1.3.2" + } + }, + { + "identity" : "swift-http-types", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-types", + "state" : { + "revision" : "45eb0224913ea070ec4fba17291b9e7ecf4749ca", + "version" : "1.5.1" + } + }, + { + "identity" : "swift-openapi-runtime", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-openapi-runtime", + "state" : { + "revision" : "f039fa6d6338aab5164f3d1be16281524c9a8f89", + "version" : "1.11.0" + } + }, + { + "identity" : "swiftmath", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mgriebling/SwiftMath", + "state" : { + "revision" : "fa8244ed032f4a1ade4cb0571bf87d2f1a9fd2d7", + "version" : "1.7.3" + } + }, + { + "identity" : "swiftui-math", + "kind" : "remoteSourceControl", + "location" : "https://github.com/gonzalezreal/swiftui-math", + "state" : { + "revision" : "0b5c2cfaaec8d6193db206f675048eeb5ce95f71", + "version" : "0.1.0" + } + }, + { + "identity" : "textual", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tinfoilsh/textual", + "state" : { + "branch" : "main", + "revision" : "d255c23028345314fac085685e49447b7c498772" + } + } + ], + "version" : 3 +} diff --git a/SwiftChat.xcodeproj/project.xcworkspace/xcuserdata/Sacha.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftChat.xcodeproj/project.xcworkspace/xcuserdata/Sacha.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..679cf1050ce050cdc05677d4faa049d76cfccdb0 GIT binary patch literal 27029 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 + + + + SchemeUserState + + SwiftChat.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/SwiftChat/Assets.xcassets/AccentColor.colorset/Contents.json b/SwiftChat/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/SwiftChat/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftChat/Assets.xcassets/AppIcon.appiconset/Contents.json b/SwiftChat/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..054adb3 --- /dev/null +++ b/SwiftChat/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,88 @@ +{ + "images" : [ + { + "filename" : "Icon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Icon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "Icon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftChat/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/SwiftChat/Assets.xcassets/AppIcon.appiconset/Icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf9c379372a74bd43345fda482a8279286fb8b8 GIT binary patch literal 595954 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≻t*l9sA^dx4fHNcgi|Zr2Np5 zov%;SAFC_f$zUuN%+UXB=DcRLF%UaAaW-5E|+EHzRLFNFDv)6;$@AhqH^AC^JhHF zog2F_@brhHjsoZGx~9b}B3FDnDacUpVh$V8ev~ zv)=)mH21vgez19!cy+sR^o)InkFUKbeEa$yxod@jml7pz^2_oR{*Jq-P8=LqjiZmEt`I#6FZQTjss#6``2r|+B)g}XJ>2E(* zU2)2vw{eao>yZz9y+(#CF?FZ@v3Q0)o1YW&d1vzNYrQ7VHZ!kj%v5gsv+b-w$KmaL zTzVqUm;6p&c`atmdE5K3HQf$p9@{PJ-*5ltgm9MS-|CXqsBLdJx4!wf{LFhBHS^hr z4jHQd|2pAXkf439u+fE;^~r03`&eD~WyU-aF}Nq#CDv{F?oVEWNKJaz$H>QbB|cwj z-;jAXEkgfFi`_SewqHy1Jlv1%GMl=Yb(2B+iq?g)R{8H!ex-g`-t+L(#iy21H!g5Q zzP~l$TIHMIW0TGwn_~6+IBYFIvO?kRosq{D^q%34HE0Z2cA$z|d_}LBMCk0iO$%@3 zO#XWH*{}P{q}MJNdvS(IPwR!Xc+0Yz5>sF7@~;14xcutwFY?8FoU?qMd7l=TuB_x# z-@;wJ+wrtx+8kxG(D-#NDJ(Zb{?B;aHS5Gj9^?K6KjzDdpKr|U{Vw*_((sjUTKme0 z2mD&5F(1ftINvCII&0y-qm~b>yjYg;-|suq|L5|G3UMRekAjN>z8x=NJYj!g|Bi+H zKj-WHH@=xK!TlxQe8#of--n-GoBP)mWNCVeW5?}O@8@gLJSA8U(qsMpoy_`Tld)8zg% zqvIbd)wKPKbR#laT8^1&|Gu_h(!V1d9II#iK2{WWMr7&wpKi`+HIo8ox=wB_Z!6|e z?pN&B^)fFnJfwO1k-&tVMLG3XXK5zCu>W&na@I{{?JI{*%Z2{`{rvZpJ(aHm3Tu;1 zgzM(j6fKQP-&@MF?&yZ)8$D9y)-5;wG3llQ+jbl0$ZrgimxLcrTK4vQN=MM=m2*pG zw7$@sct`iS#6R7=J`xg-0v_CET(Mu#mecUlp-mGmP5-&_w&dgcOE_*MRmZ%&yXvLl zpNBgieZ2TSrH^5uY_t5^)`>dJNU-ke;1<^T8Z-CL6rY9C81sGps;qF-vw z@_va4hZjB(Tx@2Np=XkkCe!7T|UkEk{j6eADv&? zvh%pclj`e&;ayYSc)vTW&-P;7)HROXdB*z$tOAm5@=j}SIk)@64#$K$j{hA0adKa5 znZ9rHnmgVbB^T5?|DTo|4nSd0dG6^I_ql>MsE$^B>>Yc0f|{>$*gn zHL`qb31MG+Qcb$=&0u`0s=D8okT!i?<$5ytB7c z(fD7tvS*m<3};r>uM?SGx%U({KVS1d@l>3F9pm1xUt29pnwy#D?~^oZ+j(KWr`PkQ zl1TYuoQjgXeTy56#Gj?T-}Z-Zm%3G2LVsUD8|%Z`*EBi_b-^ck}*JN@Aoj>)w+oVv%FVtukPI5 zePBD^l7jcA>aq?lU$OsOMP{nJ#R2Db51qC1pPyoD>Rqt&`48shwbKeG_isBn@62_9 z7t7vp{4}?II)8%YHTl=^#|uL=Lf9X4gAToXl^y>(>bSCJ5rc?pHp{Ql>#@s0dzZJe zUDgrS_x{|ev1w~y(3Sl)d_Rt!Qv7iKiI{%d6t}Jg`z>nE_Whl%e?cWA*tY)B=Aetw zmwq{^9-rq|e(rmkn}PP1HCvu5FSPqJrC^rT-GjJ%&_aGisZtZ8#$ZhWnao)6MH|SOyJBy>o=N{ z?TU>&c9|bOrL?N=a>FqzzsK2@!aUQWaxx?M%YFX4PvY#E+_>tp^tN-W4lenZ+@}|G zqHWhd7i$I|rpCgy3lY9ayFJ+!e1DdqT-#^NK5z9p-35Yv=a>)cZWVTlUw6Go?82WD zg$jHuzg7k&{aSj9#cE!@jOrr|1^b38#xpKl=X-UjS*^LjNbiWH!x_vKFO z5%0{td+R}(ZOc*N&+gn&F7to0ekwOR9sj*zgTK_(Pv%Q9uU`!H$$x0RVE;|u`lnNb zHZOg-`Stq!aiEpPf_ru6eu{WjSX6lXJm_#zxw;>Trsa8RD!1RQ>=b`I`(&t`t*ed& z_vN1)4EEb*Hr9W?wfIp7?~C=pJZJj;K6g9o+~cbJ*|UB3yLAlW!JEHE zmfefGH+5%V+jf>4>Mwh?8naB4&uRLs3efX@v1>Ux3Q}z>qhulS< zy*!_B=ZVCEuS;GrR{$6 zO|uxLusY70)-z2a_8X6$^!7I%<@V>_C+qd7hx?r>SX21kYJbk&rh*$kGis*EPLfSu z@NKP9_qp_U&n-h{lplGKe#1uobn+)Yw|7UMn-`@f@G#Y;_11Ykd~n<2mCaL|Ret^- zw{3R*C-Ru{bNfGOZ56BCU+9vo2mmv7m(ti7Y74CP{Eg4Q3G4R=Za43Dbbh;b+ zMISYXndM<+( zURx8F`|8Wu?FF{)ysO39PBfgEr)kx{Zf#omTOXqx$y<&uW|JwDlU6=FrSVerlXD9~ zYJcUWxQJh!oK$Y|A}8mWg|ivUtJ(EW%U>8e#@nXP>VG+1>Bkr2)hjm?J@sPlo+FXh z#`Sk!+F7ZsH8+iFqYup}oaK|z&e(s}zB#X_`jC6sl7_lX#RpEMf4wJ$bX-UxnO^!)u2vE03_xAJE9UQK!{A#wGeIG5Mu zTOa#OBF_K%@G|Cu(oCi)iV0bqGi((zKiS1fACNrvr2OB^>-KMMdC&h@`^;KpiGXVV z&AnU~@0$PgX+3E!vadX?xBE=>#i^O8 zW!2vIUc_6SVo-QIe-6Xn`ZeViA}M+ocQOjbA24%Xv9Cbr;2W*GDlcLpTxV;9I{cJo z{otxuq&=7EztSFu|Cg)(SGxZ8$W&vKTXI~QO z)*k_4KgAaxF6G*xc~tSwo<#~?Go*8$T(n)t{r>Lf?e1syTff^CZ@ccl+K-UybwSaK zp9m}vW}kA;FZBD#L(9%T519A!NYvb8@1+CQI#m{BH<|sI%aF&ds(fpM%wbYJ-~q}KL!g-orO>#0XR&-Rz)rZIFEu2p{NTvI-OzsNCx z?Z;LBRIzM}x9iT&JQ8CpG4srnlSK<|vvc$;GqU1xxR|Z}_<)6WiPZlXTld|43m3QC zd$?NU?XRLnN27BuGhN$Mn;m3gq~e8dIXe6CHRWeq=_&PCd#P_?yL^qtVbjG;ebN$h z(pv?iw{n>D9SwAF*U<=X%;x{#%*S--@QFKbBD%g^37Aq>aqiBwx7>?UUQAxEDtztr z+WmdE@-8m3a(1w0*>=+>cjwDpb6#JJns#QTlZEkZ|0n!AxlDRr_=s649k~A1v&;VP z+3ct9SdEV@c(82$kB$3NWGnoN?kaBIVo=j;ue0a)<4KG8p7x!pd2{0Yg~F%nX9gad zrX$KCd?2X8yxv z?LGfX#m*SJ$=izDEnk1Kc=hYcH~((kWp94Sbfxn5oJAfN_v%c_S@r4j`@_GocFE5F zS+4td%CTQt`ij=?|MyGx@bx9f)7`B08ryAC`>-Xto$Y2r%7NLhzZB4( zuh{Lo?@gA)ix;ouX%5W}TX|fr+Gp)GKBkr24u1m=I+#Z{%wc{~^Y9JttH~do-@ce) zcirlOUt^$FOvWCSkjRE?xeS|&TYLO%_j<*<@3_$O@uYhAis$y_)?a&EXRprPe#a$u zbB42NzTH}0_nWc*bi&_zwsoJ4*l6OAeD1Q%dPz(F8s{5#|BKmg{2rTp#_bK~tozH) zW=*(yBAsi-)^k^Ho{))OyXC(Qx5{GA-F4gS<=ExV7JT1t;TR?9D5-m6VgS{{Gm%+y2z^3HdYs<#mX^*niYY3^epx+AqKK&Do0CO6nRXZLQb@wB6=#tyN|} z&>ieJC zss+a{Pqus-EmCp)wsoGrSf^Q=(ei8DdqQtH8n*K+J#%Q;_M=VSVQ zvtn=SE6elu+-!@Fuf1XxoqxcbcZ-qYit1OF?S&qdDtJG)C^=Ji!IUfHfxxNv|7#R& z;{P2|I~Yl7v^Vk9BVDD?K7?ZKHufT z-Yr?0Z?0QuYfF@_e|m~X>A6LN;UuHv<8HOdhc?~i5I8)2#Zuc%3g2aKa6NQAdMs@H z%nO45j$fJozRDxE^s)RECZiu;l+)j~wy$3r^zW91?6o$|TDN2Sv%g)M`8RBdwedIA zO?opKic7?98*jTCcJ{j4KAS0der=E2q;n1&TW%4ck?bJ-C9G}3MxD&xU+kp6{aW+) zmFe0SYOdcjyKLr2etV|T^zOLC)4ndH{lWjUw>Teki8(1?8d$N5d0wIWR@OVhj6q8# zEPf}l(JY*G%ejNaN9)4c)lLLX{HnZ6@Ve%OV|f85uJ1_cIe5-(>zU|dF2zDOL`<(Y z);^x0Xt8$Nue*Y|x>8Zb1)FXw_5?SczkB}T${%XC7fhY$@Z!-K#+U7{gm>KJcq21G zO8m)zhg&7iK08p|HeY>yotN&6?R}Pg8_TX{)xJKgob^>Am8Za#&Di|0%7e!&%j_DK z&E@<&Q_kL3r+S4C!(R6--l57X8WtQ}`)^~>(X86V2b`RXORA4}m(@- zrL$K5&JYz{vNK&$>Q3&~iBhk03tOifSKjDUVcYp&LbjYhtoN>(iS`f87SIhOv%guh#2jFMS?e!@<`~8AUP4X-R#27Q7GwHV~W*NEOf3`w>e$>)`CEuH0_5Uwkzi-z2hhbOdocH*=`-`ATH21coD^xlKni!NHVHXb|Hza*?%yM-s!h)eU8 z-&cN(-ue3u9>hW;r`tq~-Z}6?t&wJ`?@6KzpTzK5d+}b+-*xW|RODC3T3nuqJ z5$Ta~p2hP}r&y_2kK^uz@6RsTtWr$a#B$^3!Q`vQzG*yk`flL2BZ1wq;y5^f3B2Bys4>}C?9bUDnIaaplZ)lL`Lsmm^# zEd8i>oZrG(A)2#DA?5X!v(uzsooR5*TK;x>NObtiLz&#G}JC z?^CR1{5*A5$nVvDd*)-E7EgOVWzCs=&~Qc9W4}Np-NKkBx6P0L&%IyzYt3adyW8iU zvHZADAIr}0<-dq}-YdT~m*4f*|5RchzsJm**T=+_6#YEANku#SLFQnO?`o>2Q7#KkmQ%TfEHuN=MCOTTPeA zrdk4~x~|{qLBx794kD zmi!hxGf_XV+UVS|YelBj#qW3PzVo}v-;?QDkqF1r47D`lDS%Ovyp+K}3} z3=+|+&mZ+Rv^{3K{B5>6GwWqdE!$dh?!^Z#vJ(=elV5iR#3j%BI6?vrRwg@?7^wcezlyXHHhW^1hh|WnDg%W?JR0 zx%BsI%j6v&?bdPMn0U~`ZEZ^Fjyp5=&Ckwgl;wSr@KIiiZqn`@g;pD! zo94(a{#AX_>p_OGyre>vl$@&bJQ=kw7k2rq_*wiseWsk)CJVMD>zHbt`B+|aTu%RE zD#KMKeD;DwxZU3^Cs`IIvwpuQU$Tv?h4;DHLCExxByZ6i;?L z%fy#c&Phyo&2e_li!#=~_KS8V?wS=~%@OwM7i0CCe=%DZpX0fax!d>akLR1Z)w*|` z)~WbEGjj81fBlKkEK>{@9G`x1eKyDL*Dqbq6(1|T_)mO0uQku7znyVU<-IrkasSbC z#bCk3TUTmt%U`x!%VdA8Qsa2wj4++QKR=&2oWAFGq_(cQmz$+r&Etv<{d1kGwlRRt z%Px%O_|`5j^I@s;_AmO}OYi^q{`~fr_$Np1C3Wjw`SkSk?N_^|F&}7kxXP}-@5iHg zmJC*g=YkD{KNszmmilnHHIZxIVY37E0XuX9W;xbhZv1!3_F-kB`$X-o9Xl_6)R{GX z>5t!LUGYk%I{xPbY<&C0@q+xw1X zGf!MM@pjqo^cAh2EqD2!zZ3Y@#~@AUro^q7#j_YwA~OF>TKN7^@>vV_i!bl$d{`6q zdexsP&+^Wndu=$&>+2O}>E&N`7lzE(dL{Xin}Xz~lp8)TqS=k*jjOZz6@Vx0KAKWEc~LaT*|8-*Q}wwti;GoJVSx!mpz`%iO3x#ea11Rb3( zqnvc&=D#(9y62j8-o{w#9cwFn)@s@1aBf&K4;@4UKyv-7a$|4F_E;nr*##!I$_{rY|J;ZC(|r)!h$8M3m-rng6@AK1IH;n08o z^>Iski>>MoZ5Pm~ub8>>-o=echBX9Z?jI;DW*GzNjDb>`{*{jX=5qREe`yk zxbN+u{$00MOP_wSHdNx>;q%O0FOM=d-o0@6G4K6R)M)eV+Mj{nc9$(fND7 zMl&zmt}*q#ZrHXq9y8(8r6=q~uW#-X?_76!YbDF&Ip51KUCn%xUBb2hh#Rj#u4M1) zq~^S>)xTm_eT#0Me&2|ded|Yax9v<4&LQ8_&d>hn-q*}2+pz2nr=60bTk(vAiZ6e? z^Y?nLzWjj9s&n~s^lOeZ*qLu-KQpyH=|_gmi&y_1D^Jdvr`MG6vQdV0rt{&R(@z!m zuwA*o+UsZa?ERVky6KBKf4vqw74^Yb{Yn0-ay{1{yfU*-I$W$a z+VgW8bDheo_t$hboMS4xCNaIaOw8k;<1OYVEEBeruQEOGyI)poifO_ftu1=Lo_oc{ z6wE7AT659eU9R>^;MTDJD(>BuS0~20dn6|wwvR40`t$MwpRDhRJ%W!I6qX-cwLE-v z=~vU{E$@<(S6}h|mzX|Ra>LH5Y3Bq4(p!7KA$TZaK(?SwbdfYb&AOMnya-h@B2>Xy;G-H-v@60``z}{Mp11Zi>?Kir`CkzZUrLx-S*1vx{&znX55Sh3%`#Z<Top)wyKPWK?lfIJ2Wp{9i@yFG^VvLg0LS$pNU!Ln>9bZ>aQWujh zS)gd<)hxdF{*fKN_RD_EKPRwYOHI{^*67OlFB^I*|Mdy|G>v(0#!@x;_hh>>5gJ+Z zVl~~{RPGj}M_rnj*JYH>wykqb`d5Y}4GSXm7sZ}EzOp~;qs?;Jv+c)}zVcM8F}q~z z^!!_|Vpg}jAJ0o=p_zjA=^^p*67yc3xL5vKxGQ;4>K*AlpKCNXkzwMd8YOmAR z{rGpb6+|fS`dVE!r?n{HhUbBTXQy`7+zrbUSNO9xVfx!EpXcq3$lZSS7@OQ#U#_1& zGe2(Qs$ab$O+ZCs)lWg=Z=7K}{vTcV@L!MHbK_l$bogekec<-$@|QNTNqgfrl@^}+ z`@81aBgOOeou|$onR78umO+FTAIB5}ZpA!b{=4p5@x0`FkxP}=OJ_9ScS(A=qG9E+eC3(h z*FTk3mBjBh{5SXa^OyOPkNL38t()JI6UJ=0=)L`?FQ+Bw-$8=y6WCX%xG`V72ms zk4pV6|1)Pjb7SkhuETj~$=ma$kxYBSp4cq7f8A$I;QE@6pU(s~>Y7DQ*O(dB_UJ{M z*QYk$IqaTZ_V1&sZCWaM(&r!f(Nr#S;LZO(fkNMROga;4ByMrL;hwPieCvG?Yz^B( z($@Vkh}#i=i+{_qYnrdpuN>*I-JSmTc2!M{;nwH!C-#f{6nBhqmS_BbpnlIaCuf$h zi@y6`uFt5jezT!@*Y9_`vy~N3G75bAb*_A0aP4F1`vrSeY<+mGPEqvZ-A`8->ZBes z{=3~DGCh~;!u^Cx@iVW-Tr=LKK1syK@L8>ytk`cZ#1mYw}S)0$;-?erAb_*{P- zFR?GytXR#f-T7_y?zf`Li#8h`KKA`bl-3os>q{p(o_E`xZLl`h+g zKki#6>hcNRpX&75aOJbtA=TeI8ZE*!CMQff_gmU|%DpS@JVwhM-9(5mYxcVE!P4z=6LDO zmeOKkYI?lr`@aRwD+9mEPdOWqeI-7CPq+Q+VcF(gkDHjZ%t|+&+LSM_Mnu5CgFlla z)BpR|`#V3+JYV%~PWIcsb?<-ARdd)>Zc+38_q)BsaA5$ z`jrQZd4D-y6yUe@cC^}4wjyJO=oEuno&GZmPi!-O*Dfr$u;QV-{joa?i`IVqynVlZ z(Osp#^_oxn?i!zrpZw=4)0519XYc=C_w3i~@NZA&9sjZKvF!U7b&t*K9-nZHoy7Fu zd)@o*yX1dPl(#HOjh`$1>2%tk&r>55HqXypRUe~0f6ZKO4vpz{<;(uf{}n%N!Sdw4 z*A=Y3i8XD$^(y4Zd7VAXS40|jd##)rlfmM)RqfcCLXmvMXXobqzu9zd+tKc#2=>Goys7sF`pVY7ZoRGdf;_YL(rav1J4)5ykc0BmK>hJ#> z{j)Qq4@66{eq(Tda%ksfzFA8zBxISL6Kp7ba8q~n>aYV}eD$vjTJ#-lmY6TR@Wcvl zCj&xOEPVutfh=1i$k36lHxY#ds8ofCN% z=pE%_@MgGwkR{;^N6hg9^*eO6nXjGtt0A1HecWt@>O=1N|80uR8X6l7x9|Hd()LYu z?Z+0@b2l2Q8>a5f%GEwKb@Oxc-O}s!pSxXox_jTo>Z7Og-o2|h*?YGzT%f=%WobOa zr;mTzul+sqPU76;H);WIg`>jMeEw_V zo#qol7oMwrF>QOklu2LP|CeQN_M7;yKU;NU-uzan_xW`EvSz)^w!V3MKhsy$Z>)WI zD(>sQ@B8;x|9u@_|HMf=jNys+k?@{d-|jrO`+j0-t?u0mT)QJ@R9b1M1^+d@G2_?# zZyl>w_jHL`oZYW&{hv?TT&g<#_w>S$A4TU5>=wO~{&xOmNd~4VT>|!Y|5n)_P`mAP zjY0PYf6dRF^7pm#-@p5NBK^*xzR!O5%d^)-p5s=&Q*S)s+={;&IA(uHR*>JnUi!lA zdr2XGE^nXnu5ael`rn8A%I}^OmRl*$A<+1{#9*!5=j)f-L ze|fes{%~YGZo1&L@m{&cKAqn|atBtePbjnDH)G~G$kHys{o{A`{7D|m9U5&H7@YpP z^Q`Xnw&phvu0_A*E@t>}ylD|*!fl>2oHGu6Jy^xy_{6LJ*OW#jMa_1n#Km$+F>G?0 z;z>V`>OSjxWBA=*T9A|Bj(F)O{yA(9HeXtMcFN+l^Bv!Fb!ewOD!>EYQhS$S$*BL)}(xuH6q5fR( z*vA9U3>DO#-3`~-eZWpcUGB!ETYbN6t}2KyhgBu=XmltrvFoj$eTk8)PpF^q?f$1< zKJVTgU+MjQQuO|du`DYbI2rn$=ic9(~C~IN_DqQ39%K zuRol1BT9_ewLR$kGHn}D*IROe+1{+LOu4c()a86 z_yj)iGAv!Te;5B=_CHB-W%dkm4-8`tY-7n}GGe;x^PX+1Xp`xuHOw}wx?xOqFMd`( z`#fjy{>?mB{yzzxeb@fZ|DEs7|9d2yH}Tl4uvvCjcrVl!6dqr5|4e7!iofEH#^x88 z>g%?Mo?<$%sC2Q`{V#u{Wxq5_)jm4HS+C;y%-!1cb-QXwdH0o?Czb9yE%v7zyl2L1 zv6e~awm!pGcJb|Rf0~`K|F6+u}d%)UK(myFT*!FxnZ%3b3@qDn9L66&ucxz{eop9NzT%>iqyVhsYFu z*M|JJ_czoXWNc+l61ORQmh*k@{hwX$Ld)lEGcC{Ezi+1Mr0S+`BE?TKkM+M}spS7$ zwZ}Gf-qetWI$jA=G5@CJ96LVm-MQ|QK&rgZ@7Bq?LlvI<4K3u1GFSVWtf7)5n=zNo zm{EE`?_%wwoyV`fk>1)@fBaSc)TpgW3)6It)X9~~rg6@HGT-xG=5+^KW&ZzWC+ow* z|IIcR+x)x!-rVWscJHOP-z|&&{?fnxmj|m{B;$u*`>(-w^Zz}|ms>e$`Ts{%#$kWo zdcWOJ7JIMF=Bm8@?iWv2{{J~CIweoH=B_g-%5FFZqE;? zU~yyKCU{jo^NWIpv;yM^_6<&}>}uE*ZW`?}ezo)Sy4`cUxbN5fIl5UfVL^-RudkmO zIGAeOH|)B*S653$VC{Yl_iqA)_a`3fiu5x-ZN*if-&HByT3;@{AV$oW^?mYO!3zGs zkL7D)qRLqJeEj~Wm3!X*+VfToPx7~fay2q+VY&Tv#@4X!5}J{hSK7=d4VW1a{e82k z{q*GrT2+M-ww{mqRX6GF$E9X&QeS>5blY5J5leNkv|l%4LQwO{&r5Vpbn)3ves`W{ zdTGkU7mQj{**xyHKWBb@=xU+rrGKUg95-qX3Of{TZPa1juuuFbe}fIb5raQF|+jMU5ziD&-s0>LxBDK^Jf3*_z&#cdi>zNpFbAoN|)_#PJS&Nm;YD2oH3@m zf+fsq-ic)P8{cEk>wHL!Uwv9NwYiC@Y7T?8oNkm+YQt{r9h1(9crH8g=?0^jn|l6^ zb=5y*@88*b>kdm^#W~ZZb6qDUznP|LptHt5U|O-j9`D0R^S>`D<4ZLc)U?>dq+rZB zWtD+3-zHYQV>aKESfymw^#&xcWoP}FJN@?iry^ztHoQAiwPNM}7ecEvmwcNjq&LM< zS2;1`%L%X6p9$YDU0;1m@|3{W`zrOmpRTLa*VUf5f7mwvpT7Oy%l3EwPXGTY{#pEt zbrzeL9&E4wy?wX&{-0;vS3UXAecb%r#_GOJntUx^>V*3zi7$S(>~(B`-m@8&wgy-4 z2h3akPu@jz-ZOcXdzDvytbg~5+xy%Ft+r`rL)lusguazsYj91AQDgNXEguI-{dXOE z;<>lqIc0oec>w2IB{{l6`j*gF58NT>w`!0u;i?CG@)x*hkOS2`N3*(bBh z@`2qKK~Z*@^>_Fc?GyHKXLLx(_gI^sw$T^AL@@_s?+TF zYrBy#lC_6(gO4loU4?|R%b&{bKe_b4U4}bJ=Moy?!Z&`~{53@AMaLPI62%9fr!HtJ zyC27?^z*`W`At4TDXfWen+us;neMPYXnVlLXruV-QkSOA8~fggnO+w^-~ z{_e%QA8&hJ9iQ-a@$27vkJ`n5Q4pIoIq~fE;e{Puox5R02zvrIzh`NL*rjba5ehK6$4w9#y9p)4l)q zE_S=$y;J{d<)r`We?ETg+JEfX=c)hR+P<&!|2}Q|o~Is1W$Yv-E%cv8vHj|`qGvEGhdnW{3^TQGw0d;>+gPD-qZIpR+~L0<_&99 z-==T!7acYqO89f<#+w(xB|Gzrg%l=#xU&7|YNJN6A2$!A@qG~&c_5JS|6?$JS^aPR z|5s|?dH4Uir+)uOtZ>fVL$5DBW)$t|>Hks@ASI%$xXxX`US|89s_y31+#c7`}z!mI9HzrW$bCPuxB?*jiV)8sp#$iPrq z|L@R}g|{6V0xtZlRe56-`1^5`>&xe+&vjxSZo1l^-eRP{ELhW)I&a!bhB>DW^4%}- z&z(_V-+O>-$@GKf>lc3rs@$ReV18o&L&eXR$L~j7RA}gX&Uhp3_luyQ;APpVjQ3-2 zGW7{v+4ke~>km4PpVv!p^1ZoXU*sJ4_iaqvw~Vhl|Cat?+Qr^;TrnFcQ1r8=$Z@`WusG$rL*QF9v?4h*yQn8qSJd5jJFUTG;S=+Qf&7hRoY? zavxS)NitZtb{)fodC80n6Iq#RAHQPg*?*L?VP4+i6#fQo)-9CIJt;{3aIQG%QT&xU{`7LnKX z&sQ=0y>V~NtytSzJ9w8&Q}kW3SuczA(3gML>nu;+pZsU}g87eE@BjDprrv+OOYWQ3 zSN?d|zFRtf&&JB*a&gZliZI;&;(Pzf!bz*^uQ+{s7&Tw2pf9lgV%#a&$5LA!cBib0 z|7-DHRobrXqmle<`QZQlpWnYO|Lf@?Bb?Fp`@Dpb?Cg@ zmz-pFk+lpjf3qyu@I#qFMrTukzypS_bvGx-FZ$X2ioc-!#e0q5YuEoi+RR^{FT?PA z%eBU;eQ%z&F5SSV#3o-WqkSST;Kifb@6rDi*%*_!8#o-a)f-bIUL^9S$F$v&uk$!P z)ig4s_}pYe1-XM9*{r6F#db#~o#+xgH*@1J);ooIO)tNuO8knwtA3$GAou?CZ;6`e zXE@m;dy0OpyY@MoFYT#wSX1lyz4Pp+s8lT~s4r-3U0kT8Z{VJ|lz$uRHOA*Z8nJDV8aEDAFp{Bv$^k-Trd~cli2_QH%GH@D`=|)1g)KO_KfD$$&xIU`==%; zUl+|i?9%nu{5W5MtLZbpmC?zjC+9z|KBMygr*u*Yug{OgZ>Og#{mbfg{(7%s>Ar&& z|5J;lqrX^8VtT-vU*Y`SdjDtZ?rF85>t?fhe13m5{r-~I$vu5j8*~0PWxUJP@V2tP zYOlQN#g+e;|5UTB-G7UJ3V+yp&r*}uIgBgT&fmmw{rmOn91h#U?r-x8D8DHd@t5_9 z>%pl^Umv=kFRA}|@b~WiyWd&2AF{sjzV`P+>z*w&9FLAS)agY@uP8XJRxthIM8VEK zt!^LN_5Xb3dJ^7XJFoQgpSO%U3j!QcN;Fs)oE}JBSpH(OZOQc@mbj9r?SJ>BUXR#P zmsEDe`@?x=M~2Lw#~D}Kz5BSOj`hjo-+f!9m3F$cFF!Z8xLYGgxart@Mu#7-v>!w= zR9q2G2%LE3@KJ^4Kev=-zIZ#2pYIK0)2lE^1t~k-Z#CO;dh<_*+JDeLdoOY3@<)j) zRQL_ztv3Ci{62QmfzEZGG!NW;eqqHX1&5ly|JEF=o74U4^RI-PL1`}gkN@bfoG8K0 z`ek!2)3Jja45D|QP5x?nz3UM}N|@X0z3qi=nkTkgNK-2i=(BuQs#ktp^g5#rcP#6Z z=jU77%UVx21Tk(peSN_W28Zw-2KoF;fA;3TnQ!;KkU1wV=SO9V^#((&e(!AugqnG7 z)t)(0n24c|ZeeQ}WwE1S$2`*6LU)7)>jzTG2sAy0R8a#7;G?RTr&zZU49aNp0z zeRuwIll1gRv)O;|Pu2Qrcyhk;%$iC2voFlP9y8BY_}|R+EGYD%O7U-En)cK|No_Z>Hlx{|J`oouD8;g!@B1-?@~YS!_&@wy5Cin{`%gJ%RXPv zS54d=wI?jw{_B5}|HuBS@85PUK4SB+mcYF$HaA%2 zzT_}N@0ow(-c9%4+O3(PmQnxaANy|mpR@Z*`fbY=GH;cimMg>XbHRP)Cx<8P-rp^D z^Zujj{SB$?Z12K*oNA8C>VMs~UU@^*$*=n|6XdVdMg3rW(D>kH80&ZE3APO)JH;5@ zq-5Fu{r*yzKg<4m>W}A#o%$K-dDKpvpC%UI#T=|)QG9TU5XUSrujmUuPug6#(Q@8y z?blMTJudB3*VtU`8_)i??9ZrFMUt{QGuuq(+-&_FaAYjzjk{q zUU0oQP_b~Lq0X9}{aX<~nge*MqW;(C8ph{xUJ zTbY^owMn+=Vx<0r#dgjy_E+WSP1)Fau1eDHul<%+alh^yo_qPv?x@fD-&RINwAy$G zh&)hazIcr*G`i~b#dFt|8@f8i>1X*b$unlioA#am|9k(^`d`<-f3N$_u+E~)F}wBa z&3%WK%WJ+hh+oxEr)DzWs`Qldvik*(Qa+mSY1!5O>@A8BVPMc)@{+khI^eti9=Y?I zHs?;2T+#MaUL=$4(``Ney-v#<62m)h^-m5^SaJW;``ORW-z;8n*6{l8A2ntAjS0Tb zr=Q7RTi_6X`OiguOOE-Mw5R>mj$D+yr7iRACy%u5?>Ak;%5t^8E>zw>kpZ5vCjH=7eDjnb6@z?+~oJlAIR7;XXCHMDU3hwgfI4C)2KP~ zeF59Y#J|%&d3Y__^}c&{lk)Z#%Qdk`=l80f(yc~%M)0H|lGOSn-xQ&th-m)bMJuYHQ%?}giD6guIv|k-I?KuB| z(gOd6^L2rFffF~pF=Qz?5X#79ukmloHTfTxrbmd~;wxuv{>2_PO@uMKwv16@uYfmW z=|x?Ro6P%uN9Vtv_nB9nYjcLj+x+hv44qFG*ct>RupL==KzjS3?Rkv3Gb?kS7XRBl zr93P(^~rhW_vVRv9^2aJU3hN0|L%WfIj7YYfwR?qrdxa~y}zZVv&=;NuiZ)eaPNPS zIV{Wm$rrQl+9a`Ej&sW2js3N2s*h^NZM-4yvyc7w6jr`HSI$YUHTu0;x8U|2Z>Ng6 zvJXEMS>?{jJKFxOT|Y2}e|7Sz`j0ObH&4%h`8;yJ|6hOIA143To%_{qbN%tOr8n3o zsqMZc@z#$0OQPhYr`(lGC$?8FU9Nh0(~|$oO>K^C@0)&5bm6zFn!mc1axLJ#<{NM_ zSf*j0?uHA~|9qZdzoDe|Y3Jv=@%29@-?jhq-hX$)-saEWINmMGJr*7DM|slzreBT! z_|qC11s2QRFS+cSw{`!+Ht8P2gn*m6pWTeN-Cz{T5k2_7Df0hyfrhj5ikI);JrO^@ ze&+dkf`0@<=kNQ&b1A)$N$=L*Y0G7&)m^;3{rmRn`E^XqOW(cOXyWz&+ z&z1JVB55<_wx4>m{;&FvlQ~5bo8#5RL?N;=5^xc|%JIlL*?T_RYnTBV* z7r!h#>-df9@BSUUF4jwH6n-nZ-(SDhFCmttqI`m;FZ?ry)g03`d#;3Uq7$>Hv0zejAD+s>qkU2x)@#F zntQCxOYUh>y11bBYUO;Hf{zSa=jCyT=l;{JE~&rtsqh4=3)2>z{TX75KeYemyT+>d zZ<~08{JLB5Cp?NYBQ^%lxF5oyapHbl{zvymr;}G7TUBVzP<-n#K5p#cZ z&nsQps3|6}kl}%>qKRPTfk+0AgE!g#7}wWt2o2LR~Mf;D)WuY|<&E3}X z?lN5VFJ1I!-I`RJcjo^#OYeIBbKCS%{o0eb@hr}xKeF1W$HBn-9|;QaoK`D^YTF7ti=-}B$hC;L|`|F2#9c>k8QF_(^)-8 zbhq^S*P?5CK$8=9Qh&~||8=o{+1a;VnXit`vbZ95R_a6~zlHbWIqT))OCC$zTlvp$ z|Js|EvtRw6C1-Ih`0^j=+h6AQeLZef(--z{uA$eg{cAVa%RSNjV;9=Qvd^qGB>QAg z%D-v5x_+tJxE1I!PiT8`w$_|;#s&qw^6&M(8sFvHmDJ0hjTdu>I1+d+Z{t7h+WU=) zf&NS!N1Gz==kNR)*8fPK_5HNQ90raly4rSedK%mPw}xN(a&S{eN$rZ`e?R#?Xm@J7 z_>1$OrbzQMe}T>2JdD%YWfXk$7&#ua?=rBGkV+A`P<-U`h3ArX_cpy_UZD6QTK0lB z~|-@gPUo>%Ly zg}jwAOi^0!O^ku(pq)c4i&uzD3)8LNBE?^eSL8b_obWp~k7whv*M`$-jL!*Oh!qT& zpr@H}b6%;C&bJ@?+9H^yr7|2prp2TwRk6L$GHro)qmKTqq_#~7OOL!$;6Cu{t`S?q z+(|c?ytB*BHJCMVF3Q=#)nM3Q>NCIY$B*DnhS+mmM>!oLe{^TC7YH8s_(Hh9v8Oq3 z{UuHv6;!2FS^&z77pJ;z>K z_+F*n@6+=@f$J*u^>0t!Z(sZUU|NZ!eZx|IwF8Mfm+R_3-OX)$Ec?E~{d@NQZ`s^2 zm8trYw|^XK{e1NGTK1$nMk_8Y`_(S}{>uN2DQ!&0{#06=-Oux9{kvb%dAo8|{;!DV zVqAXbcYS7Yi8mjsQS5V#t9{dC9UR4;r|{0z)p=h1aQ&>-D7LN4yLzjB{qmNb|KrNx zyZ`^Z{=LgxuJ+PxxBn%~H$F(41t_lmqbI?%;o0o{_VdpDkJ?zi_m7_Ty)~1MeK^#3 zr8XcgCpy43VAj-a=b3+qp0anaS~Q*ci?-D+oj=vLEy6GT6jfzo=4x|FxPRb7#pBoPi4K!ETQvJJHBqu?~ms7?%&VrW;|ds5y)x0Z_GBO+EHZRzkBMhjE@SO zXw=OAAXaA^gm|KqvxX4p@!IJ*C*`Tu3VzsCRn zy7PC#``$Vr}Phz~j_R(ej2mE1-9jxqZO4912?{oCPpBOdI|aTR;v<8Y^oDPgfO>)-p2?@rWx)w=6FgZ{0l zi*J0k+r;Ulc;Gqng{~Y{ma~yJ6*l;Mh+}7dW1Zvn~LUn}Cj{_XVJ^zrRu=8U~h4A(`9S?VtOrNJ%{GQW)7r&!{_ zq`&*$Fltn)JK8;$zo8K%_N9vH2*1Zh2cxsnc}zvVjIY`LZpeGb7!k~2$GL#-!TuCS zhVV7An+`m-+R3T0b-`|q1iq%)fFN$6AI1ub|0anx++eobyuzcvT~&i=Vqx;~>L(l5 zS135hu0Ce=z^0{$;q~O3>_>7A+z+k(m%sn{(!1ODe=7@4`?B52o8^@E7r{rJS{2Jg zd?lY8vy<)$c`KfK%kk%@&1y^4c`9P!)r}4RmKR$mDt>3cweckunySMLs zo6CK7%Lb+go9F+{DSvfkWh>X-BJoUNen#u*wO4vC#80`J&=V=Y`D)&({j3(j|J5Cj z+sUOW&wF-1y#8^{w#yO&$O0zixb|-9Pthe4=AJ!|vvW3bCW|?U(<_ei4_d5&WLN z@8-As$$I|tY;L+gJHEBL+HLoCtHiz64{H1iVOSu$d-gScwuU>;?|*8}f17u!vWY+P z<4Y-rDt)Fu4|i@`>)Rmh!Jo0LmOW>|x8~jrss9+X6PTAQNR?rGcW|%ieYx)60eu4g z4>UjMDC}wKVdgu>ajPKZs83G<-v;rLZ#>5;<^P^=+&D{NlxmF^KB zBleHsQl-w5KF8~=YkF49WHP*W@p|IR{Hc0DYA+&-Ze~osA@K92$-Y;{JJq**6k3)3 z>UdYO$m2u%+8!NSwv+YI>c*J$JDOB&kJd~yV#t|p%B|AzP1gCBea-hwN7XhXwiB)i zsj`JUFSs7xWP7u3s@*XL2fJ?q8ay7)&F2hZefbY%x_Aj_x zQ~oiqb7k6ZDPUOlrImjh z!_=8uABDVQWc(0qzN*f5w~=2L^Cqz${pY7$|F?swq0}(0Ice*axB0QcA!%{OYaf-b zxWYTrX#VNcql>tnn!H{idZzND@2B^mNwVjAwg=b#%a;Ey`?m7fx_@_`+g+b)S6kI~ zC;0xx2}}%8Su6}83A43b;{$>prP}@bu-SZvJJsJbEw~@=#JFt2 z<(aSMf8U)`85A95AH3z|@H*c zk^G+dtbCI$gY|*NOV8d$>lNPETHedcQ2)o5f17yY?+biOUj-Z3Pf<+Rxj(;)C7XL4 zV?*Oo`TD{+mfhdkW0-X^7MZ5)Pw~EBEMFmDsHI=x(%>A~&8?s>_V3pJeGyNk7f3rk z57@_$@>+PlLw3IJa#oxBlNqygpKw1&+yCRq_BED4OP^;u?ta9ragCu$@%MT018*u8 zgyx*-+R=aC@ROy-f?K9*>?2r{A{7$mDcuxr?Y!=v>ZqaF_T?9Y>*G^BQIdl1IHKzJ z8m;?sQ^?4DN9>&1Lo>L7R$P>2dVXt4W2O4Jbuu#hXXG5_Veyq|T2yn%_Gi`9)9GTf z7qe7-`N48VE+DeZai{(}mkl=h(bWfz9jvk|do$y3UCK_2ypZ}WLUsSGM8p&BG9@YP zxc@3kgE?$rtwF#(rteG|3_8;oW>{-~6K5A;w3v1_rC%<&j7j_O7LE-2Akn6upD#4? z|GX7j%Gz+YhWU^7jPloJ-@cWH9u&~kKDcSC@IlMMv-|fv|Mu?o`+a+(W7(|_Kde2v z?8SGpbdP|KQ*__IIV>3Q_&R&6U4M33!p}dNAyrYgmG>$$KSkL{eJJ~Q@fO&J8#G;YFQThVa2TT3*E}ff|vh#`q}bpy{JaUtopyv zKVDb=z4%IHq2Pr?k3imqy1xalUkPng*f*>F+AWzEtL~;{cL(g2PE9>%U-wIK@vr(l z)ju|>#~QSS$`}3kx6gH{xwp-$Qu%7`72CIDht)(pu+_K`RsNVe{()Gz%je_9`T6;3 z4*B=bdhr)L=we`hx8(nBrvnZw&EMaaSAY0f?%Hs1uHygd2KzVs3;s-gwcepIqd(~T zT=V$k7k&|Xx>fJG9*9LY26LQx!^rx&IaJtPgPG&kqJHJ2w<7{<7}FywSj||k97jC)4ZuBELU^?w_mbL*JYUXtl0QO(qpp#omV^0M<4AwX0$zb1;-*Mmt;?cPSf+h zitEMKy!kwP4dWkGXNF*|u#z1I7wie$U3k83%Kv{KA77sk$-rID`10Xx`LEX82i6@n zUGmpBAfcXLg3&B2fiHnqJNv+p%ao+@56R(Ne_F_|NN3HRn2N?6<7jcs_eq{kQq@+yAA$u3ENs`?UkR=I)%wW4v2$+j z-`|VpRs36|z{sKfku$h`GyPR!zn^!Btxx(6Y;y#njI37j(E%YzDoFQs(@qd>1 zYw?1x|MF&h=U5zmPhPsMe51y}|6AIWSQBoit=%70c)&DT+x6Hb^;g?-Y|~Pt=ew6)tj*n#l(0BOm|?~7U&Y+}k8>O7HAddq zyG=-#VZNv}LmorM=eEZ3CCXn+TDQHccw4l6pWg?W9;Qp5mS)`8_J&dW+8cMd`Xi4y zD;D^rh;7(kAbKEfQ;$*3Is<9OM-m32kM{o(-(GsZ>igVdDhkD?MBOs?J6mrJZ!6uG z!O~sLFm=n1`XBlMABDazU@;8KN_#Hwr9b+EadShldUTkvs{IY-o&P$NFH88YDzf-} z)bGLeS-k?!`Pn=7e1CCV<-d*e)A=*hFaNNwKK4Jo{#*L)`#*Z`&)Dq=D#xB%-@m!{ z@7w(O(KnXH8gw5E%HQ)i^?K8n8Oti_W-t47Jkuojf4cWalmEx69<1K~@7N``R7Wi) zgQen$g^UG}=RfV9y?rfr?anmU+&<@_QMp?~?#W2rvvE5a!q91iZWx^MUKd}KKAIPIw=|AUp=6m%9}UUK)Y!k)C3xgA^j|#}S^CxL&qL7_>v@Hw3t8Jfa=HAz z{ww0i&q)5;%Db$O-AI_fG2)v*#(CXeMH3SQ+)gLHtovYUts)_F_&|MbOk2#d0~tGn zI!YB%xnG}mlrG+Xg=^}X3m4vWRI0c#TyINa`LcxRe{Z>Nv`C#6)3v#V4YkjHn2PPW zETXvJ-Qn2dw^^d=<2f{Qc2tzGZZA)!}=7f(itP>uUjwsxq@+C?tz=m zDNH#MJC1W%q;YW^;kdEYmZ@EW@kaN9FD<_gK0bb5bvHZv3?}aYpQxGr_J2~oZ!@or z{yz8noz9s#UL0p!?WC{o{B?E;r`dCUsp~6$*~XmC=D4=w(Msz;zO^qR`HuYS{(R8s zf}GEWef?iA?*4lq{ou2irqy?Zta)r^+}AH%!?Y%LL;ivXM;!XJH9!5eyUwM1WH-Y{ z&O5%Y8#9u6*=J;n+%&u>_Q&Mp{>guCOKI#l?(-?%!1cKJ<*5_u#bcJa@8Oy8SH1p| z`ty5RConw_p8vz8{J3oS8QnLl>ks}&6Pq^a+0%(Njq81GFaLGi?DES0sw#e;_0RXO zcI}jkKF!1-#CQAs4)yKJmxi7!QvQD>Cw9?MKgQXwZrSEF==}Yw*`UMG-uf%E>6g0Q zPlxaJ{~zspce>wrhy0889tTSWr_@X2o-Nw;e#_5Euhuubn(cr8R%~(2;hI`Tz6bmB zopwckOx=3FuuG(_tEzPQSGK(zu$aG#;dBN9}=W|yaOqA|-$YlH&Q=0OxgL%T= zE2i#G?G*n1tJ3qLzJcl+O|kL4CTxm7gxx9)MJ6~|pqbrwE#@ST1A$@;bLzU&uU zy;#m(zS}M!A@Ej+PJ05=mYeKJd9E{a9E%>Vm}2_(kxWg-Z@;&X?wdszF9 zZ?k>Mgp%VUCIBy-}PH=KG$OS@X3L}VOjUDESdJqMQNG(wYQIFXDm6`e%JV0P4M5% zrj5b>`_FI8{AXMHn!k4M4z}H?EG#Rw?2P#ol73LP#rYktuCL|qylL8R`W+lxrY}oX z|ND-iWMy;z|M`Ee9^dUQXZzS`#q#&fs&|6G6a8=7R|S9KhjB;XoV$jS1cd7sQio*UCTKJ;H| z)9JX!x-deVy+Q2nBi@Pk_uMXJ|HxYu^8bxpK=a#O|0K2toM73k7#WqmL;uRbpSKRw z?6WdB{bqgy+f2K;Qx$*hUG~GhKJmZ0kDzZRG2Y6Y)3f0~psRecFGQ`;`4JejUXPj2FyU z1*TLxgt0BK>sEh}x~|bQ={&y~!#sJ0IIf1$Dfzj#HqKCb@%#9^nnTNHoVUy7<~!e( z@LxdZ!=j5q6D~UMxBYYC@!i|^zsRoRXgGTR`}@G{4V$d0?$^E5j(X2>`-1i*T?K7M z1NCFN6*BjO^k>KZx>YN(BmL`JM~BOkrm9AMR4#b1gU3WnT;UGeqS&3XQ;T-RuRi>I z2J4GUi+>dRe0s0)|9WxL>&$IutoHmWP&=UVKfd;7eU8tw|7>Z`w_cCCy}R$+uHA$}Utd?(JH6)U)VnL9PRq^~E$v7ZJv;Z+{z>{>EC0KmJR7z#^B*g#(TcTi zZ^igDNamSDDrChnv8?;FM@IBVSF5g4zO)cl&OANn0`Z*N^w7C?ts6{Yz`pcf3CLTm7pqEA#&TFkJjpY5VrbU);Llbw35H z81I-fKH}Z+CL*Nn$J2MxbLFSmMtn`o4L)G^yhUlLQMH&Kn80ssg)dq_R=s5ON zy}DERyWW6}WtD~l_m{_3k-u5vj0~i;Vf5X`k^~=g%%iNaS@@0qmrN3LJ{i@+@nsPCJFXyFpL7fMi_yTTdi92xy zu)o$0`#9;H!K)|B*EFnX%=u!v-uvR0;KaLrj_l`;6)U;neH!q!^JdasmTWu)2`kLR)c_Nkj&Q|@~cIVBtp!2bPjNe$MY9Dnz z;?iNd;J}O>({hv>as%%_bz@j?E`q6pxv6;#gLTfYri09^2aFiDMm|_u#{NyBNP{V$ zK8^W+?15&Eu!GDqodirTwH}z#d_pX#etv;l!&}Y;Kcb~$92;}k?}e>CF2XqPBSWO1 zPv?fL*ALtGKR3Ob9ankF^Ie68hS&=(=V>8!S!o9f>d%SP1pMD<@3~P;e9@lg8VL&P zW{ZjxSoo*?H}VLNaM<%sB7MGSt26VNO_wx{8Pl%MyKisF%=m7`lm6A3^#wl5{<+Kh zfBGNz^#9^F2JXARJ)52XZr_JieVMAuF{}q($9>=R?(h5h{};3NEm?h=_ixY^@9vO2 z8V}~bvfovf{p$ZuTZ6OvkBazpuiw9r$stU5?+i;V=l>UOeVV1~ylBhyu-Q&G(^WJjqgpcl>L`wK|d7l%3uDkc|!jE<;tDx zIrDZuD1Cq9YsE6FCVPg~pJ~-!iZ*jhYiL=zT=v7MD83J!%F%v@C+QuK56NOZ%KgB< zyE?a)pUsiw;^`@`HS#^?f4%osckjlu&8<7xPIgINI4)*z`e~PT)e&aCTVHmx&O3j; za>Wdxhwk%rzqdDDT=;coS!sa%>iv&yep-I3cOh?0_-2kQ@%EVdBOx5&+}Gl@)nb0K zGVJsD=D9_*tZgYjX{-8(yT?!^%B|s9?phU&r2<}T3)&~??iT2XZO&V^n_=aL zpZZN7D%UWaR!YdSE@n3{XJmdX?aC8N-f{j^?drRf z!>iX3ggn*KTi|r2g}<*J=69$MXMtU-^IeKlyYWxm>xA zuL^IrJ&*hU>-zbl?}|kk{y((;)Bf)M|KIiXnz_}t-br4!TKG$QW8%5`o|XR$*IoxN zxwE=9zv;UsL&!3pYYXi2rwM&x3zO!^7ImF+{zA~-_ACEg()A7{EnA*s`se2Tx<$X` z#ctkT`SoZK@98V|_!<>!|Kwh~F+Wv!p5l!AIe~xsXPffd{kyRy@uT}rmhU{@+UpP8 zSn$(0c0R-2KYtjfe3P=TXZyiyTXDbX=R($9`LCJQ{GDsa8NkQLma%Qg>aJCN?{m!i zZf){*nDY15@f8nt2jTT>&?UVALHK=VRupSi-S(lXJ6l?w|F zY?s+;zvg9NJ%j(xUHlGvjQbCZE-a7KaOD2Hd5hPCnmmaQdJJba1y!(CR z&H!!Yl3eL4{>3I!*drsSi!yJtKU4oNP|Z1$$yhWa?@CwuJl~|h&%^T4TT|LNuL(U* z+-=sRE2L-e_#@Mb6-PEEhE=T)T))+pMY(A~H|s9|){n^(NmdQ?ph7 zdCJZ2v5f-nh0aCqG{1T;bmQ6<0+ndE2Q4%*~l{)L2N#~=t)Vh6lXKRRE{)TzV?)m!|x5qC2)cmQx*qcqG{M&ZkE5R!p?tc?p zaemEDhDgh!^7GgZvYpS3x|g4=uk-IytLlXF4)zW87k;@0E57YE!xn9+|@%UQyG`TLe+VlS& zF0=?>*b$j~W%J{F7LUn~n3EmjKQ7q%_>|OxzOVAP#Tmc1HHuyJma*5`pv0SScFPLo zzpo=dMXf%rzgz0SEFZH27Pl2%@taSI?3y+s-IRNInYg4D->Vy3YejdIZCx>y<5hN_ z@-;3|nXO3+)AoFbd~K?@T}ZQZlaj*u;IxwgyIeH6x76J*(`5QF^M39B4aaRX8h>27 zK9QH{CCl~NZ5%H?>nHJF$e;g`Q8&+l^VjtC#oYVen!c7h!XN2gp?itBN{sRLY=H;< zUS3~53HRGR6Z_v?V83BotjW@YtF&2ONG<4LEQpTU_9_1Ns_5PFf8Oo(xyTUCd`9@^ zna6#{*6;uE>iC|=)eK&&DGHnp`JW}a*yQyM3ryB+)+w?)vEZ9&*O^lePW*idOuPqe zzh&&>zx|VOZPWB?$1N0QbG6@-ou_!De#6Ia5~dbvpn0&g^EW;J{mD8pf1g2ZZrt2| z;Xk|o|9x!#@9{hKx(DohdlT0&J!oW?dy%*2-ocilaPbuG&>SJi*C zv-OJCwNmU0dKS2D?yLAU?0uJ(yYDR9c&pv%Y|`uaX-b@dTN`GqRo`?YMPU;2>ei!d zy65Z`a>?A_Dwyf&uyC!|7rFX3KHuNj|JeQRp!>WMuYc=iek=E7Xt&|pWv}y3U3Db)lB~wKCnMa zDrmS;dx9z9kj6UKpZ<{z;eYOKU(h^nzx30J1}CQ4Ws8mSAJ%ruKbRIDwThL`bQeQ) z*QfL6E$jFE`Np~H#(u%pxC82&7)%cJZWKvaIxT<8_pd^i$^|8QHJNX$%Q-pq^npLW zD)SQ+r);U1xlFdV9)b#D#Tj_I7LwdMO;tPzl`ck8(P%EuS(8|u~WcYOIo z!CZb}0+)gOg8ij0C1&^U+|t2&@cG1Qul%dJGnLsC)}J}N=F7@h$0H0Gf43Evai5D_ zTF8^i@O*w#THDu|`=@^p+H1t{oBi7M<=k6X_x0Hx`&Dw6(O!gU*^DjgT)r`E5&x>_ zcfiPDAFD#_eTQ2%M;Hty#7|*9C9$C`q&4hqm!{;kv%C6poei1Fwmp>E;Nr@V#HesY zC5AWWPE2OP|Fu&qm?OBd*-F;$e^>E+{l3rZ-i7M_eI~f{F{y31 z@Afpj{-i5|Cd1O!v%l+C%SdT$jMlC_$Knv+FEIc5{R>&P9pTM}M{<8~voT312bno6 zyx@Pq^WWYY@7IATvlhqPem8ORKKZ3*7ROj$-5ob_+#-=9*mo>U3OaU#=KMg+P`3D-#Ru z=k;Yw!RKS{{d(Q1#OW-sXwnDaX`7-JblsQa@!GdUNQC9y%8CXC9R|TeGAwS-3b$>E zI^q7#B;facC*{(GYm60gpMQ+}{bC*KyXyP$wHtmP`O9C`V7uK-QGNT*lkcSkjx*ZV zYp~p@O8c+7etnt#o{zJ4zxJE+;ZeEHRVc5c4eT>ayxw$Xm}pT=ek2Ywx$bSVFR z3}*rFEy0U_A8IA&F_)d~irwA$neD~-IkvAqy|^d0j{pBxvs(GJ84R~R-PhZ9^UTlZ z?%OW0iB5cO9J*^ONA~~eUroa1=q#;seg8c6`t!XJ$8_EE&zIC`R%FZ-eX;uQ|Kcm( z-@Nbp#Q#}*`qFbEf*mvF1ChZzfi~4S4njP= za|#tCcwfbD5;xgj+*hqx+!QF_rP~{?k(*TWqw{g+>$Z!ZnR8?fd>azER&Nt?4<%XlJVb>iPOewm0<$wpc|s-m+M; z|LhEhqg;!>2Co!*V5rUY<xz%nt|%OS^imSY!HUiJR72{xd!}l-2+D^^c9O zYy1wyCh)IQG&5s(&-cJrbH}c#JMYzn9~@X`otEcS*2^jqVV2tPk>^gAzn8rTV*z)= zqJ+C^KS)2@*Al_ETWrphu7=~h*~V@S?7Aioc<=JPcK%z#R8xPDd)@oE|F!pT)n5L* zu5(Lu=Ks6f|3zyuS|z_fSYZ&GF!yWfj79#1!Xmx)r{@RhZGT{NoGHU`_b1qgG?pHeh@0)b}t?!iYUiW)YdA~p8 z2b1{u)%o9;q8EH%)tmWhz4(Vc{~{K6_m`a9^K041`CAXlt(=`6XS4c$_nu%*ok+$5 zOzqSDg{_=ye&ECJ^NdT6t<~74erQq3@}2gVZoO!@FU>AEf&JXyyL;!qv-_Yf|JApg z{m|^Y?dNx^w#I+^{Jr|k{gu)FX_kOc1!|HuH zzoOY*IBviDv7~PG-EBJ=7uXz;w5UJW^y}bVhWo!W{$()ge3OVz(?6hm=+UY4N0(1B z`86zh@i=JSgD$a%P5w+rI6ST{@VLHV9>X2RNr#K(H}6grI6Ldrug$LJ^PC-avTmI@ zE0%5Zl#_<%r~Na$-nMYJQy9~VBeRP96{fGfZ2IFw=I5+!E@^=*t#(WjTn?vYm0JGp zI`e1Aj$_NWEjZfPxY6!MoUeKQREdu@Gn})sZ>UFG)k;h5XWggkopR!X#IE`+@06;Z zRsAdE&9-Zo_S%uf<5+H>W;8pw?O-ucc-^cZVIwDq&!2WBl7 zJrZw}A2!i=g9h8RH*67Ku2(N*yv+VAp|Qih;r=!OoeQ@Q!W^6RpTg_?XM-}zcDnAiN7QF#g5-p9Y|&+?qkUfd_FeDu(b z-vK#&haWe!%x1W6$@q`;!sFO0`~H7ev*|CtBty`tbNoivw9M6hrcbhOKec{F;^aTo zrBCngxgT@#{Bqs4E6?q|@0{rx#?|m`mHfYl^6%>Yf3N@VwJm+&Cb5}0-7$wxwKe_S zQ~i9d`^xSZ#tYdc$~p7VaOXoKqpm)8ZkvXW8W zNq5zcGOC0MTiAa-s=mwqkG%XVxnG-}9w}3l7OTq+U-);jT)s|&&`tT$c~-Tjbd$~J zRP_CR{o8h47yq=Mwp^zIxI}jCJI-jZFy`7{+uwa1e+8~Q)oS4Qe_(a=36_MKTe`d1 z4%FXdd8ex_ZFf+t^T2JPYjqn<4y}5xz5T+E%%{AspGZiY-10*4s3p^#g)xm=qcj&A zUeH#GEbZRVUnSY#_x4OvS;U0Rixi^&wjbD3E1P;?s;JOT--qWW6z@ytE=!X(xL?g! z>kwNM`J#6E#N<1_j_ZC|d%Ect@7Hu~^Zn`G+l^JZf)CfXPrWdM@#CKz%h{&Xtdi+o z=(p1RS-reN^`7?@`&Qg<2nw#>GTrfS)&prC-m~+g9F?M~=PfRM*4lA?!s$~z9f@k4 z3%OmlT}W%4_{%2v+s1Rs1u19r?d)SjK1pni)V(Da5}nkSUU2@WMD4WaEXM;4Sqpka z!nL$7@iP5bTt7oEpnbmi_F17UUp9Yzcaxdn5bxu~I&<2y8Tgj*q;NSe5s5LI&UA(I z!MjYBxAiBa7>-Zo)o$=&UZP-ftTFQ0RMUjxOf&7$@)&3A-tbM^E?!>a!m4KL2K&sy z;2+b!-?{jAb^iXlua_H53i~&sJmgFkufig&>x<`^CLK+AcG=+2{||eQzR^3iqd{un zgN+~GZ?3vh^e|$<4X!_rZ&qz@_*FZ3YT?`8>rJn`y!o+QZi4*oWpmrRPi*UsIb5Xw z|F3hU;i&^`13mdU+>xP-hX)`|NMKv|1aU$+jcF6x_{5>_x*kv|L>{y+TSO> z%WkXe_5I;0?wDb{GxNOFvR~=hj?4ea=UH6-6P+WxZ_d~2++`>0gIMmx~XY@k25Zizxa10Lqih-yPfim`9Gy3 zKExY#{a?0QgyF}0>-v2fq7ppb2OVKYlT$*Ye$=3#MJQ`*--`v(nPv zugj|CEp|6dD?GP*)8HqJI6(Eul}F1rPjlImTEns?pW)SbFu{{+jpMyR74if;*4pvx=xH&YzxVct%a| zQ`{NzsE>=~jhvm|F$csv`O^LO>D6|I$B~8#ty#;SzD^Z>w_VAnAvw!`6_2q!cf2nx)*J*027tP$L;N;}6K& zZPr#}IsB^r)0403xE!?X87f`By4MCUoOsmV!^nPZoh zZ*QCW&$Z64+aj)8$I!4}=h@9i{0}EI$Z;`fvOMvhm-+Hdv%oaN{}Mg@|Fce)@XBSs zR$uvru_pS#%6sSbPoCQtkmA5uTUonchtz~kEn*t#uM<|;ulc^S$4B?P@sU^hTOLK! z2MM@@{N*|^)ojz*iC!0sK1SMoTj9Q-&+e84H|LMXb}ufj+W5R@Uw6?>b=_!1?Hx;g zNZy3^PQT?CGc2|iy>8*LE7OR zQvi#DA_HrK2grEHk^*?fNGG)ztlF7w*r~Y;B_R{OSkKSL`>U#g5(W3pe zW(TjX{dL>tPFt>d>PAJeaO41SHG$$2ar*1PxpR{d=_ z<&aMCpLtep4d2Y(M7mCX_%XC3f6DsrTyj@f3(Hdl4yWw-7kP^1uiZ(|VR+{*yKX#P zz}_7%rkgygK0N)OteIK+T;{g@kNd3M^b1+lzs=pa*`o5E#**Xx%1m#r+KSDMnSQP7 z4YSd|%2oA-1@>S6F9nrgoBlt&@%-X+HkNgl?lS%Slf@*|WG|ZSFIJ3;2|IRn^ZvBnps4-U z@Aq7upK?|yk@>^on154U>rXf5znwWX{^cKs`|(D_5<34G{%PDez1{4@qxbu7GoJdt zb8~dw$NO4&EZ%A#oTj)W?0@ukLWBMMTcWB@RSq2E5|LPX_^^@s7v>)X@!qEq*?l%DSCSTUW! zF+n-{V}_zwgY0RO1#%DntnA;GAFa@}`uMueAPz0gPf-SQ)}DD1EfZJ2&EWdib8P<=y})>36MuaDwTr=j9e;l>-os`)ed3 z`Rj?W|Bs4<_iQ)58;NRc*rC*r!OVK}^Ze@A@4w`0a?3yap4VLICCaWCb5Mz^euvn~ z_-B!#lFAJ3a|2IJJ3IBKg$>9?K#qIW^TSad;Q*P@6Y}A+W-FNJFB8O z8%jdb&&}C+B&)wH`d-7jcWEZu46li-UHNbIPD#JN>*Z#cK41PbJY$bQ-JZ=qm{$He zTBh@Td3n75ubQrBH>09dYyux#4`XMX$CSkJYNuR`xZ~mrUH$(bJKx>?|3fq12csYM z8(#eSaNa#?KgWmbrOS1GX-!%Fn(a?v&TNO-q6`Z@C?CAMZYgKXrs}!80XqK|eAM0% zFaP0u)31k;d}ns`KZx4#zsdb;`_VHZtg0s#DE)FSVE=H(`HFowOH2L#QwO`2nx0`; z_U-U8htnb*g#v#rXzhP&pRQmW!t>%>RN#euEyt2MTbAlhVbQJNea3KnPpHS0ukA(c z4f?m_zx+AVaNwt6!a1?*7{LYQ96gcyPo-3D(&5wnoiSfT*yEV<{_&pPzUxm@zrH0(aY3!FHrL`kLGwkE^Y;aboxbul$m7M|>5o~TJfHowa+1B% zxw#*XSH$ZW_3M3|mHE%s)`I(S@!zl4%hPq=ZtmOjyvK;4fKex0{`ZaJdZjh}1@}7| z>RWb~zMLQy6TI%#*{T&&cf~v~y(-^W`f6WDy!<-OIlumYGHY4?^=J6=$a7)etrUW1 zUzcc#Ubf~~)%5-AGbS^Ji9X;g=Gs>9r1RU)r~jS^thn{-?!hTdVmej<1|su6Z%%9d zf0(~!#qRh2^re{ZvUoDT+VJ7<{`<57k6UPkYd?s?ZQw7qPb z4XZqhS>!*)R}WwJGtV#A-d`8YwPU^gr}_G&;&1+$cE8)VJNv1`4NHR!_5c1@cDyd* zox;@dCZC6io$t%Tr5{fI3%F&+)V<*!XUT(d4VG`=6Z>~<>*8N~@$IoSHBVl|Gi6@0 zb-TL0_MveC`v=wZM33p^2|abP8+W8FbIQwR3z*7kztlT8R`95-Zu(!jgLgHKZD`wm zP$|1{?)m<2$}3{oraYdXeX5$bqxim?eb3kIACp%5H!}(*7&YXl+45ZHU&sAGC)F$L z%9h7fTYkM>PLz90L@yTAUh z!_RqZ>;I^JaL;Kdz5ie9X~W$3_{1=Ve&GZiW|rTF)8#Y!_fA#+4_kPW(biNJsk6WT?^_$cN4_NGgP$ss zNb%AScE#=+xW4R@Iwmziy8B-KVTHy!+Je8GeO6nE@k+|}ST-ycx>Nns{9Ea=-s`9O^_AuK zYrpqSGrG+BKsUeA`+M~MuhG*3zdpTNRmogrA)7UEllacGZ^C|G`&pNAX5XvXVEy&~ zAG=>wbL&NFqSh8?mrlRBpTkU`L1xF}jB`^rMZMm1{qedfEA=1R-{KAxImI!_JIj9Y zi7Ktk)o&Ne|4;h9@Bg>NeC^tIXK(SX*p+>)Zc64M#VL&0*{{p$t}p)m_||0eI}Y~s zzxQN+cWh|=ul28~vHQipu3!E8J3jTRKhF1gxjprozQp_OzKo2Fe0hws+5QwZyyEXZ zZcq?^%tzG?>J*3)ib~ zX4P+tO0Rz`5cRs|sYWi3$kjDWXFtr^v^GB5+f4VH$OBf9*AdKbf7;krnKQoc-*Dh@ zG)vjdUwL7 zbw#&!-DsN@C%3@<-D9a~ixin_nWi~**`!Z3xa}HYG~0NcSFZ-%-3TzhtEb0+6? zEYlC~S+n56^PHFb(;4s07Uj1sR$Q8J<+JwE^!R<6GDQg?OM6SgSYzDooUc1Swg30E ziy?9!X4;&P|7QPY>IuFF(<r6{*_x}ARy<7hG!s=D!yf+zG zuG+Enb_Z@-ldY3nE3C7bUwN;>b;mvX+j>m)Sg+tY`FY;`ZfhoqNOA8sy+;%z*#AZu zGyUDV#=yJG%IDuHhI!fFXKL5$e9GyLx%}?d$J$B%)qmD+TYdKF*|j$}=UtOb_z60w z^zX}^JPa{Ez4w3dmJQ;FdAs;+&ta?Q8nWgZ;`*PTCC2pM&M680yV?BT%Kzf^ntq?x z3woXUb=s+8_GC8^#zm&57ERRswYlm0)oIc@*<2d7<(z!GRyodA*GA~mo$K|*`>UT< z|J(BW(scRva@L#g&NX>0_UC=#$>WV%>K;D7U%I^a9X}i6rC+(TL*<_4=Rel}^GWgr z|Dl)f-qq#b{QjW6Y_2iGo%!<5ze&sg|C@JNgdtk|T=krWTyCKbBS97JFv|=7Hy^#P z{L6VN!>!ec%W5a9FXULE+s+jKWvkq;&CeS$8J}nzc|QHt4Ee1uzJ8jzZvXY$`4I`s zTUOd8U-|yws@Mk^=B*3&%n_i@$+s`GJFFE~p;kT{w ztD8$N9d&-aBiu~0tvT~B!>y@Wu6FGwoGdS7I>mooWSgq?(qbN|tBXGy zzAtQJFj{|e#$raj+orwQQ4{o^=KihLxcc>Hm9_5oj#Qa6w|vOW*umLSN+<^5o^UXKJlx zHCeTE%}PD@&%Lu=&Hq(Dt3JH??^UPs6K07?+dj|<{<-ya-L?Z0x0|>Xrd6#LxTK+Z zti1nP&*wDLUElZVm+b%i|Kh9t`|~e;=RVX{|9_wB9dniZ`m=mF3NpuY_3Jh=*Y7!# zxKsQC`(62~Z}M`>t$(xJ=6RJa7NE_%rJkWqruLTo?sKBdY!V-(SNyYh@tD7Io`Y~n zJ;#g<4e!DNul{73%AmG-?Juq9JDZmpp7RzITHrM8@U>NX9}G`hY1Tg#XvhvYZ^g`W zan^Z<(%hRf%g*jpTwOi)o*qL)qV<=HF9XA`#52z~bajb1%KAd$rQDhB1rx6y2)%ZP zp^0OMSmxiX`wwmft*_2(Q)eA}GkcO;k|*`zP!;l9><{=U=Q^^aLZR2>&T z$Pu-Exa&Z|TtPV=V$1Y< zzwdpo(mJp)c^MPKzyJExH&5#=zt{R+HmfX2c;@=Al1v>NyEMi7qYIY*x?MN(SN!ZB zCjXyplzX;*f1!3eOUH(5#dlZj`D4_PP@nABzo>>ugUix+siRm{fxp-hv+ZTO?*IC` z|FzxUpX+DD@Bi6)>+gcU(Ti-Ce`ac7u6I7bvip0g{?@%0PequQ9k_OF+QqQ5ui{ty zU6Ed#zWcVhS%c`sw{K@ZmAmrqZLa?FMWP#W4`uIQRFGp>@jqJZ5C4{sWJQS|_qTj< zQFq<1v1T+``2^{ejlEOxEUb_{>z|7Mr! zh@Yx<`NlsXLR+usc9bjYbG7y7Gd~I~_DDFB zcU}oP{kt+~sm7D_hd1_F27fQy;nh$k%cz#_e)Riq*&EMRyxk#ZI(>(nX28=4fTs70mG_V(SUzo~avhUN>sq;T4dwkdDYS{Pop_EYa%39N7;jg`tukBvCw(Gsb}y%`UH*QB<8rfu+x|sL2mRaotLN+%O_wbzem!6LkEd$+KmP96dFq${ z%>FMFo$~i#uf~I`TuQkLiy1N$Z=^U@S=en*X=aMjW(weIveHbQ+_HZE?(diH%Kts- zF2nIaKInIB%ZK!^f417}^ZC63Y_F8wYWfqKU#*J-F@XO&t`|svTA5J)_v8I4AA*^AYb^W&(I+X~qChjIxC{YZJq z|DpHw@s~G*-gs`FmcLEswR2aMv+w)0b65h|C3a_hJ~QQKj_Nf1e|t>oZ_ctkBP{1_}1V-#C91+i5x|G*rwty3p{?YR%tkVF7=ZD!gE3 zc~lHP)$PI=!yRVvRaOBM2v~7LV?-`m66aU8lS(N|k-j`kV_hjvlDYUS> zciwJjTb{er{bl4!+51ZqrhSV1ewAnTjOd@=chyBb%RZWNN4#qv&pqeDd)Mx-zx>JZ z^)fyCHUD?jt@-EqZ>P~G|8CDub52!9-Rt~N`Radq*8lCwwNLlir~ZD#D>l8Wx-N}d zQ2P0HHFN*_A=~+T<*J^}Dv$7d>t?;DOzcCx_>}_T<4IY{3${J=|Ju*``NUq6ul3w1 z%~5fiIWkmN{C;=S{QoQQ8xpRC8YiCENeeI2D7gM_+FP$_4M$g;yYp$D)#j^z@9+OB zes^*I{Fn2#oL66Wx8OtnmAVD*nf(v*GO#N>-T&g+Wxbp8_WWyMu9w;L%ewS_i?8dN zdv_PL?*IDv{(U=x2j_Vh82)8g2mNFGp`37k-%du0z4D4jZ3;y8KTcTXd~b0b%L;}C z-#z}NR`F*3G|jcpS@FO+lIR_`kCwMi8dY^2~VeHTrVBk<^y`v;m84>!p##-%W z((2-aY5}*i9<---Pl?N^-ode@%SFhT0`r#byccx7rJuco_ zyn^Y(pP0Ar&u1T-!YFy?xt&zhf^4hr6Q;@i?cdpOQt86OTW-}g@8+mv?l z3fGiv|C9N%k9id{hy66-Us{pz+)+ctN${vyYiX>l;p}twcNk6idE9bVv(cr)D~*c2 zpO^QU{BVa#S;CCozN@M<@!xXUYUCu1;hPR7PSTLBjUuUnpc3}Te z)`-nziT$ygZfFL$?Rnb%{#{&^^i77s4}TXYG}x&Xlxp-_ZMkvXsdU>1evvy%W%jdq z3G@3!Ys+o=?XYE~XS4ODlt+6djIviJoOm}^XHhEGnaySV+Vh_5_x!i|`A?PqS-G+M z{@8E2p#M;PP2iiINpqel<-F-Bh}!bP>f@j1_WP?p9Ar<=QqW(>%YE0#d-v80XPdjT zv^M&kzGcCdv;0^8Kc*SBX2JhYUpF|vHU0jd)#)d6-j?nD)^@$s+hO;?bGPN6@GkgL zr}2Be-53A6^Z)#;RTD5;F#o@^kUjJEjt~9J59IUypKkk?SN(Bq+SmODS$(&EQFh-d z+M`hKb(_6XV&DHw&rWZbufO{tU+y;ti^qfg&r9l?uiOoOZuWNjg5SzJ=5xVF;k7X%t_6`vv{5^(&__Ty_`JOA3Nvy$oKM6aIGv=6Iy8Etr~!4h$jt966c^Q!3U zjfw$s8{NJ&+wy%#zdB#@oub5ahsK0Rh8^Ei)eGhw5b?kM_vWRiq8hm?8dluC{q4WR z52xI%qIOec4WAotko)%k!!9dLQB$A;$&doSMFw_f<@ymibW zd#;{en!hzjHA$}H-n_LB=UiTAbLjq(B_~UM6$m=WZd40doaFq$`qY}gua*Bfe5p2w zx^=(n(;-p+KXvllUZc3@;$=5O^3 z!?=X`f}D42!-3uRK7RU|_wr|6um0b|mWysM7YVMC)OkGR&xh;zvA2zWIK6cK-f-=O z!R@9~zn_*FYzf@H`tyhPlmD2XtnZon@y)b)@%n#@*RDUh{+M0)<6iSJe)~TKrIX)Z zeY*Ck`j#K>cRru@F8}|xeDU=UIl}o^Yoi?bneR_$K9hda=1cYL@|rh+%YNy{8XA24 ze}UC?k!m&an15W~H)->>8HXcmWLj$ybH7V_kC|*Wc$Z|hKqla^^pU&Vt6P25uwwqDpBGgVF3-!~dwt&{>&E))b9WXjyKT0tLFvq8C+F4D z{|~Iw4CP#_;iOO?Nh1dUJ-f{j>m38ji^UJp+Z<)sT zI=$8=!0y(09yZetmwLLMi_dtwcC+mRnW#fYHzoW$6Whl;%{!&$!~x%f46KK;;!B=2 zet)j>@9LY!+xBj{vg!ZP1064Z%6!i`n=@6HDSb|Gkt%0{z7x(9Q1%966sJvLescQYl6VKZZ%r5SD-JWOjVzb2h z2=8{=|DTLjJSp<#WEFg#)^j`J@2tzYUFW@@p0p@Gq!1d8JZj;t2_dWiJmNo%?QA^7WseXB6*eeP=xX zzZ2_$%HZW?(%Q%GbnQ>#V%QO)81Z1%&+pcMlWSL6Z%dP8ztekQ%|EdMfv(6Du8LPD zm)F#@zxaNo^%zsbzC))!MrOzR^lvE5Tm9R<{>|>)*6(W;8m?qH@$+BcsslVd3$;qZ zjr_NF{q=rr{%vQ1=2eCTY0_78t`v6fjS=B0-5#X&qi^!P`9WtmDmI?ap3d+`D97@; z{}dgI+P}I68oy61J#ldIpYLy`{Qvb=JUcG_(tXZ)(O-X4*Q}kGC;MlKDYwu6gZyWa}!b>`n?_sE{Hw&CdD`Wc2R(d zjaFk9_cGB7=fkd<1>BeTS|M?P|Gap^{8Ww-?X3EFj53cIBt*0lx2|noliIDq%&c`Z zdRc*U<>42Vc6{P~ro0&BSJ8s`}v3*zC})p}qt<8!I-_PW@ob(23Wm>Iovb&{-G z!_hm(UtNr;XIo>@-|<>-kALnmBL{}i$0APyR!&g#%RzQTH#> zkmXOK&}&6||0(m2+f14AYUZq;6TfF}_2g3jHa|w_h0=m6>y~_6Uv^!>RrLDed7;cN zSiZb@T^f8rNBY9?d3>+`&RWjA<#Q|Ngv~4u%w={=&x>4^u~nflNB+^F8CD0FxF0om zGrUedwLg6Cn`iHO|NqL{uP6WW@07JOL(&%acAXc>)cScQr0#`;){Csx*n5wUz2Z+T zUmLPQ>UK@${rL}X33xSxX&$T;In$E(vt)^NkFvqZ`|V%lt4j{aC$}9wlz~vHjWn!G2ri+3X)7 z^>G!!|ND0~f6>p~b7D59>Dm1Y8dhbeaSG~P`H<_bXjLy4q4PFpo1KWF%BvNTjGJ|Z z1ZU0^xwiD(_kTYQ-?hK4 zb*vdy{_(cG`k!GX1Mdmv14mvhNi7k^ecf2r;*)TmzK&{TA)Y*Ah8v!BOYr$4qmY%BLS06`gH=h!#y=+U$gaZLTPEKXi?fSvM*mwPH)fd4ji=?M5&%b)j zEc4$Q>G{o~2@SIU{+I2oi#KQJFMDmh=FdB$fP3b}kE;mXb=A0`da zX}SDI-aEe~ZIf+`{CKXz@X8I(_PP2Fi-FvSKc629KKYyQ z=Cew@|EKRdOQWpg=l%SVe=lpN(euWapw(lFd*^pGoht8qR&jmzy{mh_uFc6L(BlGuf+k5%E#2MIr zCP&$8urXB4x2Zljg>9OY!Nos{K86S6SDt&d`-ir+@9S*&E0rAmtK}+k&o(i%)tC4x zp0|x~@OygO?)LQkTf?@8xo>1V_Geb)>xhu*EAHa#k!8iFteHevbCr#q81F=_E{?5V zt0NKR+kRfMdOt(=J=RTMnxy(xH_0kKZN4GEkTfGd$2;OGs{-p8ql`zNkAB{6$lO$T zz;4PW$5L($`G!q=iS;+{gat{R2#XZr>QOtJI91f?)Y6SNxSbW|iz;lLv?$HK$9{i| zm{NhtaVEy=ubxi~a{gPr;mh)aJ^A`W^q8&N>`DsZqV;)AGJI z(kVS#UP@=LE}k1#u;$;bt4im;mih7jwtx0w;TehUAMZteJP8x|t5UvXj+3Bix~lB; zDaScq@ZUQ=gQ3jSXpV(4!+(h@{C}IbG_w5l5!GO25M|a`e_o~`N_WwNS%$0|ravk# zXAhXuAf(JteJ;7*F6;(FfR4k*gj8`?<|)i)L^fR6`;z_rySTdJ=GB#Z8y!9h4AWatEzJDR`4)=(|)~Nc0Hei#5)GV_t|ZC4Hy>Q zsZe_RE@O?(`oco7Lz_MSc?$3SZ((b{IO~YvL;aP)TUSNzEYFdPJ(mwZqcHV6*9rRs zh6LeXzxV(D{Vsan(`dcr`ws5yW|rA|G4YCb#AVk4IW6HWaqX|Kt$)iL7P#Zj5B2>w{{FK5?_PfR z>vc)d`wWv@zuY!o$e&Pue$D@92j4&7Ot~@rUgdJ`c^e!KUY{RQ&-^{w?Y8}mZ*#8j zz0=(*f2;k(-%Y;`pW;tttZTn2zkjh^!)MSn4y#@+o4P$GY)b9-hvGk6KRB}fI@REi zpm+JkOMm%)*Y>nIDgWR}I695vo7#?a2Mg{wSFb!?5zkZ~A(9#@x43@tDO<6x@o$|g zKfSyjH+Ss`XYTUfcedWQKE0rtLDcr)G=cX`8|qG-I<{}sLH_4z-~Y^tIyWgwt7-$^ zq}dJUuiq5=^zA2;221Pg@8_A*e)@_lSpPCFp4yWdWaRv1T48_Yg747{HI2s=CDz1> z2Us(IT-YP^Wbt3|g&~J#FOJx;^vVq1weo$%X){|~<-PWL#7lIEX>HDG@H!f}&s;>~ zYsB-)bMtto&n&#=^6vkSJ4{a^*K{UEzuv(c)Ml7ef7We#;dv*&t+)S|Y z`*m}Z+O{lfS%5(`$EW7N4M~nar=9KpzbN>_N|6cc7)<^? z&OZKE)7-0#;m&G?hIjW;5B_!d&n^+W?FZxP6BZ3y>dR`+i4^dJRqf`}Z_V}IU-hkX z`HD5olNfF?b$K%|n0|Y;`MLSuxrObl9DhDu|KB~uvC$|n?9Ime8~$-V%iiGszeeui zbop9=_r|P(Ia676_NVQ;IG1TAi-G?l+rz&;%cSnV?x4K4zH-v}Cadl4q)sn?r6_{&~jl>dEU{g0mI`OU5M;s^is2-OMNeQH}=uCT#z z!lvr{oli^3|9(}E&D@at^6#8u`U~>y{%~Aj4{v;Xgss6SA-~&@MdAnlO_npN2VS)? zJ=pW}=VHGj3=LE3Mc1)qEVs2{{`Juz{=@vDtB-9Ov$oy3R$bT-&3NP5cdK>l*S7Dm z`~6t^YIwu})}rc$E9{EgPkmnN8T_-I-YfRB%>BYvMcJ5;=s07RWDV_R)7pH-FCTct zmlMZPESb~Z!k??wI1o?DmmHi;j6{>kE6ST*Zz>2H~*o5QBme1tIY&93Z}~O*wdMJnziM93Tlk>=W+~%L51vy(D@4_fJp8)4 zZ`c3qX)dzNPUqzvwv?^DptE)+*XEdPmJhFIFwEp!P~$=k@L+Q?WLaCQ1yyA+lOUsL!S1RHieu-lOAqqFDY z`G~rl{BBLRX}SI-*BeXIgcvj#zT3XvslIFb{*SkJOV2Cz-JWvBu$)uFtLKm1q$208 zhA2;k32~cQE#hxkFc>%8ulisg`N8vOe<7EeW5n0!rH*$lYdyIwa&z&P?Drcjo}E1N zGU&I($@^0J^_zQl*ge}C@%?UM+d0pFHfL(he|^lZ{Wd2^Q`;Jjy?C(k^ijT&kkkJIUx)_({UkjbG_~j+U%$20ehpvL@teOc zE;H%MewNMefJe?`2B>5;nx3iW(>A1$4!Nm&fiXF3SIgy*r%cR`T5-wI=8VN zo&VrIYpe#F*8;FrVqYPQBO;pY; zdSKI&CtrF#&9mi`!m*aB-G-+vqXVL+e)N{^ci4aR{QW-d=kpsL|MD<)hPL!68=X8eU1s&>&uiv9h*=fOWfYNre1B~HT4|^M zcW*5eS+Vi|B7Vu5V6G)L|I@zLpXrYY(>Rm$R4M(SL0!X&Zx-AW_}LDu(zfZ*ed5Eg zkyYoF{iSb_ryQm*t!D`Q?fUh2bqa6Dzf!G|g&YSg1>~mbR&(EAU|5*M?-1F*{Cn#Z zh8*?|rjBz-jqJXO4-A>S0uElU{l9wm?)b`Ef8XC$*7#eJeBq)Nhf&74=WMLMc1dnr zyPSu?lwrEkoUi@q$2bL!Y&!Z*`r5kBi@(%wWQlp%r~Ry$LG5RC*_pO&-_`$od~-zJ zJyJRO_t8D~H(bw+Sa9{=z1DKRx+`rh-P^Wpdp5QF`Kx*23Eh7`($_Hx^f0`5 z`knvPzoWU`YHzPM-pb$iPi;kz;f9x93>{%R>RumW6;Ct4&ol>A^?rBx))-Z=zWJ@JUwXLoD?7RJ zgB(lSF8ybH(e>N%essXn=Vz`R&gndsKIimH{^KIDhRbX8EH68M`8Q+n#p9;l3*`PQ zZjcW;Wjb$`u4!w%*a>luXEpNtbu*q%aVWM{Pc1wjshjn^Kj*1fwZq@_m!iJ)GF*_D z-1b>$zxMGHF|%u-Hi)7^L-uPv33*Kao>w z#g1H0^~`(ubo!@nTxj{GhYi7U;b48S-o#p&cvA|nb&2k%g*%v{wZO=0NR`X zu901C#}+BQm+K-;rhVw2<@=eVe&XUhw~JR+{`>fE?yvs_^R3R!Pyhbs@GNctg@-c_ zMg4F&)gIX7-=~yw;10{asgu~}em9-it;@fqv+CaUPxi}{8JWctxy;V(f8YOa-EPnt z3Tv^MGaU{w>|lL<+g;lBf;`icjk(MHrGM;y$j1KG?U8x5eeJ)A)A+9~uVwzl_sBcs z|K8YX?yKzoz1q&wu&b#`)Xdd z++j_%Qih!FC6A5n2WNi&%+VMlxa{-48@r@g7PakN+DWR^0<(EM_) zuIpNyEOCc+^?KZ@+IOd{hL2nI^!b15Ub%mf|GXoeVan-z-E|@lIJ;hnw3{V~&FK%T zv9s5>`OYeqkI}qw*TN?6bux^1iWcmYx^TUV{p!r)`zwx#u)4BUUsUUJmiwO|=(4X| zE2<)Q$Lu3j-4bj+XGz2dtuW;aRBxEgxQThq`UIZTqy8=y`FDApJg4a1Ut7(7L-hBD z_kN73g1K@z;#>8r7KdpS{L8F+uu3Z6_>beig5!_<;n%Kw*Stq9+stuIqE?cJHoy6# zfN5Jk>#x5X;Bxivth+p~6y_#PXqjOdqL3MD{yV2DG4T8T1n;~5EB~gbIoN8i?0Nj_ z@|-it2aH%hgz{ZiekYN%L*0kBKn4-fY;Pz$mjOQs7W+^?!vm zUA(Wk_r0{dd;8vp+`FIWC4b~Ru&e2J!#)2E`*zpcNs23mKQz~jee`#_Xz#`RwKh_P zEETmE{(k)zYsA{s#PsOy3=fWb)7JQ`5EZNOKl+39v%{&m0S+$KugXoPicbDhyF)s6 zw_aNR_H#a;zHfH^H_z61-ItlO^LDKS&E>34V&`hOzUP^#EE8Kzt=!`TJG13(n{Qrl z)c-$o`7i#(y;~Xc^!_e2%wDqWU%l0@`H#iIx};*ZIjwln$?5v^VRJ+J{ll|Nc&b`X z7td9kGeiFQ&D_O*{#Sl~pzJU8BmI}{^1tt;YVW_Cb&O@hf;w+D1%^M06Xx4wKDgiT zXWG&q&2P5kKA107tHJQ%^8WM(btjuvdy2{Ptb) zi$52`&Y#W)ngrIEu|Ku{{bRe>3&YjL9B-WGC*(VB);Q#4lfr&x(~`98YFTTCR`v@b ztowgx?=H|%41Z9=VP-K+Qf2kqt=Wep?#{{0_&bwxTg1B!|2Ecf8ch4VWP5|`LAmyg zLM}VkAB@>8&zo#=MAW(djp3_(_Vt`Q#F?sC64(4a`T5R?gMSz0M~NM~V7sucZO^jT zKiEwtD{NQ(UV1j;1l&@tVYR|?5RlfK7?tK6M zr*~V+@4kBP`0cU8g=NyI(x=tdZ{gYZ_q)?)c`dPahTtwiR<$R8B$yX1p0{u5{l|On zXfYRA|FqnDdf^;N#(!Ij6k-^D&YApY?$gbl|MrF~Jz0?U?B~sSwcj4>Pu%~+vQ42u zcbohh9{XR5?QiY z{~S`R^XqHaUmV|nDOT&> z%RE&~-L>t{b*7SelBT>?(I+!=xmi7b=%#m7`1+NB z;k~>9%L~^vX0mCP3T*xO;@{6I#%aHH78h82Eq!+|?Bc@WnL_cG?^Yg__&YoG0W`B;j{rJzDkI#)Wd9S`xfAzTHU)aR3 z^WOvdPS`qdb%$vReqJwkJo0O@?A5N0H6pUfOsT2PZ1*?nU%0xE_2+4~%?y{Fdiahc za!i*!_wnQ3HGKyS#P%xqhmv=+b*Y)eyUw(c+_y^+y zZNG-dztgY#Mmi|GGGu=9L`vuPH{pHj6;CK^61Y*R!MtJreB0t>^NUvrpK21-X7^%f zxf8Ly{P4@*^RNG{m;cSTZ~6_V-^Xj?Gc%6HT$XwE=a^M@pI<=*9byo*-RGo52XE>ozpjlM7SL(~pb<^vY>0X?E>3rnBy~|JTFMs>T z|84i-`u}&H+m%;bo_%jhUJgUU`(NwcOVvGbuY2-gY5XTy_th)D3!D&Xy>f1aOnmCP z{reU5-!7PSe82byRjni6-+T>Uq%hrfNr_`%r93lt=k}P$@7ay}&qe!W?+kdzqjbTj z>As?Xtn|GiiS< zvfxJY+xQJv0$5oL7#Ngf>XIGJ2; zWNTA5U9^Gc$%&xVuNUtx-L}dqb?%GaW9n|N`XjkQ{AX{|(X=|+)MuG@{Os|A8Yd2$ zDcMi?@j7L(#pDHdESFt=Y#aEn<-qG{H}mLOS;9e6P*F9-rM>9?<>TAiBr({PFxv zT3Pm%784tL&uD!7Sr*Xv_}=GJZ#HITF{pjB-<0rZ)`!nJ%mw#mnOyTtd3X6uRog_;_ zWWa)hY#Jf|gj6oP__gfJ;qCX={@HR%+l=9!F~7|2yPgCj64& ztg6Fbc7}pGOk7Oe4tF&ezutNNfoxuL`QZFsEqRZ{uli6;>#@%H3!D zA+TZMcaPN*j;C*nV39oW`^&_7G2x4Q66Mo>e!m?3&-T~P`FbB$)c<_<{@=TY?)6{X zgE#Ure0UYUzpCP6cYMv2()EFHYYXDIc5QPr73Dqoe#Yzb4hL-hwWpicRIS^ulsrQr zh+F$(VmQm(iOAF|;|DJvLU;8DQd*O1HKgO)F zA~mePcXLju&%S(8dYyT<-PAe`4Gz8?$@3W*WQ-TCW%-~zt(NP3$S+}y+BkwPC)?ykS9`E>D*^zTzGxLqZ`z4-L*xLoZa%>~bmHceeG->(qlxp@DMDGK5Dmc6(a zQlsV&Ly>i4Fn7QYj_Wgos?@LX+Stj2|PVHZrp zO*bsuD(t9yZuauJ?){!SzkI5ZskPl;TKFfszG|%}JO8Z(Gi|MQPrn`g`CM6KgQnR1 zMMq>MuVH!gebZ?A=mmRZ}asd55TLKleLZ<}XTPI{evQ`qMA3wwPAhK-Cj#0{7(m}&e;P&H_HV9Lg#;mvT& zCzGMDpNT=~QoW>Z1M9LY&8z`-%rXYsB-Y#7#Yo&_;B&h1y=?Env#p#D)--n?4zE4> zxLw^wE;7~Or@PlJhJPZicbl&sdt?4D<^?muQbX0tEc5rC!WYde zo_*cLwcz=7oq2qG8}tP?eE2+*F)vy{SL5#t{WteNmB%*U)~P@D>G_nJiipQ4Ho5QD zz1H9M@zkFBv)OURd!DH3d$yW09LU{%*UaYg%=3GUbayx{{T65*QfA4W`uEtmuipdq zSN^fLy>@>`yMwn*(|YZ&TZ%r`M;v@#eP-e*&`TCzu2`{`br6(|Pm*3bK0elAyilDPej$(`qI(r;M|3KDoev3uL!;%Kc? zclp&`$U$vW(dChA6!01_vt&yV20EKpSH9sv|M{K>)rZ&KY#4lx?wAe z)zcl@W*imvn3k)_94YzjW69II@8=~ke7JLI#_rJAkZg9w8*bmc9l0ML-nmTcx>(2^ zNzJc@=GE)=FJG`)J!HnooE2+l6s}q1^xCOloxPSv;k-MmYQqF?ulagt!BoCO8Xc+!RnEB2oH_AVK9{9Qg7?qztvgw!2rrNLA^5lc z3`f8X#*jN7wKg(ui+y;XiDAc9+XyrN-`SGvZ{#u26e#`=6dG8b9T}ESP!DkCE??fH4E}qW2~7$3m?R z%`2MM(0K8_!ZFQ`{o-neUd%B_z5DIGvcQA$MeiR@tu#Mnxy|Gn%1^BxUG25t@q zM>(;&Uw|L($9(xd*av~WAUV$Gb3LC5xO3(2TC{UD!3K1)@0 zzkByWZhKu-E3FSf8;o*e>W(bx7ZNDou3y%tFSm(Xb)l{OX4A?0(^K!ReHQ#TeE!l8 z!4JNheX`ShDwtCsU#7o1P5;V4k-JjMs&@Z%pJ0@lcR+^q_5Np@ww?Q$@phd@^{=Bg zUFUu{STDL?mHl`1UB@LU6I=t0nKu=^c|2`u-Yy9Ha;={C&Xva(+1yJ4^qZ_I<8J-i5p-^6O1)BYhSoJF-eX5?PwhSTgXv>W zx56x?FOwx3s*I%<2>gBfJGZ#esnSDIqgDQ`OBut9M@!ikYcn)6Ju)y)mGk;5p|Ify zyTh@DkDn`xxdR#;Z1P`ZF$gr+{Z;+fU_0IJ`9d-A2lM|=-pC(zS>lTSbMeTSJ&t@^@YyyV7W}b%v?3-R9Tn#&?Al1+6XnC7F}W z^7cKOOinWEk-BrAzAt6lH~VXU_4a=kZT0xRK9&FXP@eDq3wg!`U&5Ig6nqab%l|mw zELvkC9?!@6Ut_|&o&UVc8D|`?mlB95FTZp4y1Yp2lEl?Y|35Xp``0Y6Bx{$vB$MCk zb?z;09f2z}jm~h0^&I?P_jvAm>3bio>!Y5yy8LQidcU9{X{MyUem(co`z<@A^L8Ze z*l_wl-3;-czYlL0etSdq@=wKH`Ief0e5>{^Wo>C(8u9;o`{m{552=OiGoP0G@xM*J zlUyvX!V8PL@u#v_7%r%B?cEzvulMBitn-DEx`m4!WJK?K^sk>Pdrw;PWv-PKyOPq~ zo3Wg8&iSmK_K1DKI*C84{VmTQV2OGhc6!(UHSvdPx9s_KD`TeGtN0MFKfl%p>}oX( znjyIVP*7EF!QCC9mvrCDJ*{7|SFBOypi*&w+w%Lzuf}LEwVTgWoU%4F-elX>rB==M zAxB=9blPffi7tp%EzSB@y});l{l4{6UB0fp|NmB#?bZMDw#KUJUE>d`zHvY;$aKlwc>|mfY$`WcfWW2uk4w_ z`6%0kD>klP_w%8Hs%O{l=6|XqS9-JXpYK;)hSbxC4l15BDS7*6_4#>~&J+Keie*eb zVAr^^@Xx_J{S6Ius~Z_uI9&WEswNcwKEj}EzwYS2iRbB?gkL@M>;_92O zefB#hV=H|5mu~WNt}W}EFRIrI@?39ZwXOdc6I?T|=zhes8yq^?$9OZ!{o-ERX4$7s zF^aD`7k<9pkbh5HlgXpWU%qSa+dKQT{mO^!nXgOwKkK(^em1y%?(2GUrgq88hhuif zy)8c$TK~Pg-rVMeBfnRuXr!&u*YxxAWY_Kc^-4M4KSX55&Ew3P3p%Fv@o{yYyXJB2 zVS8BaS{?SwG4-3)eLa>j_o#tw`R5-~#KJDMUJ(`JoT5!sef}oevFZ8`%7_&iNZ_BG1WoyOX zZ+A2JGtR1fv$;rmYS@&gU2fm5=Pf>#e%gHMi^me`KTgb2s=o7UGy7}7DXTX6uT{OL zyHT#;+}hI<_j!MB&taSrXXfbbtW1{RucTTxsNrk_hA&?WU=dgRju#(zj=j| z|L<((+hcFc{zFL#4g!x;>AhufI=TFr}?XU+}R* zo@UUJ=&K9k>ZQeA{$)7-QIJ9S#k5HMS;d+Q5^hX*bgwBhM*3Z!Vd~namJ=2~zb;nS zo6o{_W7?kokGV=*ZRg8ZP8B-w;fzdSZD#H9&vzLadt0xG%(Oe_^x?DnYvtxCf_I#2 zgy+QD?TcC-wVz`XXM_1BmOp#CzgPd?lpXYqRZN)Sdcwn4THgElO{rHTd#s_EmMXHHa$S40fQhMy$&!25YKh|{XwEeiV{`T@xfkuJa zmzx3D_gX?Qny^k~hFEHcH z{3GwBL^Sx{9c4J~d``4dZqL(;aqDu{%55s!v9ofo7U0inP*go&ZZzi=ecHt$DcS_f$nV#93 zP;V&^S7N`S`TowYI$BeM{{7jl>AGg=lyo(RlInuSz4!ln)c1Gocpp)|uw&YH2}%3o z`VSpN)Ysc>B1ubEo$=#c-US*Am_GjJG@YeTt;{Fug8`>uEjeH?o3zy`H zL{-_mzM#es_4ViT+Ld>WvdS8+1=^-ggYt&yBTa~->Q`3AqNybIboM*c4a@fI;bNNyH9rhR7`G3`) z<-1{WfuZ718|$Cj+h#DOZt;4GkY%tL8bDIeaoZvh@9``=&EqGpd@#rhHAC_d5Qq z`qpz2XFto!pPRn#-*P#=KXGDzzuh>I`OhZbp!wg)PYUsV!3yqOkMGyMx$@yw{r_!? zN|clAuN>`Oc0vBe`=j^oFM7o<-p|ip|3dd!S4BY3pSk*5>NFO9dD*_-zWJA|bXhqM z2ZJ`lN~X7QY=4d2964XKn=~8~F!;`(utar(d=kR}hqyJr@2n5FVDn+#?_b7U)^T~J z?}NW)ADvbHb;T!C}( zeg}E7d|*<%wYD!LEyME@d%%`wzqpEAm+@KMxE4QObj|!z+V!tByU)2Sa6P}iGxyn^ zU5DbM7cZXOq_Zn8aQ*RHr&o%;ToaR~ptLJvhtumRRlQMr|HVAKWL3=l{>zWuNz&J& zW0volUi*Es;GIrO z<0d1QcP$G`Ms2(IfwrH_a~gv3&+{K8$vcvwK`<%12=LF;Yr|)msmR`NF z_E)Xk|J`+efBvl8QGPwPeD2XLR-1QdGBSMN|8c_Iu4sqQ^?kQ4o?OYgji>e1-OcBm zz8=+5tkT-*V!d+XpPm1{9hiH(esB8(k<`4YyX*c|R=Wtx{Qcs#BTnmW(b4!rI@L?R zIL&)}gP-ku?3sV*3z>hP+sPvTMj!tvdj}@BpXR6b$M!qaw`y+K@FTjU zT7jNE$0wP$zF0^@btx9M05?Xz6Hz4~@b{n*#>cmB3jRuWISCL0H2c~$58{ALK0`yWxy9d_ie z!v3PD>sSBZ*mm#F)@lEEYL3_{y6#vyJ)J?t=fRI{XQy=HWvrKb><~r-I z+Wm#|Cr)UzE#G?boyx|&F_)w4H`dwr-zil)E|4I9D@Qo^qjpIxTW{8Zrf}bl5_gU! z{Isc*H!fIi_TygfSNGO%F5}-Bc0U6G*52rL6Fji_WsByM<368{mol(SP-R$PIFm7N z=ly#&iSL*fd{t)lW#QO%CY0fYk|ay@w=)953+9NIT{$e8Al%5o=y0pLfpLEIY3BC) zU$@jBbgldJ>cO1%m20;}P0YW(X@0h#!HW6!{}yeE@iXVDFDsC7b~wnuNreAyRQ=eT~Bw z_B)BMqQhU>_{?nIS+=g;cIkJ6rS>&>9#0Pwa+DBBz6f?yECwS7+Y(SR59%xJm2O#+I7!PhyXwHI|&>dEgY|z4n-_ zZEA<=&Y)B0UuZM-o$xxKzs})_)s;nO8WbFyURQ5XxfXVBSKT_>{(~2^WCJID-nBH~ z$j9}u5*4LkTMnq)aL9Y_(zy0u*V8ST`^}jg87z{#Tn%|QP2K&{zG1SUMbLYt!wbW> zDto7|JwLPVY^ji_=eON+>z!`|{T192v1adsaQnM*-{O-_6dZa+CDbgWRkRloY#{{8=p%9`%|n(QQ{`(fP$E|w2}=TChZb+JF&=$Mj#Muhg= zuJ{KE(#rcU``3T{b-r3*+wAJ|H?{bJ+zwodZB$BDWUiX`D=1m?dLQ$GNutF(Z6{83 zoZ7$rd?br%X?!BfK`%am1cRvmX`Ju6N*Y-hJbGKL4=nrn?(t4nH-;pJ4ZH>1H;k6b ziPbI>+>(84N>jzRJ9WP`d;B!{{~O9R#Ig$zv#!+_`g>_PS}5ERo}ONrQ&h#ca^@6 zz4oZ|^o-a0OO_q5`FB~lK=pe3`-3v9tb3*(5@$90pLdGaValBDXaQ7~(=>Jsz zZtZ)?e=q*ZYjN4Xy21Fr{{E3tmOt8E_D5EqZQcLBFY?F7qyzREf4Y9p`@Q^o_f`4Y8#^1mNn0OCNnaw)qP8plTK%_vCR34rvw}|F zT&0_S`P7zUAr4Ka`mX6+5!5^tdGO<2(UqSk<~}$zsb=BgMGyXc<95wTQF1w*&z55p zyLVfklGMMCdwG++j%->kKWVLzk6Gg#kvp4aKIS;`Reb8B%SMgNW zWu4K}OwG1_n&{Y>V_EKcUi4{Py~+H_y_?tU^0#f3vR(O|>-*yGhVS(^mOql~DvsKi zwX323x`FM#!nJF^ojm_H^nZ4mZ%W~Wce3C2f2+xjeO?-H@5Q4_$vj`K)t60_c)oGY zbq(k0smTY=FS%{K*pns8}=I3X971TQ`yXWwzmEU^>-5^>M|I1ku8POp zWbE?D{{J`Te^vYKrMf+pe`H_oUwu7(j${1|?F@gxQ;C|KGmT>s3dCovad2IFPK`8@J}PS}eyo1SVr`v1V1<{#Rp?7i6D{y+9Q-=Mz!$A`;R z761P9Y5sYp)u2$n>_PsC<@*_!R!E1`FZ;pl!O$q4$#8z=Cw?{t9cKpFjGy6I_E9rp zJs1ABj}Lr!o+&Tn$zzY}T(6xtxV+qQE5H3-ETrfiofdeN!C}h;*Vk41`TCXKc`;38 zHDy=K5;;paq*BNj%rz*8Y)q+1d?%=iJap z>~eaq;2FcZZo}u>Iak*;E(v>CdO&frdyVb4>+y2wTdf(jlEwJ$ov$r@`8EAlLEQ0~ zOz%(SzqS*4-M?63YD~HFNuIV%e7+x@7!LosnlANa&AVNjSyigMs^|L(T${O(-%ILh zt2Xz!c+JnH{}*ra3!kwgKjPID%Om?-F0_4~d0I2iC%}*Ubn}AiUv{m%t6Wv8(U4R& z@#4$}Yr4-oxHzl#cmH4AwR*o(xKeTtDDQCST{G(h4+E?G0ljtYe*03_FwFT~agmon zk8#7V`5ZkATK_pjHe@PrHT};$@F<_l=H6q~YX`RNTf$CuLh0s@~dNV1BAxVSSYE1cUzV z8_Y6~isSMaXEHwM+Bom?-m+hM1+qSjr)y*@Z#A~A`EdPBqZNl_tYp?v z$5X9MA6~|M-Fk7c(e8Mo>taFvhH1`WOaWdjPE|eK+y2=6%gYSC{rgJMCXHVoSr;i8 zpOgO7bX!;T?4uuD4Q@R1o+Up_ep76HRO_UI$NgXPV-=#>ShCJ}g{H9_k&V%gKmGds z&bljq_cLg}wpdpAcFVK}vyPqLeDbdSqd1-HL&xH|)-p8kv^}j|HbYXd=22Ad@AHk* zXO#+1y%naI9-EbKcm46NCsp&(_U*XsvE<6{>XcdTUH(UmGbP#g{(PS*w&J&p=qEGT zqO?UKl{@9 z*n%>$2?rGm1(yje`^298xz*PE^qx~tlE8i@`n}o&wu)_ z^M5_l-M*@`3-`SL|L?tg+{dnPoi4rVK>kbD_kG)XxI6C4BJIHUlZ;%2_t}W(ER#6h z?y<~tqvG4d>YeQ8W9q{`)D)h7tZ%%Rw|xeAr{eL8&n`Pub_Oa47z=rR*^ z3)GICdC2e4Up1u%Dw@^WMqFNh#e6*rTO+<7eYpPrGvUMj|K8NgoqIRmoV%Mf*va$4 z7T*n8ng4xey4TMCy}~`xLG|?goPV=CJ|FM+`)$3;hy5oS>Nk9lW?(ofukZH5T)g3~ z?B+ia)#vghtP{#DiodPVqo(N9&sT%VS&rMf6Ly?ej*^I4i#&fDAy3VPiv_V>Y_g+AhsRD7Om{0o#2mJmGu zbl3hk`>CI1?9y}Be!tV&!dkH}ex0*On*8-QdJP5>k9XH^{;uD2W{1B*&oQ+o#>m0~ zuN}vtQeCrWai3ZeG1=+8gEw2{r$3u{4gWc3$Chq5&alzY&+SgJ-SNUTH~#;U=~M_| zk-6HJ5%|3>HNm~MKlQV?)t#ogs8{~8?b*d*1n-($5OQ>oJ<|Pp_5%S2ttV5zf0}#e&Eu!3Tpm5I71)30 z=-!*N{mhlb{RZrJ{_~||?mzZ7n=5bQx9`_vW1Y6tN3IJBm1D0zb?o>}huUR4uRa-T z8(CL9e!qJ0ak~|b3wG4M-og3x*LAC&mv)Y?@9X_NT#?D2;4w9??DRQz8})6ua*Rw5 zT8%d+FdjE=U;So&3>z1N!7g@&s>W=FdA@C&QyiKq6wMeOow<{zW4z>__Se3H41&@O z48@E}IT7~n1^H$6eYN!8*m&Vr|GzIC{moxp8x}PPKaCWf@4V<&aOU;y>}DQo+wG5c z{H|X9<@)&_zs>~Tx*PY`Qgp!q=6UXWe{D4{*>^S9dX0?yM}_kYg4Z)s^8rzQ#Gee1>oBjO^QODPIEjyC2-pzV8Y9 z<);in#eY90n)KVdKX|w6-w%i73Ifl)`1AA4U;Yu{QQEryUSn-Q|5M(>^*R=QD>+EI1QlA6`4(QEZFmW``@MX1&sPXnV(7_)q!v!PAo--HQ7A+3M6Z zkNMiy^EN>c@>`{7WpB{U} z^6|~k`Tl_~um727d!V%0G~mzghwoUI%Ecd8#J}vowQa22CQs`QC$Wg^y?04oZ_Qs0 zi46N&wMTgm)V0_DpSF;(V%b!Nrf=5s%$NJ!4~)>1Hq+}dc5o1r%q_6JBlxcPe|FpZ zs)N_3q>IP%F}bML91PR$7Efg`_@1MA@rBUJuOB0I_y3FACfE11Vx43~z^h|b68+hI z>l@gni>ui0SjhbQ%w6%Cy}NcNq{+RQDH>b$%cvyIICy^A&+2LWqrb1;z537H=%dq@ z|Mz=8$$bCMvxkf4eV%iam79S<`cv%ts_P$)sM{6pwJkfbT1Nc4^l3rEpypT3kBZor z${pDGFXR8?7v~<=>qpgR&hO=_+WP-XLwPs@zt5AdL!a0;uV@TdxA2W}c6_HyJVRUe z;rxBS|I6O{H~YP|=D#zRMHc&$Luv%R`>ve6-@Zk8>Cfgv`bX!L)U*CxtY3eIsbSa5 zNBsZ(efWJ}v*~l>=0EdI%@|m0_k8nNl^9?j6)|)EJWa;Ct6pj@*D$!XHO*1DcBA|L zbN5qs71hr3RG4~Umgp4?4Z{OhHXUdXxpU`ggGsn%-PTRLtBogI4BEc! zzLL|`As=EkX3M8U9-Ol%`uFDr%M!Miyv#5>f57vMScA|_z3qp*GFw@vKj_p>>I%~T z*8RM%JfSB~#q_YlYmKPA#<4c*+I((4*O&Q!V#R?!v!x`Agc9V_e&xI`);liAH*u-J z>xVx!yy3|6y((WV^uF`{@vZAV)!r*j<&R00wz#*crid^0rm)A6LXpLb!`K$Tc35)i z`PY}P@13_^E6LB~73Q1cA2+$s_Lya6=C_$)bMJDP=zaaQ`Z~8=G0&%aB@5a@YMN%P zt9be`DYx+N@sgRXuM^Dv$#?|RKAy8{wIBbQ7dvHlT=JWcob~rgPt&znr6u9A*VjI? zZ%R#J=y{xSy>f#?BjXv7gmdnyp$eN=rdZT5a2~4oA>|W&-*tuJgh0(B^vv9 zw&)CrYIg?__YHn0y$u$~DaUCC?DPM4zL0~Z$Fkx{TLaIQm9iabDQ{)u9R(L?yyMI{ zkmS2As4DF5I@!f_suLETajHA}DPQjYy&byJm$NJ`ACLThitWkb3-;4{zwg?=_xIiR za{In`?=MMwBK>s(gZf8%q#6y@ml(<7ce z!t9&;>zYY|27IfJ?Ptq2c@u=CE;iiy#=ga(`d|Y#W|Cz2&lJ5UKe_xL}c%Oqw z#9#Bs8}nXKN2ZB-1-Cb`7`Ppnw~;a9C;Qy}DeMfv3s~4pE+k|hUiW+-g9O9&NsrYf zj2Z4flq@|Kk&$Y4>`D^@^R_pRY~L96?Y>`|C$sOX^n9B;6}oo?l-AxoKH>MZ=64f$ z9k}e`122Xd#6`AbtKK`VzArd3ERVx0B7V1*o%rnqbJu^X6g>T{Xu7m?+RxAPH0!@z zm)W;>`|Eg_nL3BBY`FU6h3{XX@0=xn-0eP1tP5LUSNrS6aXYg+|Nnirui>3ud0a$5 zfIa!@qKEGa{D3?zwnguCtutaKEC_9| zY`E+6VE*Z5*)Km^-zWBcS4d>uy7%e-e}5nDt^X0e2LpS#(oKJgbNfYZ2tBoDzdAd}%d*Pv=hUxuaqp`Y;=?zySm>|o@mhG|nnV8- znfLvMTo%_Z9`bc{bmXdj>Zj?k_x<7rEAFq%Ny-iBk~_A=KzoyZWyrF>In!0G-FNmI zvXdTi(i~)+TZ=Uy7 z4;=qqeD6Bb;v^}z<$HfuF04B7XXSJET-9t%qvjp|`VPPUy<^Say~V1#Cmi|ox5q)+ zt?hu)Y^HOS8hg+2om2=&nf@c{!p~Xf<&CDXB>6F`?5$wX6S%&~^Z%Z6zvI{W|LXp? zy6(s<1&#xTP1+1izZI<+)+Jx5U&g4S;h|$N8XYE?y!{z%wtZtudo+GZtAa}4q;_D;jIp+%--~8$A zVPt2nnV&u9QC&xJTr*Sdk$Stu)lanp7F=I%yd*TH%E3WiWyaI<95=2!o_4+~r{GoK z|4O#$|M?$Gm~QmizFhsUdPDwK=Z742^?x4A%gcReVE<7W6n69nQ|Px>tJm8#WgU8S zC{fBwr=532gs*Pp<<|o1^k)ZoJpTT&Hq?H*qc?k3*BhfLCF|%wQPlg?ugi-XR-3n*|G)K~cmMzR|GP9^r_Is- za(vROe4cOZtL2JcC!cc8dc7+5^IP`?_S~<`wSH~*^*)-xf#u(AY39F;|M(3W{{4H- z#n2!=<)88La$V*Fd7AS2Y(Edjf1CWJzLC-I=~Rc?@7GV+mGO7VR}=0nQp!^wcjRq5 z=dDq8%czlSz5Va4(+p*O40Ie?wbM)^9yql9dJ*=7gX>37L2Li_MeBv%G#tAgrk?f1 z^jP`LUIi`Zk2(EQYPYEeG(NO4TIN@5pxMNG^{d5gXDI_lW66qw1q#7$w|=V*`?X{D zGM(R>E>y2+POIUKut+=8rFqo#ZK-OokI?tL8tBnr$|NgV~3AzcJiCz{8p(eo19_MYT~^h^ftML}yVyV8T$M7E|!KfTB3v-W$O{q4x7Rp<4%_kN9M zp1^Sa%cY&&oB0ni==S>rJ`d>61H<slI}!CM55&qDJpMgSoaD%HrZO+v|Kr@J?<4=kZPj}> z^H=-)>~-~N&9VQVSl`)hZEfv&++UAj-lbOst?PEp5*D)FJm=Qqr)&4+d3{_j`s-fe z&BYN<_nrCbuh=EEyzd*7V^ZUA7x3Z^6 z-Y`j&agtNs7Az1Png8c#IdA>9aCuq12F-$lA>u5nZ|ygDbGv#0B%Fk)ME6dE_)8KTofPY8AckLVU`)->WJoqxxSe1=o?O!H_ zjIZmb*0KI_?qOPXQOHDM<;zVujt(zfPcOR^vVW6;4FC7O*9R8W#ZGU1drRqj-ImPD zS!E6G;_f^DngvZbb4n@tp_iKd?$nU4k8d|8rxofJnbdvv__HAJ{mq&4|1SLe!%wq& zmAzKnI+5Lnswe(q@80Ly7`jn*&zhHWg+%?|XLBd)aC&~NF1+Q_k8i)kju$2-njUB> z7HEC*@6U15r4rJD4lmCppFY&lwR=rVU}6sg`}*GO-sB#$?Nf@=l>;KL-+E=7T;uz6 zt7I&rMN;iDFS*54WuJd+zkaMZz|f(FuPW8ud(%1dXU*?-a&39M?6Z2*-`599U%9TC zfAPQV*I4~^tk>mkYVsUnzYzTIonXL&Jrm!GTrZZ}f2Y2AZP)*L#u-e^Ze9Di*Sxj7 zlsqFtfAzUHw}hFsfBgxL6hGm1G}ebdE_AczvSVS{#U-5%Wi1y)ncg~e?OU`&=~=ht zOO8wJ?-%ZQe=}~!t5yr!gFJ&}5pbCcvS!iHS+!hSBy$-eS%J*{5ePG6+vl zWKd{mdN(bCA>sDzqFb9fntz+stFPH7UibNOJA3`Jtw(?LU7w*!Dr)0^$ zpXewcQW*YhdbGl8vnyOXb$;dK_b5IoO*>jY^G`^crT*Dhmv!pzZTjCr-}WD<&brI$}at2Mx<@tu9wRmvVE>?Ia;55Uq|Kl?xXMbZ(z_-5IQw+ zz5M~kIe{+@|9f|EL$)T%Nu~$o>F1@g87}^RJ7F%25MbLH%de23xkltlc4|;=^6KpF9c8aqh%C8M zBO%Ua5L`d`=-xoCBA2gM&$C5ED2Lt<4GG+wTySVj#+5F|yy$n~Y_n|chJ0bXzvbm3 z{qkkYpBHvNuis+frnTd8OLFAbnxh{(|DAic>%qiZvMwj{)bE+?^VU;7dRKvcezxxY ztxbBfs(Mrd$__9IbU)zxt)8lV-G8<9^*;8F%tuwQwE%WKUXg69DRa|jMwHv}^GRHL z%RQ~`$7l1N&KZ3AzpLF{&415c%*uB!H6SbN-_Gqx@+GNu*~`~_+*`q_vw8b-mNh!T zeS809p5Ae7&-~jZg-J2ZGOrsxpZILE?kPvs&ZHTP0^3-#9W_P%&JnJ7p}e}T`0mxO zA9qQWbUL`|X)@Ka%zj<_`tO>X_HjXW%UP$%xJ%vosJ@eBft~AFd&Z^rj947n!Yw#b2{?z|VJ$%^ix3QOv?6=)j|JoSpBkNYgeElRa&412sJC6mYz2{c+O)FV`dTQac znN$Bs?dkaBuDkik*NUB+Ug*@{oB1hy_nv1T+K}bFJ6qyK{c=uXm4RTXo{9nBBiyHU0^1CNr>w3sDFr8*fsF!@h-(}PE(=pL}e?9jH z^{4Xp9Z%kN|HBac$N#;=-~V$AnGbLooc`Z*FMpODi}sKI$!uH?1Tq$FN-8>&5gKfl z&$VL90$CY`mVkNhGd@1e7#f+b`@W~nsN4)w1R%^tgVMunI3!p@OXZn?Bds6Y=%{i zjLABzMzc5UQ+gU#Em(ZuuYWlUdqIuu@z0B|*Uzti7d%(L@Xv+tMz+-2zS#bQj{_SQ=}8J3W8To_U2L7Ijwj z=DvdLY;C{$8WjuPtYW(Ns5Lv_`?qhQVqf}swynqoxkhxWYrgs8m~4hG&3MLe4}6}!HYR3vl1VAkudC<(7lw#EZEp(t`)={NKcCl~I8wZXox^2+ z{SMZK;=pUR{}!=-apZmwa$|k$_lI%XKkw?)->dwTo-g+7%csm1XE@L-_hrFDW%-{cUJ3Po=-QVgIq_ISUr%rB_Fo+)es_(p-w*!v{Ns1_ z7q-QJGv7|1@@I$YJl<=I?wOWHT$b5B%}Rg4vFH2W*?X@KX73U_RQRE)vef$j#8827@BDw8v*UNy z{rvg}}y;qgi!?VcOP~Yp%3?_+V8&924+t%2_JpHZPu3r`Qr*5`H zOU`+9_y)%x!P#2hj$dbb-T!;i{KUWN%nqMB-*erqufDwE7lZ4XziBt`Z+pG1FE@G` zL!bV;n{I9mkDm8G@6h~NW*f`;;C+6NdBcrUd{6S94k-|A_}{pJx9VX?Xho+M1g1*Y;PR?K#uG*ZAQ<{<;qz zw%7mOZgc)vaB0Pt#qzd)PR{>xGBs@by|+69Pn#F>J4UU2pp$<*rvA>4&p-4RZ>zOh zv;ULEgeLKOpLJXOmRmeqvCp!9z1%O=8T>8tCKYinE#`f=TfXjV?%|ci)~+x0|3CQ7 zzx4jP?oFCC|)3Os;TGSr|&*L*Z-YmoV;M^+eIv#k3R0{WW06flf>U;wtp8~ z-W0w6)ja+>U+q4|J)4fs{ac)P_xAZR_rx8~7sp2bi2BaLHBaPQ@&APa2TnUQaM$;K zNfzg@wcn|ILo3&WrB^&@G4-ZpWToAxy`8S**C z*2^oL`uBcLv)}|n1+RnOBbMJZ zS+)6|dzay)WbP$P&DU+dqrPtP)z9yzrG>XG7Tx6kb@@{{y~oGQ47AtHVA%WF$*b;d zpMh`i`P}v21?_%IoqxQvu+X8;(1*k5$Gw{k>wio5Y+Uv*`|nqga?PtrdPgb+6domC zeD}Z1w!rte_-pmUha^>51Vn`!-+uVAWU1fgJ&!kTIrmR|!}6jn?^gbq?$65bAby=~ zjT*-W)0n-!-xwlz3b-8%_WLrkeXu$5w0l9Ln2bQWk}>lH%>@q{tJ#Xgy1P_@DQD zzx*vjuf-pjUitKS{lDk@@9Y2nu53$q|LE-Gd0&=11f@>R8}dI_%RMQ(z`uFr@(k6< z(sJ!l?P8**XTE;Fu<@_p+~fQGU+=VDvtRDh+w9q2>X$#*xj)X5$4cZu&fad@5-~5AF9unEuV(&QKrl=i{V9=QaLs`KNr! zKB#E!_Vc@cCoo8qUSDG^U~zu7_ko$l%U@~*9AM>AW?~fiE1zn7VSdv#SMJ#vD>gkj zCG_G%<&r?}89mbyIPGqR?^wF%_l|2_=C58wT4XAw&E?X2Znrw{M)$SYt=FGh2i;xV zzb-oNYJ0^y_XHItcENxSyKANYjjzUDdG(_q`}dXG*1EqHni(=aD@{mVYV&2P#df3J zOsBW$OgU!Anjrc3lice)ybB_<&%M*OGyQ+l{nl^k%PhaPulqCoZZK~@)4Z9NEH6FW zTla10vUl#PJJ{KLHS5<{oD2W9K5qFxmXwm3y|JBN)VsCkZ+dWC@xwp&>k{v(-x@L{ zol`3~=9bdG<+pzP@_)xSZ&X*lI_>|BTfbt?PL_Q6BX8pQ&+GqoWzX%3e}7!#@Ruhu z%i@2}6gsZR+%A}N>Lx1}o6W9YUm~<_vT9^6`a1JPau%1#or6A(Y`ykc&kD~U`P+S^ zz3c15<8$>q_U`;(eC6(xTb9qPnjgJyXo&vqXu@!s=lp(Qb-$j#KY|zdvpF)E8M!9B z<1c5>_{qR%=El|#$lN1%AbZ<(f#%ajEH$5k_sA=-9bf?Mp*q5P;JbhAr^W61|0lWc zJT2=mcaz!$xB7XPT|GA0+)oAee~~t*A*5tG>d&b?qyl}?9hkB>vx|ODY^7ke?~yZes;AB zF(wC}GK5wBe)lZe;kWte{k8j(9sh5b|MGQxokez+-Ma7t_EUBzHyrr)Zr|UnEB<{e zKOgklv19LDrN8nGnhB@ubzK-F&irbVxskxpbBNoKk=412OM+$2iW$3_9-s2?y?VZD zZtz}Jh2WX%MZLMaLqa@n_8&a4sC8=BRPH?@-yW{N7xlnsLcqDL7jNCyk`8V>^WwNn z^Rta}a$c@E$g+IZWW$C3WH*0oXEo8Tw((rTab!8esm#~!UEk$BKiDYP|3|k$ZCCyV zJGS@~`^~P~w;tNg;Jn2qZT0rw^ThW*e)Gq}qCWBRg?V$YPW+x|{ohc`p(Op&x1$OZ zZt(Z8t^Ird_V!A>WP!_f>W}^@aGjG~efZpS=HR^7U+0SMvk2S6|5P#0IkrCk@ApQJ zX_?D8=cMyR+Gmws*I;FLnSGbH;gp#}zQ!$A$L;1Ed^=dZ|4RfX2+9cT{OhyOKJmVC z>;l&`iN1rW2N)V2KhrO$kv{mJhe6_I4#W0|Y61ri8d@(l7mPl1u6zUgg*N@VKe~sF z=YRXb#B?D;E;;{s%tu@6)uPFH8&-|31&R z|8vCu&ym3E=F_IL?{bR{Td04z>)$So1Ph0XEY$_c>*{xYt(W_++5O)(^Y24LpIv2w zX2;vpYXscC?5!6_QD9&=x!mt9pZ%xz_o74?e%$W<=3igWvB70t_ow>DwO(8P+Xg=q z7yRctQUBlHANOJyBtGze|EQnwKY`=HeOa-m^6T&3m0f%%%HiOneGT~%U*+|$ofQA2 zd~jA%yVCshrAAx%PufedqeMPtUoE z<8Pk-@^jWNxv8I{R<3=1f2N4s&Nwl@wc2Zi|MkA(6)H=vmaXad$gIR6pj&vetG6_| zSs^g<+`e1E*_W^L-nz6&@Xn*QZ@VwWXbaqmE|k@n5TE9l5tEU66DqeCR>kP z`OjO;r@-eZD`31^{K(%Y4D04ISN?tcn}^|oEyHh)Os4M36KXfcHZjlBSjUhm^0s$M z*~Pzt{0!HX1Qe#!)%0io5I3J?dw*W@_W3&(Gu(Rm&(ONzZeR=(gH_GN$9Zz|zTU4* zT-n~p^HfSX;Qqndeqn(%2fAh_eCKYM6ng*qcH_l0?^BrPH3_<1XS~z@OrS>GpU4&lhJDYg_oe?>DF18WY5l#yPTfL&;g7Ft?Rrs>JEQe*)W7GyHm7FYR5|~6 z{l;DCYxduJxRkxZ<@RG|gZlgH+9cQ)d|oZL`0)MuH&;F||Gz!EZSwWl=r!M;pMAwN zzn=BCw%x{W^34AlzwxKe3;cJ{?ZPkdgZ~e(G%V_$QWwVDqHvUr!J^>Xo0~}=-T&Dg z;k{$Iva>UcYg5Cbt=7>SH5`6fXhk>uUiIzI ztH*m>zB6$?kb0f7b#m$P&mEt4MeM)9J}+&bOYA!Lf1-QCy;f-()P^xN&cF5P)UH>*zM6#Yj+`DRx58WSzp=tb zzrTEXSH2$KwxI5debkZ4y}uis7e0tO|E6=+Hu>k*zomG@ONc&|I@7h_hRBDdrBUzq z`zF6qsINXN^WkS|!KJFVt9fTe3a?-NxJGBsVt0l1-$AeUr>&XtQG4~lgXeGcp1jW5 z=>B8J;8||E}PM*UgL)>>6J~awdK}C=vTjGLz{j%Z6J&rCWcf@G=HST1iak7w{nAN&K!rG2}~cXjo3E)H}i6vZG5bRS(srR+tJzs|F}AC zY};k`d>K36{V#X)V_hz?OCJdP&9P(aDwF#1?F^bnW!%eOPX67nJ~VuRa>TB6a|EyS z7>HgzHu;9!J%fV`64yO-uu7z9_Ii5f&cT& z#Q&!_f1C>6S5)!RJHF~l>D{%btaSjS^_KFdF4ufW{Il)~1)%5duczjZsA56E9`+3`3-nt1)5o{k+OkVMgIq6|rmQJn6WZXR5r};q8YNkJhblaaE3fm?Ar|=>EFf zYZmNkcy-PFYv=cECBN_RFL6D5y7|jhkxSQ_*6z|^uwH%0vGv8`IPT9E54}u2`mu<6 z<+GE==e>WDb#c2<`s?*mnxh!cd#ySap(ieINA^xYl!2yfX>}C$lUE<}r>4wL*A$gp za_N0g-PUOl;-Xniesex+yt&R*SK@s#_vsHe`3F`>dxL8hZ~gt^Rr>!O%c3r*zHckj zsmSNvapeI6W5d2lXFh&bC=#srSXi2E{(aM(_(zeGA|(swR{Zo*mw0|XcH*X~R=dAG z`S^W7e%5~Nr(5q=TmP4|2!7UlhU3%5>4$p0bkEXWcf9KVcSqs$Z(k&MKl;3E%!zY< zD|hAE`Wz<7C!NXn-tn%t-@aKcd}^df$quugMuv-NIr|?k?mp1CHdW*A?c3qgOG9Hg zwtcu8_VKZOn%&??2iZyl=JWyERvy?{zzEd;Fdx>&Kt(y>?01 z-LwsOKIszs>t8dPDxx%{4|2TmofG)@{+(kLW>@!rvA-|ae5kx2$MtQ|{nPr^zw9qtap+2&`n!x%#4=Q(uBm?E)a<6Npg&XD zx842L**{zkJWgb7T3^=X+||%NQ2@pKn#1Wnq!;&@eMt zp-1Da{IBERH%)Qs=)Y#9HT_~zIQP~);*Sq`oSV5y?sJ2`uyEwQrchV=RL$ipl(`oE z(OIhCzH^%BZP7~^JNy2vT)y_ZKv5LXL>7-Qfv5Q^3b=Cj3{;T_cvQao)|;Q5)I||HJRJz+iS#clzLUS z{q-jHm{)%apLKlOew?9Dd{&KHg~>1s%T^-?QFoBrho}7}NWkpQVX=!-%EQ@60F)&2~&LOw^fax^F>X_m$aE_ADMh*035kKA&_= z`&5&^yYxozMrpbvOT`C=lGT`kBiw$#R?Lbf7c6M>2DBaPT%$W zK$DjJJncLOfeRh4r}{E|YUn-R)OhKb$f1;1-^(-=x7YvP{@F%Xea&705r#&F z^+!%iPc*-6<#hGot;_e%6#otS_v~YT`(4}8znn9l-<$C1WyzUM8{JnY=q6nM-Ff|B zwR~gSkJSPHg%UFU_&vQ-cYNo=(Eq=q7wU;G6leVZt>+)VB@;t~;7{L#+cJ5TM|3qG z%-8s+72sD+D<@ucg$y zp7z3mEud{>%tXDY-`|cEX1}~7Gyj(P{HM=9Efev(8~?jkxk0QYK2qzk&Cwf7fA+a6 zw}0Y$wYo(i@}8yJx*bmsRBm;ee%*cjyj!0xZ9LLjtmL{QEoDc+TK4?&?e~7~T+?fL zsbWdf^&Ya!_de!)U%kigq7nqo1+;u)1e67BJ!*BilSjIn6<>e<%W!~BUW^TiT z8|!B6Robw^dP#TfWM*#vv-{UKuek90k9&ew!qqFky7&DSj5+c8{`nRenUHj$*JWzW z-!C~D#CO|1V7gxzdp+>(U!P8%c|2h&>elVub1wE_zm95t;+Ai}D(`r&m3V&cxYj%6 zsK=}v5owD%zk}=Wk7S<2R(9jw1G0D185kbyb9#S&*`oC& z4X!`kyBs!uJN$ls1J~kD{u2(|VSOWZgv)_{n}Ey*1|Nnc94g5P!kVSNx9>Z(F=}() zw|)50oHzdK6@8tHAOFf6h1Vbt@9V3>aR0ht9q{b9M^+L1`EB?E{A)MXR>N| zKiOt5vElsWOAKO5Q&_$gS2t-N;E-LTeE2MAb3w6e?XK7M!RPn>`I`$mX6*OP^UwAj zjXOLWv>ID;CBynZ*<6LQS5-<1ZCi;rs)jw47 zlz)ochKGsPPmQ0ith8b6j}n|(n}2gfWJ8$!tEvAl@Bi2Oa8co3eTlzv8ybWDYCgCx zJnu)#!#?YG8krMkyy`#ouT?ggLFB%h)}N>HO@AJiZ~ijh{yandueYGV(Z1MV3D%=s z98YIRvZ=&esB--EVUfJ+%JqMrJ&xFYAcDI=#L8&x9Z_?xZJTDK1~mR#RXRcU+O11| z*{w|BvI?tA{$!kG;up$b%i9z%@2-SWt<|=JQz!BGJ^A(}iQ&k_E-rRmH?D8jx!%jz zFX#Eb@=}kQ-s(EeGLEiSGyKkEzMXjL&TIQ$(_fyOr5(AO-}v9IZM=OR2N!PhN#9>~ z?``q1vxgia^kmYla$`2XyB&Z1e37iii$?x^-?j?gS@b;cU+sDSM!tzNCtg3W^qPIt zR`+n$M$y%;&o6MDbKa^qQ>I+LJ@svGw&u5@t8u*xdZ(P=`LSgqS47>m71s~y^;R-Z zP}w1>z-1R3Tg=?lR6PQ*R@u6FA;g{xhOi6+Q zvwMu$;xA1+~FOhK}zfC3|%zJUPf(TN~RI z6E&apmkp@6v}auM^}yDnMpjyXi?d?o{#Bn;_h9S@X-MtAxqs8y|3CWwS5%xymMi`d zbbXhyLU~wpQREz%Bi_thSqEd<`+{db`}O=|fA_Z)X0LuI#0ET13VFFW`hSJYqk}PW zEw>JEOMUq9;TX&1mD?g%=19q0{u{V);iYE|t;+A0y!-gkJL=*7pBv*P|J_!9r@>{Z z^x=KH!K?ijzb#y{*tX+K{nxAEv#%yse|c=qUC;UJxW~T=%?Q8-m0kAvV%t_LBrR^WUpH&Tn>48` z?S$vbMwgz{+Vv?V*^Q?qay_3E?No%%aWX>VsAusEtSL7MS> zz@Fx5g%e{%id5cCTexuAH7-fJ<9nVLJw8x%maFU5{mnb{`N!)lxfi7A zUCCa&{zlmAUyF81${LHW_>y&8Bh6>R{8}6SM{h41niPcIao-unDpR5mSlqJn%NdS6 zr;~NA{Qa`IJ^b1I-)|P~`ajb*V13s{)`aPd418@6DyW_9tzK&w4=TZwC18*JA{(I((9z*IJrfz{xCypBG>Yo<#FqN`6wuAZK zZ03h+i{w*Ry|{OSyP~}0Q+R#rqubW*|7O3QFV$H6`-lJfo?p|y?|ol;cDBqt?<_Vu&-y>_=Nsi0 z@(&sfU;P)}|HRv;&^}pk!gjaQ_G|yUuH4>Gm+*XH+^-x9vadhEL+cf>ZX%5!EDGk^X4-2SCvuJNX-=WhhJif+9X z&|NEY`q7`?Go@;OSuX#2ujIPIIsKbaED|41&9sQwDc;<@(fiA(9M-fljyE4Ku+H~B zzh=R&xxEvUg?_v>ly=_Op?`zT$5Q&ZU%4v-!~Kbj30!tb*BX-YAG}(2^r6FPzd1Lw zx_%YDVRhyp1A~A*1LHq22Zmz@eq}i_cJFR%e7aoMV8JFPgUt-*=j(Qt zHWq&ZO<4WdRR3oMYi|6PY8zpR-3`?q+sdre0+pK18OUR>m6zh>6@KgpVV(pK5MJ6*XfwKi{ROu6m}v0vA; zZrex3tn6#56S=l{>dNI)x`XD&^2+EW>|JaBH>+`e`LA6ol=F7K-?;taRPOirTQW{{ z&2P<%iH^Qs^Y4h0!;x&}Su*z}pHKIy+>)|&%8#g-lbxpR@3;H5_w(+s8>$AI{}y>O zvd;OvX4^W~Zpq)TPi+pmsmr`9YUzwri&iu3$5!c8UU^#u4uf!XP(7Bo)gbMR{QULJ&dsXU4A+bt8P2I6VA#O@?`C-Y#}7Zw|Idl~qieD7(x)TeWBd(s z6*T{)uvrOnG8|xwVP3?Ybi(X{wY|6=LqzuDt*Li=-ybwuaQmRgL-FjwJH~Zvh6Ra@ zoN70w{>2|EuhqYc`kQ|8N=f~%BkFdBciz{1fBc!{H&_0I;xDtZ z*IDL7w(r{)W_L|rA@AAKYngH!TbFj2p8e|n`r)s|@xPmNH}{=?T)*XYzZQ@DDejVe zKaOrKp4nRdPw#b)$iWS7kFy>~R#5&{T<-T#p7G)Ka<&d=8CerR9X@7Tlht$j*;+Ee$E`ei?x@Ber6{L22{t$~5#2YZ$M zZJuoVsrwfFh^+MxdC?TTY`K-egUr2K4#j>fU%N?v#<60jz`vWfX6;m6w{=%){Ew>h zTThkkQQCG}SEuSh$}6Kj8-t(x50tI6*!~rqd;93SrB#JUiKvE;gU_1X%N|)DFnGG% z|8#ur%KlR;UMz_7m(J*a929(o^@Gmh3$G&`0y@*fw^VS-bnScmFW|bZWrWyNjqS_a zPg}qL@b{Qi_9^Xsr5|{cmw$UW{e`yl>Ew{2rpTgHh0V?PGi$HEeR=);+ck|x7q6e6 z{O<94uWGsfGM^RRg|E|3_vo;i!zlK4zSXnNedirCr*eUIjy6?(Jm_suO* z6=sc_J?&$g1A`^p3gAja_HyL50u_X4I(+zGL{lH3b+@b@Sj z*jfDC%eI5FVU6`gS%&Micd!3>{P3E)?V1yOt}Ej&{Lb`TKlQ)nPG2K;|7Y1x-{>r# z;?`SO{pVH%U%7b_y21w!@HKR>PPl)Ox}84TKU+4(PZ8_v9$9VwR1Dt|)yu&?=jlRFiU zd$)Y)|M&0HPxhzxcgzxdk-vNcgWe6(=Mz7jZ(!KKd?7BTdqJahnQqeIsUHfK{b@F4 zc)H)_ogj+A1Y-XIpUP>N7V@3SQxlKNh#p$@3*J6^k3ig)%}6f z*T>dT`mrC=tFw;Ad{(;9T)XP|Dw*7+XLw`+8{@Y~I^HMEoPKTp`pQN4SA|KzIs>Hj}mzoEwH zdYbtQr^=jF^Z#~kbmll#xjRdo&8Tz7Gma-N0Rfpm4lpK2?)_YzQZ(hj!nZ$znG@$d z3dvSVH+!M^)yls3ZwB|RqqSaP-OtY6Ouu-`|LOcf#xJ#!-oM*-FfcF%bvcx8 z);XI4ewD^?h@4e;|EOU`jWMV{CBO1#dHUb6(j{Md--um$q*cG$Ve(`Jw}XLpXP5lQ^o?Fhg2|6JbxA^I@;zekJ3-kfjx6S={j!&>#y{+|NxX5Y78(X`=DeEFxg zhX`eIYv-@pGh&!2AoFNn$XoS?vm%6C`w-MX*kZ;5eRplT#o6?Sru z|EHM8fBJsgFDsOu>Cf?F8-vNKy~j({Qui)*ft>ZWR9i-f;C=twM9V4uA5yjSN}S8MfLsC0*oIn)iR>{4*~ONf_7lrJ8Sw`@6N< zRlEF-FLWre%HQ7j1#Wqr_?#SZqo@$DB;(5 z&~UeVzsJno)zf?!Hn4MXB;+tKusw}Ty1)0w?D=LkPd4X0Skl?oZyIj2e#b|L2G^i1 z-Q4|mw5{H?o7JgiBxtHN73=EWIzFGlY2ExHpWj6Wi65n}xf%*`B;?#>jxsp^dsUHA zMd19EmtXJwe|k;5Pvo`qzpu|-*uU)B>nporc4*)16>nraAXFZ{@0YY$l(XK{T^r-p zKl?SETkkUaovO#XU#+VA^ZAGNl=~tK4}Ms4@OU6MWP;DVb4yX20~4?7$G>+5&E z_m%JCFFlvP`0wni`h+m8JqK8B7Zv?!UF>@TyJKUw`7> zufw8#=Id%tD7Vf_eR`mIQT?-Dm8s{C$2lpV-=py%ev8J%<2oA_z6<4Pkl3&;j4At} z+uPO6nH&4Lb}TW>%sgHw^Xco>qxDtG(^>CVYQ4&5k%~zy?C!g4y?D~Cs58b#Z)-k@ z;d3g!;&52i-Os}g=ef4IY!s`k)1sRDIua`fH+J1fQ znSE&-KQxbjPkePgBxdUY(FbvVSr%p_o;k&=Ge7G6^lSC<+26(ca<9DK`)lQeD|Y|3 z2F(|(OjpmiyYTO<`lT|bAN0Ddw5`8u+MHc;YVA_ilB6x)j8-vt9M3G6)^JWeeA}Y# z7M(X=D<8c+wf5oP8R|^eZOXX5H%8ZqdMg}LU3s2Me*P`ntY2$R>`z&}cYZ1#SM_WT zj_mcvr_|dTB+V7$xRDUa7x(Gjv{J=sQ$=3=DBpbHXXL4)PVe1)7=pjN&DOYed)h7j z&)ug5cs}f4<&W9Gvdz}pVduSh{l|5^53p7*o41)^&xYp@tCxzmWHad2inoi~zJGa` zS-zllrS-1eF58`^i;HkK*v7CKtg_Lv?BX|k%Ov@jQA3RDx$yI>`HeC5;tjX9eClsL z^7_Q8N#$3bNB*1h^#8m+57V#5uC8BK?6Yjxg*nT0hNeV^;IJ zUvt@y?GiS+9*^SD?RrM>*x-~8%*yKP%dqHZO5t=Cjk zi@FuVxvu%gPl;nwI;!r^*C;6i^Kg7Ao?Kdh?R+#kiv7i3* z56_K7UY|O(EBZrr)~@J#tcR}De*R=BcWzndmfsfXbN)*x?)`RF{K)g#55J?i>SCG= zqaFU)1s6}huFrU1G%ozpd(c3L{ra_O>}m^=Pc0H>TbnF?itcjzNR}Gwbw*`kzhdJp4P(UuE>^a!A~E z&pYtBh476lQDP?~Bg4P`Jp6nvgE70{tMmr@aHS8C#>Yae)@z;@`C^kZv+C^8Z)<|y zy$(*DRv-R4>~)Xe@zQJi*R}i$U4Jul{_CH+zTL{!&AuMV#L&U<<70n)O{nDbKf4#_ zR$chk9kng6nmg~VtHpKw(^qW%onG^(y!|VCNwijAj=%qor_N&hd6!yaHA=FL_618R zyxV0M<`8(x=aGSULpS@D4S$~P{$KLr>iu7fAAOEj`g6PZN7BZBhj($>e?7bC&wQK8 z>%LdF14uTP+ZiGTl2SkYb}43BXT5j=Ut;3!d=Y5Ac4g4No{dMBtL!*d8pO(H@n|}7aw%XRx-DQ&tT-%c`|7yyf zQuF4{r+0Nb11$>oKg*bTUQBO$U)Eo5jg$L6SxIkP7qxWD_am#Wr;1Ftdfek{xMbvn zXFtBL>n?Q*P?;XA-Ir@{XvLjhGcN|ei&jXDjNNON8Ta|u`KNJS|M%X#cYoKv6*0hYNhTCLNFNJXIu9TtEM&w_t~2MZ&5N zN@i|0{7HNI?)}Qye|n?&D;|~70{_VGmfs{fI=XgTcjnHk{g>u&-to581G&>5b6Ee{ z1#0$hWZM+9^AFGLB=sY^mOVK&=Tu46k=Lb~0u3{nZq!Hoo~R~pz3bopt*)!=8ySNB zd<^nw@ck^!z`$@+o{_OTx}o--0mFg`kKS7LykV%=uOZCHRU&F

ER=kK@T(B64uKKECS&vox&%NlAY*XWx$ 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

um19S#!JbqPAykW^Hx=8$Ugda;rxl@n!Z2I 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

%{Q>adn};ND`aR4$=8@?{vL)|HAN!>(4w3p%46j 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%0AuP_}6a# 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ⅇ5!?M}y=)$BFAFXZ1aU0Qr+3+p0I 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 z%0DyD$LP5^&OdekN$Jy{zvNaj)I8m@a{Fp2pG#8j6G9!0&5ubemi!l#>DBC5WwZA! z&-xPAEdi&C%&Ly*FZi;!HWPdk-&29T? zU*k)Pzn48c^TW(`$;uzUOe=b8XKU`-yrOxd!u=mTQ5LyNTAg2;{<91JmH$?9ht+&z zrVG0IzwZbXt%#k=KKHhB@t(hTZvHsWc3}IhHMKF@_vS8`Sy}u2nM&h=Q%zpU)eXNc z{E}x{m!rLY_f;vz+t(k@e9h7LYHPWbgtG0WgF!zvivQKdU7oS{{KGlB6>r*}`L{~F zq2gR^)u-==zhB)j+bv;gV@9%x#OjR|-D0nP6vm#Kud6J3{PCv?!9p+QrrJu{CuY^G z<(+K0)z#lh@_ne)$qgT_uxFJl6|j z`?iVqFaOyS>&Ecl{rsO#>N6{Erq?ezZ`iO$?Cs{AGRmqEH_l&@Y2R}4%EB66x5e!H zFMIG;{bT$i*&E3l!(#o)At5C#_x|yBRl#~+e{tCF&kD<<@_jT=Q^}0vuyBHtz=GQ#_ zG->)C7bn%vMQ7i?KVZkQzW$h?Z2*hlwwd$l_vUZe_wZ)%>t$SKcfV{lPtGvgcYjmc z_4MAv<;TAT-*^@y^W5Ii&73XaKKJW7@f%?_Z3k*{&mP@t8h<^rf@RTE&Gh-%Tcd2Y z%keI$IdFE?wU4jO*X#a&`~9Dby(ELQwOP%ViHQyUHh(@8U5_m{-92kQPs4rg3J+r4H1{4&Qrz0gJyi5F33=OIY-w-R8_=MBR#~a)+~zq zZT-yZ9kUjfxy<@7RuuCp7VLmu?FV@9S5SSCnZ$o$gkvDmm;-y z%A%ZgdlqSJoaa36RD1vNssGl7uYLCRZHD0$L;3mVy^_VR@&1+PZe6-*_0QvPx+}Ki z{@wF`>jcr4LADEay3MRwV0m38{n7-cC0}p-_!0QlsMk;V?^Da$i`l2?$}+Xj4wkpS z&>VSiWxMd}er-?bmt{z@G@QMUi@uK(|k+rNL=6My|!!`hH} zZzqer`thuY@$s4BJIZf%O6v-jq^)8}z2fnI&idS+&-Q=Vv3-jAyhjGh4z8GZHQ40U z#MM7#PR!q}v?*s=+J^Lq!pLT&BEC!49$uNSe}?@1?H97Ec4{s*VojI%eJkVDV~2W< zbGJ=3q!6z3MYaD4y4~ zSRtJEZ}zQaf^$Aa_da?j=xS{qrTCV6qTF$fo3nKn_3!+5KYl#dkN?#=Ke6cR|J3)f3rbI~`gEZ7z2*07ySX$t7(=!^=ANK< z<5p8sFPCqCqqbIBkAsMzbF|4ucjsjG9@(ib(QJmw7n~1kn5#py2qW3;~9Q}EA@!G%t|F6_CIAGWFXx``l)$hOFC_ZcY+~ z^xpJdHTn0N&n(4%uTc=NKI4{a#*lM%+VPrmZ@Ag|+!_v)e41z=?Gh3a*36kzEcY#% zb>XYu55H@b&+2(9#k82W_e$!_k}FQP{`8;yuOK_^#=(PSEq@Z%Hm}tFBs2BD@-O}c z3Aygi&)5H)USC;xY4W@jh6CC0zi&N#>0kfri=E3$o%{7`6&8eYn#(Kpaq=vdI+cCq z@%-S$#oGQKY8+#Z&e=XHC619n+F3VKhlvc_)@4xK-B~O2C-CCK_TK7R&djAuSxca|e zt85e;>6K^(K@)aS{wG?>EmB*n4W? z&WzPf#swD&)t|q=HcNP-uwMA}q+*8o3<|fbd74eE6B(y9Y~pdBC~IEHHmADIoTr3U zA^G*cdt3DRTs7EcAI_*>tB`Ks{4V#mVZ7P2%HNV1Ocp8!+0zz1`8mJ2`NGt~C@0za zbI;wT)aljh$X^q`GH=F7D+g1H@-t^v@@+qP`xpPcz|`P#4g$py$F`oU{B_~FVzKF^ z(|$J6pAtB4e1Ev3OX^v2Z0`IgTjV77Z|UAx#M^aY?w)0@YOd^M4otlE*lp(Y%1OH; z-4^|gd0@Q0y<=0qDU(l{@Bd?e4mg_pvgD~sWBX)xoG;^z{zD6+14`Ftea<;Aw(H-- zc^Ok=qu#vVW5;r2`ipw~M{ke+dHH7hZTW)z+0(`U`p4gsJDR=fR^KdfCK7zCeXeXc+B@7<@z)pP&-6@2%f(V|zFq3ELh#I19FxX99GCuk_H#(>W%sG|fqD##*B1R<@PF~# zS$qmQ4bB-~Wjas3o<4!|@*9zlit2N@-W>UBd^mC+Z@O=faq+&@i<_6}OMjge#Yg4=C6r?=svzUDn~t(lezmlg+L%2^`uu`CHu0 z2$SdSvR`ND&-1p+S})f0*s|+>x`X?c`Q7hdZmkN*TgEe6Vb+=}U9W%s)M?)%#?bRr zq%Z1EfmvN$|IZZ%D_d*XIE<7RF{NHp*W0&!eXWgj0%H)j(FgO@XXFoD(vaR9GF{?p z#2mxZg|+*4Kb5<0)RCI4^{p@Vb<6y7zx3_a2mY)mTlz&>+AAcwEGaR&Rqm9+`j;~* zcTKJpcUb)=SMXzm{|@`tPdENpdh$I-*tMUA2Fi5|ZXWhW{9Na6IQF#8z`WvKz>WaB z==;%3Dyz4Y&C{>W+jH51OK&-=!2;<9#@BJhe~NoK8yF?8WY}gOcKZ7N-Gr)(_8b1E z{Ga~XCGY92-|_W#Kb8NVp04F^;ALf`{W0!28|@6bH_SW}psZ*NI{$KgcV;z6u`+A+2 ze-~f=mptrpOm1TR%=yWGdp`g7Kg{rBqWsT^Pj8;D+s4SCU;p#;^yjwkEBDNv&}61w z|98IytHQd@Wag)ii6yt1#UqbD5eN+&n6X*e%Y{;=rm#W)R~GMx+j z5`UwAOHTdwVs`!Q9p3k*-|)%}ZkBQ0=gW6fV$=P|f7OZ7b$V-UoR29_Rg?Cw>@4~{ z=XTrI17F!voU2~nzQ4ET{#pCge;wl%h%jIAl8wsz($mB+iBI8rN3*^rV~~Ug59^wI zR*on}xs_@$uUQJZ4umYc(4J-!V$eVL_05-}rF+vZC@6jXv@>+ddOweAjz8CYGi1+Y z5mvsGoYO5+yDI(HIpwN1cg}Dk*0DM^ zH!$n=Zi95oUlRVQ3X7ZABu%*X?m6$cXZzdd`;Omoj5@ccHu`#k=$-P%?Rni>=3Qjm z^7G7lk=MP~qZnArbTfWUeJl8WFn@`nWyF1f&k|ZPJyA90ZpU+?X z9&2T@S&+f1=QZC-=4I`LRt{&XUpT#FW@z#FxpHN7QRvm}-)3HX{hYz;-v1jv(__z= zN!9W17H3$0^~I#F|C6q@zwS%v|E|=)#PVnT{ff(<9!Rf$EqwYL$FJ4#lak}!R$J_! zxGtlg+ib>Fkr!Kcbn>r@6Ggx`EQLgFTeQx z=EnMsOePsB=lu>Y+EDzdCih?aS(7iGH+a6*)@=Dz|Ln!=+H=SMUOm51-bs7i|8HI4 zdy;-G%m1au%&-r1bVTLF?l_U|c`roMzRY%(=V4g)MW0LO)Bo&=2O?bdOiWQ&pe3;P z_*|XWA#qEVaeR7a9=%860*6J;+t1ZEpVj;Q?|Pd2$=u?-EXM|orrcc}8VSsi-n%!1 zNanOm)eV?i?s9nJ%aWVdQfG2Ye9UAz5jZ(pZ|jG1`+r^EzyHsZ^Y@%)N3YwU=XRi3 z{)0oPNl^hq9~+B8z~X-|+OINg{5b!`NycTyHv~8z%l_rvz|vaxXkN#e4N{lin`)gB zl)C4leCR;y>LM54c@h_MC5~M4Gh=hlva{YQvvFc|u}aQ7vkA(FUv}uYPF*yQvERDx zd|#u5_MW=4Kc=k?^jGYPYt=J#KJ`rI%bmLiy6(=FWK-2sh z-RB;!`TKF!-z&vy#NXZ55vuk0{i)~XkH?z}`|pd+JX?FJN2q4|?~Yx2o~8Yr-FyF? z)Z*67m7M9ePvlLCDm|jZ|NgivWpgq!AYy((LMpq~YxjL-b?c4Hx_^8&{Z`u}Z0hoA z|3R~jyI;>bEW_r|E@gf(%1-IL-TarUFYGrhICv$??`?vcc#4YkcbjKiRa2CTf)!Z( z(i)Cd{`+{w^zZEBNBHcX@Yv2_WZZE~>)-vQ7wh&Ib22@MNcj2Jvi|Gm>Hfc`^j|%` z@iG7M@ORF+i*xE{>pYX8vcN&Palmv8U7_mv|xayhTdl~=#d z9cZaHVBq8_2ygItV)~{lXa1VaU8|$3`ve%EYXL5wf4y5=_6=VSZ$a44M1|=$m+bs| z_WwqO=rvz2)Q7&?y+&ldKzaR+-}OrMWlRk{C;HsoY#G?t$`~0+-`AYB4<&nd%j72(kMlcJ5)Q!bo>Y~0C(syXg8+m6R}Qe8#YH6CxY zIQ%l@m%@7gxD$(98a|NiOp`(LI#J+*D8*B5!#rh@r0yeAkMzIpV2?}=jg z5j)2tMYZ6ezbE^HTO2$8UzO;}cMf!XcsSwAtIoOSZJuA%JTGm)WgW^D-zV@qn1$)a z#uXubH?C`33+bI?$IER0z47?TqmMs5|F+=b$CD*FCnn@dl)n3%UXvRm|DG|>y2vMF ze)N=rKa!HdyVF|c2Rky}IsV|lnVIvfS6QyN{3RgraN}MEL8VZY<>E7vRf~HxsdExt})qfd! za?WiwZoKyFfTKl8O%lUBd-w3d`oGub?f3q7ZPDA(b&BROt@rNDc7JTTmE&U6Im6?3 zPF+p*I=6%E=E5gicRb7Z^r|H|{;RyhQJy09=0hb)@~Rf=D*bX#yk5R(?xs6oUiR~B zq-Vd}WbBkJeJSmj3HLSq3Vze0i`{;$%{RU#C2PEAmH6Iz+q)X~%o+ZzTEB6->lgd& zXInoe*@%42zpQfZ|59uH5?jUnE?fs@K6T=LaQDlU^HKXgaQ1(54=GS*=Uf$+*r3q- zXJ7mFcN(h$|Jy6QG}|U~ar@UW+441q3u}-3I`g3CTcGv_XY*&3t9dx5UDxXW7JH_1 z?d==CnG|Nce#qA`dA_pQ%rk9v*`Mn#aTac_)xNDP$@9bG`~MB!EPu)O?Po2X!E5m9 zUZ7t5hbD0y{o0q_ybM2ft^d92>D2W#Pv7jz`_g`pUu%Qw?pVX{fBq(h2=O(Bbx)*BZEn?X^t}D&Xq#22d3lw+hJn>S%ciqOxpSS;LcU0*+MIv+ z^xM9h4vu_zBBxGoWoz1Z`g5#u{6)7A`RA9}lxBtYTg=)2QAc=A(ndY~hYT4dDnHvKms}I&<`ll9+gBNRBCee2+O#%s&gNi= zK4ELM@4mmoZZio6J_)RUaqIl?8AUF0p3nZx9BIYka%k(%ozG2_A`Y(k^PR^*S@W9K zmuZg}B3JnR{IO?^e1*Tnb@t6&5%(Rx?O3oN#@cOVd1J$yE$8R{sMPJb;AwoJCG}2( z+lBbhyu>%>54!BkH>>+?leLp&cILYH4=*{KWNz8L39|SvD#391+`i`-b$xG+*Cq!# zyi8@_xt1>Ry=H#zU8S2HFO-+^AOB&vLVwEt$=2_Jme1#ANDi}m9Qgn2r#0(q7Tx@H zRPw0ltjYfFnd=P;KF2j1vT!@i%sli!*xKcI`U596BPE7O*VfAGu9*L`uzF+JG4t~W zMK65c+=!s$PoW?YW&VWH~RnHC}AzQ;;;AM#C#ndmw#`kFa&#D z)m&kc;C91lVhXbybGy-5L1Bw8KHqs;4{_~aV*FFSMR9-b+uOf+H?Vl+{o8p~vS+rz znTVV1n{BH3<>fx-pLY8F{%DSyWYeYXz1;VWCuPomYGWX0uYAflS?Qj4S<6Pov|IH$ zsatM;UO2TkLE+Z+{cq;$y|4SvK23X;5+er#GowPo73PEq{`Yq^*M72=`IErpQZ?b4 zz=CAvi>tllO==Gm8LwJos$9!wRP?G*@vF^#(UwGIgE=d=W@M+SoauQsC!J^SBw63; z?=PhLxVG#(-MaL_m$et?KK1lMXJw;kBqiu4Veplzck>^3q!o zvlmxww_3%x>PxkWt+U;E^}jAlZlp+F`KI;1vX}jWY*|z9?B0Jf*u8BN=62YM{y+6^ zZSjpuAK&fyeD2AgWJ3VesTYmbf#rSz2+vd2M^Btf3R2S z_Wozw2iM*FGrwv}tew&Idl#P7x6Vt7JSMeKq+ui5fkd8$RkHJco=MlU|Mz&UM#b+( z@6_#oo;^EC2_J{Y@1)f;@WBQ&o3;rfOWD&KP(pRQS}lH$|`4Zr9cS zbH9Gc{N&y_4hD?x?DCE?$CckLy8CnWw8>`tD>xe-H3Z2!{K}VB=c=D2*YHu{IP0irDwUe9$ch#I;EW5bK_}8x$OqN=+RtL;} zd~xyiy#=zyEILL@Yv+a(KmYSr=4;#LWY&*Sf3M5U-Ri5PbWAKTkD+gy{8#1+<`)kb zoj;Qx;hxF1XQSkYwY6&Rf4%TvP-0ekV;lXuz@dQu-ShgVnQHe%EjE4^dA{O$70bgX zthu|~n4dl@+QroKq2m1n#xJETx;b+`?tNEw>pDZXl9ha$?TZUK>Bh^~+SQARu6fHI z%HNjp?*ETx$80_d#a=7j7F43QcCAfY!K30=$Ct2gxmWS;dHAPWbI#VY@=Nu5Je_{< zSw+#@?;HOX{(B@9x-=_%PI;~2zWVI!vzqaf?JqpM7`$8FPuqH%;{U|UDPnz+wFkYL zf@S!MO6!vUF1%a#_vxV(f7W@)@;nVF4meOU@1+wb!`zB5(}HI=c`B{gxo`g#zs)&E zW;GW}?mG5`{aR4z7hic#6`s~#3(|M}o1A-l|M}(2A9f#ne}v&n{{rp@Q_eMLmW3^B z*WSUR;BZNpC*(td_iXXo>}U1T+%IP-vZ(HJyZbahjbXtn`*(uu|G#x_fBmt6i6cQL z;qToa2c)O%|GQ^-`EIL*hZmfA59MEauOo2&c>COmFMl)g%y^sR$a>@c)o0JQ<*Z7) zpMJAJR^+{8kJI(bxpt~&r!W4?cx7whi+`HGn(HrIH>+QJ;BnyX({E~@EV_S9TiX7a z36t(K|2Y@8PPlCULpJYU`?43Z%-U#*u35-Kw^{K2Be@_VYOuu0PS3-^eUBv$^=u`A@8E zuNK6-Sfj4;vNcyth{zjpPQyL_1wKcM?D7a~+yWD!?;v?5jy^sFg<5&E}V9E>k zPk&b1RO)h;*3G))KK0+8l{25XgqUj`zh(YR<@@8@Ut4F~pWz={ULd1sbuKU`T3^ia zxhr4fxfc~KPXqUg*Zy5xzOTOW=Kqhvr>pb#7FRy_dVSmSQ$PHojvQF@;`y!k>v!J& zdb;ZI=Y7j=@0#|aN$i*Lt{UH;8@J{^VCXsEk0J|<7HB8MNrp72owyiw&NIx%qklDLbE#_WMq8c)h9@lN&$I3A zRo-{|>+CJrZ=LtI3Dzw;d-|!^!4o0xqQ2zRSV^Cp_}XsuVS{2V1GCw}OWYq+Y&V$K zysvuO$@NzjZYZD3ExhgRxtWV7cjWO@;YI0=fmYO)<}vj@4gLx;Oo$MCi16TuGbOoeK)PevCtC zSxk++lj!*st-n9~rZ+Ii$NmjI<<0?owCeZab$}o-5_mE$M zF>iyQ1H+2{Tm6@*Gb%{@U_8G6_V!0_;w>(A{kK(hc=GW?5W~By>W?2q-A~{DIcunuZ{4Sbek)^bfck<1NhTrehvG_juJRhOGWlw{i#`* ze07^!iw^F$;0j zxascizjE@Bz=GbZ>-taadi`1M{*kXA-zi7EIkshq@0J(GQ`fr5?7Vc*zTfM_v-QX3 z#z^zAeODHr*|nm&^q1wU)J+HaxSEA>jdS0>%G0b_`Z)gdq~O1!wh~gE>F1r=lRZbfsC54J*#K> ztXuy3%1@&PjlSA7#d6n;7ZixGc1Oo{tTC3z(8*up^5WxL$%WZl!_)g}{w2za-G6Sf zsFJs%Cgwp**`r{#<&)-2E4N&xv?bkVCVR$w3ATGO-^G8&hfG`l*!)3_&)toGmu))w zB(M8U`dvx?wPz+5d^=ui+nhQ_j42@g+9b&@+x8zm;Qr9=$?wlAHprj8r)%}`(cAJ@ zwMG1OOZN5G=r8zZUU&BLwEbT`NdNx4`_6>7I`a(`4pwW=`QTN1{@041%p3O4t_#~3 zc6|QjormJCSE{jyuZc_J-jEz8DSVUdRQl=jDO;CWB&^Yp%?|_S3$opl5lBdGe806U;73-^51uO- z%LDnZJblt3?K)LCytvYF$&AI5->m36_UBe{(!DbRNeqqM_XE8N!G5^fe07ovpK8|Z_?zzP*70+%opGYR(Q}#c8;-vpf`?ut~>htXXd?M@4|6Cov!{%48{H=puC8Aj$B)a!+ zvy$j7%Xc}SyIxRM{ju5a{mqhbE*B)kH*Po@kCX_DS~*6?`D^>vpE0@52I zTPKLt9<` z@=rS%89(n5H{ScBQ2u-2Y5D&j<)s-49`~B-y{|l9z3kUzC7qy)x2HI}{F(LX;vxp| ztA*zE3K0xxAC#lS`{xCU96K>zQgrhn&7MmuKNYrE&spUVki0k7PqC_t3F0m(HBWxrCY^VogyE;9AlJ5K3^&*$`RW;1wkoW6(J^_N z9Row6Snk1?Casm9SBc)({AQiy&ogBW3zOcf$!ud_tIgAppLMX!x@C{_<@tS0W4V z$_mc%uw^*0;rz+OV~$@mSG`wH*lFQi`L4_|fv4ony#HHw&T)Eq)C ze103{y*6cn+eh_gckjDj(K)?edO~pX(RpY3Y#7Yr#An_+|G>e3r-w5+ z!+P<}O@48o&;LLBNx%N<_T3K`YF}K;6S4XFor1eXPp5{@DqO(&&%wTb%7P1$fieaW zj%6+jM1I_Q+jHnd#QlI=zpN>#eg{)3*EgK#5i~HDxj6mW_Bhq3D#Ip&#f#31guSk| zIA^@;osVX?fy0Y^<<_}3;#iOI&rIYpy4C%DQLk6()_kJ{6Q1urSN}h{Tkh0nqsJ|g zY=+NoPTVBY)iLjS$FmBrrY%-hpMTGNee+Gwu-D_x_`s_;E|I2g>LH0 zy?Ih>zZKrQRb$7L5OJEFBB=Y+TEZzX>}s~6|klwD)Xw04)* zuW2hk6~52=DV=(P+bVD^-)-+C-GVIs?;D@(@(zg$Zs3y6tmR{#Qh0UlHH#U_W%Wz6 z53oP4&e^KNeU0`{-_yTk-wB58HhU-}htl^z(nu z_!}CQ9XE4mSn+#z=Dfk+G>itM-~<$93x)f9A_*-2B6z zHto#c_^GeOo<5giU}M{Io@K?i#SH$lnF`LDUf0=vziu}p!|~(CWi4A8oDF&08>Zf= z*O1?-|6>1w|Lw&S#JZoYKIXKVd!JRP&(G5r_ZCJL#|8Y|>mCXkg|%<}le*OY+1jQ{ zY`3Cw8a!H0y5=!i@@2(}{5`!O%*I;jhsG|6zg%1Ff-e;P?zqAoFHjlTQ^b7b_si@5 zcR!84_vvK&bE#P|ZK^L)pNb>Z&Y<=!xfra2tEm0lV1b?0wxop-OE+Z|AnSzl1bm+C9Sv?_(GvTVhL zZH84&8hn}c^C$1mzGHl=VvT0^A|uuvZr@*9e$y$Rz%BN%_O;zL`|EEWB)@o+`Eku2 zJ;9IbT?Ku&?J%DxmsGoTtB7mp;YRZhygAz#lCI79H`C_I&U?pItYX$1DDW7VE8(b|9-RI$8Re~=T?RXhSwZ6h!lCb$W))mHfIv&NqO?~{6SUC z9I?K#Ww&Slc@)y(lg&3FeO~b1cVA{7=65r`q-M?WIDw7XE94< z{$Kn2QQMF9&EN7%9S>dHUOJJRSt_FJME{RJkJfL0?R)yb#r5W=om>v?H~8@I!R&+c z9hug#8!TfuGo?su%AE7fubaDOvug+|Fdu9>H)YYpxV>BFi<)0vkaPLwGy8x-zg~wa z)~E0Llzo;mI((2vxVtTFfx@CMUt@3FdlQ;mx|&UOol^T5nG-*&UVVA3$#zX!g8$<2 zIeE-1f7#>z9(($~^0d6v*N#uTPs`tiNuMr#+u^X1^FUv%25UyKT%l<<0xVq=Z|^>t zaPUm0#S~S8SB2KWQVa(qww~Vkvdq3~?=pX)_x&iJ2*>zR1_ zMMG<*?WNF&)y2zgtc4EFTG=3a{;AF+o9J|(z3a0t&J*WRVEf6WkZ z?>&B9y>dIa{Hcm5}VX@6{*WZP;6AHDnTO=PUo=7S7b{!qUTeNb3|kIZ-~H2X z+O}qIbH(;KZiQ06e=FbppWGfF#OSiU`JMc)WKJ|;d zc{R~FFfr~A_kXLd39IT>uX^py?soKJ!L+PmGM`--Ba4MMRoaZN&v14)ad`X6xLj4&PJ*vMhtp2e5sqPi) zvqv)bw-m@47 z=3DM9x-&;b<;sb(3m+VsHR=p*R{!_!gpUtr zz1k2nZLxmoyyGEE#w+x;|IAldx31Y>Pp&<~i3z1u^RCzOaQAI^_Iz<|pUm}**LJS2 zwaNTcsv~+|+S~PsYO~X4nRk-PiE~dHe4GFN`8UlL{o|aI?|bE-R(IFMs>jJ0KwOSluZ$>)&i$Yi++@FlGLkzH_Cf`R;kD zpX=jnv@~z7S}(s~?p@WZuU&tx7r!Gte;@aXmBpsahxuf8ubV!tt8ANVbELhW?8Q$3 zFP`zRDNK@GAXLA9+4<}Xi?_}1e)Fu4!=v!s8Oyt`AK7_rfBoCXWy{9+$5WULUoaXR zR%E~Zc9P3qnFjO7ZKisf3_?HuZ|>f%`&^HkLz%&0GIQeh%BXp7F2;Y@;jVkW;#B(2 z&u7J+SBaY#2XG7ZZJN!<#AfWI&&a|Np!jFf+5a#VOOvT~*;to-rj5W@x2oBx6t96m9w+x2Rd%KsfR9T~d6g|5msU=&EaB6HvGG3Q~G zqCJmlF3dX|HVw8Gz=4TZbGv-pj+tVy;`i3^wmY^4IDNW(&F%Ylw|24m_|NH6v{jclda#pM}ohZA6 zxkI*UyW1D#U-RqFzfmwyUZShXGedJnAM_ukSGO>7JPSV?*<<2k)(gC#(}v z{vBg~`u4sVl52k7n)z~N)`@G+KUrHn`I*hPx@O|&E?Z&Leoca6iuKQf`H`L(Kgu?rie?I@ZYTvpW>U=F{u6h%0M!e>3X1?<;A>wuS>Xqyjm4#CLGGeC_+nr?& z*f?aaJFo1}$iVoiS()MJzJ0IP?fzv~;;HoO?BngWhe|Fb%m3s&y?Or6%6qxn%}tWz z9NVqrFI&Ew7&Uvljk>aP_w(&mPZR&|Ui<#szOB3EdikYIHyhtzl)1i*m388?jB_D5 zN;0KsW&LYanR9;FF8O|+Sxd4+_IJSRDGUFe{ST_5Lyfu3t~FWydi3S=uE)s?g}dDT zaBoQ1*7kF=^}8L(6L;0`n&x`#srX8c9}Vm_2|L0ky7tSwx>z4n`Dc=hzuIflbHAU3 zFcgNcoD_MW;I6LRZZ5USH9w=k`F82ymPIF91y>1g=!@$*G}kgd`nRCzG3gu6{@*(l zKh?YMOt^F7%Vf8B?zGb!GagDDs0h~xD(-O3Nr+98D{*Ud3s-$*@9miJ-IV!V%~|2j5w z?&cl|lRL|gys36+`z%qJw~0A-=Ti&c1&f#MJ$B&6E2#@j+Q)zP?vr`6;qZ+FF{igj z-&j`mybk=3H9=iDt;o%yzMjLk=6?00D3-J@>_!4dk0_bnJa;orKjApv8L8O{-)pxg zA7@~mv+}alg57iW*Pgdp^0)SU#O&XfEk0%E&Uq%eRbJ`zBbIlE?(#|AURb-D;rJK3 z@(T$WXP?FME;?t`dH-kBZLEMPFaG_*$Q1i_iInoz=U(%~;rUrL)35+nx1Y z`l>h4&wt3ByU*d$zW9h$sqU_Q+LKHz?k_Fgyw}ijDW8HZ-H9&J>Ads>r7hj3yT-;mFLDP{V$KVxHu~|Nq_zp-48b;E1CFK?7g?{XOFv0P35=g z_9qv=dXq83rzlEc|K>M)(w|RzezlIjeV5f=wd#WrN9@{PKl;U>d__)3{ci1(Jon1I z4PLj~WqKyo+qE{_T=(T$Rn(z(A`P*dw*8b(e4P@I@p=C{?f=2wmn=>z-)?)gfuZ}( zeA~QTF%3^c#1rorZa?dw=}iDQFWvrR&<(^?bp*3^W=Yg8HUM>3{oc!=9RL&uskd+V-FO%|D5M zDKXYb%MqKn+ainYOGVf`QI>?{%(kZU*TnU|{rbD_`QsOR`_{Y;vf5m8{B+#jJ^%OL zSr+oVo0s{3lm=u` zIWNI;;Q8)3U-A;(FmSBe$Fjlja$-9Jlgz=nlJccI?KZ^$uf8-|_zS&szS76oTpg94 z5MI6c{e^vbIjT}!9V=gcl3BX$oYXqQ*lCMj?q1iM@l3`fLi+rf$S2v?=bUk#S3b*f zkNLS@dtd6myLA#;l{g>bB$>~*MTayb?R#d3EJ?!tWyM5bZDno_5 zU$^ajKlNFA?|(FAu~?D2{{*LSXW$%1?&y@O`;uP$vzxh2^Jolz!e@K4|EHg1FLUSn zZtu#rdUAffv;>2s?O9ER{QBRwr?=bxd8qYYmf^?T`#+d^46(r1ZZOqTF{p$Jr>f+OXYR_HlRt#NS@{LdX#)h)9msl;--$u7sAT1LKpzwW$c`|WwDKc781;VnPmw!K)HvYUe@pLu>i z*YnN;(|Svvm0Uf4je(^sA$|XQx&4j23Kk8Yde1*Nv(~cJ*vy%gFKyye$sY&$UhVsq zUff)m#OD)Mtg@#r?Y&LLyYE+jyq;t1&0Onn`|JD2`8)6b`K`mNy54%veT%GOHU8}P z(+}$2G5?+O?M&3}#Im!2%u`w?9@xrawV-qX^M3#Ovn8Cb9ro4FzkKA^GN$`K-kDT! z9RGN>;j$@1^X;eEX$`LxYZ+f~KUna7yT!af`6RdMp8HBwj<)Bol-1~6`Jc?YL(=)% zIqUatVjnftTl{)2Z2wPR@BR-{|Et*#e3V;H?Yj7-i2I6X;IW%Et-mPz z>Gb-4uh#3$|Gjg*^_r`4FR#DYZ~3+3n&ZXBL)=T57ssvG_ajl=cuJ2YgP5-Asedyz z%fznY&Tlg?TH1AS`r5w*McaS!cipX3tnZ0B|AZ&QV9LC8(#sbpD&?E}jOoyOdZcm} z!@9$TCRcwXxf@yj)Yy=mb+qeE$HRL{ehJzO^hLM2)UUTF-}7f}esyTKgGZMCy$4I> z1MJLWs_z!nxEe72Xc1)Q(=|QurDG%G1hoaX7Y9h`a~{2Dp0fSY=Azlp<(3%=U%hPh z{c9Bi&!ic0tKTOD^!{zWxwod&R7d-Uv6RE3fT+;tvG2?Gy8oQb!;or~!766(&3XRb z^OX*KThG=vFek_yh%~&$zHVY}rVV$Uyl$1Q)-G<22X!B3eBWC7;?Ip5w&I2N%Ki5r zE-t%!{`t1^bAH|0Ui;ZZ`m=4O{d(T=4eAOP6eoTOj$iy>;)V@wKcgnIzRqU|$maWF zH#72goL#!R$W|VU>2=fhgt9sBoi^Y0vbyo&jjy&iKdGI+?$Gz<#Xg5lo}XZMg`*;F zape5ZpLecMdS{vYTa7=NW&NxC7iSn;3;Y}Atav8RTCdD?ek+5PaWF%f?ylPoAFciL zUhHe}us^mmlkx3m_IvMlJw1B=&(gcgrj^|7IPy5F+~&l;6Pept=1kw{|6TJ|a3XV0 z^(mWI=LJ8nc$RPZ`|lN{t<_QYx9%^Pb8t?_zH8;7H`ko_`+gg5e|*q1mE*VWit5hL zsXG@ZS?b3j_sKjaO_3! zQZ8Aq`zzTh%{;b!+y2vj?w`cuHB;jkKj3-JmiFteUUS;t-8FlBw#=V<&A{VPh14>} zq~=4B9m2#y&m$KZYZ|llck~Fi$SReX*w%f?($Qvj9yNC7Sb0M9% zwJf_lkH7ku{Cm#Bn>Vg0eP2GeeGdD6FXuZyBP^aOP1k5U{?e$ZI5)jFtH13))5G7N zW^LKGuGaqbho##(T*9xGp4cV-hGEU?xXcULn>W;L{=%O9a>CZLZ_oTH_i)L2yHC=h zQY!MnHhxKN`{=omOcOrGNwso@?mvBKYRaE&`7M9Bo{LPZn;W=2`{(zBZE4ll7G2)7 zPUrdmbzu^h4lua4`yoI3RH=9Dn*_*=5z zSKpiWhLiTPwXrlP=(KO}O}oDSB(rr#MO=(DpFO*#gh>a3*PN2ppDqU$zqXW$zhU!m z!P;JVNAXy9IfWCi&HJS8seYgRf8)>k>`#Gz<0HkLzV-(*tcjCrVEiXO|NQrBGd^G6 z_igLx>2)us--=V-q_h9e1^&MmK3$Ffd-d?%S8uXcd`McZn8{rA55r?&fz3tUY;NsDi7H`ur?qAdNT zq}KJhf(dT!Q%kc?Yq)T|@Oa=IT+G9hVCIzXJZJ5*<pZ(t2 zpVRXHAAH&-y>9B^<-e-VUEO$I=X!ko-er6Ref8I5r*SoGddpeyd5dK zswH-BR+lhn{`Ra`;(KUw$^2q_b0M`eOi31Rs?tn7zHhacHmu*KeSG@yUGFX1>-LMS zyd!!rWx3`tdof+>FE_7#+`e^M|4Hi-o1(jlCGV;q@yuVwzvJ74j34Wsd)Xg6VzH%G zu0D7E!8!b{ww=z;D|k?R@_`ZMHz>G{aLeO0q2!R67D z8&*pK3%Axpv+w*H+vl~n?Ci4J=Kq%T+dSH{`tH`9JC-{z_y68%xAQfBE_6?A`w|ZaZ06|Ec)sRQJ=~``=ogKDt}V`M}FVW_rnQ z9>umM=T`5u5M8l7*>S$d`olKQ_mtg^&VJ}tY;(u%#nG=8QgR1bZfJeo``S7`Vfzi4 z3ia6ajjRi@FEu{${N?gRx2Yl~;Lf#@FH^tQZjt;fXq)o8H`RFmdIq_K=-hwq7u9F~ zFX#Vr{|rNd0)sm9ihI`=GhVOFj>~`a+Wxua`HiJ&*-m+X=Dq(p4|H%vW8H~k@ z>EfL0pC)|JSyE*T6%vF6edxK_kx0PM5M8!dQ${)~q{d$Iv`KT$bf6``2tXvjjPRX1)#0 z%6#o%0s8K(p8HiMX&yasL4V8n=VxA93+qJnZ`}0whTfK+la!@C{+s0N`u4-~ujQ8C zd{P4sr=2};wQ1YhxyqI^72+O6wd`MJHbX~hZS=kL=aaUj&;C4>ktZ|$_`=8Sj5!Nh z{v4P%?RCnZ8Iyn6T0g#e@@S^)nVbjN0X*xB40qJp$e-t`?5azCbGPzY6|eO%{jEv` z>t8a=UTpg9xZO6^ebe{N%YQGtRbvZpT>U$N$Hj?v&Rlb{x^?cU*S+IM)s%%A=Qjr1 z@SPEjV2Me|OE1~AcKSO0l($o)G#*`;pSygsO2MS8c?OT&zD5*tojWsDa2UT|yYC(U>(aZ|u~D5eXYzIlX+%cIc2lifl3YQv-RpUYS9C%k01ST14UnA@Y_e&(*vPsi_PzHmvq z?=W|LeZpYQ-sv{q18W4>Om5zpc7Ok35Aiv55=WCf=3iyfDX#nW;E#Vprd%flZzt~$tyI_3gxA75%&&>nb;myc;S;*`H!*Wh4$53yg$>klrPQs zxLHEu27AM&y6oRoFHZcpd!WMjfo|6HXJ;3GI`PxptG|cg-2a(j-QHjB{``FWboak! z)Ag^%)b6w1?)FZ3dD5neAAe`s${jB~EXS#!?9fm%e=B2j%=L+zc~`x?oVx2Kb6CA{ zUE0chOgb5XNvXmgw)%LB5$IF|ao+RAuGW`eN2;hxo-P1(ct zgx-mtce(eWXX1g_Wa}@xw^~}9SQ#a0Y%RR}E&G1wFT4*rtwbkxr2buF#1$m(HUGO+ zNIPG`(_IHo+!rpKYnwLhQNZHI?H1p5Ma$jzxA6MH{l6V1ypxf;@lWxx-Q=mx?;dBj z74E9Jaz5Qi?PC4B;Fa=9b$vlbtQvxU{l1!9o3r@xx0%oHd|6ujU!8x|r}FqO3z=>B zwq5->#c=&eeg~VY*==%9o_aFK9ou&6`N`c$390kn&9~jo#ISki(^|*-8{NNtv?=>> z_@t|z^}VZecB)m+aru(_=55FvHE#x{4dOOW4w~!T|7E^E$8zV5qJPz{|L^dpDR1a) zIPuNlxPIT}E%`4S%7iA|d;Z%#M|8G!G;`qR6`MXj`g?8XikA~FYwX=5bhdxRYuWRs z`Sh7&XT+kM51qHR@c6F2;nulPSFtLuCI>+H|_Uwxdq{JZ_bKhL*xc6^Wy zZVhHgxwrHgTOTuvcEbI*Pj{Z%l~-O}9haINR?_oFiIrigK*C?cr(*w~cKsK8>;AO9 zfw3kg!NPE3AnUBCm8WLTyV4uKoV_s5NZ$NVpWhem9MpQ&H5|TazVqCa z!Zq2-TLQl{fEV;k8+pAUg#}mdD14G7tz<> zyROS_k^Btyf6+@%b@wLOOe;(IANu(0B7u*V`_i8W&Rfa0Ncx%8IlrrUN5f{V3z$7` z&PU@Czq0wq53z0Fi*`}))NALZ9JbDe6x^!jr3}{i%+X1R~(q} ze(mN~4Y~dNo!1`5eyI~pJF+fg$%TgxTfUaBZe>pXd$sQToJ*MDgMXx-U?O4Co{sq%j-+6pX1ao}( zPli;mMgRJGrSZ*#8{(n=1SRcfa5`Ce9>37<*4MW4?#0Ni4CC*W^UuvV$vr3M&Zoz=)IW6z#$`C6=J_S||K_RkG>{!2%{o%{aB{QX&$J4@0(cduoecsBOQ!^8g? zcna!QZSGktveuS;%bk4}eyj2}JIs3XXJtzH^ZF7YMxKt%m%cb`mSzxn!?fsG-`?{s zR)P$hC(r$7rZXLrPp(<9$j6sKjDc-Ot^LgoCabc)&*~eV z?fV(8mah1F@t>o=jM@U`Few=2XzC|0JgEL-efjF2nP>j{n%})r`W=?2}0m`DHA!LX0Uy;ef8)lPB$$o~-Mg7_?wj#}c=xS7ffru+J5j zQJ!pN7yGy{Y~|hkTl-zRe%^R?KVawO6Z3OLTK%5Qb|^Y!d%f;iiZf%&!-?k?t_}P< z)7U1MrQk>U#QN;+-)B84)_F4=nO=JI=jZ3s-)H$W*#A5K{_?U`)_~rGg+`ph4(pEI zIG|)yE9A};#t_(BQ2vgQ;S7&)*t)HMZ^o=YdpTs{Iv2LWw^8+J=aZgqytn=Q#+YJ> zRhPNjldsjWx?X##%5(Ks&AxWt_j6|lER1~rY2#AcbzXhXlVY;jRJi6|wObpfe{5I4 zw7Uy0{VY#teScFmU(_J7x_!>P17FoHT#r5Xa@L%)x4h14etA~d&mVR`uRSyO@0D*) z-_LAbmOXj#?xpvR-LiUEc>Y+FZ0w5$Q-KxRE<4JX>dfNPs+=*w`Db~!N&N-$$y%Rm z_Gj-e{=e(bPwO{E9<9#p9~WGR|NVW1rQMr3_aA?YR$kRCeYi2Z^h){R?2xBE4I-8A zkHpp_N%H+$6GQ)pJ{KrB(#P>;{|5W0|I!6F zgqtK5pLnmbdN&8Fk*hW#6M^eyJhzalq- z*--Fg?>GPC|2Jot{co22clQ6OH*1{#`cHoE^L_nt#)6Ogoh29+t)KVfh`L^p$bwg? z7cYJ~4PMM%UjMzk-89o}r{w2pd>8(GRxWvKyjb()GY_{te|ZZI$lW$i;f;|h%4z-4 z&~f8p)6X>_JB2G9KK}_X%h@EfrMmG}?%V2+oZ0{RSN=KbW|zKu#YCqoRm=EUHH10L zrL8qCS>`RZ*DNu0HneyXn(t3bz&b*b(kUn?Q z3a_><_0CC?W-%1$Ueleglq6mMqW6Mw;1_pyHy?&A3)^bCcHQtu?~~_oF7vpNxzbH- z4uiyHoAif!JU1HpZ~RbvY$EgSX97!42wP_Ts^Q*Tx*;X)#<}~y-}&zrR{Z?JUCzn= z`}e1ra@9=_RxZqXvfeWIO~U8j7r!reHe(OE|5=5j{?5Lv<$iAaKGu3@+P|$y(o2<7 z?cWtNf9B7?gDgF!Uz|0+oUlA%C%?5~&I#r7lJ)mf=g1V5J$k(>VP?AQ;`bf5j+Zke zFaZ)W0?cp{Lf{$S~;6xPaBJ!gWl4dj_4j!xAMCUGkW)*?<2g+`9k2^mqNtt*6SCTK+#a=V4OA1a7h5!ab*DL5 zPJS^dSm*E#jx@i!4}8}x4v;cubeEZ3nUj@wV%nbi+kMfB%46_ipLGsyvxlw4_yP)z$4wqxOeXUT;5h(9_>t3N{r(1C~ zSWIWpW$orUyA?CjSQ0} zx&=Ocwc_23u79GxN~Ja=zug&p{H&~=oc-y@`NB*_s}v8sJ^5A1d-Ig0D0T+FU$d0Y z85uG&r1kw!e7pRoWx=2JJ*)YznHn#jFPolO&c$=$S8;pXe^td-=cYBQNBl2cTbj_n z;$1ew0TGrKVe82MFQS<`XEkeQ`mVUVk^4i!gUwcxWS6M?E$1j`EM>6m*lNdIe4#FO z_TKX|{+Bhr;`Cx1Ye?QCU=e=>y~K;>x(s zGP5V!SgqaXKEWnDEoa-^=6mtiQ`dAdFy{Q(+K_+l@_Vyhc8>IF|Jv|d>NlJZJ&}@N zJa`~MI=#c^dlXyi-WA{aSuHJNm5kFaUOxN(fQ@8=$n0Cs>OHMISavsiS}$XF6pvtZ z5c$U}k5v)%$LPyh(7FSosy|i!on%*yQsQfTU236)CuOm({Tq} zwtuj*b2HZcr8Tu0HVVD)oA1fbmv&O6(Cn-nVZp}!+PjD6B{y@KeJy_nS zHY?8$k-buOCBi7g_7?x*nD0KecIz6rv^6yb>MeYTcQ*M`Z$QOA|vp1z?vtIvw>)e_DNwkJ2=Grcy` z_^A7|v+rz=WZtseU%l_icdhByZZXLBe5;i6Gydm1XX~2xev0jO{+t~XxB6YIVknOI zU$pkr#23oTHy6v#{JN;y|q-{>yPa30+=0eRKTt zj)MXx7W3MFdYF4p*ImBaa!%f!<+DEPpR@0JxoTe4`QK;!f9`m?zP8okKTFBtg!xwc z+~$g_%{%8@XtYYW|9XgQi)6>d<8GE8HWXjE*|(y4*$?;F#S;75_GivJ;3u%EN&KVU zx%%zzSxuHNW_Rv?zL+U@pWqtGj+G&-r^h{`|`S-(KdoTegzrS%-_+lxH{A?f!Rb^>pp^dp2GEclKkyNJA92 z!mqqGm-yvQ`|M8^ckFyG@|2VLz_SAplE12rEw;Y6KT$Sv%lVmhnU)>LPrceOU#jt~ z597-`Mz)asuPh(sy*Zch-ueK`#>x6G0=sq3Z~v<(`0(8s<^MNka#`iC)mEy8)M$h_u2B}1pA$S!I5`%1~D&bGSN;D-roH0 z@X5$-zv~~Diu?Ep?XR+UbZPx*t|X<7g!0ExjHjOb-1SZ7NTV^w1;0-ZO4k~$a0@Ip zsO-C4tk-#0Awkgk_a-MVyLxtC7rtAy;I_6`ZW!wbr@v;~qX? z4}-}6R%I`fFGp|M_uX7#uJPq&w=H5|M7=k%PFe|}jt$9&)U<>Ti&UiK_!Eb?B* z{8E4Ie|_h9`}3-ozij*`T%mGs-Zi`Rjq4W2{!jS3sE_^G_VxbavX#eD7hVzCYj53d zrn!gzx$Vu={Hz>zk$&0N7veSiv{?<8y7kS;DE?k_yY==h=l&e~Dd%sMulS*#aA30h z_miim+dM74RW4pTzezZ+%8RM+s^+t=qQ7^?-k;mM<^9ZN#mQ$Bnq`koKYrBAnN6S| zR&SrwIg8s;Y2jDWdw12H`!ZLQW6k$t)svOQby*i&`k6b=f@5+n%cLLx5f*XU(D0dI@z{Bu>QYTMTyhXZrm&XpQnd06^bMB4sZ@U+AwMJI&v zO@4-y7;xQ5`1_TqIxa`OKJL1w%iS|K4hh!rNo}?B>RTkiZ~x_0eAK_Y(f882R_kU< zq%$x+d7quPBX8%Y8hV&<|&wMv)cNsX==8RS8Q8Ir_+J%-DU0`6_*AqHV z`@PIWuQIW%po|?q&AvzgK)`U$+SZgZB>iUy2VJ6+FTMF&^CbvJjvIsbNf7{iRhzljYqOFRy|{`S6wlQnjdgAS+H){l%Q zJbd&o*}rgSy;LG=b%H(ibiMY5C;yLr*_@m^|Je)U5{HJ6a?^mgt|zAg>(^XX{&oLa zuJq?%yXO~Ai`)O)81?5|(3_lor*rjt)^AvDdFsqL-CwJ#)|ImA9IW|Uvp*#Esb-~& zZU3S>iKow8;`$|(R@PFc!Ng;hzj+qp!FeZ^YcHG^bc5M=ne&#j+-&bVZ#oM)Y?-bx zMJjSj9aF>R9`pZ)x%~6~i8IG0exJ2R_Fet6hKg_XsdL?V8)A3@Zk=Rh*jRQwII#4n zr&lVo$cM=c4c6~=I4>^zvv{`i@^9%14(pm9^EcaC|7GMdcw|0%!L2ln``dRLadQIQ)D0y$`QXufOxj+ID%NfywQ&-*?~t zTN2AXYi4PusN&Z7G29GXz2?d{aNdFMYbvd$C zJC;%AN$rY-(tb%@HI*f0%dW3_yyWwPzE-hT;oGT?IL^#l%C_(qo3=umOuM=cW1{4a z#rGDke{v?oIbM=;_b-MIjf)nTa;^32c4;V`p5+%%y(}fGbFyOncMU_{9$B4t>ixCf zEH6J&7xh{5U-2K<_$gWVca?VokL!n98j*}(AUXO8_v ziJJ6Fskf?c>^0*&@%^~*(%O)}?oZ;c{qT+da$nc~&l&%%i=WrLf9BxuHe2NA=KN=W z=UBfo{%yXfbK>Q5raT7gEcz_e%)f>EiQjoU!zGKw@3-OH17+TajkLc+6p~yl=nf zmfzbMQ+hS@?`jr?J)nyPvx{9&VJ4E!7W03TdjGzn<|u9 zTzB>Bb-i#?GY2*y$qa{IeQU#wAN<+;EaqUQaF_56o16z59`eapbhV^jWW$Bw9e zzo2`mMQ2K#i+&kfsu})&xMdw9=jX4l&QGnM^KrrTvy0AsGF&eDpiz$VX$a@CCFi@8 zPOW8=3YZv}US_c4>g)xN-@W?1eplP#^IUA5%}=#9SzS(ecEIr6@dKg`*?an{0-t5A z`u%0@O>3!ZXZRSDdqoxIHz%x`of32OXWCEp4Pmmct=iv6lz;Q77P!H!_N_3lHtO+| z*ZSw@o|^w9wnTL8MX&4Ae_vXudT*cGZ|=nmxe0t9%!8yCtPh#;{p44dYt|g9RsD{d zwFMUK5sTN@SNySk1D;PY&PyFZ?%g&9z-+GZ+;akd3LuB z{9xutaF@?+yO{VtcE#Ga*@0f0JGxwL`=`feF&xOQf9JdQY{!qgwK|qFr~THjXJUCU z!y)c8qngrPhSu*AEGK$cOjq1$)BCyN>zh~SmIWklyqX};r&n}2HThfdgPVokpHKDK zi{4_oI_s-&Pl3dfzZ$yBeuyvkFU~vZ5K+1!c*)g8#XF{bo)Wt4PGrNK4bEryB%4)c zuzz9Qc|dK=JBQEjAI-?%WxWzqP_>y^zT;Nuv8LxImfKA%=45Nw@Je;MrKO(n@?G2B zpJ6N8!_aj=)3HAEUexg^c6xuc_@>p|XOt}yS}9-qu4a!BKZB3RmyFdc=j0oBPTYMH zSDUVV@rhA8o95r3omtFV^5E-y z2bY=0)ea|=eUPyH+mxMspz>nfw%OSqgQ`UD`6tiV(7f(@RaN>%q~17*2dzdEGR? z^;N-_Qvbefy2ZsY;r{j?euM~RrA|fc)OmI*y8%x=1c?QYwu-KHZ=1bP_n+f>Z=Wt)V8lb{#fao+0VRo zzRyoL&t~!ei>KtSs80WXbFutO>biH!s=$b#1<{T^$oc-p;4fo)-33$3$rx?6Kr^u-kmUVldD@V|x1g$-ZihRj)3DwCZ2sI6YBH(3D55Uj5W52kv=W*8V+n?!cYg&-0b< zeP8*}Ar3 z#pQ~RJ8ga!t;)(0*<1g0+5PCcPwDxQ|Gxa)u6zA%h3|T9h0g_^eP)@0K7m=`apk>6 zjBnh(bT`Uauqxc@7iMM(Ik}RlCWzDQN0vZ?nbt9jo<}9T*0zKSjHDy`r+@*zY^;oMZC`0`D%{ju~SS1UVCG1KRqRz{&!8U=N4-R zVbf)u=jLnN_!M?$=fvvCpV_$fEVur$Ei>un&u5mQi{~zyGAp`A>pDwHO1$GGCLWL3 zO~Oz29*CU$^T6+LHg=5zlm2(w{rI!s)b3NA40on1pR08IZe{MK8!1uWXTG|yZNKIB z*~*J&aM#NFoex*PaNF7bVMpnNg$??)zuvt4{&U?+&P#nRX|24nKJACFkOw0oNLtQ)Ry>U&!^yJ#b_b-;yZF3GFO# zMf1D&HJ)pnv*@3z|5icC&z7xw7IN3FKUDSoKp^|c6)VI({n|W{cbc5_{)3w~XX|f& zbZh#S17&x;&u+^zRf-CD`(~%{X>N$5s)8Vv z3D^7n{99(eH?#83V|n@8v)3s8`5J8hHTd-O+MCmtRv)TpTbSE@L}TAliv?N%4UCd3 z8~B_8ibD21e|O@TQNT>gbo&`B*G^766wE$nD!XW;Le`6GbqXhM{|VRnTdQ6l`OjEr zzuNXJlZ=b@-bXk3@?XuG*>+q#`ax#y;b|QK=5m35^4)AdAFAdP`m)&Yw^gUFfinQfB8@I@B7tj`$~VWXlt4)(_w=N$xP?xn+qJcm6U$} znthLk#s6>S5$@*#GOAv=^s%X?3EVp36S;AnM#zf!yDzi1t4MA>YIwb4<_nAS6J3{V zzi-{SrEKy2#plFtnJzl@u%q+f*{g>oLtcDha^7{eHLhDGeWBp)kMVOqUEN=MW(WV{ z>p#ntW&6Z={?Aj7S6UjJK0jM-!sM$nIp1zR?R#x$hm1@vo0X414{N~f`!87zu2f#W z*llb3Z`&pt3xm`-bKDyKJ=`p3d;E0L@hv_3uO|pdGA%e1=S zITlgo>f%FCX9ZbE|yezlpE)c^E8?UXok&ul{rK{*0eL`YRVa-*|eT z@9(`EOz-%Zf17t=;>{cdlLKZPZMsXenUY^V*mbsnf`5q zgF+qCa^)u2_wJm%RQsGvQ5|0p$D$dA>>dn0Gv%XLWWr~{FmkWX3vwhwF3I4S|(D2vpsQ>>j{`%&3OM>5r zBr(+d|6c$9)7SX_UswKL`D?%Q1%pkZ90ARXbL$QXm9X^kex9<}dgjcZPc~jUV0k-v zo~YO=DZ99tLfqEw2Ib0KR}EKq^`Cb+F0kW%^zYk$?i>G1&YF4g$ODb$ERMxTUKgxW zcwkz4_{Hfzd;H#i?~Q#`(Q%PsiSz=e@-1I?8I=5bDUr#0+;V5>NK#_u?P4#GO}Q-rN07!01Ku6)V}}GoQ{84~c00y5)6OzTNG-zV-TE|M|j`Sm)L^?r6yj`DJuke0rI- zaGPvk-G3_=-pkRuU;aJ4S~&LAS3QMzo{puKa~WI;W?lYOU>RhnVYHs7xo8sy*Po3% zr)wvzON=eQ*`ik{E5@aBuiAIDyKdmz|m`7e6=qhRC-y8_OotJ$ z{o8iFyjQ!pXLmf6d%WFtUNc*n?RnNWGi|~j@-N6QlfC!;Sv^a}=AZHMHUHONyTkRZ zXIol{hxC!Z{}{< zbh;~Io=b@D#M5~`$0x>Y*slEFUV`b8n}(cBwvm!psAA#5iKZJCXeHkbE?;0|yj0vv zS^LP^+JJr6o|y!na(im+_0a6UV)D)jemQA(KW?8~p}R}{^@JYI$%QiQ%_k~dE^PdH zwQIY>y41Td`)U+j^*-cX*eAkxwMlv3GK))j`C(?>mhC28?@k8RcKk}N*|@PeuDWdJ z*K4<@?f-x3x{mx0{qk2;w%6N=B8%7eSEsmKVmi0=e{AvD&|Y2z^(iceJ)*CNEIF}~ z=|{%>g-sj3%CmL9&@(%hz;cF1)Ye`0idK2t)fLLlht-ZNzYEA@5McQ+p?J;2|Epv( z|9(|o{p9EIxAlht97?N8jhN14MSX97-u+n`wM^nx(w5hjZ=QPC%&j;7_tS*sYqU*%+?>nZxvNyZ z&)2@9Y_vAmQ}Dw-oALs|&Ub=I)5Fc!QtO`1DYDE8IL4Ufm};d^Z*MvO-@U7x!VDZD zkJQ$CIc^Jmcz$_P$U7gWwu<$SGPd@{Ut_(>*f3}3AI~R|SrIqpZ2cnH@1kC*qRzd3 zzx#LBeYdN;6)Y?d6}2on)4xuAV(zr!t|_0bFBkqS{q%2L#`pWBI_~o?esqrGXZ&>k zvbD^fpxWo6?;`D%gtg1wd})6xeD%YFJyIgKVShUGvuO3+WadnxCtSz9q@oGq`qDY;NXF@O{pBxb#?i4SQS9tI*yC_uZTL3WON4 z(ihlYIBXOyr78Ybk4I9(@ar#~f;G$!4%tLM46=BUvHyDL1Yr*uAH#%;&(ah89r>qy zH2!=%!tlcTb>^x-T(dROm0Z&BLMe-Ho6-}28pO1f|F(ZKpk=MKvi zJ^rK{|2?FC!t;)*FNbHa-uS-JJvPrOY~}xZ{(XNAhfSzgPHk{M&sTM$-0av5?ZkKn zmJJ_2ue4bu`fE=?V{+cwcdIwvpC!-8Wh_%&*TB=I zq3*G$#X*lu7)2CC4Higyi2OZ%XVxZD+XD&>_a3uV%aQi!#4gcKM;u%-IjM{1#dGze=g@+a~3ZqH_I2VK2j{tuK_H zFD_5tTYK_KorO}zomX~^A&iXtw|?}i^1Ae-6s{}1^X$ONW;N*v7Q&m_Pn1td?)g?) zDq>|iM>H>9Ry5N6?cTyIl0D7y?B54E2fV9%GojZ+zN936`L^b&^B2v!1itU>%aT}; zlkwz|tcL$orcJIb>)!WiH?Y_AGnKuuIlS=bzAld~e|RUTf4gHb zZ&S13yPn&}-n^~8)pf>NY3tXj22F-Y1^F`%4(xdlwKnp?lZcx<=S~Tz@9U3GnSV)i zm)@c3ry-*8%3AtWzZTt;eX(5gE{~q7!7_`!1vkHkFq9v0Jy&XZdAFn11VgtoCy)KG zetK8=f2rLPHb;Gr*V#_b9&_lhW_n%gV~*tts(N+Nb8(j(_g9%M`}Oq;|Mkcz zZ&H@Ejy@5oAi@7knUO=tR9uar!BXZRN1Eu?rQgM$U*ETG>dt1-Wr91tJ#YP1zb*Xa zzM_q;|5$nYUze=Awd7>=RI?>&2h#1n2~SJE`-P=;-`c%0d$;}E8nXY5O2qsGV}?8D zkJT^v6}p^ZCG%IE?+JTPeP&*A{rl532RUT6{L3mgj!5_{`u)}pr3wMRJ!?BVKCmYX zem8hUJZS&y`I5A(Z3m|ozY1D!?o?_dP_UY=l=|T za^DP1?q0;3seC17Z^gd7(%pxO~Y zX)ZTzsO&dvZ<+S=>iWH@JD=YFH?L0r`|XPj2h%R3o26F#4ZW_DzJ5YSw@dx4tG2W9 z8Qiz&e5;4Py@!#gvE99(2HC`OAUAOamK^|kALYH*k3fG7SIR`F=yNAr-EYCCc zoxf;n>p9+2J9=hH3VFC+SfMW?JyF{#ecyc3b$yduyAC=$NIqY(hv!L0TzQ-0dB<;$ zKRo%&cT41X)7+VIjOCB_@2j7x%9u8XO*b}SIoCOPyV-NEEJ$|zGJB5Ai9Q=)g`l+) z1D^8puq;dZ{#alOA*EzZ%Jx)zb?b^6u3g=M>l>{@&yMT88j_#~9;Q z%+UNG&{tP8t@IVcv5$p49`X(61O+yJeG~EGz25%|_60T8A0GGBF2DGDmc#40CmTfA z_f((y|9sw~pIZC>>0DG6O7>l;!{9etreW#fVwMjA^KVWvIS^WRK<$J5uAZ+~WGnSH zHf@;4ut4hr`v%81ritwnx_|IFu~```T6q6zlV;bBkKhy9-Zeu-YgOHC0Lp4$a#k2jgk`?h7duKo97 z`|JDt7!EA2|Fv9y|IgX`XTEDSdc64Go6Q!#{Qs>xw_i7B+3ROYsoQomUpsZ`fK@=i z3C^t3US-c>T9r&p%H&-&t-Ygv-}p00N$us0XZ1@s)u!ypKeBw{e$#@iJ08!Ei-oBe z7O_2^v426S;n7?c?gtxA7j5}^MnNF|9^;gcrUo2Ie}pzVEZO%wta6H%AIFc*`4f|w zW^3N$iSp#U!1ZG8x%8{I*6(|F>**a!PwNfxFErTRTrmHl{qNkwnHTbZ#ym@Tb3k#* zz6WLI*KRVt@skf+_b}jlozkmk=Y)fA8_vrU>27|_7gqk}R`rAxhFVkAvve;{R=;@k zU)}A}NqGwAr~UJOXnVGCdd5uYJ5sLV>S8PTo>txsbicyWx8R?2NsNqi+qSG0!K?Qz zT^DTUUViqz;i8(Nw-YaP-+sO_LSc?n(WR;_7nM)f_AR~tXP&@Xcb7|&tg;-13l6jB zb-ibGy(L@wzFEw-n2jTaO^5YP^S8IMzjhU}uXTUPU2A`K{&&_lqEiKL&hCCZH&`Ku z&4D+bdEyd(Beov-&t_Zhi!YSVf5B$Cd{4peGW*`C5z>F`7<4xNQ9RYF_EGlwlz?pw zbEf)a3K!T#F1zW;>nfD&(ZDI2d6J>KscFhBW(SA&N2`aeRb(J8mFCJ&B^!`YH>r>B&+z`Caw=|_YH6M&S6tIzy5vn@fTJ+*^RRGH&_^a zt)#uO&RMLuUaEaV{K&t+TJ`F)g(o0iFWJdyc=iU(vhyJ%vB}{`L&}MQ@oR{`Z!hxvy;hGx>z)^Aq;p{Q5p9Gu@xJ zvhwF0c4^L>Olj`t2c#R;@fGe4U;lMMW7^hI*N|JEIVw|Czmx{mt$e`w#`VViX-?_i zOm6FBpO>~PPoHnU{(#Fr>Ec(7Y@r7%D^9#gWOG>5d-mV%vpn_Z9BDxY>*@|ISskE)_n`_-Z8s8&}M(+gkn78UhZC0==&~(p9A=?vB`U^WzD= z%rc8N^VX<1zkI@Z%whYtou}TK{oly2A+zSgQ+_Xn2L0fD--P>00vz2f`&TcfyTo0GH(bym7rom$Dj!M z?!J6gR^&m(mVMzHm~6_$CVIJSbMap^LtMs4;)QL{vx%3z4zk~k?M|=^xTyK*-GSl~ zd&^sLmX}v_hWEdpSXRDh=CwKIY&Yjdgx|18?ejBXO3viyklXyZZ-wcq$;H35-daSR z;l6cN=0;)m=NJ2|56CP%^5d!P!gEeu!XL_8Ha@!fhG*e<3$=b;zuDHSl^ZfN-yN;E z!lt@BV6NUQ`(-~?e?ES3y(9;Nn`d>;i9WX%f6G}*Z_U5j_?~YIlgF*c@BaASW`8>8 z*V#-B9-9OkiT@K0T|9QbakcE*#S5gLu)b$0DNn6$sPcIbF+aUO?7N0-*KyA&M>PM2 z30z+BUnp{YnL~Q|k6l;apSJd>|6R`WwY9ukAy$#{Apz*MsyP9pjnt@JmNYOMJlZ^w;Z8 z$$!yYUoU5Gto!BfrLv~<&N&Mf**8z;^l(h{kze6<{>hToUFT9fgH){CA3c5cafkhj zM(*-EH-9Tu{tL2oE&9Ll`knXxuItr5USE6g(*yQ936G{|{JZ(D%PwSjsDuAX&Xk>h z8QFFeudki&E>gYMR&<#KQ$@+A#bKR&@zc9}|4dl6p!NhK`;B{SHWB-;_1)k6bM5g$ zYh#zM@p<-d6qsGN_+R;FQN|{BV4Fm@T;8|;Y5$)y7@0h3Klg9_Tjn#9HSDue6dv^p zGe#X-vo_T~-in2x;>KaQZF@e?eg8(wo{?cva`o%A+n4=4AoEw|?ezTzd8WO$G-bFy zGl_@ofZh>3{R0bFXI_$=%W+!%(;TxTHU`et$0k>;AL* zDKFzr&Cg5mVs+U!U!r8EQ+?kq<$l{Dv6;HUfgctyh5a;DUbIfT|J(T)X1gx_z9o5V zw&T{AFZw}@27YVoKL#Y#dgU((7hCz`^7s4u{`{T(zvWp_*1Y{LTW#v)lN;l9Je!q$ zDX{TED9@4yvLE+nNIR%~iMT5H$(-l6$W7(DA&XOFB@~WJO(}od+{`sWeyPRo!|Ylc z#WaK5TbWE<1pST~xQn`)2VS(7I2857=M_uE@4JzLo*%q!%{})1ubAxWpTAX4&Chs# zcIJflhWnz{@W0nK6zy{OCdK6v9p-*1wf8kwhThsUo$hfDcYL#AlzCaAzJ7VA!;`xo z!xY?jLMPg;zkA{HBI~P%txmtU2wd>gx-Y4lXLs_g)T=jHIXQ$D-;zD9xJq-As$%SP z!^-kU=}RpWrA#lr%4P|l&**;5@{T6^+)Dwgiq|suRd0{t2vC#N;rcmU#(rA4AN#={ zCH3l2b*mg5|0XYBKX>Qk#w*)78a)Hc{#WGwy;&`sZebmC^4^D!>Ry%E{71!0|7vb{ z-1^r>wkbGd*PqMPvqkUD*_*y+{+@ra&jOkq8f@n?>z;g-$(&%=zeD~mF%9&Q-5#~SU zd_VQWR_Xa2yW5_zev@L>Qz}E~h+D7diK=KIh-{ z9pBzr|M&meBKD2%8drn+>JRw~7B?_tb-%iw_WSe2hCO~|FL^(H%-{d_+XdrA`~}T6 zF?~-@buYB~ufdfu|N1V50*6Hg3gPVhRz@Ou8dIx`9Qs@~e@aX}G`o^j=#xvqz7mbw zYyUd9S?2F{TeSV>`JYu2*8cYUH)r4KKE2SL?=IHceK%8)p2%`nVK<}jaZaP(sx!>n zKF$6-JD5ewG;dpB|LgNp#D59BWJs%Ump{DnuqI>BdapbGa~vW*?hpU-;Pv$S|J&>h z)h=$-v@_fk5r1+sBh!aM-Nnx5MO-AL&xmjsuz$~*5+K{b<8r9Nb<1Wc34>*-y^eFH zziarqbArv|V?|3j66J%7p1lq3OUt}kUTCS>bfY-_sg{vKXOwpG#@A7%S)Jm$in~@s zmY>R!llW`d~r=}Q_ti^oAJY=7VJzBUe(c}$@9{I9`Mf^Al_6yRa^($& z6Q$?73i{eF67OSPe)?Raz*N5S5Rdaa^p4coZI1oomur>7(jZ%59$22xbHP3PQ-|5U zg?X&^s<+MkwRvvt!8Zw)J9Q_#{N}$lddtoIv;T`0O)ovce)xaSwv72N7#J-7@p4!M zwWZ975z4M$yLM#q())*I__`i;z5AI-xa7gA)$3l#d&cKz+Hjz`(qYjqksa{mb?{{K96|HNJGt~0n^SUMc=D>bV5 z)s|CopzE+E*RW*+uWW?V|Y+zi^$~>3t9A8M$mOB}*TsQ7{ zf1$HLz;W`me+^204NT9nYu+#Vy`^V*R)C$B*%u6;1s5 z_i*GQt!tU@_Qu~m`FVf!N1O6P2I8*@sxIEOKQjfINRYUjPo_4g0|c4z*i zr*>e%KIKG1kKd126r{9l8xFr($+WeWZRs!TQpuScO|L!C`nvjrwoI%=sgHa*yVP5C zfu;7|JRFO6tQLOpdbxk^dHn-YCyeK71Tw1Cy0g66=yO2v-NjM{w=a5W`_Ikbtgyc{ z&EjCt#5f7{3$n5aP3yj%*ez9ZPHLs8QOG~(b;>Pd#_27$_4h^TRjahfC)6!?K z>P=;?U31RGk_JOYVIxmGGCfzxvCkFY5Mb zT9%AVZ@lzHjz_94F#fiwmr23i;ZMOP&XDCYRjjf?3u15g@11|Jb;XVIB_9(c`xp-8 zrKiY69uJx5`|6EzOnff??&jkL+ZSuS-pD4i>z+o>nAn zu~)*YT;YsoV^YFnc~Q4gnzQ$|j>+OI%~{+yQ#W(%e> z<#a4wcqQ^mjIW=kLG4lX1qUiOf4n>~FlgmHWrH6w#Tv&pOP#GcXQTM)-JHyQHOUeM zEEB&5ly15y@m%X~Ormt_xk;N}@igo@neg{efO zzYczRAN9renY-q}wLhkR*?)d={WZQVub&4zwwn1o?t9~lv!+(L7q67rD{Z=zd~faT z=T+zSx-9U%BBt)qp{((_Sy`$2%Js{hALMpkW0nb+yY!Gr;smEixhwllO%7jteD|J; znoV=|m#hoF=Keo4-{iR5mnxUl)fZ3KrOfV?uU+Zp7pt#!IjzGhx_s;RnpPLNxkr`m zzq~jl@0*AHfu5Nczd4KD`WAgKMAi)#UH5{Al!l^VjLurfgRIkhh@Rr`_W$YxMr9oT}$11gl9| zmZtvSo;3MFJx|VwV#$;?xfKtBqxRRSEWfkLYWrEK>;8dzy-lMfG8*scy*e4eS5;TD z;n9~`lZnP&`=5N;z9KsNZPU7si`{;XDS-y9^$DF#j{UdvFf=v6|V*SqozXLQluW)VnyM4o#16GA>-rEZA z)(L#@diBwxYf%#Oyy^GVjb@~8Ues9Rk^8vt$rk4AD?f6qc{y{l?zipt);n_ke(5)P zgG9~RMp1#Sj0L7lJl`+;yY=S(+5bNke$|JbUp=S1{r8l9=1%}vGsh%JG1}tT0d7$*`;%Of`8ez z&$oh_uV!<#lpJ4nV)m-F;d|1fm1lCXtD9*A?lJuQeq-Qu4~IN!o(dUpsgmRW_AC>) z|7Y5Eefuwq|0nHS9H`xY?xyJ>wgC0rx(`3UGKjdiG<*H7BFlY`YAz=JsagDQb{E>$vRhpl^QxMy{iWs>J!dJ2v`DVuRXTD_qU&g+-^YXxT)bwPDLaqeV0#gs#NhEi zqpSMe4tL>)6J|bEYhM_>yQArPhTL`83Eu>!y3Uv25P0r8XOW90pW^0!U54Hdy!y{r zW;0FSe7U8jX0qaHeTL)p9SpCh++sN}@wwg$O`%V-Y^>%r@XQac36s5l^<(#EbwRHN zt1sKn**^>ar5_l-e97Z4Or0#zdy{5^cp_uNx2NAIci_LGEa`DW(7-`|)oTQX_y7E8~J__@L5+qRx_wU%`{XtumL zJ3d-fxkvgn%Y&(X`}h7AzVOcT+Du&rhLh8l&5cp`tXHggZf}FZkC*RfU9v2gZ>6B3 zUQ}Ot?qWEr+n?Bte;&p%8;DGJpY*$b@!QnSFZSu5*q5)^fBaBG!1oTVpT%!ErZG>` zmTWd?+vQi7HtEFDEBqJbrzeVhUGuu$tZkjP#wPx|p`ZT?Pgve{=yIuzE~61^g8#br zCG{Imd-Nat7#=BF;Ba-5G2fMan>Fg0gfkdyj>{}a5{UWMz%8y$V>k-`gHwUib%#B&}+VRK_3JeV~ zF*6t!Rp|XX_>yDs-{$MPZ~mYC|MSBa{|_#7mu0XOTyWtZKO;kg|7p(p{@ORmlV8a( zG+f{NuJrWunv>JNbZ=QPUwO}_j#R}iBbO|OPctlJ9hA$3EXof{mNI=%iV);>TH(be zE&a4^kx9f8uT}&1k6R{Yv8Xb)rk~>b=@`T9Pz655rT*@x^lgotat|6c6l~BQ)XQo&+|Q9|;q$@ubZ-+;ZNe$s?0VW-WsN z!*XTICtrPv44X8T@3MZ8=AHVqC+71fxqxbi%-tOd-5nDa-{5`YDdo7dzI=Jq42gGh zUha6k*X8E%&)2!`t&CaJq4=rR+s{t=>krvu3$Da57`Hld#d6vCFVIzI@0gR-JEQ8N znah!>x{Os@-8bwme*D+@{%&QhT&t;et_M=P1R59Bt!!4UPK#bV$)eol;_9q3+0pal zF5KULe)rM0wHy9Lmd<&#`^fhN1=oKG@4dChdc!M?%)YYhlLzNyC~sD|@iLaV=vDQc zul`TC&M=k=ES<2VS!vq}-Cd`5o{f+w{g*voXzksD4Sd%+CUaKRPA;}sW4m_w-mN7~ zZt?wMf7dVPKl93efr8xf^D`Fb`e~nz_xfMBAyJHR`o`kDf+xJ!KX!DSq9s3LecYW( zj(qESFE;W>DvOuD`E~rBr+r@F8hb|G1@$S`1?=-)yE9BkPV1iYPJMZcgI?8Hw(Iqx z9}@oF=4Q3J&G>8nah~V)Up6mSN$g{|7qlv-^p|3GS<2cQo77Lg)x96D^!t#-WaWQP zeg=Jb@3WdUp{LRNbo0CV|4;L6pJ$%ldfjX7RH=w8bMuB>-y{1EcM6woN{-RG=DlPe zW44B!#P2W>{ysbD+XrraG+{`WDN$$&X6iUQyakYGQrcje`bk z76*>!d@OgcP!@FvVA|-?1nMc2@GYNQePUYVI2C=Lk*1VDH z4*q^3lM}MceTw}J<$d#;W_erO{_$_^uDw?Ic@7Hha(*8f<}h?5E;!l9D&2i?(@fQa z3xejFr>1+bCR^U~yLXePLFwlE?90DNRfwLh z-(R+RkHrs#>&6GJ-;`yQdDExYyMI%8+PN)q=3T-jEC+u5zgc~G!P!l#e7>YSn?BRj zacV=5NHdR-c=MELTh=bRD}GBXKts?;ul9C!#rnff`~QjYDE=u`Hd(Yj!{zp|s~bAS zQiP6#3FM}G3%InUtzlZyko4ko0`JV9sn_miSA46wcI)?^`{5bkGp9aZd*au6`uAhi@~>>a*u0zn=U!2e!V(AG?6;d3Brn#nPB>DK zn=hpB`b-a(&$l^haSH9pYp)-FHf!&u7GS(Y(@qza;|&NJs{8_ zz{Y%Da9dV&%nN48C+W5~?-{=iJ$B$*`7FUY-s;b*r(3FX_t@@v^=_Iz$CQ5-rVG@V zSUwvZ)4ow1_?+dG|IDK={@?g+{2$z zCkZnjkkiaqWzuue@~7PQ7fNc*^6y1MG@MNCK4zNLskgBwdWbGTL3hn*Oy3zlo zUzB`5YwyUB_(FMS+=V}>s-HeOZroL=-0!02Ad~y{OrLS*dxjf^pX}m`i(kpTI@A@T zA#v4EHUlz`NzIFfSZ%_O0|ErrSJx4;oi)Tgmr^rdOxHuRrmES&0 zSr*{Hz^9dYdu6ZI|5xc;*+H(}dro;10XGyC1g{Mv#wty4T~1y0W` zG7U)AxUk?vO-t^VC&}lu0?wPJdcRNL;PHOHeP$u&;q~9NnceqV-DA(N-|UgH?_q{?cEzeZ%J?4yk7CUzSVnncAg)p3$Od561_)@_y?*ALdrgJ8W{n zZ{Fgq`Ho+wS8WiN%$-!7J;^$4dxS?*yP42ygA|u-I|S?Fug9}~QP?l>VAtY}+DBHg zoo0M3-_YAPas5=Qh z<<2Xzw;4&vTqv5r%5Z4QUpsf<*KG_YX}*cQ-@ZOS7H3wJ{3pquQM#dcpG(^R0=1i& z5ljpxEES*q?7zeJV)nB?*FSWp+dtMkeRgWF4U-dVt&fK~2Mt}C}^6h_DPJO|{u=wx! zJ%2fPFPyd&cbI-tJHPJL^17^_t?@rvzpVD)Zu>s%x!w1jr(ef?-&H5ba{rBf-$e$8 zhNFC^>NRdIxXzT@``C(s<-qRFrr%DbY!3c&CfRLP6j_lM_r!SB#V|XbC2Rj5SFxUP zT#@I1-OBp+uYQWlv82e(TX;_*INleI{ zv0Cr8UFQ4p1h?PwFAMzs^LaA!4U6zbo$K4PqBprP@E&XX@m_vc=Fk20FTb7^{l3p< z@4}?jD=w}&TYBJtt-5%8&89{M@s*#L%o@JNRtP*wX-Io!x}fM=lgtsBi`xqP7+&sN z)KQ*atGzz`X8!j#TVJc}lk75*?#U`)3@J#C{C#+G;nFp~*1dMx_)c=G;B{Sw^%a?a zXRi9794XegKgLda*RGQsFIKm0R}Jw#{@QoXgstyyXvan}8JD$eD{WUiJTJaN$kN+J zTIkc7sJi)QH_f+Dc6$A=En=yfcJAKZs}n95nwqS5bY@Kgg9`(DDw~3NqsH<$J?RwF zhtY5S)9OmNtR;Wva2$^Av1@(UZO16UtiYJaWOZEh!lE-@;{+upPAxTPkY02^Amh+O zzE^L*3X3GjsP(HjnU=h(JSfuEWS1y;;sNWs#9cejJxuFaoql)n{f|Eu?_FVhK!`yz zqB+WpLB1<`{ex3=+@X^m+s$ONZ+URyPxjQSHSh1;U-{>x)rv&rsho!u!ucydnx64g z-D<0(92q8(#?5>{^uvnR9nY1R_jfLI{CllfLg2Bx1Vd~XXY@fveYTYc&b>UZS~;IF zeRX03^XHzQ8OLvKJ~nUn-*30idM1E&O24=VM3z z9ly7CN<`GW+ePs&x}AQnnb&$Y{7d}2&xsw<#p-Ki*>`T0(N$)cnD<6|t9*{*1-q`t z2Trg5bX?n>fl=_(gSRgpG9SIEwqWHMX7h8t;gUC7_QqTi4~kWL$a%_O%D1ZB3zJ!H zCtv<={@4CcVaYkG-D1VB*KM<3y-)Y^bl(55JPg-LpTEAcZ|}QZucuw#|L^O|NsJ7j z>8xqxdmhXFRSK>+yLUwvO1eO_n( zw^jBrcHcJ6{#w2;ooi`?k+JgR&00I&R&#S^M6T?QPFlgix#4HtC$8fAS!Tg%Kdm)- zURo{xa_EHHpEY*p_x679TlS;+th-Uwx-D^a@$3vP-*yUi7BE)syK`RhXkx?{$tV5q zk4;bi8lF7C#_i2PAGva~V>9%;+`5_!4tbsMyW;oLxA54MD{Gz!KiIkPl+g#HG#%!h z?2#v~UU0d=RasO0e|o0{v%r%{c@Yy29(urJpO!XbouSB;?01|ji8*2K|3_IaSa*KY zjm3630-vgX?{#%DW6j9F&#TWa^y?+hlyFAFJ1-^A6*&C7)U){Liy2ebtDfGPyH~5h z{q6jd+WW+k4L`@JCoEPudsyn_gN7}=418a9s;!@L|Idqq=dwO@l`5Y~WjX$0v47?H z6}9W;AGIiEQ@zz~d6M2Ka8Q*o{iq696cbbnC zzp3mw@>;*7{zd&J@eMhqulCEj|6by5>tg&@KJ@Xy#;o3*<_jEB7gWsE^f8qdZRPW4 z)BE%(b$xY%L`9v(zhfEB^$TRC*;kxD#`L~)r~Jn2X>*s)V`#8l|Niv7e~~{8_m^9W zS6uD43NM#>Ar?DRXa>9F0f+eBr}@9^pYMAx@BW+lyYKyb_?P9igxmj($xJ;T4I9d) zB&4#P`R4P_FXwmpzRz=CZenDZkj#{~>*cbNi?a&XcR4$6-*_TH=E%p$Ne--X=4Kj) zCa-ilvhuHiPQ=Cj8TG=eLIWai3d)Dp^JfJ#Fq%F*6}Io_^4!1jH{X`Vy*xIL_uB5d ze~I^I7fMO*TsUpkw;ch$DmEu8-sepZH*=cE;d-7Y_udla%(!{-3lD5q6g0KVpoe$Q zirIYE_CJ$+d5t$V+QFn7m;hfLN{NlW+!2;&FE{9v&<>r-}dfmC<7PDUS^zXDk2b!O{1^8P% zXEU!h3!J~|!}mh>uyHG8K*p*nX^VaL+7zo;Faus zj1mVwxSZac_SQ}Elk_#_SIysw{+4|WHVt`l(_=yVe%p{kzx(~&5}J9x9<}ilss8?< z=HXt>PkW>G+24C+o9;b*=hfeV*SO}#C}f}7&+P5+YF(}0^+o2-rTrt53@ReYWa(LZ7cA%N=9Jts)8~ z)0|KI$}#vHv+i@(Z+RW{KUa6^_AL~$+o-nOV0qPxj@$VbrH-%F&lf$KdhO`UP@#Ja z6SyDiFZceii%)q=)o$OJ+wT|e(|D6!{$}f`IhpQmW{>Cl*BrDGYmUD+KR5E9|F*qP zBmMWM{p_n(oKkQ6=j;0k8~7G%;;2jC_w_ID_a~2qS5I6QxLzu2cK~ z;M@u9txh2Uddv#5|H=P~zNTva`}w=A^%3StA9zgajsG2-V5o55-_dg8zg^#zD*qo~ zw=4L0Wx3tdeR2#9lhysT{;te_MY}vBNn0;5k#u-`{YG?dQ-mbLFvf5wqfXj}&r}=;9^IkQa)^BdAdhn0& z%=*Gzt{RFPKiyR1Ujv1~q2r~JO=%{MY?+8Sb)IoAu+&FIc($bdg}$D7fljquqh{CxR2sKRP;X|EK=r z{%LZ-pD)IJ(YM>Y@%UdpX1UoLuLSR1C$!i-u4Iq<{p%l}?_BVDno)Xr|BB=1UuS)+ zdr&yPmw)^6?XmOj@?23|a_G0yJbUiw6^d-Bv;7ps8C0`=-nws>pDmwV8@2bG3B$LR z&HUN_PwzEaSHx#~fOFpR6~SL;g*!*3vOaBku=B`gHU&=RB#T!D-}tqs{@#E7y;+*k zd{vc(>+9FB?#i!;&yc6C?CfZo-Z%uuc(AkjSURv*z_9w^W_TO#wE8kq$$19-FtjYKx zdA(Kb@t0*?XEr{)7VZ1|=*PO)du9z~>*wB6h(7f6yVbrw^8epef9bGKTj;uProkG6 z?UFSYEFa#>mbiIi{!A-=XWrlI)O<^9Eqfkwm~tGhco%zoU;F-R>JN8tzp@o#H}Vj% zY*e@&@vKmS>G@s9|0nn9{5F>UdLeSb>GM1adFl~T+m;=AxUhOHgZS)!`)}Hxv#`GZ zX8#+TZkD;5%uF~FxE-ykmSk?o`?C7a+&%Hk3>9m=^mG_4KVGW!{FZQU&r@$kh9l0$ zxb@^;vY*$FGJ3R}|TYHt^4f3@G!8~Gu1 zml4ZC&K#%gxibSEcWnEVTl~Q8?yvvv=GW&)9Dg=%uWhDqSpSxdGCxF1jz!){SYv3@ z&HKkAr6uS0mx8Y!!lUG?Q;eR_cKhnd7TtvdqjArYpVQ!uPK7 z?XiXP6&8HFk$0xlYkv=~^cKCY;Zi^RT>5?*8Se#pcg$3ZyPhpI#V#urR@_uRhXRvv)pE{m-aq)Z_H>6ymEXGlY!7~-uFA>kI04A z@hgYkI+)<`DZ^=@X7NI)Q&x*J*F7-)#e3{|)X&`xd=ia+Y8d^GyhuH-|G#hF^Frqv z46ly8O+T6%cKnvzyyY*e-q-i=Hz%#&zTa)NIq-08+fL={oG;p%Z8v>M{^G00woO_r@loj1|9_f^ z35|2bI{&%UaXkokD{ zrXB4Dv4UZq+WRwy6V{*LPWT&nz^f}YHGtus_gVf2 zg-1SQXig2Cq8@Z4>CBnQoJ%F|JHMP(?ZDkGc$HW3Q`hx{$<1+fhi#3S8yy+12)Z$B zkFRd;39d+ZxUenp-~nHD=To)WUtNFZl$;Pu&H1v}?<)7H99FX>27Wm|3J=+vb(A%- zW!S$uSDK{U|NF;kL!s+7heTr%n%C@`e|2k7UBE2|ekhYZCcB?KySe!L|bt*I(E8UN1cM{py0}pI%#ercUr#!638# zIal9<;l#vsJupmc^eI`x`XFa)-drkTlV+cJB9! z=gs(7^kkc%{`WfXhx%THsnv--D!=#l+}*b!~QWCrq&e%oQF|hHaFAB=}#cuO}(bI3G%*3t7 z%}+Gn`}b|T{v-ni?%<=X)!(n*o9)m)hru#(fvoZlHIW<#nT!`(lAV8TN=R62Hz9bL z|5Ax$cJ2%NBsWPMO4p9>?OOYPs$Xb-@57Og67c>Jfbxpy*Cj_=Kl&AWNNOptXGO=<0_pRGD)PyBhIZnyVO`~UCzwHOwx%{vs_8*o0FX`yDl{_ZnEEL{$*I?k38 zVs+FR^FkKSNL@CqvYmD7BMHk&{_|RW2CoZ$%zGF!HN8tb?dUw-klMPB0>%vt$#Z!5 z-!7lDp!c?^vBh#jT>$?WzjVuN5`dcwc!->!dpwfENbN48UTSzdO!cU_qK8c!`l+6-?A z{T@Z_fb3$f(zM0)k{|8d>vlDmsSR>?hIXp^nO z@`d-i>i6keTCZo<#;uiqw)ETTITJ3udp_A~%f7V+Q+@01EISptwA`Da&eP32-tK9% zUmEuY^Dn`D-?#5|{#K-YTU+EmB){`Gux( zs2$Gv&;3+Rhl%;FpqRj^y06oc=g)h7_|P1ey=VCQ#ns(qcr)_K4bqHX986$H5qc)= z!1d-~&Wkmc23m&~z1#f%&zJR{KaRw%`k(vsdTGV=SNG#{|F`olGzv?dIJd3v&5Vs7 z(vLH&lF9gG)6m$=&;Z)45xMW>?0uONl7iU|td9G->gmt(_50#_TEz|jDzBBlz9OM~ zfrHe6pA0>g4m0<3R`*CeSobBP#x%G|d#`=E;`J^i$zHCAK5xEerANAFHj8g`t0hzmIpg(WrXQ}m z-mCe2$EHO6_lY`%w(0X?x9qL*o2cAyyXQO4sw=x58}q2_WM|WkVC(oEmz=u9)U}d% z%X^L;iTwZ0{67CUC{lHEom=eAKd%(+eSYqce{fK5{r5HZww|w6aw`f>h)FMQKYhG< z=J&e^OHFsDF(k`|Z9C!kc7Ct@uc@zhvAz2sbNJS)*QZ{`9&D|;yXG%X21Ch%-)TJT zY?cM}tn#~av=4-{21qa@RGwJFz{vJvg)JkCh)zSCd32BUzT^a+UGoe!S+Gs}8fN(G zX{*lv>vj((p60K+ADqg%ntg8LpU91ojQYoRyo-P2Szh_Fp=^N{dB^plp zuU4-vdHefK>h^E9?NS#oz5g#6@NnO(?Yz};hq!Hg4u7}YtzPo3K+2Rg|t zagQ$gSN~df@T^bgRc-UX_uCUU*PpZh-7kCh*ddrl_Xw%wI;SXd_Pnq!f8a=Fho1LK2H zi?}vc{IH&&bn=SMze%=J7ad`eS^KzQ^ZiK9=7;C6uWMyJ^F&H|`X?O~z8K>_3_J$} z62cr!CtZ_Zim^BIlbqpDy~=#mwuM#qcFLDcjpsGFvbXA(pyI#c5dJ$!JW=`Wz%dh5636YnL0Q%y^LF z`Gz(0|C_iR^QQ9N-nHE3Wwj0wE8jQN{a@Sm#gL<+uJiBub_Sl(lV9pDd_Ekh_SPiJ z=+^YxndeN3A4#sr`|J2y&4Gdc^VPC#oeN5yPuk5~D|zlvhBvE+*5iW9|Fb1JRCD_a z`U=_dzMa3D{r{?s{I2v0pZyydT6h)Q|5g6kU;X#(W&;)_%UA3EetxQ7|MSzO>HA7{ zq;N6p`OvB#6Zi8}_^g;PDTSoO&5ik8vpFR-cIZTCXDh5T?T-y;*>wCkAQ0 zLA_abQr`5LuGe4@oAPJvp9Nv()vsRre^9Qo_qM>+-Btfu5B7gOA-%LWKIhXeMGfwT z$9I~|Rz#N0mb(9V(jA6#+3m;cO(ra~={csE^i$&FnVdOR_a8|LcAq%ER&L^tT%Fg) z_W!^0X@2}y_tVewc81#825i{0sC7fTwUj`?O0AXz-H5xhmU|g(nKqdz!gAKu#$Jwv z+q#(6q%Y`Tx^nOR)`uC1E8Q~lB#-~7(A()Yd41-ea5KBr>JncQ7SFS-cp)ElZ*>y8 z{`N22(&xW^UdP*BKYMED{iSPS3y<6l@V=)u|El&v_76XbBzaukB>5YBmAQVfVb%Q7 zdKG@v9yz_~y{of2itLN)*D{)3opAf<$#mtZGvy^--~4gDCwpG}oSsch5_h)US{Hk) zQg*dTn#ik$ed`oLO@&@tB>P;MeP2w{VUeEtlMUa>Lga59dwl+JUun5SbHwv4^R*US z3O{hN=vLE9nZk2_*XZPKwg|P6X?}i!M`i9g{WP17Yd3CH%@AmawEkV#XZQZ%^%dgG zPM>B!dF>!AaA}D{!}m_P&+4Ci`m}W3sNdQC>}FHDbX)NoOUorb5i1^j-Co&0IeSaU z%GNslgbjP%Ro_%S-T&``@wD}O7p4BZF2FL?XWo`R;oqTu)z`+=Z>x7dR>NNAvi#b& zWA|n@w7F;RZ2 zyrMv%|Jv#)+qstAc=Iy%S>5jHFY9+l|G$0ec#Vbp@%v9?8jOnvVgN*N!?U>r6*Rb^}bvmAPm6^&BXq&R(!m?EbN1m^(=?c96 z>;Ik^^#Li**{aq!`#ni^I_|Ke!`o!lVjWQp?;YyRj30eM6J~!(i)??~p(=bL$Kvpb ze%}4lCptCe@IE%5tXOzNLqs;T>#laCVD8DyE55p*;n3bznwKT z{QCMl`V}W5W~|O~xl&d0?t4I5<%QYl^KuxapB&}<9-)}Lm?bym8sjT7a^Uq*$!*j`JPuKj-dGguzgW2bDTbJgfi-GxHicKBTKl5kz zyk6=xX$2o2-`c-V%a~i7c59tz_^HAmW6XZz!PTQ$#eT3#C}_BS_JHj3^D7?O z?SAyJyitGi){fVbZ&o$b=+0=7hR4WGw#|{_|wE z2!lgUa=_ivecXKaPZ>Y97draU#%WnSWApmTM~A1$?|FCoZQ-tK4}Y4Atv+&l6XSZ$ z=A(vgzvb+$CBIDZ@c$k@^&(?Nd8NPM<0_f8D*uWsmsPKAnV@N5Z!c7+v%kNfda|U@ zy$k>Lt~)>FyE+5Ejrsr9yu9zN>XRiq7)4k*?ArJv_V2R0-QA>{IcAB?e!S~ zY;W!Vo%*hp;=1FJOuq0m#fGQmPk2_iH*ZuFJicdv4@bZKW;A5eN+yUGC`psHJr{n?@VC!ilR%?zp`uI99I^(D z5u7WtS4&T;+gGe|_jE>P1@ocBhZ8z9eUHcbvE+XGwSRBnPyO}3mB0RzvCUFvkhz+? zQi;9kO6LB*lNT@0+xKJ1X2z&ap~LrWysO@Q*=bxA6PmaGq_e5UAB)u))eOuG3^%OR z&fBS-6lawvsCp8&c-E$gms+=13CupE!$NO694>;ujSRYIeBN>LG8D-M;bVO z^`CzF^XBW=Z?f0KMp zb|ypY{l2y5txFC)+hnlM)W>D-(Y5}&Ha=a*W5dU;85{NZ+WCy)r9X|mmsh?2_=c-5 zG$GOK`;CBkj2VA;Y~r6cHpkdZOTT^UR`&B9(f zXa9-ki%-|;+3wu)!1Df9n_myZf5|0sZGCIMZTXoV|8wfB3#1qfzuRA%-aEN4e44MLGha4a#=@@l*W1&q;b? z{pUCttJ)WL&geX-6tA5!v+DWwe@8!?7pX@6IFeSM@Gs8eoA{*O&%fFa&Y#JkwEqo9 zFf;obTR+AX+55jOz468Te$D5Cn<5MolsB?i@;Xj?{4aFM&V}oxwWq|gvgRZ=9C+r^ zU~@9t_tm54_ahUYM%=l(Ld{;8<&uio0oH%F+V)MAmp*pw{|x)ZMyF=K$*D_ERfzv+ zU;Xd=^=N|}Hr9iWrJv6(Gkc?(vMlJG@m|4CO}tlS{!c09d9tdKP zt81d;$BylH_wE0)JbYj3&lk({@{T)gJ#)VIUH^rKbw9Z8?%(R$)99_Y(_`w6$H)E4 z60V4dGV^8CWCl&)l6JVQeoA*!-23f6uB81bf3?5*;FYw@O>$pXPAT%!OK(f9R*U?d z713dIeb2L~@J}M`jQM|~dW&1+9u($OtWNS`VUICR7I|Y7aDBzk$bZoqO?w{9O=}L! z<@Vx;5G{B+^^suOtDk4QV|o?YBqnWKcdW1R%^0+^2)*cNS@yFl@={l~c5 zGPC7nEwgWLxHj>5!y%0wycKnyl74H7Ncd0l-~8`s)s;^lD`SuKwxve>&kOL{nX`vU zL-26OwRBlyz5cy7HdiqyY}op4N^QLUhcD$fT|fTHFn{)J&D)$i#=ZMau?PGWosz+z z>{O>!+;BaLee#O@3;aA+3V)|3Z>|2n@vHh**S#w13+DgW z(XR9V_UCzNMHgjb6Z*9@o-K&~-t+p=nb!u_m<}|(VKiTO)rvuVrbY4DU$+@Gr^hbd zc;;>Y=0g|N4eOf<#o7Ku@HcQ?i)*;c*EcbTV}e4`sq(Y@$&W*iIo$itxN6gz8Iu2v zZEG*@H~(9G;iX!_hLiVp_Wd}2_21#D2VYqi%P}xy{QD8@&l<5gdZT!!jCJLwl*@&0 zU9{?a85wpy=#KyMsOaa@>Dlc~yY#!x*$6Jsd?E9hUon}X@$cdHYBvu5xWIcL(39iw z%z}i4J#HV0+m2l{ZlCsBe9epRG7Ktn7TawL3}q?O-Y+%r;^mps?BpBQ{&#%dT_6$0 z_iyF%c+r;R|L#HZ+SWXu3)fkP&)HLyxZ=PgBi9D=IO?k%MR?3nELhSX2VC@u5UY;FB5m*0MoJSb>@$E_W6JHkiYVOYhCun zzmJO@?&>XA^!@m{y13tGXYhTybBld~?cARa56GOBzw+@zu0(WbZ}n8swQ(nS8~#NZ zud$L?Jn!|%mF}*~ig+#bnVQ8P|JlAftvGwzzg_A3&q`l?E)#Ei?Mcg*<@-c9z9s*Y zacTMREs?{BsFv@rhq_w90S%VdR)Gh|P$S*zx}MP~XO-ssmeOzdkJ*Ga#4 zmf7CNd0yf5!OcJ8p6A90=QPidJ~%1CfA7?6pV)QxdrBufUp+Txg1>OrrK|`B2eD+w zmc;^ZkJ*W)KA6Q(dE?9bGafhJ^nbqnuR-VWSM_WGg$BbQ-FP`6Mz=`^ER+iFG(MWG zU;EPgv}kyY;ocNchKl#q_jlX;``G`UOHcZJ&V|)`-fXGA@ISqNqKAP{!&+_=Ln{^L z?F;Aq6b-q*tME*Zr&!%L>leF}zuLEa3;TEN|MxjR#T%NAJn2k3Qus0POzTIxD(TG& zXFq1$cuYdUS?Mf~h0CD}5!Wjx^B-W;SyXfDIFHAJs_58FjZ$nIR7$#bczruFC-2_k z|DW3IWAFXl*S|V(g`6v^T4Y>n_|r|(47{!eEMQutap(gF|LHS7`ri9YOZBP>xK+Ks z>$>Nj)I}CM7v=tKulC*8_GeWaclG}dc1fFWZ@xXz%d1&0&(`?W(8_mJq0|AEU+ zF()0p@^xbU?B1D&R@ZLX&z>D2ZY-(#)T{RC&COfyJXd67v^^Nl zY*Z@8=+H9#e!!MbVUwa^ZIs-)-fzT5TsPPM$} zKBogp+vF7)9^Pbd2>4(2epQYgoH;Du37Y zYyZU${V_gz@|xr$#myg1Bsk<~Oq{|0I^X1o`jz9Gu3fvP%)qtg|EeiBeoddT{I8y} z6I(>iidI=qS+}FN-V`lN+?HK^?VE+t$(YDx9ebWL&yR@vyKH|{-p;4n^wN*aR(a}K z!C=Pu<-Y3lm`gVp%CeYFT|eS-GTWUit=b`Ihv~7aBHV&z>s6=8t38@`ncPB@i^b$^ zjiau;I{0+sqa_QoC;hl|+C2G|v)U=S(9_l@l;d9;oy**Ph=Ki~$Lgh5^P3yfs}tm$ z*-Wmz+W744)2g?hoZe@}*P12W$)26~;QEiMdC9wq?wUnuPd+YRJny)(qi$eFl*G}A zi`PvT5lC5P%;528L(|~~tIc+E&f4<*Jn$nr_Uw*lp91$=hufWeeMliuV8yw5vp>0K zSr@dGZOBu7tbQO=nK^TAdc#t`#N0XUrkuqqYQqj+7XH0bC-eRJRXS&RW;RcWI1y_Q z@buT;XJ_qef0ayM{^;-YmS&;b@z>AP?td0{n&0mG?P=|HFY2znf31Sv83_zMnnHa z>*n0odR?!$TB*_O*2!Pr*Q`-_ZgNMDq0VOUrJaj=wRqL~?|!Lo(476Z`24p2s}|0; z{lCr5f>Gf>t9MaprK=IbIKHf&Gy-Erf4U4CSJTF&W}OpcrTp3f*Ze$F~0R=j+J zVDv%u$p6#c+F#pJQ8;0trO4WX^Pz{gw<~S&?wfxn`rrKczk8qlHNUr{Fxct)^JM0o z_AUo^zfekMzA>?}Vy0pFgoRrBxlO;WsBSIf58ifFoAdolX6DT)33pFu9&gk98u2H} z=$h}%t94pz%vrIHSF>ae7^GIcc=yw=>Qs8$yqkQ`B~d0#I#-k5McoA(@3@;eDt+n&xBlTTR``FC}Rn$gbFk*k<*MJi_ek!oy(e$TXZdpViMPh-=S&XEe_S)|GfQ^Q=M8u6ty$VVt6|?a zY5ARh4s70cw7cU--Cmwc+;11<6fCbjy0>uC?vB9zznhrad0fgDES&zBhtr?K;#@Lc z=ZVjvugh6>9q!ovt13X2&HzD)9Irey{Ey@AX&5F8uHHVHDfsn7PWN z?M-itumX>U!r@gm_AG4LOn-bfuof-*Khq%XVKD2(FuP^`eU`U>*>5`8u2gmX{Qi#l z?McbUKc9V8Vz%k$iQNmVnt~)>yO{kmV_(pCkw5f6Z>612=u9Bxb=wKYsuQm>DQ~mV-4o>ecHE4(f)H% z@!zyFTyxd$Od^O-`x|-b8{dK=&O^(m)nu#Cg*`9PM*^zmD-K^GATSRRWmC}xNH-)rT8Y`e)>Jhy_SBe6V?6vzw*17cIS)TY&5ykD`u(}Mz@N?H zCpVft=AC}7uK)d^2O|CZ_ndj{?|yz&P0r$*P7FP)3I6-OFP*Mq|E2l z25J+uE7p5JJnqLaLR zhW12-3ymvnf3;3|WQAEjHOB$x|j6khBp4Sw7=>9>U*SC@dc{GG_?pC8WM zJht)ceof)$hyQS^*gI@1RF=2>u(0IDv9s%APt{ihC}pOFszh!y_$m0%dgHYRCk?X9 zdfpl;ud&JHeX)5%1A}BtqwwC)%;y0=CMFmpnJQ-2{oVfW_NVRd|F&F=?_79e@2hnI zj15y%8V|C~Fl2OEnQD-HYk9zumq!|wZd`AY+5-~*MH8ueX>=#j3M}B zDbKFuclY|;O_eR&y*ue=dY7iO<>vc|Hwxz%ioBWmF_3qCR!>jcmfr8{ejfLk{zSFZ z;E6%ow^>2w?ibrJu$ctx&zSvm!GY7i?tD&v@gp@kIW2|nUdGbA+lDy|DvTZqbC@5? zv*lID-;AC=gJ)m=`JR_E19x#Bi40D8CAIRm(S392)uwK)4IB?$pOvXqE>BcSTd;ob zwPz=#ZZA7^;8%?H`ESv(!tuAW-_DmzXJCH)>(Qpl+Jw0Yu`fNDs#q2T{$cHy^8U@1 z7Blsab5GBfJE!;{h0&;b=Akc{?)IN{tUJjz@%E$#{=Xhv(d0bM^=!r|PI>Xl{NulG zzP4Up`{&b}H2Ej_F)t$ZRl9JW!|H`Y^=l-(T)RCn7w2ISXdGeGrY3DWG!OtF)GA6Wd zvQ+8Z%w;^``1$jv3N@rfD^|?Ay}5T^)tb4@e-}#IZQk?gYyGyGk7Ax?SNF8*Ui;zk z`(NL;-yfeYxhB#j|6(T-i%j;He*qFVB~k?zoV4nUE%P^cwYEO`|DnzNtx><7s+RSh zzB%pTuN$(yc3utZrl{1<>Eqs+zW;P_-{kfy$70X@oK}44`Kf7vE8p(Wm&`nS`|Tzf zwyXx$nm-F{&(Bm_d#Bj_=?#Om3&mR(-_EH$c;KR$us~wl((C6LdvnhGws|9$em?8| zC)F)e?#Dg9QE}Kqn0cw8sm;56(h+=XS}y7y@X-FBv$}rq)0u`Qo0Q$Wbk}wMOKiSz zYr@{T&9xTC($~%}H#Yt9&-#|-E2DpFC*~}Pn*F@8ctc#ppRN0xD-Ow2a69n1^`3ol z%HZKo@dv&e0&?!2w&G@xs%^JC)==_wQ&ZoZ-p?yGPtpIp`<2qIy1Cp%eYJBg@4Z$h zSAT+$cj}j~%m>`(b(=2vd`gnHIM!o^Sw#J{TaI==f4T1cvA(KIu$h-_0+X3uG;2!M z=ULa~k2yTAjCM|sJ~t!p%5Nj484Zj7FqmYW*+1bR%M6yi@(vBb|5Ep6u49-ScK4vj zCu8+pyZ^p<`SgzFg}-mB*zT!vK9H@>WzYJ3qwe+9E?E7#%Q@n3XZ`LKRmdj02uq!m~7TeTXq&Yxt^Jvigkrm*`lbt=k--*4RC z$6)(Dy0}5-n)vJeA6}GCaD6uM^hKNYXC<|F)PGseEA?^oWLLV|cx*Y#&jsJ?XI$o) z;jq7Jms|YNsWouPR(S`P>F@jTC}ofIQ~N!s>C!c`4l}$lH~YdUr@`$Y z6Wrlk`f38_>;>r?-P6*xu)La){O4i<$LFq&^_4=~K5hTE|M~g-IWyKP|6g$7)~%!u zI?{34g*j7h&e;3uZ``lB$&XgC*H05LST}vw#vqA#@@9*QYE=a%Uua46c#?B0`%v&? zm(CiY#Z{J@_k7w~zi-duT64X0|M}5<-f#8=GcmQC`0~J8e{aZB)w=D!4r+^hT{mya zt?LUzcc!n^ELp(q92q`S`)~J>=(=ayG8fHDSyy?_qQ2p5wehB3fpNPEXBgSVi99NVmv%HQOf=E&R;aPED)?_n(8`PJtI zS>?}gZ26dZ{?n1xYy0NtA6W6|;{Rt))80$9i`|&P!NKrYu5|mhiQjk5e>?B=dbX7{ z&pyhZUf#0kU7-12MWMc{KZPGmux7tgaLn?{#ru&nWq#ZD$R@wR^HF_HP7uqauWeo`nW=;NR`Qn9P{9%c+3I`(W>e#uNd-&MOcfD)=`usIl!>TX) z|ENU%{~Bdp#He;_&Lp?3g<0aSeq}H)I!&Hox$y4+PVdxtQoLuKETgs??_P7>l7Ho- z^A=UVzTM7$zbhsF3d@NTTer`*UEHJn^_Tr)Y2Eieo_oYoTkfo{_B-Qv`}Y@%Tei$= zfB)U3;wHxN%iMZ)nuFr>`|{rN{_=b}(_6Qj|MU7+J3n68BR+G^_F%y`|14*-RyUpN zoT{u5`0oS{Pl9kN$7Q}k<)K|0`|suT*}kZsC@=kU3A7Rd4RQKNI_F%YJ^n|L5@2Yr)H>Kbs%b z*S&mwBjfSt*`bEZD*V>0?bhEHVlIEAq;URIJHyJGFB6m29{T+D+QS7ODrYpzkvVX3 z$2pT#O#;kT%?nIpjJAFM@sN#8K~q6`PmurTh^m?uul~CI4wd@t;Ce2uLP9iW#qIKE znXdoCpQiqqBf4-VQ}fT0Z3SlQ)VvszkYYl&xOzb>z|(befRcey~0`UXBIN>U;ifi zTP`8QPpiAyz;5O~>0>6}c3MllKJ}~qoY@9bncwGq%-8Nujz3ZT>BNJTIx}WoJX|aA zJMD_*v+K7`M(v)-Z1|5ckM)J|boQAiCx7qs{eQmg_0N^{>zLDRIg5)};w`?he=B*> z@!^|18^;aR^LAer^6U23eOVl?f0L8p#7D;SmFJ2>G{V;J(<%59{ag0F^F+b-vn&3u zHca5!!0El`J(JMJ2`;-2v57g|oKzU9cy@NCjd@S=M9&RV_kXQFa_>-s>0Skq_tnS# zG#l`>ZfRn?X~3{yTXf@G$@dQ#%~`#tDBG1?oYI?f##vIBq4BppL&wf=V{fYsl24*F zWF-xcf8O!-V%wQn57JMw{Q)m6y0*V&ecFfc)GNhK3=9UW20fK454(!bebE``rsfck z^sx2ft`*i3C-GOf2KX689-+RhA_J*)}v2lA%3wz$5-t4#d@5aKg$6s^zeKUPm>@rj7>|OrFu|5A2qK?!E{SfX^Vzs|j z{9XFe&T_V5t^Q(G2Z2LVzD=8_An^J8JVo_&9S{4bpK4-T!?ibl-_#4M`2x1wZ>jzD z_x!H1pWm|OZ7rI5_8j`Fm#9*hqSJSG_UX1w=2qNigcy#=T)z-DaV6h^h4&(aKNoIa z{VIP?{df({4`P|j#=QlH5{XFO3hgmn}&#%#0u%dq6ceApa&2wMxczJ*J zzuJW_?k|>OeQf{V^qBIVzg4SNrTyPt`*(prgZZ9^yr+xj|Bjh%Ir+)#x6?z}4tU3X zn&jHY%=6SH>A&MeCXR#?x7rj%*VjFOFgR>Kro5pifzMWRtblb-!E_IZ50 zg_FbY`7ni?I4jL6FD)1SGx~pg#pisR?RHaU%}hFbs(Wpw@w)3Tn%4YD&2QG;>BX6P zSZfbA1NUK#&JFV!gew0&w>YXLzN4nD?8Ka$lB?OfEPOe7-eNG^CG`B`mIcR}^RykgR&B_Bd2UY=lm5{T z^=rkfFHF0%BldSEw(R5N-}O~h#9qQXQJ|?UfA4XxG>HVmIEJb-H)bHNABq4UvYQVp_)+`L*&Dm+v>Ce1VbhfLfRj^z(_iic#!Z``G~ z=J;mu>%7XTOq|Y#f2rM&=H<&y6g;jX7k5~h=S|`i%yFo-yU0d5Q1NxEX3*s@JdId}_UZXVuSr z^}j`G#ZI02ed)!)=~aFAKAy2~y&qk_bI(Dk&mXqR#p^%5dNrNFwsPIoItOKAkLjMDa_w2#HQ_@SUQ~BA=dP*m|NVYheg3cS zt;_43&mDN(uhOv0c~;EEKMcwe0gexqT&7Ro_hsqn)A9d4{VM&xXENi5GwF84Kj+^6 zDSJC$&ME$8`HXpn%sCfyEW0KD|FJfczr*dYK#Ex>C#W~}!?CZCp6ib}FM7K&fZJvJ zF`bPL_fGXo%v}3_CHuRBpY`)k^c+ZkYJ1I>AvgPk{k7d0D}=1iuYbe(Al^;QseYe? z$-AAeUWb0oooxP*i@%CZ<MBb=l4V&)!g)5Y0r1H=zss7>Fcepd>pS+Uw`@e zw99XIteSlM?T%>^^ewnfO;HwnHc2I5p73$DL%X?uax&MrkWejL&C9>{D*futzk1P&ss72s`2;rl67<5$~yS<2uf=voQoz}Q**m{EWD29Yz) zllr=~4bSg>CbM3Di*jST-Tx<6SF`_Yo_hY+Esl~zIn5i76*Z!!izO*!o5g*zbJAL4 z8^q@1lEjy$yh$p2o8PBD7j~XXwOX-K(cR<8sgLjUPET}Ra;~0Lr8Kr7Z+~=NCewbi zbCd4ID|-8SWIxuE{M#C-I=?lx^hiHL%^PL;9X8Kr-rscR`@Kogs{5ZT*jLu(OKSbf6*62uf35%j>*+D+{4Koa{-4ZeW1I1bxAmUg z>Czgh1HY;{UcPAX;5*`Fby;wA!al*bFz9|}EQd$G(ka{B24Q=#ZT_Iql) z-Y(ryXetsT*gi4U&13fCSuPu@f{fP|uQ7jdLC4>M*+P0ja>umZ`Kd|f@1p}Ml_e9V z%v$;C=brBd*B1XV{Z)D9Aj4k1Z|iRFlI%aqJo#XRe!{XNn(RCci~<{^Ufg?il6j_} z;PUbZ74{Vq7?Ykn>G)>Cl(0wsr=^DfHNju3*++QpCd7PrsaPp<~F#@^{^F877VkJJXjl9+}w5R`6nng=yTAzGspPuXFG`I{xfzzUS{JrLU$`{8g5d zsgm!hH~i!Hd;k5~cYAB{jsM91{-8bCa9%?cd)RMd&oJZe=I`8Zg{Pl4{;STM+{Cr5 z{-p?mlf_&*1bq@xVzu{@BD*DxE=qWshp`d<)ggjzrr{2 zU!2T-@pCiSyh-Gbw)^+7Up-;o^fyx&84`>C{P@^+?$BmMFRKet!D3Dup9nMkF!%LU zk=hh+Y>uaZlf{L4j^mB*R=2fidK{8-2(ssR@4(l4Xv)j_hn@~|3+C6}JGFlHRBWp9;g`^mQtUzoEBd~i4w^Dfcvn*Z@>*Z;kX*RB8f zjXxu1b;XawJz+DSKK!Y5+i#xDyX!{93VU9#YsS41JetX1@b7i})T_Q1uWw*vcM%Y} zka?m+Mefn+n-0tq5{o(GqS=^xHi^}qYvWX(-Zh!|8qawR<}RITuj_l(BnjM>eD$p> z=T}b1EccrkpTqVwE5FO!_WQ{{L-)g03Ww!>E8EyIDSK zJyD(VE#S#a+m=e%GmVcl z-#=F~*Uj5&UuR%>Q2$J&*}mL=2QpHoMI=}L2;7wP!~6F6ITKmx8Oje|*z&vI?EQYm z8YS!h`_I>>{AJ*EU6CD91YLd|B?I6 zFB#9Q+;Fofd0OF`(-u+&Gvcm3So>KlyLQ{LH|B5nCvr@2%3(R&%<-0 zn)%Gzc!tN>pB(3SE9IwuihkOD;_cSiPk;N@eG)z$8g9FS`+L@t?tpNu`SSb{J`BP> zlUnU3?DJ5|@T%3Te0Fm6^OR?;$+NxZY(6zb{a%7YG0Ul_$7*ZkqJJ({FMa)g4(oTP z+4Ua|ZJv~}`sfrJvt8+@yqEEBnlAjHNu%0LdhIEJCC(`wb2pZ_RjF40QNHgn=lGdT z%dg3Ec}tZ2{3)7pA(*M^+W(w6bw9ng>+k>9W*=wwZR7c^Dq&@J4Q-2jU%XPAf6i?2 zqazcA%WgTm4yxSO!gj)~U|VhBmCZ@BmBig#!VgU?kaz3uYgE5^X`2bN_qoRDpZ9>) zB``(h1^;>~ckUkF`UPKX&p94Hw)lK0Tcd=0_1T7&z=}PR-04ev>{q>(*~`y-tjF)8 z*}MCS*PSBy4=+5gZ|}sF;QWo__Mh&bFB+yupZzqu&2V?%;gc-JYh{di-MQM#!!PxF zN_dCOdi}@T>}1YA?b|MW9oqX32ei~|t@ZgOSa^zOA8W@X-YK{K87^E{akE&$k5xHi z{+l;_C&C#P^SrJo|9QiCt-WLp_xYN?ateV@j5#E4A2U0;rDY;>Wy)LQhO_Uu^{wWJ zCG;Md<(6?)r?Q||nEeEkSmLtK%}n`Rl9$({+HEcT`ir$%_1SbrscZKyBrBO5^DBMu zwf);mPu^MKn#~R`pYZj6wZGPr7CV2I$c1a(4M|G1-+k;n?#^ABu<7vA-KWKUUxcp@ z+^c!{TIHLgGr||SzqSi@QSM2Pzvj01o4jq+roVNo{@Si93QBn*n|n6)^AdNR>$Tra z=NTV;uYJtCA#~c$h_ko+UfNIfpVB*DhEZ_ z>1*aE#dAqEtL!w&TNeLW`?Mt6{f&8#t5&anW1c&=W8SdK4>-F?1R}G&Q$)pfB8%P3032N&5}}bbrbuK39w2WIN-pV z80lB@DtLaB+>Zn7YBvMzWjGl2Jk`yQocHg`^4-ht3w+3V(bV*EOyA zY0l9by6awt>ZVPTrhf6bCo+5g9%r453;TZV(~^%cOG!SOwUqIfo6U$5nNjLTvdM^*P9 zhGg5Dr>~_H887LVD_q9N+pPBYb4zRme}h9Y%MJ-K2M60$IX#8?!h75EERy)Y6mFl) ze5AmUt-hz2kDsB{^tsszx1cTdH~35+n^cD!UTu5oVRMgP9&`WX8BtYt9v?6$bluNr znr6Due9B~=s92@4y+)!lxa_~neZJGVOENTWN(Qs=jv6+ffV#Nm&tJu_8~v5f-ELRp z9HH^+(zj2q7~B{o(i(d1axI>Hu>4)S$Go)bw{J=DR^ z&VS9nn75R3Lb~tACY~n4$pm|n5Sl(YsO`ePqmSzsNv`JK zaewbL`I>u>q5saek;nC~d4KcaPl#pWO&cpFIB=kt(7uDEFUh-g8?{ zolRLH>0t*qFx(c;uD-oS?q{8!UDpTUn1iqNnqxOx9g%35IdT0ZE59%K6O*~zDpp7~ zto8kW|IK`>^Y2c6o4+OWmblwq#)IE(9w<~{Z}~3Y$(Y`t^!;x1{a@FfN}jJcc5Bns z_xvmjD$Ni4|9|nH%;4TupOSetk>N(pu_cXj_zz@msZtTuuo!(n3yOED+e%8{c{qSo} zWez!`li$`w{{sq)y;X5o*d_h`o1Ha z<%QtmqhDqBc3#ck(>I$pLG#9DqqnEdEZ|^PtUemKO?f_(^xr=^Y)Ur-);f69^ljn` zu9G;#_~Yn|b-{htd*>%O-k8IA-nPGb@wF}U4`oR99J@08&i2xG8+}&s^qlf&**N`X z@S(F4zdev}N((L%{!y~zg^=0ag&=1S{S$7Kfmp@ zjKY+{Y0BSKKFY=E@Eco%9Go@d<--q_s~#?9aCy@8mrd+#=fmg0Ea%8FL|J}b;VE7Yg_Q{N?I=Ni6e?X}Z+Pgw3&o#QyK+0p6RtUu3>tb6=pv2RYtdEO+p zn@{xEOpH53|B7_7Cd;q=?av@Q(IMnpK+6HP&k7|OT8evq?fw7eI#{@H&!HoVc_>T>r1``P)ub&>TPybl)t=d)t^ z@VxHb^DAZdzgh_}RD9b!fA5};z4>o=8U*e=6TOi9Z^Lu%KS|a1MGe!rPo%T4r8Hgl zO~}0z{q*@UHg2iVvd~1cgNNK+uH#E^DNp;7_cZ_S{V0+PngRAoh0|XM=@+l?!6wjW2^6fnST1~`#&3) z7y{({Exw9L{@i`(YVzJbo#XxUb9x#K*jBUmG4}tH?&G;q!^X(O!1JK)Wn5jSv{;R^ zNUHxYwo?V?`4x&8+^mca1Yg>CW6q7+B63#~%F^}AWOuKMIqx{jfF!$fblz8;KO6stHg7c2cWd64 z|KzT9@8A48(#9($_%j+fn?Jhsyi#XT@3!Lwf3Sv!7 zdkXkY9`Kagxa|37-J<3v8=LP)K3#Bjc0%uh_gU6QSBOg{o|I57uDib8Wu{K&U#krr zDGTP!ckKW9xnSYH=~nB%>#qBF-|c7CTT%XfUuLI%J-<+ngZJoT*Kd(c_Oth&ueddN z`tthc!dEodvzzxGFZI!mtvP%8T-)B%$&v@1E6q-Gvn7?E)xVOsY&X-FIm`@->_0i; zS{hQDZ~a<+%5imZ**w7;+$`>h8iZ{rMgdP>uUE{{*3-~YGTmj({rmm zH*J(vwEG%Uus3ho-uau%jW-xKMtEp2Ki+hRA^r!E6sa-DMxG|9a8J%=+|;8Tpm6X*)$Wez^L9fAOV& zGP^YWDJ6Wi%o~`G>Ij8yoW5IXMRuE$*^|xBuYWr-r$D6o#;wm~wden?Nhv%Z+pu?f zZ^xd#vkQ1twHp|E*ltzd`1Cxx_>954`O_tN(tbSH(kIb>AZZ2ww29qn8<7%JUrPO|YvZRB5PGg*@R zlVtkA;z}_wh4g*imb&}aURJE9ahDk49o&5_eF;nTW{RtcG&m^ zx0p3YRlNphME#!UF4k*fWIl2*`) zZBn`};;wsw#;-YGT<7^;ocH7T<3Cm!is3&r z8IU;G{h8b(8uQO&<+TiZ`gIoIY#&v4%88XTfZhs57 zdpYGF$4%|VFAT|h)-I_xVhHl?`p`Xh>q{f0SN6|R4+tNtJgPWl_o2FXaevb<+i(9j zpDB^=#Iw>mi{F>OnWlU_uF3FmW+Wp6d&v2&$BQo=I&w?M;M*l{{Zh%j`^xxP7@l0? zuX(_Hda>MBjoK~_cTJX%dW{c@EPNOl13%6B?lILs&?9#(w;=cYaz%-)w@QVNzZbAt zw&%&_y^1;4ji%>4EmoR#*QxIH{{X2S%k`H0WM`CE5YBdOfx}Z4)kP&9Y#AvZ&6Z}# zzGz%zpZuw1lg#V;y?Z7(&K2#8HLljXa@|?x!O#A5w`c~f0-dKkCILHDyw))*$p5>M zKK=gx!`t=c{~r^+}lN%7)Sf4*MQge>Lwl*iijyV$+Qm6Kn#~8#E5u9J_I!7{cc&^ zmNED4%z5*Fr(Cmtley;iLC0hDY>8{s&M2&SaCF@#-~AWlbQ!!D4COvK9P3@D`YUGd z->v0kwPqiV`Q^?yzufBhjK+rhZ_XJ=G=)x*vxU{EY7*ZK?=f4Xn%zD4H2SyUwwyb+=55ygqx(#2 zx^T|2Nd4aXt$d9658nMY`&)e3KD2JC%iiak|MBiT7VHQl)=Mnh0SyziIcv#%FZ(wBOa*>#SJD+VAcdFb8!G-HHgcm<4 zl$qw+vGc$z&W$}?Mt8OK*9pG8eTrZI=(Yb-?QCXefA9HeUiI_(Qm?O5u2k4x_^<7| zZ$ohuBl}wWZ~L4k&d%paezfeO!g)nLfm3UKTTufJ@-DQ7lo;|@2sUK-u)d{#P+4C!lpRv$wjyCd@m!DKKRM+Sl^nY zZFu?6nu7irrwnYP_exzi@cF6Xpvhho-}m~|mA7XYW?Wy{#CJ0wwafUvz45NikAkls zpLM7{;HQB{pcRkzI^S6KJ$5C1(|7!-$v@X_AoXhEdUm(-S^>d5b=v7{Z9R%S%H50F zl8^k@>^SvcPsYu}-}Wy)@3x~J}=YBWzRdSu+Yl9^Y`vguJ~i|YSXzChONJUFAse-$13%?*W*YV z`>MZxD?$SP&;P*7AGPmyeC+0!%KfL=9veN0s8}z!Ni=&MW8bM88N`q!s#Y&PmRl5jv` zUcgMQgHfLZ>xBP;!ik-g2I9&Q&#Rj zqgk@(fMqUUhvEF=XV->2bun|@8UHk0=A+Vn&a%Wv7T8(mJ{}^Un)5 z72DGqJ(5Q_RK1tBUsh$llB8-m^}e%&)5FIb8sB_0t-RJh{c=^v&)apmrOrXdVN2{U zNigPD-oCFR|LaQntfG5UYFwH6z6LWdQ1ME8+dWNq8gI;J4w*o=hE;QCsVf{i8t~-X z8nxoqI(_}6qT>15*MrV|v{QWQ{nxg0fr{j1!%sPnvRodyFj%fzXB(=zmVwVM$4dN^ zCeyFo7n;9Im0m5@T#)mU`%1UDbq%|7>Dh=QcW$#vCCpJ~NjdYc-`4YAnEp);m8&1m z&U^Xs`q%t2$#?&6JYS$&ac)IU@7H@*&;OtC>%-p7RcH3CPBzq*|6aJRE$2yR`HdN! z?&2HLnRYl;|ExGM^HS^mK=#EiXD?Jc@4)k#$7Q3-?7}(A*0ArC&vw6dWTo1tzU|pF zM31}`oz(Y7Pygtn6CRga8gu{3WgoNG_^-vR!NTDXZ<_bi!rxNU;qtG!dB@6=73S=U zy|#Cw{YAUeZ}wk*{O{@JEgbvf|8}rzUH#7(U%hj!eEGi&>7#N}T^3i_?VbN`;-Od- zd&kv3cUl~`d$vY$ddJJ~zw6pXQa3D>`ZM9b;dZ7!62~I?cIJFu+#f&v@k0SFOVg&a zX5kaF8yH>usw}73-!5OXPx1rDv6gcTFRyNrQR;8IJOAM0Uwa~y6Aqk=&)k2y#w$na zZ$|a09Qm7H-k<%qW5QegsoB2&R>{3O5O+dov;EP`WVgL@`BL5XwSGKl`^lQ8eski} z-xCgQu6=pD?#=OO|9{B;f6VaX+TKqA3Dz>xKjgQh z_gEiZx3fB;dHVX<=QcWDS$*yAImx}->T6Bk#^2Vy{>oVYv3$Ip^t00c>pyRnTBXQ; z<3)7#%v$^EV}JN6W^G<~=x;*-vy5$LXC* z(78i}&hkEu_x$HvjlUH&>9--bN6(+7vhC@Hzb5h@{&nJ&Zt>|!zg^F%|Gvvp+afqO zH+Jc!W1%aL+n%!d$G;82XLWZGpN|BL@r=F@rM zX#A^w10w^M%$b&&Pm|~G+4KAE`+Iu@yXH*US$QE;JiaFB=c(|#w_BPS7bNU)L1A`AGxzxvF}&wna(vI7QP98%zSSlm*0#Wr`=~ir#_wihI4(8t@^LS z=5nQZgn=iX0n$Qp@jYbDxWbndwOj99C{>Xkh*`;p6 z&kSbma|U^v+Iu1u*|*mG{VrLt^+OQ?Q>-adCxEYSN@izx;j(TJC=XLQa$F1Mq zG@p8IcIW1&hnhAkj%V-xxWnoAiU$nqPChtmGl!|#zWM(g3&Wm68<)vg*G;>jXYlLn z0^^wrN|!!1oVoK-|HYi^4g30a{xNOId{)Qk_wt7GmA23M9UplQM?aruu((Ed*_!{_ zbNl{nTC&u)&E#c;$$_rD&Q)<0S zcdR%d`zTUeYglUXV>d!3QQO%QXq-_7}jYQE#v-w+jPqhe~k7u)b&iTjb|Jv-WO$QEg7$__` z-7+sDF#YqAyBqsI)TP;OczJ*0^N9W&(2lRr-@?T%UlxL&TQlpv((A7S7#eIIv`Obh$o;y|zG8yIwfdYR9y}WJ9r=^f8t(8PG^)#I zb8tQJtVB&A^V$-DS8641M88D zuFntrV7q#MMfdK#GF?s$MGs58xjNUsD{XG>NuO5Xq$|!prMgmL>G@NOgS~c7n)X>_ z%}M6TxfAq1^;pc~y!zr;&x_e_g92j@H&33)6!>+{63+YeUxeq!*L}}@A7l5e^ZXK( zgj=8eo~A!*kvzAoGQQ-ZYi!;7w}zo6LYE7#Kdi0by*p!3F!QcL=T4?{1&8`ZBF zcGJ)5FvMgZaQNK3EFvVOg5Q5jucyZCn+sYW&Ej=7yYcj2R)t=f4A?6G#ohi z@xS@KipQTmwA=6LI{WguGcyC|e8-(O|9_qjPn;z5`zIS`)b$zS2LxO$)&$Ej{Owy= zdi6oidAGKyDk^CWpH@qKRy?!dfmM^v#>2X85tHLe4@i|oo zKNvm~V^ce@w=lPD;W0KY?S#dj*jFW*T{v9b^!}~YMCqb6(ckYJm_KpKaf2GC#6xL$ zpP1(@3i$NwY5PWjDIVRhUSbe;W@je}7{4`lnX5 z5qn#{NbmXeL9VNP@ECrZ@;ND=Ce0VERD6(H zJ?)P2$v;=F>7Tr@MPd2B)eAL^{Ccj;dU;>^jG@Yn(QlzE`O`&Hl=Jm6Zqd|6bA;RLXNQ*vzQ2 zFF572Y`Uu3nal(G60Zj{HLN=?vg*gVN3ND`VN(hhI!WBUE?Rrvh3(;Duks5Y)8=lU zI)C$xTRR@^Ui*Lh&+_zZ@;&v@|2a7Xo?hCk9$>WllGAg^!zT{xU8WGU!eMz+)CxhK z*B>G}(obkkuWAvi?sD3c>Z(4UL+DEV$)w|*OcS3#i|%qbZoJ{WP;iIhC9^60cYgeQs$2izIxoi$pViG5Pq6UZ2yVVHB_~IV$6MNg`wzcq-=W5Q;qlzke96Xj21Y+4H~)Th z`Fc;mz4vLkGw*Icy+GcPz4}$+>Gb43=eEgzHwrlLIgxGIotqz<=d5zKeD?7}q0r;o zli82SB-~7K+rQ4z!eW+s%*sET{@8kM_`{P;h+Uf1y7^xnI7 zQ*ESoy=Gh2r}#8_Wp;P(1H0+7W-zXhdMx6jRiqS6^_&f_ zHu*S;O_eq?khvyQJel#N%?;&%iNY_~ek+zlYqnoMcae=vvcsuwRimlMa_$Fp(cAyT zw5Yk-Sat+`a$zZa#(s75uYg4lrmO zdG=FWfq~12q1hpz*>{5(V@QE!ShnZ)s+_!!4_u|+%$(yWCEb%NvFYXmm&TrBYU`!7 z-$nlfH_wj$N`9KR?_Wvn>VKTd#v-i;8JLe6U95e^m9k7F?R?J(>5BV`@>gzz)*2j< zW9Im^r!7P|bKza_k_UMcDxwu`M;`0_Wb$19;CmVI6-DbVC!amx?=`9FqHdp=w$HWx zNje|;|NYr}8nl7BEXhG*&Z0Hlo=gP?=4GB*safHuXqjws&VZ9Bp;w z>|fO`d$~MpU$yN-lM4rW!Isu8BN&m79K8?(>B8p2aKr^HaA!vASNnecOu#zuxKD zA4)7^RLxFsXO(zYlmFcMRfOBl53iaGg?D=X5aGRJ&(LT0e5Y(xuCR%b_}31fNa-Y- zz&AEo%Of|brp5c47N!PHu4HQvOT9g7g~K7o&sR$HtxJ#geKfX|eeB<}R7HBBvZVC$ z&i?8XpVset%XxZg{Pj)0$~PGGZJty4Y~lNtF&9%J_)dINk)LU1EB!oTeNk?9`{qpr zn}Y9bKE`A08uhE;z2%7;d_Mzvp85T6*ExEU{qe>Yo&2@+7BQJi{(jywe|r9Xrj8B% zGd3HSF|IqiT;Rw{b<1?V(=7})HsnVi`!AW0{PhN?Z+YX*`q*#Fe|gw^;pSvWym34J z#Zc^%@dxxdld1a0@UGASF7qxd{vlHvy zO6~aLZafRu{&#;;HM{=njx|1eQ}QkLTsMddWn_73Ec;hHJK|d95pAI=uj}cN4&Rsk z@Uga@wfB|rN)E|MHgBf{9}!s_5XbItaj$`){*4FbH#5%nU8oI`-<$h$^8O$1PiNoz^8EDQcg5?UcE|6`-T7T~`Vy7I zVwYQeg_EYM@J{)->4?d?A5(q)8>>$J9o8$-@9S6V_a*gZU|;UE*A^}dHuK(@%(dA4 zS6{!#mY+#$80y^C?>3eS=szXY{oZ}M&U?WZ^LPDwJ?Bw%!1k;KvRCSFa;K|?G)MeS z{P62++K+ed)6TE>8m;|&{-QsTZ=bncc<5JkqL!CIqhUhDw#N7*5w_bJhlH#bulQoz zUUH={bwk%d?bub;Hb0%NU(c2jSkS<*OeyfUc82Qp^^*VQY)`Jgzv;((yV~8SCMW1* zcHT`C;yL@5P01|sN<)*f`nPG(`-`%6zKguS$L8%Vbv^aI-Fq|@a=&V=-t)acdyRAE z6sv+=f5Z(A^aL$^TphH}Am{L8o%7b$^X$}q@?Pmoc0Z)Fo#(ygGCr%|)05rLH$0l< zpwHYrVRcE)mhGJ9qmpMA&5*dZR`P|xqJv7wmC3)Z={4NB=E=ZzEv?eccH*gdr>lEn zqYrY*2)|~SVRf}={_WxdmISs1J9)O8|5b2#|L)5NzUN5qE=^m|cRsEDhsgBOqQo2W z2A^ETWJ{zN<_K-BJz%x2wR5iJVorv)Po_1;x3e)k2|UD5@#nGp{Z{T5{{>hAJf6It z@l{@WHD|$Ywg(42CN?msoR<^uJQcvjn(}u2d5z#DvKkz0O@C%(2Hi-3eKd&8+{vSW%bARSmwH-}<9I1*TZ>x?OPU-IuKif6uoQ`3rv!~^RbFu!yCy%pU zGmY(EldK#+HR!9x%;Pfa*Gx$-V_DC<*YDifYd8KZc(9pAXoJZVBZC<{A{(Y&?aQ^g zKBd%9=0Rirr@$xgA>%8DAnG>7YcbMEQL`A&Z9u>0s~&R@pAUe0-k4@PFOxYQFLx0 z%eIpp=^>vax2R8URC)Tw{HR>v#pBDq!k;Dc;Z@{QGz78vg~hYZ$zo4kQabR;j)C??xtr z+Vm%-ukOrDJ0ZQGYT4iNH5ZSCe$Nt@yE)zVWlZ$rvLcSYPm@0|R@Psw)sLU|Z_9Cg z|GGPeMfN&;caf>CXyuhfxBlpf6S5^k6 z`C>)+cGr{lb8PEoJQpT8F~8`Pm(14_ZdG~ZCoUMwcpI6Wz4PAwW%aj=nFQuMm3>$# z{CUQ0`Qw{E+1&l|e$D;koVHVY&2KSY>!1Cv`r)hpGF&V>6F(p9slRN`#L=;&e$zV% zi3a9H>yrQdnfHB9dgUYG`6o`7KmTpb%JAor{=Y|`9^3zW{L8`Y+j95cJ16opD>SoC z6cAX>=HS5nm$75nJ?oE7*>3NZ3O+BBKPIOAW=@6bg}~26S9zIodw#@!s>*u`US5(S zBDduqlMnM!lZty*wWab$Ck?uDDiMz?~YuXzs{OXfXWxxKX2GV$KW z1dWYnHod;(+j~g=O5I$2A@3*WTYG|5?Vn%5Xu$JSdFA|u$V+03`zOo@PLojo?)}qB zMn-~XKcU**?u;k-pz+`IP1^FI?eh1aFLzgfHB z^YuT0EElHCVG(_Bpt$0Gw^^(6>Za%kvJ5=ecN$!MWMjPad<*m@9dd_u-jb)~Vf@lO5kb(%$|_b4}9g|GEE4-@OXo{4YZD z{Hbu$a}OJzece9Iv37b3^U{$U9nD!xwY;6qR@4Jixz+S_wwue=zpK)%E#pucHNjK?fQcM zclNzsf46=6{$)*`%+}?%1GxnSCWM(8aIzaaR|b5#yJJ2h%PEn9^Zy0;_CH0%Iyiyt$(e(5W3@BBYQ5J^Ma?wYo@LQhC$@~=sqBf=B9`L07G~1f`PbMQSd=EG$SQ5KpTYC#3Xjtx z%TMBR^*djE^45>q_jb12-kR6uwq-kCJldPOeyw0_-lsjz|1ZQ#Z^w zsK!@*W9zoG1EmcXXKW^amHX|ufwL%&h4sagD{K>EPgQkKXuA1pPBZ(?zk&a4{D0M* zaFSH4nEfv{;QiTu33qv4?|hfJaDBnLsSIHeY-P4D_iVS%y3xMYzT#iv6=og*$@Kf3 z5B1&4XT4MSgtD zQI9Rf!gy+A!ms%=GZ;I}i_YBN(fREUlfgdAdr|u)n?3F@)!kp2mnz)4Fns>%w^t@G zdmlUI;IT~q+g$G~_c)I&mz`yg6udfrvUVoVcNT-0;bLq8UWdLW+WgoT!5}ZUdFH_r z*^J52&OWb9GZ$TM-}?H~ocZ@d;DIBj*-^u^km%Tnt?)MD#+kvyr zNxk3?U3~t~1d}^nC#FwXt@&!M^IW0BZcnAIwV!!E<1vF~b+zW6&FAFq89(`Z=fK?N zTpqTBcmC<>x4MHxHNJ4Zwq1W(Fd)HTCU4zt{W*S9FD87AN>_ao^ylaH$e(|5w#5R+&&3`{%z2(1>j{1!CTC848_PoU+hwIOOS{G`@@I>~#u<_5*r&GiA zK!+FK+Gbl*znp<#=kH~+^P-jrR6bQ^xaiRRzrA4Pg99954XOfHmM(Y_T|4vI)z&c2 zZ%dm*H{BQ2cV6$j^W6DWH{T6W80GzBGgF!N%oko)+QHj4mgrNf*|HR5)6&Jb3WQcjM%6Gn-9@;$5L%%}$jT z=Db=}sA{%KPW_rm#a0Wq^-H&2wV537#pLHI>7$GbqN4Nny!?E6{-2k>r+=?`(e_Mm zim%6$)Wu6Xb(Q0Oika6u@o-+G$+_Uy{E&tG2BAXiT^Ch09zVo0q3FnAjVnoE`(CqM zyRGHWFyl>Jp8@ldKj&B$BnIc(?^)TqfZT+Ww;A{DuVDNj zv3%cbAMvnhy3GeOCZxAoRa+XZNOG$`H#Knc^V{iX*2exlS-PIt1&uL()72;^S+f4htnhyKGQQ+gPc z&ba(rrP*U6oTriHsI;p8t>^w(A2r+loBCHB`6TOK`{q-_`n`8j#ZS(!%b9mlzj~iRW6#M>!_*7M zQqFR0ICtxGvB?Y;9s!HulV5kN`rm7$@?~>W+?Um{lb*VwNUKfn5B#Elt|FCrL)v^5+SG8!95ypEdlIXt%Xs@_EFKV=#W z4WgH>?|Ei=y7YSN^q%^=HMN&#s{T*z-*3{;$Q*EGf_sB`yI1_>`!b5>o0*znYXR1= zRk>?h+b)v&r#i7+T%^l?*%PB%bEA@{pbDXBsKc3v0oJ5T)^<d7azWGbh%ax_Tyo%S*3%)}b9U z?iTNOz9@YLuK?HAb?F9=6;hUb?L4OEJX3eM#)~G$PFH`Tv-v#I=21H_Zv&pkt>nHC|s`0Gebv*olP(QOcGp{=TmoSZK4?LM$_vw0GJyqB?kwc)t z{lc##yW@A>E*E`KoGV*Af1|m{`p;*IIG@`8+P#T6;NPwLGoC*wEnS~xdPOoJf|()9 zGW(caeENCU`A_#bR9{Jcn<$xZ4>{OX8%- z{3{QpzY_kuME?47OUFUYAs!@S0y?PEfL^6u(p)@Zi+)OB-gZ}Zfz zOgGS6`+oDq-a4ke@z?Z|euIv3d0Kh?-}KYL>ub*xUHllOMhfq7Nsi78YQI641K^{tl3lEGV|u%J;y^8a#*s{9-OuH z|3Bj;zs zU;C#g`!Ilk!Tv#e{g3wP@js`=UtFJXCYf=i!_@)?XW_TCf4CPYXk>kwdt}zlBU^Nq zRFsK+`erM#>ckwYoG`!DPkB4dPw(RR#Aax|=UPjN#n4BNJUeYL7ZK8JVHn-Hbv#0ZNY4wPAUktf; zcYgn-8w+NiT$hnPRWR;;XVF<6mYt`jd@y_0k-ct#J3H#Km^u|c^ zK-%u_>+k=)`1IHQe+NE&oW1YDrqqzWBV&&A0Q}2ga~~i|S%Z4LRE*S6(eM zecZfxetG0gN5<}L?>^5-T0ZfLzxz=~#&er)pa~xPIUOyTXE#Ot-2cV2 zKk`LWyJ1Dpc00aH$Au=ZaSN6xC}yoK=WCd8|HW*N3#~uRjDH=rXiT5fcl}6>ry`Ri z!-Gn}x3lcKziUo8{q*ynzVCO;Z>-Mc?ft#JdX;JSe&0fs7muGm+$YFmz&x+maDmLe z`nR^v#MEChb1X>R#lHVJr+`9_%|8ZCi+A!586&?3OzMKhlx#{*>UT;-nyRxC@x$X3WEvt54`SjW9oWi4k>q>{0{@FS? ziO=}>MYe16U*CE(L2z0&=xn=tZ}?vnR-ViI#&5mw`Wt(}%R=w(YyOwxy0G_O-k0k~ z>KPcz)_#@$IZ-~c?rV7c*A0&jJehUksCDu2!}9+=JUuM`Z^OMq$83Wyeb^gwxRN35 z{^MDv7!s;h9-H%3qGy#x>p?lLh;JNWt;}zqzTUii>dJh%&)cTHmwtHdzgfN0gQwrW z&EETh=b`7Gcdf?%kL{=p%W_Xh_|jtZb^g<-T3V{fpU?beS=#%5R#LM|qfOl6<3$Nc zBKd(~UkuqR{@fI{k?On2%*Z-*Z_67;(S}7U4+~9yee>~T#aCQ*4E)n}uY5mglk7dY z&{MO|h=v`ozE}SE)3^P9PkcIgzGmS>hFRwO=Q8&tADUpk;63Zx5=IH7M2%bDl%#Kc zd@LlDuq7>#ZH?p^3Gp?GlKzG~M;RVp=1yqf?pScl=55NGqgOvk8$0|yxOaC|zoq?U z?N;`RZRPv;?xox@VP@DO!_M*P@^Sy06Atc4W>($Lf7n|3&*OPvr@MX%Px&pCm9S~= zxm2?~<-IraW`;*t)&6bpi?^M3cE$C7{Z?zgK3(Hinq$57zN75iWRo8f#;J1@rp4=L z8LvL_>3c=}&zt?rUHlkQ*?TO)nYtprEqrJ2E7f+sRjHQE6^`JSzuOx%esJtmdHu-y z|6}=Szheq#wmI6oS;!wT@6Qu=J^#u#&C@5V_dHu?6>9je((dZNwFj2{j{mmQM+qw;!l*?Z?-cOI`q+Ko8gz4H`XW19uu6UX3sDq%)s=z zbc3pVyfst2)!vTY=JSjNXPu-!-LrUSy@K=5siwCFN_+mr$H&*^nEkEZY;X44eY*eE zo1g!k-Q==v-s}HG{PMrs|9J9n9Wf1B_R@>}?cV;1Bg)gH^L8ZW&Yn|Oznqa_<&kvz z-#4FT?|YV=V;%72))Xs8^Hme)3;pX|WwrQ7 z;qlf(@`k%V?mn84l3K4V|K%*tk_{6#eXZ9pS5_^aUB6JU|F!>~*og(%Y;0d5BEI^$ zt`nH7eBzV6mUr{=3#%K`JJtxyJnBBRahF_1-kjc;*Lht#{`RFO_9mQhwR`r>v2&ZL z@P2pe1M?=OXFSsVUbiy+jP3uc+@cC0sggIX&N6tM36%Lg?Rpu5$fbR0yY%CKJeof3 z_5Iq%pPuK}-!J-|E2f|GhGF7=-Rug_o{aOGU-!vcFZ5{?o-*aaA(pHk zJ6AhCkGzwe8!rbF?_~SZ>90YGyqBeW&^C$}=pcZn<}a7c(3` zv-Cpanjg;h=H$M;o&8t8zJI&0^tqkgBFFE~e5ie%pRJ|tTj}97))n^(`!{{IInH>> z*vMsp+KKfCZnZX5^j{;9GJ?Y;{D|Lqk`{3h|*Os5DUm2UYDTRO4bBTpdrhWQd zXI=JwjzRFPIl_zQUpH{l`hI(2ZJCh!6DEOqUZO<oxA4VKxnWe~F^}^GwefxRMlPUfm zj$d#3E53ZI%g>pjvwEM_ysNEHb>5cRI`iv}8`?&;_DLnX{|NkCzSH-U;atW?EYj!q z8M8^=V(?ek-ub%g-|?DN4qtDY?cY$}@#na9k!yqLY{qRCo=P{S9^~n^N>8Z0To1lu z=wJG+dM&r=J^N2y<6+~7z7!dj_eJ^l|NrOj%|8C8Dm3+Q`S}ae76v$YIo@)L7iF}s z3FXrG+8W+j-_Rg%P*LMx0>?4Nz+}6>*FEf9k0@q!v^bcY`k-{KORA}Z=TJM>e2Xj7 zW*UiRESxfL;r+Pkx3BlD+xl%^{rTcs#Z~7rzfYbs=lRdS?|$F=KJQw=+U&KqObiP8 zcAsaS*Ab5`3DnrI-l+cdcVRY$H;!dzKx+t9!W*u>-0pf=BW0~z0~6zqy-kc|ESCcp z-0^baH!qWc z3mTFl)EPu7GIQ?RUlLg1eTNRr;_psF#E!eWJepRB=Px0UD zYuE2L*En=*-?PK>qwam)$FGxLbNT=7J8$L0b<&o|iA`WMy0mE0bFs+mbLz)d26cJ| z_hnq3yyJB2yRiEgOO7mbX5;w!{Eqd6gGwnkBjWB$Zu$S}$d2a7#k(e4K3g5r%_&up z+qbrnUw6GUD@&mfLlE<-bJ>0hGS^LKskI6{T=6WVQDSD_XMXiq#@V~Pn1T;>-)$64 zye_BNd9VF+Lh@bh?nXah#${1D=RfiGIwtk$cRe#xa0!;a5MTQ1qvS!J^q>v3$vHdt z+|TWOCu?z|bUjxvlR}s6YPo~$ms2lEL=>Lj`XeC_ctEK7+bOop&&?uDrbhY)_zui= ziiqsu-*@h3)ZG0&o$D*z3X1=KE}X1aUSoTGYpmMBzO^EsHrv#lf4)C;=g()e!vgq@ z{(cn`-flO~A)%Uy)%5SrrIYqEYCoNEYWC^EdHz4{-``RbT=+}A;G*rUj2lePYsIa5 z@8=jk`OD7hu-Y}xp~G$Oot@u)$JYPaJ8P2b+zGcE z&%C*r^pCgkj)Y+NV(VATMgn0wH#Mp0aGm=7w!?XQeWv`{{H^~cNeUL$Y+>X4eaqhU za!1mt#_#u!=TFI7Xtna)>L`_q*Gu2+-|n5>x?>t^Yi`}Y{BN)Et^E^rMt$i& zXV>@Bc~$>y_cMRlH7>j_{r?2Cvv~S)o2Qyzzi&JvcfWEqLxcRkhw^cC&&%tU+g((O z5XeYi*rE7bzvxWMJXa^3%LjOth-$1*T4Bia#&S(jPk8G_3!x2*-?^yo>E}pWxAFpKf|wpW`8}~=;{)FL^2!C3s;STAb3a;HJ^KIc zy?pGymwW$j-ShnZdd>LVhg050&2rG`3N3LIWY^JJan8|X#$Ol4eBO)htlS(MzFhtK z_wHMh#z%{`etuv)VX?YY$nlM${A-fa&&`)y`PRbxN%`%?I_@&Z#gcR-H!Rr7`elZr zuXsc7I=0%}9T{`NY+Qy1{$Jbf!qLl-VnNPB6+au~}}J5c{NrEtdTs z-$srZO_IN=>+an;eyl6PzidLX;A+{1N8NAhW7ofMPhAkPPFG_J<_4ehu<^bN%o9RF~T4kG?$qKRe$n z`s9DNC!%GOZn>5TwLg9TnEm%ZkK57T&gB1`AHO*!P~#te)q}m)IqaSaML6u0ySCBE zS8#f1)guO_BV2bFGgJ<*_;$EKqVoE$bCV{8GO|bCf9c^P8+=!IUR}zksFkk`Z}oqC zV7+-)Jqzn%-W9d|$)`{3I;VeKIf5@T=-B?vdtzU&ezPxEV|l5MR`7~z`3rs8>lX2H zo2@Yw`^taGuIle8@!8+5&%OHZlc~Y;{~_o1pS}|C$6x8sjq@LW?AP+SJ1^<$Q@>d= zcq;CFp11wlv)j&hTGoGOVb~O~dB6OZ1?;-vv8AE46SOVlY=yHKKV;||-(q0fu_?PP z+k^4M7vcKrYiqPQj;wvZa>Bz%jm-;|cWEjJh#u5vpV{#ur{2b{_|MA;zpG}w)|Xys zz;adLG!xIU{-BW6m$KL<#_>NE5IGy88FO2`*I4Y^BG(U$=O5hr zcIVOKr;7jo?8}~J{`c|kY5g^?ERC|8WlK`pvSr0w$}re5vZ&xt#aP{6{GkynCJJ-MMJau(YD%0zyF-cg!HwS^83nn`aj>exnAmYG7HnKtz|CqeTTOs|JJ!B z|CCe0K+jl4M7Ygwx5WAFw;0;_t4sf~#~0myy0O3N#iy_QyG!o!+ok=rTmM&d`Nfw% zrbu@DxLj7)#`83F$!6Td|^(ivF!LH=i<>?>E$LJZEq$^ts3T zi~C;M^;$I@DA@L&DME>L)n&iT2c9M8{z_Rr`YQW6#IY>b;NGh}U#}PRy?oLCB|e5* zZ~NyT*XvHzxNT7U*7thF^qrUgeY2eZ?f;hlzoh~viuy%9{rP9X-{bdZ3Nbh^+|R#h zQ?c&qv)#|6xDU;_aef}dfoqTLeqHR>6OXSc?0!-GZ@;#H+fT)S#~bT=zPhJO#MG0SxJxiQQMQ#=z z-^w{}Yf#ymw}wWqu2i&7blb_$e5E%}qC4tgY3L8xxpvR*3ontd{891$-itP!x4e$^ z-`(tEfA`D$j}zSdUvBI56(RS{%hj$dxR^a>qG;x}Y4Z|8xe_#P{Wq_9xa{fO_kRz3 zdRM=<>gNab^{Yis9^_+Cos+{Loo~P%GtGVRsiJ&a_Urdf`-^^%*HxMEeCB7)bfz4R z)6V^VS+(U0-(TN9+nBSBA&4nq|KY$jfoVSjqjohh6li6u>r(&IXvH;-DLw9qz@bu+<&|H%`fMpoSXlDHvLssdhYET*69Clzp(6? z-De!cZZfOS?BkwaeWn8UWxh^YEq6@mYkVWqUs=&#*B7>Z&MOW*I5Ww7iqh1r^I7>; z9CzH7etoCz-xUcC#p?>rzUps{T*IBT_H#hvifw5Z>KjD9*%W{AP5T*GE4JJ{i#@k{ z-wDHDwpTZ%6&{)w5LtdwHGZSbE|*{bpC8tX=HYM-t=hBh*@o;q`=EKRHn+yIrq49m zyVROvf~!m{W5wRAOHIDzxm((=WhMKILXm&|4oxP z?gLMGa%S@IX$VXR75TUC+pX;BpxL45`1gPQgfTPh|6aX+d(HjtweinC?7sM>!6AWd ziwMIKrj%t3+6ToPBUmHEUToA4sfcEpKXIKe^Tvx;MKl&L%zb-ULB99C%>OqZQk#?4 z?O&U08_ry2>X-Xwj@RiEf2O@TwAF28?=j^k92z^PKGJ8sl_hd)PJ2lBg7T`x2e}?| z^6hA9vwYjo=G=4ZdUs@a@6z`3D`h2;4`Q=alzSkF2-mYF3W%u*t`L%w1M<4UcSnRR$Uwpe_n$&B{P0z2( ztY~Pko^j5}Iz(vq);b3TcN6A_gA(!ji(kx*y)(z5kj+!I{PAw9k6TZ~b$>A5=2E)h z^wFKQUwHirOTBJKnJkyy%Ecg}vy@}b(>Lo)>X`YXrv743Fli6JAKA#-qi+{|knwD9 zzW(;pj>mtee>DcN+M-R_Hu zfBEpsrIk6>&%fc$WVFLM`WUDCE7K2}VjH`^&e`$*vEc=c0uF-;?OXGwh5QYEJ9+DS z=4%qaW@d{!{(IB)q3>3#qf)T(p<7b1-RD2;Ue$BS?)TSK%9S$PzFn-lt{i6`d}!I< z=yAX6lozy>I29$%&{nwjo|2&I|BH;wT6g6%`~9x2^K(6{ z=l02J)*RJRFVn|59e>}uG_Uqb)n0EFJSqM6x|YNpFKwpXfBxhASM}fgIWh|G_m$PG z&z$1DI8r3tq^fX!m(_IclD4Ts=GA zZr`8Zq4JUc_W%F$;*!G-!a zo0Hj3v>hy*RjzwHx$g1*ulCd0YtM%3@$Y(a@AS{-hh84v;iXbldgGSyWaIwtW&1bZ zxv!>s;U)KqEpv)3Ud;cxZ|bXamZ}Qg>Bd%%u0`lvIQcO`(BC|VF~-BHA^!Ahx3`Hr zrFn+SBsI=t#@DT9o>Mo;D?fPMWR;g97d-#j{X1Ov=-HL?+wQxThHR-XntwrmOS|cw z(%2kfD`Pjk<$tZ;`mcMOS${w7pS#3ov6t)p{vABTpt0%1w>&>~hJc3mZolV!%8K0g zyn0`H<=O1G#qw`|e-~zBQ26n_`u=Y{`TswT&rW*H$iQJJ92doK!OmTmVgIrBy{-&_ z0tQO*(H=T1d$_VhZ%A1-EaaFqyDy}V=V{=axB1Vl@|Q;S$cU9!6|tBwYy6d(_qhJK z^#6>EcdzWP^^2{%wd~01gEue#o*R0>o#*%ihaQFFx0D#16lZ6gnRsZYvDcMF=^9V2 zG*9bc+h`%z^RkX#@sz1iUb*`*#w%G}uICLN)LeWRbiqw_Q-4hL-B15k+ilzP-`;*t z&4*k5`ej)UzFz+w`K)Kr#h(}dzW?mLxUW8XzGl47PB}e3u|BKKb8?=9q#xbo_H?@h zW3I*Z!cEHmyi%l&zVvBVJgR8%^4T6~;{$!ivY#KD9Umt9`c>cV&#?#DPM7-ZHSFISuUc<#4f*45y@=obwdvE}Q}13_^ln#`+uwuV zvzOeTw=rnbY~lOAvfsx!PIz`_@%|Ud-|bd2eJ{ND`dYc)@mDW@TnT-^GWCP-cdh+f z&i9^*UpcdMM&DJg-y8u6vDfQvXm4G>dQG-Ty7KtJdn?K&i2B&2B-a=GT;=_4zs(!P z>3aNsUv*FGeph_{)1r?OHhuxClLPalU)tBM7v;(6VX0|XFv+eI`0~Z}h(~F9j+djo z#l@`Xx7#Li@Ep2UZ2981@#%!!YTM8MbBtTJdYxVR>e>_LzPc~gmr5@BRIU;pqSu%5 zH;$n}erePfPiFtAzvPwA>lp22GF$!Ue(2Zx)yp2N`zHGK*R7*-e12zd2`{&dzWi^` z=bQ6)x#gYx^ZIYkAL+mM`$bJ_gG)ny%JS|1yH=A?d1uG-Tl2O*{{Ke8;cKz=!5tqD zaxydgnp6MxdVQ?iuM6$h#N7)uIf5;|Y`wH!^R(OMk5P+FtCWV)U$ zW~%>w`__LSY;1iG#UGQ6E`Iac@~f}z)pC=$SG)MGJ%3bjh)Y0Z$3mI^VRP@!`u1ST zcPsI;8`Ebw6?2_Z?0x;Q^HSc@3){a1y7HZ6lwEy#B^V*%W`Q;+{?ib~4H9sKI z7+m)z!qR8GMAA09eP5R9Z{k0Da{FH+t7-ncx@-O~ei{|sUllVymc8wC?EA8JpEj)D zS5o=I`Q3h-C!f5h9X1VB6&L>cb!BzzP5&v06APKmm_B)iUOV{DaP#r7XnvtjD-Lbk zeCCAd_ZipyoJ9Xs1i4S+wpl)JfmY=F3Aw+{S+Pkzcwl#~DB$zGpIajSA7~0>TjT2P z_O<<1V~S}--(Jbr(M4u!A{o_;Jyt68?qB+9{xbQfT*>L{->q=}5d2ijH(w|`?c{(c9L9<>&o=s#ebgvvTpu<-$Fc&*FC_i`mvtd!WgkstydPG z*mgcWXPx<8vNiOT?*49(5UHs-_2H|SZ{2fR@>N#j{ewSQ=d2g^6$o7XpY!5Sgshlz z4wKpU*xu4-*SiY!CK^hdsyNne|L^A0`~My@pSIukdlu+y<~8QEKQjuSowtpUF=J-) za@=he&c-$8a>I0)vyZJ3{2wiZtp#Y9#r*X4(|x~}u!}F@eGp-GIrN-JLvmvNh07;a zEAP8B-S*X-ex@ENQ@g`!tJ#^qr1w@dOI~Pb6s@@MTguc=cL z-#rF)-}nH71mDz*oHl{T=^_kYm=#!VtA-4l=5VDoKa z{MMSc;r0bPe=MplJ3i;yzEhU3XFha#KHrSz`}}pMC)zkp+21(n;TOU9(+o}ui%tHn zNWa~amiycIi*CH*v-x8Cl$8@rj^AVmo4~#x?);)phKw4A_9>|@*8lLlVQusNXg>4b zixqfMywj3BFM1X}`N-oN>M;Mxj`s)WyClmSC_K6~=iB=&|Cj$?Z1ke!XMMq|y&vu` zR7*Dcd;h5s1JfPhgGV(20&Oy&R&TmSu`FL#h^zTzm8vp<3@7MYN z=ih(5zq&oF+P}i)m>Dp>nX7v%Ye9onW$bK|HxnNTE>4$wn0#*A-RuJm>v_w$0x|^7 zyKcO#tGxKz*`jr;oA1wmF8f^do$?%)1+TO8pPSgP|6R>u#LW*7ECL`M3V>Dt4XcbMr0V%NFM*T2Abf zXXJb{)!=^i6zlKu#*7X*Z@zp}Xt@7;{`1Lm|LkVik+bFe$2Y$(xW7Jm?ohPwgo5YR zO%}~jOxxl`e4G2SUNU`^47!}kn&(nq_{P|wQ+Vr*cU$TYavbaN{XL&iXytn2zw;+Q z`hPVv?DEeue%gKYiIUgu{Qp+3$HDQJ^|}3NzpIUE=jA@nIIi>mi~s+UDuxE!!^DZWX!$ zR~P;CIvCn``hM+OW{nOf%V(eZWXya`C4ygW=kC39p(KIXuYTFLv|an%PHk#lz}F?e zUg|s#|6k_NyM3<0+gkeO|6lid{;{w+fAtd|_vG|UKXq3^({@A67vcGlc7HaW*STKv zL-_RVd*9xlt}M6BU%Tqx&)4hpO=SKuywxz&1;@y&b2H^pvDmy9|3t8vXCspdZiWqKA}``I#S;-A?2TdmG7 z7B+M{w_$H@{k&$KfBSSN2xX~0m}k}e`jf=1SiLE22a4{j{^!%Xtay*jf)l(iN@6*Y~Z_j7e zf6F;{IkkTGKBw0IdxID%lp3zH-uU(NO}c&b=l{JA%d+d=yxeZZdO)i7>+1grKi|Fo zm$&f$_B}@~MLXY$wWvNP{x5Xm-et@cvJ7Gu0|gWp9o8~|2;*RYPy{pdg@cwMw#6G(QnR>fxyxnZdo7SHbOJTb8 z{R_+L{DkkywND&;wKu-7yT-WcOElwlXIC+s7meSe_4dDc6twdHzSF7vf4ZLTVPZ&F z89d>pIgoihbr%;od`UDt;M99@#Q~{f_%z>a0F9{9ruy@nzUI1qgDizpr_F%inpWT-U%JCHf z59*F+^>$Wm70ciBC{>JeeQMa7^qAbJmH%!%+U9)M{V_+}4yW%Lbv+D64kcNZHoj*| zj&Pjvc4Eih_QZSlrSI=#Pnoe?W^sxf>zd+QPxgy`Okz3Ln;H^u++sHKzsCNWT}_Pt z|1R{`e_!#vUgx>EmD#xz`>HJ=ukG)1bI-aQ?)Btq@&_3KiyL;yeVe|?^L4LJE$^$E zVz*8`mG#F~_EWzlq7|4J3siFM%4oSh+E(}N(#ene{#9&SXCIVt{`w@V+EZVo_6GLd zD?V4S_3QB$Kfg6!miQ!9xXP~1#NI}%=W=#P`sYe9-isp+TytAndcl$jH*Di# zK23YNO!@fqVs72f6;Hp*Yn98#%7ykl+r7u-yL`>dzteu-{VrEJcWpz&-J2etU&@v+ z38wB1%Q#SXsj%+bM1~g(!fxm8-OE;Vo3pe3RNVK*cuDJ10XKLbxZC!BJ(<*aEnk~q z<(lP!5rzo@9e&04kE`<3UK>in&&3V8 zoqQL6?YVZI&tv|#`&<4?U8qZssTb`qpLX-$qRClW4%WZkPmn#)oy@RM{H>J%&)kW- zUO%6CzUJ8{&}H+_O{;5nsxxf3&aAiR!=b0QvhBlo#MW=gc9L-KeNZmU^@H7c#(dWW z3`{POjLKb-ti0TFS1>Jo(E7-AU)Y(cp^qh}2%3J9= z-G5Eo+U%@#_G=c~%fQnXlJ;xXdcEqwMDi_x0Lm60UPT z(|8oOWx8^@MXkeEt}iVYPn?wcpngCx^s)RVhm|KT&UE_AH2-|@nTKmwxlUhZKUQ07 zw(3{;mE0HFRv-TPZ8V6m4^MDCka%VP!8M(M)o=Bm9nERNWe|T+4MED>Soar#PhCl2Y8Kb2qW&5HREe%QLPmB3t_ISHxiw=wTgyxI(xrXzO1?*obXlEU? zZSKLlT|aK_mbWZg!*G3m{JMWHmQU-i|5SWh-R|qpr+eT3e^7LuTVG>)B;OAE-)%v` z4-SO|E3B7gs4j6)GL62Uw`Tes#?4kN&)4}Gte#SB`iG5;!e{(JkE z@vWuhSJ8+ME7a-=^ye>RkPzclYGDZf^LNkxdt#UWZ(1B7?y&dVect4Q$^Z8F$1JF- zYUtbk_utL)_cz28JiNPd_Nl_o_&pEXo<8KS{ZLeR@_PM&qu+G}|NR!p`tN#r`u;zu z^7^S#+nll+C*5tBc1P_0v5LYNW@C?gwf5iIt*&=0h>T`1FkE-JAoF)9m|?Pw6|hn*C-KTY3tM;aRnQ^M-bgIa`=6x88iXRU)Tj z8~65Cw;t8KeY*Z#`MRTZZ$9tV4mkL6Tjj!@CfPN8RuN*08AR_@-ip8c?@YqvQ+W-` zFaLjNxZwB1{oC*U*Ev_){muCMedT}ATNxOba$e6!tvnrlZ_}Uk|G(}pi`}&TeV#Ex z!djdEKhMY4JvOgftfg@2kL=WvRR1l)>P$NxXkDy#{`7WEoc4`ing5U1ZkVc@_W!uX zT&YVU*B%$=D9*5T68(H*M_`O2!_++3VqOKMN%lSR;ZD5#~{Y-eZ(#*H#K}qY& zTYC%nS9=abT+5jHzTA2qYvq5FO>c|s*{y;m_uu~cTJ_Y6OxBH$jOJ8K&VJSqB)OT( zqT}ESk+?pUa^Fv%HYV#YLu6ksCx% zuTSPs(pd1C$&`Ce?Srq(A8OL05^`_t+W56@#S(8B&G-F}h1?lB-fO?#zx8c#Z{4pS z5A0HNE9~?1&f9+%n_pkOJ~?&rjrU;-@83K5-hRuaKe=^p_Hm!H-!Jxb_ltev*OY&} z`z|UjviyIX>Zba*z488k1CEE4n$LZ6sctLtj&BlQuNS{#Y|H#-wen}hHrwe(8Efx4 zsy!_){JHe??5WSMf31IT=jpV^=Ia%_@3`0g{$`uAQbsrY0OMD41^GpPvcEdK5}cFz zkE?-o!ofExx5K}RG-sLb)D3rRopvbrxWl4UE&0+pAJ$EAmU%DQv8i@OmZ0nIi964w z9N1C&{L{^2*Mmabwz9|AwQT7$JHTMh$nt25z+CUE(hS)}Ci~dGa1=GZvj?^E{r^8c z^L_uOzlm1Df_3FTbW^#G|KBN7X3&ty@K5sQnu}@$FFz^Ue^Nf3|NmRQdtklxKPyd! z1I+S28lE!C|2Po!qT}4|R)aGqCMz}Qns1Y1)cD!P$1~&529IDJDUN1dWtZ*{7-}_ja*1i(QW{(&5Qo=DTs$KI>^V%yTE6f79^fFW=t<=L{N>Yro4_%DP@C zlB<|^cyGy~Q*TSx6`F*fzPWkl&!UymA71*$#vf=ruRH(Gll1BSHMb;~!>3=_UZj#J zDPr-@yyoArr}Mt=s_qE7+_{k5GU(N>b>D1Poquip?4JTtpV^(l^7iFcyPk$?m!%(N zbbJt?P`kwY>&)t2`E_UCXMCwBJ|EcGe+x)e$fB$+ghQ9fA*wlT~+7#_A5zn5! z-uLa&qc``{ciwju*ZKapi+ehIOv%Gn532sv)<64m!Y;sIe_uTFoD178{yYEc^mD~) zfeFziE}_R=xvH?-&kNnw$7)h7H8fM4Bu3;gi&;Dxv{q~mq%m1$R@%nS_K-;NjJBq*W|6g$5>-qKM z|F7P!6VB)Td;iJ#rPJef)jUy_zv*rJ{^ws$Mus(0%lCbrd)mD2vANaKjq@7cPGmFB zvAvYX#PgN$%Z~k`1{or{8tqvTTR(59wh|2}3tI2yXCatzc702e_6G0Xlr1NmwIe32 z44e4NW7Wisq7fV`%Kv2V4`Zp>=6|@jZ@+Xz@!z?x{-!^cnL9b6wMsm9+NI09`6oD~ zp5FG;edTi!v|L!X`{%RS)6d7pM=;Odw{MAH%=Vf`!q>&09e6%1+y3)Tq1oFvKTfU^nG;n! zVdDOE#R=D?XC$0=ONo(9jOjkVCgU#S6YU6_%`HL!C-1FGt^TKH=Wn)bH#g72In~we zckE`Z{`%=ua#Hm~!Nk|^A~bh|OT~OwT=e~#Ka+;3g{XWl0)T_~^R`s3Zsn402eE~JfhZp1bhb^B#^U-Wp~ z3aXR~4l$hdpwC36HqWbjbqyM-La5Y@;3w!0MD_OBp_qEHq+Q8@_ z#v{HTHZE@N_Wr8vOONpt0TX7#%YV|@-1p}&&FQ-CVaQPmgRir$$M@~ zrW|^3SN84q-pK#%Ee{TGi^Ar1{4lg(4w>~xbuAh`rP|vc9FV88sp1FMV z_ln7W%wdcB7GDlLCYU+3e&?qu=j+@H4;-z@UhQ_f=FF9g9F;db=f2$CSZH{uVuv4N z!=HNw&!#r*7G1mc_qLxU3~UuKNptGA)PDIfvB>Z5!l#?B$M3Is$Zf7W|No)s(_XLF z|NrK{^u7qY-Gx8D^Vg;9d{}I*|9!9jN~8Nv)E&5f|9&R)P;c`V8LRCwuG=p?u;o2i zSGJLP6=M>QP2#i5iRBDT6RUb{Zkc9qKYlo0^M{bT?0x5bwKu=i%#7DAd*X0#qt{jY zORpGfwlS!E-*Nr!wDo)6{5yU3eckn^a^iPNcRpu*uJ?V%@4Kh(muuGFPu=-Iu3VG# z*BciW`#kEfo9~C!|J9$vjxBPD>#1DPXL?M4N9KKKnaV5r^e?NY)yUy`bnd7-+g3E^7t>Kd%?|!?Y|MvE86JDLz`z$-`a{ZN)S3(#J z8f!8*8VXr==q@Yb`^~x_Zf<|+pU`I$bszryboA5<^GnBX+`3h7StWWu&5~Wd;gqT|EEjuWc1(Pp3Dq-yWebjy8r+0{jZ%qbkv;|G-kKo$gt{i{-W>||M)}} zWcaM+54axEePGSe=wpH_J9gZzU9fyBQ^4!UOTHJj$AknFEI#p1HMf2A(*JWICC zwY?Q*KyA7+H|qleF8=sx`pW*|i94x0FaCw6mv}SX-mLIH=Fasjb=~}F85{S{UVL-s z-+wprD)L-;uKql_SNQ^`SK1euvk$*-TkxfL$?E#uG22zG9_s!69aDELCLn#$sfSzh z9C}tgv%5LFrzfqxwEO|zjL8?D#lANCU>DE5x-joz5p%axb$stP9=(LQYqL*%iR2Ba zuHU+1*17Jp-zPqLQU9(@UpHQ7x#*pQgoC{C5&I%$uwECPaG;?{zwY7brz>{No~|#y zk*SR}LgV`Voa1k=IqY1&_>F{=2ZI^o4A%D31`-Ml*}Cobl;6soU7x)uz&KBH=eKYB zZKdtwejoVsZswx&yo%dbme|$k*;hVDy z_unphc=z1;zP|^V+h4~$u$a)kf2o-EZ}aH)iGc-?lfx=e0H7 z;;y(ir?Vs%zD6m7b=!S^;;s4#g@0Big{VI5Oy+g&y>A|J$H~-hEERbie zP`dg*adAxD&!?tO|E2tyW5RGC&h0Y89|`--Rb5ObtI|*ZbiZ=Uk!daOf$TStYeaYg z8l0j;TeNvJvc)b-N?sH=A@w$bb(f0WuNF6E29N!VPvj{G#m;;CJL1g8@4lTH!7Qtv z{c2u(NapG7JxvM!DUd@z<*L;pt*NlG596 z)vx={%(`*M(Jp;4hQt5ff1iKeOzHeqk2yB{$$QrQe)8mUr=RPWTmL>^7TG@M_>QdV zpNm%-Mdp3^-t^MBEOv^q;j6PN1g|;Cem-Tg>BDwL{Uv9QU7I2~HT!~#dZg@i9rr&o z_x?Ft^CW52g!;!K3VReIoY(5>hQ~9TU+h%(SoQYj?r)Ffzhz8#%64E%X>898sU=(v z><83X^^`cCo@;2@%AJL5`8eS-j_e&;r`eKpLXB>`|jz){+bk#+uI+mpUlOu=K-re_#l_?=as1p zQ^X=Z@b~SNo}A~hJL#ZpfDi-wmJ?SxCM|9@?fR!N>;A&@voGZvSyx?gd(1td;kiZs zV*kyxZo$ufsDCM1w?E5e{;9v$7jHi4u+EQZ(QT6_8~*>^E3fP^w=lD3DGSFM(KX@E zWm}gi<>vLiivIeQF;udz!P5Eo?iD+v??64~+$3M*$lkW=KZS1URK6>% zGuT&J6(M@>n%Xmg&o_F5cZa{_>=9nS^x=vF=ed$X6IwG}u0GHaTvB!9>8`eaAi@z3z|19kFW<=-!62$H{f=D@^tYcuPc0uP$nysdA# z^EyiMg?-)fO$*b*&VSuL_tUnm{}XO2Y+CQmp!IkEzqoFm$+``~Oq={y*GI4VyZ+w= z)?y3TT7XyU)v6V;=l=a)8^qY)t+z8}=dV|*wT_;Ytzc*J$q);_udJmjv{>-p*A)kn zECh5I3=R}GhYAXa_WwK_xU=$CgX{a+Lm7XrD|$Wc+r0Sz$Nr$w=q>g+YjjRTzR2EY zf4qL({>$6{PZ9EYeuKN!QSC$hDRuKdcPtf(o4FX>_P94be*XHa)Ye?1$hli(T!Sm0 zoa=P&3u}*DbVX|8r3{;Uv;QvpY{wMvFlV>&O|9dn3zrwLm1!>ZC~aLV6e+SqP}%7X z>qfVdr#u2{&WF2izsm0*VkeiX;rHv+9)lp>uM)TQv#%(9R-JXn_)HX|b*BA!`$dmm z73|no5MgWv{dTtkn-Q3g=qY?kN)L`sePWbk}8Aa7#kc?Xjdy<%eQmo#i!H_G`gxyYd*q`@n~`FZ2jv&#-uffI&((6jT? z{-%FAdhTZ1qa}@En(Iw&NeZ?&PK$Kt;`{t3tGt3yt16bEI;=47l;xEPs(V@b+j7nP z7+b358P2`#!yTqBo9poJ(ci5?zqqbEdZFE!(zem#%CD;U1cQ!`Yu$59Z&|OJ-M@&} zq$N@0xbYLwITs60PgJm({a^dTgt=Eu-s|R1cfAsmE*S9a@4*H6nNrEUYjl__TbI2O zw<>zUzG{VYdC}TW8Aj3UVL2YxXK%l2J?+(wRnC{J?P~M3#5I@Nb=~TlyW+&W73;&V zwOm~Nde+3PM+z^0R5fNgF!7uDCdVp)rr+!3>t7XFZ1Z@%IC;m`x|09ahY$9%x2<*9 zcC6#*!51Zb7B3{+Cg?UZ&$N7W|96FlR&w6D_mm3o*_V%k{R3cx>4D z_V>OkAK%^Ax61Y~o%>CFrqJboeZRAQ$zQBb-thIz$Nh``#4i3H_G0~|f4ZjYm;XNg zdIr;kTuFwd`L(a3r)#g@Qj)Am#3-AcY>w+ zuf6ShT+{d3{Kk#ctaVhqqqb%x1QR z!!z{M`NflOFQ1fSllynZ>&WiC3-`ZU@%5ta5@(mgGyLZEPQAYBfxrF#f3f^RM=Tc= z%N;KZdB6C6apnJK-%pw~Glg1}-QIRo!}Q3zC5P{x-+#+EF#UMPo_&se>x4U27CFt3 zkN97?cJ&*n?USE5T`K4)O)%97Yj9_1*j3K-x#h2X@BeRApMur23~pbV#juX;K*EL< z$9wqpUwGOq>+N~-(08fjU!SOLdsbhcy=18q@4f0<`*$}a@ZFI4zcJVTx_s6zm$1d| z|10mzm;2a$i($vH6y5`kxj$bk|Go3vuDtT+>3F*vC%6AwJeiH*f#|#1_tpCHe;%+; z|9sy5erS&Nwky`3d8SvKqlJ14C3 zHq?3U#Gks7%l&pYY0Aipsjc3%Xy#*OW#;+4b7rr7t^7k^ZoSn;zvU{`s!ZmUZ;Dth ze-#Z@F!B|>{(P43zjFmeR1XUuXgzwDKqBU-&Nif9^8L< zeoDZLU&m`+%~1Hu{#suoJcc{?QRS}rrnlsa8*bKba!{&R)-YY_C)c_Zw;rRJWw-6; zWf|NHt~^^>yj9FHbXKt+dqMJrTNmE=t<$}8`r{+J?qrFX25}Zsep`yUT={Bojng)G z>HPZAf6M=xzulktf8O42`W|TRlhk z&$lJa4A=g>j{pDb=}G^(Pf{PV>s9Ruk_m`g=%d5_P z$yyL)m8bn~X;Ib`asSB2Zu)bJbd#PL@dfHkw&qisaBj^xnWuvDZc6VmxDq*~*RpKF z!@zSpg}2Up9;aJ+_x}>k>(4tcTday)@a6l96~|WS$a-6R@%Y*0cd3JE{ohlc;%=Y+ zd+wJ4vq+u(!9_1vzCSn{x69^B{J9t6=jg$*ZYpEez^6XK>hD&2r$$BR*yM8&h%R4fCtn z{ft+BXNj@UFZEgNlflZ{di23cuX)b9ww~K0yX5*r!Hu~JK0KZ!DB-~6VC}boD`OL5 z&4)*kH+~nsSRHuB>-nV%n^`UGq}ti$Yx5Wg{Cc&y+Qs?Sl{4Q!8$rZZzuoO*Vf;Pb zWRaxoy=hx+_uYxwvBm0ylyCmTHDN2Zlv`zfQMR&8YR*||@N@UE7YnT_lrM<9e{e2k zae%q{dDB_0|6cm^&tc!K1AZgYzajiv3?x9uiXiz^g)_PAw>^5p)`>=F;@_xIeV9{+YmYL9b*)S4}M@w>0;>iuOCt@$!f>Z2O3oDQGM zcje8gwR~M(+nmZj{)|zMv3~rqKRd-l;NrvMdlZ;j7W_gO#jD7wYmaiZMm_wAfD7S9-FoRH}J%zuD2d9#}$ z`)mGUYo^4qZ-L)lfo71+-|pXh{GYYpe|`5qXWcgKvSDELaoh3u{VwC>jBh3>`d3|= zJZ=Av?)^7()AEjPS7&87!S;IR^Le{tiqD#!b`_5m`Se5bsky^~IrpOl!^+>hE&u;q zu<^(KYs?p3*iSijVuggX)X&(`Gj45a`}$9riOrF8op@~iQKq)aeQCdwtSxS~7AYv)!3t=g|76t_M;bM3{>rpdNl75z`n>piaz z|G!yzP3wUN9X)ec=7=z;JI|H*zvg`4dIo1JzP@ws%pzX()z|yTzH@cd7i-McX%G5X z`_{ksnLumEa<0carFFudpZg+QT#xtx7ei_q6#Jpa1Rpn~Ux0`6$=)tI{>c zHQrZ!Q10I!y#DpBNmJP7-v0YVekIqc>5t?R>m_@?XKa@ioA~eSzKwb=_lmhJUY7s* z^X|pbFcAwQ9fnm$LmJn-|7@qmAt+mO_kZ-`{ic3_Wdc44A~O|Oucw!!Z2r^v{_<;I zw@b#kao2O=U1fe-Hh12W%hEm)vVd#VNlr$OT1ioH+1nO|Qx9Y>UG$%2b;vM`)^ux>~B@yF*&C!v*Z-6k z|1<0Te@CYt>3nBj{O)b~l;`WG)U&dD`MievLmj zc7{fY;)|}+Ah;i3Ce4$?#!Rq z?728*b@}b(k5bw@rtY6;b#{Tk@r-vC`^}^;{@X77@?AvLZg#J5+q(;7u7>@#oYZIX z;A~;{&;N1ZjC~KMeSG&`CYV)#b$zx|!&IxVr$J}<@10kEcf0jf#vj*N1$)&47ne6W z?*4i>LM-h#OY!oAt75Iv$=B8&|L1G8H+KDv%s*V*OQr`#9o&;2>_6?s)nirZNz)z_ ze~~wGcy9mC&p^fM$vcCizi-QFHD7l>RIE~2{Z~`DIa`!($*GSo3^wKWy!##H7U;q_ zMe4QlYxggIol|tJzG=B{=ed(R;rM-{{{8iC>Q#Hb*VYt@EIXGv?P<(xJ27pCYd5U9 zGD_Y|?=@ZgxVy5m@>tCJo%*wm9rocZ7P_xkCrF>dMG|1YgF7yIWd=rE5d!H7ql>BhWMr3~A)UGt9nH0kN`x>w6* z$=vIHy8SsDulSr228O1O3;Anbe7g62-*(A`^Ukk7w_A+8B;kOvZa~2g`6<=A!y6gH zpJ{ZN$W7^K%08d$(&@G$o_Wf>n;cgUpS^p+I{W*(b;_kKmR1yY%v`#pRD` zOlErRR1Lh6{Peq&uC~L0sFLnX)~KKLPXvBer5`Q$efzmw$+wHuH`8_3?=e|_o|QQ* z<-+%Kk9K@eYMQ`atEU*+cUHu+u~>)oh*d&_gx<>PKJ7ux>Zz4XtIty*>K zEad0j6AchlPgyhn%iSr@WV;VM4Y9sDahKXp>s8;C@5`LATgIF4@AW)`XYq_vb7GIq zuW*UY%Vx=VA$9YXILjlMJwXK<*<)+g6vy)QILiP0n!lm_%14>K`|I0&_Wb-=vZpF) z-@1=)Y!=J1Ze5hKu-4h~lJp~%xkev692DH+E~;fqPIzk)rOgtT)6<%$VEKjPpN7X~ zZlA6M$9R1%qoeZ{{#CblV#;H*;$pM)RbGKn?8L>#?sp#KoZDx6d_LnXnVzZlUVO{0 zvRY~NQSZv!T?;45N@!I5@v#ZtF3ILyxxcD!`!@c?*XCK>zFuszP$2OOc!WOZUVTqN zq?d62(ta#Qk*+Y#@hWy?<7 z{Z?Om=ZYkE$%BPvi`KXttvYQ);4px|}-#vFTb)oZI_Fjk2p)VK&Z@i7a za?7MPxw2-4`x)_9*M7t<*fM#gknBmGfb8EZIv@OE|5C;zZzJf?%hJa_uk{w2p{%Q{ zVSVTeweo^Z=Yo%K?b~ei?CHI#+JveNwdXj$HNJA}dms0uk(adoRV(_Y%dB}E zyw85aj>ju96@T2mcYojY`8$pkPc%1jc(W^cyUg0a*;eMJ8xPj+(Eszd=r@DeXUlIf z&#P+U?9Hl#Sl{qnU3_Qz;}Xej^7o~u{=CV*zGD8~-yYf%@a-r%KN0-$ii$&-6Z|X_-|8rJi@5~+lJ{3;7 zW_8dY*>B-ryI1+zpH5%?H~U+DtTD^sWqZE2FJVca&tHS-dyOxy7t7*%P(^_9Cy2)r^Usa zE;Zjy@$t9Ni@)DPjvBc8@wHI?q@~*qKDOXn{$uCWq zV)&fJxa)jI*%B}J=MCr2eLDZNK<`{T$LdX654_2E$vibyboH0x|Gu+Lwf?qZ)fq$Q z-@DFj`PTScJ-e<@&RENj)qayR|Ic+(ib_wJtePEKShnly?>7yLb9`|9=S z?z8S}kX!qI&MpB*?s=OU(;M!d_{$m18mOIW?{@6)w6jNSuQsw5nW)bFQTM;NMrp%> z9>#C+{gypzocZl4rKZhJ-1h(XWxukM^R@b4%N4kV#MEE@Cw=q&g#IP_{ePF=+MmAu z@9D31-q-j4+1>1?e!oeGFDR?cpq3f$c|7Mg2Bwi2R zw%)0ZC}@hl$bRd~D}LqsYb^Rb!~J9Lq|)w- z0ol74SU;VZ(Rfkh+@)C79U4zoF&CRAn-;kV3UU1rH1+L$aMMnM!HOMGJi-eIq^!cFS}GO ziZ6;S)@S1FJ+D^sr05-4QSmmtcgf+3gzi@=tKXd{zQpWUQ1xr`Inzz6CO+A5ep?Td zZ2bIq+4|akiHQuM^As+;STZN)M9)2@Orwhv<)5EF{Ii2^kI3dMD?7JERofKqD_c!& z6x+AS@5Ca9`hxvUskiFy%KL~GNwfQH>T{hYdiPg!Kl78QZU(Ouv8z+V4|0mLRNUM4 z+04x1@t@?s)`yi&&);EJ;nncXc>DU}y;-lGc06=^ZX_mp^{f2Bm3C8=-rJ{|_k7=P z^(Qdgah_nyoNwn(otpXWd)2ISTH4G07l!?a58USZ|9qtTg8#E+jLby-U!POIf#Jj6 z(@)+y9lRb}ez)l5(&>8fe;$c%pYk>L-=8Ur3Y^OC$xRG; z7KK6$@#6nPAFs6fWh%PB-cUi>y-Ub=y-vTVl5AI!_MzABx5#LG+2=L&Oo*Y<<-Lo7 zlUXZsH~+O@D*ki##*EkfZFg?&{a>XV`=nuRckJ6*ms>w%884h*InlO8>Ybi(Z{9Hv z3z>{(&wA&mx&0A**`3h5&i(%4S?Z^o;`F*b>*Zznue&c&zHsoxlI?=LCB040G(LKK zercM!;kLw5jf~>3D~$oid(WS%o_y+-j8%hXbVJiCRfg*o`j>WY|6adjYEkZs-MiLx zTfTaAWWnC6FJfd5#F#r2FFnZ=@L1hCFQPv>ti!71R$bk5Lx!Wv*OmMW<8QkEk~)6 zgRkF9uUFhJ&nomggIkY*7%6VIrWoI;%cRQTe^8eS?9A#6`$iv*9-|}rvs=TYe!9Pvu z3D2S!<^$Jv%Kr^-@#pNgVzMlRp}@QT-?98Z$G|sCM90sca^7E(p<#RVjl*)={(QFo z|M}OZYn7*0FK>SD{?E~IcS32hKr8d{1jj(Gr`w|YCOR%SH0RKaz&R4E3ST!a-}*35 zH;IK=eCq1Zj)fT^@i|_BPj1#NvowlYvY=P0qNnTZ$K{S}&aG`dy*Ez?&V2p;%Dev- z&+;~W3)GdGW*ae6^RriZzw4D>C&WH|6ukO+ZpNw5`=Pfdx+>hxV#(jS{{0>6lPLxk z3nt56`(Yl*@~^F~e|@xtlcn#$)cx^&cj~|B_byL7XIdWfTdsfM>2v$tCjazXJ7eO@ zk5T83-Dh+c`(JxA#iPaeA!!F>l>gv6RTmQg5p4*D8OLU&$|c;mj|;`?1|}O@W7= zZ#%T;>j#Ia;#16T^?%%Pd-tQ-<$srdQa^3IVa2k))^G2}9Cyi;dKI;1f$_=zi{7-< zGE}}YP0)FNe_bG(gZK5UKKo0IK6zJ8>_7QfXU*;V%VzI;_j+I6&+YZUxA$uMojbl< zhGE0?KezY)z5TSXzk1FR29dxEJ6a3AnK~WH`tK6?I(_wF{w&c~tS-t8t_vg%9xn)e zoN<=9by07iiN@I#Qx-Qq%6(FEVA{F`fzv{K%eH~1hc->jmis1~{NJ^Gz5)Y}+~2w< zJjP0^DnBS)zIK`Q%FMnT&eFK5Tbr5{vX>aTxUrur)!ty$m6K=r`LW3SeVcw;T#`Ge zy@{pj>xnz{Oie7j5f^38&9!1$W%T>S(sQ%pJrDFMl$zzO{i)-I$PqS>3pp5?o zP9<^@rQ4SGt$YyOwzY0wlj2uH8>V$uub#zlE^E&ID0#_YOKs2x_s8~SX(z)Zu5+Gv z#^s+ap}_RrX%`QMSB{eqwFRg|@de7Bdh`Wy4=*Xe_kW2*~PvVTZ&$9;SMeC6z~ z?m_y=x$PV`3gnaS7T$UM@1dsRozE!(TimX1y!brm-=>b$ef2TS5vxDG@YvUF#C$^G zfblZOz~S83Z}HbIuUmcRVY@N^hue+}=`0zF4(!~g_D`~Up~JAOa#c=)Uj=ya`|a(u zvzOS-OLb)k&9M8r(myut`>yLd@3fd@1^g3CHTwRLQ>*LUOoIk!&keCU&kv)sn`GC8R-2}c&>K1*p0_>50_0@!hB(KM@48)jQe4e zYub&B-tE>_nhUsvbzF71tO}yfSuLKcH}U#cHIdxVS$ku$1$WebjhFc>X6y2`>QqW! zA6+-;}=@orwyCluKn^W z`^}c@EpjDC3mK!O^TT|PYcdqvSi4|W_*M1WidLIu9or~6SG}V7`}eO*zp8p{vh5j9 zX#}?v>u|5Sv*b!DqDOHYt;T+D|dWmq_)+xx)}BAyf^gpoKFT62ADHX*takF|HP=1 zQc^dwAZuxNPf5rL${sRt8C1&2s!{&Y4vRpU6;;{6w zSI<=Hs%A?v>~(l||J{X!&R=B?gD$#V+I(okC8dS{wrNTWx~42=*|MeK*^L*4O(sGs zLVl`U^k}`5#xno7-@zF#d;3->TwM{mbm5Baiw z7%t7%bx5$U3Ml2eFTYjh+J%g_%i~rr_!w5d?RNQdzpqgRF-)}y2H|hF9(!!>XMJmZ z?WF5F&U-RNM2Xfd&(hxUVC@r=9+^_NBeL#4o}Mtf&-n9KW^e1)_zQbC7_hz@BQ!iOd zb+61%=TTUf-xn-#WLG4z5QRj_iqXM@A(bZb%N9F}jF%#Pv)^N`2DldnU0Rm0{iM!z^#gSGGP{kyW$mOv=|{3qh8R6K1bJzqBd4@|(r` z=&pAw#hhHC=6)@mv+A%wcDu&og{R^*-$^arZm7gL^IY8{4re!wlm8O*HuulBUiBiq zroNwb#XrX>*A7gznx-1-Cj0p7cdy*Y1p^(S@l=q@5Cv-xNaYO{d$&t$nPU< z&3(4V56*Aou)HlTD&XVed?TFq#;LN2TMIWBnoQL-nq*(*5!_o~`fc+1$n7sTurWwI zN$My(n`WSCbv2NUiGlUNBX`MlZ|3j1u5{Y?U3`;I@c(-|zrLUI-}3+NKlWBP4PP)F zzgIFtnn6&`7?9=&zVn;>em&n&+|X1zFnH3VE*qr=|9*1|F!;U z6SrQ3?7yvi4xt|N(m4$hMDB(^uRkIrp{TUD!%kyC)e%9F7aE70j>^5nxa+f_1104Db7j~ z)O)v5=Bt!TSorbCnVNh5bbl&(b7Mj5-T#)e){A^y^W1G>l9lom$twB9Yi3@2@V79w z@lh;`?*iv5hIjk#-F14L-C{IX;=x<<<@;sTJ=o8^_`X(Pokhm02VeKQ&wAuhrnTYF z&kHtb`IGy?{O_MnUbiK0ZgT4OC)p={FnneVlwhCZ_RD-z>J961qeuaxbBuG3@GNjW zHm|Zwn7D%BSz|I6lQT!OCy7Tl2-GrFMJt6DnN4F*j}!tZsI2(Asjn>u2G< zj-GWgZ%{dvAcZypOn z!hw0r4;;8ToesQyp^%?z`fAFoSzOtMtCZRny5=1bIA^jaBjo6wzdpWe-<#h~cU)!p z?{&lrsc5b0rIu>NfA4aBi+>*yT;_6X^QCA-e#Oa2BK>C;PpG@_g#XE+(<)-G4sTq3 zRZ}xNf9bw;fgaYs*15>)?oyi)SNdtw=AiqV8TTw?`k=+FEYYa-Fni*ztr@Fr)x|_Z zey+|Gzda>ZH(=Rvxe4oJ&wI%~PhP#)vgllqmqY|Z+@H>dF8lVrE;qxwhCR!9S18X` zK73K@!V69A3y$mu3zu!aCbQiuxFEUX@qJ^Sraf8jXC730mU#TzV&$-{KegV!s_^(7 z`hT(CrYqMY)_YGZbUF2ShoNu7ORbVwpXWtg|FkRoONIB@p$o+GbyTkWjE9@I{Bw@zd%7tKE-pJQK2G;-uE1;-!4d zfts0T8?wZvD4l|ot7rc{FJdb?lp1N1FLr#tA=eG>S~<~aq9UomX9AxZD~NoZF<0W| ziJu3*&OJKududJ5C;qpa_e=hfcpiMXG3e&$^oeqNt>UKUt-Y9X;en~v8~=_^JC{G| zSNi>;Iwj{pWz_wKmswnLo4HEjcL>(XZk4|7P#+?r@#S3HhSh=-+mx^Wzi&C;V`m0K z4cn%vy`qh)0$IP#JJ!2V+WksWN_qK{XogkGF26i8IrPHoc>C#l<>QxGr979(6nH&r z^@9V~e!Rc*f8YDXvI`iRzwfttHR<}k)Q=YxzyDqHdZG{aRK;XAe-?hXwMR3m`1ka_ z{C4UEbAZ6>#W}|OWrhq41s1!H1?MPyW{_Bz<~l|A;=dbgsX?+`-vrhizf<2-vGYap zH2ur}W_~-rrT)slz|3N`-|-vjeXc#Qu-AY0-2K;*q%_e07D~+uQTp*0)B7+Fgp2w0>Xfa=S6fB5>omgDZX{zPE^2a_gp` zVXvmu)OE&RPDCbVg_t>uN`?T)@t~cZwIRnOwC-ZS~yz>^X7f8U;eKHFL9B zJCxS$SvNH(bnm|UrI(H?wf)mu{AGfi#r?IK$A48-ukG*m3u2FNGfi)a3w*p9=qGY5YR|GjuH%OUu56mIIqkiR zo#Xc5EQg8wUvMHauhm|5g}bB13>-mC9>FVF7% z6|+{}Bw56LG4uY_oA!%M30}3qZBw#o{g%b=H(Ob)?U*H+ez-7p>pU-Qm1WPbC(kij z8#!0F_k!io8R^a0R~%(^`*);mYp{;s%5Zqxr~LWVmLvaygZWpyd)eW)*UZgprd`xydvJ`9V#)r-&Ql*xH_edC|P2WK3O*6B{P{Ey1%~X;Hh9#4p;j3zw_S#jly3`q+M#hXC!=|C@EFG_{Fuld#T&_v#x-0 z(7T%7`ciuy-zn~mS#_}Iyz$-{=Uq~E*{kJq{@Qg$m$M5-nSs2b*_CH?q z*#DQ&4VeUkuYSta;8h1RHvwk_BL96@xmkXLM9eDUhd1?9`yX%7e zTcqDLZ;eoV&HFIcR95*kTk5+_?3B&f^l9 zV&gNl=e(_twQ26}_q%iB>i5ig-{0I-`M2WB?S5x}|5tvp@WF(WQ=MMxw^sY^YhX+$ zsb^Q0d#u%U;@wTEAtNwSo>_u>tUvur=38kMWGFASiK%N;E%+@Yuh-fg#qu@|@emz_pv@X`D zT(ZFW>BOxM55%YJKXOH3s_u;RJ@GR2>;CWhfBKVU-0Uxl7VN(MPGdpS)@Przt_3=5 zP-|l5`t;>f&}9(@FM$;^za8IV|4!%I@h|md@9S^ypLn_cTrDHxnfKSvzp=9V_s=>- zQ-V=hHetT)Lr(vQfA8M^%Tsyf|1y2MG{c1I#7u_!f6m^I(d=+oAG@<+pS?)0)$f9T zcUS0KmtC54?Rm)79hVpu87)kFZNkXPp=80(toiKE%7figSmz|$7(J<0J#xq=ui(In z+p8>WZ$G!Z$hYgjgE^1$v#*?QJbth7z`=hrU$4LaUt%?Ao#o48lj?T|%}lPd;7Pjg zykz(D(&mnpR&xp#ota_3Pe!}z!ZmqG=6BO~81}t?ZMDVbBiolt3ha07PVLXCxtf&W zF1>YjNpY#g+>NDqnWw*alxEtTiY|WicM7xfTV>XHe0xM^e|_I=l%HohWy?1I=W5n} zW<9^ZV#`<81M=<698pr-`io@c|JxP43oQC_-*mpyK@zPtMW>kr!(^A}%{c>nx=^e(1b>`(2iwv@*8xF)(z zm3pv6r~TT$^aKOD`?oC;9`6vlA6$F-QR(e9c2ng&4!`7<`?cqY6~mnMamVx5{^xPJ z@h2%x=`v%2V@y5Qor{s`1xLO%Mv1I=>)4QC(l$jf`n7yDm&t#zC6V9bQ!X56JYIF} zZ|ByBwTb_~6mOcBA@BQpwLk0ZU;q2o|6l&M{L`EGtDh76ZvL3H$MK{6<^4;3%wC-D z{$20zq52)`Uu`_HpsDW1@%lf#l5Z^()}B|7hsbSP$5V7Sx& zYyHGWCk{=vDTq{m{h{sK@sPaIZHCisXPaGHe!_3*_4*S&wyB*OlNZaMmiQ|7cJ;j0 ziQ650Zg=?1uFyRwIREj!6S;NsHwMehUzNN(Q}0)tO!2Z`FQU562c)?t&1>l0Ahwrf z@}$>F*PcB1k>8kd`;%h-7umpn_iui^|K@+p|KFO|k~Sq&|9>tVG9izTJ?_7{!~v%I zjz7Q4Q`jt`PyTNY5|=ADkX6ST*qFTubv z=pD2D?fcb*=RdmVeYXhOk!qmz$u~>=#p&X|cQ<~!?~%7Nc<$f1jbM4$Buzqc` z*IV1G_M4@q)cM)Ue0|fo*51}A=(zEB<0h??uAde~Z?pd2P3tH!>d&`hRdO#ZsEynI zt5VNs<>Qsv?61Y%FLmXuPM3MZ&(4(e`(ww28_QGpUvl$s>2A9F_s##_!gYTCGwxY_ z`}^-`x9?y3ul32LyfcF?|9km;|8Ls~yA!Gv7uo*p|NApuZSsRNpX;|XPI)CC#QbFU z#LxUI*($&HmG4<>^w8aL%HG<=x9g5(GBdonI{(v@4?zbaZda-bYG`kOzxh|UOx(g(s#lqwkiHa&#mfJliww*zjW;8`;Emns&<7POBdXKF|Nmy zaoh3vtnWP*m)Tx_e_tjrb;@zczy&_*i&b2+b7O3_Ix25mTjpRLKkwW#4c6rH`u5}t zpLTtmcT;g~>&+~$_Sd#jOTTTI!=(80v17khuTT!lljhI$d*a_NUYaB^dGX(jEo<1j zBF-ypX4-l_d4rbKU9LGVerNnnkbg1bhSk%+iBVgOgCBnFopAd6-_54~xH5iN9kTuS z^R~lvi31EC{Qsr|Xc_AL%l~(j{<|KQ5Z?W>chR4Z zA`H{RKknLS%P{j>?ESB?r{({Dlz*@L$nT=)c5Vg%Uej+!*j}B@ulxMzg}XFU(!8CL zZW>2|Hr?;5jEh~{cc)0};Rknv1M^q*Ffg&Kc=zUdPB80sW!0*dY4_}nShlSHVJmfZ zr)-UKrTcg%nw0`1ArJ%=#={GC-ukL#MIr)mJ zwe-HAr4OQWx%sS8N=y9y2G_51b22sByZ7Jb!%~erE_M$x!hSgS$%fvIlARLLklU@a zH~arfE0;uP<8xeW!JjXF_OF>{ePHq8i)LT1M=gwhWpDC)CPS-%kQA$QF{{JD<1=~| z+B{qQ?e*^IeGel{?V9`S<_NC|ENzjz+1}Ir_ISoMi>s=}K?(d<&fosU91+xSZ!+uI zDH&NtKEqEvKW{DlZ`{1>zW7AJLrpadYd$!gyA#N8ZoTV$)A#mLdu*LuW=gOGB<)pR z=T>^=diJ5f_S=u`qpVBimhf@D%4wLm*x_!#fAM2#m!>WI*ZuAFmH)y2zxOQJH{rt< zdy|Zf_5V*7|IIxwyKYl>|F7Ft&-fphy<&UvGjQ+!Z`=3R{+yQobJ{P##*4z9nJ>?D z2>*Lf#>ntxt&zlsCF-`BKNs8oT5QH)!zRFbZ_k5x$py*1_u}i#S#S99X6Q6#*=_Ua z;$L=I{Ax#+8+$MB`YWryxZZRB6{=I`92Nh^#?NAZG;hb&cL#Fh*$#sm;m`iM4yb|K$a1+4P(w+m=X8QEa+*fJt{>X8OaRbCVWH^8SiYtb5|JmhUv5dUHdA_~*@L z-=^)CQWRT!B0@m7mPfG2;xC`k_laSpZ?^EyVqVXu-Y#Z&dn1Fur5ke|DI21TE-U}!W6I!a zxSQ$z-}0-xYo+b^_{IM(Oq}~K^T3{~2Y-X6yBF-re{Y{x&Y)0!f$eyo{f?UrdcHY0@4T$#=YN$w4wrxCF25VGE7p2q!qw8Sf>7{T*Yww zvj5c++4r9Bu(JWA!ZW(2sQz8IAGG_`f7#KkKLEq~C z#t-rLBFnh$J(l~vL-=OH@+Y^9nHVbmJeJ?T=VNbusCCDl|6YIdFV@PvygujGC)R+{ zD?AMkA1*%fi$P<><1ShE4{znXB~)%s2s>;hWw)D)%gid>(B*Mq$nEzAxBE+;*}SX$ zlF;{mo1*FU_@%-3IltXM@i6{rVwcjlOYIZiYt+X~3v;hp>bsk{fup31>32-RS<`pt z?}xpzm)-EkZtvu*?}|YgdHdwQhFyH5_1e*V-F@CgD+DKG9Q_h?Z^yFWl*%=Jk-Y{} z-$m|bGkLIlpS$(vJIc?_`1ktF{rl9F?eE=UNAtDm56biQ`v2YYOyYsfmuaguiaDgP z$Q^LnyPS!!H7nOI_2mYrf}io>{M@2=>!;4}MXH&45G@zPm8=G-bQ zGy5KuV)Qa&@eby7Huiqd4fAHn~sxRwZ8GWBCx+d&V zoBov3zru;PX8ybRm-!e%S|iwQUSgQ{s#k#(!0-v7&~VCGrbjmUiz8k z1W|#EOs1c|Y;I&fQIy>Ldge7<|DeE}P`7|PRea_eOV%wp5Tr0^J=f`%p01YXzBL;g z9^XHArQP-U(r1DyYv1jk@qI-#>$&wO7vEN@XIQXnkIYkP<047f6%m>??r%*Nt?a8~ zU4KpH+ni(@t#!vbG_N!FbC>R1^Ygh{y=m8JDYkEY7VeUMhK;;#{eLUxeG{1DY#q8x zcI}MCPpS0u&&SQ}?lU-SYn*2DPsUifUpY5-=D`eC zzOAS1Qm20_)t<#0xx7cP=k>OQ9O>1scf_nK6^!_`Ku{k`Avzx+3T z_bEya^MFIGLw29qLX#_jP%u z{Y+7S;g#{X}x`Tg-@-KuH}u{~v5(!N?f zbK!p$Hs_1(U+3rE#rG}RBLA(q_-$2v`PH2p)p!3hPQP*d#PyK8Vv~P@B_FCo{xNR2 zakYNxWMwsxYyR()4|dAQNUXPKiYfTAbv}#Hn*VhoYJT<&xr-hg6-x-Y@13Q(B3br6 z_Zp!a4u3s4s%rn$vg~5ea1L`+fK866+t+%3RVMSa|lZIpo_1ev-2;%c(q*EVp^j>)7|V zRA=RHfA43_u)wzVsCL{&o7a)&qXJ8UHyvYmpd$JA^qe;l>!Rhl84>!Gd6Or6k{ATl?R%hnt7x%S4ZvNO76#n3V z{q4Z1`>w7lJT7o-?fipGe*cZRZ2h^zVbwFPUzL2yI%?|&_BL;4>lDw3bR{ozi*zGo2|Y4;pNMG3<9n3(@yK}ucxuSFL4YUaDZhSw%_aWI)vjMnPD#o<3^Tm@)v=f%d;{}x z#O9bq`_yyezbjv#eZKqbVkY)C{KxC}{Ff;>*uOq^Ns~ar$FKD}-cCMo z>*muNyX(?oxli2Ite?Bl@N56IidT^yyY$=}w}J{G|JVF?&Hj6TRa5@4;?w-hzg$cq znQ@VfhM(rAnnmsScuaaaXpTF6-L6-w)|~UZeLr1-tCXpug{n;Z^a+yz@0BPxU@Hg6a*|0Ex5b( z=bWgx&nnq_Mcg`Ho-y2Be_FHWQ<+b7xce%rWZknp*=O%>>FzM^`qOc$uX^Gq2Fv$b z1sLL*jU@W-bzhY4I~?`Jz<__o@$*x$KS{>y%l`_0-U>Q< zC~nrb^IPh5P9*dk3VvK~$*n2(bb0IFqAB+7e+u)riHEfBdEu%bRrl_B-Mb?qpEdXW z+QQ7Rv;O<8>wC4hA29M)9FXJNd-vv?pHW;FG7B`AD*9xlH5NGRmAb-c_#~t=xYKdr z^#9%}+V0E=Cw~4ntcn+%8}hw%Q7E&LH2Yqmxo>wnnnH@5b16TWXTB7wxZN3CwZm%r z#f@DPPs=O}XP$3Oj&maA*-0JXF@|Jy!b9EE*%5yBo>tFp}`G5I8`^jJb-+cFf#vZ3U z`|dxHDe{&7e%$M4*fzhJ{qJ`kiJazrr$1fnuPdoMqAa&Dru=Sc^-QVlufM0uFeL1) ze^)$z_n&L|f5Vs=COm&ta<)p!!MRc3WBK95>5MO)8~C~DF#cX=oHy(9O1EkM?esoP zzxdt9`=!#INxKYg&wp%xJzl4QAdwIs7GXMTRk$fWR+vLQ>Z_8UB+tX%J)n8zl zTRCAfPs#qkm&H>o+$OzDd8Y9}Z@K<*g&!x5?fF&VGsoIcdxv7{%?)~zH+!C+ef|BF z!N<=Mobr~}vpCT%GyB@|FLj4`zE$$bGT@|J}5=bV{Vc-#x37 zUwY-@<8%5U`E(VA1dh|Q@BexBG_b!aWbxbG42;heRkt2@D^`)u$#wo5tt&xIJpfcDs$f4~1$wch5| z8osV)oX2B+-doWBrLy-XkSK^M|DLeCahT?+1?f+h0pK)&S zcj=?QBkoL62-5lSJU{LI5s_ni^ep-=#yLbAr0BK=e*U&uRq*X4F%hOAN%9~{aXKj*F|;yX$P%0 zg+2RznK2-t>s07#hLEXoytl-Tu3XMu@gy@OV8XF(X~uw#Dy0TphHf_3!x!ese-5ck z>GZGA?I_+5IeBe>m=gES2f=1*(tfYuuz{8udOw3@-!6S3FQ0QRbZY&YhIuQ`o`?*) z^f_Rj3gTU=4f2lXS?-dtIj%iP zJHmNy?^m(8c`k2sC%rr)`M2|8z17){bI+Y>-l_B+oBulga{h^wj^kgSetds9VcB27 z%QKe!HGQi;=Y+xA^PA8A`*LWPp1tD#SguXq_+I>5oc!<2Jm+QFUGLKyGfyNMFu$4{ zrFcN)$?N&c>gRoEQP;_@x;)!0e*U-f=Oh>$dTlgr-~W5}er(+b_WFP>MytJnvemtR zc3(Ua%=964?w_(%3~H|S!C$1=R_F_81eps})|pOW>6P18Z?Yh4@j;&Br;NThiJ3;F zTwU^X?}i;liy6FXw)J}*DgLwZT4Krhuj2iY%_(z#_xF9DsaCIbc5~wWx*l6R+Qo zdnx)@S>yAs=f8?9A0$7oyqdjk?}d+_{{;u-=tR_RQMNOE*6Y~UGVx86wsKcZRanNPk#HdWn}~P#w6}K>jrZxeZ*X02^>|6_ z?A|#O8((x>S=V)3hEu{ybmuJaA({4$GW`>MS;>u|be+7z@{8A1WWr@4uUIZwRvYdn(ZFoL^+fV) z;pg)FU8^o`Ha_v7ezKaqUWr7c(Bh4uf5T_THVVkfzc5_B^Sj@^bH(-Xa=~Bx7aK=j zU**>(xAuJIS4pGCj{e05?#yNkXB64}UV_VUkyy(-J{C9jIjQ!aXWDP9W4SN?;Gl+T zL%Fe%s3g;i({yj!zcGs`8{Iag#Zl`;mo#sr-NAYKuCMm3%bY=f`38u;es~1M{w0)iP z+Kv5=XlZZT4A=j+m16ogo;WUGWYqHQsskj5``sIyBwpLS{@y!hs@?ba&;A@UG|t}J zcc$aZTjhGC(x}w;(`t_HRJcQn|^EMD;D-5KdXEDi)(}h7QA)2;J`S+P+;A0{fCxOIurX=JuBFBbk1(M z>#->^N4|9Zv$*m1Yy7vrQg5H_dHzlEYD%Kp2~n4KwR2`ZTJYPo*K%2P#s9aKQ3vvG zr`=#Xx@hB#<@_!m)~tU!AyVw#^vwD>lArn+&c2+ufAinaWp6cnEZ@H0eEZ+JU)veq zncZji_F5$N<+D@Wndj#hIQ-q_`Y*Bi(dLPN6RUr=>eoE{bZPp&k}qE+Ki`yOX2?-g zYUh_<_ft4Lrts*hfQ1pJv;5f{<~}{Za3b*k5A*d)8O3=I3Hn|<|MW{ujGLxF>lLo^ zAA6o;%;@7ipEKdyx8#S*r#`cQmdXV`g-c_n??IK|H8ED_CD8>8rkJfr(K@d zE%<+iP{R9Diy2M5Zdsq578S6F=`Byi`==)?Uu*u)DsXe}N#Cb!Yi-?|ePp-m(i?ip z2coaOyIA($$G}S86w}`HI*TJ^NNpe5`_X^>A#s9zaFfu!QpHyEk$LZm&#trPc z`tAom*|`2Zxut*NzY{+%OxZ3tMzr!Jn@t;=OL4 z?_TT=jFwb5F4(j9@AJ3Yiw|8l3=(r?(F)*J>aS0EZD@P`e(DsZL%$f3cORWoUVg`Y zLHj=TU#Z!y2brgOW+*oWJYLkWOU-@a|Bt`lr5*J7oqX8rcKe^%-|mA}j3p+ST=(q! zlr7Hve%p!p|GrF`ahTuz-rWDr+BdqI>P2gEw=(&ZWhow**t6}tj_%#A8~+d6|2aHu zhi$T*y)t8ipw{0>)AywOyeR+o;<_2~Qy$H@b)T8}V+zAE_LP8x>5I;|t-Ab2ruF*! z7)Ir+Lob~F-qARj8NA`Xp?mQCR1-7UBFyr%Q}W9Tqpw&zDV~0QM!j!)O*bc-3VpUKcH^ZlUZ*E|kaFUz@E&kk-*SZTGp zW69#}Gkq5{bgf@{E6%$+;^V&>jefk<5 z68F4vk6ZP#&f79}|0LHO`aL=G!mqpMyzlq3S~4+T`#9^{aZu8g+;(xx{>T_>vFaxV zb8G*xN4C5O?tOOsPyKb@6W`g58x}aka|o1~Ido2x`L{Lx_tvMZ`V|N3T)t%Pf7Zjy zu#IOAxBi|2(9L!GYl=lqE?(5>SAMYI%*Hi0 zu4-V?lNI1s9p`bDG_Q|O)ivMTFvzAEq7pBB&yk59%`aStfxp{{iqZOGHOLlxc z(i#y`$YS+1^xwkwfm;M>3m(j45dMAad0w;e4fW(`=b0+eVbAn7vN_CHy0d9&=XrS^~~C<5|s*fi?{WkI#c{7d0h$X!4|34ZgV9b7ymu`x14>t{gMg& zPuBq~V+7YZ(siLw%pNJ__6<=l1rs$MK)< zZiVe6{$H{X}r|9yE{`re1O%?H1)e_s*C$nfoue*MqW)8&6O%6kOX8Zk&b zZU0oj>Ziu=pDp9TF^Tz&UGqaVZ%?ch+L-=PHb}jAit72ge|6SbSLJ7itnBN&IqA%BYBqIQkpgt^Bjt~vRJCC0euOziU+rA9>` zBG0Qa?_aD@*yHmxq}V2THZQ|X&UEc%wl3}0_THbhIj({8byL{8>vq-EXAawkzD*Z% zl=+@(c2B}21)xkVu+^FO)2a^F(u zc(;j*E&9vG7d%Us_rG|=rLf{L$K1zn8W&0QRr50ZPh{EgN4dMlJR=l2&u`GR-t|C23;tFJwu9v)V;<&{4B=}4A0AzShp z{>J@1zpKbQ|JQS|Uj3=FZ_l_=-RiovNz-asZ|H_gZc7CU{Sq@iIPvNv{Cob-+2nS! z7DI{F<>FiR;Ikk$e+>@2ocZ7Tf&b-YXO?SQZJzsLv7dd>4}KY~OopkF4~**n#;p4P z{5*q#!~FyCTb|edI4mD0_jQH4?)A88-LKy{uVh=sIvk8-XSm^D`&jaPMBV@I_4m&% z_xhW@(O#pPN281RSBhdgt4_lSnTE$_p7UwN-=41Py5KzL)yzAK*6rk+u-IrO(~e@t zGvAm?t8K!H|J26((zqH^U;N+qC-ZW7)*Ew_?gjtauCmc>+T*IGg%0gP=ZaIr9OM~& z0;V}$Wq;;z>R+k5NbbY`|6H0UE_71Adw|`=_s^Bt5o_<=7u96avOjm`TWwv~24%~~ zzheK{_S-wkE(>DpSntSaz!+V1Bx2jTY3{#MLu?98&DX5wuqygLxzhOUepzJ$(6ww{ zuav^Ou6<(+KD+pr*W>G_{z=N5;9>Z~Ymkr~TKE2Y-TP0k!uMA_-)1Yk-zJ-Z;q1;0 zjaxz*(rsTyX1`nL{^#$V7>z2oFLy5tyt z2j{8JoB!MPan{vW2fnd6zxD2VbN1Wfji$%##f%PF&3UaKzWeRU?S|h=-t8Cc{nMvZ zFCy@HPx)dw_n))5Pls+;;HqA0zcYAkAY-XlZ2ixV1s76pxujUppizPDa$iwiSMS9CwL;@6lUR_ZbwyD7Eq6JHGh{>s| zJI?Sb3Y}zFx1dvPR%3=tght^Z#)e{We~w&h#YuJA7nf>-V5v@Q89xayqyE!*cOr8R8Jj3jz%Ui^Q>z+>6#QM$VF zhvKWZbM6=}eYk6(#5xh_HQz6ma9-H9WmeX+ZZ5yaU3*QIUCb;zw9S~g`O9R%E&a#R z&D@v#`9AOdqMuQ__d)bIQst<{+x*7K5au1U|9`ZF(mf9t=s zzZTBk^_P2@)cN|-Cu@(!_k21n7s1WcS3P+n^ARzLTPOSeF>hvD^uKfe(pUd$-xbd< zdO9_Hm-97ljtzN?3=_Y7JT4!9@BhE={QALjWG{T(%e??M|H*uU*7Nu!@1Ffyyh7{i z%KI6=-0%P1b~3a5-to5grCBUVdpQl3*GGommb_rUPeX3s`}fjsI*Lx)83t_GWmm_L z@S?Qm>?4^QReSR7Z@A4}o7cv!)FYJN`ah@UNgz|f?CEFkNz1?CzNfsq;Yh}vqkHGv z)alSrJbM29(yC|c-tMpXzk#!0EpzhUl@sUv_J3z@r)&8Ae$0Pi;cWgJ@}ax=W-A5% zP3B^7|IMp#p^9PC{FfhRxBvgMPyRdaOP}wc^S%Eq`1@yeDK|sHV*B53HlGIVY4V%B z>Eb`#=kbgG&SGo0pLplfM>d8nnGBcSwfFY?tNvQKFs-NO#D9_2*V5C=YV`M)Y;;`p zee&aC74@h5r?SrN-*vC}Z*SlU=J5YhCK~nMdABm)?h705l-r-)gf92HSm?g(makiY(*)YE$)+@m{2?W6R11%I|iju6ZcE+umYj(VA<#3<(V1 zq;KR*NagN&|Mz3{8*3ZxW<}kv^{02l->UAp8|bpn+4I0Dj>MlHS`A|9F$uDK>JeFO zmNq(zB~(xSy}vxIa<&8Rm(~WkL-W-BJscQ z+`IYAD-swZnD_cI?428Ttmf|PxNtw)uUG!wIT~M6{aTFSK=R!m$ISJ_V+tI1-oE>8 z*|DhJZ_y?3X0LW725)pI{S{~-(6?8VC8WS%y<(re_-|)hh8(}5Gs}G0ub(=YCD8Cp zeZ{?L2Pui}2fS zD0;wa!!H}%Qlszo20x1a`~OydyMIgl*)-dNH}zjP*K8N~da>=ww#IGi?`vnAy;yhi z`L%1?dieH2XnYKd0C4toi@@zCS}kyq81Vxr^@d zvFGgn|0z15*lw}pp3<)s>SBEDabY%O<$5zh2aH?8%R1I*cDA5{#a`SOzY4W-}bVVsEIF zX=Q)u9q*6Oz5D*Zh~J%VaHJwW=`q`H{_UJS4Vn=JtL^v8&;M@UaNVly+Odm#)`q*@ zao0TkmtLx^w76v^-`U-=&8$2B7s~c*+0Srp>ED^(zW;k!pCFzz-}_+li`}o7d)G!g z{ts`D<7QlSdHuP4mcL?D4C=14A57gN|L;Tl(;LbCy5jLQANQ5iem`;J^*lxf%{fJ< zG@pL2|NmWceS9`!#{JaQ_g?R2so2I~=Elq?k{j~sae$lWvl|f{p8a31$Z#@Zw)Gk14aI*n9gq_gC}n-zITnpU7AJZwbaOl{Kc9 zivA~0(ER>?OZ}yP-oL|}Bc!kXo4#ewGU0PCt~@TD|9pLQ>mQD<^B4a{$cr7PU*SR~EKr z9kTqFp|bQ(w%=xrlXL2i{F}*O{<<^ooaZ`wdDXP#7Z+_@S#Pqv!1i_g>4n#A47GVy z_%Ce>-tVjS;@@if{clchOFk6gs+#UnvM6!t@A!50=iah4%>R}C_x1cO^_Tx`5K(V9 zoK`QnpfO`VtHH+q2X^)g*3IWy@NK>2-yhPg|F7g9t}j0Km)-6|Bd9BON%Udtd4~gS zj0{gyWh$RceEL}ae?>0uigN~myN`dXo4uqp@a)^|Ui&WY40rYrSG&aYC1{1x+BTl~ z=^BA&N@di(zG&eRc64a3`n&P1kedIJo=u6%1SM?O#|rE-FFYf-x~-;fed}IW?0Np( zUGm>i`Y@N&HKkoQ>H`9f-AFyA=inW4MO3nXZBEzR%logn1xAZJ`#1e}{Vn^<|4aYA zz8RcrHGTcW4Ikgs->x?i^@+@U^Ts=TN1QIh66OZU2aL>jH~SpllJ_@tdTdzT%jtD1 zV+xOozP|aq{QJIz3=EZ`z|ZyOve?xAVbQvA65B zCSGct0b2{OIN{9e_NRi;qTjC1cRgm-_b2%Ol7GIx`M)|>tncj0xwXHb#Qf5~&7Xg* zeaArG))RhbGA~X~({oR-zTm5$H(;bidR73GjbE^Z^<{FJQRAg z`2Xp@{+D+a{SD;$%)<3P{+GM#pRL=r#=p%|KKl2A)G#pk(ihKNzqq~^rNGFQXz^JV|7Tzc_F8IxSxL5N_*VgaMD!TjM>1geeuEcuhgSNS<9U(?< zJa>t|+_&s&NsHuhk-NLvr!9PN>AC3Mc?VtZU{@wqT^}+w2{VQJZZa?$q zs+_0msylxeo$8uktLgUH^4EGlJFUOJof<9o+>+wXV4$1eV?l0KS# zZvsQZo;lHX9*I5G|Nlw4fyA7j4w*S9b3PgZMATk_|1x7e@!TNgAuW)V=l zCh%bmO9Nv^mBgzv$9Na_mGMV)Gt}xCzI^m`Ex&QNhubWsqUbFi3#1YkgwHCR`1tp= z*l&5k|1AG+IiIu6eyYPO`B&2nwuL!wtxoP+^6#q2&O7xc+fBaT-(r91pVx2Wx9?s5 zwX^9zbzl7T)&Gt&0Xg9>e-#VXU144k&Y{Eb z=DgY8`{nd5c7`fVh6+b_`P!17H;&sy6dWy$qjOUh6b(VoheW zJ^g?C`L%l$UNJ_@+uy{ip~bl2VAqZU?IrJwkG$~7wOn!i^<|}t%Q$@){4<%m8LxOR zi+%PZ=YsQpj^rc10*kFzPuVZZVjPus&VFgj^IzRl@-FJHtiQtO^Edl0+l;Md(|56{ z`MtV-=l|t@p1<|q-e*4jubi>{p!%hC*4KG2{?-lob6)G`;hpJe3^KLFKMMDV{_FPJ z`^NqL?|a`*t^ads{giI~eLFt>6#qH*HK#(vcZLH-iT3Xb`?W!*ChFd@7nyQn3SHxt=R8HZmb1LozKQVst`Sbq0FX|4qEit~RQQJ+@6=dtYRm@}n+|F*F)BsA=Kld7-1e12V(>8Y6C`?=IIV;NljsNQ!e zmi`(M|0mz%Er*6f3HJhq9(xgylqDy67E$_3nx-XhC;f~nJool|FjQG-D{P!zY z46{QcQ+R&wz&7ze%S%doAYn8 zTj%&PZB3plwe|FteLNX|7?`5m_v?O1KhR*v`r+oB@Bdzf@8312@R;Pg*S$htpSRz- zz`!6E62-LdeeHW~&3wwCGPt~9V}rc=zhqm+;xmDTd)G2w z=wH>>z@p1_w(}!j&Fdf8^L);Pe|uiZ=G1q;`_-~P${JHY>tBz5HUG-~+@%Hcv!?y_ zf44ug{zsKzX8p!{KEF3lue<&F&=JRjy;=1K-J`$!dGsZFN&MdxufDAJ%#J$uIo-_R z^^47i`7b1#`#Ih06X-^d)7REUzgCpK_;LOdy?>A9D41P(?k-d4^7F?3@8VDY+r4@o z^U+@K+c6&o38No!u}lV%%cK|=PEZKq+QKmDnmB{32;cA0>nBy*e%ptHw@u2q?X7r~ z!7IT|Jg=`$T79E|z?7c>^V8Q93%nLGaBj5be)6MuXNBf}J6Wse^Y6QWnnj*}XG46k z0N8!BIt-O&!2*Bh|0n;l%Xqkymj9jjE&NKa7-L@b`OViSeS3avi~ZvJ z!hid>nwCCV?Qg&B-)g_V2N)zQZuU;T|C&$0vB5I`hxGj)Zl(Y1|GxB>7dTh{^|zT7 zvx46WcKaU(pZfp*;(z+t*{A@fiFH541M9k57JD&g>{Hzj|qcA1@;>cP(Jx_8Zi9vRVJdgaSZFKm#xAEmtP&(3JqbM_Wr zFDeAuPJFHZ)&JFfP_Fd-t^9WV7Wh_2AWUTc6*2fyI%%z`RMMOOmd2SrsFq2`2UYhI#zZyMP&Om|1_nwC= z5lFwW?C^_KjPk!~?^il9Ix>q_)I|E+X3q-h%kQ#z+OIUz@_z`^&VN;JmR+&mR}u6o zelo-JYN^@2`_KP%&t<>)zxY4YBiA?oJsZnclfe7+)SA7T``9%C7XO>{d4FZWpQQ#5 z7#KXxxN>cgx*GqQ!RPp+IS=EPXfca)RQJZn);-KzJ~u4x_pR%40q6cRGBX_6t~L2N z==jmfW5)9wMd}tC7gsSfGe0^b&3o&`zuYhKb6ML??oGaNCNRx0h^>uN<~5UxyOa7d zsR>4v8#~ra-zK^)xWLJg>x#sKCPl%-%^Ay{oG5S<^A0}nBVvN(KCP8g?5k!z|8qF% z^w;UX)W7Dxv)}oD+24uZrf*<%4Bajj{w8DT-;<>W`AUAz<}L_s+@Hv&Sik?-=lo0S zOcs1v?Yw^9L^k;e-`6KNwDK;iVywEiX#VE&cDrp}N1iV_dYNBDCE@ULhBJFTJQ*#X z&nZ5|sXoWy=P$eE@#nTas=vhOu>RTSe>>S4{_+JZD7VpeDch9XxAna8oYi6Ld06gm zzn5V$@z(hS<`m(}Dh*Sf{+M%o#;5ki$J&k0|3F-;FYa*mFMC_&yZv@s_1^Yph59wB zZ2n&ponc|!5fHU*%llo8Kd1gu|JpBl@%H|&`CrU;@G;!_vsJJz^e7|-hbWqDXQgof4#1lDP`_JPS{o7e*LS!U?PXbV_M7a6 zE%w*f|Fzs|BlB(ls~7p{y9>WGx4kzx^j`UY@a_GItPPS37JTRa*$4#mzwp!gxE(Y+ zr)2tY-|xHcYYW@7jzT>&DkptZYt7j>GT_2cG{9llB%f$zG>M#HE_^ti+d~bIB?9-V) z|7Cn!F8cqv%Gb(8-&gx;&iDRqy0TMX@xN0N7c3XIGH(t2e&_siyYD-T?i3!M3Ob3E zyZ`o!_`C`Rg-gCw`d{?QcY6Ok;r{P_(UXbW=gGupzf2dbU;Honyx;v#{ynqT2LH3W z&i`Oq(+-SgvkvX?pldt=o{$%IA`=@re?|%Gq@~7`cr++Sg5V_9& z>`vyU{cD5_`g*POuE)A^W&h6qZ{&aLb4_;6c2Brd^i5Re z{+7(oQ#RW_{dj#^eHgRD-1>El3(hbu;b+L0Uwlu0|DR8v7O>l{0G&Hp{Cz^|zDsUQ ztY$V08(y8>b^q_XaJvtU{8MJ%`?Bn-Naw5Ui}pV+I@Nr=Kk?uD*9;L=4KlLXEF5p^ zjxWniJzm=7b@l!6Eld*_r%CRv=u4eExp&bFaWQVuk4a}fic8gSlJ&yOp;8v1l0e{IIj4~MvS zx9i-Ff4**aoV`CoLPc@KOC!U3U)R~|vCG#mKRtFJ_Y1R`{hgwj!V?% zmIPIPo_*hD+x^Q<^*2&xpZHhs?%UhwSV4RLuiL{KeRUfJRSta3l_@p3S}7HkGj*-= zxzo=c#^-8g%-$!axn`;%yNS>F^y9I`+%AKnu2nE)LHe*e z{{{VD@^9;2mGAQ*>A(B!wJr9`7gcyM%I)pn7I3#}Zj?n`&ae6Vr?&-J+Mo_U`0dqtl~eV52H+<%iI@_4pBII zOZS+Q258s-669z99{;tY`B47Kw4MKdRq^ZegL+<0>Fc)Gf8YD}q%8NMzuasL&p+ON zpZt11qril}8?3$xKizMo6>QtU!KCp!a)11n&xgeKZ2+w{zopIhrD}f$6T@WV*Si%@ zEvdSBIxfu5`t26Ml~PrO*UIWU9yQ-v-WR}?Y_iO9q7X6>sbVQe}`V3Qc;FZ;k4e4h-u2o~Xq=X3T*Ei*N{?A~2 zz3piDyZySG4d3!x_-EE{HJx$k-;#!euioFL{*@25KJrU8c=_=ME43e8U;FC4^6yt~ z`X4y_otwqfvyay<`bo?FUsu=brOzomR`vbz_gjC}85|b9ReZO;@@)30;Q7Cvbh)^; z+g@WaP;lT5{!zl1%y#0)HK)d~E1a!t%k!8YH-)h^Hu3yOJRx=)N{2Lz3efi&qgY&oS?|Jz!RZ#ZM z7W?ay|Mr&l)lYo=Ui;VV;`R5nI}Tp_=el42Q_uY$$IPb%`&l0S=~sPra@=xpKZb;p z-PReOqkcAY^65%vPkH+ambG7u(b%r0mb&2U$eROyO7l()5zZ;nc40#>C zuAfrN%wrID$3|jFKx*RE#;<{*a~N19kAE(VO`mrxeaXDz-O|;4^FN*cIsNtd=XT5g zK^yk7n5KMd7uAiH@bUbey{Z24zb7S%-sX43zisFDk=oGu;NhCf_L~^4s9I)dl&lM> z^L@YFq#?HS-~DgfwohGd`!+N6_O{%~{9F8LzwE8L&B?Gv;ht{vwkh_14x3LG_W#p+ zu`%!V&!1ly;@|ks&3nh8u;0DGA^*rO#uJ8I7CwGu42%V@i}zm7{!;lSDPV5l$)Dn0 z=hW7oIn_PA`}^6g`L8u4N1(cgcN=Rxm>5>?`S0k} zE>q(H-njj#!`;T|yo6fWPCkbQrTBA^^8fOR|Ng$qqOx|sn8=btO))Nd%eY_s@LGNK z@eTpDPtU%@7r%L%uW;5ww;`E7&|r3Ap_BtOZ1unPzr1i||20=NkSi~Ws=wvGk(^nd z*}Gi?7^{?7J& zrGMoi;duddUlz-+eRNay!*Lac4Z^_>*vxl0zE%FYq1|?kUq$H;({$HgK6+Yz%w0da zCot6K%V+#;Vtal6j#0q6?P0qGe74lKO1^56HZXDIm2y3G&Uzi^7Tsszj9XUJ+VD%w zOZ7;9kQ`#Nt?>1tDIZnck9R4~Qo4SNE#ivhzI~Uc>|eCk^1sFP!0Y`lCZP4af1cyd ztbZ5%JNnJ_t<7fHvKwDL(KePmy6);e*>CSRez5%X{psG5&p)kS#<-%H|G6wfGd});pGYPvltHe?fdV{Z@a~#?j)!B90SP@1yi;j z+JFB4^gaKi9`d^~)^4=VlC}7D=E~#JjVIr0sIa9u{H=Sn{^q3*SAR~szS_^aPN_Hk z|F&C9>kd4)p%t(`buRCd{4lm(+m|x>h&q6i&whv>`h-sWU9QV89W;b+P4rOIuC1j? zN#8lP@?ZYv^}9I#=KV+e&s=5CX0|%9a}M|fC88qOb>QvcIufA|A_AFu9z*Og!V zu1tUX_kDeR=|9k-2EXLOuA_fuvVSw@WO#Gvx3~a<55u{q{rmf0{w`%RkS5Lq9R_C3s#2j3B~HJm&-uT4{k~n3_wDIEcbBmwiiu(O$4yJs z4n*JkH0{$0ciXIzX$x1ZIaJTes#2fUQFN^)ex+={%iqjftv$dsuVD4T zD1Sxp0PpFq=2BHF>#OF52L1mwr}0jGMZ9U0MbFzi^@1v%zYj-*a6HmrwSK#POa1iQ z{|&E39MD|Lo_4WbH{gF{D^CC2VNA2)uV95S`+;88nFHb)3AN_vJS@zV) zqyM#h>t0wC-1V609?Q7$@bS0oYkAxADhj?lpTUr&(9`zpLa0NRz{ZOW_d{JezD0kT z-!1$~f-B;|t~;#?N;`NjOnAH;980UMIvY=%F!TD$Ts!C2^{CFLh_SYv>2Kffx*m|F z^hGE5&&~t#;_thC8mctIISM{+xUQXWQkG$j+JQaA-`17yU2XI8r2o0B|GOXT|D*}3 z6Arv^I3Bz$=Vs8o4{hdCCi_`wK6(3k;$IH?F4m|e>f3m~Bs6XlxbkXt^j2X8(Pzd7 z4&K_7+4^zUn`6nft)V~t-t(GlW?<;a<(xT5YQC&1v!qIbKw~$To8>d`ObMjP^R=hH zaQ>;k%QvwU|KB=g!WR2IESLUmx)oW=mJ`j*E#&jN*z~vXH=EPEmH&et-e2_XS#^Q5 zJsay2sY6^V795iJ*e}bZb9BM`Ii7;wmfQb*nfm(LTJ4Jb$`eYQDhwOAKQCtI$ho&? z=bX}Ok)=tiE}w7xt5UVD`|#!OS69w=Xxg~SzOT{gaTSyB42H)UZ>$bnRM_ITu|Ab$ z^_Fh;b#Bvjjx|mUsE-l3C$9R$HFEw@QJu+6@=}c*t^WdU7##QiS$wNKPYW^+39Xki z>zDjJs&i$F{Z5S^{}Sq%JJy)}Tek4R{Rx{gfBuhJ;jjE>&h_=Iho=8ue&v6veSXbj z>C-Eh&x_iYJNes-pPP3Jc`ziDt47F5p59&$Yp=arCG+>W9^)O+hVDPU2@F?R52Ro1 zl^0-+Okk7IXgww>D`WR^>j8r;H|7Msw6DFur+e*TvF1dlgjzdZiv+dCu-`7fnAa^l zza@9iGMyY&PLUNGY>t8pCg_;w&i@5{Rqys^eP8mo(e8C-{YsV^2EDiE?{3`BX!Y@5 z_P*v{oYU^F=Skf1?eU!2;(r$}oj<^^R`@~_L&fw@cVm{;-xH4e`zn08@p+rguW!F$ zG=JBy$AyWZ`r%gl_m$_hKgnC~310V4z;e43L%|VSVTSET9x%$({0)D_qrub`CiBfY zg6&T9b@A_)lY7f<`4&pN7e1jZQ^Tgb=GTgt__@F0T!VJ9y}N&1jp6Uj5b$orrTha;ca@_m z70kP2P8+f|W^-?-;8A@Ox}vYi<;eYJ-W}zuc_%#f@2fpkpRjnrYS-JB)Sk~@|GUxG zVp-S=uQOlMA1FS*vHTx%0FznRtNDTvzMzioclq#Wt+)1*4;DKB}j^MyPE z^WW|N_WzRlV|_0ENnLF5S<|Q6>t1g^b^HFmZ&f#x;5tIgdNoTjqRf3De88)6Er6VewXz$&@Z3~uN1Jbxd) zUhf4O^>O`XzWmmqa))#KZ^#F2yuav=)RD)t7;3Zr*X*-Dz<9=+&tsEz+11eSsp@tg zJD)bo|9K$y>B1)?TTtOM{dud;m-s(N<8_|TDfYAcbj?0b^n0pi;FNot8P=FJq_dr| z{1tK~UrX+V{o~$=#o4c(i~ika*m$F`Wu7(nndghPZ^?~0%&f8~WQq5o8TC`aMg7&U z37SSP%FmbDUEw_Q)jXVA`K!OZtcsgI()>#3?k^16?XSAAA6_HBGTnW@FY5)af2R*H zxP1J1f8OuXpHHVxKW_JJi;S~lYj&s+7<`gr{MyJbu-#HEikJrQZv5PN5y&EVAI;bCWgi}BZ? z=0gbuZr5kb6JTtzRCDdSpWQwA(|5szbLv55{gFdqr!IN@o&B5N^6$?7R>JKo&v#pE zEOhhj(aBbPa%KO@`s<7T&7JdW;e+|h9`$90IUDAAvR^y(|I^H?EDiTBSp6$*Xt=rI z;{F4(e*bxHAMa=L@yI98$o}=o>17H0lNk=kRs5fp-SMdUZ}+`#+qUbzuX%2Ly7v9= z{cX%!I2Kra+Ep2GwO+pWIUhp;*8|I2qH^KI644ox7Jro#fBNppkFclqPxG%P^zNGRS^xTcsi`aLeVA6(GcI_JRMW2h zw%zK(t1aQH_gek#c;TKt@4uU9{noFHEN7nnI(%(@@lLyso&Hnq|LDE15&!Sg^y$xj zr`tBzKG^X(Dd0V9Edbwi4~B&ECkmgg_RwuG-~aRM(-vVriMjQzPenNb(%XZXx7?j? zb*bsnL+j!{Q&}0z8lL{rUVK32L!!*ePnID+p3GVB_V#u^?s)k_zgBHx*1!Lyv2UBj z)bd|nfA9NvE@PKmqsRU`yKUZoYn0Nf^q8D;Y!_$QUYYyb?KjswS|L9X(#=#kQ0kpz z74k~n^c7OFT5JAW*mT>qWeb$7?-_o#b9*2C{H{#hx>xrX{|=XM&^P!iUEkj)^zDA} zdE4zaUsw9;-v4>7JnY-jPY3Q!2bD(phg-v61fE`^ec*KbzfVP{G?)8$Ot<>*OSzkg zm64I-#Pf{b>{a&ba(Nh;xeH`}iz_r5@rkfxWOEg4XDU76m@C}6==f}>zzq%#TtCHK zD|aM>v+(N7(tKXz=wNEI(?4J4ewAdj^%m5ctz#qKthJ&)Q==8W$8YGo^v~mW_TyXg zb5<9xGPq|c{wY{}Z||?emF8s)w|?*Su&K07vk|P`^%iMqEvgD6q+DmLmi~KarN_4G*e>an^`bkrnM}P?@4$KP zule`;+b&hV+h3jc-!;Im(SCy+W5;%$?c1F8_dn}yUZ0c9#x2nEn5ki-M8f+S7IwcS zqqpbjg6oObao=~9{P{jr-l}J}MPaS{-5YK)+oo^-^nl%d$1;{XkHofTI5b2&;rFQ1 zFOtt@{BYkV`>F_|FEhi{$)7){p1P;;=Hk!eOzvly(wM&7s@##$vP3@QzRcy`*Q^n? zE%&O|H?%GOr+k0)`wI^*%gkToh#26K-QIquzNc{d?|h!74YHF!qjJAD|9yGT{oRj8 zrE{!)ow)6Ou5R{a{o`L{YHQT87r$jmIKcF$Wu7j-!voL+U*)IC^JC6gzu(jQ;?>&O z>0WFH?CL{jpSt_*+y5!s_y2wS^m*O8=Q2XeRx)hrID7GGAEQ*SVY;2zzs<$Bl6w*v z6daVrrzstH&|vvj?C*CShQ1Srcg{E0n9*cWmBLrBK}L0n))!GJt+mJGmRFsXsXw>C z^QSbc$@6$umZHCby_2rkXSmM%W&Ul>bEW8=|9e6YWos?GX5jQI4m4f7#xU*RK@k>ncom%v>5P z^E9J+#rI2kLI2bm=hWAod-AJ)?ZGn=uQ%=&Tf0>5gVgp_bLuVsSDZidb^2@lxAQqX zWOsa%=lb>YP+iR1_(+CVPqH7JS^qrNUDekA5{*_)oe_h}IjxTnb zz25G;y8YRp=Iiw*+rrOHielLRy?TGRpZ(u28z0QKd?a&n`oWou4X$VIGJlbHZD5eg z^XQMfiN?uBp}GqJ3JaK+z8;U_mtsgbbwyls=6R`^$?Os3jM^bb_+A>N3p2$p(?g z|Bu}FU!wYKSEll$`wa})vzI5xiL)Hp-RZy}Q~N{e$2`Uc%jFzp&mz<3hR*wa=egL) zzvt)wb!OsZc*Fi)QEIAF|HPw8y3Cg8@_m-U-;+PCJHfQ#xiGT=6Q_mT{Mkj{-f~7e z9MoPik6BbXB=Aarn&4Kp-p>C1i@iG(pZwUX6q_5ef2wA)y~dx8Ta0BTr|!E?FZ%cN z*Y~#Ub@r)JXDtuBb({U`{v7A`Cd>cjMqgj{FV$KTH275Y`+SVbeA%+HcRwqNKV6)7 z+L+B*>1WOFzTDKe3(f{}J0yyQ95s0{ z;grLQ>r(d8+2UWc)ZBO8FzlIA++Tg?`?tn@TPm|AX0#oSc(Q@#xbNfQ+v2B7=V~W( zly!<(p8u#jSK;aU&q|O*w;6%6f0gT$bt~=O`Txnk+27i4wXAzvd@DZVsBRgH^=BRJ zE3%DupFXt^NtcN#IQ>ui_{;sLf-e8RaF%WD?=u_cEB!otVfLwMA8RaUUt+k%78_<= zzwlmr-0b3iKlfGbJDYCzd8XIT{ZA%&&sslyDD`A@;CaFHB z!0GzN_QQ6T?~<+e$L(T}KOI_xRp)9kd*bU#VH)NOJw(i#ZJD$!d z$6^n}JjhOYndK5UxAMl(YwP@PZWh}*y*93<#aHC$cC&_}y7hnKS=gpkI$n>f&aM3S zd4Bxm8MWe@Q`4V)zrLMCh+)S*)qRI5Y^S`Lk=&;V?gY!euQ+~jXWL}mFVzRhjh7?P948 zp0!t#1AZm0P>OY!zcEhV<-S4P?MElMYG(c^t_i3L{+G+QDp0EUpQE~ht`cOi4=9;t zzd1gQ>3w(CvcHElrzI)p)%-qfznFj4#?=W7UAK1Bp0dAHsHKrmQfKkggR!GtIh8?{ zQ72XWvDAtUHyU@o*>w8U<$2$>6dhz0H(^ivQqTJQeU+UGW5esn2fK~$OmvrvJZJa& z%`Bk=%Rf;SD}TMcy0Lxp`ir$S={s+`Irbc%RlH_mJu^$stQ5X|THH_SlKw=jaO-uj z3^?BU>5)jY*`}7{#m(!_b1*p0zb-zn>(g3|R|g6%d~3b-T;%zyuR52W)}R0Q+o$Km zyBYdsGr(;(Xji!Czwd8nN#iW*Lu@|3Pv6)sDDa?R>ZLD^x7}YcxWCn%B`;h4v-+L! zzjaxfuKY2-9JZ{kuCITgQ{9QwFDih)b&LHqjcI^W~xR$JHWEp1roYx-*+r<>uNAF8=0 zv{KJ3XZvC%bT8t@&hL-;`QCUq9{#9yUozbc-1jP8X}R-Xl(X5_e#vhu>t}|tJ%|l{ zTJ-;-$N|vA_CKt-;q~>I<{vCdO z-VNqoyRSW!TGT$fEu^uk_M-2PyAI8+cBig}$H&h5zUTSW>wBJ=#s;K|{#Wb2X%4ET z?w_dL?r!_*#p2VimgldJRbXt` zt9EPdZUgJ-tMz6`-~Vw8e4AC}ugmk}GOauAYzEzOTr612FYzM&Uj&=vkDI?r*}v4V z3NCt-AsSch({sXorjIGxv83h+^8;7hI@ID2*|@8ydjGtl$6uOc?8R6v^RgV33;q{# zRwDFCZQ_|Z^;-Qg^|Q83`Q@%0u*^E=zUSZfl7*nG^!Tz`@&CIP-`dmJ6Z1c8sjZA! z^o(EkSKHl^l1E!F+)rwkV~xHjG$EMj%Psb+V)xeCy{j}b5?5vTdFQ#^_CF8U?F$ml zovXB~{IYL~0~5pVpkLJ)ZyxvC?+d%*(&(^`|H88q@#e0tQh($!*VYGLrQt`D5?T!SxA<#r=5q+0^q6JO zgDor?R?FNSclw&LWld+&6-jQ}a?R<&>%`_Mc5kB?CiZGDa9I5d@c6jk;gQ$3PCaK3 znWD9{Z*ED90fUp)_CpiSegrL;g)On`x60W0f7#!Sg>UsY_8+Z#X2O=ZW6`szx7IT3 z)&5(`bl~aklmBEI1N64BGbn6gShd^k){Y{cea|0@H8TG2i!R!}m9gZmmVm(jsqgoF zXw{z*>~FiZ=83ZWO=mfuxU_gr1;&P2)t|OD??9W@;y`^yP|yAH)SYYPgTGmB>UUjt z|94EC-o5LWo=*LCTF_S8C8PDH(qo2Gty6i#`D`*4xKES4bhANp!d8!mum0BP`rme+ z?Gn1tWNmlG<0ol6QogAG~yJhqKSC z`!m$%|L%W(FZr9-yZ@Q>61Pj_Z^b9CW!mbit9Aa{W~mpa0>1A2Gwt#EZL388US z{d>Ili}jxwpWom9W!Sx7UhHd@FE^Q1?@+1#bG$z0oW!e~jvw=Z2nMDf@8h(@-W2cbUtjZ7`>EymO25kczwd4D@}6{jjWB2s z$S>~7xjW0YaM!%_j*q&@aMe(9&WE?nlV7j=*|9;{KfbYHXIb4Dg$vb*0SBwL75!=q zT)3vn{<x!^#-)t7Yz^LMOc z6e`Q>TR%H=&Cdhxm7d;TeC6q%!?zCpIuBb1cY%H9f2~%VxBOEN{7b11^{St2*VQnI z<-nSKq0*Jp4|Hyd5HSflreghX?-T~Uj-ws>POxA3x3jFSM*j34u9@Yap{t*7@Be%I zY3ush+?x-7{cj0ejI6_v5u4Wy-(g=T`gwz5b4I z!SBtN^JWVvy*kEGz;I9^)qQ$H)!J8|i}R*j`ZQD1pnZ)}Ki6!=#na~;d$7Mhx$>w^ z4y&P+Vcq^s)(6=3OFsV*W})`)#A#lPw6qT?6uU1BzqI>^3Oe%s3aAKoqXEc_fVI8%=P-r{YaQbH*3D-)U{zbV`rfy*d1aeF{Sp6@S9vRVUX)q>wL4WBx-o~d zST&>>d>Eg|@~+Chkn?G-+nuWuzMC>UGQC(PaIP-*pu5I4O|Qj&l$Saj|IjBQ{y&)Y zbujCdi$-dU&nFdiu{1ON`n}^~j?tEB{rMNuEc7hvxQ{IPb1>!P&*Qt4!alr{__g!j zvW&o2^7G`ENvOm#?=_>1<&1c?(f^X=OJ&thJMw>?o-?M|IID;*s?VItMjKFe}h52 zn)&Zj`|n=`4~Z!?uGjg#=eaE>!-t>0Wg62LG|1MKe%V^bAXDh_>b2$J^6RZ#zdQbD zb~88}VzKwxQpm>fW=_PM3v+xdKD>~6(EYRU-u|u0j}1dSx4mSZJV`oI$j7r!|5(u$ zktrRm@nV)umUWQD6*KIn{7PqG2>Ks3E$*HDG@;4A*H3r2C4Xmq-Tm9~zsjyCwtqhB zXOR<@$}GX1r#JonIz~1|hL*FzYqgpAFU&n9{_FAYh-VQoH6M>|J#pVvJT~Ng|J&3# zvlR{)X|9|9UYH@m{(aW=_a&#N={|kwUtjgp{{Qp;Qx5b0-*_=mcIC++2mfCUep~)5 zTpHW^=k@ojmWV6y`EJo%kJ^=gyy7`s$t3dPeb0@@vofBtALSHil6}6Sg~5R%H7J`a zVxj1k=bK->Ue$5a(%f~~ck`_|g@GQoBWCQ1EanaA(!th`;qM;@YPhTpN}#RqV3A?Q(|Wfmx01vW8b2ycLWF z9hxi`mfGFFFV1JeefJXgBIA#1^J`b{`EgWV4|Mq0sjb)Jr1#HbWuC?Sxw%xek%i&f z)z`O-&9!Bj;yyHqPZ9RFxwvpb_hn|CQU~qlzvuitA>S`#t@6y1)_T4ZAF#{P;C5_@Bl*&1|LT^Ut+I z=IE95ExyZdaxMCw`)2;vwE70dTek|NDvbX2Z>!{Si?ZGqw?*2oV$1$BVplZm#IJRi z)cotq{BNOe^}ojU=iaq{?r-A$VPQ8vH)>mb;s2!Y{jX!+YwiENdw=x4KTq}FOR_7k z-;}2^f#JZe%Fx~Ai*0Y6`}?kZ|EEdQ_bge)`ejaiaFx`{8a3%KdTCE#r|?Atq5dsn;XTzZF-@>JWe93$-mL)uv`WrHX z(IFvM`C+nS{Ix4>JNsB9&QICjBzA4@0_UxZ%G#^y*-~!oefHx7x8G0D+TH8#J0|^d z|62Ph{z7~4|C4{qAK#Fl$GB?S6qoBuRhQSY?-tTra*ZqM>teQ5%jO^Z_vp?aGp+Me z|D@(MUbloyTcw#VxyUN1PQI(^FhpL6ePipNzXPJgw(TF!mm zUOAAjt17&!KgwOdcI}k#ybmp(Ky9WwzpibcHz%=pQtd}Om$z%R8?^4oH5}+Ot=s;h zSwBhSHrFww=76qa8XLU+^qkxFlBsMCBU{YYd8^L#mGUxJ6`X3a-+ur1)%|KNbM|ax zjoPu)VnVY2nXWi*Tjw3cf8yFZrr3KcJeMzNV`mZk=;#%+&R$~QnKxd4FK;vP{hM7{ z8ub5==Ird+*}ux;U&V9Zneq9IPUwYCv1gYh)EjPYcx#_`Ry_J`B72<6%kYLn&tD#v zOL;zDwrXG8`Jer7uElMU|6T@~in#xK?|tq3>f5)wME*RUAGe@Df0uma%UT^!*W)Ai zjqtE)3&{Re96G4jsf{dZ-*RwLJg{&W7I z)#Z62zYpj5obNll>%HY}nYsOMzZKY)t*hpDS$NeqXz2US%sTo6_cxpR-s0odiR|A+Ci#{%G{A>R;1#QsdLw6*}+l z-%@m%=w7+SW6S!gd;MBRKdxQjz5cX=N!INeQ#QGxKXQL3GcM))qO@4TRWOL=a@yrn)--oH(noK^mlRb zI@9C}waqX8>^Xnd_220ScK_x5_-+PLdQ8oi(LuhbW>`tACE zO~ZmvxBS&k%KGv0M`o~`c4XT-&GK@F`HSD4=a;fCILugX((q8~GDB5gpJZ`yiNoso z4e6766Lvj+m0>jb(2K-xZzgOM`$`3)INF&SXs|$aQ?4) z(5jnxC;yiJ-(+uc|Ne~Wd-vXdbMhk7Y@0gG$MzP_l+zZxkIi0L@Fni^uiV&%W9z>y zUa9|L^|TcK)w)i+J~cSKqq&-_6f8 zH-}s;dnJ1D^VS5l_TAgcw-w(A+@2j7z3=Di&pTc?U1nn4@HT0AlV#X}Rc-%3)0(rM z*B@jRUsK|x|7m_s!&H~;>-fDG5@Pr7i{1Zo=TY15KMRk`hHJOo`#kTv1e>Xq*r)rJ zRdU?Fj>_Hm>#;{lc+UFu&oza1*IKW-cF5AqK{1a1D_d2AGmC`SU1{qSugs_ zrR1RI(El}J{=Ey;(QeV3uet2G7%{79X`IB01sSE_Ci-$K&Fk}HTEtywLSJK<}7 z{R!cp|Gv#Ddp~pG=aOpX9Trvc{q4Eeq?MZ(H!N+N8CLjMll>fJI z&zGh8x+=C5VE;UdHa-xxZlPx)yHq#Y(D5^q%NU&^J9h0+bkCD z58rS3Sn_A=Pu_s1jlY}z6#CZI|1q)LSO4E|()3U6rs-#9ML3u|pFeYE#Q&ZDLhdjB zck!?O*Y`W*-+lkxpU=DIsH}T+N=U<-J>S07vm_b(51bJ3@7>$|?6O-@cNoo>QY_n* zBfsh6(!E=jnymV)sneyqSoY=IYG&;b9@)$87YHr z4I2ehE(<%AbrR9%*o}IOL zdhSNc5R>b@UFJM~a~L!Qby;IwDEm&f$~J|QE~nQg z&-$C{rqNK7T6L&x^#W&B&H}!ow;yL({*;){{mgaw-8Uf{Be!bRPl=vAKmXjmn;BK| zZ_a3IFcdhwUAN7w;nc?I*Uv9Fxa!!?`~TkFpBBFF(^S((`+MGQd}aE12eUgUR4v|D zt+#n;cw8oU-rqOr)06vcx5dey3hCYyaqxiRG@FFypB86qvAFQ&$>xdY0@K;pm8=gO z+kDouf8&Y|M@&}yZkH;$T-w&FX?4ItoX>7fcG;xp15U2ei(fD>-)c-(ql(ub?aQr6X!&tcT(f#!@7OKrH0guw|&Fm67YCoOx?$v2M{qy;Q5Xpx|&^64$NVBHYd1D;OUI&JCEg_Zn^BI&0l%K`P8$svwMv!7Hwa2BH%#( zT&J*tuM%C$x}EOYReac6{UG`6Z#!p&pt`kg4NrMzZ+`bOalr-m<@WbhpX9%862RbB z-v7<+yov&QjmxX&_XBU&9?1XFZOtyBad=gOW_2y|QJ$I8($;-$UUYGaSlHC}ZLqZf z59gL_5PEiXf=#!1%ATIZj;VdQefF-0ga19=@>ojg#PsVLmy~2@eC`jY;!D);e&Muz6I(FOgMSpK^%hi_u zb)o$fXtvDm=ShF7(#1!SAsW6Z7)1b&7Ui9OUX|r(s{Pj{p49M&+jdl znwxptNMe5U`O6#MRI+McNvbYPHru5Ta&nLJQfbj(hG;W}p4T4EDQWCouPUmN`_{kL zduspu0;mBG+A6r7(L%cLzadxs7RG6B|35o&%!J|Y|G>5LzQ=D9u6W-!vFwKZy~gbi zSdLx$ye6-4yLnAQV}I%a-gCC|-v*dW<&L}vidVR8yWr?;#IsZQc~!2y$*v5`Fypnfd-o z%a=y3m$Y^oOu*4^^WD%zbVW8`(DVrmG=tO{I#d^_4`@QW>5Zk z3)nw&9`wPQ9+%F73sFZ^K(zm(ONs4_v>Ssrjx5^Ij&U|Ib!Dh;lf4drrOX zi{{Vm@iBb!&p$n!X0`PRr%}JYEfeDeeP+3^01wA5yNU};LWZv{%r59Yo-fG<>A}zT zy26xnT6^L5Ym?&t@BEh}75-}e75mq&|3j*iPyV}~e9?8b-}l_^ecxr{uEa`Z%LEEO zl2c~f=Fs!V`TvHs7mBaFtqJ&Z)Zv!RCjMH!x;<*lB6j8R>${}n-%30?V$9so$W>$K z{_y=xhmSY(>ppfr_06vet~_piFL2+_v-#irGVQz>5>ySJIxYq^m{)EHS5Zzh1y!U@O9c(C`%9De*Kz!i9Aq zEBr5BWBsteL1#kF9 zwN;aE^@;t7d_Cs--rSMfATW2ogz60Q1GiWcXRl4?eIfDo+4+mUF}laU=l&1+SIppY zZofujOg-DVstamg{a@Yxy5s+f*uyJ}ul6ZCQ+Pjnt((a49pPI9Lq9w((RltYn!&9< zFPqcx{fS!7s-??+&kl}@oOSi&^#!f(zJ9a49Y5{-eX)O&A17Hcxxf2a&CLJ8&h6*d zMZZ2;P4qNOcRu?2=e6zoLht>3S3ceTN3*@g{NHz;?wiG}TgvnTJy6^rbQ-B({YZm#rk+sCg# zQajj~p8tAiyFyWDru?3V#Zzp$Fob@IP;&_MJ@l? zB>clf%z9RksmH%GnT)d?QBFxOE-B=QOw~RwZ>`2;>Sh{ZnN+i`Yt4JV#^oCF`{aJ< zWw&(fwu?|X`Ml!Q9tT~Hx%Ro*s>x4#9HiH3)}5Od6Dd~vxKt-bb*Am6e|(c(Ox}0B zYJI6rLxx>^u(DI}ly5(ue-|{#v(&0O-8Ju*W!KgduB&TGzgRL)yuIpHb?3yb5yCCK zF9oNRyp})q^VRwM&)lDSU&pU1oIUZJ!7u!B4_9CNo_{py zVZ;o%mcEUZr%j`Fm`dD}e`ok=tHr*))wQQ>RjaPp2gyIP+P^P+=KpzDpJ^VyR_XX` zVd=Ka%H zbv-#}GXHb_R=?++pK~TW@Ah@MbgM}-8Pn`%*hJJ#!;2KGg)glvM`i|B~|{Bn|c6r3QRVu&9967 zdhRlX-4AbRBs|mnoEvD{w<|g&uD8D~_VkaP|8KkB{eAs~^^uE#Zr#qV?bXM&mHR!D z;8?rBmU%&W?%w?V6V<2Yh5mhODK9a3{{B*j=PzgJIv)s^WZSX$eWzyW#IFzL&UW3D zkZdXUyf>-lwWPFx#Mj$qpO`IwdY#y}^vRt?8OPJPPTvqRzE-xNd!yo|$!phjM@+q| zci=Jek^>*@W?f338&Z(7|2Ec?E4SuC>TRc)X2K4ki~ zT~eD~zC3KH(EL9A;;;B^|B|K{tlRH;KKK0*nFpLp<~*}@4}KnzE@u1narVYLt|f(2 z?Uz4^+$HmD|Jro^GgStMWX^@&x3=GJ@Q>ls>)#jBKkYj9o>MKlgli@{)0fBtzp}6A z{+{<|YenD8$Gt1IZ`JL)-szWhKJDZ6*UOb>HNVf*EBhnK@#>}P*3udU)^Gm1mrwFF zX!!amPi=PUkKLz=ELgtFU3V;b68Y`Tob$Est}jm)In#f1!Eqbqq^YKrM@7S@eBblj z_GxZ@b#(8y=l)&^uxUY=>z)rDH1q2nm#faHyfk@Uh}@3@?9-h2ESJ>vXRy0l{c>wq z#(vU!)lu3ThRmXe)bzV>3>pN7(f_1}+AFW&Ln#Xq*9 z{hoZ{v0s1w9Q?&p8?=78rrxK;=hx>5xNH@8d!#1)x!|Yu$G+Z(Id(2pYn98(i-yW} z`+M^5su|Qx37tA;O|+QKv$r}g+A2-{Sg$G8bGc=A{>PumejCe0ue;QkUlcedwR!8Y z^Xt<$7qdEe{r}pg-v4xNU)jIM5$o%p>}V7;v9rIg-7MBUL+E2&Wm>c3CH-0K3akfK zSotRCfBY4`;aK_Rj&mv!krxFY{eE1%x%371OhyhSZr}T?Go*ObzB4WtQ;A^lsZ1#D z<8AobUj6cHef9r8HmmmARG&I9wQQZ#Wp_s7$(1Y?vnuZvRw;7tIi30UxT)pKd}a=X z|2zNYU;JTXZd1Kz>5}aSK64!Dd!ukdgDHW5|4a46$xDTd8lEy%yeZ~s*_y*9eOe-R zPn~PH>+>nkx2>yvo>NAag?^J}v$ z|Nr@X`r6uP<4gNzz4)|ZuLfw$by30ROSM+PcTPNRtN!t@{kllwaocx=Pw#!-_x+0d z*7O@I8=uJfUHG_>^Q&y7>6;s#ZH8IjuS*q`>6U#uyTVzQncroL-#$aB8xm&EPxIJI znBg<+7p) zORh6+c=GXW)HlA8`JX<0(2ObmrEj$+S6p$vli2gQc702me*8SIV7S>#sd`E8w8uA< z64bKUldBd?dVkqLkd@=d-|a{L{+P-T@L=z~&AB?J+Uw%a%wAFcEQmqOr}de3UD(gR z@BjaMpDp?ybZdy~r$3MR?+L&DX8Cuw@%M?xm$8IRbYNmw?V;I!bG1;!k`H;svu{sn zxBrv4wcx?s_jTW^ds*HLv_ss!q-QcI?!g$B*A%w{H8D zvx$?5qvHUhQpR28rSCSG{dEV!Cth@3&PlBr=YTtabOOJ~4lnW9p zm+K@Kw-~m~U;g*|weF@aX45A*yG=T-P3-$Lk2&PovEJ{}i_7mV%#%Gi@8T8t)6FLL zE^cm$4Ex>KopAF{{`~cG&l}a{pZz?;!p%OoS^U1c^37`pW@uY4JN>2a@m6WxfV%K! zI|>qY7fVz>;K?rd_(Ou<=+*O{Xpt+%EL9WT&Qz9ZEq?sw{!{QrpxynZ4LQ||rl`c)f#JY7BX z_~dW7H*WK|TqsTcz1qINk&S;&mB68rZP(Zj?*8P%Z^Ny1#(lvG^Ymv7NAE?wd8zro zFX~uWf2ZKr-jglQ{j(?EDE#zCZb!o32hRgi0*`zZZxk+m6B%cgzxYq|gOL8W#)W%6 z=QnVjmOg)S!GSqFi~8QZS6yAJ_5H(2|JqezU#kEAz8}Bu*VXl9{yysUrj^eEt3iWy zZ(@HwyBa>_fEL%svhBNLD{mZ@3j-YzJ{5FU6d%Wf#0`Q4jR$_%{+rjsQuOT6v#jS) zCO4(;7H!I17BqpwZQnfY$`e5|&ICstjOmzY91z{>wtOO=Vc!;Rru+q;wtxL~Z13Tf zjv+nAH}qcW(b*ZV{UTk^zn0JChSH1+O?(peQmttbzqW9uWhY$z{v~wsKDT|hP6V;& ztG)VLz+|m)h9gkfN%>!l&G{!!8k;+hz0Fu(+n{!Ct=43(N^`LWF|Cm08~3fA_3A<9 z_wMO^>>f2DGFP&?b3WIY%#`?hE9Hj1!1C`(pM6$zM_uu;50WgFTW&Ym?eo{UTx*Me zBqwku$VPmz35t$B#);-F*uCV>3^GXnK5VS*WecJacCw6_RXZCTA6*zPHC)3P-d$;@&-}Eg<+nf9IfmNpj ze(hggFMA>It9$gt`)`)LD3Q*{+tumlTXw5@LCNWT7kVymDF0-0D8$C9z}|Mzzel%H)@JVe9vo_a)EIeKybS_!ViL&#u36 z{<$XKQ@a0cPHnQxv3-&e-Je{iuirLrG3#?KHx28%f(L@wF9k(E>Ub;j?S0Ghb(RLY zzmN5t_-VG_>poX;i>!+510QQa%}WN~BNPRpG$|8;)4ZY(nI(62bV z|Gw)_<(s^>;#+<4l#IuT{Zse$+8&Skkga@Wm4qYry7d>O&YHA)>OJ7TpCug$MC*IDC2RLy>~B9 zf3{MRz!cek?F>rRg;^3;6>K0Mp((thph z&wg(6Xn%8V>*qUD9AZzG)}NU_~t%iAmcRsWg{gyy3UxwW1fqsc#VYA^GTsE%T=5 z37dH4RClFvTgFj#l0G{wI_@PNhrJ3pGwXm_~mohW|xzg_VXubt;C-(Q(^ zPB$UVNPAa8bW&5Jt{XXS4jMcI9>S+~CL{6(F_^B#h(@_UoaPR!9u zOwd@j)a-2IQ`O|my!CtQ?e{gZJd<&az08nl>UyNa-K1ipUGBRrUzNUCZu!?%ueK%W z3t#-+k(x4!;*-Mk|&7JACQwr0v-`)A`iiI5Gix15`MUOer%5RcG{`~R#q zmNJNit$nemT2)oJ!emb}Z*E!Wslfl+zAw+-mnu+@eRf-( z5C4(PQY=>ge;of3Xs;yyo$blbWIx?o;cqNc*MD29{&%zF;iKY9On#oO)$4xoe$C?h z+nN8I`t@!5{#d;o51Kyh`@VPmpR4hILwCMfwL0e3b**h#^=qFk*KDj+2DMdt?-XCz ztJ1i2>((gk2a5ca9+elGvS<3b)-Apx>dx!KXZjkx zx*zk{ck0u(g9-=Qj)|VX`Eje=0V}KeS9z9-`XGfKEAhQXH8=K@5cVk z8JVwt_+6>psk`!oec%L97ROu7UPpU!EEe86UXw8W%JUY%L%Ix!8zQ8&EslrwZC%Y$ zb@{lb{Gxp2qrrW%QhZi2|A||ixNcLl%l++hyo^ImUvZZ$wiUbj{0gguUCxJ()~g@) z%kob!do;JQwl3eJ>&_DUFWU;^w0m!J&38R4{yyTex!TV@J~!c|>#p1^i}QJ3?vvk{ ze~icJ{_;7Q4_>W_*jmNxTJw4x$25mDt?p}$g{=E#{XFa=IJem7e=R%jd9{lrJquU2 zY;o!NJU?oQWWnJ}8-AW$Fo}KonV$*n{ntgFsT;GF{EeK|wQl;u*3v~aJCxZ?O6R!l zslR5wXnqyn6ssDhPZ?g^udOZ@%J@Fhc&D`C$aVb->E;b>&#&1;bME4J&Agz0efyuV`{_?_%D#2^=_KQzlQ`&q^Q%>{g8sR;C9~Lm4zxZOp zx4HWmm`pV_Vp=w)##$PPn$$2|tyo*667^jBo4@=;v%lSW3cKu&S)QsY;L|x`{JZi& za8*rv!>(6OU5oC$Rr-1JyKOZCn_0GTC+eh?H&7X4M*aQbA2I{ zk+_6>n`_A~3;nAOtat7vxo?tR+JDh+YVsT2o{V*UBIeJp8Mu78JI5~F;QEPWU(M5> zt4Uqc_{ZuT)2m&=ci~X^*S}Zy9VzZJaet_EwR9>+tbUjC(H~k22c|y1dE-;)%;-oP3ez2#>3Elo{Y#k2ocuwU%lye)54`=4KFyY^rDlD*EtHE#NSd-;pe z(Z6gRbo!*ORVyCQJvDi*$#=a>-<#IoFMd1v`3N)n41R`tRSG_LCO_Ky@ZRD-m3zO; zbC-2wyf0F7^!y#U8wOFYVloc$?d|K=`(18%?z88=Put&yZhI$o@k?#hkvV5_=OyI@ z%1*QDubx=Ey7$rZZTtOypS!;2gTr>$b%i$j^;tjU%zyoI;?7cm{@(ZYucBo4`(EsL zzfbmjd2Yvf!T$JXFTNjp{QW|;`srgm-#483`22BXUi|M{*H0a{|M&6LhyP#W|Cj!J zX1;%B;J=-mGv=?a2CW%*7oTW%K#9{O`59mN4rj}6H6H_aa_w>^t0N5?}pi?k;JG-A6Sx-cx+={AlpE`Sw=r=YGm9{vp%I(qP6OR{3~G zY1r#sWejoIPgY&*e}pfB*Sr>n>lL+Y{RR?ML2ijWU*$89$i= z*0AXm=@-ExDmoIz$)i(RYZQ`YZK<61umHe=J|F6~HVU!~R4}7hqmgQ_oIDA~K`?H#I zWzV;(``eYwthXIza9gOh)b23Hrq683YF{FrSLeS!>E2=bt1W}w`u#2S+dMTfS9u;? zoB4F&O+~h?f*1cCTqx6P$e-52_2co=2QI~NO46T;B3P1FJ@#Uoc{egUVw2;&OV^V5 zR=TNF>oDb?IZ*gobXL;h@b_l|!=~Ta-g9`RK!sV_yoNNXl^crk&MbXus#x^pVj45^ z9_7>Tw}ks_NNqS`+VK3roiG{U`|BnDPb|G?{OI>lk=)+j*+(ib885qeFx7y^?awQ# zYtnyxPR?Ide*JrP(edA14Kt-)dmPNX@5nMg;-B5|+xM>C`SX5b?=<^j`6Hd5b*&h? zpUPj4kN$AUn(L$7ll-gM7o@-bnB{bN@q%Vu!{z3;GTy%`>U5vgeEQcJX1H7P8`^GATS*H$_OkFzX$n)=?9#>v`w|4JV$)_DQxjUN;ulnqo%fr23x&LFEIk(S$ z6;<{<@|roV;={k^*Dad23r^VjQ@HfH)`Jk1us46VJ*eastNeNNqxi|gU-qTn{d!$K zhj*@dx6Idj-&b3Gv#tDkF4pYdC)4HbUvjqG+q!fa>Gubx;}_(OTZ&YUx? z#l<&I{;c&%u%G0>#PIv#=@Zd6OF7?YF0EM|eRtKJ&-1?P@K+pQK2`g^`u?ZO_J1!w zeb8(ketbjepWA2Et=3#zc;whQKiPRv^ADP3+@A64;+$7kuKv2_73&^tS!%Ip;;}x> zk0#0t3?h-9E{-A5^X1ODE!)fK;`LmDA?v|bzn)k}xy;J~k$e0WofS%)!du<5?4d@V zfS;iGsqk&TIKmYC&dp?)+&L}pyK$`aWB%*6RRr(mnW(tEePFUhBrmyD=iKZgb6kEg zif{gGd{@S9n)PyRpPfIsi@+o_#UjVzO3or(2Zu>9@C44~4D2 z#9;V$PTHNndzvrw+ZEk%_GjNv{B~~5nfkJ2N@uS!={ZXTn;hp}a2z^iYxqKF{(<+3&jj47D)qN6`_31+{AI+O z4N)%FT(2%KfAl>5O7WX5Tk;Rht3Ov6e{|v7z5jpi>^Hr$I#cil>vA)MSoD*NE@^5#3Of|E;6mJgCE4H-{T+RzT z>ri0kDtJ|+w_ehG$25z1&VLOSx0M$i`8ey$MI&{szWWjebL-yaEKx2x>t`PPuv#S5 zcuTaiz&VRxCH2Zliw_*zEwRA&<7!X7+$o_?4dny7FW<7}x~6?o{<*Bl|9b^0SA``6 zn}3}j(zBmmF4x@b`yfole%;m#j_=Rn zQ`nA_K71~ca_aozl@gPEjIR_cB&qnauY};-0O$hTZ=q(aafQvQpD_u6M9+ z+W7dV&Hu`I#=Dcw2^!D65VZ06z1xevpM1T4uJJ!zcY%b9pSQmkDvds7+ZojG!H4I@ zudn*zfkau+osr(@V~}lpWmj*y{MN4HF~Nto&v(J$at5f7b2! z{+leTZY$q*e1HGI^%cq$>)h4v-c4t2TK(totT!*`hUr&C>LhcWZDj9Ww|n*duh&}l z{MN7kdHU((`F~P&emKN^8njK}-(&lKi#>Mli~XBgnI`+_9r@syyYpj*dcWr|E_6pZPE9uk%>7V&t*vy` z0l^j5!fbrzA6GG5=#HoUjZQ zJdyGA{mkgUaZhZ2`afti*yc8ko#Bz3#M9Rb3&if}f8J4Hjz3EM^|FT#< z^wmGm&Q00B-g-Ni`~i)4{d~w@zvEKD?$)6wv8>IeQzgjV0cl)lZ{o&gf=0s;px6G-1-?J<3<>JFK=KnG- zXkJh#v*b}Zv3u#nU*;FB(j?^9GG5&wxp>mz=2hn!!!Ei>>z_CznUS<&9q+No(yAK_ zUoNWL2{x(lP5T>DvUu6{wYO@XbT)`}sm=bpa-vdj`Sn?hmfN0xe$Vul@ojwP zKIOlOUKcs0o?HH$k1w2?Cop>D%7occ^VF=L+)(l|+jH__=JdxBZyL^Ov6b4!KZ~|q zQG4I+ka2?yb4HRbbM*6tR+3B-md)3gSSvnIZIT_xrV-vWved-<1ojE|V%; zdt;lf)eE+g1=g(Ml3OhwK7G%)|DW-fMJFfLK7IZ_Mr3;GrQ7NvKfWwzyeAx?qnph8 zT_(~kkN4~g`TF?`UXT8K^bwanzuuV5_qVJgQ-G|4wEl0gGmoDe*CxlNDs4FF!=OFm z*`ZmpV+TFrN8!v$|il0f9GqS89)7WT3>(CJhShcjm=`-OYN@y_sV~!`!beqYgvRC zZfyT_{-XH~7PI_&F`&s8o`eH|Pv4dAum0;_H~oBGL9?_)Rh<4W+w?1uTMRF$T;1_F z`yj)X7`IY^FEjQn?93=CU2<#-Tg+s0kJF)FLNfc>4mp&u-TiW}_T%bn8PfCH541~^ zzH-f}`tbiJNSF=u}nM0Q5SKAzprl-UqXswTZi7y6N}f+k(ZU6YFXa! zLSN*5yVP})Z_Q`rnc41?@=F!{E6?F$Jy!G4)l9Ga-igl_cZppwIM!sBcqae&ABGi= zK6l=(l+*kYm$$ai{C&m4x<$$XvPV}oGuX$kclx0u*0}z!!Se^7e)WF7IA;cj-Ad(C z#TR@2|2T7T=GKn%Gp=zj|5~4_)yXq&$_=jN*WYY$`ss$P59<&4BrM3untgqVk4|}4 zlx*|Y+hTGpJk_6hJ~PWECdKy5`?IjPbg#7S?CbyM-4n9iutx9kv=c-FKEUF$a}=P_KKW ze#$q$>heX2k8HP<+L!CfToL0woclE}PvljQlv@AR7p;0;mI=-WdJN{9-;di}I_rkO z#uKLJraW$C(_($|q@63rmrWx0aPK!Rd+{mfgoNshV7ZXCu!{A2 z^^2Jd+T`BL)*A*fM$A~Vrza=w=by?3)iYN%luP$7J@F)Cv#Wdd$3yeFqrP@O^A)`A zaQPd9S5Mw+*$(Fw6OI0AyUqP+m-uA6=m~Lq-hE#$mj0dc+@)mAbjh=2>ucR@?uC}t zxUp9xr7L7bJnv@z_~g$#;cNG#VZn3?&J3nKF{)=UsE=jx0 zo%k_f{qGjpMRS=9rZe35dT;;BBipz+4%qu2j9YR#>cfifHnuarJ+WdBI>WfcHsSos z$f7uL>zci#_cxuMww&wh{b!4QAE`C8*ziVjPu_=yDc9A1g`fX8e|CBC=lT8jXD6KZ zdi}7<#$#USzu))1?+XV_a)qt>xBt)S{Zqhqp?seIzvk@i>F=wo*0Vo~>EAxjc`1w8 z9#HoCu--zxpni(Oea7w9cQ>VaTmJcQ`1ISn^4&$tt?#a6VrCM#^N_E6#hb?2_y0U| z?fZB=(LID${661=MH!C+(i{T$$_)NgeKJ-)t+eCLp>^p7hfbz-{r&Uf^O+Wj##hoc zYTX`RkNh|_MIb#|>A|ZK_s2c|x81+Jj>mSn==JxZ6WfCMnJ>@bV@<3&suJB*bX)zF z^!8U*H|()>xVVW&!sEf7peM@~_1=w{muWI%@t-p@xBV%$O=qw?7RB@EiPyuED-ZoI z$k@9+YxVKE$E(-A6H|EEEIRE_lZS%nP435!BgOAJ-tWBTp=|AP*=pXR=e1HB)8`(! zBEC24b;1p)R!2F;rg?UU(%(v{K1fJ;_My7n=21-2+y#}_PkjF-)G}{IvBb}xRoREu zZR?qv_{m6M`PBP!oL8pnCsnwVi7h|yqx$jd51%&+Z#l8^jphG8KC9PG+Gq3V_mTU5 zciNf<$uH@C5U^U`rb6VttN;BkrO#`Av3=>EpZ_-QR`sU2lMmJ$sY_qK+4y~NzMS@V z-N0X<8<$Lz{>T6S8h`cV^#6Lh-)#D{RKIp*&132ND@1>OR#%-MbYnlLX8rfo?o(b6 zQ!M8fo-d#UGJkIL|Gg2A{vb?LW5?gO`SFZRx9`5&#_UmWyXbWEy-iIVL309n7G+$R z&8WTKb4hhU({iozVsq1u%PnY{^N_b{@2w{slam`xypB=f;(t?ZUY)$s&EcfrmX5m_ z8-h!-WKJJT)cIm!e)h^jgAWJaN&1D@r#@KV>-_Qf>m^=RuWU2=lI}0OcJb_m>HBYm zrRy#}tns*;=UC<9S&iKiw)syvBtKgB_f0A{n&$qfI#cXj?1kz%&#o7&?)bsP@#1>$ z3(K=yO`)9aA$=C|v3>e^r>?3=$iADnd~$C!_rwQf9$Q?=J9k}wwUYnEwL$An76)tvLmeU?mXxF%zEN?kAHgq>)f_@ zZn-B{nDW?;9Wi|xsTOx%w`^T_@}V=9U%Kb~JNi0*=ajPV9hG}Gcm25?GI>Y4&+p@h zlzM6>u>C44pI;b$?tV1ipL22L>HYJo!!FKrI=lbXs?}MqZ94CD8~<?=ScDi(%$z86w2iB^=UyZ8&MxhMx~~w@O*`Xi13GN^R}u$m-tt zaPzG?Ki)TS%bA6Di!Et-D82Z!*G1Fx#q-#Y_cXATS-g?3w|oBZcvAfie`dxS)>m;~ zs?G^!%yn{kl)Rnkbbm~$)V7Ne)~nA8B&e}27yqKMD|Evt8BRZ$)6-<9hrYACH@&zf zZPBYaVTT+TG(N2E$v%F@JyZF><=yX&D9n6U`nCL+pl{4>_6sl4_wCwk*~Dh^W&VD4 zi!BWOz3&?r%o7%ydm$}%;)1ffnn!DYpJOj}NQ}?R{cT#@^vl7AMX&1p9PXA)Iyry8 z7QcKvr@QrwPuLNi!X9mJ-4~X{yI((e`|hXp_IKa*FMj^)>%a2l*7fdz*FVhDefweG z|G)32gAP74RnkAV+v3}#>iVOi;a6Vlt@&pE|Fiwom(#m`G5D1~^9$QpT6N(1xgOAR zjv%ILH_-NQNy}%UpiH83TVQ(a{bH$a(^f2Q+`DaC7@zHz3tSvBWj7K{-#SRJf4Z-m zSJ?e>KPU>BFF!c0_Thn=`OcFC_Y|GG4kC(1XrU!Ci=Q%(9+_cM-ThicDB{`e<#X#I3C zzU2RJX8GTLpDZi;|7dZ(plsB+CyUA_y7^5hV4R?Ge)fSz*OG#B7vD4L|C@Kay2t2< z_0{hU8oRcZy>1frHQY7r+4*w|XFDeco?PaUHkmJhXZFspn!Vre&$cgIn|$u;7vAdu z8@^2wJDbZ>wM9)hDpWjXLXKi6e4f7PflP{rTrlKl^y^(t*mmsX`VP7xrs{9X{r;;uE`S+Ce`ZfQ%iuFrs3LiaL2uU9SG{k~vF&;#vAg(=l8O99Jw`?qUdIRy z^IaEv+y3)`wog1{UQsYP>PPEKKmcck?4E2VEgec=NIy=T&lmNB=_CRz8AVdj1OF@nnM@WO;SsEz`U93 z)}CMUl#Q;d*ZtGIwRx+9XL3&I3{k^HyH>kZlw8@(rqb{K_jdBRs`YE*{h8!EBLDr7 zIeYBu7pY(8CTzdQ%=qQUQ_F{+c^bAkZCm<;A>`9qk-rr--|k#{_kR8I`4N3~t8Ofd zaG6z8dZ7J(8Q;5GvbG>w&gOysm#V z;dK3@J&)~wM$f4zeDn0X{GSKxU+oKTJ+&%|P1E@>Z`1yL&42I4-Hd-a?fX=r8{$G9 z3<>cbw#RKAsBW;o{NURWwSDUA49z`XZEano=lYm!eH;TLqXdhBzy!yCp$i_mi8@TE zZ=I^(!}c@$-{bdBe@Nd8IJY~{_WuOuZ9M;Fqt;h`ILLfqgBb%KbBAK`+O?i46$Ovj zlbWw7e%Se2#y3t?D~WIU(>nci5BA+DG-PYaXTLdl`Q7#Jx<_1^B{+ElR1W4%Mlp8mKLt8HB|WqkGb{Vg3+ zc26(fTa&j&%i4~Q;lv_8?%hRqU;myH%et=W`%d-srM0IMm3!6SGx}}%qusZ|;+)Xe zY4uATWMztfhR@0V=|89Vr~jfSk4jGO@7Qqq{h#eMddE+EEL!*ESa-AD|BpWc-{+`U z>fh;J>3wcddfZjDh_5@C9ryk0(QMqS+4x`Hm!a&1@fWpX1_lNOPgg&ebxsLQ0K`Op A5C8xG literal 0 HcmV?d00001 diff --git a/SwiftChat/Assets.xcassets/Contents.json b/SwiftChat/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/SwiftChat/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftChat/Assets.xcassets/LaunchColor.colorset/Contents.json b/SwiftChat/Assets.xcassets/LaunchColor.colorset/Contents.json new file mode 100644 index 0000000..76c3cd7 --- /dev/null +++ b/SwiftChat/Assets.xcassets/LaunchColor.colorset/Contents.json @@ -0,0 +1,47 @@ +{ + "colors" : [ + { + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "light" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.090", + "green" : "0.090", + "red" : "0.090" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftChat/Assets.xcassets/openai-icon.imageset/Contents.json b/SwiftChat/Assets.xcassets/openai-icon.imageset/Contents.json new file mode 100644 index 0000000..66cd201 --- /dev/null +++ b/SwiftChat/Assets.xcassets/openai-icon.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "openai.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "openai-white 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "openai@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "openai-white@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "openai@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "openai-white@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white 1.png b/SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white 1.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c7a1f6c17868b407ba5ab7b565bc74783aefba GIT binary patch literal 5116 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 literal 0 HcmV?d00001 diff --git a/SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white@2x.png b/SwiftChat/Assets.xcassets/openai-icon.imageset/openai-white@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0e2a515a9268d19996f67c1ad8902b28cef1c6 GIT binary patch literal 12089 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+SkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ1ycWlfuYoZf#FpG1B2BJ1_tqhIlBUF7#J8@QX@Rme0>?T z7#J8h7+4vF7?>Ft7#JBC85kI)7(k{mGB7ZBF-pVPL5vzuHB1Z)?U@WLVD$_PQ4A2^ z0p&wz<^_yU)r<@b3z*=l8x}Al*dUF&w`7(uFfecyctjR6FmMZlFeAgPIT8#EOs6tK zB1$5BeXNr6bM+Ea@{>~aDsl@zx)^LKtSWK~a#KqZ6)JLb@`|l0Y?Z(&tn!MjK*IV; z3ScEA*|tg%z5xo(`9-M;W_kvC21<5Z3JMA~MJZ`kK`w4k?L{eRwn`Z#B?VUc`sL;2 zdgaD?`9315O#GEkj1`k>fGihXbtKtzLF-0Zk)^udV`lpyW6%&VW&Gcag-db&7< zR4~4s%f2Hwv~ry@4~G_)SPsXc2HwtyfGG+I8;(r6v3Mh6XJ?n{#^XYZgrZHP*2nC1 z?5gaz*wI^U+QkxLGEF1Gp?T2*Mjj;&FTvNf_ctChKOa$ie(SfW>i3(^+a36Cb6@JO ze7$sXU*tE-{a>T6UoySLG&@#y%m1_ab;7nj&HJ+UFI<$c`K+1o-f0^gc($LEWL_S> z{M7$!nP0CfMKg~5e>F=+V0H+@gDv-uT}(Rj@=Ctv-L(h4J$RN7y+Jf!e|+QV1N{en zK8TU2W6X5#`9C*m$1&E!YJv=fHhsUB_APqzYQOaj={xLq1mCdaF)Vxe0d$HGyT4+GaO1GD~g#-8>Vz=5e`drAdX#4cQp+EmL0C{GYU7p6)F} zwj-Vo_C8pA=Bu$ZFUu#@2RiZIt8*H637uZ^iiyxKe#TMdwa>A+Im)* z->2i2uMhmkU0|!Oc9*B(8-S}?tMGNDp-g>rb)6Xo+}5`N47EP3H$ zm);T*J3EhqdrO;Iy}=HFmQ9y}=S@j#l~&PBR(xdij!O9rW{b+ zdyXMTT4uN6n;o8?jyTK?cfLR654&T=tjCXYe*3(>{%OwMzYE4PLE=%3M9B{4T=lQ!nA^ijQg2MI`opz^Nd!#d77IE1#$~}>J zub9XEAh9re18+vA(EKljH8OwvKAk_+Xd>$~G5Vf4%QADedreXo!Wp0LWU0{pm3-{~ zoGr?w%MHq+Z=0@jN;|P*wZYq8no`g0r`-C^$e&=f{td?x-IoTb=MMTjuH*cpZoxZ; zw~j-P_0xxS2NXVj`>-s5y}&^Tj`VCC8orz4ABx73eKGU>b;xq*}c5~Y2h#P@CN?I_NGnRll^Q;+`jpmg<7_%-{p;ATCy*2P50;X zYX4g_eB#*kPdn7gP2p`3Z@N?IQ?#s4MBDMx$4VFP|Bi|G-L5CCo?`w}iE7V`s{26mMAR9R7#Dx)G0fg?RQ$a z$5+7=oA4Fiuc~tdsI}Sc%Bl+WoxG*ZI)vH7gin^sz1RCsYx>TqrwdN8H(qwsWy=C|M#eadP%AwcZT@s&ZzEXts(VycJrvK8uzf0o9%+SK{ zzg=2<_WFvk4ioQl&*5-#?(>=b>Ff5lTVC3f^Us%^@vV9GDksj4%+Fhj_gM9%m26Br zb=o)lt(m~Vy+;G9-yhx2lgGa2Xx7}>zu!&2@crwT($~=!&5L#YKiw1C$0NgIvSxeE z+g!DyeN#-gPYtWeE@%5N?On+S+XBW9*RJgQ^l{pS)6+k{VcNs`H}=8m*AuL)zfaJA zqMW(7p3Q%)*&e=?oARtec;AP8%To9nUa$1eW9y@Z4s+?&q{$ecy9F96!+S&oxnh zkLT%!Tb4bIioJcS>T|NAZzcPOpaQuGbBw1S2)g*^Nztdqw11)-1ApXh5K$G{x_%Yc zR&B4P&9$ORf2V5)oNoVf_rOPmC##C?DH@EN{6-dSBA7s#SWcCx2;saP$IV>D$Ys6m z$>*w}+QwJ!Dtie6OCC#otZ3Rng@v9Q<={$4iEYUP{Q^-L$8F`d_0JXWaL3YrIZV zJ@&PHVRgXw@CQE+=(loBjQ_Om(ua;*doKHx@+>z)hYfYocH8T-e25q6Zl^2>51~9<$2e($a>eQ z7npPipP07Owqx4sO*JR=)Az9)i2GppBH4OV>n4GH&L{JQ=H@Tb&5bv+WYqAQc#o}O z0@uqaWv6{>XS;FA|BVy(5uNc(;^B-_PfpGHCfs|`>fh-p@-nR_^($SCuHDrws<5aw z+`-Yp!z9?gW4A2VqbYgIdu%o@`*32Y^BS?w$z#SU+ot>+^JA5ernH>Y~{y1-`>4c z`RU%czB$1D#&5?Tx>nPQ{jOeZesrbby>-h!&IaaJOE$*qmN6FoNc#5X^SsqEj;~bm z&%IglR_sQI{~5Q&eqA*K86k%4iu>0U^(;1aJY}a{&%Gn{>FUqZ_DD(G&b|AjcKU0B$=kChX{ChQ(`-7;0>vOaJrd&_ot9m}?+LT#5-AqD_ zt2cqaa?-{7TtQl|``J1c->&++@_)V2a+`~uTT~hHeCsqAjQ(%Wyl>n!VgBg@lH!%K zD)asR$veay@wq%RkK5y?jPlHVq9xDeJ_(n;KRLzwU1HC~TMwkJ_WZcN^wowXvg_w= zK7H8soH>(yTza>oQRSt7VisG1rU^0JHa-}@&=USLV~Sne{OKZpdtR@*Z2JCf(z7?O zT`x;$x~E8HuV9_4&;QcqL3Ni*-ulTk>0jd7zOfuwa@s-ckg%-R|CvnL7c~M6_S>yw zs^PfD&+_l0>&|_XwoO?dB67|CLWNj`@dd?9<=u-!($}w!sec!4{P|2n-czgd7XO{x zW51{Wd49n9z&D55r3+(S_qMQ!*Bv!pl6~wK>x6ig%Dw+|ir+q;b8c<#)Ye~$T<7yI z{a~K3^OCvM@23+@I?u1z`cF@a!S{XgiQkQjj=kV>_1*oIYiUzH>vspusWI$JI4rc* z{#jpq-d9T2@^9Q((W>eN^VFNFnM*G&e0AG=#V?oi=ik;(w&UHB`R2imX-^UrBJ|(? zZuno|w?WwGPf+9n7VfjktG<4+m7im~N_KPRo9f-S%z}+f8AMt-d(VU)IJ-7=(&tb& z<++UC63=}05Dk&KrRk=t{ac#(%n{MKcgp^5JC|Gide!3lT6U~26vF59y|}H>cYWro z8mS7F9ricmZ3JrgQr2vHd0Nf?_T0le=Uk4yHofU}=*%`fZj-6?{4aHWeb;2H>b`Yh z{^tAjRg#XUx|IIbD(p0UCKaZYWqEyXvgU8|inw|+ant`cpMvTBCY&&+BU{LZ z_xew#5cd;HvXvMntbYHaI_P`nM5(9cFE-3d``WYaTeY;t_E}oK`*<~E!+QLygg>x7 zNX}UK)Oc0o|JRQumA|MkDwmBcHDP~xvR zJvAYHLU!!w18dLL{XeknN%4nGOn3I(^2=82&pBFf%I)6mUE39=Uw^~gaC<|+aVevS zFCpROYknVie)B-PZ))i_tLrwtPd`-(J{31i^Z($ez^~}P{ok}X(UMB%51*(Pv}3!l zZEF6L%kq;w{>j~$UdEZQ$>sg~N&AH)X8v7kAAN13*Fy<`hg}I%gx5;vvacv|<(pf| zQSh2C_3Dy4{)@j$nta**)U$i}i}<&f?w88(%@3aKc}w(u$n>0?oQF9dOcoSx{jS|` z<<$H=>vwKv>OQ5uexYCC6Yk9WLJ|{KDo3A^`dad#M0<&<`<;v*UH=x<7}^+BMlVma znK75?&$k0>t#^kQYCN?|{kr4QJm!Au=Eo0$x0P2m{o{J~S;K7O`g06&7X8a7tN(xA z^tn;{-p(zB^S5lwJ+({Of@=zhB6@GAsP5gyvcFTXb2USW2)1Kdxt`U=AS#quZm)oz2 zpC`Jt2U)&co_gWiPh+lV2Fa~cJZiZoSJYm*!L?0n#hSDyh0$MyH|}@T`2Tgn@kWX3 zqSvomwk^(NJo!1$A@=k^|60bQU)lGwE>;UU64rBf&L92*#V=m7d;u#RKAo=NVN$_&TN^zLY&tK4(t5 z-#e90mZB98s(C(Gc9~5}f2MkSV(zKThA*;nK9y&^uM@cX>f;hoyK~<%@0U3&Zdtkb z(VKFG53Zpdm|pUlK1RA2{d0tTo^5_2k^X&1bWh?TVh4@@31<2}hUD zxtDD(VLfFtL*@MH8|i6DIp@@$Hu67xEb%7w;n4@~4mYo8m#IgesEpcw^;O=+y47K4 zo=b~p_;}hgESaNq_PNO)=TFuaj4wl4Gxgil?_MZp^f6Rhz5Mw%$BAzhOS|IimET9( z?T@YD{h>KQX13kZML#d{y*>H2cFO7P6<5`q4~G3Uv~Bb^pZ2Hk!CZwZ4gXIm;sJj? z+i%H+>m2Pu??s`ZhJ^;=-@pr334*5|1|*>1_|jm$3R>Q>3U?fNQr(>q4- zQ{3UZP1dz1-ZT3#DIWj+cH%a(73UUxT4{UFIl6S0kI%#4bL=l2esVtW5$LiHGRsZ< zB6d&V#TTyi2dDI@zVe7?T2jUo-v8v={^Zm>FTOe5zj}{x%EqPFET3O^u=yv;E;hO1 zzSIkAr9SyH{pWScRakm1T3tAl@QMb$JO^=DMU`5UvhJbq~YB(#`zc=q)^JMv{d~1&d8DI9Z zvF*RIe@ai5`~KY7pR0NI`)-{X{rgI#^8J8QH}X^`@7K0q_4u_i_UAQC_okxxR`up} z9rczM3^TYtNGcp{$o==>RF0af#Ex5x3m#3p{Uv1<0)KBx2@4LVl(oVl_=x#3C8Uxf{RR^oSdowK#km)&$U z$NOKjL)KL8&CkQ#E-zl0#ngY5r{Nldy21B*h8jP2=3kt(aqh*{@5;IR_(q1CWYHpg(Q|0|7>i^jfTwfRTOn&OI`rPinIUmJ-`|-~2 zOMjK-`Ea34J|R2Qm+(8C~M7 z6`yeT)xL@Smg$oUXZ>-`{luGp$+|(i;mWP-5aWNVd6kzZ$Fb+dJe9Ss;X7*`a{PxG zN8e(dugwa@yEf#zdCJ z6K-8o?~P`h|7~Zp49EF*u7Xb$e_t+DwCua}<@?$;xX6v z+C#1%s?;PF>GaqyeeZY9`PR?9rwxJ@*7V<5uCXyUcgC`k`Zq~Wr#{(wBWCqox!d2w zr&{fAQPE+of3Ko6qlV{Cvv%NzJdY|FRL<%F!=n*kAvd ze}!-5W(oD5y1TDz>&=?>Px^66-_qhJY31bE^OgGe0`<4Y$X?1jE7JWoc5dcn%X_+e zByu{PWA7&4-rB4dP_chj+4FOLli%HBoyT!r`sxBrGyVI0ftfBbe0pn?7kNm`xVKPO z$5_7o{d_{R`qSIl`I&+qN~CBIZ&#yzAbLWI+-_AQ=@ACD&&$XSK z->}?d?MrzxmDhe#>!WsiuhvW^h2Hq}y@k7uJ}Fn+ug$bG%6MJb{8=eA`zPDX`7Zk5 z^WR^S_?&8&Wv`G?|Ial0ul|!yvHMqkwYn`TxqPDT6o(DId&G9X3D31N<#-Xy)EXi` zFJedU=kq`IKB%00s(7=7QPYlC&zCuI3q@}EPwYw4eC)RL<^H_t$sYH#UfKTftP3fFqoe@cpFn=Hp3`#QlJha48X zIV^tsoRRw7YjO+Q`7>$?9+&>oc3A%F;@bH4DX-siuRC|i*Zri=uj6j>6VLQFPM>on z)J*lJajOsmM@!Dr%}>2Ef0X22(Nz3>GNb<2-Kqb&II8KvohR0 zX7hdLy!rZ|xa51s6>r$4gsQnI?#`U}EkOKj%-c_OCO4Q@yzXMzQG6ge?s-Fvl-ZUS zo0v(;n z7n!_?Nc9u%K&YKRa#6P%}k}{8Tp2zui27O+)g^n8cIsCRw_{uqH?MZv_ zJDawgG01mB1gwmI(Uv$t9EAKi5M ziBL*qhgi0})aE%>&u@)zGTg>z|1eJ=bm09&E0TI`B=U3Q|^Y_!82~D z-u@JOa{Bor9_>GFluzJcl75x?uwG+(z0%TzPsRebDmDFkrFL_zTnpUF8b7bFS!4F4oUwO-F#i#a^(j5O58P>6|JbJH$M&Lo z^7cIQ`WcrqKfmzc@6MG{OTrI6*ZZLH-{VTq6UirDs(YqfH12sWX}|T>%vaZ&rEl=G zg-KqOZdK~uWnM@Z|!Vc^jMWYL+Vt!EO%4ZC!N>P64&c;AK%~p z+u%i#!q(#6tYh`L)Bk+uxyQ4OJN;AS#+9?QOKmjVRPVA$WY{wXJ(Hb!ZMy!#Byn}6 zxf%Sox^kAB(%EX}_wVl1^FCDv7RPXT&ew6)urrdcJg>a}aftH;MaB)a{pji0xh7CU+@{*vkuz52z@5IgB9)5Dj<7M#@zv2NRAeZcX-ZUqtc zr8!c}`DYk3wz*H69(FKl_mQ&uOWwM5-)i#fyx?wjW>LyoEwA>C^--a6v6If_e&INB zW7AW!r?o48i*W4Z{r+^r*@(bpGEN}|JmH?SJ#~w zWTIK~-cC%g*!gPLkAsqGoK4e1+nkT(^VakI-E&?4Nrl1H7cX!7%Rc{cWpcS_9e+#I z)1dTQr;>jrE9h@3DcZi)e9!N``^|Oo42sXa7A#*kKko{I!;F|!c@F=wLw8u*O?vaS z?CY{SH_gf@CSM~LwGHRh57Zu-@P}#f^4yJ6Hr~y1s*5g=I5FR2Wx{He zqkU`oeNO$+EBJlJecuU}TWeW9-EOXD`Kc^$-2ajPWr^H33@5(+m-ATqr`F!Jzj-U; z+qw5Po=os^4|iXby-}gy(zO?N=X+fBOz+;s==tDwuWEgIfeeRbdi=v}y5~MJlxuv* zjBuY~Td_|dhQsNi^3x^fgp-$@GbzrQ;?3|`{P%=?K8XwV{W+DJaL4tiXZrn_FXu26 zn9k!|;>osst?7jN{0}t+cda(sq|M(`eEEUtufz|(j5sPgXSu9(Jh$j_@PTO$3?GyT zY>J;VbJr5x|8?`HgxfL*=>7ZX|7TxNYwq94d-5ZTE%cJ5KKq?B6W;MjZ>_M)!>E`E zH||N@b-t-=%>DCejF^pl%IV;j&l&%V`3K!JWAIM>`||V@`}WP1vmQScSFSo&seHm- zOVC>7t^}h%w2jElCHww;bgtayTzymbS!CSo-@@`=_Km61(O}y#8G(t5pAUPwSQAr{oIecsI{@c2e!8)5Mci@@aP$E}QoB z>h#0EK5VZ4{bSanSqnd<@MoSfp2@iK%Y6QNyO7&mv5&4a{^MSC>H9a`X4buKZ2D(r zZ1j{9^7_K&#_6rj4wa56T+b$Qi&Z53*}Pgmu+HGB zKT|xL)DnH}(AKtRLEl*3)=#dt`6I{mCuVJo{mRYf-PE5ruKA>KkKMZ7+;PE+f9Gzk zljq{qoWHGZR%q?#TNm8wZ}}~Fn|Yx8qE(cX(Ue@S)Y<*HwbC#8J_t-XDQ-M_waiyz z;pC}@Pdi!W1ldjd6wiFW=cIO@9(TE zXS=oKYxb9)Twm*ATdiLI&pp0P`E79L#-oarCofp3x5cu5PJU42|G@O;a|cFIFUP2& zJ-JqAzg0K(8y)}McwhFH<=T=pZQ353UC+;%ESEm*!?&Uslc*U8CCC&F)HKMm}UHF3~3ja_pie(Obi;MQ97 zr{zlMl&f}ERCBG4T&VF?*z0aMSoXoH(`N>j^>qk$Y zlxO?aaNY2OhBa?xzV_67UBO4C(=Bp;t8;u$eBight~Nf4`Q_6WkE$8prtV)V$a9Ki ziCo8$9Q|jTOZWS~n{vEm;hJFXiT4?07@a;9mhw;h`qpM&?wzg2PrIL;dA~$z{Wr~d zRd-fCG`;MsdF%+^>RL{X?(UzpFTQ?PFj=xbUE!tjEB9RqPu<_o44xsPK4~AX$67<> zBjRel9{)F$raGOfZuW1Q@aNa{4O?DDDE^g@Vf>@^kx9W)@9ok>KR2$O`t|day{@KKaI8TDWcDt}pq`NwQPVGjKjBnmhkAM@d@E#qKNa zkM>1OT2y~&strq3<}T$I^2_FK_uqK*r^%Z|c}wQ5eSWocjeXClx6Ch<8>fWk+jT{6 zU(f8h+)eiF-NwE>>ffCYE_ImX|9VeQWc?g(SJ!82ePbWp==uKk`fSIaK0PHm49BO; zS$N=w?y9=)O82KLep=(gaA4nrJy#rOrA=S+NB+Y5bD_sJWuymWf7CPZeZn96TSV{T z_e+&(=`rF9pOiDcXH=Y;#jN{va*(Wm^Nr)>eAO=2pNez8ONM{dWWP1*zEGSzV-VBX z8fgaW>-&Vonf`8;mRt~&W1-di|6B9g+_R?te}}Bw^EsJg#_p;;=HI^gWX%up+^@(eXb5|>sQ=Dqrr`MSb?Z-3Sg{mk9vHZ@n4MteSy=l#UC@#_3n zes1SAZ#JplYP8$T(op4pDR#Dc#y*F-cCF&=E0UT;J!dLRZ`?k4y3x-SCPE<#YgTQ4 zk-9)%_9{R!P}K93>AlJiUEefjSZC-k#(_t_Q4jp}DAJa5Q7F`spb#lf1e13v8w zjvi@@7eD)?oc*omjHHFaKlYYaOpO2V!z{OZX;1F@&)1i}$tzNvp!U{bTV^v$$H5)* zizk*fnwXfsJ({>gohdUTeB$=Ti)_dFHRZXst^2I=Gsjrv`V}j+v#AeypDYdAuq`Ie zHt3>dq1I#0-k$e*++_>**jw=I(2}2+_+)zVT>bRfZPyP!ESKU~ncQSu>KXm_{DPve z=jn!(>?KvH*Ywm@|9ZN4Wi{`PQsvj1-bmXSFZY?Z;;Y?{B89KLiytJ(OHS5{_Nb8H z;NE8Os^s34sb;>G$I3QMyw6<2(NdCkpEI*~>$0<=mSx{&n5A#^d{d!*?Af>N`R>m@ zZS$KskLOhLT&udTVYTs+EGP9o)SvKvtF>Xy+B4Z9+g7rkd;NLtQl9;rlqY00Jhiy@ z)^7EOXHWKu?iTX6EVKUd;`LQo%|+i<^v(2CJ9eb4UtPa7efIZB<(seRO);PMSee5~ zrK(o#fnLIsZ;Q>jWTSZ(KkhnsI6ZmEi3Ku-`<}O^H-2td!Z&euh>88*ZT=UwJ=x5j ztbF)lX`hZ%_euGX-0f5U9(3Ct|J=AmGg|$nbi)+q3oA^1^%~v}5Pj+QU3PKkDTQ-4 z<}yBIZ`SWUqOOs zXYIRsjU5k*zBagvoew_gJ@ar)%16f=vu>EG-;!Zm+_Bm-=!Z+e$`wyFDk^3K-nWhQ zzU#I8%*D4BPk66fZ#vzuWX;6YAtv_Qwp!oXIOXrT1p+_y76h65pQ@16w&PwB*7wFt zf3kY+=~>xwJEvU{XY5w?G+igc>bCUaddG>sCZ7;bo-{4@W{Kxye+d@*-q{aKIQZDo z8v{~2Ei<*3ms-7GoZ0s0SwiF{BfFxfAFf;3cOO?cYy5ZX_P@s!mPx6&DgI@caOp+l!S`-t-0y*KSWH{ymUOEZtbU;t9<9kKAp6!?H|`ve}<=`*;5w3 z@!HL&!RQ#(l%t@lJ@=QPbKp0t|9JvM=dN8?X@2#E;U4z&=1nv0+#|B73c8LvDfqu6U^e2PtW`IPK9_1Ds6A5NFE?DL)Si*aUa;hf?N`?R9}Z(5gL zo2*ds(`ovZ$)A27WPBj*kj!`XYxb+Z6~=!1C;eG@V7lhA`;5<=Ip}L{r+>aT{)_M{M~o3%v@p~&mV2M(*DWD z*F&%Te4f7i()IO|-fqqmY!Y9*n!$prMQyFi?O0yt+grZcGu>y~_qcrd4=oGs7@l8G zWDZ@mb;;e^pZ}jr!Y6gNs(kyJ85bYUocccXrH#VZ+=+8PZ4I5~*|^S)FC6h*(!e0Fk zGxuF7-?z()?R(h7%x0?$(;16<+Ri>KDF3A16d*I_)0U9qM{ioiEXljIW1H@|a_PF1 zFY57O^{2Ea9xB#ZpkXhZ()xYwdc8^S75?n*+$6lVMJBtAy{mL}_nz%x>5UT_6&@|P zqOU&pi1ybwr&|gi#Ma;5I4#SfvLWpHT#fDiGQZD-&s+0P-BSN)(ew==lGol?h+MYV z$-YnU=kvzPj^0wv%ACEz?GxvEd@B^ST*kX(&6O~#VE@1EW6+Z`x>85;mR51UlAnK1 z@D1-f{+eR(x=-IWUD}@iukHM=>j!@?y(;&QSv>jkg?(CA#0x^zN++$V=&YF{|9i3P ztvui9(G71K>NB4dv+l3jdjIJIr4P;pj26>BTJ2Rn_FM2&^#Nzc3jWyVrd4w;tvlqs z(q8<}jziCd`}Q+_kc)dRy=7YTEU|)ZmA&QXoG1J&cv9l`e?r+}i}^dRvt@Ejc>VH@ zxEkvoqPQyQQ?W{c3b8p_pbbkky4Aby7lkm?Qn}Sq5Rv$ni1}G`?cmzpR%(w zR$A`%fuIbD2@6hq-9BH+;9F$Ek*N4Elb_5EaeF4nTI)o~EizNMwfVRXAHRLG()Fs> z_jvOn=hlC5ri|3DDhh7T`&Z{}cxpJ4; z-3ej`9^BnJ|IfJxZyzWLbY14@@Vs5|i*G60#N^T%Z@XP~5>u}Fz2dtz&)96qt?Qri zbQ>P-T~eam|EKT4(F4=qGv*(9E8X@=hzwYpYK`wnJ*=5S5x18_I*45h*&V*yRWKyq~@L7 zKV!4(Z&T`fxf)(gzti+>zN>`Hy|R0JZ@BiH{akjwx^8=6{MlC@yc^ETonySu^!#x` zzBKpOW}UCurhDDk9A5XlG6>K5$-d&&w#d&PPKfPabYJj{)&HVjv5%P-n8t40f9@RWUFyu%tWsIx;Y9?C1WI$jZRL zppfhlhhHK1yk7#P|!8CbyT85p7% zAix94htSLm7@?{e85kBY!Bsz8z>HvnG`?QC`UnF9180FpWHAE+w=f7ZGR&GI!N9$|2ho5~ADWk0Vh7WLCXB8t0wIsE23ZhYgMU$G zYF5WH7CL)GdDG_I5R)b&dA8rMjxvTx=!c(ocyBTg2d!h zJ42`zBq4OwV0$8Q+Jhtm)oG&-ifyFW2S))!G|0uxj>|?LoCrY)(vEAHc40jOg9C%7 zi(^Oy8M066I0Woiy1kJf{PVy{IwId?r2?bBUz|- z?xW=yNt|Uaf&rRIolR30adafO3U~`megA#-=KF8&6u;k@KELSv-tYhIUsv9+e9xp(u*+fn*&WwV}8 zvARs*41=oDZ^s#`@4GC|?5wuBBYWW71HT0IgnMTXs4NMN<2uJ4&z5d(Auk#Ae0lBD zBGZ5IpTcug+y2j4wxV&Ta9K#&2DV%8Yj#gs{`u;X!++VddAtz{sLFMcUuX~SDSj-OF~Lb?%%fAhMqI3FLT*O{*`}F?eg;ef#Qot z^`+eZ%%8Jj+HPmPE1h%N@^X2bulU*Xetwm<Fj2Y5H;GyfK0SNZby{{AL) zv(|do6@`A@`jz{qi$9afiV;8cX#|gC0nWV*yH}GLx<~J#6MlKtbM99-$LhPZ}T$C6|bF=t>l>BZp+DLsWZPJ zYVlzmpP|>HB zKHBroWzJRY-1JVxjP+CS^lO{X)o=z1K?O zf&C!{n+-eqi6g0>2rn=;Di*mJw^aYEr-(slJ5}x)k;IYcYlLgibN$vY7X{Z{@BIWx2*P=cik~y}f^T!`%bxd~3W9y>7^yv|prf(Jvbd(K&rQ_tkS& zPCWXB?W>LDyN0b@k^F*e`q~TT&#v7u@usK;yUf&>#w*cpYo1T4v;U#+gX>r@UrmSp zf@2GJy{cKT@Zj;#OYg(JvwmlLxY9T+)K@NY?#X?rU#%wnIQn4Xf&MGgm2OWG`WAF| z{V59%zwpz>4OX^tbK^WBR$N^CE8Kl%!>rw}^(B@xe7!!IQOG#q>1@wKw;1or>258R zIj}S(dx2E+tDQwPLVI{?c#;ibJGPk!lxF|D=Ae1`nD;@&>BnvadDU%*_~GLwX|G_< z@ke)u+=MstpFR$FR=V`WjeO~E@mfV+7Uk~p>XY%U4l~hPWdB)ZzPdllai-F@{=2y@ z)~jD?WcT#lSh*oeDxqOr>g|^AEON&@zIwloJNMyreYk5)eTB}B=)3xt>UsV!Exljy zIw`pGa@+jtH{*6o3Evm|A@q++VAhk^<>$|RyIo+qPv}&;kmU9+FJqL>v)^``dE~15 zwo51HwXa^w$hLG&iO@aHKLQ?qnQxtzt+~pO?fg&RW%ZK$Bc;2to32R~<%cC+uFGy% z@}A=!uT$ZYCD)T*Y~J%Yz<+_g+Fz@J_7}5uBpaT4B`@~5AWEvh;E8L6Z~@ya0y z{s$FYe$i1evtjbQcH?Ud%mMRma{OKDVCTG=z4y(+5bHP5nz8&JwtB3We7^eX>X-$l z4v(T4!nyaiO$C%@@BN&T-^(@tUe4#p-5--%paAU#KXRm)zl)JEdsCw1sop zwO2BV#LZ*p_%GD*>UqZ#UasJ8F*U3U1jRdH=g z$!gW#Q%_z#6W^HbKL5z`K8e&dDIJR*H{>1EV+-0F`|_zyZK;6q?0KGl+)jDD=-QOk zt{3}tY0m=N2@3moE7VtH-s01+pKpA1_QMq${%uJOYV)yhS^rOBho|v0yW{JBZhT|) zEPIm-*EzE<8ILAyP87c+VANeVr6MkS&Cjd+k)`{}rm5G(78sl`R=BuwZ&F8N_LG?# zp4fAqbgy&zcX`nXt^M8y-Wf(cdYdwJ&sDzbPZ$rc@N(SvQ|a0I71c5yj&9lLGuCX(i@O!h_Vu;#DtX}_y_wd90_#t1TeEtx&*8``{&DwhIBWOL z{4z`W{?aL{=Dcn*IAQOwb6r}U#h=s-wgm?4ye8YDx|r)a=j?s(xbXX|f2&hYE&p<2 z)x_+8ecNjUD;hFA4sU)xIcM)9mrojR1-)LqzWqSvL+A(J0>vMOAB;E8SDx;-qhZ3u zyGNHDcwd^&lgGM^)vo-$m_^#X)hD<8y1o8=dGG4wUmhMkQ9eWT`Y(&}w|8b~v>Sc) z``~(HX^w97%7fQ!^y{W8MW-fQb6Gx3fJxG}L^JxS+qLKk-@ZEkdVMWVYWe(EOYh~y zdH!N4;J6|B<$v#0)g`)a_cEK>?{96Cm$2cJ;XTJ{dULtw@26$v=jZ2l9C(sC)#sXx zOenL)#x-Rv+nMSd6jWg#JY#?wt3&!7cU*!H&w4c=WV#Ef=sGYqZHDsr%Uue|NbmzcRWRkmDKTer0!STf{5hc6?HQzt42Z!`|eAmHGdl23pV8-~8XCR(;*WZqwwRQ$jnnEX&p2 zZ&onLc@w;j@3j?wZpl5rhRkd^z6%VqdW3h?a`75pxMSbVmAcz`$15*)w)Ed++AcNa z1zH?mt^Gc^bDHj0BX{k$RfWqH?>kf1PgVSxtsCNY!Olv+o~Nb8Y@PayC;H;gDsS~m zpNi*K$oaW`>%aAqm5WrI*q@{*xXuKnES?Md%G#7x@8VrrJ9oX0TCa`u1UspgU$W{y z7q|G?d|lXmzP7z#6SG20!j|nKUKhx{AtT($gRv(yoQBE~1^>pg)1$Wtm@5{W9n9h9iR2yW}2I zUhLQVlh1`-bWE9{;!>tQ;l`o0o%1=Dc*=b2J;l=hGs_~QAi%HEE<>brhg5sXfi*>{ z$(`PFzFhRZTc##^<(k(M<>~KF-eOeym+`?=;1h#d-{d`k&cCCqKOXmdKk=Wy^`B9a zllI3s|C)65b=47nrl7n3!BuVI1ykqUV+xpF(dtxmoZC}{(MYr!oJF_}N=8V`c zUVr~dS?`>%=ImA8hpT+9Wmm-nc+DvYe-s!MX1QtFlAOr?3=!+ghb2_9*eCr6JCK{G zyZP9p$QdspRQ7-PV7%Gc;kT|@VfX{n`VU5(A8#H{tBHMS&$%S9RC>17{B42vpMRU_ zcVqI4grl!l^=PzwkaQ^e+VOE}&pz+HTeauM7uKsC%dpPuzHqR{?1cOrrKpti3uenr zeY5@V>Pi{ss@Xhjg}3LvTrzoExbl+qg-3il=kqP`Ikfl6r|T~+dFGn`cDV5_A#AaK z_A1{g7p?d|@-wWg>%4n9vf}KtBaE8HQHQ3!n6szx_}{m0JpUX#FnN2x{>Li&vsZl1 z)cMMi{QuotJHdDr_jkE36l?YUoOhW1(3{|P^HuuvPaj`&{gOWGGR;n(Bd|f+t9p+A zo%L#Z3_)|&OpmHL`}c6_skddOu@_E=2z`kAu&#H@{L8ZJPK9%xhP|62D{{)YMNg$D z;D~zO|106voKNl@6S?%?M){qS4PV6T-ZzaQ(|<>QbvwD~P@a#KPVLgiYad^os~&%} zEvr>kf1$Q3&p*3Q3U}8nGd=J5=o8D=;`x)0oOVc=UGlU!H1g}K+^eBae(sF>duMy$ z`D?Y!9eJBf|FS=tv`wH|L-KTtQDyx!qlcRh&e8b3GOO^C-}1*hy>I1fd}nEI(q~?I zukUM-SX}a!JkL|*6I+5!Lw;;M&wXUB2_MrszlA3ze6d)_7WnV|rz z^yXPvi`RU9T`^Dmb-cGvs_GI!_8oT@3EXF&!{lV;XFK7fyy}$%BjxD#CLa!*I&tOt zDhal?R%TXr7kQqwdGC7eD$m5lZvr^BGyjxW)crPKk8Qq%U9CcXV103ZYa4JJT~OUNjt?$yv_wp5f-RFV=k9-P9^mnKo|HUj0kM zN=b)rg56oGCAHzZul?-2&++5WZsr}1PZakpi20N*tK|OW+xH_&>t?@ts<$sqsMMw` zFz*oWdCr$1duQEg`f~ap>jE|THSV#IAu&^a%*fOfn739~xSs2WB*#mO*z}uMUhE>dz0)} z8{|qi=`*fet(<05Q~PA;yH#IRjeJy>D6gwqYTR<2-MvA+X;#e1U0SQxrQ5XS)a19S z<)ptav}Wu-QPa^QeJS$Qw@LP1D?VSVt+jt??e6#JRd&+P!}(V>(5l4%=H%h ziDAy_6ZF1`MOVG|I<a`I=?Nea1iP9HpjrrflDTjZ@Y&W%dd88prCB z@tqU4J!+AYc-o(O)bE6p$He=x4soShg|B#>unL{W@iu2(?j79@d44C$y*^d55~sXw z{;~C~$io}QeDBWLAbW$u^4yWcdgBF~EE(@8bE&`6ZV#1=xmB8~Rhv^%ntVy0Ig<6) z+|Fp_iIaW9WcfGGV?L!HHS1g0pAT){VtBghICs}o`&@LA+}>{bX`689v3%dQj(c{e z1@3dl#O%6UeRP7KX=E^elFhsSj~ymkB-%Asc`3hK@#(tox$p;p|BqyZ_J6v{e?sfw zl9w)@Wd(w!7cO|xD|||M^5U;ooef_d+pu-|w=FfQJyQQ}Uc58wM}I@ed!H)H?)93% zex5t`ew!Ncok7Zvy@2zpVb?wFNZ=LUXuY{l2*!AY*Y&VVbJ^g=dIM@BZF(v-~6wkz4yBhLe z+Z_4($zxUO%cnZ~()OJ1^AU-h8tZ*4-ppmkx0~HRRLm1D@nbdSxMLY zRxqc1@Kf0rE8>3V>T=VLC+D@c{N3VOQ(a)vu_n)UvHc=#w^HeSmnv8@{vWaXC>kmH zaJJ{q!Xv83GjBX@O;u4}c6){Op_RS&L(*kfvj5NI`e?5Fdh@J<-{w!*!hHWpuTYF{ z;{TJ~533ZPmM+-GBzMkU=_jAn#h+I$);Hfjw@Z1;+gH!+FBDd<(P>vYESXThU`^j- zlamo&EqM0dYO~tlJOB24W*dV_rG@`L9Meshc>Rlrrdj@eefD)3hmRdHx;4*w(Wl)Z zhqgX%(c(G!SO1Wu_mA!W<}=i>n;a`lH?>~Z6w+iIF~zaOck0Cj%{lH?@-F-zt5+Bt2fbpD31zi>@2PStr-vwv~!_Ly?Ux(R>mHZY%1SuVTc zd7+1#d`^;ZAHrR2Wdt^&N9_k*crGYg6j(8R zt&V7n<=i~Cu(FQ4ycvhSV5^CgzaMVvPJtg#w>uf-#x zO-0?de%5_=M>fAMXi26}Z*-`)9|O5)1V=%D!+qGWY6vmY}$K--5c= zKddy`&c%OdV{iYid0jWJt21jJ|GD?dqwIIPOK&Y-Is4?2FX>U@KYrf{f0BLcX6KiS z3QN|tz0^*f&i!;^;kG;O2W)@+cDz@6fK%Z~L{GB#%J~6yuYx}%|58Tj1^wXq zSye~HIR1LQ-0UEwmVB!$r#!dBcB-N5>B)kN&g^KZt9s(I!r3bN=FT%lF4I*{M;`B+ z!yNNB?iCOF{cOwArpB>p3SDPbUSp^VDi2?*&Rb&q!RgYvy5Gz%uOBeXR5vzuSD8Qc zi8BB3o8fxDFFk8+n7n9m!|I72Y96S(vuAk2zmIiFpyVbYVcBl4_?0Vl*15Ga$-daw zk{5XOU{mMqKa5LyHCKQ8{&<;BxOK6(!1MP}=?xNl-%Ok<@G#e+?^(Ldc4j;IDN`qI z=uY5UbDQV241bxk;{3Ml{CBK&bj`cWz`H=XoVD`4#}*sDn!ZQvjJz(7KkYnub>ZoX zfE>?B{bow@<(cMdzd!q9Py2B@*1lp$A3tjpTm~HU~B2QQhmFBIs5!2FRTyt9XRRxIAr>( z@|a2eCyxAbdsM#o?DdBE+Rn=D=hAmN9czrfcIUt0%fmZga_7wraxQl*?YUib#9g)W zhW&4?x4bc;_ZhZ@usM|6be~}HvY)H{qS|U74d1ILnN3NxYm2)2E>1kJ^6%8c`x?()Eobzax#!s3s#U)& z=I3_$Glb7r-q1aj@kig;>HjkOmAF^#eC`q(r#it-{Eh!g+XFKl*eC7(X0Xoq*uu5z zb-w*RdEkDv)U@D`N3P{<&pb~A-JaR*9jp0u-R%&MUD1%?W}_nzC$Pc~Vxyy&;|15Jm+U5dvyoRpgR zWTB&_-J_Zh*SGBC|6x;j{AA734Q~P#%}MQE9JKug$4mca`{kd64}5n}OQ|e-l zNbmPL<5Q2-4v2o_eqgsHyu^K8?TTDeKgrwPw-y~<@yvM5n+w0o7HGfJ`SSP`d%(ku zp-c4+r61eyX79+VOqj#rP=$=;A zetfs1zRRqi@wOXZ?z)M}wVlF2dyIRvA5Y>fDROFECM*}YTU?LNP5SkI{mEa7oUAT z@HOM|+AX!GitmzQ&%l7^ib944_$+hwDv#$GcYc^j}y!u4N$y4~=uHG`e@p8uH{_AsN z))}=dYQJ@^x|}UOxO|Eg^UhL9ANC{dIq5yiP3M%X(JM8+p_OF+BZgD{KI5~Sn-aGd zvP&sT6>JX-W4Ltg-tuPgW?#p+n@_e(TC?$_Vd0y79CAGG+;`7kcGlu(ld%80^&A(M zsqaZGcfIXm{*!_CE#E)=9UM2p)n&G?jt$f7(p_Y+<=d*WcLn$Kf3stFcXdji?CR<3 zN>YOhVs?sc5oQ!i`KEg5Lj2_Sftxo6hbMd7O<$1me@>%uJkP52Gkf(r?M`*)l{`AR zVfno8Z0ZX-lN;8{T-mxq?1fR7$ZMaz!>n6o8)~UvnVapuQsJ%j#~s`SMgL4IWHV)- zY;`!k)9iwyTCC{Sn>X$`cg**h%`SXT&LcM5w7k(?+qA04^r9%2z$Om27hE16(_%4*!X?&3I4_jzgDLD|I=7FIX35VRcz^;qUpiu)um1rqOrWQV;`G* zUw+n_dHPqI3qrCU(~6%JYCk-@ooV{wvd7ZK3)#c%)&6|ibXU~j?;r6Bn}UG3ABzhF z{!TUxU3L6#VZpZtk1V%cII*;+bmmGkyN;Q;#s2Er$9#Y7Z-`C{U$>s|^HlG@DXi*N zLX{3Ha&Jwux$;qCPo3Y-_sp47baU1p6S|%%+RJq5gz&6gp85x~9H)6rvdOf*&Zz1W z_x{|ma@}2F%NeG|{8b2fP(EWl+rOO^rK|f)On6h5dLG_vd;2ca9;TT!7vGBeoO*F) z{epK6VOd5CZniGTYlvsI6cn+Y@K0drJFa=WbzEn{m!0r0Nzv-_TWj&ifUWR~_eAyO zi(~&LM&4td8=x97xj?(=^=dm~$)I+mYvFtm8#>t6KTM z?Jvuj3{^@^)_p$ekZ^J4rFjdFsk~$QQ+lNOU|+AZMtq^$p_ziY)`B~e2eOK|WzWterPd>?(f7*3LJ|b;_aFFtMIoCVqcGd6;TXZda zVH(#zVP4y*bQ#u@$$KaN(rRaX@$lILdC%RyY-Lsm^V+nT_-q%6b@@~fBh;5HvhB4* zrw>QJ!n;*Jj0%{K8S*{!uh%g*zI4HH&c(yZ;fvIj4y=1{#BG9&`>O7#%O16u7@6AY zoaAu5e7-2^dF}VdmnNlFZ@;yAd8C$$V}EYZ-LAf58Q-s^vKd!qFFMaISSPrLVaMzM z|5wF#ruMIDZLgX-zlJAP@QJNns?&sa^-brQ|1J87a#rh zK;r}Fv10yXq3Iu{ToV4=W4=AzdCT1R2{-Ic`rdOq{hdjl#h&eAx7CbmPxR%>dF;4X zrJpRE!F4p^*UZ%HCp>yP?@GFHEe-s`Aah;hUWC8P)%ncJ9e?aQzk}`Vt3`ds6e}|# zr1sV5v9>qV8XR%v{LbXwaN6lj%(1(zy`4|9zJB|6vkkJjzk=>R{`ZLI&TP$_ zcD%p#y!h>E-)KGOOWuREy$Y`!X3se$X8P?v@2#B;W?NrBF+J;RxS-Ku!Ee6*OQ&9W zdbcN<_2t_x=M_zCmX+z9PcMIn_J7YQxO-{lp4+P`S3JMo81345B$km|@V=l7r_;3a zH&pVkT==;DK7YL1uYdVFEy8pkA-ktb-vci+<9E+sNO5 zTTuU)|BII8ir0i+?Dd?_;q*z;tWVQgV~V@(`Rg9P@1{S|+%NA_HBGTdM0SbqrB~11 zANZ*da(dpLb%}Fs?9bo4{H=iBQNig^D<_qg-}-p?y55s8&tH5$N;(yjh0ir#G+A)( z&Z`})B|0&Q`&eq~zZ*Pwxr!}eAHQqehgd#ckL-?ASEcvH3HhJCvC2)ExqkAg@;hs% z*xXsR>uj)}{m)PGyM9C+o^LN2*>V2MT_vL*6CE!y=1%YI+@ikg{ex+fr$t}QdD=Pc zUw_v8zSdp4?S4qS{ZaFVFEz=%=kUSps?w9*-Q@1tbX#)U$<@r(!glFOGyd0}XqsGUE6c6+Nc>n`_J7Nf;~@^oDJs=$`EeaKyys&(+aiv&e5u~?{`ZOIgZ>RQ zd()#Ovlq?vjMnJ$oAHZZQtvobgEbi5V2fca8*qxhlA{oAj$ zip*51*DwEJTK4wyGxnGFZ6DfhRCb$j$;QXFt?#o%LD2L_-L|(ucnd>${cq|BVlue`o#4 z=lSthcPRaeU7c*QQF$Bh3LW8=e^Vd6XINQx@AXriJ!$LzcyIc<<;1VxO1Yehm1~k( zKE&$F7wBKP@L&pClzhdHGetT#4%&Gix$QhX?%a#;ij0o8+d6;5I{ZyEIjPkCsmJ@; zTKgWm)-UrWPTO(5Tll-`A2;62+qy-O2RW}E-`rTg#cLJ+zADSZ>m|2u)~r%~s(6Mk zG2~-iyquceW~1N15B?`j-evXBa?0H;E92AN-Y=H3XFJb(mD4nW-TsTG($Y%zt%ec-uLO?2kSWn zI2~O@AnGF(~s30l>hSN{?mOs)lTSp^p%s_3k>91Gwz=}@pehy z5AOnnuklwt6x8gpTC{EbAG=_ylRv^w-ksKeW%)JEl^Ta_7Tjyvu_XA|Nv~r@)469= zmnHden@&)!oqMLap`P_$;L>pB`QA1=J{X+7sxSP|i7(jiX5ZVJ>)s0g7pyQm`$y7Z zQ>I^~>4|l2H$$?Sa~lOE7Ej&kE@d=6m$uug3dDj;&^&YD!<7SuyXQ z@SUlSRaQUtF|(G~)i0aexa7o}6`A3SFG_mmJxV_6=uzPRL36>x&KqnOC!Wk*x9u5= z%3b+6j@9eg%@^+d)IPuS_Bo%F&NQ-<~_|czP zsY=e;?x_>zE7#|r`ssRR=YhH<{x0rny+O%W?M(6>`?Jo|v+KNYb%lg&ruy=8ZaH^7 zPn2C&`?&bQ*YCXcsV`o2_-%RhJn+LO`DZ6C#~uiXde9P@`Tg_a3H-MU4|%d>O)U z%O3P@dHH(zZvp-HPQ0GkH;fg3-RP4n{Qb*oLg(@7!yb22Y~nlL%szPhZQadxdf}B5 zg@ZgbOpb%X+*g?E;VeLaqz1OC?2mYhIlGb~P;WiOaL1ipwX8orJF) zGwWRO>Eg936Z_t#Pny5zYbq`fT*^Q&elUw%3;BkJAM|EqErA5all8)>kgJQ2lVa`j4sM zPNzd-PI0CRxt+c`_x|f;jXZHOo1@om4c01JF0ZXRvn?;$?p6%H3}4OCjq(elL*h$+ z@R{-@ed`K%Y_V_O2lqpE+pR2j7?f7pU0JS^E#ZBE2WK2yb0$j-Em^M z&STkA=epPA^B&O*UnKtNn~l@&;?ytUQtyv6{Jq*F@BKWvIkKko@#i`31MORR)-z4| z#2dZfm66<~JF;?CA07U$m}_umt--4`&ou*nrt}u5vU7ebzQtkkV3l&r-zDq~!3HnP z8`m0S{SVrHK3{vA)}i?N6Q{l_J(`#GTK}W)BIc9nvFekuoBuYN6qv?5XesI1=Ka|I z{ngiR0<0FsPxUrEA9wE0u8mm-IAeR9{hr+lElabyBiwkt`#i%_et*GTu2)|y_xsUw zzCF)-F3-HnCKrzGd)@jX|G~q}3(xIdGRM@JTUAy)=hj=1ADNRvxG$WJ+?zc;GW+Y2 z+Z&><{oJB1m@boUV-geYTApsTME^)U^B?sE|7vC9zdo^ze>45|WyOl$p}q5y6}MN%B2v{wDT5{m17!_s!zjPgb!^JemBpk^jhQrJKhtX5>7W zd*iC?i%t6b?#Aw1l^JZO|8m0ON#8PS6Q%n$$A9^8^=zWT{#V~C3s0_UUi{E2%KZ52(e3(=@AI2D^#-?}I>>!-qNn=g_T?+)t=K0}!4-UU(@1Z3r9 zH=bVQv{6;_oWlIvgVh=DIlM2$MIP+&Z|ssk@OkxzPu@~1yYGB#-8(V+b==lV-_>^A z;N0B1V}{W5ElYQ~Zd)|ted&^wxvW)hj_tC#eQW-HhJERumK)dAJ`DV*bI-U}^$S~= zrt!Y_ckXoVSo&L|_KvU(uf@&R9eq>vU+(t%ArkAb&f*hie{<&RqrRNsa_{|JPVmm2 zcK#x-v24zaGt)jQq;qeOj&S*VXzE%O-d{@(u=>8#C<=V4`tJVflhWIK_#c_-)JL?x z{&gz%f60;BhWPj&*AM)8d8TWB`l7v-fA2X2R{pNni4mR4^PiXXujPj&mqm~2E`2=v zt@Oo-o^m%I+0Ebh&-m8F=Uc>E{SSYB&3j+(Q(EC}{?a9^WqS^A3PwCH44ZWB6>I9t zn1Gch{TFOpKJo6^mj3&veRn@DT(#x4s*f!DPpbzr57ZYFO_(Zed3TXtblA=FE4M$* z`MRK%vH#E2o%5wYoJvRb@<>lL}XaalJW`#rH*q`gS{LfwHvxgU$}{8kS5$owPL zQ}*dwuZ`<%Uw$uL;s4?H^FyqDHwt|2J)ga$&8FwklJcgX-+U9N8W?JB@ZpHPv_3;( z*0B#M$Y;IRHD`H~?Gx@(&NXW#PMyhYHM!8U)Jk92F7vZTkE^}1i`YmEq^)RW&7tfPc63W623Rf$xn!^dmi$DN)c{aQ?xzkWNzC5z2VniG$|ozJ|R+d}eQK4Wy2L}1ZX zIoD@fgrowlFIW@sVz-25W_(+9*Q-}QgfG~qrIap`_`$1LyVuWjmpE6xdiQ$MtB;JE zcSIb&JLAbJ{iDn3flHc8FbFT=LfF@xk8uSBIV- zv2IqLEhb}}TQEb`?C5O=b-mTOvyCg4=rEl4Q5-S%)`srnvWNSMgIBygt)$$%)BG-< zhx~h1<=F2IGtZ?3@$8!}^*@TmZQJ=nk2DgN-(@=Tv9r&m(Cz1`WaAH657zIN_n7fE z|Nr{k?t$BKo?QuKz9rjXY$X}T#J6ad_HoICiEGOe-u@7~{W4%%uwaUoa7nO5e~#6! z4R<4-?4MkEIsEa?#68Ol{-jK{ToDs{Jkq`S+rb|b&-Sjg5l}YRcX6GUTyFiE%;V>N z3&>S=_PJP1wTTh6Nxpa{X}UyX|Kal z6BBz%;-z+}e)Z+ga-KJrGcJ`)>5Fnxd!xC@)Z#637r#7bv$|>B4XY@>r+;=mEcx{z z=)wFA!54$(Y@9wTKHP`-#hv3!b1%+k_Vj1XW1Rb@{ic#@*p#H_;ulW2`g)&~zP91~ zirZ$bUHLjM6-wsq+rHfEeXdqXWNy-l?F-H^`tIFyG~xrkIS8ZNgKmW4hP2n1@ z7cO?{uR1341k5>eH8fS0$;P!-XyKFJmo3i*F!yY(&zhGo**oLgnPo2%mrvBzP5j83 zva6|W-(8buN?T+q}^#YyCYks z?p&YTEP=aEL|)w$x8YmCBYV+r*P>qUQ?FjVx_0Z}J;oo`5A>8^w#Fi#G<3ix2<`_Q^v=0r_JQc`+$RgcU(zjD>5x~ z-DO$9G~rT(zUf2JnNtowy%id$*su0?`2&sx%v#O4ew(zcUS8q*t8qzAWW|e>zFHq< z1()+4`LO$XMB}7eGC9f2;^w{@w++;LOw6;Dmexo-O{Q^DTyN3VZc=w+ zt?+t@i*EZWG~Z6B)9roBbB|@p?V8^YyzYi(ip&jO+_>|c*sLbL8>xY-vbWkb*yn6| zAxdA zc2|)0?G?ga!F!7*T&>?LmH#AH~jj~W8-Nn`(w=u&*$NdZA+che!gmZ#q7!a&$HNE ze=fUNT(LH z-NC%WNtQ`{si}YOoVtL&-EKExukE?8TKPd~#qIUD2jxS9+|MTn-k^Cnk!>pn%_4Lgp_0#-Hzh_6j z7ya^`IU)VlXK|*dtK~0APH?mdQ;px*@c51Y?kQjIJqYG_+>$z9=Ci4$bLM*C)8 z%$QR!BQEIqDz^(4=S*PaWPZJ$sYWs*Czkh`=mANG#{bQYd)aNgXZVdAzmglYS@~F|Gkgx6bnZs! zqJ=M*Htj2Ynt1=}P4mpl_w{y3RZsHXV)57`nQ{I~f!yi}(dVBxCL0$>oVokaW?QC; zm4=(~)VAw}!e4@4E5`4)I9K{F$hPNk+_gJ8$#$O(B%8>UWH_WBc)`kREbY(id+mV2 z`AJrf(jR;^sCX)S-)H{x5{3!)HyoAhcUpJ5xt_^S;@N6-^*M!eF7EmiU@!IgYvb}W z=@-Ad3;fzMgSVl-~BJ@PwN4G-6`Qa7c(y^c4EG@ySu$) zbzDGB@(kf)_vbuW`pEd?o7B?%SrerCZwKwyp6Y*6`HfS(kK$?T9seXhf3iRHaQbuA z&*^SkqUT&>n|SoOqJ3kv+R5F_ztuH2dzFbB@I_v)dwGKILEnSDTgsJgwC?zIX5E3% zV%LssF;#P2O7|ssEP3yqyu4BQ;I#uAJ3sRp>vZLnJeeN3Vy(=k+{<6~SzHnDJ#v4O zP}xf38LCVo?usS9i}WVg{E%p^`Npxg`Gi>J#2wntRte<(ZoYI)u*06|$Mw0+@7S_# zPPX^T_&e)(;FA35e8S&VLXXdvI=TLt=bv>4?59b8ioDrbAoOW(QN<6PH%G)COYhXb zlB>@6NSLb$r#%6S3R zmfY*}elE>#zLKv#qvvcy;?WO{+b&$#5UKc7NGlgDLrMD;G&_Gh}1^Q1W*168@Y|CNl!(2~KrR z{;1&c%eug-hM)O*^Y-{H8b8j2yWaYC^CYKI{M{IbUzr`n`2|cL3{L*j+I_zI@r34A zUQa(SJD+*G(VU_5!vi-q_CQIi+|@elHWivys{7>soMUirn9Y3L{l+_!Hw+UgT8TUNj>zs#0jvY1N zxa-wwq~KZ3DSM(W*>2*V>d>|qKKrB2y;yQtYvPXEd&C*#cR6d-3OR4zXT>qIPWVK% zCVP-&$*u)g*(+~1l{e0MBA&eB^K!}i7v>stpRMb?wB>!GRWJXamQ7D9=NFvxH2G#* z#__nywZ`V9iJgx}m!2nIM*Us$N#&WJ)bWADn=wAh3ns<$vK5 z|Jf?+E_hy@`SpomU*4M6#mTQ`-+RFs`@TU)?uLfaw|lPo^EU?UpWA0_a9E1_{O*7c z*A8=)?|FYo*7?hVhiwl+4>WhT3;$XaovgU?!_2eQ+P+)fo~{dDy-7>hp7BTG4td2G zmMM1+27U8Ub8%nv!l8ZJ`d8P=YmPTFcg$zG$Fq$^?!ya%ZP|MZPngZID3bWb{OIu~ zspWsSMyOAoF!}zn10Q9cwe)Ro?|b#BVnfFxgYG<^34)Gub#r27U3+j+T{ei(>ep|B zL;Ovj_P;Qw^B1h$Z{cGZGFR_nS=iG{`Ir7XanD=u*Z7C1LHu!z<$GHmPe@*t{6d9q z!|Hc|3E>YMxcU2!UES%ou4bE}9&0}%JM+okNsE=rxZWsa{qto}A1T)E{v_lxKSI{z&;XkT8n zCw@!qt+LQB@=3o||EqV{clRKB!;`R!SH0Y&rk4mD*RSE({HX7Au-v3iFFXFT{ge55 z-|>gA!rCJh-z?U@&8|tcKeC6n;EhakqR8$40##o&9xM@C6=dGiZuqKde%YyQ7d}~= zO${r$P~u{};^MBx9%AR`)h1c6NO_|6s-hFlvp+CAym#WaNr7PDN%{3&kGEZ1y_au&k9?NK zbG}y(EPcgy{pjmk<+q-}a*F2txn?$A7g_^j>mu&VyurTtEJvQdVI=yoZd~N5~{r4=;|B&XMWF}yPS z@iLis=6;7``&r^0(!R%ESM#6cvQMu4YxP-`e>}T36!0s&cpB7KJ2@>z-{)Qe+NX*h87NI4^_nM7 zSl#f}p_(b&Z>^^OT9b9V?&v4)2j^$jFxH10K7BQ3(m(SYE7n&QY>V#I@y&Vocj4FH zoO3y-yugpAl&oIuRa2D&#V2?W@a$o2?Un?x_&tsxaMQ$5ooD5+#$g^q2qS?voKthU7Gr_ zWWqmvsTD`>96Qw+cO{tTWyT|G#pA0F=r0z3^zT=^rOxg^pdHIw_!enD6}CB~XSew5(SQAp%Wp;g+->Wt$Ev^R#P%TW_9AX zoSiqe$mi_2&XchqPj<>wh54LI8+pIy>1%ur4lcQq{Bd{l^`>}+xrcAwo_tR4kH)r+ zkU4HEgiKG^v(I-r_@2d1|JT#gXYT1=TDE%q<~8-Ty)UkoGro6L+rFfni7#pT!DTlb zg2G>&seAoqdb4uF`{4d%dyPH{=vy;=dVVE?;qH{lrOuoB*yK#I%x}61$a?h6{WUGF zy{g~HUvyTqcK?dL2IDpDE>?fT4)|a2dnJ0Pnt?(3ji-xa2y33JtOI-X zrNWc%7TQVN=rxaSa!&P z{mZ{4&9)vZWU}2CI6ghoKRNEE$ftq>?;Y+s*K^wR{MpYG&tMfWN5k7LQhD<4($wOm z1=FlW<~Yt~7s{IZY`5>`wJQbo%n7~w&C>YR{{P;;OdhP}lK+t#JZp(>sgnHdOBsIb z-X8#NIg5=jHcPT{s+ndxIyxsBXFZT}76R+0kByV?)O@II8rO+dPmg)=b z!W_vwdG+cSXRa~x$U1i8xX_|-`+mPyF1OZqBn!q)GukN2EC2QcXZ{QAd7f;wmYLIH z>)1oKY}Q@LW9{I6s>|h1xWnPEcW0gNowT}bvyWB&y%j3_Q|IWOn0Lf~$=&1wWv3WU zy}YK;v+{MuGk>mKU-u{%WWQ~BWW0Wf^NnprJ>K8qcl?svwfF1#+Wo8+ojYFrI(jZ3 zdBHt5&lksKz1}wHXNxSf+q{71a&M~aY467Vpi4}%-=*sATQ@~GE!&jqziPVll*b1f zk4*{Q)9qQ^^s4>he3omQWv4DME_-G1G^=R!LcwTz;SE*x$FP8j!i%O;EhRd*n_nAbPOK#N`$1vUOqfW>HGTo zTSVo!XXWv9?h}2iwDaWigMT%?WPHdKNS|_lhudny@LTHdKi>HiY>@7@efG1{x6O`S-D_j?;?obU3Xa@go%8k^Uio<@ z|EYrAay#CT$5S^}NxSmpccm7+UTtddQqOC*?Ign={*}UI_rCRKb966Rc+q0=_jNg3 zIxhpdwZ0qW-FY%SGIOQTHpWf48rniHlQmy&{FnIP`2o9^6SNW)^xx^aKTMoI=WH3v zze&G@7v!jBZnt30j5klY9hqi#shTl--}Z*t%%7i5?QD8+BBlD9rcIs8pPdKRK5x&^ z*Pj1N)9TT^IloLA=FM@8U3z7r_0+WoPl{LzWa#%@)~I{9?!Etk>jy6%JYnLM96RIq z%epYpZNaAlU)@=wdF5nbKth-bzwIBf&quH9m#zputRB60%_-k+9*vuJX1#QIwC{lr z+uPCyVOw4`k6E zh3|)U4sXD}*trGLr@Z8vF7&f%XTLuu6n?7m#lpr_cZxZ`EC2n^!OyyzDP6Po2Ip}{ ziS|Y6Q`cUqRjXBb`+{dV^ZWOld`$cDHk{{sWqMF0q=%L5o8vDQi#c`kvYNh~{XSFw z>6v+#op_J@tFiyhoxgDVTFy8Y8GX;+9ev(z?cLvGtE*)8>}QJ4z3^wE$Ky!OT|CRe z8>JgG5(BIY@8rHXvaIBhmXmB+#NKK0r7?^#f=N@<1?*?;VLq_=KyJg7wa&NRJT2S* zs$tvGMSng13S98tw(zs>qlR-!W~M%UU;Om+%jX-_Ud(>{toXRf>OE`R7QR^Xc}LHo znp3IDs}l?LN}g(!%3jK|{(H2eFC%`=0k=|zT!(v)SU=R6@7a2DVwl4z@lB6RG?~8y z&-isl$yIUhl?SWu&(6Dkrz}-^X3`XmBa!FJlk(e6u6vNGuzE(!hFezlg8DRj>Vh6mGUXyQ}|c%QaU` zJL#XHUVJ`(Sp1y7NxrRhxR<9KbN1M*oh#HWD-PLlKmH^;eTwVMC(5#{@7mtzGs{)} z-r9Xzc7Ivt#HmfjyHbpNEf%L8&r zGyB-0*>7jHUA-Pv?(%iTo#@8qgY%hA&h6SZwe#Gbbt?7`BlgeTXmOzHg$MhblyuXJ z+dL)31P-})d_JF-r?us0Y=$`Z!Q+Rgb*ghbWt4NCF8+e|eZSy6(TX`WmH~FXUXN$p z`1$bS)EsTLwHIsnZR9G;S?5pVEE0ddjel9XXYaq$p7I~hW>o)=+-Bdp?Nz5z@@v0T zncb%>BEP@wIsWfdd)%$bVV56YvS8xP*0$O2bkHLHP-1EMg5>S_T)vyOMql9bx-1zh z+HEXUe)`qsgR%|hd#zg7*1wsl+qsV8W>}cr?LVRwraPF8_V#YDn7_&CscBE;W~EzS z|E@kZ^?OG2g>Ur@vW>eW(?u8FS`{ePcH`-arW?>E|LtJ=F$Mq9 zcc;{4*=ycan|)AsTblc5^}`y!fPKYVbIbYdf>%o)FO+|3z4Le=nviBArA&-d!@NN4l97UKM~StGJi zp7)Qigd%^%pS;qbN$!8=SO4)&zuc%^{c4+^%N_mZCGlUIM0el1|K(@<5&21V0`j}{FTVG2V$ppc%fZh&iCKBt zVu{^cdh8}Gt>?YCW4AlssbBF)>4E!&g@x>Q?XH*VEB!4A*jCcw7h(MJagf!LTy@3x zN)e^H^a34@tH);SNlbj(@_o9Y=rOaHSJ(W0Y+Uv+YWd+Ol3(}jPv@QMlJa{Q|39hJ zH+3Sc=RY-VC_J=VxWAaU_)yh{KUW)@pHEvM+cNbH^V=5!TOIFB`*KmiWR>HtPfOol ztL436RjcqWo;`l6wMySetpd-3K?!pbGfFP)lb7;{;XX}g#DyKCOBHmRN!d*F2H{vyc(Gv!z=tc%`U zChb$>U%r(VAt~!mJ#27#B3CTHEy)osRW6xOP@!glOu8eZmfVwetLasVZ!?z3BSn zy6$<#w_JXAuBIy`%akW%geR~1y+QY7vZJq5>GX{&UtjrH*IeiLWa$N$$$qbd^Z1k8 zIZwXwIhC)BkMTfld^HE<(4V8s57lR&9iLNqmD>k(tO^J9P@zpa5us8$^Van&sDBzg)pPO0jd#7wjox|x+o|xxqQvyc zm6!aoi)S5o_k4e6%kp`*JhO%N9$wyK{qS<5$n6(P+2Y?m4(fNfukt@2;GB$9r7gpp zu04~#l)ApUv@xlpa%@eG9ZWT_l_j>W;YF~laOZSjnkxQoEkydXh4?DD2N^$p`o^RhjR$r+Vui)5` z_e5des>h<1VKz$^2R;h!^uC$(EvR|DmJ#1?3076xtBmuud_EBz=5{D_u4m@`+>pOj zsnM76Sr*nE_xz`^@bSdXi&fJbpEvI53u-GfH&~hX`qzijOP}302jwi99#ye+?)&IF zLG1O+x5Ax2slL^2FWa>0_AQ0SC1$H1e(gy2zH(J?^V|QKj7t3(-i;(Ab8ur;6`--d{8LlC5NT>PfFu z)eOb?7e2cDIk!!qaC@<~nP!{$!^e$NJaULW|*uxv(BH=oC~R;6VMDVM)r``~$>_l1n2?DE%s%B9n|78k#t z%l(aYt)lS$w7K(~u8VDKsDJb9@R6lY=Ufmq`hH*6_>y19+B4l!H)a@xv~XpLe9m|j zw029}xd*FLH}hJqdAPXgG}ms!7nAmFvZFZ}5qLsEsy>2(YLYux*@?uxxyUTQqY zpHgqdN5+-^w#rJY>`~pp|5XR=gPi3&TIcr0`0Q;)gV_}*;(9{1Ax6<@DssHiOt$y@*!$k(GY~Jo4+)}cu?j&;Mbxm7Pb|l?(=bf7g+vL6+)s27M zaO6GDJ$5I*n8h!2zP<`rymr23CiD!K* z^H=fI$+-J(&uaFzxkvJ@4YGbDeTnU--1Y67Gd^ASUh(Fe;wPc~mLGN>dm~jcC$Q9Y zD(jMizt)I&8=5e@4 z2v2W8^@m`ERO^f0y!&5utSn~w_~*+>$(p;o3`X09ISTu)%xBSKP~=@R@8e{9uNBPK z{r=Ql`gd`)(~;W#ZL22FFw)?8_)g*R>}K zd(Rx~42*Tz^QUH+BnNNSS$-BHtIR8_=bx{g&#Jh+=j*BYe*&F)x5WM3=dtVG%&E8U zhtA(IVd1@|=O5O2-%mDYH%Y$#s#sEZ&i$+@Q`f%amS9-feW+TszP^;fe$vR8Oqn0ZhG98`@_!h^}F`Z#ceZ}tohFTf&YL#dwjpLAF1IYMyD+iPe$C4L z2j@3-FK_e-t|^JV?f7_+IZu0%L7hbnY`}E|Cw8s@TSa;G@7;}WljB= zy>IHG;vQP^TW2t^iY->y!*`-uG5!g^G)tGxB8jBf@5NJYiEp{Rp~E%KvMc{k=UgGX z!d)L?Q$(hGw7l_rQ^5YmD)mz~+;80P{B-}yUy?i3-X&M~X}g@WnP#)+Re{W!Q&A#k zkIVi1_iuo=>Ywrs?T9aHJm$5%+IDqq zRDu=X){uzl`l-`{q-^py|MAb*_W9=VoRb}Ke~mu~1^nNVc~(ljC{4O5`_aE!v8#Sx zJ{?)(J5#>swc4vW1!sK?yl)i|LH7bKcstVcjNhz{mlDWC)<_$u4jF6wZ7%A?5BO# z9!R%{H=I83^uhE4|J$m+hhv<{q-|deidR{H3x>;$9vM@BM6k_U%%(yY-ifRDVeRQ2b%} zgLT6^qo?zGe!OmyZqhyQ_29Dw^{>;d4|y)N`7O}ry=^t$rmKJSK2C35d||rw>fGP` zUXR|WT$f9&ncDNikfop1PbXIG=8H*>u2%@uel<96xBe!lyW@4$g*VE!D!jX{Y?*P= ztYyv03G57?MDl9En^fxj6!yu?XWP%AxLzjg#Q&!Y?z#zouf4y>dBIk*AEzW|cI=n+ z__n(Ho^JB}rOMiN+57HKEWO*Ru`AZH<39HsW|jH%NfT6)yTmJZud=vdwQM1u0Y|Cj z>&W_BA>Xh1pM5vwpvt?%fYr;NtUoGXdHP5e$3141-`7IZUq$^g+cC3N<;|w5b*`mr z;Zq3V=i)Z9r@W$8S_Zrtf3lH2hFgca5>|7LoHoJ{hmTN}* z1(ia%d{JXik7J|2(7Z=|wffAFkfUe)~5%%sh5b-+^hk1cigzF1Ar<+`|1_V4Lz z-GH!z-U81wFB*T`v`Ju{r+bLrg}jNKyZ_oSwcNSY@1z;;SAUgxYV`BIxMvS}Ob;+@ zInQ|HJ=>?9(ifd7>uw8dTUF>{U1sxPtGnW(b!=<(Chd<>++<<-qTnr;YmNDbc!d!A z`)c_+4JNPh#RLi=S_joDB@qB=gy0}e;D1?PpHYen6P{;d;F@?_VO$lHl@ z3{R{VvKRYf{dfO_4FZ45rzhN>@^Jf|&F5~g*gu^ z0V}zQ%^B&d>`zrlt`?d-FtJ(g_k^QSIcPnZ@EyuQ;z*l|57B8eE-Q^ zJ3WE-UR#;%n#yYRweEMSPg=)xW>?Jqg=cpC70v8->{kBqcgeAUjz6yjKJGquw;@_) zzHuIJSW_L(<;@2&ABYr~ZThoh;={R1Ok;SfHQUv93#V?qdgJv*oBl5+AEQl|q1*XqB`S;%Eumfvf^F1*0t%-$O+y}omPHx%M zz2&|6%6Bqm%yNHTlx%0&&bpoXRaWr@|BJc%=lwd(>*Zco`j`1b!j~uKZ~FZ2+wt8z z;?{z>8|1bgQ@k9%ccF!ItXkozte$fpq~EJm&uT;7&^)<`vx1;M9K6I|47}NbO*=;O%mDlXIS%ZOOj+cBtIzD^{QWnY=kxcgnuDmi^=L z#rpmeZBvS~cLiQBnX>bs=Bh%C-=dGbZED||zsuHnnxnZVWQFpi^~S&WKA0UTJ!0GN zWaXmsZn1NZS}hLxWw7F&*R3|bXDzC4UT?m5_%-M0?utk2E)>toPB4=?z*zh4%8x%+ zPEY?(X}_#k&94M>QseGR7goC1gl_%+G}z`bNZ~W70}S2Dw+ud3H%xZ)a9>mJIN{G% zkzY%D&P~@(`(tg<-mpnjHRi*?qi5I??mdWM&SG%>l0Ci1!SThaA1MWj94~uTf86SS zOWyp8EXU|pl>QpTREp&M^1Qu&s?Cp;v!g$M+^KZ!g@CEsD&=3dmdr_+^!)ymN*)W2A544I`u`L^%G^6u zCi*sKj=DnBi|H}_?D-DgCRatKo{m)$`!uE0ua_;XXu&hDc};9m={k=^9;=>b?qzTI zd!Y8Sy9w&+c2*O~maro0Ic`ev_Q7#(W=Tgzo%{M{dcUu_S@9{l!T z+JSsWb=mCrRq<^5c=vIhV~Jnzx0oZ^iH(1n*omw6=D1J0a$pJbW|hm8&)%3cTzuWL z&Z;i`rqvRm0{`c`C2#QMaBpKVXUvOV&;F<3?yq%Sx0=4z&ih<_V?LApr*F-#x*N}Z zx4pGvN&%y3U;1Cw|3N>S4t+kN#Cv9L!9=fX>1=%uB7V&aZ2$7pr(I&l(&9}ni7eBlnK`o()v>$(^Jh*`0CsFD}g2ldI1HmL5s({)SRZvQ#RsoSq3nE%V~+9AtW U>Fa%kfq{X+)78&qol`;+09d8_^8f$< literal 0 HcmV?d00001 diff --git a/SwiftChat/Assets.xcassets/openai-icon.imageset/openai.png b/SwiftChat/Assets.xcassets/openai-icon.imageset/openai.png new file mode 100644 index 0000000000000000000000000000000000000000..16f0f81016a2aa6010050902054b51ba9c164eb8 GIT binary patch literal 4795 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 literal 0 HcmV?d00001 diff --git a/SwiftChat/Assets.xcassets/openai-icon.imageset/openai@3x.png b/SwiftChat/Assets.xcassets/openai-icon.imageset/openai@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1b7635c9427cdaae61633c332d0de4f046d77f GIT binary patch literal 20715 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 J%Q~loCICf;?wJ4p literal 0 HcmV?d00001 diff --git a/SwiftChat/Config/AppConfig.swift b/SwiftChat/Config/AppConfig.swift new file mode 100644 index 0000000..2b6271f --- /dev/null +++ b/SwiftChat/Config/AppConfig.swift @@ -0,0 +1,108 @@ +// +// AppConfig.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation +import Combine +import OpenAI + +/// A model available for chat +struct ModelType: Identifiable, Codable, Hashable, Equatable { + let id: String + let displayName: String + let fullName: String + let iconName: String + let isMultimodal: Bool + + var modelName: String { id } + + func hash(into hasher: inout Hasher) { hasher.combine(id) } + static func == (lhs: ModelType, rhs: ModelType) -> Bool { lhs.id == rhs.id } +} + +/// Application-wide configuration +@MainActor +class AppConfig: ObservableObject { + static let shared = AppConfig() + + // MARK: - Configuration + + /// Set your API key here or via environment + var apiKey: String = "YOUR_API_KEY" + + /// OpenAI-compatible API host (no scheme, no path) + var apiHost: String = "api.openai.com" + + /// Base path for the API + var apiBasePath: String = "/v1" + + /// System prompt sent with every conversation + var systemPrompt: String = "You are a helpful AI assistant." + + /// Additional rules appended to the system prompt + var rules: String = "" + + // MARK: - State + + @Published private(set) var isInitialized = false + @Published private(set) var initializationError: Error? + @Published var currentModel: ModelType? { + didSet { + if let model = currentModel { + UserDefaults.standard.set(model.id, forKey: "selectedModel") + } + } + } + @Published private(set) var availableModels: [ModelType] = [] + @Published private(set) var networkMonitor = NetworkMonitor() + + private init() { + setupDefaultModels() + loadLastSelectedModel() + isInitialized = true + } + + // MARK: - Models + + /// Override this to change available models + private func setupDefaultModels() { + availableModels = [ + ModelType(id: "gpt-4.1", displayName: "GPT-4.1", fullName: "GPT-4.1", iconName: "openai-icon", isMultimodal: true), + ModelType(id: "gpt-4.1-mini", displayName: "GPT-4.1 Mini", fullName: "GPT-4.1 Mini", iconName: "openai-icon", isMultimodal: true), + ModelType(id: "o4-mini", displayName: "o4-mini", fullName: "o4-mini", iconName: "openai-icon", isMultimodal: true), + ] + } + + private func loadLastSelectedModel() { + if let savedId = UserDefaults.standard.string(forKey: "selectedModel"), + let model = availableModels.first(where: { $0.id == savedId }) { + currentModel = model + } else { + currentModel = availableModels.first + } + } + + func filteredModelTypes() -> [ModelType] { + return availableModels + } + + /// The model used for generating chat titles (nil = skip title generation) + var titleModel: ModelType? { + availableModels.first(where: { $0.id == "gpt-4.1-mini" }) ?? availableModels.first + } + + // MARK: - OpenAI Client + + func makeClient() -> OpenAI { + let config = OpenAI.Configuration( + token: apiKey, + host: apiHost, + basePath: apiBasePath + ) + return OpenAI(configuration: config) + } +} diff --git a/SwiftChat/Config/Constants.swift b/SwiftChat/Config/Constants.swift new file mode 100644 index 0000000..551dbb3 --- /dev/null +++ b/SwiftChat/Config/Constants.swift @@ -0,0 +1,77 @@ +// +// Constants.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation + +/// Application-wide constants +enum Constants { + enum UI { + static let scrollToBottomButtonSize: CGFloat = 27 + static let scrollToBottomIconSize: CGFloat = 16 + static let tableMaxColumnWidth: CGFloat = 300 + static let tableFontSize: CGFloat = 16 + static let tableCellHorizontalPadding: CGFloat = 12 + static let actionButtonCornerRadius: CGFloat = 6 + } + + enum Rendering { + static let maxSyntaxHighlightCharacters = 15_000 + static let maxFullParsingCharacters = 50_000 + static let maxMarkdownSegmentCharacters = 8_000 + } + + enum StreamingBuffer { + static let initialMultiplier: CGFloat = 50.0 + static let multiplierIncrement: CGFloat = 10.0 + static let maxMultiplier: CGFloat = 200.0 + static let extensionThresholdRatio: CGFloat = 0.9 + static let maxCellHeight: CGFloat = 200_000 + } + + enum Pagination { + static let chatsPerPage = 20 + } + + enum Context { + static let defaultMaxMessages = 75 + static let maxMessagesLimit = 200 + } + + enum ThinkingSummary { + static let minContentLength = 100 + static let cooldownSeconds: TimeInterval = 3.0 + static let tailWordCount = 200 + } + + enum TitleGeneration { + static let wordThreshold = 100 + static let systemPrompt = "Generate a concise, descriptive title of minimum 2 words, maximum 5 words for the following text. NEVER output markdown." + } + + enum Attachments { + static let maxImageDimension: CGFloat = 768 + static let imageCompressionQuality: CGFloat = 0.85 + static let maxFileSizeBytes: Int64 = 20 * 1024 * 1024 + static let maxImageSizeBytes: Int64 = 10 * 1024 * 1024 + static let previewThumbnailSize: CGFloat = 60 + static let thumbnailMaxDimension: CGFloat = 300 + static let previewMaxWidth: CGFloat = 200 + static let messageThumbnailSize: CGFloat = 80 + static let messageThumbnailColumns: Int = 3 + static let supportedDocumentExtensions: Set = ["pdf", "txt", "md", "csv", "html"] + static let supportedImageExtensions: Set = ["jpg", "jpeg", "png", "gif", "webp", "heic"] + static let defaultImageMimeType = "image/jpeg" + } + + enum Audio { + static let sampleRate: Double = 44100 + static let numberOfChannels: Int = 1 + static let recordingTimeoutSeconds: TimeInterval = 120 + static let transcriptionModel = "whisper-1" + } +} diff --git a/SwiftChat/Config/SettingsManager.swift b/SwiftChat/Config/SettingsManager.swift new file mode 100644 index 0000000..9a0f2f7 --- /dev/null +++ b/SwiftChat/Config/SettingsManager.swift @@ -0,0 +1,49 @@ +// +// SettingsManager.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import Combine + +/// Minimal settings manager for the chat template +@MainActor +class SettingsManager: ObservableObject { + static let shared = SettingsManager() + + @Published var hapticFeedbackEnabled: Bool { + didSet { UserDefaults.standard.set(hapticFeedbackEnabled, forKey: "hapticFeedbackEnabled") } + } + + @Published var selectedLanguage: String { + didSet { UserDefaults.standard.set(selectedLanguage, forKey: "selectedLanguage") } + } + + @Published var maxMessages: Int { + didSet { UserDefaults.standard.set(maxMessages, forKey: "maxPromptMessages") } + } + + @Published var webSearchEnabled: Bool { + didSet { UserDefaults.standard.set(webSearchEnabled, forKey: "webSearchEnabled") } + } + + @Published var isUsingCustomPrompt: Bool { + didSet { UserDefaults.standard.set(isUsingCustomPrompt, forKey: "isUsingCustomPrompt") } + } + + @Published var customSystemPrompt: String { + didSet { UserDefaults.standard.set(customSystemPrompt, forKey: "customSystemPrompt") } + } + + private init() { + self.hapticFeedbackEnabled = UserDefaults.standard.object(forKey: "hapticFeedbackEnabled") as? Bool ?? true + self.selectedLanguage = UserDefaults.standard.string(forKey: "selectedLanguage") ?? "System" + self.maxMessages = UserDefaults.standard.object(forKey: "maxPromptMessages") as? Int ?? Constants.Context.defaultMaxMessages + self.webSearchEnabled = UserDefaults.standard.object(forKey: "webSearchEnabled") as? Bool ?? false + self.isUsingCustomPrompt = UserDefaults.standard.object(forKey: "isUsingCustomPrompt") as? Bool ?? false + self.customSystemPrompt = UserDefaults.standard.string(forKey: "customSystemPrompt") ?? "" + } +} diff --git a/SwiftChat/Config/Theme.swift b/SwiftChat/Config/Theme.swift new file mode 100644 index 0000000..e01d57a --- /dev/null +++ b/SwiftChat/Config/Theme.swift @@ -0,0 +1,63 @@ +// +// Theme.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +/// Centralized theme and design system for the app +enum Theme { + + // MARK: - Colors + enum Colors { + static let backgroundPrimary = Color.backgroundPrimary + static let chatSurfaceDark = Color.chatSurfaceDark + static let chatSurfaceLight = Color.chatSurfaceLight + static let sidebarButtonDark = Color.sidebarButtonBackgroundDark + static let sidebarButtonLight = Color.sidebarButtonBackgroundLight + static let cardSurfaceDark = Color.cardSurfaceDark + static let cardSurfaceLight = Color.cardSurfaceLight + static let chatBackgroundDark = Color.chatBackgroundDark + static let chatBackgroundLight = Color.chatBackgroundLight + static let sidebarBackgroundDark = Color.sidebarBackgroundDark + static let sidebarBackgroundLight = Color.sidebarBackgroundLight + static let settingsBackgroundDark = Color.settingsBackgroundDark + static let settingsBackgroundLight = Color.settingsBackgroundLight + } + + // MARK: - Dimensions + enum Dimensions { + // Layout + static let sidebarWidth: CGFloat = 300 + + // Common padding values used throughout the app + static let paddingExtraSmall: CGFloat = 4 + static let paddingSmall: CGFloat = 8 + static let paddingMedium: CGFloat = 12 + static let paddingLarge: CGFloat = 16 + static let paddingExtraLarge: CGFloat = 24 + + // Common corner radius values + static let cornerRadiusSmall: CGFloat = 8 + static let cornerRadiusMedium: CGFloat = 12 + static let cornerRadiusLarge: CGFloat = 16 + } + + // MARK: - Animations + enum Animations { + // Common animation durations + static let defaultDuration: Double = 0.25 + static let mediumDuration: Double = 0.3 + static let longDuration: Double = 0.6 + static let copyFeedbackDuration: Double = 1.5 + + // Spring animations used in various places + static let springResponse: Double = 0.3 + static let springDamping: Double = 0.75 + static let springResponseFast: Double = 0.2 + static let springDampingHigh: Double = 0.9 + } +} diff --git a/SwiftChat/ContentView.swift b/SwiftChat/ContentView.swift new file mode 100644 index 0000000..09be1ec --- /dev/null +++ b/SwiftChat/ContentView.swift @@ -0,0 +1,46 @@ +// +// ContentView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +struct ContentView: View { + @StateObject private var viewModel = ChatViewModel() + @State private var showAPIKeyPrompt = false + @State private var apiKeyInput = "" + + private var needsAPIKey: Bool { + let key = AppConfig.shared.apiKey + return key.isEmpty || key == "YOUR_API_KEY" + } + + var body: some View { + ChatContainer() + .environmentObject(viewModel) + .onAppear { + if let saved = UserDefaults.standard.string(forKey: "apiKey"), !saved.isEmpty { + AppConfig.shared.apiKey = saved + } else if needsAPIKey { + showAPIKeyPrompt = true + } + } + .alert("API Key Required", isPresented: $showAPIKeyPrompt) { + TextField("Paste your API key", text: $apiKeyInput) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + Button("Save") { + let trimmed = apiKeyInput.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return } + AppConfig.shared.apiKey = trimmed + UserDefaults.standard.set(trimmed, forKey: "apiKey") + } + Button("Cancel", role: .cancel) {} + } message: { + Text("Enter your API key to start chatting.") + } + } +} diff --git a/SwiftChat/Extensions/Color+Hex.swift b/SwiftChat/Extensions/Color+Hex.swift new file mode 100644 index 0000000..babf854 --- /dev/null +++ b/SwiftChat/Extensions/Color+Hex.swift @@ -0,0 +1,36 @@ +// +// Color+Hex.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +extension Color { + init(hex: String) { + let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) + var int: UInt64 = 0 + Scanner(string: hex).scanHexInt64(&int) + let a, r, g, b: UInt64 + switch hex.count { + case 3: // RGB (12-bit) + (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17) + case 6: // RGB (24-bit) + (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF) + case 8: // ARGB (32-bit) + (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF) + default: + (a, r, g, b) = (1, 1, 1, 0) + } + + self.init( + .sRGB, + red: Double(r) / 255, + green: Double(g) / 255, + blue: Double(b) / 255, + opacity: Double(a) / 255 + ) + } +} \ No newline at end of file diff --git a/SwiftChat/Extensions/Color.swift b/SwiftChat/Extensions/Color.swift new file mode 100644 index 0000000..73d245d --- /dev/null +++ b/SwiftChat/Extensions/Color.swift @@ -0,0 +1,103 @@ +// +// Color.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import UIKit + +extension Color { + // Accent colors + static let accentPrimary = Color(red: 16/255, green: 185/255, blue: 129/255) // #10B981 + + // Brand colors + static let brandDark = Color(hex: "061820") + static let brandLight = Color(hex: "EEF3F3") + static let brandAccentDark = Color(hex: "004444") + static let brandAccentLight = Color(hex: "68C7AC") + + // App surface colors + static let backgroundPrimary = Color.brandDark + static let chatSurfaceDark = Color(hex: "2C2C2E") + static let chatSurfaceLight = Color(hex: "F2F2F7") + static let sidebarButtonBackgroundDark = Color(hex: "2C2C2E") + static let sidebarButtonBackgroundLight = Color.white + static let cardSurfaceDark = Color(hex: "1C1C1E") + static let cardSurfaceLight = Color.white + static let chatBackgroundDark = Color(hex: "121212") + static let chatBackgroundLight = Color.white + static let actionButtonBackgroundDark = Color.white.opacity(0.08) + static let actionButtonBackgroundLight = Color.black.opacity(0.05) + static let sidebarBackgroundDark = Color(hex: "121212") + static let sidebarBackgroundLight = Color.white + static let settingsBackgroundDark = Color(hex: "121212") + static let settingsBackgroundLight = Color(UIColor.systemGroupedBackground) + static let sendButtonBackgroundDark = Color.brandDark + static let sendButtonBackgroundLight = Color.white + static let sendButtonForegroundDark = Color.white + static let sendButtonForegroundLight = Color.black + + // Reasoning and messaging surfaces + static let thinkingBackgroundDark = chatSurfaceDark + static let thinkingBackgroundLight = chatSurfaceLight + static let userMessageBackgroundDark = chatSurfaceDark + static let userMessageBackgroundLight = chatSurfaceLight + static let userMessageForegroundDark = Color.white + static let userMessageForegroundLight = Color.black + + + // Adaptive accent color for buttons/links that works in both light and dark mode + static let adaptiveAccent = Color(UIColor { traitCollection in + if traitCollection.userInterfaceStyle == .dark { + // White in dark mode for better visibility + return .white + } else { + // Use the green accent in light mode + return UIColor(Color.accentPrimary) + } + }) + + // Convenience helpers for common surfaces + static func chatSurface(isDarkMode: Bool) -> Color { + isDarkMode ? chatSurfaceDark : chatSurfaceLight + } + + static func sidebarButtonBackground(for colorScheme: ColorScheme) -> Color { + colorScheme == .dark ? sidebarButtonBackgroundDark : sidebarButtonBackgroundLight + } + + static func cardSurface(for colorScheme: ColorScheme) -> Color { + colorScheme == .dark ? cardSurfaceDark : cardSurfaceLight + } + + static func chatBackground(isDarkMode: Bool) -> Color { + isDarkMode ? chatBackgroundDark : chatBackgroundLight + } + + static func sidebarBackground(for colorScheme: ColorScheme) -> Color { + colorScheme == .dark ? sidebarBackgroundDark : sidebarBackgroundLight + } + + static func settingsBackground(for colorScheme: ColorScheme) -> Color { + colorScheme == .dark ? settingsBackgroundDark : settingsBackgroundLight + } + + static func thinkingBackground(isDarkMode: Bool) -> Color { + isDarkMode ? thinkingBackgroundDark : thinkingBackgroundLight + } + + static func userMessageBackground(isDarkMode: Bool) -> Color { + isDarkMode ? userMessageBackgroundDark : userMessageBackgroundLight + } + + static func userMessageForeground(isDarkMode: Bool) -> Color { + isDarkMode ? userMessageForegroundDark : userMessageForegroundLight + } + + static func actionButtonBackground(isDarkMode: Bool) -> Color { + isDarkMode ? actionButtonBackgroundDark : actionButtonBackgroundLight + } +} diff --git a/SwiftChat/Models/AttachmentModels.swift b/SwiftChat/Models/AttachmentModels.swift new file mode 100644 index 0000000..b47de74 --- /dev/null +++ b/SwiftChat/Models/AttachmentModels.swift @@ -0,0 +1,108 @@ +// +// AttachmentModels.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation +import UIKit + +enum AttachmentType: String, Codable, Equatable { + case document + case image +} + +enum AttachmentProcessingState: String, Codable, Equatable { + case pending + case processing + case completed + case failed +} + +struct Attachment: Identifiable, Equatable { + let id: String + let type: AttachmentType + let fileName: String + var mimeType: String? + var base64: String? + var thumbnailBase64: String? + var textContent: String? + var description: String? + var fileSize: Int64 + // v1 format: per-attachment AES-256 key as standard base64 (32 raw bytes → 44 chars). + // Cross-platform contract: iOS uses Data.base64EncodedString(), React uses btoa(). + // The encrypted blob (nonce || ciphertext || tag) is stored separately at /api/storage/attachment/:id. + var encryptionKey: String? + var processingState: AttachmentProcessingState + + init( + id: String = UUID().uuidString.lowercased(), + type: AttachmentType, + fileName: String, + mimeType: String? = nil, + base64: String? = nil, + thumbnailBase64: String? = nil, + textContent: String? = nil, + description: String? = nil, + fileSize: Int64 = 0, + encryptionKey: String? = nil, + processingState: AttachmentProcessingState = .pending + ) { + self.id = id + self.type = type + self.fileName = fileName + self.mimeType = mimeType + self.base64 = base64 + self.thumbnailBase64 = thumbnailBase64 + self.textContent = textContent + self.description = description + self.fileSize = fileSize + self.encryptionKey = encryptionKey + self.processingState = processingState + } +} + +// MARK: - Codable (exclude transient UI state from serialization) + +extension Attachment: Codable { + enum CodingKeys: String, CodingKey { + case id, type, fileName, mimeType, base64, thumbnailBase64 + case textContent, description, fileSize + case encryptionKey + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + id = try container.decodeIfPresent(String.self, forKey: .id) ?? UUID().uuidString.lowercased() + type = try container.decode(AttachmentType.self, forKey: .type) + fileName = try container.decode(String.self, forKey: .fileName) + mimeType = try container.decodeIfPresent(String.self, forKey: .mimeType) + base64 = try container.decodeIfPresent(String.self, forKey: .base64) + thumbnailBase64 = try container.decodeIfPresent(String.self, forKey: .thumbnailBase64) + textContent = try container.decodeIfPresent(String.self, forKey: .textContent) + description = try container.decodeIfPresent(String.self, forKey: .description) + fileSize = try container.decodeIfPresent(Int64.self, forKey: .fileSize) ?? 0 + encryptionKey = try container.decodeIfPresent(String.self, forKey: .encryptionKey) + // processingState is transient UI state — always reset to completed on decode + processingState = .completed + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(id, forKey: .id) + try container.encode(type, forKey: .type) + try container.encode(fileName, forKey: .fileName) + try container.encodeIfPresent(mimeType, forKey: .mimeType) + try container.encodeIfPresent(base64, forKey: .base64) + try container.encodeIfPresent(thumbnailBase64, forKey: .thumbnailBase64) + try container.encodeIfPresent(textContent, forKey: .textContent) + try container.encodeIfPresent(description, forKey: .description) + if fileSize > 0 { + try container.encode(fileSize, forKey: .fileSize) + } + try container.encodeIfPresent(encryptionKey, forKey: .encryptionKey) + // processingState is transient UI state — never encode + } +} diff --git a/SwiftChat/Models/ChatModels.swift b/SwiftChat/Models/ChatModels.swift new file mode 100644 index 0000000..5a5b12a --- /dev/null +++ b/SwiftChat/Models/ChatModels.swift @@ -0,0 +1,375 @@ +// +// ChatModels.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + + +import Foundation +import UIKit + +/// Represents a chat conversation +struct Chat: Identifiable, Codable { + enum TitleState: String, Codable { + case placeholder + case generated + case manual + } + + static let placeholderTitle = "Untitled" + + let id: String + var title: String + var titleState: TitleState + var messages: [Message] + var hasActiveStream: Bool = false + var createdAt: Date + var modelType: ModelType + var language: String? + + // Computed properties + var isBlankChat: Bool { + return messages.isEmpty + } + + var needsGeneratedTitle: Bool { + return titleState == .placeholder + } + + /// Generates a permanent reverse-timestamp ID locally. + /// Format: {reverseTimestamp padded to 13 digits}_{UUID} + static func generateReverseId(timestampMs: Int = Int(Date().timeIntervalSince1970 * 1000)) -> String { + let maxReverseTimestamp = 9999999999999 + let reverseTimestamp = maxReverseTimestamp - timestampMs + let unpadded = String(reverseTimestamp) + let digits = String(maxReverseTimestamp).count + let reverseTsStr = String(repeating: "0", count: max(0, digits - unpadded.count)) + unpadded + return "\(reverseTsStr)_\(UUID().uuidString.lowercased())" + } + + static func deriveTitleState(for title: String, messages: [Message]) -> TitleState { + let normalizedTitle = title.trimmingCharacters(in: .whitespacesAndNewlines) + if messages.isEmpty { + return normalizedTitle.isEmpty || normalizedTitle == placeholderTitle ? .placeholder : .manual + } + if normalizedTitle.isEmpty || normalizedTitle == placeholderTitle { + return .placeholder + } + return .generated + } + + init( + id: String = Chat.generateReverseId(), + title: String = Chat.placeholderTitle, + titleState: TitleState? = nil, + messages: [Message] = [], + createdAt: Date = Date(), + modelType: ModelType, + language: String? = nil) + { + let resolvedTitleState = titleState ?? Chat.deriveTitleState(for: title, messages: messages) + + self.id = id + self.title = title + self.titleState = resolvedTitleState + self.messages = messages + self.createdAt = createdAt + self.modelType = modelType + self.language = language + } + + // MARK: - Factory Methods + + /// Creates a new chat with the current model from AppConfig + @MainActor + static func create( + id: String = Chat.generateReverseId(), + title: String = Chat.placeholderTitle, + titleState: TitleState? = nil, + messages: [Message] = [], + createdAt: Date = Date(), + modelType: ModelType? = nil, + language: String? = nil + ) -> Chat { + guard let model = modelType ?? AppConfig.shared.currentModel ?? AppConfig.shared.availableModels.first else { + fatalError("Cannot create Chat without available models. Ensure AppConfig is initialized before creating chats.") + } + return Chat( + id: id, + title: title, + titleState: titleState, + messages: messages, + createdAt: createdAt, + modelType: model, + language: language + ) + } + + // MARK: - Codable Implementation + + enum CodingKeys: String, CodingKey { + case id, title, titleState, messages, createdAt, modelType, language + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + id = try container.decode(String.self, forKey: .id) + title = try container.decode(String.self, forKey: .title) + messages = try container.decode([Message].self, forKey: .messages) + titleState = (try? container.decode(TitleState.self, forKey: .titleState)) ?? Chat.deriveTitleState(for: title, messages: messages) + // hasActiveStream is transient UI state — always reset to false on decode + hasActiveStream = false + createdAt = try container.decode(Date.self, forKey: .createdAt) + modelType = try container.decode(ModelType.self, forKey: .modelType) + language = try container.decodeIfPresent(String.self, forKey: .language) + } + + // MARK: - Haptic Feedback Methods + + /// Triggers haptic feedback when a chat operation succeeds + static func triggerSuccessFeedback() { + HapticFeedback.trigger(.success) + } +} + +/// Represents a message role +enum MessageRole: String, Codable { + case user + case assistant +} + +// MARK: - Web Search Types + +/// Represents a source from web search results +struct WebSearchSource: Codable, Equatable, Identifiable { + let id: String + let title: String + let url: String + + init(id: String = UUID().uuidString.lowercased(), title: String, url: String) { + self.id = id + self.title = title + self.url = url + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + id = try container.decodeIfPresent(String.self, forKey: .id) ?? UUID().uuidString.lowercased() + title = try container.decode(String.self, forKey: .title) + url = try container.decode(String.self, forKey: .url) + } +} + +/// Status of a web search operation +enum WebSearchStatus: String, Codable, Equatable { + case searching + case completed + case failed + case blocked +} + +/// State of web search for a message +struct WebSearchState: Codable, Equatable { + var query: String? + var status: WebSearchStatus + var sources: [WebSearchSource] + var reason: String? + + init( + query: String? = nil, + status: WebSearchStatus = .searching, + sources: [WebSearchSource] = [], + reason: String? = nil + ) { + self.query = query + self.status = status + self.sources = sources + self.reason = reason + } +} + +// MARK: - URL Fetch Types + +/// Status of a URL fetch operation +enum URLFetchStatus: String, Codable, Equatable { + case fetching + case completed + case failed + case blocked +} + +/// Tracks the state of a single URL being fetched during web search +struct URLFetchState: Codable, Equatable, Identifiable { + let id: String + let url: String + var status: URLFetchStatus + + init(id: String = UUID().uuidString.lowercased(), url: String, status: URLFetchStatus = .fetching) { + self.id = id + self.url = url + self.status = status + } +} + +/// URL citation from web search results +struct URLCitation: Codable, Equatable { + let title: String + let url: String + let start_index: Int? + let end_index: Int? +} + +/// Annotation wrapper for URL citations +struct Annotation: Codable, Equatable { + let type: String + let url_citation: URLCitation +} + +/// Represents a single message in a chat +struct Message: Identifiable, Codable, Equatable { + let id: String + let role: MessageRole + var content: String + var thoughts: String? = nil + var isThinking: Bool = false + var timestamp: Date + var isCollapsed: Bool = true + var isStreaming: Bool = false + var streamError: String? = nil + var isRequestError: Bool = false + var generationTimeSeconds: Double? = nil + var contentChunks: [ContentChunk] = [] + var thinkingChunks: [ThinkingChunk] = [] + var webSearchState: WebSearchState? = nil + var urlFetches: [URLFetchState] = [] + var attachments: [Attachment] = [] + + // Passthrough fields for cross-platform round-trip + var annotations: [Annotation]? = nil + + static let longMessageAttachmentThreshold = 1200 + var shouldDisplayAsAttachment: Bool { + role == .user && content.count >= Message.longMessageAttachmentThreshold + } + + private static let iso8601Formatter: ISO8601DateFormatter = { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + return formatter + }() + + private static let iso8601FormatterNoFractional: ISO8601DateFormatter = { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime] + return formatter + }() + + init(id: String = UUID().uuidString.lowercased(), role: MessageRole, content: String, thoughts: String? = nil, isThinking: Bool = false, timestamp: Date = Date(), isCollapsed: Bool = true, generationTimeSeconds: Double? = nil, contentChunks: [ContentChunk] = [], thinkingChunks: [ThinkingChunk] = [], webSearchState: WebSearchState? = nil, attachments: [Attachment] = []) { + self.id = id + self.role = role + self.content = content + self.thoughts = thoughts + self.isThinking = isThinking + self.timestamp = timestamp + self.isCollapsed = isCollapsed + self.generationTimeSeconds = generationTimeSeconds + self.contentChunks = contentChunks + self.thinkingChunks = thinkingChunks + self.webSearchState = webSearchState + self.attachments = attachments + } + + // MARK: - Codable Implementation + + enum CodingKeys: String, CodingKey { + case id, role, content, thoughts, isThinking, timestamp, isCollapsed, isStreaming, streamError, isRequestError, generationTimeSeconds, webSearchState + case webSearch // Alternative key used by React app + case urlFetches + case attachments + case annotations + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + id = try container.decodeIfPresent(String.self, forKey: .id) ?? UUID().uuidString.lowercased() + role = try container.decode(MessageRole.self, forKey: .role) + content = try container.decode(String.self, forKey: .content) + thoughts = try container.decodeIfPresent(String.self, forKey: .thoughts) + isThinking = try container.decodeIfPresent(Bool.self, forKey: .isThinking) ?? false + + // Handle timestamp as either Date or String (ISO8601) + if let date = try? container.decode(Date.self, forKey: .timestamp) { + timestamp = date + } else if let dateString = try? container.decode(String.self, forKey: .timestamp) { + timestamp = Self.iso8601Formatter.date(from: dateString) + ?? Self.iso8601FormatterNoFractional.date(from: dateString) + ?? Date() + } else { + timestamp = Date() + } + + isCollapsed = try container.decodeIfPresent(Bool.self, forKey: .isCollapsed) ?? true + isStreaming = try container.decodeIfPresent(Bool.self, forKey: .isStreaming) ?? false + streamError = try container.decodeIfPresent(String.self, forKey: .streamError) + isRequestError = try container.decodeIfPresent(Bool.self, forKey: .isRequestError) ?? false + generationTimeSeconds = try container.decodeIfPresent(Double.self, forKey: .generationTimeSeconds) + contentChunks = [] + thinkingChunks = [] + webSearchState = try container.decodeIfPresent(WebSearchState.self, forKey: .webSearchState) + ?? container.decodeIfPresent(WebSearchState.self, forKey: .webSearch) + urlFetches = try container.decodeIfPresent([URLFetchState].self, forKey: .urlFetches) ?? [] + attachments = try container.decodeIfPresent([Attachment].self, forKey: .attachments) ?? [] + annotations = try container.decodeIfPresent([Annotation].self, forKey: .annotations) + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(id, forKey: .id) + try container.encode(role.rawValue, forKey: .role) + try container.encode(content, forKey: .content) + try container.encodeIfPresent(thoughts, forKey: .thoughts) + try container.encode(isThinking, forKey: .isThinking) + try container.encode(Self.iso8601Formatter.string(from: timestamp), forKey: .timestamp) + try container.encode(isCollapsed, forKey: .isCollapsed) + try container.encode(isStreaming, forKey: .isStreaming) + try container.encodeIfPresent(streamError, forKey: .streamError) + if isRequestError { try container.encode(isRequestError, forKey: .isRequestError) } + try container.encodeIfPresent(generationTimeSeconds, forKey: .generationTimeSeconds) + try container.encodeIfPresent(webSearchState, forKey: .webSearch) + if !urlFetches.isEmpty { + try container.encode(urlFetches, forKey: .urlFetches) + } + if !attachments.isEmpty { + try container.encode(attachments, forKey: .attachments) + } + try container.encodeIfPresent(annotations, forKey: .annotations) + } +} + +// MARK: - Haptic Feedback + +/// Utility for handling haptic feedback in chat interactions +enum HapticFeedback { + enum FeedbackType { + case error + case success + } + + static func trigger(_ type: FeedbackType) { + let hapticEnabled = UserDefaults.standard.object(forKey: "hapticFeedbackEnabled") as? Bool ?? true + guard hapticEnabled else { return } + + let generator = UINotificationFeedbackGenerator() + switch type { + case .error: + generator.notificationOccurred(.error) + case .success: + generator.notificationOccurred(.success) + } + } +} + diff --git a/SwiftChat/Services/AudioRecordingService.swift b/SwiftChat/Services/AudioRecordingService.swift new file mode 100644 index 0000000..4f719a9 --- /dev/null +++ b/SwiftChat/Services/AudioRecordingService.swift @@ -0,0 +1,162 @@ +// +// AudioRecordingService.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation +import Combine +import AVFoundation +import OpenAI + +/// Service for managing audio recording and transcription +@MainActor +class AudioRecordingService: NSObject, ObservableObject { + static let shared = AudioRecordingService() + + @Published private(set) var isRecording = false + @Published private(set) var isTranscribing = false + + private var audioRecorder: AVAudioRecorder? + private var timeoutTimer: Timer? + private var recordingURL: URL? + + private override init() { + super.init() + } + + // MARK: - Permission + + func requestPermission() async -> Bool { + await withCheckedContinuation { continuation in + AVAudioApplication.requestRecordPermission { granted in + continuation.resume(returning: granted) + } + } + } + + var hasPermission: Bool { + AVAudioApplication.shared.recordPermission == .granted + } + + // MARK: - Recording + + func startRecording() throws { + guard !isRecording else { return } + + let session = AVAudioSession.sharedInstance() + try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker]) + try session.setActive(true) + + let url = getRecordingURL() + recordingURL = url + + let settings: [String: Any] = [ + AVFormatIDKey: Int(kAudioFormatMPEG4AAC), + AVSampleRateKey: Constants.Audio.sampleRate, + AVNumberOfChannelsKey: Constants.Audio.numberOfChannels, + AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue + ] + + audioRecorder = try AVAudioRecorder(url: url, settings: settings) + audioRecorder?.record() + isRecording = true + + timeoutTimer = Timer.scheduledTimer(withTimeInterval: Constants.Audio.recordingTimeoutSeconds, repeats: false) { [weak self] _ in + Task { @MainActor in + self?.stopRecording() + } + } + } + + @discardableResult + func stopRecording() -> URL? { + guard isRecording else { return nil } + + timeoutTimer?.invalidate() + timeoutTimer = nil + + audioRecorder?.stop() + audioRecorder = nil + isRecording = false + + return recordingURL + } + + func cancelRecording() { + stopRecording() + cleanupRecordingFile() + } + + // MARK: - Transcription + + func transcribe(fileURL: URL, client: OpenAI) async throws -> String { + isTranscribing = true + defer { + isTranscribing = false + cleanupRecordingFile() + } + + let audioData = try await Task.detached { + try Data(contentsOf: fileURL) + }.value + + guard !audioData.isEmpty else { + throw AudioRecordingError.emptyRecording + } + + let query = AudioTranscriptionQuery( + file: audioData, + fileType: .m4a, + model: Constants.Audio.transcriptionModel, + responseFormat: .json + ) + + let result = try await client.audioTranscriptions(query: query) + let transcription = result.text.trimmingCharacters(in: .whitespacesAndNewlines) + + guard !transcription.isEmpty else { + throw AudioRecordingError.emptyTranscription + } + + return transcription + } + + // MARK: - Private Helpers + + private func getRecordingURL() -> URL { + let tempDir = FileManager.default.temporaryDirectory + let filename = "recording_\(UUID().uuidString).m4a" + return tempDir.appendingPathComponent(filename) + } + + private func cleanupRecordingFile() { + guard let url = recordingURL else { return } + try? FileManager.default.removeItem(at: url) + recordingURL = nil + } +} + +// MARK: - Errors + +enum AudioRecordingError: LocalizedError { + case permissionDenied + case emptyRecording + case emptyTranscription + case transcriptionFailed(String) + + var errorDescription: String? { + switch self { + case .permissionDenied: + return "Microphone access denied" + case .emptyRecording: + return "Recording is empty" + case .emptyTranscription: + return "Transcription returned empty" + case .transcriptionFailed(let message): + return "Transcription failed: \(message)" + } + } +} diff --git a/SwiftChat/Services/StreamingMarkdownChunker.swift b/SwiftChat/Services/StreamingMarkdownChunker.swift new file mode 100644 index 0000000..3abf0de --- /dev/null +++ b/SwiftChat/Services/StreamingMarkdownChunker.swift @@ -0,0 +1,202 @@ +// +// StreamingMarkdownChunker.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation + +enum ContentChunkType: Codable, Equatable, Hashable { + case paragraph + case codeBlock(language: String?) + case heading + case list + case blockquote + case table + case other +} + +struct ContentChunk: Codable, Equatable, Identifiable, Hashable { + let id: String + let type: ContentChunkType + let content: String + let isComplete: Bool + + init(id: String = UUID().uuidString, type: ContentChunkType, content: String, isComplete: Bool) { + self.id = id + self.type = type + self.content = content + self.isComplete = isComplete + } +} + +class StreamingMarkdownChunker { + private var completedChunks: [ContentChunk] = [] + private var workingBuffer: String = "" + private var isInCodeBlock = false + private var isInTable = false + private var codeBlockLanguage: String? + private var codeBlockFenceCount = 0 + private var isFinalized: Bool = false + + func getAllChunks() -> [ContentChunk] { + var result = completedChunks + + if !workingBuffer.isEmpty { + let chunkType: ContentChunkType = isInTable ? .table : (isInCodeBlock ? .codeBlock(language: codeBlockLanguage) : .paragraph) + let chunkId = isInTable ? "working_table" : "working_current" + result.append(ContentChunk( + id: chunkId, + type: chunkType, + content: workingBuffer, + isComplete: false + )) + } + + return result + } + + @discardableResult + func appendToken(_ token: String) -> Bool { + workingBuffer += token + + if isInCodeBlock { + if workingBuffer.hasSuffix("```") || workingBuffer.contains("\n```\n") || workingBuffer.contains("\n```") { + if let closingRange = workingBuffer.range(of: "```", options: .backwards) { + let afterFence = String(workingBuffer[closingRange.upperBound...]) + if afterFence.trimmingCharacters(in: .whitespaces).isEmpty || afterFence.hasPrefix("\n") { + finalizeCodeBlock(preserveAfterFence: afterFence) + return true + } + } + } + return false + } + + if isInTable { + if workingBuffer.hasSuffix("\n\n") || (workingBuffer.hasSuffix("\n") && !workingBuffer.suffix(10).contains("|")) { + finalizeTable() + return true + } + return false + } + + if workingBuffer.contains("```") { + if let fenceRange = workingBuffer.range(of: "```") { + let beforeFence = String(workingBuffer[..= 2 { + let lastTwo = lines.suffix(2) + if lastTwo.allSatisfy({ $0.contains("|") }) { + if lastTwo.last?.contains("---") == true || lastTwo.last?.contains(":--") == true || lastTwo.last?.contains("--:") == true { + isInTable = true + return false + } + } + } + + if workingBuffer.hasSuffix("\n\n") && workingBuffer.count > 2 { + let content = String(workingBuffer.dropLast(2)) + if !content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + let chunkId = "paragraph_\(content.hashValue)_\(Date().timeIntervalSince1970)" + completedChunks.append(ContentChunk( + id: chunkId, + type: .paragraph, + content: content, + isComplete: true + )) + workingBuffer = "\n\n" + return true + } + } + + return false + } + + private func finalizeCodeBlock(preserveAfterFence: String = "") { + let chunkId = "codeblock_\(workingBuffer.hashValue)_\(Date().timeIntervalSince1970)" + completedChunks.append(ContentChunk( + id: chunkId, + type: .codeBlock(language: codeBlockLanguage), + content: workingBuffer, + isComplete: true + )) + + isInCodeBlock = false + codeBlockLanguage = nil + workingBuffer = preserveAfterFence + } + + private func finalizeTable() { + let trimmed = workingBuffer.trimmingCharacters(in: .whitespacesAndNewlines) + if !trimmed.isEmpty { + let chunkId = "table_\(trimmed.hashValue)_\(Date().timeIntervalSince1970)" + completedChunks.append(ContentChunk( + id: chunkId, + type: .table, + content: trimmed, + isComplete: true + )) + } + + isInTable = false + workingBuffer = "" + } + + func finalize() { + isFinalized = true + + if isInCodeBlock { + finalizeCodeBlock() + } else if isInTable { + finalizeTable() + } else if !workingBuffer.isEmpty { + let trimmed = workingBuffer.trimmingCharacters(in: .whitespacesAndNewlines) + if !trimmed.isEmpty { + let chunkId = "paragraph_\(trimmed.hashValue)_\(Date().timeIntervalSince1970)" + completedChunks.append(ContentChunk( + id: chunkId, + type: .paragraph, + content: trimmed, + isComplete: true + )) + workingBuffer = "" + } + } + } + + func reset() { + completedChunks.removeAll() + workingBuffer = "" + isInCodeBlock = false + isInTable = false + codeBlockLanguage = nil + isFinalized = false + } +} diff --git a/SwiftChat/Services/ThinkingSummaryService.swift b/SwiftChat/Services/ThinkingSummaryService.swift new file mode 100644 index 0000000..5dfc0d5 --- /dev/null +++ b/SwiftChat/Services/ThinkingSummaryService.swift @@ -0,0 +1,63 @@ +// +// ThinkingSummaryService.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation + +/// Service for generating thinking summaries during streaming. +/// Uses a simple tail-text extraction approach. +@MainActor +class ThinkingSummaryService { + static let shared = ThinkingSummaryService() + + private var currentSummary: String = "" + private var lastGenerationTime: Date? + private var summarizedContentLength: Int = 0 + + private init() {} + + /// Generate a summary of the thinking content by extracting the last sentence + func generateSummary(thoughts: String, completion: @escaping @MainActor (String) -> Void) { + let newContent = String(thoughts.dropFirst(summarizedContentLength)) + + guard newContent.count >= Constants.ThinkingSummary.minContentLength else { return } + + if let lastTime = lastGenerationTime, + Date().timeIntervalSince(lastTime) < Constants.ThinkingSummary.cooldownSeconds { + return + } + + lastGenerationTime = Date() + summarizedContentLength = thoughts.count + + // Extract last meaningful sentence as a summary + let words = thoughts.split(separator: " ") + let tailText: String + if words.count > 20 { + tailText = words.suffix(20).joined(separator: " ") + } else { + tailText = thoughts + } + + let trimmed = tailText.trimmingCharacters(in: .whitespacesAndNewlines) + if !trimmed.isEmpty { + currentSummary = trimmed + completion(trimmed) + } + } + + /// Reset state for a new thinking session + func reset() { + currentSummary = "" + lastGenerationTime = nil + summarizedContentLength = 0 + } + + var summary: String { + currentSummary + } +} diff --git a/SwiftChat/Services/ThinkingTextChunker.swift b/SwiftChat/Services/ThinkingTextChunker.swift new file mode 100644 index 0000000..16e53cf --- /dev/null +++ b/SwiftChat/Services/ThinkingTextChunker.swift @@ -0,0 +1,69 @@ +// +// ThinkingTextChunker.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation + +struct ThinkingChunk: Identifiable, Equatable, Hashable { + let id: String + let content: String + let isComplete: Bool +} + +class ThinkingTextChunker { + private var completedChunks: [ThinkingChunk] = [] + private var workingBuffer: String = "" + + func getAllChunks() -> [ThinkingChunk] { + var result = completedChunks + + if !workingBuffer.isEmpty { + result.append(ThinkingChunk( + id: "thinking_working_\(completedChunks.count)", + content: workingBuffer, + isComplete: false + )) + } + + return result + } + + func appendToken(_ token: String) { + workingBuffer += token + + // Split on double-newline paragraph boundaries + while let range = workingBuffer.range(of: "\n\n") { + let paragraph = String(workingBuffer[.. CreateModelResponseQuery { + + let fullPrompt = rules.isEmpty ? systemPrompt : systemPrompt + "\n\n" + rules + + var inputItems: [InputItem] = [] + + // Add conversation history + let recentMessages = Array(conversationMessages.suffix(maxMessages)) + + for msg in recentMessages { + if msg.role == .user { + var userContent = msg.content + + // Derive document content and image data from attachments + let documentAttachments = msg.attachments.filter { $0.type == .document } + let imageAttachments = msg.attachments.filter { $0.type == .image } + + // Prepend document content as context when present + if !documentAttachments.isEmpty { + let docContent = documentAttachments + .compactMap { attachment -> String? in + guard let text = attachment.textContent, !text.isEmpty else { return nil } + return "Document title: \(attachment.fileName)\nDocument contents:\n\(text)" + } + .joined(separator: "\n\n") + if !docContent.isEmpty { + userContent = "---\nDocument content:\n\(docContent)\n---\n\n\(userContent)" + } + } + + // Use multimodal content parts when model supports it and message has images + if isMultimodal, !imageAttachments.isEmpty { + var parts: [InputContent] = [] + parts.append(.inputText(Schemas.InputTextContent(_type: .inputText, text: userContent))) + for attachment in imageAttachments { + guard let base64 = attachment.base64, + let mimeType = attachment.mimeType else { continue } + let dataUrl = "data:\(mimeType);base64,\(base64)" + parts.append(.inputImage(InputImage( + _type: .inputImage, + imageUrl: dataUrl, + detail: .auto + ))) + } + inputItems.append(.inputMessage(EasyInputMessage(role: .user, content: .inputItemContentList(parts)))) + } else if !imageAttachments.isEmpty { + // Non-multimodal model: append image descriptions as text fallback + let descriptions = imageAttachments + .compactMap { attachment -> String? in + guard let desc = attachment.description, !desc.isEmpty else { return nil } + return "Image: \(attachment.fileName)\nDescription:\n\(desc)" + } + if !descriptions.isEmpty { + let descText = descriptions.joined(separator: "\n\n") + userContent = userContent + "\n\n[Treat these descriptions as if they are the raw images.]\n" + descText + } + inputItems.append(.inputMessage(EasyInputMessage(role: .user, content: .textInput(userContent)))) + } else { + inputItems.append(.inputMessage(EasyInputMessage(role: .user, content: .textInput(userContent)))) + } + } else if !msg.content.isEmpty { + inputItems.append(.inputMessage(EasyInputMessage(role: .assistant, content: .textInput(msg.content)))) + } + } + + // Build tools array + var tools: [Tool]? = nil + if webSearchEnabled { + tools = [.webSearchTool(Schemas.WebSearchPreviewTool(_type: .webSearchPreview))] + } + + return CreateModelResponseQuery( + input: .inputItemList(inputItems), + model: modelId, + instructions: fullPrompt, + stream: stream ? true : nil, + tools: tools + ) + } +} diff --git a/SwiftChat/Utilities/NetworkMonitor.swift b/SwiftChat/Utilities/NetworkMonitor.swift new file mode 100644 index 0000000..7692ccc --- /dev/null +++ b/SwiftChat/Utilities/NetworkMonitor.swift @@ -0,0 +1,31 @@ +// +// NetworkMonitor.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Network +import Combine +import SwiftUI + +@MainActor +class NetworkMonitor: ObservableObject { + @Published private(set) var isConnected = true + private let monitor = NWPathMonitor() + private let queue = DispatchQueue(label: "NetworkMonitor") + + init() { + monitor.pathUpdateHandler = { [weak self] path in + DispatchQueue.main.async { + self?.isConnected = path.status == .satisfied + } + } + monitor.start(queue: queue) + } + + deinit { + monitor.cancel() + } +} diff --git a/SwiftChat/ViewModels/ChatViewModel.swift b/SwiftChat/ViewModels/ChatViewModel.swift new file mode 100644 index 0000000..bedd52f --- /dev/null +++ b/SwiftChat/ViewModels/ChatViewModel.swift @@ -0,0 +1,933 @@ +// +// ChatViewModel.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import Foundation +import Combine +import SwiftUI +import OpenAI +@_spi(Generated) import OpenAPIRuntime + +@MainActor +class ChatViewModel: ObservableObject { + private static let citationMarkerRegex = try? NSRegularExpression(pattern: "【(\\d+)[^】]*】", options: []) + + // Published properties for UI updates + @Published var chats: [Chat] = [] + @Published var currentChat: Chat? + @Published var isLoading: Bool = false + @Published var thinkingSummary: String = "" + @Published var webSearchSummary: String = "" + @Published var scrollTargetMessageId: String? = nil + @Published var scrollTargetOffset: CGFloat = 0 + @Published var shouldFocusInput: Bool = false + @Published var isScrollInteractionActive: Bool = false + @Published var isAtBottom: Bool = true + @Published var scrollToBottomTrigger: UUID = UUID() + @Published var scrollToUserMessageTrigger: UUID = UUID() + @Published var isWebSearchEnabled: Bool = false + @Published var imageViewerImages: [Attachment] = [] + @Published var imageViewerIndex: Int = 0 + @Published var showImageViewer: Bool = false + @Published var editRequestedForMessageIndex: Int? = nil + + // Model properties + @Published var currentModel: ModelType + + // Attachment properties + @Published var pendingAttachments: [Attachment] = [] + @Published var isProcessingAttachment: Bool = false + @Published var attachmentError: String? = nil + @Published var pendingImageThumbnails: [String: String] = [:] + + var messages: [Message] { + currentChat?.messages ?? [] + } + + // Private properties + private var client: OpenAI? + private var currentTask: Task? + private var streamUpdateTimer: Timer? + private var pendingStreamUpdate: Chat? + private var networkStatusCancellable: AnyCancellable? + + init() { + guard let model = AppConfig.shared.currentModel ?? AppConfig.shared.availableModels.first else { + fatalError("ChatViewModel cannot be initialized without available models.") + } + self.currentModel = model + self.isWebSearchEnabled = SettingsManager.shared.webSearchEnabled + + // Create initial blank chat + let newChat = Chat.create(modelType: currentModel) + currentChat = newChat + chats = [newChat] + + setupClient() + setupNetworkStatusObserver() + } + + deinit { + streamUpdateTimer?.invalidate() + networkStatusCancellable?.cancel() + } + + // MARK: - Client Setup + + private func setupClient() { + client = AppConfig.shared.makeClient() + } + + func retryClientSetup() { + guard client == nil else { return } + guard !isLoading else { + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in + self?.retryClientSetup() + } + return + } + setupClient() + } + + private func setupNetworkStatusObserver() { + networkStatusCancellable = AppConfig.shared.networkMonitor.$isConnected + .dropFirst() + .removeDuplicates() + .sink { [weak self] isConnected in + guard let self = self, isConnected else { return } + guard self.client == nil else { return } + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in + self?.retryClientSetup() + } + } + } + + // MARK: - Chat Management + + func createNewChat(language: String? = nil, modelType: ModelType? = nil, focusInput: Bool = true) { + if isLoading { cancelGeneration() } + + // Check if we already have a blank chat + if let existing = chats.first(where: { $0.isBlankChat }) { + selectChat(existing) + shouldFocusInput = focusInput + return + } + + let newChat = Chat.create(modelType: modelType ?? currentModel, language: language) + chats.insert(newChat, at: 0) + selectChat(newChat) + shouldFocusInput = focusInput + } + + func selectChat(_ chat: Chat) { + if isLoading { cancelGeneration() } + + if let index = chats.firstIndex(where: { $0.id == chat.id }) { + currentChat = chats[index] + } else { + currentChat = chat + chats.append(chat) + } + + if currentModel != chat.modelType { + changeModel(to: chat.modelType, shouldUpdateChat: false) + } + } + + func deleteChat(_ id: String) { + if let index = chats.firstIndex(where: { $0.id == id }) { + chats.remove(at: index) + } + + if currentChat?.id == id { + if let first = chats.first { + currentChat = first + } else { + createNewChat() + } + } + } + + func updateChatTitle(_ id: String, newTitle: String) { + guard let index = chats.firstIndex(where: { $0.id == id }) else { return } + let trimmed = newTitle.trimmingCharacters(in: .whitespacesAndNewlines) + if trimmed.isEmpty { + chats[index].title = Chat.placeholderTitle + chats[index].titleState = .placeholder + } else { + chats[index].title = trimmed + chats[index].titleState = .manual + } + if currentChat?.id == id { + currentChat = chats[index] + } + } + + // MARK: - Message Sending + + func sendMessage(text: String) { + guard !isLoading else { return } + let hasText = !text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty + let hasAttachments = !pendingAttachments.isEmpty + guard hasText || hasAttachments else { return } + + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + + isLoading = true + + let messageAttachments = pendingAttachments + clearPendingAttachments() + + let userMessage = Message(role: .user, content: text, attachments: messageAttachments) + addMessage(userMessage) + + generateResponse() + } + + // MARK: - Attachment Management + + func addImageAttachment(data: Data, fileName: String) { + isProcessingAttachment = true + attachmentError = nil + + let attachmentId = UUID().uuidString.lowercased() + var attachment = Attachment( + id: attachmentId, + type: .image, + fileName: fileName, + fileSize: Int64(data.count), + processingState: .processing + ) + pendingAttachments.append(attachment) + + Task { + // Simple image processing — resize and compress + guard let uiImage = UIImage(data: data) else { + attachment.processingState = .failed + if let index = pendingAttachments.firstIndex(where: { $0.id == attachmentId }) { + pendingAttachments[index] = attachment + } + attachmentError = "Failed to load image" + isProcessingAttachment = false + return + } + + let maxDim = Constants.Attachments.maxImageDimension + let scale = min(maxDim / max(uiImage.size.width, uiImage.size.height), 1.0) + let newSize = CGSize(width: uiImage.size.width * scale, height: uiImage.size.height * scale) + + UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) + uiImage.draw(in: CGRect(origin: .zero, size: newSize)) + let resized = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + guard let compressed = resized?.jpegData(compressionQuality: Constants.Attachments.imageCompressionQuality) else { + attachment.processingState = .failed + if let index = pendingAttachments.firstIndex(where: { $0.id == attachmentId }) { + pendingAttachments[index] = attachment + } + attachmentError = "Failed to compress image" + isProcessingAttachment = false + return + } + + attachment.mimeType = Constants.Attachments.defaultImageMimeType + attachment.base64 = compressed.base64EncodedString() + attachment.fileSize = Int64(compressed.count) + attachment.processingState = .completed + + let sizeKB = compressed.count / 1024 + attachment.description = "\(fileName) — \(Int(newSize.width))x\(Int(newSize.height)) JPEG, \(sizeKB) KB" + + // Generate thumbnail + let thumbMax = Constants.Attachments.thumbnailMaxDimension + let thumbScale = min(thumbMax / max(newSize.width, newSize.height), 1.0) + let thumbSize = CGSize(width: newSize.width * thumbScale, height: newSize.height * thumbScale) + UIGraphicsBeginImageContextWithOptions(thumbSize, false, 1.0) + resized?.draw(in: CGRect(origin: .zero, size: thumbSize)) + let thumb = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + attachment.thumbnailBase64 = thumb?.jpegData(compressionQuality: 0.6)?.base64EncodedString() + + if let index = pendingAttachments.firstIndex(where: { $0.id == attachmentId }) { + pendingAttachments[index] = attachment + } + if let tb = attachment.thumbnailBase64 { + pendingImageThumbnails[attachmentId] = tb + } + isProcessingAttachment = false + } + } + + func addDocumentAttachment(url: URL, fileName: String) { + isProcessingAttachment = true + attachmentError = nil + + let attachmentId = UUID().uuidString.lowercased() + var attachment = Attachment( + id: attachmentId, + type: .document, + fileName: fileName, + processingState: .processing + ) + pendingAttachments.append(attachment) + + Task { + do { + let accessing = url.startAccessingSecurityScopedResource() + defer { if accessing { url.stopAccessingSecurityScopedResource() } } + + let text = try String(contentsOf: url, encoding: .utf8) + let fileSize = (try? FileManager.default.attributesOfItem(atPath: url.path)[.size] as? Int64) ?? 0 + + attachment.textContent = text + attachment.fileSize = fileSize + attachment.processingState = .completed + + if let index = pendingAttachments.firstIndex(where: { $0.id == attachmentId }) { + pendingAttachments[index] = attachment + } + } catch { + attachment.processingState = .failed + if let index = pendingAttachments.firstIndex(where: { $0.id == attachmentId }) { + pendingAttachments[index] = attachment + } + attachmentError = error.localizedDescription + } + isProcessingAttachment = false + } + } + + func removePendingAttachment(id: String) { + pendingAttachments.removeAll { $0.id == id } + pendingImageThumbnails.removeValue(forKey: id) + if pendingAttachments.isEmpty { attachmentError = nil } + } + + func clearPendingAttachments() { + pendingAttachments.removeAll() + pendingImageThumbnails.removeAll() + attachmentError = nil + isProcessingAttachment = false + } + + // MARK: - Response Generation + + private func generateResponse() { + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + isLoading = true + + let assistantMessage = Message(role: .assistant, content: "", isCollapsed: true) + addMessage(assistantMessage) + + if var chat = currentChat { + chat.hasActiveStream = true + replaceChat(chat) + currentChat = chat + } + + let streamChatId = currentChat?.id + currentTask?.cancel() + + currentTask = Task { + var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid + backgroundTaskId = UIApplication.shared.beginBackgroundTask(withName: "CompleteStreamingResponse") { + UIApplication.shared.endBackgroundTask(backgroundTaskId) + backgroundTaskId = .invalid + } + defer { + if backgroundTaskId != .invalid { + UIApplication.shared.endBackgroundTask(backgroundTaskId) + } + } + + var hasRetriedWithFreshKey = false + + retryLoop: do { + if client == nil { setupClient() } + + guard let client = client else { + throw NSError(domain: "ChatApp", code: 1, + userInfo: [NSLocalizedDescriptionKey: "Client not initialized. Check your API key."]) + } + + let modelId = currentModel.modelName + let settingsManager = SettingsManager.shared + + var systemPrompt: String + if settingsManager.isUsingCustomPrompt && !settingsManager.customSystemPrompt.isEmpty { + systemPrompt = settingsManager.customSystemPrompt + } else { + systemPrompt = AppConfig.shared.systemPrompt + } + + systemPrompt = systemPrompt.replacingOccurrences(of: "{MODEL_NAME}", with: currentModel.fullName) + + let languageToUse = settingsManager.selectedLanguage != "System" ? settingsManager.selectedLanguage : "English" + systemPrompt = systemPrompt.replacingOccurrences(of: "{LANGUAGE}", with: languageToUse) + systemPrompt = systemPrompt.replacingOccurrences(of: "{USER_PREFERENCES}", with: "") + + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" + let currentDateTime = dateFormatter.string(from: Date()) + let timezone = TimeZone.current.abbreviation() ?? TimeZone.current.identifier + systemPrompt = systemPrompt.replacingOccurrences(of: "{CURRENT_DATETIME}", with: currentDateTime) + systemPrompt = systemPrompt.replacingOccurrences(of: "{TIMEZONE}", with: timezone) + + var processedRules = AppConfig.shared.rules + if !processedRules.isEmpty { + processedRules = processedRules.replacingOccurrences(of: "{MODEL_NAME}", with: currentModel.fullName) + processedRules = processedRules.replacingOccurrences(of: "{LANGUAGE}", with: languageToUse) + processedRules = processedRules.replacingOccurrences(of: "{USER_PREFERENCES}", with: "") + processedRules = processedRules.replacingOccurrences(of: "{CURRENT_DATETIME}", with: currentDateTime) + processedRules = processedRules.replacingOccurrences(of: "{TIMEZONE}", with: timezone) + } + + let chatQuery = ChatQueryBuilder.buildQuery( + modelId: modelId, + systemPrompt: systemPrompt, + rules: processedRules, + conversationMessages: self.messages, + maxMessages: settingsManager.maxMessages, + webSearchEnabled: self.isWebSearchEnabled, + isMultimodal: self.currentModel.isMultimodal + ) + + var collectedSources: [WebSearchSource] = [] + + let stream: AsyncThrowingStream = client.responses.createResponseStreaming(query: chatQuery) + + var thinkStartTime: Date? = nil + var thoughtsBuffer = "" + var isInThinkingMode = false + var responseContent = "" + var currentThoughts: String? = nil + var generationTimeSeconds: TimeInterval? = nil + let hapticEnabled = SettingsManager.shared.hapticFeedbackEnabled + var hapticGenerator: UIImpactFeedbackGenerator? + var lastHapticTime = Date.distantPast + let minHapticInterval: TimeInterval = 0.1 + let chunker = StreamingMarkdownChunker() + let thinkingChunker = ThinkingTextChunker() + var hapticChunkCount = 0 + var hasStartedResponse = false + var lastUIUpdateTime = Date.distantPast + let uiUpdateInterval: TimeInterval = 0.033 + + await MainActor.run { + if let chat = self.currentChat, + !chat.messages.isEmpty, + let lastIndex = chat.messages.indices.last { + responseContent = chat.messages[lastIndex].content + currentThoughts = chat.messages[lastIndex].thoughts + generationTimeSeconds = chat.messages[lastIndex].generationTimeSeconds + isInThinkingMode = chat.messages[lastIndex].isThinking + } + if hapticEnabled { + hapticGenerator = UIImpactFeedbackGenerator(style: .light) + hapticGenerator?.prepare() + } + } + + for try await event in stream { + if Task.isCancelled { break } + + // Haptic feedback + if hapticEnabled, let generator = hapticGenerator { + if hapticChunkCount < 5 { + let now = Date() + if now.timeIntervalSince(lastHapticTime) >= minHapticInterval { + generator.impactOccurred(intensity: 0.5) + lastHapticTime = now + hapticChunkCount += 1 + } + } + if !isInThinkingMode && !hasStartedResponse { + hasStartedResponse = true + hapticChunkCount = 0 + } + } + + var didMutateState = false + + switch event { + case .outputText(.delta(let textEvent)): + let content = textEvent.delta + if !content.isEmpty { + if isInThinkingMode { + if let startTime = thinkStartTime { + generationTimeSeconds = Date().timeIntervalSince(startTime) + } + isInThinkingMode = false + thinkStartTime = nil + thinkingChunker.finalize() + currentThoughts = thoughtsBuffer.isEmpty ? nil : thoughtsBuffer + Task { @MainActor [weak self] in + ThinkingSummaryService.shared.reset() + self?.thinkingSummary = "" + } + } + responseContent += content + chunker.appendToken(content) + didMutateState = true + if !hasStartedResponse { + hasStartedResponse = true + hapticChunkCount = 0 + } + } + + case .reasoning(.delta(let reasoningEvent)): + let text = (reasoningEvent.delta.value as? [String: Any])?["text"] as? String ?? "" + if !text.isEmpty { + if !isInThinkingMode { + isInThinkingMode = true + thinkStartTime = Date() + Task { @MainActor in ThinkingSummaryService.shared.reset() } + } + thoughtsBuffer += text + thinkingChunker.appendToken(text) + currentThoughts = thoughtsBuffer.isEmpty ? nil : thoughtsBuffer + didMutateState = true + let currentThoughtsForSummary = thoughtsBuffer + Task { @MainActor [weak self] in + ThinkingSummaryService.shared.generateSummary(thoughts: currentThoughtsForSummary) { summary in + self?.thinkingSummary = summary + } + } + } + + case .outputTextAnnotation(.added(let annotationEvent)): + if let dict = annotationEvent.annotation.value as? [String: Any], + let type = dict["type"] as? String, + type == "url_citation", + let url = dict["url"] as? String { + let title = dict["title"] as? String ?? url + collectedSources.append(WebSearchSource(title: title, url: url)) + didMutateState = true + } + + case .webSearchCall(.inProgress(_)), .webSearchCall(.searching(_)): + Task { @MainActor [weak self] in + guard let self = self else { return } + guard var chat = self.currentChat, + !chat.messages.isEmpty, + let lastIndex = chat.messages.indices.last else { return } + if chat.messages[lastIndex].webSearchState == nil { + chat.messages[lastIndex].webSearchState = WebSearchState(status: .searching) + } + self.webSearchSummary = "Searching the web..." + self.replaceChat(chat) + self.currentChat = chat + } + + case .webSearchCall(.completed(_)): + Task { @MainActor [weak self] in + guard let self = self else { return } + guard var chat = self.currentChat, + !chat.messages.isEmpty, + let lastIndex = chat.messages.indices.last else { return } + chat.messages[lastIndex].webSearchState?.status = .completed + self.webSearchSummary = "" + self.replaceChat(chat) + self.currentChat = chat + } + + default: + break + } + + // Throttled UI update + let now = Date() + if didMutateState && now.timeIntervalSince(lastUIUpdateTime) >= uiUpdateInterval { + lastUIUpdateTime = now + let currentChunks = chunker.getAllChunks() + let currentThinkingChunks = thinkingChunker.getAllChunks() + let capturedContent = responseContent + let capturedThoughts = currentThoughts + let capturedThinking = isInThinkingMode + let capturedGenTime = generationTimeSeconds + let capturedSources = collectedSources + + Task { @MainActor [weak self] in + guard let self = self else { return } + guard self.currentChat?.id == streamChatId else { return } + guard var chat = self.currentChat, + chat.hasActiveStream, + !chat.messages.isEmpty, + let lastIndex = chat.messages.indices.last else { return } + + let processedContent = self.processCitationMarkers(capturedContent, sources: capturedSources) + let processedChunks = self.processChunksWithCitations(currentChunks, sources: capturedSources) + + chat.messages[lastIndex].content = processedContent + chat.messages[lastIndex].thoughts = capturedThoughts + chat.messages[lastIndex].thinkingChunks = currentThinkingChunks + chat.messages[lastIndex].isThinking = capturedThinking + chat.messages[lastIndex].generationTimeSeconds = capturedGenTime + chat.messages[lastIndex].contentChunks = processedChunks + + if !capturedSources.isEmpty { + var searchState = chat.messages[lastIndex].webSearchState ?? WebSearchState(status: .searching) + searchState.sources = capturedSources + chat.messages[lastIndex].webSearchState = searchState + } + + self.replaceChat(chat) + self.currentChat = chat + } + } + } + + // Handle remaining thinking content when stream ends + if isInThinkingMode && !thoughtsBuffer.isEmpty { + currentThoughts = thoughtsBuffer.isEmpty ? nil : thoughtsBuffer + if responseContent.isEmpty { + responseContent = thoughtsBuffer + currentThoughts = nil + } + if let startTime = thinkStartTime { generationTimeSeconds = Date().timeIntervalSince(startTime) } + isInThinkingMode = false + } + + // Finalize message + await MainActor.run { + guard var chat = self.currentChat, chat.id == streamChatId else { + self.isLoading = false + return + } + chat.hasActiveStream = false + + ThinkingSummaryService.shared.reset() + self.thinkingSummary = "" + self.webSearchSummary = "" + + if !chat.messages.isEmpty, let lastIndex = chat.messages.indices.last { + chunker.finalize() + thinkingChunker.finalize() + let processedContent = self.processCitationMarkers(responseContent, sources: collectedSources) + chat.messages[lastIndex].content = processedContent + chat.messages[lastIndex].thoughts = currentThoughts + chat.messages[lastIndex].thinkingChunks = thinkingChunker.getAllChunks() + chat.messages[lastIndex].isThinking = false + chat.messages[lastIndex].generationTimeSeconds = generationTimeSeconds + let processedChunks = self.processChunksWithCitations(chunker.getAllChunks(), sources: collectedSources) + chat.messages[lastIndex].contentChunks = processedChunks + if !collectedSources.isEmpty { + var searchState = chat.messages[lastIndex].webSearchState ?? WebSearchState(status: .searching) + searchState.sources = collectedSources + chat.messages[lastIndex].webSearchState = searchState + } + } + + self.replaceChat(chat) + self.currentChat = chat + self.isLoading = false + + // Generate title if needed + if chat.needsGeneratedTitle && chat.messages.count >= 2 { + Task { + if let generated = await self.generateLLMTitle(from: chat.messages) { + if var updatedChat = self.chats.first(where: { $0.id == chat.id }) { + updatedChat.title = generated + updatedChat.titleState = .generated + self.replaceChat(updatedChat) + if self.currentChat?.id == updatedChat.id { + self.currentChat = updatedChat + } + Chat.triggerSuccessFeedback() + } + } + } + } + } + } catch { + let shouldRetry = await MainActor.run { + if !hasRetriedWithFreshKey && ChatViewModel.isAuthenticationError(error) { return true } + return false + } + + if shouldRetry { + hasRetriedWithFreshKey = true + await self.refreshClientForRetry() + if await MainActor.run(body: { self.client != nil }) { + continue retryLoop + } + } + + await MainActor.run { + self.isLoading = false + self.thinkingSummary = "" + self.webSearchSummary = "" + + if var chat = self.currentChat, chat.id == streamChatId { + chat.hasActiveStream = false + if !chat.messages.isEmpty { + let lastIndex = chat.messages.count - 1 + chat.messages[lastIndex].streamError = self.formatUserFriendlyError(error) + chat.messages[lastIndex].isRequestError = self.isRequestError(error) + } + self.replaceChat(chat) + self.currentChat = chat + } + } + } + } + } + + func cancelGeneration() { + currentTask?.cancel() + currentTask = nil + isLoading = false + thinkingSummary = "" + webSearchSummary = "" + + if var chat = currentChat { + chat.hasActiveStream = false + replaceChat(chat) + currentChat = chat + } + } + + func regenerateLastResponse() { + guard let chat = currentChat, !isLoading else { return } + guard let lastUserMessageIndex = chat.messages.lastIndex(where: { $0.role == .user }) else { return } + + var updatedChat = chat + updatedChat.messages = Array(chat.messages.prefix(lastUserMessageIndex + 1)) + replaceChat(updatedChat) + currentChat = updatedChat + + isScrollInteractionActive = false + scrollToUserMessageTrigger = UUID() + generateResponse() + } + + func editMessage(at messageIndex: Int, newContent: String) { + guard let chat = currentChat, + !isLoading, + messageIndex >= 0, + messageIndex < chat.messages.count, + chat.messages[messageIndex].role == .user else { return } + + let trimmedContent = newContent.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmedContent.isEmpty else { return } + + var updatedChat = chat + updatedChat.messages = Array(chat.messages.prefix(messageIndex)) + replaceChat(updatedChat) + currentChat = updatedChat + + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + isLoading = true + + let userMessage = Message(role: .user, content: trimmedContent) + addMessage(userMessage) + generateResponse() + } + + func regenerateMessage(at messageIndex: Int) { + guard let chat = currentChat, + !isLoading, + messageIndex >= 0, + messageIndex < chat.messages.count, + chat.messages[messageIndex].role == .user else { return } + + var updatedChat = chat + updatedChat.messages = Array(chat.messages.prefix(messageIndex + 1)) + replaceChat(updatedChat) + currentChat = updatedChat + + isScrollInteractionActive = false + scrollToUserMessageTrigger = UUID() + generateResponse() + } + + // MARK: - Model Management + + func changeModel(to modelType: ModelType, shouldUpdateChat: Bool = true) { + guard modelType != currentModel else { return } + currentTask?.cancel() + currentTask = nil + isLoading = false + + self.currentModel = modelType + AppConfig.shared.currentModel = modelType + + if shouldUpdateChat, var chat = currentChat { + chat.modelType = modelType + replaceChat(chat) + currentChat = chat + } + } + + // MARK: - Thoughts Collapse + + func setThoughtsCollapsed(for messageId: String, collapsed: Bool) { + guard var chat = currentChat, + let messageIndex = chat.messages.firstIndex(where: { $0.id == messageId }) else { return } + guard chat.messages[messageIndex].isCollapsed != collapsed else { return } + chat.messages[messageIndex].isCollapsed = collapsed + replaceChat(chat) + currentChat = chat + } + + // MARK: - Private Helpers + + private func addMessage(_ message: Message) { + guard var chat = currentChat else { return } + chat.messages.append(message) + replaceChat(chat) + currentChat = chat + } + + private func replaceChat(_ updatedChat: Chat) { + if let index = chats.firstIndex(where: { $0.id == updatedChat.id }) { + chats[index] = updatedChat + } else if !updatedChat.isBlankChat { + chats.insert(updatedChat, at: min(1, chats.count)) + } + } + + private func refreshClientForRetry() async { + setupClient() + } + + private func formatUserFriendlyError(_ error: Error) -> String { + let nsError = error as NSError + if nsError.domain == NSURLErrorDomain { + switch nsError.code { + case NSURLErrorNotConnectedToInternet, NSURLErrorDataNotAllowed: + return "The Internet connection appears to be offline." + case NSURLErrorNetworkConnectionLost: + return "Network connection was lost." + case NSURLErrorTimedOut: + return "Request timed out. Please try again." + default: + return "Network error. Please check your connection." + } + } + if case OpenAIError.statusError(_, let statusCode) = error { + switch statusCode { + case 401: + return "Invalid API key. Please check your key and try again." + case 429: + return "Rate limit exceeded. Please wait a moment and try again." + case 404: + return "Model not found. The selected model may not be available on your plan." + case 500...599: + return "The server encountered an error. Please try again later." + default: + return "Request failed (status \(statusCode)). Please try again." + } + } + if let apiError = error as? APIErrorResponse { + return apiError.error.message + } + return "An error occurred. Please try again." + } + + private func isRequestError(_ error: Error) -> Bool { + if case OpenAIError.statusError(_, let statusCode) = error, + (400...499).contains(statusCode), statusCode != 401 { return true } + return false + } + + static func isAuthenticationError(_ error: Error) -> Bool { + if case OpenAIError.statusError(_, let statusCode) = error, statusCode == 401 { return true } + if let apiError = error as? APIErrorResponse, apiError.error.code == "invalid_api_key" { return true } + return false + } + + private func processChunksWithCitations(_ chunks: [ContentChunk], sources: [WebSearchSource]) -> [ContentChunk] { + chunks.map { chunk in + ContentChunk(id: chunk.id, type: chunk.type, content: processCitationMarkers(chunk.content, sources: sources), isComplete: chunk.isComplete) + } + } + + private func processCitationMarkers(_ content: String, sources: [WebSearchSource]) -> String { + guard !sources.isEmpty else { return content } + guard let regex = Self.citationMarkerRegex else { return content } + + let nsContent = content as NSString + let matches = regex.matches(in: content, options: [], range: NSRange(location: 0, length: nsContent.length)) + guard !matches.isEmpty else { return content } + + var result = "" + var lastEnd = content.startIndex + + for match in matches { + guard let matchRange = Range(match.range, in: content), + let numRange = Range(match.range(at: 1), in: content), + let num = Int(content[numRange]) else { continue } + + let index = num - 1 + guard index >= 0, index < sources.count else { continue } + let source = sources[index] + + let encodedUrl = source.url + .replacingOccurrences(of: "(", with: "%28") + .replacingOccurrences(of: ")", with: "%29") + .replacingOccurrences(of: "|", with: "%7C") + .replacingOccurrences(of: "~", with: "%7E") + let encodedTitle = (source.title + .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? source.title) + .replacingOccurrences(of: "(", with: "%28") + .replacingOccurrences(of: ")", with: "%29") + .replacingOccurrences(of: "~", with: "%7E") + + result += content[lastEnd.. String? { + guard let assistantMessage = messages.first(where: { $0.role == .assistant }), + !assistantMessage.content.isEmpty else { return nil } + + // Use the title model if available, otherwise skip title generation + guard let titleModelConfig = AppConfig.shared.titleModel else { return nil } + + let words = assistantMessage.content.split(separator: " ", omittingEmptySubsequences: true) + let truncatedContent = words.prefix(Constants.TitleGeneration.wordThreshold).joined(separator: " ") + + do { + guard let client = client else { return nil } + + let query = CreateModelResponseQuery( + input: .inputItemList([ + .inputMessage(EasyInputMessage(role: .user, content: .textInput(truncatedContent))) + ]), + model: titleModelConfig.modelName, + instructions: Constants.TitleGeneration.systemPrompt, + maxOutputTokens: 50, + stream: true + ) + + var title = "" + let stream: AsyncThrowingStream = client.responses.createResponseStreaming(query: query) + for try await event in stream { + if case .outputText(.delta(let textEvent)) = event { + title += textEvent.delta + } + } + + let cleaned = title.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "\"", with: "") + return cleaned.isEmpty ? nil : cleaned + } catch { + return nil + } + } +} diff --git a/SwiftChat/Views/AttachmentPreviewBar.swift b/SwiftChat/Views/AttachmentPreviewBar.swift new file mode 100644 index 0000000..89e547c --- /dev/null +++ b/SwiftChat/Views/AttachmentPreviewBar.swift @@ -0,0 +1,132 @@ +// +// AttachmentPreviewBar.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +struct AttachmentPreviewBar: View { + let attachments: [Attachment] + let thumbnails: [String: String] + let onRemove: (String) -> Void + + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 8) { + ForEach(attachments) { attachment in + AttachmentPreviewChip( + attachment: attachment, + thumbnailBase64: thumbnails[attachment.id], + onRemove: { onRemove(attachment.id) } + ) + } + } + } + } +} + +private struct AttachmentPreviewChip: View { + let attachment: Attachment + let thumbnailBase64: String? + let onRemove: () -> Void + + @Environment(\.colorScheme) private var colorScheme + private var isDarkMode: Bool { colorScheme == .dark } + + var body: some View { + HStack(spacing: 8) { + thumbnailOrIcon + .frame(width: Constants.Attachments.previewThumbnailSize, + height: Constants.Attachments.previewThumbnailSize) + .clipShape(RoundedRectangle(cornerRadius: 6)) + + VStack(alignment: .leading, spacing: 2) { + Text(attachment.fileName) + .font(.system(size: 12, weight: .medium)) + .lineLimit(1) + .foregroundColor(isDarkMode ? .white : .black) + + HStack(spacing: 4) { + if attachment.processingState == .processing { + ProgressView() + .scaleEffect(0.6) + .frame(width: 12, height: 12) + Text("Processing...") + .font(.system(size: 10)) + .foregroundColor(.secondary) + } else if attachment.processingState == .failed { + Image(systemName: "exclamationmark.triangle.fill") + .font(.system(size: 10)) + .foregroundColor(.red) + Text("Failed") + .font(.system(size: 10)) + .foregroundColor(.red) + } else { + Text(formattedFileSize) + .font(.system(size: 10)) + .foregroundColor(.secondary) + } + } + } + } + .padding(6) + .background( + RoundedRectangle(cornerRadius: 10) + .fill(isDarkMode ? Color.white.opacity(0.1) : Color.black.opacity(0.05)) + ) + .frame(maxWidth: Constants.Attachments.previewMaxWidth) + .padding(.top, 6) + .padding(.trailing, 6) + .overlay(alignment: .topTrailing) { + Button(action: onRemove) { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 16)) + .foregroundColor(.secondary) + } + } + } + + @ViewBuilder + private var thumbnailOrIcon: some View { + if attachment.type == .image, let base64 = thumbnailBase64, + let data = Data(base64Encoded: base64), + let uiImage = UIImage(data: data) { + Image(uiImage: uiImage) + .resizable() + .aspectRatio(contentMode: .fill) + } else { + ZStack { + RoundedRectangle(cornerRadius: 6) + .fill(isDarkMode ? Color.white.opacity(0.08) : Color.black.opacity(0.06)) + Image(systemName: iconName) + .font(.system(size: 22)) + .foregroundColor(.secondary) + } + } + } + + private var iconName: String { + let ext = (attachment.fileName as NSString).pathExtension.lowercased() + switch ext { + case "pdf": return "doc.richtext" + case "html": return "globe" + case "csv": return "tablecells" + case "md": return "text.document" + default: return "doc.text" + } + } + + private var formattedFileSize: String { + let bytes = attachment.fileSize + if bytes < 1024 { + return "\(bytes) B" + } else if bytes < 1_048_576 { + return String(format: "%.0f KB", Double(bytes) / 1024) + } else { + return String(format: "%.1f MB", Double(bytes) / 1_048_576) + } + } +} diff --git a/SwiftChat/Views/CameraPickerView.swift b/SwiftChat/Views/CameraPickerView.swift new file mode 100644 index 0000000..f6bedaa --- /dev/null +++ b/SwiftChat/Views/CameraPickerView.swift @@ -0,0 +1,50 @@ +// +// CameraPickerView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import UIKit + +/// UIViewControllerRepresentable wrapping UIImagePickerController for camera capture +struct CameraPickerView: UIViewControllerRepresentable { + let onImageCaptured: (UIImage) -> Void + @Environment(\.dismiss) private var dismiss + + func makeUIViewController(context: Context) -> UIImagePickerController { + let picker = UIImagePickerController() + if UIImagePickerController.isSourceTypeAvailable(.camera) { + picker.sourceType = .camera + } + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { + let parent: CameraPickerView + + init(_ parent: CameraPickerView) { + self.parent = parent + } + + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { + if let image = info[.originalImage] as? UIImage { + parent.onImageCaptured(image) + } + parent.dismiss() + } + + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + parent.dismiss() + } + } +} diff --git a/SwiftChat/Views/ChatListView.swift b/SwiftChat/Views/ChatListView.swift new file mode 100644 index 0000000..cf4f599 --- /dev/null +++ b/SwiftChat/Views/ChatListView.swift @@ -0,0 +1,167 @@ +// +// ChatListView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +struct ChatListView: View { + let isDarkMode: Bool + let isLoading: Bool + @ObservedObject var viewModel: SwiftChat.ChatViewModel + @ObservedObject private var settings = SettingsManager.shared + @Binding var messageText: String + + @State private var isAtBottom = true + @State private var userHasScrolled = false + @State private var isKeyboardVisible = false + @State private var keyboardHeight: CGFloat = 0 + @State private var scrollTrigger = UUID() + @State private var scrollToUserTrigger = UUID() + @State private var tableOpacity = 1.0 + + private var messages: [Message] { + viewModel.messages + } + + private var archivedMessagesStartIndex: Int { + max(0, messages.count - settings.maxMessages) + } + + var body: some View { + MessageTableView( + archivedMessagesStartIndex: archivedMessagesStartIndex, + isDarkMode: isDarkMode, + isLoading: isLoading, + viewModel: viewModel, + isAtBottom: $isAtBottom, + userHasScrolled: $userHasScrolled, + scrollTrigger: scrollTrigger, + scrollToUserTrigger: scrollToUserTrigger, + tableOpacity: $tableOpacity, + keyboardHeight: keyboardHeight + ) + .opacity(tableOpacity) + .background(Color.chatBackground(isDarkMode: isDarkMode)) + .overlay(alignment: .bottom) { + if !isAtBottom && !messages.isEmpty && !isKeyboardVisible { + Group { + if #available(iOS 26, *) { + Button(action: { + userHasScrolled = false + viewModel.isScrollInteractionActive = false + scrollTrigger = UUID() + }) { + Image(systemName: "arrow.down") + .font(.system(size: 12, weight: .semibold)) + .frame(width: Constants.UI.scrollToBottomButtonSize, height: Constants.UI.scrollToBottomButtonSize) + } + .buttonStyle(.glass) + .clipShape(Circle()) + } else { + Button(action: { + userHasScrolled = false + viewModel.isScrollInteractionActive = false + scrollTrigger = UUID() + }) { + Image(systemName: "arrow.down.circle.fill") + .font(.system(size: 24)) + .foregroundColor(.white) + .padding(8) + .background(Color.gray.opacity(0.8)) + .clipShape(Circle()) + } + } + } + .padding(.bottom, 16) + .transition(.opacity) + } + } + .safeAreaInset(edge: .bottom, spacing: 0) { + MessageInputView( + messageText: $messageText, + viewModel: viewModel, + isKeyboardVisible: isKeyboardVisible + ) + .environmentObject(viewModel) + .if(UIDevice.current.userInterfaceIdiom == .pad) { view in + HStack { + Spacer() + view.frame(maxWidth: 600) + Spacer() + } + } + } + .onAppear { + setupKeyboardObservers() + } + .onDisappear { + removeKeyboardObservers() + viewModel.isScrollInteractionActive = false + } + .onChange(of: messages.count) { oldCount, newCount in + if newCount > oldCount { + let newMessages = messages.suffix(newCount - oldCount) + let hasUserMessage = newMessages.contains { $0.role == .user } + let wasInitialLoad = oldCount == 0 + + if hasUserMessage || wasInitialLoad { + userHasScrolled = false + viewModel.isScrollInteractionActive = false + if hasUserMessage && viewModel.isLoading { + scrollToUserTrigger = UUID() + } else { + scrollTrigger = UUID() + } + } + } + } + .onChange(of: viewModel.currentChat?.createdAt) { _, _ in + userHasScrolled = false + viewModel.isScrollInteractionActive = false + + let isNewEmptyChat = viewModel.currentChat?.isBlankChat ?? true + + if !isNewEmptyChat { + tableOpacity = 0 + scrollTrigger = UUID() + isAtBottom = true + } else { + tableOpacity = 1.0 + isAtBottom = true + } + } + .onChange(of: viewModel.scrollToBottomTrigger) { _, _ in + userHasScrolled = false + viewModel.isScrollInteractionActive = false + scrollTrigger = UUID() + } + .onChange(of: viewModel.scrollToUserMessageTrigger) { _, _ in + userHasScrolled = false + viewModel.isScrollInteractionActive = false + scrollToUserTrigger = UUID() + } + } + + private func setupKeyboardObservers() { + NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: .main) { notification in + if let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect { + isKeyboardVisible = true + self.keyboardHeight = keyboardFrame.height + } + } + + NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main) { _ in + isKeyboardVisible = false + keyboardHeight = 0 + } + } + + private func removeKeyboardObservers() { + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil) + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) + } +} diff --git a/SwiftChat/Views/ChatSidebar.swift b/SwiftChat/Views/ChatSidebar.swift new file mode 100644 index 0000000..a3b99c2 --- /dev/null +++ b/SwiftChat/Views/ChatSidebar.swift @@ -0,0 +1,241 @@ +// +// ChatSidebar.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import Combine + +struct ChatSidebar: View { + @Environment(\.colorScheme) var colorScheme + @Binding var isOpen: Bool + @ObservedObject var viewModel: SwiftChat.ChatViewModel + @State private var editingChatId: String? = nil + @State private var editingTitle: String = "" + @State private var deletingChatId: String? = nil + @State private var showDeleteAlert: Bool = false + + // Timer to update relative time strings + @State private var timeUpdateTimer = Timer.publish(every: 30, on: .main, in: .common).autoconnect() + @State private var currentTime = Date() + + private func relativeTimeString(from date: Date) -> String { + let now = currentTime + let difference = now.timeIntervalSince(date) + + if difference < 60 { + return "Just now" + } else if difference < 3600 { + let minutes = Int(difference / 60) + return "\(minutes)m ago" + } else if difference < 86400 { + let hours = Int(difference / 3600) + return "\(hours)h ago" + } else if difference < 604800 { + let days = Int(difference / 86400) + return "\(days)d ago" + } else if difference < 2592000 { + let weeks = Int(difference / 604800) + return "\(weeks)w ago" + } else { + let months = Int(difference / 2592000) + return "\(months)mo ago" + } + } + + var body: some View { + sidebarContent + .frame(width: 300) + .background(colorScheme == .dark ? Color.sidebarBackground(for: colorScheme) : Color.white) + .ignoresSafeArea(edges: .bottom) + .onReceive(timeUpdateTimer) { _ in + currentTime = Date() + } + .alert("Delete Chat", isPresented: $showDeleteAlert) { + Button("Cancel", role: .cancel) { + deletingChatId = nil + } + Button("Delete", role: .destructive) { + if let id = deletingChatId { + viewModel.deleteChat(id) + if viewModel.chats.isEmpty { + viewModel.createNewChat() + } + } + deletingChatId = nil + } + } + } + + private var sidebarContent: some View { + VStack(spacing: 0) { + // Chat History Header + VStack(alignment: .leading, spacing: 4) { + Text("Chat History") + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.secondary) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 16) + .padding(.vertical, 16) + .overlay( + Divider() + .background(Color.gray.opacity(0.3)), + alignment: .bottom + ) + + // Chat List + ScrollView { + LazyVStack(spacing: 12) { + ForEach(Array(viewModel.chats.enumerated()), id: \.element.id) { index, chat in + ChatListItem( + chat: chat, + isSelected: viewModel.currentChat?.id == chat.id, + isEditing: editingChatId == chat.id, + editingTitle: $editingTitle, + timeString: chat.isBlankChat ? "" : relativeTimeString(from: chat.createdAt), + onSelect: { + viewModel.selectChat(chat) + }, + onEdit: { + if editingChatId == chat.id { + viewModel.updateChatTitle(chat.id, newTitle: editingTitle) + editingChatId = nil + } else { + startEditing(chat) + } + }, + onDelete: { confirmDelete(chat) }, + showEditDelete: !chat.isBlankChat + ) + } + } + .padding(.horizontal, 16) + .padding(.top, 8) + .padding(.bottom, 8) + } + .applyAlwaysBounceIfAvailable() + .frame(maxHeight: .infinity) + + Divider() + .background(Color.gray.opacity(0.3)) + } + .frame(maxHeight: .infinity, alignment: .top) + } + + private func startEditing(_ chat: Chat) { + editingChatId = chat.id + editingTitle = chat.title + } + + private func confirmDelete(_ chat: Chat) { + deletingChatId = chat.id + showDeleteAlert = true + } +} + +// MARK: - Helpers + +private extension View { + @ViewBuilder + func applyAlwaysBounceIfAvailable() -> some View { + if #available(iOS 16.0, *) { + self.scrollBounceBehavior(.always) + } else { + self + } + } +} + +struct ChatListItem: View { + let chat: Chat + let isSelected: Bool + let isEditing: Bool + @Binding var editingTitle: String + let timeString: String + let onSelect: () -> Void + let onEdit: () -> Void + let onDelete: () -> Void + let showEditDelete: Bool + + var body: some View { + Button(action: onSelect) { + VStack(alignment: .leading, spacing: 2) { + HStack { + if isEditing { + TextField("Chat Title", text: $editingTitle) + .textFieldStyle(PlainTextFieldStyle()) + .foregroundColor(.primary) + .onSubmit { onEdit() } + + HStack(spacing: 12) { + Button(action: onEdit) { + Image(systemName: "checkmark") + .foregroundColor(.primary) + } + Button(action: { editingTitle = chat.title; onEdit() }) { + Image(systemName: "xmark") + .foregroundColor(.primary) + } + } + } else { + HStack(spacing: 4) { + Text(chat.title) + .foregroundColor(.primary) + .lineLimit(1) + + if chat.isBlankChat { + Circle() + .fill(Color.blue) + .frame(width: 8, height: 8) + } + + Spacer() + } + + if isSelected && showEditDelete { + HStack(spacing: 12) { + Button(action: onEdit) { + Image(systemName: "square.and.pencil") + .foregroundColor(.gray) + } + Button(action: onDelete) { + Image(systemName: "trash") + .foregroundColor(.gray) + } + } + } + } + } + + if !isEditing { + if !timeString.isEmpty { + Text(timeString) + .font(.caption) + .foregroundColor(.gray) + } else { + Text(" ") + .font(.caption) + .frame(height: 14) + } + } + } + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(isSelected ? Color(UIColor.secondarySystemBackground) : Color(UIColor.secondarySystemBackground).opacity(0.3)) + ) + .overlay( + RoundedRectangle(cornerRadius: 8) + .strokeBorder(Color.gray.opacity(0.1), lineWidth: 1) + ) + } +} diff --git a/SwiftChat/Views/ChatView.swift b/SwiftChat/Views/ChatView.swift new file mode 100644 index 0000000..9c40829 --- /dev/null +++ b/SwiftChat/Views/ChatView.swift @@ -0,0 +1,340 @@ +// +// ChatView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + + +import SwiftUI + + +// MARK: - ChatContainer + +/// The primary SwiftUI container that holds the main chat interface and sidebar navigation. +struct ChatContainer: View { + @Environment(\.colorScheme) var colorScheme + @EnvironmentObject private var viewModel: SwiftChat.ChatViewModel + @StateObject private var settings = SettingsManager.shared + + @State private var isSidebarOpen = UIDevice.current.userInterfaceIdiom == .pad + @State private var messageText = "" + @State private var dragOffset: CGFloat = 0 + + // Sidebar constants + private let sidebarWidth: CGFloat = 300 + + private var toolbarContentColor: Color { + colorScheme == .dark ? Color.white : Color.black + } + + var body: some View { + NavigationView { + mainContent + .background(Color.chatBackground(isDarkMode: colorScheme == .dark)) + } + .navigationViewStyle(.stack) + .environmentObject(viewModel) + .onAppear { + setupNavigationBarAppearance() + isSidebarOpen = false + dragOffset = 0 + } + .onChange(of: colorScheme) { _, _ in + setupNavigationBarAppearance() + } + .onReceive(NotificationCenter.default.publisher(for: UIApplication.willResignActiveNotification)) { _ in + withAnimation(.easeOut(duration: 0.2)) { + dragOffset = 0 + } + } + .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in + withAnimation(.easeOut(duration: 0.2)) { + isSidebarOpen = false + dragOffset = 0 + } + } + .fullScreenCover(isPresented: $viewModel.showImageViewer) { + ImageViewerOverlay( + images: viewModel.imageViewerImages, + initialIndex: viewModel.imageViewerIndex, + onDismiss: { viewModel.showImageViewer = false } + ) + } + } + + /// Configure navigation bar appearance + private func setupNavigationBarAppearance() { + if #available(iOS 26, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithTransparentBackground() + appearance.shadowColor = .clear + updateAllNavigationBars(with: appearance) + } else { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = colorScheme == .dark ? UIColor(Color.backgroundPrimary) : .white + appearance.shadowColor = .clear + updateAllNavigationBars(with: appearance) + } + } + + private func updateAllNavigationBars(with appearance: UINavigationBarAppearance) { + let tintColor: UIColor = colorScheme == .dark ? .white : .black + UINavigationBar.appearance().standardAppearance = appearance + UINavigationBar.appearance().compactAppearance = appearance + UINavigationBar.appearance().scrollEdgeAppearance = appearance + UINavigationBar.appearance().tintColor = tintColor + + for scene in UIApplication.shared.connectedScenes { + if let windowScene = scene as? UIWindowScene { + for window in windowScene.windows { + if let navigationBar = window.rootViewController?.navigationController?.navigationBar { + navigationBar.standardAppearance = appearance + navigationBar.compactAppearance = appearance + navigationBar.scrollEdgeAppearance = appearance + navigationBar.tintColor = tintColor + } + } + } + } + } + + /// The main content layout including chat area and sidebar + private var mainContent: some View { + Group { + if UIDevice.current.userInterfaceIdiom == .pad { + GeometryReader { geometry in + HStack(spacing: 0) { + if isSidebarOpen { + ChatSidebar(isOpen: $isSidebarOpen, viewModel: viewModel) + .frame(width: sidebarWidth) + .transition(.move(edge: .leading)) + } + chatArea + .frame(width: isSidebarOpen ? geometry.size.width - sidebarWidth : geometry.size.width) + } + } + .animation(.easeInOut(duration: 0.3), value: isSidebarOpen) + } else { + ZStack { + chatArea + sidebarLayer + } + } + } + .navigationBarTitleDisplayMode(.inline) + .applyTransparentToolbarIfAvailable() + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: toggleSidebar) { + MenuToXButton(isX: isSidebarOpen) + .frame(width: 24, height: 24) + .foregroundColor(toolbarContentColor) + } + } + ToolbarItem(placement: .principal) { + Text("SwiftChat") + .font(.system(size: 17, weight: .semibold)) + .foregroundColor(toolbarContentColor) + .opacity(isSidebarOpen ? 1 : 0) + .animation(.easeInOut(duration: 0.2), value: isSidebarOpen) + } + if !(viewModel.currentChat?.isBlankChat ?? true) { + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: createNewChat) { + Image(systemName: "plus") + .font(.system(size: 18, weight: .medium)) + .foregroundColor(toolbarContentColor) + } + } + } + } + .gesture( + UIDevice.current.userInterfaceIdiom == .phone ? + DragGesture() + .onChanged { gesture in + if isSidebarOpen { + dragOffset = max(-sidebarWidth, min(0, gesture.translation.width)) + } else { + dragOffset = max(0, min(sidebarWidth, gesture.translation.width)) + } + } + .onEnded { gesture in + let threshold: CGFloat = 100 + withAnimation(.spring(response: 0.3, dampingFraction: 0.75)) { + if isSidebarOpen { + if gesture.translation.width < -threshold { + isSidebarOpen = false + } + } else { + if gesture.translation.width > threshold { + isSidebarOpen = true + dismissKeyboard() + } + } + dragOffset = 0 + } + } : nil + ) + .onChange(of: isSidebarOpen) { _, isOpen in + if !isOpen { dragOffset = 0 } + } + } + + private var chatArea: some View { + ChatListView( + isDarkMode: colorScheme == .dark, + isLoading: viewModel.isLoading, + viewModel: viewModel, + messageText: $messageText + ) + .background(Color.chatBackground(isDarkMode: colorScheme == .dark)) + .ignoresSafeArea(edges: .top) + } + + private var sidebarLayer: some View { + ZStack { + Color.black + .opacity({ + let base = 0.4 + let fraction = (dragOffset / sidebarWidth * 0.4) + return isSidebarOpen ? (base + fraction) : max(0, fraction) + }()) + .ignoresSafeArea() + .allowsHitTesting(isSidebarOpen || abs(dragOffset) > 0.1) + .onTapGesture { + withAnimation { isSidebarOpen = false } + } + + HStack(spacing: 0) { + ChatSidebar(isOpen: $isSidebarOpen, viewModel: viewModel) + .frame(width: sidebarWidth) + .offset(x: isSidebarOpen ? + (0 + dragOffset) : + (-(sidebarWidth + 1) + dragOffset)) + Spacer() + } + } + .animation(.easeInOut, value: isSidebarOpen) + } + + // MARK: - Actions + + private func toggleSidebar() { + withAnimation { + isSidebarOpen.toggle() + if isSidebarOpen { dismissKeyboard() } + } + } + + private func dismissKeyboard() { + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + + private func createNewChat() { + if !viewModel.messages.isEmpty { + let language = settings.selectedLanguage == "System" ? nil : settings.selectedLanguage + viewModel.createNewChat(language: language) + messageText = "" + } + } +} + +// MARK: - WelcomeView + +struct WelcomeView: View { + let isDarkMode: Bool + + var body: some View { + VStack(spacing: 24) { + VStack(spacing: 16) { + Text("Start a conversation") + .font(.title) + .fontWeight(.semibold) + .multilineTextAlignment(.center) + } + .padding(.horizontal, 32) + } + .padding(.top, 24) + .padding(.bottom, 4) + } +} + +// MARK: - Helper Views + +/// Animated button that transforms between a menu icon and an X +struct MenuToXButton: View { + let isX: Bool + + var body: some View { + ZStack { + Rectangle() + .frame(width: 18, height: 2) + .rotationEffect(.degrees(isX ? 45 : 0)) + .offset(y: isX ? 0 : -6) + Rectangle() + .frame(width: 18, height: 2) + .opacity(isX ? 0 : 1) + Rectangle() + .frame(width: 18, height: 2) + .rotationEffect(.degrees(isX ? -45 : 0)) + .offset(y: isX ? 0 : 6) + } + .animation(.spring(response: 0.3, dampingFraction: 0.7), value: isX) + } +} + +/// A shape for custom corner rounding +struct RoundedCorner: Shape { + var radius: CGFloat = .infinity + var corners: UIRectCorner = .allCorners + + func path(in rect: CGRect) -> Path { + let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) + return Path(path.cgPath) + } +} + +/// Extension for applying rounded corners to views +extension View { + func corners(_ corners: UIRectCorner) -> some View { + clipShape(RoundedCorner(radius: 15, corners: corners)) + } + + @ViewBuilder func `if`(_ condition: Bool, transform: (Self) -> Content) -> some View { + if condition { + transform(self) + } else { + self + } + } + + @ViewBuilder + func applyTransparentToolbarIfAvailable() -> some View { + if #available(iOS 26, *) { + self.toolbarBackground(.hidden, for: .navigationBar) + } else { + self + } + } +} + +// Helper extension to convert UIView.AnimationCurve to SwiftUI Animation +extension Animation { + init(curve: UIView.AnimationCurve, duration: Double) { + switch curve { + case .easeInOut: + self = .easeInOut(duration: duration) + case .easeIn: + self = .easeIn(duration: duration) + case .easeOut: + self = .easeOut(duration: duration) + case .linear: + self = .linear(duration: duration) + @unknown default: + self = .easeInOut(duration: duration) + } + } +} diff --git a/SwiftChat/Views/DocumentPickerView.swift b/SwiftChat/Views/DocumentPickerView.swift new file mode 100644 index 0000000..b485697 --- /dev/null +++ b/SwiftChat/Views/DocumentPickerView.swift @@ -0,0 +1,69 @@ +// +// DocumentPickerView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import UniformTypeIdentifiers + +struct DocumentPickerView: UIViewControllerRepresentable { + var onDocumentPicked: (URL, String) -> Void + + private static let supportedTypes: [UTType] = [ + .pdf, + .plainText, + .html, + .commaSeparatedText, + UTType(filenameExtension: "md") ?? .plainText + ] + + func makeUIViewController(context: Context) -> UIDocumentPickerViewController { + let picker = UIDocumentPickerViewController(forOpeningContentTypes: Self.supportedTypes) + picker.allowsMultipleSelection = false + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(onDocumentPicked: onDocumentPicked) + } + + class Coordinator: NSObject, UIDocumentPickerDelegate { + let onDocumentPicked: (URL, String) -> Void + + init(onDocumentPicked: @escaping (URL, String) -> Void) { + self.onDocumentPicked = onDocumentPicked + } + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + guard let sourceURL = urls.first else { return } + + let fileName = sourceURL.lastPathComponent + + guard sourceURL.startAccessingSecurityScopedResource() else { + return + } + defer { sourceURL.stopAccessingSecurityScopedResource() } + + let tempDir = FileManager.default.temporaryDirectory + let tempURL = tempDir.appendingPathComponent(UUID().uuidString + "_" + fileName) + + do { + if FileManager.default.fileExists(atPath: tempURL.path) { + try FileManager.default.removeItem(at: tempURL) + } + try FileManager.default.copyItem(at: sourceURL, to: tempURL) + onDocumentPicked(tempURL, fileName) + } catch { + #if DEBUG + print("Failed to copy document to temp directory: \(error)") + #endif + } + } + } +} diff --git a/SwiftChat/Views/LaTeXMarkdownView.swift b/SwiftChat/Views/LaTeXMarkdownView.swift new file mode 100644 index 0000000..f1bd3ae --- /dev/null +++ b/SwiftChat/Views/LaTeXMarkdownView.swift @@ -0,0 +1,1044 @@ +// +// LaTeXMarkdownView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import Textual +import SwiftMath +import UIKit + +private enum SegmentKind: Sendable { + case markdown(String) + case latex(String, isDisplay: Bool) + case table(ParsedTable) +} + + + +private struct ContentSegment: Sendable { + let id: String + let kind: SegmentKind +} + +private struct SegmentView: View { + let segment: ContentSegment + let isDarkMode: Bool + let isStreaming: Bool + + var body: some View { + switch segment.kind { + case .markdown(let text): + // Strip citation markers from text - sources shown separately at message level + // Skip during streaming to avoid catastrophic regex backtracking on incomplete citations + let strippedText = isStreaming ? text : LaTeXMarkdownView.stripCitations(from: text) + StructuredText(markdown: strippedText) + .textual.structuredTextStyle(.gitHub) + .textual.highlighterTheme(isStreaming ? .plain : .default) + .textual.textSelection(.enabled) + .fixedSize(horizontal: false, vertical: true) + .environment(\.colorScheme, isDarkMode ? .dark : .light) + case .latex(let latex, let isDisplay): + LaTeXView( + latex: latex, + isDisplay: isDisplay, + isDarkMode: isDarkMode + ) + case .table(let table): + MarkdownTableView( + table: table, + isDarkMode: isDarkMode + ) + } + } +} + +/// Simple cache for parsed markdown segments +private class MarkdownRenderCache: @unchecked Sendable { + static let shared = MarkdownRenderCache() + + private var cache: [String: [ContentSegment]] = [:] + private let queue = DispatchQueue(label: "com.swiftchat.markdown-cache", attributes: .concurrent) + + init() { + NotificationCenter.default.addObserver( + self, + selector: #selector(handleMemoryWarning), + name: UIApplication.didReceiveMemoryWarningNotification, + object: nil + ) + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + @objc private func handleMemoryWarning() { + clear() + } + + func get(for key: String) -> [ContentSegment]? { + queue.sync { + cache[key] + } + } + + func set(_ segments: [ContentSegment], for key: String) { + queue.async(flags: .barrier) { + self.cache[key] = segments + } + } + + func clear() { + queue.async(flags: .barrier) { + self.cache.removeAll() + } + } +} + +/// A view that renders mixed Markdown and LaTeX content +struct LaTeXMarkdownView: View, Equatable { + let content: String + let isDarkMode: Bool + let horizontalPadding: CGFloat + let maxWidthAlignment: Alignment + let isStreaming: Bool + + @State private var segments: [ContentSegment]? = nil + + // Pre-compiled regex patterns (compiled once, reused across all renders) + private nonisolated(unsafe) static let codeBlockRegex = try? NSRegularExpression(pattern: "```[\\s\\S]*?```", options: []) + private nonisolated(unsafe) static let inlineCodeRegex = try? NSRegularExpression(pattern: "`[^`]+`", options: []) + private nonisolated(unsafe) static let displayLatexRegex = try? NSRegularExpression(pattern: "\\\\\\[(.+?)\\\\\\]", options: [.dotMatchesLineSeparators]) + private nonisolated(unsafe) static let inlineLatexRegex = try? NSRegularExpression(pattern: "\\\\\\((.+?)\\\\\\)", options: []) + static func == (lhs: LaTeXMarkdownView, rhs: LaTeXMarkdownView) -> Bool { + lhs.content == rhs.content && + lhs.isDarkMode == rhs.isDarkMode && + lhs.horizontalPadding == rhs.horizontalPadding && + lhs.maxWidthAlignment == rhs.maxWidthAlignment && + lhs.isStreaming == rhs.isStreaming + } + + init(content: String, isDarkMode: Bool, horizontalPadding: CGFloat = 0, maxWidthAlignment: Alignment = .leading, isStreaming: Bool = false) { + self.content = content + self.isDarkMode = isDarkMode + self.horizontalPadding = horizontalPadding + self.maxWidthAlignment = maxWidthAlignment + self.isStreaming = isStreaming + + // Resolve segments synchronously from cache when available so the + // first render already has the final view tree. This prevents + // UIHostingConfiguration from calculating the cell height based on + // the fallback view and then never recalculating after the async + // .task swaps in the parsed segments. + if !isStreaming { + let cacheKey = "\(content.hashValue)" + if let cached = MarkdownRenderCache.shared.get(for: cacheKey) { + _segments = State(initialValue: cached) + } + } + } + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + if isStreaming { + markdownFallback(content: content) + } else if let segments = segments { + ForEach(segments, id: \.id) { segment in + SegmentView(segment: segment, isDarkMode: isDarkMode, isStreaming: false) + .id(segment.id) + } + } else { + markdownFallback(content: content) + } + } + .environment(\.colorScheme, isDarkMode ? .dark : .light) + .padding(.horizontal, horizontalPadding) + .frame(maxWidth: horizontalPadding > 0 ? .infinity : nil, alignment: maxWidthAlignment) + .transaction { transaction in + transaction.animation = nil + } + .task(id: content) { + guard !isStreaming else { return } + let cacheKey = "\(content.hashValue)" + if let cached = MarkdownRenderCache.shared.get(for: cacheKey) { + if segments == nil { + segments = cached + } + return + } + let contentToProcess = content + let parsed = Self.parseContent(contentToProcess) + MarkdownRenderCache.shared.set(parsed, for: cacheKey) + segments = parsed + } + } + + private func markdownFallback(content: String) -> some View { + let strippedText = LaTeXMarkdownView.stripCitations(from: content) + return StructuredText(markdown: strippedText) + .textual.structuredTextStyle(.gitHub) + .textual.highlighterTheme(isStreaming ? .plain : .default) + .textual.textSelection(.enabled) + .fixedSize(horizontal: false, vertical: true) + .environment(\.colorScheme, isDarkMode ? .dark : .light) + } + + /// Strip citation markers from markdown text. + /// Uses a linear-time scanner instead of regex to avoid catastrophic backtracking + /// on incomplete citations during streaming. + /// Matches: ` ?[N](#cite-N~...)` where parens in URLs are balanced one level deep. + static func stripCitations(from text: String) -> String { + let chars = Array(text.unicodeScalars) + let count = chars.count + var result = String.UnicodeScalarView() + result.reserveCapacity(count) + var i = 0 + let citePrefix: [UnicodeScalar] = Array("#cite-".unicodeScalars) + + while i < count { + // Check for optional leading space before `[` + var start = i + if chars[start] == " " && start + 1 < count && chars[start + 1] == "[" { + start += 1 + } + guard start < count, chars[start] == "[" else { + result.append(chars[i]) + i += 1 + continue + } + + // Match `[digits]` + var j = start + 1 + guard j < count, chars[j] >= "0", chars[j] <= "9" else { + result.append(chars[i]) + i += 1 + continue + } + let digitStart = j + while j < count, chars[j] >= "0", chars[j] <= "9" { j += 1 } + let digitEnd = j + guard j < count, chars[j] == "]" else { + result.append(chars[i]) + i += 1 + continue + } + j += 1 + + // Match `(#cite-digits~` + guard j < count, chars[j] == "(" else { + result.append(chars[i]) + i += 1 + continue + } + j += 1 + var matches = true + for c in citePrefix { + guard j < count, chars[j] == c else { matches = false; break } + j += 1 + } + guard matches else { + result.append(chars[i]) + i += 1 + continue + } + guard j < count, chars[j] >= "0", chars[j] <= "9" else { + result.append(chars[i]) + i += 1 + continue + } + while j < count, chars[j] >= "0", chars[j] <= "9" { j += 1 } + guard j < count, chars[j] == "~" else { + result.append(chars[i]) + i += 1 + continue + } + j += 1 + + // Capture URL (everything up to the next `~`) + let urlStart = j + var urlEnd = j + var foundTilde = false + while j < count { + if chars[j] == "~" { + urlEnd = j + foundTilde = true + break + } + j += 1 + } + + guard foundTilde else { + for k in i.. [ContentSegment] { + if content.count > Constants.Rendering.maxFullParsingCharacters { + return [ContentSegment(id: "md_full_\(content.hashValue)", kind: .markdown(content))] + } + + let nsContent = content as NSString + let fullRange = NSRange(location: 0, length: nsContent.length) + + var excludedRanges: [NSRange] = [] + + if let codeBlockRegex = Self.codeBlockRegex { + let matches = codeBlockRegex.matches(in: content, options: [], range: fullRange) + excludedRanges.append(contentsOf: matches.map(\.range)) + } + + if let inlineCodeRegex = Self.inlineCodeRegex { + let matches = inlineCodeRegex.matches(in: content, options: [], range: fullRange) + for match in matches where !excludedRanges.contains(where: { NSIntersectionRange($0, match.range).length > 0 }) { + excludedRanges.append(match.range) + } + } + + let tableSegments = Self.findMarkdownTables(in: content) + excludedRanges.append(contentsOf: tableSegments.map(\.range)) + + func isExcluded(_ range: NSRange) -> Bool { + excludedRanges.contains { NSIntersectionRange($0, range).length > 0 } + } + + var latexRanges: [(range: NSRange, isDisplay: Bool)] = [] + + if let displayRegex = Self.displayLatexRegex { + let matches = displayRegex.matches(in: content, options: [], range: fullRange) + for match in matches where !isExcluded(match.range) { + latexRanges.append((match.range, true)) + } + } + + if let inlineRegex = Self.inlineLatexRegex { + let matches = inlineRegex.matches(in: content, options: [], range: fullRange) + for match in matches where !isExcluded(match.range) { + let overlaps = latexRanges.contains { existing in + NSLocationInRange(match.range.location, existing.range) || + NSLocationInRange(existing.range.location, match.range) + } + if !overlaps { + latexRanges.append((match.range, false)) + } + } + } + + latexRanges.sort { $0.range.location < $1.range.location } + + var specialSegments: [SpecialSegment] = latexRanges.map { match in + SpecialSegment(range: match.range, kind: .latex(isDisplay: match.isDisplay)) + } + specialSegments.append(contentsOf: tableSegments.map { table in + SpecialSegment(range: table.range, kind: .table(table.table)) + }) + specialSegments.sort { $0.range.location < $1.range.location } + + var segments: [ContentSegment] = [] + var lastIndex = content.startIndex + + for special in specialSegments { + guard let swiftRange = Range(special.range, in: content) else { continue } + + if lastIndex < swiftRange.lowerBound { + let markdownText = String(content[lastIndex.. [ContentSegment] in + guard case .markdown(let text) = segment.kind, + text.count > Constants.Rendering.maxMarkdownSegmentCharacters else { + return [segment] + } + return splitMarkdownSegment(text, baseId: segment.id) + } + + return segments + } + + private nonisolated static func splitMarkdownSegment(_ text: String, baseId: String) -> [ContentSegment] { + let paragraphs = text.components(separatedBy: "\n\n") + var result: [ContentSegment] = [] + var current = "" + var subIndex = 0 + + for (_, paragraph) in paragraphs.enumerated() { + let candidate = current.isEmpty ? paragraph : current + "\n\n" + paragraph + if candidate.count > Constants.Rendering.maxMarkdownSegmentCharacters && !current.isEmpty { + result.append(ContentSegment( + id: "\(baseId)_split_\(subIndex)", + kind: .markdown(current) + )) + subIndex += 1 + current = paragraph + } else { + current = candidate + } + } + + if !current.isEmpty { + result.append(ContentSegment( + id: "\(baseId)_split_\(subIndex)", + kind: .markdown(current) + )) + } + + return result + } + + private nonisolated static func sanitizeLatex(_ latex: String) -> String { + let trimmed = latex.trimmingCharacters(in: .whitespacesAndNewlines) + let base = trimmed.isEmpty ? latex : trimmed + + guard base.contains("\\text{") else { return base } + + return Self.normalizeTextCommands(in: base) + } + + private nonisolated static func normalizeTextCommands(in latex: String) -> String { + var result = "" + var index = latex.startIndex + + while index < latex.endIndex { + if latex[index...].hasPrefix("\\text{") { + let contentStart = latex.index(index, offsetBy: 6) + var cursor = contentStart + var depth = 1 + + while cursor < latex.endIndex && depth > 0 { + let character = latex[cursor] + if character == "{" { + depth += 1 + } else if character == "}" { + depth -= 1 + if depth == 0 { break } + } + cursor = latex.index(after: cursor) + } + + if depth == 0 { + let content = String(latex[contentStart.. String { + guard content.contains("\\(") else { + return "\\text{\(content)}" + } + + var result = "" + var currentIndex = content.startIndex + + while let openRange = content.range(of: "\\(", range: currentIndex.. + } + + private nonisolated static func findMarkdownTables(in content: String) -> [TableMatch] { + guard content.contains("|") else { return [] } + + var lines: [LineInfo] = [] + content.enumerateSubstrings(in: content.startIndex.. ParsedTable? { + guard lines.count >= 2 else { return nil } + + let headerCells = parseTableCells(from: lines[0]) + let alignmentCells = parseAlignmentRow(from: lines[1], columnCount: headerCells.count) + guard !headerCells.isEmpty else { return nil } + + let columnCount = max(headerCells.count, alignmentCells.count) + let normalizedHeader = normalizeRow(headerCells, targetCount: columnCount) + let normalizedAlignments = alignmentCells.count == columnCount ? alignmentCells : normalizeAlignments(alignmentCells, targetCount: columnCount) + + var rows: [[String]] = [] + for line in lines.dropFirst(2) { + let cells = parseTableCells(from: line) + rows.append(normalizeRow(cells, targetCount: columnCount)) + } + + return ParsedTable(headers: normalizedHeader, alignments: normalizedAlignments, rows: rows) + } + + private nonisolated static func parseAlignmentRow(from line: String, columnCount: Int) -> [TableAlignment] { + let cells = parseTableCells(from: line) + guard !cells.isEmpty else { return Array(repeating: .leading, count: columnCount) } + + let alignments = cells.map { cell -> TableAlignment in + let trimmed = cell.trimmingCharacters(in: .whitespaces) + let leading = trimmed.hasPrefix(":") + let trailing = trimmed.hasSuffix(":") + + switch (leading, trailing) { + case (true, true): + return .center + case (false, true): + return .trailing + default: + return .leading + } + } + + return normalizeAlignments(alignments, targetCount: max(columnCount, alignments.count)) + } + + private nonisolated static func normalizeAlignments(_ alignments: [TableAlignment], targetCount: Int) -> [TableAlignment] { + if alignments.count == targetCount { + return alignments + } else if alignments.count < targetCount { + return alignments + Array(repeating: .leading, count: targetCount - alignments.count) + } else { + return Array(alignments.prefix(targetCount)) + } + } + + private nonisolated static func normalizeRow(_ cells: [String], targetCount: Int) -> [String] { + if cells.count == targetCount { + return cells + } else if cells.count < targetCount { + return cells + Array(repeating: "", count: targetCount - cells.count) + } else { + return Array(cells.prefix(targetCount)) + } + } + + private nonisolated static func parseTableCells(from line: String) -> [String] { + let placeholder = "__ESCAPED_PIPE__" + var working = line.trimmingCharacters(in: .whitespaces) + + while working.hasPrefix("|") { + working.removeFirst() + } + while working.hasSuffix("|") { + working.removeLast() + } + + working = working.replacingOccurrences(of: "\\|", with: placeholder) + + let parts = working.split(separator: "|", omittingEmptySubsequences: false).map(String.init) + return parts.map { part in + part.replacingOccurrences(of: placeholder, with: "|").trimmingCharacters(in: .whitespaces) + } + } + + private nonisolated static func isAlignmentLine(_ line: String) -> Bool { + let trimmed = line.trimmingCharacters(in: .whitespaces) + guard trimmed.hasPrefix("|") else { return false } + + let cells = parseTableCells(from: line) + guard !cells.isEmpty else { return false } + + let allowed = CharacterSet(charactersIn: "-: ") + return cells.allSatisfy { cell in + let cellTrimmed = cell.trimmingCharacters(in: .whitespaces) + guard cellTrimmed.contains("-") else { return false } + return cellTrimmed.unicodeScalars.allSatisfy { allowed.contains($0) } + } + } +} + +private struct ParsedTable: Sendable { + let headers: [String] + let alignments: [TableAlignment] + let rows: [[String]] +} + +private enum TableAlignment: Sendable { + case leading + case center + case trailing + + var viewAlignment: Alignment { + switch self { + case .leading: + return .leading + case .center: + return .center + case .trailing: + return .trailing + } + } +} + +private struct MarkdownTableView: View { + let table: ParsedTable + let isDarkMode: Bool + + @State private var columnWidths: [Int: CGFloat] = [:] + + private var borderColor: SwiftUI.Color { + isDarkMode ? SwiftUI.Color.white.opacity(0.2) : SwiftUI.Color.black.opacity(0.2) + } + + private var headerBackground: SwiftUI.Color { + SwiftUI.Color.clear + } + + private var alternatingRowBackground: SwiftUI.Color { + SwiftUI.Color.clear + } + + var body: some View { + ViewThatFits(in: .horizontal) { + tableContainer + ScrollView(.horizontal, showsIndicators: true) { + tableContainer + } + } + .padding(.vertical, 8) + .onAppear { + if columnWidths.isEmpty { + columnWidths = Self.measureColumnWidths(for: table) + } + } + } + + /// Measure column widths using text measurement instead of rendering a hidden table. + private static func measureColumnWidths(for table: ParsedTable) -> [Int: CGFloat] { + let font = UIFont.systemFont(ofSize: Constants.UI.tableFontSize) + let boldFont = UIFont.boldSystemFont(ofSize: Constants.UI.tableFontSize) + let horizontalPadding = Constants.UI.tableCellHorizontalPadding * 2 + var widths: [Int: CGFloat] = [:] + + for (index, header) in table.headers.enumerated() { + let size = (header as NSString).size(withAttributes: [.font: boldFont]) + widths[index] = min(size.width + horizontalPadding, Constants.UI.tableMaxColumnWidth) + } + + for row in table.rows { + for (index, cell) in row.enumerated() { + let size = (cell as NSString).size(withAttributes: [.font: font]) + let width = min(size.width + horizontalPadding, Constants.UI.tableMaxColumnWidth) + widths[index] = max(widths[index] ?? 0, width) + } + } + + return widths + } + + private var tableContainer: some View { + VStack(spacing: 0) { + if !table.headers.isEmpty { + MarkdownTableRowView( + cells: table.headers, + alignments: table.alignments, + isHeader: true, + isDarkMode: isDarkMode, + borderColor: borderColor, + background: headerBackground, + columnWidths: columnWidths + ) + Rectangle() + .fill(borderColor) + .frame(height: 1) + } + + ForEach(table.rows.indices, id: \.self) { index in + MarkdownTableRowView( + cells: table.rows[index], + alignments: table.alignments, + isHeader: false, + isDarkMode: isDarkMode, + borderColor: borderColor, + background: index.isMultiple(of: 2) ? alternatingRowBackground : SwiftUI.Color.clear, + columnWidths: columnWidths + ) + + if index < table.rows.count - 1 { + Rectangle() + .fill(borderColor) + .frame(height: 1) + } + } + } + .clipShape(RoundedRectangle(cornerRadius: 8)) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(borderColor, lineWidth: 1) + ) + } +} + +private struct MarkdownTableRowView: View { + let cells: [String] + let alignments: [TableAlignment] + let isHeader: Bool + let isDarkMode: Bool + let borderColor: SwiftUI.Color + let background: SwiftUI.Color + let columnWidths: [Int: CGFloat] + + var body: some View { + HStack(alignment: .top, spacing: 0) { + ForEach(cells.indices, id: \.self) { index in + MarkdownTableCell( + content: cells[index], + alignment: alignments.indices.contains(index) ? alignments[index] : .leading, + isHeader: isHeader, + isDarkMode: isDarkMode, + columnWidth: columnWidths[index], + background: background + ) + .frame(maxHeight: .infinity, alignment: .top) + + if index < cells.count - 1 { + Rectangle() + .fill(borderColor) + .frame(width: 1) + } + } + } + .frame(minHeight: 0, maxHeight: .infinity) + } +} + +private struct MarkdownTableCell: View { + let content: String + let alignment: TableAlignment + let isHeader: Bool + let isDarkMode: Bool + let columnWidth: CGFloat? + let background: SwiftUI.Color + + var body: some View { + let cellContent = LaTeXMarkdownView( + content: content.isEmpty ? " " : content, + isDarkMode: isDarkMode, + horizontalPadding: 0, + maxWidthAlignment: alignment.viewAlignment + ) + .padding(.vertical, isHeader ? 6 : 5) + .padding(.horizontal, Constants.UI.tableCellHorizontalPadding) + + if let width = columnWidth { + cellContent + .frame(width: width, alignment: alignment.viewAlignment) + .frame(maxHeight: .infinity) + .background(background) + } else { + cellContent + .frame(maxHeight: .infinity) + .background(background) + } + } +} + +/// A view that renders LaTeX equations using SwiftMath +struct LaTeXView: View { + let latex: String + let isDisplay: Bool + let isDarkMode: Bool + + private var isUnsupportedEnvironment: Bool { + latex.contains("\\begin{tabular}") || + latex.contains("\\begin{longtable}") + } + + var body: some View { + if isUnsupportedEnvironment { + UnsupportedLaTeXView(isDarkMode: isDarkMode) + } else if isDisplay { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 0) { + Spacer(minLength: 0) + MathView( + latex: latex, + displayMode: true, + isDarkMode: isDarkMode + ) + .fixedSize() + Spacer(minLength: 0) + } + .padding(.horizontal, 4) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 8) + } else { + MathView( + latex: latex, + displayMode: false, + isDarkMode: isDarkMode + ) + .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.vertical, 2) + } + } +} + +private struct UnsupportedLaTeXView: View { + let isDarkMode: Bool + + var body: some View { + VStack(spacing: 8) { + Text("LaTeX table not supported on iOS") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.6)) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 12) + .padding(.horizontal, 16) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(isDarkMode ? Color.white.opacity(0.05) : Color.black.opacity(0.03)) + ) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(isDarkMode ? Color.white.opacity(0.1) : Color.black.opacity(0.1), lineWidth: 1) + ) + .padding(.vertical, 8) + } +} + +/// Bridge to SwiftMath's MTMathUILabel +struct MathView: UIViewRepresentable { + let latex: String + let displayMode: Bool + let isDarkMode: Bool + + func makeUIView(context: Context) -> MTMathUILabel { + let label = MTMathUILabel() + label.latex = latex + label.labelMode = displayMode ? .display : .text + label.textColor = isDarkMode ? .white : .black.withAlphaComponent(0.8) + label.fontSize = displayMode ? 18 : 16 + label.textAlignment = displayMode ? .center : .left + label.backgroundColor = .clear + label.isUserInteractionEnabled = true + label.contentInsets = UIEdgeInsets(top: 6, left: 2, bottom: 6, right: 2) + label.setContentCompressionResistancePriority(.required, for: .vertical) + label.setContentHuggingPriority(.required, for: .vertical) + label.sizeToFit() + return label + } + + func updateUIView(_ uiView: MTMathUILabel, context: Context) { + uiView.latex = latex + uiView.labelMode = displayMode ? .display : .text + uiView.textColor = isDarkMode ? .white : .black.withAlphaComponent(0.8) + uiView.fontSize = displayMode ? 18 : 16 + uiView.textAlignment = displayMode ? .center : .left + uiView.contentInsets = UIEdgeInsets(top: 6, left: 2, bottom: 6, right: 2) + uiView.setContentCompressionResistancePriority(.required, for: .vertical) + uiView.setContentHuggingPriority(.required, for: .vertical) + uiView.sizeToFit() + } +} + + diff --git a/SwiftChat/Views/MessageAttachmentIndicator.swift b/SwiftChat/Views/MessageAttachmentIndicator.swift new file mode 100644 index 0000000..addc96a --- /dev/null +++ b/SwiftChat/Views/MessageAttachmentIndicator.swift @@ -0,0 +1,294 @@ +// +// MessageAttachmentIndicator.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +struct MessageAttachmentIndicator: View { + let attachments: [Attachment] + let isDarkMode: Bool + @EnvironmentObject private var viewModel: SwiftChat.ChatViewModel + + private var imageAttachments: [Attachment] { + attachments.filter { $0.type == .image } + } + + private var documentAttachments: [Attachment] { + attachments.filter { $0.type == .document } + } + + var body: some View { + VStack(alignment: .trailing, spacing: 4) { + if !imageAttachments.isEmpty { + imageGrid + } + + ForEach(documentAttachments) { attachment in + AttachmentChip(attachment: attachment, isDarkMode: isDarkMode) + } + } + .padding(.bottom, 4) + } + + @ViewBuilder + private var imageGrid: some View { + let size = Constants.Attachments.messageThumbnailSize + let columns = Constants.Attachments.messageThumbnailColumns + let rows = imageAttachments.chunked(into: columns) + VStack(alignment: .trailing, spacing: 4) { + ForEach(Array(rows.enumerated()), id: \.offset) { _, row in + HStack(spacing: 4) { + ForEach(row) { attachment in + ImageThumbnail(attachment: attachment, size: size) + .onTapGesture { + let allImages = (viewModel.currentChat?.messages ?? []) + .flatMap { $0.attachments } + .filter { $0.type == .image && $0.base64 != nil } + if let index = allImages.firstIndex(where: { $0.id == attachment.id }) { + viewModel.imageViewerImages = allImages + viewModel.imageViewerIndex = index + viewModel.showImageViewer = true + } + } + } + } + } + } + } +} + +private struct AttachmentChip: View { + let attachment: Attachment + let isDarkMode: Bool + + var body: some View { + HStack(spacing: 6) { + Image(systemName: iconName) + .font(.system(size: 14)) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.6)) + + Text(attachment.fileName) + .font(.system(size: 12)) + .lineLimit(1) + .foregroundColor(isDarkMode ? .white.opacity(0.8) : .black.opacity(0.7)) + } + .padding(.horizontal, 8) + .padding(.vertical, 5) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(isDarkMode ? Color.white.opacity(0.08) : Color.black.opacity(0.06)) + ) + } + + private var iconName: String { + let ext = (attachment.fileName as NSString).pathExtension.lowercased() + switch ext { + case "pdf": return "doc.richtext" + case "html": return "globe" + case "csv": return "tablecells" + case "md": return "text.document" + default: return "doc.text" + } + } +} + +private struct ImageThumbnail: View { + let attachment: Attachment + let size: CGFloat + + var body: some View { + if let base64 = attachment.base64 ?? attachment.thumbnailBase64, + let data = Data(base64Encoded: base64), + let uiImage = UIImage(data: data) { + Image(uiImage: uiImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: size, height: size) + .clipShape(RoundedRectangle(cornerRadius: 8)) + } else { + RoundedRectangle(cornerRadius: 8) + .fill(Color.gray.opacity(0.3)) + .frame(width: size, height: size) + .overlay { + Image(systemName: "photo") + .foregroundColor(.gray) + } + } + } +} + +struct ImageViewerOverlay: View { + let images: [Attachment] + let initialIndex: Int + let onDismiss: () -> Void + @State private var currentIndex: Int + @State private var dragOffset: CGFloat = 0 + @State private var isDraggingVertically = false + + init(images: [Attachment], initialIndex: Int, onDismiss: @escaping () -> Void) { + self.images = images + self.initialIndex = initialIndex + self.onDismiss = onDismiss + _currentIndex = State(initialValue: initialIndex) + } + + private var backgroundOpacity: Double { + 1.0 - min(abs(dragOffset) / 300.0, 0.5) + } + + var body: some View { + ZStack { + Color.black.opacity(backgroundOpacity).ignoresSafeArea() + + TabView(selection: $currentIndex) { + ForEach(Array(images.enumerated()), id: \.element.id) { index, attachment in + ZoomableImagePage(attachment: attachment) + .tag(index) + } + } + .tabViewStyle(.page(indexDisplayMode: images.count > 1 ? .automatic : .never)) + .ignoresSafeArea() + .offset(y: dragOffset) + .simultaneousGesture( + DragGesture(minimumDistance: 20) + .onChanged { value in + if !isDraggingVertically { + isDraggingVertically = abs(value.translation.height) > abs(value.translation.width) + } + if isDraggingVertically { + dragOffset = value.translation.height + } + } + .onEnded { value in + if isDraggingVertically && abs(value.translation.height) > 100 { + onDismiss() + } else { + withAnimation(.interactiveSpring()) { + dragOffset = 0 + } + } + isDraggingVertically = false + } + ) + + // Close button + counter + VStack { + HStack { + if images.count > 1 { + Text("\(currentIndex + 1) / \(images.count)") + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(.white.opacity(0.8)) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(.ultraThinMaterial, in: Capsule()) + } + + Spacer() + + Button { + onDismiss() + } label: { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 30)) + .foregroundStyle(.white.opacity(0.8)) + } + } + .padding() + + Spacer() + + // Left/right arrow buttons + if images.count > 1 { + HStack { + Button { + withAnimation { + currentIndex = max(0, currentIndex - 1) + } + } label: { + Image(systemName: "chevron.left.circle.fill") + .font(.system(size: 36)) + .foregroundStyle(.white.opacity(currentIndex > 0 ? 0.7 : 0.2)) + } + .disabled(currentIndex == 0) + + Spacer() + + Button { + withAnimation { + currentIndex = min(images.count - 1, currentIndex + 1) + } + } label: { + Image(systemName: "chevron.right.circle.fill") + .font(.system(size: 36)) + .foregroundStyle(.white.opacity(currentIndex < images.count - 1 ? 0.7 : 0.2)) + } + .disabled(currentIndex == images.count - 1) + } + .padding(.horizontal, 20) + .padding(.bottom, 40) + } + } + } + .persistentSystemOverlays(.hidden) + } +} + +private extension Array { + func chunked(into size: Int) -> [[Element]] { + stride(from: 0, to: count, by: size).map { + Array(self[$0.. { + Binding( + get: { viewModel.attachmentError != nil }, + set: { if !$0 { viewModel.attachmentError = nil } } + ) + } + + @ViewBuilder + var body: some View { + inputContent + .alert("Attachment Error", isPresented: showAttachmentError) { + Button("OK", role: .cancel) {} + } message: { + Text(viewModel.attachmentError ?? "An error occurred") + } + .sheet(isPresented: $showDocumentPicker) { + DocumentPickerView { url, fileName in + viewModel.addDocumentAttachment(url: url, fileName: fileName) + } + } + .sheet(isPresented: $showPhotoPicker, onDismiss: processSelectedPhotos) { + NavigationStack { + PhotosPicker(selection: $selectedPhotoItems, matching: .images) { + Text("Select Photos") + } + .photosPickerStyle(.inline) + .navigationTitle("Select Photos") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Done") { showPhotoPicker = false } + } + } + } + .presentationDetents([.medium, .large]) + } + .fullScreenCover(isPresented: $showCamera) { + CameraPickerView { image in + if let data = image.jpegData(compressionQuality: CGFloat(Constants.Attachments.imageCompressionQuality)) { + viewModel.addImageAttachment(data: data, fileName: "Camera Photo.jpg") + } + } + .ignoresSafeArea() + } + .sheet(isPresented: $showAddSheet, onDismiss: { + guard let action = pendingPickerAction else { return } + pendingPickerAction = nil + switch action { + case .camera: showCamera = true + case .photos: showPhotoPicker = true + case .files: showDocumentPicker = true + } + }) { + AddToSheetView( + viewModel: viewModel, + isDarkMode: isDarkMode, + onCamera: { + pendingPickerAction = .camera + showAddSheet = false + }, + onPhotos: { + pendingPickerAction = .photos + showAddSheet = false + }, + onFiles: { + pendingPickerAction = .files + showAddSheet = false + } + ) + .presentationDetents([.height(340)]) + .presentationBackground(isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground)) + } + } + + @ViewBuilder + private var inputContent: some View { + if #available(iOS 26, *) { + VStack(spacing: 4) { + VStack(spacing: 0) { + if !viewModel.pendingAttachments.isEmpty { + AttachmentPreviewBar( + attachments: viewModel.pendingAttachments, + thumbnails: viewModel.pendingImageThumbnails, + onRemove: { id in viewModel.removePendingAttachment(id: id) } + ) + .padding(.horizontal, 12) + .padding(.top, 8) + } + + CustomTextEditor(text: $messageText, + textHeight: $textHeight, + placeholderText: viewModel.currentChat?.messages.isEmpty ?? true ? "What's on your mind?" : "Message", + shouldFocusInput: viewModel.shouldFocusInput, + isLoading: viewModel.isLoading, + onFocusHandled: { viewModel.shouldFocusInput = false }, + onSendMessage: { text in viewModel.sendMessage(text: text) }) + .frame(height: textHeight) + .padding(.horizontal) + + HStack { + attachButton + webSearchButton + Spacer() + + micButton + + Button(action: sendOrCancelMessage) { + Image(systemName: viewModel.isLoading ? "stop.fill" : "arrow.up") + .font(.system(size: 16, weight: .semibold)) + .frame(width: 24, height: 24) + .foregroundColor(isDarkMode ? Color.sendButtonForegroundDark : Color.sendButtonForegroundLight) + } + .buttonStyle(.borderedProminent) + .buttonBorderShape(.circle) + .glassEffect(.regular.interactive(), in: .circle) + .clipShape(.circle) + .tint(isDarkMode ? Color.sendButtonBackgroundDark : Color.sendButtonBackgroundLight) + .padding(.trailing, 8) + } + .padding(.vertical, 8) + } + .glassEffect(.regular.interactive(), in: RoundedRectangle(cornerRadius: 26)) + } + .padding(.horizontal, 12) + .padding(.bottom, isKeyboardVisible ? 12 : 0) + } else { + VStack(spacing: 4) { + VStack(spacing: 0) { + if !viewModel.pendingAttachments.isEmpty { + AttachmentPreviewBar( + attachments: viewModel.pendingAttachments, + thumbnails: viewModel.pendingImageThumbnails, + onRemove: { id in viewModel.removePendingAttachment(id: id) } + ) + .padding(.horizontal, 12) + .padding(.top, 8) + } + + CustomTextEditor(text: $messageText, + textHeight: $textHeight, + placeholderText: viewModel.currentChat?.messages.isEmpty ?? true ? "What's on your mind?" : "Message", + shouldFocusInput: viewModel.shouldFocusInput, + isLoading: viewModel.isLoading, + onFocusHandled: { viewModel.shouldFocusInput = false }, + onSendMessage: { text in viewModel.sendMessage(text: text) }) + .frame(height: textHeight) + .padding(.horizontal) + + HStack { + attachButton + webSearchButton + Spacer() + + micButton + + Button(action: sendOrCancelMessage) { + ZStack { + Circle() + .fill(isDarkMode ? Color.sendButtonBackgroundDark : Color.sendButtonBackgroundLight) + .frame(width: 32, height: 32) + Image(systemName: viewModel.isLoading ? "stop.fill" : "arrow.up") + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(isDarkMode ? Color.sendButtonForegroundDark : Color.sendButtonForegroundLight) + } + } + .padding(.trailing, 8) + } + .padding(.vertical, 8) + } + .background { + RoundedRectangle(cornerRadius: 26) + .fill(.thickMaterial) + } + } + .padding(.horizontal, 12) + .padding(.bottom, isKeyboardVisible ? 12 : 0) + } + } + + @ViewBuilder + private var attachButton: some View { + Button { + showAddSheet = true + } label: { + Image(systemName: "plus") + .font(.system(size: 20)) + .foregroundColor(.secondary) + .frame(width: 24, height: 24) + } + .disabled(viewModel.isLoading || viewModel.isProcessingAttachment) + .padding(.leading, 8) + } + + @ViewBuilder + private var webSearchButton: some View { + Button(action: { + withAnimation(.spring(response: 0.3, dampingFraction: 0.7)) { + viewModel.isWebSearchEnabled.toggle() + settings.webSearchEnabled = viewModel.isWebSearchEnabled + } + }) { + if viewModel.isWebSearchEnabled { + HStack(spacing: 6) { + Image(systemName: "globe") + .font(.system(size: 14, weight: .semibold)) + Text("Web Search") + .font(.system(size: 12, weight: .semibold)) + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(Color.secondary.opacity(0.15)) + .clipShape(Capsule()) + .foregroundColor(.blue) + } else { + Image(systemName: "globe") + .font(.system(size: 20)) + .foregroundColor(.secondary) + .frame(width: 24, height: 24) + } + } + .padding(.leading, 8) + } + + @State private var isPulsing = false + + @ViewBuilder + private var micButton: some View { + Button(action: toggleRecording) { + ZStack { + if audioService.isRecording { + Circle() + .fill(Color.red.opacity(0.2)) + .frame(width: 44, height: 44) + .scaleEffect(isPulsing ? 1.1 : 0.9) + .animation( + .easeInOut(duration: 0.8).repeatForever(autoreverses: true), + value: isPulsing + ) + } + + Group { + if audioService.isTranscribing { + ProgressView() + .progressViewStyle(CircularProgressViewStyle(tint: .secondary)) + .scaleEffect(0.8) + } else { + Image(systemName: audioService.isRecording ? "stop.fill" : "mic.fill") + .font(.system(size: 20)) + } + } + .frame(width: 32, height: 32) + .foregroundColor(audioService.isRecording ? .red : .secondary) + } + .frame(width: 32, height: 32) + } + .onChange(of: audioService.isRecording) { _, isRecording in + isPulsing = isRecording + } + .disabled(audioService.isTranscribing || viewModel.isLoading) + .padding(.trailing, 4) + } + + private func toggleRecording() { + if audioService.isRecording { + guard let fileURL = audioService.stopRecording() else { return } + Task { + do { + let client = AppConfig.shared.makeClient() + let text = try await audioService.transcribe(fileURL: fileURL, client: client) + messageText += (messageText.isEmpty ? "" : " ") + text + } catch { + viewModel.attachmentError = error.localizedDescription + } + } + } else { + Task { + let granted = await audioService.requestPermission() + guard granted else { + viewModel.attachmentError = "Microphone access is required for voice input. Enable it in Settings." + return + } + do { + try audioService.startRecording() + } catch { + viewModel.attachmentError = "Failed to start recording: \(error.localizedDescription)" + } + } + } + } + + private func sendOrCancelMessage() { + if viewModel.isLoading { + viewModel.cancelGeneration() + } else if !messageText.isEmpty || !viewModel.pendingAttachments.isEmpty { + viewModel.sendMessage(text: messageText) + messageText = "" + textHeight = Layout.defaultHeight + } + } + + private func processSelectedPhotos() { + let items = selectedPhotoItems + selectedPhotoItems = [] + for (index, item) in items.enumerated() { + Task { + if let data = try? await item.loadTransferable(type: Data.self) { + let fileName = items.count > 1 ? "Photo \(index + 1).jpg" : "Photo.jpg" + viewModel.addImageAttachment(data: data, fileName: fileName) + } + } + } + } +} + +/// Bottom sheet presented from the "+" button with attachment options and model selector +struct AddToSheetView: View { + @ObservedObject var viewModel: SwiftChat.ChatViewModel + let isDarkMode: Bool + let onCamera: () -> Void + let onPhotos: () -> Void + let onFiles: () -> Void + @Environment(\.dismiss) private var dismiss + private var availableModels: [ModelType] { + AppConfig.shared.filteredModelTypes() + } + + var body: some View { + NavigationStack { + VStack(spacing: 20) { + // Attachment buttons + HStack(spacing: 12) { + if viewModel.currentModel.isMultimodal { + if UIImagePickerController.isSourceTypeAvailable(.camera) { + attachmentButton(icon: "camera", label: "Camera") { onCamera() } + } + attachmentButton(icon: "photo.on.rectangle", label: "Photos") { onPhotos() } + } + attachmentButton(icon: "doc.badge.arrow.up", label: "Files") { onFiles() } + } + .padding(.horizontal, 20) + + Divider() + .padding(.horizontal, 20) + + // Model selector + Text("Select a Model") + .font(.system(size: 17, weight: .semibold)) + .frame(maxWidth: .infinity, alignment: .center) + .padding(.horizontal, 20) + .padding(.bottom, -12) + + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 16) { + ForEach(availableModels) { model in + ModelCard( + model: model, + isSelected: viewModel.currentModel.id == model.id, + isDarkMode: isDarkMode + ) { + viewModel.changeModel(to: model) + } + } + } + .padding(.horizontal, 20) + } + } + .padding(.top, 8) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .background((isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground)).ignoresSafeArea()) + .navigationTitle("Add to Chat") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button { dismiss() } label: { + Image(systemName: "xmark") + .font(.system(size: 18, weight: .medium)) + } + } + } + } + } + + @ViewBuilder + private func attachmentButton(icon: String, label: String, action: @escaping () -> Void) -> some View { + Button(action: action) { + VStack(spacing: 8) { + Image(systemName: icon) + .font(.system(size: 22)) + Text(label) + .font(.system(size: 12, weight: .medium)) + } + .foregroundColor(.primary) + .frame(maxWidth: .infinity) + .frame(height: 72) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(Color(.secondarySystemGroupedBackground)) + ) + } + } +} + +/// Simple model card for the model selector +struct ModelCard: View { + let model: ModelType + let isSelected: Bool + let isDarkMode: Bool + let onTap: () -> Void + + var body: some View { + Button(action: onTap) { + VStack(spacing: 8) { + Image(model.iconName) + .resizable() + .scaledToFit() + .frame(width: 36, height: 36) + + Text(model.displayName) + .font(.system(size: 13, weight: .medium)) + .multilineTextAlignment(.center) + .lineLimit(2) + .fixedSize(horizontal: false, vertical: true) + } + .foregroundColor(isSelected ? .primary : .secondary) + .frame(width: 120, height: 110) + .background( + ZStack { + if #available(iOS 26, *) { + RoundedRectangle(cornerRadius: 16) + .fill(.thickMaterial) + } else { + RoundedRectangle(cornerRadius: 16) + .fill(Color.chatSurface(isDarkMode: isDarkMode)) + } + if isSelected { + RoundedRectangle(cornerRadius: 16) + .fill(Color.accentPrimary.opacity(0.15)) + } + if !isSelected { + RoundedRectangle(cornerRadius: 16) + .strokeBorder(Color.gray.opacity(0.2), lineWidth: 1) + } + if isSelected { + VStack { + HStack { + Spacer() + Circle() + .fill(Color.accentPrimary) + .frame(width: 16, height: 16) + .overlay( + Image(systemName: "checkmark") + .font(.system(size: 9, weight: .bold)) + .foregroundColor(.white) + ) + } + Spacer() + } + .padding(8) + } + } + ) + } + .buttonStyle(PlainButtonStyle()) + .scaleEffect(isSelected ? 1.02 : 1.0) + .animation(.spring(response: 0.3, dampingFraction: 0.7), value: isSelected) + } +} + +/// Custom UIViewRepresentable for a properly managed text editor +struct CustomTextEditor: UIViewRepresentable { + @Binding var text: String + @Binding var textHeight: CGFloat + var placeholderText: String + var shouldFocusInput: Bool + var isLoading: Bool + var onFocusHandled: () -> Void + var onSendMessage: (String) -> Void + + func makeUIView(context: Context) -> UITextView { + let textView = UITextView() + textView.delegate = context.coordinator + textView.font = UIFont.preferredFont(forTextStyle: .body) + textView.backgroundColor = .clear + textView.isScrollEnabled = true + textView.isEditable = true + textView.isSelectable = true + textView.alwaysBounceVertical = false + textView.scrollsToTop = false + textView.textContainerInset = UIEdgeInsets(top: 16, left: 2, bottom: 8, right: 5) + textView.textContainer.lineFragmentPadding = 0 + textView.tintColor = UIColor.systemBlue + + if text.isEmpty { + textView.text = placeholderText + textView.textColor = .lightGray + } else { + textView.text = text + textView.textColor = UIColor { traitCollection in + return traitCollection.userInterfaceStyle == .dark ? .white : .black + } + } + + return textView + } + + func updateUIView(_ uiView: UITextView, context: Context) { + context.coordinator.parent = self + let isCurrentlyEditing = context.coordinator.isEditing + + if shouldFocusInput && !context.coordinator.hasFocusedFromFlag { + context.coordinator.hasFocusedFromFlag = true + DispatchQueue.main.async { + if !uiView.isFirstResponder { uiView.becomeFirstResponder() } + self.onFocusHandled() + } + } else if !shouldFocusInput { + context.coordinator.hasFocusedFromFlag = false + } + + if text.isEmpty && !isCurrentlyEditing && uiView.textColor != .lightGray { + uiView.text = placeholderText + uiView.textColor = .lightGray + } else if text.isEmpty && isCurrentlyEditing { + if uiView.text.isEmpty && uiView.textColor == .lightGray { + uiView.text = "" + uiView.textColor = UIColor { tc in tc.userInterfaceStyle == .dark ? .white : .black } + } else if !uiView.text.isEmpty && uiView.textColor != .lightGray { + self.text = uiView.text + } + } else if !text.isEmpty && uiView.textColor == .lightGray { + uiView.text = text + uiView.textColor = UIColor { tc in tc.userInterfaceStyle == .dark ? .white : .black } + } else if !text.isEmpty && uiView.text != text && uiView.textColor != .lightGray { + uiView.text = text + } + + uiView.isEditable = true + + let size = uiView.sizeThatFits(CGSize(width: uiView.frame.width, height: CGFloat.greatestFiniteMagnitude)) + let newHeight = min(MessageInputView.Layout.maximumHeight, max(MessageInputView.Layout.minimumHeight, size.height)) + if textHeight != newHeight { + DispatchQueue.main.async { self.textHeight = newHeight } + } + } + + func makeCoordinator() -> Coordinator { Coordinator(self) } + + class Coordinator: NSObject, UITextViewDelegate { + var parent: CustomTextEditor + var isEditing = false + var hasFocusedFromFlag = false + + init(_ parent: CustomTextEditor) { self.parent = parent } + + func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { + if text == "\n" { + let isMac = ProcessInfo.processInfo.isiOSAppOnMac + if isMac { + let currentText = textView.text ?? "" + let trimmedText = currentText.trimmingCharacters(in: .whitespacesAndNewlines) + if !trimmedText.isEmpty && !parent.isLoading { + parent.onSendMessage(trimmedText) + textView.text = "" + parent.text = "" + parent.textHeight = MessageInputView.Layout.defaultHeight + textView.text = parent.placeholderText + textView.textColor = .lightGray + textView.resignFirstResponder() + } + return false + } + } + + let currentText = textView.text as NSString + let newText = currentText.replacingCharacters(in: range, with: text) + if newText.isEmpty && isEditing { return true } + return true + } + + func textViewDidChange(_ textView: UITextView) { + if textView.textColor != .lightGray { + parent.text = textView.text + let size = textView.sizeThatFits(CGSize(width: textView.frame.width, height: CGFloat.greatestFiniteMagnitude)) + let newHeight = min(MessageInputView.Layout.maximumHeight, max(MessageInputView.Layout.minimumHeight, size.height)) + if parent.textHeight != newHeight { parent.textHeight = newHeight } + } + } + + func textViewDidBeginEditing(_ textView: UITextView) { + isEditing = true + if textView.textColor == .lightGray { + textView.text = "" + textView.textColor = UIColor { tc in tc.userInterfaceStyle == .dark ? .white : .black } + } + } + + func textViewDidEndEditing(_ textView: UITextView) { + isEditing = false + if textView.text.isEmpty { + textView.text = parent.placeholderText + textView.textColor = .lightGray + } + } + } +} diff --git a/SwiftChat/Views/MessageTableView.swift b/SwiftChat/Views/MessageTableView.swift new file mode 100644 index 0000000..20463db --- /dev/null +++ b/SwiftChat/Views/MessageTableView.swift @@ -0,0 +1,713 @@ +// +// MessageTableView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import Combine + +struct MessageTableView: UIViewRepresentable { + let archivedMessagesStartIndex: Int + let isDarkMode: Bool + let isLoading: Bool + @ObservedObject var viewModel: SwiftChat.ChatViewModel + @Binding var isAtBottom: Bool + @Binding var userHasScrolled: Bool + let scrollTrigger: UUID + let scrollToUserTrigger: UUID + @Binding var tableOpacity: Double + let keyboardHeight: CGFloat + + private var messages: [Message] { + viewModel.messages + } + + func makeUIView(context: Context) -> UITableView { + let tableView = UITableView(frame: .zero, style: .plain) + tableView.backgroundColor = .clear + tableView.separatorStyle = .none + tableView.delegate = context.coordinator + tableView.dataSource = context.coordinator + tableView.keyboardDismissMode = .onDrag + tableView.allowsSelection = false + tableView.estimatedRowHeight = 100 + tableView.rowHeight = UITableView.automaticDimension + tableView.showsVerticalScrollIndicator = true + tableView.contentInsetAdjustmentBehavior = .automatic + tableView.clipsToBounds = false + + if #available(iOS 15.0, *) { + tableView.isPrefetchingEnabled = true + } + + context.coordinator.tableView = tableView + + return tableView + } + + func updateUIView(_ tableView: UITableView, context: Context) { + context.coordinator.parent = self + + let keyboardHeightChanged = context.coordinator.lastKeyboardHeight != keyboardHeight + if keyboardHeightChanged { + let wasAtBottom = context.coordinator.parent.isAtBottom + context.coordinator.lastKeyboardHeight = keyboardHeight + context.coordinator.isKeyboardTransitioning = true + + if wasAtBottom && keyboardHeight > 0 { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { + context.coordinator.scrollToBottom(animated: true) + context.coordinator.isKeyboardTransitioning = false + } + } else { + DispatchQueue.main.async { + context.coordinator.isKeyboardTransitioning = false + } + } + } + + let currentChatId = viewModel.currentChat?.id + let previousChatId = context.coordinator.lastChatId + let chatIdChanged = previousChatId != currentChatId + + // Detect ID conversion (temp → permanent) by checking if message IDs match + // This is more reliable than checking wrappers since wrappers only exist for rendered cells + let currentMessageIds = Set(viewModel.messages.map { $0.id }) + let isIdConversion = chatIdChanged && !currentMessageIds.isEmpty && + currentMessageIds == context.coordinator.lastMessageIds + + if chatIdChanged { + context.coordinator.lastChatId = currentChatId + + if !isIdConversion { + context.coordinator.messageWrappers.removeAll() + context.coordinator.shownMessageIds.removeAll() + } + context.coordinator.lastMessageIds = currentMessageIds + } else if currentMessageIds != context.coordinator.lastMessageIds { + // Message IDs changed without chat ID changing (e.g., regenerate) + let idsWereReplaced = !currentMessageIds.isEmpty && + !context.coordinator.lastMessageIds.isEmpty && + currentMessageIds.isDisjoint(with: context.coordinator.lastMessageIds) + + if idsWereReplaced { + // All message IDs are different - clear stale wrappers + context.coordinator.messageWrappers.removeAll() + context.coordinator.shownMessageIds.removeAll() + context.coordinator.heightCache.removeAll() + } + context.coordinator.lastMessageIds = currentMessageIds + tableView.reloadData() + } + + let isDarkModeChanged = context.coordinator.lastIsDarkMode != isDarkMode + let messageCountChanged = context.coordinator.lastMessageCount != messages.count + + if isDarkModeChanged { + context.coordinator.lastIsDarkMode = isDarkMode + DispatchQueue.main.async { + for wrapper in context.coordinator.messageWrappers.values { + wrapper.isDarkMode = isDarkMode + } + } + } + + if messageCountChanged || (chatIdChanged && !isIdConversion) { + context.coordinator.lastMessageCount = messages.count + context.coordinator.heightCache.removeAll() + tableView.reloadData() + } else if isLoading && !messages.isEmpty { + // During streaming, update the last message wrapper directly + if let lastMessage = messages.last, + let wrapper = context.coordinator.messageWrappers[lastMessage.id] { + + let isArchived = messages.count - 1 < archivedMessagesStartIndex + let showArchiveSeparator = messages.count - 1 == archivedMessagesStartIndex && archivedMessagesStartIndex > 0 + + // Update multiplier synchronously to prevent race condition: + // updateUIView is called on every streaming token, and if we defer + // the update to DispatchQueue.main.async, many calls will read the + // stale multiplier and each queue a +10 increment, causing it to + // explode to thousands. + let screenHeight = UIScreen.main.bounds.height + let needsBufferExtension = wrapper.extendBufferIfNeeded(screenHeight: screenHeight) + + let coordinator = context.coordinator + DispatchQueue.main.async { + guard let currentMessage = coordinator.parent.messages.last else { return } + + wrapper.update( + message: currentMessage, + isDarkMode: coordinator.parent.isDarkMode, + isLastMessage: true, + isLoading: coordinator.parent.isLoading, + isArchived: isArchived, + showArchiveSeparator: showArchiveSeparator, + messageIndex: coordinator.parent.messages.count - 1 + ) + + if needsBufferExtension && !coordinator.isKeyboardTransitioning { + tableView.beginUpdates() + tableView.endUpdates() + } + } + } + } + + let isLoadingChanged = context.coordinator.lastIsLoading != isLoading + context.coordinator.lastIsLoading = isLoading + + if isLoadingChanged && !isLoading { + // Streaming just ended - update the last message wrapper to reflect final state (including any errors) + if let lastMessage = messages.last, + let wrapper = context.coordinator.messageWrappers[lastMessage.id] { + let isArchived = messages.count - 1 < archivedMessagesStartIndex + let showArchiveSeparator = messages.count - 1 == archivedMessagesStartIndex && archivedMessagesStartIndex > 0 + wrapper.update( + message: lastMessage, + isDarkMode: isDarkMode, + isLastMessage: true, + isLoading: false, + isArchived: isArchived, + showArchiveSeparator: showArchiveSeparator, + messageIndex: messages.count - 1 + ) + + DispatchQueue.main.async { + wrapper.resetBuffer() + } + } + + DispatchQueue.main.async { + UIView.performWithoutAnimation { + context.coordinator.isUserMessageScrollMode = false + let currentOffset = tableView.contentOffset.y + context.coordinator.updateContentInset() + tableView.layoutIfNeeded() + tableView.contentOffset.y = currentOffset + } + } + } + + if context.coordinator.lastScrollToUserTrigger != scrollToUserTrigger { + context.coordinator.lastScrollToUserTrigger = scrollToUserTrigger + context.coordinator.shouldScrollToUserMessageAfterLayout = true + context.coordinator.shouldScrollToBottomAfterLayout = false + context.coordinator.isUserMessageScrollMode = true + + DispatchQueue.main.async { + context.coordinator.scrollToUserMessage(animated: false) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + if context.coordinator.shouldScrollToUserMessageAfterLayout { + context.coordinator.scrollToUserMessage(animated: false) + context.coordinator.shouldScrollToUserMessageAfterLayout = false + + withAnimation(.easeIn(duration: 0.2)) { + self.tableOpacity = 1.0 + } + } + } + } + } + + if context.coordinator.lastScrollTrigger != scrollTrigger { + context.coordinator.lastScrollTrigger = scrollTrigger + context.coordinator.shouldScrollToBottomAfterLayout = true + context.coordinator.shouldScrollToUserMessageAfterLayout = false + context.coordinator.isUserMessageScrollMode = false + + DispatchQueue.main.async { + context.coordinator.scrollToBottom(animated: false) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + if context.coordinator.shouldScrollToBottomAfterLayout { + context.coordinator.scrollToBottom(animated: false) + context.coordinator.shouldScrollToBottomAfterLayout = false + + withAnimation(.easeIn(duration: 0.2)) { + self.tableOpacity = 1.0 + } + } + } + } + } + + DispatchQueue.main.async { + context.coordinator.checkIfAtBottom() + } + } + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, UITableViewDelegate, UITableViewDataSource { + var parent: MessageTableView + weak var tableView: UITableView? + var lastScrollTrigger: UUID? + var lastScrollToUserTrigger: UUID? + var lastMessageCount: Int = 0 + var lastIsLoading: Bool = false + var cellReuseIdentifierSuffix: String = "" + var lastKeyboardHeight: CGFloat = 0 + var lastIsDarkMode: Bool = false + var lastChatId: String? = nil + var lastMessageIds: Set = [] + private var isDragging = false + private var isUpdatingContentInset = false + var messageWrappers: [String: ObservableMessageWrapper] = [:] + var shouldScrollToBottomAfterLayout = false + var shouldScrollToUserMessageAfterLayout = false + /// Stays true while streaming after user sent a message, adjusting the + /// bottom inset so the user message can be scrolled to the top of the screen. + var isUserMessageScrollMode = false + var heightCache: [IndexPath: CGFloat] = [:] + var messageHeightCache: [String: CGFloat] = [:] + var shownMessageIds: Set = [] + var isKeyboardTransitioning = false + + init(_ parent: MessageTableView) { + self.parent = parent + } + + func getOrCreateWrapper(for message: Message, isDarkMode: Bool, isLastMessage: Bool, isLoading: Bool, isArchived: Bool, showArchiveSeparator: Bool, messageIndex: Int) -> ObservableMessageWrapper { + if let existing = messageWrappers[message.id] { + existing.update(message: message, isDarkMode: isDarkMode, isLastMessage: isLastMessage, isLoading: isLoading, isArchived: isArchived, showArchiveSeparator: showArchiveSeparator, messageIndex: messageIndex) + // Never re-animate existing messages + existing.shouldAnimateAppearance = false + return existing + } else { + let isFirstTimeShown = !shownMessageIds.contains(message.id) + shownMessageIds.insert(message.id) + let wrapper = ObservableMessageWrapper(message: message, isDarkMode: isDarkMode, isLastMessage: isLastMessage, isLoading: isLoading, isArchived: isArchived, showArchiveSeparator: showArchiveSeparator, shouldAnimateAppearance: isFirstTimeShown, messageIndex: messageIndex) + messageWrappers[message.id] = wrapper + return wrapper + } + } + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + if parent.messages.isEmpty { + return 1 + } + return parent.messages.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cellIdentifier = (parent.messages.isEmpty ? "WelcomeCell" : "MessageCell") + cellReuseIdentifierSuffix + + let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) ?? UITableViewCell(style: .default, reuseIdentifier: cellIdentifier) + cell.selectionStyle = .none + cell.backgroundColor = .clear + + if parent.messages.isEmpty { + cell.contentConfiguration = UIHostingConfiguration { + WelcomeView(isDarkMode: parent.isDarkMode) + .padding(.vertical, 16) + .padding(.horizontal, UIDevice.current.userInterfaceIdiom == .pad ? 100 : 0) + .frame(maxWidth: 900) + .frame(maxWidth: .infinity) + } + .minSize(width: 0, height: 0) + .margins(.all, 0) + .background(.clear) + } else { + let message = parent.messages[indexPath.row] + let isLastMessage = indexPath.row == parent.messages.count - 1 + let isArchived = indexPath.row < parent.archivedMessagesStartIndex + let showArchiveSeparator = indexPath.row == parent.archivedMessagesStartIndex && parent.archivedMessagesStartIndex > 0 + + let wrapper = getOrCreateWrapper( + for: message, + isDarkMode: parent.isDarkMode, + isLastMessage: isLastMessage, + isLoading: parent.isLoading && isLastMessage, + isArchived: isArchived, + showArchiveSeparator: showArchiveSeparator, + messageIndex: indexPath.row + ) + + // Always recreate the content configuration to ensure correct wrapper is used + cell.contentConfiguration = UIHostingConfiguration { + ObservableMessageCell(wrapper: wrapper, viewModel: parent.viewModel, coordinator: self) + } + .minSize(width: 0, height: 0) + .margins(.all, 0) + .background(.clear) + } + + return cell + } + + func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { + if let cachedHeight = heightCache[indexPath] { + return cachedHeight + } + // Fall back to message-ID-based cache (survives reloadData) + if indexPath.row < parent.messages.count { + let messageId = parent.messages[indexPath.row].id + if let cachedHeight = messageHeightCache[messageId] { + return cachedHeight + } + } + return 100 + } + + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { + let height = cell.frame.size.height + if height > 0 { + heightCache[indexPath] = height + if indexPath.row < parent.messages.count { + messageHeightCache[parent.messages[indexPath.row].id] = height + } + } + + if shouldScrollToBottomAfterLayout { + let numberOfRows = tableView.numberOfRows(inSection: 0) + if indexPath.row == numberOfRows - 1 { + DispatchQueue.main.async { + self.scrollToBottom(animated: false) + self.shouldScrollToBottomAfterLayout = false + + withAnimation(.easeIn(duration: 0.2)) { + self.parent.tableOpacity = 1.0 + } + } + } + } + + if shouldScrollToUserMessageAfterLayout { + let numberOfRows = tableView.numberOfRows(inSection: 0) + if indexPath.row == numberOfRows - 1 { + DispatchQueue.main.async { + self.scrollToUserMessage(animated: false) + self.shouldScrollToUserMessageAfterLayout = false + + withAnimation(.easeIn(duration: 0.2)) { + self.parent.tableOpacity = 1.0 + } + } + } + } + } + + func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { + } + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + updateContentInset() + checkIfAtBottom() + } + + func updateContentInset() { + guard !isUpdatingContentInset else { return } + guard let tableView = tableView else { return } + isUpdatingContentInset = true + defer { isUpdatingContentInset = false } + + let targetInset: CGFloat + + if parent.isLoading, let lastMessage = parent.messages.last, + let wrapper = messageWrappers[lastMessage.id], wrapper.actualContentHeight > 0 { + + let screenHeight = UIScreen.main.bounds.height + let bufferHeight = screenHeight * wrapper.bufferMultiplier + let unusedBuffer = bufferHeight - wrapper.actualContentHeight + let streamingInset = -max(0, unusedBuffer) + + if isUserMessageScrollMode { + let userMessageInset = insetForUserMessageAtTop(tableView) + targetInset = max(streamingInset, userMessageInset) + } else { + targetInset = streamingInset + } + } else if parent.isLoading && isUserMessageScrollMode { + targetInset = insetForUserMessageAtTop(tableView) + } else { + targetInset = 0 + } + + if tableView.contentInset.bottom != targetInset { + UIView.performWithoutAnimation { + tableView.contentInset.bottom = targetInset + tableView.verticalScrollIndicatorInsets.bottom = targetInset + } + } + } + + /// Returns the minimum bottom inset that allows the user message row + /// (second-to-last) to be scrolled to the top of the visible area. + private func insetForUserMessageAtTop(_ tableView: UITableView) -> CGFloat { + let numberOfRows = tableView.numberOfRows(inSection: 0) + guard numberOfRows >= 2 else { return 0 } + let userMessageIndexPath = IndexPath(row: numberOfRows - 2, section: 0) + let userMessageY = tableView.rectForRow(at: userMessageIndexPath).origin.y + return userMessageY + tableView.bounds.height - tableView.contentSize.height + } + + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + isDragging = true + parent.userHasScrolled = true + parent.viewModel.isScrollInteractionActive = true + shouldScrollToBottomAfterLayout = false + shouldScrollToUserMessageAfterLayout = false + + UIView.animate(withDuration: 0.3) { + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + } + + func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + isDragging = false + if !decelerate { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.parent.viewModel.isScrollInteractionActive = false + } + } + } + + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.parent.viewModel.isScrollInteractionActive = false + } + } + + func scrollToBottom(animated: Bool) { + guard let tableView = tableView else { return } + guard !parent.messages.isEmpty else { return } + + updateContentInset() + + let numberOfRows = tableView.numberOfRows(inSection: 0) + guard numberOfRows > 0 else { return } + guard numberOfRows == parent.messages.count || parent.messages.isEmpty else { return } + + let lastIndexPath = IndexPath(row: numberOfRows - 1, section: 0) + tableView.scrollToRow(at: lastIndexPath, at: .bottom, animated: animated) + } + + /// Scrolls so the user's message sits at the top of the visible area, + /// with the assistant response streaming in below it. + func scrollToUserMessage(animated: Bool) { + guard let tableView = tableView else { return } + + let numberOfRows = tableView.numberOfRows(inSection: 0) + guard numberOfRows >= 2 else { + scrollToBottom(animated: animated) + return + } + guard numberOfRows == parent.messages.count else { return } + + updateContentInset() + + let userMessageIndexPath = IndexPath(row: numberOfRows - 2, section: 0) + tableView.scrollToRow(at: userMessageIndexPath, at: .top, animated: animated) + } + + func checkIfAtBottom() { + guard let tableView = tableView else { return } + guard tableView.window != nil else { return } + + let contentHeight = tableView.contentSize.height + let bottomInset = tableView.contentInset.bottom + let viewHeight = tableView.bounds.height + let currentOffset = tableView.contentOffset.y + + let maxOffset = contentHeight - viewHeight + bottomInset + let distanceFromBottom = maxOffset - currentOffset + + let slack: CGFloat = 150 + let isVisible = distanceFromBottom <= slack + + if parent.isAtBottom != isVisible { + DispatchQueue.main.async { + self.parent.isAtBottom = isVisible + self.parent.viewModel.isAtBottom = isVisible + if isVisible { + self.parent.userHasScrolled = false + } + } + } + } + } +} + +class ObservableMessageWrapper: ObservableObject { + @Published var message: Message + @Published var isDarkMode: Bool + @Published var isLastMessage: Bool + @Published var isLoading: Bool + @Published var isArchived: Bool + @Published var showArchiveSeparator: Bool + @Published var shouldAnimateAppearance: Bool = false + @Published var messageIndex: Int + var bufferMultiplier: CGFloat = Constants.StreamingBuffer.initialMultiplier + var actualContentHeight: CGFloat = 0 + var cachedHeight: CGFloat? + var cachedHeightKey: Int? + + init(message: Message, isDarkMode: Bool, isLastMessage: Bool, isLoading: Bool, isArchived: Bool, showArchiveSeparator: Bool, shouldAnimateAppearance: Bool = true, messageIndex: Int = 0) { + self.message = message + self.isDarkMode = isDarkMode + self.isLastMessage = isLastMessage + self.isLoading = isLoading + self.isArchived = isArchived + self.showArchiveSeparator = showArchiveSeparator + self.shouldAnimateAppearance = shouldAnimateAppearance + self.messageIndex = messageIndex + } + + func update(message: Message, isDarkMode: Bool, isLastMessage: Bool, isLoading: Bool, isArchived: Bool, showArchiveSeparator: Bool, messageIndex: Int) { + let contentChanged = self.message.content != message.content || + self.message.thoughts != message.thoughts || + self.message.contentChunks != message.contentChunks || + self.message.thinkingChunks != message.thinkingChunks || + self.message.isThinking != message.isThinking || + self.message.isCollapsed != message.isCollapsed || + self.message.generationTimeSeconds != message.generationTimeSeconds || + self.message.streamError != message.streamError || + self.isDarkMode != isDarkMode + + let metadataChanged = self.isLastMessage != isLastMessage || + self.isLoading != isLoading || + self.isArchived != isArchived || + self.showArchiveSeparator != showArchiveSeparator || + self.messageIndex != messageIndex + + if !contentChanged && !metadataChanged { + return + } + + if contentChanged { + cachedHeight = nil + cachedHeightKey = nil + } + + // Defer @Published property updates to the next run loop tick. + // UIHostingConfiguration requires the objectWillChange notification + // to arrive on a separate run loop iteration to trigger a re-render. + DispatchQueue.main.async { + self.message = message + self.isDarkMode = isDarkMode + self.isLastMessage = isLastMessage + self.isLoading = isLoading + self.isArchived = isArchived + self.showArchiveSeparator = showArchiveSeparator + self.messageIndex = messageIndex + } + } + + /// Checks whether the streaming buffer needs to grow and extends it if so. + /// Returns true if the buffer was extended. + @discardableResult + func extendBufferIfNeeded(screenHeight: CGFloat) -> Bool { + let currentBufferHeight = screenHeight * bufferMultiplier + let threshold = currentBufferHeight * Constants.StreamingBuffer.extensionThresholdRatio + let needsExtension = actualContentHeight > threshold + && bufferMultiplier < Constants.StreamingBuffer.maxMultiplier + + if needsExtension { + bufferMultiplier += Constants.StreamingBuffer.multiplierIncrement + } + return needsExtension + } + + func resetBuffer() { + bufferMultiplier = Constants.StreamingBuffer.initialMultiplier + actualContentHeight = 0 + } + + func getCacheKey() -> Int { + message.content.hashValue ^ + (message.thoughts?.hashValue ?? 0) ^ + (message.contentChunks.hashValue) ^ + (message.thinkingChunks.hashValue) ^ + isDarkMode.hashValue + } +} + +struct ObservableMessageCell: View { + @ObservedObject var wrapper: ObservableMessageWrapper + @ObservedObject var viewModel: ChatViewModel + weak var coordinator: MessageTableView.Coordinator? + @State private var hasAppeared = false + + private var bufferHeight: CGFloat { + let screenHeight = UIScreen.main.bounds.height + return min( + screenHeight * wrapper.bufferMultiplier, + Constants.StreamingBuffer.maxCellHeight + ) + } + + var body: some View { + VStack(spacing: 0) { + if wrapper.showArchiveSeparator { + HStack(spacing: 8) { + Rectangle() + .frame(height: 1) + .foregroundColor(.gray) + Text("archived") + .foregroundColor(.gray) + .font(.system(size: 12)) + Rectangle() + .frame(height: 1) + .foregroundColor(.gray) + } + .padding(.vertical, 16) + .padding(.horizontal, 24) + } + + ZStack(alignment: .topLeading) { + if wrapper.isLoading && wrapper.isLastMessage { + Color.clear + .frame(height: bufferHeight) + } + + MessageView( + message: wrapper.message, + isDarkMode: wrapper.isDarkMode, + isLastMessage: wrapper.isLastMessage, + isLoading: wrapper.isLoading, + messageIndex: wrapper.messageIndex + ) + .environmentObject(viewModel) + .opacity(wrapper.isArchived ? 0.6 : 1.0) + .padding(.vertical, 8) + .padding(.horizontal, UIDevice.current.userInterfaceIdiom == .pad ? 100 : 8) + .if(UIDevice.current.userInterfaceIdiom == .pad) { view in + view.frame(maxWidth: 900) + .frame(maxWidth: .infinity) + } + .if(wrapper.isLoading && wrapper.isLastMessage) { view in + view.background( + GeometryReader { geometry in + Color.clear + .onChange(of: geometry.size.height) { _, newHeight in + wrapper.actualContentHeight = newHeight + } + } + ) + } + } + } + .opacity(wrapper.shouldAnimateAppearance && !hasAppeared ? 0 : 1) + .onAppear { + if wrapper.shouldAnimateAppearance && !hasAppeared { + withAnimation(.easeIn(duration: 0.2)) { + hasAppeared = true + } + } else { + hasAppeared = true + } + } + } +} + diff --git a/SwiftChat/Views/MessageView.swift b/SwiftChat/Views/MessageView.swift new file mode 100644 index 0000000..eafa04e --- /dev/null +++ b/SwiftChat/Views/MessageView.swift @@ -0,0 +1,1443 @@ +// +// MessageView.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI +import Textual +import SwiftMath +import UIKit + +struct MessageView: View { + let message: Message + let isDarkMode: Bool + let isLastMessage: Bool + let isLoading: Bool + let messageIndex: Int + @EnvironmentObject var viewModel: SwiftChat.ChatViewModel + @State private var showCopyFeedback = false + @State private var cachedParsedContent: (thinkingText: String, remainderText: String, contentHash: Int)? = nil + @State private var showLongMessageSheet = false + @State private var showRawContentModal = false + @State private var isEditMode = false + @State private var editedContent = "" + @State private var showSelectableText = false + @State private var showSourcesSheet = false + @State private var showUserMessageActions = false + @State private var showThoughtsSheet = false + @State private var showURLFetchSheet = false + + var body: some View { + HStack { + if message.role == .user { + Spacer() + } + + VStack(alignment: .trailing, spacing: 4) { + // Show attachment indicators above the message bubble + if message.role == .user && !message.attachments.isEmpty { + MessageAttachmentIndicator( + attachments: message.attachments, + isDarkMode: isDarkMode + ) + } + + VStack(alignment: message.role == .user ? .trailing : .leading, spacing: 2) { + // Show the loading dots for a fresh streaming assistant response (but not if we have thoughts or are thinking) + if message.role == .assistant && + message.content.isEmpty && + message.thoughts == nil && + !message.isThinking && + isLoading && + isLastMessage { + VStack(alignment: .leading, spacing: 4) { + if !message.urlFetches.isEmpty { + URLFetchBox(urlFetches: message.urlFetches, isDarkMode: isDarkMode, onTap: { showURLFetchSheet = true }) + } + + // Show web search box if searching + if let webSearchState = message.webSearchState { + WebSearchBox( + webSearchState: webSearchState, + isDarkMode: isDarkMode, + isStreaming: true, + webSearchSummary: viewModel.webSearchSummary, + onTap: { showSourcesSheet = true } + ) + } + + // Show loading dots if no web search or search is complete + if message.webSearchState == nil || message.webSearchState?.status != .searching { + LoadingDotsView(isDarkMode: isDarkMode) + .padding(.horizontal) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + // If the message is thinking or has thoughts, display them in a thinking box + else if message.isThinking || message.thoughts != nil { + VStack(alignment: .leading, spacing: 4) { + if !message.urlFetches.isEmpty { + URLFetchBox(urlFetches: message.urlFetches, isDarkMode: isDarkMode, onTap: { showURLFetchSheet = true }) + } + + // Web search box (if applicable) - shown before thoughts since search happens first + if let webSearchState = message.webSearchState { + WebSearchBox( + webSearchState: webSearchState, + isDarkMode: isDarkMode, + isStreaming: isLoading && isLastMessage, + webSearchSummary: isLastMessage ? viewModel.webSearchSummary : nil, + onTap: { showSourcesSheet = true } + ) + } + + CollapsibleThinkingBox( + thinkingText: message.thoughts ?? "", + isDarkMode: isDarkMode, + isStreaming: message.isThinking && isLoading && isLastMessage, + generationTimeSeconds: message.generationTimeSeconds, + thinkingSummary: isLastMessage && message.isThinking ? viewModel.thinkingSummary : nil, + onTap: { showThoughtsSheet = true } + ) + + if !message.content.isEmpty { + if !message.contentChunks.isEmpty { + ChunkedContentView(chunks: message.contentChunks, isDarkMode: isDarkMode, isStreaming: isLoading && isLastMessage) + .equatable() + .frame(maxWidth: .infinity, alignment: .leading) + } else { + LaTeXMarkdownView(content: message.content, isDarkMode: isDarkMode, isStreaming: isLoading && isLastMessage) + .equatable() + .frame(maxWidth: .infinity, alignment: .leading) + .transaction { transaction in + transaction.animation = nil + } + } + } + } + } + + // Legacy support: if content still has tags, parse and display + else if let parsed = getParsedMessageContent() { + VStack(alignment: .leading, spacing: 4) { + CollapsibleThinkingBox( + thinkingText: parsed.thinkingText, + isDarkMode: isDarkMode, + isStreaming: isLoading && isLastMessage, + generationTimeSeconds: message.generationTimeSeconds, + thinkingSummary: isLastMessage && !message.content.contains("") ? viewModel.thinkingSummary : nil, + onTap: { showThoughtsSheet = true } + ) + + // Remainder: text after if present + if !parsed.remainderText.isEmpty { + LaTeXMarkdownView(content: parsed.remainderText, isDarkMode: isDarkMode, isStreaming: isLoading && isLastMessage) + .equatable() + .frame(maxWidth: .infinity, alignment: .leading) + .transaction { transaction in + transaction.animation = nil + } + } + } + } + + // Display long user messages as an attachment-style preview that expands on tap + else if message.role == .user && message.shouldDisplayAsAttachment { + if isEditMode { + UserMessageEditView( + content: $editedContent, + isDarkMode: isDarkMode, + onSave: { + viewModel.editMessage(at: messageIndex, newContent: editedContent) + isEditMode = false + }, + onCancel: { + isEditMode = false + editedContent = message.content + } + ) + } else { + LongMessageAttachmentView(message: message, isDarkMode: isDarkMode) { + showLongMessageSheet = true + } + } + } + + else if !message.content.isEmpty { + if message.role == .user { + if isEditMode { + UserMessageEditView( + content: $editedContent, + isDarkMode: isDarkMode, + onSave: { + viewModel.editMessage(at: messageIndex, newContent: editedContent) + isEditMode = false + }, + onCancel: { + isEditMode = false + editedContent = message.content + } + ) + } else { + AdaptiveMarkdownText(content: message.content, isDarkMode: isDarkMode) + } + } else { + VStack(alignment: .leading, spacing: 4) { + if !message.urlFetches.isEmpty { + URLFetchBox(urlFetches: message.urlFetches, isDarkMode: isDarkMode, onTap: { showURLFetchSheet = true }) + } + + // Web search box for non-thinking assistant messages + if let webSearchState = message.webSearchState { + WebSearchBox( + webSearchState: webSearchState, + isDarkMode: isDarkMode, + isStreaming: isLoading && isLastMessage, + webSearchSummary: isLastMessage ? viewModel.webSearchSummary : nil, + onTap: { showSourcesSheet = true } + ) + } + + if !message.contentChunks.isEmpty { + ChunkedContentView(chunks: message.contentChunks, isDarkMode: isDarkMode, isStreaming: isLoading && isLastMessage) + .equatable() + .frame(maxWidth: .infinity, alignment: .leading) + } else { + LaTeXMarkdownView(content: message.content, isDarkMode: isDarkMode, isStreaming: isLoading && isLastMessage) + .equatable() + .frame(maxWidth: .infinity, alignment: .leading) + } + } + } + } + + // Show error box with regenerate button if stream failed + if message.streamError != nil && message.role == .assistant { + ErrorMessageView( + errorMessage: message.streamError!, + isDarkMode: isDarkMode, + isRequestError: message.isRequestError, + onRegenerate: isLastMessage ? { viewModel.regenerateLastResponse() } : nil + ) + .padding(.top, message.content.isEmpty && message.thoughts == nil ? 0 : 8) + } + + // Add action buttons for assistant messages (only when not streaming) + if message.role == .assistant && + (!message.content.isEmpty || message.thoughts != nil) && + !(isLoading && isLastMessage) { + HStack(spacing: 16) { + // Sources button - only show if we have web search sources + if let webSearchState = message.webSearchState, + !webSearchState.sources.isEmpty { + SourcesButton( + sources: webSearchState.sources, + isDarkMode: isDarkMode + ) { + showSourcesSheet = true + } + } + + Button { + showRawContentModal = true + } label: { + Image(systemName: "doc.on.doc") + .font(.system(size: 16)) + .foregroundColor(isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5)) + .frame(width: 32, height: 32) + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + + // Regenerate button - only on the last assistant message + if isLastMessage && !viewModel.isLoading && messageIndex > 0 { + Button { + viewModel.regenerateMessage(at: messageIndex - 1) + } label: { + Image(systemName: "arrow.clockwise") + .font(.system(size: 16)) + .foregroundColor(isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5)) + .frame(width: 32, height: 32) + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + } + + Spacer() + } + .padding(.vertical, 8) + + // AI disclaimer - only on the last assistant message + if isLastMessage { + Text("AI can make mistakes. Verify important information.") + .font(.system(size: 11)) + .foregroundColor(isDarkMode ? .white.opacity(0.35) : .black.opacity(0.35)) + } + } + + } + .padding(.vertical, message.role == .user && message.content.isEmpty ? 0 : 8) + .padding(.horizontal, message.role == .user && !message.content.isEmpty ? 12 : 0) + .background { + if message.role == .user && !message.content.isEmpty { + if #available(iOS 26, *) { + RoundedRectangle(cornerRadius: 16) + .fill(.thickMaterial) + } else { + Color.userMessageBackground(isDarkMode: isDarkMode) + } + } + } + .cornerRadius(16) + .modifier(MessageBubbleModifier(isUserMessage: message.role == .user)) + .contextMenu { + if message.role == .user && !message.content.isEmpty { + Button { + viewModel.regenerateMessage(at: messageIndex) + } label: { + Label("Resend", systemImage: "arrow.clockwise") + } + .disabled(viewModel.isLoading) + + Button { + UIPasteboard.general.string = message.content + } label: { + Label("Copy", systemImage: "doc.on.doc") + } + + Button { + editedContent = message.content + isEditMode = true + } label: { + Label("Edit", systemImage: "pencil") + } + } + } + .onChange(of: message.id) { _, _ in + isEditMode = false + editedContent = "" + } + .onChange(of: viewModel.editRequestedForMessageIndex) { _, newValue in + if newValue == messageIndex && message.role == .user { + editedContent = message.content + isEditMode = true + viewModel.editRequestedForMessageIndex = nil + } + } + + } + } + .padding(.horizontal, 4) + .sheet(isPresented: $showLongMessageSheet) { + LongMessageDetailView( + message: message + ) + .presentationDetents([.medium, .large]) + } + .sheet(isPresented: $showRawContentModal) { + RawContentModalView(message: message) + .presentationDetents([.medium, .large]) + .presentationBackground(isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground)) + } + .sheet(isPresented: $showSelectableText) { + UserMessageSelectView(content: message.content) + .presentationDetents([.medium, .large]) + } + .sheet(isPresented: $showSourcesSheet) { + if let sources = message.webSearchState?.sources { + SourcesSheetView(sources: sources, isDarkMode: isDarkMode) + .presentationDetents([.medium, .large]) + } + } + .sheet(isPresented: $showThoughtsSheet) { + ThoughtsSheetView( + thinkingText: thoughtsContent ?? "", + thinkingChunks: message.thinkingChunks, + generationTimeSeconds: message.generationTimeSeconds, + isDarkMode: isDarkMode + ) + .presentationDetents([.medium, .large]) + .presentationBackground(isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground)) + } + .sheet(isPresented: $showURLFetchSheet) { + URLFetchSheetView(urlFetches: message.urlFetches, isDarkMode: isDarkMode) + .presentationDetents([.medium, .large]) + .presentationBackground(isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground)) + } + .environment(\.openURL, OpenURLAction { url in + if url.scheme == "cite" { + let path = url.absoluteString.dropFirst(5) + if let tildeIndex = path.firstIndex(of: "~") { + let afterFirstTilde = path[path.index(after: tildeIndex)...] + if let secondTildeIndex = afterFirstTilde.firstIndex(of: "~") { + let encodedUrl = String(afterFirstTilde[.. String { + guard text.hasPrefix("") else { return text } + + // If the text has think tags, we need to clean it up + if let endTagRange = text.range(of: "") { + // Get just the text after the closing think tag + return String(text[endTagRange.upperBound...]).trimmingCharacters(in: .whitespacesAndNewlines) + } + + return text.replacingOccurrences(of: "", with: "") + } + + private var thoughtsContent: String? { + if let thoughts = message.thoughts, !thoughts.isEmpty { + return thoughts + } + if message.content.hasPrefix("") { + let tagPrefix = "" + let tagSuffix = "" + let start = message.content.index(message.content.startIndex, offsetBy: tagPrefix.count) + + if let endTagRange = message.content.range(of: tagSuffix, range: start..") ? "" : message.content + } + if message.content.hasPrefix("") { + let tagSuffix = "" + if let endTagRange = message.content.range(of: tagSuffix) { + return String(message.content[endTagRange.upperBound...]).trimmingCharacters(in: .whitespacesAndNewlines) + } + } + return message.content + } + + /// Parse message content with tags + private func getParsedMessageContent() -> (thinkingText: String, remainderText: String)? { + // Parse if content starts with + guard message.content.hasPrefix("") else { return nil } + + let tagPrefix = "" + let tagSuffix = "" + let start = message.content.index(message.content.startIndex, offsetBy: tagPrefix.count) + + if let endTagRange = message.content.range(of: tagSuffix, range: start.. as the thinking text. + let thinkingText = String(message.content[start...]) + return (thinkingText, "") + } + } +} + +private struct LongMessageAttachmentView: View { + let message: Message + let isDarkMode: Bool + let openAction: () -> Void + + private var wordCountText: String { + let words = message.content.split { $0.isWhitespace || $0.isNewline } + return "\(words.count) words" + } + + private var previewText: String { + let trimmed = message.content.trimmingCharacters(in: .whitespacesAndNewlines) + let preview = trimmed.prefix(180) + return preview + (trimmed.count > 180 ? "…" : "") + } + + var body: some View { + HStack(alignment: .top, spacing: 12) { + Image(systemName: "doc.text") + .font(.system(size: 22, weight: .medium)) + .foregroundColor(Color.userMessageForeground(isDarkMode: isDarkMode).opacity(0.85)) + + VStack(alignment: .leading, spacing: 6) { + Text("Long Message") + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(Color.userMessageForeground(isDarkMode: isDarkMode)) + + Text(wordCountText) + .font(.system(size: 12)) + .foregroundColor(Color.userMessageForeground(isDarkMode: isDarkMode).opacity(0.6)) + + Text(previewText) + .font(.system(size: 14)) + .foregroundColor(Color.userMessageForeground(isDarkMode: isDarkMode).opacity(0.85)) + .lineLimit(3) + .multilineTextAlignment(.leading) + } + + Spacer() + + Image(systemName: "chevron.right") + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(Color.userMessageForeground(isDarkMode: isDarkMode).opacity(0.5)) + } + .padding(14) + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + .onTapGesture(perform: openAction) + } +} + +private struct LongMessageDetailView: View { + let message: Message + + @Environment(\.dismiss) private var dismiss + + var body: some View { + NavigationStack { + VStack(alignment: .leading, spacing: 16) { + SelectableTextView(text: message.content) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + } + .padding(20) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + .background(Color.backgroundPrimary) + .navigationTitle("Long Message") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button("Close") { + dismiss() + } + } + } + } + .preferredColorScheme(.dark) + } +} + +private struct SelectableTextView: UIViewRepresentable { + let text: String + @Environment(\.colorScheme) private var colorScheme + + func makeUIView(context: Context) -> UITextView { + let textView = UITextView() + textView.isEditable = false + textView.isSelectable = true + textView.backgroundColor = .clear + textView.font = UIFont.monospacedSystemFont(ofSize: 14, weight: .regular) + textView.textContainerInset = .zero + textView.textContainer.lineFragmentPadding = 0 + textView.alwaysBounceVertical = true + textView.isScrollEnabled = true + textView.showsVerticalScrollIndicator = true + textView.textContainer.lineBreakMode = .byWordWrapping + textView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + textView.setContentHuggingPriority(.defaultLow, for: .horizontal) + return textView + } + + func updateUIView(_ uiView: UITextView, context: Context) { + if uiView.text != text { + uiView.text = text + } + uiView.textColor = colorScheme == .dark ? UIColor(white: 1.0, alpha: 0.92) : UIColor(white: 0.0, alpha: 0.92) + } +} + +private struct UserMessageSelectView: View { + let content: String + @Environment(\.dismiss) private var dismiss + + var body: some View { + NavigationStack { + SelectableTextView(text: content) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + .padding(20) + .background(Color.backgroundPrimary) + .navigationTitle("Select Text") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button("Close") { + dismiss() + } + } + } + } + .preferredColorScheme(.dark) + } +} + +private struct RawContentModalView: View { + let message: Message + + @Environment(\.dismiss) private var dismiss + @Environment(\.colorScheme) private var colorScheme + @State private var showCopyAllFeedback = false + @State private var showCopyResponseFeedback = false + @State private var showCopyThoughtsFeedback = false + + private var isDarkMode: Bool { + colorScheme == .dark + } + + private var hasThoughts: Bool { + if let thoughts = message.thoughts, !thoughts.isEmpty { + return true + } + return message.content.hasPrefix("") + } + + private var thoughtsContent: String? { + if let thoughts = message.thoughts, !thoughts.isEmpty { + return thoughts + } + if message.content.hasPrefix("") { + let tagPrefix = "" + let tagSuffix = "" + let start = message.content.index(message.content.startIndex, offsetBy: tagPrefix.count) + + if let endTagRange = message.content.range(of: tagSuffix, range: start..") ? "" : message.content + } + if message.content.hasPrefix("") { + let tagSuffix = "" + if let endTagRange = message.content.range(of: tagSuffix) { + return String(message.content[endTagRange.upperBound...]).trimmingCharacters(in: .whitespacesAndNewlines) + } + } + return message.content + } + + private var fullRawContent: String { + if let thoughts = thoughtsContent, !thoughts.isEmpty { + if !responseContent.isEmpty { + return thoughts + "\n\n" + responseContent + } + return thoughts + } + return responseContent + } + + private var sheetBackground: Color { + isDarkMode ? Color(hex: "161616") : Color(UIColor.systemGroupedBackground) + } + + var body: some View { + NavigationStack { + VStack(spacing: 0) { + SelectableTextView(text: fullRawContent) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(.horizontal, 20) + + Divider() + + VStack(spacing: 10) { + copyButton( + action: copyAll, + icon: showCopyAllFeedback ? "checkmark" : "doc.on.doc", + label: showCopyAllFeedback ? "Copied All!" : "Copy All" + ) + + if hasThoughts && !responseContent.isEmpty { + copyButton( + action: copyResponse, + icon: showCopyResponseFeedback ? "checkmark" : "text.quote", + label: showCopyResponseFeedback ? "Copied Response!" : "Copy Response" + ) + } + + if hasThoughts { + copyButton( + action: copyThoughts, + icon: showCopyThoughtsFeedback ? "checkmark" : "brain", + label: showCopyThoughtsFeedback ? "Copied Thoughts!" : "Copy Thoughts" + ) + } + } + .padding(20) + } + .background(sheetBackground) + .navigationTitle("Raw Content") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button { + dismiss() + } label: { + Image(systemName: "xmark") + .font(.system(size: 18, weight: .medium)) + } + } + } + } + } + + private func copyButton(action: @escaping () -> Void, icon: String, label: String) -> some View { + Button(action: action) { + HStack(spacing: 8) { + Image(systemName: icon) + Text(label) + } + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .padding(.vertical, 14) + .background(Color.brandAccentDark) + .clipShape(RoundedRectangle(cornerRadius: 12)) + } + } + + private func copyAll() { + UIPasteboard.general.string = fullRawContent + withAnimation { + showCopyAllFeedback = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + withAnimation { + showCopyAllFeedback = false + } + } + } + + private func copyResponse() { + UIPasteboard.general.string = responseContent + withAnimation { + showCopyResponseFeedback = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + withAnimation { + showCopyResponseFeedback = false + } + } + } + + private func copyThoughts() { + if let thoughts = thoughtsContent { + UIPasteboard.general.string = thoughts + withAnimation { + showCopyThoughtsFeedback = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + withAnimation { + showCopyThoughtsFeedback = false + } + } + } + } +} + +/// Modifier that handles message bubble sizing based on sender +struct MessageBubbleModifier: ViewModifier { + let isUserMessage: Bool + + func body(content: Content) -> some View { + Group { + if isUserMessage { + content + // User messages get adaptive width based on content with minimum width + .frame(minWidth: 60, idealWidth: nil, maxWidth: max(60, UIScreen.main.bounds.width * 0.85), alignment: .trailing) + .frame(maxWidth: .infinity, alignment: .trailing) + } else { + content + // Assistant messages get nearly full width + .frame(maxWidth: .infinity, alignment: .leading) + } + } + } +} + +/// A view that renders Markdown content using the Textual library. +struct MarkdownText: View { + let content: String + let isDarkMode: Bool + let horizontalPadding: CGFloat + + init(content: String, isDarkMode: Bool, horizontalPadding: CGFloat = 0) { + self.content = content + self.isDarkMode = isDarkMode + self.horizontalPadding = horizontalPadding + } + + var body: some View { + StructuredText(markdown: content) + .textual.structuredTextStyle(.gitHub) + .textual.highlighterTheme(.default) + .textual.textSelection(.enabled) + .fixedSize(horizontal: false, vertical: true) + .padding(.horizontal, horizontalPadding) + .environment(\.colorScheme, isDarkMode ? .dark : .light) + .frame(maxWidth: .infinity, alignment: .leading) + } +} + +/// A specialized markdown text view for user messages +struct AdaptiveMarkdownText: View { + let content: String + let isDarkMode: Bool + let horizontalPadding: CGFloat + + init(content: String, isDarkMode: Bool, horizontalPadding: CGFloat = 0) { + self.content = content + self.isDarkMode = isDarkMode + self.horizontalPadding = horizontalPadding + } + + var body: some View { + StructuredText(markdown: content) + .textual.structuredTextStyle(.gitHub) + .textual.highlighterTheme(.default) + .fixedSize(horizontal: false, vertical: true) + .padding(.bottom, -16) + .padding(.horizontal, horizontalPadding) + .environment(\.colorScheme, isDarkMode ? .dark : .light) + } +} + +struct CollapsibleThinkingBox: View { + let thinkingText: String + let isDarkMode: Bool + let isStreaming: Bool + let generationTimeSeconds: Double? + let thinkingSummary: String? + let onTap: () -> Void + + var body: some View { + Button(action: onTap) { + HStack { + if let seconds = generationTimeSeconds { + Text("Thought for \(String(format: "%.1f", seconds))s") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : Color.black.opacity(0.6)) + } else if isStreaming { + if let summary = thinkingSummary, !summary.isEmpty { + Text(summary) + .font(.subheadline) + .foregroundColor(isDarkMode ? .white : Color.black.opacity(0.8)) + .lineLimit(1) + .truncationMode(.tail) + .modifier(TextPulseAnimation()) + } else { + HStack(spacing: 4) { + Text("Thinking") + .font(.system(size: 16)) + .foregroundColor(isDarkMode ? .white : Color.black.opacity(0.8)) + InlineLoadingDotsView(isDarkMode: isDarkMode) + } + .modifier(TextPulseAnimation()) + } + } else { + Text("Thinking") + .font(.system(size: 16)) + .foregroundColor(isDarkMode ? .white : Color.black.opacity(0.8)) + } + Spacer() + Image(systemName: "chevron.right") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.4) : .black.opacity(0.4)) + } + .padding(.vertical, 8) + .contentShape(Rectangle()) + } + .buttonStyle(NoHighlightButtonStyle()) + } +} + +struct ThoughtsSheetView: View { + let thinkingText: String + let thinkingChunks: [ThinkingChunk] + let generationTimeSeconds: Double? + let isDarkMode: Bool + @Environment(\.dismiss) private var dismiss + + private var titleText: String { + if let seconds = generationTimeSeconds { + return "Thought for \(String(format: "%.1f", seconds))s" + } + return "Thoughts" + } + + var body: some View { + NavigationStack { + ScrollView { + VStack(alignment: .leading, spacing: 0) { + if !thinkingChunks.isEmpty { + ForEach(thinkingChunks) { chunk in + ThinkingChunkView(chunk: chunk, isDarkMode: isDarkMode) + .equatable() + } + } else { + Text(thinkingText) + .font(.system(.body)) + .foregroundColor(isDarkMode ? .white.opacity(0.9) : Color.black.opacity(0.8)) + } + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + } + .navigationTitle(titleText) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Done") { dismiss() } + } + } + } + } +} + +struct ThinkingChunkView: View, Equatable { + let chunk: ThinkingChunk + let isDarkMode: Bool + + static func == (lhs: ThinkingChunkView, rhs: ThinkingChunkView) -> Bool { + if lhs.chunk.isComplete && rhs.chunk.isComplete { + return lhs.chunk.id == rhs.chunk.id && lhs.isDarkMode == rhs.isDarkMode + } + return lhs.chunk.id == rhs.chunk.id && + lhs.chunk.content == rhs.chunk.content && + lhs.isDarkMode == rhs.isDarkMode + } + + var body: some View { + Text(chunk.content) + .font(.system(.body)) + .foregroundColor(isDarkMode ? .white.opacity(0.9) : Color.black.opacity(0.8)) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.bottom, 8) + } +} + +struct LoadingDotsView: View { + let isDarkMode: Bool + + var body: some View { + HStack(spacing: 4) { + ForEach(0..<3) { index in + Circle() + .frame(width: 6, height: 6) + .modifier(PulsingAnimation(delay: 0.2 * Double(index))) + } + } + .foregroundColor(isDarkMode ? .white : .black) + } +} + +struct InlineLoadingDotsView: View { + let isDarkMode: Bool + + var body: some View { + HStack(spacing: 2) { + ForEach(0..<3) { index in + Circle() + .frame(width: 4, height: 4) + .modifier(PulsingAnimation(delay: 0.2 * Double(index))) + } + } + .foregroundColor(isDarkMode ? .white.opacity(0.8) : Color.black.opacity(0.7)) + } +} + +struct NoHighlightButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + } +} + +struct PulsingAnimation: ViewModifier { + let delay: Double + @State private var isPulsing = false + + func body(content: Content) -> some View { + content + .scaleEffect(isPulsing ? 1.0 : 0.6) + .opacity(isPulsing ? 1.0 : 0.3) + .animation( + Animation.easeInOut(duration: 0.6) + .repeatForever(autoreverses: true) + .delay(delay), + value: isPulsing + ) + .onAppear { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + isPulsing = true + } + } + } +} + +struct TextPulseAnimation: ViewModifier { + @State private var offset: CGFloat = -1.0 + + func body(content: Content) -> some View { + content + .overlay( + GeometryReader { geometry in + let shimmerWidth = geometry.size.width * 0.4 + LinearGradient( + colors: [ + .clear, + .white.opacity(0.35), + .clear + ], + startPoint: .leading, + endPoint: .trailing + ) + .frame(width: shimmerWidth) + .offset(x: offset * (geometry.size.width + shimmerWidth)) + .frame(maxWidth: .infinity, alignment: .leading) + } + .mask(content) + ) + .onAppear { + withAnimation( + .easeInOut(duration: 2.0) + .repeatForever(autoreverses: false) + ) { + offset = 1.0 + } + } + } +} + +struct MessageActionsView: View { + @EnvironmentObject var viewModel: SwiftChat.ChatViewModel + + var body: some View { + EmptyView() // Placeholder - replace with actual content when needed + } +} + +/// A simplified code block view without syntax highlighting + +struct ChunkedContentView: View, Equatable { + let chunks: [ContentChunk] + let isDarkMode: Bool + let isStreaming: Bool + + static func == (lhs: ChunkedContentView, rhs: ChunkedContentView) -> Bool { + lhs.chunks == rhs.chunks && + lhs.isDarkMode == rhs.isDarkMode && + lhs.isStreaming == rhs.isStreaming + } + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + ForEach(chunks) { chunk in + ChunkView(chunk: chunk, isDarkMode: isDarkMode, isStreaming: isStreaming) + } + } + } +} + +struct ChunkView: View, Equatable { + let chunk: ContentChunk + let isDarkMode: Bool + let isStreaming: Bool + + static func == (lhs: ChunkView, rhs: ChunkView) -> Bool { + if lhs.chunk.isComplete && rhs.chunk.isComplete { + return lhs.chunk.id == rhs.chunk.id && lhs.isDarkMode == rhs.isDarkMode + } + return lhs.chunk.id == rhs.chunk.id && + lhs.chunk.isComplete == rhs.chunk.isComplete && + lhs.chunk.content == rhs.chunk.content && + lhs.isDarkMode == rhs.isDarkMode && + lhs.isStreaming == rhs.isStreaming + } + + var body: some View { + if chunk.type == .table && isStreaming { + GeneratingTableView(isDarkMode: isDarkMode) + } else { + LaTeXMarkdownView( + content: chunk.content, + isDarkMode: isDarkMode, + isStreaming: chunk.isComplete ? false : isStreaming + ) + .equatable() + } + } +} + +struct GeneratingTableView: View { + let isDarkMode: Bool + + var body: some View { + HStack(spacing: 8) { + Text("Generating table") + .font(.subheadline.weight(.medium)) + .foregroundColor(isDarkMode ? .white : .black) + InlineLoadingDotsView(isDarkMode: isDarkMode) + } + .frame(height: 48) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 16) + .background( + RoundedRectangle(cornerRadius: 8) + .stroke(isDarkMode ? Color.white.opacity(0.15) : Color.black.opacity(0.15), lineWidth: 1) + ) + } +} + +struct ErrorMessageView: View { + let errorMessage: String + let isDarkMode: Bool + var isRequestError: Bool = false + var onRegenerate: (() -> Void)? = nil + + private var accentColor: Color { + isRequestError ? .red : .orange + } + + private var isConnectionError: Bool { + let msg = errorMessage.lowercased() + return msg.contains("internet connection") || msg.contains("network") || msg.contains("connection was lost") || msg.contains("unable to connect") + } + + private var headerIcon: String { + if isConnectionError { return "wifi.exclamationmark" } + return "exclamationmark.triangle" + } + + private var headerText: String { + if isConnectionError { return "Connection Lost" } + return "Something Went Wrong" + } + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 8) { + Image(systemName: headerIcon) + .foregroundColor(accentColor) + .font(.system(size: 16)) + + Text(headerText) + .font(.subheadline.weight(.medium)) + .foregroundColor(isDarkMode ? .white : .black) + + Spacer() + } + + Text(errorMessage) + .font(.caption) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.7)) + .multilineTextAlignment(.leading) + + HStack(spacing: 8) { + if let onRegenerate = onRegenerate { + Button(action: onRegenerate) { + HStack(spacing: 6) { + Image(systemName: "arrow.clockwise") + .font(.system(size: 12, weight: .medium)) + Text("Try again") + .font(.subheadline.weight(.medium)) + } + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 8) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(accentColor) + ) + } + .buttonStyle(PlainButtonStyle()) + } + } + } + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(accentColor.opacity(0.1)) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(accentColor.opacity(0.3), lineWidth: 1) + ) + ) + } +} + +struct UserMessageEditView: View { + @Binding var content: String + let isDarkMode: Bool + let onSave: () -> Void + let onCancel: () -> Void + @FocusState private var isFocused: Bool + + private var textColor: Color { + isDarkMode ? .white : .black + } + + private var secondaryTextColor: Color { + isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5) + } + + private var buttonBackgroundColor: Color { + isDarkMode ? .white.opacity(0.1) : .black.opacity(0.1) + } + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + Text("Messages below will be deleted and regenerated.") + .font(.system(size: 12)) + .foregroundColor(secondaryTextColor) + + TextField("Edit message...", text: $content, axis: .vertical) + .textFieldStyle(.plain) + .font(.body) + .foregroundColor(textColor) + .lineLimit(1...4) + .focused($isFocused) + .onAppear { + isFocused = true + } + .onSubmit { + if !content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + onSave() + } + } + + HStack(spacing: 8) { + Spacer() + + Button(action: onCancel) { + Text("Cancel") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(secondaryTextColor) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(buttonBackgroundColor) + .cornerRadius(6) + } + .buttonStyle(PlainButtonStyle()) + + Button(action: { + if !content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + onSave() + } + }) { + Text("Save") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.white) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(Color.accentPrimary) + .cornerRadius(6) + } + .buttonStyle(PlainButtonStyle()) + } + } + } +} + +// MARK: - Sources Button and Sheet + +/// Button showing "Sources" with overlapping favicons +private struct SourcesButton: View { + let sources: [WebSearchSource] + let isDarkMode: Bool + let action: () -> Void + + private var uniqueDomains: [String] { + var seen = Set() + var domains: [String] = [] + for source in sources { + let domain = getDomain(from: source.url) + if !seen.contains(domain) { + seen.insert(domain) + domains.append(domain) + } + if domains.count >= 4 { break } + } + return domains + } + + private func getDomain(from urlString: String) -> String { + guard let url = URL(string: urlString), + let host = url.host else { + return urlString + } + return host.hasPrefix("www.") ? String(host.dropFirst(4)) : host + } + + private func faviconUrl(for domain: String) -> String { + "https://icons.duckduckgo.com/ip3/\(domain).ico" + } + + var body: some View { + Button(action: action) { + HStack(spacing: 4) { + Text("Sources") + .font(.system(size: 13, weight: .medium)) + + // Overlapping favicons + HStack(spacing: -6) { + ForEach(Array(uniqueDomains.enumerated()), id: \.offset) { index, domain in + AsyncImage(url: URL(string: faviconUrl(for: domain))) { phase in + switch phase { + case .success(let image): + image + .resizable() + .aspectRatio(contentMode: .fit) + case .failure, .empty: + Image(systemName: "globe") + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(.gray) + @unknown default: + EmptyView() + } + } + .frame(width: 18, height: 18) + .background(isDarkMode ? Color.black : Color.white) + .clipShape(Circle()) + .overlay(Circle().stroke(isDarkMode ? Color.white.opacity(0.2) : Color.black.opacity(0.1), lineWidth: 1)) + .zIndex(Double(uniqueDomains.count - index)) + } + } + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(isDarkMode ? Color.white.opacity(0.1) : Color.black.opacity(0.05)) + .cornerRadius(20) + } + .buttonStyle(PlainButtonStyle()) + .foregroundColor(isDarkMode ? .white : .black) + } +} + +/// Sheet view showing all sources +private struct SourcesSheetView: View { + let sources: [WebSearchSource] + let isDarkMode: Bool + @Environment(\.dismiss) private var dismiss + + private func getDomain(from urlString: String) -> String { + guard let url = URL(string: urlString), + let host = url.host else { + return urlString + } + return host.hasPrefix("www.") ? String(host.dropFirst(4)) : host + } + + private func faviconUrl(for domain: String) -> String { + "https://icons.duckduckgo.com/ip3/\(domain).ico" + } + + var body: some View { + NavigationStack { + List { + ForEach(sources) { source in + Button { + if let url = URL(string: source.url) { + UIApplication.shared.open(url) + } + } label: { + HStack(spacing: 12) { + AsyncImage(url: URL(string: faviconUrl(for: getDomain(from: source.url)))) { phase in + switch phase { + case .success(let image): + image + .resizable() + .aspectRatio(contentMode: .fit) + case .failure, .empty: + Image(systemName: "globe") + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(.gray) + @unknown default: + EmptyView() + } + } + .frame(width: 24, height: 24) + .clipShape(RoundedRectangle(cornerRadius: 4)) + + VStack(alignment: .leading, spacing: 2) { + Text(source.title) + .font(.system(size: 15, weight: .medium)) + .foregroundColor(isDarkMode ? .white : .black) + .lineLimit(2) + + Text(getDomain(from: source.url)) + .font(.system(size: 13)) + .foregroundColor(.gray) + } + + Spacer() + + Image(systemName: "arrow.up.right") + .font(.system(size: 12)) + .foregroundColor(.gray) + } + .padding(.vertical, 4) + } + .buttonStyle(PlainButtonStyle()) + } + } + .listStyle(.plain) + .navigationTitle("Sources") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Done") { + dismiss() + } + } + } + } + .preferredColorScheme(isDarkMode ? .dark : .light) + } +} diff --git a/SwiftChat/Views/URLFetchBox.swift b/SwiftChat/Views/URLFetchBox.swift new file mode 100644 index 0000000..ea1e9f6 --- /dev/null +++ b/SwiftChat/Views/URLFetchBox.swift @@ -0,0 +1,171 @@ +// +// URLFetchBox.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +/// Inline row showing URL fetch count; tapping opens detail sheet +struct URLFetchBox: View { + let urlFetches: [URLFetchState] + let isDarkMode: Bool + let onTap: () -> Void + + private var isFetching: Bool { + urlFetches.contains { $0.status == .fetching } + } + + private var completedCount: Int { + urlFetches.filter { $0.status == .completed }.count + } + + var body: some View { + Button(action: onTap) { + HStack { + if isFetching { + HStack(spacing: 8) { + ProgressView() + .scaleEffect(0.6) + .frame(width: 14, height: 14) + Text("Reading \(urlFetches.count) link\(urlFetches.count == 1 ? "" : "s")") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.8)) + } + } else { + HStack(spacing: 8) { + Image(systemName: "link") + .font(.system(size: 13)) + .foregroundColor(isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5)) + Text("Read \(completedCount) link\(completedCount == 1 ? "" : "s")") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.6)) + fetchFavicons + } + } + Spacer() + if !isFetching { + Image(systemName: "chevron.right") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.4) : .black.opacity(0.4)) + } + } + .padding(.vertical, 8) + .contentShape(Rectangle()) + } + .buttonStyle(NoHighlightButtonStyle()) + .disabled(urlFetches.isEmpty) + } + + @ViewBuilder + private var fetchFavicons: some View { + HStack(spacing: -4) { + ForEach(Array(urlFetches.filter { $0.status == .completed }.prefix(4).enumerated()), id: \.element.id) { index, fetch in + FaviconView(url: fetch.url, isDarkMode: isDarkMode) + .zIndex(Double(4 - index)) + } + if completedCount > 4 { + Text("+\(completedCount - 4)") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.6) : .black.opacity(0.6)) + .padding(.leading, 6) + } + } + } +} + +/// Sheet view showing all URL fetches with their status +struct URLFetchSheetView: View { + let urlFetches: [URLFetchState] + let isDarkMode: Bool + @Environment(\.dismiss) private var dismiss + + var body: some View { + NavigationStack { + List { + ForEach(urlFetches) { fetch in + URLFetchSheetRow(fetch: fetch, isDarkMode: isDarkMode) + .listRowBackground(Color.clear) + } + } + .listStyle(.plain) + .navigationTitle("Links") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + Button("Done") { dismiss() } + } + } + } + } +} + +/// A single row in the URL fetch sheet +private struct URLFetchSheetRow: View { + let fetch: URLFetchState + let isDarkMode: Bool + + private var displayHost: String { + guard let urlObj = URL(string: fetch.url), + let host = urlObj.host else { return fetch.url } + return host.replacingOccurrences(of: "www.", with: "") + } + + var body: some View { + Button(action: openURL) { + HStack(spacing: 10) { + FaviconView(url: fetch.url, isDarkMode: isDarkMode) + .opacity(fetch.status == .failed || fetch.status == .blocked ? 0.4 : 1.0) + + VStack(alignment: .leading, spacing: 2) { + Text(displayHost) + .font(.system(size: 14, weight: .medium)) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.85)) + .lineLimit(1) + + Text(statusLabel) + .font(.system(size: 12)) + .foregroundColor(statusColor) + } + + Spacer() + + if fetch.status == .completed { + Image(systemName: "arrow.up.right") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.4) : .black.opacity(0.4)) + } + } + .padding(.vertical, 4) + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + .disabled(fetch.status != .completed) + } + + private var statusLabel: String { + switch fetch.status { + case .fetching: return "Reading..." + case .completed: return "Read" + case .failed: return "Failed" + case .blocked: return "Blocked" + } + } + + private var statusColor: Color { + switch fetch.status { + case .fetching: return isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5) + case .completed: return isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5) + case .failed: return .red.opacity(0.7) + case .blocked: return .orange.opacity(0.7) + } + } + + private func openURL() { + guard let url = URL(string: fetch.url), + url.scheme == "https" || url.scheme == "http" else { return } + UIApplication.shared.open(url) + } +} diff --git a/SwiftChat/Views/WebSearchBox.swift b/SwiftChat/Views/WebSearchBox.swift new file mode 100644 index 0000000..f6c076e --- /dev/null +++ b/SwiftChat/Views/WebSearchBox.swift @@ -0,0 +1,226 @@ +// +// WebSearchBox.swift +// SwiftChat +// +// Created on 03/25/26. +// Copyright © 2026 Sacha Servan-Schreiber. All rights reserved. +// + +import SwiftUI + +/// Inline row showing web search status; tapping opens sources sheet +struct WebSearchBox: View { + let webSearchState: WebSearchState + let isDarkMode: Bool + let isStreaming: Bool + let webSearchSummary: String? + let onTap: () -> Void + + var body: some View { + Button(action: onTap) { + HStack { + headerContent + Spacer() + if webSearchState.status != .searching && !webSearchState.sources.isEmpty { + Image(systemName: "chevron.right") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.4) : .black.opacity(0.4)) + } + } + .padding(.vertical, 8) + .contentShape(Rectangle()) + } + .buttonStyle(NoHighlightButtonStyle()) + .disabled(webSearchState.status == .searching || webSearchState.sources.isEmpty) + } + + @ViewBuilder + private var headerContent: some View { + switch webSearchState.status { + case .searching: + HStack(spacing: 8) { + SearchingDotsView(isDarkMode: isDarkMode) + if let summary = webSearchSummary, !summary.isEmpty { + Text(summary) + .font(.subheadline) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.8)) + .lineLimit(1) + .truncationMode(.tail) + } else if let query = webSearchState.query { + Text("Searching: \(query)") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.8)) + .lineLimit(1) + .truncationMode(.tail) + } else { + Text("Searching the web...") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.8)) + } + } + + case .completed: + HStack(spacing: 8) { + Image(systemName: "globe") + .foregroundColor(.blue) + .font(.system(size: 14)) + + if webSearchState.sources.isEmpty { + Text("Web search completed") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.6)) + } else { + Text("\(webSearchState.sources.count) source\(webSearchState.sources.count == 1 ? "" : "s") found") + .font(.subheadline) + .foregroundColor(isDarkMode ? .white.opacity(0.7) : .black.opacity(0.6)) + + sourceFavicons + } + } + + case .failed: + HStack(spacing: 8) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.red) + .font(.system(size: 14)) + Text("Search failed") + .font(.subheadline) + .foregroundColor(.red.opacity(0.8)) + } + + case .blocked: + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + .font(.system(size: 14)) + Text(webSearchState.reason ?? "Search blocked") + .font(.subheadline) + .foregroundColor(.orange.opacity(0.8)) + .lineLimit(1) + .truncationMode(.tail) + } + } + } + + @ViewBuilder + private var sourceFavicons: some View { + HStack(spacing: -4) { + ForEach(Array(webSearchState.sources.prefix(4).enumerated()), id: \.element.id) { index, source in + FaviconView(url: source.url, isDarkMode: isDarkMode) + .zIndex(Double(4 - index)) + } + if webSearchState.sources.count > 4 { + Text("+\(webSearchState.sources.count - 4)") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.6) : .black.opacity(0.6)) + .padding(.leading, 6) + } + } + } + +} + +/// Animated dots for searching state +struct SearchingDotsView: View { + let isDarkMode: Bool + + var body: some View { + HStack(spacing: 3) { + ForEach(0..<3) { index in + Circle() + .frame(width: 5, height: 5) + .modifier(PulsingAnimation(delay: 0.15 * Double(index))) + } + } + .foregroundColor(.blue) + } +} + +/// Favicon view that displays a website icon +struct FaviconView: View { + let url: String + let isDarkMode: Bool + + private var faviconURL: URL? { + guard let urlObj = URL(string: url), + let host = urlObj.host else { return nil } + return URL(string: "https://icons.duckduckgo.com/ip3/\(host).ico") + } + + var body: some View { + AsyncImage(url: faviconURL) { phase in + switch phase { + case .empty: + placeholderIcon + case .success(let image): + image + .resizable() + .aspectRatio(contentMode: .fit) + case .failure: + placeholderIcon + @unknown default: + placeholderIcon + } + } + .frame(width: 16, height: 16) + .background(isDarkMode ? Color.white.opacity(0.1) : Color.black.opacity(0.05)) + .clipShape(RoundedRectangle(cornerRadius: 4)) + .overlay( + RoundedRectangle(cornerRadius: 4) + .stroke(isDarkMode ? Color.white.opacity(0.2) : Color.black.opacity(0.1), lineWidth: 0.5) + ) + } + + private var placeholderIcon: some View { + Image(systemName: "globe") + .font(.system(size: 10)) + .foregroundColor(isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5)) + } +} + +/// Row view for a single source +struct SourceRowView: View { + let source: WebSearchSource + let isDarkMode: Bool + + private var displayHost: String { + guard let url = URL(string: source.url), + let host = url.host else { return source.url } + return host.replacingOccurrences(of: "www.", with: "") + } + + var body: some View { + Button(action: openURL) { + HStack(spacing: 10) { + FaviconView(url: source.url, isDarkMode: isDarkMode) + + VStack(alignment: .leading, spacing: 2) { + Text(source.title) + .font(.system(size: 13, weight: .medium)) + .foregroundColor(isDarkMode ? .white : .black.opacity(0.85)) + .lineLimit(1) + .truncationMode(.tail) + + Text(displayHost) + .font(.system(size: 11)) + .foregroundColor(isDarkMode ? .white.opacity(0.5) : .black.opacity(0.5)) + .lineLimit(1) + } + + Spacer() + + Image(systemName: "arrow.up.right") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(isDarkMode ? .white.opacity(0.4) : .black.opacity(0.4)) + } + .padding(.vertical, 6) + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + } + + private func openURL() { + guard let url = URL(string: source.url) else { return } + UIApplication.shared.open(url) + } +} diff --git a/SwiftChat/swift-chat.icon/Assets/smallcircle-fill-circle-fill-svgrepo-com.svg b/SwiftChat/swift-chat.icon/Assets/smallcircle-fill-circle-fill-svgrepo-com.svg new file mode 100644 index 0000000..3913c7c --- /dev/null +++ b/SwiftChat/swift-chat.icon/Assets/smallcircle-fill-circle-fill-svgrepo-com.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/SwiftChat/swift-chat.icon/icon.json b/SwiftChat/swift-chat.icon/icon.json new file mode 100644 index 0000000..4143c42 --- /dev/null +++ b/SwiftChat/swift-chat.icon/icon.json @@ -0,0 +1,50 @@ +{ + "fill" : { + "automatic-gradient" : "srgb:1.00000,1.00000,1.00000,1.00000" + }, + "groups" : [ + { + "layers" : [ + { + "blend-mode" : "darken", + "fill" : { + "automatic-gradient" : "display-p3:0.01871,0.08824,0.27462,1.00000", + "orientation" : { + "start" : { + "x" : 0.5, + "y" : 0 + }, + "stop" : { + "x" : 0.5, + "y" : 0.7 + } + } + }, + "image-name" : "smallcircle-fill-circle-fill-svgrepo-com.svg", + "name" : "smallcircle-fill-circle-fill-svgrepo-com", + "position" : { + "scale" : 1, + "translation-in-points" : [ + 0, + 0 + ] + } + } + ], + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : true, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "circles" : [ + "watchOS" + ], + "squares" : "shared" + } +} \ No newline at end of file diff --git a/SwiftChatTests/SwiftChatTests.swift b/SwiftChatTests/SwiftChatTests.swift new file mode 100644 index 0000000..8c60a7a --- /dev/null +++ b/SwiftChatTests/SwiftChatTests.swift @@ -0,0 +1,16 @@ +// +// SwiftChatTests.swift +// SwiftChatTests +// +// Created by Sacha on 3/25/26. +// + +import Testing + +struct SwiftChatTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/SwiftChatUITests/SwiftChatUITests.swift b/SwiftChatUITests/SwiftChatUITests.swift new file mode 100644 index 0000000..f3f379e --- /dev/null +++ b/SwiftChatUITests/SwiftChatUITests.swift @@ -0,0 +1,41 @@ +// +// SwiftChatUITests.swift +// SwiftChatUITests +// +// Created by Sacha on 3/25/26. +// + +import XCTest + +final class SwiftChatUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } +} diff --git a/SwiftChatUITests/SwiftChatUITestsLaunchTests.swift b/SwiftChatUITests/SwiftChatUITestsLaunchTests.swift new file mode 100644 index 0000000..43c1fbc --- /dev/null +++ b/SwiftChatUITests/SwiftChatUITestsLaunchTests.swift @@ -0,0 +1,33 @@ +// +// SwiftChatUITestsLaunchTests.swift +// SwiftChatUITests +// +// Created by Sacha on 3/25/26. +// + +import XCTest + +final class SwiftChatUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +}