From c772c3a30300ea353dcbccb169fa7eec1f9c924b Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Sun, 3 Jan 2021 12:12:39 -0500 Subject: [PATCH 1/2] Bug 1612286 - Single sign-on through Mozilla IAM --- .circleci/checksetup_answers.txt | 9 + .circleci/config.yml | 22 +- Bugzilla.pm | 6 +- Bugzilla/API/V1/User.pm | 1 + Bugzilla/App.pm | 7 +- Bugzilla/App/API.pm | 67 +- Bugzilla/App/Main.pm | 2 +- Bugzilla/App/OAuth2/{ => Provider}/Clients.pm | 26 +- Bugzilla/App/Plugin/OAuth2/Client.pm | 145 + .../Plugin/{OAuth2.pm => OAuth2/Provider.pm} | 2 +- Bugzilla/Auth/Login/OAuth2.pm | 46 + Bugzilla/Auth/Persist/Cookie.pm | 2 +- Bugzilla/CGI.pm | 6 +- Bugzilla/Config/Auth.pm | 2 +- Bugzilla/Config/OAuth2Client.pm | 35 + Bugzilla/Report/Ping/Simple.pm | 2 +- Bugzilla/Template.pm | 4 +- Bugzilla/Test/MockParams.pm | 2 +- Bugzilla/Test/Selenium.pm | 118 +- Bugzilla/Test/Util.pm | 13 +- Bugzilla/User.pm | 62 +- Bugzilla/Util.pm | 17 +- Bugzilla/WebService/User.pm | 15 +- Dockerfile | 2 +- Dockerfile.bmo-slim | 4 +- Dockerfile.cpanfile | 2 +- Makefile.PL | 3 + conf/checksetup_answers.txt | 2 +- cpanfile | 3 + cpanfile.snapshot | 4523 +++++++++-------- docker-compose.yml | 19 + extensions/BMO/Extension.pm | 3 +- .../en/default/pages/group_members.html.tmpl | 9 +- extensions/GitHubAuth/Extension.pm | 2 +- .../auth/login-additional_methods.html.tmpl | 9 +- .../login-small-additional_methods.html.tmpl | 16 +- extensions/MozillaIAM/Config.pm | 17 + extensions/MozillaIAM/Extension.pm | 171 + extensions/MozillaIAM/bin/person_update.pl | 50 + extensions/MozillaIAM/lib/API/V1/User.pm | 69 + extensions/MozillaIAM/lib/Config.pm | 32 + extensions/MozillaIAM/lib/Constants.pm | 25 + extensions/MozillaIAM/lib/Daemon.pm | 100 + extensions/MozillaIAM/lib/Person.pm | 210 + extensions/MozillaIAM/lib/Util.pm | 219 + .../MozillaIAM/t/bmo/moz_iam_cis_ping.t | 104 + .../MozillaIAM/t/bmo/moz_iam_email_change.t | 75 + .../MozillaIAM/t/bmo/moz_iam_oauth_login.t | 68 + .../auth/oauth2_login_button.html.tmpl | 19 + .../default/admin/params/mozillaiam.html.tmpl | 22 + .../hook/account/email/confirm-end.html.tmpl | 19 + .../hook/global/code-error-errors.html.tmpl | 20 + .../hook/global/user-error-errors.html.tmpl | 18 + github.cgi | 6 +- oauth2.cgi | 72 + qa/t/lib/QA/Util.pm | 6 +- qa/t/test_bug_edit.t | 2 +- qa/t/webservice_user_create.t | 2 +- scripts/c9-install | 2 +- scripts/entrypoint.pl | 24 +- scripts/generate_bmo_data.pl | 9 +- skins/lib/fontawesome-brands.min.css | 5 + skins/lib/fontawesome-solid.min.css | 5 + skins/lib/fontawesome.min.css | 5 + skins/standard/global.css | 9 + skins/webfonts/fa-brands-400.eot | Bin 0 -> 134346 bytes skins/webfonts/fa-brands-400.woff2 | Bin 0 -> 76764 bytes skins/webfonts/fa-solid-900.eot | Bin 0 -> 203030 bytes skins/webfonts/fa-solid-900.woff2 | Bin 0 -> 78196 bytes t/bmo/bounced-emails.t | 69 +- t/bmo/oauth2-client.t | 57 + t/bmo/passwords.t | 331 +- t/{mojo-oauth2.t => mojo-oauth2-provider.t} | 0 .../account/auth/login-small.html.tmpl | 7 + .../en/default/account/auth/login.html.tmpl | 6 + .../auth/oauth2_login_button.html.tmpl | 19 + .../default/account/email/confirm.html.tmpl | 2 + template/en/default/admin/admin.html.tmpl | 4 +- .../{ => provider}/confirm-delete.html.tmpl | 2 +- .../oauth/{ => provider}/create.html.tmpl | 2 +- .../admin/oauth/{ => provider}/edit.html.tmpl | 2 +- .../admin/oauth/{ => provider}/list.html.tmpl | 6 +- .../admin/params/oauth2client.html.tmpl | 25 + template/en/default/global/header.html.tmpl | 5 + .../en/default/global/user-error.html.tmpl | 5 + token.cgi | 11 +- 86 files changed, 4624 insertions(+), 2522 deletions(-) rename Bugzilla/App/OAuth2/{ => Provider}/Clients.pm (85%) create mode 100644 Bugzilla/App/Plugin/OAuth2/Client.pm rename Bugzilla/App/Plugin/{OAuth2.pm => OAuth2/Provider.pm} (99%) create mode 100644 Bugzilla/Auth/Login/OAuth2.pm create mode 100644 Bugzilla/Config/OAuth2Client.pm create mode 100644 extensions/MozillaIAM/Config.pm create mode 100644 extensions/MozillaIAM/Extension.pm create mode 100644 extensions/MozillaIAM/bin/person_update.pl create mode 100644 extensions/MozillaIAM/lib/API/V1/User.pm create mode 100644 extensions/MozillaIAM/lib/Config.pm create mode 100644 extensions/MozillaIAM/lib/Constants.pm create mode 100644 extensions/MozillaIAM/lib/Daemon.pm create mode 100644 extensions/MozillaIAM/lib/Person.pm create mode 100644 extensions/MozillaIAM/lib/Util.pm create mode 100644 extensions/MozillaIAM/t/bmo/moz_iam_cis_ping.t create mode 100644 extensions/MozillaIAM/t/bmo/moz_iam_email_change.t create mode 100644 extensions/MozillaIAM/t/bmo/moz_iam_oauth_login.t create mode 100644 extensions/MozillaIAM/template/en/default/account/auth/oauth2_login_button.html.tmpl create mode 100644 extensions/MozillaIAM/template/en/default/admin/params/mozillaiam.html.tmpl create mode 100644 extensions/MozillaIAM/template/en/default/hook/account/email/confirm-end.html.tmpl create mode 100644 extensions/MozillaIAM/template/en/default/hook/global/code-error-errors.html.tmpl create mode 100644 extensions/MozillaIAM/template/en/default/hook/global/user-error-errors.html.tmpl create mode 100644 oauth2.cgi create mode 100644 skins/lib/fontawesome-brands.min.css create mode 100644 skins/lib/fontawesome-solid.min.css create mode 100644 skins/lib/fontawesome.min.css create mode 100644 skins/webfonts/fa-brands-400.eot create mode 100644 skins/webfonts/fa-brands-400.woff2 create mode 100644 skins/webfonts/fa-solid-900.eot create mode 100644 skins/webfonts/fa-solid-900.woff2 create mode 100644 t/bmo/oauth2-client.t rename t/{mojo-oauth2.t => mojo-oauth2-provider.t} (100%) create mode 100644 template/en/default/account/auth/oauth2_login_button.html.tmpl rename template/en/default/admin/oauth/{ => provider}/confirm-delete.html.tmpl (97%) rename template/en/default/admin/oauth/{ => provider}/create.html.tmpl (98%) rename template/en/default/admin/oauth/{ => provider}/edit.html.tmpl (98%) rename template/en/default/admin/oauth/{ => provider}/list.html.tmpl (78%) create mode 100644 template/en/default/admin/params/oauth2client.html.tmpl diff --git a/.circleci/checksetup_answers.txt b/.circleci/checksetup_answers.txt index 272c436c04..029f67cc8e 100644 --- a/.circleci/checksetup_answers.txt +++ b/.circleci/checksetup_answers.txt @@ -13,3 +13,12 @@ $answer{'urlbase'} = 'http://bmo.test/'; $answer{'mail_delivery_method'} = 'Test'; $answer{'auth_delegation'} = 1; $answer{'utf8'} = 'utf8mb4'; +$answer{'oauth2_client_enabled'} = 1, +$answer{'oauth2_client_id'} = 'client_id'; +$answer{'oauth2_client_secret'} = 'client_secret'; +$answer{'oauth2_client_authorize_url'} = '/oauth/test/authorize'; +$answer{'oauth2_client_scopes'} = 'openid profile email'; +$answer{'mozilla_iam_enabled'} = 1; +$answer{'mozilla_iam_person_api_client_id'} = 'client_id'; +$answer{'mozilla_iam_person_api_client_secret'} = 'client_secret'; +$answer{'mozilla_iam_mandatory_domains'} = 'mozilla.com'; diff --git a/.circleci/config.yml b/.circleci/config.yml index 9dd20fc450..49424267cc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -193,8 +193,8 @@ jobs: name: run sanity tests command: | [[ -f build_info/only_version_changed.txt ]] && exit 0 - docker-compose -f docker-compose.test.yml run --no-deps bmo.test \ - test_sanity $(circleci tests glob 't/*.t' 'extensions/*/t/*.t' | \ + docker-compose -f docker-compose.test.yml run -e CIRCLE_JOB=$CIRCLE_JOB \ + --no-deps bmo.test test_sanity $(circleci tests glob 't/*.t' 'extensions/*/t/*.t' | \ circleci tests split) | tee artifacts/$CIRCLE_JOB.txt - store_artifacts: path: /app/artifacts @@ -222,8 +222,8 @@ jobs: at: /app/build_info - run: | [[ -f build_info/only_version_changed.txt ]] && exit 0 - docker-compose -f docker-compose.test.yml run bmo.test test_webservices | \ - tee artifacts/$CIRCLE_JOB.txt + docker-compose -f docker-compose.test.yml run -e CIRCLE_JOB=$CIRCLE_JOB \ + bmo.test test_webservices | tee artifacts/$CIRCLE_JOB.txt - store_artifacts: path: /app/artifacts - *store_log @@ -250,8 +250,8 @@ jobs: at: /app/build_info - run: | [[ -f build_info/only_version_changed.txt ]] && exit 0 - docker-compose -f docker-compose.test.yml run bmo.test test_selenium | \ - tee artifacts/$CIRCLE_JOB.txt + docker-compose -f docker-compose.test.yml run -e CIRCLE_JOB=$CIRCLE_JOB \ + bmo.test test_selenium | tee artifacts/$CIRCLE_JOB.txt - store_artifacts: path: /app/artifacts - *store_log @@ -276,9 +276,13 @@ jobs: [[ -d artifacts ]] || mkdir artifacts - attach_workspace: at: /app/build_info - - run: | - [[ -f build_info/only_version_changed.txt ]] && exit 0 - docker-compose -f docker-compose.test.yml run bmo.test test_bmo -q -f t/bmo/*.t + - run: + name: run bmo specific tests + command: | + [[ -f build_info/only_version_changed.txt ]] && exit 0 + docker-compose -f docker-compose.test.yml run -e CI=1 -e CIRCLE_JOB=$CIRCLE_JOB \ + bmo.test test_bmo -q -f $(circleci tests glob 't/bmo/*.t' 'extensions/*/t/bmo/*.t' | \ + circleci tests split) | tee artifacts/$CIRCLE_JOB.txt - *store_log workflows: diff --git a/Bugzilla.pm b/Bugzilla.pm index 7397a7611c..c7a358bbc8 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -206,15 +206,15 @@ sub page_requires_login { return request_cache->{page_requires_login}; } -sub github_secret { +sub github_token { my ($class) = @_; my $cache = request_cache; my $cgi = $class->cgi; - $cache->{github_secret} //= $cgi->cookie('github_secret') + $cache->{github_token} //= $cgi->cookie('github_token') // generate_random_password(256); - return $cache->{github_secret}; + return $cache->{github_token}; } sub passwdqc { diff --git a/Bugzilla/API/V1/User.pm b/Bugzilla/API/V1/User.pm index 23f6392473..3ffba98899 100644 --- a/Bugzilla/API/V1/User.pm +++ b/Bugzilla/API/V1/User.pm @@ -31,6 +31,7 @@ sub user_profile { groups => [map { $_->name } @{$user->groups}], mfa => lc($user->mfa), mfa_required_by_group => $user->in_mfa_group ? true : false, + iam_username => $user->iam_username, } ); } diff --git a/Bugzilla/App.pm b/Bugzilla/App.pm index b6ff12c5d4..b92d5bc455 100644 --- a/Bugzilla/App.pm +++ b/Bugzilla/App.pm @@ -25,7 +25,7 @@ use Bugzilla::App::API; use Bugzilla::App::BouncedEmails; use Bugzilla::App::CGI; use Bugzilla::App::Main; -use Bugzilla::App::OAuth2::Clients; +use Bugzilla::App::OAuth2::Provider::Clients; use Bugzilla::App::SES; use Bugzilla::App::Static; use Mojo::Loader qw( find_modules ); @@ -53,7 +53,8 @@ sub startup { unless $ENV{BUGZILLA_DISABLE_SIZELIMIT}; $self->plugin('ForwardedFor') if Bugzilla->has_feature('better_xff'); $self->plugin('Bugzilla::App::Plugin::Helpers'); - $self->plugin('Bugzilla::App::Plugin::OAuth2'); + $self->plugin('Bugzilla::App::Plugin::OAuth2::Client'); + $self->plugin('Bugzilla::App::Plugin::OAuth2::Provider'); push @{$self->commands->namespaces}, 'Bugzilla::App::Command'; push @{$self->renderer->paths}, @{ Bugzilla::Template::_include_path() }; @@ -201,7 +202,7 @@ sub setup_routes { Bugzilla::App::BouncedEmails->setup_routes($r); Bugzilla::App::CGI->setup_routes($r); Bugzilla::App::Main->setup_routes($r); - Bugzilla::App::OAuth2::Clients->setup_routes($r); + Bugzilla::App::OAuth2::Provider::Clients->setup_routes($r); Bugzilla::App::SES->setup_routes($r); $r->static_file('/__lbheartbeat__'); diff --git a/Bugzilla/App/API.pm b/Bugzilla/App/API.pm index b971df783b..c0027c5faf 100644 --- a/Bugzilla/App/API.pm +++ b/Bugzilla/App/API.pm @@ -10,6 +10,7 @@ package Bugzilla::App::API; use 5.10.1; use Mojo::Base qw( Mojolicious::Controller ); +use File::Basename qw(basename); use Mojo::Loader qw( find_modules ); use Module::Runtime qw(require_module); use Try::Tiny; @@ -22,18 +23,20 @@ use constant SUPPORTED_VERSIONS => qw(V1); sub setup_routes { my ($class, $r) = @_; - # Add Bugzilla::API to namespaces for searching for controllers + # Add Bugzilla::API and Bugzilla::Extension to + # namespaces for searching for API controllers my $namespaces = $r->namespaces; - push @$namespaces, 'Bugzilla::API'; + push @$namespaces, 'Bugzilla::API', 'Bugzilla::Extension'; $r->namespaces($namespaces); # Backwards compat with /api/user/profile which Phabricator requires - $r->under('/api' => sub { - my ($c) = @_; - _insert_rest_headers($c); - Bugzilla->usage_mode(USAGE_MODE_REST); - }) - ->get('/user/profile')->to('V1::User#user_profile'); + $r->under( + '/api' => sub { + my ($c) = @_; + _insert_rest_headers($c); + Bugzilla->usage_mode(USAGE_MODE_REST); + } + )->get('/user/profile')->to('V1::User#user_profile'); # Other backwards compat routes $r->under( @@ -60,22 +63,46 @@ sub setup_routes { } ); + # Standard API support foreach my $version (SUPPORTED_VERSIONS) { foreach my $module (find_modules("Bugzilla::API::$version")) { - try { - require_module($module); - my $controller = $module->new; - if ($controller->can('setup_routes')) { - $controller->setup_routes($rest_routes); - } + _load_api_module($rest_routes, $module); + } + } + + # Extension API support + my @ext_paths = glob bz_locations()->{'extensionsdir'} . '/*'; + my @ext_api_paths = grep { !-e "$_/disabled" && -d "$_/lib/API" } @ext_paths; + + foreach my $version (SUPPORTED_VERSIONS) { + foreach my $ext_path (@ext_api_paths) { + my $ext_name = $ext_path; + $ext_name =~ s|^.*extensions/||; + + my @module_paths = glob "$ext_path/lib/API/$version/*"; + foreach my $module_path (@module_paths) { + my $module = "Bugzilla::Extension::${ext_name}::API::${version}::" + . basename($module_path, '.pm'); + _load_api_module($rest_routes, $module); } - catch { - WARN("$module could not be loaded"); - }; } } } +sub _load_api_module { + my ($routes, $module) = @_; + try { + require_module($module); + my $controller = $module->new; + if ($controller->can('setup_routes')) { + $controller->setup_routes($routes); + } + } + catch { + WARN("$module could not be loaded"); + }; +} + sub _insert_rest_headers { my ($c) = @_; @@ -83,8 +110,10 @@ sub _insert_rest_headers { my @allowed_headers = qw(accept authorization content-type origin user-agent x-bugzilla-api-key x-requested-with); $c->res->headers->header('Access-Control-Allow-Origin' => '*'); - $c->res->headers->header('Access-Control-Allow-Headers' => - join ', ', @allowed_headers); + $c->res->headers->header( + 'Access-Control-Allow-Headers' => join ', ', + @allowed_headers + ); } 1; diff --git a/Bugzilla/App/Main.pm b/Bugzilla/App/Main.pm index 5c06b55f36..6909c98b8c 100644 --- a/Bugzilla/App/Main.pm +++ b/Bugzilla/App/Main.pm @@ -26,7 +26,7 @@ sub setup_routes { sub root { my ($c) = @_; $c->res->headers->cache_control('public, max-age=3600, immutable'); - $c->render(handler => 'bugzilla'); + $c->render('index', handler => 'bugzilla'); } sub testagent { diff --git a/Bugzilla/App/OAuth2/Clients.pm b/Bugzilla/App/OAuth2/Provider/Clients.pm similarity index 85% rename from Bugzilla/App/OAuth2/Clients.pm rename to Bugzilla/App/OAuth2/Provider/Clients.pm index 11d8b53777..25d7c411b9 100644 --- a/Bugzilla/App/OAuth2/Clients.pm +++ b/Bugzilla/App/OAuth2/Provider/Clients.pm @@ -5,7 +5,7 @@ # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. -package Bugzilla::App::OAuth2::Clients; +package Bugzilla::App::OAuth2::Provider::Clients; use 5.10.1; use Mojo::Base 'Mojolicious::Controller'; @@ -20,7 +20,7 @@ sub setup_routes { # Manage the client list my $client_route = $r->under( - '/admin/oauth' => sub { + '/admin/oauth/provider' => sub { my ($c) = @_; Bugzilla->usage_mode(USAGE_MODE_MOJO); my $user = $c->bugzilla->login(LOGIN_REQUIRED) || return undef; @@ -30,12 +30,12 @@ sub setup_routes { return 1; } ); - $client_route->any('/list')->to('OAuth2::Clients#list')->name('list_clients'); - $client_route->any('/create')->to('OAuth2::Clients#create') + $client_route->any('/list')->to('OAuth2::Provider::Clients#list')->name('list_clients'); + $client_route->any('/create')->to('OAuth2::Provider::Clients#create') ->name('create_client'); - $client_route->any('/delete')->to('OAuth2::Clients#delete') + $client_route->any('/delete')->to('OAuth2::Provider::Clients#delete') ->name('delete_client'); - $client_route->any('/edit')->to('OAuth2::Clients#edit')->name('edit_client'); + $client_route->any('/edit')->to('OAuth2::Provider::Clients#edit')->name('edit_client'); } # Show list of clients @@ -44,7 +44,7 @@ sub list { my $clients = Bugzilla->dbh->selectall_arrayref('SELECT * FROM oauth2_client', {Slice => {}}); $self->stash(clients => $clients); - return $self->render(template => 'admin/oauth/list', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/list', handler => 'bugzilla'); } # Create new client @@ -60,7 +60,7 @@ sub create { $vars->{scopes} = $dbh->selectall_arrayref('SELECT * FROM oauth2_scope', {Slice => {}}); $self->stash(%{$vars}); - return $self->render(template => 'admin/oauth/create', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/create', handler => 'bugzilla'); } $dbh->bz_start_transaction; @@ -107,7 +107,7 @@ sub create { $vars->{'client'} = {description => $description}; $vars->{'clients'} = $clients; $self->stash(%{$vars}); - return $self->render(template => 'admin/oauth/list', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/list', handler => 'bugzilla'); } # Delete client @@ -126,7 +126,7 @@ sub delete { $vars->{'token'} = issue_session_token('delete_oauth_client'); $self->stash(%{$vars}); return $self->render( - template => 'admin/oauth/confirm-delete', + template => 'admin/oauth/provider/confirm-delete', handler => 'bugzilla' ); } @@ -149,7 +149,7 @@ sub delete { $vars->{'client'} = {description => $client_data->{description}}; $vars->{'clients'} = $clients; $self->stash(%{$vars}); - return $self->render(template => 'admin/oauth/list', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/list', handler => 'bugzilla'); } # Edit client @@ -177,7 +177,7 @@ sub edit { if ($self->req->method ne 'POST') { $vars->{token} = issue_session_token('edit_oauth_client'); $self->stash(%{$vars}); - return $self->render(template => 'admin/oauth/edit', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/edit', handler => 'bugzilla'); } $dbh->bz_start_transaction; @@ -216,7 +216,7 @@ sub edit { $vars->{'client'} = {description => $description}; $vars->{'clients'} = $clients; $self->stash(%{$vars}); - return $self->render(template => 'admin/oauth/list', handler => 'bugzilla'); + return $self->render(template => 'admin/oauth/provider/list', handler => 'bugzilla'); } 1; diff --git a/Bugzilla/App/Plugin/OAuth2/Client.pm b/Bugzilla/App/Plugin/OAuth2/Client.pm new file mode 100644 index 0000000000..4d8da58f21 --- /dev/null +++ b/Bugzilla/App/Plugin/OAuth2/Client.pm @@ -0,0 +1,145 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::App::Plugin::OAuth2::Client; +use 5.10.1; +use Mojo::Base 'Mojolicious::Plugin'; + +use Bugzilla; +use Bugzilla::Constants; +use Bugzilla::Logging; +use Bugzilla::Hook; +use Bugzilla::Util qw(mojo_user_agent); + +use Mojo::Parameters; +use Mojo::URL; +use Try::Tiny; + +sub register { + my ($self, $app) = @_; + my $params = Bugzilla->params; + + return unless $params->{oauth2_client_enabled}; + + $app->helper( + 'oauth2.auth_url' => sub { + my ($c, $type, $args) = @_; + my $params = Bugzilla->params; + + $args->{scope} ||= $params->{oauth2_client_scopes}; + $args->{redirect_uri} ||= $c->url_for->to_abs->to_string; + + my $authorize_url = Mojo::URL->new($params->{oauth2_client_authorize_url}); + $authorize_url->query->append( + client_id => $params->{oauth2_client_id}, + redirect_uri => $args->{redirect_uri}, + response_type => 'code', + ); + if (defined $args->{scope}) { + $authorize_url->query->append(scope => $args->{scope}); + } + if (defined $args->{state}) { + $authorize_url->query->append(state => $args->{state}); + } + + return $authorize_url; + } + ); + + $app->helper( + 'oauth2.get_token' => sub { + my ($c, $args) = @_; + my $params = Bugzilla->params; + + if ($ENV{CI}) { + return { + access_token => 'fake_access_token', + expires_in => 3600, + refresh_token => 'fake_refresh_token', + scope => 'openid profile email', + token_type => 'bearer', + }; + } + + my $data = { + client_id => $params->{oauth2_client_id}, + client_secret => $params->{oauth2_client_secret}, + code => scalar($c->param('code')), + grant_type => 'authorization_code', + redirect_uri => $c->url_for->to_abs->to_string, + }; + + my $token_url = Mojo::URL->new($params->{oauth2_client_token_url}); + $token_url = $token_url->to_abs; + + try { + my $tx = mojo_user_agent()->post($token_url, form => $data); + die $tx->result->message if !$tx->result->is_success; + return $tx->res->headers->content_type =~ /^application\/json/ + ? $tx->res->json + : Mojo::Parameters->new($tx->res->body)->to_hash; + } + catch { + WARN("ERROR: Could not get oauth2 token: $_"); + return {}; + }; + } + ); + + # Get information about user from OAuth2 provider + $app->helper( + 'oauth2.userinfo' => sub { + my ($c, $access_token) = @_; + my $params = Bugzilla->params; + + if ($ENV{CI} && $ENV{BZ_TEST_OAUTH2_NORMAL_USER}) { + return { + email => $ENV{BZ_TEST_OAUTH2_NORMAL_USER}, + name => 'OAuth2 Test User', + email_verified => 1, + }; + } + + try { + my $tx = mojo_user_agent()->get( + $params->{'oauth2_client_userinfo_url'}, + {Authorization => 'Bearer ' . $access_token}, + ); + die $tx->result->message if !$tx->result->is_success; + return $tx->result->json || {}; + } + catch { + WARN("ERROR: Could not get userinfo: $_"); + return {}; + }; + } + ); + + $app->helper( + 'oauth2.redirect_uri' => sub { + my ($c, $redirect) = @_; + return Bugzilla->localconfig->urlbase . 'oauth2.cgi?redirect=' . $redirect; + } + ); + + # Add special routes for CI testing that mocks a providers login + if ($ENV{CI}) { + $app->routes->get( + '/oauth/test/authorize' => sub { + my $c = shift; + my $url = Mojo::URL->new($c->param('redirect_uri')); + $url->query->append(code => 'fake_return_code'); + $url->query->append(state => $c->param('state')); + $c->render(text => $c->tag('a', href => $url, sub {'Connect'})); + }, + ); + } + + Bugzilla::Hook::process('oauth2_client_register', {app => $app}); +} + +1; diff --git a/Bugzilla/App/Plugin/OAuth2.pm b/Bugzilla/App/Plugin/OAuth2/Provider.pm similarity index 99% rename from Bugzilla/App/Plugin/OAuth2.pm rename to Bugzilla/App/Plugin/OAuth2/Provider.pm index 6afa29c304..951a22a14a 100644 --- a/Bugzilla/App/Plugin/OAuth2.pm +++ b/Bugzilla/App/Plugin/OAuth2/Provider.pm @@ -5,7 +5,7 @@ # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. -package Bugzilla::App::Plugin::OAuth2; +package Bugzilla::App::Plugin::OAuth2::Provider; use 5.10.1; use Mojo::Base 'Mojolicious::Plugin::OAuth2::Server'; diff --git a/Bugzilla/Auth/Login/OAuth2.pm b/Bugzilla/Auth/Login/OAuth2.pm new file mode 100644 index 0000000000..64552fb451 --- /dev/null +++ b/Bugzilla/Auth/Login/OAuth2.pm @@ -0,0 +1,46 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Auth::Login::OAuth2; + +use 5.10.1; +use strict; +use warnings; + +use base qw(Bugzilla::Auth::Login); + +use Bugzilla::Constants; +use Bugzilla::Token qw(issue_hash_token); + +use constant can_logout => 0; +use constant can_login => 0; +use constant requires_verification => 0; +use constant is_automatic => 1; + +sub get_login_info { + my ($self) = @_; + my $cache = Bugzilla->request_cache; + my $params = Bugzilla->params; + my $cgi = Bugzilla->cgi; + + return {failure => AUTH_NODATA} if !$params->{oauth2_client_enabled}; + + my $userinfo = delete $cache->{oauth2_client_userinfo}; + + Bugzilla::Hook::process('oauth2_client_handle_redirect', + {userinfo => $userinfo}); + + return {failure => AUTH_NODATA} if !$userinfo; + + if ($userinfo->{email} && $userinfo->{email_verified}) { + return {username => $userinfo->{email}, realname => $userinfo->{name}}; + } + + return {failure => AUTH_NODATA}; +} + +1; diff --git a/Bugzilla/Auth/Persist/Cookie.pm b/Bugzilla/Auth/Persist/Cookie.pm index 12c882b25d..fc32845039 100644 --- a/Bugzilla/Auth/Persist/Cookie.pm +++ b/Bugzilla/Auth/Persist/Cookie.pm @@ -71,7 +71,7 @@ sub persist_login { $cookieargs{'-secure'} = 1; } - $cgi->remove_cookie('github_secret'); + $cgi->remove_cookie('github_token'); $cgi->remove_cookie('Bugzilla_login_request_cookie'); $cgi->send_cookie(-name => 'Bugzilla_login', -value => $user->id, %cookieargs); $cgi->send_cookie( diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index 6df5571b4b..4d7a55efab 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -389,12 +389,12 @@ sub header { # We generate a cookie and store it in the request cache # To initiate GitHub login, a form POSTs to github.cgi with the - # github_secret as a parameter. It must match the github_secret cookie. + # github_token as a parameter. It must match the github_token cookie. # this prevents some types of redirection attacks. unless ($user->id || $self->{bz_redirecting}) { $self->send_cookie( - -name => 'github_secret', - -value => Bugzilla->github_secret, + -name => 'github_token', + -value => Bugzilla->github_token, -httponly => 1 ); } diff --git a/Bugzilla/Config/Auth.pm b/Bugzilla/Config/Auth.pm index 664c1b2639..c451494d57 100644 --- a/Bugzilla/Config/Auth.pm +++ b/Bugzilla/Config/Auth.pm @@ -37,7 +37,7 @@ sub get_param_list { { name => 'user_info_class', type => 's', - choices => ['CGI', 'Env', 'Env,CGI'], + choices => ['CGI', 'OAuth2,CGI', 'Env', 'Env,CGI', 'Env,OAuth2,CGI'], default => 'CGI', checker => \&check_multi }, diff --git a/Bugzilla/Config/OAuth2Client.pm b/Bugzilla/Config/OAuth2Client.pm new file mode 100644 index 0000000000..1b007d7877 --- /dev/null +++ b/Bugzilla/Config/OAuth2Client.pm @@ -0,0 +1,35 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Config::OAuth2Client; + +use 5.10.1; +use strict; +use warnings; + +use Bugzilla::Config::Common; + +our $sortkey = 1350; + +sub get_param_list { + my ($class) = @_; + + my @params = ( + {name => 'oauth2_client_enabled', type => 'b', default => 0,}, + {name => 'oauth2_client_domain', type => 't', default => '',}, + {name => 'oauth2_client_id', type => 't', default => '',}, + {name => 'oauth2_client_secret', type => 't', default => '',}, + {name => 'oauth2_client_token_url', type => 't', default => '',}, + {name => 'oauth2_client_authorize_url', type => 't', default => '',}, + {name => 'oauth2_client_userinfo_url', type => 't', default => '',}, + {name => 'oauth2_client_scopes', type => 't', default => '',}, + ); + + return @params; +} + +1; diff --git a/Bugzilla/Report/Ping/Simple.pm b/Bugzilla/Report/Ping/Simple.pm index f879124fa0..105fa1793e 100644 --- a/Bugzilla/Report/Ping/Simple.pm +++ b/Bugzilla/Report/Ping/Simple.pm @@ -9,7 +9,7 @@ package Bugzilla::Report::Ping::Simple; use 5.10.1; use Moo; -use JSON::Validator qw(joi); +use JSON::Validator::Joi qw(joi); our $VERSION = '1'; diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 5b9f6606c4..8010273eed 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -539,9 +539,7 @@ our $is_processing = 0; sub process { my ($self, $input, $vars, $output) = @_; $vars //= {}; - if (($ENV{SERVER_SOFTWARE} // '') eq 'Bugzilla::App::CGI') { - $vars->{self} = $vars->{c} = Bugzilla->request_cache->{mojo_controller}; - } + $vars->{self} = $vars->{c} = Bugzilla->request_cache->{mojo_controller}; # All of this current_langs stuff allows template_inner to correctly # determine what-language Template object it should instantiate. diff --git a/Bugzilla/Test/MockParams.pm b/Bugzilla/Test/MockParams.pm index 8ad21920c9..0580cb2b79 100644 --- a/Bugzilla/Test/MockParams.pm +++ b/Bugzilla/Test/MockParams.pm @@ -51,7 +51,7 @@ sub import { (override => [closed_bug_statuses => sub { die "no database" },],); # prod-like defaults - $answers{user_info_class} //= 'GitHubAuth,CGI'; + $answers{user_info_class} //= 'GitHubAuth,OAuth2,CGI'; $answers{user_verify_class} //= 'GitHubAuth,DB'; if ($first_time++) { diff --git a/Bugzilla/Test/Selenium.pm b/Bugzilla/Test/Selenium.pm index da658f1070..48e531256f 100644 --- a/Bugzilla/Test/Selenium.pm +++ b/Bugzilla/Test/Selenium.pm @@ -23,11 +23,16 @@ has 'driver' => ( handles => [qw( add_cookie alert_text_like + body_text_contains + body_text_lacks + click_element_ok get_all_cookies get_ok get_title go_back_ok refresh + send_keys_to_active_element + set_implicit_wait_timeout title_is title_isnt title_like @@ -390,7 +395,7 @@ sub submit { my ($self, $locator) = @_; TRACE("submit: $locator"); $locator = $self->_fix_locator($locator); - $self->find_element($locator)->submit(); + my $element = $self->find_element($locator)->submit(); } sub is_editable { @@ -464,4 +469,115 @@ sub _toggle_check { return 0; } +# New utility methods used by t/bmo/*.t tests +# Use these for any new scripts + +sub get_token { + my $token; + my $count = 0; + do { + sleep 1 if $count++; + open my $fh, '<', '/app/data/mailer.testfile'; + my $content = do { + local $/ = undef; + <$fh>; + }; + ($token) = $content =~ m!/token\.cgi\?t=3D([^&]+)&a=3Dcfmpw!s; + close $fh; + } until $token || $count > 60; + return $token; +} + +sub search_mailer_testfile { + my ($self, $regexp) = @_; + my $content = ""; + my @result; + my $count = 0; + do { + sleep 1 if $count++; + open my $fh, '<', '/app/data/mailer.testfile'; + $content .= do { + local $/ = undef; + <$fh>; + }; + close $fh; + my $decoded = $content; + $decoded =~ s/\r\n/\n/gs; + $decoded =~ s/=\n//gs; + $decoded =~ s/=([[:xdigit:]]{2})/chr(hex($1))/ges; + @result = $decoded =~ $regexp; + } until @result || $count > 60; + return @result; +} + +sub click_and_type { + my ($self, $name, $text) = @_; + $self->click_ok(qq{//*[\@id="bugzilla-body"]//input[\@name="$name"]}, "Click on $name"); + $self->send_keys_to_active_element($text); +} + +sub click_link { + my ($self, $text) = @_; + my $el = $self->find_element($text, 'link_text'); + $el->click(); +} + +sub change_password { + my ($self, $old, $new1, $new2) = @_; + $self->get_ok('/userprefs.cgi?tab=account', 'Go to user preferences'); + $self->title_is('User Preferences', 'User preferences loaded'); + $self->click_and_type('old_password', $old); + $self->click_and_type('new_password1', $new1); + $self->click_and_type('new_password2', $new2); + $self->click_ok('//input[@value="Submit Changes"]'); +} + +sub toggle_require_password_change { + my ($self, $login) = @_; + $self->get_ok('/editusers.cgi', 'Go to edit users'); + $self->title_is('Search users', 'Edit users loaded'); + $self->type_ok('matchstr', $login, "Type $login for search"); + $self->click_ok('//input[@id="search"]'); + $self->title_is('Select user', 'Select a user loaded'); + $self->click_link($login); + $self->find_element('//input[@id="password_change_required"]')->click; + $self->click_ok('//input[@id="update"]'); + $self->title_is("User $login updated", "User $login updated"); +} + +sub enable_user_account { + my ($self, $login) = @_; + $self->get_ok('/editusers.cgi', 'Go to edit users'); + $self->title_is('Search users', 'Edit users loaded'); + $self->type_ok('matchstr', $login, "Type $login for search"); + $self->click_ok('//input[@id="search"]'); + $self->title_is('Select user', 'Select a user loaded'); + $self->click_link($login); + $self->type_ok('disabledtext', '', 'Clear disabled text'); + $self->uncheck_ok('disable_mail'); + $self->click_ok('//input[@id="update"]'); + $self->title_is("User $login updated", "User $login updated"); +} + +sub login { + my ($self, $username, $password) = @_; + $self->get_ok('/login', undef, 'Go to the home page'); + $self->title_is('Log in to Bugzilla', 'Log in to Bugzilla'); + $self->type_ok('Bugzilla_login', $username, "Enter login name $username"); + $self->type_ok('Bugzilla_password', $password, "Enter password $password"); + $self->click_ok('log_in', undef, 'Submit credentials'); +} + +sub login_ok { + my $self = shift; + $self->login(@_); + $self->title_is('Bugzilla Main Page', 'User is logged in'); +} + +sub logout_ok { + my ($self) = @_; + $self->get_ok('/index.cgi?logout=1', 'Logout current user'); + $self->title_is('Logged Out', 'Logged Out'); +} + 1; diff --git a/Bugzilla/Test/Util.pm b/Bugzilla/Test/Util.pm index fa6dd3686d..16abd9ce5d 100644 --- a/Bugzilla/Test/Util.pm +++ b/Bugzilla/Test/Util.pm @@ -13,8 +13,9 @@ use warnings; use base qw(Exporter); our @EXPORT - = qw(create_user create_bug create_oauth_client issue_api_key mock_useragent_tx); + = qw(create_user create_bug create_group create_oauth_client issue_api_key mock_useragent_tx); +use Bugzilla::Group; use Bugzilla::User; use Bugzilla::Bug; use Bugzilla::User::APIKey; @@ -43,6 +44,16 @@ sub create_user { }); } +sub create_group { + my ($group, %extra) = @_; + require Bugzilla; + return Bugzilla::Group->create({ + name => $group, + description => "$group Group Description", + %extra, + }); +} + sub create_oauth_client { my ($description, $scopes) = @_; my $dbh = Bugzilla->dbh; diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index fa55d33e0f..70f89802d8 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -261,9 +261,9 @@ sub new { sub super_user { my $invocant = shift; my $class = ref($invocant) || $invocant; - my ($param) = @_; - my $user = {%{DEFAULT_USER()}}; + my $user = Bugzilla::User->new({name => 'automation@bmo.tld'}); + $user ||= {%{DEFAULT_USER()}}; $user->{groups} = [Bugzilla::Group->get_all]; $user->{bless_groups} = [Bugzilla::Group->get_all]; bless $user, $class; @@ -368,30 +368,34 @@ sub update { # IAM usernames are stored separately from normal profiles # data so we update them here instead - my $new_iam_username = delete $self->{new_iam_username}; - my $old_iam_username = $self->iam_username; + if (exists $self->{new_iam_username}) { + my $new_iam_username = delete $self->{new_iam_username}; + my $old_iam_username = $self->iam_username; - $dbh->bz_start_transaction(); - if (!defined $old_iam_username && $new_iam_username) { - $dbh->do('INSERT INTO profiles_iam (user_id, iam_username) VALUES (?, ?)', - undef, $self->id, $new_iam_username); - $changes->{iam_username} = ['', $new_iam_username]; - } - elsif ($old_iam_username && !$new_iam_username) { - $dbh->do('DELETE FROM profiles_iam WHERE user_id = ?', undef, $self->id); - $changes->{iam_username} = [$old_iam_username, '']; - } - elsif ($old_iam_username ne $new_iam_username) { - $dbh->do('UPDATE profiles_iam SET iam_username = ? WHERE user_id = ?', - undef, $new_iam_username, $self->id); - $changes->{iam_username} = [$old_iam_username, $new_iam_username]; - } - if (exists $changes->{iam_username}) { - $self->audit_log({iam_username => $changes->{iam_username}}) - if $self->AUDIT_UPDATES; - $self->{iam_username} = defined $new_iam_username ? $new_iam_username : undef; + $dbh->bz_start_transaction(); + + if (!defined $old_iam_username && $new_iam_username) { + $dbh->do('INSERT INTO profiles_iam (user_id, iam_username) VALUES (?, ?)', + undef, $self->id, $new_iam_username); + $changes->{iam_username} = ['', $new_iam_username]; + } + elsif ($old_iam_username && !$new_iam_username) { + $dbh->do('DELETE FROM profiles_iam WHERE user_id = ?', undef, $self->id); + $changes->{iam_username} = [$old_iam_username, '']; + } + elsif ($old_iam_username ne $new_iam_username) { + $dbh->do('UPDATE profiles_iam SET iam_username = ? WHERE user_id = ?', + undef, $new_iam_username, $self->id); + $changes->{iam_username} = [$old_iam_username, $new_iam_username]; + } + if (exists $changes->{iam_username}) { + $self->audit_log({iam_username => $changes->{iam_username}}) + if $self->AUDIT_UPDATES; + $self->{iam_username} = defined $new_iam_username ? $new_iam_username : undef; + } + + $dbh->bz_commit_transaction(); } - $dbh->bz_commit_transaction(); # Logout the user if necessary. Bugzilla->logout_user($self) @@ -446,7 +450,7 @@ sub check_login_name_for_creation { # Check the name if it's a new user, or if we're changing the name. if (!ref($invocant) || $invocant->login ne $name) { - is_available_username($name) + is_available_username($name, (ref $invocant ? $invocant->login : undef)) || ThrowUserError('account_exists', {email => $name}); } @@ -521,7 +525,8 @@ sub _check_iam_username { validate_email_syntax($username) || ThrowUserError('iam_illegal_username', {username => $username}); - if ($username ne $self->iam_username) { + my $iam_username = $self->iam_username || ''; + if ($username && $username ne $iam_username) { my $existing_username = Bugzilla->dbh->selectrow_array( 'SELECT iam_username FROM profiles_iam WHERE iam_username = ?', @@ -649,8 +654,6 @@ sub _set_groups { my $changes = shift; my $dbh = Bugzilla->dbh; - use Data::Dumper; - # The person making the change is $user, $self is the person being changed my $user = Bugzilla->user; @@ -768,8 +771,9 @@ sub password_change_reason { $_[0]->{password_change_reason}; } sub iam_username { my $self = shift; + return $self->{iam_username} if exists $self->{iam_username}; return $self->{iam_username} - ||= Bugzilla->dbh->selectrow_array( + = Bugzilla->dbh->selectrow_array( 'SELECT iam_username FROM profiles_iam WHERE user_id = ?', undef, $self->id); } diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm index 8853df05c9..e0cbec2907 100644 --- a/Bugzilla/Util.pm +++ b/Bugzilla/Util.pm @@ -28,7 +28,7 @@ use base qw(Exporter); validate_email_syntax clean_text get_text template_var disable_utf8 enable_utf8 detect_encoding email_filter - round extract_nicks); + round extract_nicks mojo_user_agent); use Bugzilla::Logging; use Bugzilla::Constants; use Bugzilla::RNG qw(irand); @@ -971,6 +971,21 @@ sub extract_nicks { return grep { defined $_ } @nicks; } +sub mojo_user_agent { + my $ua = Mojo::UserAgent->new( + request_timeout => 5, + connect_timeout => 5, + inactivity_timesout => 30 + ); + if (my $proxy = Bugzilla->params->{proxy_url}) { + $ua->proxy->http($proxy)->https($proxy); + } + else { + $ua->proxy->detect(); + } + $ua->transactor->name('Bugzilla'); + return $ua; +} 1; diff --git a/Bugzilla/WebService/User.pm b/Bugzilla/WebService/User.pm index c2acfb33de..bce1fa412a 100644 --- a/Bugzilla/WebService/User.pm +++ b/Bugzilla/WebService/User.pm @@ -509,13 +509,14 @@ sub whoami { return filter( $params, { - id => $self->type('int', $user->id), - real_name => $self->type('string', $user->name), - nick => $self->type('string', $user->nick), - name => $self->type('email', $user->login), - mfa_status => $self->type('boolean', !!$user->mfa), - groups => [map { $_->name } @{$user->groups}], - uuid => $self->type('string', 'bmo-who:' . $uuid), + id => $self->type('int', $user->id), + real_name => $self->type('string', $user->name), + nick => $self->type('string', $user->nick), + name => $self->type('email', $user->login), + mfa_status => $self->type('boolean', !!$user->mfa), + groups => [map { $_->name } @{$user->groups}], + uuid => $self->type('string', 'bmo-who:' . $uuid), + iam_username => $self->type('string', $user->iam_username), } ); } diff --git a/Dockerfile b/Dockerfile index 653c48fe5a..c6cc173ef9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mozillabteam/bmo-perl-slim:20200505.1 +FROM mozillabteam/bmo-perl-slim:20210105.1 ENV DEBIAN_FRONTEND noninteractive diff --git a/Dockerfile.bmo-slim b/Dockerfile.bmo-slim index 15c93afdd0..dc60e2b3d9 100644 --- a/Dockerfile.bmo-slim +++ b/Dockerfile.bmo-slim @@ -1,4 +1,4 @@ -FROM perl:5.30.2-slim AS builder +FROM perl:5.32.0-slim AS builder RUN apt-get update RUN apt-get install -y \ @@ -33,7 +33,7 @@ RUN find local -name '*.so' -exec ldd {} \; \ | xargs -IFILE apt-file search -l FILE \ | sort -u > PACKAGES -FROM perl:5.30.2-slim +FROM perl:5.32.0-slim ENV DEBIAN_FRONTEND noninteractive diff --git a/Dockerfile.cpanfile b/Dockerfile.cpanfile index c5c0ad842c..41c4cf5cb5 100644 --- a/Dockerfile.cpanfile +++ b/Dockerfile.cpanfile @@ -1,4 +1,4 @@ -FROM perl:5.30.2-slim +FROM perl:5.32.0-slim RUN apt-get update RUN apt-get install -y \ diff --git a/Makefile.PL b/Makefile.PL index 8cadfe6a5d..cd526e9780 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -46,6 +46,8 @@ my %requires = ( 'CPAN::Meta::Prereqs' => '2.132830', 'CPAN::Meta::Requirements' => '2.121', 'Class::XSAccessor' => '1.18', + 'Crypt::OpenSSL::Bignum' => 0, + 'Crypt::OpenSSL::RSA' => 0, 'DBI' => '1.614', 'DBIx::Connector' => 0, 'DBIx::Class' => 0, @@ -80,6 +82,7 @@ my %requires = ( 'Mojo::JWT' => '0.07', 'MojoX::Log::Log4perl' => '0.04', 'Mojolicious' => '8.42', + 'Mojolicious::Plugin::OAuth2' => '1.58', 'Mojolicious::Plugin::OAuth2::Server' => '0.44', 'Moo' => '2.002004', 'MooX::StrictConstructor' => '0.008', diff --git a/conf/checksetup_answers.txt b/conf/checksetup_answers.txt index b83f6d0ba3..b2faf8432c 100644 --- a/conf/checksetup_answers.txt +++ b/conf/checksetup_answers.txt @@ -11,7 +11,7 @@ $answer{'db_check'} = 1; $answer{'diffpath'} = '/usr/bin'; $answer{'index_html'} = 0; $answer{'interdiffbin'} = '/usr/bin/interdiff'; -$answer{'user_info_class'} = 'GitHubAuth,CGI'; +$answer{'user_info_class'} = 'GitHubAuth,OAuth2,CGI'; $answer{'user_verify_class'} = 'GitHubAuth,DB'; $answer{'use_mailer_queue'} = 1; $answer{'useclassification'} = 1; diff --git a/cpanfile b/cpanfile index 58dca6c0cf..41cdba93b5 100644 --- a/cpanfile +++ b/cpanfile @@ -18,6 +18,8 @@ requires 'Crypt::CBC'; requires 'Crypt::DES'; requires 'Crypt::DES_EDE3'; requires 'Crypt::OpenPGP', '1.12'; +requires 'Crypt::OpenSSL::Bignum'; +requires 'Crypt::OpenSSL::RSA'; requires 'Crypt::SMIME'; requires 'DBD::mysql', '4.037'; requires 'DBI', '1.614'; @@ -81,6 +83,7 @@ requires 'Mojo::JWT', '0.07'; requires 'MojoX::Log::Log4perl', '0.04'; requires 'Mojolicious', '8.42'; requires 'Mojolicious::Plugin::ForwardedFor'; +requires 'Mojolicious::Plugin::OAuth2', '1.58'; requires 'Mojolicious::Plugin::OAuth2::Server', '0.44'; requires 'Moo', '2.002004'; requires 'MooX::StrictConstructor', '0.008'; diff --git a/cpanfile.snapshot b/cpanfile.snapshot index 3082704500..6a4910622e 100644 --- a/cpanfile.snapshot +++ b/cpanfile.snapshot @@ -7,101 +7,101 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 List::Util 0 - Algorithm-C3-0.10 - pathname: H/HA/HAARG/Algorithm-C3-0.10.tar.gz + Algorithm-C3-0.11 + pathname: H/HA/HAARG/Algorithm-C3-0.11.tar.gz provides: - Algorithm::C3 0.10 + Algorithm::C3 0.11 requirements: Carp 0.01 ExtUtils::MakeMaker 0 - Test::More 0.47 perl 5.006 - Algorithm-Diff-1.1903 - pathname: T/TY/TYEMQ/Algorithm-Diff-1.1903.tar.gz - provides: - Algorithm::Diff 1.1903 - Algorithm::Diff::_impl 1.1903 - requirements: - ExtUtils::MakeMaker 0 - Alien-Build-2.22 - pathname: P/PL/PLICEASE/Alien-Build-2.22.tar.gz - provides: - Alien::Base 2.22 - Alien::Base::PkgConfig 2.22 - Alien::Base::Wrapper 2.22 - Alien::Build 2.22 - Alien::Build::CommandSequence 2.22 - Alien::Build::Helper 2.22 - Alien::Build::Interpolate 2.22 - Alien::Build::Interpolate::Default 2.22 - Alien::Build::Interpolate::Helper 2.22 - Alien::Build::Log 2.22 - Alien::Build::Log::Abbreviate 2.22 - Alien::Build::Log::Default 2.22 - Alien::Build::MM 2.22 - Alien::Build::Meta 2.22 - Alien::Build::Plugin 2.22 - Alien::Build::Plugin::Build::Autoconf 2.22 - Alien::Build::Plugin::Build::CMake 2.22 - Alien::Build::Plugin::Build::Copy 2.22 - Alien::Build::Plugin::Build::MSYS 2.22 - Alien::Build::Plugin::Build::Make 2.22 - Alien::Build::Plugin::Build::SearchDep 2.22 - Alien::Build::Plugin::Core::CleanInstall 2.22 - Alien::Build::Plugin::Core::Download 2.22 - Alien::Build::Plugin::Core::FFI 2.22 - Alien::Build::Plugin::Core::Gather 2.22 - Alien::Build::Plugin::Core::Legacy 2.22 - Alien::Build::Plugin::Core::Override 2.22 - Alien::Build::Plugin::Core::Setup 2.22 - Alien::Build::Plugin::Core::Tail 2.22 - Alien::Build::Plugin::Decode::DirListing 2.22 - Alien::Build::Plugin::Decode::DirListingFtpcopy 2.22 - Alien::Build::Plugin::Decode::HTML 2.22 - Alien::Build::Plugin::Decode::Mojo 2.22 - Alien::Build::Plugin::Download::Negotiate 2.22 - Alien::Build::Plugin::Extract::ArchiveTar 2.22 - Alien::Build::Plugin::Extract::ArchiveZip 2.22 - Alien::Build::Plugin::Extract::CommandLine 2.22 - Alien::Build::Plugin::Extract::Directory 2.22 - Alien::Build::Plugin::Extract::Negotiate 2.22 - Alien::Build::Plugin::Fetch::CurlCommand 2.22 - Alien::Build::Plugin::Fetch::HTTPTiny 2.22 - Alien::Build::Plugin::Fetch::LWP 2.22 - Alien::Build::Plugin::Fetch::Local 2.22 - Alien::Build::Plugin::Fetch::LocalDir 2.22 - Alien::Build::Plugin::Fetch::NetFTP 2.22 - Alien::Build::Plugin::Fetch::Wget 2.22 - Alien::Build::Plugin::Gather::IsolateDynamic 2.22 - Alien::Build::Plugin::PkgConfig::CommandLine 2.22 - Alien::Build::Plugin::PkgConfig::LibPkgConf 2.22 - Alien::Build::Plugin::PkgConfig::MakeStatic 2.22 - Alien::Build::Plugin::PkgConfig::Negotiate 2.22 - Alien::Build::Plugin::PkgConfig::PP 2.22 - Alien::Build::Plugin::Prefer::BadVersion 2.22 - Alien::Build::Plugin::Prefer::GoodVersion 2.22 - Alien::Build::Plugin::Prefer::SortVersions 2.22 - Alien::Build::Plugin::Probe::CBuilder 2.22 - Alien::Build::Plugin::Probe::CommandLine 2.22 - Alien::Build::Plugin::Probe::Vcpkg 2.22 - Alien::Build::Plugin::Test::Mock 2.22 - Alien::Build::PluginMeta 2.22 - Alien::Build::Temp 2.22 - Alien::Build::TempDir 2.22 - Alien::Build::Util 2.22 - Alien::Build::Version::Basic 2.22 - Alien::Build::rc 2.22 - Alien::Role 2.22 - Test::Alien 2.22 - Test::Alien::Build 2.22 - Test::Alien::CanCompile 2.22 - Test::Alien::CanPlatypus 2.22 - Test::Alien::Diag 2.22 - Test::Alien::Run 2.22 - Test::Alien::Synthetic 2.22 - alienfile 2.22 + Algorithm-Diff-1.201 + pathname: R/RJ/RJBS/Algorithm-Diff-1.201.tar.gz + provides: + Algorithm::Diff 1.201 + Algorithm::Diff::_impl 1.201 + requirements: + ExtUtils::MakeMaker 0 + Alien-Build-2.38 + pathname: P/PL/PLICEASE/Alien-Build-2.38.tar.gz + provides: + Alien::Base 2.38 + Alien::Base::PkgConfig 2.38 + Alien::Base::Wrapper 2.38 + Alien::Build 2.38 + Alien::Build::CommandSequence 2.38 + Alien::Build::Helper 2.38 + Alien::Build::Interpolate 2.38 + Alien::Build::Interpolate::Default 2.38 + Alien::Build::Interpolate::Helper 2.38 + Alien::Build::Log 2.38 + Alien::Build::Log::Abbreviate 2.38 + Alien::Build::Log::Default 2.38 + Alien::Build::MM 2.38 + Alien::Build::Meta 2.38 + Alien::Build::Plugin 2.38 + Alien::Build::Plugin::Build::Autoconf 2.38 + Alien::Build::Plugin::Build::CMake 2.38 + Alien::Build::Plugin::Build::Copy 2.38 + Alien::Build::Plugin::Build::MSYS 2.38 + Alien::Build::Plugin::Build::Make 2.38 + Alien::Build::Plugin::Build::SearchDep 2.38 + Alien::Build::Plugin::Core::CleanInstall 2.38 + Alien::Build::Plugin::Core::Download 2.38 + Alien::Build::Plugin::Core::FFI 2.38 + Alien::Build::Plugin::Core::Gather 2.38 + Alien::Build::Plugin::Core::Legacy 2.38 + Alien::Build::Plugin::Core::Override 2.38 + Alien::Build::Plugin::Core::Setup 2.38 + Alien::Build::Plugin::Core::Tail 2.38 + Alien::Build::Plugin::Decode::DirListing 2.38 + Alien::Build::Plugin::Decode::DirListingFtpcopy 2.38 + Alien::Build::Plugin::Decode::HTML 2.38 + Alien::Build::Plugin::Decode::Mojo 2.38 + Alien::Build::Plugin::Download::Negotiate 2.38 + Alien::Build::Plugin::Extract::ArchiveTar 2.38 + Alien::Build::Plugin::Extract::ArchiveZip 2.38 + Alien::Build::Plugin::Extract::CommandLine 2.38 + Alien::Build::Plugin::Extract::Directory 2.38 + Alien::Build::Plugin::Extract::Negotiate 2.38 + Alien::Build::Plugin::Fetch::CurlCommand 2.38 + Alien::Build::Plugin::Fetch::HTTPTiny 2.38 + Alien::Build::Plugin::Fetch::LWP 2.38 + Alien::Build::Plugin::Fetch::Local 2.38 + Alien::Build::Plugin::Fetch::LocalDir 2.38 + Alien::Build::Plugin::Fetch::NetFTP 2.38 + Alien::Build::Plugin::Fetch::Wget 2.38 + Alien::Build::Plugin::Gather::IsolateDynamic 2.38 + Alien::Build::Plugin::PkgConfig::CommandLine 2.38 + Alien::Build::Plugin::PkgConfig::LibPkgConf 2.38 + Alien::Build::Plugin::PkgConfig::MakeStatic 2.38 + Alien::Build::Plugin::PkgConfig::Negotiate 2.38 + Alien::Build::Plugin::PkgConfig::PP 2.38 + Alien::Build::Plugin::Prefer::BadVersion 2.38 + Alien::Build::Plugin::Prefer::GoodVersion 2.38 + Alien::Build::Plugin::Prefer::SortVersions 2.38 + Alien::Build::Plugin::Probe::CBuilder 2.38 + Alien::Build::Plugin::Probe::CommandLine 2.38 + Alien::Build::Plugin::Probe::Vcpkg 2.38 + Alien::Build::Plugin::Test::Mock 2.38 + Alien::Build::PluginMeta 2.38 + Alien::Build::Temp 2.38 + Alien::Build::TempDir 2.38 + Alien::Build::Util 2.38 + Alien::Build::Version::Basic 2.38 + Alien::Build::rc 2.38 + Alien::Role 2.38 + Test::Alien 2.38 + Test::Alien::Build 2.38 + Test::Alien::CanCompile 2.38 + Test::Alien::CanPlatypus 2.38 + Test::Alien::Diag 2.38 + Test::Alien::Run 2.38 + Test::Alien::Synthetic 2.38 + alienfile 2.38 requirements: Capture::Tiny 0.17 + Digest::SHA 0 ExtUtils::CBuilder 0 ExtUtils::MakeMaker 6.64 ExtUtils::ParseXS 3.30 @@ -113,7 +113,7 @@ DISTRIBUTIONS Path::Tiny 0.077 Test2::API 1.302096 Text::ParseWords 3.26 - perl 5.008001 + perl 5.008004 Alien-Build-Git-0.08 pathname: P/PL/PLICEASE/Alien-Build-Git-0.08.tar.gz provides: @@ -145,7 +145,6 @@ DISTRIBUTIONS Alien::Base 0.92 Alien::Build 1.19 Alien::Build::MM 0.32 - Alien::Build::Plugin::Fetch::CurlCommand 1.19 Capture::Tiny 0 ExtUtils::MakeMaker 6.52 File::Which 0 @@ -305,10 +304,10 @@ DISTRIBUTIONS IO::Seekable 0 Time::Local 0 perl 5.006 - Auth-GoogleAuth-1.02 - pathname: G/GR/GRYPHON/Auth-GoogleAuth-1.02.tar.gz + Auth-GoogleAuth-1.03 + pathname: G/GR/GRYPHON/Auth-GoogleAuth-1.03.tar.gz provides: - Auth::GoogleAuth 1.02 + Auth::GoogleAuth 1.03 requirements: Carp 0 Class::Accessor 0 @@ -378,19 +377,19 @@ DISTRIBUTIONS Scalar::Util 1.21 Test::More 0.98 perl 5.006000 - CGI-4.47 - pathname: L/LE/LEEJO/CGI-4.47.tar.gz + CGI-4.51 + pathname: L/LE/LEEJO/CGI-4.51.tar.gz provides: - CGI 4.47 - CGI::Carp 4.47 - CGI::Cookie 4.47 - CGI::File::Temp 4.47 + CGI 4.51 + CGI::Carp 4.51 + CGI::Cookie 4.51 + CGI::File::Temp 4.51 CGI::HTML::Functions undef - CGI::MultipartBuffer 4.47 - CGI::Pretty 4.47 - CGI::Push 4.47 - CGI::Util 4.47 - Fh 4.47 + CGI::MultipartBuffer 4.51 + CGI::Pretty 4.51 + CGI::Push 4.51 + CGI::Util 4.51 + Fh 4.51 requirements: Carp 0 Config 0 @@ -407,10 +406,10 @@ DISTRIBUTIONS strict 0 utf8 0 warnings 0 - CGI-Compile-0.24 - pathname: R/RK/RKITOVER/CGI-Compile-0.24.tar.gz + CGI-Compile-0.25 + pathname: R/RK/RKITOVER/CGI-Compile-0.25.tar.gz provides: - CGI::Compile 0.24 + CGI::Compile 0.25 requirements: File::pushd 0 Module::Build::Tiny 0.034 @@ -433,10 +432,10 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 Test::More 0 - Cairo-1.107 - pathname: X/XA/XAOC/Cairo-1.107.tar.gz + Cairo-1.109 + pathname: X/XA/XAOC/Cairo-1.109.tar.gz provides: - Cairo 1.107 + Cairo 1.109 Cairo::Install::Files undef requirements: ExtUtils::Depends 0.2 @@ -601,14 +600,6 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 base 1.01 - Class-Accessor-Chained-0.01 - pathname: R/RC/RCLAMP/Class-Accessor-Chained-0.01.tar.gz - provides: - Class::Accessor::Chained 0.01 - Class::Accessor::Chained::Fast undef - requirements: - Class::Accessor 0 - Test::More 0 Class-Accessor-Grouped-0.10014 pathname: H/HA/HAARG/Class-Accessor-Grouped-0.10014.tar.gz provides: @@ -627,10 +618,10 @@ DISTRIBUTIONS Class::Accessor::Lite 0.08 requirements: ExtUtils::MakeMaker 6.36 - Class-C3-0.34 - pathname: H/HA/HAARG/Class-C3-0.34.tar.gz + Class-C3-0.35 + pathname: H/HA/HAARG/Class-C3-0.35.tar.gz provides: - Class::C3 0.34 + Class::C3 0.35 requirements: Algorithm::C3 0.07 ExtUtils::MakeMaker 0 @@ -713,17 +704,20 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Class-Singleton-1.5 - pathname: S/SH/SHAY/Class-Singleton-1.5.tar.gz + Class-Singleton-1.6 + pathname: S/SH/SHAY/Class-Singleton-1.6.tar.gz provides: - Class::Singleton 1.5 + Class::Singleton 1.6 requirements: - ExtUtils::MakeMaker 0 - Class-Tiny-1.006 - pathname: D/DA/DAGOLDEN/Class-Tiny-1.006.tar.gz + ExtUtils::MakeMaker 6.64 + perl 5.008001 + strict 0 + warnings 0 + Class-Tiny-1.008 + pathname: D/DA/DAGOLDEN/Class-Tiny-1.008.tar.gz provides: - Class::Tiny 1.006 - Class::Tiny::Object 1.006 + Class::Tiny 1.008 + Class::Tiny::Object 1.008 requirements: Carp 0 ExtUtils::MakeMaker 6.17 @@ -874,10 +868,10 @@ DISTRIBUTIONS Module::Build::Tiny 0.035 URI::Escape 0 perl 5.008001 - Cpanel-JSON-XS-4.19 - pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.19.tar.gz + Cpanel-JSON-XS-4.25 + pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.25.tar.gz provides: - Cpanel::JSON::XS 4.19 + Cpanel::JSON::XS 4.25 Cpanel::JSON::XS::Type undef requirements: Carp 0 @@ -964,17 +958,17 @@ DISTRIBUTIONS IDEA 1.10 requirements: ExtUtils::MakeMaker 0 - Crypt-JWT-0.026 - pathname: M/MI/MIK/Crypt-JWT-0.026.tar.gz + Crypt-JWT-0.031 + pathname: M/MI/MIK/Crypt-JWT-0.031.tar.gz provides: - Crypt::JWT 0.026 - Crypt::KeyWrap 0.026 + Crypt::JWT 0.031 + Crypt::KeyWrap 0.031 requirements: Compress::Raw::Zlib 0 CryptX 0.067 Exporter 5.57 ExtUtils::MakeMaker 0 - JSON::MaybeXS 1.003005 + JSON 0 Scalar::Util 0 Test::More 0 perl 5.006 @@ -1063,11 +1057,46 @@ DISTRIBUTIONS MIME::Base64 0 Math::BigInt 0 URI::Escape 0 - Crypt-RIPEMD160-0.06 - pathname: T/TO/TODDR/Crypt-RIPEMD160-0.06.tar.gz + Crypt-OpenSSL-Bignum-0.09 + pathname: K/KM/KMX/Crypt-OpenSSL-Bignum-0.09.tar.gz provides: - Crypt::RIPEMD160 0.06 - Crypt::RIPEMD160::MAC 0.01 + Crypt::OpenSSL::Bignum 0.09 + Crypt::OpenSSL::Bignum::CTX undef + requirements: + ExtUtils::MakeMaker 0 + perl 5.006002 + Crypt-OpenSSL-Guess-0.11 + pathname: A/AK/AKIYM/Crypt-OpenSSL-Guess-0.11.tar.gz + provides: + Crypt::OpenSSL::Guess 0.11 + requirements: + Config 0 + Exporter 5.57 + ExtUtils::MakeMaker 6.64 + File::Spec 0 + Symbol 0 + perl 5.008001 + Crypt-OpenSSL-RSA-0.31 + pathname: T/TO/TODDR/Crypt-OpenSSL-RSA-0.31.tar.gz + provides: + Crypt::OpenSSL::RSA 0.31 + requirements: + Crypt::OpenSSL::Random 0 + ExtUtils::MakeMaker 0 + Test::More 0 + perl 5.006 + Crypt-OpenSSL-Random-0.15 + pathname: R/RU/RURBAN/Crypt-OpenSSL-Random-0.15.tar.gz + provides: + Crypt::OpenSSL::Random 0.15 + requirements: + Crypt::OpenSSL::Guess 0.11 + ExtUtils::MakeMaker 0 + Crypt-RIPEMD160-0.08 + pathname: T/TO/TODDR/Crypt-RIPEMD160-0.08.tar.gz + provides: + Crypt::RIPEMD160 0.08 + Crypt::RIPEMD160::MAC 0.08 requirements: ExtUtils::MakeMaker 0 Test::More 0 @@ -1099,17 +1128,17 @@ DISTRIBUTIONS Time::HiRes 1.9711 base 0 perl 5.006002 - Crypt-Rijndael-1.14 - pathname: L/LE/LEONT/Crypt-Rijndael-1.14.tar.gz + Crypt-Rijndael-1.15 + pathname: L/LE/LEONT/Crypt-Rijndael-1.15.tar.gz provides: - Crypt::Rijndael 1.14 + Crypt::Rijndael 1.15 requirements: ExtUtils::MakeMaker 0 perl 5.006 - Crypt-SMIME-0.25 - pathname: M/MI/MIKAGE/Crypt-SMIME-0.25.tar.gz + Crypt-SMIME-0.27 + pathname: M/MI/MIKAGE/Crypt-SMIME-0.27.tar.gz provides: - Crypt::SMIME 0.25 + Crypt::SMIME 0.27 requirements: ExtUtils::CChecker 0 ExtUtils::Constant 0.23 @@ -1118,136 +1147,136 @@ DISTRIBUTIONS Test::Exception 0 Test::More 0 XSLoader 0 - Crypt-Twofish-2.17 - pathname: A/AM/AMS/Crypt-Twofish-2.17.tar.gz + Crypt-Twofish-2.18 + pathname: A/AM/AMS/Crypt-Twofish-2.18.tar.gz provides: - Crypt::Twofish 2.17 + Crypt::Twofish 2.18 requirements: ExtUtils::MakeMaker 0 strict 0 - CryptX-0.068 - pathname: M/MI/MIK/CryptX-0.068.tar.gz - provides: - Crypt::AuthEnc 0.068 - Crypt::AuthEnc::CCM 0.068 - Crypt::AuthEnc::ChaCha20Poly1305 0.068 - Crypt::AuthEnc::EAX 0.068 - Crypt::AuthEnc::GCM 0.068 - Crypt::AuthEnc::OCB 0.068 - Crypt::Checksum 0.068 - Crypt::Checksum::Adler32 0.068 - Crypt::Checksum::CRC32 0.068 - Crypt::Cipher 0.068 - Crypt::Cipher::AES 0.068 - Crypt::Cipher::Anubis 0.068 - Crypt::Cipher::Blowfish 0.068 - Crypt::Cipher::CAST5 0.068 - Crypt::Cipher::Camellia 0.068 - Crypt::Cipher::DES 0.068 - Crypt::Cipher::DES_EDE 0.068 - Crypt::Cipher::IDEA 0.068 - Crypt::Cipher::KASUMI 0.068 - Crypt::Cipher::Khazad 0.068 - Crypt::Cipher::MULTI2 0.068 - Crypt::Cipher::Noekeon 0.068 - Crypt::Cipher::RC2 0.068 - Crypt::Cipher::RC5 0.068 - Crypt::Cipher::RC6 0.068 - Crypt::Cipher::SAFERP 0.068 - Crypt::Cipher::SAFER_K128 0.068 - Crypt::Cipher::SAFER_K64 0.068 - Crypt::Cipher::SAFER_SK128 0.068 - Crypt::Cipher::SAFER_SK64 0.068 - Crypt::Cipher::SEED 0.068 - Crypt::Cipher::Serpent 0.068 - Crypt::Cipher::Skipjack 0.068 - Crypt::Cipher::Twofish 0.068 - Crypt::Cipher::XTEA 0.068 - Crypt::Digest 0.068 - Crypt::Digest::BLAKE2b_160 0.068 - Crypt::Digest::BLAKE2b_256 0.068 - Crypt::Digest::BLAKE2b_384 0.068 - Crypt::Digest::BLAKE2b_512 0.068 - Crypt::Digest::BLAKE2s_128 0.068 - Crypt::Digest::BLAKE2s_160 0.068 - Crypt::Digest::BLAKE2s_224 0.068 - Crypt::Digest::BLAKE2s_256 0.068 - Crypt::Digest::CHAES 0.068 - Crypt::Digest::Keccak224 0.068 - Crypt::Digest::Keccak256 0.068 - Crypt::Digest::Keccak384 0.068 - Crypt::Digest::Keccak512 0.068 - Crypt::Digest::MD2 0.068 - Crypt::Digest::MD4 0.068 - Crypt::Digest::MD5 0.068 - Crypt::Digest::RIPEMD128 0.068 - Crypt::Digest::RIPEMD160 0.068 - Crypt::Digest::RIPEMD256 0.068 - Crypt::Digest::RIPEMD320 0.068 - Crypt::Digest::SHA1 0.068 - Crypt::Digest::SHA224 0.068 - Crypt::Digest::SHA256 0.068 - Crypt::Digest::SHA384 0.068 - Crypt::Digest::SHA3_224 0.068 - Crypt::Digest::SHA3_256 0.068 - Crypt::Digest::SHA3_384 0.068 - Crypt::Digest::SHA3_512 0.068 - Crypt::Digest::SHA512 0.068 - Crypt::Digest::SHA512_224 0.068 - Crypt::Digest::SHA512_256 0.068 - Crypt::Digest::SHAKE 0.068 - Crypt::Digest::Tiger192 0.068 - Crypt::Digest::Whirlpool 0.068 - Crypt::KeyDerivation 0.068 - Crypt::Mac 0.068 - Crypt::Mac::BLAKE2b 0.068 - Crypt::Mac::BLAKE2s 0.068 - Crypt::Mac::F9 0.068 - Crypt::Mac::HMAC 0.068 - Crypt::Mac::OMAC 0.068 - Crypt::Mac::PMAC 0.068 - Crypt::Mac::Pelican 0.068 - Crypt::Mac::Poly1305 0.068 - Crypt::Mac::XCBC 0.068 - Crypt::Misc 0.068 - Crypt::Mode 0.068 - Crypt::Mode::CBC 0.068 - Crypt::Mode::CFB 0.068 - Crypt::Mode::CTR 0.068 - Crypt::Mode::ECB 0.068 - Crypt::Mode::OFB 0.068 - Crypt::PK 0.068 - Crypt::PK::DH 0.068 - Crypt::PK::DSA 0.068 - Crypt::PK::ECC 0.068 - Crypt::PK::Ed25519 0.068 - Crypt::PK::RSA 0.068 - Crypt::PK::X25519 0.068 - Crypt::PRNG 0.068 - Crypt::PRNG::ChaCha20 0.068 - Crypt::PRNG::Fortuna 0.068 - Crypt::PRNG::RC4 0.068 - Crypt::PRNG::Sober128 0.068 - Crypt::PRNG::Yarrow 0.068 - Crypt::Stream::ChaCha 0.068 - Crypt::Stream::RC4 0.068 - Crypt::Stream::Rabbit 0.068 - Crypt::Stream::Salsa20 0.068 - Crypt::Stream::Sober128 0.068 - Crypt::Stream::Sosemanuk 0.068 - CryptX 0.068 - Math::BigInt::LTM 0.068 + CryptX-0.069 + pathname: M/MI/MIK/CryptX-0.069.tar.gz + provides: + Crypt::AuthEnc 0.069 + Crypt::AuthEnc::CCM 0.069 + Crypt::AuthEnc::ChaCha20Poly1305 0.069 + Crypt::AuthEnc::EAX 0.069 + Crypt::AuthEnc::GCM 0.069 + Crypt::AuthEnc::OCB 0.069 + Crypt::Checksum 0.069 + Crypt::Checksum::Adler32 0.069 + Crypt::Checksum::CRC32 0.069 + Crypt::Cipher 0.069 + Crypt::Cipher::AES 0.069 + Crypt::Cipher::Anubis 0.069 + Crypt::Cipher::Blowfish 0.069 + Crypt::Cipher::CAST5 0.069 + Crypt::Cipher::Camellia 0.069 + Crypt::Cipher::DES 0.069 + Crypt::Cipher::DES_EDE 0.069 + Crypt::Cipher::IDEA 0.069 + Crypt::Cipher::KASUMI 0.069 + Crypt::Cipher::Khazad 0.069 + Crypt::Cipher::MULTI2 0.069 + Crypt::Cipher::Noekeon 0.069 + Crypt::Cipher::RC2 0.069 + Crypt::Cipher::RC5 0.069 + Crypt::Cipher::RC6 0.069 + Crypt::Cipher::SAFERP 0.069 + Crypt::Cipher::SAFER_K128 0.069 + Crypt::Cipher::SAFER_K64 0.069 + Crypt::Cipher::SAFER_SK128 0.069 + Crypt::Cipher::SAFER_SK64 0.069 + Crypt::Cipher::SEED 0.069 + Crypt::Cipher::Serpent 0.069 + Crypt::Cipher::Skipjack 0.069 + Crypt::Cipher::Twofish 0.069 + Crypt::Cipher::XTEA 0.069 + Crypt::Digest 0.069 + Crypt::Digest::BLAKE2b_160 0.069 + Crypt::Digest::BLAKE2b_256 0.069 + Crypt::Digest::BLAKE2b_384 0.069 + Crypt::Digest::BLAKE2b_512 0.069 + Crypt::Digest::BLAKE2s_128 0.069 + Crypt::Digest::BLAKE2s_160 0.069 + Crypt::Digest::BLAKE2s_224 0.069 + Crypt::Digest::BLAKE2s_256 0.069 + Crypt::Digest::CHAES 0.069 + Crypt::Digest::Keccak224 0.069 + Crypt::Digest::Keccak256 0.069 + Crypt::Digest::Keccak384 0.069 + Crypt::Digest::Keccak512 0.069 + Crypt::Digest::MD2 0.069 + Crypt::Digest::MD4 0.069 + Crypt::Digest::MD5 0.069 + Crypt::Digest::RIPEMD128 0.069 + Crypt::Digest::RIPEMD160 0.069 + Crypt::Digest::RIPEMD256 0.069 + Crypt::Digest::RIPEMD320 0.069 + Crypt::Digest::SHA1 0.069 + Crypt::Digest::SHA224 0.069 + Crypt::Digest::SHA256 0.069 + Crypt::Digest::SHA384 0.069 + Crypt::Digest::SHA3_224 0.069 + Crypt::Digest::SHA3_256 0.069 + Crypt::Digest::SHA3_384 0.069 + Crypt::Digest::SHA3_512 0.069 + Crypt::Digest::SHA512 0.069 + Crypt::Digest::SHA512_224 0.069 + Crypt::Digest::SHA512_256 0.069 + Crypt::Digest::SHAKE 0.069 + Crypt::Digest::Tiger192 0.069 + Crypt::Digest::Whirlpool 0.069 + Crypt::KeyDerivation 0.069 + Crypt::Mac 0.069 + Crypt::Mac::BLAKE2b 0.069 + Crypt::Mac::BLAKE2s 0.069 + Crypt::Mac::F9 0.069 + Crypt::Mac::HMAC 0.069 + Crypt::Mac::OMAC 0.069 + Crypt::Mac::PMAC 0.069 + Crypt::Mac::Pelican 0.069 + Crypt::Mac::Poly1305 0.069 + Crypt::Mac::XCBC 0.069 + Crypt::Misc 0.069 + Crypt::Mode 0.069 + Crypt::Mode::CBC 0.069 + Crypt::Mode::CFB 0.069 + Crypt::Mode::CTR 0.069 + Crypt::Mode::ECB 0.069 + Crypt::Mode::OFB 0.069 + Crypt::PK 0.069 + Crypt::PK::DH 0.069 + Crypt::PK::DSA 0.069 + Crypt::PK::ECC 0.069 + Crypt::PK::Ed25519 0.069 + Crypt::PK::RSA 0.069 + Crypt::PK::X25519 0.069 + Crypt::PRNG 0.069 + Crypt::PRNG::ChaCha20 0.069 + Crypt::PRNG::Fortuna 0.069 + Crypt::PRNG::RC4 0.069 + Crypt::PRNG::Sober128 0.069 + Crypt::PRNG::Yarrow 0.069 + Crypt::Stream::ChaCha 0.069 + Crypt::Stream::RC4 0.069 + Crypt::Stream::Rabbit 0.069 + Crypt::Stream::Salsa20 0.069 + Crypt::Stream::Sober128 0.069 + Crypt::Stream::Sosemanuk 0.069 + CryptX 0.069 + Math::BigInt::LTM 0.069 requirements: ExtUtils::MakeMaker 0 perl 5.006 - DBD-SQLite-1.64 - pathname: I/IS/ISHIGAKI/DBD-SQLite-1.64.tar.gz + DBD-SQLite-1.66 + pathname: I/IS/ISHIGAKI/DBD-SQLite-1.66.tar.gz provides: - DBD::SQLite 1.64 + DBD::SQLite 1.66 DBD::SQLite::Constants undef DBD::SQLite::GetInfo undef - DBD::SQLite::VirtualTable 1.64 - DBD::SQLite::VirtualTable::Cursor 1.64 + DBD::SQLite::VirtualTable 1.66 + DBD::SQLite::VirtualTable::Cursor 1.66 DBD::SQLite::VirtualTable::FileContent undef DBD::SQLite::VirtualTable::FileContent::Cursor undef DBD::SQLite::VirtualTable::PerlData undef @@ -1376,10 +1405,10 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.48 Test::Simple 0.90 perl 5.008001 - DBIx-Class-0.082841 - pathname: R/RI/RIBASUSHI/DBIx-Class-0.082841.tar.gz + DBIx-Class-0.082842 + pathname: R/RI/RIBASUSHI/DBIx-Class-0.082842.tar.gz provides: - DBIx::Class 0.082841 + DBIx::Class 0.082842 DBIx::Class::AccessorGroup undef DBIx::Class::Admin undef DBIx::Class::CDBICompat undef @@ -1399,6 +1428,7 @@ DISTRIBUTIONS DBIx::Class::Relationship::Base undef DBIx::Class::ResultClass::HashRefInflator undef DBIx::Class::ResultSet undef + DBIx::Class::ResultSet::Pager undef DBIx::Class::ResultSetColumn undef DBIx::Class::ResultSetManager undef DBIx::Class::ResultSource undef @@ -1408,6 +1438,7 @@ DISTRIBUTIONS DBIx::Class::ResultSourceProxy::Table undef DBIx::Class::Row undef DBIx::Class::SQLMaker undef + DBIx::Class::SQLMaker::ClassicExtensions undef DBIx::Class::SQLMaker::LimitDialects undef DBIx::Class::SQLMaker::OracleJoins undef DBIx::Class::Schema undef @@ -1461,6 +1492,7 @@ DISTRIBUTIONS DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars undef DBIx::Class::Storage::DBI::UniqueIdentifier undef DBIx::Class::Storage::DBI::mysql undef + DBIx::Class::Storage::Debug::PrettyTrace undef DBIx::Class::Storage::Statistics undef DBIx::Class::Storage::TxnScopeGuard undef DBIx::Class::UTF8Columns undef @@ -1475,18 +1507,16 @@ DISTRIBUTIONS DBD::SQLite 1.29 DBI 1.57 Data::Dumper::Concise 2.020 - Data::Page 2.00 Devel::GlobalDestruction 0.09 ExtUtils::MakeMaker 6.59 File::Temp 0.22 Hash::Merge 0.12 - List::Util 1.16 MRO::Compat 0.12 Module::Find 0.07 Moo 2.000 Package::Stash 0.28 Path::Class 0.18 - SQL::Abstract 1.81 + SQL::Abstract::Classic 1.91 Scope::Guard 0.03 Sub::Name 0.04 Test::Deep 0.101 @@ -1677,10 +1707,10 @@ DISTRIBUTIONS Exporter 0 ExtUtils::MakeMaker 0 perl 5.006 - Data-ObjectDriver-0.19 - pathname: S/SI/SIXAPART/Data-ObjectDriver-0.19.tar.gz + Data-ObjectDriver-0.21 + pathname: S/SI/SIXAPART/Data-ObjectDriver-0.21.tar.gz provides: - Data::ObjectDriver 0.19 + Data::ObjectDriver 0.21 Data::ObjectDriver::BaseObject undef Data::ObjectDriver::BaseView undef Data::ObjectDriver::Driver::BaseCache undef @@ -1689,6 +1719,7 @@ DISTRIBUTIONS Data::ObjectDriver::Driver::Cache::Memcached undef Data::ObjectDriver::Driver::Cache::RAM undef Data::ObjectDriver::Driver::DBD undef + Data::ObjectDriver::Driver::DBD::MariaDB undef Data::ObjectDriver::Driver::DBD::Oracle undef Data::ObjectDriver::Driver::DBD::Oracle::db undef Data::ObjectDriver::Driver::DBD::Pg undef @@ -1727,18 +1758,6 @@ DISTRIBUTIONS Sub::Install 0.921 strict 0 warnings 0 - Data-Page-2.03 - pathname: E/ET/ETHER/Data-Page-2.03.tar.gz - provides: - Data::Page 2.03 - requirements: - Carp 0 - Class::Accessor::Chained::Fast 0 - ExtUtils::MakeMaker 0 - base 0 - integer 0 - perl 5.006 - strict 0 Data-Password-passwdqc-0.09 pathname: S/SH/SHERWIN/Data-Password-passwdqc-0.09.tar.gz provides: @@ -1760,18 +1779,25 @@ DISTRIBUTIONS Scalar::Util 1.01 Storable 0 perl 5.008 - Data-Visitor-0.30 - pathname: D/DO/DOY/Data-Visitor-0.30.tar.gz + Data-Visitor-0.31 + pathname: E/ET/ETHER/Data-Visitor-0.31.tar.gz provides: - Data::Visitor 0.30 - Data::Visitor::Callback 0.30 + Data::Visitor 0.31 + Data::Visitor::Callback 0.31 requirements: - Class::Load 0.06 - ExtUtils::MakeMaker 6.30 + Carp 0 + ExtUtils::MakeMaker 0 Moose 0.89 - Task::Weaken 0 + Scalar::Util 0 + Sub::Name 0 + Symbol 0 Tie::ToObject 0.01 + constant 0 namespace::clean 0.19 + overload 0 + perl 5.006 + strict 0 + warnings 0 DataDog-DogStatsd-0.06 pathname: B/BI/BINARY/DataDog-DogStatsd-0.06.tar.gz provides: @@ -1780,23 +1806,23 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 IO::Socket::INET 0 - DateTime-1.52 - pathname: D/DR/DROLSKY/DateTime-1.52.tar.gz - provides: - DateTime 1.52 - DateTime::Duration 1.52 - DateTime::Helpers 1.52 - DateTime::Infinite 1.52 - DateTime::Infinite::Future 1.52 - DateTime::Infinite::Past 1.52 - DateTime::LeapSecond 1.52 - DateTime::PP 1.52 - DateTime::PPExtra 1.52 - DateTime::Types 1.52 + DateTime-1.54 + pathname: D/DR/DROLSKY/DateTime-1.54.tar.gz + provides: + DateTime 1.54 + DateTime::Duration 1.54 + DateTime::Helpers 1.54 + DateTime::Infinite 1.54 + DateTime::Infinite::Future 1.54 + DateTime::Infinite::Past 1.54 + DateTime::LeapSecond 1.54 + DateTime::PP 1.54 + DateTime::PPExtra 1.54 + DateTime::Types 1.54 requirements: Carp 0 DateTime::Locale 1.06 - DateTime::TimeZone 2.02 + DateTime::TimeZone 2.44 Dist::CheckConflicts 0.02 ExtUtils::MakeMaker 0 POSIX 0 @@ -1819,16 +1845,16 @@ DISTRIBUTIONS strict 0 warnings 0 warnings::register 0 - DateTime-Format-Builder-0.82 - pathname: D/DR/DROLSKY/DateTime-Format-Builder-0.82.tar.gz + DateTime-Format-Builder-0.83 + pathname: D/DR/DROLSKY/DateTime-Format-Builder-0.83.tar.gz provides: - DateTime::Format::Builder 0.82 - DateTime::Format::Builder::Parser 0.82 - DateTime::Format::Builder::Parser::Dispatch 0.82 - DateTime::Format::Builder::Parser::Quick 0.82 - DateTime::Format::Builder::Parser::Regex 0.82 - DateTime::Format::Builder::Parser::Strptime 0.82 - DateTime::Format::Builder::Parser::generic 0.82 + DateTime::Format::Builder 0.83 + DateTime::Format::Builder::Parser 0.83 + DateTime::Format::Builder::Parser::Dispatch 0.83 + DateTime::Format::Builder::Parser::Quick 0.83 + DateTime::Format::Builder::Parser::Regex 0.83 + DateTime::Format::Builder::Parser::Strptime 0.83 + DateTime::Format::Builder::Parser::generic 0.83 requirements: Carp 0 DateTime 1.00 @@ -1838,7 +1864,6 @@ DISTRIBUTIONS Scalar::Util 0 parent 0 strict 0 - vars 0 warnings 0 DateTime-Format-MySQL-0.06 pathname: X/XM/XMIKEW/DateTime-Format-MySQL-0.06.tar.gz @@ -1857,15 +1882,15 @@ DISTRIBUTIONS DateTime::Format::Builder 0.6 ExtUtils::MakeMaker 0 perl 5.003 - DateTime-Format-Strptime-1.77 - pathname: D/DR/DROLSKY/DateTime-Format-Strptime-1.77.tar.gz + DateTime-Format-Strptime-1.78 + pathname: D/DR/DROLSKY/DateTime-Format-Strptime-1.78.tar.gz provides: - DateTime::Format::Strptime 1.77 - DateTime::Format::Strptime::Types 1.77 + DateTime::Format::Strptime 1.78 + DateTime::Format::Strptime::Types 1.78 requirements: Carp 0 DateTime 1.00 - DateTime::Locale 1.23 + DateTime::Locale 1.30 DateTime::Locale::Base 0 DateTime::Locale::FromData 0 DateTime::TimeZone 2.09 @@ -1882,26 +1907,28 @@ DISTRIBUTIONS parent 0 strict 0 warnings 0 - DateTime-Locale-1.25 - pathname: D/DR/DROLSKY/DateTime-Locale-1.25.tar.gz + DateTime-Locale-1.31 + pathname: D/DR/DROLSKY/DateTime-Locale-1.31.tar.gz provides: - DateTime::Locale 1.25 - DateTime::Locale::Base 1.25 - DateTime::Locale::Catalog 1.25 - DateTime::Locale::Data 1.25 - DateTime::Locale::FromData 1.25 - DateTime::Locale::Util 1.25 + DateTime::Locale 1.31 + DateTime::Locale::Base 1.31 + DateTime::Locale::Catalog 1.31 + DateTime::Locale::Data 1.31 + DateTime::Locale::FromData 1.31 + DateTime::Locale::Util 1.31 requirements: Carp 0 Dist::CheckConflicts 0.02 Exporter 0 ExtUtils::MakeMaker 0 File::ShareDir 0 - File::ShareDir::Install 0.03 + File::ShareDir::Install 0.06 + File::Spec 0 List::Util 1.45 Params::ValidationCompiler 0.13 Specio::Declare 0 Specio::Library::String 0 + Storable 0 namespace::autoclean 0.19 perl 5.008004 strict 0 @@ -1918,382 +1945,381 @@ DISTRIBUTIONS Params::Validate 0 Set::Infinite 0.59 Test::More 0 - DateTime-TimeZone-2.39 - pathname: D/DR/DROLSKY/DateTime-TimeZone-2.39.tar.gz - provides: - DateTime::TimeZone 2.39 - DateTime::TimeZone::Africa::Abidjan 2.39 - DateTime::TimeZone::Africa::Accra 2.39 - DateTime::TimeZone::Africa::Algiers 2.39 - DateTime::TimeZone::Africa::Bissau 2.39 - DateTime::TimeZone::Africa::Cairo 2.39 - DateTime::TimeZone::Africa::Casablanca 2.39 - DateTime::TimeZone::Africa::Ceuta 2.39 - DateTime::TimeZone::Africa::El_Aaiun 2.39 - DateTime::TimeZone::Africa::Johannesburg 2.39 - DateTime::TimeZone::Africa::Juba 2.39 - DateTime::TimeZone::Africa::Khartoum 2.39 - DateTime::TimeZone::Africa::Lagos 2.39 - DateTime::TimeZone::Africa::Maputo 2.39 - DateTime::TimeZone::Africa::Monrovia 2.39 - DateTime::TimeZone::Africa::Nairobi 2.39 - DateTime::TimeZone::Africa::Ndjamena 2.39 - DateTime::TimeZone::Africa::Sao_Tome 2.39 - DateTime::TimeZone::Africa::Tripoli 2.39 - DateTime::TimeZone::Africa::Tunis 2.39 - DateTime::TimeZone::Africa::Windhoek 2.39 - DateTime::TimeZone::America::Adak 2.39 - DateTime::TimeZone::America::Anchorage 2.39 - DateTime::TimeZone::America::Araguaina 2.39 - DateTime::TimeZone::America::Argentina::Buenos_Aires 2.39 - DateTime::TimeZone::America::Argentina::Catamarca 2.39 - DateTime::TimeZone::America::Argentina::Cordoba 2.39 - DateTime::TimeZone::America::Argentina::Jujuy 2.39 - DateTime::TimeZone::America::Argentina::La_Rioja 2.39 - DateTime::TimeZone::America::Argentina::Mendoza 2.39 - DateTime::TimeZone::America::Argentina::Rio_Gallegos 2.39 - DateTime::TimeZone::America::Argentina::Salta 2.39 - DateTime::TimeZone::America::Argentina::San_Juan 2.39 - DateTime::TimeZone::America::Argentina::San_Luis 2.39 - DateTime::TimeZone::America::Argentina::Tucuman 2.39 - DateTime::TimeZone::America::Argentina::Ushuaia 2.39 - DateTime::TimeZone::America::Asuncion 2.39 - DateTime::TimeZone::America::Atikokan 2.39 - DateTime::TimeZone::America::Bahia 2.39 - DateTime::TimeZone::America::Bahia_Banderas 2.39 - DateTime::TimeZone::America::Barbados 2.39 - DateTime::TimeZone::America::Belem 2.39 - DateTime::TimeZone::America::Belize 2.39 - DateTime::TimeZone::America::Blanc_Sablon 2.39 - DateTime::TimeZone::America::Boa_Vista 2.39 - DateTime::TimeZone::America::Bogota 2.39 - DateTime::TimeZone::America::Boise 2.39 - DateTime::TimeZone::America::Cambridge_Bay 2.39 - DateTime::TimeZone::America::Campo_Grande 2.39 - DateTime::TimeZone::America::Cancun 2.39 - DateTime::TimeZone::America::Caracas 2.39 - DateTime::TimeZone::America::Cayenne 2.39 - DateTime::TimeZone::America::Chicago 2.39 - DateTime::TimeZone::America::Chihuahua 2.39 - DateTime::TimeZone::America::Costa_Rica 2.39 - DateTime::TimeZone::America::Creston 2.39 - DateTime::TimeZone::America::Cuiaba 2.39 - DateTime::TimeZone::America::Curacao 2.39 - DateTime::TimeZone::America::Danmarkshavn 2.39 - DateTime::TimeZone::America::Dawson 2.39 - DateTime::TimeZone::America::Dawson_Creek 2.39 - DateTime::TimeZone::America::Denver 2.39 - DateTime::TimeZone::America::Detroit 2.39 - DateTime::TimeZone::America::Edmonton 2.39 - DateTime::TimeZone::America::Eirunepe 2.39 - DateTime::TimeZone::America::El_Salvador 2.39 - DateTime::TimeZone::America::Fort_Nelson 2.39 - DateTime::TimeZone::America::Fortaleza 2.39 - DateTime::TimeZone::America::Glace_Bay 2.39 - DateTime::TimeZone::America::Goose_Bay 2.39 - DateTime::TimeZone::America::Grand_Turk 2.39 - DateTime::TimeZone::America::Guatemala 2.39 - DateTime::TimeZone::America::Guayaquil 2.39 - DateTime::TimeZone::America::Guyana 2.39 - DateTime::TimeZone::America::Halifax 2.39 - DateTime::TimeZone::America::Havana 2.39 - DateTime::TimeZone::America::Hermosillo 2.39 - DateTime::TimeZone::America::Indiana::Indianapolis 2.39 - DateTime::TimeZone::America::Indiana::Knox 2.39 - DateTime::TimeZone::America::Indiana::Marengo 2.39 - DateTime::TimeZone::America::Indiana::Petersburg 2.39 - DateTime::TimeZone::America::Indiana::Tell_City 2.39 - DateTime::TimeZone::America::Indiana::Vevay 2.39 - DateTime::TimeZone::America::Indiana::Vincennes 2.39 - DateTime::TimeZone::America::Indiana::Winamac 2.39 - DateTime::TimeZone::America::Inuvik 2.39 - DateTime::TimeZone::America::Iqaluit 2.39 - DateTime::TimeZone::America::Jamaica 2.39 - DateTime::TimeZone::America::Juneau 2.39 - DateTime::TimeZone::America::Kentucky::Louisville 2.39 - DateTime::TimeZone::America::Kentucky::Monticello 2.39 - DateTime::TimeZone::America::La_Paz 2.39 - DateTime::TimeZone::America::Lima 2.39 - DateTime::TimeZone::America::Los_Angeles 2.39 - DateTime::TimeZone::America::Maceio 2.39 - DateTime::TimeZone::America::Managua 2.39 - DateTime::TimeZone::America::Manaus 2.39 - DateTime::TimeZone::America::Martinique 2.39 - DateTime::TimeZone::America::Matamoros 2.39 - DateTime::TimeZone::America::Mazatlan 2.39 - DateTime::TimeZone::America::Menominee 2.39 - DateTime::TimeZone::America::Merida 2.39 - DateTime::TimeZone::America::Metlakatla 2.39 - DateTime::TimeZone::America::Mexico_City 2.39 - DateTime::TimeZone::America::Miquelon 2.39 - DateTime::TimeZone::America::Moncton 2.39 - DateTime::TimeZone::America::Monterrey 2.39 - DateTime::TimeZone::America::Montevideo 2.39 - DateTime::TimeZone::America::Nassau 2.39 - DateTime::TimeZone::America::New_York 2.39 - DateTime::TimeZone::America::Nipigon 2.39 - DateTime::TimeZone::America::Nome 2.39 - DateTime::TimeZone::America::Noronha 2.39 - DateTime::TimeZone::America::North_Dakota::Beulah 2.39 - DateTime::TimeZone::America::North_Dakota::Center 2.39 - DateTime::TimeZone::America::North_Dakota::New_Salem 2.39 - DateTime::TimeZone::America::Nuuk 2.39 - DateTime::TimeZone::America::Ojinaga 2.39 - DateTime::TimeZone::America::Panama 2.39 - DateTime::TimeZone::America::Pangnirtung 2.39 - DateTime::TimeZone::America::Paramaribo 2.39 - DateTime::TimeZone::America::Phoenix 2.39 - DateTime::TimeZone::America::Port_au_Prince 2.39 - DateTime::TimeZone::America::Port_of_Spain 2.39 - DateTime::TimeZone::America::Porto_Velho 2.39 - DateTime::TimeZone::America::Puerto_Rico 2.39 - DateTime::TimeZone::America::Punta_Arenas 2.39 - DateTime::TimeZone::America::Rainy_River 2.39 - DateTime::TimeZone::America::Rankin_Inlet 2.39 - DateTime::TimeZone::America::Recife 2.39 - DateTime::TimeZone::America::Regina 2.39 - DateTime::TimeZone::America::Resolute 2.39 - DateTime::TimeZone::America::Rio_Branco 2.39 - DateTime::TimeZone::America::Santarem 2.39 - DateTime::TimeZone::America::Santiago 2.39 - DateTime::TimeZone::America::Santo_Domingo 2.39 - DateTime::TimeZone::America::Sao_Paulo 2.39 - DateTime::TimeZone::America::Scoresbysund 2.39 - DateTime::TimeZone::America::Sitka 2.39 - DateTime::TimeZone::America::St_Johns 2.39 - DateTime::TimeZone::America::Swift_Current 2.39 - DateTime::TimeZone::America::Tegucigalpa 2.39 - DateTime::TimeZone::America::Thule 2.39 - DateTime::TimeZone::America::Thunder_Bay 2.39 - DateTime::TimeZone::America::Tijuana 2.39 - DateTime::TimeZone::America::Toronto 2.39 - DateTime::TimeZone::America::Vancouver 2.39 - DateTime::TimeZone::America::Whitehorse 2.39 - DateTime::TimeZone::America::Winnipeg 2.39 - DateTime::TimeZone::America::Yakutat 2.39 - DateTime::TimeZone::America::Yellowknife 2.39 - DateTime::TimeZone::Antarctica::Casey 2.39 - DateTime::TimeZone::Antarctica::Davis 2.39 - DateTime::TimeZone::Antarctica::DumontDUrville 2.39 - DateTime::TimeZone::Antarctica::Macquarie 2.39 - DateTime::TimeZone::Antarctica::Mawson 2.39 - DateTime::TimeZone::Antarctica::Palmer 2.39 - DateTime::TimeZone::Antarctica::Rothera 2.39 - DateTime::TimeZone::Antarctica::Syowa 2.39 - DateTime::TimeZone::Antarctica::Troll 2.39 - DateTime::TimeZone::Antarctica::Vostok 2.39 - DateTime::TimeZone::Asia::Almaty 2.39 - DateTime::TimeZone::Asia::Amman 2.39 - DateTime::TimeZone::Asia::Anadyr 2.39 - DateTime::TimeZone::Asia::Aqtau 2.39 - DateTime::TimeZone::Asia::Aqtobe 2.39 - DateTime::TimeZone::Asia::Ashgabat 2.39 - DateTime::TimeZone::Asia::Atyrau 2.39 - DateTime::TimeZone::Asia::Baghdad 2.39 - DateTime::TimeZone::Asia::Baku 2.39 - DateTime::TimeZone::Asia::Bangkok 2.39 - DateTime::TimeZone::Asia::Barnaul 2.39 - DateTime::TimeZone::Asia::Beirut 2.39 - DateTime::TimeZone::Asia::Bishkek 2.39 - DateTime::TimeZone::Asia::Brunei 2.39 - DateTime::TimeZone::Asia::Chita 2.39 - DateTime::TimeZone::Asia::Choibalsan 2.39 - DateTime::TimeZone::Asia::Colombo 2.39 - DateTime::TimeZone::Asia::Damascus 2.39 - DateTime::TimeZone::Asia::Dhaka 2.39 - DateTime::TimeZone::Asia::Dili 2.39 - DateTime::TimeZone::Asia::Dubai 2.39 - DateTime::TimeZone::Asia::Dushanbe 2.39 - DateTime::TimeZone::Asia::Famagusta 2.39 - DateTime::TimeZone::Asia::Gaza 2.39 - DateTime::TimeZone::Asia::Hebron 2.39 - DateTime::TimeZone::Asia::Ho_Chi_Minh 2.39 - DateTime::TimeZone::Asia::Hong_Kong 2.39 - DateTime::TimeZone::Asia::Hovd 2.39 - DateTime::TimeZone::Asia::Irkutsk 2.39 - DateTime::TimeZone::Asia::Jakarta 2.39 - DateTime::TimeZone::Asia::Jayapura 2.39 - DateTime::TimeZone::Asia::Jerusalem 2.39 - DateTime::TimeZone::Asia::Kabul 2.39 - DateTime::TimeZone::Asia::Kamchatka 2.39 - DateTime::TimeZone::Asia::Karachi 2.39 - DateTime::TimeZone::Asia::Kathmandu 2.39 - DateTime::TimeZone::Asia::Khandyga 2.39 - DateTime::TimeZone::Asia::Kolkata 2.39 - DateTime::TimeZone::Asia::Krasnoyarsk 2.39 - DateTime::TimeZone::Asia::Kuala_Lumpur 2.39 - DateTime::TimeZone::Asia::Kuching 2.39 - DateTime::TimeZone::Asia::Macau 2.39 - DateTime::TimeZone::Asia::Magadan 2.39 - DateTime::TimeZone::Asia::Makassar 2.39 - DateTime::TimeZone::Asia::Manila 2.39 - DateTime::TimeZone::Asia::Nicosia 2.39 - DateTime::TimeZone::Asia::Novokuznetsk 2.39 - DateTime::TimeZone::Asia::Novosibirsk 2.39 - DateTime::TimeZone::Asia::Omsk 2.39 - DateTime::TimeZone::Asia::Oral 2.39 - DateTime::TimeZone::Asia::Pontianak 2.39 - DateTime::TimeZone::Asia::Pyongyang 2.39 - DateTime::TimeZone::Asia::Qatar 2.39 - DateTime::TimeZone::Asia::Qostanay 2.39 - DateTime::TimeZone::Asia::Qyzylorda 2.39 - DateTime::TimeZone::Asia::Riyadh 2.39 - DateTime::TimeZone::Asia::Sakhalin 2.39 - DateTime::TimeZone::Asia::Samarkand 2.39 - DateTime::TimeZone::Asia::Seoul 2.39 - DateTime::TimeZone::Asia::Shanghai 2.39 - DateTime::TimeZone::Asia::Singapore 2.39 - DateTime::TimeZone::Asia::Srednekolymsk 2.39 - DateTime::TimeZone::Asia::Taipei 2.39 - DateTime::TimeZone::Asia::Tashkent 2.39 - DateTime::TimeZone::Asia::Tbilisi 2.39 - DateTime::TimeZone::Asia::Tehran 2.39 - DateTime::TimeZone::Asia::Thimphu 2.39 - DateTime::TimeZone::Asia::Tokyo 2.39 - DateTime::TimeZone::Asia::Tomsk 2.39 - DateTime::TimeZone::Asia::Ulaanbaatar 2.39 - DateTime::TimeZone::Asia::Urumqi 2.39 - DateTime::TimeZone::Asia::Ust_Nera 2.39 - DateTime::TimeZone::Asia::Vladivostok 2.39 - DateTime::TimeZone::Asia::Yakutsk 2.39 - DateTime::TimeZone::Asia::Yangon 2.39 - DateTime::TimeZone::Asia::Yekaterinburg 2.39 - DateTime::TimeZone::Asia::Yerevan 2.39 - DateTime::TimeZone::Atlantic::Azores 2.39 - DateTime::TimeZone::Atlantic::Bermuda 2.39 - DateTime::TimeZone::Atlantic::Canary 2.39 - DateTime::TimeZone::Atlantic::Cape_Verde 2.39 - DateTime::TimeZone::Atlantic::Faroe 2.39 - DateTime::TimeZone::Atlantic::Madeira 2.39 - DateTime::TimeZone::Atlantic::Reykjavik 2.39 - DateTime::TimeZone::Atlantic::South_Georgia 2.39 - DateTime::TimeZone::Atlantic::Stanley 2.39 - DateTime::TimeZone::Australia::Adelaide 2.39 - DateTime::TimeZone::Australia::Brisbane 2.39 - DateTime::TimeZone::Australia::Broken_Hill 2.39 - DateTime::TimeZone::Australia::Currie 2.39 - DateTime::TimeZone::Australia::Darwin 2.39 - DateTime::TimeZone::Australia::Eucla 2.39 - DateTime::TimeZone::Australia::Hobart 2.39 - DateTime::TimeZone::Australia::Lindeman 2.39 - DateTime::TimeZone::Australia::Lord_Howe 2.39 - DateTime::TimeZone::Australia::Melbourne 2.39 - DateTime::TimeZone::Australia::Perth 2.39 - DateTime::TimeZone::Australia::Sydney 2.39 - DateTime::TimeZone::CET 2.39 - DateTime::TimeZone::CST6CDT 2.39 - DateTime::TimeZone::Catalog 2.39 - DateTime::TimeZone::EET 2.39 - DateTime::TimeZone::EST 2.39 - DateTime::TimeZone::EST5EDT 2.39 - DateTime::TimeZone::Europe::Amsterdam 2.39 - DateTime::TimeZone::Europe::Andorra 2.39 - DateTime::TimeZone::Europe::Astrakhan 2.39 - DateTime::TimeZone::Europe::Athens 2.39 - DateTime::TimeZone::Europe::Belgrade 2.39 - DateTime::TimeZone::Europe::Berlin 2.39 - DateTime::TimeZone::Europe::Brussels 2.39 - DateTime::TimeZone::Europe::Bucharest 2.39 - DateTime::TimeZone::Europe::Budapest 2.39 - DateTime::TimeZone::Europe::Chisinau 2.39 - DateTime::TimeZone::Europe::Copenhagen 2.39 - DateTime::TimeZone::Europe::Dublin 2.39 - DateTime::TimeZone::Europe::Gibraltar 2.39 - DateTime::TimeZone::Europe::Helsinki 2.39 - DateTime::TimeZone::Europe::Istanbul 2.39 - DateTime::TimeZone::Europe::Kaliningrad 2.39 - DateTime::TimeZone::Europe::Kiev 2.39 - DateTime::TimeZone::Europe::Kirov 2.39 - DateTime::TimeZone::Europe::Lisbon 2.39 - DateTime::TimeZone::Europe::London 2.39 - DateTime::TimeZone::Europe::Luxembourg 2.39 - DateTime::TimeZone::Europe::Madrid 2.39 - DateTime::TimeZone::Europe::Malta 2.39 - DateTime::TimeZone::Europe::Minsk 2.39 - DateTime::TimeZone::Europe::Monaco 2.39 - DateTime::TimeZone::Europe::Moscow 2.39 - DateTime::TimeZone::Europe::Oslo 2.39 - DateTime::TimeZone::Europe::Paris 2.39 - DateTime::TimeZone::Europe::Prague 2.39 - DateTime::TimeZone::Europe::Riga 2.39 - DateTime::TimeZone::Europe::Rome 2.39 - DateTime::TimeZone::Europe::Samara 2.39 - DateTime::TimeZone::Europe::Saratov 2.39 - DateTime::TimeZone::Europe::Simferopol 2.39 - DateTime::TimeZone::Europe::Sofia 2.39 - DateTime::TimeZone::Europe::Stockholm 2.39 - DateTime::TimeZone::Europe::Tallinn 2.39 - DateTime::TimeZone::Europe::Tirane 2.39 - DateTime::TimeZone::Europe::Ulyanovsk 2.39 - DateTime::TimeZone::Europe::Uzhgorod 2.39 - DateTime::TimeZone::Europe::Vienna 2.39 - DateTime::TimeZone::Europe::Vilnius 2.39 - DateTime::TimeZone::Europe::Volgograd 2.39 - DateTime::TimeZone::Europe::Warsaw 2.39 - DateTime::TimeZone::Europe::Zaporozhye 2.39 - DateTime::TimeZone::Europe::Zurich 2.39 - DateTime::TimeZone::Floating 2.39 - DateTime::TimeZone::HST 2.39 - DateTime::TimeZone::Indian::Chagos 2.39 - DateTime::TimeZone::Indian::Christmas 2.39 - DateTime::TimeZone::Indian::Cocos 2.39 - DateTime::TimeZone::Indian::Kerguelen 2.39 - DateTime::TimeZone::Indian::Mahe 2.39 - DateTime::TimeZone::Indian::Maldives 2.39 - DateTime::TimeZone::Indian::Mauritius 2.39 - DateTime::TimeZone::Indian::Reunion 2.39 - DateTime::TimeZone::Local 2.39 - DateTime::TimeZone::Local::Android 2.39 - DateTime::TimeZone::Local::Unix 2.39 - DateTime::TimeZone::Local::VMS 2.39 - DateTime::TimeZone::MET 2.39 - DateTime::TimeZone::MST 2.39 - DateTime::TimeZone::MST7MDT 2.39 - DateTime::TimeZone::OffsetOnly 2.39 - DateTime::TimeZone::OlsonDB 2.39 - DateTime::TimeZone::OlsonDB::Change 2.39 - DateTime::TimeZone::OlsonDB::Observance 2.39 - DateTime::TimeZone::OlsonDB::Rule 2.39 - DateTime::TimeZone::OlsonDB::Zone 2.39 - DateTime::TimeZone::PST8PDT 2.39 - DateTime::TimeZone::Pacific::Apia 2.39 - DateTime::TimeZone::Pacific::Auckland 2.39 - DateTime::TimeZone::Pacific::Bougainville 2.39 - DateTime::TimeZone::Pacific::Chatham 2.39 - DateTime::TimeZone::Pacific::Chuuk 2.39 - DateTime::TimeZone::Pacific::Easter 2.39 - DateTime::TimeZone::Pacific::Efate 2.39 - DateTime::TimeZone::Pacific::Enderbury 2.39 - DateTime::TimeZone::Pacific::Fakaofo 2.39 - DateTime::TimeZone::Pacific::Fiji 2.39 - DateTime::TimeZone::Pacific::Funafuti 2.39 - DateTime::TimeZone::Pacific::Galapagos 2.39 - DateTime::TimeZone::Pacific::Gambier 2.39 - DateTime::TimeZone::Pacific::Guadalcanal 2.39 - DateTime::TimeZone::Pacific::Guam 2.39 - DateTime::TimeZone::Pacific::Honolulu 2.39 - DateTime::TimeZone::Pacific::Kiritimati 2.39 - DateTime::TimeZone::Pacific::Kosrae 2.39 - DateTime::TimeZone::Pacific::Kwajalein 2.39 - DateTime::TimeZone::Pacific::Majuro 2.39 - DateTime::TimeZone::Pacific::Marquesas 2.39 - DateTime::TimeZone::Pacific::Nauru 2.39 - DateTime::TimeZone::Pacific::Niue 2.39 - DateTime::TimeZone::Pacific::Norfolk 2.39 - DateTime::TimeZone::Pacific::Noumea 2.39 - DateTime::TimeZone::Pacific::Pago_Pago 2.39 - DateTime::TimeZone::Pacific::Palau 2.39 - DateTime::TimeZone::Pacific::Pitcairn 2.39 - DateTime::TimeZone::Pacific::Pohnpei 2.39 - DateTime::TimeZone::Pacific::Port_Moresby 2.39 - DateTime::TimeZone::Pacific::Rarotonga 2.39 - DateTime::TimeZone::Pacific::Tahiti 2.39 - DateTime::TimeZone::Pacific::Tarawa 2.39 - DateTime::TimeZone::Pacific::Tongatapu 2.39 - DateTime::TimeZone::Pacific::Wake 2.39 - DateTime::TimeZone::Pacific::Wallis 2.39 - DateTime::TimeZone::UTC 2.39 - DateTime::TimeZone::WET 2.39 + DateTime-TimeZone-2.46 + pathname: D/DR/DROLSKY/DateTime-TimeZone-2.46.tar.gz + provides: + DateTime::TimeZone 2.46 + DateTime::TimeZone::Africa::Abidjan 2.46 + DateTime::TimeZone::Africa::Accra 2.46 + DateTime::TimeZone::Africa::Algiers 2.46 + DateTime::TimeZone::Africa::Bissau 2.46 + DateTime::TimeZone::Africa::Cairo 2.46 + DateTime::TimeZone::Africa::Casablanca 2.46 + DateTime::TimeZone::Africa::Ceuta 2.46 + DateTime::TimeZone::Africa::El_Aaiun 2.46 + DateTime::TimeZone::Africa::Johannesburg 2.46 + DateTime::TimeZone::Africa::Juba 2.46 + DateTime::TimeZone::Africa::Khartoum 2.46 + DateTime::TimeZone::Africa::Lagos 2.46 + DateTime::TimeZone::Africa::Maputo 2.46 + DateTime::TimeZone::Africa::Monrovia 2.46 + DateTime::TimeZone::Africa::Nairobi 2.46 + DateTime::TimeZone::Africa::Ndjamena 2.46 + DateTime::TimeZone::Africa::Sao_Tome 2.46 + DateTime::TimeZone::Africa::Tripoli 2.46 + DateTime::TimeZone::Africa::Tunis 2.46 + DateTime::TimeZone::Africa::Windhoek 2.46 + DateTime::TimeZone::America::Adak 2.46 + DateTime::TimeZone::America::Anchorage 2.46 + DateTime::TimeZone::America::Araguaina 2.46 + DateTime::TimeZone::America::Argentina::Buenos_Aires 2.46 + DateTime::TimeZone::America::Argentina::Catamarca 2.46 + DateTime::TimeZone::America::Argentina::Cordoba 2.46 + DateTime::TimeZone::America::Argentina::Jujuy 2.46 + DateTime::TimeZone::America::Argentina::La_Rioja 2.46 + DateTime::TimeZone::America::Argentina::Mendoza 2.46 + DateTime::TimeZone::America::Argentina::Rio_Gallegos 2.46 + DateTime::TimeZone::America::Argentina::Salta 2.46 + DateTime::TimeZone::America::Argentina::San_Juan 2.46 + DateTime::TimeZone::America::Argentina::San_Luis 2.46 + DateTime::TimeZone::America::Argentina::Tucuman 2.46 + DateTime::TimeZone::America::Argentina::Ushuaia 2.46 + DateTime::TimeZone::America::Asuncion 2.46 + DateTime::TimeZone::America::Atikokan 2.46 + DateTime::TimeZone::America::Bahia 2.46 + DateTime::TimeZone::America::Bahia_Banderas 2.46 + DateTime::TimeZone::America::Barbados 2.46 + DateTime::TimeZone::America::Belem 2.46 + DateTime::TimeZone::America::Belize 2.46 + DateTime::TimeZone::America::Blanc_Sablon 2.46 + DateTime::TimeZone::America::Boa_Vista 2.46 + DateTime::TimeZone::America::Bogota 2.46 + DateTime::TimeZone::America::Boise 2.46 + DateTime::TimeZone::America::Cambridge_Bay 2.46 + DateTime::TimeZone::America::Campo_Grande 2.46 + DateTime::TimeZone::America::Cancun 2.46 + DateTime::TimeZone::America::Caracas 2.46 + DateTime::TimeZone::America::Cayenne 2.46 + DateTime::TimeZone::America::Chicago 2.46 + DateTime::TimeZone::America::Chihuahua 2.46 + DateTime::TimeZone::America::Costa_Rica 2.46 + DateTime::TimeZone::America::Creston 2.46 + DateTime::TimeZone::America::Cuiaba 2.46 + DateTime::TimeZone::America::Curacao 2.46 + DateTime::TimeZone::America::Danmarkshavn 2.46 + DateTime::TimeZone::America::Dawson 2.46 + DateTime::TimeZone::America::Dawson_Creek 2.46 + DateTime::TimeZone::America::Denver 2.46 + DateTime::TimeZone::America::Detroit 2.46 + DateTime::TimeZone::America::Edmonton 2.46 + DateTime::TimeZone::America::Eirunepe 2.46 + DateTime::TimeZone::America::El_Salvador 2.46 + DateTime::TimeZone::America::Fort_Nelson 2.46 + DateTime::TimeZone::America::Fortaleza 2.46 + DateTime::TimeZone::America::Glace_Bay 2.46 + DateTime::TimeZone::America::Goose_Bay 2.46 + DateTime::TimeZone::America::Grand_Turk 2.46 + DateTime::TimeZone::America::Guatemala 2.46 + DateTime::TimeZone::America::Guayaquil 2.46 + DateTime::TimeZone::America::Guyana 2.46 + DateTime::TimeZone::America::Halifax 2.46 + DateTime::TimeZone::America::Havana 2.46 + DateTime::TimeZone::America::Hermosillo 2.46 + DateTime::TimeZone::America::Indiana::Indianapolis 2.46 + DateTime::TimeZone::America::Indiana::Knox 2.46 + DateTime::TimeZone::America::Indiana::Marengo 2.46 + DateTime::TimeZone::America::Indiana::Petersburg 2.46 + DateTime::TimeZone::America::Indiana::Tell_City 2.46 + DateTime::TimeZone::America::Indiana::Vevay 2.46 + DateTime::TimeZone::America::Indiana::Vincennes 2.46 + DateTime::TimeZone::America::Indiana::Winamac 2.46 + DateTime::TimeZone::America::Inuvik 2.46 + DateTime::TimeZone::America::Iqaluit 2.46 + DateTime::TimeZone::America::Jamaica 2.46 + DateTime::TimeZone::America::Juneau 2.46 + DateTime::TimeZone::America::Kentucky::Louisville 2.46 + DateTime::TimeZone::America::Kentucky::Monticello 2.46 + DateTime::TimeZone::America::La_Paz 2.46 + DateTime::TimeZone::America::Lima 2.46 + DateTime::TimeZone::America::Los_Angeles 2.46 + DateTime::TimeZone::America::Maceio 2.46 + DateTime::TimeZone::America::Managua 2.46 + DateTime::TimeZone::America::Manaus 2.46 + DateTime::TimeZone::America::Martinique 2.46 + DateTime::TimeZone::America::Matamoros 2.46 + DateTime::TimeZone::America::Mazatlan 2.46 + DateTime::TimeZone::America::Menominee 2.46 + DateTime::TimeZone::America::Merida 2.46 + DateTime::TimeZone::America::Metlakatla 2.46 + DateTime::TimeZone::America::Mexico_City 2.46 + DateTime::TimeZone::America::Miquelon 2.46 + DateTime::TimeZone::America::Moncton 2.46 + DateTime::TimeZone::America::Monterrey 2.46 + DateTime::TimeZone::America::Montevideo 2.46 + DateTime::TimeZone::America::Nassau 2.46 + DateTime::TimeZone::America::New_York 2.46 + DateTime::TimeZone::America::Nipigon 2.46 + DateTime::TimeZone::America::Nome 2.46 + DateTime::TimeZone::America::Noronha 2.46 + DateTime::TimeZone::America::North_Dakota::Beulah 2.46 + DateTime::TimeZone::America::North_Dakota::Center 2.46 + DateTime::TimeZone::America::North_Dakota::New_Salem 2.46 + DateTime::TimeZone::America::Nuuk 2.46 + DateTime::TimeZone::America::Ojinaga 2.46 + DateTime::TimeZone::America::Panama 2.46 + DateTime::TimeZone::America::Pangnirtung 2.46 + DateTime::TimeZone::America::Paramaribo 2.46 + DateTime::TimeZone::America::Phoenix 2.46 + DateTime::TimeZone::America::Port_au_Prince 2.46 + DateTime::TimeZone::America::Port_of_Spain 2.46 + DateTime::TimeZone::America::Porto_Velho 2.46 + DateTime::TimeZone::America::Puerto_Rico 2.46 + DateTime::TimeZone::America::Punta_Arenas 2.46 + DateTime::TimeZone::America::Rainy_River 2.46 + DateTime::TimeZone::America::Rankin_Inlet 2.46 + DateTime::TimeZone::America::Recife 2.46 + DateTime::TimeZone::America::Regina 2.46 + DateTime::TimeZone::America::Resolute 2.46 + DateTime::TimeZone::America::Rio_Branco 2.46 + DateTime::TimeZone::America::Santarem 2.46 + DateTime::TimeZone::America::Santiago 2.46 + DateTime::TimeZone::America::Santo_Domingo 2.46 + DateTime::TimeZone::America::Sao_Paulo 2.46 + DateTime::TimeZone::America::Scoresbysund 2.46 + DateTime::TimeZone::America::Sitka 2.46 + DateTime::TimeZone::America::St_Johns 2.46 + DateTime::TimeZone::America::Swift_Current 2.46 + DateTime::TimeZone::America::Tegucigalpa 2.46 + DateTime::TimeZone::America::Thule 2.46 + DateTime::TimeZone::America::Thunder_Bay 2.46 + DateTime::TimeZone::America::Tijuana 2.46 + DateTime::TimeZone::America::Toronto 2.46 + DateTime::TimeZone::America::Vancouver 2.46 + DateTime::TimeZone::America::Whitehorse 2.46 + DateTime::TimeZone::America::Winnipeg 2.46 + DateTime::TimeZone::America::Yakutat 2.46 + DateTime::TimeZone::America::Yellowknife 2.46 + DateTime::TimeZone::Antarctica::Casey 2.46 + DateTime::TimeZone::Antarctica::Davis 2.46 + DateTime::TimeZone::Antarctica::DumontDUrville 2.46 + DateTime::TimeZone::Antarctica::Macquarie 2.46 + DateTime::TimeZone::Antarctica::Mawson 2.46 + DateTime::TimeZone::Antarctica::Palmer 2.46 + DateTime::TimeZone::Antarctica::Rothera 2.46 + DateTime::TimeZone::Antarctica::Syowa 2.46 + DateTime::TimeZone::Antarctica::Troll 2.46 + DateTime::TimeZone::Antarctica::Vostok 2.46 + DateTime::TimeZone::Asia::Almaty 2.46 + DateTime::TimeZone::Asia::Amman 2.46 + DateTime::TimeZone::Asia::Anadyr 2.46 + DateTime::TimeZone::Asia::Aqtau 2.46 + DateTime::TimeZone::Asia::Aqtobe 2.46 + DateTime::TimeZone::Asia::Ashgabat 2.46 + DateTime::TimeZone::Asia::Atyrau 2.46 + DateTime::TimeZone::Asia::Baghdad 2.46 + DateTime::TimeZone::Asia::Baku 2.46 + DateTime::TimeZone::Asia::Bangkok 2.46 + DateTime::TimeZone::Asia::Barnaul 2.46 + DateTime::TimeZone::Asia::Beirut 2.46 + DateTime::TimeZone::Asia::Bishkek 2.46 + DateTime::TimeZone::Asia::Brunei 2.46 + DateTime::TimeZone::Asia::Chita 2.46 + DateTime::TimeZone::Asia::Choibalsan 2.46 + DateTime::TimeZone::Asia::Colombo 2.46 + DateTime::TimeZone::Asia::Damascus 2.46 + DateTime::TimeZone::Asia::Dhaka 2.46 + DateTime::TimeZone::Asia::Dili 2.46 + DateTime::TimeZone::Asia::Dubai 2.46 + DateTime::TimeZone::Asia::Dushanbe 2.46 + DateTime::TimeZone::Asia::Famagusta 2.46 + DateTime::TimeZone::Asia::Gaza 2.46 + DateTime::TimeZone::Asia::Hebron 2.46 + DateTime::TimeZone::Asia::Ho_Chi_Minh 2.46 + DateTime::TimeZone::Asia::Hong_Kong 2.46 + DateTime::TimeZone::Asia::Hovd 2.46 + DateTime::TimeZone::Asia::Irkutsk 2.46 + DateTime::TimeZone::Asia::Jakarta 2.46 + DateTime::TimeZone::Asia::Jayapura 2.46 + DateTime::TimeZone::Asia::Jerusalem 2.46 + DateTime::TimeZone::Asia::Kabul 2.46 + DateTime::TimeZone::Asia::Kamchatka 2.46 + DateTime::TimeZone::Asia::Karachi 2.46 + DateTime::TimeZone::Asia::Kathmandu 2.46 + DateTime::TimeZone::Asia::Khandyga 2.46 + DateTime::TimeZone::Asia::Kolkata 2.46 + DateTime::TimeZone::Asia::Krasnoyarsk 2.46 + DateTime::TimeZone::Asia::Kuala_Lumpur 2.46 + DateTime::TimeZone::Asia::Kuching 2.46 + DateTime::TimeZone::Asia::Macau 2.46 + DateTime::TimeZone::Asia::Magadan 2.46 + DateTime::TimeZone::Asia::Makassar 2.46 + DateTime::TimeZone::Asia::Manila 2.46 + DateTime::TimeZone::Asia::Nicosia 2.46 + DateTime::TimeZone::Asia::Novokuznetsk 2.46 + DateTime::TimeZone::Asia::Novosibirsk 2.46 + DateTime::TimeZone::Asia::Omsk 2.46 + DateTime::TimeZone::Asia::Oral 2.46 + DateTime::TimeZone::Asia::Pontianak 2.46 + DateTime::TimeZone::Asia::Pyongyang 2.46 + DateTime::TimeZone::Asia::Qatar 2.46 + DateTime::TimeZone::Asia::Qostanay 2.46 + DateTime::TimeZone::Asia::Qyzylorda 2.46 + DateTime::TimeZone::Asia::Riyadh 2.46 + DateTime::TimeZone::Asia::Sakhalin 2.46 + DateTime::TimeZone::Asia::Samarkand 2.46 + DateTime::TimeZone::Asia::Seoul 2.46 + DateTime::TimeZone::Asia::Shanghai 2.46 + DateTime::TimeZone::Asia::Singapore 2.46 + DateTime::TimeZone::Asia::Srednekolymsk 2.46 + DateTime::TimeZone::Asia::Taipei 2.46 + DateTime::TimeZone::Asia::Tashkent 2.46 + DateTime::TimeZone::Asia::Tbilisi 2.46 + DateTime::TimeZone::Asia::Tehran 2.46 + DateTime::TimeZone::Asia::Thimphu 2.46 + DateTime::TimeZone::Asia::Tokyo 2.46 + DateTime::TimeZone::Asia::Tomsk 2.46 + DateTime::TimeZone::Asia::Ulaanbaatar 2.46 + DateTime::TimeZone::Asia::Urumqi 2.46 + DateTime::TimeZone::Asia::Ust_Nera 2.46 + DateTime::TimeZone::Asia::Vladivostok 2.46 + DateTime::TimeZone::Asia::Yakutsk 2.46 + DateTime::TimeZone::Asia::Yangon 2.46 + DateTime::TimeZone::Asia::Yekaterinburg 2.46 + DateTime::TimeZone::Asia::Yerevan 2.46 + DateTime::TimeZone::Atlantic::Azores 2.46 + DateTime::TimeZone::Atlantic::Bermuda 2.46 + DateTime::TimeZone::Atlantic::Canary 2.46 + DateTime::TimeZone::Atlantic::Cape_Verde 2.46 + DateTime::TimeZone::Atlantic::Faroe 2.46 + DateTime::TimeZone::Atlantic::Madeira 2.46 + DateTime::TimeZone::Atlantic::Reykjavik 2.46 + DateTime::TimeZone::Atlantic::South_Georgia 2.46 + DateTime::TimeZone::Atlantic::Stanley 2.46 + DateTime::TimeZone::Australia::Adelaide 2.46 + DateTime::TimeZone::Australia::Brisbane 2.46 + DateTime::TimeZone::Australia::Broken_Hill 2.46 + DateTime::TimeZone::Australia::Darwin 2.46 + DateTime::TimeZone::Australia::Eucla 2.46 + DateTime::TimeZone::Australia::Hobart 2.46 + DateTime::TimeZone::Australia::Lindeman 2.46 + DateTime::TimeZone::Australia::Lord_Howe 2.46 + DateTime::TimeZone::Australia::Melbourne 2.46 + DateTime::TimeZone::Australia::Perth 2.46 + DateTime::TimeZone::Australia::Sydney 2.46 + DateTime::TimeZone::CET 2.46 + DateTime::TimeZone::CST6CDT 2.46 + DateTime::TimeZone::Catalog 2.46 + DateTime::TimeZone::EET 2.46 + DateTime::TimeZone::EST 2.46 + DateTime::TimeZone::EST5EDT 2.46 + DateTime::TimeZone::Europe::Amsterdam 2.46 + DateTime::TimeZone::Europe::Andorra 2.46 + DateTime::TimeZone::Europe::Astrakhan 2.46 + DateTime::TimeZone::Europe::Athens 2.46 + DateTime::TimeZone::Europe::Belgrade 2.46 + DateTime::TimeZone::Europe::Berlin 2.46 + DateTime::TimeZone::Europe::Brussels 2.46 + DateTime::TimeZone::Europe::Bucharest 2.46 + DateTime::TimeZone::Europe::Budapest 2.46 + DateTime::TimeZone::Europe::Chisinau 2.46 + DateTime::TimeZone::Europe::Copenhagen 2.46 + DateTime::TimeZone::Europe::Dublin 2.46 + DateTime::TimeZone::Europe::Gibraltar 2.46 + DateTime::TimeZone::Europe::Helsinki 2.46 + DateTime::TimeZone::Europe::Istanbul 2.46 + DateTime::TimeZone::Europe::Kaliningrad 2.46 + DateTime::TimeZone::Europe::Kiev 2.46 + DateTime::TimeZone::Europe::Kirov 2.46 + DateTime::TimeZone::Europe::Lisbon 2.46 + DateTime::TimeZone::Europe::London 2.46 + DateTime::TimeZone::Europe::Luxembourg 2.46 + DateTime::TimeZone::Europe::Madrid 2.46 + DateTime::TimeZone::Europe::Malta 2.46 + DateTime::TimeZone::Europe::Minsk 2.46 + DateTime::TimeZone::Europe::Monaco 2.46 + DateTime::TimeZone::Europe::Moscow 2.46 + DateTime::TimeZone::Europe::Oslo 2.46 + DateTime::TimeZone::Europe::Paris 2.46 + DateTime::TimeZone::Europe::Prague 2.46 + DateTime::TimeZone::Europe::Riga 2.46 + DateTime::TimeZone::Europe::Rome 2.46 + DateTime::TimeZone::Europe::Samara 2.46 + DateTime::TimeZone::Europe::Saratov 2.46 + DateTime::TimeZone::Europe::Simferopol 2.46 + DateTime::TimeZone::Europe::Sofia 2.46 + DateTime::TimeZone::Europe::Stockholm 2.46 + DateTime::TimeZone::Europe::Tallinn 2.46 + DateTime::TimeZone::Europe::Tirane 2.46 + DateTime::TimeZone::Europe::Ulyanovsk 2.46 + DateTime::TimeZone::Europe::Uzhgorod 2.46 + DateTime::TimeZone::Europe::Vienna 2.46 + DateTime::TimeZone::Europe::Vilnius 2.46 + DateTime::TimeZone::Europe::Volgograd 2.46 + DateTime::TimeZone::Europe::Warsaw 2.46 + DateTime::TimeZone::Europe::Zaporozhye 2.46 + DateTime::TimeZone::Europe::Zurich 2.46 + DateTime::TimeZone::Floating 2.46 + DateTime::TimeZone::HST 2.46 + DateTime::TimeZone::Indian::Chagos 2.46 + DateTime::TimeZone::Indian::Christmas 2.46 + DateTime::TimeZone::Indian::Cocos 2.46 + DateTime::TimeZone::Indian::Kerguelen 2.46 + DateTime::TimeZone::Indian::Mahe 2.46 + DateTime::TimeZone::Indian::Maldives 2.46 + DateTime::TimeZone::Indian::Mauritius 2.46 + DateTime::TimeZone::Indian::Reunion 2.46 + DateTime::TimeZone::Local 2.46 + DateTime::TimeZone::Local::Android 2.46 + DateTime::TimeZone::Local::Unix 2.46 + DateTime::TimeZone::Local::VMS 2.46 + DateTime::TimeZone::MET 2.46 + DateTime::TimeZone::MST 2.46 + DateTime::TimeZone::MST7MDT 2.46 + DateTime::TimeZone::OffsetOnly 2.46 + DateTime::TimeZone::OlsonDB 2.46 + DateTime::TimeZone::OlsonDB::Change 2.46 + DateTime::TimeZone::OlsonDB::Observance 2.46 + DateTime::TimeZone::OlsonDB::Rule 2.46 + DateTime::TimeZone::OlsonDB::Zone 2.46 + DateTime::TimeZone::PST8PDT 2.46 + DateTime::TimeZone::Pacific::Apia 2.46 + DateTime::TimeZone::Pacific::Auckland 2.46 + DateTime::TimeZone::Pacific::Bougainville 2.46 + DateTime::TimeZone::Pacific::Chatham 2.46 + DateTime::TimeZone::Pacific::Chuuk 2.46 + DateTime::TimeZone::Pacific::Easter 2.46 + DateTime::TimeZone::Pacific::Efate 2.46 + DateTime::TimeZone::Pacific::Enderbury 2.46 + DateTime::TimeZone::Pacific::Fakaofo 2.46 + DateTime::TimeZone::Pacific::Fiji 2.46 + DateTime::TimeZone::Pacific::Funafuti 2.46 + DateTime::TimeZone::Pacific::Galapagos 2.46 + DateTime::TimeZone::Pacific::Gambier 2.46 + DateTime::TimeZone::Pacific::Guadalcanal 2.46 + DateTime::TimeZone::Pacific::Guam 2.46 + DateTime::TimeZone::Pacific::Honolulu 2.46 + DateTime::TimeZone::Pacific::Kiritimati 2.46 + DateTime::TimeZone::Pacific::Kosrae 2.46 + DateTime::TimeZone::Pacific::Kwajalein 2.46 + DateTime::TimeZone::Pacific::Majuro 2.46 + DateTime::TimeZone::Pacific::Marquesas 2.46 + DateTime::TimeZone::Pacific::Nauru 2.46 + DateTime::TimeZone::Pacific::Niue 2.46 + DateTime::TimeZone::Pacific::Norfolk 2.46 + DateTime::TimeZone::Pacific::Noumea 2.46 + DateTime::TimeZone::Pacific::Pago_Pago 2.46 + DateTime::TimeZone::Pacific::Palau 2.46 + DateTime::TimeZone::Pacific::Pitcairn 2.46 + DateTime::TimeZone::Pacific::Pohnpei 2.46 + DateTime::TimeZone::Pacific::Port_Moresby 2.46 + DateTime::TimeZone::Pacific::Rarotonga 2.46 + DateTime::TimeZone::Pacific::Tahiti 2.46 + DateTime::TimeZone::Pacific::Tarawa 2.46 + DateTime::TimeZone::Pacific::Tongatapu 2.46 + DateTime::TimeZone::Pacific::Wake 2.46 + DateTime::TimeZone::Pacific::Wallis 2.46 + DateTime::TimeZone::UTC 2.46 + DateTime::TimeZone::WET 2.46 requirements: Class::Singleton 1.03 Cwd 3 @@ -2501,19 +2527,19 @@ DISTRIBUTIONS Time::Local 0 strict 0 warnings 0 - Email-MIME-1.946 - pathname: R/RJ/RJBS/Email-MIME-1.946.tar.gz + Email-MIME-1.949 + pathname: R/RJ/RJBS/Email-MIME-1.949.tar.gz provides: - Email::MIME 1.946 - Email::MIME::Creator 1.946 - Email::MIME::Encode 1.946 - Email::MIME::Header 1.946 - Email::MIME::Header::AddressList 1.946 - Email::MIME::Modifier 1.946 + Email::MIME 1.949 + Email::MIME::Creator 1.949 + Email::MIME::Encode 1.949 + Email::MIME::Header 1.949 + Email::MIME::Header::AddressList 1.949 + Email::MIME::Modifier 1.949 requirements: Carp 0 Email::Address::XS 0 - Email::MIME::ContentType 1.022 + Email::MIME::ContentType 1.023 Email::MIME::Encodings 1.314 Email::MessageID 0 Email::Simple 2.212 @@ -2541,15 +2567,16 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.30 strict 0 warnings 0 - Email-MIME-ContentType-1.022 - pathname: R/RJ/RJBS/Email-MIME-ContentType-1.022.tar.gz + Email-MIME-ContentType-1.026 + pathname: R/RJ/RJBS/Email-MIME-ContentType-1.026.tar.gz provides: - Email::MIME::ContentType 1.022 + Email::MIME::ContentType 1.026 requirements: Carp 0 Encode 2.87 Exporter 5.57 ExtUtils::MakeMaker 0 + Text::Unidecode 0 strict 0 warnings 0 Email-MIME-Encodings-1.315 @@ -2769,60 +2796,59 @@ DISTRIBUTIONS ExtUtils::PkgConfig 1.16 requirements: ExtUtils::MakeMaker 0 - FFI-CheckLib-0.26 - pathname: P/PL/PLICEASE/FFI-CheckLib-0.26.tar.gz + FFI-CheckLib-0.27 + pathname: P/PL/PLICEASE/FFI-CheckLib-0.27.tar.gz provides: - FFI::CheckLib 0.26 + FFI::CheckLib 0.27 requirements: ExtUtils::MakeMaker 0 perl 5.006 - FFI-Platypus-1.24 - pathname: P/PL/PLICEASE/FFI-Platypus-1.24.tar.gz - provides: - FFI::Build 1.24 - FFI::Build::File::Base 1.24 - FFI::Build::File::C 1.24 - FFI::Build::File::CXX 1.24 - FFI::Build::File::Library 1.24 - FFI::Build::File::Object 1.24 - FFI::Build::MM 1.24 - FFI::Build::MM::FBX 1.24 - FFI::Build::Platform 1.24 - FFI::Platypus 1.24 - FFI::Platypus::API 1.24 - FFI::Platypus::Buffer 1.24 - FFI::Platypus::Bundle 1.24 - FFI::Platypus::Closure 1.24 - FFI::Platypus::ClosureData 1.24 - FFI::Platypus::Constant 1.24 - FFI::Platypus::DL 1.24 - FFI::Platypus::Declare 1.24 - FFI::Platypus::Function 1.24 - FFI::Platypus::Function::Function 1.24 - FFI::Platypus::Function::Wrapper 1.24 - FFI::Platypus::Internal 1.24 - FFI::Platypus::Lang 1.24 - FFI::Platypus::Lang::ASM 1.24 - FFI::Platypus::Lang::C 1.24 - FFI::Platypus::Lang::Win32 1.24 - FFI::Platypus::Legacy 1.24 - FFI::Platypus::Memory 1.24 - FFI::Platypus::Record 1.24 - FFI::Platypus::Record::Meta 1.24 - FFI::Platypus::Record::TieArray 1.24 - FFI::Platypus::ShareConfig 1.24 - FFI::Platypus::Type 1.24 - FFI::Platypus::Type::PointerSizeBuffer 1.24 - FFI::Platypus::Type::StringArray 1.24 - FFI::Platypus::Type::StringPointer 1.24 - FFI::Platypus::TypeParser 1.24 - FFI::Platypus::TypeParser::Version0 1.24 - FFI::Platypus::TypeParser::Version1 1.24 - FFI::Probe 1.24 - FFI::Probe::Runner 1.24 - FFI::Probe::Runner::Builder 1.24 - FFI::Probe::Runner::Result 1.24 - FFI::Temp 1.24 + FFI-Platypus-1.34 + pathname: P/PL/PLICEASE/FFI-Platypus-1.34.tar.gz + provides: + FFI::Build 1.34 + FFI::Build::File::Base 1.34 + FFI::Build::File::C 1.34 + FFI::Build::File::CXX 1.34 + FFI::Build::File::Library 1.34 + FFI::Build::File::Object 1.34 + FFI::Build::MM 1.34 + FFI::Build::MM::FBX 1.34 + FFI::Build::Platform 1.34 + FFI::Platypus 1.34 + FFI::Platypus::API 1.34 + FFI::Platypus::Buffer 1.34 + FFI::Platypus::Bundle 1.34 + FFI::Platypus::Closure 1.34 + FFI::Platypus::ClosureData 1.34 + FFI::Platypus::Constant 1.34 + FFI::Platypus::DL 1.34 + FFI::Platypus::Function 1.34 + FFI::Platypus::Function::Function 1.34 + FFI::Platypus::Function::Wrapper 1.34 + FFI::Platypus::Internal 1.34 + FFI::Platypus::Lang 1.34 + FFI::Platypus::Lang::ASM 1.34 + FFI::Platypus::Lang::C 1.34 + FFI::Platypus::Lang::Win32 1.34 + FFI::Platypus::Legacy 1.34 + FFI::Platypus::Memory 1.34 + FFI::Platypus::Record 1.34 + FFI::Platypus::Record::Meta 1.34 + FFI::Platypus::Record::TieArray 1.34 + FFI::Platypus::ShareConfig 1.34 + FFI::Platypus::Type 1.34 + FFI::Platypus::Type::PointerSizeBuffer 1.34 + FFI::Platypus::Type::StringArray 1.34 + FFI::Platypus::Type::StringPointer 1.34 + FFI::Platypus::TypeParser 1.34 + FFI::Platypus::TypeParser::Version0 1.34 + FFI::Platypus::TypeParser::Version1 1.34 + FFI::Probe 1.34 + FFI::Probe::Runner 1.34 + FFI::Probe::Runner::Builder 1.34 + FFI::Probe::Runner::Result 1.34 + FFI::Temp 1.34 requirements: Capture::Tiny 0 ExtUtils::CBuilder 0 @@ -2833,7 +2859,7 @@ DISTRIBUTIONS JSON::PP 0 List::Util 1.45 constant 1.32 - perl 5.008001 + perl 5.008004 File-BaseDir-0.08 pathname: K/KI/KIMRYAN/File-BaseDir-0.08.tar.gz provides: @@ -2887,19 +2913,19 @@ DISTRIBUTIONS IO::Event 0.812 Test::SharedFork 0 Time::HiRes 0 - File-HomeDir-1.004 - pathname: R/RE/REHSACK/File-HomeDir-1.004.tar.gz - provides: - File::HomeDir 1.004 - File::HomeDir::Darwin 1.004 - File::HomeDir::Darwin::Carbon 1.004 - File::HomeDir::Darwin::Cocoa 1.004 - File::HomeDir::Driver 1.004 - File::HomeDir::FreeDesktop 1.004 - File::HomeDir::MacOS9 1.004 - File::HomeDir::Test 1.004 - File::HomeDir::Unix 1.004 - File::HomeDir::Windows 1.004 + File-HomeDir-1.006 + pathname: R/RE/REHSACK/File-HomeDir-1.006.tar.gz + provides: + File::HomeDir 1.006 + File::HomeDir::Darwin 1.006 + File::HomeDir::Darwin::Carbon 1.006 + File::HomeDir::Darwin::Cocoa 1.006 + File::HomeDir::Driver 1.006 + File::HomeDir::FreeDesktop 1.006 + File::HomeDir::MacOS9 1.006 + File::HomeDir::Test 1.006 + File::HomeDir::Unix 1.006 + File::HomeDir::Windows 1.006 requirements: Carp 0 Cwd 3.12 @@ -2911,28 +2937,33 @@ DISTRIBUTIONS File::Which 0.05 POSIX 0 perl 5.008003 - File-Listing-6.04 - pathname: G/GA/GAAS/File-Listing-6.04.tar.gz + File-Listing-6.14 + pathname: P/PL/PLICEASE/File-Listing-6.14.tar.gz provides: - File::Listing 6.04 - File::Listing::apache 6.04 - File::Listing::dosftp 6.04 - File::Listing::netware 6.04 - File::Listing::unix 6.04 - File::Listing::vms 6.04 + File::Listing 6.14 + File::Listing::apache 6.14 + File::Listing::dosftp 6.14 + File::Listing::netware 6.14 + File::Listing::unix 6.14 + File::Listing::vms 6.14 requirements: + Carp 0 + Exporter 0 ExtUtils::MakeMaker 0 - HTTP::Date 6 - perl 5.006002 - File-MimeInfo-0.29 - pathname: M/MI/MICHIELB/File-MimeInfo-0.29.tar.gz + HTTP::Date 0 + Time::Local 0 + base 0 + perl 5.006 + File-MimeInfo-0.30 + pathname: M/MI/MICHIELB/File-MimeInfo-0.30.tar.gz provides: - File::MimeInfo 0.29 - File::MimeInfo::Applications 0.29 - File::MimeInfo::Magic 0.29 - File::MimeInfo::Rox 0.29 + File::MimeInfo 0.30 + File::MimeInfo::Applications 0.30 + File::MimeInfo::Magic 0.30 + File::MimeInfo::Rox 0.30 requirements: Carp 0 + Encode::Locale 0 Exporter 0 ExtUtils::MakeMaker 6.30 Fcntl 0 @@ -2940,10 +2971,10 @@ DISTRIBUTIONS File::DesktopEntry 0.04 Pod::Usage 0 perl 5.006001 - File-ShareDir-1.116 - pathname: R/RE/REHSACK/File-ShareDir-1.116.tar.gz + File-ShareDir-1.118 + pathname: R/RE/REHSACK/File-ShareDir-1.118.tar.gz provides: - File::ShareDir 1.116 + File::ShareDir 1.118 requirements: Carp 0 Class::Inspector 1.12 @@ -2965,10 +2996,10 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - File-Slurp-9999.30 - pathname: C/CA/CAPOEIRAB/File-Slurp-9999.30.tar.gz + File-Slurp-9999.32 + pathname: C/CA/CAPOEIRAB/File-Slurp-9999.32.tar.gz provides: - File::Slurp 9999.30 + File::Slurp 9999.32 requirements: B 0 Carp 0 @@ -3061,29 +3092,29 @@ DISTRIBUTIONS Scalar::Util 1.17 Test::Exception 0 Test::More 0 - Future-0.45 - pathname: P/PE/PEVANS/Future-0.45.tar.gz + Future-0.47 + pathname: P/PE/PEVANS/Future-0.47.tar.gz provides: - Future 0.45 - Future::Exception 0.45 - Future::Mutex 0.45 - Future::Queue 0.45 - Future::Utils 0.45 - Test::Future 0.45 - Test::Future::Deferred 0.45 + Future 0.47 + Future::Exception 0.47 + Future::Mutex 0.47 + Future::Queue 0.47 + Future::Utils 0.47 + Test::Future 0.47 + Test::Future::Deferred 0.47 requirements: Carp 1.25 Module::Build 0.4004 Test::Builder::Module 0 Time::HiRes 0 perl 5.010 - GD-2.71 - pathname: R/RU/RURBAN/GD-2.71.tar.gz + GD-2.73 + pathname: R/RU/RURBAN/GD-2.73.tar.gz provides: - GD 2.71 + GD 2.73 GD::Group 1 - GD::Image 2.71 - GD::Polygon 2.71 + GD::Image 2.73 + GD::Polygon 2.73 GD::Polyline 0.2 GD::Simple undef requirements: @@ -3259,21 +3290,28 @@ DISTRIBUTIONS XSLoader 0 parent 0 perl 5.008008 - HTML-Parser-3.72 - pathname: G/GA/GAAS/HTML-Parser-3.72.tar.gz + HTML-Parser-3.75 + pathname: C/CA/CAPOEIRAB/HTML-Parser-3.75.tar.gz provides: - HTML::Entities 3.69 - HTML::Filter 3.72 - HTML::HeadParser 3.71 - HTML::LinkExtor 3.69 - HTML::Parser 3.72 - HTML::PullParser 3.57 - HTML::TokeParser 3.69 + HTML::Entities 3.75 + HTML::Filter 3.75 + HTML::HeadParser 3.75 + HTML::LinkExtor 3.75 + HTML::Parser 3.75 + HTML::PullParser 3.75 + HTML::TokeParser 3.75 requirements: - ExtUtils::MakeMaker 0 - HTML::Tagset 3 + Carp 0 + Exporter 0 + ExtUtils::MakeMaker 6.52 + HTML::Tagset 0 + HTTP::Headers 0 + IO::File 0 + URI 0 + URI::URL 0 XSLoader 0 - perl 5.008 + strict 0 + vars 0 HTML-Scrubber-0.19 pathname: N/NI/NIGELM/HTML-Scrubber-0.19.tar.gz provides: @@ -3316,12 +3354,12 @@ DISTRIBUTIONS base 0 integer 0 perl 5.008 - HTTP-Cookies-6.08 - pathname: O/OA/OALDERS/HTTP-Cookies-6.08.tar.gz + HTTP-Cookies-6.10 + pathname: O/OA/OALDERS/HTTP-Cookies-6.10.tar.gz provides: - HTTP::Cookies 6.08 - HTTP::Cookies::Microsoft 6.08 - HTTP::Cookies::Netscape 6.08 + HTTP::Cookies 6.10 + HTTP::Cookies::Microsoft 6.10 + HTTP::Cookies::Netscape 6.10 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -3331,10 +3369,10 @@ DISTRIBUTIONS locale 0 perl 5.008001 strict 0 - HTTP-Daemon-6.06 - pathname: O/OA/OALDERS/HTTP-Daemon-6.06.tar.gz + HTTP-Daemon-6.12 + pathname: O/OA/OALDERS/HTTP-Daemon-6.12.tar.gz provides: - HTTP::Daemon 6.06 + HTTP::Daemon 6.12 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -3342,11 +3380,10 @@ DISTRIBUTIONS HTTP::Request 6 HTTP::Response 6 HTTP::Status 6 - IO::Socket::IP 0 + IO::Socket::IP 0.25 LWP::MediaTypes 6 Module::Build::Tiny 0.034 Socket 0 - Sys::Hostname 0 perl 5.006 strict 0 warnings 0 @@ -3361,10 +3398,10 @@ DISTRIBUTIONS Time::Zone 0 perl 5.006002 strict 0 - HTTP-Entity-Parser-0.22 - pathname: K/KA/KAZEBURO/HTTP-Entity-Parser-0.22.tar.gz + HTTP-Entity-Parser-0.25 + pathname: K/KA/KAZEBURO/HTTP-Entity-Parser-0.25.tar.gz provides: - HTTP::Entity::Parser 0.22 + HTTP::Entity::Parser 0.25 HTTP::Entity::Parser::JSON undef HTTP::Entity::Parser::MultiPart undef HTTP::Entity::Parser::OctetStream undef @@ -3388,19 +3425,19 @@ DISTRIBUTIONS HTTP::Date 0 Module::Build::Tiny 0.035 perl 5.008001 - HTTP-Message-6.22 - pathname: O/OA/OALDERS/HTTP-Message-6.22.tar.gz - provides: - HTTP::Config 6.22 - HTTP::Headers 6.22 - HTTP::Headers::Auth 6.22 - HTTP::Headers::ETag 6.22 - HTTP::Headers::Util 6.22 - HTTP::Message 6.22 - HTTP::Request 6.22 - HTTP::Request::Common 6.22 - HTTP::Response 6.22 - HTTP::Status 6.22 + HTTP-Message-6.27 + pathname: O/OA/OALDERS/HTTP-Message-6.27.tar.gz + provides: + HTTP::Config 6.27 + HTTP::Headers 6.27 + HTTP::Headers::Auth 6.27 + HTTP::Headers::ETag 6.27 + HTTP::Headers::Util 6.27 + HTTP::Message 6.27 + HTTP::Request 6.27 + HTTP::Request::Common 6.27 + HTTP::Response 6.27 + HTTP::Status 6.27 requirements: Carp 0 Compress::Raw::Zlib 0 @@ -3420,7 +3457,6 @@ DISTRIBUTIONS LWP::MediaTypes 6 MIME::Base64 2.1 MIME::QuotedPrint 0 - Storable 0 URI 1.10 base 0 perl 5.008001 @@ -3445,10 +3481,10 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 HTTP::Headers 6 perl 5.008001 - Hash-Merge-0.300 - pathname: R/RE/REHSACK/Hash-Merge-0.300.tar.gz + Hash-Merge-0.302 + pathname: H/HE/HERMES/Hash-Merge-0.302.tar.gz provides: - Hash::Merge 0.300 + Hash::Merge 0.302 requirements: Clone::Choose 0.008 ExtUtils::MakeMaker 6.64 @@ -3474,45 +3510,45 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - IO-Async-0.76 - pathname: P/PE/PEVANS/IO-Async-0.76.tar.gz + IO-Async-0.78 + pathname: P/PE/PEVANS/IO-Async-0.78.tar.gz provides: Future::IO::Impl::IOAsync undef - IO::Async 0.76 - IO::Async::Channel 0.76 - IO::Async::Debug 0.76 - IO::Async::File 0.76 - IO::Async::FileStream 0.76 - IO::Async::Function 0.76 - IO::Async::Future 0.76 - IO::Async::Handle 0.76 - IO::Async::Internals::ChildManager 0.76 - IO::Async::Listener 0.76 - IO::Async::Loop 0.76 - IO::Async::Loop::Poll 0.76 - IO::Async::Loop::Select 0.76 - IO::Async::LoopTests 0.76 + IO::Async 0.78 + IO::Async::Channel 0.78 + IO::Async::Debug 0.78 + IO::Async::File 0.78 + IO::Async::FileStream 0.78 + IO::Async::Function 0.78 + IO::Async::Future 0.78 + IO::Async::Handle 0.78 + IO::Async::Internals::ChildManager 0.78 + IO::Async::Listener 0.78 + IO::Async::Loop 0.78 + IO::Async::Loop::Poll 0.78 + IO::Async::Loop::Select 0.78 + IO::Async::LoopTests 0.78 IO::Async::Metrics undef - IO::Async::Notifier 0.76 - IO::Async::OS 0.76 - IO::Async::OS::MSWin32 0.76 - IO::Async::OS::cygwin 0.76 - IO::Async::OS::linux 0.76 - IO::Async::PID 0.76 - IO::Async::Process 0.76 - IO::Async::Protocol 0.76 - IO::Async::Protocol::LineStream 0.76 - IO::Async::Protocol::Stream 0.76 - IO::Async::Resolver 0.76 - IO::Async::Routine 0.76 - IO::Async::Signal 0.76 - IO::Async::Socket 0.76 - IO::Async::Stream 0.76 - IO::Async::Test 0.76 - IO::Async::Timer 0.76 - IO::Async::Timer::Absolute 0.76 - IO::Async::Timer::Countdown 0.76 - IO::Async::Timer::Periodic 0.76 + IO::Async::Notifier 0.78 + IO::Async::OS 0.78 + IO::Async::OS::MSWin32 0.78 + IO::Async::OS::cygwin 0.78 + IO::Async::OS::linux 0.78 + IO::Async::PID 0.78 + IO::Async::Process 0.78 + IO::Async::Protocol 0.78 + IO::Async::Protocol::LineStream 0.78 + IO::Async::Protocol::Stream 0.78 + IO::Async::Resolver 0.78 + IO::Async::Routine 0.78 + IO::Async::Signal 0.78 + IO::Async::Socket 0.78 + IO::Async::Stream 0.78 + IO::Async::Test 0.78 + IO::Async::Timer 0.78 + IO::Async::Timer::Absolute 0.78 + IO::Async::Timer::Countdown 0.78 + IO::Async::Timer::Periodic 0.78 requirements: Exporter 5.57 File::stat 0 @@ -3546,15 +3582,16 @@ DISTRIBUTIONS Test::Simple 0 Time::HiRes 0 diagnostics 0 - IO-HTML-1.001 - pathname: C/CJ/CJM/IO-HTML-1.001.tar.gz + IO-HTML-1.004 + pathname: C/CJ/CJM/IO-HTML-1.004.tar.gz provides: - IO::HTML 1.001 + IO::HTML 1.004 requirements: Carp 0 Encode 2.10 Exporter 5.57 - ExtUtils::MakeMaker 6.30 + ExtUtils::MakeMaker 0 + perl 5.008 IO-SessionData-1.03 pathname: P/PH/PHRED/IO-SessionData-1.03.tar.gz provides: @@ -3562,17 +3599,17 @@ DISTRIBUTIONS IO::SessionSet undef requirements: ExtUtils::MakeMaker 0 - IO-Socket-SSL-2.068 - pathname: S/SU/SULLR/IO-Socket-SSL-2.068.tar.gz + IO-Socket-SSL-2.069 + pathname: S/SU/SULLR/IO-Socket-SSL-2.069.tar.gz provides: - IO::Socket::SSL 2.068 + IO::Socket::SSL 2.069 IO::Socket::SSL::Intercept 2.056 - IO::Socket::SSL::OCSP_Cache 2.068 - IO::Socket::SSL::OCSP_Resolver 2.068 + IO::Socket::SSL::OCSP_Cache 2.069 + IO::Socket::SSL::OCSP_Resolver 2.069 IO::Socket::SSL::PublicSuffix undef - IO::Socket::SSL::SSL_Context 2.068 - IO::Socket::SSL::SSL_HANDLE 2.068 - IO::Socket::SSL::Session_Cache 2.068 + IO::Socket::SSL::SSL_Context 2.069 + IO::Socket::SSL::SSL_HANDLE 2.069 + IO::Socket::SSL::Session_Cache 2.069 IO::Socket::SSL::Utils 2.014 requirements: ExtUtils::MakeMaker 0 @@ -3625,10 +3662,10 @@ DISTRIBUTIONS re 0 strict 0 warnings 0 - Importer-0.025 - pathname: E/EX/EXODIST/Importer-0.025.tar.gz + Importer-0.026 + pathname: E/EX/EXODIST/Importer-0.026.tar.gz provides: - Importer 0.025 + Importer 0.026 requirements: ExtUtils::MakeMaker 0 perl 5.008001 @@ -3651,10 +3688,10 @@ DISTRIBUTIONS perl 5.008 strict 0 warnings 0 - JSON-MaybeXS-1.004001 - pathname: E/ET/ETHER/JSON-MaybeXS-1.004001.tar.gz + JSON-MaybeXS-1.004003 + pathname: E/ET/ETHER/JSON-MaybeXS-1.004003.tar.gz provides: - JSON::MaybeXS 1.004001 + JSON::MaybeXS 1.004003 requirements: Carp 0 Cpanel::JSON::XS 2.3310 @@ -3694,25 +3731,31 @@ DISTRIBUTIONS Router::Simple 0 Test::More 0 parent 0 - JSON-Validator-3.25 - pathname: J/JH/JHTHORSEN/JSON-Validator-3.25.tar.gz + JSON-Validator-4.10 + pathname: J/JH/JHTHORSEN/JSON-Validator-4.10.tar.gz provides: - JSON::Validator 3.25 + JSON::Validator 4.10 JSON::Validator::Error undef JSON::Validator::Formats undef JSON::Validator::Joi undef JSON::Validator::Ref undef + JSON::Validator::Schema undef + JSON::Validator::Schema::Draft201909 undef + JSON::Validator::Schema::Draft4 undef + JSON::Validator::Schema::Draft6 undef + JSON::Validator::Schema::Draft7 undef + JSON::Validator::Store undef JSON::Validator::Util undef requirements: ExtUtils::MakeMaker 0 List::Util 1.45 Mojolicious 7.28 - YAML::XS 0.80 + YAML::PP 0.020 perl 5.010001 - JSON-XS-4.02 - pathname: M/ML/MLEHMANN/JSON-XS-4.02.tar.gz + JSON-XS-4.03 + pathname: M/ML/MLEHMANN/JSON-XS-4.03.tar.gz provides: - JSON::XS 4.02 + JSON::XS 4.03 requirements: Canary::Stability 0 ExtUtils::MakeMaker 6.52 @@ -3730,18 +3773,21 @@ DISTRIBUTIONS Scalar::Util 0 perl 5.006002 strict 0 - LWP-Protocol-https-6.07 - pathname: O/OA/OALDERS/LWP-Protocol-https-6.07.tar.gz + LWP-Protocol-https-6.10 + pathname: O/OA/OALDERS/LWP-Protocol-https-6.10.tar.gz provides: - LWP::Protocol::https 6.07 - LWP::Protocol::https::Socket 6.07 + LWP::Protocol::https 6.10 + LWP::Protocol::https::Socket 6.10 requirements: ExtUtils::MakeMaker 0 IO::Socket::SSL 1.54 + LWP::Protocol::http 0 LWP::UserAgent 6.06 - Mozilla::CA 20110101 + Mozilla::CA 20180117 Net::HTTPS 6 + base 0 perl 5.008001 + strict 0 LWP-UserAgent-Determined-1.07 pathname: A/AL/ALEXMV/LWP-UserAgent-Determined-1.07.tar.gz provides: @@ -3765,10 +3811,10 @@ DISTRIBUTIONS Graphics::Primitive 0.43 Moose 0.79 Test::More 0 - Lingua-EN-Inflect-1.904 - pathname: D/DC/DCONWAY/Lingua-EN-Inflect-1.904.tar.gz + Lingua-EN-Inflect-1.905 + pathname: D/DC/DCONWAY/Lingua-EN-Inflect-1.905.tar.gz provides: - Lingua::EN::Inflect 1.904 + Lingua::EN::Inflect 1.905 requirements: ExtUtils::MakeMaker 0 Test::More 0 @@ -3795,19 +3841,19 @@ DISTRIBUTIONS XSLoader 0 strict 0 warnings 0 - List-MoreUtils-0.428 - pathname: R/RE/REHSACK/List-MoreUtils-0.428.tar.gz + List-MoreUtils-0.430 + pathname: R/RE/REHSACK/List-MoreUtils-0.430.tar.gz provides: - List::MoreUtils 0.428 - List::MoreUtils::PP 0.428 + List::MoreUtils 0.430 + List::MoreUtils::PP 0.430 requirements: Exporter::Tiny 0.038 ExtUtils::MakeMaker 0 - List::MoreUtils::XS 0.426 - List-MoreUtils-XS-0.428 - pathname: R/RE/REHSACK/List-MoreUtils-XS-0.428.tar.gz + List::MoreUtils::XS 0.430 + List-MoreUtils-XS-0.430 + pathname: R/RE/REHSACK/List-MoreUtils-XS-0.430.tar.gz provides: - List::MoreUtils::XS 0.428 + List::MoreUtils::XS 0.430 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -3855,27 +3901,27 @@ DISTRIBUTIONS constant 0 strict 0 warnings 0 - Log-Dispatch-2.69 - pathname: D/DR/DROLSKY/Log-Dispatch-2.69.tar.gz - provides: - Log::Dispatch 2.69 - Log::Dispatch::ApacheLog 2.69 - Log::Dispatch::Base 2.69 - Log::Dispatch::Code 2.69 - Log::Dispatch::Email 2.69 - Log::Dispatch::Email::MIMELite 2.69 - Log::Dispatch::Email::MailSend 2.69 - Log::Dispatch::Email::MailSender 2.69 - Log::Dispatch::Email::MailSendmail 2.69 - Log::Dispatch::File 2.69 - Log::Dispatch::File::Locked 2.69 - Log::Dispatch::Handle 2.69 - Log::Dispatch::Null 2.69 - Log::Dispatch::Output 2.69 - Log::Dispatch::Screen 2.69 - Log::Dispatch::Syslog 2.69 - Log::Dispatch::Types 2.69 - Log::Dispatch::Vars 2.69 + Log-Dispatch-2.70 + pathname: D/DR/DROLSKY/Log-Dispatch-2.70.tar.gz + provides: + Log::Dispatch 2.70 + Log::Dispatch::ApacheLog 2.70 + Log::Dispatch::Base 2.70 + Log::Dispatch::Code 2.70 + Log::Dispatch::Email 2.70 + Log::Dispatch::Email::MIMELite 2.70 + Log::Dispatch::Email::MailSend 2.70 + Log::Dispatch::Email::MailSender 2.70 + Log::Dispatch::Email::MailSendmail 2.70 + Log::Dispatch::File 2.70 + Log::Dispatch::File::Locked 2.70 + Log::Dispatch::Handle 2.70 + Log::Dispatch::Null 2.70 + Log::Dispatch::Output 2.70 + Log::Dispatch::Screen 2.70 + Log::Dispatch::Syslog 2.70 + Log::Dispatch::Types 2.70 + Log::Dispatch::Vars 2.70 requirements: Carp 0 Devel::GlobalDestruction 0 @@ -3902,11 +3948,11 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Log-Log4perl-1.49 - pathname: M/MS/MSCHILLI/Log-Log4perl-1.49.tar.gz + Log-Log4perl-1.53 + pathname: E/ET/ETJ/Log-Log4perl-1.53.tar.gz provides: L4pResurrectable 0.01 - Log::Log4perl 1.49 + Log::Log4perl 1.53 Log::Log4perl::Appender undef Log::Log4perl::Appender::Buffer undef Log::Log4perl::Appender::DBI undef @@ -3958,9 +4004,10 @@ DISTRIBUTIONS Log::Log4perl::Util::TimeTracker undef requirements: ExtUtils::MakeMaker 0 - File::Path 2.0606 + File::Path 2.07 File::Spec 0.82 Test::More 0.45 + perl 5.006 Log-Log4perl-Appender-Raven-0.006 pathname: J/JE/JETEVE/Log-Log4perl-Appender-Raven-0.006.tar.gz provides: @@ -3987,12 +4034,12 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.42 Test::More 0 perl 5.005 - MIME-Types-2.17 - pathname: M/MA/MARKOV/MIME-Types-2.17.tar.gz + MIME-Types-2.18 + pathname: M/MA/MARKOV/MIME-Types-2.18.tar.gz provides: - MIME::Type 2.17 - MIME::Types 2.17 - MojoX::MIME::Types 2.17 + MIME::Type 2.18 + MIME::Types 2.18 + MojoX::MIME::Types 2.18 requirements: ExtUtils::MakeMaker 0 File::Basename 0 @@ -4086,17 +4133,6 @@ DISTRIBUTIONS Net::Domain 1.05 Net::SMTP 1.03 Test::More 0 - Math-BigInt-1.999818 - pathname: P/PJ/PJACKLAM/Math-BigInt-1.999818.tar.gz - provides: - Math::BigFloat 1.999818 - Math::BigInt 1.999818 - Math::BigInt::Calc 1.999818 - Math::BigInt::Lib 1.999818 - requirements: - ExtUtils::MakeMaker 6.58 - Math::Complex 1.39 - perl 5.006001 Math-BigInt-GMP-1.6007 pathname: P/PJ/PJACKLAM/Math-BigInt-GMP-1.6007.tar.gz provides: @@ -4130,10 +4166,10 @@ DISTRIBUTIONS base 0 constant 0 perl 5.006002 - Math-Prime-Util-GMP-0.51 - pathname: D/DA/DANAJ/Math-Prime-Util-GMP-0.51.tar.gz + Math-Prime-Util-GMP-0.52 + pathname: D/DA/DANAJ/Math-Prime-Util-GMP-0.52.tar.gz provides: - Math::Prime::Util::GMP 0.51 + Math::Prime::Util::GMP 0.52 requirements: Carp 0 Exporter 5.57 @@ -4339,10 +4375,10 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Mojo-JWT-0.08 - pathname: J/JB/JBERGER/Mojo-JWT-0.08.tar.gz + Mojo-JWT-0.09 + pathname: J/JB/JBERGER/Mojo-JWT-0.09.tar.gz provides: - Mojo::JWT 0.08 + Mojo::JWT 0.09 requirements: Digest::SHA 0 MIME::Base64 3.11 @@ -4359,8 +4395,8 @@ DISTRIBUTIONS Mojolicious 2 Test::More 0.94 perl 5.010001 - Mojolicious-8.42 - pathname: S/SR/SRI/Mojolicious-8.42.tar.gz + Mojolicious-8.71 + pathname: S/SR/SRI/Mojolicious-8.71.tar.gz provides: Mojo undef Mojo::Asset undef @@ -4429,11 +4465,12 @@ DISTRIBUTIONS Mojo::UserAgent::Transactor undef Mojo::Util undef Mojo::WebSocket undef - Mojolicious 8.42 + Mojolicious 8.71 Mojolicious::Command undef Mojolicious::Command::Author::cpanify undef Mojolicious::Command::Author::generate undef Mojolicious::Command::Author::generate::app undef + Mojolicious::Command::Author::generate::dockerfile undef Mojolicious::Command::Author::generate::lite_app undef Mojolicious::Command::Author::generate::makefile undef Mojolicious::Command::Author::generate::plugin undef @@ -4457,6 +4494,7 @@ DISTRIBUTIONS Mojolicious::Plugin::HeaderCondition undef Mojolicious::Plugin::JSONConfig undef Mojolicious::Plugin::Mount undef + Mojolicious::Plugin::NotYAMLConfig undef Mojolicious::Plugin::TagHelpers undef Mojolicious::Plugins undef Mojolicious::Renderer undef @@ -4474,10 +4512,8 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 IO::Socket::IP 0.37 - JSON::PP 2.27103 - List::Util 1.41 - Time::Local 1.2 - perl 5.010001 + Sub::Util 1.41 + perl 5.016 Mojolicious-Plugin-ForwardedFor-0.001 pathname: D/DB/DBOOK/Mojolicious-Plugin-ForwardedFor-0.001.tar.gz provides: @@ -4486,10 +4522,18 @@ DISTRIBUTIONS Module::Build::Tiny 0.034 Mojolicious 7.0 perl 5.010001 - Mojolicious-Plugin-OAuth2-Server-0.44 - pathname: L/LE/LEEJO/Mojolicious-Plugin-OAuth2-Server-0.44.tar.gz + Mojolicious-Plugin-OAuth2-1.58 + pathname: J/JH/JHTHORSEN/Mojolicious-Plugin-OAuth2-1.58.tar.gz + provides: + Mojolicious::Plugin::OAuth2 1.58 + requirements: + ExtUtils::MakeMaker 0 + IO::Socket::SSL 1.94 + Mojolicious 7.53 + Mojolicious-Plugin-OAuth2-Server-0.47 + pathname: L/LE/LEEJO/Mojolicious-Plugin-OAuth2-Server-0.47.tar.gz provides: - Mojolicious::Plugin::OAuth2::Server 0.44 + Mojolicious::Plugin::OAuth2::Server 0.47 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -4497,26 +4541,26 @@ DISTRIBUTIONS FindBin 0 Mojo::JWT 0.08 Mojolicious 7.76 - Net::OAuth2::AuthorizationServer 0.21 + Net::OAuth2::AuthorizationServer 0.26 Test::Deep 0.113 Test::Exception 0.32 Test::Mojo 0 Test::More 0 perl 5.010001 - Moo-2.004000 - pathname: H/HA/HAARG/Moo-2.004000.tar.gz + Moo-2.004004 + pathname: H/HA/HAARG/Moo-2.004004.tar.gz provides: Method::Generate::Accessor undef Method::Generate::BuildAll undef Method::Generate::Constructor undef Method::Generate::DemolishAll undef - Moo 2.004000 + Moo 2.004004 Moo::HandleMoose undef Moo::HandleMoose::FakeConstructor undef Moo::HandleMoose::FakeMetaClass undef Moo::HandleMoose::_TypeMap undef Moo::Object undef - Moo::Role 2.004000 + Moo::Role 2.004004 Moo::_Utils undef Moo::_mro undef Moo::_strictures undef @@ -4526,7 +4570,6 @@ DISTRIBUTIONS Class::Method::Modifiers 1.10 Exporter 5.57 ExtUtils::MakeMaker 0 - Module::Runtime 0.014 Role::Tiny 2.001004 Scalar::Util 1.00 Sub::Defer 2.006006 @@ -4555,356 +4598,446 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 Module::Runtime 0.014 - Moose-2.2012 - pathname: E/ET/ETHER/Moose-2.2012.tar.gz - provides: - Class::MOP 2.2012 - Class::MOP::Attribute 2.2012 - Class::MOP::Class 2.2012 - Class::MOP::Instance 2.2012 - Class::MOP::Method 2.2012 - Class::MOP::Method::Accessor 2.2012 - Class::MOP::Method::Constructor 2.2012 - Class::MOP::Method::Generated 2.2012 - Class::MOP::Method::Inlined 2.2012 - Class::MOP::Method::Meta 2.2012 - Class::MOP::Method::Wrapped 2.2012 - Class::MOP::Module 2.2012 - Class::MOP::Object 2.2012 - Class::MOP::Overload 2.2012 - Class::MOP::Package 2.2012 - Moose 2.2012 - Moose::Cookbook 2.2012 - Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing 2.2012 - Moose::Cookbook::Basics::BinaryTree_AttributeFeatures 2.2012 - Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild 2.2012 - Moose::Cookbook::Basics::Company_Subtypes 2.2012 - Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent 2.2012 - Moose::Cookbook::Basics::Document_AugmentAndInner 2.2012 - Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion 2.2012 - Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion 2.2012 - Moose::Cookbook::Basics::Immutable 2.2012 - Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD 2.2012 - Moose::Cookbook::Basics::Point_AttributesAndSubclassing 2.2012 - Moose::Cookbook::Extending::Debugging_BaseClassRole 2.2012 - Moose::Cookbook::Extending::ExtensionOverview 2.2012 - Moose::Cookbook::Extending::Mooseish_MooseSugar 2.2012 - Moose::Cookbook::Legacy::Debugging_BaseClassReplacement 2.2012 - Moose::Cookbook::Legacy::Labeled_AttributeMetaclass 2.2012 - Moose::Cookbook::Legacy::Table_ClassMetaclass 2.2012 - Moose::Cookbook::Meta::GlobRef_InstanceMetaclass 2.2012 - Moose::Cookbook::Meta::Labeled_AttributeTrait 2.2012 - Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass 2.2012 - Moose::Cookbook::Meta::Table_MetaclassTrait 2.2012 - Moose::Cookbook::Meta::WhyMeta 2.2012 - Moose::Cookbook::Roles::ApplicationToInstance 2.2012 - Moose::Cookbook::Roles::Comparable_CodeReuse 2.2012 - Moose::Cookbook::Roles::Restartable_AdvancedComposition 2.2012 - Moose::Cookbook::Snack::Keywords 2.2012 - Moose::Cookbook::Snack::Types 2.2012 - Moose::Cookbook::Style 2.2012 - Moose::Exception 2.2012 - Moose::Exception::AccessorMustReadWrite 2.2012 - Moose::Exception::AddParameterizableTypeTakesParameterizableType 2.2012 - Moose::Exception::AddRoleTakesAMooseMetaRoleInstance 2.2012 - Moose::Exception::AddRoleToARoleTakesAMooseMetaRole 2.2012 - Moose::Exception::ApplyTakesABlessedInstance 2.2012 - Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass 2.2012 - Moose::Exception::AttributeConflictInRoles 2.2012 - Moose::Exception::AttributeConflictInSummation 2.2012 - Moose::Exception::AttributeExtensionIsNotSupportedInRoles 2.2012 - Moose::Exception::AttributeIsRequired 2.2012 - Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass 2.2012 - Moose::Exception::AttributeNamesDoNotMatch 2.2012 - Moose::Exception::AttributeValueIsNotAnObject 2.2012 - Moose::Exception::AttributeValueIsNotDefined 2.2012 - Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef 2.2012 - Moose::Exception::BadOptionFormat 2.2012 - Moose::Exception::BothBuilderAndDefaultAreNotAllowed 2.2012 - Moose::Exception::BuilderDoesNotExist 2.2012 - Moose::Exception::BuilderMethodNotSupportedForAttribute 2.2012 - Moose::Exception::BuilderMethodNotSupportedForInlineAttribute 2.2012 - Moose::Exception::BuilderMustBeAMethodName 2.2012 - Moose::Exception::CallingMethodOnAnImmutableInstance 2.2012 - Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance 2.2012 - Moose::Exception::CanExtendOnlyClasses 2.2012 - Moose::Exception::CanOnlyConsumeRole 2.2012 - Moose::Exception::CanOnlyWrapBlessedCode 2.2012 - Moose::Exception::CanReblessOnlyIntoASubclass 2.2012 - Moose::Exception::CanReblessOnlyIntoASuperclass 2.2012 - Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion 2.2012 - Moose::Exception::CannotAddAsAnAttributeToARole 2.2012 - Moose::Exception::CannotApplyBaseClassRolesToRole 2.2012 - Moose::Exception::CannotAssignValueToReadOnlyAccessor 2.2012 - Moose::Exception::CannotAugmentIfLocalMethodPresent 2.2012 - Moose::Exception::CannotAugmentNoSuperMethod 2.2012 - Moose::Exception::CannotAutoDerefWithoutIsa 2.2012 - Moose::Exception::CannotAutoDereferenceTypeConstraint 2.2012 - Moose::Exception::CannotCalculateNativeType 2.2012 - Moose::Exception::CannotCallAnAbstractBaseMethod 2.2012 - Moose::Exception::CannotCallAnAbstractMethod 2.2012 - Moose::Exception::CannotCoerceAWeakRef 2.2012 - Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion 2.2012 - Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter 2.2012 - Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent 2.2012 - Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass 2.2012 - Moose::Exception::CannotDelegateLocalMethodIsPresent 2.2012 - Moose::Exception::CannotDelegateWithoutIsa 2.2012 - Moose::Exception::CannotFindDelegateMetaclass 2.2012 - Moose::Exception::CannotFindType 2.2012 - Moose::Exception::CannotFindTypeGivenToMatchOnType 2.2012 - Moose::Exception::CannotFixMetaclassCompatibility 2.2012 - Moose::Exception::CannotGenerateInlineConstraint 2.2012 - Moose::Exception::CannotInitializeMooseMetaRoleComposite 2.2012 - Moose::Exception::CannotInlineTypeConstraintCheck 2.2012 - Moose::Exception::CannotLocatePackageInINC 2.2012 - Moose::Exception::CannotMakeMetaclassCompatible 2.2012 - Moose::Exception::CannotOverrideALocalMethod 2.2012 - Moose::Exception::CannotOverrideBodyOfMetaMethods 2.2012 - Moose::Exception::CannotOverrideLocalMethodIsPresent 2.2012 - Moose::Exception::CannotOverrideNoSuperMethod 2.2012 - Moose::Exception::CannotRegisterUnnamedTypeConstraint 2.2012 - Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously 2.2012 - Moose::Exception::CircularReferenceInAlso 2.2012 - Moose::Exception::ClassDoesNotHaveInitMeta 2.2012 - Moose::Exception::ClassDoesTheExcludedRole 2.2012 - Moose::Exception::ClassNamesDoNotMatch 2.2012 - Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass 2.2012 - Moose::Exception::CodeBlockMustBeACodeRef 2.2012 - Moose::Exception::CoercingWithoutCoercions 2.2012 - Moose::Exception::CoercionAlreadyExists 2.2012 - Moose::Exception::CoercionNeedsTypeConstraint 2.2012 - Moose::Exception::ConflictDetectedInCheckRoleExclusions 2.2012 - Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass 2.2012 - Moose::Exception::ConstructClassInstanceTakesPackageName 2.2012 - Moose::Exception::CouldNotCreateMethod 2.2012 - Moose::Exception::CouldNotCreateWriter 2.2012 - Moose::Exception::CouldNotEvalConstructor 2.2012 - Moose::Exception::CouldNotEvalDestructor 2.2012 - Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom 2.2012 - Moose::Exception::CouldNotGenerateInlineAttributeMethod 2.2012 - Moose::Exception::CouldNotLocateTypeConstraintForUnion 2.2012 - Moose::Exception::CouldNotParseType 2.2012 - Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes 2.2012 - Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses 2.2012 - Moose::Exception::CreateMOPClassTakesHashRefOfMethods 2.2012 - Moose::Exception::CreateTakesArrayRefOfRoles 2.2012 - Moose::Exception::CreateTakesHashRefOfAttributes 2.2012 - Moose::Exception::CreateTakesHashRefOfMethods 2.2012 - Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef 2.2012 - Moose::Exception::DelegationToAClassWhichIsNotLoaded 2.2012 - Moose::Exception::DelegationToARoleWhichIsNotLoaded 2.2012 - Moose::Exception::DelegationToATypeWhichIsNotAClass 2.2012 - Moose::Exception::DoesRequiresRoleName 2.2012 - Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs 2.2012 - Moose::Exception::EnumValuesMustBeString 2.2012 - Moose::Exception::ExtendsMissingArgs 2.2012 - Moose::Exception::HandlesMustBeAHashRef 2.2012 - Moose::Exception::IllegalInheritedOptions 2.2012 - Moose::Exception::IllegalMethodTypeToAddMethodModifier 2.2012 - Moose::Exception::IncompatibleMetaclassOfSuperclass 2.2012 - Moose::Exception::InitMetaRequiresClass 2.2012 - Moose::Exception::InitializeTakesUnBlessedPackageName 2.2012 - Moose::Exception::InstanceBlessedIntoWrongClass 2.2012 - Moose::Exception::InstanceMustBeABlessedReference 2.2012 - Moose::Exception::InvalidArgPassedToMooseUtilMetaRole 2.2012 - Moose::Exception::InvalidArgumentToMethod 2.2012 - Moose::Exception::InvalidArgumentsToTraitAliases 2.2012 - Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint 2.2012 - Moose::Exception::InvalidHandleValue 2.2012 - Moose::Exception::InvalidHasProvidedInARole 2.2012 - Moose::Exception::InvalidNameForType 2.2012 - Moose::Exception::InvalidOverloadOperator 2.2012 - Moose::Exception::InvalidRoleApplication 2.2012 - Moose::Exception::InvalidTypeConstraint 2.2012 - Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint 2.2012 - Moose::Exception::InvalidValueForIs 2.2012 - Moose::Exception::IsaDoesNotDoTheRole 2.2012 - Moose::Exception::IsaLacksDoesMethod 2.2012 - Moose::Exception::LazyAttributeNeedsADefault 2.2012 - Moose::Exception::Legacy 2.2012 - Moose::Exception::MOPAttributeNewNeedsAttributeName 2.2012 - Moose::Exception::MatchActionMustBeACodeRef 2.2012 - Moose::Exception::MessageParameterMustBeCodeRef 2.2012 - Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass 2.2012 - Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass 2.2012 - Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass 2.2012 - Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass 2.2012 - Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole 2.2012 - Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass 2.2012 - Moose::Exception::MetaclassNotLoaded 2.2012 - Moose::Exception::MetaclassTypeIncompatible 2.2012 - Moose::Exception::MethodExpectedAMetaclassObject 2.2012 - Moose::Exception::MethodExpectsFewerArgs 2.2012 - Moose::Exception::MethodExpectsMoreArgs 2.2012 - Moose::Exception::MethodModifierNeedsMethodName 2.2012 - Moose::Exception::MethodNameConflictInRoles 2.2012 - Moose::Exception::MethodNameNotFoundInInheritanceHierarchy 2.2012 - Moose::Exception::MethodNameNotGiven 2.2012 - Moose::Exception::MustDefineAMethodName 2.2012 - Moose::Exception::MustDefineAnAttributeName 2.2012 - Moose::Exception::MustDefineAnOverloadOperator 2.2012 - Moose::Exception::MustHaveAtLeastOneValueToEnumerate 2.2012 - Moose::Exception::MustPassAHashOfOptions 2.2012 - Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass 2.2012 - Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance 2.2012 - Moose::Exception::MustPassEvenNumberOfArguments 2.2012 - Moose::Exception::MustPassEvenNumberOfAttributeOptions 2.2012 - Moose::Exception::MustProvideANameForTheAttribute 2.2012 - Moose::Exception::MustSpecifyAtleastOneMethod 2.2012 - Moose::Exception::MustSpecifyAtleastOneRole 2.2012 - Moose::Exception::MustSpecifyAtleastOneRoleToApplicant 2.2012 - Moose::Exception::MustSupplyAClassMOPAttributeInstance 2.2012 - Moose::Exception::MustSupplyADelegateToMethod 2.2012 - Moose::Exception::MustSupplyAMetaclass 2.2012 - Moose::Exception::MustSupplyAMooseMetaAttributeInstance 2.2012 - Moose::Exception::MustSupplyAnAccessorTypeToConstructWith 2.2012 - Moose::Exception::MustSupplyAnAttributeToConstructWith 2.2012 - Moose::Exception::MustSupplyArrayRefAsCurriedArguments 2.2012 - Moose::Exception::MustSupplyPackageNameAndName 2.2012 - Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion 2.2012 - Moose::Exception::NeitherAttributeNorAttributeNameIsGiven 2.2012 - Moose::Exception::NeitherClassNorClassNameIsGiven 2.2012 - Moose::Exception::NeitherRoleNorRoleNameIsGiven 2.2012 - Moose::Exception::NeitherTypeNorTypeNameIsGiven 2.2012 - Moose::Exception::NoAttributeFoundInSuperClass 2.2012 - Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass 2.2012 - Moose::Exception::NoCasesMatched 2.2012 - Moose::Exception::NoConstraintCheckForTypeConstraint 2.2012 - Moose::Exception::NoDestructorClassSpecified 2.2012 - Moose::Exception::NoImmutableTraitSpecifiedForClass 2.2012 - Moose::Exception::NoParentGivenToSubtype 2.2012 - Moose::Exception::OnlyInstancesCanBeCloned 2.2012 - Moose::Exception::OperatorIsRequired 2.2012 - Moose::Exception::OverloadConflictInSummation 2.2012 - Moose::Exception::OverloadRequiresAMetaClass 2.2012 - Moose::Exception::OverloadRequiresAMetaMethod 2.2012 - Moose::Exception::OverloadRequiresAMetaOverload 2.2012 - Moose::Exception::OverloadRequiresAMethodNameOrCoderef 2.2012 - Moose::Exception::OverloadRequiresAnOperator 2.2012 - Moose::Exception::OverloadRequiresNamesForCoderef 2.2012 - Moose::Exception::OverrideConflictInComposition 2.2012 - Moose::Exception::OverrideConflictInSummation 2.2012 - Moose::Exception::PackageDoesNotUseMooseExporter 2.2012 - Moose::Exception::PackageNameAndNameParamsNotGivenToWrap 2.2012 - Moose::Exception::PackagesAndModulesAreNotCachable 2.2012 - Moose::Exception::ParameterIsNotSubtypeOfParent 2.2012 - Moose::Exception::ReferencesAreNotAllowedAsDefault 2.2012 - Moose::Exception::RequiredAttributeLacksInitialization 2.2012 - Moose::Exception::RequiredAttributeNeedsADefault 2.2012 - Moose::Exception::RequiredMethodsImportedByClass 2.2012 - Moose::Exception::RequiredMethodsNotImplementedByClass 2.2012 - Moose::Exception::Role::Attribute 2.2012 - Moose::Exception::Role::AttributeName 2.2012 - Moose::Exception::Role::Class 2.2012 - Moose::Exception::Role::EitherAttributeOrAttributeName 2.2012 - Moose::Exception::Role::Instance 2.2012 - Moose::Exception::Role::InstanceClass 2.2012 - Moose::Exception::Role::InvalidAttributeOptions 2.2012 - Moose::Exception::Role::Method 2.2012 - Moose::Exception::Role::ParamsHash 2.2012 - Moose::Exception::Role::Role 2.2012 - Moose::Exception::Role::RoleForCreate 2.2012 - Moose::Exception::Role::RoleForCreateMOPClass 2.2012 - Moose::Exception::Role::TypeConstraint 2.2012 - Moose::Exception::RoleDoesTheExcludedRole 2.2012 - Moose::Exception::RoleExclusionConflict 2.2012 - Moose::Exception::RoleNameRequired 2.2012 - Moose::Exception::RoleNameRequiredForMooseMetaRole 2.2012 - Moose::Exception::RolesDoNotSupportAugment 2.2012 - Moose::Exception::RolesDoNotSupportExtends 2.2012 - Moose::Exception::RolesDoNotSupportInner 2.2012 - Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers 2.2012 - Moose::Exception::RolesInCreateTakesAnArrayRef 2.2012 - Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole 2.2012 - Moose::Exception::SingleParamsToNewMustBeHashRef 2.2012 - Moose::Exception::TriggerMustBeACodeRef 2.2012 - Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType 2.2012 - Moose::Exception::TypeConstraintIsAlreadyCreated 2.2012 - Moose::Exception::TypeParameterMustBeMooseMetaType 2.2012 - Moose::Exception::UnableToCanonicalizeHandles 2.2012 - Moose::Exception::UnableToCanonicalizeNonRolePackage 2.2012 - Moose::Exception::UnableToRecognizeDelegateMetaclass 2.2012 - Moose::Exception::UndefinedHashKeysPassedToMethod 2.2012 - Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs 2.2012 - Moose::Exception::UnionTakesAtleastTwoTypeNames 2.2012 - Moose::Exception::ValidationFailedForInlineTypeConstraint 2.2012 - Moose::Exception::ValidationFailedForTypeConstraint 2.2012 - Moose::Exception::WrapTakesACodeRefToBless 2.2012 - Moose::Exception::WrongTypeConstraintGiven 2.2012 - Moose::Exporter 2.2012 - Moose::Intro 2.2012 - Moose::Manual 2.2012 - Moose::Manual::Attributes 2.2012 - Moose::Manual::BestPractices 2.2012 - Moose::Manual::Classes 2.2012 - Moose::Manual::Concepts 2.2012 - Moose::Manual::Construction 2.2012 - Moose::Manual::Contributing 2.2012 - Moose::Manual::Delegation 2.2012 - Moose::Manual::Delta 2.2012 - Moose::Manual::Exceptions 2.2012 - Moose::Manual::Exceptions::Manifest 2.2012 - Moose::Manual::FAQ 2.2012 - Moose::Manual::MOP 2.2012 - Moose::Manual::MethodModifiers 2.2012 - Moose::Manual::MooseX 2.2012 - Moose::Manual::Resources 2.2012 - Moose::Manual::Roles 2.2012 - Moose::Manual::Support 2.2012 - Moose::Manual::Types 2.2012 - Moose::Manual::Unsweetened 2.2012 - Moose::Meta::Attribute 2.2012 - Moose::Meta::Attribute::Native 2.2012 - Moose::Meta::Attribute::Native::Trait::Array 2.2012 - Moose::Meta::Attribute::Native::Trait::Bool 2.2012 - Moose::Meta::Attribute::Native::Trait::Code 2.2012 - Moose::Meta::Attribute::Native::Trait::Counter 2.2012 - Moose::Meta::Attribute::Native::Trait::Hash 2.2012 - Moose::Meta::Attribute::Native::Trait::Number 2.2012 - Moose::Meta::Attribute::Native::Trait::String 2.2012 - Moose::Meta::Class 2.2012 - Moose::Meta::Instance 2.2012 - Moose::Meta::Method 2.2012 - Moose::Meta::Method::Accessor 2.2012 - Moose::Meta::Method::Augmented 2.2012 - Moose::Meta::Method::Constructor 2.2012 - Moose::Meta::Method::Delegation 2.2012 - Moose::Meta::Method::Destructor 2.2012 - Moose::Meta::Method::Meta 2.2012 - Moose::Meta::Method::Overridden 2.2012 - Moose::Meta::Role 2.2012 - Moose::Meta::Role::Application 2.2012 - Moose::Meta::Role::Application::RoleSummation 2.2012 - Moose::Meta::Role::Application::ToClass 2.2012 - Moose::Meta::Role::Application::ToInstance 2.2012 - Moose::Meta::Role::Application::ToRole 2.2012 - Moose::Meta::Role::Attribute 2.2012 - Moose::Meta::Role::Composite 2.2012 - Moose::Meta::Role::Method 2.2012 - Moose::Meta::Role::Method::Conflicting 2.2012 - Moose::Meta::Role::Method::Required 2.2012 - Moose::Meta::TypeCoercion 2.2012 - Moose::Meta::TypeCoercion::Union 2.2012 - Moose::Meta::TypeConstraint 2.2012 - Moose::Meta::TypeConstraint::Class 2.2012 - Moose::Meta::TypeConstraint::DuckType 2.2012 - Moose::Meta::TypeConstraint::Enum 2.2012 - Moose::Meta::TypeConstraint::Parameterizable 2.2012 - Moose::Meta::TypeConstraint::Parameterized 2.2012 - Moose::Meta::TypeConstraint::Registry 2.2012 - Moose::Meta::TypeConstraint::Role 2.2012 - Moose::Meta::TypeConstraint::Union 2.2012 - Moose::Object 2.2012 - Moose::Role 2.2012 - Moose::Spec::Role 2.2012 - Moose::Unsweetened 2.2012 - Moose::Util 2.2012 - Moose::Util::MetaRole 2.2012 - Moose::Util::TypeConstraints 2.2012 - Test::Moose 2.2012 - metaclass 2.2012 - oose 2.2012 + Moose-2.2014 + pathname: E/ET/ETHER/Moose-2.2014.tar.gz + provides: + Class::MOP 2.2014 + Class::MOP::Attribute 2.2014 + Class::MOP::Class 2.2014 + Class::MOP::Class::Immutable::Trait 2.2014 + Class::MOP::Deprecated 2.2014 + Class::MOP::Instance 2.2014 + Class::MOP::Method 2.2014 + Class::MOP::Method::Accessor 2.2014 + Class::MOP::Method::Constructor 2.2014 + Class::MOP::Method::Generated 2.2014 + Class::MOP::Method::Inlined 2.2014 + Class::MOP::Method::Meta 2.2014 + Class::MOP::Method::Wrapped 2.2014 + Class::MOP::MiniTrait 2.2014 + Class::MOP::Mixin 2.2014 + Class::MOP::Mixin::AttributeCore 2.2014 + Class::MOP::Mixin::HasAttributes 2.2014 + Class::MOP::Mixin::HasMethods 2.2014 + Class::MOP::Mixin::HasOverloads 2.2014 + Class::MOP::Module 2.2014 + Class::MOP::Object 2.2014 + Class::MOP::Overload 2.2014 + Class::MOP::Package 2.2014 + Moose 2.2014 + Moose::Cookbook 2.2014 + Moose::Cookbook::Basics::BankAccount_MethodModifiersAndSubclassing 2.2014 + Moose::Cookbook::Basics::BinaryTree_AttributeFeatures 2.2014 + Moose::Cookbook::Basics::BinaryTree_BuilderAndLazyBuild 2.2014 + Moose::Cookbook::Basics::Company_Subtypes 2.2014 + Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent 2.2014 + Moose::Cookbook::Basics::Document_AugmentAndInner 2.2014 + Moose::Cookbook::Basics::Genome_OverloadingSubtypesAndCoercion 2.2014 + Moose::Cookbook::Basics::HTTP_SubtypesAndCoercion 2.2014 + Moose::Cookbook::Basics::Immutable 2.2014 + Moose::Cookbook::Basics::Person_BUILDARGSAndBUILD 2.2014 + Moose::Cookbook::Basics::Point_AttributesAndSubclassing 2.2014 + Moose::Cookbook::Extending::Debugging_BaseClassRole 2.2014 + Moose::Cookbook::Extending::ExtensionOverview 2.2014 + Moose::Cookbook::Extending::Mooseish_MooseSugar 2.2014 + Moose::Cookbook::Legacy::Debugging_BaseClassReplacement 2.2014 + Moose::Cookbook::Legacy::Labeled_AttributeMetaclass 2.2014 + Moose::Cookbook::Legacy::Table_ClassMetaclass 2.2014 + Moose::Cookbook::Meta::GlobRef_InstanceMetaclass 2.2014 + Moose::Cookbook::Meta::Labeled_AttributeTrait 2.2014 + Moose::Cookbook::Meta::PrivateOrPublic_MethodMetaclass 2.2014 + Moose::Cookbook::Meta::Table_MetaclassTrait 2.2014 + Moose::Cookbook::Meta::WhyMeta 2.2014 + Moose::Cookbook::Roles::ApplicationToInstance 2.2014 + Moose::Cookbook::Roles::Comparable_CodeReuse 2.2014 + Moose::Cookbook::Roles::Restartable_AdvancedComposition 2.2014 + Moose::Cookbook::Snack::Keywords 2.2014 + Moose::Cookbook::Snack::Types 2.2014 + Moose::Cookbook::Style 2.2014 + Moose::Deprecated 2.2014 + Moose::Exception 2.2014 + Moose::Exception::AccessorMustReadWrite 2.2014 + Moose::Exception::AddParameterizableTypeTakesParameterizableType 2.2014 + Moose::Exception::AddRoleTakesAMooseMetaRoleInstance 2.2014 + Moose::Exception::AddRoleToARoleTakesAMooseMetaRole 2.2014 + Moose::Exception::ApplyTakesABlessedInstance 2.2014 + Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass 2.2014 + Moose::Exception::AttributeConflictInRoles 2.2014 + Moose::Exception::AttributeConflictInSummation 2.2014 + Moose::Exception::AttributeExtensionIsNotSupportedInRoles 2.2014 + Moose::Exception::AttributeIsRequired 2.2014 + Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass 2.2014 + Moose::Exception::AttributeNamesDoNotMatch 2.2014 + Moose::Exception::AttributeValueIsNotAnObject 2.2014 + Moose::Exception::AttributeValueIsNotDefined 2.2014 + Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef 2.2014 + Moose::Exception::BadOptionFormat 2.2014 + Moose::Exception::BothBuilderAndDefaultAreNotAllowed 2.2014 + Moose::Exception::BuilderDoesNotExist 2.2014 + Moose::Exception::BuilderMethodNotSupportedForAttribute 2.2014 + Moose::Exception::BuilderMethodNotSupportedForInlineAttribute 2.2014 + Moose::Exception::BuilderMustBeAMethodName 2.2014 + Moose::Exception::CallingMethodOnAnImmutableInstance 2.2014 + Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance 2.2014 + Moose::Exception::CanExtendOnlyClasses 2.2014 + Moose::Exception::CanOnlyConsumeRole 2.2014 + Moose::Exception::CanOnlyWrapBlessedCode 2.2014 + Moose::Exception::CanReblessOnlyIntoASubclass 2.2014 + Moose::Exception::CanReblessOnlyIntoASuperclass 2.2014 + Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion 2.2014 + Moose::Exception::CannotAddAsAnAttributeToARole 2.2014 + Moose::Exception::CannotApplyBaseClassRolesToRole 2.2014 + Moose::Exception::CannotAssignValueToReadOnlyAccessor 2.2014 + Moose::Exception::CannotAugmentIfLocalMethodPresent 2.2014 + Moose::Exception::CannotAugmentNoSuperMethod 2.2014 + Moose::Exception::CannotAutoDerefWithoutIsa 2.2014 + Moose::Exception::CannotAutoDereferenceTypeConstraint 2.2014 + Moose::Exception::CannotCalculateNativeType 2.2014 + Moose::Exception::CannotCallAnAbstractBaseMethod 2.2014 + Moose::Exception::CannotCallAnAbstractMethod 2.2014 + Moose::Exception::CannotCoerceAWeakRef 2.2014 + Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion 2.2014 + Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter 2.2014 + Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent 2.2014 + Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass 2.2014 + Moose::Exception::CannotDelegateLocalMethodIsPresent 2.2014 + Moose::Exception::CannotDelegateWithoutIsa 2.2014 + Moose::Exception::CannotFindDelegateMetaclass 2.2014 + Moose::Exception::CannotFindType 2.2014 + Moose::Exception::CannotFindTypeGivenToMatchOnType 2.2014 + Moose::Exception::CannotFixMetaclassCompatibility 2.2014 + Moose::Exception::CannotGenerateInlineConstraint 2.2014 + Moose::Exception::CannotInitializeMooseMetaRoleComposite 2.2014 + Moose::Exception::CannotInlineTypeConstraintCheck 2.2014 + Moose::Exception::CannotLocatePackageInINC 2.2014 + Moose::Exception::CannotMakeMetaclassCompatible 2.2014 + Moose::Exception::CannotOverrideALocalMethod 2.2014 + Moose::Exception::CannotOverrideBodyOfMetaMethods 2.2014 + Moose::Exception::CannotOverrideLocalMethodIsPresent 2.2014 + Moose::Exception::CannotOverrideNoSuperMethod 2.2014 + Moose::Exception::CannotRegisterUnnamedTypeConstraint 2.2014 + Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously 2.2014 + Moose::Exception::CircularReferenceInAlso 2.2014 + Moose::Exception::ClassDoesNotHaveInitMeta 2.2014 + Moose::Exception::ClassDoesTheExcludedRole 2.2014 + Moose::Exception::ClassNamesDoNotMatch 2.2014 + Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass 2.2014 + Moose::Exception::CodeBlockMustBeACodeRef 2.2014 + Moose::Exception::CoercingWithoutCoercions 2.2014 + Moose::Exception::CoercionAlreadyExists 2.2014 + Moose::Exception::CoercionNeedsTypeConstraint 2.2014 + Moose::Exception::ConflictDetectedInCheckRoleExclusions 2.2014 + Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass 2.2014 + Moose::Exception::ConstructClassInstanceTakesPackageName 2.2014 + Moose::Exception::CouldNotCreateMethod 2.2014 + Moose::Exception::CouldNotCreateWriter 2.2014 + Moose::Exception::CouldNotEvalConstructor 2.2014 + Moose::Exception::CouldNotEvalDestructor 2.2014 + Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom 2.2014 + Moose::Exception::CouldNotGenerateInlineAttributeMethod 2.2014 + Moose::Exception::CouldNotLocateTypeConstraintForUnion 2.2014 + Moose::Exception::CouldNotParseType 2.2014 + Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes 2.2014 + Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses 2.2014 + Moose::Exception::CreateMOPClassTakesHashRefOfMethods 2.2014 + Moose::Exception::CreateTakesArrayRefOfRoles 2.2014 + Moose::Exception::CreateTakesHashRefOfAttributes 2.2014 + Moose::Exception::CreateTakesHashRefOfMethods 2.2014 + Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef 2.2014 + Moose::Exception::DelegationToAClassWhichIsNotLoaded 2.2014 + Moose::Exception::DelegationToARoleWhichIsNotLoaded 2.2014 + Moose::Exception::DelegationToATypeWhichIsNotAClass 2.2014 + Moose::Exception::DoesRequiresRoleName 2.2014 + Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs 2.2014 + Moose::Exception::EnumValuesMustBeString 2.2014 + Moose::Exception::ExtendsMissingArgs 2.2014 + Moose::Exception::HandlesMustBeAHashRef 2.2014 + Moose::Exception::IllegalInheritedOptions 2.2014 + Moose::Exception::IllegalMethodTypeToAddMethodModifier 2.2014 + Moose::Exception::IncompatibleMetaclassOfSuperclass 2.2014 + Moose::Exception::InitMetaRequiresClass 2.2014 + Moose::Exception::InitializeTakesUnBlessedPackageName 2.2014 + Moose::Exception::InstanceBlessedIntoWrongClass 2.2014 + Moose::Exception::InstanceMustBeABlessedReference 2.2014 + Moose::Exception::InvalidArgPassedToMooseUtilMetaRole 2.2014 + Moose::Exception::InvalidArgumentToMethod 2.2014 + Moose::Exception::InvalidArgumentsToTraitAliases 2.2014 + Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint 2.2014 + Moose::Exception::InvalidHandleValue 2.2014 + Moose::Exception::InvalidHasProvidedInARole 2.2014 + Moose::Exception::InvalidNameForType 2.2014 + Moose::Exception::InvalidOverloadOperator 2.2014 + Moose::Exception::InvalidRoleApplication 2.2014 + Moose::Exception::InvalidTypeConstraint 2.2014 + Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint 2.2014 + Moose::Exception::InvalidValueForIs 2.2014 + Moose::Exception::IsaDoesNotDoTheRole 2.2014 + Moose::Exception::IsaLacksDoesMethod 2.2014 + Moose::Exception::LazyAttributeNeedsADefault 2.2014 + Moose::Exception::Legacy 2.2014 + Moose::Exception::MOPAttributeNewNeedsAttributeName 2.2014 + Moose::Exception::MatchActionMustBeACodeRef 2.2014 + Moose::Exception::MessageParameterMustBeCodeRef 2.2014 + Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass 2.2014 + Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass 2.2014 + Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass 2.2014 + Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass 2.2014 + Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole 2.2014 + Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass 2.2014 + Moose::Exception::MetaclassNotLoaded 2.2014 + Moose::Exception::MetaclassTypeIncompatible 2.2014 + Moose::Exception::MethodExpectedAMetaclassObject 2.2014 + Moose::Exception::MethodExpectsFewerArgs 2.2014 + Moose::Exception::MethodExpectsMoreArgs 2.2014 + Moose::Exception::MethodModifierNeedsMethodName 2.2014 + Moose::Exception::MethodNameConflictInRoles 2.2014 + Moose::Exception::MethodNameNotFoundInInheritanceHierarchy 2.2014 + Moose::Exception::MethodNameNotGiven 2.2014 + Moose::Exception::MustDefineAMethodName 2.2014 + Moose::Exception::MustDefineAnAttributeName 2.2014 + Moose::Exception::MustDefineAnOverloadOperator 2.2014 + Moose::Exception::MustHaveAtLeastOneValueToEnumerate 2.2014 + Moose::Exception::MustPassAHashOfOptions 2.2014 + Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass 2.2014 + Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance 2.2014 + Moose::Exception::MustPassEvenNumberOfArguments 2.2014 + Moose::Exception::MustPassEvenNumberOfAttributeOptions 2.2014 + Moose::Exception::MustProvideANameForTheAttribute 2.2014 + Moose::Exception::MustSpecifyAtleastOneMethod 2.2014 + Moose::Exception::MustSpecifyAtleastOneRole 2.2014 + Moose::Exception::MustSpecifyAtleastOneRoleToApplicant 2.2014 + Moose::Exception::MustSupplyAClassMOPAttributeInstance 2.2014 + Moose::Exception::MustSupplyADelegateToMethod 2.2014 + Moose::Exception::MustSupplyAMetaclass 2.2014 + Moose::Exception::MustSupplyAMooseMetaAttributeInstance 2.2014 + Moose::Exception::MustSupplyAnAccessorTypeToConstructWith 2.2014 + Moose::Exception::MustSupplyAnAttributeToConstructWith 2.2014 + Moose::Exception::MustSupplyArrayRefAsCurriedArguments 2.2014 + Moose::Exception::MustSupplyPackageNameAndName 2.2014 + Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion 2.2014 + Moose::Exception::NeitherAttributeNorAttributeNameIsGiven 2.2014 + Moose::Exception::NeitherClassNorClassNameIsGiven 2.2014 + Moose::Exception::NeitherRoleNorRoleNameIsGiven 2.2014 + Moose::Exception::NeitherTypeNorTypeNameIsGiven 2.2014 + Moose::Exception::NoAttributeFoundInSuperClass 2.2014 + Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass 2.2014 + Moose::Exception::NoCasesMatched 2.2014 + Moose::Exception::NoConstraintCheckForTypeConstraint 2.2014 + Moose::Exception::NoDestructorClassSpecified 2.2014 + Moose::Exception::NoImmutableTraitSpecifiedForClass 2.2014 + Moose::Exception::NoParentGivenToSubtype 2.2014 + Moose::Exception::OnlyInstancesCanBeCloned 2.2014 + Moose::Exception::OperatorIsRequired 2.2014 + Moose::Exception::OverloadConflictInSummation 2.2014 + Moose::Exception::OverloadRequiresAMetaClass 2.2014 + Moose::Exception::OverloadRequiresAMetaMethod 2.2014 + Moose::Exception::OverloadRequiresAMetaOverload 2.2014 + Moose::Exception::OverloadRequiresAMethodNameOrCoderef 2.2014 + Moose::Exception::OverloadRequiresAnOperator 2.2014 + Moose::Exception::OverloadRequiresNamesForCoderef 2.2014 + Moose::Exception::OverrideConflictInComposition 2.2014 + Moose::Exception::OverrideConflictInSummation 2.2014 + Moose::Exception::PackageDoesNotUseMooseExporter 2.2014 + Moose::Exception::PackageNameAndNameParamsNotGivenToWrap 2.2014 + Moose::Exception::PackagesAndModulesAreNotCachable 2.2014 + Moose::Exception::ParameterIsNotSubtypeOfParent 2.2014 + Moose::Exception::ReferencesAreNotAllowedAsDefault 2.2014 + Moose::Exception::RequiredAttributeLacksInitialization 2.2014 + Moose::Exception::RequiredAttributeNeedsADefault 2.2014 + Moose::Exception::RequiredMethodsImportedByClass 2.2014 + Moose::Exception::RequiredMethodsNotImplementedByClass 2.2014 + Moose::Exception::Role::Attribute 2.2014 + Moose::Exception::Role::AttributeName 2.2014 + Moose::Exception::Role::Class 2.2014 + Moose::Exception::Role::EitherAttributeOrAttributeName 2.2014 + Moose::Exception::Role::Instance 2.2014 + Moose::Exception::Role::InstanceClass 2.2014 + Moose::Exception::Role::InvalidAttributeOptions 2.2014 + Moose::Exception::Role::Method 2.2014 + Moose::Exception::Role::ParamsHash 2.2014 + Moose::Exception::Role::Role 2.2014 + Moose::Exception::Role::RoleForCreate 2.2014 + Moose::Exception::Role::RoleForCreateMOPClass 2.2014 + Moose::Exception::Role::TypeConstraint 2.2014 + Moose::Exception::RoleDoesTheExcludedRole 2.2014 + Moose::Exception::RoleExclusionConflict 2.2014 + Moose::Exception::RoleNameRequired 2.2014 + Moose::Exception::RoleNameRequiredForMooseMetaRole 2.2014 + Moose::Exception::RolesDoNotSupportAugment 2.2014 + Moose::Exception::RolesDoNotSupportExtends 2.2014 + Moose::Exception::RolesDoNotSupportInner 2.2014 + Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers 2.2014 + Moose::Exception::RolesInCreateTakesAnArrayRef 2.2014 + Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole 2.2014 + Moose::Exception::SingleParamsToNewMustBeHashRef 2.2014 + Moose::Exception::TriggerMustBeACodeRef 2.2014 + Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType 2.2014 + Moose::Exception::TypeConstraintIsAlreadyCreated 2.2014 + Moose::Exception::TypeParameterMustBeMooseMetaType 2.2014 + Moose::Exception::UnableToCanonicalizeHandles 2.2014 + Moose::Exception::UnableToCanonicalizeNonRolePackage 2.2014 + Moose::Exception::UnableToRecognizeDelegateMetaclass 2.2014 + Moose::Exception::UndefinedHashKeysPassedToMethod 2.2014 + Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs 2.2014 + Moose::Exception::UnionTakesAtleastTwoTypeNames 2.2014 + Moose::Exception::ValidationFailedForInlineTypeConstraint 2.2014 + Moose::Exception::ValidationFailedForTypeConstraint 2.2014 + Moose::Exception::WrapTakesACodeRefToBless 2.2014 + Moose::Exception::WrongTypeConstraintGiven 2.2014 + Moose::Exporter 2.2014 + Moose::Intro 2.2014 + Moose::Manual 2.2014 + Moose::Manual::Attributes 2.2014 + Moose::Manual::BestPractices 2.2014 + Moose::Manual::Classes 2.2014 + Moose::Manual::Concepts 2.2014 + Moose::Manual::Construction 2.2014 + Moose::Manual::Contributing 2.2014 + Moose::Manual::Delegation 2.2014 + Moose::Manual::Delta 2.2014 + Moose::Manual::Exceptions 2.2014 + Moose::Manual::Exceptions::Manifest 2.2014 + Moose::Manual::FAQ 2.2014 + Moose::Manual::MOP 2.2014 + Moose::Manual::MethodModifiers 2.2014 + Moose::Manual::MooseX 2.2014 + Moose::Manual::Resources 2.2014 + Moose::Manual::Roles 2.2014 + Moose::Manual::Support 2.2014 + Moose::Manual::Types 2.2014 + Moose::Manual::Unsweetened 2.2014 + Moose::Meta::Attribute 2.2014 + Moose::Meta::Attribute::Native 2.2014 + Moose::Meta::Attribute::Native::Trait 2.2014 + Moose::Meta::Attribute::Native::Trait::Array 2.2014 + Moose::Meta::Attribute::Native::Trait::Bool 2.2014 + Moose::Meta::Attribute::Native::Trait::Code 2.2014 + Moose::Meta::Attribute::Native::Trait::Counter 2.2014 + Moose::Meta::Attribute::Native::Trait::Hash 2.2014 + Moose::Meta::Attribute::Native::Trait::Number 2.2014 + Moose::Meta::Attribute::Native::Trait::String 2.2014 + Moose::Meta::Class 2.2014 + Moose::Meta::Class::Immutable::Trait 2.2014 + Moose::Meta::Instance 2.2014 + Moose::Meta::Method 2.2014 + Moose::Meta::Method::Accessor 2.2014 + Moose::Meta::Method::Accessor::Native 2.2014 + Moose::Meta::Method::Accessor::Native::Array 2.2014 + Moose::Meta::Method::Accessor::Native::Array::Writer 2.2014 + Moose::Meta::Method::Accessor::Native::Array::accessor 2.2014 + Moose::Meta::Method::Accessor::Native::Array::clear 2.2014 + Moose::Meta::Method::Accessor::Native::Array::count 2.2014 + Moose::Meta::Method::Accessor::Native::Array::delete 2.2014 + Moose::Meta::Method::Accessor::Native::Array::elements 2.2014 + Moose::Meta::Method::Accessor::Native::Array::first 2.2014 + Moose::Meta::Method::Accessor::Native::Array::first_index 2.2014 + Moose::Meta::Method::Accessor::Native::Array::get 2.2014 + Moose::Meta::Method::Accessor::Native::Array::grep 2.2014 + Moose::Meta::Method::Accessor::Native::Array::insert 2.2014 + Moose::Meta::Method::Accessor::Native::Array::is_empty 2.2014 + Moose::Meta::Method::Accessor::Native::Array::join 2.2014 + Moose::Meta::Method::Accessor::Native::Array::map 2.2014 + Moose::Meta::Method::Accessor::Native::Array::natatime 2.2014 + Moose::Meta::Method::Accessor::Native::Array::pop 2.2014 + Moose::Meta::Method::Accessor::Native::Array::push 2.2014 + Moose::Meta::Method::Accessor::Native::Array::reduce 2.2014 + Moose::Meta::Method::Accessor::Native::Array::set 2.2014 + Moose::Meta::Method::Accessor::Native::Array::shallow_clone 2.2014 + Moose::Meta::Method::Accessor::Native::Array::shift 2.2014 + Moose::Meta::Method::Accessor::Native::Array::shuffle 2.2014 + Moose::Meta::Method::Accessor::Native::Array::sort 2.2014 + Moose::Meta::Method::Accessor::Native::Array::sort_in_place 2.2014 + Moose::Meta::Method::Accessor::Native::Array::splice 2.2014 + Moose::Meta::Method::Accessor::Native::Array::uniq 2.2014 + Moose::Meta::Method::Accessor::Native::Array::unshift 2.2014 + Moose::Meta::Method::Accessor::Native::Bool::not 2.2014 + Moose::Meta::Method::Accessor::Native::Bool::set 2.2014 + Moose::Meta::Method::Accessor::Native::Bool::toggle 2.2014 + Moose::Meta::Method::Accessor::Native::Bool::unset 2.2014 + Moose::Meta::Method::Accessor::Native::Code::execute 2.2014 + Moose::Meta::Method::Accessor::Native::Code::execute_method 2.2014 + Moose::Meta::Method::Accessor::Native::Collection 2.2014 + Moose::Meta::Method::Accessor::Native::Counter::Writer 2.2014 + Moose::Meta::Method::Accessor::Native::Counter::dec 2.2014 + Moose::Meta::Method::Accessor::Native::Counter::inc 2.2014 + Moose::Meta::Method::Accessor::Native::Counter::reset 2.2014 + Moose::Meta::Method::Accessor::Native::Counter::set 2.2014 + Moose::Meta::Method::Accessor::Native::Hash 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::Writer 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::accessor 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::clear 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::count 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::defined 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::delete 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::elements 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::exists 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::get 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::is_empty 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::keys 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::kv 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::set 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::shallow_clone 2.2014 + Moose::Meta::Method::Accessor::Native::Hash::values 2.2014 + Moose::Meta::Method::Accessor::Native::Number::abs 2.2014 + Moose::Meta::Method::Accessor::Native::Number::add 2.2014 + Moose::Meta::Method::Accessor::Native::Number::div 2.2014 + Moose::Meta::Method::Accessor::Native::Number::mod 2.2014 + Moose::Meta::Method::Accessor::Native::Number::mul 2.2014 + Moose::Meta::Method::Accessor::Native::Number::set 2.2014 + Moose::Meta::Method::Accessor::Native::Number::sub 2.2014 + Moose::Meta::Method::Accessor::Native::Reader 2.2014 + Moose::Meta::Method::Accessor::Native::String::append 2.2014 + Moose::Meta::Method::Accessor::Native::String::chomp 2.2014 + Moose::Meta::Method::Accessor::Native::String::chop 2.2014 + Moose::Meta::Method::Accessor::Native::String::clear 2.2014 + Moose::Meta::Method::Accessor::Native::String::inc 2.2014 + Moose::Meta::Method::Accessor::Native::String::length 2.2014 + Moose::Meta::Method::Accessor::Native::String::match 2.2014 + Moose::Meta::Method::Accessor::Native::String::prepend 2.2014 + Moose::Meta::Method::Accessor::Native::String::replace 2.2014 + Moose::Meta::Method::Accessor::Native::String::substr 2.2014 + Moose::Meta::Method::Accessor::Native::Writer 2.2014 + Moose::Meta::Method::Augmented 2.2014 + Moose::Meta::Method::Constructor 2.2014 + Moose::Meta::Method::Delegation 2.2014 + Moose::Meta::Method::Destructor 2.2014 + Moose::Meta::Method::Meta 2.2014 + Moose::Meta::Method::Overridden 2.2014 + Moose::Meta::Mixin::AttributeCore 2.2014 + Moose::Meta::Object::Trait 2.2014 + Moose::Meta::Role 2.2014 + Moose::Meta::Role::Application 2.2014 + Moose::Meta::Role::Application::RoleSummation 2.2014 + Moose::Meta::Role::Application::ToClass 2.2014 + Moose::Meta::Role::Application::ToInstance 2.2014 + Moose::Meta::Role::Application::ToRole 2.2014 + Moose::Meta::Role::Attribute 2.2014 + Moose::Meta::Role::Composite 2.2014 + Moose::Meta::Role::Method 2.2014 + Moose::Meta::Role::Method::Conflicting 2.2014 + Moose::Meta::Role::Method::Required 2.2014 + Moose::Meta::TypeCoercion 2.2014 + Moose::Meta::TypeCoercion::Union 2.2014 + Moose::Meta::TypeConstraint 2.2014 + Moose::Meta::TypeConstraint::Class 2.2014 + Moose::Meta::TypeConstraint::DuckType 2.2014 + Moose::Meta::TypeConstraint::Enum 2.2014 + Moose::Meta::TypeConstraint::Parameterizable 2.2014 + Moose::Meta::TypeConstraint::Parameterized 2.2014 + Moose::Meta::TypeConstraint::Registry 2.2014 + Moose::Meta::TypeConstraint::Role 2.2014 + Moose::Meta::TypeConstraint::Union 2.2014 + Moose::Object 2.2014 + Moose::Role 2.2014 + Moose::Spec::Role 2.2014 + Moose::Unsweetened 2.2014 + Moose::Util 2.2014 + Moose::Util::MetaRole 2.2014 + Moose::Util::TypeConstraints 2.2014 + Moose::Util::TypeConstraints::Builtins 2.2014 + Test::Moose 2.2014 + metaclass 2.2014 + oose 2.2014 requirements: Carp 1.22 Class::Load 0.09 @@ -4926,7 +5059,6 @@ DISTRIBUTIONS Params::Util 1.00 Scalar::Util 1.19 Sub::Exporter 0.980 - Sub::Identify 0 Sub::Name 0.20 Try::Tiny 0.17 parent 0.223 @@ -5039,137 +5171,145 @@ DISTRIBUTIONS perl 5.008 strict 0 warnings 0 - Mozilla-CA-20180117 - pathname: A/AB/ABH/Mozilla-CA-20180117.tar.gz + Mozilla-CA-20200520 + pathname: A/AB/ABH/Mozilla-CA-20200520.tar.gz provides: - Mozilla::CA 20180117 + Mozilla::CA 20200520 requirements: ExtUtils::MakeMaker 0 Test 0 perl 5.006 - Net-DNS-1.23 - pathname: N/NL/NLNETLABS/Net-DNS-1.23.tar.gz - provides: - Net::DNS 1.23 - Net::DNS::Domain 1726 - Net::DNS::DomainName 1605 - Net::DNS::DomainName1035 1605 - Net::DNS::DomainName2535 1605 - Net::DNS::Header 1709 - Net::DNS::Mailbox 1605 - Net::DNS::Mailbox1035 1605 - Net::DNS::Mailbox2535 1605 - Net::DNS::Nameserver 1761 - Net::DNS::Packet 1761 - Net::DNS::Parameters 1761 - Net::DNS::Question 1726 - Net::DNS::RR 1762 - Net::DNS::RR::A 1597 - Net::DNS::RR::AAAA 1597 - Net::DNS::RR::AFSDB 1597 - Net::DNS::RR::APL 1741 - Net::DNS::RR::APL::Item 1741 - Net::DNS::RR::CAA 1771 - Net::DNS::RR::CDNSKEY 1586 - Net::DNS::RR::CDS 1586 - Net::DNS::RR::CERT 1773 - Net::DNS::RR::CNAME 1597 - Net::DNS::RR::CSYNC 1741 - Net::DNS::RR::DHCID 1597 - Net::DNS::RR::DNAME 1597 - Net::DNS::RR::DNSKEY 1773 - Net::DNS::RR::DS 1774 - Net::DNS::RR::EUI48 1597 - Net::DNS::RR::EUI64 1597 - Net::DNS::RR::GPOS 1528 - Net::DNS::RR::HINFO 1597 - Net::DNS::RR::HIP 1749 - Net::DNS::RR::IPSECKEY 1718 - Net::DNS::RR::ISDN 1597 - Net::DNS::RR::KEY 1528 - Net::DNS::RR::KX 1597 - Net::DNS::RR::L32 1597 - Net::DNS::RR::L64 1597 - Net::DNS::RR::LOC 1597 - Net::DNS::RR::LP 1597 - Net::DNS::RR::MB 1528 - Net::DNS::RR::MG 1528 - Net::DNS::RR::MINFO 1597 - Net::DNS::RR::MR 1528 - Net::DNS::RR::MX 1597 - Net::DNS::RR::NAPTR 1597 - Net::DNS::RR::NID 1597 - Net::DNS::RR::NS 1597 - Net::DNS::RR::NSEC 1749 - Net::DNS::RR::NSEC3 1749 - Net::DNS::RR::NSEC3PARAM 1741 - Net::DNS::RR::NULL 1528 - Net::DNS::RR::OPENPGPKEY 1597 - Net::DNS::RR::OPT 1773 - Net::DNS::RR::OPT::CHAIN 1773 - Net::DNS::RR::OPT::CLIENT_SUBNET 1773 - Net::DNS::RR::OPT::COOKIE 1773 - Net::DNS::RR::OPT::DAU 1773 - Net::DNS::RR::OPT::DHU 1773 - Net::DNS::RR::OPT::EXPIRE 1773 - Net::DNS::RR::OPT::KEY_TAG 1773 - Net::DNS::RR::OPT::N3U 1773 - Net::DNS::RR::OPT::PADDING 1773 - Net::DNS::RR::OPT::TCP_KEEPALIVE 1773 - Net::DNS::RR::PTR 1597 - Net::DNS::RR::PX 1597 - Net::DNS::RR::RP 1597 - Net::DNS::RR::RRSIG 1754 - Net::DNS::RR::RT 1597 - Net::DNS::RR::SIG 1754 - Net::DNS::RR::SMIMEA 1741 - Net::DNS::RR::SOA 1597 - Net::DNS::RR::SPF 1593 - Net::DNS::RR::SRV 1597 - Net::DNS::RR::SSHFP 1741 - Net::DNS::RR::TKEY 1528 - Net::DNS::RR::TLSA 1741 - Net::DNS::RR::TSIG 1774 - Net::DNS::RR::TXT 1597 - Net::DNS::RR::URI 1597 - Net::DNS::RR::X25 1597 - Net::DNS::RR::ZONEMD 1771 - Net::DNS::Resolver 1740 - Net::DNS::Resolver::Base 1771 - Net::DNS::Resolver::MSWin32 1568 - Net::DNS::Resolver::Recurse 1748 - Net::DNS::Resolver::UNIX 1573 - Net::DNS::Resolver::android 1568 - Net::DNS::Resolver::cygwin 1719 - Net::DNS::Resolver::os2 1568 - Net::DNS::Resolver::os390 1719 - Net::DNS::Text 1762 - Net::DNS::Update 1774 - Net::DNS::ZoneFile 1769 - Net::DNS::ZoneFile::Generator 1769 - Net::DNS::ZoneFile::Text 1769 - requirements: + Net-DNS-1.29 + pathname: N/NL/NLNETLABS/Net-DNS-1.29.tar.gz + provides: + Net::DNS 1.29 + Net::DNS::Domain 1825 + Net::DNS::DomainName 1813 + Net::DNS::DomainName1035 1813 + Net::DNS::DomainName2535 1813 + Net::DNS::Header 1812 + Net::DNS::Mailbox 1813 + Net::DNS::Mailbox1035 1813 + Net::DNS::Mailbox2535 1813 + Net::DNS::Nameserver 1813 + Net::DNS::Packet 1818 + Net::DNS::Parameters 1823 + Net::DNS::Question 1812 + Net::DNS::RR 1812 + Net::DNS::RR::A 1814 + Net::DNS::RR::AAAA 1814 + Net::DNS::RR::AFSDB 1814 + Net::DNS::RR::AMTRELAY 1814 + Net::DNS::RR::APL 1814 + Net::DNS::RR::APL::Item 1814 + Net::DNS::RR::CAA 1814 + Net::DNS::RR::CDNSKEY 1814 + Net::DNS::RR::CDS 1814 + Net::DNS::RR::CERT 1814 + Net::DNS::RR::CNAME 1814 + Net::DNS::RR::CSYNC 1814 + Net::DNS::RR::DHCID 1814 + Net::DNS::RR::DNAME 1814 + Net::DNS::RR::DNSKEY 1814 + Net::DNS::RR::DS 1814 + Net::DNS::RR::EUI48 1814 + Net::DNS::RR::EUI64 1814 + Net::DNS::RR::GPOS 1814 + Net::DNS::RR::HINFO 1814 + Net::DNS::RR::HIP 1814 + Net::DNS::RR::HTTPS 1814 + Net::DNS::RR::IPSECKEY 1814 + Net::DNS::RR::ISDN 1814 + Net::DNS::RR::KEY 1814 + Net::DNS::RR::KX 1814 + Net::DNS::RR::L32 1814 + Net::DNS::RR::L64 1814 + Net::DNS::RR::LOC 1814 + Net::DNS::RR::LP 1814 + Net::DNS::RR::MB 1814 + Net::DNS::RR::MG 1814 + Net::DNS::RR::MINFO 1814 + Net::DNS::RR::MR 1814 + Net::DNS::RR::MX 1814 + Net::DNS::RR::NAPTR 1814 + Net::DNS::RR::NID 1814 + Net::DNS::RR::NS 1814 + Net::DNS::RR::NSEC 1812 + Net::DNS::RR::NSEC3 1814 + Net::DNS::RR::NSEC3PARAM 1814 + Net::DNS::RR::NULL 1814 + Net::DNS::RR::OPENPGPKEY 1814 + Net::DNS::RR::OPT 1823 + Net::DNS::RR::OPT::CHAIN 1823 + Net::DNS::RR::OPT::CLIENT_SUBNET 1823 + Net::DNS::RR::OPT::COOKIE 1823 + Net::DNS::RR::OPT::DAU 1823 + Net::DNS::RR::OPT::DHU 1823 + Net::DNS::RR::OPT::EXPIRE 1823 + Net::DNS::RR::OPT::EXTENDED_ERROR 1823 + Net::DNS::RR::OPT::KEY_TAG 1823 + Net::DNS::RR::OPT::N3U 1823 + Net::DNS::RR::OPT::PADDING 1823 + Net::DNS::RR::OPT::TCP_KEEPALIVE 1823 + Net::DNS::RR::PTR 1814 + Net::DNS::RR::PX 1814 + Net::DNS::RR::RP 1814 + Net::DNS::RR::RRSIG 1819 + Net::DNS::RR::RT 1814 + Net::DNS::RR::SIG 1819 + Net::DNS::RR::SMIMEA 1814 + Net::DNS::RR::SOA 1819 + Net::DNS::RR::SPF 1814 + Net::DNS::RR::SRV 1814 + Net::DNS::RR::SSHFP 1814 + Net::DNS::RR::SVCB 1823 + Net::DNS::RR::TKEY 1814 + Net::DNS::RR::TLSA 1814 + Net::DNS::RR::TSIG 1814 + Net::DNS::RR::TXT 1814 + Net::DNS::RR::URI 1814 + Net::DNS::RR::X25 1814 + Net::DNS::RR::ZONEMD 1814 + Net::DNS::Resolver 1818 + Net::DNS::Resolver::Base 1818 + Net::DNS::Resolver::MSWin32 1812 + Net::DNS::Resolver::Recurse 1811 + Net::DNS::Resolver::UNIX 1811 + Net::DNS::Resolver::android 1811 + Net::DNS::Resolver::cygwin 1811 + Net::DNS::Resolver::os2 1811 + Net::DNS::Resolver::os390 1811 + Net::DNS::Text 1813 + Net::DNS::Update 1814 + Net::DNS::ZoneFile 1813 + Net::DNS::ZoneFile::Generator 1813 + Net::DNS::ZoneFile::Text 1813 + requirements: + Carp 1.1 Digest::HMAC 1.03 Digest::MD5 2.13 Digest::SHA 5.23 - ExtUtils::MakeMaker 0 + Encode 2.26 + Exporter 5.56 + ExtUtils::MakeMaker 6.66 File::Spec 0.86 + Getopt::Long 2.43 IO::File 1.08 IO::Select 1.14 + IO::Socket 1.26 IO::Socket::IP 0.38 MIME::Base64 2.13 PerlIO 1.05 Scalar::Util 1.25 - Test::More 0.52 Time::Local 1.19 - perl 5.006 - Net-HTTP-6.19 - pathname: O/OA/OALDERS/Net-HTTP-6.19.tar.gz + perl 5.008008 + Net-HTTP-6.20 + pathname: O/OA/OALDERS/Net-HTTP-6.20.tar.gz provides: - Net::HTTP 6.19 - Net::HTTP::Methods 6.19 - Net::HTTP::NB 6.19 - Net::HTTPS 6.19 + Net::HTTP 6.20 + Net::HTTP::Methods 6.20 + Net::HTTP::NB 6.20 + Net::HTTPS 6.20 requirements: Carp 0 Compress::Raw::Zlib 0 @@ -5180,7 +5320,6 @@ DISTRIBUTIONS base 0 perl 5.006002 strict 0 - vars 0 warnings 0 Net-IP-1.26 pathname: M/MA/MANU/Net-IP-1.26.tar.gz @@ -5188,10 +5327,10 @@ DISTRIBUTIONS Net::IP 1.26 requirements: ExtUtils::MakeMaker 0 - Net-OAuth2-AuthorizationServer-0.24 - pathname: L/LE/LEEJO/Net-OAuth2-AuthorizationServer-0.24.tar.gz + Net-OAuth2-AuthorizationServer-0.28 + pathname: L/LE/LEEJO/Net-OAuth2-AuthorizationServer-0.28.tar.gz provides: - Net::OAuth2::AuthorizationServer 0.24 + Net::OAuth2::AuthorizationServer 0.28 Net::OAuth2::AuthorizationServer::AuthorizationCodeGrant undef Net::OAuth2::AuthorizationServer::ClientCredentialsGrant undef Net::OAuth2::AuthorizationServer::Defaults undef @@ -5211,23 +5350,23 @@ DISTRIBUTIONS Try::Tiny 0.22 Types::Standard 1.000005 perl 5.010001 - Net-SSLeay-1.88 - pathname: C/CH/CHRISN/Net-SSLeay-1.88.tar.gz + Net-SSLeay-1.90 + pathname: C/CH/CHRISN/Net-SSLeay-1.90.tar.gz provides: - Net::SSLeay 1.88 - Net::SSLeay::Handle 1.88 + Net::SSLeay 1.90 + Net::SSLeay::Handle 1.90 requirements: ExtUtils::MakeMaker 0 MIME::Base64 0 perl 5.008001 - POSIX-strftime-Compiler-0.42 - pathname: K/KA/KAZEBURO/POSIX-strftime-Compiler-0.42.tar.gz + POSIX-strftime-Compiler-0.44 + pathname: K/KA/KAZEBURO/POSIX-strftime-Compiler-0.44.tar.gz provides: - POSIX::strftime::Compiler 0.42 + POSIX::strftime::Compiler 0.44 requirements: Carp 0 Exporter 0 - Module::Build 0.38 + Module::Build::Tiny 0.035 POSIX 0 Time::Local 0 perl 5.008001 @@ -5343,21 +5482,21 @@ DISTRIBUTIONS overload 0 perl 5.006 strict 0 - PPIx-QuoteLike-0.011 - pathname: W/WY/WYANT/PPIx-QuoteLike-0.011.tar.gz - provides: - PPIx::QuoteLike 0.011 - PPIx::QuoteLike::Constant 0.011 - PPIx::QuoteLike::Dumper 0.011 - PPIx::QuoteLike::Token 0.011 - PPIx::QuoteLike::Token::Control 0.011 - PPIx::QuoteLike::Token::Delimiter 0.011 - PPIx::QuoteLike::Token::Interpolation 0.011 - PPIx::QuoteLike::Token::String 0.011 - PPIx::QuoteLike::Token::Structure 0.011 - PPIx::QuoteLike::Token::Unknown 0.011 - PPIx::QuoteLike::Token::Whitespace 0.011 - PPIx::QuoteLike::Utils 0.011 + PPIx-QuoteLike-0.014 + pathname: W/WY/WYANT/PPIx-QuoteLike-0.014.tar.gz + provides: + PPIx::QuoteLike 0.014 + PPIx::QuoteLike::Constant 0.014 + PPIx::QuoteLike::Dumper 0.014 + PPIx::QuoteLike::Token 0.014 + PPIx::QuoteLike::Token::Control 0.014 + PPIx::QuoteLike::Token::Delimiter 0.014 + PPIx::QuoteLike::Token::Interpolation 0.014 + PPIx::QuoteLike::Token::String 0.014 + PPIx::QuoteLike::Token::Structure 0.014 + PPIx::QuoteLike::Token::Unknown 0.014 + PPIx::QuoteLike::Token::Whitespace 0.014 + PPIx::QuoteLike::Utils 0.014 requirements: Carp 0 Encode 0 @@ -5374,75 +5513,73 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - PPIx-Regexp-0.071 - pathname: W/WY/WYANT/PPIx-Regexp-0.071.tar.gz - provides: - PPIx::Regexp 0.071 - PPIx::Regexp::Constant 0.071 - PPIx::Regexp::Dumper 0.071 - PPIx::Regexp::Element 0.071 - PPIx::Regexp::Lexer 0.071 - PPIx::Regexp::Node 0.071 - PPIx::Regexp::Node::Range 0.071 - PPIx::Regexp::Node::Unknown 0.071 - PPIx::Regexp::StringTokenizer 0.071 - PPIx::Regexp::Structure 0.071 - PPIx::Regexp::Structure::Assertion 0.071 - PPIx::Regexp::Structure::BranchReset 0.071 - PPIx::Regexp::Structure::Capture 0.071 - PPIx::Regexp::Structure::CharClass 0.071 - PPIx::Regexp::Structure::Code 0.071 - PPIx::Regexp::Structure::Main 0.071 - PPIx::Regexp::Structure::Modifier 0.071 - PPIx::Regexp::Structure::NamedCapture 0.071 - PPIx::Regexp::Structure::Quantifier 0.071 - PPIx::Regexp::Structure::RegexSet 0.071 - PPIx::Regexp::Structure::Regexp 0.071 - PPIx::Regexp::Structure::Replacement 0.071 - PPIx::Regexp::Structure::Subexpression 0.071 - PPIx::Regexp::Structure::Switch 0.071 - PPIx::Regexp::Structure::Unknown 0.071 - PPIx::Regexp::Support 0.071 - PPIx::Regexp::Token 0.071 - PPIx::Regexp::Token::Assertion 0.071 - PPIx::Regexp::Token::Backreference 0.071 - PPIx::Regexp::Token::Backtrack 0.071 - PPIx::Regexp::Token::CharClass 0.071 - PPIx::Regexp::Token::CharClass::POSIX 0.071 - PPIx::Regexp::Token::CharClass::POSIX::Unknown 0.071 - PPIx::Regexp::Token::CharClass::Simple 0.071 - PPIx::Regexp::Token::Code 0.071 - PPIx::Regexp::Token::Comment 0.071 - PPIx::Regexp::Token::Condition 0.071 - PPIx::Regexp::Token::Control 0.071 - PPIx::Regexp::Token::Delimiter 0.071 - PPIx::Regexp::Token::Greediness 0.071 - PPIx::Regexp::Token::GroupType 0.071 - PPIx::Regexp::Token::GroupType::Assertion 0.071 - PPIx::Regexp::Token::GroupType::BranchReset 0.071 - PPIx::Regexp::Token::GroupType::Code 0.071 - PPIx::Regexp::Token::GroupType::Modifier 0.071 - PPIx::Regexp::Token::GroupType::NamedCapture 0.071 - PPIx::Regexp::Token::GroupType::Subexpression 0.071 - PPIx::Regexp::Token::GroupType::Switch 0.071 - PPIx::Regexp::Token::Interpolation 0.071 - PPIx::Regexp::Token::Literal 0.071 - PPIx::Regexp::Token::Modifier 0.071 - PPIx::Regexp::Token::NoOp 0.071 - PPIx::Regexp::Token::Operator 0.071 - PPIx::Regexp::Token::Quantifier 0.071 - PPIx::Regexp::Token::Recursion 0.071 - PPIx::Regexp::Token::Reference 0.071 - PPIx::Regexp::Token::Structure 0.071 - PPIx::Regexp::Token::Unknown 0.071 - PPIx::Regexp::Token::Unmatched 0.071 - PPIx::Regexp::Token::Whitespace 0.071 - PPIx::Regexp::Tokenizer 0.071 - PPIx::Regexp::Util 0.071 + PPIx-Regexp-0.077 + pathname: W/WY/WYANT/PPIx-Regexp-0.077.tar.gz + provides: + PPIx::Regexp 0.077 + PPIx::Regexp::Constant 0.077 + PPIx::Regexp::Dumper 0.077 + PPIx::Regexp::Element 0.077 + PPIx::Regexp::Lexer 0.077 + PPIx::Regexp::Node 0.077 + PPIx::Regexp::Node::Range 0.077 + PPIx::Regexp::Node::Unknown 0.077 + PPIx::Regexp::Structure 0.077 + PPIx::Regexp::Structure::Assertion 0.077 + PPIx::Regexp::Structure::BranchReset 0.077 + PPIx::Regexp::Structure::Capture 0.077 + PPIx::Regexp::Structure::CharClass 0.077 + PPIx::Regexp::Structure::Code 0.077 + PPIx::Regexp::Structure::Main 0.077 + PPIx::Regexp::Structure::Modifier 0.077 + PPIx::Regexp::Structure::NamedCapture 0.077 + PPIx::Regexp::Structure::Quantifier 0.077 + PPIx::Regexp::Structure::RegexSet 0.077 + PPIx::Regexp::Structure::Regexp 0.077 + PPIx::Regexp::Structure::Replacement 0.077 + PPIx::Regexp::Structure::Subexpression 0.077 + PPIx::Regexp::Structure::Switch 0.077 + PPIx::Regexp::Structure::Unknown 0.077 + PPIx::Regexp::Support 0.077 + PPIx::Regexp::Token 0.077 + PPIx::Regexp::Token::Assertion 0.077 + PPIx::Regexp::Token::Backreference 0.077 + PPIx::Regexp::Token::Backtrack 0.077 + PPIx::Regexp::Token::CharClass 0.077 + PPIx::Regexp::Token::CharClass::POSIX 0.077 + PPIx::Regexp::Token::CharClass::POSIX::Unknown 0.077 + PPIx::Regexp::Token::CharClass::Simple 0.077 + PPIx::Regexp::Token::Code 0.077 + PPIx::Regexp::Token::Comment 0.077 + PPIx::Regexp::Token::Condition 0.077 + PPIx::Regexp::Token::Control 0.077 + PPIx::Regexp::Token::Delimiter 0.077 + PPIx::Regexp::Token::Greediness 0.077 + PPIx::Regexp::Token::GroupType 0.077 + PPIx::Regexp::Token::GroupType::Assertion 0.077 + PPIx::Regexp::Token::GroupType::BranchReset 0.077 + PPIx::Regexp::Token::GroupType::Code 0.077 + PPIx::Regexp::Token::GroupType::Modifier 0.077 + PPIx::Regexp::Token::GroupType::NamedCapture 0.077 + PPIx::Regexp::Token::GroupType::Subexpression 0.077 + PPIx::Regexp::Token::GroupType::Switch 0.077 + PPIx::Regexp::Token::Interpolation 0.077 + PPIx::Regexp::Token::Literal 0.077 + PPIx::Regexp::Token::Modifier 0.077 + PPIx::Regexp::Token::NoOp 0.077 + PPIx::Regexp::Token::Operator 0.077 + PPIx::Regexp::Token::Quantifier 0.077 + PPIx::Regexp::Token::Recursion 0.077 + PPIx::Regexp::Token::Reference 0.077 + PPIx::Regexp::Token::Structure 0.077 + PPIx::Regexp::Token::Unknown 0.077 + PPIx::Regexp::Token::Unmatched 0.077 + PPIx::Regexp::Token::Whitespace 0.077 + PPIx::Regexp::Tokenizer 0.077 + PPIx::Regexp::Util 0.077 requirements: Carp 0 Exporter 0 - List::MoreUtils 0 List::Util 0 PPI::Document 1.117 Scalar::Util 0 @@ -5491,18 +5628,16 @@ DISTRIBUTIONS Sub::Name 0 strict 0 warnings 0 - Package-Stash-0.38 - pathname: E/ET/ETHER/Package-Stash-0.38.tar.gz + Package-Stash-0.39 + pathname: E/ET/ETHER/Package-Stash-0.39.tar.gz provides: - Package::Stash 0.38 - Package::Stash::PP 0.38 + Package::Stash 0.39 + Package::Stash::PP 0.39 requirements: B 0 Carp 0 - Config 0 Dist::CheckConflicts 0.02 ExtUtils::MakeMaker 0 - File::Spec 0 Getopt::Long 0 Module::Implementation 0.06 Package::Stash::XS 0.26 @@ -5523,29 +5658,34 @@ DISTRIBUTIONS perl 5.008001 strict 0 warnings 0 - Params-Util-1.07 - pathname: A/AD/ADAMK/Params-Util-1.07.tar.gz + Params-Util-1.102 + pathname: R/RE/REHSACK/Params-Util-1.102.tar.gz provides: - Params::Util 1.07 + Params::Util 1.102 + Params::Util::PP 1.102 requirements: - ExtUtils::CBuilder 0.27 - ExtUtils::MakeMaker 6.52 - File::Spec 0.80 + Carp 0 + ExtUtils::MakeMaker 0 + File::Basename 0 + File::Copy 0 + File::Path 0 + File::Spec 0 + IPC::Cmd 0 Scalar::Util 1.18 - Test::More 0.42 - perl 5.00503 - Params-Validate-1.29 - pathname: D/DR/DROLSKY/Params-Validate-1.29.tar.gz + XSLoader 0.22 + parent 0 + Params-Validate-1.30 + pathname: D/DR/DROLSKY/Params-Validate-1.30.tar.gz provides: - Params::Validate 1.29 - Params::Validate::Constants 1.29 - Params::Validate::PP 1.29 - Params::Validate::XS 1.29 + Params::Validate 1.30 + Params::Validate::Constants 1.30 + Params::Validate::PP 1.30 + Params::Validate::XS 1.30 requirements: Carp 0 Exporter 0 ExtUtils::CBuilder 0 - Module::Build 0.28 + Module::Build 0.4227 Module::Implementation 0 Scalar::Util 1.10 XSLoader 0 @@ -5614,11 +5754,11 @@ DISTRIBUTIONS overload 0 parent 0 strict 0 - Path-Tiny-0.114 - pathname: D/DA/DAGOLDEN/Path-Tiny-0.114.tar.gz + Path-Tiny-0.116 + pathname: D/DA/DAGOLDEN/Path-Tiny-0.116.tar.gz provides: - Path::Tiny 0.114 - Path::Tiny::Error 0.114 + Path::Tiny 0.116 + Path::Tiny::Error 0.116 requirements: Carp 0 Cwd 0 @@ -5894,37 +6034,37 @@ DISTRIBUTIONS strict 0 version 0.77 warnings 0 - Perl-Critic-Freenode-0.032 - pathname: D/DB/DBOOK/Perl-Critic-Freenode-0.032.tar.gz - provides: - Perl::Critic::Freenode 0.032 - Perl::Critic::Freenode::Utils 0.032 - Perl::Critic::Policy::Freenode::AmpersandSubCalls 0.032 - Perl::Critic::Policy::Freenode::ArrayAssignAref 0.032 - Perl::Critic::Policy::Freenode::BarewordFilehandles 0.032 - Perl::Critic::Policy::Freenode::ConditionalDeclarations 0.032 - Perl::Critic::Policy::Freenode::ConditionalImplicitReturn 0.032 - Perl::Critic::Policy::Freenode::DeprecatedFeatures 0.032 - Perl::Critic::Policy::Freenode::DiscouragedModules 0.032 - Perl::Critic::Policy::Freenode::DollarAB 0.032 - Perl::Critic::Policy::Freenode::Each 0.032 - Perl::Critic::Policy::Freenode::EmptyReturn 0.032 - Perl::Critic::Policy::Freenode::IndirectObjectNotation 0.032 - Perl::Critic::Policy::Freenode::LexicalForeachIterator 0.032 - Perl::Critic::Policy::Freenode::LoopOnHash 0.032 - Perl::Critic::Policy::Freenode::ModPerl 0.032 - Perl::Critic::Policy::Freenode::MultidimensionalArrayEmulation 0.032 - Perl::Critic::Policy::Freenode::OpenArgs 0.032 - Perl::Critic::Policy::Freenode::OverloadOptions 0.032 - Perl::Critic::Policy::Freenode::POSIXImports 0.032 - Perl::Critic::Policy::Freenode::PackageMatchesFilename 0.032 - Perl::Critic::Policy::Freenode::PreferredAlternatives 0.032 - Perl::Critic::Policy::Freenode::Prototypes 0.032 - Perl::Critic::Policy::Freenode::StrictWarnings 0.032 - Perl::Critic::Policy::Freenode::Threads 0.032 - Perl::Critic::Policy::Freenode::Wantarray 0.032 - Perl::Critic::Policy::Freenode::WarningsSwitch 0.032 - Perl::Critic::Policy::Freenode::WhileDiamondDefaultAssignment 0.032 + Perl-Critic-Freenode-0.033 + pathname: D/DB/DBOOK/Perl-Critic-Freenode-0.033.tar.gz + provides: + Perl::Critic::Freenode 0.033 + Perl::Critic::Freenode::Utils 0.033 + Perl::Critic::Policy::Freenode::AmpersandSubCalls 0.033 + Perl::Critic::Policy::Freenode::ArrayAssignAref 0.033 + Perl::Critic::Policy::Freenode::BarewordFilehandles 0.033 + Perl::Critic::Policy::Freenode::ConditionalDeclarations 0.033 + Perl::Critic::Policy::Freenode::ConditionalImplicitReturn 0.033 + Perl::Critic::Policy::Freenode::DeprecatedFeatures 0.033 + Perl::Critic::Policy::Freenode::DiscouragedModules 0.033 + Perl::Critic::Policy::Freenode::DollarAB 0.033 + Perl::Critic::Policy::Freenode::Each 0.033 + Perl::Critic::Policy::Freenode::EmptyReturn 0.033 + Perl::Critic::Policy::Freenode::IndirectObjectNotation 0.033 + Perl::Critic::Policy::Freenode::LexicalForeachIterator 0.033 + Perl::Critic::Policy::Freenode::LoopOnHash 0.033 + Perl::Critic::Policy::Freenode::ModPerl 0.033 + Perl::Critic::Policy::Freenode::MultidimensionalArrayEmulation 0.033 + Perl::Critic::Policy::Freenode::OpenArgs 0.033 + Perl::Critic::Policy::Freenode::OverloadOptions 0.033 + Perl::Critic::Policy::Freenode::POSIXImports 0.033 + Perl::Critic::Policy::Freenode::PackageMatchesFilename 0.033 + Perl::Critic::Policy::Freenode::PreferredAlternatives 0.033 + Perl::Critic::Policy::Freenode::Prototypes 0.033 + Perl::Critic::Policy::Freenode::StrictWarnings 0.033 + Perl::Critic::Policy::Freenode::Threads 0.033 + Perl::Critic::Policy::Freenode::Wantarray 0.033 + Perl::Critic::Policy::Freenode::WarningsSwitch 0.033 + Perl::Critic::Policy::Freenode::WhileDiamondDefaultAssignment 0.033 requirements: Carp 0 Exporter 0 @@ -6033,33 +6173,33 @@ DISTRIBUTIONS Test::More 0 perl 5.006 version 0 - Perl-Tidy-20200110 - pathname: S/SH/SHANCOCK/Perl-Tidy-20200110.tar.gz - provides: - Perl::Tidy 20200110 - Perl::Tidy::Debugger 20200110 - Perl::Tidy::DevNull 20200110 - Perl::Tidy::Diagnostics 20200110 - Perl::Tidy::FileWriter 20200110 - Perl::Tidy::Formatter 20200110 - Perl::Tidy::HtmlWriter 20200110 - Perl::Tidy::IOScalar 20200110 - Perl::Tidy::IOScalarArray 20200110 - Perl::Tidy::IndentationItem 20200110 - Perl::Tidy::LineBuffer 20200110 - Perl::Tidy::LineSink 20200110 - Perl::Tidy::LineSource 20200110 - Perl::Tidy::Logger 20200110 - Perl::Tidy::Tokenizer 20200110 - Perl::Tidy::VerticalAligner 20200110 - Perl::Tidy::VerticalAligner::Alignment 20200110 - Perl::Tidy::VerticalAligner::Line 20200110 - requirements: - ExtUtils::MakeMaker 0 - PerlIO-utf8_strict-0.007 - pathname: L/LE/LEONT/PerlIO-utf8_strict-0.007.tar.gz - provides: - PerlIO::utf8_strict 0.007 + Perl-Tidy-20210111 + pathname: S/SH/SHANCOCK/Perl-Tidy-20210111.tar.gz + provides: + Perl::Tidy 20210111 + Perl::Tidy::Debugger 20210111 + Perl::Tidy::DevNull 20210111 + Perl::Tidy::Diagnostics 20210111 + Perl::Tidy::FileWriter 20210111 + Perl::Tidy::Formatter 20210111 + Perl::Tidy::HtmlWriter 20210111 + Perl::Tidy::IOScalar 20210111 + Perl::Tidy::IOScalarArray 20210111 + Perl::Tidy::IndentationItem 20210111 + Perl::Tidy::LineBuffer 20210111 + Perl::Tidy::LineSink 20210111 + Perl::Tidy::LineSource 20210111 + Perl::Tidy::Logger 20210111 + Perl::Tidy::Tokenizer 20210111 + Perl::Tidy::VerticalAligner 20210111 + Perl::Tidy::VerticalAligner::Alignment 20210111 + Perl::Tidy::VerticalAligner::Line 20210111 + requirements: + ExtUtils::MakeMaker 0 + PerlIO-utf8_strict-0.008 + pathname: L/LE/LEONT/PerlIO-utf8_strict-0.008.tar.gz + provides: + PerlIO::utf8_strict 0.008 requirements: ExtUtils::MakeMaker 0 XSLoader 0 @@ -6075,12 +6215,12 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.17 Scalar::Util 0 perl 5.006 - Plack-1.0047 - pathname: M/MI/MIYAGAWA/Plack-1.0047.tar.gz + Plack-1.0048 + pathname: M/MI/MIYAGAWA/Plack-1.0048.tar.gz provides: HTTP::Message::PSGI undef HTTP::Server::PSGI undef - Plack 1.0047 + Plack 1.0048 Plack::App::CGIBin undef Plack::App::Cascade undef Plack::App::Directory undef @@ -6139,9 +6279,9 @@ DISTRIBUTIONS Plack::Middleware::XFramework undef Plack::Middleware::XSendfile undef Plack::Recursive::ForwardRequest undef - Plack::Request 1.0047 + Plack::Request 1.0048 Plack::Request::Upload undef - Plack::Response 1.0047 + Plack::Response 1.0048 Plack::Runner undef Plack::TempBuffer undef Plack::Test undef @@ -6161,7 +6301,7 @@ DISTRIBUTIONS File::ShareDir 1.00 File::ShareDir::Install 0.06 Filesys::Notify::Simple 0 - HTTP::Entity::Parser 0.17 + HTTP::Entity::Parser 0.25 HTTP::Headers::Fast 0.18 HTTP::Message 5.814 HTTP::Tiny 0.034 @@ -6225,6 +6365,28 @@ DISTRIBUTIONS Test 0 perl 5.004 version 0 + Pod-Parser-1.63 + pathname: M/MA/MAREKR/Pod-Parser-1.63.tar.gz + provides: + Pod::Cache 1.63 + Pod::Cache::Item 1.63 + Pod::Find 1.63 + Pod::Hyperlink 1.63 + Pod::InputObjects 1.63 + Pod::InputSource 1.63 + Pod::InteriorSequence 1.63 + Pod::List 1.63 + Pod::Paragraph 1.63 + Pod::ParseTree 1.63 + Pod::ParseUtils 1.63 + Pod::Parser 1.63 + Pod::PlainText 2.07 + Pod::Select 1.63 + requirements: + Cwd 0 + ExtUtils::MakeMaker 0 + File::Basename 0 + Test::More 0.6 Pod-Spell-1.20 pathname: D/DO/DOLMEN/Pod-Spell-1.20.tar.gz provides: @@ -6313,11 +6475,11 @@ DISTRIBUTIONS overload 0 strict 0 warnings 0 - Role-Tiny-2.001004 - pathname: H/HA/HAARG/Role-Tiny-2.001004.tar.gz + Role-Tiny-2.002003 + pathname: H/HA/HAARG/Role-Tiny-2.002003.tar.gz provides: - Role::Tiny 2.001004 - Role::Tiny::With 2.001004 + Role::Tiny 2.002003 + Role::Tiny::With 2.002003 requirements: Exporter 5.57 perl 5.006 @@ -6424,10 +6586,18 @@ DISTRIBUTIONS XML::Parser 2.23 constant 0 perl 5.006000 - SQL-Abstract-1.86 - pathname: I/IL/ILMARI/SQL-Abstract-1.86.tar.gz - provides: - SQL::Abstract 1.86 + SQL-Abstract-2.000000 + pathname: M/MS/MSTROUT/SQL-Abstract-2.000000.tar.gz + provides: + Chunkstrumenter undef + DBIx::Class::SQLMaker::Role::SQLA2Passthrough undef + SQL::Abstract 2.000000 + SQL::Abstract::Formatter undef + SQL::Abstract::Parts undef + SQL::Abstract::Plugin::BangOverrides undef + SQL::Abstract::Plugin::ExtraClauses undef + SQL::Abstract::Reference undef + SQL::Abstract::Role::Plugin undef SQL::Abstract::Test undef SQL::Abstract::Tree undef requirements: @@ -6439,6 +6609,27 @@ DISTRIBUTIONS Moo 2.000001 Scalar::Util 0 Sub::Quote 2.000001 + Test::Builder::Module 0.84 + Test::Deep 0.101 + Text::Balanced 2.00 + perl 5.006 + SQL-Abstract-Classic-1.91 + pathname: R/RI/RIBASUSHI/SQL-Abstract-Classic-1.91.tar.gz + provides: + SQL::Abstract::Classic 1.91 + SQL::Abstract::Util undef + requirements: + Exporter 5.57 + ExtUtils::MakeMaker 6.59 + List::Util 0 + MRO::Compat 0.12 + SQL::Abstract 1.79 + Scalar::Util 0 + Storable 0 + Test::Deep 0.101 + Test::Exception 0.31 + Test::More 0.88 + Test::Warn 0 Text::Balanced 2.00 perl 5.006 SUPER-1.20190531 @@ -6467,67 +6658,67 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 Test::More 0 perl 5.006001 - Search-Elasticsearch-6.80 - pathname: E/EZ/EZIMUEL/Search-Elasticsearch-6.80.tar.gz - provides: - Search::Elasticsearch 6.80 - Search::Elasticsearch::Client::6_0 6.80 - Search::Elasticsearch::Client::6_0::Bulk 6.80 - Search::Elasticsearch::Client::6_0::Direct 6.80 - Search::Elasticsearch::Client::6_0::Direct::CCR 6.80 - Search::Elasticsearch::Client::6_0::Direct::Cat 6.80 - Search::Elasticsearch::Client::6_0::Direct::Cluster 6.80 - Search::Elasticsearch::Client::6_0::Direct::ILM 6.80 - Search::Elasticsearch::Client::6_0::Direct::Indices 6.80 - Search::Elasticsearch::Client::6_0::Direct::Ingest 6.80 - Search::Elasticsearch::Client::6_0::Direct::Nodes 6.80 - Search::Elasticsearch::Client::6_0::Direct::Snapshot 6.80 - Search::Elasticsearch::Client::6_0::Direct::Tasks 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Graph 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::License 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::ML 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Migration 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Monitoring 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Rollup 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::SQL 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::SSL 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Security 6.80 - Search::Elasticsearch::Client::6_0::Direct::XPack::Watcher 6.80 - Search::Elasticsearch::Client::6_0::Role::API 6.80 - Search::Elasticsearch::Client::6_0::Role::Bulk 6.80 - Search::Elasticsearch::Client::6_0::Role::Scroll 6.80 - Search::Elasticsearch::Client::6_0::Scroll 6.80 - Search::Elasticsearch::Client::6_0::TestServer 6.80 - Search::Elasticsearch::Cxn::Factory 6.80 - Search::Elasticsearch::Cxn::HTTPTiny 6.80 - Search::Elasticsearch::Cxn::Hijk 6.80 - Search::Elasticsearch::Cxn::LWP 6.80 - Search::Elasticsearch::CxnPool::Sniff 6.80 - Search::Elasticsearch::CxnPool::Static 6.80 - Search::Elasticsearch::CxnPool::Static::NoPing 6.80 - Search::Elasticsearch::Error 6.80 - Search::Elasticsearch::Logger::LogAny 6.80 - Search::Elasticsearch::Role::API 6.80 - Search::Elasticsearch::Role::Client 6.80 - Search::Elasticsearch::Role::Client::Direct 6.80 - Search::Elasticsearch::Role::Cxn 6.80 - Search::Elasticsearch::Role::CxnPool 6.80 - Search::Elasticsearch::Role::CxnPool::Sniff 6.80 - Search::Elasticsearch::Role::CxnPool::Static 6.80 - Search::Elasticsearch::Role::CxnPool::Static::NoPing 6.80 - Search::Elasticsearch::Role::Is_Sync 6.80 - Search::Elasticsearch::Role::Logger 6.80 - Search::Elasticsearch::Role::Serializer 6.80 - Search::Elasticsearch::Role::Serializer::JSON 6.80 - Search::Elasticsearch::Role::Transport 6.80 - Search::Elasticsearch::Serializer::JSON 6.80 - Search::Elasticsearch::Serializer::JSON::Cpanel 6.80 - Search::Elasticsearch::Serializer::JSON::PP 6.80 - Search::Elasticsearch::Serializer::JSON::XS 6.80 - Search::Elasticsearch::TestServer 6.80 - Search::Elasticsearch::Transport 6.80 - Search::Elasticsearch::Util 6.80 + Search-Elasticsearch-7.30 + pathname: E/EZ/EZIMUEL/Search-Elasticsearch-7.30.tar.gz + provides: + Search::Elasticsearch 7.30 + Search::Elasticsearch::Client::7_0 7.30 + Search::Elasticsearch::Client::7_0::Bulk 7.30 + Search::Elasticsearch::Client::7_0::Direct 7.30 + Search::Elasticsearch::Client::7_0::Direct::CCR 7.30 + Search::Elasticsearch::Client::7_0::Direct::Cat 7.30 + Search::Elasticsearch::Client::7_0::Direct::Cluster 7.30 + Search::Elasticsearch::Client::7_0::Direct::DataFrame 7.30 + Search::Elasticsearch::Client::7_0::Direct::Graph 7.30 + Search::Elasticsearch::Client::7_0::Direct::ILM 7.30 + Search::Elasticsearch::Client::7_0::Direct::Indices 7.30 + Search::Elasticsearch::Client::7_0::Direct::Ingest 7.30 + Search::Elasticsearch::Client::7_0::Direct::License 7.30 + Search::Elasticsearch::Client::7_0::Direct::ML 7.30 + Search::Elasticsearch::Client::7_0::Direct::Migration 7.30 + Search::Elasticsearch::Client::7_0::Direct::Monitoring 7.30 + Search::Elasticsearch::Client::7_0::Direct::Nodes 7.30 + Search::Elasticsearch::Client::7_0::Direct::Rollup 7.30 + Search::Elasticsearch::Client::7_0::Direct::SQL 7.30 + Search::Elasticsearch::Client::7_0::Direct::SSL 7.30 + Search::Elasticsearch::Client::7_0::Direct::Security 7.30 + Search::Elasticsearch::Client::7_0::Direct::Snapshot 7.30 + Search::Elasticsearch::Client::7_0::Direct::Tasks 7.30 + Search::Elasticsearch::Client::7_0::Direct::Watcher 7.30 + Search::Elasticsearch::Client::7_0::Direct::XPack 7.30 + Search::Elasticsearch::Client::7_0::Role::API 7.30 + Search::Elasticsearch::Client::7_0::Role::Bulk 7.30 + Search::Elasticsearch::Client::7_0::Role::Scroll 7.30 + Search::Elasticsearch::Client::7_0::Scroll 7.30 + Search::Elasticsearch::Client::7_0::TestServer 7.30 + Search::Elasticsearch::Cxn::Factory 7.30 + Search::Elasticsearch::Cxn::HTTPTiny 7.30 + Search::Elasticsearch::Cxn::LWP 7.30 + Search::Elasticsearch::CxnPool::Sniff 7.30 + Search::Elasticsearch::CxnPool::Static 7.30 + Search::Elasticsearch::CxnPool::Static::NoPing 7.30 + Search::Elasticsearch::Error 7.30 + Search::Elasticsearch::Logger::LogAny 7.30 + Search::Elasticsearch::Role::API 7.30 + Search::Elasticsearch::Role::Client 7.30 + Search::Elasticsearch::Role::Client::Direct 7.30 + Search::Elasticsearch::Role::Cxn 7.30 + Search::Elasticsearch::Role::CxnPool 7.30 + Search::Elasticsearch::Role::CxnPool::Sniff 7.30 + Search::Elasticsearch::Role::CxnPool::Static 7.30 + Search::Elasticsearch::Role::CxnPool::Static::NoPing 7.30 + Search::Elasticsearch::Role::Is_Sync 7.30 + Search::Elasticsearch::Role::Logger 7.30 + Search::Elasticsearch::Role::Serializer 7.30 + Search::Elasticsearch::Role::Serializer::JSON 7.30 + Search::Elasticsearch::Role::Transport 7.30 + Search::Elasticsearch::Serializer::JSON 7.30 + Search::Elasticsearch::Serializer::JSON::Cpanel 7.30 + Search::Elasticsearch::Serializer::JSON::PP 7.30 + Search::Elasticsearch::Serializer::JSON::XS 7.30 + Search::Elasticsearch::TestServer 7.30 + Search::Elasticsearch::Transport 7.30 + Search::Elasticsearch::Util 7.30 requirements: Any::URI::Escape 0 Data::Dumper 0 @@ -6537,7 +6728,7 @@ DISTRIBUTIONS File::Temp 0 HTTP::Headers 0 HTTP::Request 0 - HTTP::Tiny 0.043 + HTTP::Tiny 0.076 IO::Compress::Deflate 0 IO::Compress::Gzip 0 IO::Select 0 @@ -6566,41 +6757,41 @@ DISTRIBUTIONS overload 0 strict 0 warnings 0 - Selenium-Remote-Driver-1.37 - pathname: T/TE/TEODESIAN/Selenium-Remote-Driver-1.37.tar.gz - provides: - Selenium::ActionChains 1.37 - Selenium::CanStartBinary 1.37 - Selenium::CanStartBinary::FindBinary 1.37 - Selenium::CanStartBinary::ProbePort 1.37 - Selenium::Chrome 1.37 - Selenium::Edge 1.37 - Selenium::Firefox 1.37 - Selenium::Firefox::Binary 1.37 - Selenium::Firefox::Profile 1.37 - Selenium::InternetExplorer 1.37 - Selenium::PhantomJS 1.37 - Selenium::Remote::Commands 1.37 - Selenium::Remote::Driver 1.37 - Selenium::Remote::Driver::CanSetWebdriverContext 1.37 - Selenium::Remote::Driver::Firefox::Profile 1.37 - Selenium::Remote::ErrorHandler 1.37 - Selenium::Remote::Finders 1.37 - Selenium::Remote::Mock::Commands 1.37 - Selenium::Remote::Mock::RemoteConnection 1.37 - Selenium::Remote::RemoteConnection 1.37 - Selenium::Remote::Spec 1.37 - Selenium::Remote::WDKeys 1.37 - Selenium::Remote::WebElement 1.37 - Selenium::Waiter 1.37 - Test::Selenium::Chrome 1.37 - Test::Selenium::Edge 1.37 - Test::Selenium::Firefox 1.37 - Test::Selenium::InternetExplorer 1.37 - Test::Selenium::PhantomJS 1.37 - Test::Selenium::Remote::Driver 1.37 - Test::Selenium::Remote::Role::DoesTesting 1.37 - Test::Selenium::Remote::WebElement 1.37 + Selenium-Remote-Driver-1.39 + pathname: T/TE/TEODESIAN/Selenium-Remote-Driver-1.39.tar.gz + provides: + Selenium::ActionChains 1.39 + Selenium::CanStartBinary 1.39 + Selenium::CanStartBinary::FindBinary 1.39 + Selenium::CanStartBinary::ProbePort 1.39 + Selenium::Chrome 1.39 + Selenium::Edge 1.39 + Selenium::Firefox 1.39 + Selenium::Firefox::Binary 1.39 + Selenium::Firefox::Profile 1.39 + Selenium::InternetExplorer 1.39 + Selenium::PhantomJS 1.39 + Selenium::Remote::Commands 1.39 + Selenium::Remote::Driver 1.39 + Selenium::Remote::Driver::CanSetWebdriverContext 1.39 + Selenium::Remote::Driver::Firefox::Profile 1.39 + Selenium::Remote::ErrorHandler 1.39 + Selenium::Remote::Finders 1.39 + Selenium::Remote::Mock::Commands 1.39 + Selenium::Remote::Mock::RemoteConnection 1.39 + Selenium::Remote::RemoteConnection 1.39 + Selenium::Remote::Spec 1.39 + Selenium::Remote::WDKeys 1.39 + Selenium::Remote::WebElement 1.39 + Selenium::Waiter 1.39 + Test::Selenium::Chrome 1.39 + Test::Selenium::Edge 1.39 + Test::Selenium::Firefox 1.39 + Test::Selenium::InternetExplorer 1.39 + Test::Selenium::PhantomJS 1.39 + Test::Selenium::Remote::Driver 1.39 + Test::Selenium::Remote::Role::DoesTesting 1.39 + Test::Selenium::Remote::WebElement 1.39 requirements: Archive::Zip 0 Carp 0 @@ -6641,10 +6832,10 @@ DISTRIBUTIONS perl 5.010 strict 0 warnings 0 - Sentry-Raven-1.12 - pathname: Q/QR/QRRY/Sentry-Raven-1.12.tar.gz + Sentry-Raven-1.14 + pathname: Q/QR/QRRY/Sentry-Raven-1.14.tar.gz provides: - Sentry::Raven 1.12 + Sentry::Raven 1.14 Sentry::Raven::Processor::RemoveStackVariables undef requirements: Data::Dump 0 @@ -6652,11 +6843,13 @@ DISTRIBUTIONS English 0 ExtUtils::MakeMaker 0 File::Basename 0 + File::Slurp 0 HTTP::Request::Common 0 HTTP::Status 0 JSON::XS 0 LWP::Protocol::https 0 LWP::UserAgent 0 + List::Util 0 Moo 0 MooX::Types::MooseLike::Base 0 Sys::Hostname 0 @@ -6664,38 +6857,40 @@ DISTRIBUTIONS URI 0 UUID::Tiny 0 perl 5.008 - Sereal-4.011 - pathname: Y/YV/YVES/Sereal-4.011.tar.gz + Sereal-4.018 + pathname: Y/YV/YVES/Sereal-4.018.tar.gz provides: - Sereal 4.011 + Sereal 4.018 requirements: ExtUtils::MakeMaker 0 - Sereal::Decoder 4.011 - Sereal::Encoder 4.011 + Sereal::Decoder 4.018 + Sereal::Encoder 4.018 perl 5.008 - Sereal-Decoder-4.011 - pathname: Y/YV/YVES/Sereal-Decoder-4.011.tar.gz + Sereal-Decoder-4.018 + pathname: Y/YV/YVES/Sereal-Decoder-4.018.tar.gz provides: - Sereal::Decoder 4.011 - Sereal::Decoder::Constants 4.011 + Sereal::Decoder 4.018 + Sereal::Decoder::Constants 4.018 Sereal::Performance undef requirements: ExtUtils::MakeMaker 7.0 ExtUtils::ParseXS 2.21 File::Find 0 File::Path 0 + Test::LongString 0 XSLoader 0 perl 5.008 - Sereal-Encoder-4.011 - pathname: Y/YV/YVES/Sereal-Encoder-4.011.tar.gz + Sereal-Encoder-4.018 + pathname: Y/YV/YVES/Sereal-Encoder-4.018.tar.gz provides: - Sereal::Encoder 4.011 - Sereal::Encoder::Constants 4.011 + Sereal::Encoder 4.018 + Sereal::Encoder::Constants 4.018 requirements: ExtUtils::MakeMaker 7.0 ExtUtils::ParseXS 2.21 File::Find 0 File::Path 0 + Test::LongString 0 XSLoader 0 perl 5.008 Set-Infinite-0.65 @@ -6946,60 +7141,60 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 GD 1.14 Template 2.14 - Template-Toolkit-3.008 - pathname: A/AT/ATOOMIC/Template-Toolkit-3.008.tar.gz - provides: - Template 3.008 - Template::Base 3.008 - Template::Config 3.008 - Template::Constants 3.008 - Template::Context 3.008 - Template::Directive 3.008 - Template::Document 3.008 - Template::Exception 3.008 - Template::Filters 3.008 - Template::Grammar 3.008 - Template::Iterator 3.008 - Template::Monad::Assert 3.008 - Template::Monad::Scalar 3.008 - Template::Namespace::Constants 3.008 - Template::Parser 3.008 - Template::Perl 3.008 - Template::Plugin 3.008 - Template::Plugin::Assert 3.008 - Template::Plugin::CGI 3.008 - Template::Plugin::Datafile 3.008 - Template::Plugin::Date 3.008 - Template::Plugin::Date::Calc 3.008 - Template::Plugin::Date::Manip 3.008 - Template::Plugin::Directory 3.008 - Template::Plugin::Dumper 3.008 - Template::Plugin::File 3.008 - Template::Plugin::Filter 3.008 - Template::Plugin::Format 3.008 - Template::Plugin::HTML 3.008 - Template::Plugin::Image 3.008 - Template::Plugin::Iterator 3.008 - Template::Plugin::Math 3.008 - Template::Plugin::Pod 3.008 - Template::Plugin::Procedural 3.008 - Template::Plugin::Scalar 3.008 - Template::Plugin::String 3.008 - Template::Plugin::Table 3.008 - Template::Plugin::URL 3.008 - Template::Plugin::View 3.008 - Template::Plugin::Wrap 3.008 - Template::Plugins 3.008 - Template::Provider 3.008 - Template::Service 3.008 - Template::Stash 3.008 - Template::Stash::Context 3.008 + Template-Toolkit-3.009 + pathname: A/AT/ATOOMIC/Template-Toolkit-3.009.tar.gz + provides: + Template 3.009 + Template::Base 3.009 + Template::Config 3.009 + Template::Constants 3.009 + Template::Context 3.009 + Template::Directive 3.009 + Template::Document 3.009 + Template::Exception 3.009 + Template::Filters 3.009 + Template::Grammar 3.009 + Template::Iterator 3.009 + Template::Monad::Assert 3.009 + Template::Monad::Scalar 3.009 + Template::Namespace::Constants 3.009 + Template::Parser 3.009 + Template::Perl 3.009 + Template::Plugin 3.009 + Template::Plugin::Assert 3.009 + Template::Plugin::CGI 3.009 + Template::Plugin::Datafile 3.009 + Template::Plugin::Date 3.009 + Template::Plugin::Date::Calc 3.009 + Template::Plugin::Date::Manip 3.009 + Template::Plugin::Directory 3.009 + Template::Plugin::Dumper 3.009 + Template::Plugin::File 3.009 + Template::Plugin::Filter 3.009 + Template::Plugin::Format 3.009 + Template::Plugin::HTML 3.009 + Template::Plugin::Image 3.009 + Template::Plugin::Iterator 3.009 + Template::Plugin::Math 3.009 + Template::Plugin::Pod 3.009 + Template::Plugin::Procedural 3.009 + Template::Plugin::Scalar 3.009 + Template::Plugin::String 3.009 + Template::Plugin::Table 3.009 + Template::Plugin::URL 3.009 + Template::Plugin::View 3.009 + Template::Plugin::Wrap 3.009 + Template::Plugins 3.009 + Template::Provider 3.009 + Template::Service 3.009 + Template::Stash 3.009 + Template::Stash::Context 3.009 Template::Stash::XS undef - Template::Test 3.008 - Template::TieString 3.008 - Template::Toolkit 3.008 - Template::VMethods 3.008 - Template::View 3.008 + Template::Test 3.009 + Template::TieString 3.009 + Template::Toolkit 3.009 + Template::VMethods 3.009 + Template::View 3.009 requirements: AppConfig 1.56 ExtUtils::MakeMaker 0 @@ -7120,10 +7315,10 @@ DISTRIBUTIONS perl 5.006001 strict 0 warnings 0 - Test-Fatal-0.014 - pathname: R/RJ/RJBS/Test-Fatal-0.014.tar.gz + Test-Fatal-0.016 + pathname: R/RJ/RJBS/Test-Fatal-0.016.tar.gz provides: - Test::Fatal 0.014 + Test::Fatal 0.016 requirements: Carp 0 Exporter 5.57 @@ -7140,10 +7335,10 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 Test::Builder 0.12 Test::Builder::Tester 1.04 - Test-MockModule-v0.172.0 - pathname: G/GF/GFRANKS/Test-MockModule-v0.172.0.tar.gz + Test-MockModule-v0.176.0 + pathname: G/GF/GFRANKS/Test-MockModule-v0.176.0.tar.gz provides: - Test::MockModule v0.172.0 + Test::MockModule v0.176.0 requirements: Carp 0 Module::Build 0.38 @@ -7230,10 +7425,10 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Test-Requires-0.10 - pathname: T/TO/TOKUHIROM/Test-Requires-0.10.tar.gz + Test-Requires-0.11 + pathname: T/TO/TOKUHIROM/Test-Requires-0.11.tar.gz provides: - Test::Requires 0.10 + Test::Requires 0.11 requirements: ExtUtils::MakeMaker 6.64 Test::Builder::Module 0 @@ -7253,6 +7448,89 @@ DISTRIBUTIONS Test::Builder::Module 0 Test::More 0.88 perl 5.008_001 + Test-Simple-1.302183 + pathname: E/EX/EXODIST/Test-Simple-1.302183.tar.gz + provides: + Test2 1.302183 + Test2::API 1.302183 + Test2::API::Breakage 1.302183 + Test2::API::Context 1.302183 + Test2::API::Instance 1.302183 + Test2::API::InterceptResult 1.302183 + Test2::API::InterceptResult::Event 1.302183 + Test2::API::InterceptResult::Facet 1.302183 + Test2::API::InterceptResult::Hub 1.302183 + Test2::API::InterceptResult::Squasher 1.302183 + Test2::API::Stack 1.302183 + Test2::Event 1.302183 + Test2::Event::Bail 1.302183 + Test2::Event::Diag 1.302183 + Test2::Event::Encoding 1.302183 + Test2::Event::Exception 1.302183 + Test2::Event::Fail 1.302183 + Test2::Event::Generic 1.302183 + Test2::Event::Note 1.302183 + Test2::Event::Ok 1.302183 + Test2::Event::Pass 1.302183 + Test2::Event::Plan 1.302183 + Test2::Event::Skip 1.302183 + Test2::Event::Subtest 1.302183 + Test2::Event::TAP::Version 1.302183 + Test2::Event::V2 1.302183 + Test2::Event::Waiting 1.302183 + Test2::EventFacet 1.302183 + Test2::EventFacet::About 1.302183 + Test2::EventFacet::Amnesty 1.302183 + Test2::EventFacet::Assert 1.302183 + Test2::EventFacet::Control 1.302183 + Test2::EventFacet::Error 1.302183 + Test2::EventFacet::Hub 1.302183 + Test2::EventFacet::Info 1.302183 + Test2::EventFacet::Info::Table 1.302183 + Test2::EventFacet::Meta 1.302183 + Test2::EventFacet::Parent 1.302183 + Test2::EventFacet::Plan 1.302183 + Test2::EventFacet::Render 1.302183 + Test2::EventFacet::Trace 1.302183 + Test2::Formatter 1.302183 + Test2::Formatter::TAP 1.302183 + Test2::Hub 1.302183 + Test2::Hub::Interceptor 1.302183 + Test2::Hub::Interceptor::Terminator 1.302183 + Test2::Hub::Subtest 1.302183 + Test2::IPC 1.302183 + Test2::IPC::Driver 1.302183 + Test2::IPC::Driver::Files 1.302183 + Test2::Tools::Tiny 1.302183 + Test2::Util 1.302183 + Test2::Util::ExternalMeta 1.302183 + Test2::Util::Facets2Legacy 1.302183 + Test2::Util::HashBase 1.302183 + Test2::Util::Trace 1.302183 + Test::Builder 1.302183 + Test::Builder::Formatter 1.302183 + Test::Builder::IO::Scalar 2.114 + Test::Builder::Module 1.302183 + Test::Builder::Tester 1.302183 + Test::Builder::Tester::Color 1.302183 + Test::Builder::Tester::Tie 1.302183 + Test::Builder::TodoDiag 1.302183 + Test::More 1.302183 + Test::Simple 1.302183 + Test::Tester 1.302183 + Test::Tester::Capture 1.302183 + Test::Tester::CaptureRunner 1.302183 + Test::Tester::Delegate 1.302183 + Test::use::ok 1.302183 + ok 1.302183 + requirements: + ExtUtils::MakeMaker 0 + File::Spec 0 + File::Temp 0 + Scalar::Util 1.13 + Storable 0 + perl 5.006002 + utf8 0 Test-TCP-2.22 pathname: M/MI/MIYAGAWA/Test-TCP-2.22.tar.gz provides: @@ -7328,124 +7606,126 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Test2-Suite-0.000129 - pathname: E/EX/EXODIST/Test2-Suite-0.000129.tar.gz - provides: - Test2::AsyncSubtest 0.000129 - Test2::AsyncSubtest::Event::Attach 0.000129 - Test2::AsyncSubtest::Event::Detach 0.000129 - Test2::AsyncSubtest::Formatter 0.000129 - Test2::AsyncSubtest::Hub 0.000129 - Test2::Bundle 0.000129 - Test2::Bundle::Extended 0.000129 - Test2::Bundle::More 0.000129 - Test2::Bundle::Simple 0.000129 - Test2::Compare 0.000129 - Test2::Compare::Array 0.000129 - Test2::Compare::Bag 0.000129 - Test2::Compare::Base 0.000129 - Test2::Compare::Bool 0.000129 - Test2::Compare::Custom 0.000129 - Test2::Compare::DeepRef 0.000129 - Test2::Compare::Delta 0.000129 - Test2::Compare::Event 0.000129 - Test2::Compare::EventMeta 0.000129 - Test2::Compare::Float 0.000129 - Test2::Compare::Hash 0.000129 - Test2::Compare::Meta 0.000129 - Test2::Compare::Negatable 0.000129 - Test2::Compare::Number 0.000129 - Test2::Compare::Object 0.000129 - Test2::Compare::OrderedSubset 0.000129 - Test2::Compare::Pattern 0.000129 - Test2::Compare::Ref 0.000129 - Test2::Compare::Regex 0.000129 - Test2::Compare::Scalar 0.000129 - Test2::Compare::Set 0.000129 - Test2::Compare::String 0.000129 - Test2::Compare::Undef 0.000129 - Test2::Compare::Wildcard 0.000129 - Test2::Manual 0.000129 - Test2::Manual::Anatomy 0.000129 - Test2::Manual::Anatomy::API 0.000129 - Test2::Manual::Anatomy::Context 0.000129 - Test2::Manual::Anatomy::EndToEnd 0.000129 - Test2::Manual::Anatomy::Event 0.000129 - Test2::Manual::Anatomy::Hubs 0.000129 - Test2::Manual::Anatomy::IPC 0.000129 - Test2::Manual::Anatomy::Utilities 0.000129 - Test2::Manual::Contributing 0.000129 - Test2::Manual::Testing 0.000129 - Test2::Manual::Testing::Introduction 0.000129 - Test2::Manual::Testing::Migrating 0.000129 - Test2::Manual::Testing::Planning 0.000129 - Test2::Manual::Testing::Todo 0.000129 - Test2::Manual::Tooling 0.000129 - Test2::Manual::Tooling::FirstTool 0.000129 - Test2::Manual::Tooling::Formatter 0.000129 - Test2::Manual::Tooling::Nesting 0.000129 - Test2::Manual::Tooling::Plugin::TestExit 0.000129 - Test2::Manual::Tooling::Plugin::TestingDone 0.000129 - Test2::Manual::Tooling::Plugin::ToolCompletes 0.000129 - Test2::Manual::Tooling::Plugin::ToolStarts 0.000129 - Test2::Manual::Tooling::Subtest 0.000129 - Test2::Manual::Tooling::TestBuilder 0.000129 - Test2::Manual::Tooling::Testing 0.000129 - Test2::Mock 0.000129 - Test2::Plugin 0.000129 - Test2::Plugin::BailOnFail 0.000129 - Test2::Plugin::DieOnFail 0.000129 - Test2::Plugin::ExitSummary 0.000129 - Test2::Plugin::SRand 0.000129 - Test2::Plugin::Times 0.000129 - Test2::Plugin::UTF8 0.000129 - Test2::Require 0.000129 - Test2::Require::AuthorTesting 0.000129 - Test2::Require::EnvVar 0.000129 - Test2::Require::Fork 0.000129 - Test2::Require::Module 0.000129 - Test2::Require::Perl 0.000129 - Test2::Require::RealFork 0.000129 - Test2::Require::Threads 0.000129 - Test2::Suite 0.000129 - Test2::Todo 0.000129 - Test2::Tools 0.000129 - Test2::Tools::AsyncSubtest 0.000129 - Test2::Tools::Basic 0.000129 - Test2::Tools::Class 0.000129 - Test2::Tools::ClassicCompare 0.000129 - Test2::Tools::Compare 0.000129 - Test2::Tools::Defer 0.000129 - Test2::Tools::Encoding 0.000129 - Test2::Tools::Event 0.000129 - Test2::Tools::Exception 0.000129 - Test2::Tools::Exports 0.000129 - Test2::Tools::GenTemp 0.000129 - Test2::Tools::Grab 0.000129 - Test2::Tools::Mock 0.000129 - Test2::Tools::Ref 0.000129 - Test2::Tools::Spec 0.000129 - Test2::Tools::Subtest 0.000129 - Test2::Tools::Target 0.000129 - Test2::Tools::Tester 0.000129 - Test2::Tools::Warnings 0.000129 - Test2::Util::Grabber 0.000129 - Test2::Util::Ref 0.000129 - Test2::Util::Stash 0.000129 - Test2::Util::Sub 0.000129 - Test2::Util::Table 0.000129 - Test2::Util::Table::Cell 0.000129 - Test2::Util::Table::LineBreak 0.000129 - Test2::Util::Term 0.000129 - Test2::Util::Times 0.000129 - Test2::V0 0.000129 - Test2::Workflow 0.000129 - Test2::Workflow::BlockBase 0.000129 - Test2::Workflow::Build 0.000129 - Test2::Workflow::Runner 0.000129 - Test2::Workflow::Task 0.000129 - Test2::Workflow::Task::Action 0.000129 - Test2::Workflow::Task::Group 0.000129 + Test2-Suite-0.000139 + pathname: E/EX/EXODIST/Test2-Suite-0.000139.tar.gz + provides: + Test2::AsyncSubtest 0.000139 + Test2::AsyncSubtest::Event::Attach 0.000139 + Test2::AsyncSubtest::Event::Detach 0.000139 + Test2::AsyncSubtest::Formatter 0.000139 + Test2::AsyncSubtest::Hub 0.000139 + Test2::Bundle 0.000139 + Test2::Bundle::Extended 0.000139 + Test2::Bundle::More 0.000139 + Test2::Bundle::Simple 0.000139 + Test2::Compare 0.000139 + Test2::Compare::Array 0.000139 + Test2::Compare::Bag 0.000139 + Test2::Compare::Base 0.000139 + Test2::Compare::Bool 0.000139 + Test2::Compare::Custom 0.000139 + Test2::Compare::DeepRef 0.000139 + Test2::Compare::Delta 0.000139 + Test2::Compare::Event 0.000139 + Test2::Compare::EventMeta 0.000139 + Test2::Compare::Float 0.000139 + Test2::Compare::Hash 0.000139 + Test2::Compare::Isa 0.000139 + Test2::Compare::Meta 0.000139 + Test2::Compare::Negatable 0.000139 + Test2::Compare::Number 0.000139 + Test2::Compare::Object 0.000139 + Test2::Compare::OrderedSubset 0.000139 + Test2::Compare::Pattern 0.000139 + Test2::Compare::Ref 0.000139 + Test2::Compare::Regex 0.000139 + Test2::Compare::Scalar 0.000139 + Test2::Compare::Set 0.000139 + Test2::Compare::String 0.000139 + Test2::Compare::Undef 0.000139 + Test2::Compare::Wildcard 0.000139 + Test2::Manual 0.000139 + Test2::Manual::Anatomy 0.000139 + Test2::Manual::Anatomy::API 0.000139 + Test2::Manual::Anatomy::Context 0.000139 + Test2::Manual::Anatomy::EndToEnd 0.000139 + Test2::Manual::Anatomy::Event 0.000139 + Test2::Manual::Anatomy::Hubs 0.000139 + Test2::Manual::Anatomy::IPC 0.000139 + Test2::Manual::Anatomy::Utilities 0.000139 + Test2::Manual::Concurrency 0.000139 + Test2::Manual::Contributing 0.000139 + Test2::Manual::Testing 0.000139 + Test2::Manual::Testing::Introduction 0.000139 + Test2::Manual::Testing::Migrating 0.000139 + Test2::Manual::Testing::Planning 0.000139 + Test2::Manual::Testing::Todo 0.000139 + Test2::Manual::Tooling 0.000139 + Test2::Manual::Tooling::FirstTool 0.000139 + Test2::Manual::Tooling::Formatter 0.000139 + Test2::Manual::Tooling::Nesting 0.000139 + Test2::Manual::Tooling::Plugin::TestExit 0.000139 + Test2::Manual::Tooling::Plugin::TestingDone 0.000139 + Test2::Manual::Tooling::Plugin::ToolCompletes 0.000139 + Test2::Manual::Tooling::Plugin::ToolStarts 0.000139 + Test2::Manual::Tooling::Subtest 0.000139 + Test2::Manual::Tooling::TestBuilder 0.000139 + Test2::Manual::Tooling::Testing 0.000139 + Test2::Mock 0.000139 + Test2::Plugin 0.000139 + Test2::Plugin::BailOnFail 0.000139 + Test2::Plugin::DieOnFail 0.000139 + Test2::Plugin::ExitSummary 0.000139 + Test2::Plugin::SRand 0.000139 + Test2::Plugin::Times 0.000139 + Test2::Plugin::UTF8 0.000139 + Test2::Require 0.000139 + Test2::Require::AuthorTesting 0.000139 + Test2::Require::EnvVar 0.000139 + Test2::Require::Fork 0.000139 + Test2::Require::Module 0.000139 + Test2::Require::Perl 0.000139 + Test2::Require::RealFork 0.000139 + Test2::Require::Threads 0.000139 + Test2::Suite 0.000139 + Test2::Todo 0.000139 + Test2::Tools 0.000139 + Test2::Tools::AsyncSubtest 0.000139 + Test2::Tools::Basic 0.000139 + Test2::Tools::Class 0.000139 + Test2::Tools::ClassicCompare 0.000139 + Test2::Tools::Compare 0.000139 + Test2::Tools::Defer 0.000139 + Test2::Tools::Encoding 0.000139 + Test2::Tools::Event 0.000139 + Test2::Tools::Exception 0.000139 + Test2::Tools::Exports 0.000139 + Test2::Tools::GenTemp 0.000139 + Test2::Tools::Grab 0.000139 + Test2::Tools::Mock 0.000139 + Test2::Tools::Ref 0.000139 + Test2::Tools::Spec 0.000139 + Test2::Tools::Subtest 0.000139 + Test2::Tools::Target 0.000139 + Test2::Tools::Tester 0.000139 + Test2::Tools::Warnings 0.000139 + Test2::Util::Grabber 0.000139 + Test2::Util::Ref 0.000139 + Test2::Util::Stash 0.000139 + Test2::Util::Sub 0.000139 + Test2::Util::Table 0.000139 + Test2::Util::Table::Cell 0.000139 + Test2::Util::Table::LineBreak 0.000139 + Test2::Util::Term 0.000139 + Test2::Util::Times 0.000139 + Test2::V0 0.000139 + Test2::Workflow 0.000139 + Test2::Workflow::BlockBase 0.000139 + Test2::Workflow::Build 0.000139 + Test2::Workflow::Runner 0.000139 + Test2::Workflow::Task 0.000139 + Test2::Workflow::Task::Action 0.000139 + Test2::Workflow::Task::Group 0.000139 requirements: B 0 Carp 0 @@ -7458,7 +7738,7 @@ DISTRIBUTIONS Scope::Guard 0 Sub::Info 0.002 Term::Table 0.013 - Test2::API 1.302158 + Test2::API 1.302176 Time::HiRes 0 overload 0 perl 5.008001 @@ -7470,10 +7750,10 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 Test::More 0 - Text-CSV_XS-1.41 - pathname: H/HM/HMBRAND/Text-CSV_XS-1.41.tgz + Text-CSV_XS-1.45 + pathname: H/HM/HMBRAND/Text-CSV_XS-1.45.tgz provides: - Text::CSV_XS 1.41 + Text::CSV_XS 1.45 requirements: Config 0 ExtUtils::MakeMaker 0 @@ -7532,11 +7812,11 @@ DISTRIBUTIONS Test::More 0.42 Text::Markdown v1.0.26 perl 5.008 - Text-Template-1.58 - pathname: M/MS/MSCHOUT/Text-Template-1.58.tar.gz + Text-Template-1.59 + pathname: M/MS/MSCHOUT/Text-Template-1.59.tar.gz provides: - Text::Template 1.58 - Text::Template::Preprocess 1.58 + Text::Template 1.59 + Text::Template::Preprocess 1.59 requirements: Carp 0 Encode 0 @@ -7546,6 +7826,13 @@ DISTRIBUTIONS perl 5.008 strict 0 warnings 0 + Text-Unidecode-1.30 + pathname: S/SB/SBURKE/Text-Unidecode-1.30.tar.gz + provides: + Text::Unidecode 1.30 + requirements: + ExtUtils::MakeMaker 0 + perl 5.008 TheSchwartz-1.15 pathname: A/AK/AKIYM/TheSchwartz-1.15.tar.gz provides: @@ -7605,8 +7892,8 @@ DISTRIBUTIONS Test::More 0 Test::use::ok 0 Tie::RefHash 0 - TimeDate-2.32 - pathname: A/AT/ATOOMIC/TimeDate-2.32.tar.gz + TimeDate-2.33 + pathname: A/AT/ATOOMIC/TimeDate-2.33.tar.gz provides: Date::Format 2.24 Date::Format::Generic 2.24 @@ -7645,7 +7932,7 @@ DISTRIBUTIONS Date::Language::TigrinyaEritrean 1.00 Date::Language::TigrinyaEthiopian 1.00 Date::Language::Turkish 1.0 - Date::Parse 2.32 + Date::Parse 2.33 Time::Zone 2.24 TimeDate 1.21 requirements: @@ -7662,107 +7949,110 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Type-Tiny-1.010002 - pathname: T/TO/TOBYINK/Type-Tiny-1.010002.tar.gz - provides: - Devel::TypeTiny::Perl56Compat 1.010002 - Devel::TypeTiny::Perl58Compat 1.010002 - Error::TypeTiny 1.010002 - Error::TypeTiny::Assertion 1.010002 - Error::TypeTiny::Compilation 1.010002 - Error::TypeTiny::WrongNumberOfParameters 1.010002 - Eval::TypeTiny 1.010002 - Reply::Plugin::TypeTiny 1.010002 - Test::TypeTiny 1.010002 - Type::Coercion 1.010002 - Type::Coercion::FromMoose 1.010002 - Type::Coercion::Union 1.010002 - Type::Library 1.010002 - Type::Params 1.010002 - Type::Parser 1.010002 - Type::Registry 1.010002 - Type::Tiny 1.010002 - Type::Tiny::Class 1.010002 - Type::Tiny::ConstrainedObject 1.010002 - Type::Tiny::Duck 1.010002 - Type::Tiny::Enum 1.010002 - Type::Tiny::Intersection 1.010002 - Type::Tiny::Role 1.010002 - Type::Tiny::Union 1.010002 - Type::Utils 1.010002 - Types::Common::Numeric 1.010002 - Types::Common::String 1.010002 - Types::Standard 1.010002 - Types::Standard::ArrayRef 1.010002 - Types::Standard::CycleTuple 1.010002 - Types::Standard::Dict 1.010002 - Types::Standard::HashRef 1.010002 - Types::Standard::Map 1.010002 - Types::Standard::ScalarRef 1.010002 - Types::Standard::StrMatch 1.010002 - Types::Standard::Tied 1.010002 - Types::Standard::Tuple 1.010002 - Types::TypeTiny 1.010002 + Type-Tiny-1.012001 + pathname: T/TO/TOBYINK/Type-Tiny-1.012001.tar.gz + provides: + Devel::TypeTiny::Perl56Compat 1.012001 + Devel::TypeTiny::Perl58Compat 1.012001 + Error::TypeTiny 1.012001 + Error::TypeTiny::Assertion 1.012001 + Error::TypeTiny::Compilation 1.012001 + Error::TypeTiny::WrongNumberOfParameters 1.012001 + Eval::TypeTiny 1.012001 + Reply::Plugin::TypeTiny 1.012001 + Test::TypeTiny 1.012001 + Type::Coercion 1.012001 + Type::Coercion::FromMoose 1.012001 + Type::Coercion::Union 1.012001 + Type::Library 1.012001 + Type::Params 1.012001 + Type::Parser 1.012001 + Type::Parser::AstBuilder undef + Type::Parser::Token undef + Type::Parser::TokenStream undef + Type::Registry 1.012001 + Type::Tiny 1.012001 + Type::Tiny::Class 1.012001 + Type::Tiny::ConstrainedObject 1.012001 + Type::Tiny::Duck 1.012001 + Type::Tiny::Enum 1.012001 + Type::Tiny::Intersection 1.012001 + Type::Tiny::Role 1.012001 + Type::Tiny::Union 1.012001 + Type::Utils 1.012001 + Types::Common::Numeric 1.012001 + Types::Common::String 1.012001 + Types::Standard 1.012001 + Types::Standard::ArrayRef 1.012001 + Types::Standard::CycleTuple 1.012001 + Types::Standard::Dict 1.012001 + Types::Standard::HashRef 1.012001 + Types::Standard::Map 1.012001 + Types::Standard::ScalarRef 1.012001 + Types::Standard::StrMatch 1.012001 + Types::Standard::Tied 1.012001 + Types::Standard::Tuple 1.012001 + Types::TypeTiny 1.012001 requirements: Exporter::Tiny 1.000000 ExtUtils::MakeMaker 6.17 perl 5.006001 - Types-Serialiser-1.0 - pathname: M/ML/MLEHMANN/Types-Serialiser-1.0.tar.gz + Types-Serialiser-1.01 + pathname: M/ML/MLEHMANN/Types-Serialiser-1.01.tar.gz provides: - JSON::PP::Boolean 1.0 - Types::Serialiser 1.0 - Types::Serialiser::BooleanBase 1.0 - Types::Serialiser::Error 1.0 + JSON::PP::Boolean 1.01 + Types::Serialiser 1.01 + Types::Serialiser::BooleanBase 1.01 + Types::Serialiser::Error 1.01 requirements: ExtUtils::MakeMaker 0 common::sense 0 - URI-1.76 - pathname: O/OA/OALDERS/URI-1.76.tar.gz - provides: - URI 1.76 - URI::Escape 3.31 - URI::Heuristic 4.20 - URI::IRI 1.76 - URI::QueryParam 1.76 - URI::Split 1.76 - URI::URL 5.04 - URI::WithBase 2.20 - URI::data 1.76 - URI::file 4.21 - URI::file::Base 1.76 - URI::file::FAT 1.76 - URI::file::Mac 1.76 - URI::file::OS2 1.76 - URI::file::QNX 1.76 - URI::file::Unix 1.76 - URI::file::Win32 1.76 - URI::ftp 1.76 - URI::gopher 1.76 - URI::http 1.76 - URI::https 1.76 - URI::ldap 1.76 - URI::ldapi 1.76 - URI::ldaps 1.76 - URI::mailto 1.76 - URI::mms 1.76 - URI::news 1.76 - URI::nntp 1.76 - URI::pop 1.76 - URI::rlogin 1.76 - URI::rsync 1.76 - URI::rtsp 1.76 - URI::rtspu 1.76 - URI::sftp 1.76 - URI::sip 1.76 - URI::sips 1.76 - URI::snews 1.76 - URI::ssh 1.76 - URI::telnet 1.76 - URI::tn3270 1.76 - URI::urn 1.76 - URI::urn::isbn 1.76 - URI::urn::oid 1.76 + URI-5.06 + pathname: O/OA/OALDERS/URI-5.06.tar.gz + provides: + URI 5.06 + URI::Escape 5.06 + URI::Heuristic 5.06 + URI::IRI 5.06 + URI::QueryParam 5.06 + URI::Split 5.06 + URI::URL 5.06 + URI::WithBase 5.06 + URI::data 5.06 + URI::file 5.06 + URI::file::Base 5.06 + URI::file::FAT 5.06 + URI::file::Mac 5.06 + URI::file::OS2 5.06 + URI::file::QNX 5.06 + URI::file::Unix 5.06 + URI::file::Win32 5.06 + URI::ftp 5.06 + URI::gopher 5.06 + URI::http 5.06 + URI::https 5.06 + URI::ldap 5.06 + URI::ldapi 5.06 + URI::ldaps 5.06 + URI::mailto 5.06 + URI::mms 5.06 + URI::news 5.06 + URI::nntp 5.06 + URI::pop 5.06 + URI::rlogin 5.06 + URI::rsync 5.06 + URI::rtsp 5.06 + URI::rtspu 5.06 + URI::sftp 5.06 + URI::sip 5.06 + URI::sips 5.06 + URI::snews 5.06 + URI::ssh 5.06 + URI::telnet 5.06 + URI::tn3270 5.06 + URI::urn 5.06 + URI::urn::isbn 5.06 + URI::urn::oid 5.06 requirements: Carp 0 Cwd 0 @@ -7979,13 +8269,13 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 SOAP::Lite 0.716 SOAP::Transport::TCP 0.715 - XString-0.002 - pathname: A/AT/ATOOMIC/XString-0.002.tar.gz + XString-0.005 + pathname: A/AT/ATOOMIC/XString-0.005.tar.gz provides: - XString 0.002 + XString 0.005 requirements: ExtUtils::MakeMaker 0 - perl 5.010 + perl 5.008 YAML-1.30 pathname: T/TI/TINITA/YAML-1.30.tar.gz provides: @@ -8014,15 +8304,62 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 perl 5.008001 - YAML-LibYAML-0.82 - pathname: T/TI/TINITA/YAML-LibYAML-0.82.tar.gz - provides: - YAML::LibYAML 0.82 - YAML::XS 0.82 - YAML::XS::LibYAML undef + YAML-PP-0.026 + pathname: T/TI/TINITA/YAML-PP-0.026.tar.gz + provides: + YAML::PP 0.026 + YAML::PP::Common 0.026 + YAML::PP::Constructor 0.026 + YAML::PP::Dumper 0.026 + YAML::PP::Emitter 0.026 + YAML::PP::Exception 0.026 + YAML::PP::Grammar 0.026 + YAML::PP::Highlight 0.026 + YAML::PP::Lexer 0.026 + YAML::PP::Loader 0.026 + YAML::PP::Parser 0.026 + YAML::PP::Perl 0.026 + YAML::PP::Preserve::Array 0.026 + YAML::PP::Preserve::Hash 0.026 + YAML::PP::Preserve::Scalar 0.026 + YAML::PP::Reader 0.026 + YAML::PP::Reader::File 0.026 + YAML::PP::Render 0.026 + YAML::PP::Representer 0.026 + YAML::PP::Schema 0.026 + YAML::PP::Schema::Binary 0.026 + YAML::PP::Schema::Core 0.026 + YAML::PP::Schema::Failsafe 0.026 + YAML::PP::Schema::Include 0.026 + YAML::PP::Schema::JSON 0.026 + YAML::PP::Schema::Merge 0.026 + YAML::PP::Schema::Perl 0.026 + YAML::PP::Schema::Tie::IxHash 0.026 + YAML::PP::Schema::YAML1_1 0.026 + YAML::PP::Type::MergeKey 0.026 + YAML::PP::Writer 0.026 + YAML::PP::Writer::File 0.026 requirements: + B 0 + B::Deparse 0 + Carp 0 + Data::Dumper 0 + Encode 0 + Exporter 0 ExtUtils::MakeMaker 0 - perl 5.008001 + File::Basename 0 + Getopt::Long 0 + MIME::Base64 0 + Module::Load 0 + Scalar::Util 1.07 + Tie::Array 0 + Tie::Hash 0 + base 0 + constant 0 + overload 0 + perl 5.008000 + strict 0 + warnings 0 bareword-filehandles-0.007 pathname: I/IL/ILMARI/bareword-filehandles-0.007.tar.gz provides: @@ -8061,32 +8398,32 @@ DISTRIBUTIONS XSLoader 0 lib 0 perl 5.008001 - libwww-perl-6.44 - pathname: O/OA/OALDERS/libwww-perl-6.44.tar.gz - provides: - LWP 6.44 - LWP::Authen::Basic 6.44 - LWP::Authen::Digest 6.44 - LWP::Authen::Ntlm 6.44 - LWP::ConnCache 6.44 - LWP::Debug 6.44 - LWP::Debug::TraceHTTP 6.44 - LWP::DebugFile 6.44 - LWP::MemberMixin 6.44 - LWP::Protocol 6.44 - LWP::Protocol::cpan 6.44 - LWP::Protocol::data 6.44 - LWP::Protocol::file 6.44 - LWP::Protocol::ftp 6.44 - LWP::Protocol::gopher 6.44 - LWP::Protocol::http 6.44 - LWP::Protocol::loopback 6.44 - LWP::Protocol::mailto 6.44 - LWP::Protocol::nntp 6.44 - LWP::Protocol::nogo 6.44 - LWP::RobotUA 6.44 - LWP::Simple 6.44 - LWP::UserAgent 6.44 + libwww-perl-6.52 + pathname: O/OA/OALDERS/libwww-perl-6.52.tar.gz + provides: + LWP 6.52 + LWP::Authen::Basic 6.52 + LWP::Authen::Digest 6.52 + LWP::Authen::Ntlm 6.52 + LWP::ConnCache 6.52 + LWP::Debug 6.52 + LWP::Debug::TraceHTTP 6.52 + LWP::DebugFile 6.52 + LWP::MemberMixin 6.52 + LWP::Protocol 6.52 + LWP::Protocol::cpan 6.52 + LWP::Protocol::data 6.52 + LWP::Protocol::file 6.52 + LWP::Protocol::ftp 6.52 + LWP::Protocol::gopher 6.52 + LWP::Protocol::http 6.52 + LWP::Protocol::loopback 6.52 + LWP::Protocol::mailto 6.52 + LWP::Protocol::nntp 6.52 + LWP::Protocol::nogo 6.52 + LWP::RobotUA 6.52 + LWP::Simple 6.52 + LWP::UserAgent 6.52 libwww::perl undef requirements: CPAN::Meta::Requirements 2.120620 @@ -8106,7 +8443,7 @@ DISTRIBUTIONS HTTP::Request 6 HTTP::Request::Common 6 HTTP::Response 6 - HTTP::Status 6 + HTTP::Status 6.07 IO::Select 0 IO::Socket 0 LWP::MediaTypes 6 diff --git a/docker-compose.yml b/docker-compose.yml index 2bfedb8955..12d9b16c0a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -91,6 +91,25 @@ services: - bmo.db - memcached + bmo.iamd: + build: *bmo_build + command: + - perl + - extensions/MozillaIAM/bin/person_update.pl + - start + - '-d' + - '-f' + volumes: + - bmo-data-dir:/app/data + tmpfs: + - /tmp + - /run + environment: *bmo_env + restart: always + depends_on: + - bmo.db + - memcached + bmo.db: image: mysql:5.7 volumes: diff --git a/extensions/BMO/Extension.pm b/extensions/BMO/Extension.pm index 85990926a0..0718a5c67d 100755 --- a/extensions/BMO/Extension.pm +++ b/extensions/BMO/Extension.pm @@ -844,7 +844,8 @@ sub object_end_of_create { my $user = $args->{object}; # Log real IP addresses for auditing - Bugzilla->audit(sprintf('<%s> created user %s', remote_ip(), $user->login)); + Bugzilla->audit( + sprintf('%s <%s> created user %s', Bugzilla->user->login, remote_ip(), $user->login)); # Add default searches to new user's footer my $dbh = Bugzilla->dbh; diff --git a/extensions/BMO/template/en/default/pages/group_members.html.tmpl b/extensions/BMO/template/en/default/pages/group_members.html.tmpl index 20fbee5c12..64342829de 100644 --- a/extensions/BMO/template/en/default/pages/group_members.html.tmpl +++ b/extensions/BMO/template/en/default/pages/group_members.html.tmpl @@ -50,7 +50,7 @@ Count Members [% IF privileged %] - 2FA, Last Seen (days ago) + IAM Username, 2FA, Last Seen (days ago) [% END %] @@ -93,6 +93,13 @@ [% IF privileged %] + + [% IF member.iam_username %] + [% member.iam_username FILTER html %] + [% ELSE %] + - + [% END %] + [% IF member.mfa %] [% member.mfa FILTER html %] diff --git a/extensions/GitHubAuth/Extension.pm b/extensions/GitHubAuth/Extension.pm index 46523d2fcf..0b6131bd88 100644 --- a/extensions/GitHubAuth/Extension.pm +++ b/extensions/GitHubAuth/Extension.pm @@ -79,7 +79,7 @@ sub config_modify_panels { my $user_info_class = first { $_->{name} eq 'user_info_class' } @$auth_panel_params; if ($user_info_class) { - push @{$user_info_class->{choices}}, "GitHubAuth,CGI"; + push @{$user_info_class->{choices}}, "GitHubAuth,CGI", "GitHubAuth,OAuth2,CGI"; } my $user_verify_class diff --git a/extensions/GitHubAuth/template/en/default/hook/account/auth/login-additional_methods.html.tmpl b/extensions/GitHubAuth/template/en/default/hook/account/auth/login-additional_methods.html.tmpl index f5e5ab11b2..6ac3c744d9 100644 --- a/extensions/GitHubAuth/template/en/default/hook/account/auth/login-additional_methods.html.tmpl +++ b/extensions/GitHubAuth/template/en/default/hook/account/auth/login-additional_methods.html.tmpl @@ -8,11 +8,10 @@ [% USE Bugzilla %] [% IF Param('user_info_class').split(',').contains('GitHubAuth') %]
- + - +
[% END %] diff --git a/extensions/GitHubAuth/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl b/extensions/GitHubAuth/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl index ba69911758..8e23dccc57 100644 --- a/extensions/GitHubAuth/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl +++ b/extensions/GitHubAuth/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl @@ -8,13 +8,11 @@ [% USE Bugzilla %] [% IF Param('user_info_class').split(',').contains('GitHubAuth') %] - -
- - - or -
-
+
+ + + +
[% END %] diff --git a/extensions/MozillaIAM/Config.pm b/extensions/MozillaIAM/Config.pm new file mode 100644 index 0000000000..e759efe415 --- /dev/null +++ b/extensions/MozillaIAM/Config.pm @@ -0,0 +1,17 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM; +use 5.10.1; +use strict; +use warnings; + +use constant NAME => 'MozillaIAM'; +use constant REQUIRED_MODULES => []; +use constant OPTIONAL_MODULES => []; + +__PACKAGE__->NAME; diff --git a/extensions/MozillaIAM/Extension.pm b/extensions/MozillaIAM/Extension.pm new file mode 100644 index 0000000000..5267543c69 --- /dev/null +++ b/extensions/MozillaIAM/Extension.pm @@ -0,0 +1,171 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM; + +use 5.10.1; +use strict; +use warnings; + +use base qw(Bugzilla::Extension); + +use Bugzilla::Constants; +use Bugzilla::Logging; +use Bugzilla::Token qw(issue_hash_token); +use Bugzilla::User; +use Bugzilla::Util qw(trim); + +use Bugzilla::Extension::MozillaIAM::Util + qw(add_staff_member get_access_token get_profile_by_email remove_staff_member); + +use Try::Tiny; + +our $VERSION = '1'; + +sub config_add_panels { + my ($self, $args) = @_; + my $modules = $args->{panel_modules}; + $modules->{MozillaIAM} = "Bugzilla::Extension::MozillaIAM::Config"; +} + +sub oauth2_client_pre_login { + my ($self, $args) = @_; + + return if !Bugzilla->params->{mozilla_iam_enabled}; + + my $userinfo = $args->{userinfo}; + my $iam_username = $userinfo->{email}; + + # First check to see if we are already linked with this account + my $bmo_email = Bugzilla->dbh->selectrow_array( + 'SELECT profiles.login_name + FROM profiles JOIN profiles_iam ON profiles.userid = profiles_iam.user_id + WHERE profiles_iam.iam_username = ?', undef, $iam_username + ); + + # If not, query the IAM system to see if they have a BMO address set + if (!$bmo_email) { + my $profile = get_profile_by_email($iam_username); + if ($profile && $profile->{bmo_email}) { + $bmo_email = $profile->{bmo_email}; + + # Save profile data for post login + $userinfo->{iam_profile_data} = $profile; + } + } + + if ($bmo_email && $bmo_email ne $iam_username) { + $userinfo->{email} = $bmo_email; + $userinfo->{iam_username} = $iam_username; + } +} + +sub oauth2_client_post_login { + my ($self, $args) = @_; + + return if !Bugzilla->params->{mozilla_iam_enabled}; + + my $userinfo = $args->{userinfo}; + my $iam_username = $userinfo->{iam_username} || $userinfo->{email}; + + my $profile = $userinfo->{iam_profile_data} + ||= get_profile_by_email($iam_username); + + if ($profile->{is_staff}) { + add_staff_member({ + bmo_email => $profile->{bmo_email}, + iam_username => $profile->{iam_username}, + real_name => $profile->{first_name} . ' ' . $profile->{last_name}, + is_staff => $profile->{is_staff}, + }); + } +} + + +sub oauth2_client_handle_redirect { + my ($self, $args) = @_; + my $cgi = Bugzilla->cgi; + my $userinfo = $args->{userinfo}; + + return if !Bugzilla->params->{mozilla_iam_enabled}; + + # Return if this request already came from the Mozilla IAM provider + # or the user is not logging in through the CGI login form. + return + if $userinfo + || !($cgi->param('Bugzilla_login') && $cgi->param('GoAheadAndLogIn')); + + my $login = $cgi->param('Bugzilla_login'); + my $user = Bugzilla::User->new({name => $login}); + + my $must_redirect = 0; + + # If the user has an IAM account associated then automatically redirect to + # Mozilla IAM provider. + if ($user && $user->iam_username) { + $must_redirect = 1; + } + + # If the users login matches a mandatory domain, then also redirect + my @mandatory_domains = split /\n/, + Bugzilla->params->{mozilla_iam_mandatory_domains}; + foreach my $domain (@mandatory_domains) { + $domain = trim($domain); + if ($login =~ /@\Q$domain\E$/) { + $must_redirect = 1; + last; + } + } + + if ($must_redirect) { + my $script_name = $cgi->script_name; + $script_name =~ s{^/}{}; + my $query = $cgi->canonicalize_query( + 'Bugzilla_login', 'Bugzilla_password', + 'GoAheadAndLogIn', 'Bugzilla_login_token' + ); + my $target + = Bugzilla->localconfig->basepath . $script_name . ($query ? "?$query" : ''); + + my $c = Bugzilla->request_cache->{mojo_controller}; + my $redirect_uri = $c->oauth2->redirect_uri($target); + my $authorize_url = $c->oauth2->auth_url('oauth2', + {state => issue_hash_token(['oauth2']), redirect_uri => $redirect_uri}); + + $cgi->redirect($authorize_url); + } + + return; +} + +sub object_end_of_update { + my ($self, $args) = @_; + my ($object, $old_object, $changes) = @$args{qw(object old_object changes)}; + + return + if !Bugzilla->params->{mozilla_iam_enabled} + || !$object->isa('Bugzilla::User'); + + # Remove mapping of profile_iam to profiles if a user has changed their email + if ($old_object->login ne $object->login && $old_object->iam_username) { + remove_staff_member({iam_username => $old_object->iam_username}); + } +} + +sub db_schema_abstract_schema { + my ($self, $args) = @_; + $args->{'schema'}->{'mozilla_iam_updates'} = { + FIELDS => [ + id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, + type => {TYPE => 'VARCHAR(255)', NOTNULL => 1}, + value => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, + mod_time => {TYPE => 'DATETIME', NOTNULL => 1} + ], + }; +} + +__PACKAGE__->NAME; diff --git a/extensions/MozillaIAM/bin/person_update.pl b/extensions/MozillaIAM/bin/person_update.pl new file mode 100644 index 0000000000..e285589c93 --- /dev/null +++ b/extensions/MozillaIAM/bin/person_update.pl @@ -0,0 +1,50 @@ +#!/usr/bin/env perl + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use 5.10.1; +use strict; +use warnings; + +use lib qw(. lib local/lib/perl5); + +BEGIN { + use Bugzilla; + Bugzilla->extensions; +} + +use Bugzilla::Extension::MozillaIAM::Daemon; +Bugzilla::Extension::MozillaIAM::Daemon->start(); + +=head1 NAME + +person_update.pl - Query MozillaIAM for interesting changes to Mozilla tracked accounts. + +=head1 SYNOPSIS + + person_update.pl [OPTIONS] COMMAND + + OPTIONS: + -f Run in the foreground (don't detach) + -d Output a lot of debugging information + -p file Specify the file where person_update.pl should store its current + process id. Defaults to F. + -n name What should this process call itself in the system log? + Defaults to the full path you used to invoke the script. + + COMMANDS: + start Starts a new person_update daemon if there isn't one running already + stop Stops a running person_update daemon + restart Stops a running person_update if one is running, and then + starts a new one. + check Report the current status of the daemon. + install On some *nix systems, this automatically installs and + configures person_update.pl as a system service so that it will + start every time the machine boots. + uninstall Removes the system service for person_update.pl. + help Display this usage info diff --git a/extensions/MozillaIAM/lib/API/V1/User.pm b/extensions/MozillaIAM/lib/API/V1/User.pm new file mode 100644 index 0000000000..3af0e0021a --- /dev/null +++ b/extensions/MozillaIAM/lib/API/V1/User.pm @@ -0,0 +1,69 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::API::V1::User; + +use 5.10.1; +use Mojo::Base qw( Mojolicious::Controller ); + +use Bugzilla::Extension::MozillaIAM::Util qw(verify_token); +use Bugzilla::Logging; + +use Date::Format; +use JSON::Validator::Joi qw(joi); + +sub setup_routes { + my ($class, $r) = @_; + $r->post('/mozillaiam/user/update')->to('MozillaIAM::API::V1::User#update'); + $r->post('/mozillaiam/v1/user/update')->to('MozillaIAM::API::V1::User#update'); +} + +# { +# "operation": update, +# "id": ad|Mozilla-LDAP|dinomcvouch, +# "time": {epoch timestamp}, +# } + +sub update { + my ($self) = @_; + + return $self->render(status => 200, text => 'OK!') + if !Bugzilla->params->{mozilla_iam_enabled}; + + # Verify JWT token + unless ($ENV{CI} || $ENV{NO_VERIFY_TOKEN}) { + my $authorization_header = $self->tx->req->headers->header('Authorization'); + verify_token($authorization_header) + || return $self->user_error('mozilla_iam_token_error'); + } + + # Validate JSON input + my $params = $self->req->json; + my @errors = joi->object->props( + operation => joi->string->enum(['create', 'update', 'delete'])->required, + id => joi->string->required, + time => joi->integer->required, + )->validate($params); + return $self->user_error('api_input_schema_error', {errors => \@errors}) + if @errors; + + my $operation = $params->{operation}; + my $user_id = $params->{id}; + my $mod_time = $params->{time}; + + DEBUG("operation: $operation user_id: $user_id, mod_time: $mod_time"); + + # Queue up the id to be processed by the person server + $mod_time = time2str('%Y-%m-%d %k-%M-S', $mod_time); + Bugzilla->dbh->do( + 'INSERT INTO mozilla_iam_updates (type, value, mod_time) VALUES (?, ?, ?)', + undef, $operation, $user_id, $mod_time); + + return $self->render(status => 200, text => 'OK!'); +} + +1; diff --git a/extensions/MozillaIAM/lib/Config.pm b/extensions/MozillaIAM/lib/Config.pm new file mode 100644 index 0000000000..2aa95e9e30 --- /dev/null +++ b/extensions/MozillaIAM/lib/Config.pm @@ -0,0 +1,32 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::Config; + +use 5.10.1; +use strict; +use warnings; + +use Bugzilla::Config::Common; + +our $sortkey = 1350; + +sub get_param_list { + my ($class) = @_; + + my @params = ( + {name => 'mozilla_iam_enabled', type => 'b', default => 0,}, + {name => 'mozilla_iam_person_api_uri', type => 't', default => '',}, + {name => 'mozilla_iam_person_api_client_id', type => 't', default => '',}, + {name => 'mozilla_iam_person_api_client_secret', type => 't', default => '',}, + {name => 'mozilla_iam_mandatory_domains', type => 'l', default => '',}, + ); + + return @params; +} + +1; diff --git a/extensions/MozillaIAM/lib/Constants.pm b/extensions/MozillaIAM/lib/Constants.pm new file mode 100644 index 0000000000..7813c8fa30 --- /dev/null +++ b/extensions/MozillaIAM/lib/Constants.pm @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::Constants; + +use 5.10.1; +use strict; +use warnings; + +use base qw(Exporter); +our @EXPORT = qw( + CIS_UPDATE_SECONDS + MANUAL_UPDATE_SECONDS + POLL_TIMEOUT +); + +use constant CIS_UPDATE_SECONDS => $ENV{CIS_UPDATE_SECONDS} // 10; +use constant MANUAL_UPDATE_SECONDS => $ENV{MANUAL_UPDATE_SECONDS} // 3600; +use constant POLL_TIMEOUT => $ENV{POLL_TIMEOUT} // 3600; + +1; diff --git a/extensions/MozillaIAM/lib/Daemon.pm b/extensions/MozillaIAM/lib/Daemon.pm new file mode 100644 index 0000000000..6629a9f0fe --- /dev/null +++ b/extensions/MozillaIAM/lib/Daemon.pm @@ -0,0 +1,100 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::Daemon; + +use 5.10.1; +use strict; +use warnings; + +use Bugzilla::Constants; +use Bugzilla::Extension::MozillaIAM::Person; + +use Carp qw(confess); +use Daemon::Generic; +use File::Basename; +use File::Spec; +use Pod::Usage; + +sub start { + newdaemon(); +} + +# +# daemon::generic config +# + +sub gd_preconfig { + my $self = shift; + my $pidfile = $self->{gd_args}{pidfile}; + if (!$pidfile) { + $pidfile = File::Spec->catfile(bz_locations()->{datadir}, + $self->{gd_progname} . ".pid"); + } + return (pidfile => $pidfile); +} + +sub gd_getopt { + my $self = shift; + $self->SUPER::gd_getopt(); + if ($self->{gd_args}{progname}) { + $self->{gd_progname} = $self->{gd_args}{progname}; + } + else { + $self->{gd_progname} = basename($0); + } + $self->{_original_zero} = $0; + $0 = $self->{gd_progname}; +} + +sub gd_postconfig { + my $self = shift; + $0 = delete $self->{_original_zero}; +} + +sub gd_more_opt { + my $self = shift; + return ( + 'pidfile=s' => \$self->{gd_args}{pidfile}, + 'n=s' => \$self->{gd_args}{progname}, + ); +} + +sub gd_usage { + pod2usage({-verbose => 0, -exitval => 'NOEXIT'}); + return 0; +} + +sub gd_redirect_output { + my $self = shift; + + my $filename = File::Spec->catfile(bz_locations()->{datadir}, + $self->{gd_progname} . ".log"); + open(STDERR, ">>", $filename) or (print "could not open stderr: $!" && exit(1)); + close(STDOUT); + open(STDOUT, ">&", STDERR) or die "redirect STDOUT -> STDERR: $!"; + $SIG{HUP} = sub { + close(STDERR); + open(STDERR, ">>", $filename) or (print "could not open stderr: $!" && exit(1)); + }; +} + +sub gd_setup_signals { + my $self = shift; + $self->SUPER::gd_setup_signals(); + $SIG{TERM} = sub { $self->gd_quit_event(); } +} + +sub gd_run { + my $self = shift; + $SIG{__DIE__} = \&Carp::confess if $self->{debug}; + my $phabbugz = Bugzilla::Extension::MozillaIAM::Person->new(); + $phabbugz->is_daemon(1); + $phabbugz->start(); +} + +1; diff --git a/extensions/MozillaIAM/lib/Person.pm b/extensions/MozillaIAM/lib/Person.pm new file mode 100644 index 0000000000..5eff24876a --- /dev/null +++ b/extensions/MozillaIAM/lib/Person.pm @@ -0,0 +1,210 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::Person; + +use 5.10.1; +use Moo; + +use IO::Async::Timer::Periodic; +use IO::Async::Loop; +use IO::Async::Signal; +use Try::Tiny; + +use Bugzilla::Logging; +use Bugzilla::User; +use Bugzilla::Util qw(with_writable_database); +use Bugzilla::Extension::MozillaIAM::Constants; +use Bugzilla::Extension::MozillaIAM::Util qw( + add_staff_member + get_access_token + get_profile_by_email + get_profile_by_id + remove_staff_member +); + +has 'is_daemon' => (is => 'rw', default => 0); + +my $CURRENT_QUERY = 'none'; + +sub run_query { + my ($self, $name) = @_; + my $method = $name . '_query'; + try { + with_writable_database { + alarm POLL_TIMEOUT; + $CURRENT_QUERY = $name; + $self->$method; + }; + } + catch { + FATAL($_); + } + finally { + alarm(0); + $CURRENT_QUERY = 'none'; + try { + Bugzilla->_cleanup(); + } + catch { + FATAL("Error in _cleanup: $_"); + exit 1; + } + }; +} + +sub start { + my ($self) = @_; + + my $sig_alarm = IO::Async::Signal->new( + name => 'ALRM', + on_receipt => sub { + FATAL("Timeout reached while executing $CURRENT_QUERY query"); + exit 1; + }, + ); + + # Look for Mozilla accounts changes add by the CIS webhook + my $cis_update_timer = IO::Async::Timer::Periodic->new( + first_interval => 0, + interval => CIS_UPDATE_SECONDS, + reschedule => 'drift', + on_tick => sub { $self->run_query('cis_update') }, + ); + + # Manually query for Mozilla account changes + my $manual_update_timer = IO::Async::Timer::Periodic->new( + first_interval => 0, + interval => MANUAL_UPDATE_SECONDS, + reschedule => 'drift', + on_tick => sub { $self->run_query('manual_update') }, + ); + + my $loop = IO::Async::Loop->new; + $loop->add($cis_update_timer); + $loop->add($manual_update_timer); + $loop->add($sig_alarm); + + $cis_update_timer->start; + $manual_update_timer->start; + + $loop->run; +} + +sub cis_update_query { + my ($self) = @_; + my $dbh = Bugzilla->dbh; + + local Bugzilla::Logging->fields->{type} = 'PERSON_API'; + + # Ensure Mozilla IAM syncing is enabled + if (!Bugzilla->params->{mozilla_iam_enabled}) { + WARN('MOZILLA IAM SYNC DISABLED'); + return; + } + + DEBUG('RUNNING CIS UPDATE QUERY'); + + # We need to make the below changes as an empowered user + my $restore_prev_user + = Bugzilla->set_user(Bugzilla::User->super_user, scope_guard => 1); + + # Obtain access token for accessing the Person API + my $access_token = get_access_token(); + if (!$access_token) { + FATAL('Error obtaining access token'); + return; + } + + # Find any updates that were inserted by the CIS system using a webhook + my $cis_ids + = $dbh->selectcol_arrayref( + "SELECT value FROM mozilla_iam_updates WHERE type = 'update' ORDER BY mod_time" + ); + + foreach my $cis_id (@{$cis_ids}) { + + DEBUG("Processing updated user $cis_id"); + + try { + my $profile = get_profile_by_id($cis_id, $access_token); + + if ($profile && $profile->{iam_username}) { + if (!$profile->{is_staff} || !$profile->{bmo_email}) { + remove_staff_member({iam_username => $profile->{iam_username}}); + } + + if ($profile->{is_staff} && $profile->{bmo_email}) { + add_staff_member({ + bmo_email => $profile->{bmo_email}, + iam_username => $profile->{iam_username}, + real_name => $profile->{first_name} . ' ' . $profile->{last_name}, + is_staff => $profile->{is_staff}, + }); + } + } + } + catch { + WARN($_); + } + finally { + # Remove from queue + $dbh->do("DELETE FROM mozilla_iam_updates WHERE type = 'update' AND value = ?", + undef, $cis_id); + }; + } +} + +sub manual_update_query { + my ($self) = @_; + my $dbh = Bugzilla->dbh; + + local Bugzilla::Logging->fields->{type} = 'PERSON_API'; + + # Ensure Mozilla IAM syncing is enabled + if (!Bugzilla->params->{mozilla_iam_enabled}) { + WARN('MOZILLA IAM SYNC DISABLED'); + return; + } + + DEBUG('RUNNING MANUAL UPDATE QUERY'); + + # We need to make the below changes as an empowered user + my $restore_prev_user + = Bugzilla->set_user(Bugzilla::User->super_user, scope_guard => 1); + + # Obtain access token for accessing the Person API + my $access_token = get_access_token(); + if (!$access_token) { + FATAL('Error obtaining access token'); + return; + } + + # Update current members + my $rows = $dbh->selectall_arrayref( + 'SELECT user_id, iam_username FROM profiles_iam ORDER BY user_id'); + + foreach my $row (@{$rows}) { + my ($user_id, $iam_username) = @{$row}; + + my $user = Bugzilla::User->new($user_id); + DEBUG('Processing current user ' . $user->login); + + try { + my $profile = get_profile_by_email($iam_username, $access_token); + + if ($profile && (!$profile->{is_staff} || !$profile->{bmo_email})) { + remove_staff_member({user => $user}); + } + } + catch { + WARN($_); + }; + } +} + +1; diff --git a/extensions/MozillaIAM/lib/Util.pm b/extensions/MozillaIAM/lib/Util.pm new file mode 100644 index 0000000000..7ee05b3432 --- /dev/null +++ b/extensions/MozillaIAM/lib/Util.pm @@ -0,0 +1,219 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MozillaIAM::Util; + +use 5.10.1; +use strict; +use warnings; + +use Bugzilla::Logging; +use Bugzilla::Token; +use Bugzilla::User; +use Bugzilla::Util qw(url_quote); + +use Mojo::JWT; +use Mojo::UserAgent; +use Try::Tiny; + +use base qw(Exporter); +our @EXPORT_OK = qw( + add_staff_member + get_access_token + get_profile_by_email + get_profile_by_id + remove_staff_member + user_agent + verify_token +); + +sub add_staff_member { + my $params = shift; + my $bmo_email = $params->{bmo_email}; + my $iam_username = $params->{iam_username}; + my $real_name = $params->{real_name}; + my $is_staff = $params->{is_staff}; + + # We need to make the below changes as an empowered user + my $empowered_user + = Bugzilla->set_user(Bugzilla::User->super_user, scope_guard => 1); + + # If user does not have an account, create one + my $user = Bugzilla::User->new({name => $bmo_email}); + + return 0 if !$user; + + # Update iam_username value with email from Mozilla IAM + # Also set password to * to disallow local login. + if ($user->iam_username ne $iam_username) { + $user->set_iam_username($iam_username); + $user->set_password('*') if $user->cryptpassword ne '*'; + $user->set_mfa(''); + } + + # Update group permissions if user is staff + if (!$user->in_group('mozilla-employee-confidential') && $is_staff) { + $user->set_groups({add => ['mozilla-employee-confidential']}); + } + + $user->update({keep_session => 1, keep_tokens => 1}); # Do not log user out + + return 1; +} + +sub remove_staff_member { + my $params = shift; + + # We need to make the below changes as an empowered user + my $empowered_user + = Bugzilla->set_user(Bugzilla::User->super_user, scope_guard => 1); + + my $user = $params->{user}; + if (!$user) { + my $user_id + = Bugzilla->dbh->selectrow_array( + 'SELECT user_id FROM profiles_iam WHERE iam_username = ?', + undef, $params->{iam_username}); + $user = Bugzilla::User->new($user_id); + } + + if ($user && $user->iam_username) { + $user->set_iam_username(''); + $user->set_password('*') if $user->cryptpassword ne '*'; + $user->set_mfa(''); + + if ($user->in_group('mozilla-employee-confidential')) { + $user->set_groups({remove => ['mozilla-employee-confidential']}); + } + + # Issue email allowing user to set their password + Bugzilla::Token::IssuePasswordToken($user); + + $user->update(); # Do not keep_session so user is logged out + } + + return 1; +} + +sub get_access_token { + my $params = Bugzilla->params; + + # Return fake token for CI tests + return 'fake_access_token' if $ENV{CI}; + + my $access_token; + try { + $access_token = user_agent()->post( + $params->{oauth2_client_token_url} => {'Content-Type' => 'application/json'} => + json => { + client_id => $params->{mozilla_iam_person_api_client_id}, + client_secret => $params->{mozilla_iam_person_api_client_secret}, + audience => 'api.sso.mozilla.com', + grant_type => 'client_credentials', + }, + )->result->json('/access_token'); + } + catch { + WARN($_); + ThrowCodeError('mozilla_iam_access_token_error'); + }; + + return $access_token; +} + +sub get_profile_by_email { + my ($email, $access_token) = @_; + return _get_profile('/v2/user/primary_email/' . url_quote($email), + $access_token); +} + +sub get_profile_by_id { + my ($id, $access_token) = @_; + return _get_profile('/v2/user/user_id/' . url_quote($id), $access_token); +} + +sub _get_profile { + my ($query_path, $access_token) = @_; + + # For CI, return test data that mocks the PersonAPI + if ( $ENV{CI} + && $ENV{BZ_TEST_OAUTH2_NORMAL_USER} + && $ENV{BZ_TEST_OAUTH2_MOZILLA_USER}) + { + return { + bmo_email => $ENV{BZ_TEST_OAUTH2_NORMAL_USER}, + first_name => 'Mozilla', + last_name => 'IAM User', + iam_username => $ENV{BZ_TEST_OAUTH2_MOZILLA_USER}, + is_staff => 1, + }; + } + + $access_token ||= get_access_token(); + return {} if !$access_token; + + my $url = Bugzilla->params->{mozilla_iam_person_api_uri} . $query_path; + + my $data = {}; + try { + $data = user_agent()->get($url => {'Authorization' => "Bearer ${access_token}"}) + ->result->json; + } + catch { + WARN($_); + ThrowCodeError('mozilla_iam_get_profile_error'); + }; + + return {} if !$data; + + return { + is_staff => $data->{staff_information}->{staff}->{value}, + iam_username => $data->{primary_email}->{value}, + bmo_email => $data->{identities}->{bugzilla_mozilla_org_primary_email}->{value}, + first_name => $data->{first_name}->{value}, + last_name => $data->{last_name}->{value}, + }; +} + +sub user_agent { + my $ua = Mojo::UserAgent->new( + request_timeout => 5, + connect_timeout => 5, + inactivity_timesout => 30 + ); + if (my $proxy = Bugzilla->params->{proxy_url}) { + $ua->proxy->http($proxy)->https($proxy); + } + else { + $ua->proxy->detect(); + } + $ua->transactor->name('Bugzilla'); + return $ua; +} + +sub verify_token { + my $authorization_header = shift; + my ($bearer, $token) = split /\s+/, $authorization_header; + + return 0 if $bearer !~ /bearer/i || !$token; + + try { + my $jwks + = user_agent() + ->get(Bugzilla->params->{oauth2_client_domain} . '/.well-known/jwks.json') + ->result->json('/keys'); + $token = Mojo::JWT->new(jwks => $jwks)->decode($token); + } + catch { + WARN($_); + ThrowCodeError('mozilla_iam_verify_token_error'); + }; + + return 1; +} + +1; diff --git a/extensions/MozillaIAM/t/bmo/moz_iam_cis_ping.t b/extensions/MozillaIAM/t/bmo/moz_iam_cis_ping.t new file mode 100644 index 0000000000..9bcb24859b --- /dev/null +++ b/extensions/MozillaIAM/t/bmo/moz_iam_cis_ping.t @@ -0,0 +1,104 @@ +#!/usr/bin/env perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use strict; +use warnings; +use 5.10.1; +use lib qw( . lib local/lib/perl5 ); + +use Bugzilla; + +BEGIN { + Bugzilla->extensions; + $ENV{LOG4PERL_CONFIG_FILE} = 'log4perl-t.conf'; + $ENV{BUGZILLA_DISABLE_HOSTAGE} = 1; +} + +use Bugzilla::Extension::MozillaIAM::Person; +use Bugzilla::Logging; +use Bugzilla::Test::Selenium; +use Bugzilla::Test::Util qw(create_user mock_useragent_tx); +use Bugzilla::User; + +use Mojo::JSON qw(encode_json false true); +use Test::Mojo; +use Test2::Tools::Mock; +use Test2::V0; + +my $bmo_email = $ENV{BZ_TEST_OAUTH2_NORMAL_USER}; +my $iam_username = $ENV{BZ_TEST_OAUTH2_MOZILLA_USER}; + +my $t = Test::Mojo->new('Bugzilla::App'); + +# Simulate ping from CIS system about a user change +$t->post_ok( + '/rest/mozillaiam/user/update' => json => { + id => 'ad|Mozilla-LDAP|mozilla-user-1', + operation => 'update', + time => 10000 + } +)->status_is(200)->content_is('OK!'); + +# Process the new change from CIS +Bugzilla::Extension::MozillaIAM::Person->cis_update_query(); + +my $user = Bugzilla::User->new({name => $bmo_email}); + +ok($user->login eq $bmo_email, "User $bmo_email was created"); +ok( + $user->iam_username eq $iam_username, + "User iam_username is set to $iam_username" +); +ok( + $user->in_group('mozilla-employee-confidential'), + 'User was added to the mozilla-employee-confidential group' +); + +# Remove bmo linkage from their CIS account. This should remove +# them from Mozilla confidential +local $ENV{CI} = 0, $ENV{NO_VERIFY_TOKEN} = 1; +my $mocked_data = { + first_name => {value => 'Mozilla'}, + last_name => {value => 'IAM User'}, + primary_email => {value => $iam_username}, + staff_information => {staff => {value => false}}, +}; +my $user_agent = mock 'Mojo::UserAgent' => ( + override => [ + post => + sub { return mock_useragent_tx('{"access_token":"fake_access_token"}'); }, + get => sub { return mock_useragent_tx(encode_json($mocked_data)); } + ] +); + +# Simulate ping from CIS system about a user change +$t->post_ok( + '/rest/mozillaiam/user/update' => json => { + id => 'ad|Mozilla-LDAP|mozilla-user-1', + operation => 'update', + time => 20000 + } +)->status_is(200)->content_is('OK!'); + +# Process the new change from CIS +Bugzilla::Extension::MozillaIAM::Person->cis_update_query(); + +$user = Bugzilla::User->new({name => $bmo_email}); + +ok($user->iam_username ne $iam_username, 'User iam_username is unset'); +ok(!$user->in_group('mozilla-employee-confidential'), + 'User was removed from the mozilla-employee-confidential group'); + +# Check that password reset token was sent and clean up +my $token = Bugzilla::Test::Selenium->get_token(); +ok($token, "got a token for resetting password"); +Bugzilla->dbh->do('DELETE FROM tokens WHERE token = ?', undef, $token); +open my $fh, '>', '/app/data/mailer.testfile'; +close $fh; + +done_testing; diff --git a/extensions/MozillaIAM/t/bmo/moz_iam_email_change.t b/extensions/MozillaIAM/t/bmo/moz_iam_email_change.t new file mode 100644 index 0000000000..8a1fde9081 --- /dev/null +++ b/extensions/MozillaIAM/t/bmo/moz_iam_email_change.t @@ -0,0 +1,75 @@ +#!/usr/bin/env perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +use strict; +use warnings; +use 5.10.1; +use lib qw( . lib local/lib/perl5 ); + +BEGIN { + $ENV{LOG4PERL_CONFIG_FILE} = 'log4perl-t.conf'; + $ENV{BUGZILLA_DISABLE_HOSTAGE} = 1; +} + +use Bugzilla; +use Bugzilla::Logging; +use Bugzilla::Test::Selenium; +use Bugzilla::User; + +use Test2::V0; + +my $bmo_email = 'bmo-user-2@mozilla.com'; +my $iam_username = 'mozilla-user-2@mozilla.com'; +my $real_name = 'Mozilla IAM User'; +my $new_bmo_email = 'bmo-user-2-new@mozilla.com'; + +# We need to make the below changes as an empowered user +my $empowered_user + = Bugzilla->set_user(Bugzilla::User->super_user, scope_guard => 1); + +my $user = Bugzilla::User->create({ + login_name => $bmo_email, + realname => $real_name, + cryptpassword => '*', + iam_username => $iam_username, +}); + +$user->set_groups({add => ['mozilla-employee-confidential']}); +$user->update(); + +ok( + $user->iam_username eq $iam_username, + "User iam_username is set to $iam_username" +); +ok( + $user->in_group('mozilla-employee-confidential'), + 'User was added to the mozilla-employee-confidential group' +); + +# Change users email address. Should automatically remove iam_username and +# mozilla group membership +$user->set_login($new_bmo_email); +$user->update(); + +undef $user; +$user = Bugzilla::User->new({name => $new_bmo_email}); + +ok( + $user->iam_username ne $iam_username, + "User iam_username is not $iam_username" +); +ok(!$user->in_group('mozilla-employee-confidential'), + 'User was removed from the mozilla-employee-confidential group'); + +# Check that password reset token was sent and clean up +my $token = Bugzilla::Test::Selenium->get_token(); +ok($token, "got a token for resetting password"); +Bugzilla->dbh->do('DELETE FROM tokens WHERE token = ?', undef, $token); +open my $fh, '>', '/app/data/mailer.testfile'; +close $fh; + +done_testing; diff --git a/extensions/MozillaIAM/t/bmo/moz_iam_oauth_login.t b/extensions/MozillaIAM/t/bmo/moz_iam_oauth_login.t new file mode 100644 index 0000000000..539bf979ee --- /dev/null +++ b/extensions/MozillaIAM/t/bmo/moz_iam_oauth_login.t @@ -0,0 +1,68 @@ +#!/usr/bin/env perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use strict; +use warnings; +use 5.10.1; +use lib qw( . qa/t/lib local/lib/perl5 ); + +use Mojo::Base -strict; +use QA::Util; +use Test::More; + +my $bmo_login = $ENV{BZ_TEST_OAUTH2_NORMAL_USER}; +my $iam_username = $ENV{BZ_TEST_OAUTH2_MOZILLA_USER}; +my $password = $ENV{BZ_TEST_OAUTH2_PASSWORD}; + +my ($sel, $config) = get_selenium(); + +$sel->set_implicit_wait_timeout(600); + +# Logging in with Mozilla.com account should automatically redirect to OAuth2 login +$sel->login($iam_username, $password); +$sel->is_element_present_ok('//a[contains(text(),"Connect")]', + 'Mozilla IAM provider login present'); +$sel->logout_ok(); + +# Click on Mozilla IAM login button +$sel->get_ok('/login', undef, 'Go to the home page'); +$sel->title_is('Log in to Bugzilla', 'Log in to Bugzilla'); +$sel->is_element_present_ok( + '//div[@id="main-inner"]/div[@class="oauth2-login"]/a/button', + 'OAuth2 login button is present'); +$sel->click_ok('//div[@id="main-inner"]/div[@class="oauth2-login"]/a/button', + 'Click OAuth2 login button'); +$sel->click_ok('//a[contains(text(),"Connect")]', + 'Click OAuth2 provider login'); +$sel->title_is('Bugzilla Main Page', 'User is logged into Bugzilla'); +$sel->logout_ok(); + +# Make sure IAM username is correct and user is added to mozilla group +$sel->login($config->{admin_user_login}, $config->{admin_user_passwd}); + +# First we need to get the group id of the mozilla employee group. +$sel->get_ok('/editgroups.cgi', 'Go to edit groups'); +$sel->title_is('Edit Groups', 'Edit groups loaded'); +$sel->click_ok('link=mozilla-employee-confidential'); +my $group_id + = $sel->get_value("//input[\@name='group_id' and \@type='hidden']"); + +# Now check to make sure the user values are set properly +$sel->get_ok('/editusers.cgi', 'Go to edit users'); +$sel->title_is('Search users', 'Edit users loaded'); +$sel->type_ok('matchstr', $bmo_login, "Type $bmo_login for search"); +$sel->click_ok('//input[@id="search"]'); +$sel->title_is('Select user', 'Select a user loaded'); +$sel->click_link($bmo_login); +$sel->title_like(qr/^Edit user/, "Edit user"); +my $actual_iam_username = $sel->get_value('//input[@id="iam_username"]'); +ok($actual_iam_username eq $iam_username, 'IAM username correct'); +ok($sel->is_checked("//input[\@type='checkbox' and \@id='group_$group_id']"), + 'Mozilla employee group is selected'); + +done_testing; diff --git a/extensions/MozillaIAM/template/en/default/account/auth/oauth2_login_button.html.tmpl b/extensions/MozillaIAM/template/en/default/account/auth/oauth2_login_button.html.tmpl new file mode 100644 index 0000000000..dd4e30dbb4 --- /dev/null +++ b/extensions/MozillaIAM/template/en/default/account/auth/oauth2_login_button.html.tmpl @@ -0,0 +1,19 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + redirect_uri = c.oauth2.redirect_uri(target); + authorize_url = c.oauth2.auth_url('oauth2', + {state => issue_hash_token(['oauth2']), redirect_uri => redirect_uri }); +%] + diff --git a/extensions/MozillaIAM/template/en/default/admin/params/mozillaiam.html.tmpl b/extensions/MozillaIAM/template/en/default/admin/params/mozillaiam.html.tmpl new file mode 100644 index 0000000000..8d3854dfe6 --- /dev/null +++ b/extensions/MozillaIAM/template/en/default/admin/params/mozillaiam.html.tmpl @@ -0,0 +1,22 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% + title = "Mozilla IAM" + desc = "Configure as an Mozilla IAM Client for Authentication (Requires OAuth2 Client Enabled)" +%] + +[% + param_descs = { + mozilla_iam_enabled => "Mozilla IAM Client Enabled", + mozilla_iam_person_api_uri => "Mozilla IAM Person API URI", + mozilla_iam_person_api_client_id => "Mozilla IAM Person API Client ID", + mozilla_iam_person_api_client_secret => "Mozilla IAM Person API Client Secret" + mozilla_iam_mandatory_domains => "Account domains that must use Mozilla IAM to authenticate (one per line)" + } +%] diff --git a/extensions/MozillaIAM/template/en/default/hook/account/email/confirm-end.html.tmpl b/extensions/MozillaIAM/template/en/default/hook/account/email/confirm-end.html.tmpl new file mode 100644 index 0000000000..706f9f2e8e --- /dev/null +++ b/extensions/MozillaIAM/template/en/default/hook/account/email/confirm-end.html.tmpl @@ -0,0 +1,19 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% IF user.iam_username %] +
+
+ You are currently using Mozilla IAM to sign on to [% terms.Bugzilla %]. + If you change your email and want the new address linked to your Mozilla + IAM account, you will need to update your Bugzilla email at + people.mozilla.org. If not, then + you will then need to + reset your password to login again. +
+[% END %] diff --git a/extensions/MozillaIAM/template/en/default/hook/global/code-error-errors.html.tmpl b/extensions/MozillaIAM/template/en/default/hook/global/code-error-errors.html.tmpl new file mode 100644 index 0000000000..39fbde1ac4 --- /dev/null +++ b/extensions/MozillaIAM/template/en/default/hook/global/code-error-errors.html.tmpl @@ -0,0 +1,20 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% IF error == "mozilla_iam_access_token_error" %] + An error was encountered while obtaining an access token from IAM. + Please contact [% Param("maintainer") %] describing the steps taken to obtain this message. + +[% ELSIF error == "mozilla_iam_get_profile_error" %] + An error was encountered retrieving profile information from IAM. + Please contact [% Param("maintainer") %] describing the steps taken to obtain this message. + +[% ELSIF error == "mozilla_iam_verify_token_error" %] + The token provided was not valid or missing during verification with IAM. + Please contact [% Param("maintainer") %] describing the steps taken to obtain this message. +[% END %] diff --git a/extensions/MozillaIAM/template/en/default/hook/global/user-error-errors.html.tmpl b/extensions/MozillaIAM/template/en/default/hook/global/user-error-errors.html.tmpl new file mode 100644 index 0000000000..a21d5f28f0 --- /dev/null +++ b/extensions/MozillaIAM/template/en/default/hook/global/user-error-errors.html.tmpl @@ -0,0 +1,18 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% IF error == "api_input_schema_error" %] + [% title = "API Input Schema Error" %] + The following errors occurred when validating input data: + [%+ FOREACH e = errors %] + [% e.message FILTER html %] => [% e.path FILTER html %][% ", " UNLESS loop.last() %] + [% END %] + +[% ELSIF error == "mozilla_iam_token_error" %] + The authentication token provided was not valid or missing. +[% END %] diff --git a/github.cgi b/github.cgi index e93ae09adb..229979f248 100755 --- a/github.cgi +++ b/github.cgi @@ -36,12 +36,12 @@ if (lc($cgi->request_method) eq 'post') { my $user = Bugzilla->login(LOGIN_OPTIONAL); my $target_uri = $cgi->param('target_uri') or ThrowCodeError("github_invalid_target"); - my $github_secret = $cgi->param('github_secret') + my $github_token = $cgi->param('github_token') or ThrowCodeError("github_invalid_request", {reason => 'invalid secret'}); - my $github_secret2 = Bugzilla->github_secret + my $github_token2 = Bugzilla->github_token or ThrowCodeError("github_invalid_request", {reason => 'invalid secret'}); - if ($github_secret ne $github_secret2) { + if ($github_token ne $github_token2) { Bugzilla->check_rate_limit('github', remote_ip()); ThrowCodeError("github_invalid_request", {reason => 'invalid secret'}); } diff --git a/oauth2.cgi b/oauth2.cgi new file mode 100644 index 0000000000..bcb385f696 --- /dev/null +++ b/oauth2.cgi @@ -0,0 +1,72 @@ +#!/usr/bin/env perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use 5.10.1; +use strict; +use warnings; + +use lib qw(. lib local/lib/perl5); + +use Bugzilla; +use Bugzilla::Constants; +use Bugzilla::Error; +use Bugzilla::Hook; +use Bugzilla::Logging; +use Bugzilla::Token qw(check_hash_token delete_token); + +use Mojo::JWT; +use Mojo::UserAgent; +use Try::Tiny; + +my $cache = Bugzilla->request_cache; +my $cgi = Bugzilla->cgi; +my $c = $cache->{mojo_controller}; + +# GET requests come from OAuth2 provider, +# with this script acting as the OAuth2 callback. + +# Verify state value is valid +my $token = $cgi->param('state'); +check_hash_token($token, ['oauth2']); +delete_token($token); + +# Get access token from OAuth2 provider; +my $resp = $c->oauth2->get_token(); + +# Store user information for use by OAuth2 login info getter +my $userinfo; +if ($resp && $resp->{id_token}) { + try { + my $jwks + = Mojo::UserAgent->new->get( + Bugzilla->params->{oauth2_client_domain} . '/.well-known/jwks.json') + ->result->json('/keys'); + $userinfo = Mojo::JWT->new(jwks => $jwks)->decode($resp->{id_token}); + } + catch { + WARN($_); + }; +} + +if (!$userinfo && $resp && $resp->{access_token}) { + $userinfo = $c->oauth2->userinfo($resp->{access_token}); +} + +$userinfo || ThrowUserError('oauth2_userinfo_error'); + +Bugzilla::Hook::process('oauth2_client_pre_login', {userinfo => $userinfo}); + +$cache->{oauth2_client_userinfo} = $userinfo; + +my $user = Bugzilla->login(LOGIN_REQUIRED); + +Bugzilla::Hook::process('oauth2_client_post_login', + {user => $user, userinfo => $userinfo}); + +# Go back where we came from +$cgi->redirect($cgi->param('redirect')); diff --git a/qa/t/lib/QA/Util.pm b/qa/t/lib/QA/Util.pm index 9c1f53c50b..c32377dec2 100644 --- a/qa/t/lib/QA/Util.pm +++ b/qa/t/lib/QA/Util.pm @@ -123,14 +123,14 @@ sub get_selenium { my $sel = Bugzilla::Test::Selenium->new({ driver_args => { - base_url => $config->{browser_url}, + base_url => $ENV{BZ_BASE_URL} || $config->{browser_url}, browser => 'firefox', version => '', javascript => 1 } - }); + }); - $sel->driver->set_timeout('implicit', 600); + $sel->driver->set_timeout('implicit', 600); $sel->driver->set_timeout('page load', 60000); return ($sel, $config); diff --git a/qa/t/test_bug_edit.t b/qa/t/test_bug_edit.t index 2a3c21b4b8..e322e6bfa1 100644 --- a/qa/t/test_bug_edit.t +++ b/qa/t/test_bug_edit.t @@ -40,7 +40,7 @@ check_page_load($sel, q{http://HOSTNAME/editgroups.cgi}); $sel->title_is("Edit Groups"); $sel->click_ok("link=Master"); check_page_load($sel, - q{http://HOSTNAME/editgroups.cgi?action=changeform&group=26}); + q{http://HOSTNAME/editgroups.cgi?action=changeform&group=27}); $sel->title_is("Change Group: Master"); my $group_url = $sel->get_location(); $group_url =~ /group=(\d+)$/; diff --git a/qa/t/webservice_user_create.t b/qa/t/webservice_user_create.t index e52cfd34da..ba09044fcb 100644 --- a/qa/t/webservice_user_create.t +++ b/qa/t/webservice_user_create.t @@ -140,7 +140,7 @@ foreach my $rpc ($jsonrpc, $xmlrpc) { user => 'admin', args => {email => new_login(), full_name => NEW_FULLNAME, iam_username => $rpc->TYPE}, error => "The IAM username '" . $rpc->TYPE . "' you entered did not pass syntax checking for a legal email address.", - test => 'Adding a duplicate IAM username fails.', + test => 'Adding an invalid IAM username fails.', }, ); diff --git a/scripts/c9-install b/scripts/c9-install index aabe457820..a83b08eb6c 100755 --- a/scripts/c9-install +++ b/scripts/c9-install @@ -42,7 +42,7 @@ $answer{'diffpath'} = '/usr/bin'; $answer{'index_html'} = 0; $answer{'interdiffbin'} = '/usr/bin/interdiff'; $answer{'password_complexity'} = 'bmo'; -$answer{'user_info_class'} = 'GitHubAuth,CGI'; +$answer{'user_info_class'} = 'GitHubAuth,OAuth2,CGI'; $answer{'user_verify_class'} = 'GitHubAuth,DB'; $answer{'memcached_namespace'} = 'bmo:'; $answer{'memcached_servers'} = ''; diff --git a/scripts/entrypoint.pl b/scripts/entrypoint.pl index dead761a2b..533fa0ba36 100755 --- a/scripts/entrypoint.pl +++ b/scripts/entrypoint.pl @@ -211,15 +211,33 @@ sub cmd_test_bmo { assert_database()->get; assert_selenium('selenium')->get; - $ENV{BZ_TEST_NEWBIE} = 'newbie@mozilla.example'; + + $ENV{BZ_TEST_OAUTH2_NORMAL_USER} = 'oauth2-user@example.com'; + $ENV{BZ_TEST_OAUTH2_MOZILLA_USER} = 'oauth2-user@mozilla.com'; + $ENV{BZ_TEST_OAUTH2_PASSWORD} = 'non-working-password'; + create_user( + $ENV{BZ_TEST_OAUTH2_NORMAL_USER}, + $ENV{BZ_TEST_OAUTH2_PASSWORD}, + realname => 'OAuth2 User' + ); + + $ENV{BZ_TEST_BOUNCE_USER} = 'bouncer@mozilla.example'; + $ENV{BZ_TEST_BOUNCE_PASS} = 'captain.space.bagel.ROBOT!'; + create_user( + $ENV{BZ_TEST_BOUNCE_USER}, + $ENV{BZ_TEST_BOUNCE_PASS}, + realname => 'Bouncing User' + ); + + $ENV{BZ_TEST_NEWBIE_USER} = 'newbie@mozilla.example'; $ENV{BZ_TEST_NEWBIE_PASS} = 'captain.space.bagel.ROBOT!'; create_user( - $ENV{BZ_TEST_NEWBIE}, + $ENV{BZ_TEST_NEWBIE_USER}, $ENV{BZ_TEST_NEWBIE_PASS}, realname => 'Newbie User' ); - $ENV{BZ_TEST_NEWBIE2} = 'newbie2@mozilla.example'; + $ENV{BZ_TEST_NEWBIE2_USER} = 'newbie2@mozilla.example'; $ENV{BZ_TEST_NEWBIE2_PASS} = 'captain.space.pants.time.lord'; my $httpd_exit_f = run_cereal_and_httpd('-DACCESS_LOGS'); diff --git a/scripts/generate_bmo_data.pl b/scripts/generate_bmo_data.pl index 0e7d41e3b7..c2b19d3b6e 100755 --- a/scripts/generate_bmo_data.pl +++ b/scripts/generate_bmo_data.pl @@ -390,6 +390,13 @@ all_products => 0, bug_group => 0, }, + { + name => 'mozilla-employee-confidential', + description => 'mozilla-employee-confidential Description', + no_admin => 0, + all_products => 0, + bug_group => 1, + }, ); print "creating groups...\n"; @@ -524,7 +531,7 @@ usebugaliases => 1, useqacontact => 1, use_mailer_queue => 1, - user_info_class => 'GitHubAuth,CGI', + user_info_class => 'GitHubAuth,OAuth2,CGI', user_verify_class => 'GitHubAuth,DB', %opt_param, ); diff --git a/skins/lib/fontawesome-brands.min.css b/skins/lib/fontawesome-brands.min.css new file mode 100644 index 0000000000..4fd4403b85 --- /dev/null +++ b/skins/lib/fontawesome-brands.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/skins/lib/fontawesome-solid.min.css b/skins/lib/fontawesome-solid.min.css new file mode 100644 index 0000000000..a9ec9ea627 --- /dev/null +++ b/skins/lib/fontawesome-solid.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} \ No newline at end of file diff --git a/skins/lib/fontawesome.min.css b/skins/lib/fontawesome.min.css new file mode 100644 index 0000000000..2592f48e33 --- /dev/null +++ b/skins/lib/fontawesome.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file diff --git a/skins/standard/global.css b/skins/standard/global.css index 1f11f784a8..4d484b0a35 100644 --- a/skins/standard/global.css +++ b/skins/standard/global.css @@ -2818,6 +2818,15 @@ pre.comment-text { vertical-align: bottom; } +/* OAuth2 */ +div.oauth2-login { + margin-bottom: 10px; +} + +#mini_login_top div.oauth2-login { + margin: 0; +} + /** * Print media */ diff --git a/skins/webfonts/fa-brands-400.eot b/skins/webfonts/fa-brands-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..d05ea581fbbf17eb0d3139f9937ac6a8fde98685 GIT binary patch literal 134346 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

|#S?oSB>4 z8eg#tI9xs3%zU>e|CRBZ8W5SH4NFec#Uv+(^Y^CbqhJb})`vsvc}eL#&r5MpOifd8 zSCnH_wJYCDrsF&Uy78o;8jl0n$XEytXQ_CT>J6SIFN`xw667<=N{tMv?}gr`8B*y3z_k9#5bD_$XIbJ$T4EFZ9NCDA9BM@FH=-4ppXMPQz zPpT_D+qSPQAV4?L%wgS^k~S>$^+@e>(!OPJnyMn2q-_$yqc%VNYNEDMD%|kwrL&*& z_h$_y-9EgnOXpd>JsponiL#u^i3yIj*Q*mEKET*g)D-t}2nW|a(i zsA~ZH19Mv2KihAgsm8HdqFkZxKSIE7&?Bs*r2mH5<+3tFYqyOH%V+BmHbR=QLAQYJ zw~W3Z@YPJ~%tWx_9WYIth_ezALgRSP7+EUH${0qa%=s^UjVuynJ71X0bHPK?*LOPY6T(NK75A4jKQMobe=##Oxb^gIHvN(19m|jEb$o6I&lA9N%Q}{YNxc`} zHIT}5L#B(Vfv$(%)OCs(?l9~l7I)UYIYf^D_&V|8z465Rc-~gL)8wo%!qhPto)!F% zX!AM(Yc6h2STpMtJ^V0;&a`zjAR4&_;UmOyz~0Pvs-X4}_T?~0Hh8$RhnDb$fJS&w zFZQ_i;2dkf7biKGt5>?}WF%`ConD%3T%ulxnxcR zyBfs-E+Tx@jV1m5+_O&@US4?Ecvg@u?Zhm!EFZIq1w?_5yW-uKRJlp)T=hWOO0j7fnfz$m7?Q(1WIc#qU;x z$dJRS-shww$>;NR5R29E*B|I3*z@ExO)2z?7z>Q%*6P`lQLY3x$X6qNJhx5o)hT_S z1AwwE{P(*7geig8p6Ot@?h&7@N6l>_(?erkD4r{B6XbW0m_{EXP%YU$*h1--IF7IM zmkY#<`~Z2UdiP|O@^SYH2S)C1{O0L98i!1Z^V8R@MHHSD^;nT{+!;s8o|AQjd3}9V_^+9;cZ3$Sice(o7x5zm~y1=`$I}#hk0o7(} zegWHaom9^&f_1qb4~rYf0)~a?{RCYHm(q_W=r!8qevTI`mSDXg`CMCkv>5jCtcMT|{@79M}#DB658{vjb+KSV@?c-#+_d z0F$+Y($4{rsPW`o^fn?1;iXrUbm1e(2DE!Vb0NAvZ8MEU+e8~mEWyB*5f+dnqV&dA zHxuu-{lfpx^`Om8e=uQY7u8B_(kWqJO8uHEPc&O*{#lMWus`vSKiK7WMv~1n^MNSJ z$IU6i?#@zKeUQeFt=%Z1Z7G|~uTG$e`no9CMopb~hcKf8hFas#Bq4b(|+5cZHUN(@*S5QdeuQK@1NU+ zXV31x^pANXpESqynF1K$=xe0+L93qxskYg=liyKQWwOs=C8w7GO8sJ{ zAel!?PD|g$OBQ%1ElyfgWxNpDle`o@b1{>j!rM@}moUeNtb<8nUt|27aT{An1-(ke zs9&{j&lEk4N07_gr`ME*N%-DcdxRBab__`A(*7vb1X8aWQKDSfws4Ln|$Q3XPnV{8j_5&R{&m zNe{+3=#0LiC=p(B+8;t8$4$iFXWkbN@zxRNwG3(!C9sdg_0E39#AL+!`v=7OyJ7g} z@ve?~mC9%UvA|$dsm|*GJrysG<{{t~8H^Mg#b{6)A4EPdCi|^;amITwA2R>Xax6%+ z{C6JD@5!CxN(IZDHV#dsIyU3~+daSazZuG8os&gG%e1C%An_w}f3UDwNg=@@wh#}T z<411PR?eo6BBy&v(GU*H`9S!7=Ss{{&QdBM)JHff6dn*(p!XI7pI|>ULz&dOmHP@0 zgpY#nJI!0Jo0Fx}`j~|g7W{kWFMP!GAR+$$Ss(BR19e*8?ONKLY%0jm@9{?h^x+x$ z2ya<9I53fpF6?!nTrE8mN;8jvBIh>&wQ9&pV3LYyG&oic-!?Y34c$Om)WAxMRsGw& z)!LmU%(8TMf9-a+@oiSO!OrL1wo1G++u(u*wMxxVZ&ibHA|aD#%5xOpSz&{Tp6)J0 zQ_{z2omxK0Y6W#fxJ9=`NX6t_a93U56r|tmj0z@RNWQW-NVSVB1Yb_?MxfgB=-vOv;e19&k)cV4Z7tJ%!9PpUoeKCF$O_BL0M+8>8C#)M>C=4Z)^TB z-5(QYTowl2Bqn`A63v%QQ+8Rf-tES1*Pe!jWaZi^1Pbu(&rd%=U|eihV+PykYO5}Z zkFT$^$~lI#Jzb4wy(QoNT(go8?NE`$-ZIiYn*kZ2)g>T3?RCByNzYxPxKJ!5JF4{t zP7+PLx`>5)2`@=DFxc)_3hsEjH_dCueFR_@N5WsU*;KH$HdS>d&Ys}w>88Pc z9qg+LOv>N?aX>l{a23h#RYSx0P)%Q6Qf8<*Dl{ZAHaJ+Hu%B0NR&o9Z`xkPA-fAD` zViwoa+fC5v#rKXNS{E%{Sni^&lj3Rd9_{Y#i`jnR>0?=fin$)5;E3@eQK?AzOXAAG zdUb{9<4aeQItv-`*)EnGu3#ZCsaH+2t7}nQkteb>Yzn(jhuK82*2Q=gD*yXR#ymwKjUOhH|E-tCVDI6qC#}8{^$`e-egQ`s z+t!lel0Za$-j1@2_T{HN?VvX+D|2UQa{J=j9`@dRFzzsqEW*mD23lZ|uB@3cI)|1q z3AiGi!`|i?T}R`L^K$W>z;@51I2OZ{4655Oo-+q9Ayb;kHjZ#{E=n{nu_%jg|&4VkL`jd8qYgoopP~Y2x&cTxUfDj8>)^v=X zvT`;aJ^yWm7I~=5LQ^5}7+`0*Hu;=7O4U8wXj};)%ec#e>-?+P9C1@*%%3;!-b?(e z4!otbh#h+(k8Vp&Ud@q1WjBU(me-zTD+U{OsQ_3`Zs=1x!cHly$bO#r7&c3wDW-$}CrKcR--oFJy?{8~pxOB{(Vrg4w8|&|J z1Ud|7sM^~#EFVI!`c4hafCCG9rUPN$XDV$lH}KKVk%i7P&b|1OJMQQ5prBT0Ud$92D z*_C#@uTR&TpS-+o+0WL*;>FIwMa4O7Yu3q5j$Ptj8u~VV5@Or>bG9q{=U#g0^#(b1 z(rP*Pc&h&Ev@r)dYunDWUqVSdFL2&fmPa48Dvv%F-?#ZlUrS|aoI{vB9{R-Z>r0IC zPDwuUA;E}v8te`K&(9XQW(dA;Shlw{OgW2WbHhF(*x?})sBw{A)hTve`ZSbLKx4d; z(y(HdT()bFgK`pvn8WL|p|>@@*fpm6Y+u^B<28@B?JWC}5HtJs=6C1X8#tSEtzI-D z^|`)t&q>$ChQ8qO2SiKB#N0heKCjCa^W8biV2Kk^ZW$Mw9cj3iX)M`TTyL zmiyW>pz-)lIuA(jxXAktuMP!LadGCDb_5we{n&sV9lWsE$mxIF(IgJ|Dt6MijSPBs zZnapRFuz0y!hN025{0ZD%SsP?7BYcEyk$puU5~+(muHHfP?$)5R&n)Fnbi=KkPsxl z#zs}}1D22jOE4*3=2$P##?zLy_H*WT)xBU(l)V}!l~(;o`{ds>mjeXl6fvJ* zI>$Ue?2G?^c^_}`k~c33GpIgfj;ES)Y>g^y*5}*ritw*s__KJvgVQm3IQ}lKC|E96 z`S~eS3csBq{Pzf*-`&8qhsxc}0zr|TJRuDW2?m?Tr(sA9LJ9a(l1xCV|9G<9x!A(@ zC_A(kvVoI~O|%l)CdSE`hdDG>7#o&+_=ApEEfh5`n8*D@8#Fk9&8g#D#u>-Cj+<0m z4K}Ze%T3Q{h+a2zMng@}8Y1F=$E5yP9R-kHmEO=? zH_v_~jkBUf^Z3pG-~mry%UDSte~*w-iQEj=XuF5>$?jpz3qZJfkj(pWYOpD4zhMRN zm{UTU&rZ!vWTYj+rqD5t?Sce`>H3d-?#(|*iP}*Z-JuOP44ZhuaCLm*ORRqh zfKQ}42s09xD5q83QZQYABPSBYS%C#;W=48e@y)+fZK;x}<|S6ESWqDFVJi3qA~H_X zJebRrIl_Aa438(wTH(Av%Xr~{dO#5JnXpovMW`j_@0ukEotP={{7s8}j>k-@nKzpR z&K)nPvKP4}s&GKCZrPgOcy00S%Jk{%!Y=I+<$R(4=H+I~)@AvfH3FS7%wOKj1lyjf zaCLsScb}k7S?=Ci#RUFF1_7!71%6fKQJJxwhVo;rBUyuq4vgwRC?*XhWsOZ6s0@5+ zi3B45G+S8`v+}o25M*D(hqu)!9-Of4^4hrcC3Rt^6QJRVt3OE}Jhq<|x`` zo3pO9PN{q3;hm#?C|%*$$!)#zy^g!3%SsEV6_v3p4K8*cBUmM<>~GVlkQDm zvRg?@ii6AO>^R7ovC~sf5i5`9m-~HsrkrL?GtU)@wq3)Cf@D{vE$MQ=g5J_Ch2@1+ zbI%DaM|WE+iYzpUs*u`-S6@#y>uohk!4m6|0`Cmp3@x?H<&MVOGse1ir#nwwI>5Q4 zt9^>8lVl~Y^6W)=kw4!AMX8_>Fl|i|z+{ez_vp;GQveFWj`pj719)nI;dvuaoj zfn#Ttckwot$I_H8a_rLgr}1`|$2wf(=|wlQK1Z@)y>$vvTLb1cOHp}I(R4&23_Tbj zbL;=e)=59OCluzGP2rbLlV4=XXB29=>r=INk#~mf@%kp1PC0K#SIbrOe3M&m2hcW-w~)B2;Ir7<(CI;8<2KYm}d>Xa{tQ zYEkaTgc6n7|4Gx@$F%}bq7!Z3F`a6ZqC2+0L_z|ogA3ESUP|l)j|MNL9O|spqUzf= z1XksC2K;dWeZ)E&h&RougE?jkJ@%wm(3{7Y19F;t-$Ia1TC67}sXM>v$kS_tlhwab z58uu4vL<+craAWL>Y;l$(V|Z9I&IFQwbvNq%oDoSksMq~17A`{H0Q%KJqEeLR$0>G z(7gVMpjA3k;4i4^V{8*SAEA?;l8V*@xSigl#4zP*Hs?BD_>srLr2e3B>EKbK>W)Yd zt}_|ThFC4jys-H4*P`Y)){c|zVM0{a;s(ahY@LDBJ7AA@HY#$R#FLgoVn39UcWb8> z1g4yiQ{rmJn~j>^KBvMCjlcRrLl{0=GH|M*Kr!QF!N`$x%=?`%EVVsg6Kbqmu$|?2nzCU#PAdx30RdZx&LZ9fZEq_3y8vD3}FIQ zl*RCwLM7vsgK%X)v;C;Jkg5M#3td8egi?DalJGQ)qt9Hme-S+)ZQlQ>Bn{P%;yxt+ zfjPnoSC>YwsdUUi8gPITE==k(jOOg8HKl$nU67ANr(pC4SnHQ%7+avXPP3(ezH#aa z@W{<$BpLU-S=p;i&312>YDRTBD;>x$ZYMGYK3OmWW7o`U0nBaX_`LaLma=(eyi33& zulb~mals5Inos1n0z%S;!ZsWym*?~6m0QXy3@CBoOl~Rco3$-JTmF^Ii&++fhpAeRpp>Vq&5K7p$O>TI)v~Oa5sB}KmHhN!!rp}l(6{&0S z+}0TZQM8BURh(M4xTRG=@(9Nij5bvDeLe;tIg`Cd%8?pWq;$=`-(M5>%%#Tvxobrr zyAawuU6oCA(z0%1=~%b0v;ZH>;AVDoWU{+5q|^J0b8AFv)`@EC;zZS})>MmDNSVU_ zt5hu~^^;n3naH8Zk|~{%q-P7oB?}f8iw}T~M5mwl;579OB0UOl;^p_fr2!FwS-{v_4`X^gScf=H_lH()p# z#pEfTeA@q%_8E;1G)E=xhbqsK^!qJ_krFu<4HL0qyvNsfZ0?i12YD-~PMg`Cj^k}1 zQ$tu&sAv-sDyN7};T8|RzZtJ#T#8L3(AOEltcxV74bAjxSmQ@ehB&&~hW`&AgJMT) zd?@2RK4YJo+4+|=pctn9b-}&@l}!qRPAN#L>vx)wXB2o$zwltx)36>a=!W5`80G%Q zCU(=NStGP54xM<{_EF~w-3<;uv$r>vijb1Y4a#jU*d!UFezKFPtWX}k{N_sq7v3!4b7Z#dNng+ZfsR$ zEQsn!nqOHFt2ysaHJB&`>*r0I4SD9fwzm&Y>BPRdH@a}VSp!CLIr1V5h0=T|Lrp({A`bmety2y+Qh@z>TL7f>VE)dMST)7 zDRkH{oPun#Bc~G1Z^-`mHxsHfZUfe~sSm-cK$g2q3%?iDf&T{=*?xqIiH*>r}rV3;Wx)}-B?K4LtN)y?Dwj$6W^)%ypB$IGoqG=PO}b$ zQUc%yQIoNp3_)?%Cv;ex{RJ9RfJc6@!>%}YYZ;>BLcZbnU(3XH^W3jBc*>?`K_Wst zFZ9+KU|qRz!BB+~ehBs9hYV`_5D^A0*Y7I9Os@Z=8N+YLuQxH9<#o)s@2L~8ITeyT zC0rP89<(&knx!Jsn7c?tQE~#1FOe+o;RIPKBkrn@Ghj&4zDr)Yp zh&V44osT#u61q-FlrZ=>4p(^ERpC z?v#K^%kk*=MDE*Y)q-KB9|bYgePssK%SCtOIcwEr#7uJHjdTm=6Mr)tv#VAx(&d@z z%T71oaj)6&32Tag6)G3VcS!W8!~~pCLICkI2hqtwQNtMOWu@YL0CEV={EM~$dM=t1u^)C%XstU zGb$k`F^itDD(~es%UB$N*7N9;JpaHw8*=lI_;c&=7i!}$$sJooK(b@&&j5L{p&7j0$KJ$kUsSGK6oZ3z+lbN04Lll0JfG?dds zJ|^J5Q9ovM#5u=SkC1sow-4ny%Pf-7VI?nxo ze~gA7;;&{L&froIC-AyKZa~H(r|66Lli*?#6TW(PC@}&rf5fv5pbTC$fm#dJR1Xyw z4;GgU;q@Er*>?Hg7ISko;cc_I<;{=g=3BWrBMB`vagL@cYlgMDGAX{cIstrp35KcS zR57#bq1g-9xbhRr?Kt0Og%s4%7@K&X?1^uj^^t8E&!=TW+00p`6~q07#e)MSMKgxV zj#|gpr6x5tCM7qFx7wSU!Hzq{Ij(5O%ID`x+O9+u8?$4F_ws$k#bCiHUxkw|qM~Et zT8!&srA=+}YDgPz~{X5SHYbtBMllJzAiK$f5Ut`I1YOX`=;PQ;;4eb42 z+$?GqH;F#<)_t;mHsgC%!tlX3d1JtrTUI&wc7fy8mw@!8xZd`2(ErXKJpWrYdVci6 zhjY?cToahrMk%56WOa08A^-PKnknb;OWmhF!OJ|R^oP7&EIIJ&UmT0aGXa1;x2{O6L3~!z84I#r=|1Rrc*%dq{0YRPfZvE4-a-Rx!4upfX41xU;_nkIK-*MlHdor8&zOaV1v(@GY)A~B zCk6gD3RyFZP|BWKv62RMj~*7&$2m*7~o^V_h|*=>bGvKuTir(m9#M3EES$OGKDt0 zh;8&N@(nNyd==@=<4#0+Q)g!G_OzAQA=L7?d^6%yJr>|KwNLg zA+O^k+qb_H=kk8~tZD#jkH-S-g5cjl4i;Y50R%u0dVZ6Ra$=vuKCk8cWk_luw~3E=3V6G77*E z%q}d&hbNTf48P#p|I`e-HsYT*S(CT*xf%92KI#s5DwG>=5s|W|9}Fzt@hn4AT(tQY z`Lh0nRK!UX1{TMgOvZSsqqjT}k>gj*4szY|CT7Gr8ow>VJ@t=Em@BpudxrEJuc#N! z>~}04=r(i90-jc#=wxQEMhleKeja-ysY>7b#@9{O#qd2ucZ0yY+%^B6p6F;QcZojh zpRuQxulxv#OQP5-SC}q5%0|@rxXpJ{#0NXqO|SDh>mry_BR8eS^LR{OT1guIe?20( zC?Fu|eJYf3PfbZG6KLm*liRarBA!1*o{F*N@XFcKhT&$O>JJ3czt+{igDAkc35l4^Nqun4 z;Q$~7VJEDfk@-8&2>$H!v#=`1!0~O-()a^1om2J>)7_WbrXllHKjF zVCB9u*niYdD-E_g`}$?MxqX%*7 zrtl;LDjPGK$QxayvOY z{b1>6NysWA3`*%q<+e{HoX>CsqHu|;s@sYhPUP4UU#0}{{>A>`1*No?e0*F2_I}~r zXrJieG;VxqYD(D`LCl&t>n4x+yFL!4n#P`z%h=7L6pM=~}a%chR@4TSb92-54bOG0hKlG1k}S zsiZolj!TQ0pnpFA6!xxNyS~<3##N7v6KF@HqGvq~^H3<2GP<-VNbxsePj+9Ky|f;T zL?r^l&-p8WLk}$k4D< zM@qE&D;HE<^spp^-&o5cQsl)I?=#f_8SU+RWFR9rFBs%qu-xpj@6_757vvO8n)!Fo zgPZQizAckZ-vqDS{EN{K9&bxd$x2CXd;9|gb2DnBowS!Q7=I~K&j#DCKZ?8AITKgU z*saq=Mhk8(k28H5kRx}ZDO6%(^CuJSL}`Q&BFsEijI;|ZG+K8Y7fV-*V3=z~dc2>s z$V!yUv0{b}@TI`1&@6H)NX_C176dO4aI%t-AhJ!})7p{wP&bq6ho;%9Da>EqznGMj z+0Mko@_v6Qa+57p1Ds!lNu;nSGwCFMw^0f5_ehDX<)<>*ECcJGp>}Cqn_VToI=zqQ zxH+)2zW%zL6yinZJ0{uV1wS;To)nWrf7GMO<*y&#N}AtfT5A*t=7-D|5SGIW#0Pv~0Jw54azlq>9Q)h$0`1$M-c^ENdF{z}@UFWuHcM zYLVVlGs0T{mmI>FwIQ}jV2ykiYVkzf$4bKt|sHlF;Gm!ig*A zu?ywjynXbHZhp}merbt;s8q*l1qy@NC%e zq@)iOnspzNk}eJ|R#OVg3n^gmn!qifD`1O@Qx{8-_C)?;@48im2eahAE`+W-!95CB*l93&x)cDNkhFnf<11} zVqGev%;H!pD3xVvg4ck<4dv8cDk8`xmZJ#T$fzSntOH9BLxBVX{wR55luLYDvJYi6 zQ5xjO<;S92j=NM3{oB-s^~{rl=HxD3f@fST%HgU;x)Qi1GvXy#Y95~L&C=fHR2X1G z1oNh5hrA)1dn285An@X;qG(O=on7a8Cxid|aN}k)BUs$KRF1EEJ&JWiSr__ek%+69 zT7w>eSJhZo`<()S`-l=@R0PL+yWMw(Fa`mdfA*UU^jgO*Wlk2gJwO!7!Zh{IfBw!XD>@`4h zhg^}~vCm{F(v|kmi?En9YLn|y*YTuLo>{575b@bnj8blJoIO|_9*YSuXqgU7j5iw} z=-F3k@LLvd4ROwM?u2p!BVG9Gqur)uqPlbn%MQA;>fHbH&p&>Bc%3;78@~7C)oQvN z7D4QONwVdTTe;WR|7ea|){R%GH>yQ4L>l*opwfjdZ<&B|j{95?vYUN@_)Fc=+fCC9xH^ja`W)+~zW2m-5TyWw)l}8fM=Eo4`1jb{`YdI$)iNiUX@B`)Hw?IN%MJWlkjsrUq>L*1rkP>RodeU%_#q z^yBI-oK4+7iofJ_ zVW%<6q%r87^WCuXg4Y;`4?K)HF#FsW&frcPp^-h)ccuZYZ_YG^B#c(x8?7ST1;Nwu z^30~Z{7KF?nL&E}f&86Li~pf z7zgBLj#d<|Sp1^bkc%h=*k2;HXhG85cWN*(hw~N?Qyiu&0cA9q(%W;?7j5Zx? zr%&-V0`ve&f6S3qN1)Q2RvO7ky%O#tOX9av$TMe(CJXc%O{TQ{Bag$+_VaP~rn&Xn zP}g*Y^^()q7#iF5RHHL!Ajz%F)9l*M6yFwKiS?p_b%A_)>Ad{i(2D3)! z59paS;LYpDP_U9kS!3CJ0YyYRO>xRqNSu_@_b{g@P9L&>Xb!?CAy9|Rj{oMP9S;Dl z62p8&8KYo`<*VxBsTk^G2r4LIR4kJ~Nxlbcv%vGfG)UeE#>%Cd)RL`WwgD?j5zhLN zhLlPxpd(~dE{9iW6?KLX+xmy%m9ajw?lS-V@Q4s^M@CGqH#dk;9OncnNV%du#;OaQMp&CLs1 zTGp4AENJctG&+pNB$M$klgZ({S&lgBzr*Tzw!{LBYPni~IqJ~XZRf&AOTxaZK^sU) z4K`jP-ULT(_Qg&TD&KB5VSMLk$N7Bd!-YGd?9nrM;cKjAUdz#n=MjcEy~xoDs9^dd zvl=)4>y8~;wHVX9Wd|PlW!|$uQ^Mx(!JsImJn#yjR)!2%GruPh0_RQqXY<{sEqwPL zU0dFbDhqCBmG`mpEIEREPDW>W{T!pO(_YHie7^SRq23>~NtmB);@3DyJR@2(t!eWv zZjkqJN2g$xNNfZ?f%Fm1kUa^Hm!T?|mO01dEnU|Zjc-rSX_0+r?>qKZeR`K-9Y{VO zlRn@X*fo$nzuB8TklJW!u$!8uWH4#uf3T{g*^|UKWCE^#cBGl4dn9=m4w9$~m4*<;~wT9%n{==zN&3<&uF7!HCwQvW_dEjAud?!%2-(rbls)DWnF zS#xKkQuKD~ldk>IDnz=*R`3#wkKa=D>5JA1f;>!LDIkYT1|S5*x8K^j)VOe3)QD99 zyHjr99WD?>9gfPTKBa-2k;djRVW`pva@`{tiE5<|Kwva^n7CcDLoT+w4bdwg1W{8x zJotC}U1uzSyouOh*O(J5hD3&&g`Q|sDj)#S*gLt$98%cCG`5!;DB#dYa`HQ5BkIg5 zG-4Kf8wj`t-y)h?vNgYLW~!bAC#39Lkrp59nUHMnI}ZGIzdmP8``YcFCc(-Lr14LuJnl5n*8(y0rjZbH4f~ljyiqTSDpC|lM?`k5 z`p-*QIh;lu*DsII`x3D~&p3)ca_^q)W#_K@74k*Pr%!<8P4N3Ti{@5NiR!B7BHd0H z{kA3@svH4JBWN-_EsEuH|E5l*y$!D`lcrcC|46r}Kq4IxN9wWM`%L0m9yb@jMxX%u zus5S)?b;bK(JPk_)jd?m(~ZO7+t94+Ueh+kd1W&)Q5A%gz{lG64On}au!8^g2uvJT z{aY5kxY&Q973S`Jrr7sZOwu~!O zO+!X%mC=40?9v~s)^|X64BXiVGR65QNTMYkkR1g9D64O2RweE66Df5gEt1zBDl=*{ zMV}i=+gXY@`1ol(xyDCS_;ePgv5Y)EhOC?NIFSY={0%T8g13VqjY!vy-WU=kM=vpJ zrANV&5$Y(li*|r|g1Uh^l`=}1J$i?N?q2^g+RX3)HdtGk8VEp`tk59O5@RitH_IJb zv#;~-i(P3GZWMg7*17bIQ@%xRA*%$QI0+4?)kqp-XoqINDl7O1g0z)bR zoIp<;>QHTC<;9lGTXI;GMPQC@T2>oYp~{R)GPNJ|&s}H-hcQuR`0D4uxiGI9j@mKf z@^@?rI~plZc0e3V?Lnu@Lq=ougrE9;nb45SBr03hqWskP0t3cNL|fCsa7*GZR~>Z;$o8HS zIN#WcuFV|FENec{smtgSoew5_=Hg7ZfkBMRJ2*+ z@}NjH+q`s&0g_B&If6MmT$n7=fWSO`w1*b%Z=@)=dYYcDX{Z&B!=xm5MkD-7u$lA1 zYuna`EpG>xRe1UFB zqyIX&=IN@&WVsaR^9MJ^d^%h8#3L^DNbEl}!Calpf4eUTS2s7VzJ^_YJ77xu5xE=x z*j9ihO^Kj7qGc@C)=)}ueTM&}NRf|fUccU%c!pfl2!5OA_#@s)uq4loAbnf8zd<#R zLDo8zCE+%r!1<@x{PlH2!0V=c9vXT^X$#yXybxvZVyVmMfmkIB)5@5P6bc&<;7Wrw2q{Zv7{lWU#r#8m$@#eMG_qKlCp0a0JSSd<(;zGx}XAkf+${t>4L4Yk%bjd>m2 z5MZD{FQqHWrRxkns16Mk-508b!{hFnW_Cr!#nr;jB!Zw}P`iXSWCzDb1nk&ARV+ps zf~)S|^pxx-|H3nkg}_01L^r+@8;WbXyo?30rh`j=NA&Y^aC1gift_E88@L4;dXYjf zexP+h0D&<$%zfg7eXrshtg{c+vWTvit+o^DPUvoe8#^6+Sx!ByUp)jeJYgTo3LPaB zAqrLJ++^PlV@L8q^N(*gS^Aq>clS*nGpmFMmzQ1CST?7n03)_bnNNHEfzfe5=h3XCXp^C6%WJI^ zdOnDvZH}<8Xb;&wtay4}O+3qo{Sf@{THG5W>~h)hO{+K5UfsB6({^iQC1j}9f@}D5 zWC&rTT3n}qL9Onho8K|m1M5ZyS8Q5+knOwaZNtfKL|W|-aqgA8qtLgIK94bXofj%0 zG}q_jt5)R=f*a7uLB|UAxI}}vNoM`&NOQ9GOVisecZ!jH2QSRw=WSx=aNw`78Ft59 zJ7>u6{4_*Ohj=KSV;!UrA5P^2PN+;|5r7@;w$QLRK6xiRO_ctaetz82n*UjsugvjLJ7px2oD)+SFg_7 zF?UUBnJ07Y8m4}|OdFMmdKWG1TamPlWg{yRR-zu-ill}2DM~QpHiGtJ zrr*h8kO&SvMxafevwNj4t{h&@T(K&i9}BWL9moG;=BsP+qA#>S;$4N?#Iqw5y%TpP zdVA~lI&n_ed}Pp*=U2P+B-I-9gZ2e{!SQ@Mhy~zadj^})#iui`Sw8D6u5vDjx!`Cw zV#|Z303S1abbLT7##tF%IN?PRJY8oA^T?#Z7A&7@*;gyj>!Q6k>|aOT&uQ?S84UW! zC3#F*Op0JZGYd$X7mN+Blev~)DMpXzIE{Cnqec}wMm}r;?(4vk|GKiWbe$k3+zd=) zGub2=k=&O`{4*$J9hG zHr-X;0j7OfC+h4ECm95PEptQdCprQ-Xk&vDU2&2^N@II!Ooy@AI2uZB6MHWZb5kVehIf#qT`bHy67H+gb{0mb zV0Zf*!U{R=J%@#nq(MVbQO00=j6?KU9Gc*y=deEh3Yx~t1MfgF#BdGCCW*e*;jUtY ze9oSjU+ohH)`HONSh)gOoy*VT6LyZOQ-HJ?469Zm&-T!q{O2?WF4syJ)|1(7$&AB4 zf^1;TBwi+@H?V?{(L953(%q`(9fyGm?CYaYb}@wuHa_0)DGCl#bO6HtkDpCbT}uHJ z+Nx)($o6k!%k<5m5CCOPhgp58y-SDSTqd-4WnKmlLVwK!zy}pV8%C3~XA9>HCqjS# zc#%q#iL|0`V}609cgD!D>=X-Oo&G)(Qgx6h2Vg5eENWG+KKoan5;23hIer9LQ1o$J zJ&vyCat8%ekbIf+$Hv^QH}z2dkypG9asa12*Z!{tsLiS^5CHhjg@*T8-}s-O z&P6mjs&PqzB+v&5;G$n*c*KmzLcRXbvL)gaDafWAAeo8b0|6v~tQQ;g zlAm{Bb_^4^3JyGmK|{WwaUz9xzP$#t2B<%(8JADI3T))CiUV(5|M0gHUnwP;bqeW} z+3dB)Zrlp&ZjHQke42B3%~j@f!(M}FVlqP0#!l?FB7%(+}+$vUPz)cH&j!Wu4`m} zt+m2}4%}|DA2T1bKQQZ=9~?E;?dOJ0Kaw)uGt-&x8L94GB-(=)J=F1U7;Z=> z|LAb+D}h>G7#>ii(ErYvVL(vR(oBHdOP|JIAraEwA*LWL`3-bnczf zmHG5BqIGI}T8<_rv26a4519x7&8wTY>j7ON!LQV}lp|NbW57a412uppP56Bu|CUddivJ+Y;_N%BDu zMo5iG$*EQbvO?#fHBcZJuOMJV&Ovxm=7JRagtN2Fu%F zXU$8n9GYJeS5S;1M)n zNrYtozSJ=SPM5$#c`HX*(ylx*%gf+cLT;5nZ5D{n6cZ6gh#xF|t9xHjlfNrkX+q?x zwYim(De)%@%%CrMh6k)Z!Vgf2A>Ba7z5~JL*-4o-T9J)GS`*f1fs%L9<3VztHokUB zoUL%S5u-bgxKHPU6+pur>!+nTzS`1cU)pX94C&%;Unx)-0 z-1z;B&@?c2@3k4drH-5lLtZg-G7MvCtA4otMZN;Do4Y$m9x0(1!so`BDobbhTJAT- z2P<*8%jXhA&5`w%cSZ3b?;>dXt=)sC$GB_E?(`AvLKp1&)M~lu^40B{b)fc9*3-D9 zFcfvImF$!rZO5%ZDV5nppp4Uay!SAo1uKZWDuxI$dL9SQ((YV_T|mvF>PKE?4MssR z>QjqO@Bbatqkj5wluNm}JTM7eyn>)%LLHQZDcvDU_OH%~)KCmQgP{Mshy(!-RCsJ8 z8G2{K5&%I2HXKB;H6A1Q$;#n4k()wbH&v*^NK;Zsy?P`cN*X&AgoP}Jk;34V0-1|I zfd&yCz*p#mc@XaNNSPI8DW!D?s%R|JAjp)jF!f08!V;TSxWExL{1J9zDD!Fm!4PdF zjr7>iB*tV5vWG%VPQ({pu`Dm#;O*@4D0gP{Cns&pd=Qzy636gs5++vBDcMbvQ-|!O zliy-#*h!K7z#LqNP<)P3jR^o*K&HQkXs{Yhv1BY^bblNl3znSgK*SB@`PQL|W zRqvaDCW@?SShl7PKCgA#P=npU1`RoS)o>6Yl;1f!k1%o7&eB9`X=jqrSUYQVbkyw7 zu;Or2+_>ABE3Xi2ZXO?A?Za?Xd0j^k^e{|2lY~7lK6r5Ggo`UPZ^u=e!orF}XGcY^ zo@J~xB$svyQQWzFQXZjpL6IM!c>bRd5$X5o4`6b$*a9#F>}|BecajPAgp#bb&djX# zj?4_L?tSvOxVRd92m{o12`HA!{G7+Do6>+M=)=tUXYl0WLZSOXfuwA{KJj@h5Y?Zu zACkQSHwg7k;%0dum(3;DOgJt%I(miK=kB@I$s&aj`FBGLi9jtoc?9F6BdlmvEDsRohF4 zF(D$+luUs{JWi!{f~ra-#Gfydbf;OpT-{46qJkjWtGITk1jrr2_=H+|7r+MELT(Hhwok#!Z5K1(YXwx zG&`|)3r~Y;QQQ#;ExP+***s?-tT+L?-qENcwoxoEK9=pQZ&p>=4_-ijlBH`eoGgI6 zH%Y#dXnL?*RE&_P^}W+%7K}w7F^lI-n>UYb%#XIExzdn>Nh8V=-(=_&#SqK;MDrt2 zY3$~uvRWA6$&zXF^V0{xvW3Y;;l{m_26`ictrE z0;RyGd%M-5D1e^!K-SuDY|q76c1_|t6Xrk1FO2hFt;U`;PwpfpCLsL|0w8cDKKvq? zibCi$%%ynR+gEn_Am6QEBQVO2-qGPA4zp6Tu?70@>V%YJS`+P1LiJ1*>&PHB%Nf#& zv)VypgEv%{!5$dwtX!jt9`ilY`HXCobG3Qb*AmrN7u?!(s0b@lCsv010=;_mo z$_sM$>7?uuoI4xpcm+2DrredYZwl}=9wwghTuTVqkV^GC-;xvi|3i)tzclO#y{uM3GB8D_rU3 zOC(@jbP?@hAeHd$%J3{t0$JTi3>dHKXlCuDcciWgqiXqOq{L~Sw5UqOU_p7>$P|gA z%UKUwPGekxt_YNA%zjwPv&zJvNl-$}+VV%db#OHy+dazl``eDBo$(%(kmb}kk|t)l zd-0t>Y~t7SMeR52EQ=^E1kk@-QFqeG{?79~sTpX;@hRE!f^A`=Li$G6QMzz6{AGBg z-xa{N`Fpuj=xBA{sAS^-NihZ8&KvX!ESwb76Vw~j5(Ji1&nPUMQBXM3{F(h{8hkaq z3YG}rxf%q3^&)EG_2%_UKErP9_CofOIcX$A2}a-smAkGtH6!ab80M802n}FZUT}T8X}&1cPmWbI}sYmuD!NwQV}pi zs2UmepT}Ut+DFROXXA>|H~x}Uxk9TxIHI9Rk;o1fPc?xxWv`;kkAXsmfZw#q66qZY z6xG7KL$e;KLWY^}Je>LLbb`^5WoKfLTPG{|b6~KbUo~<~s*M z{aBzudmshZGBuAC5P`(cn1b9AK8cZAeaOoz3T)j3*KfG`h7L^EKLElgD4CFWT#rH~ zx|?8F(P>~X70LdkrYGeL!5a_&Dfu7MVs>rI>(jWpP5Hw|k*HjVg#hP^)1*0=zOi6~ z12XYwFb0t_^|99z;eu9Y9VF|aZ8!Fdq$r2B1YFwu(5YSqgY`Y21}(r6$Sn@~x`T3z zEFMB2Mj>3pX)sw9;3qNyxkZM|)LDQNnJdod!wxHR#xZX8@qCcgp%# z3&sznXnampY&qq#rD8onG|8?tVG-u)l8ITcFd){WMXUep2}ZdE(I5}gObgD@Z0Hv4 zfX@nQ$cy&g=;jmcVRVYOYqCwkqaD8NJrwu3xOXXV`XkNIJP5t99+ExPhpu_O1BqL0 z8k2rC5QBsoOxM+;M!w|F@|eYCksc8+y#>O2p>Q0Zv+?}!%k@}FRJ=xn#+NVjTiiE$ z*Xr?T+8?6Zuj~(dV{#TB%S^#1-}m|H;-Ib)2@E*RHpma=YKu>@85`-`>Epj#W&-$7}?;o##nh#q6uD(epng3@}rbPuBjo9fLX#rLVNCc zGm9y-DB2==B#oNP^azPr2+nOFj$@A-$6tTYy8SR1inBb^q0AoHy=8z<*UtE8en@FN;Pi!jpwbs5rlXxu~oQEcuDof)T~gpGgT9fEzf6(FX} zENGU8YyaJ^)p*Z+K%RZ+M>G9Z#xwO%`9(ro@)9|Tku@XN=PTCkl{Auiw3GWt5OA$Uy@3F zkjOTME%MKf>&c1pSHwlFJ?f)Gkd!gZl+ZFJ7!`lTbNT)qZJn+!#JKP9leV57iX$&s zLT0(fxuVl+b=P)!j(W&j>$q`jc`Ov$?l#9Id7^o|?z5cI_4?a6byr+1UdllKiU42! zf0em31N{DadeA0Z`TH5j_9q9XtDivQ6(~!>Qo)SqJQ>S70f7#1Dm74a^uPd=*M%EE z4c*DG$wLD$5uZAF90SJF8|Uf!&-ao=WF)ku+7PHyX5fUcITfvKm;X9NS4CS&rCUWm z_1ERL$rbFs=-BSa_E-PBdC%5nrFU87we0tA{`q@y6tF0;-N!LIhQG^xHx-j_M{$XG zGUgyvU`BsXK_lHL*pD9@fEl6!8hD_DyQiwhM%<+;85}49apyfZ>-UAtmv^5fUGmm( zmv&?=;rZx}HazUXG%HKn@h%0ici9bmL(AWJLIUsxk8{Ha24CFgh~Rc~@Kz>X-!!IE zoVOOVkDcf3+0AG3=B{*aVBD15WNhX2tO)$T+r5W-t4`nAi;pSAyUzhK=`OdMQvOXP zojyI3+$TK#0CFNKQN@-n^`eGXm6UQ%bbRzl_j9i~?k8g|FI$@WfP0i<-xg&$PTGWLR(`>#U7uP)X zMhXy)h_oVM#F$9bE?PD=B5ZHh=8AY7BW>-=v?A@JwlOaYvY==OH?`OExX9UzB1{IA zLUA$)nuECtgFyiW9YfA_amb;7W3l`d%yg{7rQ6FZ;&F>w!sU`0)kS39wa)q{EzhH7 zV7%t#)oiOv&V^(H4pC{Bvq1$^BcWyBylQmI28JwckaWOdiu)yK9;iK6W8@l5YA7}H z56K@ffKa@yF%ojiTq@cU129EX*BacNs^{Bch-l+xr z2wp%f72d)vyC9k~`+CmT>X{}%;7hWFNHOSK$~@j2kUJ&Lz_(BAk(&IRJnUiQSgjg= z$;Bs$7+j8t1iB3Zf~t#hgL?zs=)rT68N=3*xHA^)ZxOgrIe0Yize}3H$h-S*Du#jr%5BDciK z`k2J3`b4+W&hW&albyYET5nnBY=k9>xD%jZSFa!O5W4&{)C?JIx98B&VgEky@ zL0_&Qz~~ed!e8{zZpSu^aW0Ieo_ohgGH|A6f##)6(6kCU@!dy-s63UL+6vOrCa0xN zekcX5myi?vj~U=fTKraf`z}-ENHm2ishv4aecf*ihDf1KYd=vfUNdE9s@LeOF)Ml; zcu(73uh=PDe*1P11;1#76!Y02&@Evu=)xONbUypBK{DZ?1rj==y;q5LL1y!Obg2`e zFOZq?-D8(smjAoBFLgmI32Gj++2^kd)AKVZ0D9&#i)WSM^y!U}3Yi(XfE3?9wKJYkdGZN0Xlfpy#Qsv%#1mu|Q4`9Agg2&p#jO zKUZ_ibEx-Cp(HT2z=%F!wo+a=rVHtHn~9kN`6FpD>{V}q0?wpY{DjfVmUnb^`}pTd zV%Ng_H+yp2Q(%nbh}UvgjkWcr!v za}JN2eB4HbCHSF99c7q|Yhdq>_wS~cF_$?F^L0tcj?Zx^X8smea9enOZf+eAuLIh# zkmjTlhR{}%gs1nz@Y856HeHA@cV`J+N)r{<8^nP1hv0}e$^;4> z~2FiuqBZ1Sk4OR3X}rO1()D51&-^P;Gg7L22D!m*Z-$axL2GWM;kL z)QWY`>1XL@EwOK`vlvY;V6Q(B$jckmOqi=(lkiE0C~6!8Ma3vjv1y2z;4J%Z@E$jl z8#Gn4Z}y`fwDS)lXtwV136rwSfcOz#1ygA>yxa$xz?lOv^L>2g7fiEi>SP+np%|BV zUMG$)kDo5n>15L` z)#YT(B1Y%*tL?^cqZc1afWzS7;P8!5V_ts0Gkr6g1O7eWTps;+Fjod$m0H{p-@uUs=Nc;72bVwtY&|c1(FKrp*>IA3hL64ejF*4Swt4 zgHJzhFGr$RPQKqtWY6dnqE~R0i64JX7PF9NPraMrL|0r!C4RMdE^F=^S-Klz;suYQYBGIRVhwcHob3Uya?}6-N>9%Y< zRQpobZ!dCO{UWUtIq&mrz9UWJFC!0oXC3 z5YOaIbfRJ|A2n**#aQd38%A$hrYi4jd-V60$Y&wtMHrSOLK!+LUfzXc17E>VdaC5! z9&Qv@@DN_AnC=o6U`UXoSIrl~f;N{-Zhb}`J*qG?)w_depU8Z&Nn^#X9bZQ&s`zj6 zi-}P)^BGW1($Vp2D{}W~)#;~q7EL@g4BGZ9W*Um5YJyxaD@x-jd8AE1cGI*!_x%`@h|112v>p(W~F87!hO-J(%7lm0VU^D_eYP-{RGsUa1 zE4n9oUSUwOnx3Lg@=5gvzulXD-#oSqffgY+t4LsaD{kAaGid*IDA6vz$NeAArPLlV}AeN-`wVvtMK@4 z1Y?-XT20Bej&tg3y2Mp2_VtGAqKa9Rl`y_`kupiCP_S)#jZHGJVnsYg%xBQl0Lzw2 z3)UR1-{u^>{nwOBzkZNYpd?H8X zj;7j1)+e@Ct()}+K6U?{=4*F;aJA0gzu?38CKw=<%<{g_OgDSb=gwU1t3R(b-yKcH zADFYQwcUDP#HM#zUmwrQ=A3F{SNH5)v-M4M@0$GGR*gDvppQ-Bhz%{) zS%yOvPwS^ezhU-v+Fm077C+EFzyS!EzY)88?+aw65bT^fOOO%VJ^9%#}28OKJtArKT{vv4LF z5&%4+W61%8FF@gGuL#r7zdnI`j8(nmS%BfTknoVUS!g0d!fJ#T8G-*mn&-{5OZTG2(+(N<0Nz&Fy`m9Wy_Tz)D%;~PD zkzutnB;b(qNuGY?>5}O&#ub&!${n(h2_-iNRi1m9dpy)D_O?t2mhCKKmaQ~;RFs?= zR(b53sq-bnuTr3ISG;qp^v~DiJcM@_nNE0|Nb)y5xjaspWXf{Swig@XK0Gt{7wz=; zqsXdRAvZvyRN4D4WP%_YCgdAw^+9 z%W+IkI_jNbPA2tVz0N6UttjpyVN`l{OO9Wz-8wRyR_W~cFP|xsL_%a3KQ%#YNbap& zahye*l;jsG%07EwOag&Ovz%+qXNFzoyo_v zIai|PC2HOJEeNDLaI^)pgLkrwR@oTMHWNdlCcUjh%Zyf4-bjPkBx&z0hugO zN@a2eisEiw{zjEfOa=j4IV3)q5`u}Vo-gJf_;VX(9E$E6A&C+wgA4)>y|Z9loRn^t z+v#l^7;9)Qb}L@0~cx>2x+ZIkEboMO_OLk)b`kf#*0EP+N(pXor zTo;80)Si7L_WICswca3K)|n&tXKuoarVldg;JN; zg(PuJ*WZL;$X?8dOo3qoV-hFX#B>A;{RXJ=o0yHDp|BFdGim5qGCv8u zshK?M1ob?t2!WPX(%f^3&{qmN1ACP+PtHa_6Cvmna$%T&U@Jl{IurJ3SjkdALF~Zl zB{EgYLY{K~CPyAMSEUK|7@%ke3+g0*IR2MA5a#LkTvD(K6{;1WEj?-%vc3{UItxJMhuF;rP2B~Hs=!(XeATDa;K&c z7OUcdRm4PXV_HLlSK=xhMhD^P?!`aGv)S5?Eip_cXGuo~3p02yB>0=NN>%J2tPYLF z+g6~^lF3#_QfUaxiL&y7QzyU7e4jCSp2JaF=F(HtozYs+T8E5WyJF?hToya=`q0kd z=O^-tqj^4g*M@d&FwH8fD=hAsjIu0DGS*d2O3Tjuc=ht-tDSLs@(VZ!2U0q?7@Sed zNIM@q92m;?9C70RuC2@)Utlnf_oT2`YBn5A_ICU`yRD5-Gy zun81CXD;I}W8w^El8#B|pnyJ@MFWzN56f5MfMlmL2&s@MvqU(QUNTd^{RPo@wEV%Fp>z#!7P$?fc=bwLu3&gPNoy*MHeJVjgUCaSc4yn96zm^^&eBmA#07njkjDW5 z#-GXVcnQ?!X<>-%Rs1!BbVDo-FIlv6RibKB)9hhJDE~t!5ai&gz6)1&U0!BzxKXz! z`BT-@KZQr9{QCR31PI`y$+SXF>04XWd>1E`ZF$6+)b{r5{#-yiynn?#@%FLnn}3|> zM+WFLj`~-%(QV#1-4k^#O}h8ClEzQsEqL!|qCmRGC=Wkt!8Em8Utfa9dsdDiQTD}w z`vDM?2zNfnC+|s4CQ7RsX4LVhtSyO(6k$JJwW|RY4hS@6>Lai}hY}(OGC~o8p1iTA zAGS!ua^hh~Z=~RkKfYzgz>|Z30wJY=y!BW2>;~RYncf0_R`RGNj<4{8HI0bLt5(dU zL#QHI218RB3phyInanAmur1?J8#lGhH#H#jk#KF$zxKr1VE;~eM(CSMQ9|0*JkVJy zzFG$@Kdx>ZM+eGRx~ttOVV#}cd=J;mkkwA{%7K0gwXL00b-2EP+Tc#;WKQ+q&!ddz zkEhOs-d^MPUHo0&jlD6enE4MnhZ&un59*k;d$5x+Y$(|~ zCp+ijEF8~VVqwnu@Mgn6yG&UgfXa+Nw5r}20ZqYmE_N}OZ5^u-xPvCPR0PI1i$9o& zwo-(TKm*}V)z*qGmo|3&nDuIgOYHI>xc+M%Q}TnkS$r`;<(*myT04etD#){Ni|v>o z;$mF%z|m$()Xh&_eCeTGaFFj(I_Ae6gbWBIJ;?=eT>eci zGHduqyG@1DNVg!kUg|_*BFIA59<8`6UVbtyvJ90ra?^hgPVoZ9RcU|P?I@UkLussl zBU_JMhxB9AbcX}qDyDseVbFVyR7#c%=lP(xzLyf8E0x1qQo`-IdWYiJZgS;!Qur%7 zN5g|TrX|p1Dxhw!TgZ-=!zqYt8`_`3`nc3g;Pa=gjEsPxQ>mEa#d4;FCs6A6zyM9= zDxEB5&axani{eXR393cV(Pza)$BF)U9?ogw!MJ(?L|c`5Wns)N)vozS-@G5nA7EAv z+1+2B=`zhKTGh-3Opm+$gIm+HVO;RIu5}BKr8X5+h>$Ww)u5uM2K$jxOfv3s>c!AL z(bL@U4n_vcG1MNX2o0eSf-hES#8FWy<33l-a@Pv|PjG1_a`wID3X+K-P%3ei?!ttr za|FTBjW2pBH0n6=%rwTYEQ!Q;>*#WX`qK}=h0D$oJ~QQMpm+&bd3dfgEv%kuX+DN= z_iFALy;8s`9~X()6M-FMHmW77>GXN@nVs&td)>{KO1u`hWCzRk%fLW%#3D15RkLxi z+-)g~g6AU_8!0TDTN>aI%_7zLVYxJ45j#*EBM>*cO5=pif)uKc(`#7iL5-3VEO&F| zlHWX317?%)KW04h1(o`eV5tDQmRivQuLWSC%!&Qm^Z!3?F%|Kd)@b1ryLV)Ol>FmY z&woGUF{MeVu{zFFgEU$J+G{0Vt;SL=p*_61KdqZerQbXyCTZmWoM5m61o@#2n-?Zh zBE=BClW}+_dUl~x7B>9*IP(|+)iA`UNs2IpFEKAO@f>CVC{C86_aHxc!)G`Cp2j!?^8gbn2#jJEz{tmbOY$qz))id#`~J%Xb+V32cbvd^ zk+gOmbFjVkP0^=L2z%EO39J}{H$te`_iQkgXvXf2flvw}H)@E7c6(E!YGBWpi~lQp ztRS@aw!NVUelPlZw(!-qNc}Mzt#d>^ad21f`hEn_63MK08*B`a4I>15TYSyMRnHBG zy*&bxBA6jeSmf|{a_oZJQ>#)cHJWFutkgCGhtcY9AWesn+Yp^qqFOUooUr}@2jspQ zXXfGc$LS@U&zB60QuyY2v1ePo)za5JF%eGt>W=xo2PuHo;lQnZaU)?ml0lw0?Skcyz!FApv?vcp z7>0!tZ)&L*+snfO;YB=El`eID+>Tl}bw~X}ICVi3izeXFS7 zf%U4_`2oD6eF%M4zT2pT$xVV+Imp@*mh7?n0AUp?$};U*28=Nj=@lNBmkC1HpLRQ~-CNw6 z6O3N4?_0JeP7Cq*^&*Srek^2C+MJzcxJp^KcTQSp2$?i`f-g8XH6(nkO}2=T!4x4Q zJste3IRhuY7B=Z-GPmn`;fR8`jhp~r1l5`A>yET)h-JYLWq{wALbe^r%r`oO`TRl*ol|UvORCkKoeYXdkMRP*o_#piEaMjh@`c zoaf{LxFSC!r3gC4&zAoRM~Fm_xC09DPjsuz8O;R>p|aQBs{bkE}7 zX$R^3vevq~R@op{f|6AM%o}UQEN&c=kuvMKV-l1$qZR=900)r%vjOZ=KX#YRoLLsWd9e7em84x;WcKDJyYxmBVy0)NTWUqEi@?QQKL3u=GwnvfL&sE?`-u21t(2xGF$0i4+@sihX6twnbN5#7$sY@*oSR0VBJ&+f? zmHG9HHzMhY{^>!p;4 zc!@7HM;Vji`*jY0=F03%O?GvvVttedUKaRo%cC!+#y9VifB&>PpKR_kYx*=55?9i? zXNgEbd{%|h2bJA8jmGnm^o8q*JGMJ1d~^P%*w~ADvu>RTeyg3=`Oh2eS}4rMpBENR zFY=NZ;GUeEo{=lo*0eQ;v(I^^^rzEvYe(N3dd%V*f8SG%aI9vmv-OpedNNP8%0m+W$ZC z`kx677zk-|kH~h1)<-$nICK?diu4uyO+%8jNj%p;tf&^@?^P!TxH#XEVV!gJ5MPS$ z_=*{lV1wV^E9L%`QBDB|{QmIX?Dr1^?)vzcjUUG2tY1XOZP}bC_Fu#E=oQNrxXV_% zU~IJKjt2uVpLBq|jI)Vd-J}lodl`E~8-;l0<&+9BICpREwoc|YR`fm3ebvJ!DhKtI zVgY5%)?)RNcI_Vs9sm7#Caf1TO!$^kb=v*1yyP~QG<|+&$)im7ps{Uu;W9!89Y6+k z(pPR$A_+esM~a|YqvP}>cu~RwTB@lt-{6X$RSE+${idl9bXaL&KE%Os0;n9cXg#}% z@G*Qe$NhdL-;e4TT8=oVg{B8R&3dyqn<)?wIQe-GiLK!JiRa=5JNAC`Ji3}C;_K3r z7zTiQcste(MJeezzKEr!`_>5?8utYg#|1{n<`%6EAoKy_eOpSPzP83S8e{KU5MG3D z7-q4qul=OJtJ$tbZQJEjh~vLOUg0bB(toF->dSv>5^Xl|i^IuGXY3(rGLYWDR4 zFWitbkt~;z4d6?@$YrJE$PH_WV)2hZ{6uGDYtfP~@BW=!1UC`9pxr2lA;zK@(s!&6 z(({elL7-`s1Ux#=zcDjT7Hn?ya*_x-Bj*f@flbfQBdYGGrT!(`24{IzmICnp1R(vh z6K-9xbXh>&sf@5(3uJT&Iaqo-L__j#mC$B~@A;xwsDD|f&$fvZ`<~&FdNWFT@@qn+ zG^(nb7l%kZ%sm3Hlf})cl161Eehmq@nHtNpA`~*d4IV2?^XVtPB~-<{ni~sGC?jg+ zvE5+p626^?lAI`u<|aObk9?p|jx=*_g1?&x@+M*h zNN{ITFzG00DK8}6q$&;q@x+QIPKyXtH})8Rx07e>YDW3;HAe`mWP6aqj>p3upQu3Y zl1(HWUbDQMvAR?4^r+%kiw)Vp6!L_Z#BPc2-of6L56p7|#6UZHM>`5+%o~v3fxY@9 zx`{6dDa;s2GrUtZUvj5|%-p2njOQlqXBuP)3+einU3W-WV6 zd^3tV2xdfy=dWFeQ0#>H9WXHl5OW>$F(z{v)@@T$W6=s`r1_7Dm3tACZEUZNWH0p@ z>+Nn>$#@jKcoEpxZ(g6@Sr0&**7o|f|2uRJP9Q`HvfDfVdsY3}_DBUaBnIzqhvFxy zFD+Y)TCLf8cXDDr$)2d()O}Nf)SpPZh4>uR=tVyVFiuw?g)jx%u!u2b1rmoV7uom# z<|&~3q$db4lz|hAr`r<=0Kv}5`54u`bg7=E=^$%^RYg|2j*yO0W^)UiBCcs=Aart*a-+DA5qb$)ls{fanzfCL{Y7Y z9(OiTkb;UXf`N`jK6%RSz6NAhqI7nni_I)|buZ>66>$gwRB9yN5hGa`4$rc)Pr$Y& zKZ>J4Y8XMqNEn_-C?=U=Aw#XQV?CMhE93Y~Db*U;f{a3sx zOUNJbUnNIv=-Azd7CwZRHe~mN->8=G2n;` z)UD+l69rDTAooiXu6|!AH|Q^k7p-}Zx0%~lg}=JY@lW_|Xw}RK$Vg2Nj%F_Qo(Qza~F>p8zt(<*vXvwk|2i1oK3|*h~~8Vn(ZF|$w`;I(!#IIec3&p)< zOY7^~5Q;pfQ2$kV-W2>EPVc`fj^=i4==S>Rqjl}QLnrQvcbz`3S%3sUaVr0R`}T5Z z10;w%?lEX>w4=h82DZXds0e|UndNe%5guF|P$;$~ln@CEZpo1}ueqVA9fFu;m)HU= zjR*h>P(Xm4*e5|iu|$4aK!yx}+Z6*e%s}lh2)@A-GD;g72$^*X!{ZpC1e6d7$kPEp z)>m4@2=9{m0WoY^#6*ICd#wo20DCgqkCK?8dH9np75}%nd+}nWeLeKzzVhxYjbS*l zE+SZd>Igl0cbWG>XR*UM6@CXaHE*@vF>*tC9k?~ru- z2r?o-Tm|X%-l($k@a`{0!_XAIvm=XQE}1uTGMd?5Rn&@yo>|7C{H5R{uWoOT7jz`# zHn2_ze!EGy#a0i znM_R^P3cil1!lB~dWzYz714`m?$*ycPc5-nO1^w{pm;^?Lkb@)1t`<-ZtTVy*LnPCqcWN%6w2$*z|chbH*Gxf=n)SaxtA{I1wywd5)HNvW$ zixyAoJ6=IN7l1gw!ut4eGIQsfH3z%8fH|GWAskYjv@NM^JfS}B$UbMTw$imr zY^TGuJ2w1Wj)~Mbym=nY5#czlJyE~6Uz9pvDg{rYj|Vi)n?HFO&K;|^#F(9}v&;-n zBni-Oef7}m)v1o>Rks+rJyvGB%k1f0`Agt(epKpg)v7dlVIHWaI#<#oAUxkYkuV`$ zfoNX@8!$Aa7{2rCHh4w+Z&D3X(fV~at+*ltK5Y?vP`Y9w!R0*+&zx?s2+nw7 zYo5@wxHa2*z`u9i5Er8YF^-fNQjFLy9Hw6 zUl^AY2vRw+>e}hsn5q7|W>z&{{ccuxLOqgdVDW<}r@%dl zB&{a`C0Q6Bb3y-n<7Ajn=g{rZuWyxvO;%dGNC87ST!5m^X|aw6Fi%2LP*8U;1$E!Fe({7@rp<(M)wm%jE9Q+a+3X)_(&-uT;J^lOeEWN6 zXKL>T1O&;?!)N*w6Go?e0-z8{EGY_pB_+ z=_!O@Mlp$+b^poKoq1AZUZJd(+<{{N=`IrzbBU#IXnv0o5zaa;&oS`=q@tMjVX++{ zd|+WuS~(kY-xQ09u!#6E+S^5S((TOWw1F8%Aniku@7v~f48kCb2_f*=A=o$)0;~YS z1#sgX1&RT(5x+)J^%BxHrH;l74aJP6Zb%s()&a8443Gg1{+iADE%^n7GA1T{V7+IB zABiq09xfFKa&&^%Q*DBTsTvm>TZQ02HvGBOl^CrcMEK7YQ_==r9m_wElDEO_sB-u>O; z#U+e~^e@ft>BUQy9JHNprtit-2dvZkGdt#fiy05-C2y;{E0oY562aNM9L}MNg5}uT zjKx)+EA6YSADl<*&eDnujGF2eI15-(X+z;t+F`FmpZgN(6_&dlKc@<>)aU_jeGN|S z^_a@uhHiBeuUcjGfDu0w-P7vgl*am}BChf;j>!<#-5qA&7^j)HA1x^KI8d|#S9g;; zADz?}zJ^FQFR!pqx*AZ|jNsZRf=bWnP`8GW;E};Whc_z)6eac8z8QvaJJ$Ka*Dhy4{o?%QU85YmE<2E zazynyA-E{M_Ccgt_?KqC{Xk;a!_euwEJaL<8f@~Ma96QlJS&&AA!-A`+Lo3D4<)!h z0>_({Z5p_P$hRa>l9TkeKcb>-{)DhtC4iN-47H6d2JZi$U1JQX$WVfry{VU=oSUhJ zBYH#I29XLiC&RmstpEHn22CFyiL4M4pWic13y56vU0mgG+*yRZu8?MHuRZ4LT#wnl zrocvaVQ$~?5nTW8z;=9>{vo{NqvGZ zD!m^1dB=JUM~ibcF=J{(%alMyfFxSz9~of)uP&G*%}f}^YcuBkt~Pi*U;{6WjGhV@ z@)z_0pffsfeTF`E-4$7ksGt8$q+NRpO8p!k=Jq+`%TwiNE?CDU;!f7XB zgHu15a|Hro?ePpp+Heil4r}iMksVsUFOH8@=2%kS@0@(=UW0IF$n_ntnBH(7)gV}~ z|CcdDAj&W{;P|0W>5+^dD9kaU6n~!1SG-yeiR}q1;97fI-ruk{xWDWb>MBj2;8tyX z34Is;17Z2Qx9_=Q8=72{?kg6+ikFK9omVLzReY~L3+K-LYC7>%Ve=pY-$~{l-Cu6a ze_6EUH4S~YRCU>HJ7gHNGp+r8{}}FM=fgFyk}ni0{DaOT5h4dJ8M&ilM{7w4T)eIO zIb8Xg6feCcB#-W|E4{6d^d!aESHVCL4!FSgbH{PSPD>)p0Mw8HeysazdXjKqq|ffT zdtionx1A}U5w6vpg+&IlSOYCU{HMpk%z2MsOE+h1J?sXn)cp02*$7{7Z0;TfPS>tp zFH!>MQo3Nt#;S(dzz!72gJx^t@M?rmu0ENPG)8IAa{Tzv zGnt*K@z?mbKX)0@Sz5n4nK2#R!$_NIH<*bA>45dH`}JHzMQ|1~I{N@{SdkC{_#-M+OL0@US4p7^sTnxEw(!cw)i+$D|(+MyP^P z)pZsE6ILP|SBo(c0q|4lE{APrE=s0P674AYPrRx1&t6flzr zL7<43FnW*&3JQzYicp#VrxgZ9tV00B4M6hcJV|*MDn3(86j}90!ikTNM!9kqtKzN}+ zF~bN5=G$$b#|GKk4KD_jm=dvLUpj5N0E%JQKtP#CAY`bGA{}RbzyZKG3MN7lKrm=e zQVtVr5ir4ksbVn^13&?61JyuaVB#wV44sd5_h$eA=*Iwv{kLfPh6jq_HGrp)5Cp^^6~MsN;ar2_-G-tQM$$NgARG((VkC-<+(>U3RuW|t;WlJb?8OGzjex>e zNW_cFYKL_e0Qe|TQ|9m5PC0q65{(SBS!AcU+<4HGy1d9T&!TLx!$Gb+k7BC#v<)zmWFdgojvxfvTh+&X8Au2L>Hmk|auXn4r_M(`S5!L!6Q3zdA? zhp7-B=hQiB`u*B|Z4R<*A+A&xx`M|>B`xTjJ8YbIzqm#?H83_cKVS?q0(bQJhde30 zslCR^>&yL7@O$Y4&7A;)dcG>DH~GC`!2&8}^z)g=xY-V22ix2 z*f2U;+~**J4i!a`bmD0!$vJS>;pp993XMDMKKVD8pdUOBR`UYmCOkOrV@$M1+wz7Q zH#hH8fXrNSAL9|vSMR26kU?M!*NE@gOCu(*6x#S`GJ>zy+lmT!%Ps{D&mGd-4P&heM% z6-__jZgPg->wi?L5H=&D2?0{V3*!mE;8_Ai2pVe*1tATBuo(=kV3p60@LB+6`V81* zKpM=AF~G49TmV2_WQ@ar0j~p0G603DIS?a#m_X@7z|g0dS+Ls?S}#H_l!c~X4EUS^ zj6$1%F#@H>b@7}RFu)s!K*7X|3H-=EFbnItLKsCrEF9=qz^=Eo#2W91rwdJbb6#Vx zXzFox2nK&AJNApqUD^)_1611GNuT0sBBX-jsaL1#EE6|BdLPo3MwX~vc*`s;zZ7nt zT6;O(Wxj;4h#;x}Zdu{MAp{ud0O}B_0vJKk{Er5U5>=7oxHou zR?wYxJ+Q}l{%p}oDM}T4&9JI*>!;cpgjgVoI-{H)?AXh z6&f+mtzeKcvTG)e>r0P~PK9M}LJKYTj=Le32*bo%6GOlBW{+66Zp7$cp?seN*g$W1 zUC2F`^YP8x3wi!Cj3?*rg>UzGUe0WM3H*M;tmhp8zJ7AMB?=CQ;1p=fCq%NSswKma z%al-wlesh`0W8ucVq&Tr5)C1rOFhDV(Nx#^yDF161V*u>L5HX=9Vm(=*;210J zMwX~>QtpygC@ZY?AlR8{4EwEx>>LDcV#p!FNu+EJo5uKvXONQ9mDwVah0f+ggn8g= zPC3P((^Zi;rL4YScbO9MXYFH`sxP*&({JzlQ%90#QJ9XkJlyI**5~#vEOHp%<|KY^ zCB(kFdI0%^?yOaeW2H~{S0u?bE6pqCU%*EEM2gy$4Mj#{Q>4HXm$*ZVYt#6VX=I@{ zhY6Og%-d`TBK~Mq{bxaxUHPLP~@)i@wCpN~SSTCqwU| zbX!59OrmH^`ccm%v54zl4`c-Dd#`5StELj$qR9GiNuhfY#*KtAuwptg|`g_pow8)xXn1puEMIb^r+g!JeSy2sKN{&&UzmcTiNLR%ezw2Skmm>zJ7f>Wo-%GO|CQz z8y)l8TSsqt(6eA+ySJGYpZF_1oy5&Z=XuBf?l_4Pbngp7ynn|;PcwUyCd6DSNQnQC zmPTfo6sCLsj*jsu``}$U&%3KM}}eAdp&aVAq7~eVk1D zQRZrkkt=E;&!e^z<@rLD6x^=I9c#T+rn?0%*I7<*S_Ah*B-2p*w8T(`vQ~cFc4DGy z=b(WcPXK7g=`!st@NOt8B+HGGtg&sP7_+2>Q&s3NSgAIl`i=?T5u(XJo#&d+#Zirn zpJi9Pv0=FKoIh%^^PemblC{#5j*3u5p<-ufY^Yyx!G!}2!CBna?yPLeg<|mU04S{- zK#jd1)YJ;Ih|Ekfa4!TFRwV1WxcD9bW|N^wu*#rAVq^j^tO!i^1)y#`1RBF3)I149 zt<2Pxrd}sNyO>R3CR07PdW`)x>TphDoMK;LFoLK}>o|SJ`ND(EOztuKNB>O*4(hH|aUP{y}w-m1MA&6V62652; zo>!m;`A^@G#qdT{F98x{FFN-=PP&hJH$F@isBf?Bk$kQnvf zjcS$LcwHlJ#&`=I6~t-Yo@~rGi^dM<^dumqSR_t5d9wi>extdQ*-U|l@r&eGM0{pF z?KF)2B57C@`qn@kkcwgiS|h!tLa+d~&qaRE3xDom7kzh59yt#}`l+)Ai$*BTlyShH zQ)?-kHc{|@7f8#2#rIvFF*g&cnE18QqQT3|T|LHO5iS10Fx5#=SI2dVn3*_<=+Wyo zZ%%P%r{3-!0$ULf=~K-DuP!8!lOm%4fcrNeym6f<5*xc}Rnq$PmnOz&&V!l>pSbrZ zpW`{?>S|=mMd(i$fU(}%+}ySVNP!$|Lj*$jG)=u@)N4cUj>n%y`06B0dvEw@k|o>Q zLe^?NHTYYhuA@AlWU;tLE+p3$3q1^!-ulxhmZ5L&ZMeFscT@(Yb@c8!Y6x9~_Rtvr z)QIXbpRu3u{>0qvyD)Hkxn;(-6q;sx^K&HvTN0rhERVaQ4?x_2rkR;&fChI!wP+3; zZAesHZ(eSqS;l5q%Et#TbYF{k#S`%-S7x1v0{dCMebvjLEOYkR`vKYeVXCFK*%JKH ze#{^_(6BmGi}RjD#Pd^}%^vrFYjo%Qyr>fN0M z&vU|RqHhluSIjHB^wDY86xS8s&&#Hn@1M=G+&|FzCp`^Ai&BePu~d3oDntM&^y5KmwDcFs>3-APSWyqS$j(*gXx}in;CwzE} zY&|t&L8vY<<#zfb{>CZg2<8Lg;y`V z21irVIz9NDl4LuYdv!})}Y4%{!^rv3613$5Ns`c1t#GuG74C6>0hO-E9%R1#3 zob}r=<6oF={Wg8))g@8B8Uxow0(}z6+R449aBc^XH8}(S0SEAp%3UMl10IG;$gH#R zTFUSfWtCHJmR7>f@u*xX`X7VcM>aK=XO}l`I`Y5g>A97qH>XyXosby~s>|V4pOvLA z1u~OU&Lx#0z$6pAEL~;w1%(3>#WNdjN&C1Z;!>wOSF>M6xn6-!^?yLgY7V%BkhX^` zBJP(a{&#jZv-oyV20V$K?x$_zzKU_$**ImlQ|7HJU8}#T=SoyhdrV?cwn#fRznMlY z?%ST{7f)2K)(S3&NCGqR2gPYtv-3Lzp#9GciC(!tgAm}JVkUwNdUQnrU6ksY;c{`_ z6!q~12?rPFr+R)+edDWhvw#skggPe3)D}r7%Mf5OUfOih5V3Y}i4F>zmjFu+5({t% zQ8&-x1O|)g9jBzZ#*gGcmngAPsUpL&drC&j4QPSRZuXC;I9vFb61mnA>$g(9pcI`0 z)|A`GZ7%-L&opuC%V$8a?rK~NP7jcTWc4yC!I$~RRCZmb=e)%y9vA3*e!E3SgjS_L z>$Hzh-v=iLoh{hf zyg@Nv5an3ak%9b9Alnuf&Xf&9VD9an>wh^4uI^pbJI$Rg)CqX{>$=E-rJ$n@#tThQ z1k9KbpjdylgdiyeHq(bWOQ9?V~PxN8F9b(D*x9-e4YZM^tZ6<+l-)D=FX za&mXNH6*3a|7v6{BkR+ZSJ)L>K8ceK5QC~c3<>^W!vo;V^!|!6D0&83@s_)<^luw% z+p6I=r&kOJ#ZOl(M^D>N3fjOlxa3nXDJIp1`f=vd5INS^KDISj3;PU@*JSH%I7boV zdJCb{Q6ox``~Gx_!9^QupSSg4)eY$Lmk{iEMXQq%^S_;|xm<$i5snyEtdlUbRQ{~H zQ#oLOr^3F633NTA7SDEMLXI{mWE4kXh>470eIYSs*Ih%t(&-@_6(ZwRpMtOu?}HS} z-~Y#KLkR*|ylteCYQF@qQGYyFjPVRvLBUHubg)iO06=HZ^8(bAy!_*NA%VR7paLBV ziZBKQ*x>a1{Nw4K>Ble*4z*ExsUB$19M3r(?OIPQX-@>t$kWaVPe~5<^m^}gxID4C zI?*#1^z{OFI~p6poT4t9d11|-nIKrO2+$D*mB5>2+vL&rD`$w!$I#K(7rsAV{<+`PfqPf-yGuC*aH zyfb04xR)%Y5eWROxuF7cOzW%sL>}C5O^bAl>PO*=f4Hq|GX9O1?6&VH_7CZ{3+@-j zDL-Tk9aX=h+a-SYYS{zelmCj#w~RZILb}9NA8uy<`VhMkcjX)zJ0QouVmPmjoQU4z zjPax2T4s79EoqWWXOhz1z#n`ol#e;@iJti9HJ1IjYp~AYs2g-ujC^9v84k2LQBtS; z_NUO#GhDN4+Zzm<1>EP-3i`dX;Tq+dT|$BWloac%|L;)x)bFld(}ML!U2ePD`{bDi zGcLAC#zeGH#<;J2%f!B6d|aki2#03D068EawE3Gwww*`tqG<^NPKcJ0?0-3R0t(|m z-ZBXFGOk{%{Thov?0j*m0ba)48wQX7YRuv5?KWBFG+8X&vlVj;!2m#?ps0QTL>LRG z4o$W_2j>N`KRpycHy8C2#CrvqUZ%VxZ2|<44zRSQ7(f=v5QDT1eZI6jM*wgF7B*-O zLj*v`0RYyo?<=-%k}*uF)oszz(#W@mO7Hlz44IE;5x5^x}JIokBnt3FrzJRgY<9{MR84XPE)UCNtp31aTYw<7G` zPW0|{h3e>w|7B!&w|XmdJHy?_(vqRTR{Hlh$C+5_{|1&LnN3+Ex$h@>w zu?M*BVTZRe_&dq$-2;)RyCUj>P2wdp#Qo_6&8#Kj#lvo_eb-o`;P!SmKhJJY)2$kj z46JpXn;>dz$d2@YAp1L`d>^$<(*r=U$9Tcp73t{d!_Wkd`iIse`!k(yBU1F$zakvXw0)a#u+SwXK-^W!?6Z_KGx9DcSKA~@4k5R%I z+-~GhZ4=XT8#+515SM$}MYD0Jma5p~@`i@;lB)VbxY46n=40^nQH{NiiuVuyN$|%8mnK&F^bRpQM0utAhB#b0TanirAb! zQ)4Cay%KkuJywyijH z;y=9Lu@Qmf?R!OWkxZ;p;*#1TOk^@FN5QuE;_%{Sk*oLMg+VO+&DNyjT>e#M9LT+n{9MQUvyH$ z+Zl`E@;_Wn04pN}Rh~xO32(#$9;IJ*Oj=!6xiGNv0%)_n%XusB@TZ12AQXNIQUpjC zp{Ln1`!?2ZN?vAxj3h6q-_w_APt!*TfN1b11VNlJ((mATfj;iVU&nJ1Imbr;Yje=^=Z7i2!MM&_>MpIp`hVb z$hI-hfRduGItj{bbuck!@4un$xpuGY#LMGSX=L3NB~WnQ`0TFXpl|RvTn@a*dkm(6 zZfAFWbiS|@GuJCnhB#EY$C6cwUdA|V50Dh9MQ5=!CZ1qcL|kqXbjIZfGECUf|GV= z6Y4B-!|Fj1TId!umrxbVkC4S-bK5IXPSI<7fSka5Z6f3j&IB?Zs(`6dEr-O117 zh?jB;(t#-CSv=4Dxr$X+oCSxC!)`Un#162zkHRwCBgT8Z5BO7Pr3{k0h-a6gVT92I)?S16|P^n`r|(>5L7OJoY+R7B&wa zhGn8r$!j8Ml9mMo7<={NtEg3LGdEo0@%JU592uC>u5<5f+Cw!jJ&3=4i8!+Apln~iO=>=djS2J3J{;>q}1XgQ?PN+)9U4| zetc+GT#+jTMM~7T#FSP_%#41}t6N4;lu{&DCNLJt(5zFz2z|uv}(hCa-ybora5%e?1a2HB_sC z&3YCB*C5G)1zt@_2#MzujH6&jHAF?yzE9O9Q_k4$?ALnc+w)_yA;^-TkvJ@krP!Pj zQ?Hz>6qOLEAI(#|D>R0KmQND+34)&o^B1fr7c*lTVcv0y%c+&%{UJdKikKF|W@m$Xl=&QIp;hH4{FYQqz zZBP=uDjE4Zhs7)Im&#ruvj1t7nwt(cy?=L8?RIR#Z*O)L$P^`haG2xYhl~`4xlH{nk2Ai3N~X;9R}HX_T;*g}n>vtbg8}s)N-8l)gh7)7v z9bP|2hgo^dW?$n|IK-31cvdv&LHp2rWC}aAn5w0x4|cv3)&8pV79VMyvbF4Y)Bu_# zVHpuVG*_-CO3l8|ZD+sxU*=;63T14%VyQVC5lyGdZ%*gF@<3>cFY-3S)2Gw}p<@i7 z2W-73XK?E2zXFiloxOG@|K7F$;)(C$Q0g7qcY>2h^+)keanfS(QX44}=#E(O5iB?2 z*rMP(X_HqaCgN&E?-Gjg{zc&yj z&)>+GYN}depC9l;qsIF~Fb!hz3)kR-4@zoO;IzLIDmVSRlQQ`&AB2w&m5v4DDymzb zstGc;4q{s`dEUs?$1lEN@87KZ$C29~W}Ct1JfH^;A`iJkMPW^sCCqc~JRP6* z!Q}R(ZTOCheTcK~LUBW5g5M2?@jR2G{Z!n`3-`?XldCS;2X*2gC@r%qg35q!7MMh} zB#;U;^3WCF9z2OdG(aP`vRX3fb%qr_1f}`d|dbaDt?0hUIuclw?KKbi=f4$MyUmjN&BC@}jKjrtSJ+ zoaSZS_TzlH-tLd*>-~Wd6vGLUq8UCiI9?DXSy46JFfH40JwFJeI7zd-D66_@yM8bn zjVIIDe6d`uH{0F*pwqvb5z4rbmhHHnAB0hys5HxqvZ^&SZPyRuWaeev`fq~cyzb}y z{@cd$e!oXfRij1tznMu^R82Qb%XVDP2M}RG85dG%W1Z&*VH786mKSAJH*MDs<1{bp zwjbwpKko;IKw)qM5{1TK!;dErNn{F@MrSZtYz~*l7YIdSiBu+6C{=2WR;M=@O=gSL zW_LKdxVpJ}czSvJzzB-r1WC~h%khFJ$%?A!hH2T3>-j+##YvjwMOoEN+x3ItXgrzD z=8NTOz1i;ehvP{kmdMJzuzk z;Az`|qY9IY60gm1KJN1&_cR^)7LjlkdAOJCtN4ML_$Ko0n2!lvfOLN@A3ho$3_!aU z&EL1&`RQ*{nlFdFzlYnXOyNw#%;W2NLGhq?rOa*Gd-?Y_TK3PcxKnq1_%UPiAzr6N zGEujbQ|c_QyKhL3*q^9Nk&mHdE-b`O>7f^BJfM6&(gQur+UKITRT9j>N1WxuI$$vs z%54=Nubz`;TNiBob5{FbUb7VdV*g<`C zADnCPwq}c0M$TA~`?40wxnMguV+rA|q*&z~9C8^(n-bCkH8%XP+axDskNH{n^7;#S z?~8bJVwr8ZKlYGgYA#C+U{{4wzk&{wg5J>;HyPY)HwAOl1ezz0&SVKq;K?1Z<7>cy z;r1-#@&> zT_tcm=5ThGc3wS5-H7L-JSNv(%gLuk#e4sp;00{Lsf%g-32=j2yDdmU9F&=k{dy0Q zeI^DMz4hrt@Gz}m`#zBqs9(c>#Y~Rbtb|^%r1@S1Jus?8D#!dzis1A_NHFO57x^8Q ztXD8U%8;LA@IU>=@+e@&^q}uuTpn3Rp+^%k6Q@IiA)f=p6C4XD1qziNI|giT`$UCr zGC9C_DZ;B3QPeC70$W3S~ z_T)@h2^)2OU86MuOL);PYt2_n$w%^-4)$L4LR@q3OKHx+uXmt}_%>~&h_vsb6qv^| zXIzOHwL5bW-7SRiB!yNwW$czMqJ%BTD7SHv&K~XqYTCf>n**b4V*cjj@^KEC{>DyG zY9700)b<+8hZ(pdS;2|2g7RI(Awv~Q#`aaBaF2-?NwU!%_S#PtTov{n!TEqR9@l3R zww+DB^W1g9W6`sBmXg4H@~Ws+K2WXfL*?|`l;}r&4>eqb;%{&zG^4p-%t^TSvV)IB zfc8W+D0lc-s1P`&!|0%|LaG67kNs{iRy~pOOasgs-9_=XHDVTPJ?&9PSm(Z@D?K`> z99_R1dYB5I44bj`e4W8CA~?yR0kf@L-Pkj)zKuFj(+aQ5{Dj zJ8F_V{8n9#YzfMj?Bv@OX_X$!8E67y=>^!b|E0x8D))j5+1Bv^oFfmydlgyMj%kmo za$~LJP-0IA+%YMlap2nPP{Y7Z+c7^c@IbwB!s7q%pMK+19NN4NfnO-HjsaTEnKWAn zS%BA3OzXGotc*y%; zv}twTv58|>$PZ#`i&yk7Weo+)FKBpprp(i$^e_i?)Z4xipRNM!FQlnrZ0fssr&y6) zI%S4ht*5<8)D~ye6~_-Flf^HpS5SQ(OhL`4(lu0b)UG*WEOu#gzqIwgzpY%!Ntj-( zVa0#_Fq8#zXK+Q~!Kh?ODoz$KD~*@ijT>sw-d zFvp^X^vPAxOv7L;XQtMhlqc~z4k}$v8+f-H)7^-EZG~Qw6EtneEAiE-PfDo9)ORj( zrPrvqEF&hct@DZSfI9kyQ>{x%3dXt5QV2$+SH-hi=L zCu+O&AfMJC#WlPYo!uG^wdQ^;JD6b$8<2_HEx(8>?7Qsod=r#O+2w!}d$M;Gi$z|0 z7HmFFd4&tk`1*duM=pelQG&v5u)2Qjm9FTx$d}m9ra9xKFKP!N`4!5gDlYUwZ5(Fp zF8pd83|qlZGQgL>r49Ft`VEuRV}Vtiv~|=rSqcT;3Qt&lK2_{zM{nm_<)44}AdCZ4 zYUa3ZOCR=zipL%v>+`@Nblj0$^sYK{IZ->rPIVSg?ZR2@Vo`@zz5JvSR1AZVcWert zASFJ|1pb|Ra3c}V!w1yTk2fB}@%rdW4SbyZ_<$_`^mrl^2l?#`-05{=4!=CS;PzUG z*FQZGKYbwZk^Fh=A0B%CM3p9-aCQ&R84P=cxnv@A9;WgYlV5uXtLj&99428Wo5nZZ zjv4DMuaflGzY!>qoKhTEkGW8KJ80#|;5Zg$y69#n1!pLt1bpp1`%k}93|RirvI;jY z-`=M}#uzc9BD?Y3k+Qrv(<36dLkV8`K3RFDQU(Q;w9#IBFn=Y%y~Zt)k$VZs zPz%P2ummEz*huE39LNbT9HnQ0#hbQyFTR3_993F(=(CDJb{zdlM#4>zLa*eE1<&h% zRfWYj8im2Ufd^;cW22k!30)BzFT=3TgZ;RyY0X-O=Y?_r>CE$3y~{2b8~T72H&>_u zYgtf71-(9jc^|&0!gP_m(-yOgj)JzJCA^|-88tGBgh=nc2%pWtCx(lCN9{xr7kzkr qi={^e-)>}g;fRMK923?VTdbffUbM|^&qTTPhZgVFJu4&u0002cz(kM$ literal 0 HcmV?d00001 diff --git a/skins/webfonts/fa-solid-900.eot b/skins/webfonts/fa-solid-900.eot new file mode 100644 index 0000000000000000000000000000000000000000..afe315244f6dae3beda0159693d25a6e0466dd90 GIT binary patch literal 203030 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

Icgd~U|XBin{ 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 literal 0 HcmV?d00001 diff --git a/skins/webfonts/fa-solid-900.woff2 b/skins/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dc52d954d8d7f62c82cf63236d27093764a3d046 GIT binary patch literal 78196 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 +[% IF Param('oauth2_client_enabled') %] + [% INCLUDE account/auth/oauth2_login_button.html.tmpl + target => target + %] +[% END %] + [% Hook.process('additional_methods') %] [%# Allow the user to create a new account, or request a token to change diff --git a/template/en/default/account/auth/oauth2_login_button.html.tmpl b/template/en/default/account/auth/oauth2_login_button.html.tmpl new file mode 100644 index 0000000000..c33f571a08 --- /dev/null +++ b/template/en/default/account/auth/oauth2_login_button.html.tmpl @@ -0,0 +1,19 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] +[% + redirect_uri = c.oauth2.redirect_uri(target); + authorize_url = c.oauth2.auth_url('oauth2', + {state => issue_hash_token(['oauth2']), redirect_uri => redirect_uri }); +%] + diff --git a/template/en/default/account/email/confirm.html.tmpl b/template/en/default/account/email/confirm.html.tmpl index 4c119d3b0c..c9a8571e37 100644 --- a/template/en/default/account/email/confirm.html.tmpl +++ b/template/en/default/account/email/confirm.html.tmpl @@ -44,4 +44,6 @@ +[% Hook.process('end') %] + [% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/admin.html.tmpl b/template/en/default/admin/admin.html.tmpl index 57eab09b87..aa2f2d0f92 100644 --- a/template/en/default/admin/admin.html.tmpl +++ b/template/en/default/admin/admin.html.tmpl @@ -145,8 +145,8 @@ [% END %] [% class = user.in_group('admin') ? "" : "forbidden" %] -
OAuth2 Clients
-
Add, modify or remove OAuth2 clients.
+
OAuth2 Provider Clients
+
Add, modify or remove OAuth2 provider clients.
[% Hook.process('end_links_right') %]

OiloMWz?aq4~2FE3NernUi2J)Ra_J3#Srhj>O#WTc8VEZk`&jv^aTsTvRum# zQf=*LTCcHCgI4g;!4GWi=sc2hT&J?5W{c#4lz>W}8)F6%t7)1pXo;O8QhiePPLUZ0 z4$KfK{K@kItnIm+1MY7T{_o5M7Y=hbF6OWF*;Wr4 z9yRN)%Tm9~TcB%u@yeBbQ*b5Fwr!k_(Xow=ZQFLTW81cEvy&aGW83Q3wr$_8TlHSm z`8oC8@A_F)W6t@p)*Pri)l#A%$g_v{Zw=zH&ziZB*a~dcz0!Oh6M45Ne&qlNTyxxy zORV+ABWb9ms#bgbSjx+CMur%bU03K^&tl5PRZ+0nX%%>skOZv=q3x{>+Tg;K2XY^< zX=Cz+;j#~Sf)SbLCvi=QH>kK-b#ap`;?{#p_<}L~n&|3_@_ha2f=kKG$fAfVQ{!bC zg^4JW|5?912s2@bdHpSBMB%Z;QXLrwF!m}W<-DwYZipUmlFj+7wU-J%wJZs(ZFVq4 zJarVO7Au@farA*HPI1&-19fcaY;P*j;#j<0lZ%>zIWAL))ZZxh2qJ3v@Z6%L5D1*# z<#b%TZ~I4D3#=u1d#V$N^L$g!*v$EujqBTNx=E$kZCX<564k2qqb{^>-RwQKB5|MO zKw#N^KC5h07)e2<#YQo&6hxm&_75*$t#Yb})aRAruhN?5U z&0}&^lnnEbS-9y?`WHowR0h!Xt4n`0dKm(dnD{EPTMu63XwG@K%Eb2qjkIA!K^l-WhRZI<5A37WC-uk`}}mFzIVxshe^HGRINu$@#R4@TbyoEj#VhuZ>%uyND?-CJ{>?_Cc~QMs?B`A?wq0{^pRr7~3E zb~mun+Kh8NP23rx`)DCk*#~VN;@$t+pUPA6Rd7*c+G6`Go!3%Y74>5vLKS&7VelYR zlhc_RGySBpOy0tSF2r}i>#45ROJ2C7ULgEzQtFGo> z8f7JKzlS`aL15h`zRle=HQn=NS<9>9EBOnHk0i)Xwt_y@@2R%c8Kn|nT|Z?%{`_P6-%x-~kL9 zg*iS#+y@d!E!J?Zz{Q}E2VvsQ(GY|t&3G>YAJ}Ab5d9BK-QD%ASCUj{bC)bJ-*^rr zu#b|31|oI480}EXOBWtMops3M2tGe|@_>=Y$=C1M1YgdX+flaSY&Q}5027s=Ub*AL ztCfGOpwjyDePxyFU-aIe$d1IY`HOpMq2<*>w6p8=c8k-aULxgbC8Z?<_iA!&XdAKa zhN;%I<4BgZ=ldh8q8$cQ-e+LaOod!)7D=uyA#3Y8N2XI8qz489U5pT2`Ic>_-VQV| zaFavB_!8iYGNFq{%+JN38J$MkuV!7Q$Fm?)sM}Tt!>b7Te!7u9+&arVTir1_W?M~Z z6=3mK|5~PrQ#}dy6T;t>f|gC=o#F%K>Q6vVTd@GI!yb#2PTrJ>XD8ojySl)y$Je49 zc$U-4z7&BQFQ3@dRw8~Lrl)CZYP}2ZZ$Bf#9NeL)#kZCz4`}*6*mNkQJf*g-G$?&E zdB2^qXD}RjOESur!ci*iFsG=$Z6yt~pUer#f2jl?`l z#S!O_eYdo#0aMP4`Ee0L2nFQYZ<|C|oEB`CqcG?1{E9UD^OTxm1eD(#gk$44oTl~G z1W#ldjMFq(Bs0WNFxbQteT-_1tD7o&n4>b>cW}uIy@pMf7KB#d6G@XqNf3u87yav6 z#waCapx+g8$8h60T?S7>dZm8}FfRb1=F0dcTqq@VRqN`DM-YL6d%o-X^gfB`!Bm6L z5wlf2zF$lE0zvg2Qk_*qzdIqh0`^1Ov=~CZ?$)=w`NJ_8;3v;$6Krp2{ymtUqy$Sk zdkZtZ{h}@TXJLoi>7qbP%ZL1dt z+)eEOkEB-R7hx^7X!!6Ur<#EC(D2-PEj8)sNxQn98i~?-Fx@B*N!~j-d*|!iAgB2# zE6U~dtQ4Rs1$nsb{`MhRDC&!5n@cgiZOWdJ(>g<6OlnBL^ z!eC0GnZuidDaeawCr zS(K>6z+3)fdL|LFC^0xWtU)szW4Z;U(0$R^1u+uk1;h)*Ck1-c`bY{Z+Dp*SwxzKk zu;Z=PHIW`dAleruH0lY9VL)bC(IFprt;=&F<4cl|y(a2ClKEkdowsDfh3BtHZPYoxbY6F_nBLzed!l`aOXIzIiLjZU$Olc)dA z$!s*Tq~V!O!;kii;oKEgu>)R;u~^W7zZm8>!}&J3VI+t}lQosDw^Vf4?YYp`s}4{L zU?-9wj(~hIejrt5?@oo1@UC-q=wzE{zZ=clbl#z^mfj9V;+_+1&WU3FX`_c}H+KwJ zR<>k@sMb;xmSd;*EuuAqxbjjHPEguB*sFPW0eQppAj;2U+e%-m(Xf?2RX z{lmiKVIm`1=#cu#{4|V<)c2eWwZ;bO0m*6^JklhGsd>p9oWECijF-(&;J->-uDS7T z({H=v-tucbc&d%n8TUByfUYwVEBa>g$ zN0>LjG_g@an+%GtOAE$8fw3#|nZB4|+18cupCvT=e!vU@65Lw-luD=6*hEK)mb;Y3a3d1!uRD&7b;DwU#Jcq%18d6NR}1bX3;vW z>1SEY2`M4>$#U56?^e+UX<(^ISEyeyAk~5bF{yzx7W@ek#^BOz6_kfB7WXGM@|Zw4 z0TqbNfdmSdArU|6W?nb9KB9htrq?vP?W!rFsmiAg6iP~R4{_wYNqwj^4`$$$iPe*J z+TQ!%6HReGZHeUiC*puUXEZq_6a-qqV$hcSzl0UOCQx(`T5uPl7~}(U)0Ug#!QYYl z3Mm^PErn_jIHAJg0#r9)lX{k2(J5JVP#jAGppkQCu;}xkm&=jQRV;bN7F-Z}>R6)s zS;bG%N*d!!5p#{0$ER;rk1XAHp=Nb6B2w%JN2Wjzu_#^%mA$c=h^@l;n6nnVScncO z+^aP)quP@xQv4e_N~9{6E<#39pc~A^&Y$!4MRXrbACU0hhv?+#qv`x-$5Rs!#D1vu zCA{{wgGb|{qfT|Xww|GnR{8|j!ch6Fqshg5Sps=<9#~7IK#6)`q2F_OT)p-hYsJnl zE-21eSvCO7N*ODh;hcyr9Z3h-snHaqn!!x6uxt#Ng#dy=J?`m-&=xyAa89<6bcjFs zf+uuZ*DKwpD4BmOZEGX3LL*2oOW1QPRHR%6)4Lo=p0WKeYU-Xtg*1JJzjZd%!|#pV zXjeukg8vRr`aJnF^u5GG5&Z34sf0e0)lbnUn44Ld%%2*cr*AUUS}Ndh|B}&_c$9s# zgI$arXmwOj;i(_ODf>Q)axdl*8umi@egh}ZNi5Bd=e^1g_vJGPqrVot{Gr_FB`z3L z>;RTN{%+t0ybnN#l}X^CgtO(7+G{Mk%+I9oitYd7XKt?R9S=W}yNS zb%|ryKK6*dU2mJ2rD|N1ED+G?&+ucdEF=4$BK|xe+3VmU28W(U^S#uBe9A`&CMW|% zNgQH+;edIcD3&6 zng3}_k-W(-S1gD)J{arN=rkr>{;gGRcJ3TpK|Y^+7rjb*l_cX)ViqrR{}TGR>M!+= zuTLhBOy@Bp!V232Knqvj7!dsB%v+wT=G}YW1^g#FerkT^7Nt@4%Vdn;GoN=n)q?xm zwXXuI(vq(;LOE|Ty?6jNSiqSL8-~9Z^-Cw+yMu^3PU8i=&cfhIiZ!x`P=w!7Z6ml3 z`jQfeH^qk&(a<-8UhPB?j=hf3ujuFfn1bGZk37Z3#@u-C=(#=|i^>THP9=Vn?TMjt zTx_o>Vk@G^J1t{ubmk2YlFw0zoz8`{t-nXr*AwlBR5FO)qZlP_un!bXq_X|tfTOnH zAo~`^@8Wd3^}Vxfni4UpJbupADhmk)4#hw_Dj!1+D}~B5E zBW)rM74w$r`DH$`Wl|aUgMx$3dvI?s-}uL`rJVek?L+i1<*8g})3o8UkaOI$D6tAa@;ew1_W#qzZI{2&i;=aEAP;coVHs(rqo2 zW|4=Kx8_W;)C|{o!ZVPjT#?8?zaC8QWmOW<&~^C5q6g|Ty8QY$>vEthAO6$yfO8}Q zr(acvZ)b&6WOt1u{yejCqj8ye^|o zJ&w@o+jTm|j71Kf6YWT6dB7iLfj+^|)rxen#kj{PG(s@*_bm zF%!{WmX71N+RKGk^~N=V?O832n}TbzCUY|(N;8{iksv0Z1*EhXv;WLhjf^My)1pIH zoTWt43&f)OjB^aFTh;qaTF*10HH3%BsJHv$wSKZOa0d3HsgW6Yl%+QJ8x+rqppKJ5 z<>OK4H0Yo${5i5kbETFTK`Fv5T#p%g3z1HZPhXuV{xkRD1yaC6xfi__HnA(T;uK(- zE8h&Cg~vd)=AcR>3XUpI#+_vmeMUA_fe1vpt>VfC#eNG>h06;pj(TSyx5g~$8f?%i zv)_eBM#pB989uWXnoJOj=c(Eho0LeU5MvF#V|uSj8vQvN;nd{+3nQF}gM zWkFtWdSm3VY|}E!f^)@50xcZ(p>!mQL%9OT=BVHRKh_Et$8&d}bSLkLqJ)A(&FGAe z4G-vvz-$~Hu(h_IgIv54{VInm;)K^`W7_J@JlBFI=P`m!SlU@m?esb;FMH!?0L=MC z)(!>IS;&b^UhNjEqnt5zR22Ab9x$!~XS}5$E|*Y_@i!I`jCf|^RJY8Uxny#}*b5pd zU-QBs=vstGfKituoWVFa;HW+|IGq(UZK;@%nIuA>5P zIVf5pQ2(a;8f(os@7YXc<|m;QY8&b(5lH}F;=-^zspDqqqu{r(MJ!rSoTz0nmuxM} z1gst{*kV#9Y7u^yRVx`2r;Vlkey)_;%QFtU?m;4yRqiO!?B&X}aAv9!!&`@kHdG-` z?V#t0tCdM=z*&&oFZncXrO{kTc&yo)-wBLESc{n?4&F{+`_#Braux@;8JFvUt#jyk z|0oteC4O}HMO>ynKzMXuojUe^mZJ zUh#n*^9!!>1xom(zkUvl1b~oDpfF$Y4tnU!d}Xdd-sz7q(6i!)RGX7OQ?MqweHpLVbw_Bb1Lxq>Td3ueIOU1;@Jx>m^AM7=K zqx=D3N4V2zv1d~HZY?niWBSlE+`;l=1XayjDik0@IJ>VBYyNrV`Sh}7T|OM%-;>Am zki{AwDvI{rwVx?QM|0|*VN#FtG;j4p>wolz`py@nQy62s(i|gs9f|@D18Of$9R}Z+ z11*=RT>m_SSZSs&5iSA@bpJEgH)*T^&4`X{_OW5)6Ev5;mCYDGu9SPuv3?rrZcTi)OFhUb1TZu&3v zPX6Jt>@7LPTjzNvfBdRzn6p^fmyJicGE}x@Hz^HCrRCqjH{yoTr=4lh|TLPLkb;rpWJ^LGsU%%!W_8 zm(XlOgJY8~BopWGU&PGwT07=hBnl~Ufc8LCn1 z3dhN)oh$LnKV6QYt{)$-Q;hyoeWKRo@AAbr^E7t84bElJ&H5L(PL#2ooq-=fEQ=3n z?5kF7+BwLefl(ebt^>8p9ccIr8s{YC;Og=t4~&z9n~k*M1W~z&0R6PjoNqM7x50CZ zizS6h*UH2p7&AbK1PyjUfKPOgAm%o=f0huT=1_X)^a7MbdjnlB zWr#>%+j<}Ji~!p)OSrI>)}a%&BnA6LLR{qIXo_keo`Z2^Hu*L?_#Rz_Z9pIvy`_bk z73-+zNBB-u=4{uUpjY6qPfsBDR|AuWA|dO20WJle+x<9b%WnFnn5qu`OPD}Yw7~Yr z5Jzipb(P6Q1grmVadij@$Ji>$Er#hozVGZGe>M%dZGAI!!D2O#1z3!s;Xg$tGih?` zkOn3zTKj(jU#4Y}#R$R@sZ63ZE%y}oh>MI0+%m$MRq+^LND+Rmp;I}5!W7aeNk(o}zRpC^Mib7~m3vB%0OYD4H+ zl6Z2n6803p#_0-oM^tTCq*nWlfBn7SP>e+kF@OjiHrVfv4TdK4*@Z+l6voCBl~Pxg zgN1n@9gMm*R$g+Q|O1dB0QyJl$mDSf4@lJ z@3|kZy}&QWlVMu~6R=$!%V$H~k8c=Lu|=1GMw^kx52BbovZ;T6VrM0nZ-zNXrkid9 zjTcL%8$Xp3!@w0WTk{A*lyZPtfE2aO zMm>R;`Od0!L@<#8MozFuVdJp(-dz|`)J);xS?o!r`!6%+R^DzwDpVODbDMCvvUMYO zSDyv5P8EB{z}V{0;?(BAJRAtbKVY!%0!4o_Y2xJxk|k2>G@+~Fyr>_spPrQQ)hQOHWO4b)zwHsTSy(1vJ~mT8!#Y8wuAV)6fGVPn z*v6=wx^i%Gb98lnzIgx>{Qs(z{xviR3Pp+|@mN&FX_)0|-1(~z){s=zp_ta9-1_4H z=hQ^|rE!gK&1*C*TZL4T(*J2P=>NB_`wwvc16lI91iT6K-4li4B@0)t;8~MqOZ*0OWsh{f{Yd(^m>(Npe@y%xE+h zrKICzER^wQ`s-`*Ej)Gs?BOB{%vMQ+?^7kYGh!zE>1tfBq+#!1aQ^JkfX)FX4Gp~Y zL#l{J^(9d0&rf)nJl~ECf8XSQvbj%OpJQpSS0D`taj$I3%%``nR{9>Nyl692=w>{+VquUz4D8)F zF~4QYb#Od0jQ$Rgw(Y>DD#yGIPg>RJ5F5sKcP%J6Kb#`!#z~&5-n0anL*xEBay3*F z8k7CKL|}u#C?yOjZBI$I*cBag&E;xE1oxUjKgKo>m;8v>A?5$`HK=Svi7Z&Ki_MuN zH-zg(Hc6=81s01ty%94+YT3*C-fD35tqf3upjo!Fv#jWNr7+UkWa>KN)nvVt)ZW)6 zZ2@L>q@DrZ^>;4SSzX27RuK5UTh+ZYa3F ziL9S&KaiJ$v)Ggo@Y`Ef{;cwhT8e`ck~rt#4Iaa1LO#CY z0rX>-w-H&kY0QRSgekZoQu+{Cvb?d(-KEz%394t&FBvbcY+tl8h7~kwgCTnVUNJ`h zu&h*U3n;o#sw|N2hFq=zcXu#2+wROmXWOJ>3SROW0j9haUWp~(Iu;t{i6qDR*vm?Of;<&XCt z@7Q{-3Jl*7tDC@5Ol9+vf`+B0VzM4S8;}ZbzhpdLN+|vJnM%0W9|4e5pG-nDDI-ys zD7r6`S%mJZMR|-Xj{eTeADz~n-jsB8=wB^{$Wt}hJ|;n5wQN_T3m)HA8#8kul`g7| zbOJ8>e>a0AynR&P@3ftRBKB=fv6OA*qUkcQV313B=E3b&99pf>MlMNuuDTd=OCIDM z9>9|nCS6!Qo;E@YN`pcghv;tYfca>h>HlI$I!Wf`3gmWMR_w$UXz=naKD9u(7 z*kW4{E-@krgMzk!6R@6;!enORI`V+hGL>>r14?E5$yL2D0E9}Cd8A$IrDN_4bH)oD zPrBz~rL&QU8%_dwBF>A1R!+eK(l$iVE#|;`L(`M_p-#26iBv3Qk#@4@(eBZD9Agic zSE^DkSYr-B=Hv>m_E67a`6f)`nPY-{BnhH!X*HaTuUtcEM67rcqnH>cM5Jo}EwNB> z4ofn?*fquUD+6 z3fDX)L+V6uT`we>kZ?odp4_LJ_sz0qbY%j-fz|!y$XRG$Ru7ZPch3?D-P`N1wOMO2 zz+mblUQsR-wJ)J4)O3%~>E>Jr^2kYLJ8qzsd?}i!%RAv|8Pl?<;{G1VkVB-_i{Lq- zVffSSr+VZ%WQ#8y8agau%sqAhLM8#CNOdC>25#&9i!#{6yeO_^D+;)9rR<39!$0O8 zUzY)mnVRh$PS{sL3A~bQZ6NmgkQ7{=M9hPR9)?TI`$D@j$Xy=3OG9|zR!{5~&ME71 zB^+KtlA%7NX5NGhB|? z9Hpj-pk+WqF)V zXIV73OwxYH`4L7(qXvZ;+9b#jl%A0J1T=xVXb+77lT%4x^-ca-3ru8oMg7{%i;sHi zx;g;Pt>5NH2nT(>{#kJGVaY1mzlQ?8)=Ed0+0TXTTBpmSOc6>Xo#BG@m@@cBd_#>T zz6VL&SFk2zR_|%YffjY^Z#-aXMi0V*n^n&_uWR*)R|uYhiyHOJ?b9<=*v3V)Sn@@z`-ksQyhR32$NwUw4Lj%q3bV1|Za&hEhkomldc{Y_m|ax30>3hjwHU@Hocj%+dc>{IwT zCXrpEQ`;qwKiHXZo=79Y(L(@OI*7y7OTcg0ohL8eqbQxN(qx(LxM|gujeYhOIsu5#H*^ z`jsD!b~ZnS3a`3lpA^E0#ZvkHp2=JWol+}ak>%>W;STs}&}wGKqXkJ=F2|T0j@IC7 ze)`JrW93TrJ0=){S3x~CMV?#-d8k0tW{wBX6~Y<+N_wPBrPVK+sJ>)X7!i<*04;rG zSjx8^vbg)59$7i9S-8In#!=*^BMgE5C4-#rXuB9BANv+=7Va^!oC-3&_==)uo-6eM z11*n(r_+7Eb0BWpOoq1a#SJRuwAH>8>RY*-G5!h`W^=i4uSG7KFV80#iGaHz^QWYF zx5}L+G&oHzkr#enDK=9k)E|p!)@hF0*X0s<2KAnwQtB7N_iU*(I|p zMZx1nq-xuJ@1mBfiD8b6pD){2D({mlCr9hQw^2qxBA1t&aXAd6V>ZbG}Kn)&ia zm#}9w=7uYdx(A571=@dGlVy9O%tcQqb_;_=b;r(*kuMEMg|}=$YG#EAHNYSP!tf(c%OucB zjU$u{)pES1AWa<@cxbrW-j?;+1|58F_)#2xLvKgtU%^>l_NTliG7oNDn?_+JWlJhr zZ8M|{qK8>kt9O135kk8pfEbk8vgcj3MN_)9fn!!Xo})X0XT9OB;j7uTMy!ixC&`P3 z-sDb@^!$*hwTJ@{h*1RDURV-{($e%jWpU7dHS;O+kSZKgk+Bg5`t zfmQps+oJ;n1BH+(c@MNxrP5DZm&pk}KO&N?ab0Qgy8Da!Dl6aSV*&N_eF?-o;U(rh z4b0I$Y`Y}N@7JOzRs0rFHgqk#_8}vKBn7@mNOMC|1Fvl{s~vMc{MpBc9>NW@jST~s z*9__{0ZFsy#&EjabdX+cy)jU{vG`dqXm^|T=ktgy-;VUjPo(HT!|;6%{@LsNDtNI4 ze8EX=P+-ExGJ_2N>A7IEtB)wtN^*2BzgeHi<4}J?Y47KBn^eIAy-#zZLQUtL+5N`f zOT|z4Ju*j+HU?7rb*T78G#?+5xz0C6ha=aIFv3_aB6I0^hb2Q*Zu3bBx}7vsE8kQ8 zz%$6M^%-Q@Q4t47`IO83zFae%Yy2i2Ey6Ts%3JcPI9Ms?66}_~NW0`lg$#T(UrAUj zGQj3{vCj1BcfeYoX8(Y>lI5$A-{h1ML7AVG!`2>W4>+o%o^J}h(Ix2UCauk=qHH<) za5{-VpO3|JAoBJf+wif)eQtwaK$koS+Ku>7O%hJbVz?C)`{km?86(#I_5P`qe#GVa zYoLrvB?PXV-T@`sT+W6wK_aCrh3rF4bsS~wa#CYR$xI zG9dWWfMB+b#iE`b7whR_KN*D_cc>UQ%*GqBXMAsz!M1VgR-eA z_0TQcYE`JcSIIPS6Z(FZ7k@^E0U~1!nhxYum?MJ*l>iGmaGu8PJ?f_Y7Km z_xLwDSBAEY>z!|aidy(gpEZ)JpaVYvT>d3JoJWjGG0G=OQ#vEv$xnz}EkWle4xCs! zG*)^#iFmprO2Im@W{8u3D0~)Iz;ZmA&6VD)3f{VL;$cZorJcjL|AW>-_ohuEN!w6K z>g&J?iUU%2i#d8dMg!TL);LM~5uf^E#r6@-H&5zZ=fo=berp9+604z9cXnq!P5KFa z$8o>hfM_CIB;{QPw1Ij<;7|XW6egE`TdzYvQQ@;t-{(@K?M(Suj_N(;b6GdyDXga2 zvt4v`-Xotp!Ev$-9V4{F6yeY(xYZFQs0M)W+eYByswHC}0P!gl=?xoS(Z$f_r+|~>ad#~%)6|aSt zmG;%4DNhKmNnfu@Fei&prCRVQToF&FR@v4*7b@E7`J0g7tH5jK;CsDS*6_s--g+j^ zOg!W>^=AU+c}1Vr!RV}}T9g8AnRIzAY(uL31m2F2Lb<$kiMb?!5Not$1G+b|jdSxo zwxGTV9H4me+gJ7UCdAKNJU_}|*{Re)MN|D3 zR28>yv5xn2xR_R9DIeIzl8%IlnM))nwFV1kC>yKPrL;VMQoVPug-{N8*Bh99UZE#r zKF#1o%%?b1$*aK4kTLEvqRv`>kRx<)|frJty(!!xITmjR3uqR*e5)20N EKZs0^EC2ui literal 0 HcmV?d00001 diff --git a/t/bmo/bounced-emails.t b/t/bmo/bounced-emails.t index b61e066a49..39420a8ced 100644 --- a/t/bmo/bounced-emails.t +++ b/t/bmo/bounced-emails.t @@ -8,7 +8,7 @@ use strict; use warnings; use 5.10.1; -use lib qw( . lib local/lib/perl5 ); +use lib qw( . lib qa/t/lib local/lib/perl5 ); BEGIN { $ENV{LOG4PERL_CONFIG_FILE} = 'log4perl-t.conf'; @@ -17,8 +17,8 @@ BEGIN { use Mojo::URL; use Mojo::UserAgent; -use Test2::V0; -use Test::Selenium::Remote::Driver; +use QA::Util; +use Test::More; my $ADMIN_LOGIN = $ENV{BZ_TEST_ADMIN} // 'admin@mozilla.bugs'; my $ADMIN_PW_OLD = $ENV{BZ_TEST_ADMIN_PASS} // 'Te6Oovohch'; @@ -27,8 +27,8 @@ my $SES_PASSWORD = $ENV{BMO_ses_password} // 'password123456789!'; my @require_env = qw( BZ_BASE_URL - BZ_TEST_NEWBIE - BZ_TEST_NEWBIE_PASS + BZ_TEST_BOUNCE_USER + BZ_TEST_BOUNCE_PASS TWD_HOST TWD_PORT ); @@ -36,12 +36,7 @@ my @require_env = qw( my @missing_env = grep { !exists $ENV{$_} } @require_env; BAIL_OUT("Missing env: @missing_env") if @missing_env; -my $sel = Test::Selenium::Remote::Driver->new( - base_url => $ENV{BZ_BASE_URL}, - browser => 'firefox', - version => '', - javascript => 1 -); +my ($sel, $config) = get_selenium(); my $ua = Mojo::UserAgent->new; $ua->on( @@ -61,21 +56,21 @@ ok($result->is_success, 'Posting first bounce was successful'); # Allow user to reset their email $sel->set_implicit_wait_timeout(600); -login_ok($sel, $ENV{BZ_TEST_NEWBIE}, $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->login_ok($ENV{BZ_TEST_BOUNCE_USER}, $ENV{BZ_TEST_BOUNCE_PASS}); $sel->body_text_contains('Change notification emails have been disabled', 'Email disabled warning is displayed'); $sel->click_element_ok('//a[@id="bounced_emails_link"]'); sleep(2); $sel->title_is('Bounced Emails'); $sel->click_element_ok('//input[@id="enable_email"]'); -submit($sel, '//input[@value="Submit"]'); +$sel->submit('//input[@value="Submit"]'); sleep(2); $sel->title_is('Bugzilla Main Page'); $sel->body_text_lacks( 'Change notification emails have been disabled', 'Email disabled warning is no longer displayed' ); -logout_ok($sel); +$sel->logout_ok(); # Bounce 4 more times causing account to be locked $result = $ua->post($ses_url => $ses_data)->result; @@ -88,7 +83,7 @@ $result = $ua->post($ses_url => $ses_data)->result; ok($result->is_success, 'Posting fifth bounce was successful'); # User should not be able to login again -login($sel, $ENV{BZ_TEST_NEWBIE}, $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->login($ENV{BZ_TEST_BOUNCE_USER}, $ENV{BZ_TEST_BOUNCE_PASS}); $sel->title_is('Account Disabled'); $sel->body_text_contains( 'Your Bugzilla account has been disabled due to issues delivering emails to your address.', @@ -97,47 +92,5 @@ $sel->body_text_contains( done_testing; -sub submit { - my ($sel, $xpath) = @_; - $sel->find_element($xpath, 'xpath')->click_ok('Submit OK'); -} - -sub click_and_type { - my ($sel, $name, $text) = @_; - - eval { - my $el - = $sel->find_element(qq{//*[\@id="bugzilla-body"]//input[\@name="$name"]}, - 'xpath'); - $el->click(); - $sel->send_keys_to_active_element($text); - pass("found $name and typed $text"); - }; - if ($@) { - fail("failed to find $name"); - } -} - -sub login { - my ($sel, $login, $password) = @_; - $sel->get_ok("/login"); - $sel->title_is("Log in to Bugzilla"); - click_and_type($sel, 'Bugzilla_login', $login); - click_and_type($sel, 'Bugzilla_password', $password); - submit($sel, '//input[@id="log_in"]'); -} - -sub login_ok { - my ($sel) = @_; - login(@_); - $sel->title_is('Bugzilla Main Page'); -} - -sub logout_ok { - my ($sel) = @_; - $sel->get_ok('/index.cgi?logout=1'); - $sel->title_is("Logged Out"); -} - __DATA__ -{"Type":"Notification","Message":"{\"eventType\":\"Bounce\",\"bounce\":{\"bounceType\":\"Permanent\",\"bounceSubType\":\"General\",\"bouncedRecipients\":[{\"emailAddress\":\"newbie@mozilla.example\",\"action\":\"failed\",\"status\":\"5.1.1\",\"diagnosticCode\":\"smtp;5505.1.1userunknown\"}],\"timestamp\":\"2017-08-05T00:41:02.669Z\",\"feedbackId\":\"01000157c44f053b-61b59c11-9236-11e6-8f96-7be8aexample-000000\",\"reportingMTA\":\"dsn;mta.example.com\"},\"mail\":{\"timestamp\":\"2017-08-05T00:40:02.012Z\",\"source\":\"BugzillaDaemon\",\"sourceArn\":\"arn:aws:ses:us-east-1:123456789012:identity/bugzilla@mozilla.bugs\",\"sendingAccountId\":\"123456789012\",\"messageId\":\"EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000\",\"destination\":[\"newbie@mozilla.example\"],\"headersTruncated\":false,\"headers\":[{\"name\":\"From\",\"value\":\"BugzillaDaemon\"},{\"name\":\"To\",\"value\":\"newbie@mozilla.example\"},{\"name\":\"Subject\",\"value\":\"MessagesentfromAmazonSES\"},{\"name\":\"MIME-Version\",\"value\":\"1.0\"},{\"name\":\"Content-Type\",\"value\":\"multipart/alternative;boundary=\"}],\"commonHeaders\":{\"from\":[\"BugzillaDaemon\"],\"to\":[\"newbie@mozilla.example\"],\"messageId\":\"EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000\",\"subject\":\"MessagesentfromAmazonSES\"},\"tags\":{\"ses:configuration-set\":[\"ConfigSet\"],\"ses:source-ip\":[\"192.0.2.0\"],\"ses:from-domain\":[\"example.com\"],\"ses:caller-identity\":[\"ses_user\"]}}}"} +{"Type":"Notification","Message":"{\"eventType\":\"Bounce\",\"bounce\":{\"bounceType\":\"Permanent\",\"bounceSubType\":\"General\",\"bouncedRecipients\":[{\"emailAddress\":\"bouncer@mozilla.example\",\"action\":\"failed\",\"status\":\"5.1.1\",\"diagnosticCode\":\"smtp;5505.1.1userunknown\"}],\"timestamp\":\"2017-08-05T00:41:02.669Z\",\"feedbackId\":\"01000157c44f053b-61b59c11-9236-11e6-8f96-7be8aexample-000000\",\"reportingMTA\":\"dsn;mta.example.com\"},\"mail\":{\"timestamp\":\"2017-08-05T00:40:02.012Z\",\"source\":\"BugzillaDaemon\",\"sourceArn\":\"arn:aws:ses:us-east-1:123456789012:identity/bugzilla@mozilla.bugs\",\"sendingAccountId\":\"123456789012\",\"messageId\":\"EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000\",\"destination\":[\"bouncer@mozilla.example\"],\"headersTruncated\":false,\"headers\":[{\"name\":\"From\",\"value\":\"BugzillaDaemon\"},{\"name\":\"To\",\"value\":\"bouncer@mozilla.example\"},{\"name\":\"Subject\",\"value\":\"MessagesentfromAmazonSES\"},{\"name\":\"MIME-Version\",\"value\":\"1.0\"},{\"name\":\"Content-Type\",\"value\":\"multipart/alternative;boundary=\"}],\"commonHeaders\":{\"from\":[\"BugzillaDaemon\"],\"to\":[\"bouncer@mozilla.example\"],\"messageId\":\"EXAMPLE7c191be45-e9aedb9a-02f9-4d12-a87d-dd0099a07f8a-000000\",\"subject\":\"MessagesentfromAmazonSES\"},\"tags\":{\"ses:configuration-set\":[\"ConfigSet\"],\"ses:source-ip\":[\"192.0.2.0\"],\"ses:from-domain\":[\"example.com\"],\"ses:caller-identity\":[\"ses_user\"]}}}"} diff --git a/t/bmo/oauth2-client.t b/t/bmo/oauth2-client.t new file mode 100644 index 0000000000..9eeb3f2e9e --- /dev/null +++ b/t/bmo/oauth2-client.t @@ -0,0 +1,57 @@ +#!/usr/bin/env perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +use strict; +use warnings; +use 5.10.1; +use lib qw( . qa/t/lib local/lib/perl5 ); + +use Mojo::Base -strict; +use QA::Util; +use Test::More; + +BEGIN { + plan skip_all => "these tests only run in CI" + unless $ENV{CI} && $ENV{CIRCLE_JOB} eq 'test_bmo'; +} + +my ($sel, $config) = get_selenium(); + +$sel->set_implicit_wait_timeout(600); + +### Non-Mozilla normal user tests + +# Clicking the OAuth2 login button and then creating a new account automatically +$sel->get_ok('/login', undef, 'Go to the home page'); +$sel->title_is('Log in to Bugzilla', 'Log in to Bugzilla'); +$sel->is_element_present_ok( + '//div[@id="main-inner"]/div[@class="oauth2-login"]/a/button', + 'OAuth2 login button is present'); +$sel->click_ok('//div[@id="main-inner"]/div[@class="oauth2-login"]/a/button', + 'Click OAuth2 login button'); +$sel->click_ok('//a[contains(text(),"Connect")]', + 'Click OAuth2 provider login'); +$sel->title_is('Bugzilla Main Page', 'User is logged into Bugzilla'); +$sel->logout_ok(); + +# Trying to login using normal username and password should redirect automatically +$sel->login($ENV{BZ_TEST_OAUTH2_NORMAL_USER}, $ENV{BZ_TEST_OAUTH2_PASSWORD}); +$sel->click_ok('//a[contains(text(),"Connect")]', + 'Click OAuth2 provider login'); +$sel->title_is('Bugzilla Main Page', 'User is logged into Bugzilla'); +$sel->logout_ok(); + +### Mozilla user tests + +# Logging in with Mozilla.com account should automatically redirect to OAuth2 login +$sel->login($ENV{BZ_TEST_OAUTH2_MOZILLA_USER}, $ENV{BZ_TEST_OAUTH2_PASSWORD}); +$sel->click_ok('//a[contains(text(),"Connect")]', + 'Click OAuth2 provider login'); +$sel->title_is('Bugzilla Main Page', 'User is logged into Bugzilla'); +$sel->logout_ok(); + +done_testing; diff --git a/t/bmo/passwords.t b/t/bmo/passwords.t index 9e4deedc05..e4cbf9a55f 100644 --- a/t/bmo/passwords.t +++ b/t/bmo/passwords.t @@ -4,22 +4,24 @@ use strict; use warnings; use autodie; +use lib qw( . qa/t/lib local/lib/perl5 ); + use Mojo::Base -strict; +use QA::Util; use Test::More; -use Test::Selenium::Remote::Driver; BEGIN { plan skip_all => "these tests only run in CI" unless $ENV{CI} && $ENV{CIRCLE_JOB} eq 'test_bmo'; } -my $ADMIN_LOGIN = $ENV{BZ_TEST_ADMIN} // 'admin@mozilla.bugs'; -my $ADMIN_PW_OLD = $ENV{BZ_TEST_ADMIN_PASS} // 'Te6Oovohch'; +my $ADMIN_LOGIN = $ENV{BZ_TEST_ADMIN} // 'admin@mozilla.bugs'; +my $ADMIN_PW_OLD = $ENV{BZ_TEST_ADMIN_PASS} // 'Te6Oovohch'; my $ADMIN_PW_NEW = $ENV{BZ_TEST_ADMIN_NEWPASS} // 'she7Ka8t'; my @require_env = qw( BZ_BASE_URL - BZ_TEST_NEWBIE + BZ_TEST_NEWBIE_USER BZ_TEST_NEWBIE_PASS TWD_HOST TWD_PORT @@ -28,239 +30,120 @@ my @require_env = qw( my @missing_env = grep { !exists $ENV{$_} } @require_env; BAIL_OUT("Missing env: @missing_env") if @missing_env; -my $sel = Test::Selenium::Remote::Driver->new( - base_url => $ENV{BZ_BASE_URL}, - browser => 'firefox', - version => '', - javascript => 1 -); - -eval { - $sel->set_implicit_wait_timeout(600); - - login_ok($sel, $ADMIN_LOGIN, $ADMIN_PW_OLD); +my ($sel, $config) = get_selenium(); - change_password($sel, $ADMIN_PW_OLD . "x", "newpassword2", "newpassword2"); - $sel->title_is("Incorrect Old Password"); +$sel->set_implicit_wait_timeout(600); - change_password($sel, $ADMIN_PW_OLD, "password", "password"); - $sel->title_is("Password Fails Requirements"); +$sel->login_ok($ADMIN_LOGIN, $ADMIN_PW_OLD); - change_password($sel, $ADMIN_PW_OLD, $ADMIN_PW_NEW, $ADMIN_PW_NEW); - $sel->title_is("User Preferences"); - logout_ok($sel); +$sel->change_password($ADMIN_PW_OLD . "x", "newpassword2", "newpassword2"); +$sel->title_is("Incorrect Old Password"); - login_ok($sel, $ADMIN_LOGIN, $ADMIN_PW_NEW); +$sel->change_password($ADMIN_PW_OLD, "password", "password"); +$sel->title_is("Password Fails Requirements"); - # we don't protect against password re-use - change_password($sel, $ADMIN_PW_NEW, $ADMIN_PW_OLD, $ADMIN_PW_OLD); - $sel->title_is("User Preferences"); - logout_ok($sel); +$sel->change_password($ADMIN_PW_OLD, $ADMIN_PW_NEW, $ADMIN_PW_NEW); +$sel->title_is("User Preferences"); +$sel->logout_ok(); - login_ok($sel, $ENV{BZ_TEST_NEWBIE}, $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->login_ok($ADMIN_LOGIN, $ADMIN_PW_NEW); - $sel->get_ok("/editusers.cgi"); - $sel->title_is("Authorization Required"); - logout_ok($sel); +# we don't protect against password re-use +$sel->change_password($ADMIN_PW_NEW, $ADMIN_PW_OLD, $ADMIN_PW_OLD); +$sel->title_is("User Preferences"); +$sel->logout_ok(); - login_ok($sel, $ADMIN_LOGIN, $ADMIN_PW_OLD); +$sel->login_ok($ENV{BZ_TEST_NEWBIE_USER}, $ENV{BZ_TEST_NEWBIE_PASS}); - toggle_require_password_change($sel, $ENV{BZ_TEST_NEWBIE}); - logout_ok($sel); +$sel->get_ok("/editusers.cgi"); +$sel->title_is("Authorization Required"); +$sel->logout_ok(); - login($sel, $ENV{BZ_TEST_NEWBIE}, $ENV{BZ_TEST_NEWBIE_PASS}); - $sel->title_is('Password change required'); - click_and_type($sel, "old_password", $ENV{BZ_TEST_NEWBIE_PASS}); - click_and_type($sel, "new_password1", "password"); - click_and_type($sel, "new_password2", "password"); - submit($sel, '//input[@id="submit"]'); - $sel->title_is('Password Fails Requirements'); +$sel->login_ok($ADMIN_LOGIN, $ADMIN_PW_OLD); - $sel->go_back_ok(); - $sel->title_is('Password change required'); - click_and_type($sel, "old_password", $ENV{BZ_TEST_NEWBIE_PASS}); - click_and_type($sel, "new_password1", "!!" . $ENV{BZ_TEST_NEWBIE_PASS}); - click_and_type($sel, "new_password2", "!!" . $ENV{BZ_TEST_NEWBIE_PASS}); - submit($sel, '//input[@id="submit"]'); - $sel->title_is('Password Changed'); - change_password( - $sel, - "!!" . $ENV{BZ_TEST_NEWBIE_PASS}, - $ENV{BZ_TEST_NEWBIE_PASS}, - $ENV{BZ_TEST_NEWBIE_PASS} - ); - $sel->title_is("User Preferences"); +$sel->toggle_require_password_change($ENV{BZ_TEST_NEWBIE_USER}); +$sel->logout_ok(); - $sel->get_ok("/userprefs.cgi?tab=account"); - $sel->title_is("User Preferences"); - click_link($sel, "I forgot my password"); - $sel->body_text_contains( - [ - "A token for changing your password has been emailed to you.", - "Follow the instructions in that email to change your password." - ], - ); - my $token = get_token(); - ok($token, "got a token from resetting password"); - $sel->get_ok("/token.cgi?t=$token&a=cfmpw"); - $sel->title_is('Change Password'); - click_and_type($sel, "password", "nopandas"); - click_and_type($sel, "matchpassword", "nopandas"); - submit($sel, '//input[@id="update"]'); - $sel->title_is('Password Fails Requirements'); - $sel->go_back_ok(); - $sel->title_is('Change Password'); - click_and_type($sel, "password", '??' . $ENV{BZ_TEST_NEWBIE_PASS}); - click_and_type($sel, "matchpassword", '??' . $ENV{BZ_TEST_NEWBIE_PASS}); - submit($sel, '//input[@id="update"]'); - $sel->title_is('Password Changed'); - $sel->get_ok("/token.cgi?t=$token&a=cfmpw"); - $sel->title_is('Token Does Not Exist'); - $sel->get_ok("/login"); - $sel->title_is('Log in to Bugzilla'); - login_ok($sel, $ENV{BZ_TEST_NEWBIE}, "??" . $ENV{BZ_TEST_NEWBIE_PASS}); - change_password( - $sel, - "??" . $ENV{BZ_TEST_NEWBIE_PASS}, - $ENV{BZ_TEST_NEWBIE_PASS}, - $ENV{BZ_TEST_NEWBIE_PASS} - ); - $sel->title_is("User Preferences"); +$sel->login($ENV{BZ_TEST_NEWBIE_USER}, $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->title_is('Password change required'); +$sel->click_and_type("old_password", $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_and_type("new_password1", "password"); +$sel->click_and_type("new_password2", "password"); +$sel->click_ok('//input[@id="submit"]'); +$sel->title_is('Password Fails Requirements'); - logout_ok($sel); - open my $fh, '>', '/app/data/mailer.testfile'; - close $fh; - - $sel->get('/createaccount.cgi'); - $sel->title_is('Create a new Bugzilla account'); - click_and_type($sel, 'login', $ENV{BZ_TEST_NEWBIE2}); - $sel->find_element('//input[@id="etiquette"]', 'xpath')->click(); - submit($sel, '//input[@value="Create Account"]'); - $sel->title_is( - "Request for new user account '$ENV{BZ_TEST_NEWBIE2}' submitted"); - my ($create_token) - = search_mailer_testfile(qr{/token\.cgi\?t=([^&]+)&a=request_new_account}xs); - $sel->get("/token.cgi?t=$create_token&a=request_new_account"); - click_and_type($sel, 'passwd1', $ENV{BZ_TEST_NEWBIE2_PASS}); - click_and_type($sel, 'passwd2', $ENV{BZ_TEST_NEWBIE2_PASS}); - submit($sel, '//input[@value="Create"]'); +$sel->go_back_ok(); +$sel->title_is('Password change required'); +$sel->click_and_type("old_password", $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_and_type("new_password1", "!!" . $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_and_type("new_password2", "!!" . $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_ok('//input[@id="submit"]'); +$sel->title_is('Password Changed'); +$sel->change_password( + "!!" . $ENV{BZ_TEST_NEWBIE_PASS}, + $ENV{BZ_TEST_NEWBIE_PASS}, + $ENV{BZ_TEST_NEWBIE_PASS} +); +$sel->title_is("User Preferences"); + +$sel->get_ok("/userprefs.cgi?tab=account"); +$sel->title_is("User Preferences"); +$sel->click_link("I forgot my password"); +$sel->body_text_contains( + [ + "A token for changing your password has been emailed to you.", + "Follow the instructions in that email to change your password." + ], +); +my $token = $sel->get_token(); +ok($token, "got a token from resetting password"); +$sel->get_ok("/token.cgi?t=$token&a=cfmpw"); +$sel->title_is('Change Password'); +$sel->click_and_type("password", "nopandas"); +$sel->click_and_type("matchpassword", "nopandas"); +$sel->click_ok('//input[@id="update"]'); +$sel->title_is('Password Fails Requirements'); +$sel->go_back_ok(); +$sel->title_is('Change Password'); +$sel->click_and_type("password", '??' . $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_and_type("matchpassword", '??' . $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->click_ok('//input[@id="update"]'); +$sel->title_is('Password Changed'); +$sel->get_ok("/token.cgi?t=$token&a=cfmpw"); +$sel->title_is('Token Does Not Exist'); +$sel->get_ok("/login"); +$sel->title_is('Log in to Bugzilla'); +$sel->login_ok($ENV{BZ_TEST_NEWBIE_USER}, "??" . $ENV{BZ_TEST_NEWBIE_PASS}); +$sel->change_password( + "??" . $ENV{BZ_TEST_NEWBIE_PASS}, + $ENV{BZ_TEST_NEWBIE_PASS}, + $ENV{BZ_TEST_NEWBIE_PASS} +); +$sel->title_is("User Preferences"); + +$sel->logout_ok(); +open my $fh, '>', '/app/data/mailer.testfile'; +close $fh; + +$sel->get_ok('/createaccount.cgi'); +$sel->title_is('Create a new Bugzilla account'); +$sel->click_and_type('login', $ENV{BZ_TEST_NEWBIE2_USER}); +$sel->find_element('//input[@id="etiquette"]', 'xpath')->click(); +$sel->click_ok('//input[@value="Create Account"]'); +$sel->title_is( + "Request for new user account '$ENV{BZ_TEST_NEWBIE2_USER}' submitted"); +my ($create_token) + = $sel->search_mailer_testfile( + qr{/token\.cgi\?t=([^&]+)&a=request_new_account}xs); +$sel->get_ok("/token.cgi?t=$create_token&a=request_new_account"); +$sel->click_and_type('passwd1', $ENV{BZ_TEST_NEWBIE2_PASS}); +$sel->click_and_type('passwd2', $ENV{BZ_TEST_NEWBIE2_PASS}); +$sel->click_ok('//input[@value="Create"]'); + +$sel->title_is('Bugzilla Main Page'); +$sel->body_text_contains([ + "The user account $ENV{BZ_TEST_NEWBIE2_USER} has been created", "successfully" +]); - $sel->title_is('Bugzilla Main Page'); - $sel->body_text_contains([ - "The user account $ENV{BZ_TEST_NEWBIE2} has been created", "successfully" - ]); -}; -if ($@) { - fail("got exception $@"); -} done_testing(); -sub submit { - my ($sel, $xpath) = @_; - $sel->find_element($xpath, 'xpath')->click_ok('Submit OK'); -} - -sub get_token { - my $token; - my $count = 0; - do { - sleep 1 if $count++; - open my $fh, '<', '/app/data/mailer.testfile'; - my $content = do { - local $/ = undef; - <$fh>; - }; - ($token) = $content =~ m!/token\.cgi\?t=3D([^&]+)&a=3Dcfmpw!s; - close $fh; - } until $token || $count > 60; - return $token; -} - -sub search_mailer_testfile { - my ($regexp) = @_; - my $content = ""; - my @result; - my $count = 0; - do { - sleep 1 if $count++; - open my $fh, '<', '/app/data/mailer.testfile'; - $content .= do { - local $/ = undef; - <$fh>; - }; - close $fh; - my $decoded = $content; - $decoded =~ s/\r\n/\n/gs; - $decoded =~ s/=\n//gs; - $decoded =~ s/=([[:xdigit:]]{2})/chr(hex($1))/ges; - @result = $decoded =~ $regexp; - } until @result || $count > 60; - return @result; -} - -sub click_and_type { - my ($sel, $name, $text) = @_; - - eval { - my $el - = $sel->find_element(qq{//*[\@id="bugzilla-body"]//input[\@name="$name"]}, - 'xpath'); - $el->click(); - $sel->send_keys_to_active_element($text); - pass("found $name and typed $text"); - }; - if ($@) { - fail("failed to find $name"); - } -} - -sub click_link { - my ($sel, $text) = @_; - my $el = $sel->find_element($text, 'link_text'); - $el->click(); -} - -sub change_password { - my ($sel, $old, $new1, $new2) = @_; - $sel->get_ok("/userprefs.cgi?tab=account"); - $sel->title_is("User Preferences"); - click_and_type($sel, "old_password", $old); - click_and_type($sel, "new_password1", $new1); - click_and_type($sel, "new_password2", $new2); - submit($sel, '//input[@value="Submit Changes"]'); -} - -sub toggle_require_password_change { - my ($sel, $login) = @_; - $sel->get_ok("/editusers.cgi"); - $sel->title_is("Search users"); - click_and_type($sel, 'matchstr', $login); - submit($sel, '//input[@id="search"]'); - $sel->title_is("Select user"); - click_link($sel, $login); - $sel->find_element('//input[@id="password_change_required"]')->click; - submit($sel, '//input[@id="update"]'); - $sel->title_is("User $login updated"); -} - -sub login { - my ($sel, $login, $password) = @_; - - $sel->get_ok("/login"); - $sel->title_is("Log in to Bugzilla"); - click_and_type($sel, 'Bugzilla_login', $login); - click_and_type($sel, 'Bugzilla_password', $password); - submit($sel, '//input[@id="log_in"]'); -} - -sub login_ok { - my ($sel) = @_; - login(@_); - $sel->title_is('Bugzilla Main Page'); -} - -sub logout_ok { - my ($sel) = @_; - $sel->get_ok('/index.cgi?logout=1'); - $sel->title_is("Logged Out"); -} diff --git a/t/mojo-oauth2.t b/t/mojo-oauth2-provider.t similarity index 100% rename from t/mojo-oauth2.t rename to t/mojo-oauth2-provider.t diff --git a/template/en/default/account/auth/login-small.html.tmpl b/template/en/default/account/auth/login-small.html.tmpl index a860d071c1..5f4d24a663 100644 --- a/template/en/default/account/auth/login-small.html.tmpl +++ b/template/en/default/account/auth/login-small.html.tmpl @@ -40,6 +40,13 @@ class='show_mini_login_form' data-qs-suffix="[% qs_suffix FILTER html %]">Log In

diff --git a/template/en/default/admin/oauth/confirm-delete.html.tmpl b/template/en/default/admin/oauth/provider/confirm-delete.html.tmpl similarity index 97% rename from template/en/default/admin/oauth/confirm-delete.html.tmpl rename to template/en/default/admin/oauth/provider/confirm-delete.html.tmpl index afc6f8dfbe..207edf8a14 100644 --- a/template/en/default/admin/oauth/confirm-delete.html.tmpl +++ b/template/en/default/admin/oauth/provider/confirm-delete.html.tmpl @@ -21,7 +21,7 @@

Do you really want to delete this client?

-

+ diff --git a/template/en/default/admin/oauth/create.html.tmpl b/template/en/default/admin/oauth/provider/create.html.tmpl similarity index 98% rename from template/en/default/admin/oauth/create.html.tmpl rename to template/en/default/admin/oauth/provider/create.html.tmpl index 147827a046..667130d8ee 100644 --- a/template/en/default/admin/oauth/create.html.tmpl +++ b/template/en/default/admin/oauth/provider/create.html.tmpl @@ -3,7 +3,7 @@ onload = "document.forms['f'].client_id.focus()" %] - + diff --git a/template/en/default/admin/oauth/edit.html.tmpl b/template/en/default/admin/oauth/provider/edit.html.tmpl similarity index 98% rename from template/en/default/admin/oauth/edit.html.tmpl rename to template/en/default/admin/oauth/provider/edit.html.tmpl index 899d63882f..07501ec12a 100644 --- a/template/en/default/admin/oauth/edit.html.tmpl +++ b/template/en/default/admin/oauth/provider/edit.html.tmpl @@ -3,7 +3,7 @@ onload = "document.forms['f'].client_id.select()" %] - +
diff --git a/template/en/default/admin/oauth/list.html.tmpl b/template/en/default/admin/oauth/provider/list.html.tmpl similarity index 78% rename from template/en/default/admin/oauth/list.html.tmpl rename to template/en/default/admin/oauth/provider/list.html.tmpl index 35b1c416b8..af083255cb 100644 --- a/template/en/default/admin/oauth/list.html.tmpl +++ b/template/en/default/admin/oauth/provider/list.html.tmpl @@ -6,7 +6,7 @@ { name => "description" heading => "Edit client..." - contentlink => "admin/oauth/edit?id=%%id%%" + contentlink => "admin/oauth/provider/edit?id=%%id%%" }, { name => "active" @@ -17,7 +17,7 @@ name => "action" heading => "Action" content => "Delete" - contentlink => "admin/oauth/delete?id=%%id%%" + contentlink => "admin/oauth/provider/delete?id=%%id%%" } ] %] @@ -30,6 +30,6 @@ overrides = overrides %] -Add a client. +Add a client. [% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/params/oauth2client.html.tmpl b/template/en/default/admin/params/oauth2client.html.tmpl new file mode 100644 index 0000000000..9608420fff --- /dev/null +++ b/template/en/default/admin/params/oauth2client.html.tmpl @@ -0,0 +1,25 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% + title = "OAuth2 Client" + desc = "Configure as an OAuth2 Client for Authentication" +%] + +[% + param_descs = { + oauth2_client_enabled => "OAuth2 Client Enabled", + oauth2_client_domain => "OAuth2 Client Domain", + oauth2_client_id => "OAuth2 Client ID", + oauth2_client_secret => "Oauth2 Client Secret" + oauth2_client_token_url => "OAuth2 Client Access Token URL", + oauth2_client_authorize_url => "OAuth2 Client Authorize URL", + oauth2_client_userinfo_url => "OAuth2 Client User Information URL", + oauth2_client_scopes => "OAuth2 Client Scopes Requested (space separated)", + } +%] diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl index 7747dab91b..6358f197f6 100644 --- a/template/en/default/global/header.html.tmpl +++ b/template/en/default/global/header.html.tmpl @@ -220,6 +220,11 @@ href="[% atomlink FILTER html %]"> [% END %] + [%# Required for login button icons %] + + + + [%# Required for the 'Auto-discovery' feature in Firefox 2 and IE 7. %] diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index 6127063d28..277be778ac 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -305,6 +305,11 @@ The token is not valid. It could be because you loaded this page more than [%= constants.MAX_TOKEN_AGE FILTER html %] days ago. + [% ELSIF error == "oauth2_userinfo_error" %] + [% title = 'Error Occurred Logging In' %] + An error occurred completing the login process using the single signon provider. + Contact an administrator explaining the problem. + [% ELSIF error == "attachment_deletion_disabled" %] [% title = "Attachment Deletion Disabled" %] Attachment deletion is disabled on this installation. diff --git a/token.cgi b/token.cgi index 9ce010aa65..bfda03b2fa 100755 --- a/token.cgi +++ b/token.cgi @@ -301,12 +301,12 @@ sub changeEmail { # Update the user's login name in the profiles table and delete the token # from the tokens table. $dbh->bz_start_transaction(); - $dbh->do( - q{UPDATE profiles - SET login_name = ? - WHERE userid = ?}, undef, ($new_email, $userid) - ); + + my $user = Bugzilla::User->new({name => $old_email}); + $user->set_login($new_email); + $user->update({keep_session => 1}); Bugzilla->memcached->clear({table => 'profiles', id => $userid}); + $dbh->do('DELETE FROM tokens WHERE token = ?', undef, $token); $dbh->do( q{DELETE FROM tokens WHERE userid = ? @@ -314,7 +314,6 @@ sub changeEmail { ); # The email address has been changed, so we need to rederive the groups - my $user = new Bugzilla::User($userid); $user->derive_regexp_groups; $dbh->bz_commit_transaction(); From 7b27072b324c987f1f70dfe9c75cb94e2d83dd0a Mon Sep 17 00:00:00 2001 From: dklawren Date: Tue, 25 May 2021 12:43:50 -0400 Subject: [PATCH 2/2] Bug 1712619 - [GITHUBAUTH] Use authorization header instead of access_token query parameter when retrieving email addresses --- extensions/GitHubAuth/lib/Client.pm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/extensions/GitHubAuth/lib/Client.pm b/extensions/GitHubAuth/lib/Client.pm index a084b14443..a94960d7ab 100644 --- a/extensions/GitHubAuth/lib/Client.pm +++ b/extensions/GitHubAuth/lib/Client.pm @@ -95,10 +95,11 @@ sub get_access_token { sub get_user_emails { my ($self, $access_token) = @_; - my $uri = URI->new(GH_USER_EMAILS_URI); - $uri->query_form(access_token => $access_token); - my $response = $self->user_agent->get($uri, Accept => 'application/json'); + my $response = $self->user_agent->get(GH_USER_EMAILS_URI, + 'Accept' => 'application/json', + 'Authorization' => "token $access_token" + ); return $self->_handle_response($response); }