From 0a4b1c633512c2ad95b77ee844eeb29b63afd3b5 Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Mon, 7 Aug 2023 17:36:58 -0400 Subject: [PATCH 1/6] Initial updates - Updated main index and diagrams for modified object names. - Initial update of iOS - Added and modified new files for Android --- .../mobile-sdk/mobile-idx-basic-objects.png | Bin 26930 -> 26851 bytes .../mobile-idx-objects-and-flow-kotlin.png | Bin 0 -> 34737 bytes .../mobile-idx-objects-and-flow-swift.png | Bin 0 -> 34241 bytes .../mobile-idx-objects-and-flow.png | Bin 33009 -> 0 bytes ...ingaconfiguration.md => initializeflow.md} | 0 .../main/android/objectsandflow.md | 17 ++++ .../mobile-idx-sdk-overview/main/index.md | 61 ++++-------- .../main/ios/adddependency.md | 4 +- .../main/ios/gettingatoken.md | 70 ++++++++----- .../main/ios/initializeflow.md | 43 ++++++++ .../main/ios/initializingsdksession.md | 93 ++++++++--------- .../main/ios/loadingaconfiguration.md | 60 ----------- .../main/ios/objectsandflow.md | 17 ++++ .../main/ios/processresponse.md | 82 +++++++++------ .../main/ios/signingout.md | 94 ++---------------- 15 files changed, 255 insertions(+), 286 deletions(-) mode change 100644 => 100755 packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-basic-objects.png create mode 100644 packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png create mode 100755 packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-swift.png delete mode 100644 packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow.png rename packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/{loadingaconfiguration.md => initializeflow.md} (100%) create mode 100644 packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md create mode 100644 packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md delete mode 100644 packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/loadingaconfiguration.md create mode 100644 packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/objectsandflow.md diff --git a/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-basic-objects.png b/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-basic-objects.png old mode 100644 new mode 100755 index 969d05a9143b55b7cf8efcf8510e220408132d44..204f4ac9c17e9c4067beecddb21b7f90a727641f GIT binary patch literal 26851 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 WTb|Ke$$W5!5ALblEx3bu`o92PF+}J9 literal 26930 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 diff --git a/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png b/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png new file mode 100644 index 0000000000000000000000000000000000000000..33d15fc63e9fa3d94513d308a1bc17ddf13d1553 GIT binary patch literal 34737 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 literal 0 HcmV?d00001 diff --git a/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-swift.png b/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-swift.png new file mode 100755 index 0000000000000000000000000000000000000000..62e70ecf2c055c131dfa577ed04560029badf08b GIT binary patch literal 34241 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 rD{(SRrNV@x#uaBL)_c`?G}weK`vC^OJ<&;kI! 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 ZYUs+3G)uOy&kpovo@(koELXRV_+RBa^Y8!w diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/loadingaconfiguration.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md similarity index 100% rename from packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/loadingaconfiguration.md rename to packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md new file mode 100644 index 00000000000..79a268363f1 --- /dev/null +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md @@ -0,0 +1,17 @@ +
+ +!["A diagram that shows the main objects associated with each step in the sign-in flow."](/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png) + +
+ +The main objects associated with each step in the flow are: + +| Sign-in step | Objects | +| :--------------------------------- | :------------------------------ | +| Initialize SDK | InteractionCodeFlow | +| Request initial step | InteractionCodeFlow | +| Receive step | Response | +| Check completion, cancel, or error | Response
Remediation | +| Gather user input | Remediation
Authenticator | +| Send input | InteractionCodeFlow | +| Done | Response | diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md index 20d4acb750a..0777c3c3a50 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md @@ -2,7 +2,7 @@ title: Overview of the mobile Identity Engine SDK --- -Design the implementation of the sign-in flow for your mobile app by understanding the representation of the flow and the associated objects. +Design the implementation of sign-in for your mobile app by understanding the objects and messages that represent the sign-in flow.
@@ -17,9 +17,9 @@ This guide is an overview of building your own user interface using the embedded ## Sign-in flow -Okta supports many ways of authenticating the identity of a user during the sign-in flow. An Okta org administrator creates _policies_, different mixes of *authenticators*, or ways of verifying the identity of a user, and assigns them to apps, people, groups, and more. Policies also configure whether an authenticator is required or optional, as well as the minimum number of authenticators required for a successful sign-on. Many flows require multiple *factors* (multifactor authentication), the category of an authenticator. Factors include biometrics, such as a fingerprint, knowledge, such as a password, and more. This results in a many of possible combinations of the different authenticators, the steps in the sign-in flow. +Okta supports many ways of authenticating the identity of a user during the sign-in flow. An Okta org administrator creates _policies_, different mixes of *authenticators*, or ways of verifying the identity of a user, and assigns them to apps, people, groups, and more. Policies also configure whether an authenticator is required or optional, as well as the minimum number of authenticators required for a successful sign-in. Responding to each authenticator is a step in the sign-in flow. Many flows require multiple *factors* (multifactor authentication), the category of an authenticator. Factors include biometrics, such as a fingerprint, knowledge, such as a password, and more. This effectively results in an infinite number of combinations of authenticators and the order in which they're presented. -The Android and iOS Identity Engine SDKs represent the sign-in flow as a state machine. You initialize the machine with the details of your Okta org app integration, request the initial step in the flow, and cycle through responding to steps until either the user signs in, cancels, or an error occurs. +The Android and Swift Identity Engine SDKs represent the sign-in flow as a state machine. You initialize the machine with the details of your Okta org app integration, request the initial step in the flow, and cycle through responding to steps until either the user signs in, cancels, or an error occurs.
@@ -30,7 +30,7 @@ The Android and iOS Identity Engine SDKs represent the sign-in flow as a state m Each sign-in step may include one or more possible user actions, such as: - Choosing an authenticator, such as Okta Verify or security questions. -- Entering an OTP. +- Entering a one-time passcode (OTP). - Cancelling the sign-in flow. ## Sign-in objects @@ -44,55 +44,38 @@ The SDK represents the sign-in flow using a number of different objects:
- **Response:** The top-level object that represents a step and contains all the other objects. It includes a property that indicates a successful sign-in and functions for cancelling the sign-in flow, or retrieving the access token after the sign-in flow succeeds. A response may contain multiple authenticators and remediations. -- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. It includes a function for requesting the next step in the flow. +- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK it includes a function for requesting the next step in the flow. - **Authenticator:** Represents an authenticator that's used to verify the identity of a user, such as Okta Verify. -- **Method:** Represents a channel for an authenticator, such as using SMS or voice for an authenticator that uses a phone. An authenticator may have zero or more. +- **Method:** Represents a channel for an authenticator, such as using SMS or voice for an authenticator that uses a phone. An authenticator may have zero or more methods. - **Capability:** A user action associated with a remediation, authenticator, or method, such as requesting a new OTP or a password reset. -- **Field:** Represents a UI element, either a static item, such as a label, or user input, such as a selection list. It includes properties for state information, such as whether the associated value is required. Properties also store the current value of user input field, such as the string for an OTP or the selected choice. Options, or lists of choices, are represented by a collection of fields. A field may contain a form that contains more fields. +- **Field:** Represents a UI element, either a static item, such as a label, or user input, such as a selection list. It includes properties for state information, such as whether the associated value is required. Properties also store the current value of user input field, such as the string for an OTP or the selected choice. A lists of choices, or **Options**, are represented by a collection of fields. A field may contain a form that contains more fields. - **Form:** Contains the fields that represent the user action for a remediation. -- **Configuration:** Contains the settings used by the SDK to connect to your Okta org app integration. -- **Client:** Represents the session during the sign-in flow. +- **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Android SDK it includes the function for requesting the next step in the flow. ## Objects and the flow -
- -!["A diagram that shows the main objects associated with each step in the sign-in flow."](/img/mobile-sdk/mobile-idx-objects-and-flow.png) - -
+ -The main objects associated with each step in the flow are: +## Manage the sign-in flow -| Sign-in step | Objects | -| :--------------------------------- | :------------------------------ | -| Initialize SDK | Configuration
Client | -| Request initial step | Client | -| Receive step | Response | -| Check completion, cancel, or error | Response
Remediation | -| Gather user input | Remediation
Authenticator | -| Send input | Remediation | -| Done | Response | +An object that manages the sign-in flow includes the following functionality: - -## Common parts of the flow - -Some parts of the sign-in flow are the same: - -- Add the SDK to your app. -- Configure the SDK. -- Initialize the client and start the flow. +- Initialize the flow. +- Start the sign-in. - Process the response. - Request a token. - Sign the user out. ### Add the SDK +Before you can implement the manager you need to add the SDK to your project. + -### Create and manage configurations +### Initialize the flow -The values for a configuration object are: +Configure the flow with the information it needs to communicate with your Okta org application integration: | Value | Description | | :------------ | :---------- | @@ -103,11 +86,11 @@ The values for a configuration object are: The configuration information in a shipping app is usually static. You can initialize the configuration values directly in the code or read them from a file. During development you may want to provide a way to edit configuration values. - + -### Start sign-in +### Start the sign-in -Start the sign-in flow by creating an SDK client, and then requesting the first step. +Start the sign-in flow after initializing an `InteractionCodeFlow` object. @@ -115,13 +98,13 @@ Start the sign-in flow by creating an SDK client, and then requesting the first The steps for processing a response are: -1. Check for a successful sign-in flow. +1. Check if the sign-in succeeded. 1. Check for messages, such as an invalid password. 1. Check for remediations. 1. Process the remediations. 1. Process the authenticators. -After the user enters the required information, update the remediation and request the next step. +After the user enters any required information, update the remediation and request the next step. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/adddependency.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/adddependency.md index 42629a4d96e..9f123cc7535 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/adddependency.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/adddependency.md @@ -4,8 +4,10 @@ The Okta Identity Engine SDK is available as a Swift package. Add it to your pro 1. Choose the approriate dependency (usually "Up to Next Major Version"). 1. Click **Add Package**. -Import the package into Swift files to access the SDK: +The SDK includes a dependency on the Okta `AuthFoundation` library. +Import the packages into Swift files to access the SDK: ```swift import OktaIdx +import AuthFoundation ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md index cf58f321535..11490c67aa8 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md @@ -1,32 +1,50 @@ -This example shows part of the implementation of the `IDXClientDelegate` protocol functions the SDK calls for each response and for receiving the access token. +Getting the authorization token takes two-steps. First, request a the token after the sign-in is successful. Then receive that token from the server. The access token is represented by a `Token` object from the `AuthFoundation` library that is a dependency for the Swift IDX SDK. You can store the token securely in the Keychain using Credential, another class from the `AuthFoundation` library. -```swift - -import OktaIdx - -class SignInController { - ... - - var currentResponse: Response? = nil +This example shows part of the implementation of the `InteractionCodeFlowDelegate` protocol functions that are called as part of getting the authorization token. - ... - // Delegate function called for each sign-in step. - public func idx(client: IDXClient, didReceive response: Response) { - currentResponse = response - - // If a response is successful, exchange the session token for an access token. - guard !response.isLoginSuccessful else { - response.exchangeCode() - return - } +```swift - ... - } +import OktaIdx +import AuthFoundation + +class SignInController: InteractionCodeFlowDelegate { + ... + + var currentResponse: Response? = nil + + ... + + // Delegate function called for each sign-in step. + func authentication(flow: Flow, received response: Response) where Flow : InteractionCodeFlow { + currentResponse = response + + // Request a token from the server if the sign-in attempt is successful. + guard !response.isLoginSuccessful else { + response.exchangeCode() + return + } + ... + } + + // Delegate function called when a token is successfully exchanged. + func authentication(flow: Flow, received token: Token) { + // Store the token in the keychain. + do { + try Credential.store(token, + tags: ["displayName": "My User"], + security: [ + .accessibility(.afterFirstUnlock), + .accessControl(.biometryAny) + ]) + } + catch { + // Token not stored. Handle the error. + } + } + + ... +} +``` - // Delegate function called when a token is successfully exchanged. - public func idx(client: IDXClient, didReceive token: Token) { - // Save the token securely and finish the sign-in flow. - } -``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md new file mode 100644 index 00000000000..b43825642bd --- /dev/null +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md @@ -0,0 +1,43 @@ +You can provide the configuration information in a property list file or in the initialization call. + +#### Add configuration with a property list + +The `init()` function of `InteractionCodeFlow` looks for a property list called `Okta.plist`. You can also call `init(plist:)` to specify a file. + +To use a property list first create a property list file, such as `Okta.plist`. Next, add key-value pairs with the configuration settings for your Application Integration. For example, in the following text version of a `plist`, substitute your issuer URL for `{yourIssuerUrl}`, the client ID of your Application Integration for `{yourClientId}`, and a URI that launches your app. Set the scopes based on the access required by your app. + +```xml + + + + + issuer + {yourIssuerUrl} + clientId + {yourClientId} + redirectUri + {com.your.app:/callback-uri} + scopes + openid email profile offline_access + + +``` + +Then, add code to create an `InteractionCodeFlow`, this example uses `Okta.plist`. + +```swift +let flow = InteractionCodeFlow() +``` + +#### Add configuration in the code + +The example below adds the values in the initialization call. + +```swift +let flow = InteractionCodeFlow( + issuer: "https://{yourOktaDomain}/oauth2/default", + clientId: "{yourClientId}", + clientSecret: nil, + scopes: ["openid", "email", "offline_access"], + redirectUri: "{com.your.app:/callback-uri}") +``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md index 6f0089d3f6e..b1fecbd0576 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md @@ -1,52 +1,55 @@ -This example shows parts of a singleton class for handling the sign-in flow. It initializes the client using the configuration example shown earlier. +This example shows parts of a singleton class for managing the sign-in flow. It assumes that the configuration information is in a property list file called `Okta.plist`. ```swift import OktaIdx +import AuthFoundation -struct OktaPlistContent: Codable { +class SignInController { + var flowClient: InteractionCodeFlow? + var username: String? + + // Return the singleton controller, creating the instance on the first call. + static let shared: SignInController? = { + let instance = SignInController() + + return instance + }() + + + ... + + // Start the sign-in flow by entering a username and password + public func signIn(username: String, + password: String, + completion: @escaping (Result) -> Void) { + self.username = username + // A completion handler is one way to separate the manager from the view model. + self.completion = completion + + // Initalize the SDK client if needed. + if flowClient == nil { + do { + try flowClient = InteractionCodeFlow() + } catch { + // An error occured inializating the SDK. Handle the error. + } + } + + // Set this controller as the delegate that's notified + // when responses or errors for the flow are returned. + flowClient?.add(delegate: self) + + // Request the initial step in the flow + flowClient?.start() { result in + switch result { + case .success(let response): + self.currentResponse = response + // Handle the current response. + case .failure(let error): + // An error occured. Handle the error. + } + } + } ... } - -class SignInController { - // Return the singleton controller, creating the instance on the first call. - static let shared: SignInController? = { - let instance = SignInController(configuration: nil, - client: nil) - - return instance - }() - - var configuration: IDXClient.Configuration? - var client: IDXClient? - - ... - - - // Create a client and request the first response. - func initializeSDK() { - guard let configuration = loadConfiguration() else { - // Could not create a configuration. Handle the error. - return - } - - self.configuration = configuration - - IDXClient.start(with: configuration) { (client, error) in - guard let client = client else { - // Handle the error. - return - } - - self.client = client - - // Request the first response. - client.resume() - } - } - - func loadConfiguration() -> IDXClient.Configuration? { - ... - } - - ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/loadingaconfiguration.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/loadingaconfiguration.md deleted file mode 100644 index 29d5afe4bbb..00000000000 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/loadingaconfiguration.md +++ /dev/null @@ -1,60 +0,0 @@ -Initialize a configuration by passing the appropriate values to `IDXClient.Configuration(issuer:clientId:clientSecret:scopes:redirectUri:)`. This example shows loading the values from a property file in your project. - -First, create a property list file, such as `Okta.plist`. Next, add key-value pairs with the configuration settings for your application integration. For example, in the following text version of a `plist`, substitute your issuer URL for `{yourIssuerUrl}`, the client ID of your application integration for `{yourClientId}`, and a URI that launches your app. Set the scopes based on the access required by your app. - -```xml - - - - - issuer - {yourIssuerUrl} - clientId - {yourClientId} - redirectUri - com.sample.:/callback - scopes - openid email profile offline_access - - -``` - -Next, add code to create an `IDXClient.Configuration` instance from the property list file. This example uses a decoder to read the values into an `OktaPlistContent` structure. - -```swift -import OktaIdx - -... - -// A struct that represents the configuration in a plist. -struct OktaPlistContent: Codable { - var scopes: String - var redirectUri: String - var clientId: String - var clientSecret: String - var issuer: String - - var scopeArray: [String] { - get { - scopes.components(separatedBy: " ") - } - } -} - -// Read the contents of the plist and return a configuration. -func loadConfiguration() -> IDXClient.Configuration? { - let decoder = PropertyListDecoder() - - guard let data = try? Data.init(contentsOf: plistURL), - let configuration = try? decoder.decode(OktaPlistContent.self, from: data) - else { return nil } - - // NOTE: The client secret isn't used on mobile. - return IDXClient.Configuration(issuer: configuration.issuer, - clientId: configuration.clientId, - clientSecret: nil, - scopes: configuration.scopeArray, - redirectUri: configuration.redirectUri) -} - -``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/objectsandflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/objectsandflow.md new file mode 100644 index 00000000000..aefa8229526 --- /dev/null +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/objectsandflow.md @@ -0,0 +1,17 @@ +
+ +!["A diagram that shows the main objects associated with each step in the sign-in flow."](/img/mobile-sdk/mobile-idx-objects-and-flow-swift.png) + +
+ +The main objects associated with each step in the flow are: + +| Sign-in step | Objects | +| :--------------------------------- | :------------------------------ | +| Initialize SDK | InteractionCodeFlow | +| Request initial step | InteractionCodeFlow | +| Receive step | Response | +| Check completion, cancel, or error | Response
Remediation | +| Gather user input | Remediation
Authenticator | +| Send input | Remediation | +| Done | Response | diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md index 18f327a1220..403946334ea 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md @@ -1,47 +1,69 @@ -This example shows part of the implementation of the `IDXClientDelegate` protocol functions called by the SDK for each response and for errors. +This example shows part of the implementation of the `InteractionCodeFlowDelegate` protocol functions called by the SDK for different parts of the sign-in flow and for errors. ```swift import OktaIdx +import AuthFoundation -class SignInController: IDXClientDelegate { - ... +class SignInController: InteractionCodeFlowDelegate { + ... - var currentResponse: Response? = nil + var currentResponse: Response? = nil - ... + ... - // Delegate function called for each sign-in step. - public func idx(client: IDXClient, didReceive response: Response) { - currentResponse = response + // Delegate function called for each sign-in step. + func authentication(flow: Flow, received response: Response) where Flow : InteractionCodeFlow { + currentResponse = response - // If a response is successful, exchange it for a token. - guard !response.isLoginSuccessful else { - // Handle retrieving the access token. - return - } + // Request a token from the server if the sign-in attempt is successful. + guard !response.isLoginSuccessful else { + // Handle retrieving the access token. + return + } + // If no remediations are present, abort the login process. + guard let remediation = currentResponse?.remediations.first else { + // Handle the error and finish the sign-in flow. + return + } - // If no remediations are present, abort the sign-in flow. - guard let remediation = currentResponse?.remediations.first else { - // Handle the error and finish the sign-in flow. - return - } + // Check for messages, such as entering an incorrect code. + if let message = response.messages.allMessages.first { + // Handle the messages as appropriate. + return + } - // Check for messages, such as entering an incorrect code. - if let message = response.messages.allMessages.first { - // Handle the messages as appropriate. - return - } + // Build the UI using the information in the remediations and authenticators. - // Build the UI using the information in the remediations and authenticators. + ... + } - ... - } + // Delegate function called when a token is successfully exchanged. + func authentication(flow: Flow, received token: Token) { + // Securely store the token for the user. + } - // Delegate function sent when an error occurs. - public func idx(client: IDXClient, didReceive error: Error) { - // Handle the error and finish the sign-in flow. - } + // Delegate function called before the first sign-in step. + func authenticationStarted(flow: Flow) { + // Do any initialization required by your app. + } + + // Delegate function called after the sign-in flow is complete. + func authenticationFinished(flow: Flow) { + // Do any cleanup required by your app and update the UI as appropriate. + } + + // Delegate functions called when errors occur + func authentication(flow: Flow, received error: InteractionCodeFlowError) where Flow : InteractionCodeFlow { + // Handle the error. + } + + func authentication(flow: Flow, received error: OAuth2Error) { + // Handle the error. + } + +... +} ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md index 19532b2a883..973d046b30d 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md @@ -1,94 +1,18 @@ -This singleton stores the token in user defaults. For more security, store the token in the Keychain. +The code snippet below uses the `Credential` object of the `AuthFoundation` library to revoke the tokens for the current user. You can use other features of `Credential` to revoke the tokens of a specific user. ```swift -import Foundation import OktaIdx +import AuthFoundation -enum TokenManagerError: Error { - case unableToReadToken(String) -} +class SignInController: InteractionCodeFlowDelegate { + ... -class TokenManager { - static let shared = TokenManager() + // Sign out the current user. + public func signOut() throws { + // + try Credential.default?.remove() + } - // Change com.example.okta-samplecode.Okta-Login to your bundle identifier. - private struct UserDefaultsKeys { - static let storedTokenKey = "com.example.okta-samplecode.Okta-Login.storedToken" - } - - // Save the token to user defaults. - func saveToken(_ token: Token) { - let defaults = UserDefaults.standard - - // Convert the token to a format that you can save in user defaults. - guard let tokenData = try? JSONEncoder().encode(token) else { - // Handle the error. - return - } - - defaults.set(tokenData, forKey: UserDefaultsKeys.storedTokenKey) - defaults.synchronize() - } - - // Read the token from user defaults. - func readToken() -> Token? { - // Check for an existing token and convert from JSON to an SDK Token object. - guard let tokenData = UserDefaults.standard.object(forKey: UserDefaultsKeys.storedTokenKey) as? Data, - let token = try? JSONDecoder().decode(Token.self, from: tokenData) else { - // Handle the error. - return nil - } - - return token - } - - func revokeToken(completion: @escaping(_ successful: Bool, _ error: Error?) -> Void) { - if let token = readToken() { - token.revoke() { (success, error) in - let defaults = UserDefaults.standard - if success { - // Delete the token from user defaults. - defaults.removeObject(forKey: UserDefaultsKeys.storedTokenKey) - defaults.synchronize() - - completion(true, nil) - } else { - completion(false, error) - } - } - } else { - completion(false, TokenManagerError.unableToReadToken("Unable to read the Token.")) - return - } - } -} -``` - -This code shows the delegate function that handles receiving the access token: - - -```swift -public func idx(client: IDXClient, didReceive token: Token) { - TokenManager.shared.save(token) -} - -``` - -Revoke a token by calling `Token.revoke(type:completion:)` (`type` is optional): - -```swift -if let token = TokenManager.shared.readToken() { - token.revoke() { (success, error) in - guard success else { - // Handle the error. - return - } - // The token is revoked. - // In SwiftUI, update variables for presenting UI. - // For ViewControllers perform the call on the main thread using `DispatchQueue.main.async`. - return - } -} ``` From 1ae0c6c1b57d92e343810a71f4e681b05c174825 Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Mon, 7 Aug 2023 17:37:27 -0400 Subject: [PATCH 2/6] Updates to Android content --- .../main/android/gettingatoken.md | 13 +++--- .../main/android/initializeflow.md | 46 +++++++++++-------- .../main/android/initializingsdksession.md | 29 ++++++++---- .../main/android/objectsandflow.md | 18 ++++---- .../main/android/processresponse.md | 9 ++-- .../main/android/signingout.md | 45 +++++------------- 6 files changed, 79 insertions(+), 81 deletions(-) diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md index 47739544ba4..6140ccbb739 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md @@ -1,20 +1,21 @@ ```kotlin +import com.okta.authfoundation.client.OidcClientResult +import com.okta.authfoundationbootstrap.CredentialBootstrap import com.okta.idx.kotlin.dto.IdxRemediation.Type.ISSUE import com.okta.idx.kotlin.dto.IdxResponse -import com.okta.idx.kotlin.client.IdxClientResult private suspend fun handleResponse(response: IdxResponse) { // Check if the sign-in flow is successful. if (response.isLoginSuccessful) { - // Exchange the sign-in session token for a connection token. - when (val exchangeCodesResult = client?.exchangeInteractionCodeForTokens(response.remediations[ISSUE]!!)) { - is IdxClientResult.Error -> { + // Exchange the sign-in session token for a token. + when (val exchangeCodesResult = flow?.exchangeInteractionCodeForTokens(response.remediations[ISSUE]!!)) { + is OidcClientResult.Error -> { // Handle the error. } - is IdxClientResult.Success -> { + is OidcClientResult.Success -> { // Handle a successful sign-in flow. - // The token is in `exchangeCodesResult.result`. // Store it securely for future use. + CredentialBootstrap.defaultCredential().storeToken(exchangeCodesResult.result) } else -> { // Handle the error. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md index 3e7cc859115..201f9668e55 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md @@ -1,48 +1,54 @@ -Create a configuration by calling `IdxClientConfiguration`. This code shows loading the values from a property file in your project. +Initialize AuthFoundationBootstrap in your `Application` sublcass. This code shows loading the values from a property file in your project. First, create a property file, for example, `okta.properties` in the project root. Add the values for your Okta application integration to the file. ``` -issuer={yourIssuerUrl} +discoveryUrl=https://{yourIssuerUrl}/oauth2/default/.well-known/openid-configuration clientId={yourClientId} -scopes="openid","email","profile","offline_access" redirectUri=com.okta.sample.android:/login ``` -Add this configuration to the `defaultConfig` section of your `app/build.gradle` to make the properties available in the build configuration: +Add this configuration to your `app/build.gradle` to make the properties available in the build configuration: ```gradle +def oktaProperties = new Properties() +rootProject.file("okta.properties").withInputStream { oktaProperties.load(it) } + defaultConfig { ... - buildConfigField "String", 'ISSUER', "\"${oktaProperties.getProperty('issuer')}\"" + buildConfigField "String", 'DISCOVERY_URL', "\"${oktaProperties.getProperty('discoveryUrl')}\"" buildConfigField "String", 'CLIENT_ID', "\"${oktaProperties.getProperty('clientId')}\"" - buildConfigField "String[]", 'SCOPES', "{${oktaProperties.getProperty('scopes')}}" buildConfigField "String", 'REDIRECT_URI', "\"${oktaProperties.getProperty('redirectUri')}\"" ... } ``` -Create an `OktaIdxClientConfigurationProvider` class that returns an `IdxClientConfiguration` from the `BuildConfig`. +In your `Applicaiton` subclass, initialize `AuthFoundationBootstrap` from the `BuildConfig` by calling `initializeAuthFoundation` from `onCreate`. ```kotlin import com.okta.android.samples.authenticator.BuildConfig -import com.okta.idx.kotlin.client.IdxClientConfiguration +import com.okta.authfoundation.AuthFoundationDefaults +import com.okta.authfoundation.client.OidcClient +import com.okta.authfoundation.client.OidcConfiguration +import com.okta.authfoundation.client.SharedPreferencesCache +import com.okta.authfoundation.credential.CredentialDataSource.Companion.createCredentialDataSource +import com.okta.authfoundationbootstrap.CredentialBootstrap import okhttp3.HttpUrl.Companion.toHttpUrl -/** - * Return an Okta org configuration from the build configuration. - */ -internal object OktaIdxClientConfigurationProvider { - fun get(): IdxClientConfiguration { - return IdxClientConfiguration( - issuer = BuildConfig.ISSUER.toHttpUrl(), - clientId = BuildConfig.CLIENT_ID, - scopes = BuildConfig.SCOPES.toSet(), - redirectUri = BuildConfig.REDIRECT_URI, - ) - } +fun initializeAuthFoundation() { + // Initializes Auth Foundation and Credential Bootstrap classes. + AuthFoundationDefaults.cache = SharedPreferencesCache.create(this) + val oidcConfiguration = OidcConfiguration( + clientId = BuildConfig.CLIENT_ID, + defaultScope = "openid email profile offline_access", + ) + val client = OidcClient.createFromDiscoveryUrl( + oidcConfiguration, + BuildConfig.DISCOVERY_URL.toHttpUrl(), + ) + CredentialBootstrap.initialize(client.createCredentialDataSource(this)) } ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md index b2f74991814..d6f0b832855 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md @@ -1,26 +1,35 @@ -This example creates the client in the viewmodel `launch` coroutine. Start by calling `IdxClient.start()` and on success, request the first response by calling `resume()` on the result. +This example creates the flow in the viewmodel `launch` coroutine. Start by calling `CredentialBootstrap.oidcClient.createInteractionCodeFlow` and on success, request the first response by calling `resume()` on the result. ```kotlin -@Volatile -private var client: IdxClient? = null +import com.okta.authfoundation.client.OidcClientResult +import com.okta.authfoundationbootstrap.CredentialBootstrap +import com.okta.idx.kotlin.client.InteractionCodeFlow +import com.okta.idx.kotlin.client.InteractionCodeFlow.Companion.createInteractionCodeFlow +import com.okta.idx.kotlin.dto.IdxResponse +@Volatile +private var flow: InteractionCodeFlow? = null private fun createClient() { viewModelScope.launch { - // Initialize the SDK client and start sign-in flow. - when (val clientResult = IdxClient.start(OktaIdxClientConfigurationProvider.get())) { - is IdxClientResult.Error -> { + // Initialize the SDK and start sign-in flow. + when ( + val clientResult = CredentialBootstrap.oidcClient.createInteractionCodeFlow( + redirectUrl = BuildConfig.REDIRECT_URI, + ) + ) { + is OidcClientResult.Error -> { // Handle the error. } - is IdxClientResult.Success -> { - client = clientResult.result + is OidcClientResult.Success -> { + flow = clientResult.result // Request the first response by calling resume and handle the asynchronous response. when (val resumeResult = clientResult.result.resume()) { - is IdxClientResult.Error -> { + is OidcClientResult.Error -> { // Handle the error. } - is IdxClientResult.Success -> handleResponse(resumeResult.result) + is OidcClientResult.Success -> handleResponse(resumeResult.result) } } } diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md index 79a268363f1..e6bcaf31f25 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/objectsandflow.md @@ -6,12 +6,12 @@ The main objects associated with each step in the flow are: -| Sign-in step | Objects | -| :--------------------------------- | :------------------------------ | -| Initialize SDK | InteractionCodeFlow | -| Request initial step | InteractionCodeFlow | -| Receive step | Response | -| Check completion, cancel, or error | Response
Remediation | -| Gather user input | Remediation
Authenticator | -| Send input | InteractionCodeFlow | -| Done | Response | +| Sign-in step | Objects | +| :--------------------------------- |:---------------------------------| +| Initialize SDK | InteractionCodeFlow | +| Request initial step | InteractionCodeFlow | +| Receive step | IdxResponse | +| Check completion, cancel, or error | IdxResponse
IdxRemediation | +| Gather user input | IdxRemediation
Capability | +| Send input | InteractionCodeFlow | +| Done | IdxResponse | diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/processresponse.md index 614c0bbae89..7cd5b97e3a1 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/processresponse.md @@ -1,6 +1,9 @@ The following code shows these steps in order: ```kotlin +import com.okta.authfoundation.client.OidcClientResult +import com.okta.idx.kotlin.dto.IdxResponse + private suspend fun handleResponse(response: IdxResponse) { // Check if the sign-in flow is successful. if (response.isLoginSuccessful) { @@ -36,11 +39,11 @@ private suspend fun handleResponse(response: IdxResponse) { */ private fun proceed(remediation: IdxRemediation) { viewModelScope.launch { - when (val resumeResult = client?.proceed(remediation)) { - is IdxClientResult.Error -> { + when (val resumeResult = flow?.proceed(remediation)) { + is OidcClientResult.Error -> { // Handle the error. } - is IdxClientResult.Success -> { + is OidcClientResult.Success -> { handleResponse(resumeResult.result) } } diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md index 693c93f686c..70440f9c8f3 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md @@ -1,42 +1,21 @@ This code assumes storing the access token after a successful sign-in flow: ```kotlin +import com.okta.authfoundation.client.OidcClientResult +import com.okta.authfoundation.credential.RevokeTokenType +import com.okta.authfoundationbootstrap.CredentialBootstrap + fun logout() { - viewModelScope.launch(Dispatchers.IO) { - try { - // First load a refresh token if one exists. - val refreshToken = Storage.tokens.refreshToken - if (refreshToken != null) { - // Revoking the refresh token also revokes the access token. - revokeToken("refresh_token", refreshToken) - } else { - revokeToken("access_token", Storage.tokens.accessToken) + viewModelScope.launch { + // Revoking the refresh token also revokes the access token. + when (val revokeResult = CredentialBootstrap.defaultCredential().revokeToken(RevokeTokenType.REFRESH_TOKEN)) { + is OidcClientResult.Error -> { + // Sign-out failed, handle the error. + } + is OidcClientResult.Success -> { + // Sign-out successful. Redirect to a sign-in view. } - - // Sign-out successful. Redirect to a sign-in view. - } catch (e: Exception) { - // Sign-out failed, handle the error. } } } - - -private fun revokeToken(tokenType: String, token: String) { - // Create an API request to revoke the token. - val formBody = FormBody.Builder() - .add("client_id", BuildConfig.CLIENT_ID) - .add("token_type_hint", tokenType) - .add("token", token) - .build() - - val request = Request.Builder() - .url("${BuildConfig.ISSUER}/v1/revoke") - .post(formBody) - .build() - - // Send the request to revoke the token. - val response = OktaIdxClientConfigurationProvider.get().okHttpCallFactory.newCall(request).execute() - - println("Revoke Token Response: $response") -} ``` From 5785b8e0ca5332588ba64bd72147d84fc7c7a8cb Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Mon, 21 Aug 2023 17:46:24 -0400 Subject: [PATCH 3/6] Updated code and text for new SDK --- .../mobile-idx-sdk-overview/main/index.md | 19 +++-- .../main/ios/gettingatoken.md | 51 ++++++------ .../main/ios/initializingsdksession.md | 83 +++++++++---------- .../main/ios/processresponse.md | 73 +++++++++------- .../main/ios/signingout.md | 6 +- 5 files changed, 124 insertions(+), 108 deletions(-) diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md index 0777c3c3a50..6cac549b0f0 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md @@ -44,13 +44,13 @@ The SDK represents the sign-in flow using a number of different objects: - **Response:** The top-level object that represents a step and contains all the other objects. It includes a property that indicates a successful sign-in and functions for cancelling the sign-in flow, or retrieving the access token after the sign-in flow succeeds. A response may contain multiple authenticators and remediations. -- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK it includes a function for requesting the next step in the flow. +- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK, it also includes the function for requesting the next step in the flow. - **Authenticator:** Represents an authenticator that's used to verify the identity of a user, such as Okta Verify. - **Method:** Represents a channel for an authenticator, such as using SMS or voice for an authenticator that uses a phone. An authenticator may have zero or more methods. - **Capability:** A user action associated with a remediation, authenticator, or method, such as requesting a new OTP or a password reset. - **Field:** Represents a UI element, either a static item, such as a label, or user input, such as a selection list. It includes properties for state information, such as whether the associated value is required. Properties also store the current value of user input field, such as the string for an OTP or the selected choice. A lists of choices, or **Options**, are represented by a collection of fields. A field may contain a form that contains more fields. - **Form:** Contains the fields that represent the user action for a remediation. -- **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Android SDK it includes the function for requesting the next step in the flow. +- **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Kotlin SDK, it includes the function for requesting the next step in the flow. ## Objects and the flow @@ -59,17 +59,18 @@ The SDK represents the sign-in flow using a number of different objects: ## Manage the sign-in flow -An object that manages the sign-in flow includes the following functionality: +You add support in your app for the five areas of functionality in the sign-in flow: - Initialize the flow. -- Start the sign-in. -- Process the response. -- Request a token. +- Start the flow. +- Process responses until the sign-in flow succeeds, results in an error, or the user cancels the flow. +- Request a token for a successful sign-in flow. - Sign the user out. + ### Add the SDK -Before you can implement the manager you need to add the SDK to your project. +Before you add support you need to add the SDK to your project. @@ -88,7 +89,7 @@ The configuration information in a shipping app is usually static. You can initi -### Start the sign-in +### Start the sign-in flow Start the sign-in flow after initializing an `InteractionCodeFlow` object. @@ -98,7 +99,7 @@ Start the sign-in flow after initializing an `InteractionCodeFlow` object. The steps for processing a response are: -1. Check if the sign-in succeeded. +1. Check if the sign-in flow succeeded. 1. Check for messages, such as an invalid password. 1. Check for remediations. 1. Process the remediations. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md index 11490c67aa8..0024dfe2c6c 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md @@ -1,4 +1,4 @@ -Getting the authorization token takes two-steps. First, request a the token after the sign-in is successful. Then receive that token from the server. The access token is represented by a `Token` object from the `AuthFoundation` library that is a dependency for the Swift IDX SDK. You can store the token securely in the Keychain using Credential, another class from the `AuthFoundation` library. +Getting the authorization token takes two-steps. First, request an access token after the sign-in flow is successful. Then receive that token from the server. The access token is represented by a `Token` object from the `AuthFoundation` library that is a dependency for the Swift IDX SDK. You can store the token securely in the Keychain using Credential, another class from the `AuthFoundation` library. This example shows part of the implementation of the `InteractionCodeFlowDelegate` protocol functions that are called as part of getting the authorization token. @@ -8,42 +8,43 @@ This example shows part of the implementation of the `InteractionCodeFlowDelegat import OktaIdx import AuthFoundation -class SignInController: InteractionCodeFlowDelegate { - ... +class SignInController: InteractionCodeFlowDelegate, ObservableObject { - var currentResponse: Response? = nil +// ... - ... + // Set to true after the user has signed in successfully. + @MainActor @Published var successfulSignIn: Bool = false // Delegate function called for each sign-in step. func authentication(flow: Flow, received response: Response) where Flow : InteractionCodeFlow { - currentResponse = response - - // Request a token from the server if the sign-in attempt is successful. - guard !response.isLoginSuccessful else { - response.exchangeCode() - return + // If a sign-in is successful then request a token from the server. + if response.isLoginSuccessful { + Task { + do { + let _ = try await response.exchangeCode() + } catch { + DispatchQueue.main.async { + self.currentError = error + } + } + } + } else { +// ... } - ... } // Delegate function called when a token is successfully exchanged. - func authentication(flow: Flow, received token: Token) { - // Store the token in the keychain. - do { - try Credential.store(token, - tags: ["displayName": "My User"], - security: [ - .accessibility(.afterFirstUnlock), - .accessControl(.biometryAny) - ]) - } - catch { - // Token not stored. Handle the error. + func authentication(flow: Flow, received token: Token) + { + // Setting the default credential also stores the token + Credential.default = Credential(token: token) + // + DispatchQueue.main.async { + self.successfulSignIn = true } } - ... +// ... } ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md index b1fecbd0576..02e8aecf153 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializingsdksession.md @@ -4,52 +4,49 @@ This example shows parts of a singleton class for managing the sign-in flow. It import OktaIdx import AuthFoundation -class SignInController { - var flowClient: InteractionCodeFlow? - var username: String? - - // Return the singleton controller, creating the instance on the first call. - static let shared: SignInController? = { - let instance = SignInController() - - return instance - }() - - - ... - - // Start the sign-in flow by entering a username and password - public func signIn(username: String, - password: String, - completion: @escaping (Result) -> Void) { - self.username = username - // A completion handler is one way to separate the manager from the view model. - self.completion = completion - - // Initalize the SDK client if needed. - if flowClient == nil { - do { - try flowClient = InteractionCodeFlow() - } catch { - // An error occured inializating the SDK. Handle the error. - } +class SignInController: InteractionCodeFlowDelegate, ObservableObject { + static let shared = SignInController() + + // Published properties for the main state information of the flow + @MainActor @Published var currentResponse: Response? = nil + @MainActor @Published var currentRemediation: Remediation? = nil + @MainActor @Published var currentMessage: Response.Message? = nil + @MainActor @Published var currentError: Error? = nil + + // Set to true after the user has signed in successfully. + @MainActor @Published var successfulSignIn: Bool = false + + private var flow: InteractionCodeFlow? + + private init() { } + +// ... + + @MainActor + public func start() async throws { + do { + // Call the init method that loads the configuration information from Okta.plist. + try flow = InteractionCodeFlow() + } catch { + // An error occured inializating the SDK. Handle the error. + currentError = error + return } - // Set this controller as the delegate that's notified - // when responses or errors for the flow are returned. - flowClient?.add(delegate: self) - - // Request the initial step in the flow - flowClient?.start() { result in - switch result { - case .success(let response): - self.currentResponse = response - // Handle the current response. - case .failure(let error): - // An error occured. Handle the error. - } + // Receive calls when responses or errors are returned. + flow!.add(delegate: self) + + do { + // Request an initial response from the server. + // Responses call the appropriate InteractionCodeFlowDelegate function. + let response = try await flow!.start() + currentResponse = response + } catch { + currentError = error } } -... + +// ... } ``` + diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md index 403946334ea..73b1a6a6c54 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md @@ -5,38 +5,51 @@ This example shows part of the implementation of the `InteractionCodeFlowDelegat import OktaIdx import AuthFoundation -class SignInController: InteractionCodeFlowDelegate { - ... +class SignInController: InteractionCodeFlowDelegate, ObservableObject { + static let shared = SignInController() - var currentResponse: Response? = nil + // Published properties for the main state information of the flow + @MainActor @Published var currentResponse: Response? = nil + @MainActor @Published var currentRemediation: Remediation? = nil + @MainActor @Published var currentMessage: Response.Message? = nil + @MainActor @Published var currentError: Error? = nil - ... + // Set to true after the user has signed in successfully. + @MainActor @Published var successfulSignIn: Bool = false + + private var flow: InteractionCodeFlow? + + private init() { } + +// ... // Delegate function called for each sign-in step. func authentication(flow: Flow, received response: Response) where Flow : InteractionCodeFlow { - currentResponse = response - // Request a token from the server if the sign-in attempt is successful. - guard !response.isLoginSuccessful else { + if response.isLoginSuccessful { // Handle retrieving the access token. - return + } else { + DispatchQueue.main.async { + // Publish the new response for any listeners + self.currentResponse = response + + // Check for messages, such as entering an incorrect code. + if let message = response.messages.allMessages.first { + // Publish the message for listners to update state, + // such as showing a message in the UI. + self.currentMessage = message + return + } + + + // If no remediations are present, abort the login process. + guard let remediation = self.currentResponse?.remediations.first else { + return + } + // Publish the new remediation. + self.currentRemediation = remediation + } } - - // If no remediations are present, abort the login process. - guard let remediation = currentResponse?.remediations.first else { - // Handle the error and finish the sign-in flow. - return - } - - // Check for messages, such as entering an incorrect code. - if let message = response.messages.allMessages.first { - // Handle the messages as appropriate. - return - } - - // Build the UI using the information in the remediations and authenticators. - - ... } // Delegate function called when a token is successfully exchanged. @@ -56,14 +69,18 @@ class SignInController: InteractionCodeFlowDelegate { // Delegate functions called when errors occur func authentication(flow: Flow, received error: InteractionCodeFlowError) where Flow : InteractionCodeFlow { - // Handle the error. + // Publish the error from the main thread. + DispatchQueue.main.async { + self.currentError = error + } } func authentication(flow: Flow, received error: OAuth2Error) { - // Handle the error. + // Publish the error from the main thread. + DispatchQueue.main.async { + self.currentError = error + } } - -... } ``` diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md index 973d046b30d..82f92efaa4a 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md @@ -5,14 +5,14 @@ The code snippet below uses the `Credential` object of the `AuthFoundation` libr import OktaIdx import AuthFoundation -class SignInController: InteractionCodeFlowDelegate { - ... +class SignInController: InteractionCodeFlowDelegate, ObservableObject { +// ... // Sign out the current user. public func signOut() throws { - // try Credential.default?.remove() } +} ``` From 2d285d49d57cdfd7724c0fe67ad265eeefcf1e66 Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Mon, 21 Aug 2023 22:01:19 -0400 Subject: [PATCH 4/6] Clean up wording in a few areas --- .../docs/guides/mobile-idx-sdk-overview/main/index.md | 2 +- .../guides/mobile-idx-sdk-overview/main/ios/initializeflow.md | 3 ++- .../guides/mobile-idx-sdk-overview/main/ios/processresponse.md | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md index 6cac549b0f0..ab8be15fa34 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md @@ -59,7 +59,7 @@ The SDK represents the sign-in flow using a number of different objects: ## Manage the sign-in flow -You add support in your app for the five areas of functionality in the sign-in flow: +You add support in your app for the functionality in the sign-in flow: - Initialize the flow. - Start the flow. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md index b43825642bd..e2f7244613d 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md @@ -2,7 +2,8 @@ You can provide the configuration information in a property list file or in the #### Add configuration with a property list -The `init()` function of `InteractionCodeFlow` looks for a property list called `Okta.plist`. You can also call `init(plist:)` to specify a file. +The default `init()` function of `InteractionCodeFlow` looks for a property list called `Okta.plist`. You can specify a property list file by calling `init(plist:)`. Both of those options can result in a throws as they read from the file system. To specify the values in the call, use `init( + issuer:clientId:scopes:redirectUri:additionalParameters:)`. To use a property list first create a property list file, such as `Okta.plist`. Next, add key-value pairs with the configuration settings for your Application Integration. For example, in the following text version of a `plist`, substitute your issuer URL for `{yourIssuerUrl}`, the client ID of your Application Integration for `{yourClientId}`, and a URI that launches your app. Set the scopes based on the access required by your app. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md index 73b1a6a6c54..a3a2b703ccf 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md @@ -1,5 +1,7 @@ This example shows part of the implementation of the `InteractionCodeFlowDelegate` protocol functions called by the SDK for different parts of the sign-in flow and for errors. +The example publishes important state variables, such as the current response. A controller or SwiftUI view can subscribe to changes and update the UI. One advantage of this model is that you can reuse your sign-in controller in other apps. + ```swift import OktaIdx From 88b0ae440323bc20c1c42eb3d05a3c5246eea392 Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Fri, 25 Aug 2023 16:16:00 -0400 Subject: [PATCH 5/6] Incoroprate review comments - Fine tuned text based on review comments - Revised the Android flow image to use proper object names --- .../mobile-idx-objects-and-flow-kotlin.png | Bin 34737 -> 35783 bytes .../main/android/gettingatoken.md | 4 +++- .../main/android/initializeflow.md | 8 ++++---- .../main/android/initializingsdksession.md | 2 +- .../main/android/signingout.md | 5 ++++- .../mobile-idx-sdk-overview/main/index.md | 14 +++++++------- .../main/ios/gettingatoken.md | 7 ++++++- .../main/ios/initializeflow.md | 4 ++-- .../main/ios/processresponse.md | 3 ++- 9 files changed, 29 insertions(+), 18 deletions(-) diff --git a/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png b/packages/@okta/vuepress-site/.vuepress/public/img/mobile-sdk/mobile-idx-objects-and-flow-kotlin.png index 33d15fc63e9fa3d94513d308a1bc17ddf13d1553..a8e5a8ab9dd2ef511559272b2cdcb3648b148f74 100644 GIT binary patch literal 35783 zcmeFZXH-*dw=TQ@0i~-T2qM^!B1NPqy(lOM(n5!TN+Lp(s5xg%AlPXNBi|_u1o|vClbwz8~KhdyV11+;z^o&Uwvit>;FDy6i0cEC2wo z-?@F$1OOQ70Dyk@C=-}+?orwg@Xs-y+gAPnz#@ha#PPUW=wbM zwIy^s3A3>H!DEXtcRKFFD=k%;!&1boC>|@p=&f<%A;QGakx@k>J4dT;34iAxef09? zotAiK=l4n9@BZoCjPe!fQk;^A-`b@#tEcxVI{vzt+*{Ki^b!xV3C490CYQZd8OU^? zc))M+LKKcaIINwp=3o2uQBg*_zCDb%TQpsP)?6@8s2-OpwQ?{no_(Hf z6wF!s8m*HLY6Jiu7Sw_p#uy2^p07H&eU8=8(jr-QDjVSKj09!a2OSqBIeWEJ0tJ}|3kJW5syHARV$bbJt|rB@dha1M|SNEMT+M|)PDh zq)8ow?2+FnmXgBBvtF2}99mHzKd3&SA3kH~*t#EY+;muSIA+(jRaFMxrDz;96ZG!* zKeARo7|{4g%7pt!%NQ(rzO>E;B+C4+EnrX{5GJXsjPHl_@VY1 zFeMFY;y35Y`iOq_!*N0d^_nq~i~p5tlO5Uc?VoxuoJrfEAfMaLveaE;qoqbpY@0LU z75NWKR2SQ2iMp^Krt>HMBhLNENLE_HGe&wT+F#*QN5S0zRcY7Xv17g!gf4hJyreKXoLb zxNU#Z69CK_Zep(jt$+P8rZyCc<6_|WNHcrm;lrSmk*u8 z8K-M@AJ=SFSt?bZT7TBd)YJ^NmRg|)j4px8*2oQw-7XER4Qv*Z<#IuO)-Y@W*^{h3jOvBe031&UEOgZ$xT^2CwRdnGn z`VA}>5l1&BI@0gel{?M^wB9^FP2cM3L@8=n;GvAuYa7YeW;n6N-F5X}yRE*CZ{Ab6->|;xrMy$A zzxN;*K`sm;2STe$sXrMJ)OYE4uTjL3O2gmIUC-@C$<_7;ygM3}qTk6B=`SC!UH`kAwUR$XC0OHf$B7d5HLP!JKBSxDNu%w7UJf$G^=F+o;I4gM^eGjKty;JzFaG=kscJgbTTD@H_7O`6HB8jw`AET!W8D z)EpAs(0Q^b5HuDNzY~Bl3d14n?uQA5XS3p|YmfI}5%$U}zk`GVp4`$sh+myC1YE6H zDhti`0{fMYSU`QyoV6?yBtEYvRl6ydOib~`BLKiBffQxXIKGs|6Z5kM@5pNb+0V0m zTyM=%TPf_bCYQW!>rL`*SXPHe zTGWjk6a~9W(g7Nmz)gnI$VJ!@6b;TkFU_ylTN~j`asH(_W0hb634z!_zC60Ztv3=7 zGLKgr`%T@>F-RNTBQ<)p?D+ncDds8?U+HF5UZB?6$J-HXgnI>IT{n#+(+y|Ji>y5 zzEH8i+YWolI*a~vs_+N8w1`6B(1knmSW54we+_pSq2M=i5S3wwjZ_2icFi%xXoz+6 z%C6V$YtBDmD`c-^c{02CdcYFup*ylL(|=76kO@6v3p_)G+9;78s4j19!qtcM28AIk z;jw9dfA2jQg@&f7?zHwXG2;90Db}lfp)85x#f4j_TZr10dL#aP*)#dad;{!RDxxzs zcfKNiG549cLNrPqI3HpwO?eZ_eQ@+&S7<(lj8LlP`* zyLV(7vb<}3d&I%`Iy<*RR+d8HbHA$70p-RYjHqz z6R@nI2*D9RM=~YrdCUAO$@z>C1LR`-lI*{Jzh9CEM$Yvdy9~67f=ASFlV@(M#}xg@ zP5959yYzq#Xm6m_oUWa@%`hU8oSP&Ipu)ka3ha9`!Gc2PJAoF?9C!-nhtUdL_OKN{ z3K*$@`@K%v4S>W%O@Xp$fJf%tbh>=m@hUpNsDz0jQpuv);9OXuP0enfGeH`eGb&*8 zv2%P4x-764r}VcOPfJCm`bvFWt4NA>ODgXuzNv zTCWT|l+T(_O9Ud38Yi8Ad=V+UGqmNU&&%$KjStj@KbP-;w$xQn9`qcyR8>wv&G3!}40T`M79c9oU=$my}IGT^xIHc@E^|)(P zhfC1`)zJu5pw+~j#})bNIm#I0q50TXh7Oqf1?2>8%O{b@W7$M$)#>KFpM^oY>@8Kl z46QsX6_bqzJ?s&%VuPf?`^Bb6SOvFDY^l9prDSLy&Xe2}RHe7Lyi(rajc84ytZqhx zR4S%BDz7wFORD)nlOaEw#kandrdM1h>={x%zq??#yH_bau3D>ZxrI^my!Q3A(t#b% z)O^Ko_ociO5Wk~ zrZlxGp2t$lQh~;Izb*-F*tJ(4=k24`5Q6rlnIMj_Ha}cP&xw+6w!2Q&Ue_17T$)1% zpn?up<4yF4dn$5P?GG_;Rd5~OOO-;~i!Z9~;1*V53fH&aM9)`#O|KZ+4jNjPuZ2?m zJ$&h4BOb(XQPza70?in+IT&x0*RHTt>}~0{Jf#YP&QlxdL5fh~C~9>yd79hwg0!@9hh+Vk>h8n0WyimOUaJYVFdA zIE?=Lhu6$|hULtA;Vq9yE%OXx@o&@?9xoXN4M^GGs-^nH^2OL{>d_CRUP)D7u+vcK zSIuqB7tcd-#iFt!ifrmoId0CF=^U>4JpZ0gKefu~$6%vWSs}yf@23>KRi~;maLkH~ zUDs?AYQ~hfO*Y`|lABXfJ7t`YScu4lFHkjk=q32^$_Jt4(!i4bF}ZF}9| z$%Y8E8{@zbAVJkBFH2NL)_GM+ThY_}+xo;|JSE1tf8Do_y?Sadw7yI*XEmfl!M|t1 znKS?y+lD{4`)e*d8u4g6+Mdy4za*ZSW&SryZQR<0JB+;GA);f<1eo#!qrXJaCq2$< zf35YVJ#kIqOf`pG&d7S`$}x*^h%12rappmp6+=cW7{nP_3f;9D$p;NPA!uu~o}-0J zEvFBQ6~)f%&hQ^_m!R;nghrlMJYKQZv0BzO?e6(w^T-|NRmFE@bq_Ay76;sSBKGyU zv3BRIh^XZD6(R%Nr5ak5mhrs2MjI#OiY&re4eaM`oFRB;qWGIs6>p|5&D2=o3ifm8 zN@lxs(}Rh~F#9(1w9qZa7AapXstwTUY7F{-rihkP`ZjT|q?DgpB`1ys55<~VIPEVZ zCgm1?E3zFa#;fFc|3M0rHsd()*&;p1avC=9F=+%Q3eJ09J-Nl?i zv!TaVzgVOp5m%nJqGV9$69pPU?^wOj;pk%lt}g_%GLU+)QSar{4WRCuR>h_ZF>Q&S zCjAoF6wF&Jqz6O2+!E;MQ)|E!VNyAzScgJ)!z}xZCO5Bie8)hWQ{p_2)WjAUaI@88Wb<_eek|$@TCGX9yBtHzU zYg0SMVXo^Pq=))V_ABqc3e7U0YqS##Bz4sTp_(=chS5%p9bs#HjcFM|h3)0^&H*iZ z>!s;Gq_z7J8>V8e4J*XP(`O`AP?TbGzhN|zN$}VQqbgQ23T-pT0Ed8l&=-k(`0K7d zIl#(xbzUn|hspd4gyDRFcQGYR{8RMtC#1jUI&3F(9PcJ{Ae47{)I^)%;Jnn026&EXBuHyS;ZTKxkt zb)mSbBD%6n;%S{r*q~eFmy~lvWc3@ir?#qy#;_))TJgXZ_Pj9#U1|S|?zu%8f{&ZA znz-fCyxkv!D~2ZQLu^3gfZoH(`uoCw2BqFUAi6vvnQc6w_EXN~W}!0r33N;G@7@G` z43o#F2<-goE#?;|NCT3A5gn2bdd_EYBr3m|!9J)Xr94}`Qqx%O>3@gc#pZtHg<|nb z{Ke(+I$4?wfXErpMLItSFT65TJ0YSSwAvvxrvhuOb0-X(SbbT_aYHlPdE4<4&8zGXLDA#A=d zcyYJXX;fVgVQcof5Kr;3$w_Q?cO4%*(e)Ra%L>RGfOn|O(||q?sl}4&JMs4Eto881 z?-Zya>Wcddd_}d@W{uRSm*a@|xJ-wMLGoz;NT3-y84s^vNB0x&GgU#ud%teK zTz*jl=fGhTp-((UA8Gt;%eyRKN)I7+j@I4225h;91898&I>D`?PS@brsZEyAF2?PxO9t zN5Z5cC+}+Srr=e7)&oQhO&u_-BKhQUQ2x!RD#5nTJ`I^*hP+eI=TSbz+ctgG_ zOLalP$GbIk=`b@7Isif&ta#z%CEwZz-te%!^@GrQsV!&8j_SaxA>8*3+C~T_y$3F` z6VPR211hQuFxYiSn0oUH*hfX#m3Vtim25MSCW^` zhFB{agp&FQ9v=n3;ZX-?5tW;*sPbT`n$vPh!h%!4kCc+T1SR?Fmm-D%Kw}S_Q9%CE zNOS2WW zEGb?Gx&aFkn9_sR@B5x9i1YtZ3!K@{^fZ?Oe9FOXO8fhn9^6de!^H|N2k_Cj0s<`~8*NQ9c2 zESz&y_1G&nNf6)`e*+37?>b7hM{>TdAf39l%IYHM9xFL9KBc~zDKr)rtg5gm|FtPN zN)odnO5J66bI@fNI5gXl7q*{gsP^r(vS%C0sc{pAn}co+N)*CI5p~}`+6I_K)Gv7} zBjN*XD7}c9;I-=1^nC!UgD3#A9q4f}raqwdH&>OzX<8}?efbP7B_HR8J# zbvGl=)}y|0nJ~4N-y-y}e62Q-4O22ek_?9jsJp7WQNx#KgXe@s)ofSnPui7c*amKD zN5HxLZmmaeM?YROBJ#`^l2~?SjuKC78=!WUj9gRU&~`xml$ly zaE3O2(^&#poH_AZSE1Fzl;}VeY;@T^(?|bBF=}eM?u`TkgWay4M9QkDQ!3BHj!?0b z82CwSEuTT2PhsFlO?Y>Ao>3u5B}jO9GGJ5|0o^p?lXPmTii2Jc^F4@oB>iN__Svf10p6uzX0@oDJQ zsGRY({TqQJ4d@g6IX?>eoP2&W;s%TPD&x7pC3xRo(q8*`>|A1A;4z|Uon($lq$$cY z;cuIOy28&b#{_tt9%$I>YKeqlb-BxypJW`ue|z5SQT z9tW~wFS!)g$p~e{R}&jRqa&2IJ@^9?SzmMRZNI6>&B9r1dHop~i_^+6HL^Yv(PwH>@4RPdm24tc@jM#i%3F?Y45DPJhL z7a?J=d#|@~1aEPfi~EYdV^d=!QKHu?naAPHjRhv^r|p)>HzvE6)aSMzJd(~b=zUV? z75c3Yx@+?qzHSdfx2hnLp%G`|^t-NOd&|I;=R8kyX0ORhk_!*y7|$fPvpi?CHbjIc zoQ%7_xREPtd)IMlSR;WTUGGzu!1_a45}LqT?`6f}n!xYlE-)4R*G?^8;?+Y$#0-2kXb6kqm&*`U$JA0HAF>%Ij z`tT5l(;uYW1i&*o@FW1A|1ZLD8EpU{pHZs*pb3t#5s8;aonbF{nqzV&dGLM3Ls>`g zf;tXfP-t6)k+i21`BHaA!&Y$*iaeND?K`1nzp*#ldN9Z zcFGg?@UoyBVYTo>T<73drPT<<7HL6ckI!z2`vqT1Fv0MFg&^dpYr3UM)=!)*htv&5 z;Mqw~zR!_bDUZ!=sDkISk#(s;O2e>Pa6xe=o~~A-#yE0&Muej2YZ#rbEJ5s2X3;AJdmfVb{Pnv-=R^b z)Jg*%ZM{*|F6o%$-IJ#_*oO33w=`~0^xq`S)#MCJsqg*aiLlZaBL0~%`C*Os67n0d zmbAf{7LC`;Z{|F3Sy;%D37Iq~^{zPzMii@4PStt~@vw%m`F^vO_F*-o+HjV2f3;n5)guzU<$8u#_+ zwfmN&A_-K_M8Pusm#ftTTV--CL@Hk%ca=4-UL*N?v@!2}b>DAn%Attoj5ZRlByk!~++O15rfMcNyugR5mSyXl?l}J}i1tHbzPH(1`(A&ItS7S9p0fnj2CftdE zV$xj%l{$)DT7*Wdh&e_PAC=#M_Bri#22>zSJlUC=|DaO#n?2QPZ|9I~m*Ka3mo(;N zC!Q*9MUAW@BQ&4)x>OswPn^k_wk?{l`9@9%?7_?_3fS_c)OWSsW64IpxA%G2&{F!A z56R}Cy03z-2@c4CJ1L1EXzkI&K$1Spu^e$r0jY+B0yEK<>@s zT|oLs9EJLOe?^hl_APl{Lsa9|c-h@~7I*x}IG>n_c^?yDIn#qbsvesL@BE__lozjp zTk<%MEs$@@+=v;Ey&P@A{w%w>nqO3mZ8+N~u|a3GKZ{PNvd>K2Xn4x50&n5TNvIql zH>n<=6G}2~j7q5n)o{l1uUc~R%b(xyA#%+z!~8U*8|~W+vxE{um(GyRVI2$>CbuZ9 zqF--VW7+e()6)A~Ub~W`pgWOXy0 zyIF>rSMcwl%&@}t-7riV=uf`BRKb7$Bp{PbN>vauFC|vrb^h6sxi4(M{|YT{W%8D7 zsPN8)kwI*_&7{qry%-xE#}@3scMy2u^HRNhU-_k^_Z6J&3o~)I)gh6ZJN|_dI*PAK z7!?7agT@ayDk3rMwYXfnmR3dgs{kYB2BU>XA|Ih>_hLb=PIKnf18bYb;v>K_&ev%G zN>5(lVsTEAEN|zVgJzSir*r@pFX&L^-#4{3!M;5oiTbk@oYMlj2|sC;Hss2?+hbcb zI^vjo(S6mWbv*{%iVNjMQ+T~(rykOKkd2^IfJ-k9^U#O zX7H~DF2)~AuC@C0_FSzD{zo!l5em}OeoDXVbzb^(1jxUU^j+iaY9HhHK}7TvKF)^~ z(16p~Qve94`|G7w7?mi7t$PYo!HrH6geS7D>AA&EX;K~J`NK4dn zFp&IzGLWO0!2Vl5=y?>q0iU5nW`@M25)GT9u4ylT}(Dj;1}%wBgyhXdWpj`nctQtuM_uvX>)2EcEJA~=+5i; zc+c(JY^EP5k_?NW-4Pqq38a8sKdcHlGNeCuiccaMUr@|scI3%jI*lYs{scYG(2zw# zdfwd_A6B!+)*6cq|4>vu6iCAW@%$DYb<;C%84^qjrx^0pz@0B@s_+0zHy611@UIjg zu9JS*S~ueaZR?6K#nXvPSYP(e`C`t9rA>+|^KVAmi~%JB(>Xf-q#dGm{`R}tVy8`64Yfcr#s9}fIQ+D?mN zkutKn^ZF(L@O)O60F0PQ!j74pqTyKy!yt0=9t<*xzZB{IT^R(gEnZ!$ISrFkcwqgK z?vNm*@tjZdbiRtzac*e~!roi>!7}vkTL~IU1D`3>b5mq9v>q%(^pf& zU<*+4P9eh0#{25f*~Z@w4&*siD3@)*yQ_EH9#U{W`dZ9~&VrWxc0v3UMDA{^lN4rA zRC%q8@u1vpDy*QXDm;z`&g_Et0p+VP7kiH<0#v-Znp+q2kO|AO-mhuqP)E37Hk5LQR zF;V_EAcAOVn*79>=!ax|4#H435Qy5;8qrVp5>rEebFR$yycY7a`g*n|kMpH;Q$?p* z$QP5aKbW~E?en*{PFwJ)2MkC_U2pOIw)D~VQ8q{eYM3|$(-oWIq&bySocAy!%IsWl zgK*OrY#|&MdT^IPrkOVDnW3fAI)x$?4a$}c-H=;bre*_ws|#yxM!Uywn+I*xCrhbM z3T{;I?q;A(R!Gs1GlH(}5eN+V@m`yA{wEbumOo5DvF{!BvR>&f*umVW0rQl;RCr5z za5?F{(Q$F}g6HOLEM%LiOvpN)gLv8@rqU1J<~{@UOCQ*N+!9E*XSw!0MhiOQqM4rh zpbs;E=dM>o*EDt0m5nQn3S@qv{0|;DNZE^sZ&)%_Aj_c z0}IpfYZnJkkjGW#Qv~)Npd-)~^?|eg1u~S79(ih zf}iN^^nT$qgvvyv`=(U-__i!Utp1ype^8U7xTwcNa zrY?=7n^h;h*CObp9OJ# z1)Y5MJ2^1H6)~0(K9LGoFRM+tN2r{T)UTPm|1m*3y(bxeOsRUif5ANcmsUo5_+n-% z;W@gANtJj1Kw{hOsDmF31G>rWOxd<_xvhG=*3_R~Q;;gE~Sg zElt}OiLvg6XIu}^N8BdSCEXE>GyeG`v25{oT92xhvtM`?^a{$qHL!dw-WCm~8+m$T zw9yySf>@+$;9EopC{lLSMi?h}nVEd7Yn$^H11OCuTuW+3MM)LjJTr!mSA$nZU-orK zUXVMDB}Y;kysmvdRz9=%FbVwyt;EY(mnYQVJ#Z36N%6o?49&h+ol{fcaPR{G7Sv5M zAAe?V{_?G^1@pfQTBPciXU$Hr24_AQ;aZ~?oLv@{57oFnOnh1TvVBE*wPZK_cW*qz zQB0*((kX)F8+umd(a>orS`gcW+R{Eh+F>mGTA_M!Hl)_xI?*R9=>f+D(XTJtGimUU z@If@4wSZo2s9(m!0(>ofg|mxhdUyl1=fA)|ZbvTW@{{20+tC z+rPdj)}Qfc_8r)@1Ju7`>rXzoHes!J`mX+#Amj&y{+}%@tX)TVirnORZE^;7;z~wR zIenV=RrgNb;uW^h&o?NPj7EP{66%b3_PDp$CM)DJqm#Vi2mG{ItW^O>$&dE1`xwLG z6%I4KoY-NU4|BO0fI?rauyQ{E$h<#@s4TJ9X5=nhF?;E5Ut4EP#nqS>x)GJxH5jWE z8kTLkBd>y|w#KngyVh0kKRj8-KjdK_&Ag0cH9JMeo1pPa7!ajnxJ#Fi@bC!8!@W+s z9gi(O0do_N(gUxUX-AN-K6o4EU(^)_jn!6lX)szMUZ>$SaPu@EbC!0;)5rW|5Pu`m z4Tf205!d5JU<{-b&*IgY>SkT325W+c3)2DG9w7a>Y!Sg~_7Pn>XXeA>WzmQQ$vPs* z6;^R)ngQU&FX&N#PZRn0xRG&}aSSfE^J#Uh@4N5!DU@qoLUUfHk*TP={}YkBC^&2U z>#+CNJW<`^)uA?gUJJcmv(pV4*ww860O%ruMQYVkYtkmGs^vi1Lvld6shUT=0eGkL z(Si0y0;K!W(Ij~sik=?C``#b%sBC?w@Vk0se`nzR?ryKW zuVXELud7EzSLVrk;f7b!%(_O7<#sYj)jyt~;eL+U#Qacw|F2z;d%g6!6OFEgbWRko_K_|Vg9t^*TjeKbhdI`WIx!{y=(%=;t`S#y`Qmo=IBHjB|LOu&HtZSDz+dfel zHkeIZS`iS5qhA{~XK-f$O_>;D>923)f{V`jdY`h?v#=)BLh{-7eMpto+G`KR79I|7 z_Jpmz2*ZxMy!Nc!S#xbRo?c&juMfk)@WU5Wk32d;-DiT^! z301|dCMqJFpGc0?bQvnS*5fR)ln1J|$_*Q)de`;8{^0kWa6&AXd#u?(w=k*m@)MU& z_2vInNPKdY&*-JAKj;hQCmz&-f=Qu~pCJXO<)7knV{WR=I`a*Nn{of-&hGv_jvF15 zfc{`Z+H}nHi1pO_F^q+bdY8pOVZd(sRAq@KW%e*j`ZG zN!uLrpd9@2+U*`u7r~EvoAX(r@bbXs`N_bwSNhnGbq)gd4Wk0db~#lehIQ^ab|K^m zO~}~H$7>UTN6oHEeRZ8wMA>f?0FjQv`c3&M^RF}R5PW(CA^X>fZ%^0!+Us;&$jJ>4 zR;_WvemEB&GDPv=)3Z5H{1G$S3smPy{Y5WT~bTW>&@iw{swB2 z)b1N)^WCpoRxMaKR{FYMF7@uefXagU0;BB#hP)lOe?yf%kWmgCV&RnXQtQ&Tm13!p zs`=(rJbr7YvY5qvX45)WmpXQBR%r#^2HkAwNgx-IdRR+awmw=J%H1nbKc({^AJ+VHO@4dtMMR62BlT>=7Z#got*}QcH)^F=*3sq?-x+*qAt%S- zU-CY>Cy>MJx_zY*8Fx~Vf0m~2F{ebW5gjlcf=6|PbXBr-25yKy#mf_SVS3k^3dJ?) zAQ$qedwV--TPbVwWBYwU<8%#GWA?b-YJYF*xyRO(f|WjK)~YUBzQFXJdvzx*bfrE0 z$-8i)KfP|ukKa?u*RGeg9gG-Me);}^u(uH^bfx;0o7Y(u2bOQ=rp33at3~!U1?^4? z;eYt|G%a7Kd|9G>juBeCNy_UhPql3|wH#GhzaD1atXIGF+fe8k&wN$5!7qk2jp-)#ivgxQU~#_v~0+z3vSA6@4qSU5m@*mo}#m8OkWg+}D>iv&vwglDdU(B_L& z;WJ+U3${sCE!sz|n}Hm>=9PN{DekL3iS9*ED^nx*86Burdb8-}fm3`m-d_0FW3hv4Mea-QIlbo%&7Hy{ zi5uxz_~+8m?!CHE`zNY+3Lw zt?HlIPn`dvpSPzm1>Okg!&XpI3fwdFqB$lftWBRF&&AA#&S3hFnDnUay|93fJSb1z}a?#YG1X8cJ~ zUkXTQqqU=L7`61%%Bw94`V9mUX8b(pZj>gP&%Z0g`b}SvRqhBMcM%BrG8GiP=+~s-Ma27Ys0W47T z46E*><(fW(=ezC-snjRUu;R@6_=M03J11|iRUT)*f9?oV zG#v@NH%L?L7?F-U)Nv~%Bg`v>8Fsh>sUa6?bRXm_#;c7Qv;6piZi)_vTGgi5L{zp# zw-qF(gqsLM61E;+!0p4MKl_*%5SJEaYMQbnRwagv2UvVd=u`QFS`xq`hvPDf)-@-H z?+CZmuKAl(#eTfan>aZIdL!cXH!Og*gTu_b0(VrmhO09la{ZQIlMhlIWg-f>R3$UJ zBFAY9XH z!cX3|(>HOn-ZZ9a2)4$Q6~B0a79wMwYzWJ#Uh(WatwPDOS67F;_WqlQQNzc;D_VB# znA7S7H|9TvU&>FrbYnSRjN%#NyiEyTJSgT|KvF5qIZ{XLkKf3E@Re7g>W_<8jW(e8>2t)Z2cn9#NZOmG zjN9|E*an8qDrgP5aNxKevwYN?^q?BT*l@zCx=9YwPQ_#>Njevj$$@$}lEy#@NJ)s=LOshR%>!g829A zhV>T~FCv*dOo%TxZk&=N#tbR;_35SuG7c_=#+(eK{CKv;OVU;gaQM8m(b&wpWm~Wd zyZ)u-MrhK7f#*t$%M3wYU8PTIAX6FZ#lHrYjMYz!U(wD7G_KmI)`!0yi5?x@`k+#b zWFww9tE4faS;%1@SbQ5IeaRMiKJ@g94r#=Q(BA^TtS9A0u%n3*Vk?O4;KatC%(??@ z_}>wqjoB?L%cm^)j>}ORgxESEh|)%vRORcbzZh~T(>jT~=xd<|x^G}*Uk~s^P9FwF z?1IJC4(M~()U7;2*AE2tYsk7EG~Q}p>P~9z^3x`{S)V=^92B;va|0Iebz0KklmN{p zEV3U}7E6r(^F+=~2914qM^pB0Y5YBHc|mh>q{)IJUY2FI`nB`fj^eLA#2d$PR-Pdb z#^+74P40N4EBG29Z3v_G3>I`9d;^w8ffx*q7XArAG#*zleo3RGX`@2)-G;-Z z<*vQr=)cGkhkj}=-~ZGwp%1FsFv#3|kL}v~1;b5#=D6-6je;GIv;5VTrI6dH3+-s8 z9G1RrAd85k=FXm zCD7BU!DE*P=5&(nv4t05A0%|>Y8&zlk)Ip}t7^D-jKXMA-C9g8&+1v$xr9_k?|^pV zW~Y0dNaU9^*2H5h1_iMmYS%vo3YCn{xF%mT45(~1}tMOJAL{R{_I&|;d#EFylpu*@~6$Q zA3lB{kzI<^4T|X#M&9cEZIMQu8W3OtS-4m$Dz0m}PjOPt+RcXjZ1$IOD^v-hN8U$5 zVkT%2jHp1}7{qTO?ok@_Hll9DWr8>}_rQ<~*2X1KG6(Y@@Y5^jsFRuo@p&JDLI#mn z#|=JY4JH)@29kH(y^t@Yx@fgJqbb(LLB$AU{~x}I%I)A8g8E}} z#uorY04g5PhzdyEZei?X?Tx1cPDX=)Bu3D}NVv86FY>KM6dR8%Dzok;7Z^|3xW@r- zqi8NP7}q=G=4#Nimni$M; z;vW5jjK01Prx?U(bVQ)j0AC5cKRunICuO7-2<=~pZLZC~$j<<1JY|Yox(XziaQ1Qp z`b-XbVn6s!3BfV%#;&oMGjr$ky?k8UEWnq~{_EVkURirl;3jDcN!k{OylOJk0b=tY zagl}^9EVFyZ*Ln%)9GmQ@XL?G+_RU?0S@doWzuL7*6`HDV(i=G%hEXO_C?p zykxmHTY~6`opiVpv(0or4rH5yk*GT}L0>%JSVDaHkCInZ)egp+k(M-z1`rO?s#{&f z@wt+e&+$G}1YL5l^d)|;Wd4)bw|bVcNoBb)N5GsL|Kw!-6J-$!-oehpu(!W4-hWLS zt4K@HQ(h1Z`__MI#Id)2>+Ot!C>w^TB+DeMR(F?+)^=|0CJSy3UJXvYfxGZ1J-lFdj9R!$iq67 zV0aAGDc1iZiSQ5rP|dXWg}~>(UfG9}t5M|U5NLPVX0(Ti%bONJ%Xfpr_pvyf$9NRO z=*{zv1_lP$v2W_WfFBZh0*gxzoZ_+aaGRICuaWY*R2`I3Y%C}sz)~r7d=^tu;-#PS zUcpJPP+n0{Ad-R|{807!$E(2INDtutD;my*92y^Y^B66W;P+xst&P}cQiLVa<$If2 zzyEmmq9-AyitccqpmIg=K|w)@SK++pc=P?c9=1>9UX+aQI^h@fiMF-ebucqQzlcXM z8coS+@^giCv{{NY1%A>P{Q1YS*lPu#_r5VMTWM>zPvp&^>m=-n7iQ_N(s2)tBO6Z zhGu*b6HJV5jCS(x%*Q~!Hf_!!N#A?~K>GJx?zo@$@zmc2*^nEj)c=lDWtVQyAM(#o z?ss+S*uhT>h**1jcbb>1k-?X{{XwV=JW)EI(Z+`*{{P+!t%;YBw+@e9|w9 z1=XewI1ECx>w1fs!FM=h%HMZAg(+0FfnF#Um#0}O%jB>{)9MaH@=&W!Y?aR0dvh
D%>ZZQ}< z*D+%{d{5XxYuNoCz4bulyFug~c-3IdSxa{gq|q;fUt6GEQ%`B#02(A(uizzg*gAkx zqILG`e956+fDxRg=8KnMhpho-ytK`jxqRtRF#yd>o3E>+Q?wxjfDzhPRPvvNvj5W$ z4e$qESv4K11GLT__Vd(7nU5w!7Yz!1#XnPXomMlR_F6R`Py6ZyC@yeUh1QGbQ`{hp z+yBXuHrG~1Yv;ga3ds1<1bTnmOE(r2zV$PWSE{E~Cn!K`<`<1h&v$&LMwZsht5Wb3 zaNv7ztd^)0>bbC+;U3VJlL%zFuZ1-3bb2&4K#`!)?I@Vqot=3f8 z9Pk4N8czSbYVp}pqLvvx8yYqcZ5Z7aYip!Jd0RV%Nb^M@yxN#cf0O%mH?$B`{i%p= zQv2H-+aCoL$Yf|x6saMxv2UAjjrXGB6xENqd4f!dS1)U2?(68=OWR+yaN!Jv%W)%C zP1k>yBBs822e$2atF4GH)-(WN3l{3vT_-e%Ie~-qVlwNbHjn*Z)`?%%@oiqs3vSAr zo9bQC!ByZFk1)WCkev~Gs(%m0fC;4nI*P!pIC;GI8T8-|LI0qQu|p8g@Y?s^Ua znc+x{y$QGw%RLvczO| z3HR3yNSg^cVJCnb&F(X7xYawhBd0$BBL-1Lg zbTL1=!zmE+dErbi~yXco!Ir`)su5~P=vAT6KB)s2*JTxMMuJ~HCG0KhGO>B;LBh>T z;DYVW02v$K3LnK8tWmuL0l!xLsThm?e_chTlU}D`E_arP1PE1 z?LT}uu*a<+Pt_VC`0uV_s#`9dc&^!3P%nV)us~3+DpORw%l$l65izN|Gw^WBQaN#O z)tWJZ=4hnFl0IEQ$nUOo=ydYsm+g6!u~UU9G5zR+>ZyPPD}%zQ0`RC|Q(iAb$ke?k z1PV1XA1k-~X$!x$(16%~+~PKwS2vnQeiv-Bs-ACG5Q@@hJ#O{q@KCt%Ht-gpmS#H=u0b-wU;J|tJtt^8QRwO#qnkwi7u z3pZ+SvH>9BhpeUK15;~}eF!YHLEyl4J%9zdQ+Zg8Hehx2GjCua8Ub3(p;*=~vUlzU z7u&KCIudVTYwe8N>&mI}UA0VAc8gnWpyFTsj#;X*`=t{&`%!yqz_o7GysA~S&Jt}m zCB??pp#>n5m-T?Gl`bP=J|h!$XmnQ1UZh<9=p6-JFRBIe0B}mxc0av~i4~SK(yHD{JeCodpo?bH>Y5*Qzq* z24@Muw~*qzyd7=(tH5qzB*da5NqeW8fmd`H=H)_9`+?n3Qy~ZB5!>K$?gn+a*)^j9 z;1c9ia)Pa?4VYYaMcxgBn7ARf;&%Q<2XE*nKG6R#q~;Hl-eKtV`+ULZSI2Za9FxwC z7_ZJ`^)_%}JAC)gFV~7$pmyy*8s1{u0=KX4;+C-{Qwc30Olq`%{YK^rOdTxZou`VN zcF{hp6$20fkj}APO!^xnby4y0+S=NVc$KKs6d?3p2mJrb_hSBEL>dI_G;=*<(8-uJ zGN!D7I`=-X`T;MTRa6XcHvg%I4#RVbF{9P#2Re8t;{>Fh$eXIh+~$^Xb=8hvr46H% z{L{i(M{1nYJqOlmTP~#b4XZiTCYu-g#8;k33I5_{_9Z!eU>nkv3afmp1MIfKEIhqk zu6gq+E_hX=ZZEyST5^KG_->a5fMWa*l+e9rMXdrs>q25raDnZ#S44H?2tpSXM_{VW zv2(A0dT#e}jgxHVV$>zpBXK(WYzI+z z8)T)PPrkxZE5qud25>Kn5d{{@yC}=!SU=`I2W_4zR;leqFLYf+Vv+fc!I|9k1-x4{+P7k+1Z%v9fiP|59(D$80PchdH6( zXuk=MxQv$@s(z&y__Dfy1Zz-OcGYWxCK(X075@u<*n`ADTBFb3OlMfb!ggk>35`HIs=w81FOO&KXiPc? zR3#}ER5thhnhzj<_^vBDF#xfl&wPuEO3`w|?UEX! zJQblij1EwAwhJ+=m3usUKeZ zPZ#oA#kz2{ZTq|%0PGbyRySaxpOpO_GI9)iPF54<`q=T${(jf~#2$>7kIhW;=2D#0 z1iHo;eN49MSarhvp>fKRjdZ0X#3lPje!fuA@~}7n3wi$mLiaWs#xKC=N7-ibi+)Vl z33(r{J`?jSTF3YSwjnG0JuK}afp=#aC9|rG^B){8v3A*-?<#AcB2v4)+?X&ge&QUj zw&{eZb;V9}?2Ou5v^)$WEazRm3IB8J!q-Dz*dF^GyOVbXA)efMME@ku=}M&udkn?z z6wLV4zG^_FTPWHi*ur_nNwWJGHWY1L*IiP#Cg9@gT1BVYI-x8u6l!2VKyh7NYkJV8 zv*0VN_YXfWTDu|Qj^z4V-DBWeEEo*iRh^faza9}zx=Vx{jkD|{It$;talqZ2OY#o3 zQ1QraB)k)AUdNC|)e4}mwF5VP;db*ovahy5)9bsGAaezGW@1cN z{@gMwBQhBrAldghpCIZ0gfyfba5ucX>^1G1sCjh8@A>J%6x7wuauZpGWo@B)7=D`d zUE_FSV}IlRkeg*7&D*vJ>@~NubH1duP7ahNT^FFoZup=@{wPqO$YLP(v+qAwX_3aC zW%Q=ar{7MzZ%?WS>w-C5nH@gY?7B4gUrk*dKJrP7NREtQ2_@|)Tf)onv(Y?w8o(m9)D|Of zJ>uK0xdNn+nk~`s!@n%~lxpWahrC~{7`VRigZ&=h`%q==_r-L(22QLk1Fa6o7gtn@ zsPEB$6Wwz_Dm1p&XCM%Hu8P4CvXgF+`svZ*U9w&Q5V)=RyMJ{&JTrHrKQBbV@+P}Z z)_C6O$Eh=#a>*x=a$)#yEV01Zd7gdRt zJcF%W-&ba;a7_5D`7T&!IMLQ>5}EX$Tft6-0Q{1~n@Ss5Cfj0owxZ=MFm7%xWwr=X z*g?SHtrQunO3!tnK;0^r~AR<{7bvTF0yp zxb&K-G)Up_=oRy5x#ZTyQ8~?m&Sa1w{GM zjLaXh_awnV4m1`5EHoD{XpyWZu7LZ)a5P!ifB?&W2Vz?iDw&_R6%ZxQAMSE!K^Blz`(bQDEJ~RK*r(n^h zxBi9)!j|4TbzbcO{A$rOW*DY9qDiP2@bbl7vvo9VDDC&fd&G5pNeXP3FNeVme^jWa z{(;0VQ7j{nKhDK`h=x)CsP!r`RqT5nReeT-imt+^&f^OV5XrPSC*q57Lz~7y!2hyF zq}EALmHs81absd+=GRKqKoHA;cN{>0`vMT?QAA)vUk{|&zO~WsjfmgqVI~0gmMu?3 zRJ=;q3!3b*_fy8Kr!+f!L##AD7*ST~xgNi$qMeNPcL5Q$bF}Gn`efBaCf(@OSf6Xm zTE<;s&bY<%^S{3NZn!c6mHu3=1?7+~RN1#bAopMrY*19ULii0rRmS`zu7yy`Q`tj5 z;LN`V2gIterQyKrb5}*jlGXj+tMIw)oJdg^$!e5739p&&RstV?OI zxzsl2|K_R>SUXb!g%qFnG`m!`k-vxByQS2hY5MKkSG6#F*6MQe5+V?`s zGk0wtm|r;;3S3H%vCVydO-m@^j%D08>(&%{5Oh3fys;J0l~!z7-d@2KVptop4LDeT z47Qqng#v)ucp<^V!Suxp;Cw`|AK*0jjJ77uiN$x{Vm|pVbBVf0YC*3nTE>ZvoXQ=3 zOhU1#3@R-v2CV+x^LG2bVrYX%Cd#dHau7?!nuA)t+j`?qT4PINv)2oqn`aCeh?+Ft zKG)D43vt0z;yG%hUBUR@M_vhXY@vJR~ae_s)9?@poImZg*aCk$ifyKv(agHoEtJh`-q40Y7 zbol58{vnf??fn*k)o++1D50<1lbCACSocF+e2(kh-@8}9i6eDZ;JVTiIj%N0OB=L~ z)3ly@qS%=&Jv38u(ePKca37k2nO}4t;{6)4$Cj?koJ_RzA8H)b_w{*mM+F32K-VOT zm&i9h!(6o^ndha8vVzgb+Bu^uyRA&}bK64G&5P(1Yp1K4S9r9wIYwB#yPWYil%7yd>OWDdUDFWb1?NW#8Amqaw0yMR?4jD zk*nLwK>lI;-@V!6k@Pn3Y~tZ;Vgso2yM(`+}06!*%lBrf7afzU4Ar?%5-~33+Pp#RS+W z`meo~lyCh0yUWjh;F-*^YUSFF`B--P!^(p^Ij4BV!HJ-;jh&h|ToqM-Q*pY_^yc$A ze3z=FejKc2yXtSJ*{$h|<2_ib4Bu%Rcn*IdpX#%P>;WgZADo=GM_X1_P0~?1c@p@% zABF9gE%7ztAkFV7S7a&>-W$_9=}dXQ{Pq8+H0m0y2J^E7U-~1QFcFkU9j^;s%owTA zG7jH?EFgYQ25;ba>Q*FW{R*3`$c2C7K+Up$-+hQ~&%Ili+DsDcRvEN7&OdwhMb15o zBwn*iVEsW^BjSV||DP-X{MlQ~$U-Iwcx}zK^5O446<^!77u+xPXL;f`A`O{6ca#Qw zbt>Z50I~;@c zl;wHPngqK~3(}q1g^Z+6XyoO0h7SnjAj#T%cL?#-YJ~5h)6&fp12Cb&LH5_Xj+wXa z(YG(p+TAP?L+zKQv%nd)abqLn1^OG{PDzeFVRFE$XGdm3H{)f@1R`)ceL?ukhxDdZ zEwjMo)2{P%9p!aWx1|rHz6f&vY89zU#{aGZcxDM{xXpX#@@|iBQvvC={l=PZIAnF_ zAll}(;cEP1VM~fR?P>=mbxR&bl$?@lV2&BbKdh%UNp@+)nxW}8&3^6lvir8X1=ewI zan(N8sB3V3rC)n0_z2-<;duBoof1g>tdRClnKA62vB6JBHZNIE-t4mvZw%TWW0*g> zEJqTcv<1UQj5Mr!{4Kw?8$At!37ps&qp8T;=IdDR=pAt_!Z0N4M;YTug;Xi#t&Q)ujD;KQ$$RbUzCn#{Zcg(-!1&Il z3IdqZ{Yh`;i9-7R*S0mJwn0YM-)}w|JWzWT=v|kM=RI-dW0xm7 z)udq@_ePgp-1pO(6}kSQT%Orupmo9=R+?+0#bkw;w{msmRXLruH}lnhv!89KRvYnC zGJ6u4dKE^?{_NU1s-J3CcCShH^vQc2M>r}{hZ0}8II!iTU&&Uab@M94St`#zVi;f~};#p|HMAe2Xa0lq%Q z4kcIUbmw5w+FIrC@Jlh#Gf~U*;?sbxBO&T)$Cbr`<~J&L`Te}1QiKxgx^#EQOl@tz z0qx0Zi({`9;5z>FSoM`fMc#u`!8y)(ne%8&L)CZya90!^GAVz7Eg)p#%oXajYn-%QS=A2%#vRzeUFUyNliY+V0iNAHxu}OOTvgry&Ph@+E zwhiB&EiH~tH3kmvleGcEfFAGBuhRF%tIe+e#bAEs?*isV5*k~$*j6H6zphOiA1NuL z)-PE5wuuKX@WtS^^DyJWlh=tF`+a9t(gP7N5Mx9BXv51$kx3`VZyw+IDwQX9*+G0? z6)Zy=2wOrZ3lQ*$CM+uh25lLsye;Q<;Jp~at+(xPc7svDZtGjkkmBy=HmcYC?2ACn@aFnd3QOkBAi<= zu6i}x22KIv)J-`}UXCg+eDf;lN>d&A4Nj2T5gd%R92)GMg~cj)EuV0ClvgYeJ2(<_soB-NO`PocW5?LfJs^}$!C-cwfbzz; z50(3>W=$WtuR`t4;`UM=XXb6=N>2rF`zn?=$?@aN78NWD=Ai!I6cak@&L8Gb=w7(MUy?&I zdU8+Jis+f4x;urVV(mIbpf=(7fH8+;NSTiq4BxDxe}BmDrqluH{?oj->9w-;(>##f zp1|iaJeB)KyF-q_ts>a1_^$MZWE$eh8haVCZf4A?#!?Gr8~i(f=84sd70`-$mSj zBW?(72P-cba8W2lT%ZH&>NrNiU^ct>hh7BZnLM;xgagwRvwK>CoMi9FQ7-#eaD?cllY~3`=(?8{ePNmH)Vu4MV5d1 z{U`VU)&s&URcfTH?UOLncwjE&v117;3+cG$&*-+4p71$mX86+VR48$EWVM!5(nGdI z*S+<$YS_&_YAfB)9yHyK(S)vMT|_lfm!rkP?#*+7s9e7`H#;%2p>A0w2EK{9;?%ih zi`@^Z=Y!5{u()Y@#c)E~1?6i={}1`H{%KpnNIROU+$c@Qn#dokzLDD@JMHV~%p}3T zD559+{^fD|vVb~SJMSu;n6eGMUtyaj-KgR|bgzW>)zE?a&dSrhP>4F{(?{Oi2XIjf zjEz0z{u^EW82+DT?Pkxo0o5U&>cRTupkS-;dmIps4yS5xVbEr~RTHGlE?j-PR}1if zefdK-$!cx^WmLG1VnaIIr|mBLaD7fOAZ<*A^6f8F9-vBUJ2<;fx>q(rZx&}3jX3Z7 zZ+ZT(>g>1Y`W&E#5$OPC>Kbh(Voq`w+Mqx#jpf<`mS+mz1hQK?_hGne9eqdjz>v}- zOHh*4rWpXQkZCsU zXsw+AGI~f^T3f<07-9NuE*HS=({!|$JsnacafEO>mmp@0KB16TuBM<{!W$r#uYk4G zH7y@H>}TLUx`0BrTRUZ6dwzD#JriY|{2K{tJp2DO}If{k1Dyo#X^_grn1pedtxN8lHAA*Hv%`o|3*nzhcnv_zE`e+ zXk$I^VRiWfK??C1jBSZMM0*MjIV3F8=eqa)mBJKsk82A#8sTFxI?U*+*GyEZ)fnG# z`gI$&ZCy6u3xVVn;Tkj+mTiS4rBvHmIZI}BWMPab1y8UxLReufPy_! zGEv{PcZ*;F!76pPlqxF^Zm7KuCUrhxm;-b)$}i2`p12f>3J26duTJIb+!nswCysq` z>jkA~2>qp3%z{o*7~l9Tm596cj@OJdmy(`!-2K?I?3WeBTri~5{6jts$Ao(+XHWA# zyJBVsb^s6EJko5HU>kkS9@a>NZa5f-R2(!@)EB;$bLxu?+x8fyjVmoy_WASo*GdzR znyQWl{?qsImep(1RHvp`C2did_20}gj|1L2gG?L!#2i^w?`B==vxDC+_qJd6u|MZ_ z=8hzBo%Atp3>s_XQ&M!}c`Q#JGi{wQT+nxb9uz(dJ1!*auy*ie=y1wa3&B_$^*Xdt zij+ig#k^eQb^1b3(zce(Gi(S{J!PuZ0tH%!=w~;#7l-Xup*kr%@lYV($Yp zyopwxK_6u7wt{9kznVChVxqfmZU2zfK8Ddv3c8HrN+1g0hp0IG)g&&TL5ANbGdoBVqXN#HI%` z=00k7HY|LMJg5j)R=4SaF7@l_NA)xNwc1=^-Qf*j)N+9>a$n41^KL_mRE6}}h(n2I z1^Df9%-|Dn>IA&dEOF~^w7if<`swC$8`Pf6V296$^@2=k_`TY*(2`;bc#4;VLT=_I z&+qfN7)ekfW93lS*N;BWo$Kw9QYg16`#aQD*yf5*RdB8Ndrjp|rYm>nz}C10SKW}i ze{NJh$)w=w(rGAHB{bj4ZQ2~VWZB*pp5zIP6ULKizRUw0V0qeKS9#f%E&GUhM&>N2 z)~dMv$JNf&9Jp3($`~FVhbCJwMQD=^xa(#(v+R0I=t)n{KRl?;E1qOZQ5jd z_XPY&Jcx1I!g)f1S-;&nq7m&Vn;#N>l}!Oy_Vsgu4f`%nayh`?Xn z>h(RC=952hjqEPwJ);&fXylnVuzy=>8;e6D0p1xcN|)9ClY%tA0i?Js^EM?WG_f#0C#g1U#oz22IeVeIB4zeWna= z&DFbgS`=)N{k_E!budyv6OL}SX~CG^TGKSCK3u%cpWsXG=L@H=e5c&B>^QgmqJJl# zwiEgz!#oM$Y67<4zl#grSa4;mjP14Zn-|ouf2tamsv@=;RAJx;uLPeE6;|pSeW>vV z2MUMuh(S_ zrJOloX%yGpZQzGuFsf1JXc6zP1)fqN5ieVEj;H4tO~vw#Dx`18I6h7BEyi0fxpJGG zO1tA#3%&)MN}M+?a$%u68ZPF6W7EF$wuMifJNqf=+3~hpojw|i6aG8(**)?!(|FKg z@GNNZ+2!NY^C8M^7u+qSv%) zc+D1nx0UIsVS7C{;j*IJ>iTlPQX2GWb!DfYI$}h2yD_cau(eX7gll-s_rR3|UQ@@T zep3H1Mbsyk;?Or)P(6GfcPA~~>`P+Lg_;ddn@HQnW{rT}?E^-M!fGf7UTN$xr|ZF* z+A5AYPmZU!`RpwtQ~}6RebXI&sSazUQVEnSHT1^=G(__-m8ox%+Eh0Elbny78;%7c&!HBAIG$GVZJ$l?HYcQYO8p7hTxjW z$!2t+Cklc#p*SmW&I8b>b7#+;^^SADH>Y929~}{4bVpeF-11)B+IA)oKL%jDd*Ap{ zp+}_Z84|}2Su@%asz7fEyS9VeV84dp)vnwmg;PHYF0`z+e7puP?&S5k=RKAYxC#(m z$*E4oIZQmXB%4geKP#k`ue+6fUWmAvGV*MDwDU^uoN0=c14>z#{F#<07SzKz7TCD$ z5X^MJ5>tXzm{afmq1C`JcnoeWDLDWOaM!odO2N_#ijAd7%*N-i{My_-iVl9HaOBvXA z`kI0P#EQogdBxP>DyiP(JzLOTHTNPn-52LY#g2c~hPSyf3otbuhM3mvZz-0+%)dQf zYyV0eBMG1%wcfM8^mOy0>A7M7O_=Gx=wUgesbXYnzzJ-nUYChi;%H1)#@I7$a`_Fm zhz{Gr-^i!S(-y_tRT)>b6bQGsS`;*-JM9Eq z$8fv=gA`Ok|epQQ|lt&rz;yRInwV_36y*y!=Gz`i90pUW8SWK1= z!~C7>ZG-fg#@JW-eya^NopOvwl)`fU^1J{nEeEW!8V`W!RB*sLD0R(777puganY## z_Akfc#Xm2el;n zvBbS*Y52CACOLUN7+_6&Ky;y}K~pQ#r#;YhVFD+$x(qcR`0u5};Q54)u5!kRUP(Qz z_`AL~ueY#?xx8@jf3*NlN(HWd~r|pMb+Bcpm0B?`pz~yl@M@q{x$+B7NmHIFf7UuL7zB81!w}@bT!lhje_roTZTuoP>h^hA|GUS@3*){ z23m1aYo$gdpH)>}h3}qHTmo0uwS=c-WZ=RvyAkt6Z#26^w28b$NDwaM%Lcy!1NV?Cni?V*`9!*Hw%av!STx?>qTsB$JcTfcY3%i@+wNlXVXX8l_-KUI%$MFdl$j7_s7H`8aezHlc3 z-S}B!QQ~{(+YxKI&(dF{dZmj=FCr#sCW~%5G%uzyb~oYtzPcryo`^b{ygw;Z{V>Bq zu?Br-8mmi286X$cHJ&94;4Yw13@)l-9&ehXdCyRdXNgQgI4O7V`lEUgP)vAdCb+>ubQPar&c^T zdRS_>2i%1K)6Ens*8L~qcYg5jkCTIz4--E>Ni+vrU;RC2SAz(!(p|7Bbci1p*3CP}iNDPxD|@ zNWY_HQ(xsg?NUlTL55)J(Yw(rXnI5Gxv+wP!uzM zSuNJ{X+T;wBlE$I<(b4_6m;5)yY-) zX81~RsEx4Y@i3}{pYDk zWIycgg=UvU46WIglkaf8v+k+{3h7$-&?WV3DQ+_qvPCLlyHHjB`Ba{Ze#a*>cbVK2 zt&)d_(r?(O;6x?65?zv|v0NXfHy;dzxkFOV&i@zCgkj&76sbpzZ2~}k;j`}#hiAEm zlw9|SMOmf=Zb{cMw(qPFy9fsua00Q-<*b^@r4bKVtCx^m@(XYO=Ws(B`A4f{*5gug z>R8H!?eVIlEQo4hbAD+Smv0UIveudL#ah(96wbEn#?-^q%P8XFi-ExZwl3jS(QO(g zy{4vf92%0aZ|2hm5)!~EG!2zLpE4=EEw!@rv+W6|3m4g8Iv{p?QWt-YlhF?l&Tdl0 z(rGJqr-(!gOKqDZ1MkH!-OmP7YFIn_zG9)HcG1Ai>iqbp*eZeL_)(cs__ zqt)1>9oK^!%;QNnC_O{omLqW`*!>01EkrWFEHx#R3;pkTY4OQ=#b9tGrMlT0mT_;NaRdI{tE@x-wjeE*z2Bv-JLqf3@?BPZ7l_{wfmz!Nzxu*3v z$-=ZhyrMqViRBQ{we5TQSudGs1t;#jjz65fe-o)$c=06fBzV=-3or?c!m+K^DpcVXb7gvBuR=PE!-}sE!Mp0T)D4hQF&b4 zihQp$h?36~D6A=&-0D40t4|iX^AtSXJhd|yIDA6rNpa4Ur*FL%r?;Mq z8jjqCb_W4WzxxS7P$;Gsh0Dl`=dsnHJF)3SZ4UeYPxJds~jF^?)qc}ObpF{Xgedgrj4@jRFY;`z9v zPo-Q@A(t9vchV2q3n1V0bT_U*oQEc@p2C$2^idcWLHmP~Fc-)osOZp}!FnaL`RqYk zuOGsxL5b#Y`=M6fc5NkL-}LO#g3=tkBGq@)U@P_D5KeQ}I^NZte{xek4Uj$Xp+BbV zn_-9_%QPg#)O3smD(4-|Q^XZ#mGlXvltk!!+ehrT0t55oF?PYaQZ{B>IPYRU#W=y9 zUZPXBlOr7x2!!>MEB15xjp`N3qvyL0(}K!Xk7sr`lw8U{_0JzYFKjhsbjD4Q)8dv@ z+U+QF@5lhL3XHBuyMH0oMn80jv&yVR*0gIPCm4jSb|}g~8@%=2#YI`&a+FmK!#jC- z12p*yhtUQBPGYj~`p$TQ2oQPaDe&#?oxL9(nbVy*c#4ja43mA8%-~i&+zPJ~q!X4U zP|Jmft-U|bayBA-7=9crPW-n5o~BDu9AZ_r3UlaFV5r@Nq*L>LjN@WE&ui9err4ty z-4+hf>X_>&i1$P!1nXq`9Gv7c;8H2t*Z8XsZnA47l_G>JA3t5_=C8%Cj(JNv6nfc4b}!+FE&&oEr_ zaF|u&cP7kds{KJ%Ea9R2-4)lukN`%~pmsgUvm4(u5M=|F>QLmJQdkpesawQU~Mg|-Z!iJe6BbX{5YY_p7X_e~f z)0&mJXovT%8Vvy>{=Ql=bhp;0j*b%If@Sxs(Z!UR>pxqTeHxP5Kl^?u2z3W5_Ko$!BW}h8^ z6pXDnubQLh74-7_H;-JJy(D)GJ7ceQn5E1g_W4OY9qBQk(a>(v-p{n2|DT%a^Cg2r zSQX4^+d1#{OsV$eRmdH$DdjcLC7A-_STW>;6| zSC1@pZ%r6M-%J*GvU8K&;6hzQod)r#xc+Ukge%1=%xdq)QG2UiRvcwr*Eh^+(m-Bu zSI!LWZS?!NoxkJndD7Fk^BA_$Sx2`+$mGHai(3sK(}(_Wt4ZSi%_Ll6fF|HoxY)6c zU-tF^_z&N8pp=U%Cm9;SExS&Sl&a;w38eN9Lecs|BG1N6Vd@DnlgeM6N@6Uvszril z`tIN9&9ZUyOJSsd9}V5+Ncwrs61>3}j?_6opNQ0`Zi6JOm35!^ajNn;^n2gSTqJEg zi1PMBwB^0(v~x4(-9x>vx>!%p*Jk~O`<;22S9Mu1)`t@&jbAt&+~igJt_h zXmx-K3Si;gSJl5+Y6dQv|9~GEacgL37#mQd>u%A+S{#$>zw&{LkR4`j}<#Wn`>ub%z1Lo@8eVv2THfT?JB^ z@Q7O^;u(mC)8F*QnQ3X(N&rX;@Fi{i=oTLSA@$O%-RW=*ERgW#S8)sat0ICqClC*k zGa#Eqi0aYQN4|X#a9%hCbHTp|C$tv}*_jGWxm^19^2e$5+s^LOc3ThqGE-hu`|4e= zUhwr2gbAOMt;yGa*p}z)>9e$&R!u^kVU^YF@b>pdIq|`C=uTn<;9@OzIm{!6QFUvA zXsP=t-rGuV`$|~H@oGc0jj###7K(58orQ5ijaRgR*ILcOXi-7>OS~J7Ub?lvWEczu z^zDYq{s$9ejZt2W-DfC^rR|?qDN*j+Z105QA|yhP)%sDN`D(1kqR1BEuT6)1Ex$*( z5Plm~+DK4`ELirN3+lM%T9Ju2F(5z_==<}O_N>?dy;H7kumRDM*=qbW48NR>ahD?; zdv?=o%we=OCPek#;0ynkTG9HQF9C0f)_`&a&Yz=;xlwOjy>2?Z!$5gze%0?UqlN(! zy=j4gEXgN@5q8Gl!uIH$g>SBW>f2M9A*d#NU!QRWRE^-3rv~b;B~hMRclra&LG7Zu$DscCUn3cSxGh@oKiKkG=jxoUr>) z^f=r7CLZj)prBVae4qWYoc)t!d;GlS>bHm@#*yRGRSdHhAJ53|FWSKxZIcL^2qT{u z>c2I=*HlOBLLL3gLhj9EeJaqF#D0K3FOsDkAN`o6C`pQ&V0*4a>!R|6xtvf zu$Xn=D{ocZD{ld4B!g;*5$lA{Ql=B0ZtECp9HPNGXybv>7=WFUN$d!>V*BzamZwJU zw1*~#->2~W&TJ&iFP|82&6PeDb^h6rA>G9Bhkm>|?AoWC#D|`=gWJreOt0KBlVHu~ zd+gd$ccrV-y}Iu-B9Yh6t)gpUQ(+nALq=dP{;LHB zu3Mz_^%lN5XJ2Zf-9&br%JL%|thOixcQFx`nGpt`Y~s}#u=>0aW~XRov_f=2o%3>drwSpkx% zccf7Wx(zTU+%V$|@yP8!H@jZoQ$Ah|)|t*91Fxr8uV;zh2`Pkf)gUw9Ba_}7b{3}u zf^E&i&A@7YM0mXTLJ?PS%JBv1BJF*LYgW}5a;LE5w}__KgT~r>BTgcN-}Z!wPyVLz zVk`AUo@DUv-L1F#h1#PGlX6HR!wrLo?*sYzTZu3Ge2bhbVFhVPE|zd$JDSJdGV_#R zpRTG}d{&+}RxCC17M7tpotBl&oq2Pco_%PwS+;})y$eNNnUy}V)<|2^_<;Oc@^;n` zv6*mhAPj+p{w~%iS?)w$ylwSiFev@?-^XI^{O08PEnec_(|DPmNKYgeM!JrxB5NEa zjV$~Q#Ddswl6I1QfebFmH}!fE{t}IaK|d9{qa4!Rn>UnBbJ%mh(5Z-d=>e}T_NUGn zVRI4i%qCH^nc)%O{?zZFYMIId@HPXe-N8cW@fv6n>gq492xN@(yQ5sO%kn5ARDL_M zLgQdvs}TgPxCC*E6shV_e#|@cw99td43`nG?5vSH|91V%-a>_%Vx)QL3An>TciIeX z7&>t_pi=I1%2||DS&DM>Vag9qW<%`#X{(%jGFCF~3!?bj|85@*>&?-x{>cuCB;cy` z)Pt?iAuTPQpw1& z&##g)Rf1Q`<2(~3uX%4_S%7OG(*~dp2obV~(gA#Va(sL!qff$&<6Cvl9j_rQ==dY9 zku(S{+N#8e8{TpMqF0=65j=GFL<~ixMqmF%y+KG$V`;*jfDNZurOeZSsG`IH68Gd~ zd*_n+=UNM2P}S$^fIVHXqu?{`CX3qOApnK6bGVjh6`m7u8;FW{)QK5?HJ6pMjfFqG zp)jsf!g##6vXcEt^|)CL_>umiX1K#e!eO>jR$Lo9=(VoIfu$I}+9mJtecC|8#z(!Y zbT->%_KDFa2#^!2ickPBdGWWj$8m8p3D$FJHbB|`bM%R}#Y3NeEaa@%l6G+)gyjK& z&lUlI#Y0r?w#9O?(zXDE19#Id&JHWFo-VVVM8s!@ud<%~ngr+@D*%?=-B zJidT~y*O)roR!f2A75q|q5VNM0Bc-f zA-~l$*JfFt`;P&j>0%fmiuEp&MN=N4f6`OpC@VT$2McQc{?crmJgbyM77qPH)CW}! z7B@r;A23ayJqaUpus-%Wf|c>qDNmVDK)^TcvNGyuwuuO{GX8^;O9Es}-mHvzCxDEZ z*TM*!EY^uHw^^w4v12uPtcZ};%UH!2i_h}Lvx@l%d>{~3`~&0yt2OOFz-_jeK}zNz|MU>hrr=l@Xp9%n{A=(0NFe-M6Yn0PYKnE#9Kx3o0U6hsSU+5= z{^jRvk+#m=L@$1;{zGQ&k2(GL*+lMg_8#)Sdwhwl;IJO24#$g#>4dNEChotCX}4{S z@|#=uI#%r3-n~HFO{`bUdstEpOo8K8Y*omLHhwIdk^CF(rs2fXHGc)zman=Wl5DQJ zY(Y4DmwrT!?boRJ?0X2?InFoSca76kJb%fu#Y8r7WZpL9XC?prVCt|@Zfl&C2RGZy zWgzRY{R39%9;d6>&bkhKlz|<3R?jL1Z}zVkWuO>-QK5fX4S}q&KCGIWU?;2D%;p;Z zCHGT+1L4cR?gfbw8{zR=TU#>mhF62F!&YD11R~TbAG2aZCTaO;FgIkp@l_4)AkVqk z>a>9g0PyCQuy{wFodxOxBDP-yx|8i(_=V~M;4hmG$#V+91N>8ncjhI?|NBX`^NlLN zas&KyjS~iN39%Vrod>9Nn`&O*A*7Z*p``DXB&r8c|FbQ7f5Q82s8&n-%c#;FoO00m zg%vb_U-c1j%I1Ix`_+(or^PWW-0_2)8FwSbBq+#-K z-`{x?Zq((D8{eLpod?=y(g2CY7dI^b@%~GzfFEO}>WmyL7Q?9YT2bQ~$y@I{8&R9( z!0#cesd?3K#Ke!CTJ|MrRjr@;45 zZOmrE6NI-*JW>_QA{xomfgL5ZAgj+(y*>?h*2VmXsU13 z5*LK<_*V+<$$6s_y7=-6-bi&2(U6n@qx+w?{EF?UF-gJ?^(+w=ZXEqex4nlz0X8wsz0TrVx|HBfcBY^ zyfy%kqX6K{&^ZdQJk1OUPnpUKPWdXueU&j(>Vl21>)K37Q$E|JwejBSBDI(rm(^>s*xa#L&z zdB=2nRY*q#cVy7J9OHL6kYI8^XbI?i% z{^s7y&09lfNY(G$8fr}bgsdHls?SiN&Ki-*WFn5bu~G{mYssRDmQ*OdQ5YfMsP9}Q zsV->X@KYvtbzs>|g#snMiGbl_?}>BBe`<*FHQ0sHh1Pr}h`tLYx=M zRQQ=#^~9EsYwE%q4Dr54F8kjK&dw`qp1L>GzCNWzg&sT6!;oVCl;dy{_^JLUYj4To zT&PJ!Tvr0!kafmw*m&nR{S*n+E&q<1i>%9}NKO3Y{HB&{gx9^If8iRbxu#T%7JrA> z1KTTeP1Es#cBC>OCbd`L<|k)s>4*2H1_=MOn;)X{Dq5Azb`{a8AN`l+W@Z4Y#qc^^ z?o{TdL77;+{%8N@420vY z>$;>+3{0esK${}$+`Bz#h`veayn9Qga5qne67g^=x$|7DqswYbtL z1IYF2fIbRxQiC+tZe7Tp)4#PwKZ0u7{^{q4(P;utCIGx{N})m({M*1U>C9RZ4XHS& zLsTw<>n`ozzo{5RNdE&*f`a~T={d+5KGHkK)pOwG02^y^O#M9+PlEq%1JZ{4FYJRo z4Ipsub32*J@0$Awi)BCVbWLdN1tooU8N5uP8m1(V^QbW@AI3&h6Ft_R*43ayGN=Sp%OetJt?S0Wy%nEhN>w42f#06Lh+7yxCEaHaPt zg?>E#&d^QWn<7-zyt&2HfDF^ksWUS7attN<=3)5ydx95j5UYv~wua?dzrg!*_pC9% zc$eLgIHFUafWEPK2I!y#sr_yfQ&@wyKrp7{h=dSW{tLcPZ89K>6|8zU$6c{(nZ!71 z2Z%EN%OX5Bpi+hnF+VJPzwfOs1<+`93!FgkW%BEMxO#On zBXi+TIlt@|49eg1eBvLV_+`gavQhm^}kP9$Ii)QTm{~zD>lX!)PO)Rc&1IUQP4%k{7`)QbWA+THyBmz*CGZyEFgegSYsSQ$KtRKmSg2 z!BLTe5X z@%_bU%!5_d#*LfbmTEHNWNWW*9i~wC#e_yk$mDVDkZPUHWuA4}<^Y z_Z4GXs0!(PzE#;#({(s>zKDCotyNhs6e9Ua7`2v8fr(=~Km&!P{3&cUsB$~>`g>Ra8B4X>6Pq8K+rFBVw~LNMM<5bK=WQbW~p zP$y){U$F)RW|)&9nxhhPJSrw_#JF$A4y|&rYCE>jIlW`c8nFtZR8i5$#N{zIKOEzm7g#p!6NUApW$1^xQfiH$am+3;z`B(GRSFOtA7N|9j zn&?t8`w;W32Z~x3c2&f}3`BH#Ci!>z(QXHaxr9C9-T~p%q6;1+cPnB2crv4+j0W86 zf2RJv)k6K^QNRcwn=y$B`)1Wcorfi&McS6&;X(b&mb*RhiUjQnT#f)KH9 zy_kap)0(pWfEqYx0~Eml?f1#0);oUJ$jrfEkDN^RQNNpq$UqPQFLew zpmZ++=Kdr)x&uHA6GZ?y5Cw`%84u-cmLS0|Q7r$_+>Yve4Eto>@kF!i}ZX#wQKDMkBZgvLXra1i!Vy$3YzgPKP-+u&eFK^5Ukttuex^1SL@%rt`r5cCez7@DyirT1>DeR;qn%o3lZrQl0GnKerzXR(n$CYMuw_6moI4e^zb zncr7kar;k`>NW?eL*`8g^JoXRc)q_vAq# z_Lz{qoEb8y6X-t)tA=F;-nWzTYtD^yG7~HM`n-NsY9-W*hq#mc>{rc8+r5pUl^`Q!C0q6;ROu$dcfTMengVUmE#Je>+jupqo zfo3l@5A)*aFuiHbz73cY?Ak-ms)G>Do`jP%M036NV^m?+jOew4lr8+)MneOthhXI5 z??H2QJhau+XGw(kn;~$PK!~YGjeUKB{8xGz_S=R2;$G%BEwk8>^%CHZ<)=Kt8o`-@xNC<8|$G zTU%95!d062fG4rkZ*W={C|(n72c?0Fe1)> zF#K|fd+8S4V?24ut`IK2SIWpq%xg5@{q{HXQ~ej1y*r-MM#09d)AS6!^!YnA z^^Y|Lie_DSwDv%u1HrXW!o%O}vsiCZSy81>Nl-~rnN=6L3_To;(Q8;KxeE^a z-Gfd)0UD%Tp$9di&AF;+0KM`DPB(!q(m`uOscLF`{eyJc1_6Knx=fi(gE)5r$ z=es01vzNZaQ02+~5=D23y$ozS7b#(V_8COR2}cMF4uR_{4NEO%2@rpqX(mr1t_qf#ivdu(v=4EY!tG*$^x z8foIKGpD1L7Mg{U<{ zx+_A&c0iy|Sm-egB5Q?`r_p!Kgm2r+7B6QLX0QTnV_QPe-@>_F7-kUG(Q6#G^iABb zLToygS6GD=)FI_ zm|w9AzU<=+Yc=H| zoME(hs5t(6_>tmuKF{m7@U2S3M@+p!BfG!1zENvSU~U?*I$1YCogG+s{I+cY8J`=V z>3fBMTSTCoM|G7eC0Dh3geX*Vekb1-wEPqsYJg?Mg^*0-?{s`XeB!g7^;_H;nMyOB z6sqM)ol<(&jCa0*NX z(_Mu{PwHc4rt=&`bXdzTsaKRu;6^6(E~JYTT#Hb5iaZZ$%zjD+K=6Pp+tgE<(y`&$sKYPGJx|U=pdHfzH%(uN9>4+M&w_Lh4 z$-U+mUv31{2s2lW3 zxwe}iL9D{n4&^pkWL)p#{iH9!$bc*F!I}H~T(-I78hm+udblnXY-&gHtI2LKFtRuE z0_K9CCu)B6wXwM)h$RKJ|K`vEG}C@Iaz^eIB^~z12D>su80LFYYwwL+sPCBkG3>utjRS(0Nwn0hKA|DVW&N35Vevqx&?rb3>UaG z(jVVtz$W1H`V7cg@VQ6@&IEk^PiP=Brm|aaPhNzxZkO*}+^Y8Z!xAv_^|>Vo16Gr^ z$C|%>>3Jkl((bs(RLr6cE!-_sd?I#@;5`KHj|X^-feus0-zV2{Qwcm(2Tx!ZVImqo z0)l_p)V2O+gWKbF71ZkOEUslO1*u}=<|N|spFfZRnq;3N)|xnKep5bQF(cF?oZRnB zDuO2)AYp^tDmHE1An*bJ!deu7ZcNvF$5JZ^G;Pcw)y5Rf*6#`l?Ui|+JR?D&|G`9Z z(7Pvb@BcqnpS&jn6zMhMcj)42e|Do#%pZ+zTU?7wKvx^7b%B@8-53-MifI~c^#NWi z0)WC>g>L2*o$n0br6OTRkGGdb(UxDQbS^V~$)QH7(Y^-F;#rd9n*H9vJAI9@=I2zL zJn$c2l2YG&CN4_;;08K2Y(2xBq|o_>vZi=umMGJxs;)q`tUfEm)~_eq7u)zo4wuFo`9< zBC`qH-Jc|6FKiTl9G4xM;aFpy1wUSG!M|0g*(YY39SPMO6t;%ncRM2PRc10=p9u_H z?{64?2}^O`ckc|Gj*(m4zqQL&`rfPVxO>Uk)Yl^vzss*bIuIHCtXJ$9&p?Ag(&J8l z)H$Sz5f3yPW<7~@7`}%agg9{{`h7XJDAf&>{A%LKDRDY`(!9EM zxq}ecfupPJKWSCjT635`vEfhkVRirJ?qBcHQ8O65!pP^@X|<*=H8NSoJzBg6Hc<-Ii@4H`X*tYg6)WiCp?5gx`tSsDD$I+Q~HZJkauAuDM8`ex! z;93{Y1_A(r9+XwwZJyLNhaDNK(`WjAH!Yi|Rb=+xTx%F2&;|r(ef(@>jKac-$JY1w z4%6_vi*vAXIR(lIrQ4q;KZKy8@;_GpIk7zs2sr+BYXCD?f0p>=*qAC4$d<|G-jEXu z^c^|~-N9`}wjPz-v+@%={iDUs2j!*Z&i%!f+Bg_!Xh}!QcRB!P$conaPK;ftpjqAc zdJs^BH(rM}I<1iK2gLQib2Q<5D7D|(F#5ZP&8)xXm%gPKHFrh2{foYBz3Hd2x-WEM z<#(u|L4)GsrB7UMz&x8&#o8SU^ALY@dW$yD)1CLxtj{s$5j~k{^MjPErzW@~*51|Ows z@10xtj1?0}>sS*remL_haocl?#_EbbxTroNqW zCwoZ*-!A8(_^cuE9!!npdKZ6>8`(BgzujaduVMdnnAZa2CAkD)S;mP(CfMvF}H4U zAhdJ2H>N4^7JjwXvenAIGJ01GA*)^ZRVf2J4Mj=y&bt|tsl>UYUgZI09<=TOKi`zJ zZRQWl9}BL(Ul9+8O$_J9hcEHTQ*2wy7A~-BLU)82?9ALd9n3Hiz6A!pPJ+nq{QQCq zxBE__MEmGLY~~Fpk?8HClNZKJ=xAuY6Vzhv*o`AD<^@OT?o0%>dmWc^9C0`1Qsta{ zOZAFX4ils`r|)u0p#C|AZtCLfxE!UN@APu4%W2lI{_0S;_o+0zRarqT#G{k##`Ev` z$gZHIv9m_Hx!p9V!*m(77@Z7pO0&zg?doQw4fNb)5v8+viR3^~_swUZhLLl3e{NTY zvI#w9($x@w)X}BMG;VzL8*|MGB;%|}cwNKvPrh+4$g2vEm`cPFe8K!$#1U$9F;VPmAgI9Ul zTYMlyMSN&h_Npp73LB8vfIZ`A+~iS$ zNafzHhv(*vL2SvpF@t>X+DPBt=A zM=exu?4fDNcWaF_UTpn7cG$`dHF~3FBp_7bq$cfO#0kbWGeKK0=%V&Mel>#OzaUfw zhwZ$rB!sH|q~4PqrXwp_u`1<^@QNK!l-L;e@Z9OBya65kR4FtJKX;X=&}?7|#*K@a zPD9SfDCImWOzdYX*%Lmk$??ri+iNVt?#4=p?ziebs-3RCP_w?6;Q2a_!=5Ru-iD!X z*fENzc}S^Ua@cxLb1&YX5^fXKb*7F8U-> zj3Bk@H;o%?=tO%V5Acvqvw(^Fd&c(1$G3`%SCAEdHel?0bF06ER&Ny=<~gk#%-UBL z?D)I2uWtKZ6XA|j_2UcH zwp}I3CVzn_!b4lrYUS!b5q#`#>F3Mg-81BC=2OXW*=MS~6!&Y!c^Mu@4;_m(Bun(B ztVBny@f35TC|d7~;?kJPvlb*^t|OKva+Rmo_WVPFOcvctXSsW&1NL`x%`En6**riT zN|wy1$*@6scZ7}Moh4{m%AhT;S_9{pAc7E$u$@iv!x@dM$R+MihbGga zI4P?^@o2bh8J%y_mR79$FUzEXEiMkq7wTl17`kSs8^R6Tbqs7GZZ3i8^;89xnePfe zLMw2U7Z zRCPHvvup>W35kJ(GfBPnsYB(DzJ$0H+B=Kl^oN}mDy1D=U$~4H2d7?Dg5IfHUt~I| ze`3*RWk6gSnNIPu^_tMn60+8Nt3$sy`nI)z@gT)*T|u@_^*IR8C=8dNEf?rS_l7O2 z5~auiO(!tW06-OG??Z!C58q|1o$gQTZkgebLt%}1dX;k~^@DpvRgo36c!*0LBBwdy zaAldf*nxuQJM#GZAf0$Dh%v&g8f@4#MWQDJyd|HDQ1bm83s>7CgTf7x1n%@P?2P>PL|LN z)@(Z?vE&kKUr94@`!{qy5{OKoCI`Ox7!T1MtT$cC4qY-6_svSxTYSaxtZ?C*Pr@xN zA#2ETsOL*1LTE}}Gm%)80;*Wk+qu&q#t3Tev6#`mN!y5@vw`=CvWdcsP|NZ(4yLXm z&ZdLJ3(^f)MN>QP%ipgC6j(k70i_260qVcEx+>~69xpukX`z+WFIc6P$YS!K+QyL= zMFwy&f~J#eJR+zj*RRpncZNds$6Idh#anv%c}87gfs_Ep zDv9pzA$`}5d!X9e!rP{2{3mh zxs&0BXZSP)J-{$q;}6ink-1R9c!Pl}EGKVb_%gT`UtWVN@fjM)RPP~+dOs5{NTsWjBrxs5mv54J|expKcLJ&07{nu zG`G@LJ$8N;)Cs{H%n0lcX6+N_$3`ERCu3iMh6+0DZ|A}6U-^ZcfAUKI1y)R)e%c7P zg1J`z5>Uvvl!R1pn*5k_9k$S2xC2^pLCcrHTrPL*Gl1@Ec?*HI3qL|u8-tpimla7s z3h435D74d5C6Hj0AkGdD9{W6I{78mW2cp%0CTJnT;h~3r61x)={_OzrQbwsy{%>;G ze~*ljpasBO_0RdT6SA^k6jO`mnJR^wHYM@T3u@3mY2r1bKoJUP-cFX>*{Q($e=PdcN)+b?sK->cgl%$|M6;BmLoL!|JX&NRMt`-HIkAduDu_%&$VnZ$gq zDxMKs1DB?)SkpDGutP%zcZULton5Ue$ZwS!UWOTDcUnmxXixy6Ql@=-SAUIo?-MDR zC+*tB!~1|T2~veDMzaK6X3pu`yLxw4W=VH>0q9@>MF-VKRmPyph#`tg=cTBFKKBzN zhPD0z%vXb&tbzvK=`BtP`dE%GN+xG2eF(hV0#qj(5M}<~ zOy>aeGwZ$7K-5k3REe}7Ig_B5K?RPWC<|fWDp1A;f(IiITm~Zq?h-tZ9zqR5z<*!q zjnm50zrg{3^W5oAppgr;c1P2Y1b(T;FoSXSw^V$j*9)nYAJ`mLR!fHGDIA<$3IOrk zq~2t=xX3eG?}RkZjT`BYS&tkKhZ{dSIrhVh^h!-oV&hD)<~7Hi^etbXZyalk*X;U~ znXQ$stW`KMbd`t0PRh;Zo1UK9M{3mFkc?IhBtn*~MF^KbztZgC9QIL*dvSLr1G{A_ zdkHeo5xHju<1ZMqvt>p0)d%!UpOg&ppClZglr)S9ox%$n*jH8NJ%t-!t|-i1IIe1w zn5x{HaeUZ(FMJ=~e+a8z*?2+Bm?_y#x1?#D{p*B%Q@`I?QYwdjX|LHtOIH^z6*xy_ zB*HYCL@W8!f2CIT>jC#$it>+5;-C67~35$8Lk*O~> z4uUu@G$b2rltx+KPtH)yg!7N1Aq!%2$<9j(Pl+yh#d!?S6GH6YSm}F~Pw?ue zOsVhN>=R|7cSbhHpsdMu_Hcfj*Na0dp`7@~$B|o(63CwZ-Me4D5|3iNGWXQ(;#Bw# z)6BdIk3Xl~jLFmf@;tL$3YI`$VBZSpOmA0Z z8Nk0-S2jD5bnN$d-@m;wnL4>Xy(YR|7&Aql^8{9ZPINl-4~D0$-H?{ zmq!~KMPKjg_WN^K{gblUZ%J@F+QhRT%Kb&5ChnVlWqB7NY83P~(0k)B0Re_G5WeEg z(>d&T;%N(5b(e{hfPez&3*s+& z=*#nHe_>quiBnr^DnByU>U<`u#12|@k9Dm*Fj0G%&5PDw?N5@%wjZXg=k`*;>lZuI z`uFF%Vemuadv8Lv$yx(P^doJB7fza=nVCm4Z&k|XP-s3NUBWYpnmsv*@ds(wbRP>r z=&6%e?F0HF5Nm;!#SKYSK+dvL;gtb%pJY{=l&iMd)=GnG)u+$dUFg%G*2m4c1U|b! zS1p~V&}0%aqyI+CnPLYGm+k+$<`Ypoq z_Fh${HT#3u&jbUMNR#mO;2>_L>|)~(m>AZ0j%z9_kqP&QJAp;Q&p+06=@&bzpoy#w z^m)5uR^FF}RfJ7p*6W1M1qXH3zC-BwfoiBpEO}`&m}l0W#r^4tw+;Fk{n(Qv344wt za|y&*+dYWxm3iH*-y$a`AY5dhcIq^`NFb8H9#+=I+`0_01%Ka$$MOAe4t*hO9CtJP zyl3NQ!n|oXMiDfdQ^}VJ)g~$YKNZvYJ9T;W(2w*RB`w=e9yQnv5{)rv+jQ<8s*R=@ zpo5Zhdt@MD9-CR0R8oCGj^EHVtLggEVLYwwUdsHsCP>}Y<8z|VlX&NY31Yf{UlDev zv8>*wl>7eJT~t`U2HEr2Z{e^}OkBkz6@1*e=baak&aIAML?WXK za$n4Qx|i1YDemYKl~av$$-@+|rp9GWI2>Qb+?&Zjd|<6Gq0~3pszF1LzxxW~%j;vV zPFo3P-^6C?CyU0S=f>k!t?RuuC`|zA=J5#z%fDdO;AOZXeObdlx7g?QIb=)DBePwu zUkPd-8A}~90ay^~3+cj!C3_*MeDNSTiws%3?%GU%@ zyD$fnYj3Dv-cI^=;##zFlAGQx%8b3c{blGbz!4WrR<;@ogMpn)1u$FjpZW_l z4U{o#q;SsPSm-0oI*4-7C>5+3K3HCI3kE-~y+Hc0MsVP3b@JxR?u@ z=PrTf*=%FgO-;ivJ?F9(eC=4pH-Fn_)s{opE6BA;6q%*SRDJt(&~HTY!)SLz_!bqh z#F#y1Zg%kOyPAIlS4~wVe{tH=oeGIhK9>3hWDX2Un3I!VN}4oQX;b(`TK$Fdhg0(k zWo<`xn{hb1@K6^cMkwq&GXC6Q&GPcI(Q?J=vuUNE?ae{SjcVz?@9Hjm(CJ*>vVQm` zc-yX>oZP0Uy4dK0VbY2tVv+jJWMI4!Vs@E2Yn+*{JfuSbG*IrpLLgiE?w5KCAF$Y$ z%Y7VUZWObf*Kmq2WCH=h6vKs!E?VuN$PCf~sXN+jBA+|PY|T9?v)56Jq5Ld0)q_bN zPPg9wCG#{+E#V=q{>5dkDRl?oGz-$Cs24uUf!+M=HuXpEgbd;IzKbq~=cUduyJjmt zFcYjR&gw0!uEEy3Z_^}6XA}?CiLg-SSKYATrPcB3a>KVQNqb{IV2j2sjAu3}f6uu4 zas-EgHTV^_Iy;|qF=PCQ;t~fRm(~p4<2!TcqrJw+VQ`$Wpu><4JJF%YB+%?>&r6Bk zyoz347%!OkMq$a5Hqd_p0HuAWo?M9vA5yt*qVxNrm|ss+Cn|~0a(c^si1?cZS6}O& zfvrTeWNG)nT>{B7sjv>BKk+|L4Qv~T4KN0dq}6c^#}}>jW$o-dVI3kYt-C&Z%Wug1 zCgHi7qqVOZB*T_hF+E#4W{P&cPw8-#XDmUZ4k#4}+0+z{WNol_-elnYv*ONObwy(u zIS79RwX@cLSFrY>^1a3Gi>13r*1^rH-Gf8oI981BnbC5HQ}KTbHRf0tM}fI;G9rJj zp8=ldFwjC(%i8?a2p>lC+Anw^?V)(JlXu-&V>gg>LNA027h4~**?-QnDSx^u*?r0< z(OtA9O9-~D!Si@Iu17CP`iJ__nR#!kp4OuUso>pwX}Q(8n!6xKdQ@v>nqp|v)Wxjt zfiEZbdRhF1E(K=hxk80#wLkGIO_KIL%?nACG$F1pn)z<6wbV15NFLW1!@ZJlro~5d zt=+D@nZr2g&5nuyBOW%w?zDD~>EjluQk-yulVqxKcV$J2GhafoX>{}K0kZaiqjV@| z7gBQKrPu^!Ixk=L%7Q9?{?Z=(i{r?24{J7LN!#AHBEzbFQv->qJ>G})PfaU^cRjyL zdawE*`Kbs9J)SP|7bJk_zOG9vpPg@<&&}*F7Rl%G&YP9cQ@@sTq`96R^0B7GvN3Ua zNefEl%Wp5gjWZU&g{KG^1AbFgFbTU63d};c8@|?PxF$`{xs~_Z{23==ABdDq`X0_U_h zuF=&~MK^ZUzoNIZC*D$`CMdhO&|~sdPpvx$@Le&Hy2#V@l9<>^InmT8!LI>vCq%7# zRT%Mkv*i+<0wlarBuCg8up0R&mZ=Tm7pO+5 zh7XTR8g@~dthXl8?brD!04q%|>FT5Rsp^Lzn7E0E`QX!`DW1Ct?wj=ATx?ig8r~Qb zQQL~LKKS$%J#(voAv5!%L|(=4^0HluF}JSS4{4s-5$CXwptVXn;8qmxEAlK?h| z`DsAJ4@A9}b!{BI9{TnE+qxuwZ=DMFrB-CIy8f7M(8@L;VF>w#3T+sDrVN*rC%^0! zhVdtUR9ktxo7^q62riHANsFTD zDNl+<;1ojl1re0=pz3Ly`gA2D^TD!naGFo5dUGO+<;iU^MqXjJ#2y+b*?I0}dqfVA zXX3nBpRhogPdefn0)X5tOVnSvmVA5pwqRLA)>nO~{N1;R>Tg~vER~*e+*8Z)C!2T5 zj?M@48E=F&$y$~7CUnz3C}lLujtjFmHPwMjUGY2&te2YINS=2p6zp++Pir*a>E*ah zh$TPv^WBQOk{l|lA3M3dDHJI|zXLa92|tm|bxnN4p;N!W^tiA$!WgXzMTtabb#6xm zU0+?ugRx1r&gV;2fRb+uy=u-b;mV3kUZ8XO?Vp|3c+H}GA>ZY=@pNZ&dQIgGt}4}* zeR6r%tucBz|5%$#+Hc+MVh#nUhGp6z$HVS7_nXH9%xKS3z_j{wx9ZcR;}unpJ2q)6 zkrHEDYS*yk61@p4JP#4x{tk1B68=TM-BTYyxz=0;L+7Ixu+>snN6qftp{rU=dMlgV zH&$*fDMzZCW3V%_TS_7F61w+r z0kLbd1%CCAuobSxN2AUny8h)%F5(9Rn`8@4Ux}vv@nFEA2Wnw*?D}5pl4=6|A6P1Fd#M8rq1x`Mc57-)LS>u zgjODDQ+(MM!!CaOH;obVbi&V+Oa%3f8X0lo z&(K1+R7PP#ky~2;#jyeX2dHHCV?O2~?zE*}Y{*ZuemzZbXJm!uoUz!iuy^06%G+;5 zlc7VvK!KHcQ0{>DERRuUpnfA-Mo_#89bsVWJRoM)2{rs9MR{T4oI^()_Uub7skDM%9whluvGDQCOE6KASM+L-P;}(s4R)!Af7}I3Ea~hFzqdNwu1ay6 zxBg(YF%{<{t51h-Q4clyS=aFHY4KAJ&`74qJ_7`=nVMW{{W$&peI2AXZ@#s9=&4O3 zeRBNuMQ#-0ZHm_xOT8iDN~4UxxGkr2Uu530Dcq|@Izi{59=oxK#|1=FLR^EUU40YO zI7CZBVcIY@8jM)Qx#8SH^3oEk_;Yu54+36`KO3sVxh>@d=nk9LXghvs852UdogFmv zx-h9}`@O&4TE|At4;N$X+Cew)qbY|u0|IF`4}d?5DOxI?v;C< zU(>3RxoN0A+B4^0M07-FExq1IGtrI>@8WjsbJP@0Q?@CSg$9St``KUf#!y;|GA_b_wu|mK{P*OBfihKQ)Q%UMWG2$s7dmEE-opN2vJ)} zF~f*iB_{4#>#2jWrkNIN#D>FwzMjI}z(bQzT}a05yfO2>Xiwod{)D9@y+S3kB*CR5 zsdtGy6y4lL6iGUPV1T_CA@nBF^{uiZ88SPLlQZ7ny?c#JSVn{(Kr@j2!WMa>Q(h#J zHP^?i{-u3-{(Ku%*DVoR-Ll3{iL@WAesG3aI>8=}shxB@(~(2*T@j8|i?P<(18y)} z$@(s3Gst{bY-&KBDf73!Fd*>OVQOAf3wld>z&>T(^OhQq)uDId2L3VGO2PaWF>X{Q zdgx+VaPVu|p9hUkUZQ{AJRwl$xNk?11<5`;#LWvsk562++~!Jjt+Nd)L=OgcoU15c zFBK-pk|&KQp78CznWhfG^W)m#11kT zg-a~>(uBpJwqOQ9TR4av3%r#=9rXY8FJ>;wg1Ko=K}(pTpVG^U%HG~SZ%VPOZK5Ny z-K+{sdk5kjNf@O(1SudKDgT{O7W~X;Y~Pm&h;pG;Jxlu1qaDOl0n4C!<~M&n1aWLt z!ILF2U~o>9M&^9~W3V+n=&6|Nx&&)y_y_{#+@SB-_)N12qWn(fESRu<=JW^%k|Sf_ z;w90_C1uHFgiyyA8W5*0PXrHG2#Cip2WkW6V5Y4yZ@z3XrwyPiZ^E=caE^rKYVLp& z;;Jjwv$iL>vO{P_O;>QbfTrt+LG|zp zu=$<}i!ch@0Otp!{b)`(z8QLVLDx0-PcAWJQhK}Ym;Cn^KoBBZ*3y?&CRbOkOfLDG z*iaJs&cwpgK>ORfXG76skCu+p&GULGDC}G0BX56+x=sbu!ENB=6z1QCwp~D28xXid z0=IH-kcs*Lgg~P~&XWwz8jlKL$+Lj!by76JqHfbL^|WedLL7`AfG#Kq+y8$hu#!?5 z!5qoYN}NvEL$b(f?Vf8w_V+vbCS}khb^$?snkW;ZZ^Oi$zsGOXPK$oL?uwDPLc#G3rFs!0&aLNW*(IisGRfM> z1S6Mi!-8=VwVfgFpkfeh07tMuqZK9!iggUbCY~2mP;k`lAO8J@{=bh_{2!UB%ZM3r*dSd z%H3>6zzCE~5NMEq&;Kh)i^F}0*DNF7)>Mc^W}g)A1ulxy?&J!~D3zN}llC8icc8D3@t3w5ii~iCr%;NEuuoQ>)z5>!f-rz1ARfTs*N(1S zdqtmET`ithQ1Ad~t1N*xihBMo;Jj7>f-HmNnq=qL|85A^sHdl=;p3DVX_NccDzdT^ z^NNbZfHp9(|0V3*Sk%{ex>}%_6cNlhXJTTqHmuWEOI1}(CX>0*qW@ZDvhnM*lIqyGsrhj?B)7@mUK0pQZ%U!0$h39B%${1#YlRxJgSGx=%O{1)UTE64$JWi?L}w$|hcU(hCc=wme}34y)(U9m3#HyfZ zFS?S&WN_Io%k+C=z=$5SDvY!v;PD`>LN(Eq7D@I5Jj}7Am}LCbIW`#iYfzGMGk_4H zz%=)rzib0^IZ5=MKn?%W19BdNOl^FfJM@=dfaY`3OwMa9{oP9NhdW5}`3}QB+ype4 zNVT7-jQ;8SH{>YO{#xW8$}wUf<+R()|Bl=7cU&0y@;}q)ApH!203Z6=zptc_n1BtM z`QKM+(kmzWKl+j&e@)?Lye4S{9pt39tIbX@(pwfA=}n*+-v*vSK$Vv?D939|Gq^iI zyf`UGf$QCQ5G1Xu{L{pcUzaiBiFx?}e_H7@FqrbZt_RFYcTDmb9E_IS{@JeqJn>sTb8J2y?CtL(;T%cQ-TSBR~I9;Q-% z8?KWchRKDv(?;8X)sQV||50dP^7NV24S#S2M8sxQV#j=xAh+V#I2niFMq>m z)9;P8c&dp>^1bG+M%?GQ8chi&G5j%@s|2(}*~;Xm)=(`C7P{ssuX#wryDpskd|&B1 zm%Y_f)OT2ydeR>@C{4tn>BMR}4wL!odyAf~bk5x(V9=*DiQ)?xX+|{AK)P45b;sFt zqHMY(%B&>Ha#43Dq_+1vD_i~$4mo_r!*@5}hV+JRP}68hN3qkbP4>c4mEOlc*G`+B z)u%f08KyR84W~L)CwVrSVh)XNUuF_iLu1p#{jnPCNK4$F9?$Q}EhBtwG-09T(EIOB z{m}wB^5gxUwv4^0e+T8>Zub|3X&tzu8&o~C4{=g~^NM}mofn)tF5&moc+W$c#qbw2 z2+g4tEYWa0?Jl$s+hB%wHr&gFjcrMn^u6;yP%qO-p1i{zPua8ZbCa&feMK#ZwSYH6j5@$a&97cIoH_?E^<-`0Z?X!X)%IQtN)@)@E;Nj5vfMR4=)vF_+5Z1kL!=DtgPHmLrN-hB>~+QOTW@V651aO zh{Id~B99jHsr&T%TEEr8I_i9gE{=?Z3C9W zz3ci<4b1}EV}BILSNo^edLK=lxuNVPJg&*iV3+--`kPR(o+Y&nkl%rVrLLZFVpmL{ z6*HP0jiOrnZX#}tiG1Yei0OkI(CibSSrSnihbr}zUr<_0I@+7^iLNJMo0osASr>O7 zo$VaTRh*6Ib5syNyKOI&Y*INMGK4EN;sYE`~w`dQW-{JH@53W?#K_$`))a4PC5xCU;e$DZ!Vx||tBnB;&s3<3asu!n`<_!M(^aMm1XGwdxNJpDwouQ$~Rei#UWvWTlJB$R|k5(;}}#i780t*vz{D4B&< zq-rrwvkDS}Ijo(2<1w|lsnFWC$Q0%6isPo%NDqG#mSBbnXESK@n{<&9^bxROdZ0iM;c_)AH&si4B^y%V38aWnPH7ehzVpF(vF6%;&;(_l_;wC}>Cvnv? zaXQH%9jRt>BlnhwN6}Y}bH#qUMuX;ygdtd4Ns-Rh+lVc3<5Hqk)AD7~<~HF3Q}@YD zJI!Q?uE?=+EMKnf9LOIf<-e788G_x0E2U0fF(C#U(NkNW0RH<0sf;+R#Z(h|uBeAC z5#3V=#UI|#cBiGd8`s*A#HK}O;CZ=&r$;}`I{G!ws z^-++>t8jFd=&M>X!=M?yu3WDo z7l!T`o=$c0xkwQX^9G@**YDiVVZc7n^;|r9m+9&OGRtC`{}a|CJmlJ6X=>HK^h6mM z>K^@hh#OJ$;HKI&h0pVWkHmS;V=qLTb;iYLAa7jH7MXFIj;wdp8+ndF^XhKR9o3GH zO>&&=6xG(&PB!~_x?qAZ;L_3&*R3hVn48Ox2e zwc5fA|6f$7Qj4AGVaOpoAmYM|)6a)t|2PNIic<4Ib;2`06kdL3x}lP)4vCH(d>=B}^ae+>ginw(t_i+TxoVe}(r*{EO|BrV;0ziq#t6*W|G3ynE&MiCAfsXWK zv|#IIDsObkUAW(#56U$mW2H|-r?z@P3VC)=h=f??=>lsjgX_HY51&;iG-Q1-JGqEZ zZu$S|XPndkKcmZEPY;e{1nb3`zV;47(>|;3*U|bC;O`&!QDwJY8|=5X`h4rm@< z&lN69Fgte<@%>7e`Byj@AxLIU8lp)hwRNIXShr+1GWf4<>-5%-e+94$L~j)@d4;{gl+)tC)~8e5=Un? zXbWZwsQ0GoedD$e^N_HD#`JkpZ~R8D^tn1uOVJ}v?|C;=Q_h?%b9Qr%*NJ4>Ebm^b zsS`c6VRpIyZA7qP8rTgCZ~T_YNG9BoiOXk!3bp8%8kSqN+6WJO%1^gI)arwJefx-b znw4|3itTI>d4%o5_h3Mett#o}sdT#j$m%@-PJ}tgraovjGMiGdR(u>-cntiJbR{8N zu{wmlb?>pU$<)@it!6`%-ORzO4aon?9otS#yL$S2dV|6*HSkE#ssUihjuwQ)J5SD% z(p(gT1dtpp1UBWodXtrvY#76sr!qV^A6=}cwMRYvz6OQjb)2awcLd}f>$tu6REHfW ztXjFEI!>N&=&$ypKd@g;8ocp1_iiB|+mfI(1pp~CFbMNOy<{WdJ;zWE+EG#bCjL>_L6rkycV# zK((ybej)KFbmenPiOM|)G{olZIOQOn8P~YyxLgX9czdMWYUiQa&Z$QWwSwFQ^jn8G zoJpE{G%ceJSD*-fO)teKDc7kK&F(j*6IkKGcI6vw3hA(xVFK88oz~o~X>G2Xra?=W zpHu+b1YfM@+#v@l z72lVE+YH*8+iJCU7jx2%X=hVD9UTY`RBuuLC}EH!yPNBI_@$|TnNcyKFG9H#XL_iejP4dpy(~Z!dBR~0G;&4;m6B{ zdf>77;HuP4pI`Xk*NpDnMS`~wT9FV+UKRUh%=&#X>TWHBThbdXLo=q`A#T2-`AeQBHT-g1i%JL@0e4)cK zfDIirouO3w#*n$XIOVnhgZy^LrjN-hqwG^ftK`iWG$XP;mevc|-VW(xo)j^8kJclc%MC?v$kR_QP^lGcHFH+$hq)MH;TajBoDsw_r$uwCVlT# zXS!9ku6DMh(DCVVyd4sdT={#3Jv!?h!6AS8%Otv310+P7A;po!G{|0ic?23`*V|Bs zDGOLkL$o+25RY2}HYZs~P9ud{)#2b)=o#sV^~vCmK{;DN(t?luEOw)vyPA^t7Rvw9nj z?}KJKpJWtXcyB3AZx|QK`&Ov^t5T5A&5<^XhR!6I4m<#xJSe;`xwwBI_>$nU#SdHs zlXmwLl@$jy-6A`}2`*JutSThg*dGKdZCl8}91%Da>vGQfN zkG?Bm2L;Z4#mD>oh?3sw$(&iFTstUmJS$|^H%2!5YeE7^ zgn9Ny6?MvRb7QGjA{vN)cuF5C6Rxlp!KN5JgcC>O0IHS_fHyxX@7{6~F--|XK1m2E zqP7Ak1%c1;Z^L^wcZ_&Vw_{=`3U<;>vO(2zTgy#7)lH9{@}55WzCzmtAm`%(V)?fA zjY>61taoBwrcEB;rp!3@-dhlLkmi!d<5B_XQtZjO^!5x=4?fMgJ@f9E^=AgR`7d`!BHB>eX825jXCGyYZy-&ET>Se zmJcAe%NHo-Jt1^c-^alklW*l2BpU3{QK$0eZwet^cf>Svf>Bf*v&PUrlS~svisesd z%J=I#dQbD%r8%b&5)RAF078AZKN^5>^e(QR*u~nFxHmn~v0AkDdh@A3hTT7%3D41Y zTg6Y*3BoRe>sv`YLBD?)`JmyKR);|ga>?*weS_=a+>gNDr=gdt&w-qnwFOTmijRuB z)bJDmKYFA+4Gn!yCTN1ha19*9zKFR&%YgjyS>77R-ku<#!hdjy^vahs2=k(nC|bu7 z$~g`(A7JP2WI1|3^n6Q}$Heuz(%*!k{^VzEsA+&-9qhb*G<(g1+fwZtXRoT!B*5S} z`WBOXb^ctGrFp`-G^>HJS_-#IcTW6D?B`mcw4RSSA3_ef=EG3;`0td|pKW8#zTi(@ zuiFpRJRLE^eD&94p4LPSByWV4z}jg0P8{&9Bz)z8mR9m-Gu^JPMNYJKtLw53H#+t+ zZ-b&3%Xdx11dLFG*U*0DfF@*<+>nWzyU&~lHr zo@zbUUz)4!)W#|JBhhDiniRNkG-sf7SAxp>Mn!=tvZaEFAg-rYIug$8E-x*QX+)zx4z+MUc{)PeYjjDtgJtn_y)GG zJHP%AsaUUa^WUoc+IjH%#_I-+wAlsSw*dvJ8IM?ty}$ZF`}4s{>w^OL4;(J*+&Iz{ z=5(P9pCaofa9ia>KZ0#d&79p4_5L$&r_ja=`g$oaTd0;6MJIn}7sm8DI{~L-VQiefMHv~E&TiWk{B_@L|2n)? zP6guqF;wS#--zl7P*CpP?fbQdD|IIfYn0=!H$A%t_FQIk&;Rnn6=2XD9v+&wxwS!q zgoT})UY`{N8@t@(Wf3)EhgEwfkg9aHiLM9>-O6%4iZH6o&fKBr)s!!^j~Fe9FNldO zGx7ID(Bh(_1el7XNgE`zO{;EZW+v(i!s%zVqduax*4x43sPnjEdv z#*&w;dXE;@H9mVFr>7U>X%0Md`qLzTAYT8q&yi#GV>s77niILlvkHxN(shsrjt$M$ zox0YM(8}$=75@MXVa7Fr?T8)ff$w*-v@vrP!^j;LU*EzuK>=5~djb5vd_U^wFzv~wo}5ZA0Iy5h%*|CER{QBc42N55;N#`b#<+Lp0`Ks zAKjHBht|3gB)&>4#ns3$JUG@oK0*lY;|`PG{-Em}&ZOLn_1#>MzkHjO)g@=OrF>8| z=r5?x{yqRkkD=1~s-}8jpI{2*TTUSE!~P^9!%4!_{(y9EO3H1Qlf9->*C*$}P$;x3+)S@4*l8$nE?&AfV0a)=&I@+kT1;18C7vCO3^opaj5xJdsY`V`D<%@R%khI3gZ|_XhDl@V zd#Ny3FP@Bxv;@576}kI|3CjRJL+oOG?#B_CTOjM2w*5aB5$}J{2Ouuj#WnKwX`MX- zAA~*2L0dmQ!!0r+gSkBDI`!A2T1K zGWv*y&atI+rn9_=HnyXs#MUeN$4L8M+S2&~3=#oHa#+tdpBR4P12TW}f**#V&)$a} z9u|TlFVGzqsB1l*Cs_i-TI_c2@fd4!?9!{|^7~x$=X{wC+Em1D-pnuTgqN4?bGzgS z;l|rqT^4G8(4&?Dn=32-#!9VUY+6dnJPB@e_zsy%&a>(fmE0$LJC&=MgsYeg6dVQnK+^o>I z*PYE3qHc_8y&tb^jyd%H`Sbp4>^*Rx$cLS1)G9MNxV1FR!6~C8m;gLO>DBYs4iLRb zu&IG6i5cTL$^KF)mvOkl=Ky#`MH)IL9$&7qAM z(|!dnUCyV`jqG}@KeH*|NpUNE6Q-2w6szrm90VV2nye*QXbsxesOx2m-UjE3;rO{` zf%E67hu_R)Hh0;4COSZl1_59N=WRmagT&%+qnJX~xlEWuh~s|KP^k!?{dZ z>BFY;75F{ptm4lp+~3x#?>0$y8{A2CfgN9s>PfZCEXxSfa_*DAL0xWh!nf%C6Cel1 z-W#|(QglA|u!A4bYO8qN_7Wib%qw-<+r;Y${Q7L*R9<9ieB-wZihn>qy4+%GQt!vM>Wd*Kg(^%YX?Zh^$jIVVcqzOwM zvSskDCuJ4%BwM{(^HkuMI0!dV$h_(_E&P|uvm~Sw_vnS^7;QGKHNYQna{fT--;pwm z{cNeG$qvB2qKpWVe-yoqbx|_wGBzztzuvqYG9bM?j82bnXEknv*r-^L_72A{w;5J+ zE<|!?tSV>0a?XJy+i)%UbuN=y%CJmWptyttsz$~YTwS;V%c53Ixly7q0@!EtL&>Sk z?_q#N_~TSJO!PG7vrDCltyune0CcS6Pm`vuFc-nox@68LNAUXSq}VKhCg+LhXt(*H z+qj05*-t-V2{%Xa$-x&MZ-*C|3)tI3tIUi=mPJ3b(-e;U32T~s@i68Z zEMfA`mAdyyNsebJRmcYy-zrY%i{a3ogJK|U<^ye+-3J^oDq0`JEarrYYBC`BTdh`; zRkpo>U0ztUpPU2r1}Jz;w6wgTp{pO7!f*b)Q8Z@k?QR!K;Wx8-_qq5W>D`~#1NYx- zg#tS~`C82WX_eFKpw;YcEx}w&tt*vJf4LB=LE(183cFdOmt$j9>IpiDzv-`zQMg%u zp325pm4EB2{2k*mu6@s}JA8=u>aKXpQc>Q$nmcZMmfbyHwt;6R8)CV14ZG+O)U9e( z{VKiI*P9XSxyrg)J&>Vww8vVGw@ED8Q)N*6U0Pm_wKTpcjWj)0rrCNmV#Le5e35s%DP`SR7+{k}4MpoP&^ zrdTEF@ZUGZ#!4qO#lLH?!sw~7E&V88{;So-*DhcMiO94^!Xoyth=Rdnk?}#e>tMQc zw^4@5tD~9`Z559wk^{a{kA*aPqgB>6SQn+@DP|1yF1nA z3}4aPk&e6ZRaX#CGUQU(WG_h*Y04RzENZLz$6OxAInCQZw+;zR$9n*ndw#dGXP!;= z1y1He#y+|ZHd5v@2#D!4Ee;x6cK3}768vt|1rB4LtW7Za2X@~Z7mxPSQWHs95V~RB z=(v8>9sWHeCB)Ut*Bg}nOSxOUJ0?DrwxQatw$c5^Q2G0Uf&$$L^Kd1QgSUp5(ae3> zizDkuc#yY#w#dbR0Bl3VtBMcNeg3{j5e`iqb7(Qb?nU#_f(AH+ZlJ1*PYKEJ#4vw9es&yucf?Pt|UJ*0k zj=OtH2ts$L>xD!s*^Cz>wemoJg_-h5hNpo{;NAv*=}A*Fv%vj5kIgD!_VnpX9Cud+ zKTgh|#!pfqRwu_?98x_UaMpPU2j$d?QoxMtjthd#Z^>DiU7zPlZyT0D24w@VQhX6| zO&gW-l=DbFiK!EbHo3*hmGPq{8@acfdZuDc>=gQ{ROaO!?lx2mByOSo2ms+) zc_)ZVg3zP)Sm15DRTZP;loh|+sCeDFln=Rhk`}YX{47BZ9TnoL&>y>hiMN7wE`l9D zX!uwRF@R3uS+p~BuMT}H8S_~7DnJS>_F!FhI+_a*o0M~#Iz0uOfozO0(^&YceR~(V zPou=;58rD=7h9jHA9;b+r2^)a$FAOVG_5EzA8GYF-Avn8Z}qm70{B;kzgtJ+LZNe z!jN(?0J7~+bfD*LYcPkLNKAY5w-#6D;rq&Jl^jzQyCkx9O5@G6E+XPjMDz<|X@zol zU%`^yVSdFSqlNU~-4TPepbii*g*9hQePc4({#Zk3#@#KV{JT?-hJ0msIeo7ygD>8( zbvwwWPmU~4RHFg21tzI8{*94dsyLe1W{*;a#VMMt@rM9!NdRlK%H*#uVmlhDSGav72icrs=SVOpqFNwmzNWxj2N(o>DWm2 z)2x{mB-qTXkZ#nVSI`@!3)#GTbhuguNlSmNq;%o#!OY1~^KQ__XrqXgeghsWZZUc* zw+2z=92fOUZEn$}HO{FD$94Sou&#nu@a5=H7D=A`3JIedR5DZ=R9bXrdA|gT6|-Ny z*VjrG6B;pg7~&CAqYr`OiR|8^pIg_eQYiQ;s8KI>=pchC8xD?>cfvydeyLWjgbg)> zRKZ&PWr`-&aUeLm!0PR$SBmwemcXM=*Z3&UyrpV7eN}=ml%wF8aXC$Dm()*nd2^t8 zrSa~NaNgkJKKLZ`thgiMQGcO(uJ`oZ`47w6o3W@;_)C6?8VFTve&+YBaoAlL6Q}PKmwe@1MvKKRx%k78U#4rBoz=WiTZhWWmYMyGke)f*4ye0PAk?_Q_ zVv{Hy6KC}EB=Bv2H@02(6K(k6j?p+L&F$19tMWLqikDZt z7Eu;KXJ%zrjl(o795n}6$Zwok-q^Z^g^v6Pqs8)!K9dZiGEd?97Oa|qg4OSLKV;{c+54%5=d>?2<&*;4g6a)DARwew%bGOkZ9ZEKw@VSfOwIQnJNw z;qU67-Uy=XboFk+W3#P3!c%;XtY`forPQx9>tW{lutycrwo}do|A6-J^Zne?O;L`F zh6Zf<3Yt`lMQv=W=liER6yanUF&{uKiWi~R)*9;L>IG_}C)Ibt*rma9H3wChQtujr zmSWMw_ii4EisAFM0!3xV&b;pBlNAjORj{6p?S>1S!bKBXo3LuyaYSSL4TIwc-&+T* zO>)|D?QXI>Vj4r z%auAt-GnV`qSLSR$qQB+O&gJ5lC6UKX$tFoIi}nyV0nJ^@>(PmqX6yLmpkjs+@#^# zzI}8&?~ApM*lHSrfxfGz(QjbKkQ`OGet{ z=u?bT^@`*|jL2qQg0{MZ_rT^4_*PL*s-)I8Hrh8I4Cq{#uRxglQYTp?njF2$g8l@8 zCkbB~-weG_ULF*?z5o2Rt^cJbo%{wTwC97*&qt1zc_vmG?C5)s#f=d%m1*w3ym>`* zJdV9cs!{(OqFQ1N_O=Bal-d?%#Q3RRuu?SZ>zfamR3iIrZckEs1!myK9gNKJ%Lsal zwoYF=DhUU}^j3M#bsab;$e{gn+B5Rtt|=|dKm9^w18ufcPSp zg|!u!`c@@DY{eqel;srLV1NObytXN48KC@un*C-|l0@|hBt3f%7(YD?KCoHS86Ag* zeC085t$VC_x6z_;Qw_Vqs?4rt3*(&CF7mk2aClfdHZ3ch`y#2z4HojIwWC-yMLfe# z?TH={?CjJdIC~BJS?ioOs4t5bAk+alR7g$={kkiIH&K}C&I(>HMW~M6b$t*U^T3mB z4Mu-Yy?SJzlK@}qpv%?!6!771L6Q$ZC7{m&_P!0{s);K){I{o!43Ih)`=|G3?btOi zG)PtG^d2ZUG^#!&fF@hSlbD~?#urrlI=~g8`Q9?oTFeN#=_XsZX|-~^wXyqGKrpXu zWwZC%ni%HM{^bDO_KQGy(^CY^?VX9+XafHH&|MzQ+NoVLH!rg?G%Q@ zV{9M>62rlSEj0{7Rf`907#}mg1a!gRt$(UhVt5}rX5IUH6uPyXvu@7VSYyS6{JY{l0-O+Qz{DY^&*3BBe$Ta65=k<>#e7Grc5!W1vAC+bt-A-JB1)^}G3>3h>cT zX5nRNLf=v`ZN6kaJPRq~fX|jw_@icbhkaVB0$bAEx8zH1N-a-W`s^@?agWKBzmRa; z-X%hiYKFaDKHMXrnQM|Khjfrj!!i@6lJDdojE{XapNz8{h;g_jvg*f?=R6@*Wa<0G zQCu;P1V47Mu;J}~M7s`_P)gjvS{=W)6WuDYk=s<-vHVd`Y_=b9qea@{M0R$ha3X>M zg1FqvV5atsu>AJOg)sHUenQ*KZK1IIjL>@&zEP$XVbmWmCd{$h#%E2kUJ?w{cO)|L zlYR_Zt>Rp_@Z-}}8YAb7HkvoTinz>_OrEtCwCwcsuC45+52kGtf)b{le^o5tdLaq& zaCUYst*nG}!s>a_ENLu!;O2~A;V)SsCxG&0AXM|y7x;RSYBH$(WrEIO^_|O~D&TU- zwGvDTe8LY7lhVj^iWJ#fXyjQ5weG zs*kF|8v>z|`T7DR1Nu_i0;f)$hHbl-b;R|Amj&@96Wu5ywt>Ti+Xs(sS{M&%NI=sU zN^F^c7QF&P^a|8GPrjHyhANpu$EQIgWPT>ksYi%^y4Y%h<^3&vp%iZgLTQ^YG3aCK z&XDyhC#7<^I$E3>o%YCn0K`3PJ1d!}c8YnH+Geq8X+~^$gtjX$N5cEB z44_ig)^-K$8nIhFxeDes>b@YsKJ}lLUD|SSRDoiM`dfaz@S8v`&aj$%PSc&5*JJuu zWD&b%xs3Q6XVu;vcQL(kn@3jFe~jI%^Tx%z>1G`C%0b0v+UHL!yI(qG|CS+#(;YsJ zPH9i)=cA5K}gE--zwNe`y(Rg7%4h!kWUAzni}Lb zB>kaU=007JKRx|6+`^F^KV4U>BK{@NVwZc}JFRF%>~FVo z-njSU>_!79_xmSzUS_Ym+nG@u{`mCs{#oZDaD=Fk&K4tSa`Cuqu%)YK2W!buOn!u(MaW${ISz zPo7jGb|_!36&%7$_VRlnPj7nYgI2RTAKw;kOu^5NsU2VZuD&$NZKMS=HT^Z_MxXe} zoz=2dOwYL}?rJP=uw|jKsIN0UV4Cpo#>YQDhKi}2Vut5rP_bsN3#p9JN;#cn=W|wf zap^b{+{A+1(7Lad{`GlEoF-LIpDrOZk(6#}xS{vk;22r!qd%fg`Mfv>UNF!hrMjOT z-8#$HpTpJDNQD9&N_sX;{puDVsDnNgp_%T_YS((OTHHd0yR$;H=!D^sZ#yjp4)CI4 zG3b=2@yb)?Js=|K?qimPcZjj;F=4vFtg3>XL_(o|0nZxu*+fg9yEemA!_p0dZ}$UGSUM+@;AI;TgT=^DIEUB6w@ z(lnyZfAdfM1mN2l%A%!j+~=1bJLH`;-&B!uLhV`b8P$X z)ljnwbmGW6Us~%&)_YeLRr?e9Dou9!97_$0Z`+6&DvP94Js4s=nT?o#tAp*NL0)}!;yMU*mBYFxx_?w2krS36L*xLH(z*|WATzUC;_PpYnG zF_Lw!^jQaC%AsONF;g2L^V6tZ_if_C za$S>x#)hi1b8u6fUEh;`Ic$u2wyNMy!d^_-O4OC;B{Dmf!b|= z*gTMfNp^p1#;2z@2>dz#1dk#s1+b==>ssyD%|zj^f?^tWql-J=`{Jb&nSWOdWtk^L zx|^9CJ5cMEJYnswc>MOGde$RT=YCPrvs+F+R;{8cw;s#7aPch;i~617@my|c)Sa$N z#jpD0DO939&!~1KyG3epl+62Zap6$@cR9k%1THaICcM3r{rWsMK}XI}V!Fm?#nJ)M4Y!V|U%TkED8C%bqR6}`7-B<(~ zz+MUyfrwoBB(sq@wxC6P@$J_eb9EkFuR}S%{kld$t81n_{y~Y+T_Ywwx>&WoQ~;Q3 zmwsN?x$OZRDbQ|O$pEA$>VYGKs(}IRRB2yq#gbZz;cu_-wdG|y;A7Ljy>T@qNeO`) z>AZkNM%!{_3)rpH*_=-ls*Im>TlksI`JM-W8K8>@WHDL^%tfU-eZKdbAi}nH^sD3= zyIbXmj(qy3LIQ@lqSjLE8-0qN^GUwOH++zOMa%Jgw0W0bDMOX%3cxLxSFXT1PXWXZ0bk&-B?#c8EEe>XcJd=pokLoFAv}u%ACaDyI5laB>9xOZ zUqpahU}XuZTg8PL2M8b_vIhiJL@yTOi2)e1_0Ux|U-X*Ns-E0qSPm?{*pW6prNF&0 z@MKHQi(0&Vf4mL@A)Fk3Op*m6^FdaarQYodRyXsc42dj1Cd1IRspWELP+Vr6*IMn- zvc&c*0`Bg?=Tce5+J_1B;0@{Oy!KKiAA==xNr_WhWBLV`m8Q_zl`i>TgV#nWYV(X;0n|~OAkvJph znPU8y3~X%XZTB9hRxWcpB%w%YRjGOmBY~8 zxK+Op3u&VLot(J#=UF|Spv9RocQwGs0KAfr1-EbS6qhpqUNm~WC&2Q4U8p}Oa(EtA zr`O3(t>yh2el6=S76Rp%R1lsEh?Fi(#j7>q0x zU#utdSXEWq(=X^nA20WO`g|L8b2~dF`mH|F5UPKuCy?`Tt|woo3_rwM0;2_%3<^as zfNhiUEkjLF_-6gukTPi!!=xFy+((X|TNyr~bk+@`3)yroC;I=cla`iXM(Y@M;F|Xb z_9aSjd%c3V{&>MQb54Zcb7oV6po}QF|141BK)=WndV=st5o?Mvi)n4RNqJa{#0;XR zxH|b&4FrNbKrNt5b3Kto5Zv%2n8*LLC^z;%E0ozGP7Ysm@cb8T=a*YfplP}!;CLn? z5LhCB^z9B)>F{VLb}{dPEBW{J5{(m=t)b*weBgup3M>%-ba!sL&s6ab*pKUC({Zx03{haWx&4Z4B0%U$x*DE*cZg^6=mB-fIMN%m zq*A}85$hjq5_-9|7V8VE<*BU%1kD;FFV)**FZUF4btc-DoJ#~ox_x5kS;P4UXpPZr zC2-rr#~IIwn#Z@@hUc3DneX3-JYFwRRVe#A=rHOuy?wz{v*2|qpWD_SM{@8J$asQc>eLRG1E$N?XN&)K?>M}u^?yI zFxg+~O6gHj81R28LywMHf4@z(;h#V$C^lYN>|X^ke^lW&0HgxG;v(0cz3RbDGj{_> zr%lf6l?Rjn$PiEhB=0D$DE>~r`R|wHYC=~y5jEsSH0jR+=`pyKz>bW-I^{c=M5|yK zhTbJxAk;u+$zHwc(fxrukc(tqovO-jetL4F0G*PGf+;NC>?ZjZ=|=#g!*i3<_n$EZ zH-Ij5nUug_a)5v6X*@b)(_R>8{3Z{nZtFh+@1=nMN;Ch_d7b|&o&76aHv6yikLr8rYErxg z`LX=R1HN7`tSmsjh#o-Xl0vgc9azx-rt$ux^3L)8*I|(+&|!OC(bxZ}NTy~d6rlg7 zB3Y6{6Xx+h70Kd;LTf$$RlG<;wp;z{f0i}sU9=_|$|Ar=v+@Y?II@`aJ0lCAh z$BDfE2I`;egu>))xBo8Rg4|)1_}G6}fhTupTR!n$NlN9vOk@83{-tm@>RRNpfwjL5 zqo$?>Ca$ifK(c}Le;MM^&dwkk8ykq(%!=m^UVD4jUH}FQM$SwR{4vr3!Xe~;{%=eX z2VD05kxY0Y=dsa%SUS+VEg|(hmKxACp`ggBYAFgP7fIQ2jIPa|7EAqd=q_&nO zStr(uofOR;RCyr^G`fmep?M+k^hz{C=e!gyc`-JH)L+P_l&atC8jhK_K7CI)wj(35 zk>F*2f|E8)zlHFlt9J!jYOmKyec7Y;jsdvw!EXsdjw#E+3GNgZ^qJ-}Bn2Ch2bjgB|&yIerY+PsVqYWJ@8>)!o{eV`ot zV|;l8m2mc^N_6cJz!9Xdc`GJ!!Z&NTm;S-`Ezr%=KwR=Gjt?v;OU(IS7w$mp*vJpw zoec4f9E>>(fzG)zeZG|3&mCCmlDnB!hH3I;H_v)NvW4R5W8Y+x?aUMh!=T)+FU`Jg zl=T#n4R>?Pm^*SoF1|rNgRBWhL>nK717q24=2YD(gRtI1=fwlH+s`>HL~7+H$+Eh` zvD9LV1LWbhH0sZ>-{^F$6`wUcRJF*g{!|Ej`i@^L)Y5CZ%h{F5J-}~dTQcx6KOosd zaVjr1WQn}e=vZHxGNJfr>1o79Njcd7f=F*8I`5(1q@j*`fJN_~?PH$`r+@7iP@|?| z16wufOMPhTTTcH*lq49tD2b7;W@12SLVJPA$4SpJ-`U~}jU;y+3`Ocn_cu;2v!T3? zZo5Z3*<@dGPw}4lba?u7!v^@l4*O|T*9X1*vZ<0aIpwV(x2O@5h?c<1K*}@VMYkLP diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md index 6140ccbb739..efac055ac15 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/gettingatoken.md @@ -8,7 +8,9 @@ private suspend fun handleResponse(response: IdxResponse) { // Check if the sign-in flow is successful. if (response.isLoginSuccessful) { // Exchange the sign-in session token for a token. - when (val exchangeCodesResult = flow?.exchangeInteractionCodeForTokens(response.remediations[ISSUE]!!)) { + when (val exchangeCodesResult = + flow?.exchangeInteractionCodeForTokens(response.remediations[ISSUE]!!)) + { is OidcClientResult.Error -> { // Handle the error. } diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md index 201f9668e55..7244bfd7e67 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializeflow.md @@ -1,9 +1,9 @@ -Initialize AuthFoundationBootstrap in your `Application` sublcass. This code shows loading the values from a property file in your project. +The following example loads the configuration values for the flow from a property file in your project. -First, create a property file, for example, `okta.properties` in the project root. Add the values for your Okta application integration to the file. +First, create a property file, for example, `okta.properties` in the project root. Add the values for your Okta app integration to the file. -``` +```properties discoveryUrl=https://{yourIssuerUrl}/oauth2/default/.well-known/openid-configuration clientId={yourClientId} redirectUri=com.okta.sample.android:/login @@ -26,7 +26,7 @@ defaultConfig { } ``` -In your `Applicaiton` subclass, initialize `AuthFoundationBootstrap` from the `BuildConfig` by calling `initializeAuthFoundation` from `onCreate`. +In your `Application` subclass, initialize `AuthFoundationBootstrap` from the `BuildConfig` by calling `initializeAuthFoundation` from `onCreate`. ```kotlin import com.okta.android.samples.authenticator.BuildConfig diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md index d6f0b832855..f31099b8b1f 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/initializingsdksession.md @@ -1,5 +1,5 @@ -This example creates the flow in the viewmodel `launch` coroutine. Start by calling `CredentialBootstrap.oidcClient.createInteractionCodeFlow` and on success, request the first response by calling `resume()` on the result. +This example creates the flow in the viewmodel `launch` coroutine. Start by calling `CredentialBootstrap.oidcClient.createInteractionCodeFlow` and on success, request the first response by calling `resume` on the result. ```kotlin import com.okta.authfoundation.client.OidcClientResult diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md index 70440f9c8f3..bf98466f48c 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/android/signingout.md @@ -8,7 +8,10 @@ import com.okta.authfoundationbootstrap.CredentialBootstrap fun logout() { viewModelScope.launch { // Revoking the refresh token also revokes the access token. - when (val revokeResult = CredentialBootstrap.defaultCredential().revokeToken(RevokeTokenType.REFRESH_TOKEN)) { + when (val revokeResult = + CredentialBootstrap.defaultCredential().revokeToken(RevokeTokenType.REFRESH_TOKEN) + ) + { is OidcClientResult.Error -> { // Sign-out failed, handle the error. } diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md index ab8be15fa34..924e9f55b16 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md @@ -17,9 +17,9 @@ This guide is an overview of building your own user interface using the embedded ## Sign-in flow -Okta supports many ways of authenticating the identity of a user during the sign-in flow. An Okta org administrator creates _policies_, different mixes of *authenticators*, or ways of verifying the identity of a user, and assigns them to apps, people, groups, and more. Policies also configure whether an authenticator is required or optional, as well as the minimum number of authenticators required for a successful sign-in. Responding to each authenticator is a step in the sign-in flow. Many flows require multiple *factors* (multifactor authentication), the category of an authenticator. Factors include biometrics, such as a fingerprint, knowledge, such as a password, and more. This effectively results in an infinite number of combinations of authenticators and the order in which they're presented. +Okta supports many ways of authenticating the identity of a user during the sign-in flow. An Okta org administrator creates _policies_, different mixes of *authenticators*, or ways of verifying the identity of a user, and assigns them to apps, people, groups, and more. Policies also configure whether an authenticator is required or optional and the minimum number required to sign in successfully. Responding to each authenticator is a step in the sign-in flow. Many flows require multiple *factors* (multifactor authentication), the category of an authenticator. Factor types include biometrics, such as a fingerprint, knowledge, such as a password, and more. This effectively results in an infinite number of combinations of authenticators and the order in which they're presented. -The Android and Swift Identity Engine SDKs represent the sign-in flow as a state machine. You initialize the machine with the details of your Okta org app integration, request the initial step in the flow, and cycle through responding to steps until either the user signs in, cancels, or an error occurs. +The Android and Swift Identity Engine SDKs represent the sign-in flow as a state machine. The Swift SDK is used for iOS. You initialize the machine with the details of your Okta org app integration, request the initial step in the flow, and cycle through responding to steps until either the user signs in, cancels, or an error occurs.
@@ -44,27 +44,27 @@ The SDK represents the sign-in flow using a number of different objects:
- **Response:** The top-level object that represents a step and contains all the other objects. It includes a property that indicates a successful sign-in and functions for cancelling the sign-in flow, or retrieving the access token after the sign-in flow succeeds. A response may contain multiple authenticators and remediations. -- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK, it also includes the function for requesting the next step in the flow. +- **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK for iOS, it also includes the function for requesting the next step in the flow. - **Authenticator:** Represents an authenticator that's used to verify the identity of a user, such as Okta Verify. - **Method:** Represents a channel for an authenticator, such as using SMS or voice for an authenticator that uses a phone. An authenticator may have zero or more methods. - **Capability:** A user action associated with a remediation, authenticator, or method, such as requesting a new OTP or a password reset. - **Field:** Represents a UI element, either a static item, such as a label, or user input, such as a selection list. It includes properties for state information, such as whether the associated value is required. Properties also store the current value of user input field, such as the string for an OTP or the selected choice. A lists of choices, or **Options**, are represented by a collection of fields. A field may contain a form that contains more fields. - **Form:** Contains the fields that represent the user action for a remediation. -- **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Kotlin SDK, it includes the function for requesting the next step in the flow. +- **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Android SDK, it includes the function for requesting the next step in the flow. ## Objects and the flow -## Manage the sign-in flow +## Manage the flows -You add support in your app for the functionality in the sign-in flow: +Add support for the sign-in and sign-out flows to your app: - Initialize the flow. - Start the flow. - Process responses until the sign-in flow succeeds, results in an error, or the user cancels the flow. -- Request a token for a successful sign-in flow. +- Request a token object for a successful sign-in flow. The object contains access, ID, and refresh tokens. - Sign the user out. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md index 0024dfe2c6c..3bd74da77ed 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/gettingatoken.md @@ -1,4 +1,9 @@ -Getting the authorization token takes two-steps. First, request an access token after the sign-in flow is successful. Then receive that token from the server. The access token is represented by a `Token` object from the `AuthFoundation` library that is a dependency for the Swift IDX SDK. You can store the token securely in the Keychain using Credential, another class from the `AuthFoundation` library. +Getting the authorization token takes two steps. + +1. Request an access token after the sign-in flow is successful. +1. Receive that token from the server. + +The access token is represented by a `Token` object from the `AuthFoundation` library that is a dependency for the Swift IDX SDK. You can store the token securely in the keychain using `Credential`, another class from the `AuthFoundation` library. This example shows part of the implementation of the `InteractionCodeFlowDelegate` protocol functions that are called as part of getting the authorization token. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md index e2f7244613d..2058511417f 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/initializeflow.md @@ -2,10 +2,10 @@ You can provide the configuration information in a property list file or in the #### Add configuration with a property list -The default `init()` function of `InteractionCodeFlow` looks for a property list called `Okta.plist`. You can specify a property list file by calling `init(plist:)`. Both of those options can result in a throws as they read from the file system. To specify the values in the call, use `init( +The default `init()` function of `InteractionCodeFlow` looks for a property list called `Okta.plist`. You can specify a property list file by calling `init(plist:)`. Both of those options can result in an exception as they read from the file system. To specify the values in the call, use `init( issuer:clientId:scopes:redirectUri:additionalParameters:)`. -To use a property list first create a property list file, such as `Okta.plist`. Next, add key-value pairs with the configuration settings for your Application Integration. For example, in the following text version of a `plist`, substitute your issuer URL for `{yourIssuerUrl}`, the client ID of your Application Integration for `{yourClientId}`, and a URI that launches your app. Set the scopes based on the access required by your app. +To use a property list first create a property list file, such as `Okta.plist`. Next, add key-value pairs with the configuration settings for your app integration. For example, in the following text version of a `plist`, substitute your issuer URL for `{yourIssuerUrl}`, the client ID of your app integration for `{yourClientId}`, and a URI that launches your app for `{com.your.app:callback-uri}`. Set the scopes based on the access required by your app. ```xml diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md index a3a2b703ccf..02a454505c8 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md @@ -70,7 +70,8 @@ class SignInController: InteractionCodeFlowDelegate, ObservableObject { } // Delegate functions called when errors occur - func authentication(flow: Flow, received error: InteractionCodeFlowError) where Flow : InteractionCodeFlow { + func authentication(flow: Flow, received error: InteractionCodeFlowError) + where Flow : InteractionCodeFlow { // Publish the error from the main thread. DispatchQueue.main.async { self.currentError = error From 6f940f94b55db098098bd1919775a08595d69924 Mon Sep 17 00:00:00 2001 From: Maurice Sharp Date: Tue, 5 Sep 2023 10:59:49 -0400 Subject: [PATCH 6/6] Incorporate review round 2 --- .../docs/guides/mobile-idx-sdk-overview/main/index.md | 2 +- .../guides/mobile-idx-sdk-overview/main/ios/processresponse.md | 3 ++- .../docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md index 924e9f55b16..68c461bd974 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/index.md @@ -47,7 +47,7 @@ The SDK represents the sign-in flow using a number of different objects: - **Remediation:** Represents the main user actions for a step, such as enrolling in an authenticator or entering an OTP. In the Swift SDK for iOS, it also includes the function for requesting the next step in the flow. - **Authenticator:** Represents an authenticator that's used to verify the identity of a user, such as Okta Verify. - **Method:** Represents a channel for an authenticator, such as using SMS or voice for an authenticator that uses a phone. An authenticator may have zero or more methods. -- **Capability:** A user action associated with a remediation, authenticator, or method, such as requesting a new OTP or a password reset. +- **Capability:** A user action or additional information that is associated with a remediation, authenticator, or method, such as requesting a new OTP or a redacted email. - **Field:** Represents a UI element, either a static item, such as a label, or user input, such as a selection list. It includes properties for state information, such as whether the associated value is required. Properties also store the current value of user input field, such as the string for an OTP or the selected choice. A lists of choices, or **Options**, are represented by a collection of fields. A field may contain a form that contains more fields. - **Form:** Contains the fields that represent the user action for a remediation. - **InteractionCodeFlow:** Represents the session during the sign-in flow. In the Android SDK, it includes the function for requesting the next step in the flow. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md index 02a454505c8..e47a52db027 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/processresponse.md @@ -26,7 +26,8 @@ class SignInController: InteractionCodeFlowDelegate, ObservableObject { // ... // Delegate function called for each sign-in step. - func authentication(flow: Flow, received response: Response) where Flow : InteractionCodeFlow { + func authentication(flow: Flow, received response: Response) + where Flow : InteractionCodeFlow { // Request a token from the server if the sign-in attempt is successful. if response.isLoginSuccessful { // Handle retrieving the access token. diff --git a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md index 82f92efaa4a..d30f5707972 100644 --- a/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md +++ b/packages/@okta/vuepress-site/docs/guides/mobile-idx-sdk-overview/main/ios/signingout.md @@ -10,7 +10,7 @@ class SignInController: InteractionCodeFlowDelegate, ObservableObject { // Sign out the current user. public func signOut() throws { - try Credential.default?.remove() + try await Credential.default?.revoke() } }