From c8a89eca0800ca64da09ab09f758d78b98bc974f Mon Sep 17 00:00:00 2001 From: leyshon Date: Thu, 29 Aug 2019 14:32:01 +0100 Subject: [PATCH 01/26] Adding the IDToken to the session for the Azure Provider. --- providers/azure.go | 65 +++++++++++++++++++++++++++++++++++++++++ providers/azure_test.go | 18 +++++++++++- 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/providers/azure.go b/providers/azure.go index 653090b0..6729e4f0 100644 --- a/providers/azure.go +++ b/providers/azure.go @@ -5,6 +5,10 @@ import ( "fmt" "net/http" "net/url" + "encoding/json" + "io/ioutil" + "bytes" + "time" "github.com/bitly/go-simplejson" "github.com/pusher/oauth2_proxy/pkg/apis/sessions" @@ -65,6 +69,67 @@ func (p *AzureProvider) Configure(tenant string) { } } +func (p *AzureProvider) Redeem(redirectURL, code string) (s *sessions.SessionState, err error) { + if code == "" { + err = errors.New("missing code") + return + } + + params := url.Values{} + params.Add("redirect_uri", redirectURL) + params.Add("client_id", p.ClientID) + params.Add("client_secret", p.ClientSecret) + params.Add("code", code) + params.Add("grant_type", "authorization_code") + if p.ProtectedResource != nil && p.ProtectedResource.String() != "" { + params.Add("resource", p.ProtectedResource.String()) + } + + var req *http.Request + req, err = http.NewRequest("POST", p.RedeemURL.String(), bytes.NewBufferString(params.Encode())) + if err != nil { + return + } + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + var resp *http.Response + resp, err = http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + var body []byte + body, err = ioutil.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + return + } + + if resp.StatusCode != 200 { + err = fmt.Errorf("got %d from %q %s", resp.StatusCode, p.RedeemURL.String(), body) + return + } + + var jsonResponse struct { + AccessToken string `json:"access_token"` + RefreshToken string `json:"refresh_token"` + ExpiresOn int64 `json:"expires_on,string"` + IDToken string `json:"id_token"` + } + err = json.Unmarshal(body, &jsonResponse) + if err != nil { + return + } + + s = &sessions.SessionState{ + AccessToken: jsonResponse.AccessToken, + IDToken: jsonResponse.IDToken, + CreatedAt: time.Now(), + ExpiresOn: time.Unix(jsonResponse.ExpiresOn, 0), + RefreshToken: jsonResponse.RefreshToken, + } + return +} + func getAzureHeader(accessToken string) http.Header { header := make(http.Header) header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken)) diff --git a/providers/azure_test.go b/providers/azure_test.go index 8d34bdc8..8ec59785 100644 --- a/providers/azure_test.go +++ b/providers/azure_test.go @@ -20,6 +20,7 @@ func testAzureProvider(hostname string) *AzureProvider { ValidateURL: &url.URL{}, ProtectedResource: &url.URL{}, Scope: ""}) + if hostname != "" { updateURL(p.Data().LoginURL, hostname) updateURL(p.Data().RedeemURL, hostname) @@ -111,8 +112,11 @@ func testAzureBackend(payload string) *httptest.Server { return httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != path || r.URL.RawQuery != query { + if (r.URL.Path != path || r.URL.RawQuery != query) && r.Method != "POST" { w.WriteHeader(404) + } else if r.Method == "POST" && r.Body != nil { + w.WriteHeader(200) + w.Write([]byte(payload)) } else if r.Header.Get("Authorization") != "Bearer imaginary_access_token" { w.WriteHeader(403) } else { @@ -199,3 +203,15 @@ func TestAzureProviderGetEmailAddressIncorrectOtherMails(t *testing.T) { assert.Equal(t, "type assertion to string failed", err.Error()) assert.Equal(t, "", email) } + +func TestAzureProviderRedeemReturnsIdToken(t *testing.T) { + b := testAzureBackend(`{ "id_token": "testtoken1234" }`) + defer b.Close() + + bURL, _ := url.Parse(b.URL) + p := testAzureProvider(bURL.Host) + p.Data().RedeemURL.Path = "/common/oauth2/token" + s, err := p.Redeem("https://localhost", "1234") + assert.Equal(t, nil, err) + assert.Equal(t, "testtoken1234", s.IDToken) +} \ No newline at end of file From 0c541f6f5e339021a75b5477e49dce18e20500a8 Mon Sep 17 00:00:00 2001 From: leyshon Date: Thu, 29 Aug 2019 15:01:15 +0100 Subject: [PATCH 02/26] Adding additional asserts to the TestAzureProviderREdeemReturnsIdToken to ensure that the refresh token and expires on date are both being set --- providers/azure_test.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/providers/azure_test.go b/providers/azure_test.go index 8ec59785..3f2b00dd 100644 --- a/providers/azure_test.go +++ b/providers/azure_test.go @@ -5,6 +5,7 @@ import ( "net/http/httptest" "net/url" "testing" + "time" "github.com/pusher/oauth2_proxy/pkg/apis/sessions" "github.com/stretchr/testify/assert" @@ -205,7 +206,8 @@ func TestAzureProviderGetEmailAddressIncorrectOtherMails(t *testing.T) { } func TestAzureProviderRedeemReturnsIdToken(t *testing.T) { - b := testAzureBackend(`{ "id_token": "testtoken1234" }`) + b := testAzureBackend(`{ "id_token": "testtoken1234", "expires_on": "1136239445", "refresh_token": "refresh1234" }`) + timestamp, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05Z") defer b.Close() bURL, _ := url.Parse(b.URL) @@ -214,4 +216,6 @@ func TestAzureProviderRedeemReturnsIdToken(t *testing.T) { s, err := p.Redeem("https://localhost", "1234") assert.Equal(t, nil, err) assert.Equal(t, "testtoken1234", s.IDToken) -} \ No newline at end of file + assert.Equal(t, timestamp, s.ExpiresOn.UTC()) + assert.Equal(t, "refresh1234", s.RefreshToken) +} From 311f14c7ebac531c3c8aac7a0e56fe9874e45bfc Mon Sep 17 00:00:00 2001 From: leyshon Date: Thu, 29 Aug 2019 15:37:25 +0100 Subject: [PATCH 03/26] Fixing linting errors: Making sure err is checked in azure_test and gofmt has been run --- providers/azure.go | 8 ++++---- providers/azure_test.go | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/providers/azure.go b/providers/azure.go index 6729e4f0..48cea846 100644 --- a/providers/azure.go +++ b/providers/azure.go @@ -1,13 +1,13 @@ package providers import ( + "bytes" + "encoding/json" "errors" "fmt" + "io/ioutil" "net/http" "net/url" - "encoding/json" - "io/ioutil" - "bytes" "time" "github.com/bitly/go-simplejson" @@ -119,7 +119,7 @@ func (p *AzureProvider) Redeem(redirectURL, code string) (s *sessions.SessionSta if err != nil { return } - + s = &sessions.SessionState{ AccessToken: jsonResponse.AccessToken, IDToken: jsonResponse.IDToken, diff --git a/providers/azure_test.go b/providers/azure_test.go index 3f2b00dd..24745f3a 100644 --- a/providers/azure_test.go +++ b/providers/azure_test.go @@ -207,8 +207,9 @@ func TestAzureProviderGetEmailAddressIncorrectOtherMails(t *testing.T) { func TestAzureProviderRedeemReturnsIdToken(t *testing.T) { b := testAzureBackend(`{ "id_token": "testtoken1234", "expires_on": "1136239445", "refresh_token": "refresh1234" }`) - timestamp, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05Z") defer b.Close() + timestamp, err := time.Parse(time.RFC3339, "2006-01-02T22:04:05Z") + assert.Equal(t, nil, err) bURL, _ := url.Parse(b.URL) p := testAzureProvider(bURL.Host) From 41ed9f742910ad66502f3d83fbf90adf4eca8717 Mon Sep 17 00:00:00 2001 From: leyshon Date: Mon, 2 Sep 2019 14:56:20 +0100 Subject: [PATCH 04/26] Updating the changelog to include details of the change --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44cd0cf6..3b515580 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Changes since v4.0.0 +[#258](https://github.com/pusher/oauth2_proxy/pull/258) Add IDToken for Azure provider + - This PR adds the IDToken into the session for the Azure provider allowing requests to a backend to be identified as a specific user. As a consequence, if you are using a cookie to store the session the cookie will now exceed the 4kb size limit and be split into multiple cookies. This can cause problems when using nginx as a proxy, resulting in no cookie being passed at all. Either increase the proxy_buffer_size in nginx or implement the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) + # v4.0.0 ## Release Highlights From 21aba50ea5262cd29656778721f9da336c5c3ce5 Mon Sep 17 00:00:00 2001 From: leyshon Date: Mon, 2 Sep 2019 16:00:28 +0100 Subject: [PATCH 05/26] Adding a note to the Azure provider documentation to mention issues with the size of the cookie session storage --- docs/2_auth.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/2_auth.md b/docs/2_auth.md index e6c5cc6f..cbccae7c 100644 --- a/docs/2_auth.md +++ b/docs/2_auth.md @@ -80,6 +80,8 @@ Note: The user is checked against the group members list on initial authenticati --client-secret= ``` +Note: When using the Azure Auth provider with nginx and the cookie session store you may find the cookie is too large and doesn't get passed through correctly.. Increasing the proxy_buffer_size in nginx or implementing the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) should resolve this. + ### Facebook Auth Provider 1. Create a new FB App from From 1aad87d7ca4c166babca2098d07b3a22bf872bc5 Mon Sep 17 00:00:00 2001 From: leyshon Date: Mon, 2 Sep 2019 16:03:48 +0100 Subject: [PATCH 06/26] Fixing a small typo in the docs --- docs/2_auth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/2_auth.md b/docs/2_auth.md index cbccae7c..884ab1d7 100644 --- a/docs/2_auth.md +++ b/docs/2_auth.md @@ -80,7 +80,7 @@ Note: The user is checked against the group members list on initial authenticati --client-secret= ``` -Note: When using the Azure Auth provider with nginx and the cookie session store you may find the cookie is too large and doesn't get passed through correctly.. Increasing the proxy_buffer_size in nginx or implementing the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) should resolve this. +Note: When using the Azure Auth provider with nginx and the cookie session store you may find the cookie is too large and doesn't get passed through correctly. Increasing the proxy_buffer_size in nginx or implementing the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) should resolve this. ### Facebook Auth Provider From 0b2eb91fa43cc04a4ac324f9bd9b1eeb6f2c5d70 Mon Sep 17 00:00:00 2001 From: leyshon Date: Thu, 3 Oct 2019 11:46:04 +0100 Subject: [PATCH 07/26] Update docs/2_auth.md Co-Authored-By: Joel Speed --- docs/2_auth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/2_auth.md b/docs/2_auth.md index acef43b0..991bbae2 100644 --- a/docs/2_auth.md +++ b/docs/2_auth.md @@ -81,7 +81,7 @@ Note: The user is checked against the group members list on initial authenticati --client-secret= ``` -Note: When using the Azure Auth provider with nginx and the cookie session store you may find the cookie is too large and doesn't get passed through correctly. Increasing the proxy_buffer_size in nginx or implementing the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) should resolve this. +Note: When using the Azure Auth provider with nginx and the cookie session store you may find the cookie is too large and doesn't get passed through correctly. Increasing the proxy_buffer_size in nginx or implementing the [redis session storage](configuration#redis-storage) should resolve this. ### Facebook Auth Provider From e04411a789cde2b6819b31759fd9c3123518fb72 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 14 Oct 2019 02:33:18 +0400 Subject: [PATCH 08/26] Update README - add more badges (#281) --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ad88331c..09fde41e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # oauth2_proxy +[![Build Status](https://secure.travis-ci.org/pusher/oauth2_proxy.svg?branch=master)](http://travis-ci.org/pusher/oauth2_proxy) +[![Go Report Card](https://goreportcard.com/badge/github.com/pusher/oauth2_proxy)](https://goreportcard.com/report/github.com/pusher/oauth2_proxy) +[![GoDoc](https://godoc.org/github.com/pusher/oauth2_proxy?status.svg)](https://godoc.org/github.com/pusher/oauth2_proxy) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) + A reverse proxy and static file server that provides authentication using Providers (Google, GitHub, and others) to validate accounts by email, domain or group. @@ -7,8 +12,6 @@ to validate accounts by email, domain or group. Versions v3.0.0 and up are from this fork and will have diverged from any changes in the original fork. A list of changes can be seen in the [CHANGELOG](CHANGELOG.md). -[![Build Status](https://secure.travis-ci.org/pusher/oauth2_proxy.svg?branch=master)](http://travis-ci.org/pusher/oauth2_proxy) - ![Sign In Page](https://cloud.githubusercontent.com/assets/45028/4970624/7feb7dd8-6886-11e4-93e0-c9904af44ea8.png) ## Installation From e24e4ef8808e0d886d82f265ccf8ec2910eba764 Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Thu, 17 Oct 2019 16:30:18 +0100 Subject: [PATCH 09/26] Add force-https option and flag Signed-off-by: Josh Michielsen --- main.go | 1 + options.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/main.go b/main.go index a4bf378e..5baa8cd2 100644 --- a/main.go +++ b/main.go @@ -32,6 +32,7 @@ func main() { flagSet.String("http-address", "127.0.0.1:4180", "[http://]: or unix:// to listen on for HTTP clients") flagSet.String("https-address", ":443", ": to listen on for HTTPS clients") + flagSet.Bool("force-https", false, "force HTTPS redirect") flagSet.String("tls-cert-file", "", "path to certificate file") flagSet.String("tls-key-file", "", "path to private key file") flagSet.String("redirect-url", "", "the OAuth Redirect URL. ie: \"https://internalapp.yourcompany.com/oauth2/callback\"") diff --git a/options.go b/options.go index 37bbb0b9..ddc10cfd 100644 --- a/options.go +++ b/options.go @@ -34,6 +34,7 @@ type Options struct { ProxyWebSockets bool `flag:"proxy-websockets" cfg:"proxy_websockets" env:"OAUTH2_PROXY_PROXY_WEBSOCKETS"` HTTPAddress string `flag:"http-address" cfg:"http_address" env:"OAUTH2_PROXY_HTTP_ADDRESS"` HTTPSAddress string `flag:"https-address" cfg:"https_address" env:"OAUTH2_PROXY_HTTPS_ADDRESS"` + ForceHTTPS bool `flag:"force-https" cfg:"force_https" env:"OAUTH2_PROXY_FORCE_HTTPS"` RedirectURL string `flag:"redirect-url" cfg:"redirect_url" env:"OAUTH2_PROXY_REDIRECT_URL"` ClientID string `flag:"client-id" cfg:"client_id" env:"OAUTH2_PROXY_CLIENT_ID"` ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"` @@ -145,6 +146,7 @@ func NewOptions() *Options { ProxyWebSockets: true, HTTPAddress: "127.0.0.1:4180", HTTPSAddress: ":443", + ForceHTTPS: false, DisplayHtpasswdForm: true, CookieOptions: options.CookieOptions{ CookieName: "_oauth2_proxy", From aae91b0ad6cddae6d7ea17085f4713567aba248a Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Thu, 17 Oct 2019 16:30:48 +0100 Subject: [PATCH 10/26] Add new handler to redirect to HTTPS if flag is set Signed-off-by: Josh Michielsen --- http.go | 10 ++++++++++ main.go | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/http.go b/http.go index 2cee227b..0c84fb4b 100644 --- a/http.go +++ b/http.go @@ -152,3 +152,13 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { tc.SetKeepAlivePeriod(3 * time.Minute) return tc, nil } + +func redirectToHTTPS(opts *Options, h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if opts.ForceHTTPS { + http.Redirect(w, r, opts.HTTPSAddress, http.StatusPermanentRedirect) + } + + h.ServeHTTP(w, r) + }) +} diff --git a/main.go b/main.go index 5baa8cd2..fb859064 100644 --- a/main.go +++ b/main.go @@ -186,9 +186,9 @@ func main() { var handler http.Handler if opts.GCPHealthChecks { - handler = gcpHealthcheck(LoggingHandler(oauthproxy)) + handler = redirectToHTTPS(opts, gcpHealthcheck(LoggingHandler(oauthproxy))) } else { - handler = LoggingHandler(oauthproxy) + handler = redirectToHTTPS(opts, LoggingHandler(oauthproxy)) } s := &Server{ Handler: handler, From 271efe776e3b01b5526f1b284e48732e1131b5c0 Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Thu, 17 Oct 2019 16:37:36 +0100 Subject: [PATCH 11/26] Added tests Signed-off-by: Josh Michielsen --- http_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/http_test.go b/http_test.go index f5ee1421..bfb9bb24 100644 --- a/http_test.go +++ b/http_test.go @@ -106,3 +106,32 @@ func TestGCPHealthcheckNotIngressPut(t *testing.T) { assert.Equal(t, "test", rw.Body.String()) } + +func TestRedirectToHTTPSTrue(t *testing.T) { + opts := NewOptions() + opts.ForceHTTPS = true + handler := func(w http.ResponseWriter, req *http.Request) { + w.Write([]byte("test")) + } + + h := redirectToHTTPS(opts, http.HandlerFunc(handler)) + rw := httptest.NewRecorder() + r, _ := http.NewRequest("GET", "/", nil) + h.ServeHTTP(rw, r) + + assert.Equal(t, http.StatusPermanentRedirect, rw.Code, "status code should be %d, got: %d", http.StatusPermanentRedirect, rw.Code) +} + +func TestRedirectToHTTPSFalse(t *testing.T) { + opts := NewOptions() + handler := func(w http.ResponseWriter, req *http.Request) { + w.Write([]byte("test")) + } + + h := redirectToHTTPS(opts, http.HandlerFunc(handler)) + rw := httptest.NewRecorder() + r, _ := http.NewRequest("GET", "/", nil) + h.ServeHTTP(rw, r) + + assert.Equal(t, http.StatusOK, rw.Code, "status code should be %d, got: %d", http.StatusOK, rw.Code) +} From bed0336608ca139cd5617be1949ae05aa6f6dc0e Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Thu, 17 Oct 2019 22:04:24 +0100 Subject: [PATCH 12/26] Add SSL check and test no redirect when HTTPS Signed-off-by: Josh Michielsen --- http.go | 2 +- http_test.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/http.go b/http.go index 0c84fb4b..9ef0499c 100644 --- a/http.go +++ b/http.go @@ -155,7 +155,7 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { func redirectToHTTPS(opts *Options, h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if opts.ForceHTTPS { + if opts.ForceHTTPS && r.TLS == nil { http.Redirect(w, r, opts.HTTPSAddress, http.StatusPermanentRedirect) } diff --git a/http_test.go b/http_test.go index bfb9bb24..400213a0 100644 --- a/http_test.go +++ b/http_test.go @@ -135,3 +135,24 @@ func TestRedirectToHTTPSFalse(t *testing.T) { assert.Equal(t, http.StatusOK, rw.Code, "status code should be %d, got: %d", http.StatusOK, rw.Code) } + +func TestRedirectNotWhenHTTPS(t *testing.T) { + opts := NewOptions() + opts.ForceHTTPS = true + handler := func(w http.ResponseWriter, req *http.Request) { + w.Write([]byte("test")) + } + + h := redirectToHTTPS(opts, http.HandlerFunc(handler)) + s := httptest.NewTLSServer(h) + defer s.Close() + + opts.HTTPSAddress = s.URL + client := s.Client() + res, err := client.Get(s.URL) + if err != nil { + t.Fatalf("request to test server failed with error: %v", err) + } + + assert.Equal(t, http.StatusOK, res.StatusCode, "status code should be %d, got: %d", http.StatusOK, res.StatusCode) +} From 56d195a433d1c15d860e22fd47b619ac52765be5 Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Thu, 17 Oct 2019 22:20:15 +0100 Subject: [PATCH 13/26] Docs and changelog Signed-off-by: Josh Michielsen --- CHANGELOG.md | 1 + docs/configuration/configuration.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d76e8958..d3c1e4dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Changes since v4.0.0 - [#227](https://github.com/pusher/oauth2_proxy/pull/227) Add Keycloak provider (@Ofinka) +- [#259](https://github.com/pusher/oauth2_proxy/pull/259) Redirect to HTTPS (@jmickey) - [#273](https://github.com/pusher/oauth2_proxy/pull/273) Support Go 1.13 (@dio) - [#275](https://github.com/pusher/oauth2_proxy/pull/275) docker: build from debian buster (@syscll) diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index c076dc88..332c2238 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -44,6 +44,7 @@ An example [oauth2_proxy.cfg]({{ site.gitweb }}/contrib/oauth2_proxy.cfg.example | `-extra-jwt-issuers` | string | if `-skip-jwt-bearer-tokens` is set, a list of extra JWT `issuer=audience` pairs (where the issuer URL has a `.well-known/openid-configuration` or a `.well-known/jwks.json`) | | | `-exclude-logging-paths` | string | comma separated list of paths to exclude from logging, eg: `"/ping,/path2"` |`""` (no paths excluded) | | `-flush-interval` | duration | period between flushing response buffers when streaming responses | `"1s"` | +| `-force-https` | bool | enforce https redirect | `false` | | `-banner` | string | custom banner string. Use `"-"` to disable default banner. | | | `-footer` | string | custom footer string. Use `"-"` to disable default footer. | | | `-gcp-healthchecks` | bool | will enable `/liveness_check`, `/readiness_check`, and `/` (with the proper user-agent) endpoints that will make it work well with GCP App Engine and GKE Ingresses | false | From 9d0a0c74265ec190bb87d1825ac4618da8ee8910 Mon Sep 17 00:00:00 2001 From: Dan Bond Date: Fri, 18 Oct 2019 08:49:33 -0700 Subject: [PATCH 14/26] remove unnecessary validator tests (#288) * remove unnecessary validator tests * fix WriteString error --- validator_test.go | 75 +++++++++++++++++++----- validator_watcher_copy_test.go | 48 ---------------- validator_watcher_test.go | 102 --------------------------------- 3 files changed, 62 insertions(+), 163 deletions(-) delete mode 100644 validator_watcher_copy_test.go delete mode 100644 validator_watcher_test.go diff --git a/validator_test.go b/validator_test.go index 6e72cdbe..58253e8e 100644 --- a/validator_test.go +++ b/validator_test.go @@ -8,30 +8,34 @@ import ( ) type ValidatorTest struct { - authEmailFile *os.File - done chan bool - updateSeen bool + authEmailFileName string + done chan bool + updateSeen bool } func NewValidatorTest(t *testing.T) *ValidatorTest { vt := &ValidatorTest{} var err error - vt.authEmailFile, err = ioutil.TempFile("", "test_auth_emails_") + f, err := ioutil.TempFile("", "test_auth_emails_") if err != nil { - t.Fatal("failed to create temp file: " + err.Error()) + t.Fatalf("failed to create temp file: %v", err) } + if err := f.Close(); err != nil { + t.Fatalf("failed to close temp file: %v", err) + } + vt.authEmailFileName = f.Name() vt.done = make(chan bool, 1) return vt } func (vt *ValidatorTest) TearDown() { vt.done <- true - os.Remove(vt.authEmailFile.Name()) + os.Remove(vt.authEmailFileName) } func (vt *ValidatorTest) NewValidator(domains []string, updated chan<- bool) func(string) bool { - return newValidatorImpl(domains, vt.authEmailFile.Name(), + return newValidatorImpl(domains, vt.authEmailFileName, vt.done, func() { if vt.updateSeen == false { updated <- true @@ -40,13 +44,18 @@ func (vt *ValidatorTest) NewValidator(domains []string, }) } -// This will close vt.authEmailFile. func (vt *ValidatorTest) WriteEmails(t *testing.T, emails []string) { - defer vt.authEmailFile.Close() - vt.authEmailFile.WriteString(strings.Join(emails, "\n")) - if err := vt.authEmailFile.Close(); err != nil { - t.Fatal("failed to close temp file " + - vt.authEmailFile.Name() + ": " + err.Error()) + f, err := os.OpenFile(vt.authEmailFileName, os.O_WRONLY, 0600) + if err != nil { + t.Fatalf("failed to open auth email file: %v", err) + } + + if _, err := f.WriteString(strings.Join(emails, "\n")); err != nil { + t.Fatalf("failed to write emails to auth email file: %v", err) + } + + if err := f.Close(); err != nil { + t.Fatalf("failed to close auth email file: %v", err) } } @@ -160,3 +169,43 @@ func TestValidatorIgnoreSpacesInAuthEmails(t *testing.T) { t.Error("email should validate") } } + +func TestValidatorOverwriteEmailListDirectly(t *testing.T) { + vt := NewValidatorTest(t) + defer vt.TearDown() + + vt.WriteEmails(t, []string{ + "xyzzy@example.com", + "plugh@example.com", + }) + domains := []string(nil) + updated := make(chan bool) + validator := vt.NewValidator(domains, updated) + + if !validator("xyzzy@example.com") { + t.Error("first email in list should validate") + } + if !validator("plugh@example.com") { + t.Error("second email in list should validate") + } + if validator("xyzzy.plugh@example.com") { + t.Error("email not in list that matches no domains " + + "should not validate") + } + + vt.WriteEmails(t, []string{ + "xyzzy.plugh@example.com", + "plugh@example.com", + }) + <-updated + + if validator("xyzzy@example.com") { + t.Error("email removed from list should not validate") + } + if !validator("plugh@example.com") { + t.Error("email retained in list should validate") + } + if !validator("xyzzy.plugh@example.com") { + t.Error("email added to list should validate") + } +} diff --git a/validator_watcher_copy_test.go b/validator_watcher_copy_test.go deleted file mode 100644 index 15ed6faf..00000000 --- a/validator_watcher_copy_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// +build go1.3,!plan9,!solaris,!windows - -// Turns out you can't copy over an existing file on Windows. - -package main - -import ( - "io/ioutil" - "os" - "testing" -) - -func (vt *ValidatorTest) UpdateEmailFileViaCopyingOver( - t *testing.T, emails []string) { - origFile := vt.authEmailFile - var err error - vt.authEmailFile, err = ioutil.TempFile("", "test_auth_emails_") - if err != nil { - t.Fatal("failed to create temp file for copy: " + err.Error()) - } - vt.WriteEmails(t, emails) - err = os.Rename(vt.authEmailFile.Name(), origFile.Name()) - if err != nil { - t.Fatal("failed to copy over temp file: " + err.Error()) - } - vt.authEmailFile = origFile -} - -func TestValidatorOverwriteEmailListViaCopyingOver(t *testing.T) { - vt := NewValidatorTest(t) - defer vt.TearDown() - - vt.WriteEmails(t, []string{"xyzzy@example.com"}) - domains := []string(nil) - updated := make(chan bool) - validator := vt.NewValidator(domains, updated) - - if !validator("xyzzy@example.com") { - t.Error("email in list should validate") - } - - vt.UpdateEmailFileViaCopyingOver(t, []string{"plugh@example.com"}) - <-updated - - if validator("xyzzy@example.com") { - t.Error("email removed from list should not validate") - } -} diff --git a/validator_watcher_test.go b/validator_watcher_test.go deleted file mode 100644 index b022d68f..00000000 --- a/validator_watcher_test.go +++ /dev/null @@ -1,102 +0,0 @@ -// +build go1.3,!plan9,!solaris - -package main - -import ( - "io/ioutil" - "os" - "testing" -) - -func (vt *ValidatorTest) UpdateEmailFile(t *testing.T, emails []string) { - var err error - vt.authEmailFile, err = os.OpenFile( - vt.authEmailFile.Name(), os.O_WRONLY|os.O_CREATE, 0600) - if err != nil { - t.Fatal("failed to re-open temp file for updates") - } - vt.WriteEmails(t, emails) -} - -func (vt *ValidatorTest) UpdateEmailFileViaRenameAndReplace( - t *testing.T, emails []string) { - origFile := vt.authEmailFile - var err error - vt.authEmailFile, err = ioutil.TempFile("", "test_auth_emails_") - if err != nil { - t.Fatal("failed to create temp file for rename and replace: " + - err.Error()) - } - vt.WriteEmails(t, emails) - - movedName := origFile.Name() + "-moved" - err = os.Rename(origFile.Name(), movedName) - err = os.Rename(vt.authEmailFile.Name(), origFile.Name()) - if err != nil { - t.Fatal("failed to rename and replace temp file: " + - err.Error()) - } - vt.authEmailFile = origFile - os.Remove(movedName) -} - -func TestValidatorOverwriteEmailListDirectly(t *testing.T) { - vt := NewValidatorTest(t) - defer vt.TearDown() - - vt.WriteEmails(t, []string{ - "xyzzy@example.com", - "plugh@example.com", - }) - domains := []string(nil) - updated := make(chan bool) - validator := vt.NewValidator(domains, updated) - - if !validator("xyzzy@example.com") { - t.Error("first email in list should validate") - } - if !validator("plugh@example.com") { - t.Error("second email in list should validate") - } - if validator("xyzzy.plugh@example.com") { - t.Error("email not in list that matches no domains " + - "should not validate") - } - - vt.UpdateEmailFile(t, []string{ - "xyzzy.plugh@example.com", - "plugh@example.com", - }) - <-updated - - if validator("xyzzy@example.com") { - t.Error("email removed from list should not validate") - } - if !validator("plugh@example.com") { - t.Error("email retained in list should validate") - } - if !validator("xyzzy.plugh@example.com") { - t.Error("email added to list should validate") - } -} - -func TestValidatorOverwriteEmailListViaRenameAndReplace(t *testing.T) { - vt := NewValidatorTest(t) - defer vt.TearDown() - - vt.WriteEmails(t, []string{"xyzzy@example.com"}) - domains := []string(nil) - updated := make(chan bool, 1) - validator := vt.NewValidator(domains, updated) - - if !validator("xyzzy@example.com") { - t.Error("email in list should validate") - } - - vt.UpdateEmailFileViaRenameAndReplace(t, []string{"plugh@example.com"}) - <-updated - - if validator("xyzzy@example.com") { - t.Error("email removed from list should not validate") - } -} From dcc430f6f141f2dc4071952ae2f6c3e7a1e15979 Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Mon, 21 Oct 2019 23:21:35 +0100 Subject: [PATCH 15/26] Check `X-Forwared-Proto` for https (via another reverse proxy) Signed-off-by: Josh Michielsen --- http.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/http.go b/http.go index 9ef0499c..b7ee9598 100644 --- a/http.go +++ b/http.go @@ -155,7 +155,8 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { func redirectToHTTPS(opts *Options, h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if opts.ForceHTTPS && r.TLS == nil { + proto := r.Header.Get("X-Forwarded-Proto") + if opts.ForceHTTPS && r.TLS == nil && strings.ToLower(proto) != "https" { http.Redirect(w, r, opts.HTTPSAddress, http.StatusPermanentRedirect) } From fe9efba0c524c4356ef8e8020f20052954e04aa3 Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Tue, 22 Oct 2019 14:19:39 +0100 Subject: [PATCH 16/26] Documentation change Co-Authored-By: Joel Speed --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index fb859064..e84a796e 100644 --- a/main.go +++ b/main.go @@ -32,7 +32,7 @@ func main() { flagSet.String("http-address", "127.0.0.1:4180", "[http://]: or unix:// to listen on for HTTP clients") flagSet.String("https-address", ":443", ": to listen on for HTTPS clients") - flagSet.Bool("force-https", false, "force HTTPS redirect") + flagSet.Bool("force-https", false, "force HTTPS redirect for HTTP requests") flagSet.String("tls-cert-file", "", "path to certificate file") flagSet.String("tls-key-file", "", "path to private key file") flagSet.String("redirect-url", "", "the OAuth Redirect URL. ie: \"https://internalapp.yourcompany.com/oauth2/callback\"") From c0bfe0357a06339831f50a997a6708ea18ac745b Mon Sep 17 00:00:00 2001 From: Josh Michielsen Date: Tue, 22 Oct 2019 14:21:06 +0100 Subject: [PATCH 17/26] Confirm that the proto is not empty, and change condition to OR Co-Authored-By: Joel Speed --- http.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http.go b/http.go index b7ee9598..88280c44 100644 --- a/http.go +++ b/http.go @@ -156,7 +156,7 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { func redirectToHTTPS(opts *Options, h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { proto := r.Header.Get("X-Forwarded-Proto") - if opts.ForceHTTPS && r.TLS == nil && strings.ToLower(proto) != "https" { + if opts.ForceHTTPS && (r.TLS == nil || (proto != "" && strings.ToLower(proto) != "https")) { http.Redirect(w, r, opts.HTTPSAddress, http.StatusPermanentRedirect) } From 35f2ae9a36bc979feb2377b40611fe4dd3d0c75a Mon Sep 17 00:00:00 2001 From: Tom Deadman Date: Wed, 23 Oct 2019 17:55:34 +0100 Subject: [PATCH 18/26] Improved request errors (#286) * worked on wrapping errors in requests.go, added defer statements * removed .idea (generated by goland) * added another require.NoError * Update pkg/requests/requests.go Co-Authored-By: Dan Bond * fixed out-of-order imports * changelog entry added * swapped error definitions to use fmt.Errorf rather than Wrap() * formatting changes, added new defers to requests_test.go * suppot for go1.12 pipeline removed from travis pipeline, .idea/ added to gitignore * Reorder changelog entry --- .gitignore | 1 + .travis.yml | 1 - CHANGELOG.md | 1 + pkg/requests/requests.go | 25 +++++++++++++++++-------- pkg/requests/requests_test.go | 30 ++++++++++++++++++------------ 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index a5f59b4e..aff7b5b3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ release # Folders _obj _test +.idea/ # Architecture specific extensions/prefixes *.[568vq] diff --git a/.travis.yml b/.travis.yml index 7fb4bce2..ef8aa3ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: go go: - - 1.12.x - 1.13.x install: # Fetch dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index 55548857..9a3281f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - [#275](https://github.com/pusher/oauth2_proxy/pull/275) docker: build from debian buster (@syscll) - [#258](https://github.com/pusher/oauth2_proxy/pull/258) Add IDToken for Azure provider - This PR adds the IDToken into the session for the Azure provider allowing requests to a backend to be identified as a specific user. As a consequence, if you are using a cookie to store the session the cookie will now exceed the 4kb size limit and be split into multiple cookies. This can cause problems when using nginx as a proxy, resulting in no cookie being passed at all. Either increase the proxy_buffer_size in nginx or implement the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) +- [#286](https://github.com/pusher/oauth2_proxy/pull/286) Requests.go updated with useful error messages (@biotom) # v4.0.0 diff --git a/pkg/requests/requests.go b/pkg/requests/requests.go index 82d1176a..9083b2d4 100644 --- a/pkg/requests/requests.go +++ b/pkg/requests/requests.go @@ -18,17 +18,23 @@ func Request(req *http.Request) (*simplejson.Json, error) { return nil, err } body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - logger.Printf("%d %s %s %s", resp.StatusCode, req.Method, req.URL, body) - if err != nil { - return nil, err + if body != nil { + defer resp.Body.Close() } + + logger.Printf("%d %s %s %s", resp.StatusCode, req.Method, req.URL, body) + + if err != nil { + return nil, fmt.Errorf("problem reading http request body: %w", err) + } + if resp.StatusCode != 200 { return nil, fmt.Errorf("got %d %s", resp.StatusCode, body) } + data, err := simplejson.NewJson(body) if err != nil { - return nil, err + return nil, fmt.Errorf("error unmarshalling json: %w", err) } return data, nil } @@ -41,10 +47,13 @@ func RequestJSON(req *http.Request, v interface{}) error { return err } body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() + if body != nil { + defer resp.Body.Close() + } + logger.Printf("%d %s %s %s", resp.StatusCode, req.Method, req.URL, body) if err != nil { - return err + return fmt.Errorf("error reading body from http response: %w", err) } if resp.StatusCode != 200 { return fmt.Errorf("got %d %s", resp.StatusCode, body) @@ -56,7 +65,7 @@ func RequestJSON(req *http.Request, v interface{}) error { func RequestUnparsedResponse(url string, header http.Header) (resp *http.Response, err error) { req, err := http.NewRequest("GET", url, nil) if err != nil { - return nil, err + return nil, fmt.Errorf("error performing get request: %w", err) } req.Header = header diff --git a/pkg/requests/requests_test.go b/pkg/requests/requests_test.go index 99a4c3b6..c9ec4e88 100644 --- a/pkg/requests/requests_test.go +++ b/pkg/requests/requests_test.go @@ -8,20 +8,21 @@ import ( "testing" "github.com/bitly/go-simplejson" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) -func testBackend(responseCode int, payload string) *httptest.Server { +func testBackend(t *testing.T, responseCode int, payload string) *httptest.Server { return httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(responseCode) - w.Write([]byte(payload)) + _, err := w.Write([]byte(payload)) + require.NoError(t, err) })) } func TestRequest(t *testing.T) { - backend := testBackend(200, "{\"foo\": \"bar\"}") + backend := testBackend(t, 200, "{\"foo\": \"bar\"}") defer backend.Close() req, _ := http.NewRequest("GET", backend.URL, nil) @@ -35,7 +36,7 @@ func TestRequest(t *testing.T) { func TestRequestFailure(t *testing.T) { // Create a backend to generate a test URL, then close it to cause a // connection error. - backend := testBackend(200, "{\"foo\": \"bar\"}") + backend := testBackend(t, 200, "{\"foo\": \"bar\"}") backend.Close() req, err := http.NewRequest("GET", backend.URL, nil) @@ -49,7 +50,7 @@ func TestRequestFailure(t *testing.T) { } func TestHttpErrorCode(t *testing.T) { - backend := testBackend(404, "{\"foo\": \"bar\"}") + backend := testBackend(t, 404, "{\"foo\": \"bar\"}") defer backend.Close() req, err := http.NewRequest("GET", backend.URL, nil) @@ -60,7 +61,7 @@ func TestHttpErrorCode(t *testing.T) { } func TestJsonParsingError(t *testing.T) { - backend := testBackend(200, "not well-formed JSON") + backend := testBackend(t, 200, "not well-formed JSON") defer backend.Close() req, err := http.NewRequest("GET", backend.URL, nil) @@ -77,7 +78,8 @@ func TestRequestUnparsedResponseUsingAccessTokenParameter(t *testing.T) { token := r.FormValue("access_token") if r.URL.Path == "/" && token == "my_token" { w.WriteHeader(200) - w.Write([]byte("some payload")) + _, err := w.Write([]byte("some payload")) + require.NoError(t, err) } else { w.WriteHeader(403) } @@ -86,16 +88,17 @@ func TestRequestUnparsedResponseUsingAccessTokenParameter(t *testing.T) { response, err := RequestUnparsedResponse( backend.URL+"?access_token=my_token", nil) + defer response.Body.Close() + assert.Equal(t, nil, err) assert.Equal(t, 200, response.StatusCode) body, err := ioutil.ReadAll(response.Body) assert.Equal(t, nil, err) - response.Body.Close() assert.Equal(t, "some payload", string(body)) } func TestRequestUnparsedResponseUsingAccessTokenParameterFailedResponse(t *testing.T) { - backend := testBackend(200, "some payload") + backend := testBackend(t, 200, "some payload") // Close the backend now to force a request failure. backend.Close() @@ -110,7 +113,8 @@ func TestRequestUnparsedResponseUsingHeaders(t *testing.T) { func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" && r.Header["Auth"][0] == "my_token" { w.WriteHeader(200) - w.Write([]byte("some payload")) + _, err := w.Write([]byte("some payload")) + require.NoError(t, err) } else { w.WriteHeader(403) } @@ -120,10 +124,12 @@ func TestRequestUnparsedResponseUsingHeaders(t *testing.T) { headers := make(http.Header) headers.Set("Auth", "my_token") response, err := RequestUnparsedResponse(backend.URL, headers) + defer response.Body.Close() + assert.Equal(t, nil, err) assert.Equal(t, 200, response.StatusCode) body, err := ioutil.ReadAll(response.Body) assert.Equal(t, nil, err) - response.Body.Close() + assert.Equal(t, "some payload", string(body)) } From 90a6915ab15a92793d44b00a3b9a79b4633e7799 Mon Sep 17 00:00:00 2001 From: Dan Bond Date: Fri, 25 Oct 2019 13:47:28 -0700 Subject: [PATCH 19/26] fix bad grammar in upstreams configuration docs --- docs/configuration/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index 332c2238..2f5d049a 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -117,7 +117,7 @@ See below for provider specific options ### Upstreams Configuration -`oauth2_proxy` supports having multiple upstreams, and has the option to pass requests on to HTTP(S) servers or serve static files from the file system. HTTP and HTTPS upstreams are configured by providing a URL such as `http://127.0.0.1:8080/` for the upstream parameter, that will forward all authenticated requests to be forwarded to the upstream server. If you instead provide `http://127.0.0.1:8080/some/path/` then it will only be requests that start with `/some/path/` which are forwarded to the upstream. +`oauth2_proxy` supports having multiple upstreams, and has the option to pass requests on to HTTP(S) servers or serve static files from the file system. HTTP and HTTPS upstreams are configured by providing a URL such as `http://127.0.0.1:8080/` for the upstream parameter, this will forward all authenticated requests to the upstream server. If you instead provide `http://127.0.0.1:8080/some/path/` then it will only be requests that start with `/some/path/` which are forwarded to the upstream. Static file paths are configured as a file:// URL. `file:///var/www/static/` will serve the files from that directory at `http://[oauth2_proxy url]/var/www/static/`, which may not be what you want. You can provide the path to where the files should be available by adding a fragment to the configured URL. The value of the fragment will then be used to specify which path the files are available at. `file:///var/www/static/#/static/` will ie. make `/var/www/static/` available at `http://[oauth2_proxy url]/static/`. From 292d2dc639368e2f969132e11b03b0ec05498cb2 Mon Sep 17 00:00:00 2001 From: Johannes-Maria Frank Date: Mon, 28 Oct 2019 16:39:22 +0000 Subject: [PATCH 20/26] Added version check for bash version gteq 4 (#292) * Added version check for bash version gteq 4 * Added entry to CHANGELOG for bash 4.0 configure script dependency * Corrected changelog entry to right format * Fixed link in changelog entry * Remove uneeded new line. --- CHANGELOG.md | 2 +- configure | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3281f1..0dab5dea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Vx.x.x (Pre-release) ## Changes since v4.0.0 - +- [#291][https://github.com/pusher/oauth2_proxy/pull/291] Added bash >= 4.0 dependency to configure script (@jmfrank63) - [#227](https://github.com/pusher/oauth2_proxy/pull/227) Add Keycloak provider (@Ofinka) - [#259](https://github.com/pusher/oauth2_proxy/pull/259) Redirect to HTTPS (@jmickey) - [#273](https://github.com/pusher/oauth2_proxy/pull/273) Support Go 1.13 (@dio) diff --git a/configure b/configure index 26db8fea..10af15e6 100755 --- a/configure +++ b/configure @@ -5,6 +5,10 @@ GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' +if [ -z "${BASH_VERSINFO}" ] || [ -z "${BASH_VERSINFO[0]}" ] || [ ${BASH_VERSINFO[0]} -lt 4 ]; then + echo "This script requires Bash version >= 4"; exit 1; +fi + declare -A tools=() declare -A desired=() From ba21c90c7a8fa2a780991fd61a218cc91a859b27 Mon Sep 17 00:00:00 2001 From: Dan Bond Date: Mon, 28 Oct 2019 10:42:43 -0700 Subject: [PATCH 21/26] fix broken changelog link (#301) * fix broken changelog link * Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dab5dea..730ee08e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Vx.x.x (Pre-release) ## Changes since v4.0.0 -- [#291][https://github.com/pusher/oauth2_proxy/pull/291] Added bash >= 4.0 dependency to configure script (@jmfrank63) +- [#292](https://github.com/pusher/oauth2_proxy/pull/292) Added bash >= 4.0 dependency to configure script (@jmfrank63) - [#227](https://github.com/pusher/oauth2_proxy/pull/227) Add Keycloak provider (@Ofinka) - [#259](https://github.com/pusher/oauth2_proxy/pull/259) Redirect to HTTPS (@jmickey) - [#273](https://github.com/pusher/oauth2_proxy/pull/273) Support Go 1.13 (@dio) From f40dab87480d9a140fe9098e21dc928eade98c63 Mon Sep 17 00:00:00 2001 From: Dan Bond Date: Tue, 29 Oct 2019 10:27:08 -0700 Subject: [PATCH 22/26] Rewrite dist script (#302) * Rewrite dist scripts * add changelog entry * remove multiple loops in dist * styling --- CHANGELOG.md | 1 + Makefile | 27 +------------- dist.sh | 83 +++++++++++++++++++++--------------------- docs/1_installation.md | 6 +-- 4 files changed, 47 insertions(+), 70 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 730ee08e..87a6c5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - [#258](https://github.com/pusher/oauth2_proxy/pull/258) Add IDToken for Azure provider - This PR adds the IDToken into the session for the Azure provider allowing requests to a backend to be identified as a specific user. As a consequence, if you are using a cookie to store the session the cookie will now exceed the 4kb size limit and be split into multiple cookies. This can cause problems when using nginx as a proxy, resulting in no cookie being passed at all. Either increase the proxy_buffer_size in nginx or implement the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) - [#286](https://github.com/pusher/oauth2_proxy/pull/286) Requests.go updated with useful error messages (@biotom) +- [#302](https://github.com/pusher/oauth2_proxy/pull/302) Rewrite dist script (@syscll) # v4.0.0 diff --git a/Makefile b/Makefile index 18283f94..f0f83b44 100644 --- a/Makefile +++ b/Makefile @@ -61,29 +61,4 @@ test: lint .PHONY: release release: lint test - mkdir release - mkdir release/$(BINARY)-$(VERSION).darwin-amd64.$(GO_VERSION) - mkdir release/$(BINARY)-$(VERSION).linux-amd64.$(GO_VERSION) - mkdir release/$(BINARY)-$(VERSION).linux-arm64.$(GO_VERSION) - mkdir release/$(BINARY)-$(VERSION).linux-armv6.$(GO_VERSION) - mkdir release/$(BINARY)-$(VERSION).windows-amd64.$(GO_VERSION) - GO111MODULE=on GOOS=darwin GOARCH=amd64 go build -ldflags="-X main.VERSION=${VERSION}" \ - -o release/$(BINARY)-$(VERSION).darwin-amd64.$(GO_VERSION)/$(BINARY) github.com/pusher/oauth2_proxy - GO111MODULE=on GOOS=linux GOARCH=amd64 go build -ldflags="-X main.VERSION=${VERSION}" \ - -o release/$(BINARY)-$(VERSION).linux-amd64.$(GO_VERSION)/$(BINARY) github.com/pusher/oauth2_proxy - GO111MODULE=on GOOS=linux GOARCH=arm64 go build -ldflags="-X main.VERSION=${VERSION}" \ - -o release/$(BINARY)-$(VERSION).linux-arm64.$(GO_VERSION)/$(BINARY) github.com/pusher/oauth2_proxy - GO111MODULE=on GOOS=linux GOARCH=arm GOARM=6 go build -ldflags="-X main.VERSION=${VERSION}" \ - -o release/$(BINARY)-$(VERSION).linux-armv6.$(GO_VERSION)/$(BINARY) github.com/pusher/oauth2_proxy - GO111MODULE=on GOOS=windows GOARCH=amd64 go build -ldflags="-X main.VERSION=${VERSION}" \ - -o release/$(BINARY)-$(VERSION).windows-amd64.$(GO_VERSION)/$(BINARY) github.com/pusher/oauth2_proxy - shasum -a 256 release/$(BINARY)-$(VERSION).darwin-amd64.$(GO_VERSION)/$(BINARY) > release/$(BINARY)-$(VERSION).darwin-amd64-sha256sum.txt - shasum -a 256 release/$(BINARY)-$(VERSION).linux-amd64.$(GO_VERSION)/$(BINARY) > release/$(BINARY)-$(VERSION).linux-amd64-sha256sum.txt - shasum -a 256 release/$(BINARY)-$(VERSION).linux-arm64.$(GO_VERSION)/$(BINARY) > release/$(BINARY)-$(VERSION).linux-arm64-sha256sum.txt - shasum -a 256 release/$(BINARY)-$(VERSION).linux-armv6.$(GO_VERSION)/$(BINARY) > release/$(BINARY)-$(VERSION).linux-armv6-sha256sum.txt - shasum -a 256 release/$(BINARY)-$(VERSION).windows-amd64.$(GO_VERSION)/$(BINARY) > release/$(BINARY)-$(VERSION).windows-amd64-sha256sum.txt - tar -C release -czvf release/$(BINARY)-$(VERSION).darwin-amd64.$(GO_VERSION).tar.gz $(BINARY)-$(VERSION).darwin-amd64.$(GO_VERSION) - tar -C release -czvf release/$(BINARY)-$(VERSION).linux-amd64.$(GO_VERSION).tar.gz $(BINARY)-$(VERSION).linux-amd64.$(GO_VERSION) - tar -C release -czvf release/$(BINARY)-$(VERSION).linux-arm64.$(GO_VERSION).tar.gz $(BINARY)-$(VERSION).linux-arm64.$(GO_VERSION) - tar -C release -czvf release/$(BINARY)-$(VERSION).linux-armv6.$(GO_VERSION).tar.gz $(BINARY)-$(VERSION).linux-armv6.$(GO_VERSION) - tar -C release -czvf release/$(BINARY)-$(VERSION).windows-amd64.$(GO_VERSION).tar.gz $(BINARY)-$(VERSION).windows-amd64.$(GO_VERSION) + BINARY=${BINARY} VERSION=${VERSION} ./dist.sh diff --git a/dist.sh b/dist.sh index a00318bb..e5be8180 100755 --- a/dist.sh +++ b/dist.sh @@ -1,45 +1,46 @@ -#!/bin/bash -# build binary distributions for linux/amd64 and darwin/amd64 -set -e +#!/usr/bin/env bash -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -echo "working dir $DIR" -mkdir -p $DIR/dist -dep ensure || exit 1 +set -o errexit -os=$(go env GOOS) -arch=$(go env GOARCH) -version=$(cat $DIR/version.go | grep "const VERSION" | awk '{print $NF}' | sed 's/"//g') -goversion=$(go version | awk '{print $3}') -sha256sum=() - -echo "... running tests" -./test.sh - -for os in windows linux darwin; do - echo "... building v$version for $os/$arch" - EXT= - if [ $os = windows ]; then - EXT=".exe" - fi - BUILD=$(mktemp -d ${TMPDIR:-/tmp}/oauth2_proxy.XXXXXX) - TARGET="oauth2_proxy-$version.$os-$arch.$goversion" - FILENAME="oauth2_proxy-$version.$os-$arch$EXT" - GOOS=$os GOARCH=$arch CGO_ENABLED=0 \ - go build -ldflags="-s -w" -o $BUILD/$TARGET/$FILENAME || exit 1 - pushd $BUILD/$TARGET - sha256sum+=("$(shasum -a 256 $FILENAME || exit 1)") - cd .. && tar czvf $TARGET.tar.gz $TARGET - mv $TARGET.tar.gz $DIR/dist - popd -done - -checksum_file="sha256sum.txt" -cd $DIR/dist -if [ -f $checksum_file ]; then - rm $checksum_file +if [[ -z ${BINARY} ]] || [[ -z ${VERSION} ]]; then + echo "Missing required env var: BINARY=X VERSION=X $(basename $0)" + exit 1 fi -touch $checksum_file -for checksum in "${sha256sum[@]}"; do - echo "$checksum" >> $checksum_file + +# Check for Go version 1.13.* +GO_VERSION=$(go version | awk '{print $3}') +if [[ ! "${GO_VERSION}" =~ ^go1.13.* ]]; then + echo "Go version must be >= go1.13" + exit 1 +fi + +ARCHS=(darwin-amd64 linux-amd64 linux-arm64 linux-armv6 windows-amd64) + +mkdir -p release + +# Create architecture specific release dirs +for ARCH in "${ARCHS[@]}"; do + mkdir -p release/${BINARY}-${VERSION}.${ARCH}.${GO_VERSION} + + GO_OS=$(echo $ARCH | awk -F- '{print $1}') + GO_ARCH=$(echo $ARCH | awk -F- '{print $2}') + + # Create architecture specific binaries + if [[ ${GO_ARCH} == "armv6" ]]; then + GO111MODULE=on GOOS=${GO_OS} GOARCH=arm GOARM=6 go build -ldflags="-X main.VERSION=${VERSION}" \ + -o release/${BINARY}-${VERSION}.${ARCH}.${GO_VERSION}/${BINARY} github.com/pusher/oauth2_proxy + else + GO111MODULE=on GOOS=${GO_OS} GOARCH=${GO_ARCH} go build -ldflags="-X main.VERSION=${VERSION}" \ + -o release/${BINARY}-${VERSION}.${ARCH}.${GO_VERSION}/${BINARY} github.com/pusher/oauth2_proxy + fi + + cd release + + # Create sha256sum for architecture specific binary + shasum -a 256 ${BINARY}-${VERSION}.${ARCH}.${GO_VERSION}/${BINARY} > ${BINARY}-${VERSION}.${ARCH}-sha256sum.txt + + # Create tar file for architecture specific binary + tar -czvf ${BINARY}-${VERSION}.${ARCH}.${GO_VERSION}.tar.gz ${BINARY}-${VERSION}.${ARCH}.${GO_VERSION} + + cd .. done diff --git a/docs/1_installation.md b/docs/1_installation.md index 9eb3939f..8ed72b81 100644 --- a/docs/1_installation.md +++ b/docs/1_installation.md @@ -9,7 +9,7 @@ nav_order: 1 1. Choose how to deploy: - a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v3.2.0`) + a. Download [Prebuilt Binary](https://github.com/pusher/oauth2_proxy/releases) (current release is `v4.0.0`) b. Build with `$ go get github.com/pusher/oauth2_proxy` which will put the binary in `$GOROOT/bin` @@ -18,8 +18,8 @@ nav_order: 1 Prebuilt binaries can be validated by extracting the file and verifying it against the `sha256sum.txt` checksum file provided for each release starting with version `v3.0.0`. ``` -sha256sum -c sha256sum.txt 2>&1 | grep OK -oauth2_proxy-3.2.0.linux-amd64: OK +$ sha256sum -c sha256sum.txt 2>&1 | grep OK +oauth2_proxy-4.0.0.linux-amd64: OK ``` 2. [Select a Provider and Register an OAuth Application with a Provider](auth-configuration) From 14601093c4f783d75ef580b8fac1b85a7f235c3f Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 30 Oct 2019 09:57:24 +0000 Subject: [PATCH 23/26] Add logos to docs folder --- docs/logos/OAuth2_Proxy_horizontal.png | Bin 0 -> 110827 bytes docs/logos/OAuth2_Proxy_horizontal.svg | 1 + docs/logos/OAuth2_Proxy_icon.png | Bin 0 -> 47842 bytes docs/logos/OAuth2_Proxy_icon.svg | 1 + docs/logos/OAuth2_Proxy_vertical.png | Bin 0 -> 56575 bytes docs/logos/OAuth2_Proxy_vertical.svg | 1 + 6 files changed, 3 insertions(+) create mode 100644 docs/logos/OAuth2_Proxy_horizontal.png create mode 100644 docs/logos/OAuth2_Proxy_horizontal.svg create mode 100644 docs/logos/OAuth2_Proxy_icon.png create mode 100644 docs/logos/OAuth2_Proxy_icon.svg create mode 100644 docs/logos/OAuth2_Proxy_vertical.png create mode 100644 docs/logos/OAuth2_Proxy_vertical.svg diff --git a/docs/logos/OAuth2_Proxy_horizontal.png b/docs/logos/OAuth2_Proxy_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..1020c52db79ad511ad06af09328b65b8653e7cdc GIT binary patch literal 110827 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 \ No newline at end of file diff --git a/docs/logos/OAuth2_Proxy_icon.png b/docs/logos/OAuth2_Proxy_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..720f4ce367043774a480fc634d9cafb6dc499c4b GIT binary patch literal 47842 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 K#<_<{5&r{1W>;hY literal 0 HcmV?d00001 diff --git a/docs/logos/OAuth2_Proxy_icon.svg b/docs/logos/OAuth2_Proxy_icon.svg new file mode 100644 index 00000000..5b0837f9 --- /dev/null +++ b/docs/logos/OAuth2_Proxy_icon.svg @@ -0,0 +1 @@ +OAuth2_Proxy_logo_v3 \ No newline at end of file diff --git a/docs/logos/OAuth2_Proxy_vertical.png b/docs/logos/OAuth2_Proxy_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..994cd0b7c99d028b24e93dc43b82c31180bc8ec1 GIT binary patch literal 56575 zcmdqJbySqy7eD#{GK7?XAfbRtr@&B(fQTZEFm#R51JZ&tQi_78baxB`jM807qjaYr z2&kZdG~Dy>e(!Is`_EnL{(IlG-ZlE1+GodS@3YT7zSPpVPf5;94nYv*1LeC9A?O?i zf)G`t2=Jv{WqBU_kU1+GxE1fDmILxSvcynSj&N7}G4&%ddPUftTg^=BUn{TOWTX?;$~ z+IMl+b#ZAahY(Q59_Ca-1%4qHQb0Kb5ndRDf6iUS5r7}ky9Pwyhvo$y-Vi$tniBlT zv$ryXpFsH#B=~`X{{J;FdZYRhB%h3U|HmGMD%v>GEYU}KtiL{$+_-tW=;Xj?@rQ2| z7AsRffBF}NLLEkC+pq;7FGqbjD1#ukIu}>hZ$Akj%HS?93FXA&uT_HqrPhs=gL`a0 z@)tb`Q`-`qe-z_wWLSUwJGLZ%Z0JTI`8O0?ixU}E*N%PuCCpp>u_j8Ja9$Dbl}@3$ z&xj%-fQW%ebdXExGP^e<*I{8cu{a~kLHzN5dFuh4~AmT?& z_Ano3H9^KjK=|_23<9b5^N2tU;FGf*A#))Ag=t8H5o~*fwjV10CSE-unsO=d6+CN# zVVNn3xF>S}6u6E@kq5ewVW7Q93(?z@wzvs|!Rv;^`Q=zQDtS&EfrSWDsXnSAkt+bt(By>#eVEIwF}AfAn1s;Q}Bq4`+!SCZnn_JhhM8E2Dym) zgs;I+m@!BaBfuAkxZ6bks;5btIx+;i2T5tyCw^Py_v*17nCBUUr}J zApQ{=&s%;Y=28a0o50>&z9f>uh<3b1T(SQ*xx<{Mv=1($fy28MF7-y+@*~51UPXUG zOH+0#Jl_-_)ZK@$ju1HjvCbGnae-!sP1n7&)A~(k&RWmbbYtG>XS;Iey?#72bu6>0 zq?B(2{7ihnlG>ZKAQNSSHPvuh{-<+M?K{HhgLP}_gviQvf>!vtluB|=rQ5qbhCt_OMz)*})gNbwab*5Al4Cl`Q52>=bB9dHKST)tCRmXK$u5 zmEEN4{fV)e=leqHs&QHtk>Y>zvU2@*8*=$ufGg||i-uNjF>AISe*Ym3CN&h53{z6x za@8PW<k2HAPcw#uRw%u06>nHj(Mp%4!%m28M zS#$v=sJ>es7%tZEGzq@iU@Ta+QHYdIw#%Q?3e~C4rk_l}5aF+bRf)ykQ%A`}VeJ!>@Z>P90^LuOpberkE~Du^1J6)IXh`QZdds zswXmlz$U}3?=UL{Z+XN#PaKL!JZ?;R|}47)(&u4zEjALRb{@2CEG zfnR;PUw-l(hd;^rS2z^V`@8$=D_y(Cmu|?D0I~&X2QBTKxDs532vpxmX!Rkauot#0 zg6aQjRMvdKMr!wwJtc^O)am23aspcbKJ(1Dxi75>DAdhXrcPsWr{8wT^iJXyuJ*qT=A#Tph{nZ4}EOJQHLvuv^5}zYfB5y$COvRzjBWy#+JR;VdTTn}O z9}FP_L&S0}P8$QzarBQRmewd%_mC=E%pr12Nc7M-b(?x%%A85rEDbg)_E3526Z!94 z>C060vX`U&`FK+W5+@o`pUBq@50W}UU)XU3G=l=hvH{k{K6H4s)!k;h&yk~JpNou5 zC6BK_dl7iVj|%Y~3$f$JQ7zv{Z3FSv%hS_CRCUh64|5~uDCJAZFo9;Yg94#}h|Z{a zYrETpHXZ8W+4{16r}AGx+bok>JN3h!_bu;c==!10G}8jpF3kUg%L%;i8xU>Zn}j|J z=B!R@A2rIrv>-7@m0U zFkdH|z}B48`K}=zPT1D`Vq`+^<(W zki{eFQLw2*6Lcow5uKwJqW+JB)G<*y@@2VwWELL=gTsfA^OIgvf5eLq|Me4ez5~59 zylHE`6FKt#89?-R z*gZ!Nd{c;IS;XOE{dFTMYY7?N^CX>jC*Aj&+afS!Yb>2%cm%0>j}E_CjvlurJ%Ol% znC@xXGe@_Z8f6ZZqJGEnnxvS(=<-{pQ!eB+l@&4sF`THB+sdf?E7raFB@%uX7apLpxV`i_GyPm!aKC15E@2eUG+uYg^>m|jz~T3z$;01Z)-OW z%qLv1A1AtgdJqux@AwP1uSa3b@FPq*}maHxcTKA|c%jv$UN z*2(Em{u$?ev7)M2Mg4LSk@<|Z5QU%q%>^DXbQ_hZmMMqYjZ80sh?HF0xubmqbczs0FY%-LpbU6 z_>b|o*_oLsZqYlQ%?1gUBF6B0jGh@#8ffVLM_WI{Q%Fje~;{S|D>2QjewVmqAnZlb6{EDJc`l zKLuU0x)HWuXVntPX+qa?2-tn@B&!w%tTh8<0G)~eQBh^>7K{PT7ZCG*cCf+Vo zt*1PHF0ki;Dp{Iswtr6#kk!^XXD-04Xaw`U{1~la+ zgJKAagBM|7Tn@<{91Tq z7Dw%75LwQih5~gS4RWJH32UZf1Zvsr_uh${_B% zJ!ElXP%mdhyt!#(t$B?*xNE%ffxH#vHp<>-a#ZZ3UBUjDXgmUnyWUq;D3?6#LOJUz zQDgIgU^^a<@K&B08jI3VE}H?A;OXts`YONjPG)6%4MFyc75-Y)8Ef!Ps=URtL;?{| zaxHS(&3MkOOx#MPx}O}GEk6Ky(M_f`R>ouP{(-Ony7OV}5CewWfCi$;wAuc@=b*$v z=ACvIa);jW;43tv@(Z|6zKcra_T{$- z5zzJvf=?r_R-Lbx2R$dnWI&^?EbJ7}_DKs$w#cb%g@Y#;j}VO?b#>Y;|Fz148oC5p z>j$>J-s|AS-{?Sya^r$t@A%@)X3|eS4PArg1%RfPo#6V1zCNJNZyR{J$P-P8rnKbq zgZ9hA$25_YkTb8W`Ici8rKOqyQR0IwyGks!cCHPx`x0!s8MRa0-OkF=83R^*_dIFl z%0COX9DC;DF{s(Z+r&yopL1?Yn*8roT##B0`dOW<@70_n1Z1nOS>zBkw5;alz)si7 z+}R8a@Gw$teWF4%83Fyc`=-d@*12FcQVcr)DwD7I`*@qNt~_oi!%fz7eDf-5VlRa_ zhz!GCkVZwTr%nV3=-MOaeov^$2ZwV=p()P|4=Ju4=15x~_Of{7xm{S3)D zi2eC+L_^wg?Y6>k;ug1EA~DU2Zf4S~aF+DjNmTcZBeNlhASc{*O4j?uzeh5xWRC2l zfDDm@*Hu2^%6sgwQ)_P!(4F;#2q&>~9H2=+n_BX=VHYK2nQzk;?ileL3PIwp%TDcC zdR>O1E6UG3%I9tie*-w3Ps<$F5r{T;o*1d=M`}-T0RerCfBtG`m`}G>CVEmm-7tt# z%aG{&XxYg08Nk4_FsZ)csPx`^R#Fl*3(mY#k)=>7?PxRMj%`u13t#Gtqc1U(0j&~D zKh@;RWg~a6_)xCU@;rxIL~d09L?J(;wXR|+=2=bFmc@LKbEx% zVjPzb2ln}qe)uPY8KF-~x49=Xu-*A`LF@_6y>7nDCB|rB7npO2k^zz6+5;`O=;zE$ zF$B<;f%o?7i@NB=GLCX((6rj6RpX8Pp699$1@@?7O63IhV#pjatXi3E70B(Mo;M%c z8*rDJv}YxT=I;b|?U{Mw_19LErW7)jTA8c!uAD>q{~?6RGq_{N|7R!8oO7(80Nxlh&c4hss^Ah74|57@va9!031^%1cw4sd<2x%y!+^OhY1$%rPrPS-{4 zxU{V3hfjJ`K;M+NO#KtA z$>Ns%u~!I%GCm@{Xgh1UrA($hg~8Kem7MJst`#8!me}QyDv(xDh*W3=sjG{(y$mdf zR{9adHsEuihtyP zd=B#zt;`9ab<16b)lnjf5Q>g`$HqtQFz?vPtW19LeOJWsB1oLMfic%8ubA=vGy?hy zg12r;`?W|->b$lAjYWP4vgCJ+n7lYHUqf*zZiNCgb>fLyOfMta+b<@hudoD1DRvx3IoP~KN7bIpzXUxL4HkmPt5PD z4S65K%vAgub7Kt}>4za`TQh0vZx&wiB$1ruK+TG>LFb3OMB6w7c|QTk9zE2K9oj}A zl(OMEE>j<-AqLm47Z60*a1EC!Nls~h^o-Dqn4v#By+$UT6`nQfZ2E@Z#4W78HQ&fE&~AtHmag{Scr)w zFom2d7K$H2ko0yUOk-OnzZw6|!UUW2xJ!AX9$5@Yk%!WZYNY`CM`>xfu@?|P8I+s| ziB%3kdVo+7K&{z;S{rg~tcn*r8-ew;x3GC4N*IVFxLvz5p_@5^0}Kj$)u%gNFRJh_N~Gs#09sYA0GCuLu$1sOJihFcm@6AYhU9`>|%TFq< z#gTS>_G_)ou9Z5S=X_uetLhtAl)b<5`%YX4(vmmUZkBg`jSMI(X?8}lb#X>b+;%iR z>}O7eFX#3U07Zy2Kc|^Xb}95HDW4H>^3Z`Vvb+d_>LXHupoR`Ke^$6pTJqm zYMBFBP@j?aC5lWk3@N{(e|LkV9z5Lza&m{?2CM4s)}u6oFx_OnY5OAsbmt*?7xE-t zJ4Jdl7{FcpW46zC>pjfLN4d>;Cpe#*Tf2L~0FkGp$W`+wBeVvoj~!vgeTp^8`kni= zQF`hD^(zjL2^?@>)Y7Qo1!QEnuZnHlTMmk()DF3h<9H1#3~FSixAaA$J}`^y=w@p{ zS@AHD5M)TSgq&Z({s;}MqBnW*&!YDa8*c)56pw0scS)po@S>>J-YS4)2LQ`~Y0A_V zay>^g-jFJ3D{~w+n)ffzE$!c$v=B5uNlxk@aGv9wqn5x_6rdmKj>bMrvp%xc8w}$i z3OD3KQ>wm4kk57Pk+Tjbr!(INbao7S1u`VB!##BqF?~&cPl(N zvTC&UOW!lJiRm&folt;{mu?6J<)?kOtUvoq{nbO1paN~`D}J!)T9f0c_9%W&c{#XulM zC3CxXn}RLBPgBnwXw~5r%lg5?C-y7Pza$tca{rg%KV+(sTU7$`qN=e8+|@Bu)OStO z+3Ke@g`gj!0AhQ6bF21|?)MB7*9TLQD%8H>F3vy@o;|U2TcRoKi*0Zg3aq5jF86gC zXEXrYD2SuZ9A@6iNp|^naw7np$ij1*B18Z3y{jj}f`H$_vw|@t4{Op_S0$Um^z4GO z)N8&Je%L32pg1S7MM~}Ev3{Te#mZK%z#fxX?5df-pzEs(s|{)-RAXD1@;d{}j#?&D z7NTaQ*tJ(`UzZe#LV>YS?J@!^!Kmc=-%L#FVDyhBgyaS6{`It}3HN}6g_$F3C_n9} zv#D|6lCY$Ygd71RueO@G_KHIIt4cd{8QEQfwrRkZV72@Twp=p<;JFI6osk_uZ5X>e z?p}3+Hj{^T=21lD4*rBtps$0ajPu?iFqi=;^7!jGwAoZ*$?B|{EFRnuIj?eHN-{et zJ!X4V4ccO@>hlf@;jKrQQEx;`dJ|r`b>e_T^&wUTnOkYCmvQ)ies-!+AZh>#@Uw#F}*MzfKYqk?l%)*Gm z^~)7qP_4{Doa&;dB5h?maFpZ-%n|x1b~%cw2_c3$neqg*%1Ec5;-R z-CaGv2YtN=kmO@dE;pOazr5MkHu%)I9xcN*D+ilP!>m?G)!-_OF@fs7he4U=Njmxc zoAmKqxCIkflxj6Tv*~2rDZrk1jH9+NqYqIuDXJ{=8?lq=R62wy@56@{lpg`@2vsdZ z%6;85_0PB*u?6;bYl;bh6o#R-pV}_5lbfm0a91D&a4b>OF+ipO+a2No6!ERv%9w5V zH+s^9a2fQ4>kw^PnQpx@pR<<;Lvi+9L6-=OMSJT-*F<1YT=gW26f?#5$TmvxB zvv6PD$x^22-c5R&LB!`VQNhc%u;8SS^aR+=!CGS;mE&*Ar=sPGe;8tsz1<&751;pY0BHOkF*1W|w`C zyc{I~V^wuIPzp2DNO7WEz(7D#EMIa3hGrJv#)^@D!a%Hy#jf?MeP$Tbq zpC>I+ymy5HNBb^R;;Q=poqPt#HL1%{<&HF_e(5@L^QJvZD#bZZd8l)>4Tn4d$4?YC zpIPTG0JhrZyU;`IVyk82xK}4WENE5ZwK#W2mXJ8YK4H;16}E||ukd**K&jEzC?r7O zw^(L~Jw&=SZdzj4WJw8yN@loCGXYXIIPBWcYoUiT5AbUns3tOuw*V#nKq_0zLR}K- zPZF>qr5IvQRe;T1AQ=rJ3KJY@I&0|&=oI@MhwY?P$hIBxbSAoSgef>Fe+We0j znvcPA#vEi$$_9tOeB~q z&L&gc_ZK0MXEiU*ynUeP@ps5vcjWZ2^fVpQCcUQj9)$Y?IW;PpVznZkg9k3&cMXPw zrHR>g0%dZ`Aex@`vC`$ep0%aZgJdUE$LUX6mo)Fg(FF@piGXO^v>bxQ8n3H+KN->L zng9>D6N|CFqL-tF!DStdWV&qa$oTbr;Zvj3qiv@--N|NYy@#RdPl~ze1u7K3Z##P_ z-PCO&#dxzj+IJQ@XdKc(pUVC;>g#^ROYiSHF?XQv`DO3Z6|>%bhrT&{EI#=hBu=&! zH55ZDZOR)iE`w{?deK zhW63wzt~RpP{uLR5-Fu6R3cspG@=gSMmm|J)RGz+8VCMV5#U_4KEL>sYvaR{fQO?b zP|LLMzk(-)Cx@y{*bRSlfXoDd*t1%Iy4pX-8>o?Aau{DSYt~`@7}tQpL+ zQl@*6O7;E1Q=VNdkldx`;l%BVdE2DrK=N9E`9@7ojd$Wpi{7Uno1!isXa3<#`13(s z``qUBNZZbqBy71W8Kyf%r}f|^(0I;a35UugrK6|e#d8rdu%N#K&6o}IJc z*Y11IMJwiUV(8q{t%+>o^QK0dQ~D!aU;XW(C|7FIm&ZvR3=%+uYVL&ZTY7E$-INBc z&g5#xDZYjABm z!pN{*hL4*U1a1B)$aX9X2biLo_DmO5qj5Rp$)C$t2Yl>86ooGG>pf$y;mfL($<<>*jqQ79Q=Ay#LVB z<}MWJ-f6Ws=vS8dmkZZ5_C6-zo=t%Ww8X7ppp*ExEqD5Xn?t#Of1&s!M>4uC@|vZh z!TZc@)gNtYX8Z5Oqt8Q~_d8pP!MZ`-I>U|jgbeKQh7UYJCKI=rs!BJy#G9YlI%on) z9{_lbD(Y_}J#O3AkW^y2rDh|_BJtB-KnE}^hnsj;?Agd_zCECn`#QffO19;F zK!AWOmzK-!@B2yBAKQ#XZUmHK8xMcA$7ek0D^*l>qhD^3(`0LQM!Kdlp7|Fv}$*L4?*t$E*4 zB&)Li6AC<9szc_aJ>D8>D#ivJJzi90$7k}xz7LCSpwQTiNX!Ct9!uBa-y!7ypqO*$ zKQ%X!?Z_*^?~iPVJ!=s#@GCnAMHjiV$8Qv>k0AGHMlIQo?{sBSy9#smK=Rg4Zu_|N zqu4ArmR6byHBJsT)xC&p3M7>bZ9r8C>5F`(6zvft6Ig;HzVd3o9|Css{Yv@N&#Ww8 zcF_&IDzOBD-tW5joJNp|G^6L@wNdH~Sf3`~mphea1+{E$bcAiqXu3H}SGzjeO&L&8 zPoTyu?-JAKRMD4a)Zyy-pauYQk!({N$R{GW_vo71=droASM?DL|TB)oo{RrsU zdWSkzTB6?EZ|k5&UE4(eUQzu%5FS%2#`5PKs~vwt-KghFvW zFGxp_AZPondqMb1i@Vg{9t!C1Sm{4%HwP(mQy2W>O_42?SNdj_&V;D3b6hwwo@^|$ zVkiN-8;p{gg6s`jJFG0WwHO`xu^82nh_$4Q5af;Tn~c^@0Nh~1ty$gG8u5lx~E};H10fKapJvzA*af zog(R9@f~wQXn%;%gTc+gtErZ-Wgaagh#FgRPTy_b^#B;jE?S6{)-+)EulA6Q#yBGYObUf5q zTazGBEVc_R#Q-@=W9@~ySXpMXOYZKq=J5z!Lyi3;mNUd+K$+U7=r(FEz#uJ#E&GyI z(5ZBm-bxpW&#Vmt;2;2pbe$Gf%W%BM6V;tmB-#e!rG9Wqm_19dBLZx_3U~lmY6_CdN_%eX5+Y(}`)asn=wfxd>*7!COB7 z;AQIXE4SC93wUKU>0)a9@au=dsVuOj;ND*kkH2M2VjW>+!^v3!Yx4ruW6mWk+}zwNeyLPBnU7EDkETaa$Rcno zm%jnbS~q}eLfuWmwk`cMd98i7X+`&MN&F7!In|p9;1KO8mViD8)+PJ&ybxy?#Y(FJ z^Rs&FO?s2c7RIc4R1n}t(fg*oT(IHwCrOVV>(H0ER<8_pS6%1B#DU77CKW%Nb|GM2 z8jNYjBJi~qXMlHE?Vt3MdaT|_&WkEV%-U#MBv6Bmn1|nWOt;v8AKLLepZC$aWia|f zr-FJe76Bcs>@2SAm_)KAJszS3MmD8_#owro)v-==<%&g~2Of!fNT#U(HrF>ZKu`@> ztfQNQk!2L6jgRdXAL_~o(&I&w{qo==u#t?IjQdpfe1*Kw_SAaE*WDr3I&mRhPYH9{}dPnR_gLIclvtDR|z= z%%DuZHHr9=T6>i!56A37Z!#!_v+sl9*ZF%_*_Oxq-D`QfDP01T0=)cfK+;w`YLE=w z_vkKLdk$cv)EL+?_0aqR!73Sq(r^;JGr#{QfpFF zuIRn>T7tkwuwtJ4+*AZ|07|^yW3E3U?63c6DigV*{>PuWP+qg3WFZEh=QGgs)*L=E zwrfLyZeWxzcZHHtQ(d{DP-v{)l5zwwp=cc=*SlUs6KzyF!YPkKj#|%ta z&81t@L3543fIU+Y5{SBg9eSJHN|<^^d4r+iAHku!KrNuLx69)=mRr+T-5hMOB-8=F z5jAXsw}9J{<;JZluL(9V9$8_r1d!2N1ht&Igz=;Qv|-}gB(*f|&uH2h2U^|pO3t}k zSU7=bJpYUYid%w}^8Gv;SpN!8%C_*GJf7h2o;VryEPa7{8`ry%@Od`}np`;lLh|co za{i5&DD|G+51Fg}Nsq7Ld5yPyDt#JB>aO8d<(W?|J~Q3bHXPZozO^@ zWml!rk{cuy*WmCZ!uN5{yYA)_-c41UPpAG+hzk_>1(?YXh1!J|x4sGspZ?bKSPU>L z28WKi4V&jqw{&IA^FZqUQoY+E$#Q0;rj`0(mj1|3QowB`mEdqmiYreBR^ix$aVxI6 z5`=yDJhg!$ecYelKs0^>B#&5Q_0z%8d;RG&9u-F8bGfFHku|IT4!I$5KOBv5h>jqYff zYgzj0g(Y^0_&n2rCWYd4aK(PMluh0nlb8Qej*cY38I7%x%&9rA;HpwnJl$w{Z{R|l zrHDbb*_fay3DgP)t@rpgB)zHy`2&n*_B2mFU{AKKnKr`LvBowMlvjilXTHVpzf7SdH=Xo`Qrz*IcmapzZPca^n>Iq ziYs6Aw~@05$|`W4j_O>^^q7ID)272MTga z!2O6EX=97L6CV^EE8bx}GQYq8qVK7-!+7Dr28#Wcv(o5(=kp=RF~%C~@_5p1i2Xh| zyXZlOByC8qeZfv*de7tmeP5*-u zy#AYYb!`N-4fo%M* zy}@!TCAM<}xf>ENb`6)PbHMTR=BDZ}Au&YH2`<~HZx?ag+@VO8baR+5I!vx@wQj5F zytAYcad89*_cveaTHUc&=v<$MpyhYVuh3kN)oqRauY4na=jGl4cbsD3;uGGSo2udlmmr>50LAOcG1S1A z-U0{u>jZ=(H+-%O1&8%;;u1BNoT_DmLkR*K6A~Z0&1Y40u(DWBSMc)HcU}`IAL@Hx z;HI=1uDgW4S9lfFJp<0kf&0GR4|X8>@Xem3_psH`HF$fIf7Exb_r8If$6Mo!sNj4o z1f?nmhp%&2r%Sa70?2d%2SOG{!4?3($MYkhSj;jzuBNtAF6AjmB^AMtoaS}B2hLj{ zk&s-O@VHHKt$7)gx_AvqlX1I-hXy)PwI=Z^3u<{1HQj~DomBeESIxTW&l34$7IHl6PSb!RyP&0yur48mZBVlDmaxSFI+bR>w& z0+|31)V8zm!eb6y@&;8aaCp61dM{Y*|Gas4l*!I+{^3Q9{ZQ0qc*lCqYY4m zg4zMuk)HRHud|+j>ln3m!emw2Q4@_Nr-D@ReHJKC6_(UjPtDX)2EYAUnf-~mhKWl` z8zaeC{~RNXk~({ALXaS_UXv2pT&j+ugqm4lbN{O8WgDgb3T7?FPG`8*?W6PCjSJW2 zjKd$X3==rMjD8n#V$(S6us4o!T<$_mGb+EmCIGRamlJ>+H!@|YhLGvK?dFk&cM$b!Q%V+ zaevs*Vd8(msQ$3=BOwp=TDu1-yC5>YJU&f%@VESqsk~L+ez`oj$nJ$LDF0MW+^gEE z>A=t9FJqIhSV)3dT{^(%hKYvG-PcB$;8tJSdbF=`u9?cG&)(=#QQ{ z*@V}TJ5u5JW!XXM$bxm23P6s4{2AnHrfx7C_cZBo2kft74?b_e%9PtUckmLd^U(A? zFS_s0E(qL{N5UbZVmO-&%P*Pz&rTqYhVw=sY@c3qZ<|h1n?USb0awGQ{%&UD3~=)U zClq#GN6s`~9DioCKeX0<`q2o*A27HpHsI;evml$CHF?pOe>h;pJ6+wXk7+Q2Ur-Bz z>fz833HZ}tp7dDpEDl|8uPeV}rEK6<+4M|I&B1B&*A)E- zA6h*u1Zh)7Ob!L^0;j)D;+tN-@l}M)%^_ie-YW0G`R7id5#AdO;2O66TI}?(-{Scj zX9a2s=Egj$GJNUhpxWJl)8BIGM~iHyyK6ZIPAR__ijN+ESmVGGwKL-cqKAZ@`yf%# zQ&^Wq@9W2~{rwoe+}ZsTwILp5abA~cjqM)W?(ua9I=?A*GPQPZ$0^nBM|-}9DyVOG zXyqn*GpH?zvdl2KTmcC)6?(AWiV}!JXGq`h`@5?I?c8I90 z1$RIOs1b$!`234&|Lbu9T=qh~i()~2CRswoHIKOlz~hStMmxTBe?l+8IttZ0R=9+` zvJLGH!7sDC?J3cPA5ekP!?sQB{xTk1A_s2&-muf_hH`6g{{xlq+usPRL5hVS=Uy<6 zf`ccxgAvp=&U}*p=X!%a8Kw~wCP)tI{&^7s?u4N7tB%aKsk|jnW7k`gO79k9rB&8J ztP2k*!t@qD2tk^E_{aj@Vl}?-F6G5N@Mas$G5w8+6#fJX!9h1iZGMa%xcl&4w58s; zjU!8$zN{IZ-Fb5pGuRQ1IMOb>?iozewhD9I1=rAB3(?LOl-RotJ19=KhU(&om9Z+50WDda7_~w z_%G3zE*j5u1)N7ANFbsHNdS^DXEfn?0DZ$fcxzBU6d_Z}^{bWy^#783gO%jMSNHUl z(d~+lTx-Mu6H-7Qpc&CBu1jcj0dS0fAOmrQ_c5c0Ea zdVuX~;l-=0g}>coRcl|543_P$!*gv0Uj2`ZS9%5V2L^`MVAcj!k)0(WIN-ln7-mI% z??;T#T@WrmSEBVzMkJbmZ9t&JwXmg#sLz1t`yh-{l!#o82(K#iQs;oX~wni=BUe5&Nox z@7p?^iC8;?qtiAQ4mcQX;|vN$APshMHw@tq9jpIMcKhsa26Q{ESeRV)kpC3jrMZX$ z$E*A4yid%@RWO-6{e>dT)h`*p)P!4;{wwU6iWC+|2c8;&vR=wqR!h2J4jvlPRhV?w zpMASgW!-f^J34+2$P9|7+c85K=p;llf?}w`vxPwRXB&&f1_$aZfrb~1;@>21gPyty zMHp`}%j!MATxawdbMIPpZqn{#e&n)Gj5*`LU8^U3v}Bk#@T>q(rW|C0Bgc?m@TkVa zPZ0wAOBW&aXlO|mJ&^fQMs2p@aGkQ0Lp%}#TP~eX&Dkh=Ei`XAv zC1QHmGHFbQea5~SXR4I`r{m466ijAmgKbICcF7B^po8VrZ_x{p?QdISu8iKT4-7jG z){lPm;xl40LzM9k;S~w^3RGV0!Uoz&GKxNL8_)HP7>+q1d7(RBih&T6s_tB589mqN ze5U2D=xf8YF(yFHt!I+#Y=sMyP$MqQV|=(SzHh2nJo7pGAGypZti6_x`LxiMeWqe=!GYz946&3pbTQkclt7TF#&> zy68pfRj^IEKhMv=mRl^UF9g41dv0KT9 z5k)&ng1?muKk9hVouqcRUh6;pF}id*zg@3GjS7TG@PH1kjIIor`Qm;z{u?+$J66Nn zZJ_c2>YQ|!iZFViH9eh_1uHM>Uqa&9`=G1@(s!ZXbST7;34J4us1CmZzARsG;VSA* zn(r+F0|S5GrNHQpo&%yy)Q7ps3$j9i-ATXCG&qC)!iEd#tW`najJ(El zrW;Va#O0{hM?VZ6{D&aClz`SiIL-9AxA=xdwIaBUJ0t%k6=5ScTKzgGcXvjEX$(?c zxM3o+RjkxMJwy7y(IKQ2_5!VbBb0SA1N7zI^nZoZU~Yk@>-9L8BCh96(6Sd z3@S5pFYsfoGPw4FqF2yh5=+o_c@Qy@`hpjpiY5i{TA2xKkO%dNFcgrR2;K*P|MWqg zmY&DG0OY~H33)hzPzP#`jinvMiAM<}##{jFwqCyL;}hH^_2@=NtRHvT*m=-nhgHD2 zeHnd_f4;7fI!@@(+t%Xtw-i=vqu?(21>?5@5FdjE1Q_Kq)b+u-EUotLfds;+CM?Y!C8! z^P*+*9+{vk(1Yp}rMP|J@@@aO9Bm+} zef%MnijN{Z*Edqkc67Uid057hIuW746|nKy?xFO2qEc)*4)A_-Rbr}}?ZfQS9Ry+%)n=e&6tJi`J1ZFzt1 ztvIv2|1VF~w`%{-s9wxWA}0N8BkX4nz=1d0%4Tb_+c&V}Y`M3n>^aIfKKStT6hsRR zNt!2LPm8@jW{jOb4`W{-=l;N(q7kh3*4L{stfIp!o8Vo7d>$NSgzgQzVLZ^SUy9B= zIjtB3b>bl9Y6oZ4U@1WDtS*nLgphpyt1%7#VgzQ`Tq|tXaggqvcM; z{}0jfJovZe7z%fmzoBAqPxp?2+w@s*CGfna_%aU%Zo=tIbr@QvN2zRs*TDOT%32E0 zJpokSz^}OhY6_kGWYCjv)>EGm;cNvI?3?p~K7c1aFvVGb4%Jrvrtnm>QkRra@zsGB z1Xa)A=YRjkK;W~xDTX?q3SxlrAD`_j17khvo)ZEPBF9Dyj*|jwY=hx#{O=zw=zWZw zHxw)5dhtRGbJf2Mw8$qUSs1~`he|)WCNQjB zy1c;a$*%neko;$!6EYdWij7_dX=dL=FsByw#cutDx+lw7l-QeR?3wRAJ3B!77hN>g zi`w6+0kpeY&+f^5A1sqWaY2%OLo&(|`vNBZqMHKv$WC;jE$I>9c|WM0se%I@+G1i~ z&2Rvse7rbmTi_l46M3_{6z%9adY31WA4R}8xcphtWB?}nqKk|K_!47XnzO6((BN?= z-0uFh^Gy_!$h2TC8gAoyWT4YqpQLi;bDWjH9YCVtkl-1^dDK7QxgK$eRK06WdcixX z@}KJ${ILB1`^8f39 z*JR3cn5#g=s_)J;*G4>iunUzxR)J`8^{3)Pr^be$u! z3NdgOo`3PXT(a}Q_RGeXGK>^M0YTrJn(1H2ysDk>v0M8YT$suq%*EKL!7x4%?Y8-w z0*~Y(?9JjLDECUxoZw{O{d50#@5HMCYJIAmicibJrmY$^cox~|KQJ5OGQqp>=Y}D9;}mkMzrn^`a`iJlud`w%5^w$AkvF=C{ya?t4r@nF zg?aeX&^XNt=FndY$6at3NX-6{QF@Uau$wj4Adnr`)rFr@-60+#hvQ~FTA^G0h}g{c z=K?Ix)V1b;2i@?=r{GW?Y21ekU=;L3_%ojCGht*QuQcw#4RoF4A2`I!5&Ya5eBEY5 z<5hRkzR?=RfhX-z4fsAU%FA$teu{8}6vJ@G1KyP3i|4_)=K}O%k1^!lwwok+Z4TKf_Zk|2GxO4~m0Ap-xaP;V}Ly_kfTb)_&zwb*=Lcy{**OKYzOR z3OtGhg7x(Ma07`9LGp4v+2y_hz6O@(TpG2qo5~^nhI&|hT zqjN&S&oj!E<`r__n4bC^(oyGejF`hAqjE*Fyp_6w2CXk2-`SEVY+I;~U}pl>s5OcH zeHFdWDd?5)pqypN_S@S#WEcjXg)8#l6W<8a_J+86S;~A_X%;cIkO%jmLQRFA9yAr+ zD79_@5pi5MjN=dAuT^02dDq*XY_KSX0b=J>-cexenS`cwbq$BEPm)(mgPAmL!6JM0 z{t;RM*%q4I-I}D^ldC%hzD0+8$(S?C7UJBq*Byez^UmT-=L(f8GBT1F3i9&sTnn=j zXG%~gVj@L=M2(8S{8#-y?!S7w=8Q(Gx4grZtWq4Dfr>%FmyCdX(~$S`MVpU+Tt*m1 z6JR5T7*%&B%dyXpk=;p_;GZRcPybu?wAv^Gv7i5}Y2O8i$#-QDbUdU+$I7i1(FUO#^n*Ou>1pblH9US0S!Y z87utn;M29~anNBxyssmQ9kgTYf>hLs(UE!uDtANsvhV6wg5BiEpVxg9g0!ni|M4}p zA~n)la@O}84BPKRkS_~GaW60bx=%N!EN|1VZz@J~lf~w{+wMcZ89+1x$HFrtuP|v+ z%?9Jik(rI$fO%&{(omb>+i4 z3=aPk%(ToMIc}MsuAk~3q7y<-GwqU2^C{DtPL5H9xbfR9RC!+T1)uP>-#92J9a8nb((19{seDD?Zlh?RGunI2iP%2?^pXG=@;eo{Fn zF}ngJ-BF(uLWUWn#9UFk)jIttufWqW0&9G;BhT@bsFxSlWSx{b(=7@JFH$%wrRs5^ z|Nmm|yThse!@rMNR{xNyY_|R_oyO%X~VX>ha zfJT4H=Il2Gj?4FygsE87(E;Yn#i_#m=_V2;5#E`n6UfEtyU(_TS@*uT0;XTsmK@rso)GQprc| z?r2+hPS*e7wh*GNXnBHql1g}u8}s0=OH zyHb|eqPvX*V)4qwE5}Mo*(7U#W-Pj*12a7}DM@kU7`as3 zfD@cEM)ul@Q*w|Z>RMiv@l`9NL#ERvOrn++lf4NLGp&H59Nc*8A3*d}3bV=zlml8H ztyjiZ^1TJnP^08N_`Buj~VH&l!gSFidnP=?4cJkk7Vn`i<7+c8`b|(qw)Kx$rZgGE8P*urwGAO;hd zL*bZh@xK)&LlP^>vUVTam6Jv@W;S5JYwG~q;&C*h(*x(mLd7x1|LcGN(G*dL)*wS& z6aK!pN6SH41UW((Hmo%!`(b}YYW3h$d*_4e%7`Ee0NCy}Ckx&m3!uCPde_U^=t1OM z?4&gPLZ{%sRQ6sDZBXBF=E>r9an+OQ6CJ$#^fVZm8qaLan_)!o-m6kLPQIDBI#fO_ zI=76}8*9oi;Kf}ar7i>9E1kPzz(JHBZbIX}jQ8(PKrdOeg$^P-#Xili0)rv5Y6}8d z=ddEne(q05rr7>Go?8ASS#Ou`YeOYm2Rhn5#5ZIht2KH1*LSaHv-kQ&ug`pXc3+II zc0pM6TIsUi|*a{K=$cW=kAM^yZDv8T8=JerlZ-!_Hs!<+>9-J2xAl>J!$7 zmbfkTW0+h&9}duMqc<2=%&?Z+YGnTxw9Jbf;U{=rdwW+u0mvN#dw? zy6vgd@RYxXvrEFCT_nv_?JE)TnRKQxWhzGQNR!t_DIkW%L44o7eckczQu-*aZSjbGZ78TW^f{8o=OJGa6+cgrvgCXU( zwJOCIp|B_Ki*8uQVg*1aCHKdKifR_P%v& z3M_pqXk9m8TG3`GC_hTW(6Xcm9I&x9VD z9q9ETa^<`KQ9ZN$>O}G1gG?CG9Df2*x9SU3C`OQEsM57Hbu5=b#7DlW zRVXN|CxFqZ8k?I#CAI}FW#o&T0uAAW$!0b_7|z64i$2*{SX9Df17HbM*v7&8M;(HY zfg=q?N+kUJj($a_kK_Kw6#dWf(u?#b$38tVWkXg@&6!b1D~e}Q$d ziC3xplfHU~x#~vlAVe^?>l;+mTt^NN5dx50RV&)ffHC^+a0vd5s?6#LH#Sb zj<*9@g5`@0AR{~-BSpMZL_za~!tu75by+MXhQ@jJk(~KJH#VdFJwnTe@p*YTSp}bi zrbQ=yIe-~P2vPGHj;5Vyl)I{33qz*A3Ov|k6YEz7f`Nh~7QFldnG;9x#2K1KJP*5p5W8v^HY%z`D;?xhgw`CGFXkc72!i-Tjp|(I{SJOU*yvp_ zkPi8Kk1|n1$J7@`7(D)GJE~IR^Ru!;(UFy3zc|rMC!1LZy@5xU%Z`3kB|4(+2mZ}C z?+3chgY>vFbagb1vQf^QqxQ`^+#V$>4+;+Oh2e`Ap0U{bC!;dh^tYVSJj25o8t3qe zWyXLsBusx)1K>qTa6tE#I!&q-f2e?degey}H+}v0r(vt)G;{ZeK(~X-d1-_zTfzNh zGE^>TpmTgDBBeKfl9yFix``9_=kneg8Ys7KO+jD6uLy%jo`DDl?aw>TQ=EDxB%BX4 zFCLw}Jhg`QY_4tZ)O`S3>Pm+pr5JAyTI5snZ_`~@?Q|ZrxLx|CQxLsJ_-J~;vZtEp z*~xgI*C&7XKh&`we=)oLw}pRbF?aYG5E^#-wK*Fy#f1?T*B2m+ml84O|e36DgE*?4UoqYS5M2M*5 zKS=X65=vv5F%7jUX1UwHRn20#8A~sTD>tLIg_dE^2J!L(tSP5IpV27<&tuYK&(bf) z5iW0*A5LtX^IgeRH3AN&(tQIC!}WjcT$_{>Fmbedzj=7Z_|NMQ5xGp@zS}+`h_;b8 zEoyi5v9DN!WFJIO`#T)J)_0iEqvV*=@=p<`aNU*&oK8FHEj#z;8(z3b(yced(ajN# z8Z69Lf3j`R8`HSI7Gbp(AwU+@-nmcfa$rsHZ+d6{Dd6`O=KC30wtqsA!^yq}e>!j3 zF5)$CUM$zYMLaNNKp;ZG*13yQ-%*lMN!X4HQGr#iZz8VzBNB)OJOV)9KN?D^k>gp72~f$i%I zqBemr0pkgo`BB43_*r45g(zLUJ;78?srvN6juA<7PGD(nXY-~NOx|2+&SYO z0D@iYizLXpS8%_mnc35iKgjNuk*I0G2}xsFL%8w8q~z^MFa}fHa1&-2@W}JQHE10c z!}=}_n(1Ss$xybuFMCGpyqU%NHNHEh>5~+bIZ6()W3EX3`LnbCD~L!TeQKlmHre$Z zFoyF8y&+0pne4mtTjIf!IPIbWPgJ&M%3Dz043DXZmhow2Ep9TW8g zb_yaAS$7KNZw1<#@B5!d;jAS>>d(PRyTkTgN{?f=9}w-uF%%3+6CrG~z^Wd%`53`z zs*iMsV-C?6^L9}VXUx0wZI=q zBFr|*U`-5!=aoJX8jO%KHTkn>9ELRw+%9vF|Al`=q|iZf%TMrrOPY85B$(72v!73q zan99zUM%IfiCY1dmvOUfSjuvrYdvW^DLR-xISx$mZgS1Ti#UE&M7{>F{b0n_<)h+h zk6B#W0C4_+x?F^wd8b*7Q=~8Mz55*J2_|s%=qJ;@1I8K;FXbO*`87^U?ZB#!+_?-P zG0WQ8%p23sCXxO6j*$)@<*$2uk=g=#L=B+rkedwp^G04|Su6=Bq}qW#_-N^g{nM2r zWDWZjDB&1srTDoX}ulN5CXS;9lyONoYfG{4Wt}~iKFDeT?p&1&;i;^eE+5p2SQHjx-l1E-yaO+ zOn`xtVq#o}V8?>|&PFrdcW;gKcvalDTZr!Ei2!LXf zYo7-y4tC1|Ui@Uo43}LG+;UygL1gjj=vSuwc9%vPNdjo;@t5u7?2^)YnIF6Ycr%M9 z9VBSP_|qNQOlxZjdc?^2C@O7y%ppS67`|~KTTp110(+@5_g12&PLo`&vL!5s8uye0V^;Sdzb1}Y#DsnBk4+0+*$xmEL&UF9>1O!UG}{8P+)fQtPWJDGbNZj=kY~#`UFTjrGylkZ0pC z9}$W)Ye+N)DR!p~K4X!U(MLwmj&bwmtf9dR;krS{HfIC)&w^V^s6{t=qH6)|F^ z@3o1tzGg=#@>}2Q2HSekuPzX`B#Q*~1+KJ+)0L6?f7h5mm$+L%KAWCj`Yead_IJHe zZVjV^d??YWv36y&IWMmKWNmawWP=j3hk~#VfkOSGx*w&5JZ>H6s+H|zf4&5=)$Nk> zn95dDJpGC|d1y{EB8%EP@nQt>jpX#{r}jm?ZDDUN7pobmj3P~i6)4`({71#P>DD{r zfx80&xCz-z2&eOg6|&|+IcJMmA*%Q%kIa9u3o~04kOV;N!O|fCewtNj?V`H+2?Um! zOCp7(J`WQmr0}u6oDN(VQ~XB_pIGQvj3B3Tmvv{ReqG2z*MXM(B0{I)L1i4Nse=NQ zE3J#RcK^A%x^)g8$o=9hBYoy>-oFR&TC`bX^Ur*3A0`b{mg>Em*F?jl!~tEEB?Mss zr=q}=_DXQ*Xe>459~GGRIKs!lAON6t{{v^KUTCz4Sov@X;Zt15!`Xq>z$;}SourbV zJYHZ2gGO%pK(#sn;o2;&^c#V43Hq~_JDs)kHB~~9J|EsT^zgg9WBM(bZ&UqQeFRcIVl5vfQ@#qs; z)9??^%XzNXgJD(PhoJ>pt7+PeV0!hj3c^`G2G%f8stfZtJEXR)#xvNH5=jY;J3e+S zY9c7m{FWKSFy|w2Ww!$Ha(lap;-kqy!9!@)gWy%YmQE~a)hGm^jxXQbctW(2WkOo! zZbibG&LO>1#t$YrkAD^S;bzz|On55TfZ$}%S7>zlLDWqy3DSn)!1l@9o-?<(C4 z&J6`9WO_fS@BbIM3H-Zz@@u{aH}S7z?aSvI+p@Tfmr%OWQX^X5=rSSH4JcGR0eb{& z?Mt6nZTvlvjFu9=^9qrL7?O(b)L!fF;7N6lj)dvg+?No^S&&AhgwpTh2x@>~evhx$7 z5+BS!i5ilh@Fdv%_y+Neg~$s}ek%{p)qAgvrps7TAcWjY8&d!mKp>*-Z5qf-^zyYN zXMh`o1+Lp7-H;nuxF7qW%M!=?11igM#E29OOy#okUz?$!PXh*e`U$OD$$yEj4CUtD zfACY!%R1o2G)QSmDH2K ziH!|SS@N*o+fleX#NtwVP3hF8XXby+%do`&x+aSp9|xn^pVr7&2j60~$NM~#-9P{E zDzSQ-)~ z6M-93t2-ynmBK%sK(JZ*1H^Ox!vf%Kq1JD**Deh{o1JTz4|xP#2wqMu6si2Yebp*f z^Kf4mMvo7slwsO5{&JVmQqvNIz@7CFO@4qyzD$_xF)wPM_$5=#8T1*rZI)t+|L&*( z!fEs`8j=IwV5#dYB*+b_?TrZ44;fJ8BSpfM*@bU95)>9WL<`Lh$PGN0)QxnrENjR2 z4CFt4OC}Vkgwh=Le>FriFQQlH|34mTmNy(jiIGprhaE@VB|lJX-b*s@ zAzk_nt!FIyqg6^_<2)R1CHYZn@x$edmo@-L)Ry*Tw9>BV-+N)R z(NEDm+KYcqqxfm{`L#rRd#f_`9|7Q9BqDXlGi^NIh+7L&GSH3bIfJ)ZL)RlJLq0v^4qNH^ zT4Vfi>+>)ny*oxqbd{((BGRQtw0REG@!0IBo2)#8hV8b8%k0liW;sD07{| z)6W*7$p0KZIHA@L-zPaC*yIPRl}kjL*@&wDc=Quo`+XkxC_|(avcBY-bJcY>7E3BR z5vOMk{bjHb4lCk$xx4t|0q0{4dVgO71u-SjXqW6SqyI5A_Z!d-)dT6gT&F-^P*cQ~ zRArTki=O$XK)Hb(3PMCuI1iW8pJ6ET$m+?G4zqQeP#MI8r_E39H*XGduQ^=`1E5H0 zimrQ#Rw&Cs$CUGEDz(jK;5JlC!J1sB&Vf%SA z=X41WRy61azm4}Hz!e$PjdDt1_0Usz98QW_^r}SD&7}hODc(%Kcu(DS`Lu#nHovE`H!wUy6eNt=LsaBiBV7X z{!g`VRad^;_dpuorUo8o;R8ea-b*_8_U^T#EoA2&c+(q7hqO%M2gqXPJre31$B8YU zA*Quz6RKqtwFtm`dvWAFu`x*tY!va{JIi(b$#iB4XpR|^p7kcv%nT2C$uhU{Y93ZYn z`OxNzJQG_`k&CgX9TP&PmhIg8P&Wge{P4*>r{*RrWL%T1Q5B@v4)_15Xd5SGA};=2j{{j%!JACa45y`9c3fv|T(mQ)n@gbzCRKx{dum6k!A@ShyA z)yJ`q$g+9*iFdq%*5izT5s-66<9vF`6b=_FCBS4w=oJUOy`UY&3i$?F zQd3BL-#a79DLLcI>;<^0Ea@;}Bq@0UWg?RMVn?i&NT4zYIPp$!TzWa8U(1l1JNmdm z!?&_(I>t&ORtwve{r6wwxfufCMlxNbdUU_RGE3+K%~(9Tr2o_z3H+KIwBLXK;F-0J z4(@oP!bblA^p_XFCQtWW5dpiuO&La%ihWf#UQ~gI0MvwP zYOA_QHo&IljI=9X9=Q9+f8QIs%n=rvUwqyk4xuQBN{8POemA*sL$k5JOXTd!%f;tU zU2=TxK!ln79Z!S^a-^ppnK-&B9*X1^oYNRz!XoXi=vZEa%qJJcQ&uCmaKrd4{^6NjN8<=RKkFc`1ro( z<}=LN+%{4gP&fKEdm6rU>&A^6*oZZcM|o6{#SG%F@7)GAac5c`nTFHMVVH#}AT6mT zA>FZmq1>2%;T!&?6ikP6K+PQEh&G{_}$YeUd1N9 zWRY*?7QjCm46GyH!LtLHwRSX!hJXoK{x1hroao-6C6H*kx)$0yH?@`Q`-@*of^B6! zv|km!`al8TKmUFLNR#o9rkfu0R=qWv$?&r&Df^N-enqtx@`E9;$9uQQo&x5zFiKVU zmKeFgI9d{+`uglt7Ox42CKNOVKR>90U)Z=f&MO9YM zEkvQEE!F7rZ~MI@Pb{i4Ao~z9ia`7}AVz9YNMCr$S_mEU9HR9n(infGT?ggzPt9mw zx{KEy@y*?w;VLkR@#Nuz78}GW%<7| zS0ySQ(%d9KXlF@|%g~P~q{3^0@|5b7jsa}bV7v0ZHJW?f(#-=8NLBnOpmN}#|Gfsk(!#Gd+k<09 z=b$e)*n7a@lUH1qbuZ=zkBeF`U(?zCv^eD8!U>p)2!3y*7yP>f-55wsj)^LWXleNa z#667P``-&iG-GXS^z0K=@)4FEpsKl?bLFmz!o)8gvTg9j}6ZmvaW zaw-J(WsHMuJhdBvBKhyN{u?vghfc3|>{)M6&7_I**1fKyxV!f1@7PYRy*Rdl0FlyS z^izAyAFZNIR12GBn$J}(71;*u;SoW6&kw|$-tHYgjmyg-byhPXs@1z;;m#V2o$K<# z!|Wwp90v=MDC8VAe3t)|Pfut5KI3}TcC78H^5_Q>z1Oeusa^*_bvWp%7;GM&RK79Y zNZaH5;$Xf4ixsPNg=Pbh{3%+Z(5`==^VMmTMI=9&G$5z){Vu%DR!k4VN0rh zqf1@}#ruGGFlaZ~d;tAQV)V z*h@=t>+iR(d$JbQr+2m!!oHF`M?OPU?3F)u;;QBp^#d~r^6k^^waelEsU-~ji4c`{7u7duLPF2uFF3gQ_EJO1Whd%-el~;!D}PC@R7}lfiS~b& zAKapBMG;{R6Pum!Lz))Up?kP2-^as+3VMqRi!}P;h_-5d6V2fiqSFVknYpl;GR&Ly zVP%;x*n&ELX|BB-=uq$~360^-ik>B6o7Q*jofq+B`zY@;qV87rs92s`tWCVozbhP~ zq{I&s=Y*wW_%Y29TL^?c-X+k{)SbQ?&ch!+j?D{(j&)gQ83rrtvpE}^LmtciI0vyA zH=?4F+=KkjhDXZ8$impyhz?fXTix!C==^u~&!}DS2ZGl}_g&Dojh`LRJ^rk`apk1s zx(DnSo=tuyz7vw5pWpyB(tMW9|FtqkdnODP6P!(1cl@d4{*U!Td%vH#^vsApptIWS zje;>YJyn{Kx*H^T0%`~Q&9nQ-bPRGHp`Fn;?iME-=guziHVX>cc+GyfZW;KG7YGM2 zBYxTiZP&_+=TP^-Js0FRukYVm@yep)A`Q~0KX{xgmux(|N9+NcbZN;V20je@2>A&?D7g)!{1(m z4`04nOZeDwzraq%K1YKEF~{YMaOzGjoZXVO@4T`~*Y*IWgHo>lnUV3+FinN5_Iww@ zm5lAO;A7TNF+Zj!bQW;KWs}YfgP-H?ZDOV81Pkn)A%deddS#76L}qYdU!6$jGeHm9 zxBZH2h(d79$Cq%isa|E$F+0Rcp}|+6vTmGKU)+iJN81a`_Jun=j(JT}qj1C<8MEhX}+p-YjY0sGKx zGAG3Q*m#`!9V_t|#)lUCuxdU0?$~V7sqR*XiX*rMlgJ&rlUY2Hbv20~pG%q|tuJoK zQ$@ffWt}Ltu81DLt4Y)kr;@_*-@jWdR>_!0Ij~xQm(-@AoQSQ7(J}nlBxkVsi9kq8 z5e-a81i3uYl&A^jT_dU8#HQzs9(RZdQdrJos|#`oa1iY8*G!||EPPl0j!DP9GWo+G zg#sz?h6yEAz`}0B%bfgNss05!5^|`Vz=0p{qJnzGk13Lhknw4hIx0uJ;ZsESI-|`# z=0Q}?P35|vHrz#0ezxMw<8kw5lvG4K%8*PPie)6!rrIngZ#2SJG_8MM$2SPKc)fIO zzLf4gO6nYiQ`${Jq4Um>RV8;Y^44W5Vui-FqJL8VT{#sNMc20%JFj{#2Ia@-?(}Pj zNC-_WL2h5gc7JduKUb%j9D2Wz-U>&~*IL0{bKTi@J%(-b*eYV#Zb8}GtyuiOmr^Mx zTXAR}*4Hn2w7$?Zn)w0L+-16 z4YjkvO$=A>B1k^1i7_~ltR)TJ;fa=Ps!^`u=1& z%?)L4HcF@wJ-Mh)JwnPs#FJ}c`X(7c06qx%{xAkzm?N3ww<$&_aF3F5u8PHtA8rGh z1a_Kyhjb{M3hwd~p2n4Dt&+sc>Whh5ex!>Bk0QSMVGMXnaZN9Et!t>-qGPbxI?AHv zgE?rG{~pi|t-Dgc9_qE0p&a#!_E8WYScd!Ak+$XxSiN(~x2zf2v>~>o{VK(7I9&YW zy~zS;7F5EcT3WEx!aE-3Bn;+#la7hEt%Y8k(3c?6CIhR%qE6{bA}mlxWzQjbPt@`n zm9_wkAh6?zTk`3z8R8+?HV<3P70*j`Fn!Ef^ov*>m?4sBWp#SfabV;jW~9`IK*7oC z43;-*2qz{Zc;U?tDI$8<8@-F0p7P?M-nctGPuWmy!531ML=7(sC#x`A)`qKsw9~N zLH(%nU8X-Coc(fi+BwLE>>=ZtTK`*`&j@{x0jHf9HC>4W%qYq3(R~t#rqV)y7(`fK zsItFZ#wmS`Vu(~?BPmWUgge-{vYU@gku`_{l1talUfPZe6Q}TyCU?Hjq(e(RqfY!2 zMKe%b^u{coNm$lM`BEDRj8k^LO07?4ntzm3^3G;(5i92UaJU#XdtI0xO`_OgBIl`~ zahRW3@FyOr%hvi5hlS2TZV+L7Qv6iKPnQ)g^%{p=uOoe}`R-mciA13@fFJB$!o^{A zU666fRX7H^O^NFk{7IchK>q z7UVE1U9PGReM7u;G;<0Kz|~VmlJ4`j6J^g+wb4VNd+x1=36~bB1dOVXvvdPC-;6`W zOzsfmLWQvqk=tSg!~NT_ZU$4^xKI6TDe0$cw(L=T_<_S=U{UTWz7Bh0iDxu(yg#0y zK=$WY;4*^Sj8XH{wcw91d`9#qmBaOZ@KxKYTlKd-%num_xj!_Q^j|d_?U%c%smvTE zHf^FzfP*qhAv>BW$A%!jfhc!^*v0{R7l9NOYCAoeq-AcCbWhavvxpraEu;8}$M5W! z-74;=w#SgOtDh~=SS_+87JcALqc7%H&3QUV8B*Q?6BDEb9!&E3%v3`19QsQSuW((m z#-#RivLpt1cr%`lv0$-ihZRITr+9;9R&gxVH18>LjqT-k3zh8G)B8OeQ#RD?JH5^SMdZn6^jYl@l;PMs&f((e!hRftlP4<*Z6rsx_ zX~w1KLf23!7B&j&Yk%^{S?1n6(VB>fS1F=XAcdKxf_hq~nR)nPNj&yKKTEX{GDjir z*oEowj__FaNHmG?a@>L6fD^m2g7vPrf-U}y$fzcr>KK{z{yyFj`<_CNfs;ll=|!{O zB8C1e#%zaP=P4^~V00WjOCl7X(v=oleLu!*BmjAD)cr-Ob62G1tz;?As_3+n`H761 z{C9e4q*<6LMQw2)$KfVlgI?Y=jM5P^`^6Dvs!uj^t-W)e?|Hu`Tb6Q8l)~ zlPbuudLzuwb_g*7RI2@Af_pST?pFhm&7zOqr-`q`+K^jN2m|^^fB3?o)!^t1f_ufL z82imbsg8gbZvV=9H1!7YG7C!<1npuWK2R(&7roFU&KET4$1$C@$Bsg%!1T>{Yt*V= zV?&}^sM}(i9}=-nry=S(RZ2rel=|^#ju`=&p9)KNR2Mad#SYE5$P5I`HlgpHg zX&NMRUK^4IDML|ox$D&1AQC?gf|vtQ1UKxF!lQpY>YB4gno^TcF_tT*$`mvLLg?01 zeIW)}=^Vr+c}{=erb3P{Y0w+^^83DtV$4u-65qlFLEwD2u$b!#%=w-8n8;|r?7o9y zb!<;Z>XTMdfI!3WI-wHUF*=f!E+yiKx40djWhjioyk;vFY_Wx|M$dC9TydWiED#P*9~b1F?Xi}z#+DK>{KGT% zv|W`LK^rqvhBX1OxmA>LE}D@2O6MZBXFB!F#S|&e8N|Xa?7J(`kUVlu@h#!ADKcAx z1;A|(LYJ%=By-9d#kFdn3Vl*w6Cr7&7|&nAo^Ecau1I}@>v!_u* z^af$UgU`&s@Fv8fD6&wI@!bm@nB)8ose!L{kdDO%B5e6PQg=_=&5e}4!X%t_o+^{O zst0dsgp`LDn3$V4v$bomeUi=p{*|NpwI;E|RBlS@L(ZALmDBJM*$nTqL18RKkMD#J zk_SQ4t-9(u*O}7Zxla*MnfR^6;ppQju5t z_7w*4cUig-6gf%S9n(!>9m61ISTO_HijDELH3zmCN7e2aDG3cFaeX9!21y}Mya1It zu2+X}RSZn`rKnEb>E6k&nJhY1a25UGwY?=OolKd zyt$8(sye4z}U~x(9m$2 zV#4X_U9%zI+*1y^Aho{m;N0h;%4Doh9GzV+HkOEUU@K)~%UqT!tjCF>he^9bD>Owh zis*XZv2cmGH}x8Nb;r1uE~^XF#{onF84x@*GCNhG%q99~wMq4Q)AQ}z<0-FAJ;6j| z6YPn{6@L5voYdB5_{A4~3jg@UL|;^-aD)hPs{>CWlB&kHZ7Mg8e?+E_j*bpbh%^c| z6-4#14m|Wy|D15zslUqdao%dHO#t_uGiT0hLTaMT46cduv?jp%hL2xY9Wrqqc3cca zCYqX?n@8QK<$Lp9LpsJsypV>UDR^y|Ft(%d)TvWr-b4a$`x$F@Oc|DWU%QWLjmf$_ zhOH^=AbpBjp=4^e6*kmKYS!>6`c3u5!_4B+QjXpx+O@=G#{4M9d)v&A8R_yEbf(-n zE-t_G^w3STtl40~Idi=$lgpGJ#ZT|0Thssc!{?p7YTchk$-ftl4;3>Wn_l%CpXChd zhBO*gc1Tt;&PRKa;;$_Kj=qT9od=rAQxe6n=FZ=)j3ZwPj?1N@Z+sfbc{A=;5Om`M zLLqwzZFgPzv;&0$+I!%BbuX9gPCNj>NT&Yw*9hGCs4F}bH9NROWmI5&PMt!c3c3*J zBF8p=js6yY8(H1EP`e@QhK+|-J&PAKor>(`3y+QHzqasWes&jUf3B&T_4*79p)`{c zz<0U8~a>l^(fv9s{Lp?=~nOsmFl;JHTp3wQtBLCjRI!Gh|-TK&kC6JCm-I{0vHOHaO0ONn2f^lmV-_ED1OCn zJJ0d8;fBC*4fg$=BgI_;Y!ZVIyyUy7A%9Z5x7=1cmH1?A_kqCX<5w-sPUiWi5oXF} zTe2SIxej`%TcjpWp@mgc09Gksu)Zy_jR%EvJTT#J8l^zgT^g5h{~>0Jc!3vKKN*-7 z8yRMvtm2Zao=@b2goK#)3SX%XWybuFC)K;qKIw1>baV)jNeZUK9=}pA+)|D>vy7yq z_5(Z`H}^vRq(o-;6^G%UDi#UP;8=GfeJi$VFI&M|_*9B|;!=&eB^7ti?tr3fG>SA> zlMwoOy=P;R_$B81MD4y)$&EXw5kW5XbH@44N?ATb7X%HB^}U{MO`jc2Gs>BglFO#B zt!XqP+>4e^uNIBcjM;GKJ~qW-oyZ(N8!WfYK0sY02ujhpn6K7(x#s58q;eiQ;m(di z>0D)tgi_WT1@o>Ckl+<4jM^tgs`)rneuqXqB0@F0WVvb<2`P0Lz4e-qT}d?}#G1{z zE_yFL=W2L4kDIS}s_=2XeL*!ymi;6qwFYwCrM)>=wIHl~Q3%9HXLXl*2BSM$| z=nU)l87=OgMex%tbIAW}xV-Tf1Rhp`feB!#ymFZSN!?(qRd+<+BWy3%9b!B)Bk1|$ z_p4V{7b|wE4*mpaYKb$^jC^l&ZG4%KYad&-eJWAEWpWP$1zuZNu3dll+M%qF#a>CN z#0R1M%v>U`vVy)WnJNPc0n~$b$RQD^N+KKJG7SXA3dZ7I*UI8nHfqFc|CK*7=~zdWY) zfwsA*HFT^;ow65)lzy<56aD9z7>i|)Q+*-|tL$~vpO`^7)YRf6Mp9%kHu9_dE z&*$)wLp2d(v0sWk%RF1`)JtmSxiRdFaVk69Wb{rLsGkCmE@M#@-`9;#3%$rPx2R7z zXUf&tYhQQeFr(JW^S^EynGPpaU|a!QMDlzmW2Q*x&a#T1UrS(4eXJY%W_QixE}@F0 zKyBiZ^V&dox$TYYOBYM4s=-IQi+B#?UgMFIClFRjzy3()TOB(5G^b*rFuV z*bt#zkBxS*YI$B7YL3y12*eP3eZdV^U<#)+#h!I)v>q8+8JNvrzyvlpZW z>M2@n1LM}1)MTzRCx#vB;(R|Ca+)Rej3std@(v=tmA%Lzqxa>jYGeJ_uBDe7DZvK; zxly+{n8jq-pdE;}nS!4NMra;2Z^qNod1Z=gePLnY9;Mm9Y>mY7G-%7_WQ)o5o!{p) zowWCqTHO)xWt2?(Rly(d`f`28?B!=tMVcvpc8PBHrSMJ25aNpCH?%TUI?TR==Na4A zT6K@*&&>JvUd5ajVc;`}l8v1oq9-!C3_e3yTA@v5FV(lOYKva%wqL3~PR0-e1)E1J zW)Y8A`6{D!*;uK#2K=%6syZwk*tedaABl|hr7Za~qs|j>DG4WBN|s8`R6$}pm>h2U z>G`!BJ1$}DO+J2E?T;+CjkQwJE~RUow%ISeky*=B={RQPXHZ(zI;;JPFmH_Xz=_i{ zElW1@H(gXU?PWiN!o5cYb%2kg`UZT1)gZ)Nl5o${G7`Nk?0$ZnVrGxZ3Oj}S7P;6N zCvyB_i%s0$nlFhkliE@r)Xs3c5`~_rPQv$}$fE|=j>kZ-kHhiFZHOQ<&-X_ za_9?1?z~to+*IXDCQ9N7Z^SWA$krGfnB0{;UsoK7d)LbZsb~aC#Ep7WI6$xLY0l|d#A~dPT1Yvr|9kvV&#*M2%cQx znjK#-K z6C_b>Jb4tK-)it23z|gse${Muj2uPs*CVnJ8&o;@HT7&15;$RneeO=ox3cGKP6hI( zEU^$hw7rrS6}cKtmUr><-?TB`#-M;0=4i~)OrgZAzWR^SVRhm~gu?kL_xU=;1D&da z{=zBTj|ckQscO}99a2;H0l23WACX;;)l+$Md1@%b=I8Ph<*qLu2PPqZ$v2(;3W{}+ z3-OAt(1}B}8hf}wwZbPq#Pl}W?|BQqvv{%`ta%9V$k)2I8O=W)UpcJ@{`dukLSSmHTMg>ZU6RY~+WxeHJ_9 zUgO5ayBeftYDbaAB?@T?dh-;ee+V+IJb*Zo2(-g5mR(G)w>aL{47h(sgp=PN$|n|E z?jI7QggrcEJg}hZbc#H03fFcrKR0`++wH*yVX6G0pTA0wFY(KZYxlf~KV3Y_5xk8M z3B7R2LX5EUG;2(ot5#_DX_M%M6q>I$`-&Vj2%cVWU!6)Fq-$UOTR5ZnVmJ8^TRnEh z+(St~Bd};8i~aYKQG!UZPlsRY;eLQ|qldp=#B>$H8?DDM_i^RjbbxpD@Jf`QiHvjR zmjB%X`KE`~(y^;wxdu*g3}c1r$+xd{nOsXA|Ii?{>04F~HPb>4P&+NM|C(bqF=*w{ zWMW{8=HD!@#>KMPgZ;x4J+w34UQ#9{DVEF$ZZXD{mM5_MtiP z|K71byTO+9apl55#r65$QgmN_2}%>~x%89Cc`ul)_;xUPH!N@aZjAky*=H|@dY3_~ z3>mQ}x4>X%tQ!TcOZOA-5-{4**QTw-7tHdw=MJn>R=(Wj;%~Lr{0@HmF zq@L3x!jm-&@p17z!-$w0AHuTcP-JZUs_i|L!{{GuXKb)gq+(nkuQ-Pu%(#FdtWbZkHa=TQ}6z{T>er z+%mp&b@qu*t=YBSfPg{4Yu9j1IaV$*2|adSEFY9DZdSD1yOyk4l*F;Rew=bcd&glT z$<1eW@74p&)^~<*O?ZxYjIbo?VU}-#54VS+x^K zk>c!X@^cMc?4%F^WL!pjM%c{9*+XM&4J~oUiU4=9(0;&5!DY|q#gmDcv3#jPbZ0h35aZo&M^R~1!)&86FSRs0yBmDaVj?Z}wq*-?iwR}csjQleu&wf`9 zz1!N|=5BO)D_6^CIK(^0=FTn^Lq_TMN)%K$$;v#8SR6ApeQjHPk-ja|Kj3>Nt&>(O z_6-^*zh$LDZ8J^g@WNXOkV2?GFMMuHQPJ-P%j*cMa_{WO6m?xc*gJj_R%3kMMKJl} zgPIm6gfA^Yw_xn5q50ufD&xZBNACDjJDC`CzKc=w477 zG5EAtDbbI@C>y=LJatYAdT(iG`jvI{daX}Vt`5tN-CjO}U~OxXR^ z>YC2jjm{3VoB7_ksh-liuu8~_G|WiE|1#3vd1!8taF9(S7s;h-BuWIYd~7(oVU4-B z_Hy@N4*h2a{rm7;hV~hTDcdK_%|or!+O_%gAEr#wM$1Gobdq+)5>;>us0OUhnCanD z^udRtG_B(==XXYnU*BU&y|NGP>BustC@NdAOK1_B)?gt_@r>ouiy(wi&FGo%#FWxYMGwbQ}Z4 z7%e?bqaE2)rmUA(pT0j$TH?iO(lLP#zJ3x%@g6;@H)}C!WC;2mOBa|ow&e7aqEA+9 zjN9b-StT0PV`IDeYHwP|13`-LC^9i>RnUE< zubwe~@ia<2*`v>QtdP9#!ynd^sSk>{BK^0ua#(-b*A1jW^>@v6TXVjI)K)7{K@GiJ z2Rilk45>u5H~@#+^eO*d<#RtMO3*{#G(0rlTJ7gaL~#DE_P+8j>MiPbKtLo#x)DT> zMjS$rQczKvp+Q1H1_lMBq){40ksKNYh8a2r0qGJYq+=LTL1GALsk_JXJpaOdbMJX` zK4;F49c!<>*4it+D`3n^vWOi(ihG!eIw$0m-@EzP$C;3%)sgHt+En24{8GJ6fMvZv zMDq7v?$K?0F4B#1!a@n27DX5s67DAxoWPKz1(tJJ(u%Wi#6rMT^ZqRmQ{#U zRWf6pjjR(hIaG*(nqC)BC-xcNHr(`3VEKKDdjE?>G_t((`Qr?$%4$oA#9$EWl&~DW ze55*;*j8=v8{~N8cfXsPdn_TyqbSyGNw<21IatACfWHLdF`VqZ-gsWT>OlVwP;ug0- zo7nq^#{{~R;_=V9pnZA9n#^kEE1+hY@iDdVp~v!;8x6_&p~19etqDIxhG z^G6___M=~{^FBn5n?~v4X-&07r)Rv)ViL9M$;~*bV8=&aBR68#mxNhHF)IliqONrt zEgLY+pBD)e1*qiH<(#=S{$WAT$v+dC{l^bYv z&qIEAo4s<54zPs&TKI?R_?^ps-Ew3p9~Pp~)yjX<#rlKidfECkXiIKAIEfT>s=v=W z?a6CG=a=M3y%B~{hkO{$*gjsGpSLS$53RsFto{7?cjy_f9i5JLk^LobG+j~s;?HD^ ze6D~*N{M2g6Mfh=ncJ@|CENm)#rI!>dwGzdt#ao|o`qHoqZ~rJJu0jgDqtazd_K`- zpuznqX59^hjvB?cM_w15^N>k4#gvewgzvMmvijNg*+hY)x|9H;SCbJ}OvD}d91zS+ z-w!)F!g|>?`HM(=RM$w$1J0VH(U|r&cbOV>LZ_YzWM$VdKf_5vLSoPPf=kl(ycHzF z9ldR54f?}L@)9=?IOIvHMPEhmT{2OSNe)vygrH1Vhd*IvV}WCib5na{z0V9o^$Hob zSFrW(W8cR6dlg2-dXOFQCwd-j*5qkQz(E-;LYNHYAn0BIX{&Yq3@V0}3A&eJ%I5DJ&__HfEB?c*jRahM>h!ug_L%yLj^VlIu=#TaQu| z$ZD@`M^%GRF`Y@b<5#@kws$Od4u!Fsp2zi0*@G!#wd=#Zb9-pl_DFxQUWo z4H{Fe=spfCh}0}c$Z3_z;@(tRK{#5??z z@CsRpGZu!(?#|86=VDWNMN=^kdJ&we9csOvZ*qPQUvRcT`je>K_8)M_IP|cxHT`h- z*mG<|Be<$=<4c=)RwiX?g>mv=B^bU>&FJ4oW^n|$|H^(4C53iGL%c!=ve;Y`!?bmVFR%2d?&F$i*`|Mxg(9

2z{Km3w;+L_qqoLO_t8Cd0Cz|;yK^ccAuvC^VP9T>BNmqg)~(? zk7cd`<(b|ShzpuCq0Ul5M!Cv$y;bzwM+b3dPuLz~V$Zf#U2$Gh5&ql7Jt28fl5Cc- zKHF{wezi9lSt0;#$+sk482~NFFpF~m;a))N44zSe9gmuKR`aZOA(}EBEW#pJQMM2N z>GfmWz~jcjJ~6FEM9n^p+%-lDwyp#W96tUug!Agf;TMRdqfq3_3(lEc?`$i&Ic`2K zR$pz5tS78{kFDDP*Dz$^tMbgcf>?^^_4nBhcP(u3uc7@Pb~~E#VuP?16rQO~!k~1| zVxN7*lSD5iOpu)t{uNl0N~trD5}N*pe~Jra9$owXg_>z$i=9euw05C)oDBMyzsNUy zJY3S*F9OrL{lV8Q^$)dxZ*#|IFMAs~$djjxc1EF~OlMT-(P(rC&`^~hWV0VAS(?IV z>GiG7>AfYt`jKJy9f0^ctWuY*`^n6o`W*?&-ny8T1Nr6eRmA=(JG=-iGuf9VBCON@ zammH|hdgEy$w$mV*9kGM#Pf8v&MAH?@n@;^*IWwva_T!37~Q)T9JW| z>71=a7qY&zwFhORIpAY3VI+b~sthQ!dNuvm+2Q7t&VSvI$6FIy4!L#=slKbrMH}F1 z>dt{`5=K5$&ec{VPkUl;kK*)~C@g)xkl)4Ra&owkZ?lGSz4C36Y}Zf@IOsO1ySIYu zDZcK)rykMcVIl$EbJy3`vb93BpN5eJYh8e&{ylu!0A$C|hg-pl*7Z*wGq0sZUxR3ybnNw@*SoAn3uPSL z5%puM;4GFImOOGMSW+`FegfGDB9~D)USQ8po`spCN(yJ(Yn6&@R9!n+P^`>G0`JpU z>JA4rY4kt^fgxYfvi=&?uJmD>e=WE^+$Bb2bWo)r_E!&JP^B?&g?DZug%rP%7=apB zBS50$lH6Ikh;UkyRaB^C<_AiN%JQ%I^k`>?&LaNcmz407OTZZbR8(DbDCQ@<#{)&9 z06WyCD>=QAJ@xQg(S@DICgZmhGoJ-hfp0nf`6@~#M(AL1rd*?&b#-4pf0nlZ9uPGA zH)!tbt8aGhU3zvn@Cng;OhPB#{)HcrFZuah2=5$JYZ>^=O}n2Azdi4FiBB4AMX-on zwP#hna5l$__i0yoieTaRNnyBEY{>^YmTAnv_q22@Ili(&26TCNmk0)B9Hm(*i|;xd zJVt)8)9J0(;#q&+(%KWbf(%0bv`l`g#=J**O#6nJX)36aJY1(@uj$tvQ5h)LQvEMRSE}imzi7=CAU_t$qiS`y z?yOI^CaYrubWWY@x?1R>wsSKW;x7$LInMa*#VDXQMXdI74vySwkC%a>%@_ZKakKYZ z=P1?U6~vRk_0^7AyY0&FnY>RJ*ZCtpPG8mIKXOagP=TF!v?r#F;u09hyA`QkXZ-$` z`=M>Q>6hZoxwA>y0l+P&;tbL1Z%x4^01TQiN@h3fycia+#OL-SQRjZuc_ zONr2O!TN7X!3^3!lk_Em7@bmtEUJP|z_xgx9@yj@;)+T`;Fd&oI2J!rO>GNbW2WOJ zhw3s4-86~foi`TSd{D==uiI$2n*;Ojs+E#f5pm{we}N2&_udgzqwNO~Q(=~;&@3`9 zgk@Hbvp_MD(;wY1so12@_gzO)=5?>z1VP3q|>fXm#zy;P6LpFcXs_CA~9^uDRg+iU4GrxlhG{bD*ijzsqutVw%z z1%DK4;W?9ycF3LgOfKJD%8ys;n3xn-Sc6ST__-MO7Aa(fFkFD!0MIeAfu@5%(x7jv zPh$pWg5uV-@b0y1EU6por*dfbRNt>J#4c7o8es*G+dcFZ7<*9WV-s(#T=N@8Hh->l z%Qt}`na63#Mc{j^rep=b!sEnUV0$({0=QfgFuwqYycC699>F?R}ubt+u6c67)Yf z9j%m5v_C|i$ql@7_>~KI4@U@F=YLbuF2dhDWlNcRD|+w3THuafX?lOIR=GyJhjD3 zF)$mM6~_RV{*!uk=(Wc|gmukbu^)_Tv`QIeSKk9a&a0@t(%SyLH?xazDbFfZ7B2)C z^{;6}4re?(l_W*ttAl*&8v6m=PL}EMfp*JS}|{ zW8!!F10)~L-zl_M^G4h#ofq;`)V|=y3=3U@Jx`n(nXpa2O0Qp!2!6!uBbi}R#yF|9 zZ+#-DGf5vom&V_7E3($^%HXYi;H3{Q_^F*Px~8(<;J>izb8#cA-z&>bGykFv&l|Uv z9QPoUL=cay_H`>e#gGfj0pro+UmwN1;}r73tbFX>+Gd-XImq?7oKQQan`l)$MhbmY zz-*bPD7?vW3nN@)=F9zRslNZuLZhR7$CvCjt=1`pdi2lwgC|CitQRrW1%dfpmenVU z)^VUM7D{X1Y%{H3?S9`vt~@6=w&4uQ_T-}t4;7YuQ}Kszi|ofH9l%dv`tC^(Eeg$k zj|?Z&eLf)h>40MKXZN3;E{Xn3IfnZ+{*zZ`V>fy-5fEC)8S9uQ({60pxNn+gerwjw|AmmNBho@5N?P{ZN4_eJ4dqDAbZPJhZAFc{FB zhwRNpw7Ce=dL^?s;t_5#H`*PhcDS5*con0uwcnZw4?w@*nNqPX?H>+{x%=@H3i%{h zbiYWkCGLZ92<>gO(^5fNMFcdtB!v!x(~vB2pYi^6^Hl?B4&Lm~4>+TUaKT28Qcmd% z01kkxKbAxNoR41P!tOY5!CY^%iPKMrUN9O-cpp$xjDI@88PDB?(s{By5dNp4c?n?J zT^cpw!|o`j9=TG#YZyb`u*#c2NZ2H3i2G zC%NCHj1eArjk=Q9?7fCEN3+YS^q$CXJ{~y_b=#Fbl5OCvR!wAnrB&JQG7-blc$xd{ zkx;9q5kF|D(##DO8*P%feEM#`$4t)^0!(p!~BtQwygO9c&s^9(F(@SeNyb1wTf-a6eyyFc$0}h%l9sPFLE-S;l zwt9MVW8v&G;OKoIIy}Ri+||pp)LU_U-{;6 zaQToCQfP&ic@7qM=c5oW_XFs6^8K{AH7R9NFDj*hnUBbYKqhVwKzses(V^k(d6rm9 zUO6cK?Nlc5@P;>PZlmJFg$_zHF0OC2JyA9{y>`JaMj_qzt116i@@&u&DQZP$xSlEo zDEz?nE<1`kuLu){L2VtH#{sFw8+Dm0Tcvum{cYA!6HLJU6QO?Oc;u@ko;RT(ESrd@ zmMdp&+aUo^x}I(or>_|I?$^ByYuB;V0L>rKaF9*Z?sxfU32)ru6>*E8$GK|G2@_&w zY1!{GI~h0w{l;cR0mkYJ6LQ$Z!#*_9fsXn@z3P?`1#JXn=^EYci)5M7O*UL0`F24# za4Zo&jzv|ZzOFSI@@M`vi*xq=nM*E`#gQ2|HZU*udAv1f9mlVtv9C~XuhZ)@Ki&_m z`awnBYyy0^wfaxCD+do&(%X}!JVd^mz}h~*2C1rr&1!+QQvOVF1Jq$&VWh3IhIt;9rnb8>)|A;bW)Rq5Z< zWgUg^6{S|X&hc8@I>RxKCDa9;Waa)^b_ov(q7}lJm}d{7=X@tXM63h5@}|uDu8oI~ znzn(Po0BWT-%4~CQ*A*)OtQux8tWMkc*A6`6{#ax-C%AdYor~W{3$5gyQ#TELs-$O zv)K#$<|kb8sr-=w@=s%iB+7L@sMbwqPX3*1tNA_8XGJDTnrQf0eR@^s4yB zMkBlFT}rLUWIZNF3`CildoDPe3RGRwxmQ^djz)@_%nyOKo)aAQ`YedDQisL|!$&~F z-D-Qi%203K_vH5`)>t^$mvQuYDQ8Y^6XNJ*q{rpn2C%eBr?9_Rl<|R+L;X4Hjvsq% z)qeLR8zqAxm)rngIZ01SS@^T)R9XCmwzD@@?2FGsZzQZzHU>tvw5TI3Km>$!*rgQz zK5nUm4*D8i`f>Le)0V;x{AywXubpx)R|Hm9(+Jv#z7iWi2fTeUSBvHba$QbQ7&0>u zH_%6HUrBb`{j1^9QXH@tSiMI2OQERENf0LR(ORuZ`swLXl<|Zm$QKF07C1$E#5c(E zrmkpQ`EMXw0lZg-92yabY#Axmw(NjS1$kFquEUJ6T%eCp!#v|TPIlLW8Akc^kLX!_ z$i-jA-VbDWWm#}>vdAH{Fh3Qw?tcaClK%&3Rr}V1vaOWFVMS3_sh@#5$93){7d4^b zU?O8Vq#-tJuJBvTo8iIe%SDCX-N-H$dKT-kdkIGO@3sN+ovE#n-tMBicHO(h=fTE9 zDm2smOP$VGzef56rBB$gwQsOv+JbYBW)Ih@EiJLzt?_YPtBA~^u*~I0j~e|8|I+i7 zrrfGv6w-$F@J-zD{@{9-O#JKW7?Y=`s4^K%Z+@9KIcgk&l!2 z$~hklcuk{yv&V#Cdd=v0Yfu*EUQ|DSx|;!ckEVap#$BHezdVkwqYHG%7pGWQ-|k&9 z##wgOz7D1cR=nWM*6Ut76$No*{`p1Ahky4_Q+~U_78h1@jeaf?S~yPJQ5tmeWJ#tIGH6ThzkINskT%6zQKER zKp-QPDnX%+SzxiT>+efPRH~#%q?rDzP~bo7`tYw}Ap#&+f`>3D@&W%+ptjI-eP+m}Y0L2?>}8_$Sb z0RrdGF-L5X$(Tn=Wg}C%uw*qUxpz&Jdh zR98=jb<#f?PwXqU4m6#xv#8g*6^F?+`91I{0z{$RUc8D70y{)GO>W!*XUM(gA@BpyuYMrt6-z|vAj(0KuX#A>m4^Vw2C@wn|8?mX zpp6TF4}tW2D5KyjC`Oer5b=qKRYZTx$z}aA1wcIoXrrj=YGt!Mlkc>DOBYlE(1WGi zJQe}4M!~+I0&IBUD-9?3P8oc6i-sFuEU^=ReZoBMzu^l|k(@yN;qYDJq>OtRLae_B zh_ildJ@?nH+!V-hB<{Owc&}Z#)C)EU7Jq3j0|2zSNcIkYUh4Yym z&ogBHEoa=K{FXgv_?8JW!!J%^4}ov0E~|;OAm6FJ*+Ejo^g4wco=!gt{GTc>08OYT z2ue@Su7GH0a1K7XC6iax)3U&+dB!j7OE|2914;ztk1oO#M_we|U01q5p94Su2$)Hx z3bB0`C+l|~?PA@f`WOIY0T`TMo;!)XI-$)(gAD?p3eWxcFs@vWOI&tux3A-_HwH%q zY;wpB3X#^YZ!6$bFs%n$xChG2q{^@e9pEWGVtBhfJt+=E*-Nl0 z(n+iWm+kDP@lX{JcMAmy4ztsxCv%A6O%K2is$Q0E%738RbD;zED6Fz(}!6RkP1nK&hCj zAXu0{lrajU-gI(Q4X#>n0{CU&uhH)s3=qD-T44T8m`Krt`M-UG6h^5M1ES>Cy8tNn z`BZopmzF<5Yy`+m9Cy{DWyY1*gwhCrOi1O96WjmIO3o-SK{j6u7<)ac9&}Wjs)1@B z0Y3c_x$qf2baWb3pPYd|?f)l9zyg?o>~B8DpD+;x$)RSko;iDVR_ru664V&&Rii6+ zdRT}^v)hjD9KAsh37&|uKlr_HKq+_TJuQB!yf=oiZ@9Ux&IQS40cz#*<{rM(8XV5y(KX z4mb||p(=pcdiJcxb-9iAHaVL<$sqZS^ZF;(lS-(5YVQx-AT&9rdV74NTDJMLlDhPF z^)ooGM``)DqJB7BPt+lw&hkz@>B)cp_Go^uylEiR^qWoAn8$PbwAw=(d1l1 zw~F?A(^GA5P5oeIbe(N__g2fp?k@LR2KS)M1!1o?c;@ z{Q7N0-u))nc^wRiw>$Qz8iEP1tZh)MOc&Q$Ht^P-IBhT>O7bwy=$AoP%1l1b8|t0= zcPBnQk7+LQT8e}tKe81etA8zHkIdPkqc6@6wL1SiA-ApJ7=2Hg zFh9t1i|^m*&gZ1~>o-&dr5(b@ar;wZw#QG}zp)L|5_@7gNTZ+r4VNxi6@VURyv3@i2_U zyI!907g@Bt;4Y2sF*!Kgc`(LC&^@~Kx<2pr)e)#Sn{8Pcn&Y1i$QDkMY!Li&r41=R zz`gLzYbH7jsy)P`%QuC-Uvu#&{mX6vHMhi=EB7dl!{KO3D6`*tf9lq!eTK4I500ND zOto5>dep?jpks`OjjusZ8At-`Z}gvEOc58R$3yb=R^EL#5Z7ZEPN1VY+=jkPf|f;% z&9KERFGS;VI!$-1mEF?TpIy84)YQhKjq+7k9Ab=i7YxF52`7*|&Ebm{*SpJ@T4V6I zhLu=&Jo8ZPw|rae@3Hx!uw9J+PE{H<++i4qoh-gj{A zkp$gW)$|=SAL6?LpQ+=pDtEh+$}q~|2Im%l&Y}_4+3Yfx(nXVt=={MrrTV;XVYx5e zvrU-f_Nc9{{NVGq4Ihj11@WiiY83lcdCYpeneYndRwsn zf{~0`N8|QS5*h)P9{coJZ=I{3x7%9Cyn@Wxi!{Ww)|@9ZkFHbLdUq{s8pe#rQQ^GqfrF6I8NHp?U-RHH!&> z)*+w`G~{IxA4(x>ypMjS>#ek5A=-?_?TNy-Rb58jf)DFk)d(4%6sFR%bvE8Ew}}|h z$-J7rpjbKWq0A@sq|@U0Y56ChEXh?dbdjlL4IG9>TfI+7DV6aj!VHbclHKc;Rx~`@ z9b8$S4%m3Pd6sd$F>J_cfJ6 zY*r&&B3miN2D4t1Kr^S~08aCG$yt`v=SAtRX^q79w?Fu)*lC zf;#i+rJa+TjU!3hcW3(btBQ`j32)sRHl`WbSs!otC%ByW#IElqqsgCcd3$zmID6Az zs1L1UeZ@4Xrt8sP2OQXd(Q~)u+n0R=uE*g3kuGrD1cZ$YZd*D9#1l8SP6|^TSm>!G^kW=VB%Tz`^ceEwAgiuaXs%mv69Bq%*W;X))U(w(z`~w zGOmcTrrp%JUXX9$a$0~$YcRKtz=!4|(oFQp6IyVnc&$7{+DD(JgeuNTbf=W&L2Xtx z8vRpsk`Po(4O|2*97lRcRPb6Ks@wza?hy@(@-u?-}lnbop>QJXJelLx{q{ ztq0z2-F6XB#*XOyblDSlC%P;p(iIId5DVzprxh7kGK%oh>DLIG-leUt!b-t$41rO7 zLS5a!LvM+#-PGMA;#v1|7?#3ncOd3kLgY-!ha1?ekI4L$u}3tX_-kKG8@?NN?!7}L zi8OQ^7SiqG{qFrY*%ViS7h#hYf59I}32A?6i+h!kn2Ntc zyrZz8W2y3xq`Lw&Dpq&H1|N&m)iqxWS2_FQ z!92;uH|>R|_G^7XIUYS*YDNGq-7GHWwQhFunA*|xn-@&><2oDRVc{QP5lH8h@7m3` zPT1mnzX5VRxz>qtu4%GKFHq~r<#hj!n$b9^@&_38)9(HbZ*XJi4qtK>o-79p?*Gtl z+52`9bzU~FX4RND$Es^eNT|g-FT%NMy3YibrWq3~xo0%F$DiW*m}gI{TfcVsyU&dU ziwjrsCY@pc8_9z*gqp3wd% zkS^WnA80WW<$QU41SA3J8ETGMvvnQ0d}>~lTA+!Rm*B1QDh9$w=I7{QUfk9$<#tf! zN}0`*i54cu;&xY)yilYEz_E-=g+e_4+H^&n*S?OrU|-!})q4$PRx9n}LxU?{Fu94q zamAMT8E;sm#SNcUJ!)zFTQ$4>Nb+Ny6I`p&yB8gDf%vXny27G0g{V;Ljf6q*xy66E zvt*e=dUXX({`SZecKT%PVyh4D)vII-mvsbu8GB%TF=g1>yr&UoRd3H`0{xO7Tma0s z;a~16^^QtIT^CG-#WXEH>w2YZ+G_~n*y`^*DJeO;(JDQ$B7H~LD#HghvE}NX&Vy~%~)!X|xVVvhv5~fyaD{(gn zmFjUobfVEZF~-I5rTfUVs?Au?_O2S zPpTh1Z|weNTZL4bxJS@6t64r}Db~|9@+sRa-zH6w01w5$P~{Hfa&apfc;$v}nLXtR3b0Rju>yk`cJanYUh)x-ON5CK}=b=-=@~u?T0g0)aY3 z2A$cnrD$XBqCCIXu)fa1d}(9ji-&xDnsI!>#f_G@upq+sr;abH7$&nCjZcd4=E?DM z#v{dgVdtrXs;uN5rU4g5DWh7ioR#2=c!6Xds}%2i^v(T9t*AkQ-UMsK(N?C|GTy!> zfCn&b_8z%sm3q=kYr}~6xNJ1VZ(vFD6_nz1so{;wHY;7iEGc=SB#Re=cXM7i8?2N$ zw6m0Vxh`4Noh&cBc2F)X@l7{~JJHIf8v+0_UzZA^o~huIx7n*y#5GMnKU9XSJ`hXN zT2HDx85fB!ZGY6+sM0xHMMm^qMZ%uezORJ>Ho0d&#i7 zKLXu~JSYlm@amH4L5HLgU&R|sSOm?bK+rkt#1K|l8(-Q*;Gih$d~23BQ(#f^Diu&4 zjn6-_;7<{&UKm?l6A!9MaKZmkpp^lVkWJS_d;2y{wj};m@2^;qck3>zY>{Jg;Z%}# ztRO3>-4O@Edu@|e)jwi?oW8hKt^oDEcBr5~w1zb3KZ+vM*(wuFSgRRS{^8F9m5Frq zFnqN|xEldZs7zD}6ukXqX_7OCdqo%>r`42CUvQerqvl(P__Dw5U*sAnTAJ`J*7%jr9FD`tB4JpM@R%p@LS~C^B zFzxvSWUMsqo9y(j^VAqXLSU%UI5Q8ft;%e4faM#+Y^|C;-1Zk_HH6YWvTDz*H~OXT z0qr9sn~qB8^;9(rA`117eJwA^N#6jY}?~x@eh%=2|5k+$OoIux1lv->ulj=`H%A6 zI{qcpKa0^@00#2zidR0ysVjH7ecz&R6pN3=jj-~Fx%6@O{P50v5&XtVBd@DaHlE*T zgr=?eTcBsxHX>xk5U!(HTE|!KG}+MF78G$kO#!<9oAkAu_smHBN$9ILyqKR}c!|?y znnIukzkL53e_+^?`?Bsy73cLClx(QABzD=7^;Zmpa4Tjei~W)sQ&DD!YlP!&$5Cr?9YZLzEa{Cj@+xz z`}K9-xyC5l;-{Q8PFyvpaBHiJ<=dpe=?f#_s^1i}8$uiv7U&bg)Rbb1q%BYuSpu`D zXuf<74>aT&Oj>&NTQEt02-E1=Fvn+4+q+e_M@IWbU}S`1{7plvCr(3ECSeXP1R;(p z3-sV!VM?OU^zY97%@#d}QFlGG9mrdY)g^cI9d?mKvp%48BD6J*wm_{ChfAGn_BK4n z0&jTb-EV1WHJL23o$dk1QvT62k1~#W-jF2TEP)|r0xZICzCmR^jYCc??047~YZBlg zpaY@|5roROZs!YqXKd8n=*^GAEI<0)oPMn0`Co{RWLAycAUv%^+M&Foq)u+?e`l4t z1iV^M;p&C2zp2(YKPKAqk>hT_@w6-0S8VHSKa#oFN)ffa~;&_0{$ZBOL^9A_}6@>YihjFO5__rN;GMgSrwI$R8B{bJ3BCo1NQs zWm0-XzoGjzXhgg0QJcu1tc*ce%ey_Qb+H}sBN495A|ub4SjV08({R_5!$P2jB!x%Ux~Rzmx8Au?_W{rsX7G!N|@ z4Z2NpiTQKevVyoR2+&lpSGLZ6#di0*8=(@5Id53<-?;`g9WUaTs?pti`t5 zSJ;qI&7_c};u5o79=Zs0H9G^?g%G|s!1YT_>(S7k6t-QNh>m@Uzd?wpw(v7}UbY!! zJ4*D!Lm&o`9b5HeaZhTT%srfCnObfa*51CYtc!*R4-gm0W>v-W#Jq|})2H1*tJh|N zHy2SnYcuD8^E~Gb1O((=%Q!)|#wp@uI3=H!%R&QG4`l!^D;r~bPK?X{{8RYj@+4xv3C}c!0;Idr(SZy!q zGO68(LVS6&H&MaTzrQ!heZn{l*$0*iWT$_$KhE3osqJx5*HgufH;G8AAxF>NQ{bZ# z_H+rR0#7HKOd~29O#52mC1&bZa3nU3y27I6HXd6xZCbdnmmjApekwOzgdb>ft#?gK zXl?-Hd>3h@wqjC7`f=F*quLGaqudJFcXA98TVxFP(wS~L1Q@j^pwZIQ7kq%Uf-Ejq zF9k?p{Q}b$)awa5_Z5d7;P5aGJJT%$-V2`vJno-?B7_`TCi&dapHMy1;vR#GIs>Oa z>W0)>Yu-?`g|8lvb3m_dA%wP_R5rD6VkgQx2o%xDVxPa-HPoxO)wpA1!@uVgM({YctQBa;*~$Gruv4JF_u zhy1yQrIcis=($t4VD^~O^HFZc<7khY(=X|7S(7mfiafv~^8;Sk*q2FxG;`1wJBnO8 z3e%tQ##?7j2grEDHk^)HJiNDV^;u zTi*QY^9W@ypO2@^^GP=-jq2*jxh9Rt$CcC%JKmIHAd zi}b8#&1Pvs?WVHW6kT;5_sacf8je8W*eEzE$MKp~4PwEQL@AX>Gm&cHnbFoQ7eUO2 zL6ea?KCqXXT}NrS)UNDxKh~9V%Zr~-xjwHcrL@o%MKSWyXzEG7qD=Tptr#zGoDncWt8qRQ{C{AELu>c2}lM`aA{So1x1B< zsy(Q@Zwj+Lw8R(jbPJ0-ux1T>N+0$l50}G&-43iOS@~JlyiqF}8~7VEAZ7%I0J=y* zR1M07C2PN0Vjj-gmh&|^UzSf81`e=;1`BWyygXE8n(&C1%O^XCt*HbQ6RyGjppr$H z4@x`=ygOT_&J<}LAX6;k+^zGft*K>SU1-(oFIOaL|0~5Aez>>!@;BqSHBY0p{w29-LeoqVfDKC+n5-D*rR)5)@ z$wHcuzgdJ^$I>x9NZ;^i2tlNs3vv{)5uu&K-{C>CqYh*ab7aRa-?_VgtGT}&BSB6A zwA1eTD(PO;X7H~L86aCZKXR{RKz7usBcMzA7cOkNfJLFY*hZKotDhaiG~8v?!KzL* zhN{j>pMCuFVW~<5FKeJU-0C&GAG7r7#dpUnze0I|WxARdHTAaL z34L=<@UZ;7J)oGMM!e)~ORW{0jMS>}-&2E}-vQ1x2y>KZjlK9|2j=luu3<5d@r3!;U?opDQU{E|Ed49%!INcct0(@xWHElVJD+ zY|m=wAQyUvKb`aAFAu{mp#J{?%P9C;d+Q&diR-9c`tr@0FXprtFuX!`L=s%RqnBRB zehaz$AK~C~;n2#Gd@TQ~u#jn>X0mn8>w8Kixe8@h79wtQdEDu#j4Z@vf^M=!^eD>mTQ;S(}hd$H$!V>b}qp2tlBguhh= zp9o9Wkoov!ig}jP>W^IK33|SFe2i~*M58%u08BRoWrUNxd%;V4nFZM-tL=tK2%YyNwCE9Ltzsy)b1D! z9V`FwM<#Al&R$pG$r*e)EL#S6a9V?zF-V2g>bYsaE=~GlaN6eMeMdTG80QikcA$}hhKM4S7z2-$_Kv74 z#uyxmd&O!os@@Uo4Fnko_qJERRyw(IRuUY66IoKz{E8#|9AHnlMRg}&Tv@OBB~Yo| zoDJwDMSCP5Ce}m@`Zrn04Cmye8gWf6ztWiAv{C3 zRN%K6)hzBWd$pLy&d@=%KBwweaXz8?s0;jKGz7)FY>@mMM4E2-k5lLt@6OG@Kqn;D z!r!xADx*V11u;m)6f1c~)0d z=N@{%TiJ@a*}Yr-KG^5#P+bAxM6S_Q3IASy7b?ZKvo33VSigoq^LplN$H{Dnja_c> z)orhunLmFt$@^9*Gp98~hk9|&ba1ZyF6UlJMtLC{C}m}Oysl#? zgo$#5aTwbh_$#E>s5lg9WU^?F*_B3@U#|hupmSZ1dahX|_SVeuH!r*@z-@=5peS9g zyZS1cn7u-7+@&IuaE5QOyLqFM%hM*-G|Kkf+86jxB+)?oG*=NWxES1HAAa5T-u&Aj zaXdT4VH_&Z?#o=`7zOn?L8AHAS_cotBD|{Zyb(d@fyk|O52*+tpyReVy*;IuQ8CMFCPJ~a1AFevfrHMutCCyrcadPHSNRKKsh^n zLZrO{nK2)h{GVH;bz+Lt0I%X#ZGak3bzpARWZn z9OltG^kJnB`@8QO4S!01#z1`{ZGIE&8dTTC29vOu%xM&1&VGUO%qqcCNl5`N?a?!m z`%-3Tv=O*I*&9#KKXN+!0bECGIc>#Nc9AU}QR#^9MI1IvM0yu;Dr&qbA5TZRD)-VO zaGzY0Bgs!!!7k*$qY0NpTprr=MS$GqNR5!QtjzVRi<#V*&U9(&~Y zNZbp_d=T3tiZ@BeseF$zuLox|EEJkRR6tHIF<(5B{l1tseHYqm_NS}XosIfvP}%53 zZ03`8FI0{85FMT_LF>5TcFlGG@OMdF1)JZb$CC;=OdJcL?;cpl{n(kow|+_5i!>c? z1V)~ZiA>R7Hca&I7Y+nH@HXiN(hTCgg2fR>Zb$T zG|h31m3NjWNM2#u%Q#0@sRz%oy*Q)9&Fb^U7a@3QuER_$eQ&`rcI8cDM%U`$3x0y) zOx$q1OyWXKc?mb#Y0`CZ2*VI~5_2KQA&IgDm}}RLSHCAqW?q2IngP3+nYysyTWFd@ zw!)iWHDSv89mje7(pir8&i2dzfH@%iOJ-&{tEZKWDz_y|GIP@e|6C(QR@RyXtBQj- zmig*5?eTNny36xmfw8KbOpqU#&msX;aG}Ue2cbzBuUzP-JHZ~zEjA5q( zC49*<;tY5G{Uv9;Sg(7GV(p=L20#5V(h4-#xN*&bqci zYR(l;y;<8rG|3?GX$e_wx5SK{Qz>x<$~G1p1!!a>h=%JBE}ef2a+$!>HA?)@)yl zy+w0mix8*H{`_xy`Xp2-rWQ5yh@OXF7of(!u8;s2p|T2{&xvs zU~eG0x-Jgv2NwC#8(t3b_G24@_&!^_fvQX=~bd!g6!lC)9EdNQGx!p;r~awN)1?Vn)=;AAoK_S zt(13@P7)LHZ2fhmk&@37>x+9X}|K*HgaBmOJ YZm3jh@7~&pB$DF3hR&T5b(_%t16v24P5=M^ literal 0 HcmV?d00001 diff --git a/docs/logos/OAuth2_Proxy_vertical.svg b/docs/logos/OAuth2_Proxy_vertical.svg new file mode 100644 index 00000000..bf48ab0f --- /dev/null +++ b/docs/logos/OAuth2_Proxy_vertical.svg @@ -0,0 +1 @@ +OAuth2_Proxy_logo_v3 \ No newline at end of file From acb0d3ab797be699912aeef50212c273cb79913e Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 30 Oct 2019 10:04:29 +0000 Subject: [PATCH 24/26] Add logo to docs site --- docs/0_index.md | 2 +- docs/_config.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/0_index.md b/docs/0_index.md index 376bd754..e0e3227d 100644 --- a/docs/0_index.md +++ b/docs/0_index.md @@ -5,7 +5,7 @@ permalink: / nav_order: 0 --- -# oauth2_proxy +![OAuth2 Proxy](/logos/OAuth2_Proxy_horizontal.svg) A reverse proxy and static file server that provides authentication using Providers (Google, GitHub, and others) to validate accounts by email, domain or group. diff --git a/docs/_config.yml b/docs/_config.yml index 87f026c8..a53e9e14 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -14,6 +14,7 @@ # You can create any custom variable you would like, and they will be accessible # in the templates via {{ site.myvariable }}. title: OAuth2_Proxy +logo: /logos/OAuth2_Proxy_horizontal.svg description: >- # this means to ignore newlines until "baseurl:" OAuth2_Proxy documentation site baseurl: "/oauth2_proxy" # the subpath of your site, e.g. /blog From bb8b6c0d51deee4d3f50a19d38c0f1f878869c6f Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 30 Oct 2019 10:04:41 +0000 Subject: [PATCH 25/26] Add logo to ReadMe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09fde41e..daae04cc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# oauth2_proxy +![OAuth2 Proxy](/docs/logos/OAuth2_Proxy_horizontal.svg) [![Build Status](https://secure.travis-ci.org/pusher/oauth2_proxy.svg?branch=master)](http://travis-ci.org/pusher/oauth2_proxy) [![Go Report Card](https://goreportcard.com/badge/github.com/pusher/oauth2_proxy)](https://goreportcard.com/report/github.com/pusher/oauth2_proxy) From 0df5a77c53aa413cfe119ac02514e322d3bb2eca Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 30 Oct 2019 10:25:51 +0000 Subject: [PATCH 26/26] Update changlog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87a6c5ac..d72f4565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - This PR adds the IDToken into the session for the Azure provider allowing requests to a backend to be identified as a specific user. As a consequence, if you are using a cookie to store the session the cookie will now exceed the 4kb size limit and be split into multiple cookies. This can cause problems when using nginx as a proxy, resulting in no cookie being passed at all. Either increase the proxy_buffer_size in nginx or implement the redis session storage (see https://pusher.github.io/oauth2_proxy/configuration#redis-storage) - [#286](https://github.com/pusher/oauth2_proxy/pull/286) Requests.go updated with useful error messages (@biotom) - [#302](https://github.com/pusher/oauth2_proxy/pull/302) Rewrite dist script (@syscll) +- [#304](https://github.com/pusher/oauth2_proxy/pull/304) Add new Logo! :tada: (@JoelSpeed) # v4.0.0