From 84275d2f45921fec6444c30fcce0a255ab7a235c Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 14:50:04 +0400 Subject: [PATCH 01/14] feat: Implement request handling and error management - Add send() method to RequestContract interface - Create RequestHandler trait for common HTTP request operations - Implement new exception classes for various HTTP response errors - Update cURLException to extend from BlueskyException - Integrate RequestHandler trait into the Request class - Add error handling and response processing in RequestHandler --- src/Contracts/RequestContract.php | 2 + .../Http/Response/ExpiredTokenException.php | 9 ++ .../Http/Response/InvalidRequestException.php | 9 ++ .../Http/Response/InvalidTokenException.php | 9 ++ src/Exceptions/cURLException.php | 3 +- src/HTTP/Request.php | 3 + src/HTTP/Traits/RequestHandler.php | 111 ++++++++++++++++++ 7 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/Exceptions/Http/Response/ExpiredTokenException.php create mode 100644 src/Exceptions/Http/Response/InvalidRequestException.php create mode 100644 src/Exceptions/Http/Response/InvalidTokenException.php create mode 100644 src/HTTP/Traits/RequestHandler.php diff --git a/src/Contracts/RequestContract.php b/src/Contracts/RequestContract.php index 5080c88..abcdcd1 100644 --- a/src/Contracts/RequestContract.php +++ b/src/Contracts/RequestContract.php @@ -90,4 +90,6 @@ public function parameters($parameters = null); * @return array|mixed The query parameters or instance for chaining */ public function queryParameters($queryParameters = null); + + public function send(); } diff --git a/src/Exceptions/Http/Response/ExpiredTokenException.php b/src/Exceptions/Http/Response/ExpiredTokenException.php new file mode 100644 index 0000000..8286b04 --- /dev/null +++ b/src/Exceptions/Http/Response/ExpiredTokenException.php @@ -0,0 +1,9 @@ +request(); + $this->handle(); + + return $this->resource; + } + + /** + * @throws BlueskyException + */ + private function handle(): void + { + $this->handleError(); + $this->handleResponse(); + } + + /** + * @throws BlueskyException + */ + private function handleResponse(): void + { + $this->handleResponseError(); + + $this->content = json_decode($this->content, true); + } + + /** + * @throws BlueskyException + */ + private function handleResponseError(): void + { + $statusCode = curl_getinfo($this->resource, CURLINFO_HTTP_CODE); + + if ($statusCode < 200 || $statusCode > 299) { + $exception = "\\Atproto\\Exceptions\\Http\\Response\\$this->content[error]"; + + if (class_exists($exception)) { + throw new $exception($this->content['message'], $statusCode); + } + + throw new BlueskyException($this->content['message'], $statusCode); + } + } + + private function handleResponseHeader($ch, $header): int + { + $length = strlen($header); + $header = explode(':', $header, 2); + + if (count($header) < 2) { + return $length; + } + + $name = trim(current($header)); + $value = trim(next($header)); + + $this->responseHeaders[$name] = $value; + + return $length; + } + + /** + * @throws cURLException + */ + private function handleError(): void + { + if (curl_errno($this->resource)) { + throw new cURLException(curl_error($this->resource)); + } + } + + private function request(): void + { + $this->resource = curl_init(); + + curl_setopt_array($this->resource, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => $this->headers(true), + CURLOPT_HEADERFUNCTION => [$this, 'handleResponseHeader'], + CURLOPT_CUSTOMREQUEST => $this->method(), + CURLOPT_POSTFIELDS => $this->parameters(true), + CURLOPT_URL => $this->url(), + ]); + + $this->content = curl_exec($this->resource); + } +} \ No newline at end of file From c789a9599ca6427ca658cff8af9b59f769bedfe1 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 20:00:48 +0400 Subject: [PATCH 02/14] refactor: Extract request building logic into RequestBuilder trait - Move request building methods from Request class to new RequestBuilder trait - Simplify Request class by utilizing RequestBuilder trait --- src/HTTP/Request.php | 147 +--------------------------- src/HTTP/Traits/RequestBuilder.php | 149 +++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 144 deletions(-) create mode 100644 src/HTTP/Traits/RequestBuilder.php diff --git a/src/HTTP/Request.php b/src/HTTP/Request.php index 64e49d1..f476f4b 100644 --- a/src/HTTP/Request.php +++ b/src/HTTP/Request.php @@ -3,152 +3,11 @@ namespace Atproto\HTTP; use Atproto\Contracts\RequestContract; +use Atproto\HTTP\Traits\RequestBuilder; use Atproto\HTTP\Traits\RequestHandler; class Request implements RequestContract { use RequestHandler; - - protected string $origin = ''; - protected string $path = ''; - protected string $method = 'GET'; - protected array $headers = []; - protected array $parameters = []; - protected array $queryParameters = []; - - public function url(): string - { - $parts = array_map(fn ($part) => trim($part, "/"), [ - 'origin' => $this->origin(), - 'path' => $this->path(), - 'query' => $this->queryParameters(true), - ]); - - $url = sprintf("%s/%s?%s", $parts['origin'], $parts['path'], $parts['query']); - - return $url; - } - - public function origin(string $origin = null) - { - if (is_null($origin)) { - return $this->origin; - } - - $this->origin = $origin; - - return $this; - } - - public function path(string $path = null) - { - if (is_null($path)) { - return $this->path; - } - - $this->path = $path; - - return $this; - } - - public function method(string $method = null) - { - if (is_null($method)) { - return $this->method; - } - - $this->method = $method; - - return $this; - } - - public function header(string $name, string $value = null) - { - if (is_null($value)) { - return $this->headers[$name] ?? null; - } - - $this->headers[$name] = $value; - - return $this; - } - - public function parameter(string $name, $value = null) - { - if (is_null($value)) { - return $this->parameters[$name] ?? null; - } - - $this->parameters[$name] = $value; - - return $this; - } - - public function queryParameter(string $name, string $value = null) - { - if (is_null($value)) { - return $this->queryParameters[$name] ?? null; - } - - $this->queryParameters[$name] = $value; - - return $this; - } - - public function headers($headers = null) - { - if (is_bool($headers)) { - if ($headers) { - return array_map( - fn ($name, $value) => "$name: $value", - array_keys($this->headers), - array_values($this->headers) - ); - } - - return $this->headers; - } - - if (is_null($headers)) { - return $this->headers; - } - - $this->headers = $headers; - - return $this; - } - - public function parameters($parameters = null) - { - if (is_bool($parameters)) { - if ($parameters) { - return json_encode($this->parameters); - } - - return $this->parameters; - } - - if (is_null($parameters)) { - return $this->parameters; - } - - $this->parameters = $parameters; - - return $this; - } - - public function queryParameters($queryParameters = null) - { - if (is_bool($queryParameters) && $queryParameters) { - return http_build_query($this->queryParameters); - } - - if (is_null($queryParameters)) { - return $this->queryParameters; - } - - $this->queryParameters = $queryParameters; - - return $this; - } -} \ No newline at end of file + use RequestBuilder; +} diff --git a/src/HTTP/Traits/RequestBuilder.php b/src/HTTP/Traits/RequestBuilder.php new file mode 100644 index 0000000..2a700e8 --- /dev/null +++ b/src/HTTP/Traits/RequestBuilder.php @@ -0,0 +1,149 @@ + trim($part, "/"), [ + 'origin' => $this->origin(), + 'path' => $this->path(), + 'query' => $this->queryParameters(true), + ]); + + $url = sprintf("%s/%s?%s", $parts['origin'], $parts['path'], $parts['query']); + + return $url; + } + + public function origin(string $origin = null) + { + if (is_null($origin)) { + return $this->origin; + } + + $this->origin = $origin; + + return $this; + } + + public function path(string $path = null) + { + if (is_null($path)) { + return $this->path; + } + + $this->path = $path; + + return $this; + } + + public function method(string $method = null) + { + if (is_null($method)) { + return $this->method; + } + + $this->method = $method; + + return $this; + } + + public function header(string $name, string $value = null) + { + if (is_null($value)) { + return $this->headers[$name] ?? null; + } + + $this->headers[$name] = $value; + + return $this; + } + + public function parameter(string $name, $value = null) + { + if (is_null($value)) { + return $this->parameters[$name] ?? null; + } + + $this->parameters[$name] = $value; + + return $this; + } + + public function queryParameter(string $name, string $value = null) + { + if (is_null($value)) { + return $this->queryParameters[$name] ?? null; + } + + $this->queryParameters[$name] = $value; + + return $this; + } + + public function headers($headers = null) + { + if (is_bool($headers)) { + if ($headers) { + return array_map( + fn ($name, $value) => "$name: $value", + array_keys($this->headers), + array_values($this->headers) + ); + } + + return $this->headers; + } + + if (is_null($headers)) { + return $this->headers; + } + + $this->headers = $headers; + + return $this; + } + + public function parameters($parameters = null) + { + if (is_bool($parameters)) { + if ($parameters) { + return json_encode($this->parameters); + } + + return $this->parameters; + } + + if (is_null($parameters)) { + return $this->parameters; + } + + $this->parameters = $parameters; + + return $this; + } + + public function queryParameters($queryParameters = null) + { + if (is_bool($queryParameters) && $queryParameters) { + return http_build_query($this->queryParameters); + } + + if (is_null($queryParameters)) { + return $this->queryParameters; + } + + $this->queryParameters = $queryParameters; + + return $this; + } +} \ No newline at end of file From 4e6477715cb230b0bfe7af41a49e0c68fb14acd0 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 20:35:52 +0400 Subject: [PATCH 03/14] feat: Implement Client class and improve request handling - Add Client class for dynamic API request building - Implement RequestNotFoundException for handling non-existent requests - Update GetProfile request path - Modify RequestHandler trait to decode JSON before error handling - Add unit tests for Client class - Enhance Reflection trait with method accessibility --- src/Client.php | 55 ++++++++++++ .../Http/Request/RequestNotFoundException.php | 9 ++ .../Requests/App/Bsky/Actor/GetProfile.php | 2 +- src/HTTP/Traits/RequestHandler.php | 3 +- tests/Supports/Reflection.php | 13 +++ tests/Unit/ClientTest.php | 89 +++++++++++++++++++ 6 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 src/Client.php create mode 100644 src/Exceptions/Http/Request/RequestNotFoundException.php create mode 100644 tests/Unit/ClientTest.php diff --git a/src/Client.php b/src/Client.php new file mode 100644 index 0000000..e0d190d --- /dev/null +++ b/src/Client.php @@ -0,0 +1,55 @@ +path[] = $name; + + return $this; + } + + protected function refresh(): void + { + $this->path = []; + } + + /** + * @throws RequestNotFoundException + */ + public function build(): RequestContract + { + $namespace = $this->namespace(); + + if (! class_exists($namespace)) { + throw new RequestNotFoundException("$namespace class does not exist."); + } + + $request = new $namespace; + + $request->build(); + + return $request; + } + + protected function namespace(): string + { + $prefix = '\\Atproto\\HTTP\\API\\Requests\\'; + $namespace = "$prefix" . implode('\\', array_map( + 'ucfirst', + $this->path + )); + + $this->refresh(); + + return $namespace; + } +} diff --git a/src/Exceptions/Http/Request/RequestNotFoundException.php b/src/Exceptions/Http/Request/RequestNotFoundException.php new file mode 100644 index 0000000..2233bb7 --- /dev/null +++ b/src/Exceptions/Http/Request/RequestNotFoundException.php @@ -0,0 +1,9 @@ +path('/xrpc/app.bsky.actor.getProfile'); + $this->path('/app.bsky.actor.getProfile'); } /** diff --git a/src/HTTP/Traits/RequestHandler.php b/src/HTTP/Traits/RequestHandler.php index 1436abd..edc212f 100644 --- a/src/HTTP/Traits/RequestHandler.php +++ b/src/HTTP/Traits/RequestHandler.php @@ -43,9 +43,8 @@ private function handle(): void */ private function handleResponse(): void { - $this->handleResponseError(); - $this->content = json_decode($this->content, true); + $this->handleResponseError(); } /** diff --git a/tests/Supports/Reflection.php b/tests/Supports/Reflection.php index 4c97fe6..036d5ea 100644 --- a/tests/Supports/Reflection.php +++ b/tests/Supports/Reflection.php @@ -4,10 +4,23 @@ use ReflectionClass; use ReflectionException; +use ReflectionMethod; use ReflectionProperty; trait Reflection { + /** + * @throws ReflectionException + */ + protected function method(string $name, object $object): ReflectionMethod + { + $reflection = new ReflectionClass($object); + $method = $reflection->getMethod($name); + $method->setAccessible(true); + + return $method; + } + /** * @throws ReflectionException */ diff --git a/tests/Unit/ClientTest.php b/tests/Unit/ClientTest.php new file mode 100644 index 0000000..238f399 --- /dev/null +++ b/tests/Unit/ClientTest.php @@ -0,0 +1,89 @@ +client = new Client(); + } + + /** + * @throws ReflectionException + */ + public function testDynamicMethodCalls(): void + { + $this->client->app()->bsky()->actor(); + + $path = $this->getPropertyValue('path', $this->client); + + $this->assertSame(['app', 'bsky', 'actor'], $path); + } + + /** + * @throws ReflectionException + */ + public function testNamespaceGeneration(): void + { + $this->client->app()->bsky()->actor(); + + $method = $this->method('namespace', $this->client); + + $namespace = $method->invoke($this->client); + + $expectedNamespace = '\\Atproto\\HTTP\\API\\Requests\\App\\Bsky\\Actor'; + $this->assertSame($expectedNamespace, $namespace); + } + + public function testBuildThrowsRequestNotFoundException(): void + { + $this->client->nonExistentMethod(); + + $this->expectException(RequestNotFoundException::class); + $this->expectExceptionMessage("\\Atproto\\HTTP\\API\\Requests\\NonExistentMethod class does not exist."); + + $this->client->build(); + } + + + /** + * @throws RequestNotFoundException + */ + public function testBuildReturnsRequestContract(): void + { + $this->client->app()->bsky()->actor()->getProfile(); + + $request = $this->client->build(); + + $this->assertInstanceOf(RequestContract::class, $request); + } + + /** + * @throws ReflectionException + */ + public function testRefreshClearsPath(): void + { + $this->client->app()->bsky()->actor(); + + $method = $this->method('refresh', $this->client); + + $method->invoke($this->client); + + $path = $this->getPropertyValue('path', $this->client); + + $this->assertEmpty($path); + } +} From 2ee48cabb0fdeec8fe4ac23cc288ef4a37de0bf3 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 20:53:23 +0400 Subject: [PATCH 04/14] refactor: Rename MissingProvidedFieldException and update method names - Rename MissingProvidedFieldException to MissingFieldProvidedException for clarity - Update all references to the exception in API request classes and tests - Change Client's `build()` method to `forge()` for a more concise naming - Update unit tests to reflect the new `forge()` method name --- ...eldException.php => MissingFieldProvidedException.php} | 2 +- src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php | 4 ++-- src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php | 6 +++--- src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php | 6 +++--- tests/Unit/ClientTest.php | 4 ++-- .../HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php | 4 ++-- .../API/Requests/Com/Atproto/Repo/CreateRecordTest.php | 6 +++--- .../HTTP/API/Requests/Com/Atproto/Repo/UploadBlobTest.php | 8 ++++---- 8 files changed, 20 insertions(+), 20 deletions(-) rename src/Exceptions/Http/{MissingProvidedFieldException.php => MissingFieldProvidedException.php} (80%) diff --git a/src/Exceptions/Http/MissingProvidedFieldException.php b/src/Exceptions/Http/MissingFieldProvidedException.php similarity index 80% rename from src/Exceptions/Http/MissingProvidedFieldException.php rename to src/Exceptions/Http/MissingFieldProvidedException.php index 8fc5781..725d902 100644 --- a/src/Exceptions/Http/MissingProvidedFieldException.php +++ b/src/Exceptions/Http/MissingFieldProvidedException.php @@ -4,7 +4,7 @@ use Atproto\Exceptions\BlueskyException; -class MissingProvidedFieldException extends BlueskyException +class MissingFieldProvidedException extends BlueskyException { public function __construct($message = "", $code = 0, $previous = null) { diff --git a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php index 096d9ff..a933a7b 100644 --- a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php +++ b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php @@ -3,7 +3,7 @@ namespace Atproto\HTTP\API\Requests\App\Bsky\Actor; use Atproto\Contracts\RequestContract; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; use Exception; @@ -63,7 +63,7 @@ public function build(): RequestContract }); if (! empty($missing)) { - throw new MissingProvidedFieldException(implode(", ", $missing)); + throw new MissingFieldProvidedException(implode(", ", $missing)); } return $this; diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php index 10180df..c007da1 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php @@ -3,7 +3,7 @@ namespace Atproto\HTTP\API\Requests\Com\Atproto\Repo; use Atproto\Contracts\RequestContract; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; class CreateRecord extends APIRequest @@ -88,7 +88,7 @@ public function swapCommit(string $swapCommit = null) } /** - * @throws MissingProvidedFieldException + * @throws MissingFieldProvidedException */ public function build(): RequestContract { @@ -100,7 +100,7 @@ public function build(): RequestContract ); if (count($missing)) { - throw new MissingProvidedFieldException(implode(", ", $missing)); + throw new MissingFieldProvidedException(implode(", ", $missing)); } return $this; diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php index 8d29a4b..e7a0242 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php @@ -3,7 +3,7 @@ namespace Atproto\HTTP\API\Requests\Com\Atproto\Repo; use Atproto\Contracts\RequestContract; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; class UploadBlob extends APIRequest @@ -41,7 +41,7 @@ public function token(string $token = null) } /** - * @throws MissingProvidedFieldException + * @throws MissingFieldProvidedException */ public function build(): RequestContract { @@ -52,7 +52,7 @@ public function build(): RequestContract ); if (count($missing)) { - throw new MissingProvidedFieldException(implode(", ", $missing)); + throw new MissingFieldProvidedException(implode(", ", $missing)); } return $this; diff --git a/tests/Unit/ClientTest.php b/tests/Unit/ClientTest.php index 238f399..d67b8ce 100644 --- a/tests/Unit/ClientTest.php +++ b/tests/Unit/ClientTest.php @@ -55,7 +55,7 @@ public function testBuildThrowsRequestNotFoundException(): void $this->expectException(RequestNotFoundException::class); $this->expectExceptionMessage("\\Atproto\\HTTP\\API\\Requests\\NonExistentMethod class does not exist."); - $this->client->build(); + $this->client->forge(); } @@ -66,7 +66,7 @@ public function testBuildReturnsRequestContract(): void { $this->client->app()->bsky()->actor()->getProfile(); - $request = $this->client->build(); + $request = $this->client->forge(); $this->assertInstanceOf(RequestContract::class, $request); } diff --git a/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php b/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php index a18c472..ffa7a8e 100644 --- a/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php +++ b/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php @@ -12,7 +12,7 @@ use PHPUnit\Framework\TestCase; use ReflectionException; use Tests\Supports\Reflection; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; class GetProfileTest extends TestCase { @@ -89,7 +89,7 @@ public function testBuildReturnsSameInterface(): void public function testBuildThrowsAnExceptionWhenActorDoesNotExist(): void { - $this->expectException(MissingProvidedFieldException::class); + $this->expectException(MissingFieldProvidedException::class); $this->expectExceptionMessage("Missing provided fields: actor, token"); $this->request->build(); diff --git a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php index b56997a..76c8a20 100644 --- a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php +++ b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php @@ -2,7 +2,7 @@ namespace Tests\Unit\HTTP\API\Requests\Com\Atproto\Repo; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\Requests\Com\Atproto\Repo\CreateRecord; use Faker\Factory; use Faker\Generator; @@ -78,7 +78,7 @@ public function testSwapCommit() } /** - * @throws MissingProvidedFieldException + * @throws MissingFieldProvidedException */ public function testBuildWithAllRequiredFields() { @@ -93,7 +93,7 @@ public function testBuildWithAllRequiredFields() public function testBuildWithMissingRequiredFields() { - $this->expectException(MissingProvidedFieldException::class); + $this->expectException(MissingFieldProvidedException::class); $this->expectExceptionMessage("record"); $this->createRecord->repo($this->faker->word) diff --git a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/UploadBlobTest.php b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/UploadBlobTest.php index ab60885..0f1216b 100644 --- a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/UploadBlobTest.php +++ b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/UploadBlobTest.php @@ -2,7 +2,7 @@ namespace Tests\Unit\HTTP\API\Requests\Com\Atproto\Repo; -use Atproto\Exceptions\Http\MissingProvidedFieldException; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\Requests\Com\Atproto\Repo\UploadBlob; use Faker\Factory; use Faker\Generator; @@ -57,7 +57,7 @@ public function testTokenMethodSetsAuthorizationHeader(): void public function testBuildThrowsExceptionWhenBlobIsMissing(): void { - $this->expectException(MissingProvidedFieldException::class); + $this->expectException(MissingFieldProvidedException::class); $this->expectExceptionMessage('blob'); $this->uploadBlob->token($this->faker->word)->build(); @@ -65,14 +65,14 @@ public function testBuildThrowsExceptionWhenBlobIsMissing(): void public function testBuildThrowsExceptionWhenTokenIsMissing(): void { - $this->expectException(MissingProvidedFieldException::class); + $this->expectException(MissingFieldProvidedException::class); $this->expectExceptionMessage('token'); $this->uploadBlob->blob($this->faker->word)->build(); } /** - * @throws MissingProvidedFieldException + * @throws MissingFieldProvidedException */ public function testBuildReturnsInstanceWhenAllFieldsAreSet(): void { From 533f64ebfa3038586a19716a06d599d325a1a56c Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 20:53:52 +0400 Subject: [PATCH 05/14] refactor: Extract Client logic into Smith trait --- src/Client.php | 49 ++---------------------------------------- src/Traits/Smith.php | 51 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 47 deletions(-) create mode 100644 src/Traits/Smith.php diff --git a/src/Client.php b/src/Client.php index e0d190d..321d193 100644 --- a/src/Client.php +++ b/src/Client.php @@ -2,54 +2,9 @@ namespace Atproto; -use Atproto\Contracts\RequestContract; -use Atproto\Exceptions\Http\Request\RequestNotFoundException; -use Exception; +use Atproto\Traits\Smith; class Client { - protected array $path = []; - - public function __call(string $name, array $arguments): Client - { - $this->path[] = $name; - - return $this; - } - - protected function refresh(): void - { - $this->path = []; - } - - /** - * @throws RequestNotFoundException - */ - public function build(): RequestContract - { - $namespace = $this->namespace(); - - if (! class_exists($namespace)) { - throw new RequestNotFoundException("$namespace class does not exist."); - } - - $request = new $namespace; - - $request->build(); - - return $request; - } - - protected function namespace(): string - { - $prefix = '\\Atproto\\HTTP\\API\\Requests\\'; - $namespace = "$prefix" . implode('\\', array_map( - 'ucfirst', - $this->path - )); - - $this->refresh(); - - return $namespace; - } + use Smith; } diff --git a/src/Traits/Smith.php b/src/Traits/Smith.php new file mode 100644 index 0000000..0324c01 --- /dev/null +++ b/src/Traits/Smith.php @@ -0,0 +1,51 @@ +path[] = $name; + + return $this; + } + + protected function refresh(): void + { + $this->path = []; + } + + /** + * @throws RequestNotFoundException + */ + public function forge(): RequestContract + { + $namespace = $this->namespace(); + + if (! class_exists($namespace)) { + throw new RequestNotFoundException("$namespace class does not exist."); + } + + return new $namespace; + } + + protected function namespace(): string + { + $namespace = self::$prefix . implode('\\', array_map( + 'ucfirst', + $this->path + )); + + $this->refresh(); + + return $namespace; + } +} \ No newline at end of file From 69a3eaa0461e23551351c823ac567a04a3caba57 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 21:16:52 +0400 Subject: [PATCH 06/14] feat: Enhance Smith trait with flexible request instantiation --- src/Traits/Smith.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Traits/Smith.php b/src/Traits/Smith.php index 0324c01..9e55c85 100644 --- a/src/Traits/Smith.php +++ b/src/Traits/Smith.php @@ -26,7 +26,7 @@ protected function refresh(): void /** * @throws RequestNotFoundException */ - public function forge(): RequestContract + public function forge(array $arguments = []): RequestContract { $namespace = $this->namespace(); @@ -34,7 +34,9 @@ public function forge(): RequestContract throw new RequestNotFoundException("$namespace class does not exist."); } - return new $namespace; + array_unshift($arguments, self::$prefix); + + return new $namespace(...$arguments); } protected function namespace(): string From 5a3763c6743c5b872a6145e0d27c5dc1ecbec36f Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Mon, 16 Sep 2024 21:50:40 +0400 Subject: [PATCH 07/14] refactor: Streamline API request handling and improve consistency - Move API_BASE_URL and API_BASE_HEADERS to APIRequestContract - Implement dynamic route path generation in APIRequest class - Remove redundant constructor and path settings from individual request classes - Add CreateSession request class for server authentication - Update Smith trait to use non-escaped namespace prefix - Adjust ClientTest and add APIRequestTest to cover new functionality --- src/Contracts/HTTP/APIRequestContract.php | 6 ++ src/HTTP/API/APIRequest.php | 31 ++++++++-- .../Requests/App/Bsky/Actor/GetProfile.php | 6 -- .../Com/Atproto/Repo/CreateRecord.php | 7 --- .../Requests/Com/Atproto/Repo/UploadBlob.php | 5 -- .../Com/Atproto/Server/CreateSession.php | 24 ++++++++ src/Traits/Smith.php | 2 +- tests/Unit/ClientTest.php | 4 +- tests/Unit/HTTP/API/APIRequestTest.php | 59 +++++++++++++++++++ .../Com/Atproto/Repo/CreateRecordTest.php | 5 -- 10 files changed, 118 insertions(+), 31 deletions(-) create mode 100644 src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php create mode 100644 tests/Unit/HTTP/API/APIRequestTest.php diff --git a/src/Contracts/HTTP/APIRequestContract.php b/src/Contracts/HTTP/APIRequestContract.php index 207bfb5..34386f7 100644 --- a/src/Contracts/HTTP/APIRequestContract.php +++ b/src/Contracts/HTTP/APIRequestContract.php @@ -6,5 +6,11 @@ interface APIRequestContract extends RequestContract { + const API_BASE_URL = 'https://public.api.bsky.app'; + const API_BASE_HEADERS = [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ]; + public function build(): RequestContract; } diff --git a/src/HTTP/API/APIRequest.php b/src/HTTP/API/APIRequest.php index b049d59..f6e5d59 100644 --- a/src/HTTP/API/APIRequest.php +++ b/src/HTTP/API/APIRequest.php @@ -7,11 +7,32 @@ abstract class APIRequest extends Request implements APIRequestContract { - public function __construct() + public function __construct(string $prefix = '') { - $this->origin('https://public.api.bsky.app/xrpc/')->headers([ - 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - ]); + $this->origin(self::API_BASE_URL) + ->headers(self::API_BASE_HEADERS); + + if ($prefix) { + $this->path($this->routePath($prefix)); + } + } + + private function routePath(string $prefix): string + { + $classNamespace = static::class; + + if (strpos($classNamespace, $prefix) === 0) { + $routePath = substr($classNamespace, strlen($prefix)); + } else { + $routePath = $classNamespace; + } + + $routeParts = explode("\\", $routePath); + $routePath = array_reduce( + $routeParts, + fn ($carry, $part) => $carry .= ".".lcfirst($part) + ); + + return "/xrpc/" . trim($routePath, '.'); } } diff --git a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php index a933a7b..beb7660 100644 --- a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php +++ b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php @@ -12,12 +12,6 @@ class GetProfile extends APIRequest protected ?string $actor = null; protected ?string $token = null; - public function __construct() - { - parent::__construct(); - $this->path('/app.bsky.actor.getProfile'); - } - /** * @return RequestContract|string */ diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php index c007da1..6a7cc89 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php @@ -14,13 +14,6 @@ class CreateRecord extends APIRequest 'record' ]; - public function __construct() - { - parent::__construct(); - - $this->path('/com.atproto.repo.createRecord'); - } - public function repo(string $repo = null) { if (is_null($repo)) { diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php index e7a0242..c3c9597 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php @@ -11,11 +11,6 @@ class UploadBlob extends APIRequest protected ?string $blob = null; protected ?string $token = null; - public function __construct() - { - parent::__construct(); - } - public function blob(string $blob = null) { if (is_null($blob)) { diff --git a/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php new file mode 100644 index 0000000..6881781 --- /dev/null +++ b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php @@ -0,0 +1,24 @@ +method('POST')->parameters([ + 'identifier' => $username, + 'password' => $password, + ]); + } + + public function build(): RequestContract + { + return $this; + } +} \ No newline at end of file diff --git a/src/Traits/Smith.php b/src/Traits/Smith.php index 9e55c85..6e2caba 100644 --- a/src/Traits/Smith.php +++ b/src/Traits/Smith.php @@ -9,7 +9,7 @@ trait Smith { protected array $path = []; - protected static string $prefix = "\\Atproto\\HTTP\\API\\Requests\\"; + protected static string $prefix = "Atproto\\HTTP\\API\\Requests\\"; public function __call(string $name, array $arguments): Client { diff --git a/tests/Unit/ClientTest.php b/tests/Unit/ClientTest.php index d67b8ce..ff880cc 100644 --- a/tests/Unit/ClientTest.php +++ b/tests/Unit/ClientTest.php @@ -44,7 +44,7 @@ public function testNamespaceGeneration(): void $namespace = $method->invoke($this->client); - $expectedNamespace = '\\Atproto\\HTTP\\API\\Requests\\App\\Bsky\\Actor'; + $expectedNamespace = 'Atproto\\HTTP\\API\\Requests\\App\\Bsky\\Actor'; $this->assertSame($expectedNamespace, $namespace); } @@ -53,7 +53,7 @@ public function testBuildThrowsRequestNotFoundException(): void $this->client->nonExistentMethod(); $this->expectException(RequestNotFoundException::class); - $this->expectExceptionMessage("\\Atproto\\HTTP\\API\\Requests\\NonExistentMethod class does not exist."); + $this->expectExceptionMessage("Atproto\\HTTP\\API\\Requests\\NonExistentMethod class does not exist."); $this->client->forge(); } diff --git a/tests/Unit/HTTP/API/APIRequestTest.php b/tests/Unit/HTTP/API/APIRequestTest.php new file mode 100644 index 0000000..4dd4902 --- /dev/null +++ b/tests/Unit/HTTP/API/APIRequestTest.php @@ -0,0 +1,59 @@ +faker = Factory::create(); + + $this->parameters = [ + 'identifier' => $this->faker->userName, + 'password' => $this->faker->password, + ]; + + $this->request = new CreateSession( + 'Atproto\\HTTP\\API\\Requests\\', + $this->parameters['identifier'], + $this->parameters['password'] + ); + } + + public function testPath(): void + { + $expected = "/xrpc/com.atproto.server.createSession"; + $actual = $this->request->path(); + + $this->assertSame($expected, $actual); + } + + public function testParameters(): void + { + $expected = $this->parameters; + $actual = $this->request->parameters(); + + $this->assertSame($expected, $actual); + } + + public function testOrigin(): void + { + $expected = 'https://public.api.bsky.app'; + $actual = $this->request->origin(); + + $this->assertSame($expected, $actual); + } +} \ No newline at end of file diff --git a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php index 76c8a20..c7256c8 100644 --- a/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php +++ b/tests/Unit/HTTP/API/Requests/Com/Atproto/Repo/CreateRecordTest.php @@ -19,11 +19,6 @@ protected function setUp(): void $this->faker = Factory::create(); } - public function testConstructor() - { - $this->assertEquals('/com.atproto.repo.createRecord', $this->createRecord->path()); - } - public function testRepo() { $this->assertNull($this->createRecord->repo()); From 80f5e4f45744d367608e12456dffd01a897322c8 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Tue, 17 Sep 2024 19:22:32 +0400 Subject: [PATCH 08/14] Implement authentication and create session functionality - Add Authentication trait to Client class - Create CreateSessionResource for handling session data - Update CreateSession request to use 'bsky.social' origin - Modify RequestHandler to return array instead of ResourceContract - Add error handling improvements in RequestHandler - Implement authenticate method in Authentication trait - Update Client class to use new Authentication trait - Add feature test for authentication process - Minor adjustments to improve code structure and error handling --- src/Client.php | 4 ++ .../Com/Atproto/Server/CreateSession.php | 2 +- src/HTTP/Traits/RequestHandler.php | 9 ++-- .../Atproto/Server/CreateSessionResource.php | 30 +++++++++++ src/Traits/Authentication.php | 25 +++++++++ src/Traits/Smith.php | 1 - tests/Feature/ClientTest.php | 51 +++++++++++++++++++ 7 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 src/Resources/Com/Atproto/Server/CreateSessionResource.php create mode 100644 src/Traits/Authentication.php create mode 100644 tests/Feature/ClientTest.php diff --git a/src/Client.php b/src/Client.php index 321d193..50659af 100644 --- a/src/Client.php +++ b/src/Client.php @@ -2,9 +2,13 @@ namespace Atproto; +use Atproto\Traits\Authentication; use Atproto\Traits\Smith; class Client { + protected static string $prefix = "Atproto\\HTTP\\API\\Requests\\"; + use Smith; + use Authentication; } diff --git a/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php index 6881781..949ce59 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php +++ b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php @@ -11,7 +11,7 @@ public function __construct(string $prefix, string $username, string $password) { parent::__construct($prefix); - $this->method('POST')->parameters([ + $this->method('POST')->origin('https://bsky.social/')->parameters([ 'identifier' => $username, 'password' => $password, ]); diff --git a/src/HTTP/Traits/RequestHandler.php b/src/HTTP/Traits/RequestHandler.php index edc212f..c97e338 100644 --- a/src/HTTP/Traits/RequestHandler.php +++ b/src/HTTP/Traits/RequestHandler.php @@ -21,12 +21,12 @@ trait RequestHandler /** * @throws BlueskyException */ - public function send(): ResourceContract + public function send(): array { $this->request(); $this->handle(); - return $this->resource; + return $this->content; } /** @@ -61,7 +61,7 @@ private function handleResponseError(): void throw new $exception($this->content['message'], $statusCode); } - throw new BlueskyException($this->content['message'], $statusCode); + throw new BlueskyException($this->content['message'] ?? "Unknown error.", $statusCode); } } @@ -103,6 +103,9 @@ private function request(): void CURLOPT_CUSTOMREQUEST => $this->method(), CURLOPT_POSTFIELDS => $this->parameters(true), CURLOPT_URL => $this->url(), + CURLOPT_PROXY => 'localhost:9091', + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false, ]); $this->content = curl_exec($this->resource); diff --git a/src/Resources/Com/Atproto/Server/CreateSessionResource.php b/src/Resources/Com/Atproto/Server/CreateSessionResource.php new file mode 100644 index 0000000..574330c --- /dev/null +++ b/src/Resources/Com/Atproto/Server/CreateSessionResource.php @@ -0,0 +1,30 @@ +send(); + + $this->authenticated = new CreateSessionResource($response); + } +} diff --git a/src/Traits/Smith.php b/src/Traits/Smith.php index 6e2caba..766d232 100644 --- a/src/Traits/Smith.php +++ b/src/Traits/Smith.php @@ -9,7 +9,6 @@ trait Smith { protected array $path = []; - protected static string $prefix = "Atproto\\HTTP\\API\\Requests\\"; public function __call(string $name, array $arguments): Client { diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php new file mode 100644 index 0000000..f9fa25a --- /dev/null +++ b/tests/Feature/ClientTest.php @@ -0,0 +1,51 @@ +client = new Client(); + } + + /** + * @throws BlueskyException + * @throws ReflectionException + */ + public function testGetProfile(): void + { + $username = $_ENV['BLUESKY_IDENTIFIER']; + $password = $_ENV['BLUESKY_PASSWORD']; + + $this->assertIsString($username); + $this->assertIsString($password); + + $this->client->authenticate( + $username, + $password + ); + + /** @var CreateSessionResource $authenticated */ + $authenticated = $this->getPropertyValue('authenticated', $this->client); + + $this->assertInstanceOf(ResourceContract::class, $authenticated); + + $this->assertIsString($authenticated->handle());; + $this->assertSame($username, $authenticated->handle()); + } +} From 5b923339ec62fd840d12d70fbd011735c3536341 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Tue, 17 Sep 2024 21:06:47 +0400 Subject: [PATCH 09/14] Refactor authentication and API requests - Update Client class to expose prefix method - Change API base URL to bsky.social - Add new authentication exceptions - Enhance APIRequest with send and resource methods - Refactor GetProfile request to support authentication - Update CreateRecord and UploadBlob requests - Implement resource methods for API requests - Improve error handling and parameter management in requests --- src/Client.php | 8 ++- src/Contracts/HTTP/APIRequestContract.php | 2 +- .../Http/Response/AuthMissingException.php | 13 +++++ .../AuthenticationRequiredException.php | 13 +++++ src/HTTP/API/APIRequest.php | 9 +++ .../Requests/App/Bsky/Actor/GetProfile.php | 55 +++++++++++++------ .../Com/Atproto/Repo/CreateRecord.php | 10 +++- .../Requests/Com/Atproto/Repo/UploadBlob.php | 9 ++- .../Com/Atproto/Server/CreateSession.php | 9 ++- src/HTTP/Traits/RequestBuilder.php | 6 +- src/HTTP/Traits/RequestHandler.php | 9 +-- .../Com/Atproto/Repo/CreateRecordResource.php | 16 ++++++ .../Com/Atproto/Repo/UploadBlobResource.php | 16 ++++++ src/Traits/Authentication.php | 21 +++++-- src/Traits/Smith.php | 17 +++--- tests/Feature/ClientTest.php | 50 ++++++++++++++++- tests/Unit/HTTP/API/APIRequestTest.php | 6 +- .../App/Bsky/Actor/GetProfileTest.php | 6 +- 18 files changed, 221 insertions(+), 54 deletions(-) create mode 100644 src/Exceptions/Http/Response/AuthMissingException.php create mode 100644 src/Exceptions/Http/Response/AuthenticationRequiredException.php create mode 100644 src/Resources/Com/Atproto/Repo/CreateRecordResource.php create mode 100644 src/Resources/Com/Atproto/Repo/UploadBlobResource.php diff --git a/src/Client.php b/src/Client.php index 50659af..4e5e438 100644 --- a/src/Client.php +++ b/src/Client.php @@ -7,8 +7,12 @@ class Client { - protected static string $prefix = "Atproto\\HTTP\\API\\Requests\\"; - use Smith; use Authentication; + protected static string $prefix = "Atproto\\HTTP\\API\\Requests\\"; + + public function prefix(): string + { + return self::$prefix; + } } diff --git a/src/Contracts/HTTP/APIRequestContract.php b/src/Contracts/HTTP/APIRequestContract.php index 34386f7..5fbbf32 100644 --- a/src/Contracts/HTTP/APIRequestContract.php +++ b/src/Contracts/HTTP/APIRequestContract.php @@ -6,7 +6,7 @@ interface APIRequestContract extends RequestContract { - const API_BASE_URL = 'https://public.api.bsky.app'; + const API_BASE_URL = 'https://bsky.social'; const API_BASE_HEADERS = [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', diff --git a/src/Exceptions/Http/Response/AuthMissingException.php b/src/Exceptions/Http/Response/AuthMissingException.php new file mode 100644 index 0000000..1538a94 --- /dev/null +++ b/src/Exceptions/Http/Response/AuthMissingException.php @@ -0,0 +1,13 @@ +resource($response); + } + private function routePath(string $prefix): string { $classNamespace = static::class; @@ -35,4 +42,6 @@ private function routePath(string $prefix): string return "/xrpc/" . trim($routePath, '.'); } + + abstract public function resource(array $data): ResourceContract; } diff --git a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php index beb7660..7f037d1 100644 --- a/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php +++ b/src/HTTP/API/Requests/App/Bsky/Actor/GetProfile.php @@ -2,15 +2,34 @@ namespace Atproto\HTTP\API\Requests\App\Bsky\Actor; +use Atproto\Client; +use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Contracts\RequestContract; +use Atproto\Exceptions\Auth\AuthRequired; use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; +use Atproto\Resources\App\Bsky\Actor\GetProfileResource; use Exception; class GetProfile extends APIRequest { - protected ?string $actor = null; - protected ?string $token = null; + public function __construct(Client $client = null) + { + if (! $client) { + return; + } + + parent::__construct($client->prefix()); + + if (! $client->authenticated()) { + return; + } + + try { + $this->header('Authorization', 'Bearer ' . $client->authenticated()->accessJwt()); + $this->queryParameter('actor', $client->authenticated()->did()); + } catch (AuthRequired $e) {} + } /** * @return RequestContract|string @@ -18,12 +37,10 @@ class GetProfile extends APIRequest public function actor(string $actor = null) { if (is_null($actor)) { - return $this->actor; + return $this->queryParameter('actor'); } - $this->actor = $actor; - - $this->queryParameter('actor', $this->actor); + $this->queryParameter('actor', $actor); return $this; } @@ -34,12 +51,10 @@ public function actor(string $actor = null) public function token(string $token = null) { if (is_null($token)) { - return $this->token; + return $this->header('Authorization'); } - $this->token = $token; - - $this->header('Authorization', "Bearer $this->token"); + $this->header('Authorization', "Bearer $token"); return $this; } @@ -49,12 +64,15 @@ public function token(string $token = null) */ public function build(): RequestContract { - $fields = ['actor', 'token']; - $missing = array_filter($fields, function ($field) { - if (is_null($this->$field)) { - return true; - } - }); + $missing = []; + + if (! $this->queryParameter('actor')) { + $missing[] = 'actor'; + } + + if (! $this->header('Authorization')) { + $missing[] = 'token'; + } if (! empty($missing)) { throw new MissingFieldProvidedException(implode(", ", $missing)); @@ -62,4 +80,9 @@ public function build(): RequestContract return $this; } + + public function resource(array $data): ResourceContract + { + return new GetProfileResource($data); + } } \ No newline at end of file diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php index 6a7cc89..31279c2 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/CreateRecord.php @@ -2,9 +2,11 @@ namespace Atproto\HTTP\API\Requests\Com\Atproto\Repo; +use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Contracts\RequestContract; use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; +use Atproto\Resources\Com\Atproto\Repo\CreateRecordResource; class CreateRecord extends APIRequest { @@ -89,7 +91,6 @@ public function build(): RequestContract $missing = array_diff( $this->required, $parameters - ); if (count($missing)) { @@ -98,4 +99,9 @@ public function build(): RequestContract return $this; } -} \ No newline at end of file + + public function resource(array $data): ResourceContract + { + return new CreateRecordResource($data); + } +} diff --git a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php index c3c9597..2d4b71c 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php +++ b/src/HTTP/API/Requests/Com/Atproto/Repo/UploadBlob.php @@ -2,9 +2,11 @@ namespace Atproto\HTTP\API\Requests\Com\Atproto\Repo; +use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Contracts\RequestContract; use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; +use Atproto\Resources\Com\Atproto\Repo\UploadBlobResource; class UploadBlob extends APIRequest { @@ -52,4 +54,9 @@ public function build(): RequestContract return $this; } -} \ No newline at end of file + + public function resource(array $data): ResourceContract + { + return new UploadBlobResource($data); + } +} diff --git a/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php index 949ce59..b56ad03 100644 --- a/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php +++ b/src/HTTP/API/Requests/Com/Atproto/Server/CreateSession.php @@ -2,8 +2,10 @@ namespace Atproto\HTTP\API\Requests\Com\Atproto\Server; +use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Contracts\RequestContract; use Atproto\HTTP\API\APIRequest; +use Atproto\Resources\Com\Atproto\Server\CreateSessionResource; class CreateSession extends APIRequest { @@ -21,4 +23,9 @@ public function build(): RequestContract { return $this; } -} \ No newline at end of file + + public function resource(array $data): ResourceContract + { + return new CreateSessionResource($data); + } +} diff --git a/src/HTTP/Traits/RequestBuilder.php b/src/HTTP/Traits/RequestBuilder.php index 2a700e8..0f262b7 100644 --- a/src/HTTP/Traits/RequestBuilder.php +++ b/src/HTTP/Traits/RequestBuilder.php @@ -30,7 +30,7 @@ public function origin(string $origin = null) return $this->origin; } - $this->origin = $origin; + $this->origin = rtrim($origin, "/"); return $this; } @@ -41,7 +41,7 @@ public function path(string $path = null) return $this->path; } - $this->path = $path; + $this->path = trim($path, "/"); return $this; } @@ -146,4 +146,4 @@ public function queryParameters($queryParameters = null) return $this; } -} \ No newline at end of file +} diff --git a/src/HTTP/Traits/RequestHandler.php b/src/HTTP/Traits/RequestHandler.php index c97e338..74cffdc 100644 --- a/src/HTTP/Traits/RequestHandler.php +++ b/src/HTTP/Traits/RequestHandler.php @@ -21,7 +21,7 @@ trait RequestHandler /** * @throws BlueskyException */ - public function send(): array + public function send() { $this->request(); $this->handle(); @@ -55,7 +55,7 @@ private function handleResponseError(): void $statusCode = curl_getinfo($this->resource, CURLINFO_HTTP_CODE); if ($statusCode < 200 || $statusCode > 299) { - $exception = "\\Atproto\\Exceptions\\Http\\Response\\$this->content[error]"; + $exception = "\\Atproto\\Exceptions\\Http\\Response\\{$this->content['error']}Exception"; if (class_exists($exception)) { throw new $exception($this->content['message'], $statusCode); @@ -103,11 +103,8 @@ private function request(): void CURLOPT_CUSTOMREQUEST => $this->method(), CURLOPT_POSTFIELDS => $this->parameters(true), CURLOPT_URL => $this->url(), - CURLOPT_PROXY => 'localhost:9091', - CURLOPT_SSL_VERIFYPEER => false, - CURLOPT_SSL_VERIFYHOST => false, ]); $this->content = curl_exec($this->resource); } -} \ No newline at end of file +} diff --git a/src/Resources/Com/Atproto/Repo/CreateRecordResource.php b/src/Resources/Com/Atproto/Repo/CreateRecordResource.php new file mode 100644 index 0000000..a267e29 --- /dev/null +++ b/src/Resources/Com/Atproto/Repo/CreateRecordResource.php @@ -0,0 +1,16 @@ +send(); - $this->authenticated = new CreateSessionResource($response); + $this->authenticated = $response; + } + + /** + * @throws AuthenticationRequiredException + */ + public function authenticated(): ?CreateSessionResource + { + return $this->authenticated; } } diff --git a/src/Traits/Smith.php b/src/Traits/Smith.php index 766d232..b14000b 100644 --- a/src/Traits/Smith.php +++ b/src/Traits/Smith.php @@ -25,7 +25,7 @@ protected function refresh(): void /** * @throws RequestNotFoundException */ - public function forge(array $arguments = []): RequestContract + public function forge(): RequestContract { $namespace = $this->namespace(); @@ -33,20 +33,19 @@ public function forge(array $arguments = []): RequestContract throw new RequestNotFoundException("$namespace class does not exist."); } - array_unshift($arguments, self::$prefix); - - return new $namespace(...$arguments); + return new $namespace($this); } protected function namespace(): string { - $namespace = self::$prefix . implode('\\', array_map( - 'ucfirst', - $this->path - )); + $namespace = $this->prefix() . implode('\\', array_map( + 'ucfirst', + $this->path + )); $this->refresh(); return $namespace; } -} \ No newline at end of file + abstract public function prefix(): string; +} diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php index f9fa25a..8033758 100644 --- a/tests/Feature/ClientTest.php +++ b/tests/Feature/ClientTest.php @@ -5,7 +5,11 @@ use Atproto\Client; use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Exceptions\BlueskyException; +use Atproto\Exceptions\Http\Response\AuthenticationRequiredException; +use Atproto\Exceptions\Http\Response\AuthMissingException; +use Atproto\Resources\App\Bsky\Actor\GetProfileResource; use Atproto\Resources\Com\Atproto\Server\CreateSessionResource; +use Carbon\Carbon; use PHPUnit\Framework\TestCase; use ReflectionException; use Tests\Supports\Reflection; @@ -45,7 +49,51 @@ public function testGetProfile(): void $this->assertInstanceOf(ResourceContract::class, $authenticated); - $this->assertIsString($authenticated->handle());; + $this->assertIsString($authenticated->handle()); + ; $this->assertSame($username, $authenticated->handle()); + + $profile = $this->client + ->app() + ->bsky() + ->actor() + ->getProfile() + ->forge() + ->send(); + + $this->assertInstanceOf(ResourceContract::class, $profile); + $this->assertInstanceOf(GetProfileResource::class, $profile); + + $this->assertInstanceOf(Carbon::class, $profile->createdAt()); + } + + /** + * @throws BlueskyException + */ + public function testClientThrowsExceptionWhenAuthenticationFails(): void + { + $this->expectException(AuthenticationRequiredException::class); + $this->expectExceptionCode("Invalid identifier or password"); + $this->expectExceptionCode(401); + + $this->client->authenticate( + 'invalid', + 'credentials' + ); + } + + public function testClientThrowsExceptionWhenAuthenticationRequired(): void + { + $this->expectException(AuthMissingException::class); + $this->expectExceptionCode("Authentication Required"); + $this->expectExceptionCode(401); + + $this->client + ->app() + ->bsky() + ->actor() + ->getProfile() + ->forge() + ->send(); } } diff --git a/tests/Unit/HTTP/API/APIRequestTest.php b/tests/Unit/HTTP/API/APIRequestTest.php index 4dd4902..1091bef 100644 --- a/tests/Unit/HTTP/API/APIRequestTest.php +++ b/tests/Unit/HTTP/API/APIRequestTest.php @@ -35,7 +35,7 @@ public function setUp(): void public function testPath(): void { - $expected = "/xrpc/com.atproto.server.createSession"; + $expected = "xrpc/com.atproto.server.createSession"; $actual = $this->request->path(); $this->assertSame($expected, $actual); @@ -51,9 +51,9 @@ public function testParameters(): void public function testOrigin(): void { - $expected = 'https://public.api.bsky.app'; + $expected = 'https://bsky.social'; $actual = $this->request->origin(); $this->assertSame($expected, $actual); } -} \ No newline at end of file +} diff --git a/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php b/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php index ffa7a8e..d7878a4 100644 --- a/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php +++ b/tests/Unit/HTTP/API/Requests/App/Bsky/Actor/GetProfileTest.php @@ -4,6 +4,7 @@ use Atproto\Contracts\HTTP\APIRequestContract; use Atproto\Contracts\RequestContract; +use Atproto\Exceptions\Http\MissingFieldProvidedException; use Atproto\HTTP\API\APIRequest; use Atproto\HTTP\API\Requests\App\Bsky\Actor\GetProfile; use Atproto\HTTP\Request; @@ -12,7 +13,6 @@ use PHPUnit\Framework\TestCase; use ReflectionException; use Tests\Supports\Reflection; -use Atproto\Exceptions\Http\MissingFieldProvidedException; class GetProfileTest extends TestCase { @@ -38,7 +38,7 @@ public function testActorMethodSetsCorrectData(): void // Act $this->request->actor($expected); - $actual = $this->getPropertyValue('actor', $this->request); + $actual = $this->request->queryParameter('actor'); // Assert $this->assertSame($expected, $actual, 'Actor should be set correctly.'); @@ -52,7 +52,7 @@ public function testActorMethodGetsCorrectData(): void { // Arrange $expected = $this->faker->word; - $this->setPropertyValue('actor', $expected, $this->request); + $this->request->queryParameter('actor', $expected); // Act $actual = $this->request->actor(); From 8abaeb4177b119488f85c8330271d39137c91cf5 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Wed, 18 Sep 2024 12:13:54 +0400 Subject: [PATCH 10/14] Update Client and unit testing - Remove unnecessary "use"s and wrong doc blocks - Add new tests --- src/Traits/Authentication.php | 8 ++------ tests/Feature/ClientTest.php | 4 ++-- tests/Unit/ClientTest.php | 5 +++++ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Traits/Authentication.php b/src/Traits/Authentication.php index db3f3e9..d9f9e43 100644 --- a/src/Traits/Authentication.php +++ b/src/Traits/Authentication.php @@ -2,8 +2,7 @@ namespace Atproto\Traits; -use Atproto\Exceptions\BlueskyException as BlueskyExceptionAlias; -use Atproto\Exceptions\Http\Response\AuthenticationRequiredException; +use Atproto\Exceptions\BlueskyException; use Atproto\HTTP\API\Requests\Com\Atproto\Server\CreateSession; use Atproto\Resources\Com\Atproto\Server\CreateSessionResource; @@ -12,7 +11,7 @@ trait Authentication private ?CreateSessionResource $authenticated = null; /** - * @throws BlueskyExceptionAlias + * @throws BlueskyException */ public function authenticate(string $identifier, string $password): void { @@ -24,9 +23,6 @@ public function authenticate(string $identifier, string $password): void $this->authenticated = $response; } - /** - * @throws AuthenticationRequiredException - */ public function authenticated(): ?CreateSessionResource { return $this->authenticated; diff --git a/tests/Feature/ClientTest.php b/tests/Feature/ClientTest.php index 8033758..89d8ba6 100644 --- a/tests/Feature/ClientTest.php +++ b/tests/Feature/ClientTest.php @@ -73,7 +73,7 @@ public function testGetProfile(): void public function testClientThrowsExceptionWhenAuthenticationFails(): void { $this->expectException(AuthenticationRequiredException::class); - $this->expectExceptionCode("Invalid identifier or password"); + $this->expectExceptionMessage("Invalid identifier or password"); $this->expectExceptionCode(401); $this->client->authenticate( @@ -85,7 +85,7 @@ public function testClientThrowsExceptionWhenAuthenticationFails(): void public function testClientThrowsExceptionWhenAuthenticationRequired(): void { $this->expectException(AuthMissingException::class); - $this->expectExceptionCode("Authentication Required"); + $this->expectExceptionMessage("Authentication Required"); $this->expectExceptionCode(401); $this->client diff --git a/tests/Unit/ClientTest.php b/tests/Unit/ClientTest.php index ff880cc..48dfb77 100644 --- a/tests/Unit/ClientTest.php +++ b/tests/Unit/ClientTest.php @@ -86,4 +86,9 @@ public function testRefreshClearsPath(): void $this->assertEmpty($path); } + + public function testAuthenticatedReturnsNullWhenNotAuthenticated(): void + { + $this->assertNull($this->client->authenticated()); + } } From a430f63b6ee1861cb6ae461a709512df000a9a54 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Wed, 18 Sep 2024 15:47:42 +0400 Subject: [PATCH 11/14] refactor: Add Castable trait to various asset classes and update composer configuration - Added the `Castable` trait to multiple asset classes for better handling of casting within assets. - Updated `composer.json` to include a new `src/helpers.php` file in the autoload files section. - Fixed minor typo in the request headers of `UploadBlob.php`. - Removed redundant imports and ensured consistent use of traits across asset classes. --- composer.json | 5 ++- src/API/Com/Atrproto/Repo/UploadBlob.php | 2 +- src/Resources/Assets/AssociatedAsset.php | 2 + src/Resources/Assets/BaseAsset.php | 1 - src/Resources/Assets/BlockingByListAsset.php | 2 +- src/Resources/Assets/ByListAsset.php | 7 ++- src/Resources/Assets/ChatAsset.php | 10 ++--- src/Resources/Assets/CollectionAsset.php | 2 +- src/Resources/Assets/DatetimeAsset.php | 2 +- src/Resources/Assets/FollowerAsset.php | 2 +- .../Assets/JoinedViaStarterPackAsset.php | 7 ++- src/Resources/Assets/KnownFollowersAsset.php | 9 ++-- src/Resources/Assets/LabelAsset.php | 7 ++- src/Resources/Assets/LabelsAsset.php | 4 +- src/Resources/Assets/MutedByListAsset.php | 2 +- src/Resources/Assets/UserAsset.php | 7 ++- src/Resources/Assets/ViewerAsset.php | 7 ++- src/Resources/BaseResource.php | 13 +++--- .../Com/Atproto/Repo/CreateRecordResource.php | 8 +--- .../Com/Atproto/Repo/UploadBlobResource.php | 10 ++--- .../Atproto/Server/CreateSessionResource.php | 7 --- src/Traits/Castable.php | 8 ++++ src/helpers.php | 43 +++++++++++++++++++ tests/Unit/Resources/BaseResourceTest.php | 2 + 24 files changed, 113 insertions(+), 56 deletions(-) create mode 100644 src/Traits/Castable.php create mode 100644 src/helpers.php diff --git a/composer.json b/composer.json index 18f0d11..aec8595 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,10 @@ "psr-4": { "Atproto\\": "src/", "Tests\\": "tests/" - } + }, + "files": [ + "src/helpers.php" + ] }, "require-dev": { "phpunit/phpunit": "9.6.20", diff --git a/src/API/Com/Atrproto/Repo/UploadBlob.php b/src/API/Com/Atrproto/Repo/UploadBlob.php index c5f9801..6a5c498 100644 --- a/src/API/Com/Atrproto/Repo/UploadBlob.php +++ b/src/API/Com/Atrproto/Repo/UploadBlob.php @@ -26,7 +26,7 @@ class UploadBlob implements RequestContract /** @var array The headers for the request. */ private $headers = [ 'Content-Type' => '*/*', - 'Accept' => 'application/json',s + 'Accept' => 'application/json', ]; /** diff --git a/src/Resources/Assets/AssociatedAsset.php b/src/Resources/Assets/AssociatedAsset.php index 474fa36..fd30e66 100644 --- a/src/Resources/Assets/AssociatedAsset.php +++ b/src/Resources/Assets/AssociatedAsset.php @@ -5,6 +5,7 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; /** * @method int lists() @@ -17,6 +18,7 @@ class AssociatedAsset implements ResourceContract, AssetContract { use BaseResource; use BaseAsset; + use Castable; public function __construct($content) { diff --git a/src/Resources/Assets/BaseAsset.php b/src/Resources/Assets/BaseAsset.php index 5d10c92..9ffc96e 100644 --- a/src/Resources/Assets/BaseAsset.php +++ b/src/Resources/Assets/BaseAsset.php @@ -3,7 +3,6 @@ namespace Atproto\Resources\Assets; use Atproto\Contracts\HTTP\Resources\AssetContract; -use GenericCollection\Exceptions\InvalidArgumentException; trait BaseAsset { diff --git a/src/Resources/Assets/BlockingByListAsset.php b/src/Resources/Assets/BlockingByListAsset.php index ee3565f..18a90bb 100644 --- a/src/Resources/Assets/BlockingByListAsset.php +++ b/src/Resources/Assets/BlockingByListAsset.php @@ -20,4 +20,4 @@ class BlockingByListAsset implements ResourceContract, AssetContract { use ByListAsset; -} \ No newline at end of file +} diff --git a/src/Resources/Assets/ByListAsset.php b/src/Resources/Assets/ByListAsset.php index 36968d0..2b80120 100644 --- a/src/Resources/Assets/ByListAsset.php +++ b/src/Resources/Assets/ByListAsset.php @@ -3,6 +3,7 @@ namespace Atproto\Resources\Assets; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; use Carbon\Carbon; /** @@ -18,7 +19,9 @@ */ trait ByListAsset { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct($content) { @@ -33,4 +36,4 @@ public function casts(): array 'indexedAt' => DatetimeAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/ChatAsset.php b/src/Resources/Assets/ChatAsset.php index b3f655f..ca442c5 100644 --- a/src/Resources/Assets/ChatAsset.php +++ b/src/Resources/Assets/ChatAsset.php @@ -11,7 +11,8 @@ */ class ChatAsset implements ResourceContract, AssetContract { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; public function __construct(array $content) { @@ -22,9 +23,4 @@ public function cast(): self { return $this; } - - protected function casts(): array - { - return []; - } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/CollectionAsset.php b/src/Resources/Assets/CollectionAsset.php index dbd4904..adc74d1 100644 --- a/src/Resources/Assets/CollectionAsset.php +++ b/src/Resources/Assets/CollectionAsset.php @@ -28,4 +28,4 @@ public function cast(): self abstract protected function item($data): AssetContract; abstract protected function type(): TypeInterface; -} \ No newline at end of file +} diff --git a/src/Resources/Assets/DatetimeAsset.php b/src/Resources/Assets/DatetimeAsset.php index 88a3d7c..4616f2a 100644 --- a/src/Resources/Assets/DatetimeAsset.php +++ b/src/Resources/Assets/DatetimeAsset.php @@ -13,4 +13,4 @@ public function cast(): Carbon { return Carbon::parse($this->value); } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/FollowerAsset.php b/src/Resources/Assets/FollowerAsset.php index 2457d86..a2e3944 100644 --- a/src/Resources/Assets/FollowerAsset.php +++ b/src/Resources/Assets/FollowerAsset.php @@ -18,4 +18,4 @@ class FollowerAsset implements ResourceContract, AssetContract { use UserAsset; -} \ No newline at end of file +} diff --git a/src/Resources/Assets/JoinedViaStarterPackAsset.php b/src/Resources/Assets/JoinedViaStarterPackAsset.php index 80a2315..097e381 100644 --- a/src/Resources/Assets/JoinedViaStarterPackAsset.php +++ b/src/Resources/Assets/JoinedViaStarterPackAsset.php @@ -5,6 +5,7 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; use Carbon\Carbon; /** @@ -19,7 +20,9 @@ */ class JoinedViaStarterPackAsset implements ResourceContract, AssetContract { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct($content) { @@ -34,4 +37,4 @@ public function casts(): array 'indexedAt' => DatetimeAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/KnownFollowersAsset.php b/src/Resources/Assets/KnownFollowersAsset.php index 45263f3..b2a90db 100644 --- a/src/Resources/Assets/KnownFollowersAsset.php +++ b/src/Resources/Assets/KnownFollowersAsset.php @@ -4,12 +4,13 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Resources\BaseResource; -use GenericCollection\GenericCollection; -use GenericCollection\Interfaces\TypeInterface; +use Atproto\Traits\Castable; class KnownFollowersAsset implements AssetContract { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct(array $content) { @@ -22,4 +23,4 @@ protected function casts(): array 'followers' => FollowersAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/LabelAsset.php b/src/Resources/Assets/LabelAsset.php index b0c9f3e..0e90dfc 100644 --- a/src/Resources/Assets/LabelAsset.php +++ b/src/Resources/Assets/LabelAsset.php @@ -5,6 +5,7 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; /** * @method int ver @@ -18,7 +19,9 @@ */ class LabelAsset implements ResourceContract, AssetContract { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct(array $content) { @@ -32,4 +35,4 @@ public function casts(): array 'exp' => DatetimeAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/LabelsAsset.php b/src/Resources/Assets/LabelsAsset.php index ab8d21e..6c9dc19 100644 --- a/src/Resources/Assets/LabelsAsset.php +++ b/src/Resources/Assets/LabelsAsset.php @@ -22,6 +22,6 @@ protected function item($data): AssetContract protected function type(): TypeInterface { - return new LabelAssetType; + return new LabelAssetType(); } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/MutedByListAsset.php b/src/Resources/Assets/MutedByListAsset.php index 1367d22..9c1a282 100644 --- a/src/Resources/Assets/MutedByListAsset.php +++ b/src/Resources/Assets/MutedByListAsset.php @@ -20,4 +20,4 @@ class MutedByListAsset implements ResourceContract, AssetContract { use ByListAsset; -} \ No newline at end of file +} diff --git a/src/Resources/Assets/UserAsset.php b/src/Resources/Assets/UserAsset.php index d50e0aa..1936975 100644 --- a/src/Resources/Assets/UserAsset.php +++ b/src/Resources/Assets/UserAsset.php @@ -3,6 +3,7 @@ namespace Atproto\Resources\Assets; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; /** * @method string did() @@ -23,7 +24,9 @@ */ trait UserAsset { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct(array $content) { @@ -41,4 +44,4 @@ protected function casts(): array 'labels' => LabelsAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/Assets/ViewerAsset.php b/src/Resources/Assets/ViewerAsset.php index ba25337..148054f 100644 --- a/src/Resources/Assets/ViewerAsset.php +++ b/src/Resources/Assets/ViewerAsset.php @@ -5,6 +5,7 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; /** * @method bool muted @@ -19,7 +20,9 @@ */ class ViewerAsset implements ResourceContract, AssetContract { - use BaseResource, BaseAsset; + use BaseResource; + use BaseAsset; + use Castable; public function __construct($content) { @@ -35,4 +38,4 @@ public function casts(): array 'labels' => LabelsAsset::class, ]; } -} \ No newline at end of file +} diff --git a/src/Resources/BaseResource.php b/src/Resources/BaseResource.php index 9704d81..0701335 100644 --- a/src/Resources/BaseResource.php +++ b/src/Resources/BaseResource.php @@ -5,6 +5,7 @@ use Atproto\Contracts\HTTP\Resources\AssetContract; use Atproto\Exceptions\Resource\BadAssetCallException; use Atproto\Helpers\Arr; +use Atproto\Traits\Castable; trait BaseResource { @@ -53,15 +54,15 @@ private function parse(string $name) { $value = Arr::get($this->content, $name); - /** @var ?AssetContract $cast */ - $asset = Arr::get($this->casts(), $name); + if (in_array(Castable::class, class_uses_recursive(static::class))) { + /** @var ?AssetContract $cast */ + $asset = Arr::get($this->casts(), $name); - if ($asset) { - $value = (new $asset($value))->cast(); + if ($asset) { + $value = (new $asset($value))->cast(); + } } return $value; } - - abstract protected function casts(): array; } \ No newline at end of file diff --git a/src/Resources/Com/Atproto/Repo/CreateRecordResource.php b/src/Resources/Com/Atproto/Repo/CreateRecordResource.php index a267e29..72ec7fa 100644 --- a/src/Resources/Com/Atproto/Repo/CreateRecordResource.php +++ b/src/Resources/Com/Atproto/Repo/CreateRecordResource.php @@ -5,12 +5,8 @@ use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; + class CreateRecordResource implements ResourceContract { use BaseResource; - - protected function casts(): array - { - return []; - } -} \ No newline at end of file +} diff --git a/src/Resources/Com/Atproto/Repo/UploadBlobResource.php b/src/Resources/Com/Atproto/Repo/UploadBlobResource.php index 835ba35..fe75413 100644 --- a/src/Resources/Com/Atproto/Repo/UploadBlobResource.php +++ b/src/Resources/Com/Atproto/Repo/UploadBlobResource.php @@ -5,12 +5,10 @@ use Atproto\Contracts\HTTP\Resources\ResourceContract; use Atproto\Resources\BaseResource; +/** + * @method object blob() + */ class UploadBlobResource implements ResourceContract { use BaseResource; - - protected function casts(): array - { - return []; - } -} \ No newline at end of file +} diff --git a/src/Resources/Com/Atproto/Server/CreateSessionResource.php b/src/Resources/Com/Atproto/Server/CreateSessionResource.php index 574330c..b05bda3 100644 --- a/src/Resources/Com/Atproto/Server/CreateSessionResource.php +++ b/src/Resources/Com/Atproto/Server/CreateSessionResource.php @@ -20,11 +20,4 @@ class CreateSessionResource implements ResourceContract { use BaseResource; - - protected function casts(): array - { - return [ - - ]; - } } diff --git a/src/Traits/Castable.php b/src/Traits/Castable.php new file mode 100644 index 0000000..9c82a4e --- /dev/null +++ b/src/Traits/Castable.php @@ -0,0 +1,8 @@ + $class] as $class) { + $results += trait_uses_recursive($class); + } + + return array_unique($results); + } +} + +if (! function_exists('trait_uses_recursive')) { + /** + * Returns all traits used by a trait and its traits. + * + * @param object|string $trait + * @return array + */ + function trait_uses_recursive($trait): array + { + $traits = class_uses($trait) ?: []; + + foreach ($traits as $trait) { + $traits += trait_uses_recursive($trait); + } + + return $traits; + } +} \ No newline at end of file diff --git a/tests/Unit/Resources/BaseResourceTest.php b/tests/Unit/Resources/BaseResourceTest.php index 47cba4c..8a61f90 100644 --- a/tests/Unit/Resources/BaseResourceTest.php +++ b/tests/Unit/Resources/BaseResourceTest.php @@ -7,6 +7,7 @@ use Atproto\Exceptions\Resource\BadAssetCallException; use Atproto\Resources\Assets\BaseAsset; use Atproto\Resources\BaseResource; +use Atproto\Traits\Castable; use PHPUnit\Framework\TestCase; class BaseResourceTest extends TestCase @@ -54,6 +55,7 @@ public function testMagicCall() class TestableResource implements ResourceContract { use BaseResource; + use Castable; protected function casts(): array { From a963be3323708b2a4808ae090fbe1d9fd9d178d8 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Wed, 18 Sep 2024 16:40:33 +0400 Subject: [PATCH 12/14] Remove credentials from tests --- tests/Feature/BlueskyClientTest.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/Feature/BlueskyClientTest.php b/tests/Feature/BlueskyClientTest.php index 3b42e5e..1abfef8 100644 --- a/tests/Feature/BlueskyClientTest.php +++ b/tests/Feature/BlueskyClientTest.php @@ -73,8 +73,8 @@ public function testAuthenticateWithValidCredentials() $client->setStrategy(new PasswordAuthentication); $authenticated = $client->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $this->assertIsObject($authenticated); @@ -114,8 +114,8 @@ public function testExecuteWithCreateRecord() $client->setStrategy(new PasswordAuthentication) ->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $response = $client->execute(); @@ -133,8 +133,8 @@ public function testExecuteWithUploadBlob() $client->setStrategy(new PasswordAuthentication) ->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $client->getRequest()->setBlob('assets/file.png'); @@ -151,8 +151,8 @@ public function testExecuteWithGetProfile() $client = new BlueskyClient(new GetProfile); $client->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $client->getRequest()->setActor('shahmal1yevv.bsky.social'); @@ -175,8 +175,8 @@ public function testSendWithGetProfile() $client = new BlueskyClient($request); $client->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); /** @var GetProfileResource $response */ @@ -211,8 +211,8 @@ public function testSendWithRequestWhichHasNotResourceSupport() $client = new BlueskyClient($request); $client->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $response = $client->send(); @@ -228,8 +228,8 @@ public function testExecuteWithUploadBlobAndCreateRecord() $client->setStrategy(new PasswordAuthentication) ->authenticate([ - 'identifier' => 'shahmal1yevv.bsky.social', - 'password' => 'ucvlqcq8' + 'identifier' => $_ENV["BLUESKY_IDENTIFIER"], + 'password' => $_ENV["BLUESKY_PASSWORD"] ]); $client->getRequest() From ce03d69a1e6d0492b38e8c9846694d4d15aeb315 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Wed, 18 Sep 2024 16:49:56 +0400 Subject: [PATCH 13/14] Update composer.json --- composer.json | 17 ++++++++++++++++- composer.lock | 10 +++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index aec8595..1223b0b 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,21 @@ { "name": "shahmal1yev/blueskysdk", - "description": "BlueskySDK is a PHP library for easy integration with the Bluesky API, enabling effortless file uploads, record creation, and authentication in PHP applications.", + "description": "BlueSky SDK is a PHP library used for interacting with the BlueSky API. This library allows you to perform various operations using the BlueSky API.", + "keywords": [ + "bluesky", + "sdk", + "api", + "social-network", + "atproto", + "decentralized", + "php", + "client", + "library", + "wrapper", + "federation", + "microblogs", + "web3" + ], "minimum-stability": "stable", "license": "mit", "autoload": { diff --git a/composer.lock b/composer.lock index 53215ae..93b0564 100644 --- a/composer.lock +++ b/composer.lock @@ -1040,16 +1040,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.2", + "version": "1.12.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1" + "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1", - "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009", + "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009", "shasum": "" }, "require": { @@ -1094,7 +1094,7 @@ "type": "github" } ], - "time": "2024-09-05T16:09:28+00:00" + "time": "2024-09-09T08:10:35+00:00" }, { "name": "phpunit/php-code-coverage", From cdbe66aea188ebfe24b5f6d68effb70ed75bed23 Mon Sep 17 00:00:00 2001 From: Eldar Shahmaliyev Date: Wed, 18 Sep 2024 18:31:34 +0400 Subject: [PATCH 14/14] Update README.md --- README.md | 225 +++++++++++++--------------- {assets => art}/file.png | Bin art/logo-small.webp | Bin 0 -> 16478 bytes art/logo.webp | Bin 0 -> 199850 bytes tests/Feature/BlueskyClientTest.php | 6 +- 5 files changed, 111 insertions(+), 120 deletions(-) rename {assets => art}/file.png (100%) create mode 100644 art/logo-small.webp create mode 100644 art/logo.webp diff --git a/README.md b/README.md index c0e50dc..c18c7a5 100644 --- a/README.md +++ b/README.md @@ -1,166 +1,157 @@ -# BlueskySDK +

+ Logo +

+ +# BlueSky SDK + +![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/shahmal1yev/blueskysdk?label=latest&style=flat) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +![GitHub last commit](https://img.shields.io/github/last-commit/shahmal1yev/blueskysdk) +![GitHub issues](https://img.shields.io/github/issues/shahmal1yev/blueskysdk) +![GitHub stars](https://img.shields.io/github/stars/shahmal1yev/blueskysdk) +![GitHub forks](https://img.shields.io/github/forks/shahmal1yev/blueskysdk) +![GitHub contributors](https://img.shields.io/github/contributors/shahmal1yev/blueskysdk) ## Project Description -BlueskySDK is a PHP library used to interact with the Bluesky API. This library allows you to perform file uploads, create records, and other operations using the Bluesky API. +BlueSky SDK is a PHP library used for interacting with the [BlueSky API](https://docs.bsky.app/docs/get-started). This library allows you to perform various +operations using the BlueSky API. ## Requirements -- PHP 5.6 or newer -- Composer +- **PHP**: 7.4 or newer +- **Composer**: [Dependency management tool](https://getcomposer.org/) for PHP ## Installation -```shell +To install BlueSky SDK via Composer, use the following command: + +```bash composer require shahmal1yev/blueskysdk ``` ## Usage -After including the library in your project, you can refer to the following examples: +Once installed, you can start using the SDK to interact with the BlueSky API. Below are examples of how to +authenticate and perform various operations using the library. +### Authentication and Basic Usage -### Get Profile +First, instantiate the `Client` class and authenticate using your BlueSky credentials: ```php -use Atproto\Clients\BlueskyClient; -use Atproto\API\App\Bsky\Actor\GetProfile; -use Atproto\Resources\App\Bsky\Actor\GetProfileResource; -use Atproto\Resources\Assets\LabelsAsset; -use Atproto\Resources\Assets\LabelAsset; -use Atproto\Resources\Assets\FollowersAsset; -use Atproto\Resources\Assets\FollowerAsset; +use Atproto\Client; +use Atproto\Resources\Com\Atproto\Server\CreateSessionResource; -$client = new BlueskyClient(new GetProfile()); +$client = new Client(); -$client->authenticate([ - 'identifier' => 'user@example.com', - 'password' => 'password' -]); +// Authenticate using your identifier (e.g., email) and password +$client->authenticate($identifier, $password); -/** @var GetProfileResource $user */ -$user = $client->send(); - -/** @var Carbon\Carbon $created */ -$created = $user->createdAt(); +// Once authenticated, you can retrieve the user's session resource +/** @var CreateSessionResource $session */ +$session = $client->authenticated(); +``` -/** @var LabelsAsset $labels */ -$labels = $user->labels(); +### Making Requests -/** @var FollowersAsset $knownFollowers */ -$knownFollowers = $user->viewer() - ->knownFollowers() - ->followers(); +BlueSky SDK provides a fluent interface to construct API requests. Use chained method calls to navigate through the +API lexicons and forge the request: -foreach($knownFollowers as $follower) { - /** @var FollowerAsset $follower */ - - $name = $follower->displayName(); - $createdAt = $follower->createdAt()->format(DATE_ATOM); - - echo "$name's account created at $createdAt"; -} +```php +use Atproto\Contracts\ResourceContract; + +// Example: Fetching a profile +$profile = $client->app() + ->bsky() + ->actor() + ->getProfile() + ->forge() + ->actor('some-actor-handle') // Specify the actor handle + ->send(); ``` -### File Upload +### Handling Responses + +BlueSky SDK supports both Resource and Castable interfaces, providing flexibility in handling API responses and +enabling smooth data manipulation and casting for a more streamlined development experience. + +Responses are returned as resource instances that implement the `ResourceContract`. These resources provide methods +for accessing data returned by the API. ```php -use Atproto\API\Com\Atrproto\Repo\UploadBlobRequest; -use Atproto\Clients\BlueskyClient; -use Atproto\Auth\Strategies\PasswordAuthentication; +// Retrieve properties from the profile +/** @var string $displayName */ +$displayName = $profile->displayName(); -$client = new BlueskyClient(new UploadBlobRequest); +/** @var Carbon\Carbon $createdAt */ +$createdAt = $profile->createdAt(); +``` -$client->setStrategy(new PasswordAuthentication) - ->authenticate([ - 'identifier' => 'user@example.com', - 'password' => 'password' - ]); +### Working with Assets and Relationships -$client->getRequest() - ->setBlob('/var/www/blueskysdk/assets/file.png'); +BlueSky SDK allows you to access complex assets like followers and labels directly through the resource instances. -$response = $client->execute(); +```php +use Atproto\Resources\Assets\FollowersAsset; +use Atproto\Resources\Assets\FollowerAsset; + +// Fetch the user's followers +/** @var FollowersAsset $followers */ +$followers = $profile->viewer() + ->knownFollowers() + ->followers(); -echo "Blob uploaded successfully. CID: {$response->cid}"; +foreach ($followers as $follower) { + /** @var FollowerAsset $follower */ + echo $follower->displayName() . " - Created at: " . $follower->createdAt()->format(DATE_ATOM) . "\n"; +} ``` -### Record Creation +### Example: Fetching Profile Information + +Here is a more complete example of fetching and displaying profile information, including created dates and labels: + ```php -use Atproto\API\Com\Atrproto\Repo\CreateRecordRequest; use Atproto\Clients\BlueskyClient; -use Atproto\Auth\Strategies\PasswordAuthentication; +use Atproto\API\App\Bsky\Actor\GetProfile; +use Atproto\Resources\App\Bsky\Actor\GetProfileResource; -$client = new BlueskyClient(new CreateRecordRequest); +$client = new BlueskyClient(new GetProfile()); + +$client->authenticate([ + 'identifier' => 'user@example.com', + 'password' => 'password' +]); -$client->setStrategy(new PasswordAuthentication) - ->authenticate([ - 'identifier' => 'user@example.com', - 'password' => 'password' - ]); - -$record = new \Atproto\Builders\Bluesky\RecordBuilder(); +/** @var GetProfileResource $user */ +$user = $client->send(); -$record->addText("Hello World!") - ->addText("") - ->addText("I was sent via BlueskySDK: https://github.com/shahmal1yev/blueskysdk") - ->addCreatedAt(date_format(date_create_from_format("d/m/Y", "08/11/2020"), "c")) - ->addType(); +// Output profile details +echo "Display Name: " . $user->displayName() . "\n"; +echo "Created At: " . $user->createdAt()->toDateTimeString() . "\n"; +echo "Labels: " . implode(', ', $user->labels()->pluck('name')->toArray()) . "\n"; -$client->getRequest() - ->setRecord($record); +// Accessing and iterating over followers +$followers = $user->viewer()->knownFollowers()->followers(); -echo "Record created successfully. URI: {$response->uri}"; +foreach ($followers as $follower) { + echo $follower->displayName() . " followed on " . $follower->createdAt()->format(DATE_ATOM) . "\n"; +} ``` -### Create Record (with blob) -```php -use Atproto\API\Com\Atrproto\Repo\UploadBlobRequest; -use Atproto\Auth\Strategies\PasswordAuthentication; -use Atproto\Clients\BlueskyClient; -use Atproto\API\Com\Atrproto\Repo\CreateRecordRequest; - -$client = new BlueskyClient(new UploadBlobRequest); - -$client->setStrategy(new PasswordAuthentication) - ->authenticate([ - 'identifier' => 'user@example.com', - 'password' => 'password' - ]); - -$client->getRequest() - ->setBlob('/var/www/blueskysdk/assets/file.png') - ->setHeaders([ - 'Content-Type' => $client->getRequest() - ->getBlob() - ->getMimeType() - ]); - -$image = $client->execute(); - -$client->setRequest(new CreateRecordRequest); - -$record = (new \Atproto\Builders\Bluesky\RecordBuilder) - ->addText("Hello World!") - ->addText("") - ->addText("I was sent from 'test BlueskyClient execute method with both UploadBlob and CreateRecord'") - ->addText("") - ->addText("Here are the pictures: ") - ->addImage($image->blob, "Image 1: Alt text") - ->addImage($image->blob, "Image 2: Alt text") - ->addType() - ->addCreatedAt(); - -$client->getRequest() - ->setRecord($record); - -$response = $client->execute(); -``` +### Extending the SDK + +BlueSky SDK is built with extensibility in mind. You can add custom functionality by extending existing classes and +creating your own request and resource types. Follow the structure used in the SDK to maintain consistency. ## Contribution -- If you find any bug or issue, please open an issue. -- If you want to contribute to the code, feel free to submit a pull request. + +We welcome contributions from the community! If you find any bugs or would like to add new features, feel free to: + +- **Open an issue**: Report bugs, request features, or suggest improvements. +- **Submit a pull request**: Contributions to the codebase are welcome. Please follow best practices and ensure that your code adheres to the existing architecture and coding standards. ## License -This project is licensed under the MIT License. For more information, see the LICENSE file. \ No newline at end of file +BlueSky SDK is licensed under the MIT License. See the LICENSE file for full details. \ No newline at end of file diff --git a/assets/file.png b/art/file.png similarity index 100% rename from assets/file.png rename to art/file.png diff --git a/art/logo-small.webp b/art/logo-small.webp new file mode 100644 index 0000000000000000000000000000000000000000..24d77355156e0e005f464d2de7176cfe864e9d1f GIT binary patch literal 16478 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 HtY!cJSYR96 literal 0 HcmV?d00001 diff --git a/art/logo.webp b/art/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..26baa1b5452cf11da98d737fad84fbfca1a48ee2 GIT binary patch literal 199850 zcmV(&K;geqNk&GZ3((2{tR69mY5Rw@4a{aA1r+z-@o(T z3to->pI-iezwSK(b4R29oWpAWqrAW0KY#vi>v=Eff2{vI`=|ah_k-w5jeB+Thu#0k zf4ctN`?2=<{SW-USbJamAN)V-KQz7;JhS%S`QPGy)qm{&ga7~k|K0!kzxBV-d&2&S z{*(UC`VZf)pfBWq(*NQAg#SPPoBdD!|DE63KY4$<|Mq`rJ_7$<|1KkeW6Kci~wzi?*G94`G1%H|Msu`e~5c*XywjQV-Kkc6Jf#wDb=-M(&#Yd|tK+kF8NfC(Kdb1rjfxHQf zkl94%qag`6(Y*nY4(o3CaGAFTSext~b%)%jO2-OPK|lvWp&GuX4n3N&oAU^m>_anH800h_ z3nC%yLExMJcPkq)e_$@cOZZ9$=6Z!}p#Rv45_ut@doOF0XWSMkS1WTl-C@S7)}Zh> zGFunoIH{2SxfL>xoQ#RrG0vkkj%=nr%K#egdNKI0{c(nq=TF!~1Ro`dISy*NIAPE( zqV4NqaCr)eQjd_}G?n59XRNF4!Uk33K$)>4ho5WoR*Q-J)(|!Jhje|t0Z-IwbSmfj z28MQrF0Kff*AZ7Cp8tZj7?mz?ZO=pQqTm_nhaOeV(R!~MLm_F8;8)Td2t;`*Ncg_o|dUpK1qh3^55;SweEDJi=?jWV27U<}J|Bm?O)h>b49**LX7_%S>4wDdvL z>mkRJ`!tiBe*3GL$kEYB!+uR=53?0pJ$p#>i~SBJTZJ*FqpjFT=~ZK^giSu;pxkQ1 zTP`jY+>)7z0*lnH@b?XJC2W2KL*}AFbDs#v1n^2$HQ8vcuL5m*-hRdV#8Tl}<~ZQT zay6t-8z7Ft#Qsd0bbQH1a^SZ7-DcM0P48%e&^4DmoBO+1M+rkN=DNio+#lz1?#0KF z<_mv=(;M+g@c3qyd5lV6@vyyJL>CuK>j5O!#!vmafXg=wvPG(~JsMp$7EVVzu#m|+ zyyiJHRuEHB&Yh9vzvv}_oBnA_wu_F9MB|?nCq%*o%YQJOMcLQDvC>?v!kR^A=s~b3 zNG__=sAHDf|3rG_KBycg)_jxj|M-9wZ|2AbWB)m?Ez3srP37ne_Y;$+S|{cH(o(Eg z>UBg7Rgh^Q`94qmWkt%&;D>iI7c63nRTOBaNcxX?>LHrlsr zlM3^Ap;(WH(^i#=yFKXQ$yO0t{Hdl|U!>>v!^~lXt^M=!xT3je zvW1k>@>r9F2G}#%BSOBP%^S&-E0vCs5tQL35?kmoQl>yn!)~`(LlChW&B5}q_sJ>O zcr{HN-Z8qO=a{8uaq3aIgo6*iB<6agmK-}RV6#xLnFF*=<=dUFZ$=x_9ZavR7_Ht^ zk6({9lAgUzm#Ckao3VqeVnxCJ&<~gTQw*)ZxR8#*_Lza13RLpAG6nS_JS}*&G*Go( z+l1Alk&w)ReC!By6p!euAz^TVnO5PIzy~l{%ngT22M5xjSTluSdSgTZ)F}=Ta77xd zPi!RQV}L`k<^a^ zmTzD4wf?P|H93DTF46_HKL`zY28GpE_;Hpe6%=&WaiBiffQ}&9L}pX;h1;DzdNJr6 z-Gv(!;CcsLksVYu$f`d3;#})}jdW3>j2 zYBdy=WF1U*^A_8(nS&&9(H2lmV4f@;$TK*6jM*SBi!b^KL+p8#TE9R-9wl9t5MHFb z7?2BC?X>O|7Co!&Wt?#}Kl5Bzyl{mbHa%(~Lnh$+J)4|u^$x%ekw4o&aQ^EnrqZ>+ zrNKaMBQRMf33LB9HCQ>pBpHJXfurJ91@vz>^Isi_KQG`@$>&Ma$7H9$AlNB46KYCp zH{MkXJsN^ODR(#k$qOXotCwRVM@!0zVSXNw`e5z4+@7Q&7y_6lM2~xX^W5_iYc}Js z(~cTXwn1+Bv_XO!#>_>f&X?Nx9_~S;Ua!?p>gbOa`8oU9?Ov!f&Mq~6LJ{glJ(LO& zH2`)nN8rMy#Ki1W!nYCQJ#bvdEjMlJC&M2{AFV{c7wTGH7i#$WJ7DkGfi>S3T*{xL zVvi1wFsku1-*#*4=P{B-D_zA!szFziG~lLU<7EPTF7<-2TMW1sCzy(WWe%a(nG=EZ zRAkZ&?n5sIdhhk)=kiu{bVRUe6(i5$k+&MuV0h|k^{&3~y>OBNL+gl#@^^Y8UzAlr z9Tt23qlB&K8Lj&!T4JtQr% z8%w`SF*b+KYsnC$eu2qK3%O1m8=&a@QT`o8pLL5__Ib%AWdj|&_tdj^grE3%Ymsdc zn;Cx$LZvlmelrzW0~)U?-jV;@J;q&6nrkrZ=Gx!G(0H>e)fNDO)2U|YPZM#P?+W2S z7x7jkhtcJFs*{%>$_X_@=dE1aNReaqZA8eu`|>^#}PffUSpd-8Ul#^ z$YyK&?Q6LI|NI#){KUmc1h6Kb5w9&*3YSGLzjWxwCZDR(Tlneo@>tc`#G8lTBKWFj zP2a$A^Uo0M*lyjIRSu;(OU=VUhD$`SfCv(-ucEoR!$O`&doLP>e-}!xBM&mI>HRp* zuKD3=Ts++!5!Ic?RPXM+^tI&+cwa%3D!xDahu*8*Dk?a23?cEC32?*p{L1Yu;wjN+ z-%{3Qw1>d|XX`PmcwdWffS9MEd2QFrup(sdg=cj9@!_53MfkA+&>u(!%Rq4J<2=7F z;_W}IgrLX!*>aJ~Ps^ypJgLYy%R6nvGsfm3N1X7X{ATL}2iw_cBl~>GGppBj1BV%Z z{|bW=$zXS;Cl;1cABZmoYa%AMNL0H+jWsVNHO#doS};rzB3t zT*$1UM&7>77F%Bc$*;QY3o4JNB7?NNXPiU&H;j^DS3;ygcb{p}GwyP;ATd48Yq#eC zm$c|?-;fba*4&T00N`wn+GhX*Ct8NJ_0Rg27On6aYC-!it)~8R3<>dH|2@|!=ICQ( z{&J8qv`LjrTLS<{{%02w*FDR_aFzV;D^h`v%gP8Zt&6Wan7KDV&y*OhPnSzQbxDp@ z+dFauA=b6^3>50Vqi$3UXB8{4ez^-pkHgF9R?xt~U^gL(p4vzef_5Zs`Ibr7ARDJK z@;?wTNPJBNq5{LX(OSqw}t{i`X8r`1O9y*9ZkN^+L8Y^>zX}r)&|6ZFslEf zmnUL0F7>h#i2OFzK7(U@&al$^wJV<^D-H9jGwl@#Ag>~Z-4FD3guC^Dk2uHq919rt z-h-M+sQX$kX{d7Qe3Fe?mFn&0Yp>Q>$PWqy`|D?#+0^fDE0Vn!Zl$~S4bWxH0O#Ur z~`J})?#Ug{fHqH}>0Fg^4p^Rhqd)1Q%xqX^6=FrQlW%MME{l`upvy+3&T zMIq&-FV+&7>E8y%g4j8GJQeiAl>=1g1!n_{j9TvJZRQWCyyb6_n{Te8Iz6>dsDQcU6FZ0%J8oazfHHC*lpzAl2TL`Zpbn9f6Khm2WAbbO~^aEuot z|Bh4tDZ0aAv3=I8g3KlkR$56=pADmX4|+7RKYF9E(v?STCd1PrXT22~zY6s|%o8Mu ztdO@nu7&t6*_lp?n5?Go z>~n9#R=>>;c;tEttzy24T5iw0m-3Nv=2hy{I6-%)C=y6vg8X#Dr)U|JicBgl_OWHQ z=4!un%f}?zun&XzU0&#v$j0@*)a-R$+fxVTedu>6(UZ{p(&&swkIll|7`&*d%p65e z4737nb7f{OnZi8h1Vjn0@a&1%L4G+C<@07AE}Wv1tESy!g%}MwznH_ZFp8(b`arcw(t+y4m~rF%u$1arZ@HrpuA-$g#%ASD zvRl+05q{U+H}B;#Zt!bU6}7|fY|phCx!QKlj}qP2a0G>i&YDp!OO#v`Apr26> zB1A#2migDB&Lac6P>H7fT4w-Bs#)>lYiLT21Pj#nmjw5)x}=?S^r@e)PyAsUYRymX z#aGK7=(g^%w91H*A(eg6k9`^eds}PD1l4m6SW15U%bVfTR=|=AI5&czxi6p-=g0E= zV;W#tHhL+smrS!x+y|#Y`Oq&fRjg&1X_nL(yO5sSg=N2g_|Qg@?t%ch{kVC>!mv~e zH;!WioZN%jL9@tQlh23Hl`-Vn7)Jckjk`pztaXAs!1zb~`F1LWcUkq2ZPFg*%uhUB zr;MHKVW;pV+=9`CIq)A>Gc1lV`tLY?ba;g^R4f4l)X41L!&P2d69y7ZxoYyfq zK+kIzfK$(GiNSJyG`!Y!W$^>6rC*!0&~NlYanm&v?V2m`kFtZKfN%4P4ILiiHcz?x ze;6EBQfm0S*sGHZYIyU81-KCQ$hkjI)pZvG3rEwA5-Uq{3U)ab79fWG>-zf)h9wr) ztq4hZr+FZ+G&fWonh&E)OmYPY6kVd+BGHB%MnfFHH;Uk0sZfST#fJ(A40f%}=COt4 zY~#T&C2(@h`^(&Aq@Y2uzhB)0R_o}<-_CF_CQm-mmOauNv-u1+L+-Th>Syf_MjXu2MUg)oO&vsbW zQhJb#ZeIk2m%RKEK$r8oV&^yQXa-~jc)(aD3XG?o&g9H%YsfpX!F&I}orSTsfWnia z>>z!y%6i+4&0C}*gteX_^XUn^;PW^l2*3Z4qf8b+)z}R;7tPrjtM{yFl?Gn znM%-4Ck@F3^*#0j`6E*IRjxFBhV*JOI%&J*u|xI+NPZZ$KJK`;1XI0d%raXRZ;IQB zt``T*XGyTri*y$jMH;f0&vJ_f*=17HMqP_`eS=H6;w^K)>d8wT+-lQ&zMTBhic$qX zy`eGG%JO}V;w&b=_!B#we~xHloZ1xO)hnntui+tDMBh}1j`}lLBVuvjp2R(wP1Rl{ zH7H;byT`^fq!~nHoo=ng+M9OYeN{#W{3uv|!mju6hqRwj2f{YyO6jxwZ6?b2T*42!pYw1PbKWoVETe!GDR9h1t z7`uLtbJ{UvdE$74z`X%S{=E6dIqVK}r|Cqi5(~T6^{U%n1BSLe;fdGmN@b2mqkMhK zMb~@}<9J+v9hNf->(oY(4Mu_<-7lKSLMRwaVqRqxzhzHBzEs>|S_WyX`z47H!?YR7 zc{v=0gpmwUSRT!ngea&qQa=Btv7^O5z5LyT{A4I6tFvqNkFi3X^bT6|dviW}j@zsg zq0!+bE^Hyop#4U9!D>eJ3W^sdIDp|e8ggZ9IdGI540!)X}ZPx@iEZ46Wl5zuS1_3zAjS^}pnZNrAYfpZ=FZzWQ+KaQ*qA!?uFr1b=H;bFB^St@f-&K2Aju5I za!=09N-nD)2Yj;M;jTJ_7F(K6rE~~Gq_u@27><7+++qgm$wh#(l7IUCI!0LN4H8C^ z92eA}`dZjTdE95>M%iLBVrMAIApG4Lpqrusw}j341GT)3OaV=RXZg&TLKxSQH> zCLWs}%&UK1Y64*Fx=4 zt7oD7L9N5JTdEFZqn$^+J+5)ADg3&j4b}m%^K*}MvrkZS?7DKx=!ZZ)i|C9Bi88*j zhwU=6`F5r`3S$>+C!T$xjvWE){V506mkIL53$!xyarE`t0pAnwMFsYjGAoACwV?z% z9(@a9o2NX^A;a0z-_guCMb#Pih*yo`)m*id=tm(DG-|a!^Uhm=E23TmJSr5F-aF$l z9UhFAis2lku!1+KU27|Kfg;`AkLU{FLzfp&Tyf%4as{r`9LNhr9FdjX$Pd(pPf;H; zrhWJhTnl6>o5c7)49ht6y2!gb{F5r6c|h+MB)2^xvW&a9f63UKf+t*SGu6-bC#>3n z%t%T`+y%X%u$-E2_mM0r?>Ff*Z4|x3Y#Y-(#6kw3c&9wRQ&i|$PFn8;B0ym9t_RqM zzQM8McyNH_CD$o8GhW7MMn)q06c#mH6WJ;WaY<=7AfPm;?c8dahf}Rv&N2 z1{l5Kjkp!I*~j~H?vlz~CJl6F&@|l}u%jNn+V1%+VWPhzQr}sS*iGY;n2{WPp&~st zOND)wIj2KDGRqYpRjrm3witfCWjT|(3;fs`RcTVIBnVu*w1knLzU3Q_N?N589`|Y# z*={Z-SHBtNC#%U^$vak%)`@_qH^*p*L0^$(bVU;BDT)?UxGzC_3C1uCuVry{yPPXi zzy&Qf*RUgWJEI^EX=ryLmBsdyaVhY(onrQ(y2Hay&^H|3Dec<+WGI*${W@TCb=b20 zTB0cRrvmd?p_vHKZ@2F*lUk4gxUK(jOJk7K!uPmlaQ?8;j2pKR*Y3K%v> zB>yUz&75!I9uzUwoOH?pCFq|Ek3{*_urzwNRR62{Ew!6R@$eI0~-v50v*|{%DUnF=(Rc6jU-2+UnD*0DwQ)K1(NU8nK+AG{qjS zA(}qA*?5p1?=$FDY)Mn<&RivNQm(b{6;^g&G%ZUyzS-Hyl=C($y!)LXHe5lLMjll4 z=AOz2m+5#gE&>g{10`V(;L6A-KKIO zw}+avo?@FLybZ&i{l(0ypPlNu!^910;}vuIK(#|GHKA&vIBqUiS$hK1;BLJx36FO& zJgzEySXAmQlNt!6<4`j0RB*!lw0ytd+I>o6O^2n+zjoCKOd_*_6JU?KC9rP+zPiYM ze8Z^`qk<^Yn6>JM8DskmD2h)$J{2P0j?y4US=6`Dp;+=5M;~18B(dgh=mDv^10&-eew;=7ESIW2Eujn0;DQXSn_P_v#aWYCSH+i z*cfpOL1aEe@5TP!a79#U|@Kl1 zn3{(1+)!M-s^FNR#XtQ?1KAu3FNGpW-peyBE+`T`ay^06A(@}j(N#Xmy-{}tby#dpHqEa#uz{9$N;3{b7L zanS%pX{AV!hV3u;F2Wr-yl=CbAKpv^$n&KJi%>okW&uy)n8f+^@6YhOEFY_pQ<=Wc zF9l(-ARH+Ie@zE3PZ|057)!<9h!pk(ZyHd*H7$1F5_RS8I{mn3`+RS+e&w!k1Z2Gk z%`uVDHfvsU>47QuIT|A*H;%*MulepvsG_d*O(y#Kb^mu5P)~l2V^4qn_tC+QJ0gQ7Q%U52 zJbys#7g!c~Z>aL^B=x*mmS4p5*QBN6(0{@2{q$XMFe1@awk?up7)%&&F3b>5k{qUs?}mVYo*It}v6-FK)ceu|nc30`^amHcWN@A1;r z{nu5ufL+C8)BUi;qqXYc-!1KmQbhQr6fDKqp1>y^L0L!%Kv4eD=4V8>B&fQ-!7$?F z<1hWRGB#xtzCw};5xPo0j2tog^NWGGU6C6l*#KBIHr#@fVTKW?xNLX7>)5ABtCjYs zR?WXSIqDHr^4m1UZ zYRkH-W3M{bc!JYZ6`=CJ96OF4VUw^$4B;wJhnE!*DUJ=NEnTlH&6B?|iP1CFda7Rp zRR6J$floq6%>1J;qiXSHW5!^&LlB;X>5oDh)20m#>E?ZNsZbdC~Qt&zAc zcw?Zd;p0^RDRbyIE3IHLT=>MIBIaxH_`+?{CWwSU)r>kJpM3eMgfR%hLP&ahItTpq z8NuA5#OpjF2_x5QG@49@gpIGvn<^`8@AOuBq=G?BD_*;eVi|FKfBcT&bb?|6Krm#z4fuHVvM%_m|At zm4_;2-Zk_0CgO#wAZ{F3iH`&IDr_%+@KxpmY_1ZG()Zb~^9S`~&tmWw_s2bpeYQ_s zkOr{sr2)S#p=VKYfl=EXBVbJ+FiODbChvh%UCC6vXMrI~b}^_54=I5I0LzcHF&!Xf z;16xGnb5`QdpcHp=9VbE-b~qZ`6=lgLyxeG8kt!Ni2Zv$KQ=idX$d2gVPq;R_$inb z`QYi{c;ESr@+PN)f0Bw3BhfBRSoYtP2bq;ey-hntDRT)cFgU{4?0H@2>2d2f#I2>T zEeb_8pa)eFDUqdT5n40%GPx}aD#KAWE8(9#4&NcQL2Zum8f!>ow0VJ+SiE3cCuo!} zA|@6DpB-A{W5TIO7t^(|K5PEc45o66FHvUd;Cw&Ihrol~o|+TP;*(h!-4iGsC110( zzYs1U3N21^yMf0MPdt_JWG0e`WKk>M#F&UIZfl`^J_lqQ!M>|u^)^qOGq0mJS?T6o zWt09L^?Fo??7viEGN16OJxFhpbWnX`A82)%LGi(I*CMTOBRO1Nq4dqwu;Jv*;`7v8qO)^tm$y^$zL^=FyV}60 zN}mZE?F?y-roPb>^WT)HlwmV_hD+5av53giQTD^r$RtITl-yRQ4UA4UL*;;gtKME9 z{Df3-5SP#{6Dap+gLtg)k)qa}iaHCWWA8DwHMfG)f|yhk)Q65|z6C%bylt7k%OUpY zG9)wJ&w-_(fVs8+G#78ZE4z-O&U?vwLW3>Zdx|h=)cAS`L`ja{BF}*4K;?5mkTT71 z(1T4v))(_}&bxs2lEdR6ol<>RJTguRNb1w_=#zhjYCfsE!CZCX#NoKCA;~PlV4$`) zukZtrtU_B$);6xy%RXZukhxE>O&AZAF%rwLzmCVyN}>6ar*MeZtn?#IOu z`QB`$u*n}s_-lgGAqPJ*n#Eeet?#9B|4lsegSRa4uh&A}F=F@27k?7fyT=Y37m`I0 z$715%dxw(Qi%h~RTlEZMQcAc9nRou>k8JItD#DxZ6Am}xPO8@|otyt!UB4+RStOw^ zGu4%Kgl?z~E%gK!it)j%qe?>yqfZU!(51V1GY+<09{+^q99u~AQpgZXcqgk9`Ynw1nZEqP!oz?FcjUp1Iy{cJvGlWw=L-I0iWpCh8GiCreF?I!;tBrZCgc6QO z`F9SCG9vz^d=#K6M9Xrd@v}DA_5)M`hNeJK*w&JFQ4vy@Xph3{nsOK4JSTffiy^w= z%T|J68Uihpd>J`rWD*kI)V+QiP=b}@^>3tG2MQN zekU_KuSpz7(1!|Ws+>cM?8t8_rSu$5vgsUbEw&9z0V=DL(m&JQ^pr6$zCRUuuFo$y zyeWtElIXWTBKvrYQ4s2VbJFWjsqBQDGDNk2vOS4-88$h9it_>V?;2~zp+gNiTFreu z21J8%KEs(z5V-#8VH_tj7JYT1#D%$3P_4{(RY@%#4`S#z8!0qkk}Fh#B5g4yP8Hkvd5zqJW4+ z6eN&k`i&Fuv7_pAZ^2M>1Ppmh#@@z)jlaN8hL;U^6|$k#{2RZ$Y^X&R)B?Vi^>KI* z*!06N(x^CPY!nF6BF~=qDeGnys^Yvl`~%EAN9C-_V8fi^{vV_%7#@_~aS&)e;r+#_ zqiX)5sEByF1OKk;1EH6#)EE!UcU95c;;+hOy4*_ltId08VVKE3{ zPWX!dp*B7>i>b0o>ZKhHbD-u)Df$ii|FnOqRt`uk>LsIjxc>MI+H4`MJQ1m)amt*E z*bL%&a_5kh*K+@iR_RIKcK<95gZphDQ5q40rv|BkQ_iL!!RxqGhQBTa&1QzuzsXCb zIRt=*?gcV*oQey_(RhuhWBL$PU1eVEhL+WOkpyEBRNw^b@c7f`PCNIoV6Fnyy}aqoC$OphOL|l1i-loT5?}z;{r|` z`p5~0lf@dNog~G$8ZNMH$lOUg(YMLgpAF4VJ^Gf$2tq6Gt)C@_B-_^R?d<^yPsxg2 zC1e;pTLk0|!0J#c8)tx!TU((gtk3OpFz_+`!63HwekIyP?+3-6X$MVQ4*r45@f$yR z_2bHyS7&10J~}o#pxA6;9}O3HUhHY%?Y@&u-%wv)lKVNVu@NSk1Zv7;!vJ||F3^!{ z@Qp=5ueD%jqsHtVMdM!O$c(FTQbv!k)QSAcGq173Dk+)Vg>F-=X+hJ-G|<&Xue(jx zQDfH4630q!G#$`gB;}g6JdQ3_SCgPtzz`~k_8S?}&$UL!EX#)V;9xKgOv#tOuCWOt z1ekR95_lS!Y)A3B=5--|pZIz@XX0;i~3JOt9{LXi4WVJ4^I3vIPx7dW2he3qO#ne2N z?1VJs2+*YK81gXALP;=ksM}E8k7h4hHftFsT9RJjPRH%JW%9d3uAH?YTv zT(x?10~vIQ&0jX>cp+k?*s*1%>%9faNA1sV=v*@{J@4Xwj|VP*+=`JiMen964w3wZ z^$XLeQo7W2M1=@t@0xkW(`f#5Io~U5>H_BZ*m!MS0reY zYppbU;jaxja1;hF$lO6y%w77<{VYGg0~EY7s9FV9*p$L#+h$wX=N zy|vT512jD%0B?l8mit z-ux_EBp1Z2BSwephyAq|)RcXoraYxKUur7e+ND}F3#1eF@?Pd*7O>%#Si*>w*ER%U z;U&~~m>K@;abKospK)|3{KJB#b|)mNoLtG_?}RG}0X=+Km~ZO@`|xzZp&6bf zv#rcYst1W0bn#=AgX>3=c&PoNEDG`JX|A?4Q#GQc*zQMb63=rH{#XtYhqPcWymh)x z)|E`%&D<%GtM2Qvrx?)|59E;w(%?_I<7j^G^uewm!&;OG5^-6_eTmx zbBYG^7lz_^QetpzRB9E!V;kU|u<7fBjHS19VS!faXvjzy-P<0Q8lT;3?0*f>)Fsmi zxr2D*+$@V8=eFQm2d_13QHOaRke^Kvel1?7?AQ-6G38{I{%))W&#^{dW zIr7>=%WLYYPpYg^mx;;mE3#?t52l9ygj0&!)8_nWTu;lT>K?0rlCE#uKhRjOXwjiL zPZMl1PI<5Z!s_Yl(rsJy&^+CLcvaui6~~t}U;X*9@m*|rF43LbKd0F39@g*7x?C`e z7C%I~e$g~a_AYw=Wm{1|W(kFV4(X7Riuq9us`pY>?S#h7ghJ@+wRVJ#KcEcg%{?ZQ z8mkl3TsTV?_o-~ePo)DQxF>^J54&l8TEyG2V4p4_t)0VtV<7I*inu~`=`e{HkuEtJ zB_k}`>$I+>*zC*nzpUmXlv$nAcV`)y(yR^$-Jf8dD#eEowU zYJ<}fL$S1#2Q%&dlN+DyPmG-;r@_9PPU2QK^=Rw!7RdNQ%(N(8#0u;09a2*}ByOq} z867J1Ts(@Hck73qW)#q5YO1@7K^V9_{h5?$`*T>g z@0>^rq45-&hlH+9dvYu?H9lyXU#Y{()E+ZBq%r!yCbh?+1%03?GFmse(_;d2dImY)5G>{PKGdh!vJSEn2t8tY ztPuQGXNNuUqM#0@HQA?iu~rRxq=nldKzuB_6Z@MyNV?lE6+VhSz$~*?Qz5_L?%bYbsI_f%7u{ zc^8?@7>*jjR0|CCLRkt=>EfIEZR&mvX(wPbfO1vs7%`80CD`|SmVl7GQrthyzU32p zFo>!l%T=A8vb*vN!x247ANP(n6Qc0DKCh~YV0hh3X9)5=;RGaMWYU8UoI|we5wZ(p z&206=uIRryO7xzU{$zzY(pR*sJu?MC#K=N~*B^548h`-)rgTp*Lzujqbs}~L{4rfv zxm>AB=3n^GwDv-gT82meHEZji*DD=5e!OZ-EFo{`9N9IU8&BF8VFtxfz*gz%H?Ut< zGCI;Zyn5G!Zjf;dNrnWYXag`^coHVRb_cQ+{!608 z+jELNQ*@hGT6chQPy`_E3D)57nY^gHlh2CyC;Bt2OM0v_A1GY{w>+a$}&O^ zle>60$mOhXASGJ{18+@Jw`XVdco~^)3KwTGb)cCh@6|3>!sWo;X z*_#Xb=r?-bF0iiB{+VI2=%1SOc1|S=xU%Z5!KW+;eoQ$kWX}u z!GU9TDPK{7G{JQuTP;FAqR8Y>>^QQ3Z46G%hh8Dz5u#zd21ptpWPm)jZ?La`q<3hf zPLgd%PU^0QyM_@L{YVtWh8WZJNA`LR5;vU#h;R_z#^Gk~iaow96*_&MD*Bs`0liOy z%aM5Eg7y%aUpxdCU9Q^h%(jKUrHbjfY8tB%!CyX+y#MJx0iLh!=iq|R-6DU>hiHRq>+#Yle`P# zZ!T~6(?U~Hf2`fdXg5OXrh*4lS!XH-4((XMk>d=kS|-D<5MLl<=k%3c_mNU9a2OW! z9N^&*ezvo}R5;YuR7zldqM=%1_H%^C){)SW0D1lZashoJ+9(xfren(6>#;R|qp!c5 z;Oz0IR#rrP6iRPUiLIG%3hE-}nKDkkryO2Ww+EGF5R5nq{8sW2`QV`3x7&+t0@}S0 z!uL=paInm@3G0p;XV-C=biS;=art%3;fU$!-^VZ1UwNgzJFXwr_zMi^@;(9r!>hoS zHvmsaqAlECrQr19bn`wjCBfWL_x0m8(os1tBFk4kYS#Je0;Y(?RyJczQ&>B^ZlE3< z*}`(}I;^vdlSBQ+h4vvu5By$=@r7T7_G&)&&nh9o-HpDEssGQ-l6OZhccN|VS#$bm zK;B%<4aFhJ=&?ctQnjZy_E3QQ6>u#F$%kXfo<(3l&>8&E!#3eKF-&;L;qkbtp>$m` z#|Y7P6@iuP90l>x;H7VFovE1VN)#SJaE-5SV_AjKLR@b>fVwLp4b8H}yeT`PA-0Oj zo`N-%;h|9)HM-U}}Or&|t;>UZT~O@bl# z!&pFd*5;5E21tNbcx?3Yd^#I(ox#IfH(3#Yxv+)KrS`(jy2!(AhO3=xiSRL0@a-4| zKT1pN38kBhy!*@R9{yYW`u7PsKOJp2B{|y2o{-T8r1lA2;#Ce$SFk#3Bk(uVdq-Cl4s!xB(sHo ztN@6(vEcqd(C7e%mnjop^w6ET%wMvf3Af&{rYz4Z@37@G6#Tf)y$yOdGumn$JBR z%nmL+zad!eXmN*yY1|`sXw=;Yl9UnU-N;dDB%-rH$2XKOa zek5Myh%;u+xRNSmjd#M2+{UTuViVb9@tlgA?(6+to4(ZeH@ zpAI=4q&4De#TeOYs*5LhP13-{z+NmqoNmJ?z8kssHO?!JrE(Lv>f*ALu`u4>U)o1> zzn-h;o>L&@eXpLLJiTD@hF=k}@!jWEaIs8S?>wowBu@}ey;hDH)4}l29 z!ISH{*2G}Q*^*=#cr=eqBSraA(g;%;m#VmNjJogQBNMBq7a3102>>xb&cCY@DY5(n zlS3=D-3x+Ydd*qO3%|Pl;qx_Esi+rde z*M1<4n7{IS?;Qzk%4z*WgfZ+{m#B(9q+pgIsXfD(Et=)&cHFj+ygwjyIGzJbr>#bY zo^P>pTfFWkbUalDY?uMrSAMRJpE}+OC{|)vqbcct%KlOWrI`ZZ?-h9CiM9S`jBPH2&l&Py6-Sj92_VUMb}s7e(b^nt$_y+8E?Uh%8xhZdtY* zgysAtz3++EFb(w##o$!){8^CoU62rQ~i~ z72QIL#fdv+6+mO!WD4Kp6Ey*Mq2Q4=oz`sRnlVW1gUaqpC>hJpNUxdPkG2%L#3}Y_ zN$Z#mJ3>Awl6XAS+wXS9gY4GMjo@))sv}m-z=Z_!12F@SwbTL!8kyzunWgg3Eet6B zB=W;u<*w%p%FJ{wwIQA$q~@`L10f7QiO)4=+Cmi#pXph?3C5-Qh}X0ubJs7RKEsZu z7gyihrQ%u%bc6j(0SR1Y_E(y{hBlS%wiI~A$pLV!;Ow8j)Xq!w)DkwHl>^ISz(Ghr zy3tW}G&Zq#;~E%euoGw=A!35QP#@kFqJvqZayI+9ze+enPwL-jLV~{YkXxt+ARYL= zBi>nBXe;)JtA!*#bg26GGU}e$)|0+&uE38H(Vy(TwAPb{EdmnFv=vJLM=}bS6b?u( zF__ny>At5Kz#XU7M{!U%iAE2QfI^fo24`^Rny{n((B#%l#x3S)_JR*i>U(0(_F?wi zq-g4B&B>r8i_U{bc)w6YG7mMQY;DDoXwWW3H}Yd>Rjr6MB`81yfJ{3ZWztymzdtzF|dwg`q(Sy%xKiffI)rp z;G)4y!r34Y87#lu&0!#*VkCtVpT<=r8c!S7MNo3=xA11BYAexZRfq?Ov*wLpV2id-B z2S=6q1VVbDSbx8v9_N7463`6XL4nka@Wf_Zz_SaseGqCZugVsjnsCU$TjD-`C=wsI z3u}UKekL&+97y?Emi(?8J$NhN8@L4o%g^CEImgWo9Fr!T72Rpl>NCrNdd4RNBM0D> zQ;qxsbn1?jr-IRQ=35**Uz?=w4z~oK1iwj;Dk$^nNEXSkH$;=-jWx#iT?au}ytOS$ zG^oNLx$Tc}Ao%yaR3&F4q4aa}24ZS$X&QA@kO(T2S{?f8BoNHJ*ebANdP|)uiArB4 zm_ILYEfJa>3X0xJnC76a?$Q8Bf_~$!_zkwLxcQh8GSQVygB1obPQTnXCPq~5Y)qm* zvXJm|n<<(@x(USl`z|mWOsgdb*&XxG?i8XI(cRomw5tjA$NptJ(F}hlk-;ryW9*v> z{c0x_>`YFK997_{aak?rqVST z>)8s|ibSZ>illq3knBX3UP8$5Vh9ER4aQ;c5m)VNl8PA)Gj0Y z>E-6**K+nC`1&@9h!CE$(Lir#SLEs&8}H!>h1~m)gK68MV0SF1@aYE6Zv92!naVDB+7z%=DYXZT^W+T3cX(&?>k1 zCDK9gB~x*kZ=;0Be9E3CA*3mGn~)}v>If~IQL>`JdkPvKgMM3Mx?JofbYb1YW$%QZ z1Z{A>i=KarlCkoj{wVXeQU+s4o93i=Mupn|i{Hbc^jF9#5EyiW#McDsx311e0ZQUN7qRQ>|L>;i9Jn>+A;2xeCfO~ z2@(I4xdU;aTNQ4E&Dqv^;WAC5K#{jCVr-M{~g*ZVOn$M|Lz1y;}(@OmdFV^I#RL>m2|ABFL^K9B06 z_va(1F#vmPwzQYxakj33DNHK)Ulf^a#14p)R2bH}F=(bk=<>=T#n;Wzho`;MW|Pjx^D6h~ zSXgRR<>>qNqOdW--K^2&p8a)jLdCyGd#NFP_>ttoug zdVGElr{Hu{$woTU;H1e+R}Z39P=NYb0EBJyYjrY`?85c7H7iwv_I3YD=HjEN^NhmjUM9wo?^^ze`9;)=)pqn(FW8Kfoz8 zdawoCmaIQhX$=Y8?cK6W7k`*Uq7@{Ny6ll$EAwS594PigjzM4g4J5r14*kfX81L`nwBdXyHv9&a2*;u{SpgIU!&#+2?+m^TWZ<5Mx znI(CMvmw{{$Kz2n&d16><^Y>{U#`e^BOHjdIUA6Nmq=>7o zrwy9jYKQ`}b%k`xw1w*Wvd^G~P<1cZ@k;Pb1mw8)x~MNz{W%${Mb@#n#B@2E4f)1i z54OiVaCw%=eOA%Ei$gSR2m}sJum+@W2~h&w!PpyAPS48q1f2(zHNcr*nZ(vTGQpF0 z-EozA=l@WrZIws?|0k@jC*2Pym;R$dc*sNNM|2(=i7BSqo2AFi=BkF$9QPvi5*jtW z7yJwp3H&=xAOBm6LRb`)vM4Zm2-ZOZp*OIpf*HO=rUp2*4on9>}H|gU#!iV@@)ypP_u1&^Z>OGc~A0oWgC^tUW^i&RXrP= zqJETU)~!$@;L*JOKHXURnLa<#{C27qbO-p?B5&Op18|o3wI7blALo z@jDHgwh|j`e+FLA$O)8_yQR4z(=JW0+qyjmGh@_d$v#Dg%9u>JRsQ+?m}|*4)BC2^ ztXmG8w*2Di^4~TCRG@Z=XjHxVbJYyGERUw$DG;>q=Z9O_{GFN-z$he@t(gnyk^J0G z{DqIr3p7&C1s0te$a&3{r%%{NB%u7E*or=Gc0JwwBS zH-eEa6k~~Mg#oFbmxwqiddn+?tw>oPy5Xvq$kL-JmA6{L>N@S*t01wH56o4 zOX^`XxU1F4VhvtXegGfd2@sF1_S45FL)9ID2Q)37k$Cpkp%-dr^vVD91xgr;LuEO@ zPnRzk(`m5jU2A2qwI|y1#9Ao`{rX0Yr8!2TM-Y2m;&$-DA+j=rSEYM(vL z?Fd%9+e@q|zvantO!Sp?13t7mDk{sdkt{o#9$@I}RJ2iYl5@ntaz$_vmFh4fum7b?XKq z3Ha1=aPSn=;{7TXj=!OqvZq9BSN=M!wKIne`sW_03zxwI;- zNzt~O5KCakVtBzITBW41n;)Z_>5H6J@pvz9xQPrG&L;v8Q#IzPOIRa4?SCgRG8~gE zOIbP&A=bz^9&4fd*$%Z%cMilhT!RCGUZ?k~H-hCp(6yg(++cB_Q0Go70Ys@?U_P#* zl=5YOZv~HVA+b)90@dpUMEz`>9Pp+t;>CCo6R*RDBYw-INX7e%$Z&jYpEVdNk(3^R z9}c8QTeKo9mnJp8r!)hm|Aqhmzy0fOz$cNtXKundjj%5wU?Oy`CpKDa+AeuS^Whfg z&CX7i8qjLvU9?C-YTpzR)YB_Ap^qJ#cF3CG;Tk z&Gyw2yjo6GHe0hSZbah^3E?}2ffTo>IPKZq8k1Y+%b_RP1POrXW~@Or=XvoudRRi= zVPe)Z=1kOe%nDIH#{a$7ZxbDLgL$)Z!%=3A`Quz@ zgcSCxwONLkW3RHnZ|S_@nEF{&yImtEzOrEikL;6(kcLDJVH_0uX}DdpColj{Y^wv3 zr6AB4QigI~D3Zzx+;$hPa;71elBfesL6%#iUm;Z5QfI%yqRLkue*#G^0!s~FRf}mM z5wJU?JVB{cvJ2K(;Q4hN^dkr{7p8dtL(3UCX~KBT6`Yd?C$Vib>P-pfN%Y2RRaW{( zhr>}Tw-yt^T35H*JUOgVvAsbQ`f1Pm$OHZ0rCiLkT?~9)oC9kDNX8lGQ?_&HAU>)U z^eF9{#nb+yvW}&jNwMH-_5CBdkQ5TrTLeq=RZrx2%7^=UA65I#@lwsa<0tY}^~>GRH7?x@0Cs6)&6Ubl4Vm!_rR?D6^V;+;#B^Z=-GGbC&Q*C~(Z6-D?N>) zZU{R=u(wV3OW&6h_*5+@mihb>fnU#ztnfDRf^I)8Q+e)dN z=KV43^kT^VOHsjBA`Kw{(}N+?^%pIHA9DgzG}H(B;eLYCW}9ip{uW-au!HU5FS?@q z!4@eJaD;ICbDkja9P>-MN-1nlF0};UmOtZ$%^}(z#+s>lcBA?haY4aWv=N@v~}) zfSAVT5wk}Xjcg;}zjESmr;J616Zl*>U+dG)sLElzMsMZ>!LZ8Uo579`5_79AUs$tUM(s7B3B)M^GbEo5oJ8wl1!bS@UDo`4hQmw zRyJ!Y@ayf0%Kzm@hl*6ta;bXIujf}fwmYA6n#Qs78vJgR@_Bg>T)1L6xb^4BJdH!YKN!7Q12U`CmTGx!xFR^Y?JapH_oEMT8gjN+f8ipJw2EhrN9 zl4>jQf}${9m#1(F*e;pmjeC~JGYj}>-9z_LMA-HIeF*Zkw4V-` z@M1cRPCx{3^l#>u>zijZ;t;Bb8$$eI!b@O(E4XFLp5m_m;WA;x&^Sywz?b|8;AfY^ z;I3IA0*BRt9q-+i?R#FtD2f>w6r>ize~B{_1Zn-&u)SEfMw#qIYr2NeKBFbm$)z^c z!>FaLSqlLJf-Z3uT_jDE-O?}{abE~sz~)!!5WOyIXW8s$#j8^0rr_>Kt6(|QuS~8) z)wBq!JjKBZJINv>1r>k)9U?c?TLzyv>chr@M!f<6@+@=GC7|;Fh#wc5t4DXyCtVf{ zdSlnA2T>ZHx}GftUQN5wBOV&9Wvwp%7KL*TC(=|K34za5yVW@Xu657=!DMN&TRw1BXo#1k%tMP+B zJi22eq@4??&_EoTJ!G?zuSw?2sOO5>$E=(g+aT&piE6>0I)Olczqcp@`fuV_`bYQ+ z?ZzTar4e_Rsr6r?W038*F%`B2M+Qbxi1r=E%-~pXzB&27QTonzW4@i|yvjn>tCAvQ zO2S!sPT+2-wsgczPcQ)H^$=-!1vY`-j04@j+1mM>N_p*oy z5L;{nfbHaX1!mNwr*RIHHbs7*jj+=uYX5KO&J~7&-WaWbrT3fn6#kIFV zq+sMa_%Sx)aJ>IEzz34X4FsyQ3@`WE&(B5z^a$LQ0PI1yox%&rsc`ZG-Tymj7yt?} zhQl68y?717c6)bw-Ne996elj)?2u5=tx}@?=fU1XgZ(f*9%fa6%7=IjG4{754fF_a z_}d)Te7_>FXME=$YlaV@hx4hPUpO!e91N=n!e@NN&PWvaL+`Wqajd|wdK@HI{GX7{ zcff)6Z)@`OEvMBfa1{4;0%4O?VsY0D>*p9&A#!(k9fTy!cfG=v-R!XOy;zC$!$wbl zjzQov{dNXdp?0M0S%B;I$N~ctkeoWmnbOF-hWm3jQvSi25QD}MFl95<#en&GUKS1jO~%68=pEZ_(zNX0?SQzawtBurdZlt$D*Zb2&vqM zqc^`|7%=LRe}%wZf5EQT_gRdQq7e-LwOBdd{V&D{7nzHsDxvoN=AK0-P`-8|Hpis; z7g>nsQEn2n!i2Ajd%oAX(Sz%{60KB#Dw_c_iw}381k-8%TZ3I5(!j?uarLMCqXwUH zBSs!*TPpVEbIw_YpPN`zGB7jsP3818Uz*baN-b1bX`?In4AXx!@NpH#_ks{@9Dl2A z1u|~CDQvoLPEjf1^Wu3jbh*>GFDLdcXcQK|*nQlyyx5B6 z06*V@>mtUQ$2H)gIm!h{6*GThCgrQlctHW_2Y(j2F1gT0?(#6ATQ4mS378OnsF4EZ zFL<4!up;<1@rO2Tz_p&dsS^Nl0#(Z10~6N6_{`2ejyHHb82O2&2&TNUc$@Gu@(qCf zdK?vyau|*YI7(2Z^5}$5M9Dt>44MkV%m&-REKJIyO(e`=iCY|wcWl)7cZ}Qv2%eh@8`WV=_x_D>cm?e=LcH)$ZnM*Aq1 z-A}Z{x;^-$FO?WC=J6jph8GS(_K8(J8iZo6KWQ$mmWP+_hq1RNYbt0O+6*cW8{#zx zS!aEt`i$W)T*+-60J*?UD?=?}84;7O(K55x{oZor?zkffbnfKqO%7v`Ys4Izz2Cl^ zM*O{tS20ES=a88ZJnf{b>znanuk--1n2=#Bs~)+p92mbjuwjkffAJB2(gVAYYvyv> z46F^1k;v^s+F(QW7tv+)I60r36d7L|^{29#UqG^Zi33;~fSwPiVcZg_Z*?N|qWxYOia=G=WRJP>PfyXMqhK&#GsG^$ zLVr2M33ErlfE5sq?Mz1f#6BqaI%*Bx8#7a+%vrgoztq{&hZh4VRO+Fe!skl7=8%=5 zH2)!A6f^KEpWg5qrQnx&&Dj1jz-cgOMLYOVO#~@{!r+%)=vw4IkR;fN$^}UoKsJv? zOuLIX5P6q5lSUg(36676Ts;UMTJ`n0e!jg)GZS&QrIcHpRv66Jqy)odI+|JhA~n_s za!iePuzMp)EPy7b`gi?Svbf}-6byssf7&+zW(3tWNu(bNVY4(Qbz;k#;m<{KjBcf< z>uy?Jzc(B9ixj}qYX(pTj-ZqS@uxzPcb_m+bnqyOEhPm<`Gfvho_k-Oyaf%eSqI3B zV_D-rOLu&g=%O2Q_>jwWSXoHMWY&kD+$-pNOe7K2Q54KvmoZU15d-YV0#R;g%U@fU zSK3^6@$MO&9)bEfavS(=&GaJ6YCdNw$P@|bo9-{>4a582CXCPkt~E`I`5BJ&NX6uk zn7oOQ?0U%)Tdr6H;^3}fxzP~UsNj<;9Phy~9%b&EI(u6nT8jAzGtyq*BV_4>`G)x< z1-SS|g||Ged1!e_mgY#mz>)3!nn4#k2!Y8`V4F$01l{_UELO}m`nZ{bnMVLm{QU_VsY3(0v-CFotg`-FViR8htBWN{IUXp{h zu-TbNNl2x_=EhiZDvC3P4d+Ga?wWcq-X#{I|0Iv=m+(v*!vEXdz2{XoNy-2kRFE2g z%f8J$P!N_BtC?Th&UN)+9rKEpZE9oU?y8$=J=Ll(4WZ$0gkz6MYMp2|vSnKKdz=KP zSf9H6Z?K5-p{{4~r_MJ+i6Q;~g-n!MlgW1oI;t)ABj#Bee0l9OS1YmJq9{NU#^@Pr zha!~=W1+&3K?($dyWG%FPI-$_E4!H?9qB+vtD}{PS^N;bCbjCT}J3s62vGXjM}%n{7}Qb?-KcL=E%eG^yU70E(@P$^hlHMmDj%ZEj#n zHFeu!UCt7ZgoV(%6!qhA235LpM)!ZgYOcp?HN`F*^tJg*CiO^_h-$;JDN`Pf@RN8Aj(L(co?O;wmp6GpQ^VDt*Nmtl)*S zK@sDi^{*3wb0BRizz&CLBBxr6RDii_OY9i~BPI*|@WyfZSz4?@lwbxlpO|>-1%f@B z;TsY{ZUL&PQz=3sW!Hw0{JtyL%))XJtg`I_W)ZbdQG_ISR1$%xu1TqZ2X>banPw*F zbYo0+hs7ic55|;$QSL*s^w#z4N9jm+9z@1Si1cT{LYRD^dRJV?B0KDh0pKD61q zJ$z2h;8=-in&On0k2_=#vSHE}kSL1Hg@({=pA?R93I^ntW`C!6mnPUA6$!$cRGYp6 z&9uSUq$$)$>~;un7d3@i9KNJHVU8+bXDu!a*;0UKcKMtM0np*Nh7)p;K!TKb&4W02 z2+=BWuRJ#cMJd&U<9y`f{Ph)C03Dp}jWk_0T9gEb z(kU$=KYmV1D6_K$8xMY~e!f5Yk4R06(H$;X%&?(`RX8^l88h5g2gYA`{C5<_J}x`&m4yk$qr)u#}*rE z?CPVoMU>;->OnH3Z7M6ut{)T*4}jjFq&o*G>O@w7VZ!8^%c~aSBCT_C=wwoD0nk{b ziTj6hALPf2t6zlKD~*q}M=&OiRw*Hn$9i5KDX8zCG>`QT-ve6VZx^3Z>SCs#h}mj| z>Y{)Dm=w zAi%W&3#~ypcZMFB8oLLg9PCJ{MvDEY;!r&W@`tl{f)WiGBcvC4*4Q5ocAm34bQ~e3Ksf^v= z%^a<6=%>ZpdGUNQ7&UXLyOq32&xtUbj^5~&lfPjFZT$M(bMJ8*K4G;*rtz#@^`}l2 zIhBcd)#=@FWxAFL^hA1+$x7W&MNO@~v8Mg~d;Qa_R8TAqTIee1TJ`K+nX=scGJbRW zgr%dlS(I3JnA{>CUOpKnkYF`dK994^_% zyQnvazA8hh3Aj1K0IbAzI!6gx)E1v1b(TJ$%NCTYQ4u64i(Lv*czlKMi-lK~WB0>a zByK7#p(1%0mshYlt;kkz*8Eq@Vof5#|GZM*Rp3K>CvXgu5NmmInOH?Ye!rel$zG?; zRN4cUqIC8^plb1O{8>z203X*sCc`%;C@X+w+*UU@+&2Yv1*y6N?6r!~cUXLFzOC-h zfeps=h*OP)>w_dw5Vf6upl*jnBUUK%!i+h@vIr5fPzm$1m&4$L5IPTn(^vDzkeXZ-fKIsUZN# z<=GI`eJ{sE`>cmmF)W@IRop^IPlhB!G@&RZ8UdYfn$udQ@u@@Q;^9Nof)9(!*{0e}pY@7O@T})dk^q_Ptyp^!H+Qk` zh70>tI1Fcl2HV5uYUevWi7KwyWP12QK>&U)!TEaRVx6j|T#j*2?6j1poBwznw2vq3 z!U*ntttmQTe1Cydal)Fn!dL=cf*@gXv| zQ)J4HRkpfQDr10M@+ijHORg1sULsu_SS#ilpnRXq2ISVKUInHuu)j+j6sRrA&4fTa z+N&T{90`lfY^VCtnM8r8ApA*V34LqicG2hF@e~+IIj26}BBJ8DOc%poa*WmF1E(P! zQ2NbikW)4NPh;KHEIoP=63E<=&PQ?<^9A3HOxS}@EQW_k+NC46tg~{gh8PFqC|VN= z9-_kKJ-`L(AF9nvCPxWf9ZuM~o3!=j-=ynF#B3yTjdUMm4P=5CRhk-zRM%YdF5sKI z0z59c*0Ek+-zR$6?IgBJ=hE1E_{^fxEse{a^4It$$U-Q+t$jK*bgd1zRimpHEL#mA zymu{E`DMQBp#K3eC(lOWiOn4?P{QC7kA`HCpx8Qb=3VUFhGJnZK;a^`qHPh9Y!P_D zr@4`3elQh#_l)XR+SIe!AfK`Bfn@|oV=Ry!jq6#AR zCksj8q;X~hN$*VbHwNilindp}B9-!o9=#oz?U zw8qs0!l84`hc+PTMFly-L^YbsVUK`$O8zZxDmZ)%ga=YEdy@Gt4O7mRctW7`COb>W z`X_03D*M$^^H?hjEwECzy}0e7Fb5&Ir;_el{QM^jWQbfO{z4qXju5ugFAMpnweD@4 zKP(oD&HWaE_mZUq<%I8}l~eF6Y$I_nj~%dio39v@&v6tf2og|=*LRtUT!^l%EDqC? zIL?R+t!LM;{e-l$nhJ{}2`uLQ5y=9y@kInHWn8zr4xx;h5|hbi0qlWN!gn=dWfG!| zk@w6mkA^B#B)De7?9P|qQpE7jVdO2!_rY>TnGYf=;JHO(6wOU4et+^t9v( z6F{AXfr$l?{cL8w3Z8fqlhJ%n<`^Wj?=@w-WjKE*V`v$Y`n5gEsCp@<%NQJ1yjj_v z9K*Mn)#V5TNB~5LU$lU&MN!>#;vK$eU1{iZJ=wm2IwFvMo4Prs+H7FZ?<>TU{bb`L zqF{WaU_z^zSCGp}&>MqzPwVR#1Q@0p{7Jrd$@_GYvV<2hPd}m_S^-(64y%9iKK;5y zfW}#5`2*to{22yKPTrB-5rP@%b}CVK0V@ooUA2$?p4^3toe{3oNE#Zg#K9c%t%X$d-6!5oX+lQ{aai=Q{sH&;HHW%$y;1bPx423UpP~ zIeGD^dp3^%HIM?)n;ki4Ws0z-EH$x)o_gS8bPba79CvgT`LrO-tQ6H(t}ekc${IBI z>kz$WNi&p>PRWLuSqwl(w$dxBx+Ln<7~Q#c(Ik~J4Uz|8g-nT{yDib-H=KMA%Tp|9 zZ`umCD{!rMydAxB-W$qgI)028XAYCwTHXwGAyQo~M#@AnU>+O!7Np27GvqHGPh*t^ z(m1m00$NN4{Hw=HCR0zCn3mg$qQ71-$$=wNN{%aE=?ls^d`w19XH)}L!w@fqW%_R( z*oh-{oZzb49;Sa^ zBw!|Xp-T)mjMfsAx-$vp8kBtC2stGUQ2$!ux`eV^Z+^l(>|sr5wRpbf^V13q+BJNx zx@;6-2+S>xuzVdaBMX^!DEbS*-mD&{@tS%c1CJ|ou|K+GzAG&;Xid+a^OimuJo2^G zQHiMciZx@hi@?49_kt`b{B`S~g7H!K*8hax+hbv8VK|WIq`s!g%F{MujdB%JJsGQ~ zrW~dYim(dUNR<+k*w|!A*x^OZYScPf*UvWQWncidRpqX^Ogdr%rhTM>eFmqwIPp%Y zWh69kzy@P~(;9kR`gV{xFVF56HL&{&TX@Vx6JI2WV$yP(T3BW4rKP|W&-A4kXkz}zD_UV!&%{` z%j>?HW&9pk?Z9tj7@P{M+}m`+=B^_$K#+#Kkj$vnlr~W4K-dKYM1w6E6l~UT!7W`| zazeRs!s(^RxL`=fJp#~Ci_{-m*sC!(N1KZ||h~5>2a}wV3q}81z z3R^h+bIQNuX7Hf~bTH0;F*&NZ$=~eczQ;D4%WT6ERmr3b`I$!0=X|{zLsWaa#;TNR zz1R4LvGyu!0@%HH2Tcvs7X|W62GI|}G7_jbw99pnQT8PXUXAg4Q40j<7^BXsoUf|QLTW!i)o`#Os_y7 zZ~rQ9zw8*;QRF?EMJ>LgQxm}tAG-U$+-47?Bw!5&s`hUg+5Z&>f2gnz!^M|=Yro&k z5Vd&;+-sXIjkj<{<97CAOA0ATSnh|@o|iYt2&}mXG9NW`0%cCoR*zx7WPoF$wnwlp z-=OxBtH*A7o)yDPeFMW8h! zetScVuaqe>D?Qh8dquVh^D zC}U6oQ67JG$$H>g7*y=le_#?4{Tq%sy}bMQsC6(@Uk8dF@8eKTU*U zh$R08zx2w}IJjdWB}DckK>JGQC^LS&*0q}+Vr6xGAj_}bk$A`?L&|-W&(h|TbG$Gq zdiZR&+5^l>F2iY!tY*-Ae6L{d{x)g{7o@_$t@?B#_k{%m)@q<*S&OihwI%au6o|tZ zxEOVTF;MHG@;%G{zG^;iRN8CD(88g^ArZ6Pwq#}jsoHdiQQd;k3!<;TfzW|kcK-B5 zpN+!Z*g;hrPZci8~_Xg3iDl+M|P_W!wS=&2iXrKzB70^ zhoM_N`eO6+>eV1Vfq-2CRMvH!6s`lQAinB-AySE-BJ5$x;vhEyl7u?=;xMjj|li)87Rl0W1WBccU z*8gLfBRi#jd|Z| zwfl6a2VI=ACT*f20;PyLemzlGH;Fd-6Ks{gvBDT-buzHYPgpRaG($FP@s$1~#%?yb z=0aXXp^%IvA%tCLeXXWd&o^uEogB)p;k4bH@9DS)c4EtEn@R$zN_63zpCxDKzlhnTt6>pI+LD#4kqm~b~}^Zcub!+kxNb5PWm%s(uE^A^m@Q#|HB+Pl{+1ugX>O)25o-!AKZ(P+`vHY>&R1EYP5ElHu`4{GodUYP`p~ICx5HO59ylZ;}9aJdP8fj zM#2HIf12?#jr@!NbqW&!*pf!N>ccW+ilVQb%pXc9GI4P_Th-2JfXecR8eC&05Y6*AE%>ulQy$I}b7Vm$fX~2|1skn|7&hkjO&c%Aes@msHJSzl(D7?2 zq^LC^O<7m*`r2Pz+lTh&%C6!7YKWz$)baa*TlX{aIAgF|dSJfgwr$)GENd4xBvv>g z{LWQUwrXwDx6$-se{4ec_1wSyUWDRK#)@@D$`LX=yxC-oa?EJP^;Q?g>>eMw63G3W z{ryIL?Tc7Fxc|q7lXxBk)LfrWI$@G}`>`J-MDh^vhMS&Sa=HCW9y2b?(Cz~vR5Vfm z$>sMCYDvx)mNoS&b1_krYI}92w2IDyiaOg@GtKl%JK}y^h}GC$*uz)~=+9K+S;0I! zjdQUSP2hCJha>Il@YDr(FIpsdx_RjvH5j*VP9Q;6&CTx$Wi6!Pm55v7CvM=wG)f6t zwu04$*uv`sr;12obC>v{*kTwb-S?Evl)iJ%v;@Jstjpp@bzrs+1w=l8AGqqI*==F@wszLn*4bJp2l`WnsK`gZa(bo$~FvTIO=;(wkLTX>Q&5N^_^ zrc#{#-`2JXnP(4ugX*pW1roY$MgLad6;#88j(-;zPHg3z&M($wtQDw{z3j?_PHoY< zJfZF?V*QJUg0SMntgl(;+Sb`F`<#(Ex9gj&NX&kkL&u+=!A*#RHo=qbKtzaN{d%ez zqA^L*0}3U&S*ZQYML^6+@p{taQ|79A5Mw;F_}6c-L5aREp6SmUov-QQG-(NoxWUh* zhr-DwhG2jiK9KRHehjjUgK>;VuuMCK!Y38^z!oumf((Dz!{8Ku2w2M}_3MvUUo>v# zS@(gKrr`X?&C=q`&k~`|Kgo&o6*SE#(%oC?I~ljhddR{O9!T@eVqO6Pm2G8**=k@D za11>;uSQNGT&A6Cl7&*X3mP6^?Gi`glIDZS*!o5T-zde0jx=`eZPO<3%3YZO8e>^V zx3F$-UE#wYucPSw9B-ZC>$RYx>kPUx2dRWv8-p|q$>Svv^N{VB@T~wT;EH}C#%f!g zLvLJg4||2X1q-U{y;Gq@idhj+&6SRe>PaXl*8e!Ofi(%XYb`jC-Y375+Li8r_11ca99d&HVtJrjTh=NiXdS8n`W~0Qqua2JW zpk`n!uEf&-nHBy0=f={8c@RI#C+DYifo0*)iO8{?T#2<`izb~Uiasl>P9JDN+!Woo ztMOJ*%9w1o_i$Pc=I{cr(I=6`Sad8H>v=_u-Q@2416rnIHI!Vx&6}`jVlt0m4;0F3 zuI)i4bTKXTAjL`vBZ1YgpZ;0SSuo6EM1oZ+zds2)7%ZxxuyKgGLvqf#ig$u0`X#=8 z6&$+8izlcShNP=~24o1{|L4UKUZ~GxcPotLzx$$q56f0<; zhNafVP|S|68&mpLKCZ-188A-4)A2$wZ3%iZ9}Wk1kc@ zIgAef3#htoatrVl@Qg?MyZR1lbkLeU1>sYvmi^(+Te}AKOk&O6M_{0vy0BVyZFb3t zMvEw^71Stxxd-5X31^3fi#HD_6@@}83877H*pIE5ECZnDi;XfPr>_@CuscJ(EyV`) zfX{I0fjg^(op-Im3`frmoGmA1kz#HcgB5HuT|%dZvj1bmm+l2Ql$%4Ul)DJnCF|3w zr%1p-WYn15EVc9u+T3Z@P9pvd)`oE09g_u($_yVrF>DFdOJSQ_C{qYALDp!O1s1-* zotKx!D6rK;=Cp3gTb?spm{yg0_*+ z)4vf`Jzj0rjwiAlt{?TJr6<`850u$cz?eNrMzbZ!3tckv3W0?8NbR6~3|`qY0mHb+ zNC17e9l*P6H7HSDiECkypiT!H0!-=)(UHh1i$ew6xpZb#dT&3kgQwEi5(G6589WL?Ap?@T!kiOdkb{~5luC54HqR1(iSwa3P+ z!497xTFy>LG^Be2%HcvjDd6$h|D^gwx2cXd*TKBI?3NFLF6m9BMXCoo-=W(V=z%_5 z!nd1cLfLH1Rqm&vWD%b{sq~)atTyGB!TOGwK~e?ZO>m(5{naesjj!KBX=W2-ZFbQI zulfnASe>q`e8p7aI=wXq`1-k_%=QMoN$qHeEfI;nP~$xyAMZY_Stf64VNe%kKkZ{W zw|5M)PCB=QiHu{R-Cc`E3Xqk2rDa1Hvx2XT@M?RdyeH@Hd5c0Z&M42dY_bnMrc)3V=?XpUX3 zm!@X7?2^X{!}mm$q#i;1qGv~0jgvs>i5GIVqB?}Uiq#)VFiMzvZm3jAS>nm9t~CySXIjXO|(g z9-IiwCxnWjT>s4_sE^zobc$!H=9B&YzRr)r-x@#1)(kvQcze8D@2%XU=e0q{4`YVgzbk7(dCU^zI$ zhRdz zPt$`I80^Qe9_N;{(9FH%GkK>>-DN1Tj#R)2+1Pe6_&Hg6I>B}1Se*DAi)FqLM;IG zC+a4G?6n{0|LYEAeg#sUW@fp%Jsz>?dQ&!R)T(MFO3={fqI|V9VOL-t`L=;Gvop%0^?=n!=aTq_w^ zJ^VZ9l@Tsd{K#N@ZEhIRJ@eF!o99|AHwdQ&u%(te1QZgRoRLGe$VyD^i8#vCq>|Pe zvZwx0JhEMPTBI%o^9YK4Pp-TUHc!=ukes8ixU#RO*4T;lG?+)cd+AIwFyJ!tTW3-! zRNB^M)eL&seiL3Jl{|e(D>jJiTymTtFxY45igXO5x~x;}Tm5F%qF2W=Sc~C6ok&|cop_|tXI8jE zCEE18qIkc7 z@;7$TeRnSshKtPHeqW7*gggW1v-_{6!B9p#cD+1EQ)iE6ep1nHevz@@rKS6q9dZd@ zq4_!0*|Z7`AASKnfiVZ$MGsJ(4L|6W#cJ8OGyzB*G(@la^3_zo$bY9x$tn(0caR8{ zkg)dNCnK^C9VO7#M06F)uFan2*h{wFA2C*7J7)!7ba*XGQ=R3}LF65h=Df!7eTW&2L5(+2)beuPoC3K&Ph#D)CCdVL+GM05@LzRYZ}e#K%cwL8 z@w#4vX7?Wf`W<&PL1&p!^{MsbhF1)>lEgNq6b(11aN$M~!SZM}ne_DZ-CTNZ8pHWG z79Nh+8y?vt;#QQGQ3F&gi<+}5gR_Q9Rq@>k2<7}I!l|sLU=cBSe+5-|H=4S39`e2$xT`-sVP#m<^_X{ zh?&hm|H1O!?%_uJ2qIP(Zn;@Pujd|z;(iiNDja{Y@2Z?@$xvB)Vk|Q*ABI|P=mRXd zRTa8;8|4soj2)1sRTc9%MRS^g|AXulRqUi$c|%F>vLn+4+{KUf3kN|H?yhJeTHVnY ztQx8P^%Ic|Z5`WO>@i+K6A?23zKm$#+96#yPE3W~y=09#MR?wHqQWc*Nr(Onxjnp+ z&sw%t1{p{onxFyrAfuu2Aw*CBSr6>)%SGyU2QK~}Ky34E`{Ar7vki|{K*ULXUzXJ> z-@t=a4tF@2i|WoFxqtbL-OIIj<&1|G4VxuR4Ft`1-Ki_LRXO(LLlES8niK1?)qmuf zwS-hz^~iWlrfO(~Juz*U9Y|MmtHTAX)))ord^h4Uf8$%qdMU({x^SaSTZJ$Su%k?XPbrURp9K;#$ zMZ8`nJ5fQ_yEB%*hIA`2OtsF20vSt_5wk_Wt4jtjb(if%cyAs5%<6xvDgH_h<=r+< z%S#Hw0tJ9n$ohWP@0Am<>^|dMyI*29>-HSOW}~oT!83{3J!$mFO|}K&LKs3DtbZ$Z z^K20tcSIKj#ptWnSu#yQ#!(vYmifM)t>vvGc1aon^tVs!@MNMP>vBxtPZu*aYe?&c$Bbv3u~IG(lU9-J(lL zgWd*b2pTx69t_}C9VG)+uK>SL=A4&|%G=iNveTQbNE3gn*-u-9poe^q9CQB66Y(X< zjVm(b@fCUYKYA{KO=be19OEXEN1-oKTS&)*k;#70?&Wq63OAxy`QvI35lf=%MlaXh z>JS^?WDiDT4z99F6VhSC-;yUd-kCrL2-#9Gapr9$9@?Z9W9}G%q($Dham2{Lwi~Fk zI@<1Z!O&dqI9j|fPGLzG1t{=vO^m>qpNiu9Dj!M z!BpU-j-z`I=Fxm8(NP=vVU>3%PCZQrW~55a@5UVUu>?XdJVyn@2RcVkxz$pz*XV`owwLB& z;*d#3kRovjoslJc8a)uxwk`yHys*ewv+xcnc`^?nML=UskLOgEnlaE zu#A-tCIisDhP4Euu8K`jgyyW|6dSj45MIAt51sawYfZXT$VGLq{%P_=zxBAYyK8lY zFOP6pFpc?E*{IhYfP2&>1y7^O27{?EncOEl&DQ-(N@q)Elh3||S;4+Co&(7g(;@hl zR{0ITYc+J!75$_ojo~=eyj~m+m{~Ic+hL*;9?*E>Z%7`vOa)@3y3QMcB@p1%mk>=? zsdX*8N*Q16_H(4%LJq0WG#z?oE|=$)IevpYj;J6eTN_YEnoBI^MM3H8Ar$_NEEf%W zC(G|3==Oocyv&;^wb2Q`KxFJvda$Z%7JjY1-LN#Ao)7C*)B)W)q#E#?_&Gp2L>(~( zOc=l9s~)WpIe!)f^_}}#vxZ@9FL9(pue;+xxb=CfkYreTPH8aFhk=wh>B@gJb1X@ZTW1K3BG=NT`rfISQyIujVcP?OI-2XO z+pFucuwI9I2aNFqQJSjucE~;kEA1yY8587tyV}Rteyg9}fxARKZ2L_wBGooOMKn0N z(ABk>iNW*H9&;H|q0S9HH9GR&b=i`A^*uId^r_5-PBa?MA1e zKjMUZ87<8$wjqy4%(FNG@YZ%Ei#cp*TO4p`C;UH)KwC_76KGc~OFQh27@5hhfP3Y^ zyNrb?OAAaXZFX@h8a_nu((})dTl@N<-G_oa|2!}3G;uSN>`XYnyRT~?p?50XL644l zup{S=Tn%+17%9=_|4ts~k#cP1yE@n7xsnm6O~3!naUK`Yl2B!Q( zF65?cd5{DRG027G>Ejg?p9*bzPR%6AVuSc9I<-FW!nbvQSI7WA{L@aMi1mq#)jasp z^&l=Sv`&(*8^`CRIn`{obEQg6{Ve4?wE`nCFL+}asR{eX1Lf(1OQNAGZ_wOh>m#x^ zzf&u&p2olIo&785*FpZB3ZaD~-toL=+m7XCsHtMW($ddI{|r1Ua0T73y!#<*G}D+( z0rV<@7QMLE^RVRL%Bp{=63|u0Hj2$T=kOx>}GMkPq-{s&I;V7eWpW_KdQm~ zFQDY?<*emXAAcmo7lyD4Jh(i9e$(w6wZhkqv2PQ3F9>9WPOMy$LeqAQi3#|M)bCSI z(RbIU=Y-v?ZB*L%jlEZ- zo8lm;U7B~%$$p?x$O>xm0*{ziaIuLKphKIe0voXP^AFgtipk7uWn4$?-Z_Vinfl^p zpjvF=tN2L_W2QJTD4SJm8`X?&b#HpG;5l_v6A9nUUkUt)1N*(z6ltkaGOSEoZ{lA& z`6i5K`=v0d-4442$-}~!`XLSQ(}1P>2^;#L0+m}yuy1Htd+)!Wh7?kes()OdF!{!X zvSvRRb~~Nx02Miyx^(J2d%#OxMmoT1fSN?CvLd^#GufqhUa+Ev9NVd-?i>+pjh=EQVAn>nRPiF>`hi^3Tq#5!>Kno|bjho4QT$?s^0EvVsdAsy8|I{I z%{s4TkH$jP?a`c)qVfVViJ|26n>h1)McKEMy_)fcZDfSX+an>{ZpTNbBjRC|@P~W; z-{J<(h49885}%#pkw&(^ptgY5O#~8G4+u~8Ft8}%QnOj-QvMYD0Ml(vzN!5cdmUav zYZKPh9b=rvY6ALb0db1^#}^dlkV+Z}S*vXolZ-}@N|>cpbWyYXIBzI&Sw0=5De_?K zDX!A6%NmkWv?w`P0&s()OWG@FAZYB=m3xxQVX5YnI-#O2}aR*X@XaXnj}ARU(N|zy*W2J z+}@bH)66P@9)D()W6bET-a6aJr`dPc7y`E)>KD@f4bZB?zFwrzlPVh4 z*MYs|L$+$kq zPmGFvu*Wj%_TWWCMc~RYF8offqbVSPG@Jxl=!jPxFSh(ojLH)EYh41doxP5&?%R0m z@@zV$C+(SVaS<0pGVXiypGWUZE4IwmyH7xAmJbx!|IagPTlwb){xmuA?i`Z5FcC3K z3ufdsJBtt3s}{S*_AFr|U=d#J>2bJw%DgYx=rPNOh!YPL#Z_i z69}E=YFCG~lk+ngv?!3IEpH}SZ{Jz}jIM{%1->}SUQ-f%2YhWpT(?{VPGS1Ls-YC@ln#Nqu(eUvPk$N2+pMBp1!jdmUQ^E__qU%HiJ_Lcr4Gt6AQ%jvEy_aEY8( z*=()1odSOTJ$%1c#dS-h$);g?B2d67{cTUH_}Z1FRTBwmrwNLd3PP#1XT9pKTGagwqcFzK1=nK?B4?oE4UA#d(+he~|ye4mo zOYk(EOCLE(5$2T~=_K@DP_{po6b4?~mF|8qS1)L2GfYCj{w6!@DLnhaW%l^2s$x_B zmn9FMVpkFeuX}IXkAXW!|3*Wex#*)K?9+FllQ@S#@pf@UXCvj?`#b3JR%8!xLuJb8 ztdkr$jj)h1LeECu67+z>e%YEw!F0tleAO{KQ*z9(0H0F>g3P=Uv(Q!DUKTw#`ppoW&K}AL4f?ERp!X46xXsJxsvYaaSA{QxRM+5jFN?8?wc<_Cx8)h`q<#H5^nOqXw zCozqdDoT2A{e+6uNWL9)czcstN%wI$pRhNv6xepE4J#lcwltC);lh>hDbcLu>Lw4) zx0f%^%SMUsM(cv{h7jOCiCTF;1+GB}C!dgmk_!{vooL=sOdMmbBchorj8~iFZvX^l zJ#ahCfbc|sP0#Esunk@BObLn7@q~^xpA`HYmB0=bM`G7W&jXFk&dq-Dvpt${*k}Y_ zPy$KIf^U^!2rHp6Vz|!u8JnUo6mG{ExU>1x#iRSibw3r1PQCgo_gyVd4@q~dD81qX z;oL@vPhnuxBo9l40wzCA#n=3McOBDId>RH9UTMpR&N=0gud#kRk$2oJ<^FCo)2c}H zV%gKF$FASwjwaF>&UZ>23NEmys>b9%8L7lj5Y~kmc)ERE=;c-i%U?VtbAo;?LLJ7Q zrSfC8{LKs#2qaAIIO~e!x&fHIheTqz{zfy9ViQCF^Jm$uNJr3>!ax2;l6qjO8p-iO zP^vm5=?$p_reK$+K$SrUI%EG?4ps_5jnTrtjlAOn~Q!s6omizW(}%j z+G*xKdYi>`1=YCxsEp0a7!UmM#CD16pZ9k$q_B>dk!Gmk)gk(lAm~=hIY|@}9S6bQ zq7Pn55Q_fKN<9qJBcf%7PjKbkhAWih65?gc+y&T4^}9=+?AOh2u{4lTiCXKBlWFVM8j~613>~11I97kbGo`1ao2}g-;Oul@h zh-gBB?3>Kzig!lVQ?*j(fgDpAzO)6l=1%k$Ps1TNfHf+K6Q;91#y-mb+*a}Udm75}!PM>Mu01;MjR(GZ z7#&Nj%D*P7dZxWn^ISCZx?q=JdHqiXA!D)5%^Ryb%mA<1jnsvigIkf-btH$tAfaXm zz=aIxK6Z)F=2Tbl?}mv)$AZN#$gW3YGlyb^w(rt*H| zRK*WA;{%;dOZ15RK7|~JZ7N^Hz=g8o84?iWd7tAzNOVN{G6Yof4RvtYYKzn_2ee>i zbt8o>Rg(l+IL`^&cY20oD@Gl!19J^#g4+2>{j*Gymm+EewjZ{YLLx1DFw`_-Y;60U z!QROI1>dRy}!yDT^jP5C({^Z!GF1iGm!a7rlP3_ku)po05^R5Q^c2oG#7gStlSJIorLkK8?+Y~BTh8C91v_&b z3BjH6=FoIG=h{J0-L0_p|K{OSG>U=jcN*~hT=H5g)+kZxJAb~Okp0H;dJpa8SARY> z%KrQ~$TMelbT~o+(w#>OMTd^{5r)6pCjUT49V84sYO;q*4)OL)3yVf#C31S(G4Y`4 zsUA&qo=e*E_AEv2du8FD$L?pRO|`LB@=n@YxIW5=@8*IBi@V$`v8m7%W6{z8dpe5n zlkS(J(o%$$vRjok1qQ|XHz~8J!dMn68m#Y++hB<9e7t2vKqPbNOV-<&Wd)nM9b?gF z3?YUX{@dG3Ui$VK4cUQM*>AcJZEfxUVb`bw9MoqfX+%Iy4{JyI;Whtdi=8#1^Qqm;GkSjOo2T6RKo1~`eAx^n18EhImlVBai{)tJ zsXz*XHZ?3Nn&=-e$XBS)zi6RxMA46st)<1V;tlzxkp!fKcEX-4+Kv4b)6UMyUo5Lb zN{10qmbl_@cC}$dFj{~oE2-oHZ_Gz(Ut-w%xgl!bp`jgA`nf4suBPINm#V};KPp=N zm&*-yPMblyC$^6}-z(UUBYS-F@~HKgVK(#>w$yTY-7xFC2CblR2Dei$J5AuCFIzT^ zu;%{F+;Isch9QQBU+ z66Qxdbw}3TCU0BDxjd*=EhTjM?h$1)NeH^Ja1YR8R>zhU9nWpd0LeN1Gm z?$rMs({|V`clWXDcdKqq;G@InP7Y;VUEF|V_+hIKxHQ6R;c2O&N>FO>UY+tuEp$Da z4`iQ6s_K{CL1hrTAnBY4xWC6xBT5%OQ8=1kOkCIwqkh_`{A2^dru3~P8m06jS7`hi zLQmxpnwa3WR8SMal6d;Z!NZ5D<(2$!R6jF$+Nh`j7bmSsCV=i3sWr9=8RBF5#o!VjkDd*BNC?@=_g%H?rBdcI^0i{l} z#G3d4X*~w_Amp1)C$O&FZmSvvK5U6|OA{RP%`VOjm`m6zQo<~Ac zRplU+A+99hcYAU;VUTYedX@7Rm9^dAm1}cXpBka`@~}r`wyP@+V=#t;cGjM6=IXq{L0h;c ziHfUdRTvZd*Mpf>Y=5ZOU*iQbNcegE!33xWzj#RmB(j$u|+JSEAHKx z+Bp1}eJzoYteKk1Q-k+S2zq7S&xYpvY)>j z?-EAV5<6-+3HYmFtQN4#mK zDmz1{H0jOu7zaw%nv_2+V1|{)Whn-qah(Cq!9-ZE>)uP>^WAAY3LK6wnESoBcK;D5 zY$7pGH~jmPO_?!r6xgAWD8mZOCg$~1sR}^W7%r76HT)CHR1u6ST^J+oZOC8p12sog zn5e}X?F08rUbZ~Ube($yEK6rpbe0Y{_ysLx=9>4{<6Lz0UR?2G*hhaMn$l`82<-SRI3=7**wG!Fi9J$QOA#g~n0AG&8ZUu(f_ z=$Fg}dNN!4)pf0L_0t56IKu`B49fgv@G|ieTzmqpDX@*iMOb(yXkvEiR6AL8xk3nU z_l&1s^3lfHCIcXhy*bsIrQN{q0c&k>zUvL+0mq;&eRP^ffI8lhDS%8PzzRVTDz=URZy7O;~;Yas?7cN zIz*9`TA<;%%5Zqv)5tNU++x=b0xAtlUO2EQ7C*fOENiP{u?(nYf^+q<{O7w_0lh8| z`*iU&^fpp+2vBg`F2&-TtMMZhC}dGTPi2?pudrXP;}LptOXh8)aMY!sjt!O{WEq6=Um|!$yWeR zVv{%IW1(`$KKIlpH2;Lh!LQH|#hePNS$~jXzb^ywB`?tO*P_CP13g?_KH#@!JsmXo z0@4h*FDj}oMJK6nsm(pH8}xyDl9vrFz9wIojuB8t5_$%zkUWl>16mxG;zFe~Ypjt@ zyr%P_$73JX0s5|N&07zcn*1TZ?0=1ZX?PIPnX61^_#qsZ!TvVFjAS{npo$e2y~HpQ zA7Iof(b`2e_Iid1bT-ksgufp{a0oDNH7}em@or@i`3CSvzwLZaPOVxI_jlt`tT-<{ z^r(Pl!2LiE=UaefR*34YJoL#1f4-suTBT7YQ!7E=1#JUY1(TZ94+8%vY5l=*rZ%F) zLKGo+ZZ0j)WjJ3FaN>an4WI1-3V5OT^BvS_7s5$9ZDCvNY^lDY?D&)3vcQOQw$ zlVI9+5Y8|{)`aGm8q5;iL3| z(mF0nsFZ(T9%`+MWKMe=>6=G6HY7Gh8!Grjy`;Ihv!?x_4{#S&6za_+i2n%>xfWMh zA}n}XqB(PH?iQeDdz0mGyrW7D%th>@Cy-O?AAZmo*~yld*oN-41sVUu`5JF<7e^=D zys{IO@Pk_q-0d5&2-K&=L2$I-X6b+5H$)rb;BaO{XWB6g%A0HaW0gNo9f`@AK#_yc zmwo{ydgO~GV2`^S;6VJ4d}kv6bE|qiuBuN;^VlEV5?wOGfKT%*gkRImmeWic5*}62 zYa_t|eDv#0I{cRDs#yj%Y;(FrVJ641q+Ow?#5@^@#yur!2(Bi;f!*43!U~?&-!kWn zKj@+rXr=TWou_hXX;<%4CFf{rk33&mmTT_AZ(8pGs)#J!qpYjkD~AjaG?P+Pg2U5E z=Zls_w+exJnNQPfNKh^53afs_m{d9m_X)|2OvxC2yoR=r2Dgac=bclStXjP2Anhze z&;;LCceA&aYY5~-YTeKRDoZalxdS2V=*cL!n-s~T`%S_bQxK}GfjO0IBrSP%PPB}g|1XtQ)Kap{}cdKUKPD+b`FjVt1VaOoFVB)gcfEf6y*r9@L9 z{>{WTvo(TGuM90)CqUyCCQKY<$04Y;SW*pc&&)sc^9{yb5w&MNqlN7rA!cbfjU zddii0`K^Vr`%`z@$Ty~t`#5Ti{s1SSsJIf@@|BlF*K(#vSn+5-dy1~+NLWTAq7KZo zv}3sQt)PVTa6hfN$Qp@@E^TBQF$GW>GqaQRcaZ?I^Yk7iqh zDV!QyKdMzi3BsikP(0+owWPdQ==&}&p!83ngFI4V*hg_A`tVaj9&c469)Lg4ep_jx zPM|*f2@IwPQ7opZYQ-5H)8=8{-GbidqJ@84=X#(C%8_sD0(u_Ha%sbs zY=9d^uWr?+kmM^@*e1B>LSq>~8Q;78xLAcXQO^kj&oB#^eO?<@DMi=6Rn~*&?thZ( zuTBOX05NmbQt|c9c4%5%GDbg?8@Ybs*Axf24r9-q!9NwOZ{dH%t}L{(oS3{rzwge- z(g$8J2Qr3)HgTumgQGrN1;N8d6uvHz9x$NFA2Pz+bD2~&^S{%ZtlIL`R~QhwJq){X zsQneR3|dEd4aC|tgc!qpDy$iT!Eb<=Jn%ho~#cpYW`fVOs ztbFpapS<*}Lb4=YU+V6LZJw&@qt~vElp<9+iA?Kz+EFbLE&P23On#oukaABF+Ig{9 zg+XbDDysP+*|4JEE2)#=&}S0BdTVuNrhhqjtJo0S42aa3i#I%D3T(+!e^3rV(Lpba zEt%+ML;xf#5|(U??g^R44?gjmTty0-+)=ex4j(4v>@5zb<~}5&UL4QMgO@-m(Fzw#8*jXYC0o$E63BTgL`iOZ+BZPoS zi{tS1cOeC0xw4{jju?kjo%t*w3#`%T^%HB)Ua&vVroVH?w-TafG14=OxtBWra_>@-i^kaEvvcb~PT&ZLGG8fF=6~#CzvtVzs z$DKee{ZF!NM{PAzDCx2Hs4V+-1mpV`r@_=Zp#d9!p-Cq!5EynhHut}cvZxg(a0_MV zZq;mlwWg+aJ|*@O^SF?fe;r+OkJgVkiJHiwOazO{t0PkdhNI0S^W)dlT-JKo{}0n6 z&xvUN6a8A5Z=+Muv8jC81zIPfsHq=ELq?aUqiXAr@-__*1f@*{K?5O-QgvoErm{f1 zc@dO%X@`i#rQ8re_I|Z5sI`5ozL{IV3c&ozv;_l_LU1YcnYAuw1_AdURC_B|(y)DS zQL!k$pxTLsG0nP6hBnA}ak9iAO!PRxXru5<3dO7EGuk3f&Po;)# zOJ`n5HQM!jJMNcMWn(FgOCaT<9Xd`SjFw-YrJ{9^{dn(<2ZKK)yeJV>o<2nMalr%C zDIk*gWU$YaY=uENmRm)2MFd{nN_2@dDf_0QuLrcZeXjoazRQFfO>hOa+R|=r!6j~S z?z0w`te`mXeh|1TsIV_c{n?=0fEzRl16l+V5MB8z_MEV5p(V?N|L>B~=SrtQ+l4K@ z1yJ`W4qy9P!;V>y$oU8f`Oz&IW_N=Oyhf+x(5b=;jw<%6dz72Kfzcfpt4{VIhVAn6 z?9mJ0Me{cKazHi5IXRk*oyHuN;$8lB8-1=?#3dolJtc*wA;}<)y#-$1|LWDx)h>zt z6I!3P8%*THzXcH;LiodybsrT&SQUtl0PvPw9(XmkgwXMA4UnNg$hqyWSVrUEiC?2o1lKWw7NmkZ7=FdgNTAG1wk z1ZPSgE8m_|kwDghd-m8sg9bC7q(`jY10H2PM*+tyIx!YP|4vq(iO`^d%H|FPNGL^Z z9;zoy?P3(%`9)Nk=Ppt2R>$ZBVFWVzr8YOAEAeq~951v8FP_OMNcD`!lX^2smx(yF zyHHN2Q)1(ltR!{HW*@)YBSAb$lF3)GME3pUZD$5~Ezm zCDzGv2lEpHQM4NzMn%9SFYMBq3iH$+FRTTfa$eI&(lC_AdX98Q-49d^C}w5T;Fi7q zxL60JPJF3uuY@c7urQVy^kPU&LrXe{M+9YaBYL_IpH2t*Uk*o(S%riIP9~__&?*^N z#wa#5gu8o2VUXGt51Q7~c?TW2T9H=`@7dzNP}1Bh(8gL%kd258Ye_xa_jomjZ{O(0 z8ok@C8^eMMm(MjiSIrT`PF8l$R%AUP&a>su|0vGw`b$^i zGyTpIAz5(gX>B%BS+fGF=-r#PzVUC;>9;`zFV7DAG)Frt{iH9|oc8cPc#u9jM&)=V zb7JFfJUIx`CdbR=0$Sy>>D=ccc%VcvDZwkJQdmNVQR{*DvNvP>XD{1gh7u>&i{hPh zU=iCO3^H7GF^nJaSZXwsA^wR!2$sRqfd(2EiCK;uIJ{~VJ2Rll%CZ}d3q>m11Bx^w|#Yd<)TPTs+bob zh_TH+WO_2@u%wA^phn?rDeVW%ZCoKJROkV14&6JHO^mp(dRBLlkyRD#%wIjYWTk^T zA#UNFT)k7!Y0Ol^#Xa9@KxYS|@Ee_LSce1>FdBum7JxnZ+OM(n)Y5QlH`f z<_woc`#e)WlFSAJ)%S|44^r&P+=N>0NOCl$c)V#@JgZLHgqe z(P*-B@8Z>j7qo3N+O-qzdlryrDu-C>G9A^eShR8n2D|7c?%`EWXV}n5Ngc%)01CvA z(VKQk%C$=m_%y?+*r0%7cr?hOuQ!S91IEU}`BalvRh*9+mTBu`Y0{Mhplxt!AQ^q6 z3VcbpIIEX(On&xslTWgaG>fhg7<;M&)1S&vCR4%h#{f#1ON1<)9ALqAm-0#-6{j1EYKp_2OD+lk? zI|G{qEhy(+G|d0M2Mi3(NJm|pjS>pkcGag(wAXX;K#&EHc_>8KyJ%ymET$VX?}*=E zXjji`XdDsk<~R0!OubKB9`gh_>N#3OEl36uM$e$pb4(kS3g8yYN;Y0NuFJXkVz61* zxAlC^*y5qX(B{&b`H5^1nOoEjPPHU@2 z30FScmB)p%G^u3?H%^bAc?ork%GCZ~9p&$CCOzZrPvw_6eqJ9h4I%3>w7fi7aXnjw zO*Swr>*V7~M?ThVwFJoe;xi13i?Ra0KhX)VWiID2=%RAnpSN#T1ZBIZg%h zMkF z@$gsKklzu5^K!26wC?ASfK2G8OS5}C5oM>l7rj6oU|ULW%?-j&lcBn~jdJ-$-9xnd z6we`-0;?Kux-!*_37x53nE8XBPvTi*0t^ns(UmXLXx@Agz!!YDC~4T|pJjokm95+c z+uGlMj4o|@e*$_!me@57kPG?=$Go~lh+T`vQ`0DU*@FCxZwh?GJIAdT4c81x4#O8S zVtg3Iv7CG>hXcPz5_fsvl{rux0qSH~`hAF9i)064{918Cw{7lj!#|;+mPQ|HOsAAk z^DT(ui$XI0^&}N5QA4XiFJt!N@t<&eRGgF@;reNjU4T(95u;#FZ1V$2`9RCWFRdR~ zGd^3#)*%@QhxPB@p@hXVq1@{@ZA|zFVsg62044ipEzZ|U2P^z=3*Vxd2Os11mSlcS zZvx%_15`N1Jb1yO-`20cO%knVjSO&4ELOB)nC{wrc-99tr=y+*1Z`i zDYj{PN&I2m1qTv9pDX!Ve$JRL@8H<~FT{Ip2I*k3czrUOsYEu@c+5)vA-RkItwD^v z3Y!cJc4mYJemh%k@F2pb7U-QK^%R9!%U{_*A_sr#rVid(NMg4+vEajjxGm z39}_C&tTD z`Cfn=DB(%yX_lR9HiruJf_Po(usF zzINbNC8OH-H57*Rf!$j?V9xubX!+3Fx_z7uhS59_?x#tP;v@N~=I_R0Y2;`rV= zT?lq3#zQYMVs@o$aBG&x`J*3uXJs^j!6*}<>jAIEhnL&*T*@>o#i!|^At$g7pegMF zS`w8_^F~^t;YN>KTluU-Lg$Wb0CsRC8%IE_QnO|}Tq#wU)*cg?A@wr~z&{Lx)-ri_ zH1DL|Sw)q|3hkko^CyMR;WK7@Xc4|)?8s+F!o4w)zkXgI9B)laKvVJ_l{@G8Irr7x zU&lgh)#~N+M+)SN_gbSRMM8Ex)5DmEGz)P0u&6D#Wz0gM$0%-0f1%8gZpk+3&tgUH z@Hk1mp0sOqYdZS`#f=oT;dij!z56^({da=$MO4p7RHGpc{Lt6l~J0 zrd>a|rzv*YZazrupJel+ciU5|V_-k;2=T0#>w6?X3HcsiR4QB^u#d~&7;lN3zyzzU z@dC(Ahw#soz9`Qo_2s51W3+S^P-AyQCl<|r^+Y!wZua(}5*wOo^8g3hQgAFxNy!{D zaYx2CIBg5FeV}>8=OIUldz_rZ3aG5xJs4jAcIEN=CTo}x|E(iRCz4&YXaL$og)(zjIq_J{VrN=8DQ=C8)@J+<9vQvQa40&;~s$9wk zEUL!(RbI5A_sPxPH1;%c_-v6|G{9$el>VWdQSmv{+v(AL)N1v6PAuHNa{l3@lb$!5 zdfC;-qcZ9E8(Hnh-B=Kj_GLzf4qiQOprBh0;jCpkPS1gfmC|5iPB8|(I7U%BBPArQ z$v{(nW+m{}d)CDfUNbT3ddzqQij^D^>ous)i;ScEz&zl-oWz^VzJ_~4fq-IOavFoN zp|o)~JlQ3_X;Z9;>!-8u|BL3KA>ycKFX=9Q9@fz*6>vw-=F+Vz75pmpfor%Cq@X-6 z7*1!x3BEuSs24IpaeGrrBPV_-dS|B$_%*arO>;fLSgd_?24L+TyUUOH=m;Zx?LhgP ztrdtm3oV{)HFFi*KLn!kt~TNl`bgJ4275czPkFK@kHEI;uqvKp`CBySMDjY|w9lx@xhfxV@^UyqSXXU-=Z2ZTM-E{a^rOBFbz zR*J!;lM9XMfd+?vj6&lW@PxWlt#8b~RhXt{m@Yx4U6Phi?!{mVH^avT9g|}n-%*$_ zu*n=mesXx8#7(;0C|H~FXN`{NZ`w_5MtxmALqEU|tGi*5vQXmnsqa2ul!_wZtT7R0 z?)nC|idWh5C74tLmn6Re*uHpgN-_o15!|KDMg%ujgC<+f$agapMQ0s!hVeo{ zH=4H`xkMMn=s1?_7TJFdYe0N#+d9$jYYsoWB3p0}ptb2AVSW_30OzV&a#@=}S6=r2 zXJImd6-VIJmbOax^VCi3Glpi30E}riBLF=>!oPqPzrJ3H`qfd6ka~(Tq%2mJmRr@f z@vB}A|G3>stlP~2q+)(WuMNT*OB%e(&6ioXeJUR;yvRO$@@rJY@u#W@f#o{V6hlTdL;?SMg~ zgJ>?JG!)g&ph|Ygm!Fp1kI;gIWVRF=B{qM5QC@0O2M=lC+=HvD&D2pbQfFY!@Kc6~ z93hBthjGW*VOE8F5*g%`woM4!b!NaORicY)GJ*A`sS_Z_7S6K^=k{c;U5t z?}dmp=9qoACw%zPd@^EEbSnHO8<<)gyg%953_s*H)gDqoNi$VX`8@(aBi1`Llm)dHA5nPPFgwm-BFU=v{e zs1LQ|V>sn&F&%?@=AVW}-cbknP2G!4CO-IlbZEP!kAhag_*KXQ`M|Z!-@+^t6AUg;<|iw zF{`g?PsQ&k;Sj`QO1qSz>!4=S*l=Qwm}~~U755A17P=8A^&lbPkygEXPrM5zOBc@$ z8Qkzy_Ucv`6(RkEXXm0>N!w0|g@`=4g$3qTe94iDItX`|zN2cQkzXd*AKyVgaWhi# zbhEpD#xZ48R@HQ(IMRl`5WDqSh81mty*h0sdW(xMz2pJLs4$WPC=LHfLQ9(wy+@(J ztQj1&_`6jsB^IktA$xfhafJcXxEUbA;U}iS_J54uteviKSA}U`G&YIgkneoInO2E( zd<>E_+T%jE2QmtOps=ru<5gmYZMBGv5$2}Pq$b?BvCy!vN6ouwp+;{OCe4#v`FY<{ znecLto2cn6=)p_Fvh!q^dAB1(jk{)*mT^z^F%G}mE^?%LX)hnAjht|CiHu5vcS&fH`}D7u zy#Qb~2w#+WpDXrVFw}*uiIVI2%?d~OP}2MyhRbDU!|HEwa#b~2FcR_=OPb(~A%;Bz zk0b!Be*uc#<3NKzALBk@yCMLPs!ygtlPU%prG@u~;%$zj`wLuZ*r1`U z2Nx?NYa=GCCwR-Yl?~`iE3TN_pHP%)j!GE5hyzQ`UkI+(ORXS=y1Jiho3%)C!=lyl@pPa18`m>Xn z%=9`*d#RK&4a03x=#S>+)BY8vH^S}?q>k838Wre0aK*gfVk$1faR48X%8nz{? z8r$^Cet!XSSA;uI^dbVhG*Pv*=>kC+dfe5S&Swq1)Hsi-#k5zg2>((l#Y<>17q%(+ zQ$4le?NPxtAq7(9csernFg5WvzF~{bR})==NDFPLD|ezzH#ek(=SYKhEkTj1Vo<6B zAW#isZ3Q2C6L)~)u7S3?B^F1^6xvvwqbrzqh{p>E^OEeL3r~j}iF8iQ;6b2g2Bj_h z8jQj|Q%M*N2QTA5JE`@jIc1<7JKOsDodjy-KiGBGG?L76TW(ePlzU!VLF9JBAd8j< zjmL|lLId}tQZC2Hn5JU|>+KQO(SP}r>~p%*3F7>eS^nV!7ag_Hz^!g``*|mia}Lqn z3=cZ-82_Prh@{^Bo!tj{WlmvT-E)%+H-;;-#F7{yCpo5WoC*4&?IRmgdrr9=ss!DI zeSO1e%4T`wPplOk%v*OGWL?wrhlK6-Eu&xovMeGEQoJb*G|~-zle#X|y0GkvobyGJd~(LxMp6{9ezA zXY+u-L|MUcV4_$Y28xQjMtfqXwXzFDoAh)|f!wc(Y{kUyS2ZSgcRzQZK$TRm>PC@K>3~KsL)BN0=h&M^)x{NtX^b>DX*vnn_`Ra?OW-i= zN&IS}9TMcxT#UvHPoLVvgh6T@>T;z3Rii?<-9{LfUUe$&Nyaojslv#6>J@x=wJ;~p ze)cKmU*Ox0S&DdOOH|i@eJ#WWkWWmV6gz#Q^*-XjBv<8ocqkSn`1j$0HGz}@>+KJd zzN41mt)swhEww`x7nV&Ju7b6{w*1=_zqVSQHM^xZyFdg7oJ|GM$-Fd0c7b(7pPiJ! zq?Mcj|EfscgMa%<>tc(AABILbXRF=#ZXZpP``t}%va(v0dn@Xuqd=pl`ry}kXQ4i! zB^f08@VV7VVtB+XrE4(*fD0;nuG9T@X;5P%le@%roY7fS4=MeS?<(^)&50TFlEpv> zB_TR@mMO#k3(B6zanwf*A@7mxqFmo$Nbp2I&`3KGMcO!7g5XcCi7$%X$NU|N!5=Fx zr<9Zn_redG&9v`|?tc%M9SZp9%t!jKjKhF~s{7z3+jYNc&@J4wozBvTkJ~vknhi~} zSB;uX;4WA87~w5$p1Dh#|Fkq(n%a|Gg}~pm{-1ex@vyD(_V$Z%E5gz_{g6g!Ef%T4 z2)08jo2kT}KBOQ@EZOm?V5S0`xsBajZ#N3+m?N$ga%-E+edCK*TX7XIj@@3XE^Ccn zWEAm8RO9RlqBO63Q>MpvO`v~ZF1rWR|EC_@p(N1umEalZ09dMoO-U zSDdBoJj>18e+dF(B;?{JwY+D;neWIaaVpBivl~Vhj#5BK7xPcMIKG^9m`iS)NQRb{ zL05LE7Mms=L-T)c{hz8}^JgOzV`^`Q+R`24GK2KKl4Fd$U1ogFyG~*GkHT1Nl4d{v z)itLJ)CTf+J{wjGMaLJ9=rIpio4%qiy|fRNP4J|qd&>Xbsow)H4k{dp@&SU&*|6j| zK+pCfwEd1T1&a|Oy%ahI6B51)zoD?Em3_i#r#Wr1l{~B~hj3E`E+DQr$XZ2Gj?X~P z$fsnowv^Yrdc55?xRo7o-h%h;;KE++l|H5V`k^t77nt4RT zg39f4ZFS7u&}?|KtKjIg^amT2Y|BHU0m5IVarDko(iXbm)Za}6OI0@-Rz>2Wd89%egCde?zPrB|Y;*5VM}OMLCk9 zdmUHzC{*izZI_NQ=}w7vnX-S%n07su_d1~a6@5}cTusN$bstV=pH_$b?}jQugWb1R zXW{eKK#IxvZR+*|Bk*QT+=neHCYlZj9vB+jw;91vY#8onlIs85UJN0JKOG^voi^=8 z&qaBOZP@_|F#+2|&Q2L!!B=pTodF$sO_1sx;V&_Bzrr2>ZA-8Bs9Z#;+jTb%G{VZM<=qtQN7qI!&KpYDW8}_$^qU5l6III>=K^l)XOP>>ZRWw!v`c9b4$}Q|fGR zolqZ4&?oAt6Ou{;>lH0SFWKze$!OhYvmcHR)t|{NR7C*eKq8Pvgh~8#88ij`fSscq zc|^&p2{%U%pVwWsJ-3{DB|@S*9o-b^5allEv19+X#(9c0hpk~3i(yF=jI($QbDSnW?pFB7J9vXHt zn+Tz>@Ke@uayvmYrMRnpS7Z$1MSo6D5>7z!3frVb*9Uw_yrD}6jt^FB+Ln<#%uFVL zJjW|1`p!kQl{K&`DSa*>z)kgL;#ik6Ie8qNfJ{zyA}V<;5x)XK^h7j_#%4DC_VseG zp0NAlYG1igWsphF*I}sDHrvOhN-Uw#JiZZ&-+4~XaSfGU9ZnekV!BxHU^Uqs%5#Bn zts$G-RDqPaQ|q|!7r>NCcWPnofjKfzu0~l=`r8;)e$!|!X7sc7mvqT_3?yu_>co2Y z446L7RoGmmulI0mt6o?;Q;j)6O#MeiBKR=d#qG6y3JO~@Xa)^Luvcp(b5U*vt;uIG z+)$G4^Ye@qd)W$r#<=HYW+25%alq16u~n!NN*21e<2A3pOXL zO?j;koFbvHsRZdkA%Molv#AG z-buQxH_e65LmAamP&lvl_MDKCAGtRC2n*8n_$_+j(1Zz@yV8wwr29ZR|7{J zkZPrNPfQvX{JVwm_dfuW<&+$|dq{j1wT-)m;sNe%-6TZ>_vt);+R}_9ccSxUI#u3B zF!LvG&`{#V$9pdyaUL&2v!YtmBe25b-J_=Lhp?L6jr+mF^8bwT0s6!@BhuSTVL5zJbpOv!ffT9xv=pq>1qgxR5BZASG zcZD?X8ef84KHGU$X7QQ`?i8jGeuFMCIHS0j|{xmMvZc>$`)-Y-H+}2#5%kIbkH8t z|CB;^`rW!X0y5qbN$ugkuh|82Wo&U_W!c~xJ@;t>}F^Nppd`Y92ooHxJ)Rk4g* zGeaf&5kXDtC}e*4uYR+wqGuqYOVz95+|1PDiTvA3qdL%dI}h7q!+y-1NWUH{K6q02 zRZ`Q~vAog9yqSmD(N*9HIYy_2+!9iCbEk2gL4>HHaOXng@s$bxAE5xfMx|S)Se-Rm z{6Zuxi*$VK+;RLJw?i?w@&~!gB*`4?m?MvKIM_8u{qj3rulR&&PAsNNlxGW_*nzLq zSUv8jL+|Shud1GlQy&=|GrGrD-FREOF_vadD*A?EZ1V-mJh zDSIwtdb9lA(quU%c$Z*~AsrkQ@afuoh5q57s)P|yDUY7r4ovi%A{dN4^U&+toP5-~(a!l@_nHqOmzH3LO3d^rLi)G9 zm`Dn*&XeBsi0^1s+6;A&(KwG{>$OlnV$&kS?y>Ap+Vv8xkCK|;~1Hv!~pC@ zAl-Kt%(sTigj0X8zcp0OttyvI+fMhhJyt<jv>3MSF4P9+Yd=wd z>7@r}KHwGM9UoNoBz#@|y+NJwePveQXj5Zvd=`j@gwR$#rHTo(%QUF;c_uvwSY95} zwJ~_RRPfAdjIy7*`0e(mxS9q@X#SjP=VC4~LBVtZv0h_?4exlxy zi=Bo@Spb&ZBWzJCBSOr3%1Y#zikT_&&*0fQJmeaP9-iD8eklbrPoaYZjxByWL~oO| zKP%(_$FH@X$!ZV%0a%V!iasOd9~XWjh|cMfA``8796z2k>Lkv&S{Xp*gF^==+;Eynfr)I^dVoPlF_s|*U zh818UgeA9@?z6!ju0)v)sUwWGj(AAQ&-+UANRFsG&1y~PGk?CDIgqfK^BjKg9+Wi0 zGa15Uj_=UYNcje;FQqdF>^EVqrTqA#majHsQmAAduhG`DRr9Z4D08Ri zFVnbaqd&=xy-XRwz_P4S>Za_=KCHt+i#%Oqqo?es6|1#+@qN86+$snh9C9i%`}=I1 z=5lzNW?&}!D4rLo<3xI}g~B0$6HKB1h>ZOP=^6F?tbyIhL>0J&xF=I~9=_gVNXvmR z(X%nEk*{0lE*MkJg%-|Hv`~yuh)f05HEY%|9I1c+Z0kccA3^rvHTnP6=BXq+RKBTH zRW*%jB6T+3NBpZmLMuNpLj7DCDvdzPN@7?Udp{dJ^t{iWMI(p%L@qD=GFc&pb|aul zYH?K;79Abp88T-z9qh^HLxf>~F+MU|pAr$43)%o){|_PbR^?R>8Ny#TJ#~u4wD4H3 zrBxTM=J1x{@32>LTv0LTJXqNtAy9;FC5wJ?|F7!?`^^|8JOy@YPBRV}Im5A9v|_+3 zJE^JN8h#DOUii38j-d?=bD4^DOuF=wB=&Du%eK;*#G`rNs7=hm2ok*K`&@6#gQHO^ zH-TKla;-6WYg#1MF~ZC!7e@pNLL@ntw4hm8&bS&%SWqo^N!*JafGQv?fai_v2y$Ox zg9ko}Rv4&;&`FVZ%eOJOwu=xzCj$Ja@hQ31wIK^$wPv zDvXD!sOzI*9%AY>=cg4&%5CferhP;Uv4p}D&A++E%YI-7`r_Kny?PlVoyQ33(&Whn zd)6=)sYs?&3aF1=Fr_ydl-G!P2dD!Mk*O$9(Hx z&m_9~IicGHh|iEG;W7}hiG-m&bI|k*GI~_?N`q*XAX5-|_Hi!48AuBz`N(N*((0$a zphhMJ7dFS!U~SF%R!;Wigw?3xBXnC(XV6hK!v_OvF-v$GFg4Q>9E=*tcbs05yiH(f6t=-O}8Zf z)u%g)8jWg=UIRpPXpuknh)@5gIh(nEKY6-!S3i_Yu7#QLN@q2n;vm;?CVtC9L%P@S zg4^O>pBh`PLR(R>ePJ)Teqmx5cU~Mj^fy_cPmqjT{c1=~y9Ls8D2PXo8jg)H+}*iu z2zg6)gsRL4+7QS6`>mdv`X7h6!heV7oFikt>0kSQR3M{d`4Ue^eJqVchXqzCE3l8P zxz_woUkeuuK&GW*72ReXI#Zu}_}*^J-zM2Jfk!(s?PoOS&QkL?$u!faM?Qm{+h&@Z z$MI%+|82iKHc!PF1%oY5F^m1Ml)v>1z7v?CwB4ret5~NG<7SGDxU9wSkFl-j1D?4% zz+cbez8q?T27m^cp@F5~c#*QHoonBtuW#k?gkGDU z*&}t&Q(XW-yNpV^!JzT#MBK|wn6qt;(NtsX2yn!#DguABO|<5c!_)an}X1z_1#Iv0IqQ5uDR~ujCh*m;VLz42plD)7*vT zM_7e7FWFPTyd$>!6b!yZZaTU;!R5Kjb_p3OG*3pgaYQ6fqQ)Jg;7EQFIE4USF6MQd zirzBB1i-*0d*}@!r>s`yXt^bzcLQzhcy|WPLqM+m=t105YfgD70b^kFy{+f6k+MX_ z;SGf}CYaekLVx5ztwFp&rUkRUd|6<>GC;q1Iw|#A1Te)$jKXLAnIkAB8Z~hKbveL= z%q}D@;{8J;6Fv}tZRcB&$z+0%_Llit9D>$1CG?2Ejj{LT$%R`*30?L5PFp^vYO9tQ z?*0rxU<-N#zY>AoE2eY{1;%l1{iQ^_E^^FH{W)&_a_+9PQZ?GyF^DvjB!3Sr3u-vql;4JWvQe7M5Qjbg`aY& zc}tUgL}~qB;d7`N*w5XJG(A{NxW7pSS;)^kDG>1FlB0p==Fd%n*T#p5^cisIT)p(; zP^D+ek|l!lP#eyF%o1IU2cQ~=?WKm=Sq@Q`KXc2RpWdELN+u+wjUj>CHqP3l+-tkY zT!0m<0uEW?X%RnjE(#)kHh8}m;DyprE{THD|G_P$5j!~78mjdv9A`<7C!PX|QQ`i{ zT7;5sI*ueaR#4}sHU7NV4i*H(UXKdM=8M0u;L!LirNB+^Qs_?fzK{{r?{Lq zAi{nq)`|lHI;6GDY>a}@a~tSQq*-;U z-H&~gyR%l3me(2zGUc|*r#Z{qN^DP+Rnl|j7AQHXI%2;GU(s8%G7?Wt;dN!g(}xJ# z5Y8Iu&{LjQhNDbizJyM94SO>XIiEZ7#lli8FTwv%W}8llrTsUGxt)))-Uv<$*!lgJ zqRpFtCF-D9m8FZ^ro_^Y^h4%BfiM%R0p23m806PD<49P4xR(tQ*^QLJm(o;gby>1> zF|?vS&zKN2w;Ub95-#C=DU(H0x_U8b)hk9`O6M05V5RvhG|H^mfTT_L7thiQE;~hO zi8|hr#qrC=er^6qot-~WH+(G{lfUhU&TVkuHCJcsl$dSsl^drGlDG9SpDg71qs&3f z>o6^8LwRF)NFCcf*FFa^*U-(T2w6wF z7qKlo!N2EqAaR0RHCVcRT}>~vXU^H1Jdi5xGkp2f^!jRvJbUKWdn-FX&j-@XrLJZ# zE86t-@-MF#5?LN785OfGPRIGKU8mvKrx|!2uz3i^#8%Yl-#^YmM_*P%CnW&36A4E0 zbAL-j<+;x=jYKLI4-kgWGCgFth2V;za2fDtcDSU{#fE>uq_p8T_t1z#hzZ#pK?2pCRN5V_ZGFfV{+cA zq^FGVo3XwIyFQ{A*-v#8hl~~+C$Vz*+mY@WGA4Q}D$~)<2_Rxe*@4oix6%p3~WV&$pyt}gN^krs4M1F6u`S=3{ZW#( zb8U{e(O>DW#l8%O3N`QZ4Etg!aos7H#@!4_!-+3pYR2qY5p|tYSs0Ez3{NuKJPg_9 z7}toYd4Fb%r$v{Ai%q`QvDe8`)Z&|j=h$T&!C&GV3hG&q&FLLuguWBXKVPRdp5=wP zPdSTG6PLvEu{+T~+Qm)y7hA;S#DtsyYVRETw;fj#YYoYY+i0W$cD|vjbf|qDPWR^< z!kS^br7>S8cCNPM zi~3&SZ3r*_sQ6Jxp&T)vO)sb#X-hn-P{7{`>O{XWY?O_v7m&r7ZwIBl4`5>q4C zRwo?cyJih6bq49gTMRwPCn2`^!GK(BOg7^ZO1lb*Ebz@#*F>@x{UUixbbICYba40v z@rit{oexJT7QB?ect53Ez5vkk8-W3TS!KjLTOdnp_astfVfwi8O?3=FqWKvL+J-h% zu81GAg$*HtrNw*R>DSXnCiw~9bA4SKf(WYh1{-$&wOg;YRNMD5e4{9<2t-{F4bM=% zd;}j}bP5CTkSeVFKuVT;!ECS3;l5XIWUqqN)dNNh1{V>j3m29nEFV-!;0hI8k=Y}n+xQNx;DkLla!H5_3#%}b@`MPhVlD&re3`>L#!i1rwQlu z_}aGshl9P-alRV%iE)=y`3r2lIt#_EoI7w0FMIw92B%-f)yl~~;80#<(Wr{V_Qg%d z#LIR5q0%>m6RPp69lh8=Q% zbfMXn>6b8qeS^ajR-{=|Bf6WL2zOlAxMZw7^`}*)$!h02`1hDW6EZ3vgy_EH^Y59w zxi{jQ9cMYR=az~PdWthrJIO32?ngf}w1rM;qAfdqzlX=j3G{nMH+IxYeH6AjwqN#3jLATD;Ik|RXAtENW*NK6O1|UvQ=(K?1tZDt zY5ya@v81{q_O22H|L!_?kH71aUij!(A{L**NfxX!OJOi$+Hxyw<)Fdid5xe;?Gpa| zV^3y$aOCVGEMoUlba_cUh$_tJ+><>52OH{f>>Zg$ULw-~PPSHWf~YOl51eVU=4y}) zpl*+_HrGAd9dr`JVA7rMzlqPI{E|r? z5kZRja@X#@{OwBS*QHACLB6Jqny+wEQt>;a1kKwH-%_bkb~XP`=_k%<&PAwPaje-0 zD_Be)pGT_-*BMb6goop)Yyuiet~{+6+yl#OWp-uq5#=V2dwv!n-)bb7g6c92Gs`3G zM?c6q9;Ay~r{Xin!HX7u7>*uBie0sNIe@rk4+{!@gG}xiDUA0J@fIRQUwR7AB`cl#uc!Fd-|^!=z!R8 zcZhEC6KKU;65(>BBtYQecYLBB#0B<^C<)w>yS50-wy+MP0F2=u zkGGoG#Ws^a&k(1Et_q4FKBP$Rtn81YN)V;x!4qniz2F=SOM%e_y2wK#rGnGZn?>QN zg=J~3ttp3T`1GFH8t&ss;5{7weeg}>`U9cK5 z*)tRfO~~<2h1P!d)k4+X%&zaFY}6bWg0MoH@MB$VVgu&CCWT*k=*w4p>-=5^@|@Td zn>UFpiDQGVkC7Cv_klVcw|V#KT(K|;VPmFFQn6bOFa~}PJ#$R$Wu){m2P~68x!EQ6 zzxaGeZAC&Q4O!#;iby$FPO2gorCX#~MN{asUawN8%8-kVB7GUWQ;p?rKvs~WbsD?}KrL{MpC@pMmum z+~KwK!Td$PiYJH?@JsMe>vTXM%%~Oj)^G zkpzpfhQ`l0Ih0DF%l;8y;3>w_9X`)I4h3bXF>qfrPwV3`D*7k53nxXkQSSl2;ZhsA z6jpbVEUnJ_6Qavzt3X5y!+Bd3Uvhwat3U=GkjFTbvaBcHi+c{|!lx6HFKabVqi$Il z;4Tbf-)dI+98b8T!a6^65dk~?+znIG2HV96ng*}|;CV+=P=JIUI?H~+s4MFCc;}|U#UfX*+`d{59$izk@=D&4$_4RpdtNw(+c4o=fv3i$F zui9q0r7ZN)U0%2FdzR5nam-N(6GWawc|s%Yi6wP&$$Srx4bJj6Y!EuX;^$<^mTFb% z7*L3zMI;n_vKYn|O(7Ip#`k<~{Nk||iac97$ctx;tAQ8vrRMK_i>2FB22UdJap~ME zEm@kI-L6c#GN$l@Nn~GC0pfQnse_xM=gzXA0GECZRiA9!FS9k!Y1IB!4i_=8DG6LJ zvOvM034b7!nh&$(1{FJ_P@*-OR_JnY`Yy3)rpB1hQuc$o(hG&hEFq(hWf5CHIP!!p zEtlHJK%6Uj9WnxI?eR}y_Y`HH`#15z zf3tjhf*>2LH7yUrpDroHu@3|FSW6Q=tOzkS|vBOR)qx$b&}YLnpGv;o*>x_wkCBww0kRFt-e96FqEZcJ(#~$6KKmv97_Yp%)1!wepbREX5Q}mqyebeybHu<5` zJ&$R&#r6nVLeu+1^)!?7oiKK6WP~v9rl6t=^3?H-Cj+ttkjfrsZWB(jb2cQ_2hWKd z><69;YI6Z}i>+Hrlt&XG6aR{kG&d@z_9H^rv-cP&S^o5EOs%p zEQfbmLa$7vAMpk2jxry8ENjAH51q^KuJ?83agm{=i0jxE=vxM(8ql+~c}Ouoa|z|j1Vkp`E8ju}Tv*c%-LZsEA-Qj^A z!LTTwK->{vm?VE)UrC#G0|e; z-y4n18|{%P89HP|Iv=RFN_iS(*Aj3uR%`doVO&jLRZJjX_CrfIs*nHx03h}mcsD=` zWQ@mW@$kb`Iq`Su)2M-m!kCRQY_o`d5T)96Hisma=&xQwb-EO*qc^oU`XLz*W;I+rwdz3mgz-r*^N(9#B}kjCF8)5%{jpq$LYPK8YdsPsh7xd`=4l{#_`fHz=lOs$-C zUgkkcq*FjpiYfgJR<7u14x3Nc(iuM1MUG()dBxKHKC-_!qL$Xrnok3yriMfLB44;T z+FrRCnGRW^=rn^KXtgKx@-#y4g#s+k92W`w4*#pQKi9~+#C z)MsO_H>rcJb4NZ9aaewdQeiE8a-Kt3EC%^l-VOw|OM7*wpU;_TQ2;qly)0f9+{(_))89$cC;q+N5H0l z=Uv_j?yy>VT^tV)pAwIjqgBee5)?<+&Lok_52%geG;~(*)Qo^^gmUxkSkSUJ18)v% zzqC2H>@3jGm@QHFeB{`LA_sJab&yt}NQzxgy~O{)Q&9c5U~Z>q4cx{bSVBP+(aIA` zpCiV2YleGoU zK$@r2Hsy(*{D=k2DTR2hhc%g%~*|7QvCY_usK5rX@L7RZD z4^56jy^qjxIq8-?B6wDC{w*s~*$m2>av){HEFN)sgu>!?Ekiv}R3v<`lmQiDe~spDWD ziW&V-LQ|Y0sfa_I!oo$Xtuv>Ww3Lf`Z_MvGN!j-ecDvT1kK6co9j>Klgtzix0%2-% zgXo}W=oF!B=oK3Vi*QQhSTD8}qR-^T25tHTgA)pN#Z$EQx@l|j{38fBG+L--w>#LA zlJVe(PVi5U%0Ty4II+RaGu<-xeI(}gk9G?b-=%_Tjo)agALgbU3F{=Zs3}C-^g+6J z7tC$c36#;xSf}wpvjC}0Ma7ftPI#&G@kokNSPA6^ zy%F~cRfyNV*juOLrM8V!Xvq4}b@qg1D$5|-YV?>d)Au>2{?0&aLG3k$eo2Hq(e#@-Wy|0k=`X9(r(l7>4=rQRMQf9* zFz;;NM&Ef!ttpX!9Y6qbVJLa;Bf9z;?Cxd+V8YMoa~L(<;;O&}DqDY5g~)}Gk2{B-;vKIe*xr2J2R@q}$V|bl+4PFw9d{TYjGKu)s9hopv6?6t6Q~9Vvo^>6?jCE4g3R z1Yk>PfXgDU#||S;hyVZp00t6a+Irh5>B9X$n4~i}g$qajs{Gr#-f+%o3R8A-EQT3| zv#3@AX@LBQOoZ`z>vN-u6w1}*u@_Q0)S*tY9s8l}rplg@c#s~lcbR39xK#VH8n}P; z<_RPkIN8RSi5YvEV<>p6*BWcmnu1Pftx0oO63b~hj!JcFrY~s3P?5R^EF&OZ5`faY zh&pjFJ!{L=Xl0Fsp8+bWnsr$X`HNU*ZkjKN%(=}CJnsc|NL86(RC&N9v*2~bxQu1w z^=$0ZM#0Kb9Xu`;pDI~1D0n^s%OQ^8Bw>l#Yp?-Mv=bgC;VrF0s|NqQbS3r;mUx>b zT^&oRW=K=wv6PXw>pX}<86~IK9kLnIIb|7QxT=fN4~?|fQ!xuy-dp1`&7yk)zrCujg+vD4X_WI_j8wc<}z-0X_xtxFgG28G0 zb@S(HwZP^@A4A(GN0KZ0`!^j&d?5tlyEGxOdGIyLOY$$`;!YBXX0m)9;CTjsJmx>H zgCwAPJi@rU-Q7nSgi_0AGk%7`v2Vf+_RhF5x!Sn~o+$aNOlTaJ0@FnN23 z&xTe0O?gqFAf*?W;Af}!#h)BVBOeuI`g zEkionOka%~NyGHLFFTUB!d~iz`%fnyNYrf4*obo=ZcTawtkQD_WR3LKGm44N$9cks zxe|0kE$*q*V4C63dC3M~BfaR98@D}9suS3Y?f?o@G^0Nehv#$ulCfE2fmL&eDta|O z8u?CI(p#cu!4B8I(+t?qDaS7}!(GR);W@3{eK<=f6 z?9P*ByCccRV7N?~Z1~Hr@8l2VgkBM?{cY|b0cr$Ol(;;k+*_ZPcWqGoOWFXQh+QNQl*5C#^MwN5 zcK&)D3uDEipA$JV?-vzx`N^OiWqEIv_rq)vvR&vLn8<@pPoMxGK3aML5IgzfSm!tJ z5Ta0uJ!nOx^)EbpahH#cbJ`OFh zcW#AQ&i4w{J^jNT<*<|f~U+*C9A#Bwa z+O!jdT>BMwMdK#~W30*UTwr&Ay`i8{G@Te6nKl`Q-e7>5kl$fAz!-G}Ffm{S*nkGb zL#5fOxycbJ!!=U3Bg?|1JUL zXa7DfUGPGc*$IEX0ZV;go8x14VcOYz7PIp#>HdPz0ERT&!3ZIk`(&<}f=`>YR+&av z;ay1hW1%>;u5b=T-s($kZDxIq54PfLa7Ge@xHyi9!34_8)>8U9XL{tl58{-b1=>pNhcDlQo<`!LguI69hni~OD?~= zZenrTx0eKKG8NZ|m z9#rbr;-!OXV7h9sbkuk&b`W^}lf{B(SASK0BS6e&VcVp%R7-ztDiJ?hU+ zDg(G7aP{BKlw2}+`()KMA;HQ5(i-WaI++(k5Z?l!B0~RLL$j*Sag6J?Jaq(0bk2Zl zs}k^VciPfDtET3a#Xa*Vycrj<%F$K$Q;siD#0M=R0Zf&aKmise-loZprBectdTi1V z%H?`9DN4lrdAkoQ*@9Y*H`r^^)dq7)GP6L+?Ka2>si|wnxO`$De{328ptke-3ky{E zr7{BnF!b~-guO0m(XjKidl{~#aI`2*$RrAX7cf!fz>zhlwDPhj6@2i$bMA9~=DO2}79PL|FpS$Y)@lb80{TVs&}{(eR6|Yee2hKtLuTbkTD7;pn}Kerx+&5pa=WSAo<^jXR-DUs!)YFGL+$T066w zoTF>N$^DL7b8m|8x5Y1Z`5nz;J#e+S#LCryZ!8w{b6*jJW4LPy`#IwaI4D9U$H)e( zyD}iULH6>yhJ4Y4h3J+{y+hoAEl}nWV8XU5>_*{KiICsDzMfvGtBf1J32{LzUvlz& zGObAUL^gT3@)!+XQvCtABa=3Kw{tL#_>ezKuM_7X_S|u@n662EdsiV(nD^_)ogS{f z>8b?0OW3he8vG23F64hoknM2J#pH-u5O#?*Vz{RA;EJ0jx-tOwytr9R0H$$%4PZIN zn$#2m*F)iBD7|B_YHIB1R`y@Cp47#nHN#-Z^nJYkR~**{NcDn}%`vA#H4zo|+$re6 z5|>8upAL)xZQ{*KygU-|gyan)HK&T~2-O{q(y;-Nhl-Tkl1zN3fcRPfJ3z$0zAXmK z=&gz)5X2T`gVhVI(?84+I_DL>j2v6gO0;_Xct3S~jM#3q(ji<&gnG{&|BqFS&z298 zX&&DFt)Q~zmw**fLdi=8mpMp!pg?Omt>yEzKn2rZWqVKr36KS?(>>k{8vp@abGAvB z$!8|Xp;j_=i}LvP{F_Izx|5ipeqBw|4BK`;fPRX*xf5}|QVj&^{~j~G!*opr430uL z#<*Z0$C9)>?mUVRZ{-6&e}iA_Vi?0?&I=lPz7LXnh;d3G1dWB zzB~9srdr?W%mgk5(v}NPO`sEus4^G3m+zCz`R;#g%BG0mWUogij7bq1VYlulE6zCQ zL`rapk%iq~lI|?aF`X5M0cX>ZSV|}|i>GIRrlqK)7h4f+Im$+n*8kE;A-8jM%hfLM zLh=`T2s;^~e#{}pC zf;+tP^Fy6JxIQ<`Ym$?KTf$XkcCQ@HV*kf4y-N%7Sd8BO3VI#OPiNBUlK(R$q@$-Q zxs47gcmWfVdes|AuGlmY!7mXH!^nbg8=dPf+0(|AXM8fCj;eChLcM{DoBEQ2WEYl8)YM&YozPVA1!o{2 zs)l!W`z`2#A28E0A1Ed(qphugshiLg(1v8y^F_XdCx_`Z=%w}l?^FFeQVhh#^ih`B zE&f)#bVKXx_*mE5qoD55-Zj??24OI^P7>L~pQj_!23BCMTSn?}DjxMnB3xXh_d#?P9;9waoH}Sr z(#I#c+|)c*)Xwm->#Oejvzo=UR!XeN{h1zKSB1ePAkdHiL|(KI>xKW-RRAPM7}qYq zkY4k1X3cJ0Az5(964r8vgT^1hFC0s-E(u&ZU9@-K4q_#vggOBig=^zVLv5=Ez+oOB zAP|N~Lh(YGKr37kTL=pJTwOHF-|u5$n?y|RP@A;MjKfY(hHF&{80pkrp61?T1LkkU z2P(n7edR(tL|B4##7cnwMD~ADJAv&dC&w=W4(Hv)S7c5tk0gYa!wRCrMX>Oq5QiHS z=j8!YfOWx|NPr#>P{Kv0-5ge{-}{+Mi$=$DzPZ`rN^c+^ap(wt?c&9fE_uRD#bLXfi=h7miN*8 zz1{FkMBb4KjWj@*8#%oV%sh}0X9oZUI%sr7u)Knfl2LKTy1-iel;;MFbshsd#*5%M zon$y)9gyRmsi2V zMXiKC@j6H+r#6d&x=a|9rW1gJ)oD9#*$`QS2`!NY>r=MDK8% z^K1e47X@H>Q=orY`}Wi|C;P73oA4yR6Tl~lSASME)%O7JYERT-ws3JGqPW*IY3f5; z#Ufe#)Q)Evt$G^PvQp6++R*vprsGj>fN2D_mM0_t-R|nZ2d$iW(LuNt4xue0OI!iA z?KI!tp?s}~K!o}kk|6gg)F^`eF!EJH@$sd}2Ivrx2usDrmHWJD1MA&r7BP;5EqczF z&6Do}h)$n6*`a=kRRV!PWC2wcxCJ+5FVL>H3O31BLSM?K6DS#R^=Bec9R5e(ej|Vl zYI75em(_~6MUhOfa~brvFfCG?HS7vGW^0IrBOY`{_;Y#e&eWdAWr6ZNDgmj~c)+ko zOKd5ju=lw?wwZGjGu*ZE_l^x!=#G-0+^`ZMEXC?VHM)IaXQs#`ICd}KuTY971r_s@ zYU&#LQqz*&+0>PEWjTlZJM>^14hF1L`~x76hvhd#$SJI2vH&)j0Gj2wO<_fL0 zR${i3sBF?sHw2kN$a8H!y{a{uE1X!D=yP9f)Y+4*&q+_iafzS0GntG1dP_Yoq7j4c z1RqimSjOaGrQ&?F6owz<4)kran(a(NcZVmqf#}0jlGls@hR7bV{{lvVrh+_r*gOkk z$&kbgw@(#sLGmMheo2}KWI75QlcO3`w=}+In|BK{G;|!d_b19)^(PRoOnll|)lnOJ zk^yEnv?j{BaCTTXP33!e`G12 zMuxF`eE9{*-{Z>X_%TKNk^ZpAUwQLx>y!j5mxwx`HB<*tD^UxRB=`wV>hrK+vjZ~Z z?@>e^$~NEMgKDr-t7Xer6r$-M82FOhMLRmOgrR~F8N>yyMKd=N*Ds;gg7_1 z*TW{~QEUC1P|`i-F|sjOBpl~^!Yt-{C)J3vn1@PlBGZBQn9P7G-j%huYpME&CFt=L zO_goQi5uiZsAlT1UzAq++6i3je|jkLF)*h+t5T1P2i=k}H4Cou6x5_r+5xTTBe73P zgrt8L?FzI`-)F8P)`~mBBfL_SAQBFhacfF+uyD}`_KbacjWFY7SW>ZY!6o#cIKSit z;=ZOjbPCvr@N`59`gk{m6y)q4L}a9=gsDBrs?Nbq7-N7(r5CrKT0I)3mP%a^-rsDK zvAEjUvOIm*VmCQJ*5{zCSggk6P6(yh2E0XbkYbTY+Koi(Ga50@Le7TinJIvljb4za z*K2~e`8bv{7hdq+sn+JW@qckngeK(c$67ddNdvv++4Vw9pAcisCW(U(?c>%HMoJgh zPwkcCDCE!7=LbeXkU3{W9fqO(6C-)}DjmK8G2vl`A5yxYmp#1&&H z#~jn4R28-id1j?&vPZ1v5ZPFp7J0Om6BgQrde#JWk&JYe)pD}-%XUcz#%w5PL5;_a zl)uPjL$NM!XG+12z$`t#HS9>UaR`6lX~+^Z`>pU1z6vIcZ?KOvnBuwZDmV_vtXgW$9R{ zh?Pbe&2Nh`052$2=2Nq*Er_y9LqaP8wTFY90|R8Fl{`!@uS0}#NdKVrY2HkdYC(U6 z%Ju@WN*sT`e!O~SYIc{r!S5Md#J^A%CKcCm8#0WgrE>(+Z-g6rbdSoKzO_7SL492y zb3*sK@5N0|niX{4U9m1Y36z)Q?G>7qPPfcshJ}^14=4$qMsHtESc>@}vz~J)>Z^kE zg3W8es=w0A$hUwRy-m1rl)y=yBnJGsU*Ir)w)Mn)5+?kxMfomb3^2{dX+>P{1ndwI z1lh_gZUK@DpBqxnIy#qK)hF34v*ny7wNms-;=a%YJbw4{D4Jggzs07hGSS=lT}<*yXEtch)ACL^a-jNajA; z794Bc=+*W3e27SD2U*Hcg6K+&>gzBF-vZ10#aC^RG6WTi^*XG`-VXw8sjrU`rHE&~ zSvZue3K*WH#UdKDnBa3#rgIY#utqR^XkpT_m3M&Nv)EVRxzUk9n1T(pY?{dRc?&%r zSXZ4=Q4qO)Zgs~$#9%Bls32>PS;&DQEVgBX1E(W=Lb4*|Zz`MJL>X@Q92^bVIiW+BVs6IkUg z@-momTC7@}2XZ>4iL39b*2k- zKj5l|{iT@IPZ-*OQTNAXHi9h%mW+~LSVCA}%Qr@^JD~eD$&E%UVW}c(9v0c+3sOLu zI0R=CrCB=Vr=!^KsDZN>)qLmiYsUJ^jL4DN$;4@biH;z1t(pjfL%d4MdvGY^w}PLB zaY@G3!_xSYq#uxT0iPsAt5sbrx|49X%`)rK_M*$n{(Y2tNPzx}bM%^TIg&}qrzG)d zDw$q_mf7v7r)^@r3X%(<#(HK8#8ewkUT0yrRnnH2ta2;e?II%fJgfTeoe4dm!WJ2& zzAs8WL6e+b!%AEyE^=FcAgBehLb7?_@P0s@s8=dXcxvF$#Bh;9oa-+ps`EE4zsO6^ z0>aF_=mRfCEBFoztV*4i5%}1e*T1)|JSX?;quA0UmC{-6Rvd$tq?3WEg6p$(ybj>I zoUNoAkO_!!D)Yj$8A%)-jXh9c*d)}S46%<*_7z9BaX=dz>$JkV5F{HNsCwQXxkSo@ zyHnksGg|>FND0o%z)vY~R4(jYNgukXY>wd@=e4n94Huy-^xk~ORW}vAIc^{lX3XYV zl6BNm$Yfn-{e3#Frlj>DlJvK)lc@5j)$Uj9xS>u&6oJ7RPPEbU0#l-cK%tL_?!4?{A3D8w6epAYXho0~cT zyO#&EP28#U@ZZXNBkNs2%q2TSUixVuc67}2Lf%%y)AY&a>#x%!n|Jt(EgR{mtm;}& z+rfH{mo_`m@5AI2joprHz2W_0#*7nj7T2ay9oK;wL#N-kh`&|VHO4_Vf(8|9gV{YF zeH{m!c6{cPfd`d%o`pHo|L6bmQZr*(8z(tN&1ice9z{CKaDK1-$^PgpvT+I!8iyQ0 zqP^0|k&4tDsS6ZD`4_vh7Qt`ltSMUrZmE{9HLg zO+{c-9;Bqy&u=lVE5a8MM0hd1OV0AAS)nPkL+btZv<{bCyF=C&j6q zNw`{?iICr~)Pl~fq8J{dI=n4_XOG63^Hdlr>Sc-9Vs2s^kQM*{WEc0r@&*lI94LGv&b z`e*zKHyNMr@u1E1*h)fZ6e58vVznR#o<2rH*2peTk)C18Mi-ol@yJ-T-3KR>>kHiC z0xkHb_X8CX=a}G&lpA4o9FApXHIBI&gI3UWXvw!>mv0)B?v;6fN)p-505CqcF3`)F zx>xrQ)w3*nTwLel1E7b5bxD6_!eeign0E(YKJon7#FG`&SI5X5Wf1*|U7F+PmW9@B z8=YM&=-M9r7mmfbTlu2nQmE+|zA0D#ADEhh$CsRgI|+o1s8$_~x~R^wazoQ*muRsaF}$P&lJXx$T1x8C7jhS!QYDoZLw55<2V`9)3C4GKEru6?i>guuc3>w ziob<6FNXZC%=~bnlBJEshPf6?i3d+OTxJZ&bP{)w!nhznF~ba9+Hd|pL_UUr$o&0& zouwRVf1b_*2vNnRfzS_txlRScsJkx{^Z6`}(*M%I3C1${H6FMikWI*1>*D$E=>s3bJC9}&#zPsadUO84-RgmdY7CIx^0llG$B@)Ex4(Y zRy^<&umCmg7GBjukIjOLq(zu68_BHg&UFUKs32pE*yl5$XL|O*0K1-?m*Irf4VK}X z74vG`I}tA7HO1`l`bm4fMS+BZxmU$AvIhnpQWsGs*rr_vz3!=9Mu=p1DHH@J==+^{M7u7A3KY<)H$~aFd*P)5N5O6_<IA8d|u4#Q-A- z!FJf2?>T__ZAOO$W?1x>bC~f?>W6K$SFn#hGT3+^xXW6bnrf=H3lHT*wi<;IKVZds zLy~SehdZ{J?0C3TfySX>FQ?k3;_ST8P3OEl6%=}tw2S`QZe*GZqi9eu>{#($fwP@; zIi%p^<-bB421S#-ogW(Q)( zGL1$n466aWl*@F#U29Q$Xnc7UNJ0a5%xu=LG7fDK?iD($T1)E91Q|9cS>?TQkqEs6 z=)Ojz#P=^|6aG_3dw(O&88g?<5dJu(n3m!j`Lx|E_bc!$Lo?F0g3U4w#+W+rT7G>} zOfU#{rV^X$x?|*RMX0=}4F92)dJ!;9g8}>Mno?U?2egQyJ=_`s!D?~8VrnPS$a&Qmyml&V$&_i0zVmNieZsPU*4jejoD5=IXMN44k7jo-Hm594ckc(yw0x|P z)mas%iob3-p=6ophaGcI{Az&_PWb18_d{pQ`e@i~GM`?phJ{9)uxa!57)Qinzm)SK zuoUBla%TfwM(YTxHQ&iW$#MoZ#=OWA)7mU(?P|rp9D(`QPI6}zxJF7X(sL?oMC_iS zo=OU*FT%U<`Df4LaSmcn)ag|EK}r{5TFF6?#4al;Q-8CK*_iIJM{Y5p78vXv1>n6# zVi0d@u4f|hXM8MhDPyxX+Z~y-0pWp@@`ZWQ8fTjW>PFmhs54pYG>zji8jRyQd7j#; zea_S+rOFXyt^zk*n=*6^;k(67h13F(iOb%>QB)2Gbvy6rHf%eoZe;V*gMg6KNEB*| z4xbh{!<5`yAv|@CbS~wh@niVb%x>M^MUBzwBEH;2(4-rfgxKnhC0iMlgP0}5mxjx! z8>EMPG%Fu{ih~9AI_eR{t#>0b$9aj*ba^w&$Etv{c80UNY>H6Xd#6~QX9mW_zTYn4 zH1|RGgO~iL-5J+SBRedb&$gBwpAb*CF5!&Y&^~C8e4w3vCdui6*II&ar)6A zuLYWBsfvlx)2PF+VkZx(nRn!;t$0q% zqAilWLZTT1mTiG90{W9xH2Nrx`E+4-4m%?Cj=NA;pk?+$M zwts^ z6fJ{Vdia(QqX$;Vkq8%C4e_p?a;LvwPn~FAO4(y7Z(zqu}7pi#*;*{~1_;ZM1@0jGM2I2Vd=_^Axq9jnN%j(0cDETAn5<1!rH- zb725isiU)z5BC?Gr^rUL)`|IOe@Wwr`-6=uez}I6Om|tB(O39wQv)jCC1b+Q^TiBq zD665gUjGvGZF~3{iLTqHvJLW2+ zItTkc_#Zh%decI+C836z4;m)m$#v<7Gm4LTG$DJ$qZf9FAlA~%$}Jr|=n18(xTn?u zWbTaHKC*PScZk$Q=#Ancf)d%Au}tNQ3}D{B*>dZRw}(= zISmBR8I+}k&|X38iP-rLH#%N?8Bm~60c%HMGOMkIGZ|*Fu*9B;#k}+$@5UV!_c#Pd zHYJ5{Q~jL)b@slsNm8P0A*7nmrYS`+@i#@-ZwTPKP%#ffBP>2nQ4rZ@r}q(o0)qXh zofUx}Yuy6(@HA{Pm1!%~gH&tw=t~HP@Wk0cm1pL0zu!(w#`uyCf2PBKSnL%fm#HFt z?L;hc(y8{U$BiKgTL2+i??8e`J@B`0KYLGU$}a_9LDo|CTE)y5u32t@rhWjGwblge zr+`-1C@h&^-5a9*YeTic&bh$NCM9xtJwwX1&ShRCP2up4e~eV znp;~ITq8rP0EP>9|IlHLUhG7LE(RETmA#gji`LaGi722o*aWq4>A3igp-&)-72-#d zNpDeZ;sWt3sxKg}X&^2m(cvBEhX(VoJ*;-UkXss#9+pu8=AVA3^@XdcCqp*9Hz_T} z^eBLkT%a{|hMWfgR$K!Z{j91GIOy88<{gpCtMxXM;zmeK-ykWD5JY2K=#|yj7oGm}SXIO_(cou^&ygt1!X4L}{gW^F8RSL|@Yba@VOuvI z`JjBT5LH3M7+OP(m0KnYcyP}{t+U3GIzVBh>P-d;7T}cYZNA#B-n?-~Z5u=!?ix9s zYa!VxU_q1z27DDXCiktI%!MLPU{EYx*w`_>4t7ic_fv#rq)1GdVaaqf75q z@LK+?S6KLANa06OnOIRFlr;>v6tu!;h5PvhM|C9hUw5(WvUC%&cE7M5>@!7QL$3St zU+(CxY@K8H?CkOyt@Re^RBjIyWr2)!l#lQ^JbWrjFt zH?G^?5!J^1s6)#ZlPC8He&Xsuw<~`0lgbw?&Kij{nn=viSiV zLQ(CMFb%Qc816svOtQ>U{jj z>{kGvTRgIAG=W8r>7W$J-R{=c)rqdCA=IDLeWcJ4&&9r@baKU=6Mo}Y;ZpJ@nEK!5 z@wlp(VhJ6yH?8TNVSGDDZ0iS&oa`CCEvEYrSkYlfY-nHfe5y|k5A8=2((bsdW)~Q8 z5Y}+x@qvd|)Edw7uOlx?Yg;r(zOkKkA<5l{YsFVc67 zUnj2V{q$@TG-3d)3ZDU4JQJ(?Em{X*(GhKd#BaS18xSO)iu$AEQRtdjcm=$wj0t7G z$0dL#Dla@y_4b{z{%yYLbbxLZxXNi-sRQ6F~VGU96-=Of*nh?#Cz&YF52OU{) z{*$GK$)oebg{;AF;jCj=g-`3bXHy??P(b*ZdJ3$FZ{G?&OMz-OV1{T5CMDtoKzwc| zF%IbyB5nq5UllzYHM>><&DzdwZsaF&X=PMj&+1S_kGGnW-G$NZ%b9*@F~`oRGyo?C zso)GuTLH_}z&)?s9(F0h#FOk*!W^DF9=N{Pt0wBIHl5F1ijmdbO^m%`g>@I>)%$*j zH2MP>{EML^Lw$>-))os5g%#Gp!hTwQBD5s74@D9OkV_(0|2oThQYec=a?YKC-`Rf_ z_I%RJ2mR0-M>!z~hx)EeMc}T?=zIBao~9rDAB=>KIFrvMhT05kP`aZmkHy4>TwTYO zP#0oEs!avzdpM^GB4~wStqb-^NZeE8;}Rc^NztemIoRx?ck}*kE_O0)-rsw65f!KiLr_ zA@7aMe9Rm{^Dq$)Z`w!~aK_PMEx zstdwGu3t&uuB@o^>HE?C}x}M8#m~wWiMX5wfY!{;xX;1VP$saJwDBK3%)&$V=(WsfhI)Cz#xf zDc?EJdt`M1u|($s@GM}aG_1Gwx4%*s>=rKXf$MfeEMc)qGl|4cR!>CzToUzep_?x8 z)@`_9!QMz>@)rZ8wApz#ym0Z~5-1bcTg8dns#|z5-VA^K;Kka+-`vbbuga=zwucD! zZ)D3pJ{Gk-tcp!*wtK3Nq$splbT5YrDdePd6N9!121LsXUrwLyPe;x>Fi~&Yct|q! zJ$%wf%#c`XhtF}_8%7caV*xVVi8taw+Kqc^^E2}DG-u*ily?#9)StEnzlg6n7}vpE zO9|4hvLxX?8rb#x*DOj$Cnk9L>_~_V$%KGIId#oC>%N#7^7xwYqni^#KcS9wC7D){ z7Dnpk)j+BIoKmvo%cHT5c3H;9LQ;-pU3^p-q$G)EYztRc@1jvuK(ZQ~ z1E+{OU2vJlS6B;^#GRg%Z(X5`_}*n}k4|(7$&{Gkc#+=M6-Xh3us`ZTMM~M#rvUBP za8WoWioja5i-Z4URjz6#KjykH=EM7S|Z6;0KeNP;7O$lekp4JVjYiu z@`f@UT}V=IcuU;qk6RC8VmcTik1dQIIN?p<6!!~JFdy?6q+nJ9NMFTsMge? zp=GwA6#kO;T{~0E&37co03Yk>@PudTo?*gm)6bDJ$v0vd-1z)hsgkjB z?1dZJgI+M>1dYVTM=4DGVtP$yG$l&J{B3WlGa-kp_Y#Ml7*}k!~_aR1q zgL>Jq)*Pz-k)fRH6EB#nST;yf3#R14hKRVd><@I8feHJxm92%$7)kmNx!WIvwUI`C_A<| z@2ff%Ej_}Y+@UETXJ7tF0vZ9#l7wPq4kj7wSt5$IZ;ct&gaWv6hJ1l_&1sha#fEs23 zROxyPuh&N^aqurv*B!isJ=sxdMQiL({y4&6035)2aCslJM^}D5ja=8*g=3r7iZ#!jmd4DX;x^6ij(lwx}HRJ02{gwc|e^MeFy1_xnMo$M~gQ7Vq3~ zfKpo`uPM=}8#rElfkKCV_i}Qc zWPa0?37L}|P&$g3J^?5KwZM4&qkQ<=P|>Y1R0|!qjeLb3&9Z=mnwT7uZF?*i)(W8W-cu+T#~Bfzd=eA039y>L*Ukk zGERD~E=#CkV68uWp$rGzBP=&>6?F)+6S&8kpA;hK9NclPXuCrQm=4m9ah+ zXW+SF+Y_GXtJWXHU!B{V>Rzobr_8I$Y$`$2 zn^lp)oTf#OjQEZ1vlY;+DYNCxo<8QqEKuxf(gA<-CJ<7y7{1xv3@=;5A;5f?$K|+$ zx4`YrV5WDdzSWt)&$S|jsnFd2WJ4S7_gM?<1efwyfxP1?>6eV^&y*Od>ZAX zUi&rI_Mw~);Z-B2-xMH%;uYi4=JW77h2H^#W_w8_ zK5RLaX_xyNn=&S7czC9cmbSXi2dZUfjD~cfhgMJ*r4ep_pV!2NNV-RW6A?^+;mcro z>qtUiaz)ZsVUvhx-5m}N7AjSlxYpUqQDx8z={**fPGJZ-H+n~jv z9=hRFM#GUHL~g(U3u94f81Si>7KpTQs23C&8l9~=Jn2AQBu}wpazd7P3jZ+nvqgz@ zpPB*Z=Q1ur^|CX$0a8Gc>#Ol09rJHhzKfU{CrA(V_kj1oC*iZ?gaX%!m!&ieZO*3H zUdy*Iw4^;HiO<1+zM`6DqS>a*`zTT$%XcIR^Wr@yKtg*wvLvkj zUm(|@ID&h9OkbTPc2mE zIhTy2F1ev60?kENNuqfXTnCG3`wPp!p+-X|I3PYO)LykKkIJLKkL4tc9mHVQuI1Rz zm)3XQghB!=w3aRvcVBfh8ByEn2JRp0xPTc)o%2nXnM4+YqkgjLUIzIdBwkYag^K(G zEq!N|Dc*PYB)&FHY#b1J?F8|a&zBLv34&N(I;gjnlkG{88oeRfaOeOmTR2s@g)aO` z0beC-%Le?cxeH6w<*5xYlt15EXZ8)WucbM}pJuO)GToml*^no??Wz4IcS zg4!Z}_C;;A`nFE(f}k3uuoCHs4rTP;5-!CkKZyC`Hz-^r3}MCBzTx9@VxhEP%-**w z{6_L#(A?i~%n{8T;xSI^E|E*EVF_@fEgW56A?5(6@(pNrprUZI_X#rd4Qpa z4n}>pio4ZqBWSgibp9kKhF>nxQS1n&1!lw;wdT7m+TjX*?t6vKDQw2 zN$(yBt6jV2vstG*N}(@DCfkZm+fL+c^6+^R@suua4X*rSuv|ONDnBqAxdXlySN$N; zPlQaui?L>rmp>1&y$wh@4s6D&PjOxpQo9Cf+`fG(7SQ#y~&$%lU;)()u|EPv{Wn?T)pXk#!j z1#T~N6X>sL68us)?ny!U{M`oIN0d#+IOeAG~LxK>EXtK z&xUz_$>J4m@&FBi&-4(y1GiTa=7~KW7t-0X??QlQn_!^SB2r~o+g(r7Q~J@o!1*_k?R5aL-H0kmyZ$w!r@fw1%yLw7xaPQ?sYC$u!aM!*(&`~99livj zX0TU#T$5rFuvu)o>uIizh(KSR%f890ei&p$I8J7#V|FM)o+ZhY$iWf@LfNjH$23Av z|BuK|6Sc@b+?lRse6|=ARzWKY4zXaUh;F&n*kbN>|wVthosF z)xR)io#OE3#K>U|&pp{ow(P2R6xR2@BUh)cI(P8P)E?&-FL_IS&^hrVlRv3btWfdU zeKm&!AHSPy#ty|Cd-%`=MWY?!6`OWfg#oEkcHJB7tbWg!6|$=_E{gC@MYwX1M5&he zjSP(Vq1)1oM%;Mr(Kon`-ucuoPxxBoGZ@N`?)k2=f>aoUlCXH=TS5EI*LErK2C(Ll znRzkDJjf4enL$;{J<_MspZQyJ&8R!~J>#SnK@+ zpJF7q1V}8Y{`lVke@F&UEmTtrJjMXfPRO;yMxw38ho+=)V1i;?9I#@}AlmKVS<~Z^ zg&Avv8a*d&Ew2%Or`;M3*CAX+PicG*4)&%6N=&~Z1p3iUOA<65=>;XP8HLG@w*IR%FiKc z9sO>D=#AP8H^a!%3DwN_n*UG;rb;NS@z_%ot96`8$m^SI4J@-{A{v4FY))>^?Mfm&|^_CGEcgjK;I~`nPgH%Hf|pEEJKoi%^SMJ=Tt2S|xNs*6Oi6wZ1Ksh~N^~azpc8QfGd(V*f6MKz ziB|UZj_(wUD8}QtU1jXM;50INa(vlN*&Rz>%rs18`F_Fh?OyrcOm5Y9qi2Sy&p(R> zsfJ%$0D%xfaMkBID5R$TYBfKy@SU*iLCQGdxR%T@NF zSlKIIHI0W>9*MwLEh-r*}IBM{A&>0qryqq;kdKq(zJcpHBM>^i$7pg&n|IKsJf2K5t}LqyGk}W z=$lRj%5y1Db|$r;rdqKFFxe~8?aCQ^DIvNx5*jRd)2t(mH% zceByU@$K67Y9k0$o8KX@qiJHo;g$@A#vR=g%0smhT!zXJEs^gdsE_ccBtRV_hKr_& z{(cb_vBt;Nph#B~#{rm$WA*ve$59vra#%@7ekR}XW{B@|yn9yE^-om)ydfUYXR-l- zu@>`#Tei~!PX)LhmnxIkE+-~iV#wkU-XIfgXT@MGW*k5g>)9qnZ!eIrf+$1g&xC}m z!7;Ac7Ic&hN40busyRvUG9vWWaZycUL#e2(q4e{_sa3m;+y|X}^j9HF+kBK(E?Vl+ zt;PUL9D#d-Hw(d=MS1tJle=lwQGT2mM(-T9^d0ofi$z954HQl& z50I3Dzf;imqF(~#Ww{oSZMew`Fb3}J&sPb~Bc&?W0d2L;ZBb@eT)c}FSUo_hGfzp@ zre`U#-B~T#Q4)Pr^7zAD*LLKVoSQ2Kk_gXPiNC$^?Xo`LOEj)muBAJP) zJoeRZ_$?s4_0RzZ?(qx&iJ(u&v>Y>L768lpc94tw(1)IDD*@a7ERoF|u(KlU03 zZs;}BMsA9N8bN7TG+0~^sbu?TKAtWeZhRC<1YjTo@#$OBKFtwTk_XTUe zzMQ zd-^N3+rXfam5>m#i7>bo*><8u8vMpdak7?Pa2H^Tqm(SM9n6^G60+ww+0 z_x}K}CGaGZs@pF^W}9(1ndVDAZ&KFJ|LYiD!pq{O>lp<~&BZGjo#RU;f@B^a!rfsH zs(d^Y>#X3&Gaih&3&f$_sjR6~e+(?<_Guc5C{j65GU`cZAK@jr?kMLdN=ClqzRPuj zEaIS}Psx+MX`}`&4=a)RoHd=5`t zFGAe%fuelxl-W=7OT@1`N{(=^AbZf4ANQ`ad_?KyI9DRh?1oYXrm^oNiMcZ9vS#%1 zBBPdYxVQcFsbG%~7CS2jLg$k1Ydozx!g51?J+qb6PpU5<__tQdB4(6A@CE|;o8?jI zbZNlm8&oxR?wUkBbr6_xBa=tlLIA+oKzN619PY*;4f&R&kUAc6Z4TAf|M~L`)Xahf zCFdh*fF^3eI{dwbgNv@(Z~QDXGrMxY#9nl7g%lYnTa(B`2iPgg-YTjht@D5ekx$h7 zq#Ct#V7gGqadQ!-)1nA3$T`Jf^-BEdr|RFW;Ca7Lg8muc*?~8xs|9X&COh0o;$X~F zCmY-&CcpI_ui??B2Na|fiuswVU7t2Oyjp&BCid;f@p~INtN`d2*p4R%3KcWWPOP#Qmg@5IE;55 zNxBt3ltiy3)JfOg#u)Y1Bp73C%PAwz{a)tQyh}rJJGpJ(3Xm)%f@l(R7hn+CkuX~k zFyP4t61?82gdy4C85Uz_(+H^D64SE%AR;Wb@4tKJp&j^*gKzhT$AV|d`6(11`$LCI z%bK+tO0p0Gd;l;TyO+~acw7i!TR^VY&KnP`nIPv;d2XKrt4kYfs-m=Iy`%z$)yIUad zNlhkx*6@)c?heZPY|V!rx{#9m*@Eo=oeblGJNDGXGz(u+h&|pz!2}A#>iqpusfUG? zwaN%_5ggir%2?DOAUalB8My2wNbya-V_Txb5#aTZ9ox2mj}d~~@w-28rFOydGE|=N z_I^Te{JLr|Fer2_weu(`U@j@2r53!C)@Mo>6c)7eLP6rDpu$~9DEs_)|1S2e)a~$l^C?nd*orTM2rwY2tttk ztu=l?vwh}z?ErWylZB#Hzu$T(WkXcndUx>&!m{kfZGV8uip-yQoaDNSe}}x$e`|2V zqGS-{^ZlPqZ}4TTD=$-@)!|u3Fp$MWX*f_CsE4Pgfr)Kay8@tPuG;CX|Z1zJonEpI+TiA1E2a59Cb|S*w=72j=P9Z=iSI zAA>80AJT)U;-XEM7K}x;`9)~feg+Rw?^wYzCD@o;A@T|*(n4i5N?=6!!8ahhOkZCca;{`#B{s>odzdL?mz9_8HAnhFmDTv2^>(OTUI9O z&m$Q9VZK&-Rgic3iy_L&m(Ey0^kNH7p1AI6QVH5X^kYlZ79SylhlA?P{8RhmgoIP4 zgm)b~TF+{2c~Y(>XUk^_NhZte5>W%oMgixt!z)|fUse)rsea4+H+~# zWL-I$HM2idD2LpdBtx)E%Le6B2vPQuIpjF28iy6ii#N!Ic<$ z7f>xf&U2l5`Yn5TkqC;z>vng?G3|EWT zM61VZeeSHNBCzm6rgSGR873cahUak|#I25hW)Dp4p&%Z4t;L&UcCd8O2q-kB#daNO zgPNN;EfXwFB5xDucI@7Las%=3r2k1YDXpcS!dH3ki*G>Y(0m>G#;E^|nE366^#lz8 zVgqe$7u;kLNH4ke##|+Y$IMM zejLdmVW_1H{wQhd0Cs7$UkmSGhYy?c1Z*pF{yRVI(}@xXfCXE5HXZpjQcBH!Rw`F* zeN#i?#5N~k(Z|JNDe{PvR1NM$GyJj)&-XA0*xHFYx59nMda3siC&^oBK=6W<7fGWR z$+GTsaqkli>IDR?L+HF430*JI1H#N?P}c+y;{l8z z(jrj2t{OU6`c?h5R#WdMKY;y7lHc-xtxTYj3dLj2+otA;Y?{IWANJQ4`l!dcOll#g znr{EHu{&_GF2e_O-G)1V35&CxAzZ2iW>SVTmy!*ki#|uR=u;)io4q{60|anlmr6zN z7r~w=fz}ld3uQ`5QbYxY5Hut?$6e~+@yulWOmLiM>$MMxXMESUY27j5>59aO=iDa{FNiE)83{RUFwvkPD~pWzCDC-wvtBlwB=b-KP;C9Zq>6&(K1gRV z)U^{IYgw?8`;p4x^wVsWo{uQgi0zydw2)VA|IiCkWp5A1v6v#^S<9{%{W$VFFu7={ zx5#j@x*0zo)E2QT-0y)jnt1LLm9cY>Fg5G1DZ}GP-qP;87+uav(-7MzsmSPRI&3m&+U-UWigYXJ3;pkv5Syz$7mgT+>R zS3ZkMhLIu=-iVSsD-`jbM@H^o)#B-%&gNmWe&ilVrp>at;!-@<52A0mPZ$E)&%l6m zX?3|3i*7>-um+}5`Rn2xvUL`k&2f%Rc%A`#Ohs^3{*BTMzytyn2UCj3XoT$c51vl@42X<#bwLH4TSkK9AA9wG|4G#Mnrcvg;mrLqf#H8; zp${;_QXb0{JfNr(2Oqvw-H^I2s=?Z`I!JG1m%_%CC7B+thbWq@Zseb*9@|0t~o06*c{8|rY=jd;P1?s zsoEkrQoN&O0DQ*vZ1zsRT*?%N=zMA9<9~B%6kuba$1N8%`qD^3qj7GXP<`HOXJ@Q# z%rm2p9_(6_k-@SNBpZ(B%8m$ z+K@Db;Ku$KOn(Np7R^X9H$HfaDTrg_L2v=+{~&Ki_~3WaKX#RgTJWaEslhgDt|Sx9AIOO=CA9qZIJsV` zq?(Q`aD)8AMrMn3*X)pISRh{C+yJs15DQpE-jUgPY3ThsdoxTDB7xg^v)|I-a-k_z zh-%r_1O5BsV#7L$<%6X|?A*Gyc#52;LJv$POv_0 z-PMt;iYpEMY9e+{bk#Z_!-8f^SR*0hySM)ju|)smgHytiQnmIO@}DC(_*}qzn%O0CUelq?r$|e zij^HH%{)z!#zw&bG~tB%AfJNrG_GDZf_o+Y@;3oX;k1oZ!Fig71Xu zjhzL)TUGY_7&+4kdz;%VE;%{8!LdzYSnm6AHD=zWuF~lL7-y*P#h6$*jyLs5tYZ9) z15v?$EGSH}=j|ko^e`&M>u+3CJ?#e%)9&@^^M%=5q-ndANo$~vR5mCS+e7wng+SoyR^m zge+vQz{&WyP%hOLY@`-x5s2UyDNoSIuo(U`z*V~I*RK4C!}(b3D-+1aei9t%g7sSt zFXn1L({fX6X+y17?}G=%YT3gS5vL(!s8nU-=fzTU{1Rv%AY$nM)k5>hkU8FIUFn!0 zR4XgHqDlDUoaP&&-d1%pwfY=Dg4aj&i+Nwc7o!^mfiNrx(kYPKS^=OKK-oNYpPgG% zNu+?&a|d`N*6b#~Hu!O>x@SXgLDG1vkwaYWA#Fh`JuW6f<`WJeyodjuQ#P}iZ3k_pL1#F&ZGq99k zIQ@s2=a65+4=nqSlp zUWTzFgNwKuJi{9@nQI$l-5^MTI$sn0;Tbboc2MA{%CJ1#FL=vrM$?kFv}2W0*`L{v z741lnuJZ9co%f6{n`-LEFgRXlPQV(zL2J;)biJl;4CtN}0X;7m>~JRMTl)e9oC|@5 zJ;8vf8S7IbZKlzd^Do13Fw#SPqzSmEnI&!vxtSdYm;M@m*_rfs80>hpp_9(piL$CUQzJ>k+HIO#o9l$34UAOX z;d~dUqv-x{MaMh3BCc;>ltD(}Zzo#4dy z{q$o#*l~52@mV6{l>-6zhsA1mL(rTvt}ax@Ab_JkABPG`@L=_oKApf^+3`G}JV&rL<2E3QSbf*o%8ZTuKD zV0xM=7g^zN>DDc|^fu5&cSNG3@ewitna>XW$ij*BBv0wFZ)6x?Ql9khA;{Mxv?c0G zh0q!Klc-^gE?78c@)W1fel-Z$Uy$Q8GPqxc1^*UxX+Bj*nmKZWs|})nlL_Y0)FtTa zoY>@%Q1!0nWAcS8olj)-L%km?&v*YeF!>PYMx8P9dMha0>#7b)2te#yH_0nuPvSv~ zoQdbw`h~2uj+JvF4`vFNmozgYwS0R5bgLyo#;J5bkgNQgTQQ-&FiN|$olA9mUz#9k zzqo?^9tAt=y=X*b?j(??*iQ zyk%~{O`3MEl=dTf;vn;TV#W3^WLqBO8G5uZUI}Z=8xaeDz;UG zlR(1=fG`~nBKp?WsNS{8M&*nDFFeMl5;S+%;&AN@<2yYtuBW@{&dX2Q8&ujI^cnTo zCR2qj!uyesE~al)f`;pE^D%_=IviR?8(V3|sDji|2sXc`rw?~QcElGRmN~r13BV-L zqqZooZnx+BtCVBs`}IJva$>w7j%wkIw-2w17T^GaBCv~e5UwadZz00oBI-5;B>YvC&#r$F z|F(bAUK0kBxzqiB|6Y9bXB}_@2r=(5_1YY_ewjMflgIQr)8*}g3A?|4OOJ}#yhfq%y{B&}D5W|FZC z+x0Y@sPFC|J{MK`OBD;{LiK{SA8%YjB5MEePhQd*x2vtX}-5G86qGVa81N2!QHfqa#mWk$C+z7c=HCC_Y%g&kE42sve z4S{rmQM4pc{6*sw%3MB<-*z~_XxaCg1v#};>v!!sCgD8x=@OWd)4+!`$Ql54G9#W! z{A*rfJYKC#>MAaGj}0?4KyfLy{h9}>-V16?T11EkLLBK!P|ouO;V6?DVV)_KM` zp^`DVkF`;D#@-Lvjpij(Y)^lkf#9=N$G#D+Q)iLeN>y*o^OGS$;yXe+ z6uN2fkN-0w!KJmq*~>}|D{EK(SUBhU{$XW33sa!@C4uj1X04;!d+z>p9xcMfOi348 z9vWAwb!`jbIyXGoTuzW6f=G9RLU+Fq zvQ+n!=csIbXA4_dSY?2?1>n!6JE-w*`%n=88ps{eEu$HOiXh5<;#}s9Gfsq!xXOD# z%yu695BEdrB>$^qC-nl=&YHK^R30m-fb$Hk%B6_gm~ImW@?X-R><6_34NRVf5#(HS z(EKq<=aB2b+0)Go`}BWouwUN=RNzQ|DCl)sB7j*Nb~CA$Mv8=IszY8q7iB`;?m8Or z-m->akT11k$OC4EA~ieRgeqraXMZiidx1+*)ggIMcrzL>r|LxOq(cm-i%J|_KmAb1 zrzVT>ns#UgfVsSk3o7cAiZQl@&}JLqm&7i)u^x}YSj{O%?*dP&yMfF$NnHqim3Gw$ zGC|^uatr<-Fc9RxH@$$*xg-f$5e(sRzp43VGeIFpDB{po{%_@ko$K(v_VO$&6>Tm? zIqU87$kL0tG=!rm%BmSDNZp>%@FxdqNt0s;gW!CT6ownrkz`(8vn72zmmHi97Dh5h z@M&GLc6#YC(VUsYfPsFC4p#NpR%S@=E93BQQU(E7AUE_n+<9N5%O`4a=T$WRWOExL zJ+&d9htjhc>Pi|&?gGx03bm79*`c2@-Yt|R?%iZ?lFQ?I4Ubp-(?Grz(8T{o7#*FV z9w=T=*-8^#scmFPij8yw{2KG5jF#?xMG@TF?I>g`*-MbWLpWCv@=q48hqi&~7^8u! zK9?9w=%XigZ?vwvdHI6fTF0Ja{$;?_nG}SC@UgTA_J7d{g^Mr%o#G{g)=hi%&q-{# z2P+=B)O)rjSKR;?r48Y`oZ2_z3QxvL2U;u}VGy5eORO;54fbdyR~Z}eCwuWyu;lWn z8tQgsF()nR80z256nPMooMLSp&KVOw$4|93ox|7;-543v&cVS%HudxDJ#IC*9nFaJ zaI<%V0nr;uQoE0Fn{f;01EUmG7qVUR%azim0w5tE1#eqB8h4SLxVM*n+K(-NmQ8qW zVJ8dZ$-*=5*ked)sUT0)F#OQc5Y>>NPK}##wSC_@J;r(@eF51mSIh;1XZxhp*->~J z7;D)kU8MHeoy=|<|51_D)8SGE*Qurqz9PyT5jZ=`az^3guRoS` zN~bw@Zt-Gyi*S$m<)A43U_wU%j@Q7V8(xSjxUDzL(=iw)TE}SVAZ_e`^_vtkvbz(E^Cpc%@UO9vXw0BY!tu?-V@HE!@5wiMoCtwWG(sCS*q)p$3y&0!G(A!PsFAxhhBYCq3RUj`e*HVJ6q-7laPL z2BH&asrSp^>inXRLV~|8l})u=)Q5}onKu@91*B-PGi?MEm+5)*qT)eE@0O12E}kjZ z1*~y>easVf5Nz(K=D?z0u_#pnfvm$7t}L_*o-c}rwmXMQ>>1h3?4Hm_i5|*FlvMZ6 z>7nU7LxlcFaTypJo8&2cC?YNg%u6%_vOKwcvtZ`5w zG+PmAIMAxSesRJkAIKr=ZNuj^U@Q}723w-&?YqvsUQ?i<;etPiQysXjCT74M> z{Ubn(*4+8lnh6TxllRw$&NTEvZy6m!(Iz#Oxv>ctR%w6-Hkt%y+>q`E!7Ihlw;5arf(SPtCWH*UqNtml)e~hL>1Lh5r38dd7 zj1*C{YMZECJ!MP6IcQnmsUs=W2R%KqE$dbNPWb7VRpaM&-H=XtJa#J!{}4}BGP7=| z5Oob@cO(e=1izVD87nWLqt)D)^Ixu5YCIinKI_)@d}rqrXZYrkq~PAq5*-|z5#<@{ zP8?(_>N@G$$>@ZT21A>&k8WfYdUQ}Pj@#XF#4B*pLTMpz(nuwKqa_n4NWwns-K?)I z(3S-6bQT;`#)=7hN=*No`QX4PH9RJ*(?KUo)lNLl`BzSBDnYJN6k@cv2chX>>)w^jeHmkFQxmv|RymBBl33-zpL zuMTbmO80RS^txX7hu%+c#uQH%>PNXuiPsp@(PoF_r6cUIYFYfA%l~ruP4DgwMmk+# zpnPN%Fhba64*72SVw9d?sdZ~;Gkfyld)*f#iM;%{YiDl(#ikHB|8eeoxC;{geKvpa z_oL4rIdGC4pdvCR2?Dg9!h1QLatZ+qhO&1%9}eah)8bFrVVc5=eL!iBrg(lrwZE0} z83EWzowH7Sw~Eg?%_S>A<{%=%M&vP}h^ybX9EIMim;kU*K8>2S@>dd+*x25Os^^xMKiu9IyM=`}TwTrEzF{ zgQ7rZ&c@AA4Pdn^&dy3-a|5wK$`uOOVkg7&=uiMcM?E)VK9a;k%al=d3U&2FBm2Q# z^hR>nr18*0E%&v#`YJ?d|6i?VV01S!%L>%!_Y6yJuC!afq?o55>mIU|$|rx*MSs%~ zTDG(N+$KTh;%-|3GcMD5J2Q1Ib|oj^cH-}9;6(YO#2pIVtx-aKKv zC#4sW+?XzRTGu3mqC6wI&i;L9o|T@iG_}(lFaMWoLM%`eC?(EN{Ut)R93JUAY}~X- znnAElT?}Q&wImsAm@4z#Al!6(1nI);lnqZ;6WG<%jMXw(BY+)D+vqWz|u%idv#57m!T7hrq{)tK>RJKt$vO%P;t& z^cK_4(FS9_hZ8FX-{WM*H+f)#9f++tr3gLLEG`b&pVdu$;WDO@aR+8B1`T|;e6t^7 zW&3~Jlt5zRk-a%VdoY3Gk2;57ExK0}9_Mws=r3wW{-6EB#yT$B+1xOHa|Cr6Tji$H zGcx+RA4aOp$_#W_Rk#%1Ys%E?1{6~+JHD<-IYfSEm5_A0#N(Qi<%{9 z=@8}#VsTv`==$`>9D7m)IVQjE${N@7*M)XC{WHsGdSiv zxJqJMy)D%MVZ;YvQp zRil(LFbCO_W>!$wWjp)VdvtR)`-~NHdM^y$J-GuKts|EN zR!ap#fFN@jN8A}hh(0I zMi&nw@3Ss`t%oC@UDF%v?T>z$Jy0a~*kv2qz`A6p+RLx7WL++m0FLH}RCF(A<$ChM z>K)uKPtp);a5XOzGxy%~qgIa6{=3!~=rFz`OY&u(yD>oCmVpbN!~i;qrnOa%G2mzF zg5Fjp$=(qqWm2Gj?hzGlQ{pcPlp{Z#Awqsi?Z~~8fY-C-G)4c%tz-L*Qi0-t`=HE^ z(hfqokr34cs5?p5#YDt-=Bmayy-b&n2ya95i+bag&~YC{c3?8shS^fvkF3l-%{b+-JGM+h zt(F@Pl51HC%@glyN7Yz2#pu#2@Qs_dwt!r^<^gi zY7yM~sdD{5#U`n-E#>z7HP??eW?$2%%3c*k@|%29lJ4)0IH^-2M_1jP4)qt25I|@G zU}Z}9IW-jV>%47jG2|CW*VL8x{;`>n<2%JYH~Sy#^b*}t^Ul0? zBIdXT3`p0scBjCcT&#|{R7JlS0v6KCnpWu8^oM|+WS zriKb>M4=#QcugQ|G*p8!;nvrnk@UaO47yNSKeuDDGAS?({%w@@^fO}Z7%LL=Y3LX5k#d5TJc%)F+{}!MWhiXoS{pz6^i) zg3XG_ji*+hVA5fAF3exwW4+_V$r{TfFhxsknHi8rKj9_S7)_se6ecUO1m~cXU#>V zj~eKG{mv@mIIqjU~s~n zE&2akg({W5NbN{p%Z3Thjj9#8iQNKEguL)sg|;Br1F3J^%S(oMCD~C}_l_slS}hIY z3@G6l#`_md_~)$lUR5|kM0wR+xRdAW3|;4CsPvhXi&*0%ULO*J*_I+4PSMymnkQ4g ze_@-CMCRNp(x?7YWpMS2Qh6&!-Fs6v*R!%j!Vu|pB3Pi9Dm9NOwC}K-m;#bw$)AuR z44wp8zpX%sIzTDXsT?$|{zIZJE0$X1NR-X1(8PzOznMm=ppvVe6e1}W2baIYAmp+w za6{TquvY(~*X+poj$zkfrWE3m)Z{t>J%Fb$G^8TzG1h~vmE=A3wSyr4=wAnElz6Mp z$(gK(ujwkK`N7owJ}zwCR~0wc!0Om;!b^g!puxlPc}P3Z=qYV)#5)0VpZm(`s;hBg z>#g3*9MKbH6t}R@13Ar4!`^UT04O##L7peeMLrpkuB&)n^i|vyS9@{M~x6A~fYjm-0`Yym_Hvj{HA8tvW98mMAZFH2xOQQ`5lHLG3 zlheSVOLc-fyBgO8n6*=|{lx5{4hZH|=)W2J;=?1U+&e-W3D_}ke_GfzkuoN!Spkq^ zv4?K$a~C~r#Z%)JJD#j5eHVNMJIdpz^Xx)A0Q>d_J11fC^L<^n$+kHDVAulhz{Sh&h7v&qwne2~53n8GBl4 z^yKgpil6Mww^_0YI*#UPF3NM!MM3;8@Hw3Lcd$qVKa za%bwKSdDtnT=>F`jgi}ekD1LE)X>(x$#l0_K;QZ~tZvajR10dX6i{(A{HX6@7#R0fdY4 z(apvESI9gH24=zpv_fSDykC}s*;%H!i$?X$e?j)+kCBY!39fRAMG>}*g*rEN?+#-c z9f)LD-qNo!>BwNl^f~Zph~%cQ?p0?D|xe z`cZ6buVjc96O}IhUT<7CrW>`EM*t=oi!GqFS&(ue*623g6M|1fX%TnaD;+J*)#wUC z6^F4*Eoy4D*ABx!y2u;){l+pPczFF*73f@MHI|4-z~6n zSgA~r+q7Nm#xr^e&NM;+nfw8fsb!P1Mmd6Cn1$?LCmF;`Fn<}9g^o9@S^5;UdyFt4n3 zP$8Lzfn(wk^e?d893oV9yeRqNFEnIx*P+gR!&n0qsf<(4>J>myYsvFKtIkpDQWxTX zh6{&xGuh@x4ErG*N8s8_gNxHD1M+Qi(*t4s_VoW*W{J; zz)$^zWDBf!;Ed^>5tkQ9z5}@opYvl|eKlMK8+R;WjP$SbZLF=5hxhhef6paP0!m$P zgx5z#<-{Zqvk>v8f#wP$zbQu*UKkHtCj1a!BO!z#F)~E7(j2^IOxsQBGQmeXEtIf} zILv3P*pRhr1av5YG-HEkz297>7ZFB4is$Mu^wi1%Ahg^2#y`c#8!Fjbo3>7I3=VN1 zft3%Mv8hop)0Y12&-`0HV;eN4#6|tHQrU$v@B5^>6v2#h`%lr_0*@V<$RF^rA^_0Y zaS~ye1rsoJBkCLtb~ zjP?K@Fs1^V$HTEdAGJrMr8V4a+v7Mm4a~BMhZRlbI*blV{ z-D5!+Ib0wvT50?S9D3rikjCF1V*)J5TgVRvH)<|>>9`B%XK>OO|gz?IPT^VnDnZQdi?hbd+1UCL~q4`thy926-UNd_@)5t zlC4`}?g1{zeUz14 zOL&rXL}Z~XcpmfrGLmsF2|(a17bd2Borv{m;I(Vx3xhi(WvG)3!(EdGyHO-ikZV)cFAr90&AE(g9(CIk^*w+5vRZV zw6>@zi*Pr^gbCieY&c6xNML>&?A6m=>d-=mSu;c6xjBX9<#0{-^|6pYwxVJ`PN@BI z;rXx0w#n6xSTCGO7d;yr*`8{Cf0W|VUP0C1sI!dp{4h_AX2o3Jo7JFQz#!rv28olZxY83ARt?z41Yf z$4^|@|936exqLEluTs83{}uP!Pm?sWH~9|Nw`QhP1aU%f1qRn<5&VJse9qop;e#0w zyc*Wk$d=y#dhYRM_I{G_d-Nj4>jl-Sp^ww^27QctD_U}w{;j&rk3mL|9IM1RB@{J$ z3eC$G7cza`dm906n!~l}@Z57%9`!yo2Wbw4Y5aj_W!SaWF7t+4J}jx zi8CHRIN(S#)p_Uc)xgb1H-$X9 zaWAYT8Ng9Uo0*H&dL`v}wi2Z#@gfA-O)<_n%I$}-hpoxWF9sch333W&`;1rFusO5d zlNjGW_yZ7G|DeJD0xx`P*|4T6AEl9(f?U=*-RcH{g`?46x-0~z=|5^+rbKAoLN1s@ z*A(@YqzG6mpTqK<+q!ILDHjy1kqZgR6VU@Y_NE(}i)3|CoBq8HPNt-$=6eGRJ8#8e zfs<3Tp+h!Hvj13DciV!&ebQ+Q#K$5*v`);oBZDUHI^{ze$0B{}moH1~Iu#@BIs-O(eVoAd3J>Yb+BX-yFw;4!9_Yd&qb`O$fx29HJl@ zLHA=8N|qGm0|MOiHEWVwzwTL*HU+54QyuaHJxm>l;MbfdyE1Bn(DXKyIumiu=)+p} zW<;(O06ZmFXJCmEwez2!ctS?D9rB7FqkaXn37I0pwq}A4+3h{QyNGHDmtx zS3K-Z(8`1MBmYsSORX#u3J%!XxVld=Jfu>v8TNs%qXWS)nNvx7s{e5y+^!^*>Ht&QMf$ST8H<#AB^0L!kwhnTAp^>h!&qC}Qk!{)$@|0i6LRPOW z>5CM+45pAg3b@q>JF{~kCNb#h#0UNMmE1$1*l`ET#zy+e=T6KFc8SU0GW=Syq+wtu z99dH2il?sk8KW=&`SR{NwRB_T{skl8bQY^9>KjkO2y}M*9?XdBC0D(P8abHHIgn-y zw*Qo9$YL)>Yh&-~Nf^jN=7QH{)n=lX3azo7NylyiLN!y8eGGB>Ns5RqoydLrNAXe~ z+~lY6foZlIZ1n?$^6@8k>~4f|6&&>byv=HOPZD~?p^Y6C^TuQ zu7^EO=}@v57a8cYZNe9xu7KxyH~MDO@fj&np3I6TWDEns4_J8x#LkRV)}E}sYgrPC z(nbpWNbo282_Oigy&Kmnm|i;DqVa@mie`)LVf!+o%Es&n$?TYB$ILA%qv3@uxHTc4 zFc5hxaKxY^g(gAhqPrGk9OI|4!%w3L&n!$|&G_UVKH=HA!){<1J}voJ4Kx zQ;!pQrZsXwMghF@_K|8bfN!IDG}%$Qx#Ekv=VvV$PTr-lj!?Y==Moer6}MATE!oNLMc%Pk?03O&}S#6-Jzr&RTuR zFo9NqlfEov0)l)R)Nj+mLP$DotaD+8Y{oE5{j;#LleIOdN}uW?-?~d_hu}WG1Qj-v z6!hf?5v=WioU%=*StXkbOaBNLT7a09M87xlT?!-M4>O~2}3a+9L z+L7N{-Q-us-GOI{J|hTe&3a$O*d@ywmI8m$75iL!?li8H{3MCN0WKVr^T<1n&*O$% zYo*ejK~Q%$>}kSig&YqE_IyZVmmKWAN%)Zv1K#t{>IIWJ1}Y2L7rWaa4$t5gR7r~~ z+ysTn4)NtvmyGJ_$%Q($J;_T3Cr@GWf}RVXdjxsnMjy8&o}5}2G6nJ4+)dU?uYC07 zvkGnJIHxSRg<1O^L^ztfl3AHA%Q@@?eG6)Iwhk$Br7k zU9+&XOs&0tPIlx)tc>AZKQ4u&uz)J4xaHgwsA2NUdlu)D)|8t~cPd1}6y-uw`@os@ z(z7>YQR&!VOI!$lNB~-OrBn-omKNvLvyi zVE9cTVTHoT`@9cqvg+!q!8SD8rca~V1f zbTwG+x|3>je!FjORTMK5I9y(K8n>s4s%uiH(wAZwvhW88Mp;WvWW@E0Eb(XB+VTvm z?+mXUI~WD94vI3Bs`(GfOYYmyFx)$oPT4uLTr&z$D!2@2l2o_2Ro&A|cJgrO<k7evV~HDwDq z$fvb`4;?B~0aUIz8eZbBDHQ+)Xgt6tumJA&(1mPt8y>8J7m&0yk;M>r0pmLHP%a37PS|;yXr|t`ekev_irL+# zCfdvTkQAC^vG(aud-E(b!xYWpeRAQU`jQRpwB1|l?lA7Fz=X%4CH+O|7&B1m^|lQ} zsNq#tqo+&1t_6^$)%Xwlv51HjJK-)FRK2SO8R7s!sZghN)BYHp;l+znoGvrvH>lhK zfYmA~Z$%!lH~WJlSXOQyt9$UcGD8;}4~-+PPhzrK{{cOj)%UW{JQbz_`a?b}mQLt? zd$2vvSG%g-5#z}a5_5jzv3v_0iT^xAPUv)7qhYkjMb9>aFo%gapRX>u2pmB5c@K_<5)+5z5?CZm^H zAl;>fkZr^%^HY?xnm^%mym2I0{w$WwVwr$(CZ5v&-ZQIpl+po{rJ6^<# zcklYMR%DEsnImHbp(iDIW|ntdF0{0tyl`D&$_(n)pE$e{JuWqk>R2vd!k zHIl){bt|sDFsyna8rsjg$ZM>F@WfN3R>W*wWy(mN(3PG{{l=p`KjTX1|E!mnYG-$@&uoRy14bi1v$}!x#G06$G2r>oEMj$lgScLG?>J&H;0;Mq#>BLkr2QT*(Ypy{% ziSKA99_50oh;8oJ#v5>r;(!&>zhVt%r5_JY2PAY}989Tg&cLy2DlE&bInJe26xgw& zw5H2C5(nyrMRw6z1*&zusZ5z7SbaCc08i+VP*ljD92K6N#2Xu+Zp2BuGpjBKZF;g} zavSy}hsLlVIqF~k9sM%B7u5(i#iW`9`_1Fm-z9Q0UZ)qDAS-^Fs<3s3w;gsSBZq?( zxH^~V@mDIX1E-a@t@z|QGjy9m&j|b)>UV5a#y#ei>ETA}E;4b&KKx`XjfDm5w|A>M zx5N|ySTp9PKt``Z6t9Sv8pS;kKnX+PTukkWLJFbjo~l*rcZ3b^ueiB#+C#E8uSttONfko|+ML{K-qOmQ4GY%h7sQ32;ec)Ws4PHM2&@L?nPjY;~afWdAnHKsA1 zwJ$5hxvVdO+h?!hdAsoawR6*5tsjC@2~#XfH2Jx#4>pBZo!FoAjZmM=ZiGs8WWwzXq0$-}qx|jyy#@7TqQPU=N`rYhc62 zN@Mf4_MDIx7b9I{PHA!LextLPJVZxB{Q$g2e+V`yjK$BF>Kmus==vVEdoXu1J&~TP z6I=nmtg7^=>vh>{f0xQTiUx2c9PDV+>%0)a>+i6buQiMLZdNoh$EfoyXevsF8`d-z zU}JOEzhhSIqpi0TX2|3sS2DkDZlHG6^3#g-14A&>qc-v_fGb1{gi6Z9_@tUy$?RE@ z>=OTTSL>F~$yhsZ3zfuYO5ii_s$B@^psk3jhBVAd66PNj)S%W@%@+pYe1ktJ$^wSQ z|F9au>tVn3lr2b!%TEkakW2f#6s)#VQPvOt0x-+fKZ-0EyLXl&xIVptkoqwrllb`_cFAWCW;ztZ^|cJ|&sF_Sba%jo zA$T4)A$$e&HL$S?;S|X9SIodx7s-t2;IZ1=2DJAbbL6ftzL*rwRo1{WhKh0mya5%R zl}e8(aF~npBWi6ib>JA@iYR7^(pndnpK(9%A10g)1Znq73bMxCW#3S1?S0kd(ju(C zj{iP_6!PY|;X>?Qk(NDDRU3G^k3b~7hxd0<5t?<-ncMZFU5RTx2_NATBywc9TPSZFt_%Du{ItK{*pC4wkxx(P0=Si!dQ|SO%H#qy#$7`}oI;#TU1Am;ti)Q*NhWwW zIi|B~7*N=%$=nK_!>U-(`Al|^_QN9!r+)s&`8$qr!BkiA(xiQbsIR;zVGMrrH8{Pa zbVXg2$vn6*7y-XjA$6Zm$9LcdSHD2tCsM?rm)Y=!&_=*R7QTlj`hWCmqyxRu;-I%o zKe&r$Ern7y(x5W#T(3{kR)_ApzVe^W z{`B^1a2R_ZG#f;s5i<2UkGWhHhPtHY*wrfPoS>nVFZF z<)2HrG+bNZ3CS7p$~9!Ul|qR%FulZtMRAJw2U`Wtf3W7dU!_W#p831FM25)7WbK1W zY0l5&+wbtAwZ2D>5eFI_5SuL_B$PzijFRr)4n;V;03sNwBtF7^P<(&c7lN7G>aePK z%k_%4m#HC?Jl#xqUS46ylcj4=jke6)RQcwL5KD9vuNKr}9W$D4Y8p9wiXbBA%*P7MUd$&E7AyFkH^oUX#?Sh$Y4s9bmH#vH4qSMn>jq7cVfxoIbe}VKdPvDi@yQPRdWSX*3QVX7@Sk@Mn&u@WZ zEop92_AVZWrNT;l3sBYWjV{6_+M^{n9q*-GHm6A9gv0@GP!=6VdQ+JN0e@(DZPVO! z*g~#x9n#AYO0_-T9GL9KIP||pdLPVhTJd)HMsCuk2@t@FJicI4g};f`K6k~+brS5} z^jEKp5=4t5&W`kMKn*v}(#zvN?Q>pS&u3=~(+NFk5|`Pl@qtP=JmrTB&M=}^sT3Q9^ZCha+f>Z5^Z>c;}4;> z{>~%~N5|!xNT;&xXm8j7Ui~1v%;MpCOQmXQ33bZ_IY(>Td{0&!A>DsOt0-*OL+HnW@6B^jK+ zc!w02;g8SmxYci2B?>%h0Se3%64KFm^Yo~Y+B?i$)^{tJX~NZw;>-54ZsCO&H?Q@{ zy%S8LD(OT%oisFauuvQok2$YhLT!)i`(&vkdC3UukcV&=-pHyhdbNS{DBY-lVkYkN zlJ_!FKvVG}dDq;_J6z@?e;K69e3fM<|r=`hRVz>_~6ItR~m&{@1G5hKU2HafvNoros z+aVfy|MShXIUo|mD(^QhoohlVr^hStk-aGq*Sd1^FskceLh7*n&*)KX)MSifr2=J; zZwaQ~=0Xj%X;zgZ_Nqb_LX0pIqHGm;A@h|MoCh!9Nxgd|3Ek|j3_pv9+v3L`aho6& z>2O_}>lwUYFK;}Y4Ed_E=63IKvU?X0M?tLE$@PYH*Q*_48m_d=y$~Rw#*VBX>y>b! zViOBmcOYC(JMKf7kpxe9LwvoU9P3nSt*!z!TlqCr^-UdjgjLSx&-Y5MDqAtGFM4w} zzqWzEh+gk#^G5SA5{QXU*qZj$L#)+xzCs5@UPm2E@$<{C`_mjy$>f7xQ~W+7Em=|o zjSJ2N81~#Q*03jJ(Bj4p@Q8;SAes+sq?2~QIuX|&>1Sm`@UT55ccOd4S&lOI`PSu z>LF)Ac7=IzbjF`yRWD*(&C1VMEV<|7_8pFkA%Fmw!R&71&ta;rkin|7%cskB;K@%H zraWatc&S0y2XtiS&-}g;nFJ^{RV*FU6{s@?q8Jg_Sx4#=dbp;fCz)p}xobpcRO0BH z4N)O=fS5crHEzuweugI?n+OGrxk19g3rL1i^y)2V0U<}w?jR8L6%M^EMEVS2`XKJc zd{nY8n8-O@g_oHCkm#NXZAX_r+RKcLT;=9S5s2oN7kbg8uI zgz%!Aq-Hy1#C!gXv-?01l-FbyQjh|g)qpxDw!#Pxk_cS5SA`KnOjH6LnSwkj`Xtti zD`KmNRxMS~dy#Uk#GuI(TxQU>0`!pxWO0h+`kQU>Rkii$S*qRMW-`(AUtSC2lPm3K zE5ttm3W{gkXEtS8_+MPLnWyTC*Oz`hoinB#m6Sm8LpC>KQ3F^YT{sNayxu5gF6Y*h zjyuf=M}O12nB;)DNTpp7#06fNRN2(a)sAi(*}3!wU@JC_A4=1sDzLwr{`R@Hz5YvB zB-8Yt+lN8exlV@ZGR6$|u$jy608W=?lSB2f{1(kHAznIi@^Jv9s{7EokvdQJ!;}s|`kT7IzI<0ON}Gw_KLiY+jw{ zyLlK~H(yz-hTLq1&}5xa#&D>NDg|6UFaQVAV{$ddsG7Q^?FdalC68J&baT4DjHaY9 zmW?*Au`44BpH>>3s!=iTS5q&FHsWGzP(`o%pE#SAf()nM8X^hMW*A+PZht;lIjP-E zhPT4l3O`a`XNV^{`}96-U5qtGQq=Wmv>mfR42W2CpZ4NQHT9)2J}XMVTco3&bNEk*+bqhDy2TAbS$%VzXmY8 z#?h{L71`u~s37%4IySA zx7>fGl1Pv6GYt?I_Eyiq@^qpO%T%m$9nIxW>x(5a1YiZvu%Y`YU~d;vO3fyU#DoG- z)sTVh%kE_V_`A%j4Yxveo;@D@QDF<9v}OvfI@wYiwzcOUBU0SyNxXQB4-vyJ+E_d? z?<0ZRr`p7sQ*eD{i%Cy_Z$DUhK=g?IsNNd)NQ7C>I9zeB@j|_5EGy%_KP8d9jswmW3_% zH<&$sxpx}_Lm;m9_E~q1jTvWUx28W4Qa+EP*uRifHP8<)y91GHfOuJiNOW*Uk-GA= z7?{%3BEBZ_0wV`lSac~_qbGI6csq&@D0%E1s}S-u8opEy?&+Oo=3N|mgU%Dm;XDww z7DoIL@DB^{tpA$#3&;4chcUd-D~tN#v+@J=HZ(bOJ=hiA2xl_-KOTlWUlf1tferen zK19_X?|@A0R?Pz?1+oO5`ZC(pi15a+Iq4_Xip)iBUK#B~iz%Af*+0IOMZL%vjb#&Ag6 z`3S}e`S8u9osivTK^e20Z^P-~2rgAMKy(WI_=`HBKvmmbxZooyZtCYsx%ODN(w-7y z(-|LIue+u#R032s6#-#x$9$IB5~XjmrptH0T)auCEy?Hgn2KhfekLwM^?Xzb^VI$LPsf9 zp?NcbR~T@PijWq-L9@F}^ zAVx>MyQS9Q57uiku}V}FmO*W}m_5@S7Q4qRLd)2H#dZ4>!T^X$)(Sn8biB5ts?>y( zgl3k#v@biw8r{>1{RQ=oHH*BQy9E7mDHTcz0o?Fll2L!tC^rt6SFh>8w@rYaQXD-9 zjtP}3s$SYsqQ5&+VzCDbltEX6*H%_7U!+K3Rib}TX4Z9m%Rp=x)G}{^K?D7a&$t!2 zJ_K3L`S5e2ikmJ&@od0CfNZkHJjKR#hl9>m1Xr|USsyjfJ~Vwtm2z1QF-%q8v6<8j z*s=-DW(7bW_#Qu=Rj4Nk;!Ux0+AedKZFT`k(&3{q1S`>flb;kvV03_Ar4THaBBVDs8z z1BViUbhQyh#BGqMbs#qE%hN%N_apQrp*3Np&KmJ#yHmMEP;M);p5CCjJBGhsTu62^(s;B`N+)D3H8!nY&Ed`>k^ z?z-$UgXMxWI}Ke!Vzt?1Pm(XbI2at=HBFhImo;!bfFga@qkqv5*RnwA%53x%;tA}> zoV(1eqXe8II%kEFa1Y1jL8!ubd!Su4ho&Cpx=Oq9xF2=oW#jJ$u=KR(pc)f+) zE4y3_oq^;uA%6oMeFjbnDTH`O;CgyZo(EdD-nP^Ho*7POVG+gMWQ4Ps6uK%iXKhFpRMDIf!)mZ8>rY|gN))sUC>QGbH z&PKi$M73$bsod7-2YMXh@d)W0W6*g-WdDxT&9#UdVlhrZRuntoBq1`Qs)!$gBjrO# zuuO=zVk{$OAi+z6ze~f&bt2hULKz3RHrEj6DZ1zy)XWSn!@V)Z}R%K!w*u!q^QR+ z0mA_Exq){xG_{94Kdi0$_=YJ8MmP>|m`I%Qt6}DlFB)1V@DcB}Qj{6?Jt=x_j*p4#^Bn%ih6gXWE#vK0;MddfDW;`j}Dv1hjh6Xwtv`^_20!BrJ*x$QzjmNQe zz@H{tDp)ZG>6^D-xHS1Ohv>#TtU)*!Qwyx*_ej59ZRO6J5KIWz?pKDGOHw* zU5>);$z;{QmK)~$y~5@kVcZYNPo2a^5_GA%-1&(KfOl4J7;;_BmdNze6J**yexg-M zrHe6Gx93VEekDnx13K3v>TmPHe!hj+Ds)8b0SW~N9!KlO5|%+S%PDcD!~VDnio{V3 znswYHi(n%Aw*j#)Q^B;d*5_lIifUC;1qQbOYL6>CVkOY}&TBeB59XOS%Fd?Sn%%h&aMgUba=fn-?o$p>w?;sGBOxU!;9cUX zIBY$4gU)bqz{$5o-Ne$JbHb0JH@0}vrq!{_`bT0T5B*2UTVUInIdcUI@@wv5f{v_{Pzf9kX@Ra)6V zr8-Jdfma#UIY`0TFvKn4#7)ak4oeeB$A9-{3e5nw&3$H>eR^w(S1ih5pbw@TW2P;L4gQR*fhA`UK83kk!_i$ zg+YojP2C53ijkLSBXS=E-yM`8&L7cqlSx>5&Skt4PnOZEnY*a8BiR}$>D-DmUN3P( zkw5)=4yvGqjliPe@FxKTIpBiE>MPl+YXj`$5?XtS*TvjYtu516LP#i3>AW+Y{fDi9 zF_cP=uFveH2VdRBym&h5-1wP4%U-bUsvSUq3aF)g(~)=IqxjGUfLLWykd29FtpA28 zpr6)C4Ipbhc=oL5mO!|%N+~P`S*mgOsty(A9)u!;g`dl=SN|Kh2~(wu_CfAAMD#MY zn#SYhJ&~tmJ|a@zmMgD_3~B~*K$tbvLk-Mezgz^|R9Cj(xj74$(#i!$msOIK(hegv z^Y6Jk%d$#a5{YIcet_tZczHTsy=lQ<%ftH4@1683 z+B(l&%&!8$2canbRP@4d@g&F;f%&VXue{bt#NYS~0 zp0RX4+8>AH^~8^HUT|4M_GiAa+s#hvIHrHTdKTUk2DbB`TKwX^C<y1|Wdn*K5}6aqYtAR)Fs=H!|NLt9 zCq0MJ9~yH++8QA^o(dC$l)JmY-bJ&LX>Z_@4rvtyA$9ub{IpiWB%%SeH_==6r)u?N zK+C^A?8_e%rrZ+O~)m)0gLSTOLWH(KsJf zJigk}Kxt4=3;)Pu#eXuX*A?cw*{t;p+(4hZ6pRyHxLn<);j# zBlU0eyss-cg*~9al@sIC`i@{s@NosEDuk{7i}^25rsQ-|PvB16YS~vRwjpFixd$OQ zaQW zG8h#VBel%TB|{@$EZQu&Nkk&r#g+y}S+U+PQQqgn-c^D(iDLX-wD?z7aF8fWG&yNy z`@Y7JbEp2@`A@U9bC~7D>5?woROyKi#l!MQ*jj%4$S+I2HJO=ob$asj4QTbOM>Mpx z`&2fHwAJjEw;cZ_FJ+xDu_UUQ6&3m*8wqS_aRRbOj=30Qs-CM9;w<9^2-@Q(P;iB>b4%UgD|Yf(`s7&H z)hp3jWSBAwoSlL{9FCH9SKzzG4-S;Htnwf=?~P;2%8(mA>8Qw=y}(X|PS14(Lcb)}YLt7v8h3I{Pdbf@OkQ$i@A@MdbZ@lw>|qx<}F{cNz2s^Bcw0uUyC< z=GUIL)F%nL^eS0I4uoo{RUG4JMXIY1HS%e?75j4AK(+GD zjJNi{%V_y!1vk76Xp<-;W1osw{<~At;&wO)FlmpjHRN}ilaWq>>YIJ4Ioz7fGlO8*U+DPPODkmf| zgI_YF$T)Y$&aWmii82FOiYRw-SMv-EWiF_rV@l_JK6}N5ga_u$;22y{5I5;dGd$z@ z1uoYtw<3FMAIkE;Js|qOLH{UpE@b;TYQx{H0DBK$?xOjD;?zjI#xVy2sQB?iofP|H zr?ctP35nPw_KaTN2&bL>mTO_ zMu6lBggDy`eqGJX%{NdOQD2^=(U9StIMFJ~hi7Dah~q25bu&2;ltG=7)y~9mB{!5~ z2aJDfEd9%iQSNgEB3@S9{ zFw;;0Api(s;(N{uLi~}t-(a*;qVrmQWV?x~a8Yy+$?go|8ucM~kZ(Ep&iQ$UK{&U$ zDKy_qH2jePmq#@xl{$};rbJ8nx5`DE53(iXZhAVu&qZeaxWwMn*Q&$Yr20=GcSTBK z3%K{gl}`>rk5Y*L`&I$g)!e=w#Gh<(CMc)Bie^U#Q`??OO8C)G4`lM&NB@rE@t61; z%`-9Tm_0-|*;}P&z70si+S}>bHgqsC%&SjNCd#Ub5~XVtn>~bcS3|r@>el6W&=CsT z?Y1=A3oA0}*^A~nALTQ0v9V?XcP_V_rz@+rlMrIi${vRk*vSr)Vo_)V`cJ#AKX=;Zgs+CaKECSb z@(`4qLl=QY7c&;JsqyU1Ef9uWan7;WT&zvaJfp??SIfi;TYtpVH!>sc7CH=g8@>1` z2~|)-2@6$kJ2=^e-^!q18@r@dtM>IK8$^9&WxD4Z??ITx;yVUeg~R3zFU3cA zU1np}er{?qBC2TEo=`?=1LF8M>)LFa#v(kC(b3XBw2QraXR?HJjEaeJc#km*%ej+|yBpuBSrSoUL%zaJ% zT3?dMH3}9I*WlU+cTeDf#z6S_8Xt|y?K-a?<%!ehe3p{GJaz9(as86w%YM?w_(#|! z(O%|>gjz|L&QolW+Kmz|xHPTMcFEp8qWX+~d80X8SADk<>yIR0aq@0(jHdn*8l>U; z^-S%FQEG9*>?OhiZclTyJPJGPlwW=%V-@FiNiOdb zn^s4X+*W&-$5FxlrnCkap%2=-Ze^jgI(|qTAa?@vSxjjg_Bx~xPqg0$P0#vsF#s>g zFH3KwsRj~S(c>)}ve7Z{$PDq;pf7NDDhgiuBkhUb_LU9l&;ePf5wCZ>`oJ&C#(NFz z>fw`u6vW)qLTV551oXCjsOVJdNs4qvwA}#%-l^(M3X<=;NL~Add)_JC_w_jOTnAc8 z=hDy`7PNr_gl6i>?XK~Y-z*MUR3UfnjNqZYc=`bWbD`$s|7o$pv& zq;@JwETf08s4d~m;K3tH&^S@*kd4RIeCtB7eOzrUBaaS9Fz@>8xkxhOUwHYhSqBa< zfmj?dmJicIIBYXpg%?OR$zEu#?vINw&L{#_+Te<1lXkS0VHmoE|K*0PIl zY`}0p*-@Yyk|z3eCK%KFDQ^i}co=$d(Z%zS-HHw=Z*&JtW}0%3k#<9tCY(68Gk7I4AqKM$1S`i#kHA!_!a1cWa zauzoxwu{c(&6!g6^3_iXNK-B8I=9wa2N#s$hnhv&Z7rZ%shcS@55(U`xCwh7;yg{y zWwL;+JIVAOR7iZo{_%+WjnS{l+gC)|&@OJnzKn|)09&VpkdlMHr zkNkum&7T&+96ID>F5Iom#{l^IDj`b?V$E+Bv7@fO)iL+rHHWgao;n<2?%DjVX1~={%)guv}6eF#uYxC8J>yeQR8ENOcm)vf{ zoGyYbAQtTGh}A)R(;suFWow*jJkm%PX#vLBo9|qWfhA7v0EF*25Kxb5cRHZZ~JPDRl}bfGyK7_fv; zwVl=B6-a_k`hFknpmw!r#1)4U`@gh6z%ziU zaCZ*pnLaC>J{aGXN2#*=S+S)Jw(xeJh~k6=%O3}|0(Bh?F?O4k%s#Fcv$tb&Eg!D$ zetTr9?M|DsTI47b_c9JgUhzm5#&0h|v1SToBc}Aq^;U6h4H1-4|5!38s}ST_YGa6LPO}IgYyuj z&t;h-EsW&+J>9}$n?>U`{ZN>e>%)#PUR8U7I_Z)myAl{C5cQ`8rMBJ6;@O&SjogWt zJhDxI=C~O#Zp?1nuP@Qj_^=aFKiS>M<`d0M($U9I`yF<$NZGRZ%StF=J{E<%%NnFEFc}XSN|$5?X3X(GiWi4u zlzM+j7fBiGZJ91pX86g)A5JadPUxamXcqJIoR#r<4~8<{Oq1w4-q;GLF{LW{Mp^SK zR&R9$t-XblaA^OzZ(zIODsub8ZQ_<^wzn-|(KlQ%N(~yg7^_hv1Sl8p*)?&Swv4<| zHyHNaa(GF2IVlXD$7wVUI{V>GJrhtl85Rcb-M>h=uxtn210^l*hCA_OHn{P>|YHyj`Ut5)(rVTn|lZT*-9+} zQb+x3_R;r;?`pM^g*(@J5mcb1qB#g?Ew$s6RZ%m_a3wKi`Ha5*7#`cWRyL&_5+)WOO7AdfGz6i>MbTm{0^@5+V%Hc>s@xs%e_yeJ<}Q>{FMe%O(OIeI$eBYB`2y5Pb;D=%EB&KYW2tMzL#rv2kUj z?^B>#uRiVQel^faTZh>VU9(|v+V@4|Wew_HDM54AE?av}mdfzh{&WmSm>yOmYrBP9 z9|xG8(0xU|*)CVU9PT!v?-E2%B^fHbIjeSw`qik76gT!Zd*)~=Xh4{1{p^@ z`RX-$=_D5=5JBjz`s%es6B$NA2>h*ahvJDO4D51Fs^P>%;d!?Vf@p^EY4?F#N9XU` zjn#VN6^XqT^e0U}_73Gt!BV;cpi2=}N$^esY1dQbO<#|>SDbTx<23v9-%1VA3 zLpY$LPPg7N%F|>98cKIgTE0w%@)VQm{{@m z&bEblo-#^G|52!d5NbY^v0y`1k4Dr=W^Gn2g)1x?@+BNgeAVRYISC6!&hF5<+d(E# zjpRhowe%hh8AwWzCuJNjaRw>~AGV{`Lz1X&U~_`zTIFYb%ZrW-PZ0IkoVZDa&9-7H zZ`@7wrOx@P_3>YdgVDyej>s!1J<3(y>$Pf`{ZvTOe90<4=(7GWI(w?x4u@nT_vp1t`oHc(g# zU5jZc^U>6^D60}=^z%ZuTQZf+oMri)>Ebxh6n-sP>7VOEI-uSv!~#$R=OkVBAsmn> zDnh4ET387QBY&-_^z60-^kP2i0oa7Qu)|got~gpoQkw#`ddncO5pQa)8zzM|{St;E z`H*yg#3;gN`2j%JhiykCC#9*cd#rPJk$bVa?JO6fz`T1+&Nx<-1 z`4dXd^q^2ec`+<|3lV!yTeB)ytxVI#MJrgAk(!8HfLw`w>$sfC0TUfGjoCO;M0rj% z3k7^DzV~mt4dLe$%Y)SML2?BO$5X~CYeF4!Py}ObDL<+TwJI)a(pILM4?^Q%lri8@ zWpLK!#d8mRAGEon)lWzw4_cJJp7_Vl>XV&#!rcPuuv3gCnL863Fm*Be9hc2LNtQ0) zk11jEedWL`@m@{`k7}_#`d;?l#jzuz&#Q|W{nY8#rjva6`X#pJ;i#+IZ!fD77c?JJ zU)*Nc%qHIbeno1aWv1w*G5{Xil$}c`jD9Q_1ogxIHw^P~@1I<($V`{?K2?K$O1k-K z@NU(ZKi&3P*2$n9iTxWT{9Dj(_n1GV!rMXz%-!96W&zDdAJM*bS}A~Ct&1g!8f!bz zaxWLdh2=y7pB`o>a{+IEAM}M(#FYW5pkLsk{FrgUq^uGj<`JuKGGZT8gfbND7VsI> z3nDJFFVA>-GC#RT$3L8OgC;+7rR-YhHF>1`puWwCGS}7BitCXlOp+aNni_GsoHB$Y z1KcGvL7wmt@O-nwtIsr56nT^!7Etx!j z0l9^iT5Gk1B<1yl<(=F#W@+OH?Jrr3A;lkgPc-{0=6Fo%#}rk;3s2q~yqE)! zADGoEMMSCq@Z0>G=r@qz@6lh5%2TQ|3Khq3Cu=uQZ4IK}>^pDGFZs2kjvQw({whwt zu%4kDr}#}4ZlSwxR)~3{ZS)HP1gnlo`_85VCU1lN%7@1nKOB2fUbCB;dr6lfZxI)7o){I#}q zyb~TZ5X$!m#KqKNhCmGtWH{crzh8m92B%r5r>ORgZlVTC(1%s(C+h__9i=e>_nR=h z8jkA?nJt3sji{G8n#Wg2O;C;of?HgNQ`?r>H>f0hxTS4xBmcVfQ_;T?Bn|QKlqsIt z$YS!m5&#&ZhD*r6SNXTVJN3Xm8d&!Pg3e)N7Gkjq^FH4bTKk|`dCWtp6>f+8NvC+W z4$@N&H(pAviGw(s-_7z@G1PJ7<*@-dMiy!b;9k;UAY3nzB?y~5+jCmKE=D|c`+Jgz zRS7oV-cKbvhfE2=bQWBsD!dKr(g_NELB_sZak z-o+WTwW{8SlJDm6doaC(585||MqWBx#CiV#XIFL!-JCx$CM$e7N6#dALX{lU^lv1? z@4-fCbVM?X5(0+|C?RYUrOXcebwTUQL7ihDk4W#&H7IKi=_NR_zKydo!iIGA8F7&O z_PBJrUBxMS)?Woa zmbUo)_Chxfnwe;DC`b8;S;dE3pZpn#TQs0N3>=MlWD9X3iY~J|!EPSRnU!ZYmWZ$N z8m*&Q^eqYomr72~4+xCdCFtCL!oMr9Q)uT(g{F|TUiO(Py*|>R#d-60`xuwktl`?A zk~is2$fhYZl>yd_6f2LrS4d}kQ$S^t#n`lPR$2${+iX!36T2_#&jOj5o7$TJGpu;FFytZY#j^iS!tgKdzww-U_2L|I{5DO;TBH}f&o6Ey57|@c+hZ5A--?B{%p^4!%>Y^u=5YCY@i3r+7kHmR$=HBF`s|d-t3bc;)`nrZiM86Y2f*@!yp*-C|8EO74r z%x%Xf;G0ArS}mh}#7WjxCAw*6W>0{-_-nb@DM1H7N&{v?>T~fQD4+?{8;|k--Ha}t^-K@`;Lan__N?Edt%o9&QD91{M*}#88HLn>;<=C;v+lMCh4xJRczyC zlGMu3=yCrW$lT-^-&ZrH?^)NH%Jf1(wzV4B0unwNb8Px~+MFPL?H8U?t*?rSoiqDZ zy8T>AtRVdy{1#uNviX`Fq;`bzUtzgKpDQ<&fi4^ zfrpo=0iH*_f{9{iR~A55X_F_PR{GhGn^}Lp(E$1j9%if0)D)zguMX5A zYxC>mZ4+if{Z1L2tr|3a_U;bvfnf!ExuS1)T#~Z(_L@ndhSQZE zDhn8x1Z^xdKJxCShU%T*&V?0a$$`jBXl>3H2q-Z%x9@n7dAULPyzm~V{R*sJLA%(6 zZXrRGk*f4p>@RbIgiOrQ{UHR*vAwdKxJznMl)&Xjrk2Q$Cg+PKQ0$}47p^+2At>uZ z+8_ojwxcubz*j)U0{0%sJl7+b-%8JX%y=;Q#^0~3>LPV(RKZP9^-x)`E->^>Jba(A z(w>c&Mrm-TI(U_c(%U?EVPVYnQCqe`YS1NB$Nap3?1Cu+x8m?uE3MHaZXdubN&(3z zUV$AB~X@TggD5*j&ZOb*8LTJh)oIy)s506ulSFx_UnwxZl-kXj!1ozK6B z$R47F!JFBtfD6WP>bEtSZ4(0aumpDh##YKZ5w|gDETNHML=Ab37MWWogoIBc;v;#e z_ZnP7Sc5#;IX@m)+77P+3i19nc%S?JX+Y&KbDeTu9xJO@$1$eGQ%BJ^yMZ&#s#)NS zZeO%GdVyVt2h$~-R3I4gA1#%=LXCLSC_umsDc!}{Vm~+Qn?dfm)W0hEQ1lFf0 zrY*o9_A8M9#yyB%HeonP$%<`9frF@AHn3sA&%0M+bzjRH$IM)2=X2;n6fi|vn=j+o za1YVV*PQ(ebProWVVN^+r$ID7m&M+;B3R+Azd?C6gxlj&eVAelwAg%?^lcweRjIllQIIy;Pc5`(dtl*57087@=H zNenD;AmKHaw%EAN6u)0z_6!3vAiduk6&IpridYq=MV4MVAIn*cg9qT#3I++$7>uky zGkmol^xZYR(_VIzexts?rUxpv0x^_o7EfaB%4tJmb}ar3snN*lrwyG{M{K=4M8-LH znTGSaWk2h>J;u#&lHHb)W8sN++Y8jB{RO&5-5v>A^PsP+a5JLi4VTI2pi}&7wg0y8^_2}WU{(K@=G8U48b)ew zZx$MI><<`bSSN;uZl4cwfP@RoSfEHNB}Pb3YM+hb*8QFd>oXzPcxB32CgD8IIJ~6v zCwrB_@Jd~KR)h~+AG;fsN>2}lcTP*G4m7reJN`$pTAs_< z>)>d$)3yyS_KylZhYZybnwL*HaVH-k+LDZMq?@IPwGySKGH0P(OFoy8rUnRh?pQ{9K(I$rq#l}wm+KH&-(Og)`oiY z7iIDc!R_(R47MSLkdLS)Z0b!qB83Mod9k-qmrMBlO(Tl7xMAc$rTwtmem#W?74v6{ z!EWHOO0qM?_6$1Vp@zVMOozsHWq>di1l{-Ibi4UBGH`w*z9QQz$&H@-zsQEGXo1YZ z8R=WMLc#Z9BfMc2<2|8n)N&j?r*5LJi6=e zd^2c0($1Vp|2GX1;LwyjU2QiYq!u>rd<2T%(zR0r%y4p_@+GTqou#*)N%y{NE6gTz zyQ_d_ZF^AsXB$+XmemymW{ibj2>459DJjP-E=7A8OmT_rJY+xUh$bsAP;KmeLo!=3 zE@SdY#@gxl-K~4eT3U-Bm~dV=^z#PGMK8_lS)Aca#5enbm@xy)P*DJY5R<%snlumq z03@wu>0)CD008j+osEr{>xBrV0`wzSf zu`uRhWoBbEW@2WgXK=!`|hIWqs2Lq%37hP-g4^d!d@Sl>vBGdm|S^p0k zIwMCD17{Os8z(zcXEy^!69F?5TW2$20cq)hRuKnd3o{F618XHa7e^x#We@9bz`VQXS6U~OjSXyI&b zV__s?Vr*eh@ZV0@{-+amwyyu^nHc}$R{LLW6#sW_<_1pYbjAkG2LCe_zW>9n#L~pw z$lAr}e+DR^(8S5vz|k2S0MsXGYHea`=4_6|1!HV$VDta5_nu)mHSgXhilP5hX3d#x(G2?f&aksKny=nFzAK>dhq-Fgjt)Pwbe;f%LXDg%& zsyHzDM$!sLTN?>)q_?x36Vk=X!H(b0&e|P`I%n_Z>0;$=dvoZ7bVc>R)y7Uu(Vy4f z#a#l4GA1D*ArVn4aZx@i8+$=MVL=-qK5;QoaXy&1n7F+l%uYxcZsqo?Elbo8+Id=e zyLtLkX}a6F%Bk_mX{j;ZXqwN{O909*1mhR-{Rmq<;<4pO>8eX^as?Ha?!t{v7{a_MasLe%$pcmKGhr}k7>PQa?$B|$Jil|)7={OBH58G zXGFd@vE4I$Iw7LGIJ^fM-U-D;2|-5!1YVxD zxwt{*JzlqNy@1}vz(gfa(9t14AetOh7ApPw7z&Jm{SmHwt@yqFp+kNfHx~grCuODXN~55jT0Tgjl^hR5PHGCjXF322m~;5bAPVd6BQ0$*K^uldoT2mX3Ypz z>-Z|zZDaDW@w2ZI24-KB@z`t2!iWmF$oQ=@+Ke+hqjkgK&T?M?yZhhtr<#d?tFXM) zd+pEjnrH@x($BHKdSJ~$Jq^k159|$8|tYKe3<9Zda0s zffBvu6A>M~ieaZ6&fw+l%<#1M5nr}n{iSBqN+RBr9p=)zy11kJ|B;ixV1iI_L8y?pu;`7Gh@uYRzYaxA{;xV@ z1d#c!@&nNUsF5cCKqG+Ipc@nDASdoB*XqdrFnsScx#U}q)0t;h+$_4#dBR@ApRqxvv@Oni$9?ll*a^&MJ>|tG*qm1oYf0?)SOInc_(nMorLqJBtf$D0J|t8; z8dOaM8Si3>Zq^BuN}q>jeD$ku+X{rAlF}=dtKN*uI(|&^N{*wE0>`**Xg6>Eg=eB?rX45R&mb9O>*uuI?BFVO<*Fu>7&QJ z9uG3w+;v_NZ}dioI8t_i8r(o&AOKiw1GRz@{ORH7P%z4E{>90SUVp1R#M@NDz<$nE zZt@7a!y%3H7YF=LW57+I{L=w}F@GHfRM-VafPerWcuXJ#k^F&SFvjyYev6Vx(SyjI zbvYBEM5e$Pk5Hxk2f@0dRhzIDFIhibs{*V1vOCc`M+g1V9}_oI4auHc2B(SIWK=pD zY%BF?N^+1Uv*AZ40>Jp<(|eh*>4AY-`3F|!HEjx;KdQALg~@Ls_A}h%P)n-0i4fZF z3|ZZ5tLCkJc%?O<{Z|>aNbb`;9#Qx`+0OfM@h-H4T6uo&*$Y(~*JTS0oo1~c= z7SUvNqKn)b3FGS|ElRh{(i-spv8>E!^W6>=A30il3Ev@oZSl zO~ZLWHE8!pJ9#;AW+E6cip&-)eF)3S?qJ_!!lI+zY&LNhU76w{&M)b7OXzV~dxOPw z9g*O#|I8|$`%Tbx{-xG+o|&R`(_#e2_E?cU3eWYtybF=uUfz0c_fW_dUTEWML3<0l~il5!T%pRiGUh4TSP-Xm|t$&L7y0MF>PI z@Iv!|x`BW|j9;Z5d6s9WVe`YK{xB1bl0XoOLV9r+93~7E6BaT7Vba{HdpDPll~oWy zf(4Dh=tPCqs(*x4LUhHtqlZs1#mnA(l(pQjBLAx|;Go3*R~7-IfRdqn2MwD9UlB$2 z6;L#smr>2th94#g6~DOvCK3F7ff2~y`Y zT-;GahEYN87dH`tilOBF^+APQAz>JbtDt5>;v(WEP}P6sCjVO@7@_q45Q5^LLZF&L z;kAo9BT6emC_MR(K^JrrbU~<~iyF~lU8PvM$Yj$R8NC-QD5mJ!~x13O^iq4=IB>4o1q)UxZ?@J}il#o_BgZD>-PsL`4~WuC#+^<^1%@ z!=f7_N9v%5KY)P7UT3X;TE=o-VIt~ywC_Zf&qB#3%jas5u#hIQqvf+s=1Y|se=hNR zEB?lh))aZvr!t4XVp8lx*xtToSsRS`(pbV|>%Kd+Q7~`wf`1$ROVtVMF2!kS~ka*8#$W_sh(%jWhtLSMB)pMcPjL45bkJ8kDl0&2-;m zdcDOUoGl=+a}W6Z$2oV*UXTvFG8?PVqrusuPNu~zYigB{#X|683LYll%rn*luXtU)difl=0>~ zBN`Qy0*Z-&;Si1sL@`sGzxw%KN$P9zIhWhf0$yCcIRZY3PK+se{ceB3uhOQkB%5D{ zMr{kH3@Ytl#YWB(*sOh~kG(7b;kwp>Y@JMKQ7?kz*85BjP{G+8C^7}6>L5=<_1&Y!5 zEsxcWAYT7cP~d+klJ~!bq+jqHPCdO;Q28>OqSZY~GeOERcb4t?J@5L^jyZGsULrH7 zvSlQ!Vs3M-XP-SH!9##@@lMl{^UUhqT%P@XY1QPGd#{7d-*#GwIjZ>;@1|A}&u~N^ zCDW(RcOu~V=KTfyZ2oLdxzPioxU!oJ15!S+8}K|oDt{}6JDcsRY4A#?v*{_kGJMlT z&MXl*_KK&wH)tgH%>PpcwQmv9XF_XTk+_W!FRxN@^mIeb57UIHr*R}ZlUncftJV%A z)$0-R!$>h<*XMHVi%TYtG=-8Tll($_lnP6Y*qy*iOLJN;wG!(L-fHx$D)(?s)NU#O z+?PIN=TXIjcP7)szTVb38o0~UZJ@G0Pjo9$uq*Df(Wj=5GCwV!%TK4QQKXGkwd=3N zysP2hl^e|wQm+u5eC3&S|4{&3)pD?NL0WLxXIj+3B>wcIyl+EOL<;b>EtlIl0Jt!( z_*r5JE(x&^H~Jpz1=BAGBYIDYd;eMMRmpCEU6tcB^PuEzPK1adC;5BipiUG*A$oCe$Hgh&#LRZB(~I)o2NoQG{M_v_h^rs3R@I-m+xqV&^x-f`(aOlR?P0c z;k<@#=$K5`P%yLH`Mx(najtdm8sf*`@kmi_phbDYSuog0z(K`sgT|}r@y~m_7|LJe z=noDoS3b_wriLljg%Qdnpit}?3dOSiKrx7@STn0$@T^MBC8s^Nh3UVU4AlBx0fg+= zv<-z~xW8@j2Exb6uA^U{}B1p zR6ZJ2BHW@JNk{)tR%D8DoeTpH!~*ioYu;}~**5AN`l|e}ilkb!Y}CVHaAdV{F3Y*!&1p2J8g4Y{&7 z_>W`DQttSY>9f0MvxgQ?t1v38DcFPs`M7ehrDjXOiC&zXP*62Mb& zq;$8HCCTW=g4I&Sm3aHl2570q%yzcAk<0`*?&?L#gvBjiV(p9p)Qg}@6PPPH*fD>S z5)y+$ELq;zuGy@Vt;(EqdN;_@WBKk?n=AW#x?6071>^+aN9lbT-Zt;IfD*q|&U-oG z`)VBj-ecTxp~j*5-}q*Z!Z%|m@ePjrN}XUrF;GBuLuvn+yZBF$>95eWH?tNo?qP1L zvCQuvyZJi%87+b4zhWk8ZuOreNHC#(zp(;^G54Uz|0cr7{k{tdiV^uAAk2-2stBXd z%^Rxl59E}BNuSve-oWbUAqC6* zyG>P^Y4&-%c`FGu8<&Z#w(POa>2IF~kGf+Af30Zs(R^+4qmr<}eEXVHFaBUE!Nb>X z{=%3O2LP&&!^A)^+!F zbU1m;^^$~PbvNY?#m2I}(JWSbrn$qi{XA)YWXAx4`?Scewq{3X`&YBz*E(r4K3t;4;l%Yd41WhMPIN>Z7C!kE9V~w-_BiKWVxi{oap^m(O#BANOo2|nFNF*tQ0&&mFD@C7siJqd+aK7Sw<{u9dNpQC)6 zUq5Pn!bDJ-{1vfoQonZpe-Z0QT^~cQX{{?XVSD5wgbE=o)(wlX2btxz_6e+aVSqp25&U{4k;&x2~ z1~X|)wmzc)`qWHmTrkrB?qXQY| zo9!!YY%cE`8~+FysCuwcL`-9!<2|@^i+&T|=Go`Tuj%O$dD07jbtSg=rW{2op8M?& z8^^6&c7^78mT#c}K7`O_cBTAaYG@#8eiM2)mFUhZcekqEhEg$;+SmI2N!auAE!#4o zv3SVp+vd*-C6p~?e!x|Nhqz314SHN`@y;9gI@&7UZR|Boaz0CeHI_-T1FaKsM8u{W zgj&0>o#!rxexS$7X+gyp9ye zrsF%Ft8Ad#p!tni5-7|P{g27Oe*)HjibsD1ET!F|y6@@lBVc^m56a7#o*udM6Z{9j z3iypOC~R_p-urK2lfv)2P}n5)8&m$jWa_63q3057s}8vT z&M5cN8K1$(&+k8Kpn*9L8Z0J9#uOBvC@}42c^0ZRK7RjHvm66V;>V#lxf!};TygMD z0Hb`Vq613C8F$v)O+4iXpp>DG9|rLzi>%A``ypPOfS*xYoV6(g)f$4 zRKDBbN5&+PyR;zid&cKAMg{l?o1Sdujt1jn{d*%E)y}@dZY+G??|V40++)5bZqei8 zxIZf~chD4@b!j?gRzul!JKw7rSeb8FWx@IB)k9bW*cY`X=ZVU}LH+)p`)ZMpfQf0th?-cGk+MHL>M~CiMmB3%O`S7|>(BXD z(?jJ!(IP;ABrAzmU2n0>5;v1h-7a9%YV88%schl2w33$ky7St-lO@IZaCLEZT(hQy z3thm9-oYcLLg^K}-~hRINSx{Upf-T~Yu2x7aRO)0+&l>u%nznt5XkboQu-)}l*|!p z5oOTjQJRoqy_`d6mA>}HRa-lHK>ooIYw%$^ePI9VVZ?>LK9$xaGs-OlcaNUT<}%bR ze@-esa^4sio`1O`pPv4s;eKE&x3$d{>+~+6A&=Zfh~eWfP`B6YPqEV`><^}|8r5KY zKeYlj6zwlABU{de{05%D++LVNm|dvi%O%gPWp@x)`NGdHLXLynoi-4LQzeNtbET>2 zLkFz;0VKI!nD~mz9yfazJ9v**e&)`*g~(3y$ZzQ)Olf3$qAqPe5B{NPZX199Non=g zx4V?3+@CUdPK%S@oIa514#XSviN!ST+r7b>mDI&9T7xhNQ z+-lA7!#*sn?se($Bu@9;dOJC`!vWtu^w4wwg;Z4Kd>NqrVB zfqxCXc`U-1JoFzAMg0Bm-x~N^1AlAaZw>sdfxk8Iw+8;!z~379TLXV<;BO85t%1Ka z@V5s3*1+Ey_*(;iYv6AU{H=lis~R{lLTui-s;&}ZXj#zXeNY;sI6akSB|j#ih->&P z5)ZJGTPM_*XG*|NP<2_}_)ds|=V}?dvIf(0G_?DHC`+U3mlFVxSnrRGVgJSEPC;R7 zE4a0|9iO-@+=frs8ZN>oE(nM7!9@h&R^q}i5o_z4{fToQ{;2N1ySZ~l?T;JasQ+yd z?{Nj+B&a?u$Kjs-9;$%+wFQ;m+Yz;m(bWp+%#V898nyn9MD5w+cXGFLxKSsmwY{x1 z;Me9tfj`boA6p}Bt*>XVR{(_S%4*60APBV|5%mXf-3}na1bzp82Lp)!AR-``2zdPw zpa8%?L&rcz!@xktfIu)Xu?exUv9Pd7@dL^V?K_ATUZe z2qqRb4ywRQLICRFd@u+NjE;_mhAJI`x(+}iLMLW|$zhOaTS1sTNCm^w3Ncya>pRGF z#tvA8tUV*Ju*oSXsi@i5IXJnvg+)Zg;NlVrib~2Vs%q-Gdin;2M#d&Kws!Uojz}jj zZy#Sj|A4^AsOXs3xcG$hjE9+7kFp=<6cv}0mX%jjRyDk6eA(38^6GVGS9ecuU;n`1 z_{8MY^vvws{OYH*^^MP)TiZL|4v)ScpZqxed3Mt;AON-R<&V!ldiHPqLJbEHgxXGq z2D#}M5afsY0TZF2Gr=&3<+LGIsFyDYhGUY-rxn(BV6h149FSRij$xCt3a_$#yXo4m zp8fYa7V&@7vp+lb&wkAVa8X-)Kty07fGl8@MIqyecBaZ-afLw_fekFtTFvz-0Udos zU<>Wu{HUT+9SZ|4%aUT4NKgVM&i23lw|<1M`5VHn8JW4 zY7BOQS^!f4MnkR^7#!#i(j?+fOV>06Y_?(IvXrJ1S`@Ia9fF?<~Hl9t;LD|0} z$VqqrA8`UmjNNU)zXQ=lwCl>-hO2%GCw5^3&rT2)5DQ9bfx^_3Fp7IO4>SW`v=n1|qNr^;Qx9^07!~ zT70Y$u;?bMZ-I>m0*?ifR}_ZY98zNITSh^xw+3G;1&D-qoRkQP=zIXs=5gAzP#XXn zxC}ZdSE#Mu_NK~5CKIRw9MRU3yMz;3!pQHUgvAw(VM3!vxd(h0UVt{QDTlynOb6`d zaZ*v-M*`rC;G0{VBIH<7B}TQfKZj$>=|(`603tD*l;iLr5H%84LyJi?r-1(cw-T5V zIbl&YK52|41vb2g?D z09q#uNNm-Dg`?a>l^;3*)54=#Oy1v+FW+RN=ljKJXvC6S- zSw#RTt)=lLMg?`A=woelu^jb)T3mjr703fyz8x2}V~hVNzx#?)r$+BU#RT1BPrQsL zc~+i>J}K8rm0#MBThnSftcBHXmV1q3GW;wDv{F4D_KGX9I@8%UkamAm^iPq%p;VLK=oC;pXR0Hj%pG5ER=0sQx0Inc8pfx(x+p|Bt5+I%;w|ANNAJqE+ z`eKVq1=UGL_ zdlyg1e^>>X#&IxupTD|#7^FXWe<-)C{GMO=>y99&Q8))$-O@!MLucb{X>CbYIbsSG zt3=L$fxh7T(vFl{sc&2;w@?F>K&c`OXi(NpXtp502$QGmSMo}#QKdc8dH#j*c6S(} zog*D`RDglb7IB91-Ci1_$Vpn==S-|RWNKSo%&EN<3pFaJu#7A12z-WJuRBRgje%S0 zPM{-%z?f)kw(0?TN+=MgVhw>wL)MPVqTsqf!&(sQHtH=ZKw<%PYf^ki!je%C%8Dd( z3H?qA&{5cgY6lzOUH}0i2*7V)*x3WeWoZ<&McHP$ISLwq0^%hUZ2O3qV^kC^;D_rH z0*8^M#OZTi0KXLPY~A|Ev|=aV?(;^~heU&}q7)?S)^Cws`a zS%oq>HN*79AgCr1Q zmK4XB+0rH^P7tm`YT41&v%u0ZaLO`}S7V*?W+{mFu|it19Gws%+d3Qn{Da!g9e>IK z+mb9j-9*mzc5oZYjncfrlc6CMRIGvnn5oJvGS;M$siMH|-(|k{JFU6==#o&4g6L2Z z12?xETWUiF*aTQ>S;U6>JY>F``LaIV$kS#0VxcgVqKjb7itG~VqqXIq9EKLqhiK}K zhZBR|lk{Ei%1H$VT?u2)FWB1lu0G^fsX)8093EzZrn>&-MU!Bk6acaUQ3qRLvFYD| zzUl=)j=st4QIu$$Xh(S{Dw1%gvlaCwxX-DkrpYnN5&CJMEQ|1m(2FE6Qjig4rQ7jo z&4dLj1ex;5kb(lj$1++eU`Lm^KJl|rtb6VToX?;o(2l{#>YxHtI~wOO(VMbN-C#Cl$W35y{)wOK@KUI(I$-O9N8rRKrn1`RN2LJI>&stfyc#wnw=Q+he&G|7ZM_C>GrhN_*e z=uRz5l^h(L+1k?Nh$`uA-|fG#3D3O-$XVzlX(+a)n0S>(C1q_8;0CKr1RHvLKlQqk z{Bd8F)oS@evcly=Dl~+<%F02_t0(Oi1@=g~m%Uj0T$$J z_*e!CX?d6(SKj1fI4CM2qbvw>=+!Lf0VBQ)Q7e1A#9|503)v!8lT1|h|FPHiq4bWj zzi@bUTCavDPhl4qE`fy-?5!eCOM1|F%V_!w)%wcb+1{}*Nbu3_beMW)nLHU~N3Z`T zDqi7MSL52UOd1pOir>?t9UPwgFq{Wdv)?e0nBeEd7Krv!n!J6O z^%v4^oarcVfBUWmx?F}T7K)FoM5@{rx+i#wUvkCiVf)#xgr^~5D$pO&M@?X;HewM! z=SlI%0RU*!zUH8*5o0W7B!ZMcG$_ggADD-qO@KmqF^ioy-C57Qw4!CjQvp?qQCbw2MeC`IH@v0?6_5M?CCu^B$@G z!rf1&y4(f{>d3?SnOW{VQ5dbf5f+V^=cyk_o8H`;wiJ)%C?@FEEOoM4h+uyvvBM}~Cp{V^5T zN-6AAw#WJYu3Y#r<~86GPn#vNRGZ7N%ryJcgi0;>7Z-iB!2E56(OKlK24sk&i%E^N zI=LW`2!ZE6*qiL}@+c81Ev@3#8+O}SgtWz4Hp=#r3)ed73#ktWD9p8sGTNF8Ryf{Q z&*IYlm8yMzm@BNlz;W?G)jm~+RGvon$rGrJ93)eaRd9qyp2r0n%1Mm5x z4MvwQUU@1T2uqzdAqC2DPRb8DEk^z;6NE=$aPcy5aRC+*Z~&ncFThfzL1!e=qMN%5 z6_mcLU|*?B7exFJk*6B!9h5>9Qe4Sj3-sKfHran*Td%1@Pw{)_R6arl{Jm54i(b&40{?7raJ81qLf|ER5`9Vn_`=s*wN3IUk}Cid6CR#xGQiCFezQ*D#`*?3SNj!D~ARk zuK}S1r#ff*GF?|A)$0lZUA6AsxBSj-T?vPH0uIPDKGva~#w@dL54ZazO}#_hQ%Wc~ zdwdJaI3$DmtJ-93{P~@HKSH`Ca_~=ssuKDk%GX}W+Ye)@Moj8pe1P!CA#lr-RyPPS z;x!&FNdBR`X6)`S+<|M`j+d6ZMz@W-6HGj|WV&ObxQXLI|6L}^BmWZZ zicCZ@nHssUe)0Y-i6H?Er5m4ZKg$d7S<0r~K7209H1S!Aab$NJ>9^qwvhw)WC#EIq z@wvTZZ*?>kwlrr%HiIM{viZ{&)vC9;=z2=RFMunC_s)5u+un5?HfeBp8WsHvJfar*pl`_&ufYrq3329JV|eEknKU5$94W@OSYwAEi% z?3ryzIPGm1K;JV7GVfD$`M3sRFH$zZAGRhu2GoN&!ng_oouCQk>TMCv+b!hQ4hs}A z<&xszER^((Kyq&1Xva)he0@|&{eN?Wku)w;+bv1$OZX{p$r~{SkQ%S;EM&1rRa%*?M zdJe#S_bYiua_;!9E`gB*C@c?FN99k~!0Vf8hlrGtT9wBPTfuhsc zl$C&FEIMRdFwq;H7Rxk`jBPponRRie13!@cC!Xx{X=ZIA5ne)spseo= zDXuc&l&Kl|tp7++QHI4ou`ZjuoumBW+%;gdy84_On|A-jhw|=;JeFCuiu#M&-+(@v z4co&X+-1GjWKS>e9tfYmn7Ep(o+B?jEv^EeUy6=h`U(jg4cQ-PZw+PH$l*L@d(eoz$$spE?rD*QjNn058Q@*Kq3qF-%bR1WnzmX4iK45Q@}a~R zXrWmCw=Cq(Z0n2tL^JSZsyrd?FhzV$>#1fa=d^$X+M>Xr_xzf?SLdt6=p9c z+X(Lc9@kyOK;!lo-Y?@jGcvXuz8^0t=&VzUM(^YRAelk(t`_?K;A%i)U4k-Td*4 zYWg*82W`8ettD*5Ns;%NZzjVQ(Hm_}-y)<#m*C)C<7Vz0zF7ahkYN?mckjO8eVySjEKT-17#dQ(!@15%T33*REewr15YfUKb=$=^!^t)3P*q^P5{d*qUgnApaZ6l2KihxaqC zB*>H9L5HHghp;ooo=KSk#fgU@n}{arhL*&>*1dk~S8FowD$6~c>pUIp7}HB4l<}px zBH4QY8m;M?tf*XvQB{n!d?G+ovy|Bxr{hx$IorUVhblxVwIjTP4zr4_NOyNB!UUkU zeu!M)758+(+VFhHL$7{kXl| z2lqC8@)NLeREp-l_R+iafe*Atc6b8)Ia=qUHM&ZLJzke5951R8c~z*VHDA1l{c-Qi zGn9Ha3EO>+Rs=@o6s*zHK0gQM$enJ6ZO~!zFgJv!dPTs?-97kBjm;KvO-a6Q;6e zO5c6PWKH!#G|Sf+ACeLz4r|KM7;4!cHlxi;NOSb%9EW2&PMcAPE7{YAv_Aa-+JG( zGeoqz-wC-Vk(R<^r<(|RM+hdvRizH~mh+KOC#l7h1nvABL@?a@XR*1LL%DLekU zQvW1wvsP)`SA2Y*b>nHggLC>FwSlUv-di8`?sJ^_e(Y*)(wZCKDH(gg0F8{mmjs%f z1}6Kxnu#ml+qZe}z{4lWtg635Q_AP7Iq?|nu0hb9=DMEM5L3<3TH%c#`Lt>=c|Tfr z$^6gvhV&K{KhJI5@hF)jmOA=mkm6G6U*=y+%BsUWR3FGB-ha^>O1;-LG)SF0wNlK7 zuRp+~pPgEajkU#7(AfzZtf}h8pu9_G5JQd@0&oEv6N8p?Mm}qLe&a=9g(O=7Lr8po1IYXamr+*Nw1Ilv)q6u@D|ws zW=3u?Lcu;j$Zc=hNA=L3YE%&Vhv)-O<Sr^l zRUB;?lxzR?8~fRQ9v?Z;J#vDtw!jjWN&Lv;XRnRmwe}uUeS;e9)_#>KfZtnPKDzZC#lk}gd`6jDChx|l99SZ>LYEa?E}cRi7C--4`QF=^0QdA( zHxbqM>83QziRX zH<#oqx5~_f#lfBq+zWn?guznIkx!zfCf>`hM^q0syC2+IkgM%(YM_^z8c1q;+qWaV z8&O8A{iCpQTc=NHTkA>p6?oz}8*eGjs`-^wi?i(OjKl3?(n@PP&Bd%9gU-&X&oP^s zmfJth$V=iwkqt((P-8<+IONdEBFcd};hV!Fo!rVdYFGuqSF9716;yBHR&WX0IIBx2 zbx+6Mesh)buk^nLJo3JBF}nLM_DG^WzZ*Uo*C1)<-ZHE@FjDZV0RI+UbDZ$N zXP0^GRS-3Wv_`gwo@^kZ=%&!A*Hv#o%NW5QrS2IlCjUc&hTG$ z$k!mta-_{}Q|UWt*<1F;7bZ_APFQG4oS^aUFH?d!c9cW0C-AXR=80_;p3~s%DB+&OVt}{ zvj1`zJa@tN$$mfMehf_~3}^xX zNeW~SC_o>6KIt?-&iiGr^WZL@koI2DN>r@l4k+b}WcSkJ1S>+MK z%;Z)6aO>;Y$9lo_WAwGSw0B=sebM?B+D#fw-`DlVxP9K$RUhu>$wUdAuGmh`H*{!psYK`wgXtX%YbGo|zWzB9I_Gt))fGck; z2TmIC)gdaz0<$hO$p+un+WT?p6g8@(pT0Or$$ZeYYR;q`i1Xwq<5anv;R!>j3oTn4 zyGA|59KF)B3;A!ZZ+O}YKj9&&L*K*8ps2}OFgs-196Q&bzh_v}*Gos}JyU@B(-8xk z^ib*s#U3c(C~BQviya~i0;-~;^yuOtQqyT_ToNNUwq{*&pZNhhh2ws!*tdJVIbfh$ z?QK6ysjkrTW0^U(?E7eX>WOTx`SjCwf*7Jg9p4J>+RAWG*rLAZ+LiAGucgjA|NAu6 zIsTR#VoA2&9ZG9sqb}U6PTmTd-pZ6c{AS-Sk$+OZJQuC#G*z zwy<#1T}xAfpPylj^t;OkL%tKe@`1OM1CHH=%4>X7D9y*H$th_XI(UIxUj7&w) z741yE&ciLq;;C|zEGEzQUODd$Naro%gm>RUU-mqjFXnw~!PMe&On=A&OEZo3T#ORW`2y+bq*~6VrHlW78}@>ks!!W{OGEM?Yn_><|i^>DgQs zUTo!e_Dc(_Rmi%I%kJjp58Zo!KKZ>q-}bPQBH;_%IglYToB>x#+2g|H8c@LJK6NE1 zQE?5xR(bmTSy!%=neVPf>c@@(8_{vfC@nB2@EN=S(=-7?Gz=SH0`M=uB1A2R-}SFLc}SmJ71lm_}z@5MaPuKD^okTR}0HoEm4i)LTN_CcBBqN-1G7*slWeaIo^ zMYn*?H=fI!51UfX@4h(%OHg{Bi(do!T}*YaBw_jIHJV&zz#-pUw(!JU?|lSuTRVxB zwa1aI4P-tXyHI`8Zz%swf}CeJk=w`z3PApoHc9QfuiP~1TiV_x%n!5h9@27$pXECZ zdubWkDf7E!N#^wwZwDGi2zv!o3^2?md{Wb7&HsYpWa4$AUU|$0rt~kly$_y$&f3iN z@9L$Og`V zeL{(AS|x3&=2TY2FLv!4RWhTV^d4%4n%zzN_^}kJt%SwdK6pRDqVED*t~T<@mtKB#J1q3c|puR22qcFIpKwc ze3)goiG7mY>OTJNok_gmLf_J7Rtp5_2r5e2xlflv=5Fuk`JXiFIWc#WltGwEHb&jRW&Xga<6Wx&6`q@Z$y2|o-K}{F}{N-^RlFN zGI~8QG*asRkl^fT_zWxRn*bwaQm$n4Yf?z{_4cE#JzSPhmhSbgg>4qvv679&fvxAP%=7q>)8 zj^{3NS{EF8QxqTv1N7>oV2eawxZNw+hxJZ!#7dbu=7lrGcaKRo4_@$Be78)7|1SUp zLHoWp+ED)hrgDEVTo^v5tBmM*c~sctm<$dFt#_O!r1&y4KMQre_}XNU9&!8$UVUf# z)OJz+6pt=7+HwSlRZ)pj7-V6ABkSo@O~g@@W4H`sf_XF)HAY+vfs>5T17sUnhoQ$5 z0UHi_Vv`yW?bz8TcVUjSAR!}~1~9DvCfY6nFIoVVXaYqP2$W)hkH-`MxZoZ+phBq5 zPC&r?=o1wed#Yp%oMfH_GFZ0u(p=m}1S`5(93l*XmL~vY({9S_mYdNY&!gOYN7Hoc zTNw0hEuglEVM6i^+f)EDM4fOe&X=%m?o9L{EL0+*qO>ktY9A0Lg`=0lxHCzk9yxPa$#lgA&BuR69R&)tT{sfWQRK6;y+C&ZtR z*7otqVc>-Gr#V*CB~Ot*>zbduea{}ork)!5$myMKkv?_RH5<)Z`diIP>T9d1PF`7@ zvp3>vwIvl~b2i(%G`t((ZCAz`%4wP;0!xCW-JQ0iXgaeV!;$aJDa}D$jYY}X9=8Ev)O39o?9kkK+BK7sO2{yHlktS8Xd*fYs=p9|hi@dC@j+M+d;+?T0oFg%#@ zMo8><vo zgKEg88S|ejKf>PM%jwgP5r@CO1JJ_axmP6348qdo zbw9$mYJV9WRQ~{lBh1Bj9HUu4KU!i9qZy%r8!mXHP{J@VKnW;gVb1}v)QsrGwY18dA?*aH}?k-tcYy%^Yy({)r_WuC&*O4bG^U(HV2w^GR?s*Qo ztX*r`l-HMzN&W;Mb~VocSE){tryC>6sajQK%_5zJmByoa6{VDBS>!lXALpexNkLtc z7`e3=?t3PUr0E_5&}Y=OTZob4P1hH1(SO-q{dfbZKY*_)rCC;$k?i5{@u3^bbLP*B zpB6O_8c!vSfs)HWR{3Gh9(;cknEe-^_dM548Y&9!a%xm_+hfa5TG-4$X@T@d?3@GI zc(_|MX{Z!{M$9vgB*FS;t#e{}9Txk!)5+i??1*4N7gN*&*+rBFmInvP4sMJ?H`{U=1v^VhekAl1+ z(Mw}$P|YkYx-|$sSk(Uj5zYxd!>P_Lj2nFH&ZN>@sPK`}x{h&Z0$W>Y?(PyBSY)1O zI9TIC%*WUcX*QPQJr~2j1$=3(BFNf$Y0$SvzJDzL0N(>FKM`2E@mm(DNuAc6`!-y% z1E~0p7~8tRYFvJ0hw`cV&tzz*7iImL;3@mB6G$KZs~|`Ihg0>J*nYuxIlX80b@3gt zvuT=+oqPxIv1nZV0R(=u)+Kd9bQ;+6PZM|_#J(9U+SZSEZ4f`}w(pPr`&_T;4~= zT?|FN*_@c1CH?pwRLVngFh>Tx1I}HKNceN&^JI}}x}?C`vuuV&JjLvP+5TTnoLHI{ z_o8>TuQm#EQjX{@h5u4{;u@zxB-j0O(a1 z&xs2Mw2vlXmpwQ1HtIn%0FN15XCE*OFmphzAycrh=qMQ$GeE{; ziU2W6z%X^D0-6AN9%uql+LeS#y(k#=D{WU$h9%)rJC{`-Kn+K;gLi0t)@wx1MDgCGsM+{K!gE_{7qLw>wq=oLVA2wZ za>qQJlh(MYLNci&(c4;bRG{v8-1>#}=lp(N+}wZHSy{iCuC)lQk;vyMZpgOrRzoC> zYKbJElh-~OczrajIrZI4h~48Y9{xPI`j$Um<@K*K6;;jhMD*}vv_k% z)4UDgne}aMSm2dn^Dd@-e6iUV^cWpa;a*KzlC3>9JPRJxQh+iG@@sd>K5xJeq0t+b9n_9y8|HIsHN z(P-j)3F8eQ$X=VZ+W4Jw2erNhJ}A~DgOXz z2T!Q{jdDh$sk<}X<%LDf4Ud=nU*Sz-!aAc^YqpI9yp(awa zaooZpsFAe9J{aCMsIFkwDeC$kLHr2#za&yycx%N|<^zcA?__RJ_KnY{V0&~t zbmgl@tWKJBFQYq;iyjzjdCs+C82db&Tq=*c-`@Hk=k={{wY2tfIPr8W{iJs4dD5vd z2kc2-#AEzxudR+NX>-;78hEf@!Zb}-hL|SUUBBh3WA2}DKQa3G_=-G_nmZnj7ZJ?8 zoQ>ZP_;`4GQq|;${{W#)5O}%eal0V>Gg#EA?JSzIeDkLONb3nQuMzZ;MIOf<3S6aN4)TsTeH=;HTBm`ZXhwBxbp{uh(}EjG3@$dW<- z0FI?_)c!g;secKcV%6NvVm6=zpaz--H1wbb3IIkl0U0y^(?EiOjY?u4idGAcL5cu= zIHUvJlPj}!Ff*T8Vpr-)rFJd>-QPVZ3y(s$ZQ0H~TzbKEyZ6aN6$t~^a{Mas8lP7;T< zo#nDNJ}r2NU}$zs0U(gTem*ZngcGWuL*KMb;WQ zWGx5!(&BO)jB~g~IPbv6YU7(udYv#!lS2>oRMmV*s_RWl!g4Wx{n(e-t6j?=mGC~ueK;!^Dv0V^%O6C(z2&cS)4*oMhrlZI zJ}oTox#-Y*EAS?wX1dh;M%sPDHeLm~hBZv|;f6+VO?ml*r3$Z=9`6s;`pyzAq_tWT zr@{XKhG6sKHY3n#7Q_DlWv@Tl)a-kn&Y$xhzu|dwDD-$VD?N4%Wn+xS1lLi|E2pDv z>Hy=XL0s}uPnn}t%WhlT^DiCvQ9M1U`Oq_sHsIzy{#$ob{XhEE=;5n-MQ6G^yiE^e z?;V+grWTetC6fX%oGwwR|y<7*Mr zdm8d8Q*`8ebf&97@c#f2X>X%z6WQFU%x%HxxqA`y73))|rxec~tQ;ibRJQV)REWYD zL}nX99FRA0nsa{ZAtSr^+JE9}rjPn!-})7C;X0m%FLZgM1=vnVY>W(bA79G5QqbXT z-p6g>tE7wJ=D7@n?Rf}XdX-=B70XgB)lD4~rD!y8as%4BjEJNI3%5DP&7WUt0AM2x zoaeOy8@L7=v$wt}gKpXlm80_;$}CVHl(4}g=|H02QL-}Oc4s*Gv+G5QxPY&c`?Ka` zZS==E{*-`+y#O~ffJ$Qp>xyC}S`djAlL6=HKnaXukQ1o+LF{@}0O|w^a&b&Ug)tHg zpB{2J|5RCmo0sjE9n&P0XR!How??w#s!ZQv&^k zw6}L~+d!qIm4YgcXkbZ#Glk`uzoYF}-@4p2KSk zM^EXV9XzsJO(fH?d1PYl$GImY*Q~6Sk>fXac6NUZyf^);sf+8R&6TTU0yud)51{IQ z4_f5KRpnf$>A}$Uv*vpvC-#&0glyn%3Fz};d6XOZ5b}t6MfE*Twg-CV!&3Wf^(#)x zl^-JJ{3@dv@v+FryS+T}dCqtDF~j^ogSf(?9*B82esH9BeVv6-fNoW_(NH-3IH! zJ|e!-FVu^ z6VJ!sY2)cSRX$I%JK4S^#I}d*b`CB`{{WVZHiP(be@gVHn5%oMQ{|~}toi={c~bH6 z+~oBamh-|=YBx?~xt~-a-1Rt%Ki0gt$<6af`ua4XLMoLtWR7;E+hWF>eRZa4Huu&O zJQr5(B#K2ms|qBptO>L2PY3Iof5i`n%PWOhq+crLG1dvd>OHyVdKI{h>P6o*#G&mFyuP>7cdjCTM>Z(0C} zBYC7);zoHKg;i0KN$3EhWpFp|JPqPYI|F%frA)8^xv*84N2yS9KPt&rrrnb@_7xJl zM>&er%vMrRwhqv6Po*J{k;MQs(gCyp;5k29U`n(BBG3ebr2qg>1gZBn_8f|0Bn6R9 z(~ZLi=|F}qRe@dzIS101hp5TtlR$~GNL3_|I0Mp}6Fnb5fxJ!d&htx)=f2Zs^Px`V zPEJ1@xcsY*r|zpMbZ2EH?I^e{(dV)6LckKa8(4aeLtS_3aaekS4Fa+1UkLO`Cb*ki zy-oos0V5e>_nZ2Db?4(MU))E229~a)`5gZM#Lp0oZ(8zgpLLCrYeMid13BkBl#_=hQE*FE1r&u4j>?l14nU z6OwDaD=QqWw(iZ333zf{e({%airPM8lNtO6y>?+RvcyW;BgoCOSY_1HYVvz8*U;?S zLhx6dbn`qy@EwHxr0)&s*BSgP(s*nle4Twymsy^5Z>)0rpW#-w=5YQp@YLQNy-~Q! zXD&=qk@>0jAFX+~yfdLKHa@E;&0(0+y{#p>{ZSu)n{ST1HpigU?N9zjTH%(=_0Mqq zus_uJSpNXEasL3c>kL0rYRAryjzxAOnV(bqM)`kc4Kx0{bnoXKaKregOuvMDx;oc+ z#(gFGKfxxq@XuAzqH`L{G_c7a8Q89h2_E<-6~kXjw>s$E!<8PtJa!%o@RWACY%2w| zv|<<|9=@m4^(5A~dT$X`CURzYm4d>`Ykr=moK373V$HWC=Op#7rcjJkk@;l3rAFk| zTK{{RDc zm&AV$7yBnml4Lr8of+LD4!&N}S8*BSV~WkrDeA&8Z&Yy_-jAqgT8x$&y`+|xXaO<5 zq3A&z5$-CKlh|!ra)nTjLHH}*ZS z&!xU6=y7XW6nf5_QduC6%-)A0SV+!6?~bF}HHI3eB)MM9c)DEi=UopNv4CCOtSvM! z0tqrqaG(HB^sh!omXBljQLaIMq&|srD#)e(jwvRMIL{aaWR5XZtJIW9cxq9Wvax5!9vaehy;3>v_1G+= zjv#_IWE^Ci@<**IH6;aPi>*czcXBz0@E?b{+v5ur{{VTTKl?px?dSZaA619*iT?ly zPKYhcG5F6;0gg^ebN>L5DE9OIP*`X$wnX0!^rq?KEju6Xr~d#Pr|sqZqx!UeoP_)~ z(%9$z6D>H8Wl#P&L&V8_kov5DoQeJ%=_)_uanrvLzx-V;lv8@UagzwFBQ%lr5RWHRGt1GCb8X~jc zc|b-Z+IBE(a!JR2=hBA?e#t(ib5wP?UdNC4s;l zIO?RP>|qndXk-`( z9ylY9oxjg=D~5zUtzKub=vSApqN2AvObYaw<)nI_!OaYVKC?K$!Ga9;{_}q!`PZL| zsef@Eh6awVqdX7ew~UXAd~Z72zU?zl&9$}<3_4`Pa3T&2qT)J|l~$&CZ=wwVFA5zXWSP+mb}EmxZJxT;yP> zJx{;2VN(fFRI*$3JxY1@5#iL^*4uuEPw{HvB+&HRGQp?w1A*UYQVIOXtuqFrO+fQ_ zS`wZjrE6(#&741iKjd}r_x*&ezw~O?i9MP32fBXPAL@K9{`JrDj9U7__E$t?AfD7-R-pW{FM*%t{Pv(Iw$-ze883H9B0&D3bl- z^&ol*?T0N6x}241tV{RR>`86=Kls-1e9Oz-G6y{Emf_vM9jZs`Q!G>vEG?CkQWoRj zcf<`TOuBXDjl(ZRw!3s={{Vd|kJg-V$!ysbGWb+p^iw(8pAz`L!PhHo;(ac4T;P4C zBD=rcal?KYuKGEJ_tfz*JUK>x2fEJ3!=5kGb@*`uc^5;hE_wVtYtyGz6&2#omB!^& zu#etXUCocRlx%}nbIo+k3v1++Kz3aJH!WGQlD7x5E{;xFLq2V$ev(oJoSD{tPo;C5VTzs@Gd@*wi+uTb8tF}nkqmM!k2(Gk5w;H0Tlj-jh+IW{)(0n&>@ap|-bo7Z&mmJ<+ z1_s>rAYg*Op{_j>e8%f-4lnkWw~}p3N4h>tvq5OE-aKE!Av=agP!BlIy=zH35jiWQ zc%Ca`F~Cy;>Oa|w#oyYx4cCS>2lFPdUH0Mm-vb;K_u6>+FdeIl5e`?(j+!#Mx&LDVMEwR>CmGrkuLR3E%MkHlnE zRgXMcBAnbLq&l=gTJt)bufMRUoP^hoAgQ znmex)$nh{`5k@jU-Ou%|stcAU9wJIpx;aK%Mo*y?xy~^HGhy3mka@;=rZN@-wK0s7 z6oyxGfyE33x44qlc;|uMIb&eT=x|hy;)fK~m?vj+b~j%Wyi0MXwXfP@Os>|MA_77_ zy#e|GSS&OXxx2;9t22f<&o$6w1dI`meP|IIQezoF4WJ1R-ZX$(U^!?3;*bv%z?lHr z4tee|K#5U7Cv$DU$m6fIF$f1ECj&g3W|<&^27oOPzFO_har0-_+w`Fma2s|oIo-xM z;+TtiW!24vz@F0LYk5Zj;&P||0M$__sc6fL@QdUeczgxYDIfMIRbhY0NhSfJ znlDp2*m`x~>D5{H@Cq%HQft*c9nd7m)+ahmiNXEe21pEoWQ!#Uka+p)*$x`o!M zdiPh-nI>*C*bhKE3iIk!m05F0`W!AAmJ*t!Nm(NIg0MVi;qrL@0Evya{*7A7e+xQK zcKxpxFnC$L8svVF*FGC|bX7ibQU!J#%=K>_{8hB^FT*`E!!YU7+uU0HoHVTAk%VYe z9)~ZTE;Mu#JfPQ zd$#V)?3ReRR4}DrD__}K>K3wE-`hiTZ6L$NG6z;3;PFW|wi8L{&z?Rh{0EZSS#_@f zWeWcB^zFwW_c1a50MJk1dslr7TZ`1=uZB}iTIk?BG2)qSWd6_9L5leaOt{)ujtC>O zSHD9Ns_6GVD>TXdjp|bPe;MR$p&OHe{?A2Tp2xgLz zafyek+=P!Ado@>C(A!@ho zkFv;WIbqyiMtr;RV#I0R61+)lqY5u%kPkrTc>e&HH9w6}i z4-Sv2+*?A&CNYLw`hdWIew8jM?g_L~k6FL|(4O{dhPa;NBID0H#K83q4^jNM#xN?Q zro_o}ZeP@VHs?wj)}8^=WE-{;OGbJ!liUNIeJfWDIg!r{PrvM?xzCO&4x^>`Z{j!b zw~e%&R7hijIh8ICT*Ai=G2i7R{XnehN181a2g>e!W$|N8j{C!L>h|ig%VqoAjzh%U zH{pU0;ar$`^2*)KF;vvy&Dil6i%%?Z#5X&zRUV}D73sHQ$vyAk-M!>~8FR9cS{{RZd#Ap6lTMzqeDEiC?^-8^i{uO_SzqxDw0Dr&w z)O~6L`kg_t{4MbtV`|y-{{Wuf{c2xYfPGS+(eSs#$sCFoPhjH*GGzV)jw$_a0rg6S zZ}?SSC+GJzzxVu8`qeRgQmC)tN+|XC{ut*$?bGhWti*&Kz#M)Rq*akJcVraF1VZkrfU_~c z0A!Ou9<%W8;IE1`d&@mS`38+=9EmE)aKF7cAdRv0?fh7-dX=MVElnW_Jx`*1UGV2c z@q1Vw5J`D*wtKv^S#~MijOPPC!aLVADmZL(N*vpjWB6V0{>mW}=vr_dvpHt`*ygoP zr1rUt-3osklJ#Xt{ucZ+oRD4&e+&E< zrCcr6m8Bv|2qDDsIOC^QBC@GDwPwz!MjsRov7vYYXk=#p0A@p<*12@KZP-g|)ppwB zYkE~B*g4ZKh6Hg`JBDZrhIym{78KAP8~a0iHHT5t=kZ>L7R^r8ciqPr{{UYY>imBa zj&s}(VO@B7&JM>tdP;F;jd*8YH}Ue_!1Dcm3SW<1Ap0TP#kG|$WgRts< zD#CRXcW1MP!cI$;nz@57h@stxB4_twioxPm$sU|?xuto#A3=W1I*Z=vdg{6b*)&9B z+&B1Fmzc|$#k1VXD5^a1i|zWJEAjf?Wcab-30fHz7m_lrP=#;Yrf`0_tY~})?yK=L z&qrF=$&R2xieonHd`GBR=vR6~QX^Shj5509r>@i6G;=+Sofx@u^)SsNLAj@V5( z#0%oDhO4LFku263v6V^A==S`C{{X;F-}nix3en`1(bY-wM$GcB5@|B%y8Y&w#hBa6 zwGVbv%Ad%J^l3|;DV|kma!sSJ_)V?dSa`i{uOyY0^mz~Fu_Q3g-oE)Cjb)31l|E(A zyd_RbmhN`n6*WC)N1o1oI{H{`W>So*7XioAcL(&WFp4uyGDlV}bAwJVL(b&!pNR4Q z03myy{CE5-uh>)Uas6he^A(@QUM1)LCl_Csr|c>A7uG6&F$;Ld#Ap6vH>3XAVxO?5 z*gmmS`H0)a-Xi}1pw0gP{r)t27|xkm+I`5+io8I7 z<~OPT0N_ji0F55TpJDrH_d0Di$C_2%lWk$+JswS2tqCyPh79LDnW_ zP1x09AtKgB6TgWE`CsQ1u!H+%blc*j31=}9|N>f zq>J~Eh8$*?j*Gy0#9A+j?Jn+r+tp%v@Zeuy6EgyN4%AfWdno%0DP#gBM~lYj>oZt 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

p06E@X^3AVa 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 XgQmh9 literal 0 HcmV?d00001 diff --git a/tests/Feature/BlueskyClientTest.php b/tests/Feature/BlueskyClientTest.php index 1abfef8..0631bef 100644 --- a/tests/Feature/BlueskyClientTest.php +++ b/tests/Feature/BlueskyClientTest.php @@ -137,7 +137,7 @@ public function testExecuteWithUploadBlob() 'password' => $_ENV["BLUESKY_PASSWORD"] ]); - $client->getRequest()->setBlob('assets/file.png'); + $client->getRequest()->setBlob('art/file.png'); $response = $client->execute(); @@ -206,7 +206,7 @@ public function testSendWithGetProfile() */ public function testSendWithRequestWhichHasNotResourceSupport() { - $request = (new UploadBlob())->setBlob('assets/file.png'); + $request = (new UploadBlob())->setBlob('art/file.png'); $client = new BlueskyClient($request); @@ -233,7 +233,7 @@ public function testExecuteWithUploadBlobAndCreateRecord() ]); $client->getRequest() - ->setBlob('assets/file.png') + ->setBlob('art/file.png') ->setHeaders([ 'Content-Type' => $client->getRequest() ->getBlob()