From cb74fdf00823fa7dd2c34dedef33f92c87533c24 Mon Sep 17 00:00:00 2001 From: Nathan Roll Date: Thu, 17 Sep 2026 04:27:05 -0700 Subject: [PATCH 1/6] Add optional Orukeet Core ML preview with verified Hugging Face install --- Sources/Fluid/Persistence/SettingsStore.swift | 39 +++- Sources/Fluid/Services/ASRService.swift | 4 +- .../Fluid/Services/FluidAudioProvider.swift | 26 ++- .../Fluid/Services/OrukeetModelStore.swift | 192 ++++++++++++++++++ .../VoiceEngineSettingsViewModel.swift | 2 + .../UI/AISettingsView+SpeechRecognition.swift | 68 ++++--- Sources/Fluid/UI/AISettingsView.swift | 1 + Sources/Fluid/UI/WelcomeView.swift | 39 ++-- .../OrukeetModelStoreTests.swift | 39 ++++ 9 files changed, 342 insertions(+), 68 deletions(-) create mode 100644 Sources/Fluid/Services/OrukeetModelStore.swift create mode 100644 Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift diff --git a/Sources/Fluid/Persistence/SettingsStore.swift b/Sources/Fluid/Persistence/SettingsStore.swift index cd10fcdec..9e7a38262 100644 --- a/Sources/Fluid/Persistence/SettingsStore.swift +++ b/Sources/Fluid/Persistence/SettingsStore.swift @@ -4661,6 +4661,7 @@ final class SettingsStore: ObservableObject { // MARK: - FluidAudio Models (Apple Silicon Only) case parakeetTDT = "parakeet-tdt" + case orukeet = "orukeet-coreml-preview" case parakeetTDTv2 = "parakeet-tdt-v2" case parakeetRealtime = "parakeet-realtime" case qwen3Asr = "qwen3-asr" @@ -4691,6 +4692,7 @@ final class SettingsStore: ObservableObject { var displayName: String { switch self { + case .orukeet: return "Orukeet (Core ML Preview)" case .parakeetTDT: return "Parakeet TDT v3 (Multilingual)" case .parakeetTDTv2: return "Parakeet TDT v2 (English Only)" case .parakeetRealtime: return "Parakeet Flash (Beta)" @@ -4712,7 +4714,7 @@ final class SettingsStore: ObservableObject { var languageSupport: String { switch self { - case .parakeetTDT: + case .parakeetTDT, .orukeet: return "25 Languages" case .parakeetTDTv2: return "English Only (Higher Accuracy)" case .parakeetRealtime: return "English Only (Live Streaming)" @@ -4728,6 +4730,7 @@ final class SettingsStore: ObservableObject { var downloadSize: String { switch self { + case .orukeet: return "~445 MiB" case .parakeetTDT: return "~460.9 MiB" case .parakeetTDTv2: return "~442.9 MiB" case .parakeetRealtime: return "~428.4 MiB" @@ -4749,6 +4752,7 @@ final class SettingsStore: ObservableObject { var expectedDownloadBytes: Int64 { switch self { + case .orukeet: return 466_579_851 case .parakeetTDT: return 483_288_717 case .parakeetTDTv2: return 464_421_712 case .parakeetRealtime: return 449_190_189 @@ -4768,14 +4772,14 @@ final class SettingsStore: ObservableObject { var requiresAppleSilicon: Bool { switch self { - case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320: return true + case .orukeet, .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320: return true default: return false } } var isWhisperModel: Bool { switch self { - case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320, .appleSpeech, .appleSpeechAnalyzer: return false + case .orukeet, .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320, .appleSpeech, .appleSpeechAnalyzer: return false default: return true } } @@ -4890,6 +4894,7 @@ final class SettingsStore: ObservableObject { /// Human-readable marketing name for the card UI var humanReadableName: String { switch self { + case .orukeet: return "Orukeet - Multilingual" case .parakeetTDT: return "Blazing Fast - Multilingual" case .parakeetTDTv2: return "Blazing Fast - English" case .parakeetRealtime: return "Flash Dictation" @@ -4912,6 +4917,8 @@ final class SettingsStore: ObservableObject { /// One-line description for the card UI var cardDescription: String { switch self { + case .orukeet: + return "Local transcription using Oruk's adaptation of Parakeet TDT v3. Core ML preview with CC BY-SA 4.0 weights." case .parakeetTDT: return "Fast multilingual transcription. Supports Bulgarian, Croatian, Czech, Danish, " + "Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, " + @@ -4953,7 +4960,7 @@ final class SettingsStore: ObservableObject { /// Minimum recommended RAM in GB for this model to run safely var requiredMemoryGB: Double { switch self { - case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime: + case .orukeet, .parakeetTDT, .parakeetTDTv2, .parakeetRealtime: return 4.0 case .qwen3Asr: return 8.0 @@ -4994,9 +5001,13 @@ final class SettingsStore: ObservableObject { } } + /// Preview models stay unrated until they have app-specific measurements. + var hasPerformanceRatings: Bool { self != .orukeet } + /// Speed rating (1-5, higher is faster) var speedRating: Int { switch self { + case .orukeet: return 0 // Preview has no app-specific performance rating. case .parakeetTDT: return 5 case .parakeetTDTv2: return 5 case .parakeetRealtime: return 5 @@ -5018,6 +5029,7 @@ final class SettingsStore: ObservableObject { /// Accuracy rating (1-5, higher is more accurate) var accuracyRating: Int { switch self { + case .orukeet: return 0 // Preview has no app-specific performance rating. case .parakeetTDT: return 5 case .parakeetTDTv2: return 5 case .parakeetRealtime: return 4 @@ -5039,6 +5051,7 @@ final class SettingsStore: ObservableObject { /// Exact speed percentage (0.0 - 1.0) for the liquid bars var speedPercent: Double { switch self { + case .orukeet: return 0 case .parakeetTDT: return 1.0 case .parakeetTDTv2: return 1.0 case .parakeetRealtime: return 1.0 @@ -5060,6 +5073,7 @@ final class SettingsStore: ObservableObject { /// Exact accuracy percentage (0.0 - 1.0) for the liquid bars var accuracyPercent: Double { switch self { + case .orukeet: return 0 case .parakeetTDT: return 0.92 case .parakeetTDTv2: return 0.96 case .parakeetRealtime: return 0.75 @@ -5081,6 +5095,7 @@ final class SettingsStore: ObservableObject { /// Optional badge text for the card (e.g., "FluidVoice Pick") var badgeText: String? { switch self { + case .orukeet: return "Preview" case .parakeetTDT: return "FluidVoice Pick" case .parakeetTDTv2: return "FluidVoice Pick" case .parakeetRealtime: return "Beta" @@ -5095,7 +5110,7 @@ final class SettingsStore: ObservableObject { /// Optimization level for Apple Silicon (for display) var appleSiliconOptimized: Bool { switch self { - case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320, .appleSpeechAnalyzer: + case .orukeet, .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .qwen3Asr, .cohereTranscribeSixBit, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320, .appleSpeechAnalyzer: return true default: return false @@ -5163,11 +5178,13 @@ final class SettingsStore: ObservableObject { case openai = "OpenAI" case qwen = "Qwen" case cohere = "Cohere" + case oruk = "Oruk" } /// Which provider this model belongs to var provider: Provider { switch self { + case .orukeet: return .oruk case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320: return .nvidia case .appleSpeech, .appleSpeechAnalyzer: @@ -5189,6 +5206,12 @@ final class SettingsStore: ObservableObject { /// Whether this model is built-in or already downloaded on disk var isInstalled: Bool { switch self { + case .orukeet: + #if arch(arm64) + return OrukeetModelStore.isInstalled + #else + return false + #endif case .appleSpeech, .appleSpeechAnalyzer: return true case .parakeetTDT: @@ -5297,6 +5320,7 @@ final class SettingsStore: ObservableObject { /// Brand/provider name for the model (NVIDIA, Apple, OpenAI) var brandName: String { switch self { + case .orukeet: return "Oruk / NVIDIA" case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320: return "NVIDIA" case .qwen3Asr: @@ -5321,6 +5345,7 @@ final class SettingsStore: ObservableObject { /// Brand color for the provider badge var brandColorHex: String { switch self { + case .orukeet: return "#725643" case .parakeetTDT, .parakeetTDTv2, .parakeetRealtime, .nemotronOffline, .nemotronStreaming, .nemotronStreaming320: return "#76B900" case .qwen3Asr: @@ -5751,7 +5776,7 @@ extension SettingsStore { extension SettingsStore.SpeechModel { var supportedLanguageCodes: String? { switch self { - case .parakeetTDT: + case .parakeetTDT, .orukeet: return "BG, HR, CS, DA, NL, EN, ET, FI, FR, DE, EL, HU, IT, LV, LT, MT, PL, PT, RO, SK, SL, ES, SV, RU, UK" case .parakeetRealtime: return "EN" @@ -5768,7 +5793,7 @@ extension SettingsStore.SpeechModel { var supportedLanguageNames: String? { switch self { - case .parakeetTDT: + case .parakeetTDT, .orukeet: return """ Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian, and Ukrainian """ diff --git a/Sources/Fluid/Services/ASRService.swift b/Sources/Fluid/Services/ASRService.swift index 6d90b906c..ccad335fd 100644 --- a/Sources/Fluid/Services/ASRService.swift +++ b/Sources/Fluid/Services/ASRService.swift @@ -768,7 +768,7 @@ final class ASRService: ObservableObject { } case .appleSpeech: return self.getAppleSpeechProvider() - case .parakeetTDT, .parakeetTDTv2: + case .parakeetTDT, .parakeetTDTv2, .orukeet: return self.getFluidAudioProvider() case .parakeetRealtime: return self.getParakeetRealtimeProvider() @@ -897,7 +897,7 @@ final class ASRService: ObservableObject { } case .appleSpeech: return AppleSpeechProvider() - case .parakeetTDT, .parakeetTDTv2: + case .parakeetTDT, .parakeetTDTv2, .orukeet: // Create a new provider configured for the specific model return FluidAudioProvider(modelOverride: model, configureWordBoosting: false) case .parakeetRealtime: diff --git a/Sources/Fluid/Services/FluidAudioProvider.swift b/Sources/Fluid/Services/FluidAudioProvider.swift index 64d3d9887..a5f7b8d21 100644 --- a/Sources/Fluid/Services/FluidAudioProvider.swift +++ b/Sources/Fluid/Services/FluidAudioProvider.swift @@ -59,7 +59,7 @@ final class FluidAudioProvider: TranscriptionProvider { let selectedModel = self.modelOverride ?? SettingsStore.shared.selectedSpeechModel let asrModelVersion: AsrModelVersion = selectedModel == .parakeetTDTv2 ? .v2 : .v3 let modelVersion = selectedModel == .parakeetTDTv2 ? "v2" : "v3" - self.pronunciationModelKey = "parakeet-\(modelVersion)" + self.pronunciationModelKey = selectedModel == .orukeet ? "orukeet" : "parakeet-\(modelVersion)" let cacheDirectory = AsrModels.defaultCacheDirectory().deletingLastPathComponent() let modelCacheDirectory = AsrModels.defaultCacheDirectory(for: asrModelVersion) DebugLogger.shared.info( @@ -68,7 +68,7 @@ final class FluidAudioProvider: TranscriptionProvider { ) DebugLogger.shared.debug("FluidAudioProvider: target cache directory=\(cacheDirectory.path)", source: "FluidAudioProvider") try Task.checkCancellation() - if FileManager.default.fileExists(atPath: modelCacheDirectory.path), !self.modelsExistOnDisk() { + if selectedModel != .orukeet, FileManager.default.fileExists(atPath: modelCacheDirectory.path), !self.modelsExistOnDisk() { DebugLogger.shared.warning( "FluidAudioProvider: removing incomplete \(modelVersion) cache before download", source: "FluidAudioProvider" @@ -94,10 +94,14 @@ final class FluidAudioProvider: TranscriptionProvider { // Download and load models let models: AsrModels do { - models = try await AsrModels.downloadAndLoad( - version: asrModelVersion, - progressHandler: fluidAudioProgressHandler - ) + if selectedModel == .orukeet { + models = try await OrukeetModelStore.prepare(progress: progressRelay) + } else { + models = try await AsrModels.downloadAndLoad( + version: asrModelVersion, + progressHandler: fluidAudioProgressHandler + ) + } } catch { let nsError = error as NSError if Task.isCancelled @@ -129,7 +133,7 @@ final class FluidAudioProvider: TranscriptionProvider { // Shares the same underlying MLModel objects (reference types) so memory overhead // is only the decoder state (~100KB). let finalManager: AsrManager - if self.configureWordBoosting { + if self.configureWordBoosting && selectedModel != .orukeet { do { if let vocabBundle = try await ParakeetVocabularyStore.shared.loadTokenizedVocabularyBundle() { DebugLogger.shared.debug( @@ -697,7 +701,7 @@ final class FluidAudioProvider: TranscriptionProvider { func modelsExistOnDisk() -> Bool { let selectedModel = self.modelOverride ?? SettingsStore.shared.selectedSpeechModel switch selectedModel { - case .parakeetTDT, .parakeetTDTv2: + case .parakeetTDT, .parakeetTDTv2, .orukeet: return selectedModel.isInstalled default: return false @@ -714,7 +718,11 @@ final class FluidAudioProvider: TranscriptionProvider { ) let start = Date() - if selectedModel == .parakeetTDTv2 { + if selectedModel == .orukeet { + if FileManager.default.fileExists(atPath: OrukeetModelStore.directory.path) { + try FileManager.default.removeItem(at: OrukeetModelStore.directory) + } + } else if selectedModel == .parakeetTDTv2 { // Clear v2 cache only let v2CacheDir = baseCacheDir.appendingPathComponent("parakeet-tdt-0.6b-v2-coreml") if FileManager.default.fileExists(atPath: v2CacheDir.path) { diff --git a/Sources/Fluid/Services/OrukeetModelStore.swift b/Sources/Fluid/Services/OrukeetModelStore.swift new file mode 100644 index 000000000..85fde1c08 --- /dev/null +++ b/Sources/Fluid/Services/OrukeetModelStore.swift @@ -0,0 +1,192 @@ +#if arch(arm64) + import CoreML + import CryptoKit + import FluidAudio + import Foundation + + /// Installs the portable Orukeet preview in its own cache. Network access happens only on installation. + nonisolated enum OrukeetModelStore { + static let revision = "43142dd1897f9ddadcd70173fcb5ff45c08aa951" + static let archiveSHA256 = "b2a6efc4ed3280c860f29b3e2e2ea242ade14c6482c94f1c8d3e8551d5edb626" + static let archiveBytes = 466_579_851 + static let components = ["Preprocessor", "Encoder", "Decoder", "JointDecisionv3"] + static var directory: URL { + FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] + .appendingPathComponent("Orukeet/coreml-baseline-20260915", isDirectory: true) + } + + static var isInstalled: Bool { + installed(at: directory) + } + + static func installed(at directory: URL) -> Bool { + let stamp = try? String( + contentsOf: directory.appendingPathComponent(".revision"), encoding: .utf8) + return stamp == revision + && components.allSatisfy { name in + let compiled = directory.appendingPathComponent("\(name).mlmodelc") + return fileHasContents(compiled.appendingPathComponent("coremldata.bin")) + && fileHasContents(compiled.appendingPathComponent("weights/weight.bin")) + } && fileHasContents(directory.appendingPathComponent("parakeet_vocab.json")) + } + + private static func fileHasContents(_ url: URL) -> Bool { + guard let values = try? url.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey]) else { + return false + } + return values.isRegularFile == true && (values.fileSize ?? 0) > 0 + } + + private struct Manifest: Decodable { + struct Archive: Decodable { + let filename: String + let bytes: Int + let sha256: String + } + let archives: [String: Archive] + } + + static func prepare(progress: ModelPreparationProgressRelay) async throws -> AsrModels { + if !isInstalled { + try await OrukeetInstallation.shared.install(progress: progress) + } + try Task.checkCancellation() + progress.report(.loading) + return try load(from: directory) + } + + static func install(progress: ModelPreparationProgressRelay) async throws { + guard + let base = URL(string: "https://huggingface.co/oruk/orukeet/resolve/\(revision)/coreml/") + else { + throw URLError(.badURL) + } + progress.report(.preparingDownload) + // The NeMo repository's JSON manifest is counted by Hugging Face. It is also + // consumed here to verify the pinned artifact, never fetched during transcription. + let (metadata, response) = try await URLSession.shared.data( + from: base.appendingPathComponent("manifest.json")) + try validateHTTP(response) + let manifest = try JSONDecoder().decode(Manifest.self, from: metadata) + guard let archive = manifest.archives["baseline"], + archive.filename == "orukeet-r3-coreml-baseline.zip", + archive.bytes == archiveBytes, archive.sha256 == archiveSHA256 + else { throw CocoaError(.fileReadCorruptFile) } + try Task.checkCancellation() + progress.report(.downloading(0)) + let (temporary, archiveResponse) = try await URLSession.shared.download( + from: base.appendingPathComponent(archive.filename)) + defer { try? FileManager.default.removeItem(at: temporary) } + try validateHTTP(archiveResponse) + try Task.checkCancellation() + progress.report(.optimizing) + try installArchive(at: temporary, to: directory) + } + + /// Separate from acquisition so the exact installer can be regression-tested with the pinned archive offline. + static func installArchive(at archive: URL, to destination: URL) throws { + guard try archive.resourceValues(forKeys: [.fileSizeKey]).fileSize == archiveBytes, + try checksum(of: archive) == archiveSHA256 + else { throw CocoaError(.fileReadCorruptFile) } + let files = FileManager.default + let parent = destination.deletingLastPathComponent() + try files.createDirectory(at: parent, withIntermediateDirectories: true) + let staging = parent.appendingPathComponent( + ".install-\(UUID().uuidString)", isDirectory: true) + try files.createDirectory(at: staging, withIntermediateDirectories: true) + defer { try? files.removeItem(at: staging) } + let unpack = Process() + unpack.executableURL = URL(fileURLWithPath: "/usr/bin/ditto") + unpack.arguments = ["-x", "-k", archive.path, staging.path] + try unpack.run() + unpack.waitUntilExit() + guard unpack.terminationStatus == 0 else { throw CocoaError(.fileReadCorruptFile) } + let bundle = staging.appendingPathComponent("orukeet-r3-coreml-baseline", isDirectory: true) + for name in components { + try Task.checkCancellation() + let compiled = try MLModel.compileModel( + at: bundle.appendingPathComponent("\(name).mlpackage")) + defer { try? files.removeItem(at: compiled) } + try files.moveItem(at: compiled, to: bundle.appendingPathComponent("\(name).mlmodelc")) + try files.removeItem(at: bundle.appendingPathComponent("\(name).mlpackage")) + } + // Reject an incompatible vocabulary before making the install visible. + _ = try vocabulary(in: bundle) + try revision.write( + to: bundle.appendingPathComponent(".revision"), atomically: true, encoding: .utf8) + try Task.checkCancellation() + if files.fileExists(atPath: destination.path) { try files.removeItem(at: destination) } + try files.moveItem(at: bundle, to: destination) + } + + static func load(from directory: URL) throws -> AsrModels { + let vocabulary = try vocabulary(in: directory) + func component(_ name: String, _ units: MLComputeUnits) throws -> MLModel { + let configuration = MLModelConfiguration() + configuration.computeUnits = units + return try MLModel( + contentsOf: directory.appendingPathComponent("\(name).mlmodelc"), + configuration: configuration) + } + let configuration = MLModelConfiguration() + configuration.computeUnits = .cpuAndNeuralEngine + return try AsrModels( + encoder: component("Encoder", .cpuAndNeuralEngine), + preprocessor: component("Preprocessor", .cpuOnly), + decoder: component("Decoder", .cpuAndNeuralEngine), + joint: component("JointDecisionv3", .cpuAndNeuralEngine), + configuration: configuration, vocabulary: vocabulary, version: .v3) + } + + private static func vocabulary(in directory: URL) throws -> [Int: String] { + let data = try Data(contentsOf: directory.appendingPathComponent("parakeet_vocab.json")) + let raw = try JSONDecoder().decode([String: String].self, from: data) + var result: [Int: String] = [:] + for (key, token) in raw { + guard let id = Int(key), (0..<8192).contains(id), result[id] == nil else { + throw CocoaError(.fileReadCorruptFile) + } + result[id] = token + } + guard result.count == 8192 else { throw CocoaError(.fileReadCorruptFile) } + return result + } + + private static func checksum(of file: URL) throws -> String { + let handle = try FileHandle(forReadingFrom: file) + defer { try? handle.close() } + var hasher = SHA256() + while let data = try handle.read(upToCount: 8 * 1024 * 1024), !data.isEmpty { + try Task.checkCancellation() + hasher.update(data: data) + } + return hasher.finalize().map { String(format: "%02x", $0) }.joined() + } + + private static func validateHTTP(_ response: URLResponse) throws { + guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { + throw URLError(.badServerResponse) + } + } + } + + /// Coalesce model preparation so selecting a model during a download cannot start + /// another transfer or replace a directory while the first install is compiling. + private actor OrukeetInstallation { + static let shared = OrukeetInstallation() + private var task: Task? + + func install(progress: ModelPreparationProgressRelay) async throws { + if let task { return try await task.value } + guard !OrukeetModelStore.isInstalled else { return } + let task = Task { try await OrukeetModelStore.install(progress: progress) } + self.task = task + defer { self.task = nil } + try await withTaskCancellationHandler { + try await task.value + } onCancel: { + task.cancel() + } + } + } +#endif diff --git a/Sources/Fluid/UI/AISettings/VoiceEngineSettingsViewModel.swift b/Sources/Fluid/UI/AISettings/VoiceEngineSettingsViewModel.swift index 8ca7b4f10..589c17aec 100644 --- a/Sources/Fluid/UI/AISettings/VoiceEngineSettingsViewModel.swift +++ b/Sources/Fluid/UI/AISettings/VoiceEngineSettingsViewModel.swift @@ -89,6 +89,8 @@ final class VoiceEngineSettingsViewModel: ObservableObject { break case .nvidia: models = models.filter { $0.provider == .nvidia } + case .oruk: + models = models.filter { $0.provider == .oruk } case .apple: models = models.filter { $0.provider == .apple } case .cohere: diff --git a/Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift b/Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift index c55b5d2cf..9e4d87009 100644 --- a/Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift +++ b/Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift @@ -249,25 +249,27 @@ extension VoiceEngineSettingsView { } .frame(maxWidth: .infinity, alignment: .leading) - HStack(spacing: 16) { - LiquidBar( - fillPercent: model.speedPercent, - color: .yellow, - secondaryColor: .orange, - icon: "bolt.fill", - label: "Speed" - ) + if model.hasPerformanceRatings { + HStack(spacing: 16) { + LiquidBar( + fillPercent: model.speedPercent, + color: .yellow, + secondaryColor: .orange, + icon: "bolt.fill", + label: "Speed" + ) - LiquidBar( - fillPercent: model.accuracyPercent, - color: Color.fluidGreen, - secondaryColor: .cyan, - icon: "target", - label: "Accuracy" - ) + LiquidBar( + fillPercent: model.accuracyPercent, + color: Color.fluidGreen, + secondaryColor: .cyan, + icon: "target", + label: "Accuracy" + ) + } + .frame(width: 140, alignment: .center) + .animation(.spring(response: 0.5, dampingFraction: 0.7), value: model.id) } - .frame(width: 140, alignment: .center) - .animation(.spring(response: 0.5, dampingFraction: 0.7), value: model.id) } if supportsCustomWords { @@ -331,22 +333,24 @@ extension VoiceEngineSettingsView { .foregroundStyle(self.voiceEngineSecondaryText) HStack(spacing: 12) { - HStack(spacing: 4) { - Image(systemName: "bolt.fill") - .font(.system(size: 11)) - .foregroundStyle(.yellow) - Text("Speed \(Int(model.speedPercent * 100))%") - .font(self.theme.typography.bodyStrong) - .foregroundStyle(self.voiceEngineSecondaryText) - } + if model.hasPerformanceRatings { + HStack(spacing: 4) { + Image(systemName: "bolt.fill") + .font(.system(size: 11)) + .foregroundStyle(.yellow) + Text("Speed \(Int(model.speedPercent * 100))%") + .font(self.theme.typography.bodyStrong) + .foregroundStyle(self.voiceEngineSecondaryText) + } - HStack(spacing: 4) { - Image(systemName: "target") - .font(.system(size: 11)) - .foregroundStyle(Color.fluidGreen) - Text("Acc \(Int(model.accuracyPercent * 100))%") - .font(self.theme.typography.bodyStrong) - .foregroundStyle(self.voiceEngineSecondaryText) + HStack(spacing: 4) { + Image(systemName: "target") + .font(.system(size: 11)) + .foregroundStyle(Color.fluidGreen) + Text("Acc \(Int(model.accuracyPercent * 100))%") + .font(self.theme.typography.bodyStrong) + .foregroundStyle(self.voiceEngineSecondaryText) + } } if isSelected && !isActive { diff --git a/Sources/Fluid/UI/AISettingsView.swift b/Sources/Fluid/UI/AISettingsView.swift index a8268a356..66f058d9c 100644 --- a/Sources/Fluid/UI/AISettingsView.swift +++ b/Sources/Fluid/UI/AISettingsView.swift @@ -70,6 +70,7 @@ enum ModelSortOption: String, CaseIterable, Identifiable { enum SpeechProviderFilter: String, CaseIterable, Identifiable { case all = "All" case nvidia = "NVIDIA" + case oruk = "Oruk" case apple = "Apple" case cohere = "Cohere" case openai = "OpenAI" diff --git a/Sources/Fluid/UI/WelcomeView.swift b/Sources/Fluid/UI/WelcomeView.swift index fceede03a..4db89b9bd 100644 --- a/Sources/Fluid/UI/WelcomeView.swift +++ b/Sources/Fluid/UI/WelcomeView.swift @@ -2006,27 +2006,30 @@ struct OnboardingFlowView: View { } } + @ViewBuilder private func onboardingModelFeaturePanel(for model: SettingsStore.SpeechModel) -> some View { - VStack(spacing: 10) { - self.onboardingModelMetricRow( - fillPercent: model.speedPercent, - color: .yellow, - secondaryColor: .orange, - icon: "bolt.fill", - label: "Speed" - ) + if model.hasPerformanceRatings { + VStack(spacing: 10) { + self.onboardingModelMetricRow( + fillPercent: model.speedPercent, + color: .yellow, + secondaryColor: .orange, + icon: "bolt.fill", + label: "Speed" + ) - self.onboardingModelMetricRow( - fillPercent: model.accuracyPercent, - color: Color.fluidGreen, - secondaryColor: .cyan, - icon: "target", - label: "Accuracy" - ) + self.onboardingModelMetricRow( + fillPercent: model.accuracyPercent, + color: Color.fluidGreen, + secondaryColor: .cyan, + icon: "target", + label: "Accuracy" + ) + } + .padding(.vertical, 2) + .accessibilityElement(children: .combine) + .accessibilityLabel("Speed \(Int(model.speedPercent * 100)) percent. Accuracy \(Int(model.accuracyPercent * 100)) percent.") } - .padding(.vertical, 2) - .accessibilityElement(children: .combine) - .accessibilityLabel("Speed \(Int(model.speedPercent * 100)) percent. Accuracy \(Int(model.accuracyPercent * 100)) percent.") } private func onboardingModelPreparationStatus(isUninstalling: Bool) -> some View { diff --git a/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift new file mode 100644 index 000000000..beb21a8cc --- /dev/null +++ b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift @@ -0,0 +1,39 @@ +@testable import FluidVoice_Debug +import Foundation +import XCTest + +#if arch(arm64) +final class OrukeetModelStoreTests: XCTestCase { + func testRejectsIncompleteInstallation() { + let missing = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + XCTAssertFalse(OrukeetModelStore.installed(at: missing)) + XCTAssertThrowsError(try OrukeetModelStore.load(from: missing)) + } + + func testRejectsCorruptArchiveBeforeCreatingInstallation() throws { + let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: root) } + let archive = root.appendingPathComponent("corrupt.zip") + try Data("not a model archive".utf8).write(to: archive) + let destination = root.appendingPathComponent("installed") + XCTAssertThrowsError(try OrukeetModelStore.installArchive(at: archive, to: destination)) + XCTAssertFalse(FileManager.default.fileExists(atPath: destination.path)) + } + + /// Opt-in integration check using the actual pinned Hugging Face archive. + func testCompilesPortableBundleAndDetectsMissingComponent() throws { + guard let path = ProcessInfo.processInfo.environment["ORUKEET_COREML_ARCHIVE"] else { + throw XCTSkip("Set ORUKEET_COREML_ARCHIVE to the pinned baseline ZIP") + } + let destination = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + defer { try? FileManager.default.removeItem(at: destination) } + try OrukeetModelStore.installArchive(at: URL(fileURLWithPath: path), to: destination) + XCTAssertTrue(OrukeetModelStore.installed(at: destination)) + XCTAssertEqual(try OrukeetModelStore.load(from: destination).vocabulary.count, 8192) + try FileManager.default.removeItem(at: destination.appendingPathComponent("Encoder.mlmodelc")) + XCTAssertFalse(OrukeetModelStore.installed(at: destination)) + XCTAssertThrowsError(try OrukeetModelStore.load(from: destination)) + } +} +#endif From 5e1e892ad119c0690ae53d2081942ede83f00b40 Mon Sep 17 00:00:00 2001 From: Nathan Roll Date: Thu, 17 Sep 2026 04:32:06 -0700 Subject: [PATCH 2/6] Preserve previous Orukeet cache when replacement fails --- .../Fluid/Services/OrukeetModelStore.swift | 295 +++++++++--------- .../OrukeetModelStoreTests.swift | 15 +- 2 files changed, 169 insertions(+), 141 deletions(-) diff --git a/Sources/Fluid/Services/OrukeetModelStore.swift b/Sources/Fluid/Services/OrukeetModelStore.swift index 85fde1c08..c255204cb 100644 --- a/Sources/Fluid/Services/OrukeetModelStore.swift +++ b/Sources/Fluid/Services/OrukeetModelStore.swift @@ -1,192 +1,207 @@ #if arch(arm64) - import CoreML - import CryptoKit - import FluidAudio - import Foundation +import CoreML +import CryptoKit +import FluidAudio +import Foundation - /// Installs the portable Orukeet preview in its own cache. Network access happens only on installation. - nonisolated enum OrukeetModelStore { +/// Installs the portable Orukeet preview in its own cache. Network access happens only on installation. +nonisolated enum OrukeetModelStore { static let revision = "43142dd1897f9ddadcd70173fcb5ff45c08aa951" static let archiveSHA256 = "b2a6efc4ed3280c860f29b3e2e2ea242ade14c6482c94f1c8d3e8551d5edb626" static let archiveBytes = 466_579_851 static let components = ["Preprocessor", "Encoder", "Decoder", "JointDecisionv3"] static var directory: URL { - FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] - .appendingPathComponent("Orukeet/coreml-baseline-20260915", isDirectory: true) + FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] + .appendingPathComponent("Orukeet/coreml-baseline-20260915", isDirectory: true) } static var isInstalled: Bool { - installed(at: directory) + installed(at: directory) } static func installed(at directory: URL) -> Bool { - let stamp = try? String( - contentsOf: directory.appendingPathComponent(".revision"), encoding: .utf8) - return stamp == revision - && components.allSatisfy { name in - let compiled = directory.appendingPathComponent("\(name).mlmodelc") - return fileHasContents(compiled.appendingPathComponent("coremldata.bin")) - && fileHasContents(compiled.appendingPathComponent("weights/weight.bin")) - } && fileHasContents(directory.appendingPathComponent("parakeet_vocab.json")) + let stamp = try? String( + contentsOf: directory.appendingPathComponent(".revision"), encoding: .utf8) + return stamp == revision + && components.allSatisfy { name in + let compiled = directory.appendingPathComponent("\(name).mlmodelc") + return fileHasContents(compiled.appendingPathComponent("coremldata.bin")) + && fileHasContents(compiled.appendingPathComponent("weights/weight.bin")) + } && fileHasContents(directory.appendingPathComponent("parakeet_vocab.json")) } private static func fileHasContents(_ url: URL) -> Bool { - guard let values = try? url.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey]) else { - return false - } - return values.isRegularFile == true && (values.fileSize ?? 0) > 0 + guard let values = try? url.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey]) else { + return false + } + return values.isRegularFile == true && (values.fileSize ?? 0) > 0 } private struct Manifest: Decodable { - struct Archive: Decodable { - let filename: String - let bytes: Int - let sha256: String - } - let archives: [String: Archive] + struct Archive: Decodable { + let filename: String + let bytes: Int + let sha256: String + } + let archives: [String: Archive] } static func prepare(progress: ModelPreparationProgressRelay) async throws -> AsrModels { - if !isInstalled { - try await OrukeetInstallation.shared.install(progress: progress) - } - try Task.checkCancellation() - progress.report(.loading) - return try load(from: directory) + if !isInstalled { + try await OrukeetInstallation.shared.install(progress: progress) + } + try Task.checkCancellation() + progress.report(.loading) + return try load(from: directory) } static func install(progress: ModelPreparationProgressRelay) async throws { - guard - let base = URL(string: "https://huggingface.co/oruk/orukeet/resolve/\(revision)/coreml/") - else { - throw URLError(.badURL) - } - progress.report(.preparingDownload) - // The NeMo repository's JSON manifest is counted by Hugging Face. It is also - // consumed here to verify the pinned artifact, never fetched during transcription. - let (metadata, response) = try await URLSession.shared.data( - from: base.appendingPathComponent("manifest.json")) - try validateHTTP(response) - let manifest = try JSONDecoder().decode(Manifest.self, from: metadata) - guard let archive = manifest.archives["baseline"], - archive.filename == "orukeet-r3-coreml-baseline.zip", - archive.bytes == archiveBytes, archive.sha256 == archiveSHA256 - else { throw CocoaError(.fileReadCorruptFile) } - try Task.checkCancellation() - progress.report(.downloading(0)) - let (temporary, archiveResponse) = try await URLSession.shared.download( - from: base.appendingPathComponent(archive.filename)) - defer { try? FileManager.default.removeItem(at: temporary) } - try validateHTTP(archiveResponse) - try Task.checkCancellation() - progress.report(.optimizing) - try installArchive(at: temporary, to: directory) + guard + let base = URL(string: "https://huggingface.co/oruk/orukeet/resolve/\(revision)/coreml/") + else { + throw URLError(.badURL) + } + progress.report(.preparingDownload) + // The NeMo repository's JSON manifest is counted by Hugging Face. It is also + // consumed here to verify the pinned artifact, never fetched during transcription. + let (metadata, response) = try await URLSession.shared.data( + from: base.appendingPathComponent("manifest.json")) + try validateHTTP(response) + let manifest = try JSONDecoder().decode(Manifest.self, from: metadata) + guard let archive = manifest.archives["baseline"], + archive.filename == "orukeet-r3-coreml-baseline.zip", + archive.bytes == archiveBytes, archive.sha256 == archiveSHA256 + else { throw CocoaError(.fileReadCorruptFile) } + try Task.checkCancellation() + progress.report(.downloading(0)) + let (temporary, archiveResponse) = try await URLSession.shared.download( + from: base.appendingPathComponent(archive.filename)) + defer { try? FileManager.default.removeItem(at: temporary) } + try validateHTTP(archiveResponse) + try Task.checkCancellation() + progress.report(.optimizing) + try installArchive(at: temporary, to: directory) } /// Separate from acquisition so the exact installer can be regression-tested with the pinned archive offline. static func installArchive(at archive: URL, to destination: URL) throws { - guard try archive.resourceValues(forKeys: [.fileSizeKey]).fileSize == archiveBytes, - try checksum(of: archive) == archiveSHA256 - else { throw CocoaError(.fileReadCorruptFile) } - let files = FileManager.default - let parent = destination.deletingLastPathComponent() - try files.createDirectory(at: parent, withIntermediateDirectories: true) - let staging = parent.appendingPathComponent( - ".install-\(UUID().uuidString)", isDirectory: true) - try files.createDirectory(at: staging, withIntermediateDirectories: true) - defer { try? files.removeItem(at: staging) } - let unpack = Process() - unpack.executableURL = URL(fileURLWithPath: "/usr/bin/ditto") - unpack.arguments = ["-x", "-k", archive.path, staging.path] - try unpack.run() - unpack.waitUntilExit() - guard unpack.terminationStatus == 0 else { throw CocoaError(.fileReadCorruptFile) } - let bundle = staging.appendingPathComponent("orukeet-r3-coreml-baseline", isDirectory: true) - for name in components { + guard try archive.resourceValues(forKeys: [.fileSizeKey]).fileSize == archiveBytes, + try checksum(of: archive) == archiveSHA256 + else { throw CocoaError(.fileReadCorruptFile) } + let files = FileManager.default + let parent = destination.deletingLastPathComponent() + try files.createDirectory(at: parent, withIntermediateDirectories: true) + let staging = parent.appendingPathComponent( + ".install-\(UUID().uuidString)", isDirectory: true) + try files.createDirectory(at: staging, withIntermediateDirectories: true) + defer { try? files.removeItem(at: staging) } + let unpack = Process() + unpack.executableURL = URL(fileURLWithPath: "/usr/bin/ditto") + unpack.arguments = ["-x", "-k", archive.path, staging.path] + try unpack.run() + unpack.waitUntilExit() + guard unpack.terminationStatus == 0 else { throw CocoaError(.fileReadCorruptFile) } + let bundle = staging.appendingPathComponent("orukeet-r3-coreml-baseline", isDirectory: true) + for name in components { + try Task.checkCancellation() + let compiled = try MLModel.compileModel( + at: bundle.appendingPathComponent("\(name).mlpackage")) + defer { try? files.removeItem(at: compiled) } + try files.moveItem(at: compiled, to: bundle.appendingPathComponent("\(name).mlmodelc")) + try files.removeItem(at: bundle.appendingPathComponent("\(name).mlpackage")) + } + // Reject an incompatible vocabulary before making the install visible. + _ = try vocabulary(in: bundle) + try revision.write( + to: bundle.appendingPathComponent(".revision"), atomically: true, encoding: .utf8) try Task.checkCancellation() - let compiled = try MLModel.compileModel( - at: bundle.appendingPathComponent("\(name).mlpackage")) - defer { try? files.removeItem(at: compiled) } - try files.moveItem(at: compiled, to: bundle.appendingPathComponent("\(name).mlmodelc")) - try files.removeItem(at: bundle.appendingPathComponent("\(name).mlpackage")) - } - // Reject an incompatible vocabulary before making the install visible. - _ = try vocabulary(in: bundle) - try revision.write( - to: bundle.appendingPathComponent(".revision"), atomically: true, encoding: .utf8) - try Task.checkCancellation() - if files.fileExists(atPath: destination.path) { try files.removeItem(at: destination) } - try files.moveItem(at: bundle, to: destination) + try commitInstallation(from: bundle, to: destination) + } + + /// Keep the previous installation available for rollback if the final rename fails. + static func commitInstallation(from bundle: URL, to destination: URL) throws { + let files = FileManager.default + let backup = destination.deletingLastPathComponent() + .appendingPathComponent(".previous-\(UUID().uuidString)", isDirectory: true) + let hadPrevious = files.fileExists(atPath: destination.path) + if hadPrevious { try files.moveItem(at: destination, to: backup) } + do { + try files.moveItem(at: bundle, to: destination) + } catch { + if hadPrevious { try files.moveItem(at: backup, to: destination) } + throw error + } + if hadPrevious { try? files.removeItem(at: backup) } } static func load(from directory: URL) throws -> AsrModels { - let vocabulary = try vocabulary(in: directory) - func component(_ name: String, _ units: MLComputeUnits) throws -> MLModel { + let vocabulary = try vocabulary(in: directory) + func component(_ name: String, _ units: MLComputeUnits) throws -> MLModel { + let configuration = MLModelConfiguration() + configuration.computeUnits = units + return try MLModel( + contentsOf: directory.appendingPathComponent("\(name).mlmodelc"), + configuration: configuration) + } let configuration = MLModelConfiguration() - configuration.computeUnits = units - return try MLModel( - contentsOf: directory.appendingPathComponent("\(name).mlmodelc"), - configuration: configuration) - } - let configuration = MLModelConfiguration() - configuration.computeUnits = .cpuAndNeuralEngine - return try AsrModels( - encoder: component("Encoder", .cpuAndNeuralEngine), - preprocessor: component("Preprocessor", .cpuOnly), - decoder: component("Decoder", .cpuAndNeuralEngine), - joint: component("JointDecisionv3", .cpuAndNeuralEngine), - configuration: configuration, vocabulary: vocabulary, version: .v3) + configuration.computeUnits = .cpuAndNeuralEngine + return try AsrModels( + encoder: component("Encoder", .cpuAndNeuralEngine), + preprocessor: component("Preprocessor", .cpuOnly), + decoder: component("Decoder", .cpuAndNeuralEngine), + joint: component("JointDecisionv3", .cpuAndNeuralEngine), + configuration: configuration, vocabulary: vocabulary, version: .v3) } private static func vocabulary(in directory: URL) throws -> [Int: String] { - let data = try Data(contentsOf: directory.appendingPathComponent("parakeet_vocab.json")) - let raw = try JSONDecoder().decode([String: String].self, from: data) - var result: [Int: String] = [:] - for (key, token) in raw { - guard let id = Int(key), (0..<8192).contains(id), result[id] == nil else { - throw CocoaError(.fileReadCorruptFile) + let data = try Data(contentsOf: directory.appendingPathComponent("parakeet_vocab.json")) + let raw = try JSONDecoder().decode([String: String].self, from: data) + var result: [Int: String] = [:] + for (key, token) in raw { + guard let id = Int(key), (0..<8192).contains(id), result[id] == nil else { + throw CocoaError(.fileReadCorruptFile) + } + result[id] = token } - result[id] = token - } - guard result.count == 8192 else { throw CocoaError(.fileReadCorruptFile) } - return result + guard result.count == 8192 else { throw CocoaError(.fileReadCorruptFile) } + return result } private static func checksum(of file: URL) throws -> String { - let handle = try FileHandle(forReadingFrom: file) - defer { try? handle.close() } - var hasher = SHA256() - while let data = try handle.read(upToCount: 8 * 1024 * 1024), !data.isEmpty { - try Task.checkCancellation() - hasher.update(data: data) - } - return hasher.finalize().map { String(format: "%02x", $0) }.joined() + let handle = try FileHandle(forReadingFrom: file) + defer { try? handle.close() } + var hasher = SHA256() + while let data = try handle.read(upToCount: 8 * 1024 * 1024), !data.isEmpty { + try Task.checkCancellation() + hasher.update(data: data) + } + return hasher.finalize().map { String(format: "%02x", $0) }.joined() } private static func validateHTTP(_ response: URLResponse) throws { - guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { - throw URLError(.badServerResponse) - } + guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { + throw URLError(.badServerResponse) + } } - } +} - /// Coalesce model preparation so selecting a model during a download cannot start - /// another transfer or replace a directory while the first install is compiling. - private actor OrukeetInstallation { +/// Coalesce model preparation so selecting a model during a download cannot start +/// another transfer or replace a directory while the first install is compiling. +private actor OrukeetInstallation { static let shared = OrukeetInstallation() private var task: Task? func install(progress: ModelPreparationProgressRelay) async throws { - if let task { return try await task.value } - guard !OrukeetModelStore.isInstalled else { return } - let task = Task { try await OrukeetModelStore.install(progress: progress) } - self.task = task - defer { self.task = nil } - try await withTaskCancellationHandler { - try await task.value - } onCancel: { - task.cancel() - } + if let task { return try await task.value } + guard !OrukeetModelStore.isInstalled else { return } + let task = Task { try await OrukeetModelStore.install(progress: progress) } + self.task = task + defer { self.task = nil } + try await withTaskCancellationHandler { + try await task.value + } onCancel: { + task.cancel() + } } - } +} #endif diff --git a/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift index beb21a8cc..5d4b86399 100644 --- a/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift +++ b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift @@ -22,7 +22,7 @@ final class OrukeetModelStoreTests: XCTestCase { } /// Opt-in integration check using the actual pinned Hugging Face archive. - func testCompilesPortableBundleAndDetectsMissingComponent() throws { + func testCompilesPortableBundleAndDetectsMissingComponent() async throws { guard let path = ProcessInfo.processInfo.environment["ORUKEET_COREML_ARCHIVE"] else { throw XCTSkip("Set ORUKEET_COREML_ARCHIVE to the pinned baseline ZIP") } @@ -31,6 +31,19 @@ final class OrukeetModelStoreTests: XCTestCase { try OrukeetModelStore.installArchive(at: URL(fileURLWithPath: path), to: destination) XCTAssertTrue(OrukeetModelStore.installed(at: destination)) XCTAssertEqual(try OrukeetModelStore.load(from: destination).vocabulary.count, 8192) + let missingSource = destination.deletingLastPathComponent().appendingPathComponent(UUID().uuidString) + XCTAssertThrowsError(try OrukeetModelStore.commitInstallation(from: missingSource, to: destination)) + XCTAssertTrue(OrukeetModelStore.installed(at: destination), "A failed final move must restore the old cache") + let cancelled = Task { + try OrukeetModelStore.installArchive(at: URL(fileURLWithPath: path), to: destination) + } + cancelled.cancel() + do { + try await cancelled.value + XCTFail("Cancelled installation succeeded") + } catch is CancellationError { + XCTAssertTrue(OrukeetModelStore.installed(at: destination)) + } try FileManager.default.removeItem(at: destination.appendingPathComponent("Encoder.mlmodelc")) XCTAssertFalse(OrukeetModelStore.installed(at: destination)) XCTAssertThrowsError(try OrukeetModelStore.load(from: destination)) From 36b8b5f2a010e12e1b9dd05fd41b63d129e5fd4b Mon Sep 17 00:00:00 2001 From: Nathan Roll Date: Thu, 17 Sep 2026 04:54:14 -0700 Subject: [PATCH 3/6] Report incremental Orukeet archive download progress --- .../Fluid/Services/OrukeetModelStore.swift | 28 ++++++++++++++++--- .../OrukeetModelStoreTests.swift | 25 +++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Sources/Fluid/Services/OrukeetModelStore.swift b/Sources/Fluid/Services/OrukeetModelStore.swift index c255204cb..ecec41eac 100644 --- a/Sources/Fluid/Services/OrukeetModelStore.swift +++ b/Sources/Fluid/Services/OrukeetModelStore.swift @@ -73,16 +73,36 @@ nonisolated enum OrukeetModelStore { archive.bytes == archiveBytes, archive.sha256 == archiveSHA256 else { throw CocoaError(.fileReadCorruptFile) } try Task.checkCancellation() - progress.report(.downloading(0)) - let (temporary, archiveResponse) = try await URLSession.shared.download( - from: base.appendingPathComponent(archive.filename)) + let temporary = try await downloadArchive( + from: base.appendingPathComponent(archive.filename), + expectedBytes: archive.bytes, progress: progress) defer { try? FileManager.default.removeItem(at: temporary) } - try validateHTTP(archiveResponse) try Task.checkCancellation() progress.report(.optimizing) try installArchive(at: temporary, to: directory) } + static func downloadArchive( + from url: URL, expectedBytes: Int, progress: ModelPreparationProgressRelay + ) async throws -> URL { + try Task.checkCancellation() + progress.report(.downloading(0)) + let (temporary, response) = try await ProgressiveFileDownloader.download( + from: url, configuration: .default + ) { written, _ in + // The verified manifest supplies a total even when a redirect omits Content-Length. + progress.report(.downloading(Double(written) / Double(expectedBytes))) + } + do { + try validateHTTP(response) + try Task.checkCancellation() + return temporary + } catch { + try? FileManager.default.removeItem(at: temporary) + throw error + } + } + /// Separate from acquisition so the exact installer can be regression-tested with the pinned archive offline. static func installArchive(at archive: URL, to destination: URL) throws { guard try archive.resourceValues(forKeys: [.fileSizeKey]).fileSize == archiveBytes, diff --git a/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift index 5d4b86399..f0b9e8fc5 100644 --- a/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift +++ b/Tests/FluidDictationIntegrationTests/OrukeetModelStoreTests.swift @@ -21,6 +21,31 @@ final class OrukeetModelStoreTests: XCTestCase { XCTAssertFalse(FileManager.default.fileExists(atPath: destination.path)) } + /// Use a throttled local HTTP fixture to exercise real download delegate callbacks. + func testReportsProgressBeforeDownloadCompletes() async throws { + let environment = ProcessInfo.processInfo.environment + guard let address = environment["ORUKEET_DOWNLOAD_FIXTURE_URL"], + let url = URL(string: address), + let size = environment["ORUKEET_DOWNLOAD_FIXTURE_BYTES"].flatMap(Int.init), size > 0 + else { + throw XCTSkip("Set ORUKEET_DOWNLOAD_FIXTURE_URL and ORUKEET_DOWNLOAD_FIXTURE_BYTES") + } + let intermediate = expectation(description: "Receives progress between zero and completion") + intermediate.assertForOverFulfill = false + let progress = ModelPreparationProgressRelay { update in + if update.phase == .downloading, let fraction = update.fractionCompleted, + fraction > 0, fraction < 1 + { + intermediate.fulfill() + } + } + let downloaded = try await OrukeetModelStore.downloadArchive( + from: url, expectedBytes: size, progress: progress) + defer { try? FileManager.default.removeItem(at: downloaded) } + XCTAssertEqual(try downloaded.resourceValues(forKeys: [.fileSizeKey]).fileSize, size) + await fulfillment(of: [intermediate], timeout: 1) + } + /// Opt-in integration check using the actual pinned Hugging Face archive. func testCompilesPortableBundleAndDetectsMissingComponent() async throws { guard let path = ProcessInfo.processInfo.environment["ORUKEET_COREML_ARCHIVE"] else { From f7c3c8cb2051a982aca7c657a1ef0817ed3874d3 Mon Sep 17 00:00:00 2001 From: Nathan Roll Date: Thu, 17 Sep 2026 07:54:54 -0700 Subject: [PATCH 4/6] Include Orukeet regression tests in the Xcode test target --- Fluid.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Fluid.xcodeproj/project.pbxproj b/Fluid.xcodeproj/project.pbxproj index 0fffbeeaf..60bb472a0 100644 --- a/Fluid.xcodeproj/project.pbxproj +++ b/Fluid.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + A0E090170000000000000002 /* OrukeetModelStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E090170000000000000001 /* OrukeetModelStoreTests.swift */; }; 7C078DA52E3B386A00FB7CAC /* FluidAudio in Frameworks */ = {isa = PBXBuildFile; productRef = 7C078DA42E3B386A00FB7CAC /* FluidAudio */; }; 7C3697892ED70F9C005874CE /* DynamicNotchKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7C3697882ED70F9C005874CE /* DynamicNotchKit */; }; 7C5AF14B2F15041600DE21B0 /* MediaRemoteAdapter in Frameworks */ = {isa = PBXBuildFile; productRef = 7C5AF14A2F15041600DE21B0 /* MediaRemoteAdapter */; }; @@ -66,6 +67,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + A0E090170000000000000001 /* OrukeetModelStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrukeetModelStoreTests.swift; sourceTree = ""; }; 343B29013F4441D6A797D12D /* LLMClientRequestBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMClientRequestBodyTests.swift; sourceTree = ""; }; 980330F3CE464336ADCE3E23 /* TemperatureSupportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemperatureSupportTests.swift; sourceTree = ""; }; A11A00000000000000000001 /* AnalyticsDatabaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsDatabaseTests.swift; sourceTree = ""; }; @@ -159,6 +161,7 @@ 7CDB0A262F3C4D5600FB7CAD /* Helpers */, 7CDB0A272F3C4D5600FB7CAD /* Resources */, 7CDB0A292F3C4D5600FB7CAD /* DictationE2ETests.swift */, + A0E090170000000000000001 /* OrukeetModelStoreTests.swift */, CD1C7A0000000000000000B1 /* CustomDictionaryManualEntryTests.swift */, 7C91B0022F42AA0100C0DEF0 /* HotkeyShortcutTests.swift */, C0DE89000000000000000001 /* SettingsNavigationStateTests.swift */, @@ -336,6 +339,7 @@ files = ( 7CDB0A2E2F3C4D5600FB7CAD /* AudioFixtureLoader.swift in Sources */, 7CDB0A2D2F3C4D5600FB7CAD /* DictationE2ETests.swift in Sources */, + A0E090170000000000000002 /* OrukeetModelStoreTests.swift in Sources */, B52000000000000000000002 /* PrivateAIDictationTokenBudgetTests.swift in Sources */, CD1C7A0000000000000000B2 /* CustomDictionaryManualEntryTests.swift in Sources */, 7C91B0012F42AA0100C0DEF0 /* HotkeyShortcutTests.swift in Sources */, From 46d934f0157626b00e26419f663200296bd4fa17 Mon Sep 17 00:00:00 2001 From: Nathan Roll Date: Thu, 17 Sep 2026 08:26:19 -0700 Subject: [PATCH 5/6] Document Orukeet installation and transcription in the built app --- .github/screenshots/orukeet-active.png | Bin 0 -> 112734 bytes .github/screenshots/orukeet-download.png | Bin 0 -> 108223 bytes .github/screenshots/orukeet-preview.png | Bin 0 -> 107833 bytes .github/screenshots/orukeet-transcription.png | Bin 0 -> 93569 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/screenshots/orukeet-active.png create mode 100644 .github/screenshots/orukeet-download.png create mode 100644 .github/screenshots/orukeet-preview.png create mode 100644 .github/screenshots/orukeet-transcription.png diff --git a/.github/screenshots/orukeet-active.png b/.github/screenshots/orukeet-active.png new file mode 100644 index 0000000000000000000000000000000000000000..2565c17bbb3e175bba2e5027bcd580abb6405da4 GIT binary patch literal 112734 zcmeFYbzD^2*D!uy=#*A!5Ku}$8mS?qr3Iv=yF+@gKuJLX1qB2_LO`TjX;h>^KGiRN(*Iu>Pu5~t;&zMQzl$w&N5`cvT04m@=05b*1 zD*8Lx0f2@EzzqNZ0e}_Z2;hJaNCMDR? z?!h9&cM%YmSJl8d;Q(IW;B()=Qv*!VBXPhRoTV_r$E!&BP|P&>rmBL1g|@DilIj)3 zZ%UC*T6%c6V4ng2S2rIoU1fQeYevQ__{*S7dH@>`1kPJpdwa-fYhO9x`Q!PG|IeSj zp>Mha{k$i?oO=S>{{f%)h1%*5xaS+qRb2&;W)^fWiKV5NJphnxf_N4`YkQCn`6&>-=w{>S z2Ewu+EaU3xZUe$$Aj}EUfHKKX_={Wp#>f6Q*wWJKCr?XD`=9V1wtzK3!IvGqJzOjU zzP#eBwo#w5VyY3IULv~&Ya^LZbmR=zAhg`I;v;GMlTOC;EUoKuiN26i)EpXuN!NPi$ca@m{uW%JLu#+676n z^HMtT!wG%9t2YRJ^8@6qgQMz6UC<|xJ|BmxV1GRE6=c@h@|*skEs#xHH@WZrfh5^_ zUpvw5#D_yRwwDz_7_=RSz}8Lw#9k1ObK1j4{zMj77l+%!d zJZ>-UH0~hoB<_fX<1Meh_)P`0iZ+-91^O3 z;W)(sfPxqRI;yRGz5M>*hja441xF5Yu=kw-m;p9`6SPMV5CtRwSwIm`1GIpvfDvF0 z#;XGu=U%`KAQ-p_gac8)10WGd0n&jiAQvbE-T;+A9q_EL|)ktm|0zSZ-LpSixAgv7)dNuu`y| zW94C$U{zzi!|KH9#Tvny!dk-G!aBr;V3S}|V>4l&$L7Zt$CkrZ$G(bfhHa1Si5-Z2 z2Rjz~F?J^QE9?sFci11W2eBuySFm>>0E8Gq3poqng@{8GAX*S(h#kZW5(o%@z3D%;7j9c;alSS;D_Ts!GDF{h~I}lhmRy6CV&zM5-1TE6SxuFB1j_0 zCukt(BUm6n5uPGEM<_w4MQB49Kp02(g0P0Ln{bX0MMOcwK_pFdmB@+cCedS}BBEBJ zFGSnK#Kf$`mxy(U9f`w;9}~YO?jW8bJ|Lka;U-ZaF(vUOi6wbS@|I+TWSf+f^gO97 zsWGV!X)I|TX*20KDUytejE_u}%!Uk3mP%GZ)XQ&`l zY*Y$V)>OBtUQo4C%~9h~b5N^NJ5fhb7gB$s-lUs z=cd=8zd@fy-%7vAK+Pb@V9gN8@P=WO5u1^lQI|1@F^lmd<1Q03lQNSB(-WpK@MjS!5e<G_W<)G#+Yv(LAT=rdg>4XsK#F)cUH;q3x+%tAnSbt&^%VuPdM% ztlO?frDvg+ueWzq{%YLSF?~*bU;QQnasyL?JcE71%Z3Stlh^pKgoYI~4 zowb}_I%8Z6U5Z@^T(7%UyHUD1yS2D8yZgKMdhmFJdrW#tcqV#odZ~Nmcw>2+c~|*R zgA4tSzMQ^yeW(0n{8IgpHwcFi58J7ITb?ke9c2qz2o3LlP; zj7YzSbIFy1H1=r4~F7l z@wo{U34sYS4>cZEJYsni`DiE6BC#_`I4M1uDA_l8^6{0&RZrNTJa}@H;*c_!DxX^X zl=12Pr~A)rp7o{4rWK_#rAMV7W;kYiey;qyBJ+G^QWjp8U)KB!gBR`D;@NpQ^f^&E z$1mMpPUh<7w&aQB<>fQx#}!}~_!ca^GJVxkc)75uh_~o@F>P_wYv8r->*bQ`B|~r2 z-!zqqmllC2eDbZQ|Ui^LK z2hk4|A4NWvcZqbBe-iyv(Jj_p)pMz*rdO)Bp%2#guK#j>+koo8he6H3-XZ;=&%>s} zlb>xqFOIm3AV&R0QDb3WaKA);J@qwdoN+vJf@`99QgpI@>hjdbX}#&O8S9yqS?}4S zxjXZu^GOTPg}g<<#kwV>rJiMz<+&A)71V0@8pYbvbc$cN(c@#T;~KO&`U}PtgYmHRvi!Cd zfPlZ)cHl02>m>k?8UX-R54e6X`D1_hjRNbBJuL`heZNo8e}VtlL!K0XYY3nST+{2U zf~%Wh0C@cZ0M3K_$xQ)3n-l=9UIMU%gnr)Ns(^d$Z~M-Z7d&uZkzsjkY_rUih4cHn}G6!7{X1q&O3 zgNuhxKuAOk5|p0;u(2QzY#azK?nz<+D+DYDa42vo&kD%lQR!IXvwBhs-i&`vz$Rbv zjz+h4lU>Nl>lPsqE#2ue^ykiVaB^`Ai-?MeUy@L`tf-`{qN=8MRo}o6T%K9m*xK1U zI68Uz`1;-O4+y+{=Wck!z59^~4<98aB|mQ~1ydz{2(%q!7^6Dj`Wfz`0hd43q zn`Qr=VYmKEmi;vBmtAAv)&l$61;GYe2?7CI3J1J!@o`Tsd;)NZ1zrT-FQRW3xFjMb z23I@ZFAT^83*-S-#smM8650P1`MW7b`|6+vG1BWW*YFzjKsa1$?Y6 zZoQU`j`8+rWl@Ng*{<9-JWRV4CUY0@axDmT#s6?#^+*u`H6J<4KKA)51F;7~E`>>e zb6k;ghduH(f@mW(oyysJq4-JeSJ?K0VLo3jy{OCTzH4Q8?yZlhbTELU6GwX4dzolO zz*%FOoYIu>i<4m=1{hYIgU@Rip!)|gz{2tZ8ZE7h?i+wFEW4vtdylhoF+lgg#QsPI zapP!UNm_=H^;A1H7c18nbl zV*ogF+?uonIeExT9kY3=on6)E>Vq07VUUA0Gw6%68!g zht(LMG45((SvmCJFcpmwhC4dJws*yj_Z+Y{_R@+$L58q>#Nz)+@tg;A@L&9tf7M)0 z{-ti*FQsI(|C6d;lKs!^xt^r{cNnlUor9DiH zur+hSX~>p|6QYMQ(FcwA5QjRPm{H!V0Cj;SL-%(Z+e#NRNXge+4bgBu*v1Mx20A)g ze1tZIPYhuI`tHmyVOV*&#lcY(7+QsBVYsu?Pa)1Skw6c6Xb}Eg(4SO(b;t=(_+O#_ z>)!tjr2n6HnJQfdl_Znr4a#R!N@Jz3?J?i32UNk)2i`r40ZvAUWR#%+ICj*=p^zA0 z<|>13t(4LSN(|s9LIg{K8^^6xrf-jHp%#1aUhd`mnq&rk&W^UnHT&qG&Xd8>qS723 z)dFA}rLy$!(Uf1aqu$Ti@yXuG#K8s!IFh4$H;(onf&(em%i~|8C#+oL$5dyO?pBWh z(zd|aGwy$yal;>smHvy2E6MK#E4z0!WQWk99==cSyzBf9K|D>GLt1%%w@RS@!+@LK zfeKHQ*zoO#o-7#PW;!Bc!Yr;{@+k)JUpVN&?~@@uE`~YA0bi715ut3(V{9x@K`U8s zH`!II>TNpc6~h(&)mjXId!@h5EN=wKws*U%yw|onPZ!}?CrP4tKILgnx^U`^D8pXo^(|1x8_LrzJs;eK z#y(}U$3#k`5!i~eHoQN6+-T#fJX8J(%`xmtDC|yV^4`+utn5CWApbbU`hmV-E#q*f zIqQJcVEM7~)w_PmH@q)&G(@hd6punblTSm#chm2b_|r1nn;G&kniCwO#7R)(`tpWz zxw)iWZ7W!>yHu)x<#5Pky{nT;ZFo*YvY{Y|XQ$D7^XWtWCWDXJ@>%n@>Kp6rUryz1 zFSKC*B*$*!9jS9SrW?ZpyXIdU`e;bErHAI)B(R^crfQ>hgFJiTy<+irA(j+=1$MeF zXsSB`O75F}%0FdV{H%$pb>t-iQmLYB17W=nlv++`M?PDWVoU$c%C7hc_na+F7|C$N zWH*)FK?7Oi-qWW8^g0iXYsZ(5U9&cdpI6e%Ax(L&g_s$Ytv8+z@!nM4Gftlt4Nv1i zC_U$Ul4DBAYgH-R|B>$2fg6o?|1AwDL!)gTnsL#~zqIM_PEFbq7v<5+D%sMe7c>4m z&72!=SsOkar`9<>N4}g2jkA8K0UZ;5jGH}J#r9E2-eW9qD&kVsUOXZvV#?y~Xjf7e zH$#{4$m$yJeTLZpC85e9YA=nT#<3@Hd+DW(qm{fh7DqMdpDb4RT#rjui_kn?Ch8XM zwZ+}mh@nW%;(kh)B@t)lE9^+l4D3iQ4~Hs3HC%BL-GOT0F?LcUw=8F7Bye(bonF&z zf6cL#oui5_e2ZRza|0+0pnx>oG-(#}S8q0F+k7>Cen7<8jB-VPzzzZ3Gf^5HZ@XOf zMrCB~T4LL^rwQb0+we2U)IE>Q;waxZQpL^K^(o=nkwRKKght;JoGXT&*w}cUef2k5 zWjF_R;_k!9d``dONNR79FuY}BQeIUZOUc`ZD;_Jzl1f5w?j5)DOnTJNc6wweFDutY z->B|M_k+cdTu1}*`4l{YZh|aW8lgA!>0!`Rhc6GRkZ)hLwq7EVedz7Qq%$KFd#|Mm z$Vh_^+^2 zEbaQtHMbWrq3d3a3LUxJ<1b)+bmPLX?5i1M$?wJ)s}T{AWpPAC?;mKrGJj{y_~w=l z^HdYw^-FI#I2eZqWTcN1gC!?PmA0Gr)9HfG<@$#=9g@nplJ)X6Of0B#E9vX^oS!AH zy7d*;ANI~@svKEASsV3)k~3?#Y%hTQdTu_4yt=?!;08w|ieoPd**g_-V`ja6ikKXN zRQsBR@Xe9Zw_|rzvJIc66MRzFPdJV@!~z~T2!4sknry4yjB0P--b{G18za_Kb0^TZ zt(2*t)yXbNB%UVjV@WCAl)BCIlZ+#7qdKk`Qs*|x`2%em6hF)C5SpyyruoD4C zUyuSQF=YRA`@O=lu@y6g=289i)LbXp(biAtLdIQtr>`^#dzW16z{4Wl=(0m@Ow!#u zqRaA!n3p$}53M$^j=f5;Npf15`(%49Wn6aV*h+|GCh|C;zfNJ=xjQ!{UNwR>)^?BRya{`;@LqIU6#A3hMD50il+qfp}DisCH>pz!4nPvNZ_7Z}*_XGu9O zP?wY6E#-f3zhEaVKi}J9-br~&YU;ra8hl}_1L9mH zq}^EQKKXrL3$o>kK*cr^v3*)SWmgty(f9AE7b>OtG$x@;CjJ3ZCZ1DY4S30}xDKR! zvMqBtykclS^VD#;vOPw9I%t_$81WgIHMNISePv=4a$6;7i%Hge6#I_x=;u7U$|tgy zg2@Ym#9E;DMy-(6MhLBlw)k8mJqBpvvL&f(5WH4)6ma%3#bOjrbS3Apz`!nR7>o^# zdqh-+{OVi$B9yg1Sjc{=OKRD$vL^F=&nv8ohp3De>%8d-G#C0Knic6i`2lv{nB$(0 z7K6Y1)}%4q#eqsHUcnv_e)k1W^;5_eq|Vgrh=B1gcm=%1pC z^p$2F8rB}(3E>|4G(BT-TPsEKvY5xKTBElB1c07^l)1sLxFP539 z5YmNZfo5MPVrUO}q91LMrM_S%am|U|HO)9ZS1$>tKt{AA!A|eOm{%Gp%2Y$ijr_${ z1H)r$>L?*zd;S6p=d6tFykHXY>@Rx%KmzcIvxkpT_99sc~q$|V_C?NelD>s zJ;X)6%hi`bLD(it*2d#B%egBm!8oy=qZ_itj_ z++v9cRMv$F#rfQBA=4|{uye6+vZkW3r5!n&ye8~GOD z5a@niqeH!md!AtlVsd`(iU-ZTT^z$z{PwXR+fA|NkP?=yI<2YW$Fia}WKTVjhH{8& zaYzd&L0tBHAqIFc9|pt2050&6TDjwtI`0=q=jNK$`4Y!`$NBA$RnHeCH4S}@wFfHF zfp%3|5cJ0hDw(rLqdMEE>N323)_YwZ!^U5ql~wdcjMVtgJ`h$j2{R>`H5`F&>c<`M z$WUQ`*K8PIvDbqBh!p_~_ko2&>B>Uv_Qr=$=9|ZbMbB^=L)UHUB9&sqXYc3+ta3tH z%0q~Cd)?Mu-K|M@-Pp^W?`fsFY+Y7y=d=CjMJCRz!dl}>H&q$wJ3;6l)mHKPg0X!# zuWKwCy|z)Ux5fCT#LtMQo<%KXY6IKl#GNVYh%snO z&gFZDF0DZDUGuojms4E}t<0q;&y2rHg ziD$`TB+0~8-5lZGJmbj(Mnh~ce?X?A?)!JAmYH1)FE(A9Z zscnFu6aXFM04_%lU+!5UjdE8SPu1~GgOlyq*P9l5x7$MsMDi_0n^;ZD3@H*HTxMs) zOO)S!;Jjlv)BToz#QO?Td3q2@74Q;Dv%FktGP<-y>a;w|vo2bJz~UJLlh%RK*&df# z!F*#$c4I^#8p}Cq^V5e`rFw zqnbe*M6Aa^>#$Gz>FA=n)4@;|+}Hc;A{#NXltdf9*W!&>jGGJ; z-Iq=-rA!hoOg~rn>>a*?=ziB;fSk--8>Mnyacz`nBJq1x+<~2N5jf!6I0>z{jrC~PGA}zwhmhXldlrt zu-*G;aMvi23VsTRL&Y6}ng5SHxDMG#gtQK3S@C504-&5{dnmJ(?UJ8z9<6hvEyyz) ze*yP(;|QP$y?LJ|UQzvy$-J|kzm>B**(3G=^X2vKL0_WAoaL0Xm;mPIFU-2FeJS2+ zx$-Em9-kp#+s>!f5m)l`OsTQsDqD|@ut401tkY*zpANCZ0EYf;6vah0RXjW6?a;g4 z13EfNF%sHWmlTzFG7T&|7A~o7tA0(PcPq?a9ELjg@$+4Cm1hd1%_RMZU&R^O`6w*hHyl*U1>nOU!XXu=4nzTO?&?W=A zy?P!bI*Qa`KXy*PKlj`T(7jN`VEn8xWKa{c$e>S`XwO4;XU6;N9<#FtR#&}lOHHZJ z^i{68qf~3@;P)g7gcuV#T~uXe-&siL$TGFZhMoi0m(#X863KD9s5QU&5vg4BE!iga zm2wLCO!AB~MT|R{xBJ3`MPNvz*5MpN%KTNa;U+(5j*;s*S?r1M@MtWarpr6q`pX>0Zn!X7`nE0%XJ$0EjHjM%5 zEi|`_!H{K*(P!pmUs5FCppWmNOB*YKI@r;${Y|o%x=ETaTXxPd-40B#2kARg;wDI3fV~A@qryO)uN_6)c zPV(D7^esfbsfO3{mYOQf)3Mugd!~7sLlgm5|G1XGji~am4Ju^Hp{u(7z(P=JZEg71 z3w_legrJ*~WcV~uiqrtu68}%`j0av4kzu9EoGGk2iMP2JX|8(_$h76;Y`tU+lfG?w zoYf%ZpRCpIQyA24Jh+wrSHava<{@;^h&HTfYcoL39TIiP{}eG#xI@F9^MF+gOkV;EYy3f#zUSJgk_K%5=|8-97E6n;HNe?9R|3c_4`W((HUvZ z&Rwt{FG9E9yQ7eeM;g#yAaFi4e>sKsNFpaLz|%6wWo)XtBJp{O=({t@@@F&&&*11A z<)q9z^6{|;*d|8RB?#F2Stl69s4O?Bdrq&m%`@aoxy1u3Ii% zn;pC^AWL_FPo^`()fbE%yI3vM)J=5a(!^$Z<9=6w2sIX_@5n3e*a}|P_$g-qK7*b? z*EDX6kib`{j_1(6qTn0}-G}aiY49f*L|1jgRNu~~d>xeHopvP~CI0HH+VHxv`b@Y< zY5=P$*20_}crN66ucBFh*_wi3eS}8eT6S%1)%AEeqU89`d-{wIWvO!ukL{br**AAQ z)r*!YMG1vE8C@k@NDv;&(!=%FwXqbbGwkwiU`h19ZRJ1?T zeh-4>@k$}f#ZQ!<$kLW>C^`KBz2WTA-{#!r#2!*Sv!CB!%WMl6cVx-z8h*_Bm_ckr zZ9krW@F?IBmNRS2_z&d%Z{>DBilYZD1mgt5cx`mj0}JML=CyHOMS@!VjpQFn{4V;Z zWRZUr9F6+U+J5|Z@Ta_#e-QVEv%CIZ?CY-o&D5U)e_8TF-rt#0+R7L>=ze191-QxVYgdbJzuJ zuCGqOz@~R!7<=Xe#=ahWO#i@CM$0U7MmWsqcLii#m(6?f94w2T73JI8TG})6^qaBKJcw9G5!cl%O%BS(I6nBORr5%(dqUL(YkKkWOF|Q+!tq0DVPkx0OW92q)BUvdqkNl z-i-tP0MqNO@tfSf8(nWXL5ckt`$RL*311$1Q$=&TN-QqrLh1soZV0 zu@}PHX|~|uGsyc>yt>lX3jM`a)iFl+Pwebs65GxgU!sV=$s|W}qty^jRc9Z9i>|c{ z+;FCQ=*~#1G) z6qBJ&^=4bVcfn_e8UlfFrSsQ{ieAKXJjic2gNWXaj&*8}t)tuAYo3zYPcaBDcBwh{ zY%Zw;hvK~ZEK6s@;urVi3u>n?8)=I#S+GEfk*{ypstu3@&J$|F)yVH2UDLkoQz)Bp ziFj7E3~FjkEmgpT0c313Kv?4z`A==0uF>?sn>eP^4wfX}r9++!3~)!Q z6}E#9e#Ltm0BedvUOv(Tr^cX-Bm9R)oWEN3_R3@U0kUBiZ4XoQfo|SMzC?%ZPaw%T zkl?bMAUzVkNFD;(u?4>i9TDF+*ycaN#Q+aNyvf1y6LjN^9~TyjZlft+)EJ#!Y6e%`6nh-#X*?-*txE?nl_skwqW|5K7OiA^)=>e>HRU>5U`s z=m|Ck=#cptvfev}a(^}EPnI4(j0K}x5OkHr0sins@CXtjWaa2nXyoFbP5Bo?-*`@J z&s!jgF#yXyG+Fv)q<@C@aol%D@~=L1|EXld-EFQZc z&UhyAlDwvnfy207vqa|q>NS0Gh*#yYA zlpIc{yPl4u(HV$N&nqy??>qOV@^fKhwT7r)77+{}&}w(cck@NR*_ z-aSe8gL#;7sUoeMpTW0U)FH8B=zz%IFwjD%bp^OWvwGF5_`oc&q1_ea*1n?rd988b zae=Uo4c(vFad%OJikPhWO@Nw~ePb6l^mlcSoqnU#`KHR>)cx?<6Ub|sT{X^6^QU*q2%f6W-+^(K%$ z>6NbS18>dF+(!e6Y%t8g-z+n7!Ts2^^bP*)ymImb0#o>~0on)aP!B~JEV{XxcDfFM z&bFr+&lc$)GpT#eC`WzW{yIz8M=g%RkR#T+O0>d|5oM%dXL^bKQT*e^mBX2XNK{aB z8r0QtHpL~%|27`C$Jl!zKJi)GfZ`roC*kKbnL1IZ=~UDhELA*axOG9~c~FC0a)NP4 z$6Q?%2B>P>@5lmA$3#Z$pYD_!VxJ9{2Xo{#zClL;+Xe5xSLRY<0vOK4lJayN%nm$eMYn3Ia zbj@m4K57!W_4e>8H)7pKoxi1R|8~D7if3oZzM-8LJoX3f<{A{4P2pcGP_u?wViA0H z$(rT8(>3+gjg?dZ@?Re6vXm$g~G#iv*e_^aY_JN^GVp*L5X;V>kZ_R&Bx9H^;`n4mu$z%NHao@t> zd)BT>rztJo6uzh{yT@es@l$UznS*bFqlIVxJN>7&?60!wM~zo<3Z1k1y+55C68y6x z*XuZ@gLr5MiiHcRT=m?R(#{h=uHVvn-m#DkX)@;!g|E;RgRS!)Z*hX>8NvMJ1Z%BiI^J@r1%n25A4*$465o3d zTrTBkyrt=!DI)jmvKd1ZLbMVccnp#beLx)mW->kD8}SB3YkaTxY)b3zPNuPy&%~>}iT`}NBY!tD`AHXN z+3G&SUtFk{o4Km+FQMQ|Z5B517qy=$(p?w(5o1!{ef3gD@iXZU!{Yv^!8M@c2l>JB z#rHzCBd#5tk8d~A<0eS!#Ae_TfwdM!^87BYY4byK+80XdtfelVVcDlaM!wfhl$K*b z(;NdwU}hj53ZA$sCd2?cR2E@|(3NcPkWJ&WfHOx_&HefNb;+Hajf3fLke2uIxM`MD zQF%Fa#X)F=a(CpR#o-Ke>y;AhBJ*x#0S0J)51xEJ4NkY$A8yCx7AL~=Bz6~N5_vC6 zT#d+fuoFy3deD#cNdKm@mut$7!r4kA93``tA1EoRxLm9~8E1;P>*?Z;_{xo zOKmM&CA^CLALagj&jbG7g8j21ZTY;f;ABQ}{aw}zizTPhSf?*O?wOb!MFFu*IV{p5pz(YPb{7x=K@ z$@sQ}qJ?+TN1+?nVULS@EC`$z_b|YSm^eA3%h}N?Tncs$&)pB67Edio@Jj6iHY-+C zWA(*E>9zt&7Uqdra5Ya(EA=&?%d8Ea!kWpC&q2FJKAq2@l4#N3FWXs9m1bxO<&Mzq z>m!zJTrxSDwN8$6PN)~3ubYqLcI?+SP`(}2I?$q(mV;vcFogkV7Ka+hoTED54(&Xi zFYoU;UWlCy*+AKwNZ8e9)uqtg)2yd?R`Jm4dUe0iQw_H0S@!F$o_qo9$IfpZiUKTI z*Egz{d#8yubu_uQUev6oIMzz1 zh}Tq$zSTfA&CoMHr!M2YgRvdSiF*=t5*5{uX6eGW6=mUHKG?AfFg=+Reo?!I&k$$4 zQRiDIQ|KBv>VD7X(gpU?yR-vs;fRXMHy^+r)_Pv|+#bHAJ9{`7Vl1-}|FJZsv7rXd zR$J<9Gpw9HY!?)pHQgmK(~`#WU|IcKOnbyoA7B=(#obKCrqeIk?6;D#W~A74||pDELw85!uW%Ss_`;G{lo+Xc$}E>dprT_N~X6Gq<_;J}*`6 z7BNTi3o-gqdEoV}j{s%_e$Jfd8M37u;?l<5YlyHfy(k1@T-=aEO*TsEkpM$`9#>Tc^El91e=+HuSCP&zb2nJQVh;JtR5jtJf|c<6i^^^ z#yCahe!hSB&QgsO%%NtBql)lBV{JuD_Jg^5P;M@n;{v`i;Vuikp7j`XyvIMfV>s~_jihSMbZWqd4oq7o`#b*E&vSQ|#= zVzrrtoX{*waCqe#!`I*O=-x;gFU6YatQ+9g$(+?!mpUyLOM3h)_HO3aR+(qsS&Qi| z`lg9BC6!#Ip0m_^a*(`Y`N}u5=mzEXxsvt}OAA;2&_i#FPebL0N8L;`yJAON;3{i19E_DUJ;aP1Qfy}%NYoKx(MMog4 z7@~>^S00Rg+8k>dCaK&LBxG@ol$(vF8l#ynUHt@(^b;j1OjiBP<5+cNeZ$R%=MuZ4 z${Q)1c-&vU%N@`4y-TR|Xfp1R{dmc*ewxqW+c2_hOS@aV5gfzw9qzCL^*a` z-1I0pDULGUBZQ)2ST7shg8@hz&O1&}NzouO_pkPrO)xmCz8V43(z$gBU*2uK(3Mp= z=V#3vUdv>?mygsQW@hOr(^?bhb(JDYqwQIDb1n4@@Q7vj_=Fn0bUIe(skYENSC}<_ zRB|YFC4z3$htrq1UU+$L9Ga>dD{bdYW7ei$!Im>F`!&Tb2E`C;GE^sEU)1XPe9Xx> zF*+qJeQK;wk#(qObsDFv#Dt*)d)3*1h*083dn-BVQ5ne`&tiR{DJL_LWq{{xSyQ_Ubft zF2)DTHw0?sqXp`qp`4JJ;t};Jt-ENxV7u~7{#cg!hg!~(2Xo=?Em&tiI8#YvxE9{7 z_E6&KIda_8Yii&c4i=i^zYF^9$Z;|xs70dkGfO?u_gE z5GL(1m&$s4cN^-;hRY5v`&G0u3O~Smvagyz=K$f>62_WA3m(VGT=0j<(eHRKrm<|5 z`wL5c&>+`VA1mNNC2vhd`eP+r%7)n-;pAof{xNnQ;*`+Po+*UApLyP7EEhPA8MxTA)0xM zQiir9&D`Uo+@-jq$**4scAkNb=(Wm-Am-*{Ce5hiHiHA{ZtqCn(7pw35-J?rt((ml z?)SokQCdelLu1pI`q%lpkJvE)$&vJw8O%4eXiZ(SJ*~LA^E9yL-E0uo)Hu2_ z)qc|l8o|s|?kpr;EgEUh%f;zsjVLzI0J z{i7P+P6pGLT&x(tcVM%5#T)@$dx&^P%{9OaW$MbeYcMQy<(C`Ut+eS~<#RW}yCz4a z8m40IA+18QXjy8iPq3w%_AEtfy~YpxJf#}e+C6IJ(5AaS)EKZ+c_eDlPJVzc1=D3$ zU&5PhgWbX8*$V6kSM4BGr)T#Wy<(hUN!1&B?PZSpS?|;C*ckZwN?`z|lfMqbiaTIT zUoHZ3i?Rq*Tz=!!n+7p3Yq^__#?FRrj#w~&ncKr|kWRNjKQnm`EeR&`AkZ!HT|+R> zmEnKfK4|eLsyL)eaSWKRJGKXtlzA51lyn=XgjQO4p<~DmFfm60?|==OW}$D+>_hec zq$=!p$-xD>iqxelCGs(BB~AHUb{wBc9xDHh@PUbc63&w;70VW5bduR;f4B(DrpObp zGZReS{yR>Cuz%vj-TSw7{@L{Ztz+@;`YkM1-zNwXt z=A#U!Pk+<=PDwhUgb(Z&P#z2bMxB0G^E}jeVhBDn2R}JZ@!DjAywEE4b_r9yT1=2$ zw_2&dqrL$uostYfse?O8z$)tn#+;e5*QY;8*fZJ}Dn8ViO-s+_=vs8Z4vsV(fQdcN zaN7~avY}8?loy+Mo{_YZfp4P|uM><8k4x|A!KtRUxoQD>p0xlH@hPiS$~+J8Ch^-B z)9a#!Ezcwv`e^Oz-zP>Absrp)a&&`ST_Od!q3Jz+N9gdda~)Z%nP34F_B?~oi?buQ z0j{8YLSzaO@u&CnZXePE$*j?lQ6PIz;?D{{IsFsSf1T@pTfd*8L*WYQ|B(?tiT=sz z^b^;-`A@j!-{Sg*FS9#xWxnf|Ds1=sLm<6HYG2s-&g`$+wh@KmB7pJfRyIBA{?0By zY4GC&xJF$8=Z&tR>QwMAT8`Z_vRN}_xRaj8=Hzl>hX3tJgGhgmBZ7U%2Oge6?C-=Y zZ#1S^Q%`GPc=Gpd4$q3@lP!taD(Euw$_(3mmqO`~PlBetit;jVDEIlMO8VWnDMD(6XVm%4zU$|w_q!G_Z-y8f|}J5{kvG8?NmDh&--`H+*=9V$_7U%4qjIIqWOU=k@#I z%|6IZe-nM&ePMp=VCt&WR&)HG254o(s5|9S1FJJ$Rl^;#_vg8s+4+419MD$Lu+wU3_08L{jeInoeuZlAn&nD{YMnybS7G*IodZ8H3Vz zX3}Z=_giEH`|BjLo#Tk#O@&A;1$soDW#BD|&u)(29}9v$-kUDgLcrPt7ssi3*=kK3 zf~iDW+hTa@thgqV=C3~a(m{4DLXju!5!N1W`n%$hsFq>#v&olbxchuCK!iDK|4uQ5 zR_?eQ|6bCw0DqqYzKoGms0$?;_oYhfPHzdNIcFdZQIexa!pQW=RMH@W!Lqp1;Hf=| zat(5|s(!mzjwq!*-dUsKtE!A)Wm|R545tj;*2#6Yx?9{wEvD^TCdf^Z_9kXft6*K5q4AN)o0o#E(#{S9yU*lhAb1ORpS2L? ze7=w@l>Lg*q|9ZX**>Aoo~)Lbgp43Bm<@Fyn0MHRmj{ePigLo|)rj?%uT*Icok!i` z-Jg#(2k_SENf%C0PEfHX#anaJ_(Mg4J13!|6Vn^b&)5|D$^@Q&Rh@cr&XpDe==Je# z_>xNSLo=b>=ze}Ul=4O8y?!!w8gvUcE9*C zUJ{VfI*-$Irqi`9*G;wy2sE2$vIt9~LWWERrJpfhAuaOn)@vwvc&)tljw8Kqc5J4r z`A+LxZP(+QXCZgdtU>zxqgs>6H$xeba18``m`}Z}&r0gStEnN)V(X&C(MJT&vyvpE zWaC^tnv*Ky#hJ*BH=X06&=S?Rn>^~jups%Sr&m-Tn6#OludWi)6|Tm${rKXk;0&WR zO)Y|MW+DcCZc!U)eYL#TC*~Z#gS9tmd>?g&)qD~-P{|xZW%VHxI%`wLb;ll0W6uB6{Q(%w=7>k ztLm_~>TrM|_p2<`cP7hX+BkouUHM1im_PCTXWG9g@f-1fQwfl9%rE19j-flrs1etQla{*zO z=XpY12GIkvvwG|XMd0~dG|Xg?CtIY;;*W`si-w|iV35RDL{1s})7yXl44RIjFl0EJ zmvtxm`TDkS4u@w9rJP zV~~>2dqRy;z8k;2zkT*O=id9=bAPO`Le?|q%3PUqjPZ_lyc5M9e+Fysp+lamxJua^ zkyfcrL$Ybo@{*MWAW~cOY)ojL(oXB;U8cx;oI*)LE$Q6O&`Yz%`?!|%e1y%RDmirZ zu2={?8N2WXTz=kLd4Lk_?^Y3Z&|LaP>QN+Zw!u~TOXi;cfY*GF9!76nDIv63?@K{) z2f@t}Bo{`_{K$KsVVbqT}c2E@kp;Ljbi z99>;a8AYkWS)N3Sx>p_cT6emj`l$K(SHerAa@jS)A|*{SaqfI6)9RaITdo4cT;U%U z&Is22!Xe%30brmgK>sa&tCOhY@f~NBO@HKL^`~sFqpjX5kF1?n=cx=R&-QR!v(0yL zC{$fj#9!>uHfmnCeMI9pz!$C>7~#(jMW-t8P@+bt+ukB>aj=E`QGOPlx3Hh9(48lH z(P}SNqd|_S<5*Yko%4hmf#1x;^_$D1U;)c^Y*pOIz3mqAkl#Trb2jdTU|C049Vw*D z8t;}Wfwy%o$lR|~xVhpKrqnpiny%0(`jR1hq1*2-97d^N?f!w`7Sk0vv~=^D4C+YO zuB~(WC933J>?uu)+{ITO!(v| z{09f5LReoX#;+i^8M37o(t7*7hYvHfuD2+MD36m|Ryj5LzR?Pi2YNEAkJv`*W)^K1 zGMm33dqW`sq`YRF4Yem#0<37Dw>8lrg*D7w@KMB7Y*DMFbwmusp3d>4;=2QS`6>h! zbpRqK2U$rGuyBR$mSQAnb7O1f!RK(+@cZp*4#TWbemx>LA8t7?O6#S)2RDJN-NSLB zqC$tlc46(!?|}qPTPF78n_*hEiAgoP*24$U-q}hnKpb|!uq+6Qgr4zl%avQcwmXT8 z^znF4p8TtBmYot)+}B!J7qV#4mC8;VbRWwE%Ib6Y@y=o0FtC^+70asvy?(#Gz&D+M zi}?!&-FXp;9{$qHZWE-ikSIHJ7!}o0?CDveA$c*?=UtkSm-zA{?sFX+g?-Vr$-W!+ zb;3a)8HR$9dkTqGn1L@j`_WA+e0G}3i%+4^N^0YK7X!j4J~AL$t3);&ZT^c|BUa`65@HV}(9# z1$0MDWxVSya~L0CymH8METRp>lonyYL-{fdjn*0iJ(Tm?-;YGrDH`>JD2&Ewd!{D< zj3UIOKhZX+YrQ{YR53|)5U+uJ3iO88@?H;38=9@~B1r_vQ=jwGzDE79$1PAcjUagc zFC1b$nBKkHi2^oBV2o_k;e0b(>4E86Mz__V~T3&^hD}9+QcJ{&nhIxBf)pW>!Z>^)OQ~9 zctK13rEVi?cYVLF?B&=W=5@n@vTI#SqaTYc*mgv@e_1&8>t~nZy~*A%dX23>!^3%U ze+>^4e^SGRj4nret+6LIyC=2kJLfn?hj5y!l1|`*So3mzzKL)Sqtvjv*nj>dL$@$C`# zw{d;$y7BN(Fa7eWbBEe+zYdh_TaW}n^+oMcB;j3r=;Z+3aY1MNuQ!tjXi~@ni0y?v zS})v1sadj))LA0$_1MggI8qZ$ZZL=8Qp-mPBLb!T*v$PtfeMl2_l;+_> zAc;x#EA%IN;2_Bb^zCZnZ4EkFltp|GR5-qtMCIy$WUc}+X+?75QT(h-N)GtEKHY2E z1SErOtq%7xVaw@Qy=)S-)|ms%o1jGIX3|YduVdqQJG!<6Jpf;e6Yb8cLgZ$I4|*P7 zyX34as!6T(?Uc9Ms{w>Mm!GB4;F`xW2t9hVo~Zv)DWAt15`E50)3^mq+rh z4INjRvJWG>Ha4FUsq^$K{r1-Mhaeg}K#%p{9fV#mO_8T<<;DDA0K6mi%{!!tC5OH&HiXEL}3d?DH z!FeuC&duz>(XAE`D6?31K&DV|Z0lox>bCmkD2S0SQZmbc6GYj`y40&87(OSt>)l!G zDmJoLE&K4it}{e%Ka^ZFNDj-FBYG+w=O5^Eo6aIe5D2OM{xp(>j2OMe;=`ANS%Njd zW|jttL_TR<5S9kBsb$X(@d%`PcAo|AVhco3UO_#Xj3@nCho6=V#$W%?Qdr2l+I@clae@0McztC#<@bo8%Vq1Xxe zcLV=voL=?hUoElz(?Hb!-oT&ke*SZt!Wz#B=QCi@e}X^gGX^|G9=5v^;g(&&hJ zmgLasgo5$EU-!2<5&#(B4hIa@wyL68IsmB^PLnqUl@@L{C-k;&(mbZxzAfiM?xUQP z9h`GqYx9MZnh#9#g9N$!U&Uk&W1cHl7X%#1KcSB~4+LPeydC4md_7uoz|tfmtHXfH zVufMU0$|eF-9xc?>MtCJ0+J<=A{#I+l&Wc!5E3&qKk8QkqBgU#j(TewYuDYD7};X3 zw>;uPp+`H28D694MzE8DIttrvr{~?TwE_`+WsCRQO){s9GuAT2S3I&j;CB|*1D z^Q$LNBFyh~q(eB?r~2&FVxbq?G+|$^bLIP)`B|nX_w!axOY7=flr2mB)%iL9b`7pY@P+qfFW$%da3LUJA65C%PLxsl6+aq*>rTeiIyV;^PRAzbYuZMbGF6co~AIq4) z*q0qC;gTM;n~dCZH@54d{k`Oi80V!YXvY{~DPiWmkVl_GF&d(xN5Zb|=M3}*DFa@C z9SFGTRZU9iY2xcJC8_ht2rPR;bF6W|(1P_epFC3$Y znN;koB@(mWm?rlw*wdDBuAe+qc_}^(mZW?Q8xR179<#% zFClE0gi;_70z@nfx*rC+tARFKr|o+vN7AYorZvp6wpJ3p&9q`8_3=8UYdQ4xK(IC| z*YGX-Y>+~r=e>LeDQ4gBjo1%_xcTrH@IpzgK5vIXyM`bn*c2ID@5yzzVZogYnbCNTL41K?o^IeMaAQ7dczN zs(dPUz4Uw>?ZFlPD$I|LL}*z@o#2iy+Ef25$7v^f)zA`JnIN4=5vJwrFrqr6vzr(NXe*j%dL1sg1d&r5op9x}TuE z1#+QO@uKI6#kPI&Ne#RPeh=kMnNjNq_PDO#bvbsjQAdAUhu;(VNtLTNA38uY)+4t1 z{5;A*mHlbNeRW0hYU_1)%R#g`GlmM)d0OQ#dP^MwmUa0oN4OyCy$7pN-$2U~J4ExTECtjpRR+ZGpHJC=04E^we zaC`Ea|2VGW-7Qx^KO58B^^+2a^U2oqu|Z>lKZjnU7};0T`z+*xcYKqZ;|hbgF~!JG zie*gaKo9l2lrYtBDBS(fWg~4xRP=cB%Pl(+=DAAy+Ytds?j_?xUB0Y4xCd z>#FrUg48^#RE6GdA+-$l#>f?>1*gOx8l)xtSVLRM3{1vhlj-LLc-6pr^0tU^SLuFh zXRzJpwmC^r>Rmm^x3NsnU5x1Kyx3oMSD!p!VM-4xDvzGIdP%5!MQ5`VE3F8at+lqZ z2Jeylt@QI>nNzR_o2v;V^HiTw=*Tl{+t?@`{4tm*J>ZE19z`i$(#e1Tq+VcYzo)kichgRsQ zMWcPXH8in6(tHAQyK7{@G0~4F*Wf&_CW(MMp#sM}91zND@=v=Kua}uGX3v6Uj1B5( z1bm20^zSjg9+GjLL?q{|(I{S7cZOCNdW`bjnxV1_Emk}e?j1hjLkB`+e zYWH)<$8DSfl2-CO_Vi1e@-bF-^j_r~3lU+bgXvO(35+yTE9>8yqlO3gm2 zU(+}SGDZ$g8`#9IM|B`cYfTUtrW0{mE>efER-v0Kw*;#ho11TYrczQi(xfE&_RPfF z?R&*y{iD{Q5N}iVrGTv5JCdGS7o(Rj=w$|Th>?s35n;EnZm3Q2=-J4*;9O&xp48#| zmOiQ0hhwp5xTX9?;#POM4hDB!&^5%GdN|Y6g78|~-A4{2#xgF}X!VXPd2}IqTX5HE zVPG}lRuGd>go&|2VPeKmhZXJFc0MLqN?&rbJv_hZu_qC*DApjM)L^vg-Oj4jJ^iIb zm8>j-pF+0fW84mSsB$Yz-4K0_fs<(ftWYtRPTG9jPjE>@_BHS82-ddR6Qyu=`qI|v zqhi$1x<-w7lG0ty1&(mJRKKG|9PWBt4KH16aX3BN>y}Cym4!qU+J}F&Tr8z(|p&Q(oB@AswBe_fj|F- z)p66)H2|&UWxPleV&VQIx(|1`<1H!HY?Yl@YM&|}20nHwO_y6H4ytPLfAuyn=RA*o4G@1EB#a1Ub*3D@NkWplfB@tl zlXX=%wzywSKj40GbTFh(L1h06MI;sDj#5HCZ@pVng)toHNV8!I za;|o0B&pj`x|4WK(37%xxguFZ#&jxO&UF^q&K`C+)!M6nkoNO0HKYIb+|TiGW%`f} ze;guB!BJnMHFBwc-2b6ie*i2}(HP*v0CYY)xFx(c??sKEGYX>Jd8Xh~b<>;AAZb4& zI-cs@+J3U#f|t7otes5)z!no_#i6BeEl>B7FCy-C&t4Omza?}@?XyjmP^MBt7Et$H zxO17!a$PYsSh{p(2W5nIaSdFDcSgYir^+F@Hq*SkiF(R`?aZ-NDMVU9^w}^83N+bl?Q^GF1=TP9 z*y;G1&+lsCD%P~_&NT4ec4drPoKQS`)VkAigf}4yTF8CV;j^SG@atL-wcU5ij8-fy z&lBGswD9Sw^l)AF?ajh<=M*2P)L&>00)ddLv}P9FQPGVR@Fgw258t2oN$N9tfKZ2pC_ z_H@P)`=I>o^Um|sO7baP1#?FeXyM z5~kPgZLFVLCDBc{dG@&s-I-<{ErvA&uIyie-SlEB5g@yq$$?8Y{(=GN--orM{o^QvOl-bKKuovE`fDb#_5nUjQ~Ah~EUSMmz&@r_V{&UdwuvtLxcAg! zFlHeg`gP%f!r+2I(d1olFVkDP&~AJgr&kf}+yCaXjJ-lsNt zu)ce6UJG5<>zl_Y=Cd?(JB+qoMWNS3sEUA2nji%Gw%0Ge5!yJd(mb0tC7$b(( zQ~iDrq*aA+yI6QW%LeD?N#XTdSzC&`CkE+SQ=b$w^>fBH4U4~s#@Y)h-ujzx(I}Di zS^T@Z2><)4G#uBTr|VOMEDNG2p133KCWOB2;YlB`C>@;lo5JKiN3+(&M91F$S||Kf zl;azP-<>vwb(U=!0w{e^x5dnw-%!Ghoc>&Omz1AESqAr%wGQ*sFAA-{5e$Irpt^Oj zXwsF6-CiO^Uguldbl7kAm^!{GTT?IZ!n+0%&C4%7r>5$Wjg@NrnZdbJHZ^FjwafTh zdbpEc&;1h%R^KtX5eq)`MJqel7YWue+0>JKSZ9(9LZjbuHRcraJCtqDW57|~#Pl8j zkY(SQO^R=LQP}O?5Q=M1-ZM|{um8( zc16-H`0kU^W{bY`SA_BBn;0B)uf#SzO?=2YR_Tt ziX&9Gh#UGr3>ffoYU9kbQnXJm9*WqXq}4!-w@z1+^@HDueO_`~;_-fQwUNXe?M)Uj z-*iiJ%`zJzxN9TYJzZx)T1UE@P{~sd_3!%iUeb9fdY+^-hEU-F0hFnzd#NuJPfCd{ zNOCTOXEH=c=s-$NSDe8@_|W5$3g4H|<4bHlqi!gpi6?%9+_{m7I}DMIgU0j<1eab2wZ1H^cZ#&f?k$+kpT#fipcs$WN@=MQD> z3t9^RHUOs<36kSW;6$CTUOe+s=(K7Xy6gQiiK_UaZ;BY~dkMC^ty$Ar=TPiYvUBNc z!UT;v<|ue!Zt+8c+5I73HYZiB%1DI_jf`h$xOflfT#|ej-p~or99V0eeNvwC~L%T;GO3))<=0vB+*Ns}KED^sjGx34G#@l{{ zvzwZ08MJxEiKSnXv^LuwZ4>klXJTj3Qpf}wXNRtm&8b~0>gF$;_@#lUT70cgd=&_uscHcj@f-(OP#RQ?(0^;9{xiFMS*wu#4!_JlB=eK_^}^ zT|kS6Ypmc_J10+^UOEj{r>+p2lSawkC2d1vhj`4}bXw<1erza6^`;}Dk5Bb>Ns;49 zY!Qc9w>6{pRx#*6qtOqmr6+)~Uz00{>v=pQPhGw|?8sZpC0ZbmbuvZM$r^Vm=gPvr zkxxKR%0f%KZzGSAdFw5w1MbDge6n^k?FwYhlX)?-`fPSBRoz67Bl}WiJM0I(4892z z27LP)+PCY?-8suSn{HNrY7a?&+1vwlhYPKyXT=2Ap+B5qoqb3tjlMDg_IPiQ-1M#} zTc6!jIONw~INo!z?cmGFtELnQ1A!KS5@Q#``xaZrSb3)Np0^#^f1jay-o9%QkW0oA zzicZ%ktqEiNwWM&hi8?_rUn>%zr=k5;x9@eO;^{e;i184mntpY4}isSpE@lp(1}}H z>N?6Zu(#2 z@MkRk>v(=&>yMJlzm!^d|7Q?EFc9lmK}-M5D(MR``;&ZsEo*4;2UA$sHF5Y~F@--I z5-g^Wvo7$(4?pB}Pc2#|{+1FPkQLPxOdnTAZH8J&FYNa=mjqcnIP#7~lC#6RzJ%NH zE59zGXg{Oj&xd{Djo3DVZB9bc+O6-6;pwqHO z;UBH8(vZ7-{u-(g6zMHFVBv#p(q`*=xQSz3H^RkT7HC+>G z%8}fPc9Fm3>c9C*otpMTX&{E`GeN+Qkd{3pjGfYH!k%E3Zq@l@+hnD1ova*8nHVwT zC3Y=}i4gM8VT{`;EMqfzUQ_SykN`8;N z-*A^X$~QzDvx!1(_3O$FT)t`7yX(wEq6IGb3&;M;LY8=pJ`2g==2Lb5(aSoL4h#qK z#&Xb)i9M_-*woNcj@fcNvnyWEG~tkl!R}YILbcw}t?O4g(lgiq$kb3LhEntcs*t8(IlxwLaN_K1fxiv?E zGWToD*7(wqFXi^#u9RzBOdNZ-R4A*}Vy^d;kJ|K6HIG0mn0MN`g>EMX&y7@i&4@B* zQ{EO;g=7yCI&20o?D)yrH!uCtALUR7N{So{Ur6}Baox5>)WZ`9CXLbTL+r%Bp*2BW z#Z%*sR@7?jIji>W`F;Biu>a9ZNQobzOQWP`%YnDNL-)Qp8rq+vf!(h!87qmbYpNYR z4C~=Vvqp6%Ww!;k>7E&KyWq#Wmbvg#tRfFf43G9k!mBMcBlPPsuu=`^6mH;U>_4J5*-1EIhznLo(ocJy$Fc-LEWY2Y)1tP z9O8CQ(UYRcMUNxYp%tA@pb9fHjha2v7BoXiMjC0Z60bO8-g}4V@n-LA&QUis)zXvA zAtabf&Dpb6ifh@Y?Hyg&QcK{uWV6FEO(_Cq3%L2Rt$*llw*B&qRK%4A$bv7j3yb62 z*=<;jJ8P?3F_SWhIGif^CY{aMnr0L!t!VV~`Qy5@2U^@4Cwc|}-{}>r3kFy5Z#jn$ zKq|<-)tn@`<-j~0+_$)V2?Rs?5LL&CNp+3w)k}zu^*;%puL#n>td>BwRXUtr=ff|y zVdd6zPpO#})tp;URhks@DK3l*`{}@kQ`nLI$+R#8j1beqGGeKm;NL3!Dlo&QQ&Q6P zSM=anks0}QQX4k^*@eFaRsKpHctZ+W$#fT-oX<|36{Tc46~ z!Eu6q5zW?igT-vmtA0O6&K|R($hX@IHUyYLtc)hYij5gPcksI@Cpfu^pe#cq{Wc5a z<=-|452+!m?|LYaa;m}q^0_iTrHvm-br7rHF5ANyGaR4#bJhF_TehE9c~6ZaSsd@~ z(-s{e6@%SD`-Y02>)jAtn*Qx&;625M*KC+vPox6LmHC{vu*kOIv`+%7%F?r+GtC)^ zz72gm4Vq=V1Trd1@paQJhU{j!KKAE2bCW15ENDHwVqN zj+Mx`_cE*sf~P0(ceZz8V!Lcn#e<5h--B#xF;JtaLoRenbFG<%qn#Ufdy=Cm(GIsE zeo`3ik^rvMCK&CAaF44l%^DgFcK(i;2HvZQq}v>t%NrpX-G=SFPQ@9$y;KHo$YTo+ z$P4^23F}$?a{354cYy9itYj$lXqA<4GPVeg$wD&RyI^|L>j9`a#u_KS;&wz{&sNU=u7uOTlkGo7>*|sN3lMStunhygiUiBRb zj#qqSRxH6luhhX7sR`;R$@z-_qkPsG@4(KInU@iU@31yG}Hqkj~k+mdgd8qm<*aSaJkE=t+b_+&U8}-!XD$>sOPPd94JQuN* zixg$HF|%9-f>wm*4zPUJsie}`0N|qHxTkPuRS0sE`5n&nc#iVYPryq`^Ay_s1&AHXTJ^W>!bDNY5L?>-#_QYzAbvFlDvmQL?{mmC5}0eU;x56>vU zJ#rDb9`JDEZ5a`%5o}1QX2#XrjsK;HorE($267k#dS((wAWiqjgp_orGA*Ry)N2D2&Dtz8e%66xo^D;l4d#|N-njnvRKOPZ2&I1 z8&fNnnjw?PWQ6+jC(gj1B<%-L{Bl4{i|_q_96Q($&s zlu?HAAWCedN2LgBsN2o}&=ull)ZNG$NRCN2mUBsA<-~3e1gHfoz|J6Zg}wg9uj180 zR|Fs2-)4MNM}v_<8_Xc0pmFYano@!@WeRDWbjf;+RuW&+DEq6P4*BnYFpZc}&Q)AS ziw;Ah-&i>3)1wmoT5MR86{OA2+SQ~WwF;+c?3i@V zawO4MEY8mO?;LU)#T^9Le+%IuPWI=jpLq@A652%p2Y&j%1ntnuVTrA zT>s2<&uh(_kMgWYQ4+9U4{NWbuH|5WLxHVgHhT=#JP%=mdc6P~l78d-rrKN& zqtR3~DpFmnqIml8U8SDpd=KlN-$lL9t?;!}yVFtKvAe6obO`r2a@@$0T3~t6TI-&N z*+VfMCXG%Iq2Ci5MS}Y9h5|^C_2WjSE+*js*2dyO5$y^V*pq z?PRexkTU2Yx^6&$w2w_`zAi|j0%EbXS>rBz!2BZm=-ci!EU`$uK|3k0o^9fZ3)^!v6x&T2Xg2=ayMXBalbvP2y|NNvO?3HK`8*Dy)9Y@fOv^=L_X3KOK#IxRmfBeMRG62?Mp zW4qp)EGs&s7n3s&MOrfrKV9IOU$CBD(tZmRL4q3$emR18(!t`cF9&ckV6vuPjSNYn zurco2c>Y2>68-tKcRppql;>|2jtefG^Q@Y$wr^&%@T54aR6Y%v42cuey8W90U-Hk{ z1D)5!Z999;(Xu%oi~kQ~EJ=)aR;VyqX!cPwI$+Pfn(8fE^|5b#SahCvY*ye>N~fua&WNZRIJKh2q)yuH1jcolc|M$ z_rUx0%onAM!*Xw`Jwlqd&wrajENCm#Tw2OGQKAl#K-IREK_rHWORO-?>#!BE?io>U$i^%3q>dU&Qho9}#OSg@MRJitk{>2Mdx=YG(_T9k@yTE5|A`&_(g3j6U32 zAWv<>jYNGsF(4-y7}-mT-RD4JO=IAYTCE3l+ldU;F=^Oq|?8+I{65y`Mq~}Rq-odW9*L1 zbzs<=(1c`VB?YHPgpAwMJxv(Unx!aS$dW8zAlkD6?xb{&UTam}S#8jy)%Bi8B(2;# zvP4^{12!y62nk4T#qx|o7_ar4XMFPbG``ELR_}Ji&bYd|oq=n3MqBOLTH~cpu=zow zk&Wm{mhXhyLG?PMF4;`dUmp1gc=!|IQxNUyZ|xM`fBH;8 zra!>A6zlNNEi^7WTR2;VoNNp<$U(T6U$_VjaD$!G5)NXvvTw&DkSV!Wg9+5a zEw#1w){G{aw;AE^{jB@-81J0q4Ue!=Q*==0vi7md%W}Cp9F7+y=-~r2N(sSQ06p(z zsEhTfatEw}On$4CMx8eats8}n(fJR$C2}bZGyEEU-h}&WQ!TjrQ^;fi#lcyU1~Sob z4~Pnf;t$uF(PfhlfF+cEWR8~pXm0uWGKGe_0k9e}KZxPnI}){6!^q zBBtX3+BpAHc~xI%mts+Ca{=ZT@QKnR5z%@x7YFGXt9oiB+=0kpYMoJPQ)19Bj96u0W-D?R5MMrT*1cvp|{?YHC)U%A{*lm0m{mhLH3{lhRhVEWnsec4yQ-dAq1vezoZ6t&gRYLVaT zSi~y3X7+xpzN6VZk=`$AMDaDj8ryU5`WQcHx>Yr?r+`JL7Rd;b&mR6YEU((Mo(n&D zj-2Mj{lBZ1663|O3fO;M@6zaF8MioCojLvy?8Z0Z|LlD8&)boY4EpL=E-)SmKb9sO z_WAEO&bZkB{E^oF&q4NIq_2NSV7PzG*~5QVOZ~5U+t_~p^vYkf_UGh3M{x}g|37B0 z)Uc|hH|Q^%4$ysv55_LWk3OxHDL4N^&Gr6olCFk^p^@0^99A6T|4vr%|3Q7+_=xQu zW>_iuS{Q_gadlf3D$Cd0m}=H9|CJx;#%cU;v@PQM+ee2s>}oiHde9z0C^N))d|(4? zAeFcDGw$5_1(0q9XDOU4Sgh~RMoP2$0jT@SZ@vD|X4An{Voa#^cexGM0Od$xd%swz>1J6WVH1c+rI=g}x=Y)f3@7}M9_DPWhEz^>*LauJ-#`vUFBgJ3xm5E`Rczk#{CnG(A zn0|Hu9P)~%^@=$A%l9`WxiYC#sO?0veHK0R8G-+HOER1UWCLU^0EI8?B=xu&ljwlYfu) zr4#O;n&NRcgp~&O%pvQ_Ajoj08GNX{<^-?lDYv(O6^IR6?M!oA(7QWS%W$}A>qH_2 z%ROB$n+KR*XhE1KBp+~ZW$C8|vd^h?r)89Bm^L{mwkE^lvj)Q>l46EBhN3XVl<8h) zXuO5X8;hT6h0gQhi)OoruRiTQT!FjHL<^Umlsq~uo&>D6)dph8C{3b+1#!MPb6N3@ z^^oTMT*1yhSBK1BS$e80a(7tN3!jsON7!&+AD-B{Qj+Ymzi=8aqZRQXD#0em>6sVl z=JR~Bw(&GF&p!$`H^9Ci<^+0}=OS<;9 z<%?aOdV!VJJf#ie{5)I~*o|`3aq>P9e;NH!tB0xD4{TUtV zlf^%yAN<@8%bp10`DCH?s&aX;k3V0|e_Kf+R)bT7V)Pqi#9Ok7$CTY(*~N=WwWqA(cq$(R zK@qDlD-Y3*30YsTNS0mq0u$)|6}SBxHcr*eIHEgin{h+lHf$JSH2o0u-o@|d1#ZkL z?R0*JKEYrRi(#6w?&(vvQzCiUSm^d-l7CAIvx*h{sPtqBV zK_q2n2<7uywhLJdyosS6%G)!`3&SB^&THF#RA+r9`t}R}hdztwYqV4?w7|sZ**zTZ zm?tD>%;w5SX5!!YNgD?vwD>)vj*f}oK%dtQLwp2z(4w(EcBpsrD|W9wwk4y6y+WQm zBIbEp0hsZWpJ_A0u&ZFC)_bX~Ef$?#m|NRehdQOZh#pRx(QDtgYCI1m29@@%n zkW>~`Y@RTF^@EPVD9l2Oxy3U4I;>6@^|g|&o-#cNk>WU;EO-$5wx-A_eLw#(nqUS# zP`ubg2P21iT~r+m){(i5w-;MaEZ}wfASx@hcp;BhM7$q7Rtc=v6AA-K1LSyibvIxjh3O43|PKe6gJAc+Sa%oMbpQ*$@?R8as#t{ z+=;(+Hmil3OEJr6292)29!bQQ;9s{ZcpC1K`bgIh&E{%kVHZe)-MW%HKMpfP9|gbv zIzqSjCv?sFH_@H=OAEZKCJ|KP0&RYff0^_zz9 zxH6H+iKQhl!t6E*8YqSZWu@Xvwf#cVU`sxhyW0h4LT{rqYY>s-5`@3z=9U#~k|h zDJj8%`fr;7dibR&ce;P^!Mg>JGyMT-SbY)Urt!rs%E=;H%Y^36Ky&=!uhEYeH>VY| z4Z|L&0_bT)_v_BvAs<${<)7{fg213{*7MU)hvnSGUqEY=@No=BjXnY)vb)Ky@{t-{qpc ztggX_!51b0g3iaK^V>rX^9zO1ib{(>)F=85UaZ8fMwEW1EKW550rZ!yVM~{}Nbcs% z;7fE3;;2;oI3iq{_>J4pndSb&F2oy;j~`4UuPtZS7hJkn>%PvPIGe(G4^=ejBpq`e zFB^^2hv6OKRp7^eD`Qm`HEbpLFk59J_M#!!J=iC}sWz`E*!w%C=VDrixl-8vYU+dI ztgljRZNz{DOF(Y(#COG~j?5a&OEWtH<#DB2K5>bT9Cr$TS8R0x?oKf8CJ`ygzmZ1V zUUGKLSDz`ae8`P=xpZY;V~6@EkpSp-ZP+ws$h)#Uw=_+VmQHQ{#o_ODxxvZiM)CEI zDE8sY6~>q$)XoLC^ruDhfx(2oBWV}uhmIlc1dbh#I~x~u#XYPTnV|r}fecJ4$PZix zDR?nmHq!(KCt1utI@1+-%BjW3n{76>qnS+0@NDCB$bCmz)-gVa`Qzxi0#`r1&Ard4 zuFM751$fLwbH+r6QU(LXKIb!@`~DziF1rso>M;Wr^bt}@RJ>T?So!dq4&!2=bqW_y zWSPj|FC1x!w;Fi7?SJ7kz_Che3|L;ttI+ zP?}_gvESI(#}ozdbO_P4(n1$;HF&%RXm0L|#>$}*l$OqCczVf;{DmW@=JV#{36WLM zn*9jYcM5uPVQDzc(EInYp*W5;LGrJ$65jOJf@cZCD?&5ZcY_=&F>J29q@(A{Tz0XU zS=`*I0C|{nL(s5XHV(UXyYPI$-BM&KYWoFhC8_!+*jK`4vO>6HY4R1fwp}t|DjQc8 zpEu}~ZI+i#NiyW`9&G>af&WUl?i!tNivgnQruAZN=v&Zk#YlI+j%bNm1?W~_`gl9p zyyn2zC6a{g>8ZBELw^A|-`dIk%-_PTNkMuQyYQ9*o|0Ssc+zo8+ftP{r_btS=@Y(; z8!cWbTw!+kzlspHC&dRXy{9nID@15Nv;ls4^}cQYL=17|2?kbHToZ6-G9qT z|G#SAt-avnu-~}VjvHMKjDw_VS z!i#f*KBsvoM~M}}*3ee}7oiA?mi%3$H2SAV>EDE+{DAqE0;C@0&QueVVom5PX4bEn zt%k~_-P*7{;>+sv`Iu;XpxC;P;Z%GI0IB}KM`*PjU6AO0KhSa_)Ht8p>Dr3FJ_Z})S#b+z1BzJ?fKjWk*D^NU=;_Q>4qLXJ|WZ~(93Q@PSq zo;rQgu>NHE3s3j{TO*VPJ{yrF9*%a(n8%Y5uKHToQd689K|*LsEyPcKC~5DUS(K zHvTW}-aD+Rt^4;4f^C&VH2wi$p5D*X$0RbWO(2LZF^e(-F z^n@BAu+MVu{d?d2JNMr6ocE9WocrAWW>&K17;~;9YpyxQ_>6m!4_rJb^H1)*B6$1;!hR=hQ!8oN$K)glOE!1e%$+U5=*vjc;PJjp+j_^(08$L6 zQI7lo*Y#-!ps>SflsPi{V&rPzhUzP?OioEr@~3dU4W0v>or`s!bp;VJ#2Qban$wxI zWzxwFg^bD{AiQ*@;yMy#BBg@n}7HIPK|&NJW#}P~yCA1|uw&If4iP z0ZourjJfOw3JQdNYvvH7<>}S@^~xCE^-ziMc`Db(AF~QY;;UKrGugcHT6nCtZZjTJ zbdK-)qOOSRa+xxR!_XMW;2S|%w&ak}gzt{6$Q?8=Q>kuHaPPb5K zt6-omTi-ZMo)SpHUd@kS|BwkXNI8TYh}_HGE< z5PmY7Yoaz-6({eTK3;wv{cKgYnTC3c02hWco#mNnyL=h&uhb_=x|#Ou56~h@)b>1G z5yU>hUSkojjE(zR@uS1XWct}V=_#aW@|mEOrS-58xA(NSvQLO;G>wY2!n zF4sTDbi;R7vln0kbvfBB4WTc9|9+Vw!X9!g79SQ5`MRDU@T&EkHKLth{7&R*qT25F zfk7wR7=96d5vguj0anq6JwDt@l~UOV4~y>?G}Olf{0YN{hjf|mH&XQ2Q(o!8{J$ls zbrSY4u7f_T!^HURn%q*{_53>0M$O>xQFGly8ey;P%in!TxZxvbwDy8fb%TrBTDypW3kr7Z7+dweP=q9 zPF0HUt_IG*#)<>jT1&Bf*_$E>LidsO-IG}2abg5RBh!?22#ZriGTl6DO`h6qy$wgK zy2o)D{SzEw9VO@*fvFt6C8vE-^QGP>>UmJBKg zbKm0S87z->2`}`)xvRe7)W`Ewwoe^DB&L+;*E%H@6P1|J1x1vwDtkVz#V657=3>xF zkTX4qyVN$^Nkz<{H4HeMPAI2~hrMTT@DjJPbA{0(gdU{zSEt3J;iMZ*s7|rYIoc&9 z+JSe5o$94uSArZBRaFJ2=fHSQe|}sGxH%Qw)g5TFc~fce+UEXQANSqCF@`XP_wNow zZp&bu3M613WP#%1c&$0z`3{)Pe?2@Pca;&{X`vmdcLYW-5B42`wOlnmz%-9P+opZ6 zlXQwr9v9fl|AK%l_4h1Yi`?c!{Jtcoogve`I&q#woaO_){I!)zYglQfWiXwMpInyS`ryw5-j?49yq{AT#MXdd zo+=<4^Mc4?@h{e|vF3lZ3S|-RbL|Nj4NCodwA zEq9Y}>6=Pj!lxy`WCu<82=pvDft}) zS@>rVRDUPfyQRS1gfMWBwo1q4-C)h`~jYBOJqmwMhAQv&d^Hqu1UinD`=cLv4N2_ zY0+g}FZNQbnWhJPcPFX75k6TQnXQ+&UVDdj^Z6akr+A-IG+t^Qa zm^eN9P)H{ImMrz?eLSC-YRf*KX+TEOkvRC4(+!@Za?$4kpVAR;i`ER$g;0@MM%Sl^ z$5}QG9Tq>ANzTCG%Xf-U4KeO@JZW$&!dWNfKS0CGAsq9=@ouEFTkWwOADpD~deTQR z&)SIx+Zm#k%>s>IQEP+}j`h%G3?BXP6aQ7}w?^Xp2k24NSfvn07D9XZT#7dQjX$jE zoY=GR*u~rsb(8>)54^H`Y~0)w|5%uz=WQ58wn04;hWM9lV0KmPapXI)2#lqkcqOvq=`@rMDcL9g0C`^+k|bx?)fc2pN$O== ztVLU^)9z17DQyTM zgSZhv2Zab0tqhs1Yc=MIQudJ(4$$4ukwvg2+vCP#ow1ylM! zlUcz~rol*Nw+)L`^TZ%4|5 zp~fgYpwhN#@<7a0xYG+)_Q%DpaG5JRqn#$+kD11uT=Kkiats(H+4G(SKIK*cV9eZZ z9LI+$p)v*jUa+YV!j3?1RvYbF@0z?ykgJyT4Q~YAy8z)q26UU`1e@B-Dm03V{=D`?bb&hkhHyyWBk1wLe?*P0BEG13WCfXMr1@iskh9jm~f+R2a-VXN0d z-8byW*YSRsx#;uIfZA2CdscH9w#-rK zNu@P|crC$*8}U)G`5>_BwA=o^t2q9dqriH|A|mK+m+r@iSkTe0nWCNLI`^KVgZLox zUbFI>d*)Jy?L#DEiPSRj@6E_04288>Y!u~msIkq@O>zX}dE_P=3{CLGTy^!}sWn)Zep5@(ccj$+!JXe&>D zG_+aj;;(BZT1~^-S+T4-WL(T<1BE-P^S zb~(bz^y>aw(!OQVy5UiOSC2gJ~`^1>d$IWBhw`j$Axp=LLdV?sp}XAxckbC!yVkd4fErY0Oegcd(u6XawK z5T|w(ZxeljOzs&WbD8n2(am+e$!!iaE01;}%Q-%}BSQL!u=eUPWWF!pqK7Dtc-Jgv zYAe;w<+Ek4qlZnLDgP&jH@B^bMDMesQmy#bNn>vmP?zTF>jG};M&=R@p}K6$=8}dI ztY;TPPELP-C^1Uzq;YmrbZ|NCUiwD?vKbQ{NB0`k5*R_kUX(WXCvL@K?dR1ReaQkx z-f->0)`*gc#M={}85_atCB5d|IwFHL!f+0UC&GnEwAXU%^~fD)a_l z$@4?L0;FEDk2~%zHF5bxfKENkwrpYN&n}NH>CMuCS=ROgE2Jc;Ycwc zCgg2B#au+8hU;+VA> ziPe`gFV%X|Z#kqqplsm_t0GGx@ki_r0g2rhwbn`g54}DvtBY=q?D|CN{JuS9f=V0A zs-DZFHv*81uZHuz#Fc@?rVKj={2Wjvl7oX=3*U2V7J@^;#WiB14a)q!~v?GW>`V-^UaXBR4H^vKe3cQFd3h zlv-WT_%JLCA-;aO+`AmR#12%8x?7?I^8*75H8`tMG;swAAHNy&d9;pM5b7KfYI(vf=TX%cDPib-o$Ut^Wf=C-%!e^8iO8AR;qG zK}19AD_+#^jU?JOjEbk+sV){sp8e4UNx(}D4ubST!wMi1 zJvWS~`>5z>AA-6?>!I|g&7onebv@~QN{rh~d{uet4ZT-6HUm8r=r6zEOb=dYo4;W- zjK%*!BRE)DGy<2({US-U#gIVNER)>9;0p782vmqIbvKai=iS?hlZ%srxLWYMP9n5Z+w7 z1Hg!x@9{v7hk$n)QcU&?mq$v92JuKKPg?HtYDo1R<1z8^&R9?Hiw!+it8PmtlC!hX zM(blTZsCcjx7y|;`H=?D-%5x1gamo|lsLPyH%QuRZl)VVz1zeg%KXFZNXxXfPCI-6kgv1#7hPo38uzETut(JDYl+yu32`eDZkXWKS^n*d|!GUV% zg?pSlY5Yn@n5**CO# zUppUCtp=*HDxe!AWXQvAzjZ7ByY|J*7BRjX#^9OU-nltyB*9yV5fDw(o^o>)YbkTt zi-pnL;!2nC<=qg;RRYB!-Ko(9z04xh>@!f~5YN)Z>f_)E&wk$5p-rGWc+Lw`@&Xvm zX?Tk}xpOW{OWxz!C~b&fa(azA<;Q5HYRczfET|`E)(i{I!FXe>ck2g;>7Ncwtq(E? zc#8M$c4ITBW5cLP^eVmGaps{0*B@HBRxEiJ^al9dRGPX z1uEeNCv~-`p=;om*n6=bf~P!!u7pv|)E8v@`v|;y8vP|WvRSkbdXk~S!LLz?cib-4YGC4u@lhy8Hg`?NL~PYN7+HhCqwrWY%F zf1Na1f$YqhM2ER>v>`&k9j*Zj{@$F3(er4a(WD;L*YFTg6i9eG1eLXUckfNXZ9FHN zLQufEoaliiB0`=E0uaj9tkhR>UhQe^gc2<=y>1w&%DZjIb0GrLA6nc}%ARS%U z-DZ0XEv4{M@v=oVW!d>sof>oHgfCw{K8*W;FkD)wlFvgMS2{B@qRCdZ_Y}aU5bF6G z@;1}T;3=F8+#A~IAMbk%dbu;4H(XzRJS+)j##m1sLOoFuLeZCr(;2I(V^F2C9r^%X zb*8$a^%t2GPCtIxd=0tdX-zd$xo1qzQ5m(}ns(a4v(?-H=eqFJ@u1Y&y`M8o<~8DM z3AUbw%3l~dHl)nL&&um1IoXmW=3e^0l~DR+j;)|>c^UM*N6k*9#rplkwQv+M4`$ zQSV}t#rDBhJX!?RrPJzszp(~#fdT?|823Jk9`WH)q14;Knos8a1C}Fw zQR^Ie9#q{8$0+pv>QSu#tRc#Kt2%+t?Ic&z%8A1bm#Fr18}x*F`7YGeq0DLSprY1~ zI=^rZmYCMnNP4@bREZpwn5{|6f&!L}$yO*tQae3_Z#Ac(OD*Hk1iVF|!9u){ciUj{ z#rv{O8CP4*&ez8yAm2*X>q4t**b=kH>}QCmEp#n7jfgQS#@)5 zi>EbooK0D(bJ*K?85OU7uV#~1mJ{Z6ka$rT9@jGGcC1Nvp9i@UkCU~`ulX#U@C`_2 zEwq%u@4}iq0*uSi>YbN3@{HPg0QujpArX*HpxCoj93Ql@O7s5`)6HUwxgRm;*>Jmx z1WL0il%PP-O7L0p6I#8;uh}&r>BTXt9Z>rczSCwtV7uEWK4gI&=rvBCKF=_NO;(#N zX_hF{D{EPPe|3U;HUA??*RhIVZJ?5T*NSaQ984WMZWfrwY#LXswLd=I&@cb_9d@CKgPqhUhqB6BJxW}rZsoBR%m#8WDVJyG^}IOttHV?9 znzET+6n;z6uE*8&FJGpIDox5deTMiwYJL5%`F2qcN4J|xc6>`lQ?B0%Xm}784A+W9y5rMZ<2!}9JCfQ8?~91v|5)bf3Jogzh)j<0 z(IfvUPmlIoZPPmGy!?S|0urNNKQCcX`gD8{@( zHx;1+NC|#GKAkf$PfwNS*WThxlJQ%7KjUo|o`XoZDB%wl$Cv<5UO)zpea>2r^0GSh zk#qX)`i1XN&KP?nv^Qbaya9zp~C&WA7jk{zwCy__aBBAKI(^w*M14mVcCyZm1My(F?G6gH`hnYMy z{oj2Em)R;cMR)fYHPb`%mlx#2g$gFwC;Zm%a)c${CbvGZ6)#>_V0I1`MD>m&Jq_;k z<3|nMdgyf?!j462sE$0Kl>(Ok7t6ht4?Ch-y#mY8)liog?f2>?_D@f%@8^*&5TrH8 z)Sp@}FsGp|FkDu`!|)ul4d4c; z`UmKqz6qKC@cy^^;Yu515tgcmzN2_aD{6TF38DM(@e^ptZ_EZW#K-BW^+mt zQZerr??p@Xhnh5TZb|yk?eZNuj2&)XS7KOfYJJ09Ebr`SB;T(iu*u#SmUzdYYyJ@- zeyo?&>Z*`faoV3d%fCAAJ>V*WZ_ofrU)ih;8>nWV-Yo9>0~Bv0PXm0ZL?(KrUzM`QVU@w`b56PJ**Ee?Qhe-X3%^jeYfN+wDsd48Oes4)(Z+@tip7ablWc2|0T@upU4og4e-a6vDLn&)gRQr{=uBaL^(>~pCV7xa^H%E{X>u( zx1T?4Yl3OAVNdF>ESvvCz5&Y^P#}?>*e(2bxcBK@4gezYGh~JvkR9SATP}{JyxvqOv{_Zu>3d z?~ia#3L4L=%~k*YIQKDl{)Ez*hVP)j)#T5%Kk31*IB}x1^RfE!Kijg==a^pl$nRH< z^G1KRnN_ZWZ4#9?gX&z%{%rqgOD+G^f45tp-(>B|;Eed~L&2ZM|G(o1)&H+Y_kZwu zOMm|JOVqA%f!N|PZ>)$>+^RH7GHv@J9@dhEy=QFu6x;dqFvuykX2CYDR$q;`S40Kw zWei9qTrMkF@>Br(_BRR)KmU87*?*w5!oEWBQ`FiP{rLQ08$iY_SkPJ9BVt%|?iI)9 zpPO^Ar6A6!d{bepAk4(K9z|y;r$lv`y%Lh#QM-mF1(=-%rR)KbpR?VaJZj7={7Y=~ z31itT4n`FCo{i!ShmZq&LQAhzM1*_mbFLVe(0bL}xMKS8!@+XTZgMsCHfZ#b_2&>q zK*Y>C;)WajxC~<6)!g6O)|@2uG0b(_iYjcgP#=UnIkV*;SMn^#wcut*p1OVe+hwQWGTI3!INZrVsF3HIan%ueE*whg#FXnY^q=TP0T$ReD4q zZmS1p1g8+Q^I1A+s&v^hT(HPWin{ZqN}ri}*YX@bL>(~$Ca)vKCnBL9&_q#ZmW%a= zyqqSg>vtem+k3@s-HZj6#BBx>Kq6Kv;46A05SdPE$`zzQM;M?HQaX4!KlEH4W_wSC zYSP8Iyhb-4pG-oS7Dy681kil~qC{ zpCT(`88jwl){4&Cf?lTdza0BP6-IuzCia!+o-vehohxn-+0b`{KlH^pL!JZW?S+kM z&_+>}SuSV_ioGvvIuTr7%&Gc9dy?Rp#Ere-bDgc=NYmUv4SMR7w27J3 zZisW#`Oq^p8e(MdMuDyKm3^o@hXO8V_IbDh)`9pFa>NiV|)B_yxAofvsjy!IZ$7bur@u$Ae+{uVd%jV2I5 zp(9H1v^WZHzl+gEM|ygJUqkPgIalu-7aAX%&S?tQEp+N-hIKOLv_UG{1u-Ej3Nd7} zW{|+O^z0QiWM$HsjxVZWyRlx!Xn1Qyn`)>`F>(8Qi3I*K9uoKgPy$ciCUq@<95ESx zJAIBQ!jJi0#+B+Je@ESZ5l=m&eHga&s73EEo5>M-LxJ*U*!phy4JSHcwIQ@F@p117 zI&eTzL-om^SN7$y7v9(y%h0A`wWug)@^~AHV|a!ADApc>4}}P z>71u5!0PSqiolXE&ff%X+nYuNrVI;+ea|QX!SQeZ430A??ni5RJyzFxlf;|weUP^W zX3j>%AOLa@d7>uWZj@aU%KgjR-zU(Hf%{f+hI)o^y}^GS8Ymd}NGNZ~Y-x4e%WMhK zKi+{hw{6DBHiHT_$2O;q_zgBkZ-WJs1uOk+k_G?n=YKlM;P~h9?nV0T|KNN(&|fD3 z&L~nsn`Hr;WB=WdzjyoJKKR2<%xlhn1yJhUN0V`gP9P zjy!U`=QNe_R4JY4jpAA7$2%&3S1|m8Ib)M`hRhhyosAg-@M|GD6-_ZmJvUv2dy0$- zzn%McCx1G(4LFC%3YF3Wu4c;!TBSl^drjeLW9+x_k>5iHjQ>BnEr!+k`zr+GymT>n z{y7C|8UL#>9i{$zQ1qac)@EzLmX3ef9RJM!aq{1i$WV3DQ8jrGd0pYomlt&Q=27ES_f?mfNFcj_)n zfr4Nv7C>B4Kj3lFiuQk#Qv|pFLtqgo=SX`d2{8DXSA5xuv<;Hd?v;tM?O7IwVtAa^ z5{))?FZApRb|k!<19Ez_n4iEyOXkUQiECQQopL25^lmjap9)1=v5cJtsXQKU)fiVT z01$Q=T5XMy(0+l4W^Kyd91B%3$H9Vhi?CsC?B?9{RmpR~?7&ip>gfUBlg7pdZD3oy zU)1+I>YeP*yOPooKq1(qakz=wQ>yj)38VYo>~@L1Wv*EL{GL`! zD7@agknY}@xq}ZRu1@!o7&I(4$LAKQxmB1Cs&S73o(0^AK<0HK(T^XZ6na9a8=^^L z=TwT!&3}lW{37c}cXQM5KF$}!r(O7gvj+c&rm|(E9=F(?aJF}S{CMKR@h!qPh2!k)5u@JSatL(ecy4%1JPO=eR~`vTYUZPX-z* zhmLbeyq9RuFl2YP?_6+pk$TDO&N+QWgD2(V;yF%pmw7$TTf>dS`wLZI-#5%)cVxtx z>QNLsswgA+$bO8>${K##>bXkP8}*h!ZkZ~>f@wI^6B%!c92(kae&n@FZ_v zDEQzl;YQXXx)PQAwSxjfM-#azDIxlk`aHRCgrtSvIHmkKSKOiSGKB1^DcOx1`zw?U zz|D~+^H+$2@qcDWr@_l!rkI@b9`*SOo?9Lz`Bvz`Z6JP~x!frG)^-}?R<_)Ed7mQx zx<1FCsi1JrtHuXZrx{;6VwMRoG@oWWVozMlO?JDEHSNZ;pNg8_?t)c|6#9;1Pkm2O zSFs?CXlHSxC+&r~^ks!B8S|$wR^SV?c8xA;D z6NS2`6N4N?T*&wQ?ppJE9>zeN&o>rFZZ-HW^(q6x*}vq4ZlN>J+8DY|OzUW}PJJg# z3X6<~qW0fXX7YoKI@#Dgt>VjrhnFeE{s1xV-e6C7_f1utderE6x}jiAk@GKK(fASO z+P>gzx})dZi_TmZ;OYfaxIxuFvFH7$Pnk1!di%YFoti#?T|d0|u=+_q^XIniUWL2z zchSS!hyaql4xm2KIzc>;lw76c^ZRkl+k*t`uV(dbeWO>!x=`oMX$f5ml{ZQ4vSN?! zS?^5Undq%xfLCAP#MeB3HAtzZ)JI?&How&3YQ19J3nO%uUN%Aw9ke#Xe^k|}RL3te zKNNr`_2X~w9k3hcDs2HTRHAZKcvp*bjH>F@H7m@c5quu7Wbju zJ7N)e-8)KWutYu}TVmuqIpNF_YH76y2jKCM#aFz_#`=w~=Vi1RUlb~S27}%<>f^=g zAia8KY8=gsqfXm&PmCvBxf+|p9X}<}4wBO@Ah_R@#(GBi@c~54tmLkd7-`ks&5DBj zMJ0jA-ZofQm34}FS*wKba>qm(Iezm{eF8$wB7ho#i7`0iR$hC zCZ|ppU%Qiaj~_4ZDwR!x!LoGj>t%b1Hfuq~%9hj&=BD>1$iFhoGs3I2U-@GvS_gPZB|5MjV``@&OOCYFcUT(>8j}33BTH<#e1!l?goL!uWA8FK=B&wE zPNw^u_0m7TRH z+b$~BWY9Kt>U5i}BKl-yKmq%wOvQ}$G)C@|#m}`_Z`w+S#uM2g7|F@EGGaIOp1AKC zeQI8cU{NbTl_&Z6Y6OsUFqR7SAw6T3vYi38}Pfv_}@JPU+y z7^t=Co#W`scK6-l-bl3-%A)a%Jr{lXMu-DUk~DQn4MXXzw*3L>-V4-GyE%G_!l5>^ zgC%x3Y1@|W95}JkkS`&GQvGlo3zd`UUaqs-RNY8ImC-=O0%@O^OVkub-SbQKK;l!e z+Jd_DKGq_48&fNW_?it05mqEAml#$TR0=Kd1^N(>!fG{j3P|rjCU<7bIOvR&S`@l_ z@{=(pi20)Gq9Z1#hR}Yi;GSe^NU%Fl`KZ{^F}`x*D8eCEme|nTqE*0&(BID9?t`+8g1d_VK#f_F3Qd zDbt~+g{rJEkqg~!FLN*IES^nEzntFn7Zg}};1}j1bR^s47m;R>uuX~8t$HO7iPy0v za%N^Xk0?gx={C0~IK@)+P72@{ey^@`WsNxQqkGTDn~G7P+OkH%THWR{&L0J+c3Uz@ zIq%UDYF6b>!-E4%ZnzfaWaVzn|BC^vY?iVi8Wva;$8S%onekGaF-`(79d7Bn5( zYeqbe5c^)L#`^eYjQ|?lc%kZt9_!ap%!XnyopsjWqF8+0pFLT7taL6o%=u z6FE?4D}yCge?Duqjm5>x!H7(oDuh zVu1ZZh(Fm&3f%Vt53cDl@(0e*X{A z3iy^nyljZ=imQ=kUB4h#3PFFeNEfP?`^gU^Yo^rkYYmieR}RWa^q+ z$Lr{%&!d7fDvs$ZmTwx5>FUdiB>lr#7x4HRoxVUoQW|kyxOBkQ#ka zLGwL|mVWxeSAqv9cXh#*Q1&}~a{}_hP^NJxR*8w@z523HnJu~hd(v-KYi;U}(Icx)tuE^wWXczk)N{+x-iZo& zNhT%)g5KxVwv2Il{oq4(tYpTkQMT?@9VCFjjHokrCxc`wHBX%GeOA>hB2=!6Z=+T< z5}*({&hJW*esV*Jet;51NNdi>a;;v$bbB<}Ssi^{ooujj#fiVxhQ6Y_rT5%g3G)Iy zv$9Ns_UiFO+hgc3rhzVgp2ZarRE1T)*qg3&F5dU~smTCb8+8j~>=mKdB}U{@Eb>aP zJ!?x6xgEbfebi$h%3c3PnJN{>J>+fF*f)$L_K1&r1enrWW|2>4N>(z6WV+#ATo+3j zn-1^w&%Qp_ijE#wcpFN$1Ar~4>!3)YBi%4EzRkHM<>wxs`*FVKLCRzLWI5&Cvp0{d zrdBEwt;mqqFnIgtnHv9Gwi&lWX72uU1_86#XQl=G9(IpY9*3(3yBI5@%a9G7&2HJq zKR|j@a7%Obz#uce#h0@T{s-ny2=U&!4O@J1Ww?3X!bOR-X~lM(*XsJw6m2zfC4cCC z7ae;TeQxtfqPO8Co+epbP1Q!V6f-;meO2bIqPVvFQcBPUcm=TCmdCRlHkp~r@ zN6|Lt>-tq>eMW&Lx9g&m3j+3u7x-Ra=c9ec0Uru`sU_;ip}dzAVNaAzk2A z*dHKU1>#A^mXLJ}Bo};8DMWWty&aS>h#1=RH}^W;Zi7U3TT|><(V*D+D-rxz@}+iu zg}baE;sKW+y4Z~bW}-d~k2{jCh=5DtZg1#sh-x*;JqkB=<2vt#9DD$YzfM;0yW-kk zc0Pf2qz+uocf_}W{OwbbCO|lZzRo>T*m?D3tCB#=59cnX&i#rN$-9qi7UXRrh_f4C zCZH?{fhCV=VEKaM5)I0}Y0W%ahQx4pi@}m;KbfE^KA=f-2)-ut_MUa7@!PEIt`2Hh zj>6#4TuRhDY^o!&m3KPbs1UJb85Gqu`!Pu^QBOnz5y-6|xbF+gBfc4%>nm8-(FQ8v z$}M*3J;ubZ6?BMPn160gemY*mc^Kp2AxX{Uiai=|(;v(^T{m)|hqpx36Va8<%$6gl z{BT74h;v%#J!#sj&Sh+DCYL@~I|1f#3(`ARz8<-`kwvL-3?C&JG{~vsMYIe$P9iOM ztOG73X4Z|nuC@3Q@l4w$U%vDail%0!$~tFYlQG|=P6BEi+ze4EjSHl0-t~EP$)VBR z2ls8-rR`e^(KdQ_ve}WRl3o@}QNpNQat$2eZ^eR<+Sn6W*eaVX$)R9cnD@2JOJk8RY+JISzw57x?|z1ii5h1klKC) zt&1ZDj2hBCNuCwr^~5#MWXwBJvim&Cd!}BvVeVsNI7vmddRwqsFagdB#u-thD1w<3 z?YZ7k$%uZf9VnRLxh=bAWM_t!}!*-WEtpnG@>D9`d$wx?GU= zrf(}}yK}4Bqr@cKV6yaA*}i6MAYJ^=dQLdM@-+xg#|j>In7@+Z9$}zq$*t!Q`vk(ZED9%@?A8IO-*lY zqG;dM_OpH9En!U213j@8(4?#}|DO8wfbnhB3vUin6UK1-P8@n17ce3EO^Ea1_z~VY z81woBJGmNqV|{e2;CGVKA@QIhXq56H8149(>q( z=-VjlUivNgXQ&k1n%2Z|M!`Y4B5Rj_n_ndN@%R3wMSpyerKue-RxlfogGJ9)hCb>E z#+|i@{X=_?LF8gS7PzYwz6z+)6JwHkP$c>+nB3z^M;H_0YDsMd` zI+z_IvaK_ozB_z;(%T$WcV7Nl{oHhnntb@qbm}HYloV&9Kx7FRpWYcSPh;jElc^ zmF!*O5C4je`2LnX=cU+^z`|==_=mflnm8-^czyNEx2BVm_GPix@VUl(h*|~$H4V2| zIU){lo@WBO5)nzFRy%7)vn^`yI+P@aFON2)>v1Vs{)UglTqi>(RWH-b={4bKi^dN3 z2|nIiE1Rr8KvCWy@y&j*{AY>U=41Ol3^M7H;B(M<75D}%Z}?`QPFK1v z!Ca`bF7p8w+m-%Sb?RbvBl;H-ev;`(UG~I^I8qS@kOT2zz$jj}=9L80J-UYsZRJj| zq+Z&O)1bDP%VHZ&jeo2)f8Ns)18QQZ?Q=<;X(z*|BYWEmd@6s^_}<@mEa6<{q;)2`9xutRApw$2mP)4D<{7D3v?Cr4c6cFy+>3 za;^NW(9vH&3ek!~oc9r_`t9k&@?`4%HH|v5;zBabmu4_r_4FW%^I+bD01j$bsguzm>FmNKcr5SEX^@w4!^BysdtIBza*yFr6>>j7%)`>T9!7kRP1DNQ_a&Xh zn~%qQCyNW;4%n*gZ8Z5`Y05W!q`Na_7GNJ;wrA}`ubS3-@ngj$JItLy!zNPxG>Jya zAXiW6i4?%|k{3eZh578clcQ}8%8y{Na|7R-ndu);Vk#Mu==5;(*_eYUOyJ`O@RoRn zn7XSO$iZQ*go!=m2C2?QY}_tw%(aFyoW>(prFSqG)wvuG%w-lKQaP7?sG?_)4mv~{bn=w8$eB9oBmP`d_8%bhwfo14%;uTDBMy{> z|3G7m{|Bn%KjoRwPf?`3Sxksns7$`4)sAmbPlINi8gWQq`ZHab75bCiYrX3%&N}Pa zvGODNaq7z>{d%K%c>2LuP7*;9mHk)DZBVfF^3Keq&PH=^u{#HBkc(WEH_b=RANPy# zVh3C@(yj@a{&qcks^;pE*XQhQRa>9uUi{9j{-qxNeNr+ZjK*Cg7v?{ms%Y4z%jMvM z&+6WM3sYpT5e7*<+VIR>f?p=0tb66}AxFA92%VO|=z`Ts!nuK!Y&v%2VqfN#^A7RMuT@)S)_%d=az;vxo;r3_}6 zGz;-IT{+bs%`5|jIe7bv$n4dNaHtBvgwouHj}TaQ+S|0DaI;J08z>ag#HwfK@}!5> zL$U{gmbvh=2CtVd;lSdwkh zJ1k_nmugT!rRvHEJ(OzvMjT^A59rjeKx&`1AQB41(hD&FG4vr10K9EkdNX zJj&ciFfM~so@=4~9agS#w7z#+jEW0jn;@qW_su@Ti>(%yI?ET;T^?k0jRfx0^o=x& z`?^WVMks=_DUFw{6wpjpa<9?xpV7SQJ!brWfQV(E7CT<1mzFJb`@8!;4}zY14OXd> zi|M@7uQ{Hde6jMu_~}~6EO>Rga;*a&9kO~FFw_nx28GpCuf0DrXA045uZqKKbb2?B zlQMpmBEjd%YMa~27#i$48P4-a?OB2?NnQIyouq}^PM#b5yd&ZU96SINV90Z#%{zlh zll$noTc#_#4|Iust+r77P;uoi^C9U{3nv&r0Lns9q_{15gb;?+jvi8cGl*AbEjmLB z8Jv%j)Eae|aIehI`7B}AE_A#gDft8CF{z|Cc-HxQp(%3lOjcT zQ8{W(`Wi?j$So?_ZBCB(oqA1%Jn5D8iGtz60^Lx%=YGbVp#FNYb3ao&Zj~rqzB-h8 z_XwcE+`CMJp+j!MNeOm_Dt=~JOcQxhri*HO%1^)PsmeDQef74KR!;LH>7X>92U zHVJsmEeCn1KsN6ZLOeHZ>UO5x=qBKUU+k0g(8Q44F^>9|x#vg#2(9}!E&!-o|9G3p z>9lh?PbU;$>V$I3aeqAh+;GeCPx{P%h3%(rfZPc%-(N!7;meR9$6Y|-iZG?XYVyR$ zUL;GGXNobJ610%8aVN-0#F_PUXf0GA;z%uMx8Xha3HPnxpr0dcMkjJV|EvA<dHACPY> z*L>Bj4ixZ@@f7^a72}*=@BH6k{mlFKXp;Z!ik07%!InPW zr+K@e03Ed!>2J_kPhZzyBiyyV8-v5vO}AIP&qbVoWb)uU3CYT+%CFN3Eq9*rbCqrt|W zfkEfgl<+zzg|y6G-kIpjRX~B0i^mV4s_cT7YB{)RE*m|px8~+$ux*bdWg7zi2Yc@w z)zr4NjYm<6H0e!dRKDGCH4B25HDlnznpgd);Hje>Lm0RaUe0@9>JO6U;jBE3fG z1VK6pH9`o#?K!u2&%O71zx)2$c)xM}$Z$K7z4l_Qxz}2A&SyT)8U{AXh4(^R1w2ri zs}l>Xx!xgMU(}b!vK?-x#t~X2Z4?f5nj&UD(v;sji7B~RU8du>UQbJM_=3guwN_p^Xl3&*| z?QM_fsh?}7DVeW&e~zl!HN4@xGIL)YQ$o8y>P)?E08H;Zx5;d6mGSVGj^QUP5`DhB zJJ^$fxI++^zees7Z@`eU0EY6VVQ^dL4!&Kz5>q`Sxz#a%r;mDln>t=kih70cFCq=u#_wo`t*1-H)Y+xO>06NHl`TLHdfaihk~zo3VmYUEea&N;c2y)L zK)zB{-kumy`MCFar7z(G&@`BXG7O*x0eGveWtu>Xj<<6_-nc`JIj6Tmc54PB+mtpp zqcZKW;3s+_RXVD(&=^noItQhpk!-SmNin8k;+h*&Rn>e#iY;-d&kmW{oaDtSU}HpWbedl zr@P+#0JyH*;4VAzKcV{nZ*fBY^U`K}z?&u>$eng&QYv=w&Q zJcNtRMJ>TyN<2}uTtfpdM!qZSIUdj*yvEvqsQ`%*r9x6}Tcx*Lx)71EEh87f$(<{u z;qH@T#upKl!~BXT^rLi)5`42SA;_qhNg1>E0K8f`g9=GP(L?wMVb=$?i)b3<(19dxC>7ggoLtdcG^0^!+bw^$MY@JR1Tn=QVsVGylplcY(-^XqtH7MyVUVujq7 zIq(vXUXPA%Wo)1<Cd#8UV231JMAyIe;S|` zut^S;<)a>OE+XsY>J_|8PDa_8@hgnathw?ev#9G$Gz#IWp{x3YT^&*hp|+*QIvE!T z?yD09hmf^TB^B{?Fhuru30~KG1v(wXY`W%w95b5fNg$3{)DE^~<@!Tv2;Ty^`-?M6 zV({y_q2Sk|a_(zdN8C3B?an??<{~u`MBBjBx{01e6N{!jam7uW4k>M6UXmXBnCCN1 zH;M+!w@mM=^q|?tY1^r?@MM@?W+~E)P}v{7_tey#0Yvk#f5yhjHD$?khHjh zPuC7L2qN$YPM&;*Rn*5){M;YK(SABA$oo>FWvfGWHc;u{dBa7Lpq7s9=XDjLP0i8^ z`{b9s49Ytx;=D!cn)N^UhcRNBnhpIy9uXnP9nTNetM1?r)Tf2s-eL;`k8RG|;xZ zYI|HbwL9@uB6I9@-^WKZnx{UHDKrGTRtr0P-5yg}z)UP%uaC29))FP4C$>NWr&b%P z^o&hl#pO7YSn~?>VeE5-uxG0n(pov~cGLtPU_NU&`>=&vUG$9 zh@TR0jgvjVk0T7+-Omn{*{Cc3PpCIrKU${?>7;ji9kzH+StacuJcT|VUxh+yE%_W#*;=dKnh zNmG<@3vh|@Ei7pdmXX7-H1cyT@9T>G+X}vzTJ#%Mnlz!)`=%6`|T}qC`O9do_vgG@)yqGMQ zh1kWzp4Um?btIa#v6T(MCKc7u$7}=SIJ{ETQ9_u)a3dm|vz^{j|F!~?!+ zlC=-i`aR92r)(a1N=nI^nK-L=624~}%;p@RzCnM_RaN>~@5~!qA0XH#47U`(xdd{N zsMnlnnl1UpsbrE}XQ_gFoV`&(G@J)c@cWvh#~TxCAnk}E*SgI~lF z5=ps~VAEs@buR$-8>|=TU59v)ZXKnXm^4ZCb)vx5KQLr{jO(IE&6)HSpMF(8IT zVkhNU8jNxPa0GBz!hw(lEE2gOn~$7!0*FB^B+0^-fCv9}B>NEb6o~v0JuGAGcF`M5 zw>p0SV2LN4hoA%{Q3}uCZ1Mq}0`_1JM!676veS!!Z3zLP%H2gI>HVfF>1N%%Ly$_E z-XVxe6zJ>%5N0W8g>CTybr5n$ibPcZ3T2z3^7p>J1Hg#?d1t}@I0XH^N~lTfCwXbf z?_m@wNy@D)^dEW#ok>%cNA@KEA(tuO55yOABWJ{jdI!`PNirh}sF(+$I#~8YP#^rx zA?PDef<~&5)F|7>{h$%CAp^jfk2Z&(j`YMo4x`2&<_b*~4m|%4gNST0!lU*W9bqIs zC=iKITi8MR9)eDP>%yjkNetK@(gWB(bS>{^29h)fP%-JE4?%%|n;MCh1%?sb3jNzK z#*%K54S;bj0w$O0r%^2YZUm=ZCvP?%f{p+;iTE1*W9Ptx9@Hu9g4Qq)_5-|J;=TDl z7*hWqO@b@y>%lTPIN>q{ftRB0^Pl^c^^Yb|hx@02g#P15XKwjH>ya-W+roO8 z$<#3N>qXcfdUp4p?AHiL%l_j)0&&YfjP$=SSFwNW+dr8r?4O45599n#=K9}ywf?l$ zKdtpoYyER={dK$jb8Y=|ZT<5k@aIY3f9|%P{lA~ESN-{ksd%nn%++=A?bOcBTTk7se5A+C z%&!M-C}VfDZ>MknA)GyU~Wr z%|!ZuD`us^cPpQGgqusutE}){MPC38y0fc+p_z{!B}6TF&A73&=ttYH4EL1S1IVWw z`(N_0-R9lD>m%Il{8i)pe_s~igkx9k<9O!0t1=m{jvhHJP$guWss_@T|GYY{Sax-x zH3H)IT_#71?pQ4=lSUUpmUYh{zy71w{5Kcq6-zxR%yh{E%7=(;P6^D;wa3xBq?AML zYLYt*-!xCK8XoUAtGXj?o(+ICG9&-0e*16#)gM9KI>j4s2_R*7@w?>a5oN%a00Z8F zxfSJJFBYiCUXVos5tO}IK%gKH@R!T`_*1rW4cM|F!>{8;L@>L8dnsduI(BOs+cHu` zJ+U*aVWj+-<4R1G51|_u1_Q-e1J5A}QF{!QhoFU#eC3nK4nqR+AnYP^%W(+FiTsvJ zLQ|T#uzT_a8e}kP!Dng{@E|IoJG0BMFR3#cPspAUSb*>5t4e`hb_WCJh>@VbrjSLO zq3(07AL@^(8Nn6pO~@l8PG|ZS<&&ksTBy4Ynbl<#d}kkUAG?{~?>jvU!nG^Yk)F;< zhMDG%)N#G<&7P=P@rpWbty^os&GBHH9WjQddERh#Da(|YQ=pvhRZzlfemojl6aMx> z?AzklqC0z)C3CyA>5@Al4-P61GFA^k?yjNhm?Gz*02fy>7wJL1zYP%Fo(fI5n@NZ1 zYNMbQKJb<&_jNu`KWv_Zw*1 z)jk3(njRd9@Ri7n?#(aKZ-R7y&%>d|un(Q7EmD#j6^;8NSafy_H?pZ}u8dw%0f^=e zb_5S%l;sfDck~!Z3i9 z#=OKI94W0dx{NH)ibI@uRtv7Te7z4fRm&y83`&ER#JPG?K4gmEDv# zbdD*CiB^c$eUq?g=Xrp%Ks+KvmcGvtU8_ZPthdF6@}e41k(Poan}VAXqJ6HWC|z6J3iTyrk; zzl%>7H1S#)M|7ael%#`6vHQ}9^_i&LV5qlBrJsQN1g6@8Qwr1U|{(m`1zxW=Sb3HQ`u1kE z*L09DS)T!{=3j|M;pG#7?RPOmXs|eT=3cZMWl%jq?}HZ2sLYsy2&>uyKh_!JPZ{qT zPk$pEA!XLMWa6-2qa5VxCdyXuqS7w>b#*Si719={Uvd1u(MhD{ID`#r=1W0nlqWy_9^;^>=)SC zVGsQR6S6xN6abJb312Ri(zsKYd))Yb@Pf*MV|U2Q(ZuZrlyj`ylKo7q+s7%v<2*{C zI=)8LIrAWbKjj=+~tE|7(Y$&J0-O9Iry=PUq!*y2MrkC7O=r;zROx1T^fJ4(yj zmF>ur4Lr+%=W&4&h_HJl$t^G%389LC`>bu>@5Jn|@AF(|?h&68ikFVWHwd={N=vpL zf~ZM;MguPXI)!5hgS#OT7(TdlweeZQ>hm(iCGpSVo4wRPfp#Q=8Jb9c*bFlVqN%wv z6inA_C)--Me0JPid@GZioH!Qxr5neom`jliEmm+ZNE4EnR?v?vo|}7JxTJl4;1zBO^bS6cb?F6wPL)b zb&{@#JbX)P+zPZ#mAD?6fRAmXs{@GpN8ybW>52O|Z})cI?D1&slY{Dl=8 z8+A_mk(}b`_EZ}e7xrpCChJ&voQ{{iaP$5PLG^lbxp5Ajxu+lVV$$+1qNz-Kgd!j~ zRkk%_Vp^Bfi>lM#h_Gs92^?9Y*wo*zzMME8Tu4@`CHc8uc}AADx@fzrU7$dVou;5 zR`vdhl|1>6JTgZ}vm$AEt@mX$%Bwi-&bTn>o_VN9CsmGe!Xb%PGhUU1u-4!v-h*z; zM1M&cc2k_5n_TF0eKhE(4;)%u;1u9+9J3x^gW>!^ORa5^-tcwW zb-Sp`+N@cjRuyVYH#$)3YK0T}7U)eGO$iCjCFZ+$EWdIAmd|H?DtedcIPZ>ENKx~> zh`gCObscRy0MxQjo_B$O`oqPj}f zP%^3IR(k?KWSzF>DFC{>gz7p3nZiiw9^fB@FaZ7oa{#s+r6kO(&V?O5PC`#Yp2@hj zCxaVf-$AgObNE&9v!Le5Y8Z$FpAjj+FC(07hddSeqUbw#2R7JaG=)Rxk9Or+1z|6* z$}@lXGP#GjAUAPXuSIRqthV+AR) z+ZL5U9w>GaytzUSSC%`vD*JjXe3I5sJ?U#=ynGt<_si#$dYGvq6Vyqf@63~&)i+iu zP+6m}CBwc~f-lXdN;d9C&s(d}gS+N>+&^Y-YbnLKhM#YRI*6oT16KomeNlquB&bT- zi9%}5mHv`rfi!39%FO#EWVF#|4H~Y@%S%0JCTsZab>c;zt@`ueBeu-whp`nK8Rd zhKlajMrv!`S^RuWLV}eu@#U%_M~q%~`$&nCi%nU5WzDk?#5==dPnyvg$G|N{ zSlGn!Wk-W|M(Ygv7MgK4UNlz7?%%RMIxiiYxVb%F=YP+qF`ExQen2JMY5&klA@NOl zMdXC<1m^4Fg8vVSV^%haLsE~&dMtFksIWQei9z4Zqah_b$fS@J(cv`{=yTJ6>s9r#urQ3 zYcTODm#6u&XA@3n(&P!scCbCsdn-~e)>4^t+hS=H9mf$pSzN33Ogic*-D8I0uB*4Z zca4N1H&s8MRG1$0JF?s$N78qjMzbJ{nkyBu>s!*#50)QXm*+S^%Xv`o{&GUn`SBRc zF!?%((S15tF7|$lmxr5DPTbeOF}cH3Na&qH90Xe6 zFW(QLE3)_I6-dpnCpb#VML!4-t|L~i_vcnu_`H0(!bgSio)jX@PKOaKLQ7_le2csR z-(YO6vai;QowMu8BYWT+5q3%3P1R4Q&fPrOImC4S$OiNo)cOz<({PbkgE;DXVo5PlhTao)70n>B7Igu5F7xc<8 z7I5J6C~2?03(`9a(6JpOB{ZVnk}qPS@RYb2Ly~p@tfH2ARN~`svw7iiK<*DWJTWKY zmT>~ygC-J0LN-rPQ!XMZe}c!8n*~@#WOYQ{bH|E`_*W}$e2!_bm0L6PJZ2}aB=#nu zF;F5@>9K2+`-db6tGXAi>GorH9cPs-l-(oCRh=sZt&iccG%l(^SKD|#Mf$N zUecyA9;4UHw7%+`FcGm9daXyL-4{gu{=eD{a)WPWrX0QbcmG!I7ymX`6!32+|A3o% zt0=Unmm_-9tw5T`I0ZKz`x7`Ni>d|>^|e(hz@C9O?$v<-k?Kz716~Zc74_phMeGpt zp>>@Si6T-pOR(MPTbr#7_MUhc_R>R8)Y?0&=C86NJsG@NqBU z9tlTKwWv=TnN=Z9kU2BfB>bx%+Fx8f8Setgx~i;s>PcjG%<$^eiH6Jm!ezsC&}lIB zsN+I|SPXt=68}xGk*%edS3@SXG!~lFCJg!p$VMDrLSppDY-Waa+RFt{_IFXI9+i%b zE^!h&88iir=QN8stYhtY43AwgNcrxsw(l6&B)}34(FTwzzB?Fvw1Rzcd2X6WiKc}3 z*Gb9A4n_87(k0e+6`!_=g~pgX%QhG@$az^iW^k@Am&aXQ0Ywi8+NjyYxQ_0(i%7r7 zX=PF}oRB6j<1ZiK78IPUbqxnFB9!xpWiwJRK7vz6&!R4VZPt!9yXx*WWC;6lfu>q$ z&?GIPHxk3>XF;s4MlvI`HBlzm$}%^O*1quf8b>u%zRoLx%#J;M<8ING8@VbFoX*Uj zFIOzL%FSQWJ_ozk4vcl^6jvQ{Asox>K?mV0COzKN)s9lfCf_ctEgdT69JZb~w<(x( zo?qK)&PMcTHIkdsyBGEh)#_D3%DOQkLFR(*q}eh;dJaK$Rvt+OOuNzd-d&str#W%t z*!&Y^f0nkZv{_h?CpquS8*)LfB@NVcui)dtI!76F0KzE3ux zX5DJei6()!VU8c|Gw*aUxnPREA%yGb(ThXF?JnhBqiMAps%_z}Z)(|;s@!`tD*(5u)s-brk z%`t=+;s6%d;|u{ituYqQUC`Z-}~a= z8ylWvY+Fyhe&Edl-p9c3%8jZZGNuNht( zyaK3P=+x!5mI1=S@At!{LiA%^QAI+k_Es&c7Zh;)DN`$B_#(Du@0!}BJ&U%Y?8U_b zM_vXI*Ge-JO)5H`6e;@4`3#?mO;n0vpI~Vq@lygg%hjXmRYT;mRSCly1xxkuchhU zaM6xLFeomo$*h~*+dzT2AtT$k4Z)bcJ&!#_K9fP>!s`HLTc^m@{NQ*_>SdvL9%H5M zH_}?0S41Vg#j3P|JkmuE@+b<3&ZcB#Mj}l_%B*ff5TDt6%)lsp?ZWByWd7lC{fnEK z(~s6v+U3!xTW$$encs^aNs|i}U7uO96P%}-!Q7;&mO$28V#r!t{vxMgl3}tDXIIH& zL|1WOPjPqbMNjh+D`c~MSqCH2p|T4X|Ke<8naiiXxSB z&&1>d_c<#tG7?1O6^9T+R$X0 z=kr1<6}+iGNP+m+GY*u&KUuLUnU)O0O? zXEsKA*$(5wL-iq2m+t|ERl^M?JQC6X&{s=z!mG3NzsR@GnGF`>eO`4{$gY2{@dMvq z0JD-UW(xQMpxV_c97X-LQQgmPHh%TGJXiM8^Qz4PT!kV|!tT54;hYy?1Ns)gkD_S1Vz-MY>0o*UNWv z=i1gg8xEKY$MDdIkdZiVmyr>4hIzN=!wLfJz?HP-s!^sB){p8z_}pN8SY##+<9bqe zq%s~J?0kS3F70+uc+O!!|LEv_=k^J79CAh&cL@5v=h}q~IYX4FL(ctn2{sG(f-D%S zn2U9;TmP}V6d;Ia1W-FIDQ{}p-ks61K2hsDqj@I!cmpcQ)4}J7aSWv>L_K)~@lr%Xyt^h7c_B+>_DOFR0pl3e% z9g!`c>x~R=cJC-h9lWLN0?zA-VJQVOy$2%)p!;xjfqh87kB6WgF%zUIA>j7}3z~(j zjxdqjf3A#7RcOt~GvzH)VwL-=4_7cJ@kfUp1VNoGrcgqGpRVC3yb z4(D=ej|fZXToM>sx^=uGOC&xL!gK{n`7UKR>$n^poH??npj0Ao|8mRJ)F9!bm z49I(EhMe$y4B+cMqYerqF5fAxITC z6TD7709c(X1)SB`jpUd9)_vdHCfD!^EVE~t>ONdYp(hyaFu15tAJqA+LpHnZvQ+|& zb@<22thArz>xv^mdv1Xe{&ECZ*c1?SKT&S+@T#nZfo{VH8dLDfx;AA@H_a|);CP6k z%$?bbtMM%-dIu;{h@T8=T0{Q&?_k|CQ{jgoN0XV-^mFU0$CBaR^jS6Kw?2KQI(kXX z|GOF}AeC!XJBMUQnDmz#!0>aLNzxdTVA}EXc)p0U@jYAPud~lw^Gu{OynUooU|2bJ z{}w{}7G-jGMAlxS~(pzh09&>>eMq&F%9b+ZI0Me5Lvt; zGuVNb^184aj(_b`?6HWt!)25-xVX^4HEQ!(FXcJkJbfiUSLBbBNYE}g$aFH+Su&D* zzSyGGiY8)p&L3Uy&#~uo8NZN)+oXvu=Eh^88q`Em~)Hq;jRJU9rPil zrr-5UsN&cS=MKh?iN?{n(F>0a8{j~ZUwSF2ozQGNP)rt|)uWjhUAP3C!$$X%D#O;| zCsxhu4TDq_s^U&DzYgV-KU-RdB!2aG&wwkq4UB%Cy^V9)*1l6p6G;z0=l^QPDY}c) zDBiaTQ`El(wk8ekye%V!g}9!1iOAuH>kkSJ=9KH)*Ld5u5G0o--VYg>%zE{@!nO`J z^S#w15R9-g9oSkBrVL=Q1Cpx}al?102Sqo-@B1jWQ-Pxq+w4cSV`H)Q2ZF8L_*8Mp z<_!m4-IBMh?-nbhZiXt#rw}EJb6k`k$TU`+dRnO@Muksqkqnw*DR!;9U2`S!B3ax0 zfx|Hyw9}ZL$*TD5Qr z#V|o)KY5ND0(RW+1q`EJawiL;cWjYY_dP_PsVHNSMl*1jJ(*}r)RT21y!zMT;x_S*K*l}m<@b09B#gC<}UB|{AoU&t22fu~5`2AW%% zGUu&QO|dnv4Hfh8r^~+)gRCsxo{EPzHHeZ@rrMw<>s0V?2q06wXdSHN|JEyme3#0c zpBUuXkkK+XQ`t z=uZTv4VyjvF{ybf{TzB&l9|$rq=oPiRcEe5*z~Q<50JI+eD$o$*Q;?(vY!U<6I9JI z$#Ny-7jvQYm5|{6f}RGjKP!oas0?FwR8U40Ix1w6V&7IA6Nkz_`5r~0xwgJS^yw?qu)UHKa1B!)=B`>0pPBiXHo9` zg+ju*{{78pKZ90+AulPz(o%ut}Z91C@zcht|+1r`-t$t*AQO#2~SY*DrurXn}_~uI? zYvHV{D36A1QGmB;PKwu3Y(`ikHq806za^muI$Bu^L~>LBlMRt3>{23kL!s-fQvjz2 z4Dzi%;oj;4augAWMDOAjq8+&{d_TJ{HJ+VoE&>qW$BNP;gKfc;WB_GGE}#)s6tV>X+Xgfp{?HaW9iZ#a z8g2f;HA{K0eah(ISSJ7h4?6^%4PXSeeY=_U1CDhDiL~r2u+yBSb8hn5=S}dIT8!Yxm*pM4+ zi%pVD4JJoyT_K-Gg<-dh>ZAY!y99uyPl5iiFUqu1v#%B@)btqA>=oLBr4D7JX&k z{@q=g#h921V{Z=SLHoPTz4Ddj~8gtR+qCcHPjb2a3)I z$NPGusFLK{-moydRNzD)6EKA zznPm$v6WbxTxm(TYY!lW|BHCpZ{I`Z**{B1R_1X6@L>{cZw|as$hkkeY&MD|`=bvY z$Nn&+3LtLhFVWa48Z1c-ypy%H5@R#jk2}zD9uX<~i7MtE`L1LN9ffW!!hypfc5gdP z&DJFAAnOpMn}pq6J_MmPc47|{Oo2*GG^O57{~GTvKi)zDr@6sw^ugXCXnDkw{m7p; z{(U6>=MD}aeyFjpK}i!wt^@IS%h*-sJr4}vYQYYCGdZ(a60UJ#%bCf0f3XShC=Dgx zFF!2^kCtgu1DQ~OLu;-!Y=8R@gvA72i)})h`r4ga7;7w*Upu--!#R9m+GGfYsP<0|Max_2;()#NBHs09F{A2;TZh zbSC~&ARP18B8}fx**i4W3U@Il7w>o#F|--}zMTH0NW*mzNJ4zqIzcb+gcW(>fWD4& zZ~v12af02`-u7B%Rs^b5S#I#bNb$pd*E?-f>L041wN4x&4xkP}$n@4MH2oR%alPxb z(CEOhB`_-xSz{ihX>6cQm`$%llT=%kPYlfTOPbvpq)fRM8k?dfR_?2WUcXGIblG>B zw>!x@j6%0RV;0Lz!nfhtMt1g?P%~r5lL!~Tu~$XkdPbFu(2&ssD>0<=Gv}hik zyJF`&I~4?F^2AcXNJt%`0NOkM>k`*q4*Hwfl6$k1HjwtJq_L%nj=X$H$K!S&Zi>#| z2oM~OCuL6E>x0k~BhEwE-s!-dD!nU`020l|CJz`c!;&u0wW}^$s(KS^XA*ORm1z+M zx9YJ#9wo#RJu&Hcr^B{?et7LhT%DDWbh(wVhANO)jv&OY1P~2cO5xG(Cl)N(%lkZ4 zGxdD%{Aw4A=7&_;zfL<{dDXH@b!xi^%tUF0a&LF5w)%Rmj0yxzGE_%0nmWVu&CC!Z z52{5>ZoagS+~9-kaBR<`_U-*IjBvFn^Hmd>@@K@%u8A+YsPJ_eMuG1wHSu37GTe@Z zaME6W_lfjT6l7bCqNlV?aeE#ZwT`+JdmvA=PDi~g9bU)mZX;D=PHP z)y7ksuxsOF?}JpzMUvxG6N-Hsb`s$U5u4S~Yw=YZNzDx?bd>WRlu5rEZp>}-oiA3e z2LsXBHz3oI)@_Ja8etq}=7jVxypFr>NV$%xPPy5B2(Pu+(N=fPX?o2(zI;%6HT#hc z@`Hotvd2kJXTU%_jp<^cN5l+)zZi=zQa=Rgx4nj6{`Xj#+8HC^+ zHD0^60!cc5vnV|PoW0#k1K*=W=i67V%Ax$7#G^EX3|cV}k+)n_W4<0UssZ3oWR^il z0Dp4W8m1O{0_Lw!MhJE+Ta2@SIaGQ{LtcE|Nm!4ZlZ&gnpD+5f_3;iCGu3P%jmL&b zZZmT(Q_l7ILua6@i_u8sFo&GhgN(wl@L4l$`m3|{Gs5aSajEI*@}FovPl69(DI&`h znt?h;PblM}E1ppyz)Y=wTggySNAFH)WzUcM5pB(H{NML*?-_kAEPQ@1l=iCNxX}`G zmcX_5ijdo-yIV^_WCoOJIec?U>D+yFqb?F^d)pa+UzDpv_)F02BwWwF=Dxx z5(XOf6>Yn#7h|(kg){gI>Uq8SFC?~xQ)QpY@mcwh_}-}sUjwjeR~H9bH@>wwalY$( z`Trwn6T_rrAf651`p2yVs3a_6`1A{j`roLCUjLF4ANt?kM`)dkid`iH%gZ9Zr`yt< za?7{#QaYOVEdkh=20eK==i*0fIsM03_*iIrlmnG55#Q^*r>JA5A}K6Rt8Hk<$GTFR zM*RvlxMuBr$p}MVwV3Rjx_C2@3^$*EQ$&c4UzpVUwh*_DZve7r7S6{vp}Qdt)eX{4 zef>p9|3+=vmn{%ePDTn(QI4PAGyA!SNQFzyV&@x=d7Z{BG@xggkJ&4qCT#8L2GzJ# z;>4{6Woe!96_NO_FOs@Y4smN`xUMf%kW+@1ank`}w+FW1?S#ODyv3TAd(}8h)EoLJ zmdRGcV^{rE^r9laZB3{yHO^l&Ktv)qzt)sZZ(zlI7lS^q@zk=aaG)^=M>3 z<-hK&|L*!XLE3A21wXS7W&%cC;ci-i zs#N0d>4%Et-`x}jxO;jwC_Px_NJ6Ba9MkahiBRKovqO+a{~UH#Z%zk@c)wuUnA*?X z$m&F{p+2VqaeI*BZ=tjaW`*v2Fs^cQWW z`k8?*I(M2cMx;kU?7oK_yt3-U4TG7>iL=blCYgqch4+=yGF6fA_m*)lF+n3%BF0+` z`cKrLh;*?=NC0vDCQ5C%PIQ|8xW^cyR$#9i()-cwmE@BJ*8bRw`k{i5^MWHU29zN~ z4^F3x#Z^ad1R7Y_W}K5RzCKr~LnWPZg|e9A^Yib#Q=RjF^pxg5tV}Wp>2}D8_LvQE zbhvDeuaqMH-GGaFSH!Su81NS(bJLya(AFmA?N~mgspk^DTnsO zFmSd=p{c{l`P=;$ zD#wBpSQ@k3-8+8NY~q%ewbVe6&NE}lR%L5*v7K96WHI;KMCHo&4yImFevd4BZ${%W z&q1|!)W<)@1$~81cHjR6eZ&uJdIC%ijtXAx+iz+9tL*)4UwxIuYit1YXzQtz%3_+I{m+mEQ1Hf23zBl%%C=Eiaf2(oo|VASpKa zw#U@n%SI?R6ANo%N<8_qYf75dUrcikeBaI5Ff`>53%7knkM@JhDr&3h1aztx*~F*Exxqa<6}V4{%Wy#VAsSMv-%8{T=n z6(wN)j#sj|{=#<)`{wqYsHk!Qi*hgGr_Oop`Ahe+px(g#)}|~$<|Ixv>VbO+V{Kj~ z6=e*UdNNz1y9_iG;&Vjq9shA$m*yDnrh`n8A)8B?iFum~5TP80u%1tS6Syw6x!K;C zau84QEAm$))z0=lL9&tA@~0-I5PGfBBs)Xc$@ZMT*V;dQ3*4vBILo7=~KL; zWkX~;{`N4BshCNT{yMEfM=*CeJ?dzyl^@(ssUelWGax^c^M~9{5z7r0ipwrZ~hXXNW4nBjN*Jia`g})M)}{WZon$IhC9iKrKSm4 zt*r0VmM1Aj$=+|$e6cI^9VjEbgXlrDo8!t6->1PXfaVr6M3ku5G7_hjN%}08pexnU zU<0B)YW;EJ>rkkELY!qZkw&#IP$Ce=)d21v)av)>1sGSaio(Ud%n#mIKRuzv-(hTZ zKE%E1La`plPI4=AIO>?PBFPGm0$h@%nm1Q!ZWxXhhss*Psb7P4j*4e#mhfXAx#-B{Hs zN(XMulgoIkVD5EyUQI>x@QJeNk{3bJi`T%fEZIr-X2D!!wWt}3=sK^4Gx76q^`H&C z^MWZL?Scv>sq!7!rpYhnUmUOSns?UVC%r3eV&}W!O0IM9`<(K{eMKE}#TXxgoZ)8c ze3M^AvP5bFU0sq816`eGtHw*$Hd>tH%GcV&h8q~jLRF+I`)Z36Ia1T;F;nGizkH2% z;~GT{yN)T(n$$7g8}Cv(euTHgOAI>!ws^(GW8&uLIj41J3Gp>Pz6U8>F{-sWEKjV` z$K7>n1~6u3T17j_6?#t@U z#>1ZbdTdLaXb6*dcCDP@4C}Dy1!9sA+Wg1>AA)RFNTQl4s%-6z^p(gjP$Nq1l2V%B zIyd=lSHwduVOju`_c!s~E1|}fAm4{iploYfs~UQV_p#+wn8c4ZT6jd-(}n9bK`JY1 zIug-^V?EAxgKPL#>NZkZu4k*BKZZHn_IgS-Zm$nqA_cby&|-!uCzrq+vSL26aAq#} z?V|Q@Og+@Hrrc-co!lLZUfTk8FQ5RMrKU~AnDqU_k4B2HzZ1!fNHqgg^Q`jV*O?JX zlgllkx353HO*7|EQDx>?Yya+~BD=}W zOVO_$-<6Y#r@77K$h#l4)A?brfdkpZzb}OdT$Ct+9EW@7IZCTF^}dH2$b41WibvWqoXkxN0G+&iDxk&54lP{Hw*Ei9ngH$)w#3ib}tQI&^9+j|Gk;Rri0gR zC5y@U$w9Msg&#gOXIRs~S=Pjk&L4svL2zO_Binh_wW9SP^V;f(bodFo4nX@{RzKwl zcU$Uzh%qymwdgs1xzG$*1S!PzlQYfmI7V;YvO)A9A_zcz+XTd5zm_5wu48pq-@*&Ri(Wh#sCg?i zZ4(1XGZb9R(EH*p6Wd6dy4+gWJ&=1xOQC8aymlc=?v$>Yl?`0SC+(v6HDz1; zScB!Oye*vLc#7}-<5Kq;cHC0N}Ym8SV6Omt8#(W`!U6=^D#Y}y&|0EQnW`b zvQBZx4kO%E2@+ZPjvzA!*9VLXgW-?TU6YTUxz##(cT^}r=(3oU^3a^+%X{NcWs% zz29%whA}&i8a;ECwJ+a%-~_Oob^*vBdv&BRSc2&*Xxx3H%u2|%t`i@U9&J}>nv>wn z|0dQk+LK*Jpix3k@u3d~9rx$Zg4{bVzjt&@m2^CBn$3IAfH|cNpI8=KN?0G**(`%f zAsvukH)klx(~7ZN2yLBM&Dz0qsf&*|H*#WBD-$0+`Z#;cXwEj<_1i6@KHOUDDi{DS z)$I5_WIo^)12Cm6Ao|?)d^GqeM1(G1WB-8+bb;k8C zd+mMpe$KO==k0kllYAya`OIYQ-+f=#_d3v40mz~U3?X_zN44RUHUB?e6`iu~T|edh zhn&6QujF9sN-v-Ri#uIZzpr`E+ecah0Kpsm@i!1arhskkg50f>W(Sp_BbYSs_-%%0 zx$+Mr+1)=tx3s8{=>zjvSymkDIT4WYD}F}2Bv9pT;HMux5c|@;KG~=_l3(Hj5!3Nj z{>PF9macs2_bU7ZIv_O9;<4+P%}I)8fT%%XN{S!IVV?Cl?5$v=!`IG-f#y+X(@3uR zl0G(78p3UC{>AM04ngE>{~) zb1~Y%dDmeCBRhrC7Umh^d{mymuqrq%eRL(M2|JE{&;pp_;z$SP>-WH1o~p;gGz1C?E#@t? zX$NY%&)LR%awbMW1dm+tZIuM6R(wJ6nz@O~R6y-It#u6FnR#~9qQF@G zRrJ%Ey_d|d;?@w>XA<}}RB;VjloYLGm6$%2i5lLXBlA92(Q9)n?&BL2iTDsDm(a%l zCX7}+$;G<{tZhrt+DNTP=Cqly_9Yh3&6dwgGN`Dt!uL+ne2c^?lGb=v zRTjggL|^4=*4mv0nibC&2d1Rw$C-G4C5S5~5wRys{{*Zx7*vow+GAj|1!0_(6j=qm z#v!g5r~50=dZ-*)q3?_Rz@{Nw*o=Ci;RV*%JgS-B2w}SrQjKlcgevJ`f2x$5=;7xMs;Mz(t~;yS@Fxo;L(2UkbsQ9>0BT{MDsn^HIHdqq^+LV>S@5^4{sl4G9}n5qnmT<#b!Y%lv7OGzlV@H_$7Id$C819y)r z^R8SBgIN&1t(wSJC{Z&Tam!pJ8|2|^=g*ktpm@RT1bSw^?Jpos;RDhoa6<4EJe>wM za-a;8Og%sE!s=M(P;OZ6I$PiL8ayxBbM;_|@6tER?=2R3JgIZFy`Ib`@%>;Xsb^e7 zkb1zb`$a4pC9Ehf9cb<1FaxBhiHdx{Fkc~5a7w1UQsXo%zxck$>b)4F(A29aPPP%y z(Ny42l5E(J`f$XFTmh@=v>%nY6+gDD#kn6d20y~h zTQ{kgTza?u{iO;&z6iw?ceF@@;CI3?sbhm{f+}6I-UrOvo%ZTYidH1vqEPwLoUNrG?-UKQQuan1Jekf*2EJEstdEb6*16q&j$AD{8PeuzsOZt&+1 z(mk_S z2av{?U#fqm1^pM}&K*FEK!5sbmMW}}`YqY< z^u|qUlfxpzj!q+;fV@h_A==+zd2PFq9dgZhHym9rQmHZdM-c4=TOHT&DBB9S>@m8T zRfzc1FZt;7JhcJBDOrjiyJ~QlrlOzh*dVP(&s?7mgv0&$?5S4mTe2Jc(#0z7dsaEz_Ws1g^8 zP*&tD-=6ng<@8F{-N4HUw}%@*&+y^{0A?!?T`4=zLDP0dQdelOIx`=kOJV#ZVf)2b zs9@OD(t2u!O&}B8AvsA(F|T$rz~|J}cUqkx&Sp?Bs}}O)5$dFy`3U|I;e-{|!7&Yp zlJ;_4b*H7Kf+D|xon=`g5cKuR+{_gO*n-TWBBm!ZSj}M!+ znWB2df0&TwS^w)px3PH9M0Oh4a4(`skp)f{`%j_Jd|Z9mi3hCyYIzx#QKjTGya zyxfza2g%+R1liR!R!Ka1;@cl&jvAghLeBN)(zNG29z{GwZFVwRKm)A}1S~s8-34De zlIc}EH@io{XmMez-u>xFwa%;oZT-%@q5&d)k9DA|bO!HX(C+f>G^Xwyrtf*oI%@`4 zl+}#wZLk#49txB|bM;_b9fVa=jr3UWV4FNNq_e_n%`#q$w{;lE^9<RyJbYAKxy zujeJGl3uXk{rZsCGkX*ws`1uFh>PCI-NF!w?ox|yHxMr#sF{%lB!zO_2c2*^A8>e$ zx3ih&k}5+t!4QHK-h3(V+Ir@Qc<+MSy@se2q$pkAQP!);=hAWuJ!vny-hSMt-!Xp6 zjf>kK;3!mrhjzqnfT3H+?Ug>})| zJN{f~B96nX{kPw500M)k`;*$rhmWBm{)q-+uB<{tzshm|!{pz#0jCPgE=_npB%SQ6 z8}5G_%#5!RwcDZdbP+M|cp0M>B6?N@{j790y|%^GAl{=pBGKAztbL=BO8WvRajqfv zbX3-*8<=9M?3s~nW4(^1H?>oq!)*P!-|7!^PTjK6gRqRMuhvV;yb#}OfpoCg4PO9MBS-INrz*BIJlrRRc_POfwu;U?Q zA*(yUESd=L_b>p(J8;U(_Jx_#S>S}7jGcde5`gu`!*{b(8(sa$FK#qapA-Q>1**Vl zi!T7}!tlaBe*D`Im)(ds$)llffmX7>$-wcQ*f%yIuyMA&Y5m)X(epZ!&u+cXx%Tyd z_=Mnui;=wgl1PFniVVh&;>*=+^Kr|LkJt;f_;L5+a;olzL9p{i6DMqIX2WG#p?>^) zMWEI)o;_>d)1u5QQ!2Uk^PU2W1DCx9q(208dad)f=w$Ys^5MT<0RAX1-uZvJqN1Kb z{>2+L*Z+4YhFy zSl~%vom!svRm-@iArbb(4KLpODNwnzJO&KbSO8asCP)nPfK=-1t@Wp2lhX zwO5_N|5qVmz;TaZ95G7i^r*AgTIYhNb?jI5=q~+-qye`uM%@{9j=`_znPL?`(ih$B{Gz!WT8gcexv~gq~<88W~^hOOTcQ)|W8dKb!HYVx2L- z=c3F>w4tMt`0dxzRq*nQOY!oqr{>zMYn zLQV|xQouxyXDY&G`XFlDI`4r6%o7h;Dk!pqDPfV75GNpi!7&dVxw`-Wxs|73WC6!9CDgu8LA5uCx{nc#j*L=_S2lT= z6eKes_lvf=F_vCZMeBNAI(=)?HWydSp$GE}K5p2!9Se_pUJxZJy%Vl$@8ce-A*ETz zy8Uz?M52BO&vF{^DTnaPftzcZlMN6lsHQgO&ry~nnJN>t_jx@eW1J zvpPK6UboFz@<`&M4rWiZ??qm($N5A@AO3vmvcoe0`8c_~vpshU`!(fi!m}5jhtf8| z(rdYlIN8`|S>jYKOs55NH~lld&gzA;Chc6ec0Qe8wB?#^5N`-^a%sv0KQ%tK)kLKF zUu)OTezZm0^86v`ERqo)kLrwuO$-+hAF`KTEbivx_Mld}hd7F{Wg31G9Nf9#;nx7rah>s(_~X!puo=-wO#W6^oHojJYE&h(_SK|cTOL4GUEXs z7^R!bWFct1=c zn_&<@kKEbbwj(M^c};iKJ<8PBmOEt5^platql8tf_pAxaX@NGoYhD3WB|()NnOQ$d zZe;CUpsmYe$-cNa+3kcd3X~dIF||G@FYa~oES-65)gQ=|^L+o_Xa&xR4I={b8D?Q& z5Qqw*e=-`bc7>ts0~Fkc6w0trk}h0y9aC%jrN`zX#=-hkHYVBKE-`ucWMfJ>gJ=&dkteA#S>2!R%W#!!t>g7yY2}$ zeFkAkx85i?7QGasY$)7|mlpS|74YC!?{<+;QKM#g{_x7*(!Ts1oyA`LW4p_l zWlEIt?#SeacWma8A%KLX@_=Dn)@sEASU2H1!iudKI0m&%9^Iapyu$Uz-+(um!d*VN z`T=9S%g#J@rdGPf68!;~KnirNaNGFudn@P0DPSnkK`cpOb%8Rs+ z;+WYziE=UDI|`pmIMjr6K38n)62K+HB`!ztigWh`nsa(*_3QdmA{~$)w0`kkwri$B zz5(Ual7U{g>u{)ayuq-)x?IG3Lyj`MKIJE8`YA7t3k@`#LY(5^LPLQ)QpmH ziL3ch>iW?!FF2Rrp1m#3=fM{jjE>~>aCfu2f%WR+B0)%U^}(-gD(G9S_EFwP4r!0< z7>~F_ZAekrRN1+(@GQJZCeMvPhpI}g!N)p*DyEhxbQh-m32)tR6%r#(gRkA}%?MaL zYRoRM)TZFOlEGZ1XAts2mims+gwPt9K=V2Al3$l0)f$p69IX`0KXDks03EW%W(^hD zs=GlvICDHXT5aB>3OYV{c6s0`Wo`j`D2z-q=pYXiOa@ajAis|XDhV>Nrc!8c|7=sV z)L9~xvnaZ{aSYBl{3BJK_w~FXZ?%UIL(l%Y?T4pl>@c1YAl9psX&$`b(iAK+1(Phf zvpMUVH0ziLl%DO&#m6q~nO@<)wCEuwspQu{gytl9eoyxMKek>lsM{GCer4bzrhgxW8ucFTKQa02Ux zI((D|3(UMmAw8q4#E>Gu{k6xlcOnIWep-RA^)26pSB(VQz9GU=GMthwb%t^g*JtlW z*|8O+5N88#_!J*62BUSU^o|3x+S=Z-$>S2YOdmoat6T)O_ z9!qpDVN!mcj{hrm_~!hTFGULmALC!~(|5U?J39l_P2r!zmOr()Aiau^LEsrSE%aMN z^yPSP!tAK#pJwK?6SLnkqLK-!3GWgrO^N?`4FB)ahPt%S0}3cF&TR6J= zaI@nMvxDK~XWmMzy$qU@1qw!K2E|o5S)Grzwg_8aBU+wit6ZFSdJjjM*-DJ=!o*8m zMbT^vce*;_zEGH1ai+5qZ%xh7GwEjgZbv4`3zovg&fhBmUgfKK;Yxv=@DhB|bnj`c zg%uKC(9<2fSg2Dgsa2Uu78jgA#4>1g;%7VE5JK-}j^vr%DQutcxrtoaK$~QyT2kq% zekSSy5p`9C11K3+iP0;1QIwSY`i{$_XcdmCjMw>&wI#IqOF`bmoB>An8<_P#YH zkrZjmUU6JpUv9L4bTrBKPn(wC|7g~7%2f(et)6l}^k9W)+##4(*WtZLnouQ(rc8rL z{wTIO)}oC**i?#^pFCf^fBzG_+fqqS2-~JDHEwb@+7A1@xE#e{4n|Zs(kfzVULDX6BvU{7Zz-r`Iq+ zfX*d;-6dCO^q?G~4nfF&a&4L=c`bdle(0?H(&f8Iz2-5y1hzZ3(!zw%IeHlL{v7*$ zMiuD^gn8Nb%Jul#ulqk{kJh}>6CYhReNN~SW9x7^jUHHx4*&`(m|H2d&Lq=%{83TP zYIZ~A$f3ognx@%~%+m39P!J{V$Nv3^PA8A(tc+yTD-^TXA;cKG^%H4%!;H@XExDqW zIB^LIhhbIfP=E@SAdkQO(IqoixHcP13t%MgXfss!?a7;G;4Hbe`2(1ha zm5Gg5uJ?|+nNXjPka|9KEkRc{DVPH$qXQ!@o0ox$_vvK^IsO5oahtNbN5VBkST4He+d4@b3cDazjxu;jn`1Y5i(nrzr&Rar1XxyQB1dCWD+i9tRi8MGwzejxHE2GtNkLh1jZEk)A4OEO zF0LN$Hs;0J_gv5b6g7Z-U=SS!lVI+z+~l&WQ=Xc&j4@N)>D}il3VsWFj+F_=Mc=C# zl{$C2mpjyTadZ5@O{36O+e^753XaIW=`O2RWd_t6x@Cj;u6~TNTKl&n%k=hrkfpB{A6vQnz~);f0BT} zti+}<^Z8a8V$9N(+=N4zq4vFt*Wgk&m2Q*`I(VSjELXj6M+t@0U!Ku&!L>?qs@}rx z(gW9S4aSCZP7Mc+J5)9_tn*G~^Iti+mqNi?^RQy8V5g2&+tn%V;ts(SHx=)J8fLkT7I}m>k$I{ffzVno+&lut?cqcVEi%tMsv3hw}W)*2zm13gRx6wv~esCLJl{eICh7m}a{NdAV2v&m&td6D^^HWkQarjtl%R)& z$BHX~^Px!>(-sqcLAATz_Bk=0U-mVk%vV!V23>)rbw9w!c#a^)Y+qaLJDRP?+Kqz= z7E)?KI8vllo3y#1y&l48ay?(tQmF%^^N3xL0`)+GfYicMC3!%L?|ZBwkVWnV-3}_f zEtBQ6Gb7W_gv_bc+8>$jVzO1m7461{pp+0(VkJ1zECJSp1Wr$GW(x94B&7NjR6omY zIq}&z;vT=#s4~>|;G>>hGYawII5k_0KVRlNm9?N^YtlfdJjC80TWb>T9hh1vo!Hkn zM*mCi?k_UVz9eCVJds)h-tUr3sahi62KnD5=?b<8y!$^Q!ho*F|L0?<|JwO^7`&)% z{ttpq@vDD`7XP#R=-+kuou8#U3JO^t0LQD)-vQ&8wmn6QYCMQzUb0}GlTRh%i;+sX zE&o;4XjnQ@6XbKcnymNmTjt?tHD#W9bLkaio=o0{N20VlS)SK7aQcQOJ<&l4 za6`MoV>{@u7wP%rhSYANs6*k8uB=ljl;;;2h0EkFi*GG zRvmidC2ncZIQf+rsom1YG&ajH!iH~hCg|E;mJsnqyYSIx{9w^S#`=S6tn)BBLOey#DTUS*!MBpcxh-oh?I@EVSjMHbP2npNnoN&}# z6(9Z)iLogSUc*Q)1I^4e!S3PN@w?cmv_RFw!#uj5n@lQvEjV_Z3nQz;d17CtK1V-% z&iwm0zvI{X>N*D<47Yje@R>FKTuBpcaDP~T1YZB$qc1a8pk}<`{0^m!RQ6_x;J130 z=$%F9hv%kW!^}ENKZYs-xt}ltoL|HRuNA>;Y=nobK^Ac10--*C!{5 zdkI8yMFGi?s;=;O6>98cUev+hm;mIK@LQ=M<9+?8RnxH>Z6Xdy1KStSN11j7q>h*- zhW#LVqSNbG@}nATNzWpQvy2t89Nk?8^*u$OZ808YLC%XXIxA|gZEb{F$5TySDfC%L zd|~FBj&@mWFz-vGRg5`sQznr|oZq!kG|JNr3o3Z&Mu#}M+ zb*grTR)&_yPXD`PW8E*RvBm#YL*G*Pu}tDmo$3oIxln*KS@_o$UnJ1t)BT-Dk3XII zYaL9H2McmJB(CSUi7EPb9c=Yq?Y_n|Tq~D}=UJ29Gh`QOi1=k73-;;#AsecOL z68gped?Qq;@sR6n!H|d1N!(v{L4Vo*%kKYu`~Uu{{_l12ulwcy@op&mNs8pfu4Mjs zXWdO82{@O}zii+9r-~jxy8Q>2A&cZ6kps^Ey`H`-#fSq?L=Boeq7V5yAcjZAbfLQ2 z--C>nLS_v6ZKbOlTWq`@jO|oaj_oK4H~-paMXIN#u&7(oBo!Hcg~|aF+kS?F!9MYs z_`XHzgSnyAsprxz-uTG=$@cdzqrzxCJG5Ugc;(XPeE;bOe;3;&IN}(}7o{2|mCrX{=UEd6lf#>5P-lB$<4O5Qe3zcFI^4#|eUAG<) z-8T4it}Lm>C2IuMh8`a|;8Rc#CViY!^Z^76#%@nXd3VwvT}LeB8tN1xw9F%O^hjtz zW#zVBs=;Nz5n%eoZf&#zUe8j6ksPsk>4#y>7AYWDmt>x4OZ)@mr{ox_v=Mi31DlCX z!?PO3z5tF)>lrO*nVkBe;nYAihIG7LEqmo+2m0L?Oy6+@AKzswIxR&>rPxUW%-Rjc zrA4)k<0b|fDgx5$CE@SY9n@HD;xmTqfq7@-=>I4QWzY?EqTfc=&)%va-V;*3`Nru| z$s2NoK>`f0Tp9kdFa|UjmEQp?f5@NBl&88tGsSp=)LFq~@cxr^LylYD2LAWJIT*!j zWtSf>e{zssN>MpI*SxXuXZJ){tB*42>z$?KQhG4Rlp~6Lbwd;6^rxvp+vL^M?`XVM zFbUq=6gM0%l}zgFvI5>TueO-0l05q|&n?Ii^)jdwur72Y;D^qn@xv(d{vnTu024rX z3Jxrr>-H?1cX?RD8aC8oard3weOEElY3>CRVqEHG)ASPwM7^ULzi<;#J1r?=Fm zN(L%oYcx~7MJwIxR=p3}`y@QGqXHsWjCd%iz`RffZoO9E7-?&pTO4;!zhGi?J@52+ zwsA>(x$!{OKG_P1W7?X-al=e-nY|uSr()$8L%hZzSw)ptg~(e%&23XZQ~rk?R7{?N zjewNmlQ10H`HG-{9%f(9quP3Mrqb}q^|p&=uisl(+dHr$|NNco2Y%0<*-v#u;G@r^ zq1HXE?oCV)9Rh0?LOAg#F?7vjJ&}t_j^FD23-igB}O1Jp+egpkWLxxSGi*I@L_nOR(ZWCm2w{tfZc2I^}>*~;lp~IiM zx_QH+BRS`g;WLn%&(5SmP>)dLY1cCPQ6g8TexDk5b9@m zIL>^)H;)=2cAAi75YZ%KvWQ$nYFxC~HAK5zjxVTD;uLNG|Lp9uAFRypj62A{zQ$sp zt*VT@?BiAjAIs)e2HiuyjqRT3+o*4Ns&O$H*-qlDQ67;5O8Ww6bk~K#7{T+yrkxS} zQA&Hxulj0sB|n*$X?)tPxd{s9WiXlZjQTuI=MK(`5qx5SbB7=57O+3%2Ht#_0*4 z=banWN_3|;@7hwU_NvkjV{$aQI2kQqMj>|l5t-U4?oV3c7WC?CRMejRlnqF(1o>~% zR}|@*F>@~^7xDiGKHGdoFJz&ewgBjk^`on zlc&+T&6?b)l}1OBJ*n^tm15`vPh_V#2HP3M^Dt%Y^yQ}nkmwB%^%=SyCSbOyk<-SN zhoffi7418>lA6z{I&3=08_px}dYw}LNXBce9&o*duchvGF`6+lX639#Z{Mizn1`&m z$=w~Qt6I!#cvOe=O(}gWS`-!SUqrrOyq zI@=zHYn%WY{RsCE^^;McOE!NIzRz$@y#N)|uB)$a&(j%)l~4LbKWE(fsWs~-Wc+9~ zpWCVOA@B*W-n;{{Y5+TF5rU6%<2Q7n6Q|>6a(Oy?ay(r_I0nAvWL5JC>y@aPH%`R+ z@HKZ2QWwS}tj+L;nL*0W_7sUuG?tg%%Z%5(=cH~28gvmJzfU+0L<-V!UGOAt>1~U5 z8TL)(8nlqGm%R*i5hqACpRAPI7@X*BsK-nd51!0l9eN(Lt4Y?)7N}7U= zv3BC@i47?|AZD+WT+LwRjcR{M8b#KA4z32b{IKSPl$|1!xMYqDB_1Cy-7j<7d>fy(|3aEHj9!hkU0 z1Fr78dhwq4WXd()V8!-Hh~P*iPh)MZfI;;UDlO-AF1G_Q``%1pia}5UEz>%E>KR&~>T18y1LVhwX+A+sOmJxC>>1R2#Nv zIzdUX0;(V!xJYWfX6#~~>bmdNkBPJkG^`d0>wZ)%l4kGx11$+oee`UEbW^);IGKy` zQ1vQ4zTcL43dVK>bhhtLYhHZKGO!H_%968>tz;ei#z+&hpvSiaAqLdOOazhS=uA!_ zoL|2WzOA_bBQzT|f69>@k!xKOcx7o^vvp?3xc|5X3RN zp{HEEdM(ch)*ltYFtLexDI1eVlkPCJ*7nK5SM`T=9{9{TEA5+?I6nD#)*A~lhPnryU<;Z+u%N)#E!WI1nBsLNQa+?i4fZd)9F6Fw=Da%#ivOUK-s$_0 zrrF(aMeMha`~TqA-02ch7Ro>Pv~p8A{CxfvOf! zO|K5AV{Mg25Tr$bmTWV##TUVG_oDv4*-`AGv1bW|2R?8o|? zYc|U;#%#yU;8>#Qz2UVV<|`4m-!Pgfk<2Cdz6ek-j^l6Z$tiv~Vd zBAe$p5HDr!hRO|lCEa--M4SLG?|kOLL{PyyVA`$GgGoD2TwweKHVbR5)}KcW%Uo08 z=@bvE&1Q$1TkMZLvre>tzbh0ki&I6J4{));$R=RQ&pViKvSBbAm5f&YenM;F!jF^? z_Dliq+ny`No@t!W@`N;f}mQ}LB{;X|VS4SPNbqlBdFBUMfn8hltt43d2uripSB zZVBdljL-c6w8+d^(~I*;Ep+HLmFU*{`Camb(~}I}gbxaIa*B(K!FN_WJKybyx%2rK zXPJrY=`7bN-d?Vw)fFuJG?PzV)WL_}?d?!FFM-3ng5W{nx`=7JTu5N=)JwHdJ_mI~ zV^hwoT6ZRtVlG(_&Ts?(j61mTf|l6Hh3I}jq)dS?sxcrp8qhtaSddgBb}0o8h9PfXkWmJktW(U-f2I`SYZ^^a^y;w9;z$ zn>BO#{nR?5SJMo?R2c|b7@}0^B)w-faQV8H z)}q9HHoUg-CQ3Yt>$;Na5=na+7|Runa2Mx|wKoWIdg^MDYPZLioUu0Z-QNLd+YWF2 z!VHtIaW#-ec5rWYKE)PCQ#DT4R%lKQ8AhgKV{>+R^+Q|urdwU|>M3-wO+B-a;Ussh za?$}7pSGW~MO$-uqT%X zpF+OCMYE|wSt}FpeCnI_%$UZnzS!vTM#SW+gYy~C;eH81NE7pTsrS+G7Amc zL!uS?Y1JNSvcKr)i$m)Z+U^khFr4IRg8cHXBfy2wxxVDewOpn#81HlY>xrsbw3Stl z@{o2;zVkDy?*q+A|Hp;<-^&p&jrTY#Km2rnpK}XWlRWS`61W9(f{}u^W>gPufJ-t) z3#YGZ3df8tnC7$!38n^x!h6NTz>MO6)Hs7O;5(zwHM?9=IoiGjbKVaJDh$gdioJ2()1AqS#br`s${oepufaxLd~8%OhklQ6e!bgfb7$8q zpUGsg9~oP-+{!lp`!i|5R1$7G$;4Cn5b1?zjl4YPe`T1 zT^>vDlO>tO%*$1hS%fkm1gjV8cTVIH0;rBqzeUE;OS`9+kN|QL-`P{1N$%$L2MFvL zU!L1ic5d}u>cDqqLD0oD zIdFR`mseqT;}JBc>F51FKDa>X9HS5JQ;HtqJNk^r+<(;-p5?9QFkvMTxkc0i@1odBqefFfsB=@r(`c43?*WUU(wz#Z4|4K=1>wOXZThu78TyfYQI!Z1eHt zA0R?-(};0K|9`kQ|KD?$uKg!|-``nq{^kxnypm}B?-myT9kN0KzYPZUkCO1&83ri* z8#r$E{$on=;qC1I7Jd+#7Zm*Q^`WZOqkmR{Q_pMu6}0esD?AxYh9~RbhdmfU08ojH zx_L6V?@c>V(e4bdSE<38+<{qppAI}gu=|r8>~ql2HJVSZ3M*N&&jR8;R-W z2@~AQ>jd)!e?KvjRY;t3@8B0uiZ++NdR&Hjp&1e~Gq47(U%h9ZPuw4X)RYsvl;D z${99_{QQ>xAao12q6lxg4xH9=N5wUJ7b6no2g_ODnOQhpZZa|kHyKCyi8OOAVbB=_ohzLIz$G`ZJGD;X8f zbp>iQZj)>^NkR8`gLYWS^A4}%eZ9+SFRp6`I}?lT9>K6Ho#gPIP6h+`!cVss&RK8# z8ddEcrT&T=RN_!m}%j>->Bi_rD!aGw$f~Rc!SL4e0JoCmEPc0XFkk zcOP^wmSfc>Io771Cw=(?>&IzT5JGFS%Ehory;gnrB>#U8ezfC*z6x zL!YYB0%nnKXJ2S>r+Iqpcjl1LpUN6q4Fh2;o2bhn3_za|HOxp&JKz&tJt4JVZg3`< zZu-P2(N8C}JB483{@$GK)5XXhhuNSlHZ$U2nA+9sG<2d$%ox3KSjE5klE{-+X@118Eq`x?z#fG>`N0_e6+{-dAD%)4;r5l?mkanLLriX}kwogtE(aqk7 zwj@;n`CmFeUdHoYS%rfz2l>?Icq8m)FH)far&5Vdd#j64oIOr0OXt}e zl`Z+^M?hedp>W%&PA5Ym>p_3}eCX`XA0UggURr3ceq*NI-qTEjINsYy{;)Co=3AAa zpG;m2OYcudB0T+25Ym2D%JvGAL3ED1_e^2RTdAvcd~+jIWM7HG2PplF2wszzsV7rW z>8`em-D6NW?G@enxi7?B?qr)Qpyll|0JDhXnyEz|qY`%$>qYe}ni1pmQ0aFDQ}Lp? zX)jU{&PPYn#?}7(37_R})?j_#ds$rE!T%-z^q4F{?|J}_%YKhSHj7>FlL`u7+WE&) zZv5?)BaY%CoQ@9;OrNu}j!%WS8faLI9LCFHD|K3hm2z1RS=V4B@-3W=fI zfB`7btgf7(hz%LAP`OkRDy6qeX}vh-EZdYxqv$3psc$SV&ba%+d6`yb*_7?Y?YJpy zUKoNaf7aEO5^E404%5JhiuYwjW|Y~Z*Uc2O+pZSPJkOvM=DTl0M4?XIfrt{HHU42> zHa^JO8Cnm~9?ZC{RgI6btfE)K7JuF;sx#Yr)~rS}|ALH#r^SF8qw-qnb44()FuRY7 z>@PYvjjTNE+n=!!X`=P7s#9*^ggKmCBP4~QL*;gvE!VB6`^nF2?0Yk<1ae%;LJHTk zUW|8Ns}{cm^yXQvA=3{QrczMiF}as(+9wgbg-|KCV4m7)?7MNa1o*Lq}Rz}K8}DJHmj zZ?g773J|0C@CT+(I)eJPI&6@8A^yy&H>H;pqPIG6D!r)wri8`b)26xHoo6j|&JRUo zJO|s|$rj#A%l3imv)&@&$_zKjB`g?-Bro2+1F&hhlP4G=TrUZ3;wGQ>i@?+`Sr(2+P~x~`KH|I z3RwF;WAfV59&Y{X z=)|hW)n^0Mr3LSzYoqN5)B6S!Ss!%;fdoZ^`TEqKfq>_D#Pl2pb(~&v4gdFx%r$2X zz>)TwzW<*Pmg%k2(*N`c{3kuq-=L^HGRsXaNi;Ny`@T4o*rb#sFU)%Bn|22&=i&MV z=eVf!w#pHNqdxwr1N}I;aJh?Mmd+DUW)_CcZgKREmf@vPCEvKkDTqj)%xu;BDB-}a znTQ&lC7D*Tg&4*U1D1(>_BoA5aXSA z*j`}*m-nsMg~ zA7tiD%511y>tFTY|KomH<=9ODoz=`QT5?Xa*3O4r%OjViIMXNGY*`dEBUr;0D%KSt zGr#KH5ziRS)>Fn>yv9OBHUN|fHt+B^OIrL-{W{Pj=OX*#&oHiVAR^sJjiYq^0mseo zA|-EtC;d-6|37)sQnxGro0jB%mahxJweW@&P;E8*tAb5V*^w$GgQD4ak;Ecv{c5%{ z?bAZXCtV+4?vEX!IW{Q_ER73p)x@Xiwh7yu2+z2!jNQ6!oNDm1AEzA#(^&c`FbjG$uoI1Vo_CK_&wA-(ua4;6) z6(lOk(6Shz>zeOXF5iOB?e^u79fokusiP8aJ;D`O&kms#3j+4l?S?K@1UxsQxW`Hp z0(}H3eDc!3ziDg!LMXetLupJD!3qPOW$IFg(^A>wQw>veL%z;pqGl4$e6&7?yeS3r zW-orYS>GADY40}v;?3mNA0PvpX{Vy8MswK#qeRxR5+?8DY=qNNG9yfBYOyz0W?XRe zka_gko*3v#foHn+ll!d_YhQJwzdpPET1(lhKe%B%gmNJMlUw4)^-RD3VUB9=DENT4 z9=OR^5cKhZxK7gOn?sB^D?8&^N!6|5=%r)|Hx&h}OdU?VS0OkJGdE1?+L|~J=~2=b zukryRHYacWU_PaOn`)INr|oOP0UWxbD%g9I?bYRg)i`2c%X~P@a60D%uvwzBj{A}+ zHaPjP4d3%(Nuv(kO6?}3gdq~H(-}WLA~na1U&2M4t*_2qj#OW5FvB)QGA%B3TC_{Ichm9rN;MmNr;rL+1k-5HHI&A+=L2;Rb<+vT0rTkMGKeIRR z7opSRA@z9#0ctE8>Toy-p$I|cI0l)Rq@ur0eSc1$)Kqo&pF$e)O%Q_bi*t*SWw01C3;V5sVnM}HpI>;e+6-D@5Y zAtOsN^($PPDP3+Of!|v(+VkNIfdOAqs#n?VfEsF9#%|J2gfS1lM)@(E;eE+}Ow4a94q+hLYSbGYD2PW60U}=-Np)<2~dWXQzat8DC}m@~cFYPvvFEA1p_ zD8cxxif8SH)yR6GJw1p6G?VFSO2X&6;9 zbb02P~CHv6Rlprdrce zNn4?>U$~|Ab$Qx>Ldl77PQ_39dpW9nAV+TfJjBW^gm)j#%d$PyMokAL9ii`e^k8NQ@Vap`?%$vcNbCKU;P?E;R@}0xbE5d*QLA`-{W%y_62I?FLbj`n#yh~$lZ=6>(# zuV-dnGwOn~?|_;pLY0YfipKUXK69p!p zm#ISsu1jUtxIGKCX^1Obd`>H4_noY#`En{S>4R}mcXP!ZbBZ9aQnsuJgh8Z${g+;I$-j1-x zK)_ucyja!H25RbL+RbAm^SJl9iGf>mQ;S}6@jk?KIYClbd*GL9?=(Z3cqB{|r}Dqr zyUwVlvaTHjL_k21jt~S3Ql;ro10u~x5l1>klu!jkKw78@jzEkeprZ6H#E664FmY6$(4?_BI?`{Z0uUL^Nc-4y8wg)^J{}D=lGKf zzLr7#`$S{3SO*o?Ms?wQ)q|I>Y2FBIEf6aAem_5F?o*N;db&e;MqDq)TU2fMdbDX0 zWpy_5$vUQaULU4h&l!$*27=XWb6s8=_M?=F6}Qyh{Kk7t#{LRH(^9>8rJNo&bZ}{v z5Jry&2G*vcQu_IYF-iKf0>~Gq(?{d%hSKAiun76ha~@%c)ALG6!(|*E!N7-@NlYo4 zAth|FSphO3^tzAxTBRT-c(yy<&JQ~nD5FbTk<~jTIl;AbfzzB(n;*Qpr_ZcT@|4A! z$%V0~UbV3ZWW`f{DO*=brg3!GfV^NgV%(|bnlb`{173SVu^SUF8iW>_E#G$aw1$oOAzbW<(n_G52lJ_BTs1M zvV@-u!Id{q=xNfVH`DMYKK^@Q{WiAw*%PY}I~z84Wdsmc;Regui#J-z+7P5XIr3|1 zQP9xK`wdJ-AB8eKe9192ai=qOi@ul54JeMJyT#YbzEvD4ACEZlm3}-Yh@k-yScgexXH{+V-%|@Q6evDt75hGM_E}ZL|xK4xGZB2?UM0f zoQ91*=$7+o3rw`vilqf9s*ege&pbIV8cLYoXwCL3g_tmF8B>hMa;;?!57NK$NaQxX z;RXqHU24ZTi6uutlkdnHz&%n13p6=*(jM7SP=s_cDe6$qc1t&J^i7uRuX7gY+flMB zBKxX_qem9uo7jsseN(+-vx$XOA5uJ>eQ&Z9Mh$DkoL;I7tE!g2I1hEkOm%yO0MFu> z>D6%+=u0t6?;wHHLn3CE^BAnA$%;afg|$!4?xKm7Fep6%J ztXFhYMdby)HZ(lDZ5cWxZwtJpR5-baNYus6@gF<47E-@W&kWkam2$+ug}Q`E_d=I5 zDe&VDn3c_StrmLRnb7*d#Et&3sDTeQv2K=;;pztWU~@Elf#s_-vU7S{tM+*?=`z|n zT}?hpT?@n9rdggi4XI@Pk<=x9*6eqDom}59GnzXFW>B1ar+Ri{(%Z&)?3KuZ7W3uQ z4lAL86;|lB#f+(J^Lk+~|E^zd$Pv4F8*Qyu4y8iw^RJ-Vd2$!kRnO70PCh<1hfSf6 z;@S5;Ox>$ldoXNSqgQ=Q@l|d5^{?Qu-Q8N+?bfK%%Pp#Vwzw!ik0Y2n^!A}U2ikYt zsWL<<3w}CFuL%8gHt^F~fajYPR!-NnU00&w7rI@K-@|I3UevJ-?qL9!hsSD?Jg>aO z+sQN78@0`mK)J3!awD`wYxB&$Vi$N}oP?&M_hRGOZBpownRb};<5{cuqKF2we$KdN z5wAF@>-fzNp^B#G+moXllvX};X?2Dh23p@vHkjnd+(B0OQ*W|eBz@8k1rO`tEyLK7 z3$R;jZDDrHVwCr`>Tg>cD%W2h|J(BKXejwLW17-yf0~(Z9Ggw#m~x=jAFxOBS4mDn z0!bN9IVSA_QKX-tx%rt*neEqp+MtOsB`WPBzSO{H(vtI7X3^iihl7CcVG|q11|XF? z;#C{K71!{)`bxm}aFf@QJ@>+ud6)bx114?F#!zE=_3WPzRz${3>eHNNCLZlP+)s{i@=uP zGATt)A>3wNzps0cNdm1AoZ?f+FO?g==Cb$*nE(dXf_I^-`$heIroTpkj2KX75xfds z1~w-jp+$WMr(+LxI7p!Qi5~OB(JV-c)g%OP;X0E*=CJh^s^fY2C-NnXdny-o<+Ge? zIQjsV2oPn);SwG24J9%AE9UEL(GiIT*!Dx0x=+|Lp1`V6Y6Qeej{Kq&`3U#Kwx)VT z)a#uiyJ%XlE%V_rYD8pY;_hLorfDV&=d;-^2zAWi1#PFz17eZOOfzhor!u{%%dHmJ zbx+Bg@H488l%?p9=oeR+QOS==>rEnkL^$}&~R8&Eb~e7Fv1f4H{S z$I5%w1k_Mo;le(n&E0mbJ;f+TkwDaeQj6!Bo_zubtp}bfu?^Un_*FUq{M$+qZuRfX z)oByjm8tsWjw7BkaVnOKQ-Y0ghG7UC|Gj0R+4aVFASE)&TU%w$@^4RzyKuO_*qu#ic_9dr6=K^Ratehkv2Z<-qU= z!G0@aBJS{z%?;%dINhp)d5_lBHPuA><&G5;!(^C$?KClJ>qnHk3!IvyD5nYm;oFbt z&}SfDg~6-aBYD&AK)5=(6yz};e$#&M3f-FG2nlu%^5Sf7CoRq-A3T^nyIEVg|JeKC zGTmaeVKkk12n4&I;k`DO!3$h+_%9ajh4W_}>J~u}7mr!o=eV%v;&O9z+%AMnJN9uI znK4ysn5s>QZK7}{7uh+}aue2wxV-sVdy0*b?kJ^`GA-aV@w}WX#^4*GhN~C~>MRDB z)LcJaY{-Hyc>jgQl+^>{qk8+*Gdl3eFG>!uKSW)UO2NTzTo%e!G%| zHRWLhLff>nI~*+9=0-bQ*AojvuNLG+oi{e%ykmU%uA|P)Xk0Il@sdi&%$Q#cC_ZwIQR$rcMWFbob5}t-*=suZ#c8S!RM9{; z8a@UxVz=TrEAP)SrN=YYy0Y?3oW=BmRdjiTRV8w%R&afw!)7DDjE2PCZP|IXJ?m91 zYFWChr^}KA$|UHnb@mFEAR*S zMe>+71fQEnKypONKE_S@RinPN%v?Hqu}IL*%Gj?N0)%oSzqT|SPkePuWdO&J{(+Pw}a1uy?1Ug5Q{x%(0qW@3N?oWh;QunBS zQMJuB-IS@Z(Z9I$Mc1w0h9ct|BJu;R{DY$YDFw&>V4;3`ZvWJP5?>b`C4t~?0glJd z=)4XAa4myyO##qp1(dD)g4-isluriw?0*_>%I1%1baEgIWE0b`fIHBy-%I6iugf&G zRj%4mu$+)?!u4=(u8ZLy+2vy{;P%XM^>Gbe2%dfRPym;@QFnMH#j;E$;l2-m*hcvZ zw(7Y`IrCJhj|1;CP^)9-iMh)k@xnR4$+FYH^Sl+GzgCf?JA?_nAk{LfeyAOG zS65(%KNN4AK5615r+M*Sr-24)78}HRCafehT+MJETs;>WD~4Mx3qnAL8+G;C9Evew zUACpVeZXCJK$+oi1EQ#|#%|#aAkuIoznW#9idP86HVNxp=>qpS4{);7ukcHZN(kRN zbN#A)T+!Ntk*O)uP~nnmvqoY|Z;SSNf1 zaH3raL-1B?TAS#i-{AyzXQ~D4V(wVw6!C6bZO?%RHsv5^a;`oPdq}bAu+x5fmo-$? zMocw2qc6x<>{%QlNYCLs59s`UA%74LwF~yIsVV3hnxL{Gy81fWAj^QMszb2c+m~SZ zX1mpIjnWWJj*ZhipS9V+a1Lw-2bVuByPIXJW^<-d7>lZxsN0CnxZRrz;7xKD7bHrIJAQfEQ)4 z!&g0~CCfZ9oyVYp=*?710tFpeLEpkJgYN;AFT~ia9!@}w2YY+{$VZYkO?81sOT~h; zIrXDVjjkMZOqyS_#X1<5ELR#s0x8}a^?Mx}pY0pcMC<|*l0K&6k>Jm56UVPxAz5Px z=rrKQaCV&wk_$wEu1`V))LM+Ar48Iy^5Osi8lyH}Te7QI*|h$?@1(81lhmyJz6>8V z;{YLgp=w)Q+5YW-ygdJ^=>HEz&+$n1lQ}XrS%Wh^@}KSJKiSr{9=gbD{ z+!pxW#$}`@nMA$OTn68eJ4h5*%Xwe2^R1OBKnZPoRj}IA`ymOG;tOQVRfw(K*bD{S z-#}slkZNR!=Pg}BZfZ=Fibn5r0GGGspE`aaoQqOC!AXnoI)It@Xa|%z@{JUL zklF}tgj7Fk7_Bd`E5jgGOgpT)Vp{O9Z$d8o*~AqmR!u|jfI3*@HXb@l0e&-AT^0ai zCV{L6IkkcKClkv&sp{z~b9(!1z4s_Uox~{ucr*qsgi&CoQw!$yBb0C&m1sH`gU6<7 zcK1?U>2fY!Sdx-3)+dP^f1|P*&oo>KLBy&WUX9cA{BGU5~b%qNBxb@| zYO0&p4m(XZ!qfUZZdBZ}@1-B=Gc}q#FcT4QcSm29JjFCunFt=XDZM68QAMoDuxEBS z!h0pJh6GZ{GXbr&Hvn_`2z;WfE(0l_3XS4K55Q3U3`wBhp4C_JGPf@shv!DQ*Wi~d zAscj}R|oVrf$d<(qZHs)NlOCFk%L57JfmTFTpW>zA%XVlc|zybTgSx9J}U29-*#N% zyC$qO5v3$h4DbJjG_~@$AFDB4A!QXmzVKjhG41M+Md`BjAqas01F~VI0MAV9J|JfR z@TCk3F&zco-sHBfE%=*?Go!_CU$3O^#&F{e%&!S`)MxyAX<8p_W8xnZi6|m}!oq`& z_A?g&f8+}>w7>^$wIkV)^~5K1Xz4|>()GvA`x(obl;!Epa>bdrM+xr8;7pb5Y!-Ei zwdInD-`&ouW@wWMdjs@>Wuao?m=zjf?S8-BeGfF&7ufBXMW$^C93 zWN2@n*zf=U#CX4x^L;zAdHk8izMtry2>L5clkNGl>am{Ce@4(Z+y3K4-CC@_?1~H` z66mNPrJ$;Q*7=DGY`8ly&yKO{H}mR1T=o3MH9MD9ZQ^$W_4BSv>}$wp91Zr~}wQ$L_J5vNNErwG( W+2BV-NfTLD55^^o0~vCpp8o?L)U5pg literal 0 HcmV?d00001 diff --git a/.github/screenshots/orukeet-download.png b/.github/screenshots/orukeet-download.png new file mode 100644 index 0000000000000000000000000000000000000000..56c182590ab348f95685021c3a274bfd052283ba GIT binary patch literal 108223 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