From e1d22e95ede0b1c0fd3215e5ae3e722f6017c78b Mon Sep 17 00:00:00 2001 From: Ricardo Silva <97543217+OS-ricardomoreirasilva@users.noreply.github.com> Date: Wed, 16 Nov 2022 18:08:12 +0000 Subject: [PATCH] Merge Development Into Main (#10) * chore: Include swiftlint * feat: Plugin init + Setup Configurations (#1) Initialise plugin with required structure. Create structure to deal with Apple Pay. Despite being ready to deal with any kind of dictionary, provide an accelerator to read the configuration from the main bundle. Add Nimble and Quick through Cocoapods to use BDD for unit testing. * feat: Check Wallet and Payment Availability (#2) Add verification for wallet and payment availability. Payment verification is enhanced by also checking it against the configured payment networks and supported capabilities. * feat: Set Details and Trigger Payment (#3) Configure the missing payment details and, by mixing it with the configuration info, trigger the payment request. * refactor: Add DocC documentation and minor fixes. (#4) Add DocC documentation. Add empty value check and mandatory fields when fetching configuration properties. * fix: Payment Setup Verification Failed on Invalid Configuration (#5) Fix error when verifying payment setup on ReadyToPay method. If some payment network or merchant capabilities are missing, return the associated error. * fix: Errors and Contact Management (#6) Clean errors and its codes and messages accordingly. New OSPMTContact struct that allows the management of the correct shipping and billing information to use on a payment request. This is required due to a limitation on OutSystems related with nullable lists. Change the OSPMTConfigurationDelegate to OSPMTConfigurationModel, in order to comply with the new OutSystems structure. Clean code (privatise local methods and make OSPMTPayment's delegate property weak, in order to avoid possible retain cycles). * fix: Check if GivenName and FamilyName are empty (#7) * chore: Add Unreleased Section * Chore: Add Podspec (#9) * refactor: Simply Generic Method * chore: Add public podspec Add public podspec. This implies also updating the readme.md file to something more descriptive and user-friendly. --- docs/LICENSE => LICENSE | 0 OSPaymentsLib.xcodeproj/project.pbxproj | 5 +- OSPaymentsLib/Error/OSPMTError.swift | 6 +- .../Models/OSPMTConfigurationModel.swift | 40 +++------ OSPaymentsLib/OSPMTApplePayHandler.swift | 2 + OSPaymentsLib/OSPMTPayments.swift | 12 +-- OSPaymentsLib/OSPaymentsLib.h | 12 --- .../Protocols/OSPMTActionDelegate.swift | 2 +- .../Protocols/OSPMTCallbackDelegate.swift | 2 +- OSPaymentsPluginLib.podspec | 22 +++++ docs/CHANGELOG.md | 11 ++- docs/README.md | 83 ++++++++++++++++-- docs/assets/createRepositoryButton.png | Bin 13627 -> 0 bytes docs/assets/repositoryNameExample.png | Bin 24994 -> 0 bytes docs/assets/useThisTemplateButton.png | Bin 6389 -> 0 bytes scripts/build.sh | 26 ------ 16 files changed, 135 insertions(+), 88 deletions(-) rename docs/LICENSE => LICENSE (100%) delete mode 100644 OSPaymentsLib/OSPaymentsLib.h create mode 100644 OSPaymentsPluginLib.podspec delete mode 100644 docs/assets/createRepositoryButton.png delete mode 100644 docs/assets/repositoryNameExample.png delete mode 100644 docs/assets/useThisTemplateButton.png delete mode 100644 scripts/build.sh diff --git a/docs/LICENSE b/LICENSE similarity index 100% rename from docs/LICENSE rename to LICENSE diff --git a/OSPaymentsLib.xcodeproj/project.pbxproj b/OSPaymentsLib.xcodeproj/project.pbxproj index 8a98295..b89a5c0 100644 --- a/OSPaymentsLib.xcodeproj/project.pbxproj +++ b/OSPaymentsLib.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 7507FC1B27FC2AAE003809F6 /* OSPaymentsLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7507FC1227FC2AAE003809F6 /* OSPaymentsLib.framework */; }; - 7507FC2127FC2AAE003809F6 /* OSPaymentsLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 7507FC1527FC2AAE003809F6 /* OSPaymentsLib.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7509DC7728993C4C005BA0D4 /* PKMerchantCapability+Adapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7509DC7628993C4C005BA0D4 /* PKMerchantCapability+Adapter.swift */; }; 7509DC7D28995A07005BA0D4 /* OSPMTAvailabilityDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7509DC7C28995A07005BA0D4 /* OSPMTAvailabilityDelegate.swift */; }; 7509DC7F28996482005BA0D4 /* OSPMTApplePayConfigurationSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7509DC7E28996482005BA0D4 /* OSPMTApplePayConfigurationSpec.swift */; }; @@ -60,7 +59,6 @@ 6E048C72FF94991BB4DC4977 /* Pods-OSPaymentsLib.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OSPaymentsLib.debug.xcconfig"; path = "Target Support Files/Pods-OSPaymentsLib/Pods-OSPaymentsLib.debug.xcconfig"; sourceTree = ""; }; 7063BC573F58EB7154E9975F /* Pods-OSPaymentsLib.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OSPaymentsLib.release.xcconfig"; path = "Target Support Files/Pods-OSPaymentsLib/Pods-OSPaymentsLib.release.xcconfig"; sourceTree = ""; }; 7507FC1227FC2AAE003809F6 /* OSPaymentsLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OSPaymentsLib.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7507FC1527FC2AAE003809F6 /* OSPaymentsLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSPaymentsLib.h; sourceTree = ""; }; 7507FC1A27FC2AAE003809F6 /* OSPaymentsLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OSPaymentsLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 7509DC7628993C4C005BA0D4 /* PKMerchantCapability+Adapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PKMerchantCapability+Adapter.swift"; sourceTree = ""; }; 7509DC7C28995A07005BA0D4 /* OSPMTAvailabilityDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPMTAvailabilityDelegate.swift; sourceTree = ""; }; @@ -158,7 +156,6 @@ 7509DC7528993C26005BA0D4 /* Extensions */, 755A8052289BC8EE00426EAA /* Models */, 75EC4D132894142000CF50E2 /* Protocols */, - 7507FC1527FC2AAE003809F6 /* OSPaymentsLib.h */, 75EC4D1D289416B600CF50E2 /* OSPMTApplePayHandler.swift */, 75EC4D112893FC3C00CF50E2 /* OSPMTPayments.swift */, ); @@ -254,7 +251,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7507FC2127FC2AAE003809F6 /* OSPaymentsLib.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -398,6 +394,7 @@ }; 75895022289989D200670171 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/OSPaymentsLib/Error/OSPMTError.swift b/OSPaymentsLib/Error/OSPMTError.swift index be763b9..49c4c78 100644 --- a/OSPaymentsLib/Error/OSPMTError.swift +++ b/OSPaymentsLib/Error/OSPMTError.swift @@ -1,5 +1,7 @@ +import Foundation + /// All plugin errors that can be thrown -enum OSPMTError: Int, CustomNSError, LocalizedError { +public enum OSPMTError: Int, CustomNSError, LocalizedError { case invalidConfiguration = 1 case walletNotAvailable = 3 case paymentNotAvailable = 5 @@ -10,7 +12,7 @@ enum OSPMTError: Int, CustomNSError, LocalizedError { case paymentCancelled = 11 /// Textual description - var errorDescription: String? { + public var errorDescription: String? { switch self { case .invalidConfiguration: return "Couldn't obtain the payment's informations from the configurations file." diff --git a/OSPaymentsLib/Models/OSPMTConfigurationModel.swift b/OSPaymentsLib/Models/OSPMTConfigurationModel.swift index 565b10e..39f2997 100644 --- a/OSPaymentsLib/Models/OSPMTConfigurationModel.swift +++ b/OSPaymentsLib/Models/OSPMTConfigurationModel.swift @@ -81,7 +81,7 @@ class OSPMTConfigurationModel: Encodable { } } -typealias OSPMTConfiguration = [String: Any] +public typealias OSPMTConfiguration = [String: Any] /// Manages all configuration properties required to enable Apple Pay in the plugin. class OSPMTApplePayConfiguration: OSPMTConfigurationModel { @@ -103,36 +103,22 @@ class OSPMTApplePayConfiguration: OSPMTConfigurationModel { /// - Parameter source: Source class contaning the configuration. convenience init(source: OSPMTConfiguration) { // MARK: Merchant Information - let merchantID = Self.getRequiredProperty( - ofType: String.self, forSource: source, andKey: ConfigurationKeys.merchantID - ) - let merchantName = Self.getRequiredProperty( - ofType: String.self, forSource: source, andKey: ConfigurationKeys.merchantName - ) - let merchantCountryCode = Self.getRequiredProperty( - ofType: String.self, forSource: source, andKey: ConfigurationKeys.merchantCountryCode - ) + let merchantID: String? = Self.getRequiredProperty(forSource: source, andKey: ConfigurationKeys.merchantID) + let merchantName: String? = Self.getRequiredProperty(forSource: source, andKey: ConfigurationKeys.merchantName) + let merchantCountryCode: String? = Self.getRequiredProperty(forSource: source, andKey: ConfigurationKeys.merchantCountryCode) // MARK: Payment Information - let paymentAllowedNetworks = Self.getRequiredProperty( - ofType: [String].self, forSource: source, andKey: ConfigurationKeys.paymentAllowedNetworks - ) - let paymentSupportedCapabilities = Self.getRequiredProperty( - ofType: [String].self, forSource: source, andKey: ConfigurationKeys.paymentSupportedCapabilities - ) - let paymentSupportedCardCountries = Self.getProperty( - ofType: [String].self, forSource: source, andKey: ConfigurationKeys.paymentSupportedCardCountries + let paymentAllowedNetworks: [String]? = Self.getRequiredProperty(forSource: source, andKey: ConfigurationKeys.paymentAllowedNetworks) + let paymentSupportedCapabilities: [String]? = Self.getRequiredProperty( + forSource: source, andKey: ConfigurationKeys.paymentSupportedCapabilities ) + let paymentSupportedCardCountries: [String]? = Self.getProperty(forSource: source, andKey: ConfigurationKeys.paymentSupportedCardCountries) // MARK: Shipping Information - let shippingSupportedContacts = Self.getProperty( - ofType: [String].self, forSource: source, andKey: ConfigurationKeys.shippingSupportedContacts - ) + let shippingSupportedContacts: [String]? = Self.getProperty(forSource: source, andKey: ConfigurationKeys.shippingSupportedContacts) // MARK: Billing Information - let billingSupportedContacts = Self.getProperty( - ofType: [String].self, forSource: source, andKey: ConfigurationKeys.billingSupportedContacts - ) + let billingSupportedContacts: [String]? = Self.getProperty(forSource: source, andKey: ConfigurationKeys.billingSupportedContacts) self.init( merchantID: merchantID, @@ -154,7 +140,7 @@ private extension OSPMTApplePayConfiguration { /// - key: Property key to search from. /// - isRequired: Indicates if the property is mandatory or not. /// - Returns: The configuration property, if it exists. - static func getProperty(ofType type: T.Type, forSource source: OSPMTConfiguration, andKey key: String, isRequired: Bool = false) -> T? { + static func getProperty(forSource source: OSPMTConfiguration, andKey key: String, isRequired: Bool = false) -> T? { let result = source[key] as? T return !isRequired || result?.isEmpty == false ? result : nil } @@ -164,8 +150,8 @@ private extension OSPMTApplePayConfiguration { /// - type: Type of variable to return. /// - key: Property key to search from. /// - Returns: The configuration property, if it exists. - static func getRequiredProperty(ofType type: T.Type, forSource source: OSPMTConfiguration, andKey key: String) -> T? { - self.getProperty(ofType: type, forSource: source, andKey: key, isRequired: true) + static func getRequiredProperty(forSource source: OSPMTConfiguration, andKey key: String) -> T? { + self.getProperty(forSource: source, andKey: key, isRequired: true) } } diff --git a/OSPaymentsLib/OSPMTApplePayHandler.swift b/OSPaymentsLib/OSPMTApplePayHandler.swift index b60ae67..242d9db 100644 --- a/OSPaymentsLib/OSPMTApplePayHandler.swift +++ b/OSPaymentsLib/OSPMTApplePayHandler.swift @@ -1,3 +1,5 @@ +import Foundation + /// Class resopnsible to manage the Apple Pay payment service requests. It delegates every operation type to its manager. class OSPMTApplePayHandler: NSObject { let configuration: OSPMTConfigurationModel diff --git a/OSPaymentsLib/OSPMTPayments.swift b/OSPaymentsLib/OSPMTPayments.swift index 9a429c1..e01c6cb 100644 --- a/OSPaymentsLib/OSPMTPayments.swift +++ b/OSPaymentsLib/OSPMTPayments.swift @@ -1,5 +1,7 @@ +import Foundation + /// Class that provides the bridge between the library and 3rd party consumers. -class OSPMTPayments: NSObject { +public class OSPMTPayments: NSObject { private weak var delegate: OSPMTCallbackDelegate? private let handler: OSPMTHandlerDelegate @@ -16,7 +18,7 @@ class OSPMTPayments: NSObject { /// - Parameters: /// - delegate: Handles the asynchronous return calls. /// - configurationSource: Configuration source, containing all values needed to configure. - convenience init(applePayWithDelegate delegate: OSPMTCallbackDelegate, andConfiguration configurationSource: OSPMTConfiguration = Bundle.main.infoDictionary!) { + public convenience init(applePayWithDelegate delegate: OSPMTCallbackDelegate, andConfiguration configurationSource: OSPMTConfiguration = Bundle.main.infoDictionary!) { let applePayHandler = OSPMTApplePayHandler(configurationSource: configurationSource) self.init(delegate: delegate, handler: applePayHandler) } @@ -25,7 +27,7 @@ class OSPMTPayments: NSObject { // MARK: - Action Methods to be called by Bridge extension OSPMTPayments: OSPMTActionDelegate { /// Sets up the payment configuration. - func setupConfiguration() { + public func setupConfiguration() { let result = self.handler.setupConfiguration() switch result { @@ -37,7 +39,7 @@ extension OSPMTPayments: OSPMTActionDelegate { } /// Verifies the device is ready to process a payment, considering the configuration provided before. - func checkWalletSetup() { + public func checkWalletSetup() { if let error = self.handler.checkWalletAvailability() { self.delegate?.callback(error: error) } else { @@ -47,7 +49,7 @@ extension OSPMTPayments: OSPMTActionDelegate { /// Sets payment details and triggers the request proccess. /// - Parameter details: Payment details model serialized into a text field. - func set(_ details: String) { + public func set(_ details: String) { let detailsResult = self.decode(details) switch detailsResult { case .success(let detailsModel): diff --git a/OSPaymentsLib/OSPaymentsLib.h b/OSPaymentsLib/OSPaymentsLib.h deleted file mode 100644 index 0a5367b..0000000 --- a/OSPaymentsLib/OSPaymentsLib.h +++ /dev/null @@ -1,12 +0,0 @@ - -#import - -//! Project version number for OSPaymentsLib. -FOUNDATION_EXPORT double OSPaymentsLibVersionNumber; - -//! Project version string for OSPaymentsLib. -FOUNDATION_EXPORT const unsigned char OSPaymentsLibVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/OSPaymentsLib/Protocols/OSPMTActionDelegate.swift b/OSPaymentsLib/Protocols/OSPMTActionDelegate.swift index a990bcd..07d71a7 100644 --- a/OSPaymentsLib/Protocols/OSPMTActionDelegate.swift +++ b/OSPaymentsLib/Protocols/OSPMTActionDelegate.swift @@ -1,5 +1,5 @@ /// Protocol that provides the server actions the plugin provides. -protocol OSPMTActionDelegate: AnyObject { +public protocol OSPMTActionDelegate: AnyObject { /// Sets up the payment configuration. func setupConfiguration() diff --git a/OSPaymentsLib/Protocols/OSPMTCallbackDelegate.swift b/OSPaymentsLib/Protocols/OSPMTCallbackDelegate.swift index 3f72095..2abd5c9 100644 --- a/OSPaymentsLib/Protocols/OSPMTCallbackDelegate.swift +++ b/OSPaymentsLib/Protocols/OSPMTCallbackDelegate.swift @@ -1,5 +1,5 @@ /// Delegate for the callback return calls for the plugin -protocol OSPMTCallbackDelegate: AnyObject { +public protocol OSPMTCallbackDelegate: AnyObject { func callback(result: String?, error: OSPMTError?) } diff --git a/OSPaymentsPluginLib.podspec b/OSPaymentsPluginLib.podspec new file mode 100644 index 0000000..bffeff1 --- /dev/null +++ b/OSPaymentsPluginLib.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'OSPaymentsPluginLib' + s.version = '1.1.0' + s.summary = 'The `OSPaymentsPluginLib-iOS` is a library build using `Swift` that lets you set a payment experience using Apple Pay.' + s.description = <<-DESC + The `OSPaymentsPluginLib-iOS` is a library build using `Swift` that lets you set a payment experience using Apple Pay. It allows to set the payment's details, such as the merchant’s information, payment amount and currency, as well as shipping and billing address. This information can then used to process a payment within an app. + + The `OSPMTActionDelegate` protocol, along with the class that implements it - `OSPMTPayments` - allows this interaction, providing the following operations: + - Setup Payment Configuration + - Check if Device is Ready for Payment + - Set Details and Trigger Payment + DESC + s.homepage = 'https://github.com/OutSystems/OSPaymentsLib-iOS' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'Mobile Ecosystem Team' => 'rd.mobileecosystem.team@outsystems.com' } + s.source = { :git => 'https://github.com/OutSystems/OSPaymentsLib-iOS.git', :tag => s.version.to_s } + + s.ios.deployment_target = '13.0' + s.swift_versions = '5.0' + + s.source_files = 'OSPaymentsLib/**/*.swift' +end \ No newline at end of file diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 873a933..142e323 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,18 +4,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -### 2022-08-03 +## [Unreleased] + +### 2022-11-14 +- Add `podspec` file. +## 1.0.0 + +### 2022-08-03 - Feat: Set Payment Details (https://outsystemsrd.atlassian.net/browse/RMET-1723). ### 2022-08-02 - - Feat: Check Wallet Availability for Payment (https://outsystemsrd.atlassian.net/browse/RMET-1695). ### 2022-08-01 - - Feat: Setup Apple Pay Configurations (https://outsystemsrd.atlassian.net/browse/RMET-1722). ### 2022-04-12 - - Create repository. diff --git a/docs/README.md b/docs/README.md index b069b67..35441e7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,81 @@ -# OSPaymentsLib +# OSPaymentsPluginLib-iOS -Welcome to **OSPaymentsLib**. +The `OSPaymentsPluginLib-iOS` is a library build using `Swift` that lets you set a payment experience using Apple Pay. It allows to set the payment's details, such as the merchant’s information, payment amount and currency, as well as shipping and billing address. This information can then used to process a payment within an app. -Commands to create the xcframework: +The `OSPMTActionDelegate` protocol, along with the class that implements it - `OSPMTPayments` - allows this interaction, providing the following operations: +- Setup Payment Configuration +- Check if Device is Ready for Payment +- Set Details and Trigger Payment -"sh build.sh" (will create the xcframewotk file in the output folder "build") +Each is detailed on following sections. -Copy and paste the file in the plugin. -path: "PLUGIN_ROOT_FOLDER" src/ios/frameworks/ +## Index + +- [Motivation](#motivation) +- [Usage](#usage) +- [Methods](#methods) + - [Setup Payment Configuration](#setup-payment-configuration) + - [Check if Device is Ready for Payment](#check-if-device-is-ready-for-payment) + - [Set Details and Trigger Payment](#set-details-and-trigger-payment) + +## Motivation + +This library is to be used by the [Payments Plugin](https://github.com/OutSystems/cordova-outsystems-payments). The repository contains a `podspec` file that is published and available on the `CocoaPods`' repository, and should be imported on the Cordova bridge as a `pod`. + +## Usage + +1. Include the `OSPaymentsPluginLib` pod in the Cordova Bridge. o accomplish this, the following needs to be inserted into the `plugin.xml` file. The `spec` field should be changed to the version the developer desires to use. + +```xml + + ... + + + + + + ... + + ... + + + ... + +``` + +2. Go to [Apple Developer Portal](https://developer.apple.com/) and configure the Provisioning Profile with the `Apple Pay Payment Processing` and `In-App Purchase` capabilities enabled. + +## Methods + +The library provides the following methods to interact with: + +### Setup Payment Configuration + +```swift +func setupConfiguration() +``` + +Sets up the payment configuration. + +The method's success is returned through a `OSPMTCallbackDelegate` call. Success operations returns an object of the structure type `OSPMTConfigurationModel`, encoded in a UTF-8 string. An `OSPMTError` error is returned in case of error. + +### Check if Device is Ready for Payment + +```swift +func checkWalletSetup() +``` + +Verifies the device is ready to process a payment, considering the configuration provided before. + +The method's success is returned through a `OSPMTCallbackDelegate` call. Success operations returns an empty string or a `OSPMTError` error otherwise. + +### Set Details and Trigger Payment + +```swift +func set(_ details: String) +``` + +Sets payment details and triggers the request proccess. The method contains the following parameter: +- `details`: Payment details model serialized into a text field. This model can be checked in the `OSPMTDetailsModel` structure. + +The method's success is returned through a `OSPMTCallbackDelegate` call. Success operations returns an object of the structure type `OSPMTScopeModel`, encoded in a UTF-8 string. An `OSPMTError` error is returned in case of error. diff --git a/docs/assets/createRepositoryButton.png b/docs/assets/createRepositoryButton.png deleted file mode 100644 index 423ed4af659df90736f8470198d25b36a4b1db3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13627 zcmZX)1z6k9vOgT$wYa-GE$&WncMD#$xVw9CcXx*tcP&=j-6`&n{P~@8?!D)E-#pLe zJK34fOm=2=v)P?UWkqQeL;^$r0DvMZBcTcaKp=h4Jn*m|@28U+2LJ%#A8T=OWm$1? zGG!+R3u{|*06-=(B@IqJX$3Rj5?scud;Dcy8JZpvqBw*^r zxje#HXI2s&W(jgs7hQ#kDGKEkR!3s~2nd11a0y3Z;=bj1nZtb~f5@No)7jD<^qPkN zz%pu;NrqsANT8p@k%sp8v%CArs@)QRQXc?_3B<^v#9$xj7XwgmKGboz;ff?Zq~4p= z`h!6|QHW`@I{*MRMfPNhBL{}P^c}u5)f6m1Bm61Wxk)lwafrgQ6NqZZ+d9!t^%r1M)#O$mSp%^zl0_REJ_E2+*^EHLz7n*hR zut7E;jy`Y58R0Nln%wly;Nv)!?UtppqQvBy#0}D#g#EPLGJal-2_@&urns^kyESVn zv`DADj?Ol@ZiIg}qz957A~y{+y?*^ubl@ixPd#na8y}UkLnJ!ckDppB4Ld#jH2My- z4(asEW$X2JGxGPm%t#czXEYvLvbZgRJm_k&JUc?jXyT>*ezV#xVAQjcZsplYx2D&f zMn@@6GCcvG@Jh}5ZP&%Ds5 zfh;9Y!IXkKR@xMSm&@7eq4nVbAiueGBE7TGRq+a6v1jRvi3ZS5Fd|{exMzMx6p6+H zdon}3e}wM#;b74NDU@M!MMymv)1hpNg=n{7I|E4JAq&V52ZN~t zpq|J+MToL!Lo5aXm0`JpFY*!3VO~Xvc_8BgaU2P<;nI4)I6|#Mpami$2c;Q9#{_emw}fpz@FhNM`j4G%=c9myyJ91fFi_D~ z;g=ACL%tVs{7`hEmBRQFVH24$D77oOOS#LB8EGcrL>`(1UHql^>zvA*xvKEVC!J7R z*#~mk#FG8k{osAK8{Zp##89Brbs?2&J=DsQq}Il zH+`5gVCimIzXrYPN}ZFac|cSlftqhQ(J9|4#Hr+IK7(dT?YOFf8nc>U;c5|IVQC?k z60;PuQjP9KOr|_>iGAsm>a_A!v7h{V?TaOfAWA8$QjtWF%3kR(oC2`|t3s|tg+(-rTbTRnqMY}>%Hk^09G9e4JxpYE7%#9)#}@48s=b4*|XwU zyi)>Lg0Co#_z!q-gtM`Qv52vmF(ibaV)2LRhu32GW2EJg<#E!h*{s<-jlZ&)r{5^J zr@LkNu@z+vW!7-puzM>m6*nEj+`+z3I!FC1^Gx-OeYQiYh8dvP0JaUG$Su#!COYWY zd2S%KIyGWyU$ma)1ZV7VNb{6gDCT`x$+XTf-7wy8D6;aqE-JWZ;9Iz6IQMP!;q~D~hWqr7)Aru) zU8doCTC|q54QfSy>YE~+6K`3Lgu)moV;Ta#ufXi>UNo*AG*8fK(Jt98nb!KZ>vWWK z5IcDbH4-7Mi4jvV%2YU15`gDTAwm^1`&kBE(m5dXa)~Yz?lg3Qoj!`cswB#}PLOUU*_i zQn4T8c(??ZI{DsoLJS6@B5Gy6?az&h|1eeARLLqNk;;;mE8+)YnPQrrnhFiR45yBa z?;Z}<#B|`)5wk`(DD+YfQq9xEu-xc1`_38{ngYM?ZVcTGc}CYU%^D^)>`$r=m7JH1 zB(cdh$c86&*Nd-wIiEGtys6#Ch(oi4JEC5S?ug}|bUsSC4O3lL8&}IM`&DMIKz!(Z z!}wGOEfmDim(|?c++|HVC;kVmRLN}6;!|QI_0v}@o#bTQ2Cel_H36O z93NyK5HlicRU6FqB>r^TVzAPvL7+t>)O~MqG|u`tN;z!^cT! zxJqr$SN5B&r!CGcb`CrA1ls0P7}Ic*(QFOsTRaKv^iEnI*V62JRN3o*m#Dj_C#X8+ zGUjKBNjX{Weige~8x;?=_NyfwRc1@!8|xd~j~*A+>s4)SwwFhwFv6Q_xb<~EhpS70 z!fyUkAWJwPs>}P}Q$@FCM{D)NndpwFj)8=MWtX$>JNbrq7Qr^G^}yB6-~e~r6N$B5 zv;F!~@us>P7Eua`@3r&Xw0k@Z=^4)y&!$KJ-C%9fd{W78WoN%z8KfS`MS`tWZ-!%a z=`6jqF(X?)UXRr)mwWsc&a5fSX`GxK9xX@vW`lXqsn6+iU|b0?8tb4z`v(5ziZlDu z?tvUAjm3q%W6Hp-$LA&LEJaNVUrVo+*TCkl+quwl)m|N~ceYn%9lw!7*N#(Bjl19F zN>(oS^wv$6>j~G{LkmCB<=tj%w|5BR+ye{dP z5WA48Z``}U=iFDA$C8_>p`})bzAX|3Ge!A`W#Gd+U4R&tqAbMrg{T=z99)1G6kxaT zG12}D>yKidWu+sE z7P2DQp}|3ZGy6duz*UO_5ZGxB+_hm=J%<9Uj+7of%l47L1)wI-LwQj};RF1WPISOZ zf}jmZPZ<9OFmy~4u2?S;$I-_wSJPZu)(Ig5v#<3A99fCt|PX=maj~$muu%vhl97=KIGI`SsY*!w2mbL%kiyEv#gUJd)!p5l#hsJI!O4=9 zotKxFm5qaygM;})g4x;A-o?a&+1{D*-%9>RkA%6isgt#%i?xG2**|(sfDW!Mf)o`0 z82aDWzrUxshxPwivUmQ^us#OJ`VWVdorR6{e|3LA1^(&fQ?~Xnx7Crbw)=3;hYg`G zTmt_R|Nk-m&)|Onwf_&u!NvXG$p7N}e~}u_=1$@cb{`g9g#Iru{{jCu^FKfV)_(^6 zUyk^h;4g89xl) zViOFu$>R?$cot&Y_qLqwdOUA@(DknC0<}!=J}MRhHDiIConkV_ne`O=p6f`MWb|KU z$)?AmqcJRLAcfV?Epvk`^C2lFrEBIo)6)PoOBRtM+Dj+E=LV4JD`PCa*oAOxPcnRY z$Y&_wXqZDb?Si2@s7PQkA3mm}BTgkn04*_0lloR&i165*g@IHQg*3VKD4CvRb+&f5 z3-kSHu<6Hcj=z?M3iv+qKzj_YDhvx!rPz~We?oz&MMv+GnGuO@;ERaiy1AG4cc>xb zDx^ePgh`V4oSDxe#+9RtKu!z`QxB<0)8L~8jfHteS{ZS1SwCR(HN+BvmyCC411jJ= zpzM#b{*~e{Xr4slEh4?ZT-09TAR?3+5>|UH{W#}R%GuKaJ283S^9(`?%*MzI8W+x5 z9?kjyj6Xd_Iq|u^0pPFp?ysJJl{r82!EX2+L)}d>tgmlFW{3rZFC8krgmHwzPb6kndA9cOP4lF0^=a>}Et_zC?eM9IhVw^dJ6RWK9c zCt$G0T^2F+tAwgJBhsV=Wwmf7;_pe69%cOjq856v zAF8)wFZ?t@iN^MsBHlrYGU3zH)86@%a5vuRL$yOBQIj2itB$CNX!3=NK08^s>(d5W zR}ydaZ_J)k%meu6@-eY7lw|TePp0HQ5NOZDJ_(!8yj}d2+J67I{~@d=$N;9*)H0X4 zGGk$&7%YBu$;}JRD{V1Wqf+|rmYW}8rWj5HPv6@4b|ISp+0oBo4G)CC|33BL#PLI1 z83h>#;6*UNf!8jLDhLw*ckSVoZc926dNR+*qx zEhK@!w`d{+Rcjbdls=}^8VZwqt~LInsQ@pLoj;ZIEU%TyIp1W4#tN^QqVywVgdm>l zw7OjK4Va;ePvDM?5t(B-qFOh_$2bjAz<1euQDuAyM|Kg92?UQI@e=YIw9-+u5HrfU zewAWMW7w@p8l%xqC{91zSgI$KRS#u^K#J}%sr!R|Tr~Vs>;@Lzo z0+C#OIKYKT_@7{lEQt1#iu#g0jbwxttwF^6QGm=brlG+8%rrR@9Z@nsC;GD}O-Chm zv;eve9Z`%P2?P5Izu*(R7BBXfbx*I>iFo^g;TzMB)!*ImT3Q6N$7?id*~|s)DZI&% zgO*%I7C$f}a+C*ywpCUve1`|uuGtO224Z@TLGsQKBBqIt;TdNLzu~RCn$JzMsfoEs zpXM~uQ>yZu$9N*`6QbR_Ln?SbG=A;4$|y80s8lSkIn&gK^+g!#UHI{dia#E>yj75DbQuB5Rs0CnZZqxpI}1W*xtLg2Uq?i#L3&IsyFv~x*{FkTaS0Tk>hZ!qdIhaw#|maP26_Sb9|>D>7+pE zeqS}PTXJom;~2N_z;D#D)iL)CGceb?;i5jFG;!k4b%mZ4jUhsZCMkdWJCb9XLy!aP z$@#pzXs1`y>XFrpE^=4hhT}zCW`=WDU{f3tEHuvDJc0^e7O{#U{^${*<&$IlF z^uDLrC)4Y_`j;EQu*K`t1=sh#63qi6J`V2=s_%HOI^m4xbxoU%^wC1{1h0LKVE-i2 z`XnB}+iQ(la~@z(9Jg{3*;ra8a#tR1q&IiB#NFu-FgeJa+`!WJyAvQ*!vxKq za~XtYtGtf4WgnII;XnbG^8yin8rwed>k}6bs18#3d2Vm%_!Zmh- zYDG;ucdTt`i@&fr?vD7nY{a(Dw!-Sno-y@GaN>UPN35+#hNq@myJNZ>UBw5IZsZnE zf+t|*QCb-ukmZ+)Vxf)u#bCEhQdZFHLDjA5w|=j-_E8p|9euOs2&o5mx>qAzzd4Y( z5nVyt11E@fUTE_d*9Fj$>+fCBGHH#{Eq`*O@Y~)a)0+_lI+G-k9i8SAjdEW^Plwi| zUgh@kO?PUm^(*YG$B4#AvF#El^-dnnGJun31JgnxgYI z8Tb)b*e-|AwYiKItszbLwaND(nx4!59&%#5+}5><#JtBJ?CEVXj^wtq;;y}9I^8^O zozd#H2J3yA7i`zRj*ys_qO*`Y(s+5C9hMpevYmRJ`s;V*_j=UtzjDQB*t!>IOH+b{ zbJ2L9r@8Doec#wT@AM#$`g>%7Z)!Y$DoTOTcDvnZIT1zfb2~7`ui;{Y%~{Cjuiyj8 zlWY0XFhhw(b5mYdFPFWM!}L7~aD>#eIz@rrbb_m{UewgzB)Si3Yq3dbHjS6@NC!Xp zOWnfc&2{-(atY~L{*r^z1Gp3CXstKyof*z|lyS1nn$dDqq3(U%t)OP!#y|O<|CvLM zHO+$ms&iuNsLS#(riZkKp_Th3zO@p&Qa8LzsZGh@Jxzm7%kY`s9eXvz(_zhE?=o1C zU@hqgEESh%+TwA`(Q)0Pcb-*KC1Ue19MGUi-PNdIbRFu-_luI~Nx#aF9j?h4`;6y_ zX=2Z`Kc8^@jNWD|zvkZCHNdw4NaN)5W^~EjPjK|v=^Y0*=u-FW<@}k8#I8!eJ4(R_ z6q*xuorBUX>|2tTv$ad>rZ#dmvt_%cQa?~yn`zG7$%QT)s%&Oyx&m^H_rADv-Wr-* zpK4V07yoPVx)MQn(LjP`<>QWxy?VyE*&I#_I@~(HOj_G)L)2~&`>q*qgfKkqyY|=f z){n8O!B1*0S(j!g)j`)9YGmDBj+-g0i4kh;ZRW5x(=r1;W3gV>mywRHp1;8KbT8X< z8i(t!I>R9i{QON|vUy^&-HmBgQ}&J3-jlqWCj)2{tkr|Ty}Y=t;HJAb#kF5ZYug{> zex7FPAA4B5ymusQRz|upHeOOHR`$&G?ZwL5>E`nMkP}vCYcWliVO1rh2Qub$EItn? z*}l1Ov9#ENZ`U1E^Xk?m_&jZC+n?PAQhIV8RQ)of+2RxD`yK4EvJJYby9`5z{y0(c zvP#6@_#|^1Pbo?Oqn+^vC8v(H4#DxIqdr?-SxQ=rb&7`=<`cg4$1ig6O4tSA4qa(s z+@C+s>u)c1ZsV7~maEjH1H|#=29|X6djBkr^UdKn=vy$hRX1nxqcv~R8b-`vz51-U zRApwE$LG5DSp!7v{b~uC@#OZc zCoI2$uBt$`v7RNp z-_Xznp@Yj|rP&FG+doYeQ)bUb`{t&-aow-2#Fptpji{J8^k3Z~-CXn^9<3hG8buva zZ!0%#w{sNi0<%zQn{052kZ&w&v+bNUr=>kL2sa-kZIoMbnZqgdT3lnlRIJVn8{Xo| z1)COtn*KEHrz<)5WY)mW92F89)#$+=C8O#bHNC2bxR!5e?!62};m?sCI9HeTj9KB>Q25I)uBI1m%K)x*thWk;=WAvxX5ZpPiOuI8~2 zM!g`MWbFBat~cx$HRTAM+mpHq|?@T19B-^u$SBa>HK!q)i9Z z`b=6>r<*&opVYHcvM<)0W*eXJD2`ScwbaJ8JEf;6)xk%9ZTMX6rX=C1Xz_(7!90C_ z?z|1aO*|CTVx$AHI)<<_{HL~zVLQLc*i_@ZG0AJKlDP^3q;Hex+#Gw%Ke@KA07zX2 zIb1qLYqomUXINXA{+#D~U ze2%#CU={yre9P?i2OPMK#*j!tC*F<)!W;Sp6n;`N57#m3u@yJxN4vpzdW(X_!KH>! zucig^p{bHHW{hx9y&d={%Y@Iu0`dnnvX;ub(HgZjQ)|6CW7@l~pdtIHZ z7uq$oBtM7PD(>N^Z8Puv99on0Je}C_mKxcXFkQ(zyj8hj-!0z9Wl7rXk2G~1nEWz) zAIv4I^etzF0MBtWHg=zQI@W5xFq$zas3?)_!!clQ<_o<)y!eAgot z^5+Q_-ik72{kG-%I?*G<8Qb2`z=v7pBxcT%AcOnL+b&d252;I8U^9To_FLGOxdXyE>G0 zn^U2+TA()%-k!KO(woNhqWo9~-%d?yCVzo`L{KZwla6!Ux!EFRu66(?@cN z%cR{a!aWp$Kw?JJpud5GD)dgJVvaxk~bkk>TEeY;xq&13ah?sDBNnjp9}L+s7GKmicnrz5rqXM6=|(Hy3&POPR;uPU7izTO{!cACUY zHqnk@w{fT6BL!WDTzDem7Hj>yy}dU(*fI?t{w$^e$Tn<;D_0&y=vi0J7n=4%bjJK` zsE+43lP6G{`6@$Q1b{Deq@Muh=abwAOsk7FcBYoSI%HUZZZ~O3A`=ZV#t%7mTNlf5 z3%ZndUCUm1^Kvf!FZ&wxp%k*i*U`;#)ST4BoIxDJ?3zj4Ay9KviS>LdEt0n^M3mAU z=>B;{J?mku4l{;6W8qbzHx%K-00-XcLoS~VoG+N#1KL(W+GhUWa1eR} z!lrAW#eJ(^HoLD;=4EHc13c{rnict?7qrQ-&UdxiKDB~6?i&l@(|m$(uuLDoiTkNx zcAsCB@Xy~TNPDWezJIyxTT1B_@a5EQYz%MXA=!?J%n+h9ImkIFLz6 zQ#xwJU@qHS!R3(bq_7oYhT)38Tegv^jCnV;Qm+Y|0Ox{=K+)lMm+xgH8d|Y&ArT7@ zJET+nFlyg7Jvm^ZI8r&bzp!BzBEC^$d5%F83bMgi=y?w2an*X?e7wNM8sbyE!M!_=`1kGNjc{eemH;AXUbXCAA;< zz~spm?NvH_NaUGBc6nd&a?R6GnYaO%Z#p*c+)pc4O7+S*uDW-LeH|H;P~!}5$D0vO z@z6HoRqIlROJ%OHRDMw9S~YRS^5L_nT>5tw6)`1vge)gt9oU~n0Rx9 z!^9em;DJdsBc*>|W+<@ONtyapiQeP;tCrW>ip97k$(e_ez8{MRNAd_&FDNPCVTcP{ z@MwG%kpeNTqPc5N)TXV`(B<^r;Sy;^d(AQ}jW`NrLfA^9lD(#vi>tz2jZLq6LY4$m z>u)C0%>pEUrOn|R0{tZgJK~r@2fhRfmeBnwhKTr%qsW1ldW> ztoue}3M|`*9Z(r0KH+Cq*NiKSU)l#3C>VTT;Cv28I_TtfclX^`LK6Df>WF)*wn5BR zlxN`1=fvqK_RTFllFNR}Y-HY+M!N4dBF{Ku%%aoh8A*3_d^@2abtjk+g<$YCTDYHF z&;Ql-`7_b7LD>zWBNlW0q&|F^q+~gmPQ{^XB7*W_13DhOqr1R` zDWP%1D5UDkyw?>Lz_01CwB;NF`xZI&KRsL*Um}$+XJ}3{737R%C&9B~;<-PaSX{h` zS|ts(p^qBw7Y~mA4CYxPom0LRv8Y_CSbq1#2_JXCS#oP%tt{4PlyxLI7aoZbRRma1 z*x>+A*B2{*GSOkcfN$rSrzkEew; zkgFIitk?f11!VVr+ofrJzZ&Qh0$dvy|0gmeb+bQvT)NI!4d zcBYl{%O~E%(3F`O~A}X)3wQ?9a3r7hKe?0#pA?Z=nHVlsFA1vzO+!k-u!KM|!Qx1p7msYNE$+1i z<$`k=*0p<+k6UQLqBhsEjLRx`pwx>G+uwK9>Ox^GvXB2jUwEW38SyC5wtwCITpoF@ z;S1r~ekkc_Eu7@S7#|{>GE{T(5lK3;38zO+uz1Y_5BJa8>a}WE#g}j;;))~8Rby5V zKT*idOqD~{CLdcTRN1z}l$SI2^QH+0G8DPPk(_n*1Qsm2&A#Tox-22;{ccAkpbKJ$%e%; zSJn&>?anZu0}1TvSp_D) zOin%ad7^GG6;cVqfg@S^Ey1cY?aSx4GV$+IpEnf)iY)y-0l)C$wrncCse%b4SX@-- zUY#)%CwTTdJjUr#Q5nj(!%%YvitieI+pVI8D^NxdOa(0$AUg_wQ{$a6{My5a{d8f( zp)Y`6h4SN_wuxNLGvEK_E!=MRO_p!@(9Scrj5$E9R;A(BBVo$&p#HkbZsomwc9-2q z&aVkQBl(9hp_@1i`jgSi^B2a~--FWM%Mr5byg6Doi_U92FPC)`_;fgVR>qLF+VXn* zs!pSyA77^3{v!C#GlvgJ2VFxA2&>1l)Z>z4smQ6ewDm2ZE+i!m2jmAr8ki~H^natf zmB3v6+meCLJirt2@y}$QB=ad9YYDPR)`)0(Mg<-3XxkHF4mJylbJ2J@A>1AOgL}1l z!MTQf3J-QiC)VOi7MUO^>Tz1TMhkX6UYU3)C>>^c5aCwq47b5e6*Q68O%YrX=eq}3 zH^{F>GCU6MI)Oc#YfnNscOgzKNwIrsUa}L2;W_oEGV-MrZjE_Y6)?f=T!y1P-wq7y z#1~))9D(QQx_03brM0O)X9DneUgpuh%5gD|)bv8wW}|?8sIq(Mh;0owPk|e|29aI2 zl2(MT;L(owv-&!Edj+8wsO5+Iwbe97A~boQ!TX}rdIc-={sgqJZ`i|0{sjA&L|B`A zf3+NkpPl$zu(oy{k!wl(g6(=u3hrXu&I>EArQdB5jfpOMOzVDkJ9%?|6m?*!{{qj& zGbN~pt)RE;=B`nY zY~Mo83)*vs$N<0c(QX{V#g9)T2X%K^V9z}ORd)_#Je=`kC-!QSCz|}%G~>o}asz26 zTs!UJ4ikZ_GiRU@@tYz4E=|_`Z+)A94wqoX4#hYi4V&XyJAbF$55IB;L~*hn8Svyj zUh<-F=B{r^u0i|h1rj*&>&ik2iWUOZPpqgpMzihKD4pn6#X*P?LL4|&`j7>lZ`CEy zaz|t~mm~7#Du@c?mAbaP=?aLWViQ3`TD;!!WfL7OjmDlFo@ zx`BF?s}81Y1RdS?^C3C;$A|bQ2lCl`*#f< zwL2J}VNg`Fvh5vi9=Sp1{t7V*FAhs5ZK@P!@EZ!_AE&-zvpb|@!h$uO2Ya4jKmlBg z6;d=hXNHAdgP#WkX8_0(f2H@WtT+0$?Kq@XzgfU%p>Wt(^Yd@=TC`iijD2L-8bw^EhE>1qQrD#7?MUI?-oNb6x!= zla!@H6d9zmPRgrRWMEql9cI<(p+di4$unoD3X z_X%!hRF~wWd)m{6GeoyG@^q;nG$K6Lul%Uh-HxalMm90YxXv_3|$I1TIm zt}3PdB!B1rK+B4^(L1NWMT8p&_r3?oeT1f>gDwtuSAhFL>juKUzj^<(V{gjaRD}*}L19y0U z41KgX0zd+>@>?_Yj6$;9tDK%!mw2Z40RET`vcw}H3Iq0#v%M%v6Z`LJI_W=GT>J?? zXNk~*$oriKAEcQ)BiN*{-}yn=hay*bU*oG6phOY4`@S?XsAAa%Cj2b>9@h{pE>f%( zz%9uF(D_D?6L}*#l=_30Rp#l69O4qX5nW8;AP|l^Uw2T@(OA*}4xf>;P(+ut*z{Q$ zn}% zME);U$|U3ZKw4sGCvsZ61|+8esX!iyo1zlb6BUtKp;*n-6jR0@2t7DTbkdp%c9jd5DyNL8MK~+x6d1iqake1Q~vABB*4> z8xh#29p3aqUq9!{(UK`8RFAzBAbWNrLTD+V(G~b8UtQee#UG5kDCr_HQ??2NLS}YH z0=Mg!ND$WrES<}n{onSiVMJ#FWld(~YeEr9c2$(e;ebnfc@=;4oBqsQmp8%zG)Kz> zxc+!r8x_MQjl(4eJOcS3l>cDVvmnxOI3ZVyx{G%2MpoG`1t}IPE0tYSQI&9*KF?`X z`|C*B`VXcW&Wz+Wm3=yi@Zb)y*SoV`vT|j}KuCq=V7O7Annz=35#`CM;m+2VO zaxCt>7McbzI&nKc8SM>$`BCoS-x4!pydx|`ETs+sKcgt=^=Zkn;>gu+#qkrpEZz4Q zaa<^X*b`+0B_h7iHE@!ubw5xgkG@9VD}7NRM+W@;fk2PF6CLr?rbjc4FN5T?9IBvOz5aC4c-;Kva~TRA$o%)=npuJ3#Q zD!m6fCf-tI4uCS?tI@G*$h5I6`O!i1Ud*0JB4rV;+xL zfK%ULH%w^ZBc`g9DA)>nMIRyoCMPD`@qnCx7)I>l^0tQ%Qs@I-eODZrV@A@>!ItcZK;pBpdFECbhA@1-0*rnn;W-Gn?I z3Uq`0l+XtM9QDsQJ_>(k0BGS*AQ$dp=t?VsKDm5OOo03{M@cb-yo9V9G$-KZea-C# zdUr=XUtB5avuqiLM^L#$A}#QFUN%w__ztHh%h1m}kyK(E9WjT4tA>Ll9&u5Z92aD$ z?_QgaDJM=4*|noo%U_|Ttg>ZauJ1w?h}#oXMa}+`MhhdNvXCEfuEaRMy)nXXJ|B38ew67k-||b(p|L*el}46QkE%iHTs^l>AQF05F7E@mOp_%&-S3W zj)^w3lXR;d)7}=+9i@u>3D4OJK~M=Dy$0Qgh~XOz;_$k!M1)m~N|Y(n7IyW!ZgEAQ1dvG1`B(}*X3Ev@78o+kZ;A-6Oi=fql1*7jMTuH5c0V@$SI(k2+iNuNk|0{x8>R9)q489Tz zFJpwQA~A_OXKA#B;j}z1@*={p5v~>oN6ecS6hpbWLo0YpwhL5hOW#fZi(J7&wFA+V zR!=)u=t~|t9HDuWQYt(<{5RHdVnrms*_|B%`xZO6H#H$}aiMtG40ybKy)tn0{P)#- zJ|t2p_vv>wRX`XN6oZk$ybTA(M4vOB=FW%bs(4GL$T*1tryKPc?^!ROvKC+So0JvT za+$H@!_ABGhaXn&g4y1(^`csu!d==380TQXEmL02dI*&%QG3w#Hpx^;MY~h?Qd3G~ z$GWrkdh+pSs9#^8WiwpS!?D;zkc|LGzdvVyN3OxnKEHEHUb65zs-@^hEe>IMiZ>u8 zep!+FD6#^ZE+HO-T8!bRbyag>4m->1-all-?j<`VncQ#Uepn{-Gh0TsI&WG$t;Bty zUmxsV}h2WWI{cvAn87dop9SqB+2-AE!v-9pGaQ^uPF?EP2OnF|ufTQ;4wNS#NiGi2l7^nCa8?N{g5| zXgSl~zk_AfxGRH&L5+H94DH(slW@{?jHO=Ke}8h`doM5kX8%v&fO zAv9Y zgkoWZWmq7^g?>T{bH_z4kTLoOZ-ZedeUFQH9RmJ|%YqOSmHhLg5}I;8(I1ggEViiM zKZ7*IZ~472L~u+)Kj*(_O1{JD{36lEl8IH``?-cpjKsEEO^7rhjHIv3o!A79q=#Z# zr3FO-OR(>7+v$?Z00k7Gs0Al4Q&xzjwZMWhib@otB31OWzf`wW`y=vil=)~!S?_$; ze4A4JQVn~KteE2b%4ydlDX(`~;gd4eGHz1(`KNy-jy~LSdP#mpg1nLKIkKwYsUjtQ zi=7fPGC*j}#?zRYk{O#RnkhX_N*t>@G*dgdB;_n7@TQ%z9lo7nHNs`+-U_v*P>Ava zrrj6Mp)Wg2EzTyquFQXV{!;#Z>x%n;r_oEXb$$hXMC!mbkFM^f>CGG1?8n(2LRUf3 z31g>A?Pl5|5WvI6T|rw!50Cg%z?byFi&+70HrnZHTED`M{0_s8DE?O)IS;xoDM-KG z|5BOJngM7_9upXTaaO*kV@@vGi{A_1^SKVX7RC5trEpcis9DEK!Frd9naZ4+i187b z0y!N)-?CArQKr6E{mWtulDv+5@ecj~!T`p=Zpv0s#$91x}4hqw}~dHL4=l;z{i(&COrIYLKdDyEo!*icvHQFC?cmSE#>b{vi--CGyvj?&&1)X>UJ}myKKSI7md1mm8X)Wg`R{|>? z`&p}-&s8I95v|4tJ`)hzQ~PYofbRSJ+!)hurunAX>&5}90SQ5k5Es;#a8RFPlwOqJ zO~t|0!TERJsic#Z?oXZ8QM>xgcFeUpg|jvFUpNOw#wV-0B|9YN`uh+4o5PaxpdKJ& zH?M`iQ~>Q;9wB#C3mVnL0n7P%g|M7(Jrr-0lyHXd^02%}gUD#v72Uk`)Jx7GvAvMaMl4({3WQ z*K|g8ew4J8xT;ef1YEN}RwGG-vGrs(bT@Q5(9For;uLGx^xM7z?C_`XX`t&y9QRHF zp2x1!?_w(C2IvjbofhsZ@IKYF=piT*s~XkoCc&2(J90rjtmN$`>Ezz<3ch{t`{D6} zr&@HA55x#8?FMa?>>ust>{GF0=~tLegOXc4HrecTuYV`Z50=O3;Z&g;=rpId2n3y1 ze`)%%|K(zFpvsAThTTZ#-KA-_@0-_Cy|dGG=X&}OoCr0$4AS^2J2IK*bq|k<6?`?lo%3Mm(gr;Zk zjS?nEet~>*C4lYdqhhx4>WH~>u(03CrPm!vJaYRK8oy9FX%l zt6J3Dt#jL>u+lg9VmbSV;MC@Ir}weI>3yRp=Edzsd{;mm4R#qJVs~sm!?K4EUm7(IpC*>Y$)DY}% ztcaf(W60ouDaVE|4RPo?f;UxKlu~!f9h~r|2j(R$SNzpUUjTJ0037{dpED} zPm9K{s^%R&8h9C~tBF{>6Qo132YKV7_>#OV#xHECttJOH!;Ts&Mn^b#1fw6tO#Hnt+#ati+~{`yOt-rmd0 zU4)z4*VmWJm!Hec!;YI*SXh{whmV_&kMp$$r>DQGm!%)4t0%*MDfu5gasW?j4+nQI z2RB#Re|jyg+`PTS>FNIs^#4BpWhcPT;eSVR_5AN?y-tw(Ukf)c7Z3OU)BP$c_V2EU zrh^~A*-*~G<#l;p$B+=>75h*3|G$R+9q|7M8vL)|I|07`EBSv~{(mKPJpmrFZZ5AQ zdP)4RWByzC|2F=&pcwbRiT|I4_^(y|&)wH$mcS6>{(ml$z_^H3^n`V~0{^$pP zZi;F_G_W9nu1tHoA&rZiR%}5ct>tV0k9Wp$Z+G#grz&JW|FNc!zQ921BT{>`sZ>l1 z0-O40=F~k{*TwjTi4{HqS{Uquhi}Obe$RtchxTmkVwpQielTiAK|l-nXvFBKYqgE$44^eLp&BZoLwz8GU8qBZ;Pt@13?_8PgY=Fh&5C-oh-(P16T|F zddH0v3WL=^lv#E1vnm!oAH?Hh7G@-exf*R&O*f730@-GDMPlOre*9cEoD?5DOxQby zQnK?S+SXDd@hZjk1LnHb^AMP1%)A0<1z~T8m#zKrQgV({nQg*`l`HyD`F=d!7Mn}QXCsIlmdUa++gl9zoa*gNKU#EVQbvtB3 z_`JbdJjIe^(UMiVa%$3D@EW{IW^$j$fuRD7${fI-VeJO6Z`ifab)$RcG!^A~*%OWl zkx&t2eAcH33>`6U3E};XY(g@tmb1~SWF4rpzVjtN3zOo2BK%>n9Sge?XMeQxAgLr) z*zmBSof<3?X7!YUu#KzY(W6=cRQh57bEUXP4agCq?Eh}b7F=URKFhDhY<=V_Ilg-( zQI$V`%QrrVU8I9&s275)mabz1HzM|TfSMIQntKo@rvEnai8~!+0F$CA?tjj(waRXi z)LhhDsq^U?O2?lNct2P8wJ#Bt&+pmLG>XuAC5F^bN<-B)lwpBv5Ea@&NG4->ykOb? zD6NS1wpdaKwFA%Am=_jGz7@|X%n)StR9MsUH~LolKc1@k+45(4L8;`VPW}wXHb=Lp z^=nF73>uXriIL?3u5@A97yKvP#x=~-w`eWsO0M`pY6mJV_F?YB5h}cVQ6w{I?*Deu z2=P|tzcq;cAAjBHk-cB$CFdmNCg(L<&+HkeOCC%JNc%B(Yk?sfK_NTHpkc$b?OS*p zLRQ@nF>UjgRC0u9*1Q7uhGuU>o-JK+CbW%tLGsl>3uidK3pRx7pWCiy3i68+xjJ%C zMu~UmnX37?HZD=3+@p6Kv%xjVY*Dltif_*Vdr8s>SIj6>p)IdwNlt#ZD*I;uT!uEBHTmlfrQy{c2Np!wF#U5<|Fhr>)@lw!c_JULu&`m~N9z|^ zQtFJYewL^OO$E(+oUfxaarq&SOxdTkt|Z9xi(r&3N_=~TP~*7GuL?8&adxy42aqgO!Lm=)xinf^kmHa@?;H5b-R?j!WF zAP+oZu|!hKpT^6mAO;$pprLdo?I&D?>-{_5p2DeHN+JL47nsA#ZWLfWr`3`{|1AfZ zS{vn@zRipM(rxu`hBSDv0SW*z6+X?tp&gvxq4KGh^)G55A)sv+>xvgDm6!>AwGZzm zPe(?_BPNG2-lI?ITb=>b3c`S)WYbN&hq+jt1nz$(SvYX3k^DRofGdh;7>T8ju)8*# zIek!uiBCOsB2BIv&C7Rm%3>5L|G>j5)G0BH0k7OV)n5UYCREbZ`T!Cu+ zzpXyN}%-H3pR5Tc&qx2;spuS4M+L!k&uFm%lBdqa=wGQW(esgE+c(-!SRo zx|8CNMx;3r)8E83kOI|!m(iYz>53`0Z$Sk^{k~ zo*8+R#QI)mHUA(VG|v$Le3qrH!4zHLq#SzYlp3;-joN5l_rP^r;?>Y?1{pE~QZSm} zmFYjN1J6+fc&D3{F2F#7_@*}rI;P9Kk>OP{rTWBJc+jcrg{fQzvUu%~UrgTcv<<^$ z##F8bo_6}P<%cer@o?M!6^6rUHK{KdIIW&A`+wG50h6L$d~2bfs9%FJBY=ICMlc6G zeB_JXWl2NE7Z2?JHnlq7{D7{)tygA%I-TFD!tzTn@6vY}EyN}~6rAzQ{4WP64%%Alu-w~yLtnsMo?D^?W<^7p3`>bUD zwv|Z-omsFjj?uDb^jeNUF-ALrobN5*qc9_1?gGQ0hD_z*wI=&C$-nItyPt^Y#)fl( zz4pt_57DjvnRx*OEQItl@Ve{wJJ21K|DKF+1&Q^<|2XyNtky6qexjTs^5dH2GgFNG zCeM93|ICp_dAPuF=1!199mWfd7WkQFzZ3EGSfi~a_KCXy$)6z|R1?_LW%QrZ+k+^f zxQoG>p)R-yjb2<+x*{y(`2NkkcPJ?<2P~(wJA{cu1grXkm(Q&m^^TEQA&4UpVY>W< zWrLDvmdS!YfyYwG8cZ*z2CO4dO4`DEvW6C>_FpT~f0G7BvO`n+5JzgE`3Xf_bS_qq zcBZpLtP)$^KOez0?{d@M%lSmg=Je7bm8-)Sd!(cvD%cJG2H<&RW(xB7^)HQv^QE!r zHps40+3t^~A;O_bTNq;kW#}*i;($&MuzMxgZ5$T6SwRF~M_-H|(HX~eT@JdbeeO10 z_oef0vfbx+KZAq~XpAAbpI!5$p9vm%91&{eN|*d&B{~apu<=e%^UD#W7!4uT@|3JX z-Q`XjkdZuSr9%nEK6o0n(|;zudIPd zxaY-xzF6l>F!#30)x9d^jbkx-Q7tJl5*bZ!TVI=`gp~)?T72a+j@2Wng=EJ9J&$R2 z6*b(fV4$l7(R7sEGV6;i5^87TF0b!zsNW5nk%CQ<9)YT}z{Npzi#7gA`PlT*e8XBR zR-akU=9L+y*b2AJE}L0(S4q@im;zKas;LkR0&Thqcx-5&LdIyCJgDBH7)!whZeb)> z=F2hj9(8n@5;Cc%afCU=X*2Ke<(^oQsEPKkMc?5g#};do;RDD7PXBDnwI3zJSk50d zOIB}>L57{5MUBoy8ZX7{6V^Qsa|Jy5+fVyGbknYVOTEN(OkRZxHs44}Q_L?-2tjXU zb$n60*qmFCDkV=FX<%|%H2j3NNSzl~|HWw`h5^F~wiycaJfhh}y=wqTv$+PsK#&a< zRSk{it4*L=`C?VAQKO^r9r=4kjLwVBp$&g0zkD#L@d$JQeOYd)-F1Gd17wofIij@r zOpuH2{E-zbhoIN0`X$>WZdB3&jl*CUON~`j`i%v;qe_Yt9?qP8yQyx#rbH4hErZ;w zF<$hAk=f_-CJ03#tO*IytPgJGmO@it(`HW!JW5bf7qPT?=a}4f*~<8a31;K>$#+Oz zUoan|5Nzz0Sc5;Hx>RH7wiNzwhc4_{q4o`d0knFLR+lQzK}#2Jz)@4s2+Z3 zvfq|zzs_>1T(^wsDebZg`n>6~KbBtKBWvD>jCru!YL^S(2Hm%DnzVGkRnM|{p>Yo> zDk84WD^{zGoswK!xI*`DxgVmmF3J5=tXpNUtXE;=U>?Lf=z2O&z$)x>!`ZwHUx{6V zvq=MZq5dr23_UK7jR0$1O;<1^J6RI$y~Zm3|yn=KyDv>q_EF5tTMaI$fjM`J}){;^4V3af#u zB*&5IXNBE(mbLF@aJhPxkTk@cvVNsK;Gs5`;vB<&q{jc|aQS9R+^HJ$oQ2{)|68xV z{bkMWz0*R2)z%%8D)H*N@4BUV0$KQZqL0t~`^9C!%|I7!Y-;C++hZpOp8LJc`SQi3 z8h!IdD1@dCL&!tjSar=s z*9-Ao1>n8oLfyQfq0d8ZvvK(X>Z&v03Mj1q51Blzf=Et~HW$hFHTUYCStue7|Hg#oYYVvxdot1UM$rdykrt zJPxIfEZ!*x-oj16Zv+jwgz5b@F;rDoZ$yqIHZ(G7qe8P*X`bqOF*K_6TJ;4%2sdEe z3+YKeY%xhV=CnVOr)tdqp09krQ%{=-XBAH_&>)K=YT~_Ww;6PP&0bZflE%Io_nlu; zU>#eev~qo|zU0yqls3Bmhauq){z@uDFY_#BO|%eeaJB|4nr6ut4^};9R`PYvh?J=f_QtO_>z$M9DGx)gxLty7lx15p zcbrLl)(MPnf6Nf&v2oRK9XUL2vpim`^8(n-r2d^RKqMm*3I#9z|$Xoy5@=q_)g{t>>uV;a9C{kAByWC1XKgY(n+}W!{`d84O;B;M{8gt zTsdwx#N$IxVJi2UFnGOYGgH!n_usy!>0w?{A8l^_)+>*!VAVqjpS_KHCwl*g{Vkl( zxWm0R2r@ttt=gb**@c8J4IFEv0ui zkgIDho-{q_MdHuYD^*glm`pTQX*CeDfcmMzZMhD>(>L|4wkiUi+irqm6H#?4igIQl zozoEGJMSu>dHrn7bBY8S^sv6k)xP6MHbKU3iw2WMZEmC%|NIpitfht|HSDg?IOGN2CjIuddAaZ1 zqzd@m|1h_kxJ*{!-I&tum2N3^*)7m}Q4gp`_B>qGifXJcOcWbW=L*+6n1#mHRQvxS zsbZWYd#Lw*fs$nB4Gd5L6bWwJKzu?{4{sYKQ`ZV!gI!^`KngTM%1pH0SWxsL46|~x z4^jz;?Ie7FmOfOPL7w&OqC}cJ1~5+D!Mr|>iz(f)G{z!+kNuOT5qWvzg-Y=dsHo_3 zbYE@n%!Xd*ga6jiH(BiZ=erZ@(}Jc-R%i{?UyP4DJagbOQYrXk;zw_;|a`$VlWk;-a zy6{kf#50=c-y;T>!3&V=0^ixMls1GW9P;G_4N2&q1ZUsUT>od*`-AMh@tQpIE^TD0 zlS1%fHK=d}wu2e2TLONBH9O3nWfmqh6ejjc5o6?YU?b^Onaq!-vD)=T;nc$?iaDE# zc-JHt5E*rP5XAw=?G3r3tzZ0aTUH7Dj-rqWC-&>S_p~*kzuOegY*yEf77B6=G5e5Am$9l_vJY{#!@M+Itxh3`2LQ$z~-cSf6!_Ivp1LpCJ>TMg(Kp#ICE$!OfCH2&QJT0EJsV?Ca<-tFz>Bj`>UTyVnQ?q=6)gJR68!{o-nJN*T;5>Uh{d zqqrY*GQe9l4>G|=-9*75bCfj?qB4d<5~8aQ=_=ATFS zcnW{9o05mat+4_@5P>%Vqvh|z&1yfVT>`JK6bq11QO7evnOt_t+xxIvvb-g(7^i{V z1R7TUqD1u%R(j1`GuKI=P5sJRn)Ir=^0ylGhqjZAz6V?l-lXfeu4Yf0A0ZiPFaxNx zAy4U}d=rwy?dvO!q;VKD*+x$UUw~I^X;9uIF#26-P$NkhG;uJwaVzt!K)AjoC?MzX z>2Lc*Y9kU71OIHsuiGNR?%&!)80i@`AH!q?XG_#m5DXFk*=(eS&B8|(KSydeeAhXD zx){;eq$L6OulJiQHpF^t);)M+a7tYUV$w=cjiuKfk@uzL8~k{Isx@Mbqs8iZDB=KNQMy(k)V!WN zFk+HB$!v|!(rbkH9U&gGQk=SLmS;_z#Z9Jm!)Q~6+=`A88+(m%_AS z!@QrO*q^_SRSWa^VciVDb5U6?ZkC0LL+56f%Egx0^edg6!o+yv$qMePjhneb^X@b) zf0&{@D|%y+0$M`tdkO{$VEAX>tB@e2`YmrhW`cv>0l%snHEC}duA+f{6Rgl|>r)BJ zz~s-lv49+~Uk$z&_fo)1)V4Hn3X>+R_*g2ketBHW{oA-nG%Ffb$lVghj!T-&56ZKr zih)wXD3@-k&Wix4%s{dw+%EISLu6Scuq5n}fRS1EB@6Qtt~DK!C9iE|z~9bh+nAKM z8VGY}lCg(%!e63zD;Q3pht4$lIQ>UYXRam7%XU9poA1v;`v|61X@KBu;b!-j&f-!H zMyd*9M!yP&ICHU{vGgqvC>(0T>oK1>rMSv6zAzY9+|y6o16Zn;-N~?4D5oH?0{uPX z*Qj^3`(a69?ic!|+cKxQWgMO44#qn~m3IWQZ5Pys-MIhBu$G7tD_Tmpqp&ZQdsL+M zez#S;1pad4^=O}%>F#x5YZ4sfyVr)#TTXn$)T+HoB1C?q7=5%_71006+JBN&g+W zrw2?sl+0JeGyVAOZV1)!MbS5!Pk()%fUs~ao?s{EsLyxaEHQ&lM`PRwGF9MO+%frU zMfF}D)4Aa1MDYWIk;lg?>+?*8#6L49j#%{X#xUuVNI5w@Fz2YC3pO z@b((AOvt`6cFaNI^4*8AS%9w8>YzTBs|9LtceI`0RluU@`JJWP(=LnXLbJBefJ)!z z+4x0xd<*#3DAeUP@vwwgLdx%a_IS~MNiY~c#M+4%%DO56z3j8+HgEZw2m6i1W%i0- zqN<##i;^%?SA(`~o#GJ{DT@RhWaVvDIGVwQghMO6C$t4a2sb6%aQ@{Yu^)W}*`Uiba+y6nfVchS z^*^+;FS*|3m8cu`V#N({j*R+%!^)JzOTR6cw@<|qIZ9=#oY&lF*H&GN|B%_rD6LUD zaI$E;B#+8w3OjIg!*AEy33xl*y}9%(`J8Dx*?v}sNj);!WLdqt$Mt01yEi}46CATb zwFg7Z!F8SX;6C$AZ`=gFsJpzaLfFrnvqJe$EBk_1N5&s0)jn1ge_os&u;i*vVSVu) z@kz@3Aj;ZjTk)l}vXIRDC(z4a`lW9_4>9#-67;7EboG{st0InIT%CLukI%WM1J#gO zs_7Ll`4-jy7i10Dy{@Z$7Su%|%ob@*c7S+M3JdO-0dVt2=Hn(8j8cYFi}AU!nFt8b zg4Lv4G3I?YUtyXx?-EYqwmFqFPM7#v#eT@o0fP^%PlFWhGVU=UwM(T*g=>i(44Xk3 zcYb+_OGyeXg$iBFV3R?B>APpOUX8#}Ot7q(AGP9>xx8*&<@@wtiavX;0lFfm>NZLh z#M(zZ6yr*ESK|VRYaCT<`rsGTJ2`o4@G1_Z9&w7(q-IG1x<_!gZg}`33Zk+gM3kSqx%$g9I1-d!AT4ctZRPH?2S3^`dh7m*UF{0n zV24^VTuYqAVQT3BgRU2+XUz!Kaob+7;JB0R-U;Ht!_%nF4 z7#4VwL5pT&j>}6ZW$`KX0lN{;+&aNcX3h8A`PpeA+<)vdOdE4X4ojJjbKsng_?4El zNf_-kN9MlK$!5ZPtM?SX4WO*Z;yEHyt1oW_ zhS5LY_)liNceK<6{7w}j%jq0%#sQ>r0Zc`GYUGy?_X{=a?WQcR&7UO^QHmVrf8V20 z=gaJvQ|f<+v3@J;IXDjbRV!uow0o0ZUYn@&6#G~$Mh)05MhEF}un2wU2{ojkbyq6$CsTl%ZDNLh+wD&ey{ z0kRS`sjmF+1xCnz4Rh}?kVRI*iVU?+eV>*?iEOO@(fV0u2`YKH+3p7);N4+k!P>+= z3|^&xY2=C^^G`Tae0@*>O$-e#eMXF2f8yvC7rX*g)F8C*LV1R6@m5i_Uj zHS$?vQMu`ax?cH%|8RT%#cPqgAkLzM7UdSwMW{}`UaUG-UXj<=SRxQrQw68DwK_s9`j$MWB;@7YJ=q3azsJcVDfzd3TA91 z-+5Js(5#JzN7J|7r7bvCQmxJo(-2wVy+0J6W!jvS$6#k7MEr~SpXH@qe zkJ(e6D76V5uVaG8bD1_2A_S6Yb5>P5rpOg+}v&aSq%6zsyBBbpfo zxks2S*XBM0Z$>3btOaL5!q+sjG;`~dPl+ZqjsRi_%^IZY>^L*f$#^Z@lg5%{mq%j6 z@U$vpkKRrdQY^9_CRUVYl{K{k&Duc1juIQL$ciwVU?nGm_?yk=a-DJk3CwiYvCCZ0 z`$zg1n;#2;G~gt7?gh*+Bx~^3uH?9(Tjs>Qc@Qsb{{*O_ z_EsX@tjLilu#;sL3if>4MK5QFa-o!yY{NDTG<%v=-B^sZF-#rHbvuZ$l~GvccgLoV zRAO*Vovy$g#PVfjnnD32Tiub*4IQR2GNLW4F4q-Fbt*A@pB81<(=~$gv|e%Rk@no8-ttpT|Ca)#dbflI`iljhXd62|(c9)PmX>R_ z5u)^bT=1;rAiqrtQp#7Q)u{rC7QtcwW1O6v6Td%J4R63OVe*h_?(L+g+l(X#&n>2l57Iz|_xSnb7PKSTg{c{c=b-e2)>dlNec8dan`5 zuU*9Ir#YL3R;7u{NRsgbJjou9=gEVuUzK`2`3>bc4j?4tuYEPW%GZQq?yIi_KqtCA z3md@43+_n?LkMwy(0|C6qI+bBE&Gg5D>lu3`ju@^gZ>*2OyZf_ylriChu_f4sy!l# z<1gU8K4;&!e-)F#FrF$#bWY(SZPB^>cQiHM7)YVSw?bt&_Q9S z13e@B0>yR(pGAQFYG0pzY=S)}E*W)sfqe=;-;CuWM8IO1)M-mL| z4jlFQl+&|J`f|ws!5;I3!ZGj|51Fwl`t}REI;(t8Kdq#lhuRImFja;u-Mc&qjR!?5 zEXHdmzXxFUxJCEd{@pHsj9940I{1JNxK8Maj2=&O(iKg{Wl0Hi$zq zcv=r|#@U(q_H|Rb;$vCz6+>TkjJewfD;=4a!Y0l4PJcoe-Pl(L1^iy-XdeZeA-us! zT~g1Uc{;hO36_#i1E}HGv8M~Czym9kE7GSgMLF9AGht=$i*K(b{pqAoe%w8QSRNUm zzNfJ#DA4d~rB}zjW@FssF^ZZ$&6=(s*a6@%;yto&mI_ zhTy3;3P`g1ztF#Bs0`9QnWiIOiFIace&pExmT9~zBZvN>dkVY6XpAGt;T2d<(=ODC zi%YWo&IT{!+-SlToc;ls<2*A=2%wVDjGqaAxWhsoJRg2(C^;XGyF^XzML@P~r{s2V zDaTlk8+?|d?hK5hAzZ?REE9PQXZ8cL98jKbZd>#OGP$P{jniS);8rlrtmFa6MGI=; zMz{|B)O7&(wYQBUEvSSghcZI&t3w8z%e&P&Yf3sTF9{x7oR1Oh<@)V=a?G6xxdx`^ z8xuCdw89E>w5ov^!!kaA?qnV$g5)pvqi&uB8iUYq34^M%a&d7*{R}|G+BSyF3GZr_ zR^fNrIkSBMzS5dF3McwwAWNp!7555q7ZHON?674j4S5+61C=#9;p16|+}e zd3F1;&x(WHKpD-l0~S+=vjmJJ0tktTDa=Xx@B9VAmf}0~ub2nLOL+yuG>x}|!yp0l zAf8F#@0yRp)XxJnC`E(>jGz|u%iDUU!237KDqe7tXG#UNXtKdf1Qw;~7NrI(oMMdwBM?_H47eT3hr_gq(w z;*s*hDcIV65{r$pQ{K)jZd^yWU)t(9yx@mN8QO;;8)9fOWcA|=o3(6YGvv7y}z=XY}ru}+I zRzEXSe^N{bAUF7oA}m+oI=In4<`|9$)uu`t1i&bT}sG z=GHAG3>#QSl~gv>yX1Gacoe)hsnx6@7y?q2D)monp&dkC@|(9}5IMv2Pz{c?i~ewE zrlo0p(Nt{6>-Q=At|TQg6H$M8uV1CTY}D-F;_bNjsfHzW4O;r+gMJt!;EJROvcY!I z>_R3fe83GZQODBcy_LLiU(OS&VPnVS-ZO}4;2ef^o40xZM1PrzVlAl@kpHr+BG`lj zDj2n$w{Jq5rn*p%uE$Khx>b4Zm~v^GhJn`Gc;a2Yf-z_d(R&f zwqlA&=AdD>8f+_Ol;L*T>T|<|uM83xqkXFY#&Q*ch+RY7yb&2V%=$$(=Nn1eFX#gr zNa5DacL{Idr3>|X9{9$`)&7O*4~89Ei&6#%s;a6{54m5Ry6@qp3Tmx=#B`K&I=;>T zz6h2AW0#;n3g~*mZyToa8XAE$Sc4?RZ1A{HZnluq=s_us@3L9K%vFZU0fUu02^rR9 z3Mr}hs0dwhoJ#eJ40S)d8t!;sT|}tlpdubV4x|(1;5}=nw^iePhrD-_viZN%qvrRNv-}Q2G1eiD!0wc7b+`XBhUR>{nQfJKd^yr zz;W)kW%H&_NqWMvUQ=G;`PyrW!+l@GRmj$P;?cz&6N)Z{ev1?gd^t;cG3}ud09_6h z@P&f!Ry4p`a+c?dXCk+-!5s}(*um?yL2}$sy7lguCP~>vYSq`ZA^RD)5JyIDZ3&)w zH{+}G2#ffTdoGz_;>dKR6w8LJgh?{q{0d%-4#vN5dD$eG0{hf`Ooj;X^rn6qd!7~1 zaW6q0Hey?xPkrwFeI}7fVqj>|9W5SD7!=?&&-ZW@zW#>^XgJy+Y&aX*Y#Owv6x|k!tm-f09-!;STsnCwlp_ z$!AXM{Ct60u#y?*{~`&x&kI~}Xrj=g`@Iv-2b_eYd~7o7{97Z7?Gn`!5NSWD+}&Uf zZ1kKwwjCqpRvzBG6TGk474fpElxg%h+b2OW&f9pPKMP8sZT8q3-HcqJxq=m6(zG7K z7@!BHY{vB;h$^*SJOm1cXqucQHrY^Am`Uw|o^}2{`Y>(8TET9;34bFm8+Qe(1%ocV zy}*To7Sv{NBp;Te4 zW*j~7nufvqSvEq?h0G3tiAkl+>9(SU=Dhk?)=q@F#;GiIG+<9Pu?rjwPm$8WE^l@{ zX7?(?t?Oyf%>S5)LeeKEbxT*@+==sHCH9wA`EoFf!Ld5ee)Ocb(IM#Dc{40nkE+^5 zXaC!&0Qp2+(Rq1wS6!%vq%}<^3|`^4gHNBj;8VM%>`Th=l+R%=GX!H0XptQr>Iv*% zt2!`WsTOhm3BiL15&=D41WRCo#K3+UJXjLo9i02!#76>MOZ-}T9wY7lrv#P_civ)4&PjNEmGHIBGDXx-yR{eI3maXAnxa#G^K#5?Gv8x0Btbd#5fL1x}Z*;*`Kt-Vvlye4`p&F zD3Lp83Q(gC3K-}*N}qT_@w8w3==B{vSXjw32|q|Uqs;u+2Su6?Vzd7`=JZaDeeOQ z6n33?Fl0c*O1bUB`AYg1vda*~=T&M>qa~MmgN&HM13c8gXn=fk* zPrXk}d5dmj38wkObVb81$I6len-YZu8iy0=42eo+BCY(h~FaY#SG{kB~p z@2<#5WS3C?2hsZM+7S1OIzL!>{k@V=cH_Fe!T(~ zGL(AJpCYn)MJ2lYnp;$6Xa-ZvlQMOL4^B|e6`0_XfSGi31G}2@m^8T$nV6O2U=j~7 z6886oKKI{Cn6AzIt_Hr1%yJT;V%mYP+D$(#Gu^*59Mk3QqvK@KreK6ZNlZU~Z*&93 zHM)3)n0@|aaVl^>tw^)-Uf=BC3?BM&e_HK4SNd=k8uctIp;0?T9n_C41;blt)Hkmp zV&EHPBKcv*TmUPMgj#1`pX7BsE(^ICZdpYPOvEudG2iAL#;kBJMenRrX(#vfz+mvO zzs$OI#kp+CP0F#KxVdZ4-9qi8!+TdWo(O>XSY=0E+?h~x-Cy1wM7U}4en`1xa60TI zYWkaK93i50AMZ=AJ(6RuTi7T%z0g>QN#x6fxVwI<<#A8&@q4i32Kzee1V1jy8D2$8 zI~YeLCxC1wjpkD<0-uDph&<#lB)E}x4{v@j{R~OxFgsJ=-?Dls`?gSNYPVl|F@nt+ zO8_GCL-!-=2%^_60gR<(B<*aB+prw!mg})zR2cF*^Q9hQbo9EMue@fY@VzEZin}!1 zPRuQ7NIWf3AFVFhPUcveTeAvLx#I}`GQ~xz4_|3Qu6p-^Rk-RoDLIvOUK=$rl+E2m z$&Yf!>2UZ1NcTg((*Bi7tV`4U;l*D|IU-V1<-6gTcwRSF^~ly8h<4{yu3KKb{`t^U zuYmA=gVx1?jBKHFnoBR=3VF`5_#U3SYmZM9H$3DRq~83R?6yPbh+G$1CT*d4trgMfa(RZ5TA;^IvQ8^A1;SA1BnunW^1CQj1H3fhC3@$Jp;Fk_5EgtM z1SpFMCHK2wjx^S1&t(%Xp3KLLC)st~3xvmN9w>KYTDbOO%&4zHnFRoetJ|c_>w6N; z$wDRf+$+zS^az_5+~}n}v%eHs3Gd+Uy6gy=x<=lbLYb=x(!%#wB-cWH51((V=$!uFk6cR31hjL{I&qFr8bK{tgJ@D9VW}i zp2yWsHr;TwC?PiBC?wRK%>Op7UcE>)N#imdMG=F()6@99dRh%~OnD22qZXfY?Pz7r z%CZ87sga!xH95`>ng#3wvY$_@7c35QEBn6Yo;_>^*S{thB1wCk9p(i$Nh9WI=TZmX zekwOBj1<3mw7x$X<6cd8sb{FT$^Oel&0@|@Tc5~A8Sac^Ih z06}6$mU5`>!o!G&ak{9g2mntKekQ44P$CW=apZL% zAaQ<6=X0GfNQk;>^-Oyrd#x1%jKbixw`xfsZOyrBY>qCknOEtA{IG5cp>YK4W!v*uk1LZ)Q(D@sv#*{{vvASpWY0 z>^~P@YE7Cn!LKRMW!scrrr6_;4zTGMaeoShdftT>S)*MV2^`HsogM1hvgONd8b-2> z8t$TI{rABK?N`ha8^ECLu}2Fl2E+Q?GtXGPy7jDSz&T;UILr#GVun!HX8tkLuDJXX z_0xGUv~AnA)vV|Jkt2a82L@%0U3ktp8a;DlUA=lW!FzMq8@4<4X|KKRdew;|xXKkP z$(Y`A_g%QJw*B{SWz}oeQ2YGrAb?2Xfc~6ebnJ8zyyysoBR)aMhGH3f=#U}e3DTS0 zmD~Recw9t(_P^jTn^Kt_{Kqf>GLrO%Kf)jNf5S$*s_g7JGebtgE|~uX133j#2#_Cv z!uY@W?t2LTgz@9NTps?L_Ulxu-KMU9zA|)(?YZY())vO+mfLQ(TX49A24=v+{cPl@ zQEE7wBbpFDT%$&f?D8wF2EV7;=+8cr!Mx+vTkIXIM65U7ALWAx6-V2!+s}{m-n# z|LFhv+tZIfuKqv!ob#$W@8hrdr}|2>4&pZEU4e+A*+lKNN7!*+l; z+bjMuRWhvhUL|ePTZ_MIKhG5c~_VFU7i* zz|1qb{Zz&*pN^Rs>$7wjUd0xi+Q?*YGCV}Y2>#;&;be^9;XeA~Pcb6>){Z~EqqW?p zrPZua%XY%Z{LZ`Yu}l7QkAww12 z2}_HJ3iLPB8AcPv!|N&V>PDyE`urEspSU9j&QSgh@n6*cJBNYDFF*bS5C8;V8{&WB zBF>`n{~Q=3*1sYK77_g;{0x`JibVFBbqV}8Tz|EdD_hP^Iqh_7gJshl>esj1@9ks7 zd-kw5-+Z0uh5wB=u@%6!^9K_D_~VcEaK8tbY_n_E0x$Ho8ko89O<6pNo0*xZye|!Y z!EWw#n>B0J+vR-R3=$r+kNwBkL%@RF-{E75&`g2R648EgF`tRPN zrRs7cR!SmQuYP@%ky1l=#7kmMjJQ-+%v&?X~y5_Q5Bk z?FaBNw;VqG>{I2VywH*U`S-t)L2hPn@GrmgB0SC+pG(HC4tra5WmO3C zm!GHD8K-qYeuu;Bym|AHhJhhIP_bkw6g4t3Z`A+ALDxU=f^c^^cGGp&SRc%?PY(S@ zdfb8jyS?Yl#sMegKe_*fO1cC-!rqYn%Y&bF$#p*YC@TN6o!cA!vQ>*)yIX5psfy{A zULwuLy%JW6K!oODu+`JR^kBGY>b7#yviwPc+gL+lQ4dMTF3P;L0R;3E2{>%&jy2Hy^ zbr~EC$ikxxS@jtz5Cfo`3#Xy9)a&=bn8QjNUvg zDII)pTNRVg0srBLA8CiQZKpD?VJVAVZJ;eTt8DcH$O{&6) zt3YXaQa+Sjx_lXCuFH&H2UxUtA@(GvDv8y~4kLFj<9X?YS&XvRU0GzAO6-bEpE!6zkljE9_5>J@?!|q9+mA>F(9l6|uZZ2E~ya^?ykkV}uuB*0mTP z0$#jmf%eEJ{4ieck7jAMU75l)8~hW|pKzo8cYlsucF~3Q;C+4c*|t6R-rM>;{D|Fl z=iN+pyh-?z``-b1-Fell4ft1MYb3(YM~>)9V3xdM`3n04`<5Sl{Gok}AN?PEFj6F7 z9>GRUzZ~;9gQ6$f9nqf|cz}-slAkeXA^u4I7oq?9_v>e!JDp%>p4t_qbF2&cPxVrW zKF6T5lI~6PKN1u8rI;B3mlwZ^1^!RQFDl^TSa?;;zXE^lJxW<=7)=sr_pX(!Sw}aN z&9OY&9J5U)M~;?ezaKg`^vRZMf0~F(E)Ja-eel$YuWr*IPcJ+`?U>EGgbV{eIVzgs zd3MEf(S-9Wt;6dM6wE7$Au~{n0<C4mSKC*ZH9m;F z9Avbmc+6$uq{&z|ZDnh*Z^bHo|Lu2}{jIg;*iXs8-W-+dEIqKFVhtKJu%CYZ$=<#6 z9U1ByZoJ8wVz2a&c8A%(r=Apc;x7f9#Q*(w-`I&b!8sB8k+=1_1#u}_a%+S~GyeE} zI;-XFN4)Bbu(tp;A^jEW?PK0F3`%y~xq-bs{2hDh$)~hmd*A&JXn(6d4ns}FAtKVB zc%t^R|A%5$?9k}POtT36?;o2cln6g-#-fa)nhCW-B;%9$&vQEc)6+6E=*fn4nK9!J zl}pB-AOEZV1@K=oegG5l2tQ};En2j&oj{9Uumm6RKaE^Pe5#E5*{t`#X9w$Xhm&!l zGr~U!D-C=!DHR_zNZ^O>fBhfQ;j*ZIT%1z%NCtW4pjP|BXl3hg*9RYu7UfkR#Er$Q zZr^?PvxW^D;h@YkeNbN1bh4`YI+7ptmzv{`QY82Pcq~7+z)~h>S#z<{LHd@#es0w& zRc-N-#cC7l%s@gFCqo1=e8L%Qu5|D<;pT59nWYjIi?^+WS6m8^Qx zOslq=>r*n+cY_w#_*Z?ktswaqtx1c#^cRJoH}bJR`O!a(j7GA$+JT=VPckE7T_~OL zeTvGQAq+2ZGlt@ksE1;Lun-P_kQar8LFH#zMIwz581E_h;U~yK@nfbpInES?Lksf5WBv4;xZ zFW6sd+N`Ng^;WJ_1qSX-jJTIuW6XlCxawN%i?%tNhgFeu|!B__yc=%Y`;d!ERcu(FAaG~Z77WX zEF#3jNc`dzvN6Jf={Ep({$q9}cGa~vi2kaN8kl0w zK0Q#UK}+L6+I_uy=eD1)6hiKN`d<_Z{m-1kvGjO4PVhd9Hr?O1kA^MR+;B7OSBf3n zYJb&_lo0>36ZKCd4nAbGeTD(Vi?6+|ecBtq(P|rJ`ndrPfZ@#4$268;#kb{BlRkkK;4Gi7q!cQ|x z{lluQ-~UJm?dRa5-+v#li!Zwjr;lH?ADNyPy+apHuq1dEf>c;@;9 z?A@#X20pFXc6aq(x_$EDM{2*2q48{g!T9s%KelL7_%E6M{|5XMUSBBFMB_#$G9gEBk`N&zW`8ItgWa>Y_P+C|nv@c)F_ z-$M`f!x8`PR~%Zjuy)wzsfg2s9bv@YvfFyzV%OeqlkEmW#vhx$cI{g0_uxY~d;}&znC<5& zLmEz2^^MoVei!I}U!Oj9-HkWe0XXs6s&y;T;3bj0r?a>RqyTmpLn z2Qbd)b{1x`cwP+|)}j87VX1aC?qUq}zqiDp5C$<6z5jE|(T9?(5)C0ea)`rAFuc}G zgpX5*AOx&e#H$T=*;V+b{(>1G$|m!^0f7+!NUSP|YVTA;>;Nwn}Fk5SbgFO4}i-8mBOXE3e#0dM}!w<7sURP9@ zRnaex{Pn%}4jkxtUW%T5`ty{ZWh{7LhG9~hr$H%4#nMu7pask0gaurzlViXYkz6a1 zQ{OX}JL&{xm_B{F-FWSFc2m!ucIzE?Au$DQS&Ze@OW=pRi|!~#!i4_MmPTPt&Q{zv?(@W{?4#u?R@yaJT&!)82tWH#xdDe|STn6?A;|W#tvvn9=dO=A z?s%;-@#N(?=og+l=zivzEG~C1`mb`;Di{bHZ2Ro9uj)&%quw21kM!@y8WXzm3LEN_ zAAV-Ym;Y2!q;N<8wQ>6Q--G{$VGBgx7N^sA!hx3GJ~Q7Y4&$C@=t~kmul)bb^iL^M zp_+P>BhIKZg&)kv5q^TNRLk58^V1kbOr4uTA7Np?&m{+M<7jMiv22A1o{y10IfLY4 zrH>6~(|Pd|neZT^9{X6Eg&9r;W=u=)oLWgJmbFs!t5>hZvHA=wrL5M7mm@`gEmj(s zocoV>SO$kAXu#IuFh&ZLM)3^1HV=g58(gAR7lxk##aHb$Y_toOIe(DBP#f6@w#loE z*Px~Ac}6V(f^ckqf~IU2GNu(zhtYu=341`qUjfJIcW$^dPRdTho+FHLp7yuKvHlD3 zO0n56#+Tt)OyWz%pNZ3lJW9{UN8IJopZNJm3+ci~Xd?Ra&{HKGe3&_N7C^D}-U^`p z3w|k-0GYSE_!;IW+n8^`f(6PE^?%;>NBB3U|BHg3^{$Nl=t-Cfh&D<5hX|5X6~73| zxnhON_Uu!S+SI8$yrLAfKT%gkCGmfQof_KMZ@(slgd@EQ<9|pl^2&0k3}5lrxN%ea z8q0-iR;|vhP!j%PSe9+pe0SAlJP%{BUsx9>cmg*)1>xtb{dg*R(IULnCJ8^ml)`Gj zJ0E^*6UU9WbGx4@C`D<1Vff48F%UWq^l}|5yng#dWkg5)&t~)a&h(7pGH7fM>0h;4 zHCwrAr7gwabaV6%@n@DSfz_WflBxXgJ7JX~dKT3GY=3P$ugaC8vESouPjLCspL$09 z2SYv{G|t9>tBAgvi(g2SF8SflO)eV!H>Ul$u-*4h)?tAh*pIKR}^;iefHiSP{fW3}+ z+n)$0wO<2Z5CpmpE-J@>Qz44m5dH`IJuG8P1$tZ0TW!J*<08r>=)WcLM*|pF;88o) z@BeKDe^nSxE}@A)N&M$D=eJu^FiX0FB)2}6Aa#$hj)3iOBfOF{Mzdz`KWeLdWz z$Pe|v53QeTG~8giNn<`F=MJcY08$vJjBuAWB@C3HbPx}Qn^GQx8;nYXUjP`dDyuN^ zvs{X;zzI3NE4Fl*ax&tWa;kY58Cc^M+#H>vqv7Ndtt&w%m+%vpDy+=54sciM)SbY4 z8tYg9ezqlg-b)C*M56r;8wg~9L6p#bm0|n2j7@rNLi;&WpEY}yz4gZHHWB-vP9I_1 zD)`x^f3p1>g&)*$V~~gc!cqSn>NNnk6kC7;Ez!wgcA5Gn^gsLeZ|DDjpVKYYkO$Am z|B=yf)?_Q&}Dee|C<1x6F{OXs{S>4HCh z`QIS_NfQ)J{?n)wWmP58wAq-MMG{3phcJ7XORxSX`#?EI_Ee^`_G&;_nq&~^GGNTi z(LZLc#N}Dx5n^N#N;jDP5RBuOfr#*9rnqeBav07sGJ04MQTYfzl`EgCA|jQ`gP-j~ z0sO%s@A9Qfu@_1Mhj0<_d#`x=Rfz2fWuwzsYFiS1=|D9WoyciF@oz%=Z^u3oPt=jv zsz0w=5x?3ee)wnFzp40>`7i2!F13?()2ICkdcs5AMgMPz|JiqB6mk&%HkSV*{KQSP zGM@oI`ENt`H&^}$zkk06#rv#-FEM-jw-$c1Qndf4+8^VO>0g-qNySkZifI3!4QOg; zp{X3G7EqW6FJM;`hL;@ATjD3H;Bm~a@<^xIl4E&*lw>VJeGyEOIM?@$lq> zKQcBnJA7r`vZYJBER8TFP|ypLA$$#np!ua2ZbxwcwK{QyRzo`80 z%&r0wt-SnK7=B_FUgD1N$MoL>{TuTiB?k`jPt%rH{_?Xw%;h@#ukx2h!y*GF13*8) zx=J7(Ih6KgQ-GoY1aj2?caIOMh4C)g0fJXHXB`q)2yhewKTA-HsfZ#q4o5!6?_Y-amo{3LV1^yh}YT!Q}W1-L-}A8{IzFN^r~m!AM8 zg5w~40EB+akN+dM0991}7hZK(E`ENZPdpL$B`^PzWAeox_}_V}Xz~~1Ck58;|Cs(U z|K%rtd|6F25i6?vr3F&T08pN3+Fbp(A)}(8aY$8SuCj5#M1D@VfqT!Se$s;QBIkRxVL%WfgSfgqMI6Wje~69oZ&v>oM1Q_yKP$Y{p5356$Awhq1eEmu zVAOl+6Afz+$9qxupO4*?DqRXJhsQ_q>HqxrpLK9~%EcemiTuyRqT=5a`HS(#^pE)u zJdh;+1<7B@Qf0KFNu?2K1P-LB8zTFY*Zxt01zbjp$^?apfLBKZ@s_dx7>?YP#tW+i z7a}5Mq^OWYKj)827B9scYVh_N!e^S0;f}JzuIxgFs04ys{I0AVKT63Z8kmG%@R6Fh z(~qC>vJEl*e=Ys_Si@p0!_$e!NF76G5L+*JPGT>P6We=&Xv zem?SF#Qu-zPhGs}`hQ#JKfYF#=U!-tXn)+K=$i@v1F_Dug$c*d3o#-dMzX|+}Cvwr_a z{E=W3DpRomxP*)netG$yAEM68ENNBnjA4{*WB8x!DIO*=x~L*W#LvzlUS4ASPJ@{K z5i^l7=nxK3e>eaCoB6MD)oNA(k7)6|%aL&9mH+(OU#xh^QawfYi1w0D1h57vWlAr8 z>=RC1^8cJcssixKtcEbNxl<~TpjJGNkI2Y~${*w3uIQhhhHs$a#RBB88GrnN=Q8dV7@Jb-|MmI^5<1t zpZ^)BEs&`Gg|t7$&+d)szp46vTjD>wL(WR!35{B{YU5k9J z@SpQFigQ&YKl-C~4$lX8Y>1i?T9M%Y7=MB?G5rI(lSfDlIxtOs`tScU|M6uxtMCGx z70Z_5O=tLI+(yWMAgTE)_mViy)j(225MND26paf;^u*;h4q+jVlv8w9xBcb9R801? zU*tx}VMJHTh`p5hSd5PtZB0;$TF*x#zWJPzWlfPV;E7m`; z{^fav&9Oh6OoGiKrUOAWRHugKk5f=O*Pgeotjq#Jv(J!Vy`9~Z=lF-Hc2O;6VBnbqGJe{ zlx{63J3OSjK?oU>@+WYyJmXO`5f{SYCcH8JnEo;Uxje=42h9-cpIHCWK&OeV1or@o`y=|9n`a(B$ZQ_*$$rJ`dLcHPjz5R~ z*!s(+xM^=fbnYsp^k_d>dWk&h z`0&-|d$4U-XFwiLub-!BpwH2VWXW@OvoEt&r^SeyU5(cJ+ZZ1jMHpS+3vJ@2J@c71 zKAkL!M%@`KFO;drzo94IGKwU@o990dh;#@l2SnH&6x5TUng?MV1oN8(IpZTq337A$ zeZ7@Sx~>C5l1UZl@<(E=u~KGqg0{JM7@>uD0D2etkA1a zv*E~!E-S2^aNLn{7sv`7lc|$&lF}>O|M7iC^^DV9(iiz2N49SVT*Cu>PQrwn68&Z9 znFSk9b7o3rOr}_-^yqVv7@d*HhOs#*dvQUW4$2OM4vNJvhmi{~T79uFr7D(nxZ6nh z+FYBxF|Q-@Z=TLAbrb1s!v8=|m4fv=6)TlFH33r_g#slVQO~?t zrdg)3UnP7t8d*+Du568P2yqB=XgzwC*p!tZbu{%|>YQSAYE_yl>p5#2n^xLks%#p6 znh*<(W_Qt@F-keOY^}UshgEaF&Q%%`6kSBF&*Ld3;)>!h*7@Xx%dJ%NU(RRQ=32naU{1x3L|`qODe$Q;^vhD% zC!;OT@Ap>wHreKWy%&YK(I$x|g(lfBBR?g-c>m^m2ejzWo`JWKx{*SsHCrcJhabGg zllIzrUAinH*Y%jKnH#i1_2+yC~Z} zWeaMn?u(Xl62JVjhhOV^jg#dt(oKqAMth6vY{p}ri8u-tq#eL(2t0cT_EYj3L&vKIkqX>m09giSI7T~ z2_wG|j-^f~zEBbt6zAv^y)y_i8H|pCzJ9wg`B^r}LStDYyNLQ#w!BiY82Fh5p~apB zaPVe0edO!f)^KfX2T2_jca)P#FXJG?G*c`W+^ETa!mP*w?6L+MIvetdspFV&-6B~8gPCJdzT+;fgl~>+g z?x;ew|1TOV$x`+xSN`{R(NeGojZ@KPO7xLGWv~o{*g_thA^IY?I>cm#~dKdyL zdV7AAZ|-d7Y*Mjf>(!V{^dx_BU177)fmg-P3|GhK;z2R=wOZ5L1pN=|!dt>O!;fZ% zpmyw&?1owb$0ogAI8Sf&+FJLyHYD#XlS3u>O9<1^L>bOwaQEfRJ30r~*U3wqdE>*X-+8=Gxphzw+lGfLK z8m=h=OL_*5Jy@fGaoz6+uPVEBJ6dWk_N7;)4NO2L)?IG?_jEAXZ1P{Iwgbnjg9AeG zSJbu+O^!>mCCl2L&nVNV{ZHH`$Gs9zX!eE2gqOYh&jz6>(>y+w%Z;UA-MYTZcy_~@H@J`kG*xG-VlEt*tSKmrLk*K zIzp`GoyerFd+1X z!5=R`8~v0=aYdY>rJ`+h=#P>Ap9)t%MaVT70A5pH+>Ww(WZ{n;1&t+}hn z$pk~1eIPH;!$1CBTp;fj<+2oBJv7_m)VD&dVyUVeH3zrmQ~D;_P# z7YVRdwEM|dv0(QRQ49HjNNs#sYYkb-K@5--g-T~Q50v=I=8J$IVUtQ4L`AuA!<|$j zJg2rz-%MMqFf=$QX6ZO+061=T0)smt;59o=%>yLB!bsWnwL%{?S`cm`E0QlmG#MZ; zW!K;^=1M$2uCJmj zYT@L-Wp3#NhH!a1IRAkF#JxqILuP9->e3pJi@(+P_@f?Ih^+ zRn%!^om?Tbf?PaYJoG?JT3T9hS4%5VP0*{q;ZK?by^XuOvnV&WmzNip7eAMit2H;T zh=>R`4<9!lALo+?r<;$XySX=~quY!B1o_`MAc&iVtF5!Ut&=0|pSb2=Cl7ZCdip**ZM6=P3tJKv4WI z_y1@3Z^C~8_5Tax6%_tA@?Vz!i_~$0xXL;?JY{qT{&!>k2LIdmH&C4WPvQS+#DBW{ z*XmQ7ftcdl|7;l$^H)hn0sw%Or2vxF_C`1~M$^~UBY7Z8U5zr z--^RR+LL(4U$=DnTjD72QEan&)gaaDd^GggdnqzGDXmwB$yN%;$cV`W$>Rr zyWO$8DF>%OJ*PDm4(E3|hyA9Zr8klVRUM{<12d*6n0pD<55 zS3_at9h05I9mk$P{BxWW{Jg*yA*n&EJHPJudBeUAGq%h|&bQ zs9iSehw?5KE{J>OyEx4UvHn0`5fU4jf<_WPDn~r~)ohYU{B{2^j)lv~Z3 zBfhu=|D@Y9jH0zM^B+~_O?lPsbmi z2QH5qY^b$ltiv`s)x=i*0yr@VoFi&z0l~a}snSUAkm}nm$H7yxrG%<#!XZ75xFf&k zU{@8=q_H-<+z#!e7yGzVJY4I}Ax8-o*-z0hE zNSR=#Fq^mE!5}nBzBZHh8nl8^v878q@;Q{MD?l@BF$#D(xH{%Jrazysc#kg|rt;1k zPo-L55dK4s+dYu(B)ScMDN&|}E~=dGVO(al5pgCXzM6 zC1`iVB_8y?&$=U#i?Utc z{>UeA;Xum+t|2>pS*Wxd;fdeAb;XuKJsk;`3|Qa+!)z?Kw}OZssvNtEqA+bIu{<{q z>fzI(wP*{x?kR2G4tMCSwk+SeEK+xwgw-lIjI8%=%5sO*No3%fokh6F|7GvgpHT?NI2C3^zc#Ht#yvhN7?!vi_2rqV;6V`R+4cNwy)*f+AUtN2(+5?Uszma=3lqhl29_}!E zQNijNC~y0oKBu}pads;A)0`J?zPMfr6#Zq3LQ)CZC9?D(mJIKar0;zgEpuI+STjP( zLYzEAk@JjEVjrPp=wL9>3hCHD{ke~YU%LXfUtdAi_1wqVrI+?GJCnKM5=sT8M2!T~ zHFOWGo4}lJJ26VqEZ^x9`X-r+Bz1F)WBkZ2HDEBc4aeJ8_M{G;0#rlEcP!zqp9D@; z&y_%XXzp~%NgQAIpYfg_WH3{rA$5wF>1X=*mfv;fyjWx{MY!JvhJiP9 zW@15l9|3EBU=BFeMQm%_+;BX6vg?&*vH(dyg@Gtm&SF`=oiy~k@6@dZu^T7CzYmt& z9qtjVK37#A6E}kdKu0ST0GlNlSmK?(8yK4%bweDZZir1=t|=Qk0z&UILX*yT2x{*` zK^5y@W>yIW?RtXLz=qK{<1pkW1Q@jJP^3xyPX{p6<~ zn*K&CZ}bsjV+hlKzBB^Ue{T(FJT)p+n3?=K8690xbU1Mob}G%4*k+h7O?RI$@Hn`@ zPjMob%{wRHoZHq=rCSk#>jA{qDA=T&+BQt%mH4JNI2>%}Ot<R9lYe29Lg}Lgbfv|k|)1e!ZgAaSD zH{(f}Mk;j`Pu9O^T>AChXb*Gr+WUk@fqI%<;Lz3gl-=2fN^Y~E8)Ji0qMF1ASTl79 zu?H38OaA|$_?ney3zyvY=vuSg$qDA^&o1|)Si;&Yzr@F0gModw-Bsu^3fC)Y8 zs+a>8?R`~?B#G)zt-b(iM}2fRnl>6uK5kxH&vD2d^vR6Lu@9A-vZ{rH$48ERlL+yt zgDm0BL##QZJ{gz8UnrPku-(KTKa)mC*qQee*Vd-t{4VQy{`2fyMBC`CK*-#U!`s%l z`QjD4m1p8uh3q-;;w5(}T~ptpH5=IZ$&6iARJv}LaP;(7jK7~U^LFh78n0`!+`3%2 z`JY(WsIh^ZCOE=n?)qJ>QQ%E*XrcDcZK0T9Lru9rDda2FJ zWL{u@vW9NC#`=OB&r^^K)sLI1MCAMD*(;7ywc2U%9lHd3jJ#jrSNgF<@;y!=ukmh} zj5qbJC||axfi<@KoFWqG30PE-r(G3Oa_{e^qWWWh&88n`)0MnNjz&V*BK$L&O-@b5 z?VX5uxaT8KNJz20M#iS?t?M;ctt3!!{djV%60oYJD#LZ)9#BzG=2rQF;D@}FbJX&9 z$ps_0Duy9om8j?HJzC=G8ye3~4%i4=*pKOYK0cYe{-q}8i-)O58~dch3>%u9h*m!L zMTQn7d7uJe0(Gjj7&rC#43HG()42OKDcQI5&zx7;%Y~*B6U0zqSW@z)l9m?3kgfik l^b9>MMimKbr5+pl9bQMOzY4#y*z%vlmV%rr2r6S1@;_@X^5*~m diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100644 index 312d624..0000000 --- a/scripts/build.sh +++ /dev/null @@ -1,26 +0,0 @@ -cd .. - -rm -rf build - -xcodebuild archive \ --scheme OSPaymentsLib \ --configuration Release \ --destination 'generic/platform=iOS Simulator' \ --archivePath './scripts/build/OSPaymentsLib.framework-iphonesimulator.xcarchive' \ -SKIP_INSTALL=NO \ -BUILD_LIBRARIES_FOR_DISTRIBUTION=YES - - -xcodebuild archive \ --scheme OSPaymentsLib \ --configuration Release \ --destination 'generic/platform=iOS' \ --archivePath './scripts/build/OSPaymentsLib.framework-iphoneos.xcarchive' \ -SKIP_INSTALL=NO \ -BUILD_LIBRARIES_FOR_DISTRIBUTION=YES - - -xcodebuild -create-xcframework \ --framework './scripts/build/OSPaymentsLib.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/OSPaymentsLib.framework' \ --framework './scripts/build/OSPaymentsLib.framework-iphoneos.xcarchive/Products/Library/Frameworks/OSPaymentsLib.framework' \ --output './scripts/build/OSPaymentsLib.xcframework' \ No newline at end of file