From 480af9165fef8a5e8bcc4896ed680cbf5afbe23c Mon Sep 17 00:00:00 2001 From: aeneasr Date: Wed, 30 Dec 2015 23:53:19 +0100 Subject: [PATCH 01/47] all: basic draft --- .coveralls.yml | 0 .gitignore | 4 + .travis.yml | 24 ++++ CONTRIBUTING.md | 119 ++++++++++++++++++++ MAINTAINERS | 2 + README.md | 178 +++++++++++++++++++++++++++++- auth/authorize.go | 213 ++++++++++++++++++++++++++++++++++++ auth/authorize_test.go | 27 +++++ auth/session/session.go | 103 +++++++++++++++++ client.go | 36 ++++++ client_test.go | 22 ++++ config.go | 21 ++++ coverage.sh | 52 +++++++++ errors.go | 106 ++++++++++++++++++ errors_test.go | 24 ++++ fosite.png | Bin 0 -> 4304 bytes generator/crypto.go | 77 +++++++++++++ generator/crypto_test.go | 38 +++++++ generator/generator.go | 60 ++++++++++ generator/generator_test.go | 27 +++++ hash/bcrypt_test.go | 42 +++++++ hash/bcyrpt.go | 26 +++++ hash/hash.go | 11 ++ rand/bytes.go | 25 +++++ rand/bytes_test.go | 25 +++++ response.go | 23 ++++ storage.go | 46 ++++++++ 27 files changed, 1329 insertions(+), 2 deletions(-) create mode 100644 .coveralls.yml create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 CONTRIBUTING.md create mode 100644 MAINTAINERS create mode 100644 auth/authorize.go create mode 100644 auth/authorize_test.go create mode 100644 auth/session/session.go create mode 100644 client.go create mode 100644 client_test.go create mode 100644 config.go create mode 100644 coverage.sh create mode 100644 errors.go create mode 100644 errors_test.go create mode 100644 fosite.png create mode 100644 generator/crypto.go create mode 100644 generator/crypto_test.go create mode 100644 generator/generator.go create mode 100644 generator/generator_test.go create mode 100644 hash/bcrypt_test.go create mode 100644 hash/bcyrpt.go create mode 100644 hash/hash.go create mode 100644 rand/bytes.go create mode 100644 rand/bytes_test.go create mode 100644 response.go create mode 100644 storage.go diff --git a/.coveralls.yml b/.coveralls.yml new file mode 100644 index 00000000..e69de29b diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..73de0245 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +*.iml +.cover +*.log \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..25a36f06 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +sudo: required + +services: + - docker + +env: + - DOCKER_BIND_LOCALHOST=true + +language: go + +go: + - 1.5 + +install: + - go get golang.org/x/tools/cmd/vet + - go get github.com/axw/gocov/gocov + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover + - go get github.com/golang/lint/golint + - go get -t ./... + +script: + - go vet -x ./... + - ./coverage --coveralls \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..5ca1e5ea --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,119 @@ +# Contribution Guide + +We welcome and encourage community contributions to Fosite. + +Since the project is still unstable, there are specific priorities for development. Pull requests that do not address these priorities will not be accepted until Fosite is production ready. + +Please familiarize yourself with the Contribution Guidelines and Project Roadmap before contributing. + +There are many ways to help Fosite besides contributing code: + + - Fix bugs or file issues + - Improve the documentation + + + +**Table of Contents** + +- [Contributing Code](#contributing-code) +- [Code Style](#code-style) +- [Developer’s Certificate of Origin](#developer%E2%80%99s-certificate-of-origin) +- [Pull request procedure](#pull-request-procedure) +- [Conduct](#conduct) + + + +## Contributing Code + +Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue before getting started to ensure your work is consistent with Fosite's roadmap and architecture. + +All contributions are made via pull request. Note that **all patches from all contributors get reviewed**. After a pull request is made other contributors will offer feedback, and if the patch passes review a maintainer will accept it with a comment. When pull requests fail testing, authors are expected to update their pull requests to address the failures until the tests pass and the pull request merges successfully. + +At least one review from a maintainer is required for all patches (even patches from maintainers). + +Reviewers should leave a "LGTM" comment once they are satisfied with the patch. If the patch was submitted by a maintainer with write access, the pull request should be merged by the submitter after review. + +## Code Style + +Please follow these guidelines when formatting source code: + +* Go code should match the output of `gofmt -s` + +## Developer’s Certificate of Origin + +All contributions must include acceptance of the DCO: + +```text +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. +``` + +To accept the DCO, simply add this line to each commit message with your name and email address (`git commit -s` will do this for you): + +```text +Signed-off-by: Jane Example +``` + +For legal reasons, no anonymous or pseudonymous contributions are accepted ([contact us](mailto:aeneas@ory.am) if this is an issue). + +## Pull request procedure + +To make a pull request, you will need a GitHub account; if you are unclear on this process, see GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo) and [pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at the `master` branch. Before creating a pull request, go through this checklist: + +1. Create a feature branch off of `master` so that changes do not get mixed up. +1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. +1. Run the full project test suite with the `go test ./...` (or equivalent) command and confirm that it passes. +1. Run `gofmt -s` (if the project is written in Go). +1. Accept the Developer's Certificate of Origin on all commits (see above). +1. Ensure that each commit has a subsystem prefix (ex: `controller: `). + +Pull requests will be treated as "review requests," and maintainers will give feedback on the style and substance of the patch. + +Normally, all pull requests must include tests that test your change. Occasionally, a change will be very difficult to test for. In those cases, please include a note in your commit message explaining why. + +## Conduct + +Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. + +* We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, disability, ethnicity, religion, or similar personal characteristic. +* Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. +* Be kind and courteous. There is no need to be mean or rude. +* We will exclude you from interaction if you insult, demean or harass anyone. In particular, we do not tolerate behavior that excludes people in socially marginalized groups. +* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or a member of the Fosite core team immediately. +* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome. + +We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, feedback, or concerns please let us know with a GitHub issue. diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 00000000..75713ca9 --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,2 @@ +Aeneas Rekkas (github: arekkas) +Thomas Aidan Curran (github: tacurran) \ No newline at end of file diff --git a/README.md b/README.md index 7ca513e1..ceb7cab2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,176 @@ -# oauth2 -A simple and extensible oauth2 server framework +# ![Fosite](fosite.png) + +Simple and extensible OAuth2 server-side helpers with enterprise security and zero suck. +This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enforces countermeasures suggested in [rfc6819](https://tools.ietf.org/html/rfc6819). + +[![Build Status](https://travis-ci.org/ory-am/fosite.svg?branch=master)](https://travis-ci.org/ory-am/fosite?branch=master) +[![Coverage Status](https://coveralls.io/repos/ory-am/fosite/badge.svg?branch=master&service=github)](https://coveralls.io/github/ory-am/fosite?branch=master) + + + +**Table of Contents** + +- [Motivation](#motivation) +- [Good to know](#good-to-know) +- [Security](#security) + - [Encourage security by enforcing it!](#encourage-security-by-enforcing-it) + - [Secure Tokens](#secure-tokens) + - [No state, no token](#no-state-no-token) + - [Opaque tokens](#opaque-tokens) + - [Advanced Token Validation](#advanced-token-validation) + - [Encrypt credentials at rest](#encrypt-credentials-at-rest) + - [Implement peer reviewed IETF Standards](#implement-peer-reviewed-ietf-standards) + - [Provide extensibility and interoperability](#provide-extensibility-and-interoperability) + - [Tokens](#tokens) +- [Usage](#usage) + - [Store](#store) + - [Authorize Endpoint](#authorize-endpoint) + - [OpenID Connect](#openid-connect) + - [Token Endpoint](#token-endpoint) + + + +## Motivation + +Why write another OAuth2 server side library for Go Lang? + +Other libraries are perfect for a non-critical set ups, but [fail](https://github.com/RangelReale/osin/issues/107) to comply with enterprise security standards. +This is unfortunately not an issue exclusive to Go's eco system but to many other eco systems as well. + +OpenID Connect on top of OAuth2? Not possible with popular OAuth2 libraries. Current libraries do not support capture +the extensibility of OAuth2 and instead bind you to a pattern-enforcing framework with almost no possibilities for extension. + +Fosite was written because [Hydra](https://github.com/ory-am/hydra) required a more secure and extensible OAuth2 library +then the one it was using. + +## Good to know + +Fosite is in early development. We will use gopkg for releasing new versions of the API. +Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *unstable*. +Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. + +## Security + +Fosite has two commandments. + +### Encourage security by enforcing it! + +#### Secure Tokens + +Tokens are generated with a minimum entropy of 256 bit. You can use more, if you want. + +#### No state, no token + +Without a random-looking state, *GET /oauth2/auth* will fail. + +#### Opaque tokens + +Token generators should know nothing about the request or context. + +#### Advanced Token Validation + +Tokens are layouted as `.`. The following workflow requires an attacker to gain + +a. access to the database +b. write permission in the persistent store, +c. get hold of the token encryption secret. + +A database leak or (exclusively) the knowledge of the token encrpytion secret are not enough to maliciously obtain or create a valid token. Tokens and credentials can +however still be stolen by man-in-the-middle attacks, by malicious or vulnerable clients and other attack vectors. +* Issuance + 1. The key is hashed using BCrypt (variable) and used as ``. + 2. The client is presented with `.`. + 3. The signature is encrypted and stored in the database using AES (variable). +* Validation + 1. The client presents `.`. + 2. It is validated if matches using BCrypt (variable). + 3. The signature is encrypted using AES (variable). + 4. The encrypted signature is looked up in the database, failing validation if no such row exists. + 5. They key is considered valid and is now subject for other validations, like audience, redirect or state matching. + +#### Encrypt credentials at rest + +Credentials (tokens, passwords and secrets) are always encrypted at rest. + +#### Implement peer reviewed IETF Standards + +Fosite implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enforces countermeasures suggested in [rfc6819](https://tools.ietf.org/html/rfc6819). + +### Provide extensibility and interoperability + +... because OAuth2 is an extensible and flexible **framework**. Fosite let's you register new response types, new grant +types and new response key value pares. This is useful, if you want to provide OpenID Connect on top of your +OAuth2 stack. Or custom assertions, what ever you like and as long as it is secure. ;) + +### Tokens + +Tokens are formatted as `.`. This is beneficial if you want to keep tokens encrypted at rest. +To validate a token in a OAuth2 grant, you could first check if the key matches the signature and then lookup the signature +in your persistent storage (e.g. MySQL). If your persistent storage is intruded (e.g. by SQL injection), an attacker would +only have access to the token signatures and would be, because he does not know the key, unable to use them for authorization. + +A token generated by `generator.CryptoGenerator` looks like: + +``` +GUULhK6Od/7UAlnKvMau8APHSKXSRwm9aoOk56SHBns.JDJhJDEwJDdwVmpCQmJLYzM2VDg1VHJ5aEdVOE81NVdRSkt6bHBHR1QwOC9pbTNFWmpQRXliTWRPeDQy +``` + +## Usage + +This section is WIP and we welcome discussions via PRs or in the issues. + +### Store + +### Authorize Endpoint + +```go +var r *http.Request // we're assuming that we are inside a http.Handler +var rw http.ResponseWriter // we're assuming that we are inside a http.Handler + +var store fosite.Storage // needs to be implemented or by using some library +config := fosite.NewDefaultConfig() +oauth := fosite.NewOAuth(config) +authorizeRequest, err := oauth.NewAuthorizeRequest(r, store) +if err != nil { + oauth.RedirectError(rw, error) + // or, for example: oauth.WriteError(rw, error) + return +} + +// you have now access to authorizeRequest.Scope, ...Code ...ResponseTypes ...Scopes ... + +// decide what to do based on scope and response type +// e.g: response, err = oauth.HandleAuthorizeRequest(authorizeRequest) + +// set up a session +// session := oauth2.NewAuthorizeSession(123) +// session.SetExtra(extra interface{}) + +// persist that stuff in the database +// err = oauth2.PersistAuthorizeRequest(authorizeRequest, session) // sets e.g. session.Persistent = true + +// finally, persist code in store and send response +// e.g: oauth2.WriteResponse(rw, response, session) +``` + +Because each component returns a different type, we can be (if safeguards are installed) quite sure, that the developer +implemented the work flow the right way: + +1. `NewAuthorizeRequest(args...) *AuthorizeRequest`: Fetch authorize request information +2. do whatever you like +3. `HandleAuthorizeRequest(args...) *AuthorizeResponse`: Handle authorize request (check scopes and response types, hydrate response...) +4. do whatever you like +5. `oauth2.NewAuthorizeSession(*AuthorizeResponse) *AuthorizeSession`: A session +6. do whatever you like, e.g. `session.SetExtra(map[string]interface{"foo": "bar"})` +7. `oauth2.PersistAuthorizeRequest` persists the request in the database so the token endpoint can look up information +8. do whatever you like +9. `oauth2.WriteResponse(rw, response, session)` to write the response +10. done. + +It is not clear yet how HandleAuthorizeRequest could be extensible. It might be possible to introduce an interface like AuthorizeStrategy +and implement different strategies like IDTokenStrategy, AuthorizeCodeStrategy, AccessTokenStrategy. +What could be tricky though is to define a good response / result model because the strategies be very different in execution logic and requirements. + +### OpenID Connect + +### Token Endpoint \ No newline at end of file diff --git a/auth/authorize.go b/auth/authorize.go new file mode 100644 index 00000000..e70bf970 --- /dev/null +++ b/auth/authorize.go @@ -0,0 +1,213 @@ +package auth + +import ( + "net/http" + "github.com/go-errors/errors" + "net/url" + "strings" + "golang.org/x/net/context" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/generator" +) + +// Authorize request information +type AuthorizeRequest struct { + Types []string + Client Client + Scopes []string + RedirectURI string + State string + Expiration int32 + Code generator.AuthorizeCode + Config *Config +} + +type ScopeStrategy interface { +} + +// GetRedirectURI extracts the redirect_uri from values. +// * rfc6749 3.1. Authorization Endpoint +// * rfc6749 3.1.2. Redirection Endpoint +func (c *Config) GetRedirectURI(values url.Values) (string, error) { + // rfc6749 3.1. Authorization Endpoint + // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component + redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) + if err != nil { + return "", errors.Wrap(ErrInvalidRequest, 0) + } + + // rfc6749 3.1.2. Redirection Endpoint + // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" + if rp, err := url.Parse(redirectURI); err != nil { + return "", errors.Wrap(ErrInvalidRequest, 0) + } else if rp.Host == "" { + return "", errors.Wrap(ErrInvalidRequest, 0) + } else if rp.Fragment != "" { + // "The endpoint URI MUST NOT include a fragment component." + return "", errors.Wrap(ErrInvalidRequest, 0) + } + + return redirectURI, nil +} + +// DoesClientWhiteListRedirect looks up if redirect and client are matching. +// * rfc6749 10.6. Authorization Code Redirection URI Manipulation +// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client +func (c *Config) DoesClientWhiteListRedirect(redirectURI string, client Client) (string, error) { + // rfc6749 10.6. Authorization Code Redirection URI Manipulation + // The authorization server MUST require public clients and SHOULD require confidential clients + // to register their redirection URIs. If a redirection URI is provided + // in the request, the authorization server MUST validate it against the + // registered value. + // + // rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client + // The authorization server may also enforce the usage and validation + // of pre-registered redirect URIs (see Section 5.2.3.5). + if redirectURI == "" && len(client.GetRedirectURIs()) == 1 { + redirectURI = client.GetRedirectURIs()[0] + } else if !stringInSlice(redirectURI, client.GetRedirectURIs()) { + return "", errors.Wrap(ErrInvalidRequest, 0) + } + return redirectURI, nil +} + +// NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant +// checks: +// * rfc6749 3.1. Authorization Endpoint +// * rfc6749 3.1.1. Response Type +// * rfc6749 3.1.2. Redirection Endpoint +// * rfx6749 10.6. Authorization Code Redirection URI Manipulation +// +// It also introduces countermeasures described in rfc6819: +// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client +// * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri +func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store Storage) (*AuthorizeRequest, error) { + if err := r.ParseForm(); err != nil { + return nil, errors.Wrap(ErrInvalidRequest, 0) + } + + redirectURI, err := c.GetRedirectURI(r.Form) + if err != nil { + return nil, errors.Wrap(ErrInvalidRequest, 0) + } + + client, err := c.Store.GetClient(r.Form.Get("client_id")) + if err != nil { + return nil, errors.Wrap(ErrInvalidClient, 0) + } + + // * rfc6749 10.6. Authorization Code Redirection URI Manipulation + // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client + if redirectURI, err = c.DoesClientWhiteListRedirect(redirectURI, client); err != nil { + return nil, errors.Wrap(ErrInvalidRequest, 0) + } + + // rfc6749 3.1.1. Response Type + // response_type REQUIRED. + // The value MUST be one of "code" for requesting an + // authorization code as described by Section 4.1.1, "token" for + // requesting an access token (implicit grant) as described by + // Section 4.2.1, or a registered extension value as described by Section 8.4. + // + // response-type = response-name *( SP response-name ) + // response-name = 1*response-char + // response-char = "_" / DIGIT / ALPHA + responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) + if !areResponseTypesValid(c, responseTypes) { + return nil, errors.Wrap(ErrUnsupportedGrantType, 0) + } + + // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri + // The "state" parameter should be used to link the authorization + // request with the redirect URI used to deliver the access token (Section 5.3.5). + state := r.Form.Get("state") + if state == "" { + return nil, errors.Wrap(ErrInvalidRequest, 0) + } + + code, err := c.AuthorizeCodeGenerator.GenerateAuthorizeCode() + if state == "" { + return nil, errors.Wrap(ErrServerError, 0) + } + + scopes := removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + return &AuthorizeRequest{ + Types: responseTypes, + Client: client, + Scopes: scopes, + State: state, + Expiration: c.Lifetime, + RedirectURI: redirectURI, + Config: Config, + Code: code, + }, nil +} + +func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { + redirectURI, err := c.GetRedirectURI(req.Form) + if err != nil { + http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + return + } + + client, err := c.Store.GetClient(req.Form.Get("client_id")) + if err != nil { + http.Error(rw, ErrInvalidClient, http.StatusBadRequest) + return + } + + // * rfc6749 10.6. Authorization Code Redirection URI Manipulation + // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client + if redirectURI, err = c.DoesClientWhiteListRedirect(redirectURI, client); err != nil { + http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + return + } + + redir, err := url.Parse(redirectURI) + if err != nil { + http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + return + } + + query := redir.Query() + query.Add("error", err.Error()) + query.Add("description", err.Error()) + redir.RawQuery = query.Encode() + rw.Header().Add("Location", redir.String()) + rw.WriteHeader(http.StatusFound) +} + +func (c *Config) PersistAndWriteAuthorizeCode(*AuthorizeRequest) { + +} + +func areResponseTypesValid(c *Config, responseTypes []string) bool { + if len(responseTypes) < 1 { + return false + } + for _, responseType := range responseTypes { + if !stringInSlice(responseType, c.AllowedAuthorizeResponseTypes) { + return false + } + } + return true +} + +func stringInSlice(needle string, haystack []string) bool { + for _, b := range haystack { + if b == needle { + return true + } + } + return false +} + +func removeEmpty(args []string) (ret []string) { + for _, v := range args { + v = strings.TrimSpace(v) + if v != "" { + ret = append(ret, v) + } + } + return +} \ No newline at end of file diff --git a/auth/authorize_test.go b/auth/authorize_test.go new file mode 100644 index 00000000..79a9faaf --- /dev/null +++ b/auth/authorize_test.go @@ -0,0 +1,27 @@ +package auth + +import ( +"net/url" +"testing" + "github.com/stretchr/testify/assert" + . "github.com/ory-am/fosite" +) + +func TestGetRedirectURIAgainstRFC6749Section3(t *testing.T) { + cf := &Config{} + for _ , c := range []struct{ + in string + isError bool + expected string + } { + {in: "", isError: true}, + } { + values := url.Values{} + values.Set("redirect_uri", c) + res, err := cf.GetRedirectURI(values) + assert.Equal(t, c.isError, err != nil) + if err == nil { + assert.Equal(t, c.expected, res) + } + } +} \ No newline at end of file diff --git a/auth/session/session.go b/auth/session/session.go new file mode 100644 index 00000000..23f4524f --- /dev/null +++ b/auth/session/session.go @@ -0,0 +1,103 @@ +package session + +import ( + "encoding/json" + "github.com/go-errors/errors" + "github.com/ory-am/fosite/auth" +) + +// Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). +type Session interface { + // SetExtra sets extra information that you want to be persisted. Ignore this if you have + // your own session management or do not need additional persistent states. + SetExtra(extra interface{}) error + + // WriteExtra write the extra information back to a struct pointer. + WriteExtra(to interface{}) error + + // GetResponseTypes returns the response types for this authorize session. + GetResponseTypes() []string + + // GetResponseTypes returns the client id (audience) for this authorize session. + GetClientID() string + + // GetResponseTypes returns the scope for this authorize session. + GetScopes() []string + + // GetResponseTypes returns the redirect_uri for this authorize session. + GetRedirectURI() string + + // GetResponseTypes returns the state for this authorize session. + GetState() string + + // GetResponseTypes returns the code's signature for this authorize session. + // Once persisted, you lose access to the code's key which is required for a valid code. + // This keeps you safe from a wide range attack vectors regarding your database with SQL injection being + // the most popular. + GetCodeSignature() string +} + +// JSONSession uses json.Marshal and json.Unmarshall to store extra information. It is recommended to use this +// implementation. +type JSONSession struct { + extra []byte + responseTypes []string + clientID string + scopes []string + redirectURI string + state string + signature string + ar *auth.AuthorizeRequest +} + +func NewJSONSession(ar *auth.AuthorizeRequest) *JSONSession { + return &JSONSession{ + ar: ar, + signature: ar.Code.Signature, + extra: []byte{}, + responseTypes: ar.Types, + clientID: ar.Client.GetID(), + state: ar.State, + redirectURI: ar.RedirectURI, + } +} + +func (s *JSONSession) SetExtra(extra interface{}) error { + result, err := json.Marshal(extra) + if err != nil { + return errors.New(err) + } + s.extra = result + return nil +} + +func (s *JSONSession) WriteExtra(to interface{}) error { + if err := json.Unmarshal(s.extra, to); err != nil { + return errors.New(err) + } + return nil +} + +func (s *JSONSession) GetResponseTypes() []string { + return s.responseTypes +} + +func (s *JSONSession) GetClientID() string { + return s.clientID +} + +func (s *JSONSession) GetScopes() []string { + return s.scopes +} + +func (s *JSONSession) GetRedirectURI() string { + return s.redirectURI +} + +func (s *JSONSession) GetState() string { + return s.state +} + +func (s *JSONSession) GetCodeSignature() string { + return s.GetCodeSignature() +} \ No newline at end of file diff --git a/client.go b/client.go new file mode 100644 index 00000000..50b141c7 --- /dev/null +++ b/client.go @@ -0,0 +1,36 @@ +package fosite + +import "github.com/ory-am/fosite/hash" + +// Client represents a client or an app. +type Client interface { + // GetID returns the client ID. + GetID() string + + // CompareSecret compares a secret with the stored one (e.g. a hash) and returns true if + // the secrets match. + CompareSecretWith(secret string) bool + + // Returns the client's allowed redirect URIs. + GetRedirectURIs() []string +} + +// DefaultClient is a simple default implementation of the Client interface. +type SecureClient struct { + ID string `json:"id"` + Secret string `json:"secret"` + RedirectURIs []string `json:"redirectURIs"` + Hasher hash.Hasher `json:"-"` +} + +func (c *SecureClient) GetID() string { + return c.ID +} + +func (c *SecureClient) CompareSecretWith(secret string) bool { + return c.Hasher.Compare(c.Secret, secret) == nil +} + +func (c *SecureClient) GetRedirectURIs() []string { + return c.RedirectURIs +} diff --git a/client_test.go b/client_test.go new file mode 100644 index 00000000..337079eb --- /dev/null +++ b/client_test.go @@ -0,0 +1,22 @@ +package fosite + +import "testing" +import ( + "github.com/ory-am/fosite/hash" + "github.com/stretchr/testify/assert" +) + +func TestSecureClient(t *testing.T) { + hasher := hash.BCrypt{WorkFactor: 5} + secret, _ := hasher.Hash("foo") + sc := &SecureClient{ + ID: "1", + Secret: secret, + RedirectURIs: []string{"foo", "bar"}, + Hasher: hasher, + } + assert.Equal(t, sc.ID, sc.GetID()) + assert.Equal(t, sc.RedirectURIs, sc.RedirectURIs()) + assert.True(t, sc.CompareSecretWith("foo")) + assert.False(t, sc.CompareSecretWith("bar")) +} \ No newline at end of file diff --git a/config.go b/config.go new file mode 100644 index 00000000..332057a7 --- /dev/null +++ b/config.go @@ -0,0 +1,21 @@ +package fosite +import "github.com/ory-am/fosite/generator" + +type Config struct { + AllowedAuthorizeResponseTypes []string + AllowedTokenResponseTypes []string + Lifetime int32 + Store Storage + Entropy int32 + AuthorizeCodeGenerator generator.Generator +} + +func NewDefaultConfig() *Config { + return &Config{ + AllowedAuthorizeResponseTypes: []string{"code", "token", "id_token"}, + AllowedTokenResponseTypes: []string{}, + Lifetime: 3600, + Entropy: 128, + AuthorizeCodeGenerator: generator.CryptoGenerator{}, + } +} \ No newline at end of file diff --git a/coverage.sh b/coverage.sh new file mode 100644 index 00000000..4db750d5 --- /dev/null +++ b/coverage.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# Generate test coverage statistics for Go packages. +# +# Works around the fact that `go test -coverprofile` currently does not work +# with multiple packages, see https://code.google.com/p/go/issues/detail?id=6909 +# +# Usage: script/coverage [--html|--coveralls] +# +# --html Additionally create HTML report and open it in browser +# --coveralls Push coverage statistics to coveralls.io +# + +set -e + +workdir=.cover +profile="$workdir/cover.out" +mode=count + +generate_cover_data() { + rm -rf "$workdir" + mkdir "$workdir" + + for pkg in "$@"; do + f="$workdir/$(echo $pkg | tr / -).cover" + go test -v -race -covermode="$mode" -coverprofile="$f" "$pkg" + done + + echo "mode: $mode" >"$profile" + grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" +} + +show_cover_report() { + go tool cover -${1}="$profile" +} + +push_to_coveralls() { + echo "Pushing coverage statistics to coveralls.io" + goveralls -coverprofile="$profile" +} + +generate_cover_data $(go list ./...) +show_cover_report func +case "$1" in +"") + ;; +--html) + show_cover_report html ;; +--coveralls) + push_to_coveralls ;; +*) + echo >&2 "error: invalid option: $1"; exit 1 ;; +esac diff --git a/errors.go b/errors.go new file mode 100644 index 00000000..c82bcb7e --- /dev/null +++ b/errors.go @@ -0,0 +1,106 @@ +package fosite + +import "github.com/go-errors/errors" + +var ( + ErrInvalidRequest = errors.New("The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.") + ErrUnauthorizedClient = errors.New("The client is not authorized to request a token using this method.") + ErrAccessDenied = errors.New("The resource owner or authorization server denied the request.") + ErrUnsupportedResponseType = errors.New("The authorization server does not support obtaining a token using this method.") + ErrInvalidScope = errors.New("The requested scope is invalid, unknown, or malformed.") + ErrServerError = errors.New("The authorization server encountered an unexpected condition that prevented it from fulfilling the request.") + ErrTemporarilyUnavailable = errors.New("The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.") + ErrUnsupportedGrantType = errors.New("The authorization grant type is not supported by the authorization server.") + ErrInvalidGrant = errors.New("The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.") + ErrInvalidClient = errors.New("Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method).") +) + +const ( + errInvalidRequestName = "invalid_request" + errUnauthorizedClientName = "unauthorized_client" + errAccessDeniedName = "acccess_denied" + errUnsupportedResponseTypeName = "unsupported_response_type" + errInvalidScopeName = "invalid_scope" + errServerErrorName = "server_error" + errTemporarilyUnavailableName = "errTemporarilyUnavailableName" + errUnsupportedGrantTypeName = "unsupported_grant_type" + errInvalidGrantName = "invalid_grant" + errInvalidClientName = "invalid_client" + errInvalidError = "invalid_error" +) + +type RFC6749Error struct { + Name string `json:"name"` + Description string `json:"description"` + Hint string `json:"-"` +} + +func ErrorToRFC6749(err error) (*RFC6749Error) { + ge, ok := err.(*errors.Error) + if !ok { + return &RFC6749Error{ + Name: errInvalidError, + Description: "The error is unrecognizable.", + Hint: err.Error(), + } + } + if errors.Is(ge, ErrInvalidRequest) { + return &RFC6749Error{ + Name: errInvalidRequestName, + Description: ge.Error(), + Hint: "Make sure that the various parameters are correct, be aware of case sensitivity and trim your parameters. Make sure that the client you are using has exactly whitelisted the redirect_uri you specified.", + } + } else if errors.Is(ge, ErrUnauthorizedClient) { + return &RFC6749Error{ + Name: errUnauthorizedClientName, + Description: ge.Error(), + Hint: "Make sure that client id and secret are correctly specified and that the client exists.", + } + } else if errors.Is(ge, ErrAccessDenied) { + return &RFC6749Error{ + Name: errAccessDeniedName, + Description: ge.Error(), + Hint: "Make sure that the request you are making is valid. Maybe the credential or request parameters you are using are limited in scope or otherwise restricted.", + } + } else if errors.Is(ge, ErrUnsupportedResponseType) { + return &RFC6749Error{ + Name: errUnsupportedResponseTypeName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrInvalidScope) { + return &RFC6749Error{ + Name: errInvalidScopeName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrServerError) { + return &RFC6749Error{ + Name: errServerErrorName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrTemporarilyUnavailable) { + return &RFC6749Error{ + Name: errTemporarilyUnavailableName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrUnsupportedGrantType) { + return &RFC6749Error{ + Name: errUnsupportedGrantTypeName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrInvalidGrant) { + return &RFC6749Error{ + Name: errInvalidGrantName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrInvalidClient) { + return &RFC6749Error{ + Name: errInvalidClientName, + Description: ge.Error(), + } + } + return &RFC6749Error{ + Name: errInvalidError, + Description: "The error is unrecognizable.", + Hint: ge.Error(), + } +} \ No newline at end of file diff --git a/errors_test.go b/errors_test.go new file mode 100644 index 00000000..a64881f9 --- /dev/null +++ b/errors_test.go @@ -0,0 +1,24 @@ +package fosite + +import ( + "testing" + "github.com/stretchr/testify/assert" + "github.com/go-errors/errors" + native "errors" +) + +func TestErrorToRFC6749(t *testing.T) { + assert.Equal(t, errInvalidError, ErrorToRFC6749(errors.New("")).Name) + assert.Equal(t, errInvalidError, ErrorToRFC6749(native.New("")).Name) + + assert.Equal(t, errInvalidRequestName, ErrorToRFC6749(errors.New(ErrInvalidRequest)).Name) + assert.Equal(t, errUnauthorizedClientName, ErrorToRFC6749(errors.New(ErrUnauthorizedClient)).Name) + assert.Equal(t, errAccessDeniedName, ErrorToRFC6749(errors.New(ErrAccessDenied)).Name) + assert.Equal(t, errUnsupportedResponseTypeName, ErrorToRFC6749(errors.New(ErrUnsupportedResponseType)).Name) + assert.Equal(t, errInvalidScopeName, ErrorToRFC6749(errors.New(ErrInvalidScope)).Name) + assert.Equal(t, errServerErrorName, ErrorToRFC6749(errors.New(ErrServerError)).Name) + assert.Equal(t, errTemporarilyUnavailableName, ErrorToRFC6749(errors.New(ErrTemporarilyUnavailable)).Name) + assert.Equal(t, errUnsupportedGrantTypeName, ErrorToRFC6749(errors.New(ErrUnsupportedGrantType)).Name) + assert.Equal(t, errInvalidGrantName, ErrorToRFC6749(errors.New(ErrInvalidGrant)).Name) + assert.Equal(t, errInvalidClientName, ErrorToRFC6749(errors.New(ErrInvalidClient)).Name) +} \ No newline at end of file diff --git a/fosite.png b/fosite.png new file mode 100644 index 0000000000000000000000000000000000000000..23202273562ebc9743117386c43da455a8c22152 GIT binary patch literal 4304 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 literal 0 HcmV?d00001 diff --git a/generator/crypto.go b/generator/crypto.go new file mode 100644 index 00000000..a2e67ed2 --- /dev/null +++ b/generator/crypto.go @@ -0,0 +1,77 @@ +package generator + +import ( + "bytes" + "encoding/base64" + "github.com/go-errors/errors" + "github.com/ory-am/fosite/hash" + "github.com/ory-am/fosite/rand" +) + +type CryptoGenerator struct { + AuthCodeEntropy int + Hasher hash.Hasher +} + +// Default of 32 bytes * 8 = 256 bit which is >= 128 bits as recommended by rfc6819 section 5.1.4.2.2. +const minimumEntropy = 32 + +// GenerateAuthorizeCode generates a new authorize code or returns an error. +// This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. +func (c *CryptoGenerator) GenerateAuthorizeCode() (*AuthorizeCode, error) { + if c.AuthCodeEntropy < minimumEntropy { + c.AuthCodeEntropy = minimumEntropy + } + + // When creating secrets not intended for usage by human users (e.g., + // client secrets or token handles), the authorization server should + // include a reasonable level of entropy in order to mitigate the risk + // of guessing attacks. The token value should be >=128 bits long and + // constructed from a cryptographically strong random or pseudo-random + // number sequence (see [RFC4086] for best current practice) generated + // by the authorization server. + randomBytes, err := rand.RandomBytes(c.AuthCodeEntropy, 20) + if err != nil { + return nil, err + } + + resultKey := make([]byte, base64.StdEncoding.EncodedLen(c.AuthCodeEntropy)) + base64.RawStdEncoding.Encode(resultKey, randomBytes) + resultKey = bytes.Trim(resultKey, "\x00") + + hash, err := c.Hasher.Hash(resultKey) + if err != nil { + return nil, err + } + + resultHash := make([]byte, base64.StdEncoding.EncodedLen(len(hash))) + base64.RawStdEncoding.Encode(resultHash, hash) + resultHash = bytes.Trim(resultHash, "\x00") + + return &AuthorizeCode{ + Key: string(resultKey), + Signature: string(resultHash), + }, nil +} + +// ValidateAuthorizeCodeSignature returns an AuthorizeCode, if the code argument is a valid authorize code +// and the signature matches the key. +func (c *CryptoGenerator) ValidateAuthorizeCode(code string) (ac *AuthorizeCode, err error) { + ac = new(AuthorizeCode) + ac.FromString(code) + if ac.Key == "" || ac.Signature == "" { + return nil, errors.New("Key and signature must both be not empty") + } + + signature := make([]byte, base64.RawStdEncoding.DecodedLen(len(ac.Signature))) + if _, err := base64.RawStdEncoding.Decode(signature, []byte(ac.Signature)); err != nil { + return nil, err + } + + if err := c.Hasher.Compare(signature, []byte(ac.Key)); err != nil { + // Hash is invalid + return nil, err + } + + return ac, nil +} diff --git a/generator/crypto_test.go b/generator/crypto_test.go new file mode 100644 index 00000000..d1f1d9af --- /dev/null +++ b/generator/crypto_test.go @@ -0,0 +1,38 @@ +package generator + +import ( + "github.com/ory-am/fosite/hash" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" +) + +func TestGenerateAuthorizeCode(t *testing.T) { + cg := CryptoGenerator{ + Hasher: &hash.BCrypt{}, + } + code, err := cg.GenerateAuthorizeCode() + require.Nil(t, err, "%s", err) + assert.NotEmpty(t, code) + validCode, err := cg.ValidateAuthorizeCode(code.String()) + require.Nil(t, err, "%s", err) + assert.Equal(t, validCode.Key, code.Key) + assert.Equal(t, validCode.Signature, code.Signature) +} + +func TestValidateAuthorizeCode(t *testing.T) { + var err error + cg := CryptoGenerator{ + Hasher: &hash.BCrypt{}, + } + for _, c := range []string{ + "", + " ", + "foo.bar", + "foo.", + ".foo", + } { + _, err = cg.ValidateAuthorizeCode(c) + assert.NotNil(t, err) + } +} diff --git a/generator/generator.go b/generator/generator.go new file mode 100644 index 00000000..1c262f9c --- /dev/null +++ b/generator/generator.go @@ -0,0 +1,60 @@ +package generator + +import "strings" + +// AuthorizeCode represents an authorize code. +type AuthorizeCode struct { + // Key is the code's key + Key string + + // Signature is the key's hashed signature + Signature string +} + +// FromString extracts key and signature from ".". +func (a *AuthorizeCode) FromString(data string) { + a.Key = "" + a.Signature = "" + + if data == "" { + return + } + + parts := strings.Split(data, ".") + if len(parts) != 2 { + return + } + + key := strings.TrimSpace(parts[0]) + sig := strings.TrimSpace(parts[1]) + if key == "" || sig == "" { + return + } + + a.Key = key + a.Signature = sig + return +} + +// String will return the authorize code as ".". +func (a *AuthorizeCode) String() string { + return a.Key + "." + a.Signature +} + +// Generator provides a set of methods to create access, refresh and authorize tokens. +type Generator interface { + + // GenerateAccessToken generates an access token. + // Spec does not require tokens to be opaque but it is considered best practice. + GenerateAccessToken() (string, error) + + // GenerateAccessToken generates a refresh token. + // Spec does not require tokens to be opaque but it is considered best practice. + GenerateRefreshToken() (string, error) + + // GenerateAccessToken generates a authorize code. + // Spec does not require tokens to be opaque but it is considered best practice. + GenerateAuthorizeCode() (AuthorizeCode, error) + + ValidateAuthorizeCodeSignature(code string) (AuthorizeCode, error) +} diff --git a/generator/generator_test.go b/generator/generator_test.go new file mode 100644 index 00000000..af2c0a27 --- /dev/null +++ b/generator/generator_test.go @@ -0,0 +1,27 @@ +package generator + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAuthorizeCodeToString(t *testing.T) { + ac := &AuthorizeCode{ + Key: "foo", + Signature: "bar", + } + assert.Equal(t, "foo.bar", ac.String()) +} +func TestAuthorizeCodeFromString(t *testing.T) { + ac := new(AuthorizeCode) + for _, c := range [][]string{ + {"foo.bar", "foo", "bar"}, + {"foo.", "", ""}, + {"foo", "", ""}, + {".bar", "", ""}, + } { + ac.FromString(c[0]) + assert.Equal(t, c[1], ac.Key) + assert.Equal(t, c[2], ac.Signature) + } +} diff --git a/hash/bcrypt_test.go b/hash/bcrypt_test.go new file mode 100644 index 00000000..73acdda7 --- /dev/null +++ b/hash/bcrypt_test.go @@ -0,0 +1,42 @@ +package hash + +import ( + "github.com/pborman/uuid" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestHash(t *testing.T) { + h := &BCrypt{ + WorkFactor: 10, + } + password := []byte("foo") + hash, err := h.Hash(password) + assert.Nil(t, err) + assert.NotNil(t, hash) + assert.NotEqual(t, hash, password) +} + +func TestCompareEquals(t *testing.T) { + h := &BCrypt{ + WorkFactor: 10, + } + password := []byte("foo") + hash, err := h.Hash(password) + assert.Nil(t, err) + assert.NotNil(t, hash) + err = h.Compare(hash, password) + assert.Nil(t, err) +} + +func TestCompareDifferent(t *testing.T) { + h := &BCrypt{ + WorkFactor: 10, + } + password := []byte("foo") + hash, err := h.Hash(password) + assert.Nil(t, err) + assert.NotNil(t, hash) + err = h.Compare(hash, []byte(uuid.NewRandom().String())) + assert.NotNil(t, err) +} diff --git a/hash/bcyrpt.go b/hash/bcyrpt.go new file mode 100644 index 00000000..322a6638 --- /dev/null +++ b/hash/bcyrpt.go @@ -0,0 +1,26 @@ +package hash + +import ( + "github.com/go-errors/errors" + "golang.org/x/crypto/bcrypt" +) + +// BCrypt implements the Hasher interface by using BCrypt. +type BCrypt struct { + WorkFactor int +} + +func (b *BCrypt) Hash(data []byte) ([]byte, error) { + s, err := bcrypt.GenerateFromPassword(data, b.WorkFactor) + if err != nil { + return nil, errors.New(err) + } + return s, nil +} + +func (b *BCrypt) Compare(hash, data []byte) error { + if err := bcrypt.CompareHashAndPassword(hash, data); err != nil { + return errors.New(err) + } + return nil +} diff --git a/hash/hash.go b/hash/hash.go new file mode 100644 index 00000000..123f8892 --- /dev/null +++ b/hash/hash.go @@ -0,0 +1,11 @@ +package hash + +// Hasher defines how a oauth2-compatible hasher should look like. +type Hasher interface { + // Compare compares data with a hash and returns an error + // if the two do not match. + Compare(hash, data []byte) error + + // Hash creates a hash from data or returns an error. + Hash(data []byte) ([]byte, error) +} diff --git a/rand/bytes.go b/rand/bytes.go new file mode 100644 index 00000000..1a5c692a --- /dev/null +++ b/rand/bytes.go @@ -0,0 +1,25 @@ +package rand + +import ( + "crypto/rand" + "github.com/go-errors/errors" +) + +// RandomBytes returns n random bytes by reading from crypto/rand.Reader +func RandomBytes(entropy, tries int) ([]byte, error) { + bytes := make([]byte, entropy) + + var n int + var err error + for i := 0; i < tries; i++ { + n, err = rand.Reader.Read(bytes) + if err != nil { + return nil, errors.Wrap(err, 0) + } + } + if n < entropy { + return nil, errors.Errorf("Could not read enough data with %d tries", tries) + } + + return bytes, nil +} \ No newline at end of file diff --git a/rand/bytes_test.go b/rand/bytes_test.go new file mode 100644 index 00000000..727fa503 --- /dev/null +++ b/rand/bytes_test.go @@ -0,0 +1,25 @@ +package rand + +import ( + "testing" + "github.com/stretchr/testify/assert" +) + +func TestRandomBytes(t *testing.T) { + bytes, err := RandomBytes(128, 10) + assert.Nil(t, err, "%s", err) + assert.Len(t, bytes, 128) +} + +func TestPseudoRandomness(t *testing.T) { + runs := 65536 + results := map[string]bool{} + for i := 0; i < runs; i++ { + bytes, err := RandomBytes(128, 10) + assert.Nil(t, err, "%s", err) + + _, ok := results[string(bytes)] + assert.False(t, ok) + results[string(bytes)] = true + } +} \ No newline at end of file diff --git a/response.go b/response.go new file mode 100644 index 00000000..97fbaa72 --- /dev/null +++ b/response.go @@ -0,0 +1,23 @@ +package fosite + +import "net/http" + +// Response defines fosite's response model +type Response struct { + Type string + Headers http.Header + StatusCode int + Err error + BypassRedirect bool + Output map[string]interface{} +} + +// Set sets a key value pair inside Response.Output. +func (r *Response) Set(key string, value interface{}) { + r.Output[key] = value +} + +// SetOutput replaces Response.Output. +func (r *Response) SetOutput(out map[string]interface{}) { + r.Output = out +} diff --git a/storage.go b/storage.go new file mode 100644 index 00000000..ae01bdcf --- /dev/null +++ b/storage.go @@ -0,0 +1,46 @@ +package fosite + +// Storage defines fosite's minimal storage interface. +type Storage interface { + // GetClient loads the client by its ID or returns an error + // if the client does not exist or another error occurred. + GetClient(id string) (Client, error) + + // SaveAuthorize saves authorize data. + // StoreAuthorizeRequest(*AuthorizeData) error + + // LoadAuthorize looks up AuthorizeData by a code. + // Client information MUST be loaded together. + // Optionally can return error if expired. + // LoadAuthorize(code string) (*AuthorizeData, error) + + // RemoveAuthorize revokes or deletes the authorization code. + // RemoveAuthorize(code string) error + + // SaveAccess writes AccessData. + // If RefreshToken is not blank, it must save in a way that can be loaded using LoadRefresh. + // SaveAccess(*AccessData) error + + // LoadAccess retrieves access data by token. Client information MUST be loaded together. + // AuthorizeData and AccessData DON'T NEED to be loaded if not easily available. + // Optionally can return error if expired. + // LoadAccess(token string) (*AccessData, error) + + // RemoveAccess revokes or deletes an AccessData. + // RemoveAccess(token string) error + + // LoadRefresh retrieves refresh AccessData. Client information MUST be loaded together. + // AuthorizeData and AccessData DON'T NEED to be loaded if not easily available. + // Optionally can return error if expired. + // LoadRefresh(token string) (*AccessData, error) + + // RemoveRefresh revokes or deletes refresh AccessData. + // RemoveRefresh(token string) error +} + +// Manager defines an optional but recommended API for your fosite storage implementation. This API is not +// consumed by fosite itself. You don not need to implement this library, it is merely a good practice guide. +type Manager interface { + // StoreClient stores a client or returns an error. + StoreClient(Client) error +} \ No newline at end of file From 9e59df23353964644bfcc0d148745f8dca691b39 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 2 Jan 2016 10:54:37 +0100 Subject: [PATCH 02/47] all: refactor, fixed tests, incorporated feedback --- .travis.yml | 13 +++++- README.md | 38 ++++++++--------- auth/authorize.go => authorize.go | 47 +++++++++------------ auth/authorize_test.go => authorize_test.go | 15 +++---- client.go | 2 +- client_test.go | 14 +++--- config.go | 21 ++++----- generator/crypto.go | 24 +++++------ generator/crypto_test.go | 23 +++++----- generator/generator.go | 26 ++++-------- generator/generator_test.go | 8 ++-- {auth/session => session}/session.go | 20 ++++----- 12 files changed, 120 insertions(+), 131 deletions(-) rename auth/authorize.go => authorize.go (90%) rename auth/authorize_test.go => authorize_test.go (74%) rename {auth/session => session}/session.go (88%) diff --git a/.travis.yml b/.travis.yml index 25a36f06..4a080053 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,17 @@ env: language: go go: + - 1.2 + - 1.3 + - 1.4 - 1.5 + - tip + +matrix: + allow_failures: + - go: tip + - go: 1.2 + - go: 1.3 install: - go get golang.org/x/tools/cmd/vet @@ -21,4 +31,5 @@ install: script: - go vet -x ./... - - ./coverage --coveralls \ No newline at end of file + - ./coverage --coveralls + diff --git a/README.md b/README.md index ceb7cab2..ddca3b57 100644 --- a/README.md +++ b/README.md @@ -77,20 +77,22 @@ c. get hold of the token encryption secret. A database leak or (exclusively) the knowledge of the token encrpytion secret are not enough to maliciously obtain or create a valid token. Tokens and credentials can however still be stolen by man-in-the-middle attacks, by malicious or vulnerable clients and other attack vectors. -* Issuance - 1. The key is hashed using BCrypt (variable) and used as ``. - 2. The client is presented with `.`. - 3. The signature is encrypted and stored in the database using AES (variable). -* Validation - 1. The client presents `.`. - 2. It is validated if matches using BCrypt (variable). - 3. The signature is encrypted using AES (variable). - 4. The encrypted signature is looked up in the database, failing validation if no such row exists. - 5. They key is considered valid and is now subject for other validations, like audience, redirect or state matching. + +**Issuance** +1. The key is hashed using BCrypt (variable) and used as ``. +2. The client is presented and entrusted with `.` which can act for example as an access token or an authorize code. +3. The signature is encrypted and stored in the database using AES (variable). + +**Validation** +1. The client presents `.`. +2. It is validated if matches using BCrypt (variable). +3. The signature is encrypted using AES (variable). +4. The encrypted signature is looked up in the database, failing validation if no such row exists. +5. They key is considered valid and is now subject for other validations, like audience, redirect or state matching. #### Encrypt credentials at rest -Credentials (tokens, passwords and secrets) are always encrypted at rest. +Credentials (token signatures, passwords and secrets) are always encrypted at rest. #### Implement peer reviewed IETF Standards @@ -128,8 +130,7 @@ var r *http.Request // we're assuming that we are inside a http.Handler var rw http.ResponseWriter // we're assuming that we are inside a http.Handler var store fosite.Storage // needs to be implemented or by using some library -config := fosite.NewDefaultConfig() -oauth := fosite.NewOAuth(config) +oauth := fosite.NewDefault() authorizeRequest, err := oauth.NewAuthorizeRequest(r, store) if err != nil { oauth.RedirectError(rw, error) @@ -146,11 +147,8 @@ if err != nil { // session := oauth2.NewAuthorizeSession(123) // session.SetExtra(extra interface{}) -// persist that stuff in the database -// err = oauth2.PersistAuthorizeRequest(authorizeRequest, session) // sets e.g. session.Persistent = true - // finally, persist code in store and send response -// e.g: oauth2.WriteResponse(rw, response, session) +// e.g: oauth2.FinishAccessRequest(rw, response, session) ``` Because each component returns a different type, we can be (if safeguards are installed) quite sure, that the developer @@ -160,11 +158,9 @@ implemented the work flow the right way: 2. do whatever you like 3. `HandleAuthorizeRequest(args...) *AuthorizeResponse`: Handle authorize request (check scopes and response types, hydrate response...) 4. do whatever you like -5. `oauth2.NewAuthorizeSession(*AuthorizeResponse) *AuthorizeSession`: A session +5. `oauth2.NewAuthorizeSession(*AuthorizeResponse) (*AuthorizeSession, error)`: A session 6. do whatever you like, e.g. `session.SetExtra(map[string]interface{"foo": "bar"})` -7. `oauth2.PersistAuthorizeRequest` persists the request in the database so the token endpoint can look up information -8. do whatever you like -9. `oauth2.WriteResponse(rw, response, session)` to write the response +9. `oauth2.FinishAccessRequest(rw, response, session)` to write and persist the response 10. done. It is not clear yet how HandleAuthorizeRequest could be extensible. It might be possible to introduce an interface like AuthorizeStrategy diff --git a/auth/authorize.go b/authorize.go similarity index 90% rename from auth/authorize.go rename to authorize.go index e70bf970..f856889e 100644 --- a/auth/authorize.go +++ b/authorize.go @@ -1,25 +1,23 @@ -package auth +package fosite import ( - "net/http" "github.com/go-errors/errors" + "github.com/ory-am/fosite/generator" + "golang.org/x/net/context" + "net/http" "net/url" "strings" - "golang.org/x/net/context" - . "github.com/ory-am/fosite" - "github.com/ory-am/fosite/generator" ) // Authorize request information type AuthorizeRequest struct { - Types []string + Types []string Client Client - Scopes []string + Scopes []string RedirectURI string State string - Expiration int32 - Code generator.AuthorizeCode - Config *Config + Expiration int32 + Code *generator.Token } type ScopeStrategy interface { @@ -125,47 +123,46 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store S return nil, errors.Wrap(ErrInvalidRequest, 0) } - code, err := c.AuthorizeCodeGenerator.GenerateAuthorizeCode() + code, err := c.AuthorizeCodeGenerator.Generate() if state == "" { return nil, errors.Wrap(ErrServerError, 0) } scopes := removeEmpty(strings.Split(r.Form.Get("scope"), " ")) return &AuthorizeRequest{ - Types: responseTypes, - Client: client, - Scopes: scopes, - State: state, - Expiration: c.Lifetime, + Types: responseTypes, + Client: client, + Scopes: scopes, + State: state, + Expiration: c.Lifetime, RedirectURI: redirectURI, - Config: Config, - Code: code, + Code: code, }, nil } func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { redirectURI, err := c.GetRedirectURI(req.Form) if err != nil { - http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } client, err := c.Store.GetClient(req.Form.Get("client_id")) if err != nil { - http.Error(rw, ErrInvalidClient, http.StatusBadRequest) + http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client if redirectURI, err = c.DoesClientWhiteListRedirect(redirectURI, client); err != nil { - http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } redir, err := url.Parse(redirectURI) if err != nil { - http.Error(rw, ErrInvalidRequest, http.StatusBadRequest) + http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } @@ -177,10 +174,6 @@ func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e rw.WriteHeader(http.StatusFound) } -func (c *Config) PersistAndWriteAuthorizeCode(*AuthorizeRequest) { - -} - func areResponseTypesValid(c *Config, responseTypes []string) bool { if len(responseTypes) < 1 { return false @@ -210,4 +203,4 @@ func removeEmpty(args []string) (ret []string) { } } return -} \ No newline at end of file +} diff --git a/auth/authorize_test.go b/authorize_test.go similarity index 74% rename from auth/authorize_test.go rename to authorize_test.go index 79a9faaf..5e073552 100644 --- a/auth/authorize_test.go +++ b/authorize_test.go @@ -1,27 +1,26 @@ -package auth +package fosite import ( -"net/url" -"testing" "github.com/stretchr/testify/assert" - . "github.com/ory-am/fosite" + "net/url" + "testing" ) func TestGetRedirectURIAgainstRFC6749Section3(t *testing.T) { cf := &Config{} - for _ , c := range []struct{ + for _, c := range []struct { in string isError bool expected string - } { + }{ {in: "", isError: true}, } { values := url.Values{} - values.Set("redirect_uri", c) + values.Set("redirect_uri", c.in) res, err := cf.GetRedirectURI(values) assert.Equal(t, c.isError, err != nil) if err == nil { assert.Equal(t, c.expected, res) } } -} \ No newline at end of file +} diff --git a/client.go b/client.go index 50b141c7..3c21ccf0 100644 --- a/client.go +++ b/client.go @@ -28,7 +28,7 @@ func (c *SecureClient) GetID() string { } func (c *SecureClient) CompareSecretWith(secret string) bool { - return c.Hasher.Compare(c.Secret, secret) == nil + return c.Hasher.Compare([]byte(c.Secret), []byte(secret)) == nil } func (c *SecureClient) GetRedirectURIs() []string { diff --git a/client_test.go b/client_test.go index 337079eb..11d7cb63 100644 --- a/client_test.go +++ b/client_test.go @@ -7,16 +7,16 @@ import ( ) func TestSecureClient(t *testing.T) { - hasher := hash.BCrypt{WorkFactor: 5} - secret, _ := hasher.Hash("foo") + hasher := &hash.BCrypt{WorkFactor: 5} + secret, _ := hasher.Hash([]byte("foo")) sc := &SecureClient{ - ID: "1", - Secret: secret, + ID: "1", + Secret: string(secret), RedirectURIs: []string{"foo", "bar"}, - Hasher: hasher, + Hasher: hasher, } assert.Equal(t, sc.ID, sc.GetID()) - assert.Equal(t, sc.RedirectURIs, sc.RedirectURIs()) + assert.Equal(t, sc.RedirectURIs, sc.GetRedirectURIs()) assert.True(t, sc.CompareSecretWith("foo")) assert.False(t, sc.CompareSecretWith("bar")) -} \ No newline at end of file +} diff --git a/config.go b/config.go index 332057a7..47d4f20c 100644 --- a/config.go +++ b/config.go @@ -1,21 +1,22 @@ package fosite + import "github.com/ory-am/fosite/generator" type Config struct { AllowedAuthorizeResponseTypes []string - AllowedTokenResponseTypes []string - Lifetime int32 - Store Storage - Entropy int32 - AuthorizeCodeGenerator generator.Generator + AllowedTokenResponseTypes []string + Lifetime int32 + Store Storage + Entropy int32 + AuthorizeCodeGenerator generator.Generator } func NewDefaultConfig() *Config { return &Config{ AllowedAuthorizeResponseTypes: []string{"code", "token", "id_token"}, - AllowedTokenResponseTypes: []string{}, - Lifetime: 3600, - Entropy: 128, - AuthorizeCodeGenerator: generator.CryptoGenerator{}, + AllowedTokenResponseTypes: []string{}, + Lifetime: 3600, + Entropy: 128, + AuthorizeCodeGenerator: &generator.CryptoGenerator{}, } -} \ No newline at end of file +} diff --git a/generator/crypto.go b/generator/crypto.go index a2e67ed2..c1d2921f 100644 --- a/generator/crypto.go +++ b/generator/crypto.go @@ -18,7 +18,7 @@ const minimumEntropy = 32 // GenerateAuthorizeCode generates a new authorize code or returns an error. // This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. -func (c *CryptoGenerator) GenerateAuthorizeCode() (*AuthorizeCode, error) { +func (c *CryptoGenerator) Generate() (*Token, error) { if c.AuthCodeEntropy < minimumEntropy { c.AuthCodeEntropy = minimumEntropy } @@ -48,7 +48,7 @@ func (c *CryptoGenerator) GenerateAuthorizeCode() (*AuthorizeCode, error) { base64.RawStdEncoding.Encode(resultHash, hash) resultHash = bytes.Trim(resultHash, "\x00") - return &AuthorizeCode{ + return &Token{ Key: string(resultKey), Signature: string(resultHash), }, nil @@ -56,22 +56,20 @@ func (c *CryptoGenerator) GenerateAuthorizeCode() (*AuthorizeCode, error) { // ValidateAuthorizeCodeSignature returns an AuthorizeCode, if the code argument is a valid authorize code // and the signature matches the key. -func (c *CryptoGenerator) ValidateAuthorizeCode(code string) (ac *AuthorizeCode, err error) { - ac = new(AuthorizeCode) - ac.FromString(code) - if ac.Key == "" || ac.Signature == "" { - return nil, errors.New("Key and signature must both be not empty") +func (c *CryptoGenerator) ValidateSignature(t *Token) (err error) { + if t.Key == "" || t.Signature == "" { + return errors.New("Key and signature must both be not empty") } - signature := make([]byte, base64.RawStdEncoding.DecodedLen(len(ac.Signature))) - if _, err := base64.RawStdEncoding.Decode(signature, []byte(ac.Signature)); err != nil { - return nil, err + signature := make([]byte, base64.RawStdEncoding.DecodedLen(len(t.Signature))) + if _, err := base64.RawStdEncoding.Decode(signature, []byte(t.Signature)); err != nil { + return err } - if err := c.Hasher.Compare(signature, []byte(ac.Key)); err != nil { + if err := c.Hasher.Compare(signature, []byte(t.Key)); err != nil { // Hash is invalid - return nil, err + return errors.New("Key and signature do not match") } - return ac, nil + return nil } diff --git a/generator/crypto_test.go b/generator/crypto_test.go index d1f1d9af..c9dbc135 100644 --- a/generator/crypto_test.go +++ b/generator/crypto_test.go @@ -7,24 +7,22 @@ import ( "testing" ) -func TestGenerateAuthorizeCode(t *testing.T) { - cg := CryptoGenerator{ - Hasher: &hash.BCrypt{}, - } - code, err := cg.GenerateAuthorizeCode() +func TestGenerate(t *testing.T) { + cg := CryptoGenerator{Hasher: &hash.BCrypt{}} + code, err := cg.Generate() require.Nil(t, err, "%s", err) - assert.NotEmpty(t, code) - validCode, err := cg.ValidateAuthorizeCode(code.String()) + require.NotNil(t, code) + + err = cg.ValidateSignature(code) require.Nil(t, err, "%s", err) - assert.Equal(t, validCode.Key, code.Key) - assert.Equal(t, validCode.Signature, code.Signature) } -func TestValidateAuthorizeCode(t *testing.T) { +func TestValidateSignatureRejects(t *testing.T) { var err error cg := CryptoGenerator{ Hasher: &hash.BCrypt{}, } + token := new(Token) for _, c := range []string{ "", " ", @@ -32,7 +30,8 @@ func TestValidateAuthorizeCode(t *testing.T) { "foo.", ".foo", } { - _, err = cg.ValidateAuthorizeCode(c) - assert.NotNil(t, err) + token.FromString(c) + err = cg.ValidateSignature(token) + assert.NotNil(t, err, "%s", err) } } diff --git a/generator/generator.go b/generator/generator.go index 1c262f9c..e695fb95 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -2,8 +2,8 @@ package generator import "strings" -// AuthorizeCode represents an authorize code. -type AuthorizeCode struct { +// Token represents an authorize code. +type Token struct { // Key is the code's key Key string @@ -12,7 +12,7 @@ type AuthorizeCode struct { } // FromString extracts key and signature from ".". -func (a *AuthorizeCode) FromString(data string) { +func (a *Token) FromString(data string) { a.Key = "" a.Signature = "" @@ -37,24 +37,16 @@ func (a *AuthorizeCode) FromString(data string) { } // String will return the authorize code as ".". -func (a *AuthorizeCode) String() string { +func (a *Token) String() string { return a.Key + "." + a.Signature } // Generator provides a set of methods to create access, refresh and authorize tokens. type Generator interface { + // Generate generates a opaque and signed token. + // RFC6749 does not require tokens to be opaque, but it is considered best practice. + Generate() (*Token, error) - // GenerateAccessToken generates an access token. - // Spec does not require tokens to be opaque but it is considered best practice. - GenerateAccessToken() (string, error) - - // GenerateAccessToken generates a refresh token. - // Spec does not require tokens to be opaque but it is considered best practice. - GenerateRefreshToken() (string, error) - - // GenerateAccessToken generates a authorize code. - // Spec does not require tokens to be opaque but it is considered best practice. - GenerateAuthorizeCode() (AuthorizeCode, error) - - ValidateAuthorizeCodeSignature(code string) (AuthorizeCode, error) + // ValidateSignature verifies that the tokens key matches the tokens signature. + ValidateSignature(token *Token) error } diff --git a/generator/generator_test.go b/generator/generator_test.go index af2c0a27..50dc66f2 100644 --- a/generator/generator_test.go +++ b/generator/generator_test.go @@ -5,15 +5,15 @@ import ( "testing" ) -func TestAuthorizeCodeToString(t *testing.T) { - ac := &AuthorizeCode{ +func TestTokenToString(t *testing.T) { + ac := &Token{ Key: "foo", Signature: "bar", } assert.Equal(t, "foo.bar", ac.String()) } -func TestAuthorizeCodeFromString(t *testing.T) { - ac := new(AuthorizeCode) +func TestTokenFromString(t *testing.T) { + ac := new(Token) for _, c := range [][]string{ {"foo.bar", "foo", "bar"}, {"foo.", "", ""}, diff --git a/auth/session/session.go b/session/session.go similarity index 88% rename from auth/session/session.go rename to session/session.go index 23f4524f..de627e52 100644 --- a/auth/session/session.go +++ b/session/session.go @@ -3,7 +3,7 @@ package session import ( "encoding/json" "github.com/go-errors/errors" - "github.com/ory-am/fosite/auth" + "github.com/ory-am/fosite" ) // Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). @@ -47,18 +47,18 @@ type JSONSession struct { redirectURI string state string signature string - ar *auth.AuthorizeRequest + ar *fosite.AuthorizeRequest } -func NewJSONSession(ar *auth.AuthorizeRequest) *JSONSession { +func NewJSONSession(ar *fosite.AuthorizeRequest) *JSONSession { return &JSONSession{ - ar: ar, - signature: ar.Code.Signature, - extra: []byte{}, + ar: ar, + signature: ar.Code.Signature, + extra: []byte{}, responseTypes: ar.Types, - clientID: ar.Client.GetID(), - state: ar.State, - redirectURI: ar.RedirectURI, + clientID: ar.Client.GetID(), + state: ar.State, + redirectURI: ar.RedirectURI, } } @@ -100,4 +100,4 @@ func (s *JSONSession) GetState() string { func (s *JSONSession) GetCodeSignature() string { return s.GetCodeSignature() -} \ No newline at end of file +} From 8bf73e3bb4b12e098f63b1007d4ce9a25e0221b7 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 2 Jan 2016 11:11:17 +0100 Subject: [PATCH 03/47] all: fixed tests --- .gitignore | 3 ++- .travis.yml | 4 +++- coverage.sh | 52 --------------------------------------------- generator/crypto.go | 8 +++---- 4 files changed, 9 insertions(+), 58 deletions(-) delete mode 100644 coverage.sh diff --git a/.gitignore b/.gitignore index 73de0245..208bce8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea *.iml .cover -*.log \ No newline at end of file +*.log +cover.out \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 4a080053..faadbadc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,9 +27,11 @@ install: - go get github.com/mattn/goveralls - go get golang.org/x/tools/cmd/cover - go get github.com/golang/lint/golint + - go get github.com/pierrre/gotestcover - go get -t ./... script: - go vet -x ./... - - ./coverage --coveralls + - gotestcover -coverprofile="cover.out" -race -covermode="count" ./... + - goveralls -coverprofile="cover.out" diff --git a/coverage.sh b/coverage.sh deleted file mode 100644 index 4db750d5..00000000 --- a/coverage.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -# Generate test coverage statistics for Go packages. -# -# Works around the fact that `go test -coverprofile` currently does not work -# with multiple packages, see https://code.google.com/p/go/issues/detail?id=6909 -# -# Usage: script/coverage [--html|--coveralls] -# -# --html Additionally create HTML report and open it in browser -# --coveralls Push coverage statistics to coveralls.io -# - -set -e - -workdir=.cover -profile="$workdir/cover.out" -mode=count - -generate_cover_data() { - rm -rf "$workdir" - mkdir "$workdir" - - for pkg in "$@"; do - f="$workdir/$(echo $pkg | tr / -).cover" - go test -v -race -covermode="$mode" -coverprofile="$f" "$pkg" - done - - echo "mode: $mode" >"$profile" - grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" -} - -show_cover_report() { - go tool cover -${1}="$profile" -} - -push_to_coveralls() { - echo "Pushing coverage statistics to coveralls.io" - goveralls -coverprofile="$profile" -} - -generate_cover_data $(go list ./...) -show_cover_report func -case "$1" in -"") - ;; ---html) - show_cover_report html ;; ---coveralls) - push_to_coveralls ;; -*) - echo >&2 "error: invalid option: $1"; exit 1 ;; -esac diff --git a/generator/crypto.go b/generator/crypto.go index c1d2921f..70d9587a 100644 --- a/generator/crypto.go +++ b/generator/crypto.go @@ -36,7 +36,7 @@ func (c *CryptoGenerator) Generate() (*Token, error) { } resultKey := make([]byte, base64.StdEncoding.EncodedLen(c.AuthCodeEntropy)) - base64.RawStdEncoding.Encode(resultKey, randomBytes) + base64.StdEncoding.Encode(resultKey, randomBytes) resultKey = bytes.Trim(resultKey, "\x00") hash, err := c.Hasher.Hash(resultKey) @@ -45,7 +45,7 @@ func (c *CryptoGenerator) Generate() (*Token, error) { } resultHash := make([]byte, base64.StdEncoding.EncodedLen(len(hash))) - base64.RawStdEncoding.Encode(resultHash, hash) + base64.StdEncoding.Encode(resultHash, hash) resultHash = bytes.Trim(resultHash, "\x00") return &Token{ @@ -61,8 +61,8 @@ func (c *CryptoGenerator) ValidateSignature(t *Token) (err error) { return errors.New("Key and signature must both be not empty") } - signature := make([]byte, base64.RawStdEncoding.DecodedLen(len(t.Signature))) - if _, err := base64.RawStdEncoding.Decode(signature, []byte(t.Signature)); err != nil { + signature := make([]byte, base64.StdEncoding.DecodedLen(len(t.Signature))) + if _, err := base64.StdEncoding.Decode(signature, []byte(t.Signature)); err != nil { return err } From df79a81577ec8a9b7517af794ea6f04da71abf91 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 2 Jan 2016 12:16:42 +0100 Subject: [PATCH 04/47] all: refactoring, more tests --- README.md | 17 +++- authorize.go | 66 ++++----------- authorize_test.go | 107 +++++++++++++++++++++++- client.go => client/client.go | 2 +- client_test.go => client/client_test.go | 2 +- hash/bcrypt_test.go | 2 +- helper.go | 51 +++++++++++ internal/store.go | 72 ++++++++++++++++ storage.go | 4 +- 9 files changed, 263 insertions(+), 60 deletions(-) rename client.go => client/client.go (98%) rename client_test.go => client/client_test.go (97%) create mode 100644 helper.go create mode 100644 internal/store.go diff --git a/README.md b/README.md index ddca3b57..f82f7ef1 100644 --- a/README.md +++ b/README.md @@ -143,11 +143,20 @@ if err != nil { // decide what to do based on scope and response type // e.g: response, err = oauth.HandleAuthorizeRequest(authorizeRequest) -// set up a session -// session := oauth2.NewAuthorizeSession(123) -// session.SetExtra(extra interface{}) +// now you can show the authorize page where a user logs in etc. +// userID := "12345" -// finally, persist code in store and send response + +// set up a session. an authorize session MUST include an arbitrary user id formatted as string +// session := oauth2.NewAuthorizeSession(authorizeRequest, userID) + +// now you can store additional metadata, for example +// session.SetExtra(map[string]interface{}{ +// "userEmail": "foo@bar", +// "lastSeen": new Date(), +// }) + +// finally, persist code in store and send response to the user agent // e.g: oauth2.FinishAccessRequest(rw, response, session) ``` diff --git a/authorize.go b/authorize.go index f856889e..abae4245 100644 --- a/authorize.go +++ b/authorize.go @@ -2,6 +2,7 @@ package fosite import ( "github.com/go-errors/errors" + . "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/generator" "golang.org/x/net/context" "net/http" @@ -23,10 +24,10 @@ type AuthorizeRequest struct { type ScopeStrategy interface { } -// GetRedirectURI extracts the redirect_uri from values. +// redirectFromValues extracts the redirect_uri from values. // * rfc6749 3.1. Authorization Endpoint // * rfc6749 3.1.2. Redirection Endpoint -func (c *Config) GetRedirectURI(values url.Values) (string, error) { +func (c *Config) redirectFromValues(values url.Values) (string, error) { // rfc6749 3.1. Authorization Endpoint // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) @@ -36,22 +37,17 @@ func (c *Config) GetRedirectURI(values url.Values) (string, error) { // rfc6749 3.1.2. Redirection Endpoint // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" - if rp, err := url.Parse(redirectURI); err != nil { - return "", errors.Wrap(ErrInvalidRequest, 0) - } else if rp.Host == "" { - return "", errors.Wrap(ErrInvalidRequest, 0) - } else if rp.Fragment != "" { - // "The endpoint URI MUST NOT include a fragment component." + if !(isValidURL(redirectURI)) { return "", errors.Wrap(ErrInvalidRequest, 0) } return redirectURI, nil } -// DoesClientWhiteListRedirect looks up if redirect and client are matching. +// redirectFromClient looks up if redirect and client are matching. // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client -func (c *Config) DoesClientWhiteListRedirect(redirectURI string, client Client) (string, error) { +func (c *Config) redirectFromClient(redirectURI string, client Client) (string, error) { // rfc6749 10.6. Authorization Code Redirection URI Manipulation // The authorization server MUST require public clients and SHOULD require confidential clients // to register their redirection URIs. If a redirection URI is provided @@ -62,11 +58,14 @@ func (c *Config) DoesClientWhiteListRedirect(redirectURI string, client Client) // The authorization server may also enforce the usage and validation // of pre-registered redirect URIs (see Section 5.2.3.5). if redirectURI == "" && len(client.GetRedirectURIs()) == 1 { - redirectURI = client.GetRedirectURIs()[0] - } else if !stringInSlice(redirectURI, client.GetRedirectURIs()) { - return "", errors.Wrap(ErrInvalidRequest, 0) + if isValidURL(client.GetRedirectURIs()[0]) { + return client.GetRedirectURIs()[0], nil + } + } else if stringInSlice(redirectURI, client.GetRedirectURIs()) { + return redirectURI, nil } - return redirectURI, nil + + return "", errors.New(ErrInvalidRequest) } // NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant @@ -84,7 +83,7 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store S return nil, errors.Wrap(ErrInvalidRequest, 0) } - redirectURI, err := c.GetRedirectURI(r.Form) + redirectURI, err := c.redirectFromValues(r.Form) if err != nil { return nil, errors.Wrap(ErrInvalidRequest, 0) } @@ -96,7 +95,7 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store S // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = c.DoesClientWhiteListRedirect(redirectURI, client); err != nil { + if redirectURI, err = c.redirectFromClient(redirectURI, client); err != nil { return nil, errors.Wrap(ErrInvalidRequest, 0) } @@ -141,7 +140,7 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store S } func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { - redirectURI, err := c.GetRedirectURI(req.Form) + redirectURI, err := c.redirectFromValues(req.Form) if err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return @@ -155,7 +154,7 @@ func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = c.DoesClientWhiteListRedirect(redirectURI, client); err != nil { + if redirectURI, err = c.redirectFromClient(redirectURI, client); err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } @@ -173,34 +172,3 @@ func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e rw.Header().Add("Location", redir.String()) rw.WriteHeader(http.StatusFound) } - -func areResponseTypesValid(c *Config, responseTypes []string) bool { - if len(responseTypes) < 1 { - return false - } - for _, responseType := range responseTypes { - if !stringInSlice(responseType, c.AllowedAuthorizeResponseTypes) { - return false - } - } - return true -} - -func stringInSlice(needle string, haystack []string) bool { - for _, b := range haystack { - if b == needle { - return true - } - } - return false -} - -func removeEmpty(args []string) (ret []string) { - for _, v := range args { - v = strings.TrimSpace(v) - if v != "" { - ret = append(ret, v) - } - } - return -} diff --git a/authorize_test.go b/authorize_test.go index 5e073552..adf266fc 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -1,12 +1,22 @@ package fosite import ( + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite/client" + . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" + "golang.org/x/net/context" + "net/http" "net/url" "testing" ) -func TestGetRedirectURIAgainstRFC6749Section3(t *testing.T) { +// TODO rfc6749 3.1. Authorization Endpoint +// The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component +// +// rfc6749 3.1.2. Redirection Endpoint +// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" +func TestGetRedirectURI(t *testing.T) { cf := &Config{} for _, c := range []struct { in string @@ -17,10 +27,101 @@ func TestGetRedirectURIAgainstRFC6749Section3(t *testing.T) { } { values := url.Values{} values.Set("redirect_uri", c.in) - res, err := cf.GetRedirectURI(values) - assert.Equal(t, c.isError, err != nil) + res, err := cf.redirectFromValues(values) + assert.Equal(t, c.isError, err != nil, "%s", err) if err == nil { assert.Equal(t, c.expected, res) } } } + +// rfc6749 10.6. +// Authorization Code Redirection URI Manipulation +// The authorization server MUST require public clients and SHOULD require confidential clients +// to register their redirection URIs. If a redirection URI is provided +// in the request, the authorization server MUST validate it against the +// registered value. +// +// rfc6819 4.4.1.7. +// Threat: Authorization "code" Leakage through Counterfeit Client +// The authorization server may also enforce the usage and validation +// of pre-registered redirect URIs (see Section 5.2.3.5). +func TestDoesClientWhiteListRedirect(t *testing.T) { + var err error + var redir string + + cf := &Config{} + for k, c := range []struct { + client Client + url string + isError bool + expected string + }{ + { + client: &SecureClient{RedirectURIs: []string{""}}, + url: "http://foo.com/cb", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://foo.com/cb", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "", + isError: false, + expected: "http://bar.com/cb", + }, + { + client: &SecureClient{RedirectURIs: []string{""}}, + url: "", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://bar.com/cb", + isError: false, + expected: "http://bar.com/cb", + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://bar.com/cb123", + isError: true, + }, + } { + redir, err = cf.redirectFromClient(c.url, c.client) + assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) + assert.Equal(t, c.expected, redir) + } +} + +func TestNewAuthorizeRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := NewMockStorage(ctrl) + defer ctrl.Finish() + + for k, c := range []struct { + conf *Config + r *http.Request + isError bool + mock func() + }{ + { + conf: &Config{}, + r: &http.Request{ + Header: http.Header{"": []string{""}}, + Form: url.Values{}, + PostForm: url.Values{}, + }, + mock: func() { + //store.EXPECT().GetClient() + }, + isError: true, + }, + } { + c.mock() + _, err := c.conf.NewAuthorizeRequest(context.Background(), c.r, store) + assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) + } +} diff --git a/client.go b/client/client.go similarity index 98% rename from client.go rename to client/client.go index 3c21ccf0..98035ba5 100644 --- a/client.go +++ b/client/client.go @@ -1,4 +1,4 @@ -package fosite +package client import "github.com/ory-am/fosite/hash" diff --git a/client_test.go b/client/client_test.go similarity index 97% rename from client_test.go rename to client/client_test.go index 11d7cb63..342bba7e 100644 --- a/client_test.go +++ b/client/client_test.go @@ -1,4 +1,4 @@ -package fosite +package client import "testing" import ( diff --git a/hash/bcrypt_test.go b/hash/bcrypt_test.go index 73acdda7..c8d805fa 100644 --- a/hash/bcrypt_test.go +++ b/hash/bcrypt_test.go @@ -37,6 +37,6 @@ func TestCompareDifferent(t *testing.T) { hash, err := h.Hash(password) assert.Nil(t, err) assert.NotNil(t, hash) - err = h.Compare(hash, []byte(uuid.NewRandom().String())) + err = h.Compare(hash, []byte(uuid.NewRandom())) assert.NotNil(t, err) } diff --git a/helper.go b/helper.go new file mode 100644 index 00000000..d8f6d2de --- /dev/null +++ b/helper.go @@ -0,0 +1,51 @@ +package fosite + +import ( + "net/url" + "strings" +) + +func areResponseTypesValid(c *Config, responseTypes []string) bool { + if len(responseTypes) < 1 { + return false + } + for _, responseType := range responseTypes { + if !stringInSlice(responseType, c.AllowedAuthorizeResponseTypes) { + return false + } + } + return true +} + +func stringInSlice(needle string, haystack []string) bool { + for _, b := range haystack { + if b == needle { + return true + } + } + return false +} + +func removeEmpty(args []string) (ret []string) { + for _, v := range args { + v = strings.TrimSpace(v) + if v != "" { + ret = append(ret, v) + } + } + return +} + +// rfc6749 3.1.2. Redirection Endpoint +// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" +func isValidURL(validate string) bool { + if rp, err := url.Parse(validate); err != nil { + return false + } else if rp.Host == "" { + return false + } else if rp.Fragment != "" { + // "The endpoint URI MUST NOT include a fragment component." + return false + } + return true +} diff --git a/internal/store.go b/internal/store.go new file mode 100644 index 00000000..2fa747a6 --- /dev/null +++ b/internal/store.go @@ -0,0 +1,72 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: storage.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite/client" +) + +// Mock of Storage interface +type MockStorage struct { + ctrl *gomock.Controller + recorder *_MockStorageRecorder +} + +// Recorder for MockStorage (not exported) +type _MockStorageRecorder struct { + mock *MockStorage +} + +func NewMockStorage(ctrl *gomock.Controller) *MockStorage { + mock := &MockStorage{ctrl: ctrl} + mock.recorder = &_MockStorageRecorder{mock} + return mock +} + +func (_m *MockStorage) EXPECT() *_MockStorageRecorder { + return _m.recorder +} + +func (_m *MockStorage) GetClient(id string) (Client, error) { + ret := _m.ctrl.Call(_m, "GetClient", id) + ret0, _ := ret[0].(Client) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockStorageRecorder) GetClient(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient", arg0) +} + +// Mock of Manager interface +type MockManager struct { + ctrl *gomock.Controller + recorder *_MockManagerRecorder +} + +// Recorder for MockManager (not exported) +type _MockManagerRecorder struct { + mock *MockManager +} + +func NewMockManager(ctrl *gomock.Controller) *MockManager { + mock := &MockManager{ctrl: ctrl} + mock.recorder = &_MockManagerRecorder{mock} + return mock +} + +func (_m *MockManager) EXPECT() *_MockManagerRecorder { + return _m.recorder +} + +func (_m *MockManager) StoreClient(_param0 Client) error { + ret := _m.ctrl.Call(_m, "StoreClient", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockManagerRecorder) StoreClient(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreClient", arg0) +} diff --git a/storage.go b/storage.go index ae01bdcf..d6c08d30 100644 --- a/storage.go +++ b/storage.go @@ -1,5 +1,7 @@ package fosite +import . "github.com/ory-am/fosite/client" + // Storage defines fosite's minimal storage interface. type Storage interface { // GetClient loads the client by its ID or returns an error @@ -43,4 +45,4 @@ type Storage interface { type Manager interface { // StoreClient stores a client or returns an error. StoreClient(Client) error -} \ No newline at end of file +} From 9467ca8ac7b7b7785c96f049a422ed1d16e639b4 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 2 Jan 2016 14:09:29 +0100 Subject: [PATCH 05/47] all: refactoring, renaming, more tests --- authorize.go | 153 +++++++++++++++------------- authorize_test.go | 220 ++++++++++++++++++++++++++++++++++++---- config.go | 22 ++-- errors.go | 85 +++++++++------- errors_test.go | 9 +- helper.go | 2 +- internal/generator.go | 51 ++++++++++ rand/bytes.go | 2 +- rand/bytes_test.go | 4 +- session/session.go | 40 +++++--- session/session_test.go | 29 ++++++ storage.go | 7 -- 12 files changed, 456 insertions(+), 168 deletions(-) create mode 100644 internal/generator.go create mode 100644 session/session_test.go diff --git a/authorize.go b/authorize.go index abae4245..04ca3701 100644 --- a/authorize.go +++ b/authorize.go @@ -12,60 +12,18 @@ import ( // Authorize request information type AuthorizeRequest struct { - Types []string - Client Client - Scopes []string - RedirectURI string - State string - Expiration int32 - Code *generator.Token + ResponseTypes []string + Client Client + Scopes []string + RedirectURI string + State string + ExpiresIn int32 + Code *generator.Token } -type ScopeStrategy interface { -} - -// redirectFromValues extracts the redirect_uri from values. -// * rfc6749 3.1. Authorization Endpoint -// * rfc6749 3.1.2. Redirection Endpoint -func (c *Config) redirectFromValues(values url.Values) (string, error) { - // rfc6749 3.1. Authorization Endpoint - // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component - redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) - if err != nil { - return "", errors.Wrap(ErrInvalidRequest, 0) - } +const minStateLength = 8 - // rfc6749 3.1.2. Redirection Endpoint - // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" - if !(isValidURL(redirectURI)) { - return "", errors.Wrap(ErrInvalidRequest, 0) - } - - return redirectURI, nil -} - -// redirectFromClient looks up if redirect and client are matching. -// * rfc6749 10.6. Authorization Code Redirection URI Manipulation -// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client -func (c *Config) redirectFromClient(redirectURI string, client Client) (string, error) { - // rfc6749 10.6. Authorization Code Redirection URI Manipulation - // The authorization server MUST require public clients and SHOULD require confidential clients - // to register their redirection URIs. If a redirection URI is provided - // in the request, the authorization server MUST validate it against the - // registered value. - // - // rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - // The authorization server may also enforce the usage and validation - // of pre-registered redirect URIs (see Section 5.2.3.5). - if redirectURI == "" && len(client.GetRedirectURIs()) == 1 { - if isValidURL(client.GetRedirectURIs()[0]) { - return client.GetRedirectURIs()[0], nil - } - } else if stringInSlice(redirectURI, client.GetRedirectURIs()) { - return redirectURI, nil - } - - return "", errors.New(ErrInvalidRequest) +type ScopeStrategy interface { } // NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant @@ -78,25 +36,25 @@ func (c *Config) redirectFromClient(redirectURI string, client Client) (string, // It also introduces countermeasures described in rfc6819: // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client // * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri -func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store Storage) (*AuthorizeRequest, error) { +func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request) (*AuthorizeRequest, error) { if err := r.ParseForm(); err != nil { - return nil, errors.Wrap(ErrInvalidRequest, 0) + return nil, errors.New(ErrInvalidRequest) } - redirectURI, err := c.redirectFromValues(r.Form) + redirectURI, err := redirectFromValues(r.Form) if err != nil { - return nil, errors.Wrap(ErrInvalidRequest, 0) + return nil, errors.New(ErrInvalidRequest) } client, err := c.Store.GetClient(r.Form.Get("client_id")) if err != nil { - return nil, errors.Wrap(ErrInvalidClient, 0) + return nil, errors.New(ErrInvalidClient) } // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = c.redirectFromClient(redirectURI, client); err != nil { - return nil, errors.Wrap(ErrInvalidRequest, 0) + if redirectURI, err = redirectFromClient(redirectURI, client); err != nil { + return nil, errors.New(ErrInvalidRequest) } // rfc6749 3.1.1. Response Type @@ -111,36 +69,45 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request, store S // response-char = "_" / DIGIT / ALPHA responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) if !areResponseTypesValid(c, responseTypes) { - return nil, errors.Wrap(ErrUnsupportedGrantType, 0) + return nil, errors.New(ErrUnsupportedResponseType) } // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri // The "state" parameter should be used to link the authorization // request with the redirect URI used to deliver the access token (Section 5.3.5). + // + // https://tools.ietf.org/html/rfc6819#section-4.4.1.8 + // The "state" parameter should not be guessable state := r.Form.Get("state") if state == "" { - return nil, errors.Wrap(ErrInvalidRequest, 0) + return nil, errors.New(ErrInvalidState) + } else if len(state) < minStateLength { + // We're assuming that using less then 6 characters for the state can not be considered "unguessable" + return nil, errors.New(ErrInvalidState) } + // Generate the auth token code, err := c.AuthorizeCodeGenerator.Generate() - if state == "" { - return nil, errors.Wrap(ErrServerError, 0) + if err != nil { + return nil, errors.New(ErrServerError) } + // Remove empty items from arrays scopes := removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + return &AuthorizeRequest{ - Types: responseTypes, - Client: client, - Scopes: scopes, - State: state, - Expiration: c.Lifetime, - RedirectURI: redirectURI, - Code: code, + ResponseTypes: responseTypes, + Client: client, + Scopes: scopes, + State: state, + ExpiresIn: c.Lifetime, + RedirectURI: redirectURI, + Code: code, }, nil } func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { - redirectURI, err := c.redirectFromValues(req.Form) + redirectURI, err := redirectFromValues(req.Form) if err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return @@ -154,7 +121,7 @@ func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = c.redirectFromClient(redirectURI, client); err != nil { + if redirectURI, err = redirectFromClient(redirectURI, client); err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) return } @@ -172,3 +139,47 @@ func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e rw.Header().Add("Location", redir.String()) rw.WriteHeader(http.StatusFound) } + +// redirectFromValues extracts the redirect_uri from values. +// * rfc6749 3.1. Authorization Endpoint +// * rfc6749 3.1.2. Redirection Endpoint +func redirectFromValues(values url.Values) (string, error) { + // rfc6749 3.1. Authorization Endpoint + // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component + redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) + if err != nil { + return "", errors.Wrap(ErrInvalidRequest, 0) + } + + // rfc6749 3.1.2. Redirection Endpoint + // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" + if !(isValidURL(redirectURI)) { + return "", errors.Wrap(ErrInvalidRequest, 0) + } + + return redirectURI, nil +} + +// redirectFromClient looks up if redirect and client are matching. +// * rfc6749 10.6. Authorization Code Redirection URI Manipulation +// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client +func redirectFromClient(redirectURI string, client Client) (string, error) { + // rfc6749 10.6. Authorization Code Redirection URI Manipulation + // The authorization server MUST require public clients and SHOULD require confidential clients + // to register their redirection URIs. If a redirection URI is provided + // in the request, the authorization server MUST validate it against the + // registered value. + // + // rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client + // The authorization server may also enforce the usage and validation + // of pre-registered redirect URIs (see Section 5.2.3.5). + if redirectURI == "" && len(client.GetRedirectURIs()) == 1 { + if isValidURL(client.GetRedirectURIs()[0]) { + return client.GetRedirectURIs()[0], nil + } + } else if stringInSlice(redirectURI, client.GetRedirectURIs()) { + return redirectURI, nil + } + + return "", errors.New(ErrInvalidRequest) +} diff --git a/authorize_test.go b/authorize_test.go index adf266fc..e16b7402 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -3,8 +3,10 @@ package fosite import ( "github.com/golang/mock/gomock" . "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/generator" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" + "github.com/vektra/errors" "golang.org/x/net/context" "net/http" "net/url" @@ -17,7 +19,6 @@ import ( // rfc6749 3.1.2. Redirection Endpoint // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" func TestGetRedirectURI(t *testing.T) { - cf := &Config{} for _, c := range []struct { in string isError bool @@ -27,7 +28,7 @@ func TestGetRedirectURI(t *testing.T) { } { values := url.Values{} values.Set("redirect_uri", c.in) - res, err := cf.redirectFromValues(values) + res, err := redirectFromValues(values) assert.Equal(t, c.isError, err != nil, "%s", err) if err == nil { assert.Equal(t, c.expected, res) @@ -50,7 +51,6 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { var err error var redir string - cf := &Config{} for k, c := range []struct { client Client url string @@ -90,7 +90,7 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { isError: true, }, } { - redir, err = cf.redirectFromClient(c.url, c.client) + redir, err = redirectFromClient(c.url, c.client) assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) assert.Equal(t, c.expected, redir) } @@ -99,29 +99,215 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { func TestNewAuthorizeRequest(t *testing.T) { ctrl := gomock.NewController(t) store := NewMockStorage(ctrl) + gen := NewMockGenerator(ctrl) defer ctrl.Finish() for k, c := range []struct { - conf *Config - r *http.Request - isError bool - mock func() + desc string + conf *Config + r *http.Request + query url.Values + expectedError error + mock func() + expect *AuthorizeRequest }{ + /* empty request */ { - conf: &Config{}, - r: &http.Request{ - Header: http.Header{"": []string{""}}, - Form: url.Values{}, - PostForm: url.Values{}, + desc: "empty request fails", + conf: &Config{Store: store}, + r: &http.Request{}, + expectedError: ErrInvalidRequest, + mock: func() {}, + }, + /* invalid redirect uri */ + { + desc: "invalid redirect uri fails", + conf: &Config{Store: store}, + query: url.Values{"redirect_uri": []string{"invalid"}}, + expectedError: ErrInvalidRequest, + mock: func() {}, + }, + /* invalid client */ + { + desc: "invalid client uri fails", + conf: &Config{Store: store}, + query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, + }, + /* redirect client mismatch */ + { + desc: "client and request redirects mismatch", + conf: &Config{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, }, + expectedError: ErrInvalidRequest, mock: func() { - //store.EXPECT().GetClient() + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) + }, + }, + /* no response type */ + { + desc: "no response type", + conf: &Config{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + }, + expectedError: ErrUnsupportedResponseType, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* invalid response type */ + { + desc: "invalid response type", + conf: &Config{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"foo"}, + }, + expectedError: ErrUnsupportedResponseType, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* invalid response type */ + { + desc: "invalid response type", + conf: &Config{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"foo"}, + }, + expectedError: ErrUnsupportedResponseType, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* unsupported response type */ + { + desc: "unspported response type", + conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code token"}, + }, + expectedError: ErrUnsupportedResponseType, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* unsupported response type */ + { + desc: "unspported response type", + conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"foo"}, + }, + expectedError: ErrUnsupportedResponseType, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* no state */ + { + desc: "no state", + conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code"}, + }, + expectedError: ErrInvalidState, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* short state */ + { + desc: "short state", + conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code"}, + "state": []string{"short"}, + }, + expectedError: ErrInvalidState, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* code gen fails */ + { + desc: "code gen fails", + conf: &Config{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code"}, + "state": []string{"strong-state"}, + }, + expectedError: ErrServerError, + mock: func() { + gen.EXPECT().Generate().Return(nil, errors.New("")) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* success case */ + { + desc: "should pass", + conf: &Config{ + Store: store, + AuthorizeCodeGenerator: gen, + AllowedResponseTypes: []string{"code", "token"}, + Lifetime: 3600, + }, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code token"}, + "state": []string{"strong-state"}, + "scope": []string{"foo bar"}, + }, + mock: func() { + gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + expect: &AuthorizeRequest{ + RedirectURI: "http://foo.bar/cb", + Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, + ResponseTypes: []string{"code", "token"}, + State: "strong-state", + Scopes: []string{"foo", "bar"}, + ExpiresIn: 3600, + Code: &generator.Token{Key: "foo", Signature: "bar"}, }, - isError: true, }, } { c.mock() - _, err := c.conf.NewAuthorizeRequest(context.Background(), c.r, store) - assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) + if c.r == nil { + c.r = &http.Request{Header: http.Header{}} + if c.query != nil { + c.r.URL = &url.URL{RawQuery: c.query.Encode()} + } + } + + ar, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) + assert.Equal(t, c.expectedError == nil, err == nil, "%d: %s\n%s", k, c.desc, err) + if c.expectedError != nil { + assert.Equal(t, err.Error(), c.expectedError.Error(), "%d: %s\n%s", k, c.desc, err) + } + assert.Equal(t, c.expect, ar, "%d: %s\n", k, c.desc) } } diff --git a/config.go b/config.go index 47d4f20c..8365f7dd 100644 --- a/config.go +++ b/config.go @@ -3,20 +3,20 @@ package fosite import "github.com/ory-am/fosite/generator" type Config struct { - AllowedAuthorizeResponseTypes []string - AllowedTokenResponseTypes []string - Lifetime int32 - Store Storage - Entropy int32 - AuthorizeCodeGenerator generator.Generator + AllowedResponseTypes []string + AllowedTokenResponseTypes []string + Lifetime int32 + Store Storage + Entropy int32 + AuthorizeCodeGenerator generator.Generator } func NewDefaultConfig() *Config { return &Config{ - AllowedAuthorizeResponseTypes: []string{"code", "token", "id_token"}, - AllowedTokenResponseTypes: []string{}, - Lifetime: 3600, - Entropy: 128, - AuthorizeCodeGenerator: &generator.CryptoGenerator{}, + AllowedResponseTypes: []string{"code", "token", "id_token"}, + AllowedTokenResponseTypes: []string{}, + Lifetime: 3600, + Entropy: 128, + AuthorizeCodeGenerator: &generator.CryptoGenerator{}, } } diff --git a/errors.go b/errors.go index c82bcb7e..ad2936e8 100644 --- a/errors.go +++ b/errors.go @@ -3,30 +3,32 @@ package fosite import "github.com/go-errors/errors" var ( - ErrInvalidRequest = errors.New("The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.") - ErrUnauthorizedClient = errors.New("The client is not authorized to request a token using this method.") - ErrAccessDenied = errors.New("The resource owner or authorization server denied the request.") - ErrUnsupportedResponseType = errors.New("The authorization server does not support obtaining a token using this method.") - ErrInvalidScope = errors.New("The requested scope is invalid, unknown, or malformed.") - ErrServerError = errors.New("The authorization server encountered an unexpected condition that prevented it from fulfilling the request.") - ErrTemporarilyUnavailable = errors.New("The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.") - ErrUnsupportedGrantType = errors.New("The authorization grant type is not supported by the authorization server.") - ErrInvalidGrant = errors.New("The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.") - ErrInvalidClient = errors.New("Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method).") + ErrInvalidRequest = errors.New("The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed") + ErrUnauthorizedClient = errors.New("The client is not authorized to request a token using this method") + ErrAccessDenied = errors.New("The resource owner or authorization server denied the request") + ErrUnsupportedResponseType = errors.New("The authorization server does not support obtaining a token using this method") + ErrInvalidScope = errors.New("The requested scope is invalid, unknown, or malformed") + ErrServerError = errors.New("The authorization server encountered an unexpected condition that prevented it from fulfilling the request") + ErrTemporarilyUnavailable = errors.New("The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server") + ErrUnsupportedGrantType = errors.New("The authorization grant type is not supported by the authorization server") + ErrInvalidGrant = errors.New("The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client") + ErrInvalidClient = errors.New("Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method)") + ErrInvalidState = errors.Errorf("The state is missing or has less than %d characters and is therefore considered too weak", minStateLength) ) const ( - errInvalidRequestName = "invalid_request" - errUnauthorizedClientName = "unauthorized_client" - errAccessDeniedName = "acccess_denied" + errInvalidRequestName = "invalid_request" + errUnauthorizedClientName = "unauthorized_client" + errAccessDeniedName = "acccess_denied" errUnsupportedResponseTypeName = "unsupported_response_type" - errInvalidScopeName = "invalid_scope" - errServerErrorName = "server_error" - errTemporarilyUnavailableName = "errTemporarilyUnavailableName" - errUnsupportedGrantTypeName = "unsupported_grant_type" - errInvalidGrantName = "invalid_grant" - errInvalidClientName = "invalid_client" - errInvalidError = "invalid_error" + errInvalidScopeName = "invalid_scope" + errServerErrorName = "server_error" + errTemporarilyUnavailableName = "errTemporarilyUnavailableName" + errUnsupportedGrantTypeName = "unsupported_grant_type" + errInvalidGrantName = "invalid_grant" + errInvalidClientName = "invalid_client" + errInvalidError = "invalid_error" + errInvalidState = "invalid_state" ) type RFC6749Error struct { @@ -35,72 +37,77 @@ type RFC6749Error struct { Hint string `json:"-"` } -func ErrorToRFC6749(err error) (*RFC6749Error) { +func ErrorToRFC6749(err error) *RFC6749Error { ge, ok := err.(*errors.Error) if !ok { return &RFC6749Error{ - Name: errInvalidError, + Name: errInvalidError, Description: "The error is unrecognizable.", - Hint: err.Error(), + Hint: err.Error(), } } if errors.Is(ge, ErrInvalidRequest) { return &RFC6749Error{ - Name: errInvalidRequestName, + Name: errInvalidRequestName, Description: ge.Error(), - Hint: "Make sure that the various parameters are correct, be aware of case sensitivity and trim your parameters. Make sure that the client you are using has exactly whitelisted the redirect_uri you specified.", + Hint: "Make sure that the various parameters are correct, be aware of case sensitivity and trim your parameters. Make sure that the client you are using has exactly whitelisted the redirect_uri you specified.", } } else if errors.Is(ge, ErrUnauthorizedClient) { return &RFC6749Error{ - Name: errUnauthorizedClientName, + Name: errUnauthorizedClientName, Description: ge.Error(), - Hint: "Make sure that client id and secret are correctly specified and that the client exists.", + Hint: "Make sure that client id and secret are correctly specified and that the client exists.", } } else if errors.Is(ge, ErrAccessDenied) { return &RFC6749Error{ - Name: errAccessDeniedName, + Name: errAccessDeniedName, Description: ge.Error(), - Hint: "Make sure that the request you are making is valid. Maybe the credential or request parameters you are using are limited in scope or otherwise restricted.", + Hint: "Make sure that the request you are making is valid. Maybe the credential or request parameters you are using are limited in scope or otherwise restricted.", } } else if errors.Is(ge, ErrUnsupportedResponseType) { return &RFC6749Error{ - Name: errUnsupportedResponseTypeName, + Name: errUnsupportedResponseTypeName, Description: ge.Error(), } } else if errors.Is(ge, ErrInvalidScope) { return &RFC6749Error{ - Name: errInvalidScopeName, + Name: errInvalidScopeName, Description: ge.Error(), } } else if errors.Is(ge, ErrServerError) { return &RFC6749Error{ - Name: errServerErrorName, + Name: errServerErrorName, Description: ge.Error(), } } else if errors.Is(ge, ErrTemporarilyUnavailable) { return &RFC6749Error{ - Name: errTemporarilyUnavailableName, + Name: errTemporarilyUnavailableName, Description: ge.Error(), } } else if errors.Is(ge, ErrUnsupportedGrantType) { return &RFC6749Error{ - Name: errUnsupportedGrantTypeName, + Name: errUnsupportedGrantTypeName, Description: ge.Error(), } } else if errors.Is(ge, ErrInvalidGrant) { return &RFC6749Error{ - Name: errInvalidGrantName, + Name: errInvalidGrantName, Description: ge.Error(), } } else if errors.Is(ge, ErrInvalidClient) { return &RFC6749Error{ - Name: errInvalidClientName, + Name: errInvalidClientName, + Description: ge.Error(), + } + } else if errors.Is(ge, ErrInvalidState) { + return &RFC6749Error{ + Name: errInvalidState, Description: ge.Error(), } } return &RFC6749Error{ - Name: errInvalidError, + Name: errInvalidError, Description: "The error is unrecognizable.", - Hint: ge.Error(), + Hint: ge.Error(), } -} \ No newline at end of file +} diff --git a/errors_test.go b/errors_test.go index a64881f9..15b38639 100644 --- a/errors_test.go +++ b/errors_test.go @@ -1,10 +1,10 @@ package fosite import ( - "testing" - "github.com/stretchr/testify/assert" - "github.com/go-errors/errors" native "errors" + "github.com/go-errors/errors" + "github.com/stretchr/testify/assert" + "testing" ) func TestErrorToRFC6749(t *testing.T) { @@ -21,4 +21,5 @@ func TestErrorToRFC6749(t *testing.T) { assert.Equal(t, errUnsupportedGrantTypeName, ErrorToRFC6749(errors.New(ErrUnsupportedGrantType)).Name) assert.Equal(t, errInvalidGrantName, ErrorToRFC6749(errors.New(ErrInvalidGrant)).Name) assert.Equal(t, errInvalidClientName, ErrorToRFC6749(errors.New(ErrInvalidClient)).Name) -} \ No newline at end of file + assert.Equal(t, errInvalidState, ErrorToRFC6749(errors.New(ErrInvalidState)).Name) +} diff --git a/helper.go b/helper.go index d8f6d2de..c0c8a33e 100644 --- a/helper.go +++ b/helper.go @@ -10,7 +10,7 @@ func areResponseTypesValid(c *Config, responseTypes []string) bool { return false } for _, responseType := range responseTypes { - if !stringInSlice(responseType, c.AllowedAuthorizeResponseTypes) { + if !stringInSlice(responseType, c.AllowedResponseTypes) { return false } } diff --git a/internal/generator.go b/internal/generator.go new file mode 100644 index 00000000..1e948ec4 --- /dev/null +++ b/internal/generator.go @@ -0,0 +1,51 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: generator/generator.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite/generator" +) + +// Mock of Generator interface +type MockGenerator struct { + ctrl *gomock.Controller + recorder *_MockGeneratorRecorder +} + +// Recorder for MockGenerator (not exported) +type _MockGeneratorRecorder struct { + mock *MockGenerator +} + +func NewMockGenerator(ctrl *gomock.Controller) *MockGenerator { + mock := &MockGenerator{ctrl: ctrl} + mock.recorder = &_MockGeneratorRecorder{mock} + return mock +} + +func (_m *MockGenerator) EXPECT() *_MockGeneratorRecorder { + return _m.recorder +} + +func (_m *MockGenerator) Generate() (*Token, error) { + ret := _m.ctrl.Call(_m, "Generate") + ret0, _ := ret[0].(*Token) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockGeneratorRecorder) Generate() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "Generate") +} + +func (_m *MockGenerator) ValidateSignature(token *Token) error { + ret := _m.ctrl.Call(_m, "ValidateSignature", token) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockGeneratorRecorder) ValidateSignature(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "ValidateSignature", arg0) +} diff --git a/rand/bytes.go b/rand/bytes.go index 1a5c692a..e3f33a4d 100644 --- a/rand/bytes.go +++ b/rand/bytes.go @@ -22,4 +22,4 @@ func RandomBytes(entropy, tries int) ([]byte, error) { } return bytes, nil -} \ No newline at end of file +} diff --git a/rand/bytes_test.go b/rand/bytes_test.go index 727fa503..baedfd9a 100644 --- a/rand/bytes_test.go +++ b/rand/bytes_test.go @@ -1,8 +1,8 @@ package rand import ( - "testing" "github.com/stretchr/testify/assert" + "testing" ) func TestRandomBytes(t *testing.T) { @@ -22,4 +22,4 @@ func TestPseudoRandomness(t *testing.T) { assert.False(t, ok) results[string(bytes)] = true } -} \ No newline at end of file +} diff --git a/session/session.go b/session/session.go index de627e52..1ab26f45 100644 --- a/session/session.go +++ b/session/session.go @@ -7,7 +7,7 @@ import ( ) // Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). -type Session interface { +type AuthorizeSession interface { // SetExtra sets extra information that you want to be persisted. Ignore this if you have // your own session management or do not need additional persistent states. SetExtra(extra interface{}) error @@ -24,6 +24,9 @@ type Session interface { // GetResponseTypes returns the scope for this authorize session. GetScopes() []string + // GetUser returns the user for this authorize session. + GetUserID() string + // GetResponseTypes returns the redirect_uri for this authorize session. GetRedirectURI() string @@ -37,9 +40,9 @@ type Session interface { GetCodeSignature() string } -// JSONSession uses json.Marshal and json.Unmarshall to store extra information. It is recommended to use this +// defaultSession uses json.Marshal and json.Unmarshall to store extra information. It is recommended to use this // implementation. -type JSONSession struct { +type defaultSession struct { extra []byte responseTypes []string clientID string @@ -47,22 +50,25 @@ type JSONSession struct { redirectURI string state string signature string + userID string ar *fosite.AuthorizeRequest } -func NewJSONSession(ar *fosite.AuthorizeRequest) *JSONSession { - return &JSONSession{ +func NewAuthorizeSession(ar *fosite.AuthorizeRequest, userID string) AuthorizeSession { + return &defaultSession{ ar: ar, signature: ar.Code.Signature, extra: []byte{}, - responseTypes: ar.Types, + responseTypes: ar.ResponseTypes, clientID: ar.Client.GetID(), state: ar.State, + scopes: ar.Scopes, redirectURI: ar.RedirectURI, + userID: userID, } } -func (s *JSONSession) SetExtra(extra interface{}) error { +func (s *defaultSession) SetExtra(extra interface{}) error { result, err := json.Marshal(extra) if err != nil { return errors.New(err) @@ -71,33 +77,37 @@ func (s *JSONSession) SetExtra(extra interface{}) error { return nil } -func (s *JSONSession) WriteExtra(to interface{}) error { +func (s *defaultSession) WriteExtra(to interface{}) error { if err := json.Unmarshal(s.extra, to); err != nil { return errors.New(err) } return nil } -func (s *JSONSession) GetResponseTypes() []string { +func (s *defaultSession) GetResponseTypes() []string { return s.responseTypes } -func (s *JSONSession) GetClientID() string { +func (s *defaultSession) GetClientID() string { return s.clientID } -func (s *JSONSession) GetScopes() []string { +func (s *defaultSession) GetScopes() []string { return s.scopes } -func (s *JSONSession) GetRedirectURI() string { +func (s *defaultSession) GetRedirectURI() string { return s.redirectURI } -func (s *JSONSession) GetState() string { +func (s *defaultSession) GetState() string { return s.state } -func (s *JSONSession) GetCodeSignature() string { - return s.GetCodeSignature() +func (s *defaultSession) GetCodeSignature() string { + return s.signature +} + +func (s *defaultSession) GetUserID() string { + return s.userID } diff --git a/session/session_test.go b/session/session_test.go new file mode 100644 index 00000000..0b40a369 --- /dev/null +++ b/session/session_test.go @@ -0,0 +1,29 @@ +package session + +import ( + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/generator" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestNewAuthorizeSession(t *testing.T) { + ar := &fosite.AuthorizeRequest{ + ResponseTypes: []string{"code token"}, + Client: &client.SecureClient{ID: "client"}, + Scopes: []string{"email id_token"}, + RedirectURI: "https://foo.bar/cb", + State: "randomState", + ExpiresIn: 30, + Code: &generator.Token{Key: "key", Signature: "sig"}, + } + as := NewAuthorizeSession(ar, "1234") + + assert.Equal(t, ar.Client.GetID(), as.GetClientID()) + assert.Equal(t, ar.Code.Signature, as.GetCodeSignature()) + assert.Equal(t, ar.RedirectURI, as.GetRedirectURI()) + assert.Equal(t, ar.ResponseTypes, as.GetResponseTypes()) + assert.Equal(t, ar.Scopes, as.GetScopes()) + assert.Equal(t, "1234", as.GetUserID()) +} diff --git a/storage.go b/storage.go index d6c08d30..9df4121d 100644 --- a/storage.go +++ b/storage.go @@ -39,10 +39,3 @@ type Storage interface { // RemoveRefresh revokes or deletes refresh AccessData. // RemoveRefresh(token string) error } - -// Manager defines an optional but recommended API for your fosite storage implementation. This API is not -// consumed by fosite itself. You don not need to implement this library, it is merely a good practice guide. -type Manager interface { - // StoreClient stores a client or returns an error. - StoreClient(Client) error -} From e5476d15413c7bf96b5a1c282f9d079f538dcc83 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 2 Jan 2016 14:41:58 +0100 Subject: [PATCH 06/47] all: refactoring, renaming, docs --- README.md | 140 +++++++++++++++++-------------- authorize.go | 4 +- authorize_test.go | 28 +++---- helper.go | 2 +- config.go => oauth.go | 11 ++- storage/postgres/store.go | 44 ++++++++++ storage/postgres/store_test.go | 1 + storage.go => storage/storage.go | 2 +- 8 files changed, 147 insertions(+), 85 deletions(-) rename config.go => oauth.go (75%) create mode 100644 storage/postgres/store.go create mode 100644 storage/postgres/store_test.go rename storage.go => storage/storage.go (98%) diff --git a/README.md b/README.md index f82f7ef1..2e184687 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,6 @@ This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enfor - [Usage](#usage) - [Store](#store) - [Authorize Endpoint](#authorize-endpoint) - - [OpenID Connect](#openid-connect) - [Token Endpoint](#token-endpoint) @@ -79,17 +78,25 @@ A database leak or (exclusively) the knowledge of the token encrpytion secret ar however still be stolen by man-in-the-middle attacks, by malicious or vulnerable clients and other attack vectors. **Issuance** + 1. The key is hashed using BCrypt (variable) and used as ``. 2. The client is presented and entrusted with `.` which can act for example as an access token or an authorize code. 3. The signature is encrypted and stored in the database using AES (variable). **Validation** + 1. The client presents `.`. 2. It is validated if matches using BCrypt (variable). 3. The signature is encrypted using AES (variable). 4. The encrypted signature is looked up in the database, failing validation if no such row exists. 5. They key is considered valid and is now subject for other validations, like audience, redirect or state matching. +A token generated by `generator.CryptoGenerator` looks like: + +``` +GUULhK6Od/7UAlnKvMau8APHSKXSRwm9aoOk56SHBns.JDJhJDEwJDdwVmpCQmJLYzM2VDg1VHJ5aEdVOE81NVdRSkt6bHBHR1QwOC9pbTNFWmpQRXliTWRPeDQy +``` + #### Encrypt credentials at rest Credentials (token signatures, passwords and secrets) are always encrypted at rest. @@ -104,78 +111,85 @@ Fosite implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enforces co types and new response key value pares. This is useful, if you want to provide OpenID Connect on top of your OAuth2 stack. Or custom assertions, what ever you like and as long as it is secure. ;) -### Tokens - -Tokens are formatted as `.`. This is beneficial if you want to keep tokens encrypted at rest. -To validate a token in a OAuth2 grant, you could first check if the key matches the signature and then lookup the signature -in your persistent storage (e.g. MySQL). If your persistent storage is intruded (e.g. by SQL injection), an attacker would -only have access to the token signatures and would be, because he does not know the key, unable to use them for authorization. - -A token generated by `generator.CryptoGenerator` looks like: - -``` -GUULhK6Od/7UAlnKvMau8APHSKXSRwm9aoOk56SHBns.JDJhJDEwJDdwVmpCQmJLYzM2VDg1VHJ5aEdVOE81NVdRSkt6bHBHR1QwOC9pbTNFWmpQRXliTWRPeDQy -``` - ## Usage This section is WIP and we welcome discussions via PRs or in the issues. ### Store +To use fosite, you need to implement `fosite.Storage`. Example implementations (e.g. postgres) of `fosite.Storage` +will be added in the close future. + ### Authorize Endpoint ```go -var r *http.Request // we're assuming that we are inside a http.Handler -var rw http.ResponseWriter // we're assuming that we are inside a http.Handler - -var store fosite.Storage // needs to be implemented or by using some library -oauth := fosite.NewDefault() -authorizeRequest, err := oauth.NewAuthorizeRequest(r, store) -if err != nil { - oauth.RedirectError(rw, error) - // or, for example: oauth.WriteError(rw, error) - return +package main + +import "github.com/ory-am/fosite" +import "github.com/ory-am/fosite/session" +import "github.com/ory-am/fosite/storage" + +// Let's assume that we're in a http handler +func handleAuth(rw http.ResponseWriter, req *http.Request) { + oauth2 := fosite.NewDefaultOAuth2() + + // ** This part of the API is not finalized yet ** + // var store storage.Storage + // this should be something like: store := fosite.NewPostgreSQLStore() + // **** + + authorizeRequest, err := oauth2.NewAuthorizeRequest(r, store) + if err != nil { + // ** This part of the API is not finalized yet ** + // oauth2.RedirectError(rw, error) + // oauth2.WriteError(rw, error) + // oauth2.handleError... + // **** + return + } + + // you have now access to authorizeRequest, Code ResponseTypes, Scopes ... + // and can show the user agent a login or consent page. + + // it would also be possible to redirect the user to an identity provider (google, microsoft live, ...) here + // and do fancy stuff like OpenID Connect amongst others + + // Once you have confirmed the users identity and consent that he indeed wants to give app XYZ authorization, + // you will use the user's id to create an authorize session + user := "12345" + session := session.NewAuthorizeSession(authorizeRequest, user) + + // You can store additional metadata, for example + // session.SetExtra(map[string]interface{}{ + // "userEmail": "foo@bar", + // "lastSeen": new Date(), + // "usingIdentityProvider": "google", + // }) + + // Now is the time to handle the response types + + // ** This part of the API is not finalized yet ** + // response = &AuthorizeResponse{} + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) + // + // or + // + // this approach would make it possible to check if all response types could be served or not + // additionally, a callback for FinishAccessRequest could be provided + // + // response = &AuthorizeResponse{} + // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // **** + + // Almost done! The next step is going to persist the session in the database for later use. + // It is additionally going to output a result based on response_type. + + // ** API not finalized yet ** + // err := oauth2.FinishAccessRequest(rw, response, session) + // **** } - -// you have now access to authorizeRequest.Scope, ...Code ...ResponseTypes ...Scopes ... - -// decide what to do based on scope and response type -// e.g: response, err = oauth.HandleAuthorizeRequest(authorizeRequest) - -// now you can show the authorize page where a user logs in etc. -// userID := "12345" - - -// set up a session. an authorize session MUST include an arbitrary user id formatted as string -// session := oauth2.NewAuthorizeSession(authorizeRequest, userID) - -// now you can store additional metadata, for example -// session.SetExtra(map[string]interface{}{ -// "userEmail": "foo@bar", -// "lastSeen": new Date(), -// }) - -// finally, persist code in store and send response to the user agent -// e.g: oauth2.FinishAccessRequest(rw, response, session) ``` -Because each component returns a different type, we can be (if safeguards are installed) quite sure, that the developer -implemented the work flow the right way: - -1. `NewAuthorizeRequest(args...) *AuthorizeRequest`: Fetch authorize request information -2. do whatever you like -3. `HandleAuthorizeRequest(args...) *AuthorizeResponse`: Handle authorize request (check scopes and response types, hydrate response...) -4. do whatever you like -5. `oauth2.NewAuthorizeSession(*AuthorizeResponse) (*AuthorizeSession, error)`: A session -6. do whatever you like, e.g. `session.SetExtra(map[string]interface{"foo": "bar"})` -9. `oauth2.FinishAccessRequest(rw, response, session)` to write and persist the response -10. done. - -It is not clear yet how HandleAuthorizeRequest could be extensible. It might be possible to introduce an interface like AuthorizeStrategy -and implement different strategies like IDTokenStrategy, AuthorizeCodeStrategy, AccessTokenStrategy. -What could be tricky though is to define a good response / result model because the strategies be very different in execution logic and requirements. - -### OpenID Connect - ### Token Endpoint \ No newline at end of file diff --git a/authorize.go b/authorize.go index 04ca3701..fb496e7b 100644 --- a/authorize.go +++ b/authorize.go @@ -36,7 +36,7 @@ type ScopeStrategy interface { // It also introduces countermeasures described in rfc6819: // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client // * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri -func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request) (*AuthorizeRequest, error) { +func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*AuthorizeRequest, error) { if err := r.ParseForm(); err != nil { return nil, errors.New(ErrInvalidRequest) } @@ -106,7 +106,7 @@ func (c *Config) NewAuthorizeRequest(_ context.Context, r *http.Request) (*Autho }, nil } -func (c *Config) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { +func (c *OAuth2) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { redirectURI, err := redirectFromValues(req.Form) if err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) diff --git a/authorize_test.go b/authorize_test.go index e16b7402..ad73808c 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -104,7 +104,7 @@ func TestNewAuthorizeRequest(t *testing.T) { for k, c := range []struct { desc string - conf *Config + conf *OAuth2 r *http.Request query url.Values expectedError error @@ -114,7 +114,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* empty request */ { desc: "empty request fails", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, r: &http.Request{}, expectedError: ErrInvalidRequest, mock: func() {}, @@ -122,7 +122,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid redirect uri */ { desc: "invalid redirect uri fails", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{"redirect_uri": []string{"invalid"}}, expectedError: ErrInvalidRequest, mock: func() {}, @@ -130,7 +130,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid client */ { desc: "invalid client uri fails", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, expectedError: ErrInvalidClient, mock: func() { @@ -140,7 +140,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* redirect client mismatch */ { desc: "client and request redirects mismatch", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -153,7 +153,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* no response type */ { desc: "no response type", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -166,7 +166,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid response type */ { desc: "invalid response type", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -180,7 +180,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid response type */ { desc: "invalid response type", - conf: &Config{Store: store}, + conf: &OAuth2{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -194,7 +194,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* unsupported response type */ { desc: "unspported response type", - conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -208,7 +208,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* unsupported response type */ { desc: "unspported response type", - conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -222,7 +222,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* no state */ { desc: "no state", - conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -236,7 +236,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* short state */ { desc: "short state", - conf: &Config{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -251,7 +251,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* code gen fails */ { desc: "code gen fails", - conf: &Config{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, + conf: &OAuth2{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -267,7 +267,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* success case */ { desc: "should pass", - conf: &Config{ + conf: &OAuth2{ Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code", "token"}, diff --git a/helper.go b/helper.go index c0c8a33e..1870faa0 100644 --- a/helper.go +++ b/helper.go @@ -5,7 +5,7 @@ import ( "strings" ) -func areResponseTypesValid(c *Config, responseTypes []string) bool { +func areResponseTypesValid(c *OAuth2, responseTypes []string) bool { if len(responseTypes) < 1 { return false } diff --git a/config.go b/oauth.go similarity index 75% rename from config.go rename to oauth.go index 8365f7dd..9e6393de 100644 --- a/config.go +++ b/oauth.go @@ -1,8 +1,11 @@ package fosite -import "github.com/ory-am/fosite/generator" +import ( + "github.com/ory-am/fosite/generator" + . "github.com/ory-am/fosite/storage" +) -type Config struct { +type OAuth2 struct { AllowedResponseTypes []string AllowedTokenResponseTypes []string Lifetime int32 @@ -11,8 +14,8 @@ type Config struct { AuthorizeCodeGenerator generator.Generator } -func NewDefaultConfig() *Config { - return &Config{ +func NewDefaultOAuth2() *OAuth2 { + return &OAuth2{ AllowedResponseTypes: []string{"code", "token", "id_token"}, AllowedTokenResponseTypes: []string{}, Lifetime: 3600, diff --git a/storage/postgres/store.go b/storage/postgres/store.go new file mode 100644 index 00000000..be610636 --- /dev/null +++ b/storage/postgres/store.go @@ -0,0 +1,44 @@ +package postgres + +import ( + "fmt" + "github.com/go-errors/errors" + "github.com/jmoiron/sqlx" + "github.com/ory-am/fosite/client" +) + +const ( + clientTable = "fosite_client" +) + +type PGStore struct { + DB *sqlx.DB +} + +var schemata = []string{ + fmt.Sprintf(` +CREATE TABLE IF NOT EXISTS %s ( + id text NOT NULL PRIMARY KEY, + secret text NOT NULL, + redirect_uris text NOT NULL, + allow_user_grant bool false +) +`, clientTable), +} + +func (s *PGStore) CreateSchemas() error { + for _, schema := range schemata { + if _, err := s.DB.Exec(schema); err != nil { + return errors.Wrap(err, 1) + } + } + return nil +} + +func (s *PGStore) CreateClient(client.Client) error { + return nil +} + +func (s *PGStore) GetClient(id string) (client.Client, error) { + return &client.SecureClient{}, nil +} diff --git a/storage/postgres/store_test.go b/storage/postgres/store_test.go new file mode 100644 index 00000000..bf560bea --- /dev/null +++ b/storage/postgres/store_test.go @@ -0,0 +1 @@ +package postgres diff --git a/storage.go b/storage/storage.go similarity index 98% rename from storage.go rename to storage/storage.go index 9df4121d..99d281dc 100644 --- a/storage.go +++ b/storage/storage.go @@ -1,4 +1,4 @@ -package fosite +package storage import . "github.com/ory-am/fosite/client" From 5b9b20cd6b91a5cf72d054dc9afa2afc9d6dfd15 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 4 Jan 2016 19:11:28 +0100 Subject: [PATCH 07/47] session: moved to root package, updated docs --- README.md | 33 ++++++++++++---------- session/session.go => session.go | 7 ++--- session/session_test.go => session_test.go | 5 ++-- 3 files changed, 23 insertions(+), 22 deletions(-) rename session/session.go => session.go (94%) rename session/session_test.go => session_test.go (91%) diff --git a/README.md b/README.md index 2e184687..e765fe9b 100644 --- a/README.md +++ b/README.md @@ -131,12 +131,8 @@ import "github.com/ory-am/fosite/storage" // Let's assume that we're in a http handler func handleAuth(rw http.ResponseWriter, req *http.Request) { - oauth2 := fosite.NewDefaultOAuth2() - - // ** This part of the API is not finalized yet ** - // var store storage.Storage - // this should be something like: store := fosite.NewPostgreSQLStore() - // **** + store := fosite.NewPostgreSQLStore() + oauth2 := fosite.NewDefaultOAuth2(store) authorizeRequest, err := oauth2.NewAuthorizeRequest(r, store) if err != nil { @@ -144,7 +140,7 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // oauth2.RedirectError(rw, error) // oauth2.WriteError(rw, error) // oauth2.handleError... - // **** + // **** return } @@ -157,14 +153,21 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // Once you have confirmed the users identity and consent that he indeed wants to give app XYZ authorization, // you will use the user's id to create an authorize session user := "12345" - session := session.NewAuthorizeSession(authorizeRequest, user) - - // You can store additional metadata, for example - // session.SetExtra(map[string]interface{}{ - // "userEmail": "foo@bar", - // "lastSeen": new Date(), - // "usingIdentityProvider": "google", - // }) + session := fosite.NewAuthorizeSession(authorizeRequest, user) + + // You can store additional metadata, for example: + session.SetExtra(map[string]interface{}{ + "userEmail": "foo@bar", + "lastSeen": new Date(), + "usingIdentityProvider": "google", + }) + + // or + session.SetExtra(&struct{ + Name string + } { + Name: "foo" + }) // Now is the time to handle the response types diff --git a/session/session.go b/session.go similarity index 94% rename from session/session.go rename to session.go index 1ab26f45..423a0a9c 100644 --- a/session/session.go +++ b/session.go @@ -1,9 +1,8 @@ -package session +package fosite import ( "encoding/json" "github.com/go-errors/errors" - "github.com/ory-am/fosite" ) // Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). @@ -51,10 +50,10 @@ type defaultSession struct { state string signature string userID string - ar *fosite.AuthorizeRequest + ar *AuthorizeRequest } -func NewAuthorizeSession(ar *fosite.AuthorizeRequest, userID string) AuthorizeSession { +func NewAuthorizeSession(ar *AuthorizeRequest, userID string) AuthorizeSession { return &defaultSession{ ar: ar, signature: ar.Code.Signature, diff --git a/session/session_test.go b/session_test.go similarity index 91% rename from session/session_test.go rename to session_test.go index 0b40a369..9768adf8 100644 --- a/session/session_test.go +++ b/session_test.go @@ -1,7 +1,6 @@ -package session +package fosite import ( - "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/generator" "github.com/stretchr/testify/assert" @@ -9,7 +8,7 @@ import ( ) func TestNewAuthorizeSession(t *testing.T) { - ar := &fosite.AuthorizeRequest{ + ar := &AuthorizeRequest{ ResponseTypes: []string{"code token"}, Client: &client.SecureClient{ID: "client"}, Scopes: []string{"email id_token"}, From 18717023c4d6b5c02691f94fe80714f2e5e9862d Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 4 Jan 2016 19:11:28 +0100 Subject: [PATCH 08/47] session: moved to root package, updated docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e765fe9b..fe32ac42 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // It is additionally going to output a result based on response_type. // ** API not finalized yet ** - // err := oauth2.FinishAccessRequest(rw, response, session) + // err := oauth2.FinishAuthorizeRequest(rw, response, session) // **** } ``` From 30b6e74b13f567237ea770bf6a4e99dd95085dcc Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 6 Jan 2016 11:39:45 +0100 Subject: [PATCH 09/47] authorize: defined OAuth2.HandleResponseTypes Incorporated feedback from GitHub, did refactoring and renaming, added tests --- README.md | 33 +++---- authorize_privates_test.go | 91 +++++++++++++++++ authorize_test.go | 157 ++++++++++++++++-------------- handler.go | 45 +++++++++ handler_test.go | 63 ++++++++++++ internal/handler.go | 42 ++++++++ internal/{store.go => storage.go} | 32 +++--- oauth.go | 5 +- response.go | 5 - session.go | 46 +++++---- session_test.go | 25 ++++- storage/storage.go => storage.go | 12 ++- 12 files changed, 408 insertions(+), 148 deletions(-) create mode 100644 authorize_privates_test.go create mode 100644 handler.go create mode 100644 handler_test.go create mode 100644 internal/handler.go rename internal/{store.go => storage.go} (58%) rename storage/storage.go => storage.go (80%) diff --git a/README.md b/README.md index fe32ac42..14676ec6 100644 --- a/README.md +++ b/README.md @@ -125,16 +125,20 @@ will be added in the close future. ```go package main -import "github.com/ory-am/fosite" -import "github.com/ory-am/fosite/session" -import "github.com/ory-am/fosite/storage" +import( + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/session" + "github.com/ory-am/fosite/storage" + "golang.org/x/net/context" +) // Let's assume that we're in a http handler func handleAuth(rw http.ResponseWriter, req *http.Request) { store := fosite.NewPostgreSQLStore() oauth2 := fosite.NewDefaultOAuth2(store) + ctx := context.Background() - authorizeRequest, err := oauth2.NewAuthorizeRequest(r, store) + authorizeRequest, err := oauth2.NewAuthorizeRequest(ctx, r) if err != nil { // ** This part of the API is not finalized yet ** // oauth2.RedirectError(rw, error) @@ -153,7 +157,9 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // Once you have confirmed the users identity and consent that he indeed wants to give app XYZ authorization, // you will use the user's id to create an authorize session user := "12345" - session := fosite.NewAuthorizeSession(authorizeRequest, user) + + // NewAuthorizeSessionSQL uses gob.encode to safely store data set with SetExtra + session := fosite.NewAuthorizeSessionSQL(authorizeRequest, user) // You can store additional metadata, for example: session.SetExtra(map[string]interface{}{ @@ -171,20 +177,9 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // Now is the time to handle the response types - // ** This part of the API is not finalized yet ** - // response = &AuthorizeResponse{} - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) - // - // or - // - // this approach would make it possible to check if all response types could be served or not - // additionally, a callback for FinishAccessRequest could be provided - // - // response = &AuthorizeResponse{} - // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // **** + // you can use a custom list of response type handlers by setting + // oauth2.ResponseTypeHandlers = []fosite.ResponseTypeHandler{} + response, err := oauth2.HandleResponseTypes(ctx, authorizeRequest, r) // Almost done! The next step is going to persist the session in the database for later use. // It is additionally going to output a result based on response_type. diff --git a/authorize_privates_test.go b/authorize_privates_test.go new file mode 100644 index 00000000..dee7ba83 --- /dev/null +++ b/authorize_privates_test.go @@ -0,0 +1,91 @@ +package fosite + +import ( + . "github.com/ory-am/fosite/client" + "github.com/stretchr/testify/assert" + "net/url" + "testing" +) + +// TODO rfc6749 3.1. Authorization Endpoint +// The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component +// +// rfc6749 3.1.2. Redirection Endpoint +// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" +func TestGetRedirectURI(t *testing.T) { + for _, c := range []struct { + in string + isError bool + expected string + }{ + {in: "", isError: true}, + } { + values := url.Values{} + values.Set("redirect_uri", c.in) + res, err := redirectFromValues(values) + assert.Equal(t, c.isError, err != nil, "%s", err) + if err == nil { + assert.Equal(t, c.expected, res) + } + } +} + +// rfc6749 10.6. +// Authorization Code Redirection URI Manipulation +// The authorization server MUST require public clients and SHOULD require confidential clients +// to register their redirection URIs. If a redirection URI is provided +// in the request, the authorization server MUST validate it against the +// registered value. +// +// rfc6819 4.4.1.7. +// Threat: Authorization "code" Leakage through Counterfeit Client +// The authorization server may also enforce the usage and validation +// of pre-registered redirect URIs (see Section 5.2.3.5). +func TestDoesClientWhiteListRedirect(t *testing.T) { + var err error + var redir string + + for k, c := range []struct { + client Client + url string + isError bool + expected string + }{ + { + client: &SecureClient{RedirectURIs: []string{""}}, + url: "http://foo.com/cb", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://foo.com/cb", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "", + isError: false, + expected: "http://bar.com/cb", + }, + { + client: &SecureClient{RedirectURIs: []string{""}}, + url: "", + isError: true, + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://bar.com/cb", + isError: false, + expected: "http://bar.com/cb", + }, + { + client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + url: "http://bar.com/cb123", + isError: true, + }, + } { + redir, err = redirectFromClient(c.url, c.client) + assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) + assert.Equal(t, c.expected, redir) + } +} diff --git a/authorize_test.go b/authorize_test.go index ad73808c..eb6fcf69 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -1,11 +1,13 @@ -package fosite +package fosite_test import ( "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/generator" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/vektra/errors" "golang.org/x/net/context" "net/http" @@ -13,86 +15,91 @@ import ( "testing" ) -// TODO rfc6749 3.1. Authorization Endpoint -// The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component -// -// rfc6749 3.1.2. Redirection Endpoint -// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" -func TestGetRedirectURI(t *testing.T) { - for _, c := range []struct { - in string - isError bool - expected string - }{ - {in: "", isError: true}, - } { - values := url.Values{} - values.Set("redirect_uri", c.in) - res, err := redirectFromValues(values) - assert.Equal(t, c.isError, err != nil, "%s", err) - if err == nil { - assert.Equal(t, c.expected, res) - } - } -} - -// rfc6749 10.6. -// Authorization Code Redirection URI Manipulation -// The authorization server MUST require public clients and SHOULD require confidential clients -// to register their redirection URIs. If a redirection URI is provided -// in the request, the authorization server MUST validate it against the -// registered value. -// -// rfc6819 4.4.1.7. -// Threat: Authorization "code" Leakage through Counterfeit Client -// The authorization server may also enforce the usage and validation -// of pre-registered redirect URIs (see Section 5.2.3.5). -func TestDoesClientWhiteListRedirect(t *testing.T) { - var err error - var redir string +func TestAuthorizeWorkflow(t *testing.T) { + ctrl := gomock.NewController(t) + store := NewMockStorage(ctrl) + gen := NewMockGenerator(ctrl) + defer ctrl.Finish() for k, c := range []struct { - client Client - url string - isError bool - expected string + desc string + conf *OAuth2 + r *http.Request + query url.Values + expectedError error + mock func() + expect *AuthorizeRequest }{ { - client: &SecureClient{RedirectURIs: []string{""}}, - url: "http://foo.com/cb", - isError: true, - }, - { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://foo.com/cb", - isError: true, - }, - { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "", - isError: false, - expected: "http://bar.com/cb", - }, - { - client: &SecureClient{RedirectURIs: []string{""}}, - url: "", - isError: true, - }, - { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://bar.com/cb", - isError: false, - expected: "http://bar.com/cb", - }, - { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://bar.com/cb123", - isError: true, + desc: "should pass", + conf: &OAuth2{ + Store: store, + AuthorizeCodeGenerator: gen, + AllowedResponseTypes: []string{"code", "token"}, + Lifetime: 3600, + }, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code token"}, + "state": []string{"strong-state"}, + "scope": []string{"foo bar"}, + }, + mock: func() { + gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + expect: &AuthorizeRequest{ + RedirectURI: "http://foo.bar/cb", + Client: &SecureClient{ID: "1234", RedirectURIs: []string{"http://foo.bar/cb"}}, + ResponseTypes: []string{"code", "token"}, + State: "strong-state", + Scopes: []string{"foo", "bar"}, + ExpiresIn: 3600, + Code: &generator.Token{Key: "foo", Signature: "bar"}, + }, }, } { - redir, err = redirectFromClient(c.url, c.client) - assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) - assert.Equal(t, c.expected, redir) + c.mock() + if c.r == nil { + c.r = &http.Request{Header: http.Header{}} + if c.query != nil { + c.r.URL = &url.URL{RawQuery: c.query.Encode()} + } + } + + // equals to: c.conf = NewDefaultOAuth2(store) + c.conf.Store = store + authorizeRequest, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) + require.Nil(t, err, "%d: %s", k, err) + + userID := "user-id" + _ = NewAuthorizeSessionSQL(authorizeRequest, userID) + + // if err := store.StoreAuthorizeSession(sess); err != nil { + // return err + // } + + //response := NewAuthorizeResponse() + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) + // + // or + // + // this approach would make it possible to check if all response types could be served or not + // additionally, a callback for FinishAccessRequest could be provided + // + // response = &AuthorizeResponse{} + // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // **** + + // Almost done! The next step is going to persist the session in the database for later use. + // It is additionally going to output a result based on response_type. + + // ** API not finalized yet ** + // err := oauth2.FinishAuthorizeRequest(rw, response, session) + // **** } } diff --git a/handler.go b/handler.go new file mode 100644 index 00000000..0b4bdef1 --- /dev/null +++ b/handler.go @@ -0,0 +1,45 @@ +package fosite + +import ( + "errors" + "golang.org/x/net/context" + "net/http" +) + +var ErrInvalidResponseType = errors.New("This handler is unable handle any of the response types requested by the auhtorize request") +var ErrNoResponseTypeHandlerFound = errors.New("None of the handler's are able to handle this authorize request") + +type ResponseTypeHandler interface { + // HandleResponseType handles an authorize request. To extend the handler's capabilities, the http request + // is passed along, if further information retrieval is required. + // + // If HandleResponseType fails, the handler implementation MUST return ErrInvalidResponseType. + HandleResponseType(context.Context, *Response, AuthorizeRequest, http.Request) error +} + +// NewAuthorizeResponse iterates through all response type handlers and returns their result or +// ErrNoResponseTypeHandlerFound if none of the handler's were able to handle it. +// +// Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle +// the given request and an arbitrary error if an error occurred +func (o *OAuth2) NewAuthorizeResponse(ctx context.Context, ar *AuthorizeRequest, r *http.Request) (*Response, error) { + var resp = new(Response) + var err error + var found bool + + for _, h := range o.ResponseTypeHandlers { + // Dereference http request and authorize request so handler's can't mess with it. + err = h.HandleResponseType(ctx, resp, *ar, *r) + if err == nil { + found = true + } else if err != ErrInvalidResponseType { + return nil, err + } + } + + if !found { + return nil, ErrNoResponseTypeHandlerFound + } + + return resp, nil +} diff --git a/handler_test.go b/handler_test.go new file mode 100644 index 00000000..803d9e48 --- /dev/null +++ b/handler_test.go @@ -0,0 +1,63 @@ +package fosite_test + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/require" + "golang.org/x/net/context" + "net/http" + "testing" +) + +var arbitraryError = errors.New("") + +func TestNewAuthorizeResponse(t *testing.T) { + ctrl := gomock.NewController(t) + rths := []*MockResponseTypeHandler{ + NewMockResponseTypeHandler(ctrl), + NewMockResponseTypeHandler(ctrl), + NewMockResponseTypeHandler(ctrl), + } + defer ctrl.Finish() + + for k, c := range []struct { + handlers []ResponseTypeHandler + mock func() + expectsError error + expects *Response + }{ + { + handlers: []ResponseTypeHandler{ + rths[0], + rths[1], + }, + mock: func() { + rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + }, + expectsError: arbitraryError, + }, + { + handlers: []ResponseTypeHandler{ + rths[0], + rths[1], + }, + mock: func() { + rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) + rths[1].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + }, + expectsError: arbitraryError, + }, + } { + c.mock() + o := &OAuth2{ + ResponseTypeHandlers: c.handlers, + } + resp, err := o.NewAuthorizeResponse(context.Background(), &AuthorizeRequest{}, &http.Request{}) + require.Equal(t, c.expectsError, err, "%d: %s", k, err) + if err != nil { + require.Equal(t, c.expects, resp) + } + } +} diff --git a/internal/handler.go b/internal/handler.go new file mode 100644 index 00000000..f834e116 --- /dev/null +++ b/internal/handler.go @@ -0,0 +1,42 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: handler.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + context "golang.org/x/net/context" + http "net/http" +) + +// Mock of ResponseTypeHandler interface +type MockResponseTypeHandler struct { + ctrl *gomock.Controller + recorder *_MockResponseTypeHandlerRecorder +} + +// Recorder for MockResponseTypeHandler (not exported) +type _MockResponseTypeHandlerRecorder struct { + mock *MockResponseTypeHandler +} + +func NewMockResponseTypeHandler(ctrl *gomock.Controller) *MockResponseTypeHandler { + mock := &MockResponseTypeHandler{ctrl: ctrl} + mock.recorder = &_MockResponseTypeHandlerRecorder{mock} + return mock +} + +func (_m *MockResponseTypeHandler) EXPECT() *_MockResponseTypeHandlerRecorder { + return _m.recorder +} + +func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *Response, _param2 AuthorizeRequest, _param3 http.Request) error { + ret := _m.ctrl.Call(_m, "HandleResponseType", _param0, _param1, _param2, _param3) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockResponseTypeHandlerRecorder) HandleResponseType(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleResponseType", arg0, arg1, arg2, arg3) +} diff --git a/internal/store.go b/internal/storage.go similarity index 58% rename from internal/store.go rename to internal/storage.go index 2fa747a6..77ece57f 100644 --- a/internal/store.go +++ b/internal/storage.go @@ -5,6 +5,7 @@ package internal import ( gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/client" ) @@ -40,33 +41,22 @@ func (_mr *_MockStorageRecorder) GetClient(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient", arg0) } -// Mock of Manager interface -type MockManager struct { - ctrl *gomock.Controller - recorder *_MockManagerRecorder -} - -// Recorder for MockManager (not exported) -type _MockManagerRecorder struct { - mock *MockManager -} - -func NewMockManager(ctrl *gomock.Controller) *MockManager { - mock := &MockManager{ctrl: ctrl} - mock.recorder = &_MockManagerRecorder{mock} - return mock +func (_m *MockStorage) StoreAuthorizeSession(session *AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "StoreAuthorizeSession", session) + ret0, _ := ret[0].(error) + return ret0 } -func (_m *MockManager) EXPECT() *_MockManagerRecorder { - return _m.recorder +func (_mr *_MockStorageRecorder) StoreAuthorizeSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreAuthorizeSession", arg0) } -func (_m *MockManager) StoreClient(_param0 Client) error { - ret := _m.ctrl.Call(_m, "StoreClient", _param0) +func (_m *MockStorage) GetAuthorizeSession(signature string, session *AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "GetAuthorizeSession", signature, session) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockManagerRecorder) StoreClient(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreClient", arg0) +func (_mr *_MockStorageRecorder) GetAuthorizeSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeSession", arg0, arg1) } diff --git a/oauth.go b/oauth.go index 9e6393de..97b209a4 100644 --- a/oauth.go +++ b/oauth.go @@ -2,7 +2,6 @@ package fosite import ( "github.com/ory-am/fosite/generator" - . "github.com/ory-am/fosite/storage" ) type OAuth2 struct { @@ -12,14 +11,16 @@ type OAuth2 struct { Store Storage Entropy int32 AuthorizeCodeGenerator generator.Generator + ResponseTypeHandlers []ResponseTypeHandler } -func NewDefaultOAuth2() *OAuth2 { +func NewDefaultOAuth2(store Storage) *OAuth2 { return &OAuth2{ AllowedResponseTypes: []string{"code", "token", "id_token"}, AllowedTokenResponseTypes: []string{}, Lifetime: 3600, Entropy: 128, AuthorizeCodeGenerator: &generator.CryptoGenerator{}, + Store: store, } } diff --git a/response.go b/response.go index 97fbaa72..e61b06c1 100644 --- a/response.go +++ b/response.go @@ -16,8 +16,3 @@ type Response struct { func (r *Response) Set(key string, value interface{}) { r.Output[key] = value } - -// SetOutput replaces Response.Output. -func (r *Response) SetOutput(out map[string]interface{}) { - r.Output = out -} diff --git a/session.go b/session.go index 423a0a9c..ae460a0b 100644 --- a/session.go +++ b/session.go @@ -1,8 +1,10 @@ package fosite import ( - "encoding/json" + "bytes" + "encoding/gob" "github.com/go-errors/errors" + "github.com/ory-am/fosite/generator" ) // Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). @@ -39,24 +41,26 @@ type AuthorizeSession interface { GetCodeSignature() string } -// defaultSession uses json.Marshal and json.Unmarshall to store extra information. It is recommended to use this +// defaultSession uses gob.Encode and gob.Decode to store extra information. It is recommended to use this // implementation. -type defaultSession struct { +type sqlSession struct { extra []byte responseTypes []string clientID string scopes []string redirectURI string state string - signature string + code *generator.Token userID string ar *AuthorizeRequest } -func NewAuthorizeSession(ar *AuthorizeRequest, userID string) AuthorizeSession { - return &defaultSession{ +// NewAuthorizeSessionSQL creates a new authorize session and uses gob.Encode and gob.Decode to store extra information. +// It is recommended to use this implementation. +func NewAuthorizeSessionSQL(ar *AuthorizeRequest, userID string) AuthorizeSession { + return &sqlSession{ ar: ar, - signature: ar.Code.Signature, + code: ar.Code, extra: []byte{}, responseTypes: ar.ResponseTypes, clientID: ar.Client.GetID(), @@ -67,46 +71,46 @@ func NewAuthorizeSession(ar *AuthorizeRequest, userID string) AuthorizeSession { } } -func (s *defaultSession) SetExtra(extra interface{}) error { - result, err := json.Marshal(extra) - if err != nil { +func (s *sqlSession) SetExtra(extra interface{}) error { + var network bytes.Buffer + if err := gob.NewEncoder(&network).Encode(extra); err != nil { return errors.New(err) } - s.extra = result + s.extra = network.Bytes() return nil } -func (s *defaultSession) WriteExtra(to interface{}) error { - if err := json.Unmarshal(s.extra, to); err != nil { +func (s *sqlSession) WriteExtra(to interface{}) error { + if err := gob.NewDecoder(bytes.NewReader(s.extra)).Decode(to); err != nil { return errors.New(err) } return nil } -func (s *defaultSession) GetResponseTypes() []string { +func (s *sqlSession) GetResponseTypes() []string { return s.responseTypes } -func (s *defaultSession) GetClientID() string { +func (s *sqlSession) GetClientID() string { return s.clientID } -func (s *defaultSession) GetScopes() []string { +func (s *sqlSession) GetScopes() []string { return s.scopes } -func (s *defaultSession) GetRedirectURI() string { +func (s *sqlSession) GetRedirectURI() string { return s.redirectURI } -func (s *defaultSession) GetState() string { +func (s *sqlSession) GetState() string { return s.state } -func (s *defaultSession) GetCodeSignature() string { - return s.signature +func (s *sqlSession) GetCodeSignature() string { + return s.code.Signature } -func (s *defaultSession) GetUserID() string { +func (s *sqlSession) GetUserID() string { return s.userID } diff --git a/session_test.go b/session_test.go index 9768adf8..f2986948 100644 --- a/session_test.go +++ b/session_test.go @@ -1,13 +1,26 @@ -package fosite +package fosite_test import ( + . "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/generator" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "testing" ) -func TestNewAuthorizeSession(t *testing.T) { +func TestNewAuthorizeSessionSQL(t *testing.T) { + type extra struct { + Foo string + Bar string + } + + var extraOut extra + var extraIn = &extra{ + Foo: "foo", + Bar: "bar", + } + ar := &AuthorizeRequest{ ResponseTypes: []string{"code token"}, Client: &client.SecureClient{ID: "client"}, @@ -17,7 +30,13 @@ func TestNewAuthorizeSession(t *testing.T) { ExpiresIn: 30, Code: &generator.Token{Key: "key", Signature: "sig"}, } - as := NewAuthorizeSession(ar, "1234") + + as := NewAuthorizeSessionSQL(ar, "1234") + err := as.SetExtra(extraIn) + require.Nil(t, err, "%s", err) + err = as.WriteExtra(&extraOut) + require.Nil(t, err, "%s", err) + assert.Equal(t, extraIn, &extraOut) assert.Equal(t, ar.Client.GetID(), as.GetClientID()) assert.Equal(t, ar.Code.Signature, as.GetCodeSignature()) diff --git a/storage/storage.go b/storage.go similarity index 80% rename from storage/storage.go rename to storage.go index 99d281dc..e739553e 100644 --- a/storage/storage.go +++ b/storage.go @@ -1,6 +1,8 @@ -package storage +package fosite -import . "github.com/ory-am/fosite/client" +import ( + . "github.com/ory-am/fosite/client" +) // Storage defines fosite's minimal storage interface. type Storage interface { @@ -8,6 +10,12 @@ type Storage interface { // if the client does not exist or another error occurred. GetClient(id string) (Client, error) + // StoreAuthorizeSession persists an authorize request session in the store. + StoreAuthorizeSession(session *AuthorizeSession) error + + // GetAuthorizeSession finds an authorize request session in the store by the code signature. + GetAuthorizeSession(signature string, session *AuthorizeSession) error + // SaveAuthorize saves authorize data. // StoreAuthorizeRequest(*AuthorizeData) error From 0232918e250eeee93bdab98502a5a30273510c49 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 6 Jan 2016 19:04:26 +0100 Subject: [PATCH 10/47] authorize: access code request workflow finalized --- README.md | 55 +++++++++++++++++++--------------- authorize.go | 61 ++++++++++++++++++++++++-------------- authorize_privates_test.go | 13 ++++---- authorize_test.go | 11 +++++-- handler.go | 6 ++-- handler_test.go | 2 +- helper.go | 17 ++++++----- internal/handler.go | 2 +- response.go | 22 +++++--------- session.go | 6 +++- session_test.go | 6 ++-- 11 files changed, 117 insertions(+), 84 deletions(-) diff --git a/README.md b/README.md index 14676ec6..dd451c00 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enfor **Table of Contents** - [Motivation](#motivation) +- [A note on security](#a-note-on-security) - [Good to know](#good-to-know) - [Security](#security) - [Encourage security by enforcing it!](#encourage-security-by-enforcing-it) @@ -21,7 +22,6 @@ This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enfor - [Encrypt credentials at rest](#encrypt-credentials-at-rest) - [Implement peer reviewed IETF Standards](#implement-peer-reviewed-ietf-standards) - [Provide extensibility and interoperability](#provide-extensibility-and-interoperability) - - [Tokens](#tokens) - [Usage](#usage) - [Store](#store) - [Authorize Endpoint](#authorize-endpoint) @@ -42,6 +42,12 @@ the extensibility of OAuth2 and instead bind you to a pattern-enforcing framewor Fosite was written because [Hydra](https://github.com/ory-am/hydra) required a more secure and extensible OAuth2 library then the one it was using. +## A note on security + +Please be aware that Fosite only secures your server side security. You still need to secure your apps and clients, keep +your tokens safe, prevent CSRF attacks and much more. If you need any help or advice feel free to contact our security +staff through [our website](https://ory.am/)! + ## Good to know Fosite is in early development. We will use gopkg for releasing new versions of the API. @@ -138,14 +144,12 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { oauth2 := fosite.NewDefaultOAuth2(store) ctx := context.Background() + // Let's create an AuthorizeRequest object! + // It will analyze the request and extract important information like scopes, response type and others. authorizeRequest, err := oauth2.NewAuthorizeRequest(ctx, r) if err != nil { - // ** This part of the API is not finalized yet ** - // oauth2.RedirectError(rw, error) - // oauth2.WriteError(rw, error) - // oauth2.handleError... - // **** - return + oauth2.WriteAuthorizeError(rw, req, err) + return } // you have now access to authorizeRequest, Code ResponseTypes, Scopes ... @@ -162,31 +166,34 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { session := fosite.NewAuthorizeSessionSQL(authorizeRequest, user) // You can store additional metadata, for example: - session.SetExtra(map[string]interface{}{ - "userEmail": "foo@bar", - "lastSeen": new Date(), - "usingIdentityProvider": "google", - }) - - // or session.SetExtra(&struct{ - Name string - } { - Name: "foo" + UserEmail string + LastSeen time.Time + UsingIdentityProvider string + }{ + UserEmail: "foo@bar", + LastSeen: new Date(), + UsingIdentityProvider: "google", }) - // Now is the time to handle the response types - // you can use a custom list of response type handlers by setting + // Now is the time to handle the response types + // You can use a custom list of response type handlers by setting // oauth2.ResponseTypeHandlers = []fosite.ResponseTypeHandler{} response, err := oauth2.HandleResponseTypes(ctx, authorizeRequest, r) + if err != nil { + oauth2.WriteAuthorizeError(rw, req, err) + return + } - // Almost done! The next step is going to persist the session in the database for later use. - // It is additionally going to output a result based on response_type. + // The next step is going to persist the session in the database for later use and redirect the + // user agent back to the application demanding access. + if err = oauth2.FinishAuthorizeRequest(rw, ar, response, session); err != nil { + oauth2.WriteAuthorizeError(rw, req, err) + return + } - // ** API not finalized yet ** - // err := oauth2.FinishAuthorizeRequest(rw, response, session) - // **** + // Done! The client should now have a valid authorize code! } ``` diff --git a/authorize.go b/authorize.go index fb496e7b..80511d0a 100644 --- a/authorize.go +++ b/authorize.go @@ -15,7 +15,7 @@ type AuthorizeRequest struct { ResponseTypes []string Client Client Scopes []string - RedirectURI string + RedirectURI *url.URL State string ExpiresIn int32 Code *generator.Token @@ -106,7 +106,22 @@ func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*Autho }, nil } -func (c *OAuth2) WriteAuthError(rw http.ResponseWriter, req *http.Request, err error) { +func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar *AuthorizeRequest, resp *AuthorizeResponse, session *AuthorizeSession) error { + if err := c.Store.StoreAuthorizeSession(session); err != nil { + return errors.Wrap(err, 1) + } + + q := ar.RedirectURI.Query() + for k, _ := range resp.Query { + q.Add(k, resp.Query.Get(k)) + } + ar.RedirectURI.RawQuery = q.Encode() + rw.Header().Add("Location", ar.RedirectURI.String()) + rw.WriteHeader(http.StatusFound) + return nil +} + +func (c *OAuth2) WriteAuthorizeError(rw http.ResponseWriter, req *http.Request, err error) { redirectURI, err := redirectFromValues(req.Form) if err != nil { http.Error(rw, errInvalidRequestName, http.StatusBadRequest) @@ -126,44 +141,39 @@ func (c *OAuth2) WriteAuthError(rw http.ResponseWriter, req *http.Request, err e return } - redir, err := url.Parse(redirectURI) - if err != nil { - http.Error(rw, errInvalidRequestName, http.StatusBadRequest) - return - } - - query := redir.Query() + query := redirectURI.Query() query.Add("error", err.Error()) query.Add("description", err.Error()) - redir.RawQuery = query.Encode() - rw.Header().Add("Location", redir.String()) + redirectURI.RawQuery = query.Encode() + rw.Header().Add("Location", redirectURI.String()) rw.WriteHeader(http.StatusFound) } // redirectFromValues extracts the redirect_uri from values. // * rfc6749 3.1. Authorization Endpoint // * rfc6749 3.1.2. Redirection Endpoint -func redirectFromValues(values url.Values) (string, error) { +func redirectFromValues(values url.Values) (urlobj *url.URL, err error) { // rfc6749 3.1. Authorization Endpoint // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) if err != nil { - return "", errors.Wrap(ErrInvalidRequest, 0) + return nil, errors.Wrap(ErrInvalidRequest, 0) } // rfc6749 3.1.2. Redirection Endpoint // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" - if !(isValidURL(redirectURI)) { - return "", errors.Wrap(ErrInvalidRequest, 0) + urlobj, valid := validateURL(redirectURI) + if !valid { + return nil, errors.Wrap(ErrInvalidRequest, 0) } - return redirectURI, nil + return urlobj, nil } // redirectFromClient looks up if redirect and client are matching. // * rfc6749 10.6. Authorization Code Redirection URI Manipulation // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client -func redirectFromClient(redirectURI string, client Client) (string, error) { +func redirectFromClient(parseduri *url.URL, client Client) (*url.URL, error) { // rfc6749 10.6. Authorization Code Redirection URI Manipulation // The authorization server MUST require public clients and SHOULD require confidential clients // to register their redirection URIs. If a redirection URI is provided @@ -173,13 +183,18 @@ func redirectFromClient(redirectURI string, client Client) (string, error) { // rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client // The authorization server may also enforce the usage and validation // of pre-registered redirect URIs (see Section 5.2.3.5). - if redirectURI == "" && len(client.GetRedirectURIs()) == 1 { - if isValidURL(client.GetRedirectURIs()[0]) { - return client.GetRedirectURIs()[0], nil + var rawuri string + if parseduri != nil { + rawuri = parseduri.String() + } + + if rawuri == "" && len(client.GetRedirectURIs()) == 1 { + if purl, valid := validateURL(client.GetRedirectURIs()[0]); valid { + return purl, nil } - } else if stringInSlice(redirectURI, client.GetRedirectURIs()) { - return redirectURI, nil + } else if rawuri != "" && stringInSlice(rawuri, client.GetRedirectURIs()) { + return parseduri, nil } - return "", errors.New(ErrInvalidRequest) + return nil, errors.New(ErrInvalidRequest) } diff --git a/authorize_privates_test.go b/authorize_privates_test.go index dee7ba83..a99d61fe 100644 --- a/authorize_privates_test.go +++ b/authorize_privates_test.go @@ -3,6 +3,7 @@ package fosite import ( . "github.com/ory-am/fosite/client" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "net/url" "testing" ) @@ -42,9 +43,6 @@ func TestGetRedirectURI(t *testing.T) { // The authorization server may also enforce the usage and validation // of pre-registered redirect URIs (see Section 5.2.3.5). func TestDoesClientWhiteListRedirect(t *testing.T) { - var err error - var redir string - for k, c := range []struct { client Client url string @@ -84,8 +82,13 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { isError: true, }, } { - redir, err = redirectFromClient(c.url, c.client) + u, err := url.Parse(c.url) + require.Nil(t, err) + redir, err := redirectFromClient(u, c.client) assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) - assert.Equal(t, c.expected, redir) + if err == nil { + require.NotNil(t, redir, "%d", k) + assert.Equal(t, c.expected, redir.String(), "%d", k) + } } } diff --git a/authorize_test.go b/authorize_test.go index eb6fcf69..2b832dea 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -15,12 +15,18 @@ import ( "testing" ) +func WriteAuthorizeError(t *testing.T) { + +} + func TestAuthorizeWorkflow(t *testing.T) { ctrl := gomock.NewController(t) store := NewMockStorage(ctrl) gen := NewMockGenerator(ctrl) defer ctrl.Finish() + redir, _ := url.Parse("http://foo.bar/cb") + for k, c := range []struct { desc string conf *OAuth2 @@ -50,7 +56,7 @@ func TestAuthorizeWorkflow(t *testing.T) { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) }, expect: &AuthorizeRequest{ - RedirectURI: "http://foo.bar/cb", + RedirectURI: redir, Client: &SecureClient{ID: "1234", RedirectURIs: []string{"http://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, State: "strong-state", @@ -109,6 +115,7 @@ func TestNewAuthorizeRequest(t *testing.T) { gen := NewMockGenerator(ctrl) defer ctrl.Finish() + redir, _ := url.Parse("http://foo.bar/cb") for k, c := range []struct { desc string conf *OAuth2 @@ -292,7 +299,7 @@ func TestNewAuthorizeRequest(t *testing.T) { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) }, expect: &AuthorizeRequest{ - RedirectURI: "http://foo.bar/cb", + RedirectURI: redir, Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, State: "strong-state", diff --git a/handler.go b/handler.go index 0b4bdef1..37e37053 100644 --- a/handler.go +++ b/handler.go @@ -14,7 +14,7 @@ type ResponseTypeHandler interface { // is passed along, if further information retrieval is required. // // If HandleResponseType fails, the handler implementation MUST return ErrInvalidResponseType. - HandleResponseType(context.Context, *Response, AuthorizeRequest, http.Request) error + HandleResponseType(context.Context, *AuthorizeResponse, AuthorizeRequest, http.Request) error } // NewAuthorizeResponse iterates through all response type handlers and returns their result or @@ -22,8 +22,8 @@ type ResponseTypeHandler interface { // // Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle // the given request and an arbitrary error if an error occurred -func (o *OAuth2) NewAuthorizeResponse(ctx context.Context, ar *AuthorizeRequest, r *http.Request) (*Response, error) { - var resp = new(Response) +func (o *OAuth2) NewAuthorizeResponse(ctx context.Context, ar *AuthorizeRequest, r *http.Request) (*AuthorizeResponse, error) { + var resp = new(AuthorizeResponse) var err error var found bool diff --git a/handler_test.go b/handler_test.go index 803d9e48..4e54a329 100644 --- a/handler_test.go +++ b/handler_test.go @@ -26,7 +26,7 @@ func TestNewAuthorizeResponse(t *testing.T) { handlers []ResponseTypeHandler mock func() expectsError error - expects *Response + expects *AuthorizeResponse }{ { handlers: []ResponseTypeHandler{ diff --git a/helper.go b/helper.go index 1870faa0..fb1e047e 100644 --- a/helper.go +++ b/helper.go @@ -38,14 +38,15 @@ func removeEmpty(args []string) (ret []string) { // rfc6749 3.1.2. Redirection Endpoint // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" -func isValidURL(validate string) bool { - if rp, err := url.Parse(validate); err != nil { - return false - } else if rp.Host == "" { - return false - } else if rp.Fragment != "" { +func validateURL(rawurl string) (purl *url.URL, _ bool) { + purl, err := url.Parse(rawurl) + if err != nil { + return nil, false + } else if purl.Host == "" { + return nil, false + } else if purl.Fragment != "" { // "The endpoint URI MUST NOT include a fragment component." - return false + return nil, false } - return true + return purl, true } diff --git a/internal/handler.go b/internal/handler.go index f834e116..ac9ca63d 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -31,7 +31,7 @@ func (_m *MockResponseTypeHandler) EXPECT() *_MockResponseTypeHandlerRecorder { return _m.recorder } -func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *Response, _param2 AuthorizeRequest, _param3 http.Request) error { +func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *AuthorizeResponse, _param2 AuthorizeRequest, _param3 http.Request) error { ret := _m.ctrl.Call(_m, "HandleResponseType", _param0, _param1, _param2, _param3) ret0, _ := ret[0].(error) return ret0 diff --git a/response.go b/response.go index e61b06c1..cacc94b0 100644 --- a/response.go +++ b/response.go @@ -1,18 +1,12 @@ package fosite -import "net/http" +import ( + "net/http" + "net/url" +) -// Response defines fosite's response model -type Response struct { - Type string - Headers http.Header - StatusCode int - Err error - BypassRedirect bool - Output map[string]interface{} -} - -// Set sets a key value pair inside Response.Output. -func (r *Response) Set(key string, value interface{}) { - r.Output[key] = value +// AuthorizeResponse defines fosite's response model +type AuthorizeResponse struct { + Header http.Header + Query url.Values } diff --git a/session.go b/session.go index ae460a0b..df02b1e8 100644 --- a/session.go +++ b/session.go @@ -58,6 +58,10 @@ type sqlSession struct { // NewAuthorizeSessionSQL creates a new authorize session and uses gob.Encode and gob.Decode to store extra information. // It is recommended to use this implementation. func NewAuthorizeSessionSQL(ar *AuthorizeRequest, userID string) AuthorizeSession { + var uri string + if ar.RedirectURI != nil { + uri = ar.RedirectURI.String() + } return &sqlSession{ ar: ar, code: ar.Code, @@ -66,7 +70,7 @@ func NewAuthorizeSessionSQL(ar *AuthorizeRequest, userID string) AuthorizeSessio clientID: ar.Client.GetID(), state: ar.State, scopes: ar.Scopes, - redirectURI: ar.RedirectURI, + redirectURI: uri, userID: userID, } } diff --git a/session_test.go b/session_test.go index f2986948..5e7ec787 100644 --- a/session_test.go +++ b/session_test.go @@ -6,6 +6,7 @@ import ( "github.com/ory-am/fosite/generator" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "net/url" "testing" ) @@ -20,12 +21,13 @@ func TestNewAuthorizeSessionSQL(t *testing.T) { Foo: "foo", Bar: "bar", } + redir, _ := url.Parse("http://foo.bar/cb") ar := &AuthorizeRequest{ ResponseTypes: []string{"code token"}, Client: &client.SecureClient{ID: "client"}, Scopes: []string{"email id_token"}, - RedirectURI: "https://foo.bar/cb", + RedirectURI: redir, State: "randomState", ExpiresIn: 30, Code: &generator.Token{Key: "key", Signature: "sig"}, @@ -40,7 +42,7 @@ func TestNewAuthorizeSessionSQL(t *testing.T) { assert.Equal(t, ar.Client.GetID(), as.GetClientID()) assert.Equal(t, ar.Code.Signature, as.GetCodeSignature()) - assert.Equal(t, ar.RedirectURI, as.GetRedirectURI()) + assert.Equal(t, ar.RedirectURI.String(), as.GetRedirectURI()) assert.Equal(t, ar.ResponseTypes, as.GetResponseTypes()) assert.Equal(t, ar.Scopes, as.GetScopes()) assert.Equal(t, "1234", as.GetUserID()) From 1188750e06c6ba30ebc783a8297aab75a0f95247 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 6 Jan 2016 23:33:35 +0100 Subject: [PATCH 11/47] all: more test cases --- authorize.go | 48 ++++++++------- authorize_test.go | 148 +++++++++++++++++++++++++++++++++++++++++++++- errors.go | 2 +- errors_test.go | 26 ++++---- internal/rw.go | 59 ++++++++++++++++++ 5 files changed, 248 insertions(+), 35 deletions(-) create mode 100644 internal/rw.go diff --git a/authorize.go b/authorize.go index 80511d0a..5720a973 100644 --- a/authorize.go +++ b/authorize.go @@ -2,6 +2,7 @@ package fosite import ( "github.com/go-errors/errors" + "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/generator" "golang.org/x/net/context" @@ -106,7 +107,9 @@ func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*Autho }, nil } -func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar *AuthorizeRequest, resp *AuthorizeResponse, session *AuthorizeSession) error { +// FinishAuthorizeRequest persists the AuthorizeSession in the store and redirects the user agent to the provided +// redirect url or returns an error if storage failed. +func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar AuthorizeRequest, resp AuthorizeResponse, session *AuthorizeSession) error { if err := c.Store.StoreAuthorizeSession(session); err != nil { return errors.Wrap(err, 1) } @@ -116,35 +119,40 @@ func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar *AuthorizeReq q.Add(k, resp.Query.Get(k)) } ar.RedirectURI.RawQuery = q.Encode() - rw.Header().Add("Location", ar.RedirectURI.String()) + for k, v := range resp.Header { + for _, vv := range v { + rw.Header().Add(k, vv) + } + } + + // https://tools.ietf.org/html/rfc6749#section-4.1.1 + // When a decision is established, the authorization server directs the + // user-agent to the provided client redirection URI using an HTTP + // redirection response, or by other means available to it via the + // user-agent. + rw.Header().Set("Location", ar.RedirectURI.String()) rw.WriteHeader(http.StatusFound) return nil } -func (c *OAuth2) WriteAuthorizeError(rw http.ResponseWriter, req *http.Request, err error) { - redirectURI, err := redirectFromValues(req.Form) - if err != nil { - http.Error(rw, errInvalidRequestName, http.StatusBadRequest) - return - } - - client, err := c.Store.GetClient(req.Form.Get("client_id")) - if err != nil { - http.Error(rw, errInvalidRequestName, http.StatusBadRequest) - return - } +// WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid +// redirect uri was given. Implements rfc6749#section-4.1.2.1 +func (c *OAuth2) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest, err error) { + rfcerr := ErrorToRFC6749Error(err) - // * rfc6749 10.6. Authorization Code Redirection URI Manipulation - // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = redirectFromClient(redirectURI, client); err != nil { - http.Error(rw, errInvalidRequestName, http.StatusBadRequest) + // rfc6749#section-4.1.2.1 + if ar.RedirectURI.String() == "" { + pkg.WriteJSON(rw, rfcerr) return } + // Defer the uri so we don't mess with the redirect data + redirectURI := ar.RedirectURI query := redirectURI.Query() - query.Add("error", err.Error()) - query.Add("description", err.Error()) + query.Add("error", rfcerr.Name) + query.Add("error_description", rfcerr.Description) redirectURI.RawQuery = query.Encode() + rw.Header().Add("Location", redirectURI.String()) rw.WriteHeader(http.StatusFound) } diff --git a/authorize_test.go b/authorize_test.go index 2b832dea..9eab170b 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -15,8 +15,154 @@ import ( "testing" ) -func WriteAuthorizeError(t *testing.T) { +func TestFinishAuthorizeRequest(t *testing.T) { + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + store := NewMockStorage(ctrl) + defer ctrl.Finish() + redir, _ := url.Parse("http://foobar.com/") + header := http.Header{} + oauth2 := &OAuth2{Store: store} + for k, c := range []struct { + ar AuthorizeRequest + resp AuthorizeResponse + isErr bool + mock func() + checkHeader func(int) + }{ + { + ar: AuthorizeRequest{RedirectURI: redir}, + resp: AuthorizeResponse{ + Header: http.Header{ + "foo": []string{"bar"}, + }, + Query: url.Values{ + "baz": []string{"bar"}, + "foo": []string{"baz"}, + }, + }, + mock: func() { + store.EXPECT().StoreAuthorizeSession(gomock.Nil()).Return(ErrServerError) + //rw.EXPECT().Header().Return(header) + //rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + //assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) + //assert.Equal(t, "bar", header.Get("foo"), "%d", k) + //assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) + }, + isErr: true, + }, + { + ar: AuthorizeRequest{RedirectURI: redir}, + resp: AuthorizeResponse{ + Header: http.Header{ + "foo": []string{"x-bar"}, + }, + Query: url.Values{ + "baz": []string{"bar"}, + "foo": []string{"baz"}, + }, + }, + mock: func() { + store.EXPECT().StoreAuthorizeSession(gomock.Nil()).Return(nil) + rw.EXPECT().Header().AnyTimes().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + assert.Equal(t, "x-bar", header.Get("Foo"), "%d: %s", k, header) + assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) + }, + isErr: false, + }, + } { + c.mock() + err := oauth2.FinishAuthorizeRequest(rw, c.ar, c.resp, nil) + assert.Equal(t, c.isErr, err != nil, "%d: %s", k, err) + if err == nil { + c.checkHeader(k) + } + header = http.Header{} + } +} + +// https://tools.ietf.org/html/rfc6749#section-4.1.2.1 +// If the request fails due to a missing, invalid, or mismatching +// redirection URI, or if the client identifier is missing or invalid, +// the authorization server SHOULD inform the resource owner of the +// error and MUST NOT automatically redirect the user-agent to the +// invalid redirection URI. +func TestWriteAuthorizeError(t *testing.T) { + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + defer ctrl.Finish() + + var urls = []string{ + "", + "http://foobar.com/", + "http://foobar.com/?foo=bar", + } + var purls = []*url.URL{} + for _, u := range urls { + purl, _ := url.Parse(u) + purls = append(purls, purl) + } + + oauth2 := &OAuth2{} + header := http.Header{} + for k, c := range []struct { + ar AuthorizeRequest + err error + mock func() + checkHeader func(int) + }{ + { + ar: AuthorizeRequest{RedirectURI: purls[0]}, + err: ErrInvalidGrant, + mock: func() { + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusOK) + rw.EXPECT().Write(gomock.Any()) + }, + checkHeader: func(k int) { + assert.Equal(t, "application/json", header.Get("Content-Type"), "%d", k) + }, + }, + { + ar: AuthorizeRequest{RedirectURI: purls[1]}, + err: ErrInvalidRequest, + mock: func() { + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed") + b, _ := url.Parse(header.Get("Location")) + assert.Equal(t, a, b, "%d", k) + }, + }, + { + ar: AuthorizeRequest{RedirectURI: purls[2]}, + err: ErrInvalidRequest, + mock: func() { + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed&foo=bar") + b, _ := url.Parse(header.Get("Location")) + assert.Equal(t, a, b, "%d", k) + }, + }, + } { + c.mock() + ar := c.ar + oauth2.WriteAuthorizeError(rw, ar, c.err) + assert.Equal(t, c.ar, ar, "%d", k) + c.checkHeader(k) + header = http.Header{} + } } func TestAuthorizeWorkflow(t *testing.T) { diff --git a/errors.go b/errors.go index ad2936e8..6ccc6460 100644 --- a/errors.go +++ b/errors.go @@ -37,7 +37,7 @@ type RFC6749Error struct { Hint string `json:"-"` } -func ErrorToRFC6749(err error) *RFC6749Error { +func ErrorToRFC6749Error(err error) *RFC6749Error { ge, ok := err.(*errors.Error) if !ok { return &RFC6749Error{ diff --git a/errors_test.go b/errors_test.go index 15b38639..89dc2f7b 100644 --- a/errors_test.go +++ b/errors_test.go @@ -8,18 +8,18 @@ import ( ) func TestErrorToRFC6749(t *testing.T) { - assert.Equal(t, errInvalidError, ErrorToRFC6749(errors.New("")).Name) - assert.Equal(t, errInvalidError, ErrorToRFC6749(native.New("")).Name) + assert.Equal(t, errInvalidError, ErrorToRFC6749Error(errors.New("")).Name) + assert.Equal(t, errInvalidError, ErrorToRFC6749Error(native.New("")).Name) - assert.Equal(t, errInvalidRequestName, ErrorToRFC6749(errors.New(ErrInvalidRequest)).Name) - assert.Equal(t, errUnauthorizedClientName, ErrorToRFC6749(errors.New(ErrUnauthorizedClient)).Name) - assert.Equal(t, errAccessDeniedName, ErrorToRFC6749(errors.New(ErrAccessDenied)).Name) - assert.Equal(t, errUnsupportedResponseTypeName, ErrorToRFC6749(errors.New(ErrUnsupportedResponseType)).Name) - assert.Equal(t, errInvalidScopeName, ErrorToRFC6749(errors.New(ErrInvalidScope)).Name) - assert.Equal(t, errServerErrorName, ErrorToRFC6749(errors.New(ErrServerError)).Name) - assert.Equal(t, errTemporarilyUnavailableName, ErrorToRFC6749(errors.New(ErrTemporarilyUnavailable)).Name) - assert.Equal(t, errUnsupportedGrantTypeName, ErrorToRFC6749(errors.New(ErrUnsupportedGrantType)).Name) - assert.Equal(t, errInvalidGrantName, ErrorToRFC6749(errors.New(ErrInvalidGrant)).Name) - assert.Equal(t, errInvalidClientName, ErrorToRFC6749(errors.New(ErrInvalidClient)).Name) - assert.Equal(t, errInvalidState, ErrorToRFC6749(errors.New(ErrInvalidState)).Name) + assert.Equal(t, errInvalidRequestName, ErrorToRFC6749Error(errors.New(ErrInvalidRequest)).Name) + assert.Equal(t, errUnauthorizedClientName, ErrorToRFC6749Error(errors.New(ErrUnauthorizedClient)).Name) + assert.Equal(t, errAccessDeniedName, ErrorToRFC6749Error(errors.New(ErrAccessDenied)).Name) + assert.Equal(t, errUnsupportedResponseTypeName, ErrorToRFC6749Error(errors.New(ErrUnsupportedResponseType)).Name) + assert.Equal(t, errInvalidScopeName, ErrorToRFC6749Error(errors.New(ErrInvalidScope)).Name) + assert.Equal(t, errServerErrorName, ErrorToRFC6749Error(errors.New(ErrServerError)).Name) + assert.Equal(t, errTemporarilyUnavailableName, ErrorToRFC6749Error(errors.New(ErrTemporarilyUnavailable)).Name) + assert.Equal(t, errUnsupportedGrantTypeName, ErrorToRFC6749Error(errors.New(ErrUnsupportedGrantType)).Name) + assert.Equal(t, errInvalidGrantName, ErrorToRFC6749Error(errors.New(ErrInvalidGrant)).Name) + assert.Equal(t, errInvalidClientName, ErrorToRFC6749Error(errors.New(ErrInvalidClient)).Name) + assert.Equal(t, errInvalidState, ErrorToRFC6749Error(errors.New(ErrInvalidState)).Name) } diff --git a/internal/rw.go b/internal/rw.go new file mode 100644 index 00000000..c39efd8c --- /dev/null +++ b/internal/rw.go @@ -0,0 +1,59 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: rw.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + http "net/http" +) + +// Mock of ResponseWriter interface +type MockResponseWriter struct { + ctrl *gomock.Controller + recorder *_MockResponseWriterRecorder +} + +// Recorder for MockResponseWriter (not exported) +type _MockResponseWriterRecorder struct { + mock *MockResponseWriter +} + +func NewMockResponseWriter(ctrl *gomock.Controller) *MockResponseWriter { + mock := &MockResponseWriter{ctrl: ctrl} + mock.recorder = &_MockResponseWriterRecorder{mock} + return mock +} + +func (_m *MockResponseWriter) EXPECT() *_MockResponseWriterRecorder { + return _m.recorder +} + +func (_m *MockResponseWriter) Header() http.Header { + ret := _m.ctrl.Call(_m, "Header") + ret0, _ := ret[0].(http.Header) + return ret0 +} + +func (_mr *_MockResponseWriterRecorder) Header() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "Header") +} + +func (_m *MockResponseWriter) Write(_param0 []byte) (int, error) { + ret := _m.ctrl.Call(_m, "Write", _param0) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockResponseWriterRecorder) Write(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "Write", arg0) +} + +func (_m *MockResponseWriter) WriteHeader(_param0 int) { + _m.ctrl.Call(_m, "WriteHeader", _param0) +} + +func (_mr *_MockResponseWriterRecorder) WriteHeader(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "WriteHeader", arg0) +} From d483568c06d9542bbf383771dee3ea44b60dff0e Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Thu, 7 Jan 2016 00:09:34 +0100 Subject: [PATCH 12/47] docs: readme --- .travis.yml | 14 +++--------- README.md | 62 +++++++++++++++++++++++++++++++++------------------- fosite.png | Bin 4304 -> 43726 bytes 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index faadbadc..29323419 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,3 @@ -sudo: required - -services: - - docker - -env: - - DOCKER_BIND_LOCALHOST=true - language: go go: @@ -22,16 +14,16 @@ matrix: - go: 1.3 install: - - go get golang.org/x/tools/cmd/vet + # - go get golang.org/x/tools/cmd/vet - go get github.com/axw/gocov/gocov - go get github.com/mattn/goveralls - go get golang.org/x/tools/cmd/cover - - go get github.com/golang/lint/golint + # - go get github.com/golang/lint/golint - go get github.com/pierrre/gotestcover - go get -t ./... script: - - go vet -x ./... + # - go vet -x ./... - gotestcover -coverprofile="cover.out" -race -covermode="count" ./... - goveralls -coverprofile="cover.out" diff --git a/README.md b/README.md index dd451c00..acada8d7 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,28 @@ -# ![Fosite](fosite.png) +# ![Fosite security first OAuth2 framework](fosite.png) -Simple and extensible OAuth2 server-side helpers with enterprise security and zero suck. -This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enforces countermeasures suggested in [rfc6819](https://tools.ietf.org/html/rfc6819). +**The security first OAuth2 framework for [Google's Go Language](https://golang.org).** +Built simple, powerful and extensible. This library implements peer-reviewed [IETF RFC6749](https://tools.ietf.org/html/rfc6749), +counterfeits weaknesses covered in peer-reviewed [IETF RFC6819](https://tools.ietf.org/html/rfc6819) and countermeasures various database +attack scenarios, keeping your application safe when that hacker penetrates and leaks your database. + +If you are here to contribute, feel free to check [this Pull Request](https://github.com/ory-am/fosite/pull/1). [![Build Status](https://travis-ci.org/ory-am/fosite.svg?branch=master)](https://travis-ci.org/ory-am/fosite?branch=master) [![Coverage Status](https://coveralls.io/repos/ory-am/fosite/badge.svg?branch=master&service=github)](https://coveralls.io/github/ory-am/fosite?branch=master) +Fosite is in active development. We will use gopkg for releasing new versions of the API. +Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *nightly*. +Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. + **Table of Contents** - [Motivation](#motivation) -- [A note on security](#a-note-on-security) -- [Good to know](#good-to-know) +- [A word on quality](#a-word-on-quality) +- [A word on security](#a-word-on-security) - [Security](#security) - - [Encourage security by enforcing it!](#encourage-security-by-enforcing-it) + - [Encourage security by enforcing it](#encourage-security-by-enforcing-it) - [Secure Tokens](#secure-tokens) - [No state, no token](#no-state-no-token) - [Opaque tokens](#opaque-tokens) @@ -26,6 +34,7 @@ This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enfor - [Store](#store) - [Authorize Endpoint](#authorize-endpoint) - [Token Endpoint](#token-endpoint) +- [Hall of Fame](#hall-of-fame) @@ -33,32 +42,34 @@ This library implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enfor Why write another OAuth2 server side library for Go Lang? -Other libraries are perfect for a non-critical set ups, but [fail](https://github.com/RangelReale/osin/issues/107) to comply with enterprise security standards. -This is unfortunately not an issue exclusive to Go's eco system but to many other eco systems as well. - -OpenID Connect on top of OAuth2? Not possible with popular OAuth2 libraries. Current libraries do not support capture -the extensibility of OAuth2 and instead bind you to a pattern-enforcing framework with almost no possibilities for extension. +Other libraries are perfect for a non-critical set ups, but [fail](https://github.com/RangelReale/osin/issues/107) +to comply with advanced security requirements. Additionally, the frameworks we analyzed did not support extension +of the OAuth2 protocol easily. But OAuth2 is an extensible framework. Your OAuth2 should as well. +This is unfortunately not an issue exclusive to Go's eco system but to many others as well. Fosite was written because [Hydra](https://github.com/ory-am/hydra) required a more secure and extensible OAuth2 library -then the one it was using. +then the one it was using. We quickly realized, that OAuth2 implementations out there are *not secure* nor *extensible, +so we decided to write one *that is*. + +## A word on quality + +We tried to set up as many tests as possible and test for as many cases covered in the RFCs as possible. But we are only +human. Please, feel free to add tests for the various cases defined in the OAuth2 RFCs 6749 and 6819. + +**Everyone** writing an RFC conform test that breaks with the current implementation, will receive a place in the +[Hall of Fame](#hall-of-fame)! -## A note on security +## A word on security Please be aware that Fosite only secures your server side security. You still need to secure your apps and clients, keep your tokens safe, prevent CSRF attacks and much more. If you need any help or advice feel free to contact our security staff through [our website](https://ory.am/)! -## Good to know - -Fosite is in early development. We will use gopkg for releasing new versions of the API. -Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *unstable*. -Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. - ## Security -Fosite has two commandments. +Fosite has two commandments! -### Encourage security by enforcing it! +### Encourage security by enforcing it #### Secure Tokens @@ -197,4 +208,11 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { } ``` -### Token Endpoint \ No newline at end of file +### Token Endpoint + +## Hall of Fame + +This place is reserved for the fearless bug hunters, reviewers and contributors. + +Find out more about the [author](https://aeneas.io/) of Fosite and Hydra, and the +[Ory Company](https://ory.am/). \ No newline at end of file diff --git a/fosite.png b/fosite.png index 23202273562ebc9743117386c43da455a8c22152..315eb4d38c5cd7b6be8fe955fdcfecec8e77c3b2 100644 GIT binary patch literal 43726 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 From 4ad1d146d67c0e17c545d1c3959dc697777b9828 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Thu, 7 Jan 2016 23:42:20 +0100 Subject: [PATCH 13/47] docs: drafted workflows --- README.md | 92 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index acada8d7..d5fbcf06 100644 --- a/README.md +++ b/README.md @@ -132,11 +132,6 @@ OAuth2 stack. Or custom assertions, what ever you like and as long as it is secu This section is WIP and we welcome discussions via PRs or in the issues. -### Store - -To use fosite, you need to implement `fosite.Storage`. Example implementations (e.g. postgres) of `fosite.Storage` -will be added in the close future. - ### Authorize Endpoint ```go @@ -144,15 +139,16 @@ package main import( "github.com/ory-am/fosite" - "github.com/ory-am/fosite/session" - "github.com/ory-am/fosite/storage" + "github.com/ory-am/fosite/service" "golang.org/x/net/context" ) + +var store = fosite.NewPostgreSQLStore() +var oauth2 = service.NewDefaultOAuth2(store) + // Let's assume that we're in a http handler func handleAuth(rw http.ResponseWriter, req *http.Request) { - store := fosite.NewPostgreSQLStore() - oauth2 := fosite.NewDefaultOAuth2(store) ctx := context.Background() // Let's create an AuthorizeRequest object! @@ -164,7 +160,13 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { } // you have now access to authorizeRequest, Code ResponseTypes, Scopes ... - // and can show the user agent a login or consent page. + // and can show the user agent a login or consent page + // + // or, for example: + // if authorizeRequest.GetScopes().Has("admin") { + // http.Error(rw, "you're not allowed to do that", http.StatusForbidden) + // return + // } // it would also be possible to redirect the user to an identity provider (google, microsoft live, ...) here // and do fancy stuff like OpenID Connect amongst others @@ -173,25 +175,33 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // you will use the user's id to create an authorize session user := "12345" - // NewAuthorizeSessionSQL uses gob.encode to safely store data set with SetExtra - session := fosite.NewAuthorizeSessionSQL(authorizeRequest, user) - - // You can store additional metadata, for example: - session.SetExtra(&struct{ - UserEmail string - LastSeen time.Time + // mySessionData is going to be persisted alongside the other data. Note that mySessionData is arbitrary. + // You will however absolutely need the user id later on, so at least store that! + mySessionData := struct { + User string UsingIdentityProvider string - }{ - UserEmail: "foo@bar", - LastSeen: new Date(), - UsingIdentityProvider: "google", - }) + Foo string + } { + User: user, + UsingIdentityProvider: "google", + Foo: "bar", + } + // if you want to support OpenID Connect, this would be a good place to do stuff like + // user := getUserFromCookie() + // mySessionData := NewImplementsOpenIDSession() + // if authorizeRequest.GetScopes().Has("openid") { + // if authorizeRequest.GetScopes().Has("email") { + // mySessionData.AddField("email", user.Email) + // } + // mySessionData.AddField("id", user.ID) + // } + // // Now is the time to handle the response types // You can use a custom list of response type handlers by setting // oauth2.ResponseTypeHandlers = []fosite.ResponseTypeHandler{} - response, err := oauth2.HandleResponseTypes(ctx, authorizeRequest, r) + response, err := oauth2.HandleAuthorizeRequest(ctx, authorizeRequest, r, &mySessionData) if err != nil { oauth2.WriteAuthorizeError(rw, req, err) return @@ -199,10 +209,7 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { // The next step is going to persist the session in the database for later use and redirect the // user agent back to the application demanding access. - if err = oauth2.FinishAuthorizeRequest(rw, ar, response, session); err != nil { - oauth2.WriteAuthorizeError(rw, req, err) - return - } + oauth2.WriteAuthorizeResponse(rw, ar, response) // Done! The client should now have a valid authorize code! } @@ -210,6 +217,37 @@ func handleAuth(rw http.ResponseWriter, req *http.Request) { ### Token Endpoint +draft + +```go +func handleToken(rw http.ResponseWriter, req *http.Request) { + var mySessionData = struct { + User string + UsingIdentityProvider string + Foo string + } + + accessRequest, err := oauth2.NewAccessRequest(ctx, r, &mySessionData) + if err != nil { + oauth2.WriteAccessError(rw, req, err) + return + } + + if mySessionData != nil { + // normally, mySessionData will always be nil unless: accessRequest.GetGrantTypes().Has("authorization_code") + // mySessionData.User === "12345" + } + + response, err := oauth2.NewAccessResponse(ctx, accessRequest, r, mySessionData) + if err != nil { + oauth2.WriteAccessError(rw, req, err) + return + } + + oauth2.WriteAccessResponse(rw, ar, response) +} +``` + ## Hall of Fame This place is reserved for the fearless bug hunters, reviewers and contributors. From f939597f3f3e6ad4eb582a56b643589271cbf646 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 00:07:55 +0100 Subject: [PATCH 14/47] unstaged --- README.md | 7 +- arguments.go | 7 ++ arguments_test.go | 37 ++++++++ authorize.go | 92 ++++++++------------ authorize_integration_test.go | 104 ++++++++++++++++++++++ authorize_test.go | 157 +++++++--------------------------- client/client.go | 6 ++ handler.go | 33 ++----- handler_test.go | 12 +-- helper.go | 6 +- internal/handler.go | 10 +-- oauth.go | 26 ------ oauth2.go | 42 +++++++++ plugin/code/code.go | 41 +++++++++ plugin/code/session.go | 10 +++ plugin/code/storage.go | 7 ++ plugin/oidc/id_token.go | 1 + plugin/token/token.go | 40 +++++++++ request.go | 50 +++++++++++ response.go | 19 +++- service/oauth2.go | 9 ++ session.go | 120 -------------------------- session_test.go | 49 ----------- 23 files changed, 464 insertions(+), 421 deletions(-) create mode 100644 arguments.go create mode 100644 arguments_test.go create mode 100644 authorize_integration_test.go delete mode 100644 oauth.go create mode 100644 oauth2.go create mode 100644 plugin/code/code.go create mode 100644 plugin/code/session.go create mode 100644 plugin/code/storage.go create mode 100644 plugin/oidc/id_token.go create mode 100644 plugin/token/token.go create mode 100644 request.go create mode 100644 service/oauth2.go delete mode 100644 session.go delete mode 100644 session_test.go diff --git a/README.md b/README.md index d5fbcf06..2f334c7d 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ Fosite is in active development. We will use gopkg for releasing new versions of Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *nightly*. Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. +These Standards have been reviewed during the development of Fosite: +* [OAuth 2.0 Multiple Response Type Encoding Practices](http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html) +* [OpenID Connect Core 1.0](http://openid.net/specs/openid-connect-core-1_0.html) +* [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) +* [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819) + **Table of Contents** @@ -31,7 +37,6 @@ Once releases roll out, you will be able to fetch a specific fosite API version - [Implement peer reviewed IETF Standards](#implement-peer-reviewed-ietf-standards) - [Provide extensibility and interoperability](#provide-extensibility-and-interoperability) - [Usage](#usage) - - [Store](#store) - [Authorize Endpoint](#authorize-endpoint) - [Token Endpoint](#token-endpoint) - [Hall of Fame](#hall-of-fame) diff --git a/arguments.go b/arguments.go new file mode 100644 index 00000000..f4bedb0d --- /dev/null +++ b/arguments.go @@ -0,0 +1,7 @@ +package fosite + +type Arguments []string + +func (r Arguments) Has(item string) bool { + return StringInSlice(item, r) +} diff --git a/arguments_test.go b/arguments_test.go new file mode 100644 index 00000000..75c86ca7 --- /dev/null +++ b/arguments_test.go @@ -0,0 +1,37 @@ +package fosite + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestArgumentsHas(t *testing.T) { + for k, c := range []struct { + args Arguments + has string + expect bool + }{ + { + args: &Arguments{"foo", "bar"}, + has: "foo", + expect: true, + }, + { + args: &Arguments{"foo", "bar"}, + has: "bar", + expect: true, + }, + { + args: &Arguments{"foo", "bar"}, + has: "baz", + expect: false, + }, + { + args: &Arguments{}, + has: "baz", + expect: false, + }, + } { + assert.Equal(t, c.expect, c.args.Has("c.has"), "%d", k) + } +} diff --git a/authorize.go b/authorize.go index 5720a973..6e746b24 100644 --- a/authorize.go +++ b/authorize.go @@ -4,40 +4,16 @@ import ( "github.com/go-errors/errors" "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite/client" - "github.com/ory-am/fosite/generator" "golang.org/x/net/context" "net/http" "net/url" "strings" + "time" ) -// Authorize request information -type AuthorizeRequest struct { - ResponseTypes []string - Client Client - Scopes []string - RedirectURI *url.URL - State string - ExpiresIn int32 - Code *generator.Token -} - const minStateLength = 8 -type ScopeStrategy interface { -} - -// NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant -// checks: -// * rfc6749 3.1. Authorization Endpoint -// * rfc6749 3.1.1. Response Type -// * rfc6749 3.1.2. Redirection Endpoint -// * rfx6749 10.6. Authorization Code Redirection URI Manipulation -// -// It also introduces countermeasures described in rfc6819: -// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client -// * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri -func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*AuthorizeRequest, error) { +func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { if err := r.ParseForm(); err != nil { return nil, errors.New(ErrInvalidRequest) } @@ -87,12 +63,6 @@ func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*Autho return nil, errors.New(ErrInvalidState) } - // Generate the auth token - code, err := c.AuthorizeCodeGenerator.Generate() - if err != nil { - return nil, errors.New(ErrServerError) - } - // Remove empty items from arrays scopes := removeEmpty(strings.Split(r.Form.Get("scope"), " ")) @@ -101,25 +71,20 @@ func (c *OAuth2) NewAuthorizeRequest(_ context.Context, r *http.Request) (*Autho Client: client, Scopes: scopes, State: state, - ExpiresIn: c.Lifetime, RedirectURI: redirectURI, - Code: code, + RequestedAt: time.Time, }, nil } -// FinishAuthorizeRequest persists the AuthorizeSession in the store and redirects the user agent to the provided -// redirect url or returns an error if storage failed. -func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar AuthorizeRequest, resp AuthorizeResponse, session *AuthorizeSession) error { - if err := c.Store.StoreAuthorizeSession(session); err != nil { - return errors.Wrap(err, 1) +func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { + q := ar.GetRedirectURI().Query() + args := resp.GetArguments() + for k, _ := range args { + q.Add(k, args.Get(k)) } - - q := ar.RedirectURI.Query() - for k, _ := range resp.Query { - q.Add(k, resp.Query.Get(k)) - } - ar.RedirectURI.RawQuery = q.Encode() - for k, v := range resp.Header { + ar.GetRedirectURI().RawQuery = q.Encode() + header := resp.GetHeader() + for k, v := range header { for _, vv := range v { rw.Header().Add(k, vv) } @@ -130,24 +95,21 @@ func (c *OAuth2) FinishAuthorizeRequest(rw http.ResponseWriter, ar AuthorizeRequ // user-agent to the provided client redirection URI using an HTTP // redirection response, or by other means available to it via the // user-agent. - rw.Header().Set("Location", ar.RedirectURI.String()) + rw.Header().Set("Location", ar.GetRedirectURI().String()) rw.WriteHeader(http.StatusFound) - return nil } -// WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid -// redirect uri was given. Implements rfc6749#section-4.1.2.1 -func (c *OAuth2) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest, err error) { +func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequester, err error) { rfcerr := ErrorToRFC6749Error(err) // rfc6749#section-4.1.2.1 - if ar.RedirectURI.String() == "" { + if ar.GetRedirectURI().String() == "" { pkg.WriteJSON(rw, rfcerr) return } // Defer the uri so we don't mess with the redirect data - redirectURI := ar.RedirectURI + redirectURI := ar.GetRedirectURI() query := redirectURI.Query() query.Add("error", rfcerr.Name) query.Add("error_description", rfcerr.Description) @@ -157,6 +119,28 @@ func (c *OAuth2) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest rw.WriteHeader(http.StatusFound) } +func (o *Fosite) NewAuthorizeResponse(ctx context.Context, ar AuthorizeRequester, r *http.Request, session interface{}) (AuthorizeResponder, error) { + var resp = new(AuthorizeResponder) + var err error + var found bool + + for _, h := range o.ResponseTypeHandlers { + // Dereference http request and authorize request so handler's can't mess with it. + err = h.HandleResponseType(ctx, resp, *ar, *r, session) + if err == nil { + found = true + } else if err != ErrInvalidResponseType { + return nil, err + } + } + + if !found { + return nil, ErrNoResponseTypeHandlerFound + } + + return resp, nil +} + // redirectFromValues extracts the redirect_uri from values. // * rfc6749 3.1. Authorization Endpoint // * rfc6749 3.1.2. Redirection Endpoint @@ -200,7 +184,7 @@ func redirectFromClient(parseduri *url.URL, client Client) (*url.URL, error) { if purl, valid := validateURL(client.GetRedirectURIs()[0]); valid { return purl, nil } - } else if rawuri != "" && stringInSlice(rawuri, client.GetRedirectURIs()) { + } else if rawuri != "" && StringInSlice(rawuri, client.GetRedirectURIs()) { return parseduri, nil } diff --git a/authorize_integration_test.go b/authorize_integration_test.go new file mode 100644 index 00000000..88e4fea5 --- /dev/null +++ b/authorize_integration_test.go @@ -0,0 +1,104 @@ +package fosite_test + +import ( + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/generator" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/require" + "golang.org/x/net/context" + "net/http" + "net/url" + "testing" +) + +func TestAuthorizeWorkflow(t *testing.T) { + ctrl := gomock.NewController(t) + store := NewMockStorage(ctrl) + gen := NewMockGenerator(ctrl) + defer ctrl.Finish() + + redir, _ := url.Parse("http://foo.bar/cb") + + for k, c := range []struct { + desc string + conf *Fosite + r *http.Request + query url.Values + expectedError error + mock func() + expect *AuthorizeRequester + }{ + { + desc: "should pass", + conf: &Fosite{ + Store: store, + AuthorizeCodeGenerator: gen, + AllowedResponseTypes: []string{"code", "token"}, + Lifetime: 3600, + }, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code token"}, + "state": []string{"strong-state"}, + "scope": []string{"foo bar"}, + }, + mock: func() { + gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + expect: &AuthorizeRequester{ + RedirectURI: redir, + Client: &SecureClient{ID: "1234", RedirectURIs: []string{"http://foo.bar/cb"}}, + ResponseTypes: []string{"code", "token"}, + State: "strong-state", + Scopes: []string{"foo", "bar"}, + ExpiresIn: 3600, + Code: &generator.Token{Key: "foo", Signature: "bar"}, + }, + }, + } { + c.mock() + if c.r == nil { + c.r = &http.Request{Header: http.Header{}} + if c.query != nil { + c.r.URL = &url.URL{RawQuery: c.query.Encode()} + } + } + + // equals to: c.conf = NewDefaultOAuth2(store) + c.conf.Store = store + authorizeRequest, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) + require.Nil(t, err, "%d: %s", k, err) + + userID := "user-id" + _ = NewAuthorizeSessionSQL(authorizeRequest, userID) + + // if err := store.StoreAuthorizeSession(sess); err != nil { + // return err + // } + + //response := NewAuthorizeResponse() + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) + // + // or + // + // this approach would make it possible to check if all response types could be served or not + // additionally, a callback for FinishAccessRequest could be provided + // + // response = &AuthorizeResponse{} + // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) + // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) + // **** + + // Almost done! The next step is going to persist the session in the database for later use. + // It is additionally going to output a result based on response_type. + + // ** API not finalized yet ** + // err := oauth2.FinishAuthorizeRequest(rw, response, session) + // **** + } +} diff --git a/authorize_test.go b/authorize_test.go index 9eab170b..7c6ff853 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -7,7 +7,6 @@ import ( "github.com/ory-am/fosite/generator" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/vektra/errors" "golang.org/x/net/context" "net/http" @@ -23,17 +22,17 @@ func TestFinishAuthorizeRequest(t *testing.T) { redir, _ := url.Parse("http://foobar.com/") header := http.Header{} - oauth2 := &OAuth2{Store: store} + oauth2 := &Fosite{Store: store} for k, c := range []struct { - ar AuthorizeRequest - resp AuthorizeResponse + ar AuthorizeRequester + resp AuthorizeResponder isErr bool mock func() checkHeader func(int) }{ { - ar: AuthorizeRequest{RedirectURI: redir}, - resp: AuthorizeResponse{ + ar: AuthorizeRequester{RedirectURI: redir}, + resp: AuthorizeResponder{ Header: http.Header{ "foo": []string{"bar"}, }, @@ -44,19 +43,13 @@ func TestFinishAuthorizeRequest(t *testing.T) { }, mock: func() { store.EXPECT().StoreAuthorizeSession(gomock.Nil()).Return(ErrServerError) - //rw.EXPECT().Header().Return(header) - //rw.EXPECT().WriteHeader(http.StatusFound) }, - checkHeader: func(k int) { - //assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) - //assert.Equal(t, "bar", header.Get("foo"), "%d", k) - //assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) - }, - isErr: true, + checkHeader: func(_ int) {}, + isErr: true, }, { - ar: AuthorizeRequest{RedirectURI: redir}, - resp: AuthorizeResponse{ + ar: AuthorizeRequester{RedirectURI: redir}, + resp: AuthorizeResponder{ Header: http.Header{ "foo": []string{"x-bar"}, }, @@ -109,16 +102,16 @@ func TestWriteAuthorizeError(t *testing.T) { purls = append(purls, purl) } - oauth2 := &OAuth2{} + oauth2 := &Fosite{} header := http.Header{} for k, c := range []struct { - ar AuthorizeRequest + ar AuthorizeRequester err error mock func() checkHeader func(int) }{ { - ar: AuthorizeRequest{RedirectURI: purls[0]}, + ar: AuthorizeRequester{RedirectURI: purls[0]}, err: ErrInvalidGrant, mock: func() { rw.EXPECT().Header().Return(header) @@ -130,7 +123,7 @@ func TestWriteAuthorizeError(t *testing.T) { }, }, { - ar: AuthorizeRequest{RedirectURI: purls[1]}, + ar: AuthorizeRequester{RedirectURI: purls[1]}, err: ErrInvalidRequest, mock: func() { rw.EXPECT().Header().Return(header) @@ -143,7 +136,7 @@ func TestWriteAuthorizeError(t *testing.T) { }, }, { - ar: AuthorizeRequest{RedirectURI: purls[2]}, + ar: AuthorizeRequester{RedirectURI: purls[2]}, err: ErrInvalidRequest, mock: func() { rw.EXPECT().Header().Return(header) @@ -165,96 +158,6 @@ func TestWriteAuthorizeError(t *testing.T) { } } -func TestAuthorizeWorkflow(t *testing.T) { - ctrl := gomock.NewController(t) - store := NewMockStorage(ctrl) - gen := NewMockGenerator(ctrl) - defer ctrl.Finish() - - redir, _ := url.Parse("http://foo.bar/cb") - - for k, c := range []struct { - desc string - conf *OAuth2 - r *http.Request - query url.Values - expectedError error - mock func() - expect *AuthorizeRequest - }{ - { - desc: "should pass", - conf: &OAuth2{ - Store: store, - AuthorizeCodeGenerator: gen, - AllowedResponseTypes: []string{"code", "token"}, - Lifetime: 3600, - }, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code token"}, - "state": []string{"strong-state"}, - "scope": []string{"foo bar"}, - }, - mock: func() { - gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - expect: &AuthorizeRequest{ - RedirectURI: redir, - Client: &SecureClient{ID: "1234", RedirectURIs: []string{"http://foo.bar/cb"}}, - ResponseTypes: []string{"code", "token"}, - State: "strong-state", - Scopes: []string{"foo", "bar"}, - ExpiresIn: 3600, - Code: &generator.Token{Key: "foo", Signature: "bar"}, - }, - }, - } { - c.mock() - if c.r == nil { - c.r = &http.Request{Header: http.Header{}} - if c.query != nil { - c.r.URL = &url.URL{RawQuery: c.query.Encode()} - } - } - - // equals to: c.conf = NewDefaultOAuth2(store) - c.conf.Store = store - authorizeRequest, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) - require.Nil(t, err, "%d: %s", k, err) - - userID := "user-id" - _ = NewAuthorizeSessionSQL(authorizeRequest, userID) - - // if err := store.StoreAuthorizeSession(sess); err != nil { - // return err - // } - - //response := NewAuthorizeResponse() - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) - // - // or - // - // this approach would make it possible to check if all response types could be served or not - // additionally, a callback for FinishAccessRequest could be provided - // - // response = &AuthorizeResponse{} - // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // **** - - // Almost done! The next step is going to persist the session in the database for later use. - // It is additionally going to output a result based on response_type. - - // ** API not finalized yet ** - // err := oauth2.FinishAuthorizeRequest(rw, response, session) - // **** - } -} - func TestNewAuthorizeRequest(t *testing.T) { ctrl := gomock.NewController(t) store := NewMockStorage(ctrl) @@ -264,17 +167,17 @@ func TestNewAuthorizeRequest(t *testing.T) { redir, _ := url.Parse("http://foo.bar/cb") for k, c := range []struct { desc string - conf *OAuth2 + conf *Fosite r *http.Request query url.Values expectedError error mock func() - expect *AuthorizeRequest + expect *AuthorizeRequester }{ /* empty request */ { desc: "empty request fails", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, r: &http.Request{}, expectedError: ErrInvalidRequest, mock: func() {}, @@ -282,7 +185,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid redirect uri */ { desc: "invalid redirect uri fails", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{"redirect_uri": []string{"invalid"}}, expectedError: ErrInvalidRequest, mock: func() {}, @@ -290,7 +193,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid client */ { desc: "invalid client uri fails", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, expectedError: ErrInvalidClient, mock: func() { @@ -300,7 +203,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* redirect client mismatch */ { desc: "client and request redirects mismatch", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -313,7 +216,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* no response type */ { desc: "no response type", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -326,7 +229,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid response type */ { desc: "invalid response type", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -340,7 +243,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* invalid response type */ { desc: "invalid response type", - conf: &OAuth2{Store: store}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -354,7 +257,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* unsupported response type */ { desc: "unspported response type", - conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -368,7 +271,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* unsupported response type */ { desc: "unspported response type", - conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -382,7 +285,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* no state */ { desc: "no state", - conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -396,7 +299,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* short state */ { desc: "short state", - conf: &OAuth2{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -411,7 +314,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* code gen fails */ { desc: "code gen fails", - conf: &OAuth2{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -427,7 +330,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* success case */ { desc: "should pass", - conf: &OAuth2{ + conf: &Fosite{ Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code", "token"}, @@ -444,7 +347,7 @@ func TestNewAuthorizeRequest(t *testing.T) { gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) }, - expect: &AuthorizeRequest{ + expect: &AuthorizeRequester{ RedirectURI: redir, Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, diff --git a/client/client.go b/client/client.go index 98035ba5..583c5783 100644 --- a/client/client.go +++ b/client/client.go @@ -13,6 +13,12 @@ type Client interface { // Returns the client's allowed redirect URIs. GetRedirectURIs() []string + + // IsImplicitGrantAllowed() bool + + // IsUserPasswordGrantAllowed() bool + + // IsClientGrantAllowed() bool } // DefaultClient is a simple default implementation of the Client interface. diff --git a/handler.go b/handler.go index 37e37053..9deda915 100644 --- a/handler.go +++ b/handler.go @@ -4,9 +4,13 @@ import ( "errors" "golang.org/x/net/context" "net/http" + "net/url" ) +// ErrInvalidResponseType is thrown by a ResponseTypeHandler if it is not responsible for handling the authorize request. var ErrInvalidResponseType = errors.New("This handler is unable handle any of the response types requested by the auhtorize request") + +// ErrNoResponseTypeHandlerFound is thrown if no ResponseTypeHandler was found responsible for the request. var ErrNoResponseTypeHandlerFound = errors.New("None of the handler's are able to handle this authorize request") type ResponseTypeHandler interface { @@ -14,32 +18,5 @@ type ResponseTypeHandler interface { // is passed along, if further information retrieval is required. // // If HandleResponseType fails, the handler implementation MUST return ErrInvalidResponseType. - HandleResponseType(context.Context, *AuthorizeResponse, AuthorizeRequest, http.Request) error -} - -// NewAuthorizeResponse iterates through all response type handlers and returns their result or -// ErrNoResponseTypeHandlerFound if none of the handler's were able to handle it. -// -// Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle -// the given request and an arbitrary error if an error occurred -func (o *OAuth2) NewAuthorizeResponse(ctx context.Context, ar *AuthorizeRequest, r *http.Request) (*AuthorizeResponse, error) { - var resp = new(AuthorizeResponse) - var err error - var found bool - - for _, h := range o.ResponseTypeHandlers { - // Dereference http request and authorize request so handler's can't mess with it. - err = h.HandleResponseType(ctx, resp, *ar, *r) - if err == nil { - found = true - } else if err != ErrInvalidResponseType { - return nil, err - } - } - - if !found { - return nil, ErrNoResponseTypeHandlerFound - } - - return resp, nil + HandleResponseType(context.Context, *AuthorizeResponder, AuthorizeRequester, http.Request, session interface{}) error } diff --git a/handler_test.go b/handler_test.go index 4e54a329..64118744 100644 --- a/handler_test.go +++ b/handler_test.go @@ -26,7 +26,7 @@ func TestNewAuthorizeResponse(t *testing.T) { handlers []ResponseTypeHandler mock func() expectsError error - expects *AuthorizeResponse + expects *AuthorizeResponder }{ { handlers: []ResponseTypeHandler{ @@ -34,7 +34,7 @@ func TestNewAuthorizeResponse(t *testing.T) { rths[1], }, mock: func() { - rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) }, expectsError: arbitraryError, }, @@ -44,17 +44,17 @@ func TestNewAuthorizeResponse(t *testing.T) { rths[1], }, mock: func() { - rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) - rths[1].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) + rths[1].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) }, expectsError: arbitraryError, }, } { c.mock() - o := &OAuth2{ + o := &Fosite{ ResponseTypeHandlers: c.handlers, } - resp, err := o.NewAuthorizeResponse(context.Background(), &AuthorizeRequest{}, &http.Request{}) + resp, err := o.NewAuthorizeResponse(context.Background(), &AuthorizeRequester{}, &http.Request{}) require.Equal(t, c.expectsError, err, "%d: %s", k, err) if err != nil { require.Equal(t, c.expects, resp) diff --git a/helper.go b/helper.go index fb1e047e..e9e8c9d1 100644 --- a/helper.go +++ b/helper.go @@ -5,19 +5,19 @@ import ( "strings" ) -func areResponseTypesValid(c *OAuth2, responseTypes []string) bool { +func areResponseTypesValid(c *Fosite, responseTypes []string) bool { if len(responseTypes) < 1 { return false } for _, responseType := range responseTypes { - if !stringInSlice(responseType, c.AllowedResponseTypes) { + if !StringInSlice(responseType, c.AllowedResponseTypes) { return false } } return true } -func stringInSlice(needle string, haystack []string) bool { +func StringInSlice(needle string, haystack []string) bool { for _, b := range haystack { if b == needle { return true diff --git a/internal/handler.go b/internal/handler.go index ac9ca63d..a71c4194 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: handler.go +// Source: oauth2.go package internal @@ -31,12 +31,12 @@ func (_m *MockResponseTypeHandler) EXPECT() *_MockResponseTypeHandlerRecorder { return _m.recorder } -func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *AuthorizeResponse, _param2 AuthorizeRequest, _param3 http.Request) error { - ret := _m.ctrl.Call(_m, "HandleResponseType", _param0, _param1, _param2, _param3) +func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *AuthorizeResponder, _param2 AuthorizeRequester, _param3 http.Request, _param4 *Fosite) error { + ret := _m.ctrl.Call(_m, "HandleResponseType", _param0, _param1, _param2, _param3, _param4) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockResponseTypeHandlerRecorder) HandleResponseType(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleResponseType", arg0, arg1, arg2, arg3) +func (_mr *_MockResponseTypeHandlerRecorder) HandleResponseType(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleResponseType", arg0, arg1, arg2, arg3, arg4) } diff --git a/oauth.go b/oauth.go deleted file mode 100644 index 97b209a4..00000000 --- a/oauth.go +++ /dev/null @@ -1,26 +0,0 @@ -package fosite - -import ( - "github.com/ory-am/fosite/generator" -) - -type OAuth2 struct { - AllowedResponseTypes []string - AllowedTokenResponseTypes []string - Lifetime int32 - Store Storage - Entropy int32 - AuthorizeCodeGenerator generator.Generator - ResponseTypeHandlers []ResponseTypeHandler -} - -func NewDefaultOAuth2(store Storage) *OAuth2 { - return &OAuth2{ - AllowedResponseTypes: []string{"code", "token", "id_token"}, - AllowedTokenResponseTypes: []string{}, - Lifetime: 3600, - Entropy: 128, - AuthorizeCodeGenerator: &generator.CryptoGenerator{}, - Store: store, - } -} diff --git a/oauth2.go b/oauth2.go new file mode 100644 index 00000000..56a7185a --- /dev/null +++ b/oauth2.go @@ -0,0 +1,42 @@ +package fosite + +import ( + "net/http" + "golang.org/x/net/context" +) + +// OAuth2Provider +type OAuth2Provider interface { + // NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant + // checks: + // * rfc6749 3.1. Authorization Endpoint + // * rfc6749 3.1.1. Response Type + // * rfc6749 3.1.2. Redirection Endpoint + // * rfx6749 10.6. Authorization Code Redirection URI Manipulation + // + // It also introduces countermeasures described in rfc6819: + // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client + // * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri + NewAuthorizeRequest(context.Context, *http.Request) (AuthorizeRequester, error) + + // NewAuthorizeResponse iterates through all response type handlers and returns their result or + // ErrNoResponseTypeHandlerFound if none of the handler's were able to handle it. + // + // Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle + // the given request and an arbitrary error if an error occurred + NewAuthorizeResponse(context.Context, *http.Request, AuthorizeRequest, session interface{}) (AuthorizeResponder, error) + + // WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid + // redirect uri was given. Implements rfc6749#section-4.1.2.1 + WriteAuthorizeError(http.ResponseWriter, AuthorizeRequester, error) + + // WriteAuthorizeResponse persists the AuthorizeSession in the store and redirects the user agent to the provided + // redirect url or returns an error if storage failed. + WriteAuthorizeResponse(http.ResponseWriter, AuthorizeRequester, AuthorizeResponder) +} + +// Fosite ships all the various oauth2 helpers like NewAuthorizeRequest +type Fosite struct { + Store Storage + ResponseTypeHandlers []ResponseTypeHandler +} diff --git a/plugin/code/code.go b/plugin/code/code.go new file mode 100644 index 00000000..d0dcb558 --- /dev/null +++ b/plugin/code/code.go @@ -0,0 +1,41 @@ +package code + +import ( + "github.com/go-errors/errors" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/generator" + "golang.org/x/net/context" + "net/http" +) + +// CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type +// as defined in https://tools.ietf.org/html/rfc6749#section-4.1 +type CodeResponseTypeHandler struct { + Generator generator.Generator + Store CodeResponseTypeStorage +} + +func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { + // This let's us define multiple response types, for example open id connect's id_token + if ar.GetResponseTypes().Has("code") { + // Generate the code + code, err := c.Generator.Generate() + if err != nil { + return errors.Wrap(err, 1) + } + + if err := c.Store.StoreAuthorizeCodeSession(code.Signature, ar, session); err != nil { + return errors.Wrap(err, 1) + } + + resp.AddArgument("code", code) + return nil + } + + // Handler is not responsible for this request + return ErrInvalidResponseType +} + +func (c *CodeResponseTypeHandler) HandleGrantType() { + +} diff --git a/plugin/code/session.go b/plugin/code/session.go new file mode 100644 index 00000000..5ec29b3e --- /dev/null +++ b/plugin/code/session.go @@ -0,0 +1,10 @@ +package code + +type AuthorizeCodeSession struct { + Signature []byte + ResponseTypes []string + ClientID string + Scopes []string + RedirectURI string + State string +} diff --git a/plugin/code/storage.go b/plugin/code/storage.go new file mode 100644 index 00000000..3f611f30 --- /dev/null +++ b/plugin/code/storage.go @@ -0,0 +1,7 @@ +package code + +import "github.com/ory-am/fosite" + +type CodeResponseTypeStorage interface { + StoreAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error +} diff --git a/plugin/oidc/id_token.go b/plugin/oidc/id_token.go new file mode 100644 index 00000000..12f3e4c3 --- /dev/null +++ b/plugin/oidc/id_token.go @@ -0,0 +1 @@ +package authorize diff --git a/plugin/token/token.go b/plugin/token/token.go new file mode 100644 index 00000000..4d14312e --- /dev/null +++ b/plugin/token/token.go @@ -0,0 +1,40 @@ +package authorize + +import ( + "camlistore.org/pkg/context" + "github.com/go-errors/errors" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/generator" + "net/http" +) + +// CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type +// as defined in https://tools.ietf.org/html/rfc6749#section-4.1 +type CodeResponseTypeHandler struct { + Generator generator.Generator +} + +func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { + // This let's us define multiple response types, for example open id connect's id_token + if ar.GetResponseTypes().Has("code") { + // Generate the code + code, err := c.Generator.Generate() + if err != nil { + return errors.Wrap(err, 1) + } + + if err := c.Store.StoreAuthorizeCodeSession(code.Signature, ar, session); err != nil { + return errors.Wrap(err, 1) + } + + resp.AddArgument("code", code) + return nil + } + + // Handler is not responsible for this request + return ErrInvalidResponseType +} + +func (c *CodeResponseTypeHandler) HandleGrantType() { + +} diff --git a/request.go b/request.go new file mode 100644 index 00000000..a4b8b90c --- /dev/null +++ b/request.go @@ -0,0 +1,50 @@ +package fosite + +import ( + . "github.com/ory-am/fosite/client" + "net/url" + "time" +) + +type AuthorizeRequester interface { + GetResponseTypes() Arguments + GetClient() Client + GetScopes() Arguments + GetRedirectURI() *url.URL + GetState() string + GetRequestedAt() time.Time +} + +// Authorize request information +type AuthorizeRequest struct { + ResponseTypes Arguments + Client Client + Scopes Arguments + RedirectURI *url.URL + State string + RequestedAt time.Time +} + +func (d *AuthorizeRequest) GetResponseTypes() Arguments { + return d.ResponseTypes +} + +func (d *AuthorizeRequest) GetClient() Client { + return d.Client +} + +func (d *AuthorizeRequest) GetScopes() Arguments { + return d.Scopes +} + +func (d *AuthorizeRequest) GetState() Arguments { + return d.State +} + +func (d *AuthorizeRequest) GetRedirectURI() *url.URL { + return d.RedirectURI +} + +func (d *AuthorizeRequest) GetRequestedAt() time.Time { + return d.RequestedAt +} diff --git a/response.go b/response.go index cacc94b0..6d6efdbd 100644 --- a/response.go +++ b/response.go @@ -6,7 +6,22 @@ import ( ) // AuthorizeResponse defines fosite's response model +type AuthorizeResponder interface { + GetHeader() http.Header + AddHeader(key, value string) + + GetArguments() url.Values + AddArgument(key, value string) +} + type AuthorizeResponse struct { - Header http.Header - Query url.Values + Header http.Header + Arguments url.Values +} + +func (a *AuthorizeResponse) GetHeader() http.Header { + return a.Header +} +func (a *AuthorizeResponse) GetArguments() url.Values { + return a.Arguments } diff --git a/service/oauth2.go b/service/oauth2.go new file mode 100644 index 00000000..cb0808e9 --- /dev/null +++ b/service/oauth2.go @@ -0,0 +1,9 @@ +package service + +import . "github.com/ory-am/fosite" + +func NewFosite(store Storage) *Fosite { + return &Fosite{ + Store: store, + } +} diff --git a/session.go b/session.go deleted file mode 100644 index df02b1e8..00000000 --- a/session.go +++ /dev/null @@ -1,120 +0,0 @@ -package fosite - -import ( - "bytes" - "encoding/gob" - "github.com/go-errors/errors" - "github.com/ory-am/fosite/generator" -) - -// Session defines a authorize flow session which will be persisted and passed to the token endpoint (Authorize Code Flow). -type AuthorizeSession interface { - // SetExtra sets extra information that you want to be persisted. Ignore this if you have - // your own session management or do not need additional persistent states. - SetExtra(extra interface{}) error - - // WriteExtra write the extra information back to a struct pointer. - WriteExtra(to interface{}) error - - // GetResponseTypes returns the response types for this authorize session. - GetResponseTypes() []string - - // GetResponseTypes returns the client id (audience) for this authorize session. - GetClientID() string - - // GetResponseTypes returns the scope for this authorize session. - GetScopes() []string - - // GetUser returns the user for this authorize session. - GetUserID() string - - // GetResponseTypes returns the redirect_uri for this authorize session. - GetRedirectURI() string - - // GetResponseTypes returns the state for this authorize session. - GetState() string - - // GetResponseTypes returns the code's signature for this authorize session. - // Once persisted, you lose access to the code's key which is required for a valid code. - // This keeps you safe from a wide range attack vectors regarding your database with SQL injection being - // the most popular. - GetCodeSignature() string -} - -// defaultSession uses gob.Encode and gob.Decode to store extra information. It is recommended to use this -// implementation. -type sqlSession struct { - extra []byte - responseTypes []string - clientID string - scopes []string - redirectURI string - state string - code *generator.Token - userID string - ar *AuthorizeRequest -} - -// NewAuthorizeSessionSQL creates a new authorize session and uses gob.Encode and gob.Decode to store extra information. -// It is recommended to use this implementation. -func NewAuthorizeSessionSQL(ar *AuthorizeRequest, userID string) AuthorizeSession { - var uri string - if ar.RedirectURI != nil { - uri = ar.RedirectURI.String() - } - return &sqlSession{ - ar: ar, - code: ar.Code, - extra: []byte{}, - responseTypes: ar.ResponseTypes, - clientID: ar.Client.GetID(), - state: ar.State, - scopes: ar.Scopes, - redirectURI: uri, - userID: userID, - } -} - -func (s *sqlSession) SetExtra(extra interface{}) error { - var network bytes.Buffer - if err := gob.NewEncoder(&network).Encode(extra); err != nil { - return errors.New(err) - } - s.extra = network.Bytes() - return nil -} - -func (s *sqlSession) WriteExtra(to interface{}) error { - if err := gob.NewDecoder(bytes.NewReader(s.extra)).Decode(to); err != nil { - return errors.New(err) - } - return nil -} - -func (s *sqlSession) GetResponseTypes() []string { - return s.responseTypes -} - -func (s *sqlSession) GetClientID() string { - return s.clientID -} - -func (s *sqlSession) GetScopes() []string { - return s.scopes -} - -func (s *sqlSession) GetRedirectURI() string { - return s.redirectURI -} - -func (s *sqlSession) GetState() string { - return s.state -} - -func (s *sqlSession) GetCodeSignature() string { - return s.code.Signature -} - -func (s *sqlSession) GetUserID() string { - return s.userID -} diff --git a/session_test.go b/session_test.go deleted file mode 100644 index 5e7ec787..00000000 --- a/session_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package fosite_test - -import ( - . "github.com/ory-am/fosite" - "github.com/ory-am/fosite/client" - "github.com/ory-am/fosite/generator" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "net/url" - "testing" -) - -func TestNewAuthorizeSessionSQL(t *testing.T) { - type extra struct { - Foo string - Bar string - } - - var extraOut extra - var extraIn = &extra{ - Foo: "foo", - Bar: "bar", - } - redir, _ := url.Parse("http://foo.bar/cb") - - ar := &AuthorizeRequest{ - ResponseTypes: []string{"code token"}, - Client: &client.SecureClient{ID: "client"}, - Scopes: []string{"email id_token"}, - RedirectURI: redir, - State: "randomState", - ExpiresIn: 30, - Code: &generator.Token{Key: "key", Signature: "sig"}, - } - - as := NewAuthorizeSessionSQL(ar, "1234") - err := as.SetExtra(extraIn) - require.Nil(t, err, "%s", err) - err = as.WriteExtra(&extraOut) - require.Nil(t, err, "%s", err) - assert.Equal(t, extraIn, &extraOut) - - assert.Equal(t, ar.Client.GetID(), as.GetClientID()) - assert.Equal(t, ar.Code.Signature, as.GetCodeSignature()) - assert.Equal(t, ar.RedirectURI.String(), as.GetRedirectURI()) - assert.Equal(t, ar.ResponseTypes, as.GetResponseTypes()) - assert.Equal(t, ar.Scopes, as.GetScopes()) - assert.Equal(t, "1234", as.GetUserID()) -} From 2b988a8b2abd3dea619e31e174b306e45a62fcc1 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 09:33:59 +0100 Subject: [PATCH 15/47] hof: added danielchatfield to the hall of fame --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2f334c7d..3672873d 100644 --- a/README.md +++ b/README.md @@ -257,5 +257,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { This place is reserved for the fearless bug hunters, reviewers and contributors. +1. [danielchatfield](https://github.com/danielchatfield) for [#8](https://github.com/ory-am/fosite/issues/8) + Find out more about the [author](https://aeneas.io/) of Fosite and Hydra, and the [Ory Company](https://ory.am/). \ No newline at end of file From 71a9105a1e4afde3eed0a3ef80239140f6674d15 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 12:39:03 +0100 Subject: [PATCH 16/47] errors: fixed wrongfully set constant ErrTemporaryUnvailableName Closes #9 --- errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/errors.go b/errors.go index 6ccc6460..ffc543cf 100644 --- a/errors.go +++ b/errors.go @@ -23,7 +23,7 @@ const ( errUnsupportedResponseTypeName = "unsupported_response_type" errInvalidScopeName = "invalid_scope" errServerErrorName = "server_error" - errTemporarilyUnavailableName = "errTemporarilyUnavailableName" + errTemporarilyUnavailableName = "temporarily_unavailable" errUnsupportedGrantTypeName = "unsupported_grant_type" errInvalidGrantName = "invalid_grant" errInvalidClientName = "invalid_client" From 01f9ede7e69588caf12940979a1fc0586d5aac3c Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 15:29:15 +0100 Subject: [PATCH 17/47] enigma: implemented new token generator based on hmac-sha256 Closes #11 --- enigma/challenge.go | 42 +++++++ .../challenge_test.go | 11 +- enigma/crypto.go | 103 ++++++++++++++++++ enigma/crypto_test.go | 67 ++++++++++++ enigma/enigma.go | 12 ++ generator/crypto.go | 75 ------------- generator/crypto_test.go | 37 ------- 7 files changed, 230 insertions(+), 117 deletions(-) create mode 100644 enigma/challenge.go rename generator/generator_test.go => enigma/challenge_test.go (71%) create mode 100644 enigma/crypto.go create mode 100644 enigma/crypto_test.go create mode 100644 enigma/enigma.go delete mode 100644 generator/crypto.go delete mode 100644 generator/crypto_test.go diff --git a/enigma/challenge.go b/enigma/challenge.go new file mode 100644 index 00000000..4a0589b0 --- /dev/null +++ b/enigma/challenge.go @@ -0,0 +1,42 @@ +package enigma + +import "strings" + +// Challenge represents an validatable token. +type Challenge struct { + // Key is the messages's key + Key string + + // Signature is the messages's signature + Signature string +} + +// FromString extracts key and signature from ".". +func (a *Challenge) FromString(data string) { + a.Key = "" + a.Signature = "" + + if data == "" { + return + } + + parts := strings.Split(data, ".") + if len(parts) != 2 { + return + } + + key := strings.TrimSpace(parts[0]) + sig := strings.TrimSpace(parts[1]) + if key == "" || sig == "" { + return + } + + a.Key = key + a.Signature = sig + return +} + +// String will return the Challenge as ".". +func (a *Challenge) String() string { + return a.Key + "." + a.Signature +} diff --git a/generator/generator_test.go b/enigma/challenge_test.go similarity index 71% rename from generator/generator_test.go rename to enigma/challenge_test.go index 50dc66f2..58b8a2b1 100644 --- a/generator/generator_test.go +++ b/enigma/challenge_test.go @@ -1,19 +1,20 @@ -package generator +package enigma import ( "github.com/stretchr/testify/assert" "testing" ) -func TestTokenToString(t *testing.T) { - ac := &Token{ +func TestChallengeToString(t *testing.T) { + ac := &Challenge{ Key: "foo", Signature: "bar", } assert.Equal(t, "foo.bar", ac.String()) } -func TestTokenFromString(t *testing.T) { - ac := new(Token) + +func TestChallengeFromString(t *testing.T) { + ac := new(Challenge) for _, c := range [][]string{ {"foo.bar", "foo", "bar"}, {"foo.", "", ""}, diff --git a/enigma/crypto.go b/enigma/crypto.go new file mode 100644 index 00000000..57e3317c --- /dev/null +++ b/enigma/crypto.go @@ -0,0 +1,103 @@ +package enigma + +import ( + "bytes" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "github.com/go-errors/errors" + "github.com/ory-am/fosite/rand" +) + +// CryptoEnigma is the default implementation for generating and validating challenges. +type CryptoEnigma struct { + AuthCodeEntropy int + GlobalSecret []byte +} + +// key should be at least 256 bit long, making it +const minimumEntropy = 32 + +// the secrets (client and global) should each have at least 16 characters making it harder to guess them +const minimumSecretLength = 32 + +// GenerateAuthorizeCode generates a new authorize code or returns an error. set secret +// This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. +func (c *CryptoEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { + if len(secret) < minimumSecretLength/2 || len(c.GlobalSecret) < minimumSecretLength/2 { + return nil, errors.New("Secret or GlobalSecret are not strong enough") + } + + if c.AuthCodeEntropy < minimumEntropy { + c.AuthCodeEntropy = minimumEntropy + } + + // When creating secrets not intended for usage by human users (e.g., + // client secrets or token handles), the authorization server should + // include a reasonable level of entropy in order to mitigate the risk + // of guessing attacks. The token value should be >=128 bits long and + // constructed from a cryptographically strong random or pseudo-random + // number sequence (see [RFC4086] for best current practice) generated + // by the authorization server. + randomBytes, err := rand.RandomBytes(c.AuthCodeEntropy, 20) + if err != nil { + return nil, errors.New(err) + } + + if len(randomBytes) < c.AuthCodeEntropy { + return nil, errors.New("Could not read enough random data for key generation") + } + + useSecret := append([]byte{}, c.GlobalSecret...) + mac := hmac.New(sha256.New, append(useSecret, secret...)) + _, err = mac.Write(randomBytes) + if err != nil { + return nil, errors.New(err) + } + signature := mac.Sum([]byte{}) + + encodedKey := make([]byte, base64.StdEncoding.EncodedLen(c.AuthCodeEntropy)) + base64.StdEncoding.Encode(encodedKey, randomBytes) + encodedKey = bytes.Trim(encodedKey, "\x00") + + encodedSignature := make([]byte, base64.StdEncoding.EncodedLen(len(signature))) + base64.StdEncoding.Encode(encodedSignature, signature) + encodedSignature = bytes.Trim(encodedSignature, "\x00") + + return &Challenge{ + Key: string(encodedKey), + Signature: string(encodedSignature), + }, nil +} + +// ValidateAuthorizeCodeSignature returns an AuthorizeCode, if the code argument is a valid authorize code +// and the signature matches the key. +func (c *CryptoEnigma) ValidateChallenge(secret []byte, t *Challenge) (err error) { + if t.Key == "" || t.Signature == "" { + return errors.New("Key and signature must both be not empty") + } + + key := make([]byte, base64.StdEncoding.DecodedLen(len(t.Key))) + if _, err := base64.StdEncoding.Decode(key, []byte(t.Signature)); err != nil { + return err + } + + signature := make([]byte, base64.StdEncoding.DecodedLen(len(t.Signature))) + if _, err := base64.StdEncoding.Decode(signature, []byte(t.Signature)); err != nil { + return err + } + + useSecret := append([]byte{}, c.GlobalSecret...) + mac := hmac.New(sha256.New, append(useSecret, secret...)) + _, err = mac.Write(key) + if err != nil { + return errors.New(err) + } + + if !hmac.Equal(signature, mac.Sum([]byte{})) { + // Hash is invalid + return errors.New("Key and signature do not match") + } + + return nil +} diff --git a/enigma/crypto_test.go b/enigma/crypto_test.go new file mode 100644 index 00000000..8390fe53 --- /dev/null +++ b/enigma/crypto_test.go @@ -0,0 +1,67 @@ +package enigma + +import ( + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" +) + +func TestGenerateFailsWithShortCredentials(t *testing.T) { + cg := CryptoEnigma{ + GlobalSecret: []byte("foo"), + } + + challenge, err := cg.GenerateChallenge([]byte("bar")) + require.NotNil(t, err, "%s", err) + require.Nil(t, challenge) + + cg.GlobalSecret = []byte("12345678901234567890") + challenge, err = cg.GenerateChallenge([]byte("bar")) + require.NotNil(t, err, "%s", err) + require.Nil(t, challenge) + + cg.GlobalSecret = []byte("bar") + challenge, err = cg.GenerateChallenge([]byte("12345678901234567890")) + require.NotNil(t, err, "%s", err) + require.Nil(t, challenge) +} + +func TestGenerate(t *testing.T) { + cg := CryptoEnigma{ + GlobalSecret: []byte("12345678901234567890"), + } + + challenge, err := cg.GenerateChallenge([]byte("09876543210987654321")) + require.Nil(t, err, "%s", err) + require.NotNil(t, challenge) + t.Logf("%s.%s", challenge.Key, challenge.Signature) + + err = cg.ValidateChallenge([]byte("bar"), challenge) + require.NotNil(t, err, "%s", err) + + err = cg.ValidateChallenge([]byte("baz"), challenge) + require.NotNil(t, err, "%s", err) + + cg.GlobalSecret = []byte("baz") + err = cg.ValidateChallenge([]byte("bar"), challenge) + require.NotNil(t, err, "%s", err) +} + +func TestValidateSignatureRejects(t *testing.T) { + var err error + cg := CryptoEnigma{ + GlobalSecret: []byte("12345678901234567890"), + } + token := new(Challenge) + for _, c := range []string{ + "", + " ", + "foo.bar", + "foo.", + ".foo", + } { + token.FromString(c) + err = cg.ValidateChallenge([]byte("09876543210987654321"), token) + assert.NotNil(t, err, "%s", err) + } +} diff --git a/enigma/enigma.go b/enigma/enigma.go new file mode 100644 index 00000000..399de511 --- /dev/null +++ b/enigma/enigma.go @@ -0,0 +1,12 @@ +package enigma + +// Enigma provides a set of methods to create access, refresh and authorize tokens. +type Enigma interface { + + // GenerateChallenge generates a challenge (comparable to an opaque token). + GenerateChallenge(secret []byte) (*Challenge, error) + + // ValidateSignature verifies that the challenge key matches the challenge signature, making the challenge + // valid or returning an error if it is invalid. + ValidateChallenge(secret []byte, challenge *Challenge) error +} diff --git a/generator/crypto.go b/generator/crypto.go deleted file mode 100644 index 70d9587a..00000000 --- a/generator/crypto.go +++ /dev/null @@ -1,75 +0,0 @@ -package generator - -import ( - "bytes" - "encoding/base64" - "github.com/go-errors/errors" - "github.com/ory-am/fosite/hash" - "github.com/ory-am/fosite/rand" -) - -type CryptoGenerator struct { - AuthCodeEntropy int - Hasher hash.Hasher -} - -// Default of 32 bytes * 8 = 256 bit which is >= 128 bits as recommended by rfc6819 section 5.1.4.2.2. -const minimumEntropy = 32 - -// GenerateAuthorizeCode generates a new authorize code or returns an error. -// This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. -func (c *CryptoGenerator) Generate() (*Token, error) { - if c.AuthCodeEntropy < minimumEntropy { - c.AuthCodeEntropy = minimumEntropy - } - - // When creating secrets not intended for usage by human users (e.g., - // client secrets or token handles), the authorization server should - // include a reasonable level of entropy in order to mitigate the risk - // of guessing attacks. The token value should be >=128 bits long and - // constructed from a cryptographically strong random or pseudo-random - // number sequence (see [RFC4086] for best current practice) generated - // by the authorization server. - randomBytes, err := rand.RandomBytes(c.AuthCodeEntropy, 20) - if err != nil { - return nil, err - } - - resultKey := make([]byte, base64.StdEncoding.EncodedLen(c.AuthCodeEntropy)) - base64.StdEncoding.Encode(resultKey, randomBytes) - resultKey = bytes.Trim(resultKey, "\x00") - - hash, err := c.Hasher.Hash(resultKey) - if err != nil { - return nil, err - } - - resultHash := make([]byte, base64.StdEncoding.EncodedLen(len(hash))) - base64.StdEncoding.Encode(resultHash, hash) - resultHash = bytes.Trim(resultHash, "\x00") - - return &Token{ - Key: string(resultKey), - Signature: string(resultHash), - }, nil -} - -// ValidateAuthorizeCodeSignature returns an AuthorizeCode, if the code argument is a valid authorize code -// and the signature matches the key. -func (c *CryptoGenerator) ValidateSignature(t *Token) (err error) { - if t.Key == "" || t.Signature == "" { - return errors.New("Key and signature must both be not empty") - } - - signature := make([]byte, base64.StdEncoding.DecodedLen(len(t.Signature))) - if _, err := base64.StdEncoding.Decode(signature, []byte(t.Signature)); err != nil { - return err - } - - if err := c.Hasher.Compare(signature, []byte(t.Key)); err != nil { - // Hash is invalid - return errors.New("Key and signature do not match") - } - - return nil -} diff --git a/generator/crypto_test.go b/generator/crypto_test.go deleted file mode 100644 index c9dbc135..00000000 --- a/generator/crypto_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package generator - -import ( - "github.com/ory-am/fosite/hash" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "testing" -) - -func TestGenerate(t *testing.T) { - cg := CryptoGenerator{Hasher: &hash.BCrypt{}} - code, err := cg.Generate() - require.Nil(t, err, "%s", err) - require.NotNil(t, code) - - err = cg.ValidateSignature(code) - require.Nil(t, err, "%s", err) -} - -func TestValidateSignatureRejects(t *testing.T) { - var err error - cg := CryptoGenerator{ - Hasher: &hash.BCrypt{}, - } - token := new(Token) - for _, c := range []string{ - "", - " ", - "foo.bar", - "foo.", - ".foo", - } { - token.FromString(c) - err = cg.ValidateSignature(token) - assert.NotNil(t, err, "%s", err) - } -} From a5391deaa543441f1e3838b0c5093692be247015 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 15:30:47 +0100 Subject: [PATCH 18/47] readme: fixed typos Closes #10 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3672873d..5d49be3c 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ var store = fosite.NewPostgreSQLStore() var oauth2 = service.NewDefaultOAuth2(store) // Let's assume that we're in a http handler -func handleAuth(rw http.ResponseWriter, req *http.Request) { +func handleAuth(rw http.ResponseWriter, r *http.Request) { ctx := context.Background() // Let's create an AuthorizeRequest object! @@ -249,7 +249,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { return } - oauth2.WriteAccessResponse(rw, ar, response) + oauth2.WriteAccessResponse(rw, accessRequest, response) } ``` From ddef55ba96b6c533681b7a1953da5c33ed30587a Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 15:33:10 +0100 Subject: [PATCH 19/47] docs: document new token generation and validation --- README.md | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 5d49be3c..e1ac3560 100644 --- a/README.md +++ b/README.md @@ -90,33 +90,12 @@ Token generators should know nothing about the request or context. #### Advanced Token Validation -Tokens are layouted as `.`. The following workflow requires an attacker to gain - -a. access to the database -b. write permission in the persistent store, -c. get hold of the token encryption secret. - -A database leak or (exclusively) the knowledge of the token encrpytion secret are not enough to maliciously obtain or create a valid token. Tokens and credentials can -however still be stolen by man-in-the-middle attacks, by malicious or vulnerable clients and other attack vectors. - -**Issuance** - -1. The key is hashed using BCrypt (variable) and used as ``. -2. The client is presented and entrusted with `.` which can act for example as an access token or an authorize code. -3. The signature is encrypted and stored in the database using AES (variable). - -**Validation** - -1. The client presents `.`. -2. It is validated if matches using BCrypt (variable). -3. The signature is encrypted using AES (variable). -4. The encrypted signature is looked up in the database, failing validation if no such row exists. -5. They key is considered valid and is now subject for other validations, like audience, redirect or state matching. - -A token generated by `generator.CryptoGenerator` looks like: +Tokens are layouted as `.` where `` is created using HMAC-SHA256, a global secret +and the client's secret. Read more about this workflow in the [proposal](https://github.com/ory-am/fosite/issues/11). +A created token looks like: ``` -GUULhK6Od/7UAlnKvMau8APHSKXSRwm9aoOk56SHBns.JDJhJDEwJDdwVmpCQmJLYzM2VDg1VHJ5aEdVOE81NVdRSkt6bHBHR1QwOC9pbTNFWmpQRXliTWRPeDQy +/tgBeUhWlAT8tM8Bhmnx+Amf8rOYOUhrDi3pGzmjP7c=.BiV/Yhma+5moTP46anxMT6cWW8gz5R5vpC9RbpwSDdM= ``` #### Encrypt credentials at rest From 38bacd340eed991d69dc95f8a7bf6c0f328d8f47 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 18:04:26 +0100 Subject: [PATCH 20/47] all: major refactor, use enigma, finalized authorize skeleton Closes #8 and introduces shift to new token logic proposed in #11 --- LICENSE | 222 +++++++++++++++++++++++++--- arguments_test.go | 11 +- authorize.go | 181 +++++++++++++---------- authorize_integration_test.go | 9 +- authorize_privates_test.go | 25 ++-- authorize_test.go | 262 +++++++++++++++------------------- client/client.go | 21 +-- client/client_test.go | 7 +- enigma/challenge_test.go | 3 +- enigma/crypto_test.go | 3 +- generator/generator.go | 52 ------- handler.go | 16 ++- handler_test.go | 17 ++- helper.go | 29 +--- helper_test.go | 24 ++++ internal/code_storage.go | 40 ++++++ internal/enigma.go | 51 +++++++ internal/generator.go | 51 ------- internal/handler.go | 6 +- internal/request.go | 103 +++++++++++++ internal/response.go | 85 +++++++++++ internal/storage.go | 21 --- oauth2.go | 8 +- plugin/code/code.go | 8 +- plugin/token/token.go | 16 +-- rand/bytes.go | 10 +- request.go | 16 ++- response.go | 35 ++++- storage.go | 37 ----- 29 files changed, 850 insertions(+), 519 deletions(-) delete mode 100644 generator/generator.go create mode 100644 helper_test.go create mode 100644 internal/code_storage.go create mode 100644 internal/enigma.go delete mode 100644 internal/generator.go create mode 100644 internal/request.go create mode 100644 internal/response.go diff --git a/LICENSE b/LICENSE index df4ddf50..7f66ed3c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,22 +1,202 @@ -The MIT License (MIT) - -Copyright (c) 2015 ory.am - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2016 Ory GmbH & Aeneas Rekkas + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/arguments_test.go b/arguments_test.go index 75c86ca7..d28742c4 100644 --- a/arguments_test.go +++ b/arguments_test.go @@ -12,26 +12,27 @@ func TestArgumentsHas(t *testing.T) { expect bool }{ { - args: &Arguments{"foo", "bar"}, + args: Arguments{"foo", "bar"}, has: "foo", expect: true, }, { - args: &Arguments{"foo", "bar"}, + args: Arguments{"foo", "bar"}, has: "bar", expect: true, }, { - args: &Arguments{"foo", "bar"}, + args: Arguments{"foo", "bar"}, has: "baz", expect: false, }, { - args: &Arguments{}, + args: Arguments{}, has: "baz", expect: false, }, } { - assert.Equal(t, c.expect, c.args.Has("c.has"), "%d", k) + assert.Equal(t, c.expect, c.args.Has(c.has), "%d", k) + t.Logf("Passed test case %d", k) } } diff --git a/authorize.go b/authorize.go index 6e746b24..d26a0ed4 100644 --- a/authorize.go +++ b/authorize.go @@ -1,6 +1,7 @@ package fosite import ( + "github.com/asaskevich/govalidator" "github.com/go-errors/errors" "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite/client" @@ -14,40 +15,37 @@ import ( const minStateLength = 8 func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { + request := &AuthorizeRequest{ + RequestedAt: time.Now(), + } + if err := r.ParseForm(); err != nil { - return nil, errors.New(ErrInvalidRequest) + return request, errors.New(ErrInvalidRequest) } - redirectURI, err := redirectFromValues(r.Form) + client, err := c.Store.GetClient(r.Form.Get("client_id")) if err != nil { - return nil, errors.New(ErrInvalidRequest) + return request, errors.New(ErrInvalidClient) } + request.Client = client - client, err := c.Store.GetClient(r.Form.Get("client_id")) + // Fetch redirect URI from request + rawRedirURI, err := GetRedirectURIFromRequestValues(r.Form) if err != nil { - return nil, errors.New(ErrInvalidClient) + return request, errors.New(ErrInvalidRequest) } - // * rfc6749 10.6. Authorization Code Redirection URI Manipulation - // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - if redirectURI, err = redirectFromClient(redirectURI, client); err != nil { - return nil, errors.New(ErrInvalidRequest) + // Validate redirect uri + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(rawRedirURI, client) + if err != nil { + return request, errors.New(ErrInvalidRequest) + } else if !IsValidRedirectURI(redirectURI) { + return request, errors.New(ErrInvalidRequest) } + request.RedirectURI = redirectURI - // rfc6749 3.1.1. Response Type - // response_type REQUIRED. - // The value MUST be one of "code" for requesting an - // authorization code as described by Section 4.1.1, "token" for - // requesting an access token (implicit grant) as described by - // Section 4.2.1, or a registered extension value as described by Section 8.4. - // - // response-type = response-name *( SP response-name ) - // response-name = 1*response-char - // response-char = "_" / DIGIT / ALPHA responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) - if !areResponseTypesValid(c, responseTypes) { - return nil, errors.New(ErrUnsupportedResponseType) - } + request.ResponseTypes = responseTypes // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri // The "state" parameter should be used to link the authorization @@ -57,32 +55,27 @@ func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (Author // The "state" parameter should not be guessable state := r.Form.Get("state") if state == "" { - return nil, errors.New(ErrInvalidState) + return request, errors.New(ErrInvalidState) } else if len(state) < minStateLength { // We're assuming that using less then 6 characters for the state can not be considered "unguessable" - return nil, errors.New(ErrInvalidState) + return request, errors.New(ErrInvalidState) } + request.State = state // Remove empty items from arrays - scopes := removeEmpty(strings.Split(r.Form.Get("scope"), " ")) - - return &AuthorizeRequest{ - ResponseTypes: responseTypes, - Client: client, - Scopes: scopes, - State: state, - RedirectURI: redirectURI, - RequestedAt: time.Time, - }, nil + request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + + return request, nil } func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { - q := ar.GetRedirectURI().Query() - args := resp.GetArguments() + redir := ar.GetRedirectURI() + q := redir.Query() + args := resp.GetQuery() for k, _ := range args { q.Add(k, args.Get(k)) } - ar.GetRedirectURI().RawQuery = q.Encode() + redir.RawQuery = q.Encode() header := resp.GetHeader() for k, v := range header { for _, vv := range v { @@ -102,13 +95,11 @@ func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequ func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequester, err error) { rfcerr := ErrorToRFC6749Error(err) - // rfc6749#section-4.1.2.1 - if ar.GetRedirectURI().String() == "" { + if !ar.IsRedirectURIValid() { pkg.WriteJSON(rw, rfcerr) return } - // Defer the uri so we don't mess with the redirect data redirectURI := ar.GetRedirectURI() query := redirectURI.Query() query.Add("error", rfcerr.Name) @@ -120,13 +111,12 @@ func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest } func (o *Fosite) NewAuthorizeResponse(ctx context.Context, ar AuthorizeRequester, r *http.Request, session interface{}) (AuthorizeResponder, error) { - var resp = new(AuthorizeResponder) + var resp = new(AuthorizeResponse) var err error var found bool for _, h := range o.ResponseTypeHandlers { - // Dereference http request and authorize request so handler's can't mess with it. - err = h.HandleResponseType(ctx, resp, *ar, *r, session) + err = h.HandleResponseType(ctx, resp, ar, r, session) if err == nil { found = true } else if err != ErrInvalidResponseType { @@ -141,52 +131,89 @@ func (o *Fosite) NewAuthorizeResponse(ctx context.Context, ar AuthorizeRequester return resp, nil } -// redirectFromValues extracts the redirect_uri from values. -// * rfc6749 3.1. Authorization Endpoint -// * rfc6749 3.1.2. Redirection Endpoint -func redirectFromValues(values url.Values) (urlobj *url.URL, err error) { +// GetRedirectURIFromRequestValues extracts the redirect_uri from values but does not do any sort of validation. +// +// Considered specifications +// * https://tools.ietf.org/html/rfc6749#section-3.1 +// The endpoint URI MAY include an +// "application/x-www-form-urlencoded" formatted (per Appendix B) query +// component ([RFC3986] Section 3.4), which MUST be retained when adding +// additional query parameters. +func GetRedirectURIFromRequestValues(values url.Values) (string, error) { // rfc6749 3.1. Authorization Endpoint // The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component redirectURI, err := url.QueryUnescape(values.Get("redirect_uri")) if err != nil { - return nil, errors.Wrap(ErrInvalidRequest, 0) + return "", errors.Wrap(ErrInvalidRequest, 0) } + return redirectURI, nil +} - // rfc6749 3.1.2. Redirection Endpoint - // "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" - urlobj, valid := validateURL(redirectURI) - if !valid { - return nil, errors.Wrap(ErrInvalidRequest, 0) +// MatchRedirectURIWithClientRedirectURIs if the given uri is a registered redirect uri. Does not perform +// uri validation. +// +// Considered specifications +// * http://tools.ietf.org/html/rfc6749#section-3.1.2.3 +// If multiple redirection URIs have been registered, if only part of +// the redirection URI has been registered, or if no redirection URI has +// been registered, the client MUST include a redirection URI with the +// authorization request using the "redirect_uri" request parameter. +// +// When a redirection URI is included in an authorization request, the +// authorization server MUST compare and match the value received +// against at least one of the registered redirection URIs (or URI +// components) as defined in [RFC3986] Section 6, if any redirection +// URIs were registered. If the client registration included the full +// redirection URI, the authorization server MUST compare the two URIs +// using simple string comparison as defined in [RFC3986] Section 6.2.1. +// +// * https://tools.ietf.org/html/rfc6819#section-4.4.1.7 +// * The authorization server may also enforce the usage and validation +// of pre-registered redirect URIs (see Section 5.2.3.5). This will +// allow for early recognition of authorization "code" disclosure to +// counterfeit clients. +// * The attacker will need to use another redirect URI for its +// authorization process rather than the target web site because it +// needs to intercept the flow. So, if the authorization server +// associates the authorization "code" with the redirect URI of a +// particular end-user authorization and validates this redirect URI +// with the redirect URI passed to the token's endpoint, such an +// attack is detected (see Section 5.2.4.5). +func MatchRedirectURIWithClientRedirectURIs(rawurl string, client Client) (*url.URL, error) { + if rawurl == "" && len(client.GetRedirectURIs()) == 1 { + if redirectURIFromClient, err := url.Parse(client.GetRedirectURIs()[0]); err == nil && IsValidRedirectURI(redirectURIFromClient) { + // If no redirect_uri was given and the client has exactly one valid redirect_uri registered, use that instead + return redirectURIFromClient, nil + } + } else if rawurl != "" && StringInSlice(rawurl, client.GetRedirectURIs()) { + // If a redirect_uri was given and the clients knows it (simple string comparison!) + // return it. + if parsed, err := url.Parse(rawurl); err == nil && IsValidRedirectURI(parsed) { + // If no redirect_uri was given and the client has exactly one valid redirect_uri registered, use that instead + return parsed, nil + } } - return urlobj, nil + return nil, errors.New(ErrInvalidRequest) } -// redirectFromClient looks up if redirect and client are matching. -// * rfc6749 10.6. Authorization Code Redirection URI Manipulation -// * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client -func redirectFromClient(parseduri *url.URL, client Client) (*url.URL, error) { - // rfc6749 10.6. Authorization Code Redirection URI Manipulation - // The authorization server MUST require public clients and SHOULD require confidential clients - // to register their redirection URIs. If a redirection URI is provided - // in the request, the authorization server MUST validate it against the - // registered value. - // - // rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - // The authorization server may also enforce the usage and validation - // of pre-registered redirect URIs (see Section 5.2.3.5). - var rawuri string - if parseduri != nil { - rawuri = parseduri.String() +// IsValidRedirectURI validates a redirect_uri as specified in: +// +// * https://tools.ietf.org/html/rfc6749#section-3.1.2 +// * The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3. +// * The endpoint URI MUST NOT include a fragment component. +// * https://tools.ietf.org/html/rfc3986#section-4.3 +// absolute-URI = scheme ":" hier-part [ "?" query ] +func IsValidRedirectURI(redirectURI *url.URL) bool { + // We need to explicitly check for a scheme + if !govalidator.IsRequestURL(redirectURI.String()) { + return false } - if rawuri == "" && len(client.GetRedirectURIs()) == 1 { - if purl, valid := validateURL(client.GetRedirectURIs()[0]); valid { - return purl, nil - } - } else if rawuri != "" && StringInSlice(rawuri, client.GetRedirectURIs()) { - return parseduri, nil + if redirectURI.Fragment != "" { + // "The endpoint URI MUST NOT include a fragment component." + return false } - return nil, errors.New(ErrInvalidRequest) + return true } diff --git a/authorize_integration_test.go b/authorize_integration_test.go index 88e4fea5..25244f84 100644 --- a/authorize_integration_test.go +++ b/authorize_integration_test.go @@ -1,20 +1,19 @@ package fosite_test import ( - "github.com/golang/mock/gomock" + /*"github.com/golang/mock/gomock" . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/client" - "github.com/ory-am/fosite/generator" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/require" "golang.org/x/net/context" "net/http" - "net/url" + "net/url"*/ "testing" ) func TestAuthorizeWorkflow(t *testing.T) { - ctrl := gomock.NewController(t) + /*ctrl := gomock.NewController(t) store := NewMockStorage(ctrl) gen := NewMockGenerator(ctrl) defer ctrl.Finish() @@ -100,5 +99,5 @@ func TestAuthorizeWorkflow(t *testing.T) { // ** API not finalized yet ** // err := oauth2.FinishAuthorizeRequest(rw, response, session) // **** - } + }*/ } diff --git a/authorize_privates_test.go b/authorize_privates_test.go index a99d61fe..76f48f69 100644 --- a/authorize_privates_test.go +++ b/authorize_privates_test.go @@ -8,26 +8,30 @@ import ( "testing" ) -// TODO rfc6749 3.1. Authorization Endpoint -// The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component -// -// rfc6749 3.1.2. Redirection Endpoint -// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" +// Test for +// * https://tools.ietf.org/html/rfc6749#section-3.1.2 +// The endpoint URI MAY include an +// "application/x-www-form-urlencoded" formatted (per Appendix B) query +// component ([RFC3986] Section 3.4), which MUST be retained when adding +// additional query parameters. func TestGetRedirectURI(t *testing.T) { - for _, c := range []struct { + for k, c := range []struct { in string isError bool expected string }{ - {in: "", isError: true}, + {in: "", isError: false, expected: ""}, + {in: "http://google.com/", isError: false, expected: "http://google.com/"}, + {in: "http://google.com/?foo=bar%20foo+baz", isError: false, expected: "http://google.com/?foo=bar foo baz"}, } { values := url.Values{} values.Set("redirect_uri", c.in) - res, err := redirectFromValues(values) + res, err := GetRedirectURIFromRequestValues(values) assert.Equal(t, c.isError, err != nil, "%s", err) if err == nil { assert.Equal(t, c.expected, res) } + t.Logf("Passed test case %d", k) } } @@ -82,13 +86,12 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { isError: true, }, } { - u, err := url.Parse(c.url) - require.Nil(t, err) - redir, err := redirectFromClient(u, c.client) + redir, err := MatchRedirectURIWithClientRedirectURIs(c.url, c.client) assert.Equal(t, c.isError, err != nil, "%d: %s", k, err) if err == nil { require.NotNil(t, redir, "%d", k) assert.Equal(t, c.expected, redir.String(), "%d", k) } + t.Logf("Passed test case %d", k) } } diff --git a/authorize_test.go b/authorize_test.go index 7c6ff853..fb668b49 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -2,9 +2,9 @@ package fosite_test import ( "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/client" - "github.com/ory-am/fosite/generator" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" "github.com/vektra/errors" @@ -14,85 +14,104 @@ import ( "testing" ) -func TestFinishAuthorizeRequest(t *testing.T) { +func TestNewNewAuthorizeResponse(t *testing.T) { ctrl := gomock.NewController(t) - rw := NewMockResponseWriter(ctrl) - store := NewMockStorage(ctrl) + handlers := []*MockResponseTypeHandler{NewMockResponseTypeHandler(ctrl)} defer ctrl.Finish() - redir, _ := url.Parse("http://foobar.com/") - header := http.Header{} - oauth2 := &Fosite{Store: store} + ctx := context.Background() + oauth2 := &Fosite{ + ResponseTypeHandlers: []ResponseTypeHandler{handlers[0]}, + } + duo := &Fosite{ + ResponseTypeHandlers: []ResponseTypeHandler{handlers[0], handlers[0]}, + } + fooErr := errors.New("foo") for k, c := range []struct { - ar AuthorizeRequester - resp AuthorizeResponder - isErr bool - mock func() - checkHeader func(int) + isErr bool + mock func() + expectErr error }{ { - ar: AuthorizeRequester{RedirectURI: redir}, - resp: AuthorizeResponder{ - Header: http.Header{ - "foo": []string{"bar"}, - }, - Query: url.Values{ - "baz": []string{"bar"}, - "foo": []string{"baz"}, - }, + mock: func() { + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) }, + isErr: true, + expectErr: fooErr, + }, + { mock: func() { - store.EXPECT().StoreAuthorizeSession(gomock.Nil()).Return(ErrServerError) + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) }, - checkHeader: func(_ int) {}, - isErr: true, + isErr: true, + expectErr: ErrNoResponseTypeHandlerFound, }, { - ar: AuthorizeRequester{RedirectURI: redir}, - resp: AuthorizeResponder{ - Header: http.Header{ - "foo": []string{"x-bar"}, - }, - Query: url.Values{ - "baz": []string{"bar"}, - "foo": []string{"baz"}, - }, + mock: func() { + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, + isErr: false, + }, + { mock: func() { - store.EXPECT().StoreAuthorizeSession(gomock.Nil()).Return(nil) - rw.EXPECT().Header().AnyTimes().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) + oauth2 = duo + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, - checkHeader: func(k int) { - assert.Equal(t, "x-bar", header.Get("Foo"), "%d: %s", k, header) - assert.Equal(t, "http://foobar.com/?baz=bar&foo=baz", header.Get("Location"), "%d", k) + isErr: false, + }, + { + mock: func() { + oauth2 = duo + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) }, isErr: false, }, + { + mock: func() { + oauth2 = duo + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) + }, + isErr: true, + expectErr: fooErr, + }, } { c.mock() - err := oauth2.FinishAuthorizeRequest(rw, c.ar, c.resp, nil) + responder, err := oauth2.NewAuthorizeResponse(ctx, nil, nil, nil) assert.Equal(t, c.isErr, err != nil, "%d: %s", k, err) - if err == nil { - c.checkHeader(k) + if err != nil { + assert.Equal(t, c.expectErr, err, "%d: %s", k, err) + assert.Nil(t, responder, "%d", k) + } else { + assert.NotNil(t, responder, "%d", k) } - header = http.Header{} + t.Logf("Passed test case %d", k) } } -// https://tools.ietf.org/html/rfc6749#section-4.1.2.1 -// If the request fails due to a missing, invalid, or mismatching -// redirection URI, or if the client identifier is missing or invalid, -// the authorization server SHOULD inform the resource owner of the -// error and MUST NOT automatically redirect the user-agent to the -// invalid redirection URI. +// Test for +// * https://tools.ietf.org/html/rfc6749#section-4.1.2.1 +// If the request fails due to a missing, invalid, or mismatching +// redirection URI, or if the client identifier is missing or invalid, +// the authorization server SHOULD inform the resource owner of the +// error and MUST NOT automatically redirect the user-agent to the +// invalid redirection URI. +// * https://tools.ietf.org/html/rfc6749#section-3.1.2 +// The redirection endpoint URI MUST be an absolute URI as defined by +// [RFC3986] Section 4.3. The endpoint URI MAY include an +// "application/x-www-form-urlencoded" formatted (per Appendix B) query +// component ([RFC3986] Section 3.4), which MUST be retained when adding +// additional query parameters. The endpoint URI MUST NOT include a +// fragment component. func TestWriteAuthorizeError(t *testing.T) { ctrl := gomock.NewController(t) rw := NewMockResponseWriter(ctrl) + req := NewMockAuthorizeRequester(ctrl) defer ctrl.Finish() var urls = []string{ - "", "http://foobar.com/", "http://foobar.com/?foo=bar", } @@ -105,15 +124,14 @@ func TestWriteAuthorizeError(t *testing.T) { oauth2 := &Fosite{} header := http.Header{} for k, c := range []struct { - ar AuthorizeRequester err error mock func() checkHeader func(int) }{ { - ar: AuthorizeRequester{RedirectURI: purls[0]}, err: ErrInvalidGrant, mock: func() { + req.EXPECT().IsRedirectURIValid().Return(false) rw.EXPECT().Header().Return(header) rw.EXPECT().WriteHeader(http.StatusOK) rw.EXPECT().Write(gomock.Any()) @@ -123,9 +141,10 @@ func TestWriteAuthorizeError(t *testing.T) { }, }, { - ar: AuthorizeRequester{RedirectURI: purls[1]}, err: ErrInvalidRequest, mock: func() { + req.EXPECT().IsRedirectURIValid().Return(true) + req.EXPECT().GetRedirectURI().Return(purls[0]) rw.EXPECT().Header().Return(header) rw.EXPECT().WriteHeader(http.StatusFound) }, @@ -136,9 +155,10 @@ func TestWriteAuthorizeError(t *testing.T) { }, }, { - ar: AuthorizeRequester{RedirectURI: purls[2]}, err: ErrInvalidRequest, mock: func() { + req.EXPECT().IsRedirectURIValid().Return(true) + req.EXPECT().GetRedirectURI().Return(purls[1]) rw.EXPECT().Header().Return(header) rw.EXPECT().WriteHeader(http.StatusFound) }, @@ -150,18 +170,22 @@ func TestWriteAuthorizeError(t *testing.T) { }, } { c.mock() - ar := c.ar - oauth2.WriteAuthorizeError(rw, ar, c.err) - assert.Equal(t, c.ar, ar, "%d", k) + oauth2.WriteAuthorizeError(rw, req, c.err) c.checkHeader(k) header = http.Header{} + t.Logf("Passed test case %d", k) } } +// Should pass +// +// * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#Terminology +// The OAuth 2.0 specification allows for registration of space-separated response_type parameter values. +// If a Response Type contains one of more space characters (%20), it is compared as a space-delimited list of +// values in which the order of values does not matter. func TestNewAuthorizeRequest(t *testing.T) { ctrl := gomock.NewController(t) store := NewMockStorage(ctrl) - gen := NewMockGenerator(ctrl) defer ctrl.Finish() redir, _ := url.Parse("http://foo.bar/cb") @@ -172,27 +196,31 @@ func TestNewAuthorizeRequest(t *testing.T) { query url.Values expectedError error mock func() - expect *AuthorizeRequester + expect *AuthorizeRequest }{ /* empty request */ { desc: "empty request fails", conf: &Fosite{Store: store}, r: &http.Request{}, - expectedError: ErrInvalidRequest, - mock: func() {}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, }, /* invalid redirect uri */ { desc: "invalid redirect uri fails", conf: &Fosite{Store: store}, query: url.Values{"redirect_uri": []string{"invalid"}}, - expectedError: ErrInvalidRequest, - mock: func() {}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, }, /* invalid client */ { - desc: "invalid client uri fails", + desc: "invalid client fails", conf: &Fosite{Store: store}, query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, expectedError: ErrInvalidClient, @@ -205,87 +233,43 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "client and request redirects mismatch", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, + "client_id": []string{"1234"}, }, expectedError: ErrInvalidRequest, mock: func() { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) }, }, - /* no response type */ + /* redirect client mismatch */ { - desc: "no response type", + desc: "client and request redirects mismatch", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, + "redirect_uri": []string{""}, "client_id": []string{"1234"}, }, - expectedError: ErrUnsupportedResponseType, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, - /* invalid response type */ - { - desc: "invalid response type", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"foo"}, - }, - expectedError: ErrUnsupportedResponseType, + expectedError: ErrInvalidRequest, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) }, }, - /* invalid response type */ + /* redirect client mismatch */ { - desc: "invalid response type", + desc: "client and request redirects mismatch", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"foo"}, - }, - expectedError: ErrUnsupportedResponseType, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, - /* unsupported response type */ - { - desc: "unspported response type", - conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code token"}, - }, - expectedError: ErrUnsupportedResponseType, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, - /* unsupported response type */ - { - desc: "unspported response type", - conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"foo"}, + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, }, - expectedError: ErrUnsupportedResponseType, + expectedError: ErrInvalidRequest, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) }, }, /* no state */ { desc: "no state", - conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -299,7 +283,7 @@ func TestNewAuthorizeRequest(t *testing.T) { /* short state */ { desc: "short state", - conf: &Fosite{Store: store, AllowedResponseTypes: []string{"code"}}, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -311,31 +295,10 @@ func TestNewAuthorizeRequest(t *testing.T) { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) }, }, - /* code gen fails */ - { - desc: "code gen fails", - conf: &Fosite{Store: store, AuthorizeCodeGenerator: gen, AllowedResponseTypes: []string{"code"}}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code"}, - "state": []string{"strong-state"}, - }, - expectedError: ErrServerError, - mock: func() { - gen.EXPECT().Generate().Return(nil, errors.New("")) - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, /* success case */ { desc: "should pass", - conf: &Fosite{ - Store: store, - AuthorizeCodeGenerator: gen, - AllowedResponseTypes: []string{"code", "token"}, - Lifetime: 3600, - }, + conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": []string{"http://foo.bar/cb"}, "client_id": []string{"1234"}, @@ -344,20 +307,18 @@ func TestNewAuthorizeRequest(t *testing.T) { "scope": []string{"foo bar"}, }, mock: func() { - gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) }, - expect: &AuthorizeRequester{ + expect: &AuthorizeRequest{ RedirectURI: redir, Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, State: "strong-state", Scopes: []string{"foo", "bar"}, - ExpiresIn: 3600, - Code: &generator.Token{Key: "foo", Signature: "bar"}, }, }, } { + t.Logf("Joining test case %d", k) c.mock() if c.r == nil { c.r = &http.Request{Header: http.Header{}} @@ -370,7 +331,10 @@ func TestNewAuthorizeRequest(t *testing.T) { assert.Equal(t, c.expectedError == nil, err == nil, "%d: %s\n%s", k, c.desc, err) if c.expectedError != nil { assert.Equal(t, err.Error(), c.expectedError.Error(), "%d: %s\n%s", k, c.desc, err) + } else { + pkg.AssertObjectKeysEqual(t, c.expect, ar, "ResponseTypes", "Scopes", "Client", "RedirectURI", "State") + assert.NotNil(t, ar.GetRequestedAt()) } - assert.Equal(t, c.expect, ar, "%d: %s\n", k, c.desc) + t.Logf("Passed test case %d", k) } } diff --git a/client/client.go b/client/client.go index 583c5783..247e2511 100644 --- a/client/client.go +++ b/client/client.go @@ -9,22 +9,19 @@ type Client interface { // CompareSecret compares a secret with the stored one (e.g. a hash) and returns true if // the secrets match. - CompareSecretWith(secret string) bool + CompareSecretWith(secret []byte) bool + + // GetHashedSecret returns the hashed secret as it is stored in the store. + GetHashedSecret() []byte // Returns the client's allowed redirect URIs. GetRedirectURIs() []string - - // IsImplicitGrantAllowed() bool - - // IsUserPasswordGrantAllowed() bool - - // IsClientGrantAllowed() bool } // DefaultClient is a simple default implementation of the Client interface. type SecureClient struct { ID string `json:"id"` - Secret string `json:"secret"` + Secret []byte `json:"secret"` RedirectURIs []string `json:"redirectURIs"` Hasher hash.Hasher `json:"-"` } @@ -33,10 +30,14 @@ func (c *SecureClient) GetID() string { return c.ID } -func (c *SecureClient) CompareSecretWith(secret string) bool { - return c.Hasher.Compare([]byte(c.Secret), []byte(secret)) == nil +func (c *SecureClient) CompareSecretWith(secret []byte) bool { + return c.Hasher.Compare(c.Secret, secret) == nil } func (c *SecureClient) GetRedirectURIs() []string { return c.RedirectURIs } + +func (c *SecureClient) GetHashedSecret() []byte { + return c.Secret +} diff --git a/client/client_test.go b/client/client_test.go index 342bba7e..7eead5b5 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -11,12 +11,13 @@ func TestSecureClient(t *testing.T) { secret, _ := hasher.Hash([]byte("foo")) sc := &SecureClient{ ID: "1", - Secret: string(secret), + Secret: secret, RedirectURIs: []string{"foo", "bar"}, Hasher: hasher, } assert.Equal(t, sc.ID, sc.GetID()) assert.Equal(t, sc.RedirectURIs, sc.GetRedirectURIs()) - assert.True(t, sc.CompareSecretWith("foo")) - assert.False(t, sc.CompareSecretWith("bar")) + assert.True(t, sc.CompareSecretWith([]byte("foo"))) + assert.False(t, sc.CompareSecretWith([]byte("bar"))) + assert.Equal(t, sc.Secret, sc.GetHashedSecret()) } diff --git a/enigma/challenge_test.go b/enigma/challenge_test.go index 58b8a2b1..8ca5a858 100644 --- a/enigma/challenge_test.go +++ b/enigma/challenge_test.go @@ -15,7 +15,7 @@ func TestChallengeToString(t *testing.T) { func TestChallengeFromString(t *testing.T) { ac := new(Challenge) - for _, c := range [][]string{ + for k, c := range [][]string{ {"foo.bar", "foo", "bar"}, {"foo.", "", ""}, {"foo", "", ""}, @@ -24,5 +24,6 @@ func TestChallengeFromString(t *testing.T) { ac.FromString(c[0]) assert.Equal(t, c[1], ac.Key) assert.Equal(t, c[2], ac.Signature) + t.Logf("Passed test case %d", k) } } diff --git a/enigma/crypto_test.go b/enigma/crypto_test.go index 8390fe53..b66e79f3 100644 --- a/enigma/crypto_test.go +++ b/enigma/crypto_test.go @@ -53,7 +53,7 @@ func TestValidateSignatureRejects(t *testing.T) { GlobalSecret: []byte("12345678901234567890"), } token := new(Challenge) - for _, c := range []string{ + for k, c := range []string{ "", " ", "foo.bar", @@ -63,5 +63,6 @@ func TestValidateSignatureRejects(t *testing.T) { token.FromString(c) err = cg.ValidateChallenge([]byte("09876543210987654321"), token) assert.NotNil(t, err, "%s", err) + t.Logf("Passed test case %d", k) } } diff --git a/generator/generator.go b/generator/generator.go deleted file mode 100644 index e695fb95..00000000 --- a/generator/generator.go +++ /dev/null @@ -1,52 +0,0 @@ -package generator - -import "strings" - -// Token represents an authorize code. -type Token struct { - // Key is the code's key - Key string - - // Signature is the key's hashed signature - Signature string -} - -// FromString extracts key and signature from ".". -func (a *Token) FromString(data string) { - a.Key = "" - a.Signature = "" - - if data == "" { - return - } - - parts := strings.Split(data, ".") - if len(parts) != 2 { - return - } - - key := strings.TrimSpace(parts[0]) - sig := strings.TrimSpace(parts[1]) - if key == "" || sig == "" { - return - } - - a.Key = key - a.Signature = sig - return -} - -// String will return the authorize code as ".". -func (a *Token) String() string { - return a.Key + "." + a.Signature -} - -// Generator provides a set of methods to create access, refresh and authorize tokens. -type Generator interface { - // Generate generates a opaque and signed token. - // RFC6749 does not require tokens to be opaque, but it is considered best practice. - Generate() (*Token, error) - - // ValidateSignature verifies that the tokens key matches the tokens signature. - ValidateSignature(token *Token) error -} diff --git a/handler.go b/handler.go index 9deda915..6182d8cf 100644 --- a/handler.go +++ b/handler.go @@ -4,7 +4,6 @@ import ( "errors" "golang.org/x/net/context" "net/http" - "net/url" ) // ErrInvalidResponseType is thrown by a ResponseTypeHandler if it is not responsible for handling the authorize request. @@ -15,8 +14,17 @@ var ErrNoResponseTypeHandlerFound = errors.New("None of the handler's are able t type ResponseTypeHandler interface { // HandleResponseType handles an authorize request. To extend the handler's capabilities, the http request - // is passed along, if further information retrieval is required. + // is passed along, if further information retrieval is required. If HandleResponseType fails, the handler + // implementation MUST return ErrInvalidResponseType. // - // If HandleResponseType fails, the handler implementation MUST return ErrInvalidResponseType. - HandleResponseType(context.Context, *AuthorizeResponder, AuthorizeRequester, http.Request, session interface{}) error + // HandleResponseType should implement: + // * https://tools.ietf.org/html/rfc6749#section-3.1.1 + // response_type REQUIRED. + // The value MUST be one of "code" for requesting an + // authorization code as described by Section 4.1.1, "token" for + // requesting an access token (implicit grant) as described by + // Section 4.2.1, or a registered extension value as described by Section 8.4. + // + // HandleResponseType could also implement additional things like open id connect spec. + HandleResponseType(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error } diff --git a/handler_test.go b/handler_test.go index 64118744..5ae8df33 100644 --- a/handler_test.go +++ b/handler_test.go @@ -13,20 +13,30 @@ import ( var arbitraryError = errors.New("") +// Should pass: +// +// * https://tools.ietf.org/html/rfc6749#section-3.1.1 +// response_type REQUIRED. +// The value MUST be one of "code" for requesting an +// authorization code as described by Section 4.1.1, "token" for +// requesting an access token (implicit grant) as described by +// Section 4.2.1, or a registered extension value as described by Section 8.4. +// +// * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#rnc func TestNewAuthorizeResponse(t *testing.T) { ctrl := gomock.NewController(t) rths := []*MockResponseTypeHandler{ NewMockResponseTypeHandler(ctrl), NewMockResponseTypeHandler(ctrl), - NewMockResponseTypeHandler(ctrl), } + req := NewMockAuthorizeRequester(ctrl) defer ctrl.Finish() for k, c := range []struct { handlers []ResponseTypeHandler mock func() expectsError error - expects *AuthorizeResponder + expects AuthorizeResponder }{ { handlers: []ResponseTypeHandler{ @@ -54,10 +64,11 @@ func TestNewAuthorizeResponse(t *testing.T) { o := &Fosite{ ResponseTypeHandlers: c.handlers, } - resp, err := o.NewAuthorizeResponse(context.Background(), &AuthorizeRequester{}, &http.Request{}) + resp, err := o.NewAuthorizeResponse(context.Background(), req, &http.Request{}, nil) require.Equal(t, c.expectsError, err, "%d: %s", k, err) if err != nil { require.Equal(t, c.expects, resp) } + t.Logf("Passed test case %d", k) } } diff --git a/helper.go b/helper.go index e9e8c9d1..31b8541d 100644 --- a/helper.go +++ b/helper.go @@ -1,22 +1,10 @@ package fosite import ( - "net/url" "strings" ) -func areResponseTypesValid(c *Fosite, responseTypes []string) bool { - if len(responseTypes) < 1 { - return false - } - for _, responseType := range responseTypes { - if !StringInSlice(responseType, c.AllowedResponseTypes) { - return false - } - } - return true -} - +// StringInSlice returns true if needle exists in haystack func StringInSlice(needle string, haystack []string) bool { for _, b := range haystack { if b == needle { @@ -35,18 +23,3 @@ func removeEmpty(args []string) (ret []string) { } return } - -// rfc6749 3.1.2. Redirection Endpoint -// "The redirection endpoint URI MUST be an absolute URI as defined by [RFC3986] Section 4.3" -func validateURL(rawurl string) (purl *url.URL, _ bool) { - purl, err := url.Parse(rawurl) - if err != nil { - return nil, false - } else if purl.Host == "" { - return nil, false - } else if purl.Fragment != "" { - // "The endpoint URI MUST NOT include a fragment component." - return nil, false - } - return purl, true -} diff --git a/helper_test.go b/helper_test.go new file mode 100644 index 00000000..6fa9ef94 --- /dev/null +++ b/helper_test.go @@ -0,0 +1,24 @@ +package fosite + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestStringInSlice(t *testing.T) { + for k, c := range []struct { + needle string + haystack []string + ok bool + }{ + {needle: "foo", haystack: []string{"foo", "bar"}, ok: true}, + {needle: "bar", haystack: []string{"foo", "bar"}, ok: true}, + {needle: "baz", haystack: []string{"foo", "bar"}, ok: false}, + {needle: "foo", haystack: []string{"bar"}, ok: false}, + {needle: "bar", haystack: []string{"bar"}, ok: true}, + {needle: "foo", haystack: []string{}, ok: false}, + } { + assert.Equal(t, c.ok, StringInSlice(c.needle, c.haystack), "%d", k) + t.Logf("Passed test case %d", k) + } +} diff --git a/internal/code_storage.go b/internal/code_storage.go new file mode 100644 index 00000000..1d91c638 --- /dev/null +++ b/internal/code_storage.go @@ -0,0 +1,40 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: storage.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" +) + +// Mock of CodeResponseTypeStorage interface +type MockCodeResponseTypeStorage struct { + ctrl *gomock.Controller + recorder *_MockCodeResponseTypeStorageRecorder +} + +// Recorder for MockCodeResponseTypeStorage (not exported) +type _MockCodeResponseTypeStorageRecorder struct { + mock *MockCodeResponseTypeStorage +} + +func NewMockCodeResponseTypeStorage(ctrl *gomock.Controller) *MockCodeResponseTypeStorage { + mock := &MockCodeResponseTypeStorage{ctrl: ctrl} + mock.recorder = &_MockCodeResponseTypeStorageRecorder{mock} + return mock +} + +func (_m *MockCodeResponseTypeStorage) EXPECT() *_MockCodeResponseTypeStorageRecorder { + return _m.recorder +} + +func (_m *MockCodeResponseTypeStorage) StoreAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { + ret := _m.ctrl.Call(_m, "StoreAuthorizeCodeSession", code, authorizeRequest, extra) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockCodeResponseTypeStorageRecorder) StoreAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreAuthorizeCodeSession", arg0, arg1, arg2) +} diff --git a/internal/enigma.go b/internal/enigma.go new file mode 100644 index 00000000..7aa19d5c --- /dev/null +++ b/internal/enigma.go @@ -0,0 +1,51 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: enigma.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite/enigma" +) + +// Mock of Enigma interface +type MockEnigma struct { + ctrl *gomock.Controller + recorder *_MockEnigmaRecorder +} + +// Recorder for MockEnigma (not exported) +type _MockEnigmaRecorder struct { + mock *MockEnigma +} + +func NewMockEnigma(ctrl *gomock.Controller) *MockEnigma { + mock := &MockEnigma{ctrl: ctrl} + mock.recorder = &_MockEnigmaRecorder{mock} + return mock +} + +func (_m *MockEnigma) EXPECT() *_MockEnigmaRecorder { + return _m.recorder +} + +func (_m *MockEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { + ret := _m.ctrl.Call(_m, "GenerateChallenge", secret) + ret0, _ := ret[0].(*Challenge) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockEnigmaRecorder) GenerateChallenge(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GenerateChallenge", arg0) +} + +func (_m *MockEnigma) ValidateChallenge(secret []byte, challenge *Challenge) error { + ret := _m.ctrl.Call(_m, "ValidateChallenge", secret, challenge) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockEnigmaRecorder) ValidateChallenge(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "ValidateChallenge", arg0, arg1) +} diff --git a/internal/generator.go b/internal/generator.go deleted file mode 100644 index 1e948ec4..00000000 --- a/internal/generator.go +++ /dev/null @@ -1,51 +0,0 @@ -// Automatically generated by MockGen. DO NOT EDIT! -// Source: generator/generator.go - -package internal - -import ( - gomock "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite/generator" -) - -// Mock of Generator interface -type MockGenerator struct { - ctrl *gomock.Controller - recorder *_MockGeneratorRecorder -} - -// Recorder for MockGenerator (not exported) -type _MockGeneratorRecorder struct { - mock *MockGenerator -} - -func NewMockGenerator(ctrl *gomock.Controller) *MockGenerator { - mock := &MockGenerator{ctrl: ctrl} - mock.recorder = &_MockGeneratorRecorder{mock} - return mock -} - -func (_m *MockGenerator) EXPECT() *_MockGeneratorRecorder { - return _m.recorder -} - -func (_m *MockGenerator) Generate() (*Token, error) { - ret := _m.ctrl.Call(_m, "Generate") - ret0, _ := ret[0].(*Token) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -func (_mr *_MockGeneratorRecorder) Generate() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "Generate") -} - -func (_m *MockGenerator) ValidateSignature(token *Token) error { - ret := _m.ctrl.Call(_m, "ValidateSignature", token) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockGeneratorRecorder) ValidateSignature(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "ValidateSignature", arg0) -} diff --git a/internal/handler.go b/internal/handler.go index a71c4194..70565d23 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: oauth2.go +// Source: handler.go package internal @@ -31,8 +31,8 @@ func (_m *MockResponseTypeHandler) EXPECT() *_MockResponseTypeHandlerRecorder { return _m.recorder } -func (_m *MockResponseTypeHandler) HandleResponseType(_param0 context.Context, _param1 *AuthorizeResponder, _param2 AuthorizeRequester, _param3 http.Request, _param4 *Fosite) error { - ret := _m.ctrl.Call(_m, "HandleResponseType", _param0, _param1, _param2, _param3, _param4) +func (_m *MockResponseTypeHandler) HandleResponseType(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error { + ret := _m.ctrl.Call(_m, "HandleResponseType", ctx, responder, requester, req, session) ret0, _ := ret[0].(error) return ret0 } diff --git a/internal/request.go b/internal/request.go new file mode 100644 index 00000000..44b1605e --- /dev/null +++ b/internal/request.go @@ -0,0 +1,103 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: request.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/client" + url "net/url" + time "time" +) + +// Mock of AuthorizeRequester interface +type MockAuthorizeRequester struct { + ctrl *gomock.Controller + recorder *_MockAuthorizeRequesterRecorder +} + +// Recorder for MockAuthorizeRequester (not exported) +type _MockAuthorizeRequesterRecorder struct { + mock *MockAuthorizeRequester +} + +func NewMockAuthorizeRequester(ctrl *gomock.Controller) *MockAuthorizeRequester { + mock := &MockAuthorizeRequester{ctrl: ctrl} + mock.recorder = &_MockAuthorizeRequesterRecorder{mock} + return mock +} + +func (_m *MockAuthorizeRequester) EXPECT() *_MockAuthorizeRequesterRecorder { + return _m.recorder +} + +func (_m *MockAuthorizeRequester) GetResponseTypes() Arguments { + ret := _m.ctrl.Call(_m, "GetResponseTypes") + ret0, _ := ret[0].(Arguments) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetResponseTypes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetResponseTypes") +} + +func (_m *MockAuthorizeRequester) GetClient() Client { + ret := _m.ctrl.Call(_m, "GetClient") + ret0, _ := ret[0].(Client) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetClient() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient") +} + +func (_m *MockAuthorizeRequester) GetScopes() Arguments { + ret := _m.ctrl.Call(_m, "GetScopes") + ret0, _ := ret[0].(Arguments) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetScopes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetScopes") +} + +func (_m *MockAuthorizeRequester) GetState() string { + ret := _m.ctrl.Call(_m, "GetState") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetState() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetState") +} + +func (_m *MockAuthorizeRequester) GetRequestedAt() time.Time { + ret := _m.ctrl.Call(_m, "GetRequestedAt") + ret0, _ := ret[0].(time.Time) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetRequestedAt() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRequestedAt") +} + +func (_m *MockAuthorizeRequester) GetRedirectURI() *url.URL { + ret := _m.ctrl.Call(_m, "GetRedirectURI") + ret0, _ := ret[0].(*url.URL) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetRedirectURI() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRedirectURI") +} + +func (_m *MockAuthorizeRequester) IsRedirectURIValid() bool { + ret := _m.ctrl.Call(_m, "IsRedirectURIValid") + ret0, _ := ret[0].(bool) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) IsRedirectURIValid() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "IsRedirectURIValid") +} diff --git a/internal/response.go b/internal/response.go new file mode 100644 index 00000000..4e81d83e --- /dev/null +++ b/internal/response.go @@ -0,0 +1,85 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: response.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + http "net/http" + url "net/url" +) + +// Mock of AuthorizeResponder interface +type MockAuthorizeResponder struct { + ctrl *gomock.Controller + recorder *_MockAuthorizeResponderRecorder +} + +// Recorder for MockAuthorizeResponder (not exported) +type _MockAuthorizeResponderRecorder struct { + mock *MockAuthorizeResponder +} + +func NewMockAuthorizeResponder(ctrl *gomock.Controller) *MockAuthorizeResponder { + mock := &MockAuthorizeResponder{ctrl: ctrl} + mock.recorder = &_MockAuthorizeResponderRecorder{mock} + return mock +} + +func (_m *MockAuthorizeResponder) EXPECT() *_MockAuthorizeResponderRecorder { + return _m.recorder +} + +func (_m *MockAuthorizeResponder) GetHeader() http.Header { + ret := _m.ctrl.Call(_m, "GetHeader") + ret0, _ := ret[0].(http.Header) + return ret0 +} + +func (_mr *_MockAuthorizeResponderRecorder) GetHeader() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetHeader") +} + +func (_m *MockAuthorizeResponder) AddHeader(key string, value string) { + _m.ctrl.Call(_m, "AddHeader", key, value) +} + +func (_mr *_MockAuthorizeResponderRecorder) AddHeader(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "AddHeader", arg0, arg1) +} + +func (_m *MockAuthorizeResponder) GetQuery() url.Values { + ret := _m.ctrl.Call(_m, "GetQuery") + ret0, _ := ret[0].(url.Values) + return ret0 +} + +func (_mr *_MockAuthorizeResponderRecorder) GetQuery() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetQuery") +} + +func (_m *MockAuthorizeResponder) AddQuery(key string, value string) { + _m.ctrl.Call(_m, "AddQuery", key, value) +} + +func (_mr *_MockAuthorizeResponderRecorder) AddQuery(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "AddQuery", arg0, arg1) +} + +func (_m *MockAuthorizeResponder) GetFragment() url.Values { + ret := _m.ctrl.Call(_m, "GetFragment") + ret0, _ := ret[0].(url.Values) + return ret0 +} + +func (_mr *_MockAuthorizeResponderRecorder) GetFragment() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetFragment") +} + +func (_m *MockAuthorizeResponder) AddFragment(key string, value string) { + _m.ctrl.Call(_m, "AddFragment", key, value) +} + +func (_mr *_MockAuthorizeResponderRecorder) AddFragment(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "AddFragment", arg0, arg1) +} diff --git a/internal/storage.go b/internal/storage.go index 77ece57f..a88e8174 100644 --- a/internal/storage.go +++ b/internal/storage.go @@ -5,7 +5,6 @@ package internal import ( gomock "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/client" ) @@ -40,23 +39,3 @@ func (_m *MockStorage) GetClient(id string) (Client, error) { func (_mr *_MockStorageRecorder) GetClient(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient", arg0) } - -func (_m *MockStorage) StoreAuthorizeSession(session *AuthorizeSession) error { - ret := _m.ctrl.Call(_m, "StoreAuthorizeSession", session) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockStorageRecorder) StoreAuthorizeSession(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreAuthorizeSession", arg0) -} - -func (_m *MockStorage) GetAuthorizeSession(signature string, session *AuthorizeSession) error { - ret := _m.ctrl.Call(_m, "GetAuthorizeSession", signature, session) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockStorageRecorder) GetAuthorizeSession(arg0, arg1 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeSession", arg0, arg1) -} diff --git a/oauth2.go b/oauth2.go index 56a7185a..6be22956 100644 --- a/oauth2.go +++ b/oauth2.go @@ -1,8 +1,8 @@ package fosite import ( - "net/http" "golang.org/x/net/context" + "net/http" ) // OAuth2Provider @@ -24,7 +24,7 @@ type OAuth2Provider interface { // // Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle // the given request and an arbitrary error if an error occurred - NewAuthorizeResponse(context.Context, *http.Request, AuthorizeRequest, session interface{}) (AuthorizeResponder, error) + NewAuthorizeResponse(ctx context.Context, req *http.Request, ar AuthorizeRequest, session interface{}) (AuthorizeResponder, error) // WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid // redirect uri was given. Implements rfc6749#section-4.1.2.1 @@ -37,6 +37,6 @@ type OAuth2Provider interface { // Fosite ships all the various oauth2 helpers like NewAuthorizeRequest type Fosite struct { - Store Storage - ResponseTypeHandlers []ResponseTypeHandler + Store Storage + ResponseTypeHandlers []ResponseTypeHandler } diff --git a/plugin/code/code.go b/plugin/code/code.go index d0dcb558..a9b82b4b 100644 --- a/plugin/code/code.go +++ b/plugin/code/code.go @@ -3,7 +3,7 @@ package code import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite" - "github.com/ory-am/fosite/generator" + "github.com/ory-am/fosite/enigma" "golang.org/x/net/context" "net/http" ) @@ -11,7 +11,7 @@ import ( // CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 type CodeResponseTypeHandler struct { - Generator generator.Generator + Generator enigma.Enigma Store CodeResponseTypeStorage } @@ -19,7 +19,7 @@ func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp Aut // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code - code, err := c.Generator.Generate() + code, err := c.Generator.GenerateChallenge(ar.GetClient().GetHashedSecret()) if err != nil { return errors.Wrap(err, 1) } @@ -28,7 +28,7 @@ func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp Aut return errors.Wrap(err, 1) } - resp.AddArgument("code", code) + resp.AddQuery("code", code.String()) return nil } diff --git a/plugin/token/token.go b/plugin/token/token.go index 4d14312e..65937f1a 100644 --- a/plugin/token/token.go +++ b/plugin/token/token.go @@ -2,32 +2,18 @@ package authorize import ( "camlistore.org/pkg/context" - "github.com/go-errors/errors" . "github.com/ory-am/fosite" - "github.com/ory-am/fosite/generator" "net/http" ) // CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 type CodeResponseTypeHandler struct { - Generator generator.Generator } func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token - if ar.GetResponseTypes().Has("code") { - // Generate the code - code, err := c.Generator.Generate() - if err != nil { - return errors.Wrap(err, 1) - } - - if err := c.Store.StoreAuthorizeCodeSession(code.Signature, ar, session); err != nil { - return errors.Wrap(err, 1) - } - - resp.AddArgument("code", code) + if ar.GetResponseTypes().Has("token") { return nil } diff --git a/rand/bytes.go b/rand/bytes.go index e3f33a4d..d70d52e9 100644 --- a/rand/bytes.go +++ b/rand/bytes.go @@ -6,18 +6,18 @@ import ( ) // RandomBytes returns n random bytes by reading from crypto/rand.Reader -func RandomBytes(entropy, tries int) ([]byte, error) { - bytes := make([]byte, entropy) +func RandomBytes(n, tries int) ([]byte, error) { + bytes := make([]byte, n) - var n int + var z int var err error for i := 0; i < tries; i++ { - n, err = rand.Reader.Read(bytes) + z, err = rand.Reader.Read(bytes) if err != nil { return nil, errors.Wrap(err, 0) } } - if n < entropy { + if z < n { return nil, errors.Errorf("Could not read enough data with %d tries", tries) } diff --git a/request.go b/request.go index a4b8b90c..59bd4be6 100644 --- a/request.go +++ b/request.go @@ -10,9 +10,11 @@ type AuthorizeRequester interface { GetResponseTypes() Arguments GetClient() Client GetScopes() Arguments - GetRedirectURI() *url.URL GetState() string GetRequestedAt() time.Time + + GetRedirectURI() *url.URL + IsRedirectURIValid() bool } // Authorize request information @@ -25,6 +27,16 @@ type AuthorizeRequest struct { RequestedAt time.Time } +func (d *AuthorizeRequest) IsRedirectURIValid() bool { + // Validate redirect uri + raw := d.GetRedirectURI().String() + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(raw, d.GetClient()) + if err != nil { + return false + } + return IsValidRedirectURI(redirectURI) +} + func (d *AuthorizeRequest) GetResponseTypes() Arguments { return d.ResponseTypes } @@ -37,7 +49,7 @@ func (d *AuthorizeRequest) GetScopes() Arguments { return d.Scopes } -func (d *AuthorizeRequest) GetState() Arguments { +func (d *AuthorizeRequest) GetState() string { return d.State } diff --git a/response.go b/response.go index 6d6efdbd..70227fc1 100644 --- a/response.go +++ b/response.go @@ -10,18 +10,39 @@ type AuthorizeResponder interface { GetHeader() http.Header AddHeader(key, value string) - GetArguments() url.Values - AddArgument(key, value string) + GetQuery() url.Values + AddQuery(key, value string) + + GetFragment() url.Values + AddFragment(key, value string) } type AuthorizeResponse struct { - Header http.Header - Arguments url.Values + Header *http.Header + Query *url.Values + Fragment *url.Values } func (a *AuthorizeResponse) GetHeader() http.Header { - return a.Header + return *a.Header +} + +func (a *AuthorizeResponse) AddHeader(key, value string) { + a.Header.Add(key, value) +} + +func (a *AuthorizeResponse) GetQuery() url.Values { + return *a.Query } -func (a *AuthorizeResponse) GetArguments() url.Values { - return a.Arguments + +func (a *AuthorizeResponse) GetFragment() url.Values { + return *a.Fragment +} + +func (a *AuthorizeResponse) AddQuery(key, value string) { + a.Query.Add(key, value) +} + +func (a *AuthorizeResponse) AddFragment(key, value string) { + a.Fragment.Add(key, value) } diff --git a/storage.go b/storage.go index e739553e..7e54d338 100644 --- a/storage.go +++ b/storage.go @@ -9,41 +9,4 @@ type Storage interface { // GetClient loads the client by its ID or returns an error // if the client does not exist or another error occurred. GetClient(id string) (Client, error) - - // StoreAuthorizeSession persists an authorize request session in the store. - StoreAuthorizeSession(session *AuthorizeSession) error - - // GetAuthorizeSession finds an authorize request session in the store by the code signature. - GetAuthorizeSession(signature string, session *AuthorizeSession) error - - // SaveAuthorize saves authorize data. - // StoreAuthorizeRequest(*AuthorizeData) error - - // LoadAuthorize looks up AuthorizeData by a code. - // Client information MUST be loaded together. - // Optionally can return error if expired. - // LoadAuthorize(code string) (*AuthorizeData, error) - - // RemoveAuthorize revokes or deletes the authorization code. - // RemoveAuthorize(code string) error - - // SaveAccess writes AccessData. - // If RefreshToken is not blank, it must save in a way that can be loaded using LoadRefresh. - // SaveAccess(*AccessData) error - - // LoadAccess retrieves access data by token. Client information MUST be loaded together. - // AuthorizeData and AccessData DON'T NEED to be loaded if not easily available. - // Optionally can return error if expired. - // LoadAccess(token string) (*AccessData, error) - - // RemoveAccess revokes or deletes an AccessData. - // RemoveAccess(token string) error - - // LoadRefresh retrieves refresh AccessData. Client information MUST be loaded together. - // AuthorizeData and AccessData DON'T NEED to be loaded if not easily available. - // Optionally can return error if expired. - // LoadRefresh(token string) (*AccessData, error) - - // RemoveRefresh revokes or deletes refresh AccessData. - // RemoveRefresh(token string) error } From 9c21afbc38fbd35f951c127beb2623ae4d2590e7 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 18:10:53 +0100 Subject: [PATCH 21/47] docs: updated authorize section --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e1ac3560..1dc47d59 100644 --- a/README.md +++ b/README.md @@ -185,14 +185,21 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // Now is the time to handle the response types // You can use a custom list of response type handlers by setting // oauth2.ResponseTypeHandlers = []fosite.ResponseTypeHandler{} + // + // Each ResponseTypeHandler is responsible for managing his own state data. For example, the code response type + // handler stores the access token and the session data in a database backend and retrieves it later on + // when handling a grant type. + // + // If you use advanced ResponseTypeHandlers it is a good idea to read the README first and check if your + // session object needs to implement any interface. Think of the session as a persistent context + // for the handlers. response, err := oauth2.HandleAuthorizeRequest(ctx, authorizeRequest, r, &mySessionData) if err != nil { oauth2.WriteAuthorizeError(rw, req, err) return } - // The next step is going to persist the session in the database for later use and redirect the - // user agent back to the application demanding access. + // The next step is going to redirect the user by either using implicit or explicit grant or both (for OpenID connect) oauth2.WriteAuthorizeResponse(rw, ar, response) // Done! The client should now have a valid authorize code! From fdba2f7b5bdec0e77faa804066abe1b8895b909e Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Fri, 8 Jan 2016 18:11:56 +0100 Subject: [PATCH 22/47] plugin/token: fix import path --- plugin/token/token.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/token/token.go b/plugin/token/token.go index 65937f1a..589a4969 100644 --- a/plugin/token/token.go +++ b/plugin/token/token.go @@ -1,8 +1,8 @@ package authorize import ( - "camlistore.org/pkg/context" . "github.com/ory-am/fosite" + "golang.org/x/net/context" "net/http" ) From 6df0eca1d74d79e807a77910776ff2249340f103 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 9 Jan 2016 13:23:16 +0100 Subject: [PATCH 23/47] authorize: added tests fragment capabilities to writeresponse --- authorize.go | 24 ++++++++----- authorize_test.go | 92 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 9 deletions(-) diff --git a/authorize.go b/authorize.go index d26a0ed4..97e483af 100644 --- a/authorize.go +++ b/authorize.go @@ -70,25 +70,31 @@ func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (Author func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { redir := ar.GetRedirectURI() + + // Explicit grants q := redir.Query() - args := resp.GetQuery() - for k, _ := range args { - q.Add(k, args.Get(k)) + rq := resp.GetQuery() + for k, _ := range rq { + q.Set(k, rq.Get(k)) } redir.RawQuery = q.Encode() - header := resp.GetHeader() - for k, v := range header { - for _, vv := range v { - rw.Header().Add(k, vv) - } + + // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... + wh := rw.Header() + rh := resp.GetHeader() + for k, _ := range rh { + wh.Set(k, rh.Get(k)) } + // Implicit grants + redir.Fragment = resp.GetFragment().Encode() + // https://tools.ietf.org/html/rfc6749#section-4.1.1 // When a decision is established, the authorization server directs the // user-agent to the provided client redirection URI using an HTTP // redirection response, or by other means available to it via the // user-agent. - rw.Header().Set("Location", ar.GetRedirectURI().String()) + wh.Set("Location", redir.String()) rw.WriteHeader(http.StatusFound) } diff --git a/authorize_test.go b/authorize_test.go index fb668b49..2632f1dd 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -338,3 +338,95 @@ func TestNewAuthorizeRequest(t *testing.T) { t.Logf("Passed test case %d", k) } } + +func TestWriteAuthorizeResponse(t *testing.T) { + oauth2 := &Fosite{} + header := http.Header{} + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + ar := NewMockAuthorizeRequester(ctrl) + resp := NewMockAuthorizeResponder(ctrl) + defer ctrl.Finish() + + for k, c := range []struct { + setup func() + expect func() + }{ + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "X-Bar": {"baz"}, + "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + } { + t.Logf("Starting test case %d", k) + c.setup() + oauth2.WriteAuthorizeResponse(rw, ar, resp) + c.expect() + header = http.Header{} + t.Logf("Passed test case %d", k) + } +} From c6dcb90ccbd1d7a179a601e0e6d46cc1004cde92 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 9 Jan 2016 15:25:45 +0100 Subject: [PATCH 24/47] all: finalized auth endpoint, added tests, added integration tests --- README.md | 4 +- authorize.go | 6 +- authorize_integration_test.go | 103 ------------ enigma/{crypto.go => hmacsha.go} | 9 +- enigma/{crypto_test.go => hmacsha_test.go} | 6 +- handler_test.go | 2 +- internal/client.go | 69 ++++++++ internal/code_storage.go | 28 +++- oauth2.go | 2 +- oauth2_test.go | 176 +++++++++++++++++++++ plugin/code/code.go | 4 +- plugin/code/storage.go | 6 +- request.go | 9 +- request_test.go | 86 ++++++++++ response.go | 8 + response_test.go | 17 ++ 16 files changed, 410 insertions(+), 125 deletions(-) delete mode 100644 authorize_integration_test.go rename enigma/{crypto.go => hmacsha.go} (90%) rename enigma/{crypto_test.go => hmacsha_test.go} (96%) create mode 100644 internal/client.go create mode 100644 oauth2_test.go create mode 100644 request_test.go create mode 100644 response_test.go diff --git a/README.md b/README.md index 1dc47d59..085dd97b 100644 --- a/README.md +++ b/README.md @@ -193,14 +193,14 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // If you use advanced ResponseTypeHandlers it is a good idea to read the README first and check if your // session object needs to implement any interface. Think of the session as a persistent context // for the handlers. - response, err := oauth2.HandleAuthorizeRequest(ctx, authorizeRequest, r, &mySessionData) + response, err := oauth2.NewAuthorizeResponse(ctx, req, authorizeRequest, &mySessionData) if err != nil { oauth2.WriteAuthorizeError(rw, req, err) return } // The next step is going to redirect the user by either using implicit or explicit grant or both (for OpenID connect) - oauth2.WriteAuthorizeResponse(rw, ar, response) + oauth2.WriteAuthorizeResponse(rw, authorizeRequest, response) // Done! The client should now have a valid authorize code! } diff --git a/authorize.go b/authorize.go index 97e483af..a247c6b1 100644 --- a/authorize.go +++ b/authorize.go @@ -102,7 +102,7 @@ func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest rfcerr := ErrorToRFC6749Error(err) if !ar.IsRedirectURIValid() { - pkg.WriteJSON(rw, rfcerr) + pkg.WriteIndentJSON(rw, rfcerr) return } @@ -116,8 +116,8 @@ func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest rw.WriteHeader(http.StatusFound) } -func (o *Fosite) NewAuthorizeResponse(ctx context.Context, ar AuthorizeRequester, r *http.Request, session interface{}) (AuthorizeResponder, error) { - var resp = new(AuthorizeResponse) +func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { + var resp = NewAuthorizeResponse() var err error var found bool diff --git a/authorize_integration_test.go b/authorize_integration_test.go deleted file mode 100644 index 25244f84..00000000 --- a/authorize_integration_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package fosite_test - -import ( - /*"github.com/golang/mock/gomock" - . "github.com/ory-am/fosite" - . "github.com/ory-am/fosite/client" - . "github.com/ory-am/fosite/internal" - "github.com/stretchr/testify/require" - "golang.org/x/net/context" - "net/http" - "net/url"*/ - "testing" -) - -func TestAuthorizeWorkflow(t *testing.T) { - /*ctrl := gomock.NewController(t) - store := NewMockStorage(ctrl) - gen := NewMockGenerator(ctrl) - defer ctrl.Finish() - - redir, _ := url.Parse("http://foo.bar/cb") - - for k, c := range []struct { - desc string - conf *Fosite - r *http.Request - query url.Values - expectedError error - mock func() - expect *AuthorizeRequester - }{ - { - desc: "should pass", - conf: &Fosite{ - Store: store, - AuthorizeCodeGenerator: gen, - AllowedResponseTypes: []string{"code", "token"}, - Lifetime: 3600, - }, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code token"}, - "state": []string{"strong-state"}, - "scope": []string{"foo bar"}, - }, - mock: func() { - gen.EXPECT().Generate().Return(&generator.Token{Key: "foo", Signature: "bar"}, nil) - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - expect: &AuthorizeRequester{ - RedirectURI: redir, - Client: &SecureClient{ID: "1234", RedirectURIs: []string{"http://foo.bar/cb"}}, - ResponseTypes: []string{"code", "token"}, - State: "strong-state", - Scopes: []string{"foo", "bar"}, - ExpiresIn: 3600, - Code: &generator.Token{Key: "foo", Signature: "bar"}, - }, - }, - } { - c.mock() - if c.r == nil { - c.r = &http.Request{Header: http.Header{}} - if c.query != nil { - c.r.URL = &url.URL{RawQuery: c.query.Encode()} - } - } - - // equals to: c.conf = NewDefaultOAuth2(store) - c.conf.Store = store - authorizeRequest, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) - require.Nil(t, err, "%d: %s", k, err) - - userID := "user-id" - _ = NewAuthorizeSessionSQL(authorizeRequest, userID) - - // if err := store.StoreAuthorizeSession(sess); err != nil { - // return err - // } - - //response := NewAuthorizeResponse() - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // err = alsoHandleMyCustomResponseType(authorizeRequest, response, "fancyArguments", 1234) - // - // or - // - // this approach would make it possible to check if all response types could be served or not - // additionally, a callback for FinishAccessRequest could be provided - // - // response = &AuthorizeResponse{} - // oauth2.RegisterResponseTypeHandler("custom_type", alsoHandleMyCustomResponseType) - // err = oauth2.HandleResponseTypes(authorizeRequest, response, session) - // **** - - // Almost done! The next step is going to persist the session in the database for later use. - // It is additionally going to output a result based on response_type. - - // ** API not finalized yet ** - // err := oauth2.FinishAuthorizeRequest(rw, response, session) - // **** - }*/ -} diff --git a/enigma/crypto.go b/enigma/hmacsha.go similarity index 90% rename from enigma/crypto.go rename to enigma/hmacsha.go index 57e3317c..cc48717b 100644 --- a/enigma/crypto.go +++ b/enigma/hmacsha.go @@ -9,8 +9,9 @@ import ( "github.com/ory-am/fosite/rand" ) -// CryptoEnigma is the default implementation for generating and validating challenges. -type CryptoEnigma struct { +// HMACSHAEnigma is the default implementation for generating and validating challenges. It uses HMAC-SHA256 to +// generate and validate challenges. +type HMACSHAEnigma struct { AuthCodeEntropy int GlobalSecret []byte } @@ -23,7 +24,7 @@ const minimumSecretLength = 32 // GenerateAuthorizeCode generates a new authorize code or returns an error. set secret // This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. -func (c *CryptoEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { +func (c *HMACSHAEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { if len(secret) < minimumSecretLength/2 || len(c.GlobalSecret) < minimumSecretLength/2 { return nil, errors.New("Secret or GlobalSecret are not strong enough") } @@ -72,7 +73,7 @@ func (c *CryptoEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { // ValidateAuthorizeCodeSignature returns an AuthorizeCode, if the code argument is a valid authorize code // and the signature matches the key. -func (c *CryptoEnigma) ValidateChallenge(secret []byte, t *Challenge) (err error) { +func (c *HMACSHAEnigma) ValidateChallenge(secret []byte, t *Challenge) (err error) { if t.Key == "" || t.Signature == "" { return errors.New("Key and signature must both be not empty") } diff --git a/enigma/crypto_test.go b/enigma/hmacsha_test.go similarity index 96% rename from enigma/crypto_test.go rename to enigma/hmacsha_test.go index b66e79f3..71d3a97e 100644 --- a/enigma/crypto_test.go +++ b/enigma/hmacsha_test.go @@ -7,7 +7,7 @@ import ( ) func TestGenerateFailsWithShortCredentials(t *testing.T) { - cg := CryptoEnigma{ + cg := HMACSHAEnigma{ GlobalSecret: []byte("foo"), } @@ -27,7 +27,7 @@ func TestGenerateFailsWithShortCredentials(t *testing.T) { } func TestGenerate(t *testing.T) { - cg := CryptoEnigma{ + cg := HMACSHAEnigma{ GlobalSecret: []byte("12345678901234567890"), } @@ -49,7 +49,7 @@ func TestGenerate(t *testing.T) { func TestValidateSignatureRejects(t *testing.T) { var err error - cg := CryptoEnigma{ + cg := HMACSHAEnigma{ GlobalSecret: []byte("12345678901234567890"), } token := new(Challenge) diff --git a/handler_test.go b/handler_test.go index 5ae8df33..dd006c7e 100644 --- a/handler_test.go +++ b/handler_test.go @@ -64,7 +64,7 @@ func TestNewAuthorizeResponse(t *testing.T) { o := &Fosite{ ResponseTypeHandlers: c.handlers, } - resp, err := o.NewAuthorizeResponse(context.Background(), req, &http.Request{}, nil) + resp, err := o.NewAuthorizeResponse(context.Background(), &http.Request{}, req, nil) require.Equal(t, c.expectsError, err, "%d: %s", k, err) if err != nil { require.Equal(t, c.expects, resp) diff --git a/internal/client.go b/internal/client.go new file mode 100644 index 00000000..e1bed013 --- /dev/null +++ b/internal/client.go @@ -0,0 +1,69 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: client.go + +package internal + +import ( + gomock "github.com/golang/mock/gomock" +) + +// Mock of Client interface +type MockClient struct { + ctrl *gomock.Controller + recorder *_MockClientRecorder +} + +// Recorder for MockClient (not exported) +type _MockClientRecorder struct { + mock *MockClient +} + +func NewMockClient(ctrl *gomock.Controller) *MockClient { + mock := &MockClient{ctrl: ctrl} + mock.recorder = &_MockClientRecorder{mock} + return mock +} + +func (_m *MockClient) EXPECT() *_MockClientRecorder { + return _m.recorder +} + +func (_m *MockClient) GetID() string { + ret := _m.ctrl.Call(_m, "GetID") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockClientRecorder) GetID() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetID") +} + +func (_m *MockClient) CompareSecretWith(secret []byte) bool { + ret := _m.ctrl.Call(_m, "CompareSecretWith", secret) + ret0, _ := ret[0].(bool) + return ret0 +} + +func (_mr *_MockClientRecorder) CompareSecretWith(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CompareSecretWith", arg0) +} + +func (_m *MockClient) GetHashedSecret() []byte { + ret := _m.ctrl.Call(_m, "GetHashedSecret") + ret0, _ := ret[0].([]byte) + return ret0 +} + +func (_mr *_MockClientRecorder) GetHashedSecret() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetHashedSecret") +} + +func (_m *MockClient) GetRedirectURIs() []string { + ret := _m.ctrl.Call(_m, "GetRedirectURIs") + ret0, _ := ret[0].([]string) + return ret0 +} + +func (_mr *_MockClientRecorder) GetRedirectURIs() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRedirectURIs") +} diff --git a/internal/code_storage.go b/internal/code_storage.go index 1d91c638..8c89edd3 100644 --- a/internal/code_storage.go +++ b/internal/code_storage.go @@ -29,12 +29,32 @@ func (_m *MockCodeResponseTypeStorage) EXPECT() *_MockCodeResponseTypeStorageRec return _m.recorder } -func (_m *MockCodeResponseTypeStorage) StoreAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { - ret := _m.ctrl.Call(_m, "StoreAuthorizeCodeSession", code, authorizeRequest, extra) +func (_m *MockCodeResponseTypeStorage) CreateAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { + ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", code, authorizeRequest, extra) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockCodeResponseTypeStorageRecorder) StoreAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "StoreAuthorizeCodeSession", arg0, arg1, arg2) +func (_mr *_MockCodeResponseTypeStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) +} + +func (_m *MockCodeResponseTypeStorage) GetAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { + ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", code, authorizeRequest, extra) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockCodeResponseTypeStorageRecorder) GetAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1, arg2) +} + +func (_m *MockCodeResponseTypeStorage) DeleteAuthorizeCodeSession(code string) error { + ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", code) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockCodeResponseTypeStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) } diff --git a/oauth2.go b/oauth2.go index 6be22956..3b25984e 100644 --- a/oauth2.go +++ b/oauth2.go @@ -24,7 +24,7 @@ type OAuth2Provider interface { // // Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle // the given request and an arbitrary error if an error occurred - NewAuthorizeResponse(ctx context.Context, req *http.Request, ar AuthorizeRequest, session interface{}) (AuthorizeResponder, error) + NewAuthorizeResponse(ctx context.Context, req *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) // WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid // redirect uri was given. Implements rfc6749#section-4.1.2.1 diff --git a/oauth2_test.go b/oauth2_test.go new file mode 100644 index 00000000..b98aac19 --- /dev/null +++ b/oauth2_test.go @@ -0,0 +1,176 @@ +package fosite_test + +import ( + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/internal" + "net/http" + "testing" + + "errors" + "github.com/golang/mock/gomock" + "github.com/gorilla/mux" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/plugin/code" + "github.com/parnurzeal/gorequest" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/net/context" + goauth2 "golang.org/x/oauth2" + "net/http/httptest" +) + +var clientID = "foo" +var clientSecret = "barbarbarbarbar" +var state = "random-state" +var ts *httptest.Server + +var mockStore *MockStorage +var mockClient *MockClient +var mockPluginCodeStore *MockCodeResponseTypeStorage + +func TestFosite(t *testing.T) { + ctrl := gomock.NewController(t) + mockStore = NewMockStorage(ctrl) + mockClient = NewMockClient(ctrl) + mockPluginCodeStore = NewMockCodeResponseTypeStorage(ctrl) + defer ctrl.Finish() + + codeHandler := &code.CodeResponseTypeHandler{ + Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, + Store: mockPluginCodeStore, + } + oauth2 := &Fosite{ + Store: mockStore, + ResponseTypeHandlers: []ResponseTypeHandler{ + codeHandler, + }, + } + + oauth2TestAuthorizeCodeWorkFlow(oauth2, t, func() { + mockStore = NewMockStorage(ctrl) + mockClient = NewMockClient(ctrl) + mockPluginCodeStore = NewMockCodeResponseTypeStorage(ctrl) + oauth2.Store = mockStore + codeHandler.Store = mockPluginCodeStore + }) +} + +func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refreshMocks func()) { + const workingClientID = "foo" + const workingClientSecret = "secretsecretsecretsecret" + const state = "secure-random-state" + + var workingClientHashedSecret = []byte("$2a$10$rUQDYblu3fytMb9aQ3soh.yKNe.17spWcY9fUkkvI9Nv7U1NJCMV2") + var session = &struct { + UserID string + }{ + UserID: "foo", + } + + router := mux.NewRouter() + router.HandleFunc("/auth", func(rw http.ResponseWriter, req *http.Request) { + ctx := context.Background() + + ar, err := oauth2.NewAuthorizeRequest(ctx, req) + if err != nil { + t.Logf("Request %s failed because %s", ar, err) + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + // Normally, this would be the place where you would check if the user is logged in and gives his consent. + // For this test, let's assume that the user exists, is logged in, and gives his consent... + + response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, session) + if err != nil { + t.Logf("Response %s failed because %s", ar, err) + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + oauth2.WriteAuthorizeResponse(rw, ar, response) + }) + router.HandleFunc("/cb", func(rw http.ResponseWriter, req *http.Request) { + t.Logf("Callback was called: %s", req.URL.String()) + q := req.URL.Query() + if q.Get("code") == "" && q.Get("error") == "" { + assert.NotEmpty(t, q.Get("code")) + assert.NotEmpty(t, q.Get("error")) + } + + if q.Get("code") != "" { + rw.Write([]byte("code: ok")) + } + if q.Get("error") != "" { + rw.Write([]byte("error: " + q.Get("error"))) + } + }) + + ts = httptest.NewServer(router) + defer ts.Close() + + for k, c := range []struct { + conf goauth2.Config + state string + expectBody string + expectStatusCode int + expectPath string + mock func() + }{ + { + conf: goauth2.Config{ + ClientID: clientID, + ClientSecret: clientSecret, + RedirectURL: ts.URL + "/cb", + Endpoint: goauth2.Endpoint{ + AuthURL: ts.URL + "/auth", + }, + }, + state: state, + mock: func() { + mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) + mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecret)).AnyTimes().Return(true) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) + mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) + mockPluginCodeStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + }, + expectStatusCode: http.StatusOK, + expectPath: "/cb", + expectBody: "code: ok", + }, + { + conf: goauth2.Config{ + ClientID: clientID, + ClientSecret: clientSecret, + RedirectURL: ts.URL + "/cb", + Endpoint: goauth2.Endpoint{ + AuthURL: ts.URL + "/auth", + }, + }, + state: state, + mock: func() { + mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(nil, errors.New("foo")) + + mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecret)).AnyTimes().Return(true) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) + mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) + }, + expectStatusCode: http.StatusOK, + expectPath: "/auth", + expectBody: "{\n\t\"name\": \"invalid_client\",\n\t\"description\": \"Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method)\"\n}", + }, + + // TODO add a ton of tests for RFC conform tests. use factories! See https://github.com/ory-am/fosite/issues/13 + } { + refreshMocks() + c.mock() + authurl := c.conf.AuthCodeURL(c.state) + t.Logf("Passed test case %d", k) + req := gorequest.New() + resp, body, errs := req.Get(authurl).End() + require.Len(t, errs, 0, "%s", errs) + assert.Equal(t, c.expectPath, resp.Request.URL.Path) + assert.Equal(t, c.expectBody, body) + assert.Equal(t, c.expectStatusCode, resp.StatusCode) + } +} diff --git a/plugin/code/code.go b/plugin/code/code.go index a9b82b4b..a4896c6f 100644 --- a/plugin/code/code.go +++ b/plugin/code/code.go @@ -15,7 +15,7 @@ type CodeResponseTypeHandler struct { Store CodeResponseTypeStorage } -func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { +func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ *http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code @@ -24,7 +24,7 @@ func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp Aut return errors.Wrap(err, 1) } - if err := c.Store.StoreAuthorizeCodeSession(code.Signature, ar, session); err != nil { + if err := c.Store.CreateAuthorizeCodeSession(code.Signature, ar, session); err != nil { return errors.Wrap(err, 1) } diff --git a/plugin/code/storage.go b/plugin/code/storage.go index 3f611f30..f11e5b5a 100644 --- a/plugin/code/storage.go +++ b/plugin/code/storage.go @@ -3,5 +3,9 @@ package code import "github.com/ory-am/fosite" type CodeResponseTypeStorage interface { - StoreAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error + CreateAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error + + GetAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error + + DeleteAuthorizeCodeSession(code string) error } diff --git a/request.go b/request.go index 59bd4be6..54e75e20 100644 --- a/request.go +++ b/request.go @@ -28,8 +28,15 @@ type AuthorizeRequest struct { } func (d *AuthorizeRequest) IsRedirectURIValid() bool { - // Validate redirect uri + if d.GetRedirectURI() == nil { + return false + } + raw := d.GetRedirectURI().String() + if d.GetClient() == nil { + return false + } + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(raw, d.GetClient()) if err != nil { return false diff --git a/request_test.go b/request_test.go new file mode 100644 index 00000000..3f46ab22 --- /dev/null +++ b/request_test.go @@ -0,0 +1,86 @@ +package fosite + +import ( + "github.com/ory-am/fosite/client" + "github.com/stretchr/testify/assert" + "net/url" + "testing" + "time" +) + +func TestAuthorizeRequest(t *testing.T) { + var urlparse = func(rawurl string) *url.URL { + u, _ := url.Parse(rawurl) + return u + } + + for k, c := range []struct { + ar *AuthorizeRequest + isRedirValid bool + }{ + { + ar: &AuthorizeRequest{}, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + RedirectURI: urlparse("http://foobar"), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{""}}, + RedirectURI: urlparse("http://foobar"), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{""}}, + RedirectURI: urlparse(""), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{}}, + RedirectURI: urlparse(""), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com#123"}}, + RedirectURI: urlparse("http://foobar.com#123"), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com"}}, + RedirectURI: urlparse("http://foobar.com#123"), + }, + isRedirValid: false, + }, + { + ar: &AuthorizeRequest{ + Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com/cb"}}, + RedirectURI: urlparse("http://foobar.com/cb"), + RequestedAt: time.Now(), + ResponseTypes: []string{"foo", "bar"}, + Scopes: []string{"foo", "bar"}, + State: "foobar", + }, + isRedirValid: true, + }, + } { + assert.Equal(t, c.ar.Client, c.ar.GetClient(), "%d", k) + assert.Equal(t, c.ar.RedirectURI, c.ar.GetRedirectURI(), "%d", k) + assert.Equal(t, c.ar.RequestedAt, c.ar.GetRequestedAt(), "%d", k) + assert.Equal(t, c.ar.ResponseTypes, c.ar.GetResponseTypes(), "%d", k) + assert.Equal(t, c.ar.Scopes, c.ar.GetScopes(), "%d", k) + assert.Equal(t, c.ar.State, c.ar.GetState(), "%d", k) + assert.Equal(t, c.isRedirValid, c.ar.IsRedirectURIValid(), "%d", k) + } +} diff --git a/response.go b/response.go index 70227fc1..523b4cf5 100644 --- a/response.go +++ b/response.go @@ -17,6 +17,14 @@ type AuthorizeResponder interface { AddFragment(key, value string) } +func NewAuthorizeResponse() *AuthorizeResponse { + return &AuthorizeResponse{ + Header: &http.Header{}, + Query: &url.Values{}, + Fragment: &url.Values{}, + } +} + type AuthorizeResponse struct { Header *http.Header Query *url.Values diff --git a/response_test.go b/response_test.go new file mode 100644 index 00000000..7176d591 --- /dev/null +++ b/response_test.go @@ -0,0 +1,17 @@ +package fosite + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAuthorizeResponse(t *testing.T) { + ar := NewAuthorizeResponse() + ar.AddFragment("foo", "bar") + ar.AddQuery("foo", "baz") + ar.AddHeader("foo", "foo") + + assert.Equal(t, "bar", ar.GetFragment().Get("foo")) + assert.Equal(t, "baz", ar.GetQuery().Get("foo")) + assert.Equal(t, "foo", ar.GetHeader().Get("foo")) +} From 48ca03b9026843f1047e510c3b66ccb6a54def2c Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 9 Jan 2016 15:44:56 +0100 Subject: [PATCH 25/47] docs: explain what handlers are --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/README.md b/README.md index 085dd97b..f9730ada 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ These Standards have been reviewed during the development of Fosite: - [Usage](#usage) - [Authorize Endpoint](#authorize-endpoint) - [Token Endpoint](#token-endpoint) + - [Extensible handlers](#extensible-handlers) - [Hall of Fame](#hall-of-fame) @@ -239,6 +240,32 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { } ``` +### Extensible handlers + +You can replace Fosite's inner workings, for example response type (/auth endpoint) handlers or grant type +(/token endpoint) handlers. + +Let's take the code handler. He is responsible for handling the +[authorize_code workflow](https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#web-server-apps). +If you want to enable him, you could do it like this: + +```go +codeHandler := &code.CodeResponseTypeHandler{ + Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: myCodeStore, // Needs to implement CodeResponseTypeStorage +} +oauth2 := &Fosite{ + ResponseTypeHandlers: []ResponseTypeHandler{ + codeHandler, + }, +} +``` + +Easy, right? You can add or remove any handler you wish like this, even custom ones and extend OAuth2 by, for example, OpenID +Connect. + +The token endpoint is still in the making so stay tuned on how to run custom token endpoint handlers. + ## Hall of Fame This place is reserved for the fearless bug hunters, reviewers and contributors. From d3697bd15cc05bbc8bf3a6833911c3cc5dd1b2f8 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sat, 9 Jan 2016 19:30:38 +0100 Subject: [PATCH 26/47] all: renaming and refactoring --- README.md | 36 ++++- access.go | 1 + access_request.go | 76 +++++++++ access_response.go | 6 + authorize.go | 108 ------------- authorize_request.go | 148 ++++++++++++++++++ request_test.go => authorize_request_test.go | 0 authorize_response.go | 113 +++++++++++++ ...onse_test.go => authorize_response_test.go | 0 authorize_test.go | 26 +-- context.go | 7 + enigma/hmacsha.go | 2 +- handler.go | 33 ++-- handler_test.go | 20 +-- internal/handler.go | 28 ++-- internal/request.go | 2 +- internal/response.go | 2 +- oauth2.go | 72 +++++++-- oauth2_test.go | 4 +- plugin/code/code.go | 10 +- plugin/token/token.go | 10 +- rand/bytes.go | 17 +- rand/bytes_test.go | 4 +- request.go | 69 -------- response.go | 56 ------- 25 files changed, 517 insertions(+), 333 deletions(-) create mode 100644 access.go create mode 100644 access_request.go create mode 100644 access_response.go create mode 100644 authorize_request.go rename request_test.go => authorize_request_test.go (100%) create mode 100644 authorize_response.go rename response_test.go => authorize_response_test.go (100%) create mode 100644 context.go delete mode 100644 request.go delete mode 100644 response.go diff --git a/README.md b/README.md index f9730ada..0e992d15 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,30 @@ OAuth2 stack. Or custom assertions, what ever you like and as long as it is secu This section is WIP and we welcome discussions via PRs or in the issues. +### Installation + +Obviously, you will need [Go](https://golang.org) installed on your machine and it is required that you have set up your +GOPATH environment variable. + +Fosite is being shipped through gopkg.in so new updates don't break your code. + +``` +go get gopkg.in/ory-am/fosite.v{X}/... +``` + +To see a full list of available versions check the [tags](https://github.com/ory-am/fosite/tags) page. If you want +to use api version 2 for example (version 2 does not exist yet), do: + +``` +go get gopkg.in/ory-am/fosite.v2/... +``` + +To use the unstable master branch, which is only recommended for testing purposes, do: + +``` +go get gopkg.in/ory-am/fosite.v0/... +``` + ### Authorize Endpoint ```go @@ -134,7 +158,7 @@ var oauth2 = service.NewDefaultOAuth2(store) // Let's assume that we're in a http handler func handleAuth(rw http.ResponseWriter, r *http.Request) { - ctx := context.Background() + ctx := fosite.NewContext() // Let's create an AuthorizeRequest object! // It will analyze the request and extract important information like scopes, response type and others. @@ -185,13 +209,13 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // Now is the time to handle the response types // You can use a custom list of response type handlers by setting - // oauth2.ResponseTypeHandlers = []fosite.ResponseTypeHandler{} + // oauth2.AuthorizeEndpointHandlers = []fosite.AuthorizeEndpointHandler{} // - // Each ResponseTypeHandler is responsible for managing his own state data. For example, the code response type + // Each AuthorizeEndpointHandler is responsible for managing his own state data. For example, the code response type // handler stores the access token and the session data in a database backend and retrieves it later on // when handling a grant type. // - // If you use advanced ResponseTypeHandlers it is a good idea to read the README first and check if your + // If you use advanced AuthorizeEndpointHandlers it is a good idea to read the README first and check if your // session object needs to implement any interface. Think of the session as a persistent context // for the handlers. response, err := oauth2.NewAuthorizeResponse(ctx, req, authorizeRequest, &mySessionData) @@ -250,12 +274,12 @@ Let's take the code handler. He is responsible for handling the If you want to enable him, you could do it like this: ```go -codeHandler := &code.CodeResponseTypeHandler{ +codeHandler := &code.CodeAuthorizeEndpointHandler{ Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, Store: myCodeStore, // Needs to implement CodeResponseTypeStorage } oauth2 := &Fosite{ - ResponseTypeHandlers: []ResponseTypeHandler{ + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{ codeHandler, }, } diff --git a/access.go b/access.go new file mode 100644 index 00000000..70511eaa --- /dev/null +++ b/access.go @@ -0,0 +1 @@ +package fosite diff --git a/access_request.go b/access_request.go new file mode 100644 index 00000000..59b5029d --- /dev/null +++ b/access_request.go @@ -0,0 +1,76 @@ +package fosite + +import ( + "github.com/go-errors/errors" + "github.com/ory-am/fosite/client" + "golang.org/x/net/context" + "net/http" +) + +type AccessRequester interface{} + +type AccessRequest struct { + GrantType string + Client client.Client +} + +func NewAccessRequest() *AccessRequest { + return &AccessRequest{} +} + +// +// Implements +// * https://tools.ietf.org/html/rfc6749#section-2.3.1 +// Clients in possession of a client password MAY use the HTTP Basic +// authentication scheme as defined in [RFC2617] to authenticate with +// the authorization server. The client identifier is encoded using the +// "application/x-www-form-urlencoded" encoding algorithm per +// Appendix B, and the encoded value is used as the username; the client +// password is encoded using the same algorithm and used as the +// password. The authorization server MUST support the HTTP Basic +// authentication scheme for authenticating clients that were issued a +// client password. +// Including the client credentials in the request-body using the two +// parameters is NOT RECOMMENDED and SHOULD be limited to clients unable +// to directly utilize the HTTP Basic authentication scheme (or other +// password-based HTTP authentication schemes). The parameters can only +// be transmitted in the request-body and MUST NOT be included in the +// request URI. +func (c *Fosite) NewAccessRequest(_ context.Context, r *http.Request) (AccessRequester, error) { + ar := NewAccessRequest() + r.ParseForm() + + ar.GrantType = r.Form.Get("grant_type") + if ar.GrantType == "" { + return ar, errors.New(ErrInvalidRequest) + } + + clientID, clientSecret, ok := r.BasicAuth() + if !ok { + return ar, errors.New(ErrInvalidRequest) + } + + client, err := c.Store.GetClient(clientID) + if err != nil { + return ar, errors.New(ErrInvalidClient) + } + + // Spec doesn't specify if all extension grants should require authorization as well. But we will + // assume that they do for now. + if !client.CompareSecretWith([]byte(r.Form.Get(clientSecret))) { + return ar, errors.New(ErrInvalidClient) + } + + ar.Client = client + + return ar, nil +} + +func (c *Fosite) LoadAccessRequestSession(ctx context.Context, ar AccessRequester, r *http.Request, session interface{}) error { + for _, loader := range c.TokenEndpointSessionLoaders { + if err := loader.LoadTokenEndpointSession(ctx, ar, r, session); err != nil { + return err + } + } + return nil +} diff --git a/access_response.go b/access_response.go new file mode 100644 index 00000000..543547c9 --- /dev/null +++ b/access_response.go @@ -0,0 +1,6 @@ +package fosite + +type AccessResponder interface { + Set(key string, value interface{}) + Get(key string) interface{} +} diff --git a/authorize.go b/authorize.go index a247c6b1..b7453397 100644 --- a/authorize.go +++ b/authorize.go @@ -5,99 +5,12 @@ import ( "github.com/go-errors/errors" "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite/client" - "golang.org/x/net/context" "net/http" "net/url" - "strings" - "time" ) const minStateLength = 8 -func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { - request := &AuthorizeRequest{ - RequestedAt: time.Now(), - } - - if err := r.ParseForm(); err != nil { - return request, errors.New(ErrInvalidRequest) - } - - client, err := c.Store.GetClient(r.Form.Get("client_id")) - if err != nil { - return request, errors.New(ErrInvalidClient) - } - request.Client = client - - // Fetch redirect URI from request - rawRedirURI, err := GetRedirectURIFromRequestValues(r.Form) - if err != nil { - return request, errors.New(ErrInvalidRequest) - } - - // Validate redirect uri - redirectURI, err := MatchRedirectURIWithClientRedirectURIs(rawRedirURI, client) - if err != nil { - return request, errors.New(ErrInvalidRequest) - } else if !IsValidRedirectURI(redirectURI) { - return request, errors.New(ErrInvalidRequest) - } - request.RedirectURI = redirectURI - - responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) - request.ResponseTypes = responseTypes - - // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri - // The "state" parameter should be used to link the authorization - // request with the redirect URI used to deliver the access token (Section 5.3.5). - // - // https://tools.ietf.org/html/rfc6819#section-4.4.1.8 - // The "state" parameter should not be guessable - state := r.Form.Get("state") - if state == "" { - return request, errors.New(ErrInvalidState) - } else if len(state) < minStateLength { - // We're assuming that using less then 6 characters for the state can not be considered "unguessable" - return request, errors.New(ErrInvalidState) - } - request.State = state - - // Remove empty items from arrays - request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) - - return request, nil -} - -func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { - redir := ar.GetRedirectURI() - - // Explicit grants - q := redir.Query() - rq := resp.GetQuery() - for k, _ := range rq { - q.Set(k, rq.Get(k)) - } - redir.RawQuery = q.Encode() - - // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... - wh := rw.Header() - rh := resp.GetHeader() - for k, _ := range rh { - wh.Set(k, rh.Get(k)) - } - - // Implicit grants - redir.Fragment = resp.GetFragment().Encode() - - // https://tools.ietf.org/html/rfc6749#section-4.1.1 - // When a decision is established, the authorization server directs the - // user-agent to the provided client redirection URI using an HTTP - // redirection response, or by other means available to it via the - // user-agent. - wh.Set("Location", redir.String()) - rw.WriteHeader(http.StatusFound) -} - func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequester, err error) { rfcerr := ErrorToRFC6749Error(err) @@ -116,27 +29,6 @@ func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequest rw.WriteHeader(http.StatusFound) } -func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { - var resp = NewAuthorizeResponse() - var err error - var found bool - - for _, h := range o.ResponseTypeHandlers { - err = h.HandleResponseType(ctx, resp, ar, r, session) - if err == nil { - found = true - } else if err != ErrInvalidResponseType { - return nil, err - } - } - - if !found { - return nil, ErrNoResponseTypeHandlerFound - } - - return resp, nil -} - // GetRedirectURIFromRequestValues extracts the redirect_uri from values but does not do any sort of validation. // // Considered specifications diff --git a/authorize_request.go b/authorize_request.go new file mode 100644 index 00000000..72835e78 --- /dev/null +++ b/authorize_request.go @@ -0,0 +1,148 @@ +package fosite + +import ( + "github.com/go-errors/errors" + . "github.com/ory-am/fosite/client" + "golang.org/x/net/context" + "net/http" + "net/url" + "strings" + "time" +) + +func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { + request := &AuthorizeRequest{ + RequestedAt: time.Now(), + ResponseTypes: Arguments{}, + Scopes: Arguments{}, + } + + if err := r.ParseForm(); err != nil { + return request, errors.New(ErrInvalidRequest) + } + + client, err := c.Store.GetClient(r.Form.Get("client_id")) + if err != nil { + return request, errors.New(ErrInvalidClient) + } + request.Client = client + + // Fetch redirect URI from request + rawRedirURI, err := GetRedirectURIFromRequestValues(r.Form) + if err != nil { + return request, errors.New(ErrInvalidRequest) + } + + // Validate redirect uri + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(rawRedirURI, client) + if err != nil { + return request, errors.New(ErrInvalidRequest) + } else if !IsValidRedirectURI(redirectURI) { + return request, errors.New(ErrInvalidRequest) + } + request.RedirectURI = redirectURI + + // https://tools.ietf.org/html/rfc6749#section-3.1.1 + // Extension response types MAY contain a space-delimited (%x20) list of + // values, where the order of values does not matter (e.g., response + // type "a b" is the same as "b a"). The meaning of such composite + // response types is defined by their respective specifications. + responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) + request.ResponseTypes = responseTypes + + // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri + // The "state" parameter should be used to link the authorization + // request with the redirect URI used to deliver the access token (Section 5.3.5). + // + // https://tools.ietf.org/html/rfc6819#section-4.4.1.8 + // The "state" parameter should not be guessable + state := r.Form.Get("state") + if state == "" { + return request, errors.New(ErrInvalidState) + } else if len(state) < minStateLength { + // We're assuming that using less then 6 characters for the state can not be considered "unguessable" + return request, errors.New(ErrInvalidState) + } + request.State = state + + // Remove empty items from arrays + request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + + return request, nil +} + +// AuthorizeRequester represents an authorize request +type AuthorizeRequester interface { + // GetResponseTypes returns the requested response types + GetResponseTypes() Arguments + + // GetClient returns this request's client or nil + GetClient() Client + + // GetScopes returns this request's scopes + GetScopes() Arguments + + // GetState returns the request's state + GetState() string + + // GetRequestedAt returns the time the request was issued + GetRequestedAt() time.Time + + // GetRedirectURI returns the requested redirect URI + GetRedirectURI() *url.URL + + // IsRedirectURIValid returns false if the redirect is not rfc-conform (i.e. missing client, not on white list, + // or malformed) + IsRedirectURIValid() bool +} + +// AuthorizeRequest is an implementation of AuthorizeRequester +type AuthorizeRequest struct { + ResponseTypes Arguments + Client Client + Scopes Arguments + RedirectURI *url.URL + State string + RequestedAt time.Time +} + +func (d *AuthorizeRequest) IsRedirectURIValid() bool { + if d.GetRedirectURI() == nil { + return false + } + + raw := d.GetRedirectURI().String() + if d.GetClient() == nil { + return false + } + + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(raw, d.GetClient()) + if err != nil { + return false + } + return IsValidRedirectURI(redirectURI) +} + +func (d *AuthorizeRequest) GetResponseTypes() Arguments { + return d.ResponseTypes +} + +func (d *AuthorizeRequest) GetClient() Client { + return d.Client +} + +func (d *AuthorizeRequest) GetScopes() Arguments { + return d.Scopes +} + +func (d *AuthorizeRequest) GetState() string { + return d.State +} + +func (d *AuthorizeRequest) GetRedirectURI() *url.URL { + return d.RedirectURI +} + +func (d *AuthorizeRequest) GetRequestedAt() time.Time { + return d.RequestedAt +} diff --git a/request_test.go b/authorize_request_test.go similarity index 100% rename from request_test.go rename to authorize_request_test.go diff --git a/authorize_response.go b/authorize_response.go new file mode 100644 index 00000000..cfec4497 --- /dev/null +++ b/authorize_response.go @@ -0,0 +1,113 @@ +package fosite + +import ( + "net/http" + "net/url" +) + +import ( + "golang.org/x/net/context" +) + +func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { + redir := ar.GetRedirectURI() + + // Explicit grants + q := redir.Query() + rq := resp.GetQuery() + for k, _ := range rq { + q.Set(k, rq.Get(k)) + } + redir.RawQuery = q.Encode() + + // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... + wh := rw.Header() + rh := resp.GetHeader() + for k, _ := range rh { + wh.Set(k, rh.Get(k)) + } + + // Implicit grants + redir.Fragment = resp.GetFragment().Encode() + + // https://tools.ietf.org/html/rfc6749#section-4.1.1 + // When a decision is established, the authorization server directs the + // user-agent to the provided client redirection URI using an HTTP + // redirection response, or by other means available to it via the + // user-agent. + wh.Set("Location", redir.String()) + rw.WriteHeader(http.StatusFound) +} + +func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { + var resp = NewAuthorizeResponse() + var err error + var found int + + for _, h := range o.AuthorizeEndpointHandlers { + err = h.HandleAuthorizeEndpointRequest(ctx, resp, ar, r, session) + if err == nil { + found++ + } else if err != ErrHandlerNotResponsible { + return nil, err + } + } + + if found != len(ar.GetResponseTypes()) { + return nil, ErrUnsupportedResponseType + } + + return resp, nil +} + +// AuthorizeResponder defines fosite's response model +type AuthorizeResponder interface { + GetHeader() http.Header + AddHeader(key, value string) + + GetQuery() url.Values + AddQuery(key, value string) + + GetFragment() url.Values + AddFragment(key, value string) +} + +// NewAuthorizeResponse creates a new AuthorizeResponse +func NewAuthorizeResponse() *AuthorizeResponse { + return &AuthorizeResponse{ + Header: &http.Header{}, + Query: &url.Values{}, + Fragment: &url.Values{}, + } +} + +// AuthorizeResponse is an implementation of AuthorizeResponder +type AuthorizeResponse struct { + Header *http.Header + Query *url.Values + Fragment *url.Values +} + +func (a *AuthorizeResponse) GetHeader() http.Header { + return *a.Header +} + +func (a *AuthorizeResponse) AddHeader(key, value string) { + a.Header.Add(key, value) +} + +func (a *AuthorizeResponse) GetQuery() url.Values { + return *a.Query +} + +func (a *AuthorizeResponse) GetFragment() url.Values { + return *a.Fragment +} + +func (a *AuthorizeResponse) AddQuery(key, value string) { + a.Query.Add(key, value) +} + +func (a *AuthorizeResponse) AddFragment(key, value string) { + a.Fragment.Add(key, value) +} diff --git a/response_test.go b/authorize_response_test.go similarity index 100% rename from response_test.go rename to authorize_response_test.go diff --git a/authorize_test.go b/authorize_test.go index 2632f1dd..c04a433d 100644 --- a/authorize_test.go +++ b/authorize_test.go @@ -16,15 +16,15 @@ import ( func TestNewNewAuthorizeResponse(t *testing.T) { ctrl := gomock.NewController(t) - handlers := []*MockResponseTypeHandler{NewMockResponseTypeHandler(ctrl)} + handlers := []*MockAuthorizeEndpointHandler{NewMockAuthorizeEndpointHandler(ctrl)} defer ctrl.Finish() ctx := context.Background() oauth2 := &Fosite{ - ResponseTypeHandlers: []ResponseTypeHandler{handlers[0]}, + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0]}, } duo := &Fosite{ - ResponseTypeHandlers: []ResponseTypeHandler{handlers[0], handlers[0]}, + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0], handlers[0]}, } fooErr := errors.New("foo") for k, c := range []struct { @@ -34,45 +34,45 @@ func TestNewNewAuthorizeResponse(t *testing.T) { }{ { mock: func() { - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) }, isErr: true, expectErr: fooErr, }, { mock: func() { - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) }, isErr: true, - expectErr: ErrNoResponseTypeHandlerFound, + expectErr: ErrNoAuthorizeEndpointHandlerFound, }, { mock: func() { - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, isErr: false, }, { mock: func() { oauth2 = duo - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, isErr: false, }, { mock: func() { oauth2 = duo - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) }, isErr: false, }, { mock: func() { oauth2 = duo - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) }, isErr: true, expectErr: fooErr, diff --git a/context.go b/context.go new file mode 100644 index 00000000..2a8f44f4 --- /dev/null +++ b/context.go @@ -0,0 +1,7 @@ +package fosite + +import "golang.org/x/net/context" + +func NewContext() context.Context { + return context.Background() +} diff --git a/enigma/hmacsha.go b/enigma/hmacsha.go index cc48717b..c4a54ac3 100644 --- a/enigma/hmacsha.go +++ b/enigma/hmacsha.go @@ -40,7 +40,7 @@ func (c *HMACSHAEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { // constructed from a cryptographically strong random or pseudo-random // number sequence (see [RFC4086] for best current practice) generated // by the authorization server. - randomBytes, err := rand.RandomBytes(c.AuthCodeEntropy, 20) + randomBytes, err := rand.RandomBytes(c.AuthCodeEntropy) if err != nil { return nil, errors.New(err) } diff --git a/handler.go b/handler.go index 6182d8cf..a4964678 100644 --- a/handler.go +++ b/handler.go @@ -6,25 +6,36 @@ import ( "net/http" ) -// ErrInvalidResponseType is thrown by a ResponseTypeHandler if it is not responsible for handling the authorize request. -var ErrInvalidResponseType = errors.New("This handler is unable handle any of the response types requested by the auhtorize request") +// ErrUnaccountableForAuthorizeRequest is thrown by a AuthorizeEndpointHandler if it is not responsible for handling the authorize request. +var ErrHandlerNotResponsible = errors.New("This handler is not feeling responsible for handling this request") -// ErrNoResponseTypeHandlerFound is thrown if no ResponseTypeHandler was found responsible for the request. -var ErrNoResponseTypeHandlerFound = errors.New("None of the handler's are able to handle this authorize request") +// ErrNoAuthorizeEndpointHandlerFound is thrown if no AuthorizeEndpointHandler was found responsible for the request. +var ErrNoAuthorizeEndpointHandlerFound = errors.New("None of the handler's are able to handle this authorize request") -type ResponseTypeHandler interface { - // HandleResponseType handles an authorize request. To extend the handler's capabilities, the http request - // is passed along, if further information retrieval is required. If HandleResponseType fails, the handler - // implementation MUST return ErrInvalidResponseType. +type AuthorizeEndpointHandler interface { + // HandleAuthorizeRequest handles an authorize endpoint request. To extend the handler's capabilities, the http request + // is passed along, if further information retrieval is required. If HandleAuthorizeRequest fails, the handler + // implementation MUST return ErrHandlerNotResponsible. // - // HandleResponseType should implement: + // The following spec is a good example of what HandleAuthorizeRequest should do. // * https://tools.ietf.org/html/rfc6749#section-3.1.1 // response_type REQUIRED. // The value MUST be one of "code" for requesting an // authorization code as described by Section 4.1.1, "token" for // requesting an access token (implicit grant) as described by // Section 4.2.1, or a registered extension value as described by Section 8.4. + HandleAuthorizeEndpointRequest(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error +} + +type TokenEndpointSessionLoader interface { + // HandleAuthorizeRequest handles an authorize endpoint request. + LoadTokenEndpointSession(ctx context.Context, request AccessRequester, req *http.Request, session interface{}) error +} + +type TokenEndpointHandler interface { + // HandleAuthorizeRequest handles an authorize request. To extend the handler's capabilities, the http request + // is passed along, if further information retrieval is required. If HandleAuthorizeRequest fails, the handler + // implementation MUST return ErrInvalidResponseType. // - // HandleResponseType could also implement additional things like open id connect spec. - HandleResponseType(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error + HandleTokenEndpointRequest(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error } diff --git a/handler_test.go b/handler_test.go index dd006c7e..9ea2039b 100644 --- a/handler_test.go +++ b/handler_test.go @@ -25,44 +25,44 @@ var arbitraryError = errors.New("") // * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#rnc func TestNewAuthorizeResponse(t *testing.T) { ctrl := gomock.NewController(t) - rths := []*MockResponseTypeHandler{ - NewMockResponseTypeHandler(ctrl), - NewMockResponseTypeHandler(ctrl), + rths := []*MockAuthorizeEndpointHandler{ + NewMockAuthorizeEndpointHandler(ctrl), + NewMockAuthorizeEndpointHandler(ctrl), } req := NewMockAuthorizeRequester(ctrl) defer ctrl.Finish() for k, c := range []struct { - handlers []ResponseTypeHandler + handlers []AuthorizeEndpointHandler mock func() expectsError error expects AuthorizeResponder }{ { - handlers: []ResponseTypeHandler{ + handlers: []AuthorizeEndpointHandler{ rths[0], rths[1], }, mock: func() { - rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + rths[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) }, expectsError: arbitraryError, }, { - handlers: []ResponseTypeHandler{ + handlers: []AuthorizeEndpointHandler{ rths[0], rths[1], }, mock: func() { - rths[0].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrInvalidResponseType) - rths[1].EXPECT().HandleResponseType(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) + rths[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) + rths[1].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) }, expectsError: arbitraryError, }, } { c.mock() o := &Fosite{ - ResponseTypeHandlers: c.handlers, + AuthorizeEndpointHandlers: c.handlers, } resp, err := o.NewAuthorizeResponse(context.Background(), &http.Request{}, req, nil) require.Equal(t, c.expectsError, err, "%d: %s", k, err) diff --git a/internal/handler.go b/internal/handler.go index 70565d23..02179a13 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -10,33 +10,33 @@ import ( http "net/http" ) -// Mock of ResponseTypeHandler interface -type MockResponseTypeHandler struct { +// Mock of AuthorizeEndpointHandler interface +type MockAuthorizeEndpointHandler struct { ctrl *gomock.Controller - recorder *_MockResponseTypeHandlerRecorder + recorder *_MockAuthorizeEndpointHandlerRecorder } -// Recorder for MockResponseTypeHandler (not exported) -type _MockResponseTypeHandlerRecorder struct { - mock *MockResponseTypeHandler +// Recorder for MockAuthorizeEndpointHandler (not exported) +type _MockAuthorizeEndpointHandlerRecorder struct { + mock *MockAuthorizeEndpointHandler } -func NewMockResponseTypeHandler(ctrl *gomock.Controller) *MockResponseTypeHandler { - mock := &MockResponseTypeHandler{ctrl: ctrl} - mock.recorder = &_MockResponseTypeHandlerRecorder{mock} +func NewMockAuthorizeEndpointHandler(ctrl *gomock.Controller) *MockAuthorizeEndpointHandler { + mock := &MockAuthorizeEndpointHandler{ctrl: ctrl} + mock.recorder = &_MockAuthorizeEndpointHandlerRecorder{mock} return mock } -func (_m *MockResponseTypeHandler) EXPECT() *_MockResponseTypeHandlerRecorder { +func (_m *MockAuthorizeEndpointHandler) EXPECT() *_MockAuthorizeEndpointHandlerRecorder { return _m.recorder } -func (_m *MockResponseTypeHandler) HandleResponseType(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error { - ret := _m.ctrl.Call(_m, "HandleResponseType", ctx, responder, requester, req, session) +func (_m *MockAuthorizeEndpointHandler) HandleAuthorizeRequest(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error { + ret := _m.ctrl.Call(_m, "HandleAuthorizeRequest", ctx, responder, requester, req, session) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockResponseTypeHandlerRecorder) HandleResponseType(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleResponseType", arg0, arg1, arg2, arg3, arg4) +func (_mr *_MockAuthorizeEndpointHandlerRecorder) HandleAuthorizeRequest(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleAuthorizeRequest", arg0, arg1, arg2, arg3, arg4) } diff --git a/internal/request.go b/internal/request.go index 44b1605e..382afa5d 100644 --- a/internal/request.go +++ b/internal/request.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: request.go +// Source: authorize_request.go package internal diff --git a/internal/response.go b/internal/response.go index 4e81d83e..b3d949d6 100644 --- a/internal/response.go +++ b/internal/response.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: response.go +// Source: authorize_response.go package internal diff --git a/oauth2.go b/oauth2.go index 3b25984e..5104e629 100644 --- a/oauth2.go +++ b/oauth2.go @@ -5,38 +5,78 @@ import ( "net/http" ) -// OAuth2Provider +// OAuth2Provider is an interface that enables you to write OAuth2 handlers with only a few lines of code. +// Check fosite.Fosite for an implementation of this interface. type OAuth2Provider interface { - // NewAuthorizeRequest returns an AuthorizeRequest. This method makes rfc6749 compliant - // checks: - // * rfc6749 3.1. Authorization Endpoint - // * rfc6749 3.1.1. Response Type - // * rfc6749 3.1.2. Redirection Endpoint - // * rfx6749 10.6. Authorization Code Redirection URI Manipulation + // NewAuthorizeRequest returns an AuthorizeRequest. // - // It also introduces countermeasures described in rfc6819: - // * rfc6819 4.4.1.7. Threat: Authorization "code" Leakage through Counterfeit Client - // * rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#section-3.1 + // Extension response types MAY contain a space-delimited (%x20) list of + // values, where the order of values does not matter (e.g., response + // type "a b" is the same as "b a"). The meaning of such composite + // response types is defined by their respective specifications. + // * https://tools.ietf.org/html/rfc6749#section-3.1.2 + // The redirection endpoint URI MUST be an absolute URI as defined by + // [RFC3986] Section 4.3. The endpoint URI MAY include an + // "application/x-www-form-urlencoded" formatted (per Appendix B) query + // component ([RFC3986] Section 3.4), which MUST be retained when adding + // additional query parameters. The endpoint URI MUST NOT include a + // fragment component. + // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) NewAuthorizeRequest(context.Context, *http.Request) (AuthorizeRequester, error) // NewAuthorizeResponse iterates through all response type handlers and returns their result or - // ErrNoResponseTypeHandlerFound if none of the handler's were able to handle it. + // ErrUnsupportedResponseType if none of the handler's were able to handle it. // - // Important: Every ResponseTypeHandler should return ErrInvalidResponseType if it is unable to handle - // the given request and an arbitrary error if an error occurred + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#section-3.1.1 + // Extension response types MAY contain a space-delimited (%x20) list of + // values, where the order of values does not matter (e.g., response + // type "a b" is the same as "b a"). The meaning of such composite + // response types is defined by their respective specifications. + // If an authorization request is missing the "response_type" parameter, + // or if the response type is not understood, the authorization server + // MUST return an error response as described in Section 4.1.2.1. NewAuthorizeResponse(ctx context.Context, req *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) // WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid // redirect uri was given. Implements rfc6749#section-4.1.2.1 + // + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#section-3.1.2 + // The redirection endpoint URI MUST be an absolute URI as defined by + // [RFC3986] Section 4.3. The endpoint URI MAY include an + // "application/x-www-form-urlencoded" formatted (per Appendix B) query + // component ([RFC3986] Section 3.4), which MUST be retained when adding + // additional query parameters. The endpoint URI MUST NOT include a + // fragment component. + // * https://tools.ietf.org/html/rfc6749#section-4.1.2.1 (everything) + // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) WriteAuthorizeError(http.ResponseWriter, AuthorizeRequester, error) // WriteAuthorizeResponse persists the AuthorizeSession in the store and redirects the user agent to the provided // redirect url or returns an error if storage failed. + // + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#rfc6749#section-4.1.2.1 + // After completing its interaction with the resource owner, the + // authorization server directs the resource owner's user-agent back to + // the client. The authorization server redirects the user-agent to the + // client's redirection endpoint previously established with the + // authorization server during the client registration process or when + // making the authorization request. + // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) WriteAuthorizeResponse(http.ResponseWriter, AuthorizeRequester, AuthorizeResponder) + + NewAccessRequest(_ context.Context, r *http.Request) (AccessRequester, error) + LoadAccessRequestSession(ctx context.Context, ar AccessRequester, r *http.Request, session interface{}) error } -// Fosite ships all the various oauth2 helpers like NewAuthorizeRequest +// Fosite implements OAuth2Provider type Fosite struct { - Store Storage - ResponseTypeHandlers []ResponseTypeHandler + Store Storage + AuthorizeEndpointHandlers []AuthorizeEndpointHandler + TokenEndpointSessionLoaders []TokenEndpointSessionLoader + TokenEndpointHandlers []TokenEndpointHandler } diff --git a/oauth2_test.go b/oauth2_test.go index b98aac19..72553a2e 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -35,13 +35,13 @@ func TestFosite(t *testing.T) { mockPluginCodeStore = NewMockCodeResponseTypeStorage(ctrl) defer ctrl.Finish() - codeHandler := &code.CodeResponseTypeHandler{ + codeHandler := &code.CodeAuthorizeEndpointHandler{ Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, Store: mockPluginCodeStore, } oauth2 := &Fosite{ Store: mockStore, - ResponseTypeHandlers: []ResponseTypeHandler{ + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{ codeHandler, }, } diff --git a/plugin/code/code.go b/plugin/code/code.go index a4896c6f..0f48e852 100644 --- a/plugin/code/code.go +++ b/plugin/code/code.go @@ -8,14 +8,14 @@ import ( "net/http" ) -// CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type +// CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type CodeResponseTypeHandler struct { +type CodeAuthorizeEndpointHandler struct { Generator enigma.Enigma Store CodeResponseTypeStorage } -func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ *http.Request, session interface{}) error { +func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ *http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code @@ -33,9 +33,9 @@ func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp Aut } // Handler is not responsible for this request - return ErrInvalidResponseType + return ErrHandlerNotResponsible } -func (c *CodeResponseTypeHandler) HandleGrantType() { +func (c *CodeAuthorizeEndpointHandler) HandleGrantType() { } diff --git a/plugin/token/token.go b/plugin/token/token.go index 589a4969..12af5fe4 100644 --- a/plugin/token/token.go +++ b/plugin/token/token.go @@ -6,21 +6,21 @@ import ( "net/http" ) -// CodeResponseTypeHandler is a response handler for the Authorize Code grant using the explicit grant type +// CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type CodeResponseTypeHandler struct { +type CodeAuthorizeEndpointHandler struct { } -func (c *CodeResponseTypeHandler) HandleResponseType(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { +func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("token") { return nil } // Handler is not responsible for this request - return ErrInvalidResponseType + return ErrHandlerNotResponsible } -func (c *CodeResponseTypeHandler) HandleGrantType() { +func (c *CodeAuthorizeEndpointHandler) HandleGrantType() { } diff --git a/rand/bytes.go b/rand/bytes.go index d70d52e9..c1532a77 100644 --- a/rand/bytes.go +++ b/rand/bytes.go @@ -6,20 +6,11 @@ import ( ) // RandomBytes returns n random bytes by reading from crypto/rand.Reader -func RandomBytes(n, tries int) ([]byte, error) { +func RandomBytes(n int) ([]byte, error) { bytes := make([]byte, n) - - var z int - var err error - for i := 0; i < tries; i++ { - z, err = rand.Reader.Read(bytes) - if err != nil { - return nil, errors.Wrap(err, 0) - } - } - if z < n { - return nil, errors.Errorf("Could not read enough data with %d tries", tries) + _, err := rand.Reader.Read(bytes) + if err != nil { + return []byte{}, err } - return bytes, nil } diff --git a/rand/bytes_test.go b/rand/bytes_test.go index baedfd9a..16b80cc9 100644 --- a/rand/bytes_test.go +++ b/rand/bytes_test.go @@ -6,7 +6,7 @@ import ( ) func TestRandomBytes(t *testing.T) { - bytes, err := RandomBytes(128, 10) + bytes, err := RandomBytes(128) assert.Nil(t, err, "%s", err) assert.Len(t, bytes, 128) } @@ -15,7 +15,7 @@ func TestPseudoRandomness(t *testing.T) { runs := 65536 results := map[string]bool{} for i := 0; i < runs; i++ { - bytes, err := RandomBytes(128, 10) + bytes, err := RandomBytes(128) assert.Nil(t, err, "%s", err) _, ok := results[string(bytes)] diff --git a/request.go b/request.go deleted file mode 100644 index 54e75e20..00000000 --- a/request.go +++ /dev/null @@ -1,69 +0,0 @@ -package fosite - -import ( - . "github.com/ory-am/fosite/client" - "net/url" - "time" -) - -type AuthorizeRequester interface { - GetResponseTypes() Arguments - GetClient() Client - GetScopes() Arguments - GetState() string - GetRequestedAt() time.Time - - GetRedirectURI() *url.URL - IsRedirectURIValid() bool -} - -// Authorize request information -type AuthorizeRequest struct { - ResponseTypes Arguments - Client Client - Scopes Arguments - RedirectURI *url.URL - State string - RequestedAt time.Time -} - -func (d *AuthorizeRequest) IsRedirectURIValid() bool { - if d.GetRedirectURI() == nil { - return false - } - - raw := d.GetRedirectURI().String() - if d.GetClient() == nil { - return false - } - - redirectURI, err := MatchRedirectURIWithClientRedirectURIs(raw, d.GetClient()) - if err != nil { - return false - } - return IsValidRedirectURI(redirectURI) -} - -func (d *AuthorizeRequest) GetResponseTypes() Arguments { - return d.ResponseTypes -} - -func (d *AuthorizeRequest) GetClient() Client { - return d.Client -} - -func (d *AuthorizeRequest) GetScopes() Arguments { - return d.Scopes -} - -func (d *AuthorizeRequest) GetState() string { - return d.State -} - -func (d *AuthorizeRequest) GetRedirectURI() *url.URL { - return d.RedirectURI -} - -func (d *AuthorizeRequest) GetRequestedAt() time.Time { - return d.RequestedAt -} diff --git a/response.go b/response.go deleted file mode 100644 index 523b4cf5..00000000 --- a/response.go +++ /dev/null @@ -1,56 +0,0 @@ -package fosite - -import ( - "net/http" - "net/url" -) - -// AuthorizeResponse defines fosite's response model -type AuthorizeResponder interface { - GetHeader() http.Header - AddHeader(key, value string) - - GetQuery() url.Values - AddQuery(key, value string) - - GetFragment() url.Values - AddFragment(key, value string) -} - -func NewAuthorizeResponse() *AuthorizeResponse { - return &AuthorizeResponse{ - Header: &http.Header{}, - Query: &url.Values{}, - Fragment: &url.Values{}, - } -} - -type AuthorizeResponse struct { - Header *http.Header - Query *url.Values - Fragment *url.Values -} - -func (a *AuthorizeResponse) GetHeader() http.Header { - return *a.Header -} - -func (a *AuthorizeResponse) AddHeader(key, value string) { - a.Header.Add(key, value) -} - -func (a *AuthorizeResponse) GetQuery() url.Values { - return *a.Query -} - -func (a *AuthorizeResponse) GetFragment() url.Values { - return *a.Fragment -} - -func (a *AuthorizeResponse) AddQuery(key, value string) { - a.Query.Add(key, value) -} - -func (a *AuthorizeResponse) AddFragment(key, value string) { - a.Fragment.Add(key, value) -} From 5da857b4bcf76b3cc87aa5c9c1f8ee2c0c814992 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Sun, 10 Jan 2016 14:56:12 +0100 Subject: [PATCH 27/47] all: fixed tests refactor broke --- README.md | 83 +++- access_request.go | 72 ++- access_response.go | 8 +- authorize_error.go | 26 ++ authorize_error_test.go | 97 ++++ authorize.go => authorize_helper.go | 22 - ...ivates_test.go => authorize_helper_test.go | 0 authorize_request.go | 103 ++--- authorize_request_handler.go | 74 +++ authorize_request_handler_test.go | 177 +++++++ authorize_response.go | 55 --- authorize_response_handler.go | 56 +++ authorize_response_handler_test.go | 170 +++++++ authorize_test.go | 432 ------------------ fosite.go | 35 ++ handler.go | 27 +- .../authorize/explicit/explicit_auth.go | 28 +- handler/authorize/explicit/explicit_token.go | 102 +++++ handler/authorize/explicit/session.go | 1 + handler/authorize/implicit/implicit.go | 1 + handler/authorize/storage.go | 21 + handler/oidc/oidc.go | 1 + handler/oidc/storage.go | 3 + handler/token/client/client.go | 1 + handler/token/helper.go | 1 + handler/token/owner/owner.go | 1 + handler/token/storage.go | 23 + {plugin => handler}/token/token.go | 4 +- handler_test.go | 74 --- internal/access__response.go | 83 ++++ internal/access_request.go | 61 +++ internal/{handler.go => authorize_handler.go} | 12 +- internal/{request.go => authorize_request.go} | 78 ++-- .../{response.go => authorize_response.go} | 50 +- internal/authorize_storage.go | 125 +++++ internal/code_storage.go | 60 --- internal/storage.go | 10 +- internal/token_handler.go | 52 +++ internal/token_storage.go | 93 ++++ oauth2.go | 24 +- oauth2_test.go | 18 +- plugin/code/session.go | 10 - plugin/code/storage.go | 11 - plugin/oidc/id_token.go | 1 - rand/bytes.go | 1 - service/oauth2.go | 9 - 46 files changed, 1492 insertions(+), 904 deletions(-) create mode 100644 authorize_error.go create mode 100644 authorize_error_test.go rename authorize.go => authorize_helper.go (88%) rename authorize_privates_test.go => authorize_helper_test.go (100%) create mode 100644 authorize_request_handler.go create mode 100644 authorize_request_handler_test.go create mode 100644 authorize_response_handler.go create mode 100644 authorize_response_handler_test.go delete mode 100644 authorize_test.go create mode 100644 fosite.go rename plugin/code/code.go => handler/authorize/explicit/explicit_auth.go (55%) create mode 100644 handler/authorize/explicit/explicit_token.go create mode 100644 handler/authorize/explicit/session.go create mode 100644 handler/authorize/implicit/implicit.go create mode 100644 handler/authorize/storage.go create mode 100644 handler/oidc/oidc.go create mode 100644 handler/oidc/storage.go create mode 100644 handler/token/client/client.go create mode 100644 handler/token/helper.go create mode 100644 handler/token/owner/owner.go create mode 100644 handler/token/storage.go rename {plugin => handler}/token/token.go (93%) delete mode 100644 handler_test.go create mode 100644 internal/access__response.go create mode 100644 internal/access_request.go rename internal/{handler.go => authorize_handler.go} (60%) rename internal/{request.go => authorize_request.go} (69%) rename internal/{response.go => authorize_response.go} (82%) create mode 100644 internal/authorize_storage.go delete mode 100644 internal/code_storage.go create mode 100644 internal/token_handler.go create mode 100644 internal/token_storage.go delete mode 100644 plugin/code/session.go delete mode 100644 plugin/code/storage.go delete mode 100644 plugin/oidc/id_token.go delete mode 100644 service/oauth2.go diff --git a/README.md b/README.md index 0e992d15..cca1d3f0 100644 --- a/README.md +++ b/README.md @@ -71,15 +71,32 @@ Please be aware that Fosite only secures your server side security. You still ne your tokens safe, prevent CSRF attacks and much more. If you need any help or advice feel free to contact our security staff through [our website](https://ory.am/)! -## Security - -Fosite has two commandments! - -### Encourage security by enforcing it - -#### Secure Tokens - -Tokens are generated with a minimum entropy of 256 bit. You can use more, if you want. +## Security first or encouraging security by enforcing it + +We have given [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819#section-5.1.5.3) +a very close look and included everything we thought was in the scope of this framework. Here is a complete list +of things we implemented in Fosite: + +* [No Cleartext Storage of Credentials](https://tools.ietf.org/html/rfc6819#section-5.1.4.1.3) +* [Encryption of Credentials](https://tools.ietf.org/html/rfc6819#section-5.1.4.1.4) +* [Use Short Expiration Time](https://tools.ietf.org/html/rfc6819#section-5.1.5.3) +* [Limit Number of Usages or One-Time Usage](https://tools.ietf.org/html/rfc6819#section-5.1.5.4) +* [Bind Token to Client id](https://tools.ietf.org/html/rfc6819#section-5.1.5.8) +* [Automatic Revocation of Derived Tokens If Abuse Is Detected](https://tools.ietf.org/html/rfc6819#section-5.2.1.1) +* [Binding of Refresh Token to "client_id"](https://tools.ietf.org/html/rfc6819#section-5.2.2.2) +* [Refresh Token Rotation](https://tools.ietf.org/html/rfc6819#section-5.2.2.3) +* [Revocation of Refresh Tokens](https://tools.ietf.org/html/rfc6819#section-5.2.2.4) +* [Validate Pre-Registered "redirect_uri"](https://tools.ietf.org/html/rfc6819#section-5.2.3.5) +* [Binding of Authorization "code" to "client_id"](https://tools.ietf.org/html/rfc6819#section-5.2.4.4) +* [Binding of Authorization "code" to "redirect_uri"](https://tools.ietf.org/html/rfc6819#section-5.2.4.6) + +Not implemented yet: +* [Use of Asymmetric Cryptography](https://tools.ietf.org/html/rfc6819#section-5.1.4.1.5) - enigma should use asymmetric + cryptography per default instead of HMAC-SHA (but support both). + +Sections below [Section 5](https://tools.ietf.org/html/rfc6819#section-5) +that are not covered in the list above should be reviewed by you. If you think that a specific section should be something +that is covered in Fosite, feel free to create an [issue](https://github.com/ory-am/fosite/issues). #### No state, no token @@ -249,12 +266,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { return } - if mySessionData != nil { - // normally, mySessionData will always be nil unless: accessRequest.GetGrantTypes().Has("authorization_code") - // mySessionData.User === "12345" - } - - response, err := oauth2.NewAccessResponse(ctx, accessRequest, r, mySessionData) + response, err := oauth2.NewAccessResponse(ctx, accessRequest, r, &mySessionData) if err != nil { oauth2.WriteAccessError(rw, req, err) return @@ -290,11 +302,46 @@ Connect. The token endpoint is still in the making so stay tuned on how to run custom token endpoint handlers. -## Hall of Fame +## Develop fosite + +This section is work in progress. -This place is reserved for the fearless bug hunters, reviewers and contributors. +### Useful commands + +**Create storage mocks** +``` +mockgen -destination internal/storage.go github.com/ory-am/fosite Storage +mockgen -destination internal/authorize_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeStorage +mockgen -destination internal/token_storage.go github.com/ory-am/fosite/handler/token TokenStorage +``` + +**Create handler mocks** +``` +mockgen -destination internal/authorize_handler.go github.com/ory-am/fosite AuthorizeEndpointHandler +mockgen -destination internal/token_handler.go github.com/ory-am/fosite TokenEndpointHandler +``` + +**Create stateful "context" mocks** +``` +mockgen -destination internal/access_request.go github.com/ory-am/fosite AccessRequester +mockgen -destination internal/access__response.go github.com/ory-am/fosite AccessResponder +mockgen -destination internal/authorize_request.go github.com/ory-am/fosite AuthorizeRequester +mockgen -destination internal/authorize_response.go github.com/ory-am/fosite AuthorizeResponder +``` + +## Hall of Fame -1. [danielchatfield](https://github.com/danielchatfield) for [#8](https://github.com/ory-am/fosite/issues/8) +This place is reserved for the fearless bug hunters, reviewers and contributors (alphabetical order). + +* [agtorre](https://github.com/agtorre): + [contributions](https://github.com/ory-am/fosite/issues?q=author%3Aagtorre), + [participations](https://github.com/ory-am/fosite/issues?q=commenter%3Aagtorre). +* [danielchatfield](https://github.com/danielchatfield): + [contributions](https://github.com/ory-am/fosite/issues?q=author%3Adanielchatfield), + [participations](https://github.com/ory-am/fosite/issues?q=commenter%3Adanielchatfield). +* [leetal](https://github.com/leetal): + [contributions](https://github.com/ory-am/fosite/issues?q=author%3Aleetal), + [participations](https://github.com/ory-am/fosite/issues?q=commenter%3Aleetal). Find out more about the [author](https://aeneas.io/) of Fosite and Hydra, and the [Ory Company](https://ory.am/). \ No newline at end of file diff --git a/access_request.go b/access_request.go index 59b5029d..8fab31ae 100644 --- a/access_request.go +++ b/access_request.go @@ -5,17 +5,37 @@ import ( "github.com/ory-am/fosite/client" "golang.org/x/net/context" "net/http" + "time" ) -type AccessRequester interface{} +type AccessRequester interface { + GetGrantType() string + GetClient() client.Client + GetRequestedAt() time.Time +} type AccessRequest struct { - GrantType string - Client client.Client + GrantType string + RequestedAt time.Time + Client client.Client +} + +func (a *AccessRequest) GetGrantType() string { + return a.GrantType +} + +func (a *AccessRequest) GetRequestedAt() time.Time { + return a.RequestedAt +} + +func (a *AccessRequest) GetClient() client.Client { + return a.Client } func NewAccessRequest() *AccessRequest { - return &AccessRequest{} + return &AccessRequest{ + RequestedAt: time.Now(), + } } // @@ -36,9 +56,27 @@ func NewAccessRequest() *AccessRequest { // password-based HTTP authentication schemes). The parameters can only // be transmitted in the request-body and MUST NOT be included in the // request URI. -func (c *Fosite) NewAccessRequest(_ context.Context, r *http.Request) (AccessRequester, error) { +// * https://tools.ietf.org/html/rfc6749#section-3.2.1 +// - Confidential clients or other clients issued client credentials MUST +// authenticate with the authorization server as described in +// Section 2.3 when making requests to the token endpoint. +// - If the client type is confidential or the client was issued client +// credentials (or assigned other authentication requirements), the +// client MUST authenticate with the authorization server as described +// in Section 3.2.1. +func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session interface{}) (AccessRequester, error) { ar := NewAccessRequest() - r.ParseForm() + if c.RequiredScope == "" { + c.RequiredScope = DefaultRequiredScopeName + } + + if err := r.ParseForm(); err != nil { + return ar, errors.New(ErrInvalidRequest) + } + + if session == nil { + return ar, errors.New("Session must not be nil") + } ar.GrantType = r.Form.Get("grant_type") if ar.GrantType == "" { @@ -47,6 +85,9 @@ func (c *Fosite) NewAccessRequest(_ context.Context, r *http.Request) (AccessReq clientID, clientSecret, ok := r.BasicAuth() if !ok { + clientID = r.Form.Get("client_id") + } + if clientID == "" { return ar, errors.New(ErrInvalidRequest) } @@ -55,22 +96,17 @@ func (c *Fosite) NewAccessRequest(_ context.Context, r *http.Request) (AccessReq return ar, errors.New(ErrInvalidClient) } - // Spec doesn't specify if all extension grants should require authorization as well. But we will - // assume that they do for now. - if !client.CompareSecretWith([]byte(r.Form.Get(clientSecret))) { + // Enforce client authentication + if !client.CompareSecretWith([]byte(clientSecret)) { return ar, errors.New(ErrInvalidClient) } - ar.Client = client - return ar, nil -} - -func (c *Fosite) LoadAccessRequestSession(ctx context.Context, ar AccessRequester, r *http.Request, session interface{}) error { - for _, loader := range c.TokenEndpointSessionLoaders { - if err := loader.LoadTokenEndpointSession(ctx, ar, r, session); err != nil { - return err + for _, loader := range c.TokenEndpointHandlers { + if err := loader.HandleTokenEndpointRequest(ctx, ar, r, session); err != nil { + return ar, err } } - return nil + + return ar, nil } diff --git a/access_response.go b/access_response.go index 543547c9..11c228bf 100644 --- a/access_response.go +++ b/access_response.go @@ -1,6 +1,10 @@ package fosite type AccessResponder interface { - Set(key string, value interface{}) - Get(key string) interface{} + SetExtra(key string, value interface{}) + GetExtra(key string) interface{} + SetAccessToken(string) + SetTokenType(string) + GetAccessToken() string + GetTokenType() string } diff --git a/authorize_error.go b/authorize_error.go new file mode 100644 index 00000000..363d05d2 --- /dev/null +++ b/authorize_error.go @@ -0,0 +1,26 @@ +package fosite + +import ( + "github.com/ory-am/common/pkg" + "net/http" +) + +const minStateLength = 8 + +func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequester, err error) { + rfcerr := ErrorToRFC6749Error(err) + + if !ar.IsRedirectURIValid() { + pkg.WriteIndentJSON(rw, rfcerr) + return + } + + redirectURI := ar.GetRedirectURI() + query := redirectURI.Query() + query.Add("error", rfcerr.Name) + query.Add("error_description", rfcerr.Description) + redirectURI.RawQuery = query.Encode() + + rw.Header().Add("Location", redirectURI.String()) + rw.WriteHeader(http.StatusFound) +} diff --git a/authorize_error_test.go b/authorize_error_test.go new file mode 100644 index 00000000..231fe8f4 --- /dev/null +++ b/authorize_error_test.go @@ -0,0 +1,97 @@ +package fosite_test + +import ( + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" +) + +// Test for +// * https://tools.ietf.org/html/rfc6749#section-4.1.2.1 +// If the request fails due to a missing, invalid, or mismatching +// redirection URI, or if the client identifier is missing or invalid, +// the authorization server SHOULD inform the resource owner of the +// error and MUST NOT automatically redirect the user-agent to the +// invalid redirection URI. +// * https://tools.ietf.org/html/rfc6749#section-3.1.2 +// The redirection endpoint URI MUST be an absolute URI as defined by +// [RFC3986] Section 4.3. The endpoint URI MAY include an +// "application/x-www-form-urlencoded" formatted (per Appendix B) query +// component ([RFC3986] Section 3.4), which MUST be retained when adding +// additional query parameters. The endpoint URI MUST NOT include a +// fragment component. +func TestWriteAuthorizeError(t *testing.T) { + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + req := NewMockAuthorizeRequester(ctrl) + defer ctrl.Finish() + + var urls = []string{ + "http://foobar.com/", + "http://foobar.com/?foo=bar", + } + var purls = []*url.URL{} + for _, u := range urls { + purl, _ := url.Parse(u) + purls = append(purls, purl) + } + + oauth2 := &Fosite{} + header := http.Header{} + for k, c := range []struct { + err error + mock func() + checkHeader func(int) + }{ + { + err: ErrInvalidGrant, + mock: func() { + req.EXPECT().IsRedirectURIValid().Return(false) + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusOK) + rw.EXPECT().Write(gomock.Any()) + }, + checkHeader: func(k int) { + assert.Equal(t, "application/json", header.Get("Content-Type"), "%d", k) + }, + }, + { + err: ErrInvalidRequest, + mock: func() { + req.EXPECT().IsRedirectURIValid().Return(true) + req.EXPECT().GetRedirectURI().Return(purls[0]) + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed") + b, _ := url.Parse(header.Get("Location")) + assert.Equal(t, a, b, "%d", k) + }, + }, + { + err: ErrInvalidRequest, + mock: func() { + req.EXPECT().IsRedirectURIValid().Return(true) + req.EXPECT().GetRedirectURI().Return(purls[1]) + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + checkHeader: func(k int) { + a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed&foo=bar") + b, _ := url.Parse(header.Get("Location")) + assert.Equal(t, a, b, "%d", k) + }, + }, + } { + c.mock() + oauth2.WriteAuthorizeError(rw, req, c.err) + c.checkHeader(k) + header = http.Header{} + t.Logf("Passed test case %d", k) + } +} diff --git a/authorize.go b/authorize_helper.go similarity index 88% rename from authorize.go rename to authorize_helper.go index b7453397..e9a45064 100644 --- a/authorize.go +++ b/authorize_helper.go @@ -3,32 +3,10 @@ package fosite import ( "github.com/asaskevich/govalidator" "github.com/go-errors/errors" - "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite/client" - "net/http" "net/url" ) -const minStateLength = 8 - -func (c *Fosite) WriteAuthorizeError(rw http.ResponseWriter, ar AuthorizeRequester, err error) { - rfcerr := ErrorToRFC6749Error(err) - - if !ar.IsRedirectURIValid() { - pkg.WriteIndentJSON(rw, rfcerr) - return - } - - redirectURI := ar.GetRedirectURI() - query := redirectURI.Query() - query.Add("error", rfcerr.Name) - query.Add("error_description", rfcerr.Description) - redirectURI.RawQuery = query.Encode() - - rw.Header().Add("Location", redirectURI.String()) - rw.WriteHeader(http.StatusFound) -} - // GetRedirectURIFromRequestValues extracts the redirect_uri from values but does not do any sort of validation. // // Considered specifications diff --git a/authorize_privates_test.go b/authorize_helper_test.go similarity index 100% rename from authorize_privates_test.go rename to authorize_helper_test.go diff --git a/authorize_request.go b/authorize_request.go index 72835e78..6c50f0e1 100644 --- a/authorize_request.go +++ b/authorize_request.go @@ -1,81 +1,23 @@ package fosite import ( - "github.com/go-errors/errors" . "github.com/ory-am/fosite/client" - "golang.org/x/net/context" - "net/http" "net/url" - "strings" "time" ) -func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { - request := &AuthorizeRequest{ - RequestedAt: time.Now(), - ResponseTypes: Arguments{}, - Scopes: Arguments{}, - } - - if err := r.ParseForm(); err != nil { - return request, errors.New(ErrInvalidRequest) - } - - client, err := c.Store.GetClient(r.Form.Get("client_id")) - if err != nil { - return request, errors.New(ErrInvalidClient) - } - request.Client = client - - // Fetch redirect URI from request - rawRedirURI, err := GetRedirectURIFromRequestValues(r.Form) - if err != nil { - return request, errors.New(ErrInvalidRequest) - } - - // Validate redirect uri - redirectURI, err := MatchRedirectURIWithClientRedirectURIs(rawRedirURI, client) - if err != nil { - return request, errors.New(ErrInvalidRequest) - } else if !IsValidRedirectURI(redirectURI) { - return request, errors.New(ErrInvalidRequest) - } - request.RedirectURI = redirectURI - - // https://tools.ietf.org/html/rfc6749#section-3.1.1 - // Extension response types MAY contain a space-delimited (%x20) list of - // values, where the order of values does not matter (e.g., response - // type "a b" is the same as "b a"). The meaning of such composite - // response types is defined by their respective specifications. - responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) - request.ResponseTypes = responseTypes - - // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri - // The "state" parameter should be used to link the authorization - // request with the redirect URI used to deliver the access token (Section 5.3.5). - // - // https://tools.ietf.org/html/rfc6819#section-4.4.1.8 - // The "state" parameter should not be guessable - state := r.Form.Get("state") - if state == "" { - return request, errors.New(ErrInvalidState) - } else if len(state) < minStateLength { - // We're assuming that using less then 6 characters for the state can not be considered "unguessable" - return request, errors.New(ErrInvalidState) - } - request.State = state - - // Remove empty items from arrays - request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) - - return request, nil -} - // AuthorizeRequester represents an authorize request type AuthorizeRequester interface { // GetResponseTypes returns the requested response types GetResponseTypes() Arguments + // SetResponseTypeHandled marks a response_type (e.g. token or code) as handled indicating that the response type + // is supported. + SetResponseTypeHandled(string) + + // DidHandleAllResponseTypes returns if all requested response types have been handled correctly + DidHandleAllResponseTypes() bool + // GetClient returns this request's client or nil GetClient() Client @@ -96,14 +38,19 @@ type AuthorizeRequester interface { IsRedirectURIValid() bool } +func NewAuthorizeRequest() *AuthorizeRequest { + return &AuthorizeRequest{} +} + // AuthorizeRequest is an implementation of AuthorizeRequester type AuthorizeRequest struct { - ResponseTypes Arguments - Client Client - Scopes Arguments - RedirectURI *url.URL - State string - RequestedAt time.Time + ResponseTypes Arguments + Client Client + Scopes Arguments + RedirectURI *url.URL + State string + RequestedAt time.Time + HandledResponseTypes Arguments } func (d *AuthorizeRequest) IsRedirectURIValid() bool { @@ -146,3 +93,17 @@ func (d *AuthorizeRequest) GetRedirectURI() *url.URL { func (d *AuthorizeRequest) GetRequestedAt() time.Time { return d.RequestedAt } + +func (d *AuthorizeRequest) SetResponseTypeHandled(name string) { + d.HandledResponseTypes = append(d.HandledResponseTypes, name) +} + +func (d *AuthorizeRequest) DidHandleAllResponseTypes() bool { + for _, rt := range d.ResponseTypes { + if !d.HandledResponseTypes.Has(rt) { + return false + } + } + + return len(d.ResponseTypes) > 0 +} diff --git a/authorize_request_handler.go b/authorize_request_handler.go new file mode 100644 index 00000000..46b80cb9 --- /dev/null +++ b/authorize_request_handler.go @@ -0,0 +1,74 @@ +package fosite + +import ( + "github.com/go-errors/errors" + "golang.org/x/net/context" + "net/http" + "strings" + "time" +) + +func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (AuthorizeRequester, error) { + if c.RequiredScope == "" { + c.RequiredScope = DefaultRequiredScopeName + } + + request := &AuthorizeRequest{ + RequestedAt: time.Now(), + ResponseTypes: Arguments{}, + Scopes: Arguments{}, + } + + if err := r.ParseForm(); err != nil { + return request, errors.New(ErrInvalidRequest) + } + + client, err := c.Store.GetClient(r.Form.Get("client_id")) + if err != nil { + return request, errors.New(ErrInvalidClient) + } + request.Client = client + + // Fetch redirect URI from request + rawRedirURI, err := GetRedirectURIFromRequestValues(r.Form) + if err != nil { + return request, errors.New(ErrInvalidRequest) + } + + // Validate redirect uri + redirectURI, err := MatchRedirectURIWithClientRedirectURIs(rawRedirURI, client) + if err != nil { + return request, errors.New(ErrInvalidRequest) + } else if !IsValidRedirectURI(redirectURI) { + return request, errors.New(ErrInvalidRequest) + } + request.RedirectURI = redirectURI + + // https://tools.ietf.org/html/rfc6749#section-3.1.1 + // Extension response types MAY contain a space-delimited (%x20) list of + // values, where the order of values does not matter (e.g., response + // type "a b" is the same as "b a"). The meaning of such composite + // response types is defined by their respective specifications. + responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) + request.ResponseTypes = responseTypes + + // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri + // The "state" parameter should be used to link the authorization + // request with the redirect URI used to deliver the access token (Section 5.3.5). + // + // https://tools.ietf.org/html/rfc6819#section-4.4.1.8 + // The "state" parameter should not be guessable + state := r.Form.Get("state") + if state == "" { + return request, errors.New(ErrInvalidState) + } else if len(state) < minStateLength { + // We're assuming that using less then 6 characters for the state can not be considered "unguessable" + return request, errors.New(ErrInvalidState) + } + request.State = state + + // Remove empty items from arrays + request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + + return request, nil +} diff --git a/authorize_request_handler_test.go b/authorize_request_handler_test.go new file mode 100644 index 00000000..3efd7ef7 --- /dev/null +++ b/authorize_request_handler_test.go @@ -0,0 +1,177 @@ +package fosite_test + +import ( + "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/client" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "github.com/vektra/errors" + "golang.org/x/net/context" + "net/http" + "net/url" + "testing" +) + +// Should pass +// +// * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#Terminology +// The OAuth 2.0 specification allows for registration of space-separated response_type parameter values. +// If a Response Type contains one of more space characters (%20), it is compared as a space-delimited list of +// values in which the order of values does not matter. +func TestNewAuthorizeRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := NewMockStorage(ctrl) + defer ctrl.Finish() + + redir, _ := url.Parse("http://foo.bar/cb") + for k, c := range []struct { + desc string + conf *Fosite + r *http.Request + query url.Values + expectedError error + mock func() + expect *AuthorizeRequest + }{ + /* empty request */ + { + desc: "empty request fails", + conf: &Fosite{Store: store}, + r: &http.Request{}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, + }, + /* invalid redirect uri */ + { + desc: "invalid redirect uri fails", + conf: &Fosite{Store: store}, + query: url.Values{"redirect_uri": []string{"invalid"}}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, + }, + /* invalid client */ + { + desc: "invalid client fails", + conf: &Fosite{Store: store}, + query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, + expectedError: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) + }, + }, + /* redirect client mismatch */ + { + desc: "client and request redirects mismatch", + conf: &Fosite{Store: store}, + query: url.Values{ + "client_id": []string{"1234"}, + }, + expectedError: ErrInvalidRequest, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) + }, + }, + /* redirect client mismatch */ + { + desc: "client and request redirects mismatch", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": []string{""}, + "client_id": []string{"1234"}, + }, + expectedError: ErrInvalidRequest, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) + }, + }, + /* redirect client mismatch */ + { + desc: "client and request redirects mismatch", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + }, + expectedError: ErrInvalidRequest, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) + }, + }, + /* no state */ + { + desc: "no state", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code"}, + }, + expectedError: ErrInvalidState, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* short state */ + { + desc: "short state", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code"}, + "state": []string{"short"}, + }, + expectedError: ErrInvalidState, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + }, + /* success case */ + { + desc: "should pass", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": []string{"http://foo.bar/cb"}, + "client_id": []string{"1234"}, + "response_type": []string{"code token"}, + "state": []string{"strong-state"}, + "scope": []string{"foo bar"}, + }, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + expect: &AuthorizeRequest{ + RedirectURI: redir, + Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, + ResponseTypes: []string{"code", "token"}, + State: "strong-state", + Scopes: []string{"foo", "bar"}, + }, + }, + } { + t.Logf("Joining test case %d", k) + c.mock() + if c.r == nil { + c.r = &http.Request{Header: http.Header{}} + if c.query != nil { + c.r.URL = &url.URL{RawQuery: c.query.Encode()} + } + } + + ar, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) + assert.Equal(t, c.expectedError == nil, err == nil, "%d: %s\n%s", k, c.desc, err) + if c.expectedError != nil { + assert.Equal(t, err.Error(), c.expectedError.Error(), "%d: %s\n%s", k, c.desc, err) + } else { + pkg.AssertObjectKeysEqual(t, c.expect, ar, "ResponseTypes", "Scopes", "Client", "RedirectURI", "State") + assert.NotNil(t, ar.GetRequestedAt()) + } + t.Logf("Passed test case %d", k) + } +} diff --git a/authorize_response.go b/authorize_response.go index cfec4497..a605b4f9 100644 --- a/authorize_response.go +++ b/authorize_response.go @@ -5,61 +5,6 @@ import ( "net/url" ) -import ( - "golang.org/x/net/context" -) - -func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { - redir := ar.GetRedirectURI() - - // Explicit grants - q := redir.Query() - rq := resp.GetQuery() - for k, _ := range rq { - q.Set(k, rq.Get(k)) - } - redir.RawQuery = q.Encode() - - // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... - wh := rw.Header() - rh := resp.GetHeader() - for k, _ := range rh { - wh.Set(k, rh.Get(k)) - } - - // Implicit grants - redir.Fragment = resp.GetFragment().Encode() - - // https://tools.ietf.org/html/rfc6749#section-4.1.1 - // When a decision is established, the authorization server directs the - // user-agent to the provided client redirection URI using an HTTP - // redirection response, or by other means available to it via the - // user-agent. - wh.Set("Location", redir.String()) - rw.WriteHeader(http.StatusFound) -} - -func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { - var resp = NewAuthorizeResponse() - var err error - var found int - - for _, h := range o.AuthorizeEndpointHandlers { - err = h.HandleAuthorizeEndpointRequest(ctx, resp, ar, r, session) - if err == nil { - found++ - } else if err != ErrHandlerNotResponsible { - return nil, err - } - } - - if found != len(ar.GetResponseTypes()) { - return nil, ErrUnsupportedResponseType - } - - return resp, nil -} - // AuthorizeResponder defines fosite's response model type AuthorizeResponder interface { GetHeader() http.Header diff --git a/authorize_response_handler.go b/authorize_response_handler.go new file mode 100644 index 00000000..a1afc810 --- /dev/null +++ b/authorize_response_handler.go @@ -0,0 +1,56 @@ +package fosite + +import ( + "github.com/go-errors/errors" + "golang.org/x/net/context" + "net/http" +) + +func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { + redir := ar.GetRedirectURI() + + // Explicit grants + q := redir.Query() + rq := resp.GetQuery() + for k := range rq { + q.Set(k, rq.Get(k)) + } + redir.RawQuery = q.Encode() + + // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... + wh := rw.Header() + rh := resp.GetHeader() + for k := range rh { + wh.Set(k, rh.Get(k)) + } + + // Implicit grants + redir.Fragment = resp.GetFragment().Encode() + + // https://tools.ietf.org/html/rfc6749#section-4.1.1 + // When a decision is established, the authorization server directs the + // user-agent to the provided client redirection URI using an HTTP + // redirection response, or by other means available to it via the + // user-agent. + wh.Set("Location", redir.String()) + rw.WriteHeader(http.StatusFound) +} + +func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { + if session == nil { + return nil, errors.New("Session must not be nil") + } + + var resp = NewAuthorizeResponse() + for _, h := range o.AuthorizeEndpointHandlers { + if err := h.HandleAuthorizeEndpointRequest(ctx, resp, ar, r, session); err != nil { + return nil, err + } + } + + if !ar.DidHandleAllResponseTypes() { + return nil, ErrUnsupportedResponseType + } + + return resp, nil +} diff --git a/authorize_response_handler_test.go b/authorize_response_handler_test.go new file mode 100644 index 00000000..55fb7e28 --- /dev/null +++ b/authorize_response_handler_test.go @@ -0,0 +1,170 @@ +package fosite_test + +import ( + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "github.com/vektra/errors" + "golang.org/x/net/context" + "net/http" + "net/url" + "testing" +) + +func TestNewAuthorizeResponse(t *testing.T) { + ctrl := gomock.NewController(t) + handlers := []*MockAuthorizeEndpointHandler{NewMockAuthorizeEndpointHandler(ctrl)} + ar := NewMockAuthorizeRequester(ctrl) + defer ctrl.Finish() + + ctx := context.Background() + oauth2 := &Fosite{ + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0]}, + } + duo := &Fosite{ + AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0], handlers[0]}, + } + fooErr := errors.New("foo") + for k, c := range []struct { + isErr bool + mock func() + expectErr error + }{ + { + mock: func() { + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) + }, + isErr: true, + expectErr: fooErr, + }, + { + mock: func() { + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + ar.EXPECT().DidHandleAllResponseTypes().Return(true) + }, + isErr: false, + }, + { + mock: func() { + oauth2 = duo + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + ar.EXPECT().DidHandleAllResponseTypes().Return(true) + }, + isErr: false, + }, + { + mock: func() { + oauth2 = duo + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handlers[0].EXPECT().HandleAuthorizeEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) + }, + isErr: true, + expectErr: fooErr, + }, + } { + c.mock() + responder, err := oauth2.NewAuthorizeResponse(ctx, &http.Request{}, ar, &struct{}{}) + assert.Equal(t, c.isErr, err != nil, "%d: %s", k, err) + if err != nil { + assert.Equal(t, c.expectErr, err, "%d: %s", k, err) + assert.Nil(t, responder, "%d", k) + } else { + assert.NotNil(t, responder, "%d", k) + } + t.Logf("Passed test case %d", k) + } +} + +func TestWriteAuthorizeResponse(t *testing.T) { + oauth2 := &Fosite{} + header := http.Header{} + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + ar := NewMockAuthorizeRequester(ctrl) + resp := NewMockAuthorizeResponder(ctrl) + defer ctrl.Finish() + + for k, c := range []struct { + setup func() + expect func() + }{ + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "X-Bar": {"baz"}, + "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + } { + t.Logf("Starting test case %d", k) + c.setup() + oauth2.WriteAuthorizeResponse(rw, ar, resp) + c.expect() + header = http.Header{} + t.Logf("Passed test case %d", k) + } +} diff --git a/authorize_test.go b/authorize_test.go deleted file mode 100644 index c04a433d..00000000 --- a/authorize_test.go +++ /dev/null @@ -1,432 +0,0 @@ -package fosite_test - -import ( - "github.com/golang/mock/gomock" - "github.com/ory-am/common/pkg" - . "github.com/ory-am/fosite" - . "github.com/ory-am/fosite/client" - . "github.com/ory-am/fosite/internal" - "github.com/stretchr/testify/assert" - "github.com/vektra/errors" - "golang.org/x/net/context" - "net/http" - "net/url" - "testing" -) - -func TestNewNewAuthorizeResponse(t *testing.T) { - ctrl := gomock.NewController(t) - handlers := []*MockAuthorizeEndpointHandler{NewMockAuthorizeEndpointHandler(ctrl)} - defer ctrl.Finish() - - ctx := context.Background() - oauth2 := &Fosite{ - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0]}, - } - duo := &Fosite{ - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0], handlers[0]}, - } - fooErr := errors.New("foo") - for k, c := range []struct { - isErr bool - mock func() - expectErr error - }{ - { - mock: func() { - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) - }, - isErr: true, - expectErr: fooErr, - }, - { - mock: func() { - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) - }, - isErr: true, - expectErr: ErrNoAuthorizeEndpointHandlerFound, - }, - { - mock: func() { - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - }, - isErr: false, - }, - { - mock: func() { - oauth2 = duo - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - }, - isErr: false, - }, - { - mock: func() { - oauth2 = duo - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) - }, - isErr: false, - }, - { - mock: func() { - oauth2 = duo - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - handlers[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(fooErr) - }, - isErr: true, - expectErr: fooErr, - }, - } { - c.mock() - responder, err := oauth2.NewAuthorizeResponse(ctx, nil, nil, nil) - assert.Equal(t, c.isErr, err != nil, "%d: %s", k, err) - if err != nil { - assert.Equal(t, c.expectErr, err, "%d: %s", k, err) - assert.Nil(t, responder, "%d", k) - } else { - assert.NotNil(t, responder, "%d", k) - } - t.Logf("Passed test case %d", k) - } -} - -// Test for -// * https://tools.ietf.org/html/rfc6749#section-4.1.2.1 -// If the request fails due to a missing, invalid, or mismatching -// redirection URI, or if the client identifier is missing or invalid, -// the authorization server SHOULD inform the resource owner of the -// error and MUST NOT automatically redirect the user-agent to the -// invalid redirection URI. -// * https://tools.ietf.org/html/rfc6749#section-3.1.2 -// The redirection endpoint URI MUST be an absolute URI as defined by -// [RFC3986] Section 4.3. The endpoint URI MAY include an -// "application/x-www-form-urlencoded" formatted (per Appendix B) query -// component ([RFC3986] Section 3.4), which MUST be retained when adding -// additional query parameters. The endpoint URI MUST NOT include a -// fragment component. -func TestWriteAuthorizeError(t *testing.T) { - ctrl := gomock.NewController(t) - rw := NewMockResponseWriter(ctrl) - req := NewMockAuthorizeRequester(ctrl) - defer ctrl.Finish() - - var urls = []string{ - "http://foobar.com/", - "http://foobar.com/?foo=bar", - } - var purls = []*url.URL{} - for _, u := range urls { - purl, _ := url.Parse(u) - purls = append(purls, purl) - } - - oauth2 := &Fosite{} - header := http.Header{} - for k, c := range []struct { - err error - mock func() - checkHeader func(int) - }{ - { - err: ErrInvalidGrant, - mock: func() { - req.EXPECT().IsRedirectURIValid().Return(false) - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusOK) - rw.EXPECT().Write(gomock.Any()) - }, - checkHeader: func(k int) { - assert.Equal(t, "application/json", header.Get("Content-Type"), "%d", k) - }, - }, - { - err: ErrInvalidRequest, - mock: func() { - req.EXPECT().IsRedirectURIValid().Return(true) - req.EXPECT().GetRedirectURI().Return(purls[0]) - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - checkHeader: func(k int) { - a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed") - b, _ := url.Parse(header.Get("Location")) - assert.Equal(t, a, b, "%d", k) - }, - }, - { - err: ErrInvalidRequest, - mock: func() { - req.EXPECT().IsRedirectURIValid().Return(true) - req.EXPECT().GetRedirectURI().Return(purls[1]) - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - checkHeader: func(k int) { - a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed&foo=bar") - b, _ := url.Parse(header.Get("Location")) - assert.Equal(t, a, b, "%d", k) - }, - }, - } { - c.mock() - oauth2.WriteAuthorizeError(rw, req, c.err) - c.checkHeader(k) - header = http.Header{} - t.Logf("Passed test case %d", k) - } -} - -// Should pass -// -// * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#Terminology -// The OAuth 2.0 specification allows for registration of space-separated response_type parameter values. -// If a Response Type contains one of more space characters (%20), it is compared as a space-delimited list of -// values in which the order of values does not matter. -func TestNewAuthorizeRequest(t *testing.T) { - ctrl := gomock.NewController(t) - store := NewMockStorage(ctrl) - defer ctrl.Finish() - - redir, _ := url.Parse("http://foo.bar/cb") - for k, c := range []struct { - desc string - conf *Fosite - r *http.Request - query url.Values - expectedError error - mock func() - expect *AuthorizeRequest - }{ - /* empty request */ - { - desc: "empty request fails", - conf: &Fosite{Store: store}, - r: &http.Request{}, - expectedError: ErrInvalidClient, - mock: func() { - store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) - }, - }, - /* invalid redirect uri */ - { - desc: "invalid redirect uri fails", - conf: &Fosite{Store: store}, - query: url.Values{"redirect_uri": []string{"invalid"}}, - expectedError: ErrInvalidClient, - mock: func() { - store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) - }, - }, - /* invalid client */ - { - desc: "invalid client fails", - conf: &Fosite{Store: store}, - query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, - expectedError: ErrInvalidClient, - mock: func() { - store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) - }, - }, - /* redirect client mismatch */ - { - desc: "client and request redirects mismatch", - conf: &Fosite{Store: store}, - query: url.Values{ - "client_id": []string{"1234"}, - }, - expectedError: ErrInvalidRequest, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) - }, - }, - /* redirect client mismatch */ - { - desc: "client and request redirects mismatch", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{""}, - "client_id": []string{"1234"}, - }, - expectedError: ErrInvalidRequest, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) - }, - }, - /* redirect client mismatch */ - { - desc: "client and request redirects mismatch", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - }, - expectedError: ErrInvalidRequest, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"invalid"}}, nil) - }, - }, - /* no state */ - { - desc: "no state", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code"}, - }, - expectedError: ErrInvalidState, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, - /* short state */ - { - desc: "short state", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code"}, - "state": []string{"short"}, - }, - expectedError: ErrInvalidState, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - }, - /* success case */ - { - desc: "should pass", - conf: &Fosite{Store: store}, - query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code token"}, - "state": []string{"strong-state"}, - "scope": []string{"foo bar"}, - }, - mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) - }, - expect: &AuthorizeRequest{ - RedirectURI: redir, - Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, - ResponseTypes: []string{"code", "token"}, - State: "strong-state", - Scopes: []string{"foo", "bar"}, - }, - }, - } { - t.Logf("Joining test case %d", k) - c.mock() - if c.r == nil { - c.r = &http.Request{Header: http.Header{}} - if c.query != nil { - c.r.URL = &url.URL{RawQuery: c.query.Encode()} - } - } - - ar, err := c.conf.NewAuthorizeRequest(context.Background(), c.r) - assert.Equal(t, c.expectedError == nil, err == nil, "%d: %s\n%s", k, c.desc, err) - if c.expectedError != nil { - assert.Equal(t, err.Error(), c.expectedError.Error(), "%d: %s\n%s", k, c.desc, err) - } else { - pkg.AssertObjectKeysEqual(t, c.expect, ar, "ResponseTypes", "Scopes", "Client", "RedirectURI", "State") - assert.NotNil(t, ar.GetRequestedAt()) - } - t.Logf("Passed test case %d", k) - } -} - -func TestWriteAuthorizeResponse(t *testing.T) { - oauth2 := &Fosite{} - header := http.Header{} - ctrl := gomock.NewController(t) - rw := NewMockResponseWriter(ctrl) - ar := NewMockAuthorizeRequester(ctrl) - resp := NewMockAuthorizeResponder(ctrl) - defer ctrl.Finish() - - for k, c := range []struct { - setup func() - expect func() - }{ - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) - resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "X-Bar": {"baz"}, - "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, - }, header) - }, - }, - } { - t.Logf("Starting test case %d", k) - c.setup() - oauth2.WriteAuthorizeResponse(rw, ar, resp) - c.expect() - header = http.Header{} - t.Logf("Passed test case %d", k) - } -} diff --git a/fosite.go b/fosite.go new file mode 100644 index 00000000..79372976 --- /dev/null +++ b/fosite.go @@ -0,0 +1,35 @@ +package fosite + +// AuthorizeEndpointHandlers is a list of AuthorizeEndpointHandler +type AuthorizeEndpointHandlers []AuthorizeEndpointHandler + +// Add adds an AuthorizeEndpointHandler to this list +func (a AuthorizeEndpointHandlers) Add(h AuthorizeEndpointHandler) { + a = append(a, h) +} + +// TokenEndpointHandlers is a list of TokenEndpointHandler +type TokenEndpointHandlers []TokenEndpointHandler + +// Add adds an TokenEndpointHandler to this list +func (t TokenEndpointHandlers) Add(h TokenEndpointHandler) { + t = append(t, h) +} + +// NewFosite returns a new OAuth2Provider implementation +func NewFosite(store Storage) *Fosite { + return &Fosite{ + Store: store, + RequiredScope: DefaultRequiredScopeName, + AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{}, + TokenEndpointHandlers: TokenEndpointHandlers{}, + } +} + +// Fosite implements OAuth2Provider. +type Fosite struct { + RequiredScope string + Store Storage + AuthorizeEndpointHandlers AuthorizeEndpointHandlers + TokenEndpointHandlers TokenEndpointHandlers +} diff --git a/handler.go b/handler.go index a4964678..087feb8a 100644 --- a/handler.go +++ b/handler.go @@ -1,21 +1,14 @@ package fosite import ( - "errors" "golang.org/x/net/context" "net/http" ) -// ErrUnaccountableForAuthorizeRequest is thrown by a AuthorizeEndpointHandler if it is not responsible for handling the authorize request. -var ErrHandlerNotResponsible = errors.New("This handler is not feeling responsible for handling this request") - -// ErrNoAuthorizeEndpointHandlerFound is thrown if no AuthorizeEndpointHandler was found responsible for the request. -var ErrNoAuthorizeEndpointHandlerFound = errors.New("None of the handler's are able to handle this authorize request") - type AuthorizeEndpointHandler interface { // HandleAuthorizeRequest handles an authorize endpoint request. To extend the handler's capabilities, the http request - // is passed along, if further information retrieval is required. If HandleAuthorizeRequest fails, the handler - // implementation MUST return ErrHandlerNotResponsible. + // is passed along, if further information retrieval is required. If the handler feels that he is not responsible for + // the authorize request, he must return nil and NOT modify session nor responder neither requester. // // The following spec is a good example of what HandleAuthorizeRequest should do. // * https://tools.ietf.org/html/rfc6749#section-3.1.1 @@ -27,15 +20,15 @@ type AuthorizeEndpointHandler interface { HandleAuthorizeEndpointRequest(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error } -type TokenEndpointSessionLoader interface { - // HandleAuthorizeRequest handles an authorize endpoint request. - LoadTokenEndpointSession(ctx context.Context, request AccessRequester, req *http.Request, session interface{}) error -} - type TokenEndpointHandler interface { // HandleAuthorizeRequest handles an authorize request. To extend the handler's capabilities, the http request - // is passed along, if further information retrieval is required. If HandleAuthorizeRequest fails, the handler - // implementation MUST return ErrInvalidResponseType. + // is passed along, if further information retrieval is required. If the handler feels that he is not responsible for + // the authorize request, he must return nil and NOT modify session nor responder neither requester. // - HandleTokenEndpointRequest(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error + HandleTokenEndpointResponse(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error + + // HandleTokenEndpointRequest + // If the handler feels that he is not responsible for the authorize request, he must return nil and NOT modify + // session nor responder neither requester. + HandleTokenEndpointRequest(ctx context.Context, requester AccessRequester, req *http.Request, session interface{}) error } diff --git a/plugin/code/code.go b/handler/authorize/explicit/explicit_auth.go similarity index 55% rename from plugin/code/code.go rename to handler/authorize/explicit/explicit_auth.go index 0f48e852..9e411219 100644 --- a/plugin/code/code.go +++ b/handler/authorize/explicit/explicit_auth.go @@ -1,21 +1,26 @@ -package code +package explicit import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" + . "github.com/ory-am/fosite/handler/authorize" "golang.org/x/net/context" "net/http" + "time" ) +const authCodeDefaultLifespan = time.Hour / 2 + // CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type CodeAuthorizeEndpointHandler struct { - Generator enigma.Enigma - Store CodeResponseTypeStorage +type AuthorizeExplicitEndpointHandler struct { + Generator enigma.Enigma + Store AuthorizeStorage + AuthCodeLifespan time.Duration } -func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ *http.Request, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, req *http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code @@ -24,18 +29,17 @@ func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_ context. return errors.Wrap(err, 1) } - if err := c.Store.CreateAuthorizeCodeSession(code.Signature, ar, session); err != nil { + if err := c.Store.CreateAuthorizeCodeSession(code.Signature, ar, &AuthorizeSession{ + Extra: session, + RequestRedirectURI: req.Form.Get("redirect_uri"), + }); err != nil { return errors.Wrap(err, 1) } resp.AddQuery("code", code.String()) + ar.SetResponseTypeHandled("code") return nil } - // Handler is not responsible for this request - return ErrHandlerNotResponsible -} - -func (c *CodeAuthorizeEndpointHandler) HandleGrantType() { - + return nil } diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go new file mode 100644 index 00000000..4f69a6f2 --- /dev/null +++ b/handler/authorize/explicit/explicit_token.go @@ -0,0 +1,102 @@ +package explicit + +import ( + "github.com/go-errors/errors" + "github.com/ory-am/common/pkg" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/enigma" + . "github.com/ory-am/fosite/handler/authorize" + "github.com/ory-am/fosite/handler/token" + "golang.org/x/net/context" + "net/http" + "time" +) + +// implements +// * https://tools.ietf.org/html/rfc6749#section-4.1.3 (everything) +func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context.Context, request AccessRequester, req *http.Request, session interface{}) error { + // grant_type REQUIRED. + // Value MUST be set to "authorization_code". + if request.GetGrantType() != "authorize_code" { + return nil + } + + var authSess AuthorizeSession + challenge := &enigma.Challenge{} + challenge.FromString(req.Form.Get("code")) + + // code REQUIRED. + // The authorization code received from the authorization server. + if challenge.Key == "" || challenge.Signature == "" { + return errors.New(ErrInvalidRequest) + } + + // The authorization server MUST verify that the authorization code is valid + if err := c.Generator.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { + return errors.New(ErrInvalidRequest) + } + ar, err := c.Store.GetAuthorizeCodeSession(challenge.Signature, &authSess) + if err == pkg.ErrNotFound { + return errors.New(ErrInvalidRequest) + } else if err != nil { + return errors.Wrap(err, 1) + } + + // The authorization server MUST ensure that the authorization code was issued to the authenticated + // confidential client, or if the client is public, ensure that the + // code was issued to "client_id" in the request, + if ar.GetClient().GetID() != request.GetClient().GetID() { + return errors.New(ErrInvalidRequest) + } + + // ensure that the "redirect_uri" parameter is present if the + // "redirect_uri" parameter was included in the initial authorization + // request as described in Section 4.1.1, and if included ensure that + // their values are identical. + if authSess.RequestRedirectURI != "" && (req.Form.Get("redirect_uri") != ar.GetRedirectURI().String()) { + return errors.New(ErrInvalidRequest) + } + + // If no lifespan has been set, reset to default lifespan + if c.AuthCodeLifespan <= 0 { + c.AuthCodeLifespan = authCodeDefaultLifespan + } + + // https://tools.ietf.org/html/rfc6819#section-5.1.5.3] + // A short expiration time for tokens is a means of protection against + // the following threats: replay, token leak, online guessing + if ar.GetRequestedAt().Add(c.AuthCodeLifespan).Before(time.Now()) { + return errors.New(ErrInvalidRequest) + } + + // Checking of client_id skipped, because: + // If the client type is confidential or the client was issued client + // credentials (or assigned other authentication requirements), the + // client MUST authenticate with the authorization server as described + // in Section 3.2.1. + session = authSess.Extra + return nil +} + +func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error { + access, err := c.Generator.GenerateChallenge(requester.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(ErrServerError) + } + + refresh, err := c.Generator.GenerateChallenge(requester.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(ErrServerError) + } + responder.SetAccessToken(access.String()) + responder.SetTokenType("bearer") + responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) + + if err := c.Store.DeleteAuthorizeCodeSession(req.Form.Get("code")); err != nil { + return errors.New(ErrServerError) + } + + c.Store.CreateAccessTokenSession(access.Signature, requester, &token.TokenSession{}) + c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &token.TokenSession{}) + return nil +} diff --git a/handler/authorize/explicit/session.go b/handler/authorize/explicit/session.go new file mode 100644 index 00000000..e898e6ca --- /dev/null +++ b/handler/authorize/explicit/session.go @@ -0,0 +1 @@ +package explicit diff --git a/handler/authorize/implicit/implicit.go b/handler/authorize/implicit/implicit.go new file mode 100644 index 00000000..bea29476 --- /dev/null +++ b/handler/authorize/implicit/implicit.go @@ -0,0 +1 @@ +package implicit diff --git a/handler/authorize/storage.go b/handler/authorize/storage.go new file mode 100644 index 00000000..1db27932 --- /dev/null +++ b/handler/authorize/storage.go @@ -0,0 +1,21 @@ +package authorize + +import ( + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/handler/token" +) + +type AuthorizeSession struct { + RequestRedirectURI string + Extra interface{} +} + +type AuthorizeStorage interface { + CreateAuthorizeCodeSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error + + GetAuthorizeCodeSession(string, *AuthorizeSession) (fosite.AuthorizeRequester, error) + + DeleteAuthorizeCodeSession(code string) error + + token.TokenStorage +} diff --git a/handler/oidc/oidc.go b/handler/oidc/oidc.go new file mode 100644 index 00000000..1df929b0 --- /dev/null +++ b/handler/oidc/oidc.go @@ -0,0 +1 @@ +package oidc diff --git a/handler/oidc/storage.go b/handler/oidc/storage.go new file mode 100644 index 00000000..bcecc978 --- /dev/null +++ b/handler/oidc/storage.go @@ -0,0 +1,3 @@ +package oidc + +type OpenIDConnectStorage interface{} diff --git a/handler/token/client/client.go b/handler/token/client/client.go new file mode 100644 index 00000000..da13c8ef --- /dev/null +++ b/handler/token/client/client.go @@ -0,0 +1 @@ +package client diff --git a/handler/token/helper.go b/handler/token/helper.go new file mode 100644 index 00000000..1765cc06 --- /dev/null +++ b/handler/token/helper.go @@ -0,0 +1 @@ +package token diff --git a/handler/token/owner/owner.go b/handler/token/owner/owner.go new file mode 100644 index 00000000..cf6cd003 --- /dev/null +++ b/handler/token/owner/owner.go @@ -0,0 +1 @@ +package owner diff --git a/handler/token/storage.go b/handler/token/storage.go new file mode 100644 index 00000000..0d16ff4f --- /dev/null +++ b/handler/token/storage.go @@ -0,0 +1,23 @@ +package token + +import ( + "github.com/ory-am/fosite" +) + +type TokenSession struct { + Extra interface{} +} + +type TokenStorage interface { + CreateAccessTokenSession(signature string, access fosite.AccessRequester, session *TokenSession) error + + GetAccessTokenSession(signature string, session *TokenSession) (fosite.AccessRequester, error) + + DeleteAccessTokenSession(signature string) error + + CreateRefreshTokenSession(signature string, access fosite.AccessRequester, session *TokenSession) error + + GetRefreshTokenSession(signature string, session *TokenSession) (fosite.AccessRequester, error) + + DeleteRefreshTokenSession(signature string) error +} diff --git a/plugin/token/token.go b/handler/token/token.go similarity index 93% rename from plugin/token/token.go rename to handler/token/token.go index 12af5fe4..d9ba48ad 100644 --- a/plugin/token/token.go +++ b/handler/token/token.go @@ -1,4 +1,4 @@ -package authorize +package token import ( . "github.com/ory-am/fosite" @@ -18,7 +18,7 @@ func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeRequest(_ context.Context, } // Handler is not responsible for this request - return ErrHandlerNotResponsible + return nil } func (c *CodeAuthorizeEndpointHandler) HandleGrantType() { diff --git a/handler_test.go b/handler_test.go deleted file mode 100644 index 9ea2039b..00000000 --- a/handler_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package fosite_test - -import ( - "github.com/go-errors/errors" - "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite" - . "github.com/ory-am/fosite/internal" - "github.com/stretchr/testify/require" - "golang.org/x/net/context" - "net/http" - "testing" -) - -var arbitraryError = errors.New("") - -// Should pass: -// -// * https://tools.ietf.org/html/rfc6749#section-3.1.1 -// response_type REQUIRED. -// The value MUST be one of "code" for requesting an -// authorization code as described by Section 4.1.1, "token" for -// requesting an access token (implicit grant) as described by -// Section 4.2.1, or a registered extension value as described by Section 8.4. -// -// * https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#rnc -func TestNewAuthorizeResponse(t *testing.T) { - ctrl := gomock.NewController(t) - rths := []*MockAuthorizeEndpointHandler{ - NewMockAuthorizeEndpointHandler(ctrl), - NewMockAuthorizeEndpointHandler(ctrl), - } - req := NewMockAuthorizeRequester(ctrl) - defer ctrl.Finish() - - for k, c := range []struct { - handlers []AuthorizeEndpointHandler - mock func() - expectsError error - expects AuthorizeResponder - }{ - { - handlers: []AuthorizeEndpointHandler{ - rths[0], - rths[1], - }, - mock: func() { - rths[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) - }, - expectsError: arbitraryError, - }, - { - handlers: []AuthorizeEndpointHandler{ - rths[0], - rths[1], - }, - mock: func() { - rths[0].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrHandlerNotResponsible) - rths[1].EXPECT().HandleAuthorizeRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(arbitraryError) - }, - expectsError: arbitraryError, - }, - } { - c.mock() - o := &Fosite{ - AuthorizeEndpointHandlers: c.handlers, - } - resp, err := o.NewAuthorizeResponse(context.Background(), &http.Request{}, req, nil) - require.Equal(t, c.expectsError, err, "%d: %s", k, err) - if err != nil { - require.Equal(t, c.expects, resp) - } - t.Logf("Passed test case %d", k) - } -} diff --git a/internal/access__response.go b/internal/access__response.go new file mode 100644 index 00000000..4c7aa61e --- /dev/null +++ b/internal/access__response.go @@ -0,0 +1,83 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite (interfaces: AccessResponder) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" +) + +// Mock of AccessResponder interface +type MockAccessResponder struct { + ctrl *gomock.Controller + recorder *_MockAccessResponderRecorder +} + +// Recorder for MockAccessResponder (not exported) +type _MockAccessResponderRecorder struct { + mock *MockAccessResponder +} + +func NewMockAccessResponder(ctrl *gomock.Controller) *MockAccessResponder { + mock := &MockAccessResponder{ctrl: ctrl} + mock.recorder = &_MockAccessResponderRecorder{mock} + return mock +} + +func (_m *MockAccessResponder) EXPECT() *_MockAccessResponderRecorder { + return _m.recorder +} + +func (_m *MockAccessResponder) GetAccessToken() string { + ret := _m.ctrl.Call(_m, "GetAccessToken") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockAccessResponderRecorder) GetAccessToken() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessToken") +} + +func (_m *MockAccessResponder) GetExtra(_param0 string) interface{} { + ret := _m.ctrl.Call(_m, "GetExtra", _param0) + ret0, _ := ret[0].(interface{}) + return ret0 +} + +func (_mr *_MockAccessResponderRecorder) GetExtra(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetExtra", arg0) +} + +func (_m *MockAccessResponder) GetTokenType() string { + ret := _m.ctrl.Call(_m, "GetTokenType") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockAccessResponderRecorder) GetTokenType() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetTokenType") +} + +func (_m *MockAccessResponder) SetAccessToken(_param0 string) { + _m.ctrl.Call(_m, "SetAccessToken", _param0) +} + +func (_mr *_MockAccessResponderRecorder) SetAccessToken(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetAccessToken", arg0) +} + +func (_m *MockAccessResponder) SetExtra(_param0 string, _param1 interface{}) { + _m.ctrl.Call(_m, "SetExtra", _param0, _param1) +} + +func (_mr *_MockAccessResponderRecorder) SetExtra(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetExtra", arg0, arg1) +} + +func (_m *MockAccessResponder) SetTokenType(_param0 string) { + _m.ctrl.Call(_m, "SetTokenType", _param0) +} + +func (_mr *_MockAccessResponderRecorder) SetTokenType(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetTokenType", arg0) +} diff --git a/internal/access_request.go b/internal/access_request.go new file mode 100644 index 00000000..940f8f0e --- /dev/null +++ b/internal/access_request.go @@ -0,0 +1,61 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite (interfaces: AccessRequester) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + client "github.com/ory-am/fosite/client" + time "time" +) + +// Mock of AccessRequester interface +type MockAccessRequester struct { + ctrl *gomock.Controller + recorder *_MockAccessRequesterRecorder +} + +// Recorder for MockAccessRequester (not exported) +type _MockAccessRequesterRecorder struct { + mock *MockAccessRequester +} + +func NewMockAccessRequester(ctrl *gomock.Controller) *MockAccessRequester { + mock := &MockAccessRequester{ctrl: ctrl} + mock.recorder = &_MockAccessRequesterRecorder{mock} + return mock +} + +func (_m *MockAccessRequester) EXPECT() *_MockAccessRequesterRecorder { + return _m.recorder +} + +func (_m *MockAccessRequester) GetClient() client.Client { + ret := _m.ctrl.Call(_m, "GetClient") + ret0, _ := ret[0].(client.Client) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) GetClient() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient") +} + +func (_m *MockAccessRequester) GetGrantType() string { + ret := _m.ctrl.Call(_m, "GetGrantType") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) GetGrantType() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetGrantType") +} + +func (_m *MockAccessRequester) GetRequestedAt() time.Time { + ret := _m.ctrl.Call(_m, "GetRequestedAt") + ret0, _ := ret[0].(time.Time) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) GetRequestedAt() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRequestedAt") +} diff --git a/internal/handler.go b/internal/authorize_handler.go similarity index 60% rename from internal/handler.go rename to internal/authorize_handler.go index 02179a13..5764ba7d 100644 --- a/internal/handler.go +++ b/internal/authorize_handler.go @@ -1,11 +1,11 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: handler.go +// Source: github.com/ory-am/fosite (interfaces: AuthorizeEndpointHandler) package internal import ( gomock "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite" + fosite "github.com/ory-am/fosite" context "golang.org/x/net/context" http "net/http" ) @@ -31,12 +31,12 @@ func (_m *MockAuthorizeEndpointHandler) EXPECT() *_MockAuthorizeEndpointHandlerR return _m.recorder } -func (_m *MockAuthorizeEndpointHandler) HandleAuthorizeRequest(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error { - ret := _m.ctrl.Call(_m, "HandleAuthorizeRequest", ctx, responder, requester, req, session) +func (_m *MockAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_param0 context.Context, _param1 fosite.AuthorizeResponder, _param2 fosite.AuthorizeRequester, _param3 *http.Request, _param4 interface{}) error { + ret := _m.ctrl.Call(_m, "HandleAuthorizeEndpointRequest", _param0, _param1, _param2, _param3, _param4) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeEndpointHandlerRecorder) HandleAuthorizeRequest(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleAuthorizeRequest", arg0, arg1, arg2, arg3, arg4) +func (_mr *_MockAuthorizeEndpointHandlerRecorder) HandleAuthorizeEndpointRequest(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleAuthorizeEndpointRequest", arg0, arg1, arg2, arg3, arg4) } diff --git a/internal/request.go b/internal/authorize_request.go similarity index 69% rename from internal/request.go rename to internal/authorize_request.go index 382afa5d..0df6247d 100644 --- a/internal/request.go +++ b/internal/authorize_request.go @@ -1,12 +1,12 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: authorize_request.go +// Source: github.com/ory-am/fosite (interfaces: AuthorizeRequester) package internal import ( gomock "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite" - . "github.com/ory-am/fosite/client" + fosite "github.com/ory-am/fosite" + client "github.com/ory-am/fosite/client" url "net/url" time "time" ) @@ -32,19 +32,19 @@ func (_m *MockAuthorizeRequester) EXPECT() *_MockAuthorizeRequesterRecorder { return _m.recorder } -func (_m *MockAuthorizeRequester) GetResponseTypes() Arguments { - ret := _m.ctrl.Call(_m, "GetResponseTypes") - ret0, _ := ret[0].(Arguments) +func (_m *MockAuthorizeRequester) DidHandleAllResponseTypes() bool { + ret := _m.ctrl.Call(_m, "DidHandleAllResponseTypes") + ret0, _ := ret[0].(bool) return ret0 } -func (_mr *_MockAuthorizeRequesterRecorder) GetResponseTypes() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetResponseTypes") +func (_mr *_MockAuthorizeRequesterRecorder) DidHandleAllResponseTypes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DidHandleAllResponseTypes") } -func (_m *MockAuthorizeRequester) GetClient() Client { +func (_m *MockAuthorizeRequester) GetClient() client.Client { ret := _m.ctrl.Call(_m, "GetClient") - ret0, _ := ret[0].(Client) + ret0, _ := ret[0].(client.Client) return ret0 } @@ -52,24 +52,14 @@ func (_mr *_MockAuthorizeRequesterRecorder) GetClient() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient") } -func (_m *MockAuthorizeRequester) GetScopes() Arguments { - ret := _m.ctrl.Call(_m, "GetScopes") - ret0, _ := ret[0].(Arguments) - return ret0 -} - -func (_mr *_MockAuthorizeRequesterRecorder) GetScopes() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetScopes") -} - -func (_m *MockAuthorizeRequester) GetState() string { - ret := _m.ctrl.Call(_m, "GetState") - ret0, _ := ret[0].(string) +func (_m *MockAuthorizeRequester) GetRedirectURI() *url.URL { + ret := _m.ctrl.Call(_m, "GetRedirectURI") + ret0, _ := ret[0].(*url.URL) return ret0 } -func (_mr *_MockAuthorizeRequesterRecorder) GetState() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetState") +func (_mr *_MockAuthorizeRequesterRecorder) GetRedirectURI() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRedirectURI") } func (_m *MockAuthorizeRequester) GetRequestedAt() time.Time { @@ -82,14 +72,34 @@ func (_mr *_MockAuthorizeRequesterRecorder) GetRequestedAt() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRequestedAt") } -func (_m *MockAuthorizeRequester) GetRedirectURI() *url.URL { - ret := _m.ctrl.Call(_m, "GetRedirectURI") - ret0, _ := ret[0].(*url.URL) +func (_m *MockAuthorizeRequester) GetResponseTypes() fosite.Arguments { + ret := _m.ctrl.Call(_m, "GetResponseTypes") + ret0, _ := ret[0].(fosite.Arguments) return ret0 } -func (_mr *_MockAuthorizeRequesterRecorder) GetRedirectURI() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRedirectURI") +func (_mr *_MockAuthorizeRequesterRecorder) GetResponseTypes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetResponseTypes") +} + +func (_m *MockAuthorizeRequester) GetScopes() fosite.Arguments { + ret := _m.ctrl.Call(_m, "GetScopes") + ret0, _ := ret[0].(fosite.Arguments) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetScopes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetScopes") +} + +func (_m *MockAuthorizeRequester) GetState() string { + ret := _m.ctrl.Call(_m, "GetState") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetState() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetState") } func (_m *MockAuthorizeRequester) IsRedirectURIValid() bool { @@ -101,3 +111,11 @@ func (_m *MockAuthorizeRequester) IsRedirectURIValid() bool { func (_mr *_MockAuthorizeRequesterRecorder) IsRedirectURIValid() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "IsRedirectURIValid") } + +func (_m *MockAuthorizeRequester) SetResponseTypeHandled(_param0 string) { + _m.ctrl.Call(_m, "SetResponseTypeHandled", _param0) +} + +func (_mr *_MockAuthorizeRequesterRecorder) SetResponseTypeHandled(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetResponseTypeHandled", arg0) +} diff --git a/internal/response.go b/internal/authorize_response.go similarity index 82% rename from internal/response.go rename to internal/authorize_response.go index b3d949d6..d5b09ca7 100644 --- a/internal/response.go +++ b/internal/authorize_response.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: authorize_response.go +// Source: github.com/ory-am/fosite (interfaces: AuthorizeResponder) package internal @@ -30,36 +30,24 @@ func (_m *MockAuthorizeResponder) EXPECT() *_MockAuthorizeResponderRecorder { return _m.recorder } -func (_m *MockAuthorizeResponder) GetHeader() http.Header { - ret := _m.ctrl.Call(_m, "GetHeader") - ret0, _ := ret[0].(http.Header) - return ret0 +func (_m *MockAuthorizeResponder) AddFragment(_param0 string, _param1 string) { + _m.ctrl.Call(_m, "AddFragment", _param0, _param1) } -func (_mr *_MockAuthorizeResponderRecorder) GetHeader() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetHeader") +func (_mr *_MockAuthorizeResponderRecorder) AddFragment(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "AddFragment", arg0, arg1) } -func (_m *MockAuthorizeResponder) AddHeader(key string, value string) { - _m.ctrl.Call(_m, "AddHeader", key, value) +func (_m *MockAuthorizeResponder) AddHeader(_param0 string, _param1 string) { + _m.ctrl.Call(_m, "AddHeader", _param0, _param1) } func (_mr *_MockAuthorizeResponderRecorder) AddHeader(arg0, arg1 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "AddHeader", arg0, arg1) } -func (_m *MockAuthorizeResponder) GetQuery() url.Values { - ret := _m.ctrl.Call(_m, "GetQuery") - ret0, _ := ret[0].(url.Values) - return ret0 -} - -func (_mr *_MockAuthorizeResponderRecorder) GetQuery() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetQuery") -} - -func (_m *MockAuthorizeResponder) AddQuery(key string, value string) { - _m.ctrl.Call(_m, "AddQuery", key, value) +func (_m *MockAuthorizeResponder) AddQuery(_param0 string, _param1 string) { + _m.ctrl.Call(_m, "AddQuery", _param0, _param1) } func (_mr *_MockAuthorizeResponderRecorder) AddQuery(arg0, arg1 interface{}) *gomock.Call { @@ -76,10 +64,22 @@ func (_mr *_MockAuthorizeResponderRecorder) GetFragment() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetFragment") } -func (_m *MockAuthorizeResponder) AddFragment(key string, value string) { - _m.ctrl.Call(_m, "AddFragment", key, value) +func (_m *MockAuthorizeResponder) GetHeader() http.Header { + ret := _m.ctrl.Call(_m, "GetHeader") + ret0, _ := ret[0].(http.Header) + return ret0 } -func (_mr *_MockAuthorizeResponderRecorder) AddFragment(arg0, arg1 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "AddFragment", arg0, arg1) +func (_mr *_MockAuthorizeResponderRecorder) GetHeader() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetHeader") +} + +func (_m *MockAuthorizeResponder) GetQuery() url.Values { + ret := _m.ctrl.Call(_m, "GetQuery") + ret0, _ := ret[0].(url.Values) + return ret0 +} + +func (_mr *_MockAuthorizeResponderRecorder) GetQuery() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetQuery") } diff --git a/internal/authorize_storage.go b/internal/authorize_storage.go new file mode 100644 index 00000000..a0474fcb --- /dev/null +++ b/internal/authorize_storage.go @@ -0,0 +1,125 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + authorize "github.com/ory-am/fosite/handler/authorize" + token "github.com/ory-am/fosite/handler/token" +) + +// Mock of AuthorizeStorage interface +type MockAuthorizeStorage struct { + ctrl *gomock.Controller + recorder *_MockAuthorizeStorageRecorder +} + +// Recorder for MockAuthorizeStorage (not exported) +type _MockAuthorizeStorageRecorder struct { + mock *MockAuthorizeStorage +} + +func NewMockAuthorizeStorage(ctrl *gomock.Controller) *MockAuthorizeStorage { + mock := &MockAuthorizeStorage{ctrl: ctrl} + mock.recorder = &_MockAuthorizeStorageRecorder{mock} + return mock +} + +func (_m *MockAuthorizeStorage) EXPECT() *_MockAuthorizeStorageRecorder { + return _m.recorder +} + +func (_m *MockAuthorizeStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockAuthorizeStorage) DeleteAuthorizeCodeSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) +} + +func (_m *MockAuthorizeStorage) DeleteRefreshTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) +} + +func (_m *MockAuthorizeStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} + +func (_m *MockAuthorizeStorage) GetAuthorizeCodeSession(_param0 string, _param1 *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { + ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AuthorizeRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeStorageRecorder) GetAuthorizeCodeSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1) +} + +func (_m *MockAuthorizeStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) +} diff --git a/internal/code_storage.go b/internal/code_storage.go deleted file mode 100644 index 8c89edd3..00000000 --- a/internal/code_storage.go +++ /dev/null @@ -1,60 +0,0 @@ -// Automatically generated by MockGen. DO NOT EDIT! -// Source: storage.go - -package internal - -import ( - gomock "github.com/golang/mock/gomock" - fosite "github.com/ory-am/fosite" -) - -// Mock of CodeResponseTypeStorage interface -type MockCodeResponseTypeStorage struct { - ctrl *gomock.Controller - recorder *_MockCodeResponseTypeStorageRecorder -} - -// Recorder for MockCodeResponseTypeStorage (not exported) -type _MockCodeResponseTypeStorageRecorder struct { - mock *MockCodeResponseTypeStorage -} - -func NewMockCodeResponseTypeStorage(ctrl *gomock.Controller) *MockCodeResponseTypeStorage { - mock := &MockCodeResponseTypeStorage{ctrl: ctrl} - mock.recorder = &_MockCodeResponseTypeStorageRecorder{mock} - return mock -} - -func (_m *MockCodeResponseTypeStorage) EXPECT() *_MockCodeResponseTypeStorageRecorder { - return _m.recorder -} - -func (_m *MockCodeResponseTypeStorage) CreateAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { - ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", code, authorizeRequest, extra) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockCodeResponseTypeStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) -} - -func (_m *MockCodeResponseTypeStorage) GetAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error { - ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", code, authorizeRequest, extra) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockCodeResponseTypeStorageRecorder) GetAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1, arg2) -} - -func (_m *MockCodeResponseTypeStorage) DeleteAuthorizeCodeSession(code string) error { - ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", code) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockCodeResponseTypeStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) -} diff --git a/internal/storage.go b/internal/storage.go index a88e8174..900626eb 100644 --- a/internal/storage.go +++ b/internal/storage.go @@ -1,11 +1,11 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: storage.go +// Source: github.com/ory-am/fosite (interfaces: Storage) package internal import ( gomock "github.com/golang/mock/gomock" - . "github.com/ory-am/fosite/client" + client "github.com/ory-am/fosite/client" ) // Mock of Storage interface @@ -29,9 +29,9 @@ func (_m *MockStorage) EXPECT() *_MockStorageRecorder { return _m.recorder } -func (_m *MockStorage) GetClient(id string) (Client, error) { - ret := _m.ctrl.Call(_m, "GetClient", id) - ret0, _ := ret[0].(Client) +func (_m *MockStorage) GetClient(_param0 string) (client.Client, error) { + ret := _m.ctrl.Call(_m, "GetClient", _param0) + ret0, _ := ret[0].(client.Client) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/internal/token_handler.go b/internal/token_handler.go new file mode 100644 index 00000000..c67e804c --- /dev/null +++ b/internal/token_handler.go @@ -0,0 +1,52 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite (interfaces: TokenEndpointHandler) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + context "golang.org/x/net/context" + http "net/http" +) + +// Mock of TokenEndpointHandler interface +type MockTokenEndpointHandler struct { + ctrl *gomock.Controller + recorder *_MockTokenEndpointHandlerRecorder +} + +// Recorder for MockTokenEndpointHandler (not exported) +type _MockTokenEndpointHandlerRecorder struct { + mock *MockTokenEndpointHandler +} + +func NewMockTokenEndpointHandler(ctrl *gomock.Controller) *MockTokenEndpointHandler { + mock := &MockTokenEndpointHandler{ctrl: ctrl} + mock.recorder = &_MockTokenEndpointHandlerRecorder{mock} + return mock +} + +func (_m *MockTokenEndpointHandler) EXPECT() *_MockTokenEndpointHandlerRecorder { + return _m.recorder +} + +func (_m *MockTokenEndpointHandler) HandleTokenEndpointRequest(_param0 context.Context, _param1 fosite.AccessRequester, _param2 *http.Request, _param3 interface{}) error { + ret := _m.ctrl.Call(_m, "HandleTokenEndpointRequest", _param0, _param1, _param2, _param3) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointRequest(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointRequest", arg0, arg1, arg2, arg3) +} + +func (_m *MockTokenEndpointHandler) HandleTokenEndpointResponse(_param0 context.Context, _param1 fosite.AccessResponder, _param2 fosite.AccessRequester, _param3 *http.Request, _param4 interface{}) error { + ret := _m.ctrl.Call(_m, "HandleTokenEndpointResponse", _param0, _param1, _param2, _param3, _param4) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointResponse(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointResponse", arg0, arg1, arg2, arg3, arg4) +} diff --git a/internal/token_storage.go b/internal/token_storage.go new file mode 100644 index 00000000..91e96077 --- /dev/null +++ b/internal/token_storage.go @@ -0,0 +1,93 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/token (interfaces: TokenStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + token "github.com/ory-am/fosite/handler/token" +) + +// Mock of TokenStorage interface +type MockTokenStorage struct { + ctrl *gomock.Controller + recorder *_MockTokenStorageRecorder +} + +// Recorder for MockTokenStorage (not exported) +type _MockTokenStorageRecorder struct { + mock *MockTokenStorage +} + +func NewMockTokenStorage(ctrl *gomock.Controller) *MockTokenStorage { + mock := &MockTokenStorage{ctrl: ctrl} + mock.recorder = &_MockTokenStorageRecorder{mock} + return mock +} + +func (_m *MockTokenStorage) EXPECT() *_MockTokenStorageRecorder { + return _m.recorder +} + +func (_m *MockTokenStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockTokenStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) +} + +func (_m *MockTokenStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockTokenStorage) DeleteRefreshTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockTokenStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) +} + +func (_m *MockTokenStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockTokenStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} + +func (_m *MockTokenStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockTokenStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) +} diff --git a/oauth2.go b/oauth2.go index 5104e629..2bab3d51 100644 --- a/oauth2.go +++ b/oauth2.go @@ -5,6 +5,8 @@ import ( "net/http" ) +const DefaultRequiredScopeName = "core" + // OAuth2Provider is an interface that enables you to write OAuth2 handlers with only a few lines of code. // Check fosite.Fosite for an implementation of this interface. type OAuth2Provider interface { @@ -24,7 +26,7 @@ type OAuth2Provider interface { // additional query parameters. The endpoint URI MUST NOT include a // fragment component. // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) - NewAuthorizeRequest(context.Context, *http.Request) (AuthorizeRequester, error) + NewAuthorizeRequest(ctx context.Context, req *http.Request) (AuthorizeRequester, error) // NewAuthorizeResponse iterates through all response type handlers and returns their result or // ErrUnsupportedResponseType if none of the handler's were able to handle it. @@ -38,7 +40,7 @@ type OAuth2Provider interface { // If an authorization request is missing the "response_type" parameter, // or if the response type is not understood, the authorization server // MUST return an error response as described in Section 4.1.2.1. - NewAuthorizeResponse(ctx context.Context, req *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) + NewAuthorizeResponse(ctx context.Context, req *http.Request, requester AuthorizeRequester, session interface{}) (AuthorizeResponder, error) // WriteAuthorizeError returns the error codes to the redirection endpoint or shows the error to the user, if no valid // redirect uri was given. Implements rfc6749#section-4.1.2.1 @@ -53,7 +55,7 @@ type OAuth2Provider interface { // fragment component. // * https://tools.ietf.org/html/rfc6749#section-4.1.2.1 (everything) // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) - WriteAuthorizeError(http.ResponseWriter, AuthorizeRequester, error) + WriteAuthorizeError(rw http.ResponseWriter, requester AuthorizeRequester, err error) // WriteAuthorizeResponse persists the AuthorizeSession in the store and redirects the user agent to the provided // redirect url or returns an error if storage failed. @@ -67,16 +69,10 @@ type OAuth2Provider interface { // authorization server during the client registration process or when // making the authorization request. // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) - WriteAuthorizeResponse(http.ResponseWriter, AuthorizeRequester, AuthorizeResponder) - - NewAccessRequest(_ context.Context, r *http.Request) (AccessRequester, error) - LoadAccessRequestSession(ctx context.Context, ar AccessRequester, r *http.Request, session interface{}) error -} + WriteAuthorizeResponse(rw http.ResponseWriter, requester AuthorizeRequester, responder AuthorizeResponder) -// Fosite implements OAuth2Provider -type Fosite struct { - Store Storage - AuthorizeEndpointHandlers []AuthorizeEndpointHandler - TokenEndpointSessionLoaders []TokenEndpointSessionLoader - TokenEndpointHandlers []TokenEndpointHandler + NewAccessRequest(ctx context.Context, req *http.Request, session interface{}) (AccessRequester, error) + //NewAccessResponse(_ context.Context, req *http.Request, requester AccessRequester, session interface{}) (AccessResponder, error) + //WriteAccessError(rw http.ResponseWriter, requester AuthorizeRequester, err error) + //WriteAccessResponse(rw http.ResponseWriter, requester AuthorizeRequester, responder AuthorizeResponder) } diff --git a/oauth2_test.go b/oauth2_test.go index 72553a2e..e7a0ce24 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -10,7 +10,7 @@ import ( "github.com/golang/mock/gomock" "github.com/gorilla/mux" "github.com/ory-am/fosite/enigma" - "github.com/ory-am/fosite/plugin/code" + "github.com/ory-am/fosite/handler/authorize/explicit" "github.com/parnurzeal/gorequest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -26,32 +26,32 @@ var ts *httptest.Server var mockStore *MockStorage var mockClient *MockClient -var mockPluginCodeStore *MockCodeResponseTypeStorage +var mockAuthStore *MockAuthorizeStorage func TestFosite(t *testing.T) { ctrl := gomock.NewController(t) mockStore = NewMockStorage(ctrl) mockClient = NewMockClient(ctrl) - mockPluginCodeStore = NewMockCodeResponseTypeStorage(ctrl) + mockAuthStore = NewMockAuthorizeStorage(ctrl) defer ctrl.Finish() - codeHandler := &code.CodeAuthorizeEndpointHandler{ + authExplicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, - Store: mockPluginCodeStore, + Store: mockAuthStore, } oauth2 := &Fosite{ Store: mockStore, AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{ - codeHandler, + authExplicitHandler, }, } oauth2TestAuthorizeCodeWorkFlow(oauth2, t, func() { mockStore = NewMockStorage(ctrl) mockClient = NewMockClient(ctrl) - mockPluginCodeStore = NewMockCodeResponseTypeStorage(ctrl) + mockAuthStore = NewMockAuthorizeStorage(ctrl) oauth2.Store = mockStore - codeHandler.Store = mockPluginCodeStore + authExplicitHandler.Store = mockAuthStore }) } @@ -132,7 +132,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecret)).AnyTimes().Return(true) mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) - mockPluginCodeStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, expectStatusCode: http.StatusOK, expectPath: "/cb", diff --git a/plugin/code/session.go b/plugin/code/session.go deleted file mode 100644 index 5ec29b3e..00000000 --- a/plugin/code/session.go +++ /dev/null @@ -1,10 +0,0 @@ -package code - -type AuthorizeCodeSession struct { - Signature []byte - ResponseTypes []string - ClientID string - Scopes []string - RedirectURI string - State string -} diff --git a/plugin/code/storage.go b/plugin/code/storage.go deleted file mode 100644 index f11e5b5a..00000000 --- a/plugin/code/storage.go +++ /dev/null @@ -1,11 +0,0 @@ -package code - -import "github.com/ory-am/fosite" - -type CodeResponseTypeStorage interface { - CreateAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error - - GetAuthorizeCodeSession(code string, authorizeRequest fosite.AuthorizeRequester, extra interface{}) error - - DeleteAuthorizeCodeSession(code string) error -} diff --git a/plugin/oidc/id_token.go b/plugin/oidc/id_token.go deleted file mode 100644 index 12f3e4c3..00000000 --- a/plugin/oidc/id_token.go +++ /dev/null @@ -1 +0,0 @@ -package authorize diff --git a/rand/bytes.go b/rand/bytes.go index c1532a77..80478507 100644 --- a/rand/bytes.go +++ b/rand/bytes.go @@ -2,7 +2,6 @@ package rand import ( "crypto/rand" - "github.com/go-errors/errors" ) // RandomBytes returns n random bytes by reading from crypto/rand.Reader diff --git a/service/oauth2.go b/service/oauth2.go deleted file mode 100644 index cb0808e9..00000000 --- a/service/oauth2.go +++ /dev/null @@ -1,9 +0,0 @@ -package service - -import . "github.com/ory-am/fosite" - -func NewFosite(store Storage) *Fosite { - return &Fosite{ - Store: store, - } -} From 9f482ef50711b608dbfb72022ef998f947f0487a Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 00:32:57 +0100 Subject: [PATCH 28/47] all: access request api draft --- README.md | 2 +- access_error.go | 25 +++ access_request.go | 115 +++------- access_request_handler.go | 84 +++++++ access_request_handler_test.go | 209 ++++++++++++++++++ access_request_test.go | 16 ++ access_response.go | 49 ++++ access_response_test.go | 23 ++ access_write.go | 13 ++ access_write_test.go | 1 + authorize_response_handler_test.go | 2 +- handler/authorize/explicit/explicit_token.go | 9 +- internal/access_request.go | 18 ++ ...access__response.go => access_response.go} | 0 oauth2.go | 19 +- oauth2_test.go | 11 +- 16 files changed, 500 insertions(+), 96 deletions(-) create mode 100644 access_error.go create mode 100644 access_request_handler.go create mode 100644 access_request_handler_test.go create mode 100644 access_request_test.go create mode 100644 access_response_test.go create mode 100644 access_write.go create mode 100644 access_write_test.go rename internal/{access__response.go => access_response.go} (100%) diff --git a/README.md b/README.md index cca1d3f0..1e694b52 100644 --- a/README.md +++ b/README.md @@ -324,7 +324,7 @@ mockgen -destination internal/token_handler.go github.com/ory-am/fosite TokenEnd **Create stateful "context" mocks** ``` mockgen -destination internal/access_request.go github.com/ory-am/fosite AccessRequester -mockgen -destination internal/access__response.go github.com/ory-am/fosite AccessResponder +mockgen -destination internal/access_response.go github.com/ory-am/fosite AccessResponder mockgen -destination internal/authorize_request.go github.com/ory-am/fosite AuthorizeRequester mockgen -destination internal/authorize_response.go github.com/ory-am/fosite AuthorizeResponder ``` diff --git a/access_error.go b/access_error.go new file mode 100644 index 00000000..ed0711ec --- /dev/null +++ b/access_error.go @@ -0,0 +1,25 @@ +package fosite + +import ( + "encoding/json" + "fmt" + "net/http" +) + +func (c *Fosite) WriteAccessError(rw http.ResponseWriter, requester AccessRequester, err error) { + rw.Header().Set("Content-Type", "application/json;charset=UTF-8") + + rfcerr := ErrorToRFC6749Error(err) + js, err := json.Marshal(rfcerr) + if err != nil { + http.Error(rw, fmt.Sprintf(`{"error": "%s"}`, err.Error()), http.StatusInternalServerError) + return + } + + rw.WriteHeader(http.StatusBadRequest) + if rfcerr.Name == errServerErrorName { + rw.WriteHeader(http.StatusInternalServerError) + } + + rw.Write(js) +} diff --git a/access_request.go b/access_request.go index 8fab31ae..dfddc5d4 100644 --- a/access_request.go +++ b/access_request.go @@ -1,112 +1,57 @@ package fosite import ( - "github.com/go-errors/errors" "github.com/ory-am/fosite/client" - "golang.org/x/net/context" - "net/http" "time" ) type AccessRequester interface { + // GetGrantType returns the requests grant type. GetGrantType() string + + // GetClient returns the requests client. GetClient() client.Client + + // GetRequestedAt returns the time the request was created. GetRequestedAt() time.Time -} -type AccessRequest struct { - GrantType string - RequestedAt time.Time - Client client.Client -} + // SetGrantTypeHandled marks a grant type as handled indicating that the response type is supported. + SetGrantTypeHandled(string) -func (a *AccessRequest) GetGrantType() string { - return a.GrantType + // DidHandleGrantType returns if the requested grant type has been handled correctly. + DidHandleGrantType() bool } -func (a *AccessRequest) GetRequestedAt() time.Time { - return a.RequestedAt -} - -func (a *AccessRequest) GetClient() client.Client { - return a.Client +type AccessRequest struct { + GrantType string + HandledGrantType []string + RequestedAt time.Time + Client client.Client } func NewAccessRequest() *AccessRequest { return &AccessRequest{ - RequestedAt: time.Now(), + RequestedAt: time.Now(), + HandledGrantType: []string{}, } } -// -// Implements -// * https://tools.ietf.org/html/rfc6749#section-2.3.1 -// Clients in possession of a client password MAY use the HTTP Basic -// authentication scheme as defined in [RFC2617] to authenticate with -// the authorization server. The client identifier is encoded using the -// "application/x-www-form-urlencoded" encoding algorithm per -// Appendix B, and the encoded value is used as the username; the client -// password is encoded using the same algorithm and used as the -// password. The authorization server MUST support the HTTP Basic -// authentication scheme for authenticating clients that were issued a -// client password. -// Including the client credentials in the request-body using the two -// parameters is NOT RECOMMENDED and SHOULD be limited to clients unable -// to directly utilize the HTTP Basic authentication scheme (or other -// password-based HTTP authentication schemes). The parameters can only -// be transmitted in the request-body and MUST NOT be included in the -// request URI. -// * https://tools.ietf.org/html/rfc6749#section-3.2.1 -// - Confidential clients or other clients issued client credentials MUST -// authenticate with the authorization server as described in -// Section 2.3 when making requests to the token endpoint. -// - If the client type is confidential or the client was issued client -// credentials (or assigned other authentication requirements), the -// client MUST authenticate with the authorization server as described -// in Section 3.2.1. -func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session interface{}) (AccessRequester, error) { - ar := NewAccessRequest() - if c.RequiredScope == "" { - c.RequiredScope = DefaultRequiredScopeName - } - - if err := r.ParseForm(); err != nil { - return ar, errors.New(ErrInvalidRequest) - } - - if session == nil { - return ar, errors.New("Session must not be nil") - } - - ar.GrantType = r.Form.Get("grant_type") - if ar.GrantType == "" { - return ar, errors.New(ErrInvalidRequest) - } - - clientID, clientSecret, ok := r.BasicAuth() - if !ok { - clientID = r.Form.Get("client_id") - } - if clientID == "" { - return ar, errors.New(ErrInvalidRequest) - } +func (a *AccessRequest) DidHandleGrantType() bool { + return StringInSlice(a.GrantType, a.HandledGrantType) +} - client, err := c.Store.GetClient(clientID) - if err != nil { - return ar, errors.New(ErrInvalidClient) - } +func (a *AccessRequest) SetGrantTypeHandled(name string) { + a.HandledGrantType = append(a.HandledGrantType, name) +} - // Enforce client authentication - if !client.CompareSecretWith([]byte(clientSecret)) { - return ar, errors.New(ErrInvalidClient) - } - ar.Client = client +func (a *AccessRequest) GetGrantType() string { + return a.GrantType +} - for _, loader := range c.TokenEndpointHandlers { - if err := loader.HandleTokenEndpointRequest(ctx, ar, r, session); err != nil { - return ar, err - } - } +func (a *AccessRequest) GetRequestedAt() time.Time { + return a.RequestedAt +} - return ar, nil +func (a *AccessRequest) GetClient() client.Client { + return a.Client } diff --git a/access_request_handler.go b/access_request_handler.go new file mode 100644 index 00000000..48244df1 --- /dev/null +++ b/access_request_handler.go @@ -0,0 +1,84 @@ +package fosite + +import ( + "github.com/go-errors/errors" + "golang.org/x/net/context" + "net/http" +) + +// Implements +// * https://tools.ietf.org/html/rfc6749#section-2.3.1 +// Clients in possession of a client password MAY use the HTTP Basic +// authentication scheme as defined in [RFC2617] to authenticate with +// the authorization server. The client identifier is encoded using the +// "application/x-www-form-urlencoded" encoding algorithm per +// Appendix B, and the encoded value is used as the username; the client +// password is encoded using the same algorithm and used as the +// password. The authorization server MUST support the HTTP Basic +// authentication scheme for authenticating clients that were issued a +// client password. +// Including the client credentials in the request-body using the two +// parameters is NOT RECOMMENDED and SHOULD be limited to clients unable +// to directly utilize the HTTP Basic authentication scheme (or other +// password-based HTTP authentication schemes). The parameters can only +// be transmitted in the request-body and MUST NOT be included in the +// request URI. +// * https://tools.ietf.org/html/rfc6749#section-3.2.1 +// - Confidential clients or other clients issued client credentials MUST +// authenticate with the authorization server as described in +// Section 2.3 when making requests to the token endpoint. +// - If the client type is confidential or the client was issued client +// credentials (or assigned other authentication requirements), the +// client MUST authenticate with the authorization server as described +// in Section 3.2.1. +func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session interface{}) (AccessRequester, error) { + ar := NewAccessRequest() + if r.Method != "POST" { + return ar, errors.New(ErrInvalidRequest) + } + + if c.RequiredScope == "" { + c.RequiredScope = DefaultRequiredScopeName + } + + if err := r.ParseForm(); err != nil { + return ar, errors.New(ErrInvalidRequest) + } + + if session == nil { + return ar, errors.New("Session must not be nil") + } + + ar.GrantType = r.Form.Get("grant_type") + if ar.GrantType == "" { + return ar, errors.New(ErrInvalidRequest) + } + + clientID, clientSecret, ok := r.BasicAuth() + if !ok { + return ar, errors.New(ErrInvalidRequest) + } + + client, err := c.Store.GetClient(clientID) + if err != nil { + return ar, errors.New(ErrInvalidClient) + } + + // Enforce client authentication + if !client.CompareSecretWith([]byte(clientSecret)) { + return ar, errors.New(ErrInvalidClient) + } + ar.Client = client + + for _, loader := range c.TokenEndpointHandlers { + if err := loader.HandleTokenEndpointRequest(ctx, ar, r, session); err != nil { + return ar, err + } + } + + if !ar.DidHandleGrantType() { + return ar, errors.New(ErrUnsupportedGrantType) + } + + return ar, nil +} diff --git a/access_request_handler_test.go b/access_request_handler_test.go new file mode 100644 index 00000000..c9c48cb3 --- /dev/null +++ b/access_request_handler_test.go @@ -0,0 +1,209 @@ +package fosite_test + +import ( + "encoding/base64" + "fmt" + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "golang.org/x/net/context" + "net/http" + "net/url" + "testing" +) + +func TestNewAccessRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockStorage(ctrl) + client := internal.NewMockClient(ctrl) + handler := internal.NewMockTokenEndpointHandler(ctrl) + defer ctrl.Finish() + + fosite := &Fosite{Store: store} + for k, c := range []struct { + header http.Header + form url.Values + mock func() + method string + expectErr error + expect *AccessRequest + handlers TokenEndpointHandlers + }{ + { + header: http.Header{}, + expectErr: ErrInvalidRequest, + method: "POST", + mock: func() {}, + }, + { + header: http.Header{}, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + mock: func() {}, + expectErr: ErrInvalidRequest, + }, + { + header: http.Header{}, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + "client_id": {"foo"}, + }, + expectErr: ErrInvalidRequest, + mock: func() {}, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(nil, errors.New("")) + }, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "GET", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrInvalidRequest, + mock: func() {}, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(nil, errors.New("")) + }, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrInvalidClient, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(false) + }, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrServerError, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) + }, + handlers: TokenEndpointHandlers{handler}, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrUnsupportedGrantType, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + expectErr: ErrUnsupportedGrantType, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, a AccessRequester, _ *http.Request, _ interface{}) { + a.SetGrantTypeHandled("bar") + }).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, a AccessRequester, _ *http.Request, _ interface{}) { + a.SetGrantTypeHandled("foo") + }).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + expect: &AccessRequest{ + GrantType: "foo", + HandledGrantType: []string{"foo"}, + Client: client, + }, + }, + } { + r := &http.Request{ + Header: c.header, + PostForm: c.form, + Form: c.form, + Method: c.method, + } + c.mock() + ctx := NewContext() + fosite.TokenEndpointHandlers = c.handlers + ar, err := fosite.NewAccessRequest(ctx, r, &struct{}{}) + is := errors.Is(c.expectErr, err) + assert.True(t, is, "%d\nwant: %s \ngot: %s", k, c.expectErr, err) + if !is { + t.Logf("Error occured: %s", err.(*errors.Error).ErrorStack()) + } + if err == nil { + pkg.AssertObjectKeysEqual(t, c.expect, ar, "GrantType", "Client") + assert.NotNil(t, ar.GetRequestedAt()) + } + t.Logf("Passed test case %d", k) + } +} + +func basicAuth(username, password string) string { + return "Basic " + base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", username, password))) +} diff --git a/access_request_test.go b/access_request_test.go new file mode 100644 index 00000000..5e3f102b --- /dev/null +++ b/access_request_test.go @@ -0,0 +1,16 @@ +package fosite + +import ( + "github.com/ory-am/fosite/client" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAccessRequest(t *testing.T) { + ar := NewAccessRequest() + ar.GrantType = "foobar" + ar.Client = &client.SecureClient{} + assert.NotNil(t, ar.GetRequestedAt()) + assert.Equal(t, ar.GrantType, ar.GetGrantType()) + assert.Equal(t, ar.Client, ar.GetClient()) +} diff --git a/access_response.go b/access_response.go index 11c228bf..dc3950e5 100644 --- a/access_response.go +++ b/access_response.go @@ -2,9 +2,58 @@ package fosite type AccessResponder interface { SetExtra(key string, value interface{}) + GetExtra(key string) interface{} + SetAccessToken(string) + SetTokenType(string) + GetAccessToken() string + GetTokenType() string + + ToMap() map[string]interface{} +} + +func NewAccessResponse() AccessResponder { + return &AccessResponse{ + Extra: map[string]interface{}{}, + } +} + +type AccessResponse struct { + Extra map[string]interface{} + AccessToken string + TokenType string +} + +func (a *AccessResponse) SetExtra(key string, value interface{}) { + a.Extra[key] = value +} + +func (a *AccessResponse) GetExtra(key string) interface{} { + return a.Extra[key] +} + +func (a *AccessResponse) SetAccessToken(token string) { + a.AccessToken = token +} + +func (a *AccessResponse) SetTokenType(name string) { + a.TokenType = name +} + +func (a *AccessResponse) GetAccessToken() string { + return a.AccessToken +} + +func (a *AccessResponse) GetTokenType() string { + return a.TokenType +} + +func (a *AccessResponse) ToMap() map[string]interface{} { + a.Extra["access_token"] = a.GetAccessToken() + a.Extra["token_type"] = a.GetTokenType() + return a.Extra } diff --git a/access_response_test.go b/access_response_test.go new file mode 100644 index 00000000..8114731c --- /dev/null +++ b/access_response_test.go @@ -0,0 +1,23 @@ +package fosite_test + +import ( + . "github.com/ory-am/fosite" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAccessResponse(t *testing.T) { + ar := NewAccessResponse() + ar.SetAccessToken("access") + ar.SetTokenType("bearer") + ar.SetExtra("access_token", "invalid") + ar.SetExtra("foo", "bar") + assert.Equal(t, "access", ar.GetAccessToken()) + assert.Equal(t, "bearer", ar.GetTokenType()) + assert.Equal(t, "bar", ar.GetExtra("foo")) + assert.Equal(t, map[string]interface{}{ + "access_token": "access", + "token_type": "bearer", + "foo": "bar", + }, ar.ToMap()) +} diff --git a/access_write.go b/access_write.go new file mode 100644 index 00000000..f74c0e72 --- /dev/null +++ b/access_write.go @@ -0,0 +1,13 @@ +package fosite + +import ( + "github.com/ory-am/common/pkg" + "net/http" +) + +func (c *Fosite) WriteAccessResponse(rw http.ResponseWriter, requester AccessRequester, responder AccessResponder) { + rw.Header().Set("Content-Type", "application/json;charset=UTF-8") + rw.Header().Set("Cache-Control", "no-store") + rw.Header().Set("Pragma", "no-cache") + pkg.WriteJSON(rw, responder.ToMap()) +} diff --git a/access_write_test.go b/access_write_test.go new file mode 100644 index 00000000..70511eaa --- /dev/null +++ b/access_write_test.go @@ -0,0 +1 @@ +package fosite diff --git a/authorize_response_handler_test.go b/authorize_response_handler_test.go index 55fb7e28..89154205 100644 --- a/authorize_response_handler_test.go +++ b/authorize_response_handler_test.go @@ -1,11 +1,11 @@ package fosite_test import ( + "github.com/go-errors/errors" "github.com/golang/mock/gomock" . "github.com/ory-am/fosite" . "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" - "github.com/vektra/errors" "golang.org/x/net/context" "net/http" "net/url" diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go index 4f69a6f2..26384f6d 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/authorize/explicit/explicit_token.go @@ -35,6 +35,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. if err := c.Generator.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { return errors.New(ErrInvalidRequest) } + ar, err := c.Store.GetAuthorizeCodeSession(challenge.Signature, &authSess) if err == pkg.ErrNotFound { return errors.New(ErrInvalidRequest) @@ -79,6 +80,12 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. } func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error { + // grant_type REQUIRED. + // Value MUST be set to "authorization_code". + if requester.GetGrantType() != "authorize_code" { + return nil + } + access, err := c.Generator.GenerateChallenge(requester.GetClient().GetHashedSecret()) if err != nil { return errors.New(ErrServerError) @@ -88,10 +95,10 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx conte if err != nil { return errors.New(ErrServerError) } + responder.SetAccessToken(access.String()) responder.SetTokenType("bearer") responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) - if err := c.Store.DeleteAuthorizeCodeSession(req.Form.Get("code")); err != nil { return errors.New(ErrServerError) } diff --git a/internal/access_request.go b/internal/access_request.go index 940f8f0e..9a028bc1 100644 --- a/internal/access_request.go +++ b/internal/access_request.go @@ -30,6 +30,16 @@ func (_m *MockAccessRequester) EXPECT() *_MockAccessRequesterRecorder { return _m.recorder } +func (_m *MockAccessRequester) DidHandleGrantType() bool { + ret := _m.ctrl.Call(_m, "DidHandleGrantType") + ret0, _ := ret[0].(bool) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) DidHandleGrantType() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DidHandleGrantType") +} + func (_m *MockAccessRequester) GetClient() client.Client { ret := _m.ctrl.Call(_m, "GetClient") ret0, _ := ret[0].(client.Client) @@ -59,3 +69,11 @@ func (_m *MockAccessRequester) GetRequestedAt() time.Time { func (_mr *_MockAccessRequesterRecorder) GetRequestedAt() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRequestedAt") } + +func (_m *MockAccessRequester) SetGrantTypeHandled(_param0 string) { + _m.ctrl.Call(_m, "SetGrantTypeHandled", _param0) +} + +func (_mr *_MockAccessRequesterRecorder) SetGrantTypeHandled(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetGrantTypeHandled", arg0) +} diff --git a/internal/access__response.go b/internal/access_response.go similarity index 100% rename from internal/access__response.go rename to internal/access_response.go diff --git a/oauth2.go b/oauth2.go index 2bab3d51..0e586c98 100644 --- a/oauth2.go +++ b/oauth2.go @@ -71,8 +71,23 @@ type OAuth2Provider interface { // * https://tools.ietf.org/html/rfc6749#section-3.1.2.2 (everything MUST be implemented) WriteAuthorizeResponse(rw http.ResponseWriter, requester AuthorizeRequester, responder AuthorizeResponder) + // NewAccessRequest creates a new access request object and validates + // various parameters. + // + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#section-3.2 (everything) + // * https://tools.ietf.org/html/rfc6749#section-3.2.1 (everything) + // + // Furthermore the registered handlers should implement their specs accordingly. NewAccessRequest(ctx context.Context, req *http.Request, session interface{}) (AccessRequester, error) + //NewAccessResponse(_ context.Context, req *http.Request, requester AccessRequester, session interface{}) (AccessResponder, error) - //WriteAccessError(rw http.ResponseWriter, requester AuthorizeRequester, err error) - //WriteAccessResponse(rw http.ResponseWriter, requester AuthorizeRequester, responder AuthorizeResponder) + + // WriteAccessError + // + // The following specs must be considered in any implementation of this method: + // * https://tools.ietf.org/html/rfc6749#section-5.2 (everything) + WriteAccessError(rw http.ResponseWriter, requester AccessRequester, err error) + + WriteAccessResponse(rw http.ResponseWriter, requester AccessRequester, responder AccessResponder) } diff --git a/oauth2_test.go b/oauth2_test.go index e7a0ce24..6f56252d 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -1,22 +1,21 @@ package fosite_test import ( - . "github.com/ory-am/fosite" - . "github.com/ory-am/fosite/internal" - "net/http" - "testing" - - "errors" + "github.com/go-errors/errors" "github.com/golang/mock/gomock" "github.com/gorilla/mux" + . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" "github.com/ory-am/fosite/handler/authorize/explicit" + . "github.com/ory-am/fosite/internal" "github.com/parnurzeal/gorequest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/net/context" goauth2 "golang.org/x/oauth2" + "net/http" "net/http/httptest" + "testing" ) var clientID = "foo" From 8de3f10d89b47ad0d23cf13b425442393f51e104 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 12:45:58 +0100 Subject: [PATCH 29/47] access: finalized token endpoint api --- access_response_handler.go | 25 +++++++++++ access_response_handler_test.go | 76 +++++++++++++++++++++++++++++++++ oauth2.go | 12 +++++- 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 access_response_handler.go create mode 100644 access_response_handler_test.go diff --git a/access_response_handler.go b/access_response_handler.go new file mode 100644 index 00000000..68066065 --- /dev/null +++ b/access_response_handler.go @@ -0,0 +1,25 @@ +package fosite + +import ( + "github.com/go-errors/errors" + "golang.org/x/net/context" + "net/http" +) + +func (f *Fosite) NewAccessResponse(ctx context.Context, req *http.Request, requester AccessRequester, session interface{}) (AccessResponder, error) { + var err error + var tk TokenEndpointHandler + + response := NewAccessResponse() + for _, tk = range f.TokenEndpointHandlers { + if err = tk.HandleTokenEndpointResponse(ctx, response, requester, req, session); err != nil { + return nil, errors.Wrap(err, 1) + } + } + + if response.GetAccessToken() == "" || response.GetTokenType() == "" { + return nil, ErrUnsupportedGrantType + } + + return response, nil +} diff --git a/access_response_handler_test.go b/access_response_handler_test.go new file mode 100644 index 00000000..b98709cd --- /dev/null +++ b/access_response_handler_test.go @@ -0,0 +1,76 @@ +package fosite_test + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "golang.org/x/net/context" + "net/http" + "testing" +) + +func TestNewAccessResponse(t *testing.T) { + ctrl := gomock.NewController(t) + handler := internal.NewMockTokenEndpointHandler(ctrl) + defer ctrl.Finish() + + f := &Fosite{} + for k, c := range []struct { + handlers TokenEndpointHandlers + mock func() + expectErr error + expect AccessResponder + }{ + { + mock: func() {}, + handlers: TokenEndpointHandlers{}, + expectErr: ErrUnsupportedGrantType, + }, + { + mock: func() { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) + }, + handlers: TokenEndpointHandlers{handler}, + expectErr: ErrServerError, + }, + { + mock: func() { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + expectErr: ErrUnsupportedGrantType, + }, + { + mock: func() { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, resp AccessResponder, _ AccessRequester, _ *http.Request, _param4 interface{}) { + resp.SetAccessToken("foo") + }).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + expectErr: ErrUnsupportedGrantType, + }, + { + mock: func() { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, resp AccessResponder, _ AccessRequester, _ *http.Request, _param4 interface{}) { + resp.SetAccessToken("foo") + resp.SetTokenType("bar") + }).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + expect: &AccessResponse{ + Extra: map[string]interface{}{}, + AccessToken: "foo", + TokenType: "bar", + }, + }, + } { + f.TokenEndpointHandlers = c.handlers + c.mock() + ar, err := f.NewAccessResponse(nil, nil, nil, struct{}{}) + assert.True(t, errors.Is(c.expectErr, err), "%d", k) + assert.Equal(t, ar, c.expect) + t.Logf("Passed test case %d", k) + } +} diff --git a/oauth2.go b/oauth2.go index 0e586c98..6c9f4649 100644 --- a/oauth2.go +++ b/oauth2.go @@ -81,13 +81,21 @@ type OAuth2Provider interface { // Furthermore the registered handlers should implement their specs accordingly. NewAccessRequest(ctx context.Context, req *http.Request, session interface{}) (AccessRequester, error) - //NewAccessResponse(_ context.Context, req *http.Request, requester AccessRequester, session interface{}) (AccessResponder, error) + // NewAccessResponse creates a new access response and validates that access_token and token_type are set. + // + // The following specs must be considered in any implementation of this method: + // https://tools.ietf.org/html/rfc6749#section-5.1 + NewAccessResponse(_ context.Context, req *http.Request, requester AccessRequester, session interface{}) (AccessResponder, error) - // WriteAccessError + // WriteAccessError writes an access request error response. // // The following specs must be considered in any implementation of this method: // * https://tools.ietf.org/html/rfc6749#section-5.2 (everything) WriteAccessError(rw http.ResponseWriter, requester AccessRequester, err error) + // WriteAccessResponse writes the access response. + // + // The following specs must be considered in any implementation of this method: + // https://tools.ietf.org/html/rfc6749#section-5.1 WriteAccessResponse(rw http.ResponseWriter, requester AccessRequester, responder AccessResponder) } From 336a2cd10ac08ca6867952555802c225c475c17a Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 13:14:11 +0100 Subject: [PATCH 30/47] docs: updated readme docs --- README.md | 91 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 1e694b52..8cdafd9d 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ If you are here to contribute, feel free to check [this Pull Request](https://gi [![Build Status](https://travis-ci.org/ory-am/fosite.svg?branch=master)](https://travis-ci.org/ory-am/fosite?branch=master) [![Coverage Status](https://coveralls.io/repos/ory-am/fosite/badge.svg?branch=master&service=github)](https://coveralls.io/github/ory-am/fosite?branch=master) -Fosite is in active development. We will use gopkg for releasing new versions of the API. +Fosite is in active development. Most of the framework is done and tested. We will use gopkg for releasing new versions of the API. Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *nightly*. Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. @@ -27,19 +27,19 @@ These Standards have been reviewed during the development of Fosite: - [Motivation](#motivation) - [A word on quality](#a-word-on-quality) - [A word on security](#a-word-on-security) -- [Security](#security) - - [Encourage security by enforcing it](#encourage-security-by-enforcing-it) - - [Secure Tokens](#secure-tokens) - - [No state, no token](#no-state-no-token) +- [Security first or encouraging security by enforcing it](#security-first-or-encouraging-security-by-enforcing-it) - [Opaque tokens](#opaque-tokens) - [Advanced Token Validation](#advanced-token-validation) - [Encrypt credentials at rest](#encrypt-credentials-at-rest) - [Implement peer reviewed IETF Standards](#implement-peer-reviewed-ietf-standards) - [Provide extensibility and interoperability](#provide-extensibility-and-interoperability) - [Usage](#usage) - - [Authorize Endpoint](#authorize-endpoint) - - [Token Endpoint](#token-endpoint) + - [Installation](#installation) + - [[Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1)](#authorization-endpointhttpstoolsietforghtmlrfc6749section-31) + - [[Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2)](#token-endpointhttpstoolsietforghtmlrfc6749section-32) - [Extensible handlers](#extensible-handlers) +- [Develop fosite](#develop-fosite) + - [Useful commands](#useful-commands) - [Hall of Fame](#hall-of-fame) @@ -89,19 +89,21 @@ of things we implemented in Fosite: * [Validate Pre-Registered "redirect_uri"](https://tools.ietf.org/html/rfc6819#section-5.2.3.5) * [Binding of Authorization "code" to "client_id"](https://tools.ietf.org/html/rfc6819#section-5.2.4.4) * [Binding of Authorization "code" to "redirect_uri"](https://tools.ietf.org/html/rfc6819#section-5.2.4.6) +* [Opaque access tokens](https://tools.ietf.org/html/rfc6749#section-1.4) +* [Opaque refresh tokens](https://tools.ietf.org/html/rfc6749#section-1.5) Not implemented yet: * [Use of Asymmetric Cryptography](https://tools.ietf.org/html/rfc6819#section-5.1.4.1.5) - enigma should use asymmetric cryptography per default instead of HMAC-SHA (but support both). +Additionally, we added these safeguards: +* Enforcing random states: Without a random-looking state the request will fail. +* + Sections below [Section 5](https://tools.ietf.org/html/rfc6819#section-5) that are not covered in the list above should be reviewed by you. If you think that a specific section should be something that is covered in Fosite, feel free to create an [issue](https://github.com/ory-am/fosite/issues). -#### No state, no token - -Without a random-looking state, *GET /oauth2/auth* will fail. - #### Opaque tokens Token generators should know nothing about the request or context. @@ -158,7 +160,7 @@ To use the unstable master branch, which is only recommended for testing purpose go get gopkg.in/ory-am/fosite.v0/... ``` -### Authorize Endpoint +### [Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1) ```go package main @@ -248,63 +250,96 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { } ``` -### Token Endpoint - -draft +### [Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2) ```go func handleToken(rw http.ResponseWriter, req *http.Request) { + // First we need to define a session object. Some handlers might require the session to implement + // a specific interface, so keep that in mind when using them. var mySessionData = struct { User string UsingIdentityProvider string Foo string } + // This will create an access request object and iterate through the registered TokenEndpointHandlers. + // These might populate mySessionData so do not pass nils. accessRequest, err := oauth2.NewAccessRequest(ctx, r, &mySessionData) if err != nil { oauth2.WriteAccessError(rw, req, err) return } + // Now we have access to mySessionData's populated values and can do crazy things. + + // Next we create a response for the access request. Again, we iterate through the TokenEndpointHandlers + // and aggregate the result in response. response, err := oauth2.NewAccessResponse(ctx, accessRequest, r, &mySessionData) if err != nil { oauth2.WriteAccessError(rw, req, err) return } + // All done, send the response. oauth2.WriteAccessResponse(rw, accessRequest, response) } ``` ### Extensible handlers -You can replace Fosite's inner workings, for example response type (/auth endpoint) handlers or grant type -(/token endpoint) handlers. +You can replace the Token and Authorize endpoint logic by modifying `Fosite.TokenEndpointHandlers` and +`Fosite.AuthorizeEndpointHandlers`. + +Let's take the explicit authorize handler. He is responsible for handling the +[authorize code workflow](https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#web-server-apps). -Let's take the code handler. He is responsible for handling the -[authorize_code workflow](https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#web-server-apps). -If you want to enable him, you could do it like this: +If you want to enable the handler able to handle this workflow, you can do this: ```go -codeHandler := &code.CodeAuthorizeEndpointHandler{ +handler := &explicit.AuthorizeExplicitEndpointHandler{ Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, Store: myCodeStore, // Needs to implement CodeResponseTypeStorage } -oauth2 := &Fosite{ - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{ - codeHandler, +oauth2 := &fosite.Fosite{ + AuthorizeEndpointHandlers: []fosite.AuthorizeEndpointHandler{ + handler, + }, + TokenEndpointHandlers: []fosite.TokenEndpointHandler{ + handler, }, } ``` -Easy, right? You can add or remove any handler you wish like this, even custom ones and extend OAuth2 by, for example, OpenID -Connect. +As you probably noticed, there are two types of handlers, one for the [authorization */auth* endpoint](https://tools.ietf.org/html/rfc6749#section-3.1) and one for the [token +*/token* endpoint](https://tools.ietf.org/html/rfc6749#section-3.2). The `AuthorizeExplicitEndpointHandler` implements +API requirements for both endpoints, while, for example, the `AuthorizeImplicitEndpointHandler` only implements +the `AuthorizeEndpointHandler` API. + +You can find a complete list of handlers inside the [handler directory](). A short list is documented here: -The token endpoint is still in the making so stay tuned on how to run custom token endpoint handlers. +* *github.com/ory-am/fosite/handler/authorize/explicit.AuthorizeExplicitEndpointHandler:* implements the + [Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1) +* *github.com/ory-am/fosite/handler/authorize/implicit.AuthorizeImplicitEndpointHandler:* implements the + [Implicit Grant](https://tools.ietf.org/html/rfc6749#section-4.2) +* *github.com/ory-am/fosite/handler/authorize/token/owner.TokenROPasswordCredentialsEndpointHandler:* implements the + [Resource Owner Password Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.3) +* *github.com/ory-am/fosite/handler/authorize/token/client.TokenClientCredentialsEndpointHandler:* implements the + [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4) ## Develop fosite -This section is work in progress. +You need git and golang installed on your system. + +``` +go get github.com/ory-am/fosite/... -d +cd $GOPATH/src/ github.com/ory-am/fosite +git status +git remote add myfork +go test ./... +``` + +Simple, right? Now you are ready to go! Make sure to run `go test ./...` often, detecting problems with your code +rather sooner than later. ### Useful commands From 4736e284b327f0941e58073bf860caca4117c545 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 13:54:04 +0100 Subject: [PATCH 31/47] authorize/explicit: minor name refactoring and tests for authorize endpoint --- README.md | 41 +++++++++- handler/authorize/explicit/explicit_auth.go | 14 +++- .../authorize/explicit/explicit_auth_test.go | 78 +++++++++++++++++++ handler/authorize/explicit/explicit_token.go | 6 +- oauth2_test.go | 4 +- 5 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 handler/authorize/explicit/explicit_auth_test.go diff --git a/README.md b/README.md index 8cdafd9d..a6da4d66 100644 --- a/README.md +++ b/README.md @@ -167,13 +167,38 @@ package main import( "github.com/ory-am/fosite" - "github.com/ory-am/fosite/service" + "github.com/ory-am/handler/authorize/explicit" "golang.org/x/net/context" ) +var oauth2 fosite.OAuth2Provider = fositeFactory() -var store = fosite.NewPostgreSQLStore() -var oauth2 = service.NewDefaultOAuth2(store) +func fositeFactory() fosite.OAuth2Provider { + // NewMyStorageImplementation should implement all storage interfaces. + var store = newMyStorageImplementation() + + f := fosite.NewDefaultFosite(store) + accessTokenLifespan := time.Hour + + // Let's enable the explicit authorize code grant! + explicitHandler := &explicit.AuthorizeExplicitEndpointHandler struct { + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AuthCodeLifespan: time.Minute * 10, + } + f.AuthorizeEndpointHandlers.Add(explicitHandler) + f.TokenEndpointHandlers.Add(explicitHandler) + + // Next let's enable the implicit one! + explicitHandler := &implicit.AuthorizeImplicitEndpointHandler struct { + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.AuthorizeEndpointHandlers.Add(implicitHandler) + + return f +} // Let's assume that we're in a http handler func handleAuth(rw http.ResponseWriter, r *http.Request) { @@ -248,11 +273,15 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // Done! The client should now have a valid authorize code! } + +// ... ``` ### [Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2) ```go +// ... + func handleToken(rw http.ResponseWriter, req *http.Request) { // First we need to define a session object. Some handlers might require the session to implement // a specific interface, so keep that in mind when using them. @@ -326,6 +355,12 @@ You can find a complete list of handlers inside the [handler directory](). A sho * *github.com/ory-am/fosite/handler/authorize/token/client.TokenClientCredentialsEndpointHandler:* implements the [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4) +### Replaceable storage + +Fosite does not ship a storage implementation yet. To get fosite running, you need to implement `github.com/ory-am/fosite.Storage`. +Additionally, most of the token / authorize endpoint handlers require a store as well. It is probably smart to +implement all of those interfaces in one struct. + ## Develop fosite You need git and golang installed on your system. diff --git a/handler/authorize/explicit/explicit_auth.go b/handler/authorize/explicit/explicit_auth.go index 9e411219..5d7f76b9 100644 --- a/handler/authorize/explicit/explicit_auth.go +++ b/handler/authorize/explicit/explicit_auth.go @@ -15,16 +15,24 @@ const authCodeDefaultLifespan = time.Hour / 2 // CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 type AuthorizeExplicitEndpointHandler struct { - Generator enigma.Enigma - Store AuthorizeStorage + // Enigma is the algorithm responsible for creating a validatable, opaque string. + Enigma enigma.Enigma + + // Store is used to persist session data across requests. + Store AuthorizeStorage + + // AuthCodeLifespan defines the lifetime of an authorize code. AuthCodeLifespan time.Duration + + // AccessTokenLifespan defines the lifetime of an access token. + AccessTokenLifespan time.Duration } func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, req *http.Request, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code - code, err := c.Generator.GenerateChallenge(ar.GetClient().GetHashedSecret()) + code, err := c.Enigma.GenerateChallenge(ar.GetClient().GetHashedSecret()) if err != nil { return errors.Wrap(err, 1) } diff --git a/handler/authorize/explicit/explicit_auth_test.go b/handler/authorize/explicit/explicit_auth_test.go new file mode 100644 index 00000000..fc90dcd2 --- /dev/null +++ b/handler/authorize/explicit/explicit_auth_test.go @@ -0,0 +1,78 @@ +package explicit + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" +) + +func TestHandleAuthorizeEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockAuthorizeStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAuthorizeRequester(ctrl) + aresp := internal.NewMockAuthorizeResponder(ctrl) + defer ctrl.Finish() + + h := AuthorizeExplicitEndpointHandler{ + Store: store, + Enigma: chgen, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{}) + }, + }, + { + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"foo"}) + }, + }, + { + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"code"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{Secret: []byte("foosecret")}) + chgen.EXPECT().GenerateChallenge(gomock.Eq([]byte("foosecret"))).Return(nil, fosite.ErrServerError) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{Form: url.Values{"redirect_uri": {"foobar"}}}, + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"code"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{Secret: []byte("foosecret")}) + chgen.EXPECT().GenerateChallenge(gomock.Eq([]byte("foosecret"))).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(fosite.ErrTemporarilyUnavailable) + }, + expectErr: fosite.ErrTemporarilyUnavailable, + }, + { + req: &http.Request{Form: url.Values{"redirect_uri": {"foobar"}}}, + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"code"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{Secret: []byte("foosecret")}) + chgen.EXPECT().GenerateChallenge(gomock.Eq([]byte("foosecret"))).Return(&enigma.Challenge{Key: "foo", Signature: "bar"}, nil) + store.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + aresp.EXPECT().AddQuery(gomock.Eq("code"), gomock.Eq("foo.bar")) + areq.EXPECT().SetResponseTypeHandled(gomock.Eq("code")) + }, + }, + } { + c.mock() + err := h.HandleAuthorizeEndpointRequest(nil, aresp, areq, c.req, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go index 26384f6d..f0802851 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/authorize/explicit/explicit_token.go @@ -32,7 +32,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. } // The authorization server MUST verify that the authorization code is valid - if err := c.Generator.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { + if err := c.Enigma.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { return errors.New(ErrInvalidRequest) } @@ -86,12 +86,12 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx conte return nil } - access, err := c.Generator.GenerateChallenge(requester.GetClient().GetHashedSecret()) + access, err := c.Enigma.GenerateChallenge(requester.GetClient().GetHashedSecret()) if err != nil { return errors.New(ErrServerError) } - refresh, err := c.Generator.GenerateChallenge(requester.GetClient().GetHashedSecret()) + refresh, err := c.Enigma.GenerateChallenge(requester.GetClient().GetHashedSecret()) if err != nil { return errors.New(ErrServerError) } diff --git a/oauth2_test.go b/oauth2_test.go index 6f56252d..ad41e246 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -35,8 +35,8 @@ func TestFosite(t *testing.T) { defer ctrl.Finish() authExplicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ - Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, - Store: mockAuthStore, + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, + Store: mockAuthStore, } oauth2 := &Fosite{ Store: mockStore, From d61635b26e3cd34822d4f3ffc0fe25bd4774bd45 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 17:22:27 +0100 Subject: [PATCH 32/47] =?UTF-8?q?authorize/explicit=20=E2=9C=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +- access_request_handler.go | 2 +- access_request_handler_test.go | 4 +- access_response_handler.go | 2 +- access_response_handler_test.go | 4 +- authorize_response_handler.go | 2 +- enigma/hmacsha.go | 23 +- enigma/hmacsha_test.go | 8 + handler.go | 6 +- handler/authorize/explicit/explicit_auth.go | 6 +- .../authorize/explicit/explicit_auth_test.go | 4 +- handler/authorize/explicit/explicit_token.go | 25 +- .../authorize/explicit/explicit_token_test.go | 312 ++++++++++++++++++ handler/authorize/explicit/session.go | 1 - internal/access_response.go | 10 + internal/authorize_handler.go | 2 +- internal/token_handler.go | 4 +- oauth2_test.go | 120 +++++-- 18 files changed, 491 insertions(+), 79 deletions(-) create mode 100644 handler/authorize/explicit/explicit_token_test.go delete mode 100644 handler/authorize/explicit/session.go diff --git a/README.md b/README.md index a6da4d66..33e5b962 100644 --- a/README.md +++ b/README.md @@ -98,25 +98,30 @@ Not implemented yet: Additionally, we added these safeguards: * Enforcing random states: Without a random-looking state the request will fail. -* +* Advanced Token Validation: Tokens are layouted as `.` where `` is created using HMAC-SHA256, a global secret + and the client's secret. Read more about this workflow in the [proposal](https://github.com/ory-am/fosite/issues/11). + This is what a token can look like: + `/tgBeUhWlAT8tM8Bhmnx+Amf8rOYOUhrDi3pGzmjP7c=.BiV/Yhma+5moTP46anxMT6cWW8gz5R5vpC9RbpwSDdM=` + +It is strongly encouraged to use the handlers shipped with Fosite as the follow specs. Sections below [Section 5](https://tools.ietf.org/html/rfc6819#section-5) that are not covered in the list above should be reviewed by you. If you think that a specific section should be something that is covered in Fosite, feel free to create an [issue](https://github.com/ory-am/fosite/issues). -#### Opaque tokens +The following list documents which sections of the RFCs we reviewed for each action. This list is not complete yet. -Token generators should know nothing about the request or context. +* AuthorizeExplicitEndpointHandler: Managing the authorization code grant + * [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) + * (Authorization Endpoint)[https://tools.ietf.org/html/rfc6749#section-3.1] + * (Response Type)[https://tools.ietf.org/html/rfc6749#section-3.1.1] + * (Redirection Endpoint)[https://tools.ietf.org/html/rfc6749#section-3.1.2] + * ... + * [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819) + * ... -#### Advanced Token Validation +#### -Tokens are layouted as `.` where `` is created using HMAC-SHA256, a global secret -and the client's secret. Read more about this workflow in the [proposal](https://github.com/ory-am/fosite/issues/11). - -A created token looks like: -``` -/tgBeUhWlAT8tM8Bhmnx+Amf8rOYOUhrDi3pGzmjP7c=.BiV/Yhma+5moTP46anxMT6cWW8gz5R5vpC9RbpwSDdM= -``` #### Encrypt credentials at rest @@ -283,9 +288,11 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // ... func handleToken(rw http.ResponseWriter, req *http.Request) { + ctx := NewContext() + // First we need to define a session object. Some handlers might require the session to implement // a specific interface, so keep that in mind when using them. - var mySessionData = struct { + var mySessionData struct { User string UsingIdentityProvider string Foo string @@ -293,7 +300,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { // This will create an access request object and iterate through the registered TokenEndpointHandlers. // These might populate mySessionData so do not pass nils. - accessRequest, err := oauth2.NewAccessRequest(ctx, r, &mySessionData) + accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) if err != nil { oauth2.WriteAccessError(rw, req, err) return @@ -303,7 +310,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { // Next we create a response for the access request. Again, we iterate through the TokenEndpointHandlers // and aggregate the result in response. - response, err := oauth2.NewAccessResponse(ctx, accessRequest, r, &mySessionData) + response, err := oauth2.NewAccessResponse(ctx, accessRequest, req, &mySessionData) if err != nil { oauth2.WriteAccessError(rw, req, err) return diff --git a/access_request_handler.go b/access_request_handler.go index 48244df1..2566bbda 100644 --- a/access_request_handler.go +++ b/access_request_handler.go @@ -71,7 +71,7 @@ func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session ar.Client = client for _, loader := range c.TokenEndpointHandlers { - if err := loader.HandleTokenEndpointRequest(ctx, ar, r, session); err != nil { + if err := loader.HandleTokenEndpointRequest(ctx, r, ar, session); err != nil { return ar, err } } diff --git a/access_request_handler_test.go b/access_request_handler_test.go index c9c48cb3..de1a2d69 100644 --- a/access_request_handler_test.go +++ b/access_request_handler_test.go @@ -152,7 +152,7 @@ func TestNewAccessRequest(t *testing.T) { mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, a AccessRequester, _ *http.Request, _ interface{}) { + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("bar") }).Return(nil) }, @@ -169,7 +169,7 @@ func TestNewAccessRequest(t *testing.T) { mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, a AccessRequester, _ *http.Request, _ interface{}) { + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") }).Return(nil) }, diff --git a/access_response_handler.go b/access_response_handler.go index 68066065..c3d443fb 100644 --- a/access_response_handler.go +++ b/access_response_handler.go @@ -12,7 +12,7 @@ func (f *Fosite) NewAccessResponse(ctx context.Context, req *http.Request, reque response := NewAccessResponse() for _, tk = range f.TokenEndpointHandlers { - if err = tk.HandleTokenEndpointResponse(ctx, response, requester, req, session); err != nil { + if err = tk.HandleTokenEndpointResponse(ctx, req, requester, response, session); err != nil { return nil, errors.Wrap(err, 1) } } diff --git a/access_response_handler_test.go b/access_response_handler_test.go index b98709cd..0f0430af 100644 --- a/access_response_handler_test.go +++ b/access_response_handler_test.go @@ -44,7 +44,7 @@ func TestNewAccessResponse(t *testing.T) { }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, resp AccessResponder, _ AccessRequester, _ *http.Request, _param4 interface{}) { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { resp.SetAccessToken("foo") }).Return(nil) }, @@ -53,7 +53,7 @@ func TestNewAccessResponse(t *testing.T) { }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, resp AccessResponder, _ AccessRequester, _ *http.Request, _param4 interface{}) { + handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { resp.SetAccessToken("foo") resp.SetTokenType("bar") }).Return(nil) diff --git a/authorize_response_handler.go b/authorize_response_handler.go index a1afc810..06ee1ac6 100644 --- a/authorize_response_handler.go +++ b/authorize_response_handler.go @@ -43,7 +43,7 @@ func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar A var resp = NewAuthorizeResponse() for _, h := range o.AuthorizeEndpointHandlers { - if err := h.HandleAuthorizeEndpointRequest(ctx, resp, ar, r, session); err != nil { + if err := h.HandleAuthorizeEndpointRequest(ctx, r, ar, resp, session); err != nil { return nil, err } } diff --git a/enigma/hmacsha.go b/enigma/hmacsha.go index c4a54ac3..838bf351 100644 --- a/enigma/hmacsha.go +++ b/enigma/hmacsha.go @@ -1,7 +1,6 @@ package enigma import ( - "bytes" "crypto/hmac" "crypto/sha256" "encoding/base64" @@ -22,6 +21,8 @@ const minimumEntropy = 32 // the secrets (client and global) should each have at least 16 characters making it harder to guess them const minimumSecretLength = 32 +var b64 = base64.StdEncoding.WithPadding(base64.NoPadding) + // GenerateAuthorizeCode generates a new authorize code or returns an error. set secret // This method implements rfc6819 Section 5.1.4.2.2: Use High Entropy for Secrets. func (c *HMACSHAEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { @@ -57,17 +58,9 @@ func (c *HMACSHAEnigma) GenerateChallenge(secret []byte) (*Challenge, error) { } signature := mac.Sum([]byte{}) - encodedKey := make([]byte, base64.StdEncoding.EncodedLen(c.AuthCodeEntropy)) - base64.StdEncoding.Encode(encodedKey, randomBytes) - encodedKey = bytes.Trim(encodedKey, "\x00") - - encodedSignature := make([]byte, base64.StdEncoding.EncodedLen(len(signature))) - base64.StdEncoding.Encode(encodedSignature, signature) - encodedSignature = bytes.Trim(encodedSignature, "\x00") - return &Challenge{ - Key: string(encodedKey), - Signature: string(encodedSignature), + Key: b64.EncodeToString(randomBytes), + Signature: b64.EncodeToString(signature), }, nil } @@ -78,13 +71,13 @@ func (c *HMACSHAEnigma) ValidateChallenge(secret []byte, t *Challenge) (err erro return errors.New("Key and signature must both be not empty") } - key := make([]byte, base64.StdEncoding.DecodedLen(len(t.Key))) - if _, err := base64.StdEncoding.Decode(key, []byte(t.Signature)); err != nil { + signature, err := b64.DecodeString(t.Signature) + if err != nil { return err } - signature := make([]byte, base64.StdEncoding.DecodedLen(len(t.Signature))) - if _, err := base64.StdEncoding.Decode(signature, []byte(t.Signature)); err != nil { + key, err := b64.DecodeString(t.Key) + if err != nil { return err } diff --git a/enigma/hmacsha_test.go b/enigma/hmacsha_test.go index 71d3a97e..97598d6b 100644 --- a/enigma/hmacsha_test.go +++ b/enigma/hmacsha_test.go @@ -36,6 +36,14 @@ func TestGenerate(t *testing.T) { require.NotNil(t, challenge) t.Logf("%s.%s", challenge.Key, challenge.Signature) + err = cg.ValidateChallenge([]byte("09876543210987654321"), challenge) + require.Nil(t, err, "%s", err) + + challenge.FromString(challenge.String()) + + err = cg.ValidateChallenge([]byte("09876543210987654321"), challenge) + require.Nil(t, err, "%s", err) + err = cg.ValidateChallenge([]byte("bar"), challenge) require.NotNil(t, err, "%s", err) diff --git a/handler.go b/handler.go index 087feb8a..dfd35efc 100644 --- a/handler.go +++ b/handler.go @@ -17,7 +17,7 @@ type AuthorizeEndpointHandler interface { // authorization code as described by Section 4.1.1, "token" for // requesting an access token (implicit grant) as described by // Section 4.2.1, or a registered extension value as described by Section 8.4. - HandleAuthorizeEndpointRequest(ctx context.Context, responder AuthorizeResponder, requester AuthorizeRequester, req *http.Request, session interface{}) error + HandleAuthorizeEndpointRequest(ctx context.Context, req *http.Request, requester AuthorizeRequester, responder AuthorizeResponder, session interface{}) error } type TokenEndpointHandler interface { @@ -25,10 +25,10 @@ type TokenEndpointHandler interface { // is passed along, if further information retrieval is required. If the handler feels that he is not responsible for // the authorize request, he must return nil and NOT modify session nor responder neither requester. // - HandleTokenEndpointResponse(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error + HandleTokenEndpointResponse(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error // HandleTokenEndpointRequest // If the handler feels that he is not responsible for the authorize request, he must return nil and NOT modify // session nor responder neither requester. - HandleTokenEndpointRequest(ctx context.Context, requester AccessRequester, req *http.Request, session interface{}) error + HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, session interface{}) error } diff --git a/handler/authorize/explicit/explicit_auth.go b/handler/authorize/explicit/explicit_auth.go index 5d7f76b9..cc3c35cf 100644 --- a/handler/authorize/explicit/explicit_auth.go +++ b/handler/authorize/explicit/explicit_auth.go @@ -28,20 +28,20 @@ type AuthorizeExplicitEndpointHandler struct { AccessTokenLifespan time.Duration } -func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, req *http.Request, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code code, err := c.Enigma.GenerateChallenge(ar.GetClient().GetHashedSecret()) if err != nil { - return errors.Wrap(err, 1) + return errors.New(ErrServerError) } if err := c.Store.CreateAuthorizeCodeSession(code.Signature, ar, &AuthorizeSession{ Extra: session, RequestRedirectURI: req.Form.Get("redirect_uri"), }); err != nil { - return errors.Wrap(err, 1) + return errors.New(ErrServerError) } resp.AddQuery("code", code.String()) diff --git a/handler/authorize/explicit/explicit_auth_test.go b/handler/authorize/explicit/explicit_auth_test.go index fc90dcd2..76f0a678 100644 --- a/handler/authorize/explicit/explicit_auth_test.go +++ b/handler/authorize/explicit/explicit_auth_test.go @@ -56,7 +56,7 @@ func TestHandleAuthorizeEndpointRequest(t *testing.T) { chgen.EXPECT().GenerateChallenge(gomock.Eq([]byte("foosecret"))).Return(&enigma.Challenge{}, nil) store.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(fosite.ErrTemporarilyUnavailable) }, - expectErr: fosite.ErrTemporarilyUnavailable, + expectErr: fosite.ErrServerError, }, { req: &http.Request{Form: url.Values{"redirect_uri": {"foobar"}}}, @@ -71,7 +71,7 @@ func TestHandleAuthorizeEndpointRequest(t *testing.T) { }, } { c.mock() - err := h.HandleAuthorizeEndpointRequest(nil, aresp, areq, c.req, nil) + err := h.HandleAuthorizeEndpointRequest(nil, c.req, areq, aresp, nil) assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) t.Logf("Passed test case %d", k) } diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go index f0802851..acd00056 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/authorize/explicit/explicit_token.go @@ -14,16 +14,16 @@ import ( // implements // * https://tools.ietf.org/html/rfc6749#section-4.1.3 (everything) -func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context.Context, request AccessRequester, req *http.Request, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context.Context, req *http.Request, request AccessRequester, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". - if request.GetGrantType() != "authorize_code" { + if request.GetGrantType() != "authorization_code" { return nil } var authSess AuthorizeSession challenge := &enigma.Challenge{} - challenge.FromString(req.Form.Get("code")) + challenge.FromString(req.PostForm.Get("code")) // code REQUIRED. // The authorization code received from the authorization server. @@ -40,7 +40,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. if err == pkg.ErrNotFound { return errors.New(ErrInvalidRequest) } else if err != nil { - return errors.Wrap(err, 1) + return errors.New(ErrServerError) } // The authorization server MUST ensure that the authorization code was issued to the authenticated @@ -54,7 +54,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. // "redirect_uri" parameter was included in the initial authorization // request as described in Section 4.1.1, and if included ensure that // their values are identical. - if authSess.RequestRedirectURI != "" && (req.Form.Get("redirect_uri") != ar.GetRedirectURI().String()) { + if authSess.RequestRedirectURI != "" && (req.PostForm.Get("redirect_uri") != authSess.RequestRedirectURI) { return errors.New(ErrInvalidRequest) } @@ -75,14 +75,15 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. // credentials (or assigned other authentication requirements), the // client MUST authenticate with the authorization server as described // in Section 3.2.1. + request.SetGrantTypeHandled("authorization_code") session = authSess.Extra return nil } -func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx context.Context, responder AccessResponder, requester AccessRequester, req *http.Request, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". - if requester.GetGrantType() != "authorize_code" { + if requester.GetGrantType() != "authorization_code" { return nil } @@ -99,11 +100,15 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx conte responder.SetAccessToken(access.String()) responder.SetTokenType("bearer") responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) - if err := c.Store.DeleteAuthorizeCodeSession(req.Form.Get("code")); err != nil { + responder.SetExtra("refresh_token", refresh.String()) + if err := c.Store.DeleteAuthorizeCodeSession(req.PostForm.Get("code")); err != nil { return errors.New(ErrServerError) } - c.Store.CreateAccessTokenSession(access.Signature, requester, &token.TokenSession{}) - c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &token.TokenSession{}) + if err := c.Store.CreateAccessTokenSession(access.Signature, requester, &token.TokenSession{}); err != nil { + return errors.New(ErrServerError) + } else if err := c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &token.TokenSession{}); err != nil { + return errors.New(ErrServerError) + } return nil } diff --git a/handler/authorize/explicit/explicit_token_test.go b/handler/authorize/explicit/explicit_token_test.go new file mode 100644 index 00000000..0071c455 --- /dev/null +++ b/handler/authorize/explicit/explicit_token_test.go @@ -0,0 +1,312 @@ +package explicit + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/handler/authorize" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" + "time" +) + +func TestHandleTokenEndpointResponse(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockAuthorizeStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + aresp := internal.NewMockAccessResponder(ctrl) + //mockcl := internal.NewMockClient(ctrl) + defer ctrl.Finish() + + h := AuthorizeExplicitEndpointHandler{ + Store: store, + Enigma: chgen, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("13245678") + }, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, errors.New("foo")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + + aresp.EXPECT().SetAccessToken(gomock.Eq(".")) + aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) + aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) + + store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + + aresp.EXPECT().SetAccessToken(gomock.Eq(".")) + aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) + aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) + + store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + + aresp.EXPECT().SetAccessToken(gomock.Eq(".")) + aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) + aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) + + store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + + aresp.EXPECT().SetAccessToken(gomock.Eq(".")) + aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) + aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) + + store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + }, + }, + } { + c.mock() + err := h.HandleTokenEndpointResponse(nil, c.req, areq, aresp, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} + +func TestHandleTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockAuthorizeStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + authreq := internal.NewMockAuthorizeRequester(ctrl) + defer ctrl.Finish() + + h := AuthorizeExplicitEndpointHandler{ + Store: store, + Enigma: chgen, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("13245678") // grant_type REQUIRED. Value MUST be set to "authorization_code". + }, + }, + { + req: &http.Request{ + PostForm: url.Values{"foo": {"bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{"code": {".bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{"code": {"."}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{"code": {"foo.bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(errors.New("foo")) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{"code": {"foo.bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(nil, pkg.ErrNotFound) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{"code": {"foo.bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(nil, errors.New("foo")) + }, + expectErr: fosite.ErrServerError, + }, + { + // clients mismatch + req: &http.Request{ + PostForm: url.Values{"code": {"foo.bar"}}, // code REQUIRED. The authorization code received from the authorization server. + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + + authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "bar"}) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{ + "code": {"foo.bar"}, // code REQUIRED. The authorization code received from the authorization server. + }, + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Do(func(_ interface{}, sess *authorize.AuthorizeSession) { + sess.RequestRedirectURI = "request-redir" + }).Return(authreq, nil) + + authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{ + "code": {"foo.bar"}, // code REQUIRED. The authorization code received from the authorization server. + "redirect_uri": {"request-redir"}, + }, + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Do(func(_ interface{}, sess *authorize.AuthorizeSession) { + sess.RequestRedirectURI = "request-redir" + }).Return(authreq, nil) + + authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(-time.Hour)) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{ + "code": {"foo.bar"}, // code REQUIRED. The authorization code received from the authorization server. + "redirect_uri": {"request-redir"}, + }, + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + + authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(-time.Hour)) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{ + PostForm: url.Values{ + "code": {"foo.bar"}, // code REQUIRED. The authorization code received from the authorization server. + }, + }, + mock: func() { + areq.EXPECT().GetGrantType().Return("authorization_code") // grant_type REQUIRED. Value MUST be set to "authorization_code". + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + + authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(time.Hour)) + areq.EXPECT().SetGrantTypeHandled("authorization_code") + }, + }, + } { + c.mock() + err := h.HandleTokenEndpointRequest(nil, c.req, areq, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/authorize/explicit/session.go b/handler/authorize/explicit/session.go deleted file mode 100644 index e898e6ca..00000000 --- a/handler/authorize/explicit/session.go +++ /dev/null @@ -1 +0,0 @@ -package explicit diff --git a/internal/access_response.go b/internal/access_response.go index 4c7aa61e..4be21d29 100644 --- a/internal/access_response.go +++ b/internal/access_response.go @@ -81,3 +81,13 @@ func (_m *MockAccessResponder) SetTokenType(_param0 string) { func (_mr *_MockAccessResponderRecorder) SetTokenType(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "SetTokenType", arg0) } + +func (_m *MockAccessResponder) ToMap() map[string]interface{} { + ret := _m.ctrl.Call(_m, "ToMap") + ret0, _ := ret[0].(map[string]interface{}) + return ret0 +} + +func (_mr *_MockAccessResponderRecorder) ToMap() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "ToMap") +} diff --git a/internal/authorize_handler.go b/internal/authorize_handler.go index 5764ba7d..68e9b27e 100644 --- a/internal/authorize_handler.go +++ b/internal/authorize_handler.go @@ -31,7 +31,7 @@ func (_m *MockAuthorizeEndpointHandler) EXPECT() *_MockAuthorizeEndpointHandlerR return _m.recorder } -func (_m *MockAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_param0 context.Context, _param1 fosite.AuthorizeResponder, _param2 fosite.AuthorizeRequester, _param3 *http.Request, _param4 interface{}) error { +func (_m *MockAuthorizeEndpointHandler) HandleAuthorizeEndpointRequest(_param0 context.Context, _param1 *http.Request, _param2 fosite.AuthorizeRequester, _param3 fosite.AuthorizeResponder, _param4 interface{}) error { ret := _m.ctrl.Call(_m, "HandleAuthorizeEndpointRequest", _param0, _param1, _param2, _param3, _param4) ret0, _ := ret[0].(error) return ret0 diff --git a/internal/token_handler.go b/internal/token_handler.go index c67e804c..d1554817 100644 --- a/internal/token_handler.go +++ b/internal/token_handler.go @@ -31,7 +31,7 @@ func (_m *MockTokenEndpointHandler) EXPECT() *_MockTokenEndpointHandlerRecorder return _m.recorder } -func (_m *MockTokenEndpointHandler) HandleTokenEndpointRequest(_param0 context.Context, _param1 fosite.AccessRequester, _param2 *http.Request, _param3 interface{}) error { +func (_m *MockTokenEndpointHandler) HandleTokenEndpointRequest(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 interface{}) error { ret := _m.ctrl.Call(_m, "HandleTokenEndpointRequest", _param0, _param1, _param2, _param3) ret0, _ := ret[0].(error) return ret0 @@ -41,7 +41,7 @@ func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointRequest(arg0, a return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointRequest", arg0, arg1, arg2, arg3) } -func (_m *MockTokenEndpointHandler) HandleTokenEndpointResponse(_param0 context.Context, _param1 fosite.AccessResponder, _param2 fosite.AccessRequester, _param3 *http.Request, _param4 interface{}) error { +func (_m *MockTokenEndpointHandler) HandleTokenEndpointResponse(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 fosite.AccessResponder, _param4 interface{}) error { ret := _m.ctrl.Call(_m, "HandleTokenEndpointResponse", _param0, _param1, _param2, _param3, _param4) ret0, _ := ret[0].(error) return ret0 diff --git a/oauth2_test.go b/oauth2_test.go index ad41e246..fbac1d73 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -16,22 +16,26 @@ import ( "net/http" "net/http/httptest" "testing" + "time" ) var clientID = "foo" var clientSecret = "barbarbarbarbar" +var clientSecretByte = []byte("barbarbarbarbar") var state = "random-state" var ts *httptest.Server var mockStore *MockStorage var mockClient *MockClient var mockAuthStore *MockAuthorizeStorage +var mockAuthReq *MockAuthorizeRequester func TestFosite(t *testing.T) { ctrl := gomock.NewController(t) mockStore = NewMockStorage(ctrl) mockClient = NewMockClient(ctrl) mockAuthStore = NewMockAuthorizeStorage(ctrl) + mockAuthReq = NewMockAuthorizeRequester(ctrl) defer ctrl.Finish() authExplicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ @@ -40,13 +44,17 @@ func TestFosite(t *testing.T) { } oauth2 := &Fosite{ Store: mockStore, - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{ + AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{ + authExplicitHandler, + }, + TokenEndpointHandlers: TokenEndpointHandlers{ authExplicitHandler, }, } oauth2TestAuthorizeCodeWorkFlow(oauth2, t, func() { mockStore = NewMockStorage(ctrl) + mockAuthReq = NewMockAuthorizeRequester(ctrl) mockClient = NewMockClient(ctrl) mockAuthStore = NewMockAuthorizeStorage(ctrl) oauth2.Store = mockStore @@ -68,7 +76,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres router := mux.NewRouter() router.HandleFunc("/auth", func(rw http.ResponseWriter, req *http.Request) { - ctx := context.Background() + ctx := NewContext() ar, err := oauth2.NewAuthorizeRequest(ctx, req) if err != nil { @@ -90,7 +98,6 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres oauth2.WriteAuthorizeResponse(rw, ar, response) }) router.HandleFunc("/cb", func(rw http.ResponseWriter, req *http.Request) { - t.Logf("Callback was called: %s", req.URL.String()) q := req.URL.Query() if q.Get("code") == "" && q.Get("error") == "" { assert.NotEmpty(t, q.Get("code")) @@ -104,17 +111,41 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres rw.Write([]byte("error: " + q.Get("error"))) } }) + router.HandleFunc("/token", func(rw http.ResponseWriter, req *http.Request) { + req.ParseForm() + ctx := NewContext() + var mySessionData struct { + Foo string + } + + accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) + if err != nil { + t.Logf("Access request %s failed because %s", accessRequest, err.Error()) + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) + if err != nil { + t.Logf("Access resonse %s failed because %s\n", accessRequest, err.Error()) + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + oauth2.WriteAccessResponse(rw, accessRequest, response) + }) ts = httptest.NewServer(router) defer ts.Close() for k, c := range []struct { - conf goauth2.Config - state string - expectBody string - expectStatusCode int - expectPath string - mock func() + conf goauth2.Config + state string + expectBody string + expectStatusCode int + expectPath string + expectedTokenError bool + mock func() }{ { conf: goauth2.Config{ @@ -126,16 +157,44 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres }, }, state: state, + mock: func() { + mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(nil, errors.New("foo")) + + mockClient.EXPECT().CompareSecretWith(gomock.Any()).AnyTimes().Return(true) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) + mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) + + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(nil, errors.New("foo")) + }, + expectStatusCode: http.StatusOK, + expectPath: "/auth", + expectBody: "{\n\t\"name\": \"invalid_client\",\n\t\"description\": \"Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method)\"\n}", + expectedTokenError: true, + }, + { + conf: goauth2.Config{ + ClientID: clientID, + ClientSecret: clientSecret, + RedirectURL: ts.URL + "/cb", + Endpoint: goauth2.Endpoint{ + AuthURL: ts.URL + "/auth", + TokenURL: ts.URL + "/token", + }, + }, + state: state, mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) - mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecret)).AnyTimes().Return(true) + mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(nil, errors.New("foo")) }, - expectStatusCode: http.StatusOK, - expectPath: "/cb", - expectBody: "code: ok", + expectStatusCode: http.StatusOK, + expectPath: "/cb", + expectBody: "code: ok", + expectedTokenError: true, }, { conf: goauth2.Config{ @@ -143,20 +202,31 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres ClientSecret: clientSecret, RedirectURL: ts.URL + "/cb", Endpoint: goauth2.Endpoint{ - AuthURL: ts.URL + "/auth", + AuthURL: ts.URL + "/auth", + TokenURL: ts.URL + "/token", }, }, state: state, mock: func() { - mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(nil, errors.New("foo")) - - mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecret)).AnyTimes().Return(true) + mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) + mockClient.EXPECT().GetID().AnyTimes().Return(clientID) + mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) + + mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) + + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(mockAuthReq, nil) + mockAuthStore.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) + mockAuthStore.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) + mockAuthStore.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).AnyTimes().Return(nil) + mockAuthReq.EXPECT().GetClient().AnyTimes().Return(mockClient) + mockAuthReq.EXPECT().GetRequestedAt().AnyTimes().Return(time.Now()) }, - expectStatusCode: http.StatusOK, - expectPath: "/auth", - expectBody: "{\n\t\"name\": \"invalid_client\",\n\t\"description\": \"Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method)\"\n}", + expectStatusCode: http.StatusOK, + expectPath: "/cb", + expectBody: "code: ok", + expectedTokenError: false, }, // TODO add a ton of tests for RFC conform tests. use factories! See https://github.com/ory-am/fosite/issues/13 @@ -164,12 +234,20 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres refreshMocks() c.mock() authurl := c.conf.AuthCodeURL(c.state) - t.Logf("Passed test case %d", k) req := gorequest.New() resp, body, errs := req.Get(authurl).End() require.Len(t, errs, 0, "%s", errs) assert.Equal(t, c.expectPath, resp.Request.URL.Path) assert.Equal(t, c.expectBody, body) assert.Equal(t, c.expectStatusCode, resp.StatusCode) + + authorizeCode := resp.Request.URL.Query().Get("code") + token, err := c.conf.Exchange(context.Background(), authorizeCode) + assert.Equal(t, c.expectedTokenError, err != nil, "%d: %s", k, err) + if !c.expectedTokenError { + assert.NotNil(t, token) + } + t.Logf("Got token %s", token) + t.Logf("Passed test case %d", k) } } From 80c14f786b4a1ed4f1379a5fd6deaf036ece4b47 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 17:26:17 +0100 Subject: [PATCH 33/47] store: remove store mock --- storage/postgres/store.go | 44 ---------------------------------- storage/postgres/store_test.go | 1 - 2 files changed, 45 deletions(-) delete mode 100644 storage/postgres/store.go delete mode 100644 storage/postgres/store_test.go diff --git a/storage/postgres/store.go b/storage/postgres/store.go deleted file mode 100644 index be610636..00000000 --- a/storage/postgres/store.go +++ /dev/null @@ -1,44 +0,0 @@ -package postgres - -import ( - "fmt" - "github.com/go-errors/errors" - "github.com/jmoiron/sqlx" - "github.com/ory-am/fosite/client" -) - -const ( - clientTable = "fosite_client" -) - -type PGStore struct { - DB *sqlx.DB -} - -var schemata = []string{ - fmt.Sprintf(` -CREATE TABLE IF NOT EXISTS %s ( - id text NOT NULL PRIMARY KEY, - secret text NOT NULL, - redirect_uris text NOT NULL, - allow_user_grant bool false -) -`, clientTable), -} - -func (s *PGStore) CreateSchemas() error { - for _, schema := range schemata { - if _, err := s.DB.Exec(schema); err != nil { - return errors.Wrap(err, 1) - } - } - return nil -} - -func (s *PGStore) CreateClient(client.Client) error { - return nil -} - -func (s *PGStore) GetClient(id string) (client.Client, error) { - return &client.SecureClient{}, nil -} diff --git a/storage/postgres/store_test.go b/storage/postgres/store_test.go deleted file mode 100644 index bf560bea..00000000 --- a/storage/postgres/store_test.go +++ /dev/null @@ -1 +0,0 @@ -package postgres From 49aa920401a3cf62f16541d8fa4f9fb488270cf3 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 17:29:11 +0100 Subject: [PATCH 34/47] travis: added go1.4 to allowed failures --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 29323419..1af9d5eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ matrix: - go: tip - go: 1.2 - go: 1.3 + - go: 1.4 install: # - go get golang.org/x/tools/cmd/vet From 12d76dd7c86408e52f85a3099f6063c462e0b97b Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 18:31:39 +0100 Subject: [PATCH 35/47] all: enforce use of scopes Close #14 --- README.md | 40 +++++++------------ access_request.go | 30 ++++++++++++++ access_request_handler.go | 17 +++++--- access_request_handler_test.go | 20 ++++++++++ access_request_test.go | 2 + authorize_request.go | 26 +++++++++++- authorize_request_handler.go | 5 +++ authorize_request_handler_test.go | 36 ++++++++++++----- authorize_request_test.go | 2 + handler/authorize/explicit/explicit_token.go | 3 ++ .../authorize/explicit/explicit_token_test.go | 10 +++++ internal/access_request.go | 37 +++++++++++++++++ internal/authorize_request.go | 18 +++++++++ oauth2.go | 2 +- oauth2_test.go | 27 +++++++++++++ 15 files changed, 232 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 33e5b962..58f2f884 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,13 @@ These Standards have been reviewed during the development of Fosite: - [Motivation](#motivation) - [A word on quality](#a-word-on-quality) - [A word on security](#a-word-on-security) -- [Security first or encouraging security by enforcing it](#security-first-or-encouraging-security-by-enforcing-it) - - [Opaque tokens](#opaque-tokens) - - [Advanced Token Validation](#advanced-token-validation) - - [Encrypt credentials at rest](#encrypt-credentials-at-rest) - - [Implement peer reviewed IETF Standards](#implement-peer-reviewed-ietf-standards) - - [Provide extensibility and interoperability](#provide-extensibility-and-interoperability) +- [A word on extensibility](#a-word-on-extensibility) - [Usage](#usage) - [Installation](#installation) - [[Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1)](#authorization-endpointhttpstoolsietforghtmlrfc6749section-31) - [[Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2)](#token-endpointhttpstoolsietforghtmlrfc6749section-32) - [Extensible handlers](#extensible-handlers) + - [Replaceable storage](#replaceable-storage) - [Develop fosite](#develop-fosite) - [Useful commands](#useful-commands) - [Hall of Fame](#hall-of-fame) @@ -71,9 +67,7 @@ Please be aware that Fosite only secures your server side security. You still ne your tokens safe, prevent CSRF attacks and much more. If you need any help or advice feel free to contact our security staff through [our website](https://ory.am/)! -## Security first or encouraging security by enforcing it - -We have given [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819#section-5.1.5.3) +We have given the [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819#section-5.1.5.3) a very close look and included everything we thought was in the scope of this framework. Here is a complete list of things we implemented in Fosite: @@ -97,11 +91,14 @@ Not implemented yet: cryptography per default instead of HMAC-SHA (but support both). Additionally, we added these safeguards: -* Enforcing random states: Without a random-looking state the request will fail. -* Advanced Token Validation: Tokens are layouted as `.` where `` is created using HMAC-SHA256, a global secret +* **Enforcing random states:** Without a random-looking state the request will fail. +* **Advanced Token Validation:** Tokens are layouted as `.` where `` is created using HMAC-SHA256, a global secret and the client's secret. Read more about this workflow in the [proposal](https://github.com/ory-am/fosite/issues/11). This is what a token can look like: `/tgBeUhWlAT8tM8Bhmnx+Amf8rOYOUhrDi3pGzmjP7c=.BiV/Yhma+5moTP46anxMT6cWW8gz5R5vpC9RbpwSDdM=` +* **Enforging scopes:** By default, you always need to include the `fosite` scope or fosite will not execute the request + properly. Obviously, you can change the scope to `basic` or `core` but be aware that you *must use scopes* if you use + OAuth2. It is strongly encouraged to use the handlers shipped with Fosite as the follow specs. @@ -120,22 +117,13 @@ The following list documents which sections of the RFCs we reviewed for each act * [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819) * ... -#### - - -#### Encrypt credentials at rest - -Credentials (token signatures, passwords and secrets) are always encrypted at rest. - -#### Implement peer reviewed IETF Standards - -Fosite implements [rfc6749](https://tools.ietf.org/html/rfc6749) and enforces countermeasures suggested in [rfc6819](https://tools.ietf.org/html/rfc6819). - -### Provide extensibility and interoperability +## A word on extensibility -... because OAuth2 is an extensible and flexible **framework**. Fosite let's you register new response types, new grant -types and new response key value pares. This is useful, if you want to provide OpenID Connect on top of your -OAuth2 stack. Or custom assertions, what ever you like and as long as it is secure. ;) +Fosite is extensible ... because OAuth2 is an extensible and flexible **framework**. +Fosite let's you register custom token and authorize endpoint handlers with the security that the requests +have been validated against the OAuth2 specs beforehand. +You can easily extend Fosite's capabilities. For example, if you want to provide OpenID Connect on top of your +OAuth2 stack, that's no problem. Or custom assertions, what ever you like and as long as it is secure. ;) ## Usage diff --git a/access_request.go b/access_request.go index dfddc5d4..4d2d6de5 100644 --- a/access_request.go +++ b/access_request.go @@ -15,6 +15,18 @@ type AccessRequester interface { // GetRequestedAt returns the time the request was created. GetRequestedAt() time.Time + // GetScopes returns the request's scopes. + GetScopes() Arguments + + // SetScopes sets the request's scopes. + SetScopes(Arguments) + + // GetGrantScopes returns all granted scopes. + GetGrantedScopes() Arguments + + // GrantScope marks a request's scope as granted. + GrantScope(string) + // SetGrantTypeHandled marks a grant type as handled indicating that the response type is supported. SetGrantTypeHandled(string) @@ -27,6 +39,8 @@ type AccessRequest struct { HandledGrantType []string RequestedAt time.Time Client client.Client + Scopes Arguments + GrantedScopes []string } func NewAccessRequest() *AccessRequest { @@ -55,3 +69,19 @@ func (a *AccessRequest) GetRequestedAt() time.Time { func (a *AccessRequest) GetClient() client.Client { return a.Client } + +func (a *AccessRequest) GetScopes() Arguments { + return a.Scopes +} + +func (a *AccessRequest) SetScopes(s Arguments) { + a.Scopes = s +} + +func (a *AccessRequest) GetGrantedScopes() Arguments { + return Arguments(a.GrantedScopes) +} + +func (a *AccessRequest) GrantScope(scope string) { + a.GrantedScopes = append(a.GrantedScopes, scope) +} diff --git a/access_request_handler.go b/access_request_handler.go index 2566bbda..8050046c 100644 --- a/access_request_handler.go +++ b/access_request_handler.go @@ -4,6 +4,7 @@ import ( "github.com/go-errors/errors" "golang.org/x/net/context" "net/http" + "strings" ) // Implements @@ -31,14 +32,14 @@ import ( // credentials (or assigned other authentication requirements), the // client MUST authenticate with the authorization server as described // in Section 3.2.1. -func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session interface{}) (AccessRequester, error) { +func (f *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session interface{}) (AccessRequester, error) { ar := NewAccessRequest() if r.Method != "POST" { return ar, errors.New(ErrInvalidRequest) } - if c.RequiredScope == "" { - c.RequiredScope = DefaultRequiredScopeName + if f.RequiredScope == "" { + f.RequiredScope = DefaultRequiredScopeName } if err := r.ParseForm(); err != nil { @@ -49,6 +50,7 @@ func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session return ar, errors.New("Session must not be nil") } + ar.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) ar.GrantType = r.Form.Get("grant_type") if ar.GrantType == "" { return ar, errors.New(ErrInvalidRequest) @@ -59,7 +61,7 @@ func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session return ar, errors.New(ErrInvalidRequest) } - client, err := c.Store.GetClient(clientID) + client, err := f.Store.GetClient(clientID) if err != nil { return ar, errors.New(ErrInvalidClient) } @@ -70,7 +72,7 @@ func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session } ar.Client = client - for _, loader := range c.TokenEndpointHandlers { + for _, loader := range f.TokenEndpointHandlers { if err := loader.HandleTokenEndpointRequest(ctx, r, ar, session); err != nil { return ar, err } @@ -80,5 +82,10 @@ func (c *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session return ar, errors.New(ErrUnsupportedGrantType) } + if !ar.GetScopes().Has(f.RequiredScope) { + return ar, errors.New(ErrInvalidScope) + } + + ar.GrantScope(f.RequiredScope) return ar, nil } diff --git a/access_request_handler_test.go b/access_request_handler_test.go index de1a2d69..994b6f98 100644 --- a/access_request_handler_test.go +++ b/access_request_handler_test.go @@ -171,6 +171,26 @@ func TestNewAccessRequest(t *testing.T) { client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") + a.SetScopes([]string{"asdfasdf"}) + }).Return(nil) + }, + handlers: TokenEndpointHandlers{handler}, + expectErr: ErrInvalidScope, + }, + { + header: http.Header{ + "Authorization": {basicAuth("foo", "bar")}, + }, + method: "POST", + form: url.Values{ + "grant_type": {"foo"}, + }, + mock: func() { + store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) + client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { + a.SetGrantTypeHandled("foo") + a.SetScopes([]string{DefaultRequiredScopeName}) }).Return(nil) }, handlers: TokenEndpointHandlers{handler}, diff --git a/access_request_test.go b/access_request_test.go index 5e3f102b..d6f1dfb3 100644 --- a/access_request_test.go +++ b/access_request_test.go @@ -10,6 +10,8 @@ func TestAccessRequest(t *testing.T) { ar := NewAccessRequest() ar.GrantType = "foobar" ar.Client = &client.SecureClient{} + ar.GrantScope("foo") + assert.True(t, ar.GetGrantedScopes().Has("foo")) assert.NotNil(t, ar.GetRequestedAt()) assert.Equal(t, ar.GrantType, ar.GetGrantType()) assert.Equal(t, ar.Client, ar.GetClient()) diff --git a/authorize_request.go b/authorize_request.go index 6c50f0e1..fa3bf85f 100644 --- a/authorize_request.go +++ b/authorize_request.go @@ -36,10 +36,21 @@ type AuthorizeRequester interface { // IsRedirectURIValid returns false if the redirect is not rfc-conform (i.e. missing client, not on white list, // or malformed) IsRedirectURIValid() bool + + // SetScopes sets the request's scopes. + SetScopes(Arguments) + + // GetGrantScopes returns all granted scopes. + GetGrantedScopes() Arguments } func NewAuthorizeRequest() *AuthorizeRequest { - return &AuthorizeRequest{} + return &AuthorizeRequest{ + ResponseTypes: Arguments{}, + Scopes: Arguments{}, + HandledResponseTypes: Arguments{}, + GrantedScopes: []string{}, + } } // AuthorizeRequest is an implementation of AuthorizeRequester @@ -51,6 +62,7 @@ type AuthorizeRequest struct { State string RequestedAt time.Time HandledResponseTypes Arguments + GrantedScopes []string } func (d *AuthorizeRequest) IsRedirectURIValid() bool { @@ -107,3 +119,15 @@ func (d *AuthorizeRequest) DidHandleAllResponseTypes() bool { return len(d.ResponseTypes) > 0 } + +func (a *AuthorizeRequest) GetGrantedScopes() Arguments { + return Arguments(a.GrantedScopes) +} + +func (a *AuthorizeRequest) GrantScope(scope string) { + a.GrantedScopes = append(a.GrantedScopes, scope) +} + +func (a *AuthorizeRequest) SetScopes(s Arguments) { + a.Scopes = s +} diff --git a/authorize_request_handler.go b/authorize_request_handler.go index 46b80cb9..0c27f9e6 100644 --- a/authorize_request_handler.go +++ b/authorize_request_handler.go @@ -70,5 +70,10 @@ func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (Author // Remove empty items from arrays request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) + if !request.Scopes.Has(c.RequiredScope) { + return request, errors.New(ErrInvalidScope) + } + request.GrantScope(c.RequiredScope) + return request, nil } diff --git a/authorize_request_handler_test.go b/authorize_request_handler_test.go index 3efd7ef7..d02c2075 100644 --- a/authorize_request_handler_test.go +++ b/authorize_request_handler_test.go @@ -122,10 +122,10 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "short state", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code"}, - "state": []string{"short"}, + "redirect_uri": {"http://foo.bar/cb"}, + "client_id": {"1234"}, + "response_type": {"code"}, + "state": {"short"}, }, expectedError: ErrInvalidState, mock: func() { @@ -137,11 +137,27 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "should pass", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, - "client_id": []string{"1234"}, - "response_type": []string{"code token"}, - "state": []string{"strong-state"}, - "scope": []string{"foo bar"}, + "redirect_uri": {"http://foo.bar/cb"}, + "client_id": {"1234"}, + "response_type": {"code token"}, + "state": {"strong-state"}, + "scope": {"foo bar"}, + }, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + }, + expectedError: ErrInvalidScope, + }, + /* success case */ + { + desc: "should pass", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": {"http://foo.bar/cb"}, + "client_id": {"1234"}, + "response_type": {"code token"}, + "state": {"strong-state"}, + "scope": {DefaultRequiredScopeName + " foo bar"}, }, mock: func() { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) @@ -151,7 +167,7 @@ func TestNewAuthorizeRequest(t *testing.T) { Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, State: "strong-state", - Scopes: []string{"foo", "bar"}, + Scopes: []string{DefaultRequiredScopeName, "foo", "bar"}, }, }, } { diff --git a/authorize_request_test.go b/authorize_request_test.go index 3f46ab22..d150e57e 100644 --- a/authorize_request_test.go +++ b/authorize_request_test.go @@ -82,5 +82,7 @@ func TestAuthorizeRequest(t *testing.T) { assert.Equal(t, c.ar.Scopes, c.ar.GetScopes(), "%d", k) assert.Equal(t, c.ar.State, c.ar.GetState(), "%d", k) assert.Equal(t, c.isRedirValid, c.ar.IsRedirectURIValid(), "%d", k) + c.ar.GrantScope("foo") + assert.True(t, c.ar.GetGrantedScopes().Has("foo")) } } diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go index acd00056..40d403b4 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/authorize/explicit/explicit_token.go @@ -43,6 +43,9 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. return errors.New(ErrServerError) } + // Override scopes + request.SetScopes(ar.GetScopes()) + // The authorization server MUST ensure that the authorization code was issued to the authenticated // confidential client, or if the client is public, ensure that the // code was issued to "client_id" in the request, diff --git a/handler/authorize/explicit/explicit_token_test.go b/handler/authorize/explicit/explicit_token_test.go index 0071c455..6ae35b11 100644 --- a/handler/authorize/explicit/explicit_token_test.go +++ b/handler/authorize/explicit/explicit_token_test.go @@ -226,6 +226,8 @@ func TestHandleTokenEndpointRequest(t *testing.T) { chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + authreq.EXPECT().GetScopes().Return([]string{}) + areq.EXPECT().SetScopes(gomock.Any()) authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "bar"}) }, expectErr: fosite.ErrInvalidRequest, @@ -244,6 +246,8 @@ func TestHandleTokenEndpointRequest(t *testing.T) { sess.RequestRedirectURI = "request-redir" }).Return(authreq, nil) + authreq.EXPECT().GetScopes().Return([]string{}) + areq.EXPECT().SetScopes(gomock.Any()) authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) }, expectErr: fosite.ErrInvalidRequest, @@ -263,6 +267,8 @@ func TestHandleTokenEndpointRequest(t *testing.T) { sess.RequestRedirectURI = "request-redir" }).Return(authreq, nil) + authreq.EXPECT().GetScopes().Return([]string{}) + areq.EXPECT().SetScopes(gomock.Any()) authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(-time.Hour)) }, @@ -281,6 +287,8 @@ func TestHandleTokenEndpointRequest(t *testing.T) { chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + authreq.EXPECT().GetScopes().Return([]string{}) + areq.EXPECT().SetScopes(gomock.Any()) authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(-time.Hour)) }, @@ -298,6 +306,8 @@ func TestHandleTokenEndpointRequest(t *testing.T) { chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(authreq, nil) + authreq.EXPECT().GetScopes().Return([]string{}) + areq.EXPECT().SetScopes(gomock.Any()) authreq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) authreq.EXPECT().GetRequestedAt().Return(time.Now().Add(time.Hour)) areq.EXPECT().SetGrantTypeHandled("authorization_code") diff --git a/internal/access_request.go b/internal/access_request.go index 9a028bc1..4b064980 100644 --- a/internal/access_request.go +++ b/internal/access_request.go @@ -5,6 +5,7 @@ package internal import ( gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" client "github.com/ory-am/fosite/client" time "time" ) @@ -60,6 +61,16 @@ func (_mr *_MockAccessRequesterRecorder) GetGrantType() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetGrantType") } +func (_m *MockAccessRequester) GetGrantedScopes() fosite.Arguments { + ret := _m.ctrl.Call(_m, "GetGrantedScopes") + ret0, _ := ret[0].(fosite.Arguments) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) GetGrantedScopes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetGrantedScopes") +} + func (_m *MockAccessRequester) GetRequestedAt() time.Time { ret := _m.ctrl.Call(_m, "GetRequestedAt") ret0, _ := ret[0].(time.Time) @@ -70,6 +81,24 @@ func (_mr *_MockAccessRequesterRecorder) GetRequestedAt() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRequestedAt") } +func (_m *MockAccessRequester) GetScopes() fosite.Arguments { + ret := _m.ctrl.Call(_m, "GetScopes") + ret0, _ := ret[0].(fosite.Arguments) + return ret0 +} + +func (_mr *_MockAccessRequesterRecorder) GetScopes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetScopes") +} + +func (_m *MockAccessRequester) GrantScope(_param0 string) { + _m.ctrl.Call(_m, "GrantScope", _param0) +} + +func (_mr *_MockAccessRequesterRecorder) GrantScope(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GrantScope", arg0) +} + func (_m *MockAccessRequester) SetGrantTypeHandled(_param0 string) { _m.ctrl.Call(_m, "SetGrantTypeHandled", _param0) } @@ -77,3 +106,11 @@ func (_m *MockAccessRequester) SetGrantTypeHandled(_param0 string) { func (_mr *_MockAccessRequesterRecorder) SetGrantTypeHandled(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "SetGrantTypeHandled", arg0) } + +func (_m *MockAccessRequester) SetScopes(_param0 fosite.Arguments) { + _m.ctrl.Call(_m, "SetScopes", _param0) +} + +func (_mr *_MockAccessRequesterRecorder) SetScopes(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetScopes", arg0) +} diff --git a/internal/authorize_request.go b/internal/authorize_request.go index 0df6247d..9cac17fc 100644 --- a/internal/authorize_request.go +++ b/internal/authorize_request.go @@ -52,6 +52,16 @@ func (_mr *_MockAuthorizeRequesterRecorder) GetClient() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetClient") } +func (_m *MockAuthorizeRequester) GetGrantedScopes() fosite.Arguments { + ret := _m.ctrl.Call(_m, "GetGrantedScopes") + ret0, _ := ret[0].(fosite.Arguments) + return ret0 +} + +func (_mr *_MockAuthorizeRequesterRecorder) GetGrantedScopes() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetGrantedScopes") +} + func (_m *MockAuthorizeRequester) GetRedirectURI() *url.URL { ret := _m.ctrl.Call(_m, "GetRedirectURI") ret0, _ := ret[0].(*url.URL) @@ -119,3 +129,11 @@ func (_m *MockAuthorizeRequester) SetResponseTypeHandled(_param0 string) { func (_mr *_MockAuthorizeRequesterRecorder) SetResponseTypeHandled(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "SetResponseTypeHandled", arg0) } + +func (_m *MockAuthorizeRequester) SetScopes(_param0 fosite.Arguments) { + _m.ctrl.Call(_m, "SetScopes", _param0) +} + +func (_mr *_MockAuthorizeRequesterRecorder) SetScopes(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "SetScopes", arg0) +} diff --git a/oauth2.go b/oauth2.go index 6c9f4649..1efdbd4d 100644 --- a/oauth2.go +++ b/oauth2.go @@ -5,7 +5,7 @@ import ( "net/http" ) -const DefaultRequiredScopeName = "core" +var DefaultRequiredScopeName = "fosite" // OAuth2Provider is an interface that enables you to write OAuth2 handlers with only a few lines of code. // Check fosite.Fosite for an implementation of this interface. diff --git a/oauth2_test.go b/oauth2_test.go index fbac1d73..1f4ef7e4 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -182,6 +182,31 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres }, }, state: state, + mock: func() { + mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) + mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) + mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) + + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(nil, errors.New("foo")) + }, + expectStatusCode: http.StatusOK, + expectPath: "/cb", + expectBody: "error: invalid_scope", + expectedTokenError: true, + }, + { + conf: goauth2.Config{ + ClientID: clientID, + ClientSecret: clientSecret, + Scopes: []string{DefaultRequiredScopeName}, + RedirectURL: ts.URL + "/cb", + Endpoint: goauth2.Endpoint{ + AuthURL: ts.URL + "/auth", + TokenURL: ts.URL + "/token", + }, + }, + state: state, mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) @@ -201,6 +226,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres ClientID: clientID, ClientSecret: clientSecret, RedirectURL: ts.URL + "/cb", + Scopes: []string{DefaultRequiredScopeName}, Endpoint: goauth2.Endpoint{ AuthURL: ts.URL + "/auth", TokenURL: ts.URL + "/token", @@ -222,6 +248,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockAuthStore.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).AnyTimes().Return(nil) mockAuthReq.EXPECT().GetClient().AnyTimes().Return(mockClient) mockAuthReq.EXPECT().GetRequestedAt().AnyTimes().Return(time.Now()) + mockAuthReq.EXPECT().GetScopes().Return([]string{DefaultRequiredScopeName}) }, expectStatusCode: http.StatusOK, expectPath: "/cb", From 269c5fab1109bb4cd2e624940dac1b9467663507 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 20:36:17 +0100 Subject: [PATCH 36/47] example: added authorize code grant example --- README.md | 23 ++++- access_request_handler.go | 2 +- access_request_handler_test.go | 31 +++--- access_response_handler_test.go | 8 +- authorize_response_handler.go | 2 +- authorize_response_handler_test.go | 4 +- client/client.go | 17 +--- client/client_test.go | 8 +- docs/authorize-code-grant.gif | Bin 0 -> 395103 bytes fosite-example/internal/store.go | 100 +++++++++++++++++++ fosite-example/main.go | 148 +++++++++++++++++++++++++++++ fosite.go | 16 ++-- fosite_test.go | 16 ++++ internal/client.go | 32 +++---- internal/hash.go | 50 ++++++++++ oauth2_test.go | 28 ++++-- 16 files changed, 405 insertions(+), 80 deletions(-) create mode 100644 docs/authorize-code-grant.gif create mode 100644 fosite-example/internal/store.go create mode 100644 fosite-example/main.go create mode 100644 fosite_test.go create mode 100644 internal/hash.go diff --git a/README.md b/README.md index 58f2f884..9250bcfd 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ These Standards have been reviewed during the development of Fosite: - [A word on security](#a-word-on-security) - [A word on extensibility](#a-word-on-extensibility) - [Usage](#usage) + - [See it in action](#see-it-in-action) - [Installation](#installation) - [[Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1)](#authorization-endpointhttpstoolsietforghtmlrfc6749section-31) - [[Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2)](#token-endpointhttpstoolsietforghtmlrfc6749section-32) @@ -129,6 +130,21 @@ OAuth2 stack, that's no problem. Or custom assertions, what ever you like and as This section is WIP and we welcome discussions via PRs or in the issues. +### See it in action + +![Authorize Code Grant](docs/authorize-code-grant.gif) + +You can run this minimalistic example by doing + +``` +go get github.com/ory-am/fosite/fosite-example +go install github.com/ory-am/fosite/fosite-example +fosite-example +``` + +There should be a server listening on [localhost:3846](http://localhost:3846/). You can check out the example's +source code [here](/fosite-example/main.go). + ### Installation Obviously, you will need [Go](https://golang.org) installed on your machine and it is required that you have set up your @@ -290,7 +306,7 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { // These might populate mySessionData so do not pass nils. accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) if err != nil { - oauth2.WriteAccessError(rw, req, err) + oauth2.WriteAccessError(rw, accessRequest, err) return } @@ -298,9 +314,9 @@ func handleToken(rw http.ResponseWriter, req *http.Request) { // Next we create a response for the access request. Again, we iterate through the TokenEndpointHandlers // and aggregate the result in response. - response, err := oauth2.NewAccessResponse(ctx, accessRequest, req, &mySessionData) + response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) if err != nil { - oauth2.WriteAccessError(rw, req, err) + oauth2.WriteAccessError(rw, accessRequest, err) return } @@ -388,6 +404,7 @@ mockgen -destination internal/token_handler.go github.com/ory-am/fosite TokenEnd **Create stateful "context" mocks** ``` +mockgen -destination internal/client.go github.com/ory-am/fosite/client Client mockgen -destination internal/access_request.go github.com/ory-am/fosite AccessRequester mockgen -destination internal/access_response.go github.com/ory-am/fosite AccessResponder mockgen -destination internal/authorize_request.go github.com/ory-am/fosite AuthorizeRequester diff --git a/access_request_handler.go b/access_request_handler.go index 8050046c..0cf9d508 100644 --- a/access_request_handler.go +++ b/access_request_handler.go @@ -67,7 +67,7 @@ func (f *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session } // Enforce client authentication - if !client.CompareSecretWith([]byte(clientSecret)) { + if err := f.Hasher.Compare(client.GetHashedSecret(), []byte(clientSecret)); err != nil { return ar, errors.New(ErrInvalidClient) } ar.Client = client diff --git a/access_request_handler_test.go b/access_request_handler_test.go index 994b6f98..b818e198 100644 --- a/access_request_handler_test.go +++ b/access_request_handler_test.go @@ -20,9 +20,10 @@ func TestNewAccessRequest(t *testing.T) { store := internal.NewMockStorage(ctrl) client := internal.NewMockClient(ctrl) handler := internal.NewMockTokenEndpointHandler(ctrl) + hasher := internal.NewMockHasher(ctrl) defer ctrl.Finish() - fosite := &Fosite{Store: store} + fosite := &Fosite{Store: store, Hasher: hasher} for k, c := range []struct { header http.Header form url.Values @@ -105,7 +106,8 @@ func TestNewAccessRequest(t *testing.T) { expectErr: ErrInvalidClient, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(false) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(errors.New("")) }, }, { @@ -119,10 +121,11 @@ func TestNewAccessRequest(t *testing.T) { expectErr: ErrServerError, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, }, { header: http.Header{ @@ -135,10 +138,11 @@ func TestNewAccessRequest(t *testing.T) { expectErr: ErrUnsupportedGrantType, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, }, { header: http.Header{ @@ -151,12 +155,13 @@ func TestNewAccessRequest(t *testing.T) { expectErr: ErrUnsupportedGrantType, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("bar") }).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, }, { header: http.Header{ @@ -168,13 +173,14 @@ func TestNewAccessRequest(t *testing.T) { }, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") a.SetScopes([]string{"asdfasdf"}) }).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrInvalidScope, }, { @@ -187,13 +193,14 @@ func TestNewAccessRequest(t *testing.T) { }, mock: func() { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) - client.EXPECT().CompareSecretWith(gomock.Eq([]byte("bar"))).Return(true) + client.EXPECT().GetHashedSecret().Return([]byte("foo")) + hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") a.SetScopes([]string{DefaultRequiredScopeName}) }).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expect: &AccessRequest{ GrantType: "foo", HandledGrantType: []string{"foo"}, diff --git a/access_response_handler_test.go b/access_response_handler_test.go index 0f0430af..74edb995 100644 --- a/access_response_handler_test.go +++ b/access_response_handler_test.go @@ -32,14 +32,14 @@ func TestNewAccessResponse(t *testing.T) { mock: func() { handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrServerError, }, { mock: func() { handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrUnsupportedGrantType, }, { @@ -48,7 +48,7 @@ func TestNewAccessResponse(t *testing.T) { resp.SetAccessToken("foo") }).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrUnsupportedGrantType, }, { @@ -58,7 +58,7 @@ func TestNewAccessResponse(t *testing.T) { resp.SetTokenType("bar") }).Return(nil) }, - handlers: TokenEndpointHandlers{handler}, + handlers: TokenEndpointHandlers{"a": handler}, expect: &AccessResponse{ Extra: map[string]interface{}{}, AccessToken: "foo", diff --git a/authorize_response_handler.go b/authorize_response_handler.go index 06ee1ac6..237d05c2 100644 --- a/authorize_response_handler.go +++ b/authorize_response_handler.go @@ -49,7 +49,7 @@ func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar A } if !ar.DidHandleAllResponseTypes() { - return nil, ErrUnsupportedResponseType + return nil, errors.New(ErrUnsupportedResponseType) } return resp, nil diff --git a/authorize_response_handler_test.go b/authorize_response_handler_test.go index 89154205..369ec4bf 100644 --- a/authorize_response_handler_test.go +++ b/authorize_response_handler_test.go @@ -20,10 +20,10 @@ func TestNewAuthorizeResponse(t *testing.T) { ctx := context.Background() oauth2 := &Fosite{ - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0]}, + AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{"a": handlers[0]}, } duo := &Fosite{ - AuthorizeEndpointHandlers: []AuthorizeEndpointHandler{handlers[0], handlers[0]}, + AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{"a": handlers[0], "b": handlers[0]}, } fooErr := errors.New("foo") for k, c := range []struct { diff --git a/client/client.go b/client/client.go index 247e2511..29d809fc 100644 --- a/client/client.go +++ b/client/client.go @@ -1,16 +1,10 @@ package client -import "github.com/ory-am/fosite/hash" - // Client represents a client or an app. type Client interface { // GetID returns the client ID. GetID() string - // CompareSecret compares a secret with the stored one (e.g. a hash) and returns true if - // the secrets match. - CompareSecretWith(secret []byte) bool - // GetHashedSecret returns the hashed secret as it is stored in the store. GetHashedSecret() []byte @@ -20,20 +14,15 @@ type Client interface { // DefaultClient is a simple default implementation of the Client interface. type SecureClient struct { - ID string `json:"id"` - Secret []byte `json:"secret"` - RedirectURIs []string `json:"redirectURIs"` - Hasher hash.Hasher `json:"-"` + ID string `json:"id"` + Secret []byte `json:"secret"` + RedirectURIs []string `json:"redirectURIs"` } func (c *SecureClient) GetID() string { return c.ID } -func (c *SecureClient) CompareSecretWith(secret []byte) bool { - return c.Hasher.Compare(c.Secret, secret) == nil -} - func (c *SecureClient) GetRedirectURIs() []string { return c.RedirectURIs } diff --git a/client/client_test.go b/client/client_test.go index 7eead5b5..f24951ff 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -2,22 +2,16 @@ package client import "testing" import ( - "github.com/ory-am/fosite/hash" "github.com/stretchr/testify/assert" ) func TestSecureClient(t *testing.T) { - hasher := &hash.BCrypt{WorkFactor: 5} - secret, _ := hasher.Hash([]byte("foo")) sc := &SecureClient{ ID: "1", - Secret: secret, + Secret: []byte("foobar-"), RedirectURIs: []string{"foo", "bar"}, - Hasher: hasher, } assert.Equal(t, sc.ID, sc.GetID()) assert.Equal(t, sc.RedirectURIs, sc.GetRedirectURIs()) - assert.True(t, sc.CompareSecretWith([]byte("foo"))) - assert.False(t, sc.CompareSecretWith([]byte("bar"))) assert.Equal(t, sc.Secret, sc.GetHashedSecret()) } diff --git a/docs/authorize-code-grant.gif b/docs/authorize-code-grant.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a55a299698cd7af7bebf8c4971d979815567287 GIT binary patch literal 395103 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%0AB?%K{f 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 literal 0 HcmV?d00001 diff --git a/fosite-example/internal/store.go b/fosite-example/internal/store.go new file mode 100644 index 00000000..3530fbb9 --- /dev/null +++ b/fosite-example/internal/store.go @@ -0,0 +1,100 @@ +package internal + +import ( + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/handler/authorize" + "github.com/ory-am/fosite/handler/token" +) + +type AuthorizeCodesRelation struct { + request fosite.AuthorizeRequester + session *authorize.AuthorizeSession +} + +type AccessRelation struct { + access fosite.AccessRequester + session *token.TokenSession +} + +type Store struct { + Clients map[string]client.Client + AuthorizeCodes map[string]AuthorizeCodesRelation + AccessTokens map[string]AccessRelation + RefreshTokens map[string]AccessRelation +} + +func NewStore() *Store { + return &Store{ + Clients: map[string]client.Client{}, + AuthorizeCodes: map[string]AuthorizeCodesRelation{}, + AccessTokens: map[string]AccessRelation{}, + RefreshTokens: map[string]AccessRelation{}, + } +} + +func (s *Store) GetClient(id string) (client.Client, error) { + cl, ok := s.Clients[id] + if !ok { + return nil, pkg.ErrNotFound + } + return cl, nil +} + +func (s *Store) CreateAuthorizeCodeSession(code string, ar fosite.AuthorizeRequester, sess *authorize.AuthorizeSession) error { + s.AuthorizeCodes[code] = AuthorizeCodesRelation{request: ar, session: sess} + return nil +} + +func (s *Store) GetAuthorizeCodeSession(code string, sess *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { + rel, ok := s.AuthorizeCodes[code] + if !ok { + return nil, pkg.ErrNotFound + } + sess = rel.session + return rel.request, nil +} + +func (s *Store) DeleteAuthorizeCodeSession(code string) error { + delete(s.AuthorizeCodes, code) + return nil +} + +func (s *Store) CreateAccessTokenSession(signature string, access fosite.AccessRequester, session *token.TokenSession) error { + s.AccessTokens[signature] = AccessRelation{access: access, session: session} + return nil +} + +func (s *Store) GetAccessTokenSession(signature string, session *token.TokenSession) (fosite.AccessRequester, error) { + rel, ok := s.AccessTokens[signature] + if !ok { + return nil, pkg.ErrNotFound + } + session = rel.session + return rel.access, nil +} + +func (s *Store) DeleteAccessTokenSession(signature string) error { + delete(s.AccessTokens, signature) + return nil +} + +func (s *Store) CreateRefreshTokenSession(signature string, access fosite.AccessRequester, session *token.TokenSession) error { + s.RefreshTokens[signature] = AccessRelation{access: access, session: session} + return nil +} + +func (s *Store) GetRefreshTokenSession(signature string, session *token.TokenSession) (fosite.AccessRequester, error) { + rel, ok := s.RefreshTokens[signature] + if !ok { + return nil, pkg.ErrNotFound + } + session = rel.session + return rel.access, nil +} + +func (s *Store) DeleteRefreshTokenSession(signature string) error { + delete(s.RefreshTokens, signature) + return nil +} diff --git a/fosite-example/main.go b/fosite-example/main.go new file mode 100644 index 00000000..cab0f880 --- /dev/null +++ b/fosite-example/main.go @@ -0,0 +1,148 @@ +package main + +import ( + "github.com/go-errors/errors" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/fosite-example/internal" + "github.com/ory-am/fosite/handler/authorize/explicit" + goauth "golang.org/x/oauth2" + "log" + "net/http" + "time" +) + +var store = &internal.Store{ + Clients: map[string]client.Client{ + "my-client": &client.SecureClient{ + ID: "my-client", + Secret: []byte(`$2a$10$IxMdI6d.LIRZPpSfEwNoeu4rY3FhDREsxFJXikcgdRRAStxUlsuEO`), // = "foobar" + RedirectURIs: []string{"http://localhost:8080/callback"}, + }, + }, + AuthorizeCodes: map[string]internal.AuthorizeCodesRelation{}, + AccessTokens: map[string]internal.AccessRelation{}, + RefreshTokens: map[string]internal.AccessRelation{}, +} +var oauth2 OAuth2Provider = fositeFactory() +var clientConf = goauth.Config{ + ClientID: "my-client", + ClientSecret: "foobar", + RedirectURL: "http://localhost:8080/callback", + Scopes: []string{"fosite"}, + Endpoint: goauth.Endpoint{ + TokenURL: "http://localhost:8080/token", + AuthURL: "http://localhost:8080/auth", + }, +} + +type session struct { + User string +} + +func main() { + + http.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(`Click here to authorize
+
+ You can also click here to see what happens when you issue an invalid request. + `)) + }) + http.HandleFunc("/callback", func(rw http.ResponseWriter, req *http.Request) { + rw.Header().Set("Content-Type", "text/html; charset=utf-8") + if req.URL.Query().Get("error") != "" { + rw.Write([]byte(`

Error!

+ Error: ` + req.URL.Query().Get("error") + + `
+ Description: ` + req.URL.Query().Get("error_description") + `

Go back`)) + return + } + rw.Write([]byte(`Amazing! You just got an authorize code!: ` + req.URL.Query().Get("code") + `

`)) + + token, err := clientConf.Exchange(goauth.NoContext, req.URL.Query().Get("code")) + if err != nil { + rw.Write([]byte(`I tried to exchange the authorize code for an access token but it did not work :(
got error: ` + err.Error())) + } else { + rw.Write([]byte(`Cool! You are now a proud token owner.
Access token: ` + token.AccessToken + `
Refresh token: ` + token.RefreshToken)) + } + }) + http.HandleFunc("/auth", authEndpoint) + http.HandleFunc("/token", tokenEndpoint) + http.ListenAndServe(":3846", nil) +} + +func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { + ctx := NewContext() + var mySessionData session + + accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) + if err != nil { + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) + if err != nil { + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + oauth2.WriteAccessResponse(rw, accessRequest, response) +} + +func authEndpoint(rw http.ResponseWriter, req *http.Request) { + ctx := NewContext() + + ar, err := oauth2.NewAuthorizeRequest(ctx, req) + if err != nil { + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + if req.Form.Get("username") != "peter" { + rw.Header().Set("Content-Type", "text/html; charset=utf-8") + rw.Write([]byte(`Howdy! This is the log in page. For this example, it is enough to supply the username.
+
+ + +
+ ps: I heard that user "peter" is a valid username so why not try his name ;) `)) + return + } + + // Normally, this would be the place where you would check if the user is logged in and gives his consent. + // For this test, let's assume that the user exists, is logged in, and gives his consent... + + sess := &session{ + User: "peter", + } + + response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, sess) + if err != nil { + log.Printf("Error occurred in authorize response part: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + oauth2.WriteAuthorizeResponse(rw, ar, response) +} + +func fositeFactory() OAuth2Provider { + // NewMyStorageImplementation should implement all storage interfaces. + + f := NewFosite(store) + accessTokenLifespan := time.Hour + + // Let's enable the explicit authorize code grant! + explicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AuthCodeLifespan: time.Minute * 10, + AccessTokenLifespan: accessTokenLifespan, + } + f.AuthorizeEndpointHandlers.Add("code", explicitHandler) + f.TokenEndpointHandlers.Add("code", explicitHandler) + + return f +} diff --git a/fosite.go b/fosite.go index 79372976..77a5dda0 100644 --- a/fosite.go +++ b/fosite.go @@ -1,19 +1,21 @@ package fosite +import "github.com/ory-am/fosite/hash" + // AuthorizeEndpointHandlers is a list of AuthorizeEndpointHandler -type AuthorizeEndpointHandlers []AuthorizeEndpointHandler +type AuthorizeEndpointHandlers map[string]AuthorizeEndpointHandler // Add adds an AuthorizeEndpointHandler to this list -func (a AuthorizeEndpointHandlers) Add(h AuthorizeEndpointHandler) { - a = append(a, h) +func (a AuthorizeEndpointHandlers) Add(key string, h AuthorizeEndpointHandler) { + a[key] = h } // TokenEndpointHandlers is a list of TokenEndpointHandler -type TokenEndpointHandlers []TokenEndpointHandler +type TokenEndpointHandlers map[string]TokenEndpointHandler // Add adds an TokenEndpointHandler to this list -func (t TokenEndpointHandlers) Add(h TokenEndpointHandler) { - t = append(t, h) +func (t TokenEndpointHandlers) Add(key string, h TokenEndpointHandler) { + t[key] = h } // NewFosite returns a new OAuth2Provider implementation @@ -23,6 +25,7 @@ func NewFosite(store Storage) *Fosite { RequiredScope: DefaultRequiredScopeName, AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{}, TokenEndpointHandlers: TokenEndpointHandlers{}, + Hasher: &hash.BCrypt{WorkFactor: 12}, } } @@ -32,4 +35,5 @@ type Fosite struct { Store Storage AuthorizeEndpointHandlers AuthorizeEndpointHandlers TokenEndpointHandlers TokenEndpointHandlers + Hasher hash.Hasher } diff --git a/fosite_test.go b/fosite_test.go new file mode 100644 index 00000000..7187b76d --- /dev/null +++ b/fosite_test.go @@ -0,0 +1,16 @@ +package fosite_test + +import ( + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/handler/authorize/explicit" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAuthorizeEndpointHandlers(t *testing.T) { + h := &explicit.AuthorizeExplicitEndpointHandler{} + hs := AuthorizeEndpointHandlers{} + hs.Add("k", h) + assert.Len(t, hs, 1) + assert.Equal(t, hs["k"], h) +} diff --git a/internal/client.go b/internal/client.go index e1bed013..943d92a8 100644 --- a/internal/client.go +++ b/internal/client.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: client.go +// Source: github.com/ory-am/fosite/client (interfaces: Client) package internal @@ -28,26 +28,6 @@ func (_m *MockClient) EXPECT() *_MockClientRecorder { return _m.recorder } -func (_m *MockClient) GetID() string { - ret := _m.ctrl.Call(_m, "GetID") - ret0, _ := ret[0].(string) - return ret0 -} - -func (_mr *_MockClientRecorder) GetID() *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetID") -} - -func (_m *MockClient) CompareSecretWith(secret []byte) bool { - ret := _m.ctrl.Call(_m, "CompareSecretWith", secret) - ret0, _ := ret[0].(bool) - return ret0 -} - -func (_mr *_MockClientRecorder) CompareSecretWith(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CompareSecretWith", arg0) -} - func (_m *MockClient) GetHashedSecret() []byte { ret := _m.ctrl.Call(_m, "GetHashedSecret") ret0, _ := ret[0].([]byte) @@ -58,6 +38,16 @@ func (_mr *_MockClientRecorder) GetHashedSecret() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetHashedSecret") } +func (_m *MockClient) GetID() string { + ret := _m.ctrl.Call(_m, "GetID") + ret0, _ := ret[0].(string) + return ret0 +} + +func (_mr *_MockClientRecorder) GetID() *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetID") +} + func (_m *MockClient) GetRedirectURIs() []string { ret := _m.ctrl.Call(_m, "GetRedirectURIs") ret0, _ := ret[0].([]string) diff --git a/internal/hash.go b/internal/hash.go new file mode 100644 index 00000000..a5fd354e --- /dev/null +++ b/internal/hash.go @@ -0,0 +1,50 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/hash (interfaces: Hasher) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" +) + +// Mock of Hasher interface +type MockHasher struct { + ctrl *gomock.Controller + recorder *_MockHasherRecorder +} + +// Recorder for MockHasher (not exported) +type _MockHasherRecorder struct { + mock *MockHasher +} + +func NewMockHasher(ctrl *gomock.Controller) *MockHasher { + mock := &MockHasher{ctrl: ctrl} + mock.recorder = &_MockHasherRecorder{mock} + return mock +} + +func (_m *MockHasher) EXPECT() *_MockHasherRecorder { + return _m.recorder +} + +func (_m *MockHasher) Compare(_param0 []byte, _param1 []byte) error { + ret := _m.ctrl.Call(_m, "Compare", _param0, _param1) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockHasherRecorder) Compare(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "Compare", arg0, arg1) +} + +func (_m *MockHasher) Hash(_param0 []byte) ([]byte, error) { + ret := _m.ctrl.Call(_m, "Hash", _param0) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockHasherRecorder) Hash(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "Hash", arg0) +} diff --git a/oauth2_test.go b/oauth2_test.go index 1f4ef7e4..d1288f79 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -29,6 +29,7 @@ var mockStore *MockStorage var mockClient *MockClient var mockAuthStore *MockAuthorizeStorage var mockAuthReq *MockAuthorizeRequester +var mockHasher *MockHasher func TestFosite(t *testing.T) { ctrl := gomock.NewController(t) @@ -36,6 +37,7 @@ func TestFosite(t *testing.T) { mockClient = NewMockClient(ctrl) mockAuthStore = NewMockAuthorizeStorage(ctrl) mockAuthReq = NewMockAuthorizeRequester(ctrl) + mockHasher = NewMockHasher(ctrl) defer ctrl.Finish() authExplicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ @@ -43,12 +45,13 @@ func TestFosite(t *testing.T) { Store: mockAuthStore, } oauth2 := &Fosite{ - Store: mockStore, + Store: mockStore, + Hasher: mockHasher, AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{ - authExplicitHandler, + "code": authExplicitHandler, }, TokenEndpointHandlers: TokenEndpointHandlers{ - authExplicitHandler, + "code": authExplicitHandler, }, } @@ -57,6 +60,8 @@ func TestFosite(t *testing.T) { mockAuthReq = NewMockAuthorizeRequester(ctrl) mockClient = NewMockClient(ctrl) mockAuthStore = NewMockAuthorizeStorage(ctrl) + mockHasher = NewMockHasher(ctrl) + oauth2.Hasher = mockHasher oauth2.Store = mockStore authExplicitHandler.Store = mockAuthStore }) @@ -160,7 +165,6 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(nil, errors.New("foo")) - mockClient.EXPECT().CompareSecretWith(gomock.Any()).AnyTimes().Return(true) mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) @@ -184,7 +188,9 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres state: state, mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) - mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) + + mockHasher.EXPECT().Compare(gomock.Any(), gomock.Any()).Return(nil) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) @@ -209,11 +215,13 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres state: state, mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) - mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) + + mockHasher.EXPECT().Compare(gomock.Any(), gomock.Any()).Return(nil) + mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) - mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(nil, errors.New("foo")) }, expectStatusCode: http.StatusOK, @@ -235,17 +243,19 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres state: state, mock: func() { mockStore.EXPECT().GetClient(gomock.Eq(clientID)).AnyTimes().Return(mockClient, nil) + + mockHasher.EXPECT().Compare(gomock.Any(), gomock.Any()).Return(nil) + mockClient.EXPECT().GetID().AnyTimes().Return(clientID) - mockClient.EXPECT().CompareSecretWith(gomock.Eq(clientSecretByte)).AnyTimes().Return(true) mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) - mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(mockAuthReq, nil) mockAuthStore.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) mockAuthStore.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) mockAuthStore.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).AnyTimes().Return(nil) + mockAuthReq.EXPECT().GetClient().AnyTimes().Return(mockClient) mockAuthReq.EXPECT().GetRequestedAt().AnyTimes().Return(time.Now()) mockAuthReq.EXPECT().GetScopes().Return([]string{DefaultRequiredScopeName}) From 83194b6b2849292da041385e2274d42a06b36120 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 20:54:37 +0100 Subject: [PATCH 37/47] tests: increased coverage --- authorize_request_test.go | 6 ++++++ fosite_test.go | 8 ++++++++ oauth2_test.go | 15 +++++---------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/authorize_request_test.go b/authorize_request_test.go index d150e57e..760834f6 100644 --- a/authorize_request_test.go +++ b/authorize_request_test.go @@ -18,6 +18,10 @@ func TestAuthorizeRequest(t *testing.T) { ar *AuthorizeRequest isRedirValid bool }{ + { + ar: NewAuthorizeRequest(), + isRedirValid: false, + }, { ar: &AuthorizeRequest{}, isRedirValid: false, @@ -83,6 +87,8 @@ func TestAuthorizeRequest(t *testing.T) { assert.Equal(t, c.ar.State, c.ar.GetState(), "%d", k) assert.Equal(t, c.isRedirValid, c.ar.IsRedirectURIValid(), "%d", k) c.ar.GrantScope("foo") + c.ar.SetScopes([]string{"foo"}) assert.True(t, c.ar.GetGrantedScopes().Has("foo")) + assert.True(t, c.ar.GetScopes().Has("foo")) } } diff --git a/fosite_test.go b/fosite_test.go index 7187b76d..525f586a 100644 --- a/fosite_test.go +++ b/fosite_test.go @@ -14,3 +14,11 @@ func TestAuthorizeEndpointHandlers(t *testing.T) { assert.Len(t, hs, 1) assert.Equal(t, hs["k"], h) } + +func TestTokenEndpointHandlers(t *testing.T) { + h := &explicit.AuthorizeExplicitEndpointHandler{} + hs := TokenEndpointHandlers{} + hs.Add("k", h) + assert.Len(t, hs, 1) + assert.Equal(t, hs["k"], h) +} diff --git a/oauth2_test.go b/oauth2_test.go index d1288f79..564ed705 100644 --- a/oauth2_test.go +++ b/oauth2_test.go @@ -44,16 +44,11 @@ func TestFosite(t *testing.T) { Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, Store: mockAuthStore, } - oauth2 := &Fosite{ - Store: mockStore, - Hasher: mockHasher, - AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{ - "code": authExplicitHandler, - }, - TokenEndpointHandlers: TokenEndpointHandlers{ - "code": authExplicitHandler, - }, - } + + oauth2 := NewFosite(mockStore) + oauth2.Hasher = mockHasher + oauth2.AuthorizeEndpointHandlers.Add("code", authExplicitHandler) + oauth2.TokenEndpointHandlers.Add("code", authExplicitHandler) oauth2TestAuthorizeCodeWorkFlow(oauth2, t, func() { mockStore = NewMockStorage(ctrl) From d12fa5ca89cfebb351e023d53b0c57420725195b Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Mon, 11 Jan 2016 23:52:35 +0100 Subject: [PATCH 38/47] all: updated example and added implicit grant --- README.md | 3 +- access_request_handler.go | 2 +- access_request_handler_test.go | 10 +- access_response_handler.go | 2 +- access_response_handler_test.go | 8 +- authorize_request_handler.go | 1 - authorize_response_handler.go | 30 ---- authorize_response_handler_test.go | 93 ----------- authorize_write.go | 35 +++++ authorize_write_test.go | 103 ++++++++++++ docs/authorize-code-grant.gif | Bin 395103 -> 584130 bytes fosite-example/internal/store.go | 7 + fosite-example/main.go | 148 +++++++++++++----- handler.go | 6 +- handler/authorize/explicit/explicit_auth.go | 5 +- .../authorize/explicit/explicit_auth_test.go | 6 +- handler/authorize/explicit/explicit_token.go | 25 ++- .../authorize/explicit/explicit_token_test.go | 37 ++--- handler/authorize/implicit/implicit.go | 53 +++++++ handler/authorize/implicit/implicit_test.go | 81 ++++++++++ handler/authorize/storage.go | 6 +- internal/authorize_explicit_storage.go | 125 +++++++++++++++ internal/authorize_implicit_storage.go | 41 +++++ internal/authorize_storage.go | 125 --------------- internal/token_handler.go | 16 +- oauth2_integration_helper_test.go | 77 +++++++++ oauth2_test.go => oauth2_integration_test.go | 76 ++------- 27 files changed, 714 insertions(+), 407 deletions(-) create mode 100644 authorize_write.go create mode 100644 authorize_write_test.go create mode 100644 handler/authorize/implicit/implicit_test.go create mode 100644 internal/authorize_explicit_storage.go create mode 100644 internal/authorize_implicit_storage.go delete mode 100644 internal/authorize_storage.go create mode 100644 oauth2_integration_helper_test.go rename oauth2_test.go => oauth2_integration_test.go (77%) diff --git a/README.md b/README.md index 9250bcfd..e5c7a717 100644 --- a/README.md +++ b/README.md @@ -392,7 +392,8 @@ rather sooner than later. **Create storage mocks** ``` mockgen -destination internal/storage.go github.com/ory-am/fosite Storage -mockgen -destination internal/authorize_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeStorage +mockgen -destination internal/authorize_explicit_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeExplicitStorage +mockgen -destination internal/authorize_implicit_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeImplicitStorage mockgen -destination internal/token_storage.go github.com/ory-am/fosite/handler/token TokenStorage ``` diff --git a/access_request_handler.go b/access_request_handler.go index 0cf9d508..6fdde900 100644 --- a/access_request_handler.go +++ b/access_request_handler.go @@ -73,7 +73,7 @@ func (f *Fosite) NewAccessRequest(ctx context.Context, r *http.Request, session ar.Client = client for _, loader := range f.TokenEndpointHandlers { - if err := loader.HandleTokenEndpointRequest(ctx, r, ar, session); err != nil { + if err := loader.ValidateTokenEndpointRequest(ctx, r, ar, session); err != nil { return ar, err } } diff --git a/access_request_handler_test.go b/access_request_handler_test.go index b818e198..5945a3fd 100644 --- a/access_request_handler_test.go +++ b/access_request_handler_test.go @@ -123,7 +123,7 @@ func TestNewAccessRequest(t *testing.T) { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().GetHashedSecret().Return([]byte("foo")) hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) + handler.EXPECT().ValidateTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) }, handlers: TokenEndpointHandlers{"a": handler}, }, @@ -140,7 +140,7 @@ func TestNewAccessRequest(t *testing.T) { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().GetHashedSecret().Return([]byte("foo")) hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handler.EXPECT().ValidateTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, handlers: TokenEndpointHandlers{"a": handler}, }, @@ -157,7 +157,7 @@ func TestNewAccessRequest(t *testing.T) { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().GetHashedSecret().Return([]byte("foo")) hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { + handler.EXPECT().ValidateTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("bar") }).Return(nil) }, @@ -175,7 +175,7 @@ func TestNewAccessRequest(t *testing.T) { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().GetHashedSecret().Return([]byte("foo")) hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { + handler.EXPECT().ValidateTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") a.SetScopes([]string{"asdfasdf"}) }).Return(nil) @@ -195,7 +195,7 @@ func TestNewAccessRequest(t *testing.T) { store.EXPECT().GetClient(gomock.Eq("foo")).Return(client, nil) client.EXPECT().GetHashedSecret().Return([]byte("foo")) hasher.EXPECT().Compare(gomock.Eq([]byte("foo")), gomock.Eq([]byte("bar"))).Return(nil) - handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { + handler.EXPECT().ValidateTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, a AccessRequester, _ interface{}) { a.SetGrantTypeHandled("foo") a.SetScopes([]string{DefaultRequiredScopeName}) }).Return(nil) diff --git a/access_response_handler.go b/access_response_handler.go index c3d443fb..0becf526 100644 --- a/access_response_handler.go +++ b/access_response_handler.go @@ -12,7 +12,7 @@ func (f *Fosite) NewAccessResponse(ctx context.Context, req *http.Request, reque response := NewAccessResponse() for _, tk = range f.TokenEndpointHandlers { - if err = tk.HandleTokenEndpointResponse(ctx, req, requester, response, session); err != nil { + if err = tk.HandleTokenEndpointRequest(ctx, req, requester, response, session); err != nil { return nil, errors.Wrap(err, 1) } } diff --git a/access_response_handler_test.go b/access_response_handler_test.go index 74edb995..32de050e 100644 --- a/access_response_handler_test.go +++ b/access_response_handler_test.go @@ -30,21 +30,21 @@ func TestNewAccessResponse(t *testing.T) { }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(ErrServerError) }, handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrServerError, }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, handlers: TokenEndpointHandlers{"a": handler}, expectErr: ErrUnsupportedGrantType, }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { resp.SetAccessToken("foo") }).Return(nil) }, @@ -53,7 +53,7 @@ func TestNewAccessResponse(t *testing.T) { }, { mock: func() { - handler.EXPECT().HandleTokenEndpointResponse(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { + handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do(func(_ context.Context, _ *http.Request, _ AccessRequester, resp AccessResponder, _param4 interface{}) { resp.SetAccessToken("foo") resp.SetTokenType("bar") }).Return(nil) diff --git a/authorize_request_handler.go b/authorize_request_handler.go index 0c27f9e6..a6bef64a 100644 --- a/authorize_request_handler.go +++ b/authorize_request_handler.go @@ -69,7 +69,6 @@ func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (Author // Remove empty items from arrays request.Scopes = removeEmpty(strings.Split(r.Form.Get("scope"), " ")) - if !request.Scopes.Has(c.RequiredScope) { return request, errors.New(ErrInvalidScope) } diff --git a/authorize_response_handler.go b/authorize_response_handler.go index 237d05c2..748b8464 100644 --- a/authorize_response_handler.go +++ b/authorize_response_handler.go @@ -6,36 +6,6 @@ import ( "net/http" ) -func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { - redir := ar.GetRedirectURI() - - // Explicit grants - q := redir.Query() - rq := resp.GetQuery() - for k := range rq { - q.Set(k, rq.Get(k)) - } - redir.RawQuery = q.Encode() - - // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... - wh := rw.Header() - rh := resp.GetHeader() - for k := range rh { - wh.Set(k, rh.Get(k)) - } - - // Implicit grants - redir.Fragment = resp.GetFragment().Encode() - - // https://tools.ietf.org/html/rfc6749#section-4.1.1 - // When a decision is established, the authorization server directs the - // user-agent to the provided client redirection URI using an HTTP - // redirection response, or by other means available to it via the - // user-agent. - wh.Set("Location", redir.String()) - rw.WriteHeader(http.StatusFound) -} - func (o *Fosite) NewAuthorizeResponse(ctx context.Context, r *http.Request, ar AuthorizeRequester, session interface{}) (AuthorizeResponder, error) { if session == nil { return nil, errors.New("Session must not be nil") diff --git a/authorize_response_handler_test.go b/authorize_response_handler_test.go index 369ec4bf..ba8a4944 100644 --- a/authorize_response_handler_test.go +++ b/authorize_response_handler_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/net/context" "net/http" - "net/url" "testing" ) @@ -76,95 +75,3 @@ func TestNewAuthorizeResponse(t *testing.T) { t.Logf("Passed test case %d", k) } } - -func TestWriteAuthorizeResponse(t *testing.T) { - oauth2 := &Fosite{} - header := http.Header{} - ctrl := gomock.NewController(t) - rw := NewMockResponseWriter(ctrl) - ar := NewMockAuthorizeRequester(ctrl) - resp := NewMockAuthorizeResponder(ctrl) - defer ctrl.Finish() - - for k, c := range []struct { - setup func() - expect func() - }{ - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{}) - resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, - }, header) - }, - }, - { - setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") - ar.EXPECT().GetRedirectURI().Return(redir) - resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) - resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) - resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) - - rw.EXPECT().Header().Return(header) - rw.EXPECT().WriteHeader(http.StatusFound) - }, - expect: func() { - assert.Equal(t, http.Header{ - "X-Bar": {"baz"}, - "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, - }, header) - }, - }, - } { - t.Logf("Starting test case %d", k) - c.setup() - oauth2.WriteAuthorizeResponse(rw, ar, resp) - c.expect() - header = http.Header{} - t.Logf("Passed test case %d", k) - } -} diff --git a/authorize_write.go b/authorize_write.go new file mode 100644 index 00000000..cd995099 --- /dev/null +++ b/authorize_write.go @@ -0,0 +1,35 @@ +package fosite + +import ( + "net/http" +) + +func (c *Fosite) WriteAuthorizeResponse(rw http.ResponseWriter, ar AuthorizeRequester, resp AuthorizeResponder) { + redir := ar.GetRedirectURI() + + // Explicit grants + q := redir.Query() + rq := resp.GetQuery() + for k := range rq { + q.Set(k, rq.Get(k)) + } + redir.RawQuery = q.Encode() + + // Set custom headers, e.g. "X-MySuperCoolCustomHeader" or "X-DONT-CACHE-ME"... + wh := rw.Header() + rh := resp.GetHeader() + for k := range rh { + wh.Set(k, rh.Get(k)) + } + + // Implicit grants + redir.Fragment = resp.GetFragment().Encode() + + // https://tools.ietf.org/html/rfc6749#section-4.1.1 + // When a decision is established, the authorization server directs the + // user-agent to the provided client redirection URI using an HTTP + // redirection response, or by other means available to it via the + // user-agent. + wh.Set("Location", redir.String()) + rw.WriteHeader(http.StatusFound) +} diff --git a/authorize_write_test.go b/authorize_write_test.go new file mode 100644 index 00000000..274d8811 --- /dev/null +++ b/authorize_write_test.go @@ -0,0 +1,103 @@ +package fosite_test + +import ( + "github.com/golang/mock/gomock" + . "github.com/ory-am/fosite" + . "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" +) + +func TestWriteAuthorizeResponse(t *testing.T) { + oauth2 := &Fosite{} + header := http.Header{} + ctrl := gomock.NewController(t) + rw := NewMockResponseWriter(ctrl) + ar := NewMockAuthorizeRequester(ctrl) + resp := NewMockAuthorizeResponder(ctrl) + defer ctrl.Finish() + + for k, c := range []struct { + setup func() + expect func() + }{ + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + { + setup: func() { + redir, _ := url.Parse("http://foobar.com/?foo=bar") + ar.EXPECT().GetRedirectURI().Return(redir) + resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) + resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) + resp.EXPECT().GetQuery().Return(url.Values{"bar": {"baz"}}) + + rw.EXPECT().Header().Return(header) + rw.EXPECT().WriteHeader(http.StatusFound) + }, + expect: func() { + assert.Equal(t, http.Header{ + "X-Bar": {"baz"}, + "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + }, header) + }, + }, + } { + t.Logf("Starting test case %d", k) + c.setup() + oauth2.WriteAuthorizeResponse(rw, ar, resp) + c.expect() + header = http.Header{} + t.Logf("Passed test case %d", k) + } +} diff --git a/docs/authorize-code-grant.gif b/docs/authorize-code-grant.gif index 7a55a299698cd7af7bebf8c4971d979815567287..4973221acfa829c58c12bdd7120b8d2f5971deec 100644 GIT binary patch delta 355887 zcmY(J2T)T%_vk}HAcS5-s)pVnR4D=h>0OcDr6Wy51Ox(s(4+*FD!ocar8h(G5T#cE z>0P9Q@$r5C`M-JZH)qc7Jv)2n-aTjUojtoh6Bs(jIgsj_YSJ=xy`W%%a{z!4dcZ<@ zfVjJ_D6tN=nh^5tl<@n?_bi`FAHyLZd|$wsfk7WaDg-8?CIk^vKp+hCv@jSe8yk#` zjh%y?os*rNi-Uvnzi|B*?*D~{o15o<;pO4s{a=v(TjAyVe-P#4m*?XX;OGAz`EM!A z&o9c)FCriyC?FdS#6%rN|fs4XLZxIs}6B82`6P1z>e;_3(eT$sDoRYGlwx+tV zzMi$Q$ulz>)5q=z$rm#Gfr>m)dORt*Y!wzf?MP2}U!Z7Tgj83IVsWHy3i?TOxK%)q z`>R(zFI+%Hf@= zA>>x|&}PlhM(5!7{(-^%{{Ehxp6>3h&W@IW_O$6{r-dfll}4-m7Q2fMhnt=kS3?nJ z<2k#NEk7r5vlEk36H}8DQ`3{vGn2FP(~CdnS5}vQt*)-F+?FdV%gf6@fBr|7e*TAB z{XcSBUs+lCwf1XmZ4J4$zP7%xvAMo^d$IZ-%i8wV_RjXs-p<~^-oeqq(eK~C{~RBm zoSdB9a(@0FeRg*GUwwRheA{|-baZfVu)Vo6b9_EhkRJ^5XL1 z|L5}ma%;b2zr4J@zP`D+`TO_p4IY1u$6w;{7kKnLE-vx=XZWo@`1Rj^R}S!-oA|wX{O|Ah;{p8d9{lmh-}BX* z%j4^-tE=n(s9XJ>9K=Yg01yP+@}F4%fZzch5IXi$+j_#gso6q=WU1BnfW%0YME;i| z?Ic2*!A#As#Umf3U+ydnd@UKvL6`wq1I4(%7ihfaw;HT19WOB`u%_d$D^o5o{_3_k zSXVw>ZQG@Hhxv}c>{plZGOMBbN{jHPKY@}04ONRR{(p8B1w@5yKKlN9Cs9*;#3U|E z&wcTZ!GT&ihRWy#>OGOez>_K%(tPzu%V88K?{&|T>({UT_Z;SGLOqc#IN)0bRONSs zD>JdD_(P%e<1UUIwnt%~(*3$trTp(62mh$YE)eIDW@nF!oTi3Vhx>w>we6Er`0)3Y zx`P~&_{fDQkqgbSztIPjy?0Boa=k}Vy{QlUmvXPxB5JvDK@6u+2Ep-c$bPDjD?SHX zB@=_Q=jNU|vGSHJ=yPvEE z4D=rUzgL-_Hhy1^72@}eK!y^rC22T(U<=b=^M!IcXQ!|!gV_r9W1bwMVsv6?FH>=Iu>HWf*e0shr&qimL)jr7i_#Gy?3w};R{F@8q@+_qY zLX=U0S!&3=)_ASDv^7$xJ^(9S(wZRqAFGq$ooBtD+UXsBCMq<4UwtOr_!#W_2g>4} z+4b95!(F_ENFeabcO)5GKsikZBMne5?WK=62lZDay9GhaSd5tYcF-frVDyhKFX(%7 zA5ZTUc?wMr)pUvM2GowK^hJJ}fy$GcPv!Adx-0J}M7>Z}yWf2_PZV&rga4sOnzrX} zY-sgz)Tl*@$%}@<`X$4zt4kxT*V4$!RNH9$$Mr*}(WI7)a5`kQ3Vmt{cBnwn)wHjX zk=}6!U5Ur^d?IyUz`~LbaLF~~mN`ls%r#fvirx@gZ9yk1&*|PceH0|mIpFvBQpdz} zGCNLh(GZj=s=t@1$Na$NI6(NH>#$6?NM&0UtW7YVzk+e? zdG%&D-hJUYcx5E5;x$RXk?7mRv*p+FL%3qMqmP--(>M?$$A>cbF56A1M(WWQ7>=B9 z$e=fe?2k5`XAm<6Y&#V--8(nGJ$uL=?gQ1lWQ3f4#^byG(+oc=kJRx+)Yf;@wmMPW zZYcE#D!i?vAW&-8>~n?z&7W}<@G4pCV%NRA4BmE?Brl|sp&;a6^e5)ICK5erXaU_v zY1m;HcbpYVE`wFnM>6)cXjgaksCSb&ow_evj0;zlm^2{2*1mgA80J%-rfGy()+BuY z{EL`}gqrdR4F{XfjK|Xr4O}j16j?bcn(jp8$rl5dRv<{;MlK&@Ag zE8gFE`|iLG$@`_3aF3jaG@sPRUQW+gCuNSGlYrG9BP{kceOT0h0VO4V`ta-H_NGp6 zAm51K6R5S&UW0<(hFN=bOgL2_QD3p7TS(jcTY*#V9N}snhr!R6xtz37@l`&?AU*-2536FSPOJ*h$ z*=2K8xzb)I=wJ)tmB4 z3+<1_^Mm^)UxT^?)wL|cqH7ze`1tgF0BEDK9@EI~}`3wj7LCpISoppYT%R$r8FDVVf>-WT)h76Z9KD+{Mh<&^qcG3Ha z&zK%|5=S%D32O52O3e(Flas+7p&EJb}ylP;NEx(9mDt$LqxU=3;%4=|@q=D;u-!Yq zh^Cr!zdAg5evM&>(6fdx24ES&PR{-#n8-GK*wGqHJ9D!k^#DPmg9*+0X*nX_>{}9n-PqsfN+hsyBakZ7Ex3`t$AC(V2Drko5h!TByE)KM^XAWtIYo{`t{q7Q^#&LqikNrJ(qj;@)(SFe<5|rr`(n%BWMrl=;DoK2;xzMIFLf`AOr$365BV++*H6os+f1uF&|80Qv74m(qb|iV=`xAvM*wC8DjILV+&1Vi~VCirNx#t z##YS4R$au_Fd*N4k$zii`nKNxZQ~3#1;%JJz5FSya0_05~6-BRqTz^{JU}N0y zOx);29F8IWhjjdeY5bIb{7hQ>Tx0ygO#ISC{4ztrs&vAdX~Kqo!d6%MS*O$xmdGpPD5b zGbRVx5+IKl5?ft9P#Gt|3O~sAe_&nyU=onxlAhw$l;S>{;u#QUmi~^4FOh~QYdt%WPg~n7Tv$PLp=_vu}Y3b>T z0cnw@A7U?)zomU(`}`qchEO{Q$5MpoT+j`gK& zUeiY=Q4jU^T4E5e{!ug~QzkuAftYN81T>i`Fz$g?!r6A-{pK9DopgdgDo|kl%P6h0 zGqq?3&N`IQ%T-HGVb5Ez&t#uq^xM z7G-M<^vh8(hN<)&f5EG=1i8SXz>K1-*%C2>{MQ2?0~piakre!xfu`F+n*ii1I3&ea z9Q6G%F$x9=gF)U?B`kTDH)fPKHa)P=i;U{4=IWcdYJ5huV#8nsP_Bk~yW%vaw3ngsyL4s!WlrO4De|fmmRDKO zTs#0FN8zAMEuSl~BwJ8O7}b|h7^Jo)ehE;$4|L>@pIz>Q+%R8Q~eM$#GvV`8+3Z6YX6ArJ%FTisCj6M{AVEP818GBcI)tbt7&N| zxmUy(Gp1t&L+Xkp zMK&x`%4?IB7(f+nx)3bg%I?rg3|1njTVpt$S+I@zBejIGO&O8hiOJ^?UXpj-ogfyH zW@ZR6%eS5uEFM8x4ugzD6FLR;I@dJ2Vo7Qcq_XbNHe0CA!#-cjKEEKSPh68`YhRFH zyf#@bK6<{0<+B{EKu^AG-E)2jP_PMEaztDb+Jm8j*oT5$mv5cWGUET`07^dQO&S7+ zI>yCm+}g>Sv%H)7Ny&?Bp{cmRs+++YmZ4G%wD{KhxW2~Bp@EA&O1U-$rT$sB{)EQL zskd>VxzPF+s2zOJ2167ABPqj@gm@EK*b=H9ftxMLho$S`I;1TaqTBJ0(|`?DAO?s1 zDb0^ar(Gc4R1|xy@mBya6&B!yAzv||FgyZ~h7$LGf{^5nu7pzR9s!^Lvd1LkPPR~w z;ZJ24=;s?8RWM1dI|+To5Pe%;>s~GBJ2jT2t~2Om^g>)dfTY~u2iFKR6M!euKoANp z{!qby?XgWE@Nsb@DI z7vsOLziJ1^y$X)AfD>uU6Is;6iN|-1AxP7gan!*xRhdX=303{w#ToU?@2rBkEF;<- zEM;9fJp+xT7Z2_*Q;+W@M#(OnHm_RQoi+dJYiE{ zuT#*pLe>O;wWbL=-Lx~I*EZq1-?LN$vDKaLHPvcdE*QH^9t)W2_n6cSUNyuroCJ|~GOZf6m0OOkuV+=vlW#Pa z{jjy&Xk(&qfswSrNXKeOQ*39>S-+Rmko01I`U`))R+6LJnGy@enWE{w^Hs zje&r%#|MMIQ~(4JDzd#+iU&*Edzlj*-rI(FLZTzm1KD+U%ErrO!q@OWjh>W7N2F+~ zKVuZ93!|faiGL0=jyIPN#QyCIQXVX}@6TrMmmhr1sycA~cPd!D9V+lgNaQ?~;?Q>a z^dRGS5KdG8n<;@0UF#t?GqDo@B7z9JBNZb zFoc4^zkijDVA==9;H00iO&ONe8i?w0%Jbc$W6{H^y&%ZvZxq)6uqT$(5dTM!^28f) zqU{Cftf7coCah6d|Ks-O61V&19}yqED)V}H;R_}4zn#;SY-BZ$&EMaFw+ojIC+q4Z zDo6+x`Wa5z1S7dpxTp?-W_u4s|HCVlUj*ZaJODim)LVlt?U}IdA`DTg4I$vM3XDcc zBO0Q^uCbzQzrqsvhyI0?oJ+6gK27(~VzbNsRPf2g3s#z>{rnh}AHr*zuPC8lZ26#hQ2Tcg=}V3&xf!TSe`L$6l{-U-B4(S{QatHU+A zaml2wSPNMIcizv$WyneN~>>?tQKePb9Ej+d$TOg zJ(t>o{}J7@yzrh606O(i;|LLl$NmCNe=&mPKzB#DAaXo-II-k<}EYQpMEx zi$5q0`<>inA#QWLzNQ-!}6t2l%=j%)= zD(J2rC&WHXqU<&5ACYVsXNE_=A5rcSmoVfGh(t;&{v(tyP$K54HF!j+D)Cs=Oq@by zJ?$lh?Di*GFS*~sJrd)4{o<7Jr!z10C5^blx@ipcb-8E+qop znK&ccpM;NzqUvf9QWFnEm=3BW&Os`$?lQ(8vN({M zQghH+JBSw3ja=6D?D>SD=>hjow;N#VjWLy-|ooYG2?yxlZ)K8zB!ex%lrXLp!b7Pmqg zZ0rZl|jrn^9ohEOAAMpcMSiD9j$Yk+*o?PSSvP8(VUt@5n1~^ z-YdeMu&pdr;UBfYm`r@K2G>@(<78`v;Lv;rk`{;AR0QINeLe!IPb{} zsH?G)r*^M#-T46p20RL<4+Hc3Ky=?t@n$SiapX6;Br~f2kz5_&$fwV!ZSv(^N<+6J zzjOM~leu@PI9?EEFFv)`jBY%wPX*~D_I8#>L25jGEW$}*eY3Cmw+LqP(uS>WJL^#~ zPg2RODvXnw#3yAub5oE9DHbyTrTN4P|EMZxE-K(6_=~ZkwnXuubj(nJBj=pZ1!2}S z7It8mLoiaJxVJrq67$Ui$!{qUHyfboKjhrFe?pKzABUzG@^I08v z6@+&5s@sK)| zT_nrArz1L9O2kfu!MYjOH5*l4t&rJ(cTK)~6KNRK-KjKHZr!nf4f6HcI z|B$1K_=^DIS2KRPWzdLmFb(@NKH45p*?+zoAnwoAuM|;8UQO`c3>tgsP87YPrSO!pDe9M$S zLW;;Oe*>CUQ3%(F-Z0w{(E3+Fduzf77Hj~9rd@<;N6uV2%iXfl-8pqfQ5->bB+k;E z(CnI6dCO@$$$gh@GH&FNt$k1~o%%(#M~@c<{m_B^?rguhn$NrBRtN3}vjh5(J|Bu6 zI`W&$4x04(q$Imrx2)*4?KxJzQ8F@{n3KeQFcNYW(KemlIK>99dt2t&{h}C0(T@V) zLbC30a=+5Yf_lZXPu-oJ2?NJi&;I1avu!CI&W^sF`dV<9>8y^td-W|`>LmBN)kXE+ zgYQvJCpo(n&dw@<6ERY!MM8f!HAyqZKH^WZ?H5-T+h*(Vxc1to3AhYd z+DSAteJk{MY3U(kV)@=|I%)mXVe@LYTP2x-OUdxnH+WwtBs?pC6`rP>pj!LI5x_LgRO+I?kSo2L)R zAocwHo`Yo$I{ms%PGJv8da}S!;yYOwC!6V-^_h&KT{uC-1SRrSuEE( zZSAr;44%Huy1aMM{449orlh49M0xS~zV&X5^UX5(;YE{n$Zupx(E4G><$!a@;m5w9 zO?iEnp(wodu9^vwUn;rX*CVz`zBWyD!d~%o=C0vReZ!x<=QeL+`m~Q zRZQ$!n$`88*Sssb&aPz6iPF^RRmMH_8l||{g%o|m-CpvXA!J>QJx+mQ_-731Ass<80 zPZm10_qs(`dJKoV4ZBrzZo2hb!PQJ4vBnpfLVIyD=*-e;|?hPb zebv17)LxLOyG!&1koCTZQ1f`G=4YwqDxn?}(dUZK?DMHmcYoUFQPCSr*dH9%=j71; zvbHxYvllho7arFeLD=WZ*%w!+5yjd6MxsAZMZ>GLKlVeP4_$v;H&P==MJE0jT+8ce+A452hvZrnzp&8$*nNT<&egTqX=`wfeF|O@?EHP-x(sldp`cDU+Omyc* z3|e@rh`jCAtnDlwN-KGuXn_Hn9Szpp3|7-Uy3HhfCe!|WqV@Hmc8%pwy@Ph6`%r_# zP+jd%^TVMph1xYLnaD_Z**C&rEZuMir_L0dNHH|RELywO;WnqE{W(*+!C|=VgHBW7 zaG6eZdH3M0KblU4#|TGobR*w6b#a+sCEH?r=hKl%hmk4Yk&A#xgu(ES!jZXJ-C-Ts zkp-RhZ5>=3`sdA{DMZhVYINmhc$HIcOmK9aPH#8OctIcE zJ@$7`|1TZxhVyn|i~HF+h9|?_SmLf7aKw(df3>3rg*a#(j=T`Gk;5?_cW}=ikS~SvWHE58h<_55CHr2eT-6DACk~9>?FYzwTf-Bs`gJ91Z}< ztUO^~{7&HUL|Fa@+X$M$v5YZ!Y}>o}%02Nq0{sw)MqBoeGvE1PI%B9nKB1tClP79~sgQ{`6^%%|Z(2p|UnD0~D`hzAQJ3{{iC2n4wcRk*<&BhgSWzvQH$>f}?a zcoB`Paf0yK{s@5!gA}uP1O}|sW610XhTj>t<}wu5efp4f;t?1JavZmGd@5}vFEjZ; zU;;Vr9Bgcb8@Fmi!H$4R=qdL}V^=iTa|Db4Xeq55drVGQ!oh-6D0VpN6&LV!Ys2^m zbsszBf=279lABS1#?#Ouc$m=?1_fLu5B3I1Lx{t;OpR1$B8*Hgl~}1%vu3FxOzuR8 z*^=Krkq;Vev^;5jIw@9U61O-m0!IRGU}j-(pcvNJYT4M+$av9VN~fvQ3NxEtWM-OX zW^J1Ms&3Y*X7*u`nN_Y?`ubGv`mDqSs9aWv0fH!Dsy*7BGfJvHlJ zM5hFgrDl!ek7u;xCP6rI^GvikC%|G7ZPh=CR!8VaUW5Gbc&izp9+X(bKVs6~vVYNZu+kFVZ&kz^ zPHnVIr5nDQW%hla;)2uaD0+6r(aIzq4VtpeF0#^q&ygdSz>3R@kNa)YGAqGA zO8yXOWC%n977hp4nc)=X?Co)A+XKvUn<$Fc6u5^A<3%{|E{|Mt=AJF1O_tFbDQg;$ zYl}U$xGV?FC9q})ScAxFL}{4v_7f86U_ApC)&Qbr&`*}YB5;(T#)@u&gIS6Ly;{7L zzmdHUdKU;XtFhY(enx2r0P(JRW25*(Z;$LCLU*kQx%@+kU>n<#^AC6V|D$~3}P*i@t+q%3U{jM?PJ_ihF`jR-h_ zH5jaKCx_4x@yrZL&)}Eo@|vdgz~FBX9Ahu65ng?p*dix(U|D}VwYJc+^#qUnwFhw! za0l|h3I)1dwAz77Jt$5X>i%+Ais$zIBcQqPwk3%`jTT4^MX0C&QpC8%O)ZYQg7t_% zT6Z3E^15cZ*{y*=UZGlE@MRl6$fN!w_fN#U8lmluq@W{oYn!$54CwbOU}&;+7%T8W zf23+?=!1SIK8?_a{X{{K=SX*3(y!L5oEs~kkdrD&H_vD}908(Wl|KZJ4R5SjdJ5>A-Quv-%njqHh3?Wg8420p|R-{o~5Z+t$1 zi)tGI_4`G?K?3akL!29Q-8q(kB1d2shE+(;9IhVQ2ZT5x7KVhMq~IM!9bZh$?*DR0Q{4G7%wpv+NWe?w z$&3lZ5G4{`0B^HtyZ)dJg;4%93J@H`g$U)xd726R(TaC8>H(E0ULigZ63*!zMhrV*QJD8;II=Y$%=M2p5{cq74Sm47 zL86Z&_gP-@?IjK;Ua)E zmND>ypT08cYMTC$-`ia$MolFAA>zwGG5nUVEYkPo`5!{-Woq4U1m$g(5WLh*@v}Hh zVC-1vuIrky=em>UE<7|ml>lUbl8xtIK_S7$Str&MUBi4;R;CkH{o5k}5mqo^Yuiaq z>2SrLm74Tb`otw7M@0Rnks^(U;|%jp6i=VpoQ{8rd2keA)p!alS+W>=6PIT1bKhlm$Jgd@Wg z$XWjhIeb9t0U|6zBchzrP2@q06yv`J(WSL2rc}aV(+M787bUC5hrE9d{4YvkFJcrI zV=0AAKJClt1BE|TVP;u0V3(_?2>iGxO2gnXH!^}#1Eo{re;E?s)wq>j9Wc&dQEz+d zeRSv(iULB8K24o^r=iSvOj+w+A#)A9?^lt~QWC4ePgf7^rW%PwF3>&<5v3xgol8+S zD$Zsaew`uFl*HHjn;~eKES###iGk@U+0#*~9$wkz~a{mm_d2+dIobMAVp#3@ z_sTmZz21GG`?!Hgq8*I>{g)>dS5^T`qVD1%OBXq8!u?a;kY^MNLstACbED%AC7`#9 zV2~o=dVi13G&GEe)t5>c!kmtwCKWT~eWXH7lEfCpI+y#1jx90`L(QhVvO@6ulS?Ei zNlo4=lhMp_eysb`j@t-e4W|1MCZA9{^jKqYjU!2=zVp34;?B0ct_duOkopl78zHqO zEUbr5`wPm*3lV5Yi%gRY_@!#rmRDpX6Ct<)0Qr5N>IRW9Q0d4RB5+P@p^U~ewib*) zQ)$=cWh~Is_B~@JIjqJa*YIHt0G?x4Fm`w0MMosuLUa}U+7?Sc@9wfukM@{J59BW^ zEo z*qKm!(%fPnBmX~1(MD?Y-Dg{Q0WuaU2_%vpdtD*8fNWprzP!D_!Go>EI)OHtEd%c75^9KlzK5w~7jv-xzyTVM}Q}F+o2*uB&hR z)yccHa5 zpmnekv`RUQr8O7C+TQ`yql%!h%q4mxt!&!pC4lpv7kat6iN?MuJk1DJ<*Jej2uan%TCY-J|mx_-8*+X768g8VLi*KEj{AU*Z8uU~H@U0O8 zq@d(1F<50xj#e|w{T$};&>r#&qR!F&IDzeH0rS3#itK1o{A+jHlOW!HC7Lgo$cJm> zD-YD=s_@i_t~dY5w5ls;{RlJbw))3^qDYB;9GXQ}K;G{HWKB6z;!<6;C4e|Sz!)jIH$*yZ?PUFwoc0aympSAKR zyquxX&_Uf@sdaqdB{SsBFCPEPmq!_#f$VkheEfc5tx!^tPtBuvB%0XKo=>c-`$aZ; z!95{W^^Vf-i5b8`&P84|ZSx=D=DwN4uS(UY{l6#s)E09Fqd9MK$Fq)WOBDX{8HDps z;9tq5Se^*~yEHC6{SUxxTrM|8zSjgR8 zV1D*TeSLkKkmt+t`NiY$m3#V44 zFIY+b;a3A;UC15032c;(r+>>%e~DHV4iME|I!$S4+lm)_^Q&d)Ps({)lx|hf@3#x* zWe>jLFN>-Je$Ctb%YXfCyQdntY4P*y-c0+R&{1%o+%lnnG#1ic9WJo9L}X}+MUuAH zyc7>whH&_IvL?Vo#oeD#zEArGJMfNW6kNHR=-(wy{{m%yvwBC-zgKKSG)}SN8PoMl zFN4Ah^s5S6miN+4!cNCX^qw8>Zff^b)`pc_p~)8yGk4G2{zuR>fPni;x-te;{^2;N zQ6YOrfvI@rYz6dbF5{@**>1+a45af@TzadM)XSiin@x!^vr&BT%e?6YC)twK(V*Tx z{^tvuzwu`6C3++FoZJ7&cuPd#~ay1%Com^0O)mT8jV|Mp?VJ5q-IeqcDbNKam zxA6I=#P|b;&A|DLrPt*v`-iUDb94RH)nBF;_x+F-E34TLu&fH+(RVFZNA#p?*8h6B zC0-3$4vR%K3rZ!I><-cLL4Z?mBoVkaj9eE1V4i^!i9RLZbiD`0jgg&rP-cy~-~(_` z!Y4%yj9VJ&wYVtjlTv1@9WTG;i2^;}TxR(@`iWOR!k11Q@BW=J-jtmj3wia0CwMC& z8-MlvYt>2p5aX`nbn`^H-e%e6;(*9YTx~EX`i(vRyI-F3a7EoK;M*gs-=!vR zruiuS``#+-MT-1g^vLlW8E-#Ly4!jXZ1Z}I=iYgjdhqX}gDV_Q&Oy`z`K6Un|IM$~ zSADMo4=X8ys&d-@%=3htv)xDfADJLerYYO!bUjT(Vw2Xle7cxM5!7!ZI@oow-_tw{ zdC~|7=yM6~!GPSkKw%h2Di@>xBUH;J)PsSIbHUayBBxv;PZ+UZE^!D95}6B0fRW%+ za!Imb(BfQZwk=QpeZLi>zhUo&_H$G#2=2J30E%^a)@Uiuaw+jJBo&dJd|fWeC7ynA zlGM#iWdNr7G=dnIpG`*XGlZ9TN>jW*6Z<{&P6UBO7#SVl zj%jy%8UpCA1mO*3<_){Iw@kmpc5fr^-T~WvH`TjLY}|H?e}j|$CXv2=WkTycJv?c7 z$322z&yqGYg7u7z3u&CsWzEighP%I%Ad$5IqcC7g(Dk3R<4(!v%Vy^qvZoNUm3gbM!xU?y9f=jz`d1MZTSqn`GS!&LfIp{kL^T+ImD$3@Zx7H zB1HK-P9|jZ1)}B}LfpR+bXLXv3Lb=TNJ9-J{8n!sbFi8Jl0*(7q@cFa^#yY691l~* zq)~ZrCk@^V4ykzd2fZAMX9bG*U;V=c0t$43#`dB+90=}0Wns=oT2Tlh4kd~Lr9pP( zt4KO&fEqBC-L?=^2p(MSqGgGE@c~2^T?ji>1;Vw;G&-0Yp_&o-8Pec z;m(3RwQvO&>3&YTeg^_v4^W~+{$U5mn-i%EB~qgyie(RlQ+4Lj4ZeNSL4Y6tEf55` zf&B+H;etGNmJa4Ro6Kuyvwq(ARf0G51ID~4Qra;HA&e~XYn<|KG+yEr!5lA}$gTm0QY^1Guq!EC-L1Cmv+};(cG!mPSk=*NS zHICAIJ)X;5AnBa~JW2tf69O*?5km_I0bl-7waLPp} zX}k5Zs_?!{a4S_N^77yDj3}#e_|Y{x6ImxhW+vlz`@Q>Ne& zrnR#xf^h)ubu^%g*%`F50Fmr*#k6|@CC@;bG%mMJbHo%9MD)@EkZRtsyL7{@S!a8E zORg&Q+@c4iu@Pa6oe*Z+24ljzN1QtfSG_h)UB<0~83=+wRI%l=GK*(rXeh6(|89C( z51aeC^>SFlkDkiW^$7~)7d~oJ2_L>mVNVQ0>8S} zI<4TAaRmR^;Lek5B%gyrm$^g9L}d7K*``Q;xywP(x>k_|lW^!+OlgLb0-V4(t;}rs z5&fQ;!Y2oLgD_H;gPKku=eT{>6rq`C6~H~EwTzxkH_kR?0`+GugIDV{8O7{DJC>Gi zpHcjy!T`66ia%xSxcp3X7XgTWrUZnT$ArE!ge zG#uy@SB`v3D6-uyMD$$sZ|`BTf>!O$!O?M5jgQCCag2IKacid#3k%RC^oQyOo<5HEfPTgtoG(cF{h4TI`eJ?FtkvW|s^;eNlg$_q{A}6c}!P^>& z*IRa$RTUdA{vG_bTN7fD`@MK3YKzxovDtr0|JxWT=;`&Li(R6_(FM%$P>J?AdR2@- zS53)$Yn^cj&7Q*x(f?u${|)JK%#}EH+|z_6I@8u3P@YHrR90qX;TmWb)@}Eou{n4G zJvOeWB29DPCl;B^P^B)ZVgK+PPyCah6(|;Z)x&J~S^Q7lo$Iy31&%1pI+JZRL6FIC zB>^)sB8)UGlwd0}NP6E}r4s%K%PieX<4rVIJOH}=QHqK3ZT8R^Y{akb(bTT>YzQx$ z379){J)uX~-jvtMb}$Pn!`5EP@OBnCsTn${DU7*wxT(tj>y#%B_u3IJIew{XbMhpX zM`5Nz{aXoZngBB85d$IUP7N;*&_!oi^4kx2pk(6NBn+h4i?n`MVxH-%Wl{B2md9c% zyg(3fuj0hAR>C!-%r>^X4jN?(Bj8J|G#LMaR;abSdg*Y(B?Sl4N+1Y$fnn{ORBzUv z=<{2oy?VKUc3BOB@k%~X#49~vQnqa5S5s8V5JUOvbu1`|+j!YY@Nm=LUlWDui}@f4 zWQhCJo>ajpV}TORSuR|l`7k=-Sd1(J_=%qu9?DGDN!S_|B@1A&ECk&MDPT3}#QE-A z)J!~a&3Xs`#_8K zs-C2On6zpCZvI(HQP>-j4(@bdiiA=5HNxUW{Z+BQ}8r04Ro=M#$Phb zRX|v#VEEQGc_I2)x)go?H1EQ%cf5O?EgUNk#=O`)cQ3jmAVyTudjb0`#qj*`b7x9z z&ysE5>R0?_)9&@6->Xr5>re02{KbGQVylULFVz%%uiydm6+(CQLYwj;U)K7zW7Rj@ zNj2vFY~S~NJ%ILoQRdvT?b0I1UL8iz;;0(>h}c^LuW@RN%m2X6RO zaS-u=0+@FYPc-18T@WQ8I4w6qaCy+hF6jJA(9aen=nd!F3)8o}nf<&^2?t-gRafZc@Jbf$<| zmfaLa=!lyK0)Xa{jY3oy$#o}M;8?BGms5QR^&X2USa9PN_be%jVP~$8_vVOV(cDD2 zYM~m1E(#04%xZEhgb9W1je8~X?gm-hH^mgnt8XhknIB9)L4hblqFJuy!%?_Q?|ZW# zmg9-E@)@GO7EEFU>}K=x#nLdGR}w8a9AT{(Q1VL6N^uSuPsgDGnnfqU z+)2?A%qlA3cFkok+fT75zq>XDjGOo%D$Jp4v@%S&K7k1MCR?^B(hg2=239Gt_oT&=G)!s{L(z2EClaVkde$m9M|8W) z4ZdZ0c!RHNw~|DRhm*a8&BNk589(iDWx#>$#4UL##*l_Vn1qmqa-y?1yk z#b~qkEf+GUf1K}YvbL>cK9VM<3O(<;Z&QyKpM}vHH%ijbDkEVQN02F{jI<@RO^Os; z_E=IVzV9C16toyA1e?Ed4 zXkH;)?#N$&3gb?G7@^~gr32vu5jZaJ%c|0v0-=koo6nNi#vai@L09icd7zB(J7tE_ zIi4#HGK8%-3G8|@&uVlVJzKNY^Zg zFX81*wcyI=d^-!79vyvWD3q0Mwb1XL8&|1h1`5a3-wY77Rk z?*jFc1~$1gWLn(z(9KDtN#~Lx`C9idA)UbzRpvlJ(P(yI5*b>oWSDH)vNf}Hw@>+; zTmkDYppc|yapJWg8!wy=HbWZ?JhTFMWr0DPS8=GK2Qk*X2c!$otg*p>OOI>19Q;y} z@l6%nkd~GbGQ|-9>;yM4@b-Wjcq+-zj~?zqK}&IzrBJ!R72#!MM)P(=UR)|ACB5~K z@e7|qQCo6!tyUR@X4R0q1s-?Gj1Ukh8tV_kSJ~cns$p#FBDF9iEFm)cvUe^jv;SC<>hC`BcMFr+uRm>8b-ymUb zW@|*e)`ng1TERIIiR6(y_6nA^%FpFI*q{iloYbVmmcO72Z$`jrMTpz<(waH%(i7&2 z^BML;S!xslSQ~Q~7f;MGj))_ot)EcJ{~^RkzL|&3_;QQ)^N4{(I%Ift z0wEaSv%m!9LH%;$AVtC*8J1WP3}&ZslN@4AZ;JQ)SYn{0tWKm+!`)^l?$}Lo^oHsE zBScp1XHxvRjSwNrJc*^+{` zh$wLaattIm(?EnRNgLfv;1Bm=^6d$kU)8wrrNAnvnSRYGZi}w$OiIR*{@E?s+pW_| zrGm2J)F!64l@l4wy%vVBT@g z&#gc4*>Weccapj44X{35muOyB{OJF+qNnzujp<=^Rl}e-rtPO;g|G*%!Qfeg5hCL5 z2o@nH6vgB+9+G!}OpRBAlTaPb>8L|wL1=E+28*oI+QGW#p-@7G_zQK{rrzD=0z36$ zXxk}?i6=gVNFrkD0h8aX365Ly^CWmPpW^0vL_VIgaw6Nh2kQ|5_1(~FXachE>=j z&rOcoj{u_maNTCz zfO-sB5D;;343poO4enCjcQWF_%_3S{zGQo{69chWPJ`GfU=T@6Ba-e&-ifTh{){11_a-7&c&;krHOGJ%h>pS>U5@|vO4E)+S#9L3 zQsM0Eah_*WV*Zb$l`_2iNy}t^N^P@_)1PF=jYpazwPMzBsTemIEs=;9zc*|)fYd&i zE@FJfwmk%-K?{xkc9q|gVG3px$)7W_H0_%G!znm@Wg7P_yF{n8KwwLfmr3LrmBk?fS8v#JT?LjeeH_~_3>nSW4Se-=A_IqoBWGXAHZ2$1?WSYtrESD3U?lE^gT z&zHSL>`%Wd#3l|c{Zwu2Af(O<*pKK%{ip0ZBRJtR}Futr+WdTT}mriB(8%OiO+~L?0{ z-U!Nk)~RHl=b*cjgLVl##VMy`E>|`;0wG%YdhXoDJc98zg4p%^=#%C9sshB5Jf7G> z=xtp0#N0?7qb=Lc`ldM@W-#9smGt0k^3I&9Mc5R{j_>G^+tLj8HI|IjYov z$X9o1-&XniN@-t^tY+BTr=_=AtqP|RU@1)Vm)9nmw4U$n?_dlo{M4+=>vOYY1j1a6??d?X zWXseDS+te!$O3iVM|kRI^KrolZ(~~Y%RLP+5A?A)4XXJJ+tN9~pHX^sz`cA%qn<{S zZAPj zmz6I7wSoq%_r1x7UCGf5rz<51_zqG0@gf-n2=i10)Gs zwP!tzsngJueu0@i(0+K?-gvqDdwf{nH~Ry9Zv)J9eyfct^9`2sECRa_IFahO3w3xOFS-9scc}C7XjuhVWhy-3LjujThzY!UXdu!aR>=S~ z9|s=C;jyA*>qVDv_27L`wB#ckZ{}jSPpwTL-fq!+n}iP=~1Wr7GV$3efPHI{5~96Q0E6&(>hAlgOw>s zOrIWp`GZq+R%G3}(FeiUWUtu3hu954z9>EC*}I!Oe7?rE`11$!y7cq2hlEFxxDTE} zjObrH+!LQVlPozC`x25ceUlNflhf6bNrh5I=aL=aE{+{H%R|4S7=2Tt6QC*bSYj)w zVw~EkLS1QMbE%W9n3q~_)p>nQJs_CN5aL!zYF;TVJ1I7gG*#csNvw4B1L@3N4^0hdea}p* ze9RN7%eh!qF&tKh#^s+r1VUHRRL3_|r%Cg#9uJoFv%7rNZ(7wAZ`JF%(oxzp)Q>dq z`9L(Cu{T}CZ&ihaSdwy=?09`JdDFFwgA3Zb(B&R-RMT-Zbda^PBCz*#ELZX$*F3;(w9tDOE=0k34OEKjM75FQNZUWV43@k9w%Q`c67 zuNTjIREQQI(uiJL*^5E1W>%`*A^7=&xW&?ex2b z-yfHR>lLd%mQJK}@r0D<*WdYNpZt!N@D~JX&5G!f0j^~6bYmvzXS1YcJKoBU+FYEk2AL|~blY^4 zHzNvjd+&N~W<+$6^iPfa1QLaX?|TMBsv2w$Dy|r7F?$EeYd&T3?0qAtr|f-M28^2bx*LdQnuv}$8`;`y*~vVQ z`37jZJ)8U>OC9Zjjz=3A2Z`QV(TD*JBRsk$@}G^c4AW6E)3NW<$we|~pY#~XrC3BV zp-+>8TjOHAb(THBf`&3t8!{2vveN#o(xa{Uq-{6CGpBi)6+P*(w{P2gGaw>er#>B{ z8y%$GbEth>KYKgHdQ|>w1!wehoIg&Z!^IY(JZEZ!`$|usYEK*8K;d*n4vn_0B7H#d zF!>^5-?9iOeT`g&%b@fzuT*xW^hl&kezRZIZ(jA!D)3<9PZz!;#af^-x5qXzL9gy$ z&H(h!Ix+qFWaC~3slM)P9)(w@S9;=?lGOQONWGZ%5*1&f=A&@Y21c9iH%_Gh;< z6V2ZCJ80#i4t zkdM1=@suaJ;#+@vOypYaXKvNp57F|9j)@BdD0k2bXpYKvHZ}8?w+3?C3W^*HzNsHb z+6Ut(kRPKl<_3dqSP>G?|w(j3`&97e( zMb0e$uGvz1nf?6*5xZw`zxVyR99Z}zHvdPM>7ro(a#7LA*S-h7zYjX1kD1hyZ>fJ< zf4Y<0vU3BVl?$#rULx$Wnb-5c-9_fT!Po z&;=WJ2gA|H#p48<_Os=ZS*_0qYP5-T>Vih6?wY^Vqvpp&>`OTswxeL;{h%O5!|(Ru zuvngeH2v6Ub^OvFFVgW7zTNB3Bc9^{wO^_vWYXPnqUUittZF!e?duoWE-MwZGWvH% zAJ<~*t{J=Cx0!rBoX&llDBkz`?#Gu;P81Z}S5;cIbh`aUEy>MA`MKvGhTYL4UKQbM z1h;<;Mon*%!AE&#g<#UyC2t-Q=lr$QsvhtL^RkOncq!3^Fy)hA@Jd{og^DN3&=tx{!y_vQ(=nl@i;#F3+| zgIJW>_QTbJP;Ig-5){8h2uu;vrPCW^Tjw%kOrlP-Rc0>rj`gpTkO1@?*-ep&yRs)HsBt?9?A49Ezcx(Z~JNIh?o74TsOQi%|YW;bZe@Z;MM z-r3&eC~L!v+w|*C?2uQb9xCp$(LufRZfJ2TZW*rxFx=;*uvI-4@M1087nMZN7!!)W z^={0GJz==i%bCW*Jy#8|J2LbC1+FO8cYKAx~FsTTl;d^?(R3WxwoY zf8EXdNtVxQoqJ86zK;{9Bt5}sQXiURY4XbkN9jYr;y)QoJg7Qp^3p^mi3d6i|J*Gp zyU8(}7S?w6h6G>zyd{*zZcq%C^v;)%CJ{_VhEK+NgVHhq- zT&QZ(rhMhShKpX$qC+8Y$2IC+SFvYJEC>dLF4>TTIB)Bm5mYe0M~(UIaDHvz1)DB> zpAp7+s~**izt>}+CozmlhmlW$c$Ba%;ztWH!TVT5*x-|k9y!A{^@Rq-dROuom=KU* zX+*ZFJ2s6J3em+OMjhToVlQgMPlC}C4bY%2X8**F8)!{0QR zVd7Ga_>brmM4bR+x&rhxh^RE#D`Hg6UTlmIc3ny)0TBu}1kAV=lijfaK|Y236sf#d zuN#OX;e?^)Q1n$p3Zl7Sxuv_;*(MJ|NAHC?Eq^EH+}6+$eMS8|Y{%t*a#IpLk37V+ zSnr>=YeGZQgmjmV9%7mWLhaZ^QLY#aNO;*|Jpvd|+ieUCiDM)JIrL9Ts(H4we4_^_ zbqR02b~m~lekIbRNI`{Fj7F)uw@M5SPhm?By_BZKg@TdQ(n89OiVhXED#bYCiVF=j zET~Blm z(1J&%L&Ggy?Ma=;q9I5nNk>MtGRJoH1NmGS3AOYzCYzeCMR6g8Y+p&+gO^h)JQA#{ ze(ZUGkuUggF~!UB&Vn|^C(m#oZ_hbw#z%ELo95B?hl*7hi;>~JEwvHLOjy(#Dkq-2 zF_Hm!-{#DQH@)ca8qZ5@yAC&GewxAmb4~nC1F>-k^eljYu2!FO6J``e z0j@&3Z>J+VW1tY0P7x1HPAWQ~1`MJuaC_k0Yu)TFHZK1>$M!TMsX2mQqJ#@;kA4il z?DU9xmz@w>@uB@=C3bZ8j@nY)7SEYxI&>?V>a!-MDRWg9va=n9L4DLFA;kr=fTQpj zq)M2Nf@#1^%x%=8&aN{wU1!r?uW}Pzojp^P`s&A3d6Ll`QcGJyA0C(dsl6r7O|}S0 zCHAY;d1kRA!UDU6X)b(p3yHljF=u53yzbt#gKb&hq}W*c9^`7LL!9^Xw53_E2F7*(BMZX zSq)<|R#T3O=-Ir+F41E0rx!=QGx1Fz5I9KUJG-XgBurl9*KKQxzb%U@Yus_cw^;er z?kh>RuK9s9s#dMFlr8YPg00^Y3N(U^%Odc{uj>jq`idpQ6iQPPTchL6a?kqdKhv8C z8$_RiN~VIj)GSPUzBV9h(8IT_A%#7AD2Dfx+msikTOu_t&5S0LgRU=FpZ7Tb&haEa zs>j+syWNUsO9_=DK9=>KswetQTL#?`IL)-%dJ260dZV2c9>!Sa@u;J-47W#b1 z`RS3dBI?1Z|I3Ii)j7QfuGj<=e%tWr&qd2UkG6y5R^qI2@Mu7#R zRt2L^1Y@2AV}nC*nM3duLI|ODA;ho{(g(jU+yUp~6yfju$&zqM%z#7^Kqdtseo-jf zL@38eC?`0Ki#d!(A&k#1OaK-pR23#N5hivL_7)s2$s8`N5H4#ME)NS=tO{422vVKNF+OwvUxLn@HaaN~_Os0yRroKf@ zlVnMgR!oz%Pm_;MQ>;!?o=j6cO;blr*JMf8QcTyePuGo3*RM|3R0J8Grkhr$s?joX z3#IZt`ttf6`&4l!387{{12naYItWEooQ^QFDq}a!M6*%I$M1qjRdOb4v9=wWm1^)ma+JuVSJkBOXJdqO+n= zQ)exSp%xoClaqN(EV;=Fxl?wzCLtNdCz79|^EayVzf9(DpXPr>E!blzI8ZD&vM)G} zE;y|&_&!;1ep+yWT6o1$c%xW&XJ2@)SSTA@_%vC#LF%`_lE3uGvGQ2hwNZ!?Q-oSm zgg#Y-c~*ptR*cJ9jIUHoSX@XLQ@p8PH2GkP0QJkY>na}0ET&f~VRR^AiYZ~KDPfx` zx$rIK=q{pl@D9&rEal=uokuE$5F*bb39&M)WM^=*mPsp>$vTwD$CN47lqpY@sh*Xo zqm^s2mTM`M>o}C_#+2*Vlp9W!8=sY{8-Pq%D=ZC)Bn)!lsTQS?ZAii~I5rOXR%n$F zC~Kv=(#t;DO7ECT-bO7%w$^~W*wr#1E8r|Qqo>My$MWdRL0N)0w=JXqXBHV`6v z2u_(K&JY@L*&wGO?Olt#IQ&#^@ywneD6MP#}~%&?y7 zdkdKe%WQGg0uX75t9b=N*(?0<%V5J_rN*hVW;F7a#oxt}v2FUbZHCir#^2jaMVchg z+kb9ypd!#9aMQq(+mWtmY`!Bv(T8fg9NKa>k!0sf^%{A^&Z>QDJJ`P$L(w}!*gC_M zJ0l!BqjITbgF9oVJLA81CZcyGvvs8^cg5L)(qp@_YrAr%yYjzx6{2^SyLA;Scb7YM zSH^Z%*LK%_;VGT&Zb0v8V(V#9?r9_Mtat3`Qm^glneOTP-t*}TVJCX8;V6dP9_7oQs!p9L462^aqr9>M=Tp#Oe{PsoH%#7s!cLPW|+OvXk^ z!9h;RNlE>NnwFcEo|pcWz$+FZ7IsmNH*Yz)rMUTI_ypwzgcXIwl*J{~q-5U7E9$DK z8LDfVXlj{hzqiykurW1rvaxluckp}(2gjH2a&+=?a`tw1@pk#(;|lR}bNBc13i9)Z zh6X_+LPKE@5wWo7gxJ`mxVYrF_?I%Xl=y^{#Kg3ur1a$EjMUVu^z@v}%)IQJ!u2wX}A% zws!w#v~{<&_5620|2b-ZiQe}AJvw?jI{N;J&c4ph{(qvYzpLw0SNEsx?t$)}fu5eh z-rk|!zM;Op;lBRi{{E3qpGH3oj1CNp4GoPCk4%n^O^=VyOis>CO@E%5nV+3qn4Mdk zn_K++d1-!rd0}B?QDSLzd1ZZdZF6H|Yis)job!U#c|qiS`}XbRvL7evkr7U%x{{vWQ*zigQou1)3@H;4-gUImzg3G`y-C@udYvl=lcDYh7>B)rK3 zA58annQtdg@FNx1E10!O$f8~mWL_E#SqW>cpt@I4D#lQKXAsdnnbz0O z{QFH%c|9(EzN&OFNx4&iK|$87IdY`438%OR-M<|p9QA5I-PgbZe`%HrLulUBAoReq zqMT`~0uw=jRvx)#Bpf($doMe`)2vw7R;wwzjshv9Y^&nQu zp{BGZu3NjT!^GPu?(G3z!&Tj6^uFNG$+hl#e?BGcY!wx-MYUyj5&ZMx1wH9uv2c7g z=&Re$kV7Ij>V=L)8rAf0WA)8)4^#QTDn11tUls4g@WW!JRgGFwi!tM14+f}(St1Fy z9Eo-KSO%4MBd%P4RTprLviYv5gffbmD3ZoCZ5=njmT*Y!123!8rl03l6CG9j5iM9S zwF*c~z58YzH%x4Z4;;t6s6b2w^#Cc5nm6vfH@PJZtssm0Xf2Ach`{$GGaf%b>D=(ZU$tM-C=4Iz6zE zQ~921Mv*qH;35~p4O4LCD4o)5R%x9EX!CN-2Nd6z^$f0j`Zcw&02@K&ro5VN55NuO)-R@+P2<;rqHg#YwvCg2- zsTprw$w0-T{uvFU2~4EjkL(DJ>)>p2Q1NZ>D6RI)jd0yQwIENWc_&Ai@vsp2+NX-} zqIYkfmb(0kkb9hA_po@J-nt42mVbA??Y}yCsjcjx+_$? z9YgbzK`?n6^+0rQt1Uqx`=^>)Bdmm>@snzaH5#h>w4Ym(H zRz5Jt-rW1J@ASIAP5#zU@MA&PuF-~6q)?mPYw;~EnLPK#U#4BdnY60f$eRYt3@j4?u3lxCacJA+$&;!mX{0v}O>yOUQ) zUY-u*ptl_Aw?ZSZT~`zdov~m@nI;?M9j;E~AWp>+5;eh6iFiRo+Q9;DEC9EMYkpSj zDkO9|Ig3S>=qv-(YI35hf6N$&_g ziM7Y8H?>)=8g4J;=)A0N3_mNTzgtZ2zAb;lho`7)skD^S?NPx$Tdg)clqU3$nS+l= zg|i$C0MI^yfG7ZN0Q>*Z{jjAhEG*pJ-J_zSUTA?`U0pAB_u_3Y2DZMw{^DByp%?FZ z(TjEc2b1p~*ZLo(mAN;BKtlWCQ!f_v;!Xe4kX};wi*EkC>qxbS*JiYVd@}7Dk=|tT zwS$-tKF|MWIv2!Gy~rfZOlt?xL-!5H+WyJmx$kEGrP8r=u;!FbSQm(1%}tHyRH~AT zcJA+WFCk+UB?j-O#S18?k@rzO?V4BrDy0%|{xO22e_T%~#!Vf@{_Os-q~Bk+`43wa z<7?qif=SYFZFc<@JC;fcZCi+_Y_Kb43_i07b#ut!k3SfdKh}GwH&USDlfv~5Mt%g* z^|K_MQxab9YJS@5x8%=V-EK8e<{#Pq*lB=&;?4Ih-#lePT7dj%f*7=Z75UZWZh&o- z6iQI4{ei++VUM<}1CPd2;n>u=vYNou%MRE~Ni~<>TI5|6&!p`cGNP$VO=)_wC5VGoo z*=_wQdL9cQ$^z>DF$%@tbH;c^QUhu?RfzR@EttY?J5o8Ib5|3ky=g^qv+HV0@~9=W z)!_>)0~G-!YCok`j}oBXc@|-H&b6N8oA#7U>*WzW?aNj;dSDVFp&T_b(7d*gL$L!S zP7JLo|3NWO&6w5XH)38%v&?GG5#zi3qmXiD4`P~QfBeZe5QD~qk;LS75P)$e; z-QVZ_+96+`tv~)d)L7ng>b-&)+^F%a*mR}gk+ETo%~Hi%-*j3esx>>Cf@mtH>PPab z-$!<0%E>G5ops+l%0!yFQTz#t7)-LoILkiwbrkxlURZcQA%Z}!=RkilA+>d2TqnmT51(A)J$Ij) zi6Vc{XW~{Wp?bX9)+@f8u@IESHyOFm2DaBhF0-99o2AJ#!aNzW3+8qTr6&3=rC>cI z1mW1GVKaWdfrW=jgG$l@=+E84UZ3yYw@(ExJJ_I%UR*Ism+$b_=WYw8J#932(2QNN zI!U^dS+I77a(|s@kYkU9$-}|;=Au7}3bFQ*G$?ARO!sZs$@r6nsLd%3Nny%*7rZ_j0zH*)XlIc!En7oZh6P^hZx(I%^lDy^$?f^t6i4&zUx*@Dh@+ zZ={D(+`?j4Z+ha*W2B+H;Y;(kbv!t$yp0Sg^gfS-OTg86WE^hCh=w3k_*wg8LL-Bkp;)(D2k|2_)Mgv|@Din27r&camf}}}_X9@M7YF>eMp7*lK}l59sGoh{09VrBY@!usQ-=#a1;<66B$kbhLfVf zX))p4L~vOuxH295Jqz518}7^pcN2ztO2T~<;J)wRK?ZPt3%HLx+|vdA!5wZ2h3mxp zd7t{nvhWE~`8%xkSAO#iw5I*4wezyS^J1*y=XBTU;@H8)(%$yQ?#|ZNot>{cUw5~6 z_qX1NKU;yH zufQ)?;kO&`hb{QiF8ui${LdBq`40a08~*EGFzU5$cT1ilMbo(su|!r8c9cw;e&@FYkYI{HI?HcyQB8L@oAnhn~ioy~0(OU3Bf zgoAL%7(>Yv{rCL*sjKehnBh+14#Ah^uEhV^;6Z9R^c|Zk)CBI=s$igw#}q^ zKjOrCVz@eqLd%2t1mLLUhsQ`2GbnhZFsMj?@agKk6uy(9q_B1yE5|6iTRC zU13wp%>$7w$~H79y&WWN_oE4fLXwdv{1|bf*&R?0OcA<}BeBE5R-_cXXdcAY2z}PF z31&u-#9Du$`Hb`NLhq456m=){JynF!J?3GY<=F-BY7p?a)QdL{(JkX<@WL@Tx>YRMDua-YMdaiiq_}=-075Z{v;tqNPhDRyvP z%Wjwj#U%?h4~H%brR7T>cyT$k(L9BZTT8IYa??y0Ykr_arq%>eDo{LvOpJ!)WSU=n zA*VMn0@xmAeF92`yCP*X@hN+18GGxfpM9G?*nm^38xWQTB>h{wed zQ~Gy4n@!kN*0sz1^=P7|DXZhS&v99GzTfttKCZim?*!bR-&^y6wTHj@0J-n?V3n9) zV)|qYg{SC zvBJ3U=2e2vOexj<#JKqHtHfxY;kU?{wJJ!IP?<6$Q1+yn-*svcMme**;*_Rab6S;3 zIjipE)cct0wEDPmc3Z`113$cs_L=h6-jm9@`^}jH7!_}#9w$s+66AzR#q0R$85`l7 z?27OT-b%$;W$u=o^_f@v4b?CCktciWxk7NfYuYvCChx?lTxe->&MVR_|L047WI_FG z=KGQ$V`M%uiQjjr2VUP4Uf(iFpya59;N2GO^D;{j=cq<--xe?OhRHA~EyNhymXOR= z$q7s?B>3Hy(qL9A$SWQl?T!0n{p5sRx4h$s+p$q=x=#d{@;OCg9uD1d|Y1`C4)1I&nu zM2dunfq(!40D=DzKmd_Qcq0q>v;IO2y;QUCxra15Jc&8C)lF?kU+(N44YNqs;Jo&FhihHG+ z2bFqzwYIx;ZW}d0>$M^4wUOIRG2go4E{2nCCsXg{v+ov*A2up}Z&m-={rGg;@%ya* z`RAvn>*43SsmH6&cR!b}f2^IKZhkx5+24Ozq}zF+m2d2BE$!`&?H;vkU)F9vRP8=h z9sH>~(So;}!@Dlv1DEiTYxvkN_{0Nz>K;D-3%>RU-*|%W{DB|A;m3dAXV1?+A097n zZZEH{Up}|L&L19*o}Tvp{Mm!Uzro>W|DwYG{CP3Ue<0#7L|!-m@xP6d)u_{TBf}K~ zduI{f%wi-0*N35rM$j2Cpu z1T_knJf_tMhN_orc^q}{*-U0Sn-0d4=#>jpy3SUL3?BR0$B=0w28j-;J01B~h5=oE zMC?SzucYUWe^KS3#FFn7&eZGd%=UC#d>sgbqEk~nUpL|b3n=geF&GIUL$09CP}N@? zBG?IyT*PJ@h}4Q_aPV@(FgV{r7=)Me#%`BOhb_#RcvWtfTW3mbnzfu>R3-naC{2di zW|kJ`je8NX3{JRF=C&8Y0=}}pO)^e6+3_JkaO6;uYdAUEA39X_T0sOorpz}fSP*t- z`^kRnn=$5tI3?rsIP?`t=~X>QF0L80LT|i5JLHAKB{kc4oo$oLsY~G z#-~NXk)%~cZVVy&_J&^1y8>>m>j@mo7(?W31Mxbq;w99{ zMpO{bCsV9=;H-A3$|=S!8d)$hQ!bbDie{eASz7ArOgs+`_sz3cKgVgJ*smuT z1bk=Eh1v&ZCs#Z>r1aaW7V19{&{mf@04bJag&fk|4{63vkkygTH@0T75Ij+5ye7+% zFdgr}46*e?BSrBB+Y|U96dur@>|fSeE@?I1nB5v)MTR$i5-A80Wa(@>tt8 z%p6R@0l-P8k#J_fz%<%96*Z?teH&iywP0*zSO>=LRGamPp9KAy48t#uAR$R(WE^yC z)mGhUGXzR$Db=RM15MHfSIo~KIRZQ`Q*&(IRNN0%c1>ynaT+5eFc4iM1TcKUkNt*q zv+ntNM&P1%YdUZL=4M&K3dSE!0wC z)jW~JPXCvM0foP~o-WURQNXE5|xTxw~k63*k#-)GHB+Dl=ayUmT8)MO@Gd7p|8#KKR z73E2IMF!>$twxjmah1`qyC;!z6(cA@4bg2T>+(u1yB@Jh&Rvke&1i2 zJ9F=vHD{8{B>&``eRi_<`m74;_qXs8)ONgP=x$O2L}~ORH13R`ry-}M7&E6WAm1o> zlD&KFK=-I#4t1EK z)@V5^%|{)oOoVnrEcaTSfVgR6`jZy}+#@A}a&yak4gd^e@lwNxLS&4Nqw_%30ct`u zO-L&csmWdMX=9vFs};>{5%HmfO3HrL2zU0LA$Y;sdc<}SEvd#e?5Q~c`Ih1|m(7^0 zL!~Gdlb-&-yplh3&**{4Vlkln2}N7=F!z>`0=;G#OU!5IWV!4Cy*9sfm}^-k=s~P~aDYTa ztHsj$<7RNFuStLPaxQvFw2#YwIxZQtv1rM-xc^x-S|rt+ILku&MnI@v2vz4?p89&o z&j$==v|q(@_h5H<{c#h9Ux^7X>h_TJHlsKw<|Ji`=qfx+x9aSkNoYLY;*IW0wpcJt zeF1V)9gY}>7&)`j8|u(Mqnot7^XicoqF$>bk^ndj;>3swNR6{it#v#1(Y(0)fO=&u zQtf4#vi+hM?^cS1@yFhv3YYkuL?`mU^htqkg2Lqb87ELM(?b=A^!;emlqADLgC@KP zCi`rKS{>JeU)PMQk=W4?WM!@4JR)7y+>*Li7skqaeKeTT@lM9OvDf}TA%#5S^nwBD%T1=p6^<{I^`WG@lzC2MMe%b%m3gS zWqmHP+j4z?DeyW(XqkRcyW&H{d%+{sT%Kgj3YQwK6CM#p)rT&|ujbf(zSPQRUu@+K z8t$L0i=CHPG}Xbqdtq%Qp|Ub)##XVq1i{OiMiX5LyfuW+Rjp%w{zbfDR-K71rkJJk zq1*c31lE6EZ~Zb$1afpRB`Qj0ldKku4d-20lR1ZlU#LFpDjR6Bcpw{;H48H=U-OV= z*%fxoU$&6tSiSMF-0QwIEKTYS=W`lwDGfSn9M0NHG{k+F4k>s52s!7UYZK- zQZ|2x=i-s&8nRD%Ob#pZA772tZi!hQx1pBhkoa3Y|L7XD0otFi!XU*RkM;4XpxVhlAGNgoj-#LU-l)aap@8AFw8YKN z_Tf9rc@Ax&(#1ZxF&mLR@VAZ2R(25@hIN~_x=NtC!?65CJyl4wTf9@58Wxg>eO`ja zZ|im)1t4@>P5_8k3(!%3X>1b)=3_1&bQxRj9_GyG@hUf}#uBBC*XbZ)cEvpkEtnNv zYtOuixx|Xw6~`%2=qua^OtOTz<1Bpm<5+GO1TH}9;;dcx-A@<8caCW31(8&F*evl# zIv(RPdcbr8bp=7M`U>o4b0qB&xpKwSH^U{wNgKoO-VeGZzGwGmL=&T{q1}DO$c0L8 zamQ}j<4((oYseWaMk9dq4sf^292vUrk(i^kH^^DJNz;uE^W#r=0lIZ>RQtfgwS?bW zJ{M}R5F&0BEt%kE)|`;$Y9S%3q;7?IDrlccM3k!t#_i~S-He%_hzj2|)saqV7F3Ma zG&~)qSA1h;k`szQgJbpv{YZ;3PgQgccg${VY5I>Q?KLFXP$7zmjz!iMh1SS&X!Iww zVE;XKw>{^T-qfF)sZX{M^+%5Ve9j6(p(lWcv|5NNN1C4i+O7aY-H;fQ{oBnyV8Mav zgMif6qwxrnq|eg2pEi+U3;N@D{LjJU!SFOnlPG8YFb*3`7`cq5_KH1iRdO<`cK%KR zd!qG`IZ|~f^wK?2;#_Vb-V>E(?Gm|lhrJwDsbZSDpOIsk`Mf&0yDC9*G@&t3qbdT2BBY`O)$90Gd*dvj6FXA41(3GtN9?ywg__jC`%VzDr|gla}a)n6*Y>h99Mi z)0PBW=`d!-VKOZ#O~Mwfvz9&G9A@voX+Wyi;Ptj2Z0~#8xeI)RBJQ%~CNb%VK@FX~ zBE?3dDKny0EVoZ8sdD*vgmCx<3tD;{x&4ba`IZv6(T z49;6+0u49crXEF!5SRY)t{26lmSdcSE#pI`XXsf=s2Y<&~?tIg$RsL%X-sf>on-=pFV z&|_*k1n(oQ;3jkPpSnvd4)4toid5;_)Ve-#VOM^@H+nOqJ^W6N5Ka;WRsPDZ zL57wETM=jxuUmsE)TM+12=J-k51K@sD|L>hm|=HCbdt56o*?jFZ2t_ z!q5CE>0`iCo7MX|ER{>YFx;oe++MDzgn;PFT3HReRDDHhCCH;q>blj4*Do`7iQ*P8?5bH3 z=4UUW42^6Jq4~vT5n&U6i8LJ$Px`bQIN3`cM1s~%(ssR=qjO^-GmL8FSvtZs0&MCG z6YD5F%ubi@-;dYVv^2W`ewg?sY*MdYT-PbF-8|7kz5O?B=Wn=jBnro>wlTu_|GI8CMFQ)y4=0*Khjxn>X$q zkt%PWx@I-dzY-D*TCgf;fn{S^*EDeY!YGl&TMqm$)3K%MHh1`{Vc(y66+dcHZGu_L z6?s*90cY~*3mPux^b6~}#J1spZlQqoyXXebi5!_Jz#hex@b)^uGle;o7n z_1tD3QJEIvB=wvn+@ycjISk$k(lC8;J>$-RI!(HejcEqhu?19a&tCWbaHFyNv zwU!7Kd5O4k#`K~Dn(fn;4l!7G>QBM*GA!TlnVb4ug$79Jv(J1Omh9}>4wRd#dZQ02 zb>wPbhi=C&Mw2}yH9`II9o7ar#*RU9fnT!ffL-VK+Rf+Naieyai7XEKOBlQE-Kg&U zg6@Nk?$2x8U;lI;arBUjyie?Uen$1274-b>=s92OA^qtAaQ2dGHbC~hkmz1$VK1z+ z7qQ;^j*pgI92Ip$yDx#N2)1Y-LLj#J{3<;6OM!6uemD-YPlVfJnK~$dQ$eVvD8BYV z)FcXy45mAJ0~SOuHlZ=x8ctf8fpA{Vei40?EF;}05#Vfw>PJC33Q$dOCe7$Rm}-Y^ z=OBf|km4lk5twq7$RQIwATBz9oJ6$&z-vdebf!Shqj+^ExROdgbqsfuF>0chqKY12 z2B0e}g)0S&m`TtwY*Lb>IO+NtM()(HTIn;6p(t2H5sZ`=#tCBzWz@((BZ3zNGEPM$ zaMI-$vd(US>?S#4Cr7SrjbJ&4;Z7r4j>EtsTF=ft6(_iVDk?y9#A)kB*`!qqdYn>X zP^T1bhvPc8P(dFcuPl-sW>)1Iq1GV_~Zl@-#IZ-$J)0!2J4$l zjTvX@o5b|`j>BTcWe3L_*9ShH-<^#{ZHl7)5+(%or?gBEl1CHls7b`}^kCtX+UJ>c z&Z(||DY(;&UE$=6DCb!8*k8q|5d?ytZU|t&w01s5Ch; zs5804Q@NjTl4#i)AuU+QSSLE3yo*$&A6_(t`3snPRyeU}Od%6vX!QBs%K%W6aE1{`^eh|udA+&l>I`X*6A zA1$Fs)h|wANi!p}fM`TfNdf7fXfGN7pfXLu%BcPjK*L7kn|p##f|H643zF~~Hdg8%OQn(u1g{*?;>!ATyA})#I%F0Uv>G5AM{`dQ{ZABW8wuR5 z0dF)rsiagP>qLdS_x0=v)cjab7}gM8BrSLhN)+$7zOb@SfXg?agH<|)FKF8cl%YiU zD#=mnBtXI6*tchsVg&`%0`LrCC>KA`BUCrXt{KR?cA?$7rpU|T-u5d}X~@Yo zP%_NUw4ly~MEjzZ_4|VimgE8Sz@v@OqRZ8v2M%w)6U|sREt)aESbR&joO{y8f1Bx^U3rIb5z}secnhS`nvx z=?M7{p#CiYn4w6^w27hg{QAKcITQPp(v^_-(s<{_%ayhgdO76we(93`lZ8OTnP=y7 z@Su@GC14m9IYj_sp8%B!!>{aS0UQ*5;>cqnFgFwKcOHa7?J5PT_ZuHPcrtuU0J;H? zFOMMGN3{I}@Y^HWR|LqUBhRq%C*J^?zbbIALb!4-CuZ@I2G@{eo+Z4FU2-8(N($m3oh(&bAUY5&2UojByTjCZ7Ko1$NRS#)SI zyI$S9ek2&?F87{8-!X;LmoL+a4Glxz3=e;DBQ|-UZ=HA=l|Ml;KVQs!p5X?~z5~v4 z0~V*b6dVqNdOhsVw)a1ehg1RsIceDepY5y>wg4oB1l->qAuay4SA6B$CTx?q9rAAH z;~jdB!!J1+kar=|vT@_FNGcX<)C=UK`}!PwgOV51xqc&V{JSHt{rx>g!fi& zutRpPt7lx#e*t)m1_}Yd%y2=_xa=xc1qbvmRlQQDjmlJ& zXWq6x;%j%2`G!xp?n-3qW|eAI8WbtVvs)aP z*IGQkGxXTvljRFT7W^NU>ndP^$=@9{7k}2L?D5GwFoI8wHsSBCMTyk4?6!t)_AwVr z(w~97F$$R(wYN+bSCZ&(1%k;NSsQZiOob6Y9jRtPf-tbFpk)tR#ly9_r z@0YxWpiJVniB>5?hM3y9gA2vR1**1-ms3nYCf(JK_y2HgeHz6TmGUw8>C*Qy9q za!l}6l30j0qbDtA@IYNDAZ`rD;RHPv9$>$vK<4OiM2oA12zNG=Fa-0~R{{24(cUZ@ z|1Qoc*g+wsFEPUZN?(dx{wVs=G4i0;)p>N6J_P-Z1m=t{+0=Tvk6jc6aXMDV^vRPJH5|BU{dSG{`Zfh5n*(Rs0QW=9O4!@}lEHtFMkx17{!y zp=JJoPbeE5j9MVspTy&v&lr+d_tM~6!Pi%Sq2CfopB{OM%o{SnuJ)9j6cS5yMXvgC z!@pVwuvyj}W7DbcmRe2-+g)G|djNv0;wnwsBE)&hPm(v9-)Vf(Opq505z|CHhrcm@ zsKw;I@iR!ZSxN}JXvJrLBr4dbSYX>^;xi>xrDX$ej9BD`x2GUYhJ{SaFRPE^%&G(y zvu@uzcrz#n>;^ z`jyuwO@@Kf0_KshfJM8*>!nFzlg!(3r92!r)Q>2w6o`$BCXI2s!`J)^NffRN^eIx@ z$ZcrqBfSqFOK5@+-u%t4js|5Cls=odYdCFMFCIm-UufU${(HP;x&RU$DA<~t8%pxs z&WJC)haPpe=>>>Aj(Ves=3)u)Js*1Qq~1Y6Y@2f$)|KLz=@;PMuUGjX#7yriZJ=yKVZyL z!)(+!oiS*b^&F1yWILWU?;$ z^6bMDJqo_QLNMlD>aX5lSP+7qwG`PJ5F6S5P4+ncG8->IW2rM%YmVRw8zusE`N{LB z&pfQjiM@31dRg9pcmQnF@$OF?6W2t`LB_3kh^SnGopmP9q$eP5y|+^j!Xw?ws)`x~ z^k7&iL6;j{E(NM*$|cV6KdsYMe?ZE@!vpa5o-~zhDUCSDmmM-d<zL9QIbDPe%bXrB!<#P(pga8SAu-AuC{=R z8jG&ZklcJ5dAan1VB=9A1EWb1ZhwST;HZ!Oz!B-RiN$=Abdyb&z)AXkQNc@V@wqxp z{+Q&$Fcz&d5Q%!(2Bx?Q z{vDT8I%yy(;vBD%=%s(CA4-G%^pU|RSH3D+D!Ws(S~{a)yi)v4jqz2yPK~!|cC9p2 z>kN1OYm(vpvY28Ls9NQdEy?&bJI~X=Mt3$0Si!oV*|MS6vD}G?1MB2Czy82pZw_oqt=iQZB>7R`mT%v9!lBin!?dpnnKVLTmyVakQ&COTK zU$B;@FLBchDh2f8&Tdzx=Co76=v8{*6fIGf?xl1Kt|6Vd4 z(_s#TTzRH&=i8&D&L_=aiBbcu>e3^aKFL}1(&7W+E-O00td{#(h6C_2oleN`<$+6(z(h?&XZqab!7EyU z$rhc?%q`19*YJU_NC?F8^eL=S?Ehtn46HG|Nj>6=1w=U@RbP%NO0beqPt}7 z%A|)@@Z&e+hMAU?sk`{#!W~5q`K6WV@ZsPmKRP{>|4!0lAR#4SB~LY$RbqlxNEuU? zr`CJFZxNn;4Qq-L@GFt% zU>F__d)=($>ngIg=I4H$t%in4)iQit`Bj+0LYIFSsb%f$AwIlwr|YX>^x8X&53+@o z=F~U**U~zPx%@KdO;T7x`6iV|f)uBC=6m$|79`&*2noo%e~O_PE7#x`+KH%^OE5348IxoTc?$k>ZFUa@zHA6z;>#ORq*6DZUXH zx_Y#!?wudC9FoM|3h5?9E+uwj&=poiK7UcNF~>Gsp(nwOxo`JWv^#R+ zALP^&#H$p_8299IpSJbf-p(lhgWF9HZ%bL<(94bNssAdJ#p3!&CLB-o&XJ~ouNDKSy&6YoyV_d48Qm#{{k6~DXYfhKLf#>i`^vr6g2xo@J<9G9`E8OI0G zVY8G9jy=C-9(E%u9qy~Gub)(F_vBd290s3?9rWE51H8Q^*t*vBqbpoK;=zVMwOP^E zUiNOI2t1I#m!c4FB^Yzr6BFkF#f!G$fpu7UG>2vc-US+?>e)*b4M8@8%VL2E2ys^R6SW$`9v}O4ElZIt}mHH8TQx} zpS|jNmeRGkroj1GRYqgrB1?TErSB5|BO@$caY5aa2$mwR8!g21gCJDv1Jv97C~{D^ zLd~-mD{nlgwyp+8#3?PPi!%<~Qk0bB%&LCY-tN+Fn5w?|{bpa(fE1_Pvx1)5iFO#5Hu|@JMW|_a-p%F9OM=1>#SuGbqAfI3?O*N&>w$|NswSYnmD|0RPIBlN! zK?99}$fl8~!I9{N5z;pt?g$q}nr!by$9tkjanhrhSdGy*^U-+MQC##$MBFHMfwq8; zym-biesDB(K_@4eC{EXFfAnF+7#mzy zI!nuoI99Yh_T*%&7&J~UJt-<2dn~QT(lI7AG3G^pRECUK#*J5Hk5^ZW*EEgS4vu>X zj+bM$#~EXr>Om6?j1!HVx2pC>07p1e!FV;7WN&nQOWZ_j_C#C7M0?XjN8E(>{&-iR zq{(D*U$6r9!vuMHx9;6j7CYQ;J~?DxKcF$$qdzIhs6SjWITWH_)2hE#@Ordva=LSn zIl8@dV#Hj3sC=R;>O_M?Jeho>fAdXr-+c_DL64My2YhJOb!v@KeQ81AY@$OxyJJaF z^U}$+`E`YL>FGsRCDOdoJNs#Q#MB1o(8lM%_lna88VYaglr{?cx+gl8Vuw#ZbZ}1U zf8w9{#AvXq(SGEsE`>0B>(hQBI&-G4x_mx(+B6cTYqXp_b0Ix`ypYVfJp=fn_nRL> zq_}Jh)HHS8G7Yh^z%_ z6UihhrdEMV&tt3d;(6~&6wuEfznl}4fXen=b!@E^l&MP@ZC)0^vqYF$;Wu2) zO0WV@i4+xVX~?_j0B=0kb~=0FcvkFk+gQ92d?hXUqSS(=W1c$)?9dE#PqTQ&Y6-N% zn+3daAmzX=Yl2F|DKQE*cykzqnGK#{vvw^nUe^y6Nx;(F!}77lb;}Cz5sIL5K*0#G zva8hq)fM)nKDO%OO+YRxT9NtGA7yZLk>FFVlNd>FlKLY?Y> zjzL=^L(3>fjbl})5%-Q5KE9+1)uVJq1NjL>7&IjDK=3wZ6PTGtbFbR^W&qv8p_mmx zd>apbNHA5ZjBeOPE`Jph*o)mvnE5SVr`evDMw)X z<&yBHe3`Oq08c#CCQu*%&ULh^hPo_YLPd?E%nPvP(*d&(A*Da~h4%5TC5%%x>!e|W zx&a#8Am(=V@KZ!9)6?`(tKGbq1rwV`Ok5_;%l577DNqVKCmVsyT1K2=Yl+S8mx)=S zPYsA`fy8)GM}S`@trL`TDk(eRi$Idh8ct`e*&^}X?G<{!9dh4k{+Ct%yefItbWW&! zF?jV_S0*)d-E|qKv}0APgJ;o+56mkp8jaVZ!&r4|TK548Rh;L=s`18XDqCoU8#<;L z2qBadP2^A;eVOyBhRB7YBu5$kCS8IN%AGwa-Ah0r5zBd=jv)aVdqj(0f(RF5knJ*c zq|V~2qm9ErlniTvt7ptm16Z>fZ!c@NtWIMa5Ubfh)kZ|pEEcS^f{olrsSFPsL#i>G z@NTAO1>li9PL(_=Uoe5eaI3NbEDXqZ^|XN8DY$lL3x~oFJ}qz7g|M(L;8^iKB>+)N zph9W<`&ls4lNgl-Dm!$d(4%<(0iYfc?}Nf$uZF(ggd`ZiBdY zX(;G^s65)l*Ti~><4u|HSC;W2zgR1EAe35;V6jAz2MAiCv)C^BM(d9Kbr;4(Ad`En zTz9FAi9-2otK(hG3Pl z?U4ShK=#Bnrn2$sZi6N%CJu(qu5@H5B2F8$lg-aR!OD=#L5vGNnm)`>zVdsgE`P6 zmLQbUy01&zH@zsQ_4h`9txXn#+U0@9B3)LQ-jGr@Jun!^ejfV3Q`viTm~zbD{bCCH z4D!(q8|xFWY`%$qo(#`%|1^tB4vpD+7O`}5r`Bm77s-^mn#f$42i9dRbasp-^y2)) z@sK?Bk3R%Wxu_DFDH{XWR5vTd00@rAuOcy6?P{naE5TlHwU-!Q_SS3ZyLSlMvl0FE zc?R{(01Vz58rwE&ahGT~;prY`W9?HK>%JV%x>>Op_IUrv*P7X{E*FT6&GLp4+Ha1q zANZu7(+97uA!EYzW4vM&I6*gb3@TMu~;3@OmC4^vR-N$uAPa#4BXq*F96ahQ9MI7oyH zkmly|t8?Yo9y+o(wo(K{99AYCjs##;A}l^Zu@0MlweDY;+3qU8&x5K2rpI8fQQ==* z1XzgK##A4>=EcNWZ~d7*ym$iBabMo3gjpBW$TlPx1M=-XL#k0wZ5m;w&DxM18sCsu zj87g_XkNT!X;Fw1@L>?UNCRS&5aO60|Lh&^dEl~I!z1NQ0b1h2w6HE49S&DQ{7T75 zYo0laD(+eYb=W42@9|Xs=nAuLaj7^?JP#CN9L975VayU5+8|^>)wvL{*y5Oa*Dcv@ z&+hi2@FxIRss#|7P91W0*PE47nFPzhAlV?SI?D>-sZO2%zr=)FPrZFjt_Y}r?|M>2 z?T76c+M@*6I{M;8JQHntnS1Z0yXF08>>bA4jHrM_B(=~b5U_9WzhNo?1?Z&uID*8w z&TRMAR=Dsxl8J?odm{~*BSh@0ogbBnKkzFS6^j5>S;$DFh2e(pmHSIAiPS+D5BL1~ z&|u7I5%D1RWtxD02DMt4PjRxVCtSNe+4&3?1m)RoG#zOGo0*isg?B0)-y~NPd|Dxr zr-v?{F}~H<2~E7=CP0NXfqH|_&I@lu0IM`WU|T1*&bEWn!hML?FWh*8JfJ2k6%*!O z{}RNt)sg&mDEg1dY$WLr^N31uqxM|%F-!;QA{%qFx)9k*86{rRS&daAFtq-qYMX&{ zQw_cDf!uRXr*q^}^$;CNI2V3{71!a~xO+b0aYr5iQOJ+K=@@5RGw)ChGOvcbd$;ej zZ|dC&VIIZbBLHxMbi=~_3J>X+BJy@U;v50D@14b2pABIa6Qz+Di0n~(AoTBVr100% z2RQ5>)ZAtW6;u_N`6eP(Oa*W|1SRmv^ot$VjfeZTx~Ifef6Q(Cy;t$WoQhEQVeqJo z2Wv~pgt=>n>$Rn#6yUa3uZw{@*4ZB^W*7LycBZ&*A@A1pGJ<|Q;)d9U^@w;W$Y8DBpKW%mnfdg{z`V~rQfHYSJzvE_U4}ZoQl2cj68kUoHIC* zDX*vwqE-`d1K6@%75if>3!O`O4d7AKa(UQw?kVP`GHWcAYa7!z z5?8C_RdeC%yaq$f#MNd$mdpB+5b1xU^V6S6%X#FE=|*q-hn`lM0?qb)mi2(9I`UEm zTdS(6c(+q90?~OpL>~c%eFyUo@1x@AdCr%jP$8!KL=hGT|SZ*Z5(2c@~s$YC}n;*#jJ44HT?d8X!9Fe zVFc%lc>iwQSczI1-=wX`l0-({4*c1 zy{=k~p)z$d{ZT^(Mf}THL5KlF6(}vqj1?pxA-9hNjCphbVr^OJ0l_Gw{u6{H;~U7t z1~RLG4A>y!8b19iGO*!)rC`ZW12VVZ*RNmaWV%Kl6;K!hO#s|(?X7rP(q}@!Ak65A zGUJYgvykR9;RQqC(1kxS02YUKYf7?JUk4%&A$v%lVnyMrHO%{m+ZlzyNWgeg=p0e z{pmZ_KlClxl&-mH@h3`~^ke_$dn1!%tN{6d`do1@3d}zo8SyMs5`Qjsih_elDMCrv zS^1{XO%-hwB_$@U?#GF7+ElT?;p?oe>gXW1t_c*RkZN`_Jfk8nDW)Q%D0KNTPe@C z2`@iBYCSCK`B^&fyL{-pV))|!bnagkAX6@q6$ts~KqWImsw8{#|MIi(i~6ba=9%9e zb7zB#Co}6ut6QJnefac#=U{vH{&Ips?1+`za3|)v|zRFNanh=xVO~cHeY)?D(v}M3&we^zvvcA?RtB} z_s2|;7WErFHx4Pd5!T{c0}(WQcg`&(K8(0=sXv*tkldLtyXx|;?nGp7##||u`$BqO z)~L<&*`2BO=1)rvE)!1-I$nQSYc(5a=rS#7B5%ltUoz}$J^nD7CE_sM+4g-yJkJjC z-<%COCJrF00r{$Jp<`!mU1cnL^^mcXi4R-X8whc_a99$?H z+$b8^uN?jGY~22dQc^=@fkie=cY8g-p(} z|HI4q@#E<9?DW^Kv){je{rU6z{QURD#UHXsB(l#*Byw)!f^>dC`hD?F-tjx>;w$Om zfON4>y4WF|Z~XIs^!4xGpHLUT-W01&!zLgG%)qTLd*sl`250yd>#UF9?Z=%{m@AGR zCSfUuf2*>I_by|Ta^K%Ca2EYAeAjA@CfaoJvW6pnut0+xpi&>FXfj-|oLM%MPJyU6 zKh?pGr68_qU1kkDz+zjRt^v`M5JiBfFZp}>B@49r_en7M38xlNo)SU6=raIv06zc@ zkdQTdu9kZ=2)>Jv8kCamkd}ERBU>e_@K`~Kpma0grs@M#wQw~JKMhScO-%<)EgLN@ z3oUI^ZEYiMZ3Ar$9ZeNAb)}nXvU18w%4#Yq8X6kf+S*x1z6)ZE&d$!>-u}*=I}Xkc4vzn~oc=2^o`5Wu|H}1W zk%>L-?(QBQ9-f|_-rnB6zP@+w-VF*03Jnbdh{qaH#a{&|MBC;1qB6#|Ej2{=*hn-DJdZnfXd3s%F8RBK7CqQSxL?+krPWb zHMP&4J*%sG{^G@p`uc{KFJCq_HMg|1w6?aAnF(!e?d|Oy|B6fwBCD&btGm0qhwPr7 zUb6pHUoWP&ueXn^{{M0RK>vR{FgWm!hXw|R1_y`#@zBW7(CELmKt9#~IorSf54qvLyoMkDVxrD|{rdgq4;c|f*2RBCA}5soUUYHp6G(u7ydu^a)b`_BN$z}u97Eb2|;F{`!Lr7Oj##a*!(FC3eDI+}HzoaL31 z*i$Q3jD^JmrAvECb>g{0TcvB}^9|Uv?(4~Ho5x!{^L{>hxYhmKQQ<+T?De{p#NXVN zN)wBv-7NthUKibJdGWR*;`_ndi5BtziKT>d>$f&+4J7`PSjyw=8hOYv=Tn$@M~U^} zp4XEbZQm6!oQcPcEQhL0jqvu*3v4UfTVB5P zQ>@0{BTiqi)^iKU-;Epj!?#0|YV_m%ke#7P)c3vFK9c@Dbt?0)FY8x^W2vrjckP7? zF9r}gjuM%qw9%)7=UONXN-Nr1V+K+aTL z{e8srIQr+5w4vMgoo6l+skPCGsAe;r(2xj8Bl&OUneX{7z1%lea3ausNc~9E8RK*< z$tX`pJpYh=mGzPJ>>x6lq7Q4b5im@mY9_MKP}v@%8K=)bHLFUq(arw!HN$- zH?t`;3jw#vfW}o6rZsSzXVi|3)b7pHzHL-NT~rZ$kmx}WZkQ4iHv)J4h>1O-(k0F(g$B?BlD06;tdga=Z@ zfxuX5>bpo9j5`A92uIn0U^WyGOG=;#0%*hnG@u7*z^K%ru$vGX1xln8B}@U4BEOmHJQhz$d^6C4si4UPl@ zuoQrJAOKGRNT2~FaKRHLVHmtD6t754(4a0g1XY?+R#`%7ZX?R>pbMPkb3Kf5JZ|T> z`91Ou&xydMV-nIZgk(%{60RmEp{hFZaqGj}p`!fhlC*`2*s0?CBl$tS1iRiOm43X? zU_9$+BFA_N|5Uo@T&C=DzRFga{)Y;q?WaZ`o*HjgneNtF?bX?Q#Jsrk^_AP#W}oBs z;O{+A-}`aj2Jy#(Dc^=te+;Mo8c9AMO}ZFMx|m4)Gn4syKJV9J@#%8ukG1mS^@>lc zm3ymIpVzC;HfzqeYA-&J{o;K4<)8hw-yeJbd>lCcJaX}M?Bd%n>2&DgeB|O{^prGq zLK^!;njn#8NEZtv5@wA=+9Z)a{2RR_Lkm8VNS{a-U;dnaJvsXP?F-poejI-LdG_9p6=6|2fEqo+H@l{=vc`}%c}p;kW%pP|ys z{`L7+p5%$=#B1`zQ^=(sL_86&&oF5*X_gm%wurOuLL!E~uJS*i`upzo{{%s$9*Gd0 z)WDzvT;ftJXKB=2Un^(uTQYP2cDm zwl;2DXN3ycd$>7}uyZWw#_eS(x*TKp^qPH(GyW&(%w&nis#NX3|Cz%~ch{d&P9KKs zzqW4>Ve8+5;YvcFV_);cSL1TEo@(a^N9RiRT0 zb%U#?Y_Fh&CMNTVO5JsVw1DOYBC_f;`uj&oQuxuleTfhtHbH5@ItvDSdNpfQX~Epg zKLFFS8%Y2kh1sk-q)lA-w)AMo5VhU&0+j% zg3DgRsmQ8h(8)-qi7|J>j)FZ`EEp)2I~55=V7OHIUN3`GDSxhbUNZP8@}Pl80e{d*fnCAm75#i0 zQM{c?GNn%Wg198nOYGkiA0#G7VFn#W90#b4a+`DGpDil%7vH9~4@E8Agk!L7I<4xn^S)`7 z!4sZ`KPhiNX#Wj}Q&Tu^>KNvsFkz2bb`F)yrM*HG&%vbrIM}+r3kwwa(`Cu!n!5RBu*@d zgg+a&^uCnI7No|h7o&M;kflAp2^A0MUH>xInD#ct1^YCA3~!jzyZA+1B=Z9gvZWEW zzH^Q4*V(Wm#jyrsGVLY55EtcMdgbE_RSnS)r$Z?HzzKpD;83WG;leBr<=3gD>qtKl z4%o{z2jMucZofVJz2CNd{182UW_8KFmqMA5f_)aN#Z$J2`qWkzxR#C(rE3U+*gfi*qB^`zli+3^BAa z!kV~X`%%hE3Ejr$m>BH2+0bXL?OP7Js9Z{2{AYJ70;;kK{X(Zyz9a^&4sd=TN;-)> zhe@U?CmIVi0pczlQRl(@`NGB+bt%|<8aio|QL^UER~ z4aKJ3Jc%EK1PJdK_&)yjLdV2q6FA04WQGM^8^`%q5&>G6OYeEEd-;~f$K-iP-H}K{ zY^fE4m~?KQTC}UQKjfT<(2Pt~g-X=E&rp(a-DehjSa)_{uASrX@lkEMp1?Jy`Uq8n zLSULlD-%0vWq{k7h{!Ju;#jeBQ_J2{a%R_HrF;AA8@hTzOmDDoD0)xh?@>RA?kMlK z+3sIy*%fmDrk`^yphCCB39gEEPVd}yapDs+UZfecLhxVVDQH_gxvasg`j#XBcatSB z|F*zBEcAoHC6l8Oyh?g76a{(3 zJ*?w@#zasfTrRuFqb7J!gr7cp_qu#m{SYoFq>>H>8h(rLj`X@_BPZ!^ci`OlK}(~a zlf#Ffttt1XPwz*+x@%)MviXYpGuwj*JD$f|mMx?$zaY0hDUH`OE{tl?ryvzE!~Fz- z_e@RI+3QNnmhV3ZxfEdpH}v&K2ZQ!$TXu}cB@-t$d^(+z9uUORZk-zf5Nwyie;m_~ zvCv6EFt}k%!2WfC)i-_%yr}xtx-g@sN>4Sy2=$)MVGR5F{Dusd4tGjP`qjUYqf>c< zI@7zin}e+Wvhk)-fBr1uxwp+pb(V0GYmj4rXEfBAjkw2Gq<|SW7i9)LhQOR2T_6DL zuRnB4-McIAzqiLAk}-M{{7rnt?k3~A^0u{QB1S>yv1Y7%V|!Ch(y?LP!W+MV#O;Vi zu8D*@N0lKQ*Qbd1+K)Ox6_3?9>2*{jKDl|nKT7!v*8Z5y>!p(DFYu`Quq;QxMCJy0 z_p{$-vF44Tm=jC%o63;aERzQLXRxNj`$Nh(MQd(K13c5!M^ccOEyP_}*CDiq@~A|b z)g)$y=?iou$tm07AHvdw2Xd!=4FE}L`=gNEu;vN(Pj zQ0k|%0Cl%ma}~bT_pL>G_x3MFT!ku(>9`i8oD81-*kFl|=^f=|X_2ui%loD8t~@iy zOdd?x!MrNb#MQ1?tlV`s$vq89g-eeOH!(a1K!Ea0xb%*yA|eSvgt_4Z+YYKQQ};%*&q}}@qDwFS6#=1^1LmYM5)c& zt{0e6VA8f_0Qyv&%)Y#99lC0RR(P~>Q}+%-p-s%|`pmYQ;ps{-P0JmxHP1Bd0T^8M z@8|?}6XD4l>>Pm4EW9s zOzdRBbLAJ7?r#G|R&EO#K$aU3mv*t32@Qx|UR*+f%&C2T#H z)h$~=$|J0lPY$AHe;=;3new*305jki{I+%xz5JqJVg8SGb@ z^b^px4=>BJE@*TNKClM?T3?&&{tOEiU|8HS9MP~2_t0?QQTf)O(hH869X6PfFvxQW zfyiQVJrFM$T(~RXIA-$)eXz@W8fC-gpQ&uEZ$KM7RDW4`b0!7@bC9vU>c26R@`N~r z-%==JZDUtYTc@U5Ls!Dp^1Ks_<2rJ=9r)oImH`hO(Skz=l5;Fv#+;ok``%4Azx~(O zqIBZ4&R8_6xN5Mpj9_2Oa0>?s#CP|*v-1?w#>r3jEq}R7UL933x$Jor65fQrsb9^r z8>4oJjr)-c#R8x?Epn$v9$?J2l7#^3$uce{K`(G2=EZ=rZH|k^DH5!uIh3cRf5ze` zi+{!JD?J3`j_|?us@x)1n2%`IfKr6>Fio+7!`ES#7-NeTJu(MkN-5=g2UG8a+benM z_c)`3!@?T}7L$Tk7jVG8AV4!$t4P%ie(jq=OjY%O!1)~WWGbtH#aL99v z7i3s6PI*5d|6{<+WgcO{WG~c&aR}EuRJZtsjeM?7iX5Z#Yi*@Tw1x+rK0MdHoa1?W zoarW0sPiV)6hmh^DCNUCq#te zFU1l1Tti{M;xHjjm|9oDyfGz5K0&cN_DX4{JfDJbEE1@ead|y|gL|fh=F5Aq8R+?X{KVR$I zrs(VjLk%Ddb9qO<*VwdMCl2r(Ml(xMk9t&f28;cG;QJn0EXPnu#q39&a!)h8nkur_ zCe&=nDuG`M3k*Fxi8)}yQVK9gOKZ<8--fAbfq!98>`>14N@pr|-)fjx^6>RlFPa1As?B3iw=o%$H<0#C?mh@IE1a zr-BSx{PHQ5@F-nWtD8BmhJ|;Y3&n~NiQmSoZKo0@1HCO1b#Ntr;*I9-1o*-)T;_aA zM-A(Sjh#M|POr@qk3sd8a=0wj<1=HzC<~M*1h+dgfv?<&)Kgq|RE+g5LXLZ4WijSj z9>Eyt5++cVj_&DnVCD@A1`p%T8*x_$ix=ZACNpT{|`&+GMkF{QR& z{{7l5xf?ru#Drg0lT&~-Xu#wSK?=4o6u*+Ii;UhF3;hYpBET^s%kOIm%ut1ShG0S{ zsoDStbuDA1d7NT?=(Z>{i%w)1Tx)wC{7|MO@J~%NLR>orjS*F6zTgt@E(VXgX_VRi z%RxB7YRl0>PQ^yQ;clUFq~2+^zgWEpit)FK)nX~vbLHjcNocC-gzoZb%Rtz!y4V;uCJ1iRg8GT*O1GJlAIr#&|b z1W?>!$6V*TnCHkbjIpdLP-eZQ=Dm`;$Jj?R(VPoBFz(1WM_;9-VX5YCX{Qv{(` zfX>*kBZhwyZTF4ztl(_2G-r=gZvX2~{Nw7XUStMZ z?BEOi{kpjWpo#%@r`>|i{cY{Bxa~5=fNSuR=9G;fVuQ^Ws;0xK@2|S5*W0nZ;^Ar@ z+OjVGd*ck4AV2#v6a1H_Zr7bcik<}T?qu81Ke=Ag$P`Q-@VoZk3++6IWToH$i&)mI z!|WzBM+Kv|NnDy{98N&PG%_b{71BL%{<6#LUN~U^o#=lB6EcjF9GU{pkzD6q+PSeh zv`N4p(LqKdV-^Mq@uY(y#_?p19&pHVE!LDZy7?QgA(v|R68>lT?aaQ?%gs-=N0b#A zj>Q-sd1Np3RkH}g8cNlT+1z>UZb%Ay=n%(+*z~|InzZcdah<4&hDo8qM0EHD4_;iM z9>z@VHdAK;BcKi^?=>HdUE%Ky~xp3_f|sb8~cO7@#`DXjXDZH z)zo~=Ca>jAvRQQWit$8o=dxGzvv*CmXB529Rh+_nzjeChUoasw+I}-F7~G_>_Qn>11`>?0}f%XK=$I9eY=qNNj(37XJ<>6#KA6j!FiPKJlbnsO!igE zAdN8slSEQw^G>7xO*J387AjA%UtNc}6)dpX^4AwExU~Zferb&W=>Pe6asg)ux$NBp zdgFHiDZY&I1&%zv zo2@`y1iHV6ujRbnl2jQj0j!^gk<90zN-F#>fc-ZKL80=PJVT7y(ofuA-+#9niuiEJ zD}f-h%CP|(y@9AlaV2i8byqEyRdKuxccs^RS8{_nM}al>FJSCWNVS4+0tPA?DeH|C zNQMbmwc}Y=sf@wv3t@sR7G46~1@wOuWKDeBA0y~J*B6Xi(Pp=~kThUF1@uUhqZvW( z774jOzhDkvt;fFBsAJ4IWF5!Q1KNSBws5!hg%CkHR3z+>0>4zS@V7Ngj%90=!k91z zwYLRrQy8O>2m?I?XktWpu~ z-Yh$QEC6wD(Dg{jgZm&CVK_<%>Ltn$gn=?1mV4DP#?L`*+gbmp?p|ZzF13cD=3t|( zj0e#W&d1F4N~|`Q>4Z|8@2GhBk2L!W?td0p4dU8gP}@%`dfS(>e@A6ut#-d>U?2bd z>psi!ev=n2&GBGFZhtmna_a7@?j7;fb+{FEZ_uv+DR`Xj>h$D3yS?>tp>cy3dn5C5|I zhx9e%+1JWBsQJ2W6&0e?V4Q~lb;r@Q=)qC<7(NIdeWL7z+H!xS0VVKK(wBf#g>Ps~ z@clU`>K<&jo%uXD`=_0`Zcgw;I}Gujr~mw^Ur)aMo*FUv$>@Oa@WY(Y7ZY7C($#~Pv-|IE@6Wv7@83R4 z`tT#=;+KMNKD^JEi{=*54^Ncs7%tO3w8ngQXn+MEkCda}rc}d*Z>yle58Y#s5s}~H zKp5VyiB5u^s~rz$XNoJpzvG{WA*_EPum0LA+BUA*=Am7JYg;h}tv^?`gQIK^k9~fd zTw1IIY$y}Id|y8z_%1!Tbh3QuG(xZX#Lzgau`We_uzFR(WyiHhBBVIt^xh>DGu6F3|3Sli9 z54X*4OLYS^;4z{jWfBhWbNP=mh0XeU!JANXYoJzTzG%JSf+&K2Hfeh-F>T^ zK1eo4pmQVk+FJe+YgO9SU=1JVE`)_q$GMt#kn zDDpXMB`&-$H;F>1#3$jTET0vT7+Gm0b8MS|IT$j{VHE9+y+jfve!nu^=m^9V4-7FDD zp8sJ#$PSJ5CaGUa%EJLFR<+MXm0!Oa>xJ}XoG%ZVETzpv;A7+)b|gR;JzR3q#4~e5 z=VxBM*`M$S}MZCDUuvP;LL-y)ep{kw1%dXpzU>ZfFG_f|gB7jA*cH&F&-jT%=w|Pxf zMnFP!mCRKs=+yJCt1MdI9FOYr(BWI#17F{p-RwKnnW~#3Bb_nz!lN-%37rhoko0Fr zjIZIqz$Wm$P*y3i_Nj?(%pC((f|3Z-dO{$)*rWz@5!+I@%7(gz4Euk zw(YV$q_hEz`<|cZn%t7lk2n34=~chtM@jQ0?`FQqX`Bm3GsaZdu79q}Ixk&ZN2*MzQec%bl(%ejCuos(?ZSgX z^XP?#Twd5K`gpEbwr)Y)qp90By5m-_j_dyDtg)ETU$Q?UAw}2RNJ#uHG8pXpwG>Ns z9N`r%eD-L?M`0`H<>p0GST?0p`_!FU=QvbgY9h*^l-X5eq$rZZI|NxTH*RzV@alf` zJw9K*iR^dJ!rFFR=1>^^>vOg_)0~Gnt)HHdO1^rbuLsOigQ;}1B3@i_^FF?-4zfT% zU=Jn02F|C5^>gp(=YnDQGxap~{#59(7E+=8zV6pNa4I``)(3D%zVXL6{+q_IH_Ibt z>w>`>*E^@AHVdE<#XchHmB&<9E zre!9oYDuQI&f1@oKL9CfHsKN&U1*t5va8lBV{>P|_`Xq~l*1J>(^y5}Q3*HUpP9efLfK1lkjetKuVNR)>OC>U zVQ$NE-K&<(4N#Qdl4TVh-RZsx_Ztm@0in)aI|*@OYMyFW%Q>;2bjlXALn z?;j)>1J$xk#`fStH7V*`rX~9OKT6Wpai#0r>!6vGGcKLCf*ZW+_^l^`L zNj=~Ml#DHm*lv^>KnJLon3ziT(=8ryj89mx2ns8IR^d7%a=H2ncYu3V1$!N6V+Bry zvFos6ajL4xFYbCD3W{-|m2aI{L`xA$by)aBD|#F>sGeAV*X@J>!pFcWtd@rHLm(ZU6}Y@pF^q+Q6u>C zgR61BSgEwf59L1IQaGAR6PfmpFi87qX7#k_FyFr)bM33m0{h~#mRxQFnM`{3q#{2F zY+aB0;b9|u}=MryqH*F2o+X4rx@AnBRQfjs#x@3k zBK-20ls-bZ#G*MKwIztZT>f&O5-FI7#S4 zb}}6TS;!N0IOO?CiT6hR$f&}=i@cbFEWz=I9G7+(^UgcJ8KfOlW#gBX?|oVS#Qj28 z`SsigkHUJ$JsN=jS-B4&XX`$Law$KcycCejx)I(hFw7zXqhIzR6oh(eul_4H+?w0` zT1@qLAAGCh&TAAr5DehFu01j=GU&lKyiy^Q{-VPMX+a_~%RU0cW65kPpt6tbeu(DI znJRXV-CDeL90e2kxADTg!y#s+zw(JrL?g*}+q|T?Ubn>Bn7a!-z{IUIq4*Z6!6I-X zxwXd!WKgc(@B1!!%us0OEp7|-L$-S3$GteEER>D_pa_F)&6mrtyN_nSQ7R9JuLhY+ zYskJvLddvIA^wUg#GFaKV31`tTYHjtiQ3oOGx*d~G6lud)OB|E23sf~nd$0%qK@oJ z$5HwkZG@vqZuH_1b(K8l2aPI?Hb3Y7-!1|)Np7Ugd>8xPKR;OiFHjc{MjYvVtt))} zrM4H#E$Sbgzhay=zbwIa^q)R)ebxh&9@pyqS06Qa5#CFNA$!qXi=idC*OR|_Nfm5= zfZ&h%&J6+_Ls^kv3~$Q%-+?b!Mp1F2fA9Y30btKhV)TdFJI*|E>SGw8MvT4^S!5r~ z+Ys^t3&!Ij%yVUBkHULq4vZ-Va*v+Ee*o$lM4p&vC=gva{uOoCa1`x>A7+af$TfBQ zQ%N2cFxz-~w&cM&Y36wt#HvThNdsuXi`V|Jnq{w`-Ce5t%UsVJM*!ynMzWlXf~^= zXj{dDu*X^Ujr7`$J!UKPA}3j*xzbDrx%Ym_(}_GXIcngv%(QL1Ey>hLZXY`B#OGKv zJ}=J1Y%oABNkbBSAHuX9(jU!m|$UjH<@pJl zS&%zzpQ9L7*J}nBTbHIDhaj)|50Vk1%d4mdAObAc05AcOq6HH- z``{ice1Zb$p@l^3+%xL~gVwDyb%iImMtUe@u%xhwbO7phmkvW^3ayA5ZjWra$^xjZ zE1`MM`5{XLBdfEFL>W5WV0yyOJ}pfMe|(xoW6f1u_cmYu$Ds#yym|OnSmFm5lnXH2 z9ja|m*J`LxBZe4POl~5@%ND(r1{9F(z$zV^X-fSVRRP0O?J1Eu`bpfA--h(qT)r}Q zthfvjW-qKmeGp28>L_UbX93sf5KSQ0)jCYB`cEddG>>aYCdNyNFtqH#hLm8`3Lk2y z&y-B0`Ne~N1qnGje1E!aB=PzLSgM_`i{WCqJ73KavlR@?hA_cHa5Umt)@^?Pr++ai zzL_dflX|Aw@tcp#QEsbEkeuK zi133}ofUfHT@YVE_s{8x8)xa3nY~0KFcSdquQHXBpqL_DUXKR<%2J6&8yQoi1UaD^ zr7~ar(OLvTv}-ypSli-&2Y`Xz&>&6oYi&(EO`2wu2By9EJv$0|6zW61^ne3Pfw6gN zK7Vt*k@$x#p%X%nt)5u`qbWG7%+vl&Fn3Ox@*$5^d&!?3+VEK^=NP%oElF~9&v+NB zm9x@mYM7DOVq#PdF@D-D7oYkx;nlSLQw0H?GLTO899ix#&tW&U-$N5BVZUYwZhl2Z z7KqZ6WQ>yfjDy?B8q(Ib&ve1iX^TwDV31=nenA#GT*WS*xXxR5L{6b_T#6(Cy|6D< ztzlEQQ~J|!ysD3i%!~@5%N)k?e|hv^3)^7cl6f*`F;u^b2vH(uc=Z0I_N{O7=tCV_ zEsWa?v>XppB~~&bOHDyMSQmJ^I zcMIh9g)M*#hb=v{kF<$}@>0qN&%nIv!yVZWG|dP2wX?mUM$K(1NB3zu7D?|_Kmw4T z6eH3Qg+ONG#j93XJRdXU3{Xju;N!%WrMl4@mC^(t--z8^n<_$d zuwD$HTw#OkCEAP@VERx1VT5Ji`!VwP2YQFAtiAyF;(LyaeFbFK4cCW0hKNc-U`y(Ycd`7FyKo+uINNIfL6`^;JrSY0diX9GD0|I+jS zr|mG8sk%t7xqI>PI#12Jtc8=s+uwVyZ9&m{ zbxX28NJ*+v3m7iP z)&kk$V0ssd!|gJ<>H02BbU3(`*-vNzY@xjI^eh#VpeFl?Cl(lK-Eu=xOP?t+mtKdL znLD}tStDNiiHFvdmG1-?ihZ%RJ^W!mm}xF>*rE54;~B`us*`@j96%t`1L%5gh-w`^ z4VJ)kRzSR^{Yv^)`>6!QcV23qSO+9%@R+);o34X=FBvnGatLjEJg}e;V3g8y`ukzL z0$Tfw;KvKWZIV69wu{gFqAX!o;y2cZwxz>xcs>=Nfkxh;Dz$+llhrldfRf41Zw)Q% zlc$-C9lw85_@R#mA;iOr%rIMx+ub#_9F(Yc91$O9DWFx4v8yNgDJ1eW#x!j3Q@hf> z+rQ~Ujq7GC;I}kA5}gBiIbclI@D~cfEOVt=#oqn69ApyLGG;%9&1r*RxnLk@api3G)TMbk-Z1GHYrYWD1rhm!baIFKe zflaH@*l<}GxcF&+RtHoO{|1w3l^jk8?tpj16qKF45?zQR+S!a=b{f34cnM%o*bzSSg$RPL2d59b$V z-+LV^(s+C_*16~~l+0{0nN9;@YIQIgac~;S9sTJ>))>NQlcJ!?;e0 z0J-W0xMb6#J;FLcI=xUA@9X(S^oMKln;b6h79QE-OEI?0617FQNv!h|8OyetHD8R= z;%GNjUVRqr0>czCW=jE89I%lF@Z6NrUCjxCcaX?wQQB=ReSyGHQO$sZR!nJzM3o4vvm~g0KJHlwp?HuISO} z9}3|9tu)2i$&;k)QK4^_1=Y%k@o6PX9G18$kc?88lG{n}b*R>54fmeC8E>V(UgfEp zys(7Qigj|(LYl5mhgT$N!MRr*2KpLKx?}@?X_4iM0qz9!aEp;LjL{=el9HVxDy7mU z;(kqvik`l2ADd<3O{f6(_;azjA;1>GQ5)CE4rWU3GS9eZ-To^5{65@Ms*VF@(H0=y z$8NIwOw%NCNy2{(S=TnSPxsO`g0^_@x6Gond)y>UDm86&Bw`c|k6-mzZZ@1lx5kna z=)Xn13$bLhiTuw&Ge4RhU_k)gSaH*k7~5EQiU}Q;X;j1iumD3MtW#bvV%8P87J_~! zk@_y=-r~^Hm}tquYgo6REu2LveWbcw;xG9$(669phKK|Bq#I8#YqjgT;skCLl7&0- zttpp`o{W9kN*spMkJwcXVk*+tFX)2>o-y(ldO$?h6$u@>E(9=MV`)F{p2b89F8<^K zv)p=-W)hx5wk0o9q`iLkNfpRr`P8}Qyxb5p77EPA>7#`K083OYQUDmBk^L#Im;r}^wx zQ`^Qw22{GZ=4v#cg^PEw+5FzhoK2j{B}lo02)@0(3Is9?4t19Idp63r6D73!nZhsi zaPy5vqj_d}dfjB48k3idM9aevdq`<*D(@Wqj($^b>NlD2W(zRP)Qv6z5NUObM-nvz z1W+V%Gq17^*SWqvCGrxg!7ANXNdlt;)yz*uF#NIt9I5 zJb(12QglFJ93Z)suMr{y@I5cMz=;NtMQd>vxH(j;1Gq)MW(R$zl_**arZ?i&APS84 z&{B-kPW*26qUY^TV`&0S0R?u~V;f_Cn!cFEH3V*?Lfsf9G+W#dUM01!Uk-oxS#~HV;i=-8|BOs{3&d4HR82^(j}%JxpBhjc)pMx z;S52s+cs{1MZf9{(fl3UWwGW)Ux|aTSS#V37MQ(kr0w9#T-pU^cK3XwladQg=TrlI z%h(&|Xl5d1hL-;+^Ajxr*Xym8n&RWkw!I*cCI9|{nvEHb)L^8Wpuo}8Ah2y$p^U-pg# zf9p@JgQ7fs#`|&!@wY}fP6dC>_Mwl4Jd+~O_;ZYT)Ke>Q zFNwztd=8bi*7rvC%%=t14#d9|Hmit>4qULRxs%(KJ&&dF&~F|~rT^+ny7XModw7EL z>(5`2Bi~d#S24lf{ZSd=(SH;t1QOTgdPUXwm8K*g^eerPefmdfKxA0wxJjuZIi_D_ zzhC*K?(aX!bGlRg+iC_2VaoVfv+*k`3s%~HRTk}XG#?ilTU05{n}>$~x8#-dS9Qhr zx#fT90XN5{+e| zkP`pK^SD)I^Ol94=EsXkGU9-up|YP9w<}7a75V!4ouBF}QndDBd2Yyjiou`Pkfl?S zdVcJ#4W(#*?Y)=sbE2Yq_UTeZZR_vN>YE-l|MN+t8x>%hlzR#%o0I5yx*r zpX)BX{Fi_FF5U3?uamKxc-<#!51#A&mI3SU{unCJfBN69&8i;l=l;VVdjp|ge;r1? z7Te2eNjdd@M`LfKLfKpK!0A_DystXuc=Q|L&>u;s+&DP)q%Guyv^zH{UJdMin0i4+ zm_c#(87d2L4T%=O1-lGk>f6)RrY|z7!mzVkhw;ifZcbkQOq4# z*2U}WwGzh5b}z{ebsHR=jmA??KJ!=iaC4seGTsRD=gYthYIOPL@U;8mt-Gni`a7}A z!7x<5OMmT!ja^01Q4{Z!7FM@QV#0vs5pR4jwYm++pu|Zt;_w0#rjv!~<$^6$UL%ZH zq_Q;3?CqnnIX>j@ciaq=Nd+~d(C7N zSPc*+tG%=u@32DZ&G2*U<|yGI$L3@)m8+j})K(zqroxYs%8nLH@03am`^Jy?82CA3n3uAU5|;-dmuGR@@|4Re$4xeq)tii;M;dsXsG@e%LGQMfkC&z1 z%tY?^l+E>+vP9e7)MQA#SQRRI%f?Zy8EI$d* z#PStrAHQZ#e**ZV_caR4pmUzE@d`4G6{c?j0BD?qTg2O$U}QUD^x{v&AtljaC}!$F z*)3{ZIH&-o)Ngc7mrG6S-%Y)~O=RFiW=QN5rMc~4*@Q|9VwjYwWv0a%<9CN}Isk(2 zb~U5#!IB;xEbV$HYx|x)|F~oymDhd_DLC#!h7LqE_#O~1G53C?pO2a>QP>hHXTGcx zK_Rg!Z1a5blbss7aRe;s-mq1))nqarOTB7LOM&qQ0|2}Fu&#; zFiuX>eTD)15cx(-T+B8<(6R=8=bfFltRa(TzY(67pfIjxG)Ru8Slz`98u1iU1RSTS z##OLkJ=={miCqzaX2h_ic@$^Cx$;Nz45n(~+#qp>Am*b;9Af$v8#~#MJBTu)c(z{S zTIu_Q^h_b$(0PSPP!0DB$I@T($nR8Nlu*8~fr7-Qxt;b9J>rVR1vY z`e$z_j>s1oyNL#4Mqj!#-bITvYkLBeP^0OEVg&eddo-;?( z#dR4ipWNCC-#h40mJH7n1@HqS<&}4q<~Jc_w_xnmS29H{J401|CyMaGbL7`B zH|;rn#XXeFgeDGOYiBUL71Qr6N5hvZc2ikj6dQp9MzSaX0*9%sweT!Z#xpdPuIBB8 zQpDjcFX#0O!-7CBirr00?G=3I58w1m{TumlOgwKCegW>6rnng-uYc~Bh0syH=f62} z7F3@wh%yyCsphEJU9O{%^qp_zTc`lFPs!aG-+?XFtJS+ulV56%Y}f9igW0P;tLYC^ zGipHQIrgj?-jyBZW06cE%yS2#6KnAQ#QfPZ-AsfE-sZh3Ju4e;5M(s48Mj^kqiu182U^Hf53K$qsqq+!<0cHI8@ z*>kHDmOIb=1PJRF6o!B-)79?W9|#RfwDE7(6fCaT08Jm?A9`kV%tHqtN&iDkxQ`p; zXhaG##2v8(85wgRE^lFOd{8xagfLHBHBX8#Z+bOv zzA)dNYQDR|{0$qgWoCZHX2J7q+1@Z*NSqY-HFbg8TA)o>sd`$l%~Ghj`q#;Z5dS1H z|K`Ut7C}^vaH9EH>CDAME8$coC1bzo#|Y%3mqPY6a}e8aBh_NgR{t6&E-qIK4$XELVLwr`3?zmyW&Jmk$6??XW({eXk06A6KiZCk0mjl}{hg)xMDgr(xx z<{F^jPy8j1HDDudJ@wtO;Ox)Ke`huDJ-Ix7ahWki6%oh?~ZowoV5YFvQTCfZ~#fc}k$4NIU&z6fsK z2IszwM|ExMr2EOg-Bf0%$EkgMdx&tMZJEb?beTnKo}$fAA9dyG74M3=?gh9x*Bf_z zbeN@yx_50Vg6h`-wwxjYu)^w%tPlwx}O54Ygj}JC{IGpQi42F>O6x!2L7tE z{Pj_0r(P~!)KBkzjGmZZwur;L7!UJ(=Y~%nV|A(_0f8o$^&W{|cDA{`Cz7}vc;%?h z6Mxj;{_C>4(w2jDkh#g_ps#2FA+ald;#NZUNm@JjHZkt-T1P2S|A9}Jn#DIEjfO0{ zB$`s4n$jnN{ijT9u=7v=`{b4<_pXGJT^7Gsc6r_Te1yNR^RW+zk@|GQe%DU!QyjNM zLiX16a@&IJ-QSQp;;dLkwv|!}q9}j82+xj^Lx~iqNv>N;es`4I`*OJ~zUgigGc!FLJ{e?@?;+m1GoiF*z=LV7xzkK*$J>L4 z=CfmY>%DQNBc6r@Lok5z9w%?LnvrrKjGb&%z^>T%SLE6jD z)*WhO-HoErH*OEDrGK9+=!@p`;h5-8Z*vAqceD`$i6dyH6*SDjA34HFpqO(SdBnc; zTypZL0ti_ST4tv5H5zM$xl82Yo!qLN4C9@+30$Nw%vEH1P-B_rjHwrq%=d~aJu-Mb znZ$R6%LNFaGPK|X(&Er&QdA)4`Y=Bt#2q-UK`rB{dyq>(I&(rU{d6*Ya+^Muo-?^Z zwfaF{(1_jorE9Pex&vvqvZbUI>4710p<=3_0Fd4O!8|+nSKmwpDiNQy0uoqUUNHHx zsAQA@Hx$Bz8tSxyD3G~##0GPdX=6869H^dag?I&x=y>?c=y_} zy(DR{WORUF8w)8H7}98xO--YS=n~TipycY;TesHU&!=w*r?tAvF!c|s#$)-`_S(|+ zR^A&-dwCKIaAd0$Jl`4#FH6>+$eqQH`2;KmLfda z`mvl83@XDnf%GVYIuqE%p9&oxuLcV^-xgII6dhyBXep{T>ui>1*>BhOC4;C2KU9q* zZTVSAMl3OAvYKVOGGJjGHk=ETn5@9|&-{5=`$c^2W4l!oPSTS=&vLmIF(VVO`|Y-L84 z$?ev1Z`DeP=jM{NLptC25o7ke-^$VAu=eTUQBB_R_SdvWUEfXqD2a;0&^{QM5t0-Y zqusMkk5_vBcj4mY&bG!i-S)~CWe@@61xa5)d9t!*?y(is6Bd#w?)gx4Y49VEDryPv z(!dY(JY(ZRu9}2->%ssB1s z)Cd?iay~!l8&O$Ud2i%QD(|$Sc<~_ToT2En48TY3St?lu=Pj&ZqVqClau!H;7{SzI zUwr%S7n3(uU;V3f!(FcbpBref63lZ}jOp~}ul4Euq^ zedZ^Q#)DYMQUF19SuImmhc_KzlKnW$MSbKFnf6K)v0)+sboCg?`R7H)BTgPnK0t=kZm(ffBUE9R_&|Wn!)t)o4n93m zT=$OJe`=J2vjzIaQu+w%E@7D7Tn>-t-uC^#a)l_N-`B<#J-=KT=a@5TTy}P*|B*KO zD3Yf;O5d!0@i0nWJ*H$LR9!vRv^&;D{hCYnwM*)8m%HPxs$aj}eI2hJpV1wEQ$3-i zJK>&s;{EQ#hw4e)-AT{YlgGQ0@h{cSk!m+SsHc4DPWh&e|Iv;Ar%s^nA+Tx?d3uN! zHLhO|S@fE|;H7#FZ+jn%toe7I}Yed9u-vYX+eR_Am4@38}r0D9@c&V!ka zHO0OHqz_w-()lDuWZj z)*8rq8To&Jlp#T$;HpvDf*~@1)SF{@c#=lpZ-VOsfVCox{^O zswIG(&mL1+AJm(mak@kD)(0mC7=Gdgv&|f_+0;W8^#HsnCviGj9VKp zt#JT?48WNTp3`Y>Oz|=p079c+UCG$HE)!;Y=qx1f7_fH1Rno#Z=iI=`QA&H^dx!Uo zo28$756UC)JM1&K{Q!|21@RpVFxwIswC7d^9X@G56~w$|;m_hJ3brHCu}KNIO3xOv z3DfrtEu;zAW%JxCmY`qf70meuiEG8(TrSHIigRxXDGvAO#sgGDeN78^FUB-ZY{yC; zSiwpwsYf8mIcJ7w0Lnn3JNFemG5bC9_F|n7!H>XgQzO&PEx=%FH&c4S!KD&Sm{?N!JOJ!iBXl-0V zZR%p>@KuW0Sy`K`n|J)DatnS1dO`sA42l^r0v0j5lR3rH|W`mP6a0G#Y4E*Hs_SKSMyPR({h!=-?TF=iaF2cieNB502^2KuO|dV6~W-7>jJb0@=-o%61Ye`zDu>oAIY z=C|o=1J?^)Ay!!cW>P0kYc=Kxsx1cIQuQ{qeS2&KdqiHx#kO6aHqN*Cd`4QIFt{(= zin0~MB%*Dvl8o*&1i+RTl173wW|s})SFQC(X6$St-Y?jg=#E4YM3iKz$7;jk73S+e z$|zF`K#->)4qjfL8xL(B@g&M|O>l%}P4S8OzCAqk`j!34@Rl3BJKa5^mI43HXE8Q5 z0B#7n&X1LeO+cFNFqig*^4p=5Y<-jVH-lsczFt`xSUG&BKZMZw$hC=ib2$}H;O6&k zeJAw;S2JYDtzq@S{b@^E=WzzoJ4i$P!;P6;m;3cJC&pR>;L8a%0@dO8_iS~Gcil7* zy>a&L+LQl=kBH}ay@MOM?CBarG<*o_G>?W|Z)ZxFyzIWxA$mOe3KPfP0YBRAGq1Zl zyYrmB#=)RR?$apqoan1$+#54|_dB)jgoJ9NAN+uo#;0~ahdc)Q?ke9aCBFfi?7Z4Z z!o8%QQukWSa`&Jt7o}%ZpSQVjEg1bKIAk;rjr1&=g>#J{4}PYz0+Cys^%87Bx?CX01`I0?fuhicM&M5z&5 z5l}Al3LD6OjLfbp%gLmiEu|uXa8&UX0&UPne;;(K;Vf^uvLVM&a-aHl2DkZ>c=P_X z`DRoW*9gT0zek@c8VZ~$h#3g@F|DTRKhUWrYt_10E^})THBw;;{1Zby_0$$w7M2C= zyBtsuyzX;Hbo=UC7W@*_j3_W9m}3jt1xOV1$td0I0(&4RuWv)&Je252Y0qU&a^ z<4ui+!vtf8OAAmDAf;T4<@aWLpSi&L_IHYV)XFw$n~zi2i+7ISp%!n0h|Lq+me~@5 zo}1rO)E7Q{K73WoUa%$RmPwVK@|le~yBe$@X_@C}K*zR*#UoVR5k~=j^u5r09;u0P zi3!_Vu*!DG_4Ogp2>JP;qoRX1g+LPxc9`uzZ4)=9>5KU0tINW0iFp&xnwriQIS zX6O`HU&DZouicO{h=2`@t%kAI4KbOOj!SJK(_Z|v2?~8>#A_4@%hQpU)%))D3vvyn zWDBeoMo+`=bl7ZpjKRg9@OL^?6A{$%x`K@ZnZt=KLq=f35V+4T9*IWSI(AfEC~)IW zMk$N-h;T}sO-g$nvS?cRR!&rkqRYjXxN|XDev=?q32a5WUa^`;$3CX8I`h#ZWe&GS zhW_}^mcC~|!Duv0x>jqcIek=`FKWaT82Of&jKV)mpkU!+Q3cRS@dhE=J+{iM=k57U zC`dn_CB`>hW&#k~O*M3)-Q|8z_&qS!NYi^L3~kW1xX~T_>|jPCL;0>_0Jx0P!kX;P z1idR>+&4F@>Jp8}IUy8RQmN{MWlvL;&k++XZGpE!I6djE_ZR|Kjg5kov84w02_TO& zJom;lYoZ;}Hq6w}w%Ptp-(#iwGecLm8O(m93}5y+2CN_>5fYev6K=M$m$6Y9&^x0Z zuO-O3^dNY3cu@sQ&9=G)8#HTflR1BbNB&5GH!eLowfc61ql+o0dmSLW%m>7{ea8&I z$z(6thM>toyY8Qu7+t?WC)BfE94mN=4~$jVn@sPZzZ{K)JE3i$1Ym|tDMet(j_Qdv z5YZNJ6nqg30i$TcS=jk~RLJ*_egnS@?q&K_zI`_e*1WlKD(-Z`jmttUs;9pD(2sC@M*Fqc;;=nlSetJK`c zSG%v2^qCtCg}QvkfF#LF{2hThb3w1)&J1xDe}41t7N0kpLxK3OLF@bMfeTeBJ|b-- z27XtZLgOKpv%Q!>F<8`id?g0F>?>oIB)0@`{ZFs&$YT-~#aCXIA;0G1hTR$|)4n2S z8P8{u8sMi~_xFnxwZ=5*VgkOPbb3O{z8zN$qH10Mt$S3jTUr&{^ecE~37Kz4KDIN` z{ZCc-zoy-d0Aa4 z)sI|w0=6$Rk zofIUPeR?D3^y@ayyplNn739EuwSIye@7Yo2a`H5A7gOu!^D4%k=A2d#4N2~=Hl?7z zbbQx^XugeG*5&kJeGy`0g4wbF`vN2uXyW3Q zG$Je?txL%_N0J3KHk>dMmsti2f+B^6{O`bO<1NLYo3=!(unP;&rOy98>3*G z)x@a~bTuQppKzF%BNO~F#kweYCu7!FYed@ftY!{`f5qfso6q0w{1y{6(eC`7a&bBP z2G)!t*of;8$h>2~-CzIbB()GHyl+%vA5hH%xm>XGkz1yY^Jc(lip9GSP~HJX?roO5 z0ey` zQSrS+n#A~W^DTliT=;U~Sy;5`oq4I?S{WmIqfFyyjYmOaxDwiU())UBbjJnFYAmMu zW^lD+Q4Y%~FnAdhCWc_?KZ>jxDjC$HEnZhvvQEf zc;+eDsA?M-gL(JhU4ACI#(>i44H?aO)Ma_`5F6dX4aDv(k$tNEHsWe(Q2y>#Ha=hY zYwTE3vFY^@OmH?4;gefc09TR)D&5}!{-TH>2Z4V8iBl*c248_WSsK^BPukO0D?Gs} z+8fb92$dyfUWp9VLH2)<*4!zR_&NqRcT;6xS#9{X zT0aH^!4IR@zV->+XQ3V|J2nX6fj*pjz~E@eJBj&DD&3X35E1nzBQcWlry8|t#!&Ko zp@i!3%}%l15$_zZv_htab;ws7?@@K2Uomp0!_@VPDX`vD za9Fo6Qa3`9Vb#Z2aQOY>Y^Fhzq><>DHt|B&-GKNb=?g&@Awa3d$AMz_!SFDH!K1ZO^W%fnj41)^ zc93C>bs8IxF@wN{WVx#hvD=bJGWB?KVz8Wz!$UgOnH{bX&H$`ACCg%M* zWTINVkpLR=H7%`Wr{Dqh404_$Ilvu1zFe?cfJ2lDk!}{8x-K&6W2*K^G_O3IJ=stG z$~drVh(qs@mWnvnB0V4o*flV!IQ^eMyfBMghMWIpYV&Qx9VZ>S8uguO>2xr_ep(UP zdXr*r+0|(hw{c_bT8Yf33+cCg2B<`HBBTAT!~q710&|rT@a-ulUM$})AZI-Ci45&z_fOLy=x1fTcbSNqaC=$o_pwILD#ryu(`tNm#OV_|!?6dEE zU;Ezs>`zAs4Df`DR`6cXaCTgb)kZqf?hM<~K$uaK0f zB0>MrBQ}(b{@Rj{mnPXDzm$I{`6%2*P~(Pf)f?eu9+G8d$xxzl6pdrThi)oA z+>O3j&z)Qw?3gBXsj7RGj=buf+jgp#5)f9-7*hTM>Ni4H{eOaVK3Td@lKRaEYbu2w zIRBYhz=Tzb66Q&4ZtvVp%+6l$bZdD!(}}j2o#e57{pC_hgd_d;&bNi>A;gvJoc7Fx zpV)iN@*i``9h32u882i*xDsOd!iZ_S zC|j2}FYguz3c>{QczQo|SHV!KdF<)-6oM-Xf}>CEpsbvsWuxfmP=^bpxg_5^+51s^ zrEJKJWq#sHwTC(vk+Q_)pDHtEX1?Z;39HS?({EZ2bEv*%dbzId#4aSHL9B0Kdm2J& z=!i4K1_k<&HJFaXdU1GKAi|~SIHIA^huXMM<2)=g4e3RuFmPM*k)9rSWDCSpGVam2-zSP9C|Slk)<%75g*^V4 zWwKgTV)M=lTJh^xxMpKq5P*F=#unqiLsEfUgsRFB_**?+_D_D zzbciD6D|GZSMs~2LWAQ%6ZxVmcZ;m#x!;+j89q+6o-Y*gE531D9LrAA+}EcQ%L}L? z4rs_reCJOhT1yj;OH<^_9^EZlbnG$YAvc&W%aV_Z3njzdD6g4+=#Ex1<*=ri<>#zQmfmWO*Hwq}o@9BP#cb>m5nQ`$ zaX+lRR*0I26>4bj)iAWxu$7Qe)$+B~3Z2x7Dbz{btCMT1Q#z@`DAa4-tJiI- zH#n&`QE0ewufeLVA#Hx9u?6=&KTj}7CxOI;*_qpCydk))>A^`;C{x`bCBzRyhE<;C zwd0{Wspd`PD7asw02gj9y4PCP)>_$Cy2tY>fn8B_3S<3(*WBT81$*m@w)U|TpnXc= z<>#+D)7tG$jtm3qZJ&9w-sKz2o^jKb#XUsV1!bD-WFf`0&B!{Phh-C`50*&O0_o643qn1uaDV3&ZA567%vfsS_@+BbSz>j{h z`t+hMiAknoGdqFoFB^fTDCs1V)BvwLl?ek*jMUz$ft8xZDC-`RpW zsXa2fY-szfZp~biFibPYP3}6jJCSEafy{O`MQQGl(yN{fy}JkYJx*{tHQGk?5A>d7 z;+52bSJ+6QEL4|O<#~gL8eGcfSuM~k-uN5eq^^s&QEBvfHt*X(*=Qek`r*$$>?wT= zem|4x6j~=v*33qn9ubGOC!4l{b8_TTFhEcuWQN_j2+u2@8ZmYZN9+XH*hiWCxtYy= z^x6GkeYQ3qH6O0&cB~lyYbMI;S01i|bZA>(-9dT7<>6lr^oFnUCJ^v&Gq_{(0k9dW zycPLyE4E`Z{2e>7M`2|mc0rB5)RE2n7aDSJ8E&1w)iv||F`GS_oOx?HA^YjXZ)xe~^X73M&FIV%q`tx>bIP?<{T57~nveNx&C3C8V{2 zkSr4%SIZ~PiLZNhOAWg8`CXw^HUF;_6bo>N~Kv5levgq;L;8$!$|nYlAb5=01{>0Wgi zj`fQem1>U>D*(^oFe}_uEZxe+7#e(nS~lv$>4rDDR-Xh>a8ci1CH3_5`^E&h>Z7^^ z&*dA^5AQv)6x`a5ZBMMV^PlsfNDcQRyiru@L2^MUyzB>b@R+=Kz$=9t_nye@v(|O5 z^j;3ndbCxYdz0rUDyYC?kVn`e#LM>rWBe1c6ZRUih`}0idAuODl={Q}Tak1~I_(A;1x;L`h3V=Kf;q5@`kJCIvfIAB9 zpAcsUFzykjq+@7lME7-D_y*TjZR{U&11EZet#!K`iO$a!37rXLE4HW85P(#5TgO@FzbX8L z!9Mkr5!8B2QR9Ni%e0^T!F#+ zOc`M^sLYMU0#2nwiv7IoDbOq#>;be(8eO zE*YkFGq7BT6Xn12gL!Eq3+hOfkpZa@9`LIHfYwvQURXcj`lDqjNa54YjoLBTZiRL` zZ;420KR~JVy1s&9V2a_((>#8cquUfB5~uekr6M2?eU~fd-$RCOYPlNEZ)4=KMoWn} zhBTJgTX#K*k+v^Qnh3K-Z)y?y@0=5_(*42Y`_Lp2s{#d=`D=n|PnWNi_;!Tb7J- z`BqhXwU@Z?b3B{BX{?|#TI8*n+NHJTP}8L;0}A7a zi@C;3R}CnrhtX+&R^H0YdZ`Pm9r$;>E1 z4Lb-S+BB*6OFY7X1^kP{`=KWl=^uj&d&5pC(v9%@Hw2eQNBjp zp&hE#N1>6d7#^CFu;S9%sm}KkIzVJt8z$ThdA6IIafb`dgKW8QU6K+>*<0biwUv({ zox1W2+WB0XhmV1i6#+8;Xl#i$kcR3sb}{zm_EA|6!GUf-2CoN$4>XiZMqcc zwmhS-tBP1;E+G3X&Qs1A0jC2hrr1UWV|LT$)!6qN6lq2Lcy-|J*dN&7!9QZf)*a&vcLOFHK5XcyH`@;4Z_IqfYO` zn;^7g9O@Gh)VmIO5#;Mac3p6fF|gVrq}hVWd<(luYG)Fe53zsSWK%%VrkkZJD@M>4 zQk9A95*A(XF$|B%C-tT!x~<_!yUiPhE-k%arJ!U{liJ`0zNnUPy_@LGm7k$}@vw-D z(C8*qa!7jQ6)w6ELQ+|it8Q~#5zg;$Iu(U9CQBy#y`tn|GVsv{w|ih*Tv4RA_=e4@ zzCXemj6&iM1ms6z;P&A~t&#+-tYQE6Yo6IiK>niA(PYz#$45PawJa6nDMoY z!$eEba)gyOS8C_g<^_V6Fy!$PxUF$LfyZOX)?(*q&z!gYI(EKhc92lC*Dy1XRWaZ9 zEA1TqBK35FD2gGMtp}FtwmF#&u6Bj9yxWP5g2f}+NQ^XFc6Ci&L_HsY4ySK z+_Z95SAJ#^UCRHS*_F>K+_4{7PFGoh@A zPi2Pfo+rlfxCr3tH=H45QR`eNj5S^~f85ZRO=s;)QvVqmPPG?V;^b`HooKNbK-U+; zbi3yBCym0B?_oMp8llS+ck6%HAuYME>XbIS!!$o%BVWKtAlW{1Vh58+H4|vT_LyAE z%u8eq*S&hY;X$fk#-vuHz1Go&=pcdR4L_Cc*W?{b*e7+|ZM)a!zTfSbMtUxDGc9r3 zI|t* zl^#~;ND=M`3p1vMQ%4-a+%_}?+Y25TyIYAl{LTE!>S6d);_HyRE^x?mdt}P0vNI(eZO*N7j14@HA6qKPKz z(T8j#_WRUX)pi2S^xR=W9Tv=3ch$R(ELoCrRjRHaJt?D2#DmMlgZYd3o^}c#$(+xzLmny&rq8K+x@(CfWA+F1~=v452Gd9?AweG`5+SL8JzX$HYr! z<}s!YLs(F93uDaQQm$;r))v&drtBjv|M*2YdblsBE4afuzq%?G#StJ zE5vL56osNfyPV-94CIkmQL@BcD5Dm~rnJqhDWShF=@_BAvrdHg9g1hWh_J2*y=|h) zEw}rpZ_`Gk93MexLn*&qOnR70rewm#z53ujrP4<#VVp4wm80-c8u>?KHA|kz{5?O7 zt%z@yL}(78-?f_Fp}g&?(U=Hm4F&ne6j}ZN-`8r?$W>B3D~jw%tcqqmRk6M8Nea@+ zGVEHaU@cy0&`byEK%|>Wq;Af5#F61FCx3rRQ$8}o5D|af7l~b>70xHey7J!NFhiyg zi2y-&O(ju8a{PR^<@#1gLOQwA*r2OR$wW|T7^g)mVK##}zT+*@njjs#I`U>M?X-q? zFRjUv<>j7E!)`7tx+7QtryD4$kyPkJVnrRA6K%B{PnU@L`siFk zsR{|r#mqUA9MKv>QXP+I1wJwGvw?5!z$pS0ZijGbSda!+(=t+l-60esGFSD=lp@r+L(y7I zC{jam69U7g`ZBmp75G3bpP_F;?1}vDJSKw@l1`Gz`;wGOiPfeM8&uQOJ21toBIM?o zUQsfWQwcd3(`&j=Et|1COHp{blrUuqKUO7sHU(Q=x%kbP^bT9Tso#Ugl%& zRzpIGUAtHtg^a1yuRh>xtzlEXdn+f?Ib2V5oS#w4k3u_;jtU0d2%*v&A-a!N45O@( z#w1<{t*N0QGFy5Mi$~dskx*Y_*=N7|coK57dqMsYjOj<-gB6C}OvH$loQJ!W9JTh` zvTjPopX&>kc#%*NElq^@uG)g+1F7sb-_=^f#N|ClLq| z!Ap@Dy-!}5hH#m1-wfnMoI-+DDTt_%`~$d_M;WDKl!#ZTmnbRi&T3?;0wVnyMS&_Z zzYoRN*Q(+a-d5wDhDk^6*&7?fuxytTHZ$$~G!SCD4Fw$9zm4OYCYcSE9=6Tu9YzftRJntA#2vve*A|C=LfxpvxVqY8Mqz27HIk(FSD zfTgR3$j-r$i{P!6b~uEXYRJ!f0dpr0T4Ixk61d8J^o>+I4p+39D&pHTS+Nb23Eb0a zgnPZ()WkxQh^sr+Iu*Tq&PdW~u5Z6oaXzuPNQUzkc+z-=i@b+R5{AnvhKmL$lQD={ z9=gKz;kwHs4c;T9@32i3BW*i8ey&aJq@!JeqdkIjxDW;whc0s;*xr*%9hXNZNXMp5 z^R97?&DxA?uU~spG4_6R48iDZToXXqibIJ&#_2=H78Ay|ZN@?bt*4nOn*NX=K?EKH z0Wr(JI7mvogFEyAmGmoVkBf@{Qdp^V$Ons zf`WsC@#tkJJr4*v12Jb{i-?GbjEszmii(boj*E*+NJvOZN&BjEsN`v+?oqN$lk0)YR1L*RN;(ZL|L$ z?alwy-o1M_H#hhG{d*941|m3@mzP0i-(S`lh&BVEW`9{`U%!3@;eB8ODV*QGe+NOF zhvzi2A4ee3=LDaB9l?r4r9u?^2c3&@F@I^CqUSVD4(sK7LD9HFc)Q6nMxSVHKb7{8M!m$ndELV%fzkD7*s zg^iD$U4Vy2Tu4|}N=jKlNn2G_PfhKzy82};Ekiv$6GQOwXj6+TS1c_pLF67dAnnrj z*3kscUbpa563|-&sVPZ#F+*sybZ2K5$fE-pbRc>Tn-#AEiKt*(h6;YlnQ46%C zmgeTxe_4YdWAL0Vcuo^Me`r0uVC(Da?eFg!80;Gy>K_^&7#bNI9vK=L9T^259vFEb zKyXqM48G~<>A%qjhTWeCd;9k7yV<$-)AJuD-!D%rtd1|PkA2t}|F}8vadT>E>-F;1 z+m+4ttD7rp%UkOow>DPrU7Ao`>?e@f%dB$_NhK)YRX>NMMqH&+eySrDmk>iEAzdG2 z;@E}#Eor#+Zi;OX$1X$Ft0T%em`@15>6|aKu6BDW4bpOJ-!<{JEtK-{G$_F`2<2bl*3@cg zg%#YVKKiPk&O1g)--=)o&9U7J>fr?4Kid!^Io{J39|T_XC%mxw*cGQTyOM6s3x`Tf}Y7nv&y z5u}0^f{{rBf`Of!5%@=J2yU!smzYqch`?iE-Z&xd`+}UF0_-;YXk$KBb-qjTyewio zOuRfy>^uxCJhU`yjLh6j%si}&JS>;^FR==s(L$VDqWt_)qM`~?QY!ND8VX7}Dk^#y z%w;t-19kPkGStvGm!>9&-Za+LHPzQQGc+(aHoj_ZZf!|pX?yM3_3PK2939US3y8!7 zGf5hHBbwk@_7l9AFjSEgoT?id8f%)`!Qq2vy^fH^CwRe_@PXG6R7?}#z?cNdlHh#& z=Iz_Lj~^D-*49BxBshKI$JgP4_)bD77#sh_c0A7OlLwYNN|%NHNh6b4idnKCat-kOir^y(70?0fl9E&Ht} zR#9ek-tT`}uvhZCjw1ghP=ioY8fX#39HMZZpnJ~QvQ$D{5|S?^rCOw<>!f8WWaJ9v z6rU)nB&n!{s_DC{nVG3y)l)aes99@iS?lUr;%mlW%IKS(ZnwQ$?|8f1z2S2Irptp{ zpxhq#xZn5nyz6%(=(Z2OOAp$E1;L-^%+I#AbJFJ@#%E_I$n*qhp63wH-v5p7{5z8l z4-E~E3=fTt42_QrPL2*tkM+-t_rICweK*$6`s=Duz&?rbjYY_05U zuYLKn@#XW@*U#HucRqdlva|d3%N|Ix1)0?Q2R{yf;6+DZ7qKAC69n1)WqF2!PqYi1 zt^cq*)x%+gU>w)v_k|N6>_FHt2PT$LDUP|tm^}f|l$wY+AHRPGqZFi%5mFN|XPp>%#u{ra6F0J1S`mrBMsVaZ0zhmON4mhOcAC}PY z$@MUFjLTNjMI@;# z*^h;7XNvY}lWzD(ySKkkUmZUSmPxqRD0dPiCepmIEIQ9HkiZ<(x{<#3rr_QW@6D#e z!pSfbmp5Oqb17^o4<0Hgk_vQ;-}`z0ac&U(MDDG|@1#-p$37Q=FDZ+%{lmrv0lGHO zF$f!k5fY6=nvxL`lA}-*C=?|T5fw2p4G9S?85unV1rrq&3pEWZEiD@z9h&YU`$c*V zQ1lF(f5nLAx+KZVt}nptCd3yeESN1S(j+FM;NS|%(b4UX+?|}DRNbXTaPA z`oa16`Gxlj9~Kuse)zb&w6wCkvbwT*?h4mI0`3+_yWQFO0=mJy-CfWL?t`8Mbb>#B z{>9qs_wi1l>>Bucp^5}p@{J@~>V!^99Sd%WWMy&`nd+sB0KVNGjuf!(g<6U=q^OI?qEoIwpF0rk5|9fezEe z#KO$X(!#>}?*O&61%b{EPEL3+JH$tU8qnCB=buK9m)z2FK5KS#biM+o%=7sY#2tgI zW-&olx$O%!w%;t!EKPfXX-mQI<{d;$&e zo#aqrd@^|A8SkqPqo>mL(blpA-MZE}KwDQA1ZFom=t0||^nZr$4!E4z-QE2=c7KAu z;n5L3R0zS87V?`sg9-}&Z$|9z1n$s-{ml&0>TB{fV<|Y!C-4I8P)hVeX5HFCOd`8M zxlOQ1K|;Eq)9~f3?=E9mvMwJYvg%5PpGZF-79x^doh)Dpoi~rG-&QNu%GPrkl-!zm zjes9^D?gkY4vte0!?348v_5|Fy`i()d3ub{6T2R!BF#$8uq0i@uWEiN!|OE>}Kg|NMsPde2SXdq2A88>v^uANa_83+up= zlL{}~_KoVjjs3CkOSbD@BL;Tt2n2v=KzyB?g2jzOw{QjSo?U z)8Lg|5adk{Dha%x1cL*8cn3{r88+lU))nkA$)gu}2~of4z#dC+?2V(B@N6#ydn|%k zCGM2ouTVFE%c$HY)2~QBd=m-F12 zlS^+Tm)^vc`ru0aQc43-OM=siAEXzCJ}QXL$VhaF1>F&xmJK{q6>bg}Y>(uB9?APMn)`J$XLsz`-dOhcvF!cv zr=Sl0=y2lcA7vj-WFJgCJDAKln9SXu%-^3X_&!zieY#}tb@}e=irtwPJ8zq|=Q}nR z`_?{=u3%TDm)72W*jQZLUVZ<0YyRt(x!vz`-+#>Q|C~GgHUH!I{g0FPKTj5pP8W|( zKm0md`gOK^e71TFte*gzC&2az@c9(@dJ62G0sCjb4*)p+kH8hK6a=yJF2!hx%$?v4 z>Ig5I7ZP}ZkT{6OBrhxumTx~pFUGanAIC;3z9U<^td_vVk|BAN?4tT#(?TNz0cC=K z1tn)h9#*{)Q9#&mXd`)y2nDX9M6VM`xf9FXAW^(csv1nD8A7QWMRhrb z)-aCVB$3f9iP<8V)e^^XErs`bijY&Pgj<@7dy0YwPSq<}(>qb`X1wvOxU0S~wzs2P z0wZn&g$3LT!A}W6U9p9^Ps;K$D+?dh6s6S_r!T04lV8%eGkORAqpte;G1m`-SXozOUw&@_|SG@H~so7_B`(lV3QGV`eQ zb!OY^CvDR??NbFWCrUfUD?7*Px<*=hhF|p!4h#(ZEk2E6LCZZh_6mqk$BUq68A`3CCaxpqJH?k<7q z+gB8IbNN~N zvf=tr2BA~qc~6(9WJsbu=Bs*7wHla8^Z4?!VEwY!1HIKz{{W!6i^I)nH-v?A9Bw>>cOq} zhn~0)*Yr@w%&_ZE!fl>~Tjxet=0{#FjI=0;G%Jp_D2~2b9AjA=V_g($TNr0w5bvBH z?~$8u^I4MrljM6@xUh`W__XDcA&Hr{bJOqMPtJdsc)v9MetB$Rb!>5M?8ExlN3gQ6 zF}buky}UWIviWv(bAD~>!}`|h#ugp}L-1ku!Tk2?*Do-QgLxcGMg>t1q1I+{$zDjfjg6iHrA%OLR&|wn|FXNXZn) z$fwCGMky-aS5^&BRlB98;h~}BsD3S88Bpv`4x{u*v`G49FqPSL=X#sLZhKn zkZ6&pZ(?yj#1l@$lg{uC8ZhvIYryEwzrgWn8pPwv|jK}aI z9ufl*senW}An^#m2PlIUI~S11KbK?yAXx}V76X#yfMgXQQ42^k01{1rL<=C%4oLL= zmKgXg(F;htJe6qwCDHyv;^m&i%g+)Ws}h|f65WmB{n_F}aT25VBu4K@jQL881xbyE z%8Vz;Pvj^~Hen`*v?dqzr?!ozzMD+`x-tn^O#qhTfaNF_uo?!e2LS6{;956e*8yB_ z1?(CDhg!g~5^ydD+zJ4%XTZ&;K;UEGVFnP921KUro(EJG05!!xLmANY9B8cqUe*AejX+N;(EAeTc?EQI0!`gOWj}z;8wN5a zfW#Rf`YjMS4}>oQ;U9p=k3ifqkh~1wSAm>0plBVa*aT{}fTmBsJ9dDcZ@|DFFm?b; z{{Y?`0`t4T!UphR8Cd=RYgCaAe`xXt>nZ`iQ-_&QeA_BPb2|oJ?`F1ZLv?i2(>k?zd;slD;|49MX@_H_`FayI^skInS`!JT4*#}}75 zhL69#$!-fqH%$>=ZCSiy<^N%|mkBIFuKc?GF)lM?ydO^Jmxd?6rpVh82sx5FuI_{IM(tW2O_zGYjH4{$Hvb`H}G00$NADi16#Ox>CIH@_lD{WC3!yNC)Db)7Lhb7w^)H zq?)~*Q3}UvZ;6%LSq|9z;ara7w{Gm!(YgJoc8`(odgNq}C7$>9m<(s6>ori6tH1I# zb!cwV-oowuB>hjqtHxTd~xL)`)f~xnIM=WoyE0R9O?i{D-Y~sF6zU z`HeQ5YziZ%Vf7Xj=ZoyXDRpm5;ydb_#091v^t(=HiV!Oy>Jh=$DFBeb38It0D&w z_b6uiK+o90Q_(ytlQ ziSc>k#tG5G(bbITZZQem&8p&Xyxg@|Wb#s?6~TTxvc~M~P{mMB>9-&RK1*@QUvEtM z!7?|A{P7wvAvsMXm-+TnRQ80dS;LdCYXumk9arpX#KXB$x^eN%SiNOy%xEan?OhIE zL})M6O^U*=u>5kEFJ14XKl_5YChNOBlE7lhM=qymro+tsjoxq$Ox@56*jqb`C) zkPXc!(PzrIpYi1L>QW7&gilc7@;`UEU4ielldSKi5{8K)%#mGBecqXKp01Sz9tIJH zFygVD_xsA(zR%BGUUQKRPbUo(X*Y#UG-=q3Iu2NxHwIM)x_0F`g>rQ7uZ_ zMyExuc?*T7QA7#fm@>wFcSz*gURBprh}sK^NP5t@E*I&!?Bm0cOCYutIr1(_DF%aE zTvMgHxt;Mk#-Z#^aG&?KSNbe6Jq&!ygIN$ete1$Kmi8>PXX0Rrk)_K_3OMDE-Eg;j zc1o+DEL6ZhaCunKf3KGrjufu7r;2fR*2EP-?7jUtnA7kyvy(3@3%rI+9gAN`mZ@22 z(TuN)U(M-+6B;|Op`Q<0;j%Q5EHgl9bhIja^CFkCFCjy|)S)!36dB1SPxFff?7`S> zDY`--5vonhN=)Y6$%0FbHW%D4!E-7ONz?lI$yO};Rm1AZJ$5PV?H5d{!WMY^ms**A zBdOwlYa;z8<4w}xpGqx8IaF9~FR4yb$`CvwyK-NF_hU#aLxA8Ui!a9UL;er_K6k@F z`R?c`RQ?k+baybxqJ`~@EX9px7dIu4Lm-zUK^x#NkZlmlNj_KB^sO{G+P7f6)&I79 zi{Lu>8o`hyy&Fmss#R<$#-#g%y`6^Q)=j-0Ldi=9_>^%PQNJSYS<)vkC~e7|AEHlX zRMTXV#8>fbC-WtQV_;G&epi<>hxAj8wzQ=Mmui1KzN46*s ztbW8an!0*!Czp?3mEH7KFVBsZHs`zOG2~*;GyM4_^EL8NMV-KpyR$cFQs>1CBZE>R zjT%l%^BjJS)Eb{?)sUKqe5@A~1+c_;fs3;u)<53VJGAMAYs+8xu^g_M)vc{8+EUP) zSD99OdrOrH3SQ6S(RLMM@{sxEnLA&PSp+~+?a^vlky2+!%Kp)f-Cmc5lDGqfp05Jry)`3d3yW} zderEMT0g_y_js!aY2k@pgl9rV9r>?8HD){F(xwPS$EPVW%m5z~MvKGs6l&?q_qb?i z(2Oi`hw=vn`I6%Sxhrbis0#aar7>in-y%L``g7-4Qu*Fcz!G8lowj`!e}88y)#5oz znpB2cih|y=?@hJ`32%~C^6m^1T+B@{72>W_SLZ6V^5)ENc$*>#BXFBNK8g&~PW-&? zNGxMwX=>^W@UxR#S-m+gnezfk4L@4hEr9jjvcm6Q zlM}jELehfQqMeTw^kaEo&^pRuP6EPn!%qQWJzsMV;Xf3>iNycz5j9CkzmS$Km6gwt zS4vY-jZ)RPqoM7ktz@pmBg#Y1L{Cae%E-tlARwTnrIogP+Ys&T8{~8cckOhq&~;M~}Wf#(#dAx&7?%M&8rq{G7$2{CCAg zGbN>y<kXS0YL|&r72i+H z!)c{P1*$1pg<1c#xKxD*wnHeP7w{<jJ843 zNYIcnkrG}Ygd^buV8HnLQJp-%L0d*Gw z35G!KK%oIp=xr#}2L`(dgLx4UxWVDhaJW4JVG4&U!(dEsI1e!k7wu(!j#yFQW(m=L zak1g^G9iAF4dIM`u>mE*-{U8!#)gLnM@IR_#NLXH_li$&Pe^h}Om<34c1*%Krli`Z zr`hAv?H@m~&(3hj%XBQtaxQ=3TAl6D@XWpCnOjGWYj3X0aGvv2zSHXhhc|`S-xb=< z7hPK@vR*8*{8)T-sn}w<_{vJL`D(G*TCwRrDlu6rG5sU6Rf7_<)e`fS5{s3RtIH); zOQqL7mfC(Oy}nrH@V?AtzTAE8x!1djTW>0E&sN@|E( z*>G#o;LFN^R}KB$?Rc>*s6<-la|-OokBh6TA2v5X?(8h>?k*o3EdTuZ@%VW0^z{AN z+1%OLTL72^fEfUo22Lk|lL_G0IB+xu{QRH#H3l4y0Vm_Y*#rPgo`3lKTiyV`JOF$I zfDHin3IID`Q9>Q^I~&%ynuEE70vU~iKALFth=fb*8k{NG?QvuRdharKbKtR;Fc0t3 zr>^NlahW{R2&!Q3enjNZF{5L)GMvcj`=8xxDTrVX1PvvIFrCj-nHitpWLPor(f=PB z5tA4elN=P4>JwFJ71VseYmm=*yGI7PMh1G)(0*50z#0d5 zKI?CQfoHP*vy}nXdB6i%d;Ksvyy`9iVH)l?>KYhsr+8_AYL=grs~7AVK8by zf6#cTJBk>sm2SD3rx8yfChf0Q+`~oFy3AOfx0BoCn3@O=hVU9j8ZJC zkfop!tD+vDuH&fFgb{+8LGhyOP$%rd((?TB+U)Aq#M;i_`nSII?>!s)y;}zZ+XrLY z-(PRv_MafwkaM z3=Y}_R*m>U#`3@`Rv0sI&vJL5B}#=<+RnR_(n&i>Wir@bHg!cUmCb-%BY3({HC$Az z*1Obnr6=|`4E9g4TJpTNxWP&pHQsj{E(Mmxh{y>p5Rib!KHM3&vbY4B1o3;baQzH4 zLexb5l?bLmNas1fVIHq}29I?Dw|yv=O8~d0JNGSH9zP4-08_p@hWvMo_=AiDf{X?4 z7z+iOhy<95`I}1mnaTQ?E8MuE>S>|jW~t|FWn_QNA`QB2tLc9~Q+R*Z{uC2S~<-m)Mk*Ze{6`j-1yJpL}-<9^vm-a4{^nNJrTPp5bF796` z8346fI=EUsxcYo(rE+NH#qe_N$a2HzQuEk{_VLBeiG{w&`Qhog$(grl4gqFZaEEU9 z@NoCXkG-Ei_l}PCe*M}zKHfVy**iT2_5JMZTmW$R`}aOd3_^=4L>ogB|2!WZf;kml zVsgGeXD;Hw4XA|}j7d+@S~w zqwz{(vdKl8lyPg;2q-m*Db+~nmdaeomUl=~ycwf>CrtI>15C^vwUi*WtUH*TJE{eN zn3CIS<+s(UZmU(_R;%?_YY5P2yrbEAPwgdEr7K*yH%e|GR(2>sc{D|10-LV=I#d7c zQ=_?OCJT9{O9dt$3(YNE5q*8J_xK2zSHD?x9#S`&g-Ssj2fnX<26X+p+k5=5|0HbSBx3L+dgwHE=p=sl zIBE1(`qZzi+2icFlY*tw;+3`FWxTr%eCW7s*3e)Z@-Kp8wPrXO4V}M)0Ce!%ubVHaat;Z+}`CswWAj|JKVxgM%1^1($jt>1oC*%)U6$b?T{$bbGnjJ;)4RBikIKSAfvLwARCcXxM5 zhZrC&=+NCYlyryEtJ4B`?;Uz`+N1@>tGfO=GClg?>VpYI*!k| z1t+5Y^5E4F^N0nuwrs+LDx@AZLuqUwjLK)R3BK4fR~yV2Oi=MuK2E=e%J{(;YRMy< zEMmrR`kbl~5r6}Y#HW~yvG9&iWGOH>s}yo`a9`QIIA~kRZ?<*@pAZ?h7tqI2v2cfAG(ii8s|%-E zBSd<^0!cI=qfc3DlQ;nn=8Iv!0pDYt4(1Ms<75{h7>UJtLmV)U1%QqG*kHjYtozEN zSZ$6_xG2X;<(&XqM|Shxg;(?_E3)tLHMBhBl|lt%ucGn-wS}223^G&^NI1-2m5rNV zS=IMX)#5>_e`2zZ4FO^|x!jkoWn0XU1~46|m&s&;<-j5L(BkP2@=CZmYXMy07^dBZrOYghn9=Bvs?kJEm4 zOqDktD{=HRj+HD!E<=d8!^ylE{=U!WF`=KnaSIOZclEgOmkVCB+!P!sMED6eGpKCG z14T^})iAU^*VFqe_!&EwzBAE(%w87XHqM-QU08 zNB9wnh~o=voYh>5t=rca)p>_BU`&Kjo1Nn)c=`ib3l?{+3Wy>3ZMrRLwcBqzOQ6!~ z^6t;eL4Jqgg@{6$4CFcKqBos^6%U5X z5W(6u($nc%Lqx4j&nRjP>4C5lBw3q7l_MWQdFnj=w3*Oyl_e-hj}e;kzP#_aC`rkA zlVxOa-dwjXSsk(Kf#o~;7IeJwjwbm>4sR;8E%1Nt*|P^cja&j2T zQo~ZjP5E<>7L5IEgC1|QmYB!WWKm3&V-hB}@9lM0N-bNZtF8~%@vpRu@9;doZWj1}? zwWElr=I}3`yC%`^5n0&u7O_0-YMDtuIgU@~KHoTir%tZ=lQe6w{;p%W3I|R_yww7$ z{^L3|Ya|qvs=+%!$ksR3K?Ga$?;}Y5vpJ%yil1uYxL4*vUJk}|1TL_B{M<~`*e_zW zq7Fn#95>%rFqH{r(T!#}h8C{Ew&E#~EVhKO6?Q^$?9PXGv5^YXpXH}|Wki3-`KRRA zZkkUUwsJxuRi`UQ$CMB}QFz~7Hk3{(lYk*_Z5C8`tnq>@T59&uomoE*91g#Vd#sVy z*8(E2u{I-2plVpOe0YQoUKu<1%FZWr2TCV2vQe9?0Sr6kRyU0$=%<_fD;LJtgwF8i z`pkpvZ^a3dYtcOI2~-xz#dhI2icrc>ZcVZSqOhkm5f0MIf`j=<=Iz$6#kaPwE^bzu zdRd`_U@1{ZJ!Nb??Bh81FDG7FWZBeM!i?qmX(ho+vEMh{Cy!k1a2y+%DOAK~jaA2`qlZ2j)O z-jF5WC_G3;89Ha!E9K8=PQBd}Ao1YiSAlsHCz54+rd3{g%z0Volk&+L9(xZ%q%}sWXpUu!;U7lA`FesmziS zOLUi~=fc^nrH11rb4J*835HFB8(soTT$^IfknPNt_U+!M!uxpmE_`GJ>V*O2ktV0k zv}V>ZOf}Ohg2{n`+&yM=vJ^OEWK|?Ys1|JRKQ|pYaY;yJKEIh8n3TW7g9=%u*@k=* zjwuWh%1$OoVIay}60X#S5pj}J#mQ&zVgNPSmy3F&#|zf&Q6hU<6EK3GR09iD=RdNs6Qd(s)hp<8bg}3x~mP^56epLI|<#Kz<2p92DvUP zDR*BX&2;z`tvoW4hjcRdR`)rnxuXZ#L~Y*Uc1^Cx8up?=TR!!$D0Ng$Was;p*dt1^ zIMsnD@yDCd0t@XBYkd#WyrEf%vcA;{g<|-lt5n~WR-}##)EGXO%fR(p8 zQ;$heWCMHBN3&$pC_oHU56zI;-#cIJ@fG~}W>8lUnirILN*ow&rN5B9`PD%`QCDC%d-1gnUoKm>13nmrn#x-CK$s-_~9A% z8qkzdcmy$6n*LkZL(uyyX5T2(tz$GpV#pV7Ce)DYagj?$#uy`GO|@gZGQ>{IA#P}L zi&I}i=@_%qSSMs0j|uZw`8_>ra9VKWG8~yPcpX0Bm@IMuGoz5BxO{fKCFi5ej+>Km!5zHqbYKF%5tw6qqoYLJ=m3 zc2opoMA=t9l^& zs#)7R+lEihl|Q|Uftv+@Z$1hL%meOc1F`8qLOPI?4y2_685vi~0@AX9lw2SQ4J76R z@kK!FLm;{gh^ho4YJu=}!2cO=X9Bo22ly-lo-cqKYrxG{fbVO-{|ykl0fcM-_cnn0 zZ-MA{K*A=Fyai-!1BH7)#e1OfBhY>b^dA9(-vF?f2PRH{$rE4-)G;u51dMq3mKxZ$|-Uf6u0v(k=TM5u!j8Vr!pr-Q!mVotDVDsgloj1VV2JrqZ@NpCPv;}p5_837mm#8n7Sw>q_7+V9Vz3b%}8pP$|%2HURXfIun+O zbYiN+aJD7($^SSEW+J(+m!$Cibr^h<*Y@`uD^ZLlVASp4nc{x-o7ds>WBMo6yLgI+ zzf#$RLN6;w++sURpWao(p| zcG5WEdrRgj!IQ4UDn5zr2$pA^ar8>0k+}{HsmKlf%LuWIYYoJ1dI^p4xoj$3yV27WO$*uSTv*WIba75PERK+D z4h!m(pymP!>{s1d#vIy%c9r^&xM8eM`Q6_@Wl&ycL9kwRv@V9> zSG%9eNdAEB(>c_aKI&fl)*_!__>UWh>8+3OOhtYh?^qTLEag3~p3e%Uf38Sh)jV(V zx#E@S;CM^6gV;hfPd*B^AE;@9q_cVed~)}7JhZT15P z2XEjqc0Lx3$Vx-giwyqne&R~b-zj9xiv7)VyVpo15ARpTi$vRO)5>gU?CDm%hxBZO zynJa&@A*hcWMHeE?;Q>I$S<>t*$&ZLwp}W}RUcjZK(ZU(0mpu8xXC^8Xho{T!s3vz zza=!#-ss);R8$f5+Uj$0>qvt0$2#={2TrwgPR7+V9C|a2pSRL1!aa@6KN#9%Wie@W zK4y7}XQJZhmmYq4hb0&>doSFBoP=(k#aCtFR9u}@#lXk4%gHR$ZKuk7h1HLIyLjn9 zRCzIT)C4e^nkdi7eY(0@9rzeN_qod@U7J|VzCXlRqz)xM0)(s4oaN)F)WC}$Ji)gc zu(eVO+7S>YiAgS$bNPAPrg$k5YyTi&P8sY2UJgZv2OC>TJlIOBVy$I9>>0gS;dv_h ziWB8To+0>~jQ8+EdQi8TGY79`-NDPb&|lUsf@Jr{QuiWh6$dT(H#5cKRhn4(542#o zqC`PXE~F^+6YWi$c*Jjxahe~n@s^Us{4MWe58=DyP`O_*qxiyE*x$Bhc8?pvI2IC| zRM}eGYOi4@afZ*}xjSxW74f7h<+tpVvg$; zZYF97^u3qipXz(I>rC@gd9m++rm8(;Cu1*(i@b_77E8or(QqGBH+O}q8vE^pF zcadd=LQk`sT6Gm34;XrV7%-?+mZlCAJhVNkqFNyuX7?R%$;FN&R7Gmc1SzsoUn15% zhPW{>g>DPnlhb}pO)z^X&smQM)W`L7O;3d;xdrhvpykKAba-89&n8E&2^SHKQJF*>k(Ms;sT|8lo07?K^C$nH_(r z?I?F<>_u{=tNtW7G=JfoDMKWkHo zwX#5A;O=ApCu5$9QJIRAwsqmh`EikXBiEyjy!0CV(ShNtk5yLnNYjc07OEPa`Hd%K zp}sWUxJJ~)dCzOXVZ2w9v$HbYk&j?#UnN^y$p-V%AWj&8!Gq8 zNnd`cV8jyz$$wGFVa2mT?~%rliU~q|tL4fTi$=HqXb#?Z89x)8O!DSLgqV5oF_RVn z15m1|kshG#iTvt2ej_8?kX2EIbc8o9<`{M0SYpzOJj5e(p=dYu@N!Wjazx)CXvSAM zccO|Q(Yq~Kvwy&n=eH?W5Mr9F3(gI5aiY$YC$D4<7Qode?K?Ijr^pW%Mkdz?7oN`2 zr9xX_OuV{#lH&a3(sMe(fL&GDaSTv4%MQF-E=DDdKs!q>^vpO0&)cO6%nsQJXHIZQu0mf@*VuR~qN+h_6p6v{yS0 z28koOWL}*+|Exr6u!;13*>JcEva2t@MwIGol1gP|wHWwB8x3sJpn}VUK|Y9X;>R6s zqqFH+j(-kU3BauADC80%_BWC<4xL8ROT%adrE8_-O5|jdEeA~AG>sp)^<1`CT5OD{%OUQVyR zLPL$9R47a??JcOycke)Lfda7wU`!2@RNMNiovp2%Z7{Wl(eBO;sJ-1?Q2Tp(f6)d9 z2M6Hk879aEo&N3Z!QyBs>ec`n2uHz`_KSP67dxmq# zQvL+R-AA=rk*a=A?YzaeCaR<-EWAG&>(1YkuJ&5h?JQqKff36k>306%6z57e2CElM zD!k74Lp^Mt!Qn?*w<#K`>t=6sbcK>RCVEH-tJ~TUU&T75$Q0>_UBw-zYXxf`HGMx8 zn|Nzb~CqiLYIp{M@TCk=GByB)s=$EsVOT!I~zjjbQ+tQnwy(3;0rLW z-`d*V2IliSySuu2yTMF;-#~x=(idCH!$M3wUxbC zheZDzhLNLw{Q3nR1pfT}``0-pXmECk@%n-S>v7Pra1NZG1E(1MIR$HS#(%>4|Ac%; zVoeJb{yA`}R?kdmt(-__q0sef5y7Ae|of!UGdEE?a=R!hZ_@U#Xk!7qkons z|M|tMr}*o_fcq`Csrk23c&WYUb^pElE@kjPzEJ%Kvl6FHF%&{Q>-475TTY74v{@@C z2h}Ik6%WJxSZP+KcHYJ#+N2#6x9)F4Qjvyh-~!jpXH2s1$#O_wGo+#XpIF~@Xgx#< z!V2z(zbRmcP&#@wcXc&ebyZUh6>W754Q)+Ks83H{-w@35c7ri1 zYAC9s_J{tE?-lYv95H1C(Hd5?otv z);Bgb-hz)P@RLC+j;)Z$1xc)y6nJLrpi7ZyTv~Ya0eVszsx8{yevRdU3xlq*;USS90a^ge+ac*qy zG4u%*O1D6E^@DNbNd@?D@!5Qavdo^Iv=ylAMPDC^v(UEG%yqooKMgq#Y*yhV#Lmn8 zc3AnkFNnhOY~Qr(b#FYJMx91uR$>GT%6~f_`OR$_hx59SHLc(Kxzgp^`zgjJUX#^I z{E8P+%^wGwKRhiF=zp}oT;gswehb-h_^S5Sca-7%uz>#rM!+QPzdaBb1PTg@5$Fzp z!Xa>M2re#^hyX@R0wX2IBB#NjM&dJ4<8hPYiXjN(2(eXhv2?Jp46v}xVL0|sTn{L& z4-_u|iXRFk3WXs;VU(d*$WS;_2%IAr&Kn97yay8rgQ3Ll!z3TTq)|}WXsCQVR3Qnf zlnPVNhU*l-4IW~dmf<-y5_+@{yFVgztR=B4CAG++v5jH34d%DKEn)4ZY-X>kZEh@Q zYQbk>!EIu}X=2W1V#Z=*N@rlsXkfvhZ%MCfMW<~;tLZ?a;zXt3Mk(V-DSm_U+AS*H zJ2cFGNEBrdBUuD9UMwp-o(rBJ1Wy!(C5gb2#b8O|uoMYcniM=!4xXcgm9K_XsEJ*o zja8yGZBAWlNn3AA+vq^^$c6l|Ctcf3#!g?x-XMl2VXVVZoa2c?Q>o&!S@Mf$ zjkOZv*A-@OYb>{$9N)Klf9ebP`Yh~t81-{38g(`ib2%A%ITe37oe0b(1G6c>d>XKr z0nDdd&L&<=#rz(Ba5i%9*I>}e6TjpBTSq-NzI1th?(jHh^W1*yz1DbVwl-*_`oWW$ zgsz&*$91I@)eT^yAhoJLvV0_@e9E_M?ndc?N9mGV>9R}ds&mygP4rf6;k(@#N%k`1Eq(_r=V` z#oWdD^RwRzzfPb3_%U~UJon}6+`-4^d+(R__t)OX;064rleFZH9VAloHZvpQ^ zP~h|a2Y?AEf`2^&&?a_Jd$jQ=90%|K^(+2||R|m4; zy?3tyA0O9gO`Qs%%F%a2esJ(KL=GqEI%zB#PiVZvskq(@6Gntmgjo?-A`d%Qy;7@K1_LD(EjoFFYb~EwCBiBR98l zm`&5}hja1J9z@esezqj}%@XGn^&pR^to6p`HHk7DP1p9aNUnaOT3~T%sDnj>%hw@a z@zVCDYNSsCsroL&M_l5^+@}yGl*ns3{G5nxBL>pqwmBaQue+NOR7c(EqUn>W2v)>q zO$Kv+c~?3ekG3{KB;(NE(fn~D8yiJ=xcD5M@B#=w$LFMq3@6p}T1XOnD!mD-dWhbR zA)j2s@rG}xBqdnn3$KR@z5Jm^C5ZPDmzacUWt<>L(Ckh6VhY)wZN}LmN-cEqrbx6? z8u8H-D`AMoLTI&i^*Ds}OY|i6quKo#YFsyN7xK!1pKAQ`8Rh%RH=C68#Jzl%GMM!z zEf?4>TAimA=M(maqaIvrxDOR)W$kRuhhOJX zrVQlK2&pDoAL*(D9MODgie1WI=sgcegoSt)Yow4J_m)rH^oVHLRrC$O#(jj9YKO2Z z35h)tb(*yfJlW0=i0obO39Fp|4abTqU%%r%3Jt(}1H56jRTUndqOQ`XmNJqT zzUeyknMPEmsmKp~oeMSmOI3+|MQc^tVhAR96Io+ya684`n3+6Ve=5>{6}!kzxqeM{ zM!=T_YB_s*;5lmb(BAmDFJ~B@G6A#X#`ewR{-kkKKT^htL{cf3A6aQ zaXnfCX(M~P!qAanN$`kU=Z_|baDIqlPlYx38tsb2cCt!7t%*?@;ViaeS z+y35s*jnKnEzp^+Sf`K7;+ZqOaKdM$-gPbFz@vs+U)ywNr@elVp%r5iD@)5kMv0hZ zmy{XSGhnB|>V?C-$~qpisu2|8m8+;u7U%;yNzNC-VirNSgeT<+k6+W~rU>p3 z0(Ll@NvMK?)}{ogf;}x`u`k4~7e7rBi=8XRGD5@q53A%kZ) zL`C@YRZBWuer)1pjGjJ*yo?lJzjZ2J=={Y>K5D~9_yPMz#eHN?B*!r7LB2Y;qNQ7Rs|D z4p8p3(AkFDp_>u$Sc~O~L{4`JDQ>KA$Yl%>Q~S1@(TLnTqE)*20^M$-W`+Dw9sJRR z{HB*FhwYnH{7D~{+k@q=Uu@Ew3-OT9c)jPwQe`$)99HpB9>OO+o;Pnov-m-<8P@sr zU2bq1&sXzSdF(md_#K%~a-O2NDC_l($%7l&`zoDc)gx-c@y0`3|LmXGG7a&OfLzL+qQ$a)jtc zz)wv!esVIKy66(!(tG)VQ)9lQ~nXu=1m zp;vVVFqDsQq!{rV>1fJfVc*I0jo*oRbFVk$$vAOHAH9=J0U6L=~<-N&;o z7+K#uiZEfoGgU~zq19x`_jan2eSe0<+K`t+y@BiRu!InOgow6{pu`>dwx}{M)_5<~ z8Rx-=5mNo?P6o1Qa?$ZrP1ed>vBMo2)O8jvHr4fdizYNOAMuV(d-+h?{5<3&Qo#}YAySjo9Qz_Ym&{}xn@CYr>BgMOhuqQIX684i{hIdak_})p~whWSW9lF7D!SedUNhj)&gg z<^9-}IBr*GmeE=OU}!n6S{PuCtq#b{Q8dz$)7FqtQ1b*iU$JyRtQ!WWqo+r2rmt^qU|?=! zWNBhzWol{-GTyAL>}+g6>=WAW25bV2;DlP?{cSrYk~`mwx>_`z6(U}}&!{#{SgYEEp}eS+M|@p_F$!vMbQ zh8NBB{P!+zSg^k;R({^#Fw@m+hsrX^dGZ6vnY`YMtek8~{#EhzN$|Pm1)=qkQ&c$d zH4XvcR+pF*dfW&0!fh#`X}qKz0wWF{bH(mu=NHl)DZV!1cbM=V`{k|GTg;piULz2s zwe^_ds_X6&eX^y`pSEqMiF6(h{Q8#OYV!{5izRZ^{_~?9a3rWuIn3F8|i54c9S_li=f#Txp++5 zJ79NicMojKfn+JLA@>Or8TtFsg9dH1i4hb`hQY9r=s_VU#TA)n^?yHX`$^;RXDDJ! zcwb~&Edj5ZqY>O5YbB71-8j*1t5Qv2CDzRpS*p@QBN@jTdb0M$(b7uf`a0SBbH&Pn z)VotzPBUfN6!Vmm?KRJO)+`6Ys`03sqy$%=D!4agt0wO?4Xb>ZF18QwYs(E`g+H03 z6w#Xzh@Hwmw)S7ju&^WV%3JHunZm8M-uXx;D#+_nvWi3hpEigTMBpc62txfAE|rf) zP(w*jqM~!6qO+pH!y?zZg+VMLZ?+KEeE~2`$ZE~Yti!{oz)dg4O~=ng%gIH{%86v+ zL^5z9={b>fSEA)a(sI%uIjE@FKv7b%fWL!(0Yyv4MMuxgz{tzY!q3irjfY2EKtLLV zCW1GWtgME@f1ru+4$@8Cjc}+S*!z zY*ZHzp$4MTZrr%-=jR_77#tdU@4M6sPNd^l!>JfSu`E8hsn%IRhUP=JD(Q*`g>ds zs!i(4LeiTC_BUC#%7kO`_B4A0UGE(9uKwJ7=quIJ@&p>&q9482cJeLm$Z{e%|Bm&~ ze>qs7YkeN_1R{<}G~wfu5E3GYh{;JvC`n1F5oAaT3VJFkCR%xL<|(SisA=BO)^^d; zvoh2(F*Yr^XIY+$mZ2MS>SiHtY*5O=J z6Ga;_p5Gu4(i)Rx!PQP9#=P}frgdAh3liYod_%AgGXN?FAKl!~e$C{;BhHFYC(4Py;W zV@)m0&8(wquBUIIZ@_G6Xk=wqT-{XK_x_kib;%#O^gK< zmlPM56d#|QkdTs?l$xBJmXeZ@nwFWKo|T!I19G-=a?yEt`RM$@{DPu_!eS7sSXfk2 zR9sqITvq(B>|sec2l!J`S^=uGtg@`Uvb?;iqN2L8vbw6Orn;uKwzjUmz8>AW1*NoT zYwrNTdEH&zz1_Y2-F*W+eNTG&pY{$s1JyS$*!Kj~Q2$em2A&Q-c{coX5Tq%N3=WMB z4UY{EgN@{|(XsKd@qbWA)6*CVHyZj5Drolh?OX6L0sKbW-^YZrKzKHWl=$Uu*61%Q z@h>$D4T%$#*| z#8sl)ei;x@@nwV)VA-}-4Pvt_N4k~;e3(r%bXQ*G6W_9+)u)eBXEB~$eguCOWx>DW zVC4&&!>2^W1$`K9X`5zYIhn6|+2B}^N9OT`1p15#ifbsdpFim0!OQ01^Wz;q&K8zO zUeilYT`i||%UQgT8vUB!1787Ki~ZNJcffq=nC6EMYXs$-gPPxFM4u~1w{NIx2#pvu zMB0rtXJk-%5quS4b2{989#>1gZsXC6rO2$9$c(r^n=V(86I;ALV?Yd@YYw$}1%>t_GWlLo(Gg<4 z8A7&20){nwnsq#iO#@55u-pkIx+uqUJ@w(4-=bO&1w_V*(zHaV*?jCnNJpDbr z{Jp#byu1UwZv@`(2?FJFGx*l+(7XQkgMuSM!(zhk$Dtw;qoR}J;?t6nGE!2r(=&22 zv(VYu1-W@e==_HTg=NLX;B8f1UQt(7)lgI0R9n|vSO2)a;c-J_OJieeQ&U?rhG5$9 zxTUMLwY#mY2i4x*+uqUJ(b4yR)Y%7eN<05oT?1YJSKZxD{#8%U)4%HNeFmzp57c0P z|Iom|(7==7Cr?J6J{uhz8Xq2>7##%^wUs#x;^CKpv46>rYdJ}Vt{sr4#AtBE|Y8Hl@g#l-s zqoM2|=pSzlVunW<@-dYh`3Hy3p2v7z)IOM8v^ZqXLGGGrjJ{h4r}IQAgMu!W%+U^& za(so&h@_}n66h^pbQ#ek@1hjME~a+%wIukkdYn>-}(A)pUYh4|;b(`%YWd zsI0|ig?bRpZ-zuKv+c-oNNUGV_cuF~w~ISRM{7Qf>L-1cm33|2>({dD;Cy@Ho+)-~ zhOgB`{L9@wJ>M6T&gQoN-ceu~Zv@doM|fe4WDkDA(E~4Vs6t*|9!O{g$!{R@{NG6f zV6g>W;Atv&fxL5YiU4@x_3quf?d@&wqy5X-1Z#o6A1#=*Y&XfHg=RbD1!dnrdq9h_ z7tsuGFW6)BW-}HYDr09BWF!5}ExNK@iEu4h!B3&rC<*mB4D~O6OeBU zw|V5ye@s9r$kcAU6~L)O6=GKGR=*VUIFCDW%8*OH4<&9mlJLC7y{T=QVv@Cd)8YI~ zbf3pvq*h|CKiImw{>STwOPRXlgVuEn(C|=^9BxfV=D6Ftt*`ft8w8|8_wc`^J(>ed zL)mO(^SCYUswK9`Kl=LXNUcK1hZFzpZ;KXzA;LDf+A$sbObrUNaB3@RBlSoPPo~}) zZ0@(t9yBOa>62KR7;~1ISc<|A6W7C8eoHb_o2hS^P@3vP$F!`KBV))6y;}1VZ|L}8 zhmI-uy``{>;AYe&B&X4^e{a#67iSngVVj_zCFzpLZ3uPOLKsHIMkgP}y-2k=oy6z< zpaR`bzf|#Kx^AleZQCx$0vemuFTq>u#Qq}qI)x?brHmzog;!)zN~1S#Y-BMDvX-i_ z8m*CQVLpU!W2UU_M!{V3!hzaK!1+yaagYR?{4ncK>0M0$l?n%wfjoCDE!l6>nb#*a zu#I9j44lW3wX|7jY=S;~G`SH#y!N5Ro>ud7>!hsv&9+%dJEXn~ri86zGR`Fb2}w|9QZ({JR{TP@J5c0s;c!;^K;min_YGW@cvK01z)P zFK~!QaBy%~SQrWgM(?Blj_CkrbmZjZfMYpIOH08~8{oG;IAjBK8Gy^Uudff>X@I2v z|6=|}F%ug8Uf_5Q@B)`QI9}u5)ef%nmv}ERU}SKKx3`ucpxJ{ZkF(#Ey29`OJqSYL z5(DSB!&*J)mb=*0+4suiQJU7sNM1F~o-Xms9${y;xGY~?r+j5Uc8)YkpAljkXST7- zwgd`N1$v=dPH5k)E{06sdmw*7 zbp~~w*3$z*a9S`cv(KP0ecE`++GO^Ko51uY3_0;!3 zVMJ!t64B>tF-}q@BO0mcxltX`DXtIh&!|73KtbVhDgD#fJZ0Lm^%Cj?GUjYpo<$o7 zM(x~=T6H%*gx@HEc)kbPUIf{yO2)Dg7eoFf)-@WRTiW`yJ@57&j3kY92sEuo4V?V!on_atYRrsC9Lz9o6tmWeTM>50ji#Or(F{r?kL|*F9m)xcrf;s$QRB>p1THq8N zrdkzIK@_ZWE*OzYhNejpmp}c~XD>4TrT@rq@AkmSi+*d%pZkq>48DK)^z|A455l8C ztauLJA-q4yxuodl;7W%2buYrOZxUTiy}`RGS9&1i7~Tg8Bo|YlhDEQ{iU}l%^WK)= zwvyn|lH`(><`R+N6qIJ?m1O0TVCE2GViN^x1$w4yvx(BAD`$U0dYA2Nev-s z0}&bOF)?L333V4KO&0>$Nk-dFPS;AqRL96s#KxP>FB~Q;eoI`+O;XlTTFzER-bz-% zLQc_KLCH)>#Z*Pj6s%1&v@9^Si9V(_F)_PtY3*k3;O*pm)79PA!}Bg!fBY>$!208= z1PS!H36>y1H*bMeNXQ-Ed#Jnq;b0|lFD&~0gSd#ugqT=x3y_wSoRN}}nVOoFnwFiG z29_i_8JU=>Br7{VC#L|7E-oxAEq(}AB~|6+HIK}pS$v+iJ z6Q)9W)ZG5KxxJ;iqqVuSy}7fasjIW8tE;KI3)R%!-PF_F45}BSM}O7V{rE~PecgZ6 z+SlFIk5T)TI{Ldi1~BUUA9X$HzEV%ulOB-8j?q(4y*;3w_4N++_hHcNPoItsVagV; zxdDzZu$Y^j#q=-cpJVJK&lgq}7BTv#V0rQC<;yp3-n_jkSio=9-QC^y;GCGNO*Ysj z!ywqN`0E(!+TViZpHjsShE0j-m=UA!W-;|j{>PMTD{$vPDP3#ZCQ8U&gXePRZF(p< z71P2=JFD_C3!SWcB^(B!Aj*F_w@lSQ_q+>JKu#V5YHED!O-gH`T zI5|*Ki&1~OBCBmSX%d1H^j(Bxm;NUFkAus1akd)OfL5-yMT2q$4V6*Bi`uDp)|=Z6 zCO6Cy9Ck;)35=PDy*HLh6O)-v14l@KSWXr=3WTygfINm+Lx>^q84#Q%2+lABdkKR5 z7J~I20{;Sme}}++LSSbQ=s5&>0fAmZKzky{w*DUxK>!2<0AK(2kJvZ>J|RFv4Um$5 zr>9<0Wvlh%O^6k`Q!HxRET%OeDlsJ@HX|a+@&5-Lg1)u^r$KLuW3lpyPKaVS7Jtb| zJrYu_QZlue(HV*vimFknns+sIJ#@j&sELswrZZ{@MNJNm&kap2KATy6I`?Ye`Fj82 zR@c&g>(a;O<-_{rqnhR8%B3G=OFv7NPK&@W`{M8X#q+#{^W24toadLRvzIZWm#H(C zx$~F#3qau_P`m^@Tn0*)fyxD-W*TT11Dc-!Ej>U>C(zmkv^@s8n}MMQV5SaOr~{Vk z0n}O}u-*dfbO0ZFfUg6<(J*i{2^`GIDnT{lx4xbSJpm zRkKWd%LWI7&z%&K7*Fs~7a8;L*)V2?00hmllPs>W(QCav6^`L@jdU)Dq;$5GT6!Qb zVDR}nSyI`~sdE-X?&r~r8gGj-n&TBRg``&AY!31%-uiPf_NL{Uvuu8l-0mmVJ5d&; z;g>LKePpR?^rzvU`C54!F~q;gfBo?6ePoobAk-K=ZCk7xeQ2#Efl9I7*qK$>sz?*G zD{?Qo_GgRZ4g0BgGCG}ppm@IKcJgPYYx44KBRe6ZrSvIpJ0`v!7RojK6jx;E{k~Rj z^g2z3{Jz|%LZ6(5{sxQu>2%nD=U0WZu&r&XTAR=r8Lf2q*690ur4w@ra`|%xuf;p; zi`guy*S2p$oVu)MN@$U%hQ7m#=?JUKY7DjY`)hJqvEa6&i?hX{v=m7GF|nnsG2 zMxBw-oLR`4PRWTy?iPze7?)&>AYZBiD_Vo0+>ox$hOX6%bpRzWlq@}xtJ+th(^#t) z-KFI^sHQ$43+~7IGbU9g5t6;UB`F zU!agL4ESHnnZASx9;C<}78-pny8b!W>+oLafphFfo7{cdvX4#;Up!ln{d<3gJv)sY zK8qdul{ESzbK-mP($A*d-yNUMdq1B)`*JaU_gKNFIyr^Z<{qhe3gm zH(KBrPKT=G3$VUhtC1|*e!y}tmN*4Ye6OpEjvdmCq|%PsBxmIqdN6gDPyfBBjcDIp z_SY%2G&L*FBH)Do87sr@IGc0hc_V|ji%sOha7Gg4Gi_(`#&^&6A9?mR+e2c1K^6UB#EIcZ( zZK6W@nU|I6-e#<1aRL>Q6$2hMWhN^gMM|dz)>v<5si1Gli$Z!GaxXo4O>*N&*Mhpuic`F@m9b?cfj*x2 zD-}C^1QQOWU#ks{VmS697CQF;rAZGPQu&~4{92S3FE0wRS7jeGT~$*!Jmikn?h`T2 zDe3aNQ45rm@P2CQcyZ%XvwID#4USTsjxjbr$qjCg&@cGIR2)otLxIsu=GcUG$}H?2 z2n6LInS{%W@h+I(o5QZnuIUe5Em4Hky>HWsgjBX3B!B8Z8t4Bya3V^zgNkERj2Ml( ztwC>!6KEQft073>Hbe@iN{%H6vxTTr7l*10C1LaT?O2H>xyMr@kePAaJ{{$8%HATc~fTs6Zk1QoBnm+VZ~`5!QG#%9S4+6eLx&qa%i(Q2Q=TI;`em%_;w9&7$l6 z?=K~Rb+Kgw?{{L)ilx@0-WC6v^zVjtFQ!O+Io-+7dO$|!ub0gj?S>Pv=EbyHAlmX%FLs3W1IjPJO{;=`n;C^w7 zCS51Qwb@pQ-n|xeSH>CNz^jmO7>8Q~e~aK6OqGZL5z8S^PT(2xte6K82T19#!dw#u znPHg;xUX1M)hE>{Wf!>&Ikr)R=UN)9Oy2|<7@SESBS$&5eWR$SS@7>fjh3!tB>#yf zHh{bw6`VFswVq8Ti{{Z{N+U}S=-6cNKNzHIJ4&`6V556tt;I}79%mp>LH)x^Lv`FQ zQ7UGeg40Yk#LezQwHM`ZA}qX@-%mGcD}GvE!n%M<5WTuHuB&e zUD0imB)_I@_T>Z}#oJ`)ULr33`}H$Oy6-vlD^4PIAM`w6?dW=jDsH<2RZYqE!&kwSi48hkR`f&90^BlMAEp%w#R@)Pd9uDK(Bp?KMt=eV*yY#Gbg693 zvR}%xNp*Tn`5NBM#)lrD1W0A(ZyYZs90z#O1Q*QS`{?jt&TFjFmHlvIfLL9t z!NgV3ub7zAOP=4`FuL!g`j@&V=dY=yU`hWnPHaxa>!Bvr)F;VZ;XG2YwuVx#%}V-r zYZgE{szOk zwyaTgCK*Z!NT>J@rm3AJn~YH8G2-QRnbI+sx^*tH*IE_k96N znkmi1uAG*H)C$?>)2j(_h^AyJpIax>+P-;hk8nFb+PQyNU53p<1F@$D2_1eqLa6Gvn7lsLtC=O{>P4*+-rueDiiClx5}EH*bseFMp&qs~yXA zM~O_oju54(mlAAnYos&idy(_ZQ{zDMOlRe^q`UvEL&}4_uvz!psN6Q>Qx7dyI%m2U zKML3l8}0bzZ6IPfJ*08h;-uEEzujMa!l5Dj;FFIzzS+wEN8DKj#o4@lnt>VI-Q6uX zgkXcaySqamH~|KCcL?qhG2$}!^f=+hw=KJ3Ie+Ro&TeVf&)dw8SaL`ZR z{oK>n_3LHb;#RxwvWWH8tiX2V3bWbR!Zq_vCXt=A<#&?*2yJQNDtKYhZafhQ<>_R> z_?hyuQ}0ETUvp>#3p6Y4-9`pw=6fs3dT@x7OB!=Lv>@fMR zC`GomFP7G`JM|;z@o^gttD_f5^&*t)X$M)Yqn~K{BJ$PKE_PDKAd~84tkKgR@l40C z;PhqU+o!M8Se>I#In}GwcTfAwYMtYH(^r`vpANW^Iw6yGsy}nrpALm)I;S11Lg4QL zKwd|31OcXSg!rJa1$=wf)}Ft+SLbr7OHUtKX(8x)Mk^+B6_}p?DR19k>c2KT{p^^~KN5WKJK~nblr&=^S}xw!Hn}Aa0LB z%-T!Ri3Z^^#BV|&3@CCf>3FxbM?)sbQ$$D*mmUS7QbZI&h(sX{WFm&^+WkBdg_bOR zl#+A%l?K}{C&1!3b~wP(>&@c|S@=&qy(6C)qwMD7t!oj0{;uBVo}l1pBx+$Lr9?b9 zTI6RsxoFruGw8(tD>Da3_9%*&D>*nRTpW$y0t`XKcdJ8o4H1T4=~JZM_ULc|!;5`h zB2cFdZn~B_-iQi183{@tlKPqjCwK)pZVx(-!b7qT;^w9x?L+XSrXX;Gqm~GH?nOF9 zqIeq$LMwvTGY>SP1}v8#2)RSh_1-g`%E)!sl8%ZbyK-C1? zfXoF^Gl$ZTG9Pn$>o&p-(qQXKd4hToh_(I2n7BZ2o~OTXBxbQJE8z*K;bh=~m60J= zm4Wzk9_BJjbY{r_B=soxOAt{N z{J0(t6uA*WM?H8_PL!J%4g(t~cI_<>q4q>c_NANiMRg+)y7X3R^kwBj((8p&n8hM$ zg!lBJW$A~{7$h{v2H_OJdt!4~fukjm{HS}82;d?%xPem5fz{EpqjJ)v`mvS7@wM_Y zL&)%z`ba%Yp6KSl9wO4Y6)X}spa(W0ei6JHQBZ+JY>W@+Rj_ymvnLZRBFPRUVo4rX zrwD<~B4MQ}fi>A@Q4lGIS*CXxtJD{`$?PfC=<7w~%hn6*LiV(5Oz`Zbh(VIlX@nP9 z!P2^b&@?A1x$#R>MlidR)FZ<;GRK{Pak}h1Ex|};ZU{Ow$x0WVZ0h86Dctx%K@vXD zq;kPzRs|%rWdzSz5I&q|R|f>avk3Ic0Lf1i$fo3p)$dldwL*}>IhwwEN`OBfWZt? zg|{5wEEDT2?qdiS4I%v?p{hJCej|bsH6EcGt!#K){R(ca5K>+x03y;G<^;PXAcxzV zm5Dy<%af8boRtwtB2_-(Sw0fGgzRYy2T0Y=eR~Y2IE!UG3naddI{OtSrD2GJDkE#V+GU~AW=bq zftT1re$hGl{wX}zlYai=SvfkZ2!j4hBF8vOA^EE$qFfreyeS#ZNCnPJ1vLuN2KV_0 z?$K}$`4%Wrd3rIqF+h6*LbsE5bE&@fF@=EfLT=v_hlh9C;T2l}!kOCyKO5|$%rTT-!)XM~D z2#wW&9Nf6&zNJIer35%|?!PLWcWGa)fk@n9fEqOi?i_*!*eZ(UUg{vz(QqtvAf0<{ z6f(R;V~}xH`7|#c%X~T{2Tqg=iQI#PnizPLO`&%WsiDTfbBYE4ihw_mJgGWE2zHWz z-1LIJfLB~d&V5|%dJQb|2-=M_qRCaL)G-D{aOunSpz50E;QEt?dd>$pWuHcYvc^+G zq+eaQ2I@e9M@ap+-)>Z-mpULLn%yfHK+{B%!L4e;vq zYj_EX-Cd4ZhDY4@;h?TfvT90K?}$BgOped8%1wc1x6hQrMm%DTM-XmIpl$G0Protr zZ}tTVXT!T%rm4$eOVaObcFQT5Rh;qlaXBA%$Jz) z)fi5B@}e#Q)*Wn_S#KVVFzRIZ24a9!nh&f^1^~gqi_UuJ=x1`cBe9Fl>{fMO+J35eNJG7WPYnE|q*BR?3>X>ohm@GLu-v%SV1(_!! z1R&$0e1rg!BZNXC^FM}AAcu+Fg<*5SA#nk_(SpQ;$Ty(79$(k6!jUO%41k}>x*@XE z5jsMEqzU*bC0rs2&q)of@nziD5{iHhgncr&uT_CwcDT$b{40J@)Ed>^>L3|)z^sPv zp3|p$LC+OE9AEuFCyP)yiBB>F&&K2~QxTz*%Ih5oBI-XZYtRuFYidsn}ZvGcv|>n=No3?Ihs*eJLn_%EpgvH^qg zd4r1GgUTC&s!xOJ0m5;N_ENSEUIN-hzw8l~^!f!X8)VhcGEL=|jk`R}cx4sVJ#EtQ z4V*+|j03bC0&H6|Oof#l+{&E9pRD7ThD8?~TW{r{F2+ObtS<5qf%?dTG?^Fn*kh|fJSy@ z#R`|x!(scyevC3RWbetG_Yk96XS={~FWN}!0KM_e0R2aT@ji5=+3v~gOs8<~$p~fJ zS{aoWhf^(O&ez>!N^8{Bh2bH z89#EvI30ZE^n1fZ;$T)a(`JxqEJ4?HsN3|>)=JaPQb%@{qzJ7gvCdn+b8w@Hdaj%0y`=EnK6h$0OV!S3YH=lS@e{)l`pr~T;-OvQ z)En1hX3nXEgA-2`#TQ$0UA9NqLo;l3a~D&`6sE^%&W60!%T;2t9Rd?|>~`c^M@@&v z{rQ%e&JYcV>oNF~-KolMPsM`9rc6Y@jW zjaw)B6^G6gqd!G|yu&I(7b%a#?rS?y$~o zp>BhKQoEILHF0x)aB8?x)a17q^fc+|fxc{ZRB-=AvD!0b+=`!0U_F7bt^jXDCCBA#_J!mC-lfMf*oW&D60;MK3Y zA~QC1Y6Onpa`cpY-dXt0OJMcqfa2c|mi}+J!qE$Wg@Ac|Pgqh8M@`U*8M0qfBSTx(j)B>a?X-r5ct zDsr*Id9L|iFEEL`V97))O`YzEBPkGwqlSb_&1MY$o8_K~i8>P>DqEL}+_0+7#T=`o2?FgW21zW+xS2mB&N|VM zfvM?)8C|)!q_NFv8x@!e!+8{0D$98KS^9;GP)duEImO22YibdPFefp?DHb)GqVa3f z*hI(XYa0r`?7W4(t~-gfM}x%RoXWGQ!cs>ZkY3#ljByY_$WcY`X(~{0 zq>c?~(rJo`Df?SQQ{@-YeGHne4QpO_%66aPvG=Vmul;hkC$1EoJ$-NR(1SU4nLG(>8`T(U|xb(EUR%vuWf`qhB1 zTZwKcfmlLidQeps;%|HVzUZ)6iQ{NeXyEd^o0{xPn+!eMPMclBg*2L<{+^w-?_LkT zw960MYqTqbKoN!Qi=&7cyX;Go5J{8rvuwK@Dhnh11tn}s`lhSWUXsy3Tsyy2yzL13 zKK$rPc)4XXU35oyvg+rc>!@YIG`{=NeZ~>jt^Dftqw5$`CAs40&+o6UU>RJut{?Dy zYFde@hMq1b*yKdL7Sp~O|M--!*X;pZ4{#jrNqLwYoGNB5-HtSlGWoF*w!FczqbDck zcM!vxPxC1X3Dy7GV~!~6IwXmzrm)2`iSn`k*Sk-5XA!?XF(0Q1L;P-*E1#Ywo`)aD z;hWPx-1pd3Zj~`0@9)wiQBQfrsA zkNw($B<{H)>T}Cz5wf5B1l9>m+}L7{Qt=>PgHA`J$I!^HfNeriU_;wYP=U0jg%-+A zo1#NfEWBh2j*)o|IriC) zWY9Kb5>oOI{{`WcZ?h2Vk0&m6^u8Z9lP_*dkcLU)57H#l@$$}H~qvc}g} z8zbti7%0DG_g_?NCWhl%QhRkyygq2otVHOG2!-l@k~SPkhkKZdNgre6#fcQzIW=Mg zc)p4aXUr)~PxBMbEWOB1O*lKIySS1cJ>GN;@TRZi7$f;ea5V>s656*BIbdOVEXU2h zD&4+_&FST^WmPUH%Y-LeolMeh=G{$WB)VY)w~nH`J67m7e)uv)82HoY1N%3&FEMkU z`Fb?WQVA@fjmLSbBZt=k# z%2Y;@L0yeMK)0kOq?VG#ardR~XP2f)r0(F>f)u$4@d7L`ZOqYK&gsb3^7aMz?5{M< zTd>820Gze~{b=zIgW39ryi4?#)`(K2FyLU0BYQwKp1O#H-BBm{9$?mT1}sV~HfzlH zs3(IskHR~naPz{=VHZs0d$Aiq|-;K&CdNiOK+9;!EP$9#4aX-l@#U`v=YbdUxh{_51 z6h@?wQA0eI)`LRJ{tBB-mPPpOTK-NiQ8v!(&h7&Ce90jbb03PBpweOrFyg^{^Xl2A zL9KwR!WL^b<`-g4kL=QkN)vST8@(U=h)6|dGKv5T*KEpL=2yuRZ3mM%1Xy`Awp{Nf zg3a#vMfU_~c{;k+_iy_|3Ptp8 z@t`X-j`ejp$V2PRR$lG)^N%RV(}6hTVfnX{2|tA#*x#@|NBjLPQf~_l$F)WIiDK>J z&(8?xy&%4KB9^i6d=d>;q=BJKDAv7bdA;t2sL0awzyMNjVNR^UUYz}6Y-<{b`Cjjd zA%hQTrBD|gfin});O9lfT4Gj?r>~zspjI#B_K~)L$-2QLw0$%!WE-hqW7KL7Tqf#; z-ge=-dfMs)!#+>VazRUIb@LuLg@*&byOi9zpR>E1lD?lChI?R zq?G0$)dm~V)(Uw_313$+(Q`mBl>3R+z|`~u5>FUr!UH1815-JY$*H|B-b;`?)o>`& z(6CCg1~BoR^@?;4$QesZJ@s)uiGzVd4a9Y%!hM-Fy(;7^QUQa?XI1RolF(O!`?(C7 z=u$eyGRo{j($X>po{~bw1M0xxdbnDS_XDN&ed6790Ov|2&!L%AX?;k%tl4UeyEurMTn!n}CDO;Ytlc6Vtmg9M^rugOFl<$=Vn36QA&9D+Wih zN=oIem0YFeK8kRD)>f{{o`|y?R&yRm=^xN88{$`<92%S~EtBm5Dp_jRdc2pV2iDe1 zPR{3{b`SPJ=kV*~ua*6!*}jBNt)x$_mQAg-Osx-2Z7lo~PklYL4OIOKR$14anq3$s zx>l6LADJzIOb&ReN_Q(;v8yh1E4|SkvBR%+Z<#)&r#w8K9G;X_(^fi+C$|rmsWn&R z2CAH~Pj@s+`fW@!h^Usak1!~!+>@)oZzwkc)%Kd?`sf+I?kiGUClFqXW0SL~@iAGa zD?8^&y?lDFyQe%SP2VexDpoda#3%V^T#d|LiD{w^IgFph4n%Ekmid7{36zd zQ~WKhL4P)lgE0W&=;aMpV;-W#p<+_TjuagSR|&ZM#D8#&X_TJqzN`>1a35cT8!8zs|)EY z2!(2kdr36;YY3?fBB*HCJ}HA*H2oH&#Y8j-__e4gzP$9B<&jxrJ<#MW)>-Ns`Y$97FpDSM9h!2(D6k~TkS8N8OzN->Bs~wR&_}2 zU4P+onNuN{R`r_dYf%n+ug>o>ZDFmx=%|BdqvvBSBRkbU9#9$2TIcazQ=x8I&t$?4 z+A71CFDI>{OY5T1A3oyiwJhYNdDY#2(XA{+F&ClJyNJ#f95}VCtR;}KBs(~?^rU7C zIap!fUk>Hhm+V=Rx>>5o)?HCc7&nVG%r%j%g~x}NkTm@%Hz;0jQWZq;nx zS1%G>_S0F?Y+d!oSaI^yE!&h0BAB;+GwXNs`KTk@tbH5yDao=E{Eu>h~XPeTMztfF``)9up-bo>t3OnTK?p+0G*lC zo?V=$+tiY5l}2wh8sMlcJQ!b)S@9xYNdw8b)tR(mXpBBH`(vnc49-txNcNdPU=OQ| zO#JZI^Kmbb`ijkpptSK@?TwS}5#IBasr1>?z%8phV-e7TLyPhE&Gk3=t7n_)T>NZf z1llW$TXTU!A~zd7UOI94t9tJzcqmMDo)nv1HaR%92kLZLO!}SzRZSVzRp>V!_$ODN zHN_$fpem+&2}8fj%n`jen9B7bCh_|8n~M3MonH~U+xg0^8IuBMt6z=vC(nnlyeDgQ zbmTHD9s-R9GK}J7CfpXbJ4AJR6Sn!w=ZKeNwB9Q<$jCmGZ~B)RZ|KZ#*FmMo%XjmK zbin-Tg6Qi2&?*6=p&a@4h_*UD<_I`p!^V24L&t>rV3m4HpD##>nNbE3*|X_4wa%Hj zN|^cOKxc|HQ%Z?po<&TuUuUWHT!X5@fJA25o_(+{qOZN&)F^Nd@pdC~bBO1?ntZ^F zz1LdN&@NY-saN2PGNKI>efh@IFeO3mF7S)g{vMpJsfvL95Js(f#V*^Y>BAlijry4s z&>&&v!QA-TV*J1(#-TYxmjht3Px`b%OSsbOr7{lMf`*UdKPfrtusFI(Y}IXK#!TQuL2 zRE24W>}_IlV}8bONtvMQN?`X!)};hdC0s zQ7yKW_@RZ}`Qk!_F5#x(Jj_)Rsox0NYsH^Cklxchx9*Bqvg5Z{tWVyaUI^LRoyRnZ zk=8i^FxquZ~ zb2<^{__t!h@ototHqSgL7S4-;f5XJUi`G%G^Ks~0n}WreDFQ_R-Bko3E|;w zr1pjPG$84Gho5tBLvQT6DJ7zV1mP}_$k}KKY*?TP(aLat_i4NNT+?Ptb^X)#v1z9{ z)z@FdW^6fss4p$k$jnQ$p0856_=24484mYkzjqsdJrVgn#;(lpLzjVSuO8~i#AtAg zc#6!eo#b_*Rp6npEJg5pzoPCsvF*f`V>kd~-9lg;nd*!dahtk|=o?+=^xn{{_oA}{=2~Ifl`z$h$j$v-t`K@x0_tkf+4w z%NJ%>K%$@Ugcnq8l5Z$nfAze^Ro&T|`pGM1dZePs5#(qH72kia%T}#zvY+p{VO=zdgHm@Go(VScgNFe!zde$xXQ2S^VWT4vVZkz}eoo za&>dF^KsA8zP`~Ah_ni59oAYt=NEK|tM?*F@_Iq}m2cZ!tlnmh-*jbb^B&}5RA`=N zW^^BPlJrDP&ZCkbPsqGg7vUl@K4^AU{R3mFg zQU2l(aE{9QQO_d@=U$Y6`{Hl=PbPldOy9#sAbu5}_Xl6BUwrcEojTSKdny;$6??t4 z*=~%U=`XyrM$+#5!DYV+YkrXF&XdY9Q!l`pk!4=*2<&Xdfi=mRd2|Bi^oM+yXs4oW~FAG;|=T5d&BlOCh{>YHriDtBdHutx9n>zGIljC zr?)QpZEoM@>zsaZ8a9!F1s3Cez1ZmuZ6F_~aK5|HYm6r1bv+Ye*)C1Ndkl2G=drDh zr9f)OVFU;xBC`Jrf5k$0d3i-dM5LsoVC0vMj*g|J2=H})$m{7K}^N(7hw--iu!N9IRZsGqJFwP4$U<~)v)YQz( z%e(1f&(6m8Er@t0H9G{bK?A2mTtdMCtkq ze~En;h14EZ!Q&xgd%8N9?rM|{W3eAK-c?zY%8xP#t(3&2mdcuch{nT{iBqjJ&vO6T z7C-+LRh~_zQNC{%2t%)Q^Y*a=Y(_BJ9OHsDC%gEUsuI^fWlZ9ZV@}Y$y-P469Uq|) zTPnfB9c;b)%0)8b8X6XvKvSDTR=+ohm_YW44)VC7@zvX^i$4Hr3?LYkO`ueFoGs!G zA4yIsa{ge_JfMj8L(^LVXKNtp{^KZ!c}IS{jsRp=M1C}AEB_u5m-*ZRhXhkoKP3#i zeA5PmC9a(khEKif4I=zrEEVp7QNl}v!G9;Shnr|pj9{<1zw;0KWlkXZ1UHW*fezF1 z$!lJ_Nnr>Z{5%(nny<-n;1qsds=B+jjIAY# zLYbxCQKc|T6R2$vt{SO`-Q(bkm;++*gs+2TGU;0NhA^r7Zw4?<>+}%tMZ1^Fa?@Gc zN<&c&u|X9H2RnlV;`DysawM#yhaw?Ef%qW%M;-7Uc8awg#GmoHzkYWjd=5ZH2r;fJu*2$KxJ_~pN=5k>_4^;yGcTbOO& zUvUnMw*7xRApeg)@BjAW{(pZzBJ3ZA;o)iEOkM<-!y!#0lLG|1df(cc<@O0kiZDJ4 zpS2C+m;o$l9KUEF-@^s9|G>&0Sj%hvz{=)EZ_Ybx$4Rp+`h%6&(h@QmReICm^-h%V zm~6#zL*5V?ld`DXMN%jeAL+Zc*PD9Ef@kaw`vPj#T zWcKiF?(WuO^>df@;wVFCB8j=Y_lt?0kUQy|K0gat`yqyU4C9-oTNcajWytIrn(ZSm zo7j7TO`Qx7Np<6X-!p+oBWM|iNW64L^m8qQ^id(GJ#UND89Hy@nND}<*w1`7-*H$``(5s+{?xTo+kpmlm43SRi*uda<*wYOgFy8N9iXQfK!$A7K z5BOi5$lnJXwiN#+7N>}mlRCsezBx|8Qr2M$du*KnAv!RgJ2A{)}AJ}*ih^`qmKUDLF3G~j-MJa zph`KCCavFp9*HJqD(CcA&rp4U@L(J$ep`0SS0f?&Xyw@EqjPB_=iKQrnr6{LK}sURP5H@;9o zC_;|Vl$pqBklQXdN;~+7%Bn{OCqIVTX2eWRTe*1GOGUrf#ISwN-p2e?1#yeu?B(#D zv6%NLy|KnVlS~Hn8>AhA^i7|`*b5eYgD^u=hf2L}o#I`*0v!u-{G>%0vMB9DlmeqU z8=5?mT#J!40=0gxBOargv6opPKDOhFy1Cvb)mnK$tS43BC^9G2Ra^LuHSgPU=WE#N zhgnbM8mAqdYQYS}S+xKFnRV~K3kdY*Fr*9j1dj}e`r`xpKTfX&ulK9(Kdpb7*qB(| zT7{)0z`P89$G^1$Rx)7RC`>Wa-iHK8f&Y^=OZmsJh5&^_%i5MiV9bJ`0zeRS!Ybpj zowEOqnEfxK@mLzoL)|mh!7D|LlB@o8zsgN=0azh&PID z?^i$Af2lF4buSM?WLq82S8A`{{OD^^-+e*ty7gZWk<-d2H0&@JgN~-JBgu41^~{9t z55}^^c%8N;Ng9kgSYO3as&us+7qhb!nof1Ko-PyU2xMcB{zDNZ=_-Wy*l+fRp;4JG zU%lQNO=B~wZ{bltOgj!{O~dp@%_`yq;%ABNBKTzW>c9(So$n&N%IXFH(AtC00q_7& z=U3b(x-^b3GDu|{x$yVyU*8{p^dh}@y6BJUeswv@)bMmQDM;0QIW70%`FcSQOXPaV zuHpH1LoF%r*G|+6=v@;;4SIi6x!rSr(*6VbIQjwW_tW*Vnb_#adc$w%QxYfSHypb8 z1C*&3p49CvP^1W+Xr&v-a}k2wO$nuy??Y9*u)6d9e0^gC*Zww|mAupgi5k4nWHF}C=m6!zMHI0FdI@%v{2(pqWwg9<32xTt zAmam*|4rL~ZDIc&Q@-QC zv`GI9n0Dpw`0y%|4)Bi}r0Zd>$g2!-q~U(wNY(a_l4SW%JaS1DR!Xq;E^8$Ph54<*>Wj??clc^SVkxF z#Vuu-DA3e+4O_Fd_P}(bU#WzfEkn)6jfq31hT5E3DUn4ojAnwasN~OWh*lNfl=;m2hz&()Ivi9pjQBZ;`0o0bg)kFp)Gsy-nY{MY zmLm!Qw674BHVw&=+L&v|x&&kc^hjG-Aj2yZaTYiuBrM*ZawK7MA=VVX`bwi503|8I zmX1P8yY9gjV1sZ98Dx6nH{ewoQsUW>$O#y<4WT^F`%iDx{@z%H(U%B4^bpL;zTvr?yqMLC1#wZ)(3PKN6O)h zxEILz7rE1tgpS&;7&;$;8AZIQ9b`RZ1yE8cEz7bajdi#CGHr9kMs+O)S|LrKVxOuB z*EDD41Y*)|FY*six!X_fT!iX$!-Tz5U|aqm%Cr_UhzQyn`uuM_5kn*LoViWZj!y}Z zPWBCQQBA6`bHgECKB&XnZ-_VNitCpSfAv}KXxyLBev&IOsPSouBy%Mf%_DJrN-2uJ zF8At4DOv~1TBStdBauSVxgqCf9UI3J(nq};stt<&DgQ%P4l&Q9UQmg59vUt{ zJK<8Hm)D6f)o6_r4RRGjBG+e^`1$$O({MPXF%vOK3eh$v#MzQK(+RQ{TxPx+@+y&p zOysr%%(VmHgYG?IEMnS=JU z1@@Y`ME~m&^5-gfInvDH;N7w`w0sKe%ztb9|2!OGL15V?8Zc3numWlr?5dT>nvfg=vdSJ#Jfq#rSm;YhR zVM0**4`WVPGkU1sp)$;vLlo$~7mi-$mOLmFgUhr}&gwL9-?9_p8XqaO zkkzZdbu6?h@hB;wOWweUS&3YMhAi;76t~@VJr1(KOzLSfJvz>L3Jo`Kcy;8Qnb=!| z+0GbWCSb1F5SbIyV^H;tXxV%HjT+JB_6=y6*0`I|nAowYa#;RtFgJ-J)MTVkeqKW^ z$A+Wl66A-6no+1&Q`a78^g0>`lY}@_s4(ER6Mx;=Q+-Yv-(?>clR^hySDr$Hk0yfh z^&*6Dm{8TNc%9mGmH?41Q3hv~Qk`!uoXo7{QiIdq&3%R3h+1+4vimd#qCyG9iA=Lp zj|pXVk*V%EcFeVr-{dE7GOiONVW)z)(@{5|G$QY`a z5ZIlQ5Fj#fv~3e|cP!{0i6}NeJ1Wz}cP=V{D()JIkU!Fbh}!sQPL~tQE`-K7h9(P< zpzV8KQyx{J#!D-6pwAvD4Z#B8iKS4UQsiCg8UaFS)5A_haCUQ{YO4kh?NYQ3KtqgbcN! zWaD>zA1!uCzGpPNQ0FEOn1!dkO$JE;-(v*KhSBGKK}0OTL<=M_hX`%VGQ=zvV}3`A zI;N+I`f}EX8Z?_Vf=WU!8bpt7e>X~Avx7w0e1`Fc&xU1tHUg=WNALAl1cHD_Np@6M zF{&@KMDR$sVycJ%anT5DwH=vJ?je}F`ZjDs_!0RE@SL5<2*knVo#_ge7(PZCGVC#1{$kV!sQv(630EZYVN-g@XeeGma)qR}g=`>A zG9F*JJP8zMHwdQ6eJ%#1=OuT3VU5IRH;JjJ65U_$diIPE$kN}!m?R!ne+SO_Q+YhNz zsP=M7hO=+j+FGhq>P(tKqn5gETN@L|>YVMA*4Nf<+d8J|Tzw|iw;pcWdok+W?8va& zL(~A8D5yek?7{z-creodr_vNeG(@Bvq~tHjDWxcBRB7mK>6wF>*$dcTw7uZ!&*DZ# z5X__jv1OUFfl#Q2d3gJI`MUY|TlfX51z#4t6iF132$qm?lajNNQ!rM@5=VhAhr|a2 zWO#X%+Sz?DHt5$>o>Bm>iVEz%U^`==yCx)hz`}e&Lw$yI;@~l%@OV%F85BSZg=2=o zaY5k(pm4%aIB_VP6ckPY3a0@D7(;;;P}uLqD0Z;A4aKsD;@Uw8t)V35zsZcDR0dEw zZ78!Elv4r9CkK5c4ONhaLUfg(=9*9kZK$^fG)x_us0Yn5fEE}+i;bXVM$iglXtf!% z#sd1@23l_qZE%4$xj{d8LE8hKJAuJ2}?z-iY(J^Y!&56}_VyoZiHK*#Q(0P_h9CpJLusZ^!y%r`2f9sfd0CNK3qW`fBk;Eg|#(3WJvE$s1n1F zA$Y9XE3b*!!=5bzjiN7z*}`D9=8bH319~U&mnWgxTz``7NMsGOQZ4IKS$+@oui)Bz zwncuddtZIQppy1GI^Z8lAZklgWa6B_h7bK~=l-jf=v-p|vR)?FWn%2dyw z&wC5(&h&4dpZe#Qe=N$7i}C(ATV}m#(0r23oa9fZDYFN^=);>r-(&In?U@lve5}(0 zX-2*EAn-X}UK$hL9Vq@l`cr<|ojMJptIXY`^=-XtzPbTZ!&Kq3oOpHvVOjA&8YGgj zz=O$te|%^HGCj`}NG?ybW~bumXk(ohjI;^V-=9jS?b6-)`)?D??lu zxZEna5VXON9?zCcUa=4?ggm4cbHveMYD}qeoy1W`Q5qvM1FHDK_C&6;F5a3BpJF1! z{x#ZAi2MU)lGq+LI`gwon!0$QC`4iJ#WqC-Ew9i;6^+{zGeVLCFa$-B=Qa0FU4CJP zFNzG~#Pk)a2rqx_noT^>9g2?&&5y^tWYO&d8=^17dJO1DX483KEKKHi327Rr5D*e* zrb#R0s+(ln)*M&ld9NLp7euluDY>QESIgcH!Yj~Ma{imi2M5QFt^?Bp-NR?V{pmSn zrJMtZA%Y_>WxJI1tF4{WqWxlWf zr9;${!&G9U<-<}nJl^Tq7MmNCTd9=W$duVgRM@_%u;s0=eNkh_RBuCCZ-G&7f>>(^ zs?r9PYoHXXpykSAXGq|t2;;|b6GSs%M-ZWfL9o$6NU$MHc)sk|jvQDf%;=hQXiAhQ zQluz?1jr1SAYx>A3?MuZ@HbBm_6HIwJQ_X%J~@bj5}A$>os$DwkQ-N208jEIzN`p= zGB=4T4T%;mz9AY8Y+9gUJECEEVqm|;#rGp6^=4#v!^7b&!u1CH!c&&rPmvJSe|knY>liq799bEsgR$t*QgP+HXen#}>^e4((^|AAflDT=;*!2=2QGANUys zi$)vzl`wLXI((5fbe=JE1Tz#sGTPP>8dsugmm?|{B1>muibqmPdWtFaz1Xv&Oe&wzZ)c>5{SZ8+OxHeG5yUHD7d z%caa$>$%|F5|zC&&Am#K?OLbxYTwnGkhQw-t;VRs_UMb=nCp?G8?KqGoB5*q)r!aM zny16o=O2B~KS!bWQ_zP+=;J!{ap#XD>G>4;M{)$qQG5I+J`EoNQz60f)gEARnom!+ z_xINi4_6P5=TFaP&wrdq-=3idQ0VqEbnO|s_zazfLMNfnu_x&89dzg#I(!KoJBLo3 zJx`xL&!0XmpWg4C-<)4uo&UHv|8ahD4l`{Zd^_4Z*x&iO2g`tk{X7P1cfz7QVd}iq z#hvx3-L)~-y^W#$_5OpeJ%=YBk1kt|?;4JuY7d`l4xX!apDMQ=D>oi0)*oP7AK*V^ zN*!Fwh%V?@CCv!tFqsmyKY1~)dO8+!81nEHJWekMu2_vZ8FKCPPzWJP%{;esB2O4I zJb=3VTX`1u6#@aIR54#Mqi7&i9CjPS;S?Th60N*;gantF>)86~J-&Sj>Yy<>GQraU zjoD!R7gkO3BeZ!w6Anqj$$O8io|;StC6 zNx{|l!=?H`m4kpk#a?CDndV)91GBJ<5M8~i&>_i{5{-rh^oX}VXsyD$-5p{wC3+_yRrB8s3?XY&GY&K&xYQ zpl6cI`eS=2prK2_Tu$(Swi(03`gqx%HXC>k!wIy$qOR&}QYhV|qP!6> zMfYRTF+f&+oy&wr$K2E^2bj=$kjw3wYfpT)TK!U1w1LP;OUt|YI6ppLE;tmPPBy7~dy_HNMkS224JqR)H^ zM#GaL!)cIkMnG0orsRP2wyc4-O>#O^TYtz(RzZX_hF%ZAaz5NjUTE%3cAR!rZq*4A z++7cCFK5t`C(~Sf5@Sm_NBb=?Hc-JFspVLHBl znfvSb9KDw~)W7)m@p<&8-)X(^xwDV1;4-QZ{@ABHYoW=M@hZlMn5VB>y_nDRjtS=q zlHl}5H4-fW`e`s-I3#jhp$AW{Op6)WINzq%9fMI7${m%F-68I!d#z=JQy~upp9|}r zOvNk+dr*kDzp33hF$|5-$Xk@INHueIgMLyTbDDMOGl5JNaSaV%oPmTl=c5LkLCVOy z_~ZR#kbtE)VBCwjWea?6e;;7OT$^bwf)zREG;yi#EoVz*4aicT2i8mdUz8F+Vsp?d zQ2pGlAM1P)oA_%`ea`Y2Q7~TIur}{F+bCO9CYT=J%IL!p*-R$Eywd6Us!?;b`16GU zIp#+T$QJH#SxuUegnh5VG#n{K!O(ajp(s34cL)qB-_Lbgv__4ev5iX|3?V!uf#_K2 zG#T9=xffOHi}c&hDQWGHuI#5VZ}Fw+q*qJn*@{-E2?ZE%E*QQ-*k0%*gS5iJNdBk8 z7H+@zKpIvPxBb{^h4`VeEDE|IR(%+DJ9 zM8B#}C#>rNQ}A?hNHjy?tw?PJg1@Dk&Qit5cDY}(q%IUbhZf7J)GprlLTcnamCa+< zsy2{`O|VPV?G~rO)xiw^h{z=x+guiW=C3kK~pAv z5BX;{<$08NS5xoN&qsbT9Zpj!H&h)eV!U+#(-Wa=tW~{7Z&mWC zVUA^%CoMaNep;UM$J-Iijjp#7KE#aCe`z1)mlRGZq<1&Jp%}7Jix&#fF>-KDMV0u9 zh1Fo0EYz&pA-Gk!b9=iU4jL!{vw94gW%{*NF(+Wa^6*SrI|z9>s5(vh%t%%!Yf9Twd6T8O|10AHbP~ zG?EWQ)4b|k9o#LIm9qbV@MwROx_P<|VpGW6y_rN#i2Q=CoQK#9;Qu>>%Yr}VgjUhd)A4fA=0;=_otjU?_@Dt*ML zK27hZ1t0o;jx95LJvXyuc^BRW2K{8f4|Coh*z6odIsNfWNuc1#Yk9*Lnaqn#U)Ijq zsbVpAZiYO#+t&RuIO{It5N7WkXW4ezs`(f_GAw5G@$F!k?HE`3y51_y)nl8ZCk!v` zK0JENjAK8obo5+|rwweTeKfF%jI%SEu3;UBm(ad?#v8XhUEV&x6r07%{o(Yj)>oHQ?IVD{Mb#7v?EUoZ*;BNBeP=jRr2&wz zkG6xS+2F&rmog}L(velOJWY&&+32@RLnkJERyfmUvfqPyh+d38J=$lIaKq3);GMr= z^O7t3sXbRi0*9Sze{$GZmx1nyAvrH;%hs$V652BF;y(goCqtiSMK60G=zH;i)7WTc z{1-HRhlt+^A*i0y2q$83)zceve8Vp`b=@ja4oez#1TrIb$>9^#a288{NS0t;LFC1{y@0VC z??^G?Va(!uxsutf4=<}n^dsFSkBp4QF9YPw!`t*K8tALU2?zyJ!6G09!|2e(*F;R6 zw6{BUAZG773PGd5S492y<2>}?w_7cJlZoa9sUalC0a1%(r0upN67(qUDXzgKF5uF@ z*E_VwFa`jP8K=?wxIR-cX(|9`;d7QTW?(^IoG7CnC19Mr5I{LWw6rEmHGjn!{y!dkWh1M%s<_6Hn8P=lNZ4b@K?-F>kzX+dN2u!n_8d0 zOjD;<8IY$M2LIN8T!T`-{*Ky&*F=ir3^tc`i^wdRa*txB+<3j4QalIM|50Fl%d6y; zzU8$T3x4Go$X2nhVyN}`>(#1x@lh5_`}PNksRG-1S9Nd2^^kD2xR?xLTFdoY5?D)9 z`&949R4pgNItk?Tgx3=ZY|ymn+g+zk=BKQIuVbe5IP!>|tcAOfyAe@+Q=p)zZA% zJ`8AVnSEktO6PEHm%(e?XORx^9?5~e!op8NdhEa}HlY&4jKSrCdezH}kLWWT#Qc_P zCVRw|P7q`aoM=_6ycT2P%d}&e#(D(3X2-ZgE&$ThK1bE!^!sYf`sn41ohvFs-U8^q zEW|~R!LvLrZM@Y?_KP}ur$#eJU*{fK!~gjf^AdDcSf3pgQc4Ky3bjCk8HbKw2kjRA z%L%_@(`Wn}i|~yl@6j2U@*PyhO$w*<3%gX0#Ns)ICZlpoaDnewO~(-+DJP^T4bJHp zG#zRq_ox^bMT|!7ql5P7!xJLkjoc?}!ycx=+caz>3K`4hJjX#ki!j8}4U0gd`t_A^ z|Jqvdv9Rtuy?jXqN@!#8jp~@rwCs^fc1yx^DGqPmdzk1qe_EjzD)4IYG4fIqG+r{s zOq6$n5RLkTdlJZj)=R0#O8BwS!wJ(jBY|{V4>fTGb!rPf0Zy&XoZ<)$hVY5D`fwZS zthzhNZJ=~NM&7f^s}rr56+i$cteiaYD!Zbq4-;Oo{6szuQ0gxPSU(|Lh^03rb{h?M4} zL9`x$9huqcvgGuu3=I-soIyi^nn=w^94FdC1&oG!lKY@KeU_eZG?@(3>C;Ax6r4O& z?B|l~2SYn}C8vikdJc%vx6q1Yw1|0S2g~3XILrqn*(UwTYHiNcJj>Br0 z)+WXJ7%sL+>oARMLypPxbD5d4^~lqnA>xhovf;9uv{y9w@{&-9`7!1p+&BphA7B~H z%N`4lXO0XSbL>Y3H#1z8e&i8E(e;FJmm+t=#%owP5{1WZCBX8fk?I+2P4Yb8__3Jv zN%P}L2ztaI8;%cRYm*jJ@|YYRnleNTUv8dqJD`tqMUFRfwQWklj;GSwCOD6$I!Y&C zZ4;V4h>Cc&2Kh;-&NNQkd4fWolv$tFpI2#b26i@2bWgMGn<9@9Y}*JxY3np|)ht|`P35~@WdNc^^B@kjIFgOh7 zuA-~L)Ah%r5-ewRvxfRL&!99ikJjR+n@yQyELkVXu?9g192o^O^ngrCKN9L2E_H>g zS<;aSPup5)0ig?fb4ky)X;Z;X;O|7&j&*xickVPv*JsB>%Nz1_pF^9ge&YV)$pQdCvv(3Qklt5Pj zj30PlAvhG!sB+=5>mt|mR1{v#lFU@H2V*KF>oB<1-qlM|0(s9d2=jx#Sq=?;hF6hk z7pfMz0l?e`w7z(zq===XU2sk%I#T}m*9^Gm5p%M9pGL9?Qz=X{6cvi;8`ff=WWlsh zkmgFJKoDZ!ObHYe${^WKMf-ttPL1;1TsE>HWaEaNF3eiMRZ*wtAM zYgvsHm^0F*u*a9ch4l2kKmQ$9nD(U%}T^T7VsJht|#Zw=jDN6g050Qd0`siz%CPVuiEoc1th0Y0e0ST30 z;ERv%uY~NoG0hKIp9W~1QjW$VgAx4zn8qf@BNT0<_9?OAbf*6>;pQ{v+hG4EVi(Ae zq&rLHhf-Cy#>M4PyP7*!T}%us)0u7hJc7Z$ruqgZHO&TplVXPjGQ@c$qv znR5mzac}@&Syq{K8aBa8HQY&o%)rXPMx!jsEuCNajn0nlJY=4$Jm0Rav>Nd)1y(;> znZp2LQjeH@vlRi!?6UcF-s43f9AN*m^AzTzN$PW3Repm=Z?P@0UoC#O&E1~)2zWOQwo=NA`_2)U`*XI< z@PpsRI>YrL$|lX!c2)mpIc9If1HK#Qf}RauVo>!BQdI-omDOmoUwZ(138SUwvWizr zyd7Z43%i%DI4O~Zd*N&|A%@^q5?28PG#OSgHC=r#2Egjn=mP@hs|FGU(u3Ob_DkLx zCVZS@?wR5NVhY4QXB$x9%6-}ApO>1n4?%=8>WA4Brc?XN0hQ0Re~}~~>IK&xNSZ2) ziFBAMJv#`LZyPV6NV^p6LvpU5!q0qp3AN)!qWj5tJ4}l>@nXYf;ERJ#ts@N`vs{;T zSJCLHK}l$lle7FAo}&>~1|z4I)-UJD*52cVY;#4Ss@88NtDv*Mm&e^SX2D<1zp{sm z6i9R{_{qCs=5!P%RYqT6fLd@%OQ+jhBF$BF6N@&i>{AcLwP>#gESS*$0Vb$(j2O_~ z@W}GkwQYHYTbOkC^N(wzG_D|E1pF)!In~ip4L4TCL`nEd?#z0)9hb@(!4F$Vi=E}!j0ZL&`rq1Wk?h;PKKr?WCn)PdqS0g zGX-fL1paTG)n9ZD^A0QBw%;Y4jN1(d@v~nIa@Qn70_9D#8QRohJ+~OhCXIQYlt&cA znHMv-FE|JsSkiHF@#Ky&_%kh!64WxbUS9JC^w`?7PwpG4Dcw&HO}ll2+4r%#_WqdD z5N=fAEyq*v*Mmw;#=YH$uhy$2pJ-kwQHSF)RzF3zi%ZoZg5I{c6g;*{+D*L(yU$w4 z@ZL|>)uv&ej+5D0WP_`A-qNr8P?N{&#(;N4!l6q*OwCLWV~=!fPlZ2|37>+0nzoi3H zw|pxUqNk&q6P3;!@PMa}^%cdVC~bb!zzfVg(OoLkKh2&T@leXu#(qUt`PV};p!6n9 zLN-Q{`B}`)OSkWXJ*C`i*W&XOT=dL6F(Ap{0C$i#*QmHyLZ1FbdCAmlSS@TQCNgZGOm`+ZIaUrlwZyFwxQ+C3B)MNfeS?YsHt{eMMG&VjevaoORn5nXai}4I98l&0XL626Qam)jAtBsKl1M zNGI8Vgb89i3-lz$xvwFM>1_2lvJh;ZSb9Lp3J~IZT4DrkylBOxgJWo7o08KVNV z3AUk(*%lvR31sVnY{^ER9cEg6{h9*NDq&L>b(<(faM>>aK-L7wOi~&2kFB;5nwC29{i5xVeyQD%2L}M!U30O+r+qifkcOzN3ENc!h?0J zWPfk+LiiAgVnW0h+%)NH9ftK+bxRg?LFH9GI6eb@7O^UZnz}xA+4#29^Mrj(-wV7h z-|`kYCr*;#^3;8>^O3>Uc$BBFkJ$lrJ!3&3_!>J*r0E2RW7$A`w8=$OaZ!pjbw01~j z`GktR50;_FbgT*G2N*W{YF%|+UR&y+TyOEcOmFvn?ODs2vW;}rRWItPQBQaB!~6&S z9`1!v_7flNs`)!FrnRj;6*E$59|#VPzWeg^x2WDBt&p(7yL=OFQGFlQgA~r}?@E3Y zlkI;J6CA$yas&6B5qsd#-A@TwrUk#^y>LmCfj1f~TJK~TLQMcQd zGk55TMKKiN!LZCviQvf1m~rKnFg$#H=c?E#CxbTol=!b6SqRTlemBOF<$k`m@-)07 zR*cT;n@lQ@8*{-Sj2zQC`$kMRCM*UcmG1FLN%=oY_+f;*c;9<@(~h`IeLYLFl|Jpg z4HNH5n|9RVc~|KId84%#A-9uGbq=dzp04d`fA6ZP*^eCiV?BR1a*(+CZlU1&0`g<| z#Pza+4?6KnO=q%gf@dE-Imf?Ykd8>Ny!mlIl!o^}A=;&r4B=EAlP)3S`Ss8C`Kl`3 z@Px=iA|lVe;7HKl`=+}OJKA~fA~n{RpS?5n?mk+hnS!17o>9|a8;WAoy;5b*Rg`-pgS$D3WNNbiq{ zYqw6C{$yGmJ3EYc@~7;lK}i=PtXa5!bE!HDaV=f;vElSrfu?UPli* z#6Cifm;;@C(UJM`Bq>S#B~}}lN4<|3+_D**#FK?w)f?d#T6r;BtlICT&Y)&7L(--Y znQ2|C1{^Rh23&$nR7G9nv(>p6Ly%k74W`#CLFtLfCr7G1m8pHoc`zh6@>CM8t2EI< zuc8htjB%AkM7`8Y?48wnPr7q5WopI>yk~$IxG7RQ+Jo)^+rnYrB1|;&Yzi z#sC#FOJbz$SY$i|xk-bLNi-x8BSj1aF^MXcL`7RjfCxnhmBepd3X=j`eG@grSC+4+}eMpP&AzqJ}C`z6v z&YLKyow(aMQ93eF7C&KznW$h>%#ZKzdkKmPfYj(u*4R$g`b^eEPSz(+-pezoIWey6 zoD^U+Q580c#%)fvoJ>9hO|`O3wTVo%G*33^U*emZR1uzx4xQ>rp6bn;q6%Mqol`xU zQ=N-b+>bj4Po|!Lrpav6m%L%IE6Gpwr$=n3M}4L#k<(-Prm-ti6N`#~_`cWax}))%+@`f5i7-Pf$o5$M_x~v?ffz0B0c-Ae`X_MSVEdSe0Lb^YQB@K z{WfxTt9JI-wfjx~tgx-_wB`fgJ9CQCunxjvP2|}RTh%YFx?kg;ZN4<$yJ|81!R)Y8 z<4w&oY7T4+U|``gGP^r6-D+$GnVtoU&Ot}@(p~4EZ2Hl9nKI%eM$3`6tQPd(dBI&LqsH)82U%(+IC0iHs2r^^{8qHhz2(I3n{xV$p zW@1ePN>r&#fr}d`b6xIcn)MH!2ciZtgV{{=M+Bx;B!ckhppSq!5(2COKCW5clP7ed z2r9smZtu!^d?u}=mEsnGalBsPCiTpUn|F$!oBvR&D=U#?yL|&pX}1}#&gcILtV__q zeVCTDn?u)UfhW@ls%j4#DgmaL+$(ws;x7t}GldO$)0|I%K@9}i{k%QC5@!!uh_DnR z)}FWNg^Mz)J2`o)o#gZi=EcAG{XRiM%}$uWlYa%~_|-yUV6=ug;g%Yo^9tS^4c10o zU>GocddZ@#=x*>4f$*FcLdQ3HA#_lTnCk0L}BZRRQrNBrYbgS$wrl zl%0$RJ6bbFrzMT8@Jtr{^z)RPFgvtTx5RSYlaKdvt z;dyr8!l*xy?cnKFur` z-@=}#*+qJc*>pJq>K(4!?IDB07rCD%d=4f#ae>Z)rOyo6X5b7->me5USRwt?<$7CT`nean~tMA#ie13w}rP| zm_V5$aIPe|AA!>CJS!Fw&UcY)8WM9J5#Xd0trTXpZF@eU%j!8O(!!8wk*Hk7g3#ym&Uh0#tS%QBYIV+GK}qpmW=Nu3$&!fkNMwMNfw% z_#_bM8hD5Koycn753M9ul<%F&Bz;Rd=n@@gH!Znx+o&EU(hDY?vDu-L{zxUrlT%Eh zK*np^bEt${KVadE<+5a=JC5Y^SU!Q}^FB!IiiC8QIfIyWk>giI8pcQOn0WS`xj-cx zFT}>{ZAo^~=1#4%fZGo|E@Tr_8lX;&w4BDPxTvjUt}8Z&w#FDqf*nbIpUsAA{Y5}> zU;{xJe?@EZ>X2#^AxQxCgxR#fng6Sta}(o4_{fZ0|i z8IrEl-mExpfFPkS*95+^2?c#nB#8y^yR8V~VrkPU`$@-(?C;($x*aYFynm?uAxM{? z(hDgH2Hb)+Egiqhp?|-Wm=^VJDfu?c%uLoZWk;^n@%05l-~L;}*1S({G7t#((8<;@&@Egq63KNB1bInfG#1bv% zfLA7izEj=lWZ9a?55A3Ai z*ox%MCCHs49DN0>Hq7Z`JxmZ1plX>CVNS3nrkS0S;^LCB@!++-kqAE}y5s4rWAfLX z3ZrL)r5X?!_FoHx!JkQ2k5gBJhLV1z(EP@Gz#G!U#Eb16=(yB@GT7t*6!Fzcfq^EU zBN#Ejoz@?id}Tk%PK`5W88njZbWeCA z)#Vfzi{j(pWM^a^P`(o>Tn^TrdBDEP5q$#)?ta&*G$8y6A?JQ{B}=M#cnM}-%q zC0PpF5YwCiNmoz7R;O3oxe_SipM)2-8GzTW*!vdL6XWLmzP1t=_91LVmt9&x94oY; zb2XYU=gYmxGY^P2Q(1lS;3UzQ*apZMJFaNUsS?B^4+^!6HgAA&lH;;sDoPH)$kwEH z)c1ifJQh!AE^hNST1hCD`KWWpdyD_N6%*gygdmR*9W5E(%Ck5^Zq8Skj*s z=s1QUHhu~{P~aI(BB$0kPBLS*TK_3h&5?m7>oYCc0jfs`nGbylPcAFC zzlc#TGGV~hCqh_dgHGkQN7DYHl};6Q#&ZNKG`59d{8`)tXjMRKUTFbF9scgd{Gvco zcaF5R*l{>*7{KRUOgq%GCa_k;dB=AfS{6{d;`%tI$(S~Xj72Dl<37-%%PzDc+h5dP zZ&W5RIus49cIffzE&X~^ROP(wqI?4}WWC`b!*|F)Gq*deJGyM;#ryKX3J2?hs$uTX z$$jO^*O$3tvgHI$yt5^t&crgFjsE;$9`#YhR~Ng3m|q!mZ<6WM+Fc#e8Fdj=hUWcw zn@?FY@jDd;<~qCZ6x`X$&cZPBNOpUQstOQ4$xm0NYiJ-lEdIto{QkHQfSkPW^j5n< z{uC|U+jbotE5$v&NV*^Gx&o#$%j-dwL1S>}CAxxFQ4}ZjQDb#1)BKs1&@1
y?Kqk4)xgKW_qu(MTs>QXm(s4>9*~sndsiTt&fAN!4ruG~L0SmiY9qs=;@{hpT*x0zZxcK_|QgfuSv9Z+1C^awoPgpcFGm{z?&Cbrw&CR8TMX8up zad9!#(<&<~tEi}`tgNiAuBHY@sjyakeLXcY+T7gS($YfZOS-zcdU|?#dwZ#Xz(1kU z{{H?aPo4}74N*y>|KvvhVz(5j)XBf;t-r{v|3bI^fd;7Y(f>}3Qmv!hkON*OswzMw z1*nUv3Q$*W_Q8+8@vX1_g>RkHWBM%IQ6$KPsHG8}QAxSdvg zD-@-!p272H6s?P&@2?lV14H_!7WXfg-1)?!@?*5~b@z#|*mtbrtzz%%p~s0F@k3jD zf-YQsSV0HN?9nS>jh=K|cFEbeyJ#;sNvYx1X!kD0glZ8lsUF<0-;B;Bm^Fa_hV?@eT&|V_w96eB6!07Ozm~`|5b;9%mBS zj>4&B_Q3iZ=ApTDIoYYNK!5X)ySAf7 z5k5ZbgAbiXc#Oot4ue>m3z`_fJ%#`frLjZC{nna>46JLxtP@1YKN?J#>mW{ z`40suUTKu}-eOi?D{#Ysw%-nNYeSd&4s-facxJ!0feEkdz7e?+TOADL0xb_limg}fa4rOijxgBp{Z3+lv5tf1h1EVIK>4<%=^ThRXZAlyOA}7l?!O_#By-KzmF4h zD-}|BoL89Xxm)u2uyTI=^XWpKr!*mQVIFPG=vyAlV?C&JKHNmVK}~LTH|i!G*y-+eB;!}?5@aW8q*oNmd_6}*}#*8S17sv zyDZ@ku6FkRY8?N5$f^M^L-%b)Vb{%&3$HWs9t3jTel7cj6R*a!@ak*uh0~3-fne-c;nmF#BHer9|*)+!E{WiHG9cTa(JLUPV1MTHA=Tjt^Vm zOP{M|$7$eg>6d>B7=zE`kSN! zOJg)8h2*(Ot08{HSk|-3S0wI|+$5eiE8u{s*_!txJa@uOzz7lD=p}2kFnIT}M8X*j zJ;%H!MB7*A&R8{&6S0*d>AHpZQ@BPLlF+1JHjG0mzfXTPi~%D?nGNkfIMTYUtcu@U zW3d=vx%&{4GvV_?M=nJ@sb&8PghkgnXFn9-^D|fX8|nkhDtsT+9SRoHom9MqpYJz; z=4_Q2dL3zcVnuvwwWK3huHsEOep+gQy3mRy3(S0=dBSbQ6l@0Y>4Ja_;e3N%F*D(* z0j_3bK{9BsUW#uz|9+}jHkl$Vub{8c*2kuooPcy4n6!IpvQ(I%6MqrCdSlWg_uho5 zx+J%h%bs)oJv6DsV;<)AeR6q_V)yVCL$k*plFLIp-&$Q~(gZlBRwx?Z+Ojg6ea>B4 zopk=zUNqC}r#kg_jI=T{2m|+=SB7;i&B=IyyQfC56foP&ERo zIzVk0!^6WPBO_F3;2&k+pEf~l5L9d6AB^T7506UH{G-zR2Oapw9rzDVLse=1L()*& z2UXJg2h;i=m>uXc3g*)p@)nrQSV8N0i_1NMiL zdci)#_;rExfKT|3&7Xw1cd9fpi$Sl$KPK#OgbU91ETGKtlP_DW)kV4+-E2_C#>ARN zFC_0&om;YO;`X9k#z%_aygcr3DH?M5CQ}LoqFb2_<9!~{Ec3U2ZL8)digTo(Li1Lb zS-)LpxAeZ5UcAafTDRm*Ll;S}7IUtvzt8dip8C@x?*1#podEVpOtmc82v zcVazHMzgO`Q2_#2$R&`dCn#)R?`f2P9$HD^y7>!D;Ubt0(}m-rq3`B}D+mfuKib4M zV`-s|)&&AyBs59XK4mCdH0V@im@Agx z0`;r>+#Te02iH4P>>emy?OVWScYmz&MFBmd;Kx)F>gFBvc1jOEqereQ&@}d8WKHAs zyM)kJ@4R?(QPzh11*h{VvM~+ppZd49(Smiy?22O|n>$rw!oCe)QVHw(90=bZODd2+ zcv1vW&^D(aC&B4mzl<$uKO4nU0$4_RC1v8*qLv_099TexVVLpILKUko`NX zJ1$78bQ9$hy`yLxWTu7^I;LmYaPiz9g7TJD1OB5v}-wxJ+)?7Ps;4O_-p^h4fiI`5z)5b1qT z%wrCL0Q(Goew*%SK0>JYXXq9D-laF5Olw=$wu58`yNpg;)SAnaHeFYBQ`EZxWVP27 z^tUiVm>q*pktE@%8;*O`K>FbTe$Oe9HGJhK+(C=UK+U}1H==X~`$J7xiKV%$>m}?t zq6{f&Wjq27f?vDPE}@w9Be5`OM=~6FMueI<0k$+By_!kbM2=(^_(H)d6h?xCemY}V zihh8U`-gY#Mj!E_p$DSO0#>DPCG3Fo%^>Y00Q+2yfx;KNIqls>wk$92N?sL8WRg6N zmg_>hMn{I2s(W%7@3^I5=t_dO0CQ1YhM$HHKU^&;*(Xvvha_y*uBrqwZfj4jS7h@? zwre~U{)v&*#6DE^-C=dDJRvb}fp6!)tlQm2iH{nr5ncL1<8I*dwy{11of`U=fk{NG zE*)#<6DQ6mHC(FA^!UE)7hEQ_28Os38H*G35z=NT1Y<|Rht*n1@qcBuOBq7eKL-o4 zJ+Ia-C*-}EXHEw&KUSEV(K=2@oXRfZ)>t^NSh6FTtsX&Zk>&b1XD#=R5ru`LP&4s1 zgVy99+iX^i@}1RO!Swt6BdlD$kz(>qMWL4A^LI+lOUk=EGtReO$fwSymse&nzT|E4 zyreI(US+1y{ONF>`e|VaE3E)>5&uv7`+x6#OuAIfhidmww_Vho6m`c$ZFkhpMr~jJ z=&pYOkbe`9{}I)w%%-oQ|>b4t_f?Qx$8@ zJ0S4Krf1`~8fxU|UbGFwLMywnJ`F&3dg%VJ7M*e&A%aj`r=eL&l!}xIp zMJQ6&yb(WNRIQs6elw*SU0LQg#!ni0!7RXcd)Gb*OwmJSgwW&=Q^h9M}pHjd~VGM|C>2IXP3romw~Qp!~ZG+oB02 z9BKgq-P>zcp4^O_cj7V`bjJ#B>JtwiL?D_1& ztRU+leV;&r?_m>^FW^aYtGIc6es$%qwTLR`1afIByJYT}MLBn|`v7zpOkK8C))OKUU^B!tZ z@`_Aa?BYQM|MXUvdxHK@Cc>8-lak{rfU5o1$%EPKg1$F1dS#wO#@xNU6%liPyfO~-jI&cfy@jQz^H{lr zk^otdFSv_)C?$Ifkd?vq(oGUd(}rH;AMDvaYhA*C;Ud7SB)riVM9 z{Cw`@!DFbd-gW2>c5z9QO+tt<{)STx(DP|=>UjLhl(|>CaJ4r1y(uBKz~y~XktUv! zVyCggq$*+Z^_U=SGs1%H267ahPWTTrPxmHrv%9f;DU$hNlN@j z($l*2^e-8}^_zq{ho}Zf08!YsJ5_}Hi%ESUO=1zy%sXw(5#4*Di;ADTSreECtpyubJOjcS~`T_Z=b4}&wkaE19m-`5ZD{Hu1{)fa;H zhuhB51uX_OuTD-WH=G{n5GL2&zL~19sF1ypz@w)59l&+#_n!bdaS!XO`AZA<{3)7W zg;Yva1=sL9VhFl$41f59D+ATqe|BbbG(_t@w=|6C`S36lY1I62#EG4+b#&LORDqly zCM`<=I@N`Z3*j!chsu^dE?54I=S#ORU%;I4xXsWPXtn;t7d8<$A3*ugT+6{$UrWz>I0vPnqp!$QjF5W!RXS=p+$(H`2(mF z_PYh0R4qo=J>qIea4;-7OLq#@>hZJdjGpethq-E1uEUkJ+kgBQ7CXXuE!R0os_+#9 zjc{RlJjlCn=>eDM=PSJF&7+8J6?8fKZ zN<^JFWOc%-h8LV~3-A%-v;1h}2@RE+(JDT@2 zUKGz>?^7y0jK8P(ko#He8f(c{`Tl#_cZ#3g{K;CBYnp(8n9L>eoK!;18gw})=TbCI zs*srt`sYmM({!9qs-gTI|2iD_`|hY8&<5ZF@BoO+Ec`4i0xYb8tkhzo7V4j3<3jUj ziU?nqkgArI8~jU-GAyio0+K4U#DJ7?Ei%vbz-vJkG=)c7G;A#YIy4xcnEd;AnR;$e zxMfZwYyS7%pDN{3500sj_S?T5+J6bO2L~Sy4?lhUc=YMh@zK#|Y8@Ycp%!(z^56CK z%a?!Z+m|ojzJC4w{ritXOERqh4mt$zr3xXIs6-zytE31C0~;nFAwpSO@?ImUY=X|F zB!xGIw?R_3@*FK|$+$md#m=WH?hfCkJxn!C{amMeo&E9>sL`@iuTU{cF?rt%Hdkrn z8(DkKGR@|mF+q|Y%LI@~>!1@eFli5L2PyU^Xcf2C={#g3c#67o*R$CHn4V0wsziM- zZZvx^(Ew+DhzO-0(e&m$X>m%|xcc)j{lqEpQaWe%f!Lepjg{971qyVzUlnEt3u*x` zAHD7{8Z-QlIw=p39tRWwE(4?sJp*WN7G_xiWpHxCiqbtw;jf(yR*7tkP1f;*zYQlB~iKtY`^l{&Prf5hhMyCU!I!d!6Xlw7HPWFn(7?CS06deqhZfARGmKuvvJ+jlyl1VZn<_uh-4cL+!? z(mO~OL?DC`K#DYJ0@4K)r8hxC6{H1FKv4nd*g!!+A-?(F-uL}H@B7VsXVzqrGea_S z&Svek*R{{@>g(?5@9F99?S0bMH_+cd@MM7G2lAApQWRnzc$KiMg1E>@>HS~T^iko^ z0b5BJ2+D{d{`vEV1cdSUUqG0Nu3;Hu*qckNkUG8#6_b)7)Gz)O+H?!>#mel?Xxg%B^ zKE3V~Iw*_1B!eU7`!?m>XE?5-zQ_Ya3)yonrG)j*4R4=t zx!H4Z)dbhBPKoQyl@G)vFRlh*LR&R24i>*MQ^EfSG0h501Q-G&{~1dI80jH7@oqWM zhq6L7a{MK-yt#7RX>y$La_muZY{7CYKJrZV()6YhblPGx3W5kRUMhZWDo#!+7ETHV zRw^b=1T!}cD<3VV5Cg9`i?AHKxDvOty0E;qu(Gb0s=kzlf!rlyB^^_BeRGsCTHpM# zskOb8ofBzVck}S{^YimB(H8*5(U3ZfBx9K3;$jl}lq6@BU^jq_@}!<4Ny{P~BsuG^ zqD5MYkq#0Q_3uFvxc(j_h!W`_K~hVA`anjS*49>%-qq33@mKOH;pGFWD$UJIF3ycC z&kepN^sg=quD%+5yFB^+_4L{*Vg22!jkVRkJ{^BMjejxNqzqIN+5(X*xz!A%!ThgQ zFJ{KlP?L?bVj_*hwpx4!lYHRIjPSbWx8Ul@ z9OTvllZCA2wJxGof>R}AuEQ1A^BZT9zdt7*TF1UxoJ9R_fJxvooynE?M?8Q9e#GKpOv&5e} z>}I_(uGdNBNHH0+t4e@Zt;;;4RC$TAR&Y=Xn`}d_5^Ll^B z(rB+K1luT1zxMMx*k@77?hyR-uZ=&T`J{=_O#7pb{T-!ua`!o2bjODd1+R2C3YQ|B zWBP%>e}IFwLU|-)5 zKR;4j_4mIT7#JE96c!vDe)VcZXlP`3cvNI$baXVSV}3m@?na@&!xv;D_FwoM+$^!8a4Xbd0!NR z+=h!@7wk-=QP2-dz)`Pfv4D!xb8-|8T?@K3EKwe{XVPfytdmn7A@(ZY&S&c~h1>(G zSQo{(+gPcGV{LN7s{3krSFD9mVawONO=wV(b)ENLG(C_&IXx2s9^O9EW7!yRxItlK z_ma)M)binE?ArwnfIOq&f2S~#%3*cHJs{kn~3FCw+i@uPPn~;+u!6irJ74QlQ z{R(o;ax$edQW;W`*CizaB_v!VBrPPR^rT8^`61(&|LWbO98q3g{#WuQxk&w0y-C9N z|C2BNn=<~BE*k!mE*k%vFG%`0$<&8*`~@rjy;Y>#LBcC{l5Wqx45|LDl^6aF$Cbc> zpfn}1KY?6@L4U|gF1dlIF#k+FjsLkR|NP6lOoXjJ!~C6kKImpJk|>P5$Pc=?Ji39S zr&c5iBf0Dgk<4~MliT7RFYqfKV-sv*8H?9n&Pr^tD|kcjJS#@CzN zP^+X+6q|3hc+y}q$smrtOnvvt*1^f1a2r?QHOVaX@1IsmVax3ylly#cYa({59-7L9 z3=PDEC%Ulp?mIW9?Sd@M3mYw;XW#kny-)y1d~-Bxwf3&ZrryspYA4$?_7)5T&W9NirleFfb^o zWCGR}CPk53Wak!S=apm?RAd!a-z=)nEWVE`=}aygOe!BqET4$KGj-$6Y}}o>xI2Wn zJM-87iG}~4D8VuV#dK~|zWo12V)Zh%?oDdryNvrASuI<6?fb>OUn`&es2TZHH+Eh> ze(}Gfa)SOz}CfkrWgES3G!e@p$IEYwp*Rh11cc z*uKoc!~cTh9pYH+@x01)sypOOw`165L4tVCBiH7ruLtk4iv8`LCV_XS#d}-bhjH{D z^&j?zyNu_O#1V^K3V5dWN&gOQQW0)POT zlJI?qVo4Yr#K-~!0>NM~6bdCLC#R;Srl+T8VPWCqZms*yQT67b83zw9coRo@9!lq!b=}Aes$q6N?H}0m~xR;vvI6a{&GvP^2 z0zNOEL_>XEik+%VCDh_xHl{5#<6dK0vfp>*Z9OU2f0qAor0C1@k}uO0Ul$sWm+zmx zd33hc_G|6&@AnVSSDT5e4aB9Ii-nSl>74V4jNfC)ry~g`&!Ug|gTHk9?mu?fy>GMK zY_nEtwp^||U#K>9Q)&#$^)#BXI}rKMmAcUZS!+X6Y0XrI=D2OnQ((-Qk7Bwdhe2lZ zQe@G?Gswx(ps-XhGzkoigTO+efS^$z@+dGe6v_}n!4ZJu_hJ(9 z;FfY1mh+HM@RV2Z!>CFIYKaD+_(SAG;{>E|?D9Db>V;G~ss&`-3AT6& zF?<10c?}cVhR}ZklYa(+zW@OL4iMlA0`Nr&{Kbs&vorlC7p_l%5+7qO?T6^EU9nt3 zJ1$)Em{#>3Rq%N#5nf|j72fvlMG3*y%w#GS9iFQ16N_lXy~MADy~Zk+#I zxj21!aXNo-I(_kL^5Wc4mXOd&YxX?9ZYWAY zDZ$hboi4-jRN%e~X?6DhS{eOKM?_40=@-v&ET?)R)me*sMu191f`I7%cp3d|(sdb! zS6byjmm8e@!Z;VPsOhA$0>fJmJA_OzOIya;wTVE>0A{HOM6e;kj5NGzt?jzk0@HR=A%?{r-_ln;5= z7d-)ncnFrg8x!jqKDz;u1gKwo;donKhqB@%@1lZ;(zU2#e(JiB_t?wN(y{0I^Z?mi z%V$q7exH8-=*F_OtbT2`0;~&*OR~D@UEonauckdsmvjlj);kCBAJk3ZibIX$YN6qJ zC0v-fyhRWhn@lT0>(!@!_?`d4cP{8bWPnfW=IEc}3w1?z(J$*{C}3f^$Y*c;vvV8p zd6P<@N_iK0g(`YH+2S7BEJ@-JG^-*UTxWSx7ALw>>RlYLZ_0M!ljrjTM-vD_SOXRz;v&@UAX@3iVkaGp8*6(lxUc6X0{Sn0=T%ud5!Qt|!c zTyocHpoy|>60H$ggtfvwnLo$0<($M(h>S(^y>CsH^zKboW=3z1zo*K4h5XLVQ;Luo zk`)U6o~tPtb?~W!U?Bdv^Cii}t!u^iL5udt)xY@8FC-VYpf7!UjSotysDMrw`5|LL z#mF+jJwEg-kO0<^6%XHvl;wI=Z=-FvyLAiVZlQ0za77f_WqXGah!Edt>m*-@%NhW}2mh~Z2kTuPBdQljd3ZkyOX(Oe`hnDbwBy`{eGH4J6=)NVd= z8b(mo755&TU;AE>qzz3|PD5g}*lnu&c5?ZPzWajCQik3Ei@-W2wz@`l-t?md^C;BF z08ipU^VM1Lna*LKd=>d^J694T8Lq=Bg359=`CZW3kmnljtTZ`BrId`tY~0P}b$@>{ zwN@~bnOWTzaLT5ntA@o$KVtX31!uBZ$A17BSE@q?f`$5b(js*UpX@M})I;(|UPBO> zR?4rbx4*x#ewk|4l0Xu+cYG47{PCw*N z|G9!csfBCMH63YFWmIu1N0?Z%<%QHh=#K>e2A8kdaI+oqSg)=ir)6KoNF4+AVITra z#rNnQb~Z!bUQI@c4p>Wyw&A4@x-IR5W&u@?eLa){rpbD{#gkH04HG%AWeWh2Pm__o zQPyL)|2q|LmOZ4$$#qY$|J6HXjU~E!Rv^fD63*j_Bw&zF|#N*^}d%V`o zoN5ltd^)5lzbLKImibzpFE1CeG6Z3BjacQdS%@F{^u1*4g-MBId5 z?cbW_G)-fF`S!C#DZ@%xd(kxsACrzDS|%9)$9|LKHdV>QH-tCLaO=}IjVzFiMSBC6 zu`}Rc1MAn+_2|WjIA=6gRjVBlN0+J%zJeadM1@83+fl%ZXi`s1gFhYZ9j#1us`3z)iv?{gUiSbgPrdH4vYqsZ$k z0|WPF8I@1=k~T8R@JuRox9h3+i3yh{2AtSrvxq2|^7If0?!eD!v<+1rtpNp5&2Zeo zY)Kn>;biGp_k;ZwyKXlsjl6v)@MN$v?fSH&`r{M2b*QmwFpq*%jS-!0y6Z{E-FAoMIE@4`I$i}a4ZHrc71!VeA{ zz$+!3R#z4AUuZjiei@Q~=`vZzwSlQMDf4H$rxEe}JuOSHdyL@isz~U9yXRL;05L66 z&y-**^DFNu{Z0}@mu>CJTwC0rg;!Vpebr+KYGZCQi7W^`vo;qSWO3q{{c5}~_#Sxa zfS9A|(5vB`F+XJv=0SsRL0R#F$X2RG%rem!CSom>t`c!yb%|7H?@ zX=eZWPS0lClP;^=A?s>pqB|cy3iy1%S~AQS)TW;nrKtIw7Tm5jZ4U$<0zyV(LsRU~ z_k4EJ{q|y_`!*7kw~Yp&QCA~NjeLsY_M4J#zb=iM}MXVpD+KI>LV~cpq~QB3t=;pe0i5G5L>IJG{i+u*Sc3Q zx<}<2mjjDn9wv0?Ii;-vSZFW0g!xi1zut_yJ}Wf!5CWpg170unbbm@fk;1hV(sqCxQZ3(#hob^sH6ZYucLJ>B9QSPJ^`A6!e>2l^#DHczhIc&%gmsze1A(!25hC%AlpMu~ z_Hov_1;io+&ipv>0Ix?%$a{w9ZJvx82m*6wBXssK7p`o%d+OHZWhQWxSSaA3Q)cZp z8Zv+f0u*%jbm>avZ`e239npshLFtx-L6?ouORp0{`R&dQ&3n$2f{TovIx5T>+~gU} zbk#FClqn)>D_%)2-IxS$uE%IaQsGzu^3_+2wjFA*S05auIV>Bo4)g3fw{%6@W2cuBq4^&bFG_YTmhU8_{Yh}E5{B?^?tq%7H5gX`7|S*9g^x4Fj` zb`M#5FW(DMkQQ*3L}jHGP!BV0z%Wr4J5n9HgWeocUnC{6h$7`t#g98ewYCGP^=~3Q z8*c^Xa$*B9WIDOySxFR;B6`5MgD9hyF5&+EREOrt0=LqlKqd7xdb@f*`mV3n-Q7*i zVgcOx5MwJ3ApIl|W}*W>DEbD|Ivxknty3MM%zf)X^*7zLB0*rMrmiSVQ%F6C3GnbJ z3^X2Po~%-^!6k$Ue8c)r=hdWd;?|HVG>VJ(l7dO z`F(@wH+N7;r@mAkaEJfVr#@?eEgfD|x^S!J*`bN0gZ}GOzX$`fnVZC{{-XAWU>bZq zaBovSOzfUVQRCPzy#qKV(Za{oQ?0RDA84w4C2bKDLg6r^2x3BADjxCqdbxr@!Tqhf z-G?pj1O@=w8DV`#_3X0RgOf`_-A)rboZ>R7bf~E0LXWVYF%``>>hx8e3UaLtZn_u% z7six+M#rx2(^lI8Y1SPb%0mQODTN805Igy-Ox3+e>h@h0 zKPItTtgf%}l9NsiDV)-TZ9^y_eRj+}$CpEN?P6k!RjsCM&ek3DvQpcl(`J{WukAXU z_B;+YZn4~y?_mjHZq)=LoBPQ%ISNTr?kIqa~|22>IwUd<2x;G7^H4z!YO&Rr)1Al z8R^E^kB;epE=WB)65}8L8)Ee5qtqflnwB=|fZa4s7VkhiBsPSX49Cv~l(3Er(M-!J zbuhC$Was;&NSBS=&WqzL9Okc(6O12H?qZjbpykR|rG}w%I3h=63*V2aV|?Ss{VT=; z2gZZnj$b_=594?qq47M*<@q%dR$>76DIop z?8$+1`Zg+9L-32IBXo-{$W;%Xt3}Y)!3wWFF~6%A;)Uu&P6Z?je-4cT&g>^2AG>M~jLTkEJ6ia&YeV#{t8fMrqbNvU^)iD3CSLCWK52oO!Ne+c&GncQCo zyWz#T3)C{rN1+Pij8B);hnl+!Yqi(sEkzybOkdE z`GTh;PSQMDPdZ*lE~Qd_v14=DxcbT(X}3XJwa!B%LFJ#%HCjM{XC=P7xypr(@0E?H6v=&1`A{U?J<28?E3YDxK{x$OB}ElMJgidRGa#a|ykR zsN7Plq8LAeT>G&5n+NKBNDjCLc1Q1WfGHs6VGxe3rgV z!pLbXP-|`JZM@6PUr$^IUUhl%WkY}qf*UkI2x6tTWT9i9kP6eB- z4C_ltq$y{JGnx~Oabu-f&sMPA#Nj;~A|Ve^bZ(y!$6C7=pVjUpFy9&6xx_Om+X@}T z_m|`n5&QJtax@M#0ZSZh;2;1ZDOcg_%B~;{T_30Zea6>}R^KHxcNJ;&^fz9M-?EgV z`A&VIpwjwvA5ViOkZ%z7t|fdY8TqB7f-7V{x)HyrBjHAvmwP2|!6cY(`??N0erZYT z1Jjp!u*Ivc?78ca8~&It>VlvB{={q(o7t*AKGPzJfY&Kil7q1cyn6FlZ9kf_A{2eHiq>3GK(HM`j01*x(GSBKK3<~^822pF!R3*F8X+;%lD z87mT7p*`y~x8}YV=k7m$_Hy`^o#!tz|58o@cqkjlD3jf{eJSds#qgIgf#d z;Ks*C?A5eXiR&M7KeOe&JiWD^>hd#Q`X_*v=N$?QA(Lnn&yc|nry@9|G+6T8hf|P( zPI?acwK_P2qRH0EJg-q6-z5tLBf5s+0=|+%c@P6;v`?4Okj*t2F*AGFyCb`A?(|jg)HtkHtiwYHc&s#hyu&bLL$I5?Bh+c z)wZ$e@3;ZhG4E+!7>THbhq6MD;(@(k_H;p~bXzn&#FFanIa$}`^_WS(P+1&EihLgj~S5Zd` z>H(LknY>%I$+%NxbjZ1ncgbI~h>>NY?vuM?(pMJFgel!YO@`!F3rEQE>lqXGs|1jy zWOrRr(|kmP#4wecO_%^2da8#XbrQfLG>j(a&fp4BVty&l7x_M83rrORu-L6g( zcL;1wFq+7HzbYc=b5~OOE%3485`Ta&Mo*dakiAdOyDI+)&zgInjGHy&6FhY}{`c|r zOoE4!f_H@o4rysp8mu6xVRnPRozC6QjB{^Gt zWg$F69MeUq6-qYVdhOLcgy_6S7OzFiZS2S;sWFV53ZDFzN<9#rrW zn$q~OuFHwDB~4Z`j+d+x$6Hc*5NaySwEZ$HU%jRL8{U|5_-Cr2_2~Uf<&o@_lwvFsAM* zSRhZ+|Jj(52Ep>~l7nx{;I$~s{8w>K=i$q4nlXfcn4Xw544GE!M!u$WQv5aY^ct4j z{dX_!=2|A!Y<~=@6b_kRoqe{^^UPKFbKmo)zurH7b_M@+$na9a$+F+G1oA1GYPh8s z4ZaH5zR!7Ah}3#c{Pp>{+ed)+;P>cTF<&B?&xslK13#cf*gZZs;Jq{y1;&n$%sg6s zXe3OB@y1hnw~l~1=O0C|08>SN8}8TH~i={3~)F@FmK@#cZ58tE`C@&8wworH%;v=H3YGPfyP;^hvN6fa*#7@UL=5eZz zgpaDJ(-%@>bJRy_+rjk8kA;$FTibh{M0<7jS?iMLdcKEOCMG{&80kwVQ+*YJ_H-?k z7R#O%`6_k2=1DHvgg67h>{mBvT=tqEcTNoe=QU)3cs)}uD@zR-T1thdmxWJMKt8G0 zXB@6B-u-iYMeWd-%rDgo?JAN@gGXgVy%6BG1b{VMt*On7Kumt|{(6zt!@{&chW8tO z(m*xq0y=4U+kOUy+PW=oMBzBTO7x1VShy8gnJz2J38{K@gNN;WSZMnYkf)JCk8;f@ zCGcS=?JkKucxnecWmHC{W<5e=1p`P zbCEdJ()>(M2OWmnt~f!C)qINm5YaUSRtn}1DbfHl2`zXMC)b_Mt_(<9T$Ta(uWGDR zMkX}9BLyQZa2uqF+JyT7(vc7-YK=>f@DJN9@MQmb#%E# zP?f0q?CH@ux`u-ZIS!xz@n)`3RW14mXIb%q5z})z#vmC4_^^@DkXJ`HobjBG!%FO? zTI~pfW||SMoHL||A0Fs#ZOAiXXSx2BTzrNMa@Ye>I(*C@nn1;()oFjp8%K5pFh0Ix z$Dn)CU}6MF;c1esP(^#$bABJ<(8x};O!9j4poWZ0jvp+^;ZsJ2ixQ)kcv$QSWseR& z#%Pz<0Rv%+dEaP+8mq&2yt6|J1w&ughbDlKC+Ndr?uocsSpQds57|%G>=e>U^H6)|gRQ zfkO}Zkqsod(tTmt&hIiV?m6K0Mc(!5qqiWSMoaJ z)ScQkId1)&z-}%vfkLb6pC(P4SV>3W& zT*sBh&&i23d~)#0QDLC%`o6JvmB~T@nzX&VWn6)PhLz@LAw4VOn6*Y6Qdqjhi>= zjh%qZ-iL;&wCPm~Puy?P-)sHQk*bGcTy%mo251@LhtiP4TvU>FaI!lE5cCAjln2Kf z2{CIWw$KL+F-Jjeu3}p6HA5p0lI8K>rH>hR14y~0^v5sU)MUj=Pti2q)CX4JAvXB1 zTG_y4Ny2_fd>BY=BD+i+BCuB$Ra%~`S{lX!A`Ua}^Nk7tz|@`8u^o8h3W4RLQjhCQ zdhLx)CK`dw>Bv~>i#SS;no;Xd^^r%J-%&7YuQ9u*G5gdpj6>0wWBr&hOO<(j1Dz^u z;1Slc35P8uqd(QXEi>jhEnxF0^T`3fOHo4;fF-bxj2h0Nc$oUYozrV{+=Pnx@q%7% z>jS43<6+qX#-jqh=LYX+pGT1_b_WC^HJ-n+dLC<5A5;H4uJbuT_5O`fjq6*6+6&Jy zM94(sr{`FK2~4uWM2g--s?9{2_XI9#B0Y8D-o3EoXvEP5dmhRd9(4 zwq)Ck%;>;-KPJ;V-)26sF)dGe(a=eL!-QK>)$}e)cK2Iy{4qJx3aF#mq#~(63n|X4 zV7d6~I^ zwiqGIhvsMRz9n?^Tf&d5>UpfMeyFJcSXJP~mJW%Q6rVEmA~Cva*R64-4;t`lTt2bL%5nN9TX459p1!MKb0!rKRN@GUE;(vkA@MNCBDKy$lX`(%DFG*VFPB05w zTBeF$>Kz881V-d2C6J}mHiHXalfo2hu@fP+Mp6Nt;0Ft>w4>5~5>%tLELj`nx~h+l zoie_HYKE{c;Oii+jY+!xQZ07vac>%RZ%rSBG!8wjxDLJN059M*3CbgXIE>A@PO%Co z?U+bjBtcipl;kETV#8-XdWyt#wVZjHNfHa~gYov5sn^LUf9w_bvLws0_d8H1)E?*X zIMY#?X&q$g3J1`)&RGjTOf~tgmU4wPSvpViv_SfoP8r#tX(y;v+6ZiSeF|qgA|F0V z>^DWLB#X*c7#>4H-EHj!OT$`iyWpNp*eW0Z^dciRa>F+Lnydq%z4l!tLL*kZso;rwKFHLw4Y)s z$EI^b5>;iIt<2ly+$KlriZ=y)VB*q6VZ}@z5ypsKNSCh7y6Uoig2>%upa=jOmNYn2ZG#izwFHo196+4<7CKEhI2PC>MV!w@KRp;OTgOj*)+h z?4&d9tNab4Y`EFi29$Cyc(ItH42E&Uj=sVp80*s!M%hgxIizp7jso4-gu@GEC@9IG z)Bu=PmR1rjVg;DLigpH&-P?Hb$9qoIRZ1OoI|_-tRx2kyBDb1N#U5*cfzPDH0++|! z5#7qOpFA2^s4l$*Iy(?In7A;Y-IZ*5i;ahG=bG^EIjx-ZDFFs4vVAQUs!yO{D(KTjFQt#vWLR5SqLBx)S437?Z>Me ztpxJK*kliu4Z`S$PtngLmk`pqn}E{IXz_F!qj|9q0z%OplIY3&bOF=2#~4qM`jRI_ zC+N~ws2k0LCuzOdOL*=?8G1ezTDBF)IcJAlVY2OP+XM4;C3X*$RRa7@D@6yEM=1I8 z3DrT-%qAjf3!0YBmm(#e-y^>rirNl#*tr(yYwPP%GI5#K*PYA)Jd*lW{Q{^q?+@Sp;rsA?I;>>g+)V(iGy0EQ@6ch$|3wsZL!nQDLonc$-Pi zENnkR{7UIW?#nk=#Uz~XjrXA|*=$0|JY#6sjg;ydpfntJgh`yiX^TY<~EU9EcLP4-iET}KnY}}4Q3x`LjgP!H$ z2Hx8;e#sz;W0-<)fjw!wN=qOBnHjM|l;zB5onnu_GRI zQ&%YTuaR@3ySrIFhl+$GWquYP`yj|;x~Y`)k_q?p#~oHqF(+DFO+U8&J)%*|m*+KB zTI4o5liRYXaPfwcW5(s)J6E49(RLXmOA9?hoPuy{7%}9#0QIAQY9Xc0;V-TYp}(nZ z@_TbSo__4QvQPv1(rZ^LvmLV5_^~@9G=C3!{1m9Jg4^4;c?G`X11>oKl6Uc?r%vzd zqn)q08DwuiDt2W-@ANmt5+I>T=_b`(u>jcTLKsU)INL4BOKqY=(e#O>Bi3{r*KTzj zzsw{82Mca5i1~?d zoT}c+RJ|IMGde=RhiN$9vVN1BJ(87C`5lH)QG$(4v#lhD2j-wl4!Cq8i}yy0Bck(O z%o}jSC2+}_F&UC2U-ZaqIzd@A{Sg)4s79s8sF5Hp;8?(;y@g7pZI@6r?&BvZU{)z! z6owdvGrPe3hAj)OA@bFaqIa&{EBzVAe5gN|qvqGFZW(qhH@oNHdnwN~ub7DD!VPY; zMf`n-$MJf0ZI31hKZVvhF;CR5VIuNHR5s}!8)%Sh zzV%iUS3!m~(v{rn0ThOojoSPj)ug_hltZZs_oBzq#!`38N3r^v55KN-4!plTcw#8&CUWBne1WZ+6x~YihtE@sE z&YVuSZ;Cp1ggNz@G`x{pqgNXrZkXx;I;kb1;UVINdbTQYCR*6YBS=nDln%gW@ngW9 zXM%pH1XI7hs)Es*(0~Ue0_d(N6osu4pBPSl3dSg}^+Mh?@8*8+!|OXG)SVH$11n|4 zQc2q!jQJN&98U8^D{PynlSire#@Amt-&pUB4v_oPNDn^n$_LF@j*0UQ6e4kuoN+U5{o6Zl5=( z4qM?_%*PRfwK0?`9gKB5@f9B94JCtHj;wbBi7V+foSC~+*MX(X)&(%vJ+zip{I?vx zBt~H?Koz!_F97!La2)i$C?%Dvg^suKQUZFhqH6x)&8yN&acx&_7@WvdYr|l&hKgqb zL!7?t18DQ^xTEco$K%%&&tejUhel9^Gci~^WCe@3gx zMra$bxnL}IIavZMQ-{6!qzH4s9Sm40#n4PLv# z)<>8t2tLU5Xd2rXcGi~&LrTY&l4hFe-~|x(^VBj6Drd;BC1U}zl``+z=(^sUNnDvF zeOw12O?bU%c3e8%xg&N{1ZzFR{~SJkRYW+itR#Ba`P32&Y&t#6Hx_gd+!H>M-r zV0dTgPukp$=wt>yOoGz9Mbg|Uu&MI!TCHC}x(dO244o}QX_tx&$oC2Kh%+eF@)H`0 zWjy&~IFKr-X`CLwn>yulHL`(nR55rxZ8udEAQc8;UCEQ+y`Pun^MHodRYY&sww`z2 zokKX$NMmv^^!k^PS9Eyybm!E~#F*AJj5gJ>PRI(8lA=u}gT~G?4>`I{J|I8w(bLaJ zFD?}aL~(xysXYA#1;8vFMkHeo)0|Sh;Qmcx7uh}cgz7^=+KR>wCJ1UMih{ga`Jp|jS4qRi}!0@Sqd}lL)qoQg4Q{N=diVC3v1n=qc-?z$r6^UEdJ2*p=nxxWk6su zbK=QESwxWC<@=ZG>AG8Sni8J$4_3zHy4!LSB)s{>9a|;qbP5M095MH8?qS~8KJ+~a zV3k*2x_5=KQ(ZA6K-YPtE4jGIP%${jFw6EyVE5y@obzyw*f%S2-S>TRB!e!CFRp^R znrpTX%u}KTyT93W8QA8~XjviFN&8$iJ(@!@)o#(BQ}=a@JqXI8T>9YIJ+PxG9k=-4 z{Yh~TD?C9uep7tyY@z4rk7zxN(6!&LEe9pt#63yJpkM-Z)6CH+p|yPe%0 zni8SVPi|{UJq8M4cM64EJZ7qX^Z|DcB7d`c&c0_H70GcCO7W)-HZMhDi_WvTy1N@te4*H~M>Of+`2QP}{>mN~Ix zLQby^eB__Jo=sG`AspgBn&&u52q(+4!6B~lcC4LO+4$68TOl!m)kZj_{>7Fr(GS$B zGu?3tGKhm%2R_>OFzP{O-~o=X`rgr)Y>@YbQIfOH8Zb&DO=459x@yK=*TencyM9mSe}hK$Hyp{QB?V~QCbU;OR_iGN8@~6x16*@4t@;J zC6k%<_*hN`;3{c?VH!gok%!__{1LK5^*3KRZ<&jjvev>4HJ09A^G|a9RJju?G0hv( z@Ad1;>nfA=?WaFtQ=JcSV(ClYX0P=qha7F>8Va@3-ZDjlznAY0Z2f#6<9v&_b%g>K@)D7-$G#a|jsv&()c8FZM^Sermct zcs7gCI!-tH>MSD%_^DK`E%Yuj)rsl1)8x(0bX?A7bv~BG$BE7)8P6f>&*9a4rAA5G zFOM|kxDEv{OPgPhLN7auA1Xc*M7u3Rcz#_U``zXym}lc?R{m;~t2ZI#)gCuQXmylz z4D^OWFnjF}>Ddf9%;?!YCcrFh)v6#m*LEpiF`?ON$N7t}Z)RY!&#mbgaMt*_L3_gD0cAQHS8Jv~~J=CsAr%D6!r=k}w)>_=Og&8KR62ajJD z>xe6hzx&+5iO$QZtNW@O=N?s)C+qdRGpAO(WClD;Ts7q5m>P~*k7HHD%ZlMwWqOC( zFzqt#WeLPHa}c*wGB=%(#(>W9xrgiu?{^@>d_DMwIRek?Nl+OjFw9g2LtpYFyLjX* z3Glr-d^;xt7XIR~tdb%+4i*#R<2RXERHy~A-4x*BbF>*I^>?*DS2=Ha80OWs53Gqq zd>DmJ3~72|1gv#-ML!7Ye5kbXTozZ#p<1X>u;5ozTh+6*nLBweXQm?}qAO`LuCH&S zo586Z=jDT{a7n9EcG--!s?-^Bn$F~Jl+-Ee-PAd8R&+=2j2|)b;h!5^HrlB3(Xy`OPt`HteW^aIBN+8oxru)) zZA*h9MMuYT$+ph)sesvdy&33b1Hf>&rlfDCp0shvvfy>Xg#a4XfTk9-VrsDB60{a- zuwJmYRBE`aC1_L2)*j$8+ECK0FKFl6VE2DWd+VsEyDsh<29S_00g>)zhR&f8X%GZO z0ci^bQ4}4zyM~qq0VSnGy1Pq2xP2n8_sq_K=JC@_dI{Lr-k(;MwriiL+Joq!QlOhC967{gzJ z!Cxlb-^$(N<723J_vGZ{?CcEvKnwf&W!Wyu6T_^sJ~Jz|K@Ud3Lup59z~FTO_ziQ} zuayV=RJ9L~5VmMQKA$h+fhtUcJfBArNh|5kH~Vw-Xax<(0)H6=Y;oWMx(5<<%7wHB?lzZbGHx z8hVg!-O|_8G|hsbt@Rd&ZOXcX7vT-jZl3t0VzC~oZ!*e|Z^F4V! zdvX?ev6gx>eeq_f@VQ>;LsRWT{neMU#+TxoFInxSNb7t_>ii&){t;QNA9<}GS*ij!Dgt@Rg9N_>iRp*2Q=D38}s=kBcbEJP(uG+2hv zo0lLNh{*^IHe~QkExBN+S=_7diN1u)I&q~#^1x%R_ zD+-m<)`(4MWoYJ@>->K*XkPOf?KZ*FA>!K;G??$gwT5eRP|%xo$7MW@EmoniZ%;Mg zEZf^T2MS9{O23p>R901g{R#nm>g(zo8ycD$n_8Qi+nQV2TUycKy4b?#T3u{Bbhj6b z3%#w2eO0Hov#YPGyRW;azo&PguMg@q@DFekV!X{jd^ZTO2@#?emzI~IF@#3(FA;iU z0~*WCzg!?_IR7PUqLcSA8U6qocK;X9pld;C_Xp5WY}vqNz+?&)!#`~1g2UfHY#_Gw zaJpMi_2~|qMy$|7a_8Ur*;+9ok7lMigmbi0knATloKP`*Ebao8Z0B&Qj>kG2oQ{>{ z1?RwewBj{J*7eW_*xIzxvFnC~syc%~gD4)WyB=nJ=}Y)8_(j5(@43V<-iLn7vFE>Vb zAF%qqb9#2~bBTRe%@eVTr;*?K^1zL+WsX0ZC1X=$Wh6D{dR^y3d*Mv~jIaU*Up=NT z#x;oI}bf#l^BEC6c8jqh+On)uk)(p0&nrFv6aO-%=qx_X85IwlDw3L>FE#!*)G7tT{vSy>ICo**lMno-o$ z)PMWdP+QwrSJwoozP`Dkp{230wXvzKsj0oGxxKl$qq(J{}%uOp9)-r!~YL zqldccLhLad0f;@u@`pXf=P&%Q5kiiU7pRk3sr%f(iKL_L3uowvg4@6i zX$o0-ljIG^AFu3i_9tKMxGDT*coyl(lcjEUGQh6tieafY+^L_|5pV}B9Io*6v2o!A zwReoi(zUyv?`h)tV(;h{5IWdA?-a48yeb-Kt0ksY8HyQiXZD-8Ja;^+*WWWtZicIZ zeJL*rs~1`~Spq`Mf9&D?r9E(>znS6S zIuwhGeUuPSlah#+k&KX)3XqrfK+3$iT(jgKt6W;deRU;c4Q2gXDmt2~np$ca+Un|% zIp{z>oxmp<--Z6q$QFrc|nwpuJJuo+~aQ}vbkBLUAV5VbT zl5-ng(xA7OVfcUM_~gHH92I0#3-up4$+ykF8-+J#5zyx{uM{DAC2O zL#r1>6i)UueS)4!x=31uNJbh56ELTq2;V`NGjfa!WzazGihSdprE)8TH}8G`t`pSdv<<)4*u(P0nu#2{&|od z804Mmc(bWZet66pZsU#+Vu(uces}J3mbOq*c~57q7nu!_9KzXzRgsprA_Ym(A4@v1 zHTe)cT%YPFwe3b-xWR}z5nTNcVn}M8jYnziR<>4JcJ#V)UPB&hmg-1e#D;D@Zk^3L z|3emobfqp+<+p}U#y+W5xtvcLZJTDj45Ay^7_I1s;jm!wL(rNFOjC@jPzdYyA0z}8 zCJY~jO@WQij!&vYN@GRC62ih)!6(!vgigB(dwCi0@uKS`G0D*eKVkPGmpxEn5z%4M z3E}7u;qe*ai8eg=j7JH_}0RNwxUExt;NZ$ z#VM^NsV${xEu|UFW!cSNa+`?D^BXHaH&m6>e=V>3R*fze#uR%zG|)df)IUDb|9!N7 zdaVD)c>nA~-~43X!uP(VslH`M)BP*c{i`$mt3L+TAk7Z0&kn864X@9Qtj~{bER1g~ zPHrqsZ7k1htjuk!E^Mx^Y;9g5cpxtY4LdaEP#_PvsMFKasOJ}dBb!?on0T4Yq!=My zc=#Oma>JPwF)r@Artkh_tn|aX5Egl@yPz0KDQ-hK5n1pLm4Y zFon>}W;iY}OgKDf#|um{2GL4Uu_7^vObKbUG<3j=^gt@PD5*NAYM5zg8EK&h@UXn8 z-n+TEzkBET{=F9p1$8;}c85qP9_Tc4OvCF?>!YO9)TFeur1bQpjEv-rj1QTaX<1oN z52Q;ZoXy>~&hFN({+8~+mY$K8-qDu6vDUuv_WtqCfw7*!vHr_t;*#t=4XqGM%ZnQu zD?fME_Yby?j< z|2++eby34CRA1*MP7J;_2w^n&;WLXx)99ru1zhFV=TqBdQGRxVTk$IQbIP0k?%HzQ zcmoR>F@z>^&a@OZEwPj))NEY37L8v2J@FTyXG@Pkez{?omJ~@6fd{~aUkMA_2n*j9 z7S<3JRuUGL6^4t$5eS5ch=`b&n1qCcw6wIGoSc%9lDfLOHso0i4J)7!Z3`1+{m&Ff zU1)d2m2H1$@FT_je4Q&RJvdOGMKS4)P)4giJ^q`sV<9$`NYV=$`hdvUiWq*P1j=@J zc5wW)C*;oKdMn5jmUjf$Z}hqJ5)`fJd+aH*wY-VbsI@ePSXA@={pV#d_~tS1V&Gwr z{n@5LMuB!+!{(1&h9;)|0`^vvW1ikKPj^pm4{sk&A3sk&e=q+)ufQPhpkVLd5buys z@6b@6&@i8{aG!8U5k3(Sz7dg7R}$aIDBq|kze`2?M@I)l#{|U01jfV$#iB#d=umWA zSX_KWd_q)0VoYK(IyogFB{eBE{X=?2dPdZMb2w^zZ20@c@XYt&x#{7>nW5#`q1Cye z_4&cgg~9E`fuBnQJIe#R%L98W{rju^2dn*uYnS@9)_=4yc)U6Edu!xmd-QZ?>~v@1 zY;XGPVD|iQ;rwXz{CM;1_$N5o2dBTl*)cdj0q19bY~_C(EuNGV#x=Z6W=DlEh6`}x z4E=Oa!IOZI;U1|Ti%I|muUw6PM21QTt*|2H+H=>mC#wXN_t_PT^vCKFk=)z@8eDqr$tQ>pP zdz2^2-5cfU>+bFE;S=cL8|>*9;^`mi6%g(f7~vHZ=^YFy$~z<)l22&NrNUx;|Hv;K z?H`T~h=>b_j0=p63yz8piH;AANeGWkj6^3!$0fzaC&wkGBqo1I`4GjN?~Us3?H(HF z9vkYO9PODN@0p$Gng8CiIMuT}-Lo>&v-+cVZMJuPu6JXuZ+(7XZDDYAad>5Eba`of zaryiF^7QP=?99r-_toX`)wR*p&7rlO{5E(l;>LHwf()9PbyB;2)CYADSEx1}P;tJSj9H zF(M*9Dl#r63XP7AiI0X_4MwG+BQoQ{vg5;Yj}yab8wYes1BX{6e&+Fs8Nq;6VS#Q2*F)|HMD5 z+RQk#uno*k49raq%zq!8|30)ZHM}rAvM@cmI5W2RV`6dk`_kO>(!%W0;(S!ZOMcYB zuV079$44h8$ET+dh3Mq`9CEpTr_rU?h2j)Lj10UaW}(i@-8q9uZV|JhFY$H7;5bK? z79WCJ3Mb+VKgzX8SYH_0kPz4C4~**n{QwOaBrGTeg@Jhm0}~emlK=xo zgn>8pB00U8(#C1OCVXh5c|M`@~a&034@*)4k4n+zUmOaUq^;fic%BuBCw zXQm8yo)mA91b>B?;5QL?GaTLohd09E4RClJ9Ptf-_=-SOB1FE3h!l&67Kn=Fh>53( zOC(B2MM+5qO3Qi3AzvaDpD8NaE2~7j#S~ge~ z>4`)?M__uhK64AO@XFQ?YF3W;AszEm4E+SM z5J?0gNkB9ihsV*R;N{kd}exk~++ zTHWc*x)c4n-}mZ{ZEKI5YY*Sm9{ASn1=a0E)$YgF9;DPBq}Lv1*B<89{>rcY^{Mt( zVeMf_-Cd+5 zO#nCH%=mL^9%`ImS?SfrkD*)!Mm_$x&W(oKHfdLG|Hd2p_8=p0r1Yg2{~cNml^dtW zKWP-p9*ose#^^A7)~gz%#wK)T()w5yNr!Dz_|&|O{mD%M_4rtYRtH9@$E&+}HD+Jj z&rfZtgjGL=S&E(;hkbwWwQ$!n*j0$BLS+X2&KCQ#(QEaYTC9JIP| zaY%7+>2UFw^YA_8fCoKF)Shz$OUJi$Ug~PwV;l*%x zJ{*yaK%^o>&?2J2qGH}+;%~$ypGrzwNXzO$b%*k3_k3(07M!i9Ro?lNyfc@a(|1`X-Wex>AAUzB9HSGDk`jNV zCLLxb9poe*d`v#bOWrR?+5eof_xZ!_=MP-Fg{eD*X+Mk7w~I42OS0BWb5_efE|nL| zR~F5FE&E)i*HQH#pumG}$*a-9IujFfubZIx{>rJvuovF*7qc zH}`#U@%!rP)W*it_V(1y?$rMN)WPA@ucN7>I$c`_eMmegYf9^Uuv zC>oJ>AP{Y7I{NuQ?he7&A^jVKMGflH6^BOSu-O4jIz9L>8)eRb+wh&LK=iFS9wT#; z8z`+n-4S_9ER*vMKMkf4l&*?Eur0}l5wBYVFEZ%_SESxxt$_@7q1%0xTnmRzEv2jV zw=eEbuxH&FK|246g$W$zeHiS}J~hdn(s`kC4@ULXOs(hsgF(j(ePBysl$X&)upnJd znPc%Sp*Ql)VPOidXR`bc_7-uWEu*~A01lM30X271$^0~hfBe#TJ;ZK=ZSxD684NzT zSxjyk_V`6bs=?9SrKAGW#>Lwd&qls~U8z5JOE%s;SeARCFYb){9MRxlJDF?oY?|A@o^!_zN#;mb4?@P4hei2%Y%1f($iLg}rt;`y43Z4YTFh+s**Kjz zxqY~Kqj>q#`2{`+2!0V1`X(gYC@kC}EZiSjREUTbiiu~5OT|mcgviLFWRn3h1t@<2>Zw384d|o;!^{hlEO0OT!aN69ad;&;J07(fTIRT{n(T4=^uTqjh$_J2~ z0g`e+Vm^o~1n4plgQ^5k-#|no2x|wSy&!l91dIUxG2k}=d?$hLci{IO1bhb}(;(&t zNS+62iy(6eWG{n{tDs;Fd|C&E8=!a-lx%{sP4Hz4ly8B`4N$!XYF9z?3TRsbolBs5 z5ezJVu{rR47W|k6i?d*59;`2d?G+T*T?c#XV1FGPZh&7K;Aj&ZZ-L)i;A9(|{sd>c z0PF$q-|HyEyo3bp_kaJ{#+_d7kw?WX09l`C5Yyl z_Eg*@Y!@FTu8n=O#7Z@STr2P1M^bBL=zyX3IetW15$de0V`?HYTgt}{xHgI4(tY)8 z3GL-JDx_2p(ZVs>YYqD#p~u&u+hk1jLn6oi^W37i^KuA=U0?RMIU=q)BUlK_?atvf zWUh9LHHOrK|D9&49%x=^aggm z%Ba!QcC!t=W>s^ZE6bqZy|pOPcC9jRwk(3zH0FUp6}Gfs$Q$tkJC8>H#LpT6V@avs zuNcjXKMMI$JOjHPC7zcyHO`6){3v`n=<25XezZ<+#tS_6c#Y#Atu}L4qVKHy<-9Y| zj{?cDBou;FWZlrySG?L>pHP0hJMFHLy|Ngsa>+OB5b3g>v}Z3V;aPMS{|PV(;_;8RtFUB`-bd+jpDfrlEzF zGP$#r-$u{U#M?d<>kxOo7Ykat7etF$$R0cit%%Oy3@w4w@z)lAxPFLG0C-V@tibJN3-&<*+qpU-6$S4sEiEc^E9F|2sOne#*2zM-Y=@;{D{= z!#qFKCjZh*o`)1Wp-I(hI*}ZjKbH|@Lf6rg>-0D(lq<O>5^Q#D~Uq4CN~@%}QAUOjx{q-`l&!Kv_EBE99%+@2arT4y#L zq5%6H4I0KW;kK)0r5v}I9|bdX;NP|kMhR!}-Rp1XyM90-N7VY5Q%mM(bH5LX%TI0^ zLw4hzCQVQz9|`%(Kn#}4L{lkBuwD?#Ds$&>b0l%FMzAvbF*Ckny#DC=HM46}`cxD* zDaaMcDUdg=-9$2&Ir-J- zU54_IAN=bI|3*ux0Fe$5nSb2k-)JfCALm#C`NWG$=U9D#r~!yNfT#zEMu2Drh!%io z1BiBj=m3aLfav<8Zh(N)b14x>y_XW}1=3vr*$$LjfO-=OXf^-EdlRJfO{eE`ULzxf{-i_l?mb@<$<^&5LXV+-#}a= zK(~Xq9uPMK;zvNj7)YD|$W-V!KU0_Dr#>k>fKErRBG(76cu zXTZ=8Ffx1T>?UWy%nVri0oE44<}&!X3idX@;THI{4UV?K@1K9P1Agy<<9+b^0Q^1# zCr9A)7@YkEXD8t744j@{CN+Qm*+lFB@bglap3Rz&?w@WJf4IFUKT_JxICVYq=Ag?n z@VH_Y6^LygNY6cxp%Teukmqf;x7djmdQcvGvvj#VUd(Ad*x!jM6SYmPJ><8osqk#| zit8g|-Pqb^I2Z9hCK;c`d(5&Uvicr!ahgb6cW}MQTzq#fzxtgcFX zP;gvLtbKab`kWWHAhx2?zV7$l;j{Zfp3fGRJMZxd4(pzVD$LtFHUE;1{q=d*%dYFS zma^8n6crM4cb_HUDz*|HKiDdb-~`W1W$oOm{4d)1v0u%YZ+f8e545(sC+_ZgOvP#6 zl2SL)H975mrTbVy0Y)r2VfgB%`01(_iQzN$eG-($E+>`SsZ|DvotJYH@zd)LSULhb zYo)=a3-kvDfh-Q9q!P=`oJ=j1I@<4%m{)Cy_w#Sl;ElUW&qotU+p?`1Jn0%H zC-QdGqoTI*GRF!-84cZwpJ9qUi%Qp-=`Pi|%T8_-BzB$Jd0FPUWQ&DcyH$Xe*P$b# z|LvFhRqA{2`y7n!jn55wMbzQHrZlUF(yd-!Vb9ZgcP1$s|1J>D{xRXiZI#o(YxUUr z;Vz{Zsq5|Xs7$%XBaK=K_O4lRx!{0o$TlGA_K>+$?T%A-9_l3834Je~)@JajmB5=t zg@F4nm}AUBGguue)Qx&#jLw~U?cWnrvMW?||6Yqhaq~<>wzP84*oaUF;^~Uz z8$wQuF?E`{tjM3b1&kZNduhT2?w^!>*^ZrPceyHh$|Z|x=ifPNO4IjVDxrNWopSfK zK>zEB34gt=LvlC%@VJ*GdwJ@M(*Xp?ZDmL{P8vEmp{*us@{T1$EuYF z=f9=341pSIwW2WUgsMsqrM2^RF^}-5BJ%>A9sRtxz#vS;IIO6}q}y@F(@cdC-Kocs z+VLO_o&|JV4Fsk;o|u_TSH#;Jh#ZQ%mWyEt zO-Pwe%sG;^Hp4@@PBsY}@y0+x2PP@oU}+Xj+e|+eoNg zO|4nV{yO)uYO0`oq~uHgm-3#pHPA%_sPhzhbOuu%H8DE+V{B|; ze0*hMVtsOQb8>Qf>if>j)ZUNjgSnZ5g&&8@v%gm7eyzUk4_`SJsa;e3W zt;N&7+Fm-n)bi<1NGqp5*G{)LPPeyC*MFXF@1Ab&pZ+{N{dsf-<*oNm&JRw{f1QD& zb8vhPP{)5hrgO1t$>Fm9)*0Th7xZRmuZwi)*_Xwm30brOtMTZk}V&{JbDx2?CI|s7~mEe z=$0J(?qlft;t2QZDEGQ(_a?MQTY^Vdl1ER9M_-y}Z>neK2k+)&-|9I3{K%lB;E*W) z&=9}K0KaG-zc}xJWS^i^pO8$S@OjEuC;C9uGv&I#f_kJt)~4|G$F5u)nkOZ_?^-7zXV;p^O!@1%>vd)d2DBPteu$ zC+LDAE-29I1&IF3$V$8m$g}~47NFV+G+KaWGtjODdey+F3f!v#56gk=7vNA1o>qbv zmB6JE1zwe3hE=G~XI^=y{y8T>nWtfCXOSO3><5sT3X)PU_navo&yzo$B^RG1R{xG~ z{1w}M95s3pK64&A2g2t;^a6;Vzl^U^XU;Q!oaarS7tNf1`2nhCLCp-Pn+Ek$pm74U zjDfZh&^`!SdqHalXl(^eP3Nfk`t#b_vu`ygH8saIUk|=jZPivR)|XE4Rf27iIEUtsD0{MZ5W>tJyaEI*qEtMg!E5p1no zhIhL=VDAv@pMd>Suzv=i<7sH?3MGG`?ds)W2^7jff<8dHJb;A0{sqpDpd(2rsx$cC z{pw#=5?2%q?N=`^HeT*m86h7Z0i#AOBf}+})~BilvM-y#{M#Wlbg=_!NfxB>ry0zj zmSp7bI=?(p|8&_Q^;UVoL@DLBJhMk+pT1W(UUo<|X8Zp2-o|C~1;Lhgr`j-Lnb&jS zyfBiS)fKN{_14fQFlvdaBK0m-AKg$d0q1b}(Xfq*<5A zv}N7XGF0wTPY4tH@z~H<`Q~n7-3=m(jaWnmY(`yGSj?peh{Bq{)RqpTx6)&1-g4@T zk|i4U4>&E0V)63&!b+gZkjFJC_j{K7EK$|d>sO7%Xt>hYgKU5^pah392qdS z8h%5ecdGxprM#hDuY8ZUQopE8kZ8yiJL1=vqFY^D;R-0A1Vp{uNOi~9j8*@ST)v|SgCW>se^GrHKay%F|m5t=MJ zY=u(~I|9Qt_q$Y7W)|#d58nrdXY!=yF^4l)QqKF!CH%&dQB!o#%}wQihe=oBoe@ZW z!nf?@3i9_24W}-i&k7PC$EW$AL7k@|7e&yV?2XDBF))>2afu7#GBq9clZfHl>y)cS zI>4o3M96#n371)fB(ETnoY@X%8{4^6b9U5Z)5gg{rFg2zU(n92!a7*DLgPFE-zFhn zfJ*Tc3qI>8jFr@rXDq5KBixjYd!eur%efaO3*TWoei!MKYh6>)#TwyGe|?rFRxfkH z0Cf>LNim0grH67(n*!$$22BxM$UEadtGVq!=i?oXoP_GF6cE)gi1aIYKEM{@;eE}x^{=p|Aw79f|uILj}^s| z9OxbgV{8c*EO5H98Gc02viVTFXm;8;-2BtKvkbfjd(SVQJ-n|^LAM;?y;Lx#IBBs~ z+6DzSb0F+JD}+fMofg9Er<4pe9VVEsR3-N;#nv~qV2CbbBros-onbs`z*J9^x9)Xz_kDXK5E=mB<-h zcwM>jO*U6207o(0PCuOFcq`oPSK2JA01NTUgER%Y2~r6}W8m9@DAW-^syy9p5UIY2 zXSv_5f?Tlaqon6iyGciBu52Y-{E_P+*2EoJqYNn#f<;PU9s`%r@}MA*H40Z$Do&`( z64!0-5VbJH+hKP8skjq(YQJ@deR+gQG!HeI7If8ovGqta%L@agC~$C?=PD@=JT)te zSSUYa_A-5O68)(^OZ3xLKInCOqJ%Olk9TF7u$;XUb$niAjW|50UN?kv(4K&0k$`?W z!-4*Bm!YwfVLjU+OPJ6d*`HNLsPx~0jEo{&@%?0tp4}qq{D-#T)wnUtn@hNHacziO z!pY3$iV+2FFu1dMqJHp!RLfKd{DLgRj5UMLLQVmslbX-)0yZY9|fJ3 zoms)>@X7mnZM52UX6Bh5G@FD_(SOe;#LN1-_rH9m)lS7J2rLe>Rc^R`ii-0k7g{6a z-dv~kqVuHE|4L{o#49v>UF&5c>DAYdGw@1ZF57?sug7u}<8F2s)0UtB?$>Sm|^ldHH=ci# z4ZOr~(cSr{QX#IYj#u{yQEloQHFE+-TLc-jCZw5+H;br0`tCe&lD=B9Z29Vtx)jUd zM+9#FD53cK@SgSin6J_eQz~!~-X4jzLYrity%BIr>>GrNJ}+jwL38JLug_!hj1!Tt z6<4w-@)&2vw!X}4x~up%jC6Tz`Xs!ME3uL*+6Lx~FuGFl4(SR)Y*AZe4;eAXDTllI zWTbc{9CCFB3GqpcS$J>}9y&d{Ht_}FsqZVnXh#if4?lER($MF1a3!;sNlP0vsISJhQ4#U zPN(VLg5;5-n~1Q-!{8W|kMr=JwM+aGLYTsOBWjwJi&9mCuRTy-##!!M5 zO}AgS=~q37eU;_X4a``DmRlSc6kmraSsO)O&Fd!)*A=7~WdOg0d?v| z>A(yg6%826M6$8P!7`~uxWk?4k9EUG5h4aESi&#G_3rSLpzxxQ#M|MjW^MA%ZE(N1 zJhEZChEYxlq#C;|>U}gJ^Q|-st?x%;O+Gd8NAHphreYPalGa3G86Y{jBk!+ZY7BU| zt)yYA7d^$gBY;};CfAx-yluX$W)J1X7nR7DrY7^SU!41 z#?6Jtdk1kOgs&FOJZ<3pNX00Yi|ry^UqR9H$sQAVi>j0#ASNWg4b$`Hs1Qd)!6aW_ zjbg%o>d&-sz$8A*9Ee~`YUHaa^0~hF&|v^~I5JLCuNKmaEifqb>=oP70=C4!0~2l` zqFY6;J(x9Iy+c>Ip18bn9FFC?KwnSyPW%wS@F7|~^CJYqwUKdG2)l+$bH$bHo{1-& zD~aHW>T5^IC{o?%9i>&$t5QCKKJyQ?^qE}MTnlqOFHj|P%SD# z3PQAA(wuCw;c_NfkAgB3rL$C?yjD%#M?3GQ$d%F2x_H`jpz%6nwJB5iUno2(i4|S* zR(qk6I*y_%M*1fW$p;j9zH4y}!`C}BdF?5Qz+bqE&fxZ|Qo1QYYPs$#>Z3xbPbbgD zOmCvcXYZ_B71iz3(QpoWBieR~V z?6WK)+0+NJjyOAxIcqDL7b^G3{pc&WN&6j5wpvmA=ei%!4%qQhsEqoLDcCsUFNual zu?MK`cFpp3GntLmV`cS|boLYdV$!&M&3T|7`$vEB=F)u?UCq^jyl>*Dp4&vjE$#zr zC@%%(EhGW90g32=?OZgB+t-SI%-mHa&Eht3Ig`++CF3K6J??ELcH5)hLqVWW_R0J!?*^#Y4<6Bt>i~1#5E?!H2Epflg#%QLr})0I6llc6G>!x>LRai62%^Fd1lk zg#4^YX&d1#au4lCdy6jCh9J{cO63Z^M4|;sb5Zt129C>Bgj;iUNUq+%PUWkY(8_cAquT z95>Rv^!5Vlb`do3==Q5b+=@eeMQ{R~!~BJB^fKMjHNSuEi0w*w;}aXsx0S~o&2QsS zF~PyY1S&$0Y1tp^=n~adkqj4M`6_Gm?GZYk-00d%6c4YS=OF!bT0MeIUlFZ#?xhB2;<{BmXVaHO4 z#=nPg1qKMvju4|s*^V465!9?pi@wyt_;X)L4#Qm^UUxQ$VKxy{p4+goouD>gQ6{x? zVS+#M+kf=tMR_<=sjZJ*Cge&gY85S6-P=SGRvGE;i4sk48Lk=a+~U+vchO73G?GiEX%a)id$nkBEZ+Z|TWRPNO5H33;!r!NkB;zp~lKM6z6GHcGfmCvONKtlJ*^F9#npDAT zSmWEUW-_H(59!V6VSU*V!y6Pj-$?b$%tlPVjogzZGyX(sGCg7`J8GpxD`7Tjmpp2D zK7vm+>To{l*faDvg!Ji+F_(8^ys~4sdSkDr$KG%CH}A`spO1N)jmx|npw=4rHb;w|A7UZ?vC(luuxoXK1i{ zc!+yMh&10rvsmI|hQLFY|fmd62mbKCOY`4NwMM z34!i|ET7jdgT{H#ya3vlLB|&8{E0g6UOMd=JLw-g92(k~=$@SJ>Y49uT<-a{*;BkT zSh_o0x;OS^f1={xd-boGx`Uba{kfr^b4%+#_EvtJEKQ#;&HzZu(D~{d*jWZg>);sb zeY$;iwgb+0|6DOxMSn;}q^4NAd5mqwtB+kakA{!Iq@4mwob0$>$@#d9$CS7+x? zDvtmEO~ql!-u!cC?N2H$mn=PM7fp?#UR1wq%S>&3SzPs}E%Rk2jxsL}`X??@Y6wq+hGG;f0UKy8^hi|vN;ptj8X#-)xi)ycOiK2K-wPLZzP3`?o6 zr9L^K;;v+>km|nIY8H&hDs($YDb9LbQPO5~Kty6bEUJ|dM&0GDbv_C3a+XKt$X;+E9x2YUcJ1g zJBHn6nOS*zAm+P3v5Az=$Aggk=67Za=G*)jPDlQhyeBa0^NqLLr!C&;5wBvA{R*mm z(kn8S4ctAmL)RoXQ4zKZ+@P`|+8u_e)F&BBxOx+@;`Vw5S*)xYF26i(nU2hgQwva_ z5FSTMPw1)k^PLVvX|qv#bKa2-au<8>E=9&=7Lno#>y|w(%V2WsAX*KQL-4?Lg^PSv z1NbGYqq<{?LWY>FFI3pb>?b2C2;^4rM96GoMG$f33wT_p1m!xKIAS&!b!o4DBXW63 zF-v*H7)5Q4fA>M>H?;>U5(F;9ijw#u)-kp=Hskhh;z!Y3J>7x=-FOwf2j8 ztgWzpQ|%&k-aiqA1-hpYTOLlr?sd zJ2cVun@yVEH3ymrlO-R#Zs`!hgUL+T7tb)O_F2v!(phB6dOW>I%MKyjxSmN?ZC%lkn&4^_q_xc#in=3E<1>Y=nNdP@+-YY+pq7Ls?-|PTFOa>dM`n zrRFB4!dv6g#V$1QYd0%XwL~=K2p@9k@@rm{T+*hTkqn+C?|!{w#3M4GYV60Mu#e%J@GNI* zKvM>Fj9N&{VMwE+DIhc%TF=k9TlBr4?zcgx@|xtBrsUT}iUL)Q(-gheJq)6oKX19t zZz=cacI0!i&p*+vd>@*a)K4_smeuC88B-q8Ya2bHQ$9ltJ<>^9+4T zG_NV`Ja9b=DbJ3nPo(gKL$dhYC?*&%*%i}lk6ESh6s|2b8dtTluj?>640%5`CZ$TS zR|mmwDfcz-lv}?nsE`DVnHX}^J*HwKLeV7OUu7l{KTe~aa%`f5j$lP|=ZHMp)np2a zRisev1%fkIcO8!UI{#QjLTj z-5eq(Xr@+kq7YeQ*2;KlD+j79TnTu{Q2q;w!&XeLkH;k#cX2-uSklWDU>Etwh9Pn}<13^dWbmbfA}Jm)*uK`a~@4Tv3@ z@l4$o*@?xLu3TTX^LR|ZS7E>7wHAFqtP+SVHQlL8=5z5pe^P@CEK)_`rg4?F68!!w!&c@<2)bQ z&7T@e2H&+kUaojR&-ZOxbExR7ExGp|g;~qTW`!5A^5mx?KG+TT38$yk4*VTB@ zN0F8UUg4?GKbvQ0L6}NTT{S-@^vQ&? zlhqteO~LE)30`^Q24|s)A(8!FBjKojS$oW;1@rIEIM&qpq&CW}!Ld38+}bFz^x_)k zCy(wMsEgIK(nSSpiO)I`dNz9v<(K+C5Kh*iH>nnEh|A(=^ zjA{aG{J3!`iH$M3VK7PrgwZ`ZC8ZJRR_PKQFgm0gl?D}+mJ;a(NeNMDK~O0H1uveV z_kEw=|NNg9&vh<#7~2b8?Qp()zMpU0);*F^X8#n3+})(1bCmiG;(bQLb8D8nQg^;h!(SO$Bp#qM z71M~-plSJP!RIGy37_vCWL_6C3*qSO7^m6LLYXgXEkeIq^bTZ^_{-0IOQO3gTQ^Rr zBup@wtYCsblNGkbEZcg?;E&GlKYIusAK&;r$9P?$j9A98IrbRkubb7fVDXr{IkY~3 zvu?aB-_BUlkta^MwSHeOidY~V6Y3ZDwrw3wYJXSVS}UhxPlNP&#hCUXX$)OqeO!z4 zm*D5-XbCPmc(*p2^lEn|Yb{zp^(^_W_y=m1V`y+F$API>|7HcDlg*)UjOLfJgj=3r|4{*CF9;k+;AtN&utRg9;Y7R8;m zPVyI2P$cHV@jKGe`gS_qgvmV;<2BOEk4am?*U5@uZil@Yu6An0e=2|bNXnusV!wBn z9nuf!_pEe;Ai_se{a`z~Em? zhEp4teG!drg9;*Hmxl_04=^sWycDPf>m3B-F7n zipx~ahaljCnX1b^-@q=$P!hHg$W7#g*KJ_XyQCOZhick2swWiIE#*4Cq~e3Jd{-!D zKP5#+r%0IrQz}ESuPcQqv(u(q2W&)tO1EpMkH0o0McS`w6@-ybE=)cuQ{vSm<<1dn z6;rs!DX~@~kD%i+ixHksQD&l1tda5?T2{HH#<666V=Yyda5+KK71_M%jNufaa8bDt zglWkLu+Zcp?T)e|LhED!4w(qmqu8j+xi{A~jQmjym8sL*U;Z zbDK=;%D{#kWxYtoxE!%9MDj*zKzA|szM8Od#dWJy z^pNJ=;cm{+0MX+mk~0IQYh`jAg!0`*NnI)sgJ=#%YC+6^fp~gY^4X^IciV?OGf){- z;@z#v?CS|eND_=Z+3&9Xh-ohI`qSaQWH@Hs?WRp%AE9?LjhSx;dS zdoeSUHR4QK3;#9qMseInEi`5Qa+I+8*e>kj_~jm9%kUcV;N7IkGRrEWkZLEjx5ZX* zL=>r+TE2(D;hVu*sjyUPhgQ}2MLWDdhL9F}FAvO>{BK^lVn-A!xsZ}#77ruXZLHS( zUcj@p>|Pa)V_{?baKSwM_>-_QH7v!d^ZmUVlQsJ%$A;`o$}kpJu{EpY|y#M za}D!TtjPe<8AhQNBB-Ay(qBx{Xdv>lCY&`$xY6q#_BXT<4n5Pjuf`AEG9az>%3bDo zteb8)yhKvx?%c6=b8ePnRs;Jx1=hgDYwix|Hxe|_U{uE*$IE3dRFtI#??Ez%2CXu;wO1%ygoYQGll zRe?Npf7-<)=sBnF@1s?@7vff^QI602@sh@aLTFZiM#2X`4Y`4_ zr!(~I-uJ9bK^}$~FWBqeT4iab5g6`AZ>THM*=mnDUP)Qjw(BcbJS-QO&r$Wca#$#N zt&(?;J6-iXn)B4w8~e+e#8~C{}NHufp;~H#6^+Wdh@?;Bfmap>*5S)(l=z zD(t733dnvEWB<+P$c74Y*!MIaBM$=%pVZyYe2f(&%$WUp(ONyu*LOB}7^b2vQI#&RA%y?fJ`%kC7q)r%nThJ|*qyre-M`8mcpRDV#aAt}3a+xZsZ z-gD;3TSe1{*JX?ZNhI$zOxJ6nS|UW!kg@s5BL1u*xJJ>vL~mMlN(FTWngj307=)6F z5+3?X0@aUUDz;y6HX0_9X{y6kI35el#s{hw62T@GG+V7Vx3AIzo%?!3G=HvA5$sUY zhQ8%Weala2NKq4Dov(V{N_CXbPM_F$qo#vAk@nlEJktnumaQq5VHe5{$&>h&vVe*` z{l-%5HOzqoz6&i!0hO4wbf!_ajaqoum7NYWv{Pl7;^hr06bm)dvj;iR#S_jg)c_Ag zUfG9q#f$XvaG`i8|BHIT{slY}7pNERV?gMwP&P*gksby$qJSFFK@FRs2K`Y3S*X5x zRNpwNe+4!812uAtdUuMN_=B1PsOgI%&ss~7Q z0f}}X_8OpS0O|!mJq4%=fGP*5GJq-ts1krG2B<=SdJItc0F?_+g1E1L_x}r>e*xap z|ED=5g)0x`0J$8Xm;;n^fNBoV$N}0p;Cc=)$^oW1z#<1&<$#+xz~=9@{`=G-_Z;^U z?hOWi->I7ebpG93pp$p5lMi$r0o^A+50@L^fX-5&Uj_`yfzi`*lPX~G>ilL6u*cK_ z=UU)a3vSo`rR*DkZzJ%>Az{rRumuFRf}l1K^ycCQzC91@1cBY>K||o)#Chm@5V`s)uon8A-hb=@Z3S^A&k3FQ5FVF8Wzpa?`)lj_ z@9iI_-}cXboc!54{j>j<{=xxZxE$&q_VuqU|DOyBC!x4#2jeoR?LXklpYxS7u=pFy z{Q~31VB`pl9)ou$xO+Zva>4ww{x^~$<+Qi}P09X}rnnwucVw0@0Yi3&57A|es%s4{ zkdi`<{ogY0B?&W!QFbd?cmJ*#|reF)>q zD5^77#^C~$J3+_=!E8K!hHF12@PEf*)5ZI(oR|0w_gBpZhEFoq)IS)ZFv`r$D46TW zRQWu+On3qDr^;->hXglfi2)}mt-`c-guugV_2ECnCDn=jCnLYxO1+ug`O48>qyK69 zJK3+4cm9WQl5BFH*1~(xAP5`j4->}JiK*6fIvh>-(g3O59h5^U7 zPTw)t$v5T2qJ+6IEL8EG-FgyaGKhG&{Q_g1NPG#Nao(RD(aZsrO|gaO+|nkP7?gX9 z^WkNAnq`&8H=7HyPy+|#0g%j%8@)iTv5|P|w%7H~xlBT95D46b~(u^3k_YJ1O&g+1&VOVrGXSjrL}n3_}g zA`K^#73Oj5R!oHYkjWV+yoZy+T)SgmHK|Iz6HBv=NOmO{jP2pscf=SE@UbB$xJ4Cq zy01r;OWEc<8|RA{cqNVukC&Y3`hw=4A1Npmg@n_4jZ;{W8fNjJ{K(|#t>QEr(qi$e zGA*C&LpgKid@Vr6axi}K_*F&Y6v$zyI)OqpO|h2zEjr~FSGMI;1UYMjSc_Wmwfe~g zU>V9ci}sWR#b@G+KVVWQW)@1w8xj-yJvgpnZ;QXjZ}?u@x2Op`#V#*Yzw`LSmBBSg zSN=6ZZb~3lm6rqJNdAIkKHlRcCr9eLFCVyHJ(I{8aoAC<^jdwRI_aH2UAv$mcBi?9 z?&*j!b>6K)bi%WH+^w9FuQr2)I*?5SkDD0O(Pk1{OPAO`#S*w+$eiA8jys@X!`Z=i z)I_-a1f*aCF>g`gwRyLRP1zSoR1Bh0%|@>%Pf{A4E2Jx~onV=*EN6m98X~s+1k7!X zY{=;Ml@m|GticwUepN*FEB*-=4p%J9FVu^|Z4G-LHkC+Wlle+;^i`B5**k^ywM%%N zU#$fa4F~#4-d_HQ(Z{U0nZV?0Q)sdtqBJ65q~T&3c!J-QvZkn%+PF)Vm3CO(2_uy| zrZ~jMyiM4tQl9o8p_`PY3|FW|eoS*D+6Y9mbdjhF$9q!*^{6mZS4Q*PH>3zpA(arS zWjp$6Sj-wt&MI!N5tkDfw-??|4*f+e=_#D-BOWOS_2yQ=Xm>s{i^td7PI(0Fb)s;a zR=HPhn@NDOOP+NtQ8G;*^`7p92c*_Gn?+<3{61FP2tS~9!!IRh$&d@zb!C*^e21YC zBlGMv41NWyR}^dU*rIp)6>GVW$Q>nBV%w<@;rc>3qh-Z#&zk&QuRg)8*Du_G;B7^* z8C9a|vLBy_J{$5ie*kKl-OfspIOv|KcDkYbhQoX%^}njxV|kUKgq8Y9f_Byr=7-{S=xUatwo{x+n((SH2Ufq2h47O zQ{w$NDD}kRC8C?ZGs<}B3E4=rSFeAuz3P$cS6I_cD}@gDLtxcYUsHak7@70tCdu#O zwXkCZ28RSf5k96~HP}fLU(r+6BDn)?!K4`U1ACITprD7j%iTVd!+o0@jcO5L+g@?h zM8j-{(^BrF7EeycoGx8OEJ6iMP(vvxu#kBBG-66FYjzc>QdscWE5FMij|#F}kaxY( zagaNipObqrg|4gmqufIc`nB9uj@#_jEwgr*FVme-ev|6+9qSG#u2zX(wi?1Aa9PKV z=gp)uRjcVxgfxrcCf}&*zAGc9OtW_cH~8JYFc(SBYyOCg&^74_QMHezO=!Rb`)7k< z@Q$H&?(SHeisb&7ayf%sAudCKXuS-UHE-eeFn^d}ZF3MBu*$sEbiHluBNO?;Ef9?{ zzP`@NIL9Ka@#ykOoM*uJf!KDKeoL2W7ozMS#Ev=0)`$H`0S@H!wxp-*nbFkDODL6_ z=9{O^C)Ulp`s#Jc<(P!L-4w>2$5tNEiN!f~-KM-OyX~w;)X$r}Rt3KlB=6v>%vsLaDHu5m+x1Ty<46#|eyjQtOO%vs?9AmzYJ_belm|I` zt+p}S!)jLJ^<0MW!HYUNQJdUl=vIPmytH4x+64?_Dl$UGVS{CmcE4ZYFrpUZ(9Z z=5qCJbK(asRyv>ZQOo|Z&hrpfSa9s5gxY>s-jFL-C3Y%5lgLB)=Fn`cPh%%qobP7O zS58uQ#LJBoN#`PLWCN-t@_yL{hIVbpp;ZaJMV%#I^}uEmrIG46DGgzP3wGPLIJ}E> zA3fV^CSs+zZI87Q`#>w*lsn}-k0y+HVWaT7kaKiX&)rlql_KPX*W_B{!&MXzX(w?i zX8RGB@@UwjK}@#CWguc%Y4$ZM-kVAx#n2ORL~`2JdFwL>YGPVc-K^5jUdm+jd$tS5I16amas)8kjl4NP-QGt%Kj+oOJ&rs7K zXbpuaEk~OqZv+howovqIn8*>9S)s$p+0>b`i|xy}wYj9a$`@zTdW4LyJt-$VWj_$s zf%#>?fsP<++ZVF)$3Rvv0oX=Zs~VhU)2Z7D5pQB3N5kP3qw-nFGnFVPuLdPz5)_*q zlt2#!!tj~GpqKC6(vO)ki79G`f*aN^wNywrn|WU9m#i~`e~xerbk+x;ROSnt>HC8Dmi6xjC&d2hr>1^33+E!2=JsEsww1Fy^UQQc2;BD z{bF0!g^YQ0`Q}9Xm(?LfM!7!HY%3HCShA-P1T%eDNCvl735;75p2Of}{3U!&l`S#H z(J+S}-$y$k!yNN1M!!u1E;s<6pSmOAXh*P2`UQ_ws*?0gWVrhVHm<=L_0x%*8^u4# zKdF?2Z};$1HIG5;-H<54%&f2+5_OwC)mx<+iKg&5RYQA*kh}f>V;5_FWx(x84_TuT zdB-lr*pz$bzE%N&RjF7^IT!PN^8lGf-^OwWn^FR=?)#W2TUlW`1xk@*CnxKXWsjN) zoBC`Q#v8g0QUTAYgjVfuPf&$Co>M;L&?}i!n?>4{4tN;wK#qjnj(P1^)A<`1j8=(x z?ivd|=Om34CL1+265VJ08Wu55Y4U5ATds$^N(_!R=3wtJpRkWUi6m^N<1o%O2-(PL zp}Q$qnfVK2EB!3ZS#SppTJ|^JM%)c+BHc8|z8y(1jv&qMFnBY;y--LJ z+|2;x$WD$`y~*ftjG!QGkbAYqi1sZuMp8Ii*xWZ_b5c|Mx-3~O6~^U@*cTVCnl&a! zL!OUgY>a&kiC4(eu%u5fv3%Ym_d@0rhck@YG^85fOJ|`@LUVG0D@8kaWwZr0E7l01WCDCNUyG17!{{b7r6&M8O#egzNep=@4#tXnrBfmhbiX`34UZY zS*O$GWn4?@R?PF+o9#i2&aLg@kbS0i+!1+{FR!04IkdukJyDRnHfzW?D zZ4Xd-vk##maq#0;>X79KCx)hcYNg^wnvfU@*BFpYM@F7QsA)V^{Zwcfp?b87bfi@s zQ_OFvSg4OXVDZs!R5?0m7b65xxl+?9W2l>#1E{X)QXzG_RG_pnp#*kUaKQo<4@R!f z(Ynuh#BDaE50=t5i-zOv_Q7`h@Vxr`tos8(`voWZNJaXC7I7R`e`Z)BJR}hw$}$ig zIuI+@hYf{C6%0H)8%Po8?GB?%Vj0W|9n5Kq&h8(`T^xLTHW*qnc-e5U(0ZsmbjX5Z zh)8Lua&hS8*^qM4&>iS-z4dV84HoKJIe1m*aNFW=dlhA~0KD~VxW{_r4aV8 zxW@ATIXKPFKLr>uF);)Jfx%$^lPU7@@(K$JOG!zg(P(XLZ36=XGcz+A8yg&C^Ww#empBdn zE1U?wwyCKJS0(Q0=@}Xt8XFzMY3*m&)N4Eg#?(E^wm!z1@q^1Dr(;rv=6x z+{y=u*`+Tt`PtaV9V{f&$`&~e92t@8RN4h6UMsb649xaxS*e_TCam118FSZ4l@qzI zyBFk4t_?&AsLz2iSw=)%H+cQz9C)v#IQi)3d-+a?Ue(kL}dRLhJL;X zL+S15>22u|Q3&olZr;L+m5y}0RGsvtGv;)!0Onh$K}A%D1FA6&^|A_8K7cCvh$`4a z<(>Yodn%R-Bys_+mWnf;$>jpYzuq&|T%eWL4tqEL+L)!lWYn?#!UyT)~5BWb$R?$fyIt4Bs zC;k>&-vRN_i*BpTFi;#mR~`ncL+2WUKyv_S_XFL2pw|ZsdVw)cC1TPJOk06@E3j$< zHgADl_qjtiaOnr`1K@Ta@a_VBZ_fkTK_D*J#D$!#=YhDu^YwW^9q_9LKF@(qIS8l# zp`{?a2t*ZvxW^#=5lDP=;b^)j#TJ3QV(_@+g4Qc51JBCNUsQlsrJ%ML)D?mH5`bxX z23lW%_PX=VCeYmqdfUN3Cm8AhV}oFN9L!FE`DrjW4Q8gn_!JnM0z;GMT~nZC2Gq@h z=L?`@5fpp|S<4`K_59%~c(`_+vIf%DLG~B$XbTj71!ddd=?g{4ZRhoZ$zjCTXy_%KpEldCVbY%2r;J!(EJeZ8~9=Un^8sxtYJm)Iis-YS@~oa5Wd2m)LNJU_RN;`hHf zMYM7h-EXBMQ$2=JorOC%26B$c)S#>r;vXhiV=o;m9nhQD*Qf) zu)1}ArjqQ%9-2Lj9;!|+kbfbSW92j0d4$JBv?8h-_`a~|qca8L;ke@pElt1TK27Po z6pCjSVn=knNnfsLAp3)-hSouLLMo$JwBKoH^1x6v9l*S>)+oo@v>x=HOk{r3agaPM#tn^0Q8$L!N8I=%Yecn&0 zb&s7L99`J%7{ZMTayh@JJBN^Sw{Xg^k4PtmmI_5u2=VmIxYK}in#y-6YdduF(%T=e ztU1F2=!v{b;rq!#?aIaandLYA25YCSv&NC^NC zzMs&G(C#?o$|lAk9zEYtx5J&!;xu|KpD%4xfy&C5qV9Z`GcT!|qnuA^x<{qj_aXFt z9O`#faf;G3e2O$-^Nz=cf}o2)O=#d5K?2&V)Hjjy!OzM8P&>I)H&mN4scYj6ZQd9Y z$!1xFnUqQA9E`1m+71zWgh&q7z7otIy!(5tIQ9b?@&>cRUL5YD}@i0gd`|nSEvM1`U3Bb%($j z%Z_;x7GYYw&`~b&d(}*pL7Y-6b5NYe5#gl3P!uNZ$_(o4qH{=UnC+e_-;~n*G?O8A zIh1yn?~`zb4NEN##X~&SW~rEKj&sjM<_xrI5{&z0yz`$HL?AVY5x$F>`tdvqK_;w?EC#C2z#hL~l_~H#CF>Y3s-oJ9Rk4%Jkq; zY|8J4l?*5twKLLi+!newP~T5cxEflfQgXYTmtS1KGnG)TM8(~={kuW;!n8F^9m--cBEJsP$^C-S5 z23_A2#=-7-Pp$*AQ-pdrp+ySM<99`;l(9HF(=MLrN&KBxXC3!m_N$oH!jzT$#*rJ# zy(fshOr&mxFaJ};d$1ewK9)1eZT=bZZ0f}(3!Ex!-i(gQ+Ho&X@7L(MifPCXMMeyk zm4|}V!wVeJ2{R@ZGY-|+BE)p>oNe4y7}u?gzK%fC#IUj+s{J|DLZ4vn6JDaNv=j`EgITpgx7}o@AG}wjG|Q3PBF5dFnMB;p)0tR zx0G7)%&;lz+Ku#5Vf+cz&qbTm8n~78Bct&AE?~>s?yDe9Cz|{dne`~6gjAytnQN<~ zR!$;ep!IRgA$~48xMQ%7TW#FRhBdYcGlxvp7mf(IkN%kJW)M1!^7wYZ@m^*#E5*LA#5G9psUVl)(Milz?8h(H&ODv z%`mPlRQJK*UIJMNrNlx>?+M+?5=&fAlBB66sNZB#@v)q@tCiWi;j$W?vOnCmV?p7Y zS}!=JHIk;o*(L4ncFXNVuVb}|-3i0KCQ9Z(%ue?^@&0AcR#jV{f`RV(D?FQ=x`Jzz zJ2V6Lj5H&-Kz}qr?)WN+5|COX_~lV7tg8l>N+I1|245jJfDh~h)+a67pNh-U0NxE zAiGkP6$NFxsfma&FFSCYUO&76NomBsECB?*4D7?qr3wZ?$=A*K;@56=#dh%E4+cBi2$zy7L*LYa4?_W@k?>UBQ zPN}5I$1fwyzDmT;+bld=q0*EMH#PI@&UhPfc>QDH>H~JKpU=6AwIZq{FhhMa_B1r= z2}_Ty3ST7o{A%MNzYA`=-cj)6&7fnM-IOAmmvX4DGuu}9!)>Vl@k5tl&ooA$;^ewR zns^9JpUn(~M9R*qtJve68wR2!T`EO=rQn10sDvXG<;$`vmwPaKi`Bu;7N?4u5~MMA zJ)=68gJ~;9ATEV(9xzkeNMH`b6JQaQI4uVhp3SW9OFHN!)I@0>tnTnJRaFYbjuL-B zk?y8YulRyngFeTFFqNdH*ml43`m+f#f#_@P)7E|AutPW*Q7YO2C#+d%u~>2xC}cv6?EDjP!dKI{jT~;ljF=U8G(vyg_-M#1gfVe1?T3eMA~Nexd!>8= zuFm$fjOmTa(`kl{*@-zt`U~ck@=Yo|C)h<|Pr@ESCTH=h>MCa(0U^$@_ZyAv4m8LP z@vPPnW;yI{3|xpDw0+Z)K1cx`8}ZAZ85E$MsfH1g@_UOFM7NJ|4hW#(do9z)o*@pFWOJEDoLRPPuXudkFiL9#>q8 zEJxT@)x&=gM1^Lm+R-uI6czihEB0s!%1P)4NhLq(AZI6)_;Sf|bqO|c;x@Ua>^^z_ zX))jH$Sa0i3FJI_k7g4qveOl`G+j-ciun?VMZ(zNeGM#9XQ7gJT<&8lbi^X_xLvY zisdem(DEA38&lx(7;vSLk|R;uvn7=xq{l`&*PfBm@(P+(Dn_dlzIA{+S{KhJApYV- zn&)+GdqVYXSVdD!2sn-iKsvG&AV}Ai1Z44xuhZrea78hQh0RZ)^`n9a_lh{km{%G| zF`-l}A!gp4t2Vv1VR%F$lSVF!MYmMC(wKJrNjyfp<5|3Ltd~#ZB1KI+vH2- zULh4Kb<&q((vA4EehWkMY{_9I6`@}%R-`V!>Xv6ufj)P*rF)Wk`L$*LQLG$&QKO5= zmu~ac%W^^5(r;2obKwtIyHF7=e9i-bBA7Mk;Vy+@I&*uN6tOwBO_ajZ?RJ1B_7_o6 z$4We-W)THtlF@upz&_qjTB4U?9uM~L)Flm`#iT-Ai{C0saip>Abzs@OpbIrg9_iSA zrJAlwuAvc}CvX5IjpZyW=1#7$jJ(9-OC>kLNOZK9x>G~(%9ay)!-??Fu}cM(jIk%? zVWe+#;KDcIf~C3$(}bFYsQYm74^(w|2b}KJ((n8Z zeH$-Pxqal3*$mK5Q2fG1C)7RR`D8s~Wba*eS7hx+{ibG-M{E+(k6_ z4R13jy_Lj!TiDrd>_~mo8vNU%T`atP>s~bjWd}=m(2wD_QsEtL;ct2E3>i2Cq~|)I zx>Wo3a7-N)6|@5;&~a6%169<{xYtQzy)ANn`)d=kbo z5Ft0fT?2zqUWz`$!$S`wE?z{Qyfv@{=wOERMdXQrbKqjn!GguX@G4mP&S0_JQ0ZCU z3;0l3!O*j|q3|Y(%8{XJmf>0f`j>LUjiJL$JG2c2e-Vy zA;YVmU0ip+9u{3KW^4~F@bJglkVJ; z=sOV`Iu#rF^G{oQ;aBVXn^WOpE1VDf#a}IMVYU)2!Ii(O7?{7A7%n$c$^&Y7Kr0XE z<^jDta3ddB7Jyp?z^(w;76O}cV2uOt>VR1@xY2=2tAKGYFdYWwW8mflaCr|r=YZD& z2v`IUJ^}0}5c3hle*}r2K;k@z8wD|4AhrP{JqIZ-K+X&Bs0tLn1W%uV7nK1gW7MP?mMXe zn<2g41c)t7@Z2Xm{ zVZP)1xL?i>x4_ZXMUnH@MUfL+6ghG7Z(L6k*WknnaZfMQix>BAnG=^G{kPBg*NOYz zBnhHmdBRup&z^?E<9g%n0ix%X-&iXW5Gpo~=BbWdiOgy|8S478-4EGKlp}wQm+E4$ z5|kTl!Ct&LotmHm6&LxFM9k4#Gqfk^^IOap1#y}aR|BbF0(!ctpUEFJqCd^a?_W+{ zdWIQx6oyue(OSO1w)H~RMd3{qKXa7iXuoeQYCJe%{UiB~zFVW=YjcK(2m7Rth{y7( zn=1l{JJHZ4ShbC&vf0({e}B&iZq^}`j@zW_?*i+3-7ILR`h@hlqhWAI@z zZNXwBlKExbgUZkOqHVk%g^Q0Xk}KFV*$k@EKSWmsJKK0x7dXF@Muib1U-uMb$b-Hl zUAw6Q`BpT?e^yEN=<3noJ_-LPsh|3B1WE%bVn@)`La)Y|z7#7rQkq$7n>0t8V0RPW zVs#i5O}^*EV9Jofp%@k-^e(b)0>ieorW`MLT7dk3oEZ4BZmRE1oMql1CY>Von|6>Q za3PjYrKH?LF;__H-J_r4u~Ye%Cyty|1jL*3(U@{Xf=#{RKTdqpMboLp z6sy^2p4UY%vp>dLv7_?C31);55U6n=kAz%-h-~i+Bu8R7gy_zxL{whvPF)ciUn05N zZ2ZV1v3`2r;akcC<5pTE&5*5~*UKHzcc{SM&M%;*oQ*d@?)dHDV`QdK^www9$8OHz z2LoX{ytnxWoK%*pk+cPu?dlfMPnSf;LS?x(l42oIKL^+v$Y`W-^AH;tJ_L(mS4$x; zlCVgHK8ukdkfAQOTIbVFONxZkjPfUb^A{1x=@NL2$-{5%ZmlCu312U*qrB2>m0fE4 zosY6dAIn)c^v?$_lQ;9H_&~f%tW1pFl~0^xTQZ#oq9SKR-?`7A?DRj|zmf}N6xIB+ z=**4JSrwRpjI;84-?X`jNoFX{w@`ue(zoP{SuUgyM^*VqhS%#N=3EWL7WXnmKi)wE zu2LOFP>XxizyisuqGh37GIZZvFhjXH<{M_$8szb{KvP1LJwB!MQ>k5chi)sZZB*`p zRHROW9c#2r49{H0mRG^^?B)9XrYkpHLK~HyHaDTv40JTlo zXCKvbIBK9d-qjb$l$PpH5FN#3Q3O5AY0(H%VZE1vCp-|CzfQU)VEW-Bgpm`{OLCXv zMM_LmR?*Y*C|Js_G3SHI7_`)TUUlV`#dDu8{Uv_Yw1RPcY$_Ug-NJ74H!LO;Cn=RS zr}6y>ls+S;D>A*7Fnl?0wc~{2+^>FW@F?lpVIm(^WBliPUm`t*F@c%0J3}h^A%%c3iV^< zN3F~*7FatuYd6d)O9O(VabL2ExF&;z?gnDoM~Y-{Zp8jRf0TrJJcCJy@#O=l?K)3W z`J|QTs-Mr-l?D8CrN61LKAu!JVnmT({0(v}bU+`Xm;>uWsrsrRPDdqQYuG75PtdzY zLzL%>gjZ}C?FmD))eOGbHSu_J#=)KN!puzkA$08Q{7uX>?1RMNpUzZX2N%~U_kx`b zxG{w`Wx!HrTwCWJ<>ZOQIATC+pLL@-sR!cdyhfLAp;e2CQ?q*|E5P~Qfsvg_^D3y( zWGrw>o$J(gNN$&Dt;U zQd&nrccVJocQl7j>`AVIJs7bQ*NvA6Y=Di_fnlIik7B@E&K#aK`!gn1!7XxQZn&bDY5R`Bp3@SmPyNziquPIF(PzE-Jztn^VMN5 zu$Ie}2X0gRcSBR5L(7u~h7?BnPhWZVNCX~_JgI#x z5oJ1^J7d(nV4j_;qU2})o+7GsL z8X9<7{NogX01>8A{X892@0t*I3qa##Ivbk`0KV zbW8VX6*7wH%nX7;PI8Nat$!LMsqa3o`XGjRdar0kx!7_FI^hASvyXSrysK<#cwL;& zqeH!%jQ&}fw~4>f_Tp_qp^d6uYqplHXV%?pMO2%upJv4#T#}WZ>WUKVT29^5Q}fGu zJoHUnKKA*k2kq<@804gJ_5IaR|*|3jrzTS-A|>j(f*c91Aad)yXZNx{s>%Oa7P=Rodc%dvg=C!C5?Ut0JsF)uLml?x87~ zswqOt7$WVI{E2MRI-x)9?<{yjXAqXhbqp^N1bx*W9aChS`^uvSe5gXm0>ZFMxR<~h#;wsUnOOER32PP7Lt0fv%kO4Ztr-EOq|zi$(Xov|xtGK;oudf^ zRUHx@j!h_v{9F{(Fsrn3sNm+~1`PXoHXUfM`|~W&g*G{jo}($9qjYA{}&cP9DX6v}s8(t+iuAodmLByPMl^S)tf#8ieG zb>xAhA%;}08IeTWy51MA)K6>jcr#7b-U&lzs*y|4l9<4{knnW`x#%H9G zE;fL7L0GT^9a5x8JBOxtpMLL17)DM@C!H-`z@@fO7qwJQYx$F-I}$cCj!E#Eft#j= z3#r7+@KUgM(m{*Jx9i}!CEV)f0_0S5XF+V_B2II7iCi2}mK#btoCGcdDzHXY%OKI@ zYTG`9P*Lx9AHXk(byQSK7{?&YBCA6 z<*QEX4=UK=Y4{^`bXhM3&cLf~zQTBUFLsUAdCHjM(=Ke|h7{w0jl3xRgO0fIZl^c+ z@sfl$o@>CrbE})yKsO?(T~eu}jbL+2vIOP{Cq4=LqBi&(>1XD4NTjxJM2O-Q+n(CQ z;&senj`PDWIhJ_ANUg+4O^@(SWz?ZkJrT@pkHUHa=7;6Ihb6~+N8pC-$#^()xi)wk z&?bt%44%(u=2p-~DZ^E{%(FQO4wXHkzlfEiuZB&N9aK}eb363dl7*MZ-Kwz6u_FuX zQnsFemMxjL^eOKFA~9uZhF*lw5GTPSBQjo7+EZKJ0jkHb=?_lOJnfwhOC9_V5Cn4X z>2rz%qg|wGE!WnK2KYp&rTVeuj)t6dcNbSC@+e2Hn?xZ*NRKV{by#7GEp02Ot%O6tKyLWw+{fJWK0LWB?l;H=NElWv9;3}@ z+b6D|Y$5EWnb)PXV?=nhvSLq^!xDK3Xq|+}IocYXzG9^a8Zj_pP5Pz3_!EPSLKI6}Ej(tu3 ztxj5px{Ayzbl~^OmG{$j$-4&MQXqjdNs5jXHt`}y9Tcf+>?`5)-6o3qlnb@bx2_sAV@S$Fn#t0Os7BD-cmZfO@+zPW9*6_ zNcz`IFlcr{j~wWCi)fVi2#zjkx)Q#MEt8QzlH*fipjAq6>-c-gDP;FM`4$Xe)dno< zQLJR5Jbrf1MT)B4*7!tyvFVeveAne%5Ww`a`j)gM?YJ$??htGUzw{cDT}>zL*Pq43 z{XuqHDO6@a2*%80?wwWlj4nXp#jM@k;P9v>JI7cWiL@~sqnaj2rb%W z4(@LV4AOnshUb)P#fwJzYH9qem6h33Iuu95?|WnM^p`Yhd6s=OQ=!2J27!*WRSYy| z-Hpgp`8&+7>FpGKww20gDFw}6%P2|TfxOo5c^zV<7|7fd`JC#3Ra0z!Q@ku?%=4zC z)}~0E*FIM@sZvE#WDR|;irj-V`Rg=ipEl=1S}?`3EwQIfkslOGnVZtK8=v@y@J{fS zdO;i(BoaJYqMtWMb~k%}Xlcr5DNbl%Ke_(r8F0i>* zr>*~LU<-V^aRlNuVAVR)`sNce)&FR&zovV$OP}!tFU2r>GvoHzkr_zd65jus?r&wI z>G0q*IM}D#995TvDjz~U-bUs9LgoI+f)a54H><$yc3zDA;4Jh1<8*KusefZXxEVCu z#Q{4N|Jg$ms|J$wK&BbUzX6J!K(QMr^aA;QAU6o4hk@ki1(+j-8~DNP{owc=9Lw_- zh_wNUCLmo8e^ZR02$kfkhFp zE(SKmz^)XylmgEZ;8O$w3PH#d5dH+jJO;^+K;|Qm{}?=Z1d4Ev#UQr=q`w3YYtQ5B zLCov($ma9#R`8$=guVfxZ^8W@aBmQVjDf&u;Qt=@&H>*Afbm}h!Jol{C4gN4F{>bU z4aBd3gugd&4J6{4j5zw{BglFWN=CuUUeM45T6;ieAL#7^{XJl?7Yz4;mn1KXt+NEX;z%Iq-P_tbPQWOJI8i;ChC;YhZ639BhD#fCRIB;ko+#4gC2I z{@^Bo{)Qy~8C?7c&i?x3FY1Q4iz^uZHzN73_zK{bdU3DdA{1P#f@>e*+KITk2f)rB zu=VFZ9;}al!2B6_e+H&c!T2vQdIE-zaZJ#8$NqWCF6IIls{RIE?p$;K?q!62F8+t_=D! z)kXJwGYc#gV%68PqxhRFl)bfI@b^;~=CQeJ=L>=wF9eSo)3& zy8+gR<{WgdPBw-RmGM=6yf#^nb1FRWLCGXXc1CM`2&uhpKK z7E4^ZLGg#!V3T8Jt` zmi&2eUkrN=!@g$7rl&Tw=uCWSpvW+N4T(kUE@8H%Lv~8PU>m(nlC9t_&r?ClluJq_+WZUpFE(4OVpMq)VAttVZ!*o5m=IS8P<(vAiN!_DuC%{Mkv za#3C^k*cJ6G1CkGRN!U+RW*~L$J)*BOt6RhUtq~Wt-_Q9((aSG*vI*tgam2c?#g@anvR z@^{JNy-Hf~VpF^qFST9uU@1bUx*!#_jE`?8+touJweX&w^wxyhb@``;JeQLSY-VVD zOvtK=rw)}(H&X(S_IILDmWg z`lTY+ywMyDI!@H;qtOF)?~1cL$rtwB7@+1%-Z%+n!AYP3WZzv(mnHcZO*ee0M>`|8S3n2iZoM z%X{j7w{{3)p^#cUlad+~`pHFMNuU7M*^>H#((Ci03D*b-6sf(XEXFi~Oeatv>LY`w zcmWr0j=<9q---fz@<%#V@GA#YfGDI|qH~#PEXXX>Zvmi6kPwhf{{A-^gGG!);ODR$XW^|%Ml(i{cfazg^xJPRJs z@(<2OT6Gdg9tQjEl9S^WLwY$ZAEz0AWVDl)NKj+<+M=n!3+xop@q z-kM*ycZ0}5LZGN0bqXmJKKbT2`p7uB>~8N>j@3B6Cp%;Z85_8$vD>{E7@t-8suDuy zx*^c1{&tYHbVgJ3ZQ7UbY#+ZR!5#R=2XHsYoLD}Wuj|MphtpH;>h)|(v5n#?d3(}n z215s5ZcL&iYDHRA)svx!X%&&a@wd!*gAZ7vVHIPj2J3OAZ%Q?df<*#!%85-#w0Lpt zyC1k@xp%yaJ<(Q1e|goDh@Vi2B1@x<3soxP-Qijuf^hBg>Z@Mv4ub6lSHFkskwipo zY0)AY?}8LTlY>ZtyF_@7zbwe0By@=w;ZVtxwnBf!a~emT6a*`+Vv@LkA*)Ng+AJwl z!UTpxIt(WA0rwr|Srr`K7Z(g;&Z$kDpl?!_O?ayA3Q6Y*q3M1WjWv%DqGJWk>+S#y zncgjm%lJO$u2+bhvr(FOBL35-LK7ivvHc*;UHbXi&u3FG0T} zYqN|9`OweVHP9>wX$kJmgP1V-&XEDm)r*uv2kA;js-cfc34x|>-c-6+E8#WQM* z>G_$+)NnkhD@2MJVG+peMFiQqyH;MGVa}vQNz`nz!EQx?kP^nEimK+9^tJ{yX(aeq z2fwr@pHT70m@Jk>ejC!D5uzvw3qto3tuw^k6VyYM*tO~3y+RGljHDOF=Zu}*vop4g z_l}A9vV(L(Vdp*+{ed=a*Bt$`9R^ryVTNFJTNZKZCJ@uBu_p^k(*W>()wHXapq5cpHx2cQt2~318H^rau2&{E2c1<>FcXY1tX*?3Vyz{FbUldX|F? z9smb!-IMjktql3F0^#3!%g8!E7_1m~_|}r&gWGIzywv|a)>lx)uL~%O*$okP`y8rf zAnguH23iYQpa7t3^f9$X8(80oIMZ^ph;5NaB6LC_ouISHt6TU`HL>fBX!jYB|1||| zk&6t#E$))iHH6Z{P%qu`Rh~L&6FYET1a|0h88@AcU;Z2Txf$?M=`wYFK{w52gZsRMeEm(Ea+B~ah_Gj(wZ zjv-5rz6P(tk#u+3HQ*8z{?YNmGo0BqkTyrZrBSg@cGs}QXLlts)TN4L^o#l~W(q-n zM+2Ubw?F2S9{nMySgr7f$yXJEO&>;WPJ>;pX+i@bHSxz@k|2WSNrBNOP(QVL+M;b&aJ7G9> zV)Z-o6F?$KNubbI++l9ES{uP`2nopLfoMzh-hH+D$<<0R8}{E2edppISd@z~=?xLfk|C%10X`^!`DAK(!Hj zIr)v7=6nAu?vqr2*dPtpd!N)@k5Q~v7~Wd4&<0|ci16wQsNW-uD>;ns@?DI;2eMG& zKw^4%TK=Ix?4|l}MG12x+7u2=*>Yk$tq^)19r;89wsc(1;~(CcByp`C^yfV9ty8E6 z^AfkiX_BA`k&`yAUgz(BTHr{QDJt7)R3qX4+OuuzvzRiI>)i4go+D)rLg}$(>yXCX zOENoOP?E|JNQ9U!L5RD|u*>L4LtSHg^RT}qMIk~IhLG7f8Xds?o<=)P;&|La+e8~E z5LZatd1E-uAvD(_YlJX~W|LQAJD?#QVoEE?ECZG7oX7ZsW44pTAd4W~Kj-kOJ05(d zF_eU$9`V`$XnL#ShE;ecN=2GWfr}irZD5GNmm5Z1+s*NsNaVE*<})9us2rDLk4Mgi zhn@5XPGr%8AohrA!#4jG? zuV|p)Oef3f#LtHrNHn_!UQUK5jM8mOxG9PGA|NV98jdLtw#h7NO*}%C6|wIW>Ki_i zKf2jx=9t<3uTyrtD-tj-WUYo0QK}s=bQufd^28{MLLj&>armE z8z{mC4`4;$LMIwlnccLsQ{n~V@Dob&KZ5;I z0vXxeQD60IO$vUwO-I_fd$*68GlCo{Cyg?K5LJkTr;CJ{nU}v$BROr0W!r`P(-8}* zA}t0ueUO)hxYk7H>e5HSV?_9)Jo%$j%VMTm7r?w;8t)u`J38j%p)!DSw=zY&JjDNS z%1?2L)4GruC!(Y3$u7;~-t!Y$I0-?z7|LDVee0qmFG$y$6HP@HoszVZPD60cBYfF! zeJoM!SxW**z<4vIn2L;6rBCjrMB!^cl7GnXLBl zW%s?M=r@N26e&734FBWSaY}_a{Oi{7!E5FE8&LH08E}Ku55n9!Cw-;fj{`8bPOwRD zfXQHZ_FyE24gBOFcybUP$0n?G@UL43gCHT>J;~>p7l6XWHOvfF`Ve| z*R7KsJ?zLoTmf_IWDitT=v9l1G-i+3n~bC)Qf=gqbW)63jgEAijP^SW_xk(|C?;o* zj>6nJCj;aExOE)=ji z!SVdH?U?>2#ij;*)&7dLh80`{W=vzGkD{mXprNp$Ak`%$Rv;!6B_!Y_zyssq(BR;Z z;$Y)pW8q+7V`Jmt;lYxLL_|bnWMq_-l(e+83=9mctgKvIT!MmvqN1WwQc?;E3YwZ) zMn=Zw=9cz$ADtZC++4jpJ$$^qpg!LIzCHndK7oF|K~Sh~Fw{51-#66XH$1>MGQc+` z&@V2~FChq;6y%>0m@KIVhwkFtju<{A*zBkHF-%;Pmd0?EcWaq42`7h?0rO z(y8dLGqF|kvE`GoB|~xfUGbR>35n&2;h9N+3CV%6sew_jNePTd2@FpO3`>PgP)J5l zNLCOuC_6YXH#p#Pa6o>re?f?UVTgZGh<|aY|Cdnz@^JsENdMXx|Au(~R#<~&s(){W z|3DUWB-ekUAaJHQXrVNCsXTPKB5buPV!bA6^GEDsLb#=FL`7rhCe(><7d+)w|=e~9Op?T}RWA~x=;9>07>e=G-e9SUlvwAty|%N+2y z$Q$h@J53S`o(kvoGdoQ)(6~+*6yJA2poIlg+^n@_YuW0Ev@1~<4D4dV@h`}K3}kjz zA^2)KE6-O{s|Qtcx&8=`+YI=rgW0TCk-U=WAzdibT3aJw7F|MleShm>VNn9&A?PnP zWUfJsN$6G`IsP`QEWQ5JprpaB8kNn~M|vZl=H3?_n8oT4zB>jseJM?Z9{KKIX_c4k1+XgdW}$93ogxuA{_3e z7F^XJgwYN=789F3d)~#lKc6JZ^R+&1j)3Momkez9sTfgMy)XoE4C^W~py~90K}}bF zIuBXN7m1&ZQiPERr1$jiq5*t|kn-wHJvW5S?tw6~STAF?kOQI^)@X?QhTj{n?`XPT zQ|IhFKbI?6GS{?27&05nL19*H_eKN--HElOtuJ;HSz70v9^zg>DCJPV<$dOZ%!Zl# zsqNuidUh7e&fb-h4MoHHP_B~FzBir-r+79kzwVJfR!0L`;e1Q8S|sfVh6aOtj_;$R zC?ZJeqbQitCJ(a}O6M6@x+zn0xM~>Wm?x07Uh@6y4Wy=Eg+5PPv`fAt-$wKM zXsZkMo61d>dH^*HFw z{qGLnXJCX14pE>D9`DQxS!Ck^ue9^`l^xChzE;58m))@2I1wBOE)4FU151!6NtO{} zqoSf>(_xdpA!kZqVyk6KI|C!CrM4qdr_m@Qv82(6!oNsTi(yVfFG7k#g+ihJ{{8_0 z0crVW@R8V+H9sn98!NsySAB1;scTGvcT!?$nxy?;@tGY!ouR> z;?mO6GVH9bEw67ZZ*DJd?=J5hEbkvJ9iA*5|JpkLb98lkarbch`1FvbVGOSbeMT9E zvl_gWuQrnmK*49^9n{E|4#2<^b0s<7=nWx!e$#8oc)yB9NT<9c|)2#6-3?0ex42gV!OOFHm$zl*{d#22X zS;hh?#PA$O{?4&%zL^*PWcWC5RO2%AUeI`4Oifn63;CJYotyp)$Bx2!T!}A`>i7i9 zJ8HOWZ1o3Paa!LuTGtMP1|Zi5?=Snu(U_u;*bN=tP2ubEVYMzh9tZfKA|t`k-XZ<# zgY8Bzg+ojGc!=~G4}}f|PX&+4mx{TBnWLS9bC5IbT=a!zT6G~37x5rBtaqHJhljU= z7se#!`@zTmjbETtAkC=~(GBVh>ql{Mb9eLbbpPb#;p6A!7w8QQ@$rxF3y6XS#`*`v z`v)Zi1SJIoCkFJ z@-}AqIXz=IB;QHyn`tQMw^TExF!OcHITUSF{ z*TdU4!`rtb+qa|JcVjzu<2&~gJNHvN_cOcqb9)bq`wzSd)_FN3Sj~0LKcE1ZTN=h4 z;LUjA%Xs3?fOTO%2xZ=hWZsHrT}fwMDrTRn=bY$&-nY!#`B=08En1B%SxPUPE3KNW zu9lZo#BD);lZtuq0O<8jq%Z+6XQRpCRb*rSLf%}78ialEp9F^Zm%ru zt}gGdEg!C}9Q|B5USB=gSUcVP`Fnf)_s-_|*7n85?w|GjtM!BH<>T9p)4Q$nyPeDX zy+04f*MIq;f9{_Cz#8Z8fvbnV1M8iK&AQ6h2-JgS=syrL!)PIdGP5E&cYYQ2D z^PD~!H)yNq+@>Ce4t;RBzdFLT#upnf(br(Re4J6|o`g@+Qp6G?(F(?MmVtzj6zffi zQ@b5(hS7W~&6lPKwcU!Kj$PDKy#D6qYOflrcf4@elv#mK3(s6pl+ zdS`kjC=)me%$m;1{+0bz!z<1XPOd&Ku0bxY;k1BR1g^jLSkT`cLZ{{K<>rCyQ7bQR z1210<-|O<%0!0EsIYPq8!lKdt-6m&3YtJa%;9B{Z8PTM}*QwXM=?^^VPk$E*^6wh` z{|FvA0AD`9UknHr12SI#l`=rP6fpb(n3e&SWq@5V;FJrvM%NRqRi|^Ygzsf>oL7ysjV=d=`_z z>b%Y{Ogg3P(z8v8ND>~7I+zW8ATCQFkU~+Dekch;wZOznW4GJn*&JArub|=deWAH@ z46O$*v>PDFFBQHnr!9rvU^MF-d|xOxxw;<$dGZ`g7KjA|)_T0s?KRc>g4fE-#oATb zQ@XXPlx#L%`G&6GN5j~rbe-gL@oCwslqFST`wz{i3tv}0cmIKBPapZ&;rBBVPo(%8 z;kR}R+T|?y$p!K8tRtrn_sL&3vq~`Uvu~i&3VL{0e?63>Xz9Zxzt|WhA#kv-0~k+WSf(1M#k~prR(G@0$+ZH~(gRH!*L_^=01d38`mMo%8g?s-!V0v9>P}rhA;|yK|{H(M1Yq zJ&DQ>j7CB)>kOL>JvU0%Ve#IIf-ROSB+f{M!asC`W>1fF^QMl3x+$)k@V4p!NajJq z;Lak#XtBQc&Ps5-;Yj-43U&sQ5${eLBQ)M@+D@qFJ%aE>zr_!l!CkWTO)KI^xiTuh zOZ>r@xlne;m`(B2GnM1HSGJ$)jqLb^C&vew1blpa|5qbWQ&ZE?(J?kQwy?0U zw6y#m&j|9t+t4FL1Nu!ad_){QZe1|xlrQb}KU*sL|F@+uIL`m$xPh5&{vS9_%ReR> zn44w{;F$n;Vc?r_fPWMa82;?OR!@PABVcbIINAkHcY$BK!0$ca5@wk>1#W)<_h-Q4CGZ4eal_0n zFbmAX^I!eo|D1nt+|M__-+_5r;QtL2rR_=~QbUt%ON)k*80E`NhG1er8YfIF_z#$- zVAYWOf8B2|)V2cjVm0G`-ETk2CySXY{|lz+sqOuw^ydH`)$U)x^McDjV}kf z?A;o^tcJLr;`JIkEsL1=Vq(sYcvPFlMB_i_Ku`XhS_~6hO>41LR}?uvT+bcP3m$iB z?n(8uyvWn)@I}}@M=-lEY%__>YOBAgJm-NvZ^3In4zBViHA_!qskUTxPM#pK@Gw>9 z){l?F2O|%pG4*sNvI9>p`tj$DlLt4x#zJRH$G*S)Q>uu*?bj{Lzsy8FD_!<>tI)+? zhPvcah9$mlA_yk?G&NQKS#s#~d$vSC*RIj0{5hLJ-e)+C2`2>9(ls$mvd}2Sq4Z02 z+o#d~bj1>#o^cB>>aD8eUd8KJkvi9F1;Im-?nS!o+wbZ^mB|E=;yoz@o56K4(i<^w zD*9_~b(&w^h%P1TrMi}#T3`#nB_pcq?LkWs{rwM|9pZ4$YkD#B>q7yRi_ zOU(8~_4nMtbqXO6Ti)F(7MfTAW^F9_TU<72N7?DG*%edDa zc%e9+v0yn>@#~Z6kKiM+%jn891PN9CI+~e@w^*O-P<7D+Pnstj_K8lc z6lYEf)%g4Ad13 zV~TXAbH@s&4yoD8@V@-W11CtfLmZFXw0Au2CMevLso9O#$%7fHwVv3XOjLG_P)1R9 z{}@7ME`k+{Pg$@&my*6b_X>)67{_}|EG5U+k;tY_(-%Qyb6fm5KL^Xr+o}X8H)ilG53fxJ!L{YvOj4ACe%v@J!hJb#My7eW z6WzPULM}j*3-zHi>>D0P!*8~SmSK{=`9`-;7s&~;9a$;{efkRzyDK!W33S6IbZ2MY zkPs}m2;Z_yKOXcta{f9{Ks2N=)cT{3DKe96N4r9>f1-r3V%1`cwkQX&%>A1alx}gB zxsRgTUnlSuuJiUKEk6h&O7M3F_auoFP~T?i?_y|TxlM-HOId>8aBKup*Q^tAociAn zGR0fD?U_cms?e%yH6bilP0fBLdO9p22;nnHn}` zXsSZBo{2W2L3}R=w7y~_G)!qKK@&h5x4rJP2hsSi8J+s4EYq5=yMmmv4~s(54OEl> zI}HNBXdjDDNBQ=!HtCFqW}d#W)7Pw!x*=b^Ok_ZHB4R*)Q~;`yTu>+tH;d<6t1^TW zbJ@t>5y4ASPpvmN@R>3iw2Ayh z0&%domE8R!H)RW7eRJ5&T2FecavzHR~}TozFZt;Nkon4+^x%*kqJ9^rVF?IYk6;>GFX% zX)%ceJQde?F&=gyz zjrPUDY^GkL6VZaif{k3|W|&u&YPn(!-X68?R)l3~6d1)LNO+wc;PMRX;)(1Qc$i4( zhAjvx`9j}L{aC!W$gcR>77mg#@0zjtc{ZH!v(JKL=4fCTDH+R1WSd&z(kVwps>llt zPTA=AJTB;Q+h7kD?uUV1pxMddOU8tx4STXzYw|6ncOQ77W=4FdZJLwCILK*wEPb|^=Xu?6pQ>5J!4Rds<#~$K+ z8;a_*&1U5}q>Ke*>e6twMz&->bRBE!$gVhD+`p|Pp@HJ1ufxAf928;t>{Zf-{)(-9 zJtm3>?P_K^sieskdV1IHd1MeuzSe;JX(Ny_I>k ztwV<}XB7iw)=*TSuXNUHk$IWKiHER-XJhoKD!h1L_9L0XCmMNbmtJSp!PC)lKrzeV z(%FE9{Ab@5%gYJFEF>ozvT#Pi8E1bbP2cq*D7C71LvEASx1V)`h2OYCsNVh7q@gBm zaz_Z4h;y+fBQyUzax)v}VbVjv7&OlpR&p%6XE=eoxs>8P-3XQolJBEc<-=j@zGt*I zvEjAiU|eg9i0dJ@{Mtuvxkl}+;{Gm#93^aPlyrf#u+sZ*SMlU^olw189EF3e;`m#^ zDJUARR`fo`>SLl;K)ShMWJ*)0T4szq^J|NKWH`Gm+UTzE?`s6nX750dSK`Pk)E!wO z%c8#uf3R|VE~XGB%X<3xDH}yApaWz$=j#>7Np<^bR-^1}PTYY9O)H03q0AG|jOFDY zac(!wQ7nb{bS;1tgVgl9qHcTdtLo`P_@I{cGqIHYv|@^H^wPYi4A;@C4pkaJ7Mo^R z-I|`GGx$~c0?omuY5I5|dZDFWe+*`tBMFRGy#j}|Jn=ltpMy~^9pB}jv7r=*V9HRp zf1$32U`BJ}5Oaeb@@SI>xGDM-e`?u=)_Uax(!y0^n!a?$2q0P2R!Y1f(VeBMN`PYK zPqMKWdP*00Ixhs5yZV$SK`@Cx$5X=RT|PX;;<6>$W17@6^P=oB_9hD?mDb=yeF~CV zZ0KI_)zt?gSz9Cq;i@U-+(6W4e+IK)wMiz*r%uXvkjHq~oAGP0s6YlFBN0*)8jSY> z&R~(=m)XaHICv_Ic*Dtjp(Mm&5b7|wZ^}Ig%WxR3^*FfSU{-00>`B<{#fRJwdZSK< zbOouSU25fPaE!unbvSeOT`D?-P#Vc984-YaWh1wfn0ULj1*e5=80eT1{ByMA@f1`U zlJsIwEM{d?3mmC_P15O<80sMly&%HmarT&T^lwGv#nq;^AD}Qw2Cr;KL%$Y=l3duF zHOfDiFzwgk!#opcxS}FF!SPzMG4QYFs=51i{DVMl9~3apUnP3sU;6$E_Vd~SR4N#iPUVO{r91m+ z(#Fa2y}kI9qaRMzCo?N&0d+En&(se>?2^di@rkUF$xV`Is7+|*#Y~))85@X5K8Q#y zBz~GD6%q{7RzUwkA|7fXzMPuirx{EEmZx@=Et|*mNYkW$=dfmzT(E%O$*ip#O5WS( z@pGDrUQe{Shjb<(bX0KJ#U)iF*vku_5pZn&$Wo!lZO&x`1QO ze2uN4o#|$a;pjmT7N+Q*$~GNuzP=@hYR&(Yhly&y*)L(Z1;7csFJ??jW_yuDe+j|~ zPve#caqLdAZ6#o7LQ~0lbvzQ~sY%L=ZuvA-3D{2rIi5M`C|xixgJ7+KJXv}ay-nFX zi9*SIcDG>xhX^9h`@~FhrrWOEnD-b5aC~5A^7jpp^6wa3L&gh+oQz;*4892aEsuVG zhYL;A71*2RT?m#Z)j?;DP;VlFu142O3pfpyBS{=nRPVSiP@xy|Zx;v(jtUH++V1Cw zxkp>^@H&nu1eoWO*go$tH*t7&-{EPoWOLgflAH?{erk)Z~kSq(*FGC)d(D*|w z-WO*W6{nZJ!^$HPLPLphHbOnfW1TX?cAtvz3g#Hlzyh8(1b-Z0HwK_ypJ5lza*HQ= zen2(vfoEEAgEHGMVE)iRo0rJI%rFYI64J21c#(#MY=hCeK^EbTHsp^LYL?aT4rkZw zV>6iL_a^po-g~cPPlSYz`J4LbOV|@N;8jF87 zxV8wAs8d1^&TEt#O`{`Dj1QiLISQtGbA^h6k!DMPIzv|>V~;3eB5iv}b$vO>>`~xE z0Rxq}E42MZmMAW!9EfqLS?sA(g*%N(_Ny!_e~APOPU$Ao?@q9^fY?zD6NH;=4HENX zUh0b?xw!eqh(i_j-kSUxu+b1{9*A*;^J73{e8fN(Eg7RSly9P<@TXQ3NO$25yuA_zMIP^P7v?Js47d-9!g-8-*aLO6V##O zHVGTG2)7O%C(t;A(iTce{!ooPj*ZF}NwT7GEbsA)ZcZ{IO) z--CL$Pi&VTw6veBwErR}I(lfo5bpS6+#!kEah=t1-_r58g3CPH0Y}k^Akz8r91Gb; z_oYfFTI*lyN*4JG91J)diWgWWT|_=zJ<44qtz8tWU5}+*FwY7|q}vX@n;zy|$?n#M zbhE5>b3As7cXe}$^zfSWu+aAKXZHxT8us7^^oTt6NKo`5Z1%u>@NyVEGCsXZt-YY^ zUX{mQjgw9_ioaHuC*eN5>^`H%c7xWww~u`rD}81#tIKE;K3f;gzgQR8*DRucsV)Zy z3~*sdQ;$+QKD`qe&7|a6GfWR#O9JYTBJ3Bi}5PJ3M z6^v`m&CSij!vj->UcY_~6Nf}ZM8w3zBqb$f$Yf;X<>i%?mDSbNwY9Zj%xe=969@zX zV_v6C@xarYxcK^8$K@I3cd36{QfN4oX}y&0xRvgFknDbv>IEbR0m(5yViFLW283q- zff;~z65t*GCss8G@bm#ZFi>(Ezym`k!vHkj03H}j873U%|05{n{3X#aLwPd+v1~vw z2T;ugv_1p+p8=CRz!VmzDg-PF0n1{*stmBM25jm8+a|!a9kA^K97X}BX~1Iv@LK_b z)_^b=a|Sl6KV`xPjx z1ipL&%AqwtxCN}Q0=pZ}N3awXEI)MsTpa^f zC&1+|;QSmo{R8aZ0=xIX{sZvq5emQx+peB~yT|9h$*I2)s%Mx=1e1c;|I3#7M-$$Z zl6fu=lsPEd>T&{tDJu?!0tG$4Fh;W7a_tNzF;hCL3^^7{rLmEBNB^S{p(t?% zMwIDTBJmamLr#)+U=V~N_Ap#Ez^K3}6if-q(ED#Wa?VOU!1uhd0$uf%M^gO31iiNE zUuJLlMiLfQpby!)GM2QNhUn3aks)@ptL;#oiNFw6oI=j1h9gSg^|y>Ki4^K7E@?O? zLTT4xpD!1VPUu}vJaaQ$e{r_N=c1ho>ow$dwo*(*ys?>^U+X12MU}~Z580{yJk@pV z37t=Bb0;E-d*e}VzWjp%w=AXYw7e2JA_Blmz4m%r|21DQ_Tlvyvt%JrhX-A_+S{*9 z`b$6?%bPOOv|G&Jbq@1W?Q98kCrf3q&u^GCXl@!2js5l5YbS&e^pGMxBva0qxZGK# z)4I@K%})Et9lCCr5YZG9Xd_YHVB5$$6+_kBave%%MTSrsqhdxw3}#K~n&oE`6k=s8 zbyga+qC{z&{v=B@K5mb(ZaqqmnS}3LQqx_r6)L^DF(Vmy)e*j}&STr`Y$!}2=&5IR z%65tV>Lgf!R({_^FzUmgC&CmIQI#7#^SU~Sk&_4~9h1#aNn2C!cix>c+i%@uD`DvP z;}*Km{u{nrEnccR18<_@ft*0Qghq4`pzIM6$48`Mu5Rdak7_GhYIq;1yH$j*%(h!i zoL$gy(61s@fASqGbJItUfrnC82gQ5p4)Ij%$Y8xl^%~^q_=jkOjLQ@hAWMw$6MS;GM{NX9hCT3&E>RZPbdUq=l*CYp85)1S0;R+ zr#G*NO<G&xS%M}@Xs}AVOo|;oF=G-|+UO%X7w*+-C+6?Rz2;pgfD8C9yTk`~T9~|tm#my;A8EgCFU7I{8n+xT&M=|c zTLQX-&7a8WJ{!L+C?e8@a;KB=bVu|!W!Bbu`-RXO)o5UN05W#YO1SQCj>iU*El3wH zv7Rg_;V*l&F)rg4vJnHIiFEP2TL$%#&3go4Y(Sq}s9xB6Xau_>(Ld0Jkv&|_yGLdM~Euqe=NyoaG-C7j{#T_D5d!K|8_M$PB zD05Ag3Nsn4jAe_c_*U9B7eG;YEr3M#m2)P;0-Pt|n;7Q~M@O`mKBdbjS>i5O4H{eS zr|%Bnl83!`1&rd#~0Cok-OP; zf}HfXaOtNNu!84jmKVcWuVT{0VK0Q4PlbLpUSARI-FOr$W9>(s-pC^a#e8HL_0(1- z2tvW*qRJ^Cevx8CYwE=FsXD0UVZ*p`@O#`Ut!+(=@5xv>9<*j)9)Z$cQN!i7n{Um~ zEGE}r0&4>POQ2Ud)q*!LydlLbpjSoDzCxlcrohA@U>L3k**O$HBPHpO8O=j^v&CZE zg;HD1TiaZ@!gX1LJtD%^5T0UeWKD+EqBT+gXRG0dMk!lsv{%$-zy>**2(d=(PLueHGLw*^-L7BWL38a zqh~SWY=`Gx0EthfrV0$sXso{mBb9Ul9^;EURqUFq?V*hvB|*GI@Y%6!d9nJtTHwMW zyx(@ZmQE*he60C>fSI7fga#}fRY4d|AGsTcXl3vrup*PDPfDvMVJWq)+|! z!V-F9N#u;~0g9UAw5zHJXUA=8B6&<>kuu7p=HD4*N)@mu(o42j|4hnpSg%lA!pBH5 zPLYkax3dn1j5b1Q_UkYFAi;aNoY9l3p=>-o@mfSUIjW-h8RF$H>ES1cGC!Sf%+(BO zK?SX14@6F9*%);_uG3#~@nhDq?Dg2v`f;~Z%Edv=EM|fQ*)_dUQibkDw4$f&<)?W{ zWlpw<-?GSjt=i_A7k$A7QA3wSADion9}{|IW!|vlf<=BK54IZm?O^mXp+c4T6FEin z3xoh{s85gTlJ{p{NkjT*=bX(4gDBJ?2B?r*o_D+V7se7}G+Gazu&EI235+iX(&Q`H zB3UXcXo!Gzd?)ea14z(Q=SBLJ)xsoxtUMuQ!~j3~K}{tK(d17_!`5AL%(sl#DoSbT zbc^FTThE&m_+j#M&OX>T#D+;U_2#}i4K9Ic`ovf6Krp8+zcdlApB{umg2DHi28tWM z0p;n^+?^&H)4&N$vd<32XvASyMWU*_(Nks$xRjRuvmo^L(mzk$*V;)wAD4?!9_xBe z*7HU}z}EGlM2VC(h&siwE|2`TBXy}okf*Hw_>`4u5!N=1WZtZy>I*`%e7^-rnzAoY zWouSwiJ1oz%`XPu9XKJIOUm_WKWNnesa_Ej-V&bH1Dicr`Aqx1^}X%u}HTL^UkE>%4U*NlgDC&^yJ))~nuP|%X~0ZAI_ z#7^XDbfkeLOds^iQ{Os4alDk4j4@VO)*pk8wpM{5Hq}E_j&4lKyoWC4&eoMRUkgnT z#{r+@crG;B0)A@)OP|ms5BlZRv?p1;Rh+3Uym_7FdIDx@A{z}vR*#l^5?6&Rf$Q`V zkjANDAcP3X*~pp`NU-8c`q<+5*~X38^6%~oTI=E#9Z;})k&*_h~e znq(rTJM?d6xPSH~$ZXu(YtfG}dTMtmaGBL$*7)Pr zb)g(Of)%C`wdu4bF3{WHSg;kSWp-U&HgYQF3nUE55aE)zTM4eurZZ)DPJqx+t@(a( z;@E0YMg%fi*T1#pf@0q}>TTs=xl6e(TykE=N18Kb-Z(1xf|-wJDTEi;4r@7{fzH^_ z88$pEgCR!)3 zlG^k5f<<~%2uh$354{VtS{kf0ufzkYM66}apN8qz^LD9Hs*ZhJfyr4tqnEjb&n z!}$=qrj@L>I|KSBs;x;(u1gBZGVi(Rv>km}Tf=k^m}_V<7+;#^Ck}cjgm*&_{R%FA zY#Ph9AhmlBqn(E54E#CekiHCJ*6DB7`dxD63@u#uwOK#`h7tsFSB$s`>M6GJo5gzA zwfmVuR|&5Sy~$Ugtf9h{#2V|BjO57)=+t)Fv>OaSH-W%Y(AnBUL~k@d!@A9hdm!qw zip)&R{s`QtzjR4^Z^>VC>$}jYD@|chT_mALWQH*F6LI=8miTP%X?Q3peS*i`dqEi0 zNr+LeeRS|ATae+jvBQf%Y22CwZt+l|x5^jBWpv5I+u68(v1@#~K zyu&(dgf4=~QO`--a>JQ~yc3s3jI|&_h3s`w$tgk_;=Sm?m9CBM> zG;>La&>E{ZHKqvX70U2#!ItnZ&Ed&Lu&gZLxwo*7X)uHe*ng6-7;yolzoit{n;x#HjB-gzccrKe^DeRP!serj9<*S?r>XNE~`!~;Dgdi9a(a<8uG?@DFRvHRqUn%`sA4 zf0f0bL;9JZtUc`(n{9qI-WEfy@9(tx_Ozh1c0AQ0a{AS=RnZ=9<^5=p{Et~DUsxLy z$vDzPOjg_}z1fk<+Yx5fg|5<>-P4u7+4bUAS0QaTC@oWJ)m{FiyE3o4x~IE#v%CIR zcOz|2vs6#3RZshqp3c0U?w+3BO+-)subx3rTSlsP#G~za5Z}-a)v&R5bhCHvSMP#V z_atrKidElg=#xGNslK(IzBikF@2u>>KGBZUO_PY5xE~yB`qb0Em(YKFJKi*V)PHU@ zaP?%MO>5x$O^;}xv}ORHz3CA>#T~>59>mTcl=T>d+>SS4jz|m=Nh8Uukz&k9ihLwZ zFA^sVNq3E8vcBmPu~`qH^%6|f^iI>>s`LI|;=C{EZ&Yi{U_FmuE!nW@9$3jM*o#A0 z-UTf8CoJbW3yF(Po`r{pPLaikhmMIVoCU>07s^7&qLCvCZ~Gu%D+KhL`m1B}zocyb zs@Z^j6Yy>g*hT^SDKmgDC|omhV<)8mx=2j|np1%G#EpxT-YB3y0vHbgW`lrfA7I=K z=yw2yO@LV)U|kJ3RspW%fLAHtTMRrZ0)h*Hhynxw`4RB- z6L9$n_y&sEAdZ0_C%~^Sz;9572GsinRcXK*I-un5|3|?FysY=@=0E>{S9!qCg1>PJ z0H6@g5deGwfWsU7y~y|9Q$V0{H4(ig9roG8a4abtQd`*sUgX29NNT}`A@(Lx!7(5{ zZmbPyKhh7U@b**|)eJh1Ps(w)9GXwR9+d40FIeh_P4VS!Q25(4CT%(ihr|=@7*?I6 zTGCn&v$Q{ed1K<|8Z*^AOzD27Fg^ZGD761*7kGcM{Bzq zCUdQYTWsWs+Utc*?^r~>isDJ#JDp3Tte=YcMXX}sg&AINYvXF#*EX+;!;%Q&COZsQdXu*JS^mjW&39J z*rjfHGMQdcv=9%m2e&~a`Fc7ML;?@lwPa76Rx<<+#2qF~Pb9eCWHmhgu^+ShHqziJ z&Ll}9OX;;=DjqY3qaBWohn|KF`O>a{W4~%OCH(^{U;SLrDs%4C#LeaSw|k&L6k0$%U{#j?|vh zq+JzfT!NCSHXnjMD?~b^N9nE)+cVw0B=R7ZUeOWQ3WXn|oD7*=HaUHk9QICNu)rhM z;vv%mqqIHZAfqJM#2I1Qu4r$PhrR01THeIx)iKc_y9j#wL0ufu_HS;R?n4}Ypw}mm zBW>W0|3_&iYc&+Xo~#aQ?2ME5GH9!pr<*34Mly_cSrq=_4-^<`W(W~fl9QX>Tfjlq z64@ddN_{7za~~bPX8SFg(#$lvTC1XfP|t2NXG9(wS()q!!8%KKt#!M-M@xWlB7AIv zS@N2^&%}W|OLs)a3c0deMDA54x~Wa+$7;RjhCeVr81Y3=!lU))wC@%A6yr)JWas=i zD8RbxlGoZkz&;2E6*_EZAn3#i?TpCyXLwKYp6K}sn+9d49;QBHqiS=ou|O+u_{J+q zvYHmQqBsUsj(Q_XC|)2hNodkg%Q{K_9xkE>C+h!1)6#!kQhc7Fv=S{aGg&A&v5e%| zl|E$BI}SwDs>iVEJBcBa6D3{aFeSSk>NeV#Da0J2^ej92P#KshW^%^;G3@&vUZb(h z{KVWJJd2GV6y((_#%>wgVI>gVk3ciP)E7Q%cS(63rRF*eNK+AGDGKoeB(3p32DhBk7C{vkUf-&$93X;sr$JMlX13Lrc2-=+t9_AM ziEG{k;b5W4GO~tm6YoPsZm%tQe3srnJDhcOxG(UQq{W#pT)oa_}A~z zD&-(G&M7!tM@P+e~sP8@9^mn`2Nm`DVk59wP&;cXHA-m&N4mW6fqNqZypi zOVU^LAGr&cE+e@{BQ;mdq>W!($*Zzx7U_h^Ha}2mVu$i7F7sc_ib#eWz(WIBJ01>` zB4W))ztK^qbo(gQ23c$qk300Vo|93Yn3Hig8pxkN)Fk?&jwLSLW*ki+%ovBe@O}dd z2c=r-_3Sf^xFiYf+TEI>lSj4Eg$W&~uxS$De2(PPYiY)sM(3LV3IDMVOE~t9us$)i z0wxQo-O#d&Ph&D(U!TLeK9%0h4*DIJ<_T)Qk^YHn8+frbYb$9A#Y}UJ=E)? zO*IlOCmg&~U!bAX>i;aKvn@qpSl5jh2j)cZA?XYIH@l_GYWb0K{3}l@EkrSPREW+G z^>eQsf{#=xvZBZs|1uZ7#SbeZ^ti<~P4AS77o`!~Bf_3#Z+i2J=bo#>YKSLe*@m?TY}*ld0*ld`!Vyvu^960!;zS?mRQGFf)TVhS zy{?2Z-c$st%6>MiYYz423wYNF?Rh&YNeniRersD9ef6eZ5gUxnbo<&mcUh{oDKbGn z5qc2Jc|YZPwkiipRK2r0Y^CxLa=Ee0#De?slv$xl{eg1jg-z6hp~r|v32P@pX=iTj zpjum3d)=kMi1$SQApaP0JIhK*k--zx=S1GrSY)7v)iF zpJ?vwu_ReH5sG4Uu)?Ro6l`|A{X&cMp3$8Z-*wTJd0=_MpIaJkW1JF~hZzF5#6xm;#I>Qv4ot>& zNwnpW_=tS)#t=(JjKM@9t|+=@dRSBe7Ih^?Q1Z4AS&I!Nny^L+$1<@&zk|knw0`S7 zZq#8y=1RVGmnX?cmKrl#GW+|%RIDQ?Za$!pMUkg-mMl zxHE$cJqJ{@+mM4(!lv@O1WSacr+WY};CGBFK{ zbnL1AjCi|SMk__|H*lgd^ELwtoMkXdgy>!JWej4a#N7+>wF zOLL}I6=kbFQ%Q0{#96%AH@Wi*(>NjXkLMOIg&;$S5~;E_Y}F`cFJJRDA$sN|JuwS= zhH;z{CTv}tj2!5L#9|#|6XV8FzOaYbcV3Cbe#~5~41`8={17s3b(4BDh*v0&-O40? z_Z3yrshDmNc1a;_jzMmbckWSgZq0gb9U$blhYn3L$Z)?9J6OnXIL}{ntNMb=nFCxBz9F<-NiI-GJ|B(oy=q~uxkJ18( zkfe7KJl>UsHR9R8D(oy3?UeisR1}K0Md2edKJMf*DP%};GTL0(M2O8ZNL8vN`S~u% zk8fCiw#ow;#Ml`ENtds!BBI~nzjn_d9czHbR5scgyjTf4YC?ri}c}-H=JTx^;*qcpE zo5TdPprC6L+mmLYOeju@FxMtk^H2LG0o(>g+7@A}r{9cPgsfVq^IHCn>UB5^qSB#5 z{?W$$-(EkAx+B`K9xqsP3cRWbUOW#k*n{VO70&r7n)4g9yOziXB(njjY(P32kj)0< zvH|&QKp`7Y%m$RR0j1k7z;D4Hf*$}sEPB&-koae)2b9qTCwgA|&!L|GR?-C<4}W_P z)wkByU?Er6g-1a2Ed7poLufgjd%YQ@{0r7c2Y6g%W2UJD@ z?E%233$SeYbGIG=I8*{IrGQ%z;8AoVl&*oj_dOpZH23sRVdd2&5GQMP)!m8BkXSG?xQy)j&r*(9;U^-5LlXk-*3Z zFftB|OaY^Fz}NyX_6it!1N7|zU7r9%7ua(60`#2%17`pdGz+=_#xHMOr!Rr&O8|5Y z0ySqBz5`33cM#Z10KKPAft4d*^$=Lw12(sSx1fE{2C%gbY;OQNo523N8?D?=pq0=r zaJ&b6*#l1Z|A30Q=ivCy2jCLC^l{s1`0*L|bq4(U3QkdjLb;$X_01H}t%}IMQ$XN% z;P4Nqj0pTI>;6*a$+0!@%H!8` zQ-%TiJ|$~s_j^n+jy6c&1h{K7X|zq#Y$B9 z7koyu)mU>G5He;=jBW?w)czr-_cUcEJ`WAI`M4eLW)RXm;5lTJ(sQ#JX1>yW!B;)D z*4B-|U*OVS$_X@Z@XG!)pGcYIWm`>1t3-GkB@d0`r&oG#e!yCegxDI$F3@qr3!nJ2 zB%2JHL*MgPg|rg~)#W^T7wP@|>aDei#&Vh>Hcu>J1OhkboPZD4Etbx3sqBy{GUKeB z$di-8$-xUPPJKtwg8y}P#2pK9D+Q;5aB3zfwR&0F zURQN;VK$@>M4bi7{`&r2mxxP3QqelgbN6nOeMQAostLKlR!kjm+}%4)rWM;CN46Uq zLql530g;0SJz1zEc1|>;DsrSKjxEyp<6m`H7)24~s^}wN?3PGbO>GwGWk_w~3qfL6 z%fIB=;C=>ZC|K}RqyMNp%t50@H-==F+c`iQIM`~mQtn)`8Bj2Po#SY7tW1` znWz@n)x6Z3sw1*uBOMm}d4gcrKvOOxL)*AZ=!xl<0oDe#Gv`L*;8fkaGFbRCk$1vp z1`t=$(_d|5e|gMLILXGJ`EjpoHU)%lpwH-@^!iQ>I1>tgDdGKHnkd69j(^#5@))@Ebku3a(DCK+}8$w#i{O{uA6v0gxH)6$iiZ zbg8IjY5%WB4v&x^hlZLe|<5F{3veI?af=Z9owtLA4(W(i}&lXfTbem+GznA+W z-lL3i8E(k-(@{ozi%76;jhQY8;mXLQ*ywsvJ;oy%2JtS~OLSWqr8y%O_z)r# z=znd$n8^J63eQ!UfowtU9kWKQ&_b9@7};;Sa%`D%C}uUSCb~$IM6gH2-NMX7mdFi_jjGK+~LS-bp#f?i0i26w9 z?c8Mo_HqZt!0Ke_{vtW25g7A6TApdBU)DW0Os(2ds>Z^caI>-I`@Ja2p%>u;_n%=$ z&;W0+1o%5^WZn*O{L-fvZeO2$WC#s;p-^Hbehh zME@;0bZVq#4QA zMH(ut__>w1XidKl-6Kw*+F*-r?=B>2D#8msoHctP5lKEiv?R$sPUV}ks!w9sJ7?1h z%iADUSj#{=jH{8~A5wu&uT>Xae`SNWCQ4Vjo5Z+j)MPr~=u}-)k*z#rL@;S0@xsXH z2dkaA`l!^+WVp-(*CWIgFEMoCQ|-KWE)9rikIbcm#t*~xG~dZjdi4{_ch$EvuSfvg zRU4AV;rUR-0-9Q=WOg{k7_Q0b@rE3aq^?`z6`8h59CvMtK(w?N6Ir8mC8`&QYRiZ_a5w1=d&4k766)!R%cFm(qnUHVx7$sT(AP zY_VeEc#-eT{v{Z~q1^wFE$`X-Ex!DPJ8pYJ8SqWM_{lk;iTzRF{DQt`ZJagi+}I-YJi zy)U|czqodKNc||Ah_{D%^wp{BM|{T3;dkYDO!|w@k7cJS5ZBdsIv;|wC^;%>TrqGo zc}Dl5kZ7uXp1cndJ{&-c_hPQ()i{Hk_g0Ear?l^C*1Yw1&zAYMcEnQu444gp-fs$! zAabOi#A)8dreCgh59=He457AfWFd><=SyiYV&~js1uwsMg{9gk$!>1+j9#?4%laWd zjtn1&+X^?+AnIyzm4g^*Oar4a^N#K6oZnrRdt{kQKD!&s(h<4QlIKEe{VU{^lu1Wi z!}_OV%Rj4$cMGbdPYo=zH|IZ@Q%}k5*~`?u-;Cz|Jp05V2)8D^t9(H;rol~Qn{aAG z{Pn@;+?S*=x_R#IAE;Ses)CSv;>v2H!&u_JkjZf25BCwj;*aFZFYn)*Yiis!P{pEW zb0#A+HQv!c)r#nNGfp^AvL1;JYYZQjEqkE=4Ks!GeypoK#-TLjo@yWkW=NXuze-yD zA>F1E#nDbtC9+&S>FXSJ9(lhb2|ezqPUS$(QN`dE&OnGB9VwQXqULuW5p`p^-%s~c_5+D=h{7wb zI(xdEZ!$~z2Erz+xT?06Pz!AP&<|ubEX0g#T%4U*VW%VNr+!>@6%?_r!(>gU$F}f$ zTu5QqST<#$gIR)Ti?(8*4bnHRt5a)qcC$of*9WH9rB;%CG zVkU)^(7FtVvku=`Gp z-%0YuRf~c7VeeYZVWHeuC?UnN=2a2i8TiU4q+HiMnsh`c7TqxRh~(L)J9yWqQYs}$ zKhEM-)A2tksLqq=U~x;o^2d2S5_4FrUH6FSWHqY9jPiIvMX?-6f@A7nQm2v(tB-6) zYm&u8XSyhxvAac5=`Ip1EvPOeqsg-2CksFCsbqO=nt*v>w0oFn!6l9L1CEwL2^A$r zn4KFapSv&;3xw}dXM>j|w%E^6SjObJ_Rl2~i1E~;atvwFVrcW>w5 zCB}Z^OZmgk=fjT7TQeDr0D;F<j5kzzeDFSM6_;c!y%;80LJ8#)b|;hbEs?A)k?1aw{aMoFL%V3gCvRB_r6J3}f)ALK z%DIIC7%2r75yp*83( zzh7N~es18=#`^%m<6v14s7d6KTk&nI;^{^Of~JzQSpxghRx#FI$$zwN{wI0p2@HW|of@8r46Jx#X^f&K`PxPc@^nRC1bR8|NjE`=Zn5!i(SGE7$PV-|*MK zKX`S^XK$w%gvSBlF+g|}5E;3}Fd%{iMEU`dZa}015NQE~n*ib3TiY3sL4$AdL7|NN zzjF;Dx9+;~xqxaOpqYP*mw-+&U{DU&)BsL3fNL$_Q3ZIH0gqnZypj(u0-}n5*cX2i z@^9oV((-_uT%h3QjXY2azLC!bDsNF<0F)F0MWw)t%0Ia^Kvo@)(Fmls0%=`9YCrIN z3`m>@Vpo7@#2OH{2_$X-iQtR*9pKpxkh}w=ZUY%RK+Y~uum=?F1LX%m^#`Et5NP~( zW3Ai03G^@j8Jq=>lfcjzFgOGZ4gf=az-T`(js&JhfcZ&abqUy5yYbR}{}$MJ2hKPE zA8*ZKZrJbNNe7Vh9)rpkM8FS_^2S2viv1ja9biHrYc#aMsbtRfqk6%~lc zVgBkqOv(!6aQ8Q$+9p!`&y>&Z_k)6#a7yU?-ovIF0Sy@h8ZEUE(@3tM{U|S1U0J^e zg+);Bx}lDgi+I$|o-3J~P8s=h+>CN7vvD4`NqKU%@XkBq%7UJ6PFOW_pUNlg zRxh5v#(FzD;AErl&)wW=x_jIR1qRFx=c%}LfhjhnydFR>^JY|Q8SYjFV z%ORb+R5<%=k9D3NT38A$mb^%pp5h`(<>q?4CJ!Zv-I6!6+;>P2Y(IE!WPX1=P09X1 zOh1;|v=yRkk7IJ;VZ;5HnY+>LwZENFQz4p-j?Pmv;`Vz zK#-QjJ8^bXYg%HYWp?b!IKSR$xQ!$E^R-b)T?aDX-yGtNpBOGT7JIBlAK2zZm`Vv`Bk>`M zQgi0-g&D^2V$G{m1`qGR7`F3uaL~d4M=Lw@=jaL!)RWd65))&>71W8piFTsiWA6!{BnZ5 zmJWee%FUuic)u|`W|dT(rXoe!;JhYD`_0iaWWmqq8cQys+j{&a*>ru%Ha8`b3iZy!P6wN~T`nJ1%X9nZVL%Q9YNn^^$ToSKg$(XTE}!(NO)+HLX{@!T;A zWRG7&X;s}2ErTm+VwI^vA(o%%Me=!TdAjQoL`hk` z5Aq3Ia9c-Meyl??SW?~zp^-ti8l;QguoAXp}tiRRrmTe&11{biD!bpJKdhihtxQC)OxF_Ak@ zf2FEGimUG6I%bp7^sDlE!t`TDh8R9?WdwBwLF+fw13})M>4hS_W7!J8>404QQcU?@s&l6ttMaE)Dk#TNW8~B(|XFv=M z(`-aG$7V1+umag~6%`PX7L&GgZbI$b`VKN5C_T&hhx#{)MM&rAPhXwlfWGL7WI2N` z?XzU9emW1^I8F!SX{KY46h9^3n;ceXPSvPhCJomLb?tE#8f2dEY^D}goqn6NFGlop z=aYOC1%y5TmGE`ENby#;NmY_LBb}CWDSFDs+-^-5WZlP<9e+kd-6rzcg@ZB)Gcwws z4P%E|G;c%`(G$2U+2*WI&zQ~v`zkDFa&Eu>N5xO?-B%1m_8zS_9bvtU6tCo zV%;-6Fm#tn)Lz_mZrsb(f|@HWNDa0yNTAy)>9_v&xu~9cnkD1@=$$6Xu_l7Sq$Bnt ze#p|L;lk<^6iy&Aq*jH+n_TRk7mZd#Z2IzIMZ4$sd6t+6qHn;T$jN8*^MH!x-G?Iw z&A+)Y70~9j?{g<3uA6!0^MCotlO`TjmR3G`*uW`_pf2pUVd`tB+DAq{s1S#?%hF98 zEK@RzDtcTRPoiht=XWjV1;NRQV1uL*}>n5!0k&{bShUt zkl{6u}yHVq)(PL#SNiJl3!f{{V z_%$dvcnA|5tYX6SG+v(zS|C(3lq)vUH8z$CKRy;W@lb4EErx-dB)K$x%uuopTiq4? zDRIUnWpSy4aZk@4Bq0-sUz0io@SLPcBL@kDx7AXU(Et=% zpuF#(){RL_N^V^lpQIy z1^qX*q*X4!!_pwmH!`jqme`PuhC4~h!I@}%5s%M}%@r-?fhy#nB=9*Z9LdDWWhCOh zg3xwqm*QCFu~gzYNb^F?jIM@aWrR~?+mR}y$@3_Pp+^Lu5odDSWl$kS-V@dWe z0GC3f5-y_dD)QhQ8W17&JdLM4-2#nN4}*dM^$O~oL;rJ0L?jdK6}phWJdIaTrsu~@ zZ|1B@Qri^Pud*-BvzgEd5T)Us7H4;4{j!^2yi9O>WcD*J&Wz(dHr%0{ z1Rtfh*%a2K_@gO;bKV|PlaMFYY z3PM@j&WoT5ob=U2OqRtQLB(9T#XQ}`IrfC2;aqe@zEMNPbP4!DK1A9-1#k@{pQY#Js2&6}2Nw z57iI{TLy*C2R#@CE6V^IO@<8AP6oxY$&ARDW0`pycm;<9p_6G%i5i*An9z;~Jm}@9 zS#~U_>DU}708J>3D2^>FbQX<)P|aIS z+g4k{KtoAMNn2YxjkzKclsHF#0_R~7(cz#=P4x4K*!0M_tjL7C$ix?sNkx&*N~4~Y zM?J5MO0JGdu8m5mi%O}FPHl)zZH!K9jJZW@dSe`jjK=tkhJ?(9q^$a9S@p@;b*VYE z>A5wT`PJD4Re3KfUldgo6_=Nlm6ey5S5#C~R#sM3Rn_TNS2fjEw$@j6HdOXBR`xYj z4mMW~wNwtbR*tq-jew^dHGS59|U&U9B!cU4Vx)=YNQPIlEzb~jA)G*0w3kN35W z_jim9bdMqXMu(AEOGHo@n=p*`sz*36TvUCHg}$!pHTKcmwo^E_vP9C2eZIGj{?HM zJ!>zBDscxQd$ZsCQ1DS`vh1BObF#JwF{N~2ZE$D>j4xb>6SP28a%3McL=Fz3CHR5DCQilZBu0?LC$Fk$UaLPX4(v0M{3D>4FDj(vwgZneIz1eB_ z9%qQCr>LQ;l8bpTcE|xq!g8tXOOc{|)@i<6*;0nIod{~PY|9W&RF11^tt70DpXQ>x zWjmS9vKzXd94gw)5&vm~fw7B)9)u!@LWdH=9LLPt!Yeo;n1uvT!~UazPIaT-3_-x* zBXIa2D3UKCTq`PEATE+5A%c*Cdq_epB?NTD_>@F>B!#))a1LH58@nJ2s{k_#KNB+_ z_?Ks5;se3V%+JCiz{V!T!2tu+M|gNd`1!?!gd~N9AOWMtG76}6O=byQXLG&Br! zbd2@%Obrao3=PeVjV;a0tS~JsY^+9+o>gyZp>zf)Hnj0HiKr}VA-lDC!8ALmXmX^QhXldzaZ3WQ@qOA=?S9^O`M@Kh^ z&d#2$uHK%W{=UA!fdM2EIXpBpGBPqYIyyd1KR!7zIW;*sJvB8wH9a#uJv%cqJ3Bi! zH$T6yu#k18i)xf5wTXs9cXoDm{`Kp{#l_|2<<-^Iw{PFRgWKZg&!0Ct!{8n!DPjfG z!v8z=f%WIN(nMp?a3q9LGvD0XUOAqMULf5ES~4DwF7@=f)1Yu7g-R>eIL?zSaH zXmFJ`Yq}Hco}xAOKJHvT4)JOv%P^;Y1k{X#|L51r$zg&OS&-786$hPK zw6^^pjSk}heN<--melvYb((t7UTsNrdAwy&j_Gi>iQMl0E>ijM-Kt)pavG*4x+L55_eT z3~c1k$k6cU@W|Nh>Q3B7_-&B?8|M=f(_ozc#pF%E&rX4uo}Heao1U4QnVp}VTbP?$ zn4ez+kAcOd<>lp-l~=2)tDqgn`kOaz-oJmpt-ZayySux$x4*xC@ZrPZ;o--RA3uHi zbaZrdd~|dI9vC1_PQHBpeEQ|f+36{W^Ru(B=jY(w0XGh~YyR0Z*Edg^_aBOXlE#1C z@BziYZ3tSg4;#Y%_IHu27&~$>pWl#-m!I=B%i}{HpqO174F$TW7|Raii;UJiXPb z=SBy@_O*-G5kQZ@!Fy*BJIu8lXcSv zRZ+ZI*kyt7eEl!bZFPUMWR#*MRV-xoc0Y=-U~VNC1$3V}h;unrXV|_JV)|#>38C=i zp~j;OqLAHeyWy-s2~-l1zYY#vBBCv#Vzputr4rJ4(lW8K@_venb}A|c8miiw>gw7W z8akSqy4u>HrjY@teceH~P&M|njb;0T3{Q{ed{rwVcpgazUaTq_dvXu!EG;>WUt8kb4li`x_rq?M z!{x?|MGS>68Z`lh8HE%jhM1U^gp{6)oROS@iIR$inud**j)RV#i=Kg-fsyAXS1|K| zd4q*jkd^H(gxENR*m#841)&_WP%aY~?-Q6nHcYS?CNuzpj=`W)Fz9p^atnrXU@tB;&0tdrwu)R$bmgL%~>6L0?Nz zTU$|6TTxv{NliydMMp_l7liWvgo=tD2rxB)l>%sU{GV-4mf zYinCuTYCp=2T&~C#nsjAMhL52qpG_4HaXQb)Pb3)p{d~}E#2m%+k^xrp_ac%=-&*~ z{$ClWySo=Wtor(HPOG%A8a{!A#l^*?rJGac=A2o1_3GxR0iV~eZ|r}-XZ_XzXcIhn z-oAZ%V=zEY_~F9`@W43+4;k=;IX%tF{fa7mdxG?$;Ij27+}H=)0n?9b<6wFi9xI7) zr;tM!Eg`$Ab>#vJGLeSR^f>l(M=h3_lY(u1foUS0oO6uLwRuY`3I3q5*I=1LGfv{+ z*s;dKTb*bH?j@(n&z0(>^l=o@AN==KqYQDQ^U%l+2Xc>Pb*ZNxmY5Wg=`^G3A4O+a zAcUNK>4F@+nsLO2w(%u8Sf|kf9z+szPzmUkJ>}I!MSWl9a&meKN=6!9RwgY@ zc6VOxcz*s$LBRnbp)t^)0t(HFSV8m7S{Ou=RELk>)HlLNVbNAm@p1{t9BG+EIk_-J zg@-E2?&@lHwKPq1we^d)IVi$HaW4Rx8`u%{} zYtw&nb-4aUSgzYqDB#Mijo{gH9FFqkF-#|)wN+$qcRc#&4i^&&5 zjN^7`M0!O;+eF3d#3f54WwK@DljN13Drd{9Gg#As$@w=3>@5_`nT>y!P@Bu{b_rGSP9KCa$5Fva z$m9{;ny@4$O5fw}(9+3pR*e_ZIfnb1$^16`BUFAdvd`ge98NKC&XHV<$;*pLZ{|*J zW%Bac*FNz^r5eP~YOz9B31SRXJ{RVC4ib3ZZGr6tJzRSg0}eHy>Ng(|c-Sus}}r_P{SNo`#8n!+61Zn8+#Hcd=jXRVC2!G z#9-sn+=3Pdj}AgWk4wmaN63gr#E4JKL`cd)OvXw|!A?fSNlC*)MMK9+$H&K{Ai!oS z!09E(6Di1_CnVSm1>^FDdl=j-xHtCaJv zk$G4z{jfmeGA5TW&EVYOD_)pik;E>UG3(Iq~yg^%K2 zJWb4tdY+S*l9`^Ko{^D}nVFfLot>MTTToC?SXfwGTv7^hn6m$LCT@64b#*OBWol~b zYik?+FE#_FjekhYUnfFS}_H($Pd`3mm;+XCmu?S{_+STO(QkPQ_4 zy~)3uoscF_NC+%(?f}qWb%SlWIDB41PyJIIcoHps5XQ&kl8NVRggl)S=ZqLS-1sop z$I!QFj!+zd!pDnmNNpq@onMQ6j^mHm88IM}6n;Zms=>%&_xSTpM2#7K{02`o8`2Lo zR2G?W%7{$BkqCFbVp8jD_rjiik>SyZ+@RA--DZE1e4n6|1-;NIZ!W6~=@OQh7qOCL_n5EKXgAjW1-EN$@>`-f z`RO15HXQ!RF!(5ZBB%~1M1LzvWoFokfuB6~ZcqVMT9Y1)pJgSAV4&U^%~U z)EgKP*#PYSf#0yqpU|``q2zPHq!WRJPyBHQe9=3+k?(lIHh7+{atAMQJz3y-JjWS0 zeS?4r4*xL@zhSofy{ztS%+7U;c4Z7!1#~9qGY?Nc{-lzwB%+SQFdISvGXfrc z0&ZP=PHlV+ga#hF1|FLl9;*s2ixMug0)$Zx!XSe~Cy7S`C!i7_q~sx{;2P5xVT061tj5cIWci1Nl8^HX*C%cb$NM^g@F_dq+MX) z1G>Z5+uDNVj@$kF-v0gpfq{>MgF`|>o`M~|w6Y3)$Gp6}{QP`yyT5qx;^hmFxW5GV zeG$ms!MzVYrKP3+-I=SYsjaK4Z)yU|?Y7poj`ohO&aNJig!lFh^z{$+4-5?s4kM8x zLqi~68y^{+05Lk2m8_3JhnSd{xyAG?T>}~0|H5AaH#;#o3lg|n%uP+-V0vbLW_AJW z;mpk~&d)C`EG#cBtt>6Sy5(?SJ+<-f-TUqB?VX*STMD;#aPR@7Zl6DY0kgzkh6ZMX zZsxyYDHsOz!rW?FO1Z{rGuZFq0 z{yNLme5Em`R*^qLZ^^GuoeI41H@4~?6TQuqeq(KT(Alc+?|}~HXkk=)u(t-1CnwD8 zw5?czo0^&o0XBbnMTA>LMQX+2`Qp$daRG!lpPx9FgD9(s2!jfYMpB4ENRX6^pNN^4 zfSw1Bnj4pr3qsC?L&k+e%6S7~Ht=6uQcgTFP69G;-?5WW{2#u)IxecNYkP*FyE}&N z7&;W`?kWzF;!WO!~N>X`!$pI&(};;0o0CH*N)fJ0gTqxkJUAd);EqeHjOs5j5fE9w6+ho zcZ_s)jdb^nJa{5$V1=_k@SO#cIwX@%{WCY31PI`p^E&pCj*njKABTdH-ec!|t1% zciSIUzr3IOwK;mU{@`e>^LXRo$;Z)?FHcIjFAD>t}}vwIYaXW$= z{HvH5B4`1o1dT_Ffq#W5VIm_5q*!pRWh|uOe;Xt110FKIYQX4``rllm(}fImjQ(R5 zl)!X`d=QUQP20b-pn`dxmdV`Y0lkHqxhgXZXG)TV@XI>8HZTh+YwblNM?(~cVJDac z#r62k=37*}Zs&E&B#yh4up|!J8njT<{0G8bhvH;A^%x!um71@~O%&h9x1$_vB`#^m zA#%NLzZJJ+3pZ^tPA_6rnwF?os)TvPrpN(Xm(>ZSQR?=Y+>lvvMUVHZDrrA=<|7=j zFK_Y3+>>XZ66_m~9ol5|5K|4EUUY}a+NYhs0*fq-mzEYbPjE*dmt6_pycCKY8`#t!WRfeda)8Vw&; z5!w4Xo@M(2IusS9OqX;uLJ5d7)~O58S`I^{EE>`@gQOCWv^Y7e_+@+&1mr{hwdBh# zgI5(9H{ZCby7=RH+Q|p2Qm6*#Z ze&Pj}jTyL0n(-)fiQ5-xLR%onWwi|Duo-$xquOHg2xq=8nlCJL+1=dE=bEciSnVgZ zb{<#JlpcpRQ8E>FfyO8&FaJSO$vuX~?#;ZrzM5ZtPI?hw?!2o*M>Uw`5)|7IUc2_3 zG}w-cgWBfHqu(M&gEY4vz=zd_P3B=lhP9(n#p=`e>RGI#RLIE>*Ap} zh^o?G={%_EFdMp2Kw%#0_5%63znCDXYk=hv(~Q(86Qfq|2O>%Gv^aWxUrb)NI!u_= zZ{D{*nlQtgGHr&2#6FH_>LTSeGI3(3a5s69eJnL5U!1f5q4 zk{)UhKo2o}`Isx0UUKexc83y@fXdyAiacSz za(Tq>j#e4tL2X9w)~pvy<{*_$&A--vL|0OF9L2oH; z1!q<+rMbF@V&fE64Xt)UE;*NUi}|m`@zcZ8%3K~}Zk7;8FyjT*LwHf``bk#!yzZ^# z(KCG411gk_c5D`uV`TO9j!Ug+_ZLSb4Qj*T^y7s6U3mR2Ux=6Qk{yr2FC4~xjd2%q zhv{fWUns1_gVT=RWz{6GhDz!Q1@k_V)oPe$7q+y19!bfVg`P`63c{)!#?#O?@=W_` zs_+sN3tqp!xdH+T$r@0vRu&!zkI=9Av@5}9}tkOT+eGQCHE@FokrjAcR- zYG^wAQ~pcxgQ4s#v9{c2?K-lCE>GlXvW$C^+|BN)tl*e z>BNCKf|Oc@uiE2~d14Fqht?`1M_Sm`F%!k+ziZ*G6_skFdT6N*ZTH!iYQb?NUk%#3s`4Xm<^ycUp7Z(id@|5&C zJlA-pZ=TQYv5I7zXL2JFj46@cE3H(!t7ZiMAwf7sUW6=z!?4=~#O4V#aKYqrJ7mHVIs4;1TKf z%G^ZJFp~8KcvO9vrNMqGKYGB{{l2EN_I1Ht7>&qNbj`)jlnaeXub|?l2{Ggc zQbs2YtD)7_Q4i*?qjq@qTrTOj)OVKF-WJXXtX?_tv2t^N)k@H99VA+R(JqlJSiDC3oS>WpZvVXQe5d#X!ugA-@L- zTC7zegQS0XSzP*k?v!&UHB-^uHF@(Jh2+APgvaFOJyEuHBv^-_la=iU*B8gs7{6ig z^P>492P$Nhjk4(m-xwQqhvxK|dTQ5~>T|6>Q%t#TORyC+Nr^w$NcqLh7Y=*y=vM8( zQF~}jkBRVb=DeEX_t=5=deT*fGx#lXjkBz)<%`Jf4o*2ehU@rvvMjRs_MVkaV;n6W z%eh0gqODW(7EdmDcV_Als}ZX*(op%1;c1?~f??i5mD1v)E#N^>niWsRa^aSYitG;s zrJo*V%4j`i4RUuQ;6L8pk0A5BJAi%2QfOlzw}HoU!`19gv6Th>x<})$n;Z=#iINri zVzxJt1>754PKUL%O#CSGyF=HOW^cb{e@!`M{F;LmvC7KsFJ#9ew2z{`XvX-ifJK1O z?AE*9o%j4TYM-Wq*(lEAfApLtye%$NBOtSMDXuFl(I2`Ha4~bg{dX*<#GG_kFZ`0^ z1BU?!A$fN{p*KE^b-W9Ppa+9{%}w10Ltu18NWU@IZ2$K)Lq2joZVDT<9rOmpjf!%z z$TcW5#jPV+YFc*yigw$L;1K1A;okQ$pkJqOjHZ4SN#b%)%)A_=No?RhxaICo%Dde| zn{4x4R}c1{H^u1N50_h$_oAo=v3mr?rd6e-N=EOSOQ3LV^K&t1Q5H#_;F7Pc z7^BN3KcnmdC*)Stw6sEHe`R)R4xJqcL#DpRM+^E9mqN`2coeAdP=U+{MXoA~$T?je zf&SYLe0Scc-|kvdEV7k;^%|fP6QIhCt>fY_UQf=``8PYoMy=!cexVGY*l$k$zRcK8b%3PwbXV z&_05;9nAWgkHq)6I#s1jPSxOW-RLDHFo~ z$$fXSTL`Lzj=Dl|)f`KsG|wP93kibK1-0@k_hg()q#1#-2YjPL{0`JZ&eQlas7RP+ zDEy{XTFNl_ojIWHHqOsO$dsvy$fQGLIF)AF7@ZuMYpFJbQd#zeB@L@DLO*yqGeV5C?e;Wak#OF5~( zbI>fg=}Nho_PN{2pHU8eU!X{0BYxy-WFhzw`T93ICpIeW(A`+3&xZRrk4ty{w|ndDSWO} zn5rK(f3t92zi>ICr|{KM;p^XpYxX%tQbn8gMH?(d+qp$MJw>}q$f9EJqP+?H&q~Gn z_QgMM7QbOBexF!;yi|<+T?~1UCoffkZ%_igRYIIsLi(Tt`GMi;NDet`DXnrT{b3=j z6hn0@kKsWn`*JDgVLsJiDUWg)pF>&k2L^#tC0h#1zfXQZOTrB`hwy-bHSs`628BZL z@bF-;49bs_7>Ra#5zHDf>>`6tSgcc2jY-m&TH1zE);BrK;Xk8;HIaprjAoDa3jfVSS6S z!Kbsokrn?l%q6}Oi^F|vd>uBv5u4DCO?rq08))(`Tff@g{dn+x|MBLJ z;q{+mZw{tbe?NKk``N3*=PQRVRu1P^4wqJbudMujweoxQ)$cc}hi_jWZoN6&UO(L3 zJo>bC^yS_0*X`r|ofFGnA5RXz?B6fg-+S2K->`=u`C}h@`~x=x7-xpUO?bhXpiYi( zI6lH29btbTVGoY5Kaa5cN7!%2*u7)y=Tl?UrxV;GAvXzTO#{Y&|LmPrh%9lH`+0r3$+$S5t==7!@yu#e@ z`z@;t)fZdvQW=alkw9jx{(LCZpu`|hPkpqN-cEGOE`j7Sqn^QKmFl_W8jasnE1m-w z1r_;oW+K*Cwuzs1wEJDN4{LUry1#PxX2um&ewfW>A|)H-8J#hBWy(Uq3GwGVL+VpT ziOO=6V@6tXkAFy)mGB9h?qs@L%Kl`>W_`|vn&*K>|BxIyllQG(x#-o7YX1w!80?8H zgXZ7Pt|CNC2I}yCm68dgq_`c$Si7)sf2Z@yW3LtK1*l(kj_5BO}kgd%l(5fXMnL_oEc!mNQFGCO2LV0 z(TPU!v3ALke(9l6*>9_gpN^H^U90xIsy|(?`4Ce3F1+q7s{RcaT5+#&KD+T*LBm)@ z^Jr81a7Sl90w}TRsmW*0p3J?NSz4NVy*mGPefizi>z$po zFJCtHzi$2f_WsxY``?Vvjyz4|lM?PeW~fe#GvBG~JKbue;bUyV%`b?9M0b`%l=-&)D_P z*w6-?b;?@$uQLy|$G43n# zP6?LWof&fGZ@cGZxD9iJa_xIO>4hyk>~60s?$EEah+4WzYu>E%ky@x<%u$++r69A6 z6&!i%>XtQO)WY3yJXor|U@WKuMadTHa0ex0C8v~GBv9pF}o}dQx%(2 z8=G4npId)7zYbkkgDJWXy6tDZcF<}+)4`r9VR2H}Q!y;i!`7Z&fOrBjh5FO0;q+>3 zY;0<3YHn_BX=yoCzySG6XJ>bJ_k#yOL-i1-5&)0X-`_ug1oF6{p;N+jY;1I5Yz(yG zpH587PENjb`}OsAZ{KbK0PYs_OwZb;pmVyl ziNp!3z=i9f{@X_VtFSt2qXJGBaP5G>`t|GAnE($*)}CIVZgCAX3{Hx7(6rniO-yBT z^h>f-6P3$z`BsjZn^qE$xbv`(=7vrZ1(ozLvxUb*j39xuk&?e%i>t(?!I5imHf;%8QC2#Kiv{1tVp)F4}zmw)24VHx6t1{y+2oq*0(r=HJk*A4R z<)LfTs?OgtU{DSbHZ3NB;r;W=$>V;xe4r3QK;kL+sTirKnW<@5XlPk!X@Ovfoq>Uq zkqOQ&$H(I&B%C59(IqK0ib3JT8-OSl%}`4ru$CE+mFbd~ZB&q}RFW@HQOG#2m~=ro zQcdNC#(7`u3$D8AcKR9?hMLC4+PWs%x~4jMrn>rOdIo0tM&^db7DlF)CT3Qq=GNwx zHkQ`5Hb4h#59Fq1a`>+8#)dGCTT86zOUP+h_!q1yZM8Fcpnv3jNu#h`vc88UqS zkYFwVMaXGmzaR34q@8=OI3*frL1e3&T{YtH=wAs+GH3@V{BSK^Do(w)ZxH%29;!vfynVQ3szD*oBWCNX zqqTU@_6oZnYZoAv9HIP+pKBIl|2)mLR_t6;#5Z?bDw89ooLq|jK+GCBxNv=_`U7O~ z@J1w~EgLF>`+(?r`7kW;njOv0FNy03X8oKm4xi<@r`ptuGYC_na;^~leSbmmN<(`f z=aQ+q2hwU0oTF;eZqshBZ9qa7h)L)BrFCey=*Kz-^d9tJ#@-| z-r(sJajT~x|5pZl4)@+a1ov1#|Hnbc%}&L^PS4BCEJV*HM#mvZ&n?ZsFUuk(%O)?! zt|7~1DZ}S4E0QB8*(Hl9CBwUcV;|{G6@9&Oa;Nm8La_=?F`RfoB~ty|4bAh{wN*WJ zE;!>9eQH3_XKtu&VyI#GkEl;W$5=z#SVPNLUCTs6)A$rd;1vk}|H}OSRri_wx4O?7 z9I$8db31xFCqO?sJA?U_?j9bOubk44m{M_Q3`1carX)YBtRSnrFsq^vQ(lx?R$P$5 zUB~SWb_;NJg59CL0|-XDf$q4s7iAM^C_-2V_ub$@onKnOnkWtnHX~G)c zTQ5(iPhm`G?l5dw($w#Q(l|COXqkCJ)G*I)Bm+ci7ci&4s{%!%m-k~>x zZr?$ofW-(9f#4PJf~ZJTbR;S!GBOqw8Hb9DM@1%}A`_#KiBWfwks+zKuch5^$q2N{ z@z>Ay(=7H=E%#Tc@{_L%QE9n({z0TxUyNaYg3UmR=O8jYa3DQ&AR~MrBceY&qAv~k zFfFPZ9n*O)rad*bB_*ygIj;6@d__WHNnBEXRB{d~H3OBI7L}bEm6H^m7ax;{LKWUY z72mp36nwkLDX3WWVu7r6zOqx1v44g0t!j5Vt^%-iVCHx3dN#vWFrt z!x6b-cM6b`cZ#NwB~K&EW+KaH?^Mi1RKC1I)y&Vg_q6N2}2j)hSP^5|PjEN58C&ny-$TuZ>%%OIU13 zT57zz(vteRJ$gtcJv#jS`(W?j;Onnn-wzJJUW&WJ1EqcX zJOVaUu$hA75b))HUEphgvq+I&C)oXylds1opO0}o?Z;#6&I$Iz3HBY}XHT$ij!#xj zuuI1$FAr2sp8q_V**~88dNlFraO~sZ$j;Hw_EG=)qsLoEk2Vg$GdIV73cmfw?%(CaH3o z+?M89i06w9St7FK-%RNYO(;E{YeA0oom2N=xcEK))g$ijZ#(YZ;?r_;a2s!KzrKbL zmGiJNu=QVJP_2Hft=YjF#~eP;6YGF)zhgTs_MQNk7te59{Bff|TYw)fh z@PLxV{~g1*xY*l6cKHlChSu!odt)YBhZi4TP}MLG-Fw%sFu2=Xs5W~}Jwam_>A#+! zgrd-y5vA>uj#t574=h#d+Um@|RPn^tiQLsL%2lR_UXYOQUHiL8KU$uB1M<7X`!jCw z;)>J~(#JA0(sr_ehRmvz#3}SKY6&ya7B5_!(nv#uVBEb7-Nod$hGo{{C_Qv|GTU~W zqdA$C`==RB$PXxdTPqdNLdPTh$VEvzMG~S5e%}N~d0!U_q+hL#h?!#f$vm8-`ieOt zHucKRKx$b$eY*j9|LTEO_H2Kdsn&3?xv3S64$-S%&a|s$!heFl>*w9;8DI6p63uGF zt5}f8zBX*;+%HtGN-i~(E$J_c;=ke zpvLHyK$f;R6V(iRMC=p5i-#;sPe_>wE2B~#!w)Zpm9o2uE8|suqf&mBDXnup=7YJo zn37s9y7;>^e)UE8NR&>O^!4$n0KAd6dun}QuG*F4A5kXSb<}tnd8z8ZQn0}ZJ$Y$0 z`06qQs%i#z%@?VA+FeMjRMU~!L&}2HhUKq9McsENJkk=J`_9XQ;#M>@c`yncKEv!Nv*mXx}>-*0myD%2j2VCyT|E8#6Z zvG34qAR>mkk(Y#67RtJ3PWoXzg#mgP_XVGaOfj>D#p)pb_0#=(NeB12uvF^i0fP`N z_cZ}Re>IcppYkHZ{bh>!yKq6Pec}Z6a?;S&vET;?((7rv=iJfL4XNWEYK6rZeoAGRb8m!Rb3Xq{;bFwB zV1LN#wjIsy@M(kxPiYQiFjgB64^%5#jK&PF@g}^8qTDcl%9$B6q)j{&Ojt^-Ma`0C zT`#R1UQ(WKbEV5q2ssq&xV;Wi$Kx4KG%h?y8ys9~FILj>3dnL}e<;B>v~jK?uAOz0 z?MJ_QQp+UtA@R_;GK4nK?g#F=Y8bDh4Bev$SiEvfKK1tl3Nmh9vT1DE=HSy83Gw@Q zWS=8JV56J(DF2QqmS_| z$W;4-;4G_e=$||mO2D5@mXhD8DWUk5LnstEj-SEePJFGu z#CazwN}~kEBs62FkRBOVb>c?sZKo?`wMP_uJV^G7#<8?}R>OfJf$i~3lvGe=s=G&N z@td``QTqb9?ySgoZTSbW%1^9fRmNd#o!g~iJnIOvU2DJFWSV0|P|}46cjoMbG4`Rz zdw$HCWHFKPva%h_*W2C5e?<~Y{#=W6px$puEA;i0%wKwPos_}-081pFYM$uVUuOSm zJN5%JA<<1eO-5RZSkASt$yR*6JP0;wF}=jp%d$U1Hg3it>G#d@--ELRzW&1U{cB&-YP`yx^hj zP@b9W!&7oR?~EeKdri_mAGDd|w@dk>Wy+~{#$JehmNaTvkEbCLhCO$?hKp8Tqm-sc z`;PV&!rMFtY|bQ3biW3Y_F>WDxSw&p5&`r)CNLlOUU$sHjM7 zC4$tF_DUiin@m-{3pZkCG?QrZnYY!|nscnH*-P$5e<;7K6!z8N7cH4`$Y)ck|#E|)2sBFx?DqEe|^0%jsMmu_-E}it;0i`yo%1$ge(FU zBMr4bPrAZw)^{VCEE!X^D}>%M!4uznW9zeD)DWIF`l@5u`$UYc2Ky`Ms=VKO?hWjy z_={;@iQsQ@e^jO?e$8`zyRG@)c1}Lb!dNu;rE(Z%vlTgVxx<}kCKVap=Ggc$_%5@5 z{>85yzEUa=idD!BGtTFWW+$vHn%XCBsy!=I@rq|%4%tYQlhRt*geI}RfY3&?5Dao^ zh~NGMx4{1z8%Z2vFnbr+r&eMUTu()B3}0YcG)i7OXPxWG_}LK?N-EevBO+zi&I~yCPpap zD*2M6OoD0jm$`dN2(0OJdh?-oz{p%Qd&kD5ONx!iK@u@;^NwdWCGLjr_B3fwHlK7w zNpuaFZI#q*nd!2xP>yOU!U!qhWR$!?S6kiLFjvCe<>oCYYN?GM{Xn&=88>C#@{GMh zohIA287NX^61Yz`WPAJAo%f~1d03iFe6vYCk!5&L_?vk>ze*I%%j;RzWR!F6umFL4 zHTz4WNYuK3?n?-nmNXpiKohktC3J&;YMwxBj=Y-slACTQ6|lIx-ift75eO`q!U(peX?!sIBMjda<^toK%(Vpd@KLxgI#_QfFYX%WjRy=FY zFPY&oaLN!F&3PZhDPYRk(^_NEd-#+P`-d;j5BEW9?!f|T*lE5Ot zPD@l84@&{W0nJVNEz0lP7(ZOsS&uk)h@O{p%=x5CA&NQ)uE3mbPW7@zW)uQF&>d>VmE~9}^O+0h-8HvIqUq&T!{*$7 z3)~CmH&)Rx#EW4?eAideB|5P-i-A)hO=mPwG*S~T1ToE&IUd2A1QaDMA!6?$-%y)< zm*U8Nt6J4!{dvPMYMw%OhA=6VH09@&B<7pR<6e7e-fF?#>zZWLn~*Sl`PA-B`;9A#syqf#eQ)8u*~UCBh5Jtl<(D>#vKdoCER@3BjJL@}^I;ncI)L=iF!HKK z+?6(x5qyIfGo^(dxKveuM}h44)>(JLg?9DY{1Bxd$Q?LdyD!f>DnEKZH4_pJ214L={iD}(G`=ty}(^_=&zjD@M)e(m1{I|HFOI

A4Iiql{d9J1qAl#i*I%*oQjI?0I|XSo@4* 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⪻-Rc9Y*A<1{C?Uy_)}k_Z0iO3=b2kp_sGU$V~7px_-(6< z=Wj>WuwYr`nr^%JiagTz~Hy@S}=h?JzF9DL(AvA|N9`^P%ai={T?) zf@OlD?V>o1C&*hku0Vjg!Sh6L*N)-ctnpEyDba!HF}_)`-q~@WUCNI4&rAqOOAK$9 zl7-vCv7m(h^Z59P_!98TIpUV=N&E8%Cb&Q?l~Fm_VCP+bA`|u5(f9yf{X`CREixgn zC5qxR_qJgMj{rw^Jbc9ceaR?SmLI6z0$nt7Cgk`y3mJ_A%*q*k5S=}+GmZnz@ zzGz!y@5piebXL`9_}|--hl%nf!R`Z&5B)#)1#XUjl7L)}oXMRDbgcLzamm4xUd_e1 zXuxT4E+Qzj{(!V(m$F#1mPnPMP>}^D!wwVcgb8!S1YQuj=q-HCPt-m@+&oCaB1qCA zNZRs>tW}_bRe*~1Wp$fN+P2;X_7}|@+-*;vYcG?57s7GSEJ%7knkV4FT@*w9*&n)s zhw*@0GCbwvVR-t3!ZH!7R#ChK&$9#u3AIt;ouwz%@~TjMjTARsEI;*ao1u)Ak!Uf& z$9(yd1EcYBzU2+qvRusKq*UzK9GcdKN=VXpbZdgV4603v6UjbG{nN34su2de3nU`o z0sL#lC51Difye$k@zLOVED>l4zHC0u2u@aiRwh^AWW_?IK}9Y@P9jJ`#7=~wLm?@U z2s8pgh=3EoVF(xuj&mhO@Zd_9k!V2z0sFMcNSXj8YxG)%u zgoK2Gf`W#IM!Sz4vJOswM^gkKQ1n;`I)tEu*^ldi;HU86E{nS?On_nn08sh+@`{y;Dmf}@F>0FEHFf-S^xgDvmfWb6 z_HaJ9BAg7Yp1}JRESJD!hCgyq_yQHQ(z_Hqen83BS;Z&)Zea=VgX<~c1k!26AFa_okBrD0eXa+n_Egs3Uq{x zjSVh?1rXM#%;0NGe}omFz5z58;J*ix!k?)e-$``19&xw>ekOM^JE<*fmuNB(9#cCx z_`77sNpk49*7(2EiA9LebjMrX(N1P&4y?e?@bzVKog!iDwD8c$5_gn;;Q5VcBvrw1 z^3pZQclucr+(t;2e^%%qK7C;KaK0arlJp2T96^8}ASNJYBBnE@y$>UhJJ`vd&FBf5J}yss;;Xp$H8^s zVg#-29XKgnI6XnnlSf(9AH)d8#wW5gKM2x*JPxSo{OL3x2LWt$95)0gJsR5tMEG2e z9R9`)4FIYqd*>ckZzK`Th(YM`QV$T{D~EM}v6_ewR7=j=;n9!e5VJa}p)MavA-Ehv zx8YKmEFf_+({0{b0D|~$Q1Cm+yvvr4@sQn5uBd&&-ejd1%?n2 z5fSJx5)u+JGBVI@SzNpH+)O-7tm3TfO6**wTznpUm|Ga(OkuGKF^T&Ul8+>%`cHt4 zlK5EV!MzYf5ekh+OAkv+4@ye|=2NeX?4y4uoz;p;#Y(D~s_HT7TESZS?kB-(M&l5e zX>_woBW7MH@rzu_zHI6djvIrr!ktw^(70tmGXK*uAsNszAer=&mIleBL2_x3LK>u$ z_FFmaw`$svTG}s-w4d7PhkEJzh8eqNncEIoTdp}Dy>r)s@)mCu&L!TS$SNNyt$tKj z{{R;u1vlgxcs?{RK0G)%GC1>m=+)@(+~~;M*z>s;qp!xtW+%p{aXV&kVQ!%LSz3R; z_+fK-SXd2nASN-#!1PK4mGQa{uoZmAeekkek&nbWft z4n+*+7d#+YRE($_`h6yNhpscA;3~(o4#{n4(>f@pkS~1!lcqUkaMLi=S+}yjLz?!G za?`;Sdpv5ZTClhDCf)ZAN0Cy_TXkEyv^uNjv!53eYF2L7k<4VjO?R?1`mHbJGhyj; z+}oA3=ceg@`O0-Nu>#(YlPr|RPV5;HpI(XDw~_txJ^O`V(4}W zR9*&ERY7$PP-7F+`~Z5;0kw5O51&BYPoXD+P~UT?e;gW|f`+D`;VEcj5_*2p#wMYO zNoaBsnwf%L%|Nebp!r$o?JH>MHT3Qcv^o#HUw}Tog|?QU&&$x4caYTfDzvi>eR~gm z-+*>MLO(X4{VnM53v~1iI@*PP|2T#K1R2nf!HkAq@IVl*hZ;_Y{SEYkCqLq6I^bV; z!bb*VH8++7RC6)g<%4Nl+FEM{_t&&CFxGYFJ@2m%-L~-k zTd~tZfim(G^N7mt=EVw5@sJRfz4Gom3FYkNcatK)lI&gAtnJU}UK7YzOnSA5&eSOTvEZ202QYc5I zt=o0~_KJ^_BX3)7zPw-)f~ENp%qT0z zZlEvlLnF#4X54EX9X3brIeGPZ%CljG8aiGFrDv}%%==y=w{=RQcm77Is>mL1pr-h4 zqr|Q-o0da6zM_W5Flp`zx##aNcN^Zl32V}j&1JXSHaF-$7@V4%pdMCzQxjZF2lBk(Nga-vLHW4Q)XH&sZPeY zoYVXLoP3Re4qDp4xys)C(iXj$_;L0fW8O-y*7wfP{B&GK8K0O(y#Z{^NWT%Lssj$i z5|Ucoqy9aT(L{HOarwSVoz9lQke@jINZt^;bEDZ+64onw zznofF&Js1+4qd%}$B|5Tg)~WM$0r>-MnXcVfC6X#p7sWArN?pWtA6XJT<5hFEGQnS zba$&`t-tn`E5^i?vmhqB4x6T<$M`btkj?XPpk_5=ivGtN=cavvufDoSN&d{#jz?X$ zMcZI3)388V2wmjg|3i11f3}!$!}s^=A7f%3mY=yHzr)`IwxTnh?-jQV zsoyo!FAkt$O!|yMs1M-P3m|`XU64*)Hiw4$9)akE?3>?5Zt{MTy7@LJ|3mM$N2Ka%4Z`j4jncr zlC!oV_PoFBdk*x7OlzWi?qF-471~f&_n}B=MmC;14A@l7N8e%a_^4<4KAV(cvX@%E zK8El$RizO3pb@`y+TXE?Tv-O!!6rX-{pJUB@-q}YTs)u zX7qiknxDPQj;syyd@8<>H-DBmRtPhY=$GPXW2vXvdLUUJ6k<7j;q=ZW;oz`l?hK3A z+DjSKQ4yo5?RD;*RNR%>;K0IlKE^7@QzQoY&)&BfCOQi1fe|A(VR3SgAi2koTo)w! z0FrKiq^lt5a!C3%BwYYW=R?xDkaPwlo%XlMr$NeTkUTDe5@CT0r$mtGWPX#)e$#&uPR%}1EYm7T$XfzFbS#)O92fSOvDno^yTQjL;IiwgXP={ys6 z5;uPVzj&`Wjye#joaNu3oE6?6{9j*m*fD9DQ8l^e#_}Wf%0s@V2IDoJm1y-hYd`HV zcrtF*yb5$Z6>2 zD=2Cnid}>fmY}3}Q0fYlu>#>%q2hI@;yqNi0o~h#+CD)KKLaOPXkZ5#{sxWiKoi^0 z^jB!^GxT=-czFd{T|VA;2Yp_Hwoj&(y$$Ga6Z*9U{r&<$+b1gYT?jw5fSChKAt$qo zEcEMSRsnO%|GmI3z+ZNOFYa%=(EY=2{1l=|yv0YQQ;kdaLDJ!Fiy_H)45jb%W`fz` zKedn7JA7k>C)yu;$&rN=x6@C+hQ(JoW}?nMO=LF)BITBoyvwZcT$}&uNU?Eyplow8yvUE9U zqjqU$WrOT&kGCJOUR4NJJ)>n@(pI;1uA@6wid9VYp|5;cd9~kDte|SW!uy0Jw1~fN zz~t(15^s(GtDNnY0~$Iam0#vud9tu{twfk(>2mjYA??j1@>efmUt2@o<~nc6AKDmd zCusD@~#!H9I(NJf@a&bwY8Va;1OG+1tR6KYp-{ zv8nXT5k4X#){3|Dz&?F(aWt=mF6m5}XQ|`3%LZMt^fv?BbXG*{nk_qtZiSO9Lok)> zFaO-s3$`QQO|KQblUbIvZ6p}A$bEE?Ty53Ky?xI2mnNQ`sD$3q8*GF-tlaS^PIoRirwQMVN|j#ZLnGkNgZJ_)FF&ppx>(Ji zL9V{Eb;Yc<=n-wQ#`A8Wae1e}J&(K|Mbf(uK2xubS+p*`xo{sr@6V<(OMFd3=J(v7 zca2tW9moAViZhoKu??ziF9Mdr)9+q-KtKPsJVnhrzv7^YP(aO%rgiHQLTHMzg=%!3 zQtE5D-Ival^7rCu+rkE-Ee-LkpWTSu$s!v~FLc*lpAHy!(aN=!EIpoc{f0o$MLh-? z-;WHcycce0*;6^(c+)lBI@3+?d=hbrK(hH$6OYZMC#W7X5u`u1MSytlk@hHjuDgXC zIkGJCJ}@uAwCy#)?kXu1Ob|)lcV&zC3QQq`-GXc37sh!4zF0&upVEAHYNW=yWh_-> zoqm)|ZO_BHNjjT6hX=mcq{kz5?d#34@Y~~T%J*VkFonVwMHzagxopUd-}Gxt?9FIr zU??Y&j^jdm=WSB4W9#`*O-kaX&oL=$sOXx}ZKCtMO0!&^VJ zb$zvq3MW@?tm#Whhx^YSez-?!gUuK@N6{z$=!~vPT=SCR}c9r-onZMZj@5 z+cSYzkM8>3@zFw0ih5S_&QHWL|DqcFJh7HI|N8>Vnsw~q9=4)%|JmhRHE=E@k|}k= z;}RR%X<5{-J%zv^iWBNW^g_r?^1ugfmfx09Z<6D6_{AHQi~Hhe5>N_k!s!tk&z*mf z=rmlOFvM7_I%(QiYD`aTSU4-sC-+tH-%Bx)HD*~k-kjBoAcn;^9=y5Xc|K)m!BWq1 zBu~{lLrO8g92?}HJOOL8y?^)db>_-yWXh$;y7@ zbEM7jfI88aSSXuB42?{>bbi0zA^m(mq0Brn&;EqxlbW{)?2lwfF!XCiKNkEedR95jA{RtA?T3e&HWYK%CNdibM>^<5jk+uNBj~XDI_&5*mZ+_@%MI{RiL2vz zzci|(s~rv3MkjUVpe-7yM%NeJsDSt%+Er+Rx+gb}tP^FPW=lKRn=_M7C9fao3&+vu z{c8Hm{(53U+~a&Ug-4o4{AfYsT3&hD!$F@J&*_V^23+rUcZxPVpJheUNPOMhRETJp z#$?r2cD(+8wUYMXpZb}llJjEARCDIsmMS_j=|Xm%N~O>R(RQm00mA~-lq{y3=t!%a zC?=sgN6i;QFB@J;!o^lefKm6JHK0YU(;7t)N4qNrQ88PJlWSCIJ*)>Jq@@l}P znGN-kmz04WEnG(qP_jfxhR)CzX>}qlqcNM_AstK4YCd0z%i0(!gbi;S^35t`u20H3 z)ML%YI`SSfBQm?T+irJvsde*WIl!DueH<4!>wm=g>sJczYf=F6w# z92^&JaS6cI{ZY_-m`X?RgcnO|3hP~OBDie*q2z6?6t`H9_qW+8km@c(B24>9cj7;= z_e_u}pT7E5{)tjTpg_-sY>c+;)}21n%9c=7ULCG|?eV1A-AYnpGM|o>@#pTSkjUnB z2gL$xbs>LwP?4a-<%U%m#KA!QyU`>Aa~9-8DZc_AE_qg&((H0o5bg=v1*&AFIf47J zjNkRTZQHNEGNhwa3GZ!s+buj$J`i-z=yRg0dI4h;=|WSGX~*Rf667S4^#RGv4V`oD zFK2ux@|NCTlKw86^Ew`tFw~p)?MUxMm|pS&Zmh=V^G25Q3m2xnI?DVIbYyR0!a}_$n20}-yD*Pih#y=CRlMfcUYl+K(Q z)1VcxQcg{^y<;S)E_!i@I{Y%*MRrzUJLQ7dwCwA~o2J;GvQILse8xOK#_`0-DZgZo zd7X$2bv{K`Jyr1J*fC+V$Hhh|y_qto+l_TFls2RCtYGWqN1tBxbuGqeDNDrM^!%zw zI2Wmw`hhEM^WquiXX!$8-tVF~d()K{*3CkKE)Cf2c@3zw#gJ>8nQ(j+c=$2{N~s!t zsy4$#ICu8fcYn#n9c%N|@m~*8A6iWrM}7^^B*9Vw)kOd-b?_)~Eh05CbiuCLis^#r zldET9zQFWx;kV2c*~#XBZKiczu-QSu#h8q_rE=~1e4 zQECTK8cfkz7+Mv@XuZ&AgS=>?j%a1eXp@6z3#J$=#Te_2Xq(U&hrF269WmmrF-`|D zE=;j*im^oRV$O%gdIF*FM%0ClSigf*s!*pPDus9S03M{Bud|0^Sxj_m@tXm9MriqHdEmNXoaG*}L zjE+sk#iSL+r{!nu)D2*#r-0Dr^_y1<3$K?J->fXpudgh8SbMwqesSx=(wB|p?ag=J zKE3)8fcz;hCE8I)MOaek5CDHr4n^E}4it-|PFLE-zC} zJEi}rmVi32BYX;G3ZsR^fyc;jhJo!W8*dh`@IB$bRiYcYo1h@@PyH(jC!mhX$2Ib! z2C~9GSYbn9oaj;RZOha@HLjDJU}i}^xd{^dO@J~V$TY?xHKd6QVZ@q=POqsw^l~K? z9-7ohSDD7kST8OdN`BD4t-<(n)KUgBQKp;nMW=2WGgYO}C=f&PU1+9I=Gcq>;SX=y zd!})b&y;gN7-sPiApTSd_+cQoTmqkk>4Ia%f9rTeY(yX-$R5Hja9cpMO;qBk1a3P3 zDTzz>gq!`RnAZ-9c~fwl*&qsyqdbS8C-{G7QUm^PCKZ2wl;m0`8L2253Gam($?!o| zKwSnYRX+U;62k%~M`{nP98q`WASJ7+u{c?&#f45uLCxD5ls}`HW#3PftETZhstu|g ztuk}eO7Wh=mvCxxcWY-n?F+dzum79w3+f+2wL&~eJRsER ztmw#O$%r_JkW}~@6-b2sDNvnMK{P%A0SpHv9L)jp>%_#wAgxYKP0h^A%*V$kBO{}u zqXQ_+KyB0h?k$`G&I%5of_exz1Of^J;EV@2!vWIDpkf6MTi`Wh7w}~PCR}Mcg3JeB z*R_T1qxrb~ITJvKXNLCqyFQH~q&KoT&~fWeU=k4qMUnD>Xf_prqj<@Rp(sA?+q<3t z{Lga5sjK*ytOZ63WK3_5I?}F><*DAdC2HVbY7k4G@vkaD4JP^(J_jR*vEc7HA3ugw z%%odoq^hMwBP9jh#Ci2Zx#Wb|1Tajje5{;;?3_ZJTq1n@lENZ#GBT%>l!3(1KvUCL zTiZli+f-NAOkdx^*x1_K+y;Qk9Uad&J3D9XtRKN!a2Zl?c2zw8vbPT$y6Jy5h$oB> zj{L(DA3YKCy#VNN0HB|J_2%v3^4dD6bbSHB4JuO&{TbeN|NPU7f;Z(a$y<49UvLN`zWJUeX{ti4M6PU|_qk|+S_MbeN))qw z-szi{-~xMf#wkSYKON*LD_3$o)ZUm~63{id9|ed1fp4R>;R`T2oRlmQi`Rh(<0#C5 z-bd`Ngm8hlV6-S-fC!I^Fqef8hc<>yNsv`ifJInd_H)h0^`T4z$7hzCKE3N z1HvDm$$aq=NHHfT!TG4!S-^h>0Qd#G_6O8hR#(^Xsu8?w1TP1}i^1@^A8=wCR9Zlt z<*(QWbo@jUivL9EQxD2yY?y7dY$V85hXuYb?TeGXJ>+??z4RoSMo?MDbBCulnT7W3 zgM$n%-AE2Y2Axo=QhjD&O^Qp0H1Bou5v#=wUbNLcSLv?x?FvyjYnL70CZ;#|GHO-H zxP(^K&e^n1`kL31`SSftPqp-YtuCG@Hb>k!XEkaOZL_;=s%Kpv@*RF9qm7$r7y|R4 z?_h@NdU#fbhq!YOa@?_VYHZu7kcxgXMfAS=+CTaLP(?X_zkyNWG-%*ecx|8r&<28_ zC=|yeiSb_*;q?&awin_wz_6bZWR(_R5fNbK|1WvqKSA*)3jRAT{?&o~NBhMk$_un# z!g%eMjEtJ1qRy!k?H67Z_$MxKiRMUNd^iyQm4E%w23iAcpt-rdl@$>9I0J27kxfB~%m@ieuO1gU{&p(i&n9akmp1)i$8WL)lZw#egrp}SlDxzl;4O$uzJ ziYz&bO{ntq$a2)s84BoBapGhQQ6eXC92GK_m>`OPFbaz#$D$ap#Qb4siEAYCK_p6- z(JHRwr);RzjTlbpFes|gODNE@3ZW@DkuWX-I12%c2?3)0rsS35o!6%;=1*5GpRQRwUHifL?&igo?dwnW!ut+l`wx+NT$2KnS-(UXGzWlvwdAoOhV_@#x*zEl5?DW#> z@%PIwHdjYKuMh8h1Q6sWN1r=?f9Zs_yP(}3=wKK+9EEaG;?D2v3ycvTgR8&et(93gNofg^z(=opHuzuPXj4d zkX*&}5Wz!m7X1W-IR9`IEiODAL5LGK05S-m;~>X>BIP)SKvtFL@*e3-w+Yel*Fcz zRX$!1hGQ~CeB5m3DAvVm7>q7y4r#T}doD*13)E1nGWf&Ms#sb&csyz!g`mdBSqLVQ zS(Lsb5t39Ch-4?u;6X=et6~t$E)lWZ!Q1KI5S;CoXjZftYAi{GggR)P&v$406R8$$ zSQMhZr@Xr3t1Vid9tnt)=!;BmPM~R--i5nhmSS1crNy z&6S0>n)(?;CWR!@rG!=4F*j;)-Ft_1gy)0$;zOSGe#aKqbzj|%DQHA=O<;Q9Gy)j; zOY|Q~Sv)_cH*XJ!NHmi%Xs%+rT+{hM7tLq z_O@^D{*n;XU9e0_v5kLTI^Z@u6o<+r9yLZ8IMkfx%?>Mn%I*>{>1_6W_R{w;6wiZm zegvmsy7XA5CcUBnw5|d>$E4=FxZvLrGY(os{Te>e*McOA8TCY*ztUrq(+Bg(9bMwl zwrlMiG}!HLz0|HIGz3f(UE6FKd#*ddO^P4x?n8^w*WT|hVRyt1mZPmv2k+u#Yz|hE z6(H-C+lQBG%5tF32kUtk)u`5rLcSb+D2)^Uxlw_|`ThJ@GcKpG+0g#w=cgt-Jo&+^ zTT`2D9~%FGCu37@Z1*!>KH3=)yr=qM$c#dl!AEri=Rjw9FMI8UbsSrH<(U#2Vm`CA zQ!8af%K^IUSDsAo8GD5E(_a%MwLJWAd@IqujC&eQHEFJM>{Qe=&fJruOd1y9N!*ED zvd_*;V2G~{-nzk9#xhW7(o;%u%)>#%7t=7brG<=YO8c1`_po6bB~)V72V#V;C`9T-uEWTG#@vPq8$wSF8jG($vbfQ8mrs)a-$JJsH$NH6u$V za}I-*=egV-KEGpy*z1XI$_VnaVT&q{ry}Kor(BU5BY9b_r*@56h`yAo!OU7u<}oaj zs+P~nZg#-WO z{9Ej)FP2l7H^?Wav+t1$G(~dvMOD#m!IAp@RG1Zlm_v&zs-xZWfdw)Op=5Wt%abXt z6s;1g!3{LXUTaWqaYg7|f}y9N-qfodEvAREk&I(PXGBu7irm|XkZz(&Y2((T8hPj^vf`|AGIVe#F;MmI=yRnW|)*dnZpn);*3W4 zzuzw5wb68Kdq>5{^m5z}k}35`FGD^!jcgpbOHE)+Y}rZhBF4(Lwpkh5$E+$jxY*-c zEw#RAKG>9KE5a-fY8Zggk)h%>%MOsN|4e}8(^!}LK2g|zC z2LrZ`@Bbv!b+Kn+>ZP}%hM4UFR_H#(=#m9gT&)aU+~uhsu8F>%tzaQUfzc$jJ%X`% zzguO(exl=diMlJ^`3?(ENaVK&Wwmsga!kn#xxF557tFIID2!`K1k|7~4wCw$Y!M@N zu|&B$*%d1FOgYsCy;1UIQ5p@5mlp4$Lf`%<=Ard^VsO^(&M7iC-+XQcF*d6x4!SZl zeXn0@kAp9U{5Cf@FT;T!b$wciyv;N@_?65%iCoZ{%1kZ5 zG@wqR!i2AEfxjA?`YUiaHGy9!+`87h*|k)baeIi;(;@#KD zQ0*W5>lq5uVFpbjX3H9Hqr9m)6f>mXW(j$OmU9s%x^R=q^6Wu6@k@@ki0F6kE%)@x z(rko_1`m4Mwf3!FHH2sdlP`|^nt}6WOg{PnyK?!{6SvVf1+{laY+u`4Q?;jj*q^TG zjBTbi|LNu@zKs3#%E&iYPWUZj;LQyBU@BkD?Q3p4x4IRGwc2lb?R#b6riHtU9}`Yi3->Y60;Z)izi<+77B?$TYBb3-!QxnFWBY1N-VDR!9Ajhl$r{0 z-UWOo_0OaF8WIUHUnK}BCCL0{oP3_;^fIyCB-I)Z_hTH@UD@!OX6a>n%Z!>U&bwE< z_*_mIL}Il=u5L`T@nr_GrHhGMgrRtF29&t5-h~X#>^B_;7&cR6SVxmqTLLX*M z+6*r-;M1f^v=oeCXhP93=nAePUPmTa=?4wZBy|U{PR$uyz$D)FWGl^x3{nUw*(Puc zN@yDjeK8k(`2e9ksX27tsB$Pyv&K2U2T|}NvJo2}nH0jv=$~xDbn`VPh4_IVRcO*i zXnGb?bdqcG=jh}SV#?h)s&ty9`ASjJRnZFv8vA)^r8{Yq!=X;45l!}pZ%n)r;g?m1 zQnFp)_LApIdmw_?kd6@AEC=jbTk)lg{xGh4Po=PCZ~Wj!!n5znnZdzhtr0rol25`mXDB@ z`VJMrK`hlJLrKC_X-RE9q&}YyjDa)Ug>eFvrGX|}m87C2b^A!d-sAQuBGJhUZta+a z`AA5-1AkpEVMc@VWXLa?z-@2i=vO6RyjaPr*GS7t5iE)>7Y}oIN^{{dTGCqiC5~*& zFwbfjf_%#NP(ZH$Eh#}Oqw+ByTU$uTrzbKcUGXuu-6D^YR;t-Cf1Zhf--3`p4(^?< zZhI}q5jymoI3#K9ByKmu{5C~_PAxFbCa%#r6}EAMj+n4#G=)= z!$z;=jVl%2gOSLT5;jYEKg(8c{Yc#Jcv*Q+x~``fLi2b@T9oty04>2SqhUvqI1zyL%@Vc{-XmJZv zNE2sBDG8>DbIPOcm8L@SPq}8{T8Y_)7tOd;ZiUozSz{T;d@i{g8gh4)8|=Ua+!vFD@Ki9 z3hElEG=@gtKK`jt^xg3SsqZR}Q;4rqjgA`HUdqIom2z^Znn`%WEkskPFl0YR z*Q9K1b86Lm(YuMbUhD%&a|lbDOVZIUK-)O$zPk zln9t@t`SQ;$W?C4OC)&Z;jHVT^K?pya?bDxElGX>m4gtTNao$urjJ%G)hM|1Nrl&+ zsKJ7VI=vvEu>E>h`~B~&=~LBVJ}P(G*e9ZbBW`rW7j~51QA(cgNd483&f1x&(wTjx zGxtVkUSVfJS7*^Y7SAX%4?uyV`xR#%R(+z;mV8*<^{`?7Asd{s_S3`rDqW4FU3JD? z9fe)RK3xyzyB_;=cK_-z|5AwE0u_Bp{9o|vr|zz=an?Zdw4s)*k+!9=j)|$Rp_!h6nVz0Gu)+ixb&JVip1r2qxbzh&wG7->&H6TYhdxu zu&-$GaCmTVcxVV}%>VVxgt*>o6RgR}DQJd~6w8h($pAHOulu(9*9`9; zTJu^X|4;Y!*RLezC5Vas4Gl8ZQ3$!-LogqtHGV-|2ouVN1{u$Vyw!D?+rucyRa<6- za@(WmWPM~pb=ms-*+t&6sSC1qCt@r#x!}YzHK*V_B_l9Yu~zV)D#7{oz=^d5rIu}k z%>J;jI&{V5iHqkNer2(y?0wv^gPo|S_jrApIAV7cUSdtDiwq(lbpBtM4-%Cf|AWr| zkMrfy*-t@%wVoHWBGFoo&L({k!XncSua4VC7(@+kXvdyBj?EJ(P;ESS>7Gszu?)VX zu2q_kf0lHgpGNHKWYcR}7kZg$tF<@(j>)d4WRs{~C|uAB2#QLww!%z^Uk)Wgg(by) zL*+pTx5I==VFD?_e4)a;o|As#Ty%__v<#fI z^bp+3Mb7~7y*y0JysWJJ92`Qtyl_E53Am`Nl(eFPf;!~xps9IJR~IsMFf}!`fV%pY zmeAD69x7YgCw6vEp$`8Oi1>DR_8jf`^LXY>!1900&;D4Y4h#(Z*8&YXukXR%nbq~!3b0^`{Ati`p_H)wbB@V**o@eR+JZ<}SxTKdv%4Zl zx$k?2R^=*0(aMImpu*PGBiW(RROr~MMkx1-%9p=j7DKdKb~BfS$n=p6HmYEJ^aRd! z7mQ9W1LNAP9v1^UgY@YWCY8ee=Fd0pn<^m9wrC$z? zZZJy<*k(=twMY1$bIkkD^mM7UEt>K7>pc%x`@n1VrM4EsW1CSMg_lH8jxK8x?;`v^ zrh9HZnW=cx1NIDR*89q=JKtTsakg5_Mi`Em9g9C(jpDv5_8<2-MHIdfR7Z%JVn7MO z!y`Av$EP45xIsijO-xKfLPASQN=HUUPeH**d4rjX3L53G(cEOGy#}?f&m{u`4}@z& z^E4)AK4xZq7A^sH2|+GxVIFfBpDRotMnou2M7RzH+3E`S!-OFZwQr~@*OwRWBu9Bv zoI4`DBG;FhHn@0+gk-XeOo+Ukr=t7|6$L9bB~uL*15H&OZ8hyX>Y8_N-`0UjLqk_n zQ&&stp0@V&fKFHU{vQJnV-pk8hYugtSQPW3KKcK>AclsZ-9HL#d}!OxT+eZ4uPyB$ zyP7`+c1ugkkUPdT+<#4S|Al}d$m>7+@AZ25!_EBo%m4m__}{Z%NvM{n6iKhqFmbN= zFYbTlJ5+4siq}^N{9*|AMJ}T;gF9pthBe`LGo`vQvoM`*s52|Z8<04c`45NP4zeQUaGlW$FhJwe=fOw~ zN~Qg6?Z?sOPf|(t+rEV99gRY*96`m6Qf~L>O3hA_9k0Ed_8+{r-I;kE{;9&O-S5=j z%=9O}aS!d*yn{DY1@hnd4&>xAf@%g$P&uxtxj&xU{MWD}76&v9XAWnk_n@b?q$a;h zP9#Hw$AbrrkTJ>tLF`9FXoAt50d85uM{hHyG=ZpbECL`FtN zRaLdY^AfcHHJ+)I3;}V{f0en{S5{ZZG@6b&-#px37mJ4?*)h8_n21s_vJaV~9DyNx ze@Y_OvNx2G@rjHCY+W%Pn~;UBzj~t;ar03}EzU8!wx1a5h*s>&l{;^5Ih_;Sq$upj zfnndklzPdn_ZI$?r<+@Eck-=H$xVaQDVxze)hePO4NBdTwtxQv(1dFW)dVsMCrfhL z!Qi8WuwHzA{2RtMpmz_c8vYA48(tGa?AMDIm#_~8>w$@M{>AK)zUE^1nLsu(ZZ0mK zZf>vL-4Pxhey^Z3ThCxm&rmP#aPQZVuU|*K_KEgE#P}eP2;V>D7wh}C{A2x~3W)U& zhz$rt1_mL6f|0=?$k5Q3@bH+ZsF);XVbli1=urRUNZ-s@@BDbrm&xv>sjk)O&h?qj z%}*WMpW1h3+jnQ%_vYI6=G(r_w|`%Ns$>6i=l+-O{l%XB#lHQe{{7{_{pI2PmC^63 zQGd_H}pXU+(>{JVXkrl6x@!v-Jx{ssZ;7?8~uqmlmjwc z=x!X6$Ck)O?@15w$B-}sUl1Rg5gS6y z|6k$4O-$kc6)r&Qj+~sFj*gClg9BQ0N=iz9g$wc7WwiFMJUqN#z4Gz$^7Z!if9(_S z8WG^*8|dR3gz$qZ7%E@C5WnjR_4f}83M{PR@YV3 zG?mqUD5-5LuInhS?<#5NDQoI0Z|*ODKTz?0pt5D4>cc?Ihk?3}0}ZYH&24=jI(pkX zd;a%|HrU@gGT1vl)H^xcGdE&ykl{qdvU6Nae818F+I3A zGrag|ba8fkac*jH;nU*h`D-H}=xVpTxVo~qvAVFmHov<*`*q{fx6PUFn=|`c*LAQx zbGZHKaA)>tcmC+>=i|MlUK9BwA0YVj9m;ioI!|abTxv z)sM`VSFN*?|7Y<)dv_gG7X=5RxBn6IT$B0G)bA!HDmoE5HWN0X1R>Q!Du~+V%(*7? z1-k^3{OnL)TyJHrYmpKe(fLsl8$tRH10&=3aYq-_V8~iV1wAn-rD0qd z6%7>|x;O0YAAC>pTScY7{rePgE%4B_#U!^;f=0X))aF_3{#dvi`dn*_3L!8OF#;yt z|Try}}#dVwGazMdFfKl2R#BGDsP@5V@q-WmIQMd$#~%-vW(@ zA-T8>i8m*rN#`QTS4qqS==WG4s4*3Yr2Q#~Zv1~MElG|N{e}!Y1;A6T#8NKBQ!XS^ z&t+22<~;GgXt46cM2ANfR&$M;|JLO1-_nv zgP-8^9GqQ(iz{$_gSv(jp#=?~bDE$~{D(5+F%5Oh>hvRE)qrO6D_s%P`1f6ss~&fS z|5hYBQLkQ6rTMK<%to1&ANd9q>z(O?d*(wSBEoLYRL+@Yse%e|yLlBe%5K2!+X;3= zo_2Nyph?^oc+`Fe*u?GbJt6<-saHi_Jg0&-?t1e2eGHdf)E}(I3)|50{IcrV(|!H|Vvz z-roF0F7A@4n^SsdtWqkxtu(4z5KMWoU%qaHIsFa))AJ>RMO)Sjk-i5^&)efD<>VTF z9F67S9>W?C-wuB1=Y^3v%tUxmE`7XjSjIT@@WSS2_W4jYXX=YLyiO+v=e(Sn_oZI{ z+SW_Hzh8=_$@iVQn}K_{f0>5cE9z83R#suAU+O%a{SI%{=VM|yrJ#)%**5-J^E+_Y z^&}(K{6ZFYx~61OEx{&?*vN;n6#ssLB}L&QrAO06X}acjS)y4O{Tb-W90FsSBvKdHx0OGAcyd8*l0P!v$-U%eSfK(Td>ja9OK&=yKcL3cEpx+Me zw}A(3z@!zJef(|y0a&&G+a_S&0G`%?XSLvYEqGD$+o=XP*Zy{?1+H}n;9d(})d24r z;8O>Dn}BaS@b3nJeIR%kgie6)84x)SVwXVT8c13PsT<(!Cdk_c#k-(v4^(~w)!#ww zK4{nnO$Xrp0cbe@tp}jv5Of}bo+Ho))jsIn2HoqRYw35#JZPT=9|y0=;HLMWu?`^W zD?oi2s4D_>??7Gtbu|=TH5Okrm0Z0qyZTUh)mC@a*>u_S;c}q;a=80)y#I1)=z^|+8je2o;y;uL#^;Tt- zp!o*~hFoO+$V(yJL9&p4cLc>h_RcX>!vEMi<0u&`_g6#q&UglRf!D5*(L668Il{|q ztvCLFo0l60u~Zvc23{364VpqAqb?S`M)kIC=n3;tQi&DKxL(FA$^86-uw|6uwsG1^`QHkM| zo=f??v6)J^x;%rP_7QLR&Qp5B?BAHu)D_2V_nN1HtN)j2y|*TFO_aFvt_y33Ss~71 z&hL6G_s=S=%RdoGb{PG}nGEGVLW(hpCn;CsOR2D_YO$8ut#vUT6{2gfmJ^6jc_)AQ zaaS5G^&aA`#JHrWjw3qz8*TqsLP~u^)X>pg;qh19iDBrnwzIbuO<8WsZl%vI(HBx% z>$qcXklu}nJE+#TG{)^16pG3^8a0SKOq}#jmL$cOP9QnKOAZiCLPn!Mkksc>*yN({ zO`?F?qz4Oczl$&=!`N`Z$Tm`w`Al+BAl`4b5h8;)mkhLVag&PG=L{H^Knh3@1+ppl zwOEh6{Ve(>|FOwxBYrjpJIhoK_Eq9%o%L7wS}Xt)jeOHI?`CjrNJa`Jb$Eb+9tpof z@wvTHAr=<9*F(vTw5T#vu4qKMlm(vPN#Lga<>!v}M4bmwU?O+( zJ2t(dC$eCK8>Ch@1{amq(`GEw*lMjZVCB9NGvl~NHkbpk7gzFVR*VWi&`c}5 zPZv#EWmi{P34MO`#|TcI??D%zi-TUl- zaih8NHJ^7jfi-m}&Ad>MXiGMcc;AO_)`I_juwX>t>qpT=@rU{ikVmN#53EyIFkO_} zRf5$_hSf@+$<>`PD2?8?f+eh*BW{)}c7r>1pD+GYF!5JXJ3hK1;`$bn48)Ux#Q!bm zH_)vG4q?7&e<~fopn|~POaRLQui`2E-A=KxzQU_5g)8p!@--H-kHMK)343pbR`H z0cOR(ycj$#0k);!Nf~%n1{}+QTiKO&$%TLMML@-`;F=#H^@m{%-@_ZeMl|e1)@{Vp zF2&X^#MREl)qX-&Pe)fwMU+m26io!>j|JwA1ZEEhW(@|U_XVVM1tfI@Bp^Np#5M;+ z*9JsX_=gk)1my(;W(EYN1q37p_{aGBNBF!7_HsnLdg|q2=izJj+~3J70fESi@+n1n z*Ts3Y#Cx?Rcz3?>?n(93a zvx%&WnY_!ng3E=X%g?13il`IxVol&kFLPMCHQs;b}qr@C0M@%8^6HzG1%GzTU%gt6)Y}- zh0kDS@oHlEYGmhX=sW1=KLDNk5Sn~dyK_~!3rcoC)+WeV0tK_6x*s%s1Pu+Kz6vxp zU5njrB`qnU(;#pWc3n__z_sN>_>}s;zQup;Faj$7_!dh@#|`}vyb)XcHBfycAI}2? z2<&uc+<^pd^9P032CC2V2I@*aRZwR8(`()+n1RsZ96rcE)#RP!(m)2jZrPXjMmta! zILY$!N8g=QdM#=jWxFwi0PJx-_WWv3C_3+y^$t3GfH8I4I8dTWc{rU_PeoPZ;Z{U) z#+ zd!uOvzjF;y7VE`#0oVIjU#E)HmW>4itan^$%oY{8rLPE*a=zgrgddd?+-&UxIg*_b z?)lqmjCb-UM?;f(i6nAmdmM1<~c{fcU~%KOtF%!(6H>aowrijS3K z&{A*`oZG)_(76aEN@U!g=6*--My3cK;=wcC!j~CkJH~rDR_cx`InXkp{`5oE1cPO& zZd|lT>k!ogSS7t365*4KYDceZiI*_Mw&ifFY5%Z3e<>M5VfLN;$THc@bpB@2=#X1% zfy81UR3S#x*CA9dB-kGw<0N3ohQ*8wJ|@ZwDDAV$WZEFljX11)N%u}XnCD6K4U1mZ zw?wG9ib(9Mj(!O+M#mcdrp=p-8Q$;P@zC~z=_;Ym2Q5pQVg$Bd|B}s14t*PifdprZ z80QaR$n>!rwGIlm+73}OapyX@=w@+jqYI+u1MQlaDSz5)KMiEH%-qe99?u-Icrw=b z)rV*IV}QXHJ|0R<7JGRqN@+(>2TCLw{+89J*~bkSblDp~cq| z2SR2nGx(g#Ovf5vGzs34IhHMn&d8IAqbHu;+j2zD+V2s9z~f0zysD86V-KcfFwV)% zRz0ySUkzXPbQ-OgZOM(5o%xI&70&mtZ-m(U%uI^nR_z5*&u5}_Oxe7xnljZY);H0P z??cd|#4hXtL-syUZZ+38&h?B+zA0i=f1gnldS390nwU_EMdPk496q0>^M2n)=kxZM z1CP|sJ67B1TZmtHtL{=k1aty4$Cr47(mL|GmJff**(H2u`{7}BTc?2Z;sF+d-QMs6 z{2pCK>?naxF6p_Cc`%@<6sKo1dqHi-{o~m#_L6%+roCK+})%pe)u|Fn_4>_szMqTH?14}$+qlN-^d>mJQ^w%8Lm`e^}(!@d!j_` zz=FlY#ms;hj_j~$bnYfiLygqa8A+_18d}p4MvgUpqfm30U~gouNpA0u|1j1o{)RN- zHp(}nbibQip@9U3bkR(GTq?5lv61TXN?QJGdCcvxWeav)1e-d&%x6NxKV>86y~jc& z&z$I{4j&W$0?Wh1T-bN<%8_m!I3ZFbvDn@o=u+Ph)vD)smc$Nw0mSFN(;FS_L<%S@ z3_HFZnP=_T-twG;YwFl6XO1zOS2gM5PnVQVNuynL4(=@|F~b)v#$Va7=HqPyjL5(% z{k+TX(tcK#sjVVXz){R9(BqOjZA$!A7D2GdRm`-?Oy_BDMY!W(Czr*{;>~{g_Lujk z9SU_a1eT&fv3``f1V>{IaZ5nnl2^&DV@4mNXt`e$sh6-#kvmAxiNqxpW?(xQ9>GXD$_=Ja99mR3W@7{I^fm4M8I< z8>+6MD8Ku)$R+|izbbzde)JjxWj{_VtOW-90GSkD1DKYAiOu$^K^IQY(uq=}UR(7? zjsPs!QAvaualaqB%e8q(7$*w zNShtv1V&ELD^mBF)E0$5pa_sqS`aT4AOcjS7F{oayGgJ-Mc6Bp3Y4jLtXE)^2ryCJ@ z`&6GhC%RdlU-_NttkQ31nK*d9<{bWPOO@T`?OMctb2!ky5&K?)L*BQi6P&7FEGIT< zFjqC75o_M*d3cxIj2YK8>v8M$CV}w%85%dLJaw(7tiF6PuZDR&GLu+BB^Rp%AU_@2 zw8xD`mH8Why`t-Z8)YBJE@NiryXXtN~q(5zypHnF|>?R1nPSf z<4`~RnEURrV(#5YwBlUjqD1O;BpMYNL5VX{loD~Vg~x4Ytr1@$(=*gYN8D|Bt=`&) ziQ{|<&f+#FsNFi^sXxUpgMtDKwWO6yPjzwY5~;JspG*d6Z`LuDQr&d*2-ypIhTU%3 zU?>jS9C5oyo?c)Q+Vwq3cOrPbjR-}vA?e>B_*frIy6U~b7NY*N?x1&`#87CueH<%N*W+{!1;o~d06F+v3yH8}`qVk{%PtJoN zok{t`83-pPn z^8oSZ6TJG~M+I40H|=3VB>0F#U*#}crYI534@|^YkniRkO{+Pty@>W`B|$R@En=2N z;kJ4k(jl^xMUofA3?wgLkg0ixe|Ak zG+rddTn|eg&UVks7m`ORA}3^b+KfUgS%?gbj*R{&IEk{U@9QqQPW4>ra z#aUcVK3^ufr9*sSuCIHF9(7xX{WO9uM2{}9S6X}% zacGM4h!KKiS{FmYYSWxB#Mc)O!y-stA%q(zY)4VJPu@uM-b^niyzBnn$Ke z+$@PRT9xtTSH{+v-hG5MaUZ%a;aW7iaB9pP?GX;Cel7lu$4XVJc3TGoqycE@l@Bob zmEA*xd-8?eFfkZg3E}x?axE)a*Fp zL!@FTGq;Yp(b)1m%LBf7b6GShUs{V>)GREq+$1(x>^sZS42n1hKNPsuWgXAafy=pU zV{8O>9r4NmDknQ4l{#0p@C^M6tISX~qSq)5CDf^bo9w$Z`@vnfax;+)a75j$shg`HPMLj zD2L*w4SmyN0a~i!En})B&x)De`)axsm-7{xer3RuWZ`BdnNx-MJ>vKY-9?gs`wEpr z7nLy7N|H3hu~Ze2MdjqUENqI%@eS3Diz+7CYL+yLV~J`GuWGKeY947)_V;zw0vFXn zv^69P)i9G9gqT;2#KnyZWDQ=n5aV)<3~jBVbghIRk#YnHmt(EQ`&zB1q*$M7(PC?L zr0eue>U>q|?mewDeqX0>QLB?yXG&Xdc~PC?P zlLj}FGH2cz7q15Ig@)%&H~al-yuLOBnluJKB@ggw3|D^N7%5E}w(v*sMq3vTDc)$C zV!W;uZ}w?T=@(5|7j-DdH7Ml&_ShlAUuE)}Da?4dwQPI%Q(9zLJB2`BHfq+67 z%FD~E{()~Hul7T%1W7^hg2ZY zWOQYD8FGS$6d>__&a~)|PAKWn0+kC9gp#Cf^5Zd6JLCU?Y~EZi{^SK($`o9G+$Wdx zr@MWW+Xs1u0pAX1Yt6u7{Q)i9pq17X3AGth50QeqQPPw@E^oV7js+@3@VI(VSWM*W zkc(X%!g;2O49a-Aiw$@`mForoTFpeh*&MymU;{5P{)IB87oGK1xa|M-v>=b;KB%X4 zh9>mqgmGqZCNUqP8YeCDU?}Lw!G;V)hTTL*-iVFXiH!}2jW38z?21kviBA25Po2Z3 zF5%Nx@M-Y3M4?X87?2nQGQB{)11P@-nzcZ$9OxDS)l49r3Pk@q6+!%+_(6j{Xc+Pq z!b<-5ndbblG=+}YKqBi>ChM1c)=%ZEQ~k_s>$eNe855pwN4-<~d=lGz;#v^MMnqIC zBCOmuwAeTJonLT{e{fbn@Y}$kw4lJm;DD&Gz|feWptqrZMG?Lg(Z01v-{x4~4{^S& z@xE;d2;YuG->x@)T}gi3DS^G|p@TV*L+|2;%W_AmtH&B!Cq4{Kb}md0?0y>i2^p3C zt=TCsGYKXq!0;I89|7Hipt}!rcZ2Q@(Af&w8bEV7sDB4)vqAM+P@N8{(m`bgD9r-- z*&r+RT>r~~zO!>*DvY)f1zh+C%=gZF* zDt~>hK3l5)x%&QOtMh1g;M=!}?eCw~zJK|=zwzl{cVz#lcmJ#lv48R5J81cSJ-Hb^ z1yjGk+yz*Gg51x*(ivDe0~=>x`wZ-!fxQ#3e+Ulu!7(&U`F3r;dT{`*4#5@FIfL3^ zf0}1d&kUN>Lk0cxXLbVh&i4Npu0o!x`%pLQ|4GQCB!R}A9{K-`$b>pvB6pIQzhY7& zh?K4YPR_gO^8XVEWL7*?00Eq?FbLo*{wEMf)OM=Eyw&YLR(Y5=Ays1r6vOq`Do+6l z1S%ng0)c$dC!d|Xdnns+dda+Ma8G!xc>ITNfQ6B{b>}GqS@2;@tl&T*rr3MdJM2r7 zbcmof`3<;5talERXWFL$jz%{${_3eKqE^A#G0QcewHxibDrUJtMGL zn+G>XF*ym<4k`sgLx};E+h-4_c0>$ln-$@!u^!6Cw){@Cbmet{%X*jSwWM6w~ zOuM{k!-+fAF05lRd08{@PfCBS-*mtT(?{qy^NJcil5PC*X2Fs7K>;#!V!WP2ZQ4vB z-Kj6dgFFnw0-HV*Pdh0m9M)e*e=nX;nULYL{rzN*uoN}2R~Wji1X34FtaGmqDB(L&|H-Ug`4DLzkC(PvJ+LOIC60iiN|)@gWAn$P3^|`@ddp0c#{oiRTuWUVYsVN z7FQChA&g$1HKUj=CPa1B>Utu+8+AM3WGmEO zm=Z%BxJNSS`tUE{L(gK*Ztm@b$JC2=O#S#dw@Tl|ei0g4i&_oFe@HA{ZrUy(o2j3m zY=1f=GVuA^e%yGaV(MGouqBNwxDZ zC{^VBsR5hkSKjoi?U46tD*xE!FxJ6Zrj-Tcm#Y!P~?X6PIo?S)ls`~bs!qg8$z<2$T#0@|>rAzpueW%9xZfjtEKNpvJWxKY!?(T^M*>Q??_g&}Fjkl5s{@%oQaTR|3Vt{Bi41Or>T?@i{!uDPFSLtW?%$ywVcU+0)Uj z!y=0znR!e;2QIN>jZgzN_a@R$?Z!TfS(W;23*7DOvdLQ1&5$^pNTQZpR2gt2a+p!1 z+rD@cj?{^Ma8k|C8tB)EfMUiTb_9DZikQoCKhcfc{O-N;o>P9>Z`4ba%g4!oLz0k- zI3q_7VXtQ=w@9k!>6n9C=fNa(>>~e#P9$Z}Axq@3t_<#Gk>tVIJ8jmj@uVwQ!RDoo ziVU^FZn`7G{t&iEyXT!Zu$3I16Z5z5=7CbQ1PV9?9*feuP?ed-2%4A3?20yJHkPs> z7{I|8@yRzjoINm%xUI_IsZ66rG9fg{W!!h8Dk583I2OBRs5erzuk&6%vwH3jEOpz6 zS|*ohjSHy5R&}%s+s$ugiVndf`WbDt-e^!qP$marN~(ORmT2NbmsnrHbs9s@Q0>F! zP30cr_3kuk%f2sz!0VkfaicQf{-A!TSSay=q>e?!am1lz!Hm*A>HVI=h@g^P&Z}Yy zENg0e*Ln9aAAfz7ZVQ{Y&uzyXUgOX$JmY#+8T4t_G)bI{endDXmo`fEX)d8g?@ibElCBz|ix6e@?3$uzCxB1reom&kV{LuSkC4Tx4s8vng_)@{I;=Z>~I zDYE_RLy`xg;zyL~zL4K&lT(dvC-YZFhlC|@)6bxI=P zyczUXV{b9Y2oN{NBZf}U$^6b}o^|Wl9kUq+3oRRXljY*b;dHv@yNsqTXx&^@Ep*8K zwIltUhD#^;r%@ISj@#GU{7u8dUW&6@9-?G>JFBUpBPEnPaY&+;FLBR1cj{DBdo_Nu z(25h5an{RmS_NBbm{PJ-$`hrsJb$eziYa`5cem!fSCtathD7xNZg(sZQdqO~ray6g zycvx{O|(ONe7F1&VdkE`rV90Q=S#G1Q)B5#a)tXvGOw@7o|&-u1UDNfWXnFYAV<1m z$hswfUTb{M1!-?6nps~waO9$#R%FUTqRU|Yxkt=J)zSFO1L^Jof|y?%Y41+txn!A? zIuvNXG4Z7%Xv&gD#5#z&jY63ABXQCVRE6En0)(tY;VP|o6GZ}X{3K;|?^s#Jyx?=W zxDmEW_ee=v+f=2Iq$dKg1vD?^T??-Yd7lvE5Vvo;OhGe^T+R>Eoz1SQ165(`X4||v*Y?b+WQY-w?VDf5nwBSS8Uv?XtooK(r2?B}HS6gelB%~VE zp8@fE&Vudk&x`wh9ec}oMCYrq_m2rXs zA!3;@Ow>&%i$_qz*sy_mXc^nYmL&M_cBv(MAf;QG3JqhY9S~+3u5_bsBzVzAAel!{ zdkS}@vK>X5oG#;df8s@}A_)IM94_QRr*7Aoi15g;CB=2e>^`(IBr!WSxKHKhGr3}> zq$*Dv`_Mwdt@My^p__C`Ufh{rM_bcgAWUWK^NYMHA`SK+^J2TM5@L+8YGzVCq`_1dAku#+({y6da7R*d6l3pX71W*N6kMR6n)h2pp>-NYpM- za2Mnm2A8oLeQElaUGv;-pF0vFnc&ioc@U0lYJCR}q#Bu{u>wSAi9JYgyrv1Vrr5ak zOw`~W;X>H5fdpSXj1vwCI+)bnSSzXNY0pzfPmVj|yjBf}HmvYJs7diu zYgba}ADs{-KIRhJdBfFBTiU7na?T42GklIS9QV^}j4r~=gZn*Bn9;Z?PhEYU*vltR zYHDDz$hwgVF(t|u@l%J~BWLqM6Tatx=*LjNM2~-f&*w~f?}sd*wf>yTozh>)O`NB}!oqlZ#QkmXz5|;)XJx(`!56+n%#CmlphFOK zs`?BIJ3`EMWDfguJN?YV|9lnuHU{js9b1Ah;WJh2c@$$C77lD~c2N)N%0!wA1oG`i zq#qfLn^LXd$1H*tYex2d_$HFZU>*CtqsG|WlQs+mx_o)6b;4;3^xb9LFDLSc2}~&p z#09KQ6Ek9QBE%is2{hTJXzfG})QW|{Ih<^=te%Q-HDX>|&cnj;sQOx|tRy9!Pq6}@ z>>c107esKg-`@y$GwtVd5XS_eSvh;%DU{h5-ve?wUi#I>Vh~&DpR+5@P7($)=VNdr zpIYSykmK2sg|n)q51;5UDG^U8i8*N~7SD?Hqj3hK64zl_V+1Q2@fc`YGXr7E)VRKU z)Gpj*EP3Yvc^ewv3rzWVa+ydCS-W}3Cj%tbS@}X!kz^j}LWcw|eKTIwA=nY)e1&+F zgv^5TPGzVvFw{N?;zov1}(P)ev}n$g+L(G8;o6 z6IN1tUOIM8_EDGy9G?{0B zNP#q2`MOlaiE+gb&x*6u3heXd>wXqUiVDUMLEu+?5~>yws{Tasr$xnE6;s*xr$uE_ z`H`#!Zc-ygTPC7OhFV!8R9S=SSR)U0sGd?vJ|(*)U8|l}tHDd5VnU|&zE+2}?p_I* zc1ew%SDjH>9ieU=>tU_&MV+}Dk-5Wt53ycfXRfk+b&sRbexK%@u?Z%LA%gmj^d1nBn>a7YC7M;s)X z45X5QbTW`h2C~UOE*Z!t1I1*Zlnj*rlxiwaO#`awK>aPaodq{p?kOiJ+0mn?>oC#bqf!kZ~Dg$_@17AcM z2uuY*sURc;gr-rs@3a%>+glB-TOc0s_Lh?aS(Qm&B;8XM4s{y#b2QD9fJGTMH z4&d1J+pz~Y_5tSs;5KySF?{)I& zYOwoaxaVxN_jIi9aB|?=?9lS(kxz?bQ(q>gKg}#mEUXVK?sTnut6D$J**H(zyn-ro z8|3eR@;y-V4b*?XmaKOF2?rS52P3;+d;=h+*TCF5SXcvJ*1*yVSY86FD`0CA>}`Vm z&5PshpFekxf9)Mzd_TTC`gwJFacy1o2T%B`9s1h>fs{j#yA>28unWK@02^0VdsmPT z>yI;V{0khPgA=G1!uy|)@*5}Z|H?_#@%~9EcPOlkKS-iZTJA!}L`40`2Z%2i&ip^E zkb&y!R!FX;)qh(dbtURW=AGeRcIy634fwG+3jv-|4u4Yvj(0P-8!8?Zd7G zCFaK$%#V1j?DT_VOnB@KD`%eP9|U~7b=))H7$j>Ul!PwpV`RVKmq0G~{89pDGnmK? z9%W_-V~GuXfAXw;_Q9*Ev0Rals%3L(wuh^RB{uw5dEfD-*eSA}HTuCbl~K;e7GAWU zikmtS^33WwqZT8S{pAu;UgF#ymZi!FoRl=maK*4LNLEDNelusiN_awyUA6blU-r8; zMU-@Hi=(!*PpO)&m)yB;lq4-XPL8i!OJzSt{_NUtT#9~WrdEFKF^(dky~v0T%SX7b zzqjiH)F8ELWm9c~hmsrtBHdZU(kb3K#8S^9rFAmv6eSEIZ}X7 z#%=PVCmd?=FB)-N2Be?N{M-q_7$4YjP6ON&*t8A@sKI{zOvH~Xbbj2$?)O9zWPdVy zM^H`ImUE{X(XU!UR88wqIqZ1$TGd}HeojeKDbKjNJl7aTp(J|Rw?-Eec|RZFR}C+6of}b*X0q1eH3MA2cJ}k9V-&^vKJF%#!B33UBc@pRyxw_rg=m~ZiLoLjgE)n?&r&jVyF7c(LjLm zGr#asbukBgyh?ZSQ2L9eA;RF=>0RD*fB!M z$PXT3`voDsn02x2Vy*MC*=0fRR-DLZf@gP9c6s%g2x``+=4#+2q=CFj`SRyu+p@f& zcyb8}SKJ4<7dnK)e7rJE{LStHI(=E1vJZ+1y@oD2sOOKGW$cM-e<&504iWM9uuMnF zeudkt*3c?ng=Q#8~HXZc{f!VaTD(fORXhvs4Zb>Yodd-G7yG@2j!u+ru zl6xL*F&i=5p(F?pdCG@sW^9pzCh%)Q@zX51pYomDo}!E*%u*Itm5FvG^R6p*r4c8Xd)Lcpc36 zGU`eUhbj6>=Y<_-DEAy*axXAN*{RpNs%y8zrivGH5qn1-J#xI9i+%6>}E(=VN z&kI(Q#mkHAI0)!oN6i?Zw+|L=u^{?Zr6hlZz=|h2B$S2%*7RW$vB=UkUX$C%xy0{p zZV}|jI*MppI8-A;;O|6N@>}o)$cbN^Oo=c`-rTZ!dGm-#RW!^{J1&2XgbElBn5=e}XDs)ye#TYyAnOcjIq0McX;SjztB&0(m8U2$>gJsYkDN0t>T+<2UvrD1tWkvBi2$W=)|0~`ogOi;-W zszsAs${4Y73~o8ry~68oa5&5aY z-rR^h}?r%XOt?XCQup5SnfO7*^*YmB)vJSv_JYjf!V!zngbNR zXlK5+rKPAsu(impgkO;fbOxyNJ`K@1g=$o4vv7rD7UJR8Wz_ZtMx#d&W}^92h`1Lr zI>h!gL(w@$vm@y?{*<0$^k^cjBkSq@U3_B!&!1=C^F~Q*B>NIp}R9zI4($0It9y<9dS3fGsW!xgyu)0F^Q?eI<%|t8; z?K#q@0t%Zp3Jjp}hf;f{tn!OQ;wJP7^-A22&y_4T_GuB%^DRRG1O~A2d zEhK@zUmzVG{kwS0IlQrl_*Fan;4qq3k#2>BW3sc`NNnpf%Ya^wc_!dyXV)TU8$=hi;g+WUL_do*tq;TM_Q$n{51JnB(}$MwkQ}E7ZoSUls6k|MpH52} zbuvhhg-&LJ@;3gP_ZS2nCsJuo9>ke4C4eWku@CNVM1IDeVsakQHSjA^GjrL?uyV@! z%-AqFimjri7E^A*%4mAxZoI*J>J{J zh%Mt^zBlf&9=G*{&SFoVEgvBrXxUfyV)CD+QM+4NeSMa=Lc%Pdlmn``h|6!V%rWtv zGOk)N{jynpKv*0v`e37X(AeNgL9%?1fcvaAT~81Z`s`(5U*Gd1{l||Hh_h}rv!6`E zH3&6Z^V_|&nzl~|R~}-Z`rW58#DJ0Hkl0x0`A+qkeCic^{L|I_hDSn&TN;I*0~PHh z1+6UIJyw2{IPF1s;4v8M@AlH){oW%~rNde=a-4N*a-PfY5eXhO~{MSpb+?(3n`;%#TyZ7APjsGI#spv6wOrV zlH?72Y*p*ZWgfE;>INBd8ix0U?jxe3?8*CIGVY|ht zhrQYMvkI_k3N>Y0LqygFMsIjTJK8#u97T7K;G~-qwlE=g&j=#|BV~Hr->?v~Cq&p5 z5Tf8lNd|lPYy|)~QCb_Wpz;GWg+L!pV%sU)1s(eYHMUQ_fOY%ChN~bJg%VjPfnDsO zKoy3>>qin5-XX&^ew!Giy(S%v;Tp3X^hlk2#h<{+&TG5_q0)B`wL-_@LkP`U9N(ZK z%~CaLrM#CZuJ?mPTRC%Kv?{?LmJ*2;#BF0(6-sP^B#Qe;*_dPp!Ya92`r_oe`r`q3 zM0$8*xq>%>WS`c_efLii3x)mAL4D9g!r{v-JVWBpFIO`gV=%+%Q|D^(PUhup8dn;e zQ#cjBqYxoYAOd}jD1sz~ftA4R|6}c~qoQiVfA1N(8HVoe8W=iD{hckKK6UibC=HYv<)!BBim)Af`^;|Z)}h+a46?e|t1s`Cn@j=P4GNI>2VR)Iy_&>-WJhnEFr zQ5A3}2n++V#h-`nv{J>X4k~H1-Lr`;ihFMLW(g*iQFw>Vx8b|kGg()bE$rDv5z>9$ zTpO~dq2XwC4(Z3PS3+^Z=&pUd?3GJU>U24kj@sUnhlLrsueO^9txSVT>DVNFC&P2_sb?em%_ zhT0gp+KxEe+JuPOq{7;ip4!y)+Vu0<42HTaxw;(Ny1aC~tEMD9WgSuUfkuZyVvmt_rh|6JUZ2*#qh@U;NR>_b?- zpmhT_F2jhv_!EEe_Dt~y9paS>;`evNi$94Mo{Ja!y6F31!3X<(B*Fe3Os_Du%0&~X z+{Nt&@ahA2(V-SVHUP+$OHH5?Kt2YLPXJ^efE)ynLjZF4Z;SxQQ2;p(ASVIjG=Q81 zkn9$Nt|= z1AuEk8t~``y!!#4KEV4a;MEIwbphUBzi2ZM&;SJ20@tg7h)UpgIS^e2#DjT%$%O!L zrvykV1@4vsS(QLeC6HGM6jTAlmB9V-OCIcfpuPlXDgj#V11*(6OFhuq0JJm$Eg&Jb z1!!pl+8zO&ASCuF(Ax)~pA7*6Bf#Skpm7wam;ef9fy`wfa}CITae<@-VSc4=f%1Kz z`T%G+1e)Fh?eBrE4`8q9@4*vb^iSgc8JPY8%$)&?pMcd9;Kebp0XAR%1YZ9HHh%(J z=fL(C;O!}Ja00wP22PGIE-;*Y1WrByAHM*n%9qJFn2&${evzAh2k9uEL7wa-DE7bT zzl&yV@VRIL&HkUP{bwI0Ll}nv)5L;Bh^{j!1AS-+TmN`Z|I72EawTH!fz{4efZo$! zD^8tRrFsR?t$*|Nb(4B4jQwBAAMLYx#iV}>nGCwWICX}a|I2`orK?aYDyX)u{Q~s#jzjWy-R8mF$0?%Vme^Qe=AbCrrtb z#B(lXVsB`WhH(<9k5;fA1*fX)AQEig_wqmWD<2gvkcRzM@Wz*_ObAxL+QTo$9|q(} zX=X^K%n;GntlokN+&ke*+L2pzqMc!WLm)VpdEE{B5TV2M*bnY_d$aaxCJ|a9O@Z|+ zd)kAPP+jo8j@ujWs?o8U=TfU%V{@IQ^bzSTI>m(t6w?BB0&O$ywiy_#mM=!i^(zlv zC{2Z>IMfcg3+&c5x4yYro;EJn&|O6RgIw+mel{g%Qplf?kGnrPhnndNKH)F7NflFD zY7YzKXDu#j9Qut@jKfVsITe7eV{Xm!?-LjGK-AX2aI~8?c>1Rv|6b$NcfG4PIHzPp z8}8rn!m(a#l#{otu#IF(K4XC1b`TcUqwq7joW$e}Y1n&$!8wQZhF{TL_zzB_0m(`w zozX`(Zr+)#2!CQ*zk=SkGakQxEO1qAmq@~YvGL6JR5@JChdJ!fDcJcL`XN;R13N1n z=d2R0fQOMd28S_qrzbO|d%lSMIk{YA2nV_2T%%z!^6fZRP;^*M>`mUy5P~3hR9wXr zcVAH+PA<01_RTXrRXg9$8Pw>=)86y-cgnBrPrc-JmCw&JS2wXIxmWDhfgc|~+$w8l zWqNkg)tkjErN5%?)fXZzLiCMVHR_xw&1n}N@|%2WJU1Dg(hEoAR>fv-%n`r(xmojw z-#g_d>kE8wku6pYf5h!qlMbh_3dEd{Q7H9K5H0>y;mF&Ab)+i}i{h(T`Y#O>a43Vz zGgd~XFIMf_M?A_W(?V+LmB1n!H-fMEDa|dXJdPw}vjsu-gsU%+`2)HlK}_j{M?57X zF2>mrn>Al`C;9FT?ZZOJr(#6_$iGtz)beT^#`Sjb=l z$E*!uu^^%)WA6bc97*WH%ozH2#@kg~gqpev2f>C6&V*0!1T47vSsj0%#Bjum@)5d0 z;q5Dm#yodd3F8=h2d7T5`tbYJy>Ap1IzFr&f=!1b2{%*WkJWFmE3Hk-KLLWsV8rT) zLEoCgQ_g1`-YsWD$MD#0^l_?v2_llq;LImUj`Q7-MS1-KXC(Stg-1P?E@56mp*K}Y zIbNXzIeb))?AEjdo0@5KPMan7FBEa^r-98|eM%0lZ#Bh`=^O$z8A>myxF@2SBTEOw zw@E1ET07@6Kc5+0cP_<2sy|5`m}0-CyN|N0*Ie(FxHlookW;yoA#H;#>-KY0m}#Pe zT>H$_de=6=+;tA!$nP1>Vyo|}I|$oW*e=&0An}Cv=)N+@5Kr;;e2;_0I#Vo3ofcRV z^oF0iSKyKF%^!Uh%1#zgcO)T+#nd7qxKjLf6eF#!x0NEvF@YyNIfQ?LD zKUwj`k%U^kQTK=)tMMrI_pgg3-fl*e2i!3MGp-Urb!}?&1ql|}M5fgkvv0UFb^yNxJn%V2= ze2>UG_xM%ctM=w@#19cW*1CIk`5XzWwOcNdw;~CD`R5|UkZezFzTPep(m4EL(v35D zYP| z=((%#%HWea+&$dx)bL#4uigR3p8MkGWc5 z12xMFr;;b$=zA04D0fmH*Jg?tn7>g+=E{_aIa6P4H9u1`Ov9W$bYCBHvvNelH*n)+ z#(LNbuRtMK#o!ti9kRiW+zrjs8kr&fbno>$&Fmf{#-)M5A2l)e zzomSoUq)ly3Oah2ZY8T9Zqh(={a|S8dIA}`A?`&n`#j&(b~4{$Q=ye6^q#dP95v~M0e z#IksmFRr|k#J7=F|EBC0*({bKX#7bjAX#F=CB_#02~Yl8R~jx6fiu>??R%TI-5&YH zWb=J+MLT{KG=JpK6vqENgQPoKlR_q%?Yi=F-kX)`svqE}SEeQ%pzUXlCq;|j_fV^p za`aD(9(AoeqAKvis^?smP9=m+A zp(JRha<7l{*NGu!RdN=kbnlGxNrH??DCrMl;)kCcSKZ=%)$p-<=@*yLRfy@18plc# zL?~FJm68Hnb8(6{8RmlJmrJB=yN462mI&YUkyWw926ILo^D3NMuvvT~MO(>OlC-F4Vc5Ik$?74>FG9EqTgY-k zNI$VTNO;A{(AmwY$F+TiKgx|JGR3dW5`LGFd_9Iff{lzcnuWELw5psaD}cEm#JT6w zmA)kAPHf~xi)cn*>Y57q1OYFJHQVDchezAa<=MKw%LR0Kgtb@MLtsLzn<&9ALCW!h z8|WmKP){q~{OhydL`PAId$sB4^0cf|zG%t}t-iG1n`tmAijcn4AEiV+GIYP_(zL^` z>T3HHnToG{Bx~fR+zj#-L8h)!SqyOq{h;yFG0yyLEvU9g=6l+gG5t*-twK7r92`D2 zQs;~#6lrT`X#L0Z`y6)_+F2H(GxDI8!RSOOJ59#$wu}mBnC`attNbe@AJaK)BnrPl zm%oV)5@ZcI3v=%KTigig{LB>-ARCAsp+-seJ~$Wex&E$JSf~kYFguHlD(@+Z=N!;-l$QPWt|D)L1Z z^4ZtrGOJ}X$E9<&B=e6YioYOB&XJ|RkY#@_rGtsue*^qIcwhbg<;C@4j0!b2^S}N+ z@c*gff<;`gb_-T*wetake84y#Fv|z5@&UViz$qVaDF8eQ0N(;2umHGT07Mo5(FH(! z!A1Esq2Qtv8&z~smklogf=hvGWq^Mf;9CxOR{&lWfO{3-QU%!7111fCZWEy13MjP$ z@{a(S4nPv!1xR!Q5`PlOX8>~GPa^sIB7dB?Odi3^aS=c+f$>{%0g#>jtvC&+P63)z zfX*~vFaa2k0p_EC^$6fF{@Y~&@SXv#&H{lmK<1EQCK_*Ec&5lEZ@lE;D6 zK_Igqz&ru&cLTMczfe=_@Ad|u6D;3${vLb+j12-4Bf!iAFh6^7dwz8VSb7djz6Sbt zfR25j?eHSEYdgL$6auY;`aS}~pMdc*uon_o{0gjsx6#ioJQWV!0mmR?=pFDGWVIgx z=kI~@Q{emya1JJKKLF6U=h9y5B2PoR6G+rFW%XUaAk}L%(*~@5^$8bi&uxOnT1Xzh zcLC*%=rsw$op1_fr36xqdh>5$JGwc{SL*d|1Xw=1Dt_hCOM#?l!^^OD`C8FztngjK zkd+UtGbQq3nxDrh%GKj}f`d{E<{T8OoJ0*3`PvVyQgA)5ZU|H~pdJVcq7!yyX`D@a zu2Oh#7hP{meQf)KhlJ+C>t{ELmpE_^teiJS{8#sI1gzOiDs-W<@ykZ`6%}`-Egfwn z-wZsdRGT~@dj7$+zhSV^UEa3NC;AaG)=wBFd5wPZ%mH3&bw{q&yN8#J-%K(}RU*2)gzghm;j|3&Tu#wPDx3}-TyM1i_-q?5hgN@SB z`O3^uumhUm-t|f4b%LcSy&-v zEA@dB@(Io_GOUhZb(;At9s_%oSV5V)X;{QQGil;<4Li~%Dian_TWC3=lM*)~3HMy9 zdgx(VFCI6xb4w$#7B$Y|!!P@bO1}yPTlCsiaBQ(Su#__JsUPhEvW+B}92E9y`E_1= ze0rrWy0{LXo1mHGGgqW<<73@!q}*=={qxj@AtX89XkT!9!J;OQw@j4~6ZtwZQpZN_ zyK%OZVZfw6nW2g9Ia(4B|FyQAfqau5q^}^ZkZW3Ghr2kduu!bZEz^5oX5ePGs#iR_ zlJlnG#Yb~9qRkhzCSPCP(ml#3r4+HzMN%ZQe0}MFW)2(0*NKG1lirGZxMx%J97O-b zU0qb#sQh(T+IOQjPyTBFd{4o>J7O;8O^A!WJci`T&w;TA9}Uq`70r&723elp#o7LK1&RLRNR%pG6l3Bhk(!8Vf#CJW z^cx#1)Fr|1tJNOAU@GsePBv|*U^6|(FIXy-35*(``vBRzB9ipzDghY_+fbn=Lk!t1 z>p?1gLI-`nno>g>H2F;+#kF`_zpZdED(2el3J?Y_M&vQZ>BeY(e;W|v`!-G<#G1@N z>Yp@No)HkpY>z+YRj!aVG~#+D$1V>zr->4M4D=IYs5=uQlw?Xu?<;d9G|C?kza<)} zr_R8TCeFoB!bP)Lm;|ivlHDYTBc2Y_US;Ej6(gGT1+bjZ`lr>Z^e{JgM(SNu)K*T| zI3y5XB@s&QLWaGrZkSWSE|dxHP3Vgc61OhOk+{)=YPln16Ycg@LAF*e2q)93%WP;7=^|Hdz`{{Y4pr*}b@!Cz!D@WW-Pq|_PPTvVG?c71F?2SjNmpdFk z&O+G8)>_G-aSAp7?=g-#jaugAW;mG*UTl!8o@v%$m{^a!w#bc4BDpxV+4d^$VrNux z$KA4;kV^NkY^tJgPVwUCHRaFG$wLX_nC0zw3^K5vpz2Peux+?CmA_}=1jdPX1rx~Q zaZlysyBbsM=Jtg62xOzm+4U+6r3~ncj7vOnNxgT`&}$O{FJaskd-+<*a2!^t@6+t~ zrj(DYT_yVh)!1BL-huF5@76IOGCp>GD>pjI{d9kuF|E`@`MA(($;NA=SfJY>oiptRH;-1h=0nlE6D$emIrXV_qy& zipOMQ#+{eh6@R2sA8waL)FHedu#?C+xJI22_S7dzEAv$g>Ge45EEWC+yX83hU5+r; zRnpZJ!^(uijd!)?{;&lf=}B+7u%rz*K~7sPHGc3gPj2qa)>xgGNqUxw?W@XN$0B%G zA=;I7J3|xTb&=n_mv3lC@HB%YfiG5yrkh#oHWkvuayf6VQ`^(G%Q_4E~e0?IuWK5`Wf6gL~}mk-C$)>_qgL-(U10@Z57wb2omM z!^Ltp!5DA$w4-X;udY<}#hbSY&6LdPsVV5dsvY;NZ#J|aUeKP^zbq5{=$?3UbCdR$BlCI~yPhi&9>*TfsWAtBT z=5iGb@^r793muP*zA52!Q!C8MA*|PVo~K~NlSslY#H}~<)x{p?DR%~ztR_EyqHc60 z8k-g2&&vf26i!b@OATH!SR>Ut!#7HMZ7;#~s@6$-aN&E-cT>t6VkYX2NoH zt;{4q^ZLEJS55u6e+92B>9c*{JE?SiAt`(7=ThBc)8$ol=cjB6=(==I^I!D787Q|r z24%j7f#d9z9Zb?k;$Lt>uX@0U;v0Odwa~n~jXd0M)R%vuSlUEmkBhFm9ZGcf7`Zc4 z6n|-MQK{3`eHEDX@XiahI9gu$@aK|ho$hr6$p*{h@Q)9)H0zhv-@5!(NpE`T!n*UV z{*_pAk+asVjmSZ>eryHe8)Kva)TY0#Fe+K`wPHt(Bc?xUWkx3N2v;>--8vxfl(A_< zb0?)$fGGuFcXcRqXXmI=0s7Ita##9UNUpzLPO}u5aq0lmdn8&t;`dEF`jWi&g4YT> zQ}2FUJlr}=xSC`se2;^4l8t|L(~B}&lMm+xzX@``nY?71)AVcb8&9{Om|N+KO01da zqqnzD@HLdTZuSK;*LuYGlm@;&krhTVp-oP0Yj&s>-%`m~`R2jlr}(mV6xT=F)!i4u z3_FynPe?vGyYqL+q-~SDIWb18sEWpsKOXQiZRLt-BfFWWXGI{h)u)9ijb87(I&IFM znk^NgPA_Fb&YVN`GeDg6+ifNS*9R)`qfYT!-y~NT$x9MZ@@jC&9K!pfQAd3Oj_4#u zjkW+?N=INL+eR*&L_3^Fmro8pCZFUkFxjmB7(?BJ60+r_8B7cs)}qI+xLHPrvN#JN z7!t7G5aFMCzO$^p{pqHk>s3-j@&d{2{GQ;d#OR?cr&L+-PqK;O$0S3 zqCzV5W@|DhMJjc$he$XFB0oiKAjO9lOw{0yWf&iIAlO<`pMK$1{Y2_7=GQlmY#C#> zHzq5Np~D-cuxHcUDi?h8Q9LowytylRm51#MjmY@`^9%s#2fBm_eq8czLPgl=D~ z_%w-hUi%KeinynkqyRrM!6a36K0Db1jXkJ886_y*$NOrHf5hG1_8o^lp|!?*j&U*z z9X!|ECfD*tu604KZFjEy^IZLI1ofL-n;R@HHhCU5^1KT2e7f`eZczOkB=mMo_UC7P zE`|xafeA0bM08^!>nLXWC^LFiF{b?VF*f-LH}aDT@|7rHom;~=z9b!-P)R)WQ|w&O zT$vD(h=T*e#ihW*gX81F2?(f&h^UE)Y5p4|B((nx5Fr4AF~H%B)HEz~^lVJb9IR~I z?3_I8Ts#~+yc~SIoT9v3(tKPfJ|1I!K375hU?G7RVWCVB;Zjl2Mg-!inAo707{-(w z%64hhoE1+&jvT(QTbJyXlxmTZsg>yjotihH81Ju85)!ao8-$Smfp%a5u|OIrXv$A{ zVahMZ2b%Zx&Xq>@MUw(h8SRt%s&Qn$sfFlTT+|XN-R5!ATtY%ZN>WlrT3TLKR#9FarKqT;tgHco zFH}@?R8@7=)O6L=_0-k%H8l;jwL#_qNINhE2`L~D!-Cer7Q~|1+h1{Xbar-jb93|X z^z`=i^~LlfptG13HC%>lwgYZ5uumRrj{i%*z(hMk70EBq25-Q|_6xkh?(Qz8pBu_X ze~CG{pj3m;AK1xP@By8yF5ac z=e^$EyT4K=58*ly`EFr*sz@eqMWLXr#wbe!O~lM_$_>`lKT53!e^ z7&d(98O7t=p>vn)Tq8kOa^5nW(zGo01p zOj%4{jP%+d4KJT8!g4P!*2&N69*aKS720>638#`Bsj?x>at(D3UwZ^vbDUYYU=ZXxmY z7Zu&PGhe7ZPr1t>!K*QaT;lo{`~v^CZVpL|%kPiR>Ws_m3QlaZL$^9d)L)AziM)kL zj!wH99h(q^Mkn9C?eBHl**VhDJJdeWS-V0c{^0kNvSIJ;CLMPJP&+d27ZA3 zq8k9P4FE#>mv_exFQLgFF1X3Rz5&0$Yvq3oiT~-b2ixqy_}STy4|RiLN;9w+F>@JM zEEwaD*wh3U{0jiGMTpr{#pXi)yE6OIQdb;S}N;OyXAJa&%QoY_# z*ZvPB`5=q`pCRQiQCUn*ss=Ftsjz6Mdu0kB3S*b;{>HEZIi9YaOU6Tkr1@w z+A*;$NR~SdFnv0{6^?~sOuWvy5Q<*^_Hk5*FaiN%Z-`h3rAdNF#B{X zpE z%wmMg6PO@y-7oO*Pk+YY?38E4H`;u1N`}+P{980)hjFeDcq27BP@;s8W_2_gNfj4^ z71fU$1$XO>VpXtVL&ROfhw|Fn2RmzLP>TtfXcBE&P&w%Jaqlpzx#bvJsaoMg<*V`$ zXyXwUKM;im^qsGZ#oKV0;$6-yf}-RdnBJ2pt1hN6f0TU#%NkP20QJSjRgj-}<8 zD99<>VhIOa!sR~khW8wG5ZREIrj1A$jF#}-Nu|R{l%z2ct+}xZl#(cC7_VFk@s@}# zNw*#cD7*JLx)z6xeU6SJ$rcLD8(56NYwwtkZu~mGc34yF&p$_mb%vhcBEPBwDfRFk zSRBsy?OxLdRqjJ-_!8mtxwq41YSu%hw%Cx=exjnMCTV zK#%Ug;)emt!05g^SQZ~oNdj_tOM5!G-#)le2>fcYVDx(dRScMC zc!#ATS3|qL$K!v{lRJ66$-UO85F)xG9Jq_E({S>viW8z%b3b_#LgugDuY%p<9If)u zHD?oBf%WCwP@VH|O8rw|dt*y_W{FKTMhia_iqYDw^cpqP+Gp2g1n$=50q>JkW3=Up zibb8};W90aQJ|IQO7DJ*!G}bF>GS3dfiV@z0ppfY>m&nKnHTVg>SZ{(Oj?f_9S5+4Br`$2Kv5Avzb8%wDddPtO72@gOk}P8qNkA_{ zHEJDJ6b99nNSGe5c5YyRk_O z{WKZxLBzsSYw~uAS}%S7!S$+By=ypabX^d(MhZVcM66j!f_{};DE*`Qc-?5U zn|LMe=@v8vft5@2SyAdC;d2+8x;I_8X75`qv2xVR%pTRS`!nyO76jO%$8y-(xCm%M z)`mSMPAj<`>aB0a8t&(~w~9rYBd6sw+f!Ta1u+b=r?st57JP1u`US9>sU;W}zp{9E z(i?-lXHH2r=OiQ&_vi;?m)Gi2&F zaK5Qfs+SraZnSsfhF=XKmTvgSeWrq!Joic0TwQ9Fgdq7|?VVL|qZlx0DXgZ8e2s&7 zm5+kR1`N=>x7&{Cdb1-E(obakEB!!0U~2VIHM(bYI< zfk|fYM{O46^@cXyP0fdsst1(CYZ1YsAR>WlY}`R%70=?f`y>wQ)ScRG$56v;h(b19 zy!~WsOPptU+yj_9r#d%#rDC}9=3YBUsdCt5@VR;3b~t#^1jH&HA@46)F=!DSE6Bs{ z3PN^@cMJ{wCI6Flyp&4iVtIRuz2;S)JiuzMH9{v9KW8Rtne$^qr16h7V%Q=-c zft+HMk!Tq%8NquLwg8Ogh=xTd<4mRbfVPh+lLUojI$SuH!1-l0pP=BG|& zlSQZ>n`KbPrliPD|24Vo8NVSJdr7%_OXmFbCmGm?ohOCz8oXxK(dbghIKh6c4{oUV zW3$h0ZsPo6V%T)rWrZJ2KmTxHUcBaxr+<81RL^bVsY^Mr_145hovReOJBzq7i8t?5 zRRpM3rM$fztCrNt({nvKr}w*_;w?|nRj*px$aaSE?&<)5V`#%(5CIP z8HrJGhvBkDIWtoE4NF3_hJ&sS3mY`61iM(AE$OlhU@2{iKX8+2vC@}y)6?IfyE3P) zXKYVip(P=K#|Od5p^d#-6&S#-VSIw6waZM%8yjBfLR1aw!9xcaQu1=liNt)w#-n1( zD>omtM8$-_tYFxZ=8mE6{9I$YXmK0EaxE5fJhNtv6E^{G z^Y34H4svvY7a|NlsYaf~WmZD0y-;6cv6KV!SOb)S1M}En6{#&Ots^d&owfdUyN=&A2p-=?%L80^+24+hZ#RQOjSC8x**P7u?187N5L=PQE() zmUyBkZ;fXV91nrOY1qMjN|2h+=EK0_;YnbznGI=kzrCLWK_(@t;2WXUvC3KnxABA? zo1)rU172$F$yCKxU$&lXzY(tH1XG3@jY7y<%PQ}kF$_a z1iRpgSjnmZcObiXsj&E*AdDMgf-RQtNlXX9BoGCW??X=FF>i!2dVZoqC9zA+XMD1D zBMpp8qh+E=Qamv%saQ0$%cKvULA-HKe;PMnc;pStCcGWc1`~by1TU? zOsbQOroF-76&s` z=OUZZCKlKb3nzIWXK9x4oQN*|Q1J6bwPPFg=*|rVSDDL z&V~F5g`6z~l{$rdC)Yww3)^jqI=ngZuNPqo)WhRq+n!S$R22=#7AIsD4Lzqe+n1qZ z2VqTrq!dZeW^W&>9i%J@KoSWEK>dUgR8B}qLC7Kl2w8+tFj29y(kpPXIr8${78EEH z5otppMlsP#SpFEcARGZ#TKWNgc#*3SS*+MZy)6MuOF98R4jZJd+mTy zR01)zQk=E%*4<<(VaFvp3U;knRxyrLzE+OGIA)`~pVpZb8p(tXQjyjRZc}NnYYT44 za8H9=TKpcVrC^%^yfX}TtdmSv95R7nKG*q^h$Z)Q>W zv0c1gWd<94@~c0OO@_~xxcV_sm8fH^?IL06XU>U+7G)ekwG(V6*93g3-_0C;r(5yH zIO-Ns%j?_amJKF~0>@GLo;d%ey`Zt)G1eqR7UKSYUOQl+*7VoXv(q;KX|+Zs#>OC{ z)XdDxylpF(7Ao7`-rmvC+11tE)AJZ4(LQ?w$%?HlOt9~>AM8XO!R92yxK9vvPY z8y*=S0b_ImjM32vOxyq#n+S-fotd1PnVOmfEefY+=4NK+XXh3`Qsu(J(j}vIWpx## zRf4R_7aJQJ7vmv-QJTc!#RT+W!_mKg#r^@(Qi3v#@g^z(^l8(VF}|ptQ!BOSw{VUm zB4i?%p3jwPXYm=ZC=|fC$6|!+A|iF>%JeZ*uCI!CNBXV^X%sl{-#gTerieK9S}55q(R{e>wBPxF@aa`XyD*=1g5_yT zyCSFV4X>M&O!zMw0%A7PvmI_3N_oxs8QsqozY`MLSy3a%c#o+gY@xS-%2o6UGoJLW zZ&d)NfmJarmDmcwf0=2F*vwE-h{T1KGmd#xfkUp;DJj(|B~u|QpR1slq>PGCRrA)= zu+vpF)>hHcQdZLhr8g}teSLisLqk(zV>1&Ib2Bpw3kwiLYi(m=+gXN$DnY41UrJC~ zn*v$FAWC#@{?bNrDcj^NwZrAm{AKHHfbz$~s_sES+7YL_K+KM>m;YWh8Q6%vr6F z!gFHiyK#+fiKL{D-@ELZ!6K39^&Fj+TGMiYYyrt|Wc^|tH@{1~O(+PS0K3!wx8b%+ zN1LQSOykhFy3Qwl@QSH2bi5!qXK9Q8@l#*Xyq zT!x{B#zlZK>?OV02t-$d^x6NSXN`?5Oilm0gF1i!T2Pn;iPf&IuAn^Y?(W_eP|pTs z90eEp|2AnBmzF^CG`Of&F=ftBYO`0bHbEle>(^UgY+lYCaQgfkpm+;Tr9T0xxR(>^ zLdX3(q29iId%>#(0oETroPbm4%NJ0@#rR|4(qUjBSXAgPaLTy;nKFb#O!>|11JPK_ zy5_YRTSIX)oQ{!R#@iz?G=jHrz9YDzT;Xb#?F4Lu6A1z!im7jaTR)$|dnNJ)f@dsR z?s`z=n2WPvtd#u3*%$|3e^punglvE7V49v7#Yzz_{ z%$l4WZXgIzK&VPs1VkVXV8jTpH8FDwI8vAZE?jO58U@7zrwL9%8)AtYq-TgRdEUyWm7`~4ehM$ta?Iu)mOSR<1vUYC6@1T! zf0w4vpQTAjMg`Uw)Dx+MebnDIYmKC_$wyETwsMT$hjLcCEpF@ zxJ~v<5sE*wy@w{)sJ}xbeRUuxCyVT5H%n| zUf9M^=8Ivt0BnMY&A%i{5Jrh7kB3J@L_|hL28Y9`sHkXZY3bE}Q zh=}G?;pDO5;g8@KOcxX`5f*tMBKk-a(T~8G>|hnJ|HFdrmyqg}lJ1a}Ym`&0R8+yJ zXeMatU)MKvH|+$Cg*l-PT|K>Bz0bOy40b&m>Fyuz9+>PNoar8#>mFX{9$D-jS?(TP z=^k6{8DD!mvEDoR;>py@r_(Q=&203|ZVb%58k~DIJpXER;nn!!tI6e8Gb^v=R$ncy zy;@m+wf2~sB5-+nWRFqXml9ZVipNBO5{lCOE=A8Ov}O=){O-$5*<5< zZjFWd4YYcYmmAmx2*0R8Ut1oLe3$3H(SCh;Pk21Udm-wdol_nnbQ{|diVu$B#ejjM zbumtOc!Y$6#KgoPCl>~Tfv8++YHDz>Kv46akz!$CVP$1yyL>=&Gsoq_dHHbtdAPZ_ zdAWH6czDEkc$9d^`HcAlyafbf1Vt)D5Kq9dB!>#;vEzz$UK7A(fTGJQ%d6@t>l&*Y zJ8D{c>pBMOyT=|pnQ7=-dN{DwIP|h{ziM^(YxBpMW`EAqWyQWF- z=l?yLC*Ok6GWoW3>TTQ9-lOTg&Y8XL*}dNRy}rfW;pN@&)!mu(y`_!4=bLX|y?OU$ z_ubyReN5mRC<-A8!4SS=4|tv)3nvqJsp7n)LQHnuDJh@59PbVtvtvjXyNgyjiyF&I zR1p3+>EEoN6SWAv1XN~J>`Cl`O@g8WqGIFO zEvY(x-)uD$e^f6CAM{t6*A$uzBDj5TPt6E7TWi07(>|76${9IfO-x2>=^V zF1jBtix0JO;DOrG+S=B^;R^Tx z_3`n=1Uf;Z(f9A)FDomrsHm)}s;;T2t*x!Et9$U^!NZ1z#)l7^8XKEIm+_{i*5>9m zFj`vLFXK^bD;OPMw6*<-&bGGB_V%tn@#s<4qetBx9o?WSIT&4CkGs2jdwQPq_C5s< z@6Vp~f!^fcu^qG|A0-(DeaAtwanMbCast!Oha;375E_67K%Vdgt6-cuaA?sNNXg7H zT1jmA6egX&z^{V2JH#16uKxhPm>r&yB)8SfUbq6?sttZSciClF-%@K*Z43gxh?e%v z>aE*+HVWqtEE>Uc*Y1HN>r{)^V!h(QGH!3%g+cOz)`!F)0hhq9atGS2r88#zu9N=q zGXm{;o8GnN?a`3Xg$FT{!-cjPNMFOlpw?FLD3xn01`H2qXGPZN^wPT94_CF9%?ayL zQ;B`coey6z=cGx}dWI9TUR`7=keN-&-nhXCy^o0&!9ik_wy^mutk;zhJ&k(I9o zXLBqTEKV9I3?BLiqvG;e?_M|FzS}Ar%GRybEK$K6=CU^?3ibpEr5B<|i6Z(Hrw4tF32m0ZWu@NvZwj)>! z&?!vl2nY@=)qqknf@Sk};IaMBnf>_q&uRV3moFFf@_(wqe?A8QT@KK)j z828eP>&!kc3Far#QkcNHxz1_n=v^8;u*zq;rIRDgL%5Dge`Z z@Y}R7)ntJ*?=#JwO1+9KzlaJZ^E!}0@q~g*Z>7nWxREod%Fm|RD->?;S+$~Ni}v2u zJR6fL7!9!7J>d4LIwlncowzpizOm6n>mDh=I7GAw75!QeyrWRY^^L;hd-S&32 zRP7FnK~MYsVy)Q&$7#7OuuHJzX#(?2{-f1LxeFure(=6$?7jK+Cuwn4K*2~X>s{~O zZ$Uc*p32vr_lAGoXKK%B_X8yf5uySy-Ivt&LJW)sN`}7JvOwQ9M8B9w2STVqlrKe?J4}$%U4YGu zpGAX@NrsnEl!t+zhn|a@o}HVHg`19vn~ss2j^Q%sx#{S+Y3aDAsM)Eg*ukIR-@)I2 zLC*jN4``Uo#LUmmF3iI#E+{CCKqyE_smRJ|C@5$vE9@XYV+<8w7IFgP^y`i&bAw{PFZ zlsQ2|*}+-b)YJ@4OK?Iy>Hz292WY7W+o=Vn4O%Oo1UJZnO&H>kOr2Qmcb0-`T8Zg0L&l2<0^Q;V|RD&A{#h3 zI0O>{@XUJr0ld0!dJ10g_yQhRzn@>^lNjeFZ1&5uOC6+2{lVpA#j9$kPil4^U?67J z%~3_T^rL@st(014I+Lc-GY1`MBRDlP@i`L|k^|iOn9 zUHtCW-L|D1>`xNIB?EUHmNL#3P#mXtm2D}x)4p(nf>YzceESljCf?VI-^ur7Srv`% zc(F0t3k7F7VLj47yG5vP2vv)Sb|Vl&Vwipa8l4>whKF&I!C^!rhmaDFB_-RWr5?yg zSIEf}$;;*_%BCsFC7|TdDhlDMia}~h{u;`jno16uN*0<*Mq0|cTFP45C=DGI4P7-2 zeGLsT^)mrON5>QlaLg~mTu<*J!0|UQ0K?MI&=Q;o#>UpBrq*U=wiXt4*47TT#I_fA zbzEHBJUu--#n_=&q5R-BvVW0Ifb@9qQVF<=fVXh|=l%`2nSB5L{rntE{W0^+xO^95 zgt_aAi;s2!$AbjacVNx~@sKPrKR#^sAwD=SL!{R{8-$)tl7(q4b5kpWUc-{h+H_MV zN5HBz@?DmbcBX{RLL~pm-cT_X^NP^BV0Ms_b%Q9;A=e*~@ehK7 zT@A|uPp(+IrCcKx=eBz91#vT#fjfd}{Nw9qiMY~P_B!)BI`M3T^=>+5TRPbY@|lM5 z>`lF50@rG)=WTnFtSB*#_Rh9<6BXKJ0L&KVXja2g#dEJ7wqemgTcs(iz3kK_;G~lh zs)MLjC_r1hDK{vRWVg#W#hP1?xpQn*#Dm;3$P=@-c}6o#L!w|^fq0s9cz(8jdLkrz~AMI`AyT$;8CN%)-aY%Fo6w$j%|e!70qiCCbGm%FT_q zJdTTj8yoLMAbI(ae0)d&MF~M$q;NP=G!Kbr7Z)287X!~Qn^;nqxlM4BQFsp}xsXhR zvQcSxD&yi88Q36F;;969zfQVUTDDeJF;7tit)}j;rDd6|$;QU! zpaya&lG)hW+JWEXPby8|Sq%L4wm0>~|xBL!(2W9QuzUdLf67 zj82Y%F@}kf!ePaffSaJz_yoB5UBu=72Wq6Vphh}1J@>Chdbtt)(MZ9)aBb~EBYg>G z?_kpQccmR(?17hw`=9GuVAhT)YsF^41PJ56Fo=T;hK|+2Px$+-MR`-PG{S zk-=m-B)q|kqI~2ok!%LLiF+E75#0S@V!`l` z8?iMi_i+|+r*+!B788gjg&n>x@tMbO*Aob*%++d#;yg&Ae*C%448ydH8|9w)ex(eJ z^tCj9aWs$?81_0S?Z*em2BT#VG|Vn<_n82cZRN>F;cL!ao)6*er|C4b3v1igoF;P zJ&=;plakR3kdZNvku#8!Gm^uYU|>)%Q&2F|2(UAoaC3(7^A`#Ww}^^9Lx_!D?yvS2 zGln0uQ32-;Vgri+Dg97J?w-8j9c9!_HMOgnT28vURt9>eMg|5KTB?!J|Bsv+0+j=0 z7jV2TRnv>l7pQK5pRY^71^j%y2lq!%YWe*6&nfF-WBg}t1Z7do#}Uxf1$6>u<8%1X zKXr&22qzcuWg?Epsekz~V*@{CsVGFbdK{IYc&|00LNlG2ToVLOmygB}>*R%mXR-BU z3W`Zl;kP+Y#%%hq^y-|jcJeE_!q2oD-{e%FVwFf#uR?^A+TsM5Cqhu-DK9y+Ny~%0 z7NgDLRQ%UMQ!M@$X>S44=GF!5;uZ+*QrsoDOCh)gD^Rq!wiLG#G-z=M?(Wc1poId( ztw?bxl;RXhfeMy$-}apIec$|d=FUHJ*X&6$kYvKk&f2f6=UI`aQD&dVve@78z!#ad zd_!g|u!N@xnv6A(9y96B_FwtYFSBgEiWBlzwWMKxl!{A?i;wr;rOXWN7)=$81ua%; z7$Q0$EHe53V<6ksG1M}cpAjMd(!(M~mYkrI!6ENNggQh78$<-kMfmeX_|imp<3)HP zM0kQkxV=TV-9)+UMY$}+xQxZPb;P;VBzTl0d1RynL?wj;C4_m!MYzQwTwI#ZlO3FIQP(4*Om^!dL0!t#W5*nBp89y{Nv$ABc zdSqws1nd*JxB!K!p6(uxJv^RxdOmsl*z3uY3}IhqcxGm1b~Z96H!m;0prD|rsHmj4 zxU8hKqO7d4yu7-+qNbvN!?6Q?P5XA$DEqI+Qwm-Q5-P{saau+;Q}mv!_{$ZO7^Y*=Wlnm7vAoJ0FeK?Ow09A5GRZ3_c251Eq&5 zru<9LWQ<1a3qLZBA)j}VuD)YWX(tdTI&+z%CwqFaI}WH&TAlqFguDe4k<3MnlAE$5 z>Wx#2sS!fHhjv~wdHH_1m1)z>h%urq%G63Nk$0f5KkBa<_z788Qe&S>ub4N;Nn1@M zV?R25;^qmhP@BlgiI%p{$-=wXUCMl(>73a&3R#B*M<(S?mG?av{dw6e4Jv1S??CIu zxo#B-Mm7vi#~YC6BahLE5EG}<@X;^h{_2wl&dXeXy|y}7yl|w|`8Le9(L}Que`cxg ztMg;&5&=^|!5?3I)XN!jeQx9?{Px0j{w0b!0yg^FSk23(8Y#ut4oRf}=ua|(to>9nkw z?`#a4ftDs)mehlwT}s*DE5|GsM0~l1Ro)>*&cg~?w*1HGoMm~U{cJPO+~&;p^%^pT zhnSgVD0ZK#q7DsdoBGN}DB{MsKPP&;s;yD6?_(w5H>XKpNpiGKFyu9z%v^+K8S);4Lvp^&0iox`58IGwEX(^qVDZN-JgV?Cxk?d4)oKz{ilzAc~^@@1I zS~znL@HVY*cO7vLU9rE|;G7uXo!-YemB2jZ!8oNsJ0(Rs1!0`xV4b34o}!_jqM`je z&`&WjPf3VR8Q8z_OMiu^pD}Bn(deI18JuyNf913JD&Tx7==X&ee!v&GBaGM*PgoaA zoQF#!P4Xs;vBVBD!24)@yC_{>kXko@O{*!4O4#+%6f~j?)I1;GhXp7?!{o&yl(-S9 zOi7wF>00Eu`cy?m#FgfR_0~j94rFca6rDa)Z$qj3Bj^WX7>8py#-9tlPnVs^g3jmZ z&E`IsE3kQ=?=n^3-Jgwkla~E5p{6CKqaGeIR_nc3>9kX9dR%0DQetvaWqDF-eNtz8 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 delta 242707 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%0Ah5)p*LQWS71$c&j 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

MFEsP7Aew`yvR&v0m;6t+<=re6t0bV3?Vm?&k1R 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
QzuECfrJ-O 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%0D1=%% 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

9$E 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

    qdp+x*-*vtQS>lBC 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

    Error!

    - Error: ` + req.URL.Query().Get("error") + - `
    - Description: ` + req.URL.Query().Get("error_description") + `

    Go back`)) - return - } - rw.Write([]byte(`Amazing! You just got an authorize code!: ` + req.URL.Query().Get("code") + `

    `)) - - token, err := clientConf.Exchange(goauth.NoContext, req.URL.Query().Get("code")) - if err != nil { - rw.Write([]byte(`I tried to exchange the authorize code for an access token but it did not work :(
    got error: ` + err.Error())) - } else { - rw.Write([]byte(`Cool! You are now a proud token owner.
    Access token: ` + token.AccessToken + `
    Refresh token: ` + token.RefreshToken)) - } - }) + http.HandleFunc("/", homeHandler) + http.HandleFunc("/callback", callbackHandler) http.HandleFunc("/auth", authEndpoint) http.HandleFunc("/token", tokenEndpoint) http.ListenAndServe(":3846", nil) @@ -91,33 +72,116 @@ func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { oauth2.WriteAccessResponse(rw, accessRequest, response) } +func homeHandler(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(fmt.Sprintf(` +

    You can obtain an access token using various methods

    + +`, + clientConf.AuthCodeURL("some-random-state-foobar"), + "http://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", + "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=http://localhost:3846/callback", + ))) +} + +func callbackHandler(rw http.ResponseWriter, req *http.Request) { + rw.Header().Set("Content-Type", "text/html; charset=utf-8") + if req.URL.Query().Get("error") != "" { + rw.Write([]byte(fmt.Sprintf(` +

    Error!

    +Error: %s
    +Description: %s
    +
    +Go back +`, + req.URL.Query().Get("error"), + req.URL.Query().Get("error_description"), + ))) + return + } + rw.Write([]byte(fmt.Sprintf(` +

    Amazing! You just got an authorize code!: %s

    +

    Click here to return to the front page

    +`, + req.URL.Query().Get("code"), + ))) + + if req.URL.Query().Get("code") == "" { + rw.Write([]byte(fmt.Sprintf(` +

    Could not find the authorize code. If you've used the implicit grant, check the browser location bar for the +access token (the server side does not have access to url fragments)

    +`, + ))) + + return + } + + token, err := clientConf.Exchange(goauth.NoContext, req.URL.Query().Get("code")) + if err != nil { + rw.Write([]byte(fmt.Sprintf(` +

    + I tried to exchange the authorize code for an access token but it did not work but got error: %s +

    +`, + err.Error(), + ))) + } else { + rw.Write([]byte(fmt.Sprintf(` +

    Cool! You are now a proud token owner.
    +

      +
    • + Access token: %s
      +
    • +
    • + Refresh token: %s
      +
    • +
    +`, + token.AccessToken, + token.RefreshToken, + ))) + } +} + func authEndpoint(rw http.ResponseWriter, req *http.Request) { ctx := NewContext() ar, err := oauth2.NewAuthorizeRequest(ctx, req) if err != nil { + log.Printf("Error occurred in authorize request part: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) oauth2.WriteAuthorizeError(rw, ar, err) return } if req.Form.Get("username") != "peter" { rw.Header().Set("Content-Type", "text/html; charset=utf-8") - rw.Write([]byte(`Howdy! This is the log in page. For this example, it is enough to supply the username.
    -
    - - -
    - ps: I heard that user "peter" is a valid username so why not try his name ;) `)) + rw.Write([]byte(` +

    + Howdy! This is the log in page. For this example, it is enough to supply the username. +

    +
    + + +
    +ps: I heard that user "peter" is a valid username so why not try his name ;) +`, + )) return } // Normally, this would be the place where you would check if the user is logged in and gives his consent. // For this test, let's assume that the user exists, is logged in, and gives his consent... - sess := &session{ - User: "peter", - } - + sess := &session{User: "peter"} response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, sess) if err != nil { log.Printf("Error occurred in authorize response part: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) @@ -144,5 +208,13 @@ func fositeFactory() OAuth2Provider { f.AuthorizeEndpointHandlers.Add("code", explicitHandler) f.TokenEndpointHandlers.Add("code", explicitHandler) + // Implicit grant type + implicitHandler := &implicit.AuthorizeImplicitEndpointHandler{ + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.AuthorizeEndpointHandlers.Add("implicit", implicitHandler) + return f } diff --git a/handler.go b/handler.go index dfd35efc..6bf4435b 100644 --- a/handler.go +++ b/handler.go @@ -25,10 +25,10 @@ type TokenEndpointHandler interface { // is passed along, if further information retrieval is required. If the handler feels that he is not responsible for // the authorize request, he must return nil and NOT modify session nor responder neither requester. // - HandleTokenEndpointResponse(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error + HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error - // HandleTokenEndpointRequest + // ValidateTokenEndpointRequest // If the handler feels that he is not responsible for the authorize request, he must return nil and NOT modify // session nor responder neither requester. - HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, session interface{}) error + ValidateTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, session interface{}) error } diff --git a/handler/authorize/explicit/explicit_auth.go b/handler/authorize/explicit/explicit_auth.go index cc3c35cf..077e4a69 100644 --- a/handler/authorize/explicit/explicit_auth.go +++ b/handler/authorize/explicit/explicit_auth.go @@ -7,6 +7,7 @@ import ( . "github.com/ory-am/fosite/handler/authorize" "golang.org/x/net/context" "net/http" + "strings" "time" ) @@ -19,7 +20,7 @@ type AuthorizeExplicitEndpointHandler struct { Enigma enigma.Enigma // Store is used to persist session data across requests. - Store AuthorizeStorage + Store AuthorizeExplicitStorage // AuthCodeLifespan defines the lifetime of an authorize code. AuthCodeLifespan time.Duration @@ -45,6 +46,8 @@ func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ cont } resp.AddQuery("code", code.String()) + resp.AddQuery("state", ar.GetState()) + resp.AddQuery("scope", strings.Join(ar.GetScopes(), " ")) ar.SetResponseTypeHandled("code") return nil } diff --git a/handler/authorize/explicit/explicit_auth_test.go b/handler/authorize/explicit/explicit_auth_test.go index 76f0a678..be7fdbe1 100644 --- a/handler/authorize/explicit/explicit_auth_test.go +++ b/handler/authorize/explicit/explicit_auth_test.go @@ -15,7 +15,7 @@ import ( func TestHandleAuthorizeEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeStorage(ctrl) + store := internal.NewMockAuthorizeExplicitStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAuthorizeRequester(ctrl) aresp := internal.NewMockAuthorizeResponder(ctrl) @@ -66,7 +66,11 @@ func TestHandleAuthorizeEndpointRequest(t *testing.T) { chgen.EXPECT().GenerateChallenge(gomock.Eq([]byte("foosecret"))).Return(&enigma.Challenge{Key: "foo", Signature: "bar"}, nil) store.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) aresp.EXPECT().AddQuery(gomock.Eq("code"), gomock.Eq("foo.bar")) + aresp.EXPECT().AddQuery(gomock.Eq("scope"), gomock.Any()) + aresp.EXPECT().AddQuery(gomock.Eq("state"), gomock.Any()) areq.EXPECT().SetResponseTypeHandled(gomock.Eq("code")) + areq.EXPECT().GetScopes() + areq.EXPECT().GetState() }, }, } { diff --git a/handler/authorize/explicit/explicit_token.go b/handler/authorize/explicit/explicit_token.go index 40d403b4..8079aa87 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/authorize/explicit/explicit_token.go @@ -14,7 +14,7 @@ import ( // implements // * https://tools.ietf.org/html/rfc6749#section-4.1.3 (everything) -func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context.Context, req *http.Request, request AccessRequester, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request AccessRequester, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". if request.GetGrantType() != "authorization_code" { @@ -83,7 +83,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(_ context. return nil } -func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error { +func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". if requester.GetGrantType() != "authorization_code" { @@ -100,10 +100,16 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx conte return errors.New(ErrServerError) } - responder.SetAccessToken(access.String()) - responder.SetTokenType("bearer") - responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) - responder.SetExtra("refresh_token", refresh.String()) + var authSess AuthorizeSession + challenge := &enigma.Challenge{} + challenge.FromString(req.PostForm.Get("code")) + ar, err := c.Store.GetAuthorizeCodeSession(challenge.Signature, &authSess) + if err != nil { + // The signature has already been verified both cryptographically and with lookup. If lookup fails here + // it is due to some internal error. + return errors.New(ErrServerError) + } + if err := c.Store.DeleteAuthorizeCodeSession(req.PostForm.Get("code")); err != nil { return errors.New(ErrServerError) } @@ -113,5 +119,12 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointResponse(ctx conte } else if err := c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &token.TokenSession{}); err != nil { return errors.New(ErrServerError) } + + responder.SetAccessToken(access.String()) + responder.SetTokenType("bearer") + responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) + responder.SetExtra("refresh_token", refresh.String()) + responder.SetExtra("state", ar.GetState()) + responder.SetExtra("scope", requester.GetScopes()) return nil } diff --git a/handler/authorize/explicit/explicit_token_test.go b/handler/authorize/explicit/explicit_token_test.go index 6ae35b11..9b4939d6 100644 --- a/handler/authorize/explicit/explicit_token_test.go +++ b/handler/authorize/explicit/explicit_token_test.go @@ -16,9 +16,9 @@ import ( "time" ) -func TestHandleTokenEndpointResponse(t *testing.T) { +func TestHandleTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeStorage(ctrl) + store := internal.NewMockAuthorizeExplicitStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAccessRequester(ctrl) aresp := internal.NewMockAccessResponder(ctrl) @@ -53,15 +53,11 @@ func TestHandleTokenEndpointResponse(t *testing.T) { areq.EXPECT().GetGrantType().Return("authorization_code") areq.EXPECT().GetClient().Return(&client.SecureClient{}) areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) - aresp.EXPECT().SetAccessToken(gomock.Eq(".")) - aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) - aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) - aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) - - store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(errors.New("")) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(nil, errors.New("")) }, expectErr: fosite.ErrServerError, }, @@ -71,14 +67,11 @@ func TestHandleTokenEndpointResponse(t *testing.T) { areq.EXPECT().GetGrantType().Return("authorization_code") areq.EXPECT().GetClient().Return(&client.SecureClient{}) areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) - aresp.EXPECT().SetAccessToken(gomock.Eq(".")) - aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) - aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) - aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) - + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(&fosite.AuthorizeRequest{}, nil) store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) }, @@ -93,12 +86,8 @@ func TestHandleTokenEndpointResponse(t *testing.T) { chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) - aresp.EXPECT().SetAccessToken(gomock.Eq(".")) - aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) - aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) - aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) - store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(&fosite.AuthorizeRequest{}, nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) }, @@ -108,6 +97,7 @@ func TestHandleTokenEndpointResponse(t *testing.T) { req: &http.Request{PostForm: url.Values{}}, mock: func() { areq.EXPECT().GetGrantType().Return("authorization_code") + areq.EXPECT().GetScopes() areq.EXPECT().GetClient().Return(&client.SecureClient{}) areq.EXPECT().GetClient().Return(&client.SecureClient{}) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) @@ -117,23 +107,26 @@ func TestHandleTokenEndpointResponse(t *testing.T) { aresp.EXPECT().SetTokenType(gomock.Eq("bearer")) aresp.EXPECT().SetExtra(gomock.Eq("refresh_token"), gomock.Any()) aresp.EXPECT().SetExtra(gomock.Eq("expires_in"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("state"), gomock.Any()) + aresp.EXPECT().SetExtra(gomock.Eq("scope"), gomock.Any()) store.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).Return(nil) + store.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).Return(&fosite.AuthorizeRequest{}, nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) }, }, } { c.mock() - err := h.HandleTokenEndpointResponse(nil, c.req, areq, aresp, nil) + err := h.HandleTokenEndpointRequest(nil, c.req, areq, aresp, nil) assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) t.Logf("Passed test case %d", k) } } -func TestHandleTokenEndpointRequest(t *testing.T) { +func TestValidateTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeStorage(ctrl) + store := internal.NewMockAuthorizeExplicitStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAccessRequester(ctrl) authreq := internal.NewMockAuthorizeRequester(ctrl) @@ -315,7 +308,7 @@ func TestHandleTokenEndpointRequest(t *testing.T) { }, } { c.mock() - err := h.HandleTokenEndpointRequest(nil, c.req, areq, nil) + err := h.ValidateTokenEndpointRequest(nil, c.req, areq, nil) assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) t.Logf("Passed test case %d", k) } diff --git a/handler/authorize/implicit/implicit.go b/handler/authorize/implicit/implicit.go index bea29476..76643d7d 100644 --- a/handler/authorize/implicit/implicit.go +++ b/handler/authorize/implicit/implicit.go @@ -1 +1,54 @@ package implicit + +import ( + "github.com/go-errors/errors" + . "github.com/ory-am/fosite" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/handler/authorize" + "golang.org/x/net/context" + "net/http" + "strconv" + "strings" + "time" +) + +// CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type +// as defined in https://tools.ietf.org/html/rfc6749#section-4.1 +type AuthorizeImplicitEndpointHandler struct { + // Enigma is the algorithm responsible for creating a validatable, opaque string. + Enigma enigma.Enigma + + // Store is used to persist session data across requests. + Store authorize.AuthorizeImplicitStorage + + // AccessTokenLifespan defines the lifetime of an access token. + AccessTokenLifespan time.Duration +} + +func (c *AuthorizeImplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { + // This let's us define multiple response types, for example open id connect's id_token + if ar.GetResponseTypes().Has("token") { + // Generate the code + access, err := c.Enigma.GenerateChallenge(ar.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(ErrServerError) + } + + if err := c.Store.CreateImplicitAccessTokenSession(access.Signature, ar, &authorize.AuthorizeSession{ + Extra: session, + RequestRedirectURI: req.Form.Get("redirect_uri"), + }); err != nil { + return errors.New(ErrServerError) + } + + resp.AddFragment("access_token", access.String()) + resp.AddFragment("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) + resp.AddFragment("token_type", "bearer") + resp.AddFragment("state", ar.GetState()) + resp.AddFragment("scope", strings.Join(ar.GetGrantedScopes(), "+")) + ar.SetResponseTypeHandled("token") + return nil + } + + return nil +} diff --git a/handler/authorize/implicit/implicit_test.go b/handler/authorize/implicit/implicit_test.go new file mode 100644 index 00000000..4a11c255 --- /dev/null +++ b/handler/authorize/implicit/implicit_test.go @@ -0,0 +1,81 @@ +package implicit_test + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + . "github.com/ory-am/fosite/handler/authorize/implicit" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "strconv" + "testing" + "time" +) + +func TestAuthorizeImplicitEndpointHandler(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockAuthorizeImplicitStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAuthorizeRequester(ctrl) + aresp := internal.NewMockAuthorizeResponder(ctrl) + defer ctrl.Finish() + + h := AuthorizeImplicitEndpointHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + {mock: func() { areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{}) }}, + { + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"token"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{Form: url.Values{}}, + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"token"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{Signature: "foo"}, nil) + store.EXPECT().CreateImplicitAccessTokenSession("foo", gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{Form: url.Values{}}, + mock: func() { + areq.EXPECT().GetResponseTypes().Return(fosite.Arguments{"token"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{Signature: "foo"}, nil) + store.EXPECT().CreateImplicitAccessTokenSession("foo", gomock.Any(), gomock.Any()).Return(nil) + + aresp.EXPECT().AddFragment("access_token", gomock.Any()) + aresp.EXPECT().AddFragment("expires_in", strconv.Itoa(int(h.AccessTokenLifespan/time.Second))) + aresp.EXPECT().AddFragment("token_type", "bearer") + aresp.EXPECT().AddFragment("state", gomock.Any()) + aresp.EXPECT().AddFragment("scope", gomock.Any()) + areq.EXPECT().SetResponseTypeHandled("token") + areq.EXPECT().GetState() + areq.EXPECT().GetGrantedScopes() + }, + expectErr: nil, + }, + } { + c.mock() + err := h.HandleAuthorizeEndpointRequest(nil, c.req, areq, aresp, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/authorize/storage.go b/handler/authorize/storage.go index 1db27932..be9b91df 100644 --- a/handler/authorize/storage.go +++ b/handler/authorize/storage.go @@ -10,7 +10,7 @@ type AuthorizeSession struct { Extra interface{} } -type AuthorizeStorage interface { +type AuthorizeExplicitStorage interface { CreateAuthorizeCodeSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error GetAuthorizeCodeSession(string, *AuthorizeSession) (fosite.AuthorizeRequester, error) @@ -19,3 +19,7 @@ type AuthorizeStorage interface { token.TokenStorage } + +type AuthorizeImplicitStorage interface { + CreateImplicitAccessTokenSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error +} diff --git a/internal/authorize_explicit_storage.go b/internal/authorize_explicit_storage.go new file mode 100644 index 00000000..68a2c34f --- /dev/null +++ b/internal/authorize_explicit_storage.go @@ -0,0 +1,125 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeExplicitStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + authorize "github.com/ory-am/fosite/handler/authorize" + token "github.com/ory-am/fosite/handler/token" +) + +// Mock of AuthorizeExplicitStorage interface +type MockAuthorizeExplicitStorage struct { + ctrl *gomock.Controller + recorder *_MockAuthorizeExplicitStorageRecorder +} + +// Recorder for MockAuthorizeExplicitStorage (not exported) +type _MockAuthorizeExplicitStorageRecorder struct { + mock *MockAuthorizeExplicitStorage +} + +func NewMockAuthorizeExplicitStorage(ctrl *gomock.Controller) *MockAuthorizeExplicitStorage { + mock := &MockAuthorizeExplicitStorage{ctrl: ctrl} + mock.recorder = &_MockAuthorizeExplicitStorageRecorder{mock} + return mock +} + +func (_m *MockAuthorizeExplicitStorage) EXPECT() *_MockAuthorizeExplicitStorageRecorder { + return _m.recorder +} + +func (_m *MockAuthorizeExplicitStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeExplicitStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeExplicitStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) +} + +func (_m *MockAuthorizeExplicitStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockAuthorizeExplicitStorage) DeleteAuthorizeCodeSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) +} + +func (_m *MockAuthorizeExplicitStorage) DeleteRefreshTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) +} + +func (_m *MockAuthorizeExplicitStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} + +func (_m *MockAuthorizeExplicitStorage) GetAuthorizeCodeSession(_param0 string, _param1 *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { + ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AuthorizeRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAuthorizeCodeSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1) +} + +func (_m *MockAuthorizeExplicitStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockAuthorizeExplicitStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) +} diff --git a/internal/authorize_implicit_storage.go b/internal/authorize_implicit_storage.go new file mode 100644 index 00000000..62038285 --- /dev/null +++ b/internal/authorize_implicit_storage.go @@ -0,0 +1,41 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeImplicitStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + authorize "github.com/ory-am/fosite/handler/authorize" +) + +// Mock of AuthorizeImplicitStorage interface +type MockAuthorizeImplicitStorage struct { + ctrl *gomock.Controller + recorder *_MockAuthorizeImplicitStorageRecorder +} + +// Recorder for MockAuthorizeImplicitStorage (not exported) +type _MockAuthorizeImplicitStorageRecorder struct { + mock *MockAuthorizeImplicitStorage +} + +func NewMockAuthorizeImplicitStorage(ctrl *gomock.Controller) *MockAuthorizeImplicitStorage { + mock := &MockAuthorizeImplicitStorage{ctrl: ctrl} + mock.recorder = &_MockAuthorizeImplicitStorageRecorder{mock} + return mock +} + +func (_m *MockAuthorizeImplicitStorage) EXPECT() *_MockAuthorizeImplicitStorageRecorder { + return _m.recorder +} + +func (_m *MockAuthorizeImplicitStorage) CreateImplicitAccessTokenSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "CreateImplicitAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockAuthorizeImplicitStorageRecorder) CreateImplicitAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateImplicitAccessTokenSession", arg0, arg1, arg2) +} diff --git a/internal/authorize_storage.go b/internal/authorize_storage.go deleted file mode 100644 index a0474fcb..00000000 --- a/internal/authorize_storage.go +++ /dev/null @@ -1,125 +0,0 @@ -// Automatically generated by MockGen. DO NOT EDIT! -// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeStorage) - -package internal - -import ( - gomock "github.com/golang/mock/gomock" - fosite "github.com/ory-am/fosite" - authorize "github.com/ory-am/fosite/handler/authorize" - token "github.com/ory-am/fosite/handler/token" -) - -// Mock of AuthorizeStorage interface -type MockAuthorizeStorage struct { - ctrl *gomock.Controller - recorder *_MockAuthorizeStorageRecorder -} - -// Recorder for MockAuthorizeStorage (not exported) -type _MockAuthorizeStorageRecorder struct { - mock *MockAuthorizeStorage -} - -func NewMockAuthorizeStorage(ctrl *gomock.Controller) *MockAuthorizeStorage { - mock := &MockAuthorizeStorage{ctrl: ctrl} - mock.recorder = &_MockAuthorizeStorageRecorder{mock} - return mock -} - -func (_m *MockAuthorizeStorage) EXPECT() *_MockAuthorizeStorageRecorder { - return _m.recorder -} - -func (_m *MockAuthorizeStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { - ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) -} - -func (_m *MockAuthorizeStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { - ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", _param0, _param1, _param2) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) -} - -func (_m *MockAuthorizeStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { - ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) -} - -func (_m *MockAuthorizeStorage) DeleteAccessTokenSession(_param0 string) error { - ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) -} - -func (_m *MockAuthorizeStorage) DeleteAuthorizeCodeSession(_param0 string) error { - ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", _param0) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) -} - -func (_m *MockAuthorizeStorage) DeleteRefreshTokenSession(_param0 string) error { - ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) -} - -func (_m *MockAuthorizeStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { - ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) - ret0, _ := ret[0].(fosite.AccessRequester) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -func (_mr *_MockAuthorizeStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) -} - -func (_m *MockAuthorizeStorage) GetAuthorizeCodeSession(_param0 string, _param1 *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { - ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", _param0, _param1) - ret0, _ := ret[0].(fosite.AuthorizeRequester) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -func (_mr *_MockAuthorizeStorageRecorder) GetAuthorizeCodeSession(arg0, arg1 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1) -} - -func (_m *MockAuthorizeStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { - ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) - ret0, _ := ret[0].(fosite.AccessRequester) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -func (_mr *_MockAuthorizeStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) -} diff --git a/internal/token_handler.go b/internal/token_handler.go index d1554817..f71cbf4f 100644 --- a/internal/token_handler.go +++ b/internal/token_handler.go @@ -31,22 +31,22 @@ func (_m *MockTokenEndpointHandler) EXPECT() *_MockTokenEndpointHandlerRecorder return _m.recorder } -func (_m *MockTokenEndpointHandler) HandleTokenEndpointRequest(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 interface{}) error { - ret := _m.ctrl.Call(_m, "HandleTokenEndpointRequest", _param0, _param1, _param2, _param3) +func (_m *MockTokenEndpointHandler) ValidateTokenEndpointRequest(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 interface{}) error { + ret := _m.ctrl.Call(_m, "ValidateTokenEndpointRequest", _param0, _param1, _param2, _param3) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointRequest(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointRequest", arg0, arg1, arg2, arg3) +func (_mr *_MockTokenEndpointHandlerRecorder) ValidateTokenEndpointRequest(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "ValidateTokenEndpointRequest", arg0, arg1, arg2, arg3) } -func (_m *MockTokenEndpointHandler) HandleTokenEndpointResponse(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 fosite.AccessResponder, _param4 interface{}) error { - ret := _m.ctrl.Call(_m, "HandleTokenEndpointResponse", _param0, _param1, _param2, _param3, _param4) +func (_m *MockTokenEndpointHandler) HandleTokenEndpointRequest(_param0 context.Context, _param1 *http.Request, _param2 fosite.AccessRequester, _param3 fosite.AccessResponder, _param4 interface{}) error { + ret := _m.ctrl.Call(_m, "HandleTokenEndpointRequest", _param0, _param1, _param2, _param3, _param4) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointResponse(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointResponse", arg0, arg1, arg2, arg3, arg4) +func (_mr *_MockTokenEndpointHandlerRecorder) HandleTokenEndpointRequest(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "HandleTokenEndpointRequest", arg0, arg1, arg2, arg3, arg4) } diff --git a/oauth2_integration_helper_test.go b/oauth2_integration_helper_test.go new file mode 100644 index 00000000..eb7d3cc4 --- /dev/null +++ b/oauth2_integration_helper_test.go @@ -0,0 +1,77 @@ +package fosite_test + +import ( + . "github.com/ory-am/fosite" + "github.com/stretchr/testify/assert" + "net/http" + "testing" +) + +func authEndpoint(t *testing.T, oauth2 OAuth2Provider, session interface{}) func(rw http.ResponseWriter, req *http.Request) { + return func(rw http.ResponseWriter, req *http.Request) { + ctx := NewContext() + + ar, err := oauth2.NewAuthorizeRequest(ctx, req) + if err != nil { + t.Logf("Request %s failed because %s", ar, err) + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + // Normally, this would be the place where you would check if the user is logged in and gives his consent. + // For this test, let's assume that the user exists, is logged in, and gives his consent... + + response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, session) + if err != nil { + t.Logf("Response %s failed because %s", ar, err) + oauth2.WriteAuthorizeError(rw, ar, err) + return + } + + oauth2.WriteAuthorizeResponse(rw, ar, response) + } +} + +func cbEndpoint(t *testing.T) func(rw http.ResponseWriter, req *http.Request) { + return func(rw http.ResponseWriter, req *http.Request) { + q := req.URL.Query() + if q.Get("code") == "" && q.Get("error") == "" { + assert.NotEmpty(t, q.Get("code")) + assert.NotEmpty(t, q.Get("error")) + } + + if q.Get("code") != "" { + rw.Write([]byte("code: ok")) + } + if q.Get("error") != "" { + rw.Write([]byte("error: " + q.Get("error"))) + } + + } +} + +func tokenEndpoint(t *testing.T, oauth2 OAuth2Provider) func(rw http.ResponseWriter, req *http.Request) { + return func(rw http.ResponseWriter, req *http.Request) { + req.ParseForm() + ctx := NewContext() + var mySessionData struct { + Foo string + } + + accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) + if err != nil { + t.Logf("Access request %s failed because %s", accessRequest, err.Error()) + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) + if err != nil { + t.Logf("Access resonse %s failed because %s\n", accessRequest, err.Error()) + oauth2.WriteAccessError(rw, accessRequest, err) + return + } + + oauth2.WriteAccessResponse(rw, accessRequest, response) + } +} diff --git a/oauth2_test.go b/oauth2_integration_test.go similarity index 77% rename from oauth2_test.go rename to oauth2_integration_test.go index 564ed705..b7e0a0b2 100644 --- a/oauth2_test.go +++ b/oauth2_integration_test.go @@ -27,7 +27,7 @@ var ts *httptest.Server var mockStore *MockStorage var mockClient *MockClient -var mockAuthStore *MockAuthorizeStorage +var mockAuthStore *MockAuthorizeExplicitStorage var mockAuthReq *MockAuthorizeRequester var mockHasher *MockHasher @@ -35,7 +35,7 @@ func TestFosite(t *testing.T) { ctrl := gomock.NewController(t) mockStore = NewMockStorage(ctrl) mockClient = NewMockClient(ctrl) - mockAuthStore = NewMockAuthorizeStorage(ctrl) + mockAuthStore = NewMockAuthorizeExplicitStorage(ctrl) mockAuthReq = NewMockAuthorizeRequester(ctrl) mockHasher = NewMockHasher(ctrl) defer ctrl.Finish() @@ -54,7 +54,7 @@ func TestFosite(t *testing.T) { mockStore = NewMockStorage(ctrl) mockAuthReq = NewMockAuthorizeRequester(ctrl) mockClient = NewMockClient(ctrl) - mockAuthStore = NewMockAuthorizeStorage(ctrl) + mockAuthStore = NewMockAuthorizeExplicitStorage(ctrl) mockHasher = NewMockHasher(ctrl) oauth2.Hasher = mockHasher oauth2.Store = mockStore @@ -75,66 +75,9 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres } router := mux.NewRouter() - router.HandleFunc("/auth", func(rw http.ResponseWriter, req *http.Request) { - ctx := NewContext() - - ar, err := oauth2.NewAuthorizeRequest(ctx, req) - if err != nil { - t.Logf("Request %s failed because %s", ar, err) - oauth2.WriteAuthorizeError(rw, ar, err) - return - } - - // Normally, this would be the place where you would check if the user is logged in and gives his consent. - // For this test, let's assume that the user exists, is logged in, and gives his consent... - - response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, session) - if err != nil { - t.Logf("Response %s failed because %s", ar, err) - oauth2.WriteAuthorizeError(rw, ar, err) - return - } - - oauth2.WriteAuthorizeResponse(rw, ar, response) - }) - router.HandleFunc("/cb", func(rw http.ResponseWriter, req *http.Request) { - q := req.URL.Query() - if q.Get("code") == "" && q.Get("error") == "" { - assert.NotEmpty(t, q.Get("code")) - assert.NotEmpty(t, q.Get("error")) - } - - if q.Get("code") != "" { - rw.Write([]byte("code: ok")) - } - if q.Get("error") != "" { - rw.Write([]byte("error: " + q.Get("error"))) - } - }) - router.HandleFunc("/token", func(rw http.ResponseWriter, req *http.Request) { - req.ParseForm() - ctx := NewContext() - var mySessionData struct { - Foo string - } - - accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) - if err != nil { - t.Logf("Access request %s failed because %s", accessRequest, err.Error()) - oauth2.WriteAccessError(rw, accessRequest, err) - return - } - - response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) - if err != nil { - t.Logf("Access resonse %s failed because %s\n", accessRequest, err.Error()) - oauth2.WriteAccessError(rw, accessRequest, err) - return - } - - oauth2.WriteAccessResponse(rw, accessRequest, response) - }) - + router.HandleFunc("/auth", authEndpoint(t, oauth2, session)) + router.HandleFunc("/cb", cbEndpoint(t)) + router.HandleFunc("/token", tokenEndpoint(t, oauth2)) ts = httptest.NewServer(router) defer ts.Close() @@ -189,7 +132,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockClient.EXPECT().GetHashedSecret().AnyTimes().Return(workingClientHashedSecret) mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) - mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(nil, errors.New("foo")) + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(nil, errors.New("foo")) }, expectStatusCode: http.StatusOK, expectPath: "/cb", @@ -217,7 +160,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(nil, errors.New("foo")) + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(nil, errors.New("foo")) }, expectStatusCode: http.StatusOK, expectPath: "/cb", @@ -246,7 +189,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockClient.EXPECT().GetRedirectURIs().AnyTimes().Return([]string{ts.URL + "/cb"}) mockAuthStore.EXPECT().CreateAuthorizeCodeSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) - mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().Return(mockAuthReq, nil) + mockAuthStore.EXPECT().GetAuthorizeCodeSession(gomock.Any(), gomock.Any()).AnyTimes().AnyTimes().Return(mockAuthReq, nil) mockAuthStore.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) mockAuthStore.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(nil) mockAuthStore.EXPECT().DeleteAuthorizeCodeSession(gomock.Any()).AnyTimes().Return(nil) @@ -254,6 +197,7 @@ func oauth2TestAuthorizeCodeWorkFlow(oauth2 OAuth2Provider, t *testing.T, refres mockAuthReq.EXPECT().GetClient().AnyTimes().Return(mockClient) mockAuthReq.EXPECT().GetRequestedAt().AnyTimes().Return(time.Now()) mockAuthReq.EXPECT().GetScopes().Return([]string{DefaultRequiredScopeName}) + mockAuthReq.EXPECT().GetState() }, expectStatusCode: http.StatusOK, expectPath: "/cb", From 75c8179ef537e6ea87b16cdd87016fca6d389490 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Tue, 12 Jan 2016 18:36:40 +0100 Subject: [PATCH 39/47] all: added client grant and did some renaming --- README.md | 16 ++-- fosite-example/internal/store.go | 21 ++--- fosite-example/main.go | 93 +++++++++++++------ fosite_test.go | 2 +- handler/authorize/storage.go | 25 ----- handler/core/client/client.go | 65 +++++++++++++ .../explicit/explicit_auth.go | 2 +- .../explicit/explicit_auth_test.go | 0 .../explicit/explicit_token.go | 15 ++- .../explicit/explicit_token_test.go | 2 +- .../{authorize => core}/implicit/implicit.go | 6 +- .../implicit/implicit_test.go | 2 +- handler/{token => core}/storage.go | 21 ++++- handler/token/client/client.go | 1 - handler/token/helper.go | 1 - handler/token/owner/owner.go | 1 - handler/token/token.go | 26 ------ internal/authorize_explicit_storage.go | 15 ++- internal/authorize_implicit_storage.go | 2 +- internal/token_storage.go | 10 +- oauth2_integration_test.go | 2 +- 21 files changed, 193 insertions(+), 135 deletions(-) delete mode 100644 handler/authorize/storage.go create mode 100644 handler/core/client/client.go rename handler/{authorize => core}/explicit/explicit_auth.go (97%) rename handler/{authorize => core}/explicit/explicit_auth_test.go (100%) rename handler/{authorize => core}/explicit/explicit_token.go (91%) rename handler/{authorize => core}/explicit/explicit_token_test.go (99%) rename handler/{authorize => core}/implicit/implicit.go (91%) rename handler/{authorize => core}/implicit/implicit_test.go (97%) rename handler/{token => core}/storage.go (54%) delete mode 100644 handler/token/client/client.go delete mode 100644 handler/token/helper.go delete mode 100644 handler/token/owner/owner.go delete mode 100644 handler/token/token.go diff --git a/README.md b/README.md index e5c7a717..053c3e60 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ package main import( "github.com/ory-am/fosite" - "github.com/ory-am/handler/authorize/explicit" + "github.com/ory-am/handler/core/explicit" "golang.org/x/net/context" ) @@ -357,13 +357,13 @@ the `AuthorizeEndpointHandler` API. You can find a complete list of handlers inside the [handler directory](). A short list is documented here: -* *github.com/ory-am/fosite/handler/authorize/explicit.AuthorizeExplicitEndpointHandler:* implements the +* *github.com/ory-am/fosite/handler/core/explicit.AuthorizeExplicitEndpointHandler:* implements the [Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1) -* *github.com/ory-am/fosite/handler/authorize/implicit.AuthorizeImplicitEndpointHandler:* implements the +* *github.com/ory-am/fosite/handler/core/implicit.AuthorizeImplicitEndpointHandler:* implements the [Implicit Grant](https://tools.ietf.org/html/rfc6749#section-4.2) -* *github.com/ory-am/fosite/handler/authorize/token/owner.TokenROPasswordCredentialsEndpointHandler:* implements the +* *github.com/ory-am/fosite/handler/core/token/owner.TokenROPasswordCredentialsEndpointHandler:* implements the [Resource Owner Password Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.3) -* *github.com/ory-am/fosite/handler/authorize/token/client.TokenClientCredentialsEndpointHandler:* implements the +* *github.com/ory-am/fosite/handler/core/token/client.TokenClientCredentialsEndpointHandler:* implements the [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4) ### Replaceable storage @@ -392,9 +392,9 @@ rather sooner than later. **Create storage mocks** ``` mockgen -destination internal/storage.go github.com/ory-am/fosite Storage -mockgen -destination internal/authorize_explicit_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeExplicitStorage -mockgen -destination internal/authorize_implicit_storage.go github.com/ory-am/fosite/handler/authorize AuthorizeImplicitStorage -mockgen -destination internal/token_storage.go github.com/ory-am/fosite/handler/token TokenStorage +mockgen -destination internal/authorize_explicit_storage.go github.com/ory-am/fosite/handler/core AuthorizeExplicitStorage +mockgen -destination internal/authorize_implicit_storage.go github.com/ory-am/fosite/handler/core AuthorizeImplicitStorage +mockgen -destination internal/token_storage.go github.com/ory-am/fosite/handler/core TokenStorage ``` **Create handler mocks** diff --git a/fosite-example/internal/store.go b/fosite-example/internal/store.go index 22bf5ca2..d35f01cd 100644 --- a/fosite-example/internal/store.go +++ b/fosite-example/internal/store.go @@ -4,18 +4,17 @@ import ( "github.com/ory-am/common/pkg" "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" - "github.com/ory-am/fosite/handler/authorize" - "github.com/ory-am/fosite/handler/token" + core "github.com/ory-am/fosite/handler/core" ) type AuthorizeCodesRelation struct { request fosite.AuthorizeRequester - session *authorize.AuthorizeSession + session *core.AuthorizeSession } type AccessRelation struct { access fosite.AccessRequester - session *token.TokenSession + session *core.TokenSession } type Store struct { @@ -44,12 +43,12 @@ func (s *Store) GetClient(id string) (client.Client, error) { return cl, nil } -func (s *Store) CreateAuthorizeCodeSession(code string, ar fosite.AuthorizeRequester, sess *authorize.AuthorizeSession) error { +func (s *Store) CreateAuthorizeCodeSession(code string, ar fosite.AuthorizeRequester, sess *core.AuthorizeSession) error { s.AuthorizeCodes[code] = AuthorizeCodesRelation{request: ar, session: sess} return nil } -func (s *Store) GetAuthorizeCodeSession(code string, sess *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { +func (s *Store) GetAuthorizeCodeSession(code string, sess *core.AuthorizeSession) (fosite.AuthorizeRequester, error) { rel, ok := s.AuthorizeCodes[code] if !ok { return nil, pkg.ErrNotFound @@ -63,12 +62,12 @@ func (s *Store) DeleteAuthorizeCodeSession(code string) error { return nil } -func (s *Store) CreateAccessTokenSession(signature string, access fosite.AccessRequester, session *token.TokenSession) error { +func (s *Store) CreateAccessTokenSession(signature string, access fosite.AccessRequester, session *core.TokenSession) error { s.AccessTokens[signature] = AccessRelation{access: access, session: session} return nil } -func (s *Store) GetAccessTokenSession(signature string, session *token.TokenSession) (fosite.AccessRequester, error) { +func (s *Store) GetAccessTokenSession(signature string, session *core.TokenSession) (fosite.AccessRequester, error) { rel, ok := s.AccessTokens[signature] if !ok { return nil, pkg.ErrNotFound @@ -82,12 +81,12 @@ func (s *Store) DeleteAccessTokenSession(signature string) error { return nil } -func (s *Store) CreateRefreshTokenSession(signature string, access fosite.AccessRequester, session *token.TokenSession) error { +func (s *Store) CreateRefreshTokenSession(signature string, access fosite.AccessRequester, session *core.TokenSession) error { s.RefreshTokens[signature] = AccessRelation{access: access, session: session} return nil } -func (s *Store) GetRefreshTokenSession(signature string, session *token.TokenSession) (fosite.AccessRequester, error) { +func (s *Store) GetRefreshTokenSession(signature string, session *core.TokenSession) (fosite.AccessRequester, error) { rel, ok := s.RefreshTokens[signature] if !ok { return nil, pkg.ErrNotFound @@ -101,7 +100,7 @@ func (s *Store) DeleteRefreshTokenSession(signature string) error { return nil } -func (s *Store) CreateImplicitAccessTokenSession(code string, ar fosite.AuthorizeRequester, sess *authorize.AuthorizeSession) error { +func (s *Store) CreateImplicitAccessTokenSession(code string, ar fosite.AuthorizeRequester, sess *core.AuthorizeSession) error { s.Implicit[code] = AuthorizeCodesRelation{request: ar, session: sess} return nil } diff --git a/fosite-example/main.go b/fosite-example/main.go index d8bb235f..88743e8b 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -7,9 +7,11 @@ import ( "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/enigma" "github.com/ory-am/fosite/fosite-example/internal" - "github.com/ory-am/fosite/handler/authorize/explicit" - "github.com/ory-am/fosite/handler/authorize/implicit" + coreclient "github.com/ory-am/fosite/handler/core/client" + "github.com/ory-am/fosite/handler/core/explicit" + "github.com/ory-am/fosite/handler/core/implicit" goauth "golang.org/x/oauth2" + "golang.org/x/oauth2/clientcredentials" "log" "net/http" "time" @@ -39,20 +41,71 @@ var clientConf = goauth.Config{ AuthURL: "http://localhost:3846/auth", }, } +var appClientConf = clientcredentials.Config{ + ClientID: "my-client", + ClientSecret: "foobar", + Scopes: []string{"fosite"}, + TokenURL: "http://localhost:3846/token", +} type session struct { User string } -func main() { +func fositeFactory() OAuth2Provider { + // NewMyStorageImplementation should implement all storage interfaces. + + f := NewFosite(store) + accessTokenLifespan := time.Hour + // Let's enable the explicit authorize code grant! + explicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AuthCodeLifespan: time.Minute * 10, + AccessTokenLifespan: accessTokenLifespan, + } + f.AuthorizeEndpointHandlers.Add("code", explicitHandler) + f.TokenEndpointHandlers.Add("code", explicitHandler) + + // Implicit grant type + implicitHandler := &implicit.AuthorizeImplicitEndpointHandler{ + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.AuthorizeEndpointHandlers.Add("implicit", implicitHandler) + + clientHandler := &coreclient.AuthorizeClientEndpointHandler{ + Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.TokenEndpointHandlers.Add("client", clientHandler) + + return f +} + +func main() { http.HandleFunc("/", homeHandler) http.HandleFunc("/callback", callbackHandler) http.HandleFunc("/auth", authEndpoint) http.HandleFunc("/token", tokenEndpoint) + http.HandleFunc("/client", clientEndpoint) http.ListenAndServe(":3846", nil) } +func clientEndpoint(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(fmt.Sprintf(`

    Client Credentials Grant

    `))) + token, err := appClientConf.Token(goauth.NoContext) + if err != nil { + rw.Write([]byte(fmt.Sprintf(`

    I tried to get a token but received an error: %s

    `, err.Error()))) + return + } + rw.Write([]byte(fmt.Sprintf(`

    Awesome, you just received an access token!

    %s

    more info:

    %s

    `, token.AccessToken, token))) + rw.Write([]byte(`

    Go back

    `)) +} + func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { ctx := NewContext() var mySessionData session @@ -82,6 +135,9 @@ func homeHandler(rw http.ResponseWriter, req *http.Request) {
  1. Implicit grant
  2. +
  3. + Client credentials grant +
  4. Make an invalid request
  5. @@ -144,10 +200,14 @@ access token we won't issue one + + return nil +} diff --git a/handler/authorize/explicit/explicit_auth.go b/handler/core/explicit/explicit_auth.go similarity index 97% rename from handler/authorize/explicit/explicit_auth.go rename to handler/core/explicit/explicit_auth.go index 077e4a69..16378442 100644 --- a/handler/authorize/explicit/explicit_auth.go +++ b/handler/core/explicit/explicit_auth.go @@ -4,7 +4,7 @@ import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" - . "github.com/ory-am/fosite/handler/authorize" + . "github.com/ory-am/fosite/handler/core" "golang.org/x/net/context" "net/http" "strings" diff --git a/handler/authorize/explicit/explicit_auth_test.go b/handler/core/explicit/explicit_auth_test.go similarity index 100% rename from handler/authorize/explicit/explicit_auth_test.go rename to handler/core/explicit/explicit_auth_test.go diff --git a/handler/authorize/explicit/explicit_token.go b/handler/core/explicit/explicit_token.go similarity index 91% rename from handler/authorize/explicit/explicit_token.go rename to handler/core/explicit/explicit_token.go index 8079aa87..2e31ce5e 100644 --- a/handler/authorize/explicit/explicit_token.go +++ b/handler/core/explicit/explicit_token.go @@ -5,10 +5,11 @@ import ( "github.com/ory-am/common/pkg" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" - . "github.com/ory-am/fosite/handler/authorize" - "github.com/ory-am/fosite/handler/token" + "github.com/ory-am/fosite/handler/core" + . "github.com/ory-am/fosite/handler/core" "golang.org/x/net/context" "net/http" + "strconv" "time" ) @@ -73,7 +74,7 @@ func (c *AuthorizeExplicitEndpointHandler) ValidateTokenEndpointRequest(_ contex return errors.New(ErrInvalidRequest) } - // Checking of client_id skipped, because: + // Checking of POST client_id skipped, because: // If the client type is confidential or the client was issued client // credentials (or assigned other authentication requirements), the // client MUST authenticate with the authorization server as described @@ -112,17 +113,15 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(ctx contex if err := c.Store.DeleteAuthorizeCodeSession(req.PostForm.Get("code")); err != nil { return errors.New(ErrServerError) - } - - if err := c.Store.CreateAccessTokenSession(access.Signature, requester, &token.TokenSession{}); err != nil { + } else if err := c.Store.CreateAccessTokenSession(access.Signature, requester, &core.TokenSession{}); err != nil { return errors.New(ErrServerError) - } else if err := c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &token.TokenSession{}); err != nil { + } else if err := c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &core.TokenSession{}); err != nil { return errors.New(ErrServerError) } responder.SetAccessToken(access.String()) responder.SetTokenType("bearer") - responder.SetExtra("expires_in", int(c.AuthCodeLifespan.Seconds())) + responder.SetExtra("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) responder.SetExtra("refresh_token", refresh.String()) responder.SetExtra("state", ar.GetState()) responder.SetExtra("scope", requester.GetScopes()) diff --git a/handler/authorize/explicit/explicit_token_test.go b/handler/core/explicit/explicit_token_test.go similarity index 99% rename from handler/authorize/explicit/explicit_token_test.go rename to handler/core/explicit/explicit_token_test.go index 9b4939d6..1e73dc5d 100644 --- a/handler/authorize/explicit/explicit_token_test.go +++ b/handler/core/explicit/explicit_token_test.go @@ -7,7 +7,7 @@ import ( "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/enigma" - "github.com/ory-am/fosite/handler/authorize" + authorize "github.com/ory-am/fosite/handler/core" "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" "net/http" diff --git a/handler/authorize/implicit/implicit.go b/handler/core/implicit/implicit.go similarity index 91% rename from handler/authorize/implicit/implicit.go rename to handler/core/implicit/implicit.go index 76643d7d..4c9ec0b1 100644 --- a/handler/authorize/implicit/implicit.go +++ b/handler/core/implicit/implicit.go @@ -4,7 +4,7 @@ import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" - "github.com/ory-am/fosite/handler/authorize" + authorize "github.com/ory-am/fosite/handler/core" "golang.org/x/net/context" "net/http" "strconv" @@ -32,9 +32,7 @@ func (c *AuthorizeImplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ cont access, err := c.Enigma.GenerateChallenge(ar.GetClient().GetHashedSecret()) if err != nil { return errors.New(ErrServerError) - } - - if err := c.Store.CreateImplicitAccessTokenSession(access.Signature, ar, &authorize.AuthorizeSession{ + } else if err := c.Store.CreateImplicitAccessTokenSession(access.Signature, ar, &authorize.AuthorizeSession{ Extra: session, RequestRedirectURI: req.Form.Get("redirect_uri"), }); err != nil { diff --git a/handler/authorize/implicit/implicit_test.go b/handler/core/implicit/implicit_test.go similarity index 97% rename from handler/authorize/implicit/implicit_test.go rename to handler/core/implicit/implicit_test.go index 4a11c255..fcd19f14 100644 --- a/handler/authorize/implicit/implicit_test.go +++ b/handler/core/implicit/implicit_test.go @@ -6,7 +6,7 @@ import ( "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/enigma" - . "github.com/ory-am/fosite/handler/authorize/implicit" + . "github.com/ory-am/fosite/handler/core/implicit" "github.com/ory-am/fosite/internal" "github.com/stretchr/testify/assert" "net/http" diff --git a/handler/token/storage.go b/handler/core/storage.go similarity index 54% rename from handler/token/storage.go rename to handler/core/storage.go index 0d16ff4f..e477022a 100644 --- a/handler/token/storage.go +++ b/handler/core/storage.go @@ -1,9 +1,28 @@ -package token +package core import ( "github.com/ory-am/fosite" ) +type AuthorizeSession struct { + RequestRedirectURI string + Extra interface{} +} + +type AuthorizeExplicitStorage interface { + CreateAuthorizeCodeSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error + + GetAuthorizeCodeSession(string, *AuthorizeSession) (fosite.AuthorizeRequester, error) + + DeleteAuthorizeCodeSession(code string) error + + TokenStorage +} + +type AuthorizeImplicitStorage interface { + CreateImplicitAccessTokenSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error +} + type TokenSession struct { Extra interface{} } diff --git a/handler/token/client/client.go b/handler/token/client/client.go deleted file mode 100644 index da13c8ef..00000000 --- a/handler/token/client/client.go +++ /dev/null @@ -1 +0,0 @@ -package client diff --git a/handler/token/helper.go b/handler/token/helper.go deleted file mode 100644 index 1765cc06..00000000 --- a/handler/token/helper.go +++ /dev/null @@ -1 +0,0 @@ -package token diff --git a/handler/token/owner/owner.go b/handler/token/owner/owner.go deleted file mode 100644 index cf6cd003..00000000 --- a/handler/token/owner/owner.go +++ /dev/null @@ -1 +0,0 @@ -package owner diff --git a/handler/token/token.go b/handler/token/token.go deleted file mode 100644 index d9ba48ad..00000000 --- a/handler/token/token.go +++ /dev/null @@ -1,26 +0,0 @@ -package token - -import ( - . "github.com/ory-am/fosite" - "golang.org/x/net/context" - "net/http" -) - -// CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type -// as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type CodeAuthorizeEndpointHandler struct { -} - -func (c *CodeAuthorizeEndpointHandler) HandleAuthorizeRequest(_ context.Context, resp AuthorizeResponder, ar AuthorizeRequester, _ http.Request, session interface{}) error { - // This let's us define multiple response types, for example open id connect's id_token - if ar.GetResponseTypes().Has("token") { - return nil - } - - // Handler is not responsible for this request - return nil -} - -func (c *CodeAuthorizeEndpointHandler) HandleGrantType() { - -} diff --git a/internal/authorize_explicit_storage.go b/internal/authorize_explicit_storage.go index 68a2c34f..ec1a0f12 100644 --- a/internal/authorize_explicit_storage.go +++ b/internal/authorize_explicit_storage.go @@ -6,8 +6,7 @@ package internal import ( gomock "github.com/golang/mock/gomock" fosite "github.com/ory-am/fosite" - authorize "github.com/ory-am/fosite/handler/authorize" - token "github.com/ory-am/fosite/handler/token" + core "github.com/ory-am/fosite/handler/core" ) // Mock of AuthorizeExplicitStorage interface @@ -31,7 +30,7 @@ func (_m *MockAuthorizeExplicitStorage) EXPECT() *_MockAuthorizeExplicitStorageR return _m.recorder } -func (_m *MockAuthorizeExplicitStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { +func (_m *MockAuthorizeExplicitStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 @@ -41,7 +40,7 @@ func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAccessTokenSession(arg0, return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) } -func (_m *MockAuthorizeExplicitStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { +func (_m *MockAuthorizeExplicitStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *core.AuthorizeSession) error { ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 @@ -51,7 +50,7 @@ func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAuthorizeCodeSession(arg return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) } -func (_m *MockAuthorizeExplicitStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { +func (_m *MockAuthorizeExplicitStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 @@ -91,7 +90,7 @@ func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteRefreshTokenSession(arg0 return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) } -func (_m *MockAuthorizeExplicitStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockAuthorizeExplicitStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) @@ -102,7 +101,7 @@ func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAccessTokenSession(arg0, ar return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) } -func (_m *MockAuthorizeExplicitStorage) GetAuthorizeCodeSession(_param0 string, _param1 *authorize.AuthorizeSession) (fosite.AuthorizeRequester, error) { +func (_m *MockAuthorizeExplicitStorage) GetAuthorizeCodeSession(_param0 string, _param1 *core.AuthorizeSession) (fosite.AuthorizeRequester, error) { ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", _param0, _param1) ret0, _ := ret[0].(fosite.AuthorizeRequester) ret1, _ := ret[1].(error) @@ -113,7 +112,7 @@ func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAuthorizeCodeSession(arg0, return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1) } -func (_m *MockAuthorizeExplicitStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockAuthorizeExplicitStorage) GetRefreshTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) diff --git a/internal/authorize_implicit_storage.go b/internal/authorize_implicit_storage.go index 62038285..64b59540 100644 --- a/internal/authorize_implicit_storage.go +++ b/internal/authorize_implicit_storage.go @@ -6,7 +6,7 @@ package internal import ( gomock "github.com/golang/mock/gomock" fosite "github.com/ory-am/fosite" - authorize "github.com/ory-am/fosite/handler/authorize" + authorize "github.com/ory-am/fosite/handler/core" ) // Mock of AuthorizeImplicitStorage interface diff --git a/internal/token_storage.go b/internal/token_storage.go index 91e96077..6bee1b66 100644 --- a/internal/token_storage.go +++ b/internal/token_storage.go @@ -6,7 +6,7 @@ package internal import ( gomock "github.com/golang/mock/gomock" fosite "github.com/ory-am/fosite" - token "github.com/ory-am/fosite/handler/token" + core "github.com/ory-am/fosite/handler/core" ) // Mock of TokenStorage interface @@ -30,7 +30,7 @@ func (_m *MockTokenStorage) EXPECT() *_MockTokenStorageRecorder { return _m.recorder } -func (_m *MockTokenStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { +func (_m *MockTokenStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 @@ -40,7 +40,7 @@ func (_mr *_MockTokenStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) } -func (_m *MockTokenStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *token.TokenSession) error { +func (_m *MockTokenStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 @@ -70,7 +70,7 @@ func (_mr *_MockTokenStorageRecorder) DeleteRefreshTokenSession(arg0 interface{} return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) } -func (_m *MockTokenStorage) GetAccessTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockTokenStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) @@ -81,7 +81,7 @@ func (_mr *_MockTokenStorageRecorder) GetAccessTokenSession(arg0, arg1 interface return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) } -func (_m *MockTokenStorage) GetRefreshTokenSession(_param0 string, _param1 *token.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockTokenStorage) GetRefreshTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) diff --git a/oauth2_integration_test.go b/oauth2_integration_test.go index b7e0a0b2..60a679ec 100644 --- a/oauth2_integration_test.go +++ b/oauth2_integration_test.go @@ -6,7 +6,7 @@ import ( "github.com/gorilla/mux" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" - "github.com/ory-am/fosite/handler/authorize/explicit" + "github.com/ory-am/fosite/handler/core/explicit" . "github.com/ory-am/fosite/internal" "github.com/parnurzeal/gorequest" "github.com/stretchr/testify/assert" From ce0a8496942259d6fe518104bab0dfd3dfea9856 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Tue, 12 Jan 2016 22:14:11 +0100 Subject: [PATCH 40/47] all: implemented all core grant types --- README.md | 8 +- fosite-example/internal/store.go | 19 ++++ fosite-example/main.go | 95 ++++++++++++++++--- fosite_test.go | 4 +- handler/core/client/client.go | 11 ++- handler/core/client/storage.go | 7 ++ handler/core/explicit/explicit_auth.go | 8 +- handler/core/explicit/explicit_auth_test.go | 6 +- handler/core/explicit/explicit_token.go | 7 +- handler/core/explicit/explicit_token_test.go | 10 +- handler/core/explicit/storage.go | 11 +++ handler/core/implicit/implicit.go | 10 +- handler/core/implicit/implicit_test.go | 4 +- handler/core/implicit/storage.go | 10 ++ handler/core/owner/client.go | 72 ++++++++++++++ handler/core/owner/storage.go | 8 ++ handler/core/refresh/refresh.go | 91 ++++++++++++++++++ handler/core/refresh/storage.go | 8 ++ handler/core/storage.go | 20 ++-- internal/authorize_implicit_storage.go | 41 -------- internal/core_client_storage.go | 62 ++++++++++++ ...it_storage.go => core_explicit_storage.go} | 58 +++++------ internal/core_implicit_storage.go | 41 ++++++++ internal/core_owner_storage.go | 72 ++++++++++++++ internal/core_refresh_storage.go | 93 ++++++++++++++++++ oauth2_integration_test.go | 8 +- 26 files changed, 651 insertions(+), 133 deletions(-) create mode 100644 handler/core/client/storage.go create mode 100644 handler/core/explicit/storage.go create mode 100644 handler/core/implicit/storage.go create mode 100644 handler/core/owner/client.go create mode 100644 handler/core/owner/storage.go create mode 100644 handler/core/refresh/refresh.go create mode 100644 handler/core/refresh/storage.go delete mode 100644 internal/authorize_implicit_storage.go create mode 100644 internal/core_client_storage.go rename internal/{authorize_explicit_storage.go => core_explicit_storage.go} (50%) create mode 100644 internal/core_implicit_storage.go create mode 100644 internal/core_owner_storage.go create mode 100644 internal/core_refresh_storage.go diff --git a/README.md b/README.md index 053c3e60..60e9a997 100644 --- a/README.md +++ b/README.md @@ -392,9 +392,11 @@ rather sooner than later. **Create storage mocks** ``` mockgen -destination internal/storage.go github.com/ory-am/fosite Storage -mockgen -destination internal/authorize_explicit_storage.go github.com/ory-am/fosite/handler/core AuthorizeExplicitStorage -mockgen -destination internal/authorize_implicit_storage.go github.com/ory-am/fosite/handler/core AuthorizeImplicitStorage -mockgen -destination internal/token_storage.go github.com/ory-am/fosite/handler/core TokenStorage +mockgen -destination internal/core_client_storage.go github.com/ory-am/fosite/handler/core/client ClientCredentialsGrantStorage +mockgen -destination internal/core_explicit_storage.go github.com/ory-am/fosite/handler/core/explicit AuthorizeCodeGrantStorage +mockgen -destination internal/core_implicit_storage.go github.com/ory-am/fosite/handler/core/implicit ImplicitGrantStorage +mockgen -destination internal/core_owner_storage.go github.com/ory-am/fosite/handler/core/owner ResourceOwnerPasswordCredentialsGrantStorage +mockgen -destination internal/core_refresh_storage.go github.com/ory-am/fosite/handler/core/refresh RefreshTokenGrantStorage ``` **Create handler mocks** diff --git a/fosite-example/internal/store.go b/fosite-example/internal/store.go index d35f01cd..a73eb5ca 100644 --- a/fosite-example/internal/store.go +++ b/fosite-example/internal/store.go @@ -1,6 +1,7 @@ package internal import ( + "github.com/go-errors/errors" "github.com/ory-am/common/pkg" "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" @@ -17,12 +18,18 @@ type AccessRelation struct { session *core.TokenSession } +type UserRelation struct { + Username string + Password string +} + type Store struct { Clients map[string]client.Client AuthorizeCodes map[string]AuthorizeCodesRelation AccessTokens map[string]AccessRelation Implicit map[string]AuthorizeCodesRelation RefreshTokens map[string]AccessRelation + Users map[string]UserRelation } func NewStore() *Store { @@ -32,6 +39,7 @@ func NewStore() *Store { Implicit: map[string]AuthorizeCodesRelation{}, AccessTokens: map[string]AccessRelation{}, RefreshTokens: map[string]AccessRelation{}, + Users: map[string]UserRelation{}, } } @@ -104,3 +112,14 @@ func (s *Store) CreateImplicitAccessTokenSession(code string, ar fosite.Authoriz s.Implicit[code] = AuthorizeCodesRelation{request: ar, session: sess} return nil } + +func (s *Store) DoCredentialsAuthenticate(name string, secret string) error { + rel, ok := s.Users[name] + if !ok { + return pkg.ErrNotFound + } + if rel.Password != secret { + return errors.New("Invalid credentials") + } + return nil +} diff --git a/fosite-example/main.go b/fosite-example/main.go index 88743e8b..232c3a26 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -10,6 +10,8 @@ import ( coreclient "github.com/ory-am/fosite/handler/core/client" "github.com/ory-am/fosite/handler/core/explicit" "github.com/ory-am/fosite/handler/core/implicit" + "github.com/ory-am/fosite/handler/core/owner" + "github.com/ory-am/fosite/handler/core/refresh" goauth "golang.org/x/oauth2" "golang.org/x/oauth2/clientcredentials" "log" @@ -25,6 +27,12 @@ var store = &internal.Store{ RedirectURIs: []string{"http://localhost:3846/callback"}, }, }, + Users: map[string]internal.UserRelation{ + "peter": internal.UserRelation{ + Username: "peter", + Password: "foobar", + }, + }, AuthorizeCodes: map[string]internal.AuthorizeCodesRelation{}, AccessTokens: map[string]internal.AccessRelation{}, RefreshTokens: map[string]internal.AccessRelation{}, @@ -56,11 +64,12 @@ func fositeFactory() OAuth2Provider { // NewMyStorageImplementation should implement all storage interfaces. f := NewFosite(store) + enigmaService := &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")} accessTokenLifespan := time.Hour // Let's enable the explicit authorize code grant! - explicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ - Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + explicitHandler := &explicit.AuthorizeExplicitGrantTypeHandler{ + Enigma: enigmaService, Store: store, AuthCodeLifespan: time.Minute * 10, AccessTokenLifespan: accessTokenLifespan, @@ -69,20 +78,34 @@ func fositeFactory() OAuth2Provider { f.TokenEndpointHandlers.Add("code", explicitHandler) // Implicit grant type - implicitHandler := &implicit.AuthorizeImplicitEndpointHandler{ - Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + implicitHandler := &implicit.AuthorizeImplicitGrantTypeHandler{ + Enigma: enigmaService, Store: store, AccessTokenLifespan: accessTokenLifespan, } f.AuthorizeEndpointHandlers.Add("implicit", implicitHandler) - clientHandler := &coreclient.AuthorizeClientEndpointHandler{ - Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, + clientHandler := &coreclient.ClientCredentialsGrantHandler{ + Enigma: enigmaService, Store: store, AccessTokenLifespan: accessTokenLifespan, } f.TokenEndpointHandlers.Add("client", clientHandler) + ownerHandler := &owner.ResourceOwnerPasswordCredentialsGrantHandler{ + Enigma: enigmaService, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.TokenEndpointHandlers.Add("owner", ownerHandler) + + refreshHandler := &refresh.RefreshTokenGrantHandler{ + Enigma: enigmaService, + Store: store, + AccessTokenLifespan: accessTokenLifespan, + } + f.TokenEndpointHandlers.Add("refresh", refreshHandler) + return f } @@ -92,7 +115,8 @@ func main() { http.HandleFunc("/auth", authEndpoint) http.HandleFunc("/token", tokenEndpoint) http.HandleFunc("/client", clientEndpoint) - http.ListenAndServe(":3846", nil) + http.HandleFunc("/owner", ownerEndpoint) + log.Fatal(http.ListenAndServe(":3846", nil)) } func clientEndpoint(rw http.ResponseWriter, req *http.Request) { @@ -106,6 +130,39 @@ func clientEndpoint(rw http.ResponseWriter, req *http.Request) { rw.Write([]byte(`

    Go back

    `)) } +func ownerEndpoint(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(fmt.Sprintf(`

    Resource Owner Password Credentials Grant

    `))) + req.ParseForm() + if req.Form.Get("username") == "" || req.Form.Get("password") == "" { + rw.Write([]byte(` +
    +
      +
    • + try peter +
    • +
    • + try foobar
      +
    • +
    • + +
    • +
    +
    +`)) + rw.Write([]byte(`

    Go back

    `)) + return + } + + token, err := clientConf.PasswordCredentialsToken(goauth.NoContext, req.Form.Get("username"), req.Form.Get("password")) + if err != nil { + rw.Write([]byte(fmt.Sprintf(`

    I tried to get a token but received an error: %s

    `, err.Error()))) + rw.Write([]byte(`

    Go back

    `)) + return + } + rw.Write([]byte(fmt.Sprintf(`

    Awesome, you just received an access token!

    %s

    more info:

    %s

    `, token.AccessToken, token))) + rw.Write([]byte(`

    Go back

    `)) +} + func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { ctx := NewContext() var mySessionData session @@ -138,6 +195,12 @@ func homeHandler(rw http.ResponseWriter, req *http.Request) {
  6. Client credentials grant
  7. +
  8. + Resource owner password credentials grant +
  9. +
  10. + Refresh grant +
  11. Make an invalid request
  12. @@ -190,26 +253,28 @@ access token here)
  13. Extra info: %s
  14. `, - token.AccessToken, - token.RefreshToken, - token, - ))) - } + token.AccessToken, + token.RefreshToken, + "", + token, + ))) } func authEndpoint(rw http.ResponseWriter, req *http.Request) { diff --git a/fosite_test.go b/fosite_test.go index e374d4af..ed375cc9 100644 --- a/fosite_test.go +++ b/fosite_test.go @@ -8,7 +8,7 @@ import ( ) func TestAuthorizeEndpointHandlers(t *testing.T) { - h := &explicit.AuthorizeExplicitEndpointHandler{} + h := &explicit.AuthorizeExplicitGrantTypeHandler{} hs := AuthorizeEndpointHandlers{} hs.Add("k", h) assert.Len(t, hs, 1) @@ -16,7 +16,7 @@ func TestAuthorizeEndpointHandlers(t *testing.T) { } func TestTokenEndpointHandlers(t *testing.T) { - h := &explicit.AuthorizeExplicitEndpointHandler{} + h := &explicit.AuthorizeExplicitGrantTypeHandler{} hs := TokenEndpointHandlers{} hs.Add("k", h) assert.Len(t, hs, 1) diff --git a/handler/core/client/client.go b/handler/core/client/client.go index 5a479f37..d078ca20 100644 --- a/handler/core/client/client.go +++ b/handler/core/client/client.go @@ -8,22 +8,23 @@ import ( "golang.org/x/net/context" "net/http" "strconv" + "strings" "time" ) -type AuthorizeClientEndpointHandler struct { +type ClientCredentialsGrantHandler struct { // Enigma is the algorithm responsible for creating a validatable, opaque string. Enigma enigma.Enigma // Store is used to persist session data across requests. - Store core.AuthorizeExplicitStorage + Store ClientCredentialsGrantStorage // AccessTokenLifespan defines the lifetime of an access token. AccessTokenLifespan time.Duration } // ValidateTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-4.4.2 -func (c *AuthorizeClientEndpointHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request fosite.AccessRequester, session interface{}) error { +func (c *ClientCredentialsGrantHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request fosite.AccessRequester, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "client_credentials". if request.GetGrantType() != "client_credentials" { @@ -41,7 +42,7 @@ func (c *AuthorizeClientEndpointHandler) ValidateTokenEndpointRequest(_ context. } // HandleTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-4.4.3 -func (c *AuthorizeClientEndpointHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester fosite.AccessRequester, responder fosite.AccessResponder, session interface{}) error { +func (c *ClientCredentialsGrantHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester fosite.AccessRequester, responder fosite.AccessResponder, session interface{}) error { if requester.GetGrantType() != "client_credentials" { return nil } @@ -56,7 +57,7 @@ func (c *AuthorizeClientEndpointHandler) HandleTokenEndpointRequest(ctx context. responder.SetAccessToken(access.String()) responder.SetTokenType("bearer") responder.SetExtra("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) - responder.SetExtra("scope", requester.GetScopes()) + responder.SetExtra("scope", strings.Join(requester.GetGrantedScopes(), " ")) // "A refresh token SHOULD NOT be included." // -> we won't issue one diff --git a/handler/core/client/storage.go b/handler/core/client/storage.go new file mode 100644 index 00000000..caa84426 --- /dev/null +++ b/handler/core/client/storage.go @@ -0,0 +1,7 @@ +package client + +import "github.com/ory-am/fosite/handler/core" + +type ClientCredentialsGrantStorage interface { + core.AccessTokenStorage +} diff --git a/handler/core/explicit/explicit_auth.go b/handler/core/explicit/explicit_auth.go index 16378442..d9a2edc9 100644 --- a/handler/core/explicit/explicit_auth.go +++ b/handler/core/explicit/explicit_auth.go @@ -15,12 +15,12 @@ const authCodeDefaultLifespan = time.Hour / 2 // CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type AuthorizeExplicitEndpointHandler struct { +type AuthorizeExplicitGrantTypeHandler struct { // Enigma is the algorithm responsible for creating a validatable, opaque string. Enigma enigma.Enigma // Store is used to persist session data across requests. - Store AuthorizeExplicitStorage + Store AuthorizeCodeGrantStorage // AuthCodeLifespan defines the lifetime of an authorize code. AuthCodeLifespan time.Duration @@ -29,7 +29,7 @@ type AuthorizeExplicitEndpointHandler struct { AccessTokenLifespan time.Duration } -func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { +func (c *AuthorizeExplicitGrantTypeHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("code") { // Generate the code @@ -47,7 +47,7 @@ func (c *AuthorizeExplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ cont resp.AddQuery("code", code.String()) resp.AddQuery("state", ar.GetState()) - resp.AddQuery("scope", strings.Join(ar.GetScopes(), " ")) + resp.AddQuery("scope", strings.Join(ar.GetGrantedScopes(), " ")) ar.SetResponseTypeHandled("code") return nil } diff --git a/handler/core/explicit/explicit_auth_test.go b/handler/core/explicit/explicit_auth_test.go index be7fdbe1..7e471bc7 100644 --- a/handler/core/explicit/explicit_auth_test.go +++ b/handler/core/explicit/explicit_auth_test.go @@ -15,13 +15,13 @@ import ( func TestHandleAuthorizeEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeExplicitStorage(ctrl) + store := internal.NewMockAuthorizeCodeGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAuthorizeRequester(ctrl) aresp := internal.NewMockAuthorizeResponder(ctrl) defer ctrl.Finish() - h := AuthorizeExplicitEndpointHandler{ + h := AuthorizeExplicitGrantTypeHandler{ Store: store, Enigma: chgen, } @@ -69,7 +69,7 @@ func TestHandleAuthorizeEndpointRequest(t *testing.T) { aresp.EXPECT().AddQuery(gomock.Eq("scope"), gomock.Any()) aresp.EXPECT().AddQuery(gomock.Eq("state"), gomock.Any()) areq.EXPECT().SetResponseTypeHandled(gomock.Eq("code")) - areq.EXPECT().GetScopes() + areq.EXPECT().GetGrantedScopes() areq.EXPECT().GetState() }, }, diff --git a/handler/core/explicit/explicit_token.go b/handler/core/explicit/explicit_token.go index 2e31ce5e..592dde80 100644 --- a/handler/core/explicit/explicit_token.go +++ b/handler/core/explicit/explicit_token.go @@ -10,12 +10,13 @@ import ( "golang.org/x/net/context" "net/http" "strconv" + "strings" "time" ) // implements // * https://tools.ietf.org/html/rfc6749#section-4.1.3 (everything) -func (c *AuthorizeExplicitEndpointHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request AccessRequester, session interface{}) error { +func (c *AuthorizeExplicitGrantTypeHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request AccessRequester, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". if request.GetGrantType() != "authorization_code" { @@ -84,7 +85,7 @@ func (c *AuthorizeExplicitEndpointHandler) ValidateTokenEndpointRequest(_ contex return nil } -func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error { +func (c *AuthorizeExplicitGrantTypeHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester AccessRequester, responder AccessResponder, session interface{}) error { // grant_type REQUIRED. // Value MUST be set to "authorization_code". if requester.GetGrantType() != "authorization_code" { @@ -124,6 +125,6 @@ func (c *AuthorizeExplicitEndpointHandler) HandleTokenEndpointRequest(ctx contex responder.SetExtra("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) responder.SetExtra("refresh_token", refresh.String()) responder.SetExtra("state", ar.GetState()) - responder.SetExtra("scope", requester.GetScopes()) + responder.SetExtra("scope", strings.Join(requester.GetGrantedScopes(), " ")) return nil } diff --git a/handler/core/explicit/explicit_token_test.go b/handler/core/explicit/explicit_token_test.go index 1e73dc5d..b88c5a75 100644 --- a/handler/core/explicit/explicit_token_test.go +++ b/handler/core/explicit/explicit_token_test.go @@ -18,14 +18,14 @@ import ( func TestHandleTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeExplicitStorage(ctrl) + store := internal.NewMockAuthorizeCodeGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAccessRequester(ctrl) aresp := internal.NewMockAccessResponder(ctrl) //mockcl := internal.NewMockClient(ctrl) defer ctrl.Finish() - h := AuthorizeExplicitEndpointHandler{ + h := AuthorizeExplicitGrantTypeHandler{ Store: store, Enigma: chgen, } @@ -97,7 +97,7 @@ func TestHandleTokenEndpointRequest(t *testing.T) { req: &http.Request{PostForm: url.Values{}}, mock: func() { areq.EXPECT().GetGrantType().Return("authorization_code") - areq.EXPECT().GetScopes() + areq.EXPECT().GetGrantedScopes() areq.EXPECT().GetClient().Return(&client.SecureClient{}) areq.EXPECT().GetClient().Return(&client.SecureClient{}) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) @@ -126,13 +126,13 @@ func TestHandleTokenEndpointRequest(t *testing.T) { func TestValidateTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeExplicitStorage(ctrl) + store := internal.NewMockAuthorizeCodeGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAccessRequester(ctrl) authreq := internal.NewMockAuthorizeRequester(ctrl) defer ctrl.Finish() - h := AuthorizeExplicitEndpointHandler{ + h := AuthorizeExplicitGrantTypeHandler{ Store: store, Enigma: chgen, } diff --git a/handler/core/explicit/storage.go b/handler/core/explicit/storage.go new file mode 100644 index 00000000..928d037d --- /dev/null +++ b/handler/core/explicit/storage.go @@ -0,0 +1,11 @@ +package explicit + +import ( + "github.com/ory-am/fosite/handler/core" +) + +type AuthorizeCodeGrantStorage interface { + core.AuthorizeCodeStorage + core.AccessTokenStorage + core.RefreshTokenStorage +} diff --git a/handler/core/implicit/implicit.go b/handler/core/implicit/implicit.go index 4c9ec0b1..f6cb23c8 100644 --- a/handler/core/implicit/implicit.go +++ b/handler/core/implicit/implicit.go @@ -4,7 +4,7 @@ import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/enigma" - authorize "github.com/ory-am/fosite/handler/core" + "github.com/ory-am/fosite/handler/core" "golang.org/x/net/context" "net/http" "strconv" @@ -14,25 +14,25 @@ import ( // CodeAuthorizeEndpointHandler is a response handler for the Authorize Code grant using the explicit grant type // as defined in https://tools.ietf.org/html/rfc6749#section-4.1 -type AuthorizeImplicitEndpointHandler struct { +type AuthorizeImplicitGrantTypeHandler struct { // Enigma is the algorithm responsible for creating a validatable, opaque string. Enigma enigma.Enigma // Store is used to persist session data across requests. - Store authorize.AuthorizeImplicitStorage + Store ImplicitGrantStorage // AccessTokenLifespan defines the lifetime of an access token. AccessTokenLifespan time.Duration } -func (c *AuthorizeImplicitEndpointHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { +func (c *AuthorizeImplicitGrantTypeHandler) HandleAuthorizeEndpointRequest(_ context.Context, req *http.Request, ar AuthorizeRequester, resp AuthorizeResponder, session interface{}) error { // This let's us define multiple response types, for example open id connect's id_token if ar.GetResponseTypes().Has("token") { // Generate the code access, err := c.Enigma.GenerateChallenge(ar.GetClient().GetHashedSecret()) if err != nil { return errors.New(ErrServerError) - } else if err := c.Store.CreateImplicitAccessTokenSession(access.Signature, ar, &authorize.AuthorizeSession{ + } else if err := c.Store.CreateImplicitAccessTokenSession(access.Signature, ar, &core.AuthorizeSession{ Extra: session, RequestRedirectURI: req.Form.Get("redirect_uri"), }); err != nil { diff --git a/handler/core/implicit/implicit_test.go b/handler/core/implicit/implicit_test.go index fcd19f14..82c2e8df 100644 --- a/handler/core/implicit/implicit_test.go +++ b/handler/core/implicit/implicit_test.go @@ -18,13 +18,13 @@ import ( func TestAuthorizeImplicitEndpointHandler(t *testing.T) { ctrl := gomock.NewController(t) - store := internal.NewMockAuthorizeImplicitStorage(ctrl) + store := internal.NewMockImplicitGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) areq := internal.NewMockAuthorizeRequester(ctrl) aresp := internal.NewMockAuthorizeResponder(ctrl) defer ctrl.Finish() - h := AuthorizeImplicitEndpointHandler{ + h := AuthorizeImplicitGrantTypeHandler{ Store: store, Enigma: chgen, AccessTokenLifespan: time.Hour, diff --git a/handler/core/implicit/storage.go b/handler/core/implicit/storage.go new file mode 100644 index 00000000..8b5b8d87 --- /dev/null +++ b/handler/core/implicit/storage.go @@ -0,0 +1,10 @@ +package implicit + +import ( + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/handler/core" +) + +type ImplicitGrantStorage interface { + CreateImplicitAccessTokenSession(string, fosite.AuthorizeRequester, *core.AuthorizeSession) error +} diff --git a/handler/core/owner/client.go b/handler/core/owner/client.go new file mode 100644 index 00000000..f425f491 --- /dev/null +++ b/handler/core/owner/client.go @@ -0,0 +1,72 @@ +package owner + +import ( + "github.com/go-errors/errors" + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/handler/core" + "golang.org/x/net/context" + "net/http" + "strconv" + "strings" + "time" +) + +type ResourceOwnerPasswordCredentialsGrantHandler struct { + // Enigma is the algorithm responsible for creating a validatable, opaque string. + Enigma enigma.Enigma + + // Store is used to persist session data across requests. + Store ResourceOwnerPasswordCredentialsGrantStorage + + // AccessTokenLifespan defines the lifetime of an access token. + AccessTokenLifespan time.Duration +} + +// ValidateTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-4.3.2 +func (c *ResourceOwnerPasswordCredentialsGrantHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request fosite.AccessRequester, session interface{}) error { + // grant_type REQUIRED. + // Value MUST be set to "password". + if request.GetGrantType() != "password" { + return nil + } + + username := req.PostForm.Get("username") + password := req.PostForm.Get("password") + if username == "" || password == "" { + return fosite.ErrInvalidRequest + } else if err := c.Store.DoCredentialsAuthenticate(username, password); err == pkg.ErrNotFound { + return fosite.ErrInvalidRequest + } else if err != nil { + return fosite.ErrServerError + } + + request.SetGrantTypeHandled("password") + return nil +} + +// HandleTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-4.3.3 +func (c *ResourceOwnerPasswordCredentialsGrantHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester fosite.AccessRequester, responder fosite.AccessResponder, session interface{}) error { + if requester.GetGrantType() != "password" { + return nil + } + + access, err := c.Enigma.GenerateChallenge(requester.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(fosite.ErrServerError) + } else if err := c.Store.CreateAccessTokenSession(access.Signature, requester, &core.TokenSession{}); err != nil { + return errors.New(fosite.ErrServerError) + } + + responder.SetAccessToken(access.String()) + responder.SetTokenType("bearer") + responder.SetExtra("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) + responder.SetExtra("scope", strings.Join(requester.GetGrantedScopes(), " ")) + + // As of https://tools.ietf.org/html/rfc6819#section-5.2.2.1 and + // https://tools.ietf.org/html/rfc6819#section-4.4.3.3 we decided not to include refresh tokens + // as part of the resource owner grant + + return nil +} diff --git a/handler/core/owner/storage.go b/handler/core/owner/storage.go new file mode 100644 index 00000000..f024b096 --- /dev/null +++ b/handler/core/owner/storage.go @@ -0,0 +1,8 @@ +package owner + +import "github.com/ory-am/fosite/handler/core" + +type ResourceOwnerPasswordCredentialsGrantStorage interface { + DoCredentialsAuthenticate(name string, secret string) error + core.AccessTokenStorage +} diff --git a/handler/core/refresh/refresh.go b/handler/core/refresh/refresh.go new file mode 100644 index 00000000..3aa48a01 --- /dev/null +++ b/handler/core/refresh/refresh.go @@ -0,0 +1,91 @@ +package refresh + +import ( + "github.com/go-errors/errors" + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/handler/core" + "golang.org/x/net/context" + "net/http" + "strconv" + "strings" + "time" +) + +type RefreshTokenGrantHandler struct { + // Enigma is the algorithm responsible for creating a validatable, opaque string. + Enigma enigma.Enigma + + // Store is used to persist session data across requests. + Store RefreshTokenGrantStorage + + // AccessTokenLifespan defines the lifetime of an access token. + AccessTokenLifespan time.Duration +} + +// ValidateTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-6 +func (c *RefreshTokenGrantHandler) ValidateTokenEndpointRequest(_ context.Context, req *http.Request, request fosite.AccessRequester, session interface{}) error { + // grant_type REQUIRED. + // Value MUST be set to "client_credentials". + if request.GetGrantType() != "refresh_token" { + return nil + } + + // The authorization server MUST ... validate the refresh token. + challenge := new(enigma.Challenge) + challenge.FromString(req.Form.Get("refresh_token")) + if err := c.Enigma.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { + return fosite.ErrInvalidRequest + } + + var ts core.TokenSession + ar, err := c.Store.GetRefreshTokenSession(challenge.Signature, &ts) + if err == pkg.ErrNotFound { + return fosite.ErrInvalidRequest + } else if err != nil { + return fosite.ErrServerError + } + + // The authorization server MUST ... and ensure that the refresh token was issued to the authenticated client + if ar.GetClient().GetID() != request.GetClient().GetID() { + return fosite.ErrInvalidRequest + } + + request.SetGrantTypeHandled("refresh_token") + return nil +} + +// HandleTokenEndpointRequest implements https://tools.ietf.org/html/rfc6749#section-6 +func (c *RefreshTokenGrantHandler) HandleTokenEndpointRequest(ctx context.Context, req *http.Request, requester fosite.AccessRequester, responder fosite.AccessResponder, session interface{}) error { + if requester.GetGrantType() != "refresh_token" { + return nil + } + + access, err := c.Enigma.GenerateChallenge(requester.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(fosite.ErrServerError) + } else if err := c.Store.CreateAccessTokenSession(access.Signature, requester, &core.TokenSession{}); err != nil { + return errors.New(fosite.ErrServerError) + } + + refresh, err := c.Enigma.GenerateChallenge(requester.GetClient().GetHashedSecret()) + if err != nil { + return errors.New(fosite.ErrServerError) + } else if err := c.Store.CreateRefreshTokenSession(refresh.Signature, requester, &core.TokenSession{}); err != nil { + return errors.New(fosite.ErrServerError) + } + + challenge := new(enigma.Challenge) + challenge.FromString(req.Form.Get("refresh_token")) + if err := c.Store.DeleteRefreshTokenSession(challenge.Signature); err != nil { + return errors.New(fosite.ErrServerError) + } + + responder.SetAccessToken(access.String()) + responder.SetTokenType("bearer") + responder.SetExtra("expires_in", strconv.Itoa(int(c.AccessTokenLifespan/time.Second))) + responder.SetExtra("scope", strings.Join(requester.GetGrantedScopes(), " ")) + responder.SetExtra("refresh_token", refresh.String()) + return nil +} diff --git a/handler/core/refresh/storage.go b/handler/core/refresh/storage.go new file mode 100644 index 00000000..e668026d --- /dev/null +++ b/handler/core/refresh/storage.go @@ -0,0 +1,8 @@ +package refresh + +import "github.com/ory-am/fosite/handler/core" + +type RefreshTokenGrantStorage interface { + core.AccessTokenStorage + core.RefreshTokenStorage +} diff --git a/handler/core/storage.go b/handler/core/storage.go index e477022a..99402582 100644 --- a/handler/core/storage.go +++ b/handler/core/storage.go @@ -4,36 +4,32 @@ import ( "github.com/ory-am/fosite" ) +type TokenSession struct { + Extra interface{} +} + type AuthorizeSession struct { RequestRedirectURI string Extra interface{} } -type AuthorizeExplicitStorage interface { +type AuthorizeCodeStorage interface { CreateAuthorizeCodeSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error GetAuthorizeCodeSession(string, *AuthorizeSession) (fosite.AuthorizeRequester, error) DeleteAuthorizeCodeSession(code string) error - - TokenStorage -} - -type AuthorizeImplicitStorage interface { - CreateImplicitAccessTokenSession(string, fosite.AuthorizeRequester, *AuthorizeSession) error -} - -type TokenSession struct { - Extra interface{} } -type TokenStorage interface { +type AccessTokenStorage interface { CreateAccessTokenSession(signature string, access fosite.AccessRequester, session *TokenSession) error GetAccessTokenSession(signature string, session *TokenSession) (fosite.AccessRequester, error) DeleteAccessTokenSession(signature string) error +} +type RefreshTokenStorage interface { CreateRefreshTokenSession(signature string, access fosite.AccessRequester, session *TokenSession) error GetRefreshTokenSession(signature string, session *TokenSession) (fosite.AccessRequester, error) diff --git a/internal/authorize_implicit_storage.go b/internal/authorize_implicit_storage.go deleted file mode 100644 index 64b59540..00000000 --- a/internal/authorize_implicit_storage.go +++ /dev/null @@ -1,41 +0,0 @@ -// Automatically generated by MockGen. DO NOT EDIT! -// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeImplicitStorage) - -package internal - -import ( - gomock "github.com/golang/mock/gomock" - fosite "github.com/ory-am/fosite" - authorize "github.com/ory-am/fosite/handler/core" -) - -// Mock of AuthorizeImplicitStorage interface -type MockAuthorizeImplicitStorage struct { - ctrl *gomock.Controller - recorder *_MockAuthorizeImplicitStorageRecorder -} - -// Recorder for MockAuthorizeImplicitStorage (not exported) -type _MockAuthorizeImplicitStorageRecorder struct { - mock *MockAuthorizeImplicitStorage -} - -func NewMockAuthorizeImplicitStorage(ctrl *gomock.Controller) *MockAuthorizeImplicitStorage { - mock := &MockAuthorizeImplicitStorage{ctrl: ctrl} - mock.recorder = &_MockAuthorizeImplicitStorageRecorder{mock} - return mock -} - -func (_m *MockAuthorizeImplicitStorage) EXPECT() *_MockAuthorizeImplicitStorageRecorder { - return _m.recorder -} - -func (_m *MockAuthorizeImplicitStorage) CreateImplicitAccessTokenSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *authorize.AuthorizeSession) error { - ret := _m.ctrl.Call(_m, "CreateImplicitAccessTokenSession", _param0, _param1, _param2) - ret0, _ := ret[0].(error) - return ret0 -} - -func (_mr *_MockAuthorizeImplicitStorageRecorder) CreateImplicitAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { - return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateImplicitAccessTokenSession", arg0, arg1, arg2) -} diff --git a/internal/core_client_storage.go b/internal/core_client_storage.go new file mode 100644 index 00000000..3698eef7 --- /dev/null +++ b/internal/core_client_storage.go @@ -0,0 +1,62 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/core/client (interfaces: ClientCredentialsGrantStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + core "github.com/ory-am/fosite/handler/core" +) + +// Mock of ClientCredentialsGrantStorage interface +type MockClientCredentialsGrantStorage struct { + ctrl *gomock.Controller + recorder *_MockClientCredentialsGrantStorageRecorder +} + +// Recorder for MockClientCredentialsGrantStorage (not exported) +type _MockClientCredentialsGrantStorageRecorder struct { + mock *MockClientCredentialsGrantStorage +} + +func NewMockClientCredentialsGrantStorage(ctrl *gomock.Controller) *MockClientCredentialsGrantStorage { + mock := &MockClientCredentialsGrantStorage{ctrl: ctrl} + mock.recorder = &_MockClientCredentialsGrantStorageRecorder{mock} + return mock +} + +func (_m *MockClientCredentialsGrantStorage) EXPECT() *_MockClientCredentialsGrantStorageRecorder { + return _m.recorder +} + +func (_m *MockClientCredentialsGrantStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockClientCredentialsGrantStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockClientCredentialsGrantStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockClientCredentialsGrantStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockClientCredentialsGrantStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockClientCredentialsGrantStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} diff --git a/internal/authorize_explicit_storage.go b/internal/core_explicit_storage.go similarity index 50% rename from internal/authorize_explicit_storage.go rename to internal/core_explicit_storage.go index ec1a0f12..47bb5409 100644 --- a/internal/authorize_explicit_storage.go +++ b/internal/core_explicit_storage.go @@ -1,5 +1,5 @@ // Automatically generated by MockGen. DO NOT EDIT! -// Source: github.com/ory-am/fosite/handler/authorize (interfaces: AuthorizeExplicitStorage) +// Source: github.com/ory-am/fosite/handler/core/explicit (interfaces: AuthorizeCodeGrantStorage) package internal @@ -9,116 +9,116 @@ import ( core "github.com/ory-am/fosite/handler/core" ) -// Mock of AuthorizeExplicitStorage interface -type MockAuthorizeExplicitStorage struct { +// Mock of AuthorizeCodeGrantStorage interface +type MockAuthorizeCodeGrantStorage struct { ctrl *gomock.Controller - recorder *_MockAuthorizeExplicitStorageRecorder + recorder *_MockAuthorizeCodeGrantStorageRecorder } -// Recorder for MockAuthorizeExplicitStorage (not exported) -type _MockAuthorizeExplicitStorageRecorder struct { - mock *MockAuthorizeExplicitStorage +// Recorder for MockAuthorizeCodeGrantStorage (not exported) +type _MockAuthorizeCodeGrantStorageRecorder struct { + mock *MockAuthorizeCodeGrantStorage } -func NewMockAuthorizeExplicitStorage(ctrl *gomock.Controller) *MockAuthorizeExplicitStorage { - mock := &MockAuthorizeExplicitStorage{ctrl: ctrl} - mock.recorder = &_MockAuthorizeExplicitStorageRecorder{mock} +func NewMockAuthorizeCodeGrantStorage(ctrl *gomock.Controller) *MockAuthorizeCodeGrantStorage { + mock := &MockAuthorizeCodeGrantStorage{ctrl: ctrl} + mock.recorder = &_MockAuthorizeCodeGrantStorageRecorder{mock} return mock } -func (_m *MockAuthorizeExplicitStorage) EXPECT() *_MockAuthorizeExplicitStorageRecorder { +func (_m *MockAuthorizeCodeGrantStorage) EXPECT() *_MockAuthorizeCodeGrantStorageRecorder { return _m.recorder } -func (_m *MockAuthorizeExplicitStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { +func (_m *MockAuthorizeCodeGrantStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) } -func (_m *MockAuthorizeExplicitStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *core.AuthorizeSession) error { +func (_m *MockAuthorizeCodeGrantStorage) CreateAuthorizeCodeSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *core.AuthorizeSession) error { ret := _m.ctrl.Call(_m, "CreateAuthorizeCodeSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) CreateAuthorizeCodeSession(arg0, arg1, arg2 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAuthorizeCodeSession", arg0, arg1, arg2) } -func (_m *MockAuthorizeExplicitStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { +func (_m *MockAuthorizeCodeGrantStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) } -func (_m *MockAuthorizeExplicitStorage) DeleteAccessTokenSession(_param0 string) error { +func (_m *MockAuthorizeCodeGrantStorage) DeleteAccessTokenSession(_param0 string) error { ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) } -func (_m *MockAuthorizeExplicitStorage) DeleteAuthorizeCodeSession(_param0 string) error { +func (_m *MockAuthorizeCodeGrantStorage) DeleteAuthorizeCodeSession(_param0 string) error { ret := _m.ctrl.Call(_m, "DeleteAuthorizeCodeSession", _param0) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) DeleteAuthorizeCodeSession(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAuthorizeCodeSession", arg0) } -func (_m *MockAuthorizeExplicitStorage) DeleteRefreshTokenSession(_param0 string) error { +func (_m *MockAuthorizeCodeGrantStorage) DeleteRefreshTokenSession(_param0 string) error { ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) ret0, _ := ret[0].(error) return ret0 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) } -func (_m *MockAuthorizeExplicitStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockAuthorizeCodeGrantStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) return ret0, ret1 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) } -func (_m *MockAuthorizeExplicitStorage) GetAuthorizeCodeSession(_param0 string, _param1 *core.AuthorizeSession) (fosite.AuthorizeRequester, error) { +func (_m *MockAuthorizeCodeGrantStorage) GetAuthorizeCodeSession(_param0 string, _param1 *core.AuthorizeSession) (fosite.AuthorizeRequester, error) { ret := _m.ctrl.Call(_m, "GetAuthorizeCodeSession", _param0, _param1) ret0, _ := ret[0].(fosite.AuthorizeRequester) ret1, _ := ret[1].(error) return ret0, ret1 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) GetAuthorizeCodeSession(arg0, arg1 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) GetAuthorizeCodeSession(arg0, arg1 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAuthorizeCodeSession", arg0, arg1) } -func (_m *MockAuthorizeExplicitStorage) GetRefreshTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { +func (_m *MockAuthorizeCodeGrantStorage) GetRefreshTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) ret0, _ := ret[0].(fosite.AccessRequester) ret1, _ := ret[1].(error) return ret0, ret1 } -func (_mr *_MockAuthorizeExplicitStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { +func (_mr *_MockAuthorizeCodeGrantStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) } diff --git a/internal/core_implicit_storage.go b/internal/core_implicit_storage.go new file mode 100644 index 00000000..fac0aa91 --- /dev/null +++ b/internal/core_implicit_storage.go @@ -0,0 +1,41 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/core/implicit (interfaces: ImplicitGrantStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + core "github.com/ory-am/fosite/handler/core" +) + +// Mock of ImplicitGrantStorage interface +type MockImplicitGrantStorage struct { + ctrl *gomock.Controller + recorder *_MockImplicitGrantStorageRecorder +} + +// Recorder for MockImplicitGrantStorage (not exported) +type _MockImplicitGrantStorageRecorder struct { + mock *MockImplicitGrantStorage +} + +func NewMockImplicitGrantStorage(ctrl *gomock.Controller) *MockImplicitGrantStorage { + mock := &MockImplicitGrantStorage{ctrl: ctrl} + mock.recorder = &_MockImplicitGrantStorageRecorder{mock} + return mock +} + +func (_m *MockImplicitGrantStorage) EXPECT() *_MockImplicitGrantStorageRecorder { + return _m.recorder +} + +func (_m *MockImplicitGrantStorage) CreateImplicitAccessTokenSession(_param0 string, _param1 fosite.AuthorizeRequester, _param2 *core.AuthorizeSession) error { + ret := _m.ctrl.Call(_m, "CreateImplicitAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockImplicitGrantStorageRecorder) CreateImplicitAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateImplicitAccessTokenSession", arg0, arg1, arg2) +} diff --git a/internal/core_owner_storage.go b/internal/core_owner_storage.go new file mode 100644 index 00000000..aec2b0f1 --- /dev/null +++ b/internal/core_owner_storage.go @@ -0,0 +1,72 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/core/owner (interfaces: ResourceOwnerPasswordCredentialsGrantStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + core "github.com/ory-am/fosite/handler/core" +) + +// Mock of ResourceOwnerPasswordCredentialsGrantStorage interface +type MockResourceOwnerPasswordCredentialsGrantStorage struct { + ctrl *gomock.Controller + recorder *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder +} + +// Recorder for MockResourceOwnerPasswordCredentialsGrantStorage (not exported) +type _MockResourceOwnerPasswordCredentialsGrantStorageRecorder struct { + mock *MockResourceOwnerPasswordCredentialsGrantStorage +} + +func NewMockResourceOwnerPasswordCredentialsGrantStorage(ctrl *gomock.Controller) *MockResourceOwnerPasswordCredentialsGrantStorage { + mock := &MockResourceOwnerPasswordCredentialsGrantStorage{ctrl: ctrl} + mock.recorder = &_MockResourceOwnerPasswordCredentialsGrantStorageRecorder{mock} + return mock +} + +func (_m *MockResourceOwnerPasswordCredentialsGrantStorage) EXPECT() *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder { + return _m.recorder +} + +func (_m *MockResourceOwnerPasswordCredentialsGrantStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockResourceOwnerPasswordCredentialsGrantStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockResourceOwnerPasswordCredentialsGrantStorage) DoCredentialsAuthenticate(_param0 string, _param1 string) error { + ret := _m.ctrl.Call(_m, "DoCredentialsAuthenticate", _param0, _param1) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder) DoCredentialsAuthenticate(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DoCredentialsAuthenticate", arg0, arg1) +} + +func (_m *MockResourceOwnerPasswordCredentialsGrantStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockResourceOwnerPasswordCredentialsGrantStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} diff --git a/internal/core_refresh_storage.go b/internal/core_refresh_storage.go new file mode 100644 index 00000000..eac6e8d2 --- /dev/null +++ b/internal/core_refresh_storage.go @@ -0,0 +1,93 @@ +// Automatically generated by MockGen. DO NOT EDIT! +// Source: github.com/ory-am/fosite/handler/core/refresh (interfaces: RefreshTokenGrantStorage) + +package internal + +import ( + gomock "github.com/golang/mock/gomock" + fosite "github.com/ory-am/fosite" + core "github.com/ory-am/fosite/handler/core" +) + +// Mock of RefreshTokenGrantStorage interface +type MockRefreshTokenGrantStorage struct { + ctrl *gomock.Controller + recorder *_MockRefreshTokenGrantStorageRecorder +} + +// Recorder for MockRefreshTokenGrantStorage (not exported) +type _MockRefreshTokenGrantStorageRecorder struct { + mock *MockRefreshTokenGrantStorage +} + +func NewMockRefreshTokenGrantStorage(ctrl *gomock.Controller) *MockRefreshTokenGrantStorage { + mock := &MockRefreshTokenGrantStorage{ctrl: ctrl} + mock.recorder = &_MockRefreshTokenGrantStorageRecorder{mock} + return mock +} + +func (_m *MockRefreshTokenGrantStorage) EXPECT() *_MockRefreshTokenGrantStorageRecorder { + return _m.recorder +} + +func (_m *MockRefreshTokenGrantStorage) CreateAccessTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateAccessTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) CreateAccessTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateAccessTokenSession", arg0, arg1, arg2) +} + +func (_m *MockRefreshTokenGrantStorage) CreateRefreshTokenSession(_param0 string, _param1 fosite.AccessRequester, _param2 *core.TokenSession) error { + ret := _m.ctrl.Call(_m, "CreateRefreshTokenSession", _param0, _param1, _param2) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) CreateRefreshTokenSession(arg0, arg1, arg2 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "CreateRefreshTokenSession", arg0, arg1, arg2) +} + +func (_m *MockRefreshTokenGrantStorage) DeleteAccessTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteAccessTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) DeleteAccessTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteAccessTokenSession", arg0) +} + +func (_m *MockRefreshTokenGrantStorage) DeleteRefreshTokenSession(_param0 string) error { + ret := _m.ctrl.Call(_m, "DeleteRefreshTokenSession", _param0) + ret0, _ := ret[0].(error) + return ret0 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) DeleteRefreshTokenSession(arg0 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "DeleteRefreshTokenSession", arg0) +} + +func (_m *MockRefreshTokenGrantStorage) GetAccessTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetAccessTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) GetAccessTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetAccessTokenSession", arg0, arg1) +} + +func (_m *MockRefreshTokenGrantStorage) GetRefreshTokenSession(_param0 string, _param1 *core.TokenSession) (fosite.AccessRequester, error) { + ret := _m.ctrl.Call(_m, "GetRefreshTokenSession", _param0, _param1) + ret0, _ := ret[0].(fosite.AccessRequester) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +func (_mr *_MockRefreshTokenGrantStorageRecorder) GetRefreshTokenSession(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "GetRefreshTokenSession", arg0, arg1) +} diff --git a/oauth2_integration_test.go b/oauth2_integration_test.go index 60a679ec..46377ad3 100644 --- a/oauth2_integration_test.go +++ b/oauth2_integration_test.go @@ -27,7 +27,7 @@ var ts *httptest.Server var mockStore *MockStorage var mockClient *MockClient -var mockAuthStore *MockAuthorizeExplicitStorage +var mockAuthStore *MockAuthorizeCodeGrantStorage var mockAuthReq *MockAuthorizeRequester var mockHasher *MockHasher @@ -35,12 +35,12 @@ func TestFosite(t *testing.T) { ctrl := gomock.NewController(t) mockStore = NewMockStorage(ctrl) mockClient = NewMockClient(ctrl) - mockAuthStore = NewMockAuthorizeExplicitStorage(ctrl) + mockAuthStore = NewMockAuthorizeCodeGrantStorage(ctrl) mockAuthReq = NewMockAuthorizeRequester(ctrl) mockHasher = NewMockHasher(ctrl) defer ctrl.Finish() - authExplicitHandler := &explicit.AuthorizeExplicitEndpointHandler{ + authExplicitHandler := &explicit.AuthorizeExplicitGrantTypeHandler{ Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("super-global-secret")}, Store: mockAuthStore, } @@ -54,7 +54,7 @@ func TestFosite(t *testing.T) { mockStore = NewMockStorage(ctrl) mockAuthReq = NewMockAuthorizeRequester(ctrl) mockClient = NewMockClient(ctrl) - mockAuthStore = NewMockAuthorizeExplicitStorage(ctrl) + mockAuthStore = NewMockAuthorizeCodeGrantStorage(ctrl) mockHasher = NewMockHasher(ctrl) oauth2.Hasher = mockHasher oauth2.Store = mockStore From 8c625c9cd1e9854eddecafc36e4502577c113ef0 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 00:11:11 +0100 Subject: [PATCH 41/47] all: implemented and documented examples --- docs/authorize-code-grant.gif | Bin 584130 -> 1721340 bytes fosite-example/main.go | 277 +++++++++++++++++--------------- handler/core/owner/client.go | 6 +- handler/core/refresh/refresh.go | 8 +- 4 files changed, 150 insertions(+), 141 deletions(-) diff --git a/docs/authorize-code-grant.gif b/docs/authorize-code-grant.gif index 4973221acfa829c58c12bdd7120b8d2f5971deec..4226457efdd931ddf37dfe2a44cd7f0f4187b24b 100644 GIT binary patch literal 1721340 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 I-& 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

    HCO^3B;4h=$h%6+E1}B=HlxY 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π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�yz~BNf-vHPg01mr9xUB({1t4ewi0K2; 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%0D@ZLCqxRme8h? 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

    J|RP&psyp9$3Jdrvbh6f_4@T}dC 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%0D40Ud5;6Y$S;n2_kT=7$FD+3vv~XHCx%@A=4~QU_ zXJ#u)3Jh0we*3r`th72490B6Ug6WN_P4us3FfRZ_Vy-IX#jpo7JDN3)LwlyG_h4N!oh(cAjW@w8!(e0jm|qb++3qk6;k z>>VNrXI=>l8VOGxxxf)Z38|QQ3HnPEJOcJ-M6Ki)yy$lr^o#IiqpSd-C2SK&|@_eg?ZK#G8RwH;$=c66g++Eu% zMsO~N_3BXTRSls4U)`t?G-(qux|!?pEo$ry!H6S4`}aCH4o<4Hs@h%cT>t@DOMTB8 z8?FN72Qh*THG&1P|Icu6SO56{^#6otQnj`O>8#@^Wv8n;4&HTRQT4dIMW})_eLnT3%E34%apZV|P9`?tSy4IV!#r3Hnb_hL}Qc>$Ni3hT27xJ06irIHcIX{(ifJzQf z{Wk}H34c@Zk265>&sg%`RR#R50r-~>f7vGCg*bRK4ju;8{0W2LNl-W7hi5?W^yg3F zBQOdCM}Y7M5FG)Mqd;Z^$PWYM0RYc&G`fLiC(vsLhONJhTYy;$uxJFOxRg z1RCHSw_;FR2C80wvIdaf0#bTGsS9C z7&-)F2jJ}ynEVW;_Q2!^Fuek%7r^v1n41QRv*6u4SY7-Lr2DW6KCXkU_h9D(*xv+4 z+u&s9*XLdEWe;2&g3A+da|&+1{DJ;ofS+)L9NZy!1Ag9upK#h7JnQ+B`us(iyZK|9 zJOSVsz=xCnxFZ1I@4%xU?7uN{kf)bQB}36z(M{oS%p6=4$;(&A%3C&;Ooxxw9DUzv zD23+7!8)APAmD9G#V4`aTsfI2ggvRyX-DxYmRP@eQnj^eE?Jy(8!;-GM$(zmjt_-d zlStNnza7W(4YB@E@CSPWjqVf}cf-{t8%M~vnNV2!PO8|-9374Q4OYzhJQQEz0n#~+ zlUlM#WvEnFR8X1vb6wv$l)l60tPM(;TcEa!%1tyK&wq*I!;WWKxw74-xI&&x0p<*@~!*Z6>q0^)o_LQSM^(XprZw_=QLVWmttl^^vxOD zH|(DS68qK}w(cP@Z^6tluFC$RJw)}b=b`;w`2zUJuT#J4q2A8Su3lypIYI5dcc=>W;qoS zd_XuY`VRCN)bXEZ3s(BwZh|eZ})W!>bg5S)L>7QkB|l z=If6^R$Hx~?J{kh4ufuDe?;-PFk=(SPx*Y>6Fw2c=2CUt1kM^T8!FUNW`* zc1~dLy}+r44i?+lAWrz6i-~7b)o03Pk7ertRIN4I6btI%j}Hp`4f<(}nweY>yS$Wa z90l%w+U3y&X_zv)zjoq72%v*jeL*0-jTu z2@=VgMv4xZ2lPTVQ-t;R(>oG8#Tnzb9-KTMRDE`EzGIVKkoar?r*BW8wz_m}qVj{u z{0i5fd3X>i{wi8Pui{ zk*JgH;Kei)f3eDnD3iAmDRC6(@5&*n8p`B21P=;}!*U%n#vT^OX}KN=Quueea@GbS z4+tqH1IcOkV~$NqXP9zc-F-e~oRJmFu=bH*SGJL@NShCh#YlRr(UuGv10Q5)R(6xP zbGno)p#teVZ_0#IhH!0(_-W82b?6e^&;fdci6MLA@6Z}}oPUSq03(`x4oxhEwdUU83Ad61jpcTP0 zjEuv19ZtMZ1xr2gt`!qSrLiJXUsTxYCLBq&CgWK5I*ZisH7Cs71#p)Monm8n;j!v# zf1MPSEPi8z2ZHF5AIjCzr(Cj7@Nao+8H(qMRWQ$=rLtKd+7Iy4=D9>#Xb-DL=?=K@ zSW|3aP`8k^@xmyL)34`bgSA8S;nC(HB_JVxTBV09(#qWIGU7e4#Hv$H;42Wco~fX$jJEaJLnvd zMZsVTg-s~iFJ=vQRIR>8DeA{$$q>=hFs3rjXzfx&{6sUxGS^VN3)A&}Lv2wwK{{%wuSt~`*O5H~;xsi#wlS}%tI%Z6$MA;ytSWzf$ao}htTZqH( zJf{>l*djo3d03$H-5IW1!3A#rgB*@d@l0K;vr?d9js0wxyz+JhI$*Dq7@wQ*40YTf zzde%br3#6pkD6}BH!S=gGSU1uymg{)v{M{)OpF`-I(v*>MsN*Jq8=~dxhH+D)cU?+ z<{d^Mb-@*lsX-UGa7bv?SIxe$?LhHWEK_~khTHLE5jcA?r%=Qac0T;^qUp?CwlJb0 ztey?w$VjXSsy6JZA2{z-u$)5jz?Rp{s=m}kE?wtIr)eN^=uoNDq@`%xsjxDVj#6a1|{8_`9tJD@8 zh)*!T-LyJWFi~k#y%$$9k|U8IJP{&7Z)&P$n>Fs|m*vZm6{$T}iWyi*;+(^Nvv;U6 zb$8w<;u23hJ<*G5lTn}V#i2Kaz8s=&)e?&8QkAn-#=m7B(OJS&q!t~`0P zaqGLUjD-iA%>JB0ZUxx&?yjC(DuVRNeB<{WUy@6B-k7OSgi2-4^mj85Wz0J-2$Mf{ zCrba~q_XExKxh6!sFowss;`WCu}C-guueOWQiX)A9S!%Cb0r^{Dl&+z8s8DRHHbvoZd*kd7x;c9m24ehSDBBRV z@EF%_v|xg+%Iw*0dH?rL6}=g|YS=iK~rw4>4&yz1L1LUJsMkdmfx{2J#kk8x$Xg2ir7fdI3IB zZWjDc$49y8+SJ1p6z?0@qsriZO@H>)7LQFyel?!rQbo;|{oL)p&mMn;ZESGkYh z`jX$C?t*dd1tDV#Y!RKVL5^gdQ~{i%Qyztfx(_^X4GG0=Wwy1{Dz)NE*^WX+#8n>@ zNp2PpKetPR$xrb@yXZ(m{X|o&Ot*amL($+MGOvf(60wybtt$8hl}e5<%nSrvvpLR> zGMH3?OjGBy#N+Cy#U84e@@SE`vuWf-b1s#Y!Z*$LbbWNXI^+9vG{(wfb@f=LTkr}k zox;2@3xudb&v0MLVCK)W<&@wQ*kYpR5P9bCI&6`P$2h~R1g6@hh_{m(&v3T2SyF5s zU#p0}>W6$JBFj88?5Rjh?N9XdGDAIMzBx0`m3#92OyljM27627#@3VF$S6g6yqjVZ zmPl5uA;=C!^2mkw!DceTA#la`8Wz?=IZWjt(kUdX$ziJ>XY?9n9#wv>X2Eyfz_Xfr%)!AAb-&wE7{(Jq^I zWlrWp{dRsB=RS_l@yhQac*55^wGiii#_wey&5&msP$^m>W#3(?P~z|0ZRDtiKl8P+*-8}8BFZc8ML=AoPxp)9 zBdANN-Lo1s;EsjwX+#JWPJg!c0xR?dy>d`EMRghl0Wx28)*J4fO{~OO4Sla_1?_5b z_o|}2%E%*Vl2}a@oH3_+ujc4QNIzXbHVCUK&%-sJ4-M7yF zjpzp(U+qu#O--xK1iRIk0}8LF!Ic2k>c8u6cE;_Flr0X}?M^@1dDhz>VRv}FZT8^k z@Xqg`hu7cMI~d>oHUZFL|26?osQ)$r5Xb*E0YKmW#>`>=!OWrk!OS84!OVT5Xty|S zFB0!Y#_s-~B{+n?C|9rkr^xZ|{@TB6)BFcToBvwb=Rf#{|7h;~mn;E)GvoyN1$Y~H zx%0WX61g~oIXT=pI39CwYIAZaaIx~R@(A+q3W@N_DDtZ7@;RNE_yU@a&(Bez0Y6;!_%DN=fAywNE`T?W;Oj+&T%eo> z)C<6aqF-9@^pj3gB1+oL_<` z&A_b{cyt1<9^lgpe0za^4+!W2PuoFo69}yX;Z-2I48#|K#6pl(_*?K;RtR1cg6ij> zx)fAaf#PP6-vhFSLGlcUTLzIEAR0bV+yV((zg>>$>mdIfcrgX)CP32&Xd3`suR-r? z@VXxiz(tPzU}OM{4TABZzq|opY8*_x`7L#vp8*SVU~wKSE`kMkVP^%5Z-Cd^pkp7j z9D%mapyL#Defhm@9D*AiufXIrn7#&c*I@AmEW`UdH{ks>*tiCpmtgx6e7XWV7r*vS z!QnADIRRh3fb%cl>;jzKfOGha@eX|Z0q)?*4!qCv`{S=a55K32h=0d7e?*QlauFB- zKlU4c$2Y`26JwlZaxpZNeO-23jB@T*RJjpkbLHv@oR3K|yNh!jg6tEaMTX!9_so9i@Ga9rKKmzdA3aXxft=OSjud61GGX%5UsyP5NrjdN5GxxIrKZ$jWYCfQz>f-ZT;TMJo!2|Tt zG=#gSTPV?lYuI@IAJi-hEv5>=ohkVg1fI z<*{b!Jjnuf@cZr{Vqqc)me%&dX z3f-vVf6JZMw0K|oy{v+g)XY^WxvUFQ`11WgHqyn%zfy8$Y$Dtu-?9yCdOl1^k-W-z zh)?0CcE26L?Lj7Tak#3Ig{x zb9qc2o-h=MWUYi8BY%xTQuN8AR12-aZ*%( z)ER3F=8nqM16SF6r4(Ux|HWx7%t~d{$9cPpPxMDzt|9RbA>Q z0=kUdPb#5%4|ja*vt_tR7Lq|?#3Z)12sxn#y4W%&DL0JJKbj~dqCb{wFq%-#^VP{- zEu+;WpNqaSGC%UUG=B0G$y=2G#g4|psWg~1K5S#2`c&eQTjdpFtQSj0=a9hic$38g z^Xt}V%M64Fc}_qXhFS67K~_`)UIoxI=Z&vF$*Ml0#S)s9sc}` zJy%!P@Jg_gNzv_N3ubfYJeH6KrYL0#El9FVfB4>&&s9E7##~Uk{ikLiFaDOytg!SP zLWrisG5XrtySTRV6efVCV7|bJj^Iw^2H6@P!(ymvV>gdnhNi!UqJe{&n3VhEE1YCjP+FZHtP{jTuc8ajv253O;=t{7-X&eBqgz9#JNB9o49sqx_Z zlQ%%a2?jR}8zdg3`w3vszE|DStK^FxeIF{OCQBvRzeQA4mBv(kNvR^CTK&1M)cbvC zuApivh+Wt9d3Ev@lk5kFt2VliH|$ z=GOE_DUx96bVEU-d>^O9j{%!OTk=ee98i*WCnv9j-7BN4pLA+}G?|7}TokizTt3U& za4+l)wfP;}E6}9zlqX4EFm*Sp8wF=(cq&%QbctGJiy<8Mf3Wu!Kyh_@x;Gl2vBsU? zG#cF9Ex1DnZh-{%B)Ge~y9IX$?jd-95P}6K!IGdm-zM*S-kI;-bLPyQn(x+~`%Uw& zrfWAv71gZ0)_T_O|2&bZL(!9bW>y;fgmVtQEP7l>4U`vXbVe%ZW`~;$Y@Bd#vB=C{ z-mMWQ2v-+59gpwCTyU|cI=!GNA|>y^)kz`#oxc_n*+&S{eh$s)H z_pDoRpI>1oAmnyewU~W(wn0~6ir9nz&qlV{6ysiJqx$j-5J`u2T0g^pNTG6wA+NkE zQe})t;}J6~y%;2*wR6BSAI<7AuGC=6d00eU!%#jogRSpRNK;{9Gi2CA;}9Oy#4I>s zHEXJ!nsdk&gmC0C|HUX?g|+SQoxbdR=cMI0LfL5_sLic;#jjROG6AVoy%Uad6*IdSVOW3956T zuGCZS_cw3j&IYUYp)dAb`Z~@}UZI+aI2jPoIOxj*qHFElv|~H?5Tp?P7mVK;9tjMmbPRx+ZU#)^+queu&Xx*8HF{@tfMO|ywuP)D(FaC&rp3ceLgjFMPq)yWkf-878yTivTDpqGoMijYN z{1h`)$j?kwIw2P#i~B5z(UXyaS|~q4WAa5|G8UYRM40;^?$Sv`1L#0<61gYz-X|x-Q(PB_nLW!G@||0ODq}(R&Hwh zv?v)dqy$Y?`r00b-Lraj*rUpjb0inBsuRayg@{Cf@8?i_`i@<}?2w`~tBai#Nn+~_ zqq(-$CwZe?5*DUwK*hH!~KfR zO&FDlkJicp5x~hn@i$exjbjvt>fj@*&;-{y6H$S zX^ZLD^vHxKhse%t$029+aBP@KN@MfY$5$|BzAt&~S>;ZRGH+dHsV!DsdJBDJR*il-tINvcatrteiJwugzGGJ1Cu*~*WY#4%XZZew{Zz;Fsw-=x{C z5Sqy$;xO^MF1VY`pul;+*91MW=GM>J?lXkJd3u{5Um=9rQ+6_IcR z>FJy+qHF{XSQ*Qdkz5n-J!&w*#^J-^#C18t<3$J@DD!zf|2UT@IIoG;q$tq4FrZ)7 zPhgRN7Z$QLplXK5y;S$2l|PjD6q%V9V){d5tj?+eN&-Xl3zkq--V4SqqIQK6jc>SR zc|tyN_~^o`L+feOl2m@JV*&I6K=Fwhd5B{r2jn{ry&IR>w!iH|B8;E$wuT;7@n(X% zBac+iL^ts1-WEUC?5ByCr8P>WGU}u8T?+foZzH%UvL6pAmQalgp;@AW{JPM$uMhi- zh+XVXr7MZ;S&V+<@9jxV`*Vim*NKXk3yIcGXhwjV?VkDEG!;b~Z50FbXfR^7Uc0~v zvJXe%sSsTd7=cn8bv3Q*sgKC$ zE=8-u46=dC1wKR>3Gq?@gxuShwUPeDEAdyGR%%$tw+AGUvG`3bIaW^kd`&zvg;0eE z92+O>0BV}ZQhgHX;M-=_(F9r7Q75Bhk}xy#V5(TH1ngyX{g2XmP)-i*Gw7}h%b}}{ zNCVAV84Sb?iU2drTqNQ!9Bg8yNXU@&+MYrTvg89#f^Us9dkY54O;4d4Db9$gAq&s5 zb{-{e#GWKb{yNczQ)gMz#qKT^c>6`-tu`*+20?bPh)^*0Ljno3@~6bxj)*_e+xkRS zP+^}0!Us4}dT@xJH;~)4P(bA~;!4yexS8h)DERuYs;MYN5tI*6jX$qDs<=wMz0lXi z5mls4WgE=GjDW@fv?LQ~a5fy0eFLs@W|?*7DBlB!BRR#(%&=G1QDgD2U-)Ao)W;$? zqsZ~_uhU|{Q7MJHNu+t_-o+C~ZW5igr+4!x7U1xEk+@@orFH}?WDXFsHeb!Mr3N2$X~>GSLR)FX^IItc`xgC4 z%L9eVfndY(P@nSf%<{;N^5~WF*z59mP`(kWNH(lU^{GhDtjO%B$X=<)y{^b7tt|Xa z?v(o6%QuxBzf%IP!SlYV2BE4Z!~2wgw#=#yklgv-DBs*YKz@J@_W&Iksk3gsvJT^> zZug)LEvgO$y`HeD21^)9;#*JdTSFFAM?u!GcwPUHrGepNHJxt*^IHo^U-?XOsF(B|TZQ z_Cym(R^4A7P=B^S_1p_76c!ZZI^+~)6in$%tmUknz5lQ&@E>U`|LFR^t+D*0cmJu7 z!ac0a+v&kypDSECE}pk7mwm3Bd99Ior;`cjX9I>=fKe7;{QDVvVF+H#1hg~$^Z}Ro zZ36zkqaEt+wn>3%$sc44sHlJi@-cb83)EOZP^JXnF8|HSfCf|b0C&r8T;}a>191?S z83njO-*C`0d>Y`M1-R#aKhFR>?*aaIfausS>0v;5=$Gaopf>;*4FF~XfMp+G{T8t8 z0vx&lr?-IXAm9ZuF7v?aB_Qx45c=uf?;BJ?K+EsAEg*3VNZkgqz5uyjfRbIHav!ML z2P$`g(k&qW6OaSOD$W9_<3Q2?knk3W?*^h^h#Xv-KwCS|-3Rmz0E2_T@DMOQ3QSGh6EOFR%KUx* z)6x>~aT!ns9{@j&fy-0i`W(0g!57fV>FQsom%pt1 zK?VjCOF;Yu?0P!A0}gJ1FE_uykVY`Aap4M>xddCOeog)aCV$=wDgP>Nk%u^9ttkXb zy)%YaZ(iuT#B6_SGZir$j>q(hTv2m#FcAsoF33~WbTovByAV7@W*CpBVdiovmRMC$2eUSc4{9`JaFiU8jPzn9-{5<0D7xJA zG^?-La!BKf(@J%jSDvnGFVp8a7YD{%rHSWR@+jWWQ(qrd;>~O!=Uf?b*Im`LBzmpY zv6->$kxX%MU90!-BCY|95CQ@AZBwrhQAU$7+$Ck5;MOOq9i7|N?&A-B@DZQq?*s(t z3aS58X|tRZKofg0Zp5Q-i0&&_HuYqk>g84}kT0^*-F0=2BHLVv^4xx*$^b3)dgQqQ z<*RLm!yvuKbk&v7+ePR&rK{3Y5*e#Ws(gjvn#yAD)|(WA>Z=EogXB3h)dYH@1F;2j zGo;k`WSXSjo8Wy%QepT-9{x$HK(h7I^Hd7P6{~^`0UWj&@(nY2gow7suv{V8H}Q0apusvt$WP`!zt$CmqKW)$VpNZM zzO9)24$5TYK=6WsE~%(9aH9RK^Cr%mYCUrw9%DP*%$m)f-ZisfDM&y%y(rCD0=tQv@w4Qn+&%lwj2)a7|4 zNw3pOYR|15eAu@bV`GD}__?F5C3Qrjae5%pq9;&yn)%@knwixq z9uK^9Us7QmNl7mn#z9+J!>tSn!a5$Z*d@>9!q!ed-ijhX;v z5FzZ8y5RdlE`@`Sme)PqS)7;O@kIMe#M;cZmflqM*=MFuA}0*cnhAQOGoGP{0&yPZi1qn);|Ti_NF?&^~1gX?uy5Y zX~b)pA(xC;iV@O?Sp4=w+FqYZYveVSjF*xft9#tiX33UOt9d~C{Lq9c>b54OiUziQ z-Gs)er26~fGYZ8xMX#Eft@o*9p|oP9jH+HsRA&h|$>uw(htLP_ZDrZJj_56^1#PMK zaj;C{`yYJ*KNs5M2n8`)ig(MVMY_%mk?YKO7vXXpUHtWmgj)rqD-X7=ba@be|@g$(rjoG-=SmOB<#06w~KY%X02d4~s2r^eRnTkYHU_(W@2C zji3^w#5e$|t<~qa3!5_1i(b*D{Bo&NwFs0AAtBi32}Xk=gz{D)ldMsRI%#`|N0BD^@G$s|Lk*$ZpGG?5}1X12Hik`$+B)V)WlU-fhl84iB`T_JKP_bbx&siOY zAJ0-KBS+u^haQ9<`slIc_7C!QjtB^Bz*!WdQf@5CHus;g;9D@@nR)L)(!vG01lDtC zyP|TKRS_`@a~ME@B(DOT&1l#U0i#JQ?@181#h=u;+I< zo2D;%B7k~6>iT4sM(b4udU~9cvf)!hzkM0(BWA@3{7B!Q z6I3aE8ScgSEip=AR&f0Nz|w)Cd;*&u)y8{lLdv4#~66@Rr(0(woOJXft z^xF<#eu_xnOvlX_^u)^3X$ILh6G`d^FCT&=6AsbCF+0mPjI zUJR)C*D2VpHqR^ZB-f^?bhy2>>Rl<^9(oQK?yWz?#D$z#V#&%wJZB!d5jaNIVfH{F zrUmpPxM~G(=+a0mM({xw{@52Mft~r(hucWSrgWcYDAnX-o@vW6^eb$YKBp&C$mc+J z;76Z_LJCfdg&M4*Lp^wLsX926ZcZq}@>RQ`5Oo^Lw*(5R<@CN@STEbK0ooP`5qE0w zW~?hynGSWj?mD!ZI_`;W+Ry3=VcUu-+Su@6GH(zFZOcPLxhb-mA|l#1+jjh%Z5&XAHyVF~k~vp>*4r;p;I*R~l6OkN0m zamhSxYx+T*=6gJWPb@TN6FZolPz4BRuoelSL+5>UF2r^R-mO$J67-%SeQHs=L9U zH5|{(71L!4eE%e2oU5F5lH8kqj%u1* zXgeO%CfC30(ZO==*Q?x<<=nIld!+(7OZ>ccE|PsvnGVe3mwW_}BNknp&}l`B0irYfy^SIjv|qjBC+dxAw^24SjMne&Zk%*vskI4SY@SH^}1M{ zv_w;=L>m-Rd`k2)OAI?oj6n(Iy2O;U)Lf|4(y$cdU~K>0LQ4PtS3(MN89Wsf9$Jkh zQT^7ZI!35^w4*w8mI^v)jj9Uz5u9^3#d2L^_)KTM8S+jaw<9<-HE>!EpTnol6 zKC`dg>!`J^tUbD}H9M$15qe|H{N}>vjh_9R%Z@jim2YmZ-zX_nPm#j?rDRCKvHBs# z!$JPJFB0g2goucUjEszef&zg+FfcH1aBv6+2uMjuDJdzbsi|pcX&D$87#SIvn3$OV zoevgf7CshMRaQ1aBy&FXlQtNcw}T`baeEuOu@;?$#?JGO-)U` zfB$}ZdK!!voSmJWo12@TpI=y5SX^BE@ZrPK($ezsG8jGh@#DwU)zwd*KCP{-eg6D; zeSIAaBi!8F+}hgO-roN5<;%{_4wy~2x3{;yzkhIWaCmrlbaVtp6@LBt_1m{^CnqPT zr>9_S;raRb1!$x6{X3Xn`19w_%gam9Q0e;m`da}3nok%($mJWc) zfs*Nf^zW`XiQiYiAVI#r1irtAK>Z0zfz%YJ@%^Fh6$3nF0BF4&a{!gr))UDL`@(kQoQ$#sI|;Q04>F`T@;e zK>IDA*9921|1xd`Oj-bodcd{@urK@NSOhp10A6{3UoH@k^D8(T2+jHxo(V)|0x_9D zLMD)s31nshd09XK=mMV$WETOc6+mJQ5K{*Pw*dZafG| zfwBppY80p)0a^!v?g5~06d0KR#>aul$zSi@15-1=%x{!xaS>Qp0_IkJO|JsupMjxG zpnn_a+67wo@7<7Ej)0DDz`z+W3Yx|L049ICA%Q~P{1x!w3Ru1bK3)T#uYrv#VEZSq za}MnO2C5GBf#cnKcX&`YygULfzXCTW!0q{O3-~__lK%8ax~Hl@lcete0KN&<1#qtn zYW+s6B!gDh?F2{bHYB;B6iT2u5{+cIH7jBDIa^*=ATi0>)lZe8u_TyQ>0tVd`Dnz7 zSY@{2Tt1uIRbj#HPObGoINtYLqn*Zb$y6-(FX-+~B{OB}MM{p4i;~_nR$3{QHjWT5 z4jtv|LE59IA}Z7`Qr*KeKD@>Mo^Ka0TJO-M$?ADGK}6)BUB%Ei!y>Cgrx<4X*@30= z&C-WD6Y8h3Ld`JK$TX7SXq9%CdH$_cMWr!U>l`PK#{q5!>M)J>%);E-<8Hi1AKP5T z2O(}Q%5@~Zu9T>&%zPG!)&*Lqr;9zd38wYWdcGOZn%sa)$T?dslkUbg@HnuI5t*B9 zDn@aUt^Q)tNl348o7Zcq#e3`ZO*d~Go@MGu{jiB_e}OiYWEMQXhII=XQl8AMvw7k( z=JvE%zSI1~QT`Ku`~n&LDQznLV`H~`84N-hBQ3<1JsNEtw2`bA1I|110o2sZ=%To@ z0kPavFSQCK&@!AA#EK-`M#V-@kx=6hGK!w?o!PpZM-i4=(NBOtQaJg7CDuj&$O9(7O|2%2sAph8% zlk|5Yu98hQklOA5%(!q}yHK{BB^@-G{`eH^^eDP4Y|(d<^xE7M86moIUB$gb<$N8? z+6ICpP)CD#cFRz9fs)?TXG#fGNp+Q)WXrLobhxVdpJfnn8pf@K*%<2-l;eC(Q@=dw zp5q%J(;f98Q>*U(nj$4qW?78SwP)-w&R*%muU_`~#{sk2>bA@X-wi5KCCP_GTBz^= zgL!Q0H-~c^nGON6_Z(2i)p}1VU*qiZ7YmIl{el_J=&IJ3NrAoU>{3vM4H~8Akb>$% z?rD;ok0-`jok5Sg4>IZ-DzCb_PQ?f9@!r!#x zl@PI-Yw&!9MnB#7^NWof_-SSx8_@b*yJY1sSw%M;scfdyA@b6y_gxh`ITfe1d|ehl zhs)`Y9sT5@-#WyD8~v8g$I49XNJeu)`~>Oo*HabQi($6A!7@ydk6yxRoJ_Zz6-mnO zhzv4>Yc$To)_xUyLVfS0VqY)M&#BNgs)UV-A7v*ha4huQz88B(*Sc!lq-=h}y(+wB z$g!FGbLhpZ1;swfAMh~>tL79x=CIbj687xBgBKq0A0^XVY%%%rPX3GV!@_(XVY|^d zvZgZ~KW6=Cbgr>i2$NwR5~DrmB@$%cCFER26QoMKPzZs&^bzbd#022(k=$xk7&l=d ziaU}tZs(}{gAgff%RSXlCg|!DT=2gEWTlwAu8IpG||s+CM%? zhJ|C=)tTdLn_^{hor&2M!--77qpvqH$Z=)PU_3~Ecn2rY>{EwG5CgMF%)A_gSx<+p zYkd@0*JQhKcMJxow~6UV`UKrj*aDxS&}n!@RKTlw4Q8q2dKDJ?6+ecJKq0_IS^P4^ zTaqUMiQqfIOL+2F3N{@+ znILx>>QHK$#lK0uiNLG=BC{`F$xhQ!>Vldw2eXRY%JS?j41csqL*@m(x~vDbj0YAan;*2sLi;yV{IW;dDS zk0zaPIs}T-x=_KrjdX({Nb*O{u!p?FA5dReP*!G8yh3uRDzOgEwnEI(+RG@3pAl=aX6xTuyY? zi(PGVUPNUxWis#FO2*c5`4#94wrlg8@|C_kM;Ai4k3Ry_=X6yWtc@p-1rJyYeOi5g zB7t^&kia%FvZwz@CF&H8FM=g{=ow;zm1U9F(gM32E-#8hdXQtY*_>MI57z7*MY3f~ zx#_OMWYEwrDMCuiXF{_C=HgYz+J`K7UBLW0<7fK@VqIEgu=145qf%uin&eVuj@R9B zlpWoXf#{x?Zu5uLbVsP16S$GVIOtAo7-M{qHfGU-t*tl(RuCDL&C)S^noTG9H?ua; z&o57-na1=PvTcGN;}I(&^a3p zY+}mP@*~1HHJzglnc6z@oh)*#h!d<^4OIvh5599v(i*9e!p`s~c~tu#WuU#|hU+n= z!EKy|iuD-B@JaMfRC0Og4n@49eep%fXzl3{ao_AruRAGnx(`NUDqpK5aSw6koARg$YBTShP5m(WMyHI2+DoW2QN+b}Zw$GhX7Tjgkm8pjK48xwKUo zZApp4-c=aUU)Mk`Y`hi0Zwj-E^-PGB8Eh*%E}^$oE<}gK4l|aJ(of}baN&X}mB;y^ zi7MT>>z(jx*=gQrD+_Chl}`oA>16O`$?$Q#fpK|;SNxI4b4mf>MN0W^A-1=dQ~c+h zs#M47y?A-0W{NO9yUlTaPbH)2f$x=$Wrvn&%uY5)ety7g+n!ckF|{}H&(XNa1KRL` zxKdO762|b5HQ>mFUKx?Bfk;W&ir3SP4!_w6OI7Y%EMmlUCr9d0$E{7`-buwH+_+x3 zq`HJ?g*KW>jGt}+Tsj7LILSz8JJPIf90DclkPQz0LK*RcdVkM8$acP!Y9scs6Qm*@ zou6BO$O%$chgIT4@qL>xp%((Xq`zxFxs|BluwgPOB zS#QS&7(^hv-FmaPdVEh#l=c%7bv_-zP5KKsu}OaHEjT9* zTUl-aI;Zg0*Sm5Gr&_`86lfPAiO^7kwh&|P*K1z55utiE7DW2eT)nh{kEs2r4$$JK9sdT~Y(6*f z466scSXkSOh;)LT@}!0{LLd>-!_3z!h3g_7O;zg&hJk-jGJ>uhVTN0RofaRt8xgcV z*>47eq%|^Tn9HMp@_7Qnhl@lTy9X~KICo1ZR;iy@Q}JCQnmY=_ga_j}P(!yQ)L&l4 zQ*0-0m9u%z3SRkRSdcp z>vC2@hU@57R=uQaYM)VmJ8qMA_IP_XVuH;XA5>n`Hg7n4-XLd!Bx`YBC=NsyR_$_X zC9tMivpxytZVSF%GRS3b$k}VpeM2JqZT&HCE9^)x@4_JOhj-p(M&5OM-tBT8aFqu~ z`iC-@|G+07H8UU5k&m&Gk9D07{jCh*8x|1y6x<_L9R=ho1(etShbn{qe^(i_A4fuP zMoP{^kf*B1v@cbOugJQtuw1Fg7pgR4t}OPcG`6oS@2J!R4dSmWH4iH5gsL7hS2g)m zDcD!FbyP`LR&`xhi5*n+3RMd-R}cDB^Vr`jgO7eIgUr8`K^mWmRKtqDbiF@y2z~_6 z@BAO>W&bJH{|$Hv{QZCT-G53b{e2ZbaYT34#35dw_TPUh}v|o8JG%oQ8kzgVF7UVjP%i>BO8_0P*Q^>adjnWD0M?Cw zUE_UcnRherx*iCt1mcT;tOB5-0I16c8ViA@VxYbHS5G4_(DiF%02mzx#zyb8im{1% z(W3Vq&@v6wEC40TK;9aVx(TFh1DQKO!5&cgJLIkrG;IC~^ngOeDKK^hOr8MmzX3DH zz`_CW;SgBa2R`iqpAUh}U0`<)IM@Nc?Eyc2%Mw?ozzt~S^V`P>w|A_!(%uRMvW43L*QPdoFyc z4JCQArp0&0^x@^#@lxW7RO*iR7=Sfn~irL{;?7U+fvZLi|w2L$cR!L}os8Ss~>ub@>Dq;TAZ8BarY! zG2U>@#WMm5wDGX(_!I<@#s~{F=SK-`sjmaNi83Tkc!+QW4V)Eph1r>lO?e{diQc5L4FR^ay#L4o>^E1Lx#sQnz7XIX4{S1uXS1gjPXRyzT5KyR;rzqgZv*1 z(Qis5-UUKLBB#u&^a*#A)T-C8!p?Q{6-SJucPCx#3df?6o|om3h8>H|_0ByL8AdH; z)k}u(9EnlycB=6)v79$oUzPf|h|v`?aepXZz{9Olc>2Wvkgk;YUg`BcnHDN`N!qrd zvAf5UxT^Nu{@9RXs-No9u{Oh$*au>*Nnx=YZtRzz{DQelitk*Z1=qIc6S|EEQ9QL6 zTOEp!yq~y23gYe37+hz?)0C5s-b-PLeY|K`c<1eW5S6E+TI>DA8%rpP|8&|0E9cb% zalg}%hdDpRBn6+UeCf}7Y$&`$=1#`>YrU~&zp1pRV{h2bvXbeq8w8 zt1RHoWhx>{EBe6C(VFREpzyNI?(@wNU;VBFE%7G>^b>L^ERVWsiZU&AX}%5Y+Alk9 z)|>AUz9k}{l==rZcRo?z(d;(e8~Qg2_b$xVi02TH(@2f0l` zOZB=m_W!NmNCWJF!u~7!Ayd zf^F!{!zXI-?8)Rh5R#T94T<8=deRn5b8Ew6BZSJx;2o+_4RPlLq|d@$8W5>3o-w}m zb0&;XhGzy%U>%yC@fDwhg-GqE?%lCO<&5R3`R&J>Zo=dXw8zydIic2@iMltVRsx%Y zN_tZWsYWj0F9%DKDZV_XI!;G9n4Rm#sXwz~0@Np~dNRtKLM^kSu9LmaW}4NS%Y|up za0Ovryzfz)M1PWpi`gv`2c##OmA2auQn;uWtxnqfstXfb?@Pmn(yGcAzmvR@qs`W! zrT9=lz~sJzolw(A9h|(#+bV#5?q?zN4L_WD!kfm;dRL2*B0TUFLQH`Exy*wz+ZTS` zg{Dd=GE%;iSwfZytrwfbC*gKNsLb)|q_qXf^UR#LXqrCisKR#H^8Ax6(QZ=v^!SFM zsijIWd46#w@>Wr+U>|JPVkyIiYl?)E#Y*|H5#rAXkpf?XdA36{n5T>rPl0ISz`-H(L zWy6JG$45=QFV~=%mmy7gLpsl|xla9I|5(2RV_eN&7*b{crUDRCERwKf1*Kt+0+7{}wLQj0`XS#wbON3?%=_W6EUtHkYzAm(DvF6~@ zVVY*O`94gm0j1ON=AqI3Jn*zuEWKY)Ns{m7#Htr;UvLbDA@A5Q-4H)*Wknq-M@&om z6{=gl`H5w!RPrgM0TD~eZDJGy-C8JB(UbO1^e0$)AAsH>gS!j)r*bqF)jT_Lk?mo8 zvGuy|tLI_vpY~>aLYgKg3&(j z?@_-xjclt-x)3NQ9zJ;7kkB3KIC z8@j%*>*;sNkDu5+)G{fd>`;D(?>yDDG1~BzD;F^V+8Pu}y-_!)gcT4b~g@PMxJFbvS-Yk2Qv$J-ptGZK(9Im$2 zszdx6<3`rw401(=@o!%I);Vhr#*{*)OetJvT=Q@Xrlk>FCyP(5x3t@RgpR0@4}A!~ zgv$%S_Q?D{2=g{{F=!6hT?8_2Z&;YueI#Pl0UM?ig1qhz+fhLz#96zqov;* zM%w28aN=_Bl)&5zi)7^Ff#OC&oFkQmK2vy1$6Pw*>}ZiI=VZoH_%;IX)JLv^R47G5 z4h#tcP`6HeSxWNaIwvolm}YV zbic}LVXTd~&<)GKx)K7!#eCgj`koUOeA6rPk%$yQ?r0amd>qTja~DiGiYg~41yP;P zvru1us9o?*2FpR@{l$!@bvhoIU6MSFt96`>2x+pEPpZtI)9aK|pOz%<5n28Nf6;wC zD~A?=3Pitc=rejZ46kCp^dSjs0hoWHeeZX?A5Ic$y@CPBn$?UVR~!UHfuLx?T_o>c z%Kxfj#J1srP)@@eX;f-I-*@2y#^kOakD1JaKs*K8ml)QbUh+12g%4@DN%T0eUtdTi zo(UjGvL(6ri_tO}bK~mN6P-F?m`O4oQ$dF|c@Y|ULkoE=1av+?2~P7Bo+TmR;sx7F z+DvnWiUlyEHF5yA0i?Awf?2TIiQT?6GOKRVu~ML=&7+ zA|phD8h+fgHX;;a&{jS)tjKJLUg}wqyz2wuEGWT;c$;GzlVp9ovkhnr0xxE&=1m!) zmPKSaHFH`cj*BE=r4tqwH^GPmo|UVeARcZEF6Rdq(m@yhdM)->d(^F71nq4B5_BBq z)LdDKtka_r(YOTS#q?pw#wVK0^9(`N{IP9?#N1!Vd`83S6Pf(?ps+cXQm)9+1>W2? z6SdKBG$u!dGg@4493^uS9Ki(Qj0Dp51oGts$_i-Y2G%k?&eaY*NrfC1GS0Ab!b8Ob zMwQKKsp2o2?+#59z1veG9sv`sAy)>KxuEH?H+cJ?y%N7auW z)ji^9<^UaCIlDMH-*STPuJ_2u2+Ao2M2#T9Ss@|)iGTd}!1%vFcKPpt@t=cJ z{SO1f7UT>c!olFeFfoa-u}N@n$nfyU2?!~Oi64@ZQIS(pQ$3=iRb+tKGqd=!vL&)T zDtg4x_WSNW`5y!V|Ca>Lf0;2R|2B2}-520|^4F9y%*8#x&GVLrr=5qliI=~IU$8__ zI7?VGPE;~bQpQu}zh{j9(lZ7K8G?8rI2b^%@DHRAgb6{C@Ha+y&k){2g!dHT&F$?i zn9KObK*L@W$h=Bk^#-!(<|q;O5a2!zAmWR9|$i+9fBr^-!G;1pc49 zXbUP4CD5xDljTu@5KgdPOdtfMAV5P?suh{wB1ughFzZy|7VFML;Hdn+{L3m3JY%>+ zD1q~Y6aKGr#_&fP07osyqvA*GS?ugd>}-*2Y=La7zO1ZntSpW!EH*4GrYv9-0Fx>c zlROin7>t3Rk)D&0j*XF)nSq9pfrg%enwFlL=Fg&`p{J!|paYAZfu5d`fdK}C-Q&-! ztgP(p?3|pOJUl%7{QSbg!lI(05)u;9($aEra*B$Ij~_ngHzkclxrgj7b1O^5M1qB5M2Zw}&gocKOg@uKOhet$2L`FtNMMXtNN5{m(#Ky+P z#l^+P$0sBtBqk>QdnP+@2?#F#?$>^$nqRYHAy5Ya8FZX?j!F zTnAQtOMQK7eM4(QLt8^5SnZ8qHT_W?O-&t5&0uvlw{$kQ_B6NmHFpj+ca1dnjJ3R- zZ0Vb7>7Q;Hm~9=LYaLo>9bRf3U1=R#Z5{j6I=f5Q+ zzNyvz_p5``tHaYDM`u?j<~~l%f1FwTIKT99Y31*;!~gS`1{vW$0O9|c4*p|g|I@*J zKc@f2I`##j;{CRhlMeU=h~A$u3`JqkDh-a-gJ}S`zh2%bG!%~olf7jV9&0EWNuDTe z16fDvNhUS>gH^?oog`+FpxFz9p~&eX#t6f{z@~lW0A^>xq5k=bg-E3e-R^N-+WBZO7~V;dm@2lWp}| zBk{D#xhm}qUnbJIpRG-{H}1aAmyV)*+|jf@M^~UNeTOrizECYFrFbgD2j<+GeJl+Z z{`q_j>De!jC8PY44fH6o4>9BgXZYV@`S~wJWQF$UP;}KauzY_UGxf{HjG5H^6xyq8T4Cl5=?2s%l!kQFyGDk*E*q(CBU z%BBZ+&rG$rU;y^QbLErDdS4 zZK$JTq^D=Bum8l*(8S2-DR?7!`qbRq+|tt03cR1#+uJ{T_RPV-;s4AV%m2ph<=^Q^ z7#$lQ8yg=VpO~1KoS1wEHYWVhm++t4lmNCPfOnWbRt;e1!M|=h_^0cI`y0!rzbzJm zP=DP?kJc3o1VbJwW!pNL$wU%AWKVVmV@4togtHi0tKZ9sE`NfSSXk{DA@QYP$E=Z z5)?dgRD23d0!n-WN=jl%22x5kata0jWl2qg}j3i2I#Ogdmx}pRo3ixJP1W%t5 z>bsEY`H^dfQmV&Ot7Ov26*EfIG7EOFaSr{KkH-FA3ex{@xA==m;2q}??-x;Smo=zW zw=FSp&#??ibxcWc&yV$~jPaS z3y6pe2n`Jg3h)o`f9(&>+^=5;ynY?z?;qmtAMPIz6%Y^?7?>IunC0W2>+&-HnQ!4! z&tj`r6}CZd9Ksr2L^gTEwt6SDdnR_dCHFd}4%wuQ*=9~Y%bj*8TyQIz^C_8sT{<67 zwh&aY7+SR)TCo^ju@F%)7gaW$Q1LFkVxYLPxuK%8w>*8cEN;3YV!kT$Lv`SCP2lRA zz_o_Zt@h}h?u5PGl>LE>gW;UxiGq{&rRQ^%KbPKIe`>nj?702XeeQzB$Ggil;AS1T-3IP;25wJ)yHnuqkE9*YPy{@a2m1v6 z@MHa3@4(+(DgQ?=g1;18jNkmOtGl}^FwFTD`1!lQVCV0@>*DtA;^y}J`sV!V`W!S` z1MBC{)61)qtLtw!H(zh>j&JXd?!Z6bKKKXB``HJ8T>#htfNcQSxC7SjfVDed^$u9M z1D0-q#am$E7MQ;QX0CzhD`4vKzQJPb0vJBI>p#4GyLa2YeciEs*}C?#@#D`o%a;}N zKTF=97fpUE7(dP(Im{kD%o;w-96C%NI?5Qn&y;?NMy^no|JPDt;BUAB=uFFPzxsPA zK_yL^Obsq2KwP2H7+gwBq;XgzMk_X!zRMDD1-A$1JCnH*V5YPZ7%Wr-eNFRZys2Ui zY@49bW^S%rsM2q=A5u7zCy7ZF$Ui0UIMNOBT|!kkL{EagCj8XDumT(FY!s;I*iIga zk?MKXcz}$yr1#{hNna#=r&sY>AJ+pSsWZ!Qaz{jJOlK+3nKm#vw49<`5j%-dZypD~ zWcQ&=OV84H%nczmb=&K&vT}w$pO1>F1*#Pw#%|^__t0Y+n1`%MNIA!&RR`}jrTFzC zQ9>yFFm_aYk^zzZ+vPN>ui6)iKV?4&{fNnapdt72#ml1^BwjraEtB;k;WA7jRkM%I zBRS$BB$~1!i0xnGD4$*IDx38X)0ns-9&^fyJ`fByMz|V#1jW(KdSz;g-&A`wJQa(m}i*e#-BL9&kus($a~je(xKr10zqGl^KK=PDe|RUd@k}l)m@7P9onZ-&(Onou!K&gP(S0OC$#x;(h zCZpn-jnY1*3*0Mu;yNN>?&J`tL_3Q6oreXJM(K#<@moZSRN|y4UPTi zQG$I`9@Gd1A8OL{XG?n151$Glk!5qL^4LhGug+l6%f=UJjlE>J*nM$H?=sX0jnEH! z(gXKW)kvy~yQTotAM^x2@D?Jt|~Nl)7~F#}X2sIajFlIgZh(^{ZXI?I9t@6H8Z8 zcUoN+QqPfsko$)9qUDK-PZN9K3gO|g912=8MHJwA3BNAAgNN^|`ebP!u3gtz++*1= zg4~og6XQWK{WXM79BSG<>La5Jr3%Zp^K=>TOm5L#1Y(YjU&%_wt^Y`B`F$lH0(*8gXv|=(3I2raWA*U;SiX(&xP|b z#HjPeFQp$8QVoV6!4OZ3Q7O4>|euK$Oq88#Wp(2QjN2pl#@3f1y zneii;MNv1=$BTRIMw#CxVW77CKkU5)RMh>pK0fpiLw9$_&@DrEgOn&Kjev-VigdR$ zigd@2($Za0f}+wQBCUdizwdzh`kp@bp7($5x&J$BFV@$Y(dBaad_H?W``OR#e1_?E zo%_Rd(B4kRcxxA-9E^Hwi5Z{bWYEPUExc|pJ9NFa%IOh!B`+?n0FI`HCoYIeft*cB zC!OtKa95r=49ayx0{2Dcu(nt+?w9E=r)Os9=DP3S%hY7+R-Q5P0d)ccyn;dzf9Q{* zR{+NLW}r@QN5Klr!gGWLpj@M%#bC`sx1sJtwm#~{qleU7y?YGsd7<2=A}wn%IDz5e5^zJ z-e+q9%v*j5mVpvM1XoZDvI#$V7{ZkW8D%kC`u$u!9ui%n4hBPEIbcTV{z{3}+(lx$ zxZ(f?tuF=gdaS&7H$dpGw)T3WWO;I_6p2;~F2^~$sK;hw5~{Mx4mKUQ(hJU+EFHiV zOM3cwE`y816L%V#oIlvCrJiA~zDXig^p>?J>XetJFXsb0j!U&9*yoTt z+Zd-w$rbS8`m9@$_g0bCh2`K|WL3~n8DyACbRzTTD4;Lw1@iQl(chm9(2+zR@lQ0O z>d}bjTQVD##6^9KzUT~kuUNd`Ig;=&LymlbftS^jGvTqRNjUz}t7F}d>W>~L!5B9q zFM(gw&I~@JUs%GxlplqYCYwA3SGT1dcJST9cV!LI5hPKJ>?EQM$o1JDbIgvsvE?=n zI~f-a_TIyKV(va77btv<;IZpAIT8NsN7 zwe-gH5$sp2G4I>WXdvA(*!>uh30m80VHfLnj|@etw&Fa@rHsdyTO=HO%rzW%wQHw^w(w%JQNHalFy(ns)PQphz>!SPzwRHqN44ZL5le1ksilku20TPNf zZhuUJ22qld1?pQhuU_v|lqJh6GuOd+a0-={2s`m(CpvgcZ>gHho#>I#+VhDh3?7(u zlh^0c1_55J@=a&BRXZU}s!Mw@`XA7(z~amsyncrh#U~v&v85b^bog#@EUv`V7N|Z`@n|-j#Z87h`s&q@;K{~Mw7F>tHdcV|MuGEob zhEd9yq9ejRRXe{5CI5_uspseu=LJK)q~aWU69k#{ooyBJ`R2+XWiGj7W=1%XouWm& z1XfReN}qVvuAiI3?|jRoiSGcm%RDbz=j6b@6(5mSf&Q)(t{OyG9UcC0U+Bd3Qfn%h zF`Thw8DDe;>{2H_mwfG}7r1)Q?S3_Dn=IH!$4|2xRkaR1<`eESw)=Z%tj}|lC6`U0 z=*Gw$Ky`9gk`?_Wh~acs^kcirs~+DQC@MQ3A-O;=3o^>HICfW*yVZ7Jw|6vb!rsF@ zP+TK(I#!r6Gqd_+K*Lk@WoDHnVQ1R$JE$E_Es0K>bxs?>VAA$Wp(*~sP$YdlFn*jj zjTIR&p|F6L?HD6_dz?vPA!(uoYV0z$tAS7yD}Jz!t3r{rV*=_f$lBc=uPol!dkv4- z$mR^W2ogq*@g6x$i9XB+7ABYtR$HLTutj|zh#xOxBd}(bN)Q$&h$=fl<Nl4Sek1FG#cvg9i=VmA)@F!|F#_!nH?pLR*emjiWAxFKmp1Jivz2m?s)(XiE zt~-bd#<#%hu|m2mMoO!1xuNL%`att>A^4`B#`{maJqnl2L-aE7G3D`jf^^WHPMjIM zNRT+Rx5A8kxR+mLB`_rL-rQIKlql6@hDNad;y;U7>qAKii=k_4|S8eNd`LpI8Fo#JS1P<`&DAA)Oc+y?d%GV$QGO1^?I~wjIE5z}XR(5Ot|}D0%fuZDwF$w&oQ7Jl zc<Ng`|kxg-YTsNZmb>tRupG$&7@VjzPhJLN(yTa)2_7f@JSU5rZ$?yl?VSLGt~$ zZK59rngQBP9SG`s1<3%lD^pxg;P;C<=>57G>=j_T_~@&kOSsG!Uk*i-I8bj|B^H#$Zyl36k=51P*cwg z@)7XU4v-+)<)^z0#h9Zf^ z{k35NLG{0 z;c)o>e|0pXAntzT8G!#MJ{OoF#Abi}g@T2GCyhsQn}(y1gRh;BAK>x+c*Vd^KJf29 z{3XSJa1&y7NvuRnB2z*-?l-xB`c-wHE2yih`+varb6`|gl+?ouo2v5Ks&hJOvb$=Z z4Ay0g)~8N9O_^#)o^DK@YD}GMN*`~^9B#_%YcA_)fp@pobv|qQ|HhUGXf1ARtZ#3B z+~42*^5x*`*Uu*>hX4Ty#5v&!aGrk>fM*I27c0mAG8g*o+Zp%?uxPx60p1>c-dao@ zrO?zxLtJkADo~=e#mDQ>b0iymDffC}62W3_*V01Fvf9u+*0GJI0!TuF; zfQuo)zX;^N@e%O-zxe6Jo50V%kJcZeA80#2Z!MIkn2$S?k1LUvBZ8O1kC)wxm)(h% z-I|x(jE`NPk6j(g2IFHD;bY_BW98su=iuk$6yW9o_RNX#3y2E}N(c)}iHb^#i_1t! z$;rql$jK=yDXFQcX=!Nz!--VUPH9%Y;CV!zYg^4?CtFx931|4b?yH2E~}}j z`@NZ1!!K517d~Quix{F`*VWzA-P7CC+t=IM-`6+L*FV?~#J~^`1B1hZKn#rljk}SN zb2G8$fR7kpA_h2!&CVg3|G&2lTU=UPS_YiMmX=ol^RVTWRUiNhv6a;|AOI&Zz)Ng( z?cGJJ17>1?lNiEAY-jry53&7&PY0hq|K3LIcRpel7`~7Le3$tAkOKe`pKq#(47+sQ z=Nx{~bH=_{die?Z_A%>NXJnJjOJ>h0u5j5)cWpg$5lO^Uu_2sXgx-AbrR)1RY zy4ibwc)_N^@>9rW&01hH^hzqLrdzg<_JK zlF|>QWkV1GK@}&J3q84}rq+M@wDLcqB>L|(`~eF>zF=I|FJHa_ya@k0E`%2rgcrKOpQ@r?`<#fQV-aNe z%VNr+owqU}h-qc9=Zo?YK>N=b+_l&nOV5AxfE;N51(Hb?NDTNv$U z1efU{+;p6=HLbmZUG37mYp0oD{USO4?!i$0QF$sdP+R6mKF>Xd%Mna9{hEJ7 zmB1Pz*6;UQ!te?Sf&^?s{GW&Viv#DMNEm)=(%cU_c7kkN#cn(R1Tbz;zU1I{GJ$qdPl$znYE$YT-|xzWnqZ{b4%#T`v3+ z`{16RG9NTR=EJU|CIFy*P^SSuo0uDq#gVx|CtHz%Tr{F={dpF#Kd@i6Oe}u2{UN(x ziOqWTih2Nt9j)hF0{yVR_$?11`+YW@G&#V|+~j!??4E2euPtX+G3>UkotCYm;X-2> zlf&5uPAGM99uY=Do|xByRHE@xre;$;lX~iY-Z-*2cDZSR*NrtzF9B+kBs{0u+jg ziHnVmk4r&J%uh+FO~(?>&Rxk1?S%f9ZGQiNT;QK53%-m02Ly!L0L{OMXtB6hrldro zv{Z!5r3Z2_4@EgUWd(CJMSTq=buDF8Z50(AH8ovzbzKb&JuNMLK=G@qYpADp*}%Z~ z@?{gC0x&hbVs3u*+BFMnYwQ2*rNI9}Uh9Ww__twzUoUpVef|c7#>^!5i=0Oe$pBsA z+>HeFY$fL%eE!#;!DJ*rz< z%zBe-a^AARF`Fh+d2*hrNgkW3iH@?5(7JTvH=a9AmZH5U$dgOvei3uIloC~y55yB) zGs>%YC~W=81|=+Lh>MKpbpi4gVF#nL+k6|@B;iUizn?;jLfNk372VyXO0+8DNtL;r z)gkZ*gnYm3=4yb(9bb`;N7b6cWvXr0aU{KrUe>sz*p$`RyUtZUm|UUxQTfE_!2b&5 z5pLmt=MY>}G+$giT}m?Ml60V~jF$oe@>k9wukju7s;UUo|A0IK@A~>ihK9yQMy4hv zfccR5wR4s3|3UtLf{{3InP1HK08(ARHvGaf{K7E&FS>>QZP_jY@?#(f^9R`4 zCHVt00FUg)VX>jaf{s%5yNun@^ekQn3^o+X>ur zAhH~$-SODaIILD4i@==5q;Z57=@v@+5(+&{EPfuSoXd-&+~cSpq^w-cq>}G!Qi+y* z>Hb{2ImndEF1trB5_}O*&IX(D!5(M~41)yyL{CxuaLjwH6|7`pWZ!8M{HU$6~JFp`F!R!Hv`uS>r zi=zC`rTIT|^FMz;V7wg!f$jgmxDeDft1}ei+i9SEyRv*3`F)i~4RH%SQCMtho9oXR z`omC_8Ow}!mInf;g?qXCtMdm^1Pvz?*7sI4($Jkqqh1IuYiFSblU^|*UV0v_N|NbB zDZpTmkKU!ZOQC0_d7HK{>^0UN`|tzq*Jum2&!>kHq57^0ALMz2urGBk-X9_;(L(XM zuVcwN%cGUXbW00!0pApjZuaxn1FnfO3+GGBDTZmY)s0wIMXidd-UsWAs3^$at8k#z zrjLY-g#SOc3jcj>AaGHXLp%6+>!Cbld>jcptoOK?961>-bI>ZYQ%kT>L0Ks|St*!V zDCk+pX;{dqSjZ_^NXeOqNf>}2A!Q^ZXC|j$`CU-5P*Ac`Qn69f0B08$BO@;xyC65W zC_lfHh^U-|grc;xiVRF$R#pQDIXTTg4|#b_d3mir4+RBnAQTmKl$3N-RP@x;^ffdL zwY7l(9@ER0&CSfLEGz)_AE5kQ-Q92Ax^){E?gJ+J{)j2QzstP={pX5Gpy>>h+;z2e zz@86)Xakmev_E?WaBSV3UA^7i-@(}1cR{KR_x1lnan8Ms{6fD0&wne<$+^)%fR-B? z8y*=S8GSwm5OU8EY~1YJt2b|eJs<#yzXtI1z;(R`(DI*vr5;B=#&G`}um8|H2v8@2 zvSG~tsAU6nUgDg5*i4#VbZQn0{w4RSJ#6PRvYArN}^U!NMBI$(hN+*Lt2?|1d)NJ$U}wP5DQ>|6jR% z0h1QN9zmfFA>kHbk$Mra3NguCN$E6c*=SkC2a0O0YTB0CdS-h6xt5;4-oF2B)0GRQ z2tp_VhgSo*tv=t>^J{;tzPcC2%tU(VKP(wEUHuE zVBa(Bxc0a|$*`+eI^&r&OSr=XR@ENzn71h$B8uug=xCnFzKxuh#BI{rxteS_Pubv? z)Ov}_oo(nwmpGTsXbJb2g-1JqCjhS6@YT zjuw0xyy=hx!e7L#x@^HW86@0wy$*2hyV`Sgj!;M$HZ0f`$3%7A_?Cm!K*qEZYr6Qs z)R=|lO|3_iwHwdV&7W16`G`yd0}H>A;^m-^pfC`_zm*if=z9Ih;qlj6Vdo>SqN4Q@ z;+0YoMKV&^veFsymy#4=vC6U$s&c{V@_rf$ceNC6>nM5XD!b|_UDs2*s;6M0D{r7H zr>!fep(CrRb4fu<8m1v7qaiJ$DI=>buc)V>q_3!KpsZ@Bs&1sNX{@DVrmJtRr*Cd> z`I?c5mFX2*^Q(3iR!%myu6FkBj!vG=E?%xTyl=SsxO?37@Vs~P)_u=gzMftWZrujL z?;^Zz`+Ir+#R%~74!8}(o!`RyPJp*hz#X5!J9h(p?grky7kKY}(0$)v-v_}D{6hTv zLjnRq1B1eXg2O{XBf`QXBO;=sqGDoVfzkSe|Gu>npa%oAV1N+p;zq8kdwP!MrpCsW zrl!{B=C+oWXDu!5t*sqxZJj_od)9Rx-Rd1p8mIkn7i0*iQqEU+-xI%Fh5&oOs=F zD8&rrVyOQ6BwYMbvL(FD;9?SvE_bDdtcSKAF$ot$zWVkVJD2s~qk*bb^>knoju^bZ znhMno*rHaewH{+H(NIhiu$`!LQp{DewcodIbyqKBP8&3IG^F4&SIV}-z5b#`a-?K+ zfVA8!-LPk{^{Ad#?V-SMIuW@xePz8D%8h$HELcnl+-O_{{lP|3vT}6k<{ER^$+pO$ znyw9vduAzkCW@+TakVyM{^n{7*n&pTMPORh$ADWh(aiETL2<^Hth3?9KzIaUVxsbjjt&hyXpo@~V#5X+9kA*Dhr zc+CeJWF=n4d_>9YX5<32zDMuB(D)~nr;Pi8a|#v$@I=_jZ%q_?Wd#*~LVp=dt_7a) zrS`H<38qVCXSBs}C0`7Wbm?DmWgf);!QP31xHCb3C?3Rx(A#l=Ks@I^SwTQY9#{?d z`xhoFCb=y+YZfbSD=)Mk`X`6PAN0$AT)2Z^=zn(OemL|9H=gV5iqG|SfIW}DtfHHu znz@>`w)X$&?Epi!9H8j`mk3c?fR_BfU=85h%tvGa9y_xR=B$*cX7`Gb=;2d8g8 zoi2VpUH<&_-QnTJ(dVtNpLV}~IygS~eEjL?81hr=;pH4wq9t!6;M&oUIqd#%?- zT;E0(n0`CA=NWha`*ze#U{Excqjcvg=FZw1o%`Q>UsG__zNNZ9k8D59aqyO*>~>s9 z?Pt7sChG0XIL+JKuZtgQr*1H%^K2Q`vqf)6H$2UodFF@oU{gKyhEkp?6>Cgb>aJyL zB$<*g`4qH!AkklMYB+x1cK8WJ;HcEgn|70!x=*fNNn}}?;k(B6b1flI`xCnaShBBCcGpvA+Z#l>YHAfN~8|BF(emX?!|k%x_4fQws%4=Mo_mJ^gv6}hA% z4%3yE)%mr;mzUL)hiS^oXe!8P$pZn?l9&Bn>Yvy4+COT0gP*m%knT8Ap~EBc8ZM9QsEARB&i05uC44%R}I3l+sjWfGDN>=ma+9r%kVk8xxa$xG$eCV ziDmD^BM`T|paQEYUM|c+h)1;BJzOO&rs08k!y5}0+X&Grw9{;sA}<%STDccmCT0(} zWSXtMy)Q2orT?Dz3xl}hLH!^iM9=&m#>pR1xBvY=^Sll~Kor`^&-)ZX!g1&Du}AQ* z+~Q)g;iNa@U{YqMkz}Ld|BZ*Epk*ef{!YdHicf%wBPByHb40}SM1+V3GBN}?2SAjH z3g{$oGBE+NS|J`@aRC89DOEuIIZ7f6~V))YncH&oc?7CGc!v| zpSzdwW+$ zXAh9McV9@{`UZOk0DapZ4bjoTL4b-I8yX%T83D9$6XSmd(Z#oKfW5rGLKKk20K0h4 zH}P(6{`h9aCBZlRz7ZG&F~VGRumQ zXOG3PCrW1v>@(6~@-tavJ%$kRa$I2Z0`W`IOe4tI{6L;#v}Ens>+q6Wjv4GY*$zi+ zyiRj@sM}$s9r=q>f$OygyO$p>%rxs^CZiB4YI9#AQ+>I-Kl(bw&@KNgG8m)SHdIFY zhy|0}23X7rBaO0EP+O<`wV1yT>IKn*$U&h*B&_GbMobC>I|&&gNGUi-DLE z7@&eo(t^w;0_;(IJQYwte~$1p{)2fu0K`8p*}wDfGpGJDg_~HBn8XtaK-3Bgf&Fy7 zR5#PoG|<)3*4G9kFM9v3Ej)ld9&qIXUOR#Q0YL$QA%Q`mLFW~Fa7aW55TTKwVNpPY zg+~Js9uX4}850>98x<8B9UT`F6OX9n;}Ir#f3Qz7uv+`+`DX2=#-`?`rk3XB)|QsG zmeyyjZS8Gs9RLLn1aJT#&VY_?1Rak!33|G_dwY5iE4G0J+e3hj)$kv(T^s0`0Z;}S zW&mGzLDpTUU4Xj%XX$>?6bF9(gz~QsKZ|*GCoHn7=f%9+LZW3|gU}-t-4Opf+xRWH zhuhbBf<~{ST>a6Hmkl+bKjwvNX-sb!{~xc#P7lm=q)O90bwcToJFzSGm1R zdJx4d#Go6ZWXp~}H##3spml>cO2Uv+tz51HmpU9qkK%8x9PzQ}R&G@M8fpa*c#})M zUcg>g7JvP9e~z((S01wSV_K94R3(pRbqD$VyDFA&t~_+tP-+*NBuQ5KC>8;b?oN6u(QnG~R>#Gc5;n?{|Uoff#W<{2TB53tsO}{sI?o z0zUzEPq0=*Fk6g2Tpa2t!D}VKp()BDEldv;pkd>qq~{^0<|3uwBq8S@CSxZeWg{YC zBP3@18v%TQgp7lNikpg-kA|L~j!}?-S(u4cgpEUjlSi7DUsh09QAA8xOhQ#s8ejvp zU~)S0iUvw5msQk_)iuqubj)@2Eewrpj7_hbnAw?L`8DiKuY3Ma&q=^cDe21avQ-Oy4~@(dH0r=@0~k- z_wEM*1Rrop04GBP;!KE(ijI$tPKb#~h>3j|8ICs=kc`V>C;w3G_*D}v>~Fgtr5{pf7XO(sJAyaceJ#0w6t~tJ@wW$fEENu zz`m|-faV+O?+0|S-a`MI0^z6)wm$P&8FJHc%N95kX)C`b# zzXST_A3gx{Fu+xgkjLyJT5bsC8_+ce8gD?HTj3%OgY$FXSLpwv&)@|>_fD+hh(l%l z?F@3IUuS{bwr-Z$S%sjN$ZNy5J=NIVG9j9d#Ona;v8UVrlczhXe%5fbJ}i0PE1x|o_gjJz&%ormQuMc4`g~3u8p9h@eJ&bG zBqV8cp;IjG5eXXA?!lR5<%7_bR9nm>TT4l3UJ=(@LSI1>er6m+%c)(OqEU=Kxgb(( zR4hRq)`85O_C$1+S60xG2-6LLn2-7Wo|e>|j1bml1#S552x`8Lpz|Q>9S&5j>P9uo zhA952CdVJ*Sim;d2LL_Me*ozD(?p^EV!W>6oF<~Iio%Sdg0$RFDkdIs8ZH3t{|MHB zV*vOXa4-PhC!^q^pyv4%^vrBxY@8BY0O+AGenELb5k(Pk6>&*50Q55FpjS~dR#i6v zK(DE7uC04j&%p98;r>_9+h2hGs)Z8*^ftc(z1jZKb^PfbkBOisO+o|$_w`)cmx#gxm^($Xpb{T~L{2yq;M{&UF; z0{uYxeu4fA=>JI`{|}-bJPpzZ6B|b$K#$IOg*^_Z#?+Zm;L&;)O*7jjvzCE9vt?g2 zj*Ktrz;mWdnaK*vN%DzhHq8eup8i2RXzKoq(gnvM`RZ88qBjdtmk7)oxMZbSnI#O~ zcgAWHx|(bVDfSZ6b+HJgK-2ULY%}StL_Mtg1O|pF9QC}c`uIl(1tvZA-#^ne>Smcz z-&@Xs8mV4Qv=7sH9V{h`)#>TIz$QgmDLXeKhL&o_&2wu};(3B)NLck1>-So^L@uF% zvit`cR5hwsv7$>KRp_Pi+TccCCjY^zgAhoU20cX128ALL?GZrO_Px6P_4((U7Y~2! zqrdh(@VkEfNN`YExL;MYM_;T9aD=)p+3qUUc1ybT-ldiRndVSfQ>1KNtXx%se0idL zak6rLmTGQ}N=Al4e568Xu)OaBx!ZT-+-}M`y2#qt!>(G(nOv38H$xTAVOG3?0LL*E?JRHM@{^`wuJ9x(fj5C-d23K?6_|@a67s1J9u8Y=A&WqK;Jm@s%fH&`C}iOya4-> zNcWnDUX{rY$}=KLGvf-gQVa95@{3DyD(drUpXD|V=C)7g^)FSAz3!Ts9iD&jVqtP= zab)9d-_}Cc-ctA8%HZC+=X)RK_qNvdb~g9-cFrZBi2vtb0F%h$gyJM;K%m>6h|07+DC8o|+PEmL@t_ zM8?w1m<-oaJn9Owqj!l&x>Ylbo3Uy*dXnRjwi|OS$$Pi%(}&p_r?wscP(gSknq=_3l!IGGrOQpV?j!^OU88+6tjS_I)-E=y$GRXGou^i0#|76s#v~- z4L0^t-<;%mF&;$BYqaPA^zz;W-L_q)^qx<$UkYb0=ufy^5geMx=wgwSN-s$1sf?>R zS8pijZXw)f;5nSt@AfX60pBkyiEM!ybWeAlS_qd+**dD-KZ%_{#Eu$dj69yrW-eFs zh>gHUJUhs=N$GkzXZ`!N47bkr1M)Zbf~Q>6IXvFNqNjj=TiX?O`_S7aIFqNK{$JwB9Mi zbJ{iC!<4NMC7g>Fw356LUb3G4VXJV%*O9kq8~6A_>)~4I4Ykh!8{_%V!NXp9By58@ zD}NEL^;l)}!%b^dq@sSyhhO^*n9?#uulUDsc)2z&H@)KRU-6kxZDq^Qs2nILpcVk} zK5X6|7JA{lukctZu|_t9F&Xu44@dQz%ZC0{7&Y~pt5dlKp6=Id)vykx9|$FU39e2Y zknNc^AuvgL2;Jt^VdH)1;x%iTald}x`qO*WFK-^=l_ggNnGugXOyuIG| zVelRB~H0p7=ZyjlCg_4s4MyNctjmM>e!+wB;9Cp+C_H%@l@*(y)=hDEne_Q#d! zB$=o5weguJ>?-e%#48}fJ}o@>CjI$U%8fH^yJ!(Y=6m35jKk>{1PXLB`!UHTPaKF} zh94`x{bt&4^2l^6rR~HYl~4xMiN67ok-$L$OBc~?oRJYA$FTT0@Mqam=5$Qx=rE&o zFDT3=v_YDfgOFtzu=tAFNCKFH#$~mTFp=d?rsD#iq-A637qwwit~@xCKB31}E$U)e zg9o#;Fr0ZCE5vVRV@QFKQHqsA>36a)?!_&<4_e2^_HYlPpy9O-bzdYy5UDm7DTdpVJe%J7*hCh zG_<;k3cC!1vED%&o$M+S$yEU~SMs#``&Grab{JJxnAk`#)u=O}e)+=|j64l}MooIj zGFPl=m%+-_weF!;m>KEkQq?J5?j<^juh7UO3@BX^h>(Ua;quN6Pkqu$sytw3SPoNm zX50&N(8#A%JQ}eM*?%;T$^yMJpe5X-7gkHW!qYd=bH`&pedz39k=r^|n{LJ_@gl!Ue7G`%{7(u_ro-sSs0}G*M-^EHKjPGGH7_-p_6Rrl0*z^hud5qHOs5JN~3QYPa`1^W|AK)a}xz zf@gG7Wl`TLKbs?nxP(k7Htv7t5|H zxwY`>(nWNNeDm(wxTP zWuq|M8J>s}Ivji)Wnc+hl3WwDooWUI2tieIb~V?^rI%el?I zL~6^A&JFlqs*W<5S0%SIEvNsyXRW@Wr@n1CSyr)~nww#<-@DU1IK5jaPrY>JL!4zt z;=;|g7bdgd=NqFXa_qK)q3rBF`)H^S^>iF~Y~S9EkY=I+TdJzit~nX=YiLdMAoyLRKC(db@s^T{eS zwsF`_Yd`(f$(q<$pl+l9%$zhwMy2Uonztj5C^y+lWd#w4* zm(ee6$EVwVcr6PU+J~J~XFFlqElXr$hrN<#yK%8CD{R_FgJx%Ysbei`qGLy+chB~- z@LJcEwZBeeoE;Qtw{94XeVu7O`vi||-L%s_e);O`bHiBc*6p`D-a7vH3u~tX_wi8W zz;tVEvC6x#+a7P9+8hmEYuu+oK3&hf_Z7_HyHoyb%ze|2?r?R@x2JGS{$uF16GFBJ z>L3{AelFe0#%)aI+HYsEeKNr@MZTx}zMW@}pur$FFbw|SB<0d;WY8NF5De~zt>Q;! z1ba=0X}E)drQ-kLo!{~owNnQFpmtQGb$_xjeajHzzUNT`Mu z_dqbP76=3wB))qQfJUYyV*v)mp^6s;qP~!gSwNN40n4%nA(Lrv7X@K_kyTv}QtvmK zW)0T1H@z$tken2ZN%l)AV+fQo$H>EfUdsG%%#rMtkZG5eYlEpYC|!XY1m;<$6j+xQ zTeg*5oi4fhy8P-&#g&c9D;pJN@5@cr%Z%QY7_1fPt`%yp6=2b_P!y^VWR?(Q-e6>bU{oQ0JpOz1e4c!Q zF5*J=a+hpWR4kQrt)%rWp<0&A8WyzbrsPU`6!NOnV)FF-axCl$Y)o=2j572zV!(6& z1vMQREg2CF5djq*E*S)y2paRHi236Mw17}hL0||7hYXp736+W)jaCqY zP8@?y227`fO{a%LXN*H{0j6=rpuK}Z?~lO}hAkG4FPlW7`Itm6hx&3JgHb-GQGujk zrLw_O9jy*CxltF91yATZPqvL)M4Pv;wmi|d>@l`XFt=nOTl|RO~G@+%0s%Eo`zaJi09cu5En5Z7iuB6qRjM?QL|!E%d9KsLtQ5W!I+4+J$!ht@R>SFj^XXC7>F1G?k1vm3zCWJY{yMvJxU}u1NSXD7>NXG`av{;!YEW{yrLKc5VJ`8u$7+`V($zID>{@wEEGS=qa@qLs74<+FmN z)5675K$du3%3K)q6Wixy%Ufdu<9+A5ett3N|D}`}NXR4bU+EVPnyvm}(2po(0E7OI zM}!6Oj!O2pKMeZS9;?-D^yT0n(HlC}mAw&MEhCW>G9$Ihqq(To_+fULN7`aMkQ2<6Gmn&qIW|lo%EB35Tk$s zAoL9j!Q|DKqlKr078D3@Nfs4Qro|Q%geeM&a_pz+(X8b0L{O~=6tfzZqQ&%PKw%Ja z>k;7@^2v;7aZ-mo%bpgMXki}Lb(krH;Lb{-!Gxh^RIkun4vPHc_p2$c3?%uL*+u~Ty5+PaE;lEAks2~(1vazmq zpHjCQWy(N48bydOel_=z7o}b#KjCgRkwW`yPGM0&gziJz&ugH}vyxuUQaMf1Wf)4s zC45L(&F2j+Ssudv50%}dPMcNztfiaP!y+FxYsQthKGsfMcKTR1d%g5y{k+$Qk53mu zxV9QrlAX31*9%Iwnl|e{Y&Gxna&5O9%s6c$N}27plh1eQFfCB8^htu4iJ;^;;2sU^ z3gamVcGc#zCaT6%mmauu_Q0+ClJq`^16Mu^qvPy)y$0k~o}i9^#|qPwppe^htn0)E zNTEGVw;m#sVHzFClAxrNnF#2+&1+(R<6hOk6(q|W=DsIg9)~XajulA;P0>lM0gw4lo%w}0Kt75zN_vlrL&*M=dbVmG^`P+8;?JCrBf5G5XT20>Kvo6N5vsQP}-LwG>YE@W;(mFG$mXwqHCWVY)_cp&?2snAPM zjNt|W`K$_`cRa8y@%5aC6(VctH{0&6=aPBeS*M&X0s zhC_Ul`X=@Vp{N*a*{Z+}F;E{YTl~F;r0>m7FYIL83BR;h^l-kz&qE>?diCMW z7b$dXkarpJfL{Qmm|Z)m+oAQ!NX_YVHVuK!6G|J)c8mo}w97?3o%D9?lli!` zF&Px?g!R$*21um%sb&}i;9%j|0597Ga!?!+n!v&$?OA_ZK>N$8IvW*Bf5IRT3EU13 zQ(zkxADoU_6c+)uD8CWg=tmg=jZEzhvi(Yrffj)d!g^FmAx^(IxZ;NQ`1K<7pqu=q zeue-Esa$l6_CV<-Srk2Q0?>+gFMd;h6y+=fjrvfRBrR*`ovdgdj{aEzPo2nT(pxci z=B?=-vnorxtU?EkGtn`L#fdeQ#YEnd?Miqa^uSX-3C+ot!pmXl!^eKFCA9_v3YwAv3*pET^I#arX9*`@}0KhWhA4hw(!Ky-P^~W>jQr zez7i(EG%A!$#P6&<8Z9I(G!Cd&p`Cq*STd=M9%_|$kyQ!>T+6fI$SFZbdAyE%-j^- zDi}gu{G#ro+0h(sfxNH%VgsreXCiH3r#%wa8C&vy%*;a zF%hy+caGH-yEb3Jr1J{&9rZ$oZW)hev`Hk=6c%AWhK{9$eIzEP!fv0ymJlnkN|#Jf zV-%}Ff`g-E?;`yd{TWLVkh*kOU(DB-ya3@FC=?&s6FSB^>x9ci#K=K=X|4Wo3!xZy zRs@})2A2l)QC!_XTx*Rl0(UEEJy6;O>P_Ohd6P4sMWv{=P{9^Vn;YBSy%78Ox^jwc z3bmqj!7YA#dnp)}XiXWcNzMN;7ITUI>6xSP!>YzRgbH=3Jmkw04#vHoYHOssoCVl9 z@on8KNne(+gLE3BScc_n1@7a#X(8{Y%F}dx_HhGNTUt*vzDSpPpIJQlr2*j-5-tDk zTf>ac`j)IrnAH|al&yn?b2)WXZ_xPk(v)IqDEXeHj(minwwTiG1U9WebMRD~qXrCl zQ;p4)aK*Ur_uJ%AZh-x%-PUkWMC%=6PvJdsWfm=t<<*&r*T*lpVR#G4gXMX^n8Vj` zIt_2&*29z>^);@+GmYpsNPuya-eAZ}(uNd>sdgQ@!Rt3XJ*lnjvzLd2unaVNwrA17 zI-;%Xj3LyM(W*N7$t#{Vw>zIk`=8Anh=$&YV`?#`;nVNI@x!iVh*}vhxD-_UPWg<- z${bRApX$|h?hN5FXVyn<;mra{T(OnlQ4Rr{aTOS6E}92(*wq_45&nr;lOBQoG~oId zd`>uQ_dHhND3Tyi)x+aq> zyBapq?Kh-@YH!NZvG>g8D?X)`eURm`S9dl=X{Q<)O-;c=S)-WpwAFX(5l1z__At0b zN+eICQ>@x#J++K-qdoNfXtPiaNo~QY?PG@3=MaKKtJk9K@{%)NJ48$n7t&s3WRRVajUio}*;LVa(3FKzhLA$)-7r>0)-;V6sPUeOLF&8n9ch{6A>y;Zi zZc&ExAKiu4=6o#&k&_>u^+wHaw|x-@`F*MzyT85f3m=2}QXar!mu^~~eta@Z+z)MX zU05R5vj`kzaEoGahST#Hpb?LzAwIlQ_lswGOCQKnXEUY0cmOV_fj+iV<8F>-XH}2wnNatfr5a=C}pmOiV zVfX{%uz2!_2(gF=Z~O=3VLmDm3E=RcLn2xx1^Xsyy*+F2@i6)wIA%vIGI};BA&o} zCyo~|mf|>zEw#sIHHnS~$Mc0JjO)b@%|>jc#-FUmQVv8P9LCcYCoqObQBfp*D|$#Q z{!oa*ZJ#_^4D+Gd`-h50@vL)+!C?`6CP`XH+)^A5ja8G>O%h-ZNdw+-DsxFIheL#u&r*QO7FLF)GQvcM=K?lO2yDg2YoiO;WJJW6U_Nhc_mklBA$gq|JrJ zCfrGi!AuQJOL)Q_V>^%;EF(lVMFGg{^{4i_PQFiT=fNGr^Tvd`F@GHjQV(0&5xyb}GQ1f`Q*R zVt?Qu?i|nLj(@U4@ub@dM+<~*NY6m93u)EC#u>!C#SV#tgHPHa0dQ~~JtP>K{dgSr zq&PdZ9X8_tj`YLQRCtu%jvc0hJ)MOeCl8^L$d1gydYgW4Y3jQ=JMJH!pMBujwF zG)GfGy2S$gWC#0WW3Fg=E=tEE{w8p$4&E~u_^A#!-vZL)29C7AI@p19jbnUk#}3`W z+{wzO-gu1ql1tkSszpyQ-HuVp1mTjvCyWq&0|m$F7f#h+Ki1J|#nQU3FLfY6^pEa-#fmirf5R^dG%eb1&nkcxHH|+` z@+nR;#qY|(T&=}sV8Ka&gY)*W^Wt#l7ck%!1@JgrXnG-WdO@$1u?0Ordpm!l<0Bu( z?DnQ7()&-g=^-ImSD~hLVS;4ngd#JPPnm*iLAisg*snRt z1)9M2tJv0TIFT0o2NI%JBZ?k1l?9BKb((S;xMk6apo;z#{NrF1IzJ@S@o`?9%oolx{Fw!e5`cAr zS9YYA`+Ti@W`*OFo<+a_5t6{4HmwNp6DA!r@fn1Va~3jBK~5#ANVv*79V(EsA!rPR zjfX`y(}hntvtK9IPD<3FSC!w>$+>uR*c)){p#sP=IOaZnrspxFV*%5o_X&!7A;B`l*8=Ov8uGLq(%hc^)+>~l zsu5Km^3C&$tQvWFb5C10)?A)YV>$>Yn*YttzDycVZkvC_^X)8+7j& zyY@@{a6mDUn%p8sF75_)=mO@a9gLcHkY+#3Z*XiPPOJlo>`!M|c`1Ha!Cb8wAPrK9 z?8(dikq>5-PHV6Qzjrg{ zw{h$=H*A4HJhCQmp*LC`~#4Vh5uVc7LN4eyz=$^w^UVa1mZ ztAfAy6_r{*MAQmW(y`%wEsqv%{y+BKIB?hfhh25IS*5|wVGJER*4 z>F$y)=@tP&LXZ$A_lvHz_S)y{eay;y`uEVqblE(kXuWTFfNwV?bNaWF+>)}Z3xdR_6O*%}iRT;8CoFUROJ91han!;)hiz0f&tCo9Y6Y`ZqlL z4LHDox21J=NOCB%8JQKj6%92^dG{_Toodxv1kFK0Xv-yJZp{#3al47ZKM2E=N2MlS zsS{Zt&q69AVT!zYT@{lNTb4n0(}C!KsdqbE=HJ<*%+ezA+9^FQM?ZARZxzzJIu2Qj zi(-gsM_DVn3b)NpZvU~m_+xEzjpdENdSO~`xPQUCKa#+F7K{bT3-TTTGn7u#EWCg$ zIVF)JlJ$u?l;_=WGHS>s24DpD_exn<$dTDJ5}UW<%%4W!22ANcD)<`tVa%D@k@n2^_VFaFsh$R8+*iE3IOHl~7bRg(OnY z$rQ7zFtMAYoX3JFpxTs|(JfA@h!Xk&t%_*#q#W&uLD8FB)WdeLE$UuK%`QY)G!NQt z=PGZ+w0i`BB2O3o_jlwmNM9hR2RZC(ok!OalcuJVz~#6pCuFoK zblFW%f(rXWCzA5Q$tWv2iBlu`6Z9hmPBvC#8=ABI%E68)gnM-4lP{1{BD-C|HF#7+ zWOTceD!g;5jcn5DW6&Eig6tiH+Nvp5bR8FzxlI^Z7Z{YO#-lN$EBOX4v^I}Ou(o5P zj2OBW5wcvzG4%R5F4OWMYTFVcaxl}3iC9k`d3h}nvY$Vg{^T5GUh z;;Hx@vF}|NI#Tx!#Q7=sRB|K*WTYPQf=hoS!qyqs_%|nnOIQYAJuJx16Uegj-Ei!8 z2Dg1{a&$RzbdYN(u>cbYnN%uGZA&r~g+w$M|17Wm6?_-UES>reaGyiuB@BVau3Q3* za*kBG#z%z|z^)-!{(L!KT4(rCu60dDk2wfD14F2_ua++zLn@u2b)ZqKMPnvg$<%N z_y(V0k#4=uKaLl0Z<}t}Re!365}GUXm3MxHYpdE4gO{)S<;Oiddbjx)`C#5CR1zZo zjmo(U`W^KQ9R5qnW$RQ(e!ev>4Bu|e;|gMaD4q~vwTZ`R!TM9wPQgp#zurM*ZN z3DZ(U&ce1z3|^B`9^JGt`we_5T|rh|juPJ15MIWu zyEe9pNC!2JcYT>ms;*}XHQ5j3o844wG>y49MJ@R-C9aL=S>;C7vJh$OrS^Rd6Vw|R zQrkJ~cO;6RDN1HlA6Kbonjy11J8rnNgG`-S)GhTmNZ=8WE5Op}T2yq^1n1PR0KY|e{6>GGBn zD~Je+p)z3|WDh=%tXkS8hKmoSfSj7eElf+=z)4K6cv4gxKgy@Ho{m+!HpBl>(@XBK z0wZjvMN#S6r-cS14ugfC#1?{JMB9he4FVx6%YC7g4N7L%4Hj3%KP8`OmP$UCK@wKB z!KaWSr-bx~z~Pz)?4C;R7Y6hP<+2A!Y{{|-r)5aYZAXf4$>z}3=dbqAt8V(vu)EN= z&!L;+x~Ye=Nj{PgE2?=-rbYFtkuF>pxgW32oYMX93iDesS||epAS-NZr75Z9B7~QW z$Pa2{>?#wW+jj3pIpr%Hq7z>iZjj?>gnSpFct!tpc81lp2V0{ivO`>|V1lBX@%Rjf zKAIfy2BsiDYhNOr0-g^9;h@5UGR4xqI;34zi)TGV_yK5*D>#GN9@ysaUyZ{@BVPdo&_z8d*n^bw}MN?AxiNah}kg zZYd`ws1aL>ok-*OhK8yPPqlTfkoHHKSu{l*8N$qqr_^CDGdvS5dM(J8`J;IJ)Wh}U zpfMWo<@ksT->^+<24fM2v)k5Y0HeRMr_+;kGaPZI;mO2)w?k~p9HnNPRHb@FpM)^? zb@)&$GXyaUjD^e~^`#>=o#e1whE1_0agY6Pn{O9Xjbmg4vtiTU(IzO#9p+v5>8r^ge=rBhms>uXQ;;%k)TbrrkXc2LTm*$2T^ z-p0l`dKdRdjVlJXW}#7A>WJs7+qj`ElO(JvvCr#X(_WcPtrcEXMy(ycjBZVPwB!bx z!tuo#uVo#U#%KQd+U4z>>Eg353>!jE&H|fS5$vl~vxzpYMKzMHs=j!2*uRxNvLIhS z4O$-FLJ=?ACK;~{;nq>-G3n2j%+w>AMV^_kvn;oDnGa>-jgQT}m3%t|B_6zLmjctd zO}rRvr{?2|2%)2K!TIEEPrrJBlq-Uwh14k>>>Kt$x*0#S{ZS+#e1DEo^lY;-qeXDO85Xf9)Ewu-IBs>H z6pKGt8|Rbl`*nPnWaFd-4`JRBMbtf31y>!ddaArwuJ`Pgh6bi{XHzfschW}AP)z){ z)o~LBBi|UNU8FR%eQI#_S0ph8J#Q*5%XwQ-kQsN|%9k{DT>V{endo$HIj+Nrr~E|m zP`%n^mj zl#d%3xdz$ZMN3PQW><5KRdS@n>9~+iv1zw`!6J#p!He|Hx0&#xypxO6MI(K$RHASA zXUx*vpjn_SUjTi++3}Unj%vAe=a&AwvJFn$8Zgpi} ze%UH%Kf8jwnAZHTxGK81?L31Gx!SnDhwlbqcR!-;hT`tNPlVqS>fAFF9gY%RYHRy$ z-?96()UdBBy;Xd~z9F+*6uwf};$3^^tk}(=_{YrZukWiB+^Uh8J5c*Yuc&%X--*F- zv;BD2c~&Q+`C0U`qNg!Rf~>yL+Ff`Vt5My8g}tur=sWAuY}-d6iS|D6!-DRe9SPb> z2(DBq9$ioa4RSTcDi2{+?-~&=U8Ts}=N>rfHrL$WA}LHZ*Ri%!eaI!r75sK&hwU39D_eixXrC}~bmNV?l;~I=rEr5*g%qP@ z2iHZXA(G^&MZffRPYY8cHg)g$@?)*&2AM1=!zii8(Tz&N1B!Qj%FKN;&?3q(>`t>1 zB<-DDJJLK#1FHRfYA}O8dj4!x{WsD;zFjC?>ol)il$<0E~%Gz+Z|PYXrSZ zfq-ZO3)+VRqsJy;#|FoN81#bR_(w`j;i$+*LQO|v*yY1FCL-yrEuSb&cN5kag z^~oc0lfv_*BC=ro^MyxayhnJ%lfu+SW12_9h-1V16RTarjc>!F9U>aoVO|@BTj~WO zxxpFPge5nF*!f4AvPOc`;6&2Gkf(CO;`}r3!aI)O2=GV3c z80q%__d6(+ezdWmr%} zAVWx>KLb69)2G}vKCzey$8ZMkr9h!8bfn&JvhhJOcP$o50JiUA811wo<}=KrS${$F zJc~Hu6!L)d%86jPP{Fj=Fc&y#7bR5g@Gq<6Pfr6*l)^ttML0+yoO7!Nn@)CI`?tV= z&W^&bgu%Ckh!;lT*K^@Vt196&lfm7pAz-!X_9&EKa6ARU984swExmL+L53~W%hI@6 z3G(uE5^r|m{v|5SZc^!>ycd*;-pg5;^4Lh6sfuY~W;K}x{O~2q@IvL7a_tdMO9S-e zLd#+NE&ZW5YZUwE{717UiTxE(Y69btXAE2vF6LALX%Sxrn+yZ-&v5XktAQm*3$oaR zC&W*0@q=TY*8qvb(bEUj5zKOmggb3&G*hcu;0N-Ct8>uI)(LrhuFqv5Ck-J_~98}1RC&ba%Iml@C1rk(L5!e(P7u1h7B^XndOU7FJYc@AJ*cR z4$s1#W9I=&Y0t^Pf~@cZxobiUK^lWcv#IiP(mY_&Y-n(rBG2&*$+3D{|Aa|0@wo?x z0i}A5v%yDUdWu9vJN*-coz)xv66NIz~~Q+ihY zW0-1;W|GltV!P%OtH}XmC44-czK#Wh>=@97}I&VY=MGL zrt*TqOT+>x>g$TaM8bQ^3(TS3w;}czSV2D)3AdVp_TGoXh%2>L3q-(pbaNC+H4H|a zB7N!|N!~D#I-p`FqC+4T6e$OX6y@*Eq8i-1tMcFA2Ylx7(IDLT}#%TkvxG^3$G&Vc^QQpM+{q140h8CBuMKj0gZ1Kz^= zS1W5Ky%TR&l7CA~_& zk7c=kAZ*~-WOmGQY;tMLvEKNl7MV)|a$Jy)_aww>5!yQ!ll)+jwqXC73@T z(i={|XKk+P_2)6e(FUX57^8-@X+fK?UTwpk`K5)9RfLh%GOJ08MT*8}D_spA(&%O4 zD2n1aXcUF1w3j*C%FD@@ikfaQrz1G}_KT&jX}8Q5dz%w73ApDHSh$y940CDN%L+~# z7CECC3Fx1=HT&z}gP*De`kJb`O@VHx!_ac;z@~w|a&XX8VTZ(Egx98^LFD^N(?XGD zD>*3r#VROPB-C%F_wyh0z2ASIjyn}zh7vW!l-Zh(+q_5FeDo5I`Wl`nh6BOc42cws zv0eqOVglmdis#tEe5pz<1BQhI!Fg`ti$KiNq|I@1;^=w7rN^5GN#+!+TS(r-2RxH zr$riz1&Du#nbZR1OqGMxj4Wp|yU3g)NB$A5DVYsOM`2eu$K;TvkA*ut`y7MZjAtGS zFE5h2vISu_L+z|10+q3<3$fBIP&UG$Uz1 zPQF&aviDRGPS_jHoIk*T9geqP({67opxcyWeF;_wjIMg!IbEchnj~udpBemzhPWe=Pk6#DMkKUNN2KF8X z6hmthtOu9kc@X3cN0k<4&Yzp^bRhB42IX|0Wz;-CG+cUpKRDbbOmsUz)RxS}UyGld z?xRiEx@GESr*Tk+DH0|WR}H5oJDfXvmP?f40FTE!?{{vm%m0hr3IuBfvrpfSssUKPi+Feg*fCv@Q?fndExwW z{e`>{gXkX(zFg5hjTm3RfFR~V7eF0fDZ%OT!za^Be(8vqRdLi1KdP?^S)_%xinAeG z>tUnbVo_fmNY@w zFL&!hz6{8Kw{TCNf&!;P4(B~JR2A2hmmEO+&cRb4xUh*}aDcve5`yY6;;Yk(1!u^& zlkY0p$LNmU=&ma|Ctz6%P&N3`2S)@O`Oi9M<+O!P{dPFioqaAtkhlzHj3!ZXKJV~x zl~O(c;PNVnF%}xqqVL^OSAcLc3!M=~+mH1F(I-FR9EOH( z3?WQ|ej%>IGu2C?d?5|*pX%rCmV5D9c^2Eng8&50kMGf3@4Wp^fO1J7Hc1ialh`{uk z&-vTC`77g?1#iAfzEmB4{!lLZz{I1=$guZMn;(r7pIsd7+69T8tgs0M_mSL*?w!LK z@sslfyt}dJ< zgRys$8{a$Of3(ZV+FsmE%l??t{W1Ua$AZ_74`DwRQ(p|8HokJC4AlgCa=cHz zhFw97uq!KCf0BA|J-NgO*})sf9v}=h&6FN~9)u6KzVxGQFKDVR&GpgY@N&q2YdtS&vXIhROL|>J{ z{kQ?fZACjauiN$oy0IiIntzS-Wix^S^#xIlWR%)Cla2C+Jn7>77eou6$f_T|d5KvM zSwO-CRTmXv^jg~IO@~SdH7K^y&oT$h1c&}$bRl8`KJ?7@LxV1ZNw^(__9*wK3C%83 z!jG~Z(@Kt(cs{N0-7Bn0_b&P?Rvs8#iTSdLtd6(bhjZn+@0^Zrx3JjjvYRU#PBjHV zGbSt!%~h$4pn32(vVm%bYCxZLc3W}OoIqfgT+z-Rd!CsR6DF!?^RVQ zU00vD^!>NboVl--LyheOn@p}lKPeYIU&gy*4fp7scN-V+Qt`akqDgehHRc^wn(0rN z;O%sQie;;{d92I`LZ6?qr-R49f#`-E6HE@>M{ zq*+tHS;P)HfI1!LZZ%4n44boS=NKY+e#a5{H3Vtn6;HC;QnogZWE5{V_@i<)2K2j# zx{d4J*O^B3i2I-?u~YkjBB7AxW|fzzs^y< zx#l_T;rigm#hyB>8&lXPAgn}@*6ks0*}b_F#bSn%pz1v1hrqe<;`ZbdxmVp; zLLZ)9-nq%qT^;ozutwm)Uh#I(Cp$-egPBf>9KqpqS{*$IMrqHrC}`qTi3(?nUp;-iwL-xa?9zyS@3`C3gQKQ7lV6 z{A1T6%o=|kcW_1oS0OBlw6yf(u9)QhMLxe zmd=Nc-k+W^oRKM(i8+OtC6k3UpOv+Qm93JEt%i-gft|gXoui$Dql<&1mxH69ZwaQH89R0SLr z0kYx0+{gJBC+T+z+MkSI?jEdQfQuLpcfVmkRxrO~3^+l|N+4z^#76)q?0@;ez{0}9 z#>U3M!NJAF#lyqH$HyliARr_pBqAarCMG5!At5CtB_ksvCnu+%prE9rq@tptrlzK$ zp`oRvrK6*xr>AFNU|?iqWMX1sW@ct#VPR!uWn*JwXJ_Z&;NaxsTYy=jRs?5D*j;6cQ2=78Vu}5fK#?6%!K^7Z;b1kdTy=eEj&ayu7@Qj*h9RDc~OX z;>8QV&@(PBE+r);BO@a_8zAhw$;-!1}ABqpPdy4`}_sPm8br;P5r^b4~t^!kPa`sRjOZS5^S@HQ<~1VBYi3P_=-k z2jHan@AY5*4FIfyUkk85`||>v4FN9{U;z*z02lVh0^a`mI=~kKKJ({q`Dd?zn?$o& zL~?)?>EAHnf0!a5F4ZQ+!)5)%g#XPH0l2!fyBI7e3RnmzfwF2NK5suY(iS|3Ywb5sv1S*XmZW4X_EGwjc)Q(LBN4%2m)5z}% zRgBgwYLX>o23v|l>PO-QQb|;o*JBYhEEU}MSoen~(cQ@o2g5I?^R_!Ib)O+iUT{)7n zxCrMQB;XRKb5L%%)K;uqjjjO)tMG7CR>zZQ)hFgWABUWh@Tq0UMdY+Z;nIzUZFtQ{ z$5wEt@%O+It8!2G6B=f1#WRf%EQI2EH^-BaOlc2E<2~~2S;MpU-x(#);LZynjY_5q z!P1?3G=Xbc-?WAcXI-1+&Fy=cWaX;170M*gDItsFIQMNj%e3#Y^ZQR#c8jz_@yL8A1__P)rG|h%cp3pdX|42@8)kWgp`&)B)DX_$Gj+TWmzs}= z>F=bMam`5sB;e#|5baE(A+9%#hHqXi+-l@{BHzZBTcRJv+gq-lg}S9Td`!Vl^o1G1 zecpU7gS%qII747qDo|wjB>4IeYx$Y?kzG)xG)zRBv``5t52>kX2 zo^OMsPx$S!Y8`l%WQ{6(vEl7pEM13^pLRbAW2(#EIw@YqXo3qC>pUCuByErgAtr0E zlO@(XTCA<~bL4Ppqb~`zPoYrQA|g`fRv#d-6n->-*Z;+yk^h-Bx=hh3i{b$t&Mmbv#Xy z-NMqO?l|dqwI(_rbH%mpw}Gg$;ScYWupWr##J?3vw|=E-%l+kgC+;7bBE0nZ-9zjD z6G;R}96-JRa)gwWl%k>{z<1Zz*9Q`WCEzn_YwPIf=;Gqy=H}+^4sf5Id3gcoCm%mQ zzh4f~fq{X5@oZ>lXn1&dL_|bnWMmXzOBoxRkdOdiV=^-{b8>QWb04T}Ku#$tDgts! zSy>s7PyiatuRH?aUVyrxx3{;iudo021*DQcuff4Vz&sLI!^6KhNR9&t^vTI7fPemT z&Hh|-00ZLp{PG7H`B#zByZ`b9cwhqyu;kj^1^oCv{^U;sY5ZXU zNo0KUpC%DNpqSBS{<9>Kj=ItH=Oj}6w^YqKKNMo~>a7j_6{H;o&nSNC zW8_cL;R?g?DA>A{B_!Ceta(P>+`XmLl0ua`qZacISFG7 zg{f6S!3H~%*A7N@&ePi{@i|Eh$ZDDPNMn-^Jc7j#8&1j=PPP z^jdrN2nLI5#^FjfX)QZOk|g`!*h|glp5=Pe#7z2nE4&HYdpnv>bY}at>^lE$g09N7 zwzcIyb=DE}{Zmf)w_*p9l$O^2DYIrjKsN#K!#@}aKoa~v0zw3&8314UvpRcVtku@m z{Q|7j*Eci(e$BrbHvhkYVEji$02B?NSpc~K2oOMq{2@{R@8(}vW5B`rf2`P{{?4%U ze+uXQmwldfNQ9|Jp1w_+w($v7tt~~B8)T**-zh?L(0rK#}jm zlI*|`FTxRxfJvH=NU~5#BG8FEFbPeu2o$ji_^|OfuyC2Ma2PPL{~LSbKUtmvy}O^5 zrzC77WWV_w(*TyI48JT-B>>A)ZeAHafd`*sQE@d%DQy{f-QWC9)r{5D%rrGD_4FPb zP0h@mEdJzP{PgK>?!~{1OdagKo$P&G?ETyvUb;KJ@^B9FaS!(M4147r;qMm}`s#IL zaC~%VVr)c8d{k;eOj=T0dP-tuT548SMqW;OQC@m^L27kTN?mbMV@X0wS!_pnOm}5u ze^uDX+o18c&*!QOPsgzop;k+_7mI=qn{mx_#VG}^~F2*#69A~DfZMh`P4G= z%q0KZxZvEV@Z7NI+@SbZoEemy8J3(Hm7E%vo;)f2VqSV=TlUGNeA~NX?N!BMSmkV7 z)p*L=(X8shf|}lv+OCS)_Ubx-CfxGw-7jn82UBFg1sU);2273tZ)3pK7_c<%?FKB3 zhX(*(Q-CEpHZ?pxJv=czGC4asH9I;zH#WO4F}FDVVR>$8^~37M>c-Z_*3S0M-h-p* z?-1bABjBk3o(I6n_<cuZ0`2iorvvzoM+9f??v zzs&}rm=tih5R48KpjbBYQGMjKpGCDad#(3fx$Yf@i%h`%1+(OmYIbJ8J&Y^j81hv2 z%cZfj$3|h9y-aAy0k*5<`T67ISzpk-z>77kbPL_qzVrGr)&SF^^bX#qraM8LG+RS)REjy3m)bjnCNDJB$6DTfnq*aP zoJam;Vv1&z$%wO2S`Ik>D7Sr)H*9vitQv1?I@yp?4c+Mj#`~KO&OeapvCI$N>zohH zKhHvF+0a`5C(b|goBlAkHk$!p+S1KHWZwPFAaoh}tzc{&o2?Lh>(Z@IV$c1pF!E6P z?QrUppC+cI+mXzT``c0MgY-Mm+zU24G5mX_JFkVm?eD|_2P}5uq;PF_|{8upKld7Zd|I9uY%q1tk`SXij1OdSuwX~P2Vqmj*9v5?TQr_l=^p7rrFMlx9!Fn zdC|IwH8dS%iC$UcFKGzQDsZdPytC|X* zjbH^iShX&SQpCN79jM?;Vz#*BBzBYILgCq*P%3I=>AFK?aG+ObTISyMW<@lotw}eyVG`_ZQ zq9!-&PW&SN9g4LzL38nu)2y;$$8Ca3<+)&ENmu^BQKeYV_%V;O8S;rjMt;Z|eBQR; zStT0>%KNXN^Wfnzrj}7GAN<5|_H3JgFu{4Q8x;ma%jpo(*=VkA_Z!j!B9EaNw{hu?VSf>1c=^(^FV5(fYG6 z<*~80u(S95Z)ENKx9N$ipPRdlm**WnUxgrlfv`ZPs9=(~P>iH-h?K}n8Bs4;aaVZ> zJ4H!LrN<^JQu?aW8fsE1>QYJ?(h3^Va+*NM$Z5*TYso9>C@SkJDFZi2^psWfl~wgs zR1H+s3{=$(G}O$rRBd!soefmHjFn#*D#Yl?W@$-Ps7ux>i?_>)4@!uQ^9#?j@~qHv zY|yZ60YT5X#mc|VCA1h`7k8gsAAm=$NFK z*FYryir24`U&lT~Y-~zw+(X30r^G+xwbX>fw8W&eq~!GE6u@ymGc64;-OmQvpV`^D zzm3!ie`|jJRn-OnwOU#Mw0&D!ds}-)dq?N5tkl^BfbM&`x_g1_)YH=kB&eT#Q=nb? z&?5z=Z=<85e-W_*^hkleD3FGLHXV?6fWZ(TyMT-Xq?=!f=I`>#UwHFSdH&>60!DUM zKOkT4Ag6bbqwkP|TgcumWcwDfc>`I$c}PzHFV~wbn@{Tjv6EJ#oGEaRuV9(>)_foW zA6C#Kjl)7PfDC^0@VrP@HjbR7_%r9<VzXWVzB1IWa%nrpl;NORl+UHoe8@e)^ZE zL%eQpkMCN@mEKrS6)RuJlqgH(De2}NV$mQL+iLIxUMz&7Dio99`K>JE+827PRq9Yb zXWD`a5F^^W9K?OQ>g2L+l)QEPWhxQ{z2veDL$5Pn;{xAWjU#e9|K4t#3h0@!-Ba>c}YGgNj@=2KHMIQ(jua=;u7)_k_wWK6{Vz=WMow2V*}K=c6N3^sq5h20E|9>g4fyE8K`-I zY5A`ih=+#_lz+zMD=8`YKX{M>fN)O(815Nh5c4pES@?6&yS%*e z`?UX$%J<{;$NlY3N81M{+n>+3jxM&2FE_t@+dR42Jh|RH1>$B4h_jpRvzwjs+ug4> zpDu0=FK>>&-JD+CoL}EwUf*6n6vcnk!T=Q)*mWM_Hz4=V`ZutyRZiZeCa*7yvlZr@ zHf+9hl=}Hvl-o)EP>}k!Yg|%<#K8Us!@R9m9MTDp>CO^U5sc{CYf6z5l^XH zM{LJtl*Fh_iUZTCTH2kbdK_UP5NA6Zt7a&=rf_nx%Y}m5=0aU$y@V`YJny%r)ROOs(U)DZ*EBzL(;lU&B-WP74==!0;=<)v6}VW zdK4ca6Yo4{?k=;qzs4l4|7fDtCH@t&uqoEa-}xB*?%mbFMyDa{<&+PKVd(Veql8Qy zFVM4D&qv6e1oNq7-P&6IkwT}*Csk7=kkp7M6LbS?2e+#CQe+MQv}ap zceHHV7Bxu-z?h(#St96qMC?x38+&UkF2gM@64f~t>(E`yFKjDf|4iOr0OLkk2J?gN?wi;xb7oDPqLo=}{DM2C^mg_$;j zg{g#%wV9nAI6d||x8(oki@&;60sGV+Th#z3S1%WLCpUKsH*Xy;Uj?5)zJO4gkZ6>s z9Z05xv-Q-B)-`;&>ulP6Dp$?$*GR^{va zzrIyHY*exTc&h?Nz5mr#m04Pl`nK?Ob76RAQD{$bSZ_&mS7}mfXgu}Mx`uc4O^uC!7zdO%z!U`PoZhbP{_Y2k;6P9BU@s7TLjYG4Xs7i9@c;n+8w2 z{QwmE9RyJ9zbd0&{O$*Y_pkU_3lYnyqTDyW}Pr);!<_PXju<&=u4Rhs6iG zUK7DWc69CLyI+$%j-IZe`3(9B-9mU83R zQt-8{KtMws>ex*=Vz9)CT8c5)ttOhWVf4VqUxV7BUBerpou{YZV<7p^o&$|pmh5ak zL8>vcMLc$gH-fp*xJNFjAkq-3pFt*b4_}@+n&q?51}B0AN>eItqfl&f&QTH+Q-wjk zrYm0Q8%58C5<%z~la%s_6GlNz7;3%GkV(>f`1kOnRZb%Q>Y7lL`xK$aIy4O4ahg+p zP{v+w7!E8cVWBiGYDpg#rzIo?z`QO@c(I#=34+~^9>Nx596<*$uO@N6W^j_n&zGy` zX;S->`ug|G?B6pp;ONO;RbM|Lr~m(-nE|Qz-w(#WAB=xL82{k-cOFoq;ylnVVPFy9 ze(%&FB4ZlA&XgV_;D{1kkm^p~l9g!NH@$C7{P61RxBIgk(%a zRLrCttQ3;$RKO+dCmeJxoD6}S%t@RqMVxGnoa}>tciZ8w7p{M$M&%mh=IP?+YZ4N8 zD<)L*STsXUEKE(pLs#Odk%W<%q=uEGyp5!Uy@a5X1doe2r>hv7yBM>FDAO}hhG!!5 zo+5Of!a&e^{W(PFynqm;_Y!095@+<1V)v5c@lq1>Qj_q~lJ(Y8@;1`&G1c|4F!Z%H z^|iBn?r7`h;^^n<{KC!kg}d8J506*RJpG?}1$cS~diex-`38GG5ApU3^?4cQ`zqpj zK-BY~nCC&Sp9jbKK17^PNW6DQyjMtqS7_q1&?Jx0WcRQXx3E;#@HFS}bf<_6hlniu z$ZWgF9Gj>&K-m5ayQnwzQEwcg-#A9Uaf;4yj>&O}$#Hv~9Zvy0pF%kLN8zF%H_zq+}*xxE9>_5ckR zm@D1=EK&bcm+#@h_}QcO(#1C0(OH3Zd9xi7*gG0KG)m1=sfrLyJpcG$Q|2 z$h&Tj+}Qve7!w@5q6$p}s8n$9VM1=Vj{$5bR;kJ+Qx%>zMSSklb)94vvQ7B>Bn?66&CZ-1hxcRK)8lsU{PaW(fkTbY??pC15p|vM?cVHap@m`vUm&+fe!>DEb-OkO^$ir6*T$mCP ziV_uhAtB}>C1EWiX(}gWs35JQD5Ie)r=lvapr)XxuBfP?q@{3z5Uz}gs1zAm&dg4vx%2Jqd_kQA_KeQ!&=g#>oVeMvXZK@ zQ!8>ZO5fxZ=jIjWPyMGJ7Q|DvOjemlRwC|Lu+=LH25K zmiDoOJjQ7zlOWDYY%K5?^G+w6nesJloQLjvHl$IoREV=xH4S|E!sDm;b_DuX6)(9C z8^m>=qKhVgP%>cbN>CK^Jqa@xy16c2mTRVC@QP#Q9#r8COVmWfwc`I^qLG-av+Wj? z@4-T)lUCKDR=S2p`QtPS`@^_z0F(kk1%>_fl>YzBCxKl8_>KPRUh!+Y80F*~;p80V zeAq62cDZ<3czEl1`6~GYiUfo*g+yaTB?2U*yrksp<^EOIDt*mN5=}I!Ok@WPgjRG} z4s@u`bV$GH65g5+-Pw@+aHfKI&_eu}Apz`=U`|LBA0&hm63hY#pn*K6fq2nCTu33d zco0iWhyfZz6&WIp2oXkvup&c95g}*@5O{b9G%Vy13elUCg;0^jA81X~&^_^70cjeSu^{gA6 zoNI%;OOwK{W<{r##m6?K`;O(?9#tFOl`AhQ7XquM!mCE(s(RC_y53Z`71cCV*46*z zLz)BKeWP82(;cIW?c?jMQ#;KwpPJ?l8yCLRFP_(}T-K~!Rj=Q?-MFpV{9d(rSF!b@ zeEUcFE~NY;qNb;po~FOa4aNbMm6_)O6{ByRzdGY!d_fMg9p zvU?$UZII#yNL2--wiwd<2GW@a>CcCZ7eZ#sAuI17n@y0t4#?*o$d`V|$q?jp6mm8J zIiG`EtU@k#Am2Vgt_~sBUm!PUklSzfHy6NOVb*1fCoqkO%1<0&EO*wzY9j{-3}hFoq65|#!?!5O>v*7BGfYg;W-n`AaQq!GGGC`lx!5b_bLK91BY%CV=%rb$2ddzon{gh`t*s)j`z0sodluxH$g-6c3a#D=AZ9)HZ)paXrxgjCBZ-kM=E=p z1|CIRu6q(1)Z+?mU4E5yTWYz|vEwzFdmV-!GBg!E!qR{m%NbaR8uRia82a@|3thgR z*Q!>Y*loKRswQ5C4S~>A87_^A0_V+waCDMIN|bbuoE5oh`L~=jeHp9x*xMR{rz&MH zJk-<384jo)dj!vn8`w8!g3a|1xmCmEkKv(Hl`gUNb4@#!K0TLz=CdH6DN49Qc8&mp z@rKcEal#E>-W3kHzXsz_9KycZvy&hrh{#m-l2aq0GJ9KFkNjO^#%uC$M3@6-Vb74y z&)FBL!f7Y^EhnX*&k%zIOW#_^%Mbo|TIhb#}CGh_{U{zD~9m62$V{7He(R?lgnc6I9$&v-SW%Q@|WMB*_{I&F6o zmm!ubm1E&0mQ}gEsw>iUzpLylg_jRV-C(@8R|5YRaqk%v)!wc9cAyj8NCT3CBmpJo zj6@}aWXVZ#79|PNG&x8{K|r!(nw+J{AUP-qs0b`TL1+X43GHRA_uc#Mea}5r=gX-* zYt;PKRb5?Ob3Xqup5J&Lan}Z}^@tce5#3>-{*TJxp!k2Oy{G4A@Z{P4W_!L1NERVb4H)UtND+S#MuXe_!H0LC~0R z(~!WZPq?m4xTZ-URU?op5J<)Mk+=4d%zLEtdkE@1IQbqFu?L0iK_FLu)E_X=4^q%S zcgQXhu|q+=O-HxE!oJMKH!C7DsHD+w-z4A0KGw?z`y?RZ%E}lX9*()PGyaFE|B7#m zii*18r2i}8mYA5Bl=RQ=_MfT9e@<_+GG1h7zIv6FpZB8RbyjgfW?4~2c}ZqfX?ks0 z8tzS6LwQCb{@U>9bA$h<=D^RbPd~Rm``n5B+#UV7J8rovX`v%+y5+@CQ*KXd zVQWSZ73%>_H{T}~%I=6AUuz9kyb@F-pWNrD^=GUX0wZr}0 zgM%LjKlcug508Ie<<*~`pI)Ay6VES+=NH7YtGb%sUcE2=(X7&?&XRSCt+`yXZ;Os~ z)-DylyjHh`;g7rT$okB?T$)$jRCwx-DjNQsd~Nlm)QOYk{^zTZ!lc7`pKmPk!DC6* z-bBlLN$XFAh!1-5ySJYNALoO~@8mxXD%grU|EBUsFXUuDbcogn8+L;+*7n8gpyl5{ z7FImM850gB`sZQr#-U4zPocSbc%CB=H>Mu~Pxa!(Qq-A(??Q^w$gDcpB!5Adniln$S=>B~($5hIsY z>h9xHTh@*IQLhlSY=GO~8vEYH{Qhi0Q<1gUNTvNLZ))e7(+<^JnsKV(PO>CMH=5lh zu_u2*%OROX+w0_gGF2Rv;s%k0Q&UQFD};Uu zJ|qYjGRDsw$~`GR)a%}1u;86Ij5JJHd+}=K+Fw3C%ie#zU>s{( zuE$@JQv(9{1C(~3bo=nh*j&iq1^0Z8e$;|9ABT@0#u}=EeERwNX-bkHU=(N?Qj^b=?YI2Xje`y%mRX-wl z6}1#h-y)=Z=U3tWV|gtay4l{^B@N(1NIi^ZoZ>b&E^KSw-llU`p~C#KyxzoUN9DS>9= zGSl@Btp~vSv5Z}IFwrcCSnj&%Ny=aou@K4lem#r7!ih6Z$qI^H&Trc3+R81)3te*%p|YUWzm1A7nyjR`q*|uS+@Ky z2-cs>LEO=iuSi`zp!9(CYBbHz;xpj#z=K&v>s~q92})|vYyV{=YA~@hL5ed?gpcti zlLkn{#CqS>4RBAO3z!_1L`pXBv~8Yh-k`-N zsDt&4wG{#Xwsk-Ne92cDCJa>aKdoW@*K_p$;h9&cPlUflm^Vj=Cr*efSdhb6fYpru zh891w5+9Q^AEO8#13xc44=?>qUV08*IyPRq8@zNZymU)q}Xn#aI)!eu^ZpwwBqA(6y$Le<@J^ncqA(ta7Q9YMK(l3DOB%Xn2}EC1H-2_ z=D`j&Pn;h5{C^y1|FWMw_J0x-5d1XwSy)KKv!_wvp>dedq=>N8h_JMXuuSZ;jL4^% zkyrO;=~3b7(c!7l;VChg=dqZ?xQMu`ipR#rN5&*YMJGo`rNl(0#6~5@#XOIXd!CSx znv|H4{QO1Q^PG&7+|1Pctki-RX@xJ-i*mAxa$gqbT>)5m`L7Fe3(8&=)?^kprk1oP zmG;Dx4Po9)g;snBu3QSPS`MoI6jbv$sP=16{d!3Ax6rm9nC_pE_+PQThtGTWQ+vK= zb$!k0SSo0nDQ_96X?ojS-`H96249}lUlKP^5IB_ka46ekI7?$BQ(+`SW;8?UU8c-f zmcsZ;wW(bF*+Sb7R}JI}pHDT9zv4pH8$$nT4%=#d_N@c6(;czb8+|Yse>j@_Ydr0E zGV^3M=k$I4?}ehXkELhJ73ZI7&%ZWZY_wl&bzgq(zx*+Lxi@i1m^~*f{r` zubs1#{fo1si}TYf>&C_Tl>zpOxA+IS_*WzBf7=QBcYo|kxE%kT>`Xi$5(&h=Ev|F# z``#l=G5e-jv28&eR5xl(>|&I+>4LW@;CmPE*Z z&0hZ6Zmmhp&}@b>dH?V16*U{bahG|70)s$hC60<4iiN$TsCQcdQo%GTpyi5f}mPZsbH=aFS1J z3%~W4&5iu!&cCylP4{wy=remTrBs`*95rdSd)p<*!hTZ!O<;&XbZ=zb{J&3Nz`w2k z^}<>t4s{EX+o*Nhvg|kYOIv8gl)$&ENa1YfO4m0=9%1wwl3`*mr*j#7*W+FX&@dR} z+krkN-ns^?q>u+u~m|%tQn=fmuhD+fZfoXcrYnY&*ZNwnjaC27AdwYR%a%@ zjx-;xPBn0IFO3BSCGlKd7rMq#bdjzrVI8OG2Hf7Jd(oYq#~I(Z zJNJj&32IrJ<=PchA{Se4hwW8r-@+*@cY5gpUhO1(wN-u~+I!p43%F8p?laiz^vHLJ zPd0;)G;5ZSBK4lw?@^C_A>&rEoA^kp+>zy|Rx)zn9<+J;BSPc~kGpUyIIlm&Yps`q4gu}H9K(r%x zs0;yvPAnkdR_`S>Cq&SV7eFOPdanf&u&k&;_&xPL${a!@k9Hxc=|~?<2O&x*(T+fQ zv%e#+7v*xQO19GyWxg1JBw8?yuU5T%xoeD)Xth#d=_%$;n8CTpf5eEfml9 zs)%Y%5otaTO5mScLk1NHDSXSzksg~xA69z%^>`2_xhg1(M$}AiUnP9hK^3^rQ4S)J+C9`5V z=?yeFSPXUiQ&d#&*N2@ezmesQ+ zK)R(Qn#FLnSENc=aM=u~a5_XF4Z>0arfdK}TLGX~0AM^2^b`#7N07Q*zi!V+YsF7( zu8OiSfIcvTn;3)dtCMIb!!#tJcRAp9$zbXrhz<~~2cXpl&}x9F#7HP_fk@c^B(wk$ zN&uJ?03-nbK!3Yt{`&<40Irb$u9E;5p+GhmkOu)4MnR>K2t^e19ty0D1RGo@HD z9EBdjG7e&RI{gJ|T!ag41Yel*B^t_v8r=2P)3Dan)6q7P(zFx0>ng6|ucZ7`LoL!o zJ6Tu%rK)MJf_<@~bJ;zw3f;hJ{fK&_gbwrMUYm>&!_2X}=@W8kQ;J#hck`CCi&ypE zZ0Nt)GOXCLuKniRvhUlm7u31)tY#~s>PH0bCwA~GYWOmC$xr}NVF z%kuT}+Rd}3@0Xo>#O|NO{^N_`^Yf9*vyqG6gQrLRKY#arJM4M?rE6rmYjC2gcd)bT z?G@8pH^(XY3mzxy#4gOTSWF&87T=kF4(RKWRi z@#WXDv(J^si}go~Ex%UUPQJFEZ?|3iXg?!#T>k7Lp7ara4-?NuE-yxizuys0rirHu z#PgNQ%dbS@<^}Ql6~J;q+_^a4J>J_r+WK+u*N>my2?tku3jSGDaAgR+Vzc)T4z_1A1=iZPNyGgrO--)-`LwLMhg|Lc;qn?quk_QzUSXwld!ssCKE_Ah9&R}A1-MsGS- zKKJIIC2Rjcn_BD-;o%h%)qn5D`4_bL$cuU#XSdYq^KZ$J?vC8-9&4@p2ipA5{$gjf zKbGpM?Xl=(*OGJvZECkSJj_Z4I==k}+AN@O{>=0*X!9O(O-J+2m1I~~Q#WtuiKazphX0ogOaBI3)>u+fD*Un<&Ka%0(suMy?xS{v9>-XXIT$Rn# z+wQ+5!`N%Rp0}6hr-wUVrh0m=9@xpFyUI&*Qt?geUw!>#^VW8O>yPYcsrB&mZK=fPDp$~E4)tbKWy%~+u`vkk zQj+^bhMI@0;vlZ{WmrU!RDM}y<^A-cZPFs*T2orl?dP>u(59?#@KBUnZeUSH^V;oQ z+^t?WHs5NY_}lg461-_rYXyfIyw$nA?|5J5icU66KH1^F=Og0st#u>IeXo7HtZJ`g zw`FIqlQ6`)-*xoCeZTv3vugkC#qrL54*o zLdt5ODe+{=_6?Va1g^kNm0W(jAey-$)QlwG6yS-%RHNk*uvkP-{3df6!7NM2m_g%*h3c)wPr)ah9V;}rXPXW%}P6Q>J0 zV14j;x}|qT$HF&`*u&hA~nK0*!Pp8YLpY}f?(#LhdRw#~-Erney zq@D~W04r3qi-dz1ChAei^0kNC%2k6T^qRKJzbs$AMZHZ*^#=nk8>G8z~TdPA?l~&sFWkQ<8-X%F_>P*#ZJIeTFOR2ByEn@8Rh$Jgen@7 z1^#V^M%ImQjk#t*5QX$m8^>!&L4Pxy?L*{DgOiX?LN=I)Xg2%fiDH0q?- z1uWf4FBOTj06W+$5^|Wy%D9Ikt6OHUQ73P?{;gJ#3H}*#v<6=xQPh73u)$n_X{#S$ zh`iTFIvCmvSbJC_GEzfQ{?bf-OCw#x8N%i~EgjAR*dF4K1b`Dwu0!=`Vs9%gz=8*6 zskd`~Dw629s8GqwIO`tflx}TeR*Ry~zHaYF6u!=Zldr? zAxlX?+k4OadlPVl#=R*39!fvrk?f%=4*irX=B9K4H1(nL7YVFYRFL0VHJ}$izUdXF z^nFPHTu>x0kG))3qQ!$O;-}~N&e++r3TL(YVra4n2d0*#!oSvf|-+3KFV!G*{fg` zT9V3H(ch}up0E%q+P`S2M*?ns_WaNrPPtSdgo7y`FxV`MeQfbk`%D%dus^>vzVbW3 zT@jw$c#UMMM%t5#(%apz1V~vQ#)6OeI5dpXCp zKL-vZ%e!Sh>zGD(aqY#=K5(miszMd*3W@)Az#J zW@#`KTyBWxMyEzSgu-o4W1hX^_D89QUT`TcY&nof8U@q(<+i}WThLZ1ez%4~nQ1IR zf#^TBNHsJ#fz_wM$ZoXtSyO4)>_S-C0rESwpXJ_OaMfHa$Zre+9U8YO^V+a3oQrJm%sBdR$Daqs7l( zD(3Nm8NN@+LgCNVzyQOEPyAY z&`+Q;n(7H@Tx9P9lMwZZqJh}^r{t}y&eZb>gAe0+TQvLHEcRa{>d?8q8cs5KBTwoW z+tC)&6^QMDGx&?gA?r~cT+ddipA;Md*xKTPUOrPBNk9O-V6EsS0)phLEyOobUMLZY zNl9rC-qn$pwtpx^Hlm~oV46rW`=nn_}ph;PdMOQi{3A&)8 zn$uIapC*`QD!0cH%`#r6q8bPNVKZb+IM730F_xS z&rU)-OM*Y1`yHF|k$xE;q0b3>jgEj1kUS#ffO{YAJ#Zp%OUk~L&ujt?4mZgjk||Nw zpXEp%rB~&>MIpeY9_(YwY)!yVJ#Kokw1AE z*pLG4b8rM{qL&qs8^*BRa1=KVTFpwDk4pjI$X+v41_)Jh#g@mvD+ddckxIapA6Lmg zA$zDuBBBr5qL$U+f|Wz7CB#q|92qAUiRfw-?N`~R0%$P}*gXYS>VTG$NOJmMEj|tP z{e~nxDx_Yt3n2JfnWcBX!}>AQ{gkOYGOs%ht~<@CJL{;sSh{K|)d3iBppY95ks7r3 zaf}#gFfyAoL50#-9Nvj5eW(TRHP)l3N4RTJz7o2gpd!3+ovw<4t+Rf6w*H#dgO87- z6@ER4`9(Cmy{wx&c!%?qAlI1M&VWJOV?)372NF?c!dmqabEdqqjb{dpo({N$0RyC( zD*Tt+Oo_49@`F)o&0iT!W-7Kfb{-vottu~zSdMuw`EKYj*s2}XH?lHSy&m=MEz?rka|Qem<}0q2d$ z)NRP-=KEs}86~nQ%WXLc6qv`&uaLqij2%U?9VHeW2}kYa?kz$Y9o5SnwdWl;#?A)W z&L;QkRaz9s8}-e+^&Fjgonsx{=k+3Utt?7iJ)Oe67C5qHir$c}i@uf%5>r~vrZ*vN zSwxHO$xfl^SB)~fZS7j!DoIX18RxBIOl>BAB7#w~1iC@X)LRe=CMQj1Zqz~vq_HFJA@LRnvE*4(fda>gm1dG0G7<$(b|F+AR`< z3q{pj1&Jm7k}b4(733cDb|^#(nQOGWtlL*5#nYu{lDCqSkyUTGqRg=G8y$G1iSzd-&M8L1K@xn_{rG5>;eOM5gLlU11Af8( zOhdk@2Ow89YQY*i;!xFsS0b4xZCl{GX>;K?C|xw1+Y#j|gmANj9pEFXX{d%_4`=2;_|^B;w(fAiG*20;#1oT7awO@$|K(tYNnc z!0~96kOZuzPd?tNhB+>ZVst74Qmj>+CXIzgUK8fNkqe8?-7ur zU-yrUCl;6#BUh0c1RFE&59RtI#AqXj1^0FCk~J0F;V% zZaPA7`yiA*T)l?Lm&0d|2}oL7#3y~ExMh|l&UZa(BK^zFoRBp)iX>O}`h*dEHVBAvi1tRy z1+l;ip*8ofRr%7+TxEtY=bU_ioFTKEhJ7NC(##_p%rL*1*Y}QBDjmXvPu3>T>NR{{ zOGr0_ydDca59^2zBZ#5esmZpC$$I(F#F&T&)^4r^uxS89a%0Wj8a?9!4Im)QSmAos zn3Fc-{aP1$RuT`7=i9k3+`F~9LkN-KBqR~Ps*79msqNpD`--B2i3NR)0irluEwX>3 zc+dzOn%rs{=ByDm{3#Xj1ej9*k$T`yswg^oHyAFosl1hl0WuU{ZIbmQi8I7cAvb-&$`ABk5)QrqvRZ~#l zyOzR}5;9}8>K~U@yWn1Hb%ImFI})EQ^AGb#&ZkqExc+_|Xmk_#xpu>*plW%QG+uz- z**d>126#Uv#9uM1bWa{&YwT|;GaC-)U{2ShH^K3@3qL^joiIAp+ze|Z0w#pGB1vr00 zau6J0{A9Y}um_xLkGg}}aZo=Lpgr8h7KZ%68kV8|LEUx=^ff7*K;EB1B6NCtwy>c#)TK~@9y(|rA-8Da^Yi$;L-zW7Q1aKtj6bXgSS+x~8WNnSt* zq16l{H=67>w|s6+R1Ap+0bx%#YnZn?adQ-e)nVI49gawV0skBcmOYTC46b2&2iaS;NDLe6?3u&UacoKZ1Oa zC!XV8r3y3iL$|H(+mP)_d+>@0O|-d@-ME`;c3?l0#C#`Od(m^HPwvrsGpQr9G=|5E zKq5<5lb_>ksm|-WdFH>|KBR3)~}+8BzjjizN$JUqQHQV3YnzXSWgZhQeUZ^ zk7PnVdk-PpcgoI0@phpJ>0L&x@pM{sKX+Z|9&^A({k?;Y^!x492<_y%92Nr;gA~u2 zgjGomb7%Tt{Eo?e9H9duTKuh?y6;$B6K3ylr;61Nuxc1y`{^j}r zv)>!jT+|ay^K@Ffb4I%S51WlmZKA~6MSdhUn^<@cK9)5OsG;Ph34}i$_ z9k(i`KWus6{5nd)-1SXqi@AHt8Jv-aQaWOW)!5!UkTL>xqkhat&Wt27J*O zxAdGLi~s!BQk0}k=vYpp#Z&M8gZ5ma`0dqD^3Sbb9+4e?vw4ho8(OvlKtz9#d!jpc6GsMb#E&ENa5u-(XEHKrc$#?=Ir` zhds94lFrn>lB&6QqvIwQU1#Y;V{JD$verIA6Pl^exy2B(-qCBK_4L@->K}GvbdpQ- zPM)-!-(aOIxU)&`mXNkwmv>_OnACT7wqjFHH_XdWkQMtCU)5ca1GWuiEtoP{#5PQ2F#s%8 z{mSV@RHckQ;j*m_x6V0Da(23nr2IT63qAVDZ-&YaYw#77eZCN=J>-(Zz>O9E`W6^gN z<#R@oJtN9L9mblqc1lMk`fZZ{E;a$dBdUz1>Q>r*N|+}bj!B;5Y)o3P-l?b>IyGBH zHtWD<`rWUBKIsO=G6rh9!hsv2*kjo+h#xQuUcKmEs;b? z|02e^M3_asG)T1z%RdzeV)GzD(W(~Rc;lgbgU+PL%ct<#!N^@2(wRJu*j`Ac%b57M z4}4^l3)M3Z2Q@1}$Lk-`RWd%fD!2RuH%7*(pGJIoGraAi9Ohat z@R{!jV@S$e*kW3deG1RRrc^CGp{5r-^KpVE08M8zOsuT5t4V=fl$QhvqX|G&#SISD zTqG%BPeN!o7p2w)i)R7|Icxx*L`s4;S1*&3u;51`l4isxD-=+v6KJR5m|IW{fMX#7 z4+bBB@THkP>e_#blK8iOM(Ir;Y<}UcWfPR)a{hOzXn^6Ki|n8f-&nr##S|AKJFM`5 znnUOTMytt>-UMHvlGaNi>vMbquMXn(%vLd}E@o_V>4kZw8ON}ykdx8#Tu70=W0yG0 zMlWg!TZ6)FEDN4nyJNu2AQT%~jEkuhNb3!R{3^mk|%+-w7Om7B-oSTY!=S z67#F=_VRAm65TFGrC(2I3fPs!gp7Ew zOW#W`v?y1Ug>pW;{jP|{(^Fk|sbC{)yiEy%T=n(flRMd#;vP{~1~Q8zwf@|=O*rSc zrjY=#>VJ=*wB)_+@)7;M_Wd<;Jf6RmV!&cQc+vjQmoA*?J4Zn?8;+(#r^FWo+bkmI zQhg10&HLpxuAa>?pOEyI`iED6bHGybG;hJ@T4HZhG{lQIG1f@uNzGL zHZMInMh?d*`P(`erR=)JSnFfv!P_2g!rm{)WjErlZ4bN??@&*A;RWaSNL`t)HR0&+ zI=<7f8qr_W!RD5)(O8NKmsDPTd#9BZs>TP29ljcnn6(3|x^FEWT}=07ZPE->eB$ja z9V6!ctaV*VwxElkb~D2=T&LxJ9-qD+gI*Fc!NnR3E6p*6G<0blO&NKv@RLq_41PPk z)hD?@6MLgU-Jo)%Wrg@jK7Mbw=G>P|p2t%p-uXh5=}VU8PBxMu3i;+EJ5s-#sr(Nb z%*lBp8rK7P@0$w!_~p@){x2Iy_2f9s5cY#RMbwA%dLg*iRvy_#D&!+B%CSGl03DB} zP?t1oOBNp?zyJs2W(`6(Rtj}UbNPM!?U%K$-%m+-?{Ha`mf1$4B_{CtbF zJLXzTC)a*{|4udmVhaX%l#92fBOI@y-aDd=echxe+7ussL|>+ygY7O{&#;lp4k zJ1dF9G*%@oN*dSXy#_)}lL(i~w%F#f+k%ZuLu62}|d& zYrKsrMm1LYy_cP`Vn!+>2qp-+aMP|o$}hn^yg#r2P6vqEieS{+C};5yu(D)CH8LC% z3$bD#DdV)8apkQR{(Qo=ttL5;NkXDP1_FA$RhX~f0IblE20`UScUNGf74Jxs+zy-{ z7HZ2i4CZxKWtHyabmYM__$luv#L17{6>z(kJu*DkOPXODX*mKgRga)wR6R)}sitaU z!BuCcj6}o1!C-(Rx)b3qoU;T1zCt|8?N42gP?^rn;JX=j2r*~B`^!(b)wc&Q8_hR; z)9h4o{}nXz749ysM=equBF54A5p2%G+v2Y^g&kud8O<)}J!AmabBL%{0~G+bPpG5; zFQt7tTbo<~w{oG~eUiWkP&o&CTD1%xoHaI*_hPPt#zK^L8%S3$R_hBQs#Gyau86ZQ zK^;|ktkD>YG)TpEyFCsob5^eb2zM%oP+TpS35;295Ybj)FlZ?Tsb|%6O)>R6uis#_&dV8MA zixDl0UhJBr1pOe96mJo*cObz_(fkBtwR=Z%uz>0JvV+E%LO&wh(w5_SFn&Q>Vr>2%ziNGM zZp7@zHus%2p}diovD0|vnV0(abyB!dZcr_sI|y}-YgD%k4QIV@5cYDQ%qri-14j0o zvFO;SFzh?=!H6pM{B-1fU8XXNb~KmQGgzOpH)8w+se$&mE3Q0t&U(9R${S7e(QStV~lMf579Y^*pc zE!ubmg2q8q+!9LJK@vWY>w%F1yj{v32`WU71d2oK=yrRUV)XNM=77X`LmsZK!og8I z1l>l`N{G^SND$Z-4GoodBqTLT+BEu*6*~XGYFZGPLSg_LrC#xsk~M8K?0N>~8g*W{?6(sZ&wb*#0u~P7b%3^kxF0 zV3t(}0EI0@kqcqRGvllZI082c<&ms6qrN=tR95pV-0kjLP%U7#lIAwz03xwIV^aXN z%x5x|AcGQ?T)mi8NK$4Tnv0)*#Fl^2HdR0Rb~xsEHg>1F4fvSN^Hf=Twizwa$5o7Gnd#a?5MjtNCwXC9LW2pGTucBD|<>3d1MoVi;>^4KM@tgXSUj* zfu|JFXCeCiI<`PY;maC!Vs{HAKGMA{VIe~tFaklSPc^$D4j7_uRF7w)Kd7@pe?@3I zC`Nd9CeCSpJ-=`DK&m>L=Z(U4v}qeB`nnQB%hzKA&R|BU-bO8Dc(rtklCIPpksnd; zN=KH4RbPuuCxH${uUI@t!A?Q)sQ0skS8U-R$%9kL;m8^m#VSJc49XVrCgcNVmwi%B zPw?rNnq{a6aa+>1K+{G@jGIiv*OJZtwy8Q7mwd|nwS47WnLa8rwhD`OJjE@zuKk$f zg!gfqvzjtYIr=WYB^4#kDo~%ccI73jUD^NIn5Jlz|X9&qN6V45i@DCKgW!2XP zdye+JRR(W$?Rj)*f+H$jTKqbuey@mDu9wfPi09TeQx5cCc|qP`)0XH+e6P?r)%IY- zsJ#?O5@k_r(&+i9K*&s5O<;@t%%mVI&Z59g+@O_qDMGue)NyJe0p7pQu9l>+Hw2Jx3) zyQiU|JkAxxtxPnAn>Fm*0Ix@%cSNX#E%Oj|Xz2vv9d02PKy%ONxaDJLcuR@fMAtpA|hc~R1a-d6YSkydQg}CoTF%*nhqSsw<5xP*A zxjwL7rH}j!A~_OIasJ`@bth!MkTj*kkhTv6HUh`aB^w*#)dnF?5Xh!mT5_x9L{E9I zHvSpo%HjETUV)W3gV5*;Sn5~5l=}4Yr8fDx^&Ddq2SmtCNu7EM(06?a2sqo*sPh%_!fbyq_-Y+2x%LhF#g)#0TyGGmG!|b$A$@+ZI2$-o!b_9&B8!?wSKt`k|sOk&+GI;FMCu>HUpe??*|%9+`W+SzT7K2YoWt zzcq`$1cNQQ{iw)q^P9aN`&s((6ha4ow@=g=YI-EOS!mY=58l2@iK{ZKt!IGaKUUT} zYpa2Ya=1oD_P9jf#i|NMlA^vzpjNHLiqLzTNw@v#r-&8S8U=G0Tm+YtcY!x z^_P1sb30yuSmyXsHbRkZLjVsL5sAKTRv2n?XXD}|$MCWHIfU)#b{OdvQZhOiRwz&o z1m)g>uK(<3Z+9`3(-7M6?7XR(jIhK5^n}2$J}&o8s7QJI^+-N1c79V^KX#WVd$+Lk ztiV&FxvH;ley4E`#XN>^p`ebNJ-wtn>6226S>}dx}1EZJ$$9*Uhr-XqZDTx8j(*wT`{KZWw8v}pcZzFYKUrc3Q z)1_F`A^r6G0pv=D>Y=d|K9G_>Or-(vhpQuGPi?5Q;l(GF+@QGdU4@n}D`HH4T=W|3 z+@m3&KS5rx4lg6Unpt^<wPL9edIxO>Ad zOz&=HNFQy_-tcNvi+uiO=JISbt?9D!c>hv2;k7`=au#%Rq0#$J$JwvlT;EGy?`Q3G zP{z`{*pNSeo-N^&uZP!DH};uAZo^q6no1~um@KyR0eDI*%-WgO%h@~#aP0%u4H+-B z=1!(S#|G#@3#+iurk=7p4|CpEVYZveU`-@S4`q!R5Wh(=I2v3^m4wpSk9!~6veOI+J5aPQ(5pLRU){&bUI4RrLb|&@R`*%cbS-Lubn8xayJb2_mm30;&$$F5WJSOh{8%3QbF{ zSBbvcJ(lB}T9(;u=+qwW67Ic|ydp9#WmwZReeGmiWEL)a**stSgz?Fo{j;YMOFp`1 z`>!rFwS7lP!AV|iRy~Q;J)$>c585Rd^O}}_r&$TCe%!Nq5)*~A6vL}J6TThVt{PB!?ebQ{J?O+BA1)sHD0lxDtIY3t0}OzN1v z`bFDchcM<>WtMNn2hBe~-su=iJA6Qt`7%NEMdow5s7=6^c|)(x?aq9b_B9FjXAL{1 zSZ0N7IvD@&(|39|r1v_D-KCovm+yqEK^?*z`}*tnBtPX3iOD?Jw;A2Z{j#

      I5e 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

      Lq|jyYy!#Sog*f6!!MUU8q7DN^>sLWbEw2P6 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%0Am~T<>tcLDBeses zW5AO!@sE2lIJnLKLZaHe4@!uKFWrdYZXoKrMAY6-`QvvlKCj>7PJ2EVw5HPd&^+6% z#x-Z?^_g%*7)c|8w9qj4|6ZahF5U5Gibl{}$G}bi=SqLv$D;|-P>=D{mV1y3iR$(J zopG2&8H}}(DfIxVpLchzjP^Qw;$O{#h1mqp=%mc2&^ZJR$`F%+x&JGaNmM53n#rS%z$1E_KCG|+$QdfBwe=&Y|yl&ZiC-(N^jDr}BS`!! z5ew4*T%VR;350Ra78Zj~OeqHgzDx@lOo?lNsks0S)ln8cUv9p?(C1OCx}$S417*Gkg56Kf!KI!{*8-YCbJEWK3foG>!Ux=Gkiv z{6u?U`(v9A_BS6fZ;@oTqD{AA{kG!Mwi27SlE=1E_qWoSzh=mO%`*L( z@rUV2D1q4L8 zn@yK=cM6CNil``}D2hc$Hv$SMDIwC`-Q6H49n#$||FbvBFplFlGv}P|ob!M4&bqdn z{W3V?<^A64xz}3vYW(tH_Dd4pR0`)*n)+0R#Z;E(R8HblUgK23>{JonbP4Blnfi2v z#dMYDbWP%PUE_4a>~s^}Obhr6raseQG1KKa(~~&!v2mt>%gtu=?z%#q7A} z>}2BXRO9T-?Cc!g+ydv^lKR|=#oU_b+(zQuR^!~x?A$KiJPOx5n#MfFt$9o@XdXLh z9;a#k$lN?W{sJM_!ZD2n;#&*Hy%xxl7EUxRoSa*r!e6A}TBOrhWVp4+w8+-9 z$T7Fbg}=nZwZyBj#D8l^&}&IJX-TwcNqlZe0)JVGYgtBPS?<=dg4eQA(y~g^vfA9T z2L6f`*NTqDir%f2({qm%i)#%&cPh?foM~E7^*~3NUqK;VT^Cz5!Cy^#u(}$uYQAfK zyL)xP9i3U)}6f8U7lh;d4g_MdWIlo-7RUv zUSs2B(UBVuu>-<3f}1u%Z(%?FwEkf5h!OP$_V~u@wQ0N-)+5Tzk>Vq$;TV%|p)Ri-nZ%uspEo@wc0M-|4^r)v zH62l)W-%&8Az*@f@CiPmWCgwEhZXT3zCS*{Lnz-Fs@gk7@=16x-WV9=d zoF~0u>xhy+iykm*^&KU=)8}a{Ej>%_>q{k(JJQoOt`R2XsGM)oJW(93^zxEPtk$?r zv{tlwv{46ZGaZ}@qdV2Pj|7kYtzEuR=d@wEq#Gsw>&_45N@P`EY|nJfp3S$sl~FIN z=obPHp{p8WFz%jj&bWa?DKLH4LZQ-!LF3)_Z8!Lx=W^1k20cqxYh8%xFhV;QhCQP7 zlCGS5c_r`zD6&lS^{&puMJP~}tF5%&8YpqBnmyaMZW&(U!*%uC9l?^ZmS~NbH^(2| zo9@YYi;MMjHJl=h{WS^;DhrGR=7fz+co^px4ldD=BP4kE$MFeB2?)sukDfSsjN%y4 zNg`rOViIZ)B*$q;j?*3|1wn@ldQvh5GIB=p6O1P)m?=)OP*So|QL#}|vs2Ts({gh# zo#$eA=jM#z;m+gXspH|P|EC0;r~YU0>m7IBt-Sm7mvwM>Eu6Q8m$!VORPQ^_{>#>&M4Z{l;E?m5L@zSMBmoHy7F)=YUHNA4>%GIk^&CJZq z&CRc0zkc)PO$!T)+qZ99T3X(@bH@sK-MxF)+S>a5{re9dJg~8O_~_9iTU*;FPo6w| z`t14h=l1sYj*gB_PEIZ^E^dg+-QC^e=i!04Jpae=^z;JZ<>l?|?c?L)>*we9^5x6G zz`$3pUIhn-ym|8`EG#TCGBP?kIyN>oE-o%U{(VBihYuf;5)+e?l2VeB(^68>Q&KZh zQ!~=iGSkwt(m`ZoXJlk&X69sNU6TCnhE) zCnu-Ae3_n}o|&1Mo1LAXn_E~|SX^9OT3lQPv9z=TVtIKL#LCLrUaYRJudQvYuWxK@ zY;JCDZEbC1b-|eEWu%kCO6;+Yv9b#d))hMv&@qNQD-SPsJIbPO>#Q|c^pt?#0@!v8 zOZ(6%QKDbFGbH84ieo3+x=5{T$9=gmDkm+>!Ao*?Wq6*A(f7WhU!mwa??lyo*~_eY z=9%>r{`1{ORdit9)C}AtN%19#> zr+bOtXEiuH9k8$_G7glyNKfIgGdwTIcsb()3~a%vERirLazA&j`gv~=P6QcO`|vZF zkajb)Bp_yTl;ox>H8wuBw3hsebr~4D6)3{-!pIO<$HT!Pz&&yl503~Rp9C~O5gsKw zdhEn8A_@TXJ*<;)&{C>0GTdin4d&oXs2BKUuN4E!3V-|wwFa2FsL31WCP zoVSvfw~Uvsn2$e?Um#sTC_zXxQdInvxRi&K+#`9VYbt8S8tQslT3R~V+PXSAdU|^L zr%xLg85x~9bH>=%`0UxU=gyrwfByVWuzu~@wLQ4sxN&0-@waZ>+6O&=JHWb)jST?$ zI0Zf9p_Z|?wr{^A9Ix--DKi;JtPD-!T-?mq$j&#}G_@qLv0B5>}%5A@fs zgF`|>e}wh;_XxBnCMG5!v7VZol9rO1{yo++zsGuhetuzL;g7J606RcB05}rd%`Ghm zWVg3>bRw~R5ZQfwpT2<`f$Yzp2SEUQBV%Y_;A;T5BN6`?$M$E}x1Q|U{6=+)w7Uum0`KHVh+7Co)h^+AWP&XyUpjS&P1AFCbi zSz?k3V_0!QbK;My7WAb-P6XX_yn1pRMT24GNCP|9+Rl1 zFqx@CF2(gIB=Z+$B7mncVD=T+FT<4AyM47g(t@SSY2LDFm2Ka59oJ zF_O_TkWn#^o@5}UU?4rgKuXR4QjonMIZj7ROnZ!onuv&on1uH0=j4b4#^%WEnqXelY_ zsHo_vtDn}=GSt&EHZr}2F{4*!QRsV zLH>Z)0j|G8v_AsV0RaJkzk`Cn#-vxT0ki>)19XQX@cs7fTR`XG;o%Vx5rEXAqM`t= zzkByCCMIT&-2vQ_l9E$W($dm0GBUHXa{y}>78I5g6_=HiR+N=hl~+_(RMu2h)mB#3 zRaJwi|ASFoU0+?(P+bFF_X52CS=7`t)YLZC)`4iMt8Z>-Xl`t3ZEk66ZR=?70BHb7 z0RZ^})(31qJUR*(eiBgo%*^ckJc87hmsbF+0c``y-rn9pUcbL8_S>D^-Ce9C*eluh zQV4d(c$H4(oP4pA9OnqMHSSG)%#IKnB>kX|_yrM@H6N)@q@n{Q4(Eu$a8!vuE19{; zHNwF>ci!^?#!hJrDnS^#;bl1~jMA=Sy^2JyQcqS2Xujm!8Bgi=)8`+%a8GCq2JBi!%3OKwB4ljZ87V`4u@$zQ#@@4SxrSkEA;1`G& z5Qr8K3>Op%5fTm(7WEYs^AtPfd`iMzLh7*;*nc8tDW`B(@HjGI2UL#8*^zAiZ@_Ro zNYN3rjmXmXm^(QcKsqHgH5I@*Jv}`GKsz%tD=RA-06ZrrH#avAz&sz3p8tfkzozKF z&d(bg8}~Bw7C_{PBpu1+9e~aEQuQC@>Ibv*;o*^ykx>BO11b8KFJGpnruMS*S)hx| z&CTy&8YJpVOMtdlRsgnF*Vfh$_})*;kthd1Mqn5nX1Wgy3>f=4ST~9vsu}FJTg~C{ z8aU4zer_iL?uP>0cLk+xD_p#F)!OEfhllsefI#qojEM!$#$N(FCVzf`BNF&i-up8J zf2@CB|6l$I0JQ7@1{`M*2U&26t*8Q-ZBwwSYHI3hYU^w38tUpA>+2iA zS+=pUxv2?(lor5at?fv#bar%fb#`_GLfgxI0j+)f*bff2$n+N+Y!Qj?;NUPg%z`s4 zNNU09bq^GKN7p?#>|+6OK;7Q?#(04CzEK(SM?Iyt<|i2$UtiYXD2 z7>(@aebp(ERbJFGt`thCdt1$oYg!}iFv!l-hA5@IYX}yy`qEdE7NdxPabc4}IX$)| zQqhm~>_Z~6<{;HbT7mPw|LeXT0x9x=`kNQnWQrGSOsjtNEF?SDK_BtL$wx zKkCkQI_Y!KGc+85+AK-&bo*m$=jyW;%1bdm(O9eIq>k1-pgC?JNR~DZ(pi-bV^}|G zORUcOb2r;=;8lhgRxP)0*AtE4Ifuj(0bUH*7)?|9oS<&1H;Ad&;Gm ze6ZF0+3^cR5Ar1iN4v`)H!3P?sVvlin)m0MPQ{5};3j0e)hH_5*;-$k`rK4hw7UyC z#60i}oy2V5ITmB=fE}*D#DG14JoBIfk-piWBk7gc!50+P6N66FFPMj%=>yD$T$ta* z4!ME~>DR61e4S>)9ztWW!=7TR6T@DThge3uWl64$_$V^QjrghxOpf?z%Cn66>*`+{ zeQ9tdZZyEydU7=I!V8wMAd`S=W3SBK#f`nbkvTaQe7llmJmhZYweipgV{zkeY*#10 zZZ&rxF`o!`W{jVRa2NP85$P?x-X!6p-`g7HZxlbN7~gJ0s4i{q6Ok}5itZzR@KK8%kI;{2HK zuGyM(COz0_iseH$`P5Wqm-UHB(UHTlvpGYv4`)Rud;LrD<}2Ce@|QcW&lRkXy`L-G zUY(jNf?=}H7o#7)F<*kklrUeqx7D0WwZ5F_^o@lI(yIvzl@#}<7pkb8*cYqm18*$W zFvlb;*0N_!FV=Bau`kv0rEOa@2#qH!HHxiGFEvSGax6E?9`9dhkZ1a^+^Q-#vy9kk zzS5|uadV}^;Od8!PUHI=_d3owajbTm1m0Zj(XjVe?Y)sTv-ckicx z*Wap|T*X}M>Fg}AEcAZ#R8OhMEy$0bKTf1YL?};)CyIv)$34t;7@Hm&lM?d~*`Y(k zhcE~+(DBgGanaGR(acnH@6Yj|9E0Tq*)Lw63d^4+tnQ*gzmG6gW2tf3O7<-b6o>V1e@?! z<09C^hfybd*DwzpAX+Q`)TbKFaW7h5A+R(3T0>qK5JvO0K%}yRHb4IdB%5ar8 zoyr>|n*{M*|5TrYWD_?^wcPZ{HUyhA7d0BIx0h>^%=Vvbr zSNpL6Hpy8UZ;n)Xt6l)uq&w~U=f;A(`+>WV5(^#|Wy<>e7=DDH@wv)}r8E6i_+q=_ zJC3Wnje$jPZ#`XH<3SI5f;XCV`q8M*)v$Be5m{kRw?n($K81-0(b!KJntif4k$C*u z!-WgRUIkl)vA`4%50{_SE&c^}4+=8B{MNsHl>Foq?qVL!bZ(9~ZuU1^Y<^s_eYwPRj8J<3U#>nWLvGIj-=Pq5iaQV_D)618y zn3!BKHNE<+&hj(m_5aetoYfFI%$}yYy}h-w zv$?ag4neCBv;;x(5HtlrV-Pe1L4y!9070L@D|onc!(LH5Lh3MxDhqIyMOIl%7E8ZX zSyG0jJWhza(qq9#sy!Lh-qbrc57j!eoX@w~(7srIeA=vYJC-}NF_iweYZsEx9!=p*m5D8Qs3t;-G=1zY~~ozU%SDTQAnVZqJltVT?afbElnn z_BE3bgt3>ymSOn+1)?i5q4{H?D>EY*Jp&mv11aSXL|34)B6L?0S|VbagSsoSD$E2* z!Zfs;;Az0hCcwod%F8DqA|m&fMORr_b)dM)$^9a_s;VMHS8Z)0kb9gtbMgH7|7g** zu(0?)Ky+>Sk?0C)t%xG)@CcA?#wRC1K^1W#ou3Dl)UWCcIF170buWwf)dBQJUm!9G zPgt;Q9s=xkYQ4B()yXwS9Ct~{@2+zj$+`$KL-x*Emn+;b#h=_zB%rTyVZf;rRnnxF zvSvSfRQ0|#qmdq5f;p zX%~W-Np6YlFj=T{*-OtkZ&i&}_C$-cT$>zj;81iwJEt6_%uW3jqM$Ak4I6;5!I+Sm zDv(t%h%pFc2&f&Y+0xm#E4cr8eF_KJ_fNe42^oKX>p=ArUI|B3Ka2SIbNL0*1cc&+ zMBa#qdy7liNy*-q1)8eLITcM!O;G;)TT=yUAF}J=ze!UCf-1=OfsP79RG^>&`4rLQ z0D2pKUpW0d9kn#A6k zB;H!2URvZHS`_Zul&(57&N}o?x=apwtakdG&rZXi7zjQx60b&ahi`q9Y z8=9M50DVe7?_K!6ltCZtQ##P7bf5}S+t^go+*aMzRoT&7(esQT!;vbLY#T%JUj@+&Fi~)=&J1*Sl$o`TbkAe&>KE+ zuW5}|4d%b*TAsr@RBXp_{E0E?w?nEBjNK1F3=aXZGccGg45kEwNy1=!FcOaFY2QGgk%IZ?N_~H2zuN@H-Iufh_h*C32q;v-t&*1%#r6 zL<2=nxt)@HE-7OzBX2IRd{$XaU+r&FJlHG{|EUq0(sG4EHg;9IfiQ@P|*x$IN9 z;*E$^@2XWFWcXIC`c|#@Rjv3}uLM*t2Uah=s#yxIS&VF0Oln)o>shM!wA?tn(mB4` zKeaYIyEd_~KC`qjzp}Bkwz;~#xxTrD=+^^jC?XL>C|bWk&B5x(!MpotItZvW2wH)l zWe8eCo?2&icc-vaVE9<&H1m>q*1NYUM4clCpT8imggH-mN65P2v#3V}@eEZupQL%> zK$<#O?MlL9bR))>R>hO;jJz#2oKZCpPSeV+s5u}NAc2PZHR%Kt<_hZv=sNbF+KlrZ zzV@|cMzB-GmFDDwlVoOOBt|61)Q{my;N$Y*9%ea=Nridn_#t#cbTnKvR4h~!3=|YJ z6c{R!qCr~yI~QnXK!u^A!_W_*9KuGyK7x9L5RH%+otXR(ITa=q-C;TwTo!hGcJ5=` zf~0VlbSq_~?-&~35)$YU666!|I^d5tj~DW@@(MEwO419<(~Bz8i>q=< zD+%gc-ED{|YbGP0c;A10d@59G(io!rMyuq3Oc>s~J*5%5lC@5cXCJJMB1~|h;ri$ovFbp~v zIyDTP5{7mHhDriMA%wwjVBj_k69zj3PJS>L8Z!3&(jrsKU;nj5IfROS6a$+Pn?RO; z+?<@onT9!rnX{OayXr5V6TidR&%WI2sHuU2jv8>X<1OOl%jE-ot%C0bg~Nnpy~S1S zB(?9!o;Fo9G*mIvR@c|k0EatGEjROl7v`kgC%v7{3ly&YZ>O4@;wUyU> zCZ}sJtLrGE>m;M=BCYExt?MSG>mjA( z<<7p8KmStkVt~@+02R{!wW|Rd*8;R}1nAugFuW6R#_HwSyZ-0z`CYX3HM#F|^?|p! zjpxlr9+tN5_nx@fJac_)=VIpoI$)ig|5uvceh+6KQZwVz^TN|hUZq$0rq{V=v^ZsS z+Gq4W%j|!e_4!HG;M44(XF0=mxg#&~M_mg?y^BW!%SK<74TqEsg_VDfF7J=8=uN5Y z%&l%Is%fsQ11$gz|41bV(bf*y01h1P=4NMpez^Nef8XjkKRo3ja3%_4Q0!i~RaK1g zz?zxDOg>!3Ui68$aW-AItaBbG9&VVWf}bY_6CUoyZR%W43b~``HQEeH&)F0poNrB} ze>b50EtdQ@iY5Q@1~hI2(e!|63ZnnKgzhIT13#vl11chWB0HTU9oYr4V{*ria2~;? z#6EQN5E>2|>LFB++<|LPe?hdQBCoy10njo4no&U;D(Dmd9j9buWOQ_NJUl$0H2`#P z{@Hno8*~jTrJ4 z_y+K82LtX2f#C6kxRJr>0dctRa=7hsxI^GQw-+LKydfT62>ue{4TN}uA>L4kFC5~J zgaqC}La~tO2k2BXB$W;+WI<{-o^_To6yeQ*=c1L%u`&%l9fd?pgE(n8iVfY5=VlQA`aD>w9>BI@S``Py*^8v!93G5 zyf)%e>U)?lyf@J8SniV)EOY59jZg0#xK-uZnY_Yc9xY(K8?KtVsP5`Kjlp0rOBJED zH9$rbYc)vsNd1+_V`0w7dckCgu*ZD*74rzM#ED|KNuu` zNQhD)e6^J&Xj-DZ*+(e5HixfcEF2#=xC*&=Dv>SK->a5?T1oj~lhF5wKbTZj@bZ@M z^5ygKXYvaq3JARu5(yCz^A=f@YO306t2*nd zyX&ia>T7x$YI_>%dYT%#n;Sb@nmhh%FE-#oFeM3^gh0grF+s7ivb46gv11R5wwl<;dE$FMp@=Z3`-PpyNfti|-BU?_i z3BqNZaLG=E7;q0syOMI$t_xVat$G^GSF)5n_qo~&P1LtN*2Q1!egxK=-YV5&QM%L9 zjuh)NpV>W7`3tu63684S#jVPnz`}mRt|p0z$MMjgI{#^$tmg@#u=nnXXm;uhX6cMl z+G~A25m{CjyWOOfYWc6Uh&J5T)Kwvks4ogrMX9k_0li8<8u_f@X)l@?9DjK)rXm$RZ+@z zdUN*dgKWze6<$;ti4@G;NoV&(98la(1y2BC80qgk0rnpVm?trhsvQMAc`R`(TxDE{ z(aC=p-GAgKd=K_NHaGc8;tZdP{bP;~8;cl#{sHYDXfCgDCM<}oMi zxgy}XiOdmx=ZWF9`&;1efnCsRQ`l==%zH(`dr{VBR>5al*>_UiZ(Q4NSkHgZ=w<)8 zfR83YU1qP^ErOfxhBQ2UQ}ZmW(mA5kGpaD)UGAH>%y$W?V2<)XWE!Kh|8wi7q1u7* z^1&}fLotLWcBxOx> z#Hc=2i?-^;2??Y81+zYhJCn01boXW{#r3=_h=N$G#1ER=+q(UIwI;mC+M*X82x7u{dL~{E3*F) zdcVUn05b>yuWbaLy*I?XSEYTH6@3=fedl$2XAS(O&iYSWdO2zqIC$$---D12ySEMA zk!7!A^8Z=rt*Wf4scxvRZE39QXm03fY3yrj`rO_;)Y&rH)jHnYI@!}U-P<<%v3>qy z`%+)WN`J>{f5%#X$NHy^jZYn$$k_VSfr!tYzmBf00TA6={k>Zs`?h*MZFLQ7bq;NH z3~zUiZg);>cTMi}OznJ}+3BC%8C=*IUD}ykfo9jBl?@0~7=Z+fP+`9Xvc$NHm5)TP zW*DN$m&ACTIb4Pe7w42NspWvI1M2Y3mcm@Sq-_i*rEQdDN9= zPI$QZK~r?`Bg%^}#D%O)@*k;u4ljsXzIetta_nY$7T;uLB=HH6{1e>+7u+3Z)VH&A zriUtTP{|YqdoP&Oc(B|u$+uxLt#*=PYJa_AF8NjK{ac&*Tbue@n*zlZgw}g-I8qG8 z-Uu6pVIhkkFf$nJDhzfJ1~Z1iPQzeoFqjMsCIW-OVK7!0j2Z^AS@4aBng}R}fNBUR zg&+bI6Ahj45Ed;qF5eL_P(or%0&0Nt{`9OLSh-5MxNH7m`C~7O{fkUj{>yn)FiB82 zT39q#R2<}~`yFm)|L$=6)#U&06+u$}l~cn_ZEcO6T@5|G4Sk>LKMmFmj?@m1)r?M7 zk55%i&QyMxtC(IWpII!MT`rqjDP34AU0g3&+9+AxEMDF!UfC`JvAXk1tU*P{C|-j= zl&nFeYf$+*RIv_Ku0z%9Q0)d(zX3IFKy8~)_a-#B1x<+ZN11;_BV)4Ot7Y0zm z`z5i^Y+#Z>w+BjJprLU)DEd?txnOf?w`2KSmhmFv!9y3;j*|1E#5k&pO>-b+Y=U(F z!G{v&1neY^Gm#x<2Pva*Wu z^2+jxs)|Y=?*g-pnyRYW{juU-CW~tu5W~gwh~eV;hNgzbCNR&@3>q=R9WaEC zn85#d&?@UkRr}%b@qx)NpT11@P0xOuneUlf=$c>ZTv%>jTxnZeZCzSxSzd2j+2~l^ z>|fs+-q@bl+?n3mncLb~+}c^%-dWk+S=&MMoPo}>4G3YOVG5> zbtJ$*^&aG=Eq5WJGGce;8J71%XM5srpgB_IiKb>GyD|6q6pWec=nWP$s%Ppa3?aXT zxjvW&&gH{5$kc0V19lg&{b@0ZVUdI=>Ghb;NGc4`cF(?c_8*XquSKuMV#*v4bA-i` zgsr<>s!ziXP9!ANKa`n86@6igX*p6ji08hiF7t!iC8aOY7*FLtxN^C|%SJwcf^1Vf>L2Z}*9ssRr*{U7Q2+8TL3 zzTolXs_WC+FP_`{TWoOt9EN{pp|NLiS6NZH=MJ!Ea#veZQ&(GCUsvByf3P6{;hzDl zu)wu9e)ZKv17P@@=iNcmJ4Ex%UPr)hE100~8_ap`&139YWqjw8ffQ^GHrxE_Jt9l& zMq-%T6>f)hjMm+EG_2GKEwb7Si!h?x1&@uBLQ(6ol-)`3+U#ncNO@ldxdr(AL`gr99?z6SG(Rx0zcUj(V~B(aKQhJ(qQoe#vU@ zmYk?+D%NqhHLN%eo~TyRyF4kw*=3@6@gqruFpJ5XmJe*L9OpfrY{-(S@`isFttu~7 zGH#iBpWwDbuD{L&Z(>X0^!Q+_3NL*+^@*ZYnIzd=G&1esyKVdogKA2rPbG)X(3gZy zCH7XbW^i+y3pB^MAxIXK%oJ5Az7H$0EVL zXA6SoU#fXXhUGA@1u-C?1%up#M)lP^!$!6JG1FmBhnyA0F8v zPS8)g*dn6GrqB8@Q?29O%V2*_y)5iOR*brrto@OXQ=ku`r;|??T|0KBAlP8eFyV5Y zh(7tZ9&}+CI}u7M>=dF$76kW-o|ua`HD zUDOPxa*3c5CcLH=AzUe*)7E~i>BS&w!uF*O(`RBR9jgx} zyxzOLh99Hx^3dGlk)EX(tx)*D+3A|L35_UtvoL#a`=nYdyi|#WH8Nf=kZl}0T`}PL z>9q42z9CGG0q!hmhay&9>zgQK)`*zDyzXt$@1Z?k8%ulRc3+wzg~h(l>2;lXB|_65+T~n>2RHKtU_8GBgQ7tanKgGl5?-_jA}4z<_G;+nux15 zbqNYvn)5xSXF9j;yTIEn*H{XuoqWvLQq#eE@LAx45&`4+Pka{aasHn=i+|0{K?(K` z=xGXuN(vfE^72Y5Dyr%lnt$6_{gFU!Db~ zidq2(*FKDBb_c~2S}B&pWJY}x1efJKsqr6flcq+Mx{<5hpOW(z@Im+>n=b{jcm?^vIL+ye5fTIlZFLN_us%*5)SVH)d zr*xCx#jIuP=?NuiT+y*FrQ}G@rfPpKc{}oNq zz|)>9i<{#E7i%ylvm3%}n$DD!<}?eHBJ)XcrW0^RayCXX21YWPAN!tsbvz+PI86fs zls&WQebW;vYIZt$Zs32!!70qkdrC-1_9vz%NRR0s+f09RJkbO;(~64P%E~&x@kB%8 z7srze7l2F$tdVXaZKkdFY^IUU^Z$Ok+QdX)I}J)rz?&A>(&hq9ys)sOxTL(atg@{9 zFS<@6EvNVWruXcpe`Yxi45{}lr|asQ8X8*K+B&;?KKAzyfSDWMy9s>LfWHY?3IWWF zz9sGZDE;ei5M1vI@U44P4Kzi=p&h?)bTui5L&T5{Z5fU1a~!6_=~$LDGF}w;4|OAM z50^Qk9kUaA#T~8e$4n+~Y~VRu{R*eTFyBQ-UdT!8k)6yj|Gr9BGiN+wMbDb|Pc4iq z=zI9cNyr8gFR8{xeJK)7H>vlDU!)>uY$1`)qb&>8cOm6%TwtWDs|XxO92vAe9id>q zKO_f+y>n1PVYrA+X5y2yCs|o2M3^Y$nW=SHXfLwT-(X{W#LnWy!5+uOmB-Cp@y}^a z{=GBxANc(H8E-(heEIzR=>q&8gaqCR3%wE(_BbVKFDdp&TKu-`sjKo57ZfE8l%#Z& zr8HEeR8*xERi)+Cq~+A4W!0o*5H{~W0UU68M`BJL=`y6Dpa5W}rL3&2s;aB5uBWMa zT1UrFU;m7uA;PTe{P{~45lZc2%22aeJJqrgQP;S8Sv%%g#C zbbfw8QDIR@@t!&SK1?hBoH;xarT~}wNc|Z`Yif}gML5F)TX+CdU<(f%%z$wja4iFZ zIZ`U`1)E{OS{R^^1K->cr28RQ{Q{Emue)EsVI0WgNLOh@N)9Y^ft@s<;eC%Xa2Ed# z(FmB@!%!s4fJu=QO#cwMm^0mAsT~YU#MXKEt*j%?uHg;mmas}UB8fY=*IGW6yORut zE}QZ6*V<7v81e{dT#{kq#co7vK8zWtPir~t02V3bz{ol9DtKOy=!ESiU?nInpBIXv z_4CAD<2o$mrnDQ5Q~d5@R}^uHg=}ypM~y2{o9jM(0$iq}c)$o@bidirLP)r`pk;3p z6V-uDOnYmXz$^W411w3P;A5gxWTrXGLVt^m*_oX!j1!poaTReRoZSD>M#k@P`HMXE z%a8#tA~#0p)(E@`BnSychzJFVi2%GlmlD4xbIM#^@`9q&X(ee56&VFJ8F@8XIdw!J zjJ^;7P`DTJ@_SfBz)?vF5TUk;ijJBZ0+hgcR7(qiOFccK)2EI1p?T>NC}DvOP3B-% z%f0~iUx7<-R7P68A5^Z9+Z!^nGQk1|#P%hyda2+mQcJ)Z2f(QnWuU(N6|ejI9BQk+ zu5|di)#11FiQLHm@CWM7h|LVZ*BU?&QF;a_Y-|Bmg1|=*VQt;k(ca#PSk{EJe+R{9 zaApQ#7^qVLTOt5HAcKJuFhJWMF&h02h~IsQz-1@cjhCy-o1l$(O zGF;XPgYI0pluwwv%Smygkm`9l=@%2KB)EpnA^~KYPSC)Nz%D86P#U+34QL*#go0h%hXcO{ zwlp@D7#8jTI-dLFJeP<#)bN?baj3bmiRdvgj^m>f5~1OeqGF#w!#sh3L5_(=f{jXu zgNl6w1%{6TBSZnJJxKdu$5CO_XfPI3M0=Sq(n3ZF9j18*RRDJ zX)F?P>=U9`R6>{xLWkK!aQTD?gvE#@#mN;UC{<;twUii7tFRfXb6?gFvCxpYuc+oA zq3%*r}`UM6Z7kxs@hzH(SJ}SoB$yxI?|9ORJ=7honc3q*uSB_n@Tru%!36 zgy*!F=bVrym>>L|!2o2}u>f+Y5R4Flp~6#MyU2jVy&y3!NZ1P!*dH14fp~o(UO$Kz z%n=13XNulJyipKu48)rN@ufg~84zC<#GeE4=Ry1h5PvZu1d1WSB1pJsN33W|qIgrb zculEfMYUvEt7J*PbkVeY>2B%rRN@m)}fw_o!-suzRk`4&5eQ0)v=AmnT@HX&C%7(!S(fz8*5#g ztLNo8IExLj@*dv05*sy;#rI zrUR2Pb>L55dyEzM)2EfT14rT0p87?uC)otpfunHDYqh$}n=Kg@!?gw2_Y?c`*rta1 z>yA%XxIae20gl4lYAOdEh0oo{UaYP`I0{d9r;dAt$N)#-jkIg7Q9AD{ZFBFHcO+j9 zv{ri*KK(KI`jonJp5SDEG0rAsqj0t*rsqwi;I*WUBAexil?dWGBhH~5FSM(+ZW|I0 ztIQ$8MO~HGOLJW*?>h^{7nsZ&!=)}67YG+De-U&_^$gmvSnClw-eBut13&U`!&0E( z@y^ESGnY_Ax^PV1n3P?xd(~nW#(;Oq%!OmTh0c)u_$B5Z_SNVvnw!JdtSEW?wCvxy zcwGy+WY6~Iii=0%PAM7Z_)c5B6Jcpk5J&riwNNit%VQ&4X$F_6c+qLCRlLVXW9hiY z8zNQAs71Q!IcXZRK1(z;A60gcW?lVc({$ll6oc`l$&i3|hNWXKf}@Ypif1XhT<~$; zn55uxMVagqtFbL*6xTDlGvGnN*iP}rc9Lw!{S{enBtuF!rb`U&!_B6U0OsC4@3=Qk zW|ts8i`eGSpij|pRt)A>SfiXzVnxQCdhHq?zss$}?pH7r9}$gbY&2yYP#nX4`O%@8 z__!9KP8F*rNw`~j!;wdCQifScrX14_k4&doWEgQ?PSeFPyYx=vn4$l2JDEkq9Od=d z^p~{DO_Eco!2t}>=q~Y>-jUSJ+aw5(;MlHV*UiPu3OFT1!D3YAiw{xNTiSZ^Z<~h` zh*l0Kah*%xxdfH=@}!{?Q=}R=I}SxX&f?3Qa(^ekJ?}xnL}FE6qy5FQf%>yM@1<~& zt6Y~Q@C(c@ZwBM=I?J6ED0#+@#2N(ob5hcaI|p8?3D%YwnsCz-U>|9<-956di!lWE z@NH<|ZQ#w3eQjCmc5^F~cPXxyZQ8&Y?#ZH%!w7C!va)(dSf zcir0ESszc@g@Bv{HYDJN!7vqzQOW0@VX20p9Jq$%^Y+xZ;aCcarAJ@SJ20z;A3j}ON|HP8$n74EdsVTFym$VEP<=Sw{pvEx&3PwC z5;uatNwJ)ke8E{!HR5PsbvdJmrL(nb1W}A)1#9o53r-}*dxhWN*rm6!;K~eP>3v^d%9;2o|v7Gk{=6GaBB}2zL%~@m7wSe)`;U~+{P2> z^FG4AiFfj5Sf%J)0;gMiSA9*Z9T|3?d$NTo`p8iq6BDsSn93&0TxHyWA>lv#I{O%_zecHpB8l3mILNXE{JD|<9maL**NQYUnUB$`k>tpi< zGvYcZtGQCE-gOQq`8;7F*s|atc%wD!{#~<%zKhlT6R5a3$zy{2wJJIf+x<^h%Xl|y zIl#ipaE*IMsdrQGgy@G4yQ7<^ntlx(c%hwP=qiR5*pA&OW*+-qHafEC^e&leI1gv3H2v2f^A6eJk~NykBQ36Me}q>v2Br$O?WkX#NVn+wV0K~e>f zWCDNH#8lWr9(Dhd6W*cPD2Hk3hEZZTg4(M(NWZePX?|^JN zpobmMqfW@S6MEbMJ?(&=bwJNMAo~u;p#ySk{~9map%-nCQ!6rBAg5+zG(t`dkaHd6 zS`E2ZK;9)gFAH~G=k0`MZ--}YM`mojOWTZ3*+@)TPflG;O(n03e>a;wX8v{ zYfuMBrq-d4Yf#@R)DJuorlFxpXygktJ`GLHKr_?O>=ZQj1zMPbmZqVVS!it@T3>`V zR-mnQXy4i!JX*3KyK_xu-(U`?zNDWdVUEJI2I2tw7#hpH*v`K(zDpmgS;JA45O==to`U*S`zMd@Ewvj%r5Q z6*g{_b@?O+p5)s0&ORGBEOXOq(^dy6D;R(MWQj~cO>Eup3gyGNjjmAh&%#XSPc5Tl zDM?^yUp;AkWOn?G%)FWb&8+ z>(d3X;UQ<$k?hM}0XH#2dEGTHhl-7uTqR>W<{A^_6iAGUBeW>>YQU7=NZ_z{6Fq8U z;47(elw?k(4Pt^fidn9nx~t#$?t$Kzm8WUzZ6?ZN zQx^>l?=3Q0$ugcjYHt{1IY!sSV_$rU_H|HP4LZMC%H;_`wQELX@z96F%~;dq_*%yI z8`-txR?Skp&iu{TR%8hq^#)`yo1uyc9|9a}obSyk8e+eQI`{4hqh^UAS@K4=@`dz( zn{c*c-G$f4vg#K%&zpW3v#L+lB&$P@d3H)MA?0HHBTxU>>gzL)?pJQI>XvraO(#Cl zC%K)Nezbnp7yl|wl6zDuj-Du*4lZNBOr>A_hYlnC*Y>$bamHV=;`OlWGN|OUm2>5V zSf&uGyvBOJXzT83zkX?h{rPH))LpW_LuG z?+VkcdAsFad68bLgp=RXMi~4tx$;Dk+ptad#r{?Mmma>cViyB9n;|=^J1?%EB0VE7 z@Y%uog>}8T%GtD!FHuWp2oy2)99OL*G=2Zj4X7j9Yhmn9gR94^**Ofn)zadw!SvyE7+7M zR;qu6@l8~Lf{^37Y3Wtph1H|xFQ;&|-`My0Z51p|pLw^%6KIRJk?*_MSI00eDd@h; zHJ)R=aP6oj!{T`Cod>fIjUUNJr1MKgk~M3tl46&0;nW&-@pm7~O4j8!*C%Hu z8F?_8LT8L>5!2S^!K#CGP1X72R+%czI~uC{SahcrNHO_r2VK~62&{B?66#-a3dl|y zzB_7iG@>QSD(zkN@Z}<3AGrSn^BvhsC!M_yq1gLN6T=mA%ptOkrE%qejAL0U5ClSoXBsIAHR5<;tmC!4;{h- zy_)-n^2A^G5MD0-prsVzpN;? zx+uH8D6^$7y`wO-yD+)0C~2@LakMC5vM_G8;N3!g#7gd)_3Yry%vW1!LEA||I|;9M zqJp8Y5GXVP3XOwar$9kjP(VHuPy~6GLjk2wP$?8#0)-VpF~v|q8I)QMCH)d1!hWT3CnH zkfxNsQ7ZO0)|Q&P_}3ik{%z-x@!rlOUgXXrB|9da_;w+{vHlwKJCEj*7)t}VtX_x2 z5yUjUrLtjM#!hFJ4;S=c?T_^uZjCu^dDKyvpQhDb=e>S`tM>cTj>c(E&a$Rcmps3m zaYrrKn&V@V#b@&)jHfLMaxafgJ`Oug`3bQ>@4KBx@>EK{+IckU^ai0&Jmi~b1v`&c zZ4n&%{!AIzd6YKYn{B00_#toY#-~F2_ovh%LJo^9*a*SON~bbZX_y+9dddUH&c z_^twnusQia2sBK0dZq<;>|;`zHM61d!#S@6C(ny>!ui?(S;D7p1@F+!G~EjfvEIJ9 zD*c#0!>nYG)DaKa# zY{jPCDShfAcC4W|&yz7toR1wN7jRda*PFzLHD3%^jaO@Wde7cq?h#P1VA8lUdsC47 zSrZGEsoMCn02+7yn=+UEEI8+LuQI=LZ9AVbQ*nu z70*lN^)bcD)ul=8*w~}jdO-}=Jn>vK_!YFvm?AxMd3yv=l;zFTte&tAMqCi69g{fh zNir$XD7F|E4IL4$VHQ#>+~{+Ncr!d{o!e{l#V)24Z8GjeZr5mZG-c1!Q?K0Gsl<%U zFT+=8m4&CRtY=?Lr!Q3WL?$=N2eZZXnUjo4bah5uGwtDd7!~%);{<2mh*9;cHv$hy zuEqOj1m6gLUBi}?P;_N==tF#JO;TnG{EWE+|LB=l#ZAg!)85C1G_oT@nwd$SN7j^X zt1Sp^P$d%MPv6c7*0V9b!q@FLQ#Ebz$TF*`;j)L#aCI6@MT_TllL&9SPSh1XhqV5d zmj&5NCO&o_xgMR5&%4+`b}Q&gV|4Q~<{I@&95FQ%l)_Dd>!DZsUade&d}X*UMs%+~ zQz%9Gjd%JB^5^;yhcfg8-_-FGm+sW{5{VrdpDE?An-FrNI>l*o#Y5wi&1isxr_C6( zMPttWH%~c3r1ynx(DI=NXoMC)BY%M({-yuQ4~6dU4~GXWa`wwsdlMI>yxghWU?DP_ zKO3tfEAs^akPw)@ zkd%~^lao_cRz{ezUa(TW8!P#|S=i+Zzxx_5($4N5<$*s)9YC)J23Ww?4v5teNWD55 zDOm&6Iu;q=4fq7;*x)Yso?u8c1dozH6?SYN?uNtsZZyA8UX7va{tycl&T}H*j8sBf8+=&cVSU1YZ03KjcvS zVdlf!?8k-q*`-f&E1&1r7C)^oEo>}&-kMw7{)9 zSTT4f5>+hv!CJQnsT&Oo8!H66Y;OPFI?ru99$}q_y+{AP#dmIMcra~!x-HOrgH&V(D-#6F1NdO)|$^yI3*q z4o;f4gQ*usug}^pvGdCyI|CW-H^P?{+Z?`WX-|?*t8T;!eZ$BWWgGb>^GTWIWY7I^ z*SFG?IVu;w%NstjLA*Y`H@y|}tD{&~PjBt}_be6o`^oyx9QwQ$``~{>kr?Z@Mgqn1 zSzRi5XEze)NE?XX>`m{SDXuzsE9Vi)6!(olLHdAt3NK5CFZQZ$?lO_?r?MsKsl>8* zadeqUa58?LHE#|i)ndQ&06k9nK?hn^a1Ou9GtQMEluYTxM#8k46CaIj?V>CritNl6 zdQH;qx?nn5+Qu%8r`gdG{~(-vuU$~EaRj#+|zFh~p&`rW3H6o&=qT)H?5{VL0AyVgj&dEB< z%Gt=tTgWRID<~Q$D(NUGX(=gbC@HHeE2}9ht17FUSNVC)|2V2=2l#nv0Gz6(rna^= zppXF#Pk>hiL^9yIZed|zWo2c9fW0^Z;ES`XtE-#4+oiMfdjt%yR!1CQu>P9^{MLV- z>u1OJ?A!n#wwrMKb%ghNKtKQh$ApH4MnpsafO>3fY+PJie0+RDLPBC{lKhz z_j>*W+@67uIvlhDB>7g(?9f+Nfq&=v&j5?`v$FxvEPpTn>g9K56Ch#Ez%T$0^Vbg0 z14JAETKxi*hd6wFdtC=zTv8v8J(=~nN{G6pLz8&t3YD;`S}5eXkcJqaBwh4 zEFj8`$gP+dIP(LMTOhAMR)Ld}l7h%BM0)+qt(=^k+}zx}yuAGU{DOjl!otG8E1FPS zTVG%Q_|c=rM-5F4kDDKZXlwz|2%@RAsrgBBOIzy`;E@OH4W0sP%jeHu0NYBCM*wRA zXwd*`0&rhvIRs48&#+(LGYO;;Jez(!Yil60ehrXk|G-&a2mW`6_>qzu0AL2knEiSH z<{QXr0`%ygH3Mhg0K6GA1M+FIuEg#h9gid-r{SVUo??hEt&9@;mAv#w>^^HlRhI%H zOH={L&ip|;8SW;fg~97AMM`X3rqeeml2{&u@w;7YYT_?>Zi*Fm5FN1*$sM9-HzkzG z@1kk1dG9H+k8+rfAJ;?Y*RI|yGHf*_cb79Z+_*Uo!qt`zQWEeu+rH>g6zWDLSz-D= zz!gPfO0&K!K$%2{Zt^Q*S`XO$Fat%P|F~@ZC;Rum$CyUYvsB$wRg6{S&dW(jNhtz6 zsFv3MXi5f1QjnhD>I3)Qy?gg^a_;}g&0kaVyU|Zc3DC^~r|irI5AK8q;_OtEm&4=i zR04G9*#R=Q-<59vTGT%aHcd~uILq_sXV2-{v&D}N+{lFP$=;T; z`?B3v<=kESm)LkOQTh~QQ6tXqiDHy?NMICC~lqEX!uehR~lBm<)iem ziF=B7@GN((eolA0ut!~7UrF%dQA+on=hO$;OU3eOo$oA~_BMO7vN#pb4Y`dEC6TpT z`5$a;BpBm5324n}3PD**XYS%iGHGeQw+|W?AvRO|7_x6_mlsN^AC7CG8^|;p&K#+l zuEdh)JA3~9H5Bcr_r9aEkwi7NOk9HRoS9+-O~(pwWWF>e#_?hv5U8lImdz(>iZ0D3 z=~l7#CJSnEC?^@qWE3Tt+hRJTY2IxrOjl3LD9ljF=P1mSu2n0@(zjJBO8MD#Kp@=k zLe>xI_#c9}``cZ}57%uzxa)Q@FGnOVM*uIo4==kLFS{Ktn-MRo1}}>OFN-8EivTYR zCoeM_Fxll}V;A7$65{3ttP@cIK}k_D83{>w85w0cIaNhP(D!SeKd%i25?WdYy1GE~ z#ni+EwDZ7n+r}E+hrpWXxAdUfKr|MhTmRWrfR+N$uK$N{ zPeA1Y=-HZ@nmRbNy#YYmo0>q+4luKAa2H+#z#ULgx_Z06vr)biQhI?n6I`F^J8~94 z*q?y_@K`uJ{R|s>hERX;;uQj(4u{0P0eVb`W*?4Fhl{u%iWl5L8-75|Iy(!$lrDJX zIxAd1>lPf#{=H(Y{DpSrXZ`wK!Zs0LcR1$^6tAymn0JI#FDPV4$5dzX+-OMb7X5H; z8JuUTS_5o7!Oqws+%vb`pHALKv#|ygGO#lqTYL!L8QVRzP^&8*&JrhCp9@R;&~|3) z+3a~=Ci& zR^LoTWAF3Lbt>NL<26LXH#wxdtHo-~$yy$H~ zr}f6|q)!7pmrq-7s(8)o+CF~%eztLqrS~*&Lz{M1>LhQl4IZlw4RZ8DI{ zADVB!-FWa#?A!a9G`c(QJ?pIQe3)>uy7NwWQ7h;@@x)9p+Ued*&^vbL`=amMg&4w! zL>q@isbfoV!`K{4KSpvlEY3#pKV_eb79Mw=ixFQaor{&;U7U-PL+6-}S0Z(pSB_)G zluL}GHnmLBHp6g8exarI>59=s3X4>;>0O<)zT23No?sABl+lqA!RqE(MPZh8$r0Tt zJ8@X;^Ti1q<`FK7>7~#21JF4abAw4;7xThd%NO&bMVA)~;#D}83X_domx|II%a@9? zeU_I>azigk!~8!#kgqwZ}7|Tn)p4xi(tAHdCPqw5fEWwY91sb+nyuqE=U(Vh!cg-7DI8i0qX6#a>tlL9FMy>W1pQ zt~^xe(M0MHGTy{`3O?+t5HrZ`jQ+DxGcM90Lu9QIYAKxu)msNVAl1}#L4Y!@p`oX#35ZDs;7O^YW2mcpL0{jsJ?%2fZ!+nARmH9BRIc*O#b=_eAGPfC-yLgirN`_7^48r9?tJ%7i2Yi z2PLpm38hwK{JO7KsCJiGBS$zxzo^6in~}cz5}~7J2A)gvC^-@9^H5=j!Ytp>&o9EE z!#u4V-HUq3nBB@YQ_0H)i7Tk;?_6ImT?kys9~lsL%Y9w0^JoB?g;QWyhwf1v(`BTR zYU48~dX9asR4LxW!DQPPppxrND;@kYHaADT^!lakG$)Ja>QSQ(Tcew-b(*rJvd~UU zuh|u3VP`G8y(*$KScUsj8~`{f2_tO*DO&3P)|V*a(fON%|MevbXv4gKHeAWaozKS} z$;0B!#c0Jzr_Dht&rU7MM#aNQ$@&Xtn39DY1O+?*KMPEWh=}P43F#04z6PIw&k?@> z{0R8NG&CHHOuVdYf}C8Ue0-9Eg6G7H@-)g}FJH<${qDAW2;YqowQDeZhDLj9kHR=xHut5yZryzW%=-zh^%Idhj0!IE8osL5u>ASm43} z2E3r<14Lpt9}%SaS&xSpO?@Blf>{*k*v@)2#8Yz{FpWXtZ-3qW`gM2bjGYLwAF!o< z&27Zj&>G;V6pW-i)e!_mQ_!;m?h5Sud{b^Qi7%J9(mSg8x;kbdu6k8D}gL!JeiHjZW zWrU^@l5c2z&y0Ur`lL)RLOAtRRR=Upgwrt9yQ{N5|24zlRpYOI6>e#tjyDHVuplOc@RGEAiHORAFqPv zFO2QOjG;|}&WetL3-%|!-L?QHPHZG3DkKzcWK=~=0y`4!YvgKC6c;jB9MVL5QdC28 z?Xo)^D@HFjE!^(<8q~KNF?bL^a*+1sIOqLw#pjdS)zij}laB3^zTJ~&hbPYuPeu+- z#tu&293D>{9e+4J{&aHu`Sf_@^kCy;d*^s*|M26{-q_LZ@Zm=H!NQ}RH+efF$vZ=_ zU;9G8^agJaC43z(+5XVJv-Emzd+A{R3;0h$_+b3{<6p1SKXIJD|G)jePyRdq1-^az ztAG37_$kEi`OPl?*YI!tEbzh458;>eDdYfnq#zXdIDhvHQ|QU9Dd>x%heLO33)Ny- zzZ0L*$o0AabocBTHZXKXe3D~Y#{tBrmj%3GjPPgJXp9aZJ{=mCbx_KnlUsMtBctI^ zTWqe>1k&MGIkV-Gt1@*2VlhV>9T0RtkgKdjvUL>{JIs=tUV5GA8iWNxDU+458RYnb zYUu(|={+GH7fIAF*$3Dda^N9dXK{xO>V(HVuwdBJI=aqnhF$1yv{XaV6+#$Uq1rYm zw>CiAN&(BcQ2;T9(y;E9W=|F1BjdQwEf}+?zJHS)wVpkEjEo&5gnTMYHW9QV2U#!> zyfnP|6jDW)NHtXR`ms87X~@I+nhg3o_3_H~L09H%#>OoPJUw-BX9cX~ea>yA-P62) z+Ck+Gy|6za_vwnmeK!l6bbWl{>XH$E%Ny|{_~?Glgpr3uh984aNv>!6Arm&{1;&s# z$A=2<3eN>oe_`!}V&Rfohdp^TK5l-cs3$)Pa}q*hOu?S2i*J~SI_DWc1Dlr%Whi!t zh1e43IB>8lbwlhHdVSh$T0^O4GkY;-rF7 ze1pIp`czN zw~>W^JYpf1-uRqcQfVk2G60ae2gT##r;9Opq#N*;(A^;H$c@PcP>| z?5@it`*@vw1Rte8suP-dj@#3dNQtY;dOkC1{fYN`WqEWq81a=P@kWu2JXBmwej82E zgPP&vN*~uD45i%JY=W5ymprO@vU{a=0_Qy+b6Q2XDGuiC$d6fA!ce?PwLRHA&4|WG zQw8`-l;~=#CaK%csCadPPboZSpF`)eVBiG7({RipGIYyp;&uyjNX7N%ZwW zcpvAvN3V>w4T2z;UtSlWa^eYpMHRf-yCQdGP>cNL#QS50+6Q`>Y~G6$lJT`6H~EFp zJa(J5BUIAXVA15(5XB&TAFPZj8tgHbO;|hIqffY}w55HHdMlE7)kLV04>(uIXZ#tp zAIk3}PFKH1L#YX0YP%cr0=C|~jn|!7E*59JT3{x6_c@O6or{adp2FvLUj_2eOT3p*8);p=+K+;<@adT z0$lWR<%-El+OKHqa|g#`zb6Z1$%vyH?Xps$C+EQ&=R*ffiJaQ#opvZrnA*!0tMKr8 z*&c}=|E+G*pm1nDYJRnqF}GoJet$<`M>x`?D>Pc$I1e-0I#_%TV=@1H>7`z*7&G9?be@vDnAh#7EBk$6Ise zmhY18AEzmD`aqGp1DTnd_RA?LVq9#8@HsD&^xYwO6=P2XDR?9;m}b12 zzpBBl;>B>8P_xk|oet^dOJ`IeV!j9xjhh289{i_VC8QfBYNpFC>0eCB;hgO1G-HM$ z4~@>(+TY+ucZMkNdwrIdu|r}tC5oJ+E@kluCXEoZPdsh8a0JVL5yd-3FLKqEGtL-B zOz?t!J32*!$TdE3LBHU%l8Rp}c=QJ4QvtsM8X1B_l%l5oi|95mWNV=Tw<)%QeZ^;w z)%TS=*SYUm$WO_;Q`RMs2B*_TzEX_mgvDN3r*EE}lQMN3zsM3?p+0Y=jcu4WU|m{* z_C)=&YH56)fLsNxy@9o?bNv1Csxoqx6cxS1@#&ECng^F*#>_Nm{13HqiG<9pUWpipaLn4fI3#lJm)F{{dzMVdObHNQG|xQdeupGPsdz`k zQH<;SBdV5-G8%`HgT(B4&k&ajvpVpM7rL3?npX{sPjzsM5HZ#B*c0>gCLsGfEubEXBhe%AbVzvBK4}XI|;OzeMkO*F1!iKdx!W=F69i zx5o?O8>+)spKs?JS+L3CH;;tL#NQ)2SyX+f{wnSH*HZE)OS*B*TKupdC?)VN76tEO zy#GWz#jo$;zrD}+{<8?&(ytrZ_V1e3B1NJCp~AeEgt&|ZSmpSb1bFCJI03MNmX3p- zft#6ykBdu0Na!2@Q^?D!D=27!H?Oj?wyLTw&;S8rFC!zMT@R$|FM`+XuaJtLUs6NinT2A8@Y``?h;%?`R!nk#69CAw0ZKIHUIo=o6Uw2xJ zqU-*ot_4tqOi25{Cs^*kb&mC$3D&RQ{_!!j;18T3+-L9?kxSts5#bb3;ZRZG>tZ6# z;-aRKVmeY{YSKXEPC`~jQc_l0TK?QQ1sPdIIeDOe3xI}dYU-L=+PeDshQ`JwmX`2L z1u(*Y)EWGLoQe+sQh-I|zdok!Mp#b#o5$2(M+tBhh_xhGMS=+y7+-kx#ERW0B@Py-(LG8!k|f z6XoW71QwAdb*}G!kBA;L%1gGlEV2k}xeyuM}t&SzT)9S(Q&O|W!hKe=)Zpf_ZN%sV+ae95JcraFZKW7s~YUAe)1uHW7P=-RWG^IaAS|jRDkLEU>?Z&L02 zr2a4U!AKi`AmNyV27pQcx|odsnb6z}ETg^yiUB?W;HePKQ2g*Fte%KM@CI z8`y-_7Rn_s>1DnvO`KN;eAqT1;5DlmC19}7N+D3Fk;6cAifU%?Q7u9$B1bw>piI9& z)j`ICTx4#f4C|bkcVtTL>nd1L_$RD}N}&2PT5dVm@Bl%E(0B|~e|)!>-w!^1_~ARJ zZd0>H-=01+%jD8rV;secnB&x1^Fa@Ry4UXeEKZN^kA|v9QLfJRy8m?j2KV_g#2ks@ zKM^5`xYhsl`~1&L-~#29E-S0ptEyV6E9Hj75KfQMTuSx13_cfOba^5UM1b#z!9Ef;uzbKRY%IVF&{s;3Ev+`C9sUo_$f*t1KWtyKPS3Pq9t#tZsnZMUsQC|1Y?! zfB&rhOIA@ofzO&&nmQ&r-~c89Je@Cqg#J(Qr2veCkdTnjGg3l$csSrCL`FvbPw=Gx zFYEuJyZT33!_k8vvk{=dU)Ie(vKxU5{N)ZusNw#|=I<>#qD{B?snACYUnRrwf>`zw zx&SYTPbJvXUo+PcNp&tV*@Qr)KY^VnRk%s8XfOgzr|sHg;-{fB5sqn1(PHTL9-ocL`xOw^wn zZZ9d{IU*Ib4E$O+k}owVY)4*}G`zDa>E+(sW%A}ug|R4(+kGB$Da)2zxRm{CydP~k zFq#U6L?X$+Eg^Amh+r@>A|gr>Qd%-{1`0|hDry!Q8g?*tqNC>mlP3m79stK+=Hq8o zT&h?~HbYi1 zLQ(yix~>VJCd0XX{~?w%|MOG-&v0ZvEopwRmf^OL06hX2f`7zlYI^z?E(AcBoI#2I zcIqQ=Cg3Iq@ATgoQ2Zw8e=M}WK{p}T%!6k-yHFyqqu#U*irKx!BlkeAwI zd>T%z=miIoJ&S~#k_`FQe(Fj_H*L-~g*j@*3tLWctLivDPvZZEdEwys=NIuDVU$Wv zUrV1Ba^isfP|+2q%)qWoD}`IG#rrqb%Bs#?HHeB9Usj4IAJ0tf~C?tjv#0^rfk#_E4m1Rrix@x!YE z=-~Gcz3P8H_Uy&@;K-ZjuilKkhO-Q&rT|Y0PB8d5JvTSC@agU6r4P%?pWway(%Qz- z`sND2mcsokKnuTrcm^)}J(%=2qdNHgKMYAysyHhG=t=by;ng->l-M-tnhN~3U~tDg zo@I zv<=q%8bYKt@g7iKZ(Xp!{9;ALstZ*a)mO|WGF-|n6nr+COLOHL?Kde57Cyb;;##Gp zNGwZS_Tmm#!`ol#p585!Z5tmH{Ndg%2I2NP%W&W)`J0UTkNoy~hX1_j5&ksXg?t=I zJZ!<-EZ4c1961?GIOsIlY2?_c#n`C$St&VLDbFlwDCk(osaS|en8@I8Q+{$XF;a3n za&id@azRQeHY#d%8d}b?JsLll(DCp{2nxxFi7QG;ssLLWIazf%czXX9TzZz<+5kTK zGnACzYWx64dj33IgkM9$P)o}QSj-w2m>U^cnwkPCk)5qA;1Gd58=wwd0f15;pMM!p z8lRC8nV)>UI?C*6oNs-4Y;i_v&fli@-!CdlE^Y`Zd74t%R8aZ=4B^kLX#T_nYW{PZ z3jiqX>4j_N_dFeZ3Iy|e|2~uy0XO}JGW@&E1zcnQ#n8|QTwouru0Q(r?fXyDi|eZ! zU%%{p-Q7PrI6680O_Cz+Yw#h!AtIoN|GaRt3N)@K7PA=lwMt<&a!*!f$F0=lS4Q*7` zD^0rzh0Nhy%U#n^!ND*1)X8mWjI^y9)oN3wV)H!*|;5{8XKj)O;u2cv}%&=U|c5`e3Y zn3<56g^+}Wn3Ro#jGdH%lbn)^oQj)*nun5xhl+-mnwF1-j-QrZfQ~_so<)$6SBO9DM<-8bS1(t$t8VVz?w5QndHQ;K-SoQZch&p0x6d7)>;Bh$ z1AK1;`rf>I<5tkkTS2${g5hyH#P2L_-w6eA#~(zPe?VA3V0hr&@Vh|~LBSEhA(5e> zQDI@x;o;HY5iyaGF+jv4Iyw#r4aC7kJm5kDssDEI4lrnk&)Lt0>}^k;v_E;$0nDh{ z+PeUCxxJ&i16=l<09%eA1ormyJUv^H16dEaultV<{>Aejx+kH^hGJFBSxN5rAj+ z5qvDizWG5G_`2f>`|9Q?Qefc97*6QUD&56paJx<4zmwQ9PJC55$L z*UEs{JCqq12C~v>ufzT;~IJLVfls# zlSGzxsLB-zI%On`wJ_YgRu!zObIhOUb!y$Zxb>QX)@@rf&2oJY45)47{$%~`1c?Uy zJOfReN7zgcd)dNrr`oTM0Son#kXuX7ZnY3h%tW>hXxkzQ1AQjo$s`5VS3Z9yZZdytX zI?C3%DrWlUjSN%`4OR6nsOcD~YZ+;17;CDTAVN#c`Jxz0c zEpr2Hb3jC^fBz8wfRKQI(15_OKoED&vj40Az-s`!3`Bwm z1`!e&5)u^>8WkEEeO3};&PoDso{fu+j*pE^h)PJ0NWLGMRuY`?;BI!k|GlQ$_uFpf zc3sbV>YYDuHGlX@!H8$!=%vEf9z}25izeNRrre6(x)r~3D|zQ$^4_E5{gu+m>!stj z%0>gqMuN+S!^;PwEBX^E`%)hCW>ocLKkUk_?kuS3D5-6)sB3>%-&WV~H}-D=T;RY_4iP~3=lSzjKjX!VQ4k|9 z$6mgA{c3c4bPP1`6M!=EW@2h`>fM`nGvgoT$3K1^pIe$(Sbev+HoLs>d3AGbee3Ji zmz^(wA+oc#v%7b;Y~S5K*gZJdIXL`!c({Fdv~>jH_{;I}_Q}c4>FM6-DUcokqy*3v zfD!=@P!E8R0lXgE@AO9{;^g-A%u@`-rQ>8a)}2*|6oi>+hHqIb0rQ-jekR;05QBaD z!dome_UB@-jLU=_)I-IQ_D>%vpcz>6^5TeMN{5ZkG#MfLvJx|C8WROBc@~>HM84xG zLgm?vy3UXj?S;JfzWiW=Q!|JdXP}>K=XJYj@nW7(h{#-fJ=8pss{DFdz!Mw}`@;C* z7$Ns5;x2a%6Ld6-22$08dnb!xNtAJ_#_pz51AT|#lW>q}LV zDqvo1Hi6CuT@5hXaeG+uEkiL~+nOH;o+LEMv0t2vL)#jlC*roG!H!vre8Oe1PB`C%O zb59%-={2SV9`Z3gO|dRRMl_m5(|K(cJyiyDT3pUwHN%`BDWL5DcGhU4is)jKLH4T%Wp{`+y2n|g$ zO)YaRZF6lM3msic9leXXdKdNdt@I774Ge8A7}**b+Z&rYn3y@5nLC+VI$K_JxoGWX zW9wn>aM=NbqbKM*oSd&XyLchO#nsEj^(wp(f%hWU+&!*&T=Kqj+55^B-)q-y`dq(# zVMfjE{^;01*|H7!?g7DH=o!B9dcbl4D}w z5gV5RA}&59K0Y-eAvG~EEh#xYB_$&*Ei*GK``*3#_wNH`BcN(jTvSwATvA?AT3J^1 zpuD`QqT*rYgX#xWHB}F5A6D1Z)YRA3KB}#4sH=MnqQ1Tn#G^+|h-heN{t+#Y9|M`A z)~2Q>&CP8sEoYUcwd2W?&L>a0;Ps{*-h#mCZJoUcO#%c&57B=N48U~{!T50a<*T8w zH-qDEpG{2nO?`a&cCP3BLihAy=ZEEvnbr1>>us|ePiD7T=f1SeZ#U0>ZT_^=_-Xg? zr@e-S{f32u$Da=x7Y~~j4_lTF+m;WzRt|es5Bt`Ro~<8^ZXLhfKAznuhb6`fvo8y|j+w}}@~&3DprKwoTYR1JkRYL2S>H>$f#BP_V{2+J z%e$oWjEKfK<_xJqUb1RZX_%`JIbutRWV|t&VUvNOT?jAUq|Jkla)xG(giY4lWo2$| zS=3x)i<{hkHDu8KVK+k@E@>35NQ#SEfG;o71a$D zGxim~=puRbf@r9cP>Lvj87D_8J!3xw^($hsDHzd5T-ax9oOMjhuNY`Y=*Y*YNFYv7 zkWP>xr%1m9_!bH|AwfQ2g&wL>9GJ1}*$eEr%I{n=+YYu~kH5TGh0e?Z$`~=j1ULW4>|2PP64ScHC(Q&3!1W4a-);D5c z53HmA$N}O;zdz5OJp*}(&@_7em(KX>*T6RK&tiQ1?d#VwFULMTA6pt4UmJY0IXLyT z|HDrI{PxJ_^~t5>>CcO^pAq6lOJ}M^;IZ(VvjUVteu#yD`QKkW2ml{~a1J=GyKPtZve>}v_^NiR@yVSTll177+g}R#L+nT!bQycl> zRzl8@gHMA>f!E%i-fB+JdSB`Q^t3HfTnz7d=XGW5zrdXe3^jnbWhulARZ^|obD4aq zDciO)zR#%HT)&j#iFqn?ND=ea-?;&6l`}r(m4E9tNGqx7t1ttTo_& zZ~oK+tNn?Sm}SnIW|mEsK_l;e%Z;s#8J*K_2HU+&U-)jlaQ~zg@AFASl4f}|E1Pfh z<;U$6xMOr$lW7s_Y)tRCB8Qdo?L`ib;~T#t)upFf5v z&=jgrSULBO%8NcgGEvfkj`i>%KMJ(C{F_R&(fzf>rjq`bo*47g$(E7vV~0dhNXop&!-%pv#*W2 ze7@(qQ1&^;Z}(r+A36Q^=#Pv8o$UREijB78-Ia}Y2nP3N2P&ESW+#-bahY`)dwhMV%J$&vD^0PrucNx>d3MGOjXic=n>aoBD!no^ivQ9q zjAwVkKFwoy(%H%bf5PSQ+U{G=KAyd??UC-?cfOw=?43^gNj>r68AavYp9voliSiGZ%dwThS1S8> zk5>IhY@}!cVTAo_*Q@Vf(D;>B^{w3*x^%qN&-U>6%aGW{@%G614QZMT9XrY82qNTx z-FHE?eYDd-A5Qk?gYx@nVm;ecu~OOfF&J}EZTlF*$7=d_Q;(~l>`@a53J1S+{A%nt zXSi{*jO)W*SDKts?nA%p`yWtgY{Hb>`CvDyyHAfhFwlQGekp96+q^akMdw(Q!!k$Z zB`>N*rCGc#wXfxgf67o8MDyyp%-c^4x9?Qb(88`rDZFEVy;JNtmP@#MU>YBOT{Rdg z9~dS*p^cyFoJZcL`cyFU$}K$Z_e;Tgky87CF`WT(!u5Sm%2oz3lIn%YnRMY< zU+bayI@5OIu@QL?l+WP4C#yRjmk>LY%c#`fdC>GQ!D*uBzO zyJ|_ddQs6BxDVQH-TYcGIK+k%WFw`IIu}|v@{uu77317BBEN0sVwyH*Oc{m5plkd+ zL_}9w&IMmdY}n>dd914Y_5`U=RjZuhzG6=|Ou1o6vqG^TUb*3LxzS@vxe8vq z3Jcr{lal4vV`>|f&RP{_ZwAI2ns*)q=jJRfsK05R+NttQp=V5>c^@6tA zL>J|5b+}fgE!p72Q_0<$_?Sw2HjT*vv)$U*pGfB+c()@9p+iAM2GbV6=0}D=&{2@_ zF)^v2m|U26iUc$+cx=JALg@rj`Pd@WsN`>ukyeo)>&TFG2qI9{kzng692;oDo9H5& z*xVaA%bELiJ;*lRM_YwB2Q7qHiypljE$)&j8C?vSqC;#|9=uxhKnq~bg+ zaCL^&cZSMumgMdNOU#mZ;-Yf)qIUk0UcrV@>AF?r#^uM`w_3giwSA2%`jQ>7Rd{8+ z(rvBYd#ycqZ8&*tJb!JvY<;O|W3y{xw|`^*`TF+D)lcK|QqELXnUEBkm{ zw|vsQeLS##@)C#%9GuRcoP0hxUOqh70=OD5tl!-OYqlQ}E{M_H5g6S4zF+>+C-9Bj z@1}Wsd#Br*r+Z7MhchRKFHa8oPqsTxHkyy;tB$5i_Qvmh9Zufvi(GBFu~6$eU2gHN zSa&pA=|!4Ie>6+`ZHmWNDXQIQ%WN2mOlk6TXfhS46Ga%JSeWk;(%r@p^2R;qLVDhj z=DZc>IdchVb43|5Q+E~P(};x(A9X=_&s69UTR<)#^sM%Hw1-d z>%6(Fp0_q_f5r8)JxVe%Fs)aFg>77L2)P} zNHaSOcSx`i{9Kew6KJ{+YggsssI4U!#GI{!6!rYk5sArdw6yFr`yTkk1nPLy0eH+_v?25hdkuoVVQS@@S9pYhFDsa(q;y zAGK!w=F;C(Tl?p_9m5l(j(#k;P8?b$lxk$Xt2l&;N*++bZaa^~KnM}f!AoRKffqQ$ z)VE7v2~@YTtp)orUtQ@(J}-0?16du07RCT+ow1;Wyvw$t3M{22po1hw*WbMko2jD; zVzx1)jxe#*rIC?Bf2`o=?D2utwMDQ0bbw%oVRr(WxfM2kv(b|HZ7B9vbcP7N2H!cf z*D+Ubd-EsmO%rZyiOpaPB&cG0C6A!W`^X`8AcHCA=zs>(2VnQ3He|g-y1CP0b()SOOyOCL&(Rpfgac{$ScC)NCJ&!haTKXe!MRhB zMKPjJAC5fMadUwwXDeq$vLeFW;nZ;v1<8IS>{$kWFrzSpaMd~-*;kj|H~cKJs9eX(vps$Ivvs;Y#W z9D;$$-H98h+DW$BA?U3$;Ve3=nrrXMpjR z-lv@l2!F%kl@K%kRvF6Crg3jf+jqqd+TK9;8f)xLE%$}|rC7*Ri8kOY)u(Z>7MP!LkS3hWu~D=z^9b6Wd= zhVm;sZmRptqf`7)&2a{TE2mW9w4}O3O#F6uskc~>Gv&go8RC*39w{(ysj9L2uA^D) z&kw8zJQE}C3g6J|AZ+vrV3OX3XozRv`p!g8l!0jO2O2C(HI6b8|QXQblS zU@TdRn1z_ot+FjygSpSjjidwN$g_nU7pUIu`Vxr2kkh>rQP$NLhGeDnv)D+&#m(P{ z29C%Rh_60CDWB7oygAfDlb^7S_+odZ^?t7%u zhqfjUSB4*$bxw$&K$7VDMNIW~(4|_-ul3r$>qcS?6VDRJW3r)=ChRI?wSsqsX|T2&BPVQNA=KeEvSKi~RZXv8m^mZUxdnotbozRcM-IdM zOJXJajk=evP%{d2F;UIqVFm=9YByNWxTP^V6$xFX$O~4I*~M3ovZaxtGOJ-pDXqEX zRYztyJRc}hoBJJVI1~4Pug>hmv3;cOl$P-5z$h< zypx1EN2$Zidiu=;B_Ycl?{Fn3c(^)<4TsUyXTqK?KH$79k^M&>lP=nF(=ZjKm>NyU z{$P6Em#La#%xKFldJ^h2=0>FJ&9@|kY^Q_E)`s$*t#@aQQtdK!sB(6)5X_tKmD*4Ml|PZt}-An%(# zqBCY+r=vf0pT9dY9fVzZXRRYuqycxvd+ZI(0l~<-1QCkpAo>o>Wk>{*h3t{4N!|dK zKrKn-eawn9DQw5<{wNqB{184*j0jKUVVdR$muv4?^|dMAi<#5TS>D zDKV}d_g@JUB%hZmNs=@ukUB0A{MILf1~I{RgrdwKE7zf3vqs6@Q%(${Yq<-1{ECM? zfgS5*P{k{6W`BSy;b0~n zYTd|n`h1qlot@iOH6+A2{BD1U9&)%1l(TX+G*XT#&5al?tBDCGIvR?D(F> zqD&?hF2+226>iL)_%1zO$~1(Af{sot;TRfLn8?n55QD@KuTYlwd?IPJpG}1#sdqo- z!D1pwMCgTxMA%X?#3fPoSrD~L52vYGP65_~H{34RoI6{U>L%cE5E>omMal{x+hSJ?gi)%{uQcJg3 zN;@J*{w$vQIy?iqlw>TC(vTnL)}Q3kl$LQLZdN>bur|e+g40(mMN%yjXDKDqg)V3^ zgYqEsv1tbORz@C0+F83~!< zscEK3J?vR;Gm;x;qs=7}a+|VK_mfMOqB7XyA~3V(IZ|RVb0!XGbxrS0ktaN8${EPW zw0)K?M3HOJ6v=HGKaZK!TAG^;&BdIGM4`-iKbebGp1ik2d-Fz4gEO}lMfz}h7>qN| z4Kt70H7A}UbZqH_hTg3 zre8xH3P(H&zAlPE07}^?I!$$1R~*m=m-+`2zuL8xt2A$tS+)@MlIoOScIV3@&I&U|dO1DyEpfaWV zFozg9b-5)Dtihz1hH4Gtj!mtwB_;T?qRIo!6hbX;RMqQ;U5xCXfg@sJpgU+n$*(t^@!2~yNxA4O);Q($n&9V z!9(D9B?D>xd`m#QrK~&?rP;Mix*CaN1eMv^(p?vsShp&x8QG(yOq0Koh+kH3ph#-2 zEDH-oIQ!Anl?OfLm2*KT_?|rlc0J(z2b)1Y$8XXwS7BlSlaH^+l0*{Z?_miLk{v<% zR*ph$jnbTndLIjkf25muq?E61Uh-B`li|m^Jdo`DfYhp5+`r%cUO32Y6_1M#Z5bUd=L@O<|to&oK`xPJ{l}5Ua4G1NA z7vRXu;N*~C$}Ls2Ssf_+ya%mS#blj{58${}5Di`hBqtxpCmYA?isAX5Tx6Dtg_uF1 zA3>fyi^*(TAq-dqWl#j=ilh0aujCrvj5HcAgBHJOQhNlqwP+%>Z{8Lw5+qO|z34I? z0nZ(VhzuKNM?~W?2>28;r)w}nI5g+U$Lf_fS=BT1>Uie0LZjG+0<{)!GtVZnpRagP zzE~m7W?YwLH`i-0RB5fE2Q^`RB>0SUG`G)^3xV1)Up8ZLS}%Y&>$W;0UOs8ShvHN| zyR8O>=L1^uFbjqXfsCS>Dm&M2J2#Dwt}lS`)nzF`dO;X>0bgVUdAXj10)l|KkmO>9 z6s4LkOWQ{uR7ZcL)~;;Qwpd_eSz-hNj=pAsuazjg+pY@S^R&a~$qw|P6r64ns_qKC zgaD&hU?FI5>3d2>QE)_|9jHK7sT^}jmhM2r<1EEw$>5t|`OY;XVu*7E&`a9&L)*G2 z(#bsDb^TEJHk$#lNl-=~a1r`-p(;?w!Z>7D2Jxos_NJVn`;9u-%?X)wY@M`m*tJC- z`jV~4E1a$PgIVS*N{rArqv%c!k!nt5x;J0w6>)Q6nrTogBDtP&Xfi_Ko0n*p!nnpm z37d)??4K1;`~>6YUVgDZm2L-WK)w8y>9`Gjn}ub~+GRL+`NN)W`DN^j5}n&P3PboX4BJQzr6cUC*v@mJ4p~}*I4i%Bly6S zF!jx1R%&EUR7UV)TYQA_U60YPlu6yGEu&ayBMA^MHxp-uv-kn zn^J`7tvZK7jIk3b`;Cl;k&FrSDcdzjyCluq3Mr=piln{P**1h{BD57r2xY1pLZ^1D z_R3(6x<^^if_C_8>(ynZ&wVb|lREX%>__&mz z^U~x8NGij)xZ|~SN3o1@X|Y(je(Gvc%equ&*F{>LEOQ0t1t={FB)@Vwi@>#@^0n0S znxW9uwCN;FI!bEll{6xxNHnMe9R!(1e)3VnL_>ja?_y;PI8JFb10H{n&=>PZ2-{cS zddBN?Go_nw5ClFDp+ptaV~eB{RkZ@u=I<}PR*Qu%#0^J4)0@HD2_Rm9fHp0ImaOOJ zPJFj6zZ;01f%|p`>)e!mx^C$BmEQ5IA>U%h({cUaM6qyml}by#a@miF=dQsOD6T3{ z(y_0MC?m;fRsP4##>+p!j=ztbfA3VHH$en3OGl}dZ-zGc;h7Ge7XGv2xrJG1TBUgi zq^k!E!*bNE%yG! zPgr_dnQXupgN(G+T6JGBL*T;`#4Gg!biu$^8b|6S8s&z44_Cot zAQ0go96jI#GHhHhZsgx%LsIY=aZ;)zPRmm72h5$N68W!T9o z7k%p+#lUA7yM~d+@k6r|W;fPv>XnBHwqrOL2PK193n5oVu`@HQL&?3#+D7cN0fT0uI|L3xuPg(BX0qVh>+7+wAsDyRxe1Dr zhEomEuBwkpW+|E~97JIJ8a5xAI(icpo5V*&lKORgS2ngvs&Nnzd$dV!n*;F{I70Mf zF=C9O>m~(^Y%r`GLz5TlFlJ%dld~A#c`uuiz}-%blF;*KSr}Hl2VZVsWC?Z^32cj6 z6-1=~c2yaw{908xrapEx1+Lxr88UoG4s{hNiaK>QB@S>HbWWJqEH$G*4ow}a{5nlN z$36}%1NYrJEu)W+oZ2RzDC)J%q9izVERrnhb*wT2IdzfV__%_hLnUaIR4F>m(Xi!p zib&@vv$_^?x>d30z5QyTCCcW#V9SLpWSc|-{2xYXIHi4rSBe%qvvNG4DH}IRXKAHj zkRUj}Q`hE{Osr>V=G;-;tJ?xdNv^#{?SM}^#zB!0o;bAqp{zBgnT(PVyD>&Vi&JET zhevc-v#e&p!w}|7QV7vcxh|iG+>LJnC>Q)dNZO!yxdQPCm5ZSP zO*Rdf&dPhgW(-E|-UAASPpRxzj;MY>vR?but+kclb5Qe9jO=hz0IW^pYu3_)$7~34 zmj&WLDj#L%@%j7i>epS2hSvUAp2|G*NQ!wr1C9IR>F2rcj;Fy9Vwt1F6U++QJq4P; zKzyY9RMEj!nl&C@6Z1-o1|QEF(luW?Rc*Y+cN)eIEksNkgvP|8?_wY^_aUW!IQ}BM z>y5&C>*2#~R~>`=1a}7lPuzvTTO@--%LR!txnT%h5(Y)wDa2OigDapc@+^%4Zh2u0 zWr+eNJ_-$aEfDP>*6d@vVC;YNx(tzA*%w0+#P`@d5At{hUr(AE0=YHP_tT=$GsGpt zH}Xvb!cJ+lpHcyv&M2Y!VKOMJodhVM(E-?EA?SofUx?I&c^-VbA%$in*utwKhS_=^ z(aZ#R=T$h2I?V_>I#C49Vxr!S8WKMiNd*;2@H_P6IuS#Hldw-l!Rdh!A`c~EZm6*H z6y-TcqQvo&BC1}ShUvM2cR@-(^FCICy0V5~1&Wl!dYW_-3#g$GK~QO=`obV9qR8-b zqQQD1_(7RIS>s25l28V|10(dk0HG2Tk0sp57tYEWkff}MOYY63Qi_KlXf%$p2l16f zXi%6q*dsNfrsBPeRnUMu5iw#`Lo8@QCoFSGuQG??bH>HyC+z)dttf5l2UI7s)!i zRg#mdlCXT(h+ToI)P9PKtqnJ(OygFqmp)-2^ARC5xra1|%ZA#ti=t)Vi6(x125);x zO*muyG>F!j1v_OD^$9;^uHGUJf}J`{IH%J;k^UQyjzy=}^hPVH=q)kWPg+-(xIxZ> zInu3oZ5|~}#fr^}%8&NSx;@j}IIeV=;;uPJ>c&HFyRT|}@}-67WRfz;6AHM;=;Q)z zXJXN?v-|3bg%fP`V}fQIM(1FalbTm{RJj`E(hnSSkJM7p?h04h93;vg2Yg~Nns)lA z)!xIcUGKT(?*=luR6pvcBPBJT2cEkwE>E9@HWW=GI>_pIuEk(+H*>Daj-A+|1@KU% z1hB|+k}N?Hx*9{dp-#K>HlZY%&m)kbEOM+)qkPG7u9$(aLh}HDB&Y)6cgd&6AePyB zYMFP-I}{Hy(oST-lGEl+Wx<4QmmOZqM)41Y2C& z7fufq&W}}ZZm}mXIGjEb*lb*fs!v?**5sf@80PzFb%ZOrX5f9;$l-MFNW5jr;7C_h zWlEljdpa$MYO&s@otya@!S0$AHmhE$-qN3c*b)@SiN-$ZcqHPC=r^fb|5;gRxO$!4 z-53X7WW(EKHbOYQ%#zxp(0kSy7TOd<3C%8%fton3n-p(g)lxB>8zyGG)?W+iNz8be zi{AvcB9|@r#7BNZy}Rl$3B18~6e^#+%j&i+lb}|Z>--xY?B)Ck%0qR;SKmUnte=qQ zt@f~j+^gu$W~VziMI|@RdgvcOAU!k`*OasF#AQ3dJW{hh3K-u@e-z%c>%QNiu|n}8 zWKZXNZlYdZeUk|rzV^eLw^JCj+4~B?RU@oRnP zZe=-i+5VAe`ec!1MQLEhwW87LsnXqf$OKiXY`fZ?x7QSUw2yvCDStIj;DkV-{cASqPx%M+I<`I7o7&9xfc?tvx%; z&Jy0do9l9TK2O!{1byP=r)zG+6V6HHy^rHldQ*E7+Fbl7^kCZ}EXMcnrnBk|(+@g6 z6>xU3#|}}l&eF8H1~cBqmLiq7j^-=jLOwbpab7A^zQ1bA}sRSEKd>Ya1mnqCq^js%9}5IKRi1{ z#6*b8Y6;ExK=^qX0%*|mTcT9On7x>eOW2wDc?n&`zHNzSur_mDv*CR1Zf2`(wP6Co zXKJkJg!tS-7toxwovWzQD`DO%>Dnt5&?_C^E0ZTKTU`K_$8r16^HkbR(_1TV%TZ0o zS1wljbD2#hjlKA)9Q-p43q8|4T+gfcW(b6y%_Ckah$_XjI@BGBvj;KFFeYyDo<_AU z?NZ^#(7sdJE+~24pWB@UW_{{2-3sy&8tl9_dCgYz{YQ@?WqQK4`u)W8lFIrV7Ne4! zCu|nA{6q(QFwCINQ{qalJ@+Hx4ck2k>@8Yl&DqUjdgR@lPpy)6Kg0>tyEIRFweh84 z<$G91c|kFl&GH8LSA@JVq&^~u_@7ibVz4W?3j0Cysf_Z9v`Pqhu{-UE6UGZ)U5ZBX zOEu^AgSg5-&Pt2o_d1qw2)Fh?;)|q=O5s5aLAJ<7P5b5JZIVB(ou;qvd7!SEPf=hLh|>gUAQ7R|eYkrOVTXb4^rv4kU1%Lq zKIzaz=oKid;Kvx8@sbs{6WNfLSrnIRaTP(t@2Nl-hv!#ZtyKtR?b%mv=9*>CeWlR1 zBXlq-;e674qCU2bP|Fi9;^jKlhA_JOWBk->kk+g2n!jWUVW3=HCf|JgFkD7SocFS9 z;=A0$e7xv^m-LgDQm)N7e%^Q}eLovMbKQ0G4unFHQ{|8F1eF@H>|o`2`NSN09JoFd z>oP)!Sy=lAlp%2Vg~eAnKKN*%h{)xWnJtq6>{y5dI9RJFukr~|B&ZGa!f2AQ!=`-E zmwZt~r`o}(=R2pcC_*7WsF;8%`|C`<`k+dF`V5M9H$?pg}%wZ)9;2^>?TKQ^0Mc|N5egewASqtF&450>Z{Y8n@vZFP`@8^sWLrr(* z7CXVU=RyoP;LPpk&EINR?uJ;T&t(5a{aLC&+jolkcH7iHE|yh%tY#ytzcPPZls z+Gs2Ph6aO!H>mL4OtJ-H{4Q(~1zg1LLT0p1de&n4fsV^A=E)SHD@Dw?N$`aX<|Pd=RVoqr7SZ!N zFm%!EJrvMf7XJiz6*M1TRgDmWqwH&^9HL|&%7s|(>_%u}B(DcpZteiwD)5g@;8Hj~ zC?cAIS(=u?{^C9wg2W)Keao+W)Z^=PEIXG^ihVgOp!m`uq>6k+g?;#>!NdkLbOON# z6Z8RlT#6b5Z*gVZBA6>nUz=j_iHtb_oH>5t?Mz($OjG&th|kOkiJCy2+KhltXw%AI zM99PkUnXPy0gY8Zn6)JV1JA`};8V-wFe}pn23tPrYd^vEBn;vvXI92m{JyWgf-$tL z0vBWUc~#}xVxhUj5YRtoI9?aiqyZwBtT9!tZ|St^$`q%j8hB4T=j0Zt9I zy|b{|bUCxrAG}i_C<`3j_$fyyxtvE?!}7x47SmvB5Ii8-U#V+3>}D%m!B{&`lb<`= z08y8f)8C+cjw*VKTzi`{V=;D4Pofc7Sa^mj!!)RKfzo?xF$Y{y*^gToBK%;>2-1L$ z6P8`m4Dz)f&+7n+15L|LGpSUgr4VplODOR(QyEKhDMLS{ifvm0 z3yCL$*XcVv9uO3-{e^|qxGPM1Ft??>ccrxbo<8XC>}_-UmlXJ<5a{!hhEMittDJ?qk1){u7Fn%=7)kWQuc5uU_FHz1W&n@u^%Ww-zsbt@W1T)H@ z!vT*u;Z)zWaY9*(#puX6%pjBS-2=ai*OX4nHEW-$ea$($>0mQd+XKA)j% zG6@f31+BL_kD%O+{0?jcB-MC}tmBMzO2)0((GM#ukCKIt1%%l?N0>F79Yk3MXIlp4 zoE=KQ?4(G}!t7bHBOd#GKen+9<^$e7l<01x6F-!r#zdRi`IQI(+bl}kBEplJ3fpKy z2$?MGTEdg3_ecp4SD{!zQ9Z(xXtqo3+QAHJ_Jmg~foES4xu-tE__a`%2Nb>boj+B( z2{F3C7R0IMHV&YKIYi~N!x*#_F7hRG!c1^Gu}weePt@UR1eY%I%~F^-t^gHWnD@JI z$XGZ|MmfCL3vnPk+nU#xruJEja6qMWJgj#(*#l<>KQ4H3=oveoYzN;J1lx0S_#Sz5 zSK(OWU~?$Bc#oA7J$?>Gbg}L22*m{}s138p>2#^+m{IN2#^8{6bD##bCpEd2h;;&< zX^Hw(Cr1g+C)ZqxB!RT)O9G=K&Y97;oE#8+b z?ppgP>J}#!Nf?ReC~~`z^Sv1|O3~*#r^tL8GP^XGfGcj!;F!9}uvn02`XzYstB`QF z8D3)u)-HcEDH{=DkdMyGWZHiG%AoAf0jSGYeg|*jCjEmEEgGW1dHVhBXZ$g_&BTpB zIjQ0r-@2X|IPnB+3tnVNN9n~KTuFa?)ArUh{oqQr!Ewyuny=B|Ou@MH zr=;7b@>`Q6GtH>k;6OLCC_Q7PYr~FPQ}-)f%{hT8R4pNQ(h1DgCn_wCH@*$%+LxItq${WG5LpR(LN ziweEk8@wPSzdIB^l&-JTDVeu31)teFp1{2SA_+qFIsn(_u_sewvG4;<&^mZ0{A%UT zT%m_4EuZNmugUfI6+$cE$v<``(#nMV`jNeEVcyqGq=8F<@Kb|G3#-*6d20vyi&%b# zODFl12F9+m$t`?!%#c_~_#GQ!w%|SZ0hIXkI9E6l=bfW-Saavj3pQ}oSnZv zI0ORgXB4}G3zFVoG%8gfzk{?t9BUT=OnC!BEP_-jmR=_Y83cq${)^q=CBgODHvL>bzcmSSorWF0$?lT!C3gRWT@gkSuzCooEKY_=s0?rblll1YDe$kS+1BxEOQQs2>)yH40A!PyNw2$}EDB3_mt z-#{T~=(`Z`D3pDA5$)qaw4(N8cqkGyD0ii0LHMT$KXDgj;h-@43?NuCs>6tSeFZfU z4G@~VfW+e|x_}fB@Un)2Wr6XHMo^x_To-l_Ahrz0BKE~~719>AGM0|q*hWTYSJ|@i z+Y8cx_uiV!$x49Tq5SOPUA>ryIzmN11pAp13OyYKw}ts-Z+_3?Vlnn z|0)ZTBkzIH(d_90uPJG2)PDFfMwy^%sry886jRXppc_^11IPR>f$y%TzBimNtcV|9 zH^NA$*Xo+($P&~0p^K5U>IT> zK_w-`(Ktm1=3B&!6C`6+qQk|MUHwR{hyvfea^tF=GDT3la1YKe>z*Fa1?8O%Fv_L_ zo1yW*vPGf=>8t&Z?R|Xc--=L=^8ENV@^KdXX8GgCpJ1Cx`%m}Vj_mq=SCB-lAyRIe zT~PE@0chGAP|Bv=9|zrW0+b_&g${hOU420DglS-(eT6-EA$&1$>>yjJ6Kh&~pzwX1 zU07{@%yz!V(@8gNHR!)X#y|=WTkOgR@>F#MSIf{MbxJ zcvUnYa9JJY{ez4coJLyk%cqDSesWR*Q7NW}r>HPT_HBH;p^hH{E-~@p2nHKyb>c2x z;xh7rDK>G2rDf$}62r|XDDH4SumuAdbwI+4Gm6Efjc+B3VCT;BpC3g?axN~gH=RJNZ z-kIX@w_j?~&%CJkw`nHcP1j`Hwo(aR6;A*uUztxosD#03Cwq1lhICvsMh9SwNXp5l}tsr)aDZYq?Q(=osNmE&7%~ckyX>}V=Af5XXKzDH=>=1 z&u}T=l%SDwESZVvb}kg$En*D2pUKu#e@aXur&XnZlgp;8D@N$sWlX2l2qcUvR%^2n z_79mWcd08i{7I|bLpxs`TUTZ&K&LxXGGF(luG|5UMqP(iO9zdu#F(F!1(sC4d>T_b zI-Z=KC}%EAeXe3CFQ4VT?p!F&O|rX0f#KM~Oc1wfRZ;-G83~`xaOAhjSVUSwvg5(w ze$46!%w4NDv@yx^Un-d+j*W@u^uPfO(u@J)>(zC>lFO;Bo)1aqzapuyx^x@1*Wk|QvR7+PX zqL^V5K1TnNvndLr(hInMe+u{{{L^-ygO`-`stj6k&8N2x-uHAX(}`Ry=N9Ja{x=Dx9s^ z^o*0&7UH?uX+;C}d7H7S(LH+DLg73zZaGGkyD(BwjSa9iTMsKz*de_YC{VfKT-VC!Q zX&l$N!Y})?c@J%Bm;2M3H0aMeAbP!39*S3arK7u?R=6dyhCAMTr;DAp9#bAzY+;~w z781|zrqlZzOZN3`!2NONJf9rc6W`JqD6D%-dR8z5;tK3MPuIr;r?Unw!&|8zH&4{u z(x)Y~n2D(^&#bk%WI>kO;4^U~)Ze_VmEd36p!Mi6DyU;&88dg;p0AstymB5Bu;g36 zTX zyid@(8jjD`i$VN#$k0#si3-bKwYNNDrJ3p%zKz*tMj6a8aJeZ44!teKUKs@W%3Ehe z;BM}SH@t}SkSi8$Qp47Ak$cO#L1bWOfz31idcb`F`S~O;F8%!a>~S_^-04#i|5aY* z?EsyFdv~Vc5npCo-Ho@Ck`m{xQw4|RmEL{WcEg#2<>Tsy4~Llhizm3)71J@c9t&)b z_i49REqo3dX~&;$qk}v*sJy-vuz4*fee}5D`uHXlph$z=xrgc*e2ZX9UnSb-E%MED z+7^0l_QGr_CCRjh)L#);t2!ju#Wc8xSUxvdyEecr#Wl>~F?^cS+tOLzQd#+;l2s3> z?XHt@g1gjYL3ICgXtX_)nqN)`F>G}66DQ~G%E6q`{RgA{IsM}{!sGn3^d^Ir2;AxF z6pLM*hDDrP1)`_>th<}k#}6sU1zF$Q^dTyUw=9JmbHZEig7vB=yCm5W)U90t-FImkh7RcU!O$OV_f*vNe z*V%NpC;7l*44sn(!>HMQY63evwZ5o-ikdbEO1vdQI&Ym5Hl?#RM(}|F-#sOJ&jN=g zW98P@h%zV#O)$OH-nig?b>Eo~>0#NPW@Qd_rNLKovU;<(Y1#I4ZZsu%<>&h7CMk8Z z0pr?NhBcxm@Kh~EC{6Ze(lwIYQ-y6JO0tFoo!x5voz+Y#IK1Ass|z=#Khh0)hE|>_ z5+`uYTE}oXNliGt)2CRrEm3t!5Et?n*Gz-Wm?+Y=5j|=ijh`{9u87>P_k~0&S z(^24wQ4R=ODu}a6NRXNfJ|u9<>ga&vu?DV7GzV>@rSlKc0UTxDx1zVW*-6Bx(;yw?{1PNP4WXZ z50ph*L2+sYO{^HN$H0krj>1#9@d%%a$^HhS1B~1wyH(v)pZPS5KG3{;Z zqZYX_>}K*NDq?Lj@S5g|8oI(7B<4_n=@w?vCgwXFeyz)OR|UczP59Bw3IuJIcVF4* z9)V$z3es92ujN8MSS#S~DNP=gp1s2GBrTyN;zuJ9lYC_eW^HAYwVF-wRwCyq)W!n4 zowjCrnLLQ<4c1boW>TbzLD9I$7ck2N3Q{RrI$pGW(!G*-og9aZ!o;H^ z?+oa?N@#6!aKD`C+zwF`qV9(jm&Bg!N84DoQ|kLNzJ_6>8`aRNt&b5~>vdkT<;tKQ zmNXnlq`ECGL>DabJj#DRP1OQs=|{L(h>I7ux2%Ii=Nen&muS+*yWh8F;tfR~b7V2T zM>i%}?gCZh|FHWO>7c#c@_E-N;NEm9^eDXl2<6f=rDC<@RZ=M&$$OWl{p|T17u8M1 zcEd*J-1@UZ8l>Wi$N~%5tlYC5jaLSXx+^g*blIY7AP>hRk!#fLbkg$%nNCD*+*vE!^VwEW&H*vVXuf4zpR^Pm-fHiuf8m!C$w2RD>H-I8&I`zinUZ&V%X_7 z2`#X(8?z@&Tuh2AJHxWdPBda)BQ70w2%6taXx`d@G(JkFQYqPxHa(;D%w27F$ofJ? z+%RYgX)I-8Imtje|%UWL<}lDKfIBFLpGZjt{0ZQD7C2 zY(>V?2RvI;=XJCWx+j5x#%GasIVu({V6P!;t+iqquNjyOQt7}d55{Z`aF8x~`b$II z3crn0H8P&wClpj!l zM(dZJmE*Kff99lEg`kw>g>?Q5MvwSvfl?F?#-(T>qv)oBIR?s!HuQp+s)+dG3C9CV z5NXi^Tz-^>+1McoV<;6dTnS#zYqAmtcb4qQORIg&)y;R8I98^3wB>_f%v_q;s5WK$ z<4iNnjQK$fC8;~h?RH|fXuwO`yQ>N%%Wf&MFr>-WEJDHd3ZL$wDMY8@xA_JWs}F1!g=hZ%PvxO~35BOdgGR_O+6# zYR_NW64T8eu&aJ&pJ_i(R8f>@813zR~hqnFSk>W+!5Gky3q&MDp5`a z#d_rdc1qp)xoftw@uEIfv6YydQZ-dM68s{rB-@Z=;!Q8XNOW~<^NpI z-fVV&YwxXQd!p+>)83Hny+=uQw(jD=7`NmrcT93=&+kAz?t2^35M=G|xH)Y)j_WXC zvP-YY{v8ziZBlV|Dko!usTh-6td*k$GLH;vqZx*qw$E$TV4fr^q-6KJ=&(LJ#z4=c zCM_bj3hz3ZZXQjgLiMPo$EK!?bDqq*rp#xaEa>JeWZrD-=4>L~9IECVCf;1G=3F7( zJgMe9CEk3k=6oaG0;}c%N8UpB=E9G>MW33B-rN_zVlm0TFZxu_{Hj!P@?A;kVX8`* zisyYPSFzdgb;{QVIYO%?lP20D-gLw3r@7P>_z|9}o&$eunt8>IYUuaAYjoKXnLjyO zK3Cw@I-317p{ScUq&7N56$fL(7m19cEpdD=dt0aB%f}|}M+{fn)WO#phnXOhAu!O= zw$9hS-_m~0*Kya<@yyo=-P(!F--X@UMa17t)!NO(-^10~BgEe;)!M7X->22uXT;xc z)!OgKKj7Xv@R5J;Q|n+9|4>rvP$vIyVe4=u|42jYNC*GuKgd}>>W5?D-XTg((#Dr{S-d=gl0Xj|?OSQ%(rnGjh0+P1nbu(sc}b}q1f*S7vF zumRn^fh@R*-M&dAxJA{z#U!}R)xIqxxFglRqa?Vi)xK*axM$VA=P0=E-oF1)5D3dS zh!Q+ZYCp^rJSuEIsuVnKXg}@{JQ-*|nGihv+J3q&c(&hub}o2+*M9yicmdsUfh_b5 zyW<;?&?QyJC6mw#6@nMz#El6*~z5m6DpNvYqGQ1Kop5oB7cgD z#Yhs1)qHEp8>@*-5%l@TBvBg8s7GluocwNn& zJ~jw%sl%u)GE~7iuN7rWC6zq5y*>U~ZS}Q1{r%l&Q_?yDVXNiUzD^mjW2FAOhl|dn zV@bwz@1NX>xt;cvxv~UJ2@XsbDpCA5?(L${ufB*-4bjI7vMtK1Pf6g~&oXl%#*>N?P`q{I z7X8rjMiT9#*ksmiQ2^Tj_deOgq?(f0?39L%{hS6!RB!AsMea(uB2|7o$^>2U0j7Y^ zNA#Hyfj;p$?GE*l4;qUWDfYJW+)Yu=?)M!q&j!+nCn6)^7RN^^e8P?(4p=jE#fdpo-d?vj`3go1X&3 zJvKvVG^LG$S;n=^mdPs?wxgKVw0B};_R6-SR1CRyVs#uAcl$zvb@o!MD;D?CoX2(c z)8Cyf?q~WU=^kWD2$Jr~e>C z5{Uf(@@!cf*;tD?SkpOK!Z}$!a&h|zN(IUr#GAV3zE5gSDd{S28f+Py8lGF8UszdO zT3udUdx4bzYhz;rV3hzo0wB^Dh(q~H>dC*Z{`C(0uYL!fe`Qc|{Rv$K^&BYu4fz+k z3gFjN1L!K8m+%$moNiPa-cWp*FL^-JoSLBecjUa`BxbYW&oVRF-G~fg^S{GaARIYe zVSf?nnBaaU)tF2dD(8Y33}cY16{-S+Szgtm&Ju(a7XrC@dhtqbuF0yTXDqk{DXp=QkJ z5-ND+Z=`)zV~@;kvOoNqU+Ik)^YBJ`GRNeYlHu`6)VGAI2!_P1!Fi+)F;cl&MEr7l z5?P37FjaivU;*?_l3Sp~yykEpp~uoTbZiq_kskm!*_Od3zns)^|gj0rwtoHE#(bciMD4=J+WbD%_sGb zCCz93bd{|a<3QBh)_fQcHK$tY2t>_=pLBo$QF9d#L_pMB1?4CZHD|Wx)QiE!@7#xj z?d9B$f7RkVKs@p2JV;){=Q2c{^xkEd{>@|eKa83ahGw{)I0OU)BqSsh6cjWxGz<(3EG#S>92`76JOTm&A|fIZ5)v{pG71U`Dk>@( z8X5)x1~x7BD~?zA!uW);gv1)eq=uyAugNK$D5>62QTtHS2Gi0-(a|T;Go&#v<}flA zGBTAhF;y`!*D*6UGPAU@umD-+-7GAI^Cz*#YmXAM@Uocou$X`h0 zgNT^Bn1r*0l&zGEh0JdfApi*e7m2XAxVWUG`MENn7NEK+m~Vl;FjU;`Jx(?7n7`-&3ay%7`BlaVu1Q?t|4b1}2< zb8rar@JI*=$^Jd&?cahN{{nmagZlRS;t%$lw6vRe3kv`# z>cu(%7*Q{T*PRzS)c&8b&VY$>a`HlKKmQZZ`8TNj=IROnwF89LI{?xC@FIr43zL2N z1%)aBF@eE=p;+qlhk+JVF=Ngaqh`k8m4{(5?FoT^mhFYf&FPFl7w~R{*ZFm_FfLpqQ!z%-UHPK$Y?@f9~l&dh6V z<%!5LU!LKy#R~&qE`)W6oAojE32i{$! zdXg&L0dXNDz8g5M7WIFj>$~FEht4E9$q5{`&eK3hQrP1fKps z_$&X;zxDg40gr#1m;2Yy<-foFGed!^nM*KBNGwc3%2P(hQbA5fSyov^Qd&_|Opc#l zl8alEgF}doO^}sM0C)thxw%CJ1SKUTf!P3 z-8)ZD&-cHUmzURvU(4Iu`{T!tK0ZFazP^6Hmj9pEZ%FeWi1xqcvqu6%x9I5D*x3Id zlNA80i^^Z~P0Lu-4H2`b)*8-q!zZZa3d7-O}z3^2gCMNy~p?P6p;jhVVFLviY z;JW=G-lG>b!=Lnf_J@Km|3I<>>CphC6%g?+9e@ALefu|c?Fj__4<W9!ch z1)XoxNpaLHG5SMa@<)CfTQvn^Y23Iut*+1(KRQ+t+L)8PM2$_SZ%VMGkFhwSFzsV127a2E=MTrJT8pM z0$3?F2cpU3GQ!<7w)+h~sIHAR)$C7jsMOCP0I9+=MQU{Vc(fSnMI~k<847wAGWw0q zH|1k34d?4>NCe2S_VC_gT^FdbVj1}E}Zh&FnX+Q;^Zd^mnH>kYcejw&QQ@zwtW`j6$09a6)kpD=7xeCQ^( zK9bO6fJCXZI*lUxV#joY!TSUnDPQ=YoJga4P@zC!5#u3`8cSA1M}P^71dy_P!k8vT z#Av<%n>rK+bEmdeLQGW zp|%*?_;blpEMJ_XK0s`v0C#)yXR!R4Tf_=N9}HpvB=Z5>L}V0f6jWR^bbNHcPQ)a{ z!Y0ASA;ZNZe?>@%PeMgNNlna5ODaG|uE;=T&Pe-#i9V5;sp^+g_#Y!6{(X)9kG%2^ zYc5+q8+#`QXCoI^6)#UAKW~;Gf2y!Ryr^KLm{72Uu%D#JJ84lTSutxlaWi=dLj?&P zMF|ZhNfjkY1!YNDWl3pe2`Oa>$rn8NZ=5keGzK=%+seqO$;zq$Xk%alO|GJ%CeY`q zr~r&(U3GO`4Gn;Ftgo#Nz>W>|^o$G)jE#&;O-#(q%q)Ow zL;cTM=3jmB81OheG7jvKQ2>klyGMQ@BTr0DPfpEDPtVTG0$e44t@=`dmzP&oS6>L| zTU%RyVyXVBxd0srsJ0gu7XakwH%AqKG641TkCOU7J$rgFS(<-y6NTAcII8?0yII|z zSdj)_!>DBUh9J=~;!CTTiTDw4815vaZb`?IqBp}^t8DTn!YHAML%-P;b5SOYw4*`^ zRm$XrtOp0NHC6F_exiuyu3ZGf-N_(TcvVvz&d^dps3Ds`2J%VK!Yi&sT~aGhuYHJ^ z?}A?R4g9pZnCv7&?-%=TYYMNEnAY3hVp7h9MLQYxxDtVJF1sBW_eGA8BJn35@AM>6 zXnB>rt2V75Ja+NMLHWyJLNtgLDAtRd|0Cl1@Bf~EDCgfzHCrzmdkY6g4HsuAH&-4n z*JnQN1Oc8%LEc~?K3`$}_o4!C#RMG01+687%q4}5q(yXOL^Wi^l;yVqR8%xoRkhUBbu=|~wYBy2 z^ngLu*x1iU6ga0@>>}O@`VPo%LXK!NXEaT$N;^mFw=l>)mb@0`T|xIF#TFs z0QLA~00wL+pep}=Tg<>n{F{OJ2mTP?9{xri0wXa%Jp`s=0DSmQ2jgEOF)$4O2gYEa z2rv8%<9rP;uzub6^LrlN+1c6O-v>?ufdTmJW%ND&4Il(4gD>;$9bj9%jJtm@lYZ6c z7e5zR|Ex&Ai23U;F;@|bfD9qf>NleJ#0MadamIgB>_9qcg09G0y6bK;ZKXfKkmJ zjG<6?^&?qzW61YhyTFTwIbA-Q9Xhe)9m{^FldA48cN1f7e6EOIs6KQSmV~Y-w3~S< zy-&E4W-d}btyySQ1;E`Ap{^=Hu+^zU`)nGKv*fn}7X0qE9=OrN6Z;xsnd_i^RK$F(g({O*&2%9Z6gclKi?`TU~x)M&kC`99Cn2 za+S9$y7h;>b+Fj;rw^vWe<|GMAgrKhAOyee0s!s+0M7oQp!_&cs;TLzs~c!)8fs}7>*$#3 z>6sZASQr^unV49cngZMA_ck-L`Mu4}ZGUeI3p-0oJ1Z+-+rNJ8U~TPSYwKud=VWj1 z?C9v?>+f&I3>{!jMde^mI_3fOU;b=wS+2*SOH;%wEaNIlVy`kh-nOD%)Kl zxLj}$_sToc;h5+dWFeDz!Y=5~Kh?e~mnHR{XvkpgiiPjc&W@3%t7E#2^ zcYbCymsBr7@I`Raj3WHu?o$#@+uhC^kvb{dQ^Hy%Fco@H*hxE2{$=$@6CaFqY7h9> z_YKK-fY&k<P*O&`@~N(0to4ZObdo$;Cvo0*z|EDjR54anU80_FF^hYvyV8dR-Y+uA{y z8iZ+YFUZG(;Jd!B-ts*%e$_sYP5$OVT{X`Cxd-)U-Sj`Sp?+CU*Uk0JRa-qjzxZqc zL^%j?kjpnVHa4F>e*yCM_BPm1zrN<}6Ogt~PtU*zFG$!|T>S^j^>5JnXTQ8caUjGC z5|UM3G8q07qE6)pqY8O|PI^oED>n6T6snhYLJW@hU?P!Nz@_~&s-ZM$&i37$vx@E* zHnk!n;*ZvX%$(~46+_&}v#Ek`z2B;B4#g71O9{T}H4aFZ{2W+{`*uu|8LRj+)T^$U zT7lzMvHYcdqxdaXtDXS1-|+~lTdj~gP%H=mh(}U7qFb~iRCKr5n8+m=sq~p>-C3Bk z+3$eyx5@ttMKs8#AV~iMR{aG@e!d0)zDgm191+39yTak(A_0=3?$USdWW~&{ASnSt zQdLP(QCU)6`38?t(pO--hUDMk@fwM$GBRr5xfZ_u3XEV!d<{mUzix-Gq^*CA3i=lw zAK&2d3XmXe_6_t8{B8^Xe}?4$HXdhY=jZ0GHLk_wrRCMX$Kwsj9$r01pulxgP+tS{ zBgnbe{x1m4D+l;LrQIt$CO~W^Ag9V89+9BROfmCY{SP44tj>(57Sgd8H~?uUj@57? zgdDBF4_1MZN`4!wVJ&rUGLzM2gvMcEd&~#VspWZ&Yw0Y=sw&SeTq{PHq%8W-PZh^9 z^=>;M`SER;b=47A5MEj;jb&HeskW|UhJPMXNU9N*4n;hiOgum;*_J(fJKgQ3frf$d zm$J7V!VJZR5dXiYSN%OeLAt&J<~APQVa{h~jAx_sVWF{MrqW}gkY~It%0S9Re~X2l zgpMA(V?fR)Ci@lL_?6oLQyTaLRNw(WfEkXP#0D7GxJAkU?s2BLPHZqS^RlrEf+nzl zfV8Nn{GTN@uF3Wv^X)IPy%M&svl^h{^;=d$SJ%YI$imzl?2f^f*afVD!4eoWfdB8v z&wp3;g5g)t?`>*sxlU|=t}aNIVEZ~a@LOWzuc7(ho7ngzNdMwYFtGt*bafS!p#P#k zg8+RE1~#q}8#e&GwtTPJUQmiYI|Ga3bC5-^JKw9W_a?6K55al`&?2zx)y7o;0g9Yi z!W7d~ic5k{N*#ofS}IL~&%$^41$%ce23Zi8W`tD?B+-!Ooy4S84hB#fFmK14nn>qz z*^?`G!0c4B;igN^n5<0Yc;r*R6^!pKi}5#N>{#EzobLD3ufVEcw!(V&z^m*v>tuvQ zE6dLzo7;gOXxH3-wzU3;{qU-b#lO3az`(bBqBunAxT5wWwRs8d1@#{x+XW$m5?o2l z2nZ+$2xy3i=*Y-esHiYBG#o540s=uYGVpDFAq>pbtnA%)I7T@BhefLYfK&gf_PtT1 zCb_u4K>Ht5Dc)9I{)ha6m4d>VB6p+2Bz&Z#oMdIq6y)@;R4IjDs+6j#1}I5^dX%On zn9tDF)z#D2Hvsb(e@tWi|5TMKDk>@|0mB(!;tVDH zk6OUf)bzNiskONoJZ;ye(Uormp2v^D({XcJTRU1oC#kg)OkuTM`AJs?jAM0n_H=di zba(fH9DH3CgCf(LSwZNd&SS4vAq?LsKaPc=IGid( zQiE;1x

      hCk6gZhEoX?nzMn#UZWv@A>kniI+PAV3yEg$W9OLsAJvuqgHHAL-}+|| z%{{`y+snt-Dj?7xELb5bTqq`zC4M(qQY>0pJVaJ9KwipQLE1@4#!^MrNL5ZpU0y?7 zK}|zJMN>iPMtHi>p0rg|K+_i_OkE9)E8kaB6SRH}uB~4~UEQn780=JyuDzn`wAD?s z`Y)?9gTX6MUT$k|2fNoBmFbF-uPSDcmWKz2z$_)$$BvEs*2@0g&0ggyuS1nL(aPz+ zsgfrruYBK|^PBs7V*t<0&482(h9s{#)df(Jx+31C6)-KidM!qQs0Yywj+yR)2;aL- zO#V*6N556cf5=_^icW$!2P@_;SK{-H@_geJ{SDx+NO@SPi=$F8iw$#w8x?O)!jH$Pn=FQ%VY(20 z97>?zX{rzdbK1z@yrb9kO%qsnw&xZ=t@%_9vvMW zyOEQxZKJ1CQ#02>@+_F$0HJ$>-Wvde-R)I_3+6cH7jMq9XG`D#GaU;H%OIyOF0Nc* z`?~i9@%_tMy5e<^)Ne$o>sa)!BKr>r2aD|M8XJ_UuCNVyOMf(${vo_U4!=S;@EgJh z!{Kc1kqo0>B`a;b&upBON8*V~pO+&?l8+^0m7?IIwpdG~(W=x%e0WcR&#h5*+EVp_ zMk%{qS*BTXUxQeSm+B?{k*BF3qjrq|+N~BkjV!K`5#j8#BZX=%V<0|mxo)u3pj_bX zu}+j+v3Zpc)_MGNCCju@;_Nd=d{a-&L)WqoSf$lM2FPQ!LMU;q zVP9Yp+gU~(uk$KO4sph2^ypap)=)+Igb#a_4XeD5J{oll9^0Vvkk6sry*v*unZY9y zdlF>u`R#I`nA+VZL2ETH^2IO>AAB9yLu4%W_=+k(8Bl#Y1{Q+$M@RY`vJYW|uwA=U z;J7LRHUgFi)-9)7G^sR9bxdr%Y=4IE|Cz7;GhwbU z!k#e@OtRk^;=28WkGfri;gKYJl>%?RvQU|5 ziJkh1orcMs#>wsGsjb%OR~=7Z_RN55FE>Z#HzuF0%`Sqs#;=ax*R`>E(-Hi!9RNk` ztHFw0Fe(O$XjcN-$ve=F2AlF5FZxQ{{&uCIfzR((#@`eL|FH7Ex<|Htzef<^88b>b zAVbkG3ZVpW^}s+ZAvg6%P4ljJ61i{~My?0#WE{Pkta7cUrBWiR*{uYobjq1LA`i{p zix#TkNTG1F+lsA+lMm#7k`Ux*A1zd=#tS7fXC7&iXeCGs`?yYJSZR9zZ_u(%`tOqNC%YW8!1u6652O6B1LClG2k?GE!1AQ`553(sMF0 zax=5?v$6|va*A^Eit`If3k%DOiYtmsDvL|1N=mE2Q(9V6T6S}4OUwRp%F1fX%Kzc1 zD=V)nuedrD6?K(W^;Ojk)isSZwT*RkkLv528XB4#9=1GeeBAh`^-)u66DSIRS^(Jj zgBjA!-tKO&&+osnzXq@DFVLEvxa#z$z~l*7JlvH2zg7Q#Q#^p3z~2-PHsitFi&?4#3vnN<6>r3&3Hj8(-^6mAjVYz;@tw*BS)`caC z1YmnW8DjAS!c)-60Xn5LxD>QB^?`?1;U$OB0+oBmK%N5RleaVn;LfK-NQ%z8S97LiR#@t!w2 z#uBCBpkE}eJ05$}a@gImPRu}B8#STV@UIjWnD&#;LZQ&VC>v*e1gwF=%D;^my+=A6FSZ1m3>b$@y# zOmhj3a7y=bsI=bEe#mZI!ETk$?wH2z9?S0Y;7*_q#{*~12n()Q9iDh)z9cDu6ak@R zZjog6yNOKV@idaLtbl{Z0_h}g??1 z;^GF*YJqnHIIDFtsr4&0elx2T=pPUm5D*j?7<@ge^;ctB|L3Xkg1qd~f~?BoteTR{ z`m&71@{H!n^!Do1p4#N0`h@X^aZew`%r!+XwnQyIj#_Jt+-!?{(H{A#BXYYlYPUOT zzbERTH~Q#F%$vU0xBYP^{qb-56Oa3o4*OGH_owgmXKnZAy%;E7AE;O!sGl2rJUQ4q zG&DXk0*VGx##I`)i*3ZTUcJW>KIm+S3uCO zudZ&au5GTZZ?3OD-`E6|z*jF{ZiB+WmHKz3`yE_^|M)tI21)`qVYE{)k9H-^UupAT z=Kx*=;56k`|8U(xTvY|&xz-7OuMK`H4E|vq0DkeeenLI!4i7OizVU=QWu95z5>J7^ zY3LJw*lUe~uUoJBkx2yu5J=K2#*>9v(hEJ^=v%At50V5fL#lF$oFDty{N9NlD4b$Zp@hO-@cuK|w)D zNl8UTMNLgjLqkJLOG`&bM^8`Bz`(%B$jHRR#LUdh!otGJ%F4#Z#?H=u=gu7t4h~LE zPA)DkZfQ(Ytr=iiwGdi;GK0NJvUb zN=ZpcOG_&$DS53kZYBSy zIN$ibSK*9*KY#Ks0H(=q9?*9C;{!J0papm3!hsd}A0F_RH(v+o8vLF={*gcX46^TL z0jYcwXquzo{q3AI+In;PGo*s?WJ;;u7Xa4%J}1rU|DLQTiQDV=W&xnM*~=c1>pAIk z=6n8k$Y(3T6nLQ`fz3>{4!8ht>fV81gUK*BC;j=2oQVEuFRc_3*=BA)r+6s!7`A|z zS&@7wJT4YN+t#7Eza-tdQi13@mLM-^aBTT9KOWYhPyBk|Qks7#36{90xGvXRq&Z)`m zL(XuBZ91PJ%KNx;BI4^Ga^@0~H|synVU_lOvHX@ z7IB{4%Qi$ZclT5|BEY%?Cz@yrd}Y!@`>klRGHZ^!gGY&?hz7+Ju^wY2_X8p}Nc>p^ z4UG0hZxxUkpPng_8Ax~R$qT(Ml}U3Al_+b}P=6y^Zaor3MqIms7M<;yz!^Y%*1bT&0mSn(WbD>gcVS zdm9@D(_N)Si5}jJw|y;#G;Rr)nB&M98!l(a*wc+A-5B! zk|7=tjb|6|#aJn!@CO&r3XF-Kjos&zHHb3N2xK#HoxXq~;cFC-ASIE{e32&D3$;bG zHFvgHeZn73Sfqr%adz@}uJeb>sZAJ>tM*nDLu02}%$;{%cLTx@FZMF>m;Asv>HGe# z3#0%Y(vs*uo0G05|HA~~|NGy2va+(u;CPUR23Qz@Rt-4z15W#ZsbO&R7Nn2g z7hU|;IRyrSJ1xM479giw2`JIgH#4>1G%dKbB0W7Fq?o+CJdk3*as;eJzLvL%pZ zZdQ|J?(SSQAZiwc0epy%m!wi2(+5hf& zfI(c)_5dGH!njf~{{8&=7XXKget$sU_rLrBry0Np)QSIw+(CW^$z^)$Ps!!yk8}q$qtnd?*Z^;E+~ ztzA?z2;&HDK?$dAeS`K)!+KVZT?ZtWgav258**ux!4sx<X#_1d_{Vx$%_M_R3yO6}+d^#izke(UZ55jVmf<+GXP9dDTI3X(ayQ z*)JO9u8}ztk2B=e2cR5D&?aua(8&2}9%i7L-lg%bW`TMH8J|}o;QVkWB3@3%fx{w) zNO@^{)NQ@@*~qPF2`ZUjEqOgevpRQ9X>1ukjpxoLv=-6KYC&fa1g~UPZ{yr$ghm^w z5uYL4;~26oBy%P{i)424`#gqY;{HV=QuTy07sque6@kc~LnHgPsydY%E=#~({_Vi? zY!xC=glD@Bs^<^{Go1iv?rp`G&q%mIGtWjsVxr#HV97(^*N>){YZF&@5z&Ugb_gNw{E>RB`&OU)Q%)>d$5ryatLGw(O z%EOowu?`}(*A4}&c$(l(Fc6!IP!$rn^wo}#)rqH$5P5K(Aq|nE zj?3ck-(NZ%)(+&^&HRAN=}bgK&N)sfh9V);LGdadlT7jJsZ@j)aq4Ze(Tf4IX&LL- zNE7?-uo1@>6#MPt_yKNmqfP5i^@?#EDWef=wRkL62Zwb0N@0MC$*18YlOmO(0f%=N zYPkP;9JZ_`ebceoYyAGM_shHQ?+1|YT%L{)xm})3 zFg&{a@RVOH=nqcAzdQbaufqNJ#?LFK;g73u!NrC_kW~mVILQ(XAmIbZGyohf07V3# za6h1s3kJ^|cplUojnv`UREBK>!`zzLJz&Of=i?Dy~g&p+Ha`k>Md ze)vKJcU!t=Pp11wj`Pzzhs6Th=f#%0C8mdEM(@h?Ka}f!s?hpc zq4}*s{db!u5zCdd*Q1t*P4hM3hfy6iwvmCpr#HeZvYA&0y&R>q-G$p6$ohq9&`ZVT|n#;Ag&)s z7y?qpfz)XrZ3f7k2XYpHf)$|RIZ*c;c>EH0vIUI30-mk`3roPtJg`0syqE#D$AQ;# zz?)g%<0|lV75KgeT)qT;>;peefFJLGuOER=pMmoW;LCU5lTDB{KA;3nsHMfBrx_eP1l11=Sw9>G-kvNlw3} zn})#Ag);X>*M%rml0-k#7I@0ERImS7@{@Ecqh`X-xT6Bb)7q7&)2Blz-#lDGz3srw zXe^vsdc~jmOe3-%TN-q8oaAawe}2UcKlP0*BYVnx@<9t+j@0L8FWKOs85el^5V8bi zM3JeU$^@O+2Llik`Kk}EIF=i%?mFFq6mHI*qAWbUJ@A6feGY;kub7-E;q~)_0-~+> zbIIZEwNkXEx8=P$NO;2~{I`qjCel&?k6FRElIagc`y|*Y59vj8SF6519(SyH(T-jz zuKYYK6oKw#BoHCetPXV_Sk|ENk!r@JzoLNu={YmsAlJ>24MO~%JLkt%b>HQ!?U z;ao0?A6{mnH7So*1SW&w=%j|5UgtsF&nh+VR;?jPaa$9nV2J%p*?A`F6o+6-pA*|j zXe&FkNQP0Yt(OdK4=pSAbwZ5Y7AqI%AdK2v*PUawxYeX03c**ujo}htg~#GMNI5Dw zhcG`YZe*HEml4!#prbHso|~KnL?fnDLzoqGSZpaiUCb4?|DeOpxTsi~zte!Kd%H0B z?1-V{Q;JYA)9k*?nyWe2xst?d%<_047lle))o5e8@B9!EVmw!Ku2kEuSPwIM6}E6x zjk%33mG|}o_mtKLO2n2#=)tIC3#Qe#gh7tWQ6izQoIF!}7pnVr?jsu6aAK7EedgBT zQK)sL-(#14$C}Dk9;b z!Z69uhtXsh8CB_XyhYl+Gk{#VcV@nj*xb@euytWi29xfh%YYWM9;Uk)^P|Z2d$kQO ze4^Wk_spbB4<1id8V;B6ZLh>6z9F5y-LkDOYA}H_xFD)}hft$_f^CI1#dlgWtY;|rhW7Pb zD;|65cwawzP8oAYa_t_ojH2p(JDa;Ki%_svh3`b6>oeTJI>zzXFBsqEu7dyru6UdAs z&GkzXO(Dmz>NCWaNN!D1PzCrXG|pwo2Ojmz!y3D2M#LNey@?QFqZHUv9ejZpByqNNO+vHInm4nxC&NqCAAg}!#vr{NfKy&oZBT< zmIW4wT^~Zx;ZekixTRGpy$5>^daEFtErjI&KA%r0JP%THY!ohh9)#oA8K_T`%qfre zi7E3N4?$LS-c?W+!c<4|c%i^|RNRYCDNB@(B|vXm9n~N~g+4#_Ml*bxAd3;gU5_g4 z5KH4nI70T^<{~vQ=SW%O0+;--CKA#*OovB;aC_7mU#$2jDKLwHXNwchoch9iVJCZ=M{`9wTgOE3t%)2jV-ZO+0Jmm*ZRClqZvolSBPlU zIW0>J_1A136vCKy9j5#i<* z-;G5O`b&0zL$Z1d2)yk3j{+W`e?4p*S2+7&jD?ABrvvMHPcX zmx3b6LJ<|ANGebiO(>Q=6vq}y=m{YSf>1_4=wczPNf6F-h(IAkpaOxn5tX|Qo4tpC zX^56`hKq1R24hbX<-ibe*BE}s2=28C{D}m@2{*zC4Z_JC^kXiZBQCPn0`$A00xu%uN&qsnxsuy#`fBVH90@1@(C*oi7t&#E=tWP%*ZLuEvYD~t}bt>t8T8Z zsjmYUz}+0M>i+fA)z&uD)iyTNHa6BaHrF<^)z$RWl?~SBjMpSQtqyxu;ksICyjiBZ zU9I=J(c-w(@qM@VY2W>`p~$yGNjn2Mt4}IsdmD#(dON!(syjAH+Fs?i?q)oGo!oku z)^?KKeU>rsIcMxk>Fnp~wXe;4-=Dm_9Q*)`fBy0G;>WX#%k|Hn56(UuzI%Ig^5*d9 zaQ`(p$^(w|ygJ-keE(wX)63qA?e@$4*30AW%Xht(=L0{!i~`>$fXgZ1a^bpmcny4e z4_tl(E-!!|m;cbW2eUq4^anKhLB}7=4ud=6K7Rdr_Wk?YA7Ir1ya#}D0Qho!z;{@I z2P`_^|9&0oh9my(?-}~Fj`g?q4AmLuHW^1)vtGSt=z1ONwasua?vncLg6w7;YdW*Z zR0jARa2}Ow+lcD|C{u7-)aiFZ5Ula3UEJYf%^)u1IVlc=;w!XR;dwXfSi$u(VfbG{ z*cv$vJc14QO7%nZ(9+IaWTEPPuHsU*q;>iuBQwQ{;;B(5& zF^H%khT8*^VOfna~i((tf=iLz`v46U$gtvlGYKez+6Q zF~+!?z_Vh%n<((QW;aRX^Wko?_SX0|;ZikPNGSE6F^u;OPcb6UY4M#Z*~WUDyC1V7niZVR zvmXpOOUTg#H&o*6rnNO>i;%vh8%1+c4G#h@}9r7@2mF=g_!C` zx10w_-?^8>ekcpR`r+x>|G5@h8Bo8b^o+JZ0!#{|8|8*!~kVZL|Jq$}S zg)tWoWkixF1ShX42!ZO=a7x=CEbcVo`*Z;s9g38CX;TDm&^FqOOv#o)STwLtlaEC* zF_a^U5hEV-3Jtksm{N!{nt~^e)lX`a*)SA6T|idMSza1}D>Yi~go-FXW`th1DPHn& zhuBDd*z*t$j&%zYuOVfW%@ZdY5oZhIQ|GWq*;%qJ!Z=Euz6`T>DDH$g4Q5Y{G#}qW zyg9-i^^Cl11WHSsM{LYC-+b5$acF#>Uz81DD6Xe@NnBs;qyX(H9D8CP!4dpbg>Zuvfm=z>HtxTD?GfLU>GOTF7S{R_7Jb}N1kXt))w{Vw$Wi1qs z`V2$VLJE#!4N3_>l4mMo)fOHw#FA-B^+)`W84Ixvvn6_lPc38?1@+H{U#@oA;q zy*&8#)nDpkNeF+gHwym%ld44w7oJ}1<>){^4-%_B!>NlJjCyrEJxELd#zdj$` z?UB<gfbO)0dqN&3*J-H6Iz8p#W);+6JcVUq5ca+egUZPq( z*~5ZR)rO{6!Lga3B8u1Hn&MhNGHydL55&_<*pe(0CYCZm_KbIaCtfKOJGc8`XyJCJ zwpyn<)D7-zsi^2vj)Z8HfnBHST#-lOPy9LqGZd|tmlpAeOaQXJuQ*ES-krLT^CN@W zx|I-Bf)t|{P|+_L>oYzp_n+Kmq^-X&T6)dXCDL~E6J=-R1+6yKfjOfEjwe>HCO%#G zOpQW&D%^ytH~;O2@_y(}sYVkz80owy{uFQ04d&CiGb?L~dO0Uv_*sxRoI6msDNWJ| zr41ZuSA~9BGI?npTIIz04lAb#Wll3a72zI(8ysduM^ zIL1bc*q9XAFF9D-${YRZFuJcn-TR?PW7O|V9)2PGv@e?guR&#n5>Nj~3fH`%x&k%U zWWH%GPrNz0-$TO&AS_2)Sd5elC z>+`QK>G}~b+;Jz4)(_hR;r10SpzGv$Qzkoi!){J?9=IW0wH8 zGK{uJBmO=65~A{K4)+MiG~PsB z1|b{ScS&X??Nx~tc0b&LV0e-zgeSn~Ge<|<4SLJhoL)$2obAER2Z3k&x?S3m=fb-C z(%D5%xIi~0qS|G6wRDg=NpIpy2rgF=MngAs5JTmv&M}{=BOcuTf*JwQnR}+va|bOd z+DG|t$0noR{K1STtcK!$?skmCJly> ztr;)(%!HA|6FqHhqv<<4HlhewMWMR4jU41729D7epGYw;Oth{M3pT|!U8;{=N` zRCAZm`dg#jk5AER?#{;E{F;=7mFAew-Y?##>_Uc5D#4yOK)|;MXtiN)O7Xoz5xm&fI!YOlvoFc%hZlRF*5=M-nbim|#sE`t+&wM#bCM#iTFktABnHNEvIw zgtx-82I0^(gFW|&Woqu9=*f)Rk}$1C0_EfQm3mm4?W97!FdkXYeV7(DVRR%PY>!R} zvmM?R7Wq;A#Rxa^rqx8I}rr4&9&8UfwAksw-!LV#6bti^2`KTSzfg?r< zeTOmYvgmG%fgBL!jI2<>&(#D950gWA&BCF{Jr)Tc>0IC>k|I0Uw9ZmSh*NzCtZKes=ye3)O4+B# z#3f5%aaJOZ4&4igA&u!5XG*to*s`SMs zNuP(t(yre&yAZ(5QZxp}^Agdl}1Q>kD;U{p-%7RbA>6>OiA=xv!^w(5}4I(Nt9Fy_tmVS^g8CNhJ$bnsE!>V)drPT(9 z%MhA`qUR{s>uh_9^26FG)n+D$9xrROniK0TzyFFQfq#$$j z2{uSqsm*MG|H+HbE3Z`{$CNn1pEvDHkcT{1K}W7|u*x5W*}{B)aMRyP^s}8VN63gk zk#{LsT;6(2G;9*A4%@i&PmxP~Ampy`3fVMNh}R zibS9o&LWPD0jqtoaEZVwQ^>--6VtCIIK?kK`D3m|9`@z{a-X0@lteOoYMDBk@^V{U zHd>v)1dKZm*4hN8E*`cAEA_YqA!O2G&P?*$Lyotx)mg)CS4YA9Y~EEJzq^(CYE-iY z-?)8+kjNi=F>2nZV*|BMBP&5wOeBeMbU3n5iC8qr397wwTqVC@+A32zjv4J@S!)SPsdejSts(tbJA`(8;(NvYf%UPO1qax=qccLE4uT%sR853*55~>=J zOG$ez%3-DL$QF(!IeBFpg`7PZ`E>Yhb&Yz+O(+4}xZ+5S?oED%ey`jg^m2yL*~7Nx zAHyrc4%E@DR@$OvJJ6tR%#;`|-PsPu_2svk&i&gz=jxxe>5S*XqIG0`5_J{@R0Sw; z`sa7Be{Zt=9*8jwE32(Qq$+_^fE5$hVmFaUb(0#+qp9Wfyzgx7Y3}ayPer}(2=|5U z0rNqYO&Cq+Av1b1Y2BC!q`C`-r9GUeHcBa$DfT78T_2gcoAX1z2Q&_`bcLXGkx#ex zZud}GWMu`pRZAGosQ=df=ZP)=nsSIhIjhj+)xjvDUNY` z-0L9J9sZ_fjvkiMO?o%Bpcf|tWjjiHwjdrBN z`vLt3obLC8YA?HCXo17;zKtSCq(s`oe3?2plsH{avSdGYoxRC`CmW_*?aquD08~je zAI94f)s2e^I7;+ZJrxc>Psn=`JsuMgDU5-2Z1Iy#$6lz{Y{+35 z)lMie_p~W>Lr%=HWxK-LCUFKeJuzH{CaiJWyAir7Lz`hVM=5*bp=DxCx|LE zqmRV7PFq_lS~07rI1`M<;Hg?|m`iB+$9%r_sU7#hLpx?1#y%*)Xc|&cLow5aX5hAG z9-m||>yOG*%^GHp+OZDIO^qjWr*6b{qF%D(h;#0hm<-p!c=%eUY#o^+X9s!Q)td*& z-}GfD6J_cQRvT48-Fxxct-2t19gq=f<&ke2Nw-f%g~ewpCI~+ZK29_QGWnQlq2{v$ zY-;$rFp?**T@H8F!qE$R*m+0g-n0{$ND1NXMFh@8FOd!v<8Ua;D1K8f6qR68ykN*T z;JraU&A7)n>3mesScXG9p)qWDbC8B?Ry8)%5yO`x+b=QqFiw(c zLwI3yP-I4LRhgX9&e&QeSPNgmGK1R7Tj+eT3-~G~uf`Ep97j{OI$rs%n=~t8^>$&% zY?R+p)$WQmDBPWN#uPQr(dWu5lckid%8b)s*`TF4f*A2=XNPV!#-2pVR0pud2qvb%Xc@r6L85pyY z426A1uJkcRFKIPUkX`B z)jz5fVZurbOx$nlSD-#AIlpiBNqHt+rPGB`dMX$tXc{Q>RTFSPCfPIQi;2-g5 z!F`3!KGIrBdn0YTW z_sFm@$^yb`&X!?U()NSh8VJ?Ycb(`XGBMlFx-sCR!-K6wQ| zaKyL7!w@marE}D`C8IEJ-;E&F*pZIITQupNfbEVYKsf@Qem$d^NQ4utA{A(%RfwQb z@e#T3+#gJ5)bX@tYO#_j5)B3rZfPH?m&qiO%j9VvX;xu+us@&VvXif4RCrks%S-n( zjJZc@?su=gfxyDA{F+b&gouu8ObjQo8 zg_5B%LbINWq``B7S!vNzki9>GTXkiK7O;QHG}rCL$r7oprPyj(@laL}nU1G}^T_C-tb|%bJ!In{-g|1CI%rDh4nxWBPLe^E&fF9zZ ztuRJrLVL1L5;|sJgRhlxaj&zFlF@Td0?~r4cUqK_rak!7eQ{i=?L!a=e28fwXg(aal&+Lpw217Q zSdeV|5_{|2B&(t>99s!n=xeVBz+DZKQX?BeT?2>84kCM`1*A;d1qnGKvzKf_y8eh< zcDGEF4Wb^(gL03w1JN)a%>phZG9jpaou=4TRUGMU z=XZdVr2PO%=nS_QmS+-a%xn14tI1;p-v+KGYp6D{%J74c+BRZlqaeS~&QpeSnJ14I zvBcd&9iQc9+M>XXN2os$q{=mjcv(uk>PxiYyF$S5QbJqD=F?eSGJ8kC!;h%>l#ght zKP^wcD!i-PROsXON!=v-Q>e{-rio7**{L$H4Fk0YKRn~3#S}>G2s$_X1;IeLv+AVX zPT+{aC}+!fuO8K~t}&_k2ylr!U{&K9>{@TqWw{L*K}B#G86c%RZ^mTrbRiuR&qo#} z4#Ae?xX&P+mN>7$rg?5j(AK@osOlkT@QK;rJ8{WD(7q%zO*QaS-S*?G%p(5Ga5y~} z5>k#hk}b*zY5Kg}h2ne&QOY0*T!zKK??Y1u;U9-3U!3dnBH~P-U`@!>-j{4or8XE{MLyoScA!LHNmt8li={8XO5t zv@&kWT@q`FS&7hW5^EP>h!h@?;M5&nF2$6D3R1^+AgVdm+B0ihS(6Qsi`tfNF?TM)mPal^*)c#N7n)+r*Vd)t>XR|J#kS7xo+$4KoezRYX_ zl4Hr1waLhalVF+A<1F&>rO88?n&R$b$@WrYyNNIux~zruZo-I|MXy*h-(6V)DFI^GfY@t_W-En~(l^xXiISCe>bUUjpwt+I-tD!H$My zeKLq1y_7`C)~J_yHf6IL*IE+M#C`Kh%+7nuYJGRu*=KX8=e9eaw$*UnN@rGUC2B-3 z{A84!*E96FOXR%EM{-X>@fp zgct&R5n2g;NzzC)UGwoA!99MoR##-hn#Fm1Rtsp#+Y!LWt;jf9Hh zicyhxfgReEmPe!JWMhuJAq3f2mhZG$3{Vhy@V&gDBKR!1YG1bkXE*w+rBif0(a|kyGBmmAM#U#Es}Iu|{IoZW?6= z>hoW~Jwrk+fy6Sp(jZ!GA)--AjM0-DW{!X^g4OhP=+)Qp)d+?LiTOy& z;G;NSy7&;&fc~cQlQ!=G-q!bLS&uR}mk)a8vAKacWUnso9}<_c=h9b^n=TN zu?L@>By%#n?Z?0C`<9LWC=DLMu(b}>=T0#FNqVS$Wc?%pU2fe677DM17&&OIqd zYAL~!C>%;8?u1B*iD9XRVPTOGsprFYy`@WHTOtP#cq*hFVxpY3AY$rBN_!*r15ubE zQ04?AOgb2lk5!s*-6IOzm1&+J{1P9od z1^$?^{wVuEgdT-Kopk;pH?DQL`IJJew$(vfz|Vg$jI zM^0;-T_GdNL4VxGdfZ_ENpB0%lZ#}07-nrQhsF_MtPizHL2?C%p%w#?Y~oQ4HN$dE zuzdM3R(b-xK! ziKJBRP5um|jpCjP{eWF_nI^w9QBZ(nNDS|IC=dRHHuCbxB9j@t3Zb;};jNH}Ub)8& zldXGGh0=79@lQ(i{}+2-0Ty+-zCB8cib{8P51rE89nztMfk_y2NSArggbQn=>K$AfaP)UHQ?A ztfoN!@wv|XX9blj8S2Sud%0p98c^-Sy4q8H&#t>GWT+f-^fs>Z zv`X?VZjyoZT=Bu@LhVIW?Ii0S5bbtP?P>=iG7g|?Md`7|>1fMQZEy0$wDlk__f*J0Z|_3ah&uR+PIXX4x!cw$wt9&2#ir;|HgRn2FQx8?Za@b%-$_T%aHbvRR*e0zAshcNfNt(1G2)k$^!({U9s0Q7xp?}`Ph3kzu0PZ@ zsd=mo!&h<}7_fasBEIhvV(|!qFBtF-mB}Q0lKt{FND)0^^KDCZ#*1}%YCAp!HkajB$1sN zrYxcoF4URbAB&@r{H!;Oy)w}&JR?OYLVE~H)d+jX@b!zxWB4J>q)bUAy$M@=oWV~& zM@5>Jdl%4;7xIl4$&MH6j+fAnLw4>SlR5UhSmBj>edQBFjO8brVdE7K@#yIA^H)os z&5zg9Pc-mNG|Emi=}t7;OtduT1dWT=FR1E9bZ}gq=*$iAv>C3kNx2tg+=cc`$bxBU z{wOSE+xXt}M4#@nN;abb*`ugJCISA>o`A1EA`z9yY^y2~yINa0uFtkLHo5b3In|`A z#H15t%o5FDr+VPhf)NF~2HonYHv8mCb8lLZ(G{D%Po1578+y^YRXI0}7|4UiN+uh` zCNa<|h_?okE}yi#(_a;3)-$JdMQrL5S~WjO#Y7-uq~qAylfFeSL(wgLYL|g!)kDtB zQ)nDrJ3dB%1A4?eQ-l{smY)oBh-uCEn4&M5FBuP{#R=(lYoPCBP&J!8x?|MxavGna zf5>Kra2T`d&J1zdOr7@(x(tSGABu1iio7$rxvf9huvdu@=9O4K3rOMC@qSV@<0}xD zuLzg#EiOxQE-wyk|4Vf!!c>+%Tz=$gmJH}tufouUGmnvW-Xp{62n&WFmp3HeSEA2PiQi9@ z3tjuMmrb1&_z!sbblz;yTDY#r1JjzFf6n6CEDM9bFhPu+gx6U6j93y1RlKhd1tz~9 zs#p@W`QqX;b1NG?8)0)_B?5nC0($nMIbn)3VjA9*=-lRlte$m?{A-J@Jx3W+?=9L8 zoZ*SK@$g@`Bz@-Mhco7NJUnTq9b4k~@A(O>+g!i4H2i-48n*l8eDsUh?mqYCjovQk zuK8WEMX_3%74O5aYeS)Ou#xvqz64q3m&0&q^SXR%Db_UDwiHFU9OYzNu0)UJDSm&6 zNei*qc)Kt!Q3-VOI+U`z;75$2;EXOC1-dgcX8#>TYKR) zlxzZrR?M#>nLy73KInJ={PBbT^T2_FKq(9b1r-$)4d{iT1H~{5Oiau}hYn$3VI4kv z_{fnXM~@!G#>PH&?AY<+$4{I%frEns#C-`_2ub)z$Rx-plqjflsc1}T=xpg292pp0 z7@6FeSo~R7Ls{9P+1TURIg&Xz(m6PDI63n~0_CD6C=>_~w(V*V zc77pd`ehH~>vjiVTH|i!=5FNXuIJ`?%)?W~!&A<~Tf)m*$jg_@$DhT||Bzqcfq-Cw zpir!kNQ8)Ji0DcGlj2_Dk~by)Vk$PIyeHsvg_F7>R+#s8mH|HoAZ6R5$UrPF10r_7 zkMYg^^2k2gRs>@PVtE;C?1DvI#9l4nU);Z13%DWxDFoni01OX+=V6Zp0>S3`3oX+w zA=3}3n7~Bmw+m88$I#N!LT(O%0cOAmgX9YO7p@>AVjvv@=@>sijDJ4Q$sZ%pl9iPO z)F|@u@(KzHii(O#N=krM3oxY^8X5vEia9-^Xgb=Y1V5vkL@KOx^0c^KC5Bn+4N$t%@ z=$W{m@thEcPL%EEIcfQY=Y*J(^ec(h0?Q@!Y(Sz_@ zlm{)m;*zZD13RA{gZ4`p^NH*Z>8l?s(bijq?K=R^$>z)AVvkb|KAo425ld1Yc*fl1 zcle&&)donzYkDqfsL^m*O%WE|1E?!e=e?bNsCDUi=DaRi^dbfBn=@EAxTM9zC4oAD0U`(>W=eyWz;ZjiFA!YP1Qf?moxRb!RfP)u6&su8&1vs&l^HvRNq+ zdR6q%Y|YycThXO0NwP~evEj}5wxa32MG-F6-(G_lnJ!r-^$K*D&oI6D1FAuqO=#+y}zz_z} z=v|8#cbDQ4tY~vCK?>WjOOH1nDJQSTed-{a$<+}ko7{qSg9`hu&{^hI$E@9zQ&UyIh zS+_`T8MczR#ulJ^mAiVglKXk4p2~-W4$THSH@)|vKrK5>N8z2+?{L1q6yKU!x^g3& zB6)$DB=YJ~cx#5m(8kkr^EW;OmmVCDqNN}`>Est{omHYlY&K0DLqxwQa`e$5w>KB+ zB(4ux`q0>0Y?4o1-M}Ezw+@%P(C3OelJ$`LGzP-}B*lxD{XPQtHpPTXHc_f8j{}{|#VNRaMp0)YR40H8eB; zE!Xc#NdPhdqAozi1pukEv=n5d080SL|9*xnfFB^q+&c)iEWi`>vs4pMIDvy8C)|%K zh?{r+y$NnraJ_;{7F@U>1>MU+;rzh62kZ%g1JcoN4iFvrD-IwZ{_O{BGVVXSY6hS7 zzk+!F?cZ?!JO7mbI{+{1ApW#YHrdvwEBg#-1$n zrroYDHCpUOq)dgFk1vFIzbVDfjVq$=3nsdqz*|vru_;jUb@PihtJIU80k5Pz*pz^&lAU&5VF;HfPg-XOuE$zBVmt5UeOuKSjrtr|s z=Mo1=sKbvJVqTd}EFzt)t<3>j?k@(w+(~+`9~N$ z=`8iUUyk`2T@IVJA+eua_K9;pGjp)bkm}NNQ_3t!%Vg@{gh|M9d%2CV!i2)}NZnM5>L#1tOJv);E*yzS*mSSfik_n^z7|brW-s+=wi0 zjtxyK(T$bAO=lQG6-Ku-PZKO7b^1KT!f>0*^Gu=f=vbDwPYq3PHQA;=I5g14P?FoO z7av&Nevj(PO?1=DZCXPis-Qr+LX3x#C(7;_Wo+p!$zv887|^?}pe+kUL>wA;c$c45 z%a`;TrU8Aw9(o(yHN%cH`D*mSWU2-iokKV7pX0WokH5QsX@C774$avRiA>^)QDXXZ zwzaaGdQ>MU;!n{Z;Bbg7LiLKW@F-ieAfX%DDo~_#Sqk?*7y7`pCvkGM?9dgLC-|5Y zVHp_tPC

      9DK;J7Q@s3&EfvVF}Lc`NI+e=9t#WV}v%)VA`JDv8L-jd!|$^Bl} z-DgwmLBh||V>`s*mpALcy`uh^N#l(HKOk%wfGqXEMd59cblsUPO#GVPqE*{>MuAT+ z^7>r42s7@Z>_#!MF4Nqg>?exEIPSyyb&bakdaKDtB5N83Ac4g3AKz#xi!@0}Ai-+b zn40rDzvzUDdlUXBpoT{ZQlRaRT0kCw zV^L*5*u*jWj{s&lf4zVY5d@AQa`2I6)}Nk^;?X&6l3OJXGj zi%$ix=)hxTk!xD0A6pf~mKOISJZU8pgwTVu>?oud1m7t0`Hx1rD1r8jBq-ZLJfMEKjWFwB?c859+sT{Ywj zaHqKk80$kYHUpzf9ML7~zNx?plEQApTXQ%F0u$X1+8A5L6nG0iK3OLt9ITdDEKPbG zejtZFk!8q&8L5KsAk-lem}5i)MW0`u>7gO0LRALQl3rDgZFm4MKhM{lNzSDwYH6}4 zt{M=}>Jv34flq#FwWZ(SwjwW{1w3j=9p_Z4gpq+2BhN-#uoGX8YKSAdC+^-fS!RvK zR58g{P9;88mLYX-3#w*yksF5PWQyONfNwrVgu4*LP>DgN!1`>TDXLS*ohEo;a6d=uv!BSsw()qOb41mGt%3)?8B`r<>-$Nex@ z2+)P~tLUzP?$DSBKa2LdGkeCi1KsFn$i`8sa{H1&s}Ro=OKH!yN!eN!z%0$``OVPF zTQI$ym;H~t@Ug(Br`-;QA&i0W0GQx$ah#aYiL>fWh@R=-jmb%U4@3yN?sv-US^MjA z#zogzzwlMxD@^zrXGlooW|SmI? zpLXJc@JTZ<0SUbQUpd5HLt)!LL>3x;1zw6S1c}3*&j!T*{eAr>4hLWugvV|QMi!w& zz^NKU;%W+ke4<38VHg5wHHG5$QX+F#4S_wI!pL}Vd6?ib1>kCVE!L#SREn`?H>nIg zb`Z!Sn}_k)Y|;Es#vVkfM#yfPqQtzXP2!sqSX?7{H}X)(;w^`-IPGFAo5MJXA4VA8 zVr6>w+oWt7@mwH8$ndqyo6ENvk83VQJ>BYZ*CT|vr8&Xv)85fx6TC9?2F`ajf^HZk zlQXiB&!$?M%)AmwBMtOG%VHeXiBgGuxN0W}m-tGd zbhJ(nptb~n@Xi^9l@m^1(L8l(@+-38|I9(%R z&DS8)V^rdv33$+w51}$C4MDyjGQSR{2IKq?cV02TTm~!jZO}(dT%AxWWF%w0PnqFE z`c46-dp0sxQlBc=k`p~FH(bRMh8vjzVE42bq1q}&Fijq*P}5cTpw(WZ$4WVttBcP& zky1NO2ydlztsYWUtX&c;Cs}+GV&))QGD1UBc^C}Jfjq!f&L3NH#AMsUr_ySpj5<_k z%&=*NrnB?z7$_Qiu{U#Xgg$>YW`2+L4P`0M7ikn(fLjFTrw2O}epIKCX?-p=^Yi^+ zw&>*W61YmTq&|6s{TqiK?}Q~TUNpQNhDJ5S!n&!_liuJzr&DlgK7D6eW2Xk2O3i5L z$tYwz)Kiw9g4v>$CJgGCll#?dx&{iOWpE;X?pfh;`hV7`lkr%a&FtvA{LFrZzcwMC zDVwytfW5 zPC)?jcMSRdMGV2>Ui*2JEZl|cJNw9q*=n>Wq+jE%~umn!yo z2Z`WN0~OpmhNOM{m6ak4{D91(Y_R>6-J24qnT^c5%UHunGQZc`VKwSEI~G((ihe_? z&09BzV#?QR+lwfTTpb?C)Y)!A%bkPG)g;ZUhYHjrj0`6_)?ut^h946^=1MJ&w}lBt z;jMPgCAzf{Q?s5Z%IDUli@}xCCY&geJZU6og^_U$>Kb%yL&j&7={qz*%3W}}30Mcu zT65)*Z&Tnk7z#XX-A#yZ2`aHA;tn$hQi8q?YC1wQfY===!Q`SQZwt4>YId600-dih zXMNG`67y`*B?NnXbqvLmS;??}8;5K{vQjJ}K_j6?XH85lk%IN=Ll)mc&enbTh3i#} zN5HQqy^#Ul?(6K=3;*=|rL*a8VzhgA@dpIPa)4psUcGxRE}i|% z_3p~QdZ_;5e<&wNyiJ!+4j;M|_-4&!lpJNU1E3HvP=k0xCH>st`X@LW1`*3W>piAp z7o7C#zb&i%vm+HGv{<^;ovdwo!as07SKHtdENpse_D^Vagzd38t?%4UTzGw<;jz87 z@4_tzCj4`c?RVEg-=*(>@YY?!@4maftH6K4+W_{bA)Nl}NO6%}oW`e7?*5y^Ad!6< z_UB3M{@cs}kwfmr=kH$qcZL5%j-}aO=F&Y12s0ct!IVnkcR}7tLr$o~$LhrXgV1hy}x6uNjpqfl1?41c! z%I8t&gQPj?I^{}N#N19k+M@-W69t6L6j6!l`v*$=R46<#6+w$Ef!GexFeSLf1m|TN zr(y^E0z$z4HL|(=2)~0|QjBM3iY)gFGH+@8MDpZHwP3nQM!tz>XR)%D{{yc8oo$<- zu$ZWX@?DK3W(AaTY-heag6x*+9fS(vS-gZ*LY!K>;0UF!C^mdoLJ(R)GiE_`OO8WL zy`oD^9=U@c^^*#Jm!)QuR;+}Iskr=r+GvrQ5Vl+NrIg~CF4XbEw<0e zwj+hS4~1H>vC%ApEoHdMYv zCC6wa3aLa-_t?a!#q{2>^8Liiq?Eg~rgJi9LM@Rc-)8E!`B7hn*k6WY1jR4eSA%S0 zD3$Y))9CBje&@8(LZHD(HP=TzAcoM62$qWvTS3To_)qur$!)b7V7AImrCf!!f~cjO ze7m}4rN+JmqFe{`!?eP5R1AsRB3u^gY;?THHhB1lSgBSjV&$~!D3O6x_8Yx z4lpuz31cg)Vy%t&=u`^JEDOuUU&>i3XvI7148&|{Y7X9Y*f}omSsLxg%k9A@(kW@# z8A7&ML!oeyP;Md1cgu8c__hwWhe}g4FIe874-3~I_8rjA@< zX>IWjG+|a?&x&BWDv4ohbuJ6XiL)Jmmd+`Ak zF0u4>uyRu&#?XGMV5fud!{ZF8V+p!#+`~%Nmg6k8BUP&taXwT200*YWJ=7_iKs%dg zPews()2tf$G|!_Cb`0VWd&7Qee<268-FJ~&4!noQ49MmDC3Gcn)Eba7UFvr!Tjg4h zB}_`TbiR%*CC5dfN4b|rJ{|8g=&FKtPqgNb;*goj#_Va0Xno91D_c%;BC9i`j>`0^ z>zPj7ww!WiYGm-~O{I=AB5SI4nJ}&P^B=28hpS*MmyQ%$2dpKPIfaZ#m&aPZQ0jTd zjNzjya)vq~CWFxG@<96nH~Qcf=zHplid}lUREKcS^16BY-djgXrJ8y^rd;ado*_guk#CV`6l&lywJjJ%VoOoYzCXv>yh@FlXarTMU3y=UyqW@KW7(~^(3kG|DJc@ z99=IwTrVPQpvkVQyH#-2t|y%p7hSBy6R?Z*<@(Jn)~&<(txMKlkM(Z=ffa-X{qD;7 zOzIuCa@z`LK{?m3$U3{rGH+rwJR>`E-{Tl1);Z+MUuJl#sBR1RYzm?0y9lSwkh;ZO zn?0-QGCk%9?8AUu>wweplVxW$xpVvVqeC&`b%e`$*l8>3iG9EIz-f)={IQ5sE$54K z@w!W_+}Vv1v%tJ4t->wa^|NQUpoj9Tf$#GxI_fINJ7;d^zp<@{Hx z>EnAQ!(rP(g!6xNr@uSgpN3Bn*j>0Y8!-3W5st1+`pXMKuK}gUJ5KgyQyd9@Pjr_V zpUj;4k&kU2uK>S}UJDyXVGU1(mynIRLM4{+26iHV6VaJXn-e>(eg^J>+Z|tNet>n# z3){w)jc=q!T7UVP*7-vr$2Bnnwsd1nH`Aq2Ly7M-$&V%^>FUmIhG;JLx81!DVmIVy zwC1-rh&`87jm&s{wQ<<&)L&{7>{`(HJ#qh4EKz${XjP?AH&;yEw(B*>$$8+1HB<+B zRNI~SPL)C*ZxuYPSb`d0OcdN)^sQX%+}!-F+~V9k@~u4T+`Rg&yp61zZuKO2N0UY_ z{PLCUQ?#cD&K@m0?8+q(-JD1P-0N0Q!k`Pxf9Eq|%_v-lty3;Z_@1pVbplD%>z7yh z4PN@>j{a86{9lgKp&)N14UT<5zARPA3F#k)fXUL+$E24g8 zd%wNQDdgOMC3o^g?Fwzh@|wDCwZjcZ-$rl#v`mOLaK7~+^Y-GFIS<>VKJgN*lF1{s zh7o9uCheW@m?&RzZ|AvBNbo*S%eg+bCHIksWV{Ijn?Wne3Y&(ib>8~i?4tYB<%`n2 ztzG+b2V1ci4*&z^(ObyN0B8jO+XKm645V8W+}|tR@j@s#agm)wnR!pLxh=0AAk62t z>rE2KCvr#LHNIR8Y(5;;4yV*UcQw4wKg^zVu6$uW<-X0VVa?ipyvA9#>7l14t!L)^ zRGk5*!B%`2UV9iDH}cbb;tNe4V=Y;y?#;vXUfnJo9q*5oxR^-}J!+lZF=}Tks@&wA zw5)06$vr%zX(i8`h4x%vf$zs*E(|fNLd}DrDoQ6=hlM#IHkk`70%%=Hj zKIAC2-!LQl9y>q5C_3K_zHs`pMQSHj>rStiGM`;5$x1#+_v&*weik6BIm!Jyr3M_p z)hOirfS9&A@V$-Ky}<7~vs_*o=O-`w4rxCw`>3OjOl)46>?7pugGyadB-O+{jgfBt z_BhU?mv*1oSgEp{UA&$MTK1#4oT9{eFAKZUu6}>uc8j-e`543mX{BumY@+0L0Aw*} z%JVxpH{S|X;1cZEkTfipa4~B?$$^OgmAmZ`fWwRY?7-RoU-iD0y-1~@N9{tmHv zrrZ_m!S+Ze=w?%PQCt?R!SN`?p)vX0W)daHpk9kdV3*5Q-SEg!!7hxN_0TzRrkhuh zlI5Qm#m$;zho5)NnAAp5%Z_G$uTJnTd{01FUa)Dp+ghK!f#SDj+L^C7)Qovoy|&3- zyB%a7VAtSXquraD*vW{&+E1{5z05&1{zrGEyvhC3M-t{;YJTgFAFKKO4r4v$QUxt; zD<>A}V&z2|J%xk+aZQM`$|jxjH+n1(2ndn?ohz*tWv>nh6BYBSTe<66k~a5Xhq3B3 z{`GwI5+mpmp6;9r^o#!eJD~PeCy(F#?i?5R==ATWJweCI*oEbYmm_eC0=T&yHM2Xt z#nOUzGJJtTR&(8O0;M4vk{pJ zy*j%lsa-^sIZF@RV+*V;M+KEK1wv0okyYyi{V;AG7N}}t^;JWq%@w9Zj?e>7kJONq|f!=YXsi?CbxnQo~{Gv|TRcPIYC z%}%OcFi~S)C(Ds2EPB1(?Dy8=NfE?CWyV@Dg5-$q;JK>_(f}Hf$`R@jQE$p!kwsWDz zS6uQqk(nQ%Qx(Bhs+cNmoMLSL zrZvsl<$XHImh^(H0wr&28Rnc*(f-aWFXGPFp6$)8Dq#NZqK|UzoAwXU=ktXh;_zUd zSxFG<;;b~5s?MA&k?Z1|JXM0uydq=$;=D5Fcbx@Q!HdNObxE-9qNXD2(xSGes_v4m zq3hC;zGZ^$vY})B(z5aU@473dA1;tClgW%d6HYFjc)Z+Z@;BHT&WOy>-Xx z`sH=!=I?qNu3Z<)8}373{h#kASyz5~%_V5f;0;hKee>Q)$kGOui!dbl`K0T=A#XS9 zH;-X>sOEtnwx`(;-Q5zif9P(jmU5yd1j5w+KCbS@{bjk5Ky8+)myef(5UK7T|NWgJ zf2}af(z}eec92yp(=ZZ@;a^4x)T&^V%eA~*JK|f)TdVXz4V4kfG=>?Tl<%Rnv=%K3 z3W*+OH>{uT{8S?DYcl9vKWiL<7@r45=}21^`mudHZ(noUxcIV@Xnfgq(y(#ab2DRn z)%Se4aWw#sVRAhLV*hzPf~9V9GfL$C^JbhX$>eqt#@P7tcAE2t$=!FstDkp2Br#0y z=M>pD?-w-HO&^vF-8UarER#$h*Bl!+A2;6rF#Wyx;cD~E;(%fHv=hU=^|Y6wZuWeT z0JC`l-Vm6#k(%d-R0%$CAyNRD9j-a)e@lqQ-QNR-^NJ3JRBY5_yuyPb+*-}#y zy!UCSh!hpoQd2Y9_GvkD6jg6)fwp)1^pZqMnu)3D(Y}`BnrL^3|M5>NzX}L>nhpZ7F zR9)TD@;2`e`J-}FJrdLM4|t9Qe=w?fH>4F@cpnLSRjc{Wq!m829f=C=t9-glEBbqX z#CPzl9s)^+BDLE}fO9n>*wTxcPB*x@Nr*LL)Y_mZ<;Sv|xpO{7I;CU}$MV&an#qaj zWwa0F3aYtU84Wra47MlAmc$D zkoosFT>`1XtOQpm3Jx_78l`X+_ zV0$+d#PKgdM`5OXFq=ysLTZn5Bwhd*QIurRmYWGVKvXj9PCx#h!!?BmrL~@_i;}e@ zexm1H(GP#&HmtHqd<&YL?*2p6oCp>3*!%Y&NY^)tPv_G<}aeE3)VO#eFU- z0_PPkPJ7R?RE%uk+e`NKV74!n-q?93mrWAKa{!%CF8A_WvS!qB?@Pk4 z@7^lh4Nec9_)T0J_5Vo$|G)N#|4xPf-z)$B;xc$Ee(oV|o?af_4qm<{K7p$LgT1qW zih6JN{ZIo8HAshqA|N8tB_Q36goKjPNO#u^-Hk|hx0G~)2qG<^lu0+U?;mjcdiJ~b zd){--z31L_&-?RP<1jL7xn|Ap_r&-4Js;lt$@c|A9tgXOidjgC>q?2MON%SXh)c^z zOUnasj=a3Gl9H;jvYM(YKrOgH76810|Nl@0+1c5bq*?$|3%EOAQhaGiNm*%Wd0AOS zd3hxOL8+*yuB@y9tg5OOul2!w5irSisN%&JT;^p)upiI3iZQPn4hOuG>4;9&EHizL*6ccW+4Bic?mCs-<9$rz*yOuJT zscL1R8i#YAJHa5LK!)iZo#f-K^~JbsVPIS~3ex}0aoK-5XZz~K|G<8~Le>7tKx$-XEn>Tu z#&$25oyCQN#e(zR6HazDJ`Sn-yb{6!BH|B3q{IRDF0ZDk`PkId+TGndGBP?RC%2^J zg4A68JEj@Hb6f(N|AuP?IFtZI0bsQPAO+ydeZd~<0lwRpY}P?w0oX=hU46TMe7!He z-@n5+0K~x+-vAf^eL-ry9QAy`5cmNDxcKXW4)8y30Xz2(3!o+ZlMC4Le^^&10I>Z5 z;Mx_~^2+@KkAHCYz$?JC%Ljj(cIntDc}cqbL0}-|u$WIC3yBY={7JfezUdHH#}loD@TyuwvxO>d_c#nstS7f`a zGqkw}CxsdBKztYy;7AQ5^ zm3D_wKN+p%wObntWAdSDctakb}##bEw=pM zgdVh=2krx7%_}O~+z}x1zy-&FW0FiSRDRPXzr)){x^CE1TAA)p$^IAKcr0ei-gq_} zv|i-i|MaxW{}JP|%PnE|e~>Q!WL!2LbCe+Ubk;}@scGq-kISZt`w%HeT*JIO%sF*A zE<2nZm;q4w`?%~Rc|`#slCr&Vd7iJF{pF2udlQ%AvN_};_TT9O1cqMiC-X2;ugtSv zirMrLb{aF|7&M9iGY&ZUBik&gUUyfOdIYy;U`){aC+IAV0|u5H2k+@i%A5y0Gm$WQ zy*Jn}sGoevQlK(As*)o0Kv4xR8GT+JT*^&C*e%1-A`VvQzN_?ppvbXnnDvb|I9|1g zF2lKQpZx9gJ84e2$9t!BwkE14XA6B)I>v8;RznL!B#Dg$-owaj3XtG;95`R}QfW6n z?;~^5{W3^p9AAb`7V~Ps(+hgaK1Du~Sf%7IykN%f5cc zwQQdzUx|is8kgGX_4|{8vUs_5zgQtWX}YLcg4;enH^9rOS?WEa0e>h$vJsi@n$a~7 zWh;$#x;wlw@tCwLtjZ79aU+`>WB}%8{_YeirZf8<+D&U=gl9Vao~k!GScK8e$W2&` zx?i}XwyXoo#vzUPz&CiOOeGBNIEy$Kdo}XaFGiYEm-GMx=la4L@xW6I1%11n?_so; z!yXEFcT1Wnk`~W6Fq?=iu}Pp3&$mG?mpP>V0nS<_)}6N~B-Nl`p)tPzE8!2H-WGDx zH;s6ENoOqd@(Kz@Kg08VD@wWYRNnmkYuhG@ZgNpq*qf1^G?6=$ynQl?=^-`g8}g=u zqeY|6O}mb29t8sHML5pmyBV9eYZ-(NF%^qumS2Ey3Wd>S$Np?wcIucf=*O6B&_&?D z4g?PP|1Sj&99B*Vd3r6RUH8%?& zFRm5@bkx? zp#%^(ApI?H5Xb21?F10nzXT3u_>$PLzXc9R?V$f$;1F7N6*!=6bzcPzXwltQfdiT_ zo#bWU&~k${_($Nd3kfH`3>;hyT3o@Jjt{qw!aXb*zrp}oeLY=ov%t)x3f{%qus zTx?LE$#~^!d!YzcFm7U%!{REoZ@mZ|tMUApg23JH@B6~;M5WCi?yQ@|-GnI$mhO#A z))*y3rZ*pa7i&crp(|w+9&WBq9DWq^*mc|AQmf}V7iv3?+f%y#>h%*LX8=sXpbxZ# z@h0kE!m&auPj|d$8hRFVWAjbC>oQ>@s(t9nqLZCC>kw4*V>2$vEevmTB4kJE12dmz)jm{>MfW64&(F z=fw%8OBHr+$&wm~6C~+7U=m1DvPmHN)oEh5xgXIP1TGqp*zit>zc_CgvT0thCzgGC zZbzb~Ta9*2Q=b5BRx|T_`<4vU``|q+$;N#o!~vz#ZHVY6bl;X^i{{Y)Pu`G9qEV-ld+SY^dKokMJB< z^Z#18-4yd2n5&UFcU->2jYaS0_$hKO6I%7IgT)hStl-*-|DYg{!ExEC^i&H=-6g31 z4J+nk$#Q=aO!ziCQqUZSDA6mDZrW6Q3yIRjbL1p6E=3kh%|?p7>}l?%TUoxcOACGD zBtqb)v<{|W$n%azV$ru19Z0+9$w-cCZx|Xu7{!q{^D_lr3DQ23PyPVWS+Cz681d2* z&U*iazVWteg}1$f=z@Sbsyg|&gG<~T0jbPTZbDgNo8wN&f+;`KKunT~|Vbnf#H+=yc<5$F% zHmC!6^FQnQuL^bCo!r84qEi0SQWmn}Ix=d8>c;jaj$TdyA%XEJ36-@~05}&QR|2F; zz(-#JsV?|Rix)&dAZG@W<((aXr2V6)`}0`-*OPyJ0{=aqz(tMl2VyI;BLL%fX!5^t z{eMGju^Yj#8P%K_2Yyf+e}rgs{9Mv~Ol}cK8K^GJXFGJA1{gT^ zl^XHh?Q<*jqSt8z_0pZnyGLHWB$@upu!$sBq}#0TT|J{nY(-b&Dx?}9$SGgl)^=N4 z8__M}aGO4ahLs(x7Tj+;nkH+vasRxPa{Un90_My2^{WZAbGBs;h72b6g`REqzc_pS zU|^y_V0Wai?`-Ey7rNm7WCOYv(zI#C`-Ay_@2zetE)TrjR$x9t$6&!%LT;Nd>fcVM zM!pN3FOF0QA>Ld2obR4|ShPp*w1Obfd}z5D$GBP#4sVb7Vq=e})7Zy88zCHe6ah`&v?eH$DG$h;n!~VS#iHllFF~)^Ij)Lw^s8`*xT+gl%{Z<+^kq|Lk_8>u?U$VSk^{$##@4HqbF8(=STC6AhQoy+Jb2 zFUh|X6CIvQ#~?ExtGyGOJe*68 z$%D4+EX2Q@>+>neP|etv=?H{FC=UkNw)Y(OwHUByyg6}|Au=%(DG zV#WIEWOXJvx%Qb+_k)^DoH8>hx!Lj5gW5s`0QNOB`>yGru96G&ZWr?J&@ezYO$Om3 zQGlpHFfwvFa*A6Nl=RoHGf+|ArlDb?r3Jv#cj@R@=sEA*e#FWg%66}UjjfBFZHS$1 z_>cBS5%Wsa_~#z~fq42KkWv1jY|8(FUocKkI9OQRMO?~UO2$A|R$E>HXn0UkQC3z} zQMnRK)&E6!FDtu}kE$vwtE;MN00pV0rmm*8{!%b)xKK+Q8XFpaFy61UqzkR|6`+=0 z%B7uvVA=%$x_ba&=>pga$fZMoR0_zX0M314;sTQW?h@qwE5#kCVqJn;7vH~M0s>{A zoCO#_bicHfrKKMR)VMC~!}9VE19C zRJDNO%gM=~S4=KKqK-@1w35cx2#`%5VhBSzgP;V+(aWsa5`F}?g<2X}b0j0LV``w9 zS1w7%k`iRlZQ5nFCQ$0&#-mSU5Bq(y5N+X$PLKEb%@8*i&_Pskgac*?rSXLChSq?= zXic@7RlvYk1ERwCPl_dkK_aV6>P4cr(b1^HXu4)JYS>#I$FIou&iUKltQVt^Bzx3i zD*}#8OZuSS38SS~lx1gI?p1wB@04D7XRv@**2&H`_{Yuv_s7BCy~6hECjUpf z`o}ir;OOS$Y~$jp<>e_5;7fgQKTJ%}Pg2N5`hmTyu$7#Msl2G6qL{9dxR$c`Llp@X zRY^rPNd+}2`G-=n52a<)FHH8rWMnmD(-%gfu_+sDVp*Vot2&(GiAKOi6= zFfcGEC@45M7zTsE;qZ`Q2V<8QAv{3NjDFZcZP z^hFu_iq?Epw+4{ISEcI@!1leYUjO6=U&+cp%h&*e9;jYl6|I3nHL#zrYOFwg^snlm zSBcI=yA!ah13(Za-9o55tBwh&tgaU5MJwt7y#-;ivSeQb!F_Mk0p*XWJj2=QH_f9z zFsVJu7WaE-eM>Heay_D%X5x)PBr>gSxaqe}r6`d&_p?Jh<33d6h(Tymd{K9}v`I3- zk>b+5NQE-u+*|Y=G#)oekjQ%e=+YW1=A~2IXW0&M#HJ8 zg9x@PEv{j?D^dRr8wcEe73c(X6Lbp%!@#oy<9MQCN26e8p=Uk2M%H)PbJ0mq{TI5r5-BCDk%f4 z6ABmYjvC4;nyPA#9;yTTU+nfa&U8nBHUHL@;{t#8_Y7*ucQV$mprD zvDwq7=4PfA=H`|b=2n&#)|QsmR#rCFR?lp#pFMkKYis+*1H#3{#nsi-4LBa$e;yE5 z=YyZGufLyPfWLpBe?U+`KyYASa8MBJ=MnMWc0d45zpAPlaP@WdjTg;OFI$?LTAQ2O znpIV@jZ+srCFA20lfRw~zlH=?@c&5weP6#}22;tgZm{@SaaQl`CSPy%i+5X_b)(2wB9P^0rv6bnJDc zvpbj|5T_=AGXKLz_6bE?s@cLPdBSUb37kmn6o+)Ogi=E2V6>C()F79&3_6^dx5ksj zYI24N+aHV7UR*0ga4=NrsXft=>a0fgjqVL)K$A_TIG_PN`MOtYHQ4Y>+s}(aQH6di z`E3~5IhEr+-E-kSIA(b~+wszk+mv_O60nc5sQ8IP=)t9pH0dftn!r7TnR|Y@?|la^ ziokx5H&?A!a1mSt~8yX3X7Ygn}Y9DlW%}j~& zTlF-4yJ(3-b}tpo^gV@sy?@XNS_5(k=8HD#JP@cEgi?osQ-MKSfG-t&BTWBJwdB1n zKDI&5f8wzCH}S&HbK$@EhCwUq zIc=LQ;ZJn$@o-^Pjuf2o0YCQbahicxQWe#Qe6gz?am)tA@y9XCqCqS`Q&!RLi`PE) zeUQK2t}STK;)C6AB3p_NcR+&7H%kheAZ7j*d7j3zGz(BYF^A*WzNcWn*s;OKsN7qr zQevMsXw_Isx?fMdh#!3j$TM!geXFlK`aY5L%p1is%?0~=4@l~j9ue<%RbQ!ZV9FcJ zjhSu-~l@F2Ud<`OtwSEP}o7(lZqtC;V z$aB%SP@kvNXC@Cp#+_-V)&K-7kc7A?-F)=X(1qC%VHEnHe0|NtdbMt>)viQ?l z!XI}3=I8DxM#$;%olLJH1->S{%2iTOdO*~1xQXnK4|4fM|%qF00?aRni$ zd@-~Gk@VD|rHwl&gYmQmiMp=i+46970`F4kIEIc?BEQt(Mis-~HyIa*`2(=Y2tX7d z7$$@nf_)DQhaDS-3mcak7mo)I$_vHk#lOaLjgXswh>MVzgP4SsgzPRE1rs^t9SSPu z>o@OGGu)$LW~IB&&Y;M}WW>en#>JAv$y&zA*22No^QWo(f6NpARUMG6hlj0IfURDH ztwMsWP=+l_fh|piEnb~1LW>Qq!{+yx-NS(0(TM$-35U5Uhp{=wV+&4gOHK_dE>$Zo z6)SFKD{duA9wiGNMRQ(7Gd_i<{0heR<&6a73ywR(4j_4mLK9&upD-?Of~~+#DP| zoSZ#fT)kc0eBC|#J-q{ce1rY`;r;<3{(+$Zfnfnb;ekOBfx!_$!I2jRi~4E7u&7{I zbTIsn27^b#LM{v*5(5v72>~oDCNwNIEIc+mA}%5_E;1@UDmo!LCNVZHDK0)aAu%N> zIW;8}Nc1nVd?3O9tJJ=%tgI3!)K%Bi*46=qxyHt(rlywWmbTW`S8cC4UbT0&cXV}h z_H=gj0=F2ty8F6&`g?i?dU^pH>;wsb$P=;Im_;KyRR@YYnTidv>^-aLm zHa@Lwe%|=}_0zZSU$(ZtZSQ>F-P_(j*gZVlKR!M-^l$CVp+vqjl z@AyIvzr(!rN>WFGmnV9Axk=LU;f_B$od7!K*M7`LVnv-ixuWH=IjplNmgFxPbx1?Q zW?|WD0&m4=XGPt@NR{KHKZ#s7d28#oB8vW8(j~LS7RjN{xzqQDj|CF<3x|UQ`~f0t z5a4M5Hv>2sR8&;J&w#;Tz|~-2U|?cm0uBcY3kw??8*n?gxVU(Dcu*)5@ITkCT_e0s zNWw%y&P7fsOi3k6MWar03woW#-ZZ@_)Hnx5?wn4U^cdq{CV}A*t*?ZX8yV%(~*g4ub zIGQ;)8aX)YI6131xyrb>i@CY;xOuX8c++|LlKJk(-WP}z5P}Om2zVgkB_ie`CSfNb z^{)u~zooMGe=EWU8dQJvu~#L&tB%xPqwSwnKEUf<_*hhs3F3}TIE|E)l#GmwoSdA3f&z%yu3x`SMMXtTO-(~XLrY5wgm5=+-lU_W zyLIapJv}`G0|O%?(2kjz`R?7jEG#Vd?%iW$Wo2Vy1A;vc4h~LEPA)Dk zZfgWg+)X}L`6k`$WUBdTtY%ZMMXtd zR~HBifpRlYPzGwpK#dqE3InxZz&`*b;H&#^K-m|#`+ao>2yhG)6%~MQr~*VB;MQAx z{e@>}xxCkQdG)9BQmDC7X@JNINUHvJ@#nIjdv&?(&6_uXWCN6MXJ%%8ZD+bF%lx5e zdzC){Db&B#Uwr~Va(T6WxiR(Q*3{K)p{vaR?1!rb{CM>`5RL*t=^x(pr#}L{J#*<4 z(v^SO+XI=YihBc2?~9`Oc^^ovSoind9y+)0@A;gsn*#TNY6@Nhy*+I$Ftx%rInuy= zpieuxE$Q+(7ri}9vT4d?77K%QcV0U@Y7GT?dzh!AT&tJdWP-69>p2b`{g6$(1fhs4v*^*geBI_zOz#!0?q+^rS!QNj8aP8MU|GT*Au z>iliNuJDWA2R6lo&fGkNaLSE!>+kn;GEt{Sg1#jUn|6D|+@uPnV3`+0et>O?wYl$1 z)0a;21WwZHXt+m|>iV!d3*COH#V?3z$q`?Q#K@E3Ig8 zCn1>3#uX{{x}Ixt4^@1`vWkwAl?W{iVaJx{{W-`Oop|2MK-1U0oh#2WtSKQ`${;#~ zgydQK8wsk%(J_*gh$jyVY3$6$B&M>A8AI30BSnbFUQkEa^^$qH2Yw`TBb7rk> zq~vP51|uFP<5Q(5u@U*GW8i95LTK-}ELm86OY@VIUVBy^h4Jt<8kraVI)0hI|3`|7 zqr}{Tu)BtA=&zPGNYSYcmS!nxtoJwiqD(zG`^@aagFlix^l!^jX_xwa%-3Qpq;Rk~ z((EI$)8)NRspp;2WAIoXAErAy$p4+ffz#|>&GA}zTE%ed@-iW$jW&bGEge6I&;Yf; zs&HvO28~dKGP%#i)6apD@Y#~)?qlQmRnDmiua-n=gD*jnDO5ZRkBL@;oY8^|-ZIt< zTf!O8Tn;~#x=7l%d*tTZdZDurF8Y($94Q4-mmjUT1@|0%h)#=l{TQz)Ujf*JY97Pb(%@^@~6J(?3(x_>*kxDlYq}l(chlHFI&-aPyS%@a6J7 zNPZycFDhpzp==1vzot;=TLKYswc=08|K0=2Td_+k0| z+REIPFAYU-{+stWFX$9B8FoTuc8sPF^G}`L`F6u zybj@8kMOKRxYZ+EUm`r)5P?02kO4&WYedppMA|eWdjV0rjHvpEXj(&beL@U=MZDWW zyx&Ev?;^hKB6fBWhkJ;VBgFYtezl80d_|mZBF;V{PTwO=<`Ac|fM22bd0hl|{;)q< zOw8v~yP9-Wc2C&FJ=6Y}l{T4`Z%zWP738@tH%lf{U}GAK5 z^+-MmGd7EA@;GUnS7xtXpllMS1OP4kuHb96StV^Go4JEe*;m#{tcD)&*^&aB8 zJKiAWzP2A`{P0=FYUr84s9<3c__bBtK)%9F&xahu{*@yEuesg32|`S3Zm&f15{z%_ zxjG0-CM)XO$~`NnAGBtGa_H;$`axu-8WI1PjQy(c>|0vA5GRAUCnzTZosq)t zYt1pPZ!hgiOP>zgt#SD_a)jIvB+8Ar;mhf!;FRljh_GJbEVExxF$xiFu4{P;6gXEsInXd#H2e3m=ouzmMDz z@V7<5ZR22l-Ip;*A}e8(uq{Y!DUraFOPucNTFZAq8x%?FZh5l3s2dgr%-0Y@jp`rJ1*RGas@e!EESyHPh$yExBRwZL z@iRZz_CGmK|{+t|gaIWl|aq}ATqwLeQh@oiD`+JwSbw#xMp<%JN6g_0Fbwr@uU z_+7?i;wZ$qB|I{M*?A{qosK3496p zR6uzIJ7|^q?Y66$InRxJ#j4?P>hkH{71ocp474-|WT=?AmhkqSUP^71ZsT&v++>>9 zQbQ?^p)NNm@F`FuZ?#Qq3W#{kn#iAu_93Y@M?J{d)}#B}7WN9fl|vD>bxnl%1IFty zxo7wkwDOH>b*pT6a+rkS4@gA{!15?iL}78#eb32!XVRy)9`O&}6yU^>c9oPJj|)th z=6qo-jwAOzSznzsCr(H{P{HNed{w(RU$FtE=DBURspk2tBKJ62f)rV7*@}P0jx3OMK+#g*GdK&xmauD zvS+m1eZNE>=o#&keOC?ijG8HwXyj>6)*nby`1y(g1l)H`&ZyM$V>mRQDp{IO_A7jG zO7+p@raQ?GD&Y#Hh9pDNz5EAN(GjJ_401Dr+6UFiBc)GyhW=5{Xau6n%2aM{cJ`pY zaiq+~WoYjG$w5OqPPr{iZhnRQu(4mE+&*b&evSX|5+2hhM|RT z?uX4wI2Epaa_@Ii4_h`AD%_`r-XAm_wr)jKc&^JWp3EM$9gS3Y9}X=dP7YszZ~=_9 z{1P(7Q9FiWr9a8=68Qd62Q;!WkU@SKqI1+qI$9abGrWxJanwbFTLqVrU%8fc)Xk_^ z6{e!^=kM#GC z2b3eL;|t_hnRJc^wMMHG8-`a|JdTI-ach$M4MjSrhShn??mTm7|*87AWo) z>zsd*pzh^BK6NbhIRC7V*F4?FvS+{=@Yz_Yd3I{_pdQ_e%*>^EeqHgfN$vVK->*#z zhogsWr_V`Tf3uuY!Vgv>Y{ju&LR*O&4Q017z_PSOyQgaxeAf|)fV(e{1p76Ximw6I zV_}JrdojVU(hz$>crC-0z~DtZukA3BCdR?`(9{xSf^yOx63&h=Ik*T>DkxyX?M*0~ zRR&2R2Ff?<_o3{8$opea-XrSIraDLvTOm?(~8nsZUn0r>49| zL=3$_=4dt&#aCHDmUts(D`82Xjk7OrX97?U2d_Fel74hZS5R?2tOG`Zy4Lu@21&v~q}(}SU@~4eV}RA83@+3M=NDp{`UWKTVJ*2}Mjg7AO@k|^ zLp~lkywFn5;tl0&0K*F+$ELxBW0(u*9wAb`HCkaUTbSA#kW?D**Qqc*7r#Opuz8`Y znXS)aKU(HkFzU4D>prZ}LO+ve%m`OZD=5TNKXkq^VgVk?UEsY+8q4bvsnipwh!K

      gbnV4n12=H>U*FN0Ua06nj71aWTyh4W=3~X@t>cSHx)JC(1CA|7f^B-6nY)(zf<4VK zYoft({a8>^-!L<8Zj2Zs8n?$UW9~L4lJO>*kj2t%K6KYijoJvyn@QDlNtH`TE$2(C zb#pO&l-8J%CWW3Rdn>K!IIaDqLrcoTHnQ|y^Ykt^u^zYd;gqz20fFbx=i_|O-#&W& z&h7bh%JW&`m(S;Cp1(hSzC@O>!k6*!QN}!(7826mu2ian9)KE=-+_Si_|Hce^7L~H zGz%)_sA!~V*@YW>1~>-zdHK8ed)ozjS;M?61AQ$$VYar>R{CisGFkdO8QRQAstj@R z)QM8WNmAERq@d|C*coz|*~(}+s>o^L$gvzq5jQ{~_#iks2!@Ipj0y@w1^JIhgFA|m@ z5{57`L>vh$jRclM0xKZls3Tz;qToNng1X~F;Y4`Jq_`zCm|b+J3!-SNN*L=}n44-i z>&gVHGL*|AjMKa|vso&n-0mfc@`}*zc=dWKsZEbDt?{A!*uAQB&oS)5|pS?w# zjv!9^5of)KvmV4rH)6jNvE70A(uUYE;V|{t} z!_xHf;`?QwD{*ddX=-V4VtH|VW%2EY#i^A)zf$SWMEEm3uFCmC*)_#h3r(B(B0a9j zA4%iA7{gSvF6H8veN6e|N+pxtV0aQ_yr**z=%A-wuek=*+%S>9}%O zz8}80QhAdBLdjf73f4?V-Mlpkp~^z0&FpmEHxIEcZWFzZJaT!ZGJxc6a2?3pk3@HK zGPnPEwz9GjR`|KOa)&ZJ&~kC~;z}jvG6F4@c=DOXKsHnNHBAH2vY83JmjSe4nKoNT zyPp?dKiO3Ce=+U*jv3jlGuh5t8HL(2y}PoTG;m>RF_2KhY&nQ>vxg{{(s^SUMiczs zFowxHa5&v@lx+RE>nBaq=Wh0n*taY8ZWpS0jPsdEeq!yM$_mF-FMJ-M(LKNvqtP^x z)30?h#+%pv(3dxlm!_EcHDNwnxGUb?0_h_!E7pAk?h-*UN)>i@QDNAgsxWU};Wdl0 zRB)JiB~C|8KW8a_CH!9Z@COhx8tITa-=IAj-pvTU%tF>QUXWTzk#g7Ps+J~M=Bi|3 zcNUQ%2&8<@SoBkc>Z7|l` z$m}kVyZr5H(4b{mWm|*gZNJzXpZam3*gKu*c+Fe%_;H;O5rW-)7QTothE{x`#A8*$ zEy0xA!h$(1<%6Hc!yi2iJG*wTi)UC*87{%eG_V;e$ETg^xe%~mzF z+Ir5#2-UB4W0m=xrGiDCl#ElI?yW2pr?}#yh|+KVh@+pb&&QdTAFus&*|m@5^h@oO&FR<1_43niEr-AurgrpuXItGQ&wwkH z3>9ZP!#v;5cE_ado$tNXd{NK@*)?VqpZl%XR5rT&?YY7Sp1sz6`{z%D6xTJU+rqzd z5I#7Ow|?cV_!;)yD<5-VG5a|}O&YWbBNW(XnhrrMYrOLO8eAH?i;M;uX128zg7zj0*XXF5jB*sW0Zv+NUL#(rVs?dY@n z@ar*0iSRFXQFtpOND|=?JvT#jdQ2&d=tfxo8)Hi1r4FhyF#b)dsyG@<80i3`jI1Os zKSyjIMr87HWNafU@u1<2ktFl^F}UV^Xr*q!x|pbxdC?u#79p|r@FniT+z>{ZCR%u@QDS`vqf|fspe1=N zsApQ7<=IUNvXpV|y7UQNZu2ybJ(cLT_?xVATCcxg+NJg7uE;wLO7KUZpwuG;-0*)% zY-wWvozSAC=}H=YCaMy45O_nV&kdJop8mN51YH@(wG2BQ(;uLgPzDY3q)c3@tk3MMnA|CFOPY6bZu1_PliQ5|U@!E0Sn8JBC381pwc z7|JY3_>eT`_GpWgi0B_$%RcmUC(h?}x~b6f>0uSZHm?B_q5`X$yoD{wIDCd+qEO%*vYh?2ZuTH<3_{zJC z^Bx1%?|cQHXM?d@m_I&Cstgi0c7CO*&Z1?VR*qSq?$fM?tg&gicq`M7xHIqOjR>q+ ztQ?|rB8{ga>CLDc^mK&loG7>P3?uQU_vvOOFfCqT$*PQ!-r#!&cY78G5Ay6p|Jpj> zzU+~tjE&k%He4CLdn!q7zdML1W92EpFmSp{%9G55E}0Y!hTeCI)T63G$k&{8VxKxG zs(PY8O5Q#qysBfOX7Orvwdc7#UKlIbhcN) zdBELP%Pg&4(Zq;XbpR&};e4C~{nQjVF_Oe0>_sg|D|GMUL<8-x=#t++bL13VS7wQ! zSf^Q-?+QH01kOMx7$>VkUY$bUpCpG<1Brfvg}+58vKE6xWs4N?2@Z0@VvS-GCBWGt zmkze$usN!p9xw7o(q_{3b>>a$KwEHbUc|9BXE2_uqT0LN7oqBMmXgans%ZQ<_1i5^ zKj==zVNH%gw4Dn(Wo~7M7HZiO-o==P?PBK4+wX0_X1?g)sP-s?HJM!io*~H##vNhQ zVwBoKL(0f~9xA;zm;!^mU13fe327 zF>8iBb}UN}MG>++7U@>m2~f(JYUylxhkk8;{VCe#$DqL1XrhttGGYm&jjM&%maQy< z4WQ8(qh)T~5cWueN59GR^HRA}JiVX$C6-16HoEI#ICQ^+}vAO2v8^os06f=++mHurn)4X zv6nC9b%NRH0iQKOY1kH(p$@X}^L^a4IZ}srjV(fVE*Oi+)F&CtX>e?xm>DIm5Fm&KOChgDfB zJ^;A`m(Ev;Y!&M(%+3miR7--h(ynT-r6;0cgwxBUEN#XALFrfnpUaGbr{5gS5XD>t zBqmAph1mOprgvfj*9(xnM!%cFvKvj199bR&9mxnmVJepvsIRu61gd+CZ=&xR&Gktc zSq=maBQj>V<-%YBCaHvc$qcRwgx3)U$U&_n65z4*sNu;_69(|23tWoM2yM(!jt0ZO zUO$-^n%QneR*x3Qij$%IXs5xwxDj3j*EFpJRaNSnY5DAAS~@U#$SH@{No!GaL#4RA zB-G_TvdT@W8*Qn>ln*QqZ&~-TxxJ$cI@?h;VYDG>K*g#=Z)R2L<2KgG^f);3$7Hkc zn}m{aNA1JyK1)26GK$Q5r&q6HG3OeDq7uC!;f{sLnFGdX1>yNAoJlL=^iL9{k)^vEDBj6F+*-3=!qcWh_#4$2BhoZ7ZyUH$1jhiz>uQ!;C@? z$c2iQ?GF9N?#KW|O9j0c*^7;s=G?gxG>x5d6i<6X%J)!B@eb3rYUjT{c!fAfB=^#n|Zhj{ZSap zQJ4i#GWt|VLcr)gd`0tVxH*NMxlbU8N6m3`-R5oPday-@;X5`c-0k|q6rzM6S(U?- zN;}I@t_Z{YSm}?k7~83J?5RyauR%|vqdi%aBUu#haa?k}GQveYSRI-nBby%|VbXxk znne<`>*4Ga=WZVRkarXfehlvr<&SsxQ|>m}+-Ogz>t?Q*gxdlzV$8yM9-otB?CrVF#gFs#{F zE|LqHVXN4qg-fXHjediivN)ANJw21`u_b=+;G-1684bvCR8Ak%;U#UBZ!T7^vce&I z+CU=hYXx#@1#-WMY@Pcq8JP%>Kz=Wt?k$BI+g3+MDO!pUa=+TV)0T|nuTuW#)TE66( zsyH*MVfztMwP+Ta(8#A0eruQkmHHU;S&J?{&Q7Y62?k#E#2$S`#ct4~lx$`4s3~{V z$Hk?N(nYc49xE26C~`=Zk9LU@E&O9+7#>BuWuc#RE|`j-Vx3$?4YP3C{YfK# zeyaO(AM+sb8H8<$1;t%CXi`Y%Jc&;^E9t8#ba%g!3Z^Qr;;JTeEhYEtwI(QK9yqx@ zrhdg4`yjyB)SvoO#p#g&u|82VAI7JIVpo6s801BheM_*24CdYs50nK?D~q0``(+YxB>ral!H-_POo0Xvxxk8QPfqGRrs}PmV{$ASNe*A)*`);c zvAFgWqo{;5&|(nylJT8n zW-o<{(nD&_-$p-hPgzUy{ZN^dW0~i1<15RTZx~P>k3l>>)vTm7rKVY-u@)9d*yWj1 z@Pg&0TgAHAFikn?=%>~DYbKZEE|z52PM61|LX$R|1=AZv z+(V6vA|^}nJsP4on>FHf8YCXQx|wc~H3UD^X+pzqYCy`yFbHGC?qu?8*R{H%OlpRM z-GaaiZ?UI^Ba1{zgcroYq0citQd}sA;03pO49Qj)OHAkNHVB4uWQuZYT zRSjx9dLcKUvqMWy?&TRIkzkJU@RFJ1To!@Zhbn|00D8kT64n5g5JbTS=ZWMO(I z-TCIPJnb^-ARX2NvEw?R{Y+v+3mWL|7#16DQ*hW*D~j)0P!e6eH#?c>ut8;K#2YdN z+17e!c{((ILvx!Pxh*V8c^Ox6_#U&mAF5qjhX9%6`| z*1DV_VPMXxwCgs6e$deW{C3a?^u#6PYY<#61e*V`wd81Eo4G}~cP5l|`bBG=*lFx_ z;vpOyM_JhgFMsl7myV9*3toxVp7UUTyf=X#JOYDrDA#e|x zG}IjH6clxye6G|F*)CdqwtWP7J#!GqLN@ ztJ_zXGBL@c*IjT`NNhYQDK*J3TCo!`%;%(=yksr=0-N@z6!o<1MrCwkf+iU)J7kGc zwoIjN5zeCfrO)PH-#`hQfg(#N7uhcKu;K-}SRa5Z$()vb7V>RiVDAqfSFl%O52r>J z+{n`!&-lH%DlsRC?GN5z!l2GVAZsjs=t8{%n$vztJ3` zVQb<$79jEKQ@Gb+Jb!nMbZY`R3->Ox2BpAYWYqW*%hyHg7RTbM_r(#&)#ydO%#}%w zk8VP$$8fQQC6{f|{h`>Ywn*>5ZWwH?RakhEUQm8h3YR2=3rcgJii))vK9+W!RN)rh zEC}D=qm}m&8bKw7rIfP|9J)X(qYL_9?41Qz)a%yv2N+;zkPs>9li2KPJM3`DA72JcvDRzr!atm6pC1;5eYI;9Si}Ue9#!QF&JKSV}T4a3FfLro1 zH%vK>$IYk0DjhD$Z|dO9nxbDc^)kdo!LNmURV!mKv4*T5xijd_C2tN}=^b}fJ2hI8 z4c>F{5R{7A3#{1-p4bchx)*kNKSFFj%49#reLwES{xh7b%=FNt8r%!Tc!$ONp<)Ny zQd(Ed4$=zt6nvG6v8Z$glbk zt4~V>60#aM#;MN$jw_;%!I$n)b4AdSKBLvUm#h#&uT8|b&qc2g$7nJ{0O_ApPGq@p z5M2IwvLlfdnPjb1b5+aN8LE7tv6%W?Nn-X+C4HVuyhP$oA=DvS(`}zg)k3_4cwJzjheq{QeE!(15+pDv; zKU;MriMqp4$c3m)`_h$P$Ru5Rpw^pbRO3f(@Wn3N=;lOolELon@oKlPC=`Z!_R~!v zmt~(D?%$j5OcL{_FgkEp9?WBxRpQK=kGfXij(XYn$ao!B|EcT?<74NFxlR``w3?T$ zUv}0eP$}fUK87D3e?{ehBB0V1LXmK!IK+{68VbZwUj?zG$OQ}KaU{rTVm35e2hED( zh*`2p_|Ws@N{oUvm)V=a4SABdCO+x{csSIr8Q(@!Y_O1_jlRyKsBCAe95oDnEk|=V zp*NYN$&00hVoEY68UKDU>uaK?ja==+5m&5R8SWfu$THQDZE=wHrbfIQ4j3p>=D%TZ zuaZ9Vty#%8Qz})|1p4V2S4Zlut z&4871Q2WV)PXc_Muanh7;~wZ}+{`401<~anQ)^oCl_1Bf-gtsaXdKupMP%7n2PU*x z&Q6PQydvHd_fS)RI6}WCdXD%JWBGMsn|Y=k6L}|bT_ZYpM?=+zT?QD%VsxJ@qw;1gHLStk0$LeoIu^3A;Fq&yjXRx}0af|`bcI|Ktx^h*l^ zo*&>T;ER@_z2InN+wx0GcTkx#5|rs*&n+ehhsZ`4c@RCb){4+BO}?)ZN0*4(2#QZc zw`Kx8*MnRj4c117T*on<3{OZRGT*OIuXyxYIOer@jNk@wdGdRVg!0ZuL>9}v(GfB; zOYDS=cwcn}v{h4RZ4&VcoG-%m6@7*Hw%9zj5w9|(fs`FKpZUrR-ZUdpvo=m8?7NZq z-mwsQfxJ;Ow|d(?F_r?7sLVKpyy8WFnPNbhbS~ymPM!|DqW2+xbt0M#+L-OCejyz} z5E`|S>!+7%qHe6hM+DKPpy$^qG(*BCV!g8WwTPDR-5(O&qw6)y6u41xIH&3`9x06g z@0k+v3NS}R+csvI{NjJJb_UbdyM^Ul3>3qBgAhaN#etMw8aBD4UP-;rSD6xKLrfpC zoasS0Ge5J!DiZ#|C|Q@#0u%9vWe@Nr6qM%VKwLX2oVUaQLev~s-mW1CA|sL*s=7#Q zAg_z!WZunJ#igO!sR6QNX2cc)RK9Cy+%|zYPqD9G;$v+j&k+b%Y7~&QL1X5yj%rJq zZz!oMR;Nl>)WX*Xi3<^NX&8TgqQ~sj63!99iaj+$!96YO4c@ds#T&ga2xK!hBIeUbVDO)sPzUgn)}~AS#=OsIQ;ZTPqclPDzfyES<#{9#5x- zZ7JR&WyKX;u4Kh#9oOxu$%)aUWTVsnY`Br$JGor>iadVQqXW9RGMNc4DBT`(xiphRrATD-0h*EvAAyGB zM@?}>t*j0;n0!UB^(E3sRo-V$Vy2=XqU1sv#Nl`;?;J9(so1DT6)mcf5PDQG;q zYMr5pCQA>=zUUF7LCc?aQ*8yQH|BsVbDr5oBibe_5cGh`po&(Kl1L&&=K;TpZ<{*# zOOD*)O?6yPSqewIKyeN!JFDaz?Lp^D3i{}pud3eXI{C5~Z7OJ`acLv0UxViuV@hTs zGq%uO&6x^=M8n=6VbhCs(XgER;(7RcI4Q`)mi>@mY(cx zn=FPi%(@6FiuvGs)DD{-u{P?PL5H0d7s{M;t86f?z%DdeVtdCmGFov4*J0k~x$g_h zDGLg#Gc8XSMxe3u@GA*vKol|6w>QbqU+)9N_YJ$30YlXpqMby-E0@H3R=D3Ec;ROW zNVD^WL+8k~ZFY`Va8M)oUx#;Uo-{9^OX!=FN#1TKtG%3RHpxOSKw{Fb$2d}mf#Q-{ zIXQsc8Za$b07Z2~91c8fB5kllgw zy3jy&=mVtuD~uXCpa*suF!_(POI>xf_ECr^(M`F2>15Fp`B|h?$xT>fstP{`$uE$XQ&B&-Ph=OcE-c+Genm7NS>)FUj;h z1$O5RKB)&X$%vN(a8cI@=wE~xpknl(Nu;fLRjxk}RKT4Qm!ctX3qZ+#gi!w)`r*B9 zYf-M>PH^SWhF_DOS>kKu9Dx~yVq`tpO2|DuopSUWO&WyE6r*H%a3u8rDIRKuXjr3{ z&-Ar~Ss%T9#J`vZ3c9n)hoQ+32DXIr8+opKVdY$(mny5ywQ3d6J4rUq^-;z>FbeRbPO za(9|ZS?aVK8vpXPrTVeoZD;A!=Sy)H5B0Cr?0PU8efc=(PebzBb)J7>zuW)ucDmTH zjDW=D$+SM`E4IuUi_5FleUIOpOgMz{9dEPqyC*e&O_#lWRcS5wc+)m8SVpe_zT4ss z->Gqj?@oN(z2k#q~fm+Pj zTCD9_Y;YY8K^-n_oh<~KYbvr#T#ari?rjaWD?=fUsv}OTyHs39(pX12P)9Z^PHYE; zfa@s<>ZxcYqHO9)Y<%o`Q0Oe{=^X0med-ya>KW7OnTp{ObRy!fpnjTq9%xWs)Tu}s zyE>U3KQ5jIu3X>;%#%(4Nk^c8-=~59$Pb6nN1#|zphJRlpds7_e0!roY}W5iEeN`Z zavLh318S7gl7a%4Rg6B;K2p*h4WemMx0fZQ(@+VaQep(YVgZe++bFU}jp~Vw3Ov%| zH(yQaLu5AmZd*6$7Ng>UeDv*`u5J4{!#plqOWv9ExfB-1Mhw3e$;%(d4f?j&un>Zc*nWRphJbL87PQYSZ% zTb~1lOYCFp<7+S=r2<9L-#~EzAxPB9g>0idNs|k*MD`JZxnshjq6n}J5OFjEym(sU z2#|S`eO34J#jKkHb5WI#z`P!?Fj{az8hIiuQqn+U+%`(ossOLNpnTwkvUVETzOp^x zmwhu;{##6I$!(<#5bZXFCuPFRx)=C}D~- zEJ%q_-E6ap6ik#98G@C6W~q%dFMpm;D{Lkz5e|(s5JV-wiH^1R_tR@? zS2wGknwJy5S2@z^CA{8C^q}`*C+cx-)hA(*NuD4Zy{>Ge-W+dXEJ8JOy9oSSYTGMU zu{bqWNrf|9L_f7(h0hA(VM!KPz$=e^$|=S~@-+LZSO{WgRO#n(n0X@ze0w?R`nl#* zE)iBu%+RFUd-Q^8Ky$tBHkp^m`>G;^zWVgzL^C$s??Re;$8vnNLsA2}*3UlHPdnHz zUM<2#C?Z7&O;f}dh#qiv7K~RE5_A*dV79>vR(1MHdO1slxU>*bNQF_8wxOuDw2?UTn1(4~pTb(zwd#R)EAJ{a zq3;avuCD>5BG|QX$hK+7ZgA+<+|ccvAzLhM?R51VOOXq6>dz$yOuU#nG5T&k7-)4E zeo&&e5hS8McGXxRTMrAL9B!oHMy+NMA{2A4{JN<6+KTp@mjeaueYG1`eT{@3h7eeq zg57FS14~8%n?`~LM}p@@LUu+%k@W)yRWI{~G^MFThV+!ZqQf+*MHd&jgeqhDA>+Y^Oy3V#(I2wYKV+== zujUH8sl7HaaxEGhN)0vuAvgFshvx5GV?~p+LC7w;-u33e=v&{>vgpzB^wElv(aNUL zr;_C@m|a>z`lQ-ANS&i~$04{)ZKV$ayH*YAuN%G(Q`?1pY@}0qW7O7MVz{KGzv9r* zdTj7C;A4BW!Og(Ica+!Qq8CQ}$<>j^)EjuU67n>Ae8)7e88VOQYOks1=k$pBY6SLO z8+@R#=aM->INq3OG`?mu)L;~o*IOt&kcjo}vn|wpPQQ)ZxSVhdrHQUDq{fj(&@vmn@-QYORLcSh}^?7_`a;ixL{Pj!Fm$wOIY{ZB+i$fLc%FL z6bW3FR*OYcK__p1IUl2uH@+Nx1S%|k0)DsDe5DGpdwI<&dHuAUymbToEXw?}CXw3B z18!w`^T$p35~C1Oz>CQJ%x4$<`Ed*L6p2Ha9J544_U2%Tmp3Z?(zZJh;SH8!V@ zL1IUl;a$gK)tT{vnh}-)+W~|%6q%47{J7muThB~9ELGIlOgg}ijm?AUu{XcfjFcZ1 zKMM6_V>8_mKjCC#0zV`nHVA9R%&jnQ;}uk~I6wO4Df2KSUFZ~lp)VVopB9Kr+UolI z9&<^L877@XEsr_GMKjUbX-|$B&qY)bQ*r_;UrDxEPPPDgKCmD(K}W}G1oyh(yIKA+ zWQqCf){m`j^iCVVPy{)^MsmJU^1ho0)VE@g$c*Rj5rt^b-!Sr${esQ> z+*OdDmK?cbuuA-6`+0jApIaVCGh7QE^O%m0kt7A8i8HL+ReY>rRvv61rBJ_H$w<1^ z)6hL%0+o0>6)^n=Kix%hf-WQu{KfG6U;*PPequ0!q?wSDw}|~BBFB;lZsFrBB+&q0 ztwQgT-dX-aZ>dFO!mE~&Y~~U4%c*=eLPASvI?L%+%NdT#ne$68W0or+-)I)+RuJcA zYybDm*8T!32!7C&3D5}8)JuD61@U9QE*d==@pWSQWO~*rRu0&I59$5HhwKkJrGNhV zujh5SYXKTO4`1=gysl8niKn@^r?|Aew1SZW;AO6+rUrOLoF~TruEYRbGyv0Mz%c?a zcmT{E0OJS1%@k;123ncVjLQK})87~l{+G_Czj&lXgODLrRBE*$Czux{YkL3Cz1WQf-wiG!U)mgJ2t5e1$# zmA968^*hWD*GIGLW=gRz9u%lo-e{u!4rJm6U4enxKor0)e_Ux?GDk9+a2keG2Ic~0 zAVGgK?f&2L>CZFrkJ9(M<54pg0CeQ3;o+&^0VeAOas*E315w}T1Gch?#){{e`tSBB z|IfP_{XTck{D^_vJxkv+2czHT?unbx9e~A{NQGM)dY;4#$Hf;4mb*LE7)Xp} z_0j3BMPn$%WiQN|;j~TR^mwUC+2M2z(M)E~qV_jl0Fa}vgtP)-vtqHB?ugoq4vh7w zGI!}kE4EE@G87W1d4(QWYbWa(SzRyZwNy#u`wmhkIx)DY1fe4YAo#OZva-BpVMt~G z9#6KZf6$NOpZk`xy#DFm^?QR0p>`pKRt3FgJgwxGyd7Eq4#m%HW4pgC!0-WBfZGwU0Oto_o!K4@12%Ub zP8{n2Lx&$3t8)O!ZGQf{;nC9RI7~tg#Oz^ONH@ILngcYVpVjxmWMC}!RGq^aJ;K4!mAd@djYmH>o zv?0hogQC@2GM!EEpr>V@8Yi)S#snsK)RQEi0uwyNmVGB6^;>%m02EE*mHAj(bk5*mFuVGpj2Aw7 z%WQY;W34yFWtFP3%^BDU6s@X!YoX_*;)_!#+Q^$ z8@`a~_;OSFU-=B9jkWvS%9xq^x$Ori+KVbIp|7rnTU{c%tEV7!hmO&ams>q@45v`E z<04^MVb+}i0E$-9wkYLx3R36o)^}(9GGZCadT)d>k`sK1le^A``}T0KA08Bx0w(P$ z^lSvIcI>IRE{YefVG>Io;X1*tF`9ju4z_SB{@_(Z_V6Q{w;7m(3TT=qHHA$1a$mzV z^Sfy4or{9!|Ed$2f%=ttXt^nNV0q#+{y z`J&9E=;2n-@MD*Y;v0F$D+8n|eixy{@cmg?Tm-34r5EdV@vQAXOYO?I_8#LH5Tqc( z5}m}sqlUOY61!eK$lSQymke>eE(w@{*@?~225p~n z7x9BRYdaz09EjU8jND6kYZ&4ihz##0%Q=Ag1!_f8yb+FaN}oDRNm%{Tx|JU_t@tfC z1^CjZo?4WBK?@95@068@xVO~y2=}asy%r4@`MC%X+$BIr4AjJaG?sOjV{G7M|X?+Gv;BOC=^vVyD+cU>6??I-C3P;o5sK;X*k*Bev!f@O7 zq>NXC34Z9iOXdBMTrva9B!}>nk|mX(bhxs$x-%?5YZh~b-)CMl!txpi9iA7=hgPeA z9cpUKFg9N??Hln}X3>lAZLJSGnI{^m10BpT-uG&t(!;mGH(HkiBnTgyL2hm+QLPNj zBlFUl#gq%v^FOI=pq8Vutm1AEZC8_Gbrtuu>6gG`5d_zy=Q$Ykyuhe76{7d-@K#NA$P@GV=U^t-GNf)9xh~ak@i{Jx(idRF#v!;ZjW((YP~wJR z4z46{`=N^Mr-a>6t|e7ZSr!?MR=M+_5|JUoR2`h(ZQs=I1y1txxs>maWFTj{>%k!w z*QWKn#O2i*8^dq~Hfz3P=PP3uzu{`Y;DT+11u(eKi$DXQXymH^6iu(%Di8h73@)y9 zerF{CumUAeDNz4}{IgKl9}gx!Eo1(q!ukHaKmEqv*FR_H5x}XORxu;B)~ei$7W4 ze%CJ_|L6|{>L0OR)jw2{Ot@musOewTKa|KCn7`CNIe=^cKteby+I-&MJDXsRDm$%z z_)Bef%@})=0prLf!Ox3*nQAYe*)g9$VTrO&>YrC9^$*+eN&S;_Qva-Qozy?#6(Ndm zZ|iuftSyhZ*rzr=b49|Sk9$}+Rqczz5}M%j+M*=nvf_M2`e*+(1NvVkn3E-g0A@k) z(kT?Sv!Y~WxX|JR3R}81T6TYB{Fe#l^ZLhTDLu|AXDK7mad{~-*^hZSD=h}-n#;<_ zSVW}n}xqGBedGPnIIP@v;uWk2pvtymsKRb;Yku$QSkAn?m$!A^N?y=aX zg`<$;cZd6tJW|VTAu)>VMZIZVOA1A$0{oo^25GxKolJ6XLuL$@@Q_%6FXTo)V?{JO?F;_cqiLh7%JDLZQZwhv_?w7ZU1(9y$) z^YUHSeBp`5-S96ToaBy#Kf1)_$;^1QKbIk8I^6Voe>cqzb=x&ANru86%)Uu+#~}}O z*g2VPm(;a`!vDif0G>e}Ka(Oe=3LhGh{7%nvxUOG=d}z;dF0EM!#A%a$pE*Fu}fi= z)muoHiDg5P*UfG_7ZOvTGnVmg*WuXJBF**4@Clg~;@}G>9ec&1zL5?ii{dtzpG@|z zDG#;1Z=0}Hbwm8?>lB>35DM~XXhC>_>|) z8qrZ}bs%haOjf-2V0EGkbqJ2s#d?=N;8qDH-wJlYO~4op6MQ|@`Q!sl3+d-%e}O$J z><6_C6a#OCp5$TU3>iEp+=^+GU}kkNw3t3vHT9=Y-N16(K-$ff6B@mKH)v1sJ;jHx zN)82FYy%{-k;RR7(CPe;2P0%;49yY?bDr3)PUfQra-m`h>gMU(X>9BMpcDnY$Oe5v7ON8t%XQTG@OjP|15X<00Pw6@IMg=(G0&3;xGr{SSr{=HY#& z!k%1F=BYHO2M%$9Pd4vk6*fp7(;lFR*nh$`&a`N>j9cX2W9%rjrFc)(YpFm-AG-BHTm%9@vY>rmu2^4nc)ZikY>xIOcvxswFDX4|A0EXG}TxE2cKS{_p<4|3lOf2R71!p8YQ{Xo8jza48OC7{e;^mSoP@_qVP zdH)b@BrLE#)o4LlaErJ6epdH;>X3EUa=WOjML$tykkY%}RUhtd%(TByt$BBRcRm7CFFhiVE17HxX0t5{fcomyI#ETjUK*0X6Z084A{%r3yvdScBP@K$;EWwmr6zjC|mhPjiRAHRs?F2>D_+dGEBD`ENlyAt z&UrmrTH4y$IyySKy1IILdiwhM0PN1dzyP3{7#SHE8ylOLn3$TH0{Aj%*N0YDXCT-?pv-1R2} zYTmcJ{001ise+>6q7u#$a^`X>Dk}f;o3yiVqR&qx9n9xNx|#l;u9iu2|zD;`}TxxS6+SsxT~zJ z1V~2J)z$Cby{oCI0br4}b#-Svqcfz#KbjZ=Cvf`Vk&zJqa&)F}|8t1?v%~-t?z2ng zGfF+6wgS5A_gw-2NB($>J2~8lgYY4V;$f7T-pKd_N4gwS^?qQ&3ziV|Y0N+@R&xgd zylKo33f5~F`u0TfUgauXVd?iQ8oi3OP!t6Ur)m<;>#%bGb9#FE|GkE)zihiXKcJi+ zP|go1=LeK?plAw!ihTL<=e_e-_|FjOP``79) zpv~Yfti#Tl4gUF)yE~{HIJx8eUj&NE$jHdb%F4;f$;-={0TlZG6$cbw zUta(<=kMo;?G&bO2gADJkiMuKnT#08j-G+kbgtG}gZx?5v#{tY02&+?Z(GnQq#f zZ9155I$UTvT4+9AY=-~+vD^Y*fx%Z{@U>R>dK>&xJA9)9z6nGp{Bsw43y5y`HV{4V z9Uyw)Ux4U?@AkuYhv568@B@J2wgNxefFEz4(z5~Ye1N2VhSvs;BWLmBvE*;hzrx`V zEYMdp0=+!bI)^Qk@10ZUHPv}dbzW1Q*Hq^<)nC7L{HSgHpQ@=&gx>Spkn`J+oSg5N z`t!pE2q>ja4jY1}hYchY5EueNMngbBM?l3yK*L5v$3euvL&U^K!X`w*xd_H10bd|P zzDSP7K#40!bJ3iE(vO89m5rsCovoIGqnVSljgzzeuf7dAfm;78+D>mhfPvR285( z{}#x!w~*=VP#A1c8EqiU)@ZCZFgUJbaa-c@n_dtxCJ;BcD07WeQIASpmr+-rUEe^! zz);lCSkl;3-qc*x{JPHd8%8&5uG^en6E-w7{PZ>i*3s3{-PhbZ)Y$*NVen(!@MP`# z>6+2GcOMt4#+EC`S1Tsg%O^jTO>MrN{#-h&8 zLFwY*+oi**m81H#_AK$1c~*XfkMf#^a4n$h zHU~YiHa(>?8)G~VOAasFTV9TOoNHXE&1oV^RLosM;<|#A zrmCcDXI=!a`lam(DU2RcYU6~vD%H{^zriS|elW+G! zBVvLgpFN36@{39Hh|hIOEPa?%?vhmMmzei7Aw4$X#lKr4_M1cA&Xv zsO9xwOK~@>y0xvjslB7FYpAC0W6jWH&B#p6hqot^>s^@WTAJ)!o$g+r>sw!V|7m&b^ZNA8=h?lTxr4pA!~OZAgTQeOS0vi@~-OI}S^X5DaV{di)-d{pCVNW>wi2HaJC`n0~exv{nN`OBB>y}d672fIgydq+q6 z$A^dTgVWeMgzp@|w~pYONAR^{`0_D)@fbdT44;O>C*bf=ID8lm?}x*C;qY!ayz3;s zc0q(e*NY>?)jXkIT$rWzGucvtT{S`lk5HkhUe2lni~?3+snVAy7<35sH(x}VVULju zQYukN#3JJmeRoNx(3NnY0z*EP zBtVp>MHdAKL;?a4{!o4Ws&5mhz|fh|FIiqXY04~OVXtHVw|eaTUFFx=QRl1(1Eh+x z?#xqfF5U{>U%a`V|Js|&=>I!!uC(N5*(tGksZoV5Bi^Kim83s?oAI~tcbGg z=(jm>C9e|SdI0@wXO+a=I*`Qs1wFY3ZS_2Fd4paOl} zAr632ihGNqV=D!yP1X5g<3E@1poBICVR1{?{djIUSGWQD2(5F4`&{AvvCaadvgmJ8 z8E|k%1%WOgAYMX5zKjAPLBYI)hC_&fM?geCz)44<1*NdprS>zXjniSym*s#7e?N2o zTc7*`+sPkGWk9pP$Wsw9S1~CoaXBqXMLB5|L0NTXS#@eTbyj&*0S#pdeMNaw1r-Yg zjq8fKH_RYj)?V_UFs?7HfA`+P|z1?QTx)?yT+aZv9CwKd`?5(%G4&4a}?q zIvEha6X2EalG@33B6lj4ar`KiAv8VMFo6Tc-Fpg^BUVkbH@;PV6M(CEl0*eH+-5aLU? z+?W4v=+ICU?i5L@UTmlN{rKdnQ*t81vLZ>el(Eo<&Bh4q)T4wbYG zm$r|Tb&OPW48Q9btncV+?dbkHlWSshV15*~JX*i@v1Vhuc5}LEW3GE+eqdv1^z-`c z&gT5?*23P-(*Ews;r{B;!TQnR=AY=$fbhI|3|~Kne>#S59iOPtXHxW8Y4-=oh0SrOVQq9;%?{Nap&D}yWjo$e-tHtD@6lGq|Eaw?!1co2REAX z@}H05oL6x_R&h|!m3$z%PUY;2AjFFxBvKHV5&?x00rfH>gd7o#6bbz@%>^165;_Yi z`p5K4AxtdKSy=N}*~{5E>Nz-Je|<~cZ`6!`PJiI3;N!~`6nG&b6d@++CIPjPmeP`y zkx-E5R8*u?RwhzW!BthoQacH3HC0@7H3D^Y5={*{ZB2GvEkS)9X+u2)Lwz+v1D$`j z5r@;`#}C}y?|FFGdwSmX^0M>xw)OF`@%6n4grDC{e}5os0s?FU0&YEdawjnGUQo~j z|KP_yp#h#x!`#E;+#-@)qcU8gvR$HcoMUobV)I;M^W5U{+~f1S;&XkUy$Vdo4o%F8 zdY=C5#mj%kIM44}b^fTsuD!jzwX+*&va9bOts0(rJGxvlzW!!nvuN`3o5{~5lN;re zYjqRzZ4=}D6GNkuT?P;59jlafLO>oUdTUQEI3{&I$kb4Uada< z)C~XJ3*Q-s?=8a*x8TQsuJ8}9lU;`e^cCR}L<*3zk?@FUA(muOk_aT&WjsAo#er&U zd>sMmFPnV82$TeuxF~;Vbvth$IBy_0Zy*4&?YC7M2k43`;L=$Dx&re5%{%&E`{_>| z!oU9&KmF<-`G@}(Tg|WAKzV9;cq>n?N&(=QV49#vf{0kC*j1;iS1qnWRiRKhsDy-s zq@*M;Q3?!_0#u{_gu|1w+aouhN1mb1zH!b^l3ju`T|)C+!b@DDs-0sRoa125@$Jsf zx}2YNKT7C5jlM?-KZzfGO8?I1E{XlWL{h(NQlId#NDfN*rtK!q%zQ`zg znVFxF^(r$fCo3!aw~?KlmHqpbla=!-D;Mx?RjeW-z0V4PBDMf$2*PJ8<9AtJx`io2FDL>`R zrBgsHIX{S)+vX$e^-I|h4vA%Sw3(MD{FEHPrE{h>oYtZ(QT~jdvi!02#6O(c1QBrQ z%<6q9=eB&|S#frMrdkTyF)BCUAFlVNIq{nItKkAu_j_0;E}iiffPZ)b?}>kS_=$fw zTX(tR*0OZFL%~F~(^qsqQm4YHH-LXQO2Xc1P17UN1UJm`{Mn)?mX_+=@;4vfJ(mK+w?8(9zKW zLJ}q>CKeVJHa0d64h}9ZE*>7mD zi__ZoVZL7<+s-)Ayv4l0u}vUNKBF;jD>wVwDLEpZ2J=p!95H@&N# z`l3Gi!U5NWf((R03zG1!%sF-rA=?y--LM66L}t8$9t?Y(DN4%rtqCO6qLyalV8_qRU5M zQmUo5$FQ5VC8k7JDLpk|tU74Wt8)Yq8~eUM==+1$jhiG+7~IA41BS(0<9UFTb4< zSIb;ay}BCP2t~n94skRdO*?bu`zyYkBSVbz@sAi~sFz z+Ap(SC1)2T&uF3%ZaJVi7Lp6$jAvx$_t6h3yH}KUzHcRDlaM~F9wx|N+?K5Do9H! z%E>7MAuq3@sHm!}tgfo6siC2*si~{2t*5ICaO@1uAa(%3?mN8B;v2v2JHqaaV)uLL z?Tlh~@7_HJ2M0hJ2Xt{j6#tjzbbls?1J3tiA)reMfI$Eph}T6$0Q>SSWW>|A`TXRcW3#=Uo7_0-< zdJ?Uzovm#r(bm@0*51|L-re5O-2p^rPiJROPcJZ;J2X7*K+n?YTKj{wzP7f$2ADzoW_?=!bh^HSAwF+?-rC**8lM1d zZs*Gm(Ejvg_Y1(A2E_Q?y|aeqWW4u@@|hhJ=OJ`^d{mhxro`GmvU#&VW6Gq zB>){RIcaCQKQvlFm?E0-Wj%dFq2NljGt)aq1gtAsML`6k86r$E%x38Lw8p*`al5AoM9AHAeRs^l!kgVbSVz8~ ztB9U5(HN^O@@L+*q)GAFa!p0OGRl#zBD!fB*~$CflxAAw3v73QmohcLT<4^nDTt$) zaVD5&$a*G3U_NUmROHLz%u^@|(`=X&(aqU#Ir{9`2qnIy*+?}Rrnx9BottyfdREzU zF@_r1ZLv(Q*@4<3;@b0?H-w_CG;O&Ctu)jyx9Bz0puMfyYH4as96EDL-Osi6vl(7! zq6t~22#}LRr=TDN(i2cfZ!@H*%w_k8gz{a_mKd?D7|1|Z)|5_1o$9wH%nHrPhVDV9 z0>#+XMqX!$<$Xq2;z_po!2H5sGNPU+AF3^#h=LW#z*8<$g3QB2ixJJM7B>|v{++>w z0J@?Dyo0VGj)44ux3S;9ldU5q##PB@+iYDig{h`IVm1xCpECYaeqL>Z>k$;K@4hMW<4 zTtQl#9;&QP%FOnPoHrGr7SgK5QrddLI_iuDN@Rvo)Mot5=B%98>Deu*u2@pgTaZ#& z;S=3P$8iPCq;LC z(w#ly{rm#MeO(fL?b3Y>Uwg~E^I~uEr)djj?+zClijx>mmY+#inaxm}&D5ICGMvn@ z9m{bX&wn`k`tEA!t`mSrO5gmL zu{)W$Ka+hpmw&uee6&4d^}8;$J5FUAE?Fxs z$;*#Ym+$5*0q>wl-?8n?WW?zy4GtJIz=h&#z{~fShR~L$XV~_%Um8OD%n7{IX~pe+ z-4F`(PIYZni&skd)jO!1)}-P~?o6Apwvv;E(1ySm-c5-sHgT<3v-$d=0Th{S6aN%(80C%aU>;}7kCFX zn0J6obHQlKm1q&=Hz5LPump|Lje*^{A7ggM=C>lMXE9l9uh5lbv4n7be_af zK^L&B&2TjH1;WM2$F$N!J`=0YC=h&#O2Z&n!_W%a3$f(xIl44pg1Z*4ne0n57bLfx z!5?M@PH`tKLlkx>3WTduVgwgXIN5M|y9fJ_#9BiydpxWN2$MiCgT9ctN?f0BCxKA< z%GeUL)fLAFl%lh}X2vo6m`cnxWW8Tu!~-@Q4z;*@MR6Y7b%cN=1HHXzt{6 z*V~2Iha>_tEuAIqgN2g(plGs1f>;+%g!*Y1hPV+WVc(Mr_tL_hr2?qJi=GfPUk^vw zo`K$eT?qm=pn6QUQezdNi89g>Nb^8w@ww!Ea=ij*&7^6waBGw&sRApKuY>HKC>mYx z33VipV<8EX<_HX@d}Tk&F%;R!5U+UP^)C%0AHp6v{|+c)1kg19Mex2X3mO4Laco{V=DB3o+FD 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�uwQ&6 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 IM`>mNJ2;op=l}o! delta 346624 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%0A^?*q!(76fv zH$mGENDTs=LGLesPZt2_3_APoAHlzakaF;a|2{Bsd*ry7P${w*Od|;?>e3~26ArqB zE`MUgG?0Mc81M;O_0N@CNa25+pgEqC5!VPwTn?ZP4nt8?#JI&=NTo1{Dy}IWgfuc6 z7h$_dyZVfIFdJn#(Zl8GqLVA&jwu=^rbX+Q^7xoPs8mUiYCb?649AUwce<{siiqmh z45L&J-y&mS?++P&z@z<6*h0AL0o!^aEp^4>i%>WLlXgeL_FybIukBRk?U%I-?hY1V zvjeH|6fe{zSR3L~Vo);lEzZ2x73WcR)^uF7I6W3n^Vb};yW5Ulb$EZ+obLW%G-`@w z4aL=0wmZ)Beab~MLn|BwbyV=F)|ZE*%-~}m_cbvLAqf<)0SB)J!#fWqP;HB|uwUWW zh-I86D)lb8L!YX<ROQ-^q%d{ccKFB- zPD2aqq1jZ#9oN$Fb4mrlhpka>ib- z<*nWN`kO&qp0gcFo^ZYJjo zC~Su$eCR$N;r-lmDolyqjb@Y!9g4oELT`xeYZ#fO!jJFNPXeb*h{6xDgeX%L1S<5$ zBY3-Z&4lBfW2lfcY0>Q-EhW+N?vZua?JN=cO>~?Q4XR_T5w#N{bN zWlqY!Ve_BPDpNmlNi5+nc68M&GFO2?-Q;%~sO~B#Kq1!Rd-ED7nIDWub6jfq(nA|r zF$MLA(0(Y?x=oc1tG+;W-1|kn@P_xh3o&3rWI@OMjmV1v@s02|1wY2T+oA1qiQ=Dr z?xw1RkkWZ;Vczh-1JHlSbc5EIpWPDNf0^+|{fm|!BtRO*gN;_pjf1+j_CfJyxqf;S z1Ho+l;m0qpQ5whoVdcui`Q#KqvO$1jv7->NcRl=pq&=RFTOPpxHm4BYHvV;(A|XC9 zik+_n-!ssk$CN3g<~VfOchCgqYAP&DU-%gq?1`Vz z46*NchEq+T@a~5X6)mPF{D~mafvgVkPv|F^PbH8>aH%mRlP37IY%zEr^wBjPCs_Be z()F6FG1HMn>+n6H`sSvhIN}v29=Su#>8`|pJ)dH@;mAQ!J*4$iFy5{%m9bY{RY;L6 z*;$m0C+Me|)C2TM5`h6LnSY0-@Qy*eSKSWVLac_|JyJ|3AqVfH>PZ^9ubI`0c0yK% zS}w3=Of^Fpr`3U?s#tTv-2x7l7#dAH4YD+)o-GcW9Ca1drua8}oRVsX6S8?CxrbP; zEU$94cwuu99{?XVnUyn5N=u`RRT)4A(QdX-maFp{ZAiCxz!|Sda(REt>L)rD(kMVhbG4JAQh--4U z0u9WmP7~UKxx}L^b;Z|>3cL3z87Y4a7OsmHi(KQ@skbml=z36cV`&ffb?(dBroB>m zBJO+7b7u=?&^}L;>)*-n*63Dk8ssKTIT$~BIFq^lHH|o{jH#DrC9tqL>3$Rs)H!b{ zE}gPgEX776>k=qE?w(GlduBI1#c6$S z<$Sob5WSphcm(j;8qiyer<+DAw3b_wdMvL0@@{iWtVe4RS&ddpEmsHrK2RhNvM2yr z8{C|q8bwL3l-4vhC*J*Jr7LMXmuwnaexqK)oj~(Zwr_ns<7Z!}#%7wTS?%Q1Q`bSB z8LL8y;u6H2dm`Nn@2QL`hqIi~LKEwu!qnB`{54LsbUIzjnJ-*b4ph%H7JnADcW>Gx zhU^DTIp0HPHPJkGQFElTr(6D(%cfgv#Vcb05y|WziM}2!zHw{w?OZRrieShG4`V!| z#Xg=*A-%IM`*=UY3gkV(2*EGpa zv+FT|P2o}8045=SBa11!&XMVu&dh;ROh($%Y;hKzfL-_h=UWfoWd4VIR zcveo+H_uV=#fYi;{>!w#EIno9KR zdvY1Q+nBH-YIY1a22T|2?idF98I15fP@@dCg-}r-)`G@ih=-mQ5wRsO+z8&BA$

      f zJnM1qg-O9y`!&(1H{Kl{3NX1B%ar=8p^c|XhZ`{=??*$DsFijx5b+cAVSC6?3^|Tl zh>#E?T|e9h#YpK1LCJ?*^x=HKVGIgK5ER4A>>gR6pes+{5?<&te=Nmz2m%tq4-H;d zBV)*6BvkS><%F&a;Yg%GnH#Y-=0Z?h;p}5vheCd)=my9T3({1{2hj(oF@7k=DTsjh zeE2~sKTG0J38O?oR3M?+xagD0M-+43s-rj_yKov$Uk40K1DEWa6O#At(QG4@NipQ6 z8BT>O;$u78tyCzEehlmjg1QPeVMYqzHo#5vL#Nbag=io|NG!QiKXsH3UTOf_TmZf& ztpxgupH@Qvk06d&A4Fr8gt`Id?BMd@WW}c4idt4DGbx7i+9$16p_6!0{g=dXa=BFcR!B+%uwHZd$TbA`QU~z% zVRhm9I5Z^r^fAWaD48_CWL8Oxj?pYl$y%N_R`2n=PGNAIsYgS!Y37gNY0C&s9TZ3|0m6b93QC#0UlX zr_HI9^~2OHWX*xVe8IFlZEEs9|CG)+@?CCfm1>x3aqz8iwu-nMH1!%uZ)|pFT(;RP zM34-#dzN)kjKL0o9#j_wbQV>t75#CK`g}-63xUm7Mv?S|v)V_*(28BB2~mzr*kFkZ zbdQ31#>eC`5ydMPcIGNjJmCw7@m(b;je9a({m|76hk=~Q`IHq&>%%}(z-FIcX_kdy z$#NwvdOlu=I!4H%#l;3Ck;8$px#kbkgppH$4<|6WCTnoV>^2s%+D6p-frE8jS> z!sskd@=F0AG(?qdjtt(){v3z^b5R=lCC|qZv@}Xokf=U1b!HYVlZe6-1<~@66|y)w zs66J0TFpbHfe<Yf|kBU3ntdi>pTF*EvgPMIWesK$= zj%K;9KEie^l0+Yi&8s#B7iQlOVvQ-E5h3TE&qU`!WCd{;ylGK1SO+2B!;DG3Dx1cd2cKECg>-yeIA z@%{MjagRCHe=hF0<~)v*z$F$Qz6j|%3dD!zeHhVBDiSZFZ~*)Z9u(I;o(_XXws}O| zCOYxdDs z=1k4b_(SK^M5xW1Gz3n^Yz17qn~Exjd4&*0J3Nfg1dEwrUI^Pt4 z76TY5zZhv)7}@G=&~#@8A3_l(V&-fZvS<^Fi9-F%=eY6JIBrGCqAnr!9bCCtKR&Gp z+Ej!_Qh1vTe{nc?WHRIvNSgg6;zY0Z!du^GD7>tUK_5lK)8YL1Io&O<> z3N=FFE&`Va4uuD)8{@Tv2;~N_>-}X7ClZzF#t7*XMYlX{l%5ED$^^oc3Ou3hlKlHJ?2I334Q!Vsg zdHIDQAlPUkcXaiOn7ZEUzwClIIA!@WcgM%T6(M|1ACM0oRLmPx?jBU#7*u~8)C?9) zV0M(Tck&g|E&Az*xMa{TWZfvQfst*lxNO?xW5F-4wC-blAF?mSrxg z>f}-8BKc^WxHK%j;M{hr0JxbBaZ--XUynF1j=W5Cx9NWAZE9T9HgE~iH{v`9#2j|E z)VE9?wC+QaHbPMo&Q?!;v~eL+vZ5UC-B-;@R54dI!4(>-d>pU4Rf^gl54Rhaf*(%| z_V1X~a*uX1$27t~GK?Iyuelz!1euiDD%Z-73)~Fg$ptrYsw!8wogNN5F7{)US)lq& z=GK|ix;lhJ`qD?+1{*-eH-im-5smj@s?2sz=487>`b|cu+SkgdJv*FgEpxr@eziL^ z18$yzFw4J_*L#gJaGW=tZ#wfcZ;YsHQpIj|;&!5paLQ2FFpyG8R95|tbDSu|36WT( zv&~W?YIeX!t(|#(U=mR8pPbZ&PMsyHLiDGHiAFYpongMT$wbJ=4fAy9nal4DGpU1F z^=!LAma!y#`=M_0U-mZI4%T||vt;!I1shYdd1hfuq~IiVUM`FEVEI?&&foQh7&fhJ zyJthQovoj&95<|!Dn@I&XI)GuXg24JC^d?PN6Lw3d3+u1HylLj4PGY>dyCCb=i3~X zkHg*!Y-L+4`D#MGEzVR7JJ~(X^$bfxdhA|kq%8ITwRxoT3-*T-BfUMQi024 zC2OUIX^QpSSulI?wtL#YZmUFmg3Nt9@o9&wXH!gmYjJV&*lsW9aE3!%zSv-dy8{B6z0Z%stVIc@k$8Pm4lM<>X^DBF|X7qOjQvz3-pBEJw+)eV<2cCl#9rRPanBg?@DYp9depGd8rC|0 z!_L8tHu||f)Ne`Yo8z0QRj9gy$<*RX$l^z)W6YbWs^mk5H z6uRt>affC&>gO(|zEYWg&2Tm5w_UE1nC%prsONN`+&XSP{Mw&yo$aaxasLYb=y0mG z+fxBq(E2#jx3zf7wKbMBvH1Fc=R8n%Y4wBnT{6T^x_SE|t;;@{t5 zA2MT)>gT&jQ60XdTL0mzk|BSfREdiXSJYG;~j6(BA?WVq0fwsoEoazQ4W8*_tyg255H=_sjE5Ui2Ce+Kgzkgg2 z(=i6SlZ5ziOrMg5T%)K9eE1g7YITHdJFi<$q5b|r`g~_!XTP8 zh>^veR`*@v_FeKbaXU>!9%TaCRKypv1i`6@mdk{}J4jbQ?}{uqG-(mJLd!AJ?)hgC z-d`eBe+n-C{b1dXBAklI=P`hGgOo@2tLD=K*Up3598M?Bul^ZA%_c-!Da4QdxFdzX zgqwbK0+&cV&xj@@9~VC1>V(1}d%&sT;z2@E5#?r|=5P>7pCKyrq6pF=%D^ED&?1&u zpiDIa&zcyjo*@<+-M>ghap6 z=f`QK=qZoE!gWF@mII5+i&J+*&AhaZ8>1HpNbTbt*h`ntaHV{Hj5n@CMy&)OL2W2N zln}jB{RXohK3PpE&hS!O$KXi5Qbie7zGT8OUL@J|j$rpzP3dN2s(A6^UY};h3JnP% z+tDa|TYBsi!nAAt+D&=8(jd~FX;9vL7QXH9ZMnz;r|Mk78B!%n z6yi8BNM=>W%la;P)`gA&Ov@n3?9Rg@i)&Haq{LDf$*0U#S;p7T)-PIwR$7$GEipD< zQwtixp2Uu%TGVciC9KWh5FeYbZ7lq}^9p!be-iJA5r=oG$e|7k)o?<2aW^o^9e$?F zH+foP+p48N6D6RnM8lOnHl)p<4Uv#g4YG=*$uDB~@Orv7qGjPR$8(C$F`xmH!p|@k zQ}AVH6)n9YyK79!C~dzkljhB+9@y%n8rztc{fmBj(eZ92F?=hB0IRbiVZ)I`mZP>? z$3eTv%TLG#tnZMVKXYeB^Smr&a;6Q(Hn0%c1BDsiX%sP02Z1%c%~pyVk6?EzQ&RRA`MBk zs~U$zUFtgyVY=B*pck&qBha8|WFp9`&ez|Df4LK1ZkbFM-4UOx20H0G>zJ{O?>_gO zamM#3zqsXY4Q+lwn$-qfx8J3{}OHd30Q$IA&01##cSj4!6&KPK&Udn2s} zI}i7yJxmTx6|={bh-1&E`xt|Q9(438SDbx4g{Gzu((02! z{j2}y+mCl=Q9nPje$5bt1l}xHK0Z!74gVTPXvutc-{VlZRmOz6ze|@wI}wJH*OZns zg~}&F8lDF*SKtmT77P9eH%(h$h@eTOLlNuj!$`NpC!2&rh1=*;H!otQ%scf-J>B>P z7bBfsbrG23O^3n%vwyzlW%Qnn1q9o-lmBNv?n^7Ogr|y_PpzXxsDX+TI43X>Vyh)u z#e-rECIg89QV<;of z`x}#mT+J{~kNTI(U&cU?7{`M;N9MT{IA=dl0PUz`@%7cFs0JG*>Z6?gi)!uUNJ48`-}e(Q4_dM- z5&NRT0mF~7#v_?<4|8#uW6b<`(PBHNCd}|YFXAJaa|<&w0!6b+FLKh8&b~5STq%xz z-EER68%2BjRjJ?f;qw%6$PfQ_oJSm=82kOS*h5!Lmn30P#R9(N`7x&7DDcvfDUO_N4%Vq!E#Az@Vfp|JF!dQzA{-nPkMRog6Dy^o4fCN{Rg_Kj!y@;N}&lf zRH@h<O(Fsg;SJK3IZEG0{bH`rh(Il_3onNI$2KKaZ9H(F&{# z&@7=7M)&4WKac5`CYz7s$=jKGiss9P_e`{VBmjb)t6AyQ6Y|mDNs`L+fshmSWPd0V zU<*OcEO~R4)ZEhvK%7kPvhPzAM2`Eu((;FrjVUQO+V@cfV`>tUEttOUMr7GhqLm`g zHEs3BAIermkwafiJixT3C8m{;#q$hc?B|rFOQ!AQ)qxawi15Q(VcS_^x}7sntmW+s z2{>M9Tejj#iokQ*2lrznJ`Cm<9`Y|SUfM!HGNmwPV2&$iKs}MRh>X)&FZLeZqV)`^ zD81OCDc`$+!gUnE6^)l4ZXPRj_9$^>pC^nP0Y|=t?vd0`3aN%TJh(EGZ=v^vT@!Db zJlmYKR*u9im05gF$O@%ELM{zCf}Ds?WGwI%d$}uG7!u{=V4*Px;v&7KjP1#wse`C+ z{~m)6sf*e?=q|jAVl+S91*#QFxW|_mZKwnIVoP}ZuK_Q0LWgZ zS9T2FWFKQM%{w58SEfIq`C4t2J(p42-%&<*uSMUJ!9;2$${$-bSnT@)A)4ZgP|ka^ z$xTm70~XYfdny?u!VJdl5Bmncn{FY525$Y`=-lGR1M1;Tat1~fa@-g9lgu(4qN=sV zl6uPM+#e%Il(K3_$1-}*=s92Da>%oZzFN!Q=_Sd*o88%6z@0BSWMS!uBIv+MWU zF_}skvs?1@6$aP(x&q{(?Pe>lcKhjj4CL`Z67sP8+r>onVcZ<^7O2>6= zReqve`|HOiM9f}ffwyAT@dyGCsm3evkZ=|>+g^;kUQc6mRM`fkU~)fEZk)khy!~Qa zTRO|V-V|BpuKD|S)UU<_--U_DZ29weE(X~=+q=QY- ztG)4AXcu}rMC%*qtCNiTe6-7jt%2&6J#ZQy7h!iPrENcVcR4j&lE8-&~dR@iB$c3faPqGH4WgL)t#Ig__5K|qP%9Tz{?|oJ$ zMfO<3rAkM~F3TRwB5>9#);*wLDl7BY$NeY?MjC1)ttS`l%dY8Fqhyl_9#lQ6;_Q|N zUJUNPVbaEw(KD4(@%E}q}NQ;;bXd(?az}0fq4U{_eNp{!6yH=|B49%p=8YW7= zI2-&D)^Alev|rP&v@fee*k^e?jItnOEG8WgB;ytdCc~E|c9s7AwNF`9Zh>6Nfv`R> zuisXdMKNz!=W#ehwZMIU1Ogz*Ly$(pC}rpvMFc(C?(r5ITRp&Y@2LRITHC~aJyQqEMBYgT#0c(A|WY^auTVsmtS z_NpcrNrpGEzZq$;B~qnPWMX<(j_bP5bgTz#L({ z;X3%2d}$#MhFzlpGoYEVh}du6Z)gAM5n@ROe(FA-%Hb5@pjS0@A-st5G>C zvCT9O6K8Ql&|6yMz7tL&$xYYGsw@d8|CZHaJe$VD8bIdi<&V^0qtwKE(tJ8CK&_uM zdSvySoWVc_V@J(mm1!>M4$#}NjkHR=+W=-*-Q>E;CX_HWTw7(m`DzK&2AF(i30pOv z9_5NQw2M?HAVHing5~{W;-B$*6z&*5Z-V8>>ZJwLUC6G=LpQ$q^7Dy zBem7eSh0F!i8g11ZnS?`jo7Jbis&tfgzHNBN;L;*iKq=Cs%hCjsv@^)2QJ7;h-niE z>d;Vqe(pQVC%4Fcpv_;#-P5gWE~fTNSC(OOn#UKc1(DOWSk$SZ)Fb3t)adz)Dz>N- zH9y+QAP_Zev%h#|sxbekCl|6<)hV-g{aL_mPK{_<-FK?5RW+hcQ_yYN%2spHS&zWZ zz~5F*eyV>wxH6Hw-n&j)seakOY{CO*lVi?TkX6&Cchl;R90~AU7V*`->h8bjR+XWe zi_+^|gkW-nhD

      Ih{m$qx=KJ!+U9tS|{KhYK1?_bkcWELG&_gW9BQLJZl>R-Jlg zX0Q98Ju^$!lRiW834e3gl@Bn&}R^E%a?Jhv}_I5SmQe z4*X~}p<3LqA<{eRUZI&<{^+&<%uMReF3vM->PWZAVz!wKaMczbj4#No_)@N9AS-y( zL(JN-v__v;gRnHY2InWUr2EWZ|Cn-eiNjyc$9<7CSL{}VWldk{Zk%+F@Sm?tWzL?4 zY}w?QiXksJwVHn0T=&XfJ=@ge5#$&n(p_2HnhO~cyV>aR)l0}MsMlvR>w64QH)mQ`W88QUoLqf^-G8Et05$Wyq@mwsmLR_kmU2V0L_@|+<$UCw zpHceT`KoPMlR{^!UrY@r&xdgQCTsQd6tb)yLQDp-OcLcLJQlV)#r1oWwgt=QNSEYv z>Qox#0_FCIt|lS&2smj2VrRS5 zsb@xeuu8jSDDYZ^m02#jXEShWojZG#IQ#Q~-V}MZj0)2{n}l?~-csAS7EOf_ncT7? z=U`t{Uq`vQNyr}Pb|ZUph_6mVF?hz&cdck>m#5v_H)KW?WCvg_-}o4(B`Ms6e3seY zgVQ%x6EYmas@1I6<@h*#*kh#yX_!ev9wg2_m>XYPOdR-yb!e&21#h-b{}g$MN3$Ds zYdc4Gzhn4l#~QtXxM;P|rY28b+x3|nj-b?YFsfS9|V-iDLn&A&ar)L|e*9JGXwJPG9We@v_Hq3`l zea&Z{e(l89+dXcWxlI}R4aHB_qsMIy@G;x{9x_PW+NtI`I%7Q0!9I(8Ise)RKds)nY^H_Vhy7 z*6uvES)BY1YrPu}ky-xcmfh33g5J(!mSY984GQO)i`zGp2Ib03ox|7PMh@jOLbhw3 zOs`jsUOQ)-D z6O=+W7?qodiR#zpXM|7R2_VMu?e11ndI#+)zK0tQpuNOtk7;Vh!~?)mqkOQAaw|c? zq=fkJHd^<>ZyG-3d`FObaKm8in>jVeNs4$EiNw`p32a=Tt&`>X_TzTTxi-XZOMU(0 zx3OuLIrW#HC1&ioziTcn)5*AOA?&0YiG z%))H+6?BTqtDE9`qEq0lv@ApPd%vRoI=TJCo@+Q5Yu!p{9hK&c9&)u{Z^4wjS9UA& zgYcy{*XC`euf%T)^rx=};$Hd?V0v$8)^E|(345)u{YsSPRH6AP`^Bv`c$Yx&Q2WiLbu1HT8pE!u(iGo9nf+F(A2Lr_WKXYqp>7 zv*dpEeal5e_^0O6cPx#cl}y{{e&4DOuaBNQI|Y|`MrR#Vy2}Rokw+-top9>1RB{cYwrT9Lh{vxpLDbZjzCuqL1wRw;1 zZ&GNPVPSIr`Z&|quKAneA=X##C&`46;fn3c)R}Tbzx8VLAqG=O+}#%$Ybd`s`R7?8i4UwUvE*`pa*v!GdK?g+ff*UW{u zB_5fbv{{n2TgLqMv#5JH_|gY5bNR{O%MjB_Q{&5|XBTsFp7Wcgzz=Rs!or|-VO1fJ z(YFSj%$Oia2sl@5{kZ2B8TVd{kmurW$B$-#-7McCMgl87?GHX%zxW98@16RpCGl7; zv@7v)YqP@?GdoChX^pJI^_|;(70&!1%bgF6bGAXSEi>D^!7Fe zPa*PwEnro>=$$j7((0@5YVpU#cRi|MBl?lO6Bf-u;#mWf*w+ZZ!dOLSi+aP+iKtCQ zF6ahh@$r_0Bi!OLfK_US^7Mt#-OqW+UlbF1MU( zt#S@EZl||yhV33l^Yt!2xs992!9t4(KcDUNhBuB=x!zqEG{uq-@VlRhux*#75&Q~q zz2~#9j;BI-S6n3uLgoA)W-1oK&(AL=CMF{z0|Tb?^z^K)tzW);`TF&17$KFKnhGPN zpit=Bw{Hsy3W{Msby-gN-2PF{yZ=-{wi)^pN>QC{s9I5VW~!}(YpT2Qt_9G`T{^;-JkfeKP(j$x^BLD z$v-SrtCMEwi~K(jXuFxs`j&qCYsvgDg**lTpxEQ^IfgdVI0om zrn@SuQpHgwk(H8!^ip}tcd-NnatZ47mQc?x?TPbW&=oo4niTtXkzgp3e%?MVB-m~Q ztKB&vRC}^ZaH%SJ{bSZ7{y6po!>hX_6Y}v9I*Fwc0{p?Y%P%}+Bkti5(Mfc*xfBh1 zgP645+wmLU?m zz#Vd?PiBn5p1t=lc&*uqtehx{dx_`vykcxESsY-MeM^(ZDodoXLA(kvQIojGBNVfQ zk0%hl4wcJhXfqhXrtQBOz&forKqM6JUM_o+$=+TXj&_KPT#V{FLBGm25$+O8OcI&z{e zAC?Nw^S^B2|Dv!~RXWTH00WNyRyvHcfz>t4)(qopV0wW6IA)-;h3M4KR29(3pN9vOG#4EQ z$_0DCfLU0$uque>4;|aq`!5|ki_q|2I+pDv?MUu_>DWRsmo22fbZo{q!kT~R*wSy2 z!n%Lx*mvyZHGk+>OB1j2PWy3ks8xTc3P(m#HnUo9CW66<3IU6~#G5cLVpDQ9wYz94 zRnlWa54&G2wiAAKZ@68>8hCZsu`>C0Msvg&%3oHqYfNWPK} zlkppy$etn;pc)J2#ZXUN``jCmKvfg;-HeYa>4*52vN3{<#2!^AKBlWT93DNg#Gf}X z-W;lp0*>IV%Nrwp`>9?~Wd%C0}w z$jpPw+yzfmi7{; z!|0+(dHnW^NnKFiGq`+u60r>gg?kSZnrB)UEAC~&TN(Ic&OI}43S)5BP;by9bCGqf?Q-q^e3#pV`OybD4+5nR{9BggElEXk66x%4+E>!LQHsdQNMT_&xTUthGE*LOMB zSun3XZ>Nmb8#?dUna*_U+|PbH-+5S3`%U4v;ne-Tt`i-!*#m_F|L)(=;QuY^5k}a8 z9~Bh^gI-}vH*95wLEJE=6*ge&^S?AVRO}@h1?WEkv^#?MW*rwcBslO;sb}yodCUTc z2l3(I0lNDPp6*Y9X3YLupo;ka#kVn^{|~;cQE=`0Uwqpi^dEfN`?c|3eEY5TUwoUR z!#*y3h>3{(a(eucv0RCOy>Kt&&HSKJR*HT>W|BXXGC_|eA_l;gU1!wlY+#;--(i!@ zUf3YjjNgcE#1VZU4=;B6ZD*#)lXwd1A+U$!Z{~pKINTzBb$G-9bt9 z?4{X^e$nHU_0X8bc!iU29KNv1I{reoo3H?tTxqkmZ$FO3 zle1NGdu(TD-a+`V4wR3UJ@PfkC_dOYxBKf|nkcxw_a!mWPs|!}vF(9wMI0wVgx)IX zXz~^-B#1X}1jlar>07+=WQiht3PI7f@Yf?XBGj)c-*G9(2kj;nDv3lX5Sz1-xD4_- zyou2bJ*Khgk;BW6qqQ5cP|#H^-t|>8EH*Rlm~*tVJXHg25uH6B-ZPc(8)Y=r+Gml= zqV+=AAs`L`p#ogA6)uWr3gbCbfer}xBAZUbB$T8XL$sO zV|6@VrK4fmM;j(Q1kr1z5jy$$N>G$jz|HiOrR9~*8TI_ukXDm&mJ%O zW4d2lj!t62Qm!=k;!6g z|Iq>Jhl?0esFfEo0pSCWEzFcn_g@3szxs$v7JGYpA0HpsNfO4_!_JDZ-1Wa(C5)qo z?Upc=1nfWvQ%PhrjuJ`391^hI^6v`t@AC7vOkiy4UscE7ZS&upgFjIR|J_1io(ZVy z8VMhTVHODdWFKc0y~sgREYWdA9xgFx>; zo{3WB%~hX&N=t(3-<@;U zff+`>(1!5#l=PFCPI0O10u99=tR)4e*>B`@{6|nF70?W9aJ-o1iFX?>;{#Eu@Y-FEH)3Bz4XylAPIx-SRpQL9+D@w zv(%Dz3(kQzAa7$EUZF~`!W$uD^Yc+4i zNsQYelj6?V6`zpbF4NctEX`R2d7$Ay(^}HbTBzvk6-cJ**mSPI|8;&*@wx*YMsaUyI4;!_JEeFYnfqf}QQ~#EZ)aN3I#}K&Et(L8 z9FoaFaFOqLrYh)tkY8Nq&?NIIO#2<>^A^HlSJhKL275;f3Qiy)St->JhJ>pc8ElMo1 zy95fQA*a-jPcI&aBOy)MpcEO9eQubmHEFiXUTB%+YS@cpG77QV5-`sWya2HG3u_VE zQQ~2?7$YFmqTpLoR5zYytQSv&&1_|L4)2`hGKFR35&_%uyj`gY&ukmoa$ZJbNGc?F z2gfftXOP9I&;1&V2%}IN=Q?-oZR@ZI@>%;Av*2IQrft$7Rf|0aL^{3@OB>g2W9NAU z^BQRmgv2Tgwph}oH{T&9T+COK2VP>Sb~92OT90uiUM1pwu$`2Zt0yQfmh?qSB<~ua zQ9w(Ua579y`DW9&RmYCO)@A1c>GG%yy+4t47-f2D7kQ)Tq^(7>szZE|I%3l^8U~N4 zNg=WrP0|DJ>MyODyd%x5*ifv8bA7<1!>D%V`XeNqk#Rw)|4mcpK909l>ycK;GD(Ph zc>#dwsKSU+Q81}k#1FsPm*|ZjN`GCf1)qyc*F_kkeO*F2Ri(sPGnX8Md0j&JRHdju zo?RTe3pHm(A|Vr*s#f5g>4N92?>dbi7**U3e5DDo}QJJ z1-oG7<>kS;4W%%5TY32(aoaxwW@xFct%Wro8XFt`_8&TRIy+$(u@4{q#A*CBw)FM& z!R}>)gM+Y^#NPqibw)-;{t8_Fw-W)|d;Xe?{>qGCw>8*+?Lts)b{taZbOfjurgdTe zKhnBf{*Ts$1ySSwg4QLX1v5PGP!**0Oqc35 z+8K$#2PJ1!@82N0KTs3ladNaK9t&_>0|z%y`a#&1$1=sAk@&9a9HY}zI1Gf?pSJ%{ zmb4%alO;q+FJ$-aZyO7*NQXc^VO612qN51;T8iJ{zMinaO73GfJvz>P3Pc(? zy*PHwPVOzj?qE(V6SCB9jLv=CV^noSvh26+r9rZ}eS^GAZ`#dlO6uHPIjs09l$T5y zFoTQ~D$Z*uZ3U)OX#+bk4>dV zsIN$+B|sNN{c@3bm{{GTc%9aKmI%a3MWAYGRlJ1&Z%})#~IObW|Q0b8>R@-IW>>|@b z!qZf`e^^_QjgV}aL^FO$W3?-*%7^qJ(}yU+%QLuo?2eMU>jm?g{}Kw%HpZL2jG|9Z z^&FQa~MEmsHSUx6s9%WjS?h8!1*0U0$H2yPC4$wNKTcdYN5@YjVr^lU>ziW zyvgQ8I&nxxh@g;|&qfci#j=2t9dbS5+6Y4noW&Rzm7*6D62N8zM9xT+jI%#kf^lNq z@hEzOmS3b9&IGm;8{dV(vJrBhIT8fP5c(jH{4zR@x|u-O0$uXbL__xD;7rrtN<~n+ zvQE)MJZwaabzsrZ&(4`UxL@JVj;j#SD99w9|RlARo(L=~(7~!8Ivxq@lZ~}R!NCSqDSqAB1 z->BM&P$K4XDj?tcxHI$XJfb&`VGoF4Zb}O8+iu=_Y|InXs-=A^U_x7&8;;yIZuDk30{oq5#9T!07CD3&Re7FXBZh%j>K;IoO zc>iY(J^Y!&55Nd)-UFi#z}P)7eh*CD1M~O5(mk+t4{Y88+xNg8OgVE09Nq!v_rT=? zaQy)MyayhxfL}j<|GI_sti0vO?@nlvBTyj(?7Ay2NjW2)tV2vo^9QI>qXuCzm_TZ=0nJv z@uLYXM!mW5d1t>#Eq1@BX>8lBcO+%%XTa0m0;emZ*VAMF{POojIZ6rs?`O;GSB=__ z^4XJunRI22;AedVQNGc{ zR=ZB&s;4TA6PrP<_{{N0skbiKmWhyNCc^n8)>wq{9d?Su9xf*9lSqc9WT7}jY46!K zRTe$J$VC;M#}q4KiWE{9nlj%@-XHpcqD-HanZ`*OE7TF6|J=2hcw{(~92c1%k9*Fh z-v>6vT!{A`(38$#@Wxu0%Hc}%ZCeqH3ReGaomSbP@wIa`N?Q3~KG`ot5N4jIR z{QV$;5@RJdjAQ)Ux`2b@#L$CzZSE1WU|Hx>P~IU}T%z#EbNMb+!)jaCjM%`q+|cl% zn6TXV(5(2-l-SVtC`e>@NaX9F*x;9`uk12IOfn&wsS#@Nv5FDtTHbFB?29dp%5Buj z?c~brq$=!RRM_)Z*gvarU}>-;Z?M8@Fay;ZBUkAnmusOFt6{uR#LbezPZK3f;3bM> z!Hpuph=AZ?gpuJwSO@|*ahd|aMlJYL{uKJuJ_%FGam0%MFUN5XUNWPZLBE}>LrkrbL2sYFug zIC4-ll>#))5?q}!*bSG*u13(UiO;Kz-LH%ObuU@;Fl)-x^Q_Nud8_J08(Jk>TIG8> zRR;#OMNsp+IJB-@FNBmzBTkSY2+q-_#$KIJZtC}hSx)~ z+SihrR$^OZrx3U)!LD6J?jDl5+^txPYeOfRa; z$gN7xY)VgR&W`HHf_%t&^)cIHILB-@Q)WI>^mE4ZrR*2$Z@{}HYI|kcdzEI}wJz(` z0jo7(YxR*^O)-ZZu@}8@*CQ!6&t{-E^F{Zo6~DG?9uM1|zV|)-7zOU9fQLok*E;ZP z=a1ay=@j@Q=YfST{(@R*qQQ*atjHk911yR0@$vTl{`%qJ>fzV<+y2m3o;_F%c7u$M}(o+>O75~gumUEEop+Fcvl+Zftk?{_%((sOw7;rO!k z>s{m5$J)cEnuDjR-N(wUUzHmV73&YMbr1f3BtV@!%OE#QoRStqOPBZNV;!Mm3HqQZB`VS50iDHQ!)JDF%43Xq0W&UX;>mk&Xiv>Q5}^Nd zTMJBYoHgrTSu7bx%topwd=Nb*AWi6#fvX9EHDM2#2c{OTsml^@D%A@+0WFvWsN?(g zpJpqBdgF?d058trvh9r=t?nE5-bX*;;O8 zS9jJTg4kOQ-g45y^$I45Rc5jLEB7u!{rNp6IKBH9>@=LeWyJ zEie3`t``N4xf3ZA)!UGH*50+61Ora%8dVBS7ai13n_cfg%pC@ws`3hHvjtul0Us64 zl?cmdKMk&|gpteijDI#N%!f$bh_YudRPbZd-c)ecnB#GAEOX6qNg}f^5vMn%Ejl%% zY4DPWRrNYlK2=%WM+Jm6-*1HGy78kd7&)xEfR+2}UY`Wu6(6{U-eH7TQ*gQ$TV(2}A0nF|V^C6`5&vB|<=wOiCUDHGQn=E`t zbyQ1sz~rP6)@QEo+Ex@bN8lz)>gjafy8he@II8ytY_o^FB7D5yaWSyrQj3$=d$jks z`xytH`eXTPMql1R-czQ#pvuRv`nz>?wVg_rykpgYWh zcpDxVE`*_bD^)u?7#-#E0t15?TgJATa>EO8XM!_U>fO&DvwynvbVuQR-3$M8>;1n! z#diinB{&d0As&&#qs7?X0R!7j)_8!-WfV(x1P0ngDO-c1Y&^O&28z!pZ%1fvQGCGQ zmO!&idw`TMeZ~+M_kPS#g7sRW7ffTpYx`ou3MUsIQy!nSD64!~ z=4F~f8WWcr8k{M%EwN8sZ!EfX0vcrr?QB`70Ms#E{bC-sfozmp41O@|*cuui8_g@P zG!~Wv@k)~JLq;k%&M;cgrX2+cM>)>=FfG{;=mI(8xuowiB!wz+WSd#|#rI>Kj^pum zDdWKjB^)xkOobx!j&daP@|&2tFFJdX#63M@9q#%y%pWO{M773}?Fq~1sZhD`d6O+S z`U#c^^ALx@*j@rMWbI9*4G2f^c_$f#J&tk^*0B4Og7hzB%xL>s$wt$~*Zl-h=e_!!y#pTQ&l*;nJRmxo9B~Z8`22Tp`d5DbXd^WJ`%i9 z4w~lRrNY6z0{c34X;h3^I_C5uiQHprT+z${?o1-_5;?BGFugeGc2@Xubot+;Ymvtg z`ihS`k;0*U@$X-kze9`zhUjhQM$U`$+vt4Pi#BrPV(&gP+^-+lEC@i_zg^XC|- zG-YvD7xrB5j3$JFgbfMVHy8Z!~VIwxYgX{o;O~#X>!NA$314{!@2rac* zg%lnB%ncPryqW9Z#*!Z!!o43asQm~9c_^QH@Bo$YI$C(a(vvc+1K^`}U{ynB;%lo*U zyA32l-lT(&h~6-tA9O`?82YSQv3NX4{5AI`7z(7Zby+?UV_pb?eNa5wIvBp+Lw4?5T1y4zmYmR$MQF$PT~=eKgDqi?8@m2Kz3;Gw+Gul z)DQYZWNm`6nYaM%0LopWbQ_e3=hvqHR^eSPbuK<(t?Qk>|A0qyS7d0l5R3?Mu0wp^vxECe zPhql@peLA3!UdpswLDqS(t{J2N<@ zg9E{)im<*n!V{ASZ??X@tUgh+_~TD3Ko}k_R`LCw+aw`IzphH+aA@p>Rviy~fSlUU zt;+wy+IvMcxpjTtA*7K6Na&q}CcP<0H}oPU^xms9=}jcGkkFJKKzb7d5fA|pHMGzX z5D^g-5ETU#6cydd{<63C-p@V8^S$GH5576(QBHDjU2D#@=DPmB|L~#NptX4iHQ@SH zR55(JaXV^P2;k68_JBFxMiq!Xhbc^*tE0gjDdA7x(1HH zIjOLR1@Vu)kW2%qfTP5Cbn0g;(@n8}Lt~56BU+ zae5Khw0}&c3LsgqbbUmW@kB$j33AeCX>C@5LXn>R<2^*b__0?5Kyy$ zY=9uvPVb=PwA{hT+}tvjnp7v6F&|3-_tVwcyZEzwSqhoM6mKZ&YLi_VyZ}&Q;!oe zEnEsBXTpkgrhK%QvUR_mJ#<1mk42p3z4%-_O`R0{)Vjp@Nl`C8;sPZ0LJREv0@Lj# zkF+HiC@5d}`-SC=0>mTpnhn_I0y3xENj{O;+MrnGJ7S^aqL-AKQ(GzFXxqimj{jvz zG$$ZXxisgdge}U8Rany8=9D`_vwmGr$>~VM*H+XTjQ;nR)uw!=vYh5jiWxUaXz{G8 zGz*os*gjgt0?gohnN5mMWr_j*e1esrN&5}9)tCbyxz4UCMt&$ME zlnec2LQ_H>DW@|wMT%g8H+RVPjmg$_Hfoka%})8;momvXrnzt#BCMUu0H~1Fw|3iJ zm!!t4OTJc@aJo92b1Vl)HU}8}i9%lAC*3fN>;JC5X_uaJ+Q|Bw0q%A2mA0y_-W-#7 z3k4^Mj}^U|;GRkWkQM&s>8nEA7A<8#>eVdw2xwy9-6hNg#@ zCWFByi$Nv@Q-VuvUHEGN)90lN@e_ywud~lzYh?z+9lup$SYT@QjA<17l!9J?&5Igv zV#2G4!M7r;uwa(qefVCFRp8^aUx~SMfof`J|LqgygUcN?G!p2VXJVvB90V~+QEjtAuvUy#k?K6M%;qm$U$^#*h*1Y zsu#Q`L4M0{+?5zEYC?w1AfB{N-3MWb=krS+m-b zUyySb!G&8A$;BKs)!hD!=9#oMw|P-W+J0*=64m|!Fy&;rhY3qN7*o4I>GkqR`255-qbbnVE47AdRV8m z$@|P`c1h+wX?v*vlj1TN#EPZB>z?W6R+gn8LN=zg8)v-vny(jUOk_iN@MrU`T2}h? z&xx9Jg3U8g1E|vjk^B}OQiL8ZuSGCm*UnR;q`!B&6Jm{E2A_FPbmtJuF2931*Q8$` zf(jG!$zAeirBzybhcItxM<1ExJmRTy9qgm~g;JecFX-O7aOWOBj*SeP2-Lm%#~m6) zIRNZR=+M4b2V{(d((pozk^H(Kct}?vgyAH5gj+fS!Xs7$wWifb7}_JE1w63lt3MjSSP^+@Zt5S}3g;ZmgFo7>n?x4#IQ?@!kk5l?vA# z)IpAw9gZpw@kkGWVK@1uXGhL>k4S0}s7&>6n*vrE21QK;2JH{(N5U(C!|nBq@pu$V zw_*1N*ZT&z_6E)703or#=s1h&Moq{K@mQF1^eZwRBa=<_3lZ`gjOVljN-{9W#R>HA zBpHji%Qjw8I1!bMjtQM`8bXD2FuTj%_6nuxdBb_DP_H5<8`-(iMJH0y2=G!_lzJXV zyCNSrc_Lwb+VWr;iXAg7M5KmtbjwPd^qL+So-sm>xOdEW>@i(%Lrr$@bZ^MO4`y<^ zr??MhZdOgfyQj4LkhRGit%}ny-C0SODH?TJZhh8ZQMIQ7*xNDHH_NeOjygbcY#{+v zU9;%=d8+K}_~MN2&>UgFjZ2^k_1T>Bf$UWKA_(Trx%`t4eqC!XZ|>#nl*aNL6BY#a z5el~!x;KL0t%ua7LWYttY4~})g5e>pV;F@{fv_!-vwq-LGV}n z@V!rndIFVkseY*s04%=F=%31(5xuhi3S3l&jZu8~B@ZFKkIqya)W|ert%7SsU?OmX zBihWg0=PB?+EK?E3_{*LJ_!nqV3r=D^WT9+5nQuMSVuWEy$u=Bi~KHgkG}8E{=xv4 zMQ8;Vmma1fo<)MfFf^9*hZ@(JIkhmSs)mCJb1UJ3Y`>nZV08Jybw@vFKkvT9$Wyf( z(X|}-Yq`+37L~uqx%oVDY5l=_%tQBQk1d!q>LAyDt(8{Gw8?>-P;6Ko_HON`>DXuY z8pnpX5Gr}Yby}z}U+(*c6fRx( zG91PHO80SO=aU$r1!EmXu05{GKmr|x$UH~|W_AK~P_)J?uZNOXQ@y2TtA~9(UI*ON z@1ep(WZ;2#=Ak;Ee;0ED6|z!Jm9j zwhJ&vnEjY4zmqAib|l2ylL|7^=Ub>kC@etLd>Df;h`;bvVl#A

      EE2@8J|7OoJ6)xcn1V6bW!tQ-a_hQagT z@C>*JN<=hN^p5WxvA1FpjuKLqQZjnbJ7sbx;d|&GNFO_WF#J%c82UppW?K|>irQPj z)j^T1;!>kv6nNCg0st@k122X?0USEd2k<-q&js*o0M7*QGyqQl@I)Y)2;>uiTH=*X z;+1LMm37h8^P)@F{EPRw=f2tJ!RcqwNvEjfla%D+jFh9Cl*9bg!@|_VqSS+uw1ZD+ z`=8SHAe3h8mS+Ag%i1Z=-m1vmsLWrhDx_SlDOsp1oBLArv$6h1YvWL7`?r|PDO%*f z(CEPM#K6eZz{t$t*zC~Q?C_7-(eardQ?rw^vs3f)KbMw%uB}aPZcgv)Oz-YZ9~?{{ z9!(#gOrM-ipPo&hpHH7(OkZ5iTwcvyT>Ux+bEjbb1k4|S*#j`W4}R={sXZ|L8_fO& z3%|j}F8I9%4iCY}Aviw-7sx|!c?h8A`wIFz`~!LJs^kCXx%^a$KPay2=8f zcBJWJK6i&+<1RM??s;n9;8 z^062@cRCdsc|*}L)3?|UPe>im%mU~2N|rD+-4BrkD>HJ3QQj6ZNxs-LvU_FGW->0! zIWtaw(AXEvgL6$X@87VJ7;wqSr6gA(>9-|yQ61CQ4J|sXByl=4#QdQrZXc~9Q(V#- z{`h8^32QvsYi2de=W ze-0e}OwF7mYcBiTytldq1w|W02)vS_87zUs+iy>3jKiOnN zIR6ZElvh9gZ5SO39fJVFZHe2=TFh(@**Kj!x&63#V|e+q_ys-+2v!RUeH9XJ6&CIg z7VZ`n?hzLLc3n;|TWV$d4snm^Te7NPjIT*iMuB7E^q%&tiM2^@6^Pq?0o;K_eSGc>HB z@eK|45&$m+@NxjJ1n^n_uLkg{zvs}G(4Qb0NQeFf6{LlC4=IuW?j!)oWFV6Y5NSXu z9jIjh%}k(^1q^fknC5~9d4DYOfpr0}D*#W6!1F@zq7XP2f;WZ0BOiEYgP=?ho(5u5 zL1Gd}P68=OAT;=_V-O0u@`J zY710vgPLtnw+TM4gT^(`z6!dQLGLo?TLMFiV0<3@oCCk+z|tI8T>u+PU}qHx_BO!& z1~}LNN1Nby6P#>;(`|6J4bFGK#cy!A2f#i6|93Wo90egj75LfTn(5-YY`Vr@@eb+7 z^XuCDnpal;UoY=#3)$wIkcDi+d|6gU2<;8+>4a+wS$w3JHkNvYwMrC)R?&k(G8-kR z;r{(4epF@|^0KODdNMjs((egyZxg|#|Ki;d{+-*nluBMi3)^_VGa_AFkFQ6!&4l`w zc)tCo`6V%zl`ym?19@NPiMg7LF~V4kdPmn01=<}>Pv3-4Haf={8lQ8L-Y?MYYiLo% zBr(ag`qPL^45PKk;;(fI;klJyXfczoH?;djT9vl3k8Q+_Rn=v_Dw~q`?vhB?jk=<_ zswiHwxJL%{SW<#vZ^aIuc(n#5f6@>bPs#X+W4s{tG_1OO7UO1&SW)Km1S>8Gp!DmZ zZ<-nS)j6}3DDcwD4ckFVb@smaz-7(r1sCF9B@*K)NI03uhM~8=*k=oUBDsma%=?P= zN_Xg#D!yWcNmcb{-guj3gQN9=X&Bq;MLV%^oYYJZb0*@gx@{7-bIG2L3pW0;#r>B@ zc_RqxCo$oilxd>TccO_8E#BV#>^u?OTZj4`Mpq+e+dO4Kfh0R|RRdA4u$Oc<5n^>xO)VEfg?| zDQ9^N@c)UleH?m6|137IdD?6+Ul5&g^25~S-L&{!(mGvd|*i0vdXIi=Q?dxgz7+sT<8Iy4g&Yy{5iA+{s ziw#zZeAmM_N!gLa6`YPNAl6$6FX(TeqH|%>Ar7+N)u3gp67C{2ujIJP{514-55AFA zC{j3=@4;X<-_1i(S>n!ToLbT+TL%LOTz(3(IPzQnCgDK3I~tn>WmFQ0r4us#8)ZP*5Un-B3r|HgjTsk;CWnT`*)pDC##X z?gWOqge8FgpZJHaL{R9PxN85%^5?^N_{e|w4-zzxtjPfIECA2>%Y~5Wfuv8-zl>M` z5#gU}M*RE--T>fD0NxDXtpMH*;2i+o1>oHP-UHyh0RHVS`T!h4|20G)e80w>??CDs zKy(A84xrWsG+Tg96A~CS0F%$)VI8ok2KF`Jc{OmV0q_vZ61Z1_cNO4$1@J5d zJ|96~AqdL_F*zU+LJ>$P0|_+%^%W$v0#r9h=m!ZSAaM*Njf3P#kU9fW=RoE>$Xx*W zi=bc$6fJ|YWl*yMzAS^LCD6VAkiAP_a2AaG0%LR6G&eN|W@o|jFR;D{wpPIJHL$-4 zj<&(^4mjBXXTSeq7o6>Z(*tmJ2+oec`3bl<1(#>w@*G@Vf{Ux`2IJY^B48JQ-`BY2 zG#euNfAb0cXNyhOo1li&vuF>wUgk|GXHkYc&4U@Zhq9HUxeSVYpX@L7qJ$pRgsNAr zbSK_%-UtnJX39bC&}feY>}blrSi^CDYN8w8_yYS+;>)6dtqEHMi&{ce59P{WvvONyeK&clN%igZLWB6OX6$m?3>Q^k6t_!@_w&we;ufN@Fw34yeqpTI5zyBfySD};W^wD-@6eoCLCiBFjKJZUB zKh~RBi!HC>L#>^@N#y-KujvHsyOL_gx~3O>Z*-rD%VUs8Od7sX7rR*VAvJu#en5)U z*yE)3xUkM9ed6QNM&fwW0aHg{cfB&yY?0y6AehBLluUf3os&ua_Yo(fqm%tUsYU&^ z*dYH7E#8Eu)Iuz=lpWie!SipU6vVzxdek)5J{Fh}#v>0BXPJ=kmoZs7vwf91_t`0o zL+;$9aaoamDbZo+(QO^1<#Xf&AADEcyhif?_K<_ov-PFHcM&z%@w8?=ahA0k4ttT- z`%4MY#P`84_QIrdk2OvQpS4q)$9q(F$lQ%;Vsd1kjkRhe*}LZ^6o5nW5xbxmqY(?q z#$D&WqVrg1)PqDMo$aurwZPjY`JjidnB&aDvsoQ#)r|Y&jIW%(+kYUaW0$Y*J6n%K za`Q|^cXZtOS>)O&xyiJ7zT7W9QWq0ak)i-`-+EF`Z1LrX7-B#1V`U>TLz3uU{3+|F z#JRC89bwO_D5{>z8#_R6u~Z;Z3S8C4CYb%|-7kL#Iod2EweC$8ya^ItkCfKETifR< zAl*1!@v<4q9Le^LhOSs7q zmFoeMA^KK-7&}I4f1RuseBsxIavSO9%;i*WA(lBzs>r&g_Z+tMcA3}41s0LqAp3gJ zD0pwLcw$}Z_3tZ$im#yJsY>19)tQu*Ay8ebEsZ&+M%D`=wRYbv6%n1(=KKMdC%^yv zK_kjQJF0C&r{DF&)6BpizSoQ`x$8w1ItS>vS_sT`z0q@+aKyS>h#ks&n26>vBySQB`(c6}82>e7xY78iG4-G=5#0ae z2U*135YXy`3DpSk=kfERc)0_)x!!SczTo6|%)w#8!KT8-BF4hP%fiUQc>DHksI$ny z!2vZF1q1{{MMa^22We?(1OlO~tgHcTv(eKtF)=~4JVbv*{Wc)hHmph~dK?kIC5}1~ zO}G$AxI(p{<1r#r|1v(*gGm9BNkAqE$fpA344{z>bn=1GNAR!=Jgx(F4d7Wbc-eOK zrv2h=`}w<$v-h2+$j%e5t|RZR1D~!vzs}u&_U)jyjhLp*q{g+3hUL63^M&=(B{gFe z)q~YF{dKiH^>y8!>$|>uZf|IS7TmA1gPNOB?yMNn$jKi+evOYWPE4#$PHs$1ZB0$> zO#j@So!sS zA*^2fUccDcyx7^k*!X?1vv;v`aPj--;`hlV)G$6czdF3QI=%!aSK#ytAW#1?vw`8i z%$#@cdJ*_NeUunikzNMHiIG$w~E}BI3bhIDW=?c{ZS(3 zv(xo2nZ6>xIX7Mo||Q_EV`_lN&|v%l-@- z{S0><^>J)^_<4MiNu~!=ejeumS=q}1T%)sO>O^F@^IBX^1G3|W2W)avnzJiJ*6(5GT!lt;fB zT58^4iM5o!`D!9lo{@rzMUypJJSB*;^-w27Nc+$#R76tbahN!V&tpIR!vuv0eIdhv zaAq9K^+7Qu$0yc`Y8-TP(L|!_ORseWT)xGw86~!c-TRQojxwLBw${CmL7kUi$CJnr z@lum)N-bzab))H_bz<Aaji~c!1Pbm-oXB6`Wt{Aj- zjj4td>k^Z0l}0ools+rzl}#?|;FH6c^FJW~7I(nnrWr%&BaTh~fGP)R;fNIsKFx)e(UA}DeS zyqhRY0z7imEE}Z8u2mQWs2u%Ah(QG>q{5)e6DmhP1Nhg!va9W{?1D5GB(=T+_~5m+ z68i?EyMTNLQ0W939YC`kXg31A&%n4IJg5hcYk*xfaHs)}b>LMUaIFJxYOZw^^3$bH z(M4eXc}UJhMCN5QG9ARHgX9d5l5t&crWIbLe!NUAzfAsome_h6-*+1G<2-WqDtsP9 zE`ZoYkhpNIurg+^a(-PE&0LkuURD1B^>d(M7BtO(=4sG62|C6>*BIy?2A$tQXAkJ? z1Z{0s&COShjh9~=&Knv|8@?QVt>12}U23jDPPNtywby*>s_E#hY4~1SJzDo^@=MXL z#{9*W+?Dp+_3r%jZyz^?YBql~ZvO1vnj6?&8u`68wzWF3zWQ@@ZFXT}X?kaCVsC%+ z;CS%p{QL3Mz!4Ze2II$I`Vjou1q&NsX$h<>fVBm%xdgUXul3#DF4#W;2j@WO-~t?6 z0%)-qDqErUEmW#ruWLYJ4gz!n;d-SH`uZ4Loj_}UsFoINDwL-*J{DO*StwMVUT@gD zE>9V`QNn&Wlt?JlWCal^?z}NwKa@9+j_~;}ax#3W2TGR;(fAu`QZxpoOHsV)xo;;#4g#~WOiaANch2#y!M z+~%5W#2uB$Rh@p3>HBi>8m1@+FZuZhWBN1HoytDR))#lCHkYvZO&kYIa0JPn3HnpI zviTmX8h@qQ@wD+!3Ln=tmAFIH3V)!bG@gRdWQhBZnnN7w> z?C^3<#)izdR|exb?VPgrbY&1CC=zo*GA^fCPx-mb1PgK(EnY{8b%k78#xpZp`9960 zFi8N9Ev>bG!4~HI5c2q_B}C9x459o|0cB7O<|MkdR0M;y-tG2n=Ybd*;?cmMi>eqF zAD?Pg0+riETvM`Va}@Up3PufdkWz_wOW7Z|Q}#(L_K2zOx@_H}!cRQeVtL}S_RP{E zLEzI$kQWb#Qpgl&ticvv*j}8A)UC(YA+WJpVDY|D4>QZE*t5Wv2IFgyx8%Q15B{{0 zGt~Po*YB%1D5?_}^WZhU@aludzsRL@-;5Efn9F+-?`g=%cej?j?uCtV7b2IS*VCv0 z`^Bd1bQ07I{j@Yf$U47t5Tu+(l#s6NzGOV7GFO-VjV;d?Zm$}p$+F88G04ro?`MDe<`D9j=5=hub8*HJ{Z$T(Pd@_d6>yE~>sGq!iXHqx>%YBo~8lBVXQ2 z#G3g#eY(ZI2RMEqBhR(D52i1o_%>sIk^2zBjb5C}C^J}#@08i<#T0QWy`-Zdt+EVY zq0lF|a|hwa{ZUlRo?HQ`<{Bj(>2phpVou)LD-)L;00F3EP$}@ zoDe!qY-Sj9fMV(gB6Na>hpNTjDy`?%&O=K_hvKj6CU)z zthv?XFoxs$tU{TQFLb}YS5u4^%TSQGSD*O)!DCz#S}oo}3zlvnR`LANMYp=uuQCNX zLD&kBPxK>6Pq!mIjx*<21z1R4A7;waPm+nlTZ7+~#2`-qLfLVrMdY(Op4CCOGGfto zfQo@fRh^#7LdjaVypZcL=Hxv(<7`P0f+Z?p9s}1OH6bA)$aPBh4D4{}WiBJ%Fx3bJ zqlhPg8Mu>ps%N^R{yf5@nn#*Ui@K`*SbC(IHKoCll-StJ^L12*-kNn~EL7<^-xPjH+Y_)X5irbTJ1{)^W@zGU z*vxjs5+QU?2Kl?*IO|N1kx_&zage;#yH7-o|Hv-#Gj1I7)-rBFLKpn5a4NHfLR5(d z2F%4GSwHkpvST_7_J=&o^g#ga&go;}n?a_XLS9t68NixK(}nmkA0@rk6Z4W!ky8)# zy6Ci@m|Ns{(QXkzub20KguiaS|FHTKopuIxNpN|Dof5L;=0$=(h0rYP(0D0n3YnVg(yCe0WvykJ)oExaT!(Y*yn z$uM^nCnVtkQJ30g!@R)BHbFL>DOnDqdKpcj|L${VDZ+{st2ak9m6#5{qHqU)5Q%+= z?B95Z{wB*Xtri#V>y>OLv_<~O7Y?(+x<#bm_iC;WwD(SY_j^W>eJ&EQ>P{X*5$D3# zHIS1>Pl$iZSeMs!K-~AV4l}j3YiQmW?OO)k5k0ab%x;_fF(di})#$eYX-QsjhXUPU zB79O479L!MCk3ix>-KEk@TSt~58H+CU3m2EW6^9_P`G z`^3{o%-%VCLi!~P>+>%;ZaR!-ugho@o&^#Eqv$bZe2+Y~x(b=__s%!zH3K^kJhJqY zQTBLf96#g|ynN@LBv*$KrLo?MnPKH(79ZJ1f71(=r#Sd#V{)w(xRcAU=1u;bi*?IZ z#T|T}X1I~qrqn0;ip=l+92fRba|_kyy|e>kmIp)8x00f;AXhaE+nZI0TWdBi z=Y(mEtvKA6=ud`UGW+Wozhbkp(T|v8H#piP-brs6jZ_>41yPfSG6~(y zL9%4}u=wkfCKyYK)=JPB2udou{$A8-L~tTvd`@zlw-KW9!_GEniqNF#acsn}=0)PK zB%5Vm&MLIh;c#2QEke=8IGV6%kR(!9kn+cEa3qaJofd34*+WsMQeoW6mw^?#%%?`C zvDcwCKpVEuNxRtj;YYmb$2R`hJ<{O}%o0|zhG-=!&P*RAuo^BOf0oBM1wy}N9prOwqbE1mBogq|4qiT6^T#)|MbboBEBr(j%Tx@pBtbG;Y z@dYeYF#lXGVX@crbFA+K>!Q^c6WsGe?rNPO>m&i&CcxCV%NOPlSu)A{#

      nVT20hP!Y0 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 d0oYM?In24CHV9u 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

      QSH>`Iu!NZS?u0Xbb5_94j8mgwbm4(UzugV7O z*|7(74rk)giGdMGV>+JnacP0kX;@lmdxoh|TDhu5MGkQm(pD|LI%_F9Ri=6=Jn??9 zakvzE^W~%qm$45<HTwIA=J_=gDib%M6iJ(i`B@Eg#O-c+%I*JWEX-|q;PP!lr zMAIjSN+n-v27C)l_CO^6boRelNw)i*jK%ARBa@g@!Jb zavbVOZI%iMNTpwW&e)Oqbt#pV;W-;a+OcHXJ+o(AL1{Z#X?!^z0;_3r-)_^utL~yQ z>2DvWOUAiL=cG5arpwj1D*Q+~PlZ$cS0W(3f$BFl0g{Gaq$0 zVMZzij98bUC=QU`)U6~3DZsVrOsdtFX-Fu^CX)2qK8b@%R&<-q2PAOU#)oB&^qE%=r2>4uLfR$l@kL_y5xZCg_tr>dI!k4> zz2%8Zzw?$7pCDi^rDaNFU9i#vB(Nc;oVKkTd{QnxVVGP)GzlSn=R&j#MFO*GDzxtx z-&w0riZ9GvrBJzF`82rFrMA+1qEh%t$(2@a7;jlFD7y?rdi!oX*EGJ$?S4_n&$0s| z$UW`6*0{Wb;ylgxYW&fPP}f2+;%ceRlB_3Q*%Q@2YKpH{Yp{OSkkZxa{j4mXsL4eY zod?xc2iF9jl)b90`FUK6gq{??p75+?EIXqKf3@;TC@zcBG+~I(V=SkRt+j3{*J*^W zZtQ2>;7FzwQI?cncDGi2VylhBTGsRNdXBg(Wmm)@46(!4z`6Po!k8Tk&W;YsHmhw| zQ@4336OzK4v#OjEpxwy7`qFD6Cw4pMnmG41KCQ_tw~B$ZrX#mL2#O@Ujy^xAe$9Z@ z@*^{?HgBD{DfFO@naPIry6GoPGl#kJTqlf^DV;m-CGV@-X3D(h7yflUE6pkD&Ek2^ z{MQ~#A+OyWU&{flmR$3iD(V&U+%`M2wmV;|G3D=RBM#ylw7cF6jWTl=Hc%)Hx2y{*}$jh3kFF6$--oQ%?Z*@ykoHSi$L0j)69^=-w(pwBDf@~7 zI|VDxrETO>A9Qt>6i2RKsMYEN79-@O4*(!}Z-e`VctBgyij$9sCY1REMX`+(v6&oT z+34f2fSiCyZDQU|j5q9pxQ>-bWBdD^@*2QrPqU9GMmdNkP!uVv6z?E_ekHOVPJVNljcTjtTR&vBySKGCF zq;z5A*_nnflh$l8X*YzlCf0QTG%BVZ-x@`DI|n9hhY`(=wTEuhEfbDmWoor;x5ZdE z#W9msyd6ur8RHzWhRKaDpvK_t<8+c%Q>LS9DL_9Gqh~Fn80N%LuD&MU+H+&V;&K9M z;r$AF)BpNrxMgFw&E34Yds25{vbRpPpLt3aF*&s1G!i;RBsn!vXEnYt75;4sMPf50 zH_i2EdP!G#C4ZXs&Gg2N{}bH^i<{{Nf$6=($(=gbqtF@j{`47%(#6fp?Ooe6So7yl ztLzHeGvnFQ&{?H~=RfO|&MUZ_&Sq1)+klg{bv#+jL{@}b4HKm5S{(#y7 z%t10x*8=sOiF5nw*c9>+%y?$vmvd|{Z+qF4l)k)sCffX*yI_8$LYW(73cjA_td>K7 z3;{HB4L)+3JqxvB^ET9|>#12uPIGQg5S=FiI)W$3x>Sf<4*Rui!h*$uR_DjlP{Mni zOQqtF%1qKDLL`DnF$74k2(C4P*IQq#<6z@-vS1k(JTM?##F4jE#@E2{!a>~G!jocr zKTUk{e)FPW!;@N3vWFJmi#BoESP`_9_8Q^2g-1<$AytvGO(Ge*CIzgpN=xDjnjfq<1q4=L=TnOJV0L`sdSy=aGgKb3*4EtQWfq z7kgG02MYA-VHZKR6k9?&C$|@9){mbRKF$h($ diff --git a/fosite-example/main.go b/fosite-example/main.go index 232c3a26..5f77baf5 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -12,10 +12,12 @@ import ( "github.com/ory-am/fosite/handler/core/implicit" "github.com/ory-am/fosite/handler/core/owner" "github.com/ory-am/fosite/handler/core/refresh" + "github.com/parnurzeal/gorequest" goauth "golang.org/x/oauth2" "golang.org/x/oauth2/clientcredentials" "log" "net/http" + "net/url" "time" ) @@ -110,209 +112,216 @@ func fositeFactory() OAuth2Provider { } func main() { - http.HandleFunc("/", homeHandler) - http.HandleFunc("/callback", callbackHandler) http.HandleFunc("/auth", authEndpoint) http.HandleFunc("/token", tokenEndpoint) + + http.HandleFunc("/", homeHandler) + http.HandleFunc("/callback", callbackHandler) http.HandleFunc("/client", clientEndpoint) http.HandleFunc("/owner", ownerEndpoint) log.Fatal(http.ListenAndServe(":3846", nil)) } -func clientEndpoint(rw http.ResponseWriter, req *http.Request) { - rw.Write([]byte(fmt.Sprintf(`

      Client Credentials Grant

      `))) - token, err := appClientConf.Token(goauth.NoContext) - if err != nil { - rw.Write([]byte(fmt.Sprintf(`

      I tried to get a token but received an error: %s

      `, err.Error()))) - return - } - rw.Write([]byte(fmt.Sprintf(`

      Awesome, you just received an access token!

      %s

      more info:

      %s

      `, token.AccessToken, token))) - rw.Write([]byte(`
      `)) -} +func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { + ctx := NewContext() + var mySessionData session -func ownerEndpoint(rw http.ResponseWriter, req *http.Request) { - rw.Write([]byte(fmt.Sprintf(`

      Resource Owner Password Credentials Grant

      `))) - req.ParseForm() - if req.Form.Get("username") == "" || req.Form.Get("password") == "" { - rw.Write([]byte(` -
      -
        -
      • - try peter -
      • -
      • - try foobar
        -
      • -
      • - -
      • -
      -
      -`)) - rw.Write([]byte(`

      Go back

      `)) + accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) + if err != nil { + log.Printf("Error occurred in NewAccessRequest: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) + oauth2.WriteAccessError(rw, accessRequest, err) return } - token, err := clientConf.PasswordCredentialsToken(goauth.NoContext, req.Form.Get("username"), req.Form.Get("password")) + response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) if err != nil { - rw.Write([]byte(fmt.Sprintf(`

      I tried to get a token but received an error: %s

      `, err.Error()))) - rw.Write([]byte(`

      Go back

      `)) + log.Printf("Error occurred in NewAccessResponse: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) + oauth2.WriteAccessError(rw, accessRequest, err) return } - rw.Write([]byte(fmt.Sprintf(`

      Awesome, you just received an access token!

      %s

      more info:

      %s

      `, token.AccessToken, token))) - rw.Write([]byte(`

      Go back

      `)) + + oauth2.WriteAccessResponse(rw, accessRequest, response) } -func tokenEndpoint(rw http.ResponseWriter, req *http.Request) { +func authEndpoint(rw http.ResponseWriter, req *http.Request) { ctx := NewContext() - var mySessionData session - accessRequest, err := oauth2.NewAccessRequest(ctx, req, &mySessionData) + ar, err := oauth2.NewAuthorizeRequest(ctx, req) if err != nil { - oauth2.WriteAccessError(rw, accessRequest, err) + log.Printf("Error occurred in NewAuthorizeRequest: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) + oauth2.WriteAuthorizeError(rw, ar, err) return } - response, err := oauth2.NewAccessResponse(ctx, req, accessRequest, &mySessionData) + if req.Form.Get("username") != "peter" { + rw.Header().Set("Content-Type", "text/html; charset=utf-8") + rw.Write([]byte(`

      Login page

      `)) + rw.Write([]byte(` +

      Howdy! This is the log in page. For this example, it is enough to supply the username.

      +
      + try peter
      + +
      + `)) + return + } + + // Normally, this would be the place where you would check if the user is logged in and gives his consent. + // For this test, let's assume that the user exists, is logged in, and gives his consent... + + sess := &session{User: "peter"} + response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, sess) if err != nil { - oauth2.WriteAccessError(rw, accessRequest, err) + log.Printf("Error occurred in NewAuthorizeResponse: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) + oauth2.WriteAuthorizeError(rw, ar, err) return } - oauth2.WriteAccessResponse(rw, accessRequest, response) + oauth2.WriteAuthorizeResponse(rw, ar, response) } +// +// some views for easier navigation +// + func homeHandler(rw http.ResponseWriter, req *http.Request) { rw.Write([]byte(fmt.Sprintf(` -

      You can obtain an access token using various methods

      - -`, +

      You can obtain an access token using various methods

      + `, clientConf.AuthCodeURL("some-random-state-foobar"), "http://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", + clientConf.AuthCodeURL("some-random-state-foobar"), "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=http://localhost:3846/callback", ))) } func callbackHandler(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(`

      Callback site

      Go back`)) rw.Header().Set("Content-Type", "text/html; charset=utf-8") if req.URL.Query().Get("error") != "" { - rw.Write([]byte(fmt.Sprintf(` -

      Error!

      -Error: %s
      -Description: %s
      -
      -Go back -`, + rw.Write([]byte(fmt.Sprintf(`

      Error!

      + Error: %s
      + Description: %s
      +
      `, req.URL.Query().Get("error"), req.URL.Query().Get("error_description"), ))) return } - rw.Write([]byte(fmt.Sprintf(` -

      Amazing! You just got an authorize code!: %s

      -

      Click here to return to the front page

      -`, - req.URL.Query().Get("code"), - ))) + + if req.URL.Query().Get("refresh") != "" { + _, body, errs := gorequest.New().Post(clientConf.Endpoint.TokenURL).SetBasicAuth(clientConf.ClientID, clientConf.ClientSecret).SendString(url.Values{ + "grant_type": {"refresh_token"}, + "refresh_token": {req.URL.Query().Get("refresh")}, + "scope": {"fosite"}, + }.Encode()).End() + if len(errs) > 0 { + rw.Write([]byte(fmt.Sprintf(`

      Could not refresh token %s

      `, errs))) + return + } + rw.Write([]byte(fmt.Sprintf(`

      Got a response from the refresh grant:
      %s

      `, body))) + return + } if req.URL.Query().Get("code") == "" { - rw.Write([]byte(fmt.Sprintf(` -

      Could not find the authorize code. If you've used the implicit grant, check the browser location bar for the -access token (the server side does not have access to url fragments)

      -`, + rw.Write([]byte(fmt.Sprintf(`

      Could not find the authorize code. If you've used the implicit grant, check the + browser location bar for the + access token (the server side does not have access to url fragments) +

      `, ))) - return } + rw.Write([]byte(fmt.Sprintf(`

      Amazing! You just got an authorize code!:
      %s

      +

      Click here to return to the front page

      `, + req.URL.Query().Get("code"), + ))) + token, err := clientConf.Exchange(goauth.NoContext, req.URL.Query().Get("code")) if err != nil { - rw.Write([]byte(fmt.Sprintf(` -

      - I tried to exchange the authorize code for an access token but it did not work but got error: %s -

      -`, - err.Error(), - ))) + rw.Write([]byte(fmt.Sprintf(`

      I tried to exchange the authorize code for an access token but it did not work but got error: %s

      `, err.Error()))) return } - rw.Write([]byte(fmt.Sprintf(` -

      Cool! You are now a proud token owner.
      -

        -
      • - Access token: %s
        -
      • -
      • - Refresh token: %s (click to refresh here)
        -
      • -
      • - Extra info: %s
        -
      • -
      -`, + rw.Write([]byte(fmt.Sprintf(`

      Cool! You are now a proud token owner.
      +

        +
      • + Access token:
        + %s +
      • +
      • + Refresh token (click here to use it):
        + %s +
      • +
      • + Extra info:
        + %s +
      • +
      `, token.AccessToken, + "?refresh="+url.QueryEscape(token.RefreshToken), token.RefreshToken, - "", token, ))) } -func authEndpoint(rw http.ResponseWriter, req *http.Request) { - ctx := NewContext() - - ar, err := oauth2.NewAuthorizeRequest(ctx, req) +func clientEndpoint(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(fmt.Sprintf(`

      Client Credentials Grant

      `))) + token, err := appClientConf.Token(goauth.NoContext) if err != nil { - log.Printf("Error occurred in authorize request part: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) - oauth2.WriteAuthorizeError(rw, ar, err) + rw.Write([]byte(fmt.Sprintf(`

      I tried to get a token but received an error: %s

      `, err.Error()))) return } + rw.Write([]byte(fmt.Sprintf(`

      Awesome, you just received an access token!

      %s

      more info:

      %s

      `, token.AccessToken, token))) + rw.Write([]byte(`

      Go back

      `)) +} - if req.Form.Get("username") != "peter" { - rw.Header().Set("Content-Type", "text/html; charset=utf-8") - rw.Write([]byte(` -

      - Howdy! This is the log in page. For this example, it is enough to supply the username. -

      -
      - - -
      -ps: I heard that user "peter" is a valid username so why not try his name ;) -`, - )) +func ownerEndpoint(rw http.ResponseWriter, req *http.Request) { + rw.Write([]byte(fmt.Sprintf(`

      Resource Owner Password Credentials Grant

      `))) + req.ParseForm() + if req.Form.Get("username") == "" || req.Form.Get("password") == "" { + rw.Write([]byte(`
      +
        +
      • + try peter +
      • +
      • + try foobar
        +
      • +
      • + +
      • +
      +
      `)) + rw.Write([]byte(`

      Go back

      `)) return } - // Normally, this would be the place where you would check if the user is logged in and gives his consent. - // For this test, let's assume that the user exists, is logged in, and gives his consent... - - sess := &session{User: "peter"} - response, err := oauth2.NewAuthorizeResponse(ctx, req, ar, sess) + token, err := clientConf.PasswordCredentialsToken(goauth.NoContext, req.Form.Get("username"), req.Form.Get("password")) if err != nil { - log.Printf("Error occurred in authorize response part: %s\nStack: \n%s", err, err.(*errors.Error).ErrorStack()) - oauth2.WriteAuthorizeError(rw, ar, err) + rw.Write([]byte(fmt.Sprintf(`

      I tried to get a token but received an error: %s

      `, err.Error()))) + rw.Write([]byte(`

      Go back

      `)) return } - - oauth2.WriteAuthorizeResponse(rw, ar, response) + rw.Write([]byte(fmt.Sprintf(`

      Awesome, you just received an access token!

      %s

      more info:

      %s

      `, token.AccessToken, token))) + rw.Write([]byte(`

      Go back

      `)) } diff --git a/handler/core/owner/client.go b/handler/core/owner/client.go index f425f491..b739121c 100644 --- a/handler/core/owner/client.go +++ b/handler/core/owner/client.go @@ -35,11 +35,11 @@ func (c *ResourceOwnerPasswordCredentialsGrantHandler) ValidateTokenEndpointRequ username := req.PostForm.Get("username") password := req.PostForm.Get("password") if username == "" || password == "" { - return fosite.ErrInvalidRequest + return errors.New(fosite.ErrInvalidRequest) } else if err := c.Store.DoCredentialsAuthenticate(username, password); err == pkg.ErrNotFound { - return fosite.ErrInvalidRequest + return errors.New(fosite.ErrInvalidRequest) } else if err != nil { - return fosite.ErrServerError + return errors.New(fosite.ErrServerError) } request.SetGrantTypeHandled("password") diff --git a/handler/core/refresh/refresh.go b/handler/core/refresh/refresh.go index 3aa48a01..910aaf27 100644 --- a/handler/core/refresh/refresh.go +++ b/handler/core/refresh/refresh.go @@ -36,20 +36,20 @@ func (c *RefreshTokenGrantHandler) ValidateTokenEndpointRequest(_ context.Contex challenge := new(enigma.Challenge) challenge.FromString(req.Form.Get("refresh_token")) if err := c.Enigma.ValidateChallenge(request.GetClient().GetHashedSecret(), challenge); err != nil { - return fosite.ErrInvalidRequest + return errors.New(fosite.ErrInvalidRequest) } var ts core.TokenSession ar, err := c.Store.GetRefreshTokenSession(challenge.Signature, &ts) if err == pkg.ErrNotFound { - return fosite.ErrInvalidRequest + return errors.New(fosite.ErrInvalidRequest) } else if err != nil { - return fosite.ErrServerError + return errors.New(fosite.ErrServerError) } // The authorization server MUST ... and ensure that the refresh token was issued to the authenticated client if ar.GetClient().GetID() != request.GetClient().GetID() { - return fosite.ErrInvalidRequest + return errors.New(fosite.ErrInvalidRequest) } request.SetGrantTypeHandled("refresh_token") From d65b45a192cd3a2073f8e6118c005ac93f0bb974 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 00:39:58 +0100 Subject: [PATCH 42/47] authorize: enforce https for all redirect endpoints except localhost --- CONTRIBUTING.md | 2 +- LICENSE | 2 +- README.md | 35 +++++++++++++-------------- authorize_error_test.go | 8 +++---- authorize_helper.go | 13 +++++++++- authorize_helper_test.go | 40 +++++++++++++++++++++---------- authorize_request_handler_test.go | 24 +++++++++---------- authorize_request_test.go | 16 ++++++------- authorize_write_test.go | 16 ++++++------- fosite-example/main.go | 14 +++++------ 10 files changed, 98 insertions(+), 72 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5ca1e5ea..e869527c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -95,7 +95,7 @@ For legal reasons, no anonymous or pseudonymous contributions are accepted ([con To make a pull request, you will need a GitHub account; if you are unclear on this process, see GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo) and [pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at the `master` branch. Before creating a pull request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. -1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. +1. [Rebase](https://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. 1. Run the full project test suite with the `go test ./...` (or equivalent) command and confirm that it passes. 1. Run `gofmt -s` (if the project is written in Go). 1. Accept the Developer's Certificate of Origin on all commits (see above). diff --git a/LICENSE b/LICENSE index 7f66ed3c..d46de6ea 100644 --- a/LICENSE +++ b/LICENSE @@ -192,7 +192,7 @@ Apache License you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/README.md b/README.md index 60e9a997..dfe00252 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Be aware that "go get github.com/ory-am/fosite" will give you the master branch, Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. These Standards have been reviewed during the development of Fosite: -* [OAuth 2.0 Multiple Response Type Encoding Practices](http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html) -* [OpenID Connect Core 1.0](http://openid.net/specs/openid-connect-core-1_0.html) +* [OAuth 2.0 Multiple Response Type Encoding Practices](https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html) +* [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.html) * [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) * [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819) @@ -43,16 +43,9 @@ These Standards have been reviewed during the development of Fosite: ## Motivation -Why write another OAuth2 server side library for Go Lang? - -Other libraries are perfect for a non-critical set ups, but [fail](https://github.com/RangelReale/osin/issues/107) -to comply with advanced security requirements. Additionally, the frameworks we analyzed did not support extension -of the OAuth2 protocol easily. But OAuth2 is an extensible framework. Your OAuth2 should as well. -This is unfortunately not an issue exclusive to Go's eco system but to many others as well. - -Fosite was written because [Hydra](https://github.com/ory-am/hydra) required a more secure and extensible OAuth2 library -then the one it was using. We quickly realized, that OAuth2 implementations out there are *not secure* nor *extensible, -so we decided to write one *that is*. +Fosite was written because our OAuth2 and OpenID Connect service [Hydra](https://github.com/ory-am/hydra) +required a secure and extensible OAuth2 library. We had to realize that nothing matching our requirements +was out there, so we decided to build it ourselves. ## A word on quality @@ -86,6 +79,9 @@ of things we implemented in Fosite: * [Binding of Authorization "code" to "redirect_uri"](https://tools.ietf.org/html/rfc6819#section-5.2.4.6) * [Opaque access tokens](https://tools.ietf.org/html/rfc6749#section-1.4) * [Opaque refresh tokens](https://tools.ietf.org/html/rfc6749#section-1.5) +* [Ensure Confidentiality of Requests](https://tools.ietf.org/html/rfc6819#section-5.1.1) + Fosite ensures that redirect URIs use https **except localhost** but you need to implement + TLS for the token and auth endpoints yourself. Not implemented yet: * [Use of Asymmetric Cryptography](https://tools.ietf.org/html/rfc6819#section-5.1.4.1.5) - enigma should use asymmetric @@ -132,6 +128,9 @@ This section is WIP and we welcome discussions via PRs or in the issues. ### See it in action +The example does not have nice visuals but it should give you an idea of what you can do with Fosite and a few lines +of code. + ![Authorize Code Grant](docs/authorize-code-grant.gif) You can run this minimalistic example by doing @@ -142,7 +141,7 @@ go install github.com/ory-am/fosite/fosite-example fosite-example ``` -There should be a server listening on [localhost:3846](http://localhost:3846/). You can check out the example's +There should be a server listening on [localhost:3846](https://localhost:3846/). You can check out the example's source code [here](/fosite-example/main.go). ### Installation @@ -156,7 +155,7 @@ Fosite is being shipped through gopkg.in so new updates don't break your code. go get gopkg.in/ory-am/fosite.v{X}/... ``` -To see a full list of available versions check the [tags](https://github.com/ory-am/fosite/tags) page. If you want +To see a full list of available versions check [gopkg.in/ory-am/fosite.v0](https://gopkg.in/ory-am/fosite.v0). If you want to use api version 2 for example (version 2 does not exist yet), do: ``` @@ -357,13 +356,13 @@ the `AuthorizeEndpointHandler` API. You can find a complete list of handlers inside the [handler directory](). A short list is documented here: -* *github.com/ory-am/fosite/handler/core/explicit.AuthorizeExplicitEndpointHandler:* implements the +* `github.com/ory-am/fosite/handler/core/explicit.AuthorizeExplicitEndpointHandler` implements the [Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1) -* *github.com/ory-am/fosite/handler/core/implicit.AuthorizeImplicitEndpointHandler:* implements the +* `github.com/ory-am/fosite/handler/core/implicit.AuthorizeImplicitEndpointHandler` implements the [Implicit Grant](https://tools.ietf.org/html/rfc6749#section-4.2) -* *github.com/ory-am/fosite/handler/core/token/owner.TokenROPasswordCredentialsEndpointHandler:* implements the +* `github.com/ory-am/fosite/handler/core/token/owner.TokenROPasswordCredentialsEndpointHandler` implements the [Resource Owner Password Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.3) -* *github.com/ory-am/fosite/handler/core/token/client.TokenClientCredentialsEndpointHandler:* implements the +* `github.com/ory-am/fosite/handler/core/token/client.TokenClientCredentialsEndpointHandler` implements the [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4) ### Replaceable storage diff --git a/authorize_error_test.go b/authorize_error_test.go index 231fe8f4..926163ac 100644 --- a/authorize_error_test.go +++ b/authorize_error_test.go @@ -31,8 +31,8 @@ func TestWriteAuthorizeError(t *testing.T) { defer ctrl.Finish() var urls = []string{ - "http://foobar.com/", - "http://foobar.com/?foo=bar", + "https://foobar.com/", + "https://foobar.com/?foo=bar", } var purls = []*url.URL{} for _, u := range urls { @@ -68,7 +68,7 @@ func TestWriteAuthorizeError(t *testing.T) { rw.EXPECT().WriteHeader(http.StatusFound) }, checkHeader: func(k int) { - a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed") + a, _ := url.Parse("https://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed") b, _ := url.Parse(header.Get("Location")) assert.Equal(t, a, b, "%d", k) }, @@ -82,7 +82,7 @@ func TestWriteAuthorizeError(t *testing.T) { rw.EXPECT().WriteHeader(http.StatusFound) }, checkHeader: func(k int) { - a, _ := url.Parse("http://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed&foo=bar") + a, _ := url.Parse("https://foobar.com/?error=invalid_request&error_description=The+request+is+missing+a+required+parameter%2C+includes+an+invalid+parameter+value%2C+includes+a+parameter+more+than+once%2C+or+is+otherwise+malformed&foo=bar") b, _ := url.Parse(header.Get("Location")) assert.Equal(t, a, b, "%d", k) }, diff --git a/authorize_helper.go b/authorize_helper.go index e9a45064..20aa6acb 100644 --- a/authorize_helper.go +++ b/authorize_helper.go @@ -5,6 +5,7 @@ import ( "github.com/go-errors/errors" . "github.com/ory-am/fosite/client" "net/url" + "strings" ) // GetRedirectURIFromRequestValues extracts the redirect_uri from values but does not do any sort of validation. @@ -29,7 +30,7 @@ func GetRedirectURIFromRequestValues(values url.Values) (string, error) { // uri validation. // // Considered specifications -// * http://tools.ietf.org/html/rfc6749#section-3.1.2.3 +// * https://tools.ietf.org/html/rfc6749#section-3.1.2.3 // If multiple redirection URIs have been registered, if only part of // the redirection URI has been registered, or if no redirection URI has // been registered, the client MUST include a redirection URI with the @@ -80,6 +81,7 @@ func MatchRedirectURIWithClientRedirectURIs(rawurl string, client Client) (*url. // * The endpoint URI MUST NOT include a fragment component. // * https://tools.ietf.org/html/rfc3986#section-4.3 // absolute-URI = scheme ":" hier-part [ "?" query ] +// * https://tools.ietf.org/html/rfc6819#section-5.1.1 func IsValidRedirectURI(redirectURI *url.URL) bool { // We need to explicitly check for a scheme if !govalidator.IsRequestURL(redirectURI.String()) { @@ -91,5 +93,14 @@ func IsValidRedirectURI(redirectURI *url.URL) bool { return false } + if redirectURI.Scheme != "https" && !isLocalhost(redirectURI) { + return false + } + return true } + +func isLocalhost(redirectURI *url.URL) bool { + host := strings.Split(redirectURI.Host, ":")[0] + return host == "localhost" || host == "127.0.0.1" +} diff --git a/authorize_helper_test.go b/authorize_helper_test.go index 76f48f69..f7a540b8 100644 --- a/authorize_helper_test.go +++ b/authorize_helper_test.go @@ -8,6 +8,22 @@ import ( "testing" ) +func TestIsLocalhost(t *testing.T) { + for k, c := range []struct { + expect bool + rawurl string + }{ + {expect: false, rawurl: "https://foo.bar"}, + {expect: true, rawurl: "https://localhost"}, + {expect: true, rawurl: "https://localhost:1234"}, + {expect: true, rawurl: "https://127.0.0.1:1234"}, + {expect: true, rawurl: "https://127.0.0.1"}, + } { + u, _ := url.Parse(c.rawurl) + assert.Equal(t, c.expect, isLocalhost(u), "case %d", k) + } +} + // Test for // * https://tools.ietf.org/html/rfc6749#section-3.1.2 // The endpoint URI MAY include an @@ -21,8 +37,8 @@ func TestGetRedirectURI(t *testing.T) { expected string }{ {in: "", isError: false, expected: ""}, - {in: "http://google.com/", isError: false, expected: "http://google.com/"}, - {in: "http://google.com/?foo=bar%20foo+baz", isError: false, expected: "http://google.com/?foo=bar foo baz"}, + {in: "https://google.com/", isError: false, expected: "https://google.com/"}, + {in: "https://google.com/?foo=bar%20foo+baz", isError: false, expected: "https://google.com/?foo=bar foo baz"}, } { values := url.Values{} values.Set("redirect_uri", c.in) @@ -55,19 +71,19 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { }{ { client: &SecureClient{RedirectURIs: []string{""}}, - url: "http://foo.com/cb", + url: "https://foo.com/cb", isError: true, }, { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://foo.com/cb", + client: &SecureClient{RedirectURIs: []string{"https://bar.com/cb"}}, + url: "https://foo.com/cb", isError: true, }, { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, + client: &SecureClient{RedirectURIs: []string{"https://bar.com/cb"}}, url: "", isError: false, - expected: "http://bar.com/cb", + expected: "https://bar.com/cb", }, { client: &SecureClient{RedirectURIs: []string{""}}, @@ -75,14 +91,14 @@ func TestDoesClientWhiteListRedirect(t *testing.T) { isError: true, }, { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://bar.com/cb", + client: &SecureClient{RedirectURIs: []string{"https://bar.com/cb"}}, + url: "https://bar.com/cb", isError: false, - expected: "http://bar.com/cb", + expected: "https://bar.com/cb", }, { - client: &SecureClient{RedirectURIs: []string{"http://bar.com/cb"}}, - url: "http://bar.com/cb123", + client: &SecureClient{RedirectURIs: []string{"https://bar.com/cb"}}, + url: "https://bar.com/cb123", isError: true, }, } { diff --git a/authorize_request_handler_test.go b/authorize_request_handler_test.go index d02c2075..ffc58c6a 100644 --- a/authorize_request_handler_test.go +++ b/authorize_request_handler_test.go @@ -25,7 +25,7 @@ func TestNewAuthorizeRequest(t *testing.T) { store := NewMockStorage(ctrl) defer ctrl.Finish() - redir, _ := url.Parse("http://foo.bar/cb") + redir, _ := url.Parse("https://foo.bar/cb") for k, c := range []struct { desc string conf *Fosite @@ -59,7 +59,7 @@ func TestNewAuthorizeRequest(t *testing.T) { { desc: "invalid client fails", conf: &Fosite{Store: store}, - query: url.Values{"redirect_uri": []string{"http://foo.bar/cb"}}, + query: url.Values{"redirect_uri": []string{"https://foo.bar/cb"}}, expectedError: ErrInvalidClient, mock: func() { store.EXPECT().GetClient(gomock.Any()).Return(nil, errors.New("foo")) @@ -95,7 +95,7 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "client and request redirects mismatch", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, + "redirect_uri": []string{"https://foo.bar/cb"}, "client_id": []string{"1234"}, }, expectedError: ErrInvalidRequest, @@ -108,13 +108,13 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "no state", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": []string{"http://foo.bar/cb"}, + "redirect_uri": []string{"https://foo.bar/cb"}, "client_id": []string{"1234"}, "response_type": []string{"code"}, }, expectedError: ErrInvalidState, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) }, }, /* short state */ @@ -122,14 +122,14 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "short state", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": {"http://foo.bar/cb"}, + "redirect_uri": {"https://foo.bar/cb"}, "client_id": {"1234"}, "response_type": {"code"}, "state": {"short"}, }, expectedError: ErrInvalidState, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) }, }, /* success case */ @@ -137,14 +137,14 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "should pass", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": {"http://foo.bar/cb"}, + "redirect_uri": {"https://foo.bar/cb"}, "client_id": {"1234"}, "response_type": {"code token"}, "state": {"strong-state"}, "scope": {"foo bar"}, }, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) }, expectedError: ErrInvalidScope, }, @@ -153,18 +153,18 @@ func TestNewAuthorizeRequest(t *testing.T) { desc: "should pass", conf: &Fosite{Store: store}, query: url.Values{ - "redirect_uri": {"http://foo.bar/cb"}, + "redirect_uri": {"https://foo.bar/cb"}, "client_id": {"1234"}, "response_type": {"code token"}, "state": {"strong-state"}, "scope": {DefaultRequiredScopeName + " foo bar"}, }, mock: func() { - store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, nil) + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) }, expect: &AuthorizeRequest{ RedirectURI: redir, - Client: &SecureClient{RedirectURIs: []string{"http://foo.bar/cb"}}, + Client: &SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, ResponseTypes: []string{"code", "token"}, State: "strong-state", Scopes: []string{DefaultRequiredScopeName, "foo", "bar"}, diff --git a/authorize_request_test.go b/authorize_request_test.go index 760834f6..89e5bebd 100644 --- a/authorize_request_test.go +++ b/authorize_request_test.go @@ -28,14 +28,14 @@ func TestAuthorizeRequest(t *testing.T) { }, { ar: &AuthorizeRequest{ - RedirectURI: urlparse("http://foobar"), + RedirectURI: urlparse("https://foobar"), }, isRedirValid: false, }, { ar: &AuthorizeRequest{ Client: &client.SecureClient{RedirectURIs: []string{""}}, - RedirectURI: urlparse("http://foobar"), + RedirectURI: urlparse("https://foobar"), }, isRedirValid: false, }, @@ -55,22 +55,22 @@ func TestAuthorizeRequest(t *testing.T) { }, { ar: &AuthorizeRequest{ - Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com#123"}}, - RedirectURI: urlparse("http://foobar.com#123"), + Client: &client.SecureClient{RedirectURIs: []string{"https://foobar.com#123"}}, + RedirectURI: urlparse("https://foobar.com#123"), }, isRedirValid: false, }, { ar: &AuthorizeRequest{ - Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com"}}, - RedirectURI: urlparse("http://foobar.com#123"), + Client: &client.SecureClient{RedirectURIs: []string{"https://foobar.com"}}, + RedirectURI: urlparse("https://foobar.com#123"), }, isRedirValid: false, }, { ar: &AuthorizeRequest{ - Client: &client.SecureClient{RedirectURIs: []string{"http://foobar.com/cb"}}, - RedirectURI: urlparse("http://foobar.com/cb"), + Client: &client.SecureClient{RedirectURIs: []string{"https://foobar.com/cb"}}, + RedirectURI: urlparse("https://foobar.com/cb"), RequestedAt: time.Now(), ResponseTypes: []string{"foo", "bar"}, Scopes: []string{"foo", "bar"}, diff --git a/authorize_write_test.go b/authorize_write_test.go index 274d8811..2e9fefdf 100644 --- a/authorize_write_test.go +++ b/authorize_write_test.go @@ -25,7 +25,7 @@ func TestWriteAuthorizeResponse(t *testing.T) { }{ { setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") + redir, _ := url.Parse("https://foobar.com/?foo=bar") ar.EXPECT().GetRedirectURI().Return(redir) resp.EXPECT().GetFragment().Return(url.Values{}) resp.EXPECT().GetHeader().Return(http.Header{}) @@ -36,13 +36,13 @@ func TestWriteAuthorizeResponse(t *testing.T) { }, expect: func() { assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar"}, + "Location": []string{"https://foobar.com/?foo=bar"}, }, header) }, }, { setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") + redir, _ := url.Parse("https://foobar.com/?foo=bar") ar.EXPECT().GetRedirectURI().Return(redir) resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) resp.EXPECT().GetHeader().Return(http.Header{}) @@ -53,13 +53,13 @@ func TestWriteAuthorizeResponse(t *testing.T) { }, expect: func() { assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?foo=bar#bar=baz"}, + "Location": []string{"https://foobar.com/?foo=bar#bar=baz"}, }, header) }, }, { setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") + redir, _ := url.Parse("https://foobar.com/?foo=bar") ar.EXPECT().GetRedirectURI().Return(redir) resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) resp.EXPECT().GetHeader().Return(http.Header{}) @@ -70,13 +70,13 @@ func TestWriteAuthorizeResponse(t *testing.T) { }, expect: func() { assert.Equal(t, http.Header{ - "Location": []string{"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + "Location": []string{"https://foobar.com/?bar=baz&foo=bar#bar=baz"}, }, header) }, }, { setup: func() { - redir, _ := url.Parse("http://foobar.com/?foo=bar") + redir, _ := url.Parse("https://foobar.com/?foo=bar") ar.EXPECT().GetRedirectURI().Return(redir) resp.EXPECT().GetFragment().Return(url.Values{"bar": {"baz"}}) resp.EXPECT().GetHeader().Return(http.Header{"X-Bar": {"baz"}}) @@ -88,7 +88,7 @@ func TestWriteAuthorizeResponse(t *testing.T) { expect: func() { assert.Equal(t, http.Header{ "X-Bar": {"baz"}, - "Location": {"http://foobar.com/?bar=baz&foo=bar#bar=baz"}, + "Location": {"https://foobar.com/?bar=baz&foo=bar#bar=baz"}, }, header) }, }, diff --git a/fosite-example/main.go b/fosite-example/main.go index 5f77baf5..6a0689b1 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -26,7 +26,7 @@ var store = &internal.Store{ "my-client": &client.SecureClient{ ID: "my-client", Secret: []byte(`$2a$10$IxMdI6d.LIRZPpSfEwNoeu4rY3FhDREsxFJXikcgdRRAStxUlsuEO`), // = "foobar" - RedirectURIs: []string{"http://localhost:3846/callback"}, + RedirectURIs: []string{"https://localhost:3846/callback"}, }, }, Users: map[string]internal.UserRelation{ @@ -44,18 +44,18 @@ var oauth2 OAuth2Provider = fositeFactory() var clientConf = goauth.Config{ ClientID: "my-client", ClientSecret: "foobar", - RedirectURL: "http://localhost:3846/callback", + RedirectURL: "https://localhost:3846/callback", Scopes: []string{"fosite"}, Endpoint: goauth.Endpoint{ - TokenURL: "http://localhost:3846/token", - AuthURL: "http://localhost:3846/auth", + TokenURL: "https://localhost:3846/token", + AuthURL: "https://localhost:3846/auth", }, } var appClientConf = clientcredentials.Config{ ClientID: "my-client", ClientSecret: "foobar", Scopes: []string{"fosite"}, - TokenURL: "http://localhost:3846/token", + TokenURL: "https://localhost:3846/token", } type session struct { @@ -208,9 +208,9 @@ func homeHandler(rw http.ResponseWriter, req *http.Request) { `, clientConf.AuthCodeURL("some-random-state-foobar"), - "http://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", + "https://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", clientConf.AuthCodeURL("some-random-state-foobar"), - "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=http://localhost:3846/callback", + "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=https://localhost:3846/callback", ))) } From e9affb77442c46fb4647c9a22c1a5eb60945d21d Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 10:16:08 +0100 Subject: [PATCH 43/47] core handlers: added tests --- handler/core/client/client_test.go | 113 +++++++++++++++ handler/core/owner/{client.go => owner.go} | 0 handler/core/owner/owner_test.go | 147 +++++++++++++++++++ handler/core/refresh/refresh_test.go | 160 +++++++++++++++++++++ handler/oidc/storage.go | 2 - 5 files changed, 420 insertions(+), 2 deletions(-) create mode 100644 handler/core/client/client_test.go rename handler/core/owner/{client.go => owner.go} (100%) create mode 100644 handler/core/owner/owner_test.go create mode 100644 handler/core/refresh/refresh_test.go diff --git a/handler/core/client/client_test.go b/handler/core/client/client_test.go new file mode 100644 index 00000000..74abcc23 --- /dev/null +++ b/handler/core/client/client_test.go @@ -0,0 +1,113 @@ +package client + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "testing" + "time" +) + +func TestValidateTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockClientCredentialsGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + defer ctrl.Finish() + + h := ClientCredentialsGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("client_credentials") + areq.EXPECT().SetGrantTypeHandled("client_credentials") + }, + }, + } { + c.mock() + err := h.ValidateTokenEndpointRequest(nil, c.req, areq, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} + +func HandleTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockClientCredentialsGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + aresp := internal.NewMockAccessResponder(ctrl) + //mockcl := internal.NewMockClient(ctrl) + defer ctrl.Finish() + + h := ClientCredentialsGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("client_credentials") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("client_credentials") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("client_credentials") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + + aresp.EXPECT().SetAccessToken(".") + aresp.EXPECT().SetTokenType("bearer") + aresp.EXPECT().SetExtra("expires_in", gomock.Any()) + aresp.EXPECT().SetExtra("scope", gomock.Any()) + }, + }, + } { + c.mock() + err := h.HandleTokenEndpointRequest(nil, c.req, areq, aresp, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/core/owner/client.go b/handler/core/owner/owner.go similarity index 100% rename from handler/core/owner/client.go rename to handler/core/owner/owner.go diff --git a/handler/core/owner/owner_test.go b/handler/core/owner/owner_test.go new file mode 100644 index 00000000..a0201b38 --- /dev/null +++ b/handler/core/owner/owner_test.go @@ -0,0 +1,147 @@ +package owner + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" + "time" +) + +func TestValidateTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockResourceOwnerPasswordCredentialsGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + defer ctrl.Finish() + + h := ResourceOwnerPasswordCredentialsGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + }, + { + req: &http.Request{PostForm: url.Values{"username": {"peter"}}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{"password": {"pan"}}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{"username": {"peter"}, "password": {"pan"}}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + store.EXPECT().DoCredentialsAuthenticate("peter", "pan").Return(pkg.ErrNotFound) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{"username": {"peter"}, "password": {"pan"}}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + store.EXPECT().DoCredentialsAuthenticate("peter", "pan").Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{"username": {"peter"}, "password": {"pan"}}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + store.EXPECT().DoCredentialsAuthenticate("peter", "pan").Return(nil) + areq.EXPECT().SetGrantTypeHandled("password") + }, + }, + } { + c.mock() + err := h.ValidateTokenEndpointRequest(nil, c.req, areq, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} + +func TestHandleTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockResourceOwnerPasswordCredentialsGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + aresp := internal.NewMockAccessResponder(ctrl) + //mockcl := internal.NewMockClient(ctrl) + defer ctrl.Finish() + + h := ResourceOwnerPasswordCredentialsGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + + aresp.EXPECT().SetAccessToken(".") + aresp.EXPECT().SetTokenType("bearer") + aresp.EXPECT().SetExtra("expires_in", gomock.Any()) + aresp.EXPECT().SetExtra("scope", gomock.Any()) + areq.EXPECT().GetGrantedScopes() + }, + }, + } { + c.mock() + err := h.HandleTokenEndpointRequest(nil, c.req, areq, aresp, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/core/refresh/refresh_test.go b/handler/core/refresh/refresh_test.go new file mode 100644 index 00000000..4beb077f --- /dev/null +++ b/handler/core/refresh/refresh_test.go @@ -0,0 +1,160 @@ +package refresh + +import ( + "github.com/go-errors/errors" + "github.com/golang/mock/gomock" + "github.com/ory-am/common/pkg" + "github.com/ory-am/fosite" + "github.com/ory-am/fosite/client" + "github.com/ory-am/fosite/enigma" + "github.com/ory-am/fosite/internal" + "github.com/stretchr/testify/assert" + "net/http" + "net/url" + "testing" + "time" +) + +func TestValidateTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockRefreshTokenGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + defer ctrl.Finish() + + h := RefreshTokenGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetRefreshTokenSession(gomock.Any(), gomock.Any()).Return(nil, pkg.ErrNotFound) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetRefreshTokenSession(gomock.Any(), gomock.Any()).Return(nil, errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + areq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetRefreshTokenSession(gomock.Any(), gomock.Any()).Return(&fosite.AccessRequest{Client: &client.SecureClient{ID: ""}}, nil) + }, + expectErr: fosite.ErrInvalidRequest, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + areq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + areq.EXPECT().GetClient().Return(&client.SecureClient{ID: "foo"}) + chgen.EXPECT().ValidateChallenge(gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().GetRefreshTokenSession(gomock.Any(), gomock.Any()).Return(&fosite.AccessRequest{Client: &client.SecureClient{ID: "foo"}}, nil) + areq.EXPECT().SetGrantTypeHandled("refresh_token") + }, + }, + } { + c.mock() + err := h.ValidateTokenEndpointRequest(nil, c.req, areq, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} + +func T123estHandleTokenEndpointRequest(t *testing.T) { + ctrl := gomock.NewController(t) + store := internal.NewMockRefreshTokenGrantStorage(ctrl) + chgen := internal.NewMockEnigma(ctrl) + areq := internal.NewMockAccessRequester(ctrl) + aresp := internal.NewMockAccessResponder(ctrl) + //mockcl := internal.NewMockClient(ctrl) + defer ctrl.Finish() + + h := RefreshTokenGrantHandler{ + Store: store, + Enigma: chgen, + AccessTokenLifespan: time.Hour, + } + for k, c := range []struct { + mock func() + req *http.Request + expectErr error + }{ + { + mock: func() { + areq.EXPECT().GetGrantType().Return("") + }, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + mock: func() { + areq.EXPECT().GetGrantType().Return("password") + areq.EXPECT().GetClient().Return(&client.SecureClient{}) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + + aresp.EXPECT().SetAccessToken(".") + aresp.EXPECT().SetTokenType("bearer") + aresp.EXPECT().SetExtra("expires_in", gomock.Any()) + aresp.EXPECT().SetExtra("scope", gomock.Any()) + areq.EXPECT().GetGrantedScopes() + }, + }, + } { + c.mock() + err := h.HandleTokenEndpointRequest(nil, c.req, areq, aresp, nil) + assert.True(t, errors.Is(c.expectErr, err), "%d\n%s\n%s", k, err, c.expectErr) + t.Logf("Passed test case %d", k) + } +} diff --git a/handler/oidc/storage.go b/handler/oidc/storage.go index bcecc978..1df929b0 100644 --- a/handler/oidc/storage.go +++ b/handler/oidc/storage.go @@ -1,3 +1 @@ package oidc - -type OpenIDConnectStorage interface{} From 08ddbae46bca5ef18e4a8c7560a46d6238d6a3e9 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 10:25:34 +0100 Subject: [PATCH 44/47] all: made hybrid flow optional --- authorize_request_handler.go | 6 +++++ authorize_request_handler_test.go | 41 ++++++++++++++++++++++++++++--- fosite.go | 5 ++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/authorize_request_handler.go b/authorize_request_handler.go index a6bef64a..0bd76c37 100644 --- a/authorize_request_handler.go +++ b/authorize_request_handler.go @@ -50,6 +50,12 @@ func (c *Fosite) NewAuthorizeRequest(_ context.Context, r *http.Request) (Author // type "a b" is the same as "b a"). The meaning of such composite // response types is defined by their respective specifications. responseTypes := removeEmpty(strings.Split(r.Form.Get("response_type"), " ")) + + // Allow or deny http://openid.net/specs/openid-connect-core-1_0.html#HybridFlowAuth + if !c.AllowHybridFlow && len(responseTypes) > 1 { + return request, errors.New(ErrInvalidRequest) + } + request.ResponseTypes = responseTypes // rfc6819 4.4.1.8. Threat: CSRF Attack against redirect-uri diff --git a/authorize_request_handler_test.go b/authorize_request_handler_test.go index ffc58c6a..1a7ee83e 100644 --- a/authorize_request_handler_test.go +++ b/authorize_request_handler_test.go @@ -139,7 +139,7 @@ func TestNewAuthorizeRequest(t *testing.T) { query: url.Values{ "redirect_uri": {"https://foo.bar/cb"}, "client_id": {"1234"}, - "response_type": {"code token"}, + "response_type": {"code"}, "state": {"strong-state"}, "scope": {"foo bar"}, }, @@ -148,9 +148,8 @@ func TestNewAuthorizeRequest(t *testing.T) { }, expectedError: ErrInvalidScope, }, - /* success case */ { - desc: "should pass", + desc: "should not pass because hybrid flow is not active", conf: &Fosite{Store: store}, query: url.Values{ "redirect_uri": {"https://foo.bar/cb"}, @@ -162,6 +161,42 @@ func TestNewAuthorizeRequest(t *testing.T) { mock: func() { store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) }, + expectedError: ErrInvalidRequest, + }, + { + desc: "should not pass because hybrid flow is not active", + conf: &Fosite{Store: store}, + query: url.Values{ + "redirect_uri": {"https://foo.bar/cb"}, + "client_id": {"1234"}, + "response_type": {"code"}, + "state": {"strong-state"}, + "scope": {DefaultRequiredScopeName + " foo bar"}, + }, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) + }, + expect: &AuthorizeRequest{ + RedirectURI: redir, + Client: &SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, + ResponseTypes: []string{"code"}, + State: "strong-state", + Scopes: []string{DefaultRequiredScopeName, "foo", "bar"}, + }, + }, + { + desc: "should pass", + conf: &Fosite{Store: store, AllowHybridFlow: true}, + query: url.Values{ + "redirect_uri": {"https://foo.bar/cb"}, + "client_id": {"1234"}, + "response_type": {"code token"}, + "state": {"strong-state"}, + "scope": {DefaultRequiredScopeName + " foo bar"}, + }, + mock: func() { + store.EXPECT().GetClient("1234").Return(&SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, nil) + }, expect: &AuthorizeRequest{ RedirectURI: redir, Client: &SecureClient{RedirectURIs: []string{"https://foo.bar/cb"}}, diff --git a/fosite.go b/fosite.go index 77a5dda0..ec5ebe79 100644 --- a/fosite.go +++ b/fosite.go @@ -26,6 +26,7 @@ func NewFosite(store Storage) *Fosite { AuthorizeEndpointHandlers: AuthorizeEndpointHandlers{}, TokenEndpointHandlers: TokenEndpointHandlers{}, Hasher: &hash.BCrypt{WorkFactor: 12}, + AllowHybridFlow: false, } } @@ -36,4 +37,8 @@ type Fosite struct { AuthorizeEndpointHandlers AuthorizeEndpointHandlers TokenEndpointHandlers TokenEndpointHandlers Hasher hash.Hasher + + // AllowHybridFlow sets if the hybrid flow should be allowed. + // More: http://openid.net/specs/openid-connect-core-1_0.html#HybridFlowAuth + AllowHybridFlow bool } From 7f5938adc4f79380239292cd3b6f6e0064df39ef Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 10:35:19 +0100 Subject: [PATCH 45/47] handler/core: fixed tests --- handler/core/client/client_test.go | 6 ++--- handler/core/refresh/refresh_test.go | 35 +++++++++++++++++++++------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/handler/core/client/client_test.go b/handler/core/client/client_test.go index 74abcc23..888a7903 100644 --- a/handler/core/client/client_test.go +++ b/handler/core/client/client_test.go @@ -49,7 +49,7 @@ func TestValidateTokenEndpointRequest(t *testing.T) { } } -func HandleTokenEndpointRequest(t *testing.T) { +func TestHandleTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) store := internal.NewMockClientCredentialsGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) @@ -72,7 +72,6 @@ func HandleTokenEndpointRequest(t *testing.T) { mock: func() { areq.EXPECT().GetGrantType().Return("") }, - expectErr: fosite.ErrServerError, }, { mock: func() { @@ -86,7 +85,7 @@ func HandleTokenEndpointRequest(t *testing.T) { mock: func() { areq.EXPECT().GetGrantType().Return("client_credentials") areq.EXPECT().GetClient().Return(&client.SecureClient{}) - chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) }, expectErr: fosite.ErrServerError, @@ -98,6 +97,7 @@ func HandleTokenEndpointRequest(t *testing.T) { chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + areq.EXPECT().GetGrantedScopes() aresp.EXPECT().SetAccessToken(".") aresp.EXPECT().SetTokenType("bearer") aresp.EXPECT().SetExtra("expires_in", gomock.Any()) diff --git a/handler/core/refresh/refresh_test.go b/handler/core/refresh/refresh_test.go index 4beb077f..36e3cd8c 100644 --- a/handler/core/refresh/refresh_test.go +++ b/handler/core/refresh/refresh_test.go @@ -96,7 +96,7 @@ func TestValidateTokenEndpointRequest(t *testing.T) { } } -func T123estHandleTokenEndpointRequest(t *testing.T) { +func TestHandleTokenEndpointRequest(t *testing.T) { ctrl := gomock.NewController(t) store := internal.NewMockRefreshTokenGrantStorage(ctrl) chgen := internal.NewMockEnigma(ctrl) @@ -105,6 +105,8 @@ func T123estHandleTokenEndpointRequest(t *testing.T) { //mockcl := internal.NewMockClient(ctrl) defer ctrl.Finish() + areq.EXPECT().GetClient().AnyTimes().Return(&client.SecureClient{}) + h := RefreshTokenGrantHandler{ Store: store, Enigma: chgen, @@ -122,32 +124,49 @@ func T123estHandleTokenEndpointRequest(t *testing.T) { }, { mock: func() { - areq.EXPECT().GetGrantType().Return("password") - areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetGrantType().Return("refresh_token") chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(nil, errors.New("")) }, expectErr: fosite.ErrServerError, }, { + req: &http.Request{PostForm: url.Values{}}, mock: func() { - areq.EXPECT().GetGrantType().Return("password") - areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetGrantType().Return("refresh_token") chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) - store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New("")) }, expectErr: fosite.ErrServerError, }, { + req: &http.Request{PostForm: url.Values{}}, mock: func() { - areq.EXPECT().GetGrantType().Return("password") - areq.EXPECT().GetClient().Return(&client.SecureClient{}) + areq.EXPECT().GetGrantType().Return("refresh_token") + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) + store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().DeleteRefreshTokenSession(gomock.Any()).Return(errors.New("")) + }, + expectErr: fosite.ErrServerError, + }, + { + req: &http.Request{PostForm: url.Values{}}, + mock: func() { + areq.EXPECT().GetGrantType().Return("refresh_token") + chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) chgen.EXPECT().GenerateChallenge(gomock.Any()).Return(&enigma.Challenge{}, nil) store.EXPECT().CreateAccessTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().CreateRefreshTokenSession(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + store.EXPECT().DeleteRefreshTokenSession(gomock.Any()).Return(nil) aresp.EXPECT().SetAccessToken(".") aresp.EXPECT().SetTokenType("bearer") aresp.EXPECT().SetExtra("expires_in", gomock.Any()) aresp.EXPECT().SetExtra("scope", gomock.Any()) + aresp.EXPECT().SetExtra("refresh_token", ".") areq.EXPECT().GetGrantedScopes() }, }, From 58908b8cd323434dce944119c5a300f1196634f2 Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 10:38:41 +0100 Subject: [PATCH 46/47] example: fixed urls --- fosite-example/main.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fosite-example/main.go b/fosite-example/main.go index 6a0689b1..0437b05d 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -26,7 +26,7 @@ var store = &internal.Store{ "my-client": &client.SecureClient{ ID: "my-client", Secret: []byte(`$2a$10$IxMdI6d.LIRZPpSfEwNoeu4rY3FhDREsxFJXikcgdRRAStxUlsuEO`), // = "foobar" - RedirectURIs: []string{"https://localhost:3846/callback"}, + RedirectURIs: []string{"http://localhost:3846/callback"}, }, }, Users: map[string]internal.UserRelation{ @@ -44,18 +44,18 @@ var oauth2 OAuth2Provider = fositeFactory() var clientConf = goauth.Config{ ClientID: "my-client", ClientSecret: "foobar", - RedirectURL: "https://localhost:3846/callback", + RedirectURL: "http://localhost:3846/callback", Scopes: []string{"fosite"}, Endpoint: goauth.Endpoint{ - TokenURL: "https://localhost:3846/token", - AuthURL: "https://localhost:3846/auth", + TokenURL: "http://localhost:3846/token", + AuthURL: "http://localhost:3846/auth", }, } var appClientConf = clientcredentials.Config{ ClientID: "my-client", ClientSecret: "foobar", Scopes: []string{"fosite"}, - TokenURL: "https://localhost:3846/token", + TokenURL: "http://localhost:3846/token", } type session struct { @@ -208,9 +208,9 @@ func homeHandler(rw http.ResponseWriter, req *http.Request) { `, clientConf.AuthCodeURL("some-random-state-foobar"), - "https://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", + "http://localhost:3846/auth?client_id=my-client&redirect_uri=http%3A%2F%2Flocalhost%3A3846%2Fcallback&response_type=token&scope=fosite&state=some-random-state-foobar", clientConf.AuthCodeURL("some-random-state-foobar"), - "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=https://localhost:3846/callback", + "/auth?client_id=my-client&scope=fosite&response_type=123&redirect_uri=http://localhost:3846/callback", ))) } @@ -245,7 +245,7 @@ func callbackHandler(rw http.ResponseWriter, req *http.Request) { if req.URL.Query().Get("code") == "" { rw.Write([]byte(fmt.Sprintf(`

      Could not find the authorize code. If you've used the implicit grant, check the browser location bar for the - access token (the server side does not have access to url fragments) + access token (the server side does not have access to url fragments)

      `, ))) return From e143d8ca506f7cf2f70c92710b2fc123e003a12d Mon Sep 17 00:00:00 2001 From: Aeneas Rekkas Date: Wed, 13 Jan 2016 10:48:42 +0100 Subject: [PATCH 47/47] docs: readme --- README.md | 57 ++++++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index dfe00252..03877e48 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,14 @@ Built simple, powerful and extensible. This library implements peer-reviewed [IE counterfeits weaknesses covered in peer-reviewed [IETF RFC6819](https://tools.ietf.org/html/rfc6819) and countermeasures various database attack scenarios, keeping your application safe when that hacker penetrates and leaks your database. -If you are here to contribute, feel free to check [this Pull Request](https://github.com/ory-am/fosite/pull/1). - [![Build Status](https://travis-ci.org/ory-am/fosite.svg?branch=master)](https://travis-ci.org/ory-am/fosite?branch=master) [![Coverage Status](https://coveralls.io/repos/ory-am/fosite/badge.svg?branch=master&service=github)](https://coveralls.io/github/ory-am/fosite?branch=master) -Fosite is in active development. Most of the framework is done and tested. We will use gopkg for releasing new versions of the API. -Be aware that "go get github.com/ory-am/fosite" will give you the master branch, which is and always will be *nightly*. -Once releases roll out, you will be able to fetch a specific fosite API version through gopkg.in. +Be aware that `go get github.com/ory-am/fosite` will give you the master branch, which is and always will be *nightly*. +Once releases roll out, you will be able to fetch a specific [fosite API version through gopkg.in](#installation). +As of now, no stable `v1` version exists. -These Standards have been reviewed during the development of Fosite: +During development, we took reviewed the following open specifications: * [OAuth 2.0 Multiple Response Type Encoding Practices](https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html) * [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.html) * [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) @@ -94,7 +92,7 @@ Additionally, we added these safeguards: This is what a token can look like: `/tgBeUhWlAT8tM8Bhmnx+Amf8rOYOUhrDi3pGzmjP7c=.BiV/Yhma+5moTP46anxMT6cWW8gz5R5vpC9RbpwSDdM=` * **Enforging scopes:** By default, you always need to include the `fosite` scope or fosite will not execute the request - properly. Obviously, you can change the scope to `basic` or `core` but be aware that you *must use scopes* if you use + properly. Obviously, you can change the scope to `basic` or `core` but be aware that you should use scopes if you use OAuth2. It is strongly encouraged to use the handlers shipped with Fosite as the follow specs. @@ -103,17 +101,6 @@ Sections below [Section 5](https://tools.ietf.org/html/rfc6819#section-5) that are not covered in the list above should be reviewed by you. If you think that a specific section should be something that is covered in Fosite, feel free to create an [issue](https://github.com/ory-am/fosite/issues). -The following list documents which sections of the RFCs we reviewed for each action. This list is not complete yet. - -* AuthorizeExplicitEndpointHandler: Managing the authorization code grant - * [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) - * (Authorization Endpoint)[https://tools.ietf.org/html/rfc6749#section-3.1] - * (Response Type)[https://tools.ietf.org/html/rfc6749#section-3.1.1] - * (Redirection Endpoint)[https://tools.ietf.org/html/rfc6749#section-3.1.2] - * ... - * [OAuth 2.0 Threat Model and Security Considerations](https://tools.ietf.org/html/rfc6819) - * ... - ## A word on extensibility Fosite is extensible ... because OAuth2 is an extensible and flexible **framework**. @@ -122,11 +109,7 @@ have been validated against the OAuth2 specs beforehand. You can easily extend Fosite's capabilities. For example, if you want to provide OpenID Connect on top of your OAuth2 stack, that's no problem. Or custom assertions, what ever you like and as long as it is secure. ;) -## Usage - -This section is WIP and we welcome discussions via PRs or in the issues. - -### See it in action +## Example The example does not have nice visuals but it should give you an idea of what you can do with Fosite and a few lines of code. @@ -144,6 +127,10 @@ fosite-example There should be a server listening on [localhost:3846](https://localhost:3846/). You can check out the example's source code [here](/fosite-example/main.go). +## Usage + +There is an API documentation available at [godoc.org/ory-am/fosite](https://godoc.org/github.com/ory-am/fosite). + ### Installation Obviously, you will need [Go](https://golang.org) installed on your machine and it is required that you have set up your @@ -168,7 +155,7 @@ To use the unstable master branch, which is only recommended for testing purpose go get gopkg.in/ory-am/fosite.v0/... ``` -### [Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1) +### Exemplary [Authorization Endpoint](https://tools.ietf.org/html/rfc6749#section-3.1) ```go package main @@ -179,31 +166,29 @@ import( "golang.org/x/net/context" ) -var oauth2 fosite.OAuth2Provider = fositeFactory() - func fositeFactory() fosite.OAuth2Provider { // NewMyStorageImplementation should implement all storage interfaces. var store = newMyStorageImplementation() - f := fosite.NewDefaultFosite(store) + f := fosite.NewFosite(store) accessTokenLifespan := time.Hour // Let's enable the explicit authorize code grant! - explicitHandler := &explicit.AuthorizeExplicitEndpointHandler struct { + explicitHandler := &explicit.AuthorizeExplicitGrantTypeHandler struct { Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, Store: store, AuthCodeLifespan: time.Minute * 10, } - f.AuthorizeEndpointHandlers.Add(explicitHandler) - f.TokenEndpointHandlers.Add(explicitHandler) + f.AuthorizeEndpointHandlers.Add("code", explicitHandler) + f.TokenEndpointHandlers.Add("code", explicitHandler) // Next let's enable the implicit one! - explicitHandler := &implicit.AuthorizeImplicitEndpointHandler struct { + explicitHandler := &implicit.AuthorizeImplicitGrantTypeHandler struct { Enigma: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, Store: store, AccessTokenLifespan: accessTokenLifespan, } - f.AuthorizeEndpointHandlers.Add(implicitHandler) + f.AuthorizeEndpointHandlers.Add("implicit", implicitHandler) return f } @@ -285,7 +270,7 @@ func handleAuth(rw http.ResponseWriter, r *http.Request) { // ... ``` -### [Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2) +### Exemplary [Token Endpoint](https://tools.ietf.org/html/rfc6749#section-3.2) ```go // ... @@ -335,15 +320,15 @@ Let's take the explicit authorize handler. He is responsible for handling the If you want to enable the handler able to handle this workflow, you can do this: ```go -handler := &explicit.AuthorizeExplicitEndpointHandler{ +handler := &explicit.AuthorizeExplicitGrantTypeHandler{ Generator: &enigma.HMACSHAEnigma{GlobalSecret: []byte("some-super-cool-secret-that-nobody-knows")}, Store: myCodeStore, // Needs to implement CodeResponseTypeStorage } oauth2 := &fosite.Fosite{ - AuthorizeEndpointHandlers: []fosite.AuthorizeEndpointHandler{ + AuthorizeEndpointHandlers: fosite.AuthorizeEndpointHandlers{ handler, }, - TokenEndpointHandlers: []fosite.TokenEndpointHandler{ + TokenEndpointHandlers: fosite.TokenEndpointHandlers{ handler, }, }

      Go back

      !#o@W$1K{Gp!@3W9I(+-`9}k5PI*Ooo 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%0D-d=d~bK#Ia= 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'#dSru%5sqtb@yVL4kcbQG=cYIucuPUw80A; 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 VU(!B(=Jeu)gZ691S5_$E{}+elc0T|B diff --git a/fosite-example/internal/store.go b/fosite-example/internal/store.go index 3530fbb9..22bf5ca2 100644 --- a/fosite-example/internal/store.go +++ b/fosite-example/internal/store.go @@ -22,6 +22,7 @@ type Store struct { Clients map[string]client.Client AuthorizeCodes map[string]AuthorizeCodesRelation AccessTokens map[string]AccessRelation + Implicit map[string]AuthorizeCodesRelation RefreshTokens map[string]AccessRelation } @@ -29,6 +30,7 @@ func NewStore() *Store { return &Store{ Clients: map[string]client.Client{}, AuthorizeCodes: map[string]AuthorizeCodesRelation{}, + Implicit: map[string]AuthorizeCodesRelation{}, AccessTokens: map[string]AccessRelation{}, RefreshTokens: map[string]AccessRelation{}, } @@ -98,3 +100,8 @@ func (s *Store) DeleteRefreshTokenSession(signature string) error { delete(s.RefreshTokens, signature) return nil } + +func (s *Store) CreateImplicitAccessTokenSession(code string, ar fosite.AuthorizeRequester, sess *authorize.AuthorizeSession) error { + s.Implicit[code] = AuthorizeCodesRelation{request: ar, session: sess} + return nil +} diff --git a/fosite-example/main.go b/fosite-example/main.go index cab0f880..d8bb235f 100644 --- a/fosite-example/main.go +++ b/fosite-example/main.go @@ -1,12 +1,14 @@ package main import ( + "fmt" "github.com/go-errors/errors" . "github.com/ory-am/fosite" "github.com/ory-am/fosite/client" "github.com/ory-am/fosite/enigma" "github.com/ory-am/fosite/fosite-example/internal" "github.com/ory-am/fosite/handler/authorize/explicit" + "github.com/ory-am/fosite/handler/authorize/implicit" goauth "golang.org/x/oauth2" "log" "net/http" @@ -18,22 +20,23 @@ var store = &internal.Store{ "my-client": &client.SecureClient{ ID: "my-client", Secret: []byte(`$2a$10$IxMdI6d.LIRZPpSfEwNoeu4rY3FhDREsxFJXikcgdRRAStxUlsuEO`), // = "foobar" - RedirectURIs: []string{"http://localhost:8080/callback"}, + RedirectURIs: []string{"http://localhost:3846/callback"}, }, }, AuthorizeCodes: map[string]internal.AuthorizeCodesRelation{}, AccessTokens: map[string]internal.AccessRelation{}, RefreshTokens: map[string]internal.AccessRelation{}, + Implicit: map[string]internal.AuthorizeCodesRelation{}, } var oauth2 OAuth2Provider = fositeFactory() var clientConf = goauth.Config{ ClientID: "my-client", ClientSecret: "foobar", - RedirectURL: "http://localhost:8080/callback", + RedirectURL: "http://localhost:3846/callback", Scopes: []string{"fosite"}, Endpoint: goauth.Endpoint{ - TokenURL: "http://localhost:8080/token", - AuthURL: "http://localhost:8080/auth", + TokenURL: "http://localhost:3846/token", + AuthURL: "http://localhost:3846/auth", }, } @@ -43,30 +46,8 @@ type session struct { func main() { - http.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) { - rw.Write([]byte(`Click here to authorize
    -
    - You can also click here to see what happens when you issue an invalid request. - `)) - }) - http.HandleFunc("/callback", func(rw http.ResponseWriter, req *http.Request) { - rw.Header().Set("Content-Type", "text/html; charset=utf-8") - if req.URL.Query().Get("error") != "" { - rw.Write([]byte(`